В практике разработки на платформе 1С:Предприятие 8.3 часто возникает задача: необходимо вывести список документов или справочников в табличную часть (ТЧ) так, чтобы пользователь мог просматривать информацию и открывать связанные объекты, но не имел возможности изменять состав строк или перевыбирать значения. Стандартная установка свойства ТолькоПросмотр для всей таблицы часто блокирует любую активность, включая кнопки открытия. Рассмотрим подробнее, как решить эту задачу различными методами.
Проанализируем стандартное поведение платформы. Если мы установим флаг ТолькоПросмотр в значение Истина для всей таблицы на управляемой форме, система полностью блокирует взаимодействие с этим элементом. Пользователь не сможет не только редактировать ячейки, но и нажимать на кнопки открытия (лупу), а также использовать стандартные события выбора. Это происходит потому, что режим «Только просмотр» предназначен для статического отображения данных без возможности интерактивного взаимодействия с элементами управления внутри ячеек.
Разберем, как добиться желаемого результата, манипулируя только свойствами в конфигураторе. Этот метод считается наиболее предпочтительным, так как он не требует написания программного кода и сохраняет стандартное поведение интерфейса. Для тестирования и изменения параметров элементов прямо на лету пригодится инструмент редактирования свойств открытых форм в режиме «Предприятие».
Для реализации этого метода выполним следующие шаги:
ИзменятьСоставСтрок. Это заблокирует кнопки «Добавить», «Удалить» и «Скопировать», а также соответствующие горячие клавиши.ТолькоПросмотр — Ложь (это важно для сохранения активности кнопок).РедактированиеТекста — Ложь (запрещает ручной ввод с клавиатуры).КнопкаОткрытия — Да.КнопкаВыбора — Нет (чтобы пользователь не мог вызвать список выбора другого объекта).Непосредственно.При таких настройках ячейка визуально доступна, но изменить её содержимое нельзя. Кнопка «Лупа» при этом остается активной и позволяет открыть форму объекта.
Если настройки свойств не помогают или требуется более гибкое управление, рассмотрим программный метод. Мы можем позволить пользователю «входить» в режим редактирования, но пресекать любые попытки изменения данных на корню.
Выясним причину, почему это эффективно: используя события ПередНачаломДобавления и ПередУдалением, мы можем программно установить параметр Отказ = Истина.
Пример кода для модуля формы:
&НаКлиенте
Процедура СписокДокументовПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр)
Отказ = Истина; // Блокируем добавление новых строк
КонецПроцедуры
&НаКлиенте
Процедура СписокДокументовПередУдалением(Элемент, Отказ)
Отказ = Истина; // Блокируем удаление существующих строк
КонецПроцедуры
Чтобы запретить изменение значения в самой колонке, используем событие НачалоВыбора для элемента управления этой колонки:
&НаКлиенте
Процедура СписокДокументовДокументНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь; // Запрещаем открытие списка выбора
КонецПроцедуры
Посмотрим на ситуацию под другим углом. Если мы все же решили оставить таблицу в режиме ТолькоПросмотр = Истина, чтобы гарантировать полную неизменяемость, мы можем реализовать открытие документов через обработку события Выбор.
Рассмотрим пример реализации:
&НаКлиенте
Процедура СписокДокументовВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
// Получаем текущие данные строки
ТекущиеДанные = Элемент.ТекущиеДанные;
Если ТекущиеДанные <> Неопределено Тогда
// Отменяем стандартное действие, чтобы система не пыталась войти в режим редактирования
СтандартнаяОбработка = Ложь;
// Получаем ссылку из нужной колонки (например, колонки "ДокументСсылка")
СсылкаНаОбъект = ТекущиеДанные.ДокументСсылка;
// Проверяем, что ссылка заполнена и открываем форму
Если ЗначениеЗаполнено(СсылкаНаОбъект) Тогда
ПараметрыФормы = Новый Структура("Кключ", СсылкаНаОбъект);
ОткрытьФорму("Документ.ВашТипДокумента.ФормаОбъекта", ПараметрыФормы);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Важный момент: использование этого метода позволяет пользователю открывать документы двойным кликом мыши даже в полностью заблокированной таблице.
Проанализируем еще один элегантный способ — использование режима гиперссылки. В управляемых формах у элементов типа «Поле ввода», связанных со ссылочными типами данных, есть свойство Гиперссылка.
Рассмотрим шаги по настройке:
ТолькоПросмотр = Истина.Гиперссылка в значение Да.В этом режиме текст в ячейке будет отображаться синим цветом, как веб-ссылка. Платформа 1С позволяет нажимать на такие ссылки даже в режиме чтения. Это один из самых интуитивно понятных для пользователя способов навигации.
Если задача состоит только в отображении данных без необходимости использовать механизмы табличной части (например, итоги, подвалы, стандартные команды ТЧ), можно использовать Табличный документ, размещенный прямо на форме.
Рассмотрим преимущества этого подхода:
Расшифровка.При заполнении табличного документа в ячейку записывается значение (ссылка на документ). В свойстве ячейки ПараметрРасшифровки указывается это же значение. При двойном клике в режиме просмотра сработает стандартная расшифровка 1С, которая автоматически откроет форму документа.
Рассмотрим ситуацию, когда запрет редактирования должен зависеть от условий (например, запретить менять только проведенные документы). В этом случае идеально подходит механизм Условного оформления формы. Для быстрого формирования соответствующих настроек можно использовать конструктор кода условного оформления для табличных частей.
Только просмотр = Да.Объект.СписокДокументов.Состояние = Значение(Перечисление.СостоянияДокументов.Утвержден).Резюме: Для простого запрета редактирования при сохранении возможности открытия лучше всего подходит Способ 1 (настройка свойств РедактированиеТекста и ИзменятьСоставСтрок). Если же требуется максимальная жесткость и безопасность данных, используйте Способ 3 с программным открытием формы через событие Выбор при включенном режиме ТолькоПросмотр.