
Изменение условного оформления формы из внешней обработки в 1С
Рассмотрим задачу проверки заполнения табличной части документа по некоторому алгоритму без редактирования конфигурации. После заполнения документа, нужно проверить данные и выделить цветом строки, подпадающие под определенное условие.
Здесь возникает мысль - применить обработку заполнения табличной части. В большинстве примеров использования таких обработок акцент делается на заполнении реквизитов формы через вызов клиентского метода обработки:
То есть, в обработке создается форма, в ней клиентская процедура с фиксированным именем ВыполнитьКоманду. В нее и будет передано выполнение кода при вызове обработки. ВладелецФормы – это и есть форма документа, из которого вызывается внешняя обработка.
Проблема здесь в том, что на клиенте недоступно условное оформление формы, а передать ВладелецФормы на сервер не представляется возможным:
Для решения подобных задач в БСП версии 2.1.6 был добавлен тип команды ЗаполнениеФормы. Использование этого типа выглядит следующим образом:
Ключевые моменты выделены цветом:
- Мы указываем параметр «Назначения» - тем самым даем понять системе, что это не просто внешняя обработка, а именно обработка заполнения, привязанная к определенному типу метаданных (в нашем случае к документу ОтпускаСотрудников). При этом логично будет указать вид обработки ЗаполнениеОбъекта. В этом случае команда из нашей обработки будет добавлена в подменю «Заполнить» указанного документа. Вместо вида ЗаполнениеОбъекта можно указывать другие виды: ПечатнаяФорма – подменю «Печать», СозданиеСвязанныхОбъектов – подменю «Создать на основании», Отчет – подменю «Отчеты». Виды обработки ДополнительнаяОбработка и ДополнительныйОтчет указывать не стоит – они не будут работать при заполненном массиве назначений.
- Версию БСП следует указать явным образом в параметрах, она должна быть не ниже 2.1.6, ну и конечно она должна быть внедрена в конфигурацию.
- Указывая тип команды ЗаполнениеФормы, мы даем системе понять, что в параметры выполнения команды должна быть передана форма для заполнения.
- Обработчик команды описываем в модуле объекта, добавляем третий параметр ПараметрыВыполнения.
- ПараметрыВыполнения – это структура из 2 элементов: ДополнительнаяОбработкаСсылка (тип СправочникСсылка. ДополнительныеОтчетыИОбработки – ссылка на нашу обработку) и ЭтаФорма (тип УправляемаяФорма). Код исполняется в контексте сервера, здесь становится доступно условное оформление, что нам и требовалось.
В данном примере для наглядности структура параметров и тип команды заданы явным образом. Для совместимости с будущими версиями БСП разработчики библиотеки рекомендуют использовать функции БСП, возвращающие корректные структуры и строки. Например:
Подробное описание типов команд, параметров и подробностей размещения обработчиков можно найти в общем модуле ДополнительныеОтчетыИОбработкиКлиентСервер в комментариях к функциям вида ТипКоманды<ИмяТипаКоманды>.
Замечу, что этот способ также подходит для изменения состава реквизитов формы, и для всех прочих действий с формой, которые необходимо выполнять в контексте сервера. С другой стороны, доступ к форме здесь ограничен контекстом сервера – исполнение клиентского кода, например открытие каких-то дополнительных форм, здесь невозможно.
Еще одна особенность - данный способ не требует записи объекта перед вызовом нашей команды, в отличие от команд с типом ВызовКлиентскогоМетода. Что довольно удобно. Например при ручном заполнении документа – нет лишних обращений на сервер для записи объекта и перечитывания его по ссылке.
Автор статьи: Олег Т., разработчик 1С компании Neti.