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