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