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