Как устранить ошибки при обновлении 1С:УПП до релизов 225.1 и 226.1?

Программист 1С v8.3 (Обычные формы) Промышленность, строительство и АПК
← На главную

При обновлении конфигурации 1С:Управление производственным предприятием (УПП) редакции 1.3 до последних релизов (225.1, 226.1 и выше) специалисты часто сталкиваются с критическими ошибками, которые не позволяют даже запустить информационную базу в режиме "Предприятие". Ситуация осложняется тем, что УПП традиционно работает в режиме совместимости 8.2.13, однако современные требования к интеграции с государственными системами (ЕГАИС, Честный Знак) заставляют разработчиков 1С внедрять код, ориентированный на возможности новых версий платформы.

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

Анализ первой проблемы: Конфликт функции СтрНачинаетсяС

При переходе на релиз 225.1 многие пользователи получают сообщение о том, что функция СтрНачинаетсяС уже имеется в платформе как встроенная. Это происходит в общем модуле ИнтеграцияЕГАИСУТКлиентСерверГлобальный. Выясним причину: встроенная функция СтрНачинаетсяС появилась в платформе 1С:Предприятие еще в версии 8.3.6. Поскольку УПП работает в режиме совместимости 8.2.13, платформа теоретически не должна "видеть" свои новые функции, чтобы не конфликтовать с кодом конфигурации.

Однако в последних сборках платформы (особенно ветки 8.3.22) механизмы компиляции глобальных модулей были изменены. Теперь даже в режиме совместимости может возникать конфликт имен, если в глобальном модуле объявлена функция, имя которой совпадает с системной. Рассмотрим два варианта решения этой ситуации.

Вариант 1. Исправление кода вручную (если нельзя обновить платформу прямо сейчас)

Проанализируем код в модуле ИнтеграцияЕГАИСУТКлиентСерверГлобальный. Чтобы устранить конфликт имен, можно заменить вызов системной функции на классические методы работы со строками. Вместо использования функции-дублера, заменим её логику в местах вызова.

Пример исправления в Справочник.ИдентификаторыОбъектовМетаданных.МодульМенеджера:


// Вместо этого кода:
// Если Не СтрНачинаетсяС(Выборка.ПолноеИмя, "? ") Тогда

// Используем стандартный метод Лев():
Если Не Лев(Выборка.ПолноеИмя, 2) = "? " Тогда
    // Ваша логика
КонецЕсли;

Вариант 2. Комментирование функции в глобальном модуле

Если вы используете платформу выше 8.3.6, функция СтрНачинаетсяС уже доступна на уровне ядра. Мы можем закомментировать определение этой функции в общем модуле ИнтеграцияЕГАИСУТКлиентСерверГлобальный, чтобы платформа использовала встроенную. Однако будьте осторожны: если режим совместимости слишком низкий, это может привести к ошибке "Процедура или функция не определена" в других модулях.

Анализ второй проблемы: Переменная не определена (ОбработкаОшибок)

При дальнейшем обновлении до релиза 226.1 возникает более серьезная проблема. В модуле менеджера регистра сведений ОперацииПроверкиКМ (и ряде других) появляется обращение к объекту ОбработкаОшибок. Проанализируем ситуацию: данный объект был введен в платформу только в версии 8.3.20. Он предназначен для получения расширенной информации о стеке ошибок и их представлении.

Если ваша информационная база запущена на платформе версии 8.3.18 или ранних сборках 8.3.19, система выдаст ошибку компиляции:

{РегистрСведений.ОперацииПроверкиКМ.МодульМенеджера(177,5)}: Переменная не определена (ОбработкаОшибок)

Это "жесткое" требование нового релиза конфигурации. Разработчики УПП начали использовать методы:

  1. ОбработкаОшибок.ПодробноеПредставлениеОшибки()
  2. ОбработкаОшибок.КраткоеПредставлениеОшибки()

Без наличия этих методов в ядре платформы работа с маркировкой и интеграционными шлюзами в новом релизе УПП становится невозможной.

Пошаговая инструкция по правильному обновлению

Чтобы избежать описанных выше проблем и успешно запустить релизы 225.x и 226.x, рекомендуем придерживаться следующего алгоритма:

Шаг 1. Обновление технологической платформы

Перед началом обновления конфигурации необходимо обновить саму платформу 1С. На текущий момент для корректной работы УПП 1.3.226.1 минимально рекомендуемой является версия 8.3.22.1704 (или актуальные билды веток 8.3.21/8.3.23). Использование платформы версии 8.3.18 и ниже более не поддерживается программным кодом конфигурации.

Шаг 2. Подготовка базы данных

Перед обновлением выполните обязательные процедуры обслуживания:

Шаг 3. Процесс обновления в Конфигураторе

Проанализируем процесс объединения. Если ваша конфигурация доработана, при сравнении и объединении с новым релизом поставщика обратите внимание на модуль ИнтеграцияЕГАИСУТКлиентСерверГлобальный. Если платформа обновлена до 8.3.22, конфликт с СтрНачинаетсяС часто пропадает сам собой, так как современные платформы лучше обрабатывают такие перекрытия в режиме совместимости.

Шаг 4. Обновление справочника Идентификаторы объектов метаданных

После успешного принятия изменений в Конфигураторе, первый запуск в режиме "Предприятие" может длиться долго. Рассмотрим причину: происходит масштабная реструктуризация таблиц, связанных с ИС МП (маркировкой) и ЕГАИС. Если процесс "зависает", не спешите снимать задачу через диспетчер. Проверьте нагрузку на дисковую подсистему сервера SQL — скорее всего, идет активная запись данных.

Почему нельзя просто поднять режим совместимости?

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

Вывод: Единственный стабильный путь — оставаться на режиме совместимости 8.2.13, но использовать актуальную версию платформы (8.3.22+), которая содержит необходимые объекты (типа ОбработкаОшибок) в своем глобальном контексте.

Резюме

Если вы столкнулись с ошибками при обновлении УПП на релизы 225-226:

  1. Проверьте версию платформы. Если она ниже 8.3.20, обновление не завершится успехом.
  2. Обновитесь до 8.3.22.1704 или выше.
  3. Если ошибка СтрНачинаетсяС сохраняется даже на новой платформе, замените использование этой функции в коде на стандартную функцию Лев().
  4. Убедитесь, что все доработки в глобальных модулях не конфликтуют с новыми системными именами платформы.
← На главную