Как настроить ввод на основании в Управление торговлей 11, если документ не появляется в списке «Создать на основании»?

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

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

Причина: программное формирование меню в БСП

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

Шаг 1. Добавление команды в модуль менеджера документа-источника

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

Посмотрим на пример заполнения процедуры:


Процедура ДобавитьКомандыСозданияНаОсновании(КомандыСоздатьНаОсновании) Экспорт
    
    // Подключение типовых команд ввода на основании
    Документы.ЗаявкаНаРасходованиеДенежныхСредств.ДобавитьКомандуСоздатьНаОсновании(КомандыСоздатьНаОсновании);
    Документы.РасходныйКассовыйОрдер.ДобавитьКомандуСоздатьНаОсновании(КомандыСоздатьНаОсновании);
    Документы.СписаниеБезналичныхДенежныхСредств.ДобавитьКомандуСоздатьНаОсновании(КомандыСоздатьНаОсновании);
    
    // Добавление нашей новой команды ввода документа (например, нового Поступления товаров)
    Документы.ПриобретениеТоваровУслуг.ДобавитьКомандуСоздатьНаОсновании(КомандыСоздатьНаОсновании);
    
КонецПроцедуры

Шаг 2. Описание параметров команды в модуле менеджера создаваемого документа

Теперь перейдем в модуль менеджера создаваемого документа (в нашем примере — документ-приемник). В нем должна быть объявлена процедура ДобавитьКомандуСоздатьНаОсновании, определяющая свойства отображения кнопки.

Разберем пример описания команды:


Процедура ДобавитьКомандуСоздатьНаОсновании(КомандыСоздатьНаОсновании) Экспорт
    
    Команда = КомандыСоздатьНаОсновании.Добавить();
    Команда.Идентификатор = "ПриобретениеТоваровУслуг";
    Команда.Представление = НСтр("ru = 'Приобретение товаров и услуг'");
    Команда.Менеджер = "Документ.ПриобретениеТоваровУслуг";
    Команда.Порядок = 10;
    
КонецПроцедуры

Шаг 3. Обработка заполнения реквизитов нового документа

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

Посмотрим на пример кода заполнения документа-приемника на основании источника:


Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка)
    
    Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.ПриобретениеТоваровУслуг") Тогда
        
        // Заполняем реквизиты шапки
        Организация = ДанныеЗаполнения.Организация;
        Партнер = ДанныеЗаполнения.Партнер;
        Контрагент = ДанныеЗаполнения.Контрагент;
        Договор = ДанныеЗаполнения.Договор;
        Склад = ДанныеЗаполнения.Склад;
        Валюта = ДанныеЗаполнения.Валюта;
        
        // Переносим строки табличной части
        Товары.Очистить();
        Для Каждого Стр Из ДанныеЗаполнения.Товары Цикл
            НоваяСтрока = Товары.Добавить();
            ЗаполнитьЗначенияСвойств(НоваяСтрока, Стр);
        КонецЦикла;
        
    КонецЕсли;
    
КонецПроцедуры

Шаг 4. Реализация через расширение конфигурации (без снятия с поддержки)

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

Разберем порядок действий:

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

Посмотрим на пример кода в расширении:


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

Дополнительные причины, почему кнопка может не отображаться

Если код добавлен, но пункт ввода на основании по-прежнему не виден в меню, проверим следующие факторы:

  1. Кэширование данных БСП: список подключаемых команд кэшируется в модулях с повторным использованием значений. Для обновления состава команд необходимо обязательно перезапустить сеанс «1С:Предприятия».
  2. Права доступа: БСП проверяет наличие прав Добавление и ИнтерактивноеДобавление для создаваемого документа у текущей роли пользователя. Если прав нет, команда скрывается автоматически.
  3. Функциональные опции: если документ или вид операции подчинены отключенной функциональной опции программы, команда будет скрыта.
  4. Кастомизированные формы: в нетиповых формах должны присутствовать обработчики вызова БСП в событии ПриСозданииНаСервере (вызов ПодключаемыеКоманды.ПриСозданииНаСервере), а также клиентские обработчики выполнения команд.
← На главную