Добрый день, форумчане!
Подскажите советом, как решить такую ситуацию.
Имеем: 1С 7.70. 0.25, конфигурация не стандартная, стороннюю программу - называется "шлюз" и кассовый аппарат с GSM модемом.
Написана обработка, которая создает xml-файл -"Справочник товаров" и отправляет его на "шлюз".
"Шлюз" установлен на отдельном компьютере, написанный на Java, использует: Java v.7 Update 21, слушает 1000 порт (для обмена с 1С) и 1002 (для обмена с кассовым аппаратом ). Сделан проброс трафика с внешнего ip на машину со "шлюзом" на порт 1002, т.е кассовый аппарат подключатся по внешнему ip к порту 1002 "шлюза" и передает\принимает данные.
В обработке для работы с xml файлами использую MSXML парсер.
XML документ создаю:
XML_Doc=CreateObject("MSXML2.DOMDocument.4.0");
На основе данных с 1С заполняю XML файл и в результате получаю:
<?xml version="1.0" encoding="utf-8"?>
<IMPORT since="20130702193600">
<LIST>
<DEVICES>
<DEVICE id="ПБ0000000000"/>
</DEVICES>
<ITEMS clear="0">
<ITEM code="430" price="405" quantity="0" barcode="0" delete="0">Салат "Итальянский" </ITEM>
</ITEMS>
</LIST>
</IMPORT>
Отправляю на "шлюз" этот xml файл:
Попытка
srvXmlHttp_SPR_TOV= СоздатьОбъект("MSXML2.xmlHttp.4.0");
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
Попытка
srvXmlHttp_SPR_TOV.OPEN("POST","http:\\192.168.1.100:1000",1);
srvXmlHttp_SPR_TOV.setRequestHeader("Content-Type", "text/plain;charset=UTF-8");
srvXmlHttp_SPR_TOV.SEND(XML_Doc);
Исключение
Сообщить(ОписнаиеОшибки());
КонецПопытки;
Отправка xml файла - "Справочника товаров" на "шлюз" проходит успешно.
После этого, кассовый аппарат, используя GSM модем, подключатся через внешний ip к "шлюзу" на порт 1002 и забирает данные.
В приведенном xml файла указана одна новая позиция справочника товаров, которая появится на кассовом аппарате:
Салат "Итальянский", код 430, цена 405 коп.
Проблема: В чеке на кассовом аппарате название Салат "Итальянский" печатается как Салат "??тальянский"
Т.е.: если в названии товара есть заглавная буква "И" то в чеке она будет выглядеть как "??".
Есть возможность в программу "шлюз" загрузить xml файла, приведенный выше, вручную. После этого кассовый аппарат заберет эти данный и буква "И" отображается в чеке правильно.
Соответственно разработчики программы "шлюз" и кассового аппарата (одна и та же контора) своих ошибок не видят.
Т.е. проблема именно в момент передачи xml файла с 1С на программу "шлюз".
Ответили они так: "Ошибка может быть в момент считывания данных с файла и преобразования информации в поток байт.
Либо ошибка в момент формирования HTTP-пакета так же на стороне 1С."
Пробовал этот xml файла сохранить на диск и отправить на "шлюз" используя компоненту v7plus.dll. Результата был такой же.
ЗагрузитьВнешнююКомпоненту("v7plus.dll");
Соединение = СоздатьОбъект("AddIn.V7HttpReader");
Соединение.ОтправитьДляОбработки("http://192.168.1.100:1000","D:\file.xml",1,,);
Собственно, может ктот сталкивался с таким? И\или подскажет каким еще методом можно отправить xml файл с 1С?
Возможно нужно еще указывать какие то параметры при создание и\или отправке xml файла, которые касаются кодировки.
З.Ы. очепятка:
Правильная строка в коде
srvXmlHttp_SPR_TOV.setRequestHeader("Content-Type", "text/xml;charset=UTF-8");