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

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 1473 13.07.20 10:48 Сейчас в теме
Вопрос не в условии, а в том что у тебя выводится и как.
5. VesnaLP 15.07.20 10:53 Сейчас в теме
Может быть у вас первый параметр типа документ, а надо документ поместить в массивдокументов
Оставьте свое сообщение
Вакансии
Программист 1С
Казань
зарплата от 150 000 руб.
Полный день

Разработчик 1С
Москва
зарплата от 200 000 руб. до 300 000 руб.
Полный день

Программист 1С (удаленно)
Самара
зарплата от 230 000 руб. до 230 000 руб.
Полный день

Руководитель группы разработки 1С
Москва
зарплата от 250 000 руб. до 250 000 руб.
Полный день

Специалист техподдержки
Санкт-Петербург
зарплата от 100 руб. до 150 руб.
Полный день