А Вы отлаживали работу с маркировкой в ФФД 1.2 на боевом ФН 1.2 ?
Жаль, что класс АТОЛ 10, который нужен многим, у нас никто не поддерживает централизовано.
Как следствие - все делаем одну и туже работу с отладкой.
А Вы отлаживали работу с маркировкой в ФФД 1.2 на боевом ФН 1.2 ?
Код: Выделить всё
Для тестовых работ вам нужен ФН 1.1 (МГМ) с литерой М, на ФН предыдущих версий работа будет не корректной.
Код: Выделить всё
Из особенностей: она подходит только для стационарных касс. ФЛК для тега 2108 из неё удален, соответственно не важно передает ли верхнее ПО этот тег – чеки будут пробиваться (не обращая внимания на отсутствие тега 2108)
Мечта ! Купить и держать хотя бы пару ФР разных производителей с МГМ-ФН - дорого.
Можно спросить ?
Поэтому для LIBFPTR_PARAM_MARKING_CODE_STATUS = 1 получается всё верно: не надо указывать кол-во и единицу.Реквизиты "количество предмета расчета" (тег 1023) и "мера количества предмета расчета" (тег 2108) включаются в состав
запроса о коде маркировки в случае, если реквизит "планируемый статус товара" (тег 2003) принимает значения "2" или "4".
finsoftrz писал(а): ↑24 Сентябрь 2021, 12:03 С маркировкой заработало. Есть там некоторые тонкости.
1. Не надо указывать при проверке марок реквизиты количество, количество дробное, единица, как написано в примере в доке. Это какая-то специальная ситуация с молочкой. Если указать, то выдаст ошибку.
2. В настройке ккм не забыть прописать адрес сервера проверки марок и порт.
3. Лучше проверять на ошибку выполнение функций, в примере в доке почему-то без этого.
Надо, наверно, еще реализовать обратную операцию для акцептованных марок, если возникли проблемы при печати чека и мы его аннулируем.
Код: Выделить всё
!===================================================================================
!
! Проверка марок ффд 1.2
!
FsKKMAtol.TestMarks FUNCTION (BYTE Reg)
loc:i long
loc:ok byte
loc:flagw byte
loc:numCycle byte
window WINDOW('Проверка марок'),AT(,,260,57),FONT('MS Sans Serif',8,,),IMM,GRAY,DOUBLE,MASK,MDI
STRING('Марка'),AT(9,12,245,10),USE(?String1)
STRING('Попытка:'),AT(9,30,165,10),USE(?String2)
END
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:flagw=0
loc:ok=1
loop loc:i=1 to records(SELF.QueueSale)
get(SELF.QueueSale,loc:i)
if SELF.QueueSale.SaleCodeMark=''
cycle
end
if len(clip(SELF.QueueSale.SaleCodeMark))<>29 !блоки
if SELF.QueueSale.SaleKol>1
SELF.QueueSale.SaleName='блок ' & SELF.QueueSale.SaleKol & 'шт ' & SELF.QueueSale.SaleName
SELF.QueueSale.SaleCena=round(SELF.QueueSale.SaleCena*SELF.QueueSale.SaleKol,0.01)
SELF.QueueSale.SaleKol=1
end
end
if loc:flagw=0
loc:flagw=1
open(window)
end
?String1{prop:text}=SELF.QueueSale.SaleCodeMark
?String2{prop:text}='Попытка: 1'
display
SELF.SetParamInt(LIBFPTR_PARAM_MARKING_CODE_TYPE, LIBFPTR_MCT12_AUTO)
SELF.SetParamStr(LIBFPTR_PARAM_MARKING_CODE,clip(SELF.QueueSale.SaleCodeMark))
if Reg=0 !продажа
SELF.SetParamInt(LIBFPTR_PARAM_MARKING_CODE_STATUS,LIBFPTR_MES_PIECE_SOLD)
else !возврат
SELF.SetParamInt(LIBFPTR_PARAM_MARKING_CODE_STATUS,LIBFPTR_MES_PIECE_RETURN)
end
SELF.SetParamBool(LIBFPTR_PARAM_MARKING_WAIT_FOR_VALIDATION_RESULT, true)
SELF.SetParamInt(LIBFPTR_PARAM_MARKING_PROCESSING_MODE, 0)
if libfptr_begin_marking_code_validation(SELF.fptr)=LIBFPTR_ERROR
loc:ok=0
SELF.GetError
break
end
loc:numCycle=1
loop
sleep(400)
if libfptr_get_marking_code_validation_status(SELF.fptr)=LIBFPTR_ERROR
loc:ok=0
SELF.GetError
break
end
ok#=SELF.GetParamBool(LIBFPTR_PARAM_MARKING_CODE_VALIDATION_READY)
if ok#=1
break
end
loc:numCycle+=1
?String2{prop:text}='Попытка: ' & loc:numCycle
display
end
if loc:ok=0
break
end
SELF.QueueSale.SaleTestMarkResult=SELF.GetParamInt(LIBFPTR_PARAM_MARKING_CODE_ONLINE_VALIDATION_RESULT)
put(SELF.QueueSale)
if libfptr_accept_marking_code(SELF.fptr)=LIBFPTR_ERROR
loc:ok=0
SELF.GetError
break
end
end
if loc:flagw=1
close(window)
end
return(loc:ok)
Код: Выделить всё
If libfptr_begin_marking_code_validation(SELF.fptr) <> LIBFPTR_OK ! =LIBFPTR_ERROR
обработка ошибки .... и т.д.
Вы говорили, что устанавливаете версию ФФД в настройке кассового софта.
Код: Выделить всё
! --- Получить версию ФФД
Atol10.GetVersionFFD Procedure() !,LONG
Code
If Self.FlagLoaded = True
Self.SetParamInt(LIBFPTR_PARAM_FN_DATA_TYPE, LIBFPTR_FNDT_FFD_VERSIONS)
Self.FNQueryData()
RETURN Self.GetParamInt(LIBFPTR_PARAM_FFD_VERSION)
else
RETURN 0
end
Вот и я о том же, только у меня основная угроза - это пользователь, который может работать с непредсказуемым