Что такое длина уточнения периода в регистре бухгалтерии 1С и почему она влияет на производительность?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

В процессе обновления типовых конфигураций 1С, таких как 1С:Бухгалтерия КОРП, разработчики иногда меняют структуру метаданных. Одним из таких изменений может стать установка свойства Длина уточнения периода у регистра бухгалтерии. Если вы столкнулись с тем, что после обновления привычные отчеты или запросы к остаткам начали выполняться значительно медленнее, давайте разберем, с чем это связано и как с этим работать.

Что такое «Длина уточнения периода»?

По умолчанию точность периода в регистрах 1С ограничена одной секундой. Это означает, что все записи, сделанные в одну секунду, для системы считаются одновременными. Свойство Длина уточнения периода (может принимать значения 0, 1, 2 или 3) позволяет «разбить» одну секунду на более мелкие интервалы.

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

Почему запросы начинают «тормозить»?

Изменение этого свойства — серьезная операция, которая требует пересчета итогов регистра, так как физически меняется структура хранения данных в базе (СУБД). Основные причины падения производительности:

  1. Усложнение индексов: Когда мы включаем уточнение периода, индексы таблицы итогов становятся более объемными. Оптимизатору СУБД требуется больше ресурсов для поиска данных, так как теперь нужно учитывать дополнительные разряды точности.
  2. Неэффективные конструкции в коде: Если в коде запроса присутствуют конструкции, которые «отрубают» использование индексов, замедление становится критическим.

Как оптимизировать запросы при работе с регистрами?

Давайте проанализируем типовой запрос, который часто используется для получения остатков по банковским счетам. Распространенной ошибкой является использование оператора ВЫРАЗИТЬ внутри условия соединения или отбора. Это заставляет систему выполнять полное сканирование таблицы, вместо того чтобы воспользоваться индексом.

Рассмотрим пример оптимизации запроса:

Было (потенциально медленный вариант):


ВЫБРАТЬ
    БИ.СуммаНачальныйОстаток
ИЗ
    РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&Нач, &Кон, , , , , Организация В (&Орг) И (ВЫРАЗИТЬ(Субконто1 КАК Справочник.БанковскиеСчета)) = &Счет) КАК БИ

Стало (оптимизированный вариант):

Вместо приведения типов в условии отбора, лучше заранее подготовить массив ссылок или использовать корректные параметры типа СправочникСсылка.БанковскиеСчета. Если вы используете ВЫРАЗИТЬ, вы фактически лишаете оптимизатор возможности использовать индекс по полю Субконто.

Практические рекомендации по настройке

Если вы заметили, что после обновления значение свойства изменилось с 0 на 1, не спешите менять его обратно вручную. Разработчики типовых решений делают это для обеспечения корректности учета в специфических сценариях.

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

← На главную