Как правильно добавить новый документ в меню Создать на основании в УТ 11.2

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

При разработке новых объектов в конфигурациях, построенных на базе Библиотеки стандартных подсистем (БСП), таких как 1С:Управление торговлей 11.2, программисты часто сталкиваются с тем, что стандартные платформенные механизмы ведут себя не так, как ожидается. Типичная ситуация: вы добавили новый документ, настроили в метаданных «Ввод на основании», но вместо привычного пункта в общем выпадающем меню (под кнопкой с зеленой стрелкой) на форме появляется отдельная кнопка, а в общем списке новый документ так и не отображается.

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

Почему платформенная настройка не работает напрямую

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

Шаг 1. Регистрация в определяемых типах

Прежде всего, нам необходимо сообщить системе, что наш новый документ вообще может участвовать в механизме создания на основании БСП. Выясним, какие объекты метаданных за это отвечают.

Рассмотрим ОпределяемыйТип.ОбъектСКомандамиСозданияНаОсновании. Нам нужно найти этот тип в дереве метаданных (раздел «Общие» -> «Определяемые типы») и добавить в его состав наш новый документ. Без этого шага система даже не обратится к модулю менеджера вашего документа за списком команд.

Также, если вы хотите, чтобы в структуре подчиненности (отчет «Связанные документы») корректно отображались связи, проверьте КритерийОтбора.СвязанныеДокументы. В его состав должен входить реквизит вашего документа (например, ДокументОснование), который хранит ссылку на родительский объект.

Шаг 2. Программная регистрация команды в модуле менеджера

Теперь перейдем к самому важному этапу — написанию кода. В БСП регистрация команд происходит через модуль менеджера документа. Нам нужно реализовать процедуру в двух местах: в модуле менеджера документа-основания (например, Заказ поставщику) и в модуле менеджера нового документа.

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


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

Однако в некоторых версиях УТ 11.2 (в зависимости от релиза БСП) требуется также добавить вызов этой команды в модуле менеджера документа-основания. Найдите в Документ.ЗаказПоставщику.МодульМенеджера аналогичную процедуру и убедитесь, что там вызывается общая подсистема формирования команд.

Шаг 3. Реализация логики заполнения

Чтобы данные из «Заказа поставщику» перенеслись в ваш документ, необходимо описать этот процесс в модуле объекта нового документа. Платформенное «Заполнение по заполнению» в УТ используется редко, предпочтение отдается программному методу ОбработкаЗаполнения.

Разберем пример реализации:


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

Важный момент: использование ЗаполнитьЗначенияСвойств значительно ускоряет написание кода, если имена реквизитов в ТЧ обоих документов совпадают.

Шаг 4. Устранение «отдельной кнопки» на форме

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

  1. Откройте форму документа-основания (например, форму списка или форму документа «Заказ поставщику»).
  2. Перейдите на закладку Командный интерфейс.
  3. В разделе Панель навигации / Перейти или Панель действий / Создать на основании найдите автоматически созданную команду вашего документа.
  4. Снимите галочку Видимость для этой команды.

Теперь платформа не будет выводить стандартную кнопку, а механизм БСП, который мы настроили в шаге 2, добавит ваш документ в общее выпадающее меню «Создать на основании».

Шаг 5. Обновление идентификаторов объектов метаданных

В системах на БСП информация о командах часто кэшируется в справочнике ИдентификаторыОбъектовМетаданных. Если после внесения всех правок кнопка так и не появилась, необходимо обновить этот кэш.

Проанализируем ситуацию: при разработке на копии или добавлении новых объектов конфигурация «не видит» их в системных таблицах БСП. Для исправления запустите 1С:Предприятие с параметром командной строки:

/С ЗапуститьОбновлениеИнформационнойБазы

Или выполните в консоли кода (если она есть) следующую команду:

Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанные();

Дополнительные настройки: Функциональные опции

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

Подведем итог: для корректного добавления документа в «Ввод на основании» в УТ 11.2 мы должны отойти от чисто платформенных методов и использовать программный интерфейс БСП. Это требует регистрации в определяемых типах, написания кода в модуле менеджера и настройки командного интерфейса формы. Такой подход гарантирует стабильную работу интерфейса и отсутствие визуальных багов в виде дублирующих кнопок.

← На главную