Вывод клиента в отчет «Товары из заказов поставщика». УТ 11.5

В списке заказов поставщиков есть возможность по заказу посмотреть товары:

При этот выводится отчет вида:

Клиент захотел, чтобы выводился клиент из заказа клиента.

Вручную можно добавить поле. но при формировании отчета из списка заказов эта настройка не сохраняется.

Ну что же, предстоит небольшое расследование, как вызывается и формируется отчет СоставЗаказовПоставщику.

Основной макет имеет вид:

Отчет формируется отсюда:

Отлаживать надо в режиме РежимОтладки, чтобы отчет формировался не в фоне.

Делаем расширение перед вызовом процедуры СкомпоноватьОтчет и добавляем там нужную группировку:

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

Сразу я пробовал добавлять программно поле компоновки ЗаказПоставщику.ДокументОснование.Контрагент и оно не добавлялось, но зато добавлялось вручную Заказ поставщику.Основание.Клиент:

Немного помучался, но потом догадался сохранить настройки в файл, чтобы увидеть в чем разница:

Без этого бы ни за что не догадался, что нужно использовать Партнер вместо Контрагент.

Но зато я добавил поле в Выбор, что позволило дать заголовок полю — «Клиент»:

В сводном варианте отчета тоже работает:

UPD: оказалось, клиент хочет, чтобы поле «Клиент» выводилось в одной строке с номенклатурой. Сделал доработку:


&Перед("ПриКомпоновкеРезультата")
Процедура дор_ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	//Вмешиваемся в формирование отчета
	Структура1 = КомпоновщикНастроек.Настройки.Структура;
	Если Структура1.Количество() > 0 Тогда
		Структура2 = Структура1[0].Структура;
		Если Структура2.Количество() > 0 Тогда
			ПерваяГруппировка = Структура2.Получить(0);
		
			ПолеКлиент = Новый ПолеКомпоновкиДанных("ЗаказПоставщику.ДокументОснование.Партнер"); 
			Если ТипЗнч(ПерваяГруппировка) = Тип("ГруппировкаКомпоновкиДанных") Тогда
				ПоляГруппировки = ПерваяГруппировка.ПоляГруппировки;
				Если ПоляГруппировки.Элементы.Количество() = 0 Тогда //Детальные записи
					Для Каждого Элемент ИЗ ПерваяГруппировка.Выбор.Элементы Цикл
						Если ТипЗнч(Элемент) = Тип("ВыбранноеПолеКомпоновкиДанных") И Элемент.Поле = ПолеКлиент Тогда
							Возврат; //ничего не добавляем,если уже есть
						КонецЕсли;
					КонецЦикла;     
					
					Поле = ПерваяГруппировка.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
					Поле.Использование = истина;
					Поле.Поле = ПолеКлиент;
					Поле.Заголовок = "Клиент";
				КонецЕсли;
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;
	//Формирование отчета остается стандартным
КонецПроцедуры

Работает только для детального варианта, выглядит так:

Среда: УТ 11.5.12.53 Объем: 1 час.

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *