Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Получить текущий объект метаданных
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование управляемых форм 1С 8.2
Gigi
Привет всем!
Никто не подскажет как получить текущий элемент метаданных.
Рыл везде ... все что нашел .... нечто подобное ...
//Сообщить(Метаданные.Справочники[1]);
Для Каждого Справочник из Метаданные.Справочники Цикл
Сообщить (Справочник.Имя);
КонецЦикла;

А мне нужно не это, а нужно получить текущий элемент метаданных. Не по индексу не по указанию имени, а в зависимости от события.
Например при событии формы списка: СписокПередУдалением()
Тут в самом начале нужна линия кода, которая выдавала бы имя метаданных, к которому относиться текущий список.
Или на пример ФормаЭлемента и реквизиты. Где нужно получить имя объекта метаданных этой ФормаЭлемента.
Вот такой вот вопрос.
Буду признателен!
Vofka
Из
ЭтаФорма.ИмяФормы

можно узнать объект метаданных.

А вообще, если этот код будет писаться в форме - то и так понятно, что это за форма и к чему относится.
Bernet
Gigi @ Сегодня, 14:11 необходимо зарегистрироваться для просмотра ссылки ,
не совсем понятно описали что вам надо: именно имя объекта метаданных или просто тип значения?
если в контексте вашего примера с формой списка, то перед удалением можно получить имя метаданных следующим образом:
&НаКлиенте
Процедура СписокПередУдалением(Элемент, Отказ)
    
    ТекущаяСтрока = Элементы.Список.ТекущаяСтрока;
    
    ТекущийОбъектМетаданных = УзнатьОбъектНаСервере(ТекущаяСтрока);
    Сообщить(ТекущийОбъектМетаданных);
    
КонецПроцедуры

&НаСервере
Функция УзнатьОбъектНаСервере(СсылкаНаОбъект)
    
    ТекущийОбъект = СсылкаНаОбъект.ПолучитьОбъект();
    Возврат ТекущийОбъект.Метаданные().Имя;
    
КонецФункции

Одним словом - у вас всегда в форме есть ссылка на Объект. По этой ссылке вы можете или проверить тип значения, или если нужны метаданные взять код который я привел выше и вместо
Цитата
УзнатьОбъектНаСервере(ТекущаяСтрока);
на вход функции дать вашу ссылку
Gigi
Vofka @ Сегодня, 14:24 необходимо зарегистрироваться для просмотра ссылки ,
Цитата(Vofka @ 14.07.17, 14:24) необходимо зарегистрироваться для просмотра ссылки
ЭтаФорма.ИмяФормы

Код выдает адрес: Справчники.ИмяЭлемента.Форма.ФормаСписка(Выбора ...)
А нужно только Справчники.ИмяЭлемента и все.
Можно ли это одной командой без парса.

Bernet @ Сегодня, 14:26 необходимо зарегистрироваться для просмотра ссылки ,
Цитата(Bernet @ 14.07.17, 14:26) необходимо зарегистрироваться для просмотра ссылки
не совсем понятно описали что вам надо: именно имя объекта метаданных или просто тип значения?
если в контексте вашего примера с формой списка, то перед удалением можно получить имя метаданных следующим образом:

Вопрос решен! Работает .... спасибо! То что и было нужно.
быстро и конкретно.
Спасибо!


Gigi @ Сегодня, 14:38 необходимо зарегистрироваться для просмотра ссылки ,
Да ... еще хотел продолжить тему ... пожалуйста..
Все нормально только, еще один вопрос.
Как получить объект принадлежности текущего выделенного элемента списка.
Т.е. получить только то к чему имеет отношение выделенный элемент списка.... это Справочник документ, рег сведений и т.д. т.е. в данном случае это помоем у тип значения
Вот еще какой вопрос.
Буду вдвойне признателен!
Bernet
Gigi @ Сегодня, 14:48 необходимо зарегистрироваться для просмотра ссылки ,
Ну если у вас есть некий список с кучей разношерстных элементов, если там ссылки, то опять таки так как я писал выше. Например список:
Цитата
1) Вася Пупкин [СправочникСсылка.Контрагент]
2) Петров Петя [СправочникСсылка.ФизЛица]
3) Реализация товаров услуг № 1 от 01.01.2017 [ДокументСсылка.РеализацияТоваровУслуг]
4) Красный [ПланВидовХарактеристикСсылка.СвойстваОбъектов]
и т.д.

