|
|
(не показано 6 промежуточных версий этого же участника) |
Строка 1: |
Строка 1: |
| [[ACT20001]] - это представление документа [[ACT]] | | [[ACT20001]] - это представление документа [[ACT]] |
| + | [[Акт списания алкоголя]] |
| = CTRL + F6 ДобОст = | | = CTRL + F6 ДобОст = |
− | local local_host, utm_port, aa, path, doc, node, child_node_count, msg, fld, _, sql, out_shop, max_num | + | Прочитать остатки в егаис и добавить их в документ |
− |
| + | = CTRL + F7 ДобОтч = |
− | path := Nice_path( TempPath )
| + | Добавить пиво из товарного отчета |
− | utm_port := GetPrm( 'UTM_PORT', TaskName, TaskNum )
| + | = CTRL+F8 ОстМаг = |
− | local_host := GetPrm( 'UTM_IP_ADD', TaskName, TaskNum )
| + | Запросить остатки из ЕГАИС ( Остатки в торговом зале ) |
− |
| + | = CTRL + F10 вЕГАИС = |
− | 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( ''''<span style="color:#0000FF">ReplyRestsShop</span>'''', 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 + F7 ДобОтч ( Добавить пиво из товарного отчета ) =
| + | |
− | local fld, sql, aa _
| + | |
− | 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,N,5; _2,C,25; _3,N,14,4; '
| + | |
− | try
| + | |
− | _ := CreateTmpFile( fld, '_', ~IsFreeDel := true )
| + | |
− | sql := [ Select ANAL2, EAMNT From REPS] + RET_F_EXT() + [ Where SHIFT = '] + DTOS( DOCS1->DATDOC ) + [1' and ;
| + | |
− | CODEGRP = '2201' and REFL1 = 'R20 ' and ANAL1 = ] + DOCS1->KANAL1 + [ and ANAL2 > 0 and EAMNT > 0 ]
| + | |
− | SimpleSql( [ Insert into ] + TmpFilePath( _ ) + [( _1, _3 ) ] + sql, opdatapath )
| + | |
− | sql := [ Update _ Set _2 = SERTIF From ] + TmpFilePath( _ ) + [ _ left outer join R08 ON _1 = KOD ]
| + | |
− | SIMPLESQL( sql, reflispath )
| + | |
− | sql := [ Delete From ] + TmpFilePath( _ ) + [ Where _2 = '' ]
| + | |
− | SIMPLESQL( sql, temppath )
| + | |
− | fld := { 'DANAL2', 'NATTR4', 'D1NAME' }
| + | |
− | sql := [ Select _1 DANAL2, _3 NATTR4, _2 D1NAME From ] + TmpFilePath( _ )
| + | |
− | aa := SQLTOARR( sql, fld )
| + | |
− | finally
| + | |
− | CLOSETABLE( _ )
| + | |
− | end
| + | |
− | if !ISEMPTY( aa )
| + | |
− | ADDALL( 'ACT', '2', DOCS1->RGNUM,, fld, aa )
| + | |
− | endif
| + | |
− |
| + | |
− |
| + | |
− | // _0
| + | |
− | // _1 код пива в фабиусе
| + | |
− | // _2 сертификат ( код пива в ЕГАИС )
| + | |
− | // _3 остаток
| + | |
− | // _4
| + | |
− | // _5
| + | |
− | // _6
| + | |
− | // _7
| + | |
− | // _8
| + | |
− | // _9
| + | |
− | | + | |
− | = 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( 'Все позиции акта списания успешно переданы в ЕГАИС' )
| + | |
− | | + | |
| = Смотрите также = | | = Смотрите также = |
| [[ACT]] | | [[ACT]] |