Как исправить ошибку «Получение элемента по индексу для значения не определено» при обновлении 1С:Бухгалтерии с версии 3.0.106 на 3.0.107?

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

При переходе на релиз 3.0.107.34 в конфигурации «Бухгалтерия предприятия» многие специалисты сталкиваются с критической остановкой процесса обновления. Ошибка обычно возникает на этапе выполнения обработчиков обновления (часто на отметке 11%), когда система пытается выполнить регистрацию изменений для автономной работы. Рассмотрим подробно причины возникновения этой ситуации и разберем по шагам проверенные методы её устранения.

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

Судя по стеку вызовов, предоставленному в сообщении, проблема локализована в общем модуле ОбменДаннымиСервер, в процедуре ЗаполнитьЗначенияСвойствДляТаблицыЗначений. Выясним причину: система пытается обратиться к свойству "ПравилаВыборочнойРегистрацииОбъектов" в структуре СтруктураПравилОбмена, но этого ключа в структуре не оказывается, либо сама структура не инициализирована должным образом. Это происходит из-за конфликта старых данных в кэше правил обмена и обновленных механизмов Библиотеки стандартных подсистем (БСП), которые вошли в состав 107-го релиза.

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

Решение 1: Очистка регистра правил обмена данными

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

Рассмотрим порядок действий для очистки регистра:

  1. Откройте информационную базу в режиме «1С:Предприятие» (если обновление не дает зайти в обычном режиме, используйте запуск с параметром /AllowExecuteScheduledJobs -Force или попробуйте зайти через «Функции для технического специалиста», если окно обновления еще позволяет это сделать).
  2. Перейдите в Регистр сведений «Правила для обмена данными».
  3. Удалите все записи из этого регистра.
  4. Повторите попытку обновления.

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


НаборЗаписей = РегистрыСведений.ПравилаДляОбменаДанными.СоздатьНаборЗаписей();
НаборЗаписей.Записать();

Решение 2: Проверка узлов плана обмена «Автономная работа»

Проанализируем ситуацию с планами обмена. Иногда ошибка вызвана тем, что в системе существуют «битые» узлы автономной работы. Проделаем следующие шаги:

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

Решение 3: Временная модификация кода (через расширение или напрямую)

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

Посмотрим на пример исправления в модуле ОбменДаннымиСервер:

Необходимо найти строку 8536 (в релизе 3.0.107.34) и обернуть вызов процедуры в блок Попытка...Исключение. Это позволит пропустить шаг регистрации изменений, который не является критичным для процесса обновления метаданных.


Попытка
    ЗаполнитьЗначенияСвойствДляТаблицыЗначений(ПравилаВыборочнойРегистрацииОбъектов, СтруктураПравилОбмена["ПравилаВыборочнойРегистрацииОбъектов"]);
Исключение
    // Запись лога в Журнал регистрации, если необходимо
    ЗаписьЖурналаРегистрации("Обновление.ОшибкаРегистрации", УровеньЖурналаРегистрации.Предупреждение,,, "Пропущена регистрация правил");
КонецПопытки;

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

Решение 4: Обновление платформы и очистка серверного кэша

Выясним причину, связанную с окружением. Релиз 3.0.107 предъявляет повышенные требования к версии технологической платформы. Проверьте, чтобы ваша версия была не ниже 8.3.17.2306, 8.3.18.1741 или 8.3.19.1467.

Рассмотрим дополнительные действия по очистке кэша:

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

Дополнительные рекомендации

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

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

← На главную