Взять кассу

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

Взять кассу

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

finsoftrz писал(а): 07 Октябрь 2021, 15:41 В ффд 1.2 про алкоголь нет ни слова.
Вот здесь https://data.nalog.ru/html/sites/www.kk ... o_mark.pdf
вышли разъяснения и рекомендации ФНС по заполнению чека на алкашку по ФФД 1.2
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4559
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Взять кассу

Сообщение finsoftrz »

Не увидел ничего про ффд 1.2. Пример относится к февралю 2021 года, ффд 1.05.
C6/C11, ШВС, tps/btrieve.
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Взять кассу

Сообщение kreator »

finsoftrz писал(а): 13 Октябрь 2021, 19:04 Не увидел ничего про ффд 1.2. Пример относится к февралю 2021 года, ффд 1.05.
:shock: :shock: :shock: Как не увидел? В заголовке таблицы об этом!
We are hard at work… for you. :)
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4559
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Взять кассу

Сообщение finsoftrz »

А, точно. А я содержание и даты посмотрел. Забавное еще слово рекомендуется рядом с ктн.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7327
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Взять кассу

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

finsoftrz писал(а): 13 Октябрь 2021, 20:32 Забавное еще слово рекомендуется рядом с ктн
Так это как раз самое интересное место. EAN и КМ товара передавать не надо (т.к. ЕГАИС), но рекомендуется. :)
И нужно учитывать, что это розничный чек на ФЛ. Если чек по ФФД 1.2 на ЮЛ/ИП то там ещё теги добавляются.
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4559
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Взять кассу

Сообщение finsoftrz »

Такое ощущение, что они взяли какой-то старый текст и слегка подрихтовали. Какой ффд 1.2 в февральском чеке? Я так думаю, что чиновники не договорились между собой по данному вопросу. Два разных ведомства. По логике, смысла передавать алкогольную марку нет. Видимо, поэтому в ффд 1.2 алкоголь и не упоминается. Возможно, через какое-то время дадут более конкретное правило.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7327
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Взять кассу

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

Наверно да. Есть какой-то пример и в него вносятся уточнения и рекомендации.

По логике нет смысла в дублировании передаваемой информации. Если в ОФД
уходят данные о продаже (в т.ч. и марки), то зачем ещё раз передавать это же
в "Честный знак", ЕГАИС, Меркурий ? Но просто так никто свой кусок хлеба не
отдаст и вопросы сопряжения систем контроля будет не простым и долгим.
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7327
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Взять кассу

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

АТОЛ объяснил политику партии с ФФД 1.2
Если (вдруг) кто не смотрел - в файле основные лозунги.
Вложения
Вебинар АТОЛ 23 ноября.pdf
(877.64 КБ) 219 скачиваний
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
SergioRaguzini
Старожил
Сообщения: 234
Зарегистрирован: 08 Декабрь 2009, 19:16
Откуда: Краснодарский край
Благодарил (а): 6 раз

Взять кассу

Сообщение SergioRaguzini »

Спасибо! Ждал вебинар, в нужный день забыл про него
Игорь Столяров писал(а): 23 Ноябрь 2021, 17:11 АТОЛ объяснил политику партии с ФФД 1.2
Если (вдруг) кто не смотрел - в файле основные лозунги.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7327
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Взять кассу

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

SergioRaguzini писал(а): 23 Ноябрь 2021, 17:30 в нужный день забыл про него
Не расстраивайтесь. Где то есть запись ... но там в общем-то час читали этот файл и показывали
картинки из него, как испанцы бусы аборигенам. ;)

Раздражали не столько "фифекты фикции" дикторов, сколько щелчки мышами по столу с микрофоном.
Потом отвечали на вопросы. По сути всё свелось к тому, что пишите в тех. поддержку - там Вам ответят.

