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

Для начала рекомендую ознакомиться с
Я создал стенд для анализа бага
- Сайт на “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.

