При выполнении стандартного обмена данными между конфигурацией «1С:Комплексная автоматизация 1.1» (или «УПП 1.3») и веб-сайтом пользователи часто сталкиваются с прерыванием процесса и системным сообщением об ошибке. Рассмотрим ситуацию, когда в модуле объекта обработки ОбменССайтом на строке 977 возникает исключение: Значение не является значением объектного типа (УникальныйИдентификатор). Эта ошибка критична, так как она полностью блокирует выгрузку товаров, цен и остатков, причем проявляется она как при прямой передаче данных по HTTP, так и при выгрузке в локальный файл.
Проанализируем техническую сторону вопроса, выясним причины возникновения проблемы и разберем пошагово методы её устранения.
Проблема локализована в процедурах сбора дополнительных реквизитов и свойств номенклатуры. В типовом коде обработка перебирает коллекцию свойств, чтобы получить их внутренние идентификаторы для корректного сопоставления с базой данных сайта. Ошибка возникает в следующем фрагменте кода:
// Примерный контекст ошибки в модуле
ДанныеСвойства = Выборка.Следующий();
Ид = ДанныеСвойства.Свойство.УникальныйИдентификатор();
Если в переменной ДанныеСвойства.Свойство оказывается значение Null или ссылка на объект, который был удален из базы данных (так называемая «битая ссылка» или «Объект не найден»), попытка вызвать метод УникальныйИдентификатор() приводит к аварийному завершению программы. Система не может извлечь GUID у объекта, которого физически не существует в таблице базы данных (в данном случае — в Плане видов характеристик ДополнительныеРеквизитыИСведения).
Чтобы понять, на каком именно объекте спотыкается обмен, нам необходимо воспользоваться средствами конфигуратора. Разберем, как это сделать:
ОбменССайтом.ДанныеСвойства через табло (Shift+F9).Нам важно выяснить не только то, что в поле Свойство содержится Null, но и понять, к какому товару это относится. Посмотрим на соседние поля в структуре ДанныеСвойства. Скорее всего, там будет ссылка на номенклатуру. Записав наименование или артикул товара, мы сможем вручную проверить его карточку.
Если товаров в базе десятки тысяч, ручной перебор не поможет. Рассмотрим более эффективный способ — использование консоли запросов. Нам нужно проверить регистр сведений ЗначенияСвойствОбъектов (или аналогичный, где хранятся доп. реквизиты). Проанализируем ситуацию с помощью запроса:
ВЫБРАТЬ
ЗначенияСвойствОбъектов.Объект,
ЗначенияСвойствОбъектов.Свойство
ИЗ
РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
ГДЕ
ЗначенияСвойствОбъектов.Свойство.Наименование ЕСТЬ NULL
ИЛИ ЗначенияСвойствОбъектов.Свойство.Ссылка ЕСТЬ NULL
Этот запрос выведет список всех записей, где свойство не заполнено или ссылается на несуществующий элемент. Это самый быстрый способ локализовать проблему в данных.
Часто корень проблемы кроется не в самой номенклатуре, а в справочнике «Наборы свойств объектов». Разберем, как это работает в 1С:КА 1.1. Для каждой категории или группы товаров назначается набор свойств. Если из Плана видов характеристик было удалено свойство, но оно осталось в составе «Набора свойств», при попытке обмена система попытается его обработать и получит пустую ссылку.
Необходимо зайти в справочник «Наборы свойств объектов» и внимательно просмотреть списки для номенклатуры. Если мы видим строки с текстом «<Объект не найден...>», их необходимо немедленно удалить из состава набора.
Если «битых ссылок» много, воспользуемся штатным механизмом 1С для очистки базы. Перед выполнением этих действий обязательно создайте резервную копию базы данных!
После завершения процедуры система автоматически вычистит все упоминания об удаленных свойствах из карточек номенклатуры и наборов свойств. Это должно полностью устранить ошибку УникальныйИдентификатор при обмене.
Выясним еще одну важную деталь. Типовая обработка обмена собирает свойства не только у самой номенклатуры, но и у её характеристик. Если вы используете характеристики, проверьте аналогичным образом и их свойства. Ошибка может скрываться в доп. реквизитах конкретного размера или цвета товара. В запросе к регистру сведений (Шаг 2) поле Объект может содержать как ссылку на Справочник.Номенклатура, так и на Справочник.ХарактеристикиНоменклатуры.
Чтобы в будущем не сталкиваться с подобными ситуациями, рекомендуем соблюдать следующие правила при работе с нормативно-справочной информацией:
Таким образом, мы выяснили, что ошибка обмена вызвана несоответствием данных в базе (ссылочной целостностью). Последовательное применение методов диагностики (отладка, запросы) и исправления (очистка наборов свойств, тестирование и исправление) позволяет быстро восстановить работоспособность обмена с сайтом.