// функция помещает в структуру все данные, отображаемые при печати документа.
функция ПолучитьПараметрыПечатиСчетаЗаказа(Тип)
ПараметрыПечати = новый Структура;
Позиции = новый Массив;
Запрос = новый Запрос;
Запрос.УстановитьПараметр("ТекущийДокумент", СсылкаНаОбъект);
Запрос.Текст ="
|ВЫБРАТЬ
| Номер,
| Дата,
| ДоговорКонтрагента,
| Организация,
| Контрагент КАК Получатель,
| Организация КАК Руководители,
| Организация КАК Поставщик,
| СуммаДокумента,
| ВалютаДокумента,
| УчитыватьНДС,
| СуммаВключаетНДС
|ИЗ
| Документ.ЗаказПокупателя КАК ЗаказПокупателя
|
|ГДЕ
| ЗаказПокупателя.Ссылка = &ТекущийДокумент";
Шапка = Запрос.Выполнить().Выбрать();
Шапка.Следующий();
СтрокаВыборкиПоляСодержания = ОбработкаТабличныхЧастей.ПолучитьЧастьЗапросаДляВыбораСодержания("ЗаказПокупателя");
Запрос = новый Запрос;
Запрос.УстановитьПараметр("ТекущийДокумент", СсылкаНаОбъект);
Запрос.Текст = "
|ВЫБРАТЬ
| ВложенныйЗапрос.Номенклатура,
| ВЫРАЗИТЬ (ВложенныйЗапрос.Номенклатура.НаименованиеПолное КАК Строка(1000)) КАК НаименованиеПолное,
| ВложенныйЗапрос.Номенклатура.Код КАК Код,
| ВложенныйЗапрос.Номенклатура.Артикул КАК Артикул,
| ВложенныйЗапрос.Количество,
| ВложенныйЗапрос.ЕдиницаИзмерения.Представление КАК ЕдиницаИзмерения,
| ВложенныйЗапрос.ПроцентСкидкиНаценки
| + ВложенныйЗапрос.ПроцентАвтоматическихСкидок КАК Скидка,
| ВложенныйЗапрос.Цена,
| ВложенныйЗапрос.Сумма,
| ВложенныйЗапрос.СуммаНДС,
| ВложенныйЗапрос.Характеристика,
| NULL Как Серия,
| ВложенныйЗапрос.НомерСтроки,
| Метка
|ИЗ
| (
| ВЫБРАТЬ
| ЗаказПокупателя.Номенклатура,
| ЗаказПокупателя.ЕдиницаИзмерения,
| ЗаказПокупателя.ПроцентСкидкиНаценки КАК ПроцентСкидкиНаценки,
| ЗаказПокупателя.ПроцентАвтоматическихСкидок КАК ПроцентАвтоматическихСкидок,
| ЗаказПокупателя.Цена КАК Цена,
| СУММА(ЗаказПокупателя.Количество) КАК Количество,
| СУММА(ЗаказПокупателя.Сумма ) КАК Сумма,
| СУММА(ЗаказПокупателя.СуммаНДС ) КАК СуммаНДС,
| ЗаказПокупателя.ХарактеристикаНоменклатуры КАК Характеристика,
| МИНИМУМ(ЗаказПокупателя.НомерСтроки) КАК НомерСтроки,
| 0 КАК Метка
| ИЗ
| Документ.ЗаказПокупателя.Товары КАК ЗаказПокупателя
|
| ГДЕ
| ЗаказПокупателя.Ссылка = &ТекущийДокумент
|
| СГРУППИРОВАТЬ ПО
| ЗаказПокупателя.Номенклатура,
| ЗаказПокупателя.ЕдиницаИзмерения,
| ЗаказПокупателя.ПроцентСкидкиНаценки,
| ЗаказПокупателя.ПроцентАвтоматическихСкидок,
| ЗаказПокупателя.Цена,
| ЗаказПокупателя.ХарактеристикаНоменклатуры
| ) КАК ВложенныйЗапрос
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ЗаказПокупателя.Номенклатура,
| " + СтрокаВыборкиПоляСодержания + " КАК Товар,
| ЗаказПокупателя.Номенклатура.Код КАК Код,
| ЗаказПокупателя.Номенклатура.Артикул КАК Артикул,
| ЗаказПокупателя.Количество,
| ЗаказПокупателя.Номенклатура.ЕдиницаХраненияОстатков,
| ЗаказПокупателя.ПроцентСкидкиНаценки+ЗаказПокупателя.ПроцентАвтоматическихСкидок,
| ЗаказПокупателя.Цена,
| ЗаказПокупателя.Сумма,
| ЗаказПокупателя.СуммаНДС,
| NULL,
| NULL,
| ЗаказПокупателя.НомерСтроки,
| 1 КАК Метка
|
|ИЗ
| Документ.ЗаказПокупателя.Услуги КАК ЗаказПокупателя
|
|ГДЕ
| ЗаказПокупателя.Ссылка = &ТекущийДокумент
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ЗаказПокупателя.Номенклатура,
| ПРЕДСТАВЛЕНИЕ(ЗаказПокупателя.Номенклатура) КАК Товар,
| ЗаказПокупателя.Номенклатура.Код КАК Код,
| ЗаказПокупателя.Номенклатура.Артикул КАК Артикул,
| ЗаказПокупателя.Количество,
| ЗаказПокупателя.Номенклатура.ЕдиницаХраненияОстатков,
| NULL,
| ЗаказПокупателя.Цена,
| ЗаказПокупателя.Сумма,
| (0) КАК СуммаНДС,
| NULL,
| NULL,
| ЗаказПокупателя.НомерСтроки,
| 3 КАК Метка
|
|ИЗ
| Документ.ЗаказПокупателя.ВозвратнаяТара КАК ЗаказПокупателя
|
|ГДЕ
| ЗаказПокупателя.Ссылка = &ТекущийДокумент
|УПОРЯДОЧИТЬ ПО Метка ВОЗР, НомерСтроки ВОЗР
|";
ЗапросТовары = Запрос.Выполнить().Выгрузить();
// Выводим шапку накладной
ПараметрыПечати.Вставить("УчитыватьНДС", Шапка.УчитыватьНДС);
СведенияОПоставщике = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.Поставщик, Шапка.Дата);
если Тип = "Счет" тогда
ПараметрыПечати.Вставить("ИНН", СведенияОПоставщике.ИНН);
ПараметрыПечати.Вставить("КПП", СведенияОПоставщике.КПП);
ПредставлениеПоставщикаДляПлатПоручения = "";
если ТипЗнч(СсылкаНаОбъект.СтруктурнаяЕдиница) = Тип("СправочникСсылка.БанковскиеСчета") тогда
Банк = СсылкаНаОбъект.СтруктурнаяЕдиница.Банк;
БИК = Банк.Код;
КоррСчет = Банк.КоррСчет;
ГородБанка = Банк.Город;
НомерСчета = СсылкаНаОбъект.СтруктурнаяЕдиница.НомерСчета;
ПараметрыПечати.Вставить("БИКБанкаПолучателя", БИК);
ПараметрыПечати.Вставить("БанкПолучателя", Банк);
ПараметрыПечати.Вставить("БанкПолучателяПредставление", СокрЛП(Банк) + " " + ГородБанка);
ПараметрыПечати.Вставить("СчетБанкаПолучателя", КоррСчет);
ПараметрыПечати.Вставить("СчетБанкаПолучателяПредставление", КоррСчет);
ПараметрыПечати.Вставить("СчетПолучателяПредставление", НомерСчета);
ПараметрыПечати.Вставить("СчетПолучателя", НомерСчета);
ПредставлениеПоставщикаДляПлатПоручения = СсылкаНаОбъект.СтруктурнаяЕдиница.ТекстКорреспондента;
конецесли;
если ПустаяСтрока(ПредставлениеПоставщикаДляПлатПоручения) тогда
ПредставлениеПоставщикаДляПлатПоручения = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОПоставщике, "ПолноеНаименование,");
конецесли;
ПараметрыПечати.Вставить("ПредставлениеПоставщикаДляПлатПоручения", ПредставлениеПоставщикаДляПлатПоручения);
конецесли;
если Тип = "Счет" тогда
ПараметрыПечати.Вставить("ТекстЗаголовка", ОбщегоНазначения.СформироватьЗаголовокДокумента(Шапка, "Счет на оплату"));
иначе
ПараметрыПечати.Вставить("ТекстЗаголовка", ОбщегоНазначения.СформироватьЗаголовокДокумента(Шапка, "Заказ покупателя"));
конецесли;
ПараметрыПечати.Вставить("ТекстПоставщик", ?(Тип = "Счет", "Поставщик:", "Исполнитель:"));
ПараметрыПечати.Вставить("ПредставлениеПоставщика", ФормированиеПечатныхФорм.ОписаниеОрганизации(УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.Организация, Шапка.Дата), "ПолноеНаименование,ИНН,КПП,ЮридическийАдрес,Телефоны,"));
СведенияОПолучателе = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.Получатель, Шапка.Дата);
ПараметрыПечати.Вставить("ТекстПокупатель", ?(Тип = "Счет", "Покупатель:", "Заказчик:"));
ПараметрыПечати.Вставить("ПредставлениеПолучателя", ФормированиеПечатныхФорм.ОписаниеОрганизации(УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.Получатель, Шапка.Дата), "ПолноеНаименование,ИНН,КПП,ЮридическийАдрес,Телефоны,"));
ДопКолонка = Константы.ДополнительнаяКолонкаПечатныхФормДокументов.Получить();
ПараметрыПечати.Вставить("ВыводитьКоды", Ложь);
если ДопКолонка = Перечисления.ДополнительнаяКолонкаПечатныхФормДокументов.Артикул тогда
ПараметрыПечати.ВыводитьКоды = Истина;
Колонка = "Артикул";
иначеесли ДопКолонка = Перечисления.ДополнительнаяКолонкаПечатныхФормДокументов.Код тогда
ПараметрыПечати.ВыводитьКоды = Истина;
Колонка = "Код";
конецесли;
если ПараметрыПечати.ВыводитьКоды тогда
ПараметрыПечати.Вставить("ИмяКолонкиКодов", Колонка);
конецесли;
Сумма = 0;
СуммаНДС = 0;
ВсегоСкидок = 0;
ВсегоБезСкидок = 0;
для каждого ВыборкаСтрокТовары из ЗапросТовары цикл
ПараметрыПозиции = новый Структура;
ПараметрыПозиции.Вставить("Номенклатура", ВыборкаСтрокТовары.Номенклатура);
ПараметрыПозиции.Вставить("НомерСтроки", ЗапросТовары.Индекс(ВыборкаСтрокТовары) + 1);
если ПараметрыПечати.ВыводитьКоды тогда
если Колонка = "Артикул" тогда
ПараметрыПозиции.Вставить("Артикул", ВыборкаСтрокТовары.Артикул);
иначе
ПараметрыПозиции.Вставить("Артикул", ВыборкаСтрокТовары.Код);
конецесли;
конецесли;
ПараметрыПозиции.Вставить("Количество", ВыборкаСтрокТовары.Количество);
ПараметрыПозиции.Вставить("ЕдиницаИзмерения", ВыборкаСтрокТовары.ЕдиницаИзмерения);
ПараметрыПозиции.Вставить("Цена", ВыборкаСтрокТовары.Цена);
ПараметрыПозиции.Вставить("Товар", СокрП(ВыборкаСтрокТовары.НаименованиеПолное)
+ ФормированиеПечатныхФорм.ПредставлениеСерий(ВыборкаСтрокТовары)
+ ?(ВыборкаСтрокТовары.Метка = 3, " (возвратная тара)", ""));
если не ЗначениеЗаполнено(ВыборкаСтрокТовары.Скидка) тогда
Скидка = 0;
иначе
Скидка = ВыборкаСтрокТовары.Сумма / (100 - ВыборкаСтрокТовары.Скидка) * ВыборкаСтрокТовары.Скидка;
конецесли;
ПараметрыПозиции.Вставить("Сумма", ВыборкаСтрокТовары.Сумма);
Сумма = Сумма + ВыборкаСтрокТовары.Сумма;
СуммаНДС = СуммаНДС + ВыборкаСтрокТовары.СуммаНДС;
ВсегоСкидок = ВсегоСкидок + Скидка;
ВсегоБезСкидок = Сумма + ВсегоСкидок;
Позиции.Добавить(ПараметрыПозиции);
конеццикла;
ПараметрыПечати.Вставить("Позиции", Позиции);
// Вывести Итого
ПараметрыПечати.Вставить("Всего", ЗаполнениеДокументов.ФорматСумм(Сумма));
// Вывести ИтогоНДС
ПараметрыПечати.Вставить("НДС", "В том числе НДС:");
ПараметрыПечати.Вставить("ВсегоНДС", ЗаполнениеДокументов.ФорматСумм(ЗапросТовары.Итог("СуммаНДС")));
// Вывести Сумму прописью
СуммаКПрописи = Сумма;
ПараметрыПечати.Вставить("ИтоговаяСтрока", "Всего наименований " + ЗапросТовары.Количество()
+ ", на сумму " + ЗаполнениеДокументов.ФорматСумм(СуммаКПрописи) + " руб.");
ПараметрыПечати.Вставить("СуммаПрописью", ЧислоПрописью (СуммаКПрописи,
"L=ru_RU", "рубль, рубля, рублей, м, копейка, копейки, копеек, ж, 2"));
// Вывести подписи
если Тип = "Счет" тогда
Руководители = РегламентированнаяОтчетность.ОтветственныеЛицаОрганизаций(Шапка.Руководители, Шапка.Дата,);
Руководитель = Руководители.Руководитель;
Бухгалтер = Руководители.ГлавныйБухгалтер;
ПараметрыПечати.Вставить("ФИОРуководителя", "/" + Руководитель + "/");
ПараметрыПечати.Вставить("ФИОБухгалтера", "/" + Бухгалтер + "/");
конецесли;
комментарий = СсылкаНаОбъект.Комментарий;
если комментарий <> "" тогда
комментарий = "* " + комментарий;
конецесли;
ПараметрыПечати.Вставить("Комментарий", комментарий);
возврат ПараметрыПечати;
конецфункции // ПолучитьПараметрыПечатиСчетаЗаказа()
// Функция создает табличный документ для печати счета
функция Печать() экспорт
Тип = "Счет";
ПараметрыПечати = ПолучитьПараметрыПечатиСчетаЗаказа (Тип);
ТабДокумент = новый ТабличныйДокумент;
ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ЗаказПокупателя_СчетЗаказ";
Макет = ПолучитьМакет("СчетЗаказ");
// Выводим шапку накладной
если Тип = "Счет" тогда
ОбластьМакета = Макет.ПолучитьОбласть("ЗаголовокСчета");
ОбластьМакета.Параметры.Заполнить(ПараметрыПечати);
ТабДокумент.Вывести(ОбластьМакета);
конецесли;
ОбластьМакета = Макет.ПолучитьОбласть("Заголовок");
ОбластьМакета.Параметры.Заполнить(ПараметрыПечати);
ТабДокумент.Вывести(ОбластьМакета);
ОбластьМакета = Макет.ПолучитьОбласть("Поставщик");
ОбластьМакета.Параметры.Заполнить(ПараметрыПечати);
ТабДокумент.Вывести(ОбластьМакета);
ОбластьМакета = Макет.ПолучитьОбласть("Покупатель");
ОбластьМакета.Параметры.Заполнить(ПараметрыПечати);
ТабДокумент.Вывести(ОбластьМакета);
ОбластьНомера = Макет.ПолучитьОбласть("ШапкаТаблицы|НомерСтроки");
ОбластьДанных = Макет.ПолучитьОбласть("ШапкаТаблицы|Данные");
ОбластьСуммы = Макет.ПолучитьОбласть("ШапкаТаблицы|Сумма");
ОбластьТовар = Макет.ПолучитьОбласть("ШапкаТаблицы|Товар");
ТабДокумент.Вывести(ОбластьНомера);
ОбластьТовар.Параметры.Товар = "Товары (работы, услуги)";
ТабДокумент.Присоединить(ОбластьТовар);
ТабДокумент.Присоединить(ОбластьДанных);
ТабДокумент.Присоединить(ОбластьСуммы);
// Увеличим ширину колонки Товар на ширину неиспользуемых колонок
ОбластьКолонкаТовар = Макет.Область("Товар");
ОбластьНомера = Макет.ПолучитьОбласть("Строка|НомерСтроки");
ОбластьДанных = Макет.ПолучитьОбласть("Строка|Данные");
ОбластьСуммы = Макет.ПолучитьОбласть("Строка|Сумма");
ОбластьТовар = Макет.ПолучитьОбласть("Строка|Товар");
для каждого ПараметрыПозиции из ПараметрыПечати.Позиции цикл
если не ЗначениеЗаполнено(ПараметрыПозиции.Номенклатура) тогда
Сообщить("В одной из строк не заполнено значение номенклатуры - строка при печати пропущена.", СтатусСообщения.Важное);
Продолжить;
конецесли;
ОбластьНомера.Параметры.Заполнить(ПараметрыПозиции);
ТабДокумент.Вывести(ОбластьНомера);
ОбластьТовар.Параметры.Заполнить(ПараметрыПозиции);
ТабДокумент.Присоединить(ОбластьТовар);
ОбластьДанных.Параметры.Заполнить(ПараметрыПозиции);
ТабДокумент.Присоединить(ОбластьДанных);
ОбластьСуммы.Параметры.Заполнить(ПараметрыПозиции);
ТабДокумент.Присоединить(ОбластьСуммы);
конеццикла;
// Вывести Итого
ОбластьНомера = Макет.ПолучитьОбласть("Итого|НомерСтроки");
ОбластьДанных = Макет.ПолучитьОбласть("Итого|Данные");
ОбластьСуммы = Макет.ПолучитьОбласть("Итого|Сумма");
ОбластьТовар = Макет.ПолучитьОбласть("Итого|Товар");
ТабДокумент.Вывести(ОбластьНомера);
ТабДокумент.Присоединить(ОбластьТовар);
ТабДокумент.Присоединить(ОбластьДанных);
ОбластьСуммы.Параметры.Заполнить(ПараметрыПечати);
ТабДокумент.Присоединить(ОбластьСуммы);
// Вывести ИтогоНДС
ОбластьНомера = Макет.ПолучитьОбласть("ИтогоНДС|НомерСтроки");
ОбластьДанных = Макет.ПолучитьОбласть("ИтогоНДС|Данные");
ОбластьСуммы = Макет.ПолучитьОбласть("ИтогоНДС|Сумма");
ОбластьТовар = Макет.ПолучитьОбласть("ИтогоНДС|Товар");
ТабДокумент.Вывести(ОбластьНомера);
ОбластьТовар.Параметры.Заполнить(ПараметрыПечати);
ТабДокумент.Присоединить(ОбластьТовар);
ОбластьДанных.Параметры.Заполнить(ПараметрыПечати);
ТабДокумент.Присоединить(ОбластьДанных);
ОбластьСуммы.Параметры.Заполнить(ПараметрыПечати);
ТабДокумент.Присоединить(ОбластьСуммы);
// Вывести Сумму прописью
ОбластьМакета = Макет.ПолучитьОбласть("СуммаПрописью");
ОбластьМакета.Параметры.Заполнить(ПараметрыПечати);
ТабДокумент.Вывести(ОбластьМакета);
// Вывести подписи
если Тип = "Счет" тогда
ОбластьМакета = Макет.ПолучитьОбласть("ПодвалСчета");
иначе
ОбластьМакета = Макет.ПолучитьОбласть("ПодвалЗаказа");
конецесли;
ОбластьМакета.Параметры.Заполнить(ПараметрыПечати);
ТабДокумент.Вывести(ОбластьМакета);
возврат ТабДокумент;
конецфункции