54-ФЗ: Онлайн-кассы для 1С 7.7 нетиповая

Подключение онлайн кассы к не типовой 1С 7.7 через драйвер атола v10.

Долго искал как подключить Атол 30Ф к 7.7 через драйвер версии 10. Все, что находил, было платно либо не понять, как использовать. В итоге решил сделать бесплатный шаблон. 

1. Качаем драйвер Атола с их сайта и устанавливаем.

2. В папке с установленным драйвером находим addin_fptr10_x86.dll и регистрируем его через regsvr32

3. Берем и встраиваем в Вашу программу шаблон.

Драйвер успешно работает на WindowsXP Home SP3.

Перем FR

Процедура ОтветДрайвера(КомандаККМ)
Result=FR.errorCode();
ОшибкаПараметра=FR.errorDescription();
Сообщить("Ответ "+Result+" Ошибка "+ОшибкаПараметра);
КонецПроцедуры


Процедура ПодключениеККМ()
FR = СоздатьОбъект("AddIn.Fptr10");
//LIBFPTR_MODEL_ATOL_AUTO
FR.setSingleSetting(FR.LIBFPTR_SETTING_MODEL, строка(FR.LIBFPTR_MODEL_ATOL_30F));
FR.setSingleSetting(FR.LIBFPTR_SETTING_PORT, строка(FR.LIBFPTR_PORT_COM));
FR.setSingleSetting(FR.LIBFPTR_SETTING_COM_FILE, 1); //"COM"
FR.applySingleSettings();

Если FR.open()<>0 тогда //Соединение с ККТ
ОтветДрайвера("Подключение ККМ");
СтатусВозврата(0);
возврат;
КонецЕсли;


//Запрос параметров
FR.setParam(FR.LIBFPTR_PARAM_DATA_TYPE, FR.LIBFPTR_DT_STATUS);
FR.queryData();

НомерКассира    = FR.getParamInt(FR.LIBFPTR_PARAM_OPERATOR_ID);
состояниеСмены  = FR.getParamInt(FR.LIBFPTR_PARAM_SHIFT_STATE);
ДатаВремя       = FR.getParamInt(FR.LIBFPTR_PARAM_DATE_TIME);
РежимККТ        = FR.getParamInt(FR.LIBFPTR_PARAM_MODE);
ПодрежимККТ     = FR.getParamInt(FR.LIBFPTR_PARAM_SUBMODE);
НомерЧека        = FR.getParamInt(FR.LIBFPTR_PARAM_RECEIPT_NUMBER);
НомерДокумента  = FR.getParamInt(FR.LIBFPTR_PARAM_DOCUMENT_NUMBER);

FR.setParam(1021, СокрЛП(Пользователь));
FR.operatorLogin();

FR.openShift(); //Открыть смену

FR.checkDocumentClosed();

ОтветДрайвера("Подключение ККМ");

КонецПроцедуры


Процедура РаботаККМ()

//Открыть чек
FR.setParam(1021, СокрЛП(Пользователь));
FR.operatorLogin();

Если ВозвратныйЧек=1 Тогда
FR.setParam(FR.LIBFPTR_PARAM_RECEIPT_TYPE, FR.LIBFPTR_RT_SELL_RETURN);
Иначе
FR.setParam(FR.LIBFPTR_PARAM_RECEIPT_TYPE, FR.LIBFPTR_RT_SELL);
КонецЕсли;
FR.openReceipt();

//Продажа
FR.setParam(FR.LIBFPTR_PARAM_COMMODITY_NAME, ЛЕв(Имя,20));
FR.setParam(FR.LIBFPTR_PARAM_PRICE, ЦенаПродажи);
FR.setParam(FR.LIBFPTR_PARAM_QUANTITY, Колич);
FR.setParam(FR.LIBFPTR_PARAM_TAX_TYPE, FR.LIBFPTR_TAX_NO );
Если ПустоеЗначение(Маркировка)=0 Тогда
FR.setParam(1162, СокрЛП(Маркировка));
КонецЕсли;

