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