Вверх ↑
Этот топик читают: Гость
Гость
Ответов: 17029
Рейтинг: 0
#16: 2014-02-03 10:12:34 правка | ЛС | профиль | цитата


Редактировалось 2 раз(а), последний 2025-01-10 18:25:44
карма: 0

0
Ответов: 824
Рейтинг: 138
#17: 2014-02-03 14:28:21 ЛС | профиль | цитата
93-172-136-129.bb.netvisi писал(а):
GROUP BY sch, strftime('%Y-%m',provodki)
Не понял. Где группировку применить - в каком именно триггере, в каком месте?
И почему тут strftime('%Y-%m',provodki) имя таблицы, а не поля?
карма: 1

0
Ответов: 16884
Рейтинг: 1239
#18: 2014-02-03 15:50:37 ЛС | профиль | цитата
1. При расчете конечного остатка.
2. strftime('%Y-%m',provodk.period)


карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 824
Рейтинг: 138
#19: 2014-02-03 18:16:57 ЛС | профиль | цитата
Tad писал(а):
При расчете конечного остатка.

О, теперь понял!
карма: 1

0
Ответов: 16884
Рейтинг: 1239
#20: 2014-02-03 18:41:21 ЛС | профиль | цитата
sashaoli, GROUP BY работает в ~10 раз быстрее чем WHILE
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 824
Рейтинг: 138
#21: 2014-02-03 20:47:29 ЛС | профиль | цитата
Tad писал(а):
GROUP BY работает в ~10 раз быстрее чем WHILE
Поподробнее плз... Э-э-е ... Как применять?
Вот запрос на обновление:
#sql
update itogi set
ost_end = ifnull(ost_start,0) + ifnull(ob_d,0) - ifnull(ob_k,0)
where sch_id = NEW.sch_d and date(period) >= date(NEW.period);
Правильно ли я его изменняю?
#sql
update itogi set
ost_end = ifnull(ost_start,0) + ifnull(ob_d,0) - ifnull(ob_k,0)
GROUP BY NEW.sch_d, strftime('%Y-%m',NEW.period);
------------ Дoбавленo в 20.47:
ЭТО БРЕД Сивой кобылы! писал(а):
Правильно ли я его изменняю?
#sql
update itogi set
ost_end = ifnull(ost_start,0) + ifnull(ob_d,0) - ifnull(ob_k,0)
GROUP BY NEW.sch_d, strftime('%Y-%m',NEW.period);

Ну мля! "РАЗЖУЙТЕ беззубому"! Может не GROUP BY, а ORDER BY ?
карма: 1

0
Ответов: 16884
Рейтинг: 1239
#22: 2014-02-04 01:46:49 ЛС | профиль | цитата
Ещё для размышления
1. Если при создании таблицы применить
CREATE TABLE t(x INTEGER PRIMARY KEY ASC, y, z);
-- или 
CREATE TABLE t(x INTEGER, y, z, PRIMARY KEY(x ASC));
то rowid будет равен id и появится возможность производить выборку и поиск по rowid, что в два раза быстрее чем по id. 2. И в продолжение
SELECT last_insert_rowid(); -- возвращает rowid последней введенной строки
3. Если сразу после INSERT выполнить
UPDATE itogi  SET ost_k='500' where rowid=last_insert_rowid()
То точно попадешь на ту строку, что нужна. Жуй сам.

Кажется я понял почему мы говорим на разных языках.
Ты ost_k хочешь иметь в конце месяца или на каждую проводку ?
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 824
Рейтинг: 138
#23: 2014-02-04 10:58:23 ЛС | профиль | цитата
Tad писал(а):
Ты ost_k хочешь иметь в конце месяца или на каждую проводку ?

Один раз в месяц по каждому счету, который участвует в проводках.
Например:
В 1-м месяце может быть несколько похожих проводок (табл. "provod")
(Вид записи проводки "счет дебет"-"счет кредит" "сумма проводки")
201-631 300,00 поступление материалов от поставщика
201-631 200,00 поступление материалов от поставщика 2
201-372 100,00 поступление материалов от подотчетного лица
......
Отсюда записываем в табл. "itogi" один раз в периоде
оборот по дебету 201 - (300 + 200 + 100 = 600), рассчитываем остаток на начало и конец периода  по счету 201
оборот по кредиту 631 - (300 + 200 = 500), рассчитываем остаток на начало и конец периода по счету 631
оборот по кредиту 372 - (100), рассчитываем остаток на начало и конец периода по счету 372
------------ Дoбавленo в 10.58:
Но вот возникает ситуация, когда пользователь обнаружил ошибку в проводке (не та сумма, счет по дебету или кредиту) например в январе, хотя данные уже есть за март, в "provod". Изменяет это в табл. "provod". Естественно после изменения данных нужно произвести пересчет оборотов и остатков по определенным счетам начиная с периода в котором произведены изменения и заканчивая последним периодом, который имеется в проводках.
И здесь, у меня проблема, не всегда рассчитывается конечный остаток по счету в последнем периоде...
К сожалению last_insert_rowid() здесь не поможет....

карма: 1

0
Ответов: 2125
Рейтинг: 159
#24: 2014-02-04 12:27:56 ЛС | профиль | цитата
sashaoli писал(а):
Может не GROUP BY, а ORDER BY ?

ORDER BY надо использовать только в SELECT для сортировки выбираемых данных
GROUP BY используется только если выбираемые данные суммируются или находится максимум/минимум, причём в этой части перечисляются поля, которые выбираются без указанных агрегирующих функций
карма: 1

