Как запретить ручной ввод и удаление строк в дереве значений 1С

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

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

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

Способ 1. Использование свойства «Изменять состав строк»

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

Рассмотрим по шагам, как его настроить:

  1. Откроем редактор управляемой формы в конфигураторе.
  2. Выберем в списке элементов формы наше ДеревоЗначений.
  3. В окне свойств найдем группу параметров «Использование».
  4. Найдем флажок «Изменять состав строк» (в программном коде это свойство называется ИзменятьСоставСтрок или ChangeRowSet).
  5. Снимем этот флажок.

Что произойдет после отключения этого свойства?

Система автоматически заблокирует все стандартные способы изменения количества строк пользователем:

При этом важно понимать, что программный код по-прежнему сможет добавлять строки. Методы типа ДеревоОбъект.Строки.Добавить() или Элементы.Дерево.ДобавитьСтроку() продолжат работать без ошибок.

Способ 2. Программный запрет через обработчики событий

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

Рассмотрим использование события ПередНачаломДобавления. Нам нужно создать на клиенте процедуру-обработчик для нашего элемента формы:


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

Аналогично мы можем поступить с удалением строк, используя событие ПередУдалением:


&НаКлиенте
Процедура ДеревоПередУдалением(Элемент, Отказ)
    Отказ = Истина;
    ПоказатьПредупреждение(, "Удаление строк недопустимо!");
КонецПроцедуры

Такой подход позволяет гибко управлять логикой. Например, мы можем разрешить удаление строк только пользователям с определенными ролями или только для определенных узлов дерева.

Способ 3. Выборочное редактирование колонок

Как упоминалось в исходной проблеме, часто требуется оставить возможность редактировать только пару числовых полей, запретив правку остальных данных. Если мы просто установим для всего дерева свойство ТолькоПросмотр = Истина, пользователь не сможет ввести данные даже в разрешенные поля.

Посмотрим, как настроить комбинированный доступ:

  1. Убедимся, что у самого элемента формы (Дерева) свойство «Только просмотр» выключено.
  2. Убедимся, что свойство «Изменять состав строк» также выключено (как мы разобрали в первом способе).
  3. Теперь перейдем к настройке конкретных колонок дерева.
  4. Для всех колонок, которые должны быть справочными (только для чтения), установим свойство «Только просмотр» в значение Истина.
  5. Для тех двух числовых колонок, которые пользователь должен заполнять, оставим свойство «Только просмотр» в значении Ложь.

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

Дополнительные настройки: Командная панель и Контекстное меню

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

В этом случае необходимо выполнить следующие действия:

Ограничение перетаскивания (Drag-and-Drop)

Мало кто задумывается, что даже при запрете кнопок пользователь может «вбросить» строку в дерево, если перетащит ее из другой таблицы или попытается переместить существующую строку внутри дерева. Чтобы исключить любые манипуляции, проанализируем настройки перетаскивания в свойствах дерева:

Это гарантирует полную статичность структуры вашего дерева значений, сформированной программно.

Резюме

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

  1. Отключение свойства ИзменятьСоставСтрок для блокировки кнопок и горячих клавиш.
  2. Установка свойства ТолькоПросмотр для всех колонок, кроме целевых.
  3. Отключение свойств перетаскивания для предотвращения случайного изменения порядка строк.

Эти действия обеспечат надежную работу интерфейса и предотвратят ошибки ввода данных пользователем.

← На главную