Как исправить ошибки при обновлении 1С:УПП с версии 112.5 на 113.2 и выше

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

Обновление конфигурации «1С:Управление производственным предприятием, ред. 1.3» в период перехода на новые ставки НДС и изменения в подсистемах ЭДО/ЕГАИС стало серьезным испытанием для многих технических специалистов. Основная сложность заключается в том, что стандартные механизмы обновления информационной базы (ОИБ) на релизах ветки 113.x содержат критические недоработки в обработчиках данных. В этой статье мы подробно разберем, как преодолеть наиболее часто встречающиеся ошибки, включая проблемы со справочником присоединенных файлов и ошибки интеграции с ЕГАИС.

Анализ ошибки «Индекс находится за границами массива» в ЭДО

Первая и самая массовая проблема возникает при переходе с релиза 112.5 на 113.2. Процесс обновления прерывается сообщением: {Справочник.ПакетЭДПрисоединенныеФайлы.МодульМенеджера(57)}: Индекс находится за границами массива. Проанализируем ситуацию: эта ошибка связана с тем, что в новой версии конфигурации меняется структура хранения данных электронного документооборота. Система пытается перенести сведения из старых таблиц в новые, но при отсутствии записей в регистре сведений ПрисоединенныеФайлы для конкретного элемента справочника происходит обращение к нулевому индексу пустого массива.

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

Разберем по шагам алгоритм исправления в коде:


// В модуле менеджера справочника ПакетЭДПрисоединенныеФайлы
// Находим фрагмент кода, отвечающий за подмену ссылки
НаборЗаписей = РегистрыСведений.ПрисоединенныеФайлы.СоздатьНаборЗаписей;
НаборЗаписей.Отбор.ПрисоединенныйФайл.Установить(Выборка.Ссылка);
НаборЗаписей.Прочитать();

Если НаборЗаписей.Количество() > 0 Тогда 
    // Вместо прямого обращения НаборЗаписей[0] 
    // необходимо убедиться, что записи существуют
    НаборЗаписей.Отбор.ПрисоединенныйФайл.Установить(НовыйОбъект.Ссылка);
    
    // Удалите или закомментируйте следующую строку, если она вызывает ошибку:
    // НаборЗаписей[0].ПрисоединенныйФайл = НовыйОбъект.Ссылка; 
    
    ОбновлениеИнформационнойБазы.ЗаписатьДанные(НаборЗаписей);
    // ... дальнейшая очистка старых данных
КонецЕсли;

Важно понимать: если вы закомментируете данную строку, данные в архиве ЭДО могут отображаться некорректно. Однако это позволит завершить обновление базы. После успешного обновления рекомендуется перейти на релиз 1.3.114.2, где фирма «1С» официально признала ошибку 00-00190106 и исправила алгоритм обработки пустых записей.

Решение проблемы «мутабельного значения» в модуле ЕГАИС

Вторая распространенная проблема возникает при первом запуске предприятия после обновления. Ошибка выглядит так: {ОбщийМодуль.ОбновлениеИнформационнойБазыЕГАИС.Модуль(1057)}: Ошибка при вызове метода контекста (НайтиЗадания)... Попытка передачи мутабельного значения. Выясним причину: это происходит из-за попытки передать массив объектов, которые платформа считает изменяемыми, между сервером и клиентом в контексте Библиотеки интеграции ЕГАИС.

Рассмотрим два варианта решения этой задачи:

  1. Корректировка версии подсистемы в регистре: Это наиболее элегантный способ, не требующий изменения программного кода. Нам нужно обмануть систему, заставив ее считать, что обработчик обновления для ЕГАИС уже выполнен.
    • Откроем через «Все функции» (или «Функции для технического специалиста») регистр сведений Версии подсистем.
    • Найдем строку БиблиотекаИнтеграцииЕГАИС.
    • Изменим текущее значение версии (например, с 1.1.0.10) на более актуальное, например, 1.1.1.0.
    • После этого при запуске процедура УстановитьПризнакИспользованияОбработкиОтветов вызываться не будет.
  2. Программное отключение вызова: Если первый способ не помог, проанализируем общий модуль ОбновлениеИнформационнойБазыЕГАИС. В процедуре УстановитьПризнакИспользованияОбработкиОтветов можно временно закомментировать тело функции. Это позволит системе «проскочить» проблемный участок при первом старте.

Проблемы с производительностью и Runtime Error при сравнении конфигураций

Часто при попытке обновить УПП через конфигуратор (особенно на платформе 8.2.19.103) происходит аварийное завершение работы с ошибкой Runtime Error. Это связано с тем, что конфигурация УПП крайне тяжеловесна, а 32-битный процесс конфигуратора упирается в лимит выделяемой оперативной памяти (2 Гб).

Посмотрим, какие профилактические меры помогут нам успешно завершить процесс сравнения и объединения:

Во-первых, крайне рекомендуется выполнять обновление на 64-битной версии платформы 1С:Предприятие 8.3. Даже если ваша база работает в режиме совместимости с 8.2, использование платформы 8.3 позволяет процессу конфигуратора использовать больше памяти, что критично для УПП.

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

В-третьих, обязательно почистим кэш конфигуратора и сервера. Для этого можно использовать параметры запуска /ClearCache или вручную удалить содержимое папок в профиле пользователя %AppData%\Local\1C\1Cv8.

Особенности работы с платформой 8.2 и Windows 10

Проанализируем технические требования последних релизов УПП. Фирма «1С» указывает, что для корректной работы конфигурации требуется версия платформы не ниже 8.2.19.130. Однако при работе на операционных системах Windows 10 или Windows Server 2016/2019 использование ветки 8.2 официально не рекомендуется и может приводить к непредсказуемым «дампам» памяти.

Если руководитель откладывает переход на 8.3, постараемся аргументировать это тем, что механизмы реструктуризации таблиц (особенно в части новых объектов НДС) оптимизированы именно под платформу 8.3. На платформе 8.2 база может «вылетать» при реструктуризации, даже если справочники пусты, просто из-за объема метаданных.

Итоговые рекомендации по переходу

Рассмотрим идеальную последовательность действий для безопасного обновления:

  1. Создаем полную копию базы данных и проверяем ее на наличие «битых» ссылок через Тестирование и исправление.
  2. Если в базе активно используется ЭДО, проверяем заполненность справочника ПакетЭДПрисоединенныеФайлы. Если обновление падает, применяем патч кода в модуле менеджера, описанный выше.
  3. При возникновении ошибки ЕГАИС правим версию подсистемы в регистре Версии подсистем.
  4. Вместо релиза 113.2 стараемся сразу переходить на релиз 1.3.114.2 или 1.3.113.5 с учетом вышеуказанных правок.
  5. Выполняем первый запуск от имени пользователя с полными правами и дожидаемся окончания всех фоновых процедур обновления.

Соблюдение этих инструкций позволит вам избежать потери данных в архивах электронных документов и обеспечит стабильную работу системы после перехода на новые версии конфигурации.

← На главную