При продаже в розницу часто приходится выписывать гарнтийные талоны. А т.к. нам не нужен функционал по учету номеров экземпляров товаров и т.д. (который в данной конфигурации есть), было принято решение создать расширение, которое автоматизирует этот процесс.
Готовое расширение можно скачать ниже! Но! Я предлагаю сделать всё самостоятельно!
У нас используется:
- платформа 1С:Предприятие 8.3 (8.3.19.1229)
- конфигурация Розница, редакция 2.3 (2.3.13.10)
Мы будем использовать (в качетве основы) макет печатной формы документа ЧекККМ «ПФ_MXL_Накладная».
Для начала нужно создать новое расширение. (Если не умеете, то как это делается найти не сложно).
В расширение мы добавим следующие объекты конфигурации:
- из справочников добавим «Магазины»
- из таблчной части «КонтактнаяИнформация» добавим:
- «Тип»
- «Представление»
- из документов добавим «ЧекККМ»
- из перечислений добавим «ТипыКонтактнойИнформации»
- значение «Адрес»
- значение «Телефон»
Тут нужно обратить внимание на то, что мы не берём макет из чека, а создадим новый.
Открываем модуль менеджера нашего документа и вставляем следующий код:
&После("ДобавитьКомандыПечати")
Процедура Гарант_ДобавитьКомандыПечати(КомандыПечати)
// Гарантия
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Идентификатор = "Гарантия";
КомандаПечати.Представление = НСтр("ru = 'Гарантия'");
КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
КомандаПечати.ДополнительныеПараметры.Вставить("Представление", КомандаПечати.Представление);
КонецПроцедуры
&Перед("Печать")
Процедура Гарант_Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода)
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "Гарантия") Тогда
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "Гарантия",
ПараметрыПечати.Представление,
ПечатьГарантии(МассивОбъектов, ОбъектыПечати));
КонецЕсли;
КонецПроцедуры
Функция ПечатьГарантии(МассивОбъектов, ОбъектыПечати) Экспорт
КолонкаКодов = ФормированиеПечатныхФормСервер.ИмяДополнительнойКолонки();
ВыводитьКоды = ЗначениеЗаполнено(КолонкаКодов);
ВыводитьУпаковки = ПолучитьФункциональнуюОпцию("ИспользоватьУпаковкиНоменклатуры");
ТабличныйДокумент = Новый ТабличныйДокумент;
РеквизитыДокумента = Новый Структура("Номер, Дата, Префикс");
СинонимДокумента = НСтр("ru='Чек ККМ'");
ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ЧекаККМ_Гарантия";
Запрос = Новый Запрос("ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Документ.Ссылка КАК Ссылка,
| Документ.Номер КАК Номер,
| Документ.Дата КАК Дата,
| Документ.Магазин КАК Магазин,
| Документ.ВидОперации КАК ВидОперации,
| ВЫБОР
| КОГДА Документ.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийЧекККМ.Возврат)
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ЭтоВозврат,
| ВЫБОР КОГДА Документ.Организация.ЮрФизЛицо = ЗНАЧЕНИЕ(Перечисление.ЮрФизЛицо.ЮрЛицо)
| ТОГДА ПРЕДСТАВЛЕНИЕ(Документ.Организация)
| ИНАЧЕ &ТекстИП +
| ВЫБОР КОГДА ЕСТЬNULL(ФИОФизЛицСрезПоследнихИП.Фамилия, """") = """"
| ТОГДА """"
| ИНАЧЕ
| ФИОФизЛицСрезПоследнихИП.Фамилия + &ТекстПробел +
| ВЫБОР КОГДА ЕСТЬNULL(ФИОФизЛицСрезПоследнихИП.Имя, """") = """"
| ТОГДА """"
| ИНАЧЕ ФИОФизЛицСрезПоследнихИП.Имя + &ТекстПробел
| КОНЕЦ
| +
| ВЫБОР КОГДА ЕСТЬNULL(ФИОФизЛицСрезПоследнихИП.Отчество, """") = """"
| ТОГДА """"
| ИНАЧЕ ФИОФизЛицСрезПоследнихИП.Отчество
| КОНЕЦ
| КОНЕЦ
| + """"
| КОНЕЦ КАК НаименованиеОрганизации,
| ВЫБОР КОГДА Документ.Организация.ЮрФизЛицо = ЗНАЧЕНИЕ(Перечисление.ЮрФизЛицо.ЮрЛицо)
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ОрганизацияЮридическоеЛицо,
| Документ.Организация КАК Организация,
| Документ.СуммаДокумента КАК СуммаДокумента,
| ПРЕДСТАВЛЕНИЕ(Документ.Магазин) КАК МагазинПредставление,
| ПРЕДСТАВЛЕНИЕ(Документ.Организация) КАК ОрганизацияПредставление,
| Документ.Ответственный.ФизическоеЛицо КАК Ответственный
|ИЗ
| Документ.ЧекККМ КАК Документ
|ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрСведений.ФИОФизЛиц.СрезПоследних() КАК ФИОФизЛицСрезПоследнихИП
|ПО
| Документ.Организация = ФИОФизЛицСрезПоследнихИП.ФизЛицо
|ГДЕ
| Документ.Ссылка В(&МассивОбъектов)
| И Документ.Проведен
|УПОРЯДОЧИТЬ ПО
| Ссылка, Дата
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ТаблицаОплата.ВидОплаты.ТипОплаты КАК ТипОплаты,
| ТаблицаОплата.Ссылка КАК Ссылка,
| ПРЕДСТАВЛЕНИЕ(ТаблицаОплата.ВидОплаты.ТипОплаты) КАК ПредставлениеТипОплаты,
| СУММА(ВЫБОР
| КОГДА ТаблицаОплата.Ссылка.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийЧекККМ.Возврат)
| И ТаблицаОплата.ВидОплаты.ТипОплаты <> Значение(Перечисление.ТипыОплатЧекаККМ.Наличные)
| ТОГДА ТаблицаОплата.Сумма
| ИНАЧЕ 0
| КОНЕЦ) КАК СуммаБезналичныхОплат,
| СУММА(ТаблицаОплата.Сумма) КАК Сумма
|ИЗ
| Документ.ЧекККМ.Оплата КАК ТаблицаОплата
|ГДЕ
| ТаблицаОплата.Ссылка В(&МассивОбъектов)
| И ТаблицаОплата.Ссылка.Проведен
| И НЕ (ТаблицаОплата.Ссылка.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийЧекККМ.Возврат) И ТаблицаОплата.ВидОплаты.ТипОплаты = Значение(Перечисление.ТипыОплатЧекаККМ.Наличные))
|
|СГРУППИРОВАТЬ ПО
| ТаблицаОплата.Ссылка,
| ТаблицаОплата.ВидОплаты.ТипОплаты
|
| ИМЕЮЩИЕ
| (НЕ СУММА(ТаблицаОплата.Сумма) = 0)
|
|УПОРЯДОЧИТЬ ПО
| Ссылка
|ИТОГИ ПО
| Ссылка
|
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ТаблицаТовары.НомерСтроки КАК НомерСтроки,
| ТаблицаТовары.Номенклатура КАК Номенклатура,
| ТаблицаТовары.Номенклатура.Представление КАК Товар,
| " + ?(ВыводитьКоды, "ТаблицаТовары.Номенклатура." + КолонкаКодов +" КАК КолонкаКодов,", "") + "
| ТаблицаТовары.Номенклатура.НаименованиеПолное КАК НоменклатураПредставление,
| ПРЕДСТАВЛЕНИЕ(ТаблицаТовары.Характеристика) КАК ХарактеристикаПредставление,
| ПРЕДСТАВЛЕНИЕ(ТаблицаТовары.Номенклатура.ЕдиницаИзмерения) КАК ПредставлениеБазовойЕдиницыИзмерения,
| ВЫБОР
| КОГДА ТаблицаТовары.Упаковка <> ЗНАЧЕНИЕ(Справочник.УпаковкиНоменклатуры.ПустаяСсылка)
| ТОГДА ПРЕДСТАВЛЕНИЕ(ТаблицаТовары.Упаковка.ЕдиницаИзмерения)
| ИНАЧЕ ПРЕДСТАВЛЕНИЕ(ТаблицаТовары.Номенклатура.ЕдиницаИзмерения)
| КОНЕЦ КАК ЕдиницаИзмерения,
| ВЫБОР
| КОГДА ТаблицаТовары.Упаковка <> ЗНАЧЕНИЕ(Справочник.УпаковкиНоменклатуры.ПустаяСсылка)
| ТОГДА ТаблицаТовары.КоличествоУпаковок
| ИНАЧЕ ТаблицаТовары.Количество
| КОНЕЦ КАК Количество,
| ТаблицаТовары.Цена КАК Цена,
| ТаблицаТовары.Сумма КАК Сумма,
| ТаблицаТовары.Ссылка КАК Ссылка
|ИЗ
| Документ.ЧекККМ.Товары КАК ТаблицаТовары
|ГДЕ
| ТаблицаТовары.Ссылка В(&МассивОбъектов)
| И ТаблицаТовары.Ссылка.Проведен
|
|УПОРЯДОЧИТЬ ПО
| Ссылка,
| НомерСтроки
|ИТОГИ ПО
| Ссылка");
Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);
УстановитьТекстовыеПараметрыЗапроса(Запрос);
Результаты = Запрос.ВыполнитьПакет();
Макет = УправлениеПечатью.МакетПечатнойФормы("Документ.ЧекККМ.ПФ_MXL_Гарант");
ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
ОбластьПоставщик = Макет.ПолучитьОбласть("Поставщик");
ОбластьИНН = Макет.ПолучитьОбласть("ИНН");
ОбластьМагазин = Макет.ПолучитьОбласть("Магазин");
ОбластьШапкаНомера = Макет.ПолучитьОбласть("ШапкаТаблицы|НомерСтроки");
ОбластьШапкаКодов = Макет.ПолучитьОбласть("ШапкаТаблицы|КолонкаКодов");
ОбластьШапкаДанных = Макет.ПолучитьОбласть("ШапкаТаблицы|Данные");
ОбластьКолонкаТовар = Макет.Область("Товар");
Если Не ВыводитьКоды Тогда
ОбластьКолонкаТовар.ШиринаКолонки = ОбластьКолонкаТовар.ШиринаКолонки
+ Макет.Область("КолонкаКодов").ШиринаКолонки;
КонецЕсли;
ОбластьСтрокаНомера = Макет.ПолучитьОбласть("Строка|НомерСтроки");
ОбластьСтрокаКодов = Макет.ПолучитьОбласть("Строка|КолонкаКодов");
ОбластьСтрокаДанных = Макет.ПолучитьОбласть("Строка|Данные");
ОбластьИтогоНомера = Макет.ПолучитьОбласть("Итого|НомерСтроки");
ОбластьИтогоКодов = Макет.ПолучитьОбласть("Итого|КолонкаКодов");
ОбластьИтогоДанных = Макет.ПолучитьОбласть("Итого|Данные");
ОбластьУсловия = Макет.ПолучитьОбласть("Условия");
ОбластьПодписей = Макет.ПолучитьОбласть("Подписи");
ВыборкаПоДокументам = Результаты[0].Выбрать();
ВыборкаПоТабличнойЧастиОплата = Результаты[1].Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
ВыборкаПоТабличнымЧастям = Результаты[2].Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
ПервыйДокумент = Истина;
Пока ВыборкаПоДокументам.Следующий() Цикл
Если НЕ ВыборкаПоТабличнымЧастям.НайтиСледующий(Новый Структура("Ссылка",ВыборкаПоДокументам.Ссылка)) Тогда
Продолжить;
КонецЕсли;
ВыборкаПоСтрокамТЧ = ВыборкаПоТабличнымЧастям.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Если НЕ ПервыйДокумент Тогда
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
ПервыйДокумент = Ложь;
НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;
ЗаполнитьЗначенияСвойств(РеквизитыДокумента, ВыборкаПоДокументам);
ОбластьЗаголовок.Параметры.ТекстЗаголовка = ФормированиеПечатныхФормСервер.СформироватьЗаголовокДокумента(РеквизитыДокумента, "Гарантийный талон к чеку");
ТабличныйДокумент.Вывести(ОбластьЗаголовок);
// Поставщик
СведенияОПоставщике = ФормированиеПечатныхФормСервер.СведенияОЮрФизЛице(ВыборкаПоДокументам.Организация, ВыборкаПоДокументам.Дата);
Если ВыборкаПоДокументам.ОрганизацияЮридическоеЛицо Тогда
ОбластьПоставщик.Параметры.ПредставлениеПоставщика = ФормированиеПечатныхФормСервер.ОписаниеОрганизации(СведенияОПоставщике, "ПолноеНаименование");
Иначе
ОбластьПоставщик.Параметры.ПредставлениеПоставщика = ВыборкаПоДокументам.НаименованиеОрганизации;
КонецЕсли;
ОбластьПоставщик.Параметры.Поставщик = ВыборкаПоДокументам.Организация;
ЗапросАдр = Новый Запрос;
ЗапросАдр.Текст =
"ВЫБРАТЬ
| МагазиныКонтактнаяИнформация.Тип КАК Тип,
| МагазиныКонтактнаяИнформация.Представление КАК Представление
|ИЗ
| Справочник.Магазины.КонтактнаяИнформация КАК МагазиныКонтактнаяИнформация
|ГДЕ
| МагазиныКонтактнаяИнформация.Ссылка = &Ссылка
| И МагазиныКонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.адрес)";
ЗапросАдр.УстановитьПараметр("Ссылка", ВыборкаПоДокументам.Магазин);
РезультатЗапросаАдр = ЗапросАдр.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапросаАдр.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
ОбластьПоставщик.Параметры.МагазинАдрес = ВыборкаДетальныеЗаписи.Представление;
КонецЦикла;
ТабличныйДокумент.Вывести(ОбластьПоставщик);
ОбластьИНН.Параметры.ИНН = СведенияОПоставщике.ИНН;
ТабличныйДокумент.Вывести(ОбластьИНН);
ОбластьМагазин.Параметры.ПредставлениеМагазина = ВыборкаПоДокументам.МагазинПредставление;
ОбластьМагазин.Параметры.Магазин = ВыборкаПоДокументам.Магазин;
ТабличныйДокумент.Вывести(ОбластьМагазин);
// Шапка
ТабличныйДокумент.Вывести(ОбластьШапкаНомера);
Если ВыводитьКоды Тогда
ОбластьШапкаКодов.Параметры.ИмяКолонкиКодов = КолонкаКодов;
ТабличныйДокумент.Присоединить(ОбластьШапкаКодов);
КонецЕсли;
ТабличныйДокумент.Присоединить(ОбластьШапкаДанных);
// СТРОКИ ТЧ
Пока ВыборкаПоСтрокамТЧ.Следующий() Цикл
Если НЕ ЗначениеЗаполнено(ВыборкаПоСтрокамТЧ.Номенклатура) Тогда
Продолжить;
КонецЕсли;
ОбластьСтрокаНомера.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
ТабличныйДокумент.Вывести(ОбластьСтрокаНомера);
Если ВыводитьКоды Тогда
ОбластьСтрокаКодов.Параметры.Артикул = ВыборкаПоСтрокамТЧ["КолонкаКодов"];
ТабличныйДокумент.Присоединить(ОбластьСтрокаКодов);
КонецЕсли;
ОбластьСтрокаДанных.Параметры.Заполнить(ВыборкаПоСтрокамТЧ);
ОбластьСтрокаДанных.Параметры.Товар = ФормированиеПечатныхФормСервер.ПолучитьПредставлениеНоменклатурыДляПечати(ВыборкаПоСтрокамТЧ.НоменклатураПредставление,ВыборкаПоСтрокамТЧ.ХарактеристикаПредставление);
ТабличныйДокумент.Присоединить(ОбластьСтрокаДанных);
КонецЦикла;
ТабличныйДокумент.Вывести(ОбластьИтогоНомера);
Если ВыводитьКоды Тогда
ТабличныйДокумент.Присоединить(ОбластьИтогоКодов);
КонецЕсли;
ТабличныйДокумент.Присоединить(ОбластьИтогоДанных);
ТабличныйДокумент.Вывести(ОбластьУсловия);
// ПОДПИСИ
ОбластьПодписей.Параметры.Заполнить(ВыборкаПоДокументам);
ОбластьПодписей.Параметры.ФИО = ФормированиеПечатныхФормСервер.ФамилияИнициалыФизЛица(ВыборкаПоДокументам.Ответственный);
ТабличныйДокумент.Вывести(ОбластьПодписей);
УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, ВыборкаПоДокументам.Ссылка);
КонецЦикла;
ТабличныйДокумент.АвтоМасштаб = Истина;
Возврат ТабличныйДокумент;
КонецФункции
Создаём макет печатной формы «ПФ_MXL_Гарант»
(Я в него скопировал содержание макета документа ЧекККМ «ПФ_MXL_Накладная», убрав лишние поля и колонки)
У меня получилось так
Всё готово! Эта печатная форма также доступна в режиме РМК по кнопке "Печать пробитого чека".