Версия для печати темы (https://pro1c.org.ua/index.php?s=4a04d5d3c780f9f940ab40eea8d06092&showtopic=38701)
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование управляемых форм 1С 8.2 _ Получить текущий объект метаданных
Автор: Gigi 14.07.17, 13:11
Привет всем!
Никто не подскажет как получить текущий элемент метаданных.
Рыл везде ... все что нашел .... нечто подобное ...
//Сообщить(Метаданные.Справочники[1]);
Для Каждого Справочник из Метаданные.Справочники Цикл
Сообщить (Справочник.Имя);
КонецЦикла;
А мне нужно не это, а нужно получить текущий элемент метаданных. Не по индексу не по указанию имени, а в зависимости от события.
Например при событии формы списка: СписокПередУдалением()
Тут в самом начале нужна линия кода, которая выдавала бы имя метаданных, к которому относиться текущий список.
Или на пример ФормаЭлемента и реквизиты. Где нужно получить имя объекта метаданных этой ФормаЭлемента.
Вот такой вот вопрос.
Буду признателен!
Автор: Vofka 14.07.17, 13:24
Из
ЭтаФорма.ИмяФормы
можно узнать объект метаданных.
А вообще, если этот код будет писаться в форме - то и так понятно, что это за форма и к чему относится.
Автор: Bernet 14.07.17, 13:26
Gigi @ Сегодня, 14:11
,
не совсем понятно описали что вам надо: именно имя объекта метаданных или просто тип значения?
если в контексте вашего примера с формой списка, то перед удалением можно получить имя метаданных следующим образом:
&НаКлиенте
Процедура СписокПередУдалением(Элемент, Отказ)
ТекущаяСтрока = Элементы.Список.ТекущаяСтрока;
ТекущийОбъектМетаданных = УзнатьОбъектНаСервере(ТекущаяСтрока);
Сообщить(ТекущийОбъектМетаданных);
КонецПроцедуры
&НаСервере
Функция УзнатьОбъектНаСервере(СсылкаНаОбъект)
ТекущийОбъект = СсылкаНаОбъект.ПолучитьОбъект();
Возврат ТекущийОбъект.Метаданные().Имя;
КонецФункции
Одним словом - у вас всегда в форме есть ссылка на Объект. По этой ссылке вы можете или проверить тип значения, или если нужны метаданные взять код который я привел выше и вместо
Цитата
УзнатьОбъектНаСервере(ТекущаяСтрока);
на вход функции дать вашу ссылку
Автор: Gigi 14.07.17, 13:48
Vofka @ Сегодня, 14:24
,
Цитата(Vofka @ 14.07.17, 14:24)
ЭтаФорма.ИмяФормы
Код выдает адрес: Справчники.ИмяЭлемента.Форма.ФормаСписка(Выбора ...)
А нужно только Справчники.ИмяЭлемента и все.
Можно ли это одной командой без парса.
Bernet @ Сегодня, 14:26
,
Цитата(Bernet @ 14.07.17, 14:26)
не совсем понятно описали что вам надо: именно имя объекта метаданных или просто тип значения?
если в контексте вашего примера с формой списка, то перед удалением можно получить имя метаданных следующим образом:
Вопрос решен! Работает .... спасибо! То что и было нужно.
быстро и конкретно.
Спасибо!
Gigi @ Сегодня, 14:38
,
Да ... еще хотел продолжить тему ... пожалуйста..
Все нормально только, еще один вопрос.
Как получить объект принадлежности текущего выделенного элемента списка.
Т.е. получить только то к чему имеет отношение выделенный элемент списка.... это Справочник документ, рег сведений и т.д. т.е. в данном случае это помоем у тип значения
Вот еще какой вопрос.
Буду вдвойне признателен!
Автор: Bernet 14.07.17, 14:08
Gigi @ Сегодня, 14:48
,
Ну если у вас есть некий список с кучей разношерстных элементов, если там ссылки, то опять таки так как я писал выше. Например список:
Цитата
1) Вася Пупкин [СправочникСсылка.Контрагент]
2) Петров Петя [СправочникСсылка.ФизЛица]
3) Реализация товаров услуг № 1 от 01.01.2017 [ДокументСсылка.РеализацияТоваровУслуг]
4) Красный [ПланВидовХарактеристикСсылка.СвойстваОбъектов]
и т.д.
Регистр вы в список не запихнете, там не ссылка, там записи регистров, грубо говоря целые строки.
Но если у вас такой список как я привел, то моя функция вам вернет имя метаданных.
Цитата
&НаСервере
Функция УзнатьОбъектНаСервере(СсылкаНаОбъект)
ТекущийОбъект = СсылкаНаОбъект.ПолучитьОбъект();
Возврат ТекущийОбъект.Метаданные().Имя;
КонецФункции
В качестве ссылки на объект передавайте элемент вашего списка
а кажись допер что вы хотите: вы хотите получить корневой элемент, типа это Справочник или Документ или Регистр?
Тогда типа так:
&НаСервере
Функция УзнатьОбъектНаСервере(СсылкаНаОбъект)
ТекущийОбъект = СсылкаНаОбъект.ПолучитьОбъект();
ПолноеИмя = ТекущийОбъект.Метаданные().ПолноеИмя();
ПозицияТочки = СтрНайти(ПолноеИмя, ".");
Возврат Лев(ПолноеИмя, ПозицияТочки-1);
КонецФункции
Если у вас например была ссылка на справочник Контрагенты, то вызвав эту функцию получите слово "Справочник"
Автор: Gigi 14.07.17, 14:15
Bernet @ Сегодня, 14:56
,
Цитата(Bernet @ 14.07.17, 14:56)
В качестве ссылки на объект передавайте элемент вашего списка
Ну да передал как было указано...
ТекущаяСтрока = Элементы.Список.ТекущаяСтрока;
ТекущийОбъектМетаданных = УзнатьОбъектНаСервере(ТекущаяСтрока);
Насколько понимаю элемент списка так и передается в функцию.
Но функция УзнатьОбъектНаСервере(СсылкаНаОбъект) передает имя. Нужна другая функция, которая передаст тип ... это справочник или документ. Ладно забудем о регистре ... фиг с ним.
Вот то, что нужно еще
Автор: Bernet 14.07.17, 14:22
Gigi @ Сегодня, 15:15
,
если нужен тип в функции уберите имя
Цитата
ТекущийОбъект.Метаданные()
вернет вам непосредственно Метаданные, "Контрагенты", или полное имя "Справочник.Контрагенты"
Автор: Gigi 14.07.17, 14:48
Цитата(Bernet @ 14.07.17, 15:08)
Если у вас например была ссылка на справочник Контрагенты, то вызвав эту функцию получите слово "Справочник"
Ну ладно! Я думал без парса можно.
Но в остальном попробую и думаю буду доволен.
Автор: Bernet 14.07.17, 14:51
Gigi @ Сегодня, 15:48
,
так пробовали? все равно не то?
Цитата
&НаСервере
Функция УзнатьОбъектНаСервере(СсылкаНаОбъект)
ТекущийОбъект = СсылкаНаОбъект.ПолучитьОбъект();
ПолноеИмя = ТекущийОбъект.Метаданные().ПолноеИмя();
ПозицияТочки = СтрНайти(ПолноеИмя, ".");
Возврат Лев(ПолноеИмя, ПозицияТочки-1);
КонецФункции
Автор: Brutok 14.07.17, 20:47
попробуйте это
имяМетаданных = Объект.Ссылка.Метаданные().Имя;
Метаданные.Документы.Найти(имяМетаданных);
или
ТипЗнч(Объект.Ссылка)
Не пойму для чего вам это нужно. Более конкретней изложите тз?
Автор: vasya_nepupkin 15.07.17, 1:19
Brutok @ Вчера, 20:47
,
Скорее всего это нужно для написания какого-то универсального кода?! Объект.Ссылка.Метаданные() отлично сработает для хранимых объектов типа Справочник, Документ, Задача и т. д., но не для обработок и отчетов..
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua