Свойство(Ключ, Значение) — единственный способ узнать, есть ли в структуре нужное свойство, не оборачивая обращение в Попытка.
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
Ключ | Строка | Да | имя проверяемого свойства |
Значение | Произвольный (переменная) | Нет | куда записать найденное значение |
Возвращает: Булево — Истина, если свойство с таким именем есть в структуре, иначе Ложь.
Без второго параметра — метод только проверяет наличие свойства, ничего никуда не записывает:
Если Структура.Свойство("Скидка") Тогда
// свойство есть, но его значение здесь неизвестно — только сам факт наличия
КонецЕсли;Со вторым параметром — туда пишется значение, но только если свойство нашлось. Это переменная, а не произвольное выражение — значение кладётся в неё по ссылке, как у выходных параметров других методов платформы:
- свойство есть — в переменную записывается его значение, метод возвращает
Истина; - свойства нет — переменная не трогается и сохраняет то, что было в ней до вызова. Метод возвращает
Ложь.
Значение = 999;
Структура.Свойство("Скидка", Значение);
// Значение всё ещё 999 — свойства "Скидка" нет, переменную никто не менялЕсли переменная до этого не использовалась, «то, что было» — это Неопределено (значение переменной по умолчанию в 1С), отсюда и распространённая привычка читать Свойство() так, будто при отсутствии ключа он «возвращает Неопределено» в Значение — на деле он его туда просто не пишет. Переиспользуете переменную для нескольких проверок подряд — обнуляйте её явно перед каждой, иначе легко принять старое значение за новое:
Значение = Неопределено;
Если Структура.Свойство("Скидка", Значение) Тогда
// здесь Значение точно свежее
КонецЕсли;Как часть обычного чтения значений структуры — см. Чтение значений структуры. Аналога у Соответствия нет — там роль безопасной проверки и чтения одновременно берёт на себя Получить().