При настройке или выполнении регулярной синхронизации между конфигурациями 1С:Бухгалтерия предприятия 3.0 и 1С:Управление торговлей 11 (а также 1С:ERP или 1С:КА) специалисты часто сталкиваются с прерыванием процесса выгрузки. Одной из самых коварных ошибок является сообщение: {ОбщийМодуль.ОбменДаннымиXDTOСервер.Модуль(1193)}: Поле объекта не обнаружено (КПП). Эта проблема возникает на этапе отправки данных из Бухгалтерии и полностью блокирует обмен. Давайте подробно разберем причины этой ситуации и способы её решения.
Рассмотрим ситуацию, в которой возникает данная ошибка. Чаще всего она проявляется при выгрузке документов Поступление на расчетный счет. Проанализируем запись в журнале регистрации. Ошибка указывает на выполнение кода в общем модуле ОбменДаннымиXDTOСервер:
ЗначениеСвойства = ДанныеИБ[ПКС.СвойствоКонфигурации];
Это означает, что универсальный механизм обмена (EnterpriseData) пытается прочитать значение реквизита КПП у объекта, который передается в правилах обмена (ПКО). Выясним, почему этого реквизита «нет». В случае с видом операции «Личные средства предпринимателя» в 1С:Бухгалтерии, поле «Контрагент» в документе может быть либо не заполнено, либо заполнено физическим лицом (самим ИП). Поскольку у физических лиц и индивидуальных предпринимателей в Российской Федерации КПП отсутствует, программный код правил обмена, ожидая увидеть организацию-юридическое лицо, «спотыкается» об отсутствие этого поля.
Кроме того, в 1С:Управление торговлей 11 на уровне метаданных часто отсутствует прямой аналог операции «Личные средства». В УТ такие поступления обычно отражаются через вид операции «Прочее поступление», где аналитикой выступает статья движения денежных средств, а не контрагент. Конфликт возникает из-за того, что типовые правила БП пытаются выгрузить документ по стандартному шаблону, требующему наличие КПП плательщика, которого в данной операции просто не существует.
Прежде чем приступать к правке программного кода, проверим сами данные в информационной базе. Рассмотрим распространенный сценарий: бухгалтер создал документ копированием или сначала выбрал вид операции «Оплата от покупателя», указал контрагента, а затем изменил вид операции на «Личные средства предпринимателя».
В этом случае на форме документа поле «Контрагент» исчезает, но в базе данных (в реквизитах объекта) ссылка на контрагента может сохраниться. При выгрузке правила обмена видят наличие ссылки и пытаются обратиться к свойствам этого контрагента (включая КПП). Проанализируем ситуацию с помощью консоли запросов или обработки «Изменение реквизитов»:
Поступление на расчетный счет, номер которого указан в журнале регистрации.Контрагент. Если он заполнен, необходимо очистить его значение.Если после очистки скрытых реквизитов ошибка сохраняется, значит, проблема заложена в самих правилах выгрузки (модуле менеджера обмена).
Если мы имеем дело с типовой конфигурацией и стандартной синхронизацией, правила обмена (ПКО и ПОД) жестко прописаны в коде. В современных версиях БП 3.0 за это отвечают общие модули с префиксом МенеджерОбменаЧерезУниверсальныйФормат. Рассмотрим, как программно отключить выгрузку проблемных документов.
Выясним, какая версия формата EnterpriseData используется в вашем обмене (обычно это 1.3 или выше). Нам нужно найти соответствующий модуль, например, МенеджерОбменаЧерезУниверсальныйФормат13. Проанализируем алгоритм в процедуре, отвечающей за определение необходимости выгрузки документа:
// В модуле МенеджерОбменаЧерезУниверсальныйФормат
ИначеЕсли ДанныеИБ.ВидОперации = Перечисления.ВидыОперацийПоступлениеДенежныхСредств.ЛичныеСредстваПредпринимателя Тогда
// Здесь правила ошибочно назначают ПКО для прочего поступления,
// которое требует КПП
ИспользованиеПКО.Документ_ПРСПрочееПоступление_Отправка = Истина;
Чтобы быстро решить проблему (особенно если данные операции не критичны для УТ), мы можем принудительно установить значение Ложь для данного вида операции. Это заставит систему игнорировать такие документы при выгрузке. Пример исправления:
ИначеЕсли ДанныеИБ.ВидОперации = Перечисления.ВидыОперацийПоступлениеДенежныхСредств.ЛичныеСредстваПредпринимателя Тогда
ИспользованиеПКО.Документ_ПРСПрочееПоступление_Отправка = Ложь; // Отключаем выгрузку
После внесения изменений необходимо перезапустить сеанс и повторить синхронизацию. Документы с видом операции «Личные средства» перестанут вызывать ошибку, так как система просто перестанет их обрабатывать.
Рассмотрим ситуацию, когда конфигурация находится на поддержке или является Базовой, что исключает возможность изменения общего модуля. В 1С предусмотрен штатный механизм использования внешних правил обмена.
Выполним следующие шаги для подключения исправленных правил:
Таким образом, система будет использовать логику из вашей внешней обработки, игнорируя ошибочный код в общем модуле конфигурации. Это «чистое» решение, которое не мешает обновлению программы.
Часто в журнале регистрации указано лишь общее событие ошибки. Чтобы точно идентифицировать объект, проанализируем поле «Данные» в Журнале регистрации. Там обычно содержится навигационная ссылка вида e1cib/data/Документ.ПоступлениеНаРасчетныйСчет?ref=....
Разберем, как найти документ по этому идентификатору (UID):
ref=.
Ид = Новый УникальныйИдентификатор("9ee5107b-4491-aea5-11e9-3445963aaf7e");
Ссылка = Документы.ПоступлениеНаРасчетныйСчет.ПолучитьСсылку(Ид);
Сообщить(Ссылка);
Найдя конкретный документ, попробуйте временно исключить его из состава отправляемых данных (через регистрацию изменений для обмена), чтобы проверить, пройдут ли остальные документы успешно. Если обмен завершится без ошибок, значит, вы точно локализовали проблемный объект.
Подведем итог. Ошибка Поле объекта не обнаружено (КПП) — это следствие несоответствия структуры данных в БП (где для ИП нет КПП) и требований формата EnterpriseData (который ожидает этот реквизит для определенных типов операций).
Основные рекомендации по предотвращению проблемы в будущем:
Использование внешней обработки менеджера обмена является самым гибким методом решения, позволяющим сохранить конфигурацию типовой и успешно выполнять синхронизацию даже при наличии специфических операций в учете.