Расширение типового функционала работы с ККМ в 1с Розница 1.0 (добавление произвольного количества типов оплаты)
У одного клиента,занимающегося розничной торговлей, появилась необходимость разделять продажи по типам оплаты в Z-отчете с бОльшим разнообразием,чем позволяет типовой функционал работы с ТО.
Т.е. стандартную разбивку на наличную и безналичную оплату расширить до нал,оплата по платежным картам(безнал),банковским кредитам.В то же время исключить кредит из секции «оплата по безналу».
Почему возникла такая потребность?Все просто,в бэк-офисе так проще сверять Отчет о розничных продажах с Z-отчетом.
- Описание
- Подробнее
Описание
Итак.Начну с того,что в качестве ККМ используется принтер чеков ЕНВД под управлением стандратного атоловского драйвера версии 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 Тогда
//Объект.Удалить(«ЭтоВозврат»);
Иначе
Результат = мОшибкаНеизвестно;
Объект.ОписаниеОшибки = Драйвер.ОписаниеРезультата;
ОтменитьЧек(Объект);
КонецЕсли;
Возврат Результат;
КонецФункции // ЗакрытьЧек()
Буду очень рад если кому то данная статья поможет.
