Где хранится структура меню в 1С 7.7 и как ее извлечь?

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

При сопровождении, анализе или версионировании конфигураций на платформе 1С:Предприятие 7.7 нередко возникает задача: понять, где физически хранится структура пользовательских интерфейсов и меню, а также как получить к ней доступ вне штатного Конфигуратора. Разберем по шагам внутреннее устройство хранения интерфейсов, способы их извлечения и возможности управления меню программы.

Физическая структура хранения меню в 1Cv7.MD

В платформе 1С 7.7 не существует отдельного внешнего файла, в котором хранились бы текстовые описания пользовательских интерфейсов. Вся конфигурация упакована в единый файл 1Cv7.MD.

Проанализируем его внутренний формат: файл метаданных представляет собой контейнер OLE Structured Storage (также известный как Compound File). Внутри него информация разделена на специализированные хранилища (каталоги) и потоки (файлы данных):

  1. Поток Main MetaData Stream содержит общее описание структуры конфигурации и регистрирует существующие интерфейсы как метаданные.
  2. Контейнеры интерфейсов содержат специализированные потоки, отвечающие за непосредственную начинку: иерархическую структуру меню, привязку команд к объектам метаданных (справочникам, документам, журналам, отчетам), панели инструментов (Toolbars) и таблицы горячих клавиш (акселераторов).

Важно различать саму конфигурацию интерфейса и персональные настройки пользователей. В файле 1Cv7.MD находится только шаблон структуры интерфейсов. Назначение конкретного интерфейса конкретному пользователю по умолчанию прописывается в файле списка пользователей USRDEF\USERS.USR. Если же пользователь в процессе работы перемещает или скрывает панели инструментов, эти изменения сохраняются платформой в системный реестр Windows (ветка текущего пользователя), а не обратно в метаданные.

Способы извлечения структуры меню

Посмотрим на практические инструменты, с помощью которых можно добраться до описания меню без запуска Конфигуратора 1С.

  1. Декомпиляция с помощью утилиты GComp. Это наиболее удобный и практичный способ для разработчиков. Утилита GComp выполняет разборку файла 1Cv7.MD на исходные составляющие. При этом дерево интерфейсов преобразуется в понятные текстовые файлы со структурой меню и вызываемыми командами, что идеально подходит для анализа и ведения истории изменений в системах контроля версий.
  2. Просмотр через плагины Compound File. Файл метаданных можно открыть с помощью файловых менеджеров (например, FAR Manager с плагином DocFile) или специализированных просмотрщиков OLE Structured Storage. Это позволяет исследовать внутренние потоки контейнера напрямую.
  3. Программное чтение через Compound API. Доступ к потокам внутри 1Cv7.MD можно организовать программно без запуска среды 1С, используя стандартные интерфейсы Windows Structured Storage (IStorage, IStream), библиотеку compound.dll или скрипты на любых языках, поддерживающих формат MS-CFB.

Возможности и ограничения управления меню на платформе 1С 7.7

Выясним, как обстоят дела с модификацией меню во время работы пользователя. Штатный встроенный язык 1С 7.7 крайне ограничен в работе с интерфейсами:

  1. Встроенный язык не имеет штатных методов для динамического скрытия, добавления, переименования или отключения отдельных пунктов меню во время сеанса работы.
  2. Штатно доступно только получение имени текущего интерфейса через функцию НазваниеИнтерфейса(). Переключение между заранее созданными интерфейсами пользователь выполняет интерактивно через меню «Сервис» — «Переключить интерфейс».

Если перед нами стоит задача динамически перестраивать меню программы (строить адаптивные интерфейсы или управлять доступом к пунктам на лету), рассмотрим альтернативные решения на базе внешних компонент:

  1. Прямая работа с системным дескриптором HMENU через WinAPI. Поскольку главное меню в 1С 7.7 является стандартным оконным меню Windows, через внешние библиотеки (такие как 1С++, FormEx или DynamicWrapper) можно получить дескриптор главного окна (HWND) и дескриптор самого меню (HMENU). С помощью функций InsertMenuItem, ModifyMenu, EnableMenuItem и DeleteMenu разработчик может полностью модифицировать состав меню в рантайме.
  2. Перехват событий оконными процедурами. С помощью механизмов перехвата оконных сообщений (сабклассинга), предоставляемых внешними библиотеками, можно перехватывать клики по динамически созданным пунктам меню и направлять управление в исполняемый программный код модулей 1С.
← На главную