Какое условие мне нужно поставить что бы формировалась нужная форма

1. Sagalscki 10.07.20 16:31 Сейчас в теме
Добавляю на форму РМК в 1с УНФ свою кнопку которая должная печатать свой макет. За основу взял печать товарного чека. Сам вопрос: Какое условие можно поставить в
Функция ПечатнаяФорма(МассивОбъектов, ОбъектыПечати, ИмяМакета)
, что бы в соотвестии у условием формировался тот или иной табличный документ.

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

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

Показать



прошу без троллинга, ибо только начинаю во все это вникать.
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. alex-l19041 8 10.07.20 16:35 Сейчас в теме
(1) используйте параметр
ИмяМакета
user5300; +1 Ответить
3. Sagalscki 10.07.20 17:01 Сейчас в теме
(2)Сработало, но появилась ошибка " Несоответствие типов (параметр номер '1') ", не зависимо в какую часть условия входит
4. Xershi 1484 13.07.20 10:48 Сейчас в теме
Вопрос не в условии, а в том что у тебя выводится и как.
5. VesnaLP 15.07.20 10:53 Сейчас в теме
Может быть у вас первый параметр типа документ, а надо документ поместить в массивдокументов
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот