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

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

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

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

Проблема стандартного поведения поля ввода

Когда мы работаем с реквизитом типа «СправочникСсылка», платформа 1С автоматически предоставляет пользователю несколько способов изменения данных: нажатие на кнопку выбора (три точки), ввод текста (автоподбор) и использование горячей клавиши F4. Даже если мы программно скроем кнопку выбора, установив КнопкаВыбора = Ложь, клавиша F4 продолжит работать, открывая форму выбора справочника.

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

Способ 1. Использование события «НачалоВыбора»

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

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


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

Установив СтандартнаяОбработка = Ложь, мы говорим системе: «Не делай то, что ты собиралась сделать по умолчанию». В результате нажатие F4 или клик по кнопке выбора (если она видна) просто ничего не вернет. При этом кнопка открытия (лупа) продолжает работать штатно, так как она вызывает другое событие — Открытие.

Способ 2. Режим «Только просмотр» в сочетании с гиперссылкой

Многие разработчики сталкиваются с тем, что установка ТолькоПросмотр = Истина делает поле серым и «неживым». Однако в управляемых формах есть небольшая хитрость, позволяющая превратить такое поле в активную ссылку. Проанализируем этот метод.

Если мы хотим, чтобы поле выглядело как информационная надпись, но позволяло открывать объект, выполним следующие настройки в палитре свойств или программно:

  1. Установим ТолькоПросмотр = Истина. Это заблокирует ввод текста и нажатие F4.
  2. Установим Гиперссылка = Истина.

Посмотрим на пример программной настройки при создании формы:


Элементы.ЗапасыНоменклатура.ТолькоПросмотр = Истина;
Элементы.ЗапасыНоменклатура.Гиперссылка = Истина;

В таком режиме поле превращается в кликабельный текст. При нажатии на него система автоматически откроет форму объекта. Клавиша F4 при этом игнорируется, так как элемент находится в режиме просмотра.

Способ 3. Блокировка автоподбора и очистки

Даже если мы запретили выбор через форму, пользователь может попытаться стереть значение клавишей Backspace или Del, либо начать вводить наименование другой номенклатуры, надеясь на автоподбор. Чтобы закрыть эти «дыры», нужно обработать еще два события.

Во-первых, событие АвтоПодбор. Оно срабатывает, когда пользователь начинает печатать в поле:


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

Во-вторых, событие Очистка, чтобы нельзя было удалить текущее значение:


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

Способ 4. Использование декорации-надписи (для продвинутых)

Если требования к интерфейсу очень строгие, и вам нужно полностью исключить возможность фокуса на поле ввода, можно прибегнуть к замене поля ввода на Поле декорации с видом «Надпись».

Выясним причину, почему это эффективно: у декорации в принципе нет функционала выбора или редактирования. Мы просто выводим текст ссылки. Чтобы реализовать открытие, сделаем следующее:

  1. Установим свойство декорации Гиперссылка = Истина.
  2. В событии Нажатие пропишем программное открытие формы.

&НаКлиенте
Процедура ДекорацияНоменклатураНажатие(Элемент)
    ПараметрыФормы = Новый Структура("Ключ", Объект.Номенклатура);
    ОткрытьФорму("Справочник.Номенклатура.ФормаОбъекта", ПараметрыФормы);
КонецПроцедуры

Резюме и рекомендации

Проанализировав все варианты, можно сделать вывод, что выбор метода зависит от контекста:

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

← На главную