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