Страница 7 из 39
					
				Класс для API АТОЛ «Драйвер ККТ версии 10»
				Добавлено: 18 Январь 2019, 10:36
				 Игорь Столяров
				Привет всем !
Класс работы с драйвером ККТ АТОЛ 10 на основе JSON заданий. 
Форк класса ADMIN'а: 
Driver10.zip
Класс рабочий, в комплекте примеры использования. Любые замечания и дополнения - приветствуются. 

В FTP разделе форума создана папка: 
/_Books/Atol.KKT со всей сопутствующей документацией.
----------------------------------------------------------------------------------------------------
Рекомендуем использовать актуальные версии классов 
cJSON и 
PrintF.
 
			 
			
					
				ATOL драйвер 10.x
				Добавлено: 01 Август 2019, 15:21
				 Admin
				zmi писал(а): 01 Август 2019, 12:20А кто-нибудь с признаком АГЕНТ и данными поставщика чек выводил?
 
Я на старом драйвере выводил. 
На новом код написал как примерно должен быть но не проверял на реальном аппарате.
Некогда пока.
 
			 
			
					
				ATOL драйвер 10.x
				Добавлено: 05 Август 2019, 17:37
				 zmi
				Опаньки! Все-таки проблемка в тестовом классе оказалась. Нельзя так с  комплексными атрибутами 

, по-видимому, при их формировании чистятся какие-то предыдущие реквизиты, и в результате возникает ошибка "Отсутствует обязательный реквизит". Перестановки выше-ниже всей обработки агента-поставщика не помогают. Сделал, как в описании драйвера 10, через буферную переменную (String), т.е формирование в буфер, потом формирование всех реквизитов для регистрации позиции, затем запись комплексного атрибута из буфера. Так нормально прокатило.
Еще один момент надо обрабатывать: если задан признак АГЕНТ, то ИНН поставщика обязателен для заполнения, иначе ошибку драйвер выдает.
 
			 
			
					
				ATOL драйвер 10.x
				Добавлено: 06 Август 2019, 6:54
				 Admin
				zmi писал(а): 05 Август 2019, 17:37через буферную переменную
 
Сорян, я раньше про это хотел написать но что то забыл. Там и в примере такая метода используется.
p.s.По мне так спорное решение у них получилось с генерацией массива.
 
			 
			
					
				ATOL драйвер 10.x
				Добавлено: 21 Август 2019, 22:09
				 deesoft
				Коллеги, кто нибудь пробовал на ДТО10 через COM интерфейс добавлять в чек агентские теги. ?
Там тип данных массив байт.
			 
			
					
				ATOL драйвер 10.x
				Добавлено: 03 Сентябрь 2019, 12:09
				 zmi
				finsoftrz писал(а): 06 Июль 2019, 16:56
Кроме работы через их dll напрямую, можно еще посмотреть на web сервер и vbscript. Как я понял, мэйнстрим у них это web сервер. Некая унификация, ставишь с ккм и можешь бить чеки откуда угодно через http запросы, передавая задания в формате json... Будем смотреть и думать... 

 
Вот так-так... Не успел порадоваться непростому внедрению печати чека, как поступила новая задача - нужна сетевая версия, чтобы кучка пользователей могла печатать на один аппарат, поскольку не хотят тратиться ни на сами аппараты, ни на накопители для них. Чешу репу, пытаясь понять, с какого боку подойти к WEB-серверу и json. Для начала хотелось бы понять, что это такое вообще этот "WEB-сервер", для работы с которым требуется "требуется установленная Java версии 1.8 и выше" (такое исчерпывающее описание). Где взять, как настроить.
Может, кто уже разбирался с этой веткой работы драйвера. Подскажите, плиз, чего-где посмотреть.
 
			 
			
					
				ATOL драйвер 10.x
				Добавлено: 03 Сентябрь 2019, 12:21
				 Игорь Столяров
				zmi писал(а): 03 Сентябрь 2019, 12:09Подскажите, плиз, чего-где посмотреть.
 
