Наконец-то придумал!!!
Начав понедельника начал проникаться "засадой", которая грядет на голову пользователей ЕГАИС с 1 октября 2016... и не только Ваш "покорный слуга", но и похоже другие специалисты и пользователи реально "чухнули" только с середины сентября.
В принципе с середины августа (грел пузо на солнце) начались обсуждения об процедурах выведения ЕГАИСных остатков к фактическим, но это задача на период с 01.10 по 31.12
Так же обсуждалась методология списания с торгового зала (регистр 2) и допустимость ухода остатков в течении смены "в минус", что так озаботило и было решено, в частности с появлением в "УС Лэнд:ЕГАИС" техники работы от каждодневных минусовых остатков - см. выше...
Однако "писец" спрятался в другом месте!!! Всякие возможные варианты, следующие из примерного текста методологии "с 1 октября продавать (списывать по пиву и в общепите - это "мелочь") можно только товар, поставленный на баланс"
В части ответов спецов РАР и ЦИ прозвучало, что при попытке продажи товаров не числящих в магазине будет блокироваться работа УТМ???
Как говорится "береженного бог бережет!...
сказала монашка одевая презерватив на свечку -)" в "УСЕга" ввел ограничитель на продажи через встроенный кассовый аппарат, включенный с 1 октября -
программа запрещает продажу алкогольной продукции, до этого не приходящую в "УСЕга" через ЕГАИС, а если БД не велась, то не имеющейся на остатках склада или в торговом зале! Выдаётся сообщение:
... и запрещается отпуск по данной акцизной марке, а точнее по коду АП в ЕГАИС, соответствующему данной марке. Вообще сейчас очень много ограничителей - "защиты от дурака" на "шаловливые ручки" продавцов. Весь их список можете узреть в прилагаемом исходном коде функций контроля ШК АМ:
Исходный код:
Код:
* ---------------------------------------------------------------------------
* Проверка на валидность (считываемость) акцизной марки - правильности ШК
* 11.05 Контроль дубляжа ввода АМ при заполнении массива и по таблицы чеков
* 15.06 Работа с возвратами. Контроль, что есть ШК АМ в проданных ранее
* алкогольных товаров, т.е. расходы-возвраты > 0
STAT FUNC lChPDF( cAm, aPdf )
LOCA nOldSel:=Select(), nOrd:=S_CHECK->(zOrd()), nRec:=S_CHECK->(RecNo())
LOCA nI:=0, nLen:=68, nL:=0, lBad:=FALSE
cAm := AllTrim(cAm)
nL := Len(cAm)
IF nL = 69 // Исправление копипаста из эксцелевской таблицы
cAm := Left(cAm,68)
ENDI
IF Empty(cAm) THEN ErrMess("Запрещено пустое значение! Для перевода товара в неалкогольный нажмите клавишу Esc!",cError); RETU FALSE
IF nL <> nLen THEN ErrMess("Длина марки должна быть точно "+Str(nLen,2)+" символов. У Вас "+Str(nL,2)+"!",cError); RETU FALSE
// Символы должны быть в верхнем регистре и входить в разрешенный набор знаков
FOR nI := 1 TO nLen
IF !( Subs(cAm,nI,1) $ _SIMB_AM )
lBad := TRUE
EXIT
ENDI
NEXT nI
IF lBad THEN Errmess("Акцизная марка содержит недопустимые символы! Возможно переключите Windows на английский язык!",cError); RETU FALSE
// Контроль на ввод дубляжа: отсутствие в массиве текущего чека и проданной позиции в базе чеков
nI := ascan(aPdf,{|x|x[2]==cAm})
IF nI > 0
Errmess("Вы уже ввели данный ШК акцизной марки в данной продаже (чеке)!",cError); RETU FALSE
ENDI
// Проверка по таблице чеков, допуская возможность возврата товара по данной АМ
nI := 0
SELE S_CHECK ORDE SC_CODIS SEEK cAm
DO WHIL !Eof() .AND. codIs == cAm
IF sales > 0; ++nI // Продажа
ELSE; --nI // Возврат от покупателя
ENDI
DbSkip()
ENDD
// Возврат состояния среды программы
SELE S_CHECK ORDE (nOrd) REC (nRec)
DbSelectArea(nOldSel)
IF MEMV->lpVozvrat // Режим возврата товаров от покупателей
IF nI <= 0 // Нет ушедшего на продажу товара
Errmess("По данному ШК акцизной марки вообще не было продаж или товар уже вернули!",cError); RETU FALSE
ENDI
ELSE
IF nI > 0 // Есть продажа, произведенная раннее - повторная продажа запрещена
Errmess("По данному ШК акцизной марки уже когда-то была продажа. Есть товар в списке чеков - повторная продажа запрещена!",cError); RETU FALSE
ENDI
ENDI
// 22.09.2016 Запрет товара, если он не проходил через ЕГАИС текущего ключа. Требование с 1 октября 2016
IF !lMyRest(cAm) .AND. (Date() >= Ctod("01.10.2016"))
ErrMess("Данная алкогольная продукции никогда не проходила через УТМ данного подразделения - нет следов в таблицах остатков. Продажа с 1 октября 2016 запрещена! Самое простое - поставьте АП на баланс в торговом зале!",cError)
RETU FALSE
ENDI
RETU TRUE
* ---------------------------------------------------------------------------
* Контроль прохождения товара через ЕГАИС - следы в таблицах любых остатков
STAT FUNC lMyRest(cAm)
LOCA lRetu:=FALSE, nOldSel:=Select(), nMy:=MY_RESTS->(zOrd()), nSh:=SHOPREST->(zOrd()), cIdEga:=""
// Акцизную марку преобразую к идентификатору продукции в ЕГАИС
cIdEga := cAlcCodAM( Alltrim(cAm) )
// Ищу следы... Пока остаток не важен, лишь были следы прохождения товара через программу
SELE MY_RESTS ORDE MR_REGID SEEK cIdEga
IF Eof()
SELE SHOPREST ORDE SR_REGID SEEK cIdEga
IF !Eof() THEN lRetu := TRUE
ELSE
lRetu := TRUE
ENDI
// Возврат состояния среды программы
MY_RESTS->(zSet(nMy))
SHOPREST->(zSet(nSh))
DbSelectArea(nOldSel)
RETU lRetu