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
Описал все пункты, все успешно работает