В процессе разработки на платформе 1С:Предприятие 7.7 программисты часто сталкиваются с необходимостью извлечь справочную информацию об объектах конфигурации. Если поле Комментарий доступно через стандартный объект Метаданные, то содержимое закладки «Описание» (которое по сути является встроенной справкой объекта) остается недоступным для штатного встроенного языка. Давайте разберем, почему так происходит, и какими инструментами мы можем воспользоваться для решения этой задачи.
Прежде чем переходить к программным методам, проанализируем разницу между этими полями. В конфигураторе 1С 7.7 у любого объекта (документа, справочника, реквизита) есть два похожих, но технически разных поля:
Метаданные.Документ(Имя).Комментарий.Для извлечения этих данных нам придется использовать внешние компоненты (ВК) или сторонние утилиты. Рассмотрим наиболее эффективные способы.
Одним из самых мощных инструментов для работы со структурой конфигурации является компонента ActiveMD. Она позволяет получить доступ к свойствам метаданных, которые скрыты от обычного пользователя. Рассмотрим, как с ней работать.
Проанализируем синтаксис обращения к описанию через эту компоненту. Она предоставляет объект Description, который возвращает агрегатный объект типа Модуль. Это позволяет не просто прочитать текст, но и взаимодействовать с ним как с программным кодом или текстовым блоком.
Пример логики обращения может выглядеть следующим образом:
// Предположим, компонента ActiveMD успешно загружена и инициализирована
// Получаем объект метаданных документа
ДокМД = СоздатьОбъект("ActiveMD.Metadata");
ДокументОбъект = ДокМД.Documents.FindByIdentifier("ПриходнаяНакладная");
// Обращаемся к свойству Description
ТекстОписания = ДокументОбъект.Description.Text;
Сообщить(ТекстОписания);
Этот метод хорош тем, что он работает «в контексте» запущенной системы и не требует монопольного доступа к файлу метаданных 1cv7.md.
Если вам необходимо получить описание документа в момент, когда его форма уже открыта (или может быть открыта программно), мы можем воспользоваться популярной библиотекой FormEx. В ней реализован объект РасширениеФормы, который дает доступ к глубоким свойствам оконного интерфейса 1С.
Рассмотрим ситуацию: нам нужно получить описание без визуального открытия окна. Программисты часто используют «хитрость» — открытие служебной формы в скрытом режиме или программную подмену пути к форме. Однако, если форма открыта, получение данных выглядит так:
// В контексте модуля формы документа
Сервис = СоздатьОбъект("Сервис");
Расширение = СоздатьОбъект("РасширениеФормы");
Расширение.УстановитьФорму(Форма);
// Попытка извлечения данных о справке объекта
// Обратите внимание, что FormEx чаще работает с визуальными свойствами,
// поэтому данный метод эффективен для работы со связанными справочными материалами.
Стоит отметить, что FormEx больше ориентирован на работу с визуальным представлением, поэтому для фонового сбора описаний всех документов базы лучше подходят методы прямого чтения MD-файла.
Выясним техническую причину сложности задачи: файл 1cv7.md является так называемым Structured Storage (составным файлом Microsoft). Описания объектов хранятся в нем в виде отдельных потоков (streams).
Если мы не хотим использовать специализированные 1С-компоненты, можно задействовать Compound.dll или системные API Windows для работы с IStorage. Описание документа связано с его внутренним идентификатором в структуре метаданных. Этот путь требует серьезных навыков системного программирования, так как данные в потоках могут быть сжаты.
Если задача заключается в разовом получении описаний (например, для формирования внешней документации или выгрузки на сайт), рассмотрим использование утилиты GComp.
Разберем процесс по шагам:
GComp для разбора файла 1cv7.md в текстовый формат..txt или внутри файлов описания метаданных).Текст.
ТекстОписание = СоздатьОбъект("Текст");
// Путь к файлу, полученному после работы GComp
ТекстОписание.Открыть(КаталогРазбора + "\Documents\ПриходнаяНакладная\Description.txt");
Для итератор = 1 По ТекстОписание.КоличествоСтрок() Цикл
Сообщить(ТекстОписание.ПолучитьСтроку(итератор));
КонецЦикла;
Этот метод является самым надежным с точки зрения полноты данных, так как он извлекает «чистый» текст справки, заложенный разработчиком в конфигураторе.
Проанализируем распространенное заблуждение: многие полагают, что в SQL-версии 1С 7.7 метаданные и описания можно достать прямым SQL-запросом. Это не так. Даже если ваша база данных работает на MS SQL Server, тексты описаний, модули и структура таблиц все равно хранятся в файле 1cv7.md на уровне файловой системы. SQL-таблицы содержат только данные (проводки, справочники, документы), но не описание самой конфигурации.
Для решения задачи программного получения описания в 1С 7.7 выберите наиболее подходящий вам путь:
Помните, что работа с внешними компонентами требует их предварительной регистрации в системе (regsvr32) или использования метода ЗагрузитьВнешнююКомпоненту().