Имя: Пароль:
1C
 
Как получить имя формы
0 n0ther
 
20.10.09
13:29
Есть открытая форма, есть массив в котором перечислены названия всех форм (поле "ИмяФормы", строка) этого объекта метаданных и некие дополнительные данные.

Как определить имя открытой формы, для того чтобы сделать отбор по этому массиву по полю "ИмяФормы"?
1 b4rs30
 
20.10.09
13:29
Никак
2 n0ther
 
20.10.09
13:31
(1) не верю :]
3 ice777
 
20.10.09
13:44
(0) В модуле формы ЭтаФорма... Там сам определись, что тебе надо: Заголовок?
4 b4rs30
 
20.10.09
13:45
(3) Там нет имени
5 n0ther
 
20.10.09
14:06
(3) не заголовок, а имя. например "ФормаДокумента" и т.д.
6 TheNewOne
 
20.10.09
14:09
(1) +1
Я долго искал. Даже во внутреннем представлении. Нету там имени.
7 b4rs30
 
20.10.09
14:11
(6) Товарищ не верит )
8 n0ther
 
20.10.09
14:13
(6) (7) если нету прямого решения, тогда должно быть решение "через ж." :]
9 Sakura
 
20.10.09
14:15
(8) а зачем тебе это вообще надо? )
10 n0ther
 
20.10.09
14:16
(9) гибкая настройка доступа к реквизитам и элементам формы документов
11 n0ther
 
20.10.09
14:33
на partners.v8.1c.ru такая проблема зарегистрирована 28.12.2004
ыыыы
12 Aprobator
 
20.10.09
14:38
неужели через метаданные никак форму не достать?
13 TheNewOne
 
20.10.09
14:40
(11) хехе :)
Единственное, что остается - идентифицировать форму по ее элементам. Либо вручную заводить на каждой форме невидимое текстовое поле, либо динамически при открытии. Криво со всех сторон.
(12) У формы нет метаданных. В через общие Метаданные можно получить все формы, однако сравнивать их текущей формой нельзя
14 n0ther
 
20.10.09
14:42
в общем сделал криво, но пока устраивает.
написал на хотлайн@1с "доколе будет твориться произвол" :]
15 vde69
 
20.10.09
14:42
роцедура ПередОткрытием(Отказ, СтандартнаяОбработка)
   
   //
   // тут проверим, может надо открыть другую форму
   
   // ВНИМАНИЕ!!! данный алгоритм возможно надо будет переделать, сравнение строк не надежно,
   // возможно совпадение с названиями в будующих БП
   Попытка
       АльтернативнаяФорма = Ссылка.ПолучитьФорму(СокрЛП(Ссылка.ТочкаМаршрута.Имя), ЭтаФорма.ВладелецФормы, ЭтаФорма.КлючУникальности);
   Исключение
       АльтернативнаяФорма = Неопределено;
   КонецПопытки;
   
   // позможно есть форма по умолчанию для этого БП
   Если АльтернативнаяФорма = Неопределено Тогда
       Если БизнесПроцесс.Метаданные().Имя = "Работа" Тогда
           АльтернативнаяФорма = Ссылка.ПолучитьФорму("ОсновнаяДляБПРабота", ЭтаФорма.ВладелецФормы, ЭтаФорма.КлючУникальности);
       КонецЕсли;        
   КонецЕсли;      
   
   // позможно есть форма по умолчанию для этого БП
   Если АльтернативнаяФорма = Неопределено Тогда
       Если БизнесПроцесс.Метаданные().Имя = "Согласование" Тогда
           АльтернативнаяФорма = Ссылка.ПолучитьФорму("ОсновнаяДляБПСогласование", ЭтаФорма.ВладелецФормы, ЭтаФорма.КлючУникальности);
       КонецЕсли;        
   КонецЕсли;
16 Mort
 
20.10.09
14:45
Функция ИмяЭтойФормы() Экспорт
   Возврат "ИмяФормыКакЕстьВКонфигурацииДляИзвращенцев";
КонецФункции
17 Aprobator
 
20.10.09
14:47
(13) у формы нет, а у основного реквизита формы есть.
18 vde69
 
20.10.09
14:48
не дописал у себя :)

   Если АльтернативнаяФорма <> Неопределено Тогда
       // есть специальная форма, надо работать с ней    
       АльтернативнаяФорма.ТолькоПросмотр = ЭтаФорма.ТолькоПросмотр;
       АльтернативнаяФорма.Открыть();
       АльтернативнаяФорма.Активизировать();
       Отказ = Истина;
       СтандартнаяОбработка = Ложь;
       Возврат;
   КонецЕсли;
19 n0ther
 
20.10.09
14:50
(16) в каждый документ вставлять эту функцию? я не настолько извращенец
(18) смотрю оО
Оо
оО
20 vde69
 
20.10.09
15:02
(19) этот код работает для "Задач", он по имени точки маршрута пытается найти и открыть форму с таким-же названием.


по сколько в Сабже не было упоминания о каких именно формах идет речь и вообще задача довольно мутная, то я не виноват :)
21 Mort
 
20.10.09
15:04
(19) Автор, а в каком модуле тебе нужно узнать имя формы?
22 TheNewOne
 
20.10.09
15:08
(17) Не всегда, есть например форма списка. Ну да ладно, по типу можно бы добраться до метаданных. Хуже другое, что до основного реквизита вообще говоря можно не добраться.
23 hhhh
 
20.10.09
15:12
(22) имя тебя не спасет. Смотря какой чел попадется: у него форма списка, а он ей даст имя "ФормаДокумента". Так что если универсальную настройку пишешь, то к имени привязываться не надо.
24 TheNewOne
 
20.10.09
15:22
(23)Не совсем понял. меня-то спасать не надо :) это автору нужно имя формы, ему видней зачем. А я говорю, что ни до имени формы, ни до хотя бы метаданных добраться не получается. Только если предварительного снабдить ВСЕ формы идентификационными данными.
25 n0ther
 
20.10.09
15:43
(20) не, это мне не подходит
(21) в модуле формы надо узнать имя формы

да собственно я решил для частного случая эту проблему.
26 hhhh
 
20.10.09
15:46
(24) да. Перепутал авторов.
27 n0ther
 
20.10.09
15:49
(26)
да ну как же не к имени? а чем можно еще уникально идентифицировать форму у конкретного объекта метаданных как не именем?
28 Mort
 
20.10.09
15:51
(25) В модуле формы имя формы является константой. см (16)
29 n0ther
 
20.10.09
16:01
(28)
ок. могу ли я получить имя (имя! сестра, имя! (с)) формы без добавления этой функции в каждый документ (ибо УПП) ?
30 Serg_1960
 
20.10.09
17:02
Для Каждого ФормаОбъекта Из ЭтотОбъект.Метаданные().Формы Цикл
       ИмяФормы = ФормаОбъекта.Имя;
       ТекФорма = ЭтотОбъект.ПолучитьФорму(ИмяФормы);
       Сообщить(ИмяФормы + " (" + ?(ТекФорма.Открыта(),"открыта","закрыта") + ")");
   КонецЦикла;
31 hhhh
 
20.10.09
17:12
(29) УПП не знаю, в БП я использовал 1С-овскую кнопку "Советы". Эта кнопка создается во всех формах документов, а ее создание в общем модуле.
32 Собеседник
 
20.10.09
17:14
(31)+

Имхо, определять надо не имя формы а источник данных
вот так
http://www.infostart.ru/public/57431/
33 Собеседник
 
20.10.09
17:16
(32) + как получен массив описанный в (0). (19) - противоречит (0)
34 TheNewOne
 
20.10.09
17:42
(32) если эта штука, как в ссылке заработает - это будет здорово. пока не работает "ошибка разбора xml", я еще покопаюсь.
А имя формы тоже можно похожим образов вытащить? автор про это спрашивает
(33) Не противоречит. Массив имен форм может быть сформирован интерактивно пользователем, где пользователь выбирает из списка форм, как определено в метаданных. Там же пользователь выбирает специальное действие, которое должно происходить с формой. А автор, воспользовавшись например способом (31), динамически хочет сделать с формой указанное действие.
35 Собеседник
 
20.10.09
17:53
(34) - (32) работает однозначно. просто надо внимательно разобратСО с кавачками :)

вот здесь
http://www.infostart.ru/public/20069/
использовал это.
Причем очеННО удачно