Все описание ниже актуально для платформы 1С8.3
Все коды я пишу и анализирую на лицензионной программе 1С8.3.13.1644 с установленной конфигурацией УНФ 1.6.18.145
Для написания общих процедур и работы с разными объектами метаданных (Документы, Справочника ..... ....), часто необходимо проверить наличие реквизита в объекте метаданных. Конфигурация 1С это конструктор подсистем и один и тот же реквизит в разных объектах может называться по разному, а также у каждого объекта есть свой набор реквизитов.
Для проверки можно использовать БСП и методы которые предоставляет библиотека.
Для вызова с сервера:
ОбщегоНазаначения.ЕстьРеквизитОбъекта(<Реквизит>, <Метаданные>)
<Реквизит> - Строка Наименование реквизита
<Метаданные> - Метаданные объекта для поиска кеквизита
В данном варианте функции передавать нужно метаданные объекта, а их соответственно необходимо получить дополнительным методом "<Объект>. Метаданные()"
Сама функция очень проста и вместо вызова общего модуля можно написать код который выполнит те же действия:
НО, согласитесь, с БСП намного удобнее, понятнее, красивее !
Следующий вариант считаю более удобный и правильный. Тут не происходит получение метаданных. И для проверки передать нужно любой объект. (Форма, Объект, Элемент, ТекущаяСтрока), а также функцию можно вызвать с клиента.
ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(<Объект проверки>,<Реквизит или свойство>)
<Реквизит или свойство> - Строка - наименование реквизита или свойства
<Объект проверки> - Произвольный - объект, у которого нужно проверить наличие реквизита или свойства;
А вот несколько примеров из жизни:
Спасибо!