Форум по программам и оборудованию > > >

Автоматы: решение задач ЕГАИС без участия пользователей для любых учетных систем посредством "УС Лэнд:ЕГАИС"

21.06.2019 2:56


31.03.2019 10:11
AndreyZh
 
С утречка, пока никто не отвлекает завершил создание очередного автомата, который будет весьма полезен всем пользователям ЕГАИС, вне зависимости от используемой учетной системы и без приложения большого труда с Вашей стороны сбережет предприятие от отзыва лицензии.

Реестр справок 1 (справок "А", РФУ-1) является весьма важным регистром ЕГАИС, который полезно хранить у себя. Очень много описано в теме: https://olegon.ru/showthread.php?t=29092 Однако там был акцент на проблемы определения алкокода по новым маркам, но это лишь малое предназначение данного регистра. Другими важными являются "моменты":

1. Определение атрибутов импортеров для выгрузки декларации, в частности из "УС Лэнд:ЕГАИС", т.к. ЕГАИС только в РФУ-1 даёт первичного контрагента, который для импортной алкопродукции является импортером. Важно для нас, общепита и магазинов сельской местности.

2. Более главное, где "УСЕга" может использоваться, как сервис... Обязанность предоставлять печатные справки "А" и "Б" для продукции выпущенной, импортируемой с 1 июля 2018 для поставщиков отменили, но право требования данных справок проверяющими оставили: https://olegon.ru/showpost.php?p=328959&postcount=10. Очень хорошо, если Ваша учетная система ведет реестр РФУ-1 и позволяет их печатать по ограничителям, а иначе автомат "УС Лэнд:ЕГАИС" и возможности извлечения справок из ЕГАИС Вам в помощь!

IX. Автомат по заполнению атрибутов справок 1


В "УС Лэнд:ЕГАИС" для внутренних служебных целей реестр справок 1 (РФУ-1) автоматически пополняется при:
  • Запросе остатков склада
  • Перед чтением приходной ТТН
  • Запросах алкопродукции по id или ШК

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

Для использования, как "сервис УСЕга" перед использованием автомата необходимо запросить остатки ЕГАИС, что можно в соответствующем автомате


Автомат вызывается:

1. Через командную строку, командный файл или ярлык: hle SprXXXXX, где XXXXX максимальное число запрашиваемых за один сеанс справок с пустыми атрибутами, т.е. hle SPR12 запрашивает первые 12, как отражаются в реестре РФУ-1 справок 1, если столько будет.

Данная возможность полезна и при выявлении "косяков" со справками, т.к. позволяет обнаружить момент сбоя ЕГАИС или "кривые" справки.

2. Из меню "сервис" программы. В этом случае программа запрашивает и обрабатывает до 50 справок за сеанс, что приводит к "параличу" УТМ примерно на 20-60 минут.

Паралич УТМ! Из горького реального опыта. Так как программа постоянно отправляет и делает автодопрос, то это заставляет УТМ постоянно обмениваться информацией с ЕГАИС, что резко тормозит другой документооборот с ЕГАИС.

Теперь картинки:

1. Работа команды hle sprXX



Высвечивается сообщение, которое висит 2 минуты с предупреждением из которого нажатием кнопки Esc можно отменить выполнение автомата... Почему у всех автоматов даётся 2 минуты? - При прописывании запуска через планировщик на момент включения ПК этого времени достаточно для полного запуска УТМ или подключении по сети к ПК с УТМ.

Потом появляется "пустой" экран с сообщение и на нём выдаются различные сообщения режимов комментирующих сеанс обработки данных:



В окончании программа даёт сообщение об успешности или "не очень" проведения автомата и прекращает свою работу.


2. Из меню "сервиса" даётся запрос на исполнения автомата и по завершению происходит возврат к программе.




Анализ информации по справкам доступен в соответствующем режиме "прочих задач":




Алгоритм. В принципе здесь полностью эмулируется ручная работа пользователя, которую можно провести из реестра РФУ-1 и обработки ответов от ЕГАИС:

1. По первым ХХХ записям с пустыми атрибутам отравляется запрос по справкам

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

Последний раз редактировалось AndreyZh; 31.03.2019 в 10:20.
01.04.2019 15:50
plvn24
 
Цитата:
AndreyZh 2. Из меню "сервис" программы. В этом случае программа запрашивает и обрабатывает до 50 справок за сеанс, что приводит к "параличу" УТМ примерно на 20-60 минут.
А наложить условия поиска в данном режиме насколько трудоёмко?
01.04.2019 16:59
AndreyZh
 
Цитата:
plvn24 А наложить условия поиска в данном режиме насколько трудоёмко?
Цель автомата простая - заполнить все атрибуты по справкам, где они пустые... и условие одно: "первые ХХХ справок с пустыми атрибутами"... придумывание иных условий - это отказ от "автомата". Вашу "задачу" несложно сделать стандартным способом из списка РФУ-1: пометить в группу и по нему отправить запрос, а затем получить ответ.
01.04.2019 17:40
plvn24
 
Цитата:
AndreyZh несложно сделать стандартным способом из списка РФУ-1: пометить в группу и по нему отправить запрос, а затем получить ответ.
Конечно, однако в списке будут все РФУ-1, включая отсутствующие на остатках
01.04.2019 18:03
Greben
 
Цитата:
plvn24 Конечно, однако в списке будут все РФУ-1, включая отсутствующие на остатках
Возможно, уважаемый plvn24 говорит о некой ОПЦИИ, указываемой в парамерах при запуске данного автомата.
01.04.2019 18:06
AndreyZh
 
Извините за несвязанную речь... В свой праздничный вечер слегка...
Цитата:
plvn24 Конечно, однако в списке будут все РФУ-1, включая отсутствующие на остатках
Всё так и задумано!... и этим гемором завтра нагружу продавцов:

1. Для декларации алкопродукция, которая была на остатке 01.01.2019 сейчас может там отсутствовать;
2. Для проверяющих. Они требуют справки не только на бухло на остатках, но и на когда-либо проданное.

Резюме: Хотите "тонкого" получения информации - делайте в ручную, а если просто желаете привести ВСЁ в порядок - тупо на ночь запустите автомат hle SPR2000000 и думаю, что ЕГАИС отдаст инфу по всем незаполненным справкам.
02.04.2019 11:04
AndreyZh
 
Миниотчет...
Цитата:
AndreyZh Всё так и задумано!... и этим гемором завтра нагружу продавцов:
1. Механизм автомата при любом типе вызова работает корректно;
2. Вызов из меню сервиса отрабатывает на 4G свистке примерно за 20 минут - это 50 справок, а по командной строке брал 10 справок, т.ч. ничего не могу сказать о возможных проблемах при большом (>1000) числе запрашиваемых справок;
3. Заметил несколько интерфейсных косяков во всех режимах, которые "по ходу пьесы" исправлял и сообщу в теме: https://olegon.ru/showthread.php?t=29916
06.04.2019 09:56
AndreyZh
 
Справка по автомату IX Как напечатать отдельную справку и узнать сколько ещё требуется запросить подробно описано в сообщении: https://olegon.ru/showpost.php?p=329559&postcount=10
25.04.2019 14:37
AndreyZh
 
На прошлой неделе решил начать процесс проверок состояния регистра №3, используя автомат пакетного обновления пула марками регистра №3 по РФУ-2: https://olegon.ru/showpost.php?p=327754&postcount=1 и понял, что для пользователей "УС Лэнд:ЕГАИС" - это непригодное решение, по причине, что подготовку списка для автомата нужно производить вручную. Причем - это список будет всегда негоден "как есть" для использования, т.к. будет содержать очень много записей... и его всё равно в редакторе придётся обрезать. Так, как мне приходится настраивать и налаживать эту работу, в том числе у пользователей на удаленном сопровождении... пришлось сильно подумать... и создать новый:

X. Автомат фоновой подготовки данных для запроса марок регистра №3


