Имя: Пароль:
1C
 
Узнать метаданные.Справочники.Мой.Формы.Формв собственно из формы - невозможно!?
0 SZA
 
01.11.08
16:53
Привет.
Вот, например, находясь в форме списка справочника я никак не могу выйти на Метаданные.Справочники.ДанныйСправочник.Формы.ДаннаяФорма не прописывая это руками ?

Как бы это объяснить..  ..преположим уже существует вызов из любой формы конфигурации определенной глобальной процедуры ГлОтФорм(ЭтаФорма), но хочется, чтобы было понятно из какой именно части метаданных произошел вызов. Конкретнее - какая форма? Объект ЭтаФорма многое о себе рассказывает, но нет ссылки на собственные метаданные и нет собственного названия, чтобы хотя бы предпринять поиск по метаданным.
Я правильно понимаю, что если в окружении нет ЭтотОбъект, выйти на текущие метаданные уже невозможно!?
1 H A D G E H O G s
 
01.11.08
17:18
ЭтаФорма.Метаданные()
2 SZA
 
01.11.08
17:23
..щаз! "{(1)}: Метод объекта не обнаружен (метаданные)"
1С:Предприятие 8.1 (8.1.12.101)
3 Кадош
 
01.11.08
17:37
а вам зачем? (с)
4 Кадош
 
01.11.08
17:38
может быть Владелец?
5 MishaSan
 
01.11.08
17:38
метаданные.найтиПоТипу(ТипЗнч(Список))
6 ottto
 
01.11.08
21:22
Коряво можно так:

   Попытка
       Представление = Строка(Форма.Список);
       СсылкаОбъекта = Новый (Тип("СправочникСсылка." + Сред(Представление, 18)));
   Исключение
       Попытка
           СсылкаОбъекта = Новый (ТипЗнч(Форма.Ссылка));
       Исключение
           Возврат; //Это не наш объект!
       КонецПопытки;
   КонецПопытки;
7 TormozIT
 
гуру
01.11.08
22:00
В сериализованном виде в форме можно найти ее идентификатор. Потом получить каждую форму из менеджера и сравнивать их идентификаторы. Будет долго но надежно.
8 SZA
 
01.11.08
22:45
(3) УПП - сотни форм. Из любой из них может быть вызов нужной мне процедуры (ее
вызов добавляется интерактивно при открытии формы). Но мне нужно знать откуда.
Конкретно - метаданные..ТекущаяФорма. Прменений может быть масса. Мне свое
тяжело так в об объяснить.

(4) Владелец=неопределено

(6) да ну нету у ЭтаФорма ни "Список" ни "Ссылка".

(7) Расскажите пожалуйста - мне уже все равно как. Альтернатива только ходить
вставлять полное описание Метаданные..Форма во всех формах в вызов своей
гл.процедуры.
9 SZA
 
01.11.08
23:09
(6+) Вашу идею про сред(сокрлп(ЭтаФорма.СправочникСписок),18) понял. Жаль только у справочника может быть несколько форм с таким элементом - например форма выбора и форма списка. В общем это все гадание на кофейной гуще.
10 ЫЫЫЫ
 
02.11.08
00:53
Метаданные.НайтиПоТипу(ЭтаФорма.Отбор.Ссылка.ТипЗначения.Типы()[0])
11 ЫЫЫЫ
 
02.11.08
01:16
+10 Продолжение:

ТипОбъекта = ЭтаФорма.Отбор.Ссылка.ТипЗначения.Типы()[0];
МетаданныеОбъекта = Метаданные.НайтиПоТипу(ТипОбъекта);
Для Каждого МетаданныеФормы Из МетаданныеОбъекта.Формы Цикл
   Форма = Справочники[МетаданныеОбъекта.Имя].ПолучитьФорму(МетаданныеФормы.Имя, ВладелецФормы, КлючУникальности);
   Если Форма = ЭтаФорма Тогда
       Сообщить(МетаданныеФормы.ПолноеИмя());
   КонецЕсли;
КонецЦикла;
12 H A D G E H O G s
 
02.11.08
01:18
(11) Плохо
13 SZA
 
02.11.08
01:21
(10) да! черт возьми.. для форм списков и выбора справочников и документов это
идеально. .."отбор!? кто бы мог подумать".
Спасибо большое! Если принять два подхода с попытками, (второй подход через
ЭтотОбъект), то остаются неохваченными только общие формы конфигурации - таких
немного - там можно и руками проставить.
Хорошо что меня не интересуют в этой задаче "вторичные" (неосновные) формы
собственно объектов справочников, доков, обработок, отчетов, регистров. Как
получить их метаданные так и остается загадкой. Возможно - без ответа.
14 H A D G E H O G s
 
02.11.08
01:26
Для Каждого МетаданноеСправочник ИЗ Метаданные.Справочники Цикл
       Для Каждого МетаданноеТекущейФормы Из МетаданноеСправочник.Формы Цикл
           ТекущаяФорма=Справочники[МетаданноеСправочник.Имя].ПолучитьФорму(МетаданноеТекущейФормы);
           Если ТекущаяФорма=ЭтаФорма Тогда
               Сообщить(МетаданноеТекущейФормы.Синоним);
               Прервать;
           КонецЕсли;
       КонецЦикла;
   КонецЦикла;
15 H A D G E H O G s
 
02.11.08
01:27
Дольше, зато однозначно
16 H A D G E H O G s
 
02.11.08
01:30
Аналогично обходим Документы (если надо), и.т.д., а также
Метаданные.ОбщиеФормы
17 ЫЫЫЫ
 
02.11.08
01:31
(14)
Во-первых, не учитываются ВладелецФормы и КлючУникальности.
Во-вторых, на монстрообразных конфигурациях тормоза получатся нехилые.
18 SZA
 
02.11.08
01:32
(11) пока писал ответ - увидел продолжение, понял как получить "вторичные". выходит следует только выяснить справочник это или окумент/отчет/обработка.. ..а далее все можно найти.
спеку завтра код общий для всех случаев - может тут положу
19 ЫЫЫЫ
 
02.11.08
01:32
(15)А в чём неоднозначность (11)?
20 H A D G E H O G s
 
02.11.08
01:38
(19) У ФормаЭлемента, дополнительных форм есть Отбор?
ВладелецФормы может и надо учитывать, не проверял, но зачем КлючУникальности???
21 SZA
 
02.11.08
01:39
(17) да конфигурация монструозная.. перебор применять жалко. Пойду по пути предварительных попыток считать реквизиты и понять область конфигурации прежде чем произвести поиск по метаданным

Я вчера думал тут найдутся решения по поводу всяких недокументированных индексов объектов конфигурации - которые можно считать и использовать в поиске по метаданным :)
Вообще форма настолько неуниверсальный объект - почти каждый ее вариант (списки/объекты/свободные) нужно описывать отдельной попыткой получить ее реквизиты.. ..чего то тут 1С недосмотрела.
22 H A D G E H O G s
 
02.11.08
01:39
(17)
<<Во-вторых, на монстрообразных конфигурациях тормоза получатся нехилые.>>
Полностью согласен. Если результат нужен несколько раз - кэшируем :-)
23 ЫЫЫЫ
 
02.11.08
01:46
(20)
>>У ФормаЭлемента, дополнительных форм есть Отбор?
А, ну если брать совсем абстрактную форму тогда конечно, (11) именно под форму списка справочника заточено.

>>но зачем КлючУникальности?
Форма1 = МенеджерОбъекта.ПолучитьФорму(ИмяФормы, ВладелецФормы, "КлючУникальности1");
Форма2 = МенеджерОбъекта.ПолучитьФорму(ИмяФормы, ВладелецФормы, "КлючУникальности2");
Сообщить(Форма1 = Форма2);
24 H A D G E H O G s
 
02.11.08
01:48
(23) Не проверяя:
Ложь
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой