Отчет с двумя схемами компоновки данных

1. _Vanda_ 28.12.16 09:40 Сейчас в теме
Добрый день!
Делаю отчет на СКД с 2мя схемами компоновки данных. Отличаются тем, что в одной можно сделать отбор по номенклатуре,а в другой нет, т.к. группируется по контрагенту и номенклатура не выводится. На форме есть флажок, по которому определяю какую схему использовать. Соответственно, в одной схеме есть поле номенклатура,а в другой нет. И когда флаг=ложь, выдает ошибку, что поле номенклатура не найдена. Проблема, как я поняла, в том что не обновляется сама структура отчета. Не знаю как исправить данную ошибку.
	Выборка = Запрос.Выполнить().Выбрать();
		
		Пока Выборка.Следующий() Цикл
				Стр = ТЗ.Добавить();
				ЗаполнитьЗначенияСвойств(Стр,Выборка);
		КонецЦикла;
		
		
	Если ТЗ.Количество() = 0 Тогда
		Возврат;
	КонецЕсли;	
	 
    ОтчетОбъект = РеквизитФормыВЗначение("Отчет");
	
	Если Отчет.ПоНоменклатуре=Ложь Тогда
	СхемаКомпоновкиДанных = ОтчетОбъект.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных1");
	Иначе
	СхемаКомпоновкиДанных = ОтчетОбъект.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
	Конецесли;
				
				
	Период_1="С "+Строка(Формат( Отчет.Период1.ДатаНачала,"ДФ=dd.MM.yy"))+ " по "+Строка(Формат(Отчет.Период1.ДатаОкончания,"ДФ=dd.MM.yy"));
	Период_2="С "+Строка(Формат( Отчет.Период2.ДатаНачала,"ДФ=dd.MM.yy"))+ " по "+Строка(Формат(Отчет.Период2.ДатаОкончания,"ДФ=dd.MM.yy"));
	Поле1=СхемаКомпоновкиДанных.НаборыДанных.ТЗ.Поля.найти("Период1");
	Поле1.Заголовок=Период_1;
	Поле2=СхемаКомпоновкиДанных.НаборыДанных.ТЗ.Поля.найти("Период2");
	Поле2.Заголовок=Период_2;

	
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	Настройки = Отчет.КомпоновщикНастроек.ПолучитьНастройки();
	МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,Настройки);

	ВнешниеНаборы = Новый Структура;
	
	ВнешниеНаборы.Вставить("ТЗ",ТЗ);

	ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,ВнешниеНаборы);
	ПроцессорВывода = Новый      ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;

	ПроцессорВывода.УстановитьДокумент(Результат);
		
	ПроцессорВывода.Вывести(ПроцессорКомпоновки);
	СкомпоноватьРезультат();
Показать


В ОсновнаяСхемаКомпоновкиДанных1 в наборе данных нет поля номенклатура, а в ОсновнаяСхемаКомпоновкиДанных есть.
По теме из базы знаний
Найденные решения
2. Ганс 28.12.16 10:11 Сейчас в теме
Я конечно не эксперт в СКД, но почему не использовать варианты отчёта, зачем вторая компоновка?

А так вам не хватает строчки: КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
корум; +1 Ответить
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
3. Caspersky 28.12.16 11:15 Сейчас в теме
(1)Похоже, действительно, на очередной костыль:
запрос СКД подразумевает набор ВСЕХ возможных полей потенциально востребованных при формировании отчета, а что выводить и как группировать, как правило определяет пользователь уже в режиме предприятия ...
т.е., полагаю, Ваша задача легко решается без конфигуратора ...
4. _Vanda_ 29.12.16 09:55 Сейчас в теме
(3)Дело в том, что мне нужно сформировать отчет за 2 периода, соответственно я делаю 2 одинаковых запроса на разные даты,которые связываю затем по партнеру и по номенклатуре. Если я делаю по партнеру,то номенклатуру приходится убрать,т.к. она мешает группировке, т.е. разбивает одну реализацию на несколько строчек, в зависимости от количества номенклатур. А пользователю необходимо формировать как по партнерам, так и по номенклатуре.
2. Ганс 28.12.16 10:11 Сейчас в теме
Я конечно не эксперт в СКД, но почему не использовать варианты отчёта, зачем вторая компоновка?

А так вам не хватает строчки: КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
корум; +1 Ответить
6. Anton64 215 29.12.16 10:09 Сейчас в теме
Если у Вас не редактируются отборы на форме, тогда в (2) всё правильно написали:
замените
 МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,Настройки);

на
 МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,СхемаКомпоновкиДанных.НастройкиПоУмолчанию);


Иначе получается что есть две компоновки данных (одна из них похоже указана как основная в отчете), вы для компоновки макета используете компоновщик настроек отчета, который инициализирован основной схемой, а не Схемой1. Из-за этого ошибка, потому что в Отчет.КомпоновщикНастроек - содержит настройки по основной схеме, а не Схеме1.
5. pvvpvv 10 29.12.16 10:04 Сейчас в теме
(0) Вместо

Настройки = Отчет.КомпоновщикНастроек.ПолучитьНастройки();


напишите

КомпоновщикНастроекСхема = Новый КомпоновщикНастроекКомпоновкиДанных;
КомпоновщикНастроекСхема.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
	КомпоновщикНастроекСхема.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
Настройки = КомпоновщикНастроекСхема.Настройки;
7. _Vanda_ 09.01.17 11:32 Сейчас в теме
При таком задании настроек перестает работать отбор. Т.е. если в настройках сделать отбор по складу/номенклатуре/и т.д. выдает абсолютно все данные.
Оставьте свое сообщение
Вакансии
Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

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

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

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)

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