Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / хранение остатков и оборотов по счетам в бух. системах / 25 сообщений из 26, страница 1 из 2
15.01.2007, 17:16
    #34256535
SashaF
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранение остатков и оборотов по счетам в бух. системах
Раньше имел дело с банковским оперднем - там было все просто, при открытии операционного дня по всем счетам подсчитывались обороты, и исходящие остатки за закрытый день и все это сбрасывалось в табличку (ID счета, дата, вх_остатки, исх_остатки, деб_обороты, кред_обороты) в результате оборотная ведомость очень легко строилась за любой период.

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

У меня появилась пока только одна идея:
Создать похожую табличку ОСТАТКИ_НА_ДАТУ(ID счета, дата, исх_остатки, деб_обороты, кред_обороты) и при создании проводки проверять есть ли запись в этой табличке на дату проводки - если есть update ее, если нет - то insert, но при таком подходе несколько усложняется построение оборотной ведомости на конкретную дату, т.к. придется выбирать записи из этой таблички для данного счета где дата максималльно близка к заданной.

Хотелось бы услышать о проверенных и давно работающих решениях, которых наверняка не мало.
...
Рейтинг: 0 / 0
15.01.2007, 18:24
    #34256818
PVP
PVP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранение остатков и оборотов по счетам в бух. системах
Остатки по счетам на заданную дату в бухгалтерии безполезны. Бухгалтерам надо иметь остатки на начало периода, обороты за период и остатки на конец периода. Минимальный размер периода - один месяц. Начало всегда первым числом месяца, а конец - последним.
...
Рейтинг: 0 / 0
15.01.2007, 18:37
    #34256853
SergGol
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранение остатков и оборотов по счетам в бух. системах
PVPОстатки по счетам на заданную дату в бухгалтерии безполезны. Бухгалтерам надо иметь остатки на начало периода, обороты за период и остатки на конец периода. Минимальный размер периода - один месяц. Начало всегда первым числом месяца, а конец - последним.

Не всегда безполезны. Например остатки/обороты на счетах денежных средств отслеживаются и по дням, а не только по месяцам.
...
Рейтинг: 0 / 0
15.01.2007, 21:12
    #34257101
SashaF
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранение остатков и оборотов по счетам в бух. системах
т.о. все-таки нужна таблица, в которую будут записываться остатки на период, и обороты? как в нее будут попадать данные, так как я предложил в вопросе, но интервалом проверки будет текущий месяц? или же бухгалтер должен вызвать какую-то процедуру, которая запишет все данные в эту таблицу по всем счетам?
...
Рейтинг: 0 / 0
16.01.2007, 01:48
    #34257264
barry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранение остатков и оборотов по счетам в бух. системах
SashaFУ меня появилась пока только одна идея:
Создать похожую табличку ОСТАТКИ_НА_ДАТУ(ID счета, дата, исх_остатки, деб_обороты, кред_обороты) и при создании проводки проверять есть ли запись в этой табличке на дату проводки - если есть update ее, если нет - то insert, но при таком подходе несколько усложняется построение оборотной ведомости на конкретную дату, т.к. придется выбирать записи из этой таблички для данного счета где дата максимально близка к заданной.

Хотелось бы услышать о проверенных и давно работающих решениях, которых наверняка не мало.В банках все как-то более-менее организовано и прошедший день с его остатками - это нечто стабильное. Тем более платежи в банках проводятся автоматизированным способом и наверное не бывает такой ситуации, чтобы прошла операция которая не зафиксирована в БД, а потом ее задним числом вводят в компьютер.
На предприятиях конечно же этот период, в котором копаются, охватывает как минимум месяц-два, а то и квартал. Есть множество всяких событий, которые проходят в какой-то момент времени, но эта информация до компьютера доходит только через некоторое время (причины тут и объективные и субъективные). Этот фактор конечно же надо учитывать. Если Вы решитесь хранить остатки по дням, то надо сразу же думать о том, как эффективно пересчитывать "хвост", когда операции делаются задним числом - и это объективность ведения бухгалтерского учета. Минимальный отчетный период - это день. В целом конечно официальная бухгалтерская отчетность сдается за период не меньше месяца, но при поиске ошибок, несоответствий бухгалтера гоняют отчеты вплоть до каждого дня.
Ну а если по сути, то свое решение я советовать не буду, у меня хранится только начальное сальдо и весь пересчет идет от начала. В принципе пока это всех в целом устраивает, хотя уже подумываю над тем, чтобы сделать текущие пересчитываемые остатки на конец, т.е. хранить один экз. остатков по последнему состоянию. Копаются в основном в "хвосте" (в последних датах) и обратный откат на небольшой период назад будет работать быстро. Есть системы которые хранят остатки помесячно, но у них как правило есть понятие закрытия рабочего периода, т.е. в них нельзя просто так залезть слишком далеко "назад" и редактировать что-то древнее (например "Галактика"). Нужно откатиться назад, открыть период, сделать что нужно, затем пересчитать остатки - т.е. вернуться в настоящее время. Наверняка есть и другие подходы, в общем, эта проблема действительно "скользкая" и надо хорошо подумать...
...
Рейтинг: 0 / 0
16.01.2007, 10:31
    #34257748
SashaF
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранение остатков и оборотов по счетам в бух. системах
barryу меня хранится только начальное сальдо и весь пересчет идет от начала

начальное сальдо - сальдо на момент установки программы? т.е. если нужно увидеть просто остаток по счету, нужно пересчитывать все операции по этому счету? а какое у вас количество операций и как долго работает программа?
...
Рейтинг: 0 / 0
16.01.2007, 10:54
    #34257826
кхех..
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранение остатков и оборотов по счетам в бух. системах
SashaFначальное сальдо - сальдо на момент установки программы?
ну примерно да. еще они могут сказать - все, вот на канец этого месяца остатки такие - вставляешь в ЭТУ таблицу остатки по счетам на дату какую хотят и далее уже пляшешь от остатков на эту дату. 90% что они так захотят ...
бухгалтерия дело темное ... :))
...
Рейтинг: 0 / 0
16.01.2007, 10:57
    #34257840
barry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранение остатков и оборотов по счетам в бух. системах
SashaF пишет:
> начальное сальдо - сальдо на момент установки программы?

Можно и так сказать. В общем - до начала проведения всех операций.

> т.е. если нужно увидеть просто остаток по счету, нужно
> пересчитывать все операции по этому счету?

Да.

> а какое у вас количество операций и как долго работает
> программа?

Максимом что было на практике - порядка 5 млн. проводок где-то за 5-6
лет работы предприятия (~150-200 сотрудников, производственно-торговая
фирма). Время расчета общей оборотной ведомости (по всем счетам) порядка
10-20 мин.

Это решение простое (не требуется ни динамического, ни эпизодического
пересчета остатков), но как я выше уже указал, так наверное делать не
стоит. Наиболее оптимально, по-моему мнению, хранить единственный набор
конечных остатков (динамически пересчитываемых).
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
16.01.2007, 11:19
    #34257952
Роман Дынник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранение остатков и оборотов по счетам в бух. системах
остатки на "заданную дату" = остатки на начало периода (формируются по закрытию периода) + обороты от начала периода до заданной даты (оперативная таблица).
...
Рейтинг: 0 / 0
16.01.2007, 12:56
    #34258424
SashaF
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранение остатков и оборотов по счетам в бух. системах
спасибо большое всем! Вариант с закрытием периодов мне кажется очень удачным в моем случае, поскольку потребуется часто смотреть обороты за произвольные периоды, и несколько минут для построения оборотки мне не подойдет.
...
Рейтинг: 0 / 0
16.01.2007, 13:20
    #34258550
barry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранение остатков и оборотов по счетам в бух. системах
SashaFспасибо большое всем! Вариант с закрытием периодов мне кажется очень удачным в моем случае, поскольку потребуется часто смотреть обороты за произвольные периоды, и несколько минут для построения оборотки мне не подойдет.Я бы так не спешил с выводами, ибо прежде чем смотреть информацию, ее необходимо создать. Не надо относиться к бухгалтерской информации как к некоей более-менее статичной по которой гоняются отчеты. Это скорее интенсивно редактируемая, пополняемая и модифицирующаяся в более-менее продолжительном промежутке времени. Прежде чем посчитать оборотку за несколько секунд после очередной корректировки Вам потребуется несколько минут (в лучшем случае) на приведение остатков в актуальное состояние.
...
Рейтинг: 0 / 0
16.01.2007, 14:30
    #34258852
SashaF
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранение остатков и оборотов по счетам в бух. системах
Для моего хитрого ТЗ (у меня скорее учетная система чем бухгалтерская) - очень удобно делать закрытые периоды.
а во-вторых, мне нравится хранить промежуточные итоги, т.к. это дополнительный контроль.
...
Рейтинг: 0 / 0
24.01.2007, 13:28
    #34278555
космонахт
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранение остатков и оборотов по счетам в бух. системах
SashaF

Хранить остатки-это правильно
Меньше геморроя будет в дальнейшем...)


