При настройке и выполнении синхронизации данных между конфигурациями 1С:Управление торговлей 11 и 1С:Бухгалтерия предприятия 3.0 нередко возникают ситуации, когда в процессе загрузки пакета на стороне базы-приемника происходит сбой. В результате в базе-источнике объекты отображаются как отправленные, но в целевую базу они так и не попадают. Разберем по шагам, как устроен механизм регистрации изменений, почему данные не теряются и как правильно устранить возникшую проблему.
Рассмотрим, как платформа 1С управляет составом выгружаемых данных при обмене через планы обмена:
NULL).НомерПринятого). Только после того как база-источник прочтет этот номер, записи об изменениях удаляются из таблицы регистрации.Таким образом, вручную искать, отбирать или заново регистрировать отправленные объекты не требуется: они гарантированно будут повторно выгружены при следующем обмене после устранения ошибки на стороне приемника.
Проанализируем порядок действий для выявления причины сбоя при получении данных:
Журнал регистрации в информационной базе 1С:Бухгалтерия предприятия. Установим отбор по уровню важности «Ошибка» за дату и время выполнения синхронизации. В тексте события будет указан конкретный объект, реквизит или обработчик, на котором прервалось чтение пакета.Если в силу сбоя номеров сообщений или повреждения служебных данных квитанция была ошибочно зафиксирована, а данные в приемник не попали, потребуется вернуть объектам статус «К отправке». Разберем, как это сделать массово.
Способ 1. Использование типовой обработки «Регистрация изменений для обмена данными»
В форме обработки достаточно позиционироваться на корневом узле плана обмена или на конкретном объекте метаданных и выполнить команду «Снять номер сообщения». Команда массово очищает номера исходящих сообщений для всех выбранных записей, переводя их в состояние ожидания выгрузки.
Способ 2. Программный сброс номеров сообщений
Для программного сброса номеров сообщений без потери зарегистрированных изменений используем встроенный метод менеджера планов обмена:
// Очищаем номера сообщений для указанного узла обмена
УзелОбмена = ПланыОбмена.СинхронизацияДанныхЧерезУниверсальныйФормат.НайтиПоКоду("БП");
Если ЗначениеЗаполнено(УзелОбмена) Тогда
// Если второй параметр не передан, очищаются номера для всех изменений данного узла
ПланыОбмена.ОчиститьНомераСообщений(УзелОбмена);
КонецЕсли;
Если размер пакета превышает десятки тысяч объектов (например, более 25 000 элементов), процесс загрузки может прерываться из-за превышения таймаута транзакции или нехватки оперативной памяти на сервере 1С. В таких ситуациях применим следующий алгоритм:
Контрагенты, Номенклатура, ДоговорыКонтрагентов).