При разработке отчетов на платформе 1С:Предприятие 8 часто требуется уведомить пользователя о том, что настройки или параметры изменились, а выведенные на экран данные потеряли актуальность. В типовых конфигурациях при изменении настроек компоновки данных отчет визуально затеняется, а по центру поля табличного документа появляется информационная плашка с предупреждением о необходимости нажать кнопку формирования. Разберем детально, как устроен этот механизм на уровне платформы и как воспроизвести такое же поведение в собственных формах и внешних отчетах.
Проанализируем архитектуру типовых решений на базе Библиотеки стандартных подсистем (БСП). В типовых конфигурациях для большинства отчетов СКД используется общая форма ОбщиеФормы.ФормаОтчета. Именно в ее модуле сосредоточена логика отслеживания изменений пользовательских настроек.
Посмотрим на пример базовой процедуры, отвечающей за реакцию формы на модификацию параметров:
Процедура ОповеститьОИзмененииНастроек(Форма) Экспорт
Если Не Форма.ПользовательскиеНастройкиМодифицированы Тогда
Возврат;
КонецЕсли;
ТекстСостояния = НСтр("ru = 'Изменились настройки. Нажмите ""Сформировать"" для получения отчета.';
|en = 'Settings changed. To generate the report, click ""Generate"".'");
ОтобразитьСостояниеОтчета(Форма, ТекстСостояния);
КонецПроцедуры
В этой процедуре проверяется признак модифицированности пользовательских настроек, после чего вызывается служебная процедура ОтобразитьСостояниеОтчета. Однако под капотом типовых библиотек скрывается штатное свойство элементов управляемой формы платформы «1С:Предприятие».
Выясним причину, почему табличный документ меняет прозрачность и показывает плашку. В управляемом интерфейсе у элемента формы с видом ПолеТабличногоДокумента предусмотрено специальное свойство ОтображениеСостояния. Это отдельный программный объект, позволяющий управлять выводом сервисных сообщений поверх содержимого таблицы.
Рассмотрим ключевые свойства объекта ОтображениеСостояния:
Видимость — принимает значение типа Булево. Управляет показом или скрытием информационного блока над таблицей.Текст — строка, содержащая текст поясняющего сообщения для пользователя.Картинка — позволяет назначить пиктограмму (например, стандартную картинку информации или ожидания).ДополнительныйРежимОтображения — системное перечисление, управляющее поведением фона под плашкой. Значение ДополнительныйРежимОтображения.Неактуальность как раз включает эффект полупрозрачности и потускнения старых данных отчета, сигнализируя, что отчет необходимо сформировать заново. Значение ДополнительныйРежимОтображения.НеИспользовать отключает затенение.Разберем по шагам, как самостоятельно активировать предупреждение в коде управляемой формы. Предположим, что на форме расположен элемент поля табличного документа с именем Результат.
Для включения режима неактуальности данных при изменении любого параметра или отбора выполним следующий код:
Отображение = Элементы.Результат.ОтображениеСостояния;
Отображение.Видимость = Истина;
Отображение.ДополнительныйРежимОтображения = ДополнительныйРежимОтображения.Неактуальность;
Отображение.Текст = НСтр("ru = 'Изменились настройки. Нажмите ""Сформировать"" для получения отчета.'");
Когда пользователь нажимает кнопку формирования и процесс вывода отчета завершается успешно, состояние необходимо сбросить к исходному виду:
Отображение = Элементы.Результат.ОтображениеСостояния;
Отображение.Видимость = Ложь;
Отображение.ДополнительныйРежимОтображения = ДополнительныйРежимОтображения.НеИспользовать;
Отображение.Текст = "";
Если разработка ведется в конфигурации, где уже внедрена БСП, мы можем не обращаться к свойствам элемента формы напрямую, а воспользоваться универсальными функциями общего модуля. В подсистеме отчетов доступна процедура:
ОбщегоНазначенияКлиентСервер.УстановитьСостояниеПоляТабличногоДокумента(Элементы.Результат, "Неактуальность");
Параметр состояния принимает стандартные строковые идентификаторы, такие как "Неактуальность", "ФормированиеОтчета" или "НеИспользовать". Общий модуль самостоятельно заполнит требуемые тексты, установит нужные картинки ожидания и переключит свойства элемента.
Рассмотрим еще одну особенность платформы. В расширении управляемой формы для отчета существует свойство АвтоОтображениеСостояния (или РежимАвтоОтображенияСостояния). Если форма отчета привязана к стандартной схеме компоновки данных и платформа выполняет компоновку в штатном режиме, отображение неактуальности и процесса формирования может управляться автоматически без единой строчки программного кода.
Однако если отчет формируется нестандартно — через собственные обработчики на встроенном языке, с выводом во внешние макеты или в произвольной обработке, — автоматическое управление отключается, и разработчик переключает свойства объекта ОтображениеСостояния вручную в обработчиках событий изменения реквизитов формы.
В зависимости от задач интерфейса можно использовать и другие методы платформы для вывода подсказок:
ПоказатьПодсказку() — отображает всплывающее контекстное окно-облако с привязкой к конкретному элементу управления или области ячеек табличного документа. Подходит для точечных подсказок по заполнению данных.ПоказатьОповещениеПользователя() — стандартное всплывающее окно в правом нижнем углу интерфейса платформы. Удобно для уведомления о завершении фоновых процессов.Таким образом, для получения эффекта полупрозрачного отчета с информационным сообщением по центру оптимальным и штатным решением является использование встроенного свойства ОтображениеСостояния поля табличного документа.