Автомат вызывается: только через командную строку hle yzLRFU[B]x[/B, где параметры xyz определяют ограничители сканирования остатков склада (регистра №1).

Суть автомата - создание по списку остатка склада файла ListRFU2.txt], содержащего список РФУ-2 для последующего запроса остатков в каталоге программы для последующего его использования автоматом: https://olegon.ru/showpost.php?p=327754&postcount=1

Уточняющие параметры вызова автомата:

x - максимальное число РФУ-2, выбираемое из списка алкопродукции регистра №1. Программа изначально начиная с "первой" позиции выбирает x или менее, если их меньше справок. При следующем запуске выбор справок начинается со строки, на которой предыдущий запуск завершился. По достижению конца списка автомат начинает подбирать справки с его начала заново.

y - 0, то игнорировать записи (алкокод+РФУ-2) на которые нет ссылок в пуле марок, т.е. программа не знает об их принадлежности регистру №3... не принадлежащие регистру №3. Иначе запрос делает по всем РФУ-2 алкопродукции. Режим полезен для начального заполнения пула акцизных марок "УСЕга".

При любых признаках игнорируется пивная продукция.

z - 0, то брать РФУ-2, если имеются остатки на регистре №1, а иначе справки будут запрашиваться и по закончившемуся товару. Иногда, при сбоях ЕГАИС на рег №1 нет остатков, а марки на регистре №3 числятся.

Примеры вызова:

hle 00LRFU100 - список формируется по алкопродукции регистра №3, если есть остатки на регистре №1 и список не более 100 строк... Будет потом запрашиваться у ЕГАИСа около 17 часов.

Замечание: В силу ожидания между запросами в 10 минут и отсутствия "дергания" экрана, многопользовательской обработки данных - данные автоматы вполне можно запускать параллельно другой работе с ЕГАИС.

hle 50LRFU30 - начальное заполнение пула марок. Предполагаем, что "УСЕга" до этого не знала о Ваших данных. Список берется по всему алкоголю с остатками по складу, но не более 30 строк.

hle 11LRFU999999 - сделать список РФУ-2 по алкопродукции когда либо "проходившую" по складу.

Замечание: данный автомат работает молнееносно… т.ч. картинок не имеется.

Реальное использование:

1. В планировщике можно задать несколько заданий с разными автоматами, исполняемыми в требуемое время и в требуемой последовательности.

2. Можно использовать, приложенный командный файл для вызова из планировщика или ярлыка, подправив его под Ваши нюансы:

hle rests
hle 00lrfu4
hle RFU2

? Не уверен, что разумно обновлять остатки склада, т.к. с момента предыдущего запуска товар может быть продан, т.е. по нему регистр №3 не обновится.


Для компьютерщиков даю его исходный код, но отмечу, что не старался сделать его красивым и оптимальным.

Исходник автомата:
Код:
* --------------------------------------------------------------------------------------------------
*   Автоматическое создание списка РФУ-2 для последующего запроса остатков регистра №3. Передаётся
*   максимальное число сохраняемых кодов справок в ххх: yzLRFUxxxx, где
*   y = 0 - берем только алкопродукцию принадлежащую регистру №3, иначе всё кроме пива
*   z = 0 - берем, если есть остаток на регистре №1 складе, а иначе скан и закончившейся АП
*   xxx   - максимальное за сеанс выявление числа справок РФУ-2, учитывая что запрос раз в 10 минут
*   Приведенная выше является более гибкой системой посроения списка РФУ-2
*   - Анализируется неиндексированный файл остатков склада. Контрол - номер записи
*   - Делаю только по алкопродукции с остатками и принадлежащей регистру №3. Всё ведём в УСЕга 
PROC pgAuCrList( cPar )
    LOCA cM:="", lR3:=FALSE, cB:="", cStr:="", lBof:=FALSE, nBegRec:=0, nCount:=0, nRec:=0, lNew:=TRUE
    LOCA nR3:=0, nRest:=0, nMax:=0, cFile:="ListRFU2.TXT"
    
    //  Разбираем переданный параметр
    nR3     := Val(Subs(cPar,1,1))
    nRest   := Val(Subs(cPar,2,1))
    IF (nMax:=Val(Subs(cPar,7)))<=0 THEN pCloseUSega(); fErr_Quit("Не задано максимальное количество РФУ-2 в списке!",cError)
        
    //  Работа автомата возможна лишь при открытых таблицах программы - иначе прекращение работы
    IF !lOpenMyDbf() THEN pCloseUSega(); fErr_Quit("Не доступна или отключено ведение БД программы - дальнейшая работа не возможна!",cError)

    //  Определяю последнюю обработанную запись из предыдущего запуска автомата
    nBegRec := Val(cgGetValue("LISTRFU2"))
    
    //  Устанавливаем рабочие индексы для работы и начинаем скан остатков склада
    SELE MY_RESTS
    DbSetOrder(0)
    
    //  Для предотвращения зацикливания определяю начальные установки от возможно предыдущего запуска
    lBof    := (nBegRec <= 0)
    DbGoTo( nBegRec )
    IF Eof()
        nBegRec := 0
        lBof    := TRUE
    ENDI
    IF lBof
        DbGoTop()
    ELSE
        DbSkip()
    ENDI
    
    //***   Поехали. Возможно возвращение на начало - ловим момент завершения в теле
    nRec    := RecNo()
    DO WHIL TRUE
    
        //  Блок отсева. Возможно, что ни одна запись не будет удовлетворять условиям
        IF Eof()                //  Достигли конца
            
            //  Ничего не подобрали
            IF nCount <= 0  THEN EXIT
            
            //  Начинали подбор с начала и прошли таблицу до конца
            IF lBof         THEN EXIT
            
            //  Начинаем с начала таблицы
            DbGoTop(); LOOP
        ENDI
        
        //  Пошли на второй круг при старте со средины
        IF !lNew .AND. (Abs(RecNo()-nRec)<0.001) THEN EXIT
        lNew    := FALSE
        
        //  Блок отсева записей по условиям вызова автомата
        IF (nRest <= 0) .AND. (qtyAll <= 0)                 //  Отбор только с остатками на регистре №1
            DbSkip(); LOOP
        ENDI
        
        //  Всегда отсеиваю пиво, считая его не маркированной алкопродукцией
        IF !lgUslPivo(MY_RESTS->codAlc,1)
            DbSkip(); LOOP
        ENDI
        
        //  Отсев по признаку принадлежности регистру №3 по записям в таблице пула марок
        cB      := Alltrim(numbb)
        
        //  Отсев по принадлежности регистру №3 по информации из пула
        IF nR3 <= 0
            lR3 := lgR3Marka(MY_RESTS->regId,cB,@cM)
            IF !lR3 THEN DbSkip(); LOOP
        ENDI
        
        cStr    += cB+CRLF                                  //  Подготавливаю строку для записи в файл
        IF ++nCount >= nMax                                 //  Выбрали требуемое число справок
            EXIT
        ENDI
        DbSkip()
    ENDD
    
    //  Запоминаю запись в таблице остатков на которой остановились
    lgPutValue("LISTRFU2",Alltrim( Str(MY_RESTS->(RecNo()),19) ))
    
    //  Сохраняю в текстовый файл каталога программы
    MemoWrit( HB_OEMTOANSI(cFile), HB_OEMTOANSI(cStr) )
    pCloseUSega()
    fErr_Quit("Сохранено в "+cFile,cMainc)
    RETU
Вложения
Тип файла: 7z autor3.7z (162 байт, 9 просмотров)
26.04.2019 13:27
plvn24
 
Цитата:
AndreyZh Причем - это список будет всегда негоден "как есть" для использования, т.к. будет содержать очень много записей...
Ну почему же негоден и очень много записей - я пользовался данным режимом, подсовывая для автомата список РФУ-2 "помарочных" партий, по которым было движение за день...
На текущий момент автомат отключил, использую анализ фильтра, ибо быстрее. Однако если вдруг рар обяжет учесть партионную продукцию помарочно, то фильтр тут не у дел и очень бы помогла доработка данного автомата:

hle 02LRFU999999, где z=2 - остаток на Р1 < количества марок по данной РФУ-2 в пуле

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