Привет Вячеслав! Конечно твоё письмо с вариантом решения сохранено.
Цитата: FinSoft ➤ Что делать - переделать разбор xml с учетом пространства имен. Это не так сложно, всего 3 оператора вместо других, используемых для разбора по стандартным тэгам.
У меня в инструменте таких возможностей нет, а лишь для каждого "извращенца" делать таблицу соответствий имен и заниматься преобразованием исходного файла... или прогонять файл предварительно через "твой" сценарий.
Цитата: FinSoft ➤ Мне, правда, тоже лениво. По стандартным тегам все хорошо работает, а тут надо все перепроверять заново. За все время был один случай с извратом от поставщика, его просто вежливо попросили переделать на стандартные тэги, что тот и сделал...
Не лениво! Просто не вижу необходимости подстраиваться под каждого программиста, который хочет показать своё величие. Так и с поставщиком... Заказали у других, а эти пусть считают убытки от ЧСВ своего программера
Что по вопросу... Глупая привычка спрашивать, когда сам нашел решение. Для "УСЕга" нужна накладная со всеми "потрохами", в том числе для разрешения проблем, описанных выше, а так же контроля цен, движения АП в разрезе справок, остатков на любой момент времени, подготовки отчетов для деклараций...
Посему "преклоняться" перед маргиналами пока не можем
Однако не у всех так и некоторым "только подтверждающим ТТН" или сильно зависимым от поставщика... возможно и у нас такой "нарисуется"
реализовал сервисный режим для любой программы работы с ЕГАИС:
В котором реализуется обычный совет:
в блокноте наберите текст и отправьте курлом
Самое простое код ТТН и её версию узнать у поставщика, а можно в режиме "чистки запросов" посмотреть FORM2REGINFO для 2 версии или FORMBREGINFO для первой и там в тэге wbr:WBRegId есть код накладной.
Кому интересно - исходный код процедуры:
Код:
* ---------------------------------------------------------------------------------------------------
* Сервис по подтверждению или отказу на кривую приходную ТТН по её версии и коду в ЕГАИС. Актуально
* для ТТН с кривым алиасами пространства имен, когда в режиме чистки запросов видим ТТН, но не
* можем обрабатывать, т.к. ориентация на стандартное пространство. Можно использовать, если не
* производится приёмка накладных или ТТН по пиву. Отличились Хайникен, Риф, Метро
/* XML Структура акта подтверждения или отказа. Описание для двух версий
<?xml version="1.0" encoding="UTF-8"?>
<ns:Documents Version="1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns= "http://fsrar.ru/WEGAIS/WB_DOC_SINGLE_01" xmlns:oref="http://fsrar.ru/WEGAIS/ClientRef" xmlns:pref="http://fsrar.ru/WEGAIS/ProductRef" xmlns:wa= "http://fsrar.ru/WEGAIS/ActTTNSingle">
или для второй версии
<ns:Documents Version="1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns= "http://fsrar.ru/WEGAIS/WB_DOC_SINGLE_01" xmlns:oref="http://fsrar.ru/WEGAIS/ClientRef" xmlns:pref="http://fsrar.ru/WEGAIS/ProductRef" xmlns:wa= "http://fsrar.ru/WEGAIS/ActTTNSingle_v2"
<ns:Owner> <ns:FSRAR_ID>00072841</ns:FSRAR_ID> </ns:Owner>
<ns:Document>
<ns:WayBillAct> или <ns:WayBillAct_v2>
<wa:Header>
<wa:IsAccept>Rejected-отказ или >Accepted</wa:IsAccept>
<wa:ACTNUMBER>1-1</wa:ACTNUMBER>
<wa:ActDate>2014-12-17</wa:ActDate>
<wa:WBRegId>0000002167</wa:WBRegId>
<wa:Note> Пересортица всей продукции ИЛИ Приниаем продукцию</wa:Note>
</wa:Header>
<wa:Content> </wa:Content>
</ns:WayBillAct> или </ns:WayBillAct_v2>
</ns:Document>
</ns:Documents>
*/
PROC pRepTTNAct()
LOCA cOldCol:=SetColor(), GetList:={}, cRegTTN:=Spac(20), nAction:=1, nVer:=2
LOCA cNumbAct:=Dtos(Date())+StrTran(Time(),":"), dDatAct:=Date(), lRash:=FALSE
LOCA cTag:="", cNode:="", cOut:="", cXml:=""
LOCA cIdZap:="", cZap:="", cZapOut:="", cZ:="", aBody:={}
LOCA oMain, oDoc := TXmlDocument():new( _XMLUTF8 )
// Читаем код регистрации ТТН - можно из режима чистки запросов, форму реакцию (прием/отказ) и версию по которой отправлять акт
fSwopen(19,3,4,75,cColor,2)
@ 1,1 SAY "Пожалуйста введите id ТТН поставщика (TTN-0000000000)" GET cRegTTN PICT "@!" VALI lValid({||!Empty(cRegTTN)},"Запрешено пустой код регистрации! Для отказа нажмите Esc!")
@ 2,1 SAY "Какой вид акта отправляем? 1-Полного приёма, 2-Полного отказа от АП ТТН " GET nAction PICT "9"
@ 3,1 SAY "По какой версии 1/2 делать акт на накладную (WayBill_v2-ТТН v2,иначе v1)" GET nVer PICT "9"
READ
fDeact(cOldCol)
IF LastKey() == K_ESC THEN RETU
//*** Отсылка акта на накладную - просто отправляю без контроля его прохождения через ЕГАИС... Можно увидеть по тикетам
cRegTTN := Alltrim(cRegTTN)
cNode :=IF(nAction=1,'Принимаем продукцию','Пересортица всей продукции')+' по накладной: '+cRegTTN
IF nVer = 1 // v1
cTag := "ns:WayBillAct"
cXml := "TTNAct_v1.xml"
cOut := "WayBillAct"
ELSE // v2
cTag := "ns:WayBillAct_v2"
cXml := "TTNAct_v2.xml"
cOut := "WayBillAct_v2"
ENDI
// Создаём главный - первый XML узел (node). Добавляем в корень дерева
oMain := IF(nVer=1,_DOCUMENTS,_DOCUMENTS2)
oDoc:oRoot:addBelow( oMain )
// Создаю тело запроса используя универсальный блок из enewfunc
aBody := {{"wa:IsAccept", IF(nAction = 1,"Accepted","Rejected")},; // Подтверждение или отказ
{"wa:ACTNUMBER", cNumbAct},; // Уникальный фиктивный номер
{"wa:ActDate", cdEGAIS(dDatAct)},; // Дата в формате ЕГАИС
{"wa:WBRegId", cRegTTN},; // Код ТТН, по которой отсылаем акт
{"wa:Note", cNode}} // Произвольный текст в акте
pCrBodyReg( oMain,cTag,"wa:Header",aBody )
// Создаю XML файл запроса через универсальный блок из enewfunc
pCrFileReq( oDoc, cXml)
// Отправляю исходящий запрос используя вызов внешней команды и универсальный блок из enewfunc
IF !lSndToEgais(cXml,cOut,@cIdZap,@cZap) THEN RETU
ErrMess("Отправлено "+IF(nAction=1,"подтверждение","отказ")+" на ТТН поставщика с кодом "+cRegTTN,cHelpc)
RETU
З.Ы. В принципе вариантов проблемных ТТН может быть огромное множество, пропускаемых по формальным признаком ЕГАИС, по этому данный подход видится более универсальным