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

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

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

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

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

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

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

Базовый способ: свойство Метаданные.Версия

Объект Метаданные доступен в любом контексте встроенного языка — на сервере, на клиенте, в толстом и тонком клиенте. Свойство Версия содержит строку, заданную в свойствах конфигурации в конфигураторе (палитра свойств корневого узла, поле «Версия»). В типовых конфигурациях это значение вида «3.1.27.94», но формат платформой не контролируется — там может быть любая строка.

Минимальный пример получения версии:

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

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

bsl
ВерсияКонфигурации = Метаданные.Версия;
Сообщить("Текущая версия: " + ВерсияКонфигурации);

Если поле «Версия» в конфигураторе не заполнено, свойство вернёт пустую строку. Поэтому при использовании значения в логике (например, при сравнении версий) стоит предусмотреть проверку на пустое значение, иначе сравнение строк даст неочевидный результат.

Значение доступно только для чтения. Присвоить Метаданные.Версия новое значение из кода нельзя — версия меняется только через конфигуратор при обновлении конфигурации базы данных.

Вывод версии в интерфейсе пользователю

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

&НаСервере

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

Элементы.НадписьВерсия.Заголовок = "Версия: " + Метаданные.Версия;

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

Если нужно показать версию вместе с именем конфигурации, используйте также свойства Метаданные.Синоним и Метаданные.Имя. Синоним — это представление конфигурации на языке пользователя, например «Управление торговлей», а Имя — внутренний идентификатор, например «УправлениеТорговлей».

Для клиент-серверного приложения учитывайте контекст: чтение свойств метаданных не вызывает обращения к данным, поэтому Метаданные.Версия можно вызывать и на клиенте без серверного вызова. Это быстрая операция, оптимизировать её кэшированием обычно не требуется.

Запись версии в журнал регистрации и логи

При диагностике ошибок полезно фиксировать, на какой версии конфигурации произошло событие. Стандартный способ — запись в журнал регистрации через ЗаписьЖурналаРегистрации:

ЗаписьЖурналаРегистрации(

"Обмен данными.Завершение",

УровеньЖурналаРегистрации.Информация,

,

,

"Обмен выполнен на версии конфигурации " + Метаданные.Версия);

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

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

Получение версии платформы и расширения

Версию платформы (технологической платформы 1С:Предприятие) получают через объект СистемнаяИнформация:

СисИнфо = Новый СистемнаяИнформация;

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

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

Версия расширения конфигурации читается иначе. Сначала получают массив подключённых расширений, затем у нужного расширения читают свойство Версия из его данных:

Расширения = РасширенияКонфигурации.Получить();

Для Каждого Расширение Из Расширения Цикл

ДанныеРасширения = Расширение.ПолучитьДанные();

Сообщить(Расширение.Имя + ": " + Расширение.Версия);

КонецЦикла;

Что именно получаем

Метаданные.Версия

Версия основной конфигурации. Работает везде, только чтение, возвращает строку из свойств конфигурации.

СистемнаяИнформация.ВерсияПриложения

Версия технологической платформы, например 8.3.22.xxxx. Нужна при проверке требований к платформе.

РасширениеКонфигурации.Версия

Версия конкретного расширения. Требуется перебор коллекции расширений и поиск по имени.

Проверка совместимости версий при обновлении

Практическая задача — сравнить текущую версию с требуемой, например перед запуском обработчика обновления или при загрузке данных, рассчитанных на определённый релиз. Так как версия — это строка, прямое сравнение «3.1.10» > «3.1.9» даст неверный результат: строки сравниваются посимвольно, и «10» окажется «меньше» «9».

Корректный подход — разбить строку на числовые компоненты и сравнивать по разрядам:

Функция ВерсияНеНиже(ТекущаяВерсия, ТребуемаяВерсия)

Текущая = СтрРазделить(ТекущаяВерсия, ".");

Требуемая = СтрРазделить(ТребуемаяВерсия, ".");

Для Индекс = 0 По Требуемая.ВГраница() Цикл

Если Индекс > Текущая.ВГраница() Тогда

Возврат Ложь;

КонецЕсли;

Если Число(Текущая[Индекс]) <> Число(Требуемая[Индекс]) Тогда

Возврат Число(Текущая[Индекс]) > Число(Требуемая[Индекс]);

КонецЕсли;

КонецЦикла;

Возврат Истина;

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

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

Типичные ошибки
01
Сравнение версий как строк: условие "3.1.10" > "3.1.9" возвращает Ложь из-за посимвольного сравнения. Нужно разбивать версию на числа.
02
Отсутствие проверки на пустую версию: если поле не заполнено в конфигураторе, логика сравнения ведёт себя непредсказуемо.
03
Путаница между версией конфигурации и версией платформы: в лог пишется не то значение, и диагностика по логу вводит в заблуждение.

Частые ошибки и ограничения

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

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

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

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

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

Вывод версии в сообщении
Норма

Строка совпадает со значением поля «Версия» в конфигураторе

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

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

Сравнение версий
Норма

3.1.10 корректно определяется как более новая, чем 3.1.9

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

Результат сравнения противоречит ожиданию — признак строкового сравнения

Версия расширения
Норма

Возвращается версия именно нужного расширения из коллекции

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

Возвращается версия основной конфигурации вместо расширения

FAQ

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

Нет. Свойство Метаданные.Версия доступно только для чтения. Версия задаётся в конфигураторе в свойствах конфигурации и применяется при обновлении конфигурации базы данных. Программного способа её изменить из встроенного языка не существует.

Почему Метаданные.Версия возвращает пустую строку?

Поле «Версия» в свойствах конфигурации не заполнено. Откройте конфигуратор, вызовите палитру свойств корневого узла конфигурации и задайте значение, после чего обновите конфигурацию базы данных. В типовых конфигурациях поле заполняется поставщиком автоматически.

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

В пользовательском режиме версия обычно отображается в разделе «О программе» (в типовых конфигурациях). В конфигураторе — в свойствах корневого узла конфигурации. Также версию можно увидеть через пункт меню «Справка — О программе».

Работает ли Метаданные.Версия на тонком клиенте и в веб-клиенте?

Да. Объект Метаданные доступен во всех клиентах, включая тонкий и веб-клиент. Чтение свойства не требует вызова сервера и не зависит от режима работы приложения.

Как получить версию конфигурации поставщика, если конфигурация на поддержке?

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

Чем отличается версия конфигурации от версии в расширении?

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

Итог

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

Версия конфигурации читается одной строкой — Метаданные.Версия, доступна в любом клиенте и только для чтения. Для сравнения версий разбивайте строку на числовые разряды, для платформы используйте СистемнаяИнформация, для расширений — коллекцию РасширенияКонфигурации.