Взять кассу

Сканеры, кассы, ККТ и т.д.
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4553
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Взять кассу

Сообщение finsoftrz »

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

Взять кассу

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

finsoftrz писал(а): 20 Июнь 2018, 13:53Фик знает, не моя тема. Я тут такой же юзер.
Да, я уже понял. :) Тут скорее уже спор тупоконечников c остроконечниками (С) Гуливер. :)
Надо ли для каждой железки делать прямой обмен через порт, или всё-таки в 2018 г. уже есть смысл
работать через некий универсальный интерфейс драйвера, хотя и не бесплатный. Наверно - по обстановке. ;)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4553
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Взять кассу

Сообщение finsoftrz »

Я не про это. Управление через com-порт - это стандарт для различных девайсов. А вот как работает какая-то конкретная библиотека ("драйвер" атола, например), надо смотреть. Вы же говорите, что управление происходит по другому стандарту. Если я правильно понял. Чтобы с этим разобраться, надо более глубоко вникнуть в вопрос. Все зависит не только от библиотеки, но и от конкретного девайса.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4553
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Взять кассу

Сообщение finsoftrz »

Убил сегодня немало времени на pirit (оно же vici). В общем, ситуация такая.

Поскольку подключение по usb, вначале ставится эмулятор usb-com. Его можно взять на сайте Дримкаса (который сейчас активно продвигает vici). Для настройки и проверки используется программка Fito (аналог теста драйвера в Штрихе и Атоле). Это, в общем, стандартно для pirit.

Дальше интереснее. Кристалл-Сервис, который производит данные девайсы, раздает и свой OPOS драйвер. Это библиотечка для доступа через ole. OPOS - это старый стандарт, введенный MS со товарищами еще в 1994 году и поддерживаемый, в том числе, Штрихом и Атолом. Однако, как я понял, у Кристалл-Сервис это все в заброшенном виде, версия 1.0, при установке вывалилась ошибка. Вроде драйвер установился, но не заработал. Решил посмотреть у Атола. В старых бесплатных драйверах от 2008 года поддержки pirit нет. Она есть уже в платных драйверах от 2013 года. Причем, еще под старую модель. Попробовал, вроде x-отчет напечатал, с большими тормозами, наверно из-за триальности.

Дальше решил почитать, что обсуждается на форумах разработчиков. В основном, по последним моделям vici, так как стандартно драйвера сделали только для 1С. Оказалось, что другие используют прямую работу через com-порт. Например, известная контора BuhSoft и еще 2-3 разработчика отметились.

В общем, дальше начал смотреть доку по работе через com-порт. Некоторые вещи надо осмыслить, в конце концов запустил прогон бумаги и x-отчет. На самом деле, это много. :-) Самое сложное понять, как сформировать отправляемые команды. Надеюсь, дальше будет легче. Для примера, как выглядит печать x-отчета в приложении.

PiritDrv.init(5) !девайс на 5 com-порту
if PiritDrv.ErrorCode>0
FsMessagePr(clip(PiritDrv.ErrorDisc))
exit
.
PiritDrv.PrintReportX
PiritDrv.kill

А внутри класса так:
!===================================================================================
!
! Вывести x-отчет
!
FsKKMPirit.PrintReportX PROCEDURE
CODE

if SELF.Active = 0
return
end

if SELF.ClearOut()=0
return
end

SELF.BufOut=chr(02h) & clip(SELF.Pswd) & chr(27h) & '20' & all(chr(1Ch),16) & chr(03h)
SELF.SumCRC=SELF.GetCRC(SELF.BufOut)
SELF.BufOut=clip(SELF.BufOut) & SELF.SumCRC

if SELF.ComRef.Write(SELF.BufOut,len(SELF.BufOut)+1)=0
SELF.SetError(0,'Вывод X-отчета')
end
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7323
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Взять кассу

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

finsoftrz писал(а): 21 Июнь 2018, 21:10В старых бесплатных драйверах от 2008 года поддержки pirit нет. Она есть уже в платных драйверах от 2013 года.
Для теста можно попробовать гиперсовременную версию АТОЛ ДТО 8.16 от 2017/18 г.
По крайне мере в режиме чекового принтера всё работает точно с VICI.

А вот так кодами обмениваться через порт - жесть. Это же ещё потом как-то поддерживать придётся. :(
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4553
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Взять кассу

Сообщение finsoftrz »

Игорь, полистайте ради интереса описание команд для работы через com-порт с pirit, я его прикреплял в одном из сообщений. Там надо понять принцип оформления команды и как считается crc (не совсем очевидно, как сделать в кларионе). Программа Fito позволяет вводить команды в своем интерфейсе и пишет в лог, что посылает на девайс. У меня сложилось впечатление, что работать через com-порт ничуть не сложнее, чем через ole. Все достаточно разумно сделано и хорошо описано. И работает на порядок быстрее, чем через ole-надстройку.

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

Взять кассу

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

Ну не знаю. Я тоже уже много лет внимательно смотрю за этой темой …
Магнит - штрихи, Ашан - штрихи, Пятёра - атол, OK - атол, Леруа - штрихи и т.д.
У нас в регионе не видел я Пирит / VICI в крупных сетях. И вообще их не видел.
То, что они дешёвые - это ни о чём. Важна стоимость обслуживания, надёжность, расходники, поддержка производителя.
Единственно в чём с Вами согласен - это то, что на сайте VICI ископаемый софт и не рабочие ссылки, я это и сам видел.
Был бы у них нормальный драйвер, как у Штрих-М или АТОЛ - ни кто бы и не пытался хоть как-то прикрутить чужой.
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4553
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Взять кассу

Сообщение finsoftrz »

Я и сам был удивлен. Думал, есть у меня поддержка работы со Штрихами и Атолом, ничего больше и не надо. А тут какие-то пириты всплыли, с которыми непонятно как работать. И так всплыли, что мимо не обойти... Я думаю, тут дело в том, что пириты больше распространяются в одиночных магазинах и небольших сетях. У крупных сетей важна унификация и у них много денег. Кредитных... :-) У нас ситуация несколько иная. Сеть небольшая по сравнению с упомянутыми, развивается за счет поглощения одиночных магазинов. Те отдают имеющуюся технику по бросовой цене. Совсем бросовой... А на счет "нормального драйвера", просто выглядит поначалу непривычно. Зато четко понимаешь, что делаешь. В конечном итоге, в прикладном решении будет совсем без разницы, с чем работаешь. Код один и тот-же, что для Штрихов, что для Атолов, что для Пиритов. Все уберется внутрь класса. Там много и не надо, вся настройка в системном ПО от производителя.

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

Взять кассу

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

finsoftrz писал(а): 21 Июнь 2018, 23:50Проводимая сверху автоматизация розничной торговли сильно всколыхнуло отрасль их производства.
Я читал интервью представителя ФНС (всё делить на два), так там утверждалось, что уже 3-й раз отложенный переход всея Руси на ФФД 1.10 как раз связан с недостатком производственных мощностей фискальной техники. У нас в продаже есть любые модели … но из Москвы, конечно видней. :)

Если Вы обратили внимание, то после лоббирования ФЗ-54, стоимость среднего ФР просто выросла в 3 раза. Была 6тр, стала 18 тр (именно эту сумму "компенсирует" государство бизнесу). У всех кто разбирал ФР в душе родился крик. Чекопечатающий блок (SEIKO только в дорогих Штрихах и АТОЛАХ), блок питания, плата размером с пачку сигарет, 300 грамм пластмассы, 1.5 метра кабеля - в Китае это стоит $30, В России - $70. Наверно предполагается, что остальная себестоимость - это программное обеспечение (прошивка, драйвер) … Стоимость фискального накопителя (обычной карты памяти) в 10 тр - это просто бред. Т.е. цена явно перегрета.

Поэтому, как и везде есть лидеры рынка (Штрих и АТОЛ), дискаунтеры (VICI), Сбер вложился и реанимировал забытый богом и людьми Уральский Электромеханический завод (ЭВОТОР) и т.д. Вот только что из этого всего останется, когда закончится взрывной рост рынка благодаря ФЗ-54 … Поэтому упомянутые Вами крупные торговые сети, которые вкладывают крупные средства в автоматизацию предпочитают покупать пусть и дороже, но понадёжней.

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

Взять кассу

Сообщение finsoftrz »

Игорь Столяров писал(а): 22 Июнь 2018, 6:58Вот только что из этого всего останется, когда закончится взрывной рост рынка благодаря ФЗ-54 … Поэтому упомянутые Вами крупные торговые сети, которые вкладывают крупные средства в автоматизацию предпочитают покупать пусть и дороже, но понадёжней.
Когда и чем это все закончится, никто сейчас не знает. Пока только началось. Главное веселье отодвинуто до 2021 года.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7323
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Взять кассу

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

finsoftrz писал(а): 22 Июнь 2018, 12:55Главное веселье отодвинуто до 2021 года.
Что бы не случилось, аппетит спасёт бизнес. Ашан, Магнит, Диксик, ОK, Карусель и т.д. - не пропадут. :idied:
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4553
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Взять кассу

Сообщение finsoftrz »

Сделал все нужные функции для работы с pirit (vici) через com-порт. Тестировал пока печать сервисного документа (вывод строк и qr-кода) и набор служебных функций (промотка ленты, отрез, x-отчет). Не нашел функции "Продолжение печати", в Штриховском драйвере полезная вещь на случай замятия бумаги, например. Ну и, как писали, нет встроенной отправки sms/почты, надо самостоятельно реализовывать.

Вообще говоря, довольно много писанины получилось. Если нет задачи использовать в специализированных POS-системах, то проще все-же подключить ATOL. Для истории заголовок классика.

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

FsKKMPirit CLASS,TYPE,MODULE('FsKKMPirit.CLW'),LINK('FsKKMPirit.CLW')
Active        BYTE,       PRIVATE           !флаг активности
ComPort        LONG                         !номер com-порта
Pswd           STRING(10)                   !пароль
NameSotr       STRING(20)                   !имя оператора

BufOut         CSTRING(1024)                !выходной буфер
BufIn          CSTRING(1024)                !входной буфер
ParamIn        STRING(1280)                 !полученные параметры 16х80
PocketID       BYTE                         !идентификатор отправленного пакета
OperCode       BYTE                         !код выполняемой операции
SumCRC         STRING(2)                    !контрольная сумма

ComRef         &FsCom                       !класс работы с com-портом

ErrorCode      LONG                         !код ошибки
ErrorDisc      STRING(128)                  !описание ошибки 

KKM_NumCheck   STRING(20)                   !номер фискального документа (чека)
KKM_OperCount  STRING(20)                   !операционный счетчик
KKM_FlagFisc   STRING(20)                   !фискальны признак признак 
KKM_CashBoxStatus BYTE                      !статус денежного ящика (0-закрыт, 1-открыт)

Init            PROCEDURE (LONG pComPort, STRING pNameSotr)   !инициализация класса
Kill            PROCEDURE                   !отключение класса
Destruct        PROCEDURE                   !деструктор

Connect         FUNCTION (), BYTE           !начало работы
TestConnect     FUNCTION (), BYTE           !проверка связи
FeedDocument    PROCEDURE (LONG pRows)      !прогон ленты
ReportBreak     PROCEDURE                   !прерывание вывода отчета
OperCutCheck    PROCEDURE                   !отрез ленты
Beep            PROCEDURE                   !звуковой сигнал
OpenCashBox     PROCEDURE                   !открыть денежный ящик
GetStatusCashBox  PROCEDURE                 !получить статус денежного ящика

PrintReportX    PROCEDURE                   !Вывести x-отчет
PrintReportZ    PROCEDURE                   !Вывести z-отчет

OpenShift       FUNCTION (), BYTE           !открыть смену
OpenDoc         PROCEDURE (BYTE pType)      !открыть документ 
CloseDoc        PROCEDURE                   !закрыть документ 
CancelDoc       PROCEDURE                   !аннулировать документ

PrintString     PROCEDURE (STRING pStr, BYTE pAlign, BYTE pHight2, BYTE pWidth2)  !печатать строку
PrintBarCodeQR  PROCEDURE (STRING pStr)     !печать qr-кода
PrintSale       PROCEDURE (STRING pTovarName, REAL pKol, REAL pCena, BYTE pNalog)      !печать товарной позиции
PrintPay        PROCEDURE (REAL pSum, BYTE pType)   !печать оплаты
CashInOutCome   PROCEDURE (REAL pSum, STRING pName) !внесение или изъятие суммы (с наименованием купюры)

SendOrder       FUNCTION (), BYTE              !послать команду
ReadAnswer      FUNCTION (BYTE pTimes), BYTE   !получить ответ         

ClearOut        FUNCTION (), BYTE                   !Очистить исходящие сообщения
SetError        PROCEDURE (BYTE pReg, STRING pName) !Фиксировать ошибку
GetPocketID     PROCEDURE                           !получить идентификатор пакета 
GetCRC          FUNCTION (*CSTRING pBuf), STRING    !Расчет контрольной суммы 

DateFormat      FUNCTION (LONG pDate), STRING       !форматирование даты
DateDeFormat    FUNCTION (STRING pDate), LONG       !деформатирование даты
TimeFormat      FUNCTION (LONG pTime), STRING       !форматирование времени
TimeDeFormat    FUNCTION (STRING pTime), LONG       !деформатирование времени

SaveParamIn     PROCEDURE                           !сохранить входящие параметры
GetParamIn      FUNCTION (BYTE pNum), STRING        !получить входящий параметр

GetErrorRet     FUNCTION (STRING pCode), STRING     !получить ошибку выполнения команды
GetOperName     FUNCTION (BYTE pCode), STRING       !получить наименование операции

             END
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4553
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Взять кассу

Сообщение finsoftrz »

Тестовый пример выглядит примерно так.

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

   PiritDrv.init(5,'Слава')
   if PiritDrv.ErrorCode>0
      FsMessagePr(clip(PiritDrv.ErrorDisc))
      exit
   .
   PiritDrv.OpenDoc(1)
   PiritDrv.FeedDocument(1)
 PiritDrv.PrintBarCodeQR('09001785400000118984310PX8051522100000476712617218613594213116182124151')
   PiritDrv.FeedDocument(1)
   PiritDrv.PrintString('Здравствуй, Мир!',1,0,0)
   PiritDrv.FeedDocument(2)
   PiritDrv.CloseDoc
   PiritDrv.kill
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7323
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Взять кассу

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

Так а самый интересный вопрос: VICI электронный чек (SMS / email) через ОФД умеет отправлять ?
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4553
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Взять кассу

Сообщение finsoftrz »

Я вроде написал выше, что нет. Такие реквизиты в ОФД не передаются, надо организовывать самостоятельно из своей программы. Возможно, в будущих реализациях появится.
C6/C11, ШВС, tps/btrieve.
Ответить