При регулярной синхронизации данных между конфигурациями 1С:Управление торговлей и 1С:Розница периодически возникает ситуация, когда изменения по определенным документам не попадают в базу-приемник. В таких случаях требуется выполнить повторную отправку документов за определенный период (например, за последние 2–3 месяца). Разберем по шагам, почему возникает эта проблема, как зарегистрировать нужные данные к отправке вручную и программно, а также какие нюансы важно учесть при передаче больших объемов информации.
Прежде чем приступать к принудительной выгрузке, проанализируем базовые механизмы подсистемы синхронизации данных БСП (Библиотеки стандартных подсистем). Данные могут не попадать во вторую базу по следующим причинам:
НомерОтправленного и НомерПринятого квитанция о доставке подтверждается некорректно, в результате чего база-источник ошибочно снимает объекты с регистрации.Рассмотрим основной и самый наглядный пользовательский способ регистрации документов к обмену с помощью встроенного инструмента БСП.
РегистрацияИзмененийДляОбмена.Также простым, но ресурсоемким вариантом для небольшого количества документов является их простое групповое перепроведение: при записи каждого объекта механизм БСП регистрирует его в плане обмена автоматически.
Разберем программный способ с использованием встроенного языка 1С. Этот метод удобен, когда требуется автоматизировать повторную выгрузку по сложному условию или через внешнюю обработку.
Для постановки объекта в очередь обмена используется процедура менеджера планов обмена ПланыОбмена.ЗарегистрироватьИзменения(). Посмотрим на пример кода, позволяющего зарегистрировать конкретный справочник целиком:
// Пример полной регистрации метаданных справочника
Узел = ПланыОбмена.ОбменУправлениеТорговлейРозница.НайтиПоКоду("РТ");
Если ЗначениеЗаполнено(Узел) Тогда
МетаданныеОбъекта = Метаданные.Справочники.Номенклатура;
ПланыОбмена.ЗарегистрироватьИзменения(Узел, МетаданныеОбъекта);
КонецЕсли;
Теперь рассмотрим более сложный практический пример: зарегистрируем документы по конкретному складу за выбранный интервал времени с помощью запроса:
// Выбираем документы за период по определенному складу
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Ссылка
|ИЗ
| Документ.ПриобретениеТоваровУслуг
|ГДЕ
| Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
| И Склад = &Склад";
Запрос.УстановитьПараметр("ДатаНачала", НачалоДня(ДобавитьМесяц(ТекущаяДата(), -3)));
Запрос.УстановитьПараметр("ДатаОкончания", КонецДня(ТекущаяДата()));
Запрос.УстановитьПараметр("Склад", Справочники.Склады.НайтиПоНаименованию("Основной склад"));
Выборка = Запрос.Выполнить().Выбрать();
Узел = ПланыОбмена.ОбменУправлениеТорговлейРозница.НайтиПоКоду("РТ");
Пока Выборка.Следующий() Цикл
// Регистрируем каждый найденный документ для выбранного узла
ПланыОбмена.ЗарегистрироватьИзменения(Узел, Выборка.Ссылка);
КонецЦикла;
После выполнения данного скрипта при следующем сеансе синхронизации все отобранные документы будут упакованы в исходящее сообщение обмена.
Проанализируем потенциальные сложности, с которыми можно столкнуться при регистрации документов за 2–3 месяца: