Имя: Пароль:
1C
1С v8
Программно определить тип формы и ее объект-владелец формы при открытии
0 Kaperang
 
17.04.12
09:27
Возникла необходимость определить тип и объект-владелец формы при открытии.
Например, "Форма списка" документа "Реализация товаров"

Пока придумал так:


Функция ТипФормыТипИмяОбъекта(ЭтаФорма)
 
 
  Объект = Неопределено;
  Попытка
     Объект = ЭтаФорма.ДокументОбъект;
  Исключение  
  КонецПопытки;
  Если Объект = Неопределено Тогда
     Попытка
        Объект = ЭтаФорма.ДокументСписок;
     Исключение  
     КонецПопытки;
  КонецЕсли;
  Если Объект = Неопределено Тогда
     Попытка
        Объект = ЭтаФорма.СправочникОбъект;
     Исключение  
     КонецПопытки;
  КонецЕсли;
  Если Объект = Неопределено Тогда
     Попытка
        Объект = ЭтаФорма.СправочникСписок;
     Исключение  
     КонецПопытки;
  КонецЕсли;
 
  Если Объект <> Неопределено Тогда
     ТипЗначения       = ТипЗнч(Объект);
     ТипЗначенияСтрока    = Строка(ТипЗначения);    //"ДокументСписок.РеализацияТоваров"
     
     
     ИмяОбъекта = Метаданные.НайтиПоТипу(ТипЗначения).Имя;
     
     ПоложениеТочки       = Найти(ТипЗначенияСтрока,":");
     ДлинаСтроки       = СтрДлина(ТипЗначенияСтрока);
     ЛеваяЧастьСтроки    = Лев(ТипЗначенияСтрока,ПоложениеТочки-1);
     
     ТипОбъекта = СтрЗаменить(ЛеваяЧастьСтроки," список","");
     ТипОбъекта = СтрЗаменить(ТипОбъекта," объект","");

     ТипФормы = СтрЗаменить(ЛеваяЧастьСтроки,"Документ ","");
     ТипФормы = СтрЗаменить(ТипФормы,"Справочник ","");

     //ПраваяЧастьСтроки   = Прав(ТипЗначенияСтрока,ДлинаСтроки - ПоложениеТочки);
     
     Структура = Новый Структура;
     Структура.Вставить("ТипФормы"  ,ТипФормы); //список
     Структура.Вставить("ТипОбъекта",ТипОбъекта);// документ
     Структура.Вставить("ИмяОбъекта",ИмяОбъекта);//РеализацияТоваров
     
     Возврат Структура;
  Иначе
     Возврат Неопределено;
  КонецЕсли;  
 
КонецФункции


Но через попытку-исключение как-то некрасиво. Может кто подскажет более элегантный способ обращения к основному реквизиту формы и выдергивания из него необходимых мне сведений?
1 ZanderZ
 
17.04.12
09:29
ТипЗнч(ЭтаФорма.ДокументОбъект)
2 butterbean
 
17.04.12
09:31
может разобрать строку ЭтаФорма.Данные??
3 Kaperang
 
17.04.12
09:51
(1) это если документ отрываем, а если справочник, то у него реквизита "ДокументОбъект" нету, и предлагемая Вами конструкция вывалится с исключением. У формы элемента справочника основной реквизит - "СправочникОбъект", у формы списка справочника - "СправочникСписок"
Если Вы повнимательнее прочитаете приведенный мною кусок кода, то увидите, что я пошел примерно тем же путем - сделал перебор этих реквзитов через "Попытка-Исключение..."
4 ZanderZ
 
17.04.12
10:02
(3) ну тогда можно попробовать элементы формы посмотреть
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн