1С Предприятие 8.3 Как проверить наличие реквизита документа или табличной части программно

В типовых конфигурациях это делается просто:

//Сначала получим метаданные
МетаданныеДокумента = ДокументОбъект.Метаданные();
//для реквизита документа
ОбщегоНазначения.ЕстьРеквизитДокумента("СуммаВключаетНДС", МетаданныеДокумента);
//для таб.части документа
ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("ЕдиницаИзмерения", МетаданныеДокумента,ОбщегоНазначения.ПолучитьИмяТабличнойЧастиПоСсылкеНаСтроку(СтрокаТабличнойЧасти));

Но если у вас не типовая конфигурация, или же, как я, привыкли работать методами, предоставляемыми платформой по возможности максимально их используя, где это имеет смысл, тогда вот так:

	реквНаименованиеПолное = метаданные.Справочники.Номенклатура.Реквизиты.Найти("НаименованиеПолное");
	//для табличных частей
	реквЦена=метаданные.Документы.ПоступлениеТоваровУслугВНТТ.ТабличныеЧасти.ВозвратнаяТара.Реквизиты.Найти("Цена");
	//у регистров метаданные разбиты на Измерения, Ресурсы и Реквизиты
	реквИзмер=метаданные.РегистрыСведений.ЦеныНоменклатуры.Измерения.Найти("ТипЦен");
	реквРесурс=метаданные.РегистрыСведений.ЦеныНоменклатуры.Ресурсы.Найти("Цена");
	реквРеквизит=метаданные.РегистрыСведений.ЦеныНоменклатуры.Реквизиты.Найти("БабаЯга");

Если реквизит отсутствует, тогда будет возвращено значение неопределено, как будет в случае с реквизитом «БабаЯга» в регистре цен.

К метаданным можно так-же обращаться через строковое имя, как в других коллекциях, что позволяет сделать гибкую программную обработку.

рекв = метаданные["Справочники"]["Номенклатура"].Реквизиты.Найти("ТипНоменклатуры");

В случае удачного нахождения реквизита с указанным именем возвращается искомый объект метаданных, иначе, как уже упоминалось — НЕОПРЕДЕЛЕНО,

Добавить комментарий