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