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

Прочтение статьи Павла Шемякина "Групповое проведение документов. Ускоряемся?" показало, что работа движка 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. В обработке "ОбработкаДокументов" одновременно эти методы не используются. Почему, я не знаю. Практическая проверка показывает, что всё работает нормально. Но, на всякий случай, используйте этот метод с осторожностью.
Эффект сильно зависит от каждого конкретного случая, но, как правило, при грамотной оптимизации штатными методами производительность уведичивается в разы.

Ещё раз: как продвигать свои посты на «Клерке»

Если вы видите это сообщение, значит продвижение работает.

Ещё раз: как продвигать свои посты на «Клерке»
10

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

💥 Бодрящие скидки на курсы повышения квалификации и профессиональной переподготовки! Ведем запись на первый летний поток

Набираем первый летний поток-2024 на профкурсы. Успейте записаться до 3 июня, чтобы за лето повысить квалификацию и выйти на новый уровень знаний!

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

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

Календарь вебинаров для бухгалтера в июне 2024. Выбирайте и смотрите!

Будьте в курсе последних изменений в законодательстве! Выбирайте из 9 вебинаров интересные именно вам и записывайтесь. Забирайте в закладки календарь вебинаров для бухгалтера, которые пройдут в июне 2024. Подписчикам «Клерк.Премиум» — бесплатный доступ.

Календарь вебинаров для бухгалтера в июне 2024. Выбирайте и смотрите!
7
Инвестиции

Инвестиции в космические объекты пропишут в законе

Госдума приняла в первом чтении законопроект о государственно-частном партнерстве в сфере космической деятельности.

Лучшие спикеры, новый каждый день

Чем грозит неявка сотрудника на медосмотр

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

Все гранты на инновационное развитие освободили от налога

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

Предприятия за каждого сотрудника из другого региона получат 300 тысяч рублей

Государство выделит субсидии бизнесу, который работает над крупным проектом и привлекает сотрудников из других регионов. Размер поддержки составит 12 МРОТ.

Опытом делятся эксперты-практики, без воды

За что заблокируют ваш счет? Что не нужно делать, чтобы «влететь» на блок

Сейчас в мире бизнеса идет война за темную и светлую сторону.

За что заблокируют ваш счет? Что не нужно делать, чтобы «влететь» на блок

Налоговые перспективы на 2025 год. Прогрессивная шкала НДФЛ

Какими будут налоговые ставки НДФЛ в 2025 году и можно ли этот налог оптимизировать.

🚚 Грузоперевозка в страну ЕАЭС может облагаться разным НДС

При сделках с контрагентами из стран ЕАЭС взимание косвенных налогов при работах, услугах идет в стране, территория которой признается местом реализации. При грузоперевозках место реализации – страна исполнителя.

МСФО

Внедрение азиатских МСФО на российский рынок

В данном докладе мы рассмотрим перспективы внедрения азиатских Международных стандартов финансовой отчетности (МСФО) на российский рынок.

Внедрение азиатских МСФО на российский рынок
1
Маркетплейсы

Цены на наушники на маркетплейсах оказались завышенными по сговору

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

💥 Бодрящие скидки на курсы повышения квалификации и профессиональной переподготовки! Ведем запись на первый летний поток обучения

Набираем первый летний поток-2024 на курсы повышения квалификации и переподготовки с максимальными скидками, чтобы вы не ограничивали траты на отпуск и получили полезные знания. Начало обучения 1 июня, присоединяйтесь!

💥 Бодрящие скидки на курсы повышения квалификации и профессиональной переподготовки! Ведем запись на первый летний поток обучения
2
Миникурсы, текстовые и видеоинструкции для бухгалтеров

Итоги 35 месяцев инвестиций. 3,83 млн рублей

1 июня, значит пора защищать детей и подводить итоги мая! Ежемесячно я пишу отчёт о том, что произошло с моими инвестициями. Напоминаю: я начал копить на квартиру в Сочи в июле 2021. 35 месяцев позади. Погнали!

Итоги 35 месяцев инвестиций. 3,83 млн рублей

Горящие глаза, «ген предпринимательства» и Борис Мальцев 

Студенты из акселератора «БизнесКуб» КубГУ, мечтая о собственных стартапах и предпринимательских прорывах, направлялись на встречу с успешными бизнесменами.

Горящие глаза, 
«ген предпринимательства» и 
Борис Мальцев 
1
Бесплатно с УСН

Как в 2024 году уменьшать налоги по УСН и ПСН на страховые взносы: таблица для ИП и ООО

При расчете налога на УСН «доходы» для фиксированных взносов факт уплаты не имеет значение, для взносов за работников — важен факт уплаты. На доходно-расходной упрощенке факт уплаты имеет решающее значение. Для подтверждения этого факта может понадобиться заявление о зачете. Смотрите в нашей таблице, когда и как можно учитывать взносы при УСН и ПСН.

Как в 2024 году уменьшать налоги по УСН и ПСН на страховые взносы: таблица для ИП и ООО

О чем говорят бухгалтеры — топ 5 обсуждаемых тем на этой неделе. 👂«Ночной бухгалтер» № 1694

Говорили не только о реформах, обычные рабочие проблемы никуда не делись. Кто-то в Китай не может перевести деньги, у кого-то налог на УСН — выпади глаза, а у кого-то вообще счета заблокировали. Но всегда есть коллеги-спасители, которые и словом утешат, и делом помогут.

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

Стартовал сезон скупки долларов

Интерес к валюте вырос в преддверии сезона отпусков, на спрос также повлияло укрепление рубля.

3

Иван Никитенко: «Я точно не готов продавать душу и работать с клиентами-говнюками»

Это второй сезон проекта «ТоТ еще разговор». Хочется говорить с предпринимателями об их бизнесе. Мы пригласили краснодарского предпринимателя Ивана Никитенко.

Иван Никитенко: «Я точно не готов продавать душу и работать с клиентами-говнюками»
3
Банки

Доля просроченных микрозаймов сократилась до 32%

80% клиентов МФО получают займы дистанционно.

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

УСН

Изменения по УСН: НДС и новые лимиты

К каким переменам ИП и организациям на УСН надо приготовиться в 2024-2025 гг.

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