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

Публикация № 991465

Учет и отчетность - Кассовые операции

Подключение онлайн кассы к не типовой 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

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

Скачать файлы

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

.ert 17,00Kb
29.01.19
15
.ert 17,00Kb 15 Скачать

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. user940969 01.02.19 01:01 Сейчас в теме
Как же вовремя статья. Как раз накануне искал как 10-й драйвер Атола подключить. Однозначно плюс
2. monkbest 110 01.02.19 09:05 Сейчас в теме
Есть инфа 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раз
закрыл смену

все работает, в офд уходит
5. victuan 3621 16.06.19 07:14 Сейчас в теме
(2) Вы не правы, ДТО8 поддерживает все новые теги, не хуже чем ДТО10.
Готовое решение по ссылке http://infostart.ru/public/603118/
23. phsin 182 01.08.19 18:37 Сейчас в теме
(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-/
3. user1167562 16.05.19 20:32 Сейчас в теме
При работе на 8й версии АТОЛ работает и отправляет, но неверно отправляет ставку НДС, они сменили порядок ставок.
Хорошо быстро обнаружили
4. Санта 11.06.19 10:42 Сейчас в теме
Добрый день! Подскажите пожалуйста по связке 7.7 ТИС и АТОЛ 10?
В Вашем варианте какую dll указывать в настройках торгового оборудования?
6. kalleka 47 24.06.19 13:45 Сейчас в теме
Вариант работает с новыми тегами, которые становятся обязательными с 1 июля?
7. Tarlich 88 02.07.19 21:02 Сейчас в теме
Прошу подсказать :
Тис 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 );
	КонецЦикла;

Печатаеться один товар только .....
11. NikNIklas 09.07.19 11:35 Сейчас в теме
(7) в цикл добавить регистрацию строки Объект.registration();
12. Tarlich 88 09.07.19 11:48 Сейчас в теме
(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();    			
		КонецЦикла;
Показать
13. NikNIklas 09.07.19 11:59 Сейчас в теме
(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();
Показать
8. phsin 182 03.07.19 12:42 Сейчас в теме
Установил версию 10.5.0.0 ДТО
запускаю на win 7

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


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

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


можете выложить вашу версию драйвера addin_fptr10_x86.dll ?
14. NikNIklas 10.07.19 12:36 Сейчас в теме
(8) (9) получилось подключить?
21. z5515 4 01.08.19 07:17 Сейчас в теме
(8)(9)(14)

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

Потом дошло, ее не надо пытаться подключить как ВК, достаточно зарегистрировать через regsvr32,
и обращаться к объекту "FR = СоздатьОбъект("AddIn.Fptr10"); "
22. NikNIklas 01.08.19 10:01 Сейчас в теме
9. resonance 08.07.19 14:27 Сейчас в теме
( 8) Добрый день, подскажите - удалось ли подключить ФР? отсутствует интерфейс IInitDone Именно такую ошибку получаю
10. NikNIklas 09.07.19 11:34 Сейчас в теме
В настройках указывайте старую длл: FprnM1C.dll. В AddIn - Fptr10
15. resonance 11.07.19 12:58 Сейчас в теме
FprnM1C.dll - указывал и AddIn - Fptr10

ошибка все равно одна и та же - "Служба Frontol не запущена."...
16. victuan 3621 16.07.19 14:08 Сейчас в теме
Готовое решение с поддержкой ДТО8 и ДТО10 по ссылке http://expert.chistov.pro/public/603118/
17. NikNIklas 24.07.19 11:14 Сейчас в теме
1с 7.7 торговля, драйвер 10.5.0, касса по усб. С локального компа на скульной базе печатает влёт. Через РДП касса подключается, видна через параметры и проверку связи, но на печать не выдает ничего: на команду .open() - возвращает "-1" и ошибку "Порт недоступен". В чем может быть затык?.. дрова одинаковые возвращает .version() = 10.5.0.0 в обоих случаях. длл-ки лежат в \bin\, зарегены.. делаю без установки параметров .applySingleSettings()..
18. NikNIklas 25.07.19 09:35 Сейчас в теме
(17) а если указать какой порт подключать, то печатает и с сервера... Вопрос: как программно получить настройку в 7ке порта ККМ из параметров?
19. NikNIklas 29.07.19 15:27 Сейчас в теме
еще ситуация: ГТД и код страны передан в ККТ, в ОФД данные по чеку появились, а на самом чеке этих данных нет.. Лог кассы без ошибок. Это Атол 25Ф. При этом 22птк в тестовых режимах печатал всё.
20. NikNIklas 30.07.19 09:52 Сейчас в теме
24. phsin 182 02.08.19 14:12 Сейчас в теме
Стандартные драйвера подружить не удалось, пришлось делать COM обертку... https://infostart.ru/public/1102431/
25. Drizer2000 14 08.10.20 14:13 Сейчас в теме
А ваша обработка работает с 5.0 платформой атол?
Оставьте свое сообщение