Как запретить изменение табличной части в 1С, сохранив возможность открытия ссылок

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

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

Проблема использования свойства ТолькоПросмотр

Проанализируем стандартное поведение платформы. Если мы установим флаг ТолькоПросмотр в значение Истина для всей таблицы на управляемой форме, система полностью блокирует взаимодействие с этим элементом. Пользователь не сможет не только редактировать ячейки, но и нажимать на кнопки открытия (лупу), а также использовать стандартные события выбора. Это происходит потому, что режим «Только просмотр» предназначен для статического отображения данных без возможности интерактивного взаимодействия с элементами управления внутри ячеек.

Способ 1: Комбинация свойств элементов формы (без кода)

Разберем, как добиться желаемого результата, манипулируя только свойствами в конфигураторе. Этот метод считается наиболее предпочтительным, так как он не требует написания программного кода и сохраняет стандартное поведение интерфейса. Для тестирования и изменения параметров элементов прямо на лету пригодится инструмент редактирования свойств открытых форм в режиме «Предприятие».

Для реализации этого метода выполним следующие шаги:

  1. Выберем элемент формы Таблица (вашу ТЧ) и в палитре свойств снимем флаг ИзменятьСоставСтрок. Это заблокирует кнопки «Добавить», «Удалить» и «Скопировать», а также соответствующие горячие клавиши.
  2. Для конкретной колонки, в которой находится ссылка на документ, установим следующие параметры:
    • ТолькоПросмотр — Ложь (это важно для сохранения активности кнопок).
    • РедактированиеТекста — Ложь (запрещает ручной ввод с клавиатуры).
    • КнопкаОткрытия — Да.
    • КнопкаВыбора — Нет (чтобы пользователь не мог вызвать список выбора другого объекта).
  3. В свойстве РежимРедактирования самой таблицы выберем значение Непосредственно.

При таких настройках ячейка визуально доступна, но изменить её содержимое нельзя. Кнопка «Лупа» при этом остается активной и позволяет открыть форму объекта.

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

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

Выясним причину, почему это эффективно: используя события ПередНачаломДобавления и ПередУдалением, мы можем программно установить параметр Отказ = Истина.

Пример кода для модуля формы:


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

&НаКлиенте
Процедура СписокДокументовПередУдалением(Элемент, Отказ)
    Отказ = Истина; // Блокируем удаление существующих строк
КонецПроцедуры

Чтобы запретить изменение значения в самой колонке, используем событие НачалоВыбора для элемента управления этой колонки:


&НаКлиенте
Процедура СписокДокументовДокументНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь; // Запрещаем открытие списка выбора
КонецПроцедуры

Способ 3: Использование события Выбор для «заблокированной» таблицы

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

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


&НаКлиенте
Процедура СписокДокументовВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
    // Получаем текущие данные строки
    ТекущиеДанные = Элемент.ТекущиеДанные;
    
    Если ТекущиеДанные <> Неопределено Тогда
        // Отменяем стандартное действие, чтобы система не пыталась войти в режим редактирования
        СтандартнаяОбработка = Ложь;
        
        // Получаем ссылку из нужной колонки (например, колонки "ДокументСсылка")
        СсылкаНаОбъект = ТекущиеДанные.ДокументСсылка;
        
        // Проверяем, что ссылка заполнена и открываем форму
        Если ЗначениеЗаполнено(СсылкаНаОбъект) Тогда
            ПараметрыФормы = Новый Структура("Кключ", СсылкаНаОбъект);
            ОткрытьФорму("Документ.ВашТипДокумента.ФормаОбъекта", ПараметрыФормы);
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

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

Способ 4: Метод «Гиперссылки»

Проанализируем еще один элегантный способ — использование режима гиперссылки. В управляемых формах у элементов типа «Поле ввода», связанных со ссылочными типами данных, есть свойство Гиперссылка.

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

  1. Установим для всей таблицы ТолькоПросмотр = Истина.
  2. Для конкретной колонки установим свойство Гиперссылка в значение Да.

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

Способ 5: Использование Табличного документа на форме

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

Рассмотрим преимущества этого подхода:

При заполнении табличного документа в ячейку записывается значение (ссылка на документ). В свойстве ячейки ПараметрРасшифровки указывается это же значение. При двойном клике в режиме просмотра сработает стандартная расшифровка 1С, которая автоматически откроет форму документа.

Использование Условного оформления

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

  1. Перейдем на вкладку «Условное оформление» в редакторе формы.
  2. Добавим новое правило.
  3. В оформлении установим Только просмотр = Да.
  4. В условии укажем, например: Объект.СписокДокументов.Состояние = Значение(Перечисление.СостоянияДокументов.Утвержден).
  5. В оформляемых полях выберем всю таблицу или конкретные колонки.

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

← На главную