Как добавить кнопку Создать на основании — Задание в свой документ

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

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

Настройка метаданных и определяемых типов

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

  1. Откроем дерево метаданных и найдем ОпределяемыйТип.ПредметЗадачи. В состав типов этого объекта необходимо включить ссылку на ваш новый документ. Этот тип используется реквизитом Предмет бизнес-процесса Задание.
  2. Перейдем в настройки самого бизнес-процесса Задание. На закладке Вводится на основании убедимся, что в списке отмечен наш документ.
  3. В свойствах вашего документа на закладке Вводится на основании в разделе «Является основанием для» также должен быть выбран бизнес-процесс Задание.

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

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

В современных версиях 1С:ERP (начиная с релизов 2.4/2.5) меню «Создать на основании» формируется динамически. Проанализируем модуль менеджера любого типового документа, у которого кнопка «Задание» отображается корректно. Мы увидим там экспортную процедуру, которую необходимо добавить и в наш документ.

Разберем пример кода, который нужно разместить в модуле менеджера вашего документа:


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

Если вы работаете в расширении, создайте модуль менеджера для вашего документа и добавьте эту процедуру с аннотацией &После или &Вместо, в зависимости от логики основной конфигурации.

Особенности работы при использовании расширений

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

Для решения этой проблемы выполним следующие шаги:

  1. Заимствование подсистем: Убедимся, что в расширение добавлены подсистемы, отвечающие за подключаемые команды, например, ПодключаемыеОтчетыИОбработки.
  2. Заимствование объектов: Проверьте, добавлен ли сам бизнес-процесс Задание в ваше расширение. Без наличия объекта в контексте расширения система может игнорировать связанные с ним команды.
  3. Инициализация в форме: В модуле формы документа в процедуре ПриСозданииНаСервере обязательно должен быть вызов инициализации подключаемых команд. Если вы полностью перекрыли процедуру, добавьте следующий код:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Инициализация механизма подключаемых команд БСП
    Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
        МодульПодключаемыеКоманды = ОбщегоНазначения.ОбщийМодуль("ПодключаемыеКоманды");
        МодульПодключаемыеКоманды.ПриСозданииНаСервере(ЭтаФорма);
    КонецЕсли;

КонецПроцедуры

Этот вызов заставляет систему просканировать метаданные и программные интерфейсы, чтобы динамически отрисовать кнопки в подменю «Создать на основании».

Программная регистрация в общих модулях БСП

В некоторых редакциях ERP требуется явная регистрация типов в переопределяемых модулях. Проанализируем ситуацию с модулем БизнесПроцессыИЗадачиПереопределяемый. Посмотрим, есть ли в нем процедура ПриОпределенииТиповПредметовЗадач. Если конфигурация требует строгого перечисления объектов, поддерживающих задачи, нам нужно расширить этот список.

Пример расширения модуля через &После:


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

Проверка функциональных опций и прав доступа

Если все вышеперечисленные действия выполнены, но кнопки все еще нет, проанализируем настройки прав и функциональные опции. В 1С:ERP функционал задач часто привязан к опции ИспользоватьБизнесПроцессыИЗадачи.

Убедимся в следующем:

Обновление кэша команд

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

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

Это принудительно обновит вспомогательные данные конфигурации и гарантирует, что новые команды будут зарегистрированы в системе корректно.

Резюмируем: Для появления кнопки «Задание» необходимо не только настроить метаданные «Ввод на основании» и определяемый тип ПредметЗадачи, но и обеспечить вызов ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтаФорма) в модуле формы, особенно если она создана в расширении.

← На главную