У любой формы в 1С есть свойство ТолькоПросмотр, которое управляет доступностью для редактирования всех ее элементов. Но оно не подходит, когда стоит задача на выборочный запрет редактирования элементов. Например, есть форма со множеством элементов на ней, и необходимо убрать доступность для всех этих элементов формы, но в тоже время оставить доступ для редактирования одного или нескольких элементов. Для этой цели я написал процедуру, которую можно разместить в каком-либо серверном общем модуле и вызывать ее, например в событии формы ПриСозданииНаСервере:
// ПАРАМЕТРЫ:
// ГруппаРодитель - вся форма, или группа формы, или таблица формы
// например: ЭтаФорма (вся Форма объекта)
// или Элементы.Товары (таблица Товары)
// или Элементы.Товары.КоманднаяПанель (командная панель таблицы Товары)
// или Элементы.Товары.КонтекстноеМеню (контекстное меню таблицы Товары)
// или Элементы.ТоварыКонтекстноеМенюСкопировать (кнопка Скопировать в контекстном меню таблицы Товары)
// или Элементы.ТоварыКоличество (колонка Количество в таблице Товары)
// или Элементы.ГруппаШапка (группа элементов на форме с названием ГруппаШапка)
//МассивДоступныхЭлементовФормы - массив, содержащий в себе доступные элементы формы, например:
//Элементы.Номер (поле Номер в шапке документа)
// или Элементы.Товары (таблица Товары)
// или Элементы.ТоварыДобавить (команда добавить на командной панели таблицы Товары)
// или Элементы.Товары.КоманднаяПанель (командная панель таблицы Товары)
// или Элементы.Товары.КонтекстноеМеню (контекстное меню таблицы Товары)
// или Элементы.ТоварыКонтекстноеМенюСкопировать (кнопка Скопировать в контекстном меню таблицы Товары)
// или Элементы.ТоварыКоличество (колонка Количество в таблице Товары)
// или Элементы.ГруппаШапка (группа элементов на форме с названием ГруппаШапка)
&НаСервере
Процедура УбратьДоступностьЭлементовФормыКромеУказанных(ГруппаРодитель,МассивДоступныхЭлементовФормы = Неопределено)Экспорт
Если ТипЗнч(ГруппаРодитель) = Тип("УправляемаяФорма") Тогда
ЭлементКоманднаяПанель = ГруппаРодитель.КоманднаяПанель;
Если МассивДоступныхЭлементовФормы <> Неопределено И МассивДоступныхЭлементовФормы.Найти(ЭлементКоманднаяПанель) <> Неопределено Тогда
ЭлементКоманднаяПанель = Неопределено
КонецЕсли;
ИначеЕсли ТипЗнч(ГруппаРодитель) = Тип("ТаблицаФормы") Тогда
ЭлементКоманднаяПанельТаблицы = ГруппаРодитель.КоманднаяПанель;
Если МассивДоступныхЭлементовФормы <> Неопределено И МассивДоступныхЭлементовФормы.Найти(ЭлементКоманднаяПанельТаблицы) <> Неопределено Тогда
ЭлементКоманднаяПанельТаблицы = Неопределено;
КонецЕсли;
ЭлементКонтекстноеМенюТаблицы = ГруппаРодитель.КонтекстноеМеню;
Если МассивДоступныхЭлементовФормы <> Неопределено И МассивДоступныхЭлементовФормы.Найти(ЭлементКонтекстноеМенюТаблицы) <> Неопределено Тогда
ЭлементКонтекстноеМенюТаблицы = Неопределено;
КонецЕсли;
Иначе
ЭлементКоманднаяПанель = Неопределено;
ЭлементКоманднаяПанельТаблицы = Неопределено;
ЭлементКонтекстноеМенюТаблицы = Неопределено;
КонецЕсли;
Для Каждого ТекЭлемент Из ГруппаРодитель.ПодчиненныеЭлементы Цикл
Если МассивДоступныхЭлементовФормы <> Неопределено И МассивДоступныхЭлементовФормы.Найти(ТекЭлемент) <> Неопределено Тогда
Продолжить;
КонецЕсли;
Если ТипЗнч(ТекЭлемент) = Тип("ГруппаФормы") Или ТипЗнч(ТекЭлемент) = Тип("ТаблицаФормы") Тогда
УбратьДоступностьЭлементовФормыКромеУказанных(ТекЭлемент,МассивДоступныхЭлементовФормы);
Иначе
Попытка
ТекЭлемент.ТолькоПросмотр = Истина;
Исключение
ТекЭлемент.Доступность = Ложь;
КонецПопытки;
КонецЕсли;
КонецЦикла;
Если ЭлементКоманднаяПанель <> Неопределено Тогда
УбратьДоступностьЭлементовФормыКромеУказанных(ЭлементКоманднаяПанель,МассивДоступныхЭлементовФормы);
КонецЕсли;
Если ЭлементКоманднаяПанельТаблицы <> Неопределено Тогда
УбратьДоступностьЭлементовФормыКромеУказанных(ЭлементКоманднаяПанельТаблицы,МассивДоступныхЭлементовФормы);
КонецЕсли;
Если ЭлементКонтекстноеМенюТаблицы <> Неопределено Тогда
УбратьДоступностьЭлементовФормыКромеУказанных(ЭлементКонтекстноеМенюТаблицы,МассивДоступныхЭлементовФормы);
КонецЕсли;
КонецПроцедуры
Рассмотрим параметры этой процедуры:
ГруппаРодитель - группа формы, таблица формы, командная панель формы, командная панель таблицы, контекстное меню таблицы формы, или сама форма. В этот параметр мы передаем одно из вышеперечисленных значений, на подчиненные элементы которого будем ставить запрет на редактирование.
МассивДоступныхЭлементовФормы - массив содержащий в себе элементы формы, группы формы, таблицы формы, командную панель формы, командную панель таблицы, контекстное меню таблицы, кнопки командной панели, кнопки контекстного меню и тд. В этот параметр мы передаем массив, на элементы которого не должен накладываться запрет на редактирование.