Если FR.registration() <> 0 тогда
ОтветДрайвера("Продажа");
Возврат;
КонецЕсли;


//Закрыть чек
Если ВозвратныйЧек=0 Тогда
//Оплата
FR.setParam(FR.LIBFPTR_PARAM_PAYMENT_TYPE, FR.LIBFPTR_PT_CASH);
FR.setParam(FR.LIBFPTR_PARAM_PAYMENT_SUM, СуммаВКассу);
FR.payment();
КонецЕсли;

FR.closeReceipt();


//Z-отчет
FR.setParam(1021, СокрЛП(Пользователь));
//fptr.setParam(1203, '123456789047');
FR.operatorLogin();

FR.setParam(FR.LIBFPTR_PARAM_REPORT_TYPE, FR.LIBFPTR_RT_CLOSE_SHIFT);
FR.report();

FR.checkDocumentClosed();


//X-отчет
FR.setParam(1021, СокрЛП(Пользователь));
//fptr.setParam(1203, '123456789047');
FR.operatorLogin();


FR.setParam(FR.LIBFPTR_PARAM_REPORT_TYPE, FR.LIBFPTR_RT_X);
FR.report();


//открыть ящик
FR.openDrawer();


КонецПроцедуры

Все подробности о методах можно прочитать в документации к драйверу, примеры нужно смотреть для "делфи" с поправкой на синтаксис 1С 7.7

Во вложенном файле то же самое, это для тех, кто хочет отблагодарить.
 

24 Comments

  1. user940969

    Как же вовремя статья. Как раз накануне искал как 10-й драйвер Атола подключить. Однозначно плюс

    Reply
  2. monkbest

    Есть инфа 100%, что 10й драйвер не нужен, точнее нужен не всегда. Я могу кое-что не так сейчас написать, т.к. не автор драйверов, и это все гипотеза.

    Сам поддерживаю 1С7.7 ТиС, который давно не обновлябелен. Цель мероприятия по установке 10ого драйвера в том, чтобы данные в ОФД приходили в новом формате, который не реализован в 8ом драйвере.

    Драйвер Атол состоит из 2ух частей: драйвер и служба обмена с ОФД. Драйвер шлет команды в ККМ, а служба шлет данные в ОФД.

    Драйвер позволяет работаьь в двух режимах: отправлять в XML формате целиком готовый документ в ККМ или последовательно посылать команды (открыть чек, продать товар 1, продать товар 2, установить скидку, закрыть чек, закрыть смену и т.д.)

    В каждой версии драйверов своя dll`ка, для работы через объектную модель и объектная модель собственно разная. Т.е. не просто от версии к версии добавляются новые реквизиты и методы, а они в корне меняются. Обратной совместимости нет. Поэтому автор статьи изучил новую систему команд и реализовал её в 1Сном коде.

    После обновления прошивки в ККМ (её делали те, кто обслуживают ККМ) на новый формат, служба EoU стала писать нонстопом ошибку. Видимо, из-за нового формата. Делать нечего, решил что надо ставить 10й драйвер и что-то кодить самому.

    Я начал читать документацию по новой системе команд, новой компоненты. Но очень быстро, лень победила и я начал думать. И вот что придумал:

    1. Я установил обе версии драйверов

    2. Служба EoF запущено от 10й версии

    3. COM объект юзаю старый от 8й

    4. Обработка торгового оборудования осталась прежней

    что нельзя:

    нельзя выбить на ККМ новые операции т.к. в 8ом драйвере нет нужных свойств и методов. Всяки авансы, оплаты по банку от физ.лиц…

    но в моем случае это и не надо

    мне надо:

    открыл смену

    выбил чек наличными Nраз

    закрыл смену

    все работает, в офд уходит

    Reply
  3. user1167562

    При работе на 8й версии АТОЛ работает и отправляет, но неверно отправляет ставку НДС, они сменили порядок ставок.

    Хорошо быстро обнаружили

    Reply
  4. Санта

    Добрый день! Подскажите пожалуйста по связке 7.7 ТИС и АТОЛ 10?

    В Вашем варианте какую dll указывать в настройках торгового оборудования?

    Reply
  5. victuan

    (2) Вы не правы, ДТО8 поддерживает все новые теги, не хуже чем ДТО10.

    Готовое решение по ссылке http://infostart.ru/public/603118/

    Reply
  6. kalleka

    Вариант работает с новыми тегами, которые становятся обязательными с 1 июля?

    Reply
  7. Tarlich

    Прошу подсказать :

    Тис 9.2 передает в ПечатьЧЕк() списокТоваров (ТаблицаЗначенй)

    Данный код работает — все ок!!!

    но мне надо добавить цикл что бы печатать товары ,

    подскажите как ?

    сделал :

    Объект.openReceipt();
    СписокТоваров.ВыбратьСтроки();
    Пока СписокТоваров.ПолучитьСтроку() = 1 Цикл
    Объект.setParam(Объект.LIBFPTR_PARAM_COMMODITY_NAME,СокрЛП(СписокТоваров.ТовНаим));
    Объект.setParam(Объект.LIBFPTR_PARAM_PRICE, СписокТоваров.Цена);
    Объект.setParam(Объект.LIBFPTR_PARAM_QUANTITY, СписокТоваров.Количество);
    Объект.setParam(Объект.LIBFPTR_PARAM_TAX_TYPE, Объект.LIBFPTR_TAX_NO );
    КонецЦикла;

    Печатаеться один товар только …..

    Reply
  8. phsin

    Установил версию 10.5.0.0 ДТО

    запускаю на win 7

    ИмяКомпоненты = «addin_fptr10_x86.dll»;
    Если ЗагрузитьВнешнююКомпоненту(ИмяКомпоненты) <> 0  Тогда
    Попытка
    driver = СоздатьОбъект(«AddIn.Fptr10»);
    исключение
    Сообщить(«Ошибка при создании объекта «+ИмяКомпоненты,»!»);
    конецпопытки;
    Иначе
    Сообщить(«Ошибка загрузки внешней компоненты «+ИмяКомпоненты+»
    |»+ОписаниеОшибки(),»»);
    КонецЕсли;

    Показать

    получаю ошибку:


    Ошибка при создании объекта из компоненты C:1C estaddin_fptr10_x86.dll (отсутствует интерфейс IInitDone)

    можете выложить вашу версию драйвера addin_fptr10_x86.dll ?

    Reply
  9. resonance

    ( 8) Добрый день, подскажите — удалось ли подключить ФР? отсутствует интерфейс IInitDone Именно такую ошибку получаю

    Reply
  10. NikNIklas

    В настройках указывайте старую длл: FprnM1C.dll. В AddIn — Fptr10

    Reply
  11. NikNIklas

    (7) в цикл добавить регистрацию строки Объект.registration();

    Reply
  12. Tarlich

    (11)

    Объект.registration();

    Вот весь мой код :

    СписокТоваров.ВыбратьСтроки();
    
    Пока СписокТоваров.ПолучитьСтроку() = 1 Цикл
    Объект.openReceipt();
    //Продажа
    Объект.setParam(Объект.LIBFPTR_PARAM_COMMODITY_NAME,СокрЛП(СписокТоваров.ТовНаим));
    Объект.setParam(Объект.LIBFPTR_PARAM_PRICE, СписокТоваров.Цена);
    Объект.setParam(Объект.LIBFPTR_PARAM_QUANTITY, СписокТоваров.Количество);
    Объект.setParam(Объект.LIBFPTR_PARAM_TAX_TYPE, Объект.LIBFPTR_TAX_NO );
    Если Объект.registration() <> 0 тогда
    ОтветДрайвера(«Продажа»,Объект);
    рез = 1;
    КонецЕсли;
    //Закрыть чек
    Если ПризнВозврата=0 Тогда
    //Оплата
    Объект.setParam(Объект.LIBFPTR_PARAM_PAYMENT_TYPE, Объект.LIBFPTR_PT_CASH);
    Объект.setParam(Объект.LIBFPTR_PARAM_PAYMENT_SUM, СуммаЧека);
    Объект.payment();
    КонецЕсли;
    Объект.closeReceipt();
    КонецЦикла;

    Показать

    Reply
  13. NikNIklas

    (12)

    Объект.openReceipt();
    Пока СписокТоваров.ПолучитьСтроку() = 1 Цикл
    //Продажа
    Объект.setParam(Объект.LIBFPTR_PARAM_COMMODITY_NAME,СокрЛП(СписокТоваров.ТовНаим));
    Объект.setParam(Объект.LIBFPTR_PARAM_PRICE, СписокТоваров.Цена);
    Объект.setParam(Объект.LIBFPTR_PARAM_QUANTITY, СписокТоваров.Количество);
    Объект.setParam(Объект.LIBFPTR_PARAM_TAX_TYPE, Объект.LIBFPTR_TAX_NO );
    Если Объект.registration() <> 0 тогда
    ОтветДрайвера(«Продажа»,Объект);
    рез = 1;
    КонецЕсли;
    КонецЦикла;
    //Закрыть чек
    Если ПризнВозврата=0 Тогда
    //Оплата
    Объект.setParam(Объект.LIBFPTR_PARAM_PAYMENT_TYPE, Объект.LIBFPTR_PT_CASH);
    Объект.setParam(Объект.LIBFPTR_PARAM_PAYMENT_SUM, СуммаЧека);
    Объект.payment();
    КонецЕсли;
    Объект.closeReceipt();

    Показать

    Reply
  14. NikNIklas

    (8) (9) получилось подключить?

    Reply
  15. resonance

    FprnM1C.dll — указывал и AddIn — Fptr10

    ошибка все равно одна и та же — «Служба Frontol не запущена.»…

    Reply
  16. victuan

    Готовое решение с поддержкой ДТО8 и ДТО10 по ссылке http://expert.chistov.pro/public/603118/

    Reply
  17. NikNIklas

    1с 7.7 торговля, драйвер 10.5.0, касса по усб. С локального компа на скульной базе печатает влёт. Через РДП касса подключается, видна через параметры и проверку связи, но на печать не выдает ничего: на команду .open() — возвращает «-1» и ошибку «Порт недоступен». В чем может быть затык?.. дрова одинаковые возвращает .version() = 10.5.0.0 в обоих случаях. длл-ки лежат в in, зарегены.. делаю без установки параметров .applySingleSettings()..

    Reply
  18. NikNIklas

    (17) а если указать какой порт подключать, то печатает и с сервера… Вопрос: как программно получить настройку в 7ке порта ККМ из параметров?

    Reply
  19. NikNIklas

    еще ситуация: ГТД и код страны передан в ККТ, в ОФД данные по чеку появились, а на самом чеке этих данных нет.. Лог кассы без ошибок. Это Атол 25Ф. При этом 22птк в тестовых режимах печатал всё.

    Reply
  20. NikNIklas

    (19) вопрос снят

    Reply
  21. z5515

    (8)(9)(14)

    Долго маялся с «addin_fptr10_x86.dll (отсутствует интерфейс IInitDone)»

    Потом дошло, ее не надо пытаться подключить как ВК, достаточно зарегистрировать через regsvr32,

    и обращаться к объекту «FR = СоздатьОбъект(«AddIn.Fptr10»); «

    Reply
  22. NikNIklas

    ) о том и речь была

    Reply
  23. phsin

    (5) О прекращении поддержки драйверов «АТОЛ: Драйвер ККТ с передачей данных в ОФД (54-ФЗ), 8.x» и «АТОЛ: Драйвер ККТ с передачей данных в ОФД (54-ФЗ), 9.x»

    http://1c.ru/news/info.jsp?id=25026

    О переходе на ДККТ 10 и прекращении развития и поддержки ДККТ 8 и 9

    https://www.atol.ru/company/news/o-perekhode-na-dkkt-10-i-prekrashchenii-razvitiya-i-podderzhki-dkkt-8-i-9-/

    Reply
  24. phsin

    Стандартные драйвера подружить не удалось, пришлось делать COM обертку… https://infostart.ru/public/1102431/

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *