В процессе разработки интерфейсов на платформе 1С:Предприятие 8 часто возникает задача: предоставить пользователю возможность редактировать данные в таблице, использовать механизмы перетаскивания (Drag-and-drop), но при этом жестко ограничить возможность удаления или добавления новых строк стандартными средствами платформы. Ситуация осложняется, если дизайн интерфейса требует сложной «шапки» с объединенными ячейками, что часто толкает разработчиков на использование Табличного документа вместо стандартной Таблицы формы.
В данной статье мы подробно разберем, как эффективно запретить удаление строк, рассмотрим альтернативные способы создания сложных заголовков и выясним, какие свойства объектов 1С помогут нам добиться желаемого поведения интерфейса.
Если ваша задача реализуется на управляемых формах и вы используете стандартный элемент управления Таблица, самый простой и надежный способ — это изменение настроек состава строк. Разберем этот метод по шагам.
Проанализируем свойства элемента формы Таблица. В палитре свойств существует раздел «Использование», где нас интересуют два флага:
Важно понимать, что снятие флага ИзменятьСоставСтрок полностью блокирует стандартную кнопку «Удалить» и клавишу Del, но при этом оставляет ячейки доступными для редактирования, если у колонок не установлен флаг ТолькоПросмотр.
Иногда нам нужно запретить удаление не для всей таблицы, а только при определенных условиях, или же мы хотим выводить пользователю информационное сообщение о запрете. В этом случае мы воспользуемся обработчиком события таблицы.
Рассмотрим пример кода, который предотвращает удаление строк:
&НаКлиенте
Процедура СписокПередУдалением(Элемент, Отказ)
// Полный запрет удаления через стандартную команду
Отказ = Истина;
ПоказатьПредупреждение(, "Удаление строк в данной обработке запрещено правилами системы!");
КонецПроцедуры
Этот метод хорош тем, что он перехватывает любое действие: нажатие кнопки на панели, выбор в контекстном меню или нажатие клавиши Delete на клавиатуре.
Многие разработчики выбирают Табличный документ только потому, что им нужно объединить ячейки в заголовке (например, для отображения показателей «Выпуск» и «Отклонение» над несколькими колонками). Однако в Управляемых Формах этот вопрос решается гораздо элегантнее с помощью Групп колонок.
Разберем алгоритм создания сложного заголовка:
Таким образом, мы получаем визуально объединенную ячейку в заголовке, сохраняя при этом функционал обычной таблицы формы, где гораздо проще управлять правами на изменение состава строк.
Если по каким-то причинам вы решили оставить ТабличныйДокумент в качестве основного инструмента работы, то задача усложняется. В табличном документе нет простого свойства «запретить удаление строк», так как это свободное поле для рисования. Здесь мы применим механизм защиты.
Выясним, как настроить защиту ячеек:
ТабличногоДокумента свойство Защита = Истина.Защита и убедитесь, что ТолькоПросмотр = Ложь.Посмотрим на пример кода для инициализации такого документа:
// В процедуре инициализации или при выводе данных
ОбластьДляРедактирования = ТабДок.Область(6, 2, 10, 5); // Область данных под шапкой
ОбластьДляРедактирования.Защита = Ложь;
ТабДок.ТолькоПросмотр = Ложь; // Позволяет активировать ячейки
ТабДок.Защита = Истина; // Блокирует структурные изменения (удаление строк)
При таких настройках пользователь сможет вводить данные в разрешенные ячейки, но пункты меню «Удалить строки» будут неактивны.
Если стандартная кнопка «Удалить» на командной панели вам мешает, а горячая клавиша Del продолжает срабатывать, можно прибегнуть к «хитрости» с командами формы. Этот способ позволяет переопределить действие горячей клавиши.
Выполним следующие шаги:
ЗаглушкаУдаления.Del.Теперь при нажатии Del система будет вызывать вашу пустую команду вместо стандартного удаления строки таблицы.
Чтобы окончательно исключить возможность удаления через интерфейс, нам нужно проанализировать состав командных панелей. Платформа 1С по умолчанию заполняет их стандартными кнопками.
Разберем, как навести порядок в кнопках:
КонтекстноеМеню, привяжите его к таблице и наполните только разрешенными командами.Проанализировав ситуацию, мы видим, что наиболее правильным подходом для бизнес-приложений является использование стандартной Таблицы формы с иерархическими группами колонок. Это позволяет избежать «костылей» с защитой областей табличного документа и дает полный контроль над поведением строк через встроенные свойства платформы 1С.