Как исправить ошибку «Поле объекта не обнаружено (КПП)» при синхронизации БП 3.0 и УТ 11?

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

При настройке или выполнении регулярной синхронизации между конфигурациями 1С:Бухгалтерия предприятия 3.0 и 1С:Управление торговлей 11 (а также 1С:ERP или 1С:КА) специалисты часто сталкиваются с прерыванием процесса выгрузки. Одной из самых коварных ошибок является сообщение: {ОбщийМодуль.ОбменДаннымиXDTOСервер.Модуль(1193)}: Поле объекта не обнаружено (КПП). Эта проблема возникает на этапе отправки данных из Бухгалтерии и полностью блокирует обмен. Давайте подробно разберем причины этой ситуации и способы её решения.

Анализируем причину возникновения ошибки

Рассмотрим ситуацию, в которой возникает данная ошибка. Чаще всего она проявляется при выгрузке документов Поступление на расчетный счет. Проанализируем запись в журнале регистрации. Ошибка указывает на выполнение кода в общем модуле ОбменДаннымиXDTOСервер:

ЗначениеСвойства = ДанныеИБ[ПКС.СвойствоКонфигурации];

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

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

Способ 1. Поиск и устранение «мусорных» данных в документах

Прежде чем приступать к правке программного кода, проверим сами данные в информационной базе. Рассмотрим распространенный сценарий: бухгалтер создал документ копированием или сначала выбрал вид операции «Оплата от покупателя», указал контрагента, а затем изменил вид операции на «Личные средства предпринимателя».

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

  1. Найдем проблемный документ Поступление на расчетный счет, номер которого указан в журнале регистрации.
  2. Воспользуемся обработкой «Групповое изменение реквизитов» (выбрав только этот один документ).
  3. Включим отображение служебных реквизитов в настройках обработки.
  4. Проверим значение реквизита Контрагент. Если он заполнен, необходимо очистить его значение.

Если после очистки скрытых реквизитов ошибка сохраняется, значит, проблема заложена в самих правилах выгрузки (модуле менеджера обмена).

Способ 2. Корректировка менеджера обмена через универсальный формат

Если мы имеем дело с типовой конфигурацией и стандартной синхронизацией, правила обмена (ПКО и ПОД) жестко прописаны в коде. В современных версиях БП 3.0 за это отвечают общие модули с префиксом МенеджерОбменаЧерезУниверсальныйФормат. Рассмотрим, как программно отключить выгрузку проблемных документов.

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


// В модуле МенеджерОбменаЧерезУниверсальныйФормат
ИначеЕсли ДанныеИБ.ВидОперации = Перечисления.ВидыОперацийПоступлениеДенежныхСредств.ЛичныеСредстваПредпринимателя Тогда
    // Здесь правила ошибочно назначают ПКО для прочего поступления, 
    // которое требует КПП
    ИспользованиеПКО.Документ_ПРСПрочееПоступление_Отправка = Истина;

Чтобы быстро решить проблему (особенно если данные операции не критичны для УТ), мы можем принудительно установить значение Ложь для данного вида операции. Это заставит систему игнорировать такие документы при выгрузке. Пример исправления:


ИначеЕсли ДанныеИБ.ВидОперации = Перечисления.ВидыОперацийПоступлениеДенежныхСредств.ЛичныеСредстваПредпринимателя Тогда
    ИспользованиеПКО.Документ_ПРСПрочееПоступление_Отправка = Ложь; // Отключаем выгрузку

После внесения изменений необходимо перезапустить сеанс и повторить синхронизацию. Документы с видом операции «Личные средства» перестанут вызывать ошибку, так как система просто перестанет их обрабатывать.

Способ 3. Использование внешних правил для базовых версий

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

Выполним следующие шаги для подключения исправленных правил:

  1. Зайдем в раздел Администрирование — Синхронизация данных.
  2. Откроем Настройки синхронизации данных и выберем нужный узел (УТ).
  3. Нажмем кнопку Параметры обмена данными — Загрузить правила обмена.
  4. Нам необходимо предварительно выгрузить типовой модуль менеджера обмена во внешнюю обработку (шаблон такой обработки можно найти на диске ИТС или в составе дистрибутива конфигурации).
  5. В этой обработке, в модуле объекта, вносим правки, описанные в Способе 2.
  6. В форме настройки правил выбираем вариант «Из файла на компьютере» и указываем нашу подготовленную обработку.

Таким образом, система будет использовать логику из вашей внешней обработки, игнорируя ошибочный код в общем модуле конфигурации. Это «чистое» решение, которое не мешает обновлению программы.

Как найти точный документ, вызывающий ошибку?

Часто в журнале регистрации указано лишь общее событие ошибки. Чтобы точно идентифицировать объект, проанализируем поле «Данные» в Журнале регистрации. Там обычно содержится навигационная ссылка вида e1cib/data/Документ.ПоступлениеНаРасчетныйСчет?ref=....

Разберем, как найти документ по этому идентификатору (UID):

  1. Скопируем часть ссылки после ref=.
  2. Воспользуемся любой стандартной обработкой «Поиск объектов по уникальному идентификатору».
  3. Если такой обработки нет под рукой, можно выполнить короткий код в консоли кода:

Ид = Новый УникальныйИдентификатор("9ee5107b-4491-aea5-11e9-3445963aaf7e");
Ссылка = Документы.ПоступлениеНаРасчетныйСчет.ПолучитьСсылку(Ид);
Сообщить(Ссылка);

Найдя конкретный документ, попробуйте временно исключить его из состава отправляемых данных (через регистрацию изменений для обмена), чтобы проверить, пройдут ли остальные документы успешно. Если обмен завершится без ошибок, значит, вы точно локализовали проблемный объект.

Резюме и рекомендации

Подведем итог. Ошибка Поле объекта не обнаружено (КПП) — это следствие несоответствия структуры данных в БП (где для ИП нет КПП) и требований формата EnterpriseData (который ожидает этот реквизит для определенных типов операций).

Основные рекомендации по предотвращению проблемы в будущем:

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

← На главную