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

Программист 1С v8.3 (Обычные формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

При разработке функционала в 1С:Управление торговлей 10.3 часто возникает необходимость наложить строгие ограничения на действия пользователей в табличных частях. Сегодня мы разберем, как сделать первую ячейку колонки «Артикул» доступной только для чтения, запретить её удаление и предотвратить изменение порядка строк в таблице.

Блокировка редактирования отдельной ячейки

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

Чтобы заблокировать ячейку «Артикул» только для первой строки (с индексом 0), воспользуемся следующим алгоритмом:

  1. Откройте форму, где расположена ваша табличная часть.
  2. Найдите событие ПриВыводеСтроки для элемента управления ТабличноеПоле.
  3. Добавьте программный код, который проверяет индекс строки и устанавливает свойство ТолькоПросмотр для конкретной ячейки.

Рассмотрим пример реализации:


Процедура ТабличноеПолеПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
    // Проверяем, является ли текущая строка первой в списке
    Если Элемент.Индекс(ДанныеСтроки) = 0 Тогда
        // Устанавливаем режим только для чтения для колонки Артикул
        ОформлениеСтроки.Ячейки.Артикул.ТолькоПросмотр = Истина;
    КонецЕсли;
КонецПроцедуры

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

Ограничение изменения порядка строк

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

Если вам требуется выборочное ограничение, рекомендуем следующий подход:

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

Рассмотрим пример логики для кнопки «Вверх»:


Процедура КнопкаВверхНажатие(Кнопка)
    Если Элемент.ТекущаяСтрока = НужнаяНамСтрока Тогда
        Предупреждение("Первую строку перемещать запрещено!");
        Возврат;
    КонецЕсли;
    // Здесь код стандартного перемещения строки
КонецПроцедуры

Запрет удаления строки

Для предотвращения удаления критически важных данных, таких как основной артикул, недостаточно только заблокировать ячейку. Необходимо использовать событие ПередУдалением табличного поля. Это событие позволяет полностью отменить действие пользователя по нажатию клавиши Delete или кнопки на панели:


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

Использование свойства Отказ = Истина в обработчике ПередУдалением — это самый надежный способ защитить данные от несанкционированного удаления в пользовательском интерфейсе.

Подведем итоги

Мы проанализировали три ключевых аспекта защиты данных в табличной части 1С:

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

← На главную