Имя: Пароль:
1C
 
Внешняя обработка печатная форма в 1с фреш
0 WerLym
 
16.02.26
14:47
Есть код внешней обработки, она просит все время разрешение на папке временных файлов, не могу найти где он это использует, за основу брал бсп унф, код в следующем сообщении
1 WerLym
 
16.02.26
14:48
СведенияОВнешнейОбработке
Функция СведенияОВнешнейОбработке() Экспорт
	
	ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("3.2.1.243");
	ПараметрыРегистрации.Информация = "СчетНаОплатуСпец";
	ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();
	ПараметрыРегистрации.Версия = "2.2";
	ПараметрыРегистрации.Наименование = "Счет на оплату (спец)";
	ПараметрыРегистрации.БезопасныйРежим = Истина;
	
	// Назначение для документа ЗаказПокупателя
	Назначение = ПараметрыРегистрации.Назначение;
	Назначение.Добавить("Документ.ЗаказПокупателя");
	
	КомандаПечати = ПараметрыРегистрации.Команды.Добавить();
	КомандаПечати.Представление = "Счет на оплату (спец)";
	КомандаПечати.Идентификатор = "ПечатьСчетНаОплатуСпец";
	КомандаПечати.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
	
	Возврат ПараметрыРегистрации;
	
КонецФункции

Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
	Перем Ошибки;

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


#Область ПрограммныйИнтерфейс

Функция СформироватьПФ(ОписаниеПечатнойФормы, ДанныеОбъектовПечати, ОбъектыПечати, ВывестиПланОплаты, ВыводитьОбластьФаксимиле = Ложь) Экспорт
	Перем Ошибки, ПервыйДокумент, НомерСтрокиНачало;
	
	ТабличныйДокумент = ОписаниеПечатнойФормы.ТабличныйДокумент;
	ДанныеПечати = Новый Структура;
	ЕстьТЧЗапасы = (ДанныеОбъектовПечати.Колонки.Найти("ТаблицаЗапасы") <> Неопределено);
	ЕстьТЧРаботыУслуги = (ДанныеОбъектовПечати.Колонки.Найти("ТаблицаРаботыУслуги") <> Неопределено);
	ЕстьТЧПланОплаты = (ДанныеОбъектовПечати.Колонки.Найти("ТаблицаПланаОплат") <> Неопределено);
	ЕстьТекстДополнительныхУсловий = ДанныеОбъектовПечати.Колонки.Найти("ТекстДополнительныхУсловий") <> Неопределено;
	ПредставлениеСкидки = Константы.ПредставлениеСкидкиВПечатнойФорме.Получить();
	ШаблонСообщенийВариантов = НСтр(
		"ru='Печатная форма ""%1"" (%2) не может быть сформирована: не выбран основной вариант.'");
	
	ОписаниеПечатнойФормы.ИмяФайлаПечатнойФормы = Новый Соответствие;
	
	ТекстСообщенияМакетИзменен = ПечатьДокументовУНФ.ТекстСообщенияМакетИзменен(НСтр("ru = 'Счет на оплату'"));
	
	Для каждого ДанныеОбъекта Из ДанныеОбъектовПечати Цикл
		
		Если ТипЗнч(ДанныеОбъекта.Ссылка) = Тип("ДокументСсылка.ЗаказПокупателя")
			И ДанныеОбъекта.ОжидаетсяВыборВариантаКП Тогда

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

		КонецЕсли;
		
		ПечатьДокументовУНФ.ПередНачаломФормированияДокумента(ТабличныйДокумент, ПервыйДокумент, НомерСтрокиНачало,
			ДанныеПечати);
		
		Макет = ПолучитьМакет("Расш1_ПФ_MXL_СчетНаОплатуСпец"); 
		ОбластиМакета = Новый Структура;
		ТаблицаОписанияОбластей= ШаблонТаблицыОписанияОбластейЛоготипа();
		
		Если Макет.Области.Найти("ОтступЗаголовка") <> Неопределено Тогда
			ОбластьОтступ = Макет.ПолучитьОбласть("ОтступЗаголовка");
			ТабличныйДокумент.Вывести(ОбластьОтступ);
		КонецЕсли;
		
		// :::Рекламный блок, шапка
		ПараметрыРекламногоБлока = Справочники.РекламныеБлокиПечатныхФорм.ПараметрыРекламныхБлоковПоДокументу(ДанныеОбъекта.Ссылка);
		Если ПараметрыРекламногоБлока.ВыводитьРекламуВШапке Тогда
			
			ОбластьРекламаШапка = ПечатьДокументовУНФ.ПолучитьОбластьБезопасно(Макет, "ОбластьРекламныйБлокШапка", "", Ошибки);
			
		КонецЕсли;
		
		СведенияОбОрганизации = ПечатьДокументовУНФ.СведенияОЮрФизЛице(ДанныеОбъекта.Организация,
			ДанныеОбъекта.ДатаДокумента, , ДанныеОбъекта.БанковскийСчет);
		СведенияОбКонтрагенте = ПечатьДокументовУНФ.СведенияОЮрФизЛице(ДанныеОбъекта.Контрагент,
			ДанныеОбъекта.ДатаДокумента, , );
		
		
		ЕстьQR = Ложь;
				
		ДобавитьОписаниеОбластиЛоготипа(ТаблицаОписанияОбластей, Макет, "ЗаглавиеСЛоготипом", Истина, Истина, 1);
		ДобавитьОписаниеОбластиЛоготипа(ТаблицаОписанияОбластей, Макет, "ЗаглавиеБезЛоготипа", Ложь, Истина, 2);
		Если Макет.Области.Найти("QRКод") <> Неопределено Тогда
			ДобавитьОписаниеОбластиЛоготипа(ТаблицаОписанияОбластей, Макет, "ЗаголовокСчетаСЛоготипом|Реквизиты", Истина, Ложь, 3);
			ДобавитьОписаниеОбластиЛоготипа(ТаблицаОписанияОбластей, Макет, "ЗаголовокСчета|Реквизиты", Ложь, Ложь, 4);
		Иначе
			ДобавитьОписаниеОбластиЛоготипа(ТаблицаОписанияОбластей, Макет, "ЗаголовокСчетаСЛоготипом", Истина, Ложь, 3);
			ДобавитьОписаниеОбластиЛоготипа(ТаблицаОписанияОбластей, Макет, "ЗаголовокСчета", Ложь, Ложь, 4);
			ОбщегоНазначения.СообщитьПользователю(ТекстСообщенияМакетИзменен);
		КонецЕсли;
		
		СтрокаСвойствОбластиМакета = ЗаполнитьОбластьЗаголовкаСчетовЗаказовИРазместитьЛоготип(ДанныеОбъекта,
			ТаблицаОписанияОбластей, Ошибки);
			
		Если СтрокаСвойствОбластиМакета <> Неопределено Тогда
			
			Если ЗначениеЗаполнено(СведенияОбОрганизации.Банк) Тогда

				ДанныеПечати.Вставить("БанкПолучателяПредставление", СведенияОбОрганизации.Банк.Наименование + " "
					+ СведенияОбОрганизации.Банк.Город);

			КонецЕсли;

			ДанныеПечати.Вставить("ИНН", СведенияОбОрганизации.ИНН);
			ДанныеПечати.Вставить("КПП", СведенияОбОрганизации.КПП);

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

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

		ПредставлениеДокументаДляСохранения = СокрЛП(СтрШаблон(НСтр("ru ='Счет на оплату № %1 от %2'"),
			НомерДокумента, Формат(ДанныеОбъекта.ДатаДокумента, "ДЛФ=DD")));
		ПредставлениеДокументаДляПечати = СокрЛП(СтрШаблон(НСтр("ru ='Счет на оплату № %1 от %2'"), НомерДокумента,
			Формат(ДанныеОбъекта.ДатаДокумента, "ДЛФ=DD")));

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

		ОбластьЗаголовок = ПечатьДокументовУНФ.ПолучитьОбластьБезопасно(Макет, "Заголовок", "", Ошибки);
		Если ОбластьЗаголовок <> Неопределено Тогда

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

		КонецЕсли;
		
		// :::Поставщик
		ОбластьПоставщик = ПечатьДокументовУНФ.ПолучитьОбластьБезопасно(Макет, "Поставщик", "", Ошибки);
		Если ОбластьПоставщик <> Неопределено Тогда
			
			ДанныеПечати.Вставить("ПредставлениеПоставщика", ПечатьДокументовУНФ.ОписаниеОрганизации(
				СведенияОбОрганизации, "НаименованиеДляПечати,ИНН,КПП,ЮридическийАдрес,Телефоны,"));
			ОбластьПоставщик.Параметры.Заполнить(ДанныеПечати);
			ТабличныйДокумент.Вывести(ОбластьПоставщик);
			
		КонецЕсли;
		
		// :::Покупатель
		Если ЗначениеЗаполнено(ДанныеОбъекта.ОснованиеПечати) Тогда
			ОбластьПокупатель = ПечатьДокументовУНФ.ПолучитьОбластьБезопасно(Макет, "Покупатель", "", Ошибки);
		Иначе
			ОбластьПокупатель = ПечатьДокументовУНФ.ПолучитьОбластьБезопасно(Макет, "ПокупательБезОснования", "", Неопределено);
			Если ОбластьПокупатель = Неопределено Тогда
				ОбластьПокупатель = ПечатьДокументовУНФ.ПолучитьОбластьБезопасно(Макет, "Покупатель", "", Ошибки);
			КонецЕсли;
		КонецЕсли;
		
		Если ОбластьПокупатель <> Неопределено Тогда
			
			ДанныеПечати.Вставить("ПредставлениеПолучателя", ПечатьДокументовУНФ.ОписаниеОрганизации(
				СведенияОбКонтрагенте, "ПолноеНаименование,ИНН,КПП,РегистрационныйНомер,ЮридическийАдрес,Телефоны,"));
			ДанныеПечати.Вставить("ОснованиеПечати", ДанныеОбъекта.ОснованиеПечати);
			
			ОбластьПокупатель.Параметры.Заполнить(ДанныеПечати);
			ТабличныйДокумент.Вывести(ОбластьПокупатель);
			
		КонецЕсли;
		
		// :::Шапка таблицы
		ОбластиМакета.Очистить();
		ОбластиМакета.Вставить("НомерСтраницы", ПечатьДокументовУНФ.ПолучитьОбластьБезопасно(Макет, "НомерСтраницы",
			НСтр("ru ='Номер страницы'"), Ошибки));
		
		СкидкаПоЗапасам = 0;
		Если ЕстьТЧЗапасы Тогда
			
			СкидкаПоЗапасам = ДанныеОбъекта.ТаблицаЗапасы.Итог("ЕстьСкидка");
			
		КонецЕсли;
		
		СкидкаПоРаботам = 0;
		Если ЕстьТЧРаботыУслуги Тогда
			
			СкидкаПоРаботам = ДанныеОбъекта.ТаблицаРаботыУслуги.Итог("ЕстьСкидка");
			
		КонецЕсли;
		
		ЕстьСкидки = ((СкидкаПоЗапасам + СкидкаПоРаботам) <> 0);
		
		ИмяОбласти = ?(ЕстьСкидки, "ШапкаТаблицыСоСкидкой", "ШапкаТаблицы");
		
		ИспользоватьШапкуСуммаБезСкидки = Ложь;
		ЕстьШапкаТаблицыСоСкидкойСуммаБезСкидки = НЕ Макет.Области.Найти("ШапкаТаблицыСоСкидкойСуммаБезСкидки") = Неопределено;
		ВыводитьСуммуБезСкидок = Константы.ВыводитьСуммуБезСкидки.Получить() = Перечисления.ВариантыВыводаСуммыБезСкидки.Печатать;
		Если ВыводитьСуммуБезСкидок И ЕстьСкидки И ЕстьШапкаТаблицыСоСкидкойСуммаБезСкидки Тогда
			ИмяОбласти = "ШапкаТаблицыСоСкидкойСуммаБезСкидки";
			ИспользоватьШапкуСуммаБезСкидки = Истина;
		КонецЕсли;
	
		
		Если НЕ ЕстьШапкаТаблицыСоСкидкойСуммаБезСкидки И ВыводитьСуммуБезСкидок Тогда
			
			ОбщегоНазначения.СообщитьПользователю(ТекстСообщенияМакетИзменен);
			
		КонецЕсли;
		
		ОбластиМакета.Вставить("ОбластьМакетаЗаголовокТаблицы", ПечатьДокументовУНФ.ПолучитьОбластьБезопасно(Макет,
			ИмяОбласти, "", Ошибки));
		Если ОбластиМакета.ОбластьМакетаЗаголовокТаблицы <> Неопределено Тогда
			
			ТабличныйДокумент.Вывести(ОбластиМакета.ОбластьМакетаЗаголовокТаблицы);
			
		КонецЕсли;
		
		// :::Табличные части
	
		ИмяОбласти = ?(ИспользоватьШапкуСуммаБезСкидки, "ИтогоПоСтраницеСуммаБезСкидки", "ИтогоПоСтранице");
		ОбластиМакета.Вставить("ОбластьМакетаИтогоПоСтранице", ПечатьДокументовУНФ.ПолучитьОбластьБезопасно(Макет,
			ИмяОбласти, НСтр("ru ='Итоги по странице'"), Ошибки));
		
		ОбластиМакета.Вставить("ОбластьМакетаИтогоПоДокументу", ПечатьДокументовУНФ.ПолучитьОбластьБезопасно(Макет,
			"Итого", "", Ошибки));
		ОбластиМакета.Вставить("ОбластьМакетаИтогоНДС_ЧО", ПечатьДокументовУНФ.ПолучитьОбластьБезопасно(Макет,
			"ИтогоНДСЧастичнаяОплата", НСтр("ru ='Итого НДС по частичной оплате'"), Ошибки));
		ОбластиМакета.Вставить("ОбластьМакетаИтогоСкидка", ПечатьДокументовУНФ.ПолучитьОбластьБезопасно(Макет,
			"ИтогоСкидка", "", Ошибки));
		ОбластиМакета.Вставить("ОбластьМакетаИтогоКОплате", ПечатьДокументовУНФ.ПолучитьОбластьБезопасно(Макет,
			"ИтогоКОплате", НСтр("ru ='Итого к оплате'"), Ошибки));
		ОбластиМакета.Вставить("ОбластьМакетаИтогоКОплатеСВесом", ПечатьДокументовУНФ.ПолучитьОбластьБезопасно(Макет,
			"ИтогоКОплатеСВесом", НСтр("ru ='Итого к оплате и вес'"), Ошибки));
		ОбластиМакета.Вставить("ОбластьМакетаСуммаПрописью", ПечатьДокументовУНФ.ПолучитьОбластьБезопасно(Макет,
			"СуммаПрописью", НСтр("ru ='Сумма прописью'"), Ошибки));
		ОбластиМакета.Вставить("ОбластьМакетаУсловия", ПечатьДокументовУНФ.ПолучитьОбластьБезопасно(Макет,
			"ДополнительныеУсловия", , Ошибки));

		// :::Подписи
		ШаблонИмени 					= "Подписи%1%2";
		ПредставлениеПредприниматель	= ?(ДанныеОбъекта.ОрганизацияЮридическоеФизическоеЛицо
			= Перечисления.ЮридическоеФизическоеЛицо.ФизическоеЛицо, "Предпринимателя", "");
		ИмяОбластиСФаксимиле = СтрШаблон(ШаблонИмени, ПредставлениеПредприниматель, "СФаксимиле");
		ИмяОбластиБезФаксимиле = СтрШаблон(ШаблонИмени, ПредставлениеПредприниматель, "БезФаксимиле");
		
		ОбластиМакета.Вставить("ОбластьМакетаПодписьСФаксимиле", ПечатьДокументовУНФ.ПолучитьОбластьБезопасно(Макет,
			ИмяОбластиСФаксимиле, "", Ошибки));
		ОбластиМакета.Вставить("ОбластьМакетаПодписьБезФаксимиле", ПечатьДокументовУНФ.ПолучитьОбластьБезопасно(Макет,
			ИмяОбластиБезФаксимиле, "", Ошибки));


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

		ИмяОбласти = ?(ЕстьСкидки, "СтрокаСоСкидкойГруппировка", "СтрокаГруппировка");
		ИмяОбласти = ?(ИспользоватьШапкуСуммаБезСкидки, "СтрокаСоСкидкойГруппировкаСуммаБезСкидки", ИмяОбласти);
		ОбластиМакета.Вставить("ОбластьМакетаРазделитель", ПечатьДокументовУНФ.ПолучитьОбластьБезопасно(Макет,
			ИмяОбласти, "", Ошибки));

		ОбластиМакета.Вставить("ОбластьМакетаОтветственныйЗаОформлениеДокумента",
			ПечатьДокументовУНФ.ПолучитьОбластьБезопасно(Макет, "Ответственный", "", Ошибки));
		
		Итоги = Новый Структура;
		Итоги.Вставить("НомерСтраницы", 1);
		Итоги.Вставить("Сумма", 0);
		Итоги.Вставить("СуммаНаСтранице", 0);
		Итоги.Вставить("СуммаНаСтраницеБезСкидки", 0);
		Итоги.Вставить("СуммаСкидкиНаСтранице", 0);
		Итоги.Вставить("СуммаНДС", 0);
		Итоги.Вставить("Всего", 0);
		Итоги.Вставить("Количество", 0);
		Итоги.Вставить("КоличествоНаСтранице", 0);
		Итоги.Вставить("НомерСтроки", 0);
		Итоги.Вставить("Вес", 0);
		Итоги.Вставить("СкидкаПоСтроке", 0);
		Итоги.Вставить("СкидкаПоДокументу", 0);
		Итоги.Вставить("ОбработаноСтрок", 0);
		Итоги.Вставить("КоличествоСтрок", 0);
		Итоги.Вставить("ЕстьСкидки", ЕстьСкидки);
		Итоги.Вставить("ЕстьСтавкаНольПроцентов", Ложь);
		Итоги.Вставить("ВывестиСекциюЧастичнаяОплата", (ВывестиПланОплаты И ЕстьТЧПланОплаты));
		Итоги.Вставить("ПредставлениеСкидки", ПредставлениеСкидки);
		Итоги.Вставить("КоличествоСтрокВОписанииУсловий", 0);
		Итоги.Вставить("ПредставлениеДокумента", ПредставлениеДокументаДляПечати);
		Итоги.Вставить("ИспользоватьШапкуСуммаБезСкидки", ИспользоватьШапкуСуммаБезСкидки);
		Итоги.Вставить("СтавкиНДС", Новый Массив);
		
		Итоги.КоличествоСтрок = КоличествоСтрокКВыводуНаПечать(ДанныеОбъекта, ЕстьТЧРаботыУслуги, ЕстьТЧЗапасы);
		
		ТекстДополнительныхУсловий = "";
		Если ЗначениеЗаполнено(ДанныеОбъекта.ДополнительныеУсловия) Тогда
			
			Если ЕстьТекстДополнительныхУсловий И ЗначениеЗаполнено(ДанныеОбъекта.ТекстДополнительныхУсловий) Тогда
				ТекстДополнительныхУсловий = ДанныеОбъекта.ТекстДополнительныхУсловий;
			Иначе				
				ТекстДополнительныхУсловий = ДанныеОбъекта.ДополнительныеУсловия.ТекстУсловий;
			КонецЕсли;
			Итоги.КоличествоСтрокВОписанииУсловий = СтрЧислоСтрок(ТекстДополнительныхУсловий);
		Иначе
			Если ПолучитьФункциональнуюОпцию("ИнтерфейсВыставлениеСчетов") 
				И ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(ДанныеОбъекта, "ТекстДополнительныхУсловий")
				И ЗначениеЗаполнено(ДанныеОбъекта.ТекстДополнительныхУсловий) Тогда
				
				ТекстДополнительныхУсловий = ДанныеОбъекта.ТекстДополнительныхУсловий;
				Итоги.КоличествоСтрокВОписанииУсловий = СтрЧислоСтрок(ТекстДополнительныхУсловий);
				
			КонецЕсли;
		КонецЕсли;
		
		Если ОбластиМакета.ОбластьМакетаСтрока <> Неопределено Тогда
			
			ПараметрыНоменклатуры = Новый Структура;
			
			Если ЕстьТЧРаботыУслуги Тогда
				
				Для каждого СтрокаРаботыУслуги Из ДанныеОбъекта.ТаблицаРаботыУслуги Цикл
					
					Итоги.ОбработаноСтрок = Итоги.ОбработаноСтрок + 1;
					
					Если СтрокаРаботыУслуги.ЭтоРазделитель
						И ОбластиМакета.ОбластьМакетаРазделитель = Неопределено Тогда
						
						Продолжить;
						
					КонецЕсли;
					
					Если Итоги.НомерСтроки <> 0 И СтрокаКорректноРазмещаетсяНаСтранице(ТабличныйДокумент,
						ОбластиМакета, Итоги, ВыводитьОбластьФаксимиле) = Ложь Тогда

						ДобавитьНовуюСтраницуДокумента(ТабличныйДокумент, ОбластиМакета, Итоги);

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

				Для Каждого СтрокаЗапасы Из ДанныеОбъекта.ТаблицаЗапасы Цикл

					Итоги.ОбработаноСтрок = Итоги.ОбработаноСтрок + 1;

					Если СтрокаЗапасы.ЭтоРазделитель И ОбластиМакета.ОбластьМакетаРазделитель = Неопределено Тогда

						Продолжить;

					КонецЕсли;

					Если Итоги.НомерСтроки <> 0 И СтрокаКорректноРазмещаетсяНаСтранице(ТабличныйДокумент,
						ОбластиМакета, Итоги, ВыводитьОбластьФаксимиле) = Ложь Тогда

						ДобавитьНовуюСтраницуДокумента(ТабличныйДокумент, ОбластиМакета, Итоги);

					КонецЕсли;

					ЗаполнитьДанныеПечатиПоСтрокеТабличнойЧасти(СтрокаЗапасы, ДанныеПечати, ПараметрыНоменклатуры,
						Итоги);

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

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

				КонецЦикла;

			КонецЕсли;
			
		КонецЕсли;
		
		// :::Итоги по посл. странице
		Если ОбластиМакета.ОбластьМакетаИтогоПоСтранице <> Неопределено Тогда
			
			ОбластиМакета.ОбластьМакетаИтогоПоСтранице.Параметры.Заполнить(Итоги);
			ТабличныйДокумент.Вывести(ОбластиМакета.ОбластьМакетаИтогоПоСтранице);
			
		КонецЕсли;
		
		// :::Итоги по документу
		Если ОбластиМакета.ОбластьМакетаИтогоПоДокументу <> Неопределено Тогда

			ДанныеПечати.Вставить("Всего", ПечатьДокументовУНФ.ФорматСумм(Итоги.Сумма));
			ДанныеПечати.Вставить("ЗаголовокНДС", ПечатьДокументовУНФ.ПредставлениеИтоговНДС(
				Итоги.СуммаНДС, ДанныеОбъекта.СуммаВключаетНДС, Итоги.СтавкиНДС));
			ДанныеПечати.Вставить("ВсегоНДС", ?(Итоги.СуммаНДС = 0
				И Не Итоги.ЕстьСтавкаНольПроцентов, "-", ПечатьДокументовУНФ.ФорматСумм(
				Итоги.СуммаНДС, , "0,00")));

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

		КонецЕсли;
		
		// :::Частичная оплата
		Если Итоги.ВывестиСекциюЧастичнаяОплата Тогда

			Если ОбластиМакета.ОбластьМакетаИтогоНДС_ЧО <> Неопределено Тогда

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

				Если ДанныеОбъекта.ТаблицаПланаОплат.Итог("ПроцентОплаты") > 0 Тогда

					ДанныеПечати.Вставить("ПроцентОплаты", ДанныеОбъекта.ТаблицаПланаОплат.Итог("ПроцентОплаты"));
					ДанныеПечати.Вставить("ВсегоКОплате", ПечатьДокументовУНФ.ФорматСумм(
						ДанныеОбъекта.ТаблицаПланаОплат.Итог("СуммаОплаты")));
					ДанныеПечати.Вставить("ВсегоНДСкОплате", ПечатьДокументовУНФ.ФорматСумм(
						ДанныеОбъекта.ТаблицаПланаОплат.Итог("СуммаНДСОплаты")));

				Иначе

					СтрокаПрочерк = НСтр("ru ='-'");
					ДанныеПечати.Вставить("ВсегоКОплате", СтрокаПрочерк);
					ДанныеПечати.Вставить("ПроцентОплаты", СтрокаПрочерк);
					ДанныеПечати.Вставить("ВсегоНДСкОплате", СтрокаПрочерк);

				КонецЕсли;

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

			КонецЕсли;

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

		ВесПоДокументу = ?(ДанныеОбъектовПечати.Колонки.Найти("Вес") <> Неопределено, ДанныеОбъекта.Вес, 0);
		ДанныеПечати.Вставить("ИтогоВес", ?(Итоги.Вес <> 0, Итоги.Вес, ВесПоДокументу));

		ОбластьМакетаИтогоКОплате = ?(ДанныеПечати.ИтогоВес <> 0, ОбластиМакета.ОбластьМакетаИтогоКОплатеСВесом,
			ОбластиМакета.ОбластьМакетаИтогоКОплате);
		Если ОбластьМакетаИтогоКОплате <> Неопределено Тогда

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

		КонецЕсли;
		
		// ::: Сумма прописью
		Если ОбластиМакета.ОбластьМакетаСуммаПрописью <> Неопределено Тогда

			ИтоговаяСтрока = НСтр("ru = 'Всего наименований %1, на сумму %2'");
			ФорматированнаяСумма = ПечатьДокументовУНФ.ФорматСумм(Итоги.Всего,
				ДанныеОбъекта.ВалютаДокумента);

			ДанныеПечати.Вставить("ИтоговаяСтрока", СтрШаблон(ИтоговаяСтрока, Итоги.Количество,
				ФорматированнаяСумма));
			ДанныеПечати.Вставить("СуммаПрописью", РаботаСКурсамиВалют.СформироватьСуммуПрописью(Итоги.Всего,
				ДанныеОбъекта.ВалютаДокумента));

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

		КонецЕсли;
		
		// :::Дополнительные условия
		Если Не ПустаяСтрока(ТекстДополнительныхУсловий) И ОбластиМакета.ОбластьМакетаУсловия <> Неопределено Тогда

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

			Для СчетчикСтрок = 1 По Итоги.КоличествоСтрокВОписанииУсловий Цикл

				ДанныеПечати.Вставить("ТекстДополнительныхУсловий", СтрПолучитьСтроку(ТекстДополнительныхУсловий,
					СчетчикСтрок));

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

			КонецЦикла;

		КонецЕсли;
		
		// :::Подписи
		ЕстьФаксимиле = Ложь;
		ИмяОбласти = "_Документ_" + Формат(ОбъектыПечати.Количество() + 1, "ЧН=; ЧГ=");
		
		Если ОбластиМакета.ОбластьМакетаПодписьСФаксимиле <> Неопределено Тогда
			
			Если ЗначениеЗаполнено(ДанныеОбъекта.ФаксимилеРуководителя)
				Или ЗначениеЗаполнено(ДанныеОбъекта.ФаксимилеГлавногоБухгалтера)
				Или ЗначениеЗаполнено(ДанныеОбъекта.ФаксимилеПечати) Тогда
					ЕстьФаксимиле = Истина;
			КонецЕсли;
						
			МакетИзменен = Макет.Области.Найти("СкрываемаяБезПодписейИПечати") = Неопределено;
			
			Если Не ЕстьФаксимиле И МакетИзменен Тогда
				ОбластиМакета.ОбластьМакетаПодписьБезФаксимиле.Параметры.Заполнить(ДанныеОбъекта);
				ОбластьПодписи = ТабличныйДокумент.Вывести(ОбластиМакета.ОбластьМакетаПодписьБезФаксимиле);
				РисунокПодписи = ТабличныйДокумент.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
				РисунокПодписи.Имя = "ПодписьБезФаксимиле";
				
			Иначе
				ОбластиМакета.ОбластьМакетаПодписьСФаксимиле.Параметры.Заполнить(ДанныеОбъекта);
				ОбластьПодписи = ТабличныйДокумент.Вывести(ОбластиМакета.ОбластьМакетаПодписьСФаксимиле);
			КонецЕсли;
			
			Если МакетИзменен И ЕстьФаксимиле Тогда
				Если ОбъектыПечати.Количество() = 0 Тогда
					ОбщегоНазначения.СообщитьПользователю(ТекстСообщенияМакетИзменен);
				КонецЕсли;
			КонецЕсли;
			
			ОбластьПодписи.Имя = ОбластьПодписи.Имя + ИмяОбласти;
			ОбластьБезФаксимиле = ТабличныйДокумент.Области.Найти("СкрываемаяБезПодписейИПечати");
			Если ОбластьБезФаксимиле <> Неопределено Тогда
				ОбластьБезФаксимиле.Имя = ОбластьБезФаксимиле.Имя + ИмяОбласти;
				Если Не ЕстьФаксимиле Тогда
					ТабличныйДокумент.УдалитьОбласть(ОбластьБезФаксимиле, ТипСмещенияТабличногоДокумента.ПоВертикали);
				КонецЕсли;
			КонецЕсли;
		
		Иначе
			
			ОбщегоНазначения.СообщитьПользователю(ТекстСообщенияМакетИзменен);
			
		КонецЕсли;
		
		// :::Ответственный
		МассивСекций = Новый Массив;
		
		Если ОбластиМакета.ОбластьМакетаОтветственныйЗаОформлениеДокумента <> Неопределено Тогда
			
			Если ПолучитьФункциональнуюОпцию("ИспользоватьСправочникСотрудники") Тогда
				
				ТелефонОтветственного = "";
				ЭлектроннаяПочтаОтветственного = "";
				Если ЗначениеЗаполнено(ДанныеОбъекта.ФизическоеЛицоОтветственного) Тогда
					
					ТелефонОтветственного = УправлениеКонтактнойИнформацией.ПредставлениеКонтактнойИнформацииОбъекта(
						ДанныеОбъекта.ФизическоеЛицоОтветственного, Справочники.ВидыКонтактнойИнформации.ТелефонФизЛица);
					ЭлектроннаяПочтаОтветственного = УправлениеКонтактнойИнформацией.ПредставлениеКонтактнойИнформацииОбъекта(
						ДанныеОбъекта.ФизическоеЛицоОтветственного, Справочники.ВидыКонтактнойИнформации.EmailФизическиеЛица);
					
				КонецЕсли;
				
				ОтветственныйЗаОформлениеДокумента = Строка(ДанныеОбъекта.Ответственный) + ?(ПустаяСтрока(
					ТелефонОтветственного), "", НСтр("ru =', тел.:'")) + ТелефонОтветственного + ?(ПустаяСтрока(
					ЭлектроннаяПочтаОтветственного), "", НСтр("ru =', e-mail:'")) + ЭлектроннаяПочтаОтветственного;
				ДанныеПечати.Вставить("ОтветственныйЗаОформлениеДокумента", ОтветственныйЗаОформлениеДокумента);
				
				ОбластиМакета.ОбластьМакетаОтветственныйЗаОформлениеДокумента.Параметры.Заполнить(ДанныеПечати);
				Если ПараметрыРекламногоБлока.ВыводитьРекламуВПодвале Тогда
					МассивСекций.Добавить(ОбластиМакета.ОбластьМакетаОтветственныйЗаОформлениеДокумента);
				Иначе
					ТабличныйДокумент.Вывести(ОбластиМакета.ОбластьМакетаОтветственныйЗаОформлениеДокумента);
				КонецЕсли;
				
			КонецЕсли;
			
		Иначе
			
			ОбщегоНазначения.СообщитьПользователю(ТекстСообщенияМакетИзменен);
			
		КонецЕсли;
		
		// :::Рекламный блок, подвал
		Если ПараметрыРекламногоБлока.ВыводитьРекламуВПодвале Тогда
			
			ОбластьРекламаПодвал = ПечатьДокументовУНФ.ПолучитьОбластьБезопасно(Макет, "ОбластьРекламныйБлокПодвал", "", Ошибки);
			Если ОбластьРекламаПодвал <> Неопределено Тогда
								
				// Тут проверка на значение ПодписиИПечать
				ВыводитьПодписьИПечать = ПечатьДокументовУНФ.НастройкаПользователяЗаполнятьФаксимиле("СчетНаОплату");
				Если ВыводитьПодписьИПечать = Неопределено Тогда
					ВыводитьПодписьИПечать = Ложь;
				КонецЕсли;
				Если НЕ ВыводитьПодписьИПечать ИЛИ НЕ ЕстьФаксимиле Тогда
					
					ТабличныйДокументДляПроверки = Новый ТабличныйДокумент;
					ТабличныйДокументДляПроверки.Вывести(ТабличныйДокумент);
					ЗаполнитьЗначенияСвойств(ТабличныйДокументДляПроверки, ТабличныйДокумент);
					
					ОбластиКУдалению = Новый Массив;
					Для Каждого Область Из ТабличныйДокумент.Области Цикл
						Если СтрНайти(Область.Имя, "СкрываемаяБезПодписейИПечати") <> 0 Тогда
							ОбластиКУдалению.Добавить(Область);
						КонецЕсли;
					КонецЦикла;
					Для Каждого Область Из ОбластиКУдалению Цикл
						ТабличныйДокументДляПроверки.УдалитьОбласть(Область, ТипСмещенияТабличногоДокумента.ПоВертикали);
					КонецЦикла;
				Иначе
					ТабличныйДокументДляПроверки = ТабличныйДокумент;
				КонецЕсли;
				
				МассивСекций.Добавить(ОбластьРекламаПодвал);
				ОбластьОтступ = ПечатьДокументовУНФ.ПолучитьОбластьБезопасно(Макет, "ОтступЗаголовка", "", Ошибки);
				
				Если ПечатьДокументовУНФ.ПроверитьВыводТабличногоДокумента(ТабличныйДокументДляПроверки, МассивСекций, Ошибки) Тогда
					
					Пока ПечатьДокументовУНФ.ПроверитьВыводТабличногоДокумента(ТабличныйДокументДляПроверки, МассивСекций, Ошибки) Цикл
						МассивСекций.Вставить(1, ОбластьОтступ);
					КонецЦикла;
					
					// Несмотря на проверку вывода, одна секция всегда лишняя
					Если МассивСекций.Количество() >= 3 Тогда
						МассивСекций.Удалить(1);
					КонецЕсли;
					
					Для каждого Секция Из МассивСекций Цикл
						ТабличныйДокумент.Вывести(Секция);
					КонецЦикла;
				Иначе
					ТабличныйДокумент.Вывести(ОбластиМакета.ОбластьМакетаОтветственныйЗаОформлениеДокумента);
				КонецЕсли;
				
			КонецЕсли;
			
		КонецЕсли;
		
		ТекущаяОбластьПечати = Неопределено;
		Если ВывестиПланОплаты Тогда
			
			ОписаниеОбъектаПечати = ОбъектыПечати.НайтиПоЗначению(ДанныеОбъекта.Ссылка);
			Если ОписаниеОбъектаПечати <> Неопределено Тогда
				
				ТекущаяОбластьПечати = ТабличныйДокумент.Области.Найти(ОписаниеОбъектаПечати.Представление);
				
				ОбъектыПечати.Добавить(ДанныеОбъекта.Ссылка, "Документ_" + Формат(ОбъектыПечати.Количество() + 1, "ЧН=; ЧГ="));
				ЗаполнитьРисункиВТабличномДокументе(ТабличныйДокумент, ИмяОбласти);
				
			КонецЕсли;
			
		КонецЕсли;

		Если ТекущаяОбластьПечати = Неопределено Тогда

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

		Иначе

			ПрисоединитьКОбластиПечатиДокумента(ТабличныйДокумент, ТекущаяОбластьПечати, ОписаниеОбъектаПечати);

		КонецЕсли;

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

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

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

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

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

Процедура ДобавитьОписаниеОбластиЛоготипа(ТаблицаОписанияОбластей, Макет, ИмяОбласти, СодержитЛоготип, Устаревшая,
	Приоритет)

	СтрокаТаблицы = ТаблицаОписанияОбластей.Добавить();

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

		ОбластьМакета = Макет.ПолучитьОбласть(ИмяОбласти);

	КонецЕсли;

	СтрокаТаблицы.ОбластьМакета = ОбластьМакета;
	СтрокаТаблицы.СодержитЛоготип = СодержитЛоготип;
	СтрокаТаблицы.Устарела = Устаревшая;
	СтрокаТаблицы.Приоритет = Приоритет;

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

Процедура ЗаполнитьРисункиВТабличномДокументе(ТабличныйДокумент, ИмяОбласти)
	
	Для Каждого Рисунок Из ТабличныйДокумент.Рисунки Цикл
		ЭтоПодписьИПечать = Ложь;
		Для Каждого ИмяОбластиСПодписьюИПечатью Из УправлениеПечатью.ПрефиксыИменОбластейСПодписьюИПечатью() Цикл
			Если СтрНайти(Рисунок.Имя, ИмяОбластиСПодписьюИПечатью) > 0 Тогда
				ЭтоПодписьИПечать = Истина;
				Прервать;
			КонецЕсли;
		КонецЦикла;
		Если Не ЭтоПодписьИПечать Тогда
			Продолжить;
		КонецЕсли;
		Если Рисунок.ТипРисунка = ТипРисункаТабличногоДокумента.Картинка И СтрНайти(Рисунок.Имя, "_Документ_") = 0 Тогда
			Рисунок.Имя = Рисунок.Имя + ИмяОбласти;
		КонецЕсли;
	КонецЦикла;

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

Процедура ДобавитьНовуюСтраницуДокумента(ТабличныйДокумент, ОбластиМакета, Итоги)
	
	Если ОбластиМакета.ОбластьМакетаИтогоПоСтранице <> Неопределено Тогда
		
		ОбластиМакета.ОбластьМакетаИтогоПоСтранице.Параметры.Заполнить(Итоги);
		ТабличныйДокумент.Вывести(ОбластиМакета.ОбластьМакетаИтогоПоСтранице);
		
	КонецЕсли;
	
	ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
	
	Итоги.КоличествоНаСтранице= 0;
	Итоги.СуммаНаСтранице = 0;
	Итоги.СуммаНаСтраницеБезСкидки = 0;
	Итоги.НомерСтраницы = Итоги.НомерСтраницы + 1;
	
	Если ОбластиМакета.НомерСтраницы <> Неопределено Тогда
		
		ДанныеПечати = Новый Структура;
		ДанныеПечати.Вставить("ПредставлениеДокумента", Итоги.ПредставлениеДокумента);
		ДанныеПечати.Вставить("ПредставлениеСтраницы", СтрШаблон(НСтр("ru ='Страница %1'"), Итоги.НомерСтраницы));
		
		ОбластиМакета.НомерСтраницы.Параметры.Заполнить(ДанныеПечати);
		ТабличныйДокумент.Вывести(ОбластиМакета.НомерСтраницы);
		
	КонецЕсли;
	
	Если ОбластиМакета.ОбластьМакетаЗаголовокТаблицы <> Неопределено Тогда
		
		ТабличныйДокумент.Вывести(ОбластиМакета.ОбластьМакетаЗаголовокТаблицы);
		
	КонецЕсли;
	
КонецПроцедуры

Функция СтрокаКорректноРазмещаетсяНаСтранице(ТабличныйДокумент, ОбластиМакета, Итоги, ВыводитьОбластьФаксимиле = Ложь)
	
	ЕстьВсеОбласти = Истина;
	Для каждого ЭлементСтруктуры Из ОбластиМакета Цикл
		
		Если ЭлементСтруктуры.Значение = Неопределено Тогда
			
			ЕстьВсеОбласти = Ложь;
			Прервать;
			
		КонецЕсли;
		
	КонецЦикла;
	
	Если НЕ ЕстьВсеОбласти Тогда
		
		Возврат Неопределено;
		
	КонецЕсли;
	
	МассивОбластейМакета = Новый Массив;
	
	МассивОбластейМакета.Добавить(ОбластиМакета.ОбластьМакетаСтрока);
	МассивОбластейМакета.Добавить(ОбластиМакета.ОбластьМакетаИтогоПоСтранице);
	
	Если Итоги.ОбработаноСтрок = Итоги.КоличествоСтрок - 1 Тогда
		
		МассивОбластейМакета.Добавить(ОбластиМакета.ОбластьМакетаИтогоПоДокументу);
		
		Если Итоги.ВывестиСекциюЧастичнаяОплата Тогда
			
			МассивОбластейМакета.Добавить(ОбластиМакета.ОбластьМакетаИтогоНДС_ЧО);
			
		КонецЕсли;
		
		Если Итоги.ЕстьСкидки Тогда
			
			МассивОбластейМакета.Добавить(ОбластиМакета.ОбластьМакетаИтогоСкидка);
			
		КонецЕсли;
		
		МассивОбластейМакета.Добавить(ОбластиМакета.ОбластьМакетаИтогоКОплатеСВесом);
		
		Если Итоги.КоличествоСтрокВОписанииУсловий > 0 Тогда
			
			Для Итератор = 0 По Итоги.КоличествоСтрокВОписанииУсловий Цикл
				
				МассивОбластейМакета.Добавить(ОбластиМакета.ОбластьМакетаУсловия);
				
			КонецЦикла;
			
		КонецЕсли;
		
		Если ВыводитьОбластьФаксимиле Тогда
			МассивОбластейМакета.Добавить(ОбластиМакета.ОбластьМакетаПодписьСФаксимиле);
		Иначе
			МассивОбластейМакета.Добавить(ОбластиМакета.ОбластьМакетаПодписьБезФаксимиле);
		КонецЕсли;
		
	КонецЕсли;
	
	Возврат ТабличныйДокумент.ПроверитьВывод(МассивОбластейМакета)
	
КонецФункции

Функция ЗаполнитьОбластьЗаголовкаСчетовЗаказовИРазместитьЛоготип(ДанныеОбъекта, ОбластиМакета, Ошибки)
	
	ПользовательПравилМакет = Ложь;
	ЛоготипЗаполнен = ЗначениеЗаполнено(ДанныеОбъекта.ФайлЛоготип);
	Приоритет = 999;
	
	МассивОбластей = ОбластиМакета.НайтиСтроки(Новый Структура("СодержитЛоготип", ЛоготипЗаполнен));
	Для каждого ОписаниеОбласти Из МассивОбластей Цикл
		
		Если ОписаниеОбласти.ОбластьМакета <> Неопределено Тогда
			
			Если Приоритет > ОписаниеОбласти.Приоритет Тогда
				
				Приоритет = ОписаниеОбласти.Приоритет;
				
			КонецЕсли;
			
			Если ОписаниеОбласти.Устарела Тогда
				
				ПользовательПравилМакет = Истина;
				
			КонецЕсли;
			
			ОписаниеОбласти.ОбластьМакета.Параметры.Заполнить(ДанныеОбъекта);
			
			//Если ЛоготипЗаполнен Тогда
			//	
			//	ДанныеКартинки = РаботаСФайлами.ДвоичныеДанныеФайла(ДанныеОбъекта.ФайлЛоготип);
			//	Если ЗначениеЗаполнено(ДанныеКартинки) Тогда
			//		
			//		КартинкаЛоготипа = Новый Картинка(ДанныеКартинки);
			//		ПечатьДокументовУНФ.УстановитьКартинкуБезопасно(ОписаниеОбласти.ОбластьМакета.Рисунки, "Логотип", КартинкаЛоготипа);
			//		
			//	КонецЕсли;
			//	
			//КонецЕсли;
			
		КонецЕсли;
		
	КонецЦикла;
	
	Если ПользовательПравилМакет Тогда
		
		ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, ,
			ПечатьДокументовУНФ.ШаблонТекстаПредупрежденияПравкиМакета(), Неопределено);
		
	КонецЕсли;
	
	Если Приоритет = 999 Тогда
		
		Возврат Неопределено;
		
	Иначе
		
		Возврат ОбластиМакета.Найти(Приоритет, "Приоритет");
		
	КонецЕсли;
	
КонецФункции

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

	ДанныеПечати.Очистить();

	Если Не СтрокаТабличнойЧасти.ЭтоРазделитель И Не СтрокаТабличнойЧасти.ЭтоНабор Тогда
		Итоги.Количество = Итоги.Количество + 1;
	КонецЕсли;

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

	ПараметрыНоменклатуры.Очистить();
	ПараметрыНоменклатуры.Вставить("Содержание", СтрокаТабличнойЧасти.Содержание);
	ПараметрыНоменклатуры.Вставить("ПредставлениеНоменклатуры", СтрокаТабличнойЧасти.ПредставлениеНоменклатуры);
	ПараметрыНоменклатуры.Вставить("ПредставлениеХарактеристики", СтрокаТабличнойЧасти.Характеристика);
	ПараметрыНоменклатуры.Вставить("ПредставлениеАртикула", СтрокаТабличнойЧасти.Артикул);
	ПараметрыНоменклатуры.Вставить("НеобходимоВыделитьКакСоставНабора",
		СтрокаТабличнойЧасти.НеобходимоВыделитьКакСоставНабора);

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

	//Если Итоги.ЕстьСкидки Тогда

	//	ДанныеПечати.Вставить("ПредставлениеСкидки", ПечатьДокументовУНФ.ПредставлениеСкидки(СтрокаТабличнойЧасти,
	//		Итоги));

	//КонецЕсли;

	ДанныеПечати.Вставить("Сумма", СтрокаТабличнойЧасти.Сумма);
	ДанныеПечати.Вставить("СуммаБезСкидки", СтрокаТабличнойЧасти.СуммаБезСкидки);

	Если Не СтрокаТабличнойЧасти.ЭтоРазделитель И Не СтрокаТабличнойЧасти.ЭтоНабор Тогда

		Итоги.КоличествоНаСтранице= Итоги.КоличествоНаСтранице + СтрокаТабличнойЧасти.Количество;
		Итоги.Сумма				= Итоги.Сумма + СтрокаТабличнойЧасти.Сумма;
		Итоги.СуммаНаСтранице		= Итоги.СуммаНаСтранице + СтрокаТабличнойЧасти.Сумма;
		Итоги.СуммаНДС			= Итоги.СуммаНДС + СтрокаТабличнойЧасти.СуммаНДС;
		Итоги.Всего				= Итоги.Всего + СтрокаТабличнойЧасти.Всего;
	//	Итоги.СкидкаПоДокументу	= Итоги.СкидкаПоДокументу + Итоги.СкидкаПоСтроке;
		
		Итоги.СуммаНаСтраницеБезСкидки	= Итоги.СуммаНаСтраницеБезСкидки + СтрокаТабличнойЧасти.СуммаБезСкидки;

		Если ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(СтрокаТабличнойЧасти, "СтавкаНДС") Тогда
			Если СтрокаТабличнойЧасти.СтавкаНДС = УправлениеНебольшойФирмойПовтИсп.ПолучитьСтавкуНДСНоль() Тогда
				Итоги.ЕстьСтавкаНольПроцентов = Истина;
			КонецЕсли;
			Итоги.СтавкиНДС.Добавить(СтрокаТабличнойЧасти.СтавкаНДС);
		КонецЕсли;

	КонецЕсли;

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

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

	НомерСтрокиНачалаОбласти = ТекущаяОбластьПечати.Верх;
	НомерСтрокиОкончанияОбласти = ТабличныйДокумент.ВысотаТаблицы;

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

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

Функция КоличествоСтрокКВыводуНаПечать(ДанныеОбъекта, ЕстьТЧРаботыУслуги, ЕстьТЧЗапасы)
	
	КоличествоРезультирующихСтрок = 0;
	
	Если ЕстьТЧРаботыУслуги Тогда
		
		КоличествоРезультирующихСтрок = КоличествоРезультирующихСтрок + ДанныеОбъекта.ТаблицаРаботыУслуги.Количество();
		
	КонецЕсли;
	
	Если ЕстьТЧЗапасы Тогда
		
		КоличествоРезультирующихСтрок = КоличествоРезультирующихСтрок + ДанныеОбъекта.ТаблицаЗапасы.Количество();
		
	КонецЕсли;
	
	Возврат КоличествоРезультирующихСтрок;
	
КонецФункции

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



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

это то что пишет 1с фреш внутри уже загруженной и прошедшей аудит обработки
3 WerLym
 
16.02.26
14:55
Может кто-то знает где чаще всего возникает такое разрешение и я сам проверю
4 ass1c
 
16.02.26
17:06
(0) никогда особо эту тему не разбирал, но попробуй покопать в этом направлении:

ПараметрыРегистрации.Вставить("Разрешения", Новый Массив);	
	Разрешение = РаботаВБезопасномРежиме.РазрешениеНаИспользованиеКаталогаВременныхФайлов(Истина, Истина);
	ПараметрыРегистрации.Разрешения.Добавить(Разрешение);
	Разрешение = РаботаВБезопасномРежиме.РазрешениеНаИспользованиеКаталогаПрограммы(Истина, Истина);
	ПараметрыРегистрации.Разрешения.Добавить(Разрешение);
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший