При разработке и расширении типовых или отраслевых решений на платформе 1С:Предприятие 8.3 разработчики часто сталкиваются с неприятным визуальным поведением интерфейса. Вы добавляете новый документ, настраиваете для него стандартный ввод на основании существующего документа, и вдруг на форме документа-источника появляется некрасивое, дублирующее меню «Создать на основании». При этом все штатные документы конфигурации аккуратно сгруппированы в одном красивом программном подменю, а ваш новый документ выводится отдельно, ломая весь дизайн интерфейса.
В этой статье мы подробно разберем, почему возникает этот конфликт между платформой и Библиотекой стандартных подсистем (БСП), выясним причины такого поведения системы и рассмотрим два надежных способа решения проблемы: быстрые платформенные «лайфхаки» и правильную интеграцию по стандартам разработки БСП.
Для начала проанализируем ситуацию изнутри. В современных конфигурациях 1С вывод команд создания на основании управляется не напрямую платформой, а программным путем через подсистему БСП «Подключаемые команды».
Когда форма документа-источника (назовем его Документ А) открывается, БСП динамически генерирует кнопки для создания связанных документов (группы документов Б) и помещает их в специальную программную группу команд (обычно она называется ПодменюСоздатьНаОсновании). При этом стандартные команды платформы для этих документов скрываются программно или отключены в конфигураторе.
Однако, как только вы добавляете свой собственный документ в схему ввода на основании документа А, происходят следующие процессы:
ИспользоватьСтандартныеКоманды.В результате пользователь видит на форме два меню с одинаковым или похожим смыслом: одно — сформированное кодом БСП для штатных документов, другое — сгенерированное платформой для вашего нового документа. Наша задача — убрать платформенное меню и красиво встроить новую команду в общий ряд.
Рассмотрим подробнее способы решения этой задачи.
Если вам нужно решить задачу максимально быстро в рамках конкретной формы, не погружаясь в логику работы модулей БСП, можно воспользоваться особенностями поведения самой платформы 1С.
Вариант А. Ручное размещение команды на форме (эффект скрытия автоменю)
В платформе 1С заложен важный алгоритм: если разработчик самостоятельно разместил стандартную параметризованную команду на форме, платформа считает, что вы полностью контролируете ее отображение. В этом случае она **не будет автоматически создавать** стандартное подменю «Создать на основании».
Выполним следующие шаги:
Видимость в значение Ложь (снимите галочку видимости).Поскольку команда теперь принудительно размещена на форме (пусть даже и невидима), платформа отключит автогенерацию стандартного подменю. На форме останется только красивое подменю БСП.
Вариант Б. Изменение источника команд для командной панели
Еще один элегантный способ управления автогенерацией команд на форме — изменение настроек источника команд:
ИсточникКоманд.Авто (из-за чего платформа принудительно затягивает все глобальные и параметризованные команды ввода на основании из метаданных).Форма.После этого командная панель перестанет автоматически выводить команды из метаданных конфигурации, и вы сможете полностью вручную управлять составом отображаемых кнопок.
Если вы хотите, чтобы ваше отраслевое или кастомное решение работало стабильно, поддерживало обновление конфигурации и ваш документ гармонично встроился в общий список документов {Б}, необходимо правильно зарегистрировать команду создания в БСП.
Разберем по шагам, как это сделать программно.
Шаг 1. Отключение стандартного вывода команды платформой
Для начала нам нужно полностью исключить автоматическое вмешательство платформы. Для этого зайдите в свойства вашей команды создания документа на основании и снимите флаг Использовать стандартные команды. Также убедитесь, что в командном интерфейсе формы источника снята галочка видимости у стандартной команды создания.
Шаг 2. Описание команды в модуле менеджера документа-приемника
В БСП за интеграцию отвечает модуль менеджера создаваемого документа. Откройте модуль менеджера вашего нового документа и добавьте в него экспортную процедуру ДобавитьКомандыСозданияНаОсновании.
Посмотрим на пример реализации этой процедуры:
Процедура ДобавитьКомандыСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры) Экспорт
// 1. Проверяем права текущего пользователя на создание данного документа
Если НЕ ПравоДоступа("Добавление", Метаданные.Документы.ИмяВашегоНовогоДокумента) Тогда
Возврат;
КонецЕсли;
// 2. Описываем новую команду для интеграции в БСП
Команда = КомандыСозданияНаОсновании.Добавить();
Команда.Представление = "Имя вашего документа в меню";
Команда.Идентификатор = "СоздатьВашНовыйДокумент";
// Указываем тип документа-источника (Документ А)
Команда.СписокИсточников.Добавить(Метаданные.Документы.Документ_А);
// Задаем обработчик команды. Это может быть стандартное заполнение БСП
Команда.Обработчик = "СозданиеНаОснованииКлиент.ВыполнитьКомандуСозданияНаОсновании";
КонецПроцедуры
Шаг 3. Регистрация документа в переопределяемом модуле системы
Чтобы подсистема подключаемых команд БСП вообще обратила внимание на ваш новый документ при формировании меню, его нужно зарегистрировать.
Найдите в конфигураторе общий модуль СозданиеНаОснованииПереопределяемый и откройте его процедуру ПриОпределенииОбъектовСКомандамиСозданияНаОсновании. Добавьте туда ваш документ:
Процедура ПриОпределенииОбъектовСКомандамиСозданияНаОсновании(СписокОбъектов) Экспорт
// Добавляем наш новый документ в список объектов, поддерживающих интеграцию БСП
СписокОбъектов.Добавить(Метаданные.Документы.ИмяВашегоНовогоДокумента);
КонецПроцедуры
Шаг 4. Обновление информационной базы
Так как БСП кэширует список подключаемых команд в специальных регистрах сведений для ускорения работы интерфейса, после внесения изменений в код необходимо обновить этот кэш.
Для этого запустите конфигурацию в режиме «1С:Предприятие» под пользователем с полными правами с параметром запуска ЗапуститьОбновлениеИнформационнойБазы или просто выполните обновление версии конфигурации (если вы меняли номер версии в метаданных). Также в некоторых конфигурациях доступна специальная обработка «Инструменты разработчика», позволяющая принудительно обновить кэш подключаемых команд.
Проанализируем преимущества и недостатки обоих методов, чтобы вы могли выбрать наиболее подходящий для вашего проекта:
Используя описанные инструкции, вы сможете легко добиться чистоты интерфейса управляемых форм и сделать работу пользователей в системе 1С максимально удобной и интуитивно понятной.