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