Запрет редактирования полей в таблице формы управляемого приложения с возможностью просмотра ссылочных значений (универсальный алгоритм).

Предыстория.

Периодически появляется необходимость запретить редактирование значений в таблице, но при этом оставить возможность открывать формы элементов для значений полей данной таблицы.

Для реализации такого поведения необходимо прописывать соответствующие обработчики для каждого поля таблицы и свойства для запрета редактирования текста.

Для автоматизации данных действия был разработан следующий код.

Решение.

Код области ОбработчикиСобытийФормы

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	//Редактировать: Вместо Элементы.XXX указать реальную таблицу формы
	УстановитьТолькопросмотрДляКолонок(Элементы.XXX);
КонецПроцедуры // ПриСозданииНаСервере()

Код области ОбработчикиСобытийЭлементовТаблицыФормыXXX

#Область Запрет_редактирования_полей_произвольной_таблицы

&НаКлиенте
// Процедура - обработчик события "НачалоВыбора" элементов с полями таблицы формы (Универсальная процедура)
//
Процедура УниверсальнаяПроцедураНачалаВыборкаПоляТФ(Элемент, ДанныеВыбора, СтандартнаяОбработка)
  
  СтандартнаяОбработка = Ложь;
  
КонецПроцедуры // УниверсальнаяПроцедураНачалаВыборкаПоляТФ()

&НаКлиенте
// Процедура - обработчик события "Очистка" элементов с полями таблицы формы (Универсальная процедура)
//
Процедура УниверсальнаяПроцедураОчисткиПоляТФ(Элемент, СтандартнаяОбработка)
  
  СтандартнаяОбработка = Ложь;
  
КонецПроцедуры // УниверсальнаяПроцедураОчисткиПоляТФ()

#КонецОбласти

Код области СлужебныеПроцедурыИФункции

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