При работе с классическими конфигурациями на обычных формах (Толстый клиент) разработчики часто сталкиваются с необходимостью расширения функционала без изменения основной конфигурации. Механизм расширений кажется идеальным инструментом, однако при попытке изменить визуальную составляющую интерфейса (меню, панели инструментов) возникают трудности: добавленные кнопки просто не отображаются в режиме предприятия. В данной статье мы разберем, почему это происходит, проанализируем ограничения платформы и найдем надежные обходные пути.
Первым делом проанализируем ситуацию с технической точки зрения. Объект метаданных Интерфейс в системе 1С:Предприятие 8 относится к классическим механизмам формирования меню и панелей инструментов. В отличие от Командного интерфейса в управляемом приложении, структура «обычного» интерфейса жестко задается в конфигураторе и формируется один раз при инициализации сеанса пользователя.
Несмотря на то что конфигуратор позволяет заимствовать объект Интерфейс в расширение и даже дает возможность добавить в него новые панели или кнопки, платформа зачастую игнорирует эти изменения. Это связано с тем, что механизм объединения (слияния) старых интерфейсов из расширений реализован не полностью. Изменения свойств (например, Видимость) могут сработать, но структурные изменения (новые элементы меню) — в большинстве случаев нет.
Прежде чем переходить к сложным программным методам, необходимо исключить самую простую причину отсутствия кнопок — отсутствие прав. Рассмотрим этот процесс подробнее:
Роль внутри этого же расширения.Чтение, Просмотр и Ввод по строке для ваших новых документов.Посмотрим на ситуацию, описанную в сообщении (4) и (7) обсуждения: «Попробуйте создать новый интерфейс в расширении». Важно понимать, что платформа 1С накладывает жесткое ограничение: создавать новые объекты типа Интерфейс в расширении нельзя. Мы можем только заимствовать существующие. Если ваша задача — добавить совершенно новую панель управления, сделать это через дерево метаданных расширения классическим способом не получится.
Поскольку прямое редактирование панелей инструментов часто не дает результата, разберем наиболее надежный способ предоставить пользователю доступ к новым документам расширения. Мы создадим специальную Общую форму, которая будет служить «панелью функций» или «рабочим столом».
Алгоритм реализации следующий:
ОбщаяФорма (она может быть как обычной, так и управляемой, если режим совместимости позволяет).
Процедура КнопкаОткрытьДокументыНажатие(Элемент)
Документы.НовыйДокументИзРасширения.ПолучитьФормуСписка().Открыть();
КонецПроцедуры
Если создание отдельной формы не подходит и кнопки нужны именно в основном меню, попробуем пойти программным путем. В обычном приложении объектная модель интерфейса доступна через глобальный контекст, но она крайне ограничена для модификации «на лету».
Тем не менее, мы можем использовать аннотацию &После для перехвата стандартных процедур инициализации. В модуле приложения расширения найдем или создадим процедуру:
&После("ПриНачалеРаботыСистемы")
Процедура Расш_ПриНачалеРаботыСистемы()
// Здесь можно попытаться программно управлять видимостью
// уже существующих элементов интерфейса,
// но добавление новых через код в обычном приложении
// практически не поддерживается объектной моделью V8.Interface
КонецПроцедуры
Важное замечание: Если ваша конфигурация работает в режиме «Обычного приложения», но при этом активно использует расширения, проверьте Режим совместимости. Если он установлен ниже 8.3.10, стабильная работа расширений не гарантируется. Для адекватной работы с метаданными в расширении рекомендуется использовать актуальные версии платформы.
Проанализировав проблему, мы приходим к следующим выводам:
Интерфейс в расширении для обычных форм — нестабильная операция, которая часто игнорируется платформой.Общие формы. Это гарантирует, что пользователь увидит нужные кнопки вне зависимости от капризов механизма слияния интерфейсов.Таким образом, если ваша цель — быстро и надежно предоставить доступ к функционалу расширения в старой базе, создание вспомогательной формы с кнопками («Панель навигации») будет самым эффективным решением, экономящим время на борьбу с ограничениями платформы.