Ошибка синхронизации УНФ 3.0 и БП 3.0: как исправить ошибку «Значение не является значением объектного типа (Свойство)» при загрузке чеков ККМ?

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

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

Симптомы и диагностика проблемы

Рассмотрим ситуацию подробнее. Синхронизация прерывается на этапе получения данных. В журнале регистрации или в окне сообщений обмена мы видим следующую ошибку:

Ошибка в базе-корреспонденте: Направление: Получение. ПОД: Документ_ЧекККМ_Получение. Объект: Документ.ЧекККМ. Событие: Получение. Обработчик: ПриКонвертацииДанныхXDTO. Ошибка выполнения обработчика. Значение не является значением объектного типа (Свойство).

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

  1. В общем модуле ОбменДаннымиXDTOСервер происходит вызов метода СтруктураОбъектаXDTOВДанныеИБ.
  2. Далее управление передается в модуль МенеджерОбменаЧерезУниверсальныйФормат13 (номер версии формата может отличаться, например 1.11 или 1.13).
  3. Ошибка возникает в процедуре обработки оплаты чека, конкретно при попытке определить патентную систему налогообложения: СтрокаОплаты.Патент = ЗагрузитьПатентИВернутьВидДеятельности(СтрокаТовары.Патент, КомпонентыОбмена).

Суть ошибки «Значение не является значением объектного типа (Свойство)» заключается в том, что программный код пытается обратиться к свойству переменной (в данном случае к данным XDTO), которая имеет значение Неопределено или Null. Система ожидает увидеть структуру данных (объект XDTO), описывающую патент, но получает пустоту.

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

Разберемся, почему это происходит. Данная ошибка характерна для релизов БП 3.0.148.х и УНФ 3.0.5.х — 3.0.6.х. Она связана с изменениями в механизме обмена розничными продажами (Enterprise Data).

Основная причина кроется в обработке документов вида ЧекККМ со сложными сценариями оплаты, а именно:

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

Решение 1: Программное исправление (через Расширение)

Если вы используете локальную версию 1С:Бухгалтерии (не в облаке), самым быстрым и надежным способом будет создание небольшого расширения конфигурации. Это позволит исправить ошибку в коде без снятия конфигурации с поддержки.

Нам необходимо переопределить поведение функции ЗагрузитьПатентИВернутьВидДеятельности в общем модуле МенеджерОбменаЧерезУниверсальныйФормат13 (или актуальной для вашего релиза версии модуля).

Создадим расширение и добавим в него заимствование указанного модуля. Вставим следующий код с аннотацией &Вместо. Этот код добавляет проверку: если данные не пришли, мы просто возвращаем пустую ссылку, что предотвращает падение программы.


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

	// Если данные есть, выполняем стандартную логику (можно попробовать вызвать продолжение,
	// но надежнее скопировать типовой код или использовать безопасное чтение свойств)
	// В простейшем случае, если патенты не используются, достаточно возврата пустой ссылки.
	
	Возврат ПродолжитьВызов(ПатентXDTO, КомпонентыОбмена);
	
КонецФункции

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

Если у вас нет патентов в учете, приведенный выше код полностью безопасен и решает проблему.

Решение 2: Установка официального патча

Компания 1С признала наличие данной ошибки. Для конфигурации «Бухгалтерия предприятия» был выпущен патч (исправление) с номером EF_70080316.

Посмотрим, как проверить наличие и установить патч:

  1. Перейдите в раздел Администрирование -> Обслуживание.
  2. Откройте пункт Обновление программы -> Установка обновлений и исправлений (патчей).
  3. Если у вас настроена автоматическая загрузка исправлений, патч может уже быть загружен, но не установлен. Убедитесь, что галочка EF_70080316 стоит, и выполните установку.

После установки патча обязательно перезапустите сеанс предприятия и повторите синхронизацию.

Решение 3: Обходной путь для облачных версий (1С:Фреш)

Если ваша база находится в облачном сервисе (например, 1С:Фреш), вы не сможете установить произвольное расширение, а патчи устанавливаются администраторами сервиса централизованно. Если обновление еще не пришло, придется использовать методику исключения проблемных объектов.

Как мы выяснили ранее, ошибка возникает на конкретных документах ЧекККМ, чаще всего связанных с доплатой или зачетом аванса. Чтобы обмен прошел успешно для всех остальных документов, нам нужно исключить «битые» чеки из регистрации изменений.

Выполним следующие действия:

  1. Откройте Журнал регистрации (раздел Администрирование и сервис).
  2. Установите отбор по событию «Обмен данными» и уровню «Ошибка». Найдите момент последнего сбоя.
  3. В комментарии к ошибке или в данных сообщения найдите представление объекта, на котором произошел сбой. Обычно там написано: Объект: Документ объект: Поступление наличных или Чек ККМ от [Дата].
  4. Перейдите в документ в базе-источнике (УНФ). Убедитесь, что это действительно чек с операцией зачета аванса или сложной оплатой.
  5. Воспользуйтесь обработкой Регистрация изменений для обмена данными (обычно доступна через настройки синхронизации -> состав отправляемых данных).
  6. Найдите в дереве метаданных Документ.ЧекККМ.
  7. В правом списке найдите проблемный чек и отмените его регистрацию (нажмите кнопку «Отменить регистрацию» для выбранного объекта).
  8. Повторите синхронизацию.

Этот метод позволит пропустить сбойные документы и загрузить всё остальное. Проблемные чеки можно будет попробовать выгрузить позже, когда конфигурация БП обновится до релиза, содержащего исправление (начиная с версий 3.0.149 и выше).

Решение 4: Обновление правил конвертации

Иногда проблема кроется не в коде конфигурации, а в правилах обмена (правилах конвертации данных), которые используются для трансляции данных между программами. Даже если вы обновили релиз, правила могут остаться старыми.

Попробуем обновить правила вручную:

  1. В базе «1С:Бухгалтерия» перейдите в Администрирование -> Синхронизация данных.
  2. Откройте настройки синхронизации с УНФ.
  3. Нажмите кнопку Загрузить правила.
  4. Выберите вариант Из конфигурации (если вы обновили БП до последнего релиза) или Из файла (если вы скачали свежие правила с сайта поддержки пользователей 1С).

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

Заключение

Ошибка Значение не является значением объектного типа (Свойство) при обмене между УНФ и БП — это известная проблема совместимости форматов Enterprise Data при передаче розничных продаж с особыми видами оплат. Мы рассмотрели несколько путей решения:

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

← На главную