Как реализовать ввод на основании через расширение, чтобы кнопка появилась в списке документов

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

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

Понимаем механизм подключаемых команд БСП

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

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

Основная логика добавления команд ввода на основании сосредоточена в модуле менеджера документа-основания. Выясним причину отсутствия кнопки в списке: скорее всего, в расширении не переопределена процедура, отвечающая за сбор этих команд. Нам необходимо расширить процедуру ДобавитьКомандыСозданияНаОсновании.

Для этого в расширении найдем модуль менеджера нужного документа и добавим в него процедуру с аннотацией &После. Рассмотрим пример кода:


&После("ДобавитьКомандыСозданияНаОсновании")
Процедура Расш1_ДобавитьКомандыСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры)
    
    // Описываем новую команду для нашего документа из расширения
    Команда = КомандыСозданияНаОсновании.Добавить();
    Команда.Менеджер = "Документ.Расш1_НовыйДокумент";
    Команда.Представление = НСтр("ru = 'Новый документ (на основании расширения)'");
    Команда.ПроверкаПроведенности = Истина;
    
    // Важнейший параметр для отображения в списках:
    Команда.ВидимостьВФормах = "ФормаСписка,ФормаОбъекта,ФормаВыбора";
    
КонецПроцедуры

Разберем по шагам, что мы сделали. Мы обратились к коллекции КомандыСозданияНаОсновании и добавили в нее описание нашего нового документа. Обратите особое внимание на свойство ВидимостьВФормах. Если его не заполнить, система по умолчанию может вывести кнопку только в форме объекта, игнорируя списки и журналы.

Настройка параметра «ВидимостьВФормах»

Параметр ВидимостьВФормах управляет тем, в каких контекстах будет доступна команда. Рассмотрим подробнее возможные варианты заполнения этого поля:

  1. Пустая строка — команда выводится во всех формах, где подключена подсистема (стандартное поведение, но в расширениях лучше указывать явно).
  2. Конкретные имена — через запятую указываются типы форм, например: "ФормаСписка,ФормаОбъекта".
  3. Исключения — если форма списка в вашем журнале или документе называется нестандартно (например, "ФормаСпискаСпециальная"), ее имя обязательно должно быть указано в этой строке.

Особенности новых релизов БСП (версии 3.1.4 и выше)

В последних версиях 1С:УТ 11.4/11.5 и других конфигурациях разработчики 1С начали перемещать логику регистрации команд из модулей менеджеров конкретных документов в специализированные модули или использовать общие процедуры. Проанализируем ситуацию: если в модуле менеджера вашего документа нет процедуры ДобавитьКомандыСозданияНаОсновании, значит, она была вынесена в общий модуль. Для быстрого изучения программных интерфейсов подсистем и поиска примеров вызова процедур можно использовать справочник по методам БСП с примерами использования.

В таком случае нам нужно посмотреть в сторону общего модуля СозданиеНаОснованииПереопределяемый. Там может находиться процедура ПриОпределенииОбъектовСКомандамиСозданияНаОсновании. Рассмотрим, как зарегистрировать наш объект в этом случае:


&После("ПриОпределенииОбъектовСКомандамиСозданияНаОсновании")
Процедура Расш1_ПриОпределенииОбъектовСКомандамиСозданияНаОсновании(СписокОбъектов)
    
    // Добавляем наш документ в список тех, кто участвует в механизме создания на основании
    СписокОбъектов.Добавить(Метаданные.Документы.Расш1_НовыйДокумент);
    
КонецПроцедуры

Проверка программного вызова в форме списка

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


&НаСервере
Процедура Расш1_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
    
    // Инициализация подключаемых команд
    ПараметрыПодключаемыхКоманд = ПодключаемыеКоманды.ПараметрыКоманд();
    ПараметрыПодключаемыхКоманд.УстановитьФлагОтображенияКомандСозданияНаОсновании = Истина;
    
    ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект, ПараметрыПодключаемыхКоманд);
    
КонецПроцедуры

Важно помнить, что в командной панели формы списка должен существовать элемент (обычно это группа с видом Группа команд), куда БСП будет "подмешивать" созданные кнопки. В типовых формах это часто группа с именем ПодменюСоздатьНаОсновании.

Кэширование и обновление информационной базы

Иногда даже после внесения всех правок кнопка не появляется. Посмотрим на ситуацию с точки зрения системы: БСП кэширует параметры подключаемых команд в специальных вспомогательных таблицах для ускорения работы интерфейса. При добавлении команды через расширение кэш может не обновиться мгновенно.

Рассмотрим способы принудительного обновления кэша:

  1. Запустить сеанс 1С:Предприятие с параметром командной строки /С ЗапуститьОбновлениеИнформационнойБазы.
  2. В некоторых конфигурациях предусмотрены регламентные задания по обновлению параметров подключаемых команд, их можно запустить вручную через консоль заданий.
  3. Временно изменить версию расширения (например, с 1.0.1 на 1.0.2) — это часто инициирует частичное обновление метаданных расширения в системе.

Итоги

Для того чтобы ввод на основании корректно отображался в списках через расширение, недостаточно просто связать документы в дереве метаданных. Мы должны обеспечить интеграцию с БСП, прописав команду в ДобавитьКомандыСозданияНаОсновании в модуле менеджера, явно указав ВидимостьВФормах и убедившись, что форма списка инициализирует подключаемые команды при создании. Такой системный подход гарантирует, что ваши доработки будут выглядеть и работать как штатный функционал системы.

← На главную