При настройке типовой синхронизации данных между конфигурациями 1С:Управление торговлей 11 и 1С:Бухгалтерия предприятия 3.0 на базе универсального формата EnterpriseData нередко возникает ситуация: сеанс обмена завершается без ошибок, в базе-источнике фиксируется отправка пакета, однако в базе-приемнике новые или измененные документы не появляются. Разберем по шагам, почему так происходит, как локализовать причину и как корректно отправить данные повторно.
Проанализируем механизмы работы планов обмена. Когда объект записывается в базе-источнике, в таблице изменений соответствующего узла ставится отметка о необходимости выгрузки. В момент старта обмена формируется пакет, и факт его передачи снимает регистрацию с объекта, даже если внутри обработчиков правил данные были отсечены. Рассмотрим основные причины отсечения:
Чтобы точно понять, выгружаются ли физически данные из УТ 11, выполним следующие действия:
Документ.ВозвратТоваровОтКлиента). Если файл содержит только служебную квитанцию без тел документов, значит, сработал фильтр на стороне источника.Если объекты были зарегистрированы, но после отправки пакета регистрация снялась и данные не дошли, необходимо повторно зарегистрировать их в плане обмена. Рассмотрим штатные и программные способы решения этой задачи.
В типовых конфигурациях на базе БСП встроен инструмент «Регистрация изменений для обмена». Открыть его можно из формы настроек синхронизации данных. В дереве метаданных найдем нужный вид документа, нажмем правой кнопкой мыши и выберем Зарегистрировать изменения. Можно зарегистрировать как все документы выбранного типа, так и настроить произвольный отбор по дате или организации.
Если требуется повторить отправку пакетов целиком без повторной ручной выборки объектов, можно скорректировать номера сообщений в свойствах узла плана обмена. В базе-источнике значение НомерПринятого устанавливается в 0 или в номер пакета, предшествующего проблемному. В этом случае система повторно включит в следующий пакет все изменения, подтверждение о приеме которых еще не было получено.
Если у вас есть список ссылок, массив объектов или резервная копия, из которой нужно перенести состав изменений, воспользуемся методом менеджера планов обмена ПланыОбмена.ЗарегистрироватьИзменения().
Посмотрим на пример регистрации набора документов по конкретному узлу:
// Получаем узел плана обмена
УзелСинхронизации = ПланыОбмена.СинхронизацияДанныхЧерезУниверсальныйФормат.НайтиПоНаименованию("Бухгалтерия предприятия, ред. 3.0");
Если ЗначениеЗаполнено(УзелСинхронизации) Тогда
// Запрос для выборки документов за требуемый период
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВозвратТоваровОтКлиента.Ссылка КАК Ссылка
|ИЗ
| Документ.ВозвратТоваровОтКлиента КАК ВозвратТоваровОтКлиента
|ГДЕ
| ВозвратТоваровОтКлиента.Проведен = ИСТИНА
| И ВозвратТоваровОтКлиента.Дата >= &ДатаНачала";
Запрос.УстановитьПараметр("ДатаНачала", НачалоДня(ТекущаяДата() - 86400 * 30));
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ПланыОбмена.ЗарегистрироватьИзменения(УзелСинхронизации, Выборка.Ссылка);
КонецЦикла;
КонецЕсли;
Если список объектов был сохранен в виде уникальных идентификаторов (GUID), восстановим ссылки и зарегистрируем их следующим образом:
// Регистрация объекта по известному УИД
СтрокаУИД = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx";
УникальныйИдентификатор = Новый УникальныйИдентификатор(СтрокаУИД);
СсылкаНаДокумент = Документы.ВозвратТоваровОтКлиента.ПолучитьСсылку(УникальныйИдентификатор);
// Проверяем физическое существование объекта в базе
Если СсылкаНаДокумент.ПолучитьОбъект() <> Неопределено Тогда
ПланыОбмена.ЗарегистрироватьИзменения(УзелСинхронизации, СсылкаНаДокумент);
КонецЕсли;
После выполнения регистрации запускаем очередную синхронизацию данных и контролируем появление документов в базе 1С:Бухгалтерия предприятия.