Каталог решений - Расширение типового функционала работы с ККМ в 1с Розница 1.0 (добавление произвольного количества типов оплаты)

Расширение типового функционала работы с ККМ в 1с Розница 1.0 (добавление произвольного количества типов оплаты)

Расширение типового функционала работы с ККМ в 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 Тогда

                               //Объект.Удалить(«ЭтоВозврат»);

                Иначе

                               Результат = мОшибкаНеизвестно;

                               Объект.ОписаниеОшибки = Драйвер.ОписаниеРезультата;

                               ОтменитьЧек(Объект);

                КонецЕсли;

 

                Возврат Результат;

КонецФункции // ЗакрытьЧек()


Буду очень рад если кому то данная статья поможет.

has been added to your cart:
Оформление заказа