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