07.03.2018 11:57
AndreyZh
 
Цитата:
Mtirt Стоп. Я указывала марки.
У Вас ошибки... или используете нестандартные алиасы пространства имен. По мануалу:
Код:
 <wb:InformF2> 
 <ce:F2RegId>FB-00012122</ce:F2RegId> 
 <ce:MarkInfo> 
 <ce:boxpos> 
 <ce:boxnumber>box-00112</ce:boxnumber> 
 <ce:amclist> 
<ce:amc>22N000008XSG44YGEUT0P7T70424001006364JZKW012VT5XOLTCW4IJ9VGEOP44FTBX1</ce:amc> 
<ce:amc>22N000008XSG44YGEUT0P7T70424001006364JZKW012VT5XOLTCW4IJ9VGEOP44FTBX2</ce:amc> 
 </ce:amclist> 
 </ce:boxpos> 
 <ce:boxpos> 
 <ce:boxnumber>box-00113</ce:boxnumber> 
<ce:amclist> 

<ce:amc>22N000008XSG44YGEUT0P7T70424001006364JZKW012VT5XOLTCW4IJ9VGEOP44FTBX3</ce:amc> 

<ce:amc>22N000008XSG44YGEUT0P7T70424001006364JZKW012VT5XOLTCW4IJ9VGEOP44FTBX4</ce:amc> 

<ce:amc>22N000008XSG44YGEUT0P7T70424001006364JZKW012VT5XOLTCW4IJ9VGEOP44FTBX5</ce:amc> 
 </ce:amclist> 
 </ce:boxpos> 
 </ce:MarkInfo> 
 </wb:InformF2>
07.03.2018 18:26
MWWRuza
 
Ну, в принципе, это не ошибка... Такое будет встречаться частенько. Мне попалась ТТН, первая-же, как только попросил v3 протестировать, с нестандартными префиксами.
Пришлось переделывать парсинг ТТН в программе. Написал глобальную функцию, которая из самой ТТН, из заголовка, где объявляются пространства имен, вытаскивает используемые в ней префиксы и возвращает соответствие стандартным. Стандартные получаю, распарсив файл схем из УТМ. Соответствие определяю по URL. Несколько сложновато получилось, но, зато теперь "жрет, все что дали".

PS Только имейте в виду, что не всегда пространства имен только в заголовке файла объявляются, в некоторых документах перед каждой строкой в теле файла. Это надо учитывать при написании функции "соответствия извращенных префиксов стандартным".
08.03.2018 10:11
AndreyZh
 
Цитата:
MWWRuza Ну, в принципе, это не ошибка... Такое будет встречаться частенько... Пришлось переделывать парсинг ТТН в программе...
Поздравляю! Однако замечу, что и я высказал данное предположение "ошибки... или используете нестандартные алиасы пространства имен"

Однако вопрос, скорее философского плана:

1. Первый разработчик (Алкоформатера), который прогнулся перед извращенцами, первый же и закрыл свой тиражный проект, кинув сотни пользователей... Они просто не оценили его потуги!

2. Конечно, мы, как программисты хотим показать свою крутизну и креативность, а на бизнес, в данном случае "поставщики", который от этого страдает нам по сути ... Пример: недавно один из поставщиков прислал такое же извращение, ну и был директором послан "лесом", т.к. альтернативные поставщики стоят в очереди

P.S. В своем бесплатном проекте "УС Лэнд:ЕГАИС" не собираюсь радикально усложнять его в угоду "программистам-извращенцам" и без них ФСРАР напридумывал логику бизнес-процессов, которые не понимаются пользователями

P.P.S. Обратил внимание, что разработчики платных решений всюду упоминают о своих крутых решениях, но крайне редко, хоть как-то реально, даже по мелочи помогают юзверам...
08.03.2018 12:05
MWWRuza
 
Андрей... А зачем такая агрессия?
Я просто сказал свое мнение, и поделился принципом, как я у себя это решил...
Делать Вам так, или нет - Ваше дело. А бороться с "программистами-извращенцами", я все-таки решил на своей стороне. Так, как формально они ничего не нарушают, используя не стандартные префиксы. В своих алгоритмах, я категорически не буду использовать не стандартные префиксы в возвратных(у меня только розница, поэтому других не может быть) ТТН. Под третью версию я пока возвраты не делал, вопрос ближайшего будущего, пока сделано только на прием.
Это усложнение программы, для пользователей прозрачно. Просто принимаются все ТТН, с любыми префиксами, и все... Никакого усложнения бизнес-процессов, конечные пользователи вообще ничего не знают о префиксах, стандартнве они там или нет...

