Имя: Пароль:
1C
1С v8
СКД программно установить доступные значения поля
0 Lemkus
 
19.10.11
11:48
СКД
Нужно заполнить список доступных значений для поля программно. Чтобы потом пользователь в отборе мог указать только значения из этого списка.
Я пытаюсь делать так

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

Но в результате ничего не происходит.
1 Lemkus
 
19.10.11
11:54
Попробую поднять, а то информации по этому вопросу нигде не могу найти
2 sam_pfr
 
19.10.11
12:05
А где пользователь должен выбирать значение, если отчет сразу формируетя? И список доступных значений от чего зависит?
3 Lemkus
 
19.10.11
12:21
(2) Список значений приходит из другой базы.
Выбирать должен в отборе
Ну, по идее отчет можно и не выводить сразу, но все равно не работает
4 sam_pfr
 
19.10.11
12:35
Во-первых надо копать в сторону отбора, Настройки = КомпоновщикНастроек.Настройки; Настройки.Отбор и здесь устанавливаешь значения, в отладчике можно посмотреть поля, во-вторых вот эта строка КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию); стирает все твои изменения.
5 Defender aka LINN
 
19.10.11
12:40
(0) А инициализировать Компоновщик кто будет?
6 Lemkus
 
19.10.11
12:48
(4) Сори, да это строка осталась от экспериментов
Через отбор не получается сделать. Там нет возможности установить список доступных полей
7 Lemkus
 
19.10.11
12:49
(5) инициализировал, все равно никак
8 Defender aka LINN
 
19.10.11
12:51
Схема = ПолучитьМакет("СхемаКомпоновкиДанных");
СписокЗнч = Новый СписокЗначений;
СписокЗнч.Добавить("1111", "1111");
НаборДанных = Схема.НаборыДанных.Получить(0);    
ПолеИНН = НаборДанных.Поля.Получить(0);
ПолеИНН.УстановитьДоступныеЗначения(СписокЗнч);

СхемаКомпоновкиДанных = Схема;
9 Lemkus
 
19.10.11
12:56
(8) К сожалению, так тоже не получается
10 ll13
 
19.10.11
13:06
Для 8.2

ДоступныеЗначения = Новый СписокЗначений();
ДоступныеЗначения.Добавить(Истина, "Показывать");
ДоступныеЗначения.Добавить(Ложь, "Не показывать");

Параметры = СхемаКомпоновкиДанных.Параметры;
КоллекцияЗначенийПараметров = СхемаКомпоновкиДанных.НастройкиПоУмолчанию.ПараметрыДанных.Элементы;

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

Только по-хорошему перед добавлением Параметра и ЗначениеПараметраНастроек надо проверять на существование элементов в соответствующих коллекциях...
11 sam_pfr
 
19.10.11
13:14
Или Настройки.Отбор.ДоступныеПоляОтбора.Элементы[0].ДоступныеЗначения
12 sam_pfr
 
19.10.11
13:14
Содержит список значений
13 Lemkus
 
19.10.11
13:20
(10) Пробую, пишет, что
Коллекция параметров не может изменять свой состав, так как она связана с доступными параметрами
14 Lemkus
 
19.10.11
16:30
Я дошел до того, что решил изменять структуру xml файла, в который выгружается схема.
В xml файле изменил список допустимых значений у поля, но когда я загружаю схему, то ничего не изменяется
Похоже, я не понимаю каких-то основ СКД

ЧтениеXML = Новый ЧтениеXML;

Попытка
  ЧтениеXML.ОткрытьФайл("C:\****\схема.xml");
Исключение
  Сообщить("Невозможно открыть xml-файл");
  Возврат;
КонецПопытки;

СхемаКомпоновкиДанных = СериализаторXDTO.ПрочитатьXML(ЧтениеXML
                                     ,Тип("СхемаКомпоновкиДанных"));
КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);                                    
КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
ЧтениеXML.Закрыть();
15 Lemkus
 
19.10.11
16:31
(12) Этот метода тоже не подходит, как я понял ДоступныеПоляОтбора, это те которые заданы не программно (может я сильно ошибаюсь)
А добавлять отбор нужно программными методами
16 sam_pfr
 
20.10.11
08:34
Ну так для начала нужно установить доступные значения, а потом программно добавить нужный отбор. В отборе нет списка доступных значений.
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший