Как исправить ошибку "Значение не является значением объектного типа (УникальныйИдентификатор)" при обмене 1С с сайтом

Программист 1С v8.3 (Обычные формы) 1С:Комплексная автоматизация Управленческий учет Торговля и дистрибуция
← На главную

При выполнении стандартного обмена данными между конфигурацией «1С:Комплексная автоматизация 1.1» (или «УПП 1.3») и веб-сайтом пользователи часто сталкиваются с прерыванием процесса и системным сообщением об ошибке. Рассмотрим ситуацию, когда в модуле объекта обработки ОбменССайтом на строке 977 возникает исключение: Значение не является значением объектного типа (УникальныйИдентификатор). Эта ошибка критична, так как она полностью блокирует выгрузку товаров, цен и остатков, причем проявляется она как при прямой передаче данных по HTTP, так и при выгрузке в локальный файл.

Проанализируем техническую сторону вопроса, выясним причины возникновения проблемы и разберем пошагово методы её устранения.

Технический анализ причины ошибки

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


// Примерный контекст ошибки в модуле
ДанныеСвойства = Выборка.Следующий();
Ид = ДанныеСвойства.Свойство.УникальныйИдентификатор();

Если в переменной ДанныеСвойства.Свойство оказывается значение Null или ссылка на объект, который был удален из базы данных (так называемая «битая ссылка» или «Объект не найден»), попытка вызвать метод УникальныйИдентификатор() приводит к аварийному завершению программы. Система не может извлечь GUID у объекта, которого физически не существует в таблице базы данных (в данном случае — в Плане видов характеристик ДополнительныеРеквизитыИСведения).

Шаг 1: Диагностика с помощью отладки

Чтобы понять, на каком именно объекте спотыкается обмен, нам необходимо воспользоваться средствами конфигуратора. Разберем, как это сделать:

  1. Откроем конфигуратор и найдем обработку ОбменССайтом.
  2. Перейдем в модуль объекта и найдем строку, указанную в тексте ошибки (в примере это строка 977).
  3. Установим точку останова на этой строке (клавиша F9).
  4. Запустим обмен в режиме предприятия.
  5. Когда программа «замрет» на точке останова, проанализируем содержимое переменной ДанныеСвойства через табло (Shift+F9).

Нам важно выяснить не только то, что в поле Свойство содержится Null, но и понять, к какому товару это относится. Посмотрим на соседние поля в структуре ДанныеСвойства. Скорее всего, там будет ссылка на номенклатуру. Записав наименование или артикул товара, мы сможем вручную проверить его карточку.

Шаг 2: Поиск «битых» ссылок через консоль запросов

Если товаров в базе десятки тысяч, ручной перебор не поможет. Рассмотрим более эффективный способ — использование консоли запросов. Нам нужно проверить регистр сведений ЗначенияСвойствОбъектов (или аналогичный, где хранятся доп. реквизиты). Проанализируем ситуацию с помощью запроса:


ВЫБРАТЬ
    ЗначенияСвойствОбъектов.Объект,
    ЗначенияСвойствОбъектов.Свойство
ИЗ
    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
ГДЕ
    ЗначенияСвойствОбъектов.Свойство.Наименование ЕСТЬ NULL
    ИЛИ ЗначенияСвойствОбъектов.Свойство.Ссылка ЕСТЬ NULL

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

Шаг 3: Проверка «Наборов свойств»

Часто корень проблемы кроется не в самой номенклатуре, а в справочнике «Наборы свойств объектов». Разберем, как это работает в 1С:КА 1.1. Для каждой категории или группы товаров назначается набор свойств. Если из Плана видов характеристик было удалено свойство, но оно осталось в составе «Набора свойств», при попытке обмена система попытается его обработать и получит пустую ссылку.

Необходимо зайти в справочник «Наборы свойств объектов» и внимательно просмотреть списки для номенклатуры. Если мы видим строки с текстом «<Объект не найден...>», их необходимо немедленно удалить из состава набора.

Шаг 4: Тестирование и исправление базы данных

Если «битых ссылок» много, воспользуемся штатным механизмом 1С для очистки базы. Перед выполнением этих действий обязательно создайте резервную копию базы данных!

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

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

Дополнительные нюансы: Характеристики номенклатуры

Выясним еще одну важную деталь. Типовая обработка обмена собирает свойства не только у самой номенклатуры, но и у её характеристик. Если вы используете характеристики, проверьте аналогичным образом и их свойства. Ошибка может скрываться в доп. реквизитах конкретного размера или цвета товара. В запросе к регистру сведений (Шаг 2) поле Объект может содержать как ссылку на Справочник.Номенклатура, так и на Справочник.ХарактеристикиНоменклатуры.

Профилактика возникновения ошибки

Чтобы в будущем не сталкиваться с подобными ситуациями, рекомендуем соблюдать следующие правила при работе с нормативно-справочной информацией:

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

← На главную