Подключить iKKM к 1С v 8.2

Есть готовая внешняя обработка работы с торговым оборудование, скачать здесь


Общий пример кода для интеграции iKKM в 1С 

Для подключения iKKM в режиме фискального регистратора, достаточно передать переменные "СуммаЧека" и "ПолученоНаличности"

Другие возможные типы оплаты: banktaradiscount
Можно указывать одновременно несколько типов оплаты. 

переменная IP_iKKM - статична,  её можно интегрировать в справочник ККМ

при начале работы надо указать ID_Token, при каждом новом чеке, кассовый аппарат будет выдавать новый ID_Token в ответе  "ИмяФайлаЗапроса" 

Метод POST


Перем IP_iKKM;    // ip кассового аппарата - указан на дисплее при включении WEB-кассы например 192.168.0.19

Перем ID_Token;  // Web-api ключ - указан на дисплее при включении WEB- кассы например 94551644
Перем СуммаЧека;
Перем ПолученоНаличности; 
Перем Bank;
Перем ТелоЧека; // строки(товар - цена - кол-во - сумма) в цикле длина 19 символов либо 24 либо 32 


Процедура ВыполнитьHTTPЗапрос()
    
ИмяФайлаОтвета = ПолучитьИмяВременногоФайла();
    
ФайлЗапроса = ПолучитьИмяВременногоФайла();
    
boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор()), "-", "");
    
boundaryForPrint = СтрЗаменить(Строка(Новый УникальныйИдентификатор()), "-", "");
    
    
ТекстовыйФайл = Новый ЗаписьТекста(ФайлЗапроса,КодировкаТекста.UTF8);
    
        //параметр "key"
    
ТекстовыйФайл.ЗаписатьСтроку("--"+boundary);
    
ТекстовыйФайл.ЗаписатьСтроку("Content-Disposition: form-data; name=""key""");
    
ТекстовыйФайл.ЗаписатьСтроку("");
    
ТекстовыйФайл.ЗаписатьСтроку(ID_Token);
    
        //параметр "sale"
    
ТекстовыйФайл.ЗаписатьСтроку("--"+boundary);
    
ТекстовыйФайл.ЗаписатьСтроку("Content-Disposition: form-data; name=""sale""");
    
ТекстовыйФайл.ЗаписатьСтроку("");
    
ТекстовыйФайл.ЗаписатьСтроку(СуммаЧека);
    //параметр "cash"
    
ТекстовыйФайл.ЗаписатьСтроку("--"+boundary);
    
ТекстовыйФайл.ЗаписатьСтроку("Content-Disposition: form-data; name=""cash""");
    
ТекстовыйФайл.ЗаписатьСтроку("");
    
ТекстовыйФайл.ЗаписатьСтроку(ПолученоНаличности);
    //параметр "bank"
ТекстовыйФайл.ЗаписатьСтроку("--"+boundary);
ТекстовыйФайл.ЗаписатьСтроку("Content-Disposition: form-data; name=""bank""");
ТекстовыйФайл.ЗаписатьСтроку("");
ТекстовыйФайл.ЗаписатьСтроку(bank);
    
       //параметр "print"
    
ТекстовыйФайл.ЗаписатьСтроку("--"+boundary);
    
ТекстовыйФайл.ЗаписатьСтроку("Content-Disposition: form-data; name=""print""");
    
ТекстовыйФайл.ЗаписатьСтроку("Content-Type: multipart/form-data; charset=utf-8; boundary="+boundaryForPrint);
    
ТекстовыйФайл.ЗаписатьСтроку("");
    
//начало цикла строка на печать
ТекстовыйФайл.ЗаписатьСтроку("--"+boundaryForPrint); 
    
ТекстовыйФайл.ЗаписатьСтроку("");
    
ТекстовыйФайл.ЗаписатьСтроку(ТелоЧека); 
//здесь конец цикла 
    
ТекстовыйФайл.ЗаписатьСтроку("--"+boundaryForPrint+"--");
    
ТекстовыйФайл.ЗаписатьСтроку("--"+boundary+"--");

    
    
ТекстовыйФайл.Закрыть();
                
    
РесурсНаСервере = "/api/";
    
ЗаголовокHTTP = Новый Соответствие();
    
ЗаголовокHTTP.Вставить("Content-Type", "multipart/form-data; boundary="+boundary);
    
    


    
ТекстHТМЛответа = Новый ТекстовыйДокумент;


    
    
 Попытка  
        
        HTTPСоединение = Новый HTTPСоединение(IP_iKKM,"8080");
    
    HTTPСоединение.ОтправитьДляОбработки(ФайлЗапроса,РесурсНаСервере,ИмяФайлаОтвета,ЗаголовокHTTP);
    
    ТекстHТМЛответа.Прочитать(ИмяФайлаОтвета);
    
    ID_Token = ТекстHТМЛответа.ПолучитьТекст();
    
Исключение     
    
    // исключение здесь говорит о том, что запрос дошел до HTTP-Сервера и получил ошибку    
    
    ТекстHТМЛответа.Прочитать(ИмяФайлаОтвета);

    
    Если ПустаяСтрока(ТекстHТМЛответа.ПолучитьТекст()) 
Тогда
        
        Сообщить("ошибка сети, IP-"+IP_iKKM+" не доступен: проверь сетевое соединение" );
    
Иначе
    Сообщить("ошибка "+ТекстHТМЛответа.ПолучитьТекст()+" см коды ошибок в документации iKKM");
    
КонецЕсли;
        
 КонецПопытки;
    
УдалитьФайлы(ФайлЗапроса);
    
УдалитьФайлы(ИмяФайлаОтвета);
КонецПроцедуры


Метод GET  

Перем IP_iKKM;    // ip кассового аппарата - указан на дисплее при включении WEB-кассы например 192.168.0.19

Перем ID_Token;  // Web-api ключ - указан на дисплее при включении WEB- кассы например 94551644
Перем СуммаЧека;
Перем ПолученоНаличности; 
Перем Bank;

Процедура ВыполнитьHTTPЗапрос() 

ИмяФайлаЗапроса = ПолучитьИмяВременногоФайла();
    
ТекстHТМЛ = Новый ТекстовыйДокумент;
    
РесурсНаСервере = "/api/?key="+ID_Token+"&sale="+СуммаЧека+"&cash="+ПолученоНаличности+"&bank="+Bank;

    
Попытка
  
        
       HTTPСоединение = Новый HTTPСоединение(IP_iKKM,"8080");
        
       HTTPСоединение.Получить(РесурсНаСервере,ИмяФайлаЗапроса);
        
       ТекстHТМЛ.Прочитать(ИмяФайлаЗапроса);
        
       ID_Token = ТекстHТМЛ.ПолучитьТекст();

    
Исключение     
        
      // исключение здесь говорит о том, что запрос дошел до HTTP-Сервера и получил ошибку
    
        
       ТекстHТМЛ.Прочитать(ИмяФайлаЗапроса);


        
       Если ПустаяСтрока(ТекстHТМЛ.ПолучитьТекст()) Тогда
        
             Сообщить("ошибка сети, IP-"+IP_iKKM+" не доступен: проверь сетевое соединение" );
        
       Иначе

        
             Сообщить("ошибка "+ТекстHТМЛ.ПолучитьТекст()+" см коды ошибок в документации iKKM");

        
       КонецЕсли;
        
    
КонецПопытки;


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

Ваша проблема решена?