Как настроить обмен данными между УТ 11 и БП 3.0 с ограничением по дате окончания выгрузки?

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

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

Анализ штатного механизма синхронизации

Проанализируем ситуацию: современная синхронизация в 1С построена на формате Enterprise Data (КД 3.0). Логика системы предполагает, что обмен — это процесс поддержания актуальности данных в реальном времени. Если документ был изменен, он регистрируется в плане обмена и должен быть передан в базу-приемник. Отсутствие даты конца — это не ошибка, а концепция «непрерывного потока». Однако в реальной практике часто возникает потребность перенести данные только за конкретный месяц или квартал, не затрагивая оперативные данные текущего периода.

Решение 1: Использование правил Конвертации данных 2.0 (XML)

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

Разберем алгоритм действий:

  1. Подготовка правил: Нам необходимо создать или найти правила обмена в формате .xml. Поскольку в современных релизах УТ 11 типовые правила КД 2.0 могут отсутствовать в дистрибутиве, их можно сформировать самостоятельно в конфигурации Конвертация данных 2.0, загрузив структуру метаданных обеих баз.
  2. Настройка выгрузки: Используем внешнюю обработку V8Ex30.epf (или встроенную «Универсальный обмен данными»). В ней выбираем файл правил и устанавливаем требуемый период.
  3. Преимущества: Полный контроль над выборкой данных. Мы можем настроить фильтры по любым реквизитам, включая дату документа «До».

Решение 2: Модификация правил регистрации объектов (ПРО)

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

В КД 2.0 (в части регистрации) можно прописать условие, при котором объект не будет попадать в очередь обмена, если его дата превышает заданную. Для этого в событии Перед обработкой для конкретного объекта метаданных (например, РеализацияТоваровУслуг) прописывается код:


// Пример условия в правилах регистрации объектов
ДатаОкончанияОбмена = '20231231235959'; // Условная дата конца периода
Если Объект.Дата > ДатаОкончанияОбмена Тогда
    Отказ = Истина;
КонецЕсли;

Проанализируем этот подход: объект просто не будет регистрироваться на узле плана обмена. Это самый «чистый» способ для системы, так как он не создает лишней нагрузки на транспортный канал. Однако стоит помнить, что ДатаОкончанияОбмена в коде — это не всегда удобно. Лучше вынести её в дополнительную константу или параметр, который бухгалтер сможет менять самостоятельно.

Решение 3: Программная очистка узла плана обмена

Выясним причину, почему документы «будущего периода» все равно улетают в обмен. Это происходит потому, что они зарегистрированы на узле обмена. Мы можем автоматизировать процесс очистки регистрации. Рассмотрим пример кода, который можно запускать перед началом сеанса синхронизации через регламентное задание или обработку:


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

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

Решение 4: Доработка модуля менеджера обмена (Enterprise Data / КД 3.0)

Для тех, кто предпочитает использовать современный формат Enterprise Data, решение кроется в Модуле менеджера обмена через универсальный формат. В этом модуле определяются правила, по которым данные подготавливаются к отправке.

Рассмотрим по шагам, как добавить фильтр:

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

Например, в процедуре ДобавитьПланыОбмена или при инициализации параметров обмена можно добавить проверку:


// В расширении модуля менеджера обмена
&После("ЗаполнитьНастройкиОбмена")
Процедура Расш_ЗаполнитьНастройкиОбмена(Настройки)
    // Здесь можно программно внедрить ограничение, 
    // если логика обмена позволяет использовать дополнительные фильтры
КонецПроцедуры

Резюме и рекомендации

Выбор метода зависит от ваших компетенций и требований к обновляемости базы:

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

← На главную