Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Подскажите красивое решение - журнал движения денег / 25 сообщений из 39, страница 1 из 2
03.01.2020, 13:46
    #39910575
GrigoriyFomin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите красивое решение - журнал движения денег
Читал про оконные функции, думаю, может их можно использовать, чтоб избежать громоздкого и неоптимального кода.
Есть журнал движения денег в кассе OPS.
полей много, но основные - это таймстамп операции OPDATE и сумма со знаком (+ приход, минус расход) OPSUM. Как написать вычислимое поле, в котором бы был для каждой операции текущий остаток? Делать в этом поле каждый раз суммирование всех операций за 5 лет - как-то неоптимально. И еще - если это вычисляемое поле не будет в запросе - оно не будет просчитываться и тянуть тормоза?
...
Рейтинг: 0 / 0
03.01.2020, 13:56
    #39910581
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите красивое решение - журнал движения денег
GrigoriyFomin,

оконные функции здесь не помогут. Читай про хранимые агрегаты
...
Рейтинг: 0 / 0
03.01.2020, 14:03
    #39910585
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите красивое решение - журнал движения денег
GrigoriyFominДелать в этом поле каждый раз суммирование всех операций за 5 лет - как-то неоптимально.

А тебе часто приходится выводить журнал движения денег за 5 лет?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
03.01.2020, 15:07
    #39910601
GrigoriyFomin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите красивое решение - журнал движения денег
Dimitry Sibiryakov

А тебе часто приходится выводить журнал движения денег за 5 лет?..

ну тут суть 5 лет в том, что текущий остаток берется от начала эксплуатации программы - это 5 лет. И для каждой операции перелопачивать всю историю как-то некрасиво. Мож есть какая-то хитрость, где хранить предыдущий остаток и для следующей операции не выбирать опять сумму всех предыдущих операций, а лишь приплюсовать к предыдущему остатку значение текущей операции.
...
Рейтинг: 0 / 0
03.01.2020, 17:31
    #39910615
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите красивое решение - журнал движения денег
GrigoriyFominМож есть какая-то хитрость

Есть. И тебе уже про неё сказали выше.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
03.01.2020, 19:12
    #39910637
GrigoriyFomin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите красивое решение - журнал движения денег
Dimitry Sibiryakov


Есть. И тебе уже про неё сказали выше.

Если про хранимые агрегаты, то из того, что я прочитал - это дополнительная таблица. Или что-то другое?
...
Рейтинг: 0 / 0
03.01.2020, 19:32
    #39910643
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите красивое решение - журнал движения денег
GrigoriyFominИли что-то другое?

"Есть много способов приготовить кошку." (с)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
03.01.2020, 20:09
    #39910647
vkorshun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите красивое решение - журнал движения денег
Например, так
1. Таблица счетов (Account)
Id – код счета
Number – номер счета
Name - наименование
Прочие атрибуты
2. Объекты учета
Id –код объекта
IdGroup –код группы (Клиенты, Поставщики, Валюта)
Прочие атрибуты – могут храниться в других таблицах или в общей (зависит от реализации)

3. Журнал операция (проводок)
Заголовок содержит общую информацию – Дата, ссылку на документ который вызвал операцию (или бух. проводку)
Содержимое
Дебет
Счет
Аналитика (возможно несколько уровней)
Количество по дебету (для валюты два знака после запятой (если не в копейках))
Кредит
Счет
Аналитика (возможно несколько уровней)
Количество по дебету (для валюты два знака после запятой (если не в копейках))
Сумма в нац. Валюте или в валюте учета

4. Сальдо
Период (месяц год)
Счет
Аналитика
Сальдо (кол.) на начало
Сальдо (сумма) на начало
Дебет(кол.)
Дебет(сумма)
Кредит(кол.)
Кредит(сумма)

При заполнении операций должно рассчитываться сальдо относительно дат операций по счетам и пересчитываться сальдо на начало за последующие периоды.
...
Рейтинг: 0 / 0
04.01.2020, 09:02
    #39910699
mkr
mkr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите красивое решение - журнал движения денег
можно упростить вариант vkorshun
сделай доп. таблицу с остатками, а там уже хоть под годам, месяцам или дням храни остатки
...
Рейтинг: 0 / 0
04.01.2020, 09:47
    #39910705
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите красивое решение - журнал движения денег
В реализованных проектах я видел некий аналог банковской выписки.
Дата, остаток на начало, дебет, кредит, остаток на конец.
Навигация, оперативная отчетность происходит по этой таблице.
Расчет текущего остатки также элементарен.
+ операция "пересчета" в случае неких нерегламентных изменений
...
Рейтинг: 0 / 0
04.01.2020, 18:45
    #39910789
GrigoriyFomin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите красивое решение - журнал движения денег
mkr,

