Почему в 1С:ERP не работает свойство метаданных «Является основанием для» и как настроить ввод на основании?

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

При доработке конфигураций на базе Библиотеки стандартных подсистем (1С:ERP, 1С:Комплексная автоматизация, 1С:Управление торговлей) разработчики часто сталкиваются с ситуацией: в ветке метаданных документа-источника заполняется свойство «Является основанием для...», однако в режиме «1С:Предприятие» в меню создания на основании новый документ так и не появляется. Разберем, почему платформенный механизм не срабатывает в типовых конфигурациях и как правильно зарегистрировать команду ввода на основании программно.

Причина поведения: архитектура БСП и подключаемые команды

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

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

Пошаговая настройка ввода на основании через модули менеджера

Разберем по шагам, как правильно добавить новый документ в список ввода на основании.

  1. Регистрация команды в модуле менеджера документа-источника

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

    
    // Заполняет список команд создания на основании.
    // 
    // Параметры:
    //   КомандыСоздатьНаОсновании - ТаблицаЗначений
    //
    Процедура ДобавитьКомандыСозданияНаОсновании(КомандыСоздатьНаОсновании) Экспорт
        
        Документы.ЗаявкаНаРасходованиеДенежныхСредств.ДобавитьКомандуСоздатьНаОсновании(КомандыСоздатьНаОсновании);
        Документы.ПеремещениеТоваров.ДобавитьКомандуСоздатьНаОсновании(КомандыСоздатьНаОсновании);
        Документы.ВзаимозачетЗадолженности.ДобавитьКомандуСоздатьНаОсновании(КомандыСоздатьНаОсновании);
        
    КонецПроцедуры
    
  2. Описание параметров команды в модуле менеджера документа-приемника

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

    
    Процедура ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании) Экспорт
    
        Если ПравоДоступа("Добавление", Метаданные.Документы.ЗаявкаНаРасходованиеДенежныхСредств) Тогда
            Команда = КомандыСозданияНаОсновании.Добавить();
            Команда.Менеджер = Метаданные.Документы.ЗаявкаНаРасходованиеДенежныхСредств.ПолноеИмя();
        КонецЕсли;
    
    КонецПроцедуры
    
  3. Заполнение реквизитов в модуле объекта документа-приемника

    Чтобы создаваемый документ корректно заполнялся реквизитами и строками табличной части из документа-основания, необходимо реализовать логику переноса данных в событии ОбработкаЗаполнения модуля объекта:

    
    Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка)
        
        Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.ЗаявкаПоставщику") Тогда
            // Заполнение реквизитов шапки и табличных частей
            ДокументОснование = ДанныеЗаполнения;
            Организация = ДанныеЗаполнения.Организация;
            Партнер = ДанныеЗаполнения.Контрагент;
        КонецЕсли;
    
    КонецПроцедуры
    
  4. Регистрация нового объекта в общем модуле

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

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

Нередко после программного добавления команды и одновременного выставления связей в конфигураторе пользователи видят в интерфейсе сразу две кнопки ввода на основании с разным набором документов. Разберем причину этого дублирования.

Посмотрим на источники появления этих кнопок:

  1. Стандартная кнопка платформы 1С: появляется автоматически из-за включенного свойства «Является основанием для...» и стандартных команд формы.
  2. Подменю подсистемы БСП: генерируется динамически через ПодменюСоздатьНаОсновании на основе вызовов процедур модуля менеджера.

Для устранения дублирования кнопок выполним следующие действия:

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

Доработка через расширение конфигурации

Если информационная база находится на типовой поддержке, изменения рекомендуется вносить через механизм расширений:

  1. Добавим модуль менеджера документа-источника в расширение.
  2. Используем аннотацию &После для процедуры ДобавитьКомандыСозданияНаОсновании:

&После("ДобавитьКомандыСозданияНаОсновании")
Процедура Расш_ДобавитьКомандыСозданияНаОсновании(КомандыСоздатьНаОсновании)
    
    Документы.ЗаявкаНаРасходованиеДенежныхСредств.ДобавитьКомандуСоздатьНаОсновании(КомандыСоздатьНаОсновании);
    
КонецПроцедуры

Такой подход позволяет сохранить конфигурацию на полной поддержке поставщика и избежать конфликтов при последующих обновлениях 1С:ERP.

← На главную