При доработке конфигураций на базе Библиотеки стандартных подсистем (1С:ERP, 1С:Комплексная автоматизация, 1С:Управление торговлей) разработчики часто сталкиваются с ситуацией: в ветке метаданных документа-источника заполняется свойство «Является основанием для...», однако в режиме «1С:Предприятие» в меню создания на основании новый документ так и не появляется. Разберем, почему платформенный механизм не срабатывает в типовых конфигурациях и как правильно зарегистрировать команду ввода на основании программно.
Проанализируем архитектуру современных управляемых приложений на базе БСП. В типовых конфигурациях отображение кнопок в подменю «Создать на основании» полностью переведено на программный механизм подсистемы «Подключаемые команды». Механизм метаданных («Вводится на основании» и «Является основанием для...») является стандартным платформенным свойством, но управляемые формы типовых документов используют динамическое формирование меню через подсистему БСП, игнорируя платформенное автозаполнение.
По этой причине для появления документа в выпадающем списке командной панели недостаточно указать связь в дереве метаданных конфигуратора — команду необходимо объявить в программных модулях.
Разберем по шагам, как правильно добавить новый документ в список ввода на основании.
Регистрация команды в модуле менеджера документа-источника
Откроем модуль менеджера документа, на основании которого мы хотим создавать новый объект (например, Документ.ЗаявкаПоставщику). Найдем экспортную процедуру ДобавитьКомандыСозданияНаОсновании и вызовем в ней метод формирования команды из менеджера документа-приемника:
// Заполняет список команд создания на основании.
//
// Параметры:
// КомандыСоздатьНаОсновании - ТаблицаЗначений
//
Процедура ДобавитьКомандыСозданияНаОсновании(КомандыСоздатьНаОсновании) Экспорт
Документы.ЗаявкаНаРасходованиеДенежныхСредств.ДобавитьКомандуСоздатьНаОсновании(КомандыСоздатьНаОсновании);
Документы.ПеремещениеТоваров.ДобавитьКомандуСоздатьНаОсновании(КомандыСоздатьНаОсновании);
Документы.ВзаимозачетЗадолженности.ДобавитьКомандуСоздатьНаОсновании(КомандыСоздатьНаОсновании);
КонецПроцедуры
Описание параметров команды в модуле менеджера документа-приемника
Перейдем в модуль менеджера создаваемого документа (приемника). В процедуре ДобавитьКомандуСоздатьНаОсновании описывается структура команды: проверка прав пользователя, заголовок и связь с метаданными:
Процедура ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании) Экспорт
Если ПравоДоступа("Добавление", Метаданные.Документы.ЗаявкаНаРасходованиеДенежныхСредств) Тогда
Команда = КомандыСозданияНаОсновании.Добавить();
Команда.Менеджер = Метаданные.Документы.ЗаявкаНаРасходованиеДенежныхСредств.ПолноеИмя();
КонецЕсли;
КонецПроцедуры
Заполнение реквизитов в модуле объекта документа-приемника
Чтобы создаваемый документ корректно заполнялся реквизитами и строками табличной части из документа-основания, необходимо реализовать логику переноса данных в событии ОбработкаЗаполнения модуля объекта:
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка)
Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.ЗаявкаПоставщику") Тогда
// Заполнение реквизитов шапки и табличных частей
ДокументОснование = ДанныеЗаполнения;
Организация = ДанныеЗаполнения.Организация;
Партнер = ДанныеЗаполнения.Контрагент;
КонецЕсли;
КонецПроцедуры
Регистрация нового объекта в общем модуле
Если в конфигурацию добавляется полностью новый документ-источник, выясним, зарегистрирован ли он в подсистеме БСП. Для этого проверяем общий модуль СозданиеНаОснованииПереопределяемый и процедуру ПриОпределенииОбъектовСКомандамиСозданияНаОсновании, куда добавляется ссылка на метаданные нового документа.
Нередко после программного добавления команды и одновременного выставления связей в конфигураторе пользователи видят в интерфейсе сразу две кнопки ввода на основании с разным набором документов. Разберем причину этого дублирования.
Посмотрим на источники появления этих кнопок:
ПодменюСоздатьНаОсновании на основе вызовов процедур модуля менеджера.Для устранения дублирования кнопок выполним следующие действия:
Если информационная база находится на типовой поддержке, изменения рекомендуется вносить через механизм расширений:
&После для процедуры ДобавитьКомандыСозданияНаОсновании:
&После("ДобавитьКомандыСозданияНаОсновании")
Процедура Расш_ДобавитьКомандыСозданияНаОсновании(КомандыСоздатьНаОсновании)
Документы.ЗаявкаНаРасходованиеДенежныхСредств.ДобавитьКомандуСоздатьНаОсновании(КомандыСоздатьНаОсновании);
КонецПроцедуры
Такой подход позволяет сохранить конфигурацию на полной поддержке поставщика и избежать конфликтов при последующих обновлениях 1С:ERP.