ATOL драйвер 10.x

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

ATOL драйвер 10.x

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

SergioRaguzini писал(а):
18 Сентябрь 2019, 8:20
Меня смутило то, что в MODULE применяется константа:
Стоп ! Всё верно, но здесь надо разделить две большие разницы.

1. Указание в виде константы имени DLL файла в котором находятся загружаемые функции: Module('fptr10.dll')
2. И из какого физического файла они собственно будут загружены: ATOL_LoadLibrary(CString 'C:\Program Files …\fptr10.dll')

Можно сделать классическую привязку функций fptr10.dll через LIB файл (в т.ч. с указанием его местоположения в MODULE),
но тогда программа без этого DLL вообще не запустится … :(

И кстати есть ещё один нюанс. Драйвер ДККТ 10 достаточно сырой и судя по всему ещё долго будет дорабатываться.
Появляются новые методы и константы. Поэтому нужно контролировать при загрузке наличие функций в DLL и выдавать
пользователю сообщение о необходимости обновить версию драйвера АТОЛ ДККТ 10 при отсутствии используемых
прикладной программой методов в загружаемой DLL драйвера … ну или загрузить из DLL функцию получения версии драйвера,
подключится и проверить версию, а потом уже загружать все остальные методы из этой DLL ...
Последний раз редактировалось Игорь Столяров 18 Сентябрь 2019, 9:12, всего редактировалось 2 раза.
«V» значит Вендетта !

Аватара пользователя
SergioRaguzini
Посетитель
Сообщения: 33
Зарегистрирован: 08 Декабрь 2009, 19:16
Откуда: Краснодарский край

ATOL драйвер 10.x

Сообщение SergioRaguzini » 18 Сентябрь 2019, 9:10

Игорь, Спасибо!
Извиняюсь за глупый вопрос (всегда особо не заморачивался с MODULE), но если можно, то прошу пояснить п.2:
из какого физического файла они собственно будут загружены: ATOL_LoadLibrary(CString 'C:\Program Files …\fptr10.dll')
в каком месте программы что необходимо добавить, чтобы это заработало
Последний раз редактировалось SergioRaguzini 18 Сентябрь 2019, 12:44, всего редактировалось 1 раз.

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

ATOL драйвер 10.x

Сообщение Игорь Столяров » 18 Сентябрь 2019, 9:31

SergioRaguzini писал(а):
18 Сентябрь 2019, 9:10
в каком месте программы что необходимо добавить, чтобы это заработало
Это же я умничаю по чужому коду … :) В оригинальном примере Админа усё есть.
Имя файла в ПЕРЕМЕННОЙ (не константе !) Dll_Name и Вы можете присвоить ей значение по настройке и т.д.:

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

Atol10.Construct           PROCEDURE
Dll_Name                   CSTRING('fptr10.dll')
  CODE
  IF NOT SELF.DllHandle
    SELF.DllHandle = ATOL_LoadLibrary(Dll_Name)
  ...
Я использую вот такую версию загрузки методов из DLL:

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

Atol10.Init        Procedure  !,LONG,PROC
Dll_Name1  CSTRING('fptr10.dll')
Dll_Name2  CSTRING('C:\Program Files\ATOL\Drivers10\KKT\bin\fptr10.dll')
Dll_Name3  CSTRING('C:\Program Files (x86)\ATOL\Drivers10\KKT\bin\fptr10.dll')
  Code

  If Not Self.DllHandle

     ! --- Загрузка библиотеки ATOL

     Self.DllHandle = ATOL_LoadLibrary(Dll_Name1)
     If ~Self.DllHandle and Exists(Dll_Name2) then Self.DllHandle = ATOL_LoadLibrary(Dll_Name2).
     If ~Self.DllHandle and Exists(Dll_Name3) then Self.DllHandle = ATOL_LoadLibrary(Dll_Name3).

     If Self.DllHandle
...
«V» значит Вендетта !

Аватара пользователя
SergioRaguzini
Посетитель
Сообщения: 33
Зарегистрирован: 08 Декабрь 2009, 19:16
Откуда: Краснодарский край

ATOL драйвер 10.x

Сообщение SergioRaguzini » 18 Сентябрь 2019, 9:40

Игорь, Спасибо!
Когда не было необходимости, вроде бы все в MODULE устраивало - а тут оказался неучем

:ty:

Аватара пользователя
SergioRaguzini
Посетитель
Сообщения: 33
Зарегистрирован: 08 Декабрь 2009, 19:16
Откуда: Краснодарский край

ATOL драйвер 10.x

Сообщение SergioRaguzini » 18 Сентябрь 2019, 12:55

Игорь Столяров писал(а):
18 Сентябрь 2019, 8:33
И кстати есть ещё один нюанс. Драйвер ДККТ 10 достаточно сырой и судя по всему ещё долго будет дорабатываться.
Да, хотелось бы, например, явная "сырость" - одна из заявленных, но не работающих(!) функций OLE уже вызывает вопросы...

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

ATOL драйвер 10.x

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

SergioRaguzini писал(а):
18 Сентябрь 2019, 12:55
но не работающих(!) функций OLE уже вызывает вопросы
Вопрос философский … Дело в том, что интерфейс OLE (ActivX) сам по себе является рудиментом и более не развивается.
Действительно, OLE удобно для интеграции, но медленно и проблемно. Что-то там постоянно грузится и переклинивает.
Запуск OLE драйвера под терминальным сервером - это высший пилотаж системного администрирования. ;)
Чего только стоит зависимость разделителей дробной части в цифрах от региональных настроек Windows ! :(

А АТОЛ смотрит в светлое будущее, где каждый предприниматель будет печатать чеки с гаджета … ;)
«V» значит Вендетта !

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

ATOL драйвер 10.x

Сообщение Admin » 26 Сентябрь 2019, 6:10

Странно, кто то на днях писал про использование libfptr_reset_params перед формированием составного реквизита (libfptr_util_form_tlv)
Сейчас этого поста не нахожу. Игорь Столяров, твое сообщение было?
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса

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

ATOL драйвер 10.x

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

Admin писал(а):
26 Сентябрь 2019, 6:10
Игорь Столяров, твое сообщение было?
Да. Там оказалось всё несколько сложнее, чем подсказывала здравая логика.
Если кратко, то: libfptr_reset_params - очищает ВСЕ установленные реквизиты.

Суть напряга с комплексными реквизитами в следующем.
На момент выполнения метода формирования комплексного реквизита libfptr_util_form_tlv() неизвестно
какой именно реквизит мы формируем, т.е. из скольких полей он состоит … поэтому в буфер пишутся ВСЕ
определённые на момент выполнения libfptr_util_form_tlv() параметры.

НЕЛЬЗЯ ВЫПОЛНЯТЬ ЗАПИСЬ КОМПЛЕКСНОГО АТРИБУТА, КОГДА ОПРЕДЕЛЕНЫ ПАРАМЕТРЫ В НЕГО НЕ ВХОДЯЩИЕ !!!

Обратите внимание, как формировался комплексный реквизит ранее в ДТО8 - были операторные скобки
BeginComplexAttribute() / WriteAttribute() в которые "заворачивались" нужные параметры для комплексного атрибута.

В ДККТ 10 "упростили", т.е. комплексный атрибут должен формироваться ВСЕГДА в начале (когда нет списка параметров),
а libfptr_util_form_tlv() - очищает список параметров при записи .... Отсюда и запись через буфер в примерах …

В этом случае libfptr_reset_params() по сути ничего не меняет. Всё равно, что после открытия процедуры выполнить
Clear() для очистки и так чистых данных. А принудительно очищать список параметров можно только когда они все
записаны … но при записи список и так очищается. Поэтому и удалил пост. :)
Последний раз редактировалось Игорь Столяров 26 Сентябрь 2019, 6:43, всего редактировалось 2 раза.
«V» значит Вендетта !

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

ATOL драйвер 10.x

Сообщение Admin » 26 Сентябрь 2019, 6:38

Ага. Понятно. Я примерно так и предполагал т.к. примере нигде эта процедура не использована.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса

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

ATOL драйвер 10.x

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

Admin писал(а):
26 Сентябрь 2019, 6:38
т.к. примере нигде эта процедура не использована
Метод libfptr_reset_params() на самом деле полезный и нужный.
В справке показана идея, реальная жизнь намного интересней.

Если мы формируем чек или его содержание по условиям, то он позволяет реализовать технологию
принудительного возврата в точку ZERRO. Как в анекдоте: "а давайте все выйдем и снова зайдём" … ;)
«V» значит Вендетта !

Ответить