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