25.12.2024 14:30
У кого-то есть "инструкция" как самому из 1С 8.3 реализовать работу с УТМ?
Ну там типа организовать передачу произвольных xml, проверка ответов, загрузка ответных xml и т.д. Какие для этого можно использовать процедуры/функции БСП?

P.S. Ответы типа "отладчик в помощь" и т.п. просьба не писать - это резервный вариант. )))
25.12.2024 15:15
пример как стучать на УТМ, самое мясо это создание XML файлов и отправка запросом, тут инструкции не будет, в типовых можно посмотреть.


Соединение = Новый HTTPСоединение("127.0.0.1",8080,,,,60);
HTTPЗапрос = Новый HTTPЗапрос("info/version");

Попытка
Ответ = Соединение.Получить(HTTPЗапрос);
Исключение
Сообщить("Нет соединения с УТМ");
Возврат;
КонецПопытки;

Если Ответ.КодСостояния = 200 Тогда
ВерсияУТМ = Ответ.ПолучитьТелоКакСтроку();
КонецЕсли;
25.12.2024 16:00
Цитата:
RolSss пример как стучать на УТМ, самое мясо это создание XML файлов и отправка запросом, тут инструкции не будет, в типовых можно посмотреть.


Соединение = Новый HTTPСоединение("127.0.0.1",8080,,,,60);
HTTPЗапрос = Новый HTTPЗапрос("info/version");

Попытка
Ответ = Соединение.Получить(HTTPЗапрос);
Исключение
Сообщить("Нет соединения с УТМ");
Возврат;
КонецПопытки;

Если Ответ.КодСостояния = 200 Тогда
ВерсияУТМ = Ответ.ПолучитьТелоКакСтроку();
КонецЕсли;
Это вы описали подключение по веб, а меня интересует именно отправка/получение документов, получение списка документов из утм и т.д.
Вот создал я переменную типа строка. Многострочно загнал туда нужный мне xml документ. Как мне его засунуть в УТМ? Как получить на него ответ?

Инструкция по типовым документам не нужна и работа с XDTO тоже не нужна.
25.12.2024 16:51
Могу из 7.7 код показать, если это Вам как-то поможет...
Но, в 7.7 нет НТТР запросов своих, поэтому, там приходится "извращаться". В 8.Х - свои методы.
Но, принцип тот-же, он одинаков и для "извращений" 7.7, и для запросов 8.Х, и для CuRl из описания работы с УТМ от ФСРАР..

XML_DOM = ЗагрузитьDOM(УТМ_URL+"opt/out");

Функция ЗагрузитьDOM:

