Отступление.
Более 7 лет назад я эксперементировал над 1С 7.7 в части объединения нескольких форм в одну. Как оказалось достаточно было переназначить родителя "подложки" (окна, на котором расположены элементы) одной формы на гравное окно другой, чтобы обе формы заработали в одном окне без потери функционала и "вылетов" системы. Мысли о том, что что-то подобное можно сделать в 8.2 натолкнули меня на экперименты в этой области.
Как это работает?
К статье прикреплена обработка, в которой есть 2 формы. Первая форма "Форма" - основная. Она вызывает форму, на которой располагается меню, и при помощи ВК, выполненной на технологии NativeAPI (спасибо большое Александру Соломатину за его труды и статью "ВК NativeAPI на Delphi и FreePascal", на базе которой и была написана компонента), переопределяет родителя для подменю в ФормаМеню на командную панель главного окна 1С, после этого скрывает (делает невидимым) окно обработки. Для поиска подменю я использовал опыт, опубликованный уважаемым Abadonna в статье "Иерархия окон в 1С 8.2", которая сэкономила кучу времени на решении поставленной задачки.
Для того чтобы сформировать собственное меню, достаточно в форме обработки "ФормаМеню" внести изменния в группу "Подменю". Обработка событий комманд, добавленных подменю, производится типовым способом, т.е. как в обычной форме. По сути, это и есть обычная форма с той лишь разницей, что ее подменю вынесено из формы.
Обработку можно встроить в конфигурацию. Для этого:
- Добавляем обработку в конфигурацию.
- В основной форме вместо "ФормаМеню = ПолучитьФорму("ВнешняяОбработка.Меню.Форма.ФормаМеню",,,,ВариантОткрытияОкна.ОтдельноеОкно);" пишем "ФормаМеню = ПолучитьФорму("Обработка.Меню.Форма.ФормаМеню",,,,ВариантОткрытияОкна.ОтдельноеОкно);"
- В модуле управляемого приложения в процедуру "ПриНачалеРаботыСистемы" добавляем "Форму("Обработка.Меню.Форма",,,,ВариантОткрытияОкна.ОтдельноеОкно);"
Существующие ограничения и неудобства
- Не совсем красиво отображается кнопка подменю (частично накрывает вторую иконку и серый фон).
- На форме "ФормаМеню" нельзя менять ничего, кроме состава группы "Подменю". По сути, ничего другого и не нужно.
- Окно формы видно в списке окон 1С и его можно закрыть.
- При инициализации меню возможно будет заметно открытие формы обработки.