Как запретить удаление строк в табличном поле или табличном документе 1С, сохранив возможность редактирования

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

В процессе разработки интерфейсов на платформе 1С:Предприятие 8 часто возникает задача: предоставить пользователю возможность редактировать данные в таблице, использовать механизмы перетаскивания (Drag-and-drop), но при этом жестко ограничить возможность удаления или добавления новых строк стандартными средствами платформы. Ситуация осложняется, если дизайн интерфейса требует сложной «шапки» с объединенными ячейками, что часто толкает разработчиков на использование Табличного документа вместо стандартной Таблицы формы.

В данной статье мы подробно разберем, как эффективно запретить удаление строк, рассмотрим альтернативные способы создания сложных заголовков и выясним, какие свойства объектов 1С помогут нам добиться желаемого поведения интерфейса.

Способ 1. Использование свойств стандартной таблицы (Управляемые формы)

Если ваша задача реализуется на управляемых формах и вы используете стандартный элемент управления Таблица, самый простой и надежный способ — это изменение настроек состава строк. Разберем этот метод по шагам.

Проанализируем свойства элемента формы Таблица. В палитре свойств существует раздел «Использование», где нас интересуют два флага:

Важно понимать, что снятие флага ИзменятьСоставСтрок полностью блокирует стандартную кнопку «Удалить» и клавишу Del, но при этом оставляет ячейки доступными для редактирования, если у колонок не установлен флаг ТолькоПросмотр.

Способ 2. Программный запрет в событии ПередУдалением

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

Рассмотрим пример кода, который предотвращает удаление строк:


&НаКлиенте
Процедура СписокПередУдалением(Элемент, Отказ)
    // Полный запрет удаления через стандартную команду
    Отказ = Истина;
    ПоказатьПредупреждение(, "Удаление строк в данной обработке запрещено правилами системы!");
КонецПроцедуры

Этот метод хорош тем, что он перехватывает любое действие: нажатие кнопки на панели, выбор в контекстном меню или нажатие клавиши Delete на клавиатуре.

Способ 3. Реализация сложной «шапки» без использования Табличного документа

Многие разработчики выбирают Табличный документ только потому, что им нужно объединить ячейки в заголовке (например, для отображения показателей «Выпуск» и «Отклонение» над несколькими колонками). Однако в Управляемых Формах этот вопрос решается гораздо элегантнее с помощью Групп колонок.

Разберем алгоритм создания сложного заголовка:

  1. В дереве элементов формы выделите нужные колонки вашей таблицы.
  2. Нажмите правую кнопку мыши и выберите «Сгруппировать колонки».
  3. В свойствах появившейся группы установите вид — Группа колонок.
  4. Установите свойство Группировка в значение «Вертикальная» или «Вместе».
  5. Задайте заголовок для этой группы (например, «Материальный баланс»).

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

Способ 4. Защита в Табличном документе (если он все же необходим)

Если по каким-то причинам вы решили оставить ТабличныйДокумент в качестве основного инструмента работы, то задача усложняется. В табличном документе нет простого свойства «запретить удаление строк», так как это свободное поле для рисования. Здесь мы применим механизм защиты.

Выясним, как настроить защиту ячеек:

Посмотрим на пример кода для инициализации такого документа:


// В процедуре инициализации или при выводе данных
ОбластьДляРедактирования = ТабДок.Область(6, 2, 10, 5); // Область данных под шапкой
ОбластьДляРедактирования.Защита = Ложь;
ТабДок.ТолькоПросмотр = Ложь; // Позволяет активировать ячейки
ТабДок.Защита = Истина;       // Блокирует структурные изменения (удаление строк)

При таких настройках пользователь сможет вводить данные в разрешенные ячейки, но пункты меню «Удалить строки» будут неактивны.

Способ 5. Перехват клавиши Delete через команды формы

Если стандартная кнопка «Удалить» на командной панели вам мешает, а горячая клавиша Del продолжает срабатывать, можно прибегнуть к «хитрости» с командами формы. Этот способ позволяет переопределить действие горячей клавиши.

Выполним следующие шаги:

  1. Создайте новую команду на форме, назовите её ЗаглушкаУдаления.
  2. В свойствах команды в поле Сочетание клавиш выберите Del.
  3. Оставьте обработчик команды пустым или пропишите в нем вывод сообщения.
  4. Саму кнопку команды на форму выносить не обязательно (она может быть скрыта).

Теперь при нажатии Del система будет вызывать вашу пустую команду вместо стандартного удаления строки таблицы.

Способ 6. Модификация контекстного меню и командной панели

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

Разберем, как навести порядок в кнопках:

  1. Для командной панели таблицы (или самой таблицы) найдите свойство Состав команд или снимите флаг Автозаполнение.
  2. Если вы сняли автозаполнение, вам придется вручную добавить нужные кнопки (Добавить, Найти, Сортировка).
  3. Для контекстного меню (вызываемого правой кнопкой мыши) создайте свой элемент типа КонтекстноеМеню, привяжите его к таблице и наполните только разрешенными командами.

Проанализировав ситуацию, мы видим, что наиболее правильным подходом для бизнес-приложений является использование стандартной Таблицы формы с иерархическими группами колонок. Это позволяет избежать «костылей» с защитой областей табличного документа и дает полный контроль над поведением строк через встроенные свойства платформы 1С.

← На главную