Почему не все документы выгружаются при синхронизации 1С:УТ 11 и 1С:БП 3? Разбор работы планов обмена и регистраций

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

При настройке регулярной синхронизации между программами «1С:Управление торговлей» (ред. 11) и «1С:Бухгалтерия предприятия» (ред. 3.0) пользователи часто сталкиваются с неочевидным поведением системы. Типичная ситуация: вам необходимо выгрузить документы за прошлый период (например, восстановить потерянные данные за прошлый месяц), вы изменяете дату начала выгрузки в настройках обмена на более раннюю, запускаете синхронизацию, но в результирующий файл старые документы всё равно не попадают. Для управления расписанием и автоматизации таких процессов применяется программа для регулярного обмена данными между базами 1С.

В этой статье мы подробно разберем логику работы планов обмена в платформе «1С:Предприятие», выясним, почему простое изменение даты в настройках не заставляет программу «видеть» старые документы, и рассмотрим практические способы решения этой проблемы.

---

Выясняем причину: как на самом деле работает настройка «Отправлять все, начиная с даты»

Одно из самых распространенных заблуждений пользователей заключается в том, что изменение даты начала обмена в настройках синхронизации заставляет систему сканировать базу данных за весь указанный период. На самом деле это работает совершенно иначе.

Параметр «Отправлять все, начиная с даты» — это жесткий фильтр (ограничение) на стороне механизма отправки, а не триггер для регистрации данных. Рассмотрим этот процесс по шагам:

  1. Когда вы создаете или изменяете документ в «1С:Управлении торговлей», платформа автоматически фиксирует этот факт и записывает ссылку на измененный объект в специальную таблицу — таблицу регистрации изменений конкретного плана обмена (например, ОбменУправлениеТорговлейБухгалтерияПредприятия30).
  2. Во время запуска синхронизации система считывает записи именно из этой таблицы регистрации изменений.
  3. Перед тем как поместить зарегистрированный документ в файл выгрузки, система сопоставляет его дату с установленным фильтром «Отправлять все, начиная с даты».
  4. Если дата документа меньше установленной в фильтре, он просто отбрасывается и не попадает в файл. Если больше или равна — выгружается.

Таким образом, если вы изменили дату начала обмена «назад» (например, с апреля на март), автоматической регистрации мартовских документов не произойдет. Программа просто разрешит их выгрузку в случае, если они будут зарегистрированы (например, если вы откроете старый документ, измените его и перепроведете). Без явного изменения объектов или их принудительной ручной регистрации таблицы обмена останутся пустыми для этого периода.

Важное ограничение: если вы попытаетесь зарегистрировать документ за дату, которая меньше установленной в фильтре настроек синхронизации, платформа 1С проигнорирует эту регистрацию при выгрузке. Поэтому порядок действий всегда должен быть следующим: сначала сдвигаем дату начала обмена назад в настройках синхронизации, и только после этого регистрируем документы к обмену.

---

Разбираем «эффект квитанции»: почему при повторной выгрузке формируется один и тот же файл

Рассмотрим ситуацию, когда при многократном запуске выгрузки (без изменения данных в базах) в файл попадает один и тот же массив документов. Почему так происходит?

В классическом двустороннем обмене 1С используется механизм квитирования (подтверждения приема). Он работает по следующему алгоритму:

  1. База-источник (УТ) выгружает зарегистрированные документы в файл и присваивает пакету уникальный номер (например, номер сообщения 15). При этом документы не удаляются из таблицы регистрации изменений, а лишь помечаются как отправленные в сообщении №15.
  2. База-приемник (БП) успешно загружает этот файл и формирует ответное сообщение (квитанцию), в котором указывает: «Пакет №15 успешно получен и прочитан».
  3. При следующем сеансе связи УТ считывает файл-ответ от БП. Только после этого УТ очищает свою таблицу регистрации изменений от тех объектов, которые были отправлены в пакете №15.

Если ваши базы данных работают локально (например, на разных компьютерах без прямой сетевой связи) и вы обмениваетесь файлами вручную (через флешку или по электронной почте), очень часто обратный файл (квитанция) из Бухгалтерии просто не загружается обратно в Управление торговлей.

В результате УТ «не знает», дошли ли документы до адресата, и при каждой последующей обычной выгрузке продолжает упаковывать те же самые документы в новые файлы обмена. Как только вы измените правила или очистите регистрацию вручную, этот «хвост» пропадет.

---

Способ 1. Синхронизация с дополнительными параметрами (Интерактивный режим)

Если вам требуется разово выгрузить документы за определенный период (например, восстановить пропущенный месяц), самым простым и безопасным способом является использование интерактивной выгрузки.

Рассмотрим, как запустить этот процесс по шагам:

  1. Перейдем в раздел НСИ и администрирование — Синхронизация данных — Настройки синхронизации. При планировании перехода или смены редакции доступен подбор решений для переноса данных в 1С:Управление торговлей.
  2. Выделим нашу настройку обмена с Бухгалтерией предприятия.
  3. Вместо обычной кнопки «Синхронизировать» нажмем на кнопку с выпадающим меню и выберем пункт «Синхронизировать с дополнительными параметрами».
  4. В открывшемся помощнике выберем режим «Выгрузить интерактивно» и нажмем «Далее».
  5. На этапе настройки выгрузки выберем вариант «Выгрузить только выбранные» или воспользуемся ссылкой настройки параметров, где укажем период (например, весь прошлый месяц) и конкретные виды документов, которые требуется отправить.
  6. Программа самостоятельно выполнит запрос к базе данных в обход стандартных таблиц регистрации изменений, сформирует пакет данных за указанный период и выгрузит его в файл.

Этот метод хорош тем, что он не затрагивает текущие настройки автоматической синхронизации и не требует от вас детального понимания механизмов планов обмена.

---

Способ 2. Использование обработки «Регистрация изменений для обмена»

Для более гибкого управления обменом и очистки «зависших» регистраций нам потребуется стандартный инструмент платформы — обработка регистрации изменений.

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

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

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

---

Способ 3. Программный метод регистрации изменений для разработчиков

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


// Выберем узел плана обмена, для которого регистрируем данные
УзелОбмена = ПланыОбмена.ОбменУправлениеТорговлейБухгалтерияПредприятия30.НайтиПоКоду("БП");

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

---

Неочевидный нюанс: Проверяем дату запрета загрузки в базе-приемнике

Иногда возникает ситуация, когда в базе УТ выгрузка проходит без ошибок, все документы регистрируются и записываются в XML-файл обмена (это можно проверить, открыв zip-архив выгрузки текстовым редактором), но после загрузки файла в «1С:Бухгалтерию» документов там не оказывается.

В этом случае проанализируем настройки безопасности в информационной базе Бухгалтерии:

← На главную