Подключив принтер чеков к конфигурации Розница 2. Обнаружил, что шаблон Чека ККМ содержит, много лишней информации. Захотелось сразу изменить шаблоны чека под себя.
Погуглив САБЖ, обнаружил, что, оказывается в конфигурации есть инструмент изменения шаблона чека ККМ. Переходим в раздел Администрирование — Печатные формы, макеты и обработки — Шаблоны этикеток, ценников и чеков ККМ.
Там мы можем создать свой шаблон. Большой минус в том, что там нет возможности, изменить шапку и подвал чека. Да и в строках чека тоже выводится много лишней информации. Другого выхода как лезть, код тут увы не предвидится увы. Сказано сделано, отладчиком нашел место где формируется шаблон чека. Происходит, сие действие в общем модуле МенеджерОборудованияКлиентСервер.
Данный модуль содержит код, который формирует текст выводимый на чек. Так я подключал нефискальный принтер чеков, то нужный мне код находился в функции СформироватьТекстНефискальногоДокумента.
Первоначальный код модуля следующий.
Что делаем далее?
Переносим этот модуль в расширение конфигурации, и переопределяем эту функцию. Я просто закомментировал все лишнее, что не хочу видеть на чеке. Код в особых комментариях не нуждается. Просто выложу, тут может кому пригодится.
// Функция формирует текст нефискального документа по шаблону.
//
&Вместо("СформироватьТекстНефискальногоДокумента")
Функция Расш1_СформироватьТекстНефискальногоДокумента(ТипДокумента, ОбщиеПараметры, ШиринаСтроки = 32, ДополнительныйТекст = Неопределено, ФорматФФД = "1.1") Экспорт
ПозицииЧека = ?(ОбщиеПараметры.Свойство("ПозицииЧека"), ОбщиеПараметры.ПозицииЧека, Неопределено);
ТаблицаОплат = ?(ОбщиеПараметры.Свойство("ТаблицаОплат"), ОбщиеПараметры.ТаблицаОплат, Неопределено);
Если ТипДокумента = 0 Тогда
ТипыЧеков = Новый Соответствие();
ТипыЧеков.Вставить(1, НСтр("ru='ПРИХОД'")); // Чек продажи
ТипыЧеков.Вставить(2, НСтр("ru='ВОЗВРАТ ПРИХОДА'")); // Чек возврата продажи
ТипыЧеков.Вставить(3, НСтр("ru='РАСХОД'")); // Чек покупки
ТипыЧеков.Вставить(4, НСтр("ru='ВОЗВРАТ РАСХОДА'")); // Чек возврата покупки
ТипЧека = ТипыЧеков.Получить(МенеджерОборудованияКлиентСервер.ПолучитьКодТипаРасчетаДенежнымиСредствами(ОбщиеПараметры.ТипРасчета))
ИначеЕсли ТипДокумента = 1 Тогда
ТипЧека = НСтр("ru='ОТКРЫТИЕ СМЕНЫ'");
ИначеЕсли ТипДокумента = 2 Тогда
ТипЧека = НСтр("ru='ВНЕСЕНИЕ'");
ИначеЕсли ТипДокумента = 3 Тогда
ТипЧека = НСтр("ru='ВЫЕМКА'");
ИначеЕсли ТипДокумента = 4 Тогда
ТипЧека = НСтр("ru='ОТЧЕТ БЕЗ ГАШЕНИЯ'");
ИначеЕсли ТипДокумента = 5 Тогда
ТипЧека = НСтр("ru='ОТЧЕТ С ГАШЕНИЕМ'");
КонецЕсли;
ПечатьКлише = Истина;
Разделитель = ПостроитьПоле("", ШиринаСтроки, "=") + Символы.ПС;
РазделительВнут = ПостроитьПоле("", ШиринаСтроки, "-") + Символы.ПС;
Текст = Разделитель;
Если ПечатьКлише Тогда
// Сформировать шапку чека.
Если ОбщиеПараметры.Свойство("ОрганизацияНазвание") И НЕ ПустаяСтрока(ОбщиеПараметры.ОрганизацияНазвание) Тогда
Текст = Текст + ПостроитьПолеПереносом(ОбщиеПараметры.ОрганизацияНазвание, ШиринаСтроки, , Истина) + Символы.ПС;
КонецЕсли;
//Если ОбщиеПараметры.Свойство("АдресРасчетов") Тогда
// АдресРасчетов = ОбщиеПараметры.АдресРасчетов;
// Если НЕ ПустаяСтрока(АдресРасчетов) Тогда
// Текст = Текст + ПостроитьПолеПереносом(АдресРасчетов, ШиринаСтроки, , Истина) + Символы.ПС;
// Если ОбщиеПараметры.Свойство("МестоРасчетов") И НЕ ПустаяСтрока(ОбщиеПараметры.МестоРасчетов) Тогда
// Текст = Текст + ПостроитьПолеПереносом(ОбщиеПараметры.МестоРасчетов, ШиринаСтроки, , Истина) + Символы.ПС;
// КонецЕсли;
// ИначеЕсли ОбщиеПараметры.Свойство("АдресМагазина") И НЕ ПустаяСтрока(ОбщиеПараметры.АдресМагазина) Тогда
// Текст = Текст + ПостроитьПолеПереносом(ОбщиеПараметры.АдресМагазина, ШиринаСтроки) + Символы.ПС;
// КонецЕсли;
//КонецЕсли;
//
//Если ОбщиеПараметры.Свойство("ТекстШапки") И НЕ ПустаяСтрока(ОбщиеПараметры.ТекстШапки) Тогда
// Текст = Текст + ВыстроитьПоля(ОбщиеПараметры.ТекстШапки, , ШиринаСтроки) + Символы.ПС;
//КонецЕсли;
Если ТипДокумента = 0 Тогда
Текст = Текст + ВыстроитьПоля(НСтр("ru='КАССОВЫЙ ЧЕК'"), , ШиринаСтроки) + Символы.ПС;
КонецЕсли;
ОрганизацияИНН = ?(ОбщиеПараметры.Свойство("ОрганизацияИНН") И НЕ ПустаяСтрока(ОбщиеПараметры.ОрганизацияИНН),
НСтр("ru='ИНН'") + Символы.НПП + ОбщиеПараметры.ОрганизацияИНН, "");
НомерЧека = ?(ОбщиеПараметры.Свойство("НомерЧека") И НЕ ПустаяСтрока(ОбщиеПараметры.НомерЧека),
НСтр("ru='ЧЕК №'") + ОбщиеПараметры.НомерЧека, "");
Если Не ПустаяСтрока(ОрганизацияИНН) Тогда
Текст = Текст + ВыстроитьПоля(ТипЧека, ОрганизацияИНН, ШиринаСтроки) + Символы.ПС;
Иначе
Текст = Текст + ПостроитьПоле(ТипЧека, ШиринаСтроки) + Символы.ПС;
КонецЕсли;
ДатаВремя = ?(ОбщиеПараметры.Свойство("ДатаВремя") И НЕ ПустаяСтрока(ОбщиеПараметры.ДатаВремя), ОбщиеПараметры.ДатаВремя, ТекущаяДата());
ДатаВремя = Формат(ДатаВремя, "ДФ=""дд.ММ.гггг ЧЧ:мм""");
Текст = Текст + ВыстроитьПоля(НомерЧека, ДатаВремя, ШиринаСтроки) + Символы.ПС;
Текст = Текст + РазделительВнут;
КонецЕсли;
ФорматЧисла = "ЧРД=.;ЧЦ=12;ЧДЦ=2;ЧН=0.00;ЧГ=0";
СуммаЧека = 0;
СуммаНДС0 = 0;
СуммаНДС10 = 0;
СуммаНДС18 = 0;
СуммаНДС110 = 0;
СуммаНДС118 = 0;
СуммаБезНДС = 0;
// Формируем строки чека.
Если ПозицииЧека <> Неопределено Тогда
Для ИндексМассива = 0 По ПозицииЧека.Количество() - 1 Цикл
ПозицияЧека = ПозицииЧека[ИндексМассива];
Если ПозицияЧека.Свойство("ФискальнаяСтрока") Тогда
Наименование = ?(ПозицияЧека.Свойство("Наименование"), ПозицияЧека.Наименование, "");
Количество = ?(ПозицияЧека.Свойство("Количество") , ПозицияЧека.Количество , 1);
Цена = ?(ПозицияЧека.Свойство("Цена") , ПозицияЧека.Цена , 0);
Сумма = ?(ПозицияЧека.Свойство("Сумма") , ПозицияЧека.Сумма , 0);
НомерСекции = ?(ПозицияЧека.Свойство("НомерСекции") , ПозицияЧека.НомерСекции , 0);
СтавкаНДС = ?(ПозицияЧека.Свойство("СтавкаНДС") , ПозицияЧека.СтавкаНДС , 0);
СуммаСкидок = ?(ПозицияЧека.Свойство("СуммаСкидок") , ?(ПустаяСтрока(ПозицияЧека.СуммаСкидок), 0, ПозицияЧека.СуммаСкидок), 0);
Если ПозицияЧека.Свойство("ПризнакСпособаРасчета") И НЕ ПустаяСтрока(ПозицияЧека.ПризнакСпособаРасчета) И ФорматФФД = "1.0" Тогда
Если НЕ ПозицияЧека.ПризнакСпособаРасчета = ПредопределенноеЗначение("Перечисление.ПризнакиСпособаРасчета.ПередачаСПолнойОплатой") Тогда // Не отображаем для полной оплаты.
Наименование = МенеджерОборудованияКлиентСервер.ПолучитьПризнакСпособаРасчетаДляПечати(ПозицияЧека.ПризнакСпособаРасчета) + " " + Наименование;
КонецЕсли;
КонецЕсли;
ТекстСтроки = ПостроитьПолеПереносом(Наименование, ШиринаСтроки) + Символы.ПС;
ЦенаДляПечати = Окр(Сумма / Количество , 2);
СтрокаТовара = Формат(Количество, "ЧРД=.;ЧЦ=12;ЧДЦ=3;ЧН=0.000;ЧГ=0") + " х "
+ Формат(ЦенаДляПечати, ФорматЧисла) + " =" + Формат(Сумма, ФорматЧисла);
ТекстСтроки = ТекстСтроки + ВыстроитьПоля( , СтрокаТовара, ШиринаСтроки) + Символы.ПС;
Если СуммаСкидок > 0 Тогда
ТекстСкидки = НСтр("ru='СКИДКА'") + "=" + Формат(СуммаСкидок, ФорматЧисла);
ИначеЕсли СуммаСкидок < 0 Тогда
ТекстСкидки = НСтр("ru='НАДБАВКА'") + "=" + Формат(СуммаСкидок, ФорматЧисла);
Иначе
ТекстСкидки = "";
КонецЕсли;
ТекстНалога = "";
//Если ПозицияЧека.Свойство("СтавкаНДС") Тогда
// Если ПозицияЧека.СтавкаНДС = 10 Тогда
// СуммаНДС10 = СуммаНДС10 + Сумма;
// ТекстНалога = НСтр("ru='НДС 10%'");
// ИначеЕсли ПозицияЧека.СтавкаНДС = 18 Тогда
// СуммаНДС18 = СуммаНДС18 + Сумма;
// ТекстНалога = НСтр("ru='НДС 18%'");
// ИначеЕсли ПозицияЧека.СтавкаНДС = 0 Тогда
// СуммаНДС0 = СуммаНДС0 + Сумма;
// ТекстНалога = НСтр("ru='НДС 0%'");
// ИначеЕсли ПозицияЧека.СтавкаНДС = 110 Тогда
// СуммаНДС110 = СуммаНДС110 + Сумма;
// ТекстНалога = НСтр("ru='НДС 10/110%'");
// ИначеЕсли ПозицияЧека.СтавкаНДС = 118 Тогда
// СуммаНДС118 = СуммаНДС118 + Сумма;
// ТекстНалога = НСтр("ru='НДС 18/118%'");
// Иначе
// СуммаБезНДС = СуммаБезНДС + Сумма;
// ТекстНалога = НСтр("ru='БЕЗ НДС'");
// КонецЕсли;
//КонецЕсли;
Если ПустаяСтрока(ТекстСкидки) Тогда
ТекстСтроки = ТекстСтроки + ПостроитьПоле(" " + ТекстНалога, ШиринаСтроки) + Символы.ПС;
Иначе
ТекстСтроки = ТекстСтроки + ВыстроитьПоля(" " + ТекстНалога, ТекстСкидки, ШиринаСтроки) + Символы.ПС;
КонецЕсли;
Текст = Текст + ТекстСтроки;
//Если ПозицияЧека.Свойство("ПризнакПредметаРасчета") И НЕ ПустаяСтрока(ПозицияЧека.ПризнакПредметаРасчета) И ФорматФФД = "1.1" Тогда
// ПризнакПредметаРасчета = МенеджерОборудованияКлиентСервер.ПолучитьКодПризнакаПредметаРасчета(ПозицияЧека.ПризнакПредметаРасчета);
// ПризнакПредметаРасчетаНаименование = МенеджерОборудованияКлиентСервер.ПолучитьНаименованиеПризнакаПредметаРасчета(ПризнакПредметаРасчета);
// Текст = Текст + ПостроитьПоле(" " + ПризнакПредметаРасчетаНаименование, ШиринаСтроки) + Символы.ПС;
//КонецЕсли;
//
//Если ПозицияЧека.Свойство("ПризнакСпособаРасчета") И НЕ ПустаяСтрока(ПозицияЧека.ПризнакСпособаРасчета) И ФорматФФД <> "1.0" Тогда
// ПризнакСпособаРасчета = МенеджерОборудованияКлиентСервер.ПолучитьКодПризнакСпособаРасчета(ПозицияЧека.ПризнакСпособаРасчета);
// ПризнакСпособаРасчетаНаименование = МенеджерОборудованияКлиентСервер.ПолучитьНаименованиеПризнакаСпособаРасчета(ПризнакСпособаРасчета);
// Текст = Текст + ПостроитьПоле(" " + ПризнакСпособаРасчетаНаименование, ШиринаСтроки) + Символы.ПС;
//КонецЕсли;
//
СуммаЧека = СуммаЧека + Сумма;
ИначеЕсли ПозицияЧека.Свойство("ТекстоваяСтрока") Тогда
ТекстСтроки = ?(ПозицияЧека.Свойство("Текст"), ПозицияЧека.Текст, "");
Текст = Текст + ТекстСтроки + Символы.ПС;
ИначеЕсли ПозицияЧека.Свойство("ШтрихКод") Тогда
СтрокаШтрихкода = "|ШтрихКод|" + ПозицияЧека.ТипШтрихкода + "|" + ПозицияЧека.ШтрихКод;
Текст = Текст + СтрокаШтрихкода + Символы.ПС;
КонецЕсли;
КонецЦикла;
КонецЕсли;
// Формируем подвал чека
Если ТаблицаОплат <> Неопределено Тогда
СуммаНаличными = 0;
СуммаЭлектронными = 0;
СуммаПостоплатой = 0;
СуммаПредоплатой = 0;
СуммаПредоставлением = 0;
Для ИндексОплаты = 0 По ТаблицаОплат.Количество() - 1 Цикл
Если ТаблицаОплат[ИндексОплаты].ТипОплаты = ПредопределенноеЗначение("Перечисление.ТипыОплатыККТ.Электронно") Тогда
СуммаЭлектронными = СуммаЭлектронными + ТаблицаОплат[ИндексОплаты].Сумма;
ИначеЕсли ТаблицаОплат[ИндексОплаты].ТипОплаты = ПредопределенноеЗначение("Перечисление.ТипыОплатыККТ.Предоплата") Тогда
СуммаПредоплатой = СуммаПредоплатой + ТаблицаОплат[ИндексОплаты].Сумма;
ИначеЕсли ТаблицаОплат[ИндексОплаты].ТипОплаты = ПредопределенноеЗначение("Перечисление.ТипыОплатыККТ.Постоплата") Тогда
СуммаПостоплатой = СуммаПостоплатой + ТаблицаОплат[ИндексОплаты].Сумма;
ИначеЕсли ТаблицаОплат[ИндексОплаты].ТипОплаты = ПредопределенноеЗначение("Перечисление.ТипыОплатыККТ.ВстречноеПредоставление") Тогда
СуммаПредоставлением = СуммаПредоставлением + ТаблицаОплат[ИндексОплаты].Сумма;
Иначе
СуммаНаличными = СуммаНаличными + ТаблицаОплат[ИндексОплаты].Сумма;
КонецЕсли;
КонецЦикла;
СуммаОплаты = СуммаНаличными + СуммаЭлектронными + СуммаПостоплатой + СуммаПредоплатой + СуммаПредоставлением;
Текст = Текст + РазделительВнут;
Текст = Текст + ВыстроитьПоля(НСтр("ru='ИТОГ'"), "=" + Формат(СуммаЧека, ФорматЧисла), ШиринаСтроки) + Символы.ПС;
//Текст = Текст + РазделительВнут;
//
//Текст = Текст + НСтр("ru='ОПЛАТА'") + Символы.ПС;
//
//Если ФорматФФД = "1.0" Тогда // ФФД 1.0
// Если СуммаНаличными > 0 Тогда
// Текст = Текст + ВыстроитьПоля(" " + НСтр("ru='НАЛИЧНЫМИ'"), "=" + Формат(СуммаНаличными, ФорматЧисла), ШиринаСтроки) + Символы.ПС;
// КонецЕсли;
// Если СуммаЭлектронными > 0 Тогда
// Текст = Текст + ВыстроитьПоля(" " + НСтр("ru='ЭЛЕКТРОННЫМИ'"), "=" + Формат(СуммаЭлектронными, ФорматЧисла), ШиринаСтроки) + Символы.ПС;
// КонецЕсли;
// Если СуммаПостоплатой > 0 Тогда
// Текст = Текст + ВыстроитьПоля(" " + НСтр("ru='ЭЛЕКТРОННЫМИ'"), "=" + Формат(СуммаПостоплатой, ФорматЧисла), ШиринаСтроки) + Символы.ПС;
// КонецЕсли;
// Если СуммаПредоплатой > 0 Тогда
// Текст = Текст + ВыстроитьПоля(" " + НСтр("ru='ЭЛЕКТРОННЫМИ'"), "=" + Формат(СуммаПредоплатой, ФорматЧисла), ШиринаСтроки) + Символы.ПС;
// КонецЕсли;
// Если СуммаПредоставлением > 0 Тогда
// Текст = Текст + ВыстроитьПоля(" " + НСтр("ru='ЭЛЕКТРОННЫМИ'"), "=" + Формат(СуммаПредоставлением, ФорматЧисла), ШиринаСтроки) + Символы.ПС;
// КонецЕсли;
//Иначе // ФФД 1.0.5 & ФФД 1.1
// Если СуммаНаличными > 0 Тогда
// Текст = Текст + ВыстроитьПоля(" " + НСтр("ru='НАЛИЧНЫМИ'"), "=" + Формат(СуммаНаличными, ФорматЧисла), ШиринаСтроки) + Символы.ПС;
// КонецЕсли;
// Если СуммаЭлектронными > 0 Тогда
// Текст = Текст + ВыстроитьПоля(" " + НСтр("ru='ЭЛЕКТРОННЫМИ'"), "=" + Формат(СуммаЭлектронными, ФорматЧисла), ШиринаСтроки) + Символы.ПС;
// КонецЕсли;
// Если СуммаПостоплатой > 0 Тогда
// Текст = Текст + ВыстроитьПоля(" " + НСтр("ru='ПОСТОПЛАТОЙ'"), "=" + Формат(СуммаПостоплатой, ФорматЧисла), ШиринаСтроки) + Символы.ПС;
// КонецЕсли;
// Если СуммаПредоплатой > 0 Тогда
// Текст = Текст + ВыстроитьПоля(" " + НСтр("ru='ЗАЧЕТ АВАНСА'"), "=" + Формат(СуммаПредоплатой, ФорматЧисла), ШиринаСтроки) + Символы.ПС;
// КонецЕсли;
// Если СуммаПредоставлением > 0 Тогда
// Текст = Текст + ВыстроитьПоля(" " + НСтр("ru='ВСТР.ПРЕДОСТ.'"), "=" + Формат(СуммаПредоставлением, ФорматЧисла), ШиринаСтроки) + Символы.ПС;
// КонецЕсли;
//КонецЕсли;
//
//Текст = Текст + ВыстроитьПоля(НСтр("ru='ПОЛУЧЕНО'"), "=" + Формат(СуммаОплаты, ФорматЧисла), ШиринаСтроки) + Символы.ПС;
//Текст = Текст + ВыстроитьПоля(" " + НСтр("ru='СДАЧА'"), "=" + Формат(СуммаОплаты - СуммаЧека, ФорматЧисла), ШиринаСтроки) + Символы.ПС;
//
//Если ОбщиеПараметры.Свойство("СистемаНалогообложения") Тогда
// СистемаНалогообложенияКод = МенеджерОборудованияКлиентСервер.ПолучитьКодТипаСистемыНалогообложенияККТ(ОбщиеПараметры.СистемаНалогообложения);
// СистемаНалогообложения = МенеджерОборудованияКлиентСервер.ПолучитьНаименованиеСистемыНалогообложения(СистемаНалогообложенияКод, Истина);
// Текст = Текст + ВыстроитьПоля(НСтр("ru='СНО:'"), СистемаНалогообложения, ШиринаСтроки) + Символы.ПС;
//КонецЕсли;
//
//Если СуммаБезНДС > 0 Тогда
// Текст = Текст + ВыстроитьПоля(НСтр("ru=' СУММА БЕЗ НДС'"), "=" + Формат(СуммаБезНДС, ФорматЧисла), ШиринаСтроки) + Символы.ПС;
//КонецЕсли;
//Если СуммаНДС0 > 0 Тогда
// Текст = Текст + ВыстроитьПоля(НСтр("ru=' СУММА C НДС 0%'") , "=" + Формат(СуммаНДС0, ФорматЧисла), ШиринаСтроки) + Символы.ПС;
//КонецЕсли;
//Если СуммаНДС10 > 0 Тогда
// Текст = Текст + ВыстроитьПоля(НСтр("ru=' СУММА НДС 10%'"), "=" + Формат(СуммаНДС10 / 110 * 10, ФорматЧисла), ШиринаСтроки) + Символы.ПС;
//КонецЕсли;
//Если СуммаНДС18 > 0 Тогда
// Текст = Текст + ВыстроитьПоля(НСтр("ru=' СУММА НДС 18%'"), "=" + Формат(СуммаНДС18 / 118 * 18, ФорматЧисла), ШиринаСтроки) + Символы.ПС;
//КонецЕсли;
//Если СуммаНДС110 > 0 Тогда
// Текст = Текст + ВыстроитьПоля(НСтр("ru=' СУММА НДС 10/110%'"), "=" + Формат(СуммаНДС110 / 110 * 10, ФорматЧисла), ШиринаСтроки) + Символы.ПС;
//КонецЕсли;
//Если СуммаНДС118 > 0 Тогда
// Текст = Текст + ВыстроитьПоля(НСтр("ru=' СУММА НДС 18/118%'"), "=" + Формат(СуммаНДС118 / 118 * 18, ФорматЧисла), ШиринаСтроки) + Символы.ПС;
//КонецЕсли;
//
Кассир = ?(ОбщиеПараметры.Свойство("Кассир"), ОбщиеПараметры.Кассир, "");
Текст = Текст + ПостроитьПоле(НСтр("ru='КАССИР'") + ":" + Символы.НПП + Кассир, ШиринаСтроки) + Символы.ПС + Символы.ПС;
//Текст = Текст + ПостроитьПоле(НСтр("ru='ПОДПИСЬ'") + ":", ШиринаСтроки, "_") + Символы.ПС;
Если ОбщиеПараметры.Свойство("ТекстПодвала") И НЕ ПустаяСтрока(ОбщиеПараметры.ТекстПодвала) Тогда
Текст = Текст + ВыстроитьПоля(ОбщиеПараметры.ТекстПодвала, , ШиринаСтроки) + Символы.ПС;
КонецЕсли;
КонецЕсли;
Если НЕ ПустаяСтрока(ДополнительныйТекст) Тогда
Текст = Текст + ДополнительныйТекст + Символы.ПС;
КонецЕсли;
Текст = Текст + Разделитель + Символы.ПС;
Возврат Текст;
КонецФункции