Впрочем, был один умный мужик, который хоть рассказал, что все эти навороты с этапами списания
маркировки в ФФД 1.2 обусловлены требованиями крупных ретейлеров для проведения программ лояльности.
Миром правят Магниты, Пятёрочки, Карусели и прочие Ашаны. :(
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
SergioRaguzini
Старожил
Сообщения: 234
Зарегистрирован: 08 Декабрь 2009, 19:16
Откуда: Краснодарский край
Благодарил (а): 6 раз

Взять кассу

Сообщение SergioRaguzini »

Привет Всем!

Думал "сигареты" меня не коснутся, т.к. знаю, что сейчас иногда маленькие магазины от продажи табака отказываются.... Однако, приходится....

Сегодня, купил для тестов пачку сигарет, смотрю марка на пачке вроде бы та же, которая была год назад (не курю, поэтому не сталкивался, но вроде такая же)...

ранее для табака передавалось:

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

   ?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 (код товарной номенклатуры)

А сейчас для ФФД 1.2 (видимо, принцип будет актуален не только для табака, но и для других маркированных изделий), есть разные "теги", а как на практике,что делать не знаю. Например, есть пачка сигарет, сканировали EAN, марку, а как дальше передать? В чем будет (и будет ли) отличие если это "молоко"?

прошу поделиться куском кода передачи маркировки для формата 1.2 в ШТРИХ-М

Спасибо

p.s. прошу не кидать тапками - искал в интернете примеры, но не нашел, к сожалению...
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7327
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Взять кассу

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

SergioRaguzini писал(а): 02 Декабрь 2021, 14:29 ранее для табака передавалось:
Ну это какая-то очень старая реализация работы с маркировкой.
У нас для ФФД 1.1 работает вот так (аналогично АТОЛ10):

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

  MyFRS.Object{'Password'} = Clip(MyFRS.FRPass)  ! За каким-то лядом пароль
  MyFRS.Object{'BarCode'}  = Marking.Dump  ! Весь код марки (любой)
  MyFRS.Object{'FNSendItemBarcode'}
  ... 
  If MyFRS.Object{'FNOperation'} = 0 then и т.д и т.п.
Что касаемо ФФД 1.2 - даже не представляю. Судя по АТОЛ10 - всё будет очень не просто.
Если появится у нас Заказчик с грошами и девайс - с удовольствием попробую. Пока нет.

И ещё. Для ККМ нужна лицензия на работу с маркировкой. Не помню я её маркетинговое название у Штрих-М.
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4559
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Взять кассу

Сообщение finsoftrz »

Привет, Сергей.
Для штрихов такой код рабочий.

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

!===================================================================================
!
! Проверка марок ффд 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)        
Вызывается после открытия чека. Проверять можно сразу все марки, хотя это хотел перепроверить.
Если в 2 словах, то алгоритм такой.
Вначале посылаем на сервер запрос на проверку марки методом FNCheckItemBarcode.
Получаем ответ методом KMServerCheckingStatus. Там битовая маска, при успехе будет число 15.
Дальше по замыслу чудотворцев кассир должен сообщить покупателю, что какие-то марки не прошли проверку (посмотреть на экране, распечатать пречек). Покупатель уже решает, будет он этот товар брать или нет. Разумеется, таким никто в продуктовке заниматься не будет, поэтому сразу выполняем метод FNAcceptMarkingCode, который посылает на сервер проверки сообщение, что товар с маркой будет продан.
В конце еще есть код для случая, когда строка в чек выводится нестандартно, модифицируем название товара.

При регистрации строки надо учесть, что появились новые предметы расчета PaymentItemSign: 33-маркируемй и акцизный, 31-маркируемый и безакцизный. Плюс передается код единицы измерения MeasureUnit (0 для штук, 11 для кг). Мы это уже обсуждали.
Кусок кода для регистрации строки в чеке выглядит так.

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

           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
Ну и наконец, когда регистрируете фн, то надо включать флажок, что работаем с маркировкой. Флажка подакцизных товаров недостаточно. И в актуальной прошивке у штрихов надо явно слать вид деятельности при формировании чека, если даже он один. Иначе будет ошибка. Скорее всего пофиксят в следующих релизах.

У меня сейчас по ффд 1.2 запущены тройка атолов и один штрих. По атолам вопросов пока не всплывает, у штриха рандомно изредка вываливается сообщение, что команда недоступна в данном режиме. Причину не определили.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
SergioRaguzini
Старожил
Сообщения: 234
Зарегистрирован: 08 Декабрь 2009, 19:16
Откуда: Краснодарский край
Благодарил (а): 6 раз

Взять кассу

Сообщение SergioRaguzini »

Игорь, Вячеслав, Спасибо!!!

Я тут пытался узнать про это у наших местных IT-шников-1C-ников - вроде как имеющих сертификат какой-то у них называется "1С-профессионал" или как-то так, а вот на самом деле - они вообще(!) не в теме - отвечают -"XЕЗ", мы типа "получаем готовые обработки из головного офиса и просто их подключаем, а что и как внутри не вникаем"... Во как надо быть "профессионалом"

Буду пробовать.

:ty:
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7327
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Взять кассу

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

На самом деле так и должно быть, а не вот это вот всё.
Производитель драйвера должен реализовать готовые шаблоны операций, с параметрами настройки.
Программист - просто заполнить шаблон операции, выполнить вызов и получить результат.
Зачем куча людей долбятся с этой маркировкой и кассами, делая десятки раз одно и то же - непонятно. :(
Почему нет унифицированного протокола взаимодействия с ККМ и приходится каждый раз одно и тоже для разных моделей - непонятно. :(
За теми кто отстал - не возвращаться. (С) Кодекс
Ответить