При работе с платформой 1С:Предприятие 8.3, особенно в режиме совместимости интерфейса 8.2 и с обычными формами, часто возникает задача по модификации стандартного функционала или добавлению новых возможностей. Механизм расширений предоставляет гибкий инструмент для этого, позволяя вносить изменения без снятия конфигурации с поддержки. Сегодня мы подробно рассмотрим, как добавить новый подпункт меню к интерфейсу обычных форм с помощью расширения, ссылающийся на новую обработку.
Начнем с анализа ситуации. У нас есть конфигурация на платформе 1С:Предприятие 8.3 (например, 8.3.24.1342) с обычными формами и установленным режимом совместимости интерфейса 8.2. Мы уже перенесли часть объектов основной конфигурации в расширение и теперь хотим добавить новый пункт меню, который будет вызывать нашу новую обработку. Возникает вопрос: как это сделать без переноса всей конфигурации в расширение?
Прежде всего, давайте развеем некоторые заблуждения. Некоторые разработчики считают, что расширения не умеют работать с обычными формами и их интерфейсами. Однако, практика показывает, что взаимодействие с командным интерфейсом обычных форм и добавление в них новых элементов возможно, хотя и со своими особенностями. Важно понимать, что в режиме совместимости расширения, например, 8.3.14, можно использовать данный механизм. Отметим, что работа с обычными формами через расширения может быть несколько специфичной, или, как некоторые выражаются, "через ЖПО" (жаргонное выражение, означающее неудобный или сложный способ), но это не делает ее невозможной.
В отличие от управляемых форм, где заимствование и визуальное редактирование значительно упрощены, при работе с обычными формами в расширениях мы сталкиваемся с тем, что нет прямого заимствования формы для визуального редактирования в привычном виде. Это означает, что если мы хотим изменить что-то в форме, нам, возможно, придется "рисовать" ее практически с нуля в расширении, либо использовать программные методы.
Итак, давайте рассмотрим подробнее подходы к добавлению подпункта меню к интерфейсу в расширении для обычных форм.
Этот метод основан на том, что командный интерфейс формы в расширении способен дополнять командные интерфейсы основной конфигурации. Команды, которые мы добавим в расширении, будут отображаться после уже существующих команд расширяемой конфигурации. Важно отметить, что удалить команды основной конфигурации таким способом не получится.
Разберем по шагам, как это можно реализовать:
ПриОткрытии(), то в расширении для своей новой команды мы можем назвать процедуру Расш_МояКоманда_ПриНажатии().Этот подход требует более детального понимания структуры форм и командного интерфейса, а также готовности к ручному описанию элементов интерфейса в расширении.
В случаях, когда конфигурация разработана с использованием Библиотеки стандартных подсистем (БСП) и форма, которую мы хотим модифицировать, подключена к подсистеме "Подключаемые команды", у нас появляется более гибкий программный способ добавления команд и кнопок. Преимущество этого метода в том, что он позволяет избежать полного "рисования" форм с нуля.
Рассмотрим шаги для этого подхода:
ПодключаемыеКоманды.ПриСозданииНаСервере() и ПодключаемыеКомандыКлиент.ВыполнитьКоманду().&После и &Вместо:
ПодключаемыеКоманды.ПриСозданииНаСервере() мы используем аннотацию &После. Это позволит нам добавить свои команды после того, как уже будут сформированы стандартные команды. В нашем коде, помещенном после основной реализации, мы сможем программно добавить необходимые команды и кнопки.ПодключаемыеКомандыКлиент.ВыполнитьКоманду() мы используем аннотацию &Вместо. Эта аннотация позволяет нам полностью перехватить выполнение команды и добавить свою логику обработки, а затем при необходимости вызвать стандартную реализацию или выполнить свою.&После, мы сможем программно создавать и добавлять новые команды и связывать их с элементами интерфейса. Это позволяет динамически формировать меню или добавлять кнопки без необходимости визуального редактирования формы. Этот подход значительно упрощает процесс, поскольку мы работаем с логикой добавления, а не с визуальным представлением элементов на форме.Этот метод является более предпочтительным, если ваша конфигурация активно использует БСП, так как он обеспечивает более стандартизированный и менее трудоемкий путь для расширения функционала интерфейса обычных форм.
При работе с расширениями и обычными формами в режиме совместимости 8.2, мы сталкиваемся с рядом нюансов:
Таким образом, добавление подпункта меню к интерфейсу обычной формы через расширение является вполне реализуемой задачей. Выбор конкретного подхода – через командный интерфейс формы расширения или программное добавление команд с помощью БСП – будет зависеть от специфики вашей конфигурации и наличия в ней стандартных подсистем. В любом случае, мы должны быть готовы к тому, что это потребует либо более глубокой ручной работы с элементами интерфейса в расширении, либо использования программных механизмов для динамической модификации.
Мы выяснили, что даже при кажущихся ограничениях обычных форм и расширений, платформа 1С предоставляет инструменты для решения этой задачи. Главное – правильно выбрать подход и учесть все особенности режима совместимости и работы с расширениями.