СКД: не найден внешний набор данных

1. umberto_nobile 5 25.05.20 09:36 Сейчас в теме
добрый день всем!

помогите разобраться, сломал всю голову. не могу понять в чём причина.

простейший отчёт в УТ 11.4. в котором в СКД используется внешний набор. при выполнении выдаётся ошибка: Не найден внешний набор "ТаблДок".
Прикрепленные файлы:
РеестрПоступлений.erf
По теме из базы знаний
Найденные решения
8. SlavaKron 26.05.20 09:22 Сейчас в теме
Во-первых, как сказали в (6), Стандартная обработка = Ложь. Во-вторых, настройки получайте так: Настройки = КомпоновщикНастроек.ПолучитьНастройки().
В-третьих, сделайте вспомогательную схему, чтобы получить список используемых ссылок с учётом установленных параметров и отборов:
ВременныеНастройки = КомпоновщикНастроек.ПолучитьНастройки();
ВременнаяСхема = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
ВнешнийНабор = ВременнаяСхема.НаборыДанных.Найти("НаборДанных2");
ВременнаяСхема.НаборыДанных.Удалить(ВнешнийНабор);
ВременнаяСхема.СвязиНаборовДанных.Очистить();

ВыбранныеПоля = ВременныеНастройки.Выбор.Элементы;
ВыбранныеПоля.Очистить();

ОтключитьОтборыПоПолюРекурсивно(ВременныеНастройки.Отбор.Элементы, Новый ПолеКомпоновкиДанных("СуммаРозн"));

ВременныеНастройки.УсловноеОформление.Элементы.Очистить();	
ВременныеНастройки.Структура.Очистить();

НоваяГруппировка = ВременныеНастройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
НоваяГруппировка.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));

НовоеПолеГруппировки = НоваяГруппировка.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
НовоеПолеГруппировки.Поле = Новый ПолеКомпоновкиДанных("Ссылка");

КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(ВременнаяСхема, ВременныеНастройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));

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

Очевидно, необходимо отключить отборы по полю СуммаРозн, если они есть, иначе временная схема не сгенерируется, поэтому используем рекурсивную процедуру:
Процедура ОтключитьОтборыПоПолюРекурсивно(ЭлементыОтбора, Поле)
	Для Каждого ЭлементОтбора Из ЭлементыОтбора Цикл
		Если ТипЗнч(ЭлементОтбора) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда
			Если ЭлементОтбора.ЛевоеЗначение = Поле Или ЭлементОтбора.ПравоеЗначение = Поле Тогда
				ЭлементОтбора.Использование = Ложь;
			КонецЕсли;
		Иначе
			ОтключитьОтборыПоПолюРекурсивно(ЭлементОтбора.Элементы, Поле)
		КонецЕсли;
	КонецЦикла;
КонецПроцедуры
Показать
umberto_nobile; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Ivanov_OM 38 25.05.20 09:55 Сейчас в теме
Попробуй в НабореДанных2 у докСсылка поставить Параметр, ну например "ДокументСсылка".
Этот параметр укажи в связях наборов данных в колонке Параметр
3. umberto_nobile 5 25.05.20 10:07 Сейчас в теме
(2) не сработало (((

самое смешное - это далеко не первый отчёт на СКД в котором я использую внешний набор данных.
4. Ivanov_OM 38 25.05.20 11:04 Сейчас в теме
А попробуй без внешнего набора данных.
Просто создай временную таблицу, только обязательно ее инициализируй по типам.
Например вот так:
ТабДок = Новый ТаблицаЗначений;
ОписаниеЧисла = Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(15, 2));
ОписаниеСтроки = Новый ОписаниеТипов("Строка",Новый КвалификаторыСтроки(100));
ОписаниеДаты = Новый ОписаниеТипов("Дата",Новый КвалификаторыДаты(ЧастиДаты.ДатаВремя));
	
ТабДок.Колонки.Добавить(Ссылка,"Документссылка.ПриобретениеТоваровИУслуг");
ТабДок.Колонки.Добавить(Номер,ОписаниеСтроки);
ТабДок.Колонки.Добавить(Дата,ОписаниеДаты);
ТабДок.Колонки.Добавить(Склад,"СправочникСсылка.Склады");

//ну и т.д. все остальные колонки

//А далее в запросе создаешь таблицу и добавляешь поля как в твоей таблице

ВЫБРАТЬ
		|	ТабДок.Ссылка КАК Ссылка,
		|	ТабДок.Дата КАК Дата,
		|	ТабДок.Номер КАК Номер,
		|	ТабДок.Склад КАК Склад
		|ПОМЕСТИТЬ ВТ_ТабДок
		|ИЗ
		|	&ТабДок КАК ТабДок
//Ну и далее твой запрос
Показать
5. umberto_nobile 5 25.05.20 13:59 Сейчас в теме
(4) но почему не работает внешний набор?!! ведь должен работать. я не вижу никакой ошибки.
6. vadim1011985 100 26.05.20 01:10 Сейчас в теме
(5) Стандартная обработка = Ложь ?
SlavaKron; +1 Ответить
7. umberto_nobile 5 26.05.20 08:29 Сейчас в теме
(6) когда ставлю
СтандартнаяОбработка= ложь
у меня выходит пустой отчёт. такое впечатление, что никакие параметры и отборы не заходят.
8. SlavaKron 26.05.20 09:22 Сейчас в теме
Во-первых, как сказали в (6), Стандартная обработка = Ложь. Во-вторых, настройки получайте так: Настройки = КомпоновщикНастроек.ПолучитьНастройки().
В-третьих, сделайте вспомогательную схему, чтобы получить список используемых ссылок с учётом установленных параметров и отборов:
ВременныеНастройки = КомпоновщикНастроек.ПолучитьНастройки();
ВременнаяСхема = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
ВнешнийНабор = ВременнаяСхема.НаборыДанных.Найти("НаборДанных2");
ВременнаяСхема.НаборыДанных.Удалить(ВнешнийНабор);
ВременнаяСхема.СвязиНаборовДанных.Очистить();

ВыбранныеПоля = ВременныеНастройки.Выбор.Элементы;
ВыбранныеПоля.Очистить();

ОтключитьОтборыПоПолюРекурсивно(ВременныеНастройки.Отбор.Элементы, Новый ПолеКомпоновкиДанных("СуммаРозн"));

ВременныеНастройки.УсловноеОформление.Элементы.Очистить();	
ВременныеНастройки.Структура.Очистить();

НоваяГруппировка = ВременныеНастройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
НоваяГруппировка.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));

НовоеПолеГруппировки = НоваяГруппировка.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
НовоеПолеГруппировки.Поле = Новый ПолеКомпоновкиДанных("Ссылка");

КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(ВременнаяСхема, ВременныеНастройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));

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

Очевидно, необходимо отключить отборы по полю СуммаРозн, если они есть, иначе временная схема не сгенерируется, поэтому используем рекурсивную процедуру:
Процедура ОтключитьОтборыПоПолюРекурсивно(ЭлементыОтбора, Поле)
	Для Каждого ЭлементОтбора Из ЭлементыОтбора Цикл
		Если ТипЗнч(ЭлементОтбора) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда
			Если ЭлементОтбора.ЛевоеЗначение = Поле Или ЭлементОтбора.ПравоеЗначение = Поле Тогда
				ЭлементОтбора.Использование = Ложь;
			КонецЕсли;
		Иначе
			ОтключитьОтборыПоПолюРекурсивно(ЭлементОтбора.Элементы, Поле)
		КонецЕсли;
	КонецЦикла;
КонецПроцедуры
Показать
umberto_nobile; +1 Ответить
9. umberto_nobile 5 26.05.20 09:46 Сейчас в теме
(8) Спасибо большое. это помогло.

ошибка была в строке:

Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию


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


всё заработало.
Оставьте свое сообщение

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