Как устранить дублирование контрагентов и программные ошибки при обмене между УТ 10.3 и БП 3.0?

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

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

Проблема 1: Дублирование контрагентов при обмене

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

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

  1. Откроем текущие правила обмена в КД 2.0.
  2. Найдем ПКО для справочника Контрагенты.
  3. Перейдем на закладку «Настройки поиска».
  4. Снимем флаг «Искать объект по внутреннему идентификатору». Это заставит систему игнорировать различие в GUID и перейти к проверке полей поиска.
  5. Установим флаги «Поиск» для свойств ИНН и КПП.
  6. Проверим наличие настройки «Продолжить поиск по полям поиска, если по идентификатору объект не найден». Это позволит «склеить» существующих контрагентов.

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

Проблема 2: Ошибка «Значение не является значением объектного типа (Метаданные)»

Рассмотрим вторую техническую сложность, упомянутую в обсуждении. При загрузке документа ПоступлениеТоваровУслуг (в БП 3.0 это «Поступление (акт, накладная)») возникает ошибка в глобальном обработчике ПослеЗагрузкиОбъекта. Ошибка указывает на то, что код пытается обратиться к свойству Метаданные() у переменной, которая не является объектом метаданных или пуста.

Выясним причину: в современных конфигурациях БП 3.0 часто используется алгоритм ЗаполнитьРеквизитыПоУмолчанию. Если правила обмена устарели или структура документа в новом релизе БП изменилась, этот алгоритм может «спотыкаться» на определенных типах данных или при попытке работы с объектами, которые еще не были корректно инициализированы в памяти.

Для исправления ситуации в КД 2.0 в глобальном обработчике «После загрузки объекта» (конвертация) можно применить два подхода.

Вариант 1: Использование блока обработки исключений. Это самый быстрый способ подавить ошибку и позволить обмену завершиться. Заключим вызов алгоритма в попытку:


Попытка
    Выполнить(Алгоритмы.ЗаполнитьРеквизитыПоУмолчанию);
Исключение
    // Записываем информацию в журнал регистрации, если требуется
    ЗаписьЖурналаРегистрации("ОбменДанными.ОшибкаЗаполнения", 
        УровеньЖурналаРегистрации.Предупреждение, , , 
        "Не удалось заполнить реквизиты по умолчанию для объекта: " + Строка(Объект));
КонецПопытки;

Вариант 2: Предварительная проверка типа объекта. Это более правильный с точки зрения архитектуры подход. Мы будем вызывать алгоритм заполнения только для тех типов объектов, которые точно имеют метаданные (справочники и документы):


// Проверяем, является ли загруженный объект ссылочным типом (Справочник или Документ)
Если Найти(ИмяТипаОбъекта, "СправочникСсылка") > 0 
   Или Найти(ИмяТипаОбъекта, "ДокументСсылка") > 0 Тогда
    
    // Дополнительная проверка на наличие самого объекта
    Если Объект <> Неопределено Тогда
        Выполнить(Алгоритмы.ЗаполнитьРеквизитыПоУмолчанию);
    КонецЕсли;

КонецЕсли;

Как избежать ошибок при обновлении конфигураций?

Проанализируем ситуацию: ошибки в глобальных обработчиках часто возникают после обновления 1С:Бухгалтерии, так как правила обмена, встроенные в УТ 10.3, перестают соответствовать структуре объектов в БП 3.0. Посмотрим, где взять актуальные правила:

  1. Зайдем в папку с установленным шаблоном обновления БП 3.0 (обычно это путь ...\1cv8\tmplt\1c\Accounting\...).
  2. Найдем подпапку Обмен данными, а в ней — папку Обмен с конфигурацией Управление торговлей, ред. 10.3.
  3. Возьмем оттуда файл ПравилаОбмена.xml.
  4. Загрузим этот файл в настройку обмена в «Управлении торговлей».

Рекомендация по бизнес-процессу: Чтобы радикально исключить появление дублей контрагентов, лучше пересмотреть схему работы с банком. Оптимально загружать выписки только в оперативную базу (УТ 10.3), проверять правильность заполнения контрагентов там, а затем передавать эти данные в бухгалтерскую базу через настроенный обмен. Это гарантирует единство GUID и избавит программиста от необходимости постоянной правки правил поиска в КД 2.0.

Подводя итог, скажем: для стабильного обмена важно не только следить за актуальностью правил конвертации, но и грамотно настраивать поля поиска, отдавая приоритет уникальным реквизитам бизнеса (ИНН/КПП), а не внутренним идентификаторам платформы 1С.

← На главную