20.01.2025 20:29
Цитата:
FerroPanda Это точно прям из УТМ?
Для меня важен тэг <ce:amccat> - он точно вокруг каждой марки или нет. Просто при обычном запросе он оборачивает группу марок, в общепите если были продажи, то каждую марку. Но как он себя ведёт в общепите, если подряд идут несколько нераспечатанных бутылок.
Вот обычный: в обычном <ce:amccat> не нашёл

Общепитовский через 30 минут прицеплю
Вложения
Тип файла: zip ReplyRestBCode.zip (1.5 Кб, 6 просмотров)
20.01.2025 20:59
Это общепит

https://storage.olegon.ru/supermag/u...de-общепит.zip
(0Мб)

та же справка, как и в предыдущем ответе. Правда вскрытых нет, но вскрытые есть у коллеги в предыдущих постах
21.01.2025 11:59
Ага, вижу ... спасибо за файлики. )))
22.01.2025 17:10
Разобрался с ВОМ.
Если делать ТекстовыйФайл = Новый ТекстовыйДокумент , то документ получится с ВОМ.
Если хитрожопить и просто создать пустой файл, указать кодировку ANSI, сохранить. Потом открыть и дописать в него уже с ЮТФ8, то ВОМ не будет.

Код:
Файл = Новый ЗаписьТекста(ИмяФайла,КодировкаТекста.ANSI);
Файл.Закрыть();                                                  
Файл = Новый ЗаписьТекста(ИмяФайла,КодировкаТекста.UTF8,,Истина); // Истина отвечает за ДОПИСЫВАНИЕ в файл
... формирую XML ...
Файл.Закрыть();
А дальше при отправке можно сократить всякие ДОМ и всякие чтения и записи XML

Код:
        Файл = Новый ТекстовыйДокумент();
	Файл.Прочитать(ИмяФайла,КодировкаТекста.UTF8);
	
	ТелоЗапроса = Новый ТекстовыйДокумент();
	ТелоЗапроса.РазделительСтрок = Символы.CR+Символы.LF;
	ТелоЗапроса.ДобавитьСтроку("--" + Boundary);
	ТелоЗапроса.ДобавитьСтроку("Content-Disposition: form-data; name=""xml_file""; filename=""QueryRestBCode.xml");
	ТелоЗапроса.ДобавитьСтроку("Content-Type: text/xml; charset=utf-8");
	ТелоЗапроса.ДобавитьСтроку("");
	ТелоЗапроса.ДобавитьСтроку(Файл.ПолучитьТекст());
	ТелоЗапроса.ДобавитьСтроку("--" + Boundary + "--");
	ТелоЗапросаСтрока = ТелоЗапроса.ПолучитьТекст();

	ЗапросHTTP = Новый HTTPЗапрос("/opt/in/QueryRestBCode");
	ЗапросHTTP.Заголовки.Вставить("Content-Type", "multipart/form-data; boundary=" + Boundary);
	ЗапросHTTP.УстановитьТелоИзСтроки(ТелоЗапросаСтрока, КодировкаТекста.UTF8);

	Соединение = Новый HTTPСоединение(бла-бла-бла)

Правка: FerroPanda, 22.01.2025 17:15
22.01.2025 18:04
Как у вас все сложно...
Текстовые файлы и т.п... Вы еще и теги наверное сами закрывакте - ?
Я пользуюсь XML парсером винды, через MS DOM.
Создаю объект:
XML_DOM=CreateObject("MSXML2.DOMDocument.6.0")
Добавляю в него все необходимые теги, устанавливаю атрибуты и т.п.
Ни о каких закрытиях тегов даже не думаю, DOM сам закроет, согласно структуры XML.
Потом, просто сохраняю, если нужно:
XML_DOM.Save("c:\Temp\ResendTTN.xml");
В некоторых случаях даже и сохранять не нужно - так в запрос строкой передается.
И ни о каких BOM и т.п. даже не думаю, парсер это все сам делает.
Да, есть недостатки и у этого метода, но, как правило для ЕГАИС его вполне хватает.
22.01.2025 18:24
MWWRuza, О_о .... вы о чём? Тут код по отправке готового файла в УТМ.
Какое формирование XML? Какие тэги? Его я вообще не формирую, а в готовый шаблон вставляю код организации и справку. https://olegon.ru/showpost.php?p=411567&postcount=38

