1C сервер на Linux и обмен картинками с сайтом на 1C bitrix

В 1С есть такая штука — “Модуль обмена c сайтом для Управление торговлей”. При работе 1С под Linux этот модуль не выгружает картинки на сайт (работает на “1С-Битрикс: Управление сайтом”).

Давайте это починим.

Для начала рекомендую ознакомиться с

  1. Протокол обмена между системой “1С:Предприятие” и сайтом
  2. Алгоритм выгрузки данных на сайт Битрикс

Я создал стенд для анализа бага

  • Сайт на “1С-Битрикс: Управление сайтом” редакции Малый бизнес на «1С-Битрикс: Веб-окружение» — Linux
  • “Управление торговлей, редакция 11 (11.3.4.21)” файловый вариант для Windows
  • “Управление торговлей, редакция 11 (11.3.4.21)” файловый вариант на Ubuntu 16.04

В конфигурацию я предварительно установил “Модуль обмена c сайтом для Управление торговлей” настроил и проверил работу обмена с сайтом в Windows.

Когда происходит обмен, логи взаимодействия можно просматривать командой

tail -f /var/log/httpd/access_log | grep /bitrix/admin/1c_exchange.php

Просмотр лога показывает, что обмен для Linux вообще не отсылает файлы картинок на сайт.

Погуглив нашёл вот “ЭТО”. Люди уже сталкивались с такой проблемой.

Просмотрев и подебажив код который начинает работать с нажатия кнопки “Принудительная выгрузка картинок”. Нашёл процедуру ПолучитьСписокФайловДляОтправки. Эта процедура в Windows возвращает список файлов, а в Ubuntu нет.

Как исправить ?

В общем модуле “Б_ОбменССайтомСервер” есть функция “ПолучитьСписокФайловДляОтправки”. В функции есть код.

СписокФайлов = Новый СписокЗначений;
Маска = "*.*";

Ниже я добавил код

// ПАТЧ 
СистемнаяИнформация = Новый СистемнаяИнформация;
ЭтоLinuxКлиент = СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86 ИЛИ СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86_64;
Если ЭтоLinuxКлиент Тогда
Маска = "*";
КонецЕсли;

Кстати, если просто заменить Маска = “*.*”; на Маска = “*”; код будет работать и в Windows и в Linux.

После этого в логах взаимодействия 1С и http сервера видно, что файлы на сайт передаются.

Но вот какая штука. Если заглянуть в товар на сайте.

картинок там нет.

Просмотрев файл import.xml(созданный выгрузкой под Linux), я понял, что при отсылке картинок на сайт неправильно формируется параметр filename.

В import.xml тег

<Картинка>import_files/42/42ce9566-235f-11e7-4b8c-5afc5c07d194_84e0af4a-23f3-11e7-4b8c-5afc5c07d194.jpg</Картинка>

А при передаче файла картинки

filename=КаталогДляВыгрузки/import_files/42/42ce9566-235f-11e7-4b8c-5afc5c07d194_84e0af4a-23f3-11e7-4b8c-5afc5c07d194.jpg

В общем модуле “Б_ОбменССайтомСервер” есть функция “ВыгрузитьДанныеНаСайт”.

В коде цикла

Для Каждого ТекФайл Из СписокФайловДляОтправки цикл

перед строкой

ОтветСервера = ПолучитьРезультатОтправкиФайлаНаСервер(ПараметрыОбмена, ТекФайл.Значение, Соединение, АдресДляРаботы + НастройкиПодключения.ПараметрЗапросаHTTP_ПередачаФайла + ТекФайл.Представление + Токен, ЗаголовкиЗапросов);

вставляем

// А ТУТ КОСТЫЛЬНЫЙ ПАТЧ потому что надо менять условия формирования  --> ТекФайл.Представление.
// Ну или пересмотреть подход к формированию временого каталога
СистемнаяИнформация = Новый СистемнаяИнформация;
ЭтоLinuxКлиент = СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86 ИЛИ СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86_64;
Если ЭтоLinuxКлиент Тогда
ТекФайл.Представление=СтрЗаменить(ТекФайл.Представление, КаталогДляВыгрузки+"/", "");
КонецЕсли;

После этих манипуляций картинки стали попадать на сайт в номенклатуру.

Надеюсь, разработчики “Модуль обмена c сайтом для Управление торговлей” исправят выгрузку картинок в следующих версиях.

PS. Всё используемое ПО у меня последних версий 20–07–2017.

)

Алексей Трофимов

Written by

abuga

abuga

ИТ технологии, советы, рецепты и истории.

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade