powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / [игнор отключен] [закрыт для гостей] / СКД добавление полей в набор данных программно
3 сообщений из 3, страница 1 из 1
СКД добавление полей в набор данных программно
    #39557712
ФайерРезист
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем доброго вечера, пришлось даже зарегистрироваться на форуме, что бы спросить более умных людей по одному вопрос. Немного предыстории.

Нужен мне отчет на СКД, но строиться он будет программно по таблице значений (опустим вопросы оптимальности и прочего, но мне изначально надо получить данные из другой базы, их совместить и дать пользователю удобное средство отбора)

Есть одно поле с типом ДокументСсылка, и раньше, я просто делал в запрос СКД ТипЗначения(МойДокументСсылка) и СКД волшебным образом понимал, что там описание типов, и в отборах показывал именно те документы для отбора, что нужно пользователю, т.. пользователь просто выбирал тип документа. Все это хорошо работает.

Теперь мне надо сделать СКД по таблице значений, я создаю набор данных, создаю поля, а типа в визуальном режиме то и нет нужного мне, я должен сделать тип="тип"

Что я начал делать, во первых создал поле в наборе данных программно:

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

Затем я добавляю в список доступных полей:

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

Инициализирую

авторКомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));

ну остатки:

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



Поле появилось в списке доступных полей в группировке, пользователь может его выбрать, все хорошо выводится, но вот нет его в списке доступных полей для отбора, хотя поля, которые добавлены в схему интерактивно все есть.



Подскажите, где я ошибся? Заранее спасибо за потраченное время.
...
Рейтинг: 0 / 0
СКД добавление полей в набор данных программно
    #39558018
ФайерРезист
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
подробности

ошибка точно вот тут:

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

беру любой другой тип
Новый ОписаниеТипов("СправочникСсылка.Контрагенты");

и все, поле доступно в отборах, но что ему нужно? если создать схему на основе запроса, там сидит тип "Тип"

затем я попробовал не определять тип вообще, комментирую эту строку, он появляется, но при выборе значения (правого значения) он мне дает выбор полей компоновки данных

для проверки добавил набор данных на основе запросе, в запросе сделал ТипЗначения() это поле стало доступно для выбора в отборах, но уже дает выбирать виды документов, так как мне и нужно. Смотрю в отладчике, то у этого поля в наборе данных действительно тип не определен.

Т.е. тип определять в наборе данных не нужно, но теперь понять не могу отличие этих полей
...
Рейтинг: 0 / 0
СКД добавление полей в набор данных программно
    #39558033
ФайерРезист
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вобщем понятно, что определять тип в наборе данных не нужно, а вот в доступных полях нужно.

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

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


Но когда доабвляю там нет свойства тип и тип значения, в отладчике после моего добавления неопределено, из-за этого он мне в отборе открывает список поле компоновки, вместо списка типов документов

дальше пытался перепоределить, но ясно понятно, что оно недоступно для записи

не понимаю что еще попробовать
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / [игнор отключен] [закрыт для гостей] / СКД добавление полей в набор данных программно
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]