Взять кассу

Сканеры, кассы, ККТ и т.д.
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 5650
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-ДоМу

Взять кассу

Сообщение Игорь Столяров »

finsoftrz писал(а): 27 Сентябрь 2021, 22:54 В доке есть метод проверки марок
А Вы отлаживали работу с маркировкой в ФФД 1.2 на боевом ФН 1.2 ?
Жаль, что класс АТОЛ 10, который нужен многим, у нас никто не поддерживает централизовано. :(
Как следствие - все делаем одну и туже работу с отладкой. :(
«V» значит Вендетта !
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 5650
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-ДоМу

Взять кассу

Сообщение Игорь Столяров »

Есть официальный ответ АТОЛ по ФН для маркировки:

Код: Выделить всё

Для тестовых работ вам нужен ФН 1.1 (МГМ) с литерой М, на ФН предыдущих версий работа будет не корректной.
Также вышла прошивка АТОЛ: 5.8.14

Код: Выделить всё

Из особенностей: она подходит только для стационарных касс. ФЛК для тега 2108 из неё удален, соответственно не важно передает ли верхнее ПО этот тег – чеки будут пробиваться (не обращая внимания на отсутствие тега 2108)
«V» значит Вендетта !
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 2941
Зарегистрирован: 06 Ноябрь 2014, 12:48

Взять кассу

Сообщение finsoftrz »

Да. В кассовой программе есть специальный раздел тестирования оборудования. Беру магазин с парой проходов. Есть период времени, когда поток покупателей небольшой и справляются на одном проходе. Можно 2-3 часа удаленно поработать. Это, конечно, от бедности. Ребята, у которых кассовый софт основной бизнес, организуют у себя стенды с физическим подключением поддерживаемых типов ккм.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 5650
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-ДоМу

Взять кассу

Сообщение Игорь Столяров »

finsoftrz писал(а): 28 Сентябрь 2021, 9:32 Ребята, у которых кассовый софт основной бизнес, организуют у себя стенды с физическим подключением поддерживаемых типов ккм.
Мечта ! Купить и держать хотя бы пару ФР разных производителей с МГМ-ФН - дорого.
А учитывая темпы наворотов с этими ФФД и прочей хренью - за пару лет всё превращается в тыкву. :(
Хорошо если у людей есть оборот, что можно позволить такие стенды. Не наш случай. :(
«V» значит Вендетта !
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 2941
Зарегистрирован: 06 Ноябрь 2014, 12:48

Взять кассу

Сообщение finsoftrz »

Это причина, по которой мы можем терять клиентов. Выход это, во первых, более узкая заточка софта, чтобы в нем был функционал, отсутствующий в более универсальных решениях (чтобы понять, что и как делать, нужно хорошо знать предметную область и иметь продолжительный опыт работы в ней, это создает эффект накопления инвестиций и поднимает стоимостную планку создания аналогичного решения). Во вторых, это кооперация наших усилий по определенным вопросам, так как ресурсов у каждого по отдельности мало, а между собой наши решения практически не конкурируют.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 5650
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-ДоМу

Взять кассу

Сообщение Игорь Столяров »

finsoftrz писал(а): 24 Сентябрь 2021, 12:03 Не надо указывать при проверке марок реквизиты количество, количество дробное, единица, как написано в примере в доке. Это какая-то специальная ситуация с молочкой. Если указать, то выдаст ошибку.
Можно спросить ?
При проверке КМ для штучного (!!!) товара, какое Вы указываете значение для LIBFPTR_PARAM_MARKING_CODE_STATUS (тег 2003) ?
В примере = 2, но это показано как проверять дробный товар. По идее для штучного товара = 1 ?

А по самой документации ФФД 1.2 получается, что:
Реквизиты "количество предмета расчета" (тег 1023) и "мера количества предмета расчета" (тег 2108) включаются в состав
запроса о коде маркировки в случае, если реквизит "планируемый статус товара" (тег 2003) принимает значения "2" или "4".
Поэтому для LIBFPTR_PARAM_MARKING_CODE_STATUS = 1 получается всё верно: не надо указывать кол-во и единицу.

P/S: Я извиняюсь, что пристаю с вопросами - просто делаю вслепую и спросить не у кого, кто реально работает. :(
МГМ ФН-М для работы с маркировкой под ФФД 1.2 уже наскулил, но он в пути из Москвы ...
«V» значит Вендетта !
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 2941
Зарегистрирован: 06 Ноябрь 2014, 12:48

Взять кассу

Сообщение finsoftrz »

finsoftrz писал(а): 24 Сентябрь 2021, 12:03 С маркировкой заработало. Есть там некоторые тонкости.
1. Не надо указывать при проверке марок реквизиты количество, количество дробное, единица, как написано в примере в доке. Это какая-то специальная ситуация с молочкой. Если указать, то выдаст ошибку.
2. В настройке ккм не забыть прописать адрес сервера проверки марок и порт.
3. Лучше проверять на ошибку выполнение функций, в примере в доке почему-то без этого.
Надо, наверно, еще реализовать обратную операцию для акцептованных марок, если возникли проблемы при печати чека и мы его аннулируем.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 2941
Зарегистрирован: 06 Ноябрь 2014, 12:48

Взять кассу

Сообщение finsoftrz »

Код: Выделить всё

!===================================================================================
!
! Проверка марок ффд 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)
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 5650
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-ДоМу

Взять кассу

Сообщение Игорь Столяров »

Спасибо ! Очень интересно. :)

1. С показом номера попыток получения результата классная идея. Скопипастю, с Вашего разрешения. :)

2. В общем контексте работы с драйвером АТОЛ 10 обратите внимание, что константу LIBFPTR_ERROR придумал
отец-основатель класса (АДМИН) для внутренних нужд. В оригинальных классах драйвера её нет ...
И есть методы драйвера которые возвращают именно код ошибки, а не её наличие -1 (LIBFPTR_ERROR).
Поэтому, что бы гарантировать совместимость с новыми версиями драйвера безопасней проверять на:

Код: Выделить всё

    If libfptr_begin_marking_code_validation(SELF.fptr) <> LIBFPTR_OK  ! =LIBFPTR_ERROR
        обработка ошибки .... и т.д.
Я так думаю. :)
«V» значит Вендетта !
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 2941
Зарегистрирован: 06 Ноябрь 2014, 12:48

Взять кассу

Сообщение finsoftrz »

Даже в голову не пришло проверить, названо в стиле имен переменных драйвера. Это важно имена переменных называть так, чтобы можно было сразу понимать, для чего они используются и избегать потенциальных конфликтов с другими библиотеками. Но менять мне уже лень.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 2941
Зарегистрирован: 06 Ноябрь 2014, 12:48

Взять кассу

Сообщение finsoftrz »

В коде выше еще кусок с переводом в блок лишний, осталось от пробы примера с количеством. Я убрал у себя.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 5650
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-ДоМу

Взять кассу

Сообщение Игорь Столяров »

finsoftrz писал(а): 04 Октябрь 2021, 11:16 if SELF.FormatOFD<>2 !1.2
Вы говорили, что устанавливаете версию ФФД в настройке кассового софта.
Мы сейчас тоже так сделали - но ещё получаем версию ФФД из настроек фискализации ФН в ОФД для проверки.
Думаю, что после теста на реальном ФН с ФФД 1.2 вообще уберём настройку.

Код: Выделить всё

! --- Получить версию ФФД
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
«V» значит Вендетта !
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 2941
Зарегистрирован: 06 Ноябрь 2014, 12:48

Взять кассу

Сообщение finsoftrz »

У меня в этом вопросе нет четкой уверенности, как поступить оптимально. Чисто на интуиции, когда находимся в зоне турбулентности, предпочтительнее уменьшить зависимость от внешнего софта.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 5650
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-ДоМу

Взять кассу

Сообщение Игорь Столяров »

finsoftrz писал(а): 04 Октябрь 2021, 15:58 когда находимся в зоне турбулентности
Вот и я о том же, только у меня основная угроза - это пользователь, который может работать с непредсказуемым
девайсом с неведомого компьютера (драйвер). И вопрос даже не в квалификации пользователя.

Просто ФФД 1.2 не совместимо с предыдущими релизами и для отсутствия ошибок здесь нужно учитывать:
- Версию прошивки ФР (поддержка ФФД 1.2);
- Версия драйвера ФР (наличие методов работы по ФФД 1.2);
- Поддержка ФН ФФД 1.2 и его регистрация в ОФД по ФФД 1.2.

Мрак ! Не хочется перекладывать принятие решения на пользователя, который далёк от этих наворотов. :(
«V» значит Вендетта !
Аватара пользователя
SergioRaguzini
Активист
Сообщения: 139
Зарегистрирован: 08 Декабрь 2009, 19:16
Откуда: Краснодарский край

Взять кассу

Сообщение SergioRaguzini »

Привет Всем!
Тоже заказал прошивку для АТОЛ ФФД 1.2 и МГМ-ФН (дорого блин все эти вещи получаются), жду пока (ФН из Москвы едет)...

Прошу поделиться ссылкой где можно почитать описание требований и посмотреть примеры реализации маркированной продукции для АТОЛ и(или) Штрих?
Спасибо
Ответить