Групповое проведение документов. Штатные методы оптимизации.

Прочтение статьи Павла Шемякина "Групповое проведение документов. Ускоряемся?" показало, что работа движка V7 (либо совсем не описанная в документации, либо описанная плохо) вызывает много вопросов и неясностей. Мне кажется, что прежде, чем придумывать какие-то сложные алгоритмы ускорения, реализация которых требует высокой квалификации, неплохо бы попробовать оптимизировать групповое проведение штатными методами – это может оказаться достаточным.

автор статьи: Виктор Болбат (Enot)

Источник hare.ru

Прочтение статьи Павла Шемякина "Групповое проведение документов. Ускоряемся?" показало, что работа движка V7 (либо совсем не описанная в документации, либо описанная плохо) вызывает много вопросов и неясностей. Мне кажется, что прежде, чем придумывать какие-то сложные алгоритмы ускорения, реализация которых требует высокой квалификации, неплохо бы попробовать оптимизировать групповое проведение штатными методами – это может оказаться достаточным.

Итак, перед нами стоит задача оптимизации проведения документов при групповом проведении (в более широком смысле – при автоматическом проведении нескольких документов сразу).

Действия, производимые при проведении документа, можно условно (как мне сейчас удобно) разбить на следующие части (которых может и не быть в реальных документах):

  1. Установка периодических реквизитов справочника.
  2. Запись бухгалтерских проводок. Напомню, что при этом происходит не только запись в журнал проводок, но и обновляются бухгалтерские итоги (далее БИ).
  3. Запись движений регистров. Как и в случае с проводками, дополнительно обновляются итоги.
  4. Запись записей журнала расчетов (по данной части я не имею глубоких познаний и поэтому далее рассматривать не буду).
  5. Выполнение запросов для получения данных по оборотам и остаткам БИ.
  6. Выполнение запросов для получения данных по оборотам и остаткам регистров.
  7. Запись данных, за исключением предыдущих пунктов.
  8. Чтение, анализ данных.
Что можно сделать со всем этим? Сразу можно откинуть п.8, оптимизировать здесь нечего.

Для оптимизации любой записи данных (в том числе и движений документа) можно воспользоваться механизмом транзакций. Для этого перед стартом групповой обработки выполняется команда НачатьТранзакцию(), а в конце – ЗафиксироватьТранзакцию(). Именно так сделано в обработке "ОбработкаДокументов", в случае НЕ монопольного подключения к базе. Приблизительный смысл в том, что в процессе проведения запись данных в базу не производиться, а накапливается в буфере. После окончания проведения, все изменения записываются пачкой.

Эффект такой оптимизации получается очень значительный, производительность может вырасти в разы.

Есть и недостаток – если документов проводиться очень много (или данных много), то буфер, в котором накапливаются изменения, сам становиться узким местом (деталей внутренней организации транзакций я не знаю, но на практике это выглядит именно так). Оптимальной является следующая тактика: разбить всю массу документов на пакеты (количество документов в пакете подбирается экспериментально, исходя из обЪёма данных, хранимых в документе) и проведение каждого пакета оформляется в виде транзакции.

Запись проводок (непосредственно запись в журнал проводок) оптимизировать не получится (за исключением использования транзакций). А вот обновление итогов – запросто. Принцип очень простой. Попробуйте записать проводки в большую базу данных вначале с датой, на пару лет раньше текущей (при этом идет обновление итогов за пару лет), а потом с текущей датой. И посмотрите на производительность.

Возможно несколько вариантов оптимизации:

  • Можно установить бухгалтерские итоги на начало всех времен. При этом обновление их происходить не будет. Максимальная скорость записи проводок. Но этот метод можно использовать только в специфических случаях, т.к. в процессе проведения часто (как правило) возникает необходимость получения данных БИ. Этот способ рекомендуется для документов, которые не обращаются БИ в модулях проведения.
  • Можно воспользоваться методом Актуальность() обЪекта БухгалтерскиеИтоги (можно подсмотреть реализацию в обработке "ОбработкаДокументов"). Смысл в том, что обЪект БухгалтерскиеИтоги будет поддерживать БИ в актуальном состоянии при проведении документов. При обновлении БИ, данные будут браться из обЪекта БухгалтерскиеИтоги,/tt> (здесь я не уверен, а если точнее – не помню, сказывается ли это на скорости записи проводок, или нет).
  • И, наконец, можно воспользоваться встроенным механизмом "Проведение документов". При этом БИ рассчитываются на момент проведения документа, а расчёт итогов "на после документа" не производится (система рассчитывает промежуточные итоги на начало проведения документа, после проведения эти данные обновляются и используются далее, и только в конце периода они записываются в базу). Это самый лучший вариант.
С записью движений регистров ситуация аналогичная. В оперативном учете существует понятие точки актуальности (далее ТА). При записи движений в ТА обновляются лишь данные в ТА. Таким образом, все, что требуется, это перемещать ТА вместе с проведением документа (вернее, необходимо вначале установить ТА на первый документ, а дальше ТА при проведении должна перемещаться автоматически). Как это делается технически – опять-таки, можно посмотреть в обработке "ОбработкаДокументов". Аналогично работает и встроенный механизм "Проведение документов".

Запросы r БИ при проведении документов, как правило, выполняются на дату документа (вернее, на "начало" документа). Например, чтобы рассчитать цену, исходя из текущих остатков. Для оптимизации скорости выполнения именно таких запросов (если запрос выполняется на произвольную дату, то ничего сделать не получится) можно воспользоваться рассмотренными выше методами: использование встроенного механизма "Проведение документов" или метода Актуальность() обЪекта БухгалтерскиеИтоги. БИ будут браться из временных данных (текущих итогов), а не рассчитываться с начала периода итогов (квартала).

Кроме того, если используется метод БИ.Рассчитать(ТекущийДокумент()) и, соответственно, далее пользовать функции СКД(), то можно воспользоваться функцией ИтогиАктуальны(), если она возвращает единицу, то выполнять метод БИ.Рассчитать(ТекущийДокумент()) не надо, можно сразу обращаться к итогам. Выигрыш в скорости проведения получается очень большой.

Оптимизация запросов к итогам регистров похожа на оптимизацию запросов к БИ. Если документ двигает ТА, то можно сразу же обращаться к итогам. Это проверяется точно так же, функцией ИтогиАктуальны()

Подведем итог. Что нужно в модулях проведения:

  1. Для оптимизации записи движений никаких действий предпринимать не надо.
  2. Для получения итогов регистров необходимо выбирать остатки или выполнять запросы на ТА. Перед этим всегда нужно проверять актуальность итогов.
  3. Для получения БИ в случае выполнения запроса (в том числе при помощи обЪекта БухгалтерскиеИтоги) никаких действий предпринимать не надо. В случае прямого обращения к БИ без запроса, нужно предварительно проверять необходимость выполнения расчета (актуальность итогов).
Для группового проведения документов необходимо пользоваться:
  1. Встроенным механизмом "ПроведенияДокументов". Это самый оптимальный и универсальный вариант.
  2. Дополнительной обработкой с использованием транзакций и проведением пакетами. Например, "ОбработкаДокументов" НЕ в монопольном режиме (именно в этом режиме включаются транзакции в данной обработке). В некоторых случаях (незначительное использование регистров и проводок, отсутствие обращений к итогам) получается значительный выигрыш по сравнению с предыдущим методом.
  3. Дополнительной обработкой, которая поддерживает итоги в актуальном состоянии с проведением документов. Например, "ОбработкаДокументов" В монопольном режиме (именно в этом режиме поддерживаются актуальными итоги). Работает медленнее первого варианта (хотя, существуют случаи, когда быстрее, из-за оптимизации БИ по счетам), но незначительно.
  4. Дополнительной обработкой, которая использует п.2 и п.3. В обработке "ОбработкаДокументов" одновременно эти методы не используются. Почему, я не знаю. Практическая проверка показывает, что всё работает нормально. Но, на всякий случай, используйте этот метод с осторожностью.
Эффект сильно зависит от каждого конкретного случая, но, как правило, при грамотной оптимизации штатными методами производительность уведичивается в разы.

Начать дискуссию

Интервью

ТоТ еще разговор. Андрей Матюха: Трюфель, юдзу, пондзу

Продолжаем беседу с предпринимателями в рамках проекта «ТоТ еще разговор». Сегодня в гостях Андрей Матюха – шеф-повар, автор и совладелец краснодарских ресторанов: The Печь, Угли-Угли и Племя, которые стабильно попадают в ресторанные рейтинги, а также гриль-бар Ребрышки и Бедрышки, который открылся совсем недавно.

4
Обзоры новостей

Лишение льгот за дорогую аренду жилья, проблемы Прилучного, налог на парковки в обзоре

Финансовые события дня.

Готовим сани летом. На что решиться в 2025 году: остаться на УСН, выбрать ставку 5%, 20% или переходить на ОСНО? 🛷 «Ночной бухгалтер» № 1726

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

Иллюстрация: Вера Ревина / Клерк.ру

Курсы повышения
квалификации

18
Официальное удостоверение с занесением в госреестр Рособрнадзора
Банковские карты

С 19 июля воспользоваться картой Union Pay от РСХБ заграницей будет нельзя

Россельхозбанк с 19 июля приостановит расчеты по картам UnionPay за границей. Клиентам предложили снять деньги с карт.

Лицензирование

Как переоформить лицензии при слиянии юридических лиц

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

Как переоформить лицензии при слиянии юридических лиц
Бесплатно с Аренда

Аренда: что нужно раскрыть в учетной политике

Бухгалтерские стандарты и НК в ряде случаев позволяют выбирать способы учета при аренде. Выбранные варианты нужно отразить в учетной политике. Расскажем, как сформировать бухгалтерскую и налоговую учетную политику у арендатора и арендодателя.

Аренда: что нужно раскрыть в учетной политике
Опытом делятся эксперты-практики, без воды
НДФЛ

Командированные за границу для строительства АС все равно будут налоговыми резидентами РФ

Физлица, которые в течение года были в России менее 183 дней, являются нерезидентами РФ. Но есть исключения для ряда случаев. Таких исключений станет больше.

Мошенники обманывают сотрудников таможни

Фейковый «Иван Иванович» пытается заполучить персональные данные должностных лиц Таможенной службы (ФТС).

Регистрация ООО

По какой причине в ЕГРЮЛ может не быть адреса юрлица

Для целей госрегистрации юрлиц используется адрес из Государственного адресного реестра (ГАР) в структуре муниципального деления.

Налоговый мониторинг

Что такое налоговый мониторинг и как его проводят в 2024 году

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

Что такое налоговый мониторинг и как его проводят в 2024 году
1
Маркетинг

22 Сервиса, которые изменят ваш бизнес — автоматизация маркетинга, которая работает

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

22 Сервиса, которые изменят ваш бизнес — автоматизация маркетинга, которая работает
Самозанятые

Если ИП переходит на НПД без отказа от УСН, его самозанятость рано или поздно аннулируют

При переходе с УСН на НПД обязательно надо направить в ИФНС уведомление о прекращении деятельности по упрощенке. Если не сдать этот документ, постановка на учет по НПД аннулируется. Это произойдет рано или поздно. Как правило – поздно.

УСН

👀 Что выгоднее бизнесу на УСН в 2025 году: НДС 5%, 20% или переход на ОСНО + мнение налогового эксперта

С 2025 года бизнес на УСН с доходами свыше 60 млн рублей будет платить НДС. Можно выбрать ставку как на ОСНО – 20% или вовсе перейти на ОСНО, а можно выбрать ставку 5% без права на вычет.

Карьера бухгалтера

Самые востребованные навыки аналитика 1С: обзор вакансий с зарплатой 150+ тыс. рублей

Что должен уметь аналитик 1С, чтобы рассчитывать на высокий доход? Мы проанализировали вакансии и выделили требования, которые работодатели чаще всего предъявляют к кандидатам на должность. Разбираемся, какие скилы нужно подтянуть, чтобы получить заветное место.

Самые востребованные навыки аналитика 1С: обзор вакансий с зарплатой 150+ тыс. рублей
Маркетинг

Торговым сетям запретят взимать вознаграждение с поставщиков яиц

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

Заявление на открытие компании должно быть подписано одним из трех способов

Подпись заявителя на заявлении при госрегистрации юрлица при его создании должна быть засвидетельствована.

Приостановление Росреестром госрегистрации можно будет обжаловать не в суд

Совет Федерации одобрил разработанным Росреестром закон о внесудебном обжаловании приостановления регистрации права.

УК РФ

Окончательно решен вопрос о мере пресечения одному из руководителей «Локалкитчен»

Мосоргсуд оставил без изменения меру пресечения одному из руководителей «Локалкитчен» по делу о массовом отравлении готовой едой, приведшем к бутулизму.

Цифровой рубль

Путин: цифровой рубль нужно использовать в разных сферах

Тестовая группа провела свыше 30 тысяч операций с цифровым рублем. Помимо внедрения новой формы валюты в России будут заниматься развитием цифровых активов.

Интересные материалы

Банковские карты

Розыгрыш трех именных карт банка Казахстана

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