При настройке обмена данными между конфигурациями 1С:Комплексная автоматизация 2 и 1С:Бухгалтерия предприятия 3 через Универсальный формат (EnterpriseData) разработчики и администраторы нередко сталкиваются с ситуацией, когда синхронизация завершается с ошибкой десериализации контактных данных, а в успешно перенесенных документах (например, «Реализация товаров и услуг») остаются пустыми счета учета номенклатуры и расчетов с контрагентами.
Разберем детально механизм возникновения этой неполадки, выясним, как связаны между собой ошибка контактной информации и незаполненные счета, а также рассмотрим пошаговые способы устранения сбоя.
Проанализируем журнал регистрации в базе-приемнике (БП 3). Типовое аварийное завершение сопровождается следующим сообщением:
Вид контактной информации Юридический адрес полученного объекта указан несколько раз. Загрузка не возможна. ВызватьИсключение ТекстИсключения;
Выделим две основные причины такого поведения системы:
КонтактнаяИнформация у контрагента продублирован вид адреса или в справочнике Виды контактной информации заведены дублирующие элементы, модуль МенеджерОбменаЧерезУниверсальныйФормат генерирует исключение.ОбменДанными.Загрузка = Истина. В этом режиме типовые механизмы автозаполнения реквизитов на уровне событий форм и модулей объектов отключены. Заполнение счетов учета и проведение документов в БП 3 вынесены в регламентную процедуру отложенного проведения, которая запускается только после успешного завершения разбора всего входящего пакета. Поскольку из-за дубля адреса произошел аварийный останов, этап отложенной обработки не стартовал, и счета учета остались незаполненными.Рассмотрим самый надежный и штатный путь решения, не требующий изменения конфигурации и правил конвертации:
Виды контактной информации и проверим, нет ли пользовательских дубликатов для групп «Контрагенты», «Организации» и «Партнеры». При необходимости воспользуемся штатной обработкой «Поиск и удаление дублей».Если требуется выгружать данные из одной базы КА 2 в две разные информационные базы БП 3 (по разделу юридических лиц), нет необходимости править код в Конвертации данных 3 (КД 3). Разберем, как это настроить штатными средствами:
Если в базе-источнике исторически накопилось много дублирующихся адресов и оперативно очистить их невозможно, скорректируем алгоритм обработки данных на стороне приемника (БП 3) с помощью расширения конфигурации без снятия с поддержки.
Посмотрим на пример перехвата загрузки контактной информации в модуле МенеджерОбменаЧерезУниверсальныйФормат:
&Вместо("ЗаполнитьКонтактнуюИнформациюОбъекта")
Процедура Расш1_ЗаполнитьКонтактнуюИнформациюОбъекта(Объект, ДанныеXDTO, КомпонентыОбмена)
// Создаем соответствие для отслеживания уже обработанных видов контактной информации
ОбработанныеВиды = Новый Соответствие;
Для Каждого СтрокаКИ Из ДанныеXDTO.КонтактнаяИнформация Цикл
ВидКИ = СтрокаКИ.Вид;
// Проверяем наличие дубля по виду контактной информации
Если ОбработанныеВиды[ВидКИ] <> Неопределено Тогда
// Пропускаем дублирующуюся запись, предотвращая вызов исключения
Продолжить;
КонецЕсли;
ОбработанныеВиды.Вставить(ВидКИ, Истина);
КонецЦикла;
// Вызов стандартной логики заполнения для уникальных видов
ПродолжитьВызов(Объект, ДанныеXDTO, КомпонентыОбмена);
КонецПроцедуры
Если документы уже были частично импортированы, но счета учета в них отсутствуют, выполним процедуру отложенной обработки вручную:
Отложенное проведение документов и запустим его выполнение вручную по кнопке Выполнить сейчас.СчетаУчетаНоменклатуры и СчетаУчетаРасчетовСКонтрагентами настроены корректно, система заполнит табличные части документов и выполнит их проведение.