Форум OlegON > Программы и оборудование для автоматизации торговли > Системы автоматизации торговли > КИС Lack & УС Land

ЕГАИС. Новые подходы режима работы с приходными ТТН : КИС Lack & УС Land

22.11.2024 6:05


11.07.2018 11:41
Как убедился по заморочкам последних дней сфера учета и работы с алкоголем перешла из бухгалтерий и спецотделов в ведение программистов - возможно лишь только им понятны потуги в работах ФСРАР по контролю за оборотом алкопродукции. Косвенно это подтверждает и отсутствие "интереса" к УСЕга - ведь право зачем программисту альтернативный подход?

С 1 июля в теории, а примерно с 15 августа на практике начнется оборот новых марок с ШК DataMatrix длинной 150 знаков, не содержащих алкокод в ШК. Хотя и раздаются мысли, что алкокод - устаревшее понятие, но по факту 100% программ для ЕГАИС работают с ним. Более того будут накладные, содержащие "братские могилы":

1. Пиво - без марок;
2. Алкоголь без указания марок;
3. Алкоголь со старыми марками и их отражения в ТТН;
4. Алкоголь с новыми марками. Много мыслей в теме: https://olegon.ru/showthread.php?t=29562

В принципе мной разработаны подходу уже в релизе 27 марта и описаны во многих темах разделах. Окончательный алгоритм подготовки с работой с "новыми" приходами озвучен: https://olegon.ru/showpost.php?p=313144&postcount=17 и наконец он окончательно реализован. Главное нужно понимать, что базовым документом, имеющим заведомо правильную информацию по алкоголю становится электронная справка 1 - бумажная справка "А" для немаркированного алкоголя и маркированного поштучного отменена с 1 июля. Описание данного документа дано: https://olegon.ru/showthread.php?t=29092

Новых марок НЕТ, а посему отладка производилась по поштучной алкопродукции со старыми марками. Сейчас "УС Лэнд:ЕГАИС" при подготовке и анализе списка приходных накладных производит анализ накладных на наличие новых марок, сохраняет помарочную структуру ТТН и отражает список ТТН с указанием по ТТН типов указанных в них марок:

1. Без марок;
2. ТТН с марками:
3. ТТН с марками нового образца.




При попытке открыть для просмотра и работы ТТН с новыми марками - текст не ТТН с АкМ, а НовАМарки. Программа проводит анализ на наличие отсутствия по конкретным РФУ-1 товара с новыми марками полностью заполненных атрибутов справки1. Если не нашлась во внутренней БД такая справка или она "не заполненна" программа выдаёт запрос:




При отказе запрещает доступ к телу накладной, а при подтверждении по всем РФУ-1 алкопродукции с новыми марками запрашивает полные атрибуты РФУ-1 (важно алкокод) и создаёт, при необходимости реальные или фиктивные записи в таблицах остатков, справок 1 и пула акцизных марок, например:




В пуле марок, по выделенным фрагментам видно, что это фиктивная запись, которая заполниться правильный информацией при подтверждении ТТН, сервисе приёма, запросе остатков или автоматом удалиться при ремонте программы.




Всё - теперь программа имеет ПРАВИЛЬНЫЕ и однозначные атрибуты алкопродукции по всем типам марок или без оных и пускает Вас в режимы работы с ТТН.
15.11.2018 14:50
"Началось в деревне утро"... Вот пришло письмо от ооочень грамотного профессионала в ЕГАИС, где упоминает мнение ещё одного гуру, что в преддверии начала работы с новыми марками, которые уже стали поступать в розницу "апнуть" данную тему, где всё очень просто и подробно "разъебнясняется"

Цитата:
Андрей, добрый день! О некоторых нюансах ведении учета с новыми марками:

На форуме на вопрос:
"начали получать новые марки(150 символов) в розницу. Поскольку алгоритм выдирания alccode из новых марок нам неизвестен, то у нас нет возможности проверить соответствие марки и алкокода в ТТН. Также не ясно теперь как вести учет, если нет привязки между маркой и алкокодом"

fkr отвечал:
"Алгоритма выделения алкокода непосредственно из новой марки не существует, т.к. алкокода в ней нет.
И по новой марке особого смысла в сверке с алкокодом нет, т.к. марки привязаны к партии алкокода (и ЕГАИС не пропустит ТТН, если партия не соответствует алкокоду. т.е. алкокод всегда в ТТН будет правильный), и именно привязка к FB-XXXXXXX теперь является основой правильного учёта новых марок в вашей программе".

P.S. Новые механизмы работы с алкокодами на уровне "пользователя" описаны в инструкциях. По сути, для определения алкокодов в программе ничего не поменялось - получаю алкокод по марке единой функцией, т.е. изменил только её.

Желающие могут изучить её код для понимания алгоритмов:
Код:
* --------------------------------------------------------------------------------------------------
*   Определение кода алкогольной продукции из ШК кода акцизной марки по математическим алгоритмам
*   18.06.2018  Появляется марка 150 знаков, где не зашит алкокод - другие алгоритмы выявления его
FUNC cAlcCodAM( cCod )
    LOCA cA:="", cB:="", nI:=0, nLen:=0, nS:=0, nY:=0, nX:=0, nM:=0, nSum:=0
    LOCA nOldSel:=0, nRec:=0, nOrd:=0, nPull:=0
    
    //  При чтении копипастом может в конце добавляться мусор в виде одного знака - убираю его
    cCod    := Alltrim(cCod)
    IF Len(cCod) = 69
        cCod    := Left(cCod,68)
    ELSEIF Len(cCod) = 151
        cCod    := Left(cCod,150)
    ENDI

    DO CASE
    CASE Len(cCod) = 150        //***   Новая марка не содержащая алкокода
        cA      := Repl("0",19)
    
        //* Если таблицы не открыты - алгоритм нельзя использовать
        IF Empty( Select("AGENTS") )
            ErrMess("Для марок длиной 150 знаков алкокод определяется только при открытых таблицах, а независимое от баз данных его определение невозможно",cError)
            RETU cA
        ENDI
        
        //* Сохраняю параметры среды программы и активные индексы в используемых таблицах
        nOldSel := Select()
        nRec    := RecNo()
        nOrd    := zOrd()
        nPull   := PULL_AKM->( zOrd() )
        
        //* Ищу марку в пуле акцизных марок, где и беру алкокод, который определяется/исправляется при запросе РФУ-1. 
        SELE PULL_AKM ORDE PA_CODIS SEEK cCod
        IF !Eof()
            cA  := Alltrim(regId)
        ELSE
            ErrMess("Не могу определить алкокод! Для марок длиной 150 знаков алкокод определяется только по запросам РФУ-1 и наличия ссылки в пуле акцизных марок программы!",cError)
        ENDI
        
        //* Возврат состояния среды программы
        zSet( nPull )
        SELE (nOldSel) ORDE (nOrd) REC (nRec)
        
    CASE Len(cCod) = 68         //***   Старая марка с вычисляемым алкокодом
    
        /*  Номер не всегда начинается с 9 знака - более сложный алгоритм его выделения. Код АП правильно
            определяется в случае вхождения 00000 иначе никак не смог получить правильный код - какая-то лажа или
            с примерами марок (старые) или с алгоритмом
            10.12.2015 Использую алгоритмы ручного преобразования из 36 ричного числа в 19 значное 10 ричное представление */

        //  Выбираем разное число преобразуемых кодов
        IF Subs( cCod,4,5 ) == "00000"
            cA      := Subs( cCod,9,11 )
        ELSE
            cA      := Subs( cCod,8,12 )
        ENDI
        cA          := Upper(cA)            //  Бывают косяки от сканера перевода в малые буквы
        nLen        := Len( cA )
        cB          := cA

        //  Расчет в десятиричной систем (=0) делает переменную LongInteger, а если (=0.0) то Double, что уменьшает точность
        nSum        := 0
        FOR nX := 1 TO nLen
            nM      := 1
            FOR nY := 1 TO nLen - nX DO nM := nM*36

            nSum    := nSum + nM * ( At( Subs(cA,nX,1), _SIMB_AM ) - 1 )
        NEXT nX

        //  Варианты использования Ntoc(nSum), Str(nSum,19) приводят к округлениям и потери точности
        cA          := Padl( nSum, 19, "0" )   //  Просто выравнием число пополняя нулями
    OTHE                        //***   Марка неверной длины - возвращаю нулевой алкокод
        cA          := Repl("0",19)
    ENDC
    RETU cA
