Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
24 ноя 2024, 10:11

Добавление в 1С УТ 11 активной колонки в печатной форме Счет на оплату

Автор MKim, 22 ноя 2023, 13:01

0 Пользователей и 1 гость просматривают эту тему.

MKim

Здравствуйте. Возник вопрос как сделать так, чтобы при печати Счета на оплате автоматически заполнялась колонка Срок поставки из Заказа клиента.
Создала колонку Срок Поставки в печатной форме Счет на оплату в расширении, но при печати эта колонка не заполняется.  Код в конфигурации Печать Счета на оплату ниже, я так понимаю в расширении в коде нужно менять. А где и на что не могу найти. Подскажите, пожалуйста, как настроить заполнение колонки Срок поставки в печатной форме.
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

#Область СлужебныеПроцедурыИФункции

#Область Печать

// Сформировать печатные формы объектов
//
// ВХОДЯЩИЕ:
//   ИменаМакетов    - Строка    - Имена макетов, перечисленные через запятую
//   МассивОбъектов  - Массив    - Массив ссылок на объекты которые нужно распечатать
//   ПараметрыПечати - Структура - Структура дополнительных параметров печати.
//
// ИСХОДЯЩИЕ:
//   КоллекцияПечатныхФорм - Таблица значений - Сформированные табличные документы
//   ПараметрыВывода       - Структура        - Параметры сформированных табличных документов.
//
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт

Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "СчетНаОплату") Тогда
СтруктураТипов = ОбщегоНазначенияУТ.СоответствиеМассивовПоТипамОбъектов(МассивОбъектов);
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
"СчетНаОплату",
НСтр("ru='Счет на оплату'"),
СформироватьПечатнуюФормуСчетНаОплату(СтруктураТипов, ОбъектыПечати, ПараметрыПечати));
КонецЕсли;

Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ПредварительныйПросмотрПечатнойФормыСчетНаОплату") Тогда
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
"ПредварительныйПросмотрПечатнойФормыСчетНаОплату",
НСтр("ru='Счет на оплату'"),
ПечатьПредварительныйПросмотрСчетаНаОплату(МассивОбъектов[0], ОбъектыПечати, "СчетНаОплату"));
КонецЕсли;
   
ФормированиеПечатныхФорм.ЗаполнитьПараметрыОтправки(ПараметрыВывода.ПараметрыОтправки, МассивОбъектов, КоллекцияПечатныхФорм);

КонецПроцедуры

#КонецОбласти

#Область СчетНаОплату

Функция СформироватьПечатнуюФормуСчетНаОплату(СтруктураТипов, ОбъектыПечати, ПараметрыПечати) Экспорт

ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент.АвтоМасштаб = Истина;
ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_СЧЕТНАОПЛАТУ";

НомерТипаДокумента = 0;

УстановитьПривилегированныйРежим(Истина);

Для Каждого СтруктураОбъектов Из СтруктураТипов Цикл

НомерТипаДокумента = НомерТипаДокумента + 1;
Если НомерТипаДокумента > 1 Тогда
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;

МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(СтруктураОбъектов.Ключ);
ДанныеДляПечати = МенеджерОбъекта.ПолучитьДанныеДляПечатнойФормыСчетаНаОплату(ПараметрыПечати, СтруктураОбъектов.Значение);

ЗаполнитьТабличныйДокументСчетаНаОплату(ТабличныйДокумент, ДанныеДляПечати, ОбъектыПечати, ПараметрыПечати);

КонецЦикла;

УстановитьПривилегированныйРежим(Ложь);

Возврат ТабличныйДокумент;

КонецФункции

Процедура ЗаполнитьРеквизитыШапкиСчетаНаОплату(ДанныеПечати, Макет, ТабличныйДокумент, ТаблицаЭтапыОплаты, ТаблицаТовары)

Макет = УправлениеПечатью.МакетПечатнойФормы("Обработка.ПечатьСчетовНаОплату.ПФ_MXL_СчетНаОплату");

СведенияОПоставщике = ФормированиеПечатныхФорм.СведенияОЮрФизЛице(ДанныеПечати.Организация, ДанныеПечати.Дата);

ОбластьМакета = Макет.ПолучитьОбласть("ЗаголовокСчета");
ФормированиеПечатныхФорм.ВывестиЛоготипВТабличныйДокумент(Макет, ОбластьМакета, "ЗаголовокСчета", ДанныеПечати.Организация);
ШтрихкодированиеПечатныхФорм.ВывестиШтрихкодВТабличныйДокумент(ТабличныйДокумент, Макет, ОбластьМакета, ДанныеПечати.Ссылка);

Если ТаблицаЭтапыОплаты.Количество() = 0 Тогда
ДатаПлатежа = '00010101';
ИначеЕсли ТаблицаЭтапыОплаты.Количество() = 1 Тогда
ДатаПлатежа = ТаблицаЭтапыОплаты[0].ДатаПлатежа;
Иначе
ДатаПлатежа = ТаблицаЭтапыОплаты[ТаблицаЭтапыОплаты.Количество()-1].ДатаПлатежа;
КонецЕсли;

Если ЗначениеЗаполнено(ДатаПлатежа) Тогда
СтруктураДанныхЗаголовок = Новый Структура;
НадписьСрокДействия = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='Счет действителен до %1.'"), Формат(ДатаПлатежа, "ДЛФ=D")) + " ";
СтруктураДанныхЗаголовок.Вставить("СрокДействия", НадписьСрокДействия);
ОбластьМакета.Параметры.Заполнить(СтруктураДанныхЗаголовок);
КонецЕсли;

ТабличныйДокумент.Вывести(ОбластьМакета);

Если ДанныеПечати.ПлатежЗаРубеж Тогда

ОбластьМакета = Макет.ПолучитьОбласть("ОбразецЗаполненияРеквизитыБанка");
СтруктураДанныхШапки = Новый Структура;
ПредставлениеПоставщикаДляПлатПоручения = "";

Если ЗначениеЗаполнено(ДанныеПечати.БанковскийСчет) Тогда
СтруктураДанныхШапки.Вставить("СчетБанкаПолучателяПредставление", ДанныеПечати.НомерБанковскогоСчета);
СтруктураДанныхШапки.Вставить("БанкПолучателяПредставление", ДанныеПечати.НаименованиеБанкаМеждународное);
Если ПустаяСтрока(СтруктураДанныхШапки.БанкПолучателяПредставление) Тогда
СтруктураДанныхШапки.Вставить("БанкПолучателяПредставление", ДанныеПечати.НаименованиеБанка);
КонецЕсли;
СтруктураДанныхШапки.Вставить("АдресБанкаПолучателяПредставление", ДанныеПечати.АдресБанка);
СтруктураДанныхШапки.Вставить("СВИФТБанка", ДанныеПечати.СВИФТБанка);
ПредставлениеПоставщикаДляПлатПоручения = ДанныеПечати.БанковскийСчетТекстКорреспондента;
КонецЕсли;

Если ПустаяСтрока(ПредставлениеПоставщикаДляПлатПоручения) Тогда
ПредставлениеПоставщикаДляПлатПоручения = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОПоставщике, "ПолноеНаименование,");
КонецЕсли;
СтруктураДанныхШапки.Вставить("ПредставлениеПоставщикаДляПлатПоручения", ПредставлениеПоставщикаДляПлатПоручения);
ОбластьМакета.Параметры.Заполнить(СтруктураДанныхШапки);
ТабличныйДокумент.Вывести(ОбластьМакета);

Если Не ПустаяСтрока(ДанныеПечати.НаименованиеБанкаДляРасчетовМеждународное) Тогда
ОбластьМакета = Макет.ПолучитьОбласть("ОбразецЗаполненияРеквизитыБанкаКорреспондента");

СтруктураДанныхШапки.Очистить();
СтруктураДанныхШапки.Вставить("БанкКорреспондентПолучателяПредставление",
ДанныеПечати.НаименованиеБанкаДляРасчетовМеждународное + " " + ДанныеПечати.АдресБанкаДляРасчетов);
СтруктураДанныхШапки.Вставить("СВИФТБанкаДляРасчетов", ДанныеПечати.СВИФТБанкаДляРасчетов);
СтруктураДанныхШапки.Вставить("СчетБанкаДляРасчетовПредставление", ДанныеПечати.СчетВБанкеДляРасчетов);

ОбластьМакета.Параметры.Заполнить(СтруктураДанныхШапки);
ТабличныйДокумент.Вывести(ОбластьМакета);
КонецЕсли;

ОбластьМакета = Макет.ПолучитьОбласть("ОбразецЗаполненияНазначениеПлатежа");
СтруктураДанныхШапки.Очистить();
Если Не ЗначениеЗаполнено(ДанныеПечати.НазначениеПлатежа)
И ТипЗнч(ДанныеПечати.Ссылка) <> Тип("ДокументСсылка.СчетНаОплатуКлиенту") Тогда
СтруктураДанныхШапки.Вставить("НазначениеПлатежа", Документы.СчетНаОплатуКлиенту.СформироватьНазначениеПлатежа(
ДанныеПечати.Номер, ДанныеПечати.Ссылка));
Иначе
СтруктураДанныхШапки.Вставить("НазначениеПлатежа", ДанныеПечати.НазначениеПлатежа);
КонецЕсли;
ОбластьМакета.Параметры.Заполнить(СтруктураДанныхШапки);
ТабличныйДокумент.Вывести(ОбластьМакета);

Иначе

Если ДанныеПечати.КонтрагентЮрФизЛицо = Перечисления.ЮрФизЛицо.ФизЛицо
И ЗначениеЗаполнено(ДанныеПечати.БанковскийСчет) Тогда
ОбластьМакета = Макет.ПолучитьОбласть("ОбразецЗаполненияППСКодом");
Иначе
ОбластьМакета = Макет.ПолучитьОбласть("ОбразецЗаполненияПП");
КонецЕсли;

СтруктураДанныхШапки = Новый Структура;
СтруктураДанныхШапки.Вставить("ИНН", СведенияОПоставщике.ИНН);
СтруктураДанныхШапки.Вставить("КПП",СведенияОПоставщике.КПП);
ПредставлениеПоставщикаДляПлатПоручения = "";

СтруктураДанныхШапки.Вставить("ИдентификаторПлатежа", ДанныеПечати.ИдентификаторПлатежа);

Если ЗначениеЗаполнено(ДанныеПечати.БанковскийСчет) Тогда

Если ЗначениеЗаполнено(ДанныеПечати.БИКБанкаДляРасчетов) Тогда
Банк = ДанныеПечати.НаименованиеБанкаДляРасчетов;
БИК         = ДанныеПечати.БИКБанкаДляРасчетов;
КоррСчет    = ДанныеПечати.КоррСчетБанкаДляРасчетов;
ГородБанка  = ДанныеПечати.ГородБанкаДляРасчетов;
НомерСчета  = ДанныеПечати.КоррСчетБанка;
Иначе
Банк = ДанныеПечати.НаименованиеБанка;
БИК         = ДанныеПечати.БИКБанк;
КоррСчет    = ДанныеПечати.КоррСчетБанка;
ГородБанка  = ДанныеПечати.ГородБанка;
НомерСчета  = ДанныеПечати.НомерБанковскогоСчета;
КонецЕсли;

СтруктураДанныхШапки.Вставить("БИКБанкаПолучателя", БИК);
СтруктураДанныхШапки.Вставить("БанкПолучателя", Банк);
СтруктураДанныхШапки.Вставить("БанкПолучателяПредставление", СокрЛП(Банк) + " " + ГородБанка);
СтруктураДанныхШапки.Вставить("СчетБанкаПолучателя", КоррСчет);
СтруктураДанныхШапки.Вставить("СчетБанкаПолучателяПредставление", КоррСчет);
СтруктураДанныхШапки.Вставить("СчетПолучателяПредставление", НомерСчета);
СтруктураДанныхШапки.Вставить("СчетПолучателя", НомерСчета);
ПредставлениеПоставщикаДляПлатПоручения = ДанныеПечати.БанковскийСчетТекстКорреспондента;

КонецЕсли;

Если ПустаяСтрока(ПредставлениеПоставщикаДляПлатПоручения) Тогда
ПредставлениеПоставщикаДляПлатПоручения = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОПоставщике, "ПолноеНаименование,");
КонецЕсли;

Если Не ЗначениеЗаполнено(ДанныеПечати.НазначениеПлатежа)
И ТипЗнч(ДанныеПечати.Ссылка) <> Тип("ДокументСсылка.СчетНаОплатуКлиенту") Тогда

СтруктураДанныхШапки.Вставить("НазначениеПлатежа", Документы.СчетНаОплатуКлиенту.СформироватьНазначениеПлатежа(
ДанныеПечати.Номер, ДанныеПечати.Ссылка));

Иначе

СтруктураДанныхШапки.Вставить("НазначениеПлатежа", ДанныеПечати.НазначениеПлатежа);

КонецЕсли;

СтруктураДанныхШапки.Вставить("ПредставлениеПоставщикаДляПлатПоручения", ПредставлениеПоставщикаДляПлатПоручения);
ОбластьМакета.Параметры.Заполнить(СтруктураДанныхШапки);

Если ДанныеПечати.КонтрагентЮрФизЛицо = Перечисления.ЮрФизЛицо.ФизЛицо
И ЗначениеЗаполнено(ДанныеПечати.БанковскийСчет) Тогда

РеквизитыПлатежа = РеквизитыПлатежаQRКод(СтруктураДанныхШапки);
РеквизитыПлатежа.СуммаЧислом = СуммаКОплатеПоСчету(ДанныеПечати, ТаблицаТовары);
РеквизитыПлатежа.Ссылка = ДанныеПечати.Ссылка;

ВывестиQRКод(РеквизитыПлатежа, ДанныеПечати, ОбластьМакета);

КонецЕсли;

ТабличныйДокумент.Вывести(ОбластьМакета);
КонецЕсли;

КолонкаКодов = ФормированиеПечатныхФорм.ИмяДополнительнойКолонки();
ВыводитьКоды = ЗначениеЗаполнено(КолонкаКодов);

Смещать = ТипСмещенияТабличногоДокумента.ПоВертикали;
ОбластьПервойКолонкиТоваров = Макет.Область("ПерваяКолонкаТовара");
Если НЕ ВыводитьКоды Тогда
ОбластьПервойКолонкиТоваров.ШиринаКолонки = ОбластьПервойКолонкиТоваров.ШиринаКолонки + Макет.Область("КолонкаКодов").ШиринаКолонки;
Макет.УдалитьОбласть(Макет.Область("КолонкаКодов"), Смещать);
КонецЕсли;

ОбластьМакета = Макет.ПолучитьОбласть("Заголовок");

ТекстЗаголовка = ОбщегоНазначенияУТКлиентСервер.СформироватьЗаголовокДокумента(ДанныеПечати, НСтр("ru='Счет на оплату'"));
СтруктураДанныхШапки = Новый Структура;
СтруктураДанныхШапки.Вставить("ТекстЗаголовка", ТекстЗаголовка);
ОбластьМакета.Параметры.Заполнить(СтруктураДанныхШапки);
ТабличныйДокумент.Вывести(ОбластьМакета);

ОбластьМакета = Макет.ПолучитьОбласть("Поставщик");

СтруктураДанныхПоставщик = Новый Структура;
СтруктураДанныхПоставщик.Вставить("ПредставлениеПоставщика",
ФормированиеПечатныхФорм.ОписаниеОрганизации(ФормированиеПечатныхФорм.СведенияОЮрФизЛице(ДанныеПечати.ОрганизацияПоставщик, ДанныеПечати.Дата),
"ПолноеНаименование,ИНН,КПП,ЮридическийАдрес,Телефоны,"));
ОбластьМакета.Параметры.Заполнить(СтруктураДанныхПоставщик);
ТабличныйДокумент.Вывести(ОбластьМакета);

ОбластьМакета = Макет.ПолучитьОбласть("Покупатель");
СтруктураДанныхПокупатель = Новый Структура;
СтруктураДанныхПокупатель.Вставить("ПредставлениеПолучателя",
ФормированиеПечатныхФорм.ОписаниеОрганизации(ФормированиеПечатныхФорм.СведенияОЮрФизЛице(ДанныеПечати.Контрагент, ДанныеПечати.Дата),
"ПолноеНаименование,ИНН,КПП,ЮридическийАдрес,Телефоны,"));
ОбластьМакета.Параметры.Заполнить(СтруктураДанныхПокупатель);
ТабличныйДокумент.Вывести(ОбластьМакета);

Если ЗначениеЗаполнено(ДанныеПечати.Грузоотправитель) Тогда
ОбластьМакета = Макет.ПолучитьОбласть("Грузоотправитель");
СтруктураДанныхГрузоотправитель = Новый Структура;
СтруктураДанныхГрузоотправитель.Вставить("ПредставлениеГрузоотправителя", ОписаниеОрганизации(ДанныеПечати, "Грузоотправитель"));
ОбластьМакета.Параметры.Заполнить(СтруктураДанныхГрузоотправитель);
ТабличныйДокумент.Вывести(ОбластьМакета);
КонецЕсли;

Если ЗначениеЗаполнено(ДанныеПечати.Грузополучатель) Тогда
ОбластьМакета = Макет.ПолучитьОбласть("Грузополучатель");
СтруктураДанныхГрузополучатель = Новый Структура;
СтруктураДанныхГрузополучатель.Вставить("ПредставлениеГрузополучателя", ОписаниеОрганизации(ДанныеПечати, "Грузополучатель"));
ОбластьМакета.Параметры.Заполнить(СтруктураДанныхГрузополучатель);
ТабличныйДокумент.Вывести(ОбластьМакета);
КонецЕсли;

КонецПроцедуры

Процедура ЗаполнитьРеквизитыПодвалаСчетаНаОплату(ДанныеПечати, Макет, ТабличныйДокумент, ТаблицаЭтапыОплаты, СоответствиеСтавокНДС, ПараметрыПечати)

МассивПроверкиВывода = Новый Массив;

// Вывести этапы графика оплаты
Если ТаблицаЭтапыОплаты.Количество() > 1 Тогда

ИмяКолонкиДатыОплаты = ?(ДанныеПечати.СчетКВозврату, НСтр("ru='Дата оплаты или возврата'"), НСтр("ru='Дата оплаты'"));

ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицыЭтапыОплаты");
ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ИтогоЭтапыОплаты");
СтруктураДанныхШапки = Новый Структура("ИмяКолонкиДатыОплаты",ИмяКолонкиДатыОплаты);
ОбластьШапкаТаблицы.Параметры.Заполнить(СтруктураДанныхШапки);
МассивПроверкиВывода.Добавить(ОбластьШапкаТаблицы);
МассивПроверкиВывода.Добавить(ОбластьПодвалТаблицы);

ОбластьСтрокаТаблицы = Макет.ПолучитьОбласть("СтрокаТаблицыЭтапыОплаты");

НомерЭтапа = 1;
Для Каждого ТекЭтап Из ТаблицаЭтапыОплаты Цикл

ПараметрыСтроки = НовыеПараметрыСтрокиЭтапа();
ЗаполнитьЗначенияСвойств(ПараметрыСтроки, ТекЭтап);
ПараметрыСтроки.НомерСтроки = НомерЭтапа;
Если Не ПараметрыСтроки.ЭтоЗалогЗаТару Тогда
ПараметрыСтроки.ТекстНДС = ФормированиеПечатныхФорм.СформироватьТекстНДСЭтапаОплаты(
СоответствиеСтавокНДС,
ТекЭтап.ПроцентПлатежа);
Иначе
ПараметрыСтроки.ПроцентПлатежа = "-";
ПараметрыСтроки.ТекстНДС = НСтр("ru='Залог за тару. Без налога (НДС).'");
КонецЕсли;

ОбластьСтрокаТаблицы.Параметры.Заполнить(ПараметрыСтроки);

МассивПроверкиВывода.Добавить(ОбластьСтрокаТаблицы);

Если ТабличныйДокумент.ПроверитьВывод(МассивПроверкиВывода) Тогда
Если НомерЭтапа = 1 Тогда
ТабличныйДокумент.Вывести(ОбластьШапкаТаблицы);
МассивПроверкиВывода.Удалить(0);
КонецЕсли;
Иначе
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
ТабличныйДокумент.Вывести(ОбластьШапкаТаблицы);
КонецЕсли;

ТабличныйДокумент.Вывести(ОбластьСтрокаТаблицы);
МассивПроверкиВывода.Удалить(МассивПроверкиВывода.ВГраница());

НомерЭтапа = НомерЭтапа + 1;

КонецЦикла;
ТабличныйДокумент.Вывести(ОбластьПодвалТаблицы);

КонецЕсли;

// Вывести дополнительную информацию
Если ЗначениеЗаполнено(ДанныеПечати.ДополнительнаяИнформация) Тогда

Область = Макет.ПолучитьОбласть("ДополнительнаяИнформация");
Область.Параметры.Заполнить(ДанныеПечати);
ТабличныйДокумент.Вывести(Область);

КонецЕсли;

// Вывести подписи
Область = Макет.ПолучитьОбласть("ПодвалСчета");
СтруктураДанныхПодвал = Новый Структура;
СтруктураДанныхПодвал.Вставить("ФИОРуководителя", ДанныеПечати.Руководитель);
СтруктураДанныхПодвал.Вставить("ДолжностьРуководителя", ДанныеПечати.ДолжностьРуководителя);
СтруктураДанныхПодвал.Вставить("ФИОБухгалтера", ДанныеПечати.ГлавныйБухгалтер);
СтруктураДанныхПодвал.Вставить("ФИОМенеджер", ФизическиеЛицаУТ.ФамилияИнициалыФизЛица(ДанныеПечати.Менеджер, ДанныеПечати.Дата));
Область.Параметры.Заполнить(СтруктураДанныхПодвал);

ФормированиеПечатныхФорм.ВывестиФаксимилеВТабличныйДокумент(Макет, Область, ДанныеПечати.Организация, ПараметрыПечати);
МассивПроверкиВывода.Очистить();
МассивПроверкиВывода.Добавить(Область);
Если НЕ ТабличныйДокумент.ПроверитьВывод(МассивПроверкиВывода) Тогда
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
ТабличныйДокумент.Вывести(Область);

КонецПроцедуры

Процедура ЗаполнитьТабличныйДокументСчетаНаОплату(ТабличныйДокумент, ДанныеДляПечати, ОбъектыПечати, ПараметрыПечати)

Перем КомплектПечатиПоСсылке;

ШаблоныОшибок = Новый Структура;
ШаблоныОшибок.Вставить("Товары", НСтр("ru = 'В документе %1 отсутствуют товары. Печать счета на оплату не требуется'"));
ШаблоныОшибок.Вставить("ЗаменяющиеТовары", НСтр("ru = 'В документе %1 отсутствуют заменяющие товары. Печать счета на оплату не требуется'"));
ШаблоныОшибок.Вставить("Этапы", НСтр("ru = 'В документе %1 отсутствуют этапы оплаты. Печать счета на оплату не требуется'"));

ИспользоватьРучныеСкидки         = ПолучитьФункциональнуюОпцию("ИспользоватьРучныеСкидкиВПродажах");
ИспользоватьАвтоматическиеСкидки = ПолучитьФункциональнуюОпцию("ИспользоватьАвтоматическиеСкидкиВПродажах");
СтруктураИмяДопКолонки = Новый Структура("ИмяКолонкиКодов", ФормированиеПечатныхФорм.ИмяДополнительнойКолонки());

ДанныеПечати = ДанныеДляПечати.РезультатПоШапке.Выбрать();
ЭтапыОплаты = ДанныеДляПечати.РезультатПоЭтапамОплаты.Выгрузить();
Товары = ДанныеДляПечати.РезультатПоТабличнойЧасти.Выгрузить();

ЭтапыЗалоговойТары = ЭтапыОплаты.НайтиСтроки(Новый Структура("ЭтоЗалогЗаТару", Истина));
ТолькоЗалогЗаТару = ЭтапыЗалоговойТары.Количество() = ЭтапыОплаты.Количество() И ЭтапыЗалоговойТары.Количество() > 0;

Если Товары.Колонки.Найти("Содержание")=Неопределено Тогда
ЕстьСодержание = Ложь;
Иначе
ЕстьСодержание = Истина;
КонецЕсли;

ПоказыватьНДС = Константы.ВыводитьДопКолонкиНДС.Получить();
ПервыйДокумент = Истина;

Пока ДанныеПечати.Следующий() Цикл

Отказ = Ложь;

СтруктураПоиска = Новый Структура("Ссылка", ДанныеПечати.Ссылка);

ИспользоватьНаборы = Ложь;
Если Товары.Колонки.Найти("ЭтоНабор") <> Неопределено Тогда
ИспользоватьНаборы = Истина;
КонецЕсли;

ТаблицаТовары = Товары.НайтиСтроки(СтруктураПоиска);
ТаблицаЭтапыОплаты = ЭтапыОплаты.НайтиСтроки(СтруктураПоиска);

ПроверкаЗаполненияДокумента(ДанныеПечати, ТаблицаТовары, ТаблицаЭтапыОплаты, ШаблоныОшибок, Отказ);
Если Отказ Тогда
Продолжить;
КонецЕсли;

Если ПервыйДокумент Тогда
ПервыйДокумент = Ложь;
Иначе
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;

НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;

ЗаголовокСкидки = ФормированиеПечатныхФорм.НужноВыводитьСкидки(ТаблицаТовары, ИспользоватьРучныеСкидки Или ИспользоватьАвтоматическиеСкидки);
ЕстьСкидки = ЗаголовокСкидки.ЕстьСкидки;

СуффиксОбласти = ?(ДанныеПечати.УчитыватьНДС И НЕ ТолькоЗалогЗаТару И ПоказыватьНДС, "СНДС", "") + ?(ЕстьСкидки, "СоСкидкой", "");

Макет = Новый ТабличныйДокумент;
ЗаполнитьРеквизитыШапкиСчетаНаОплату(ДанныеПечати, Макет, ТабличныйДокумент, ТаблицаЭтапыОплаты, ТаблицаТовары);

Если ДанныеПечати.ЧастичнаяОплата ИЛИ ТипЗнч(ДанныеПечати.ДокументОснование) = Тип("ДокументСсылка.ОтчетКомитенту") Тогда

ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицыЧастичнаяОплата");
ОбластьШапкаТаблицы.Параметры.Заполнить(СтруктураИмяДопКолонки);
ТабличныйДокумент.Вывести(ОбластьШапкаТаблицы);

ОбластьСтрокаТаблицы = Макет.ПолучитьОбласть("СтрокаТаблицыЧастичнаяОплата");
ОбластьСтрокаТаблицы.Параметры.Заполнить(ДанныеПечати);
ОбластьСтрокаТаблицы.Параметры.НомерСтроки = 1;
ТабличныйДокумент.Вывести(ОбластьСтрокаТаблицы);

ОбластьИтого = Макет.ПолучитьОбласть("ПодвалТаблицыЧастичнаяОплата");
СтруктураДанныхИтого = Новый Структура;
СтруктураДанныхИтого.Вставить("Всего", ДанныеПечати.СуммаДокумента);
ОбластьИтого.Параметры.Заполнить(СтруктураДанныхИтого);
ОбластьИтого.Параметры.Заполнить(ДанныеПечати);
ТабличныйДокумент.Присоединить(ОбластьИтого);

// Вывести ИтогоНДС
СоответствиеСтавокНДС = Новый Соответствие;
Если ДанныеПечати.УчитыватьНДС И НЕ ТолькоЗалогЗаТару
И НЕ ДанныеПечати.ОперацияОблагаетсяНДСУПокупателя Тогда
ОбластьИтогоНДС = Макет.ПолучитьОбласть("ПодвалТаблицыНДС");
Для Каждого СтрокаТовара Из ТаблицаТовары Цикл
Если ИспользоватьНаборы И СтрокаТовара.ЭтоНабор
И СтрокаТовара.ВариантПредставленияНабораВПечатныхФормах = Перечисления.ВариантыПредставленияНаборовВПечатныхФормах.НаборИКомплектующие Тогда
Продолжить; // Исключаем суммы НДС по набору в целом.
КонецЕсли;
СуммаНДС = СоответствиеСтавокНДС[СтрокаТовара.СтавкаНДС];
Если СуммаНДС = Неопределено Тогда
СуммаНДС = СтрокаТовара.СуммаНДС;
Иначе
СуммаНДС = СуммаНДС + СтрокаТовара.СуммаНДС;
КонецЕсли;
СоответствиеСтавокНДС.Вставить(СтрокаТовара.СтавкаНДС, СуммаНДС);
КонецЦикла;
Для Каждого ТекСтавкаНДС Из СоответствиеСтавокНДС Цикл
СтруктураДанныхИтогоНДС = Новый Структура;
СтруктураДанныхИтогоНДС.Вставить("НДС", ФормированиеПечатныхФорм.ТекстНДСПоСтавке(ТекСтавкаНДС.Ключ, ДанныеПечати.ЦенаВключаетНДС));
Если ЗначениеЗаполнено(ТекСтавкаНДС.Значение) Тогда
СтруктураДанныхИтогоНДС.Вставить("ВсегоНДС", ФормированиеПечатныхФорм.ФорматСумм(ТекСтавкаНДС.Значение /100 * ДанныеПечати.ПроцентОплаты));
Иначе
СтруктураДанныхИтогоНДС.Вставить("ВсегоНДС","-");
КонецЕсли;
ОбластьИтогоНДС.Параметры.Заполнить(СтруктураДанныхИтогоНДС);
ТабличныйДокумент.Вывести(ОбластьИтогоНДС);
КонецЦикла;
ОбластьПодвалСНДС = Макет.ПолучитьОбласть("ПодвалТаблицыВсего");
СтруктураДанныхПодвалСНДС = Новый Структура("ВсегоСНДС", ФормированиеПечатныхФорм.ФорматСумм(ДанныеПечати.СуммаДокумента));
ОбластьПодвалСНДС.Параметры.Заполнить(СтруктураДанныхПодвалСНДС);
ТабличныйДокумент.Вывести(ОбластьПодвалСНДС);
КонецЕсли;

// Вывести Сумму прописью
ОбластьМакета = Макет.ПолучитьОбласть("СуммаПрописьюЧастичныйСчет");
СуммаПрописью = НСтр("ru='Всего на сумму %СуммаПрописью%'");
СуммаПрописью = СтрЗаменить(СуммаПрописью, "%СуммаПрописью%", РаботаСКурсамиВалют.СформироватьСуммуПрописью(ДанныеПечати.СуммаДокумента, ДанныеПечати.Валюта));
СтруктураДанныхСуммаПрописью = Новый Структура("СуммаПрописью", СуммаПрописью);
ОбластьМакета.Параметры.Заполнить(СтруктураДанныхСуммаПрописью);
ТабличныйДокумент.Вывести(ОбластьМакета);

Иначе

// Таблица "Товары"
ОбластьШапкаТаблицы          = Макет.ПолучитьОбласть("ШапкаТаблицы" + СуффиксОбласти);
ОбластьСтрокаТаблицыСтандарт = Макет.ПолучитьОбласть("СтрокаТаблицы" + СуффиксОбласти);
ОбластьПодвалТаблицы         = Макет.ПолучитьОбласть("ПодвалТаблицы" + СуффиксОбласти);
ОбластьПодвалНДС             = Макет.ПолучитьОбласть("ПодвалТаблицыНДС");

Если ИспользоватьНаборы Тогда
ОбластьСтрокаТаблицыНабор         = Макет.ПолучитьОбласть("СтрокаТаблицы" + СуффиксОбласти + "Набор");
ОбластьСтрокаТаблицыКомплектующие = Макет.ПолучитьОбласть("СтрокаТаблицы" + СуффиксОбласти + "Комплектующие");
КонецЕсли;

ПустыеДанные = НаборыСервер.ПустыеДанные();
ВыводШапки = 0;

Если ДанныеПечати.УчитыватьНДС И НЕ ТолькоЗалогЗаТару Тогда
СуффиксОбластиПодвал = "СНДС" + ?(ЕстьСкидки, "СоСкидкой", "");
ОбластьПодвалСНДС = Макет.ПолучитьОбласть("ПодвалТаблицыВсего" + СуффиксОбластиПодвал);
КонецЕсли;

Если ЕстьСкидки Тогда
СтруктураЗаголовокСкидки = Новый Структура("Скидка, СуммаБезСкидки",
ЗаголовокСкидки.Скидка,
ЗаголовокСкидки.СуммаСкидки);
ОбластьШапкаТаблицы.Параметры.Заполнить(СтруктураЗаголовокСкидки);
КонецЕсли;
ОбластьШапкаТаблицы.Параметры.Заполнить(СтруктураИмяДопКолонки);
ОбластьСуммаПрописью = Макет.ПолучитьОбласть(?(ДанныеПечати.СчетКВозврату, "СуммаПрописьюКВозврату", "СуммаПрописью"));

МассивПроверкиВывода = Новый Массив;

Сумма = 0;
СуммаНДС = 0;
ВсегоСкидок = 0;
ВсегоБезСкидок = 0;
НомерСтроки = 0;
СоответствиеСтавокНДС = Новый Соответствие;
Для Каждого СтрокаТовары Из ТаблицаТовары Цикл

Если НаборыСервер.ИспользоватьОбластьНабор(СтрокаТовары, ИспользоватьНаборы) Тогда
ОбластьСтрокаТаблицы = ОбластьСтрокаТаблицыНабор;
ИначеЕсли НаборыСервер.ИспользоватьОбластьКомплектующие(СтрокаТовары, ИспользоватьНаборы) Тогда
ОбластьСтрокаТаблицы = ОбластьСтрокаТаблицыКомплектующие;
Иначе
ОбластьСтрокаТаблицы = ОбластьСтрокаТаблицыСтандарт;
КонецЕсли;

Если НаборыСервер.ВыводитьТолькоЗаголовок(СтрокаТовары, ИспользоватьНаборы) Тогда
НомерСтрокиПечать = "";
Иначе
НомерСтроки = НомерСтроки + 1;
НомерСтрокиПечать = НомерСтроки;
КонецЕсли;

Если НомерСтроки = 0 И ВыводШапки <> 2 Тогда
ВыводШапки = 1;
КонецЕсли;

ПрефиксИПостфикс = НаборыСервер.ПолучитьПрефиксИПостфикс(СтрокаТовары, ИспользоватьНаборы);

ДополнительныеПараметрыПолученияНаименованияДляПечати = НоменклатураКлиентСервер.ДополнительныеПараметрыПредставлениеНоменклатурыДляПечати();
ДополнительныеПараметрыПолученияНаименованияДляПечати.ВозвратнаяТара = СтрокаТовары.ЭтоВозвратнаяТара;
Если ЕстьСодержание Тогда
ДополнительныеПараметрыПолученияНаименованияДляПечати.Содержание = СтрокаТовары.Содержание;
КонецЕсли;

Товар = ПрефиксИПостфикс.Префикс
+ НоменклатураКлиентСервер.ПредставлениеНоменклатурыДляПечати(
СтрокаТовары.НаименованиеПолное,
СтрокаТовары.Характеристика,
,
, // Серия
ДополнительныеПараметрыПолученияНаименованияДляПечати)
+ ПрефиксИПостфикс.Постфикс;

СтруктураДанныхСтроки = Новый Структура;
СтруктураДанныхСтроки.Вставить("Товар", Товар);
СтруктураДанныхСтроки.Вставить("НомерСтроки", НомерСтрокиПечать);
ОбластьСтрокаТаблицы.Параметры.Заполнить(СтрокаТовары);
Если ЗаголовокСкидки.ЕстьСкидки Тогда
СтруктураДанныхСтроки.Вставить("СуммаСкидки",
?(ЗаголовокСкидки.ТолькоНаценка,- СтрокаТовары.СуммаСкидки,СтрокаТовары.СуммаСкидки));
КонецЕсли;

Если ЗначениеЗаполнено(СтруктураИмяДопКолонки.ИмяКолонкиКодов) Тогда
СтруктураДанныхСтроки.Вставить("Артикул", СтрокаТовары[СтруктураИмяДопКолонки.ИмяКолонкиКодов]);
КонецЕсли;

Если ДанныеПечати.ОперацияОблагаетсяНДСУПокупателя Тогда
СтруктураДанныхСтроки.Вставить("СтавкаНДС", НСтр("ru='НДС исчисляется налоговым агентом'", Метаданные.Языки.Русский.КодЯзыка));
КонецЕсли;

ОбластьСтрокаТаблицы.Параметры.Заполнить(СтруктураДанныхСтроки);

Если НаборыСервер.ВыводитьТолькоЗаголовок(СтрокаТовары, ИспользоватьНаборы) Тогда
ОбластьСтрокаТаблицы.Параметры.Заполнить(ПустыеДанные);
КонецЕсли;

МассивПроверкиВывода.Очистить();
МассивПроверкиВывода.Добавить(ОбластьСтрокаТаблицы);
Если НомерСтроки = ТаблицаТовары.Количество() Тогда
МассивПроверкиВывода.Добавить(ОбластьПодвалТаблицы);
МассивПроверкиВывода.Добавить(ОбластьПодвалНДС);
МассивПроверкиВывода.Добавить(ОбластьСуммаПрописью);
КонецЕсли;

Если ТабличныйДокумент.ПроверитьВывод(МассивПроверкиВывода) Тогда
Если (НомерСтроки = 1 И ВыводШапки = 0) ИЛИ (НомерСтроки = 0 И ВыводШапки = 1) Тогда
ВыводШапки = 2;
ТабличныйДокумент.Вывести(ОбластьШапкаТаблицы);
КонецЕсли;
Иначе
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
ТабличныйДокумент.Вывести(ОбластьШапкаТаблицы);
КонецЕсли;

ТабличныйДокумент.Вывести(ОбластьСтрокаТаблицы);

Если Не НаборыСервер.ИспользоватьОбластьКомплектующие(СтрокаТовары, ИспользоватьНаборы) Тогда

Сумма = Сумма + СтрокаТовары.Сумма;
СуммаНДС = СуммаНДС + СтрокаТовары.СуммаНДС;

Если ЕстьСкидки Тогда
ВсегоСкидок = ВсегоСкидок + СтрокаТовары.СуммаСкидки;
ВсегоБезСкидок = ВсегоБезСкидок + СтрокаТовары.СуммаБезСкидки;
КонецЕсли;

Если ДанныеПечати.УчитыватьНДС И НЕ ТолькоЗалогЗаТару Тогда
СуммаНДСПоСтавке = СоответствиеСтавокНДС[СтрокаТовары.СтавкаНДС];
Если СуммаНДСПоСтавке = Неопределено Тогда
СуммаНДСПоСтавке = 0;
КонецЕсли;
СоответствиеСтавокНДС.Вставить(СтрокаТовары.СтавкаНДС, СуммаНДСПоСтавке + СтрокаТовары.СуммаНДС);
КонецЕсли;

КонецЕсли;

КонецЦикла;

СтруктураДанныхВсегоСкидки = Новый Структура;

// Подвал таблицы "Товары"
Если ЕстьСкидки Тогда
СтруктураДанныхВсегоСкидки.Вставить("ВсегоСкидок", ?(ЗаголовокСкидки.ТолькоНаценка,-ВсегоСкидок, ВсегоСкидок));
СтруктураДанныхВсегоСкидки.Вставить("ВсегоБезСкидок", ВсегоБезСкидок);
Если ДанныеПечати.УчитыватьНДС И НЕ ТолькоЗалогЗаТару Тогда
СтруктураДанныхВсегоСкидки.Вставить("ВсегоСуммаНДС", СуммаНДС);
КонецЕсли;
КонецЕсли;
СтруктураДанныхВсегоСкидки.Вставить("Всего", ФормированиеПечатныхФорм.ФорматСумм(Сумма));
ОбластьПодвалТаблицы.Параметры.Заполнить(СтруктураДанныхВсегоСкидки);
ТабличныйДокумент.Вывести(ОбластьПодвалТаблицы);

// Область "ПодвалТаблицыНДС"
Если ДанныеПечати.УчитыватьНДС И НЕ ТолькоЗалогЗаТару И НЕ ДанныеПечати.ОперацияОблагаетсяНДСУПокупателя Тогда

Для Каждого ТекСтавкаНДС Из СоответствиеСтавокНДС Цикл
СтруктураДанныхПодвалНДС = Новый Структура;
СтруктураДанныхПодвалНДС.Вставить("НДС", ФормированиеПечатныхФорм.ТекстНДСПоСтавке(ТекСтавкаНДС.Ключ, ДанныеПечати.ЦенаВключаетНДС));
СтруктураДанныхПодвалНДС.Вставить("ВсегоНДС", ФормированиеПечатныхФорм.ФорматСумм(ТекСтавкаНДС.Значение, ,"-"));
ОбластьПодвалНДС.Параметры.Заполнить(СтруктураДанныхПодвалНДС);
ТабличныйДокумент.Вывести(ОбластьПодвалНДС);

КонецЦикла;
СтруктураДанныхПодвалВсегоСНДС = Новый Структура;
СтруктураДанныхПодвалНДС.Вставить("ВсегоСНДС", ФормированиеПечатныхФорм.ФорматСумм(Сумма + ?(ДанныеПечати.ЦенаВключаетНДС, 0, СуммаНДС)));
ОбластьПодвалСНДС.Параметры.Заполнить(СтруктураДанныхПодвалНДС);
ТабличныйДокумент.Вывести(ОбластьПодвалСНДС);

Иначе
СтруктураДанныхПодвалНДС = Новый Структура;
Если ДанныеПечати.ОперацияОблагаетсяНДСУПокупателя Тогда
СтруктураДанныхПодвалНДС.Вставить("НДС", НСтр("ru='НДС исчисляется налоговым агентом'"));
Иначе
СтруктураДанныхПодвалНДС.Вставить("НДС", НСтр("ru='Без налога (НДС)'"));
КонецЕсли;
СтруктураДанныхПодвалНДС.Вставить("ВсегоНДС", "-");
ОбластьПодвалНДС.Параметры.Заполнить(СтруктураДанныхПодвалНДС);
ТабличныйДокумент.Вывести(ОбластьПодвалНДС);
КонецЕсли;

// Вывести Сумму прописью
СуммаКПрописи = Сумма + ?(ДанныеПечати.ЦенаВключаетНДС, 0, СуммаНДС);
ИтоговаяСтрока = НСтр("ru='Всего наименований %Количество%, на сумму %Сумма%'");
ИтоговаяСтрока = СтрЗаменить(ИтоговаяСтрока, "%Количество%", НомерСтроки);
ИтоговаяСтрока = СтрЗаменить(ИтоговаяСтрока, "%Сумма%",      ФормированиеПечатныхФорм.ФорматСумм(СуммаКПрописи, ДанныеПечати.Валюта));

СтруктураДанныхСуммаПрописью = Новый Структура;
Если ДанныеПечати.СчетКВозврату Тогда

СуммаКВозврату = ДанныеПечати.СуммаКВозврату;
СуммаИтого = СуммаКПрописи-СуммаКВозврату;
Если СуммаИтого < 0 Тогда
СуммаИтого = 0;
КонецЕсли;
СтруктураДанныхСуммаПрописью.Вставить("СуммаВозврата", ФормированиеПечатныхФорм.ФорматСумм(СуммаКВозврату, ДанныеПечати.Валюта));
СтруктураДанныхСуммаПрописью.Вставить("СуммаИтогоКОплате", ФормированиеПечатныхФорм.ФорматСумм(СуммаИтого, ДанныеПечати.Валюта, "0"));
СтруктураДанныхСуммаПрописью.Вставить("СуммаПрописью", РаботаСКурсамиВалют.СформироватьСуммуПрописью(СуммаИтого, ДанныеПечати.Валюта));
Иначе

СтруктураДанныхСуммаПрописью.Вставить("СуммаПрописью", РаботаСКурсамиВалют.СформироватьСуммуПрописью(СуммаКПрописи, ДанныеПечати.Валюта));
КонецЕсли;

СтруктураДанныхСуммаПрописью.Вставить("ИтоговаяСтрока", ИтоговаяСтрока);
ОбластьСуммаПрописью.Параметры.Заполнить(СтруктураДанныхСуммаПрописью);
ТабличныйДокумент.Вывести(ОбластьСуммаПрописью);
КонецЕсли;
ЗаполнитьРеквизитыПодвалаСчетаНаОплату(ДанныеПечати, Макет, ТабличныйДокумент, ТаблицаЭтапыОплаты, СоответствиеСтавокНДС, ПараметрыПечати);

УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, ДанныеПечати.Ссылка);

КонецЦикла;

КонецПроцедуры

Функция ПечатьПредварительныйПросмотрСчетаНаОплату(Организация, ОбъектыПечати, ИмяМакета)

ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_СЧЕТНАОПЛАТУ";

Макет = УправлениеПечатью.МакетПечатнойФормы("Обработка.ПечатьСчетовНаОплату.ПФ_MXL_СчетНаОплату");
ОбластьМакета = Макет.ПолучитьОбласть("ЗаголовокСчета");
ФормированиеПечатныхФорм.ВывестиЛоготипВТабличныйДокумент(Макет, ОбластьМакета, "ЗаголовокСчета", Организация);

СсылкаНового = Документы.СчетНаОплатуКлиенту.ПолучитьСсылку(Новый УникальныйИдентификатор);
ШтрихкодированиеПечатныхФорм.ВывестиШтрихкодВТабличныйДокумент(ТабличныйДокумент, Макет, ОбластьМакета, СсылкаНового);

КолонкаКодов = ФормированиеПечатныхФорм.ИмяДополнительнойКолонки();
ВыводитьКоды = ЗначениеЗаполнено(КолонкаКодов);
СтруктураИмяДопКолонки = Новый Структура("ИмяКолонкиКодов", КолонкаКодов);
ВыводитьНДС = Константы.ВыводитьДопКолонкиНДС.Получить();
СуффиксОбласти = ?(ВыводитьНДС, "СНДС", "");

Смещать = ТипСмещенияТабличногоДокумента.ПоВертикали;
ОбластьПервойКолонкиТоваров = Макет.Область("ПерваяКолонкаТовара");
Если НЕ ВыводитьКоды Тогда
ОбластьПервойКолонкиТоваров.ШиринаКолонки = ОбластьПервойКолонкиТоваров.ШиринаКолонки + Макет.Область("КолонкаКодов").ШиринаКолонки;
Макет.УдалитьОбласть(Макет.Область("КолонкаКодов"), Смещать);
КонецЕсли;

СведенияОПоставщике = ФормированиеПечатныхФорм.СведенияОЮрФизЛице(Организация, ТекущаяДатаСеанса());
ДатаПлатежа = ТекущаяДатаСеанса();

СтруктураДанныхШапки = Новый Структура;
Если ЗначениеЗаполнено(ДатаПлатежа) Тогда
НадписьСрокДействия = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='Счет действителен до %1.'"), Формат(ДатаПлатежа, "ДЛФ=D")) + " ";
СтруктураДанныхШапки.Вставить("СрокДействия", НадписьСрокДействия);
КонецЕсли;

СтруктураДанныхШапки.Вставить("ИНН", СведенияОПоставщике.ИНН);
СтруктураДанныхШапки.Вставить("КПП",СведенияОПоставщике.КПП);
ПредставлениеПоставщикаДляПлатПоручения = "";

СтруктураПараметров = ДенежныеСредстваСервер.ПараметрыЗаполненияБанковскогоСчетаОрганизацииПоУмолчанию();
СтруктураПараметров.Организация = Организация;
БанковскийСчет = ЗначениеНастроекПовтИсп.ПолучитьБанковскийСчетОрганизацииПоУмолчанию(СтруктураПараметров);
Если ЗначениеЗаполнено(БанковскийСчет) Тогда

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| БанковскиеСчета.НомерСчета КАК НомерСчета,
| ВЫБОР
| КОГДА БанковскиеСчета.РучноеИзменениеРеквизитовБанка
| ТОГДА БанковскиеСчета.НаименованиеБанка
| ИНАЧЕ БанковскиеСчета.Банк.Наименование
| КОНЕЦ КАК НаименованиеБанка,
| ВЫБОР
| КОГДА БанковскиеСчета.РучноеИзменениеРеквизитовБанка
| ТОГДА БанковскиеСчета.БИКБанка
| ИНАЧЕ БанковскиеСчета.Банк.Код
| КОНЕЦ КАК БИКБанкаДляРасчетов,
| ВЫБОР
| КОГДА БанковскиеСчета.РучноеИзменениеРеквизитовБанка
| ТОГДА БанковскиеСчета.КоррСчетБанка
| ИНАЧЕ БанковскиеСчета.Банк.КоррСчет
| КОНЕЦ КАК КоррСчетБанка,
| ВЫБОР
| КОГДА БанковскиеСчета.РучноеИзменениеРеквизитовБанка
| ТОГДА БанковскиеСчета.ГородБанка
| ИНАЧЕ БанковскиеСчета.Банк.Город
| КОНЕЦ КАК ГородБанкаДляРасчетов,
| БанковскиеСчета.ТекстКорреспондента КАК ТекстКорреспондента
|ИЗ
| Справочник.БанковскиеСчетаОрганизаций КАК БанковскиеСчета
|ГДЕ
| БанковскиеСчета.БанкДляРасчетов = ЗНАЧЕНИЕ(Справочник.КлассификаторБанков.ПустаяСсылка)
| И БанковскиеСчета.Ссылка = &БанковскийСчет
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| БанковскиеСчета.Банк.КоррСчет,
| ВЫБОР
| КОГДА БанковскиеСчета.РучноеИзменениеРеквизитовБанкаДляРасчетов
| ТОГДА БанковскиеСчета.НаименованиеБанкаДляРасчетов
| ИНАЧЕ БанковскиеСчета.БанкДляРасчетов.Наименование
| КОНЕЦ,
| ВЫБОР
| КОГДА БанковскиеСчета.РучноеИзменениеРеквизитовБанкаДляРасчетов
| ТОГДА БанковскиеСчета.БИКБанкаДляРасчетов
| ИНАЧЕ БанковскиеСчета.БанкДляРасчетов.Код
| КОНЕЦ,
| ВЫБОР
| КОГДА БанковскиеСчета.РучноеИзменениеРеквизитовБанкаДляРасчетов
| ТОГДА БанковскиеСчета.КоррСчетБанкаДляРасчетов
| ИНАЧЕ БанковскиеСчета.БанкДляРасчетов.КоррСчет
| КОНЕЦ,
| ВЫБОР
| КОГДА БанковскиеСчета.РучноеИзменениеРеквизитовБанкаДляРасчетов
| ТОГДА БанковскиеСчета.ГородБанкаДляРасчетов
| ИНАЧЕ БанковскиеСчета.БанкДляРасчетов.Город
| КОНЕЦ,
| БанковскиеСчета.ТекстКорреспондента
|ИЗ
| Справочник.БанковскиеСчетаОрганизаций КАК БанковскиеСчета
|ГДЕ
| БанковскиеСчета.БанкДляРасчетов <> ЗНАЧЕНИЕ(Справочник.КлассификаторБанков.ПустаяСсылка)
| И БанковскиеСчета.Ссылка = &БанковскийСчет";

Запрос.УстановитьПараметр("БанковскийСчет", БанковскийСчет);
РеквизитыСчета = Запрос.Выполнить().Выбрать();

Если РеквизитыСчета.Следующий() Тогда
СтруктураДанныхШапки.Вставить("БИКБанкаПолучателя", РеквизитыСчета.БИКБанкаДляРасчетов);
СтруктураДанныхШапки.Вставить("БанкПолучателя", РеквизитыСчета.НаименованиеБанка);
СтруктураДанныхШапки.Вставить("БанкПолучателяПредставление", СокрЛП(РеквизитыСчета.НаименованиеБанка) + " " + РеквизитыСчета.ГородБанкаДляРасчетов);
СтруктураДанныхШапки.Вставить("СчетБанкаПолучателя", РеквизитыСчета.КоррСчетБанка);
СтруктураДанныхШапки.Вставить("СчетБанкаПолучателяПредставление", РеквизитыСчета.КоррСчетБанка);
СтруктураДанныхШапки.Вставить("СчетПолучателяПредставление", РеквизитыСчета.НомерСчета);
СтруктураДанныхШапки.Вставить("СчетПолучателя", РеквизитыСчета.НомерСчета);
ПредставлениеПоставщикаДляПлатПоручения = РеквизитыСчета.ТекстКорреспондента;
КонецЕсли;
КонецЕсли;

Если ПустаяСтрока(ПредставлениеПоставщикаДляПлатПоручения) Тогда
ПредставлениеПоставщикаДляПлатПоручения = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОПоставщике, "ПолноеНаименование,");
КонецЕсли;

СтруктураДанныхШапки.Вставить("ПредставлениеПоставщикаДляПлатПоручения", ПредставлениеПоставщикаДляПлатПоручения);
СтруктураДанныхШапки.Вставить("НазначениеПлатежа", НСтр("ru='Предварительный просмотр печати счета на оплату.'"));

ОбластьМакета.Параметры.Заполнить(СтруктураДанныхШапки);
ТабличныйДокумент.Вывести(ОбластьМакета);

ОбластьМакета = Макет.ПолучитьОбласть("Заголовок");

ДанныеЗаголовка = Новый Структура;
ДанныеЗаголовка.Вставить("Номер", "00000000001");
ДанныеЗаголовка.Вставить("Дата", ДатаПлатежа);
ДанныеЗаголовка.Вставить("Представление", НСтр("ru = 'Счет на оплату'"));

ТекстЗаголовка = ОбщегоНазначенияУТКлиентСервер.СформироватьЗаголовокДокумента(ДанныеЗаголовка, НСтр("ru='Счет на оплату'"));
СтруктураДанныхШапки = Новый Структура;
СтруктураДанныхШапки.Вставить("ТекстЗаголовка", ТекстЗаголовка);
ОбластьМакета.Параметры.Заполнить(СтруктураДанныхШапки);
ТабличныйДокумент.Вывести(ОбластьМакета);

ОбластьМакета = Макет.ПолучитьОбласть("Поставщик");

СтруктураДанныхПоставщик = Новый Структура;
СтруктураДанныхПоставщик.Вставить("ПредставлениеПоставщика",
ФормированиеПечатныхФорм.ОписаниеОрганизации(ФормированиеПечатныхФорм.СведенияОЮрФизЛице(Организация, ДатаПлатежа),
"ПолноеНаименование,ИНН,КПП,ЮридическийАдрес,Телефоны,"));
ОбластьМакета.Параметры.Заполнить(СтруктураДанныхПоставщик);
ТабличныйДокумент.Вывести(ОбластьМакета);

ОбластьМакета = Макет.ПолучитьОбласть("Покупатель");
СтруктураДанныхПокупатель = Новый Структура;
СтруктураДанныхПокупатель.Вставить("ПредставлениеПолучателя",
НСтр("ru = 'Поле содержит информацию покупателя: полное наименование, ИНН, КПП, юридический адрес, телефоны.'"));
ОбластьМакета.Параметры.Заполнить(СтруктураДанныхПокупатель);
ТабличныйДокумент.Вывести(ОбластьМакета);

ОбластьМакета = Макет.ПолучитьОбласть("ШапкаТаблицы" + СуффиксОбласти);
ОбластьМакета.Параметры.Заполнить(СтруктураИмяДопКолонки);
ТабличныйДокумент.Вывести(ОбластьМакета);

ОбластьМакета = Макет.ПолучитьОбласть("СтрокаТаблицы" + СуффиксОбласти);
Товары = Новый Структура;
Товары.Вставить("НомерСтроки",      1);
Товары.Вставить("Артикул",          "АРТ-000001");
Товары.Вставить("Код",              "000001");
Товары.Вставить("Товар",            НСтр("ru='Товар (предварительный просмотр)'"));
Товары.Вставить("Количество",       1);
Товары.Вставить("ЕдиницаИзмерения", НСтр("ru='шт'"));
Товары.Вставить("Цена",             118.00);
Товары.Вставить("СтавкаНДС",        "18%");
Товары.Вставить("СуммаНДС",         18.00);
Товары.Вставить("Сумма",            118.00);

ОбластьМакета.Параметры.Заполнить(Товары);
ТабличныйДокумент.Вывести(ОбластьМакета);

ОбластьМакета = Макет.ПолучитьОбласть("ПодвалТаблицыЧастичнаяОплата");
ОбластьМакета.Параметры.Заполнить(Новый Структура("Всего", Товары.Сумма));
ТабличныйДокумент.Вывести(ОбластьМакета);

ОбластьМакета = Макет.ПолучитьОбласть("ПодвалТаблицыНДС");
ОбластьМакета.Параметры.Заполнить(Новый Структура("НДС, ВсегоНДС", НСтр("ru = 'В т.ч. НДС (18%)'"), Товары.СуммаНДС));
ТабличныйДокумент.Вывести(ОбластьМакета);

ОбластьМакета = Макет.ПолучитьОбласть("ПодвалТаблицыВсего");
ОбластьМакета.Параметры.Заполнить(Новый Структура("ВсегоСНДС", Товары.Сумма));
ТабличныйДокумент.Вывести(ОбластьМакета);

ОбластьМакета = Макет.ПолучитьОбласть("СуммаПрописью");
Валюта = Константы.ВалютаРегламентированногоУчета.Получить();

СуммаКПрописи = 118;
ИтоговаяСтрока = НСтр("ru='Всего наименований %Количество%, на сумму %Сумма%'");
ИтоговаяСтрока = СтрЗаменить(ИтоговаяСтрока, "%Количество%", Товары.Количество);
ИтоговаяСтрока = СтрЗаменить(ИтоговаяСтрока, "%Сумма%",      ФормированиеПечатныхФорм.ФорматСумм(СуммаКПрописи, Валюта));

СуммаПрописью = РаботаСКурсамиВалют.СформироватьСуммуПрописью(Товары.Сумма, Валюта);

СтруктураДанныхСуммаПрописью = Новый Структура("СуммаПрописью, ИтоговаяСтрока", СуммаПрописью, ИтоговаяСтрока);
ОбластьМакета.Параметры.Заполнить(СтруктураДанныхСуммаПрописью);
ТабличныйДокумент.Вывести(ОбластьМакета);

ОбластьМакета = Макет.ПолучитьОбласть("ПодвалСчета");
ФормированиеПечатныхФорм.ВывестиФаксимилеВТабличныйДокумент(Макет, ОбластьМакета, Организация, Новый Структура("ОтображатьФаксимиле", Истина));

// Вывести подписи
ОтветственныеЛица = ОтветственныеЛицаСервер.ПолучитьОтветственныеЛицаОрганизации(Организация);
СтруктураДанныхПодвал = Новый Структура;
СтруктураДанныхПодвал.Вставить("ФИОРуководителя", ФизическиеЛицаУТ.ФамилияИнициалыФизЛица(ОтветственныеЛица.Руководитель));
СтруктураДанныхПодвал.Вставить("ФИОБухгалтера", ФизическиеЛицаУТ.ФамилияИнициалыФизЛица(ОтветственныеЛица.ГлавныйБухгалтер));
ОбластьМакета.Параметры.Заполнить(СтруктураДанныхПодвал);

ТабличныйДокумент.Вывести(ОбластьМакета);

Возврат ТабличныйДокумент;

КонецФункции

#КонецОбласти

#Область Прочее

Процедура ПроверкаЗаполненияДокумента(ДанныеПечати, ТаблицаТовары, ТаблицаЭтапыОплаты, ШаблоныОшибок, Отказ);

Если НЕ (ТипЗнч(ДанныеПечати.Ссылка) = Тип("ДокументСсылка.СчетНаОплатуКлиенту")
И ТипЗнч(ДанныеПечати.ДокументОснование) = Тип("СправочникСсылка.ДоговорыКонтрагентов"))
И ТаблицаТовары <> Неопределено И ТаблицаТовары.Количество() = 0 Тогда
Если ТипЗнч(ДанныеПечати.Ссылка) = Тип("ДокументСсылка.ЗаявкаНаВозвратТоваровОтКлиента") Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблоныОшибок.ЗаменяющиеТовары, ДанныеПечати.Ссылка), ДанныеПечати.Ссылка);
Иначе
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблоныОшибок.Товары, ДанныеПечати.Ссылка), ДанныеПечати.Ссылка);
КонецЕсли;
Отказ = Истина;
Возврат;
КонецЕсли;
Если ТаблицаЭтапыОплаты <> Неопределено И ТаблицаЭтапыОплаты.Количество() = 0 Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблоныОшибок.Этапы, ДанныеПечати.Ссылка), ДанныеПечати.Ссылка);
Отказ = Истина;
КонецЕсли;

КонецПроцедуры

Функция СуммаКОплатеПоСчету(ДанныеПечати, ТаблицаТовары)

Если ТипЗнч(ДанныеПечати.Ссылка) = Тип("ДокументСсылка.АвансовыйОтчет")
ИЛИ ТипЗнч(ДанныеПечати.ДокументОснование) = Тип("ДокументСсылка.ОтчетКомитенту")
ИЛИ ДанныеПечати.ЧастичнаяОплата Тогда

СуммаКОплатеПоСчету = ДанныеПечати.СуммаДокумента;

Иначе

СуммаКОплатеПоСчету = 0;

ИспользоватьНаборы = Ложь;
Если ТаблицаТовары.Количество()>0 И ОбщегоНазначенияУТКлиентСервер.ЕстьРеквизитОбъекта(ТаблицаТовары[0], "ЭтоНабор") Тогда
ИспользоватьНаборы = Истина;
КонецЕсли;

Для Каждого СтрокаТовары Из ТаблицаТовары Цикл
Если Не НаборыСервер.ИспользоватьОбластьКомплектующие(СтрокаТовары, ИспользоватьНаборы) Тогда
СуммаКОплатеПоСчету = СуммаКОплатеПоСчету
+ СтрокаТовары.Сумма + ?(ДанныеПечати.ЦенаВключаетНДС, 0, СтрокаТовары.СуммаНДС);
КонецЕсли;
КонецЦикла;

Если ДанныеПечати.СчетКВозврату Тогда
СуммаКОплатеПоСчету = СуммаКОплатеПоСчету - ДанныеПечати.СуммаКВозврату;
Если СуммаКОплатеПоСчету < 0 Тогда
СуммаКОплатеПоСчету = 0;
КонецЕсли;
КонецЕсли;

КонецЕсли;

Возврат СуммаКОплатеПоСчету;

КонецФункции

Функция НовыеПараметрыСтрокиЭтапа()

СтруктураСтрокиЭтапа = Новый Структура;
СтруктураСтрокиЭтапа.Вставить("НомерСтроки", 0);
СтруктураСтрокиЭтапа.Вставить("ДатаПлатежа", '00010101');
СтруктураСтрокиЭтапа.Вставить("ПроцентПлатежа", 0);
СтруктураСтрокиЭтапа.Вставить("СуммаПлатежа", 0);
СтруктураСтрокиЭтапа.Вставить("ТекстНДС", "");
СтруктураСтрокиЭтапа.Вставить("ЭтоЗалогЗаТару", Ложь);

Возврат СтруктураСтрокиЭтапа;

КонецФункции

Процедура ВывестиQRКод(РеквизитыПлатежа, ДанныеПечати, ОбластьМакета)

QRСтрока = УправлениеПечатьюРФ.ФорматнаяСтрокаУФЭБС(РеквизитыПлатежа);

Если Не ПустаяСтрока(QRСтрока) Тогда

ДанныеQRКода = УправлениеПечатью.ДанныеQRКода(QRСтрока, 0, 190);

Если ТипЗнч(ДанныеQRКода) = Тип("ДвоичныеДанные") Тогда
КартинкаQRКода = Новый Картинка(ДанныеQRКода);
ОбластьМакета.Рисунки.QRКод.Картинка = КартинкаQRКода;
Иначе
Шаблон = Нстр("ru = 'Не удалось сформировать QR-код для документа %1.
|Технические подробности см. в журнале регистрации.'");
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, ДанныеПечати.Ссылка);
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения);
КонецЕсли;

КонецЕсли;

КонецПроцедуры

Функция ОписаниеОрганизации(ДанныеПечати, ИмяОрганизации)

Сведения = ФормированиеПечатныхФорм.СведенияОЮрФизЛице(ДанныеПечати[ИмяОрганизации], ДанныеПечати.Дата);
РеквизитыОрганизации = "ПолноеНаименование,ИНН,КПП,ФактическийАдрес,Телефоны,";

Возврат ФормированиеПечатныхФорм.ОписаниеОрганизации(Сведения, РеквизитыОрганизации);

КонецФункции

Функция РеквизитыПлатежаQRКод(СтруктураДанныхШапки)

РеквизитыПлатежа = Новый Структура;
РеквизитыПлатежа.Вставить("ТекстПолучателя", СтруктураДанныхШапки.ПредставлениеПоставщикаДляПлатПоручения);
РеквизитыПлатежа.Вставить("НомерСчетаПолучателя", СтруктураДанныхШапки.СчетПолучателяПредставление);
РеквизитыПлатежа.Вставить("НаименованиеБанкаПолучателя", СтруктураДанныхШапки.БанкПолучателяПредставление);
РеквизитыПлатежа.Вставить("БИКБанкаПолучателя", СтруктураДанныхШапки.БИКБанкаПолучателя);
РеквизитыПлатежа.Вставить("СчетБанкаПолучателя", СтруктураДанныхШапки.СчетБанкаПолучателяПредставление);
РеквизитыПлатежа.Вставить("СуммаЧислом");
РеквизитыПлатежа.Вставить("НазначениеПлатежа", СтруктураДанныхШапки.НазначениеПлатежа);
РеквизитыПлатежа.Вставить("ИННПолучателя", СтруктураДанныхШапки.ИНН);
РеквизитыПлатежа.Вставить("КПППолучателя", СтруктураДанныхШапки.КПП);
РеквизитыПлатежа.Вставить("Ссылка");

Возврат РеквизитыПлатежа

КонецФункции

#КонецОбласти

#КонецОбласти

#КонецЕсли
2023-11-22_12-46-36.png2023-11-22_12-46-36.png 

Похожие темы (5)

Рейтинг@Mail.ru

Поиск