Имя: Пароль:
1C
1С v8
8.2 Определить Тип по Объекту метаданных
0 DragonCat
 
04.05.12
13:41
Поиск, к сожалению, ничего не дал, потому даже возникло подозрение, что вопрос дурацкий, из серии "как пройти на Дерибасовскую", но все же попробую:

Есть два реквизита. В одном - полное имя объекта метаданных (Справочник.Валюты например, строка естественно). Во втором - поле произвольного типа. Нужно сделать так, что бы при выборе первого поля во втором выбирались объекты только указанного вида метаданных, т.е. в приведенном примере - выбирались только объекты с типом Тип("СправочникСсылка.Валюты").
Для этого, как минимум, нужно сделать трансформацию: "Справочник.Валюты" ==> Тип("СправочникСсылка.Валюты") (ну, чтоб тип полю выбора прописать).
Как это можно сделать без использования CASE-структуры (с заменой "Справочник" ==> "СправочникСсылка" и т.д.), и можно ли вообще?
Как я понял, конструкции Метаданные.НайтиПоПолномуИмени("Справочник.Валюты").Тип не существует, к сожалению.
1 Deon
 
04.05.12
13:42
Чем тебе Case-структура не угодила?
2 Ненавижу 1С
 
гуру
04.05.12
13:42
СтрЗаменить(Поле,".","Ссылка.")
3 mikecool
 
04.05.12
13:43
заполнить правильно список выбора: в занчение тип, а в представление - что хошь
4 DragonCat
 
04.05.12
13:56
(2) Хоть метод и не универсальный, но по идее должен подойти - заодно и контроль ошибок реализуется. Спасибо за идею!
(3) Список выбора формируется стандартной формой БСП 1.2.2.3 "ВыборОбъектовМетаданных". Менять ее не хочется, да и лень.
5 unregistered
 
04.05.12
13:58
В порядке бредовой фантазии:

Запрос = новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЗНАЧЕНИЕ(" + МояСтрокаИзПервогоПоля + ".ПустаяСсылка) КАК ПустаяСсылкаНужногоТипа";
Выборка = Запрос.Выполнить().Выбрать().Следующий();
МоёВтороеПоле = Выборка.ПустаяСсылкаНужногоТипа;
6 unregistered
 
04.05.12
14:03
+ к (5): естественно может подойти только к объектам имеющим свойство ПустаяСсылка (документы, справочники, перечисления, ПВХ, ПВР, ПС).
7 DragonCat
 
04.05.12
14:07
(6) Конструкция:

   Попытка
       Элементы.Поле2.Доступность = Истина;
       Поле2.ДоступныеТипы.Типы().Добавить(Тип(СтрЗаменить(Поле1, ".", "Ссылка.")));
       Элементы.Поле2.КнопкаВыбора = Истина;
   Исключение
       Элементы.Поле2.Доступность = Ложь;
       Элементы.Поле2.КнопкаВыбора = Ложь;
   КонецПопытки;

Показалась мне более интересной и удобоваримой.