Имя: Пароль:
1C
 
v8: СКД: Программные настройки
0 WebTraveller
 
08.04.10
17:05
Добрый день.
Подскажите пожалуйста как программно добавить доступыные поля выбора в СКД.
Пробую делать так:
   КомпоновщикНастроек.ПолучитьНастройки().ДоступныеПоляВыбора.Элементы.

Но там только Получить(), Индекс() и т.д.
а добавить() нет
1 Defender aka LINN
 
08.04.10
17:06
Потому что в компоновщике настроек, как ни парадоксально, только настройки.
2 WebTraveller
 
08.04.10
20:06
Не зная до конца вопроса лучше вообще не отвечать
СКД можно полностью настраивать динамически
3 Лефмихалыч
 
08.04.10
20:19
(2) спасибо, давно так не смеялся :))
4 WebTraveller
 
08.04.10
20:20
А че тут смешного??
5 Лефмихалыч
 
08.04.10
20:20
(1) он тебя раскусил, посыпай голову пеплом :))
6 WebTraveller
 
08.04.10
20:22
Тоесть вы утверждаете что ни группировки, ни доступные поля нельзя динамически добавить в СКД???
7 Лефмихалыч
 
08.04.10
20:22
(4) обе строчки второго поста гомерически смешные.
(6) группировки можно, доступные поля - нет.
8 WebTraveller
 
08.04.10
20:25
(7)
ну так посмотри вот на этот код и посыпь себе голову чем посчитаешь нужным!

Схема = Новый СхемаКомпоновкиДанных;
     
     ИсточникДанных = Схема.ИсточникиДанных.Добавить();
     ИсточникДанных.Имя = "ИсточникДанных1";
     ИсточникДанных.ТипИсточникаДанных ="Local";
     ИсточникДанных.СтрокаСоединения  ="";
     
     НаборДанных = Схема.НаборыДанных.Добавить(ТИП("НаборДанныхЗапросСхемыКомпоновкиДанных"));
     НаборДанных.Имя =  "НаборДанных1";
     НаборДанных.Запрос= "ВЫБРАТЬ * ИЗ Справочник.Номенклатура " ;
     НаборДанных.ИсточникДанных ="ИсточникДанных1";
     ПолеСсылка = НаборДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
     ПолеСсылка.Поле = "Ссылка";
     ПолеСсылка.ПутьКДанным = "Ссылка";
     ПолеСсылка.Заголовок ="Номенклатура";
     
     ПолеКод= НаборДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
     ПолеКод.Поле = "Код";
     ПолеКод.ПутьКДанным = "Код";
     ПолеКод.Заголовок ="Код";
     
     Настройки=КомпоновщикНастроек.ПолучитьНастройки();
     Группировка = Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));  
     Группировка.Использование =Истина;

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


Вот тебе ПОЛНАЯ динамическая настройка СКД.
9 Лефмихалыч
 
08.04.10
20:27
(8) опять насмешил. Видишь ли... Как бы это?... Есть небольшая разница между добавлением полей в набор данны и добавлением полей в доступные поля компоновки данных
10 WebTraveller
 
08.04.10
20:29
Может немного неправильно поставил вопрос. Согласен. Задача состояла в том что в скд передается динамически созданный запрос, с заранее неизвесными полями. Надо обеспечить вывод всего этого через СКД
11 Лефмихалыч
 
08.04.10
20:35
(10) ну, вот, когда пальцы не гнешь, с тобой можно говорить :)
Если запрос выбирает данные из одной таблицы (справочник, регистр), то через Метаданные можно получить поля этой таблтицы. Есть про таблицу вообще ни чего не известно, то навреное только автозаполнение полей что-то даст
12 Defender aka LINN
 
08.04.10
20:38
(2) ДА ЛАДНО???!!
(8) Ты мне что, на полном серьезе утверждаешь, что написал вот это полностью сам:

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

И после этого спрашиваешь (0)?
13 WebTraveller
 
08.04.10
20:40
(11) Да никто и не собирался ничего загибать.
Запрос сложный, в нем куча соединений, куча параметров, заранее тоже неизвестных
(12) Это просто пример. В моем случае все намного сложнее
14 Defender aka LINN
 
08.04.10
20:54
(13) Что пример - это понятно. Но человек, который способен написать (12), должен бы и сам на (0) ответить. Точнее, понять, что в (0) - бессмысленный вопрос.
15 WebTraveller
 
08.04.10
20:57
Я ж вроде согласился что неправильно поставил вопрос
16 Defender aka LINN
 
08.04.10
21:02
(15) Допустим.

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

Это что тогда? Не ответ на (0), нет?
17 Лефмихалыч
 
08.04.10
21:03
(15) так в чем вопрос? как добавить в компоновку неизвестно что?
вот это только поможет:

НаборДанныхЗапросСхемыКомпоновкиДанных.АвтоЗаполнениеДоступныхПолей (DataCompositionSchemaDataSetQuery.AutoFillAvailableFields)
НаборДанныхЗапросСхемыКомпоновкиДанных (DataCompositionSchemaDataSetQuery)
АвтоЗаполнениеДоступныхПолей (AutoFillAvailableFields)
Использование:
Чтение и запись.
Описание:
Тип: Булево. Указывает на необходимость автоматического заполнения доступных полей на основании текста запроса.

(16) так он не знает ни чего о том, что там в наборе по ходу
18 WebTraveller
 
08.04.10
22:43
Блин.. Не хватает мозгов.. помогите...

Отчет должен выводится в таблицу. Упрощенный код:

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


Вопросы. Как строку "категория" подчинить компоненте.
И еще не выводятся значения группировок. Я так понимаю не заполнены ресурсы.
Как добавить их динамически???
19 WebTraveller
 
08.04.10
23:37
с ресурсами вопрос отпал. Хрусталева помогла..
а вот с подчинением группировки остался...
20 WebTraveller
 
08.04.10
23:54
Вопрос отпал. Тему можно закрывать
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан