powered by simpleCommunicator - 2.0.47     © 2025 Programmizd 02
Форумы / ERP и учетные системы [игнор отключен] [закрыт для гостей] / Хранимые агрегаты
19 сообщений из 19, страница 1 из 1
Хранимые агрегаты
    #39440756
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
Всем привет!

Такая тема. Появилась тут задача по бухгалтерскому учету. Храним проводки, требуются отчеты. Самые обычные: ОСВ, задолженности по договорам и т.п. Аналитики предлагают помимо таблицы с проводками несколько доп. таблиц с хранимыми агрегатами: обороты по счетам, обороты в разрезе аналитик, обороты в корреспонденции счетов. Вроде вещь стандартная, чтобы не считать по проводкам.

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

Скажите, пжл, в учетных системах это действительно принятая норма? Мне как-то страшновато выстраивать такие очереди
...
Рейтинг: 0 / 0
Хранимые агрегаты
    #39440768
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никаких норм не существует. Есть просто требования бизнеса.
Но нужно четко отделять "блажь бухов" и "обоснованные требования".
Обычно ночных пересчетов достаточно. Также можно иметь под рукой обработку на пересчет какого-то конкретного контрагента, если нужно получить инфу срочно.
...
Рейтинг: 0 / 0
Хранимые агрегаты
    #39440772
s_ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WGAСкажите, пжл, в учетных системах это действительно принятая норма? Мне как-то страшновато выстраивать такие очереди
Большинство систем писалось давно. Поэтому люди извращались как могли.

Сейчас многое поменялось, и "аналитиков", предлагающих такие решения, надо гнать ссаными тряпками.

Читаем про материализованные представления (в MS SQL называются индексированные представления). Да и вообще читаем про индексы.
...
Рейтинг: 0 / 0
Хранимые агрегаты
    #39440809
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
s_ustinovЧитаем про материализованные представления (в MS SQL называются индексированные представления). Да и вообще читаем про индексы.Про материализованные представления в курсе.
С оптимизацией SQL-запросов тоже знаком не понаслышке. Хотя индексы слабо помогают при расчете того же начального сальдо. Хоть кластеризованные (MSSQL), хоть какие.

Основной аргумент в пользу описанного подхода - преобладать будут операции на чтение. И хочется хранить данные уже подготовленными. У меня контраргумент: очень дорогая вставка проводок. По прикидками, создание одной проводки приводит к необходимости вставить/обновить от 50 строк (а может и больше) в таблицах хранимых агрегатов. Как-то слишком затратной становится. Какие еще аргументы можно привести против?
...
Рейтинг: 0 / 0
Хранимые агрегаты
    #39440829
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
s_ustinovЧитаем про материализованные представления (в MS SQL называются индексированные представления). Да и вообще читаем про индексы.Кстати, используется PostgreSQL.Там мат.вьюхи требуется пересчитывать, они не онлайн.
...
Рейтинг: 0 / 0
Хранимые агрегаты
    #39441078
s_ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WGAs_ustinovЧитаем про материализованные представления (в MS SQL называются индексированные представления). Да и вообще читаем про индексы.Кстати, используется PostgreSQL.Там мат.вьюхи требуется пересчитывать, они не онлайн.
И что, что не онлайн? Он что, при пересчете с нуля всё считает? Для подобных отчетов подождать секунду-две, пока СУБД пересчитает вьюшку - вполне нормально.

Главный аргумент против дополнительных табличек - потом тяжелее писать отчеты. Я как раз много отчетов разных написал, в том числе в финансах, и знаю, о чем говорю. Очень часто надо джойном данные из других мест подтянуть, и тогда эти предварительно рассчитанные итоги только мешают.
Еще такая схема может сильно просадить производительность.

Про аналитиков я серьезно. Если выдают такие рекомендации - они ламеры, а не аналитики.

Грубо, есть два варианта:
1. OLTP система с небольшим количеством данных (до нескольких миллионов фин проводок) и слабой нагрузкой. Просто пишем нормально запросы (+ делаем индексы) сразу в рабочей базе.
2. Система с более - менее приличной нагрузкой и данных от 10 миллионов. Ставим реплику базы для отчетов + делаем кубы и прочие навороты. Но в самой рабочей базе специально для целей отчетов всё равно ничего не делаем.

