Рассмотрим достаточно распространенную ситуацию, когда при настроенной синхронизации данных через универсальный формат EnterpriseData между конфигурациями "1С:Управление торговлей" (УТ) и "1С:Бухгалтерия предприятия" (БП) процесс выгрузки внезапно прерывается ошибкой. В журнале регистрации или окне синхронизации мы видим следующее сообщение:
Направление: Отправка. ПОД: Документ_ОтчетПоКомиссииМеждуОрганизациями_Отправка. ПКО: ОтчетКомиссияМеждуОрганизациями_Комиссионер_Отправ. Объект: Документ объект: Отчет по комиссии между организациями... Значение не является значением объектного типа (Ссылка) {ОбщийМодуль.ОбменДаннымиXDTOСервер.Модуль(1092)}: ПозицияВСтеке = СтекВыгрузки.Найти(Источник.Ссылка);
Давайте разберем по шагам, почему возникает эта проблема, проанализируем механизм обмена и выясним способы исправления.
Проанализируем техническую сторону инцидента. Ошибка классифицируется как проблема типизации данных. Возникает она в общем модуле ОбменДаннымиXDTOСервер.
Алгоритм выгрузки ожидает, что в качестве источника (в данном случае это касается номеров ГТД в табличной части "Виды запасов" документа "Отчет по комиссии между организациями") будет передан ссылочный тип данных, например, элемент справочника НомераГТД. Однако, в связи с особенностями учета прослеживаемых товаров (РНПТ) и изменениями структур данных в новых версиях УТ 11.5, в процедуру сериализации иногда попадает примитивный тип Строка.
Когда код платформы пытается выполнить обращение к свойству Источник.Ссылка, а в переменной Источник находится обычный текст, происходит критический сбой выгрузки, так как у строк нет и не может быть свойства ссылки. Из-за этого падает весь пакет обмена, и другие документы перестают отправляться в базу-приемник. Стоит отметить, что разработчиками 1С данная ситуация была зарегистрирована как ошибка под номером 00-00507456.
Рассмотрим подробнее несколько вариантов решения данной проблемы, от самых простых пользовательских методов до программных исправлений.
Если ошибка блокирует обмен из-за одного конкретного документа, мы можем исправить данные вручную, чтобы заставить систему сериализовать их иначе. Разберем, как это сделать:
ОтчетПоКомиссииМеждуОрганизациями, на который ругается система.Этот простой "трюк" позволяет перезаписать строковое значение в базе корректной ссылкой, которую XDTO-сериализатор сможет "проглотить" без сбоев.
Если в данный момент времени разбираться с ГТД нет возможности, а остальные документы должны срочно уйти в Бухгалтерию, мы можем временно исключить сбойный документ из обмена.
Если таких документов много, ручное исправление становится неэффективным. Посмотрим на пример программного решения. Мы можем создать небольшое расширение конфигурации, которое перехватит выполнение проблемной функции и обработает исключительную ситуацию со строкой.
Создадим расширение и добавим в него общий модуль ОбменДаннымиXDTOСервер. Применим директиву &ИзменениеИКонтроль для функции ДанныеXDTOИзДанныхИБ. Рассмотрим код патча:
&ИзменениеИКонтроль("ДанныеXDTOИзДанныхИБ")
Функция Расш1_ДанныеXDTOИзДанныхИБ(КомпонентыОбмена, Источник, Знач ПравилоКонвертации, СтекВыгрузки)
Приемник = Новый Структура;
Если СтекВыгрузки = Неопределено Тогда
СтекВыгрузки = Новый Массив;
КонецЕсли;
Если ПравилоКонвертации.ЭтоСсылочныйТип Тогда
#Вставка
Если ТипЗнч(Источник) = Тип("Строка") Тогда
Возврат Неопределено;
КонецЕсли;
#КонецВставки
ПозицияВСтеке = СтекВыгрузки.Найти(Источник.Ссылка);
// ... (остальной типовой код функции)
Что делает этот код? Мы проверяем тип переменной Источник. Если система передает нам строку вместо ожидаемой ссылки, функция принудительно возвращает Неопределено. В результате в отчете комитенту/комиссионеру в базе приемника просто не заполнится номер ГТД. Если для вашего учета перенос ГТД в данном конкретном документе не критичен, это идеальное временное решение, которое разблокирует работу обмена.
Расширение — это отличная "заплатка", но важно помнить, что перехват базовых общих модулей может привести к конфликтам при следующих обновлениях. Разберем правильный подход.
Разработчики 1С признали наличие проблемы и исправили баг сериализации 00-00507456. По официальным данным, ошибка полностью устранена, начиная с релиза УТ версии 11.5.10.84.
Поэтому самым надежным и правильным решением будет плановое обновление вашей конфигурации "1С:Управление торговлей" до указанного или более свежего релиза. После проведения обновления обязательно удалите временное расширение с программным костылем (если вы создавали его по способу 3), чтобы вернуть механизмы обмена к полностью типовому и стабильному состоянию.