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