Разработка и Конфигурация · 10 мин
Как узнать конфигурацию 1С программно
Как программно определить конфигурацию 1С: объект Метаданные, системная информация, БСП, запрос к константам. Примеры кода, проверка результата и типичные ошибки.
Задача определить конфигурацию 1С программно возникает в нескольких типовых ситуациях: при написании универсальных обработок, которые должны работать в разных базах, при сборе технической информации для поддержки, при проверке совместимости расширения с конкретной версией конфигурации. Во всех этих случаях ручной просмотр сведений через «О программе» не подходит — нужен код, который вернёт имя, версию и другие параметры конфигурации автоматически.
В платформе «1С:Предприятие» есть несколько механизмов для этого: объект Метаданные, функция получения системной информации, а в конфигурациях на базе Библиотеки стандартных подсистем — готовые программные интерфейсы. Каждый способ имеет свои ограничения: часть методов недоступна на клиенте, часть требует определённых прав, а имя конфигурации и её синоним — не одно и то же.
Ниже разобраны рабочие способы с примерами кода, условия их применения, способы проверить результат и типичные ошибки, из-за которых код возвращает пустую строку или падает с исключением.
Что именно можно узнать о конфигурации программно
Прежде чем писать код, определите, какие сведения нужны. «Узнать конфигурацию» может означать разное: имя конфигурации в метаданных (например, УправлениеТорговлей), её представление для пользователя (Управление торговлей), номер версии (11.5.7.234), поставщика, режим совместимости или версию платформы, на которой работает база.
Эти данные хранятся в разных местах. Имя, синоним, версия и поставщик — свойства корня дерева метаданных. Версия платформы и разрядность — часть системной информации. Режим совместимости — отдельное свойство метаданных. Не путайте версию конфигурации с версией платформы: это независимые номера, и для диагностики обычно нужны оба.
Способ 1. Объект Метаданные — универсальный метод
Самый надёжный способ, который работает в любой конфигурации без зависимостей от библиотек, — обращение к свойствам корневого объекта метаданных. Код выполняется на сервере или в толстом клиенте:
ИмяКонфигурации = Метаданные.Имя; // "УправлениеТорговлей"
СинонимКонфигурации = Метаданные.Синоним; // "Управление торговлей"
ВерсияКонфигурации = Метаданные.Версия; // "11.5.7.234"
Поставщик = Метаданные.Поставщик; // "Фирма \"1С\""
РежимСовместимости = Метаданные.РежимСовместимости;
Несколько важных нюансов. Свойство Имя возвращает внутреннее имя без пробелов — именно его используют для программной идентификации конфигурации. Синоним предназначен для показа пользователю и может отличаться локализацией. Свойство Поставщик может быть пустым, если разработчик его не заполнил, — не используйте его как обязательный признак.
На тонком клиенте объект Метаданные недоступен в полном объёме, поэтому код лучше выносить в серверную процедуру общего модуля с установленным флагом «Сервер». Если обработка должна работать и на клиенте, получите значения на сервере один раз и передайте в клиентский контекст через структуру.
Функция ПолучитьСведенияОКонфигурации() Экспорт
Результат = Новый Структура;
Результат.Вставить("Имя", Метаданные.Имя);
Результат.Вставить("Синоним", Метаданные.Синоним);
Результат.Вставить("Версия", Метаданные.Версия);
Результат.Вставить("Поставщик", Метаданные.Поставщик);
Возврат Результат;
КонецФункцииСпособ 2. Версия платформы и системная информация
Если под «конфигурацией» в задаче понимается вся среда — включая версию платформы, тип и разрядность клиента, — используйте функцию ПолучитьСистемнуюИнформацию(). Она возвращает объект СистемнаяИнформация с заполненными свойствами:
СисИнфо = ПолучитьСистемнуюИнформацию();
ВерсияПлатформы = СисИнфо.ВерсияПриложения; // "8.3.22.1750"
ТипПлатформы = СисИнфо.ТипПлатформы; // Windows_x86_64 и т.п.
ВерсияОС = СисИнфо.ВерсияОС;
Эта функция доступна и на клиенте, и на сервере, но возвращает информацию о том контексте, где выполнена. Учтите: версия платформы клиента и сервера могут различаться, если на машинах установлены разные релизы — при диагностике собирайте оба значения. Для получения серверной версии выполните вызов в серверном контексте.
Дополнительно полезна функция ТекущийРежимЗапуска() и свойство Метаданные.РежимСовместимости: расширения и внешние обработки часто зависят от режима совместимости, и проверка перед выполнением кода спасает от ошибок вызова новых методов платформы в старом режиме.
Способ 3. Программный интерфейс БСП
В типовых конфигурациях на базе Библиотеки стандартных подсистем есть готовые функции, которые возвращают версию конфигурации в нормализованном виде. Основная точка входа — общий модуль ОбновлениеИнформационнойБазы:
ВерсияИБ = ОбновлениеИнформационнойБазы.ВерсияИБ(Метаданные.Имя);
Эта функция возвращает версию, зафиксированную при последнем обновлении информационной базы, а не просто значение из метаданных. Разница существенна: если обновление конфигурации прошло с ошибкой или не было завершено, версия в метаданных и версия ИБ разойдутся — и это прямой признак проблемы, требующей запуска обновления вручную.
Для определения того, что конфигурация вообще содержит БСП, проверьте наличие общего модуля через Метаданные.ОбщиеМодули.Найти("ОбновлениеИнформационнойБазы"). Если модуль не найден, откатитесь на способ через Метаданные.Версия — так ваша обработка останется универсальной.
Как определить конфигурацию внешней обработкой без изменения базы
Частый сценарий: нужна внешняя обработка, которая при открытии показывает, в какой конфигурации и версии она запущена, и решает, какую ветку логики выполнять. Порядок действий такой.
- 1Создайте общий серверный модуль обработки или серверную процедуру формы
- 2Получите Метаданные.Имя и Метаданные.Версия в структуру
- 3Передайте структуру в клиентский контекст формы
- 4Сравните имя с эталонным списком поддерживаемых конфигураций
- 5При несовпадении выведите пользователю понятное сообщение и прервите работу
Функция ЭтоПоддерживаемаяКонфигурация() Экспорт
Поддерживаемые = Новый Массив;
Поддерживаемые.Добавить("УправлениеТорговлей");
Поддерживаемые.Добавить("БухгалтерияПредприятия");
Возврат Поддерживаемые.Найти(Метаданные.Имя) <> Неопределено;
КонецФункции
Сравнивайте именно по свойству Имя, а не по синониму: синоним может меняться между релизами и локализациями, а имя стабильно. Для проверки версии используйте разбиение строки по точкам и поэлементное сравнение чисел — строковое сравнение версий («11.5.10» против «11.5.9») даёт неверный результат, так как «10» строкой меньше «9».
Проверка результата и типичные ошибки
После внедрения кода проверьте результат на реальной базе: откройте «О программе» в конфигураторе или предприятии и сравните с тем, что вернул код. Совпадение имени и версии — признак корректной работы.
Как проверить результат
Совпадает с именем в дереве конфигуратора
Пустая строка или имя расширения вместо основной конфигурации
Совпадает со значением в окне «О программе»
Версия из метаданных новее версии ИБ — обновление не завершено
Формат вида 8.3.x.x
Получена версия клиента вместо серверной при разных релизах
Отдельный риск связан с расширениями конфигурации. Если код выполняется в расширении, Метаданные.Имя всё равно вернёт имя основной конфигурации, а не расширения — но если ваша логика зависит от состава метаданных, помните, что расширение может добавлять объекты. Для получения сведений о самих расширениях используйте менеджер РасширенияКонфигурации.Получить().
FAQ
Как узнать конфигурацию 1С программно на тонком клиенте?
Объект Метаданные в полном объёме недоступен на тонком клиенте. Вынесите получение Имя, Синоним и Версия в серверную функцию общего модуля, верните результат структурой и используйте её в клиентском коде. Системную информацию ПолучитьСистемнуюИнформацию() можно вызывать и на клиенте, но она покажет данные клиентского приложения.
Чем отличается Метаданные.Имя от Метаданные.Синоним?
Имя — внутренний идентификатор конфигурации без пробелов, стабильный между релизами, например «БухгалтерияПредприятия». Синоним — представление для пользователя, может содержать пробелы и меняться при локализации. Для программной идентификации используйте только Имя.
Как сравнить две версии конфигурации в коде?
Разбейте строки версий по точке в массивы, преобразуйте каждый элемент в число и сравнивайте поэлементно слева направо. Прямое строковое сравнение не подходит: «11.5.10» как строка меньше «11.5.9», хотя по смыслу версия новее.
Можно ли узнать конфигурацию базы без входа в неё?
Частично. Через COM-коннектор (V83.COMConnector) можно подключиться к базе извне и выполнить тот же код с Метаданные.Имя. Из файловой базы без подключения конфигурацию определить нельзя — файл 1Cv8.1CD имеет закрытый формат, и штатных средств чтения без запуска платформы нет.
Почему версия из метаданных не совпадает с версией ИБ в БСП?
Это признак незавершённого обновления: конфигурация базы обновлена, но обработчики обновления данных не выполнены до конца. Запустите базу в режиме предприятия под пользователем с полными правами и дождитесь завершения обновления, либо выполните обновление принудительно.
Как программно получить список установленных расширений конфигурации?
Используйте РасширенияКонфигурации.Получить() — метод возвращает массив объектов с именем, версией, синонимом и признаком активности каждого расширения. Метод доступен на сервере, для его вызова могут потребоваться административные права.
Что важно запомнить
Базовый способ узнать конфигурацию программно — свойства Метаданные.Имя, Метаданные.Синоним и Метаданные.Версия на сервере. Версию платформы получайте через ПолучитьСистемнуюИнформацию(), в конфигурациях на БСП сверяйте версию метаданных с версией ИБ. Идентифицируйте конфигурацию по имени, а версии сравнивайте по числовым частям.