Как в 1С 8.3 сделать реквизит-ссылку доступным для открытия, но защищенным от изменения и очистки?

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

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

Разберем причины стандартных ошибок при настройке таких полей и подробно рассмотрим надежные варианты решения этой задачи.

Почему отключения кнопок выбора и очистки недостаточно

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

Если же включить свойство Гиперссылка, но пытаться перехватить клик через события группы выбора (НачалоВыбора, ОбработкаВыбора), то обработчики не сработают. Это происходит потому, что клик по гиперссылке не инициирует процесс выбора значения, а вызывает специальное событие нажатия.

Рассмотрим рабочие способы правильной настройки элементов формы.

Способ 1. Использование поля ввода со свойствами «ТолькоПросмотр» и «КнопкаОткрытия»

Разберем самый простой и стандартный для платформы 1С 8.3 способ, не требующий написания программного кода.

  1. Откроем свойства элемента формы колонки табличной части.
  2. Убедимся, что свойство Вид установлено в значение Поле ввода.
  3. Установим свойство ТолькоПросмотр в значение Истина (флажок включен).
  4. Установим свойство КнопкаОткрытия в значение Да.

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

Если требуется нестандартная логика при нажатии на лупу, можно назначить обработчик события Открытие для данного поля:


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

Способ 2. Использование поля надписи в виде гиперссылки

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

  1. В дереве элементов формы выбираем колонку табличной части.
  2. Изменяем свойство Вид с Поле ввода на Поле надписи.
  3. Устанавливаем свойство Гиперссылка в значение Истина.
  4. В палитре свойств находим категорию События и создаем процедуру для события Нажатие.

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


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

В конфигурациях на платформе 8.3 (включая «Бухгалтерию предприятия 3.0»), работающих в режиме без использования модальных окон, рекомендуется применять метод ПоказатьЗначение(...) или ОткрытьФорму(...) вместо устаревшего синхронного вызова ОткрытьЗначение(...).

Способ 3. Поле ввода с режимом гиперссылки и обработчиком «Нажатие»

Если необходимо оставить вид элемента Поле ввода, но отображать его как ссылку, настроим следующие параметры:

  1. Устанавливаем ТолькоПросмотр = Истина.
  2. Устанавливаем Гиперссылка = Истина.
  3. Для перехвата клика мышью создаем обработчик события Нажатие (а не событий выбора).

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

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

← На главную