При интеграции 1С:Управление торговлей 11 с интернет-магазинами на платформе Shop-Script (Webasyst) специалисты часто сталкиваются с ситуацией, когда выгрузка товаров на сайт проходит успешно, но загрузка заказов обратно в 1С обрывается с ошибкой. Основная причина кроется в несоответствии кодировки передаваемого XML-файла и той кодировки, которая указана в его заголовке. В результате вместо данных 1С видит набор непонятных символов («кракозябры»), а парсер XML выдает исключение.
В данной статье мы подробно разберем, почему возникает эта проблема, как проанализировать структуру файла обмена и какие конкретные шаги нужно предпринять на стороне 1С и сайта для восстановления корректного обмена данными.
Разберем типичную ситуацию: в заголовке XML-файла, который формирует сайт, указано encoding="windows-1251". Однако фактическое содержимое файла передается в кодировке UTF-8 или содержит символы, которые веб-сервер ошибочно интерпретирует при передаче. Рассмотрим основные факторы, приводящие к сбою:
charset=utf-8 к HTTP-ответу, что конфликтует с внутренним содержимым XML.Проанализируем ситуацию: если вы открываете файл в браузере и видите структуру XML, а в обычном блокноте или при чтении в 1С отображается «каша» — это явный признак того, что программа пытается прочитать UTF-8 через кодировку ANSI (windows-1251).
Если нет возможности оперативно изменить логику формирования файла на стороне сайта, мы можем внести правки в код 1С, чтобы принудительно указать верную кодировку при чтении. Это наиболее надежный способ «подружиться» с внешним движком магазина.
Нам необходимо найти место, где система считывает файл заказов. В типовой конфигурации «Управление торговлей 11» за это отвечает общий модуль ОбменССайтом. Рассмотрим по шагам процесс внесения изменений:
ОбменССайтом.ЗагрузитьЗаказыИзФайла или логика внутри менеджера обмена.ЧтениеXML, необходимо явно указать кодировку, в которой 1С должна интерпретировать байты файла.Применим следующий пример кода для исправления ситуации, когда сайт присылает данные в windows-1251, но 1С не может их корректно разобрать автоматически:
// В общем модуле ОбменССайтом находим логику инициализации чтения XML
// Вместо стандартного ФайлXML.ОткрытьФайл(ИмяФайла) используем:
ФайлXML = Новый ЧтениеXML;
ПараметрыЧтения = Новый ПараметрыЧтенияXML(,,, ПроверкаСимволовXML.ВыдаватьОшибку);
// Принудительно указываем кодировку "cp-1251", если сайт ошибается в заголовках
// Или "UTF-8", если файл по факту в юникоде, несмотря на заголовок 1251
ФайлXML.ОткрытьФайл(Параметры.ФайлЗагрузки, ПараметрыЧтения, "cp-1251");
Важный нюанс: Если вы видите, что в браузере текст читается, а в 1С нет, попробуйте заменить в коде выше "cp-1251" на "UTF-8". Это заставит 1С игнорировать ложный заголовок в самом XML и читать данные правильно.
Выясним причину на стороне источника данных. В Shop-Script за интеграцию обычно отвечает плагин «1С:Интеграция». Разберем, что можно проверить в админ-панели сайта:
Иногда проблема проявляется только на локальных тестовых серверах (например, при использовании OpenServer или XAMPP на Windows). Это происходит из-за того, что системная локаль «нон-юникод» программ отличается от кодировки файла. Выполним следующие действия для проверки:
Рассмотрим настройки региональных стандартов Windows. В панели управления в разделе «Региональные стандарты» (вкладка «Дополнительно») проверьте параметр «Язык программ, не поддерживающих Юникод». Для корректной работы с кириллицей в старых протоколах обмена там должен быть установлен «Русский (Россия)».
Однако помните, что это лишь вспомогательная мера. Основное решение должно быть реализовано на уровне обработки данных в 1С через объект ЧтениеXML.
Если вы не уверены, в какой именно кодировке приходят данные, выполним небольшое исследование. Попробуем прочитать файл не как XML, а как обычный текст в 1С и вывести его в консоль сообщений:
ТекстовыйДокумент = Новый ТекстовыйДокумент;
// Пробуем прочитать файл как UTF-8
ТекстовыйДокумент.Прочитать(ПутьКФайлу, КодировкаТекста.UTF8);
Сообщить(ТекстовыйДокумент.ПолучитьТекст());
// Если видим читаемый текст - значит проблема в том,
// что 1С пытается парсить его как ANSI из-за заголовка XML.
Проанализировав результат, мы точно поймем, какую кодировку нужно подставить в метод ОткрытьФайл объекта ЧтениеXML.
Проблема «кракозябр» при обмене 1С с Shop-Script — это классический конфликт стандартов. Сайт, работающий на PHP/Linux, тяготеет к UTF-8, в то время как старые спецификации CommerceML требуют windows-1251.
Для исправления ситуации мы рекомендуем:
ОбменССайтом, принудительно указав нужную кодировку в методе ОткрытьФайл.Такой комплексный подход позволит восстановить автоматическую загрузку заказов и избежать ручного ввода данных из интернет-магазина.