самое простое - сделать поле с остатком. Только не калькулируемое, а постоянное и триггером вписывать в него текущий остаток. Так, наверное и придется сделать :( Не сильно силен в хранимках - как сделать функцию пересчета остатков в таком варианте? Идея такая - делаем переменную для хранения остатка, пробегаемся по всем операциям, в каждой строке операции обновляем поле остатка. Например:
opdate opsum opamount
01.01.2020 +10 10
02.02.2020 -5 5
02.10.2020 +1 6

Как красиво написать функцию пересчета остатков? Триггер на обновление добавляемого поля вроде сдюжу написать.
...
Рейтинг: 0 / 0
04.01.2020, 19:10
    #39910794
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите красивое решение - журнал движения денег
GrigoriyFomin,

остатки лучше пересчитывать ночером и хранить в отдельной таблице. Иначе будет сильная конкуренция и постоянные конфликты обновлений
...
Рейтинг: 0 / 0
04.01.2020, 23:11
    #39910833
Старый плюшевый мишка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите красивое решение - журнал движения денег
Хоспиди... Операционный инсёрт-триггер апдейдит запись за этот день в таблице остатков инкрементом суммы операции, со знаком, ессно. Если для каких-то целей нужен ещё и остаток после выполнения каждой операции, зачитывает получившийся остаток за день и заполняет поле "остаток" в текущей записи таблицы операций. Транзакция снапшот, разумеется.
...
Рейтинг: 0 / 0
08.01.2020, 09:04
    #39911476
mkr
mkr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите красивое решение - журнал движения денег
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 пересчёта...
...
Рейтинг: 0 / 0
08.01.2020, 12:34
    #39911522
Шавлюк Евгений
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите красивое решение - журнал движения денег
У меня остатки хранятся в одной таблице с движениями. Дополнительное поле. При закрытии периода (день/месяц/год) формируются остатки, и в дальнейшем при получении остатков на дату берется ближайший остаток и от него считается уже суммарное движение
...
Рейтинг: 0 / 0
08.01.2020, 13:15
    #39911539
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите красивое решение - журнал движения денег
Шавлюк Евгений,
А изменения, удаления?
...
Рейтинг: 0 / 0
08.01.2020, 13:25
    #39911549
Шавлюк Евгений
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите красивое решение - журнал движения денег
982183,

В закрытом периоде изменения запрещены.
При необходимости изменить отменяем закрытие периода.
...
Рейтинг: 0 / 0
08.01.2020, 13:27
    #39911550
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите красивое решение - журнал движения денег
Счастливчик....
...
Рейтинг: 0 / 0
08.01.2020, 13:45
    #39911553
Шавлюк Евгений
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите красивое решение - журнал движения денег
982183,

Период может быть как угодно долго не закрываться. Это влияет только на скорость расчета.
Но если бухгалтерия закрыла месяц, все. Дальнейшие изменения запрещены.
...
Рейтинг: 0 / 0
08.01.2020, 14:12
    #39911562
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите красивое решение - журнал движения денег
Шавлюк Евгений> У меня остатки хранятся в одной таблице с движениями.
Шавлюк Евгений> Доп.поле. При закрытии периода формируются остатки

Остатки считаются только процедурой закрытия
или пересчитываются на каждое движение?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
08.01.2020, 14:29
    #39911569
Шавлюк Евгений
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите красивое решение - журнал движения денег
Гаджимурадов Рустам,

Закрытие периода только процедурой.
Отмена закрытия периода на текущие остатки не влияет, только на скорость расчета.
В некоторых случаях, для безопасности клиентов, можно удалять все документы на дату меньше закрытия.

Моя структура документов.
1. Есть документ, каждый тип документов имеет свою процедуру "проведения".
2. Есть документ "закрытие периода". Он записывает текущие остатки + записывает в отдельную таблицу дату закрытия
3. Процедура получения остатков на дату смотрит какая дата ближайшая (date_ost), и дальше относительно нее считает: остатки + движение за время до указанной даты (date_report)
Код: sql
1.
2.
3.
4.
5.
select ... sum(summa) 
from ...
where (date_doc = :date_ost and ost = 1) or (date_doc > :date_ost and date_doc <= :date_report and ost = 0)
group by ...
having sum(summa) <> 0



Если интересно, могу более подробно указать
...
Рейтинг: 0 / 0
08.01.2020, 14:42
    #39911579
Softologic
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите красивое решение - журнал движения денег
Шавлюк Евгений

Если интересно, могу более подробно указать

Интересно. Давай подробности)
...
Рейтинг: 0 / 0
08.01.2020, 16:04
    #39911637
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите красивое решение - журнал движения денег
Шавлюк Евгений> Закрытие периода только процедурой.

Ну т.е. текущие остатки - это "закрытые" + движения после.
Тогда это некая разновидность хранимых агрегатов, для ускорения.
Нормально, имеет право на жизнь (хоть и очень нестандартная).

> Если интересно, могу более подробно указать

Конечно. Если в одно сообщение неудобно -
можешь отдельный топик создать, с DDL/DML.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
08.01.2020, 16:07
    #39911640
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите красивое решение - журнал движения денег
Гаджимурадов РустамНормально, имеет право на жизнь (хоть и очень нестандартная).

"Чо?"
Это абсолютно стандартная схема хранимых агрегатов.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
08.01.2020, 16:16
    #39911648
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите красивое решение - журнал движения денег
DS> Это абсолютно стандартная схема хранимых агрегатов.

По периодам - зависит от, но в доп.поле в той же таблице?!
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Подскажите красивое решение - журнал движения денег / 25 сообщений из 39, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]