Разработка и Конфигурация · 10 мин
Как программно узнать версию конфигурации в 1С
Как программно получить версию конфигурации в 1С через Метаданные.Версия, БСП и обновление. Примеры кода, типичные ошибки и ответы на вопросы.
Версия конфигурации нужна разработчику и администратору в самых разных ситуациях: при выводе информации «О программе», при логировании ошибок, при проверке совместимости расширений и внешних обработок, при обмене данными между базами. Встроенный язык 1С позволяет получить её несколькими способами — от одного обращения к метаданным до штатных функций Библиотеки стандартных подсистем.
Выбор способа зависит от контекста: работаете ли вы в типовой конфигурации на БСП, в самописной базе, на клиенте или на сервере, нужна ли версия основной конфигурации или конфигурации базы данных. Ниже разобраны все рабочие варианты с примерами кода и ограничениями.
Получение версии через объект Метаданные
Самый прямой способ — обратиться к свойству Версия корневого объекта метаданных. Это значение задаётся в конфигураторе в свойствах конфигурации (поле «Версия») и доступно встроенному языку без дополнительных вызовов:
ВерсияКонфигурации = Метаданные.Версия;
Сообщить("Текущая версия: " + ВерсияКонфигурации);
Свойство возвращает строку в том виде, в каком её заполнил разработчик, например «3.1.27.86». Если поле версии в конфигураторе не заполнено, результатом будет пустая строка — это важно учитывать в самописных решениях, где версию часто забывают проставлять.
Код работает и на тонком, и на толстом, и на веб-клиенте, и на сервере, поскольку метаданные доступны в любом контексте исполнения. Дополнительных прав у пользователя не требуется: чтение свойств метаданных не защищено ролями.
Функция ВерсияКонфигурации() Экспорт
Возврат Метаданные.Версия;
КонецФункцииВерсия конфигурации базы данных и рабочей конфигурации
В файловых и клиент-серверных базах существует различие между конфигурацией разработчика и конфигурацией базы данных. Если обновление конфигурации БД не выполнено, версии могут отличаться. Свойство Метаданные.Версия отражает ту конфигурацию, под которой запущен сеанс, — то есть конфигурацию базы данных.
Программно сравнить версии напрямую через метаданные нельзя, но косвенно расхождение проверяется методом КонфигурацияИзменена() и КонфигурацияБазыДанныхИзмененаДинамически(). Если структура БД не обновлена после загрузки новой конфигурации, пользовательские сеансы продолжают работать со старой версией — это частая причина «странных» ошибок после обновления.
Получение версии в типовых конфигурациях через БСП
В конфигурациях на Библиотеке стандартных подсистем версия хранится не только в метаданных, но и в специальном параметре информационной базы. Это нужно механизму обновления: при первом запуске после обновления БСП сравнивает сохранённую версию с текущей и запускает отложенные обработчики.
Получить сохранённую версию можно так:
ВерсияИБ = ОбновлениеИнформационнойБазы.ВерсияИБ(Метаданные.Имя);
Здесь Метаданные.Имя — имя конфигурации (например, «БухгалтерияПредприятия»). Функция вернёт версию, зафиксированную при последнем успешном обновлении. Если обновление завершилось с ошибками или отложенные обработчики ещё выполняются, сохранённая версия может отличаться от Метаданные.Версия — это признак незавершённого перехода.
Для вывода пользователю в БСП есть и готовые механизмы: форма «О программе» и общий модуль СтандартныеПодсистемыСервер, где версия собирается вместе с версией платформы и библиотеки.
Сравнение способов получения версии
Универсально, работает в любой конфигурации и любом контексте. Ограничение: возвращает пустую строку, если версия не заполнена разработчиком.
Только для конфигураций на БСП. Показывает версию, до которой фактически обновлены данные, что важно для контроля обновления.
Подходит для самописных решений, где версию дублируют в хранилище. Недостаток: значение нужно поддерживать вручную.
Версия платформы и сборка полного отчёта о системе
Часто вместе с версией конфигурации нужна версия технологической платформы — например, при регистрации ошибки или проверке совместимости. Для этого используется объект СистемнаяИнформация:
СисИнфо = Новый СистемнаяИнформация;
ТекстОтчета = "Конфигурация: " + Метаданные.Имя + " " + Метаданные.Версия + Символы.ПС
+ "Платформа: " + СисИнфо.ВерсияПриложения + Символы.ПС
+ "Режим: " + ?(СисИнфо.ТипПлатформы = ТипПлатформы.Windows_x86_64, "64-бит", "32-бит");
Такой блок удобно вставлять в протокол обмена, письмо в поддержку или журнал регистрации. Обратите внимание: конструктор Новый СистемнаяИнформация возвращает данные того узла, где исполняется код. На сервере это будет версия серверной платформы, которая может отличаться от клиентской.
- 1Получите версию конфигурации: Метаданные.Версия.
- 2Получите версию платформы через Новый СистемнаяИнформация.
- 3В типовой базе сравните результат с ОбновлениеИнформационнойБазы.ВерсияИБ(Метаданные.Имя).
- 4Сверьте значения с ожидаемым релизом из файла поставки или портала 1С:Обновление программ.
- 5При расхождении проверьте, завершено ли обновление конфигурации базы данных и отложенные обработчики.
Проверка версии из внешних обработок и расширений
Внешней обработке или расширению часто нужно убедиться, что оно запущено в подходящей версии конфигурации. Типовой приём — сравнение версий по частям, потому что строковое сравнение «3.1.10.5» и «3.1.9.12» даёт неверный результат: лексикографически «10» меньше «9».
Правильный подход — разбить строку версии на числовые компоненты и сравнивать их последовательно. В БСП для этого есть функция ОбщегоНазначенияКлиентСервер.СравнитьВерсии(Версия1, Версия2), возвращающая -1, 0 или 1:
Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(Метаданные.Версия, "3.1.20.0") < 0 Тогда
ВызватьИсключение "Обработка требует версию конфигурации не ниже 3.1.20.0";
КонецЕсли;
В расширениях дополнительно доступны собственные метаданные расширения: Метаданные внутри расширения относится к основной конфигурации, а данные самого расширения получают через ПолучитьРасширенияКонфигурации() (в английском синтаксисе — GetConfigurationExtensions()) с фильтром по имени. У объекта расширения есть свойство Версия.
Где ещё хранится версия и как проверить результат
Помимо метаданных и БСП, версия фигурирует в нескольких местах, полезных для перекрёстной проверки. В конфигураторе она видна в свойствах корня дерева конфигурации. В режиме предприятия типовые решения показывают её в разделе «Администрирование — Обслуживание — Результаты обновления» и в окне «О программе». В файле поставки (1Cv8.cfu) и манифесте обновления версия указана в явном виде.
При автоматизации обновлений через пакетный режим конфигуратора версию выгруженной конфигурации можно извлечь из выгрузки XML или из файла конфигурации сторонними средствами, но встроенный язык такой возможности не предоставляет — только для текущей базы.
Как проверить результат
Значения совпадают
Различаются — возможно, конфигурация БД не обновлена
Версии равны, отложенные обработчики завершены
ВерсияИБ ниже — обновление данных не завершено
Строка вида X.Y.Z.W
Пустая строка — версия не задана в свойствах конфигурации
Ограничения и безопасная работа
Чтение версии — безопасная операция, не требующая прав и не меняющая данные. Осторожность нужна в смежных действиях: не пытайтесь «поправить» версию в параметрах БСП вручную, чтобы пропустить обработчики обновления, — это приведёт к несогласованности данных и ошибкам в учёте.
Если код определения версии выполняется в привилегированном модуле или на сервере, помните о контексте: внешнее соединение, COM и фоновые задания видят ту же конфигурацию базы данных, но не имеют клиентских системных данных.
Что важно запомнить
Версия конфигурации читается через Метаданные.Версия в любом контексте. В типовых решениях фактическую версию обновлённых данных показывает ОбновлениеИнформационнойБазы.ВерсияИБ(). Версии сравнивайте по числовым компонентам, а версию платформы получайте через объект СистемнаяИнформация.
Частые вопросы
Почему Метаданные.Версия возвращает пустую строку?
Поле «Версия» в свойствах конфигурации не заполнено разработчиком. Откройте конфигуратор, вызовите свойства корня дерева конфигурации и задайте версию, после чего обновите конфигурацию базы данных.
Как узнать версию конфигурации без входа в базу?
Штатными средствами встроенного языка — никак, требуется сеанс. Альтернативы: посмотреть версию в файле поставки, в выгрузке конфигурации в файлы XML или в журнале обновлений, если он ведётся.
Чем отличается версия конфигурации от версии платформы?
Версия конфигурации — это номер релиза прикладного решения (например, «3.0.145.20»), а версия платформы — номер технологической платформы 1С:Предприятие (например, «8.3.22.1750»). Они обновляются независимо и получаются разными способами.
Можно ли получить версию расширения конфигурации?
Да. Метод ПолучитьРасширенияКонфигурации() возвращает массив расширений, у каждого есть свойства Имя и Версия. Отфильтруйте по имени нужного расширения и прочитайте его версию.
Почему после обновления код показывает старую версию?
Скорее всего, выполнено обновление конфигурации разработчика, но не конфигурации базы данных, либо сеанс запущен до обновления. Завершите обновление конфигурации БД в конфигураторе, перезапустите сеанс и проверьте завершение отложенных обработчиков.
Как сравнить две версии программно?
Используйте функцию БСП ОбщегоНазначенияКлиентСервер.СравнитьВерсии() или разбейте строки по точкам и сравнивайте компоненты как числа. Прямое строковое сравнение даёт ошибки на номерах с разным количеством цифр.