Функция ЗагрузитьDOM(URL,Вер = 1) Экспорт
Скрипт = СоздатьОбъект("MSScriptControl.ScriptControl");
Скрипт.language="vbscript";
Это = Скрипт.Eval("this");
Если Константа.ВсегдаИспользоватьCurl = 0 Тогда
WinHttp = СоздатьОбъект("WinHttp.WinHttpRequest.5.1");
Скрипт.AddObject("WinHttp",WinHttp);
WinHttp.Open("GET", URL, 0);
Попытка
WinHttp.Send();
Исключение
Сообщить("Служба УТМ не запущена, невозможно получить список входящих документов!");
Возврат "";
КонецПопытки;
Если WinHTTP.Status<>200 Тогда
Предупреждение("Не удалось загрузить документ. Возможно он удалён или служба УТМ не запущена.");
Возврат "";
КонецЕсли;
Стрим = СоздатьОбъект("ADODB.Stream");
Стрим.Mode = 3;
Стрим.Type = 1;
Стрим.Open();
Скрипт.AddObject("Stream",Стрим);
Размер = Скрипт.Eval("LenB(WinHttp.responseBody)");
Иначе
Стрим = СоздатьОбъект("ADODB.Stream");
Стрим.Mode = 3;
Стрим.Type = 1;
Стрим.Open();
Размер = 0;
КонецЕсли;
XML_DOM=CreateObject("MSXML2.DOMDocument.6.0");
WShell = СоздатьОбъект("WScript.Shell");
ВременнаяПапка = WShell.ExpandEnvironmentStrings("%TEMP%") + "";
ПутьВременногоФайла = ПолучитьИмяВременногоФайла(ВременнаяПапка);
Если (Размер > 570*1024) ИЛИ (Константа.ВсегдаИспользоватьCurl = 1) Тогда // 1С падает, если размер файла больше 570 Кб
Команда = "curl " + URL + " > " + ПутьВременногоФайла;
КодВозврата = WShell.Run("%COMSPEC% /C "+Команда, 0, 1);
Если КодВозврата <> 0 Тогда
Предупреждение("Невозможно получить XML-файл. Возможно не установлен cUrl.");
Сообщить("Пожалуйста, проверьте что УТМ запущен, а файл curl.exe ()
| скопирован в папку Windows.");
Возврат "";
КонецЕсли;
XML_DOM.Load(ПутьВременногоФайла);
ФС.УдалитьФайл(ПутьВременногоФайла);
Иначе
Скрипт.Eval("Stream.Write(WinHttp.responseBody)");
Стрим.Position = 0;
Стрим.Type = 2;
Стрим.Charset = "utf-8";
Ответ = Стрим.ReadText();
Стрим.Close();
XML_DOM.LoadXML(Ответ);
КонецЕсли;
XML_DOM.setProperty("SelectionLanguage", "XPath");
Попытка
nodDoc = XML_DOM.DocumentElement.selectSingleNode("/*");
ТабПреф.УдалитьСтроки(); // Очистим таблицу содержащуюся в глобальной переменной от предыдущих соответствий
ЗаполнитьТабПростИмен(nodDoc);
ТабПреф.Свернуть("СтПреф,НовПреф,URL","Сверт");
Если ТабПреф.КоличествоСтрок() > 0 Тогда
ТзСтПреф = ПолучитьТзСтандартныхПрефиксов();
StrNameSpase = "";
ТабПреф.ВыбратьСтроки();
Пока ТабПреф.ПолучитьСтроку() = 1 Цикл
СтрТЗСтПреф = "";
Если ТзСтПреф.НайтиЗначение(ТабПреф.URL, СтрТЗСтПреф,"URL") = 1 Тогда
ТабПреф.СтПреф = ТзСтПреф.ПолучитьЗначение(СтрТЗСтПреф,"СтПреф");
КонецЕсли;
ПрефNS = ТабПреф.НовПреф;
URLns = ТабПреф.URL;
ПрострИмен = " " + "xmlns:" + ПрефNS + "=" + "'" + URLns + "'";
StrNameSpase = StrNameSpase + ПрострИмен;
КонецЦикла;
StrNameSpase = СокрП(StrNameSpase);
Если СокрЛП(StrNameSpase) <> "" Тогда
XML_DOM.setProperty("SelectionNamespaces", StrNameSpase);
КонецЕсли;
КонецЕсли;
Исключение
XML_DOM = "";
КонецПопытки;
WinHttp = 0;
Возврат XML_DOM;
КонецФункции

Но, еще раз - это семерка... Тут все сложно, из-за того, что приходится придумывать, как обойти ее ограничения и добавить в нее то, чего изначально небыло... В восьмерке будет все проще, но, это сами разбирайтесь, я на восьмерке не пишу, точнее пишу, но очень ограничено.
25.12.2024 16:58
Тут у меня усложнение еще из-за того, что семерка падает при размере файла в ХМЛ DOM более 570 кб...
По началу было пофик, все равно ТТН меньше были, а потом, когда пошли новые марки, они быстренько вылезли за этот предел, и пришлось это добавлять.
Если меньше, через MS XML парсер работаю, если больше через CuRl.
Но, тут проблема в том, что я это все писал в далеком 2016 году, когда только ЕГАИС появился... Сейчас есть другие средства работы с НТТР из 1с77, у которых нет этих недостатков... Сейчас бы я делал по другому. Но переделывать - ленььььь... Работает - не мешай
25.12.2024 17:01
Цитата:
MWWRuza ТабПреф.УдалитьСтроки(); // Очистим таблицу содержащуюся в глобальной переменной от предыдущих соответствий
ЗаполнитьТабПростИмен(nodDoc);
Это тоже потом появилось, как защита от "извращенцев", применяющих "нестандартные" префиксы пространства имен в тегах XML.
По сути, на начальном этапе это не нужно.
25.12.2024 17:08
А вообще, не понимаю, зачем Вам в 8.3 это нужно? Что у Вас за конфигурация? Полностью самописка? Тогда, да...

А если нет - то зачем изобретать велосипед, в типовых конфах это все худо-бедно реализовано, с самого начала. Лучьше с их механизмами разобраться, может немного под себя переделать, чем писать сейчас что-то свое... Я еще понял бы в далеком 2016 году, когда типового не было или оно было в зачатке... А сейчас, бежать вслед уходящему поезду нет смысла.
25.12.2024 17:24
Цитата:
MWWRuza А если нет - то зачем изобретать велосипед, в типовых конфах это все худо-бедно реализовано
а вот хренас два ... 1С забыли реализовать запрос отчётов для общепита. Я им об этом сообщил в августе. Они до сих пор этого не сделали. У меня сейчас пошли списания по закрытым сезонным точкам и фсёёё ... ручками делать это очень больно.))

В принципе как работать с УТМ я понял - можно и простыми хттп обойтись, только остался вопрос как через этот хттп запихнуть xml в УТМ.
25.12.2024 17:39
Цитата:
FerroPanda 1С забыли реализовать запрос отчётов для общепита. Я им об этом сообщил в августе. Они до сих пор этого не сделали.
Ну, надо просто брать что-то похожее из этой-же конфы, и переделывать под нужное, отличие будет в запросе и его обработке, а сами механизмы останутся теми-же. Не писать-же заново все...
25.12.2024 17:58
Цитата:
MWWRuza Ну, надо просто брать что-то похожее из этой-же конфы
ну это вариант "отладчик в помощь" ... это резервный вариант. )))
Часовой пояс GMT +3, время: 07:57.

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