При организации интернет-торговли часто возникает задача передачи на сайт не только изображений товаров, но и сопутствующей документации, такой как сертификаты соответствия, технические карты, технические паспорта или инструкции. В 1С эти файлы, включая варианты комплектации с фото, обычно хранятся в специализированных справочниках или регистрах (например, СертификатыНоменклатуры). Разберем подробно, как настроить их передачу на сайт, учитывая особенности разных конфигураций и протоколов обмена.
Прежде всего, проанализируем, как работает выгрузка номенклатуры и стандартный механизм обмена. Большинство типовых интеграций базируется на стандарте CommerceML 2.x. По умолчанию этот протокол настроен на передачу основных данных товара (наименование, артикул, цена, остаток) и его изображений. Файлы, прикрепленные как «Сертификаты», часто игнорируются системой, так как они не входят в базовый перечень выгружаемых реквизитов, поэтому важен контроль заполнения полей маркированного товара.
Для успешной передачи файлов система должна выполнить три действия:
import.xml) в соответствующем узле.В современных конфигурациях, построенных на управляемых формах, реализован гибкий механизм работы с присоединенными файлами. Рассмотрим вариант использования Дополнительных реквизитов. Если мы создадим дополнительный реквизит для номенклатуры с типом Файл, то типовой узел обмена в ряде случаев может подхватить его автоматически.
Разберем алгоритм действий:
Номенклатура.СертификатыНоменклатуры, имеет смысл перенести хранение ссылок на файлы непосредственно в дополнительные реквизиты объекта.Выясним причину, по которой стандартный модуль обмена может не справляться с задачей. Часто он просто не имеет интерфейса для выбора специфических типов данных. В этом случае мы рекомендуем использовать расширенные модули от разработчиков CMS. Например, модуль обмена от «1С-Битрикс» заменяет собой стандартный узел обмена и предоставляет гораздо более широкие возможности.
Проанализируем шаги настройки в модуле Битрикс:
ПрисоединенныеФайлы или связанных регистров должны попадать в пакет.Рассмотрим ситуацию, когда файлы хранятся не в самой базе 1С, а в томах на диске. Это распространенная практика для баз большого объема. Здесь часто возникает скрытая ошибка: при запуске обмена (особенно если он выполняется регламентным заданием на сервере), у пользователя USR1CV8 может не быть прав на чтение папки в сетевом хранилище, где лежат сертификаты.
В логах обмена при этом может быть пусто, но файлы в архив не попадут. Проанализируем настройки доступа к папкам томов и убедимся, что учетная запись сервера 1С имеет полные права на чтение этих данных.
Если стандартный протокол CommerceML накладывает слишком много ограничений (например, нужно передавать не только файл, но и срок действия сертификата, номер и орган выдачи), рассмотрим вариант прямой передачи данных через HTTP-запросы (API сайта). Это позволяет полностью контролировать процесс.
Посмотрим на пример логики передачи файла через API:
// Пример упрощенной отправки файла на сервер
Процедура ОтправитьСертификатНаСайт(Товар, ПутьКФайлу)
Соединение = Новый HTTPСоединение("mysite.com", 443, , , , Истина);
Запрос = Новый HTTPЗапрос("/api/v1/upload_docs");
Запрос.Заголовки.Вставить("Authorization", "Bearer " + ТокенДоступа);
Запрос.Заголовки.Вставить("Content-Type", "application/pdf");
// Читаем файл в двоичные данные
ДвоичныеДанные = Новый ДвоичныеДанные(ПутьКФайлу);
Запрос.УстановитьТелоИзДвоичныхДанных(ДвоичныеДанные);
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
Если Ответ.КодСостояния = 200 Тогда
ЗаписатьЛог("Файл успешно передан для товара: " + Товар.Наименование);
КонецЕсли;
КонецПроцедуры
Важный момент, который часто упускают — это кодировки и спецсимволы в именах файлов. В 1С сертификат может называться Сертификат_№125-А_от_2023.pdf. При передаче на Linux-сервер сайта символ № или кириллица могут вызвать ошибку 404 при попытке открыть файл пользователем.
Разберем правило «гигиены» имен файлов:
sertifikat_125-A.pdf)./upload/ на сайте.В случае с УТ 10.3 или другими конфигурациями на обычных формах, типовой обмен практически не поддерживает выгрузку сертификатов «из коробки». Здесь поможет только доработка модуля обмена. Необходимо найти процедуру, отвечающую за формирование блока <ВспомогательныеФайлы> или <ЗначенияРеквизитов>, и добавить туда обход регистра СертификатыНоменклатуры, связанного с выгружаемым товаром.
Проанализируем, в какой узел XML лучше поместить данные. Чаще всего разработчики используют дополнительные свойства товара. В этом случае путь к файлу передается как строковое значение реквизита, а сам файл принудительно копируется в папку обмена перед архивацией.
Резюме: Для настройки выгрузки сертификатов в современных системах лучше всего использовать дополнительные реквизиты или расширенные модули интеграции. В сложных случаях и при работе со старыми конфигурациями оптимальным решением станет прямая интеграция через API сайта с предварительной транслитерацией имен файлов.