0
Kaperang
17.04.12
✎
09:27
|
Возникла необходимость определить тип и объект-владелец формы при открытии.
Например, "Форма списка" документа "Реализация товаров"
Пока придумал так:
Функция ТипФормыТипИмяОбъекта(ЭтаФорма)
Объект = Неопределено;
Попытка
Объект = ЭтаФорма.ДокументОбъект;
Исключение
КонецПопытки;
Если Объект = Неопределено Тогда
Попытка
Объект = ЭтаФорма.ДокументСписок;
Исключение
КонецПопытки;
КонецЕсли;
Если Объект = Неопределено Тогда
Попытка
Объект = ЭтаФорма.СправочникОбъект;
Исключение
КонецПопытки;
КонецЕсли;
Если Объект = Неопределено Тогда
Попытка
Объект = ЭтаФорма.СправочникСписок;
Исключение
КонецПопытки;
КонецЕсли;
Если Объект <> Неопределено Тогда
ТипЗначения = ТипЗнч(Объект);
ТипЗначенияСтрока = Строка(ТипЗначения); //"ДокументСписок.РеализацияТоваров"
ИмяОбъекта = Метаданные.НайтиПоТипу(ТипЗначения).Имя;
ПоложениеТочки = Найти(ТипЗначенияСтрока,":");
ДлинаСтроки = СтрДлина(ТипЗначенияСтрока);
ЛеваяЧастьСтроки = Лев(ТипЗначенияСтрока,ПоложениеТочки-1);
ТипОбъекта = СтрЗаменить(ЛеваяЧастьСтроки," список","");
ТипОбъекта = СтрЗаменить(ТипОбъекта," объект","");
ТипФормы = СтрЗаменить(ЛеваяЧастьСтроки,"Документ ","");
ТипФормы = СтрЗаменить(ТипФормы,"Справочник ","");
//ПраваяЧастьСтроки = Прав(ТипЗначенияСтрока,ДлинаСтроки - ПоложениеТочки);
Структура = Новый Структура;
Структура.Вставить("ТипФормы" ,ТипФормы); //список
Структура.Вставить("ТипОбъекта",ТипОбъекта);// документ
Структура.Вставить("ИмяОбъекта",ИмяОбъекта);//РеализацияТоваров
Возврат Структура;
Иначе
Возврат Неопределено;
КонецЕсли;
КонецФункции
Но через попытку-исключение как-то некрасиво. Может кто подскажет более элегантный способ обращения к основному реквизиту формы и выдергивания из него необходимых мне сведений?
|
|
3
Kaperang
17.04.12
✎
09:51
|
(1) это если документ отрываем, а если справочник, то у него реквизита "ДокументОбъект" нету, и предлагемая Вами конструкция вывалится с исключением. У формы элемента справочника основной реквизит - "СправочникОбъект", у формы списка справочника - "СправочникСписок"
Если Вы повнимательнее прочитаете приведенный мною кусок кода, то увидите, что я пошел примерно тем же путем - сделал перебор этих реквзитов через "Попытка-Исключение..."
|
|