СКД. Программно изменить тип поля набора данных
Есть отчет на СКД. Запрос обращается к справочнику в расширении, поэтому напрямую в макет СКД запрос писать не выходит — СКД ругается, что нет такого справочника. Пришлось сделать упрощенный запрос-заглушку, в котором нужное поле описано так:
0 КАК НужныйСправочник
Потом в процедуре "При компоновке результата" запрос меняется на нужный. Отчет работает и выводит данные корректно.
Но есть необходимость в отборе по полю НужныйСправочник. Так как в макете СКД не указан тип этого поля, то СКД думает, что это число, и предлагает в отборе указать число. Нужно как-то научить СКД, что нужное мне поле имеет тип справочника из расширения, и чтобы отбор показывал данные из этого справочника для выбора пользователем.
Я попробовал сделать так:
При отладке можно увидеть, что тип поля набора данных действительно поменялся на нужный. Однако отбор все еще не понимает, что у поля тип НужныйСправочник, и всё также предлагает выбрать число. Как сделать, чтобы отбор был по данным справочника?
0 КАК НужныйСправочник
Потом в процедуре "При компоновке результата" запрос меняется на нужный. Отчет работает и выводит данные корректно.
Но есть необходимость в отборе по полю НужныйСправочник. Так как в макете СКД не указан тип этого поля, то СКД думает, что это число, и предлагает в отборе указать число. Нужно как-то научить СКД, что нужное мне поле имеет тип справочника из расширения, и чтобы отбор показывал данные из этого справочника для выбора пользователем.
Я попробовал сделать так:
СтандартнаяОбработка = Ложь;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
ПолеНужныйСправочник=СхемаКомпоновкиДанных.НаборыДанных.НаборДанных1.Поля.Найти("НужныйСправочник");
ПолеНужныйСправочник.ТипЗначения=Новый ОписаниеТипов("СправочникСсылка.НужныйСправочник");
СхемаКомпоновкиДанных.НаборыДанных.НаборДанных1.Запрос = ТекстЗапроса();
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,КомпоновщикНастроек.ПолучитьНастройки(),ДанныеРасшифровки);
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,,ДанныеРасшифровки);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
ПоказатьПри отладке можно увидеть, что тип поля набора данных действительно поменялся на нужный. Однако отбор все еще не понимает, что у поля тип НужныйСправочник, и всё также предлагает выбрать число. Как сделать, чтобы отбор был по данным справочника?
По теме из базы знаний
- 1С 8. СКД: смена типа «набор данных – запрос» на «набор данных – объект» с сохранением полей
- Учебный пример программного формирования схемы компоновки данных: Универсальный отчет по регистрам накопления
- Программная работа и компоненты СКД
- Онлайн-курс «Система компоновки данных (СКД) для разработки отчетов в 1С:Предприятии»
- Смена типа набора данных СКД с сохранением полей программно
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(5) Да, что то вроде:
ЭлементОтбораКомпоновкиДанных = НастройкиКомпоновки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбораКомпоновкиДанных.Использование = ЛОЖЬ;
ЭлементОтбораКомпоновкиДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка");
ЭлементОтбораКомпоновкиДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбораКомпоновкиДанных.ПравоеЗначение = Справочники.НужныйСправочник.ПустаяСсылка();
В общем оказалось, это я ошибся. И поместил код
в процедуру "при компоновке результата". Если вынести этот код за пределы процедур в модуле объекта, то тип у отбора также меняется на нужный.
ПолеНужныйСправочник=СхемаКомпоновкиДанных.НаборыДанных.НаборДанных1.Поля.Найти("НужныйСправочник");
ПолеНужныйСправочник.ТипЗначения=Новый ОписаниеТипов("СправочникСсылка.НужныйСправочник");в процедуру "при компоновке результата". Если вынести этот код за пределы процедур в модуле объекта, то тип у отбора также меняется на нужный.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот