---
title: Изменение доступности элементов рекурсивно
slug: общие-управляемые-формы/изменение-доступности-элементов-рекурсивно
---

```bsl
// Процедура - устанавливает значения свойств "Доступность" и "Только просмотр"
//
// Параметры:
//	Форма		 - ФормаКлиентскогоПриложения - 
//  Элемент		 - ЭлементыФормы, Строка - 
//  Доступность	 - Булево - Значение свойства "Доступность". Свойство "Только просмотр" = Не "Доступность"
//	ТолькоПросмотрГрупп - Булево - Устанавливает значение свойства "Только просмотр" для групп. По умолчанию ЛОЖЬ
//
Процедура УстановитьДоступностьЭлементовРекурсивно(Форма, Элемент, Доступность, ТолькоПросмотрГрупп = Ложь) Экспорт
	
	ИзменяемыйЭлемент = Элемент;
	
	Если ТипЗнч(Элемент) = Тип("Строка") Тогда
		ИзменяемыйЭлемент = Форма.Элементы.Найти(Элемент);
	КонецЕсли;
	
	Если ИзменяемыйЭлемент = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Если ТипЗнч(ИзменяемыйЭлемент) = Тип("ГруппаФормы") Или ТипЗнч(ИзменяемыйЭлемент) = Тип("ФормаКлиентскогоПриложения") Тогда
		
		ИзменяемыйЭлемент.ТолькоПросмотр = ТолькоПросмотрГрупп;
		
		Для Каждого ПодчиненныйЭлемент Из ИзменяемыйЭлемент.ПодчиненныеЭлементы Цикл
			УстановитьДоступностьЭлементовРекурсивно(Форма, ПодчиненныйЭлемент, Доступность, ТолькоПросмотрГрупп);
		КонецЦикла;
		
	ИначеЕсли ТипЗнч(ИзменяемыйЭлемент) = Тип("КнопкаФормы") Или ТипЗнч(ИзменяемыйЭлемент) = Тип("ТаблицаФормы") Тогда
		ИзменяемыйЭлемент.Доступность = Доступность;
	ИначеЕсли ТипЗнч(ИзменяемыйЭлемент) = Тип("ПолеФормы") Тогда
		ИзменяемыйЭлемент.ТолькоПросмотр = Не Доступность;
		ИзменяемыйЭлемент.Доступность = Истина; // Поле ввода всегда доступно, управляем "ТолькоПросмотр"
	КонецЕсли;
	
КонецПроцедуры
```