При сопровождении, анализе или версионировании конфигураций на платформе 1С:Предприятие 7.7 нередко возникает задача: понять, где физически хранится структура пользовательских интерфейсов и меню, а также как получить к ней доступ вне штатного Конфигуратора. Разберем по шагам внутреннее устройство хранения интерфейсов, способы их извлечения и возможности управления меню программы.
В платформе 1С 7.7 не существует отдельного внешнего файла, в котором хранились бы текстовые описания пользовательских интерфейсов. Вся конфигурация упакована в единый файл 1Cv7.MD.
Проанализируем его внутренний формат: файл метаданных представляет собой контейнер OLE Structured Storage (также известный как Compound File). Внутри него информация разделена на специализированные хранилища (каталоги) и потоки (файлы данных):
Main MetaData Stream содержит общее описание структуры конфигурации и регистрирует существующие интерфейсы как метаданные.Важно различать саму конфигурацию интерфейса и персональные настройки пользователей. В файле 1Cv7.MD находится только шаблон структуры интерфейсов. Назначение конкретного интерфейса конкретному пользователю по умолчанию прописывается в файле списка пользователей USRDEF\USERS.USR. Если же пользователь в процессе работы перемещает или скрывает панели инструментов, эти изменения сохраняются платформой в системный реестр Windows (ветка текущего пользователя), а не обратно в метаданные.
Посмотрим на практические инструменты, с помощью которых можно добраться до описания меню без запуска Конфигуратора 1С.
GComp выполняет разборку файла 1Cv7.MD на исходные составляющие. При этом дерево интерфейсов преобразуется в понятные текстовые файлы со структурой меню и вызываемыми командами, что идеально подходит для анализа и ведения истории изменений в системах контроля версий.1Cv7.MD можно организовать программно без запуска среды 1С, используя стандартные интерфейсы Windows Structured Storage (IStorage, IStream), библиотеку compound.dll или скрипты на любых языках, поддерживающих формат MS-CFB.Выясним, как обстоят дела с модификацией меню во время работы пользователя. Штатный встроенный язык 1С 7.7 крайне ограничен в работе с интерфейсами:
НазваниеИнтерфейса(). Переключение между заранее созданными интерфейсами пользователь выполняет интерактивно через меню «Сервис» — «Переключить интерфейс».Если перед нами стоит задача динамически перестраивать меню программы (строить адаптивные интерфейсы или управлять доступом к пунктам на лету), рассмотрим альтернативные решения на базе внешних компонент:
HWND) и дескриптор самого меню (HMENU). С помощью функций InsertMenuItem, ModifyMenu, EnableMenuItem и DeleteMenu разработчик может полностью модифицировать состав меню в рантайме.