При доработке типовых конфигураций (например, 1С:Документооборот) разработчики часто сталкиваются с ситуацией: в объект метаданных добавлен новый реквизит, однако при открытии формы в дереве реквизитов основного объекта (Объект) добавленное поле отсутствует. Разберем по шагам, почему это происходит и как правильно организовать работу с реквизитами бизнес-процессов и связанных с ними задач.
Самая распространенная причина — путаница между объектами БизнесПроцесс и Задача. В архитектуре платформы «1С:Предприятие» бизнес-процессы и задачи являются самостоятельными прикладными объектами:
В пользовательском интерфейсе работа чаще всего ведется с задачами (например, через форму задачи исполнителя). Если добавить реквизит в ветку метаданных Бизнес-процессы, он появится только в реквизитах самого бизнес-процесса. В основном реквизите Объект формы задачи его не будет, так как для задачи основным объектом выступает ЗадачаСсылка или ЗадачаОбъект.
Проверим в дереве конфигурации, какой именно объект открыт в редакторе: форму бизнес-процесса или форму задачи. Если требуется изменить форму самого процесса, откроем ветку соответствующего бизнес-процесса и перейдем в его форму.
Если реквизит добавлен в нужный объект метаданных, но форма уже была открыта в конфигураторе до момента добавления, дерево реквизитов объекта может не обновиться мгновенно. Проанализируем правильный порядок действий:
Объект появится добавленный реквизит.Если бизнес-процесс содержит данные, которые исполнитель обязательно должен видеть или редактировать при выполнении задачи, разберем доступные варианты реализации.
Вариант 1. Программное чтение для отображения (только просмотр)
Так как реквизит Объект.БизнесПроцесс в задачах типовых конфигураций имеет составной тип, развернуть его поля напрямую через редактор реквизитов формы нельзя. Создадим отдельный реквизит формы (например, РеквизитПроцесса) с нужным типом и заполним его при открытии формы.
Посмотрим на пример кода в модуле формы задачи:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если ЗначениеЗаполнено(Объект.БизнесПроцесс) Тогда
// Считываем значение реквизита из связанного бизнес-процесса
РеквизитПроцесса = Объект.БизнесПроцесс.ВашРеквизит;
КонецЕсли;
КонецПроцедуры
Вариант 2. Программная запись изменений в бизнес-процесс
Если пользователю разрешено менять это значение непосредственно из карточки задачи, сохраним изменения в бизнес-процесс при записи задачи:
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
Если ЗначениеЗаполнено(ТекущийОбъект.БизнесПроцесс) Тогда
ОбъектПроцесса = ТекущийОбъект.БизнесПроцесс.ПолучитьОбъект();
Если ОбъектПроцесса <> Неопределено Тогда
ОбъектПроцесса.ВашРеквизит = РеквизитПроцесса;
ОбъектПроцесса.Записать();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Вариант 3. Дублирование реквизита в задачу
Если по значению реквизита требуется строить списки задач, динамические списки или настраивать быстрый отбор, добавим аналогичный реквизит и в объект ЗадачаИсполнителя. Заполнение реквизита настраивается в модуле бизнес-процесса при формировании задач в обработчике точки маршрута ПриСозданииЗадач.
Вариант 4. Использование дополнительных реквизитов (без изменения конфигурации)
Если конфигурация «1С:Документооборот» находится на поддержке, воспользуемся типовым функционалом БСП. В режиме «1С:Предприятие» в разделе Настройка и администрирование настроим состав дополнительных реквизитов для нужного вида процесса или шаблона. Такие реквизиты будут отображаться в карточках процессов и задач типовыми механизмами без доработки метаданных.