Как исправить ошибку СтрокаВерсии2 при переходе на типовую конфигурацию 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При выполнении процедуры возврата конфигурации на типовую поддержку или при попытке "силового" обновления (загрузки .cf файла) часто возникает неприятная ситуация. Процесс загрузки проходит успешно, но на этапе обновления информационной базы в режиме «Предприятие» система выдает ошибку, в тексте которой фигурирует переменная СтрокаВерсии2. Чаще всего это сопровождается системным сообщением: «Значение не является значением объектного типа» или «Преобразование значения к типу Число не может быть выполнено».

Рассмотрим подробно, почему это происходит, где именно в коде БСП (Библиотеки стандартных подсистем) скрывается проблема и как корректно завершить переход на типовую базу, чтобы подготовить её к работе в облаке или обычном режиме.

Выясним причину возникновения ошибки

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

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

Способ 1. Использование отладчика для локализации подсистемы

Разберем самый надежный способ найти «виновника» — подсистему, которая передает некорректное значение. Для этого нам понадобится конфигуратор.

  1. Запустим конфигуратор и перейдем в меню Отладка — Настройка параметров отладки.
  2. Установим флажок Останавливаться по ошибке.
  3. Запустим систему в режиме «Предприятие». При возникновении ошибки выполнение кода прервется.

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


Функция СравнитьВерсии(Знач СтрокаВерсии1, Знач СтрокаВерсии2) Экспорт
    // Здесь система пытается разбить строку по точкам и сравнить части
КонецФункции

В момент остановки наведем курсор на переменную СтрокаВерсии2. Если там Неопределено, поднимемся выше по стеку вызовов, чтобы понять, какая именно подсистема (например, «СтандартныеПодсистемы», «ЗарплатаКадры» или какая-то ваша старая доработка) вернула это пустое значение.

Способ 2. Проверка и корректировка регистров сведений

После того как мы выяснили, что система не может найти версию какой-то части программы, нам нужно «подсказать» ей текущее состояние. Данные о версиях хранятся в специальных регистрах. Разберем шаги по их проверке.

Основной регистр, который стоит проверить — Параметры работы программы. В некоторых конфигурациях он может называться Установленные обновления или Версии подсистем.

  1. Войдем в базу через «Функции для технического специалиста» (ранее «Все функции»).
  2. Найдем регистр сведений Параметры работы программы.
  3. Отфильтруем записи по полю «Имя параметра», содержащему слово «Версия».
  4. Проанализируем записи. Если для основной конфигурации или ключевых библиотек поле «Значение» пустое или содержит некорректный набор символов, это и вызывает ошибку СтрокаВерсии2.

Для исправления можно вручную вписать текущую версию конфигурации (ее можно посмотреть в окне «О программе»).

Способ 3. Принудительный запуск обновления через параметры командной строки

Иногда система «застревает» на этапе проверки и не дает запустить механизмы обновления, которые могли бы автоматически поправить регистры. Попробуем запустить процедуру регистрации обновления принудительно.

Создадим ярлык для запуска 1С или пропишем в дополнительных параметрах запуска в стартере следующую команду:

/C СтартОбновленияИнформационнойБазы

Этот параметр заставляет БСП игнорировать некоторые проверки и сразу переходить к процедурам обновления и регистрации новых версий подсистем в базе данных. В ряде случаев это позволяет автоматически заполнить пустую СтрокуВерсии2 актуальными данными из метаданных.

Способ 4. Правильная стратегия возврата на поддержку

Разберем ситуацию, когда простая загрузка .cf не помогает. Чтобы вернуть конфигурацию на полную поддержку («замок») и избежать ошибок метаданных, рекомендуется следующий алгоритм:

  1. Выполним Сравнить, объединить с конфигурацией из файла (используем типовой .cf той же версии, что и база).
  2. В открывшемся окне снимем галочку с самого верхнего элемента (свойств конфигурации), чтобы не затереть версию в метаданных на данном этапе, но обновим все объекты.
  3. После объединения и сохранения выполним Конфигурация — Загрузить конфигурацию из файла. Теперь, когда структура объектов уже соответствует типовой, загрузка «сверху» должна пройти корректно.
  4. Обязательно очистим кэш сервера и клиентский кэш после этих манипуляций.

Рекомендации по работе с кодом (если вы программист)

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


// В модуле, где происходит сравнение версий
Если СтрокаВерсии2 = Неопределено Или ПустаяСтрока(СтрокаВерсии2) Тогда
    СтрокаВерсии2 = "0.0.0.0"; // Принудительно устанавливаем минимальную версию
КонецЕсли;

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

Подведем итоги

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

← На главную