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

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

При работе с информационными системами 1С часто возникает необходимость автоматизировать рутинные задачи, одной из которых является программное прикрепление файлов к различным объектам конфигурации, таким как документы, справочники или задачи. Мы рассмотрим, как реализовать эту функциональность в системе 1С:Документооборот 3.0, основываясь на рекомендациях опытных разработчиков и используя встроенные механизмы платформы 1С:Предприятие и возможности БСП.

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

Основы работы с присоединенными файлами в 1С

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

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

Пошаговое решение: программное прикрепление файла

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

Шаг 1: Получение двоичных данных файла

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

Для получения двоичных данных файла с диска используем объект ДвоичныеДанные:


// Предполагаем, что "ИмяФайлаНаДиске" - это полный путь к файлу на локальном компьютере пользователя.
// Например: "C:\МоиДокументы\Отчет.pdf"
ИмяФайлаНаДиске = "C:\МоиДокументы\Отчет.pdf"; 
ДвоичныеДанные = Новый ДвоичныеДанные(ИмяФайлаНаДиске);

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

Шаг 2: Использование специализированных функций 1С:Документооборот

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

Для 1С:Документооборот 3.0 основным модулем для работы с файлами является ФайлыДокументооборота. Он содержит функции, которые позволяют корректно создавать и прикреплять файлы к объектам. Рассмотрим функцию СоздатьНовыйФайлДляОбъекта.

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


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

Функция ПрикрепитьФайлКДокументуСервер(СсылкаНаДокумент, ПолноеИмяФайлаНаСервере, ИмяФайлаДляОтображения) Экспорт

    // Получаем двоичные данные файла, который уже находится на сервере
    ДвоичныеДанныеФайла = Новый ДвоичныеДанные(ПолноеИмяФайлаНаСервере);

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

    // Вызываем стандартную функцию Документооборота для создания и прикрепления файла
    Возврат ФайлыДокументооборота.СоздатьНовыйФайлДляОбъекта(ПараметрыФайла);

КонецФункции

Эта функция должна быть размещена в серверном общем модуле. Она возвращает ссылку на вновь созданный элемент справочника Файлы.

Шаг 3: Реализация клиент-серверного взаимодействия

Если файл находится на локальном диске пользователя, нам потребуется организовать его передачу. Подобная логика часто применяется в автоматизированных системах, например, когда создается дополнительный обработчик для бизнес-события "Поступление входящей почты", который автоматически прикладывает файлы из писем к создаваемым документам.

Для передачи файла с клиента на сервер используются функции ПоместитьФайл на клиенте и ПолучитьИзВременногоХранилища на сервере.


// Процедура на стороне клиента
Процедура ПрикрепитьФайлКДокументуКлиент(СсылкаНаДокументВладелец)

    ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    Если ДиалогВыбораФайла.Выбрать() Тогда
        ПолноеИмяФайлаНаКлиенте = ДиалогВыбораФайла.ПолноеИмяФайла;
        ИмяФайлаБезРасширения = ОбщегоНазначенияКлиент.ИмяБезРасширения(ПолноеИмяФайлаНаКлиенте);
        
        // Помещаем файл во временное хранилище
        АдресВХранилище = ПоместитьФайл(ПолноеИмяФайлаНаКлиенте, "", , Ложь);

        // Вызываем серверную функцию
        Попытка
            НовыйПрикрепленныйФайл = ВызватьСервернуюФункциюДляПрикрепления(
                СсылкаНаДокументВладелец, 
                АдресВХранилище, 
                ИмяФайлаБезРасширения,
                ПолноеИмяФайлаНаКлиенте
            );
            Сообщить("Файл '" + НовыйПрикрепленныйФайл.Наименование + "' успешно прикреплен.");
        Исключение
            Сообщить("Ошибка при прикреплении файла: " + ОписаниеОшибки());
        КонецПопытки;
    КонецЕсли;

КонецПроцедуры

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

    Возврат ПрикрепитьФайлКДокументуСервер(
        СсылкаНаДокумент, 
        ИмяВременногоФайлаНаСервере, 
        ИмяФайлаДляОтображения
    );
КонецФункции

Альтернативный подход: использование функций БСП для более общих случаев

Если вы работаете не с 1С:Документооборотом, а с другой конфигурацией на БСП, подход будет похожим. Чтобы быстро сориентироваться в методах, рекомендуем использовать справочник по методам БСП с примерами использования, где описаны функции модуля ПрисоединенныеФайлыКлиентСервер.

Пример использования функций БСП:


// СсылкаНаПрисоединенныйФайл = ПрисоединенныеФайлыКлиентСервер.ПрикрепитьФайлКОбъекту(
//     ВладелецФайла, 
//     АдресВХранилище, 
//     Ложь, 
//     Новый УникальныйИдентификатор(), 
//     ИмяФайлаДляОтображения, 
//     "pdf", 
//     ДвоичныеДанные.Размер()
// );

Важные аспекты и возможные проблемы

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

  1. Права доступа: Пользователь должен иметь права на создание элементов справочника Файлы.
  2. Производительность: Для больших файлов используйте фоновые задания.
  3. Форматы и обработка: Иногда требуется предварительная обработка, например, автоматическая конвертация doc в docx для унификации документов в базе.
  4. Дополнительный контент: При работе с официальными документами может понадобиться вставка QR-кода в файлы doc и docx (удобно через автоматизация вставки QR-кодов в файлы документов) для обеспечения возможности быстрой проверки документа.
  5. Версионирование: Механизм 1С позволяет создавать новые версии файлов вместо дублирования объектов.

Мы рассмотрели детальный подход к программному прикреплению файлов в 1С:Документооборот 3.0. Следуя этим рекомендациям и используя возможности современных расширений, вы сможете успешно реализовать автоматизацию любой сложности.

← На главную