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