18.07.2017 11:49
AndreyZh
 
Привет Вячеслав! Конечно твоё письмо с вариантом решения сохранено.

Цитата:
FinSoft Что делать - переделать разбор xml с учетом пространства имен. Это не так сложно, всего 3 оператора вместо других, используемых для разбора по стандартным тэгам.
У меня в инструменте таких возможностей нет, а лишь для каждого "извращенца" делать таблицу соответствий имен и заниматься преобразованием исходного файла... или прогонять файл предварительно через "твой" сценарий.

Цитата:
FinSoft Мне, правда, тоже лениво. По стандартным тегам все хорошо работает, а тут надо все перепроверять заново. За все время был один случай с извратом от поставщика, его просто вежливо попросили переделать на стандартные тэги, что тот и сделал...
Не лениво! Просто не вижу необходимости подстраиваться под каждого программиста, который хочет показать своё величие. Так и с поставщиком... Заказали у других, а эти пусть считают убытки от ЧСВ своего программера

Что по вопросу... Глупая привычка спрашивать, когда сам нашел решение. Для "УСЕга" нужна накладная со всеми "потрохами", в том числе для разрешения проблем, описанных выше, а так же контроля цен, движения АП в разрезе справок, остатков на любой момент времени, подготовки отчетов для деклараций... Посему "преклоняться" перед маргиналами пока не можем

Однако не у всех так и некоторым "только подтверждающим ТТН" или сильно зависимым от поставщика... возможно и у нас такой "нарисуется" реализовал сервисный режим для любой программы работы с ЕГАИС:



В котором реализуется обычный совет: в блокноте наберите текст и отправьте курлом

Самое простое код ТТН и её версию узнать у поставщика, а можно в режиме "чистки запросов" посмотреть FORM2REGINFO для 2 версии или FORMBREGINFO для первой и там в тэге wbr:WBRegId есть код накладной.

Прога формирует и отправляет обычный ХМЛ файл:

Код:
<?xml version="1.0" encoding="UTF-8"?>
<ns:Documents Version="1.0" xmlns:ainp="http://fsrar.ru/WEGAIS/ActChargeOn_v2" xmlns:awr="http://fsrar.ru/WEGAIS/ActWriteOff_v2" xmlns:c="http://fsrar.ru/WEGAIS/Common" xmlns:ce="http://fsrar.ru/WEGAIS/CommonEnum" xmlns:iab="http://fsrar.ru/WEGAIS/ActInventoryF1F2Info" xmlns:ns="http://fsrar.ru/WEGAIS/WB_DOC_SINGLE_01" xmlns:oref="http://fsrar.ru/WEGAIS/ClientRef_v2" xmlns:pref="http://fsrar.ru/WEGAIS/ProductRef_v2" xmlns:qf="http://fsrar.ru/WEGAIS/QueryFormF1F2" xmlns:qp="http://fsrar.ru/WEGAIS/QueryParameters" xmlns:wa="http://fsrar.ru/WEGAIS/ActTTNSingle_v2" xmlns:wb="http://fsrar.ru/WEGAIS/TTNSingle_v2" xmlns:wt="http://fsrar.ru/WEGAIS/ConfirmTicket" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <ns:Owner>
      <ns:FSRAR_ID>030000113645</ns:FSRAR_ID>
   </ns:Owner>
   <ns:Document>
      <ns:WayBillAct_v2>
         <wa:Header>
            <wa:IsAccept>Rejected</wa:IsAccept>
            <wa:ACTNUMBER>20170718105424</wa:ACTNUMBER>
            <wa:ActDate>2017-07-18</wa:ActDate>
            <wa:WBRegId>TEST-TTN-0007542044</wa:WBRegId>
            <wa:Note>Пересортица всей продукции по накладной: TEST-TTN-0007542044</wa:Note>
         </wa:Header>
      </ns:WayBillAct_v2>
   </ns:Document>
</ns:Documents>


Кому интересно - исходный код процедуры:

Код:
   
* ---------------------------------------------------------------------------------------------------
*   Сервис по подтверждению или отказу на кривую приходную ТТН по её версии и коду в ЕГАИС. Актуально
*   для ТТН с кривым алиасами пространства имен, когда в режиме чистки запросов видим ТТН, но не 
*   можем обрабатывать, т.к. ориентация на стандартное пространство. Можно использовать, если не 
*   производится приёмка накладных или ТТН по пиву. Отличились Хайникен, Риф, Метро
/*  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


З.Ы. В принципе вариантов проблемных ТТН может быть огромное множество, пропускаемых по формальным признаком ЕГАИС, по этому данный подход видится более универсальным