Почему не доступны кнопки командной панели таблицы в управляемой форме 1С и как это исправить

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке управляемых форм в 1С:Предприятии нередко возникает ситуация: на форме размещена табличная часть со стандартной командной панелью (включено автозаполнение), однако при открытии кнопки добавления, изменения или удаления строк оказываются неактивными («мутные», не нажимаются). Даже явное программное переопределение свойства Доступность = Истина для элементов таблицы не приводит к желаемому результату. Разберем детально, почему так происходит, какие системные механизмы платформы влияют на доступность командной панели и как правильно реализовать выборочную блокировку данных на форме.

Причина 1. Глобальное влияние свойства ЭтаФорма.ТолькоПросмотр

Проанализируем ключевую особенность платформы 1С:Предприятие 8.3 при работе с управляемыми формами. Свойство ТолькоПросмотр самой формы имеет глобальный и безусловный приоритет над свойствами дочерних элементов.

Если в коде модуля формы (например, в процедуре ПриСозданииНаСервере, ПриОткрытии) или через параметры открытия было установлено:

ЭтаФорма.ТолькоПросмотр = Истина;

платформа автоматически переводит всю форму в неизменяемое состояние. При этом стандартные команды изменения данных (добавление, копирование, удаление строк) блокируются на уровне ядра платформы.

Попытка разблокировать конкретную таблицу или группу элементов следующим образом не сработает:


// Такой код НЕ вернет доступность кнопкам, если для формы включен ТолькоПросмотр:
Элементы.ПереченьДокументов.ТолькоПросмотр = Ложь;
Элементы.ГруппаПрикрепленныеДокументы.ТолькоПросмотр = Ложь;
Элементы.ГруппаСтраницы.ТолькоПросмотр = Ложь;

Важное правило платформы: переопределить поведение ЭтаФорма.ТолькоПросмотр = Истина для отдельных элементов невозможно. Если форма находится в режиме только для чтения, ни один элемент не может быть переведен в режим редактирования.

Решение: Правильная выборочная блокировка элементов формы

Если по бизнес-логике требуется заблокировать редактирование всей формы (шапки документа, других реквизитов), но оставить доступной для изменения одну конкретную таблицу, применим правильный алгоритм:

  1. Оставляем форму в доступном для изменения режиме: ЭтаФорма.ТолькоПросмотр = Ложь;.
  2. Объединяем все элементы шапки и прочие поля, которые необходимо защитить от изменения, в общую родительскую группу (или несколько групп).
  3. Устанавливаем режим просмотра или доступности для этой группы, не затрагивая целевую таблицу.

Посмотрим на пример кода в процедуре ПриСозданииНаСервере:


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

Если группировка по каким-то причинам не подходит, можно заблокировать остальные элементы формы программным обходом в цикле, исключая нужную нам таблицу:


&НаСервере
Процедура ЗаблокироватьЭлементыКромеТаблицы(ИмяИсключаемойТаблицы)
    
    Для Каждого ЭлементФормы Из Элементы Цикл
        // Проверяем, что элемент не является нашей таблицей и ее подэлементами
        Если ЭлементФормы.Имя <> ИмяИсключаемойТаблицы Тогда
            Попытка
                ЭлементФормы.ТолькоПросмотр = Истина;
            Исключение
                // У некоторых элементов управления нет свойства ТолькоПросмотр
            КонецПопытки;
        КонецЕсли;
    КонецЦикла;
    
КонецПроцедуры

Причина 2. Свойства самого элемента управления «Таблица»

Если форма доступна для изменения, но кнопки все равно не работают, выясним причину в свойствах самой таблицы формы. Платформа 1С предоставляет специализированные свойства, управляющие составом и расположением строк:

  1. ИзменятьСоставСтрок: если это свойство установлено в значение Ложь, стандартные кнопки командной панели («Добавить», «Удалить», «Скопировать») автоматически деактивируются. Проверим его в палитре свойств элемента формы или установим программно: Элементы.ПереченьДокументов.ИзменятьСоставСтрок = Истина;
  2. ИзменятьПорядокСтрок: при значении Ложь отключаются команды перемещения строк («Вверх», «Вниз»).
  3. ТолькоПросмотр у таблицы: если для самой таблицы установлено Элементы.ИмяТаблицы.ТолькоПросмотр = Истина;, командная панель также заблокирует ввод данных.

Причина 3. Ограничения прав доступа (RLS) и права ролей

Рассмотрим влияние прав текущего пользователя на элементы интерфейса. Платформа 1С автоматически отключает интерактивные элементы управления, если у пользователя нет достаточных прав на выполнение соответствующих операций:

  1. Право «Интерактивное добавление»: если в назначенных пользователю ролях для данного документа или справочника снята эта галочка, платформа заблокирует создание новых строк или объектов, а кнопки станут неактивными.
  2. Ограничение на уровне записей (RLS): если настроено правило RLS, запрещающее модификацию строк таблицы объекта, команды добавления и удаления также будут отключены автоматически.
  3. Право «Редактирование»: если пользователю доступно только чтение объекта, управляемая форма откроется в режиме только для чтения вне зависимости от программного кода.

Причина 4. Системные и прикладные блокировки

Разберем дополнительные факторы конфигурации, которые могут принудительно перевести форму в режим просмотра:

  1. Дата запрета изменения данных: в типовых решениях при попадании даты документа в закрытый период отрабатывают подсистемы БСП (Библиотеки Стандартных Подсистем), которые при открытии устанавливают свойство ТолькоПросмотр = Истина.
  2. Пессимистическая блокировка: если объект уже редактируется другим пользователем в информационной базе, форма открывается для текущего пользователя в режиме просмотра без возможности изменения табличных частей.
  3. Параметры вызова формы: проверим точку вызова метода ОткрытьФорму(). Если в структуре параметров был передан параметр ТолькоПросмотр: Истина, форма изначально инициализируется заблокированной:
    
    ПараметрыОткрытия = Новый Структура;
    ПараметрыОткрытия.Вставить("Ключ", СсылкаНаДокумент);
    // Если передать следующий параметр, кнопки ТЧ будут недоступны:
    // ПараметрыОткрытия.Вставить("ТолькоПросмотр", Истина);
    ОткрытьФорму("Документ.Заказ.ФормаОбъекта", ПараметрыОткрытия);
    

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

← На главную