К статье
Практический материал

Разработка и Конфигурация · 10 мин

Как узнать конфигурацию 1С программно

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

Задача определить конфигурацию 1С программно возникает в нескольких типовых ситуациях: при написании универсальных обработок, которые должны работать в разных базах, при сборе технической информации для поддержки, при проверке совместимости расширения с конкретной версией конфигурации. Во всех этих случаях ручной просмотр сведений через «О программе» не подходит — нужен код, который вернёт имя, версию и другие параметры конфигурации автоматически.

В платформе «1С:Предприятие» есть несколько механизмов для этого: объект Метаданные, функция получения системной информации, а в конфигурациях на базе Библиотеки стандартных подсистем — готовые программные интерфейсы. Каждый способ имеет свои ограничения: часть методов недоступна на клиенте, часть требует определённых прав, а имя конфигурации и её синоним — не одно и то же.

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

Что именно можно узнать о конфигурации программно

Прежде чем писать код, определите, какие сведения нужны. «Узнать конфигурацию» может означать разное: имя конфигурации в метаданных (например, УправлениеТорговлей), её представление для пользователя (Управление торговлей), номер версии (11.5.7.234), поставщика, режим совместимости или версию платформы, на которой работает база.

Эти данные хранятся в разных местах. Имя, синоним, версия и поставщик — свойства корня дерева метаданных. Версия платформы и разрядность — часть системной информации. Режим совместимости — отдельное свойство метаданных. Не путайте версию конфигурации с версией платформы: это независимые номера, и для диагностики обычно нужны оба.

Способ 1. Объект Метаданные — универсальный метод

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

ИмяКонфигурации = Метаданные.Имя;              // "УправлениеТорговлей"

СинонимКонфигурации = Метаданные.Синоним; // "Управление торговлей"

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

Поставщик = Метаданные.Поставщик; // "Фирма \"1С\""

РежимСовместимости = Метаданные.РежимСовместимости;

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

На тонком клиенте объект Метаданные недоступен в полном объёме, поэтому код лучше выносить в серверную процедуру общего модуля с установленным флагом «Сервер». Если обработка должна работать и на клиенте, получите значения на сервере один раз и передайте в клиентский контекст через структуру.

bsl
Функция ПолучитьСведенияОКонфигурации() Экспорт
	Результат = Новый Структура;
	Результат.Вставить("Имя", Метаданные.Имя);
	Результат.Вставить("Синоним", Метаданные.Синоним);
	Результат.Вставить("Версия", Метаданные.Версия);
	Результат.Вставить("Поставщик", Метаданные.Поставщик);
	Возврат Результат;
КонецФункции

Способ 2. Версия платформы и системная информация

Если под «конфигурацией» в задаче понимается вся среда — включая версию платформы, тип и разрядность клиента, — используйте функцию ПолучитьСистемнуюИнформацию(). Она возвращает объект СистемнаяИнформация с заполненными свойствами:

СисИнфо = ПолучитьСистемнуюИнформацию();

ВерсияПлатформы = СисИнфо.ВерсияПриложения; // "8.3.22.1750"

ТипПлатформы = СисИнфо.ТипПлатформы; // Windows_x86_64 и т.п.

ВерсияОС = СисИнфо.ВерсияОС;

Эта функция доступна и на клиенте, и на сервере, но возвращает информацию о том контексте, где выполнена. Учтите: версия платформы клиента и сервера могут различаться, если на машинах установлены разные релизы — при диагностике собирайте оба значения. Для получения серверной версии выполните вызов в серверном контексте.

Дополнительно полезна функция ТекущийРежимЗапуска() и свойство Метаданные.РежимСовместимости: расширения и внешние обработки часто зависят от режима совместимости, и проверка перед выполнением кода спасает от ошибок вызова новых методов платформы в старом режиме.

Способ 3. Программный интерфейс БСП

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

ВерсияИБ = ОбновлениеИнформационнойБазы.ВерсияИБ(Метаданные.Имя);

Эта функция возвращает версию, зафиксированную при последнем обновлении информационной базы, а не просто значение из метаданных. Разница существенна: если обновление конфигурации прошло с ошибкой или не было завершено, версия в метаданных и версия ИБ разойдутся — и это прямой признак проблемы, требующей запуска обновления вручную.

Для определения того, что конфигурация вообще содержит БСП, проверьте наличие общего модуля через Метаданные.ОбщиеМодули.Найти("ОбновлениеИнформационнойБазы"). Если модуль не найден, откатитесь на способ через Метаданные.Версия — так ваша обработка останется универсальной.

Как определить конфигурацию внешней обработкой без изменения базы

Частый сценарий: нужна внешняя обработка, которая при открытии показывает, в какой конфигурации и версии она запущена, и решает, какую ветку логики выполнять. Порядок действий такой.

Порядок действий
  1. 1
    Создайте общий серверный модуль обработки или серверную процедуру формы
  2. 2
    Получите Метаданные.Имя и Метаданные.Версия в структуру
  3. 3
    Передайте структуру в клиентский контекст формы
  4. 4
    Сравните имя с эталонным списком поддерживаемых конфигураций
  5. 5
    При несовпадении выведите пользователю понятное сообщение и прервите работу
Функция ЭтоПоддерживаемаяКонфигурация() Экспорт

Поддерживаемые = Новый Массив;

Поддерживаемые.Добавить("УправлениеТорговлей");

Поддерживаемые.Добавить("БухгалтерияПредприятия");

Возврат Поддерживаемые.Найти(Метаданные.Имя) <> Неопределено;

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

Сравнивайте именно по свойству Имя, а не по синониму: синоним может меняться между релизами и локализациями, а имя стабильно. Для проверки версии используйте разбиение строки по точкам и поэлементное сравнение чисел — строковое сравнение версий («11.5.10» против «11.5.9») даёт неверный результат, так как «10» строкой меньше «9».

Проверка результата и типичные ошибки

После внедрения кода проверьте результат на реальной базе: откройте «О программе» в конфигураторе или предприятии и сравните с тем, что вернул код. Совпадение имени и версии — признак корректной работы.

Контрольные точки

Как проверить результат

Имя конфигурации из кода
Норма

Совпадает с именем в дереве конфигуратора

Тревожный признак

Пустая строка или имя расширения вместо основной конфигурации

Версия конфигурации
Норма

Совпадает со значением в окне «О программе»

Тревожный признак

Версия из метаданных новее версии ИБ — обновление не завершено

Версия платформы
Норма

Формат вида 8.3.x.x

Тревожный признак

Получена версия клиента вместо серверной при разных релизах

Типичные ошибки
01
Сравнение версий как строк — «11.5.10» оказывается меньше «11.5.9», нужно сравнивать по числовым частям
02
Использование Синонима для идентификации — синоним меняется между релизами и языками, сравнивайте Метаданные.Имя
03
Вызов Метаданные на тонком клиенте — объект недоступен, код падает; выносите логику на сервер
04
Игнорирование расхождения версии метаданных и версии ИБ в БСП — пропускаете незавершённое обновление

Отдельный риск связан с расширениями конфигурации. Если код выполняется в расширении, Метаданные.Имя всё равно вернёт имя основной конфигурации, а не расширения — но если ваша логика зависит от состава метаданных, помните, что расширение может добавлять объекты. Для получения сведений о самих расширениях используйте менеджер РасширенияКонфигурации.Получить().

FAQ

Как узнать конфигурацию 1С программно на тонком клиенте?

Объект Метаданные в полном объёме недоступен на тонком клиенте. Вынесите получение Имя, Синоним и Версия в серверную функцию общего модуля, верните результат структурой и используйте её в клиентском коде. Системную информацию ПолучитьСистемнуюИнформацию() можно вызывать и на клиенте, но она покажет данные клиентского приложения.

Чем отличается Метаданные.Имя от Метаданные.Синоним?

Имя — внутренний идентификатор конфигурации без пробелов, стабильный между релизами, например «БухгалтерияПредприятия». Синоним — представление для пользователя, может содержать пробелы и меняться при локализации. Для программной идентификации используйте только Имя.

Как сравнить две версии конфигурации в коде?

Разбейте строки версий по точке в массивы, преобразуйте каждый элемент в число и сравнивайте поэлементно слева направо. Прямое строковое сравнение не подходит: «11.5.10» как строка меньше «11.5.9», хотя по смыслу версия новее.

Можно ли узнать конфигурацию базы без входа в неё?

Частично. Через COM-коннектор (V83.COMConnector) можно подключиться к базе извне и выполнить тот же код с Метаданные.Имя. Из файловой базы без подключения конфигурацию определить нельзя — файл 1Cv8.1CD имеет закрытый формат, и штатных средств чтения без запуска платформы нет.

Почему версия из метаданных не совпадает с версией ИБ в БСП?

Это признак незавершённого обновления: конфигурация базы обновлена, но обработчики обновления данных не выполнены до конца. Запустите базу в режиме предприятия под пользователем с полными правами и дождитесь завершения обновления, либо выполните обновление принудительно.

Как программно получить список установленных расширений конфигурации?

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

Итог

Что важно запомнить

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