Может быть зайти на вопрос с другой стороны ?
На компьютере с подключенным ФР крутится программка, которая проверяет некую папку на наличие файлов и печатает из неё чеки.
Распечатанные чеки записывает в список - что-то вроде протокола.
Все остальные компьютеры (по локальной сети, через Web-запросы и т.д.) просто скидывают в эту папку чеки в виде
файлов, например в формате JSON или XML. Всё. Дёшево и сердито. Называется принт-сервер кассовых чеков. 

 
			 
			
					
				ATOL драйвер 10.x
				Добавлено: 03 Сентябрь 2019, 14:12
				 finsoftrz
				У меня аналогичная схема несколько лет работает. Выводят чеки с терминального сервера по разным фирмам и видам деятельности. Только не журнал ведется, а файлы чеков после печати переносятся в специальную папку архива. А вызывающая программа смотрит файл квитанции, забирает из него номер чека и сохраняет в исходном документе (кассовом ордере). У пользователя после отправки чека на печать прогрессор, пока не получит квитанцию. Просто, как капуста.
			 
			
					
				ATOL драйвер 10.x
				Добавлено: 03 Сентябрь 2019, 16:53
				 zmi
				Вот ведь, что значит закостенелость мышления. 

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

  Спасибо.
 
			 
			
					
				ATOL драйвер 10.x
				Добавлено: 04 Сентябрь 2019, 1:48
				 Admin
				Кстати там есть подключение по IP в драйвере. Я сейчас использую. Печать с нескольких рабочих мест.
Но у меня так редко в этом месте печатаются чеки что я даже не стал проверять что произойдет при попытке одновременной печати  

 
			 
			
					
				ATOL драйвер 10.x
				Добавлено: 05 Сентябрь 2019, 20:56
				 Игорь Столяров
				А можно я спрошу детский вопрос ? Иначе тупик какой-то.
Вот эти строки в примере, на что вообще влияют ? 
Код: Выделить всё
!  SELF.SetParam(LIBFPTR_SETTING_ACCESS_PASSWORD, 'пример пароля')
!  SELF.SetParam(LIBFPTR_SETTING_USER_PASSWORD, 'Sample_Password')
Что бы не задавал (например: 28, 29, 30 и т.д.) получаю ошибку "Неверный пароль".
В таблице кассиров ФР эти номера есть. А 
всегда возвращает 0 (ноль). Убираю задание паролей - всё работает прекрасно.
Как-то в АТОЛ ДТО8 понятней было - там пароль просто задавал номер кассира в таблице настроек. 

 
			 
			
					
				ATOL драйвер 10.x
				Добавлено: 06 Сентябрь 2019, 1:44
				 Admin
				Игорь Столяров писал(а): 05 Сентябрь 2019, 20:56Вот эти строки в примере, на что вообще влияют ?
 
Не знаю. Просто передрал ASIS. Не применял пока
 
			 
			
					
				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
И так для всех комплексных атрибутов. А в остальном - дела идут как никогда ! 

 
			 
			
					
				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
 
			 
			
					
				ATOL драйвер 10.x
				Добавлено: 13 Сентябрь 2019, 8:06
				 Игорь Столяров
				Кто-нибудь пробовал не фискальную печать с драйвером АТОЛ ДККТ 10 ?
Что-то не то в консерватории. 
1. Есть ФР с шириной строки 32 символа. Применяем 7 шрифт - текст сжимается до 42 символов в строке.
    Но печатается всё равно 32 символа в строке, только теперь сжатым шрифтом.
    А как напечатать текст сжатым шрифтом на всю ширину кассовой ленты ?
2. Можно как-то получить для конкретного размера шрифта, сколько символов поместится в строке ?
 
			 
			
					
				ATOL драйвер 10.x
				Добавлено: 13 Сентябрь 2019, 8:13
				 Admin
				Игорь Столяров писал(а): 13 Сентябрь 2019, 8:061. Есть ФР с шириной строки 32 символа. Применяем 7 шрифт - текст сжимается до 42 символов в строке.  Но печатается всё равно 32 символа в строке, только теперь сжатым шрифтом.
 
м.б. это?
https://kkmspb.ru/kontrolno-kassovaya-t ... ol-30F.php
Игорь Столяров писал(а): 13 Сентябрь 2019, 8:062. Можно как-то получить для конкретного размера шрифта, сколько символов поместится в строке ?
 
http://blog.atol.ru/archives/7546
т.е. создаем для себя внутреннюю таблицу вариантов.