Как изменить начальную дату выгрузки документов в 1С, если обмен уже выполнялся?

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

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

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


Почему простое изменение даты в настройках синхронизации не работает?

Для начала проанализируем внутреннее устройство механизмов интеграции 1С. Платформа отслеживает изменения объектов с помощью специального механизма — планов обмена. К каждому плану обмена привязана таблица регистрации изменений. Как только пользователь создает, изменяет или проводит документ, платформа проверяет его на соответствие установленным правилам (включая дату начала обмена) и делает запись в таблицу регистрации: «Объект X изменен и готов к отправке в узел Y».

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


Сценарий 1: Расширение периода выгрузки «назад» (дозагрузка старых документов)

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

Чтобы решить эту задачу, нам необходимо принудительно (вручную) сказать системе, что документы за определенный период требуют отправки. Разберем два основных способа решения этой задачи.

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

В конфигурациях на обычных формах (таких как Управление торговлей 10.3) этот инструмент доступен через главное меню: Операции -> Обработка -> Регистрация изменений для обмена. В управляемых формах (например, в Управлении торговлей 11 или Бухгалтерии предприятия 3.0) эту обработку можно открыть из настроек синхронизации данных, нажав кнопку с пиктограммой монитора («Состав отправляемых данных»).

Выполним регистрацию по шагам:

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

Способ Б. Программная регистрация объектов (для разработчиков)

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


// Определим границы необходимого периода
НачалоПериода = '20190201000000'; // 01.02.2019
КонецПериода  = '20190228235959'; // 28.02.2019

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

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

Важный нюанс: Будет ли задвоение данных?

Один из самых частых страхов пользователей — дублирование документов в базе-приемнике при повторной выгрузке или расширении периода. Задвоения данных не произойдет.

Платформа 1С сопоставляет объекты не по их реквизитам (номеру или дате), а по внутреннему уникальному идентификатору — GUID (UUID). Если документ уже когда-то переносился в базу-приемник, то при повторном обмене система найдет его по этому идентификатору и просто обновит его поля (перезапишет объект), а не создаст новую карточку.


Сценарий 2: Ограничение выгрузки «вперед» и защита закрытых периодов

Теперь проанализируем обратную ситуацию: обмен был настроен с 01.01.2024, но бухгалтерия закрыла первый квартал. Нам нужно сделать так, чтобы документы до 01.04.2024 гарантированно больше не изменялись в базе-приемнике (например, в Бухгалтерии предприятия), даже если менеджер в Управлении торговлей случайно перепроведет или отредактирует старую накладную.

Попытка просто сдвинуть дату начала обмена в настройках источника на 01.04.2024 сопряжена с несколькими техническими сложностями:

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

Безопасное альтернативное решение

Вместо изменения даты начала обмена на стороне источника (УТ) гораздо надежнее и проще использовать штатный механизм Даты запрета загрузки данных на стороне приемника (БП).

Выполним настройку по шагам на стороне 1С:Бухгалтерии предприятия:

  1. Перейдем в раздел Администрирование -> Настройки синхронизации данных.
  2. Установим флаг «Даты запрета загрузки данных» и перейдем по ссылке «Настроить».
  3. Мы можем установить общую дату запрета для всех источников данных или настроить ее индивидуально для нашей синхронизации с УТ. Установим значение даты, равное дате закрытия периода (например, 31.03.2024).

В результате, даже если в базе-источнике менеджеры изменят январский документ, и он принудительно зарегистрируется к обмену и отправится в пакет данных, принимающая база БП 3.0 при импорте проверит дату документа, обнаружит, что она попадает в закрытый период (ранее 31.03.2024), и просто проигнорирует эти изменения, выдав предупреждение в журнале регистрации. Ваши данные в закрытом периоде останутся в полной безопасности.


Резюме

Выяснив особенности работы планов обмена, подведем итоги:

← На главную