Несколько видов оплат в Чеке ККМ и Z-отчете, разделение по секциям в X отчете

Программирование - Практика программирования

В данной статье вы сможете найти описание того, как реализовать несколько видов оплат в чеке ККМ, разделение по видам оплат в Z-отчете, а также посекционный вывод в X-отчет в 1С: Рознице 8.2 в связке с фискальными регистраторами Штрих.

Назрел вопрос реализации дополнительного вида оплаты в 1С 8.2, а также разбивки в Z отчете по секциями и по видам оплаты, в моем случае это было связано с внедрением оплаты подарочными сертификатами.

Реализовано следующий образом:

В "Обработках" в общей модуле РМК необходимо в функцию "ПробитьЧекВыполнить" добавить условия обработки номеров секций.

После результата подключения оборудование добавляем условие по номерам секций, отбор идет по типу номенклатуры, также можно сделать отбор по виду оплаты Чека ККМ, или любому другому доступному:

Для Каждого СтрокаТЧ Из ОбъектЧекККМ.ТабличныеЧасти.Товары Цикл
                                    
                    Если СтрокаТЧ.Номенклатура.видНоменклатуры.ТипНоменклатуры=Перечисления.ТипыНоменклатуры.ПодарочныйСертификат Тогда
                        НомерСекции = 2;
                    Иначе
                        НомерСекции = 1;
                    КонецЕсли;

Отбор по виду оплат:

  

  для каждого оп из ОбъектЧекККМ.ТабличныеЧасти.оплата цикл
                        если (оп.ВидОплаты.ТипОплаты= перечисления.ТипыОплатЧекаККМ.ПодарочныйСертификат) и (оп.сумма>0) тогда
                            НомерСекции=2;
                        конецесли;
                    конеццикла;

В данном условии мы установили номер секции- 2 для всех покупок и возвратов по подарочным сертификатам.

Далее в коде идет получение сумм, необходимо добавить получение сумм оплат по подарочным сертификатам:

СтрокаОплаты = Новый СписокЗначений();
                СтрокаОплаты.Добавить(2);
                СтрокаОплаты.Добавить(ПолучитьСуммуОплатыПодарочнымиСертификатами(ОбъектЧекККМ));
                СтрокаОплаты.Добавить("Оплата подарочным сертификатом");
                СтрокаОплаты.Добавить("");
                ТаблицаОплат.Добавить(СтрокаОплаты);

Добавляем Функцию "Функция ПолучитьСуммуОплатыПодарочнымиСертификатами" она выглядит следующим образом:

Функция ПолучитьСуммуОплатыПодарочнымиСертификатами(ОбъектЧекККМ)
    
    СуммаОплаты = 0;
    Для Каждого ТекОплата Из ОбъектЧекККМ.ТабличныеЧасти.Оплата Цикл
        Если ТекОплата.ВидОплаты = Справочники.ВидыОплатЧекаККМ.ОплатаПодарочнымСертификатом Тогда
            СуммаОплаты = СуммаОплаты + ТекОплата.Сумма;
        КонецЕсли;
    КонецЦикла;
    
    Возврат СуммаОплаты;
    
КонецФункции

В общем модуле находим обработчик подключаемого оборудования в моем случае это "ПодключаемоеОборудованиеШтрихМФискальныеРегистраторы", это обработчик драйвера "Штрих-М: Фискальные регистраторы" и в функцию "ЗакрытьЧек" добавляем следующие строки:

Функция ЗакрытьЧек(ОбъектДрайвера, Параметры, ПараметрыПодключения, ТаблицаОплат, ВыходныеПараметры) Экспорт

    Результат = Истина;

    СуммаНаличнойОплаты     = 0;
    СуммаБезналичнойОплаты1 = 0;
    СуммаБезналичнойОплаты2 = 0;
    
    Для ИндексОплаты = 0 По ТаблицаОплат.Количество() - 1 Цикл
        Если ТаблицаОплат[ИндексОплаты][0].Значение = 0 Тогда
            СуммаНаличнойОплаты = СуммаНаличнойОплаты + ТаблицаОплат[ИндексОплаты][1].Значение;
        ИначеЕсли ТаблицаОплат[ИндексОплаты][0].Значение = 1 Тогда
            СуммаБезналичнойОплаты1 = СуммаБезналичнойОплаты1 + ТаблицаОплат[ИндексОплаты][1].Значение;
        ИначеЕсли ТаблицаОплат[ИндексОплаты][0].Значение = 2 Тогда
            СуммаБезналичнойОплаты2 = СуммаБезналичнойОплаты2 + ТаблицаОплат[ИндексОплаты][1].Значение;
        КонецЕсли;
    КонецЦикла;

                                          
    Результат = ОбъектДрайвера.ЗакрытьЧек(ПараметрыПодключения.ИДУстройства,
                                          СуммаНаличнойОплаты,
                                          СуммаБезналичнойОплаты1,
                                          СуммаБезналичнойОплаты2);
                                          
    Если НЕ Результат Тогда
        ВыходныеПараметры.Очистить();
        ВыходныеПараметры.Добавить(999);
        ВыходныеПараметры.Добавить("");
        ОбъектДрайвера.ПолучитьОшибку(ВыходныеПараметры[1]);

        ОтменитьЧек(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВыходныеПараметры);
    КонецЕсли;

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

КонецФункции

Вот и все, в итоге вы получаете разбивку по видам оплат в Z отчете, как показано на рисунке, и также разделение по секциям в X отчете.

См. также

Комментарии
1. probot (Probot1c) 02.02.17 11:36 Сейчас в теме
Оставьте свое сообщение