Как настроить выгрузку файлов сертификатов номенклатуры из 1С на сайт?

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

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

Анализ ограничений стандартного обмена CommerceML

Прежде всего, проанализируем, как работает выгрузка номенклатуры и стандартный механизм обмена. Большинство типовых интеграций базируется на стандарте CommerceML 2.x. По умолчанию этот протокол настроен на передачу основных данных товара (наименование, артикул, цена, остаток) и его изображений. Файлы, прикрепленные как «Сертификаты», часто игнорируются системой, так как они не входят в базовый перечень выгружаемых реквизитов, поэтому важен контроль заполнения полей маркированного товара.

Для успешной передачи файлов система должна выполнить три действия:

  1. Извлечь файл из информационной базы или найти его на диске (если используются тома хранения).
  2. Поместить файл в ZIP-архив, который формируется при обмене.
  3. Прописать относительный путь к этому файлу в основном XML-файле выгрузки (обычно это import.xml) в соответствующем узле.

Решение для современных конфигураций (УТ 11, КА 2.5, ERP)

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

Разберем алгоритм действий:

Использование специализированных модулей (на примере 1С-Битрикс)

Выясним причину, по которой стандартный модуль обмена может не справляться с задачей. Часто он просто не имеет интерфейса для выбора специфических типов данных. В этом случае мы рекомендуем использовать расширенные модули от разработчиков CMS. Например, модуль обмена от «1С-Битрикс» заменяет собой стандартный узел обмена и предоставляет гораздо более широкие возможности.

Проанализируем шаги настройки в модуле Битрикс:

  1. В настройках выгрузки товаров находим вкладку «Файлы».
  2. Указываем, какие именно данные из справочника ПрисоединенныеФайлы или связанных регистров должны попадать в пакет.
  3. Настраиваем соответствие: файл сертификата из 1С должен попадать в определенное Свойство товара на сайте с типом «Файл».

Технические нюансы: хранение файлов в томах

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

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

Реализация через API для сложных случаев

Если стандартный протокол 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 при попытке открыть файл пользователем.

Разберем правило «гигиены» имен файлов:

Специфика старых конфигураций (УТ 10.3)

В случае с УТ 10.3 или другими конфигурациями на обычных формах, типовой обмен практически не поддерживает выгрузку сертификатов «из коробки». Здесь поможет только доработка модуля обмена. Необходимо найти процедуру, отвечающую за формирование блока <ВспомогательныеФайлы> или <ЗначенияРеквизитов>, и добавить туда обход регистра СертификатыНоменклатуры, связанного с выгружаемым товаром.

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

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

← На главную