Почему при успешной синхронизации УТ 11 и БП 3 данные не появляются в базе-приемнике и как их перевыгрузить

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

При настройке типовой синхронизации данных между конфигурациями 1С:Управление торговлей 11 и 1С:Бухгалтерия предприятия 3.0 на базе универсального формата EnterpriseData нередко возникает ситуация: сеанс обмена завершается без ошибок, в базе-источнике фиксируется отправка пакета, однако в базе-приемнике новые или измененные документы не появляются. Разберем по шагам, почему так происходит, как локализовать причину и как корректно отправить данные повторно.

Причины, по которым объекты не попадают в базу-приемник

Проанализируем механизмы работы планов обмена. Когда объект записывается в базе-источнике, в таблице изменений соответствующего узла ставится отметка о необходимости выгрузки. В момент старта обмена формируется пакет, и факт его передачи снимает регистрацию с объекта, даже если внутри обработчиков правил данные были отсечены. Рассмотрим основные причины отсечения:

  1. Фильтр по дате начала синхронизации. В настройках узла обмена задается дата, начиная с которой документы передаются в приемник. Если документ зарегистрирован к обмену, но его дата меньше установленного порога, тело документа исключается из выгрузки, однако регистрация с него снимается. При этом ручная выгрузка по произвольному периоду переопределяет это правило, из-за чего документы успешно доходят до БП 3.
  2. Статус проведения и правила фильтрации по реквизитам. В типовых правилах обмена УТ 11 — БП 3 непроведенные документы или документы в промежуточных статусах (например, черновики или неподтвержденные возвраты) отсекаются обработчиками выгрузки. Пакет формируется, регистрация сбрасывается, но сам XML-элемент документа в сообщение не включается.
  3. Отборы по организациям и подразделениям. Если в настройках синхронизации указан список выгружаемых организаций, документы по неуказанным организациям не попадут в сообщение обмена.
  4. Дата запрета загрузки в БП 3. Если в базе-приемнике установлена дата запрета изменения данных (общая или для узла обмена), объекты с датой раньше запрета игнорируются при загрузке.
  5. Сопоставление с существующими объектами. При загрузке в БП 3 поиск выполняется по полям сопоставления (номер, дата, ИНН/КПП, организация). Если документ сопоставился с уже существующим, новый объект в журнале не создается, а перезаписывается старый.

Диагностика состава выгружаемого пакета

Чтобы точно понять, выгружаются ли физически данные из УТ 11, выполним следующие действия:

  1. Временная выгрузка через каталог. Переключим транспорт синхронизации с прямого подключения на обмен через каталог (или сохраним файл обмена локально). Откроем полученный XML-файл в текстовом редакторе и проверим наличие тегов требуемого документа (например, Документ.ВозвратТоваровОтКлиента). Если файл содержит только служебную квитанцию без тел документов, значит, сработал фильтр на стороне источника.
  2. Анализ журнала регистрации в БП 3. При прямом подключении загрузка выполняется от имени служебной учетной записи. Отфильтруем журнал регистрации базы-приемника по этому пользователю и событиям синхронизации данных, чтобы убедиться в отсутствии скрытых коллизий.

Способы повторной регистрации данных к выгрузке

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

Способ 1: Использование типовой обработки регистрации изменений

В типовых конфигурациях на базе БСП встроен инструмент «Регистрация изменений для обмена». Открыть его можно из формы настроек синхронизации данных. В дереве метаданных найдем нужный вид документа, нажмем правой кнопкой мыши и выберем Зарегистрировать изменения. Можно зарегистрировать как все документы выбранного типа, так и настроить произвольный отбор по дате или организации.

Способ 2: Сброс номеров сообщений в узле плана обмена

Если требуется повторить отправку пакетов целиком без повторной ручной выборки объектов, можно скорректировать номера сообщений в свойствах узла плана обмена. В базе-источнике значение НомерПринятого устанавливается в 0 или в номер пакета, предшествующего проблемному. В этом случае система повторно включит в следующий пакет все изменения, подтверждение о приеме которых еще не было получено.

Способ 3: Программная перерегистрация объектов через код

Если у вас есть список ссылок, массив объектов или резервная копия, из которой нужно перенести состав изменений, воспользуемся методом менеджера планов обмена ПланыОбмена.ЗарегистрироватьИзменения().

Посмотрим на пример регистрации набора документов по конкретному узлу:


// Получаем узел плана обмена
УзелСинхронизации = ПланыОбмена.СинхронизацияДанныхЧерезУниверсальныйФормат.НайтиПоНаименованию("Бухгалтерия предприятия, ред. 3.0");

Если ЗначениеЗаполнено(УзелСинхронизации) Тогда
    // Запрос для выборки документов за требуемый период
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |	ВозвратТоваровОтКлиента.Ссылка КАК Ссылка
        |ИЗ
        |	Документ.ВозвратТоваровОтКлиента КАК ВозвратТоваровОтКлиента
        |ГДЕ
        |	ВозвратТоваровОтКлиента.Проведен = ИСТИНА
        |	И ВозвратТоваровОтКлиента.Дата >= &ДатаНачала";
    
    Запрос.УстановитьПараметр("ДатаНачала", НачалоДня(ТекущаяДата() - 86400 * 30));
    Выборка = Запрос.Выполнить().Выбрать();
    
    Пока Выборка.Следующий() Цикл
        ПланыОбмена.ЗарегистрироватьИзменения(УзелСинхронизации, Выборка.Ссылка);
    КонецЦикла;
КонецЕсли;

Если список объектов был сохранен в виде уникальных идентификаторов (GUID), восстановим ссылки и зарегистрируем их следующим образом:


// Регистрация объекта по известному УИД
СтрокаУИД = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx";
УникальныйИдентификатор = Новый УникальныйИдентификатор(СтрокаУИД);
СсылкаНаДокумент = Документы.ВозвратТоваровОтКлиента.ПолучитьСсылку(УникальныйИдентификатор);

// Проверяем физическое существование объекта в базе
Если СсылкаНаДокумент.ПолучитьОбъект() <> Неопределено Тогда
    ПланыОбмена.ЗарегистрироватьИзменения(УзелСинхронизации, СсылкаНаДокумент);
КонецЕсли;

После выполнения регистрации запускаем очередную синхронизацию данных и контролируем появление документов в базе 1С:Бухгалтерия предприятия.

← На главную