Пытаться в рабочей OLTP базе создавать структуры для отчетов и апдейтить их в транзакциях. "Дебилы, б..." (© Министр иностранных дел Российской Федерации)
...
Рейтинг: 0 / 0
Хранимые агрегаты
    #39441113
leonmbs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полный пересчет вполне реален на современных мощных серверах - железо нынче копейки стоит. Особенно если все суммы хранить в копейках чтобы считало по целому типу

полный пересчет имеет важные преимущества - например не надо хранить промежуточные остатки и элементарно реализовывются проводки задним числом. Обороты тоже легко высчитываются - та же сумма только за период а не с нуля.
Что касается аналитики то при грамотном подъходе (не дуьбблируя тупо субконто из 1С) вполне можно обойтись одной таблицей синтетических счетов и связаной с ней одной таблицей агрегатов.
...
Рейтинг: 0 / 0
Хранимые агрегаты
    #39441174
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
s_ustinov,

Хотел я аналитикам скинуть ссылку на этот топик, но после Ваших комментариев, пожалуй, воздержусь )) Мне тоже не нравится все это...
...
Рейтинг: 0 / 0
Хранимые агрегаты
    #39441206
s_ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WGAХотел я аналитикам скинуть ссылку на этот топик, но после Ваших комментариев, пожалуй, воздержусь )) Мне тоже не нравится все это...
Ну...
Согласен, министра иностранных дел не стоило цитировать.
...
Рейтинг: 0 / 0
Хранимые агрегаты
    #39441266
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Garya Привилегированный пользователь
Участник
WGAПоявилась тут задача по бухгалтерскому учету.Как раз именно в бухгалтерском учете всё уже давным-давно придумано. Ведь понятие "бухгалтерской проводки" сводится к отражению хозяйственной операции на "бухгалтерских счетах", которые и являются, по своей сути, агрегатами. ОСВ - это всего лишь отчет, который выводит содержимое подобного агрегата в тех или иных аналитических разрезах.

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

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

Именно по этой причине первоисточники в виде электронных документов хранят в одних сущностях (журналах документов), а проводки, которые они вызывают, в других - в бухгалтерских счетах и бухгалтерских регистрах. Это удобно еще и потому, что неподготовленные по различным причинам документы огут оставаться "непроведенными", либо "проведенными частично" (например, когда по приходу ТМЦ предоставлена накладная ТОРГ-12, но не предоставлена корректно оформленная счет-фактура). Проводки также могут возникать не на основе формализованного документа с заранее расписанной схемой проводок, но и на основе "бухгалтерской справки", в которой могут быть совершенно любая заранее непредсказуемая совокупность проводок.

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

Бухгалтерский счет - и есть, по сути, нечто подобное OLAP-кубу. Аналитические разрезы бухгалтерского счета определяют перечень его измерений, учетные периоды - одно из измерений, другие определяются видом счета (для счетов взаиморасчетов это могут быть контрагенты и договоры, для счетов учета ТМЦ - перечень складов и номенклатура и т.д.). А суммы в различных валютах, натуральные показатели (количество) образуют его меры.

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

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

P.S. А вообще-то это вопрос по тематике немного другого форума - разработка информационных систем. Модератор: Могу перенести туда тему, если создатель темы не возражает
...
Рейтинг: 0 / 0
Хранимые агрегаты
    #39441273
s_ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WGA,
Идея создавать избыточность в данных (рассчитывать разные агрегированные показатели) не с помощью средств СУБД - очень плохая. Раньше, при более слабом железе и менее продвинутых СУБД, это имело смысл в некоторых случаях. Но сейчас подобные решения принесут больше вреда, чем пользы.
Даже если у вас миллиарды фин проводок (в чем я сильно сомневаюсь), создание материализованного представления, содержащего сгруппированные по дням обороты в разрезе аналитик легко решит все задачи по быстрому формированию стандартных отчетов. И главный плюс - за целостностью данных будет следить СУБД.
А если у вас миллионы фин проводок, то современная СУБД (например PostgreSQL) даже на относительно слабом сервере сформирует нужные отчеты с приемлемой скоростью без использования материализованных представлений.

