Как программно создать задачу с вложенным файлом в 1С:ERP?

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

При автоматизации бизнес-процессов в 1С:ERP Управление предприятием 2 часто возникает необходимость не просто сформировать задачу исполнителю, но и снабдить её дополнительными материалами: инструкциями, выгрузками в Excel или скан-копиями документов. На первый взгляд задача кажется тривиальной, однако архитектурные особенности конфигураций на базе БСП (Библиотеки стандартных подсистем) накладывают определённые ограничения. Разберем подробно, почему классический подход «создать задачу и прикрепить файл» не всегда работает и как реализовать это правильно.

Анализируем архитектуру: Почему нельзя прикрепить файл напрямую к задаче?

Начнем с того, что проанализируем структуру хранения файлов в современных типовых конфигурациях. В 1С:ERP используется подсистема «Работа с файлами». В этой системе каждый объект, к которому можно прикрепить файл, должен быть зарегистрирован в специальном определяемом типе. Если мы заглянем в конфигуратор, то увидим определяемый тип ВладельцыФайлов. Именно он определяет, какие справочники или документы могут выступать «хозяевами» вложений.

Как показывает практика и обсуждение на форуме, объект Задача.ЗадачаИсполнителя зачастую не включен в этот список «из коробки». Это логично с точки зрения методологии: задача — это лишь этап бизнес-процесса. Основная информация и вложения должны принадлежать «головному» объекту — бизнес-процессу. В нашем случае это БизнесПроцесс.Задание. Именно у него есть необходимые механизмы для связи со справочником Файлы или ЗаданиеПрисоединенныеФайлы.

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

Шаг 1: Программное создание бизнес-процесса «Задание»

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


НовоеЗадание = БизнесПроцессы.Задание.СоздатьБизнесПроцесс();

НовоеЗадание.Дата = ТекущаяДата();
НовоеЗадание.Наименование = "Обработать входящий файл";    
НовоеЗадание.Исполнитель = Справочники.Пользователи.НайтиПоНаименованию("Иванов И.И.");  
НовоеЗадание.СрокИсполнения = КонецДня(ТекущаяДата());
НовоеЗадание.Важность = Перечисления.ВариантыВажностиЗадачи.Высокая;

// Если нужно привязать задание к конкретному документу-основанию
НовоеЗадание.Предмет = СсылкаНаДокументОснование;

НовоеЗадание.Записать();

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

Шаг 2: Подготовка файла и использование функций БСП

Для работы с файлами в 1С:ERP рекомендуется использовать программный интерфейс общего модуля РаботаСФайлами. Это гарантирует, что файл будет корректно зарегистрирован в системе, попадет в нужные тома хранения (если они настроены) и для него будут созданы все необходимые записи в служебных таблицах.

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


// Предположим, ДвоичныеДанныеФайла уже получены из файла на диске или сформированы программно
АдресВХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанныеФайла, Новый УникальныйИдентификатор);
ИмяФайлаДляСистемы = "Отчет_по_продажам";
Расширение = "xlsx";

Шаг 3: Прикрепление файла к объекту

Теперь воспользуемся структурой ПараметрыДобавленияФайла, которую предоставляет БСП. Это наиболее гибкий способ, позволяющий передать множество настроек за один раз. Разберем по шагам создание файла:


ПараметрыФайла = РаботаСФайлами.ПараметрыДобавленияФайла();
ПараметрыФайла.Автор = Пользователи.ТекущийПользователь();
ПараметрыФайла.ВладелецФайлов = НовоеЗадание.Ссылка; // Указываем наше созданное задание
ПараметрыФайла.ИмяБезРасширения = ИмяФайлаДляСистемы;
ПараметрыФайла.РасширениеБезТочки = Расширение;
ПараметрыФайла.ХранитьВерсии = Ложь; // Для задач версионирование обычно не требуется

// Непосредственное создание файла в базе
НовыйФайл = РаботаСФайлами.ДобавитьФайл(ПараметрыФайла, АдресВХранилище);

Функция РаботаСФайлами.ДобавитьФайл вернет ссылку на созданный элемент справочника файлов. С этого момента файл официально «принадлежит» вашему бизнес-процессу.

Шаг 4: Запуск бизнес-процесса

После того как задание создано и файл прикреплен, бизнес-процесс необходимо стартовать. Только после этого у исполнителя в списке «Мои задачи» появится соответствующая запись. Выполняем команду:

НовоеЗадание.Старт();

Метод Старт() автоматически сформирует записи в таблице Задачи.ЗадачаИсполнителя. Пользователь, открыв свою задачу, увидит в ней ссылку на основное задание, а через него — и прикрепленный файл.

Дополнительные нюансы и полезные советы

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

  1. Отображение в форме задачи: Если стандартная форма задачи в вашей версии ERP не отображает вложения автоматически, проверьте настройки динамического списка файлов. Часто требуется, чтобы файл был указан как «Предмет» бизнес-процесса. Для этого в коде создания задания можно заполнить табличную часть Предметы, указав там ссылку на созданный файл.
  2. Права доступа: Помните, что доступ к файлу регулируется правами доступа к его владельцу. Если у исполнителя задачи есть права на чтение бизнес-процесса «Задание», то он сможет открыть и прикрепленный файл. Однако, если файлы хранятся во внешних томах, убедитесь, что у службы 1С есть права на запись в эти папки.
  3. Временное хранилище: При использовании АдресВХранилище помните о времени его жизни. Если процедура создания файла вызывается из фонового задания, обязательно передавайте уникальный идентификатор, иначе данные могут быть удалены из памяти до момента завершения записи файла.
  4. Обновление файлов: Если в процессе выполнения задачи вам нужно программно заменить файл на новый, используйте метод РаботаСФайлами.ОбновитьФайл. Это позволит избежать дублирования записей и корректно обновит двоичные данные.

Таким образом, мы выяснили, что ключ к решению задачи лежит в использовании штатных механизмов БСП и правильном выборе объекта-владельца. Использование модуля РаботаСФайлами делает ваш код надежным и совместимым с будущими обновлениями 1С:ERP.

← На главную