Как проверить есть ли реквизит у объекта 1с
Перейти к содержимому

Как проверить есть ли реквизит у объекта 1с

  • автор:

1С 8.3 БСП ЕстьРеквизитИлиСвойствоОбъекта — Программист 1С Минск. Автоматизация бизнеса.

Если ОбщегоНазначенияКлиентСервер . ЕстьРеквизитИлиСвойствоОбъекта ( Форма , «ВидимостьПодключаемыхКоманд» ) Тогда
ПодключаемыеКомандыИСКлиентСервер . УправлениеВидимостьюКомандПодключенныхКОбъекту ( Форма );
КонецЕсли;

// Проверяет наличие реквизита или свойства у произвольного объекта без обращения к метаданным.
//
// Параметры:
// Объект — Произвольный — объект, у которого нужно проверить наличие реквизита или свойства;
// ИмяРеквизита — Строка — имя реквизита или свойства.
//
// Возвращаемое значение:
// Булево — Истина, если есть.
//
Функция ЕстьРеквизитИлиСвойствоОбъекта ( Объект , ИмяРеквизита ) Экспорт

КлючУникальности = Новый УникальныйИдентификатор ;
СтруктураРеквизита = Новый Структура ( ИмяРеквизита , КлючУникальности );
ЗаполнитьЗначенияСвойств ( СтруктураРеквизита , Объект );

Как проверить есть ли реквизит у объекта 1с

Вопрос Как определить программно, существует ли у документа требуемый реквизит

С давних времен в типовых конфигурациях для этого существовала специальная функция.
В конфигурациях последних редакций эта функция стала более универсальной и кроме того стала неожиданно оригинальной, даже эстетически восхитительной.

Так, на сегодня, в 2019 г., эта функция называется ЕстьРеквизитИлиСвойствоОбъекта и располагается в общем модуле ОбщегоНазначенияКлиентСервер. Обращение к функции:

Сама функция проверки выглядит сейчас (2019 год) так:

В типовых конфигурациях 1С по состоянию на 2010 г. для этой цели использовалась функция, например, «ЕстьРеквизитДокумента» общего модуля «ОбщегоНазначения» и была построена на получении метаданных. Обращение к функции:

где «БанковскийСчет» — пример наименования искомого реквизита,
«МетаданныеДокумента«:

Сама функция проверки (расположенная в общем модуле «ОбщегоНазначения«):

Как проверить есть ли реквизит у объекта 1с

Please confirm you want to block this member.

You will no longer be able to:

  • See blocked member's posts
  • Mention this member in posts
  • Invite this member to groups
  • Message this member
  • Add this member as a connection

Please note: This action will also remove this member from your connections and send a report to the site admin. Please allow a few minutes for this process to complete.

Как проверить наличие реквизита

Потребность проверки наличия реквизита обычно возникает при написании общих, универсальных процедур или функций, к примеру, когда необходимо выполнить ряд однообразных действий, проверить заполнение перед проведением, при этом реквизитный состав обрабатываемых объектов метаданных отличается незначительно (например, в документе, отражающем продажу товара, есть реквизит Склад, а в документе, отражающем перемещение товара – реквизиты Склад-отправитель и Склад-получатель).

В ряде типовых конфигураций 1С предлагается стандартная функция проверки наличия реквизита в объекте (расположена в модуле “ОбщегоНазначения”)

Функция ЕстьРеквизитОбъекта(ИмяРеквизита, МетаданныеОбъекта) Экспорт

Возврат НЕ (МетаданныеОбъекта.Реквизиты.Найти(ИмяРеквизита) = Неопределено);

2. Как можно получить метаданные объекта 1С

Однако написать свою функцию также не представляет труда. В первую очередь необходимо получить метаданные объекта 1С одним из способов:

через функцию Метаданные() объекта

пример синтаксиса: СправочникСсылка.Метаданные()

через свойство глобального контекста Метаданные

пример синтаксиса: Метаданные.Справочники.[ИмяСправочника]

Далее через свойство “Реквизиты” использовать функцию Найти(). В случае, если реквизит не найден, возвращается значение Неопределено.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *