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

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

Рассмотрим достаточно распространенную ситуацию, когда при настроенной синхронизации данных через универсальный формат EnterpriseData между конфигурациями "1С:Управление торговлей" (УТ) и "1С:Бухгалтерия предприятия" (БП) процесс выгрузки внезапно прерывается ошибкой. В журнале регистрации или окне синхронизации мы видим следующее сообщение:

Направление: Отправка. ПОД: Документ_ОтчетПоКомиссииМеждуОрганизациями_Отправка. ПКО: ОтчетКомиссияМеждуОрганизациями_Комиссионер_Отправ. Объект: Документ объект: Отчет по комиссии между организациями... Значение не является значением объектного типа (Ссылка) {ОбщийМодуль.ОбменДаннымиXDTOСервер.Модуль(1092)}: ПозицияВСтеке = СтекВыгрузки.Найти(Источник.Ссылка);

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

Суть и причина возникновения ошибки

Проанализируем техническую сторону инцидента. Ошибка классифицируется как проблема типизации данных. Возникает она в общем модуле ОбменДаннымиXDTOСервер.

Алгоритм выгрузки ожидает, что в качестве источника (в данном случае это касается номеров ГТД в табличной части "Виды запасов" документа "Отчет по комиссии между организациями") будет передан ссылочный тип данных, например, элемент справочника НомераГТД. Однако, в связи с особенностями учета прослеживаемых товаров (РНПТ) и изменениями структур данных в новых версиях УТ 11.5, в процедуру сериализации иногда попадает примитивный тип Строка.

Когда код платформы пытается выполнить обращение к свойству Источник.Ссылка, а в переменной Источник находится обычный текст, происходит критический сбой выгрузки, так как у строк нет и не может быть свойства ссылки. Из-за этого падает весь пакет обмена, и другие документы перестают отправляться в базу-приемник. Стоит отметить, что разработчиками 1С данная ситуация была зарегистрирована как ошибка под номером 00-00507456.

Способы решения проблемы

Рассмотрим подробнее несколько вариантов решения данной проблемы, от самых простых пользовательских методов до программных исправлений.

Способ 1: Локальное исправление данных (Обходной путь)

Если ошибка блокирует обмен из-за одного конкретного документа, мы можем исправить данные вручную, чтобы заставить систему сериализовать их иначе. Разберем, как это сделать:

  1. Откроем проблемный документ ОтчетПоКомиссииМеждуОрганизациями, на который ругается система.
  2. Перейдем к табличной части "Виды запасов" (обычно доступна по кнопке "Открыть виды запасов" или в расширенном режиме редактирования).
  3. Найдем колонку с номером таможенной декларации (ГТД).
  4. Добавим в номере декларации обычный пробел или попробуем перевыбрать элемент ГТД из справочника вручную.
  5. Проведем документ.

Этот простой "трюк" позволяет перезаписать строковое значение в базе корректной ссылкой, которую XDTO-сериализатор сможет "проглотить" без сбоев.

Способ 2: Снятие проблемного документа с регистрации

Если в данный момент времени разбираться с ГТД нет возможности, а остальные документы должны срочно уйти в Бухгалтерию, мы можем временно исключить сбойный документ из обмена.

  1. Откроем стандартную обработку "Регистрация изменений для обмена данными".
  2. Выберем узел нашей базы "1С:Бухгалтерия".
  3. Найдем ветку с документами "Отчет по комиссии между организациями".
  4. Отменим регистрацию проблемного документа.
  5. Запустим синхронизацию повторно — обмен должен пройти успешно для всех остальных объектов.

Способ 3: Временное исправление через расширение конфигурации

Если таких документов много, ручное исправление становится неэффективным. Посмотрим на пример программного решения. Мы можем создать небольшое расширение конфигурации, которое перехватит выполнение проблемной функции и обработает исключительную ситуацию со строкой.

Создадим расширение и добавим в него общий модуль ОбменДаннымиXDTOСервер. Применим директиву &ИзменениеИКонтроль для функции ДанныеXDTOИзДанныхИБ. Рассмотрим код патча:


&ИзменениеИКонтроль("ДанныеXDTOИзДанныхИБ")
Функция Расш1_ДанныеXDTOИзДанныхИБ(КомпонентыОбмена, Источник, Знач ПравилоКонвертации, СтекВыгрузки)
    
    Приемник = Новый Структура;
    Если СтекВыгрузки = Неопределено Тогда
        СтекВыгрузки = Новый Массив;
    КонецЕсли;
    
    Если ПравилоКонвертации.ЭтоСсылочныйТип Тогда
        
        #Вставка
        Если ТипЗнч(Источник) = Тип("Строка") Тогда
            Возврат Неопределено; 
        КонецЕсли;
        #КонецВставки
        
        ПозицияВСтеке = СтекВыгрузки.Найти(Источник.Ссылка);
        
        // ... (остальной типовой код функции)

Что делает этот код? Мы проверяем тип переменной Источник. Если система передает нам строку вместо ожидаемой ссылки, функция принудительно возвращает Неопределено. В результате в отчете комитенту/комиссионеру в базе приемника просто не заполнится номер ГТД. Если для вашего учета перенос ГТД в данном конкретном документе не критичен, это идеальное временное решение, которое разблокирует работу обмена.

Способ 4: Официальное обновление (Рекомендуемый)

Расширение — это отличная "заплатка", но важно помнить, что перехват базовых общих модулей может привести к конфликтам при следующих обновлениях. Разберем правильный подход.

Разработчики 1С признали наличие проблемы и исправили баг сериализации 00-00507456. По официальным данным, ошибка полностью устранена, начиная с релиза УТ версии 11.5.10.84.

Поэтому самым надежным и правильным решением будет плановое обновление вашей конфигурации "1С:Управление торговлей" до указанного или более свежего релиза. После проведения обновления обязательно удалите временное расширение с программным костылем (если вы создавали его по способу 3), чтобы вернуть механизмы обмена к полностью типовому и стабильному состоянию.

← На главную