Это информация была в основном для Igor_NP, потому что у него было как-то непонятно для меня ... т.с. альтернативный непонятный вариант. ))
22.01.2025 18:29
Ну, я х.з. Видимо, упустил нитку беседы.
Вот это:

Цитата:
FerroPanda Если делать ТекстовыйФайл = Новый ТекстовыйДокумент , то документ получится с ВОМ.
Я думал к формированию XML относится, типа создаем текстовый файл, все в него пишем, и сохраняем с расширением xml.
22.01.2025 18:33
Цитата:
MWWRuza В некоторых случаях даже и сохранять не нужно - так в запрос строкой передается.
А так, передаю DOM вообще не сохраняя в файл:

Функция ВыгрузитьDOM(XML_DOM, URL) Экспорт
// СохранитьВРезервноеХранилище(XML_DOM, URL, "in", "in");
Скрипт=СоздатьОбъект("MSScriptControl.ScriptControl");
Скрипт.language="javascript";
Это=Скрипт.Eval("this");
BOUNDARY = "BOUNDRYxXxXxEGAISxXxXxBOUNDARY";
POST_STRING = "--"+BOUNDARY+РазделительСтрок;
POST_STRING = POST_STRING + "Content-Disposition: form-data; name=""xml_file""; filename=""select.xml""" + РазделительСтрок;
POST_STRING = POST_STRING + "Content-Type: text/xml; charset=utf-8" + РазделительСтрок + РазделительСтрок;
POST_STRING = POST_STRING + XML_DOM.xml + РазделительСтрок + РазделительСтрок;
POST_STRING = POST_STRING + "--" + BOUNDARY + "--" + РазделительСтрок;
WinHttp=СоздатьОбъект("WinHttp.WinHttpRequest.5.1");
Скрипт.AddObject("WinHttp",WinHttp);
WinHttp.Open("POST", URL, 0);
WinHttp.SetRequestHeader("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);
WinHttp.SetRequestHeader("Content-Length", СтрДлина(POST_STRING));
WinHttp.Send(POST_STRING);
Если WinHTTP.Status<>200 Тогда
Предупреждение("Не удалось выгрузить документ. Возможно служба УТМ не запущена.");
Возврат "";
КонецЕсли;
Стрим = СоздатьОбъект("ADODB.Stream");
Стрим.Mode = 3;
Стрим.Type = 1;
Стрим.Open();
Скрипт.AddObject("Stream",Стрим);
Скрипт.Eval("Stream.Write(WinHttp.responseBody)");
Стрим.Position = 0;
Стрим.Type = 2;
Стрим.Charset = "utf-8";
Ответ = Стрим.ReadText();
Стрим.Close();
// СохранитьВРезервноеХранилище(XML_DOM, URL, "in", "in");
XML_DOM=CreateObject("MSXML2.DOMDocument.6.0");
XML_DOM.LoadXML(Ответ);
СохранитьВРезервноеХранилище(XML_DOM, URL, "in", "answer");
WinHttp = 0;
Возврат XML_DOM;
КонецФункции

Это целиком рабочая функция отправки DOM в УТМ и получение результата.
22.01.2025 18:37
Цитата:
MWWRuza Я думал к формированию XML относится, типа создаем текстовый файл, все в него пишем, и сохраняем с расширением xml.
Ну да, правильно поняли.
Если просто сохранить, то будет ВОМ. Если сохранить "дважды", то его не будет.
Как по мне, то разумнее дважды сохранить и иметь наглядный вариант запроса сразу в коде, чем делать "правильно" и потом без поллитры не разберёшься - суть в этом.
22.01.2025 18:42
Цитата:
MWWRuza Это целиком рабочая функция отправки DOM в УТМ и получение результата.
Изначально стоял вопрос в правильном формировании запроса (формировании XML), чтобы он принялся УТМ и отправился.
А по отправке у вас код в два раза длиннее вышел.
Часовой пояс GMT +3, время: 19:02.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.