Как сделать колонку таблицы на управляемой форме 1С недоступной для редактирования, но кликабельной?

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

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

Проанализируем ситуацию: у нас есть табличное поле (ТабличноеПоле или ТаблицаФормы) на управляемой форме. Одна из его колонок имеет тип данных СправочникСсылка, что часто встречается, когда реализован программный вывод произвольной таблицы значений. Нам нужно, чтобы пользователь не мог выбрать в этой ячейке другое значение, но мог по клику открыть форму элемента справочника, который там уже указан.

Решение 1: Программное управление свойствами элемента управления (через конструктор управляемых форм)

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

Чтобы это сделать, необходимо обратиться к элементу управления колонки и установить свойство КнопкаОткрытия в значение Ложь. Это уберет стандартную кнопку с тремя точками ("..."), которая отвечает за вызов формы выбора значения.

Посмотрим на пример. Допустим, ваша таблица на форме называется Товары, а колонка, которую нужно заблокировать, — Номенклатура. Код следует разместить в процедуре-обработчике ПриСозданииНаСервере.


Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    // Обращаемся к элементу управления колонки и скрываем кнопку выбора/открытия
    Элементы.Товары.Колонки.Номенклатура.ЭлементУправления.КнопкаОткрытия = Ложь;

КонецПроцедуры

Что делает этот код?

  1. Элементы.Товары — это обращение к таблице на форме.
  2. .Колонки.Номенклатура — обращение к нужной колонке по ее имени.
  3. .ЭлементУправления — получаем доступ к свойствам элемента управления, что позволяет реализовать программное изменение форм (в данном случае, для поля ввода).
  4. .КнопкаОткрытия = Ложь — данное свойство управляет видимостью кнопки, которая позволяет и выбрать новое значение, и открыть существующее. Отключив ее, мы убираем возможность выбора, но стандартное событие открытия по гиперссылке (двойной клик или Enter) продолжает работать.

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

Решение 2: Использование механизма условного оформления (рекомендуемый способ)

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

Разберем по шагам, как настроить условное оформление, чтобы сделать колонку недоступной для редактирования:

  1. Откройте палитру свойств формы (обычно вызывается по F4 или через контекстное меню).
  2. Найдите свойство УсловноеОформление и нажмите на кнопку "Открыть".
  3. В открывшемся окне нажмите "Добавить", чтобы создать новый элемент условного оформления.
  4. Вкладка "Оформление". Здесь мы указываем, *что* именно нужно изменить. Поставьте галочку напротив свойства Только просмотр и убедитесь, что его значение установлено в Истина.
  5. Вкладка "Условие". Здесь задается условие, при котором будет срабатывать оформление. Если колонка должна быть заблокирована всегда, оставьте эту вкладку пустой. Если же блокировка зависит, например, от значения в другой колонке (скажем, СтатусЗаказа), вы можете добавить условие. Например, Объект.Товары.СтатусЗаказа = &СтатусВыполнен.
  6. Вкладка "Оформляемые поля". Это ключевой шаг. Здесь нужно указать, к какому полю (колонке) применять наше оформление. Нажмите "Добавить" и в списке полей выберите нужную колонку, например, Номенклатура (она будет отображаться в списке как Товары.Номенклатура).
  7. Нажмите "ОК" для сохранения настроек.

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

Преимущества этого метода:

Решение 3: Динамическое управление через события формы

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

Рассмотрим пример для таблицы Товары и колонки Номенклатура.


&НаКлиенте
Процедура ТоварыПриАктивизацииЯчейки(Элемент)
    
    // Получаем имя текущей колонки
    ИмяТекущейКолонки = Элемент.ТекущаяКолонка.Имя;
    
    // Если пользователь находится в колонке "Номенклатура"
    Если ИмяТекущейКолонки = "Номенклатура" Тогда
        // Устанавливаем режим "только просмотр" для всей таблицы
        Элементы.Товары.ТолькоПросмотр = Истина;
    Иначе
        // В других колонках разрешаем редактирование
        Элементы.Товары.ТолькоПросмотр = Ложь;
    КонецЕсли;

КонецПроцедуры

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

Итог

Мы рассмотрели три способа заблокировать колонку от редактирования, сохранив навигацию по ссылке. Для большинства случаев наиболее правильным и гибким решением является использование условного оформления. Если же требуется простое статическое отключение редактирования без всяких условий, то программное управление свойством КнопкаОткрытия будет самым быстрым решением.

← На главную