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