Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Функция Печать() Экспорт
- мВалютаРегламентированногоУчета = глЗначениеПеременной("ВалютаРегламентированногоУчета");
- ТабДокумент = Новый ТабличныйДокумент;
- //Макет = ПолучитьМакет("ЧекККМ");
- Запрос = Новый Запрос;
- Запрос.УстановитьПараметр("ТекущийДокумент", СсылкаНаОбъект.Ссылка);
- Запрос.УстановитьПараметр("Дата", СсылкаНаОбъект.Дата);
- Запрос.Текст = "ВЫБРАТЬ
- | ДокЧек.Номер,
- | ДокЧек.Дата,
- | ДокЧек.КассаККМ,
- | ДокЧек.Организация КАК Организация,
- | ДокЧек.Организация.Представление КАК Поставщик,
- | ДокЧек.СуммаДокумента,
- | ДокЧек.ВидОперации,
- | ДокЧек.Оплата.(
- | НомерСтроки,
- | ВидОплаты,
- | Сумма
- | ),
- | ВЫБОР
- | КОГДА ЕСТЬNULL(ФИОФизЛицСрезПоследних.Фамилия, """") = """"
- | ТОГДА """"
- | ИНАЧЕ ФИОФизЛицСрезПоследних.Фамилия + "" "" + ВЫБОР
- | КОГДА ЕСТЬNULL(ФИОФизЛицСрезПоследних.Имя, """") = """"
- | ТОГДА """"
- | ИНАЧЕ (ВЫРАЗИТЬ(ФИОФизЛицСрезПоследних.Имя КАК СТРОКА(1))) + "". ""
- | КОНЕЦ + ВЫБОР
- | КОГДА ЕСТЬNULL(ФИОФизЛицСрезПоследних.Отчество, """") = """"
- | ТОГДА """"
- | ИНАЧЕ (ВЫРАЗИТЬ(ФИОФизЛицСрезПоследних.Отчество КАК СТРОКА(1))) + "".""
- | КОНЕЦ
- | КОНЕЦ КАК ФИО
- |ИЗ
- | Документ.ЧекККМ КАК ДокЧек
- | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Пользователи КАК Пользователи
- | ПО (Пользователи.Ссылка = ДокЧек.Ответственный)
- | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ФизическиеЛица КАК ФизическиеЛица
- | ПО (Пользователи.ФизЛицо = ФизическиеЛица.Ссылка)
- | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ФИОФизЛиц.СрезПоследних(&Дата, ) КАК ФИОФизЛицСрезПоследних
- | ПО (ФизическиеЛица.Ссылка = ФИОФизЛицСрезПоследних.ФизЛицо)
- |ГДЕ
- | ДокЧек.Ссылка = &ТекущийДокумент
- |
- |УПОРЯДОЧИТЬ ПО
- | ДокЧек.Товары.НомерСтроки,
- | ДокЧек.Оплата.НомерСтроки";
- Шапка = Запрос.Выполнить().Выбрать();
- Шапка.Следующий();
- //ТабДокумент = Новый ТабличныйДокумент;
- //ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_Чек_Накладная";
- Макет = ПолучитьМакет("ЧекККМ");
- // Выводим шапку накладной.
- ОбластьМакета = Макет.ПолучитьОбласть("Заголовок");
- Если Шапка.ВидОперации = Перечисления.ВидыОперацийЧекККМ.Возврат Тогда
- ОбластьМакета.Параметры.ТекстЗаголовка = ОбщегоНазначения.СформироватьЗаголовокДокумента(Шапка, "Чек (возврат)");
- Иначе
- ОбластьМакета.Параметры.ТекстЗаголовка = ОбщегоНазначения.СформироватьЗаголовокДокумента(Шапка, "Чек");
- КонецЕсли;
- ТабДокумент.Вывести(ОбластьМакета);
- ПредставлениеПоставщика = ФормированиеПечатныхФорм.ОписаниеОрганизации(УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.Организация, Шапка.Дата), "ПолноеНаименование,");
- ОбластьМакета = Макет.ПолучитьОбласть("Поставщик");
- ОбластьМакета.Параметры.ПредставлениеПоставщика = ПредставлениеПоставщика;
- ОбластьМакета.Параметры.Поставщик = Шапка.Организация;
- ТабДокумент.Вывести(ОбластьМакета);
- ОбластьМакета = Макет.ПолучитьОбласть("ИНН");
- ОбластьМакета.Параметры.ИНН = Шапка.Организация.ИНН;
- ТабДокумент.Вывести(ОбластьМакета);
- ЗапросТовары = Новый Запрос;
- ЗапросТовары.Текст =
- "ВЫБРАТЬ
- | ЧекККМТовары.Номенклатура,
- | ЧекККМТовары.Номенклатура.Представление КАК Товар,
- | МИНИМУМ(ЧекККМТовары.НомерСтроки) КАК НомерСтроки,
- | ВЫРАЗИТЬ(ЧекККМТовары.Номенклатура.НаименованиеПолное КАК СТРОКА(100)) КАК ТоварПолноеНаименование,
- | ЧекККМТовары.Номенклатура.Код КАК Код,
- | ЧекККМТовары.Номенклатура.Артикул КАК Артикул,
- | СУММА(ЧекККМТовары.Количество) КАК Количество,
- | ЧекККМТовары.ЕдиницаИзмерения.Представление КАК ЕдиницаИзмерения,
- | ЧекККМТовары.Цена,
- | СУММА(ЧекККМТовары.ПроцентСкидкиНаценки) КАК Скидка,
- | СУММА(ЧекККМТовары.ПроцентАвтоматическихСкидок) КАК СкидкаАвтоматическая,
- | СУММА(ЧекККМТовары.Сумма) КАК Сумма,
- | ЧекККМТовары.СерияНоменклатуры КАК Серия,
- | ЧекККМТовары.ХарактеристикаНоменклатуры КАК Характеристика
- |ИЗ
- | Документ.ЧекККМ.Товары КАК ЧекККМТовары
- |ГДЕ
- | ЧекККМТовары.Ссылка = &Ссылка
- |
- |СГРУППИРОВАТЬ ПО
- | ЧекККМТовары.ЕдиницаИзмерения.Представление,
- | ЧекККМТовары.Номенклатура,
- | ВЫРАЗИТЬ(ЧекККМТовары.Номенклатура.НаименованиеПолное КАК СТРОКА(100)),
- | ЧекККМТовары.Номенклатура.Код,
- | ЧекККМТовары.Номенклатура.Артикул,
- | ЧекККМТовары.СерияНоменклатуры,
- | ЧекККМТовары.ХарактеристикаНоменклатуры,
- | ЧекККМТовары.Номенклатура.Представление,
- | ЧекККМТовары.Цена
- |
- |УПОРЯДОЧИТЬ ПО
- | НомерСтроки";
- ЗапросТовары.УстановитьПараметр("Ссылка", СсылкаНаОбъект.Ссылка);
- РезультатТовары = ЗапросТовары.Выполнить();
- ВыборкаСтрокТовары = РезультатТовары.Выбрать();
- ЕстьСкидки = Ложь;
- Пока ВыборкаСтрокТовары.Следующий() Цикл
- Если ВыборкаСтрокТовары.Скидка + ВыборкаСтрокТовары.СкидкаАвтоматическая <> 0 Тогда
- ЕстьСкидки = Истина;
- КонецЕсли;
- КонецЦикла;
- ДопКолонка = Константы.ДополнительнаяКолонкаПечатныхФормДокументов.Получить();
- Если ДопКолонка = Перечисления.ДополнительнаяКолонкаПечатныхФормДокументов.Артикул Тогда
- ВыводитьКоды = Истина;
- Колонка = "Артикул";
- ИначеЕсли ДопКолонка = Перечисления.ДополнительнаяКолонкаПечатныхФормДокументов.Код Тогда
- ВыводитьКоды = Истина;
- Колонка = "Код";
- Иначе
- ВыводитьКоды = Ложь;
- КонецЕсли;
- ОбластьНомера = Макет.ПолучитьОбласть("ШапкаТаблицы|НомерСтроки");
- ОбластьКодов = Макет.ПолучитьОбласть("ШапкаТаблицы|КолонкаКодов");
- ОбластьДанных = Макет.ПолучитьОбласть("ШапкаТаблицы|Данные");
- ОбластьСкидок = Макет.ПолучитьОбласть("ШапкаТаблицы|Скидка");
- ОбластьСуммы = Макет.ПолучитьОбласть("ШапкаТаблицы|Сумма");
- ТабДокумент.Вывести(ОбластьНомера);
- Если ВыводитьКоды Тогда
- ОбластьКодов.Параметры.ИмяКолонкиКодов = Колонка;
- ТабДокумент.Присоединить(ОбластьКодов);
- КонецЕсли;
- ТабДокумент.Присоединить(ОбластьДанных);
- Если ЕстьСкидки Тогда
- ТабДокумент.Присоединить(ОбластьСкидок);
- КонецЕсли;
- ТабДокумент.Присоединить(ОбластьСуммы);
- ОбластьКолонкаТовар = Макет.Область("Товар");
- Если Не ВыводитьКоды Тогда
- ОбластьКолонкаТовар.ШиринаКолонки = ОбластьКолонкаТовар.ШиринаКолонки
- + Макет.Область("КолонкаКодов").ШиринаКолонки;
- КонецЕсли;
- Если Не ЕстьСкидки Тогда
- ОбластьКолонкаТовар.ШиринаКолонки = ОбластьКолонкаТовар.ШиринаКолонки
- + Макет.Область("СуммаБезСкидки").ШиринаКолонки
- + Макет.Область("СуммаСкидки").ШиринаКолонки;
- КонецЕсли;
- ОбластьНомера = Макет.ПолучитьОбласть("Строка|НомерСтроки");
- ОбластьКодов = Макет.ПолучитьОбласть("Строка|КолонкаКодов");
- ОбластьДанных = Макет.ПолучитьОбласть("Строка|Данные");
- ОбластьСкидок = Макет.ПолучитьОбласть("Строка|Скидка");
- ОбластьСуммы = Макет.ПолучитьОбласть("Строка|Сумма");
- Сумма = 0;
- ВсегоСкидок = 0;
- ВсегоБезСкидок = 0;
- НомерСтроки = 0;
- ВыборкаСтрокТовары =РезультатТовары.Выбрать();
- Пока ВыборкаСтрокТовары.Следующий() Цикл
- Если НЕ ЗначениеЗаполнено(ВыборкаСтрокТовары.Номенклатура) Тогда
- Сообщить("В одной из строк не заполнено значение номенклатуры - строка при печати пропущена.", СтатусСообщения.Важное);
- Продолжить;
- КонецЕсли;
- НомерСтроки = НомерСтроки+1;
- ОбластьНомера.Параметры.Заполнить(ВыборкаСтрокТовары);
- ОбластьНомера.Параметры.НомерСтроки = НомерСтроки;
- ТабДокумент.Вывести(ОбластьНомера);
- Если ВыводитьКоды Тогда
- Если Колонка = "Артикул" Тогда
- ОбластьКодов.Параметры.Артикул = ВыборкаСтрокТовары.Артикул;
- Иначе
- ОбластьКодов.Параметры.Артикул = ВыборкаСтрокТовары.Код;
- КонецЕсли;
- ТабДокумент.Присоединить(ОбластьКодов);
- КонецЕсли;
- ОбластьДанных.Параметры.Заполнить(ВыборкаСтрокТовары);
- ОбластьДанных.Параметры.Товар = ?(НЕ ЗначениеЗаполнено(ВыборкаСтрокТовары.ТоварПолноеНаименование),
- ВыборкаСтрокТовары.Товар, ВыборкаСтрокТовары.ТоварПолноеНаименование)
- + ФормированиеПечатныхФорм.ПредставлениеСерий(ВыборкаСтрокТовары);
- ТабДокумент.Присоединить(ОбластьДанных);
- Скидка = ВыборкаСтрокТовары.Цена * ВыборкаСтрокТовары.Количество - ВыборкаСтрокТовары.Сумма;
- Если ЕстьСкидки Тогда
- ОбластьСкидок.Параметры.Скидка = Скидка;
- ОбластьСкидок.Параметры.СуммаБезСкидки = ВыборкаСтрокТовары.Сумма + Скидка;
- ТабДокумент.Присоединить(ОбластьСкидок);
- КонецЕсли;
- ОбластьСуммы.Параметры.Заполнить(ВыборкаСтрокТовары);
- ТабДокумент.Присоединить(ОбластьСуммы);
- Сумма = Сумма + ВыборкаСтрокТовары.Сумма;
- ВсегоСкидок = ВсегоСкидок + Скидка;
- ВсегоБезСкидок = Сумма + ВсегоСкидок;
- КонецЦикла;
- // Вывести Итого.
- ОбластьНомера = Макет.ПолучитьОбласть("Итого|НомерСтроки");
- ОбластьКодов = Макет.ПолучитьОбласть("Итого|КолонкаКодов");
- ОбластьДанных = Макет.ПолучитьОбласть("Итого|Данные");
- ОбластьСкидок = Макет.ПолучитьОбласть("Итого|Скидка");
- ОбластьСуммы = Макет.ПолучитьОбласть("Итого|Сумма");
- ТабДокумент.Вывести(ОбластьНомера);
- Если ВыводитьКоды Тогда
- ТабДокумент.Присоединить(ОбластьКодов);
- КонецЕсли;
- ТабДокумент.Присоединить(ОбластьДанных);
- Если ЕстьСкидки Тогда
- ОбластьСкидок.Параметры.ВсегоСкидок = ВсегоСкидок;
- ОбластьСкидок.Параметры.ВсегоБезСкидок = ВсегоБезСкидок;
- ТабДокумент.Присоединить(ОбластьСкидок);
- КонецЕсли;
- ОбластьСуммы.Параметры.Всего = Сумма;
- ТабДокумент.Присоединить(ОбластьСуммы);
- // Вывести Сумму прописью.
- ОбластьМакета = Макет.ПолучитьОбласть("СуммаПрописью");
- ОбластьМакета.Параметры.ИтоговаяСтрока = "Всего наименований " + ВыборкаСтрокТовары.Количество()
- + ", на сумму " + ОбщегоНазначения.ФорматСумм(Шапка.СуммаДокумента, мВалютаРегламентированногоУчета);
- ОбластьМакета.Параметры.СуммаПрописью = ОбщегоНазначения.СформироватьСуммуПрописью(Шапка.СуммаДокумента, мВалютаРегламентированногоУчета);
- ТабДокумент.Вывести(ОбластьМакета);
- // Вывести Оплату и Сдачу.
- СуммаОплат = 0;
- СуммаБезналичныхОплат = 0;
- СписокОплат = Новый Соответствие();
- ВыборкаОплат = Шапка.Оплата.Выбрать();
- Пока ВыборкаОплат.Следующий() Цикл
- Если Шапка.ВидОперации = Перечисления.ВидыОперацийЧекККМ.Возврат
- И ВыборкаОплат.ВидОплаты.ТипОплаты <> Перечисления.ТипыОплатЧекаККМ.Наличные Тогда
- СуммаБезналичныхОплат = СуммаБезналичныхОплат + ВыборкаОплат.Сумма;
- КонецЕсли;
- ЗаписьОплаты = СписокОплат.Получить(Строка(ВыборкаОплат.ВидОплаты.ТипОплаты));
- Если ЗаписьОплаты = Неопределено Тогда
- СписокОплат.Вставить(Строка(ВыборкаОплат.ВидОплаты.ТипОплаты), ВыборкаОплат.Сумма);
- Иначе
- СписокОплат.Вставить(Строка(ВыборкаОплат.ВидОплаты.ТипОплаты), ЗаписьОплаты + ВыборкаОплат.Сумма);
- КонецЕсли;
- СуммаОплат = СуммаОплат + ВыборкаОплат.Сумма;
- КонецЦикла;
- //Отдельная подготовка наличной оплаты для чека возврата
- Если Шапка.ВидОперации = Перечисления.ВидыОперацийЧекККМ.Возврат Тогда
- СписокОплат.Вставить(Строка(Перечисления.ТипыОплатЧекаККМ.Наличные), Шапка.СуммаДокумента - СуммаБезналичныхОплат);
- КонецЕсли;
- ОбластьМакета = Макет.ПолучитьОбласть("Оплата");
- ОплатаДобавлена = Ложь;
- Для Каждого ЗнПеречисления Из Перечисления.ТипыОплатЧекаККМ Цикл
- ЗаписьОплаты = СписокОплат.Получить(Строка(ЗнПеречисления));
- Если ЗаписьОплаты <> Неопределено Тогда
- ОбластьМакета.Параметры.Оплата = ?(ОплатаДобавлена, ОбластьМакета.Параметры.Оплата + Символы.ПС, "")
- + Строка(ЗнПеречисления) + ": " + Формат(ЗаписьОплаты, "ЧЦ=15; ЧДЦ=2; ЧРД=.; ЧН=; ЧГ=0");
- ОплатаДобавлена = Истина;
- КонецЕсли;
- КонецЦикла;
- Если Шапка.ВидОперации = Перечисления.ВидыОперацийЧекККМ.Продажа Тогда
- ОбластьМакета.Параметры.Сдача = Формат(СуммаОплат - Шапка.СуммаДокумента, "ЧЦ=15; ЧДЦ=2; ЧРД=.; ЧН=; ЧГ=0");
- Иначе
- ОбластьМакета.Параметры.Сдача = "0.00";
- КонецЕсли;
- ТабДокумент.Вывести(ОбластьМакета);
- // Вывести подписи.
- ОбластьМакета = Макет.ПолучитьОбласть("Подписи");
- ОбластьМакета.Параметры.Заполнить(Шапка);
- ТабДокумент.Вывести(ОбластьМакета);
- ТабДокумент.АвтоМасштаб = Истина;
- ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
- Возврат ТабДокумент
- КонецФункции
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement