Определение текущей конфигурации 1С:Предприятия программными средствами — одна из самых востребованных задач среди разработчиков и администраторов. Без этой информации невозможно корректно обновлять базы, интегрировать внешние системы или отлаживать ошибки. В отличие от ручного просмотра через интерфейс, программные методы позволяют автоматизировать сбор данных, интегрировать их в скрипты развертывания или мониторинга, а также получать информацию удаленно — например, через COM-соединение или HTTP-сервисы.

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

1. Стандартные функции встроенного языка: Конфигурация и Метаданные

Самый очевидный и безопасный способ — использование встроенных объектов Конфигурация и Метаданные. Эти объекты доступны как в режиме 1С:Предприятие, так и в Конфигураторе, но возвращают разные наборы данных в зависимости от контекста. Например, в режиме предприятия вы не сможете получить полный список объектов метаданных, если они скрыты настройками прав.

Основные методы:

  • 🔹 Конфигурация.Версия() — возвращает версию конфигурации в формате 8.3.21.1234. Работает только в Конфигураторе!
  • 🔹 Метаданные().Версия() — аналог предыдущего, но доступен и в режиме предприятия (с ограничениями).
  • 🔹 Метаданные().ДеревоМетаданных — возвращает иерархическое представление всех объектов конфигурации (справочники, документы, отчеты и т.д.).
  • 🔹 Конфигурация.ПолноеИмя() — полный путь к файлу конфигурации (актуально для файлового варианта базы).

Пример кода для получения версии и списка объектов:

// Получение версии конфигурации (работает в Конфигураторе)

Сообщить("Версия конфигурации: " + Конфигурация.Версия());

// Получение списка справочников (работает в режиме предприятия)

Для Каждого Объект Из Метаданные().Справочники Цикл

Сообщить(Объект.Имя);

КонецЦикла;

⚠️ Внимание: В режиме 1С:Предприятие метод Метаданные().ДеревоМетаданных может вернуть неполные данные, если у пользователя нет прав на просмотр всех объектов. Для получения полной информации используйте Конфигуратор или администраторские права.
💡

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

2. Чтение версии из системных констант и реквизитов

Многие типовые конфигурации (Бухгалтерия 3.0, УТ 11, ЗУП 3.1) хранят информацию о версии не только в метаданных, но и в специальных константах или реквизитах. Это позволяет получать данные даже в режиме 1С:Предприятие без ограничений. Например, в Бухгалтерии 3.0 версия хранится в константе ВерсияПрограммы, а в УТ 11 — в реквизите ВерсияКонфигурации справочника ИнформацияОПрограмме.

Примеры для популярных конфигураций:

Конфигурация Объект хранения Пример кода
1С:Бухгалтерия 3.0 Константа ВерсияПрограммы Сообщить(Константы.ВерсияПрограммы.Получить());
1С:Управление торговлей 11 Реквизит ВерсияКонфигурации в справочнике ИнформацияОПрограмме Версия = Справочники.ИнформацияОПрограмме.НайтиПоНаименованию("Основная").ВерсияКонфигурации;
1С:Зарплата и управление персоналом 3.1 Константа ВерсияКонфигурации Сообщить(Константы.ВерсияКонфигурации.Получить());
1С:Розница 2.3 Константа ВерсияКонфигурации Сообщить(Константы.ВерсияКонфигурации.Получить());

Если вы работаете с нетиповой конфигурацией, проверьте наличие следующих объектов:

  • 📌 Константы с именами Версия*, Release*, ConfigVersion.
  • 📌 Справочники с названиями ИнформацияОСистеме, ПараметрыСистемы, НастройкиПрограммы.
  • 📌 Реквизиты глобального модуля (например, глВерсияКонфигурации).
Как найти скрытые константы с версией?

Если вы подозреваете, что версия хранится в константе, но не знаете её имени, выполните в Конфигураторе следующий код:

Для Каждого Константа Из Метаданные().Константы Цикл

Если НРег(Константа.Имя) LIKE "%ВЕРСИ%" Тогда

Сообщить(Константа.Имя + " = " + Константа.Значение);

КонецЕсли;

КонецЦикла;

Этот скрипт выведет все константы, в именах которых есть слово "версия" (в любом регистре).

3. Использование SQL-запросов к системным таблицам

Для баз 1С:Предприятия, работающих на MS SQL Server или PostgreSQL, можно получить информацию о конфигурации напрямую из системных таблиц. Этот метод полезен, если у вас нет доступа к Конфигуратору или нужно автоматизировать сбор данных по множеству баз. Основные таблицы, содержащие информацию о конфигурации:

  • 🗃️ Config — хранит основные данные о конфигурации, включая версию.
  • 🗃️ ConfigSave — содержит историю изменений конфигурации (полезно для отката).
  • 🗃️ Params — может содержать дополнительные параметры, включая версию платформы.

Пример SQL-запроса для MS SQL Server:

SELECT

CAST(CAST(data AS VARBINARY(MAX)) AS NVARCHAR(MAX)) AS ConfigData

FROM Config

WHERE filename = 'version';

Для PostgreSQL запрос будет аналогичным, но с учетом синтаксиса:

SELECT

encode(data, 'escape') AS config_data

FROM config

WHERE filename = 'version';

⚠️ Внимание: Структура системных таблиц может отличаться в зависимости от версии платформы и СУБД. Например, в 1С:Предприятие 8.3.20+ данные в таблице Config хранятся в двоичном формате и требуют декодирования. Для корректной обработки используйте функции CONVERT (MS SQL) или encode (PostgreSQL).

Если вам нужно не только прочитать версию, но и проанализировать структуру конфигурации, можно использовать запрос к таблице ConfigSave:

SELECT TOP 1

CAST(CAST(data AS VARBINARY(MAX)) AS NVARCHAR(MAX)) AS FullConfig

FROM ConfigSave

ORDER BY id DESC;

📊 Какой метод определения конфигурации вы используете чаще?
Встроенный язык (Метаданные, Конфигурация)
SQL-запросы к системным таблицам
Чтение из констант/реквизитов
Внешние утилиты (например, 1C:EDT)
Не определяю программно

4. Внешние инструменты: 1C:EDT и утилиты командной строки

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

1C:Enterprise Development Tools (EDT)

1C:EDT — официальная среда разработки от фирмы , которая позволяет анализировать конфигурации в формате .cf и .epf. Чтобы получить версию конфигурации:

  1. Откройте проект в 1C:EDT.
  2. Перейдите в файл configuration.cf.
  3. В свойствах проекта будет указана версия (поле Version).

Утилита chdbfl.exe

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

chdbfl.exe -info "C:\Bases\MyBase\1Cv8.1CD" | find "Version"

Скрипты на PowerShell/Python

Для автоматизации можно написать скрипт, который будет парсить файлы конфигурации. Например, на Python с использованием библиотеки py7zr (для работы с архивами .cf):

import py7zr

with py7zr.SevenZipFile('config.cf', mode='r') as archive:

for file in archive.getnames():

if file.endswith('version'):

print(archive.read(file).decode('utf-8'))

Убедиться, что база не заблокирована другими пользователями

Сделать резервную копию файлов конфигурации (.cf, .1CD)

Проверить права доступа к каталогу базы

Обновить утилиты (chdbfl, 1C:EDT) до актуальных версий-->

5. Программное определение структуры конфигурации (объекты, модули, формы)

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

Получение списка объектов метаданных

Через встроенный язык можно рекурсивно обойти все объекты конфигурации и выгрузить их свойства:

Процедура ВыгрузитьСтруктуруКонфигурации()

Для Каждого Объект Из Метаданные().ДеревоМетаданных Цикл

Если Объект.ЭтоГруппа Тогда

ВыгрузитьСтруктуруКонфигурации(Объект);

Иначе

Сообщить(Объект.Имя + " (" + Объект.Тип().Имя + ")");

КонецЕсли;

КонецЦикла;

КонецПроцедуры

Анализ модулей и форм

Для каждого объекта можно получить его модули и формы. Например, чтобы выгрузить текст модуля документа:

ДокументОбъект = Метаданные().Документы.НайтиПоИмени("ЗаказПокупателя");

Если ДокументОбъект <> Неопределено Тогда

ТекстМодуля = ДокументОбъект.Модуль();

Сообщить(ТекстМодуля);

КонецЕсли;

Экспорт в JSON/XML для дальнейшей обработки

Для интеграции с внешними системами удобно выгружать структуру конфигурации в формате JSON или XML. Пример выгрузки в JSON:

Функция ПолучитьСтруктуруКакJSON()

Результат = Новый Структура();

Для Каждого Объект Из Метаданные().ДеревоМетаданных Цикл

Если НЕ Объект.ЭтоГруппа Тогда

ДанныеОбъекта = Новый Структура();

ДанныеОбъекта.Вставить("Тип", Объект.Тип().Имя);

ДанныеОбъекта.Вставить("Имя", Объект.Имя);

Результат.Вставить(Объект.Имя, ДанныеОбъекта);

КонецЕсли;

КонецЦикла;

Возврат JSON.Записать(Результат);

КонецФункции

⚠️ Внимание: При анализе модулей учитывайте, что в режиме 1С:Предприятие некоторые модули могут быть недоступны из-за ограничений прав. Для полного анализа используйте Конфигуратор с правами администратора.
💡

Для автоматизированного анализа конфигураций крупных баз (100+ объектов) рекомендуется использовать внешние скрипты на Python или PowerShell. Они позволяют обрабатывать данные параллельно и интегрироваться с системами мониторинга (например, Zabbix или Prometheus).

6. Особенности работы с разными версиями платформы (8.2 vs 8.3)

Методы определения конфигурации могут отличаться в зависимости от версии платформы 1С:Предприятия. Основные различия:

1С:Предприятие 8.2

  • 🔸 Метод Конфигурация.Версия() работает только в Конфигураторе.
  • 🔸 В режиме предприятия Метаданные().Версия() часто возвращает пустую строку.
  • 🔸 Системные таблицы SQL имеют более простую структуру (например, нет поля filename в таблице Config).
  • 🔸 Отсутствует поддержка JSON — для выгрузки структуры придется использовать XML.

1С:Предприятие 8.3

  • 🔸 Добавлена поддержка JSON для сериализации данных.
  • 🔸 Метод Метаданные().Версия() работает стабильнее, но может требовать прав.
  • 🔸 Появились новые системные таблицы (например, ConfigLog для логов изменений).
  • 🔸 В 8.3.20+ добавлена поддержка HTTP-сервисов, что позволяет получать информацию о конфигурации удаленно.

Пример кода для определения версии платформы (работает в обеих версиях):

Сообщить("Версия платформы: " + Константы.ВерсияПлатформы.Получить());

Сообщить("Версия конфигурации: " + ?(Метаданные().Версия() <> "", Метаданные().Версия(), "Не определена"));

Если вам нужно поддерживать совместимость с обеими версиями, используйте конструкцию с проверкой:

Попытка

ВерсияКонфигурации = Метаданные().Версия();

Исключение

// Для 8.2 или если нет прав

ВерсияКонфигурации = "Не определена (ошибка: " + ОписаниеОшибки() + ")";

КонецПопытки;

7. Типичные ошибки и как их избежать

При программном определении конфигурации разработчики часто сталкиваются с следующими проблемами:

1. Ошибка "Недостаточно прав"

В режиме 1С:Предприятие многие методы (например, Метаданные().ДеревоМетаданных) требуют полных прав. Решение:

  • 🔐 Запускайте код в Конфигураторе.
  • 🔐 Используйте администраторскую учетку.
  • 🔐 Для типовых конфигураций читайте версию из констант (см. раздел 2).

2. Пустая версия в Метаданные().Версия()

Если метод возвращает пустую строку:

  • 🔍 Проверьте, не запущен ли код в режиме предприятия без прав.
  • 🔍 Убедитесь, что конфигурация не повреждена (проверьте через chdbfl.exe -test).
  • 🔍 Для файловой базы попробуйте открыть .cf-файл в 1C:EDT.

3. Ошибки при работе с SQL

При прямом чтении системных таблиц могут возникать ошибки:

  • 🗄️ Invalid object name 'Config' — проверьте регистр имен таблиц (в PostgreSQL они пишутся в нижнем регистре).
  • 🗄️ Cannot convert data type — используйте CAST для преобразования двоичных данных.
  • 🗄️ Login failed — убедитесь, что у пользователя СУБД есть права на чтение системных таблиц.

4. Разные версии в кластере

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

  • 🔄 Синхронизируйте конфигурации через rac (Remote Administration Console).
  • 🔄 Проверяйте версию на каждом рабочем сервере отдельно.
Как проверить целостность конфигурации?

Если методы определения версии возвращают некорректные данные, выполните проверку целостности:

  1. Для файловой базы: chdbfl.exe -test "C:\path\to\base\1Cv8.1CD"
  2. Для SQL-базы: TESTDBCONN /S server\instance /D database_name /U user /P password
  3. В Конфигураторе: Администрирование → Тестирование и исправление.

Если найдены ошибки, восстановите базу из резервной копии или обновите конфигурацию через cf-файл.

FAQ: Частые вопросы по определению конфигурации 1С

Можно ли получить версию конфигурации без запуска 1С?

Да, для этого используйте:

  • Утилиту chdbfl.exe (для файловой базы).
  • SQL-запрос к таблице Config (для SQL-базы).
  • Анализ файла .cf через 1C:EDT или архиваторы (например, 7-Zip).

Пример для chdbfl.exe:

chdbfl.exe -info "C:\Bases\MyBase\1Cv8.1CD" | find "Version"
Почему Метаданные().Версия() возвращает пустую строку в режиме предприятия?

Это типичная ситуация для:

  • Платформы 1С:Предприятие 8.2 (метод не поддерживается в режиме предприятия).
  • Отсутствия прав у текущего пользователя.
  • Повреждения конфигурации (проверьте через chdbfl -test).

Решение: используйте константы (например, Константы.ВерсияКонфигурации.Получить()) или запускайте код в Конфигураторе.

Как программно определить, какая конфигурация установлена: типовая или нетиповая?

Проверьте следующие признаки:

  1. Наличие константы КонфигурацияСтандартная (в типовых конфигурациях она обычно есть).
  2. Сравните хэш конфигурации с эталонным (можно получить через ПолучитьХэшКонфигурации()).
  3. Проверьте наличие подписи в файле .cf (типовые конфигурации подписаны ).

Пример кода для проверки хэша:

Хэш = ПолучаемХэшКонфигурации();

Если Хэш = "эталонный_хэш_типовой_конфигурации" Тогда

Сообщить("Конфигурация типовая");

Иначе

Сообщить("Конфигурация нетиповая или измененная");

КонецЕсли;

Можно ли получить структуру конфигурации удаленно (по сети)?

Да, для этого используйте:

  • 🌐 HTTP-сервисы1С:Предприятие 8.3.20+).
  • 🌐 COM-соединение (для Windows-клиентов).
  • 🌐 OData (если настроен публикация на веб-сервере).
  • 🌐 Прямой SQL-запрос к базе (если есть доступ к СУБД).

Пример для COM-соединения:

V83 = NewObject("V83.COMConnector");

База = V83.Connect("File=C:\Bases\MyBase");

Сообщить(База.Metadata.Version());

Как автоматизировать сбор информации о конфигурациях на множестве баз?

Для массового сбора данных:

  1. Напишите скрипт на PowerShell или Python, который будет обходить каталоги с базами и запускать chdbfl.exe.
  2. Используйте SQL-запросы для баз на сервере (можно написать хранимую процедуру).
  3. Интегрируйте сбор данных с системами мониторинга (например, Zabbix через внешние скрипты).

Пример скрипта на PowerShell:

$bases = Get-ChildItem -Path "C:\Bases\" -Directory

foreach ($base in $bases) {

$version = & "C:\Program Files\1cv8\8.3.21.1234\bin\chdbfl.exe" -info "$($base.FullName)\1Cv8.1CD" | Select-String "Version"

Write-Output "$($base.Name): $version"

}