PS А по поводу бесплатной помощи... Мое решение не тиражное, есть десяток фирм, в которых я его поддерживаю и развиваю, естественно, получая за это деньги. Этим и живу, это моя основная работа, мне зарплату никто не платит на какой-то фирме. Если кого-то заинтересовал алгоритм обработки не стандартных префиксов в моей разработке - я готов выложить фрагменты кода(1с7.7), которые этим занимаются. Если это кому-то нужно... Не жалко.
08.03.2018 13:46
AndreyZh
 
Цитата:
MWWRuza Андрей... А зачем такая агрессия?
Извини!!!

Просто с утра вдоволь позанимавшись секасом с "нюансами" ЕГАИС захотел их описать для all, но наткнувшись на твое сообщение - расхотелось... Однако возникло желание поворчать - не получилось... Ещё раз извини
08.03.2018 14:06
MWWRuza
 
Принято...
Жену поздравь с 8-ым марта, от всех коллег по "несчастью"

PS Кстати, раз уж представилось, Татьяну(Mtirt), как участницу этой ветки, и вообще, всех женщин, так или иначе читающих наш форум - С ПРАЗДНИКОМ!!!
08.03.2018 15:09
MWWRuza
 
Цитата:
MWWRuza я готов выложить фрагменты кода(1с7.7), которые этим занимаются
Вот:

В глобальном модуле:

Объявляется переменная:
Перем ТабПреф Экспорт; // Влад 08.12.2017 Таблица соответствия префиксов от "извращенцев" стандартным префиксам

В теле самого модуля, в конце, вне процедур:
// 08.12.2017 инициализация таблицы для работы с нестандартными префиксами от "извращенцев"
ТабПреф = СоздатьОбъект("ТаблицаЗначений");
ТабПреф.НоваяКолонка("СтПреф");
ТабПреф.НоваяКолонка("НовПреф");
ТабПреф.НоваяКолонка("URL");
ТабПреф.НоваяКолонка("Сверт");
// Влад

Процедуры и функции глобального модуля:
Функция ПолучитьТзСтандартныхПрефиксов()
ТЗ = СоздатьОбъект("ТаблицаЗначений");
ТЗ.НоваяКолонка("СтПреф");
ТЗ.НоваяКолонка("URL");
ОП = глЗначениеПоУмолчанию("ОсновнаяФирма").ЮрЛицо;
УТМ_URL = СокрЛП(ОП.УТМ_URL);
URL = УТМ_URL + "info/xsdWholesale/WEGAIS/WB_DOC_SINGLE_01.xsd"; // URL Схемы документов XSD
Скрипт = СоздатьОбъект("MSScriptControl.ScriptControl");
Скрипт.language="vbscript";
Это = Скрипт.Eval("this");
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",Стрим);
XML_DOM=CreateObject("MSXML2.DOMDocument.6.0");
Скрипт.Eval("Stream.Write(WinHttp.responseBody)");
Стрим.Position = 0;
Стрим.Type = 2;
Стрим.Charset = "utf-8";
Ответ = Стрим.ReadText();
Стрим.Close();
НачТела = Найти(Ответ,"<pre>");
Ответ = Сред(Ответ,НачТела);
КонТела = Найти(Ответ,"</pre>") + 5;
Ответ = Лев(Ответ,КонТела);
XML_DOM.LoadXML(Ответ);
NamRootNodSchem = XML_DOM.DocumentElement.selectSingleNode("/*").NodeName;
СтрСхем = XML_DOM.selectSingleNode(NamRootNodSchem).text;
Пока Найти(СтрСхем,"xmlns:") > 0 Цикл
ОстСтр = Сред(СтрСхем,Найти(СтрСхем,"xmlns:") + 6);
НачАдреса = Найти(ОстСтр,"=");
ТекПреф = Лев(ОстСтр,НачАдреса - 1);
ТекПреф = СтрЗаменить(ТекПреф,"2","");
ТекПреф = СтрЗаменить(ТекПреф,"3","");
ОстСтр = Сред(ОстСтр,НачАдреса + 2);
КонАдреса = Найти(ОстСтр,"""") - 1;
ТекАдрес = Сред(ОстСтр,1,КонАдреса);
СтрСхем = ОстСтр;
ТЗ.НоваяСтрока();
ТЗ.СтПреф = ТекПреф;
ТЗ.URL = ТекАдрес;
КонецЦикла;
ТЗ.Сортировать("СтПреф, URL");
Возврат ТЗ;
КонецФункции

Функция ТекПреф(СтПр) Экспорт
ТекСтрСоот = "";
ТекПреф = "";
Если ТабПреф.НайтиЗначение(СтПр,ТекСтрСоот,"СтПреф") = 1 Тогда
ТекПреф = ТабПреф.ПолучитьЗначение(ТекСтрСоот,"НовПреф");
КонецЕсли;
Возврат ТекПреф;
КонецФункции

Процедура ЗаполнитьТабПростИмен(nod) // Рекурсивная процедура, пробегает по всему DOM и вытаскивает из него прециксы и URL_NS в ТЗ.
ИмяПреф = nod.prefix;
URL_NS = nod.namespaceURI;
Если СокрЛП(ИмяПреф) <> "" Тогда
ТабПреф.НоваяСтрока();
ТабПреф.НовПреф = ИмяПреф;
ТабПреф.URL = URL_NS;
ТабПреф.Сверт = 1;
КонецЕсли;
node = nod.childNodes;
Ind = 0;
Для Ind = 1 По node.Length Цикл
ChildNod = node.item(ind - 1);
ИмяПреф = ChildNod.prefix;
URL_NS = ChildNod.namespaceURI;
Если СокрЛП(ИмяПреф) <> "" Тогда
ТабПреф.НоваяСтрока();
ТабПреф.НовПреф = ИмяПреф;
ТабПреф.URL = URL_NS;
ТабПреф.Сверт = 1;
КонецЕсли;
ЗаполнитьТабПростИмен(ChildNod);
КонецЦикла;
КонецПроцедуры

Во всех остальных модулях, где нужно получить что-либо из файла XML:
Например:
DocumentNode = XML_DOM.selectSingleNode("/" + ТекПреф("ns") + ":Documents/" + ТекПреф("ns") + ":Document").firstChild;

Вызывается функция ТекПреф("СтПреф"), где "СтПреф" - стандартный префикс, который ожидается на этом месте, из мануала. Функция возвращает соответствующий ему "извращенный", из заголовка файла, где объявляются пространства имен.
В результате, префиксы могут быть любыми, но, по правилам языка XML они должны быть объявлены, вместе с URL пространств имен.
08.03.2018 16:00
MWWRuza
 
Уточню... Процедура: ЗаполнитьТабПростИмен(nodDoc); вызывается из экспортной функции Функция ЗагрузитьDOM(URL,Вер = 1) Экспорт
вот так:
XML_DOM.setProperty("SelectionLanguage", "XPath");
nodDoc = XML_DOM.DocumentElement.selectSingleNode("/*");
ТабПреф.УдалитьСтроки(); // Очистим таблицу содержащуюся в глобальной переменной от предыдущих соответствий
ЗаполнитьТабПростИмен(nodDoc);
09.03.2018 14:56
MWWRuza
 
Во блин... Перехвастался по ходу... Только что, позвонили клиенты, типа "одна накладная не грузится" :(
Стал разбираться, все там грузится, в лучшем виде... Но, контрагент "Невский берег", почему-то решил отгрузить продукцию с другого ОП. А это ОП, у моего клиента встретилось первый раз. И все бы ничего, но, почему-то, они решили использовать в XML, в описании отправителя префикс вместо "oref", "oref2" - ну, нафига???
А я, в этом месте, где создается новое ОП, забыл поменять в тексте программы префикс "oref" на функцию ТекПреф("oref")... Пришлось, срочно менять, с помощью опции "Поиск и замена", "oref" на конструкцию " + ТекПреф("oref") + ".
Ну, сам виноват, пропустил... Пять минут работы, и все в порядке.
Это я к тому, что не стандартные префиксы могут в любой момент прилететь... Что-ж, отказываться от таких ТТН-?
18.03.2018 02:27
tarakan
 
Коллеги, БОЛЬШАЯ ПРОСЬБА, пожалуйста - коробки/дерево коробок/марки в разных сочетаниях. Несколько ТТН.
FSRAR_ID - 020000616195.
Очень благодарен.
P.S. Скорее всего с этого форума отправили мне всего 1 тестовую ТТН. ClientRegId - 030000113645. Очень благодарен этому ЧЕЛОВЕКУ. Она у меня одна одинешенька, я её заездил до дыр.

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