Вот здесь https://data.nalog.ru/html/sites/www.kk ... o_mark.pdf
вышли разъяснения и рекомендации ФНС по заполнению чека на алкашку по ФФД 1.2
Вот здесь https://data.nalog.ru/html/sites/www.kk ... o_mark.pdf
Так это как раз самое интересное место. EAN и КМ товара передавать не надо (т.к. ЕГАИС), но рекомендуется.
Игорь Столяров писал(а): ↑23 Ноябрь 2021, 17:11 АТОЛ объяснил политику партии с ФФД 1.2
Если (вдруг) кто не смотрел - в файле основные лозунги.
Не расстраивайтесь. Где то есть запись ... но там в общем-то час читали этот файл и показывали
Код: Выделить всё
?cm_Ole{'MarkingType'} = 5 ! признак типа маркировки товара: табак
?cm_Ole{'GTIN'} = SUB(LOC:mark_Barc, 1 , 14)
?cm_Ole{'SerialNumber'} = SUB(LOC:mark_Barc, 15, 7)
?cm_Ole{'FNSendItemCodeData'} ! отправить тег 1162 (код товарной номенклатуры)
Ну это какая-то очень старая реализация работы с маркировкой.
Код: Выделить всё
MyFRS.Object{'Password'} = Clip(MyFRS.FRPass) ! За каким-то лядом пароль
MyFRS.Object{'BarCode'} = Marking.Dump ! Весь код марки (любой)
MyFRS.Object{'FNSendItemBarcode'}
...
If MyFRS.Object{'FNOperation'} = 0 then и т.д и т.п.
Код: Выделить всё
!===================================================================================
!
! Проверка марок ффд 1.2
!
FsKKM.TestMarks FUNCTION (BYTE Reg)
loc:i long
loc:j long
loc:ok byte
CODE
if SELF.Active = 0
return(0)
end
if records(SELF.QueueSale)=0
return(0)
end
if SELF.FormatOFD<>2 !1.2
return(0)
end
loc:ok=1
loop loc:i=1 to records(SELF.QueueSale)
get(SELF.QueueSale,loc:i)
if SELF.QueueSale.SaleCodeMark=''
cycle
end
SELF.Contr{'Password'} = SELF.Pswd
SELF.Contr{'Barcode'} = SELF.QueueSale.SaleCodeMark
if Reg=0 !продажа
SELF.Contr{'ItemStatus'} = 1
else !возврат
SELF.Contr{'ItemStatus'} = 3
end
SELF.Contr{'TLVDataHEX'} = ''
SELF.Contr{'CheckItemMode'} = 0
SELF.Contr{'FNCheckItemBarcode()'}
SELF.ErrorCode=SELF.Contr{'ResultCode'}
if SELF.ErrorCode<>0
SELF.ErrorDisc=SELF.Contr{'ResultCodeDescription'}
loc:ok=0
break
end
SELF.QueueSale.SaleTestMarkResult=SELF.Contr{'KMServerCheckingStatus'}
put(SELF.QueueSale)
SELF.Contr{'Password'} = SELF.Pswd
SELF.Contr{'FNAcceptMarkingCode()'}
SELF.ErrorCode=SELF.Contr{'ResultCode'}
if SELF.ErrorCode<>0
SELF.ErrorDisc=SELF.Contr{'ResultCodeDescription'}
loc:ok=0
break
end
loop loc:j=1 to records(SELF.QueueStr) !проставляем маркер в печатаемых сроках (если замещают сандартные)
get(SELF.QueueStr,loc:j)
if SELF.QueueStr.KKMPlace<>1
cycle
end
if instring('[М]',SELF.QueueStr.KKMStr,1,1)>0
if SELF.QueueSale.SaleTestMarkResult=15 !успех
SELF.QueueStr.KKMStr=SELF.StrReplace(SELF.QueueStr.KKMStr,'[М]','[М+]')
else
SELF.QueueStr.KKMStr=SELF.StrReplace(SELF.QueueStr.KKMStr,'[М]','[М-]')
end
put(SELF.QueueStr)
break
end
end
end
return(loc:ok)
Код: Выделить всё
SELF.Contr{'PaymentTypeSign'} = 4 !способ расчета - полный расчет
if SELF.QueueSale.SaleType=2 and SELF.QueueSale.SaleCodeMark<>''
SELF.Contr{'PaymentItemSign'} = 33 !предмет расчета - 33-маркируемй и акцизный, 31-маркируемый и безакцизнй
elsif SELF.QueueSale.SaleType=1 and SELF.QueueSale.SaleCodeMark<>''
SELF.Contr{'PaymentItemSign'} = 31 !предмет расчета - 33-маркируемй и акцизный, 31-маркируемый и безакцизнй
else
SELF.Contr{'PaymentItemSign'} = SELF.QueueSale.SaleType !предмет расчета - 1-товар, 2-подакцизный товар
end
if Reg=0 !продажа
SELF.Contr{'CheckType'} = 1
else !возврат
SELF.Contr{'CheckType'} = 2
end
case SELF.QueueSale.SaleEd
of 0 !штуки
SELF.Contr{'MeasureUnit'} = 0
of 11 !кг
SELF.Contr{'MeasureUnit'} = 11
end
SELF.Contr{'DivisionalQuantity'} = 0
SELF.Contr{'FNOperation'}
SELF.ErrorCode=SELF.Contr{'RESULTCODE'}
if SELF.ErrorCode=0 and (SELF.QueueSale.SaleCodeMark<>'') !отправляем маркировку
SELF.Contr{'Barcode'}= SELF.QueueSale.SaleCodeMark
SELF.Contr{'FNSendItemBarcode()'}
end
end
SELF.ErrorCode=SELF.Contr{'RESULTCODE'}
if SELF.ErrorCode<>0
SELF.ErrorDisc=SELF.Contr{'ResultCodeDescription'}
SELF.CancelCheck !аннулировать чек
break
end
if SELF.QueueSale.SaleStrDop<>''
SELF.Contr{'StringForPrinting'} = SELF.QueueSale.SaleStrDop
SELF.Contr{'PrintString'}
end