Имя: Пароль:
1C
1С v8
Торговое оборудование Фискальный регистратор
, ,
0 Snuts
 
28.11.19
07:41
Добрый день где взять AddIn.DrvFR1C.dll для фискального регистратора, в драйвере штрих М фр 4.9 в bin не нашел там только DrvFR.dll

в описании документации и так же  в конфигураторе проверил нужен именно ADDln.DRVFR1C.dll

Описание интерфейса
Драйвер разработан в виде внешней компоненты 1С и предоставляет набор методов в
соответствии с документом «Требования к разработке драйверов для фискальных
регистраторов».
При подключении драйвера в 1С:Предприятии в качестве параметра «Идентификатор
объекта» в методе «ПодключитьВнешнююКомпоненту» необходимо использовать строку
«AddIn.DrvFR1C».
Пример:
ПрогИД = "AddIn.DrvFR1C";
ПодключитьВнешнююКомпоненту(ПрогИД);
Драйвер = Новый(ПрогИД);
1 Kigo_Kigo
 
28.11.19
07:53
по факту  загрузить внешнюю компоненту "DrvFR.dll"
СоздатьОбъект("AddIn.DrvFR1C")
2 Snuts
 
28.11.19
07:55
(1) мои действия просто регистрировать DrvFR.dll
3 Kigo_Kigo
 
28.11.19
07:57
(2) да, или просто установить пакет установки штриха, после этого COM объект будет доступен через
ДрайверФР = Новый(«AddIn.DrvFR1C»);
4 Kigo_Kigo
 
28.11.19
07:59
или новыйСОМОбъект , уже не помню
5 Snuts
 
28.11.19
08:02
(4) DrvFR.dll зарегистрировал все равно ошибка

Фискальный регистратор ФР ПТК RR 02KZ: Тест не пройден.
Дополнительное описание: Ошибка при создании объекта драйвера
Проверьте, что драйвер зарегистрирован в системе
6 Kigo_Kigo
 
28.11.19
08:03
(5) а как регистрируете?
Закинь содержимое папки штриха bin в корень базы
7 Kigo_Kigo
 
28.11.19
08:05
Попытка
    ЗагрузитьВнешнююКомпоненту("DrvFR.dll");
    Сообщить("Компонента DrvFR.dll загружена");
Исключение
    Сообщить("Компонента DrvFR.dll не найдена!", СтатусСообщения.Внимание);
КонецПопытки
8 Snuts
 
28.11.19
08:06
(6) пуск - выполнить в окне regsvr32.exe путь к файлу\DrvFR.dll
9 Kigo_Kigo
 
28.11.19
08:06
(8) Она регится номально? Винда какая?
10 Kigo_Kigo
 
28.11.19
08:07
Потому как обячно от вин 7-ки и выше надо регать через бат файл с правами администратора
11 Snuts
 
28.11.19
08:08
(10) вин 7 проф 64 бит, попробовать через cmd с правами админа?
12 Snuts
 
28.11.19
08:08
(9) вообще пишет что успешно зарегана
13 Kigo_Kigo
 
28.11.19
08:10
(12) 1с-ка 32 или 64?
14 Kigo_Kigo
 
28.11.19
08:10
на 1сх64 работать не будет
15 Snuts
 
28.11.19
08:10
(13) 64
16 Kigo_Kigo
 
28.11.19
08:11
надо ставить 32-ю платформу с 64 - не работатет
17 Snuts
 
28.11.19
08:11
(14) вот и проблема, теперь стоит проверить на 32 битной системе?
18 Kigo_Kigo
 
28.11.19
08:11
даже не мучайся
19 Kigo_Kigo
 
28.11.19
08:11
не системе, а платформе, система пофиг какая
20 Snuts
 
28.11.19
08:12
(19) ок ща 32 поставлю отпишусь
21 Kigo_Kigo
 
28.11.19
08:20
Попытка
        ПодключитьВнешнююКомпоненту("AddIn.DrvFR"); // достаточно штатной установки драйвера на локальный ПК или сервер
        ком=Новый COMОбъект("AddIn.DrvFR"); // никакой более регистрации на современных ОС обычно не требуется
        глФР=ком; // экспортная переменная глФР переменная должна быть объявлена в глобальном модуле обычного приложения
    Исключение
        Сообщить("Ошибка инициализации фискального регистратора кассовых чеков: "+ОписаниеОшибки(),СтатусСообщения.Важное);
    КонецПопытки;
    Пароль = 30;
    ПодключитьсяКФР(Пароль);
    рКодОшибки = "";
22 Kigo_Kigo
 
28.11.19
08:21
&НаКлиенте
Функция ПодключитьсяКФР(Пароль)
    Рез = 0;
    
    глФР.Password=Пароль;
    глФР.Connect();
    
    Ответ = глФР.ResultCode;
    Если Ответ=0 Тогда
        Рез=1;
    Иначе
        Сообщить(глФР.ResultCodeDescription);
    КонецЕсли;
    глФР.Beep();
    
    Возврат Рез;
КонецФункции
23 Kigo_Kigo
 
28.11.19
08:32
нате вам весь код работы с ккм

&НаКлиенте
Функция ПодключитьсяКФР(Пароль)
    Рез = 0;
    
    глФР.Password=Пароль;
    глФР.Connect();
    
    Ответ = глФР.ResultCode;
    Если Ответ=0 Тогда
        Рез=1;
    Иначе
        Сообщить(глФР.ResultCodeDescription);
    КонецЕсли;
    глФР.Beep();
    
    Возврат Рез;
КонецФункции
&НаКлиенте
Функция ОтключитьсяОтФР(Пароль, ЗапоминатьОшибку = 1)
    Рез = 0;
    
    // пеключим ФР в нерабочий режим
    глФР.Password=Пароль;
    глФР.Disconnect();
    
    Ответ = глФР.ResultCode;
    Если Ответ=0 Тогда
        Рез=1;
    ИначеЕсли ЗапоминатьОшибку = 1 Тогда
        Сообщить(глФР.ResultCodeDescription);
    КонецЕсли;
    
    Возврат Рез;
КонецФункции

&НаКлиенте
Функция ОткрытьСмену(рКодОшибки=0) Экспорт
    Попытка
        рКодОшибки=0;
        
        фр=глФР;
        фр.Password=1;
        
        Если фр.ECRMode<>4 Тогда // смена уже открыта, или некий другой режим
            рКодОшибки=99;
            Возврат Истина;
        КонецЕсли;
        
        рез=фр.OpenSession();
        Если рез<>0 Тогда
            Сообщить("ОткрытьСмену, ошибка выполнения: "+фр.ResultCodeDescription);
            рКодОшибки=фр.ResultCode;
            Возврат Ложь;
        КонецЕсли;
        
        Сообщить("ОткрытьСмену, смена успешно открыта.");
        Возврат Истина;
    Исключение
        Сообщить("ОткрытьСмену, ошибка: "+ОписаниеОшибки(),СтатусСообщения.Важное);
        Возврат Ложь;
    КонецПопытки;
КонецФункции
&НаКлиенте
Функция ЗакрытьСмену(рКодОшибки=0) Экспорт
    Попытка
        рКодОшибки=0;
        
        фр=глФР;
        фр.Password=30; // можно ещё 29
        
        Если фр.ECRMode<>2 и фр.ECRMode<>3 Тогда // смена уже закрыта, или другой режим
            рКодОшибки=99;
            Возврат Истина;
        КонецЕсли;
        
        рез=фр.PrintReportWithCleaning();
        Если рез<>0 Тогда
            Сообщить("ЗакрытьСмену, ошибка выполнения: "+фр.ResultCodeDescription);
            рКодОшибки=фр.ResultCode;
            Возврат Ложь;
        КонецЕсли;
        
        Сообщить("ЗакрытьСмену, смена успешно закрыта.");    
        Возврат Истина;
    Исключение
        Сообщить("ЗакрытьСмену, ошибка: "+ОписаниеОшибки(),СтатусСообщения.Важное);
        Возврат Ложь;
    КонецПопытки;
КонецФункции


&НаСервере
Функция ВернутьИННКассира()
    Возврат Объект.Кассир.Физлицо.ИНН;
КонецФункции

&НаКлиенте
Функция ФнОперация(ТипЧека,Цена,Количество,Налог,Сумма, ПризнакСпособаРасчета, ПризнакПредметаРасчета, Наименование,получено,ПоКарте,КудаОтправитьЧек,Детально)
    
    
    КорректноКудаОтправитьЧек = -1;//-1 не ввден, 1- корректно,0 не корректно
    Если СокрЛП(КудаОтправитьЧек) <> "" Тогда
        Если Найти(СокрЛП(КудаОтправитьЧек),"@") <> 0 Тогда
            КорректноКудаОтправитьЧек = 1;
        ИначеЕсли Лев(СокрЛП(КудаОтправитьЧек),2) = "+7" Тогда
            КорректноКудаОтправитьЧек = 1;
        Иначе
            КорректноКудаОтправитьЧек = 0;
        КонецЕсли;
        Если  КорректноКудаОтправитьЧек = 0 Тогда
            Сообщить("Не корректно введен email или номер телефона клиента");
            Возврат 0;
        Иначе
            КорректноКудаОтправитьЧек = -1;
            //Предупреждение("Проверте  email или номер телефона клиента, номер телефона должен начинаться на +7");
        КонецЕсли;
        
    КонецЕсли;
    //Если Объект.Кассир.ПарольККТ = 0 тогда
        глФР.Password = 1;
    //Иначе
        //глФР.Password = Объект.Кассир.ПарольKKT;
    //КонецЕсли;
     ИннКассира = ВернутьИННКассира();

    Если СокрЛП(ИннКассира) = "" тогда
        Сообщить("У кассира/приемщика не указан ИНН");
        Возврат 0;
    Иначе
        глФР.TagNumber = 1203;
        глФР.TagType = 7;
        глФР.TagValueStr = СокрЛП(ИннКассира);
        //глФР.TagValueStr = "623000407680";
        глФР.FNSendTag();
    КонецЕсли;
    СколькоНадоПолученно = 0;
    
    
    
    Если Детально = 0 Тогда
        глФР.CheckType = ТипЧека;
        глФР.StringForPrinting = Наименование;
        глФР.Price = Цена;
        глФР.Quantity = Количество;
        глФР.Tax1 = Налог;
        глФР.Tax2 = Налог;
        глФР.Tax3 = Налог;
        глФР.Tax4 = Налог;
        глФР.Department = 1;
        //глФР.Summ1 = Сумма;
        //глФР.PaymentTypeSign = ПризнакСпособаРасчета;
        //глФР.PaymentItemSign = ПризнакПредметаРасчета;
        Если Объект.ЧекНаВозврат  = Истина Тогда
            глФР.ReturnSale();
            
        Иначе
            
            глФР.Sale();
        КонецЕсли;

        
    Иначе
        Для каждого СтрокаРаботы Из Объект.Работы Цикл
            глФР.CheckType = ТипЧека;
            глФР.StringForPrinting = СокрЛП(СтрокаРаботы.Номенклатура);
            Если СтрокаРаботы.Количество <> 0 Тогда
                глФР.Price = СтрокаРаботы.Сумма/СтрокаРаботы.Количество;
                глФР.Quantity = СтрокаРаботы.Количество;
                //СколькоНадоПолученно = СколькоНадоПолученно + СтрокаРаботы.Сумма/СтрокаРаботы.Количество*СтрокаРаботы.Количество;
                
            Иначе
                глФР.Price = СтрокаРаботы.Сумма;
                глФР.Quantity = 1;
                //СколькоНадоПолученно = СколькоНадоПолученно + СтрокаРаботы.Сумма;
                
            КонецЕсли;
            глФР.Tax1 = Налог;
            глФР.Tax2 = Налог;
            глФР.Tax3 = Налог;
            глФР.Tax4 = Налог;
            глФР.Department = 1;
            //глФР.Summ1 = Сумма;
            
            //глФР.PaymentItemSign = ПризнакПредметаРасчета;
            //            ГлФР.FNOperation();
            
            Если Объект.ЧекНаВозврат  = Истина Тогда
                глФР.ReturnSale();
                
            Иначе
                
                глФР.Sale();
            КонецЕсли;
            
        КонецЦикла;
        
    КонецЕсли;
    //глФР.PaymentTypeSign = 4;
    //ГлФР.FNOperation();

    Если КорректноКудаОтправитьЧек  = 0 Тогда
        глФР.CustomerEmail  = СокрЛП(КудаОтправитьЧек);
        глФР.FNSendCustomerEmail();
        
    КонецЕсли;
    Если (Получено = 0) И (ПоКарте = 0) Тогда
        глФР.Summ1    = Объект.Работы.Итог("Сумма");
        глФР.Summ2    = 0;
        глФР.Summ3    = 0;
        глФР.Summ4    = 0;
    ИначеЕсли (Получено <> 0) И (ПоКарте = 0) Тогда
        глФР.Summ1    = Объект.Получено;
        глФР.Summ2    = 0;
        глФР.Summ3    = 0;
        глФР.Summ4    = 0;
    ИначеЕсли (Получено <> 0) И (ПоКарте <> 0) Тогда
        глФР.Summ1    = Объект.Получено;
        глФР.Summ2    = Объект.ПоКарте;
        глФР.Summ3    = 0;
        глФР.Summ4    = 0;
        
    ИначеЕсли (Получено = 0) И (ПоКарте <> 0) Тогда
        глФР.Summ1    = 0;
        //ГлФР.CheckSubTotal(глФР.Summ2);
        
        глФР.Summ2    = Объект.ПоКарте;
        глФР.Summ3    = 0;
        глФР.Summ4    = 0;
    КонецЕсли;
    //итогоитого=0;
    //Сообщить(СколькоНадоПолученно);
    //ГлФР.RoundingSumm();

    глФР.FNCloseCheckEx();
    Если глФР.ResultCode <> 0 Тогда
        Сообщить(глФР.ResultCode);
        глФР.Password=30;
        глФР.SysAdminCancelCheck();
        //ОтключитьсяОтФР(Объект, Пароль, 0);
        Возврат 0;
    Иначе
        Объект.ЧекПробитККМ = Истина;
    КонецЕсли;
    Возврат 1;
КонецФункции      
&НаКлиенте
Процедура ИнициализироватьФР() Экспорт
    Попытка
        ПодключитьВнешнююКомпоненту("AddIn.DrvFR"); // достаточно штатной установки драйвера на локальный ПК или сервер
        ком=Новый COMОбъект("AddIn.DrvFR"); // никакой более регистрации на современных ОС обычно не требуется
        глФР=ком; // экспортная переменная глФР переменная должна быть объявлена в глобальном модуле обычного приложения
    Исключение
        Сообщить("Ошибка инициализации фискального регистратора кассовых чеков: "+ОписаниеОшибки(),СтатусСообщения.Важное);
    КонецПопытки;
    Пароль = 30;
    ПодключитьсяКФР(Пароль);
    рКодОшибки = "";
    //ОткрытьСмену(рКодОшибки);
    //Если рКодОшибки <> 99 тогда //сменаОтрыта
    //    Сообщить(рКодОшибки);
    //КонецЕсли;
    ТипЧека =  1;
    Цена  = Объект.Работы.Итог("Сумма");
    Количество = 1;
    Налог = 0;
    Сумма = Цена;
    ПризнакСпособаРасчета = 1;
    ПризнакПредметаРасчета = 4;
    Наименование = "Оплата по Заказ-наряду № " + Строка(Объект.Номер) + " от " + Строка(Объект.Дата);
    Рез = 0;
    Если Объект.Детально тогда
        Рез = ФнОперация(ТипЧека,Цена,Количество,Налог,Сумма, ПризнакСпособаРасчета, ПризнакПредметаРасчета, Наименование,Объект.Получено,Объект.Покарте,Объект.КудаОтправитьЧек, 1);
        
    Иначе
        Рез = ФнОперация(ТипЧека,Цена,Количество,Налог,Сумма, ПризнакСпособаРасчета, ПризнакПредметаРасчета, Наименование,Объект.Получено,Объект.Покарте,Объект.КудаОтправитьЧек,0);
    КонецЕсли;
    //ЗакрытьСмену(рКодОшибки) оставим для снятия Zотчета
    Если Рез = 0 Тогда
        Сообщить("Чек ККМ не пробит",СтатусСообщения.Важное);
    Иначе
        Записать();
    КонецЕсли;
    ОтключитьсяОтФР(Пароль);
    
КонецПроцедуры

&Наклиенте
Процедура ПробитьЧекККМ(Кнопка)
//Сообщить("херькакаято");
//глФР = "";
ИнициализироватьФР();

//ПодключитьсяКФР("30")
КонецПроцедуры