powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Организация настраиваемого учета
15 сообщений из 15, страница 1 из 1
Организация настраиваемого учета
    #38890232
Nimua
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В системе нужно сделать учет по принципу бухгалтерского. 1с не могу использовать ввиду очень большого потока транзакций. Требуется только учет денег по счетам.

Идея учета следующая - каждой операции соответствует свой набор проводок. Операции должны выполняться транзакционно - либо все проводки провелись, либо все откатились.
В БД есть механизм, который по разным финансовым событиям, складывает мне информацию о том по какому клиенту это событие произошло, тип события (приход средств, продажа услуги и т.д.), и идентификатор самого события в таблице, сумма. В зависимости от типа события я знаю в какой таблице будет лежать "первичная" запись о событии и могу найти по заданному идентификатору.

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

Пока без учета иерархических движений структура получается следующая.

объект
тип операции
ид операции
сумма
счет
тип движения (дебет/кредит)

С суммой тоже есть вопросы. Например у меня есть операция приход средств. По некоторым клиентам эта операция облагается комиссией.
Сейчас это отдельное движение, но по хорошему они должны идти в одной транзакции.

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

Можно сделать буфер и там накапливать движения, которые относятся к одной операции, но в случае с услугой кол-во проводок по начислению бонусов будет зависеть от того насколько глубоко клиент расположен по иерархии. Как быть в этой ситуации мне пока не ясно.

Подскажите, пожалуйста, как обычно реализуются подобные задачи.
Писать код под каждую операцию очень не хочется, получится длинным и сложным в поддержке.
...
Рейтинг: 0 / 0
Организация настраиваемого учета
    #38890264
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сейчас это отдельное движение, но по хорошему они должны идти в одной транзакции.И в чем проблема ?
Делайте кучу атомарных проводок(записей в журнале) в одной транзакции.
Нужно иметь шаблон проводок (с учетом бух.даты, т.к. проводка может быть разных в разных периодах, н-р новый налог).
В шаблоне для одной транзакции будет неск. строк настроек, которые создадут в журнале такое же число строк атомарных проводок (по разным счетам), принадлежащих одной транзакции.

зы: немного сумбурно написано и с неоднозначностью смыслов понятия проводка. :(.
...
Рейтинг: 0 / 0
Организация настраиваемого учета
    #38890363
Nimua
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LSV,
Извините за сумбур, в голове не уложилось до конца.

Мне не понятно как сделать настройки для разных типов транзакций.
То есть вот например у меня есть движение приход средств.

Для него будет настройка

для типа операции: Приход средств


1)сумма
счет: А средства клиента в системе
тип движения: дебет
2) сумма
счет: Б собственные средства клиента
тип движения: кредит

На этом варианте вроде бы получается, но если рассматривать более сложные, например, написление бонусов, то мне не понятно как записать это в атомарных проводках

для типа операции: Продажа услуги У

часть про начисление бонусов
1) сумма бонуса для клиента 5
счет:Х зачисления бонусов
тип движения: кредит

2) сумма бонуса для клиента 4
счет:Х зачисления бонусов
тип движения кредит

и так далее по иерархии
Как это записать и как увязать, чтобы это было в единой транзакции с продажей услуги?
...
Рейтинг: 0 / 0
Организация настраиваемого учета
    #38890378
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NimuaНа этом варианте вроде бы получается, но если рассматривать более сложные, например, написление бонусов, то мне не понятно как записать это в атомарных проводках

для типа операции: Продажа услуги У

часть про начисление бонусов
1) сумма бонуса для клиента 5
счет:Х зачисления бонусов
тип движения: кредит

2) сумма бонуса для клиента 4
счет:Х зачисления бонусов
тип движения кредит


Совсем просто это сделать не получится.
Например, можно для любого поля в шаблоне "сумма", "счет", etc. хранить либо константу, либо имя вычисляющей функции. Если имя вычисляющей функции задано - вызываете ее, передавая ID операции и она возвращает значение (например, для Вашего примера с бонусами - смотрит, какой клиент проводит операцию и какой ему положен бонус).
Это не очень просто и не очень прозрачно - но зато универсально, как Вы хотели.
...
Рейтинг: 0 / 0
Организация настраиваемого учета
    #38890435
Nimua
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большое спасибо за идею с функцией!

Мне очень нравится!

А как в настройках отразить что это должно пройти по всей иерархии? Ввести отдельный признак? Или в самой функции уже проводить всю цепочку?
...
Рейтинг: 0 / 0
Организация настраиваемого учета
    #38890461
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NimuaА как в настройках отразить что это должно пройти по всей иерархии? Ввести отдельный признак? Или в самой функции уже проводить всю цепочку?

Ну можно, например, предусмотреть чтобы функция была табличной, могла возвращать не одно значение, а несколько - и тогда один шаблон может "разваливаться" на много проводок. Тогда функция "счет клиента" вернет список счетов всех клиентов в иерархии, функция "сумма" - соответственно, суммы для каждого.
В самих функциях я бы ничего не проводил - они только вычисляют значения, ничего не меняя в базе. А универсальный механизм генерации проводок берет шаблон, вызывает функции, получает итоговый резалтсет проводок и пишет их в базу - тогда вся генерация проводок у Вас сосредоточена в одном месте, она ничего не знает и никак не меняется от изменения бизнес-правил проведения документов (за это отвечают функции), функции, в свою очередь, ничего не знают о механизме проводок (и сопутствующих ему логировании, проверке прав, etc.) - они только реализуют бизнес-правила.
...
Рейтинг: 0 / 0
Организация настраиваемого учета
    #38890503
caballero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NimuaПодскажите, пожалуйста, как обычно реализуются подобные задачи.
Писать код под каждую операцию очень не хочется, получится длинным и сложным в поддержке.
как раз наоборот. Гораздо более сложным получится реализация всякого рода настроек и шаблонов. Если сделать бизнес логику не в Бд а на каком нибудь скриптовом языке - гораздо проще будет как споровождать так и отлаживать.
...
Рейтинг: 0 / 0
Организация настраиваемого учета
    #38890597
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если сделать бизнес логику не в Бд а на каком нибудь скриптовом языке - гораздо проще будет как споровождать так и отлаживать. Спорное утверждение.
Я бы максимально старался делать логику на SQL и настроечных таблицах.

Для таких задач СУБД самодостаточна. Зачем ей сторонние скрипты для расчетов на клиенте ?
...
Рейтинг: 0 / 0
Организация настраиваемого учета
    #38890613
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSVЕсли сделать бизнес логику не в Бд а на каком нибудь скриптовом языке - гораздо проще будет как споровождать так и отлаживать. Спорное утверждение.
Я бы максимально старался делать логику на SQL и настроечных таблицах.
Оно не то чтобы спорное, оно в определённом смысле естественное. Есть такой антипаттерн, который я называю "однозвенное мышление". В этом случае человек, хорошо владеющий одним инструментом, проектирует систему так, чтобы именно этот инструмент решал все задачи, а остальные звенья присутствуют в технически-декоративной роли.
...
Рейтинг: 0 / 0
Организация настраиваемого учета
    #38890620
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разве тот же PL/SQL - не скриптовый язык?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Организация настраиваемого учета
    #38890626
Nimua
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В текущей системе основные расчеты и логика сделана внутри БД.
Поэтому соответственно эта часть тоже будет в ней же.
...
Рейтинг: 0 / 0
Организация настраиваемого учета
    #38890627
Nimua
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кот Матроскин, LSV

Спасибо за идеи, вроде бы стало понятнее :)
...
Рейтинг: 0 / 0
Организация настраиваемого учета
    #38890638
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovРазве тот же PL/SQL - не скриптовый язык?..
Нет. Вопрос, конечно, как Вы определяете "скриптовый язык", но чтобы загнать туда PL/SQL, придётся принимать довольно экстравагантные определения.

Другой вопрос, что его возможности позволяют неплохо реализовывать "скриптовые" фичи. Но с тем же успехом и Java можно назвать скриптовым языком.
...
Рейтинг: 0 / 0
Организация настраиваемого учета
    #38890669
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerНет. Вопрос, конечно, как Вы определяете "скриптовый язык", но чтобы
загнать туда PL/SQL, придётся принимать довольно экстравагантные определения.
Я определяю это как "любой интерпретируемый язык" и PL/SQL туда отлично падает. Есть
другое мнение?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Организация настраиваемого учета
    #38890693
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovsoftwarerНет. Вопрос, конечно, как Вы определяете "скриптовый язык", но чтобы
загнать туда PL/SQL, придётся принимать довольно экстравагантные определения.
Я определяю это как "любой интерпретируемый язык" и PL/SQL туда отлично падает.
Вместе с Паскалем, Явой, Шарпом и так далее.

Dimitry Sibiryakov Есть другое мнение?
Зачем? Как я сказал, потребуется экстравагантное определение, и Вы такое дали.

Особенно доставляет тот факт, что любой "нескриптовый" язык в произвольный момент времени может стать скриптовым. Например, я встречал интерпретатор C++, соответственно, это тоже скриптовый язык. Вообще, если подумать, на нынешних процессорах даже ассемблер интпретируется микрокодом. Так что это тоже скриптовый язык. Ну и разумеется, благодаря этому, всё, что на этих процессорах выполняется.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Организация настраиваемого учета
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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