Как программно прикрепить PDF-файл к номенклатуре в 1С:Управление торговлей 11?

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

Рассмотрим распространенную техническую задачу: необходимо создать внешнюю обработку, которая считывает PDF-документы из локального каталога и прикрепляет их к соответствующим позициям справочника Номенклатура в конфигурации «1С:Управление торговлей 11» (на базе Библиотеки Стандартных Подсистем — БСП).

Архитектура хранения файлов в БСП

Проанализируем, как устроена работа с присоединенными файлами в типовых конфигурациях. В 1С:УТ 11 прикрепленные документы хранятся не непосредственно в самом элементе номенклатуры, а в подчиненном справочнике НоменклатураПрисоединенныеФайлы.

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

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

Пошаговый алгоритм добавления файла

Разберем процесс программной загрузки PDF-документа по шагам:

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

Пример программного кода

Рассмотрим пример процедуры на сервере для добавления PDF-файла к номенклатуре:


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

Если требуется также записать полученный файл в дополнительный реквизит номенклатуры, разберем фрагмент кода для работы с табличной частью ДополнительныеРеквизиты:


НоменклатураОбъект = НоменклатураСсылка.ПолучитьОбъект();

// Поиск строки с нужным дополнительным реквизитом
СтрокаРеквизита = НоменклатураОбъект.ДополнительныеРеквизиты.Найти(ПВХ_СсылкаНаФайл, "Свойство");

Если СтрокаРеквизита = Неопределено Тогда
    СтрокаРеквизита = НоменклатураОбъект.ДополнительныеРеквизиты.Добавить();
    СтрокаРеквизита.Свойство = ПВХ_СсылкаНаФайл;
КонецЕсли;

СтрокаРеквизита.Значение = ПрисоединенныйФайл;
НоменклатураОбъект.Записать();

Настройка предельного размера файлов и томов хранения

Выясним особенности работы с крупными PDF-файлами:

  1. Ограничение размера: По умолчанию в настройках программы («Администрирование» — «Настройки работы с файлами») установлено ограничение на максимальный размер прикрепляемого файла (например, 50 МБ). Попытка загрузить файл больше этого размера вызовет ошибку.
  2. Хранение на диске: Во избежание быстрого роста размера базы данных (особенно в файловом режиме) рекомендуется включить опцию «Хранить файлы в томах на диске». В этом случае файлы будут физически складываться в указанную сетевую папку, а база данных будет хранить лишь карточки с информацией о них.
← На главную