ничто не слишком!
...
Рейтинг: 0 / 0
25.01.2007, 11:39
    #34281275
Estets
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранение остатков и оборотов по счетам в бух. системах
Роман Дынникостатки на "заданную дату" = остатки на начало периода (формируются по закрытию периода) + обороты от начала периода до заданной даты (оперативная таблица).
Есть и обратный подход:

остатки на "заданную дату" = остатки на текущую (корректируются автоматом при проведении операций) - обороты от заданной даты до текущей даты.

Реализовывал оба подхода, восновном первый, второй можно рассматривать при очень большом количестве операций, но маленьком количестве запросов по остаткам с датой отличной от текущей.
...
Рейтинг: 0 / 0
25.01.2007, 11:46
    #34281316
Bogdanov Andrey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранение остатков и оборотов по счетам в бух. системах
При " очень большом количестве операций" надо хранить остатки на промежуточные даты (или вообще всю историю). Сложности с пересчетом остатков не так велики, как кажется, так как проведение операций задним числом (в отличии от получения отчетности) крайне редкая операция. В большинстве случаев новые операции ложатся последовательно и необходимости в пересчете вообще не возникает.
Если же хранить именно "последний" остаток, то пересчет гарантировано нужен всегда и в этом случае гораздо эффективнее хранить всю историю (датат начала, дата конца, значение остатка). Пересчитываться почти всегда будет только последний фрагмент истории, в то же время легко получить значение остатка на любой момент времени.
...
Рейтинг: 0 / 0
25.01.2007, 11:59
    #34281385
gardenman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранение остатков и оборотов по счетам в бух. системах
...
Рейтинг: 0 / 0
25.01.2007, 13:04
    #34281680
Estets
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранение остатков и оборотов по счетам в бух. системах
Bogdanov AndreyПри " очень большом количестве операций" надо хранить остатки на промежуточные даты (или вообще всю историю).
Как я уже писал выше, такой подход я реализовывал, но скорость простейшей операции получения остатков по аналитическому учету зависит от объема операций от промежуточных остатков до нужной даты.
Код: plaintext
SELECT sum(oper_sum) FROM t_operation ... GROUP BY аналитика
И уменьшить этот объем можно только уменьшая периоды через которые рассчитываются промежуточные остатки, но во первых объем таблицы с остатками может оказаться больше чем таблица с операциями и потери времени будут уже при работе с этой таблицей, во вторых затраты на коррекцию остатков задним числом могут оказаться критически большими.

Bogdanov AndreyСложности с пересчетом остатков не так велики, как кажется, так как проведение операций задним числом (в отличии от получения отчетности) крайне редкая операция. В большинстве случаев новые операции ложатся последовательно и необходимости в пересчете вообще не возникает.
Мы пошли другим путем: Если остатки расчитаны - период закрыт и проводки в нем делать нельзя. Нужна такая операция - открывается период, проводится операция, период закрывается (расчитываются промежуточные остатки)
Bogdanov AndreyЕсли же хранить именно "последний" остаток, то пересчет гарантировано нужен всегда
Угу, только в этом случае не нужно расчитывать и хранить промежуточные остатки.
Bogdanov Andrey и в этом случае гораздо эффективнее хранить всю историю (датат начала, дата конца, значение остатка).
Не понял, откуда диапазон дат???
...
Рейтинг: 0 / 0
25.01.2007, 13:46
    #34281857
gybson
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранение остатков и оборотов по счетам в бух. системах
В таблице итогов хранятся данные (остаток) на конец каждого месяца и на текущий момент времени.
...
Рейтинг: 0 / 0
25.01.2007, 14:02
    #34281944
gardenman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранение остатков и оборотов по счетам в бух. системах
Всегда выгоднее хранить остатки на начало периода + обороты за период, а текущий остаток вычислять.
...
Рейтинг: 0 / 0
25.01.2007, 15:13
    #34282298
Bogdanov Andrey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранение остатков и оборотов по счетам в бух. системах
Estets
Не понял, откуда диапазон дат???

Поясняю.
При открытии счета (пусть это было датой t0) остаток на нем равен 0. Датой t1 провели проводку (на сумму s1), а датой t2 (t2>t1) еще одну проводку на сумму s2. Соответсвенно история остатков по счету выглядит так:
0 с t0 до t1
s1 с t1 до t2
s2 с t2 до бесконечности.
Вот и дапазон.

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

Я не утверждаю, что этот подход единственно верный. Но зачастую он очень удобен.
...
Рейтинг: 0 / 0
25.01.2007, 15:56
    #34282541