Откуда вообще возникла идея, что вам надо хранить в доп таблицах агрегаты? У вас какой-то конкретный отчет формируется неоправданно долго?
...
Рейтинг: 0 / 0
Хранимые агрегаты
    #39441318
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
GaryaP.S. А вообще-то это вопрос по тематике немного другого форума - разработка информационных систем. Модератор: Могу перенести туда тему, если создатель темы не возражаетНаверное, не стОит переносить, спасибо. Да в общем-то интересовало, какая практика является "нормой" и что аргументированно возразить авторам вышеописанной идеи. Ведь основной аргумент у противоположной стороны - "это нормально, мы видели кучу систем работающих именно так". Я не могу похвастаться знакомством с большим количеством учетных систем. Я видел только одну, и предметная область там была страхование (бухгалтерия и финансовая отчетность в том числе). Здесь же торговля...
s_ustinovОткуда вообще возникла идея, что вам надо хранить в доп таблицах агрегаты? У вас какой-то конкретный отчет формируется неоправданно долго?Возникла она из желания быстро получать оперативную информацию по бух. проводкам. Например, дебиторскую и кредиторскую задолженность по договору, краткие финансовые показатели по филиалу и т.п. Вопрос оптимизации сложных отчетов - не самое главное. Лично я понимаю, что просуммировать, скажем, по 10 проводкам, с правильными индексами может быть не намного дороже, чем достать одну строку из предварительно подготовленной таблицы. Цена создания проводок же возрастает на порядки. И не только вставки, еще и модификация же должна быть. Жаль, донести это пока не получается... Ладно, посмотрим, что еще архитектор скажет. Надеюсь разум победит )
...
Рейтинг: 0 / 0
Хранимые агрегаты
    #39441330
Shr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> требуется накладывать блокировки по филиалу
Можно без блокировок .

> По прикидками, создание одной проводки приводит к необходимости вставить/обновить от 50 строк (а может и больше) в таблицах хранимых агрегатов. Как-то слишком затратной становится.
Асинхронно, и имхо действительно на отдельной базе.
...
Рейтинг: 0 / 0
Хранимые агрегаты
    #39441339
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
Shr> требуется накладывать блокировки по филиалу
Можно без блокировок .Оттуда
И время от времени запускаем её в транзакции с TIL CONCURRENCY. Ни в коем случае не в READ COMMITTED!!!
"Время от времени" не подходит. По постановке предполагается, что остатки всегда актуальны на момент окончания транзакции.
...
Рейтинг: 0 / 0
Хранимые агрегаты
    #39441342
Shr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Время от времени" - не означает дырок в актуальности. Оно означает непостоянно проводимое уплотнение (уменьшение количества записей по которым считаются остатки). Сами остатки будут актуальны всегда.
...
Рейтинг: 0 / 0
Хранимые агрегаты
    #39441670
s_ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WGAs_ustinovОткуда вообще возникла идея, что вам надо хранить в доп таблицах агрегаты? У вас какой-то конкретный отчет формируется неоправданно долго?Возникла она из желания быстро получать оперативную информацию по бух. проводкам. Например, дебиторскую и кредиторскую задолженность по договору, краткие финансовые показатели по филиалу и т.п.
А сколько времени у вас сейчас занимает формирование таких отчетов, какой объем данных и какое железо?
...
Рейтинг: 0 / 0
Хранимые агрегаты
    #39441929
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WGA, разум должен оперировать фактами. Метрики есть у вас?
...
Рейтинг: 0 / 0
Хранимые агрегаты
    #39441943
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Garya Привилегированный пользователь
Участник
WGAНадеюсь разум победит )Тут нужно не надеяться, я претворять "разум" в жизнь. :)

WGAВопрос оптимизации сложных отчетов - не самое главное. Лично я понимаю, что просуммировать, скажем, по 10 проводкам, с правильными индексами может быть не намного дороже, чем достать одну строку из предварительно подготовленной таблицыСмотря что в этой таблице находится. Если электронные формы первичных документов, тогда это не очень удачная идея. Подобные идеи приходят на ум тем, кто не видит суть системы бухгалтерских счетов и проводок.

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

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

Классическая учетная система 1С предлагает некие стандартные схемы проводок, шаблоны которых, в зависимости от вида документа и параметров, указанных в документах, автоматически меняться. Но они не предлагаются как схема проводок "зашитая насмерть" для того или иного случая. В каких-то специфических ситуациях пользователь всегда имеет возможность отредактировать те проводки, которые система предложила "по умолчанию" - и это правильно. ИНФИН предоставляет возможность воспользоваться предварительно настроенными совокупностями проводок с помощью "автоматических операций" или "стандартных операций", но также позволяет сделать "просто проводки" - совершенно любые и по любому поводу, если предварительно настроенные схемы в данной конкретной ситуации чем-то не устраивают пользователя. И это тоже правильно.