0
Ответов: 824
Рейтинг: 138
#25: 2014-02-04 12:53:19 ЛС | профиль | цитата
tsdima писал(а):
ORDER BY надо использовать только в SELECT
Не только в SELECT, но и в UPDATE тоже можно. Optional LIMIT and ORDER BY Clauses
Хотя я мало понимаю для чего...
карма: 1

0
Ответов: 2125
Рейтинг: 159
#26: 2014-02-04 14:13:28 ЛС | профиль | цитата
sashaoli писал(а):
Хотя я мало понимаю для чего...

Вот когда поймёшь, тогда тоже можно будет
карма: 1

0
Ответов: 824
Рейтинг: 138
#27: 2014-02-04 14:27:22 ЛС | профиль | цитата
tsdima писал(а):
Вот когда поймёшь, тогда тоже можно будет
Когда, я, это пойму, то - уже ненужно будет
Там на англицком, я с им не очень... Так, что пока пойму...

Но вопрос актуален - не всегда рассчитывается конечный остаток по счету в последнем периоде
карма: 1

0
Ответов: 16884
Рейтинг: 1239
#28: 2014-02-04 20:00:18 ЛС | профиль | цитата
sashaoli писал(а):
Но вот возникает ситуация, когда пользователь обнаружил ошибку в проводке (не та сумма, счет по дебету или кредиту) например в январе, хотя данные уже есть за март, в "provod". Изменяет это в табл. "provod". Естественно после изменения данных нужно произвести пересчет оборотов и остатков по определенным счетам начиная с периода в котором произведены изменения и заканчивая последним периодом, который имеется в проводках.
Когда-то исправления в карточках счетов не допускались. Никаких подтирок и помарок. Да ещё и в закрытом месяце. Делалась "обратная" проводка в том месяце, когда была обнаружена ошибка. В твоём случае - в марте. Допустивший ошибку - лишался премии. И это работало очень эффективно.
Какой бардак в бухучете в Украине сегодня - не знаю.

Про ORDER BY и GROUP BY tsdima дал исчерпывающую информацию.

описание SQLite писал(а):
Если SQLite.dll скомпилирована с опцией SQLITE_ENABLE_UPDATE_DELETE_LIMIT то синтаксис UPDATE может быть дополнен операторами ORDER BY и LIMIT
Как скомпилирована dll, которой ты пользуешься, тоже не знаю.

Ну и на закуску
SELECT sch_id, max(period) AS "на дату" , (ost_n + sum(ob_d)- sum(ob_k)) AS ost_k FROM itogi WHERE strftime('%Y-%m', period)='2014-01' GROUP BY sch_id;
Выдаст тебе сальдо на конец месяца по всем счетам за январь месяц 2014 года. А так за год:
SELECT sch_id, max(period) AS "на дату" , (ost_n + sum(ob_d)- sum(ob_k)) AS ost_k FROM itogi WHERE strftime('%Y', period)='2014' GROUP BY sch_id;
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 824
Рейтинг: 138
#29: 2014-02-04 22:30:50 ЛС | профиль | цитата
Tad писал(а):
Когда-то исправления в карточках счетов не допускались
Какой бардак в бухучете в Украине сегодня - не знаю.
Ответ
Карточка счета - мемориальный ордер. Соответственно "Мемориально-ордерная система веденния бух. учета"
На данный момент применяется в бюджетных организациях.
Во всех остальных организациях (хозрасчетных) применяется "Журнально-ордерная система"
И с некоторых пор выделяют еще одну систему ведения учета. Какую, как думаете?
Механизированная или машинная система учета.
В Украине, в 2000 г. (если мне не изменяет память) правила бух. учета были адаптированы к международным.
То-есть разработаны "Стандарты бухгалтерского учета" на основе международных.
Сейчас в Украине возможно вести учет по двум стандартам: по внутренним (Украинским) или международным. (Что практически однох...но)
sashaoli писал(а):
Делалась "обратная" проводка
Ответ
Это называется "СТОРНО"Записывается ошибочная проводка красными чернилами,
а рядом, ниже, темными чернилами - правильная
_________________________________
201-631 100,00 неправильно
201-631 150,00 правильно
_________________________________
Tad писал(а):
Делалась "обратная" проводка в том месяце, когда была обнаружена ошибка. В твоём случае - в марте.
Есть предприятия которые не имеют бухгалтерии или штатного бухгалтера, и отчетность у них раз в квартал или раз в год.
Они нанимают бухгалтера со стороны.
И вот, я (не я), прихожу на такую фирму, и мне нужно быстренько-быстренько свести баланс за последний квартал (оборотно-сальдовая ведомость)...
В таком случае, я, могу где-то допустить ошибку, "чиста" технически? А Вы - не допустили бы? Если не допустили - тогда Вы не человек, а комп!
Теперь Вы меня понимаете? Да!? - Это уже радует!
Вот такой случай...
(И на всякий случай, нужно с собой вазелин захватывать. А то , эти случаи разные бывают.)

Tad, я "ваапче" для чего дамп базы выложил?
Мне нужно пересчитать (обновить, перезаписать) остатки в табл. "itogi" при изменении в табл. "provod"
и где-то в триггерах я допустил ОШИБКУ!(Сам ее не ВИЖУ!)
из этого -
не всегда рассчитывается конечный остаток по счету в последнем периоде
карма: 1

0
29
Сообщение
...
Прикрепленные файлы
(файлы не залиты)