65✓ Истинацена
?✕ Ложьскидка

Свойство(Ключ, Значение) — единственный способ узнать, есть ли в структуре нужное свойство, не оборачивая обращение в Попытка.

ПараметрТипОбязательныйОписание
КлючСтрокаДаимя проверяемого свойства
ЗначениеПроизвольный (переменная)Неткуда записать найденное значение

Возвращает: Булево — Истина, если свойство с таким именем есть в структуре, иначе Ложь.

Без второго параметра — метод только проверяет наличие свойства, ничего никуда не записывает:

Если Структура.Свойство("Скидка") Тогда
    // свойство есть, но его значение здесь неизвестно — только сам факт наличия
КонецЕсли;

Со вторым параметром — туда пишется значение, но только если свойство нашлось. Это переменная, а не произвольное выражение — значение кладётся в неё по ссылке, как у выходных параметров других методов платформы:

  • свойство есть — в переменную записывается его значение, метод возвращает Истина;
  • свойства нет — переменная не трогается и сохраняет то, что было в ней до вызова. Метод возвращает Ложь.
Значение = 999;
Структура.Свойство("Скидка", Значение);
// Значение всё ещё 999 — свойства "Скидка" нет, переменную никто не менял

Если переменная до этого не использовалась, «то, что было» — это Неопределено (значение переменной по умолчанию в 1С), отсюда и распространённая привычка читать Свойство() так, будто при отсутствии ключа он «возвращает Неопределено» в Значение — на деле он его туда просто не пишет. Переиспользуете переменную для нескольких проверок подряд — обнуляйте её явно перед каждой, иначе легко принять старое значение за новое:

Значение = Неопределено;
Если Структура.Свойство("Скидка", Значение) Тогда
    // здесь Значение точно свежее
КонецЕсли;

Как часть обычного чтения значений структуры — см. Чтение значений структуры. Аналога у Соответствия нет — там роль безопасной проверки и чтения одновременно берёт на себя Получить().

Структуры