Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2, свеженьких 1
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Проблема с кодировкой XML файла, заглавная буква "И" , Вместо заглавной буквы "И" - знаки вопросов "??"          
Skodnik Подменю пользователя
сообщение 04.07.13, 13:40
Сообщение #1

Общительный
**
Группа: Пользователи
Сообщений: 49
Из: Ukraine
Спасибо сказали: 2 раз
Рейтинг: 0

Добрый день, форумчане!

Подскажите советом, как решить такую ситуацию.
Имеем: 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");

Спасибо сказали: Vofka,

Vofka Подменю пользователя
сообщение 04.07.13, 13:54
Сообщение #2

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4520 раз
Рейтинг: 3642.8

А если так
srvXmlHttp_SPR_TOV.setRequestHeader("Content-Type", "text/xml;charset=windows-1251");

?

ПС. это просто образец того "Как надо оформлять тему" smile.gif . Пожму за это палец.

Skodnik Подменю пользователя
сообщение 04.07.13, 14:08
Сообщение #3

Общительный
**
Группа: Пользователи
Сообщений: 49
Из: Ukraine
Спасибо сказали: 2 раз
Рейтинг: 0

Спасибо за совет, попробую.

Как я понимаю код:
srvXmlHttp_SPR_TOV.setRequestHeader("Content-Type", "text/xml;charset=windows-1251");

устанавливает заголовок протоколу HTTP, назначение "Content-Type" - Формат и способ представления сущности., т.е что в запросе будет "text/xml", а кодировка ему "windows-1251"
Требования к xml файлу, который формирует 1С, такие: "ПО должно формировать файл в кодировке UTF-8(без BOM)".


Vofka Подменю пользователя
сообщение 04.07.13, 14:19
Сообщение #4

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4520 раз
Рейтинг: 3642.8

Skodnik, ну, это попытка угадать, т.к. наверняка я сказать не могу. А вообще, по хорошему, надо попробовать отправить это, хотя бы, из 1С 8. Может это какой-то баг 7.7. И да, попробуйте ещё вообще строку заголовков убрать.

Skodnik Подменю пользователя
сообщение 04.07.13, 14:40
Сообщение #5

Общительный
**
Группа: Пользователи
Сообщений: 49
Из: Ukraine
Спасибо сказали: 2 раз
Рейтинг: 0

Цитата(Vofka @ 04.07.13, 15:19) *
Skodnik, ну, это попытка угадать, т.к. наверняка я сказать не могу. А вообще, по хорошему, надо попробовать отправить это, хотя бы, из 1С 8. Может это какой-то баг 7.7. И да, попробуйте ещё вообще строку заголовков убрать.


Строку заголовка убрать пробовал раньше, со строкой:
srvXmlHttp_SPR_TOV.setRequestHeader("Content-Type", "text/xml;charset=windows-1251");

ситуация не изменилась.
Буду пробовать с 8ки отправить. Хотя если и получится, лицензия у нас только на 7.7. Это уже ради спортивного интереса. 433.gif

Acid Подменю пользователя
сообщение 04.07.13, 16:49
Сообщение #6

Про1С-ник
Иконка группы
За заслуги на форуме в 2010 году
Группа: Местный
Сообщений: 2104
Из: Занзибар
Спасибо сказали: 377 раз
Рейтинг: 260.7

ошибка платформы 1с скорее всего.
1 вариант - попробуйте одинарные кавычки, либо другой символ.
2 вариант - если создать хмл-файл и сохранить на диске, а потом посмотреть этот файл. эта И будет присутствовать?
Еще есть вероятность того, что двойная кавычка в шлюзе завершает тег. В общем пробуйте другой символ. Тильду например.

Готовтесь к тому, чтобы шлюз подбирал хмл-файл.


Signature

Документируйте Код! мать вашу...


Skodnik Подменю пользователя
сообщение 05.07.13, 8:27
Сообщение #7

Общительный
**
Группа: Пользователи
Сообщений: 49
Из: Ukraine
Спасибо сказали: 2 раз
Рейтинг: 0

Цитата(Acid @ 04.07.13, 17:49) *
ошибка платформы 1с скорее всего.
1 вариант - попробуйте одинарные кавычки, либо другой символ.
2 вариант - если создать хмл-файл и сохранить на диске, а потом посмотреть этот файл. эта И будет присутствовать?
Еще есть вероятность того, что двойная кавычка в шлюзе завершает тег. В общем пробуйте другой символ. Тильду например.

Готовтесь к тому, чтобы шлюз подбирал хмл-файл.

День добрый!
1-й вариант. Любой другой символ, в не зависимости будет он стоять возле кавычек или сам по себе, прописная это буква будет или маленькая в xml файле от будет отображаться корректно. Проблема именно в заглавной букве И.
2-и вариант. Если сохранить xml файле на диске и открыть буква будет присутствовать. Так же в первом посте писал, что возможно этот
xml файле загрузить в программу "шлюз" вручную(есть кнопочка импорт) после этого касса эго заберет и в чеке буква И отображается правильно.

Хотите сказать чтоб попробовать ~ вместьо буквы И? А смысл?
Кавычки роли не играют. Что так:
 <ITEM code="430"  price="405" quantity="0" barcode="0"  delete="0">Салат "Итальянский" </ITEM>

или так
 <ITEM code="430"  price="405" quantity="0" barcode="0"  delete="0">Салат Итальянский </ITEM>

или вот так
 <ITEM code="430"  price="405" quantity="0" barcode="0"  delete="0">Икра кабачковая </ITEM>

