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

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

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

Понимание архитектуры работы с файлами

Важно помнить, что в 1С:Документооборот файлы — это не просто ХранилищеЗначения в реквизите объекта. Все файлы являются самостоятельными элементами справочника Файлы. Система использует подсистему РаботаСФайлами, которая обеспечивает версионирование, права доступа и хранение (в базе или в томах). Попытки прямого копирования двоичных данных в реквизиты приведут к тому, что документ будет лишен функционала Документооборота (редактирование, история версий, электронная подпись).

Этапы программного решения задачи

Для корректного прикрепления файлов необходимо выполнить последовательность действий через методы подсистемы РаботаСФайлами. Рассмотрим алгоритм действий:

  1. Создание самого ВнутреннегоДокумента и заполнение его реквизитов из шаблона.
  2. Поиск файлов, которые привязаны к объекту ШаблонВнутреннегоДокумента.
  3. Использование функции СоздатьФайлНаОсновеФайлаНаДиске или аналогичных методов модуля РаботаСФайламиВнешнийВызов для связки файла с новым документом.

Разбор процесса копирования файлов

Проанализируем процедуру создания документа. После того как вы записали новый объект ВнутреннийДокумент, вы можете обратиться к файлам шаблона. Обратите внимание, что стандартная процедура ЗаполнитьФайлыДокументаПоШаблону может не сработать напрямую, так как она ожидает специфические параметры контекста.

Наиболее надежный путь — это перебор всех файлов, владельцем которых является ваш Шаблон, и создание новых записей в справочнике Файлы, где владельцем будет выступать ссылка на ваш новый документ.

Рассмотрим пример логики работы:


// Сначала создаем документ
НовыйДок = Справочники.ВнутренниеДокументы.СоздатьЭлемент();
НовыйДок.Шаблон = Шаблон;
ШаблоныДокументов.ЗаполнитьРеквизитыДокументаПоШаблону(Шаблон, НовыйДок);
НовыйДок.Записать();

// Получаем список файлов шаблона
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ Ссылка ИЗ Справочник.Файлы ГДЕ Владелец = &Шаблон";
Запрос.УстановитьПараметр("Шаблон", Шаблон);
Результат = Запрос.Выполнить().Выбрать();

// Присоединяем каждый файл
Пока Результат.Следующий() Цикл
    // Используем методы подсистемы РаботаСФайлами
    РаботаСФайламиВнешнийВызов.КопироватьФайл(Результат.Ссылка, НовыйДок.Ссылка);
КонецЦикла;

Важные рекомендации по реализации

При разработке данной функциональности, учитывайте следующие критические моменты:

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

← На главную