Проблема обмена 1С с сайтом

196
21 июня 2017, 01:47

Есть интернет магазин на openCart и база 1С. Проблема состоит в следующем - есть база 1С примерно 12к наименований, в настройках выгрузки установлено количество товара больше 0, т.е. только что есть на складе, в итоге одновременно загружает порядка 5.5к товара. База настроена таким образом что перед выгрузкой новой базы старая база удаляется (это связано со спецификой деятельности). Иногда, через раз возникает подобная ошибка:

Произошла ошибка на стороне сервера. Обмен не выполнен Ответ сервера: Файл РЅРµ является стандартом XML, подробности РІ журнале

20.06.2017 08:23:29 Начало сеанса 20.06.2017 08:23:29 Цикл 1 20.06.2017 08:23:29 Обработка C:\Users\user1\AppData\Local\Temp\2\1cbitrix 20.06.2017 08:40:20 НЕ ВЫГРУЖЕНО!!! 20.06.2017 08:40:20 Цикл 2 20.06.2017 08:40:20 Завершение сеанса

Выгрузка товаров завершена с ошибками!!!

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

Вот файлы импорта - клац

Answer 1

"кракозябры", написанные в ответе сервера, переводятся на русский как: "Файл не является стандартом XML, подробности в журнале".

Происходит последнее, потому что ответ выдаётся в одной кодировки(Windows-1251), при этом в ответе указана другая.

Из ответа следует, что нарушена структура XML-документа. Последнее зачастую может происходить из-за наличия в выгружаемых данных неэкранированных управляющих символов, причём скорее всего в тех местах, которые изначально не подразумевали наличия разметки.

Также необходимо проверить журнал на сервере, о котором говорится в ответе. Там скорее всего будет указано, вплоть до номера строки и смещения вправо, место в котором произошла ошибка и по идущему выше контенту можно будет составить точное мнение: почему именно данный документ не прошел проверку.

Как я уже написал выше : скорее всего это неэкранированные теги и упраяляющие символы в выгружаемом содержимом.

Исправить на стороне 1С это крайне проблематично без 1С-программиста.

На стороне сайта это можно решить экранированием данных перед сохранением в БД и последующим преобразованием обратно в специальные символы при выводе на сайте.

экранирование:

htmlspecialchars($content);

преобразование html-сущностей обратно в специальные символы:

htmlspecialchars_decode($data);

Но данный способ является бесполезным, если первоисточником данных является 1С.

И третий способ:

Убрать вручную вёрстку из проблемного содержимого в 1С.

Вполне возможно, что на каком-то поле товара ставится галочка по типу содержимого текста (текст/html) и в зависимости от этого 1С экранирует данное поле перед выгрузкой или пропускает его. И в каком-то конкретном случае оно не соответствует указанному значению(стоит галочка под пунктом "текст", но при этом поле содержимое содержит разметку).

Другой, проблемой может являться несоответствие xml-документа CML2 формату, которым пользуется 1С для обмена с сайтом. Но такая проблема, по-моему мнению может возникнуть только при кастомизированной выгрузке со стороны 1С. При работе модуля, предоставленного 1С, такой проблемы, по моему мнению, наблюдаться не должно.

Стандарт CommerceML2

Если я оказался не прав в своём предположении, то просьба привести содержимое журнала к вопросу.

READ ALSO
admin_menu Drupal

admin_menu Drupal

Ранее не работал с Drupal, сейчас выпала не большая задача с сайтом на нем, захожу я в админку,а панель управления нетКак оптимально можно решить...

214
Проблема с записью в MySQL PHP

Проблема с записью в MySQL PHP

В ходе работы программы получаю массив arr на 1000 значений, хочу записать в базу, используя PDO

200
mxnet Ошибка при вызове любой функции “Cannot find pass … in the registry” [требует правки]

mxnet Ошибка при вызове любой функции “Cannot find pass … in the registry” [требует правки]

Собрал из исходников в VS2013 на Win7Примеры для С++ пробую и такая ошибка "Cannot find pass

278
C++ WinApi Буфер обмена

C++ WinApi Буфер обмена

Нужно достать картинку из буфера и вывести ее на экранЯ написал код:

315