При работе в конфигурации «1С:Управление торговлей» (редакция 11) пользователи часто сталкиваются со специфической проблемой: при попытке впервые распечатать счет-фактуру или УПД сразу после создания документа система надолго зависает (задержка может составлять от нескольких десятков секунд до нескольких минут). Однако при повторном открытии печатной формы с любого рабочего места задержка полностью исчезает. Проанализируем эту ситуацию, выясним технические причины такого поведения и рассмотрим способы решения проблемы.
На первый взгляд кажется, что проблема связана с некорректно работающим принтером, сетевыми каталогами, кеш-памятью пользователя или ошибками формы ОбщаяФорма.ПечатьДокументов. Очистка кэша, запуск программы с полными правами и проверка принтера по умолчанию в таких случаях не дают результата.
Замер производительности в момент зависания показывает, что длительное время выполняется не сама визуальная форма, а внутренние процедурные вызовы системы. В частности, задержка происходит из-за выполнения метода РаспределениеВзаиморасчетов.РаспределитьВсеРасчетыСКлиентами. Этот алгоритм запускает актуализацию расчетов с клиентами за текущий период непосредственно в сеансе пользователя в момент формирования печатной формы.
Разберем подробно, почему процедура печати счета-фактуры задействует механизм взаиморасчетов:
ЗаданияКРаспределениюРасчетов могут накапливаться неотработанные записи за прошлые периоды. Это происходит из-за наличия даты запрета изменения, сбоев при проведении документов или если отключены регламентные задания. При первом вызове печати программа начинает пересчитывать всю накопленную цепочку движений, начиная с первого необработанного документа.РасчетыСКлиентами и РасчетыСКлиентамиПоДокументам существенно замедляет выполнение SQL-запросов при расчете авансов.Рассмотрим по шагам варианты устранения длительных задержек при выводе на печать.
В устаревших релизах УТ 11 и платформы «1С:Предприятие 8.3» присутствовали ошибки синхронного вызова распределения расчетов при открытии форм. Обновление конфигурации на актуальный релиз содержит оптимизированные механизмы работы со взаиморасчетами и исправляет некорректные зависания форм.
Чтобы исключить вызов тяжелых процедур во время работы пользователя, необходимо перенести расчеты в фоновый режим:
Проверим содержимое регистра сведений ЗаданияКРаспределениюРасчетов. Если в нем накопились «застрявшие» или сбойные записи за закрытые периоды, пересчет расчетов будет постоянно тормозить работу. Потребуется выполнить регламентные операции через рабочее место закрытия месяца или актуализировать расчеты, временно сняв дату запрета изменения данных.
В современных релизах «1С:Управление торговлей» рекомендуется использовать онлайн-режим выполнения взаиморасчетов. В этом режиме распределение авансов происходит сразу в момент проведения документов (или мгновенно после проведения в фоновом потоке). Это полностью снимает нагрузку с процедур формирования печатных форм.
Если база данных работает в клиент-серверном режиме на MS SQL Server или PostgreSQL, необходимо регулярно выполнять регламентные процедуры обслуживания: обновление статистики и дефрагментацию/реиндексацию таблиц. В первую очередь это касается таблиц регистров накопления взаиморасчетов и регистра заданий к распределению.