Многие пользователи и бухгалтеры, работающие в 1С:ERP Управление предприятием или 1С:Комплексная автоматизация, сталкиваются с раздражающей задержкой при формировании стандартных отчетов. Речь идет о появлении информационной панели на красном фоне с текстом: «Данные учета неактуальны по... Рекомендуется выполнить закрытие месяца». Мало того, что это сообщение перекрывает полезное пространство, так еще и сама проверка вызывает зависание формы на несколько секунд. Рассмотрим подробнее, почему это происходит и как программно отключить этот механизм, если стандартных настроек в интерфейсе не предусмотрено.
Проанализируем ситуацию с точки зрения архитектуры системы. В отличие от 1С:Бухгалтерия предприятия 3.0, где такая настройка часто вынесена в параметры отчета, в ERP-системах логика контроля актуальности встроена гораздо глубже. Это связано с тем, что расчет себестоимости и распределение затрат в ERP — процессы многоэтапные и тяжеловесные. Разработчики системы исходят из того, что бухгалтер должен видеть только гарантированно верные цифры, прошедшие через процедуру Закрытия месяца.
Однако на практике опытные пользователи понимают состояние своего учета и не хотят тратить время на ожидание проверки при каждом открытии ОборотноСальдоваяВедомость. Основная задержка вызвана тем, что система обращается к регистру сведений Состояния закрытия месяца и выполняет ряд фоновых запросов, чтобы определить, были ли изменения в документах после последнего успешного расчета.
Выясним причину задержки, заглянув «под капот» системы. Процесс инициализации проверки обычно выглядит следующим образом:
ОборотноСальдоваяВедомость или АнализСчета) срабатывает клиентский код.БухгалтерскийУчетКлиентПереопределяемый.ПодключитьПроверкуАктуальности инициализирует обработчик ожидания.Именно этот «обработчик ожидания» и запросы к базе данных создают ощущение «подтормаживания» интерфейса в момент, когда пользователь уже готов нажать кнопку «Сформировать». Если задержки вызваны избыточным объёмом информации в базе, для ускорения системы может быть выполнена многопоточная свёртка 1С:ERP для сокращения исторических данных.
Самый эффективный и быстрый способ, предложенный практикующими специалистами, — это создание расширения конфигурации. Мы переопределим поведение системы в точке входа, чтобы проверка просто не запускалась. Разберем по шагам, как это сделать: для автоматического создания резервной копии перед изменением кода удобно использовать Обновлятор 1С для архивирования и тестирования баз.
Создадим новое расширение и добавим в него общий модуль БухгалтерскийУчетКлиентПереопределяемый. Нам необходимо перехватить процедуру ПодключитьПроверкуАктуальности. Вместо того чтобы позволить системе выполнять стандартный код, мы заменим его «заглушкой».
Рассмотрим пример кода для расширения:
&Вместо("ПодключитьПроверкуАктуальности")
Процедура ИТ_ПодключитьПроверкуАктуальности(Форма, ПараметрыПроверки) Экспорт
// Просто оставляем процедуру пустой.
// Это предотвращает запуск обработчика ожидания и выполнение лишних запросов.
КонецПроцедуры
Этот метод хорош тем, что он отключает проверку сразу во всех регламентированных отчетах, где используется данная переопределяемая процедура. Это экономит время разработки и полностью решает проблему «зависания» при открытии.
Если вы хотите подойти к задаче более точечно и сохранить логику проверки в фоновом режиме, но при этом скрыть визуальное раздражение для пользователей, можно поработать непосредственно с формой отчета. В форме ОборотноСальдоваяВедомость существует группа элементов, отвечающая за вывод предупреждения.
Проанализируем процедуру ПриСозданииНаСервере в расширении формы отчета. Мы можем найти информационную панель по имени и установить её видимость в значение Ложь. Посмотрим на пример кода:
&После("ПриСозданииНаСервере")
Процедура ИТ_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Находим группу, отвечающую за актуальность данных
ЭлементГруппа = ЭтаФорма.Элементы.Найти("ГруппаАктуальностьДанных");
Если ЭлементГруппа <> Неопределено Тогда
ЭлементГруппа.Видимость = Ложь;
КонецЕсли;
// Также можно скрыть информационную панель
ЭлементПанель = ЭтаФорма.Элементы.Найти("ИнформационнаяПанель");
Если ЭлементПанель <> Неопределено Тогда
ЭлементПанель.Видимость = Ложь;
КонецЕсли;
КонецПроцедуры
Стоит отметить, что этот способ лишь скрывает надпись, но не всегда отменяет сам факт обращения к серверу для проверки. Поэтому Решение 1 считается более предпочтительным с точки зрения оптимизации производительности. Для контроля точности цифр после программных доработок может применяться автоматическая сверка бухгалтерских и налоговых проводок в 1С.
В некоторых случаях (в зависимости от конкретного релиза ERP 2.4 или 2.5) разработчики рекомендуют не просто «глушить» процедуру, а использовать штатные механизмы отказа. В процедурах проверки часто передается параметр Отказ или структура ПараметрыПроверки.
Если мы хотим оставить проверку для Монитора закрытия месяца, но убрать её для ОСВ, в расширении можно добавить проверку типа формы. Разберем этот вариант:
&Вместо("ПодключитьПроверкуАктуальности")
Процедура ИТ_ПодключитьПроверкуАктуальности(Форма, ПараметрыПроверки) Экспорт
ИмяФормы = Форма.ИмяФормы;
// Проверяем, является ли форма Оборотно-сальдовой ведомостью
Если Найти(ИмяФормы, "ОборотноСальдоваяВедомость") > 0 Тогда
// Для ОСВ ничего не делаем, проверка не запустится
Возврат;
Иначе
// Для остальных форм вызываем стандартный обработчик (если нужно)
ПродолжитьВызов(Форма, ПараметрыПроверки);
КонецЕсли;
КонецПроцедуры
Важно понимать, что надпись на красном фоне — это лишь верхушка айсберга. Основная нагрузка ложится на систему в момент обращения к таблицам итогов и состояний закрытия. Блокируя вызов ПодключитьПроверкуАктуальности, мы предотвращаем выполнение цепочки событий, которая приводит к:
РегламентированнаяОтчетностьВызовСервера.ПолучитьСтатусАктуальностиДанных.СостоянияЗакрытияМесяца.Использование расширений позволяет сохранить конфигурацию на поддержке, что критически важно для ERP, которая регулярно обновляется. При обновлении релиза 1С вам нужно будет лишь убедиться, что имена переопределяемых процедур не изменились (хотя в типовых решениях 1С:ERP названия модулей ...Переопределяемый достаточно стабильны).
Таким образом, мы рассмотрели несколько способов избавления от назойливого уведомления. Наиболее рекомендуемым является Решение 1, так как оно максимально эффективно убирает задержку при открытии отчетов и делает работу бухгалтера более комфортной.