10.12.2018 13:57
Увы, но если не хотите "попасть" необходимо понимать движение поштучной алкопродукции… Как правило она попадает к вам с приходными накладными, где есть указание акцизных марок и не важно нового или старого образца.

0. При показе списка ТТН в очереди УТМ отражается факт наличия товара с марками в текущей накладной:





1. При наличии марок, а тем более новых программа для определения реальных алкокодов запрашивает неизвестные РФУ-1 и сохраняем марки накладной в пуле с неопределенным статусом. Если ТТН только посмотрели, то в процедуре ремонта эти строки удалятся, т.к. в них пустой раздел "Б"





2. Далее возможны "варианты":

- подтверждение или имитация подтверждения нажатием F10 - все марки обновят пул;
- как в примере. Расхождение - выявляемое полным сканированием всех марок с бутылок накладной. Тогда если подтверждение или имитация подтверждения нажатием F10 в реестр и пул "упадут" только принятые в приёме марки, а не принятые останутся в виртуальном статусе (до ремонта):









Ежели интересно, то программа формирует:
Отчет по приёмке АП с марками:
Код:

ОШИБКИ  Результаты приёмки товаров по ТТН №_РН_015 от 07.12.18 от 
ООО "КВК"
-------------------------------------------------------------------------------------------------------------------------- Стр.  1
Ош|Код алк.прод. ЕГАИС| Фактический код РФУ-2 |По ТТН|ФаК-во|Наименование алкогольной продукции.. Может быть пустым - не известно
----------------------------------------------------------------------------------------------------------------------------------
*  0011118000001187714 TEST-FB-000000036833736      7      6 Водка "Сыктывкарская"                                                
*  0032570000001249015 TEST-FB-000000036833735      0        Пиво светлое "Рыцарь Приморья". Пастеризованное, 20,35л кег, 4.5%    

Отчет по последовательности сканирования акцизных марок по ТТН №_РН_015 от 07.12.18
-------------------------------------------------------------------------------------------------------------------------- Стр.  2
№ п/п|Код алк.прод. ЕГАИС|КВА|%Градус|Литраж|     Символы штрихкода акцизной марки для определения алкокода      |К.ПоТТН|ФактК-во
----------------------------------------------------------------------------------------------------------------------------------
    1 0011118000001187714 200  40.000  0.500 101100000004800118001ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJK       7        6
    2 0011118000001187714 200  40.000  0.500 101100000004810118001ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJK       7        6
    3 0011118000001187714 200  40.000  0.500 101100000004820118001ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJK       7        6
    4 0011118000001187714 200  40.000  0.500 101100000004830118001ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJK       7        6
    5 0011118000001187714 200  40.000  0.500 101100000004840118001ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJK       7        6
    6 0011118000001187714 200  40.000  0.500 101100000004850118001ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJK       7        6

Отчет по сличению марок в накладных версии 3. Только по маркам из ТТН. ТТН №_РН_015 от 07.12.18
-------------------------------------------------------------------------------------------------------------------------- Стр.  3
№ п/п|Скан|       Символы штрихкода акцизных марок из приходной накладной      | Код РФУ-2 по накладной |Новый РФУ-2 из регистрац
----------------------------------------------------------------------------------------------------------------------------------
    1 **** 101100000004800118001ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJK TEST-FB-000000036785814  TEST-FB-000000036833736 
           LMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQRSTU
    2 **** 101100000004810118001ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJK TEST-FB-000000036785814  TEST-FB-000000036833736 
           LMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQRSTU
    3 **** 101100000004820118001ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJK TEST-FB-000000036785814  TEST-FB-000000036833736 
           LMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQRSTU
    4 **** 101100000004830118001ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJK TEST-FB-000000036785814  TEST-FB-000000036833736 
           LMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQRSTU
    5 **** 101100000004840118001ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJK TEST-FB-000000036785814  TEST-FB-000000036833736 
           LMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQRSTU
    6 **** 101100000004850118001ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJK TEST-FB-000000036785814  TEST-FB-000000036833736 
           LMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQRSTU
    7      101100000004860118001ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJK TEST-FB-000000036785814  TEST-FB-000000036833736 
           LMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQRSTU


Образец отправленного акта расхождения:
Код:
<?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_v3" xmlns:ce="http://fsrar.ru/WEGAIS/CommonV3" 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_v3" xmlns:wb="http://fsrar.ru/WEGAIS/TTNSingle_v3" xmlns:wt="http://fsrar.ru/WEGAIS/ConfirmTicket" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <ns:Owner>
      <ns:FSRAR_ID>030000113645</ns:FSRAR_ID>
   </ns:Owner>
   <ns:Document>
      <ns:WayBillAct_v3>
         <wa:Header>
            <wa:IsAccept>Differences</wa:IsAccept>
            <wa:ACTNUMBER>20181209104247</wa:ACTNUMBER>
            <wa:ActDate>2018-12-09</wa:ActDate>
            <wa:WBRegId>TEST-TTN-0007699700</wa:WBRegId>
            <wa:Note>Бой товара по накладной: ООО &quot;КВК&quot; ИНН: 7805394047 КПП: 780501001 N_РН_015 от 07.12.18</wa:Note>
         </wa:Header>
         <wa:Content>
            <wa:Position>
               <wa:Identity>2</wa:Identity>
               <wa:InformF2RegId>TEST-FB-000000036833736</wa:InformF2RegId>
               <wa:RealQuantity>6.000</wa:RealQuantity>
               <wa:MarkInfo>
                  <ce:amc>101100000004860118001ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQRSTU</ce:amc>
               </wa:MarkInfo>
            </wa:Position>
            <wa:Position>
               <wa:Identity>1</wa:Identity>
               <wa:InformF2RegId>TEST-FB-000000036833735</wa:InformF2RegId>
               <wa:RealQuantity>0.080</wa:RealQuantity>
            </wa:Position>
         </wa:Content>
      </ns:WayBillAct_v3>
   </ns:Document>
</ns:Documents>



3. После повторного входа в список ТТН у накладной появится указание типа отправленного акта





Как провести "частичную" проверку марок, но сохранить инфу по ТТН полностью?

1. Открываете ТТН
2. Сканируете часть марок
3. Смотрите лог ошибок
4. Отказываетесь, в том числе от списка ТТН
5. Входите в ТТН снова - программа забудет, что ТТН принимали и полностью выгружаете в пул по F10
10.12.2018 15:29
Привет, Андрей.
Сегодня в один из подшефных магазинов пришла накладная с нестандартными тэгами для марок. Остальные тэги стандартные. То есть, надо обрабатывать с учетом пространства имен xml. Тебе в копилку практических ситуаций...
10.12.2018 15:58
Добрый вечер Вячеслав!
Цитата:
FinSoft Сегодня в один из подшефных магазинов пришла накладная с нестандартными тэгами для марок. Остальные тэги стандартные. То есть, надо обрабатывать с учетом пространства имен xml. Тебе в копилку практических ситуаций...
Это неотъемлемое право поставщиков отказываться от покупателей... Что по "мну" - не предполагаю поддерживать эти извращения программистов пока они не станут обязательными, как позиция ФСРАР. Кроме того "УСЕга" может подтверждать или отказывать ТТН любой "кривизны", чем на моей памяти кто-то из виртуального мира воспользовался только один раз за 3+ года "жизни" проекта "УС Лэнд:ЕГАИС".

P.S. Занятно эти, так называемые разработчики пытаются удивляться:
Цитата:
Добрый день, сегодня уже по 15 ттн к нам обратились клиенты, что не видят у себя накладные по УТМ. Некоторым выдаем идентификаторы, они перезапрашивают. А некоторые клиенты машины разворачивают. Просим проверить, в связи с чем такое происходит. На сайте чек1 все проведено...
10.12.2018 16:24
Тут есть подвох в том, что остальные тэги стандартные. У меня всплыло, когда стали перемещать со склада в торговый зал. Программа отсекает приходы с марками, оставляя их на складе. А тут оказалось, что накладная загружена, как обычно, а марки отсутствуют. В результате программа пытается переместить эти бутылки в торговый зал, а Егаис возвращает ошибку, что нельзя, помарочный учет...
17.12.2021 16:05
Сейчас порешал небольшую проблемку, но учитывая давность создания технологии, пришлось чуть повспоминать - подход думаю может быть полезен и другим... Руководство "любит" делать поступление алкоголя в пятницу после обеда, но у работников формально сокращенный рабочий день... вот они и торопятся, а при создании косяка начисто теряют память по механизмам исправления косяков... приходится вспоминать и помогать

Суть свежего косяка: пришло около 700 бутылок в 3 накладных. Через описываемый в теме сервис приёма проверяем правильность марок и отсутствие пересортицы по ним в накладной, а иначе: https://olegon.ru/showthread.php?t=25767 Случайно кладовщик даёт на проверку бутылку из другой, а не текущей ТТН, программа даёт предупреждения, что марка не из накладной, дамы дают команду программе, что именно из этой, а после скана 400 марок видят ошибку в накладной по маркам... Строк много и понять сразу, а особенно, когда торопились сложно - проще позвонить мне... Ничего не делать нельзя, т.к. и на других накладных будут ошибки... Тем более, где накосячили они уже не помнили

Алгоритм исправления такого косяка:

- сохраняем отчет об ошибках в файл

- в режиме "прочие задачи/пул марок" по каждой позиции, где указано отсутствие в ТТН:
--- копируем код марки
--- по Ctrl+F5 ищем строку
--- delete - удаляем строку с маркой

- заново запускаем сервис приема ТТН, сканируем любую марку требуемой ТТН, программа предлагает взять старый набор сканируемых марок, соглашается
- всё... марки чужой ТТН отсутствует, а остальное соответствует данным ТТН... Ошибок не было
25.10.2022 14:30
Впервые за 7 лет существования проекта сегодня встретился косяк программы "УСЕга", а так как эта ошибка от рождения и весьма неожиданная, правда не приводящая к проблемам, то на выяснение её источника потратил много времени, а всё из-за того, что изначально обязательными атрибутами КА являлись краткое и полное наименование, т.е. они всегда существали в теле XML накладных... Да и с данным поставщиком работает "всю жизнь" и никогда таких заморочек не возникало. Даже созванивался с тамошними специалистами - у них ничего не менялось??? Правда после нахождения источника косяка - всё же менялось! В новых версиях их программы была проведена, наверное от "безделия" оптимизация размеров исходящих документов. Стартовая суть вопроса - в справке по ТТН отражает ХЗ какого поставщика, но все прочие атрибуты абсолютно правильные:





Конечно первым делом изучаю файл ТТН и ... не нахожу ничего "особенного". Грешу на других - сейчас активно ковыряются в реальной базе средствами многих программ, т.е. могли типа испортить БД, удаляю этого КА вообще из БД, выяснив, что это производитель и всё равно восстановиться при перезапросе остатков... Не найдя источника проблем начал изучать "зеркало", т.е. искать, где сам когда-то мог накосячить, построчно разбирая код... и всё нашел... Конечно исправлю этот мой косяк, когда придумаю другие алгоритмы, а пока источник проблемы отражения информации. Показываю, удалив ненужную инфу:

Код:
	<ns:Owner>
		<ns:FSRAR_ID>01</ns:FSRAR_ID>
	</ns:Owner>
	<ns:Document>
		<ns:WayBill_v4>
			<wb:Identity>000164081-20221020-194011</wb:Identity>
			<wb:Header>
				<wb:NUMBER>14851</wb:NUMBER>
				<wb:Shipper>
					<oref:UL>
						<oref:FullName>Общество с ограниченной ответственностью "В...и"</oref:FullName>
					</oref:UL>
				</wb:Shipper>
				<wb:Consignee>
				</wb:Consignee>
				<wb:Transport>
				</wb:Transport>
			</wb:Header>
			<wb:Content>
				<wb:Position>
					<wb:Identity>1</wb:Identity>
					<wb:Product>
						<pref:FullName>Коньяк ординарный пятилетний региона Коньяк Селексьон Спесиаль Гранд Шампань Даниель Бужу</pref:FullName>
						<pref:Producer>
							<oref:FO>
								<oref:FullName>САРЛ Бужу</oref:FullName>
         							<oref:ShortName>САРЛ Бужу</oref:ShortName>
В предположении, что <wb:Shipper> идет в описании первыми тегами ищу его атрибуты и короткое и длинное имя... а так, как тэги по коротким именам у поставщика, покупателя они "оптимизировали", то пролетаю до первого тега краткого имени, получается в описании производителя первого товара ТТН: <oref:ShortName>САРЛ Бужу</oref:ShortName> и запоминаю его как короткое имя поставщика.

Затем программа во всех дочерних режимах наименование поставщика отражает по принципу - если есть короткое имя, то отражает его, а если нет, то отражает обрезанное длинное имя
Часовой пояс GMT +3, время: 06:05.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.