powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Com-объект, Access, Кассовый принтер АТОЛ
25 сообщений из 25, страница 1 из 1
Com-объект, Access, Кассовый принтер АТОЛ
    #39993540
Oldnick1972
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день. Форум техподдержки Атол склонен уговаривать вопрошающих перейти на их ПО, а я не готов. Поэтому вопрос сюда. Windows 10 64 бита. Access 2016 32 bit. Устройство АТОЛ FPrint-22ПТК.
Драйвер стоит, Access его видит, экземпляр драйвера создается и успешно открывается. Ссылка на библиотеку необходимую поставлена.
Public Sub DateTest()
Set fptr = CreateObject("AddIn.Fptr10")
fptr.setSingleSetting fptr.LIBFPTR_SETTING_MODEL, CStr(fptr.LIBFPTR_MODEL_ATOL_22F)
fptr.setSingleSetting fptr.LIBFPTR_SETTING_PORT, CStr(fptr.LIBFPTR_PORT_COM)
fptr.setSingleSetting fptr.LIBFPTR_SETTING_COM_FILE, "COM3"
fptr.setSingleSetting fptr.LIBFPTR_SETTING_BAUDRATE, CStr(fptr.LIBFPTR_PORT_BR_115200)
fptr.applySingleSettings

MsgBox fptr.Version() 'Версию драйвера возвращает!
fptr.Open
MsgBox fptr.isOpened 'Открытие подтверждает TRUE!
До сюда всё работает!

Дальше я пытаюсь запрашивать у аппарата информацию, например время:
Инструкция говорит:
"Для запроса текущих даты и времени в ККТ необходимо вызвать метод queryData() с типом запроса LIBFPTR_PARAM_DATA_TYPE равным LIBFPTR_DT_DATE_TIME"
Пример на Delphi:
var
dateTime: TDateTime;
begin
fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_DATE_TIME);
fptr.queryData;
dateTime := fptr.getParamDateTime(fptr.LIBFPTR_PARAM_DATE_TIME);
end;
Я его переписываю для VBA:
Dim dateTime As Date
fptr.setParam fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_DATE_TIME
fptr.queryData
dateTime = fptr.getParamDateTime(fptr.LIBFPTR_PARAM_DATE_TIME)

И не возвращается ничего, даже ошибки.
Однако, если попросить вот так: MsgBox dateTime - она возвращается (причём явно не помимо метода queryDate - если его закомментить - возвращается 01.01.1970, то есть 0).
Можно попросить и так: MsgBox fptr.getParamDateTime(fptr.LIBFPTR_PARAM_DATE_TIME) - тоже вернёт правильную дату...
Точно также происходит если запрашивать не время, а серийный номер.
Оно доступно, но не выводится.....
У меня есть две версии: возможно я не справился с изложением на VBA дельфийского кода...
А может быть моя версия Access не умеет вернуть данные в том виде, какой предполагается производителем кассы. Это должно выглядеть как результат запроса, как-то так:
Параметр Описание Тип
LIBFPTR_PARAM_DATE_TIME Текущие дата и время в ККТ datetime
Может для этого библиотеки какой не хватает?
...
Рейтинг: 0 / 0
Com-объект, Access, Кассовый принтер АТОЛ
    #39993549
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oldnick1972,

а если Dim dateTime As Variant?
м.б. там строка, а не дата?
...
Рейтинг: 0 / 0
Com-объект, Access, Кассовый принтер АТОЛ
    #39993554
Oldnick1972
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
booby, спасибо, но нет... не помогло. Кроме того строковый параметр serialNumber ведёт себя точно также.
...
Рейтинг: 0 / 0
Com-объект, Access, Кассовый принтер АТОЛ
    #39993557
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oldnick1972
Однако, если попросить вот так: MsgBox dateTime - она возвращается (причём явно не помимо метода queryDate - если его закомментить - возвращается 01.01.1970, то есть 0).
Можно попросить и так: MsgBox fptr.getParamDateTime(fptr.LIBFPTR_PARAM_DATE_TIME) - тоже вернёт правильную дату...
надо так посмотреть
Код: vbnet
1.
debug.print TypeName(fptr.LIBFPTR_PARAM_DATE_TIME)

и в окне Immediate увидеть название типа.

Или как выше предложили присвоить переменной типа Variant , остановить выполнение кода (брекпоинт или команда Stop в коде) и в окне Locals увидеть тип данных.
...
Рейтинг: 0 / 0
Com-объект, Access, Кассовый принтер АТОЛ
    #39993563
Oldnick1972
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Панург, спасибо. Неожиданно про дату пишет "Long"... и про серийник, который строка, тоже пишет Long... и про температуру, которая integer, тоже пишет Long. Если поставить Long - ничего не меняется... Что с таким принято делать?
...
Рейтинг: 0 / 0
Com-объект, Access, Кассовый принтер АТОЛ
    #39993574
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oldnick1972,
стоп я же неправильно написал (внимательней нужно быть) там же перечисление, оно конечно Long.
так нуно
Код: vbnet
1.
debug.print TypeName(fptr.getParamDateTime(fptr.LIBFPTR_PARAM_DATE_TIME))
...
Рейтинг: 0 / 0
Com-объект, Access, Кассовый принтер АТОЛ
    #39993575
Oldnick1972
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И object browser все параметры аппарата считает Long, хотя они string, datetime, int и double
...
Рейтинг: 0 / 0
Com-объект, Access, Кассовый принтер АТОЛ
    #39993576
Oldnick1972
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Панург, то я всё ещё вчера изучил:( Спасибо.
...
Рейтинг: 0 / 0
Com-объект, Access, Кассовый принтер АТОЛ
    #39993577
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oldnick1972
Панург, то я всё ещё вчера изучил:( Спасибо.
я поправил сообщение. Извиняюсь за то что ввёл в заблуждение
...
Рейтинг: 0 / 0
Com-объект, Access, Кассовый принтер АТОЛ
    #39993586
Oldnick1972
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Панург, ага, а так вернул Date!!!
...
Рейтинг: 0 / 0
Com-объект, Access, Кассовый принтер АТОЛ
    #39993594
Oldnick1972
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Панург, да, дату определяет как Date, серийный номер как String (так и должно быть), температуру как Long с типами выходит всё нормально
...
Рейтинг: 0 / 0
Com-объект, Access, Кассовый принтер АТОЛ
    #39993603
Oldnick1972
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Таким образом, похоже, что код выполняется, значения вычисляются, но предполагаемая производителем аппарата форма вывода информации не выводится. А MsgBox - всё выдаёт...
...
Рейтинг: 0 / 0
Com-объект, Access, Кассовый принтер АТОЛ
    #39993606
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oldnick1972
Таким образом, похоже, что код выполняется, значения вычисляются, но предполагаемая производителем аппарата форма вывода информации не выводится. А MsgBox - всё выдаёт...
не может такого быть.
...
Рейтинг: 0 / 0
Com-объект, Access, Кассовый принтер АТОЛ
    #39993609
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oldnick1972
"Для запроса текущих даты и времени в ККТ необходимо вызвать метод queryData() с типом запроса LIBFPTR_PARAM_DATA_TYPE равным LIBFPTR_DT_DATE_TIME"
Пример на Delphi:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
    var
        dateTime:   TDateTime;
    begin
         fptr.setParam(fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_DATE_TIME);
         fptr.queryData;
         dateTime := fptr.getParamDateTime(fptr.LIBFPTR_PARAM_DATE_TIME);
    end;


Я его переписываю для VBA:
Код: vbnet
1.
2.
3.
4.
    Dim dateTime As Date
    fptr.setParam fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_DATE_TIME  'тут явно второй параметр шняга, ибо твм value, а это скорее всего время
    fptr.queryData 
    dateTime = fptr.getParamDateTime(fptr.LIBFPTR_PARAM_DATE_TIME)'потому и тут выходит шняга

...
Рейтинг: 0 / 0
Com-объект, Access, Кассовый принтер АТОЛ
    #39993611
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sub setParam ( paramId As Long, value )
...
Рейтинг: 0 / 0
Com-объект, Access, Кассовый принтер АТОЛ
    #39993615
Oldnick1972
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Панург, буду рад иной интерпретации.
Код:
Dim serialNumber As String
fptr.setParam fptr.LIBFPTR_PARAM_DATA_TYPE, fptr.LIBFPTR_DT_SERIAL_NUMBER
fptr.queryData
serialNumber = fptr.getParamString(fptr.LIBFPTR_PARAM_SERIAL_NUMBER)
не возвращает ничего, а если сразу после него
MsgBox serialNumber
или
MsgBox fptr.getParamString(fptr.LIBFPTR_PARAM_SERIAL_NUMBER)
то возвращается серийный номер, причём правильный
и Debug.Print TypeName(fptr.getParamString(fptr.LIBFPTR_PARAM_SERIAL_NUMBER)) - возвращает string
То есть результат есть, но я его не вижу...
...
Рейтинг: 0 / 0
Com-объект, Access, Кассовый принтер АТОЛ
    #39993617
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в общем нужно копаться в документации и устанавливать полностью драйвер. чего мне не охота
...
Рейтинг: 0 / 0
Com-объект, Access, Кассовый принтер АТОЛ
    #39993618
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oldnick1972, ты когда пишешь код пользуйся тэгами оформления (см https://www.sql.ru/faq/faq_topic.aspx?fid=202). иначе читать это невозможно.
...
Рейтинг: 0 / 0
Com-объект, Access, Кассовый принтер АТОЛ
    #39993619
Oldnick1972
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Панург, чуть подробней, я срамоучка.
...
Рейтинг: 0 / 0
Com-объект, Access, Кассовый принтер АТОЛ
    #39993620
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oldnick1972
чуть подробней, я срамоучка.
чего подробней?
...
Рейтинг: 0 / 0
Com-объект, Access, Кассовый принтер АТОЛ
    #39993621
Oldnick1972
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Панург, с тегами оформления разберусь
...
Рейтинг: 0 / 0
Com-объект, Access, Кассовый принтер АТОЛ
    #39993626
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oldnick1972, у тебя пример отсюда работает -> Атол ККТ10 и VBA
...
Рейтинг: 0 / 0
Com-объект, Access, Кассовый принтер АТОЛ
    #39993636
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oldnick1972, Вы создали SerialNumber в процедуре - он в ней и умер после её окончания(только посмотреть debug.print или msgbox). я так понимаю создаете чек (отчет), его нужно печатать.
Код: vbnet
1.
2.
3.
4.
with me' может здесь должно быть fptr
.print SerialNumber
.print dateTime
end with 


хотя... может я что то упустил.
...
Рейтинг: 0 / 0
Com-объект, Access, Кассовый принтер АТОЛ
    #39993643
Oldnick1972
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ага, спасибо огромное. Я разобрался... по пути сильно обогатился. Панург, я очень благодарен. А проблема была во мне. Я почему-то думал, что результат должен выводится в виде таблички, созданной производителем драйвера (ну так в инструкции нарисовано). А оно у меня всё правильно работает, просто по-умолчанию никуда не печатается. Рисую форму, туда всё выводится. Ещё раз спасибо.
...
Рейтинг: 0 / 0
Com-объект, Access, Кассовый принтер АТОЛ
    #39993644
Oldnick1972
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, alecko, вы правильно догадались, сё у меня срабатывает и готово к использованию, а я ожидал визуализации.
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Com-объект, Access, Кассовый принтер АТОЛ
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]