Как программно установить и заполнить предмет в задаче 1С:Документооборот

Программист 1С v8.3 (Управляемые формы) 1С:Документооборот Промышленность, строительство и АПК
← На главную

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

Разбор типичной проблемы: почему предмет не заполняется

Рассмотрим ситуацию, когда мы пытаемся создать бизнес-процесс Исполнение и передать в него ссылку на элемент нетипового справочника (например, СтроительныеОбъекты). Типичный, но не совсем верный подход выглядит так: мы создаем объект бизнес-процесса, вызываем метод заполнения по шаблону и пытаемся вручную присвоить значение первой строке табличной части Предметы. Выясним причину, по которой это может не работать.

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

Шаг 1. Настройка метаданных и определяемых типов

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

  1. ПредметЗадач — это самый важный тип. Если справочника в нем нет, ссылка не будет отображаться в карточке задачи.
  2. ОбъектСДополнительнымиКомандами — позволит системе выводить стандартные кнопки (например, «Отправить») в форме самого объекта.
  3. ИсточникДанныхДляШаблонов — требуется, если вы планируете настраивать автоматическое заполнение полей процесса из реквизитов вашего объекта.

Если вы работаете в расширении, обязательно добавьте ваш справочник в эти типы внутри расширения. Для реализации более сложной логики заполнения можно использовать произвольные действия дополнительных реквизитов, которые позволяют внедрять скрипты на различных этапах жизненного цикла объекта. После этого реквизит Предмет в табличной части бизнес-процесса начнет принимать значения вашего типа.

Шаг 2. Использование механизмов мультипредметности

В современных версиях 1С:Документооборот (особенно в редакции 3.0) прямое редактирование табличной части Предметы[0] считается плохим тоном и может привести к логическим ошибкам. Вместо этого следует использовать специализированные программные интерфейсы (API) системы. Разберем по шагам правильный алгоритм, по которому осуществляется отправка документов по типовым бизнес-процессам в 1С:ДО 3.0.

Во-первых, проанализируем метод ЗаполнитьПоШаблонуИПредмету. Он удобен тем, что сразу подтягивает настройки из шаблона (сроки, исполнителей), но он жестко завязан на настройки самого шаблона в пользовательском режиме. Если в шаблоне не указано, что данный тип объекта может быть основным предметом, заполнение может пройти некорректно.

Во-вторых, обратим внимание на модуль Мультипредметность. Рассмотрим пример кода, который позволяет корректно передать предмет процессу:


Бп = БизнесПроцессы.Исполнение.СоздатьБизнесПроцесс();

// Заполняем основные реквизиты из шаблона
Шаблон = Справочники.ШаблоныИсполнения.НайтиПоКоду("ДО-0002");
ПредметСсылка = ВыборкаДетальныеЗаписи.Ссылка;

// Используем типовой механизм заполнения
Бп.ЗаполнитьПоШаблонуИПредмету(Шаблон, ПредметСсылка, Пользователи.АвторизованныйПользователь());

// Дополнительно гарантируем передачу предмета через механизм мультипредметности
Мультипредметность.ПередатьПредметыПроцессу(Бп, ПредметСсылка);

// Устанавливаем наименование и дату
Бп.Наименование = "Обработка объекта: " + Строка(ПредметСсылка);
Бп.Дата = ТекущаяДата();

Бп.Записать();
СтартПроцессовСервер.СтартоватьПроцесс(Бп);

Шаг 3. Работа с табличной частью Предметы напрямую

Если по какой-то причине типовые методы вам не подходят, и вы решили заполнять табличную часть вручную, помните о необходимости инициализации всех связанных полей. Реквизит Предмет — не единственный в таблице. Стоит также учитывать возможности по автоматическому заполнению вспомогательных процессов по связям из основного предмета. Рассмотрим структуру строки ТЧ Предметы:

Правильная установка ролей критична, так как ошибки здесь могут привести к проблемам, подобным дублированию роли файла при создании подзадачи. Посмотрим на пример правильного ручного заполнения, если метод ЗаполнитьПоШаблонуИПредмету не используется:


Бп = БизнесПроцессы.Исполнение.СоздатьБизнесПроцесс();
Бп.Дата = ТекущаяДата();

// Добавляем новую строку в табличную часть предметов
НоваяСтрока = Бп.Предметы.Добавить();
НоваяСтрока.Предмет = ВыборкаДетальныеЗаписи.Ссылка;
НоваяСтрока.РольПредмета = Перечисления.РолиПредметов.Основной;
НоваяСтрока.ИмяПредмета = "СтроительныйОбъект"; // Важно для отображения в интерфейсе

Бп.Записать();

Анализ распространенных ошибок при разработке

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

  1. Права доступа (RLS): Если у исполнителя задачи нет прав на чтение справочника СтроительныеОбъекты, система автоматически скроет этот предмет в карточке задачи из соображений безопасности. В таких случаях может потребоваться расширение, корректирующее права на просмотр задач сотрудников других подразделений.
  2. Настройки видимости в шаблоне: В 1С:ДО 3.0 в настройках действий шаблона можно ограничить видимость предметов для конкретных этапов. Кроме того, для удобства пользователей часто требуется выводить предмет и дополнительные реквизиты в форме списка задач, чтобы информация была доступна без открытия карточки.
  3. Поиск объектов по наименованию: Обратите внимание на использование метода НайтиПоНаименованию. Это крайне ненадежный способ. Если в базе появится два пользователя с похожими именами, система может выбрать не того. Всегда старайтесь использовать поиск по коду, уникальному идентификатору или встроенные функции, такие как Пользователи.АвторизованныйПользователь().

Итоговые рекомендации

Подводя итог, можно сказать, что корректная работа с предметами в задачах 1С:Документооборот строится на «трех китах»:

Во-первых, обязательное расширение определяемых типов метаданных для вашего объекта. Без этого никакие программные манипуляции не дадут результата, так как платформа будет очищать поле при записи.

Во-вторых, использование функций общего модуля РаботаСПредметами или Мультипредметность. Эти модули содержат в себе все необходимые проверки и гарантируют, что данные будут записаны корректно с учетом всех бизнес-правил системы.

В-третьих, всегда проверяйте заполнение служебных реквизитов (роль предмета, имя предмета), так как именно от них зависит визуальное отображение ссылки в форме задачи исполнителя.

Соблюдение этих правил позволит вам создавать надежные механизмы автоматизации бизнес-процессов, которые будут работать корректно даже после обновлений конфигурации.

← На главную