Как сделать всплывающее сообщение и затенение над полем табличного документа при изменении параметров отчета?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке отчетов на платформе 1С:Предприятие 8 часто требуется уведомить пользователя о том, что настройки или параметры изменились, а выведенные на экран данные потеряли актуальность. В типовых конфигурациях при изменении настроек компоновки данных отчет визуально затеняется, а по центру поля табличного документа появляется информационная плашка с предупреждением о необходимости нажать кнопку формирования. Разберем детально, как устроен этот механизм на уровне платформы и как воспроизвести такое же поведение в собственных формах и внешних отчетах.

Где находится типовая реализация механизма

Проанализируем архитектуру типовых решений на базе Библиотеки стандартных подсистем (БСП). В типовых конфигурациях для большинства отчетов СКД используется общая форма ОбщиеФормы.ФормаОтчета. Именно в ее модуле сосредоточена логика отслеживания изменений пользовательских настроек.

Посмотрим на пример базовой процедуры, отвечающей за реакцию формы на модификацию параметров:


Процедура ОповеститьОИзмененииНастроек(Форма) Экспорт 
    
    Если Не Форма.ПользовательскиеНастройкиМодифицированы Тогда 
        Возврат;
    КонецЕсли;
    
    ТекстСостояния = НСтр("ru = 'Изменились настройки. Нажмите ""Сформировать"" для получения отчета.';
                          |en = 'Settings changed. To generate the report, click ""Generate"".'");
    ОтобразитьСостояниеОтчета(Форма, ТекстСостояния);
    
КонецПроцедуры

В этой процедуре проверяется признак модифицированности пользовательских настроек, после чего вызывается служебная процедура ОтобразитьСостояниеОтчета. Однако под капотом типовых библиотек скрывается штатное свойство элементов управляемой формы платформы «1С:Предприятие».

Штатный механизм платформы: объект «ОтображениеСостояния»

Выясним причину, почему табличный документ меняет прозрачность и показывает плашку. В управляемом интерфейсе у элемента формы с видом ПолеТабличногоДокумента предусмотрено специальное свойство ОтображениеСостояния. Это отдельный программный объект, позволяющий управлять выводом сервисных сообщений поверх содержимого таблицы.

Рассмотрим ключевые свойства объекта ОтображениеСостояния:

  1. Видимость — принимает значение типа Булево. Управляет показом или скрытием информационного блока над таблицей.
  2. Текст — строка, содержащая текст поясняющего сообщения для пользователя.
  3. Картинка — позволяет назначить пиктограмму (например, стандартную картинку информации или ожидания).
  4. ДополнительныйРежимОтображения — системное перечисление, управляющее поведением фона под плашкой. Значение ДополнительныйРежимОтображения.Неактуальность как раз включает эффект полупрозрачности и потускнения старых данных отчета, сигнализируя, что отчет необходимо сформировать заново. Значение ДополнительныйРежимОтображения.НеИспользовать отключает затенение.

Программное управление состоянием поля табличного документа

Разберем по шагам, как самостоятельно активировать предупреждение в коде управляемой формы. Предположим, что на форме расположен элемент поля табличного документа с именем Результат.

Для включения режима неактуальности данных при изменении любого параметра или отбора выполним следующий код:


Отображение = Элементы.Результат.ОтображениеСостояния;
Отображение.Видимость = Истина;
Отображение.ДополнительныйРежимОтображения = ДополнительныйРежимОтображения.Неактуальность;
Отображение.Текст = НСтр("ru = 'Изменились настройки. Нажмите ""Сформировать"" для получения отчета.'");

Когда пользователь нажимает кнопку формирования и процесс вывода отчета завершается успешно, состояние необходимо сбросить к исходному виду:


Отображение = Элементы.Результат.ОтображениеСостояния;
Отображение.Видимость = Ложь;
Отображение.ДополнительныйРежимОтображения = ДополнительныйРежимОтображения.НеИспользовать;
Отображение.Текст = "";

Использование функций Библиотеки стандартных подсистем (БСП)

Если разработка ведется в конфигурации, где уже внедрена БСП, мы можем не обращаться к свойствам элемента формы напрямую, а воспользоваться универсальными функциями общего модуля. В подсистеме отчетов доступна процедура:


ОбщегоНазначенияКлиентСервер.УстановитьСостояниеПоляТабличногоДокумента(Элементы.Результат, "Неактуальность");

Параметр состояния принимает стандартные строковые идентификаторы, такие как "Неактуальность", "ФормированиеОтчета" или "НеИспользовать". Общий модуль самостоятельно заполнит требуемые тексты, установит нужные картинки ожидания и переключит свойства элемента.

Настройка автоматического режима в форме отчета

Рассмотрим еще одну особенность платформы. В расширении управляемой формы для отчета существует свойство АвтоОтображениеСостояния (или РежимАвтоОтображенияСостояния). Если форма отчета привязана к стандартной схеме компоновки данных и платформа выполняет компоновку в штатном режиме, отображение неактуальности и процесса формирования может управляться автоматически без единой строчки программного кода.

Однако если отчет формируется нестандартно — через собственные обработчики на встроенном языке, с выводом во внешние макеты или в произвольной обработке, — автоматическое управление отключается, и разработчик переключает свойства объекта ОтображениеСостояния вручную в обработчиках событий изменения реквизитов формы.

Альтернативные способы информирования

В зависимости от задач интерфейса можно использовать и другие методы платформы для вывода подсказок:

  1. Метод ПоказатьПодсказку() — отображает всплывающее контекстное окно-облако с привязкой к конкретному элементу управления или области ячеек табличного документа. Подходит для точечных подсказок по заполнению данных.
  2. Метод ПоказатьОповещениеПользователя() — стандартное всплывающее окно в правом нижнем углу интерфейса платформы. Удобно для уведомления о завершении фоновых процессов.
  3. Группы формы и декорации — создание собственной панели в верхней части отчета (желтый или синий информационный баннер с кнопкой повторного формирования), видимость которой переключается в зависимости от состояния данных.

Таким образом, для получения эффекта полупрозрачного отчета с информационным сообщением по центру оптимальным и штатным решением является использование встроенного свойства ОтображениеСостояния поля табличного документа.

← На главную