ACT20001 — различия между версиями
Материал из Фабиус wiki
Hisava (обсуждение | вклад) м |
Hisava (обсуждение | вклад) м (→CTRL + F10 вЕГАИС ( Отправить акт списания в ЕГАИС )) |
||
Строка 81: | Строка 81: | ||
// ActChargeOnShop_v2 | // ActChargeOnShop_v2 | ||
+ | = CTRL + F6 ДобОст = | ||
+ | local local_host, utm_port, aa, path, doc, node, child_node_count, msg, fld, _, sql, out_shop, max_num | ||
+ | |||
+ | path := Nice_path( TempPath ) | ||
+ | utm_port := GetPrm( 'UTM_PORT', TaskName, TaskNum ) | ||
+ | local_host := GetPrm( 'UTM_IP_ADD', TaskName, TaskNum ) | ||
+ | |||
+ | if !YesNo( "Вы действительно хотите добавить остатки продукции ?", false ) | ||
+ | return | ||
+ | endif | ||
+ | |||
+ | // если нет товарного отчета - запрет добавления остатков | ||
+ | sql := [ Select SHIFT From REPS] + RET_F_EXT() + [ Where SHIFT = '] + DTOS( DOCS1->DATDOC ) + [1' and ; | ||
+ | CODEGRP = '2201' and REFL1 = 'R20 ' and ANAL1 = ] + DOCS1->KANAL1 | ||
+ | aa := SQLTOARR( sql ) | ||
+ | if EMPTY( aa ) | ||
+ | MESSAGE( 'Не найден товарный отчет за ' + DOCS1->DATDOC + '. Пожалуйста, сформируйте отчет' ) | ||
+ | return | ||
+ | endif | ||
+ | |||
+ | fld := ' _1,C,100; _2,N,5; ' | ||
+ | |||
+ | try | ||
+ | msg := WaitMsg( 'Обработка данных' ) | ||
+ | out_shop := CreateTmpFile( fld, 'out_shop', ~IsFreeDel := true ) | ||
+ | |||
+ | // входящие сообщения | ||
+ | aa := IdHttpGet( local_host + ':' + utm_port + '/opt/out' ) | ||
+ | WriteTxtFile( { aa }, 'out.xml', path, true ) | ||
+ | |||
+ | doc := XMLDocument( path + 'out.xml' ) | ||
+ | node := xmlNode( doc ) | ||
+ | child_node_count := XmlNodeProp( node, "ChildNodeCount" ) | ||
+ | while child_node_count > 0 | ||
+ | child_node_count := child_node_count - 1 | ||
+ | aa := XmlNodeProp( XmlNodeProp( node, "ChildNodes", child_node_count ), "NODEVALUE" ) | ||
+ | if at( 'ReplyRestsShop', aa ) > 0 | ||
+ | ( out_shop )->( DbAppend() ) | ||
+ | ( out_shop )->_1 := aa | ||
+ | ( out_shop )->_2 := val( Right( aa, Len( aa ) - Rat( '/', aa ) ) ) | ||
+ | endif | ||
+ | end | ||
+ | |||
+ | sql := [ Select MAX( _2 ) From ] + TmpFilePath( out_shop ) | ||
+ | max_num := SqlToArr( sql ) | ||
+ | |||
+ | sql := [ Select _1 From ] + TmpFilePath( out_shop ) + [ Where _2 = ] + max_num | ||
+ | aa := SqlToArr( sql ) | ||
+ | aa := Right( aa, Len( aa ) - at( 'http', aa ) - 6 ) | ||
+ | aa := IdHttpGet( aa ) | ||
+ | WriteTxtFile( { aa }, 'out.xml', path, true ) | ||
+ | finally | ||
+ | CloseTable( out_shop ) | ||
+ | HideMsg( msg ) | ||
+ | end | ||
+ | |||
+ | // _1 http адрес ссобщения | ||
+ | // _2 номер сообщения | ||
+ | |||
+ | // Получены остатки из ЕГАИС на дату и время | ||
+ | DOCS1->D2NAME := StrTran( FIELD_FROM_XML( aa, 'RestsDate', 'rst' ), 'T', ' ' ) | ||
+ | |||
+ | fld := ' _1,C,19; _2,C,200; _3,N,6,4; _4,N,6,3; _5,C,3; _6,N,14,4; _7,C,12; _8,C,200;; | ||
+ | _9,C,100; _10,C,10; _11,C,9; _12,N,3; _13,C,100; ' | ||
+ | |||
+ | try | ||
+ | msg := WaitMsg( 'Анализ данных' ) | ||
+ | _ := CreateTmpFile( fld, '_', ~IsFreeDel := true ) | ||
+ | aa := Copy( aa, at( "<rst:Products>", aa ) + len( "<rst:Products>" ), len( aa ) ) | ||
+ | |||
+ | while !Empty( at( "<rst:ShopPosition", aa ) ) | ||
+ | ( _ )->( DbAppend() ) | ||
+ | ( _ )->_1 := FIELD_FROM_XML( aa, 'AlcCode' ) | ||
+ | ( _ )->_2 := Left( FIELD_FROM_XML( aa, 'FullName' ), 200 ) | ||
+ | ( _ )->_3 := FIELD_FROM_XML( aa, 'Capacity' ) | ||
+ | ( _ )->_4 := FIELD_FROM_XML( aa, 'AlcVolume' ) | ||
+ | ( _ )->_5 := FIELD_FROM_XML( aa, 'ProductVCode' ) | ||
+ | ( _ )->_6 := FIELD_FROM_XML( aa, 'Quantity', 'rst' ) | ||
+ | ( _ )->_7 := FIELD_FROM_XML( aa, 'ClientRegId', 'oref' ) | ||
+ | ( _ )->_8 := Left( FIELD_FROM_XML( aa, 'FullName', 'oref' ), 200 ) | ||
+ | ( _ )->_9 := Left( FIELD_FROM_XML( aa, 'ShortName', 'oref' ), 100 ) | ||
+ | ( _ )->_10 := Left( FIELD_FROM_XML( aa, 'INN', 'oref' ), 10 ) | ||
+ | ( _ )->_11 := Left( FIELD_FROM_XML( aa, 'KPP', 'oref' ), 9 ) | ||
+ | ( _ )->_12 := FIELD_FROM_XML( aa, 'RegionCode', 'oref' ) | ||
+ | ( _ )->_13 := Left( FIELD_FROM_XML( aa, 'description', 'oref' ), 100 ) | ||
+ | |||
+ | aa := Copy( aa, at( "</rst:ShopPosition>", aa ) + len( "</rst:ShopPosition>" ), len( aa ) ) | ||
+ | end | ||
+ | |||
+ | fld := { 'D1NAME', 'K2NAME', 'AMNT', 'NATTR1', 'NATTR2', 'NATTR3', 'CLIENT_REG',; | ||
+ | 'OREF_NAME', 'OREF_SHORT', 'INN', 'KPP', 'REGIONCODE', 'SCRIPT' } | ||
+ | sql := [ Select _1 D1NAME, _2 K2NAME, _6 AMNT, _3 NATTR1, _4 NATTR2, _5 NATTR3,; | ||
+ | _7 CLIENT_REG, _8 OREF_NAME, _9 OREF_SHORT, _10 INN, _11 KPP, _12 REGIONCODE, _13 SCRIPT From ] + TmpFilePath( _ ) | ||
+ | // + [ ; | ||
+ | // Where _1 = '0015822000001256904' ] | ||
+ | aa := SqlToArr( sql, fld ) | ||
+ | finally | ||
+ | CloseTable( _ ) | ||
+ | HideMsg( msg ) | ||
+ | end | ||
+ | |||
+ | if !IsEmpty( aa ) | ||
+ | AddAll( 'ACT', '2', DOCS1->RGNUM,, fld, aa ) | ||
+ | endif | ||
+ | |||
+ | // _1 код ЕГАИС | ||
+ | // _2 наименование | ||
+ | // _3 емкость | ||
+ | // _4 крепость | ||
+ | // _5 группа | ||
+ | // _6 остаток | ||
+ | // _7 ClientRegId | ||
+ | // _8 OREF_NAME | ||
= CTRL + F10 вЕГАИС ( Отправить акт списания в ЕГАИС ) = | = CTRL + F10 вЕГАИС ( Отправить акт списания в ЕГАИС ) = | ||
Версия 08:18, 20 июня 2018
ACT20001 - это представление документа ACT
Содержание
CTRL + F1 Баланс ( Отправить "Акт постановки на баланс в торговом зале" )
if NATTR4 <= AMNT return // NATTR4 - это остаток в фабиусе, AMNT - это остаток в ЕГАИС endif // т.е. остаток в фабиусе БОЛЬШЕ чем в ЕГАИС, значит надо делать акт постановки на баланс if !YesNo( 'Вы уверены, что хотите отправить "Акт постановки на баланс в торговом зале" ?', false ) return endif local aa, fs_rar_id, ip, port, path fs_rar_id := GETPRM( 'FSRAR_ID', taskname, tasknum ) ip := GETPRM( 'UTM_IP_ADD', taskname, tasknum ) port := GETPRM( 'UTM_PORT', taskname, tasknum ) path := NICE_PATH( temppath ) aa := [<?xml version="1.0" encoding="UTF-8"?>] + Chr( 13 ) + Chr( 10 ) aa := aa + [<ns:Documents Version="2.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_v2" ; xmlns:pref="http:/] + [/fsrar.ru/WEGAIS/ProductRef_v2" ; xmlns:ainp="http:/] + [/fsrar.ru/WEGAIS/ActChargeOnShop_v2" ; xmlns:ce="http:/] + [/fsrar.ru/WEGAIS/CommonEnum"> ; <ns:Owner> ; <ns:FSRAR_ID>] + atr( fs_rar_id ) + [</ns:FSRAR_ID> ; </ns:Owner> ; <ns:Document> ; <ns:ActChargeOnShop_v2> ; <ainp:Identity>] + AUTOID + [</ainp:Identity> ; <ainp:Header> ; <ainp:ActDate>] + SQLDATE( DOCS1->DATDOC ) + [</ainp:ActDate> ; <ainp:Number>] + atr( DOCS1->NUMDOC ) +'-'+DANAL1+ [</ainp:Number> ; <ainp:TypeChargeOn>Излишки</ainp:TypeChargeOn> ; <ainp:Note>Излишки</ainp:Note> ; </ainp:Header> ; <ainp:Content> ; <ainp:Position> ; <ainp:Identity>1</ainp:Identity> ; <ainp:Product> ; <pref:UnitType>Packed</pref:UnitType> ; <pref:Type>АП</pref:Type> ; <pref:FullName>] + atr( K2NAME ) + [</pref:FullName> ; <pref:AlcCode>] + atr( D1NAME ) + [</pref:AlcCode> ; <pref:Capacity>] + StrTran( str( NATTR1 ), ',', '.' ) + [</pref:Capacity> ; <pref:Producer> ; <oref:UL> ; <oref:ClientRegId>] + atr( CLIENT_REG ) + [</oref:ClientRegId> ; <oref:FullName>] + atr( OREF_NAME ) + [</oref:FullName> ; <oref:ShortName>] + atr( OREF_SHORT ) + [</oref:ShortName> ; <oref:INN>] + INN + [</oref:INN> ; <oref:KPP>] + KPP + [</oref:KPP> ; <oref:address> ; <oref:Country>643</oref:Country> ; <oref:RegionCode>] + padl( REGIONCODE, 2, '0' ) + [</oref:RegionCode> ; <oref:description>] + atr( SCRIPT ) + [</oref:description> ; </oref:address> ; </oref:UL> ; </pref:Producer> ; <pref:ProductVCode>АП</pref:ProductVCode> ; </ainp:Product> ; <ainp:Quantity>] + ( - AMNT + NATTR4 ) + [</ainp:Quantity> ; </ainp:Position> ; </ainp:Content> ; </ns:ActChargeOnShop_v2> ; </ns:Document> ; </ns:Documents> ] try msg := WAITMSG( 'Обработка данных' ) WRITETXTFILE( { aa }, 'ActChargeOnShop_v2.xml', path, true,, 'utf8' ) aa := IDHTTPPOSTFILE( path + 'ActChargeOnShop_v2.xml', ip + ':' + port + '/opt/in/ActChargeOnShop_v2' ) finally HIDEMSG( msg ) end if !EMPTY( aa ) WRITETXTFILE( { aa }, 'ActChargeOnShop_v2_respond.xml', path, true,, 'utf8' ) endif // https://wiki.sftserv.ru/index.php/TypeChargeOn // Излишки // ActChargeOnShop_v2
CTRL + F6 ДобОст
local local_host, utm_port, aa, path, doc, node, child_node_count, msg, fld, _, sql, out_shop, max_num path := Nice_path( TempPath ) utm_port := GetPrm( 'UTM_PORT', TaskName, TaskNum ) local_host := GetPrm( 'UTM_IP_ADD', TaskName, TaskNum ) if !YesNo( "Вы действительно хотите добавить остатки продукции ?", false ) return endif // если нет товарного отчета - запрет добавления остатков sql := [ Select SHIFT From REPS] + RET_F_EXT() + [ Where SHIFT = '] + DTOS( DOCS1->DATDOC ) + [1' and ; CODEGRP = '2201' and REFL1 = 'R20 ' and ANAL1 = ] + DOCS1->KANAL1 aa := SQLTOARR( sql ) if EMPTY( aa ) MESSAGE( 'Не найден товарный отчет за ' + DOCS1->DATDOC + '. Пожалуйста, сформируйте отчет' ) return endif fld := ' _1,C,100; _2,N,5; ' try msg := WaitMsg( 'Обработка данных' ) out_shop := CreateTmpFile( fld, 'out_shop', ~IsFreeDel := true ) // входящие сообщения aa := IdHttpGet( local_host + ':' + utm_port + '/opt/out' ) WriteTxtFile( { aa }, 'out.xml', path, true ) doc := XMLDocument( path + 'out.xml' ) node := xmlNode( doc ) child_node_count := XmlNodeProp( node, "ChildNodeCount" ) while child_node_count > 0 child_node_count := child_node_count - 1 aa := XmlNodeProp( XmlNodeProp( node, "ChildNodes", child_node_count ), "NODEVALUE" ) if at( 'ReplyRestsShop', aa ) > 0 ( out_shop )->( DbAppend() ) ( out_shop )->_1 := aa ( out_shop )->_2 := val( Right( aa, Len( aa ) - Rat( '/', aa ) ) ) endif end sql := [ Select MAX( _2 ) From ] + TmpFilePath( out_shop ) max_num := SqlToArr( sql ) sql := [ Select _1 From ] + TmpFilePath( out_shop ) + [ Where _2 = ] + max_num aa := SqlToArr( sql ) aa := Right( aa, Len( aa ) - at( 'http', aa ) - 6 ) aa := IdHttpGet( aa ) WriteTxtFile( { aa }, 'out.xml', path, true ) finally CloseTable( out_shop ) HideMsg( msg ) end // _1 http адрес ссобщения // _2 номер сообщения // Получены остатки из ЕГАИС на дату и время DOCS1->D2NAME := StrTran( FIELD_FROM_XML( aa, 'RestsDate', 'rst' ), 'T', ' ' ) fld := ' _1,C,19; _2,C,200; _3,N,6,4; _4,N,6,3; _5,C,3; _6,N,14,4; _7,C,12; _8,C,200;; _9,C,100; _10,C,10; _11,C,9; _12,N,3; _13,C,100; ' try msg := WaitMsg( 'Анализ данных' ) _ := CreateTmpFile( fld, '_', ~IsFreeDel := true ) aa := Copy( aa, at( "<rst:Products>", aa ) + len( "<rst:Products>" ), len( aa ) ) while !Empty( at( "<rst:ShopPosition", aa ) ) ( _ )->( DbAppend() ) ( _ )->_1 := FIELD_FROM_XML( aa, 'AlcCode' ) ( _ )->_2 := Left( FIELD_FROM_XML( aa, 'FullName' ), 200 ) ( _ )->_3 := FIELD_FROM_XML( aa, 'Capacity' ) ( _ )->_4 := FIELD_FROM_XML( aa, 'AlcVolume' ) ( _ )->_5 := FIELD_FROM_XML( aa, 'ProductVCode' ) ( _ )->_6 := FIELD_FROM_XML( aa, 'Quantity', 'rst' ) ( _ )->_7 := FIELD_FROM_XML( aa, 'ClientRegId', 'oref' ) ( _ )->_8 := Left( FIELD_FROM_XML( aa, 'FullName', 'oref' ), 200 ) ( _ )->_9 := Left( FIELD_FROM_XML( aa, 'ShortName', 'oref' ), 100 ) ( _ )->_10 := Left( FIELD_FROM_XML( aa, 'INN', 'oref' ), 10 ) ( _ )->_11 := Left( FIELD_FROM_XML( aa, 'KPP', 'oref' ), 9 ) ( _ )->_12 := FIELD_FROM_XML( aa, 'RegionCode', 'oref' ) ( _ )->_13 := Left( FIELD_FROM_XML( aa, 'description', 'oref' ), 100 ) aa := Copy( aa, at( "</rst:ShopPosition>", aa ) + len( "</rst:ShopPosition>" ), len( aa ) ) end fld := { 'D1NAME', 'K2NAME', 'AMNT', 'NATTR1', 'NATTR2', 'NATTR3', 'CLIENT_REG',; 'OREF_NAME', 'OREF_SHORT', 'INN', 'KPP', 'REGIONCODE', 'SCRIPT' } sql := [ Select _1 D1NAME, _2 K2NAME, _6 AMNT, _3 NATTR1, _4 NATTR2, _5 NATTR3,; _7 CLIENT_REG, _8 OREF_NAME, _9 OREF_SHORT, _10 INN, _11 KPP, _12 REGIONCODE, _13 SCRIPT From ] + TmpFilePath( _ ) // + [ ; // Where _1 = '0015822000001256904' ] aa := SqlToArr( sql, fld ) finally CloseTable( _ ) HideMsg( msg ) end if !IsEmpty( aa ) AddAll( 'ACT', '2', DOCS1->RGNUM,, fld, aa ) endif // _1 код ЕГАИС // _2 наименование // _3 емкость // _4 крепость // _5 группа // _6 остаток // _7 ClientRegId // _8 OREF_NAME
CTRL + F10 вЕГАИС ( Отправить акт списания в ЕГАИС )
if !YesNo( 'Вы уверены, что хотите отправить акт списания в ЕГАИС ?', false ) return endif local fs_rar_id, ip, port, path, aa, i, msg, typeWriteOff, note typeWriteOff := atr( DOCS1->CATTR1 ) if Empty( typeWriteOff ) typeWriteOff := 'Реализация' note := 'Розничная реализация продукции, не подлежащей фиксации в ЕГАИС' endif if TypeWriteOff = 'Пересортица' note := 'Недостача пересортица' endif if TypeWriteOff = 'Недостача' note := 'Недостача (хищение, злоупотребление материально ответственных лиц, ошибки учета, естественная убыль,...)' endif if TypeWriteOff = 'Уценка' note := 'Уценка (списание) в результате порчи' endif if TypeWriteOff = 'Порча' note := 'Списание объема продукции, не подлежащей дальнейшей реализации (бой, срок годности, порча)' endif if TypeWriteOff = 'Потери' note := 'Потери при транспортировке' endif if TypeWriteOff = 'Проверки' note := 'Списание объема продукции, израсходованной на лабораторные нужды для прохождения добровольной проверки качества, рекламные образцы' endif if TypeWriteOff = 'Арест' note := 'Списание арестованной продукции, изъятой из оборота продукции, конфискованной продукции по решению суда' endif if TypeWriteOff = 'Иные цели' note := 'Списание продукции, когда ФСМ/АМ не возможно считать' endif fs_rar_id := GetPrm( 'FSRAR_ID', TaskName, TaskNum ) ip := GetPrm( 'UTM_IP_ADD', TaskName, TaskNum ) port := GetPrm( 'UTM_PORT', TaskName, TaskNum ) path := Nice_path( TempPath ) aa := [<?xml version="1.0" encoding="UTF-8"?>] + Chr( 13 ) + Chr( 10 ) aa := aa + [<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:pref="http:/] + [/fsrar.ru/WEGAIS/ProductRef_v2" ; xmlns:oref="http:/] + [/fsrar.ru/WEGAIS/ClientRef_v2" ; xmlns:awr="http:/] + [/fsrar.ru/WEGAIS/ActWriteOffShop_v2" ; xmlns:ce="http:/] + [/fsrar.ru/WEGAIS/CommonEnum"> ; <ns:Owner> ; <ns:FSRAR_ID>] + atr( fs_rar_id ) + [</ns:FSRAR_ID> ; </ns:Owner> ; <ns:Document> ; <ns:ActWriteOffShop_v2> ; <awr:Identity>4567</awr:Identity> ; <awr:Header> ; <awr:ActNumber>] + atr( DOCS1->NUMDOC ) + [</awr:ActNumber> ; <awr:ActDate>] + SqlDate( DOCS1->DATDOC ) + [</awr:ActDate> ; <awr:TypeWriteOff>] + typeWriteOff + [</awr:TypeWriteOff> ; <awr:Note>] + note + [</awr:Note> ; </awr:Header> ; <awr:Content> ] DbGoTop() while !eof() if NATTR4 < 0 MESSAGE( 'ОСТАТОК в фабиусе МЕНЬШЕ НУЛЯ' ) MESSAGE( 'Исправьте, пожалуйста, Акт НЕ БУДЕТ отправлен' ) return endif if ( AMNT - NATTR4 ) > 0 and CATTR1 = 'Н' if ASCAN( { 261, 263, 500, 520 }, NATTR3 ) > 0 else if userKOD = 1 or userKOD = 15 or userKOD = 16 else MESSAGE( 'Крепкий алгоколь списывать нельзя ( ' + atr( D2NAME ) + ' )' ) MESSAGE( 'Исправьте, пожалуйста, Акт НЕ БУДЕТ отправлен' ) return endif endif endif DbSkip() end i := 0 DbGoTop() while !eof() if ( AMNT - NATTR4 ) > 0 and CATTR1 = 'Н' i := i + 1 Field->DANAL1 := i Field->CATTR1 := 'Да' aa := aa + [<awr:Position> ; <awr:Identity>] + i + [</awr:Identity> ; <awr:Product> ; <pref:UnitType>Packed</pref:UnitType> ; <pref:Type>АП</pref:Type> ; <pref:FullName>] + atr( K2NAME ) + [</pref:FullName> ; <pref:AlcCode>] + atr( D1NAME ) + [</pref:AlcCode> ; <pref:Capacity>] + StrTran( str( NATTR1 ), ',', '.' ) + [</pref:Capacity> ; <pref:Producer> ; <oref:UL> ; <oref:ClientRegId>] + atr( CLIENT_REG ) + [</oref:ClientRegId> ; <oref:FullName>] + atr( OREF_NAME ) + [</oref:FullName> ; <oref:ShortName>] + atr( OREF_SHORT ) + [</oref:ShortName> ; <oref:INN>] + INN + [</oref:INN> ; <oref:KPP>] + KPP + [</oref:KPP> ; <oref:address> ; <oref:Country>643</oref:Country> ; <oref:RegionCode>] + padl( REGIONCODE, 2, '0' ) + [</oref:RegionCode> ; <oref:description>] + atr( SCRIPT ) + [</oref:description> ; </oref:address> ; </oref:UL> ; </pref:Producer> ; <pref:ProductVCode>АП</pref:ProductVCode> ; </awr:Product> ; <awr:Quantity>] + ( AMNT - NATTR4 ) + [</awr:Quantity> ; </awr:Position>] endif DbSkip() end aa := aa + [</awr:Content> ; </ns:ActWriteOffShop_v2> ; </ns:Document> ; </ns:Documents> ] try msg := WaitMsg( 'Обработка данных' ) WriteTxtFile( { aa }, 'ActWriteOffShop.xml', path, true,, 'utf8' ) aa := IdHTTPPostFile( path + 'ActWriteOffShop.xml', ip + ':' + port + '/opt/in/ActWriteOffShop_v2' ) finally HideMsg( msg ) end if !Empty( aa ) WriteTxtFile( { aa }, 'ActWriteOffShop_respond.xml', path, true,, 'utf8' ) endif Message( 'Все позиции акта списания успешно переданы в ЕГАИС' )