Почему не выполняется обмен БП -> УНФ из-за незаполненного КПП у индивидуального предпринимателя?

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

В процессе настройки и эксплуатации типовой синхронизации между конфигурациями «Бухгалтерия предприятия» (БП 3.0) и «Управление нашей фирмой» (УНФ 3.0) специалисты часто сталкиваются с техническими сложностями. Одной из наиболее неочевидных проблем является остановка обмена при выгрузке данных о контрагентах, имеющих статус индивидуального предпринимателя (ИП). Ошибка сопровождается сообщением о несоответствии структуры XDTO-пакета из-за отсутствующего КПП. Чтобы не запускать процесс вручную, регулярный автоматический обмен данными между базами 1С обеспечит выполнение синхронизации по заданному расписанию.

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

Анализ технической причины ошибки

Проанализируем текст ошибки, который выдает система при попытке выгрузки: Ошибка проверки данных XDTO: Структура объекта '/ИсторияКПП/Строка[2]' не соответствует типу... Отсутствует обязательное свойство КПП. На первый взгляд ситуация кажется парадоксальной, так как у индивидуальных предпринимателей КПП отсутствует по закону, и в экранных формах 1С это поле для них скрыто или недоступно для редактирования.

Выясним причину на уровне форматов обмена. Начиная с версии пакета EnterpriseData 1.15 и выше (в частности, в версии 1.20.2), требования к валидации XML-файлов стали значительно строже. В схеме XDTO для объекта Контрагент коллекция ИсторияКПП описана таким образом, что если в выгружаемом файле появляется узел строки истории, то вложенный в него элемент КПП становится обязательным (параметр minOccurs="1").

Проблема заключается в том, что механизм выгрузки в БП 3.0 при наличии хотя бы одной записи в скрытой табличной части История КПП (даже если само значение КПП там пустое, но указана, например, только дата) принудительно создает узел в XML. Валидатор XDTO видит этот узел, обнаруживает отсутствие значения в поле КПП и блокирует отправку всего пакета данных.

Выясняем происхождение некорректных данных

Разберем, откуда в базе данных 1С у индивидуального предпринимателя могут появиться записи в табличной части ИсторияКПП, если штатно они не предусмотрены:

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

Решение проблемы через очистку данных

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

Рассмотрим последовательность действий:

  1. Перейдем в раздел «Администрирование» — «Обслуживание» — «Корректировка данных».
  2. Воспользуемся обработкой «Групповое изменение реквизитов».
  3. Выберем объект Контрагенты и установим фильтр по конкретному проблемному контрагенту (или по признаку Вид контрагента РАВНО Физическое лицо).
  4. В настройках обработки (кнопка «Дополнительные параметры») включим флаг «Показывать служебные реквизиты».
  5. Найдем в списке таблицу История КПП. Нам необходимо добиться её полной очистки.

Если групповая обработка не позволяет напрямую очистить коллекцию, воспользуемся коротким фрагментом кода в консоли кода (для администраторов):


// Пример очистки истории КПП для конкретного ИП
ОбъектКонтрагент = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", "770102030405").ПолучитьОбъект();
Если ОбъектКонтрагент <> Неопределено Тогда
    ОбъектКонтрагент.ИсторияКПП.Очистить();
    ОбъектКонтрагент.Записать();
    Сообщить("История КПП успешно очищена для: " + ОбъектКонтрагент.Наименование);
КонецЕсли;

Программное предотвращение ошибки в правилах обмена

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

В расширении конфигурации можно перехватить процедуру выгрузки контрагента. Логика должна заключаться в принудительном игнорировании коллекции ИсторияКПП, если признак ЮридическоеФизическоеЛицо соответствует значению ФизическоеЛицо (к которым относятся ИП).

Пример логики в обработчике ПКО_Справочник_Контрагенты_Отправка_ПриОбработке:


// Проверяем тип контрагента перед выгрузкой в XDTO
Если ДанныеИБ.ЮридическоеФизическоеЛицо = Перечисления.ЮридическоеФизическоеЛицо.ФизическоеЛицо Тогда
    // Если это ИП или физлицо, принудительно очищаем структуру для XDTO
    Если ДанныеXDTO.Свойство("ИсторияКПП") Тогда
        ДанныеXDTO.ИсторияКПП.Очистить();
    КонецЕсли;
КонецЕсли;

Дополнительные рекомендации

Рассмотрим еще несколько важных моментов, которые помогут стабилизировать обмен:

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

Подводя итог, отметим, что ошибка Структура объекта '/ИсторияКПП/' не соответствует типу — это классический пример конфликта между устаревшими или некорректно введенными данными в базе и строгими правилами современных форматов EnterpriseData. Своевременная очистка служебных табличных частей у ИП гарантирует стабильную работу синхронизации между БП 3.0 и УНФ 3.0.

← На главную