|
Подскажите красивое решение - журнал движения денег
|
|||
---|---|---|---|
#18+
Читал про оконные функции, думаю, может их можно использовать, чтоб избежать громоздкого и неоптимального кода. Есть журнал движения денег в кассе OPS. полей много, но основные - это таймстамп операции OPDATE и сумма со знаком (+ приход, минус расход) OPSUM. Как написать вычислимое поле, в котором бы был для каждой операции текущий остаток? Делать в этом поле каждый раз суммирование всех операций за 5 лет - как-то неоптимально. И еще - если это вычисляемое поле не будет в запросе - оно не будет просчитываться и тянуть тормоза? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2020, 13:46 |
|
Подскажите красивое решение - журнал движения денег
|
|||
---|---|---|---|
#18+
GrigoriyFomin, оконные функции здесь не помогут. Читай про хранимые агрегаты ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2020, 13:56 |
|
Подскажите красивое решение - журнал движения денег
|
|||
---|---|---|---|
#18+
GrigoriyFominДелать в этом поле каждый раз суммирование всех операций за 5 лет - как-то неоптимально. А тебе часто приходится выводить журнал движения денег за 5 лет?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2020, 14:03 |
|
Подскажите красивое решение - журнал движения денег
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov А тебе часто приходится выводить журнал движения денег за 5 лет?.. ну тут суть 5 лет в том, что текущий остаток берется от начала эксплуатации программы - это 5 лет. И для каждой операции перелопачивать всю историю как-то некрасиво. Мож есть какая-то хитрость, где хранить предыдущий остаток и для следующей операции не выбирать опять сумму всех предыдущих операций, а лишь приплюсовать к предыдущему остатку значение текущей операции. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2020, 15:07 |
|
Подскажите красивое решение - журнал движения денег
|
|||
---|---|---|---|
#18+
GrigoriyFominМож есть какая-то хитрость Есть. И тебе уже про неё сказали выше. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2020, 17:31 |
|
Подскажите красивое решение - журнал движения денег
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Есть. И тебе уже про неё сказали выше. Если про хранимые агрегаты, то из того, что я прочитал - это дополнительная таблица. Или что-то другое? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2020, 19:12 |
|
Подскажите красивое решение - журнал движения денег
|
|||
---|---|---|---|
#18+
GrigoriyFominИли что-то другое? "Есть много способов приготовить кошку." (с) Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2020, 19:32 |
|
Подскажите красивое решение - журнал движения денег
|
|||
---|---|---|---|
#18+
Например, так 1. Таблица счетов (Account) Id – код счета Number – номер счета Name - наименование Прочие атрибуты 2. Объекты учета Id –код объекта IdGroup –код группы (Клиенты, Поставщики, Валюта) Прочие атрибуты – могут храниться в других таблицах или в общей (зависит от реализации) 3. Журнал операция (проводок) Заголовок содержит общую информацию – Дата, ссылку на документ который вызвал операцию (или бух. проводку) Содержимое Дебет Счет Аналитика (возможно несколько уровней) Количество по дебету (для валюты два знака после запятой (если не в копейках)) Кредит Счет Аналитика (возможно несколько уровней) Количество по дебету (для валюты два знака после запятой (если не в копейках)) Сумма в нац. Валюте или в валюте учета 4. Сальдо Период (месяц год) Счет Аналитика Сальдо (кол.) на начало Сальдо (сумма) на начало Дебет(кол.) Дебет(сумма) Кредит(кол.) Кредит(сумма) При заполнении операций должно рассчитываться сальдо относительно дат операций по счетам и пересчитываться сальдо на начало за последующие периоды. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2020, 20:09 |
|
Подскажите красивое решение - журнал движения денег
|
|||
---|---|---|---|
#18+
можно упростить вариант vkorshun сделай доп. таблицу с остатками, а там уже хоть под годам, месяцам или дням храни остатки ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2020, 09:02 |
|
Подскажите красивое решение - журнал движения денег
|
|||
---|---|---|---|
#18+
В реализованных проектах я видел некий аналог банковской выписки. Дата, остаток на начало, дебет, кредит, остаток на конец. Навигация, оперативная отчетность происходит по этой таблице. Расчет текущего остатки также элементарен. + операция "пересчета" в случае неких нерегламентных изменений ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2020, 09:47 |
|
Подскажите красивое решение - журнал движения денег
|
|||
---|---|---|---|
#18+
mkr, самое простое - сделать поле с остатком. Только не калькулируемое, а постоянное и триггером вписывать в него текущий остаток. Так, наверное и придется сделать :( Не сильно силен в хранимках - как сделать функцию пересчета остатков в таком варианте? Идея такая - делаем переменную для хранения остатка, пробегаемся по всем операциям, в каждой строке операции обновляем поле остатка. Например: opdate opsum opamount 01.01.2020 +10 10 02.02.2020 -5 5 02.10.2020 +1 6 Как красиво написать функцию пересчета остатков? Триггер на обновление добавляемого поля вроде сдюжу написать. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2020, 18:45 |
|
Подскажите красивое решение - журнал движения денег
|
|||
---|---|---|---|
#18+
GrigoriyFomin, остатки лучше пересчитывать ночером и хранить в отдельной таблице. Иначе будет сильная конкуренция и постоянные конфликты обновлений ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2020, 19:10 |
|
Подскажите красивое решение - журнал движения денег
|
|||
---|---|---|---|
#18+
Хоспиди... Операционный инсёрт-триггер апдейдит запись за этот день в таблице остатков инкрементом суммы операции, со знаком, ессно. Если для каких-то целей нужен ещё и остаток после выполнения каждой операции, зачитывает получившийся остаток за день и заполняет поле "остаток" в текущей записи таблицы операций. Транзакция снапшот, разумеется. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.01.2020, 23:11 |
|
Подскажите красивое решение - журнал движения денег
|
|||
---|---|---|---|
#18+
GrigoriyFomin mkr, самое простое - сделать поле с остатком. Идея такая - делаем переменную для хранения остатка, пробегаемся по всем операциям, в каждой строке операции обновляем поле остатка. Например: opdate opsum opamount 01.01.2020 +10 10 02.02.2020 -5 5 02.10.2020 +1 6 поле с остатком чего? (по структуре opdate, opsum, opamount совсем непонятно) обновляем все все операции на текущий остаток? решение, на мой взгляд, не лучше постоянного on-line пересчёта... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2020, 09:04 |
|
Подскажите красивое решение - журнал движения денег
|
|||
---|---|---|---|
#18+
У меня остатки хранятся в одной таблице с движениями. Дополнительное поле. При закрытии периода (день/месяц/год) формируются остатки, и в дальнейшем при получении остатков на дату берется ближайший остаток и от него считается уже суммарное движение ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2020, 12:34 |
|
Подскажите красивое решение - журнал движения денег
|
|||
---|---|---|---|
#18+
Шавлюк Евгений, А изменения, удаления? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2020, 13:15 |
|
Подскажите красивое решение - журнал движения денег
|
|||
---|---|---|---|
#18+
982183, В закрытом периоде изменения запрещены. При необходимости изменить отменяем закрытие периода. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2020, 13:25 |
|
Подскажите красивое решение - журнал движения денег
|
|||
---|---|---|---|
#18+
Счастливчик.... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2020, 13:27 |
|
Подскажите красивое решение - журнал движения денег
|
|||
---|---|---|---|
#18+
982183, Период может быть как угодно долго не закрываться. Это влияет только на скорость расчета. Но если бухгалтерия закрыла месяц, все. Дальнейшие изменения запрещены. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2020, 13:45 |
|
Подскажите красивое решение - журнал движения денег
|
|||
---|---|---|---|
#18+
Шавлюк Евгений> У меня остатки хранятся в одной таблице с движениями. Шавлюк Евгений> Доп.поле. При закрытии периода формируются остатки Остатки считаются только процедурой закрытия или пересчитываются на каждое движение? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2020, 14:12 |
|
Подскажите красивое решение - журнал движения денег
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам, Закрытие периода только процедурой. Отмена закрытия периода на текущие остатки не влияет, только на скорость расчета. В некоторых случаях, для безопасности клиентов, можно удалять все документы на дату меньше закрытия. Моя структура документов. 1. Есть документ, каждый тип документов имеет свою процедуру "проведения". 2. Есть документ "закрытие периода". Он записывает текущие остатки + записывает в отдельную таблицу дату закрытия 3. Процедура получения остатков на дату смотрит какая дата ближайшая (date_ost), и дальше относительно нее считает: остатки + движение за время до указанной даты (date_report) Код: sql 1. 2. 3. 4. 5.
Если интересно, могу более подробно указать ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2020, 14:29 |
|
Подскажите красивое решение - журнал движения денег
|
|||
---|---|---|---|
#18+
Шавлюк Евгений Если интересно, могу более подробно указать Интересно. Давай подробности) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2020, 14:42 |
|
Подскажите красивое решение - журнал движения денег
|
|||
---|---|---|---|
#18+
Шавлюк Евгений> Закрытие периода только процедурой. Ну т.е. текущие остатки - это "закрытые" + движения после. Тогда это некая разновидность хранимых агрегатов, для ускорения. Нормально, имеет право на жизнь (хоть и очень нестандартная). > Если интересно, могу более подробно указать Конечно. Если в одно сообщение неудобно - можешь отдельный топик создать, с DDL/DML. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2020, 16:04 |
|
Подскажите красивое решение - журнал движения денег
|
|||
---|---|---|---|
#18+
Гаджимурадов РустамНормально, имеет право на жизнь (хоть и очень нестандартная). "Чо?" Это абсолютно стандартная схема хранимых агрегатов. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.01.2020, 16:07 |
|
|
start [/forum/topic.php?fid=40&msg=39910637&tid=1560474]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
144ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 263ms |
0 / 0 |