В процессе разработки или доработки конфигураций 1С, особенно типовых, часто возникает ситуация, когда поведение системы кажется нелогичным с точки зрения стандартных настроек в конфигураторе. Один из таких классических случаев — заполненное меню "Создать на основании" в форме документа при абсолютно пустой закладке "Ввод на основании" у соответствующего объекта метаданных. Давайте разберемся, откуда система "тянет" эти команды и где их искать.
Проанализируем ситуацию: мы открываем документ в режиме конфигуратора, переходим на закладку "Ввод на основании" и видим, что список пуст. Однако в режиме "Предприятие" у этого же документа в выпадающем меню "Создать на основании" присутствует целый ряд команд для создания других объектов. Это означает, что меню формируется не стандартным декларативным способом, а с помощью других, более гибких механизмов платформы и типовых библиотек.
Рассмотрим все возможные способы формирования этого меню, от самого очевидного до наиболее вероятного в современных конфигурациях.
Это базовый и самый простой способ, который первым делом проверяет каждый разработчик. Он настраивается непосредственно в свойствах объекта конфигурации (например, документа или справочника).
Документ.ЗаказПокупателя).Платформа автоматически создаст соответствующие команды и обработчики. В модуле создаваемого документа появится процедура ОбработкаЗаполнения(ДанныеЗаполнения), куда система передаст исходный объект-основание для первоначального заполнения реквизитов. Если эта закладка пуста, как в нашем случае, значит, источник команд нужно искать в другом месте.
Это самый распространенный и мощный механизм в современных типовых конфигурациях (УНФ, ERP, УТ и др.). Он основан на подсистеме "Подключаемые команды" из Библиотеки стандартных подсистем (БСП). Этот подход позволяет добавлять команды динамически, с учетом различных условий, и не требует изменения структуры самого объекта метаданных, что критически важно для сохранения возможности автоматического обновления конфигурации.
Ключевой элемент этого механизма — экспортная процедура ДобавитьКомандыСозданияНаОсновании в модуле менеджера объекта-основания.
Разберем по шагам, как это работает и где это искать:
Документ.ЗаказПокупателя).ДобавитьКомандыСозданияНаОсновании.Если такая процедура найдена, значит, именно она отвечает за программное добавление команд. Рассмотрим ее структуру на условном примере:
Процедура ДобавитьКомандыСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры) Экспорт
// Параметры.Источник - это массив объектов, на основании которых нужно создать команды.
// Если массив пустой или содержит более одного элемента, команды не добавляем.
Если Параметры.Источник.Количество() <> 1 Тогда
Возврат;
КонецЕсли;
ОбъектОснование = Параметры.Источник[0];
// Пример 1: Добавление команды без дополнительных условий
// Создаем новую команду и добавляем ее в массив команд
НоваяКоманда = КомандыСозданияНаОсновании.Добавить();
НоваяКоманда.Представление = "Создать Расходную накладную";
НоваяКоманда.Идентификатор = "Документ.РасходнаяНакладная"; // Имя объекта, который нужно создать
НоваяКоманда.ФункциональныеОпции = "ИспользоватьПродажи"; // Команда будет видна, только если включена опция
НоваяКоманда.Обработчик = "ОбщегоНазначения.СоздатьДокументНаОсновании"; // Типовой обработчик из БСП
НоваяКоманда.Использование = "ОткрытиеФормы";
// Пример 2: Добавление команды при выполнении условия
// Например, создаем счет-фактуру только если заказ оплачен
Если ОбъектОснование.Статус = Перечисления.СтатусыЗаказов.Оплачен Тогда
НоваяКоманда = КомандыСозданияНаОсновании.Добавить();
НоваяКоманда.Представление = "Создать Счет-фактуру выданный";
НоваяКоманда.Идентификатор = "Документ.СчетФактураВыданный";
НоваяКоманда.Обработчик = "ОбщегоНазначения.СоздатьДокументНаОсновании";
НоваяКоманда.Использование = "ОткрытиеФормы";
КонецЕсли;
КонецПроцедуры
Как мы видим из примера, этот метод дает огромную гибкость:
Именно поэтому в 99% случаев, если закладка "Ввод на основании" пуста, ответ кроется в модуле менеджера и процедуре ДобавитьКомандыСозданияНаОсновании.
Третий возможный вариант — это настройка видимости команд непосредственно в самой форме. Команды могут быть определены (первым или вторым способом), но скрыты или, наоборот, принудительно показаны в командном интерфейсе конкретной формы.
Этот способ чаще используется для того, чтобы скрыть ненужные команды, а не для их добавления, но проверить его тоже стоит. Например, для одного и того же документа могут существовать разные формы (форма списка, форма документа, форма выбора), и в каждой из них набор команд "Создать на основании" может отличаться.
Как это проверить:
Здесь вы можете управлять видимостью уже существующих команд. Если флажок снят, команда не будет отображаться в меню для данной формы, даже если она определена в метаданных или добавлена программно. Если установлен, то будет. Это удобный инструмент для кастомизации интерфейса под конкретные рабочие места или сценарии использования без изменения глобальной логики.
Подведем итог и составим краткий алгоритм поиска.
Если вы видите команды в меню "Создать на основании", но не понимаете, откуда они берутся, действуйте в следующем порядке:
ДобавитьКомандыСозданияНаОсновании. Это наиболее вероятная причина.Понимание этих трех механизмов позволит вам уверенно работать с одной из самых часто используемых функций платформы 1С и гибко настраивать ее под любые задачи.