Регистр вы в список не запихнете, там не ссылка, там записи регистров, грубо говоря целые строки.
Но если у вас такой список как я привел, то моя функция вам вернет имя метаданных.
Цитата
&НаСервере
Функция УзнатьОбъектНаСервере(СсылкаНаОбъект)

ТекущийОбъект = СсылкаНаОбъект.ПолучитьОбъект();
Возврат ТекущийОбъект.Метаданные().Имя;

КонецФункции

В качестве ссылки на объект передавайте элемент вашего списка

а кажись допер что вы хотите: вы хотите получить корневой элемент, типа это Справочник или Документ или Регистр?
Тогда типа так:
&НаСервере
Функция УзнатьОбъектНаСервере(СсылкаНаОбъект)
    
    ТекущийОбъект = СсылкаНаОбъект.ПолучитьОбъект();
    
    ПолноеИмя = ТекущийОбъект.Метаданные().ПолноеИмя();
    
    ПозицияТочки = СтрНайти(ПолноеИмя, ".");
    
    Возврат Лев(ПолноеИмя, ПозицияТочки-1);
    
КонецФункции
Если у вас например была ссылка на справочник Контрагенты, то вызвав эту функцию получите слово "Справочник"
Gigi
Bernet @ Сегодня, 14:56 необходимо зарегистрироваться для просмотра ссылки ,
Цитата(Bernet @ 14.07.17, 14:56) необходимо зарегистрироваться для просмотра ссылки
В качестве ссылки на объект передавайте элемент вашего списка

Ну да передал как было указано...
 ТекущаяСтрока = Элементы.Список.ТекущаяСтрока;
ТекущийОбъектМетаданных = УзнатьОбъектНаСервере(ТекущаяСтрока);

Насколько понимаю элемент списка так и передается в функцию.
Но функция УзнатьОбъектНаСервере(СсылкаНаОбъект) передает имя. Нужна другая функция, которая передаст тип ... это справочник или документ. Ладно забудем о регистре ... фиг с ним.
Вот то, что нужно еще
Bernet
Gigi @ Сегодня, 15:15 необходимо зарегистрироваться для просмотра ссылки ,
если нужен тип в функции уберите имя
Цитата
ТекущийОбъект.Метаданные()

вернет вам непосредственно Метаданные, "Контрагенты", или полное имя "Справочник.Контрагенты"
Gigi
Цитата(Bernet @ 14.07.17, 15:08) необходимо зарегистрироваться для просмотра ссылки
Если у вас например была ссылка на справочник Контрагенты, то вызвав эту функцию получите слово "Справочник"

Ну ладно! Я думал без парса можно.
Но в остальном попробую и думаю буду доволен.
Bernet
Gigi @ Сегодня, 15:48 необходимо зарегистрироваться для просмотра ссылки ,
так пробовали? все равно не то?
Цитата
&НаСервере
Функция УзнатьОбъектНаСервере(СсылкаНаОбъект)

ТекущийОбъект = СсылкаНаОбъект.ПолучитьОбъект();

ПолноеИмя = ТекущийОбъект.Метаданные().ПолноеИмя();

ПозицияТочки = СтрНайти(ПолноеИмя, ".");

Возврат Лев(ПолноеИмя, ПозицияТочки-1);

КонецФункции
Brutok
попробуйте это
имяМетаданных = Объект.Ссылка.Метаданные().Имя;
Метаданные.Документы.Найти(имяМетаданных);
или
ТипЗнч(Объект.Ссылка)

Не пойму для чего вам это нужно. Более конкретней изложите тз?



vasya_nepupkin
Brutok @ Вчера, 20:47 необходимо зарегистрироваться для просмотра ссылки ,

Скорее всего это нужно для написания какого-то универсального кода?! Объект.Ссылка.Метаданные() отлично сработает для хранимых объектов типа Справочник, Документ, Задача и т. д., но не для обработок и отчетов..
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.