Как исправить ошибку «Значение не является значением объектного типа (Регистратор)» при обновлении УПП до версии 1.3.173.2?

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

При обновлении конфигурации «Управление производственным предприятием» (УПП) до версии 1.3.173.2 многие технические специалисты столкнулись с критической остановкой процесса обновления информационной базы. Ошибка прерывает выполнение обработчиков обновления, что делает невозможным дальнейшую работу пользователей в системе. Проблема локализована в модуле менеджера регистра сведений ПараметрыАмортизацииОСБухгалтерскийУчет.

В этой статье мы подробно разберем, почему возникает эта ошибка, как продиагностировать состояние вашей базы данных и какие существуют способы решения — от простого обновления релиза до ручной очистки «битых» ссылок.

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

Проанализируем текст ошибки. Система сообщает: {РегистрСведений.ПараметрыАмортизацииОСБухгалтерскийУчет.МодульМенеджера(95)}: Значение не является значением объектного типа (Регистратор). Это классическая ситуация для платформы 1С, когда программный код пытается обратиться к свойству переменной, которая на самом деле является пустой (Неопределено, Null) или содержит ссылку на несуществующий объект («Объект не найден»).

В релизе 1.3.173.2 разработчики внесли изменения в механизмы учета основных средств для соответствия стандарту ФСБУ 6/2020. В процессе обновления запускается процедура, которая пересчитывает данные в регистре ПараметрыАмортизацииОСБухгалтерскийУчет. В коде модуля менеджера этого регистра происходит перебор записей, и в строке 95 (или около того) программа пытается получить данные через поле Регистратор (например, Выборка.Регистратор.Организация или Выборка.Регистратор.Дата).

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

Способ 1: Самый правильный и быстрый (Обновление релиза)

Как показывает практика и обсуждения на форумах, фирма «1С» оперативно выпустила исправление. Ошибка была признана недоработкой программного кода, который не содержал проверки на заполненность регистратора.

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

  1. Прекратите попытки обновиться до версии 1.3.173.2.
  2. Скачайте дистрибутив обновления до версии 1.3.174.1 или выше.
  3. Выполните обновление конфигурации. В этой версии разработчики добавили необходимые проверки в код обработчиков, и обновление информационной базы (принятие изменений в режиме «1С:Предприятие») проходит без ошибок даже при наличии некорректных данных в регистре.

Способ 2: Поиск и устранение «битых» ссылок (Диагностика данных)

Если по какой-то причине вам жизненно необходимо остаться на релизе 1.3.173.2, нам придется привести данные регистра в порядок. Посмотрим, как найти проблемные записи с помощью запроса.

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

Проанализируем пример запроса для поиска таких записей:


ВЫБРАТЬ
    ПараметрыАмортизации.ОС,
    ПараметрыАмортизации.Регистратор,
    ПараметрыАмортизации.Организация
ИЗ
    РегистрСведений.ПараметрыАмортизацииОСБухгалтерскийУчет КАК ПараметрыАмортизации
ГДЕ
    (ПараметрыАмортизации.Регистратор ЕСТЬ NULL
    ИЛИ ПараметрыАмортизации.Регистратор.Номер ЕСТЬ NULL)

В этом запросе условие Регистратор.Номер ЕСТЬ NULL позволяет выявить именно те случаи, когда ссылка в поле регистратор есть, но самого объекта (документа) в базе уже не существует (ситуация «Объект не найден»).

Что делать с найденными записями? Их необходимо удалить или исправить. Если это исторические записи 10-летней давности, которые остались после некорректных чисток базы, их удаление обычно не влияет на текущий учет. Однако перед удалением обязательно создайте резервную копию базы данных.

Способ 3: Тестирование и исправление в Конфигураторе

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

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

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

Способ 4: Ручная корректировка программного кода

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

Нам необходимо временно изменить логику модуля менеджера регистра. Найдем проблемный участок кода, указанный в сообщении об ошибке (строка 95 модуля менеджера регистра ПараметрыАмортизацииОСБухгалтерскийУчет). Посмотрим, как можно модифицировать код, добавив проверку на заполненность регистратора.

Пример изменения кода (условно):


// Было:
ОрганизацияЗаписи = Выборка.Регистратор.Организация;

// Стало:
Если ЗначениеЗаполнено(Выборка.Регистратор) И Выборка.Регистратор.Ссылка <> Неопределено Тогда
    ОрганизацияЗаписи = Выборка.Регистратор.Организация;
Иначе
    // Либо пропускаем запись, либо берем организацию из другого поля, если оно доступно
    Продолжить; 
КонецЕсли;

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

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

Ситуация с ошибкой в УПП 1.3.173.2 — это наглядный пример того, как исторические данные и «мусор» в базе могут конфликтовать с новыми алгоритмами учета. Мы выяснили, что:

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

← На главную