Estets
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранение остатков и оборотов по счетам в бух. системах
gybsonВ таблице итогов хранятся данные (остаток) на конец каждого месяца и на текущий момент времени.
В данном случае ИМХО лишнее, хранить и то и другое. Необоснованное дублирование информации. Из опыта могу сказать что в нашей конфигурации проводок до полумиллиона проводок схлопываются в остатки без всяких расчетов остатков за приемлемое для пользователя время. До десяти миллионов операций, приходилось расчитывать остатки примерно каждый квартал (кавртал примерно 300 тысяч операций).
А вот для проекта с 40 тысяч проводок в день пришлось изменять алгоритм в сторону расчета хранения на текущий день и расчета исторических данных отнимая обороты до нужной даты.
...
Рейтинг: 0 / 0
25.01.2007, 16:02
    #34282570
Estets
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранение остатков и оборотов по счетам в бух. системах
Bogdanov Andrey Estets
Не понял, откуда диапазон дат???

Поясняю.
При открытии счета (пусть это было датой t0) остаток на нем равен 0. Датой t1 провели проводку (на сумму s1), а датой t2 (t2>t1) еще одну проводку на сумму s2. Соответсвенно история остатков по счету выглядит так:
0 с t0 до t1
s1 с t1 до t2
s2 с t2 до бесконечности.
Вот и дапазон.

Теперь понял, единственная проблема в хранении диапазонов это если проводка прошла задним числом (tN) между t1 и t2, получается необходимо удалить диапазон t1-t2, вставить t1-tN, tN-t2 и изменить остаток "с t2 до бесконечности". Что достаточно сложная операция. Особенно для массового ввода.
...
Рейтинг: 0 / 0
25.01.2007, 16:21
    #34282661
Bogdanov Andrey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранение остатков и оборотов по счетам в бух. системах
Estets
Теперь понял, единственная проблема в хранении диапазонов это если проводка прошла задним числом (tN) между t1 и t2, получается необходимо удалить диапазон t1-t2, вставить t1-tN, tN-t2 и изменить остаток "с t2 до бесконечности". Что достаточно сложная операция. Особенно для массового ввода.

Удалять не нужно. Достаточно в имеющемся диапазоне изменить t2 на tN, и добавить еще один диапазон. Более того, так как у нас всегда есть последний диапазон (в котором конец равен бесконечности), то и для работы в текущей дате изменение остатка ровно такое-же: закрытие одного диапазона и добавление нового. Реализация не такая уж и сложная, по нагрузке на сервер тоже не слишком (один update без изменения размера записи и один insert на фоне других DML обслуживающих операцию...).
Но такая структура позволяет даже уменьшить размер базы (по сравнению, например, с хранением остатков на концы закрытых периодов) , особенно при сильно неравномерной нагрузке на счета (если по одним счетам операции проходят раз в полгода, а по другим - несколько тысяч в день) и легко доставать остаток по любому счету за любую дату.
...
Рейтинг: 0 / 0
26.01.2007, 10:17
    #34284196
Estets
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранение остатков и оборотов по счетам в бух. системах
Bogdanov AndreyНо такая структура позволяет даже уменьшить размер базы (по сравнению, например, с хранением остатков на концы закрытых периодов) , особенно при сильно неравномерной нагрузке на счета (если по одним счетам операции проходят раз в полгода, а по другим - несколько тысяч в день) и легко доставать остаток по любому счету за любую дату.
ОК, интересный подход, честно говоря первый раз столкнулся с таким. А если не секрет, работает ли данная схема в промышленном масштабе и какие примерно числовые характеристики по объемам ежедневных/ежемесячных операций?
...
Рейтинг: 0 / 0
26.01.2007, 16:01
    #34285892
Bogdanov Andrey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хранение остатков и оборотов по счетам в бух. системах
EstetsОК, интересный подход, честно говоря первый раз столкнулся с таким. А если не секрет, работает ли данная схема в промышленном масштабе и какие примерно числовые характеристики по объемам ежедневных/ежемесячных операций?

Работает. Как минимум в трех десятках банков. Часть из которых входит в десятку крупнейших банков России. Есть примеры с ежедневным количеством проводок в районе полумиллиона. С хранением данных за последние лет пять (как минимум).
СУБД - Oracle. Естественно, техника в банках разная: от однопроцессорных PC под управлением Windows до монстровых (16-процессорных) серверов.
Это по моим сведениям на 2003 год. Более актуальных данных у меня нет.
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / хранение остатков и оборотов по счетам в бух. системах / 25 сообщений из 26, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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