Есть вещи, которые в 1С меня раздражают после того как я поработал с ИНФИНом - это как раз отсутствие унифицированного подхода к отчетам и интерфейсам, который имеется в ИНФИНе. В ИНФИНе, если ты просматриваешь что-либо табице-подобное, у тебя всегда есть возможность единообразных механизмов фильтрации, поиска, сортировки, вывода суммирующих итогов. В 1С же в одних случаях нужно использовать одни методы, в других другие. Флаги "проведено" или "помечено на удаление" недоступны для фильтрации записей в некоторых компонентах интерфейса, в которых доступны другие поля. В одних табличных представлениях есть возможность увидеть суммовые итоги, в других нету. Не понятно, почему, например, отфильтровавший в перечне платежек некую их совокупность по наличию некой фразы в назначении платежа не может сразу же получить их итоговую сумму, а должен хвататься за калькулятор или, совершая груду промежуточных действий, выгружать данные в электронные таблицы, чтобы там просуммировать полученные записи, или городить новый вид отчета где-то в другом месте программы, когда вот уже оно это место, где нужные записи уже отфильтрованы, осталось только где-нибудь увидеть поле "ИТОГО"...

В ИНФИНе как раз универсальный подход. Если ты видишь где-нибудь что-нибудь табличное, ты можешь сверху и снизу (в "шапке" и в "подвале"), слева и справа сам единообразно настраивать любые вспомогательные поля, в частности для суммирования. И они работают и "внутри документа" подобного "начислению зарплаты" (вот не понятно, почему в этом документе невозможно отфильтровать записи при большом количестве сотрудников и посмотреть по ним какие-то подытоги), и в "журналах документов", и в отчетах вроде ОСВ. Мне нравится ИНФИН именно тем, что он не плодит сущности без необходимости, как в 1С. Всё что нужно учитывать в нем вполне может учитываться на одних только "счетах" (балансовых, налоговых, забалансовых, учетных) - единообразно. И для этого не нужно придумывать отдельные ОСВ для "регистров" и отдельно "для счетов", и пытаться запомнить, в каких частях интерфейса находится какая кнопка или команда, оно всегда в одном и том же месте, и если ты научился "крутить куб" для просмотра задолженностей, то ты уже автоматом умеешь "крутить куб" и для просмотра информации о налогах, о зарплате, о номенклатуре ТМЦ - как в бухгалтерском, так и в налоговом, и в управленческом учете - совершенно единообразно, не требуется выучивать никаких новых команд и пытаться запомнить новые кнопки в новых частях форм или отчетов, или обращаться к каким-то супер-спецам, знающие "сокровенные тайны" про внутренности системы. ПМСМ, хорошая система - это та система, которая умеет много, а от пользователя требует мало. И как раз для этого лучше всего использовать унифицированные интерфейсы и унифицированные приемы работы, чем очень подкупает ИНФИН. В частности, ИНФИН позволяет настроить новые виды документов, новые счета и новые схемы проводок, которые связывают документы со счетами - без программирования и без "изменения конфигурации" (то есть, непосредственно пользователю системы).

Не рекомендую "изобретать велосипед". Лучше воспользоваться готовой системой. Пока Вы поймете все нюансы и сообразите, как правильнее нужно было делать, уйдет очень немало сил и времени на реализацию далеко не самых удачных вариантов. 1С, например, уже десятилетиями присутствует на рынке, но концептуально остается весьма куцой системой (по сравнению с ИНФИНом). А между тем, над ней мозгуют не самые глупые люди и весьма давно.
...
Рейтинг: 0 / 0
Хранимые агрегаты
    #39441993
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
GaryaТут нужно не надеяться, я претворять "разум" в жизнь. :)
.................
Не рекомендую "изобретать велосипед". Лучше воспользоваться готовой системой.Я аутсорсер и этим все сказано. Считаю своим долгом указать на недостатки проектируемого решения, но не считаю возможным принимать решения. И уж тем более не агитировать за готовую систему. Это ж все равно, что сук рубить под собой

ЗЫ. Разум не возобладал... Тему прошу считать закрытой.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / ERP и учетные системы [игнор отключен] [закрыт для гостей] / Хранимые агрегаты
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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