В чеке будет вместо буквы И такое - ??
Салат "??тальянский" ,Салат ??тальянский, ??кра кабачковая

Acid Подменю пользователя
сообщение 05.07.13, 8:37
Сообщение #8

Про1С-ник
Иконка группы
За заслуги на форуме в 2010 году
Группа: Местный
Сообщений: 2104
Из: Занзибар
Спасибо сказали: 377 раз
Рейтинг: 260.7

хмм... с этой буквой никогда проблем не было.
с украинской буквой І были проблемы. может файл кодировки/кириллицы у вас "битый"? есть небольшая вероятность.

могу предложить такой вариант - все символы названия формируйте в кодах utf-8. самый верняк будет.


Signature

Документируйте Код! мать вашу...


Skodnik Подменю пользователя
сообщение 05.07.13, 8:58
Сообщение #9

Общительный
**
Группа: Пользователи
Сообщений: 49
Из: Ukraine
Спасибо сказали: 2 раз
Рейтинг: 0

Цитата(Acid @ 05.07.13, 9:37) *
может файл кодировки/кириллицы у вас "битый"? есть небольшая вероятность.

Как это проверить?
Цитата(Acid @ 05.07.13, 9:37) *
могу предложить такой вариант - все символы названия формируйте в кодах utf-8. самый верняк будет.

В какой момент форматировать символы в utf-8? В момент создания xml файл в 1C?.....

В предыдущем посте я уже писал что 1С создает xml файл корректно, проверял вручную загружая в программу "шлюз",а на отправляя в эту программу с 1С.
Проблема именно в момент передачи xml файл с 1С на программу "шлюз".

Acid Подменю пользователя
сообщение 05.07.13, 12:18
Сообщение #10

Про1С-ник
Иконка группы
За заслуги на форуме в 2010 году
Группа: Местный
Сообщений: 2104
Из: Занзибар
Спасибо сказали: 377 раз
Рейтинг: 260.7

Цитата(Skodnik @ 05.07.13, 9:58) *
Как это проверить?

в 98 винде, в системных файлах был файл kernel32. Он был текстового формата и там меняли укр.букву I на I английскую.
Как сейчас организовано, не знаю.
Цитата
В какой момент форматировать символы в utf-8? В момент создания xml файл в 1C?.....

именно

можно еще попробовать хмл-файл открыть сторонним текстовым редактором (который умеет преобразовывать/перекодировать тексты). И проверить кодировку И.


Signature

Документируйте Код! мать вашу...


Skodnik Подменю пользователя
сообщение 05.07.13, 15:05
Сообщение #11

Общительный
**
Группа: Пользователи
Сообщений: 49
Из: Ukraine
Спасибо сказали: 2 раз
Рейтинг: 0

Цитата(Acid @ 04.07.13, 17:49) *
ошибка платформы 1с скорее всего.

Пробовал с 8ки платформа 8.2.16
Текст обработки:
    Попытка 
       XML_Doc= Новый COMОбъект("MSXML2.DOMDocument.4.0");
    Исключение
      Сообщить("Не удалось создать xml документ");
    КонецПопытки;    
    XML_Doc.load("D:\xmltest.xml");
    Попытка      
      srvXmlHttp_SPR_TOV=  Новый COMОбъект("MSXML2.xmlHttp.4.0");
    Исключение
      Сообщить("Не удалось создать запрос");
    КонецПопытки;    
    Попытка
      srvXmlHttp_SPR_TOV.OPEN("POST","http://192.168.1.100:1002",1);            
      srvXmlHttp_SPR_TOV.setRequestHeader("Content-Type", "text/xml;charset=UTF-8");
      srvXmlHttp_SPR_TOV.SEND(XML_Doc);
    Исключение
      Сообщить("Не удалось отправить на шлюз данные");    
    КонецПопытки;

И собственно xml файл:
<?xml version="1.0" encoding="UTF-8" ?> 
<IMPORT since="20130704153400">
<LIST>
<DEVICES>
  <DEVICE id="ПБ0000000000" />
  </DEVICES>
<ITEMS clear="0">
  <ITEM code="430" tax="1" department="1" price="405" quantity="0" barcode="0" delete="0">Салат "Итальянский"</ITEM>
  </ITEMS>
  </LIST>
  </IMPORT>

Результат тот же 09000000.gif

Vofka Подменю пользователя
сообщение 05.07.13, 15:08
Сообщение #12

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4520 раз
Рейтинг: 3642.8

Skodnik, у вас есть какой-то сайт?

Skodnik Подменю пользователя
сообщение 05.07.13, 15:27
Сообщение #13

Общительный
**
Группа: Пользователи
Сообщений: 49
Из: Ukraine
Спасибо сказали: 2 раз
Рейтинг: 0

Цитата(Vofka @ 05.07.13, 16:08) *
Skodnik, у вас есть какой-то сайт?

Хотите сказать, что можно попробовать xml на сайте опубликовать?

Vofka Подменю пользователя
сообщение 05.07.13, 16:23
Сообщение #14

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4520 раз
Рейтинг: 3642.8

Цитата(Skodnik @ 05.07.13, 16:27) *
Хотите сказать, что можно попробовать xml на сайте опубликовать?

Нет. Можно написать на пхп страницу, которая выведет данные, полученные из 1С. И посмотреть как там отобразится "И". Если и там криво - тогда да, тогда какая-то беда в методах отправки. Но если отобразится там нормально, то тогда...

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 07.05.24, 10:36
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!