Друзья!
Собственно перебираю все реквизиты формы
Как понять в каких из реквизитов есть свойства ТолькоЧтение или Доступность
Ниже кусок кода

```1c
    Для Каждого Рек из ЭлементыФормы Цикл
    Если ТипЗнч(Рек) = Тип("Надпись")
    ИЛИ ТипЗнч(Рек) = Тип("РамкаГруппы")
    Тогда
    Продолжить;
    КонецЕсли;
    Если ТипЗнч(Рек) = Тип("КоманднаяПанель")
    ИЛИ ТипЗнч(Рек) = Тип("Кнопка")
    ИЛИ ТипЗнч(Рек) = Тип("Флажок") Тогда
    Рек.Доступность = Ложь;
    Продолжить;
    КонецЕсли;
    Рек.ТолькоПросмотр = Истина;
    КонецЦикла;
```
---
SPID, чем Ваш вариант принципиально отличается от моего?
---
krumenko, можете использовать ЗаполнитьЗначенияСвойств. Например следующим образом:

```1c
    НачальноеЗНачение = Новый УникальныйИдентификатор();
    ЗначениеРеквизита = Новый Структура(ИмяСвойства, НачальноеЗНачение);
    ЗаполнитьЗначениеСвойств(ЗначениеРеквизита, Рек);
    Если ЗначениеРеквизита[ИмяСвойства] <> НачальноеЗНачение Тогда
    // Свойство есть
    КонецЕсли;
```

Можете выделить это в отдельную функцию
---
krumenko, а что не работает сейчас?
можно так написать -
```1c
    Попытка
    Рек.Доступность = Ложь;
    Исключение
    КонецПопытки;
```
---
Salavat, то, что использовать попытку считается плохим тоном в программировании, когда можно обойтись без этого
---
ojiojiowka, да считайте как хотите - в чём проблема?
зато такой вариант короче, чем например - если/иначе. и рабочий на 100 %.
---
ojiojiowka, Че то не понял приведи пример как проверить?
---
krumenko, как проверить? мне кстати тоже интересен ответ.

надеюсь - мой пост вопросов не вызывает?
---
Salavat, Пока так и сделал))
---
Можно просто обернуть это в функцию, которую положить в общий модуль

```1c
    Функция ЕстьСвойство(Объект, ИмяСвойства)
    РезультатФункции = Ложь;
    НачальноеЗНачение = Новый УникальныйИдентификатор();
    ЗначениеРеквизита = Новый Структура(ИмяСвойства, НачальноеЗНачение);
    ЗаполнитьЗначениеСвойств(ЗначениеРеквизита, Объект);
    Если ЗначениеРеквизита[ИмяСвойства] <> НачальноеЗНачение Тогда
    РезультатФункции = Истина;
    КонецЕсли;
    Возврат РезультатФункции;
    КонецФункции
```

Вызывать можно использовать следующим образом:

```1c
    Если ЕстьСвойство(Рек, "ТолькоПросмотр") Тогда
    ...
    Если ЕстьСвойство(Рек, "Доступность") Тогда
    ...
```

По поводу попыток не очень хочется спорит, можете оставаться в своем ограниченном мире 1С. могу лишь сказать автору топика, что попытка является дурным тоном и может вызвать трудности при отладке, если ее использовать везде и всюду (те же ложные срабатывания отладчика, если стоит галка остановки по ошибке).
---
ojiojiowka, зато у Вас очень хороший тон - если нигде не скупитесь употреблять.
напомнили - если да кабы, да во рту росли грыбы.
---
ojiojiowka, ЗаполнитьЗначениеСвойств?? что это?
По поводу попыток согласен. Поэтому и спрашиваю на форуме))
---
krumenko, Извиняюсь, опечатался. ЗаполнитьЗначенияСвойств, конечно же.
---
Делал как то следующим образом:

```1c
    СтруктураСвойств = Новый Структура("ТолькоПросмотр");
    Для Каждого ЭлементФормы из ЭлементыФормы Цикл

    Если ТипЗнч(ЭлементФормы) = Тип("ДекорацияФормы") тогда
    // Для декорации формы нет ни доступности ни только просмотра.
    Продолжить;
    КонецЕсли;

    // У некоторых элементов нет свойства "ТолькоПросмотр"
    // Для таких элементов для блокировки используется свойство "Доступность".

    ЗаполнитьЗначенияСвойств(СтруктураСвойств, ЭлементФормы);

    Если СтруктураСвойств.ТолькоПросмотр = Неопределено Тогда

    ЭлементФормы.Доступность = Ложь;

    Иначе
    ЭлементФормы.ТолькоПросмотр = Истина;

    КонецЕсли;

    СтруктураСвойств.ТолькоПросмотр = Неопределено;

    КонецЦикла;
```
---
SPID, чем Ваш вариант принципиально отличается от моего?
---
ojiojiowka, ничем. а он утверждал разве это?
---
SPID, Спасибо все отрабатывает
---
А кто мешает написать функцию "УстановитьЗначениеСвойства(Объект, ИмяСвойства, Значение)" и использовать ее?
---
Спасибо все ок!
Вынесу в общий модуль на всякий случай
---
Всем спасибо!