|
СКД добавление полей в набор данных программно
|
|||
---|---|---|---|
#18+
Всем доброго вечера, пришлось даже зарегистрироваться на форуме, что бы спросить более умных людей по одному вопрос. Немного предыстории. Нужен мне отчет на СКД, но строиться он будет программно по таблице значений (опустим вопросы оптимальности и прочего, но мне изначально надо получить данные из другой базы, их совместить и дать пользователю удобное средство отбора) Есть одно поле с типом ДокументСсылка, и раньше, я просто делал в запрос СКД ТипЗначения(МойДокументСсылка) и СКД волшебным образом понимал, что там описание типов, и в отборах показывал именно те документы для отбора, что нужно пользователю, т.. пользователь просто выбирал тип документа. Все это хорошо работает. Теперь мне надо сделать СКД по таблице значений, я создаю набор данных, создаю поля, а типа в визуальном режиме то и нет нужного мне, я должен сделать тип="тип" Что я начал делать, во первых создал поле в наборе данных программно: авторНовоеПоле=СхемаКомпоновкиДанных.НаборыДанных.НаборДанных1.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных")); НовоеПоле.Заголовок="Тип документа"; НовоеПоле.ПутьКДанным="ТипДокумента"; НовоеПоле.Поле="ТипДокумента"; НовоеПоле.ТипЗначения=Новый ОписаниеТипов("Тип"); Затем я добавляю в список доступных полей: авторПолеВыбора = СхемаКомпоновкиДанных.ВариантыНастроек.Основной.Настройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); ПолеВыбора.Использование=истина; ПолеВыбора.Поле = Новый ПолеКомпоновкиДанных("ТипДокумента"); Инициализирую авторКомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных)); ну остатки: автор ТЗ=Запрос.Выполнить().Выгрузить(); ВнешниеНаборыДанных = новый Структура ; ВнешниеНаборыДанных.Вставить( "ТЗ" , ТЗ ) ; Настройки = КомпоновщикНастроек.Настройки; КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки,ЭтотОбъект.Расшифровка); ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,ВнешниеНаборыДанных,ЭтотОбъект.Расшифровка ); ДокументРезультат.Очистить(); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(ДокументРезультат); ПроцессорВывода.Вывести(ПроцессорКомпоновки); Поле появилось в списке доступных полей в группировке, пользователь может его выбрать, все хорошо выводится, но вот нет его в списке доступных полей для отбора, хотя поля, которые добавлены в схему интерактивно все есть. Подскажите, где я ошибся? Заранее спасибо за потраченное время. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2017, 17:12 |
|
СКД добавление полей в набор данных программно
|
|||
---|---|---|---|
#18+
подробности ошибка точно вот тут: авторНовоеПоле=СхемаКомпоновкиДанных.НаборыДанных.НаборДанных1.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных")); НовоеПоле.Заголовок="Тип документа"; НовоеПоле.ПутьКДанным="ТипДокумента"; НовоеПоле.Поле="ТипДокумента"; НовоеПоле.ТипЗначения=Новый ОписаниеТипов("Тип"); беру любой другой тип Новый ОписаниеТипов("СправочникСсылка.Контрагенты"); и все, поле доступно в отборах, но что ему нужно? если создать схему на основе запроса, там сидит тип "Тип" затем я попробовал не определять тип вообще, комментирую эту строку, он появляется, но при выборе значения (правого значения) он мне дает выбор полей компоновки данных для проверки добавил набор данных на основе запросе, в запросе сделал ТипЗначения() это поле стало доступно для выбора в отборах, но уже дает выбирать виды документов, так как мне и нужно. Смотрю в отладчике, то у этого поля в наборе данных действительно тип не определен. Т.е. тип определять в наборе данных не нужно, но теперь понять не могу отличие этих полей ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2017, 09:00 |
|
СКД добавление полей в набор данных программно
|
|||
---|---|---|---|
#18+
Вобщем понятно, что определять тип в наборе данных не нужно, а вот в доступных полях нужно. КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных)); ПолеВыбора = КомпоновщикНастроек.Настройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); ПолеВыбора.Использование=истина; ПолеВыбора.Поле = Новый ПолеКомпоновкиДанных("ТипДокумента"); //КомпоновщикНастроек.Настройки.Выбор.ДоступныеПоляВыбора.Элементы.найти("ТипДокумента").Тип=Новый ОписаниеТипов("Тип"); //КомпоновщикНастроек.Настройки.Выбор.ДоступныеПоляВыбора.Элементы.найти("ТипДокумента").ТипЗначения=Новый ОписаниеТипов("Тип"); Но когда доабвляю там нет свойства тип и тип значения, в отладчике после моего добавления неопределено, из-за этого он мне в отборе открывает список поле компоновки, вместо списка типов документов дальше пытался перепоределить, но ясно понятно, что оно недоступно для записи не понимаю что еще попробовать ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2017, 09:15 |
|
|
start [/forum/topic.php?fid=28&fpage=9&tid=1518438]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
60ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 154ms |
0 / 0 |