Имя: Пароль:
1C
 
Метаданные. не корректно работает метод Содержит. Имхо
0 NcSteel
 
26.09.09
15:15
Сабж. Скорее всего я не верно руки заточил под Метаданные.

Вот пример:

Объект - Объект на документ:

Код:

Если Метаданные.Документы.Содержит(Объект.Метаданные()) Тогда //Все нормально "Истина"
       Объект.Метаданные().Реквизиты.Содержит(Справочники.ДоговорыКонтрагентов.ПустаяСсылка().Метаданные()) //А вот тут дает Ложь.

КонецЕсли;

Что сделал не так?
1 H A D G E H O G s
 
26.09.09
15:16
Объект.Метаданные().Реквизиты
ОписаниеТипов, а не ОбъектМетаданных
2 H A D G E H O G s
 
26.09.09
15:16
Объект.Метаданные().Реквизиты.Содержит(ТипЗнч(Справочники.ДоговорыКонтрагентов.ПустаяСсылка()))
3 H A D G E H O G s
 
26.09.09
15:17
НЕТ
4 H A D G E H O G s
 
26.09.09
15:17
Для Каждого Реквизит ИЗ Объект.Метаданные().Реквизиты Цикл
Реквизит.Содержит(ТипЗнч(Справочники.ДоговорыКонтрагентов.ПустаяСсылка()))

КонецЦикла;
5 NcSteel
 
26.09.09
15:18
Что то не так:

КоллекцияОбъектовМетаданных (MetadataObjectCollection)
Содержит (Contains)
Синтаксис:
Содержит(<Объект метаданных>)
Параметры:
<Объект метаданных> (обязательный)
Тип: ОбъектМетаданных: WebCервис, ОбъектМетаданных: WSCсылка, ОбъектМетаданных: БизнесПроцесс, ОбъектМетаданных: Документ, ОбъектМетаданных: ЖурналДокументов, ОбъектМетаданных: Задача, ОбъектМетаданных: Интерфейс, ОбъектМетаданных: Константа, ОбъектМетаданных: КритерийОтбора, ОбъектМетаданных: Нумератор, ОбъектМетаданных: Обработка, ОбъектМетаданных: ОбщаяКартинка, ОбъектМетаданных: Макет, ОбъектМетаданных: ОбщийМодуль, ОбъектМетаданных: Форма, ОбъектМетаданных: Стиль, ОбъектМетаданных: Язык, ОбъектМетаданных: Отчет, ОбъектМетаданных: ПакетXDTO, ОбъектМетаданных: ПараметрСеанса, ОбъектМетаданных: Перечисление, ОбъектМетаданных: ПланВидовРасчета, ОбъектМетаданных: ПланВидовХарактеристик, ОбъектМетаданных: ПланОбмена, ОбъектМетаданных: ПланСчетов, ОбъектМетаданных: ПодпискаНаСобытие, ОбъектМетаданных: Подсистема, ОбъектМетаданных: Последовательность, ОбъектМетаданных: РегистрБухгалтерии, ОбъектМетаданных: РегистрНакопления, ОбъектМетаданных: РегистрРасчета, ОбъектМетаданных: РегистрСведений, ОбъектМетаданных: РегламентноеЗадание, ОбъектМетаданных: Роль, ОбъектМетаданных: Справочник, ОбъектМетаданных: ЭлементСтиля, ОбъектМетаданных: Графа, ОбъектМетаданных: Измерение, ОбъектМетаданных: ЗначениеПеречисления, ОбъектМетаданных: ОперацияWebСервиса, ОбъектМетаданных: Перерасчет, ОбъектМетаданных: ПараметрWebСервиса, ОбъектМетаданных: ПризнакУчетаПланаСчетов, ОбъектМетаданных: ПризнакУчетаСубконтоПланаСчетов, ОбъектМетаданных: Реквизит, ОбъектМетаданных: ТабличнаяЧасть, ОбъектМетаданных: Ресурс, ОбъектМетаданных: РеквизитАдресации. Объект метаданных, наличие которого определяется в коллекции.
Возвращаемое значение:
Тип: Булево.
Описание:
Определяет, принадлежит ли объект метаданных данной коллекции.

И из :

Метаданные.Документы.Содержит(Объект.Метаданные()) все корректно же.
6 NcSteel
 
26.09.09
15:19
(4) А перебор что то Имхо не красиво )
7 NcSteel
 
26.09.09
15:21
ОбъектМетаданных: Документ (MetadataObject: Document)
Реквизиты (Attributes)
Использование:
Только чтение.
Описание:
Тип: КоллекцияОбъектовМетаданных. Коллекция объектов метаданных, описывающих реквизиты данного объекта метаданных.


КоллекцияОбъектовМетаданных все таки должен (0) работать.
8 H A D G E H O G s
 
26.09.09
15:22
Пардон

Для Каждого Реквизит ИЗ Объект.Метаданные().Реквизиты Цикл
Если ТипЗнч(Реквизит.Тип)=Тип("ОписаниеТипов") Тогда
Реквизит.Тип.Содержит(ТипЗнч(Справочники.ДоговорыКонтрагентов.ПустаяСсылка()))
КонецЕсли;

КонецЦикла;
9 NcSteel
 
26.09.09
15:23
(8) Ты лучше скажи почему (0) не работает. Согласно (7) должен же работать.
10 H A D G E H O G s
 
26.09.09
15:27
(9) Потому что внутри МетаданныеДокументы есть МетаданноеДокумент
А внутри МетаданноеДокумент.Реквизиты нет МЕТАДАННОГО МетаданноеСправочник.

Это как бы логично, я не понимаю, откуда такие мысли у тебя?
11 NcSteel
 
26.09.09
15:31
Так как если открыть в отладчике:

Метаданные.Документы.РеализацияТоваровУслуг.Реквизиты то мы увидим коллекцию ОбъектовМетаданных, хотя они конечно пофиксины. Так хотелось элегантно решить, эх придется цикл фигачить. (((
12 Jolly Roger
 
26.09.09
16:56
(0) для начала надо бы вместо
Справочники.ДоговорыКонтрагентов.ПустаяСсылка().Метаданные()
использовать
Метаданные.Справочники.ДоговорыКонтрагентов
13 H A D G E H O G s
 
26.09.09
16:59
Сообщить(Строка(Справочники.ДоговорыКонтрагентов.ПустаяСсылка().Метаданные()=Метаданные.Справочники.ДоговорыКонтрагентов));

Выдает
ИСТИНА

Что мы делаем не так?
14 Jolly Roger
 
26.09.09
17:01
(13) как минимум, на одну точку короче...