|
Атол ККТ10 и VBA
|
|||
---|---|---|---|
#18+
vmag, спать это не про нас) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2018, 02:43 |
|
Атол ККТ10 и VBA
|
|||
---|---|---|---|
#18+
ШаманТолько у меня так и просит ActiveX ( vmag правильно все расписал - юзай кошерный установщик и все будет :), а за преобразование - отдельное СПАСИБО ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2018, 07:54 |
|
Атол ККТ10 и VBA
|
|||
---|---|---|---|
#18+
stu314за преобразование - отдельное СПАСИБО проверил пример, предварительно преобразовав его в формат 2002 - все корректно отрабатывает :) еще раз спасибо, меньше ковыряться придется со сменой идеологии в атоле ... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2018, 10:03 |
|
Атол ККТ10 и VBA
|
|||
---|---|---|---|
#18+
Здравствуйте. Являюсь "счастливым" обладателем онлайн кассы Атол92Ф. Пользуюсь Excel в котором с помощью VBA ещё лет 10 назад сваял прогу, которая меня полностью устраивает. Подключен чекопечатающий принтер. Теперь стоит задача подключить Атол. Как я понял из данной темы это вполне возможно. Кассу к компьютеру подключил, поставил ДККТ v.10 Подскажите идеологию, как из VBA управлять кассой? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2019, 07:20 |
|
Атол ККТ10 и VBA
|
|||
---|---|---|---|
#18+
Добрый день. Вчера меня озадачили решением обсуждаемой проблемы. Пишу что сделал и что получилось. 1. Что использовалось. Windows 7 Pro X64, MS Access 2003. 2. Скачал драйвера для ККТ 10-ой версии У Атола - долго искать. Поэтому загуглил и нашел здесь https://support.obosobka.ru/baza-znaniy/drayver-atol-10-8-0-0-ot-13-08-2020/] Драйвер Атол 10.8.0.0 от 13.08.2020 Драйвер ККТ Атол 10.8.0.0 (x64) Драйвер ККТ Атол 10.8.0.0 (x86) 3. Установка «Драйвер ККТ Атол 10.8.0.0 (x86)». При установке драйвера выбрал ВСЕ галки. Поскольку Access 2003 – это 32 разрядное приложение, то устанавливал «Драйвер ККТ Атол 10.8.0.0 (x86)». «Драйвер ККТ Атол 10.8.0.0 (x64)» – для Access 2003 установился, но при проверке работы с Access 2003 получил сообщение об ошибке использования. Очевидно из-за не подходящей (x64) разрядности. Предполагаю, что для Access 2010 потребуется именно "Драйвер ККТ Атол 10.8.0.0 (x64)". 4. Подключение к Access - Запустил Access 2003 и создал новый файл. - Зашел в программый модуль (Alt+F11) и добавил ссылку на файл библиотеки DDL Меню \Tools\Referenses и в диалоге через кнопку «Browse…» нашел и выбрал файл C:\Program Files (x86)\ATOL\Drivers10\KKT\langs\com\ addin_fptr10_x86.dll (судя по обсуждению - это не должно вызывать затруднений) - добавление ссылки в Access прошло успешно. 5. Создал модуль и добавил код из обсуждения (два в одном). Public Sub test() Dim fptr As New fptr fptr.setSingleSetting fptr.LIBFPTR_SETTING_MODEL, CStr(fptr.LIBFPTR_MODEL_ATOL_AUTO) fptr.setSingleSetting fptr.LIBFPTR_SETTING_PORT, CStr(fptr.LIBFPTR_PORT_COM) fptr.setSingleSetting fptr.LIBFPTR_SETTING_COM_FILE, "COM5" fptr.setSingleSetting fptr.LIBFPTR_SETTING_BAUDRATE, CStr(fptr.LIBFPTR_PORT_BR_115200) fptr.applySingleSettings ' fptr.setParam 1021, "Кассир Иванов И." fptr.setParam 1203, "123456789047" fptr.operatorLogin fptr.setParam fptr.LIBFPTR_PARAM_REPORT_TYPE, fptr.LIBFPTR_RT_CLOSE_SHIFT fptr.Report fptr.checkDocumentClosed End Sub 6. Запустил на выполнение test Тест прошел без ошибок. Подсказка 1. Если используемый метод не возвращает значение (тип Sub) или вам оно не нужно, то не используйте скобки в начале “(“ и в конце “)“. Пример 1 функция параметр1, параметр2, … 2. Если возвращает (тип function), то тогда укажите переменную (объект), которой присваивается значение Пример 2 Переменная = функция (параметр1, параметр2, …) 7. И последнее. Перенос и использование остальных методов драйвера можно выполнять аналогичным способом по описанию в документации от Атола и на основании примеров для других языков программирования. Для предыдущего драйвера (версии 8) Атол давал примеры для использования в Access. Для 10-го Атол видимо посчитал, что в этом нет необходимости или ручки не дошли. На днях получу ККТ Атол 55Ф с платформой версии 5. Как раз для нее и проверю работу Access 2003 c драйвером ККТ 10 версии. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2020, 11:52 |
|
Атол ККТ10 и VBA
|
|||
---|---|---|---|
#18+
paul597368, скажите пожалуйста, какой метод отправляет чек на печать? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 01:08 |
|
Атол ККТ10 и VBA
|
|||
---|---|---|---|
#18+
vah, Пока не знаю. Надо лопатить документацию и проверять работу. Сейчас делаю задачу по переводу программы на Access с 8 на 10 версию драйвера ККТ. Если попадется код вывода на печать чека скину в чат. По срокам - неделя-две. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2020, 08:14 |
|
Атол ККТ10 и VBA
|
|||
---|---|---|---|
#18+
paul597368, Здравствуйте. Не удалось найти код вывода на печать чека? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2020, 15:03 |
|
Атол ККТ10 и VBA
|
|||
---|---|---|---|
#18+
vah, Привет. Если кратко, то - получилось. В документации Атола - Поиск "Пример использования" дан пример, который я переложил на Access 2003. Предварительно. 1. На ПК должен быть установлен драйвер 10-й версии 32-х разрядный. 2. ККМ подключен к ПК. 3. Убедиться в том, что все подготовлено можно запустив программу "Тест драйвера ККТ (32-bit)", в ней выберите кнопку 'свойства' и выполнить поиск устройства и проверку связи. Затем 1. В файле mdb (Access) создайте таблицу с именем t_kkm и в ней два поля с именами и типами f_id - числовой f_Settings - Поле МЕМО В таблицу добавьте запись с f_id = 0. 2. Создайте модуль и вставьте в него текст программы Option Compare Database Option Explicit '#include "fptr10.h" Dim p_kkm As New Fptr 'Function f_main(argc As Integer, argv As String) As Integer Sub f_main_test() '// Создание и настройка драйвера Call f_initialize '// Соединение с ККТ p_kkm.Open '// Регистрация кассира p_kkm.setParam 1021, "Иванов И.И." p_kkm.setParam 1203, "500100732259" p_kkm.operatorLogin '// Открытие чека (с передачей телефона получателя) p_kkm.setParam p_kkm.LIBFPTR_PARAM_RECEIPT_TYPE, p_kkm.LIBFPTR_RT_SELL p_kkm.setParam 1008, "+79161234567" p_kkm.openReceipt '// Регистрация позиции p_kkm.setParam p_kkm.LIBFPTR_PARAM_COMMODITY_NAME, "Чипсы LAYS" p_kkm.setParam p_kkm.LIBFPTR_PARAM_PRICE, 73.99 p_kkm.setParam p_kkm.LIBFPTR_PARAM_QUANTITY, 5 p_kkm.setParam p_kkm.LIBFPTR_PARAM_TAX_TYPE, p_kkm.LIBFPTR_TAX_VAT18 'Также в данном методе можно передать следущие реквизиты ФН: p_kkm.setParam 1212, 1 'Признак предмета расчета p_kkm.setParam 1214, 7 'Признак способа расчета p_kkm.Registration '// Регистрация позиции: конец '// Регистрация итога (отбрасываем копейки) p_kkm.setParam p_kkm.LIBFPTR_PARAM_SUM, 369# p_kkm.receiptTotal '// Оплата наличными p_kkm.setParam p_kkm.LIBFPTR_PARAM_PAYMENT_TYPE, p_kkm.LIBFPTR_PT_CASH p_kkm.setParam p_kkm.LIBFPTR_PARAM_PAYMENT_SUM, 1000 p_kkm.Payment '// Закрытие чека p_kkm.closeReceipt If (p_kkm.checkDocumentClosed < 0) Then '// Не удалось проверить состояние документа. Вывести пользователю текст ошибки, попросить устранить неполадку и повторить запрос MsgBox p_kkm.errorDescription, vbExclamation, "f_main" End If If p_kkm.getParamBool(p_kkm.LIBFPTR_PARAM_DOCUMENT_CLOSED) = 0 Then '// Документ не закрылся. Требуется его отменить (если это чек) и сформировать заново p_kkm.cancelReceipt Exit Sub End If If (p_kkm.getParamBool(p_kkm.LIBFPTR_PARAM_DOCUMENT_PRINTED) = 0) Then '// Можно сразу вызвать метод допечатывания документа, он завершится с ошибкой, если это невозможно If (p_kkm.continuePrint() < 0) Then '// Если не удалось допечатать документ - показать пользователю ошибку и попробовать еще раз. MsgBox "Не удалось напечатать документ (Ошибка " & vbCrLf & _ p_kkm.errorDescription & vbCrLf & _ "). Устраните неполадку и повторите.", vbExclamation, "f_main" End If End If '// Получение информации о чеке из ФН p_kkm.setParam p_kkm.LIBFPTR_PARAM_FN_DATA_TYPE, p_kkm.LIBFPTR_FNDT_LAST_DOCUMENT p_kkm.fnQueryData Dim fiscalSign fiscalSign = p_kkm.getParamStr(p_kkm.LIBFPTR_PARAM_FISCAL_SIGN) Dim documentNumber As Integer documentNumber = p_kkm.getParamInt(p_kkm.LIBFPTR_PARAM_DOCUMENT_NUMBER) '// Формирование слипа ЕГАИС p_kkm.beginNonfiscalDocument p_kkm.setParam p_kkm.LIBFPTR_PARAM_TEXT, "ИНН: 111111111111 КПП: 222222222" p_kkm.setParam p_kkm.LIBFPTR_PARAM_ALIGNMENT, p_kkm.LIBFPTR_ALIGNMENT_CENTER p_kkm.printText p_kkm.setParam p_kkm.LIBFPTR_PARAM_TEXT, "КАССА: 1 СМЕНА: 11" p_kkm.setParam p_kkm.LIBFPTR_PARAM_ALIGNMENT, p_kkm.LIBFPTR_ALIGNMENT_CENTER p_kkm.printText p_kkm.setParam p_kkm.LIBFPTR_PARAM_TEXT, "ЧЕК: 314 ДАТА: 20.11.2017 15:39" p_kkm.setParam p_kkm.LIBFPTR_PARAM_ALIGNMENT, p_kkm.LIBFPTR_ALIGNMENT_CENTER p_kkm.printText p_kkm.setParam p_kkm.LIBFPTR_PARAM_BARCODE, " https://check.egais.ru?id=cf1b1096-3cbc-11e7-b3c1-9b018b2ba3f7" p_kkm.setParam p_kkm.LIBFPTR_PARAM_BARCODE_TYPE, p_kkm.LIBFPTR_BT_QR p_kkm.setParam p_kkm.LIBFPTR_PARAM_ALIGNMENT, p_kkm.LIBFPTR_ALIGNMENT_CENTER p_kkm.setParam p_kkm.LIBFPTR_PARAM_SCALE, 500 p_kkm.printBarcode p_kkm.printText p_kkm.setParam p_kkm.LIBFPTR_PARAM_TEXT, " https://check.egais.ru?id=cf1b1096-3cbc-11e7-b3c1-9b018b2ba3f7" p_kkm.setParam p_kkm.LIBFPTR_PARAM_ALIGNMENT, p_kkm.LIBFPTR_ALIGNMENT_CENTER p_kkm.setParam p_kkm.LIBFPTR_PARAM_TEXT_WRAP, p_kkm.LIBFPTR_TW_CHARS p_kkm.printText p_kkm.printText p_kkm.setParam p_kkm.LIBFPTR_PARAM_TEXT, _ "10 58 1c 85 bb 80 99 84 40 b1 4f 35 8a 35 3f 7c " & _ "78 b0 0a ff cd 37 c1 8e ca 04 1c 7e e7 5d b4 85 " & _ "ff d2 d6 b2 8d 7f df 48 d2 5d 81 10 de 6a 05 c9 " & _ "81 74" p_kkm.setParam p_kkm.LIBFPTR_PARAM_ALIGNMENT, p_kkm.LIBFPTR_ALIGNMENT_CENTER p_kkm.setParam p_kkm.LIBFPTR_PARAM_TEXT_WRAP, p_kkm.LIBFPTR_TW_WORDS p_kkm.printText p_kkm.endNonfiscalDocument '// Z-отчет p_kkm.setParam p_kkm.LIBFPTR_PARAM_REPORT_TYPE, p_kkm.LIBFPTR_RT_CLOSE_SHIFT p_kkm.Report '// Получение информации о неотправленных документах p_kkm.setParam p_kkm.LIBFPTR_PARAM_FN_DATA_TYPE, p_kkm.LIBFPTR_FNDT_OFD_EXCHANGE_STATUS p_kkm.fnQueryData ' uint Dim unsentCount As Integer unsentCount = p_kkm.getParamInt(p_kkm.LIBFPTR_PARAM_DOCUMENTS_COUNT) Dim unsentFirstNumber As Integer unsentFirstNumber = p_kkm.getParamInt(p_kkm.LIBFPTR_PARAM_DOCUMENT_NUMBER) Dim unsentDateTime As String unsentDateTime = p_kkm.getParamStr(p_kkm.LIBFPTR_PARAM_DATE_TIME) '// Завершение работы p_kkm.Close End Sub Private Sub f_initialize() ' date: 12.09.2020: МПИ ' desc: инициализация объекта Dim t As DAO.Recordset Dim settings As String, s As String Dim i As Long, b_new As Boolean On Error Resume Next settings = "" b_new = False ' читаем, что есть у нас Set t = CodeDb().OpenRecordset("t_kkm") settings = Nz(t!f_settings, "") ' параметры еще не заданы If settings = "" Then ' открываем диалог для поиска устройства и проверки связи _ и получаем настройки, которые сохраняем в поле таблицы s = f_getSettings() If s = "" Then Exit Sub Else ' вернули что-то новенькое b_new = True settings = s End If End If ' далее проверяем загружаем их в драйвер i = p_kkm.SetSettings(settings) ' If i <> 0 Then MsgBox "Ошибка загрузки данных." & vbCrLf & p_kkm.errorDescription, vbCritical, "Подключение к ККТ" Exit Sub End If ' Данные загружены, делаем попытку подключения к ККТ Call p_kkm.Open Select Case p_kkm.isOpened Case True p_kkm.Beep ' p_kkm.Close Case Else MsgBox "Ошибка подключения." & vbCrLf & p_kkm.errorDescription, vbCritical, "Подключение к ККТ" Exit Sub End Select ' новенькое прошло тест -> сохраняем у себя If b_new Then t.Edit t!f_settings = settings t.Update End If End Sub Private Function f_getSettings() As String ' date: 12.09.2020: МПИ ' desc: открываем диалог по определению параметров Dim settings As String Dim long1 As Long ' открываем диалог для поиска long1 = p_kkm.ShowProperties(p_kkm.LIBFPTR_GUI_PARENT_NATIVE, Application.hWndAccessApp) Select Case long1 '0, если пользователь нажал кнопку OK. Case 0 ' сохраняем параметры для последующего использования settings = p_kkm.getSettings '-1, если открыть диалог не удалось ' 1, если пользователь покинул диалог любым другим способом (нажал кнопку Отмена, закрыл диалог крестиком, т.п.) Case Else 'используем параметры без изменения settings = "" End Select f_getSettings = settings End Function 3. Выполните компиляцию модуля - для проверки на наличие ошибок 4. Запустите f_main_test() ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2020, 19:06 |
|
|
start [/forum/topic.php?fid=45&msg=39745096&tid=1609929]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
31ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 134ms |
0 / 0 |