Как узнать структуру объектов конфигурации 1С без использования конфигуратора

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Метод 1. Программный анализ метаданных на сервере

Самый прямой и надежный способ — это обращение к глобальному объекту Метаданные. Поскольку в веб-клиенте прямой доступ к метаданным ограничен, мы должны реализовать логику на стороне сервера. Проанализируем, как получить детальные характеристики реквизита и провести анализ структуры метаданных.

Для того чтобы узнать длину строки или точность числа, нам необходимо обратиться к свойству Тип объекта метаданных. Это свойство возвращает объект ОписаниеТипов, из которого, в свою очередь, можно извлечь соответствующие квалификаторы.

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


&НаСервере
Процедура ПолучитьСтруктуруОбъектаНаСервере(ИмяСправочника)
    // Получаем объект метаданных справочника
    ОбъектМетаданных = Метаданные.Справочники[ИмяСправочника];
    
    Для Каждого Реквизит Из ОбъектМетаданных.Реквизиты Цикл
        ОписаниеТипа = Реквизит.Тип;
        ТекстТипа = Строка(ОписаниеТипа);
        
        Сообщить("Реквизит: " + Реквизит.Имя + " (" + ТекстТипа + ")");
        
        // Анализируем квалификаторы для строк
        КвалификаторыСтроки = ОписаниеТипа.КвалификаторыСтроки;
        Если КвалификаторыСтроки <> Неопределено И КвалификаторыСтроки.Длина > 0 Тогда
            Сообщить(" - Длина строки: " + КвалификаторыСтроки.Длина);
            Сообщить(" - Допустимая длина: " + КвалификаторыСтроки.ДопустимаяДлина);
        КонецЕсли;
        
        // Анализируем квалификаторы для чисел
        КвалификаторыЧисла = ОписаниеТипа.КвалификаторыЧисла;
        Если КвалификаторыЧисла <> Неопределено Тогда
            Сообщить(" - Разрядность: " + КвалификаторыЧисла.Разрядность);
            Сообщить(" - Точность: " + КвалификаторыЧисла.РазрядностьДробнойЧасти);
        КонецЕсли;
        
        // Проверка на составной тип
        Если ОписаниеТипа.Типы().Количество() > 1 Тогда
            Сообщить(" - Внимание: Составной тип данных!");
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры

Важный момент: при работе в веб-клиенте мы не можем напрямую манипулировать объектами метаданных на клиенте. Поэтому всю информацию нужно собрать в таблицу или структуру на сервере, сериализовать (например, в массив структур) и передать на клиент для отображения.

Метод 2. Использование функции ПолучитьСтруктуруХраненияБазыДанных

Если нам нужно заглянуть еще глубже и понять, как объект представлен на уровне СУБД (например, в SQL), мы можем воспользоваться мощным системным методом ПолучитьСтруктуруХраненияБазыДанных(). Этот метод особенно полезен, когда нужно сопоставить имена 1С (например, Реквизит1) с именами полей в таблицах базы данных (например, _Fld1234).

Выясним причину использования этого метода: он возвращает полную техническую карту таблиц, которую удобно визуализировать через инструмент Структура хранения БД в виде дерева конфигурации. Посмотрим на пример реализации:


&НаСервере
Функция ПолучитьТехническоеОписаниеОбъекта(ИмяОбъекта)
    МассивИмен = Новый Массив;
    МассивИмен.Добавить(ИмяОбъекта);
    
    ТаблицаСтруктуры = ПолучитьСтруктуруХраненияБазыДанных(МассивИмен);
    
    Для Каждого СтрокаТаблицы Из ТаблицаСтруктуры Цикл
        // Здесь мы видим соответствие имен полей 1С и SQL
        Сообщить("Поле: " + СтрокаТаблицы.ИмяПоля + " -> Имя в БД: " + СтрокаТаблицы.ИмяПоляХранения);
        Сообщить("Тип в БД: " + СтрокаТаблицы.ТипДанныхПоляХранения);
    КонецЦикла;
КонецФункции

Этот метод возвращает подробную таблицу значений, содержащую информацию о индексах, именах таблиц и типах полей на уровне СУБД. Это незаменимо для оптимизации тяжелых запросов в консоли.

Метод 3. Доступ через интерфейс OData (REST API)

В современных конфигурациях часто включен стандартный интерфейс OData. Если у вас есть соответствующие права доступа, вы можете получить структуру всей конфигурации прямо в браузере.

Проанализируем этот путь:

  1. Откройте браузер и введите адрес вашей базы в формате: http://[адрес_сервера]/[имя_базы]/odata/standard.odata/$metadata.
  2. В ответ система вернет XML-документ в формате EDMX.
  3. В этом файле будут описаны все сущности (EntityTypes), их свойства (Properties) и ограничения (MaxLength для строк, Precision и Scale для чисел).

Этот способ работает даже в тех случаях, когда запуск внешних обработок в базе запрещен политиками безопасности, но оставлена возможность удаленного доступа через REST-сервис.

Метод 4. Использование сторонних инструментов и типовых решений

Существует ряд проверенных временем инструментов, которые можно запустить как внешние обработки (если это разрешено в профиле безопасности пользователя):

Подробный разбор квалификаторов типов

Рассмотрим подробнее, что именно мы можем узнать о типах данных программно. У объекта ОписаниеТипов есть свойства, которые являются ключом к разгадке структуры:

Для числовых данных (КвалификаторыЧисла):

Для строковых данных (КвалификаторыСтроки):

Для дат (КвалификаторыДаты):

Резюме

Для того чтобы узнать структуру объекта без конфигуратора, мы рекомендуем использовать комплексный подход. Начните с создания простой внешней обработки, которая перебирает коллекцию Метаданные на сервере и выводит свойства через КвалификаторыСтроки и КвалификаторыЧисла. Если же программный доступ к метаданным ограничен, воспользуйтесь OData-интерфейсом или встроенными в конфигурацию отчетами по составу метаданных (часто встречаются в БСП-базах в разделе "Администрирование — Обслуживание").

← На главную