Загрузка данных
Функция СформироватьПечатнуюФормуАктОбОказанииУслуг(МассивОбъектов, ОбъектыПечати, ПараметрыПечати = Неопределено)
УстановитьПривилегированныйРежим(Истина);
ПоказыватьНДС = Константы.ВыводитьДопКолонкиНДС.Получить();
ИспользоватьРучныеСкидки = ПолучитьФункциональнуюОпцию("ИспользоватьРучныеСкидкиВПродажах");
ИспользоватьАвтоматическиеСкидки = ПолучитьФункциональнуюОпцию("ИспользоватьАвтоматическиеСкидкиВПродажах");
ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_АктВыполненныхРабот_Акт";
СтруктураРезультатов = ПолучитьДанныеДляПечати(МассивОбъектов, ПараметрыПечати);
ДанныеПечати = СтруктураРезультатов.РезультатПоШапке.Выбрать();
ВыборкаПоДокументам = СтруктураРезультатов.РезультатПоТабличнойЧасти.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
ПервыйДокумент = Истина;
Пока ДанныеПечати.Следующий() Цикл
// Найдем в выборке услуги по текущему документу
СтруктураПоиска = Новый Структура("Ссылка", ДанныеПечати.Ссылка);
НайденСледующий = ВыборкаПоДокументам.НайтиСледующий(СтруктураПоиска);
// Если в документе пустая табличная часть услуги - перейдем к следующему документу
Если НайденСледующий Тогда
ВыборкаПоУслугам = ВыборкаПоДокументам.Выбрать();
ЗаголовокСкидки = ФормированиеПечатныхФорм.НужноВыводитьСкидки(ВыборкаПоУслугам, ИспользоватьРучныеСкидки Или ИспользоватьАвтоматическиеСкидки);
ЕстьСкидки = ЗаголовокСкидки.ЕстьСкидки;
ЕстьНДС = ДанныеПечати.УчитыватьНДС;
ВыборкаПоУслугам.Сбросить();
Иначе
Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'В документе %1 отсутствуют услуги. Печать акта выполненных работ (услуг) не требуется.';
|en = 'Services are missing in document %1. Printing of ""Customer invoice — Services"" is not required.'"),
ДанныеПечати.Ссылка);
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
Текст,
ДанныеПечати.Ссылка);
Продолжить;
КонецЕсли;
Если Не ПервыйДокумент Тогда
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
ПервыйДокумент = Ложь;
НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;
Макет = УправлениеПечатью.МакетПечатнойФормы("Документ.АктВыполненныхРабот.ПФ_MXL_Акт");
// Выводим шапку акта
ОбластьМакета = Макет.ПолучитьОбласть("Заголовок");
СтруктураДанныхШапки = Новый Структура;
СтруктураДанныхШапки.Вставить("ТекстЗаголовка", ОбщегоНазначенияУТКлиентСервер.СформироватьЗаголовокДокумента(ДанныеПечати, НСтр("ru = 'Акт';
|en = 'Customer invoice — Services'", ОбщегоНазначения.КодОсновногоЯзыка())));
ОбластьМакета.Параметры.Заполнить(СтруктураДанныхШапки);
ШтрихкодированиеПечатныхФорм.ВывестиШтрихкодВТабличныйДокумент(ТабличныйДокумент, Макет, ОбластьМакета, ДанныеПечати.Ссылка);
ТабличныйДокумент.Вывести(ОбластьМакета);
Если НЕ ДанныеПечати.ДополнительнаяИнформацияШапки="" Тогда
ОбластьМакета = Макет.ПолучитьОбласть("ДополнительнаяИнформацияШапки");
ОбластьМакета.Параметры.Заполнить(ДанныеПечати);
ТабличныйДокумент.Вывести(ОбластьМакета);
КонецЕсли;
ОбластьМакета = Макет.ПолучитьОбласть("ТекстШапки");
ТабличныйДокумент.Вывести(ОбластьМакета);
// Выводим заголовок таблицы Услуги
Если ЕстьСкидки Тогда
Если ЕстьНДС И ПоказыватьНДС Тогда
ИмяОбластиШапка = "ШапкаТаблицыСоСкидкойСНДС";
ИмяОбластиСтрока = "СтрокаСоСкидкойСНДС";
ИмяОбластиСтрокаНабор = "СтрокаСоСкидкойСНДСНабор";
ИмяОбластиСтрокаКомплектующие = "СтрокаСоСкидкойСНДСКомплектующие";
Иначе
ИмяОбластиШапка = "ШапкаТаблицыСоСкидкой";
ИмяОбластиСтрока = "СтрокаСоСкидкой";
ИмяОбластиСтрокаНабор = "СтрокаСоСкидкойНабор";
ИмяОбластиСтрокаКомплектующие = "СтрокаСоСкидкойКомплектующие";
КонецЕсли;
Иначе
Если ЕстьНДС И ПоказыватьНДС Тогда
ИмяОбластиШапка = "ШапкаТаблицыСНДС";
ИмяОбластиСтрока = "СтрокаСНДС";
ИмяОбластиСтрокаНабор = "СтрокаСНДСНабор";
ИмяОбластиСтрокаКомплектующие = "СтрокаСНДСКомплектующие";
Иначе
ИмяОбластиШапка = "ШапкаТаблицы";
ИмяОбластиСтрока = "Строка";
ИмяОбластиСтрокаНабор = "СтрокаНабор";
ИмяОбластиСтрокаКомплектующие = "СтрокаКомплектующие";
КонецЕсли;
КонецЕсли;
ОбластьМакета = Макет.ПолучитьОбласть(ИмяОбластиШапка);
ОбластьСтрокиСтандарт = Макет.ПолучитьОбласть(ИмяОбластиСтрока);
ИспользоватьНаборы = Ложь;
Если ОбщегоНазначенияУТКлиентСервер.ЕстьРеквизитОбъекта(ВыборкаПоДокументам, "ЭтоНабор") Тогда
ИспользоватьНаборы = Истина;
ОбластьСтрокиНабор = Макет.ПолучитьОбласть(ИмяОбластиСтрокаНабор);
ОбластьСтрокиКомплектующие = Макет.ПолучитьОбласть(ИмяОбластиСтрокаКомплектующие);
КонецЕсли;
ПустыеДанные = НаборыСервер.ПустыеДанные();
Если ЕстьСкидки Тогда
СтруктураЗаголовокСкидки = Новый Структура("Скидка, СуммаБезСкидки",
ЗаголовокСкидки.Скидка,
ЗаголовокСкидки.СуммаСкидки);
ОбластьМакета.Параметры.Заполнить(СтруктураЗаголовокСкидки);
КонецЕсли;
ТабличныйДокумент.Вывести(ОбластьМакета);
Сумма = 0;
СуммаНДС = 0;
НомерСтроки = 0;
// Выводим строки таблицы Услуги
Пока ВыборкаПоУслугам.Следующий() Цикл
Если НаборыСервер.ИспользоватьОбластьНабор(ВыборкаПоУслугам, ИспользоватьНаборы) Тогда
ОбластьСтроки = ОбластьСтрокиНабор;
ИначеЕсли НаборыСервер.ИспользоватьОбластьКомплектующие(ВыборкаПоУслугам, ИспользоватьНаборы) Тогда
ОбластьСтроки = ОбластьСтрокиКомплектующие;
Иначе
ОбластьСтроки = ОбластьСтрокиСтандарт;
КонецЕсли;
НомерСтрокиПечать = "";
Если НаборыСервер.ВыводитьТолькоЗаголовок(ВыборкаПоУслугам, ИспользоватьНаборы) Тогда
Иначе
НомерСтроки = НомерСтроки + 1;
НомерСтрокиПечать = НомерСтроки;
КонецЕсли;
Если НаборыСервер.ВыводитьТолькоЗаголовок(ВыборкаПоУслугам, ИспользоватьНаборы) Тогда
ОбластьСтроки.Параметры.Заполнить(ПустыеДанные);
Иначе
ОбластьСтроки.Параметры.Заполнить(ВыборкаПоУслугам);
КонецЕсли;
ПрефиксИПостфикс = НаборыСервер.ПолучитьПрефиксИПостфикс(ВыборкаПоУслугам, ИспользоватьНаборы);
СтруктураДанныхСтроки = Новый Структура;
СтруктураДанныхСтроки.Вставить("НомерСтроки", НомерСтрокиПечать);
СтруктураДанныхСтроки.Вставить("Товар", ПрефиксИПостфикс.Префикс + ВыборкаПоУслугам.УслугаНаименованиеПолное + ПрефиксИПостфикс.Постфикс );
Если ЕстьСкидки Тогда
СтруктураДанныхСтроки.Вставить("Скидка", ?(ЗаголовокСкидки.ТолькоНаценка,- ВыборкаПоУслугам.СуммаСкидки,ВыборкаПоУслугам.СуммаСкидки));
СтруктураДанныхСтроки.Вставить("СуммаБезСкидки", ФормированиеПечатныхФорм.ФорматСумм(ВыборкаПоУслугам.Сумма + ВыборкаПоУслугам.СуммаСкидки));
КонецЕсли;
Если Не НаборыСервер.ИспользоватьОбластьКомплектующие(ВыборкаПоУслугам, ИспользоватьНаборы) Тогда
Сумма = Сумма + ВыборкаПоУслугам.Сумма;
СуммаНДС = СуммаНДС + ВыборкаПоУслугам.СуммаНДС;
КонецЕсли;
ОбластьСтроки.Параметры.Заполнить(СтруктураДанныхСтроки);
Если НаборыСервер.ВыводитьТолькоЗаголовок(ВыборкаПоУслугам, ИспользоватьНаборы) Тогда
ОбластьСтроки.Параметры.Заполнить(ПустыеДанные);
КонецЕсли;
ТабличныйДокумент.Вывести(ОбластьСтроки);
КонецЦикла;
ОбластьМакета = Макет.ПолучитьОбласть("Итого");
СтруктураДанныхИтого = Новый Структура("Всего",ФормированиеПечатныхФорм.ФорматСумм(Сумма));
ОбластьМакета.Параметры.Заполнить(СтруктураДанныхИтого);
ТабличныйДокумент.Вывести(ОбластьМакета);
Если ПолучитьФункциональнуюОпцию("ИспользоватьУчетНДС") Тогда
ОбластьМакета = Макет.ПолучитьОбласть("ИтогоНДС");
СтруктураДанныхИтогоНДС = Новый Структура;
СтруктураДанныхИтогоНДС.Вставить("ВсегоНДС", СуммаНДС);
Если ЕстьНДС Тогда
СтруктураДанныхИтогоНДС.Вставить("НДС", ?(ДанныеПечати.ЦенаВключаетНДС,
НСтр("ru = 'В том числе НДС:';
|en = 'including VAT:'", ОбщегоНазначения.КодОсновногоЯзыка()),
НСтр("ru = 'Сумма НДС:';
|en = 'VAT amount:'", ОбщегоНазначения.КодОсновногоЯзыка())));
Иначе
СтруктураДанныхИтогоНДС.Вставить("НДС", НСтр("ru = 'Без налога (НДС)';
|en = 'Without tax (VAT)'", ОбщегоНазначения.КодОсновногоЯзыка()));
КонецЕсли;
ОбластьМакета.Параметры.Заполнить(СтруктураДанныхИтогоНДС);
ТабличныйДокумент.Вывести(ОбластьМакета);
КонецЕсли;
СуммаКПрописи = Сумма + ?(ДанныеПечати.ЦенаВключаетНДС, 0, СуммаНДС);
ОбластьМакета = Макет.ПолучитьОбласть("СуммаПрописью");
СтруктураДанныхСуммаПрописью = Новый Структура;
ИтоговаяСтрока = НСтр("ru = 'Всего выполнено работ (оказано услуг) %КоличествоНаименований%, на сумму %СуммаДокумента%';
|en = 'Total work performed (services rendered) %КоличествоНаименований%, in the amount of %СуммаДокумента%'", ОбщегоНазначения.КодОсновногоЯзыка());
ИтоговаяСтрока = СтрЗаменить(ИтоговаяСтрока, "%КоличествоНаименований%", НомерСтроки);
ИтоговаяСтрока = СтрЗаменить(ИтоговаяСтрока, "%СуммаДокумента%", ФормированиеПечатныхФорм.ФорматСумм(СуммаКПрописи, ДанныеПечати.Валюта));
СтруктураДанныхСуммаПрописью.Вставить("ИтоговаяСтрока", ИтоговаяСтрока);
СтруктураДанныхСуммаПрописью.Вставить("СуммаПрописью", РаботаСКурсамиВалютУТ.СформироватьСуммуПрописью(СуммаКПрописи, ДанныеПечати.Валюта));
ОбластьМакета.Параметры.Заполнить(СтруктураДанныхСуммаПрописью);
ТабличныйДокумент.Вывести(ОбластьМакета);
Если НЕ ДанныеПечати.ДополнительнаяИнформация="" Тогда
ОбластьМакета = Макет.ПолучитьОбласть("ДополнительнаяИнформация");
ОбластьМакета.Параметры.Заполнить(ДанныеПечати);
ТабличныйДокумент.Вывести(ОбластьМакета);
КонецЕсли;
СведенияОИсполнителе = ФормированиеПечатныхФорм.СведенияОЮрФизЛице(
ДанныеПечати.Организация,
ДанныеПечати.Дата,
,
ДанныеПечати.СчетОрганизации,
Истина);
СведенияОЗаказчике = ФормированиеПечатныхФорм.СведенияОЮрФизЛице(
ДанныеПечати.Контрагент,
ДанныеПечати.Дата,
,
ДанныеПечати.СчетКонтрагента);
ОбластьМакета = Макет.ПолучитьОбласть("Подписи");
СтруктураДанныхПодписи = Новый Структура;
СтруктураДанныхПодписи.Вставить("ПредставлениеИсполнителя", СведенияОИсполнителе.ОфициальноеНаименование);
СтруктураДанныхПодписи.Вставить("ПредставлениеЗаказчика", СведенияОЗаказчике.ОфициальноеНаименование);
СтруктураДанныхПодписи.Вставить("ЮрАдресИсполнителя", СведенияОИсполнителе.ЮридическийАдрес);
СтруктураДанныхПодписи.Вставить("ЮрАдресЗаказчика", СведенияОЗаказчике.ЮридическийАдрес);
СтруктураДанныхПодписи.Вставить("РасчетныйСчетИсполнителя", СведенияОИсполнителе.НомерСчета);
СтруктураДанныхПодписи.Вставить("РасчетныйСчетЗаказчика", СведенияОЗаказчике.НомерСчета);
СтруктураДанныхПодписи.Вставить("КорСчетИсполнителя", СведенияОИсполнителе.КоррСчет);
СтруктураДанныхПодписи.Вставить("КорСчетЗаказчика", СведенияОЗаказчике.КоррСчет);
СтруктураДанныхПодписи.Вставить("БанкИсполнителя", СведенияОИсполнителе.Банк);
СтруктураДанныхПодписи.Вставить("БанкЗаказчика", СведенияОЗаказчике.Банк);
СтруктураДанныхПодписи.Вставить("БИКИсполнителя", СведенияОИсполнителе.БИК);
СтруктураДанныхПодписи.Вставить("БИКЗаказчика", СведенияОЗаказчике.БИК);
ИННКППЗаказчика = "";
Если СведенияОЗаказчике.Свойство("КПП") И ЗначениеЗаполнено(СведенияОЗаказчике.КПП) Тогда
ИННКППЗаказчика = НСтр("ru = 'ИНН/КПП:';
|en = 'TIN/KPP:'", ОбщегоНазначения.КодОсновногоЯзыка()) + " " + СведенияОЗаказчике.ИНН + "/" + СведенияОЗаказчике.КПП;
Иначе
ИННКППЗаказчика = НСтр("ru = 'ИНН:';
|en = 'TIN:'", ОбщегоНазначения.КодОсновногоЯзыка()) + " " + СведенияОЗаказчике.ИНН;
КонецЕсли;
СтруктураДанныхПодписи.Вставить("ИННКППЗаказчика", ИННКППЗаказчика);
ИННКППИсполнителя = "";
Если СведенияОИсполнителе.Свойство("КПП") И ЗначениеЗаполнено(СведенияОИсполнителе.КПП) Тогда
ИННКППИсполнителя = НСтр("ru = 'ИНН/КПП:';
|en = 'TIN/KPP:'", ОбщегоНазначения.КодОсновногоЯзыка()) + " " + СведенияОИсполнителе.ИНН + "/" + СведенияОИсполнителе.КПП;
Иначе
ИННКППИсполнителя = НСтр("ru = 'ИНН:';
|en = 'TIN:'", ОбщегоНазначения.КодОсновногоЯзыка()) + " " + СведенияОИсполнителе.ИНН;
КонецЕсли;
СтруктураДанныхПодписи.Вставить("ИННКППИсполнителя", ИННКППИсполнителя);
ОбластьМакета.Параметры.Заполнить(СтруктураДанныхПодписи);
ТабличныйДокумент.Вывести(ОбластьМакета);
УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, ДанныеПечати.Ссылка);
КонецЦикла;
ТабличныйДокумент.АвтоМасштаб = Истина;
Если ПривилегированныйРежим() Тогда
УстановитьПривилегированныйРежим(Ложь);
КонецЕсли;
Возврат ТабличныйДокумент;
КонецФункции