Как скрыть стандартное подменю «Создать на основании» и настроить корректный вывод команд в 1С 8.3

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

При разработке и расширении типовых или отраслевых решений на платформе 1С:Предприятие 8.3 разработчики часто сталкиваются с неприятным визуальным поведением интерфейса. Вы добавляете новый документ, настраиваете для него стандартный ввод на основании существующего документа, и вдруг на форме документа-источника появляется некрасивое, дублирующее меню «Создать на основании». При этом все штатные документы конфигурации аккуратно сгруппированы в одном красивом программном подменю, а ваш новый документ выводится отдельно, ломая весь дизайн интерфейса.

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

Почему на форме появляется два разных подменю «Создать на основании»?

Для начала проанализируем ситуацию изнутри. В современных конфигурациях 1С вывод команд создания на основании управляется не напрямую платформой, а программным путем через подсистему БСП «Подключаемые команды».

Когда форма документа-источника (назовем его Документ А) открывается, БСП динамически генерирует кнопки для создания связанных документов (группы документов Б) и помещает их в специальную программную группу команд (обычно она называется ПодменюСоздатьНаОсновании). При этом стандартные команды платформы для этих документов скрываются программно или отключены в конфигураторе.

Однако, как только вы добавляете свой собственный документ в схему ввода на основании документа А, происходят следующие процессы:

  1. Платформа видит, что у документа А появился новый подчиненный документ, для которого разрешен ввод на основании.
  2. В метаданных вашего документа включено свойство ИспользоватьСтандартныеКоманды.
  3. Поскольку БСП еще ничего не знает о вашем новом документе (вы не зарегистрировали его в коде подсистемы), программный механизм БСП игнорирует его команду создания.
  4. Платформа «1С:Предприятие» замечает, что для документа существует активная параметризованная команда ввода на основании, которая не размещена на форме вручную и не скрыта. В этот момент срабатывает автоматический алгоритм платформы: она самостоятельно генерирует стандартное меню «Создать на основании» и выводит туда вашу единственную команду.

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

Рассмотрим подробнее способы решения этой задачи.

Способ 1. Быстрые платформенные решения (без изменения кода БСП)

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

Вариант А. Ручное размещение команды на форме (эффект скрытия автоменю)

В платформе 1С заложен важный алгоритм: если разработчик самостоятельно разместил стандартную параметризованную команду на форме, платформа считает, что вы полностью контролируете ее отображение. В этом случае она **не будет автоматически создавать** стандартное подменю «Создать на основании».

Выполним следующие шаги:

  1. Откройте форму документа-источника (Документ А) в конфигураторе.
  2. Перейдите на вкладку «Командный интерфейс» формы или найдите в окне элементов формы список команд.
  3. Найдите стандартную параметризованную команду создания вашего нового документа на основании текущего.
  4. Перетащите эту команду вручную в дерево элементов формы (например, в командную панель или в любую другую группу).
  5. Если вам не нужна эта кнопка в том месте, куда вы ее перетащили, просто установите для нее свойство Видимость в значение Ложь (снимите галочку видимости).

Поскольку команда теперь принудительно размещена на форме (пусть даже и невидима), платформа отключит автогенерацию стандартного подменю. На форме останется только красивое подменю БСП.

Вариант Б. Изменение источника команд для командной панели

Еще один элегантный способ управления автогенерацией команд на форме — изменение настроек источника команд:

  1. Выделите командную панель формы (или созданную вручную группу команд с видом «Подменю»).
  2. В палитре свойств найдите свойство ИсточникКоманд.
  3. По умолчанию там установлено значение Авто (из-за чего платформа принудительно затягивает все глобальные и параметризованные команды ввода на основании из метаданных).
  4. Переключите это свойство в значение Форма.

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

Способ 2. Решение по стандартам БСП (Рекомендуемый профессиональный метод)

Если вы хотите, чтобы ваше отраслевое или кастомное решение работало стабильно, поддерживало обновление конфигурации и ваш документ гармонично встроился в общий список документов {Б}, необходимо правильно зарегистрировать команду создания в БСП.

Разберем по шагам, как это сделать программно.

Шаг 1. Отключение стандартного вывода команды платформой

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

Шаг 2. Описание команды в модуле менеджера документа-приемника

В БСП за интеграцию отвечает модуль менеджера создаваемого документа. Откройте модуль менеджера вашего нового документа и добавьте в него экспортную процедуру ДобавитьКомандыСозданияНаОсновании.

Посмотрим на пример реализации этой процедуры:


Процедура ДобавитьКомандыСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры) Экспорт
    
    // 1. Проверяем права текущего пользователя на создание данного документа
    Если НЕ ПравоДоступа("Добавление", Метаданные.Документы.ИмяВашегоНовогоДокумента) Тогда
        Возврат;
    КонецЕсли;
    
    // 2. Описываем новую команду для интеграции в БСП
    Команда = КомандыСозданияНаОсновании.Добавить();
    Команда.Представление = "Имя вашего документа в меню";
    Команда.Идентификатор = "СоздатьВашНовыйДокумент";
    
    // Указываем тип документа-источника (Документ А)
    Команда.СписокИсточников.Добавить(Метаданные.Документы.Документ_А);
    
    // Задаем обработчик команды. Это может быть стандартное заполнение БСП
    Команда.Обработчик = "СозданиеНаОснованииКлиент.ВыполнитьКомандуСозданияНаОсновании";
    
КонецПроцедуры

Шаг 3. Регистрация документа в переопределяемом модуле системы

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

Найдите в конфигураторе общий модуль СозданиеНаОснованииПереопределяемый и откройте его процедуру ПриОпределенииОбъектовСКомандамиСозданияНаОсновании. Добавьте туда ваш документ:


Процедура ПриОпределенииОбъектовСКомандамиСозданияНаОсновании(СписокОбъектов) Экспорт
    
    // Добавляем наш новый документ в список объектов, поддерживающих интеграцию БСП
    СписокОбъектов.Добавить(Метаданные.Документы.ИмяВашегоНовогоДокумента);
    
КонецПроцедуры

Шаг 4. Обновление информационной базы

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

Для этого запустите конфигурацию в режиме «1С:Предприятие» под пользователем с полными правами с параметром запуска ЗапуститьОбновлениеИнформационнойБазы или просто выполните обновление версии конфигурации (если вы меняли номер версии в метаданных). Также в некоторых конфигурациях доступна специальная обработка «Инструменты разработчика», позволяющая принудительно обновить кэш подключаемых команд.

Сравнение подходов

Проанализируем преимущества и недостатки обоих методов, чтобы вы могли выбрать наиболее подходящий для вашего проекта:

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

← На главную