В работе бухгалтера часто возникает ситуация, когда стандартный отчет, работавший ранее быстро, начинает требовать значительного времени для формирования. Одной из таких проблем является медленный вывод Акта сверки взаиморасчетов в программе «1С:Бухгалтерия 8.3» именно в режиме детализации по договорам. Рассмотрим ситуацию: при наличии всего 10 документов в акте предварительный просмотр может занимать от 5 до 10 минут, хотя без разбивки по договорам форма открывается мгновенно. Проанализируем причины этого поведения и разберем по шагам методы оптимизации.
Для начала проанализируем результаты замера производительности, которые помогают локализовать проблему. При формировании отчета с разбивкой по договорам основной «тормоз» наблюдается на этапе вызова метода открытия формы печати. Посмотрим на пример замера:
ОбщийМодуль.УправлениеПечатьюКлиент.Модуль (строка 42):
ОткрытьФорму("ОбщаяФорма.ПечатьДокументов", ПараметрыОткрытия, ВладелецФормы, Строка(Новый УникальныйИдентификатор));
Время выполнения: 456,59 сек. (99,95% нагрузки)
Для сравнения, без разбивки по договорам этот же метод выполняется всего за 0,83 сек. Важно понимать, что метод ОткрытьФорму для печатных форм выполняет не просто открытие окна, а инициирует построение табличного документа на стороне сервера и его последующую передачу на клиент. Выясним причину, почему добавление одной группировки (договора) так критично влияет на скорость.
Если проблема исчезает на 1–2 месяца после выгрузки и загрузки конфигурации в новую базу (или после тестирования и исправления), это явный признак проблем на уровне СУБД. При разбивке по договорам система выполняет гораздо более сложные запросы к регистрам бухгалтерии и накопления. Разберем подробнее, что происходит:
UPDATE STATISTICS.tempdb расположена на медленном диске, это станет «бутылочным горлышком».Проанализируем ситуацию с правами доступа. В типовых конфигурациях часто включено ограничение доступа на уровне записей (RLS). Когда мы формируем акт сверки без разбивки, система проверяет права только на головной объект (контрагента). Однако при включении детализации по договорам механизм RLS вынужден проверять права доступа к каждому договору в отдельности.
Если в базе тысячи договоров, запрос превращается в огромную конструкцию с множеством соединений. Чтобы проверить эту гипотезу, сформируем акт под пользователем с Полными правами. Если задержка исчезла — проблема в настройках прав доступа и сложности шаблонов ограничений.
Вернемся к замеру производительности. Длительное выполнение ОткрытьФорму часто связано с тем, что платформа пытается рассчитать высоту каждой строки в формируемом документе. Рассмотрим этот механизм:
В ячейках табличного документа для печатных форм часто стоит свойство Автовысота. При выводе акта сверки с разбивкой по договорам количество строк и группировок увеличивается. Платформа 8.3 при подготовке ТабличныйДокумент должна вычислить высоту каждой секции, исходя из шрифтов и содержимого. На больших объемах данных или при наличии вложенных группировок этот процесс занимает колоссальное время на сервере.
Выясним, как это можно исправить: если форма не типовая или есть возможность внести изменения, стоит попробовать отключить автоматический расчет высоты строк для тех областей, где это не критично.
Рассмотрим, какой код выполняется «под капотом» при установке флага «Разбивка по договорам». В отличие от простого списка документов, здесь системе требуется:
Если у контрагента за всю историю было множество договоров (даже закрытых), типовой запрос может анализировать их все. Проанализируем состояние справочника Договоры контрагентов. Большое количество неиспользуемых, но не помеченных на удаление элементов может замедлять выборку. Посмотрим на пример оптимизации: регулярная пометка на удаление и очистка дублей договоров существенно ускоряют работу аналитических отчетов.
Для устранения медленного вывода акта сверки выполним следующие действия:
Часто проблема кроется в «раздутом» кэше метаданных на сервере приложений 1С. Проанализируем содержимое папки snccntx в каталоге сеансовых данных. Рекомендуется остановить службу 1C:Enterprise Server и очистить содержимое временных папок. Это часто дает мгновенный эффект, аналогичный пересозданию базы.
Запустим конфигуратор и выполним следующие действия в меню «Администрирование» — «Тестирование и исправление»:
Если вы используете клиент-серверный вариант, настройте в SQL Management Studio план обслуживания, включающий:
-- Пример команды для обновления статистики вручную для конкретной таблицы (если известен ее ID в 1С)
UPDATE STATISTICS _InfoRg1234 WITH FULLSCAN;
Регулярное выполнение FULLSCAN для статистик таблиц регистров бухгалтерии и расчетов позволит оптимизатору строить верные планы запросов даже при сложных группировках по договорам.
Иногда замедление вызвано тем, что система «зацикливается» на попытках восстановить последовательность зачета авансов. Проанализируем отчет «Анализ субконто» по конкретному контрагенту в разрезе договоров. Если мы видим «красноту» (отрицательные остатки) или зачеты, которые не могут распределиться, это повод для перепроведения документов. Порядок в учете напрямую влияет на скорость формирования АктСверка.
Таким образом, мы выяснили, что проблема долгого вывода акта сверки с детализацией комплексная. Она сочетает в себе как чисто технические аспекты работы СУБД и платформы (кэш, статистика, автовысота), так и учетные моменты (RLS, состояние итогов). Последовательное выполнение предложенных шагов позволит вернуть скорость формирования отчета к нормальным показателям.