При настройке обмена данными между конфигурациями «1С:Управление нашей фирмой» (УНФ) и «1С:Бухгалтерия предприятия» (БП) пользователи могут столкнуться с критической ошибкой, прерывающей процесс синхронизации. Проблема проявляется при загрузке данных в базу-приемник (обычно Бухгалтерию) и сопровождается сообщением о том, что значение не является объектным типом. В этой статье мы подробно разберем причины возникновения этой ошибки, проанализируем стек вызова и предложим несколько вариантов решения, подходящих как для локальных версий, так и для работы в облаке (1С:Фреш).
Рассмотрим ситуацию подробнее. Синхронизация прерывается на этапе получения данных. В журнале регистрации или в окне сообщений обмена мы видим следующую ошибку:
Ошибка в базе-корреспонденте: Направление: Получение. ПОД: Документ_ЧекККМ_Получение. Объект: Документ.ЧекККМ. Событие: Получение. Обработчик: ПриКонвертацииДанныхXDTO. Ошибка выполнения обработчика. Значение не является значением объектного типа (Свойство).
Давайте проанализируем стек вызовов, чтобы понять, где именно происходит сбой. Ключевые строки в сообщении об ошибке указывают на модуль менеджера обмена через универсальный формат:
ОбменДаннымиXDTOСервер происходит вызов метода СтруктураОбъектаXDTOВДанныеИБ.МенеджерОбменаЧерезУниверсальныйФормат13 (номер версии формата может отличаться, например 1.11 или 1.13).СтрокаОплаты.Патент = ЗагрузитьПатентИВернутьВидДеятельности(СтрокаТовары.Патент, КомпонентыОбмена).Суть ошибки «Значение не является значением объектного типа (Свойство)» заключается в том, что программный код пытается обратиться к свойству переменной (в данном случае к данным XDTO), которая имеет значение Неопределено или Null. Система ожидает увидеть структуру данных (объект XDTO), описывающую патент, но получает пустоту.
Разберемся, почему это происходит. Данная ошибка характерна для релизов БП 3.0.148.х и УНФ 3.0.5.х — 3.0.6.х. Она связана с изменениями в механизме обмена розничными продажами (Enterprise Data).
Основная причина кроется в обработке документов вида ЧекККМ со сложными сценариями оплаты, а именно:
В момент загрузки данных в Бухгалтерию, алгоритм пытается прочитать свойства патента из входящего XML-пакета. Однако для строк с зачетом аванса узел с информацией о патенте может отсутствовать. Вместо того чтобы проверить наличие данных перед чтением, код сразу пытается обратиться к методу .Свойство() или прочитать атрибуты, что и вызывает фатальную ошибку.
Если вы используете локальную версию 1С:Бухгалтерии (не в облаке), самым быстрым и надежным способом будет создание небольшого расширения конфигурации. Это позволит исправить ошибку в коде без снятия конфигурации с поддержки.
Нам необходимо переопределить поведение функции ЗагрузитьПатентИВернутьВидДеятельности в общем модуле МенеджерОбменаЧерезУниверсальныйФормат13 (или актуальной для вашего релиза версии модуля).
Создадим расширение и добавим в него заимствование указанного модуля. Вставим следующий код с аннотацией &Вместо. Этот код добавляет проверку: если данные не пришли, мы просто возвращаем пустую ссылку, что предотвращает падение программы.
&Вместо("ЗагрузитьПатентИВернутьВидДеятельности")
Функция ОбменУНФ_ЗагрузитьПатентИВернутьВидДеятельности(ПатентXDTO, КомпонентыОбмена)
// Добавляем проверку на наличие данных
Если ПатентXDTO = Неопределено Тогда
// Если данных о патенте нет, возвращаем пустую ссылку на справочник Патенты
Возврат Справочники.Патенты.ПустаяСсылка;
КонецЕсли;
// Если данные есть, выполняем стандартную логику (можно попробовать вызвать продолжение,
// но надежнее скопировать типовой код или использовать безопасное чтение свойств)
// В простейшем случае, если патенты не используются, достаточно возврата пустой ссылки.
Возврат ПродолжитьВызов(ПатентXDTO, КомпонентыОбмена);
КонецФункции
Важное примечание: Если ваша организация действительно использует патентную систему налогообложения (ПСН) и вам важно, чтобы в чеках корректно проставлялся патент, то просто возвращать пустую ссылку может быть недостаточно. Однако, как показывает практика, ошибка чаще всего возникает именно в тех строках (зачет аванса), где патент не играет роли для формирования проводок в моменте, или данные о нем берутся из шапки/договора.
Если у вас нет патентов в учете, приведенный выше код полностью безопасен и решает проблему.
Компания 1С признала наличие данной ошибки. Для конфигурации «Бухгалтерия предприятия» был выпущен патч (исправление) с номером EF_70080316.
Посмотрим, как проверить наличие и установить патч:
EF_70080316 стоит, и выполните установку.После установки патча обязательно перезапустите сеанс предприятия и повторите синхронизацию.
Если ваша база находится в облачном сервисе (например, 1С:Фреш), вы не сможете установить произвольное расширение, а патчи устанавливаются администраторами сервиса централизованно. Если обновление еще не пришло, придется использовать методику исключения проблемных объектов.
Как мы выяснили ранее, ошибка возникает на конкретных документах ЧекККМ, чаще всего связанных с доплатой или зачетом аванса. Чтобы обмен прошел успешно для всех остальных документов, нам нужно исключить «битые» чеки из регистрации изменений.
Выполним следующие действия:
Объект: Документ объект: Поступление наличных или Чек ККМ от [Дата].Документ.ЧекККМ.Этот метод позволит пропустить сбойные документы и загрузить всё остальное. Проблемные чеки можно будет попробовать выгрузить позже, когда конфигурация БП обновится до релиза, содержащего исправление (начиная с версий 3.0.149 и выше).
Иногда проблема кроется не в коде конфигурации, а в правилах обмена (правилах конвертации данных), которые используются для трансляции данных между программами. Даже если вы обновили релиз, правила могут остаться старыми.
Попробуем обновить правила вручную:
Обновленные правила могут содержать корректную обработку пустых значений XDTO для патента, что устранит ошибку.
Ошибка Значение не является значением объектного типа (Свойство) при обмене между УНФ и БП — это известная проблема совместимости форматов Enterprise Data при передаче розничных продаж с особыми видами оплат. Мы рассмотрели несколько путей решения:
Неопределено (для программистов).Рекомендуем своевременно обновлять обе конфигурации, так как разработчики 1С включают исправления подобных ошибок в новые релизы платформы и прикладных решений.