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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

Остатки считаются только процедурой закрытия
или пересчитываются на каждое движение?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Подскажите красивое решение - журнал движения денег
    #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
Подскажите красивое решение - журнал движения денег
    #39911579
Softologic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Шавлюк Евгений

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

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

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

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

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

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

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


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