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