Как исправить ошибку «Значение не является значением объектного типа» в списке ведомостей БП 3.0 после переноса из ЗУП 2.5?

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

При переходе на новые версии программ или при регулярном обмене данными между старыми редакциями (например, Зарплата и Управление Персоналом 2.5) и актуальными конфигурациями (Бухгалтерия предприятия 3.0), пользователи часто сталкиваются с неприятными сюрпризами. Один из самых коварных — ошибка «Значение не является значением объектного типа», которая возникает не в момент самой загрузки, а при попытке открыть раздел с документами. Разберем детально, почему это происходит и как нам вместе решить эту задачу.

Суть проблемы и первичная диагностика

Прежде всего, проанализируем природу данной ошибки. В терминах платформы 1С:Предприятие это означает, что программный код пытается обратиться к свойству или методу через точку (например, Объект.Наименование), но в переменной Объект вместо ссылки на справочник или документ находится что-то другое: Неопределено, Null, число или пустая строка.

Рассмотрим ситуацию: данные из ЗУП 2.5 успешно выгружены и даже загружены в БП 3.0 без системных сообщений об ошибках. Однако при открытии списка ведомостей форма «падает». Это сигнализирует о том, что проблема кроется в динамическом списке или в процедурах ПриСозданииНаСервере и ПриПолученииДанныхНаСервере.

Решение 1: Очистка настроек отображения списка

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

Выполним следующие шаги для очистки настроек:

  1. Перейдем в раздел Администрирование.
  2. Выберем пункт Настройки пользователей и прав.
  3. Найдем гиперссылку Персональные настройки пользователей — Очистка настроек.
  4. В открывшемся окне выберем нужного пользователя и найдем в списке настроек форму списка ведомостей (например, Документ.ВедомостьНаВыплатуЗарплатыВБанк.ФормаСписка).
  5. Нажмем кнопку Очистить.

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

Решение 2: Устранение «битых» ссылок (Объект не найден)

Посмотрим на ситуацию со стороны данных. При обмене из ЗУП 2.5 в БП 3.0 переносятся ссылки на подразделения, сотрудников и физических лиц. Если в правилах обмена произошел сбой или какой-то объект был удален в одной базе, но остался в другой, в БП 3.0 может появиться запись вида <Объект не найден> (80:898...).

Когда динамический список пытается программно обработать такую ссылку (например, чтобы определить картинку состояния документа или вывести реквизит через точку), возникает наша ошибка. Выясним причину через Тестирование и исправление:

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

После завершения процесса попробуем снова зайти в раздел ведомостей.

Решение 3: Работа с кэшем и переподключение базы

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

Рассмотрим самый надежный способ очистки кэша — удаление базы из списка:

  1. Запомним (или скопируем) путь к информационной базе в окне запуска 1С.
  2. Удалим базу из списка (само собой, файлы базы на диске останутся нетронутыми).
  3. Нажмем кнопку Добавить и заново пропишем путь к базе, указав новое имя.

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

Решение 4: Конфликты с расширениями

В современных реалиях 1С:Бухгалтерия 3.0 редко обходится без расширений (печатные формы, интеграции с банками, доработки под специфику бизнеса). Если расширение «подцепляется» к процедурам формы списка ведомостей, оно может ожидать наличия определенных данных, которые не пришли из ЗУП 2.5.

Выполним проверку:

  1. Зайдем в Администрирование — Печатные формы, отчеты и обработки — Расширения.
  2. Временно снимем флаг Активно со всех расширений, которые могут влиять на зарплатный блок.
  3. Перезапустим программу.

Если ошибка исчезла, значит, необходимо передать расширение программисту на адаптацию под текущий релиз БП 3.0.

Решение 5: Технический анализ кода для программиста

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


// Пример проблемного участка в общем модуле
Процедура ПриВыводеДанных(ОформлениеСтроки, ДанныеСтроки)
    
    // Если ДанныеСтроки.Ссылка.СпособВыплаты = Неопределено, 
    // то следующая строка вызовет ошибку "Значение не является значением объектного типа"
    Если ДанныеСтроки.Ссылка.СпособВыплаты.ИмяПредопределенногоЗначения = "ЧерезКассу" Тогда
        // Логика обработки
    КонецЕсли;

КонецПроцедуры

Чтобы найти точное место, воспользуемся Отладчиком:

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

Чаще всего в таких случаях мы увидим, что реквизит СпособВыплаты или ВидДоходаИсполнительногоПроизводства (актуально для новых релизов) имеет значение Null, так как ЗУП 2.5 просто «не знает» о существовании таких полей и не заполняет их при выгрузке. Программисту потребуется дописать правила обмена или создать обработку, которая заполнит недостающие реквизиты в уже загруженных документах по умолчанию.

Резюме

Ошибка «Значение не является значением объектного типа» в 90% случаев при обмене данными — это сигнал о «пустоте» там, где программа ожидает «объект». Начните с очистки настроек пользователя и кэша, проверьте базу на «битые» ссылки, и если это не поможет — используйте отладчик для поиска незаполненного реквизита, который пришел из старой версии ЗУП.

← На главную