СКД. Программно изменить тип поля набора данных

1. four-dimensional-cube 28.02.25 14:51 Сейчас в теме
Есть отчет на СКД. Запрос обращается к справочнику в расширении, поэтому напрямую в макет СКД запрос писать не выходит — СКД ругается, что нет такого справочника. Пришлось сделать упрощенный запрос-заглушку, в котором нужное поле описано так:

0 КАК НужныйСправочник

Потом в процедуре "При компоновке результата" запрос меняется на нужный. Отчет работает и выводит данные корректно.

Но есть необходимость в отборе по полю НужныйСправочник. Так как в макете СКД не указан тип этого поля, то СКД думает, что это число, и предлагает в отборе указать число. Нужно как-то научить СКД, что нужное мне поле имеет тип справочника из расширения, и чтобы отбор показывал данные из этого справочника для выбора пользователем.

Я попробовал сделать так:

СтандартнаяОбработка = Ложь;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;	
СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
ПолеНужныйСправочник=СхемаКомпоновкиДанных.НаборыДанных.НаборДанных1.Поля.Найти("НужныйСправочник");
ПолеНужныйСправочник.ТипЗначения=Новый ОписаниеТипов("СправочникСсылка.НужныйСправочник");
СхемаКомпоновкиДанных.НаборыДанных.НаборДанных1.Запрос = ТекстЗапроса();	
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,КомпоновщикНастроек.ПолучитьНастройки(),ДанныеРасшифровки);	
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,,ДанныеРасшифровки);	
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);	
Показать


При отладке можно увидеть, что тип поля набора данных действительно поменялся на нужный. Однако отбор все еще не понимает, что у поля тип НужныйСправочник, и всё также предлагает выбрать число. Как сделать, чтобы отбор был по данным справочника?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Sashares 33 28.02.25 14:59 Сейчас в теме
(1)
0 КАК НужныйСправочник

Может лучше тогда уж Неопределено или NULL?
4. four-dimensional-cube 28.02.25 15:05 Сейчас в теме
7. glek 119 28.02.25 16:54 Сейчас в теме
(1) Я выхожу из ситуации тем, что создаю отчет в расширении и потом выгружаю его во внешний (ну или со схемой: выгрузить/загрузить, но так не пробовал.)
3. Desere799 1116 28.02.25 15:01 Сейчас в теме
Попробуй изменить еще тип значения в отборе (в КомпоновщикНастроек.ПолучитьНастройки() )
5. four-dimensional-cube 28.02.25 15:26 Сейчас в теме
(3) К сожалению у объекта ЭлементОтбораКомпоновкиДанных нет свойства "Тип". Поэтому, видимо, на лету его менять нельзя.
6. Desere799 1116 28.02.25 15:33 Сейчас в теме
(5) Да, что то вроде:

ЭлементОтбораКомпоновкиДанных = НастройкиКомпоновки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбораКомпоновкиДанных.Использование = ЛОЖЬ;
ЭлементОтбораКомпоновкиДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка");
ЭлементОтбораКомпоновкиДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбораКомпоновкиДанных.ПравоеЗначение = Справочники.НужныйСправочник.ПустаяСсылка();
8. four-dimensional-cube 04.03.25 12:33 Сейчас в теме
В общем оказалось, это я ошибся. И поместил код

ПолеНужныйСправочник=СхемаКомпоновкиДанных.НаборыДанных.НаборДанных1.Поля.Найти("НужныйСправочник");
ПолеНужныйСправочник.ТипЗначения=Новый ОписаниеТипов("СправочникСсылка.НужныйСправочник");


в процедуру "при компоновке результата". Если вынести этот код за пределы процедур в модуле объекта, то тип у отбора также меняется на нужный.
9. SergiosMailz 04.07.25 18:39 Сейчас в теме
(8) Подскажите пожалуйста, в какую процедуру модуля объекта Вы вынесли этот код?
10. four-dimensional-cube 07.07.25 09:04 Сейчас в теме
(9) я оставил его вне любых процедур
SergiosMailz; +1 Ответить
Для отправки сообщения требуется регистрация/авторизация

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