powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Подскажите красивое решение - журнал движения денег
39 сообщений из 39, показаны все 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
Подскажите красивое решение - журнал движения денег
    #39911665
paulzaytsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkorshun,

подтверждаю. Тоже именно так делаем в своем бух.комплексе.

Процедурой "закрытия периода" фиксируем сальдо по счетам (+субконто при наличии) на начало каждого периода. Остатки на текущую дату считаем хранимой процедурой с кучей входящих параметров, отсчитывая от зафиксированной суммы. Сервер выплевывает данные, как самолет.
...
Рейтинг: 0 / 0
Подскажите красивое решение - журнал движения денег
    #39911667
mkr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шавлюк Евгений

2. Есть документ "закрытие периода". Он записывает текущие остатки + записывает в отдельную таблицу дату закрытия

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


Потому что в моем случае я могу получить данные одним запросом, а не склеивать из двух разных таблиц

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

Всё равно же подзапрос нужен будет?
Или что-то вроде Sum(движения) + Min(остаток) Where Date > ...?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Подскажите красивое решение - журнал движения денег
    #39911699
mkr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шавлюк Евгений

Потому что в моем случае я могу получить данные одним запросом, а не склеивать из двух разных таблиц

Код: 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
Подскажите красивое решение - журнал движения денег
    #39911703
Шавлюк Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mkr,

Тогда тебе придется хранить остатки на каждый день.
Иначе как посчитаешь на произвольную дату?
[Остаток на конец 08.01.2020] = [остатки на конец 31.12.2019] + [движение за период с 01.01.2020 по 08.01.2020].
Движение все равно надо группировать
...
Рейтинг: 0 / 0
Подскажите красивое решение - журнал движения денег
    #39911704
Шавлюк Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам
Всё равно же подзапрос нужен будет?
Или что-то вроде Sum(движения) + Min(остаток) Where Date > ...?


В таблице с признаком "Остаток" именно остаток на указанную дату.
И соответственно достаточно только
select Sum(движения) Where (дата = :дата_формирования_остатка and признак_остатков = 1) or (дата between :дата_формирования_остатка + 1 and :дата_отчета and признак_остатков = 0)
...
Рейтинг: 0 / 0
Подскажите красивое решение - журнал движения денег
    #39911707
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шавлюк Евгений> В таблице с признаком "Остаток" именно остаток на указанную дату.
Шавлюк Евгений> достаточно только select Sum(движения) Where (признак_остатков = 1)

Ну т.е. в доп.поле не остаток, а только признак.
Сам остаток в том же поле, что и суммы +/-.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Подскажите красивое решение - журнал движения денег
    #39911708
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шавлюк Евгений

Тогда тебе придется хранить остатки на каждый день.


It depends. В бухгалтерии, с сальдо по всем счетам, будет излишеством нехорошим, а в оперативном учёте, скажем остатки денег на банковском счету, в той же кассе, конкретного товара на реальном (не бухгалтерском) складе - очень даже. На складе, правда, удобнее прямо в складской карточке, по завершении каждой операции, со ссылкой на неё - товаров до и больше, а состояние на конкретный день нужно в исключительных случаях, можно и посчитать. Кстати, если касса не фискальная, для внутреннего учёта, изменения лучше запретить нафиг. Лучше ввести в обиход понятие операции корректировки после ошибки, и пофиг закрыт день или нет. С указателем на операцию с ошибкой, авторством и комментарием. Целее денешки будут, когда кассир знает, что он под колпаком у Мюллера.
...
Рейтинг: 0 / 0
Подскажите красивое решение - журнал движения денег
    #39911719
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все "затронутые" будут против "операции корректировки после ошибки".
Ибо даже в складском учёте по многу раз приход-расход перепроводят.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Подскажите красивое решение - журнал движения денег
    #39911725
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам
Все "затронутые" будут против "операции корректировки после ошибки".
Ибо даже в складском учёте по многу раз приход-расход перепроводят.


Когда меня брали на работу в последнюю фирму, хозяин, тяжело дыша, говорил - Саша! Сделай так, чтоб у меня не *дили вагонами! И мнение "затронутых" его ни разу не интересовало. И на складе в оперативном учёте у меня ничего не перепроводили. Ошиблись - проведите операцию инвентаризации с составлением акта. Бухгалтерия - другое дело, она предназначена для кроилова. А оперативный учёт - чтобы смотреть правде в глаза. И тут кроилово неминуемо ведёт к попадалову.
...
Рейтинг: 0 / 0
Подскажите красивое решение - журнал движения денег
    #39911754
Шавлюк Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Softologic
Шавлюк Евгений

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

Интересно. Давай подробности)


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

Интересно. Давай подробности)


Попробовал описать подробнее

Респект. Почитаю, пригодится для расширения кругозора.
...
Рейтинг: 0 / 0
Подскажите красивое решение - журнал движения денег
    #39912136
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СПМ> И мнение "затронутых" его ни разу не интересовало

Отож, мой знакомый сказал то же самое, только не вагонами,
а "не могу понять, куда они миллионы тратят". Проблема в том,
что работать будут "они", визжать и ворчать - тоже "они", на
мозги капать "эта новая фигня неправильно считает" - тоже они.

Шавлюк Евгений> Попробовал описать подробнее

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


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