Как передать картинки групп номенклатуры из 1С:УТ 11 на сайт 1С-Битрикс?

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

Передача изображений для разделов (групп) каталога в связке 1С:Управление торговлей 11 и 1С-Битрикс является распространенной задачей, однако стандартный механизм обмена CommerceML по умолчанию поддерживает выгрузку изображений только для элементов справочника Номенклатура. В этой статье мы разберем, какими способами можно реализовать выгрузку картинок групп, чтобы они корректно отображались на вашем сайте.

Способ 1: Доработка модуля обмена в 1С

Наиболее системным подходом является изменение алгоритма формирования XML-файла выгрузки. Поскольку штатный модуль не видит связи между группой товаров и присоединенным файлом изображения, нам необходимо расширить логику обмена.

  1. Определение соответствия: В 1С каждая группа имеет уникальный GUID (идентификатор). Для корректной передачи изображения мы должны привязать файл картинки к группе, используя этот идентификатор.
  2. Изменение структуры XML: В коде модуля, отвечающего за выгрузку каталога, найдите узел, который отвечает за формирование информации о разделах (группах). Необходимо добавить программную логику, которая будет находить присоединенный файл для данной группы, считывать его двоичные данные и упаковывать в формат Base64, размещая внутри соответствующего тега раздела в XML.
  3. Обработка на стороне Битрикса: После того как 1С начнет передавать данные, необходимо настроить сайт на их прием. Это делается через обработчик события OnBeforeCatalogImport1C. В этом обработчике мы должны перехватить данные о картинке раздела и программно установить их для элемента IBlockSection, используя методы CIBlockSection::Update.

Способ 2: Использование внешнего хранилища и API

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

Суть метода заключается в разделении потока данных: XML-обмен отвечает за структуру каталога, а отдельный процесс — за наполнение сайта графикой.

  1. Подготовка файлов: На стороне 1С создаем регламентное задание, которое выгружает все картинки групп в отдельную папку на сервере, доступную по протоколу SFTP. Важно, чтобы имена файлов соответствовали GUID групп.
  2. Автоматизация на сайте: На стороне Битрикса настраиваем PHP-скрипт (агент), который будет работать по расписанию. Скрипт должен:
    • Сканировать папку с изображениями.
    • Извлекать GUID из имени файла.
    • Искать соответствующий раздел Инфоблока в Битриксе по этому GUID.
    • Загружать изображение в поле «Картинка» раздела с помощью стандартных методов API.

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


$sectionID = ...; // ID раздела в Битриксе
$imagePath = $_SERVER["DOCUMENT_ROOT"] . "/upload/import_images/" . $guid . ".jpg";

if (file_exists($imagePath)) {
    $arFile = CFile::MakeFileArray($imagePath);
    $bs = new CIBlockSection;
    $fields = array("PICTURE" => $arFile);
    $bs->Update($sectionID, $fields);
}

Рекомендации по реализации

При выборе метода ориентируйтесь на объем ваших данных. Если групп несколько сотен, то доработка XML-обмена может привести к значительному увеличению размера файлов обмена, что негативно скажется на стабильности импорта. В таких случаях вынос картинок во внешний канал (через SFTP или временные файлы) является более производительным решением.

Также важно помнить о следующем:

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

← На главную