![]() |
![]() |
![]() |
|
Получить строку имени Типа из самого типа. | ☑ | ||
---|---|---|---|---|
0
Said_We
04.03.08
✎
18:17
|
Код примерно можно придумать такой
Для каждого Справочник Из Метаданные.Справочники Цикл Для каждого Реквизит Из Справочник.Реквизиты Цикл МассивТипов = Реквизит.Тип.Типы(); Для каждого ЭлементМассива Из МассивТипов Цикл ИмяТипа = ????; Строка(ЭлементМассива) возвращает строку вида "Справочник ссылка: <Синоним>". А как бы <Имя> вытащить? Или я сегодня туплю или этого просто сделать нельзя. |
|||
1
Злой Бобр
04.03.08
✎
18:21
|
Какое имя? Может Идентификатор???
|
|||
2
Said_We
04.03.08
✎
18:36
|
(1) Это 8.х
|
|||
3
Said_We
04.03.08
✎
18:37
|
(1) "Идентификатор()" - бывает только у Компановки данных. А тут речь совсем о другом.
|
|||
4
Злобный Фей
04.03.08
✎
18:40
|
Вроде низзя
|
|||
5
Said_We
04.03.08
✎
18:46
|
(4) Можно. В КД подсмотрел.
XMLТип(ЭлементМассива) Только потом надо строку немного обрезать до точки включительно "CatalogRef.<Имя>" |
|||
6
Said_We
04.03.08
✎
18:47
|
Результат = XMLТип(Тип).ИмяТипа;
Результат = СтрЗаменить(Результат, "CatalogRef", "СправочникСсылка"); Результат = СтрЗаменить(Результат, "DocumentRef", "ДокументСсылка"); Результат = СтрЗаменить(Результат, "EnumRef", "ПеречислениеСсылка"); Результат = СтрЗаменить(Результат, "ChartOfAccountsRef", "ПланСчетовСсылка"); Результат = СтрЗаменить(Результат, "ChartOfCharacteristicTypesRef", "ПланВидовХарактеристикСсылка"); Результат = СтрЗаменить(Результат, "ChartOfCalculationTypesRef", "ПланВидовРасчетаСсылка"); Результат = СтрЗаменить(Результат, "ExchangePlanRef", "ПланОбменаСсылка"); Результат = СтрЗаменить(Результат, "BusinessProcessRef", "БизнесПроцессСсылка"); Результат = СтрЗаменить(Результат, "BusinessProcessRoutePointRef", "ТочкаМаршрутаБизнесПроцессаСсылка"); Результат = СтрЗаменить(Результат, "TaskRef", "ЗадачаСсылка"); |
|||
7
asady
04.03.08
✎
18:47
|
(0) ты хочешь менеджера объекта получить что-ли?
если да - то тип можешь не ковырять. Есть другой способ.... |
|||
8
Said_We
04.03.08
✎
18:52
|
(7) Я хочу получив тип реквизита вытащить его возможные типы.
Какой? Новый(ЭлементМассива) ?... Только к имени там тоже не достучишься, так как ссылки нету... можно конечно объект новый создать, но что-то по моему это долго слишком. |
|||
9
Said_We
04.03.08
✎
19:02
|
Неа и новый объект таким образом не создашь....
|
|||
10
Said_We
04.03.08
✎
19:05
|
ОписаниеТипов (TypeDescription)
Типы (Types) Синтаксис: Типы() Возвращаемое значение: Тип: Массив. Массив значений типа Тип, состоящий из используемых типов. Описание: Получает типы, используемые в объекте. Пример: // Заполнение списка типов документов по указанному элементу формы // Элемент - элемент формы, имеющий составной тип СписокТиповДокументов = Новый СписокЗначений; Для каждого ТипДокумента Из Элемент.ТипЗначения.Типы() Цикл ДокументСсылка = Новый(ТипДокумента); Имя = ДокументСсылка.Метаданные().Имя; Синоним = ДокументСсылка.Метаданные().Синоним; СписокТиповДокументов.Добавить(Имя, Синоним); КонецЦикла; Может это для элементов диалога и работает, но для методанных ТИПЫ() видать что-то немного другое внутри возвращает. |
|||
11
asady
04.03.08
✎
19:06
|
(8) Зачем имя типа тебе?
|
|||
12
Said_We
04.03.08
✎
19:10
|
Прикольно в отладчике не работает на прямую так...
Новый(ЭлементМассива).Метаданные() Надо на две разбивать. |
|||
13
Said_We
04.03.08
✎
19:12
|
строчки имеется ввиду
|
|||
14
Собеседник
04.03.08
✎
21:46
|
Может это?
//------------------------------------------------------------------------------------ // <Описание функции> // Параметры // внКлюч – <Тип,ОписаниТипов,Строка,ОбъектМетаданных,Объект,Ссылка> // внПолучитьПредопределенные – <Булево,Число,Строка> // // Возвращаемое значение: // Результат – Неопределено или структура Функция обПолучитьОписаниеОбъектаМетаданных(внКлюч = "",Знач внПолучитьПредопределенные = Ложь) Экспорт Если ТипЗнч(внПолучитьПредопределенные) = Тип("Булево") Тогда внПолучитьПредопределенные = внПолучитьПредопределенные; ИначеЕсли ТипЗнч(внПолучитьПредопределенные) = Тип("Число") Тогда Если внПолучитьПредопределенные = 1 Тогда внПолучитьПредопределенные = Истина; КонецЕсли; ИначеЕсли ТипЗнч(внПолучитьПредопределенные) = Тип("Строка") Тогда Если ВРЕГ(СокрЛП(внПолучитьПредопределенные)) = "ДА" Тогда внПолучитьПредопределенные = Истина; КонецЕсли; Иначе внПолучитьПредопределенные = Ложь; КонецЕсли; мТипЗнч = ТипЗнч(внКлюч); мПолноеИмя = ""; мИмя = ""; мКоллекция = ""; мТип = Неопределено; мМенеджер = Неопределено; мМетаданныеТипа = Неопределено; мПреопределенные= Неопределено; Если мТипЗнч = Неопределено Тогда // Тип значения не определен Возврат ( Неопределено ); ИначеЕсли мТипЗнч = Тип("Тип") Тогда // в качестве ключа передан тип мМетаданныеТипа = Метаданные.НайтиПоТипу(внКлюч); ИначеЕсли мТипЗнч = Тип("ОписаниеТипов") Тогда Если внКлюч.Типы().Количество() > 0 Тогда мТипЗнч = внКлюч.Типы()[0]; Иначе Возврат ( Неопределено ); КонецЕсли; мМетаданныеТипа = Метаданные.НайтиПоТипу(мТипЗнч); ИначеЕсли мТипЗнч = Тип("Строка") Тогда мТипЗнч = Неопределено; Попытка мТипЗнч = Тип(внКлюч); Исключение КонецПопытки; Если мТипЗнч = Неопределено Тогда Возврат ( Неопределено ); КонецЕсли; мМетаданныеТипа = Метаданные.НайтиПоТипу(мТипЗнч); ИначеЕсли мТипЗнч = Тип("ОбъектМетаданных") Тогда мМетаданныеТипа = внКлюч; Иначе // возможно объект или ссылка Попытка мМетаданныеТипа = Метаданные.НайтиПоТипу(мТипЗнч); Исключение КонецПопытки; КонецЕсли; Если ТипЗнч(мМетаданныеТипа) = Тип("ОбъектМетаданных") Тогда Иначе Возврат ( Неопределено ); КонецЕсли; //------------------------------------------------------------------- мПолучитьПредопределенные = Ложь; Если Метаданные.Константы.Содержит(мМетаданныеТипа) Тогда // Это константа мПолноеИмя = "Константа."+мМетаданныеТипа.Имя; мИмя = мМетаданныеТипа.Имя; мКоллекция = "Константы"; мМенеджер = Константы[мМетаданныеТипа.Имя]; мТип = ТипЗнч(мМенеджер); ИначеЕсли Метаданные.Справочники.Содержит(мМетаданныеТипа) Тогда // Это справочник мПолноеИмя = "Справочник."+мМетаданныеТипа.Имя; мИмя = мМетаданныеТипа.Имя; мКоллекция = "Справочники"; мМенеджер = Справочники[мМетаданныеТипа.Имя]; мТип = ТипЗнч(мМенеджер); мПолучитьПредопределенные = внПолучитьПредопределенные; ИначеЕсли Метаданные.Документы.Содержит(мМетаданныеТипа) Тогда // Это документ мПолноеИмя = "Документ."+мМетаданныеТипа.Имя; мИмя = мМетаданныеТипа.Имя; мКоллекция = "Документы"; мМенеджер = Документы[мМетаданныеТипа.Имя]; мТип = ТипЗнч(мМенеджер); ИначеЕсли Метаданные.Перечисления.Содержит(мМетаданныеТипа) Тогда // Это перечисление мПолноеИмя = "Перечисление."+мМетаданныеТипа.Имя; мИмя = мМетаданныеТипа.Имя; мКоллекция = "Перечисления"; мМенеджер = Перечисления[мМетаданныеТипа.Имя]; мТип = ТипЗнч(мМенеджер); ИначеЕсли Метаданные.Отчеты.Содержит(мМетаданныеТипа) Тогда // Это отчет мПолноеИмя = "Отчет."+мМетаданныеТипа.Имя; мИмя = мМетаданныеТипа.Имя; мКоллекция = "Отчеты"; мМенеджер = Отчеты[мМетаданныеТипа.Имя]; мТип = ТипЗнч(мМенеджер); ИначеЕсли Метаданные.Обработки.Содержит(мМетаданныеТипа) Тогда // Это отчет мПолноеИмя = "Обработка."+мМетаданныеТипа.Имя; мИмя = мМетаданныеТипа.Имя; мКоллекция = "Обработки"; мМенеджер = Обработки[мМетаданныеТипа.Имя]; мТип = ТипЗнч(мМенеджер); ИначеЕсли Метаданные.ПланыВидовХарактеристик.Содержит(мМетаданныеТипа) Тогда // Это план Видов Характеристик мПолноеИмя = "ПланВидовХарактеристик."+мМетаданныеТипа.Имя; мИмя = мМетаданныеТипа.Имя; мКоллекция = "ПланыВидовХарактеристик"; мМенеджер = ПланыВидовХарактеристик[мМетаданныеТипа.Имя]; мТип = ТипЗнч(мМенеджер); мПолучитьПредопределенные = внПолучитьПредопределенные; ИначеЕсли Метаданные.ПланыСчетов.Содержит(мМетаданныеТипа) Тогда // Это план счетов мПолноеИмя = "ПланСчетов."+мМетаданныеТипа.Имя; мИмя = мМетаданныеТипа.Имя; мКоллекция = "ПланыСчетов"; мМенеджер = ПланыСчетов[мМетаданныеТипа.Имя]; мТип = ТипЗнч(мМенеджер); мПолучитьПредопределенные = внПолучитьПредопределенные; ИначеЕсли Метаданные.ПланыВидовРасчета.Содержит(мМетаданныеТипа) Тогда // Это план ВидовРасчета мПолноеИмя = "ПланВидовРасчета."+мМетаданныеТипа.Имя; мИмя = мМетаданныеТипа.Имя; мКоллекция = "ПланыВидовРасчета"; мМенеджер = ПланыВидовРасчета[мМетаданныеТипа.Имя]; мТип = ТипЗнч(мМенеджер); мПолучитьПредопределенные = внПолучитьПредопределенные; ИначеЕсли Метаданные.РегистрыСведений.Содержит(мМетаданныеТипа) Тогда // Это регистр РегистрСведений мПолноеИмя = "РегистрСведений."+мМетаданныеТипа.Имя; мИмя = мМетаданныеТипа.Имя; мКоллекция = "РегистрыСведений"; мМенеджер = РегистрыСведений[мМетаданныеТипа.Имя]; мТип = ТипЗнч(мМенеджер); ИначеЕсли Метаданные.РегистрыНакопления.Содержит(мМетаданныеТипа) Тогда // Это регистр РегистрНакопления мПолноеИмя = "РегистрНакопления."+мМетаданныеТипа.Имя; мИмя = мМетаданныеТипа.Имя; мКоллекция = "РегистрыНакопления"; мМенеджер = РегистрыНакопления[мМетаданныеТипа.Имя]; мТип = ТипЗнч(мМенеджер); ИначеЕсли Метаданные.РегистрыБухгалтерии.Содержит(мМетаданныеТипа) Тогда // Это регистр Бухгалтерии мПолноеИмя = "РегистрБухгалтерии."+мМетаданныеТипа.Имя; мИмя = мМетаданныеТипа.Имя; мКоллекция = "РегистрыБухгалтерии"; мМенеджер = РегистрыБухгалтерии[мМетаданныеТипа.Имя]; мТип = ТипЗнч(мМенеджер); ИначеЕсли Метаданные.РегистрыРасчета.Содержит(мМетаданныеТипа) Тогда // Это регистр РегистрРасчета мПолноеИмя = "РегистрРасчета."+мМетаданныеТипа.Имя; мИмя = мМетаданныеТипа.Имя; мКоллекция = "РегистрыРасчета"; мМенеджер = РегистрыРасчета[мМетаданныеТипа.Имя]; мТип = ТипЗнч(мМенеджер); ИначеЕсли Метаданные.БизнесПроцессы.Содержит(мМетаданныеТипа) Тогда // Это план БизнесПроцесс мПолноеИмя = "БизнесПроцесс."+мМетаданныеТипа.Имя; мИмя = мМетаданныеТипа.Имя; мКоллекция = "БизнесПроцессы"; мМенеджер = БизнесПроцессы[мМетаданныеТипа.Имя]; мТип = ТипЗнч(мМенеджер); ИначеЕсли Метаданные.Задачи.Содержит(мМетаданныеТипа) Тогда // Это план Задача мПолноеИмя = "БизнесПроцесс."+мМетаданныеТипа.Имя; мИмя = мМетаданныеТипа.Имя; мКоллекция = "БизнесПроцессы"; мМенеджер = БизнесПроцессы[мМетаданныеТипа.Имя]; мТип = ТипЗнч(мМенеджер); ИначеЕсли Метаданные.КритерииОтбора.Содержит(мМетаданныеТипа) Тогда // Это Критерий отбора мПолноеИмя = "КритерийОтбора."+мМетаданныеТипа.Имя; мИмя = мМетаданныеТипа.Имя; мКоллекция = "КритерииОтбора"; мМенеджер = КритерииОтбора[мМетаданныеТипа.Имя]; мТип = ТипЗнч(мМенеджер); // КОЛЛЕКЦИЯ МЕНЕДЖЕРОВ ИначеЕсли мТипЗнч = Тип("КонстантыНабор") Тогда // Это константы набор мМетаданныеТипа = Метаданные.Константы; мПолноеИмя = "Константы"; мИмя = "Константы"; мКоллекция = "Менеджеры"; мМенеджер = Константы; мТип = ТипЗнч(мМенеджер); ИначеЕсли мТипЗнч = Тип("РегистрыБухгалтерии") Тогда мМетаданныеТипа = Метаданные.РегистрыБухгалтерии; мПолноеИмя = "РегистрыБухгалтерии"; мИмя = "РегистрыБухгалтерии"; мКоллекция = "Менеджеры"; мМенеджер = РегистрыБухгалтерии; мТип = ТипЗнч(мМенеджер); ИначеЕсли мТипЗнч = Тип("РегистрыСведений") Тогда мМетаданныеТипа = Метаданные.РегистрыСведений; мПолноеИмя = "РегистрыСведений"; мИмя = "РегистрыСведений"; мКоллекция = "Менеджеры"; мМенеджер = РегистрыСведений; мТип = ТипЗнч(мМенеджер); ИначеЕсли мТипЗнч = Тип("РегистрыНакопления") Тогда мМетаданныеТипа = Метаданные.РегистрыНакопления; мПолноеИмя = "РегистрыНакопления"; мИмя = "РегистрыНакопления"; мКоллекция = "Менеджеры"; мМенеджер = РегистрыНакопления; мТип = ТипЗнч(мМенеджер); ИначеЕсли мТипЗнч = Тип("РегистрыРасчета") Тогда мМетаданныеТипа = Метаданные.РегистрыРасчета; мПолноеИмя = "РегистрыРасчета"; мИмя = "РегистрыРасчета"; мКоллекция = "Менеджеры"; мМенеджер = РегистрыРасчета; мТип = ТипЗнч(мМенеджер); КонецЕсли; Если ПустаяСтрока(мПолноеИмя) = Истина Тогда Возврат ( Неопределено ); КонецЕсли; мПолноеИмя = ВРЕГ(мПолноеИмя); мИмя = ВРЕГ(мИмя); мКоллекция = ВРЕГ(мКоллекция); Результат = Новый Структура; Результат.Вставить("ПолноеИмя", мПолноеИмя); // ключ поиска Результат.Вставить("Имя", мИмя); Результат.Вставить("Коллекция", мКоллекция); Результат.Вставить("Тип", мТип); Результат.Вставить("Менеджер", мМенеджер); Результат.Вставить("МетаданныеТипа", мМетаданныеТипа); Результат.Вставить("Преопределенные"); #Если Клиент Тогда Если мПолучитьПредопределенные = Истина Тогда Запрос = Новый ( "Запрос" ); Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ТаблицаОбъекта.Ссылка |ИЗ | "+мПолноеИмя+" КАК ТаблицаОбъекта |ГДЕ | ТаблицаОбъекта.Предопределенный = ИСТИНА"; Результат.Преопределенные = Запрос.Выполнить().Выгрузить(); Результат.Преопределенные.Колонки.Добавить("Имя",Новый ОписаниеТипов("Строка")); Для каждого СтрокаТЗ Из Результат.Преопределенные Цикл СтрокаТЗ.Имя = ВРЕГ(мМенеджер.ПолучитьИмяПредопределенного(СтрокаТЗ.Ссылка)); КонецЦикла; КонецЕсли; #КонецЕсли Возврат Результат; КонецФункции // обПолучитьОписаниеОбъектаМетаданных() |
|||
15
Said_We
05.03.08
✎
11:10
|
(14) Да нет все проще.
В отладчике да и не в отладчике // Такое работает ТипВид = Новый(ТипОбъекта); Имя = ТипВид.Метаданные().Имя; // такое НЕ работает Имя = Новый(ТипОбъекта).Метаданные().Имя; т.е. без знака "=" полностью не отрабатывает конструктор или еще что. К свойствам доступ появляется, а методы вызвать нельзя. Вот собственно и все. В отладчике же стараешься писать все одной строкой и сразу видя тип пытаешься применить методы. А вот не всегда это возможно. |
|||
16
Defender aka LINN
05.03.08
✎
11:22
|
Офигеть обсужение на ровном месте...
грамотеи... |
|||
17
Said_We
05.03.08
✎
11:57
|
Дело не в определении приметивного или не примитивного типа.
Просто наталкнулся на то что если рисуешь НОВЫЙ(...), но не присваиваешь чему либо, то до конца не срабатывает конструктор. и сразу применить метод нельзя. Вот собственно и все. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |