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

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

При переносе данных между информационными базами или после доработки типовых конфигураций пользователи могут столкнуться с ошибкой: «Значение не является значением объектного типа (Реквизиты)». Чаще всего сбой происходит при попытке провести, отменить проведение или установить пометку на удаление для документов (например, ведомостей на выплату зарплаты через банк).

Разберем детально, почему возникает данное исключение платформы 1С:Предприятие и как гарантированно устранить неполадку несколькими проверенными способами.

Причины возникновения ошибки

Проанализируем ключевые факторы, приводящие к сбою обращения к свойству объекта:

  1. Конфликт системных и прикладных имен в метаданных: Если разработчик добавил в документ или на управляемую форму реквизит с именем Реквизиты, это имя перекрывает стандартные контексты платформы и подсистем БСП (Библиотеки Стандартных Подсистем). Когда типовой алгоритм пытается обратиться к внутренней коллекции свойств, вместо структуры возвращается прикладной реквизит (значение которого пусто или имеет примитивный тип), что вызывает исключение.
  2. «Битые» ссылки после переноса данных: При пометке на удаление вызываются события ПередЗаписью, ПриУстановкеПометкиУдаления и общие подписки на события. Если ключевые реквизиты (банк, зарплатный проект, организация) содержат ссылку вида «Объект не найден», функции чтения связанных параметров возвращают Неопределено.
  3. Повреждение подсистемы дополнительных реквизитов и сведений: Неполный перенос планов видов характеристик приводит к ошибкам при обращении к табличной части ДополнительныеРеквизиты.

Способ 1. Исправление конфликта имен в метаданных

Рассмотрим основной способ решения, если в конфигурацию вносились изменения или переносились доработанные объекты. Выясним, нет ли реквизита с именем, дублирующим системные свойства.

  1. Откроем информационную базу в режиме Конфигуратор.
  2. В дереве метаданных найдем проблемный документ (например, ВедомостьНаВыплатуЗарплатыВБанк).
  3. Развернем ветку Реквизиты и проверим состав реквизитов объекта и реквизитов управляемой формы.
  4. Если обнаружен реквизит с именем Реквизиты, переименуем его во избежание конфликтов (например, в БанковскиеРеквизиты или РеквизитыПлатежа) либо удалим, если он больше не используется.
  5. Выполним обновление конфигурации базы данных (клавиша F7).

Способ 2. Программное удаление и пометка на удаление с отключением проверок

Если ведомости или другие документы требуется срочно удалить из базы, минуя срабатывание типовых обработчиков и подписок на события, воспользуемся внешней обработкой со свойством ОбменДанными.Загрузка.

Разберем программный код для безопасной пометки объекта на удаление:


// Пример пометки документа на удаление в режиме загрузки данных
СсылкаНаДокумент = Документы.ВедомостьНаВыплатуЗарплатыВБанк.НайтиПоНомеру("0000-000001", ТекущаяДата());

Если ЗначениеЗаполнено(СсылкаНаДокумент) Тогда
    ДокументОбъект = СсылкаНаДокумент.ПолучитьОбъект();
    ДокументОбъект.ОбменДанными.Загрузка = Истина;
    ДокументОбъект.ПометкаУдаления = Истина;
    ДокументОбъект.Записать();
КонецЕсли;

Если объект необходимо удалить физически без помещения в корзину помеченных объектов, применим метод Удалить():


// Пример непосредственного удаления некорректного объекта
ДокументОбъект = СсылкаНаДокумент.ПолучитьОбъект();
ДокументОбъект.ОбменДанными.Загрузка = Истина;
ДокументОбъект.Удалить();

Установка флага ОбменДанными.Загрузка = Истина полностью блокирует выполнение кода в событиях ПередЗаписью и общих модулях контроля, что позволяет безопасно очистить базу от поврежденных данных.

Способ 3. Проверка ссылочной целостности (Тестирование и исправление)

Если ошибка вызвана нарушением ссылочной целостности после переноса данных, выполним системное тестирование базы:

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

Способ 4. Диагностика через отладку и журнал регистрации

Если точное место возникновения сбоя неизвестно, локализуем строку с ошибкой:

  1. В Конфигураторе откроем главное меню Отладка -> Остановка по ошибке и включим флаг Останавливаться по ошибке.
  2. Запустим сеанс в режиме отладки и повторим попытку удаления ведомости. Платформа остановит выполнение на проблемной строке кода, что позволит увидеть имя переменной, имеющей тип Неопределено.
  3. В режиме 1С:Предприятие откроем Журнал регистрации, отфильтруем события по статусу Ошибка и проанализируем стек вызовов.

Способ 5. Очистка локального кэша

При переносе конфигураций и обновлении метаданных клиентское приложение может сохранять устаревшую структуру кэша. Для устранения остаточных сбоев закроем сеансы 1С и удалим временные каталоги из папок пользователя %LOCALAPPDATA%\1C\1cv8 и %APPDATA%\1C\1cv8, после чего заново добавим базу в список запуска.

← На главную