finsoftrz писал(а): ↑28 Март 2024, 18:50
Точнее сказать, когда я поставил формирование комплексного реквизита строки в самое начало, ккм вернула ошибку, что пустой документ.
Привет Всем!
Разбирался с "пивом в кегах" для Horecа в начале года (поднимал эту тему, но тогда тишина была), вот
рабочий пример (все, как положено уходитв ЧЗ):
в секции данных сделал универсально (чтобы использовать для Атол и Штрих):
в Atol.inc добавил:
Код: Выделить всё
ATOL:Industry_Props GROUP,TYPE ! отраслевой реквизит 25/01/24
id_FedOrg STRING(3) ! идентификатор федерального органа исп.власти
doc_Date STRING(10) ! дата документа основания (как строка)
doc_Num STRING(10) ! номер документа основания
value_InPr STRING(20) ! значение отраслевого реквизита
END
и потом там же в очередь товаров:
Код: Выделить всё
! товар
ATOL:Goods QUEUE,TYPE
GoodsName STRING(64)
Price DECIMAL(20,2)
Qty DECIMAL(20,3)
MeasureUnit BYTE ! код единицы измерения: штучный, весовой и т.п. для ФФД 1.2 18/09/22
...
Industry_Props GROUP(ATOL:Industry_Props) . ! отраслевой реквизит 25/01/24
...
END
в Data кассовой процедуры:
Код: Выделить всё
константы для передачи "Отраслевого реквизита", в наст. момент это составной тег 1260: 25/01/24
beerKeg:id_FedOrg EQUATE('030') ! 1262 - идентификатор федерального органа исп.власти
beerKeg:doc_Date EQUATE('26.03.2022') ! 1263 - дата документа основания (передаю как строковая)
beerKeg:doc_Num EQUATE('477') ! 1264 - номер документа основания
beerKeg:value_InPr EQUATE('mode=horeca') ! 1265 - значение отраслевого реквизита
в подпрограмме передаче на кассу заполнил:
Код: Выделить всё
G.Industry_Props.id_FedOrg = beerKeg:id_FedOrg
G.Industry_Props.doc_Date = beerKeg:doc_Date
G.Industry_Props.doc_Num = beerKeg:doc_Num
G.Industry_Props.value_InPr = beerKeg:value_InPr
после открытия чека:
Код: Выделить всё
! О Т К Р Ы Т Ь чек:
....
ELSE ! чек успешно открыт
! Текст в заголовке:
if CLIP(GHeader.AccountStr) <> '' then SELF.PrintText(GHeader.AccountStr, LIBFPTR_TW_WORDS) .
! Регистрация списка товара:
LOOP Pos# = 1 TO RECORDS(QGoods) ! сканировать очередь товарных позиций
!- . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . - . -!
GET(QGoods, Pos#) ! считать запись очереди
....
if QGoods.DataMatrix <> '' then DO Atol10:Test_Mark . ! проверить КМ маркированного товара 31/03/23
! передать Отраслевой реквизит: 25/01/24
if QGoods.Industry_Props.id_FedOrg <> ''
SELF.SetParamStr(1262, QGoods.Industry_Props.id_FedOrg)
if QGoods.Industry_Props.doc_Date <> '' then SELF.SetParamStr(1263, QGoods.Industry_Props.doc_Date) .
if QGoods.Industry_Props.doc_Num <> '' then SELF.SetParamStr(1264, CLIP(QGoods.Industry_Props.doc_Num)) .
if QGoods.Industry_Props.value_InPr <> '' then SELF.SetParamStr(1265, CLIP(QGoods.Industry_Props.value_InPr)) .
SELF.ParamBuild
SELF.SetParamBiteArray(1260, SELF.GetParamBiteArray(LIBFPTR_PARAM_TAG_VALUE)) ! запись комплексного атрибута
еще важный момент при проверке макри:
Код: Выделить всё
! Входные параметры для метода beginMarkingCodeValidation():
SELF.SetParamBiteArray(LIBFPTR_PARAM_MARKING_CODE , CLIP(QGoods.DataMatrix)) ! код марки
SELF.SetParamInt(LIBFPTR_PARAM_MARKING_CODE_TYPE , LIBFPTR_MCT12_AUTO) ! определить автоматически
DO set:LIBFPTR_PARAM_MARKING_CODE_STATUS ! установить тег планируемый статус КМ (тег 2003)
! при продаже разливного пива при оказании услуг общественного питания в ФР передаётся GTIN, а не марка и коды в виде GTIN
! не подлежат проверки через ИСМ, поэтому при проверке КМ через ИСМ для GTIN отключаем передачу данных на сервер ИСМ
! и если это такой случай, то перед вызовом метода beginMarkingCodeValidation
! необходимо установить свойство LIBFPTR_PARAM_MARKING_NOT_SEND_TO_SERVER в значение TRUE 24/01/24
! дополнительные для некоторых типов:
case QGoods.mark_Type
of 18 ! 18-пиво в кеге 25/01/24
SELF.SetParamDouble(LIBFPTR_PARAM_QUANTITY, QGoods.Qty) ! количество товара (тег 1023)
SELF.SetParamInt(LIBFPTR_PARAM_MEASUREMENT_UNIT, QGoods.MeasureUnit) ! соответствует тегу 2108
SELF.SetParamBool(LIBFPTR_PARAM_MARKING_NOT_SEND_TO_SERVER, TRUE)
end !case
Описал все пункты, все успешно работает