Почему меню "Создать на основании" заполнено, если закладка "Ввод на основании" пуста?

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

В процессе разработки или доработки конфигураций 1С, особенно типовых, часто возникает ситуация, когда поведение системы кажется нелогичным с точки зрения стандартных настроек в конфигураторе. Один из таких классических случаев — заполненное меню "Создать на основании" в форме документа при абсолютно пустой закладке "Ввод на основании" у соответствующего объекта метаданных. Давайте разберемся, откуда система "тянет" эти команды и где их искать.

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

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

Способ 1. Стандартный механизм "Ввод на основании"

Это базовый и самый простой способ, который первым делом проверяет каждый разработчик. Он настраивается непосредственно в свойствах объекта конфигурации (например, документа или справочника).

  1. Откройте конфигуратор.
  2. Найдите в дереве метаданных нужный объект (например, Документ.ЗаказПокупателя).
  3. Откройте его свойства и перейдите на закладку "Ввод на основании".
  4. В списке "На основании могут вводиться" вы можете добавить объекты, которые должны создаваться на основе текущего.

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

Способ 2. Программное формирование через Библиотеку стандартных подсистем (БСП)

Это самый распространенный и мощный механизм в современных типовых конфигурациях (УНФ, ERP, УТ и др.). Он основан на подсистеме "Подключаемые команды" из Библиотеки стандартных подсистем (БСП). Этот подход позволяет добавлять команды динамически, с учетом различных условий, и не требует изменения структуры самого объекта метаданных, что критически важно для сохранения возможности автоматического обновления конфигурации.

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

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

  1. В конфигураторе найдите объект, из которого вызывается меню "Создать на основании" (например, Документ.ЗаказПокупателя).
  2. Откройте его модуль менеджера.
  3. Выполните поиск по модулю по имени процедуры: ДобавитьКомандыСозданияНаОсновании.

Если такая процедура найдена, значит, именно она отвечает за программное добавление команд. Рассмотрим ее структуру на условном примере:


Процедура ДобавитьКомандыСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры) Экспорт

    // Параметры.Источник - это массив объектов, на основании которых нужно создать команды.
    // Если массив пустой или содержит более одного элемента, команды не добавляем.
    Если Параметры.Источник.Количество() <> 1 Тогда
        Возврат;
    КонецЕсли;

    ОбъектОснование = Параметры.Источник[0];
    
    // Пример 1: Добавление команды без дополнительных условий
    // Создаем новую команду и добавляем ее в массив команд
    НоваяКоманда = КомандыСозданияНаОсновании.Добавить();
    НоваяКоманда.Представление = "Создать Расходную накладную";
    НоваяКоманда.Идентификатор = "Документ.РасходнаяНакладная"; // Имя объекта, который нужно создать
    НоваяКоманда.ФункциональныеОпции = "ИспользоватьПродажи"; // Команда будет видна, только если включена опция
    НоваяКоманда.Обработчик = "ОбщегоНазначения.СоздатьДокументНаОсновании"; // Типовой обработчик из БСП
    НоваяКоманда.Использование = "ОткрытиеФормы";

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

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

Как мы видим из примера, этот метод дает огромную гибкость:

Именно поэтому в 99% случаев, если закладка "Ввод на основании" пуста, ответ кроется в модуле менеджера и процедуре ДобавитьКомандыСозданияНаОсновании.

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

Третий возможный вариант — это настройка видимости команд непосредственно в самой форме. Команды могут быть определены (первым или вторым способом), но скрыты или, наоборот, принудительно показаны в командном интерфейсе конкретной формы.

Этот способ чаще используется для того, чтобы скрыть ненужные команды, а не для их добавления, но проверить его тоже стоит. Например, для одного и того же документа могут существовать разные формы (форма списка, форма документа, форма выбора), и в каждой из них набор команд "Создать на основании" может отличаться.

Как это проверить:

  1. Откройте в конфигураторе форму документа, в которой вы видите меню.
  2. В редакторе формы перейдите на закладку "Командный интерфейс".
  3. В левой части окна найдите группу "Создать на основании". Она может быть в разделе "Панель навигации", "Командная панель" или "Еще".
  4. Раскройте эту группу. Вы увидите список команд. Напротив каждой команды есть флажок "Видимость".

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

Итог: как найти источник команд?

Подведем итог и составим краткий алгоритм поиска.

Если вы видите команды в меню "Создать на основании", но не понимаете, откуда они берутся, действуйте в следующем порядке:

  1. Проверьте стандартный механизм: откройте объект метаданных в конфигураторе и посмотрите закладку "Ввод на основании".
  2. Ищите программный код: если первый пункт не дал результата, откройте модуль менеджера этого объекта и поищите процедуру ДобавитьКомандыСозданияНаОсновании. Это наиболее вероятная причина.
  3. Проверьте настройки формы: в последнюю очередь откройте конкретную форму документа и изучите настройки видимости команд на закладке "Командный интерфейс".

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

← На главную