FinSoft➤ Кстати, Андрей, ты разбирался с печатными формами для возвратов и перемещений между магазинами? Я так понимаю, там нужны стандартные Торг12, ТТН и справка формы Б?
Сегодня какой-то глюк, похоже, в Егаис проявился.
Делаем перемещение продукции между своими магазинами. Подтверждаем. Все нормально, позиции списались с остатков одного магазина, появились на остатках второго.
Затем во втором магазине шлем запрос на отмену накладной. В первом подтверждаем. В обоих магазинах получаем тикеты, что накладная распроведена. Запрашиваю остатки на 1 регистре. Во втором магазине продукция с остатков ушла. А в первом не появилась... Шлю повторный запрос остатков, Егаис говорит приходите через час. Хорошо, что пробная накладная с 2 позициями. Если на остатках в первом магазине продукция не появится, что тогда делать...
Сорри, разобрался. Отмена накладной приводит систему в состояние на момент подтверждения приема. То есть надо подтвердить/отказать/послать акт расхождений. Все нормально отработало...
Новая, но очень старая напасть объявилась в ЕГАИСе...
Всё это подробно обсуждалось в 2015 году - алиасы пространства имен, но вот с введением второй версии некоторых "свежих" программистов для ЕГАИС прорвало на извращения. Примеры таких чудиков:
<ns39:Consignee>
<ns17:UL>
<ns17:ClientRegId>020000616195</ns17:ClientRegId>
<ns17:FullName>Общество с ограниченной ответственностью Пилигрим</ns17:FullName>
Ссылка из письма была от Саратовского программиста:
Который так же извратился, но мы перестали брать у них товар... Руководство его трамбует, а он меня - типа всё очень легко мне переделать в программе... Пример его изврата:
<oref2:address>
<oref2:Country>643</oref2:Country>
<oref2:RegionCode>64</oref2:RegionCode>
<oref2:description>Саратовская обл, , Саратов г, , Вольская ул, 57,,</oref2:description>
</oref2:address>
</oref2:UL>
</wb2:Consignee>
<wb2:Transport/>
</wb2:Header>
<wb2:Content xmlns:wb2="http://fsrar.ru/WEGAIS/TTNSingle_v2">
<wb2:Position>
<wb2:Identity>01_6713</wb2:Identity>
<wb2:Quantity>2</wb2:Quantity>
<wb2:Price>819.52</wb2:Price>
<wb2:InformF1>
<pref2:RegId xmlns:pref2="http://fsrar.ru/WEGAIS/ProductRef_v2">FA-000000036172128</pref2:RegId>
</wb2:InformF1>
<wb2:InformF2>
<pref2:InformF2Item xmlns:pref2="http://fsrar.ru/WEGAIS/ProductRef_v2">
<pref2:F2RegId>FB-000000942827123</pref2:F2RegId>
</pref2:InformF2Item>
</wb2:InformF2>
<wb2:Product>
<pref2:AlcCode xmlns:pref2="http://fsrar.ru/WEGAIS/ProductRef_v2">0350397000001378839</pref2:AlcCode>
<pref2:ProductVCode xmlns:pref2="http://fsrar.ru/WEGAIS/ProductRef_v2">229</pref2:ProductVCode>
<pref2:FullName xmlns:pref2="http://fsrar.ru/WEGAIS/ProductRef_v2">Армянский коньяк пятилетний "АрАрАт *****"</pref2:FullName>
<pref2:Capacity xmlns:pref2="http://fsrar.ru/WEGAIS/ProductRef_v2">0.5</pref2:Capacity>
<pref2:AlcVolume xmlns:pref2="http://fsrar.ru/WEGAIS/ProductRef_v2">40</pref2:AlcVolume>
<pref2:Type xmlns:pref2="http://fsrar.ru/WEGAIS/ProductRef_v2">АП</pref2:Type>
<pref2:UnitType xmlns:pref2="http://fsrar.ru/WEGAIS/ProductRef_v2">Packed</pref2:UnitType>
<pref2:Producer xmlns:pref2="http://fsrar.ru/WEGAIS/ProductRef_v2">
<oref2:TS xmlns:oref2="http://fsrar.ru/WEGAIS/ClientRef_v2">
<oref2:ClientRegId>050000030065</oref2:ClientRegId>
<oref2:FullName>ЗАО "Ереванский Коньячный Завод"</oref2:FullName>
<oref2:ShortName>ЗАО "Е.К.З"</oref2:ShortName>
<oref2:address>
<oref2:Country>051</oref2:Country>
<oref2:description>Армения, 0082, г. Ереван, проспект Адмирала Исакова, 2</oref2:description>
</oref2:address>
</oref2:TS>
</pref2:Producer>
</wb2:Product>
До кучи пример накладной на которую спотыкается любая прога на платформе 1С:
Здесь используют новые необязательные тэги, которые не могут пропустить многие программы.
Так же обнаружилась чудная особенность "1С:Розница"
Версия документооборота задаётся в справочнике контрагентов и если от поставщика "болтаются" накладные по v1 и v2, то (решение) ставим ему v1 - подтверждаем эти ТТН, проверяя прохождение, затем изменяем на v2 и подтверждаем другие ТТН... а накладные в разных версиях, учитывая просторы России будут ходить ещё долго
Сразу отмечу, что "УС Лэнд:ЕГАИС" не понимает и не видит данные чудные документы. Ответы спецов на форумах стандартные:
Цитата:
Технически, пространство имен в xml-файле может быть любое.
Привет, Андрей.
Помнишь, я тебя предупреждал...
Что делать - переделать разбор xml с учетом пространства имен. Это не так сложно, всего 3 оператора вместо других, используемых для разбора по стандартным тэгам. Мне, правда, тоже лениво. По стандартным тегам все хорошо работает, а тут надо все перепроверять заново. За все время был один случай с извратом от поставщика, его просто вежливо попросили переделать на стандартные тэги, что тот и сделал...
Привет Вячеслав! Конечно твоё письмо с вариантом решения сохранено.
Цитата:
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
З.Ы. В принципе вариантов проблемных ТТН может быть огромное множество, пропускаемых по формальным признаком ЕГАИС, по этому данный подход видится более универсальным
Андрей, я из своих программ генерю скрипт на vbscript и разбираю xml им. Вывод результата в обычный текстовый файл. Его и забираю. Поскольку оформлено через класс, в программе всего несколько строчек. Главное, дать имена в принимающей структуре, соответствующие тэгам. В принципе, мне переделать на произвольные префиксы не проблема. В программе практически ничего не меняется. Ты тоже можешь задействовать такой подход. Создавать и загружать простые текстовые файлы можно из любого инструмента. Я для локальных целей использую генерацию vbscript, для всяких онлайн задач дергаю библиотеку на php на своем сайте. Получается малой кровью расширить функциональность инструмента. А примеров решения разных задач на vbscript и php много. И ничего специально не надо устанавливать...
Но знать "религия не позволяет" запустить её тестовый режим для диагностики проблем - гораздо "конструктивнее" воспрошать на форумах в попытках услышать очевидный ответ
Ну а подарок за что? Так же человек, работающий с "УСЕга", как с утилитой для "1С:Розница" попросил взглянуть... что то "1С" выдаёт ошибки, а программист 1С утверждает, что прога "1С:Розница" работает без проблем...
Запустили сервис "УСЕга" и он показал постоянные проблемы работы УТМ... Влезли на форумы ФСРАР и ЦИ, где это подтвердилось... то есть ни их программист, ни одноэска не виноваты!