Как убрать дублирование параметризуемой команды в панели навигации управляемой формы

Программист 1С v8.3 (Управляемые формы) 1С:Розница Торговля и дистрибуция
← На главную

При разработке в среде 1С:Предприятие 8.3 на управляемых формах программисты часто сталкиваются с механизмом автоматического формирования командного интерфейса. Одной из специфических проблем является появление лишних или дублирующихся гиперссылок в панели навигации формы (в группе Перейти). Это происходит при создании параметризуемых команд, которые система пытается услужливо разместить во всех подходящих по типу объектах. Рассмотрим подробно, почему это происходит и как правильно управлять видимостью таких команд.

Суть проблемы и механизм работы параметризуемых команд

Разберем ситуацию: вы создали новый РегистрСведений (например, для хранения дополнительных данных о товарах) и добавили в него команду. Чтобы эта команда открывала записи регистра, отфильтрованные по конкретной номенклатуре, вы указали в свойстве Тип параметра команды значение СправочникСсылка.Номенклатура. Как только вы это сделали, платформа 1С автоматически «пробрасывает» эту команду во все формы справочника Номенклатура, где тип данных совпадает с параметром.

Проблема дублирования часто возникает, когда в самом регистре отключено использование стандартных команд, но создана собственная команда, помещенная в стандартную группу Панель навигации формы.Перейти. В итоге в карточке товара пользователь видит две одинаковые или очень похожие ссылки. Это сбивает с толку и перегружает интерфейс.

Способ 1. Настройка командного интерфейса конкретной формы

Проанализируем самый прямой способ решения, который обсуждался на форуме. Если нам нужно убрать дубль в конкретной форме (например, в карточке номенклатуры), нам необходимо отредактировать состав её команд вручную.

  1. Откроем в конфигураторе форму объекта, на которой отображается лишняя команда (в нашем примере — форму справочника Номенклатура).
  2. Перейдем на закладку Командный интерфейс (она находится в нижней части окна редактора формы).
  3. Развернем ветку Панель навигации, а затем группу Перейти.
  4. Найдем в списке нашу команду, относящуюся к регистру сведений.
  5. Обратим внимание на колонки Видимость, Автовидимость и Автоположение.

Для решения задачи нам нужно снять галочку в колонке Автовидимость и, при необходимости, явно выключить флаг в колонке Видимость для всех ролей или конкретных пользователей. Также рекомендуется отключить Автоположение, чтобы система не пыталась втиснуть команду в интерфейс на основании своих алгоритмов. Рассмотрим подробнее: когда включена Автовидимость, платформа сама решает, показывать команду или нет, основываясь на правах доступа. Снятие этого флага дает нам полный контроль над элементом.

Способ 2. Управление через свойства самой команды

Выясним причину, по которой команда вообще попадает в группу «Перейти». При создании команды в объекте метаданных (Регистре сведений) мы указываем её расположение. Если выбрана группа Панель навигации формы.Перейти, это прямой сигнал системе отображать её как навигационную ссылку.

Если мы хотим, чтобы команда не дублировала стандартные переходы, мы можем изменить её группу на Панель действий.Сервис или создать свою собственную группу команд. Это изменит визуальное расположение ссылки, и она перестанет конфликтовать со стандартными переходами в верхней части формы.

Также важно проверить свойство Использовать стандартные команды у самого РегистраСведений. Если оно включено, платформа будет генерировать стандартную команду перехода. Если при этом создана еще и ручная параметризуемая команда, дублирование неизбежно. Рекомендация: если вы создаете свою логику перехода, стандартные команды объекта лучше отключить.

Способ 3. Использование функциональных опций (профессиональный подход)

Представим ситуацию, когда справочник Номенклатура используется в десятках различных форм, и ручная правка каждой формы (как в Способе 1) становится трудозатратной. В этом случае правильно использовать Функциональные опции.

Проанализируем алгоритм настройки:

  1. Создадим новую Константу (тип Булево), например, ИспользоватьСпецПереходВРегистр.
  2. Создадим объект ФункциональнаяОпция, привяжем её к этой константе.
  3. В составе функциональной опции отметим нашу параметризуемую команду из регистра сведений.

Теперь, управляя значением константы, мы можем мгновенно включать или выключать видимость команды во всей системе сразу, на всех формах. Это исключает необходимость заходить в каждую форму и снимать галочки видимости.

Программное управление видимостью

В некоторых случаях нам может потребоваться скрыть команду программно, в зависимости от условий (например, только для определенных групп товаров). Рассмотрим, как это сделать в коде формы.

Хотя напрямую управлять элементами КомандногоИнтерфейса через код в рантайме сложнее, чем обычными кнопками, мы можем воздействовать на элементы формы, если команда выведена в виде кнопки. Посмотрим на пример кода в обработчике ПриСозданииНаСервере:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Если нужно скрыть программно созданный элемент или кнопку команды
    ЭлементКоманды = ЭтаФорма.КоманднаяПанель.ПодчиненныеЭлементы.Найти("РегистрСведенийМойРегистр_МояКоманда");
    Если ЭлементКоманды <> Неопределено Тогда
        ЭлементКоманды.Видимость = Ложь;
    КонецЕсли;

КонецПроцедуры

Однако стоит помнить, что для команд, находящихся именно в панели навигации (слева или вверху формы в разделе "Перейти"), программное управление через коллекции элементов формы ограничено. Основным инструментом здесь остается именно настройка Командного интерфейса в конфигураторе или использование ролевой модели.

Резюме

Подведем итог. Если вы столкнулись с тем, что созданная вами команда в Регистре Сведений «вылезла» в карточке Номенклатуры и продублировалась:

  1. Проверьте, не включены ли стандартные команды у регистра.
  2. Зайдите в Командный интерфейс формы Номенклатуры и отключите Автовидимость для этой команды.
  3. Убедитесь, что Тип параметра команды настроен верно и не вызывает конфликтов с другими объектами.

Такой системный подход позволит вам создавать чистые и удобные интерфейсы, не перегруженные лишними элементами навигации.

← На главную