ATOL драйвер 10.x

Сканеры, кассы, ККТ и т.д.
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
Admin
Администратор
Сообщения: 3476
Зарегистрирован: 05 Июль 2005, 14:59
Откуда: Хабаровск
Контактная информация:

ATOL драйвер 10.x

Сообщение Admin » 01 Август 2019, 15:21

zmi писал(а):
01 Август 2019, 12:20
А кто-нибудь с признаком АГЕНТ и данными поставщика чек выводил?
Я на старом драйвере выводил.
На новом код написал как примерно должен быть но не проверял на реальном аппарате.
Некогда пока.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса

zmi
Новичок
Сообщения: 19
Зарегистрирован: 26 Октябрь 2017, 21:51

ATOL драйвер 10.x

Сообщение zmi » 05 Август 2019, 17:37

Опаньки! Все-таки проблемка в тестовом классе оказалась. Нельзя так с комплексными атрибутами :), по-видимому, при их формировании чистятся какие-то предыдущие реквизиты, и в результате возникает ошибка "Отсутствует обязательный реквизит". Перестановки выше-ниже всей обработки агента-поставщика не помогают. Сделал, как в описании драйвера 10, через буферную переменную (String), т.е формирование в буфер, потом формирование всех реквизитов для регистрации позиции, затем запись комплексного атрибута из буфера. Так нормально прокатило.
Еще один момент надо обрабатывать: если задан признак АГЕНТ, то ИНН поставщика обязателен для заполнения, иначе ошибку драйвер выдает.

Аватара пользователя
Admin
Администратор
Сообщения: 3476
Зарегистрирован: 05 Июль 2005, 14:59
Откуда: Хабаровск
Контактная информация:

ATOL драйвер 10.x

Сообщение Admin » 06 Август 2019, 6:54

zmi писал(а):
05 Август 2019, 17:37
через буферную переменную
Сорян, я раньше про это хотел написать но что то забыл. Там и в примере такая метода используется.
p.s.По мне так спорное решение у них получилось с генерацией массива.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса

deesoft
Прохожий
Сообщения: 3
Зарегистрирован: 05 Ноябрь 2018, 18:49

ATOL драйвер 10.x

Сообщение deesoft » 21 Август 2019, 22:09

Коллеги, кто нибудь пробовал на ДТО10 через COM интерфейс добавлять в чек агентские теги. ?
Там тип данных массив байт.

zmi
Новичок
Сообщения: 19
Зарегистрирован: 26 Октябрь 2017, 21:51

ATOL драйвер 10.x

Сообщение zmi » 03 Сентябрь 2019, 12:09

finsoftrz писал(а):
06 Июль 2019, 16:56
Кроме работы через их dll напрямую, можно еще посмотреть на web сервер и vbscript. Как я понял, мэйнстрим у них это web сервер. Некая унификация, ставишь с ккм и можешь бить чеки откуда угодно через http запросы, передавая задания в формате json... Будем смотреть и думать... :-)
Вот так-так... Не успел порадоваться непростому внедрению печати чека, как поступила новая задача - нужна сетевая версия, чтобы кучка пользователей могла печатать на один аппарат, поскольку не хотят тратиться ни на сами аппараты, ни на накопители для них. Чешу репу, пытаясь понять, с какого боку подойти к WEB-серверу и json. Для начала хотелось бы понять, что это такое вообще этот "WEB-сервер", для работы с которым требуется "требуется установленная Java версии 1.8 и выше" (такое исчерпывающее описание). Где взять, как настроить.
Может, кто уже разбирался с этой веткой работы драйвера. Подскажите, плиз, чего-где посмотреть.

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4243
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

ATOL драйвер 10.x

Сообщение Игорь Столяров » 03 Сентябрь 2019, 12:21

zmi писал(а):
03 Сентябрь 2019, 12:09
Подскажите, плиз, чего-где посмотреть.
Может быть зайти на вопрос с другой стороны ?
На компьютере с подключенным ФР крутится программка, которая проверяет некую папку на наличие файлов и печатает из неё чеки.
Распечатанные чеки записывает в список - что-то вроде протокола.
Все остальные компьютеры (по локальной сети, через Web-запросы и т.д.) просто скидывают в эту папку чеки в виде
файлов, например в формате JSON или XML. Всё. Дёшево и сердито. Называется принт-сервер кассовых чеков. :)
Последний раз редактировалось Игорь Столяров 03 Сентябрь 2019, 15:18, всего редактировалось 1 раз.
«V» значит Вендетта !

Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 1344
Зарегистрирован: 06 Ноябрь 2014, 12:48

ATOL драйвер 10.x

Сообщение finsoftrz » 03 Сентябрь 2019, 14:12

У меня аналогичная схема несколько лет работает. Выводят чеки с терминального сервера по разным фирмам и видам деятельности. Только не журнал ведется, а файлы чеков после печати переносятся в специальную папку архива. А вызывающая программа смотрит файл квитанции, забирает из него номер чека и сохраняет в исходном документе (кассовом ордере). У пользователя после отправки чека на печать прогрессор, пока не получит квитанцию. Просто, как капуста.
Рязань решает.

zmi
Новичок
Сообщения: 19
Зарегистрирован: 26 Октябрь 2017, 21:51

ATOL драйвер 10.x

Сообщение zmi » 03 Сентябрь 2019, 16:53

Вот ведь, что значит закостенелость мышления. :) И у меня это уже реализовано: по этой же кнопке, но по другой ветке вызывается внешний сторонний обработчик и с блокировкой дальнейшей работы, прогрессом и т.д. И протокол обмена с этим обработчиком через SQL-ную таблицу. Буду думать с этой стороны. :) Спасибо.

Аватара пользователя
Admin
Администратор
Сообщения: 3476
Зарегистрирован: 05 Июль 2005, 14:59
Откуда: Хабаровск
Контактная информация:

ATOL драйвер 10.x

Сообщение Admin » 04 Сентябрь 2019, 1:48

Кстати там есть подключение по IP в драйвере. Я сейчас использую. Печать с нескольких рабочих мест.
Но у меня так редко в этом месте печатаются чеки что я даже не стал проверять что произойдет при попытке одновременной печати :facepalm:
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4243
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

ATOL драйвер 10.x

Сообщение Игорь Столяров » 05 Сентябрь 2019, 20:56

А можно я спрошу детский вопрос ? Иначе тупик какой-то.
Вот эти строки в примере, на что вообще влияют ?

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

!  SELF.SetParam(LIBFPTR_SETTING_ACCESS_PASSWORD, 'пример пароля')
!  SELF.SetParam(LIBFPTR_SETTING_USER_PASSWORD, 'Sample_Password')
Что бы не задавал (например: 28, 29, 30 и т.д.) получаю ошибку "Неверный пароль".
В таблице кассиров ФР эти номера есть. А

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

   GetParamStr(LIBFPTR_PARAM_OPERATOR_ID)
всегда возвращает 0 (ноль). Убираю задание паролей - всё работает прекрасно.
Как-то в АТОЛ ДТО8 понятней было - там пароль просто задавал номер кассира в таблице настроек. :(
«V» значит Вендетта !

Аватара пользователя
Admin
Администратор
Сообщения: 3476
Зарегистрирован: 05 Июль 2005, 14:59
Откуда: Хабаровск
Контактная информация:

ATOL драйвер 10.x

Сообщение Admin » 06 Сентябрь 2019, 1:44

Игорь Столяров писал(а):
05 Сентябрь 2019, 20:56
Вот эти строки в примере, на что вообще влияют ?
Не знаю. Просто передрал ASIS. Не применял пока
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4243
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

ATOL драйвер 10.x

Сообщение Игорь Столяров » 08 Сентябрь 2019, 22:38

zmi писал(а):
05 Август 2019, 17:37
Все-таки проблемка в тестовом классе оказалась.
Не совсем. Там просто есть особенность.
SELF.ParamBuild (а точнее используемый им вызов libfptr_util_form_tlv()) не только записывает буфер, но и сбрасывает
список сделанных ранее установок всеми разношёрстными методами SELF.SetParam ...
Значит просто нужно до начала формирования комплексного атрибута очистить список ранее сделанных установок, т.е.

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

  IF QGoods.FlagAgent
      SELF.SetParamInt(1222, QGoods.FlagAgent) ! продажа товара комитента как агент
      
      ! данные комитента
      IF CLIP(QGoods.Committent.Phone) <> '' OR CLIP(QGoods.Committent.Name) <> ''
      
          SELF.ParamBuild  ! << --- ВЫПОЛНИТЬ ЗАПИСЬ ДЛЯ ТОГО, ЧТО БЫ ОЧИСТИТЬ СПИСОК РАНЕЕ СДЕЛАННЫХ УСТАНОВОК
          
          ! А вот теперь формируем НОВЫЙ список значений из которых и будет состоять комплексный атрибут
      
          IF CLIP(QGoods.Committent.Phone) <> '' THEN SELF.SetParamStr(1171, QGoods.Committent.Phone) END ! Телефон
          IF CLIP(QGoods.Committent.Name) <> '' THEN SELF.SetParamStr(1225, QGoods.Committent.Name) END ! Наименование
          SELF.ParamBuild
          SELF.SetParamBiteArray(1224, SELF.GetParamBiteArray(LIBFPTR_PARAM_TAG_VALUE)) ! Запись комплексного атрибута
      END
      IF CLIP(QGoods.Committent.INN) <> '' THEN SELF.SetParamStr(1226, QGoods.Committent.INN) END ! ИНН  
   END
И так для всех комплексных атрибутов. А в остальном - дела идут как никогда ! :)
«V» значит Вендетта !

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4243
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

ATOL драйвер 10.x

Сообщение Игорь Столяров » 11 Сентябрь 2019, 7:26

Небольшая помарка в классе Atol10.SetParamDateTime - из-за неё не устанавливаются секунды и дата чека коррекции:

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

Atol10.SetParamDateTime    PROCEDURE(LONG lParam, <LONG lDate>, <LONG lTime>)
….
  libfptr_set_param_datetime(SELF.fptr, LIBFPTR_PARAM_DATE_TIME, YEAR(d), MONTH(d), DAY(d), SUB(FORMAT(t,@T04),1,2), |
   SUB(FORMAT(t,@T04),4,2), SUB(FORMAT(t,@T04),6,2))  
   
   ! ПРАВИЛЬНО: lParam вместо LIBFPTR_PARAM_DATE_TIME и SUB(FORMAT(t,@T04),7,2) вместо SUB(FORMAT(t,@T04),6,2)
или можно вообще упростить метод:

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

Atol10.SetParamDateTime  Procedure(LONG lParam, <LONG lDate>, <LONG lTime>)
Loc:Date  Long
Loc:Time  Long
  Code
  If Self.FlagLoaded = True
     If Omitted(3) = False then Loc:Date = lDate else Loc:Date = ToDay().
     If Omitted(4) = False then Loc:Time = lTime else Loc:Time = Clock().
     libfptr_set_param_datetime(Self.fptr, lParam, Year(Loc:Date), Month(Loc:Date), Day(Loc:Date), |
                      Sub(Format(Loc:Time,@T05),1,2), Sub(Format(Loc:Time,@T05),3,2), Sub(Format(Loc:Time,@T05),5,2))
  end
«V» значит Вендетта !

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4243
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

ATOL драйвер 10.x

Сообщение Игорь Столяров » 13 Сентябрь 2019, 8:06

Кто-нибудь пробовал не фискальную печать с драйвером АТОЛ ДККТ 10 ?
Что-то не то в консерватории. :(

1. Есть ФР с шириной строки 32 символа. Применяем 7 шрифт - текст сжимается до 42 символов в строке.
Но печатается всё равно 32 символа в строке, только теперь сжатым шрифтом.
А как напечатать текст сжатым шрифтом на всю ширину кассовой ленты ?

2. Можно как-то получить для конкретного размера шрифта, сколько символов поместится в строке ?
«V» значит Вендетта !

Аватара пользователя
Admin
Администратор
Сообщения: 3476
Зарегистрирован: 05 Июль 2005, 14:59
Откуда: Хабаровск
Контактная информация:

ATOL драйвер 10.x

Сообщение Admin » 13 Сентябрь 2019, 8:13

Игорь Столяров писал(а):
13 Сентябрь 2019, 8:06
1. Есть ФР с шириной строки 32 символа. Применяем 7 шрифт - текст сжимается до 42 символов в строке. Но печатается всё равно 32 символа в строке, только теперь сжатым шрифтом.
м.б. это?
https://kkmspb.ru/kontrolno-kassovaya-t ... ol-30F.php
Игорь Столяров писал(а):
13 Сентябрь 2019, 8:06
2. Можно как-то получить для конкретного размера шрифта, сколько символов поместится в строке ?
http://blog.atol.ru/archives/7546
т.е. создаем для себя внутреннюю таблицу вариантов.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса

Ответить