Как повторно отправить документы при синхронизации между УТ и Розницей

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

При регулярной синхронизации данных между конфигурациями 1С:Управление торговлей и 1С:Розница периодически возникает ситуация, когда изменения по определенным документам не попадают в базу-приемник. В таких случаях требуется выполнить повторную отправку документов за определенный период (например, за последние 2–3 месяца). Разберем по шагам, почему возникает эта проблема, как зарегистрировать нужные данные к отправке вручную и программно, а также какие нюансы важно учесть при передаче больших объемов информации.

Выясним причины, почему изменения не передаются

Прежде чем приступать к принудительной выгрузке, проанализируем базовые механизмы подсистемы синхронизации данных БСП (Библиотеки стандартных подсистем). Данные могут не попадать во вторую базу по следующим причинам:

  1. Фильтры в настройках синхронизации: в свойствах узла плана обмена могут быть настроены ограничения по организациям, складам, подразделениям или установлена дата начала обмена («Синхронизировать данные, начиная с даты»). Документы, не попадающие под эти критерии, исключаются из выгрузки правилами регистрации объектов (ПРО).
  2. Даты запрета загрузки: в базе-приемнике может быть активирована дата запрета изменения или специализированная дата запрета загрузки данных для конкретного узла. В этом случае файл обмена формируется корректно, но база-приемник игнорирует входящие документы за закрытый период.
  3. Коллизии и конфликты синхронизации: если документ был одновременно отредактирован в обеих информационных базах, при обмене срабатывает автоматическое разрешение конфликтов, и изменения из источника могут быть отклонены в пользу версии приемника.
  4. Сбой нумерации сообщений: при рассинхронизации реквизитов НомерОтправленного и НомерПринятого квитанция о доставке подтверждается некорректно, в результате чего база-источник ошибочно снимает объекты с регистрации.

Способ 1. Регистрация изменений через стандартную обработку

Рассмотрим основной и самый наглядный пользовательский способ регистрации документов к обмену с помощью встроенного инструмента БСП.

  1. Перейдем в раздел НСИ и администрирование — Синхронизация данных — Настройки синхронизации данных.
  2. Выделим нужную настройку обмена с 1С:Розницей и на панели инструментов нажмем кнопку с пиктограммой лупы (или выберем пункт Состав отправляемых данных). Откроется форма обработки РегистрацияИзмененийДляОбмена.
  3. В дереве метаданных найдем нужный вид документа (например, Реализация товаров и услуг или Поступление товаров и услуг).
  4. Нажмем на кнопку Зарегистрировать и выберем вариант По отбору....
  5. В окне настройки отбора укажем требуемый период (например, последние 2–3 месяца) и при необходимости зададим фильтр по организации или складу.
  6. Нажмем ОК. Выбранные документы встанут в очередь на отправку.
  7. Вернемся в окно синхронизации и нажмем кнопку Синхронизировать для запуска обмена.

Также простым, но ресурсоемким вариантом для небольшого количества документов является их простое групповое перепроведение: при записи каждого объекта механизм БСП регистрирует его в плане обмена автоматически.

Способ 2. Программная регистрация изменений

Разберем программный способ с использованием встроенного языка 1С. Этот метод удобен, когда требуется автоматизировать повторную выгрузку по сложному условию или через внешнюю обработку.

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


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

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


// Выбираем документы за период по определенному складу
Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |    Ссылка
    |ИЗ
    |    Документ.ПриобретениеТоваровУслуг
    |ГДЕ
    |    Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
    |    И Склад = &Склад";

Запрос.УстановитьПараметр("ДатаНачала", НачалоДня(ДобавитьМесяц(ТекущаяДата(), -3)));
Запрос.УстановитьПараметр("ДатаОкончания", КонецДня(ТекущаяДата()));
Запрос.УстановитьПараметр("Склад", Справочники.Склады.НайтиПоНаименованию("Основной склад"));

Выборка = Запрос.Выполнить().Выбрать();

Узел = ПланыОбмена.ОбменУправлениеТорговлейРозница.НайтиПоКоду("РТ");

Пока Выборка.Следующий() Цикл
    // Регистрируем каждый найденный документ для выбранного узла
    ПланыОбмена.ЗарегистрироватьИзменения(Узел, Выборка.Ссылка);
КонецЦикла;

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

Риски и рекомендации при отправке больших объемов данных

Проанализируем потенциальные сложности, с которыми можно столкнуться при регистрации документов за 2–3 месяца:

  1. Переполнение памяти и таймауты: попытка выгрузить огромный массив данных одним пакетом может привести к ошибке нехватки памяти (особенно при работе на 32-разрядном сервере) или к разрыву соединения по таймауту. Рекомендуется регистрировать и передавать документы порциями — по неделям или месяцам.
  2. Блокировки в рабочей базе: массовое проведение документов на стороне Розницы накладывает транзакционные блокировки на регистры накопления, что способно замедлить работу кассиров и пользователей в торговом зале. Масштабную выгрузку лучше запускать во внерабочее время.
  3. Проверка даты запрета загрузки: обязательно убедимся в базе 1С:Розница, что дата запрета загрузки смещена назад относительно периода выгружаемых документов, иначе изменения будут отклонены при чтении сообщения.
← На главную