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

С 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
AndreyZh
 
"Началось в деревне утро"... Вот пришло письмо от ооочень грамотного профессионала в ЕГАИС, где упоминает мнение ещё одного гуру, что в преддверии начала работы с новыми марками, которые уже стали поступать в розницу "апнуть" данную тему, где всё очень просто и подробно "разъебнясняется"

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

На форуме на вопрос:
"начали получать новые марки(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

Последний раз редактировалось AndreyZh; 15.11.2018 в 15:19.

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