Последнее время я стал натыкаться на вопросы о выводе какой-либо дополнительной информации в чек.
Эта мини-статья для экономии времени по реализации сей "хотелки" - построчного вывода суммы НДС.
Напомню, что эта доработка носит рекомендательный характер: https://its.1c.ru/db/kkt#content:56:hdoc
Для полноты добавлю и требования к новым образцам чеков: https://its.1c.ru/db/kkt#content:54:hdoc@16d201e1
Итак, начнем.
1. Для начала необходимо получить сами данные "СуммаНДС" из табличных частей документ-оснований.
Идём в ДенежныеСредстваСервер.ЗаполнитьПозицииИТаблицуОплатЧека().
После инициализации запроса получения позиций в чеке изменим его текст, добавив нужное нам поле:
...
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.Текст = ТекстЗапросаОплаченныеПозицииНоменклатуры();
//++
Запрос.Текст = СтрЗаменить(Запрос.Текст,
"ТаблицаДокумента.СтавкаНДС КАК СтавкаНДС,",
"ТаблицаДокумента.СтавкаНДС КАК СтавкаНДС, ТаблицаДокумента.СуммаНДС,");
Запрос.Текст = СтрЗаменить(Запрос.Текст,
"ТаблицаНоменклатуры.СтавкаНДС КАК СтавкаНДС,",
"ТаблицаНоменклатуры.СтавкаНДС КАК СтавкаНДС, ТаблицаНоменклатуры.СуммаНДС,");
//--
...
2. Далее следуем в МенеджерОборудованияВызовСервера.ПолучитьXMLПакетДляФискализацияЧека().
Здесь формируется XML строка для передачи в ККТ. После элемента "FiscalString" добавим нашу сумму НДС:
...
ЗаписьXML.ЗаписатьНачалоЭлемента("FiscalString");
ЗаписьXML.ЗаписатьАтрибут("Name" , XMLСтрока(ТекущаяПозиция.Наименование));
ЗаписьXML.ЗаписатьАтрибут("Quantity" , XMLСтрока(ТекущаяПозиция.Количество));
ЗаписьXML.ЗаписатьАтрибут("PriceWithDiscount", XMLСтрока(ЦенаСоСкидками));
ЗаписьXML.ЗаписатьАтрибут("SumWithDiscount" , XMLСтрока(ТекущаяПозиция.Сумма));
ЗаписьXML.ЗаписатьАтрибут("DiscountSum" , XMLСтрока(ТекущаяПозиция.СуммаСкидок));
ЗаписьXML.ЗаписатьАтрибут("Department" , XMLСтрока(ТекущаяПозиция.НомерСекции));
Если НЕ ПустаяСтрока(ТекущаяПозиция.СтавкаНДС) Тогда
Если ТекущаяПозиция.СтавкаНДС = 118 Тогда
ЗначениеСтавкаНДС = "18/118";
ИначеЕсли ТекущаяПозиция.СтавкаНДС = 110 Тогда
ЗначениеСтавкаНДС = "10/110";
Иначе
ЗначениеСтавкаНДС = ТекущаяПозиция.СтавкаНДС;
КонецЕсли;
Иначе
ЗначениеСтавкаНДС = "none";
КонецЕсли;
ЗаписьXML.ЗаписатьАтрибут("Tax", XMLСтрока(ЗначениеСтавкаНДС));
Если ТекущаяПозиция.Свойство("ПризнакСпособаРасчета") И НЕ ПустаяСтрока(ТекущаяПозиция.ПризнакСпособаРасчета) Тогда
ПризнакСпособаРасчета = МенеджерОборудованияКлиентСервер.ПолучитьКодПризнакСпособаРасчета(ТекущаяПозиция.ПризнакСпособаРасчета);
ЗаписьXML.ЗаписатьАтрибут("SignMethodCalculation", XMLСтрока(ПризнакСпособаРасчета));
КонецЕсли;
Если ТекущаяПозиция.Свойство("ПризнакПредметаРасчета") И НЕ ПустаяСтрока(ТекущаяПозиция.ПризнакПредметаРасчета) Тогда
ПризнакПредметаРасчета = МенеджерОборудованияКлиентСервер.ПолучитьКодПризнакаПредметаРасчета(ТекущаяПозиция.ПризнакПредметаРасчета);
ЗаписьXML.ЗаписатьАтрибут("SignCalculationObject", XMLСтрока(ПризнакПредметаРасчета));
КонецЕсли;
Если ТекущаяПозиция.Свойство("СуммаНДС") И НЕ ПустаяСтрока(ТекущаяПозиция.СуммаНДС) Тогда
ЗаписьXML.ЗаписатьАтрибут("TaxSum", XMLСтрока(ТекущаяПозиция.СуммаНДС));
КонецЕсли;
Если ТекущаяПозиция.Свойство("ПризнакАгентаПоПредметуРасчета") И НЕ ПустаяСтрока(ТекущаяПозиция.ПризнакАгентаПоПредметуРасчета) Тогда
ПризнакАгентаПоПредметуРасчета = МенеджерОборудованияКлиентСервер.ПолучитьКодПризнакаАгента(ТекущаяПозиция.ПризнакАгентаПоПредметуРасчета);
ЗаписьXML.ЗаписатьАтрибут("SignSubjectCalculationAgent", XMLСтрока(ПризнакАгентаПоПредметуРасчета));
КонецЕсли;
Если ТекущаяПозиция.Свойство("ЕдиницаИзмеренияПредметаРасчета") И ТекущаяПозиция.ЕдиницаИзмеренияПредметаРасчета <> Неопределено Тогда
ЗаписьXML.ЗаписатьАтрибут("MeasurementUnit" , XMLСтрока(ТекущаяПозиция.ЕдиницаИзмеренияПредметаРасчета));
КонецЕсли;
ЗаписатьДанныеАгента(ЗаписьXML, ТекущаяПозиция.ДанныеАгента);
ЗаписатьДанныеПоставщика(ЗаписьXML, ТекущаяПозиция.ДанныеПоставщика);
ЗаписатьДанныеКодаТоварнойНоменклатуры(ЗаписьXML, ТекущаяПозиция.ДанныеКодаТоварнойНоменклатуры);
ЗаписьXML.ЗаписатьКонецЭлемента();
//++
Если ТекущаяПозиция.Свойство("СуммаНДС") Тогда
ЗаписьXML.ЗаписатьНачалоЭлемента("TextString");
ЗаписьXML.ЗаписатьАтрибут("Text", "Сумма НДС: " + XMLСтрока(ТекущаяПозиция.СуммаНДС));
ЗаписьXML.ЗаписатьКонецЭлемента();
КонецЕсли;
//--
...
Отмечу, что добавить вывод прямо в "FiscalString" у меня не получилось, т.к. ККТ напрочь игнорирует необязательные поля в этой секции.
Надеюсь, что кому-то пригодится.