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