При автоматизации бизнес-процессов в 1С:ERP Управление предприятием 2 часто возникает необходимость не просто сформировать задачу исполнителю, но и снабдить её дополнительными материалами: инструкциями, выгрузками в Excel или скан-копиями документов. На первый взгляд задача кажется тривиальной, однако архитектурные особенности конфигураций на базе БСП (Библиотеки стандартных подсистем) накладывают определённые ограничения. Разберем подробно, почему классический подход «создать задачу и прикрепить файл» не всегда работает и как реализовать это правильно.
Начнем с того, что проанализируем структуру хранения файлов в современных типовых конфигурациях. В 1С:ERP используется подсистема «Работа с файлами». В этой системе каждый объект, к которому можно прикрепить файл, должен быть зарегистрирован в специальном определяемом типе. Если мы заглянем в конфигуратор, то увидим определяемый тип ВладельцыФайлов. Именно он определяет, какие справочники или документы могут выступать «хозяевами» вложений.
Как показывает практика и обсуждение на форуме, объект Задача.ЗадачаИсполнителя зачастую не включен в этот список «из коробки». Это логично с точки зрения методологии: задача — это лишь этап бизнес-процесса. Основная информация и вложения должны принадлежать «головному» объекту — бизнес-процессу. В нашем случае это БизнесПроцесс.Задание. Именно у него есть необходимые механизмы для связи со справочником Файлы или ЗаданиеПрисоединенныеФайлы.
Следовательно, правильная стратегия заключается в следующем: мы создаем бизнес-процесс, прикрепляем файл к нему, а система автоматически сделает этот файл доступным для всех исполнителей в рамках созданных задач.
Рассмотрим процесс создания самого задания. Нам необходимо заполнить ключевые реквизиты, такие как исполнитель, наименование и сроки. Проанализируем пример кода, который позволяет инициализировать процесс:
НовоеЗадание = БизнесПроцессы.Задание.СоздатьБизнесПроцесс();
НовоеЗадание.Дата = ТекущаяДата();
НовоеЗадание.Наименование = "Обработать входящий файл";
НовоеЗадание.Исполнитель = Справочники.Пользователи.НайтиПоНаименованию("Иванов И.И.");
НовоеЗадание.СрокИсполнения = КонецДня(ТекущаяДата());
НовоеЗадание.Важность = Перечисления.ВариантыВажностиЗадачи.Высокая;
// Если нужно привязать задание к конкретному документу-основанию
НовоеЗадание.Предмет = СсылкаНаДокументОснование;
НовоеЗадание.Записать();
Обратите внимание, что метод Записать() обязателен перед добавлением файла, так как нам нужна ссылка на объект в базе данных, которая станет владельцем файла.
Для работы с файлами в 1С:ERP рекомендуется использовать программный интерфейс общего модуля РаботаСФайлами. Это гарантирует, что файл будет корректно зарегистрирован в системе, попадет в нужные тома хранения (если они настроены) и для него будут созданы все необходимые записи в служебных таблицах.
Прежде чем вызвать метод добавления, нам нужно подготовить данные. Как правило, файл сначала помещается во временное хранилище. Рассмотрим, как это сделать, если у нас есть двоичные данные файла:
// Предположим, ДвоичныеДанныеФайла уже получены из файла на диске или сформированы программно
АдресВХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанныеФайла, Новый УникальныйИдентификатор);
ИмяФайлаДляСистемы = "Отчет_по_продажам";
Расширение = "xlsx";
Теперь воспользуемся структурой ПараметрыДобавленияФайла, которую предоставляет БСП. Это наиболее гибкий способ, позволяющий передать множество настроек за один раз. Разберем по шагам создание файла:
ПараметрыФайла = РаботаСФайлами.ПараметрыДобавленияФайла();
ПараметрыФайла.Автор = Пользователи.ТекущийПользователь();
ПараметрыФайла.ВладелецФайлов = НовоеЗадание.Ссылка; // Указываем наше созданное задание
ПараметрыФайла.ИмяБезРасширения = ИмяФайлаДляСистемы;
ПараметрыФайла.РасширениеБезТочки = Расширение;
ПараметрыФайла.ХранитьВерсии = Ложь; // Для задач версионирование обычно не требуется
// Непосредственное создание файла в базе
НовыйФайл = РаботаСФайлами.ДобавитьФайл(ПараметрыФайла, АдресВХранилище);
Функция РаботаСФайлами.ДобавитьФайл вернет ссылку на созданный элемент справочника файлов. С этого момента файл официально «принадлежит» вашему бизнес-процессу.
После того как задание создано и файл прикреплен, бизнес-процесс необходимо стартовать. Только после этого у исполнителя в списке «Мои задачи» появится соответствующая запись. Выполняем команду:
НовоеЗадание.Старт();
Метод Старт() автоматически сформирует записи в таблице Задачи.ЗадачаИсполнителя. Пользователь, открыв свою задачу, увидит в ней ссылку на основное задание, а через него — и прикрепленный файл.
Проанализируем несколько важных технических моментов, которые помогут избежать ошибок при реализации данной логики:
Предметы, указав там ссылку на созданный файл.АдресВХранилище помните о времени его жизни. Если процедура создания файла вызывается из фонового задания, обязательно передавайте уникальный идентификатор, иначе данные могут быть удалены из памяти до момента завершения записи файла.РаботаСФайлами.ОбновитьФайл. Это позволит избежать дублирования записей и корректно обновит двоичные данные.Таким образом, мы выяснили, что ключ к решению задачи лежит в использовании штатных механизмов БСП и правильном выборе объекта-владельца. Использование модуля РаботаСФайлами делает ваш код надежным и совместимым с будущими обновлениями 1С:ERP.