При разработке функционала в 1С:Управление торговлей 10.3 часто возникает необходимость наложить строгие ограничения на действия пользователей в табличных частях. Сегодня мы разберем, как сделать первую ячейку колонки «Артикул» доступной только для чтения, запретить её удаление и предотвратить изменение порядка строк в таблице.
Самый надежный и правильный способ управления доступностью ячеек в Табличном поле — это использование события ПриВыводеСтроки. Это событие срабатывает в момент отрисовки каждой строки таблицы на экране, что позволяет динамически изменять оформление конкретной ячейки в зависимости от данных в этой строке.
Чтобы заблокировать ячейку «Артикул» только для первой строки (с индексом 0), воспользуемся следующим алгоритмом:
ПриВыводеСтроки для элемента управления ТабличноеПоле.ТолькоПросмотр для конкретной ячейки.Рассмотрим пример реализации:
Процедура ТабличноеПолеПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
// Проверяем, является ли текущая строка первой в списке
Если Элемент.Индекс(ДанныеСтроки) = 0 Тогда
// Устанавливаем режим только для чтения для колонки Артикул
ОформлениеСтроки.Ячейки.Артикул.ТолькоПросмотр = Истина;
КонецЕсли;
КонецПроцедуры
Этот метод гарантирует, что визуально и функционально ячейка будет защищена от изменений. Если пользователь попытается активировать ячейку, платформа не позволит войти в режим редактирования.
Второй частый вопрос — как запретить перемещение первой строки, при этом сохранив возможность сортировать остальные элементы. В стандартных формах 1С за это отвечает свойство ИзменятьПорядокСтрок. Однако, если установить его в значение Ложь, кнопки перемещения перестанут работать для всей таблицы целиком.
Если вам требуется выборочное ограничение, рекомендуем следующий подход:
ТабличноеПоле.ТекущаяСтрока — это первая строка, просто выводите сообщение пользователю или игнорируйте нажатие.Рассмотрим пример логики для кнопки «Вверх»:
Процедура КнопкаВверхНажатие(Кнопка)
Если Элемент.ТекущаяСтрока = НужнаяНамСтрока Тогда
Предупреждение("Первую строку перемещать запрещено!");
Возврат;
КонецЕсли;
// Здесь код стандартного перемещения строки
КонецПроцедуры
Для предотвращения удаления критически важных данных, таких как основной артикул, недостаточно только заблокировать ячейку. Необходимо использовать событие ПередУдалением табличного поля. Это событие позволяет полностью отменить действие пользователя по нажатию клавиши Delete или кнопки на панели:
Процедура ТабличноеПолеПередУдалением(Элемент, Отказ)
Если Элемент.ТекущаяСтрока = ПерваяСтрока Тогда
Предупреждение("Основной артикул удалять запрещено!");
Отказ = Истина;
КонецЕсли;
КонецПроцедуры
Использование свойства Отказ = Истина в обработчике ПередУдалением — это самый надежный способ защитить данные от несанкционированного удаления в пользовательском интерфейсе.
Мы проанализировали три ключевых аспекта защиты данных в табличной части 1С:
ОформлениеСтроки.Ячейки.ИмяКолонки.ТолькоПросмотр = Истина в событии ПриВыводеСтроки.Отказ = Истина в событии ПередУдалением.Эти простые, но эффективные приемы позволят вам создать надежный интерфейс, который защитит критически важные данные от случайных или преднамеренных правок пользователями.