Подключив принтер чеков к конфигурации Розница 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='ПОДПИСЬ'") + ":", ШиринаСтроки, "_") + Символы.ПС; Если ОбщиеПараметры.Свойство("ТекстПодвала") И НЕ ПустаяСтрока(ОбщиеПараметры.ТекстПодвала) Тогда Текст = Текст + ВыстроитьПоля(ОбщиеПараметры.ТекстПодвала, , ШиринаСтроки) + Символы.ПС; КонецЕсли; КонецЕсли; Если НЕ ПустаяСтрока(ДополнительныйТекст) Тогда Текст = Текст + ДополнительныйТекст + Символы.ПС; КонецЕсли; Текст = Текст + Разделитель + Символы.ПС; Возврат Текст; КонецФункции