Как удалить команду из меню "Создать на основании" в 1С:УНФ и 1С:УТ с помощью расширения или без программирования

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

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

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

Выясняем причину: почему кнопки нет в форме и модуле менеджера?

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

  1. Связи прописаны в метаданных напрямую. Платформа 1С автоматически определяет возможность ввода на основании, анализируя свойства подчиненных документов. Если у документа СчетНаОплату в свойствах «Ввод на основании» указан ЗаказПокупателя, платформа сама выведет эту команду в интерфейс.
  2. Динамическое кэширование БСП. За формирование списков отвечает подсистема «Подключаемые команды». БСП считывает структуру метаданных, один раз формирует список доступных команд при первом запуске системы, а затем кэширует его в сеансе пользователя.

---

Способ 1. Интерактивная настройка в пользовательском режиме (без кода)

В современных версиях «1С:УНФ» и «1С:Розница» разработчики добавили штатный пользовательский инструмент, который позволяет гибко настраивать состав команд создания на основании прямо в режиме предприятия.

Рассмотрим по шагам, как это сделать:

  1. Откроем документ-источник (в нашем примере — любой существующий Заказ покупателя).
  2. В верхней командной панели формы нажмем на кнопку «Создать на основании».
  3. Прокрутим открывшийся выпадающий список до самого низа и выберем пункт «Настроить».
  4. В появившемся диалоговом окне «Настройка ввода на основании» перед нами откроется полный перечень всех доступных для ввода документов.
  5. Просто снимем флажок (галочку) напротив документа Счет на оплату.
  6. Нажмем кнопку «Применить» (или «Сохранить»).

После этого лишняя команда мгновенно пропадет из списка. Данный способ невероятно удобен, так как не требует монопольного доступа, изменения конфигурации и написания кода. Однако у него есть особенность: эти настройки индивидуальны для каждого пользователя (или группы пользователей, в зависимости от прав доступа).

---

Способ 2. Программное отключение через расширение конфигурации

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

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

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

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

Проанализируем пример кода, который решает нашу задачу:


&После("ПередДобавлениемКомандСозданияНаОсновании")
Процедура ИмяПрефикса_ПередДобавлениемКомандСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры, СтандартнаяОбработка)
    
    // 1. Проверяем, что команды генерируются именно для интересующего нас документа-источника
    Если Параметры.ИмяТипаОбъектаОснования = "Документ.ЗаказПокупателя" Тогда
        
        // 2. Ищем строку с ненужной нам командой ввода на основании.
        // Поиск можно производить по колонке "ИмяФормы" или "Идентификатор".
        // Для Счета на оплату это будет имя формы его создания.
        
        СтрокаКоманды = КомандыСозданияНаОсновании.Найти("Документ.СчетНаОплату", "ИмяФормы");
        
        // Если поиск по имени формы не дал результатов, можно попробовать найти по идентификатору:
        Если СтрокаКоманды = Неопределено Тогда
            СтрокаКоманды = КомандыСозданияНаОсновании.Найти("Документ.СчетНаОплату", "Идентификатор");
        КонецЕсли;
        
        // 3. Если команда найдена в таблице подключаемых команд, просто удаляем эту строку
        Если СтрокаКоманды <> Неопределено Тогда
            КомандыСозданияНаОсновании.Удалить(СтрокаКоманды);
        КонецЕсли;
        
    КонецЕсли;
    
КонецПроцедуры

Важное примечание по отладке этого кода:

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

Чтобы изменения вступили в силу и код отработал, обязательно нужно полностью перезапустить сеанс работы пользователя в 1С (а в некоторых случаях — очистить кэш или перезапустить службу сервера 1С:Предприятие, если вы работаете в клиент-серверном варианте и тестируете под отладчиком). Также убедитесь, что в параметрах запуска вашей базы активен режим отладки на сервере.

Используя данный метод, вы добьетесь стабильного результата. При обновлении типовой конфигурации «1С:УНФ» или «1С:УТ» ваше расширение продолжит корректно функционировать, не создавая конфликтов с механизмами поддержки.

← На главную