Итак.Начну с того,что в качестве ККМ используется принтер чеков ЕНВД под управлением стандратного атоловского драйвера версии 6.17.1
В настройках этого драйвера можно указать произвольное количество типов оплаты(врамках разумного) см.рис. "Настройка ККМ"
Однако выяснилось,что раньше для взаимодействия с ккм использовался стандартный интерфейс("AddIn.FPrnM45"),потом переделали на стандарт 1с с использованием "AddIn.ATOL_KKM_1C".Так вот,новый стандарт 1с сильно усечен и через новый объект вызовы Fprnm1C.dll с указанием типа оплаты использовать нельзя.В текущих обработках обслуживания ТО для закрытия чека используется функция вида:
Функция ЗакрытьЧек(Объект, СуммаНал, СуммаБезнал) Экспорт
Результат = мНетОшибки;
Если Не Объект.Драйвер.ЗакрытьЧек(Объект.ИДУстройства, СуммаНал, СуммаБезнал) Тогда
Результат = мОшибкаНеизвестно;
Объект.Драйвер.ПолучитьОшибку(Объект.ОписаниеОшибки);
ОтменитьЧек(Объект);
КонецЕсли;
Возврат Результат;
КонецФункции // ЗакрытьЧек()
В ней передается на ККМ всего лишь 2 суммы по налу и безналу.
Решение проблемы:
- Документ.ЧекККМ.Модуль объекта
Изменена Функция ПечатьЧекаККМ(Идентификатор, НомерЧека, НомерСмены,
ОписаниеЧека, СуммаНал, СуммаБезнал, ПризнакВозврата)
//Марат
//Результат = ПолучитьСерверТО().ЗакрытьЧек(Идентификатор, СуммаНал, СуммаБезнал);
Результат = ПолучитьСерверТО().ЗакрытьЧек(Идентификатор, СуммаНал, СуммаБезнал,ПолучитьСуммуОплатыБанковскимКредитом());
- Обработка.ТОСервер.Модуль объекта
Изменена Функция ЗакрытьЧек(Идентификатор, СуммаНал, СуммаБезнал,СуммаКредит=0) Экспорт //Марат добавлен параметр СуммаКредит=0
//марат
//Результат = Обработка.ЗакрытьЧек(Объект, СуммаНал, СуммаБезнал,СуммаБезнал,СуммаКредит);
Результат = Обработка.ЗакрытьЧек(Объект, СуммаНал, Макс(0,СуммаБезнал-СуммаКредит),СуммаКредит);
-Обновлена обработка обслуживания ТО ATOLFiscalPrinters_v2.epf
Заменена Функция ЗакрытьЧек(Объект, СуммаНал, СуммаБезнал,СуммаКредит=0) Экспорт
//марат+
Попытка
ПрогИД = "AddIn.FPrnM45";
//ПодключитьВнешнююКомпоненту(ПрогИД);
Драйвер = Новый (ПрогИД);
Исключение
Попытка
ПодключитьВнешнююКомпоненту(ПрогИД);
Драйвер = Новый (ПрогИД);
Исключение
Результат = мОшибкаЗагрузкиДрайвера;
ОписаниеОшибки = "Невозможно подключить внешнюю компоненту AddIn.FPrnM45.
| Попытайтесь зарегистрировать драйвер ККМ FprnM1C.dll в системе
| командой regsvr32.";
Сообщить(ОписаниеОшибки);
Возврат Результат;
КонецПопытки;
КонецПопытки;
Результат = мНетОшибки;
Ответ = 0;
Если СуммаНал > 0 Тогда
Драйвер.Summ = СуммаНал;
Драйвер.TypeClose = 0;
Драйвер.Payment();
Ответ = Драйвер.Результат;
КонецЕсли;
Если Ответ = 0 Тогда
Если СуммаБезнал > 0 Тогда
Драйвер.Summ = СуммаБезнал;
Драйвер.TypeClose = 1;
Драйвер.Payment();
Ответ = Драйвер.Результат;
КонецЕсли;
КонецЕсли;
Если Ответ = 0 Тогда
Если СуммаКредит > 0 Тогда
Драйвер.Summ = СуммаКредит;
Драйвер.TypeClose = 2;
Драйвер.Payment();
Ответ = Драйвер.Результат;
КонецЕсли;
КонецЕсли;
Если Ответ = 0 Тогда
Драйвер.CloseCheck(); // Закрыть чек
КонецЕсли;
Если Ответ = 0 Тогда
//Объект.Удалить("ЭтоВозврат");
Иначе
Результат = мОшибкаНеизвестно;
Объект.ОписаниеОшибки = Драйвер.ОписаниеРезультата;
ОтменитьЧек(Объект);
КонецЕсли;
Возврат Результат;
КонецФункции // ЗакрытьЧек()
Буду очень рад если кому то данная статья поможет.