В процессе обновления типовых конфигураций 1С, таких как 1С:Бухгалтерия КОРП, разработчики иногда меняют структуру метаданных. Одним из таких изменений может стать установка свойства Длина уточнения периода у регистра бухгалтерии. Если вы столкнулись с тем, что после обновления привычные отчеты или запросы к остаткам начали выполняться значительно медленнее, давайте разберем, с чем это связано и как с этим работать.
По умолчанию точность периода в регистрах 1С ограничена одной секундой. Это означает, что все записи, сделанные в одну секунду, для системы считаются одновременными. Свойство Длина уточнения периода (может принимать значения 0, 1, 2 или 3) позволяет «разбить» одну секунду на более мелкие интервалы.
Установка этого значения добавляет к полю периода скрытый суффикс, который позволяет системе различать до 10, 100 или 1000 операций внутри одной календарной секунды. Это необходимо для обеспечения строгой последовательности проводок в высоконагруженных системах, где за одну секунду может выполняться множество автоматических операций.
Изменение этого свойства — серьезная операция, которая требует пересчета итогов регистра, так как физически меняется структура хранения данных в базе (СУБД). Основные причины падения производительности:
Давайте проанализируем типовой запрос, который часто используется для получения остатков по банковским счетам. Распространенной ошибкой является использование оператора ВЫРАЗИТЬ внутри условия соединения или отбора. Это заставляет систему выполнять полное сканирование таблицы, вместо того чтобы воспользоваться индексом.
Рассмотрим пример оптимизации запроса:
Было (потенциально медленный вариант):
ВЫБРАТЬ
БИ.СуммаНачальныйОстаток
ИЗ
РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&Нач, &Кон, , , , , Организация В (&Орг) И (ВЫРАЗИТЬ(Субконто1 КАК Справочник.БанковскиеСчета)) = &Счет) КАК БИ
Стало (оптимизированный вариант):
Вместо приведения типов в условии отбора, лучше заранее подготовить массив ссылок или использовать корректные параметры типа СправочникСсылка.БанковскиеСчета. Если вы используете ВЫРАЗИТЬ, вы фактически лишаете оптимизатор возможности использовать индекс по полю Субконто.
Если вы заметили, что после обновления значение свойства изменилось с 0 на 1, не спешите менять его обратно вручную. Разработчики типовых решений делают это для обеспечения корректности учета в специфических сценариях.
Технологический журнал или Консоль системы управления базами данных, чтобы увидеть, какой индекс (или его отсутствие) используется при выполнении запроса.ВЫРАЗИТЬ, в секции ГДЕ, так как это является частой причиной потери производительности при работе с регистрами бухгалтерии.В заключение, свойство Длина уточнения периода — это мощный инструмент для обеспечения атомарности проводок, но платой за него является повышенная нагрузка на индексы. Если вы столкнулись с тормозами, прежде всего, проанализируйте текст запроса на предмет использования функций, блокирующих индексы, и уже затем рассматривайте вопрос архитектурных настроек регистра.