При настройке штатной синхронизации между конфигурациями «Управление торговлей 11» и «Бухгалтерия предприятия 3.0» многие специалисты сталкиваются с архитектурным ограничением: в настройках плана обмена можно указать только Дату начала выгрузки документов. Поле Дата окончания отсутствует, что делает невозможным штатную выгрузку данных за строго определенный закрытый период без захвата более поздних документов. Рассмотрим, почему это реализовано именно так, и разберем по шагам несколько способов решения этой задачи.
Проанализируем ситуацию: современная синхронизация в 1С построена на формате Enterprise Data (КД 3.0). Логика системы предполагает, что обмен — это процесс поддержания актуальности данных в реальном времени. Если документ был изменен, он регистрируется в плане обмена и должен быть передан в базу-приемник. Отсутствие даты конца — это не ошибка, а концепция «непрерывного потока». Однако в реальной практике часто возникает потребность перенести данные только за конкретный месяц или квартал, не затрагивая оперативные данные текущего периода.
Если штатная синхронизация не подходит из-за своей жесткой логики, мы можем вернуться к «классическому» методу через обработку Универсальный обмен данными в формате XML. Этот метод позволяет задать произвольный период (и начало, и конец) непосредственно перед запуском выгрузки.
Разберем алгоритм действий:
.xml. Поскольку в современных релизах УТ 11 типовые правила КД 2.0 могут отсутствовать в дистрибутиве, их можно сформировать самостоятельно в конфигурации Конвертация данных 2.0, загрузив структуру метаданных обеих баз.V8Ex30.epf (или встроенную «Универсальный обмен данными»). В ней выбираем файл правил и устанавливаем требуемый период.Если мы хотим оставить штатную синхронизацию (чтобы обмен работал по расписанию), но ограничить выгрузку сверху, нам необходимо вмешаться в механизм регистрации изменений. Рассмотрим подробнее, как работают Правила регистрации объектов.
В КД 2.0 (в части регистрации) можно прописать условие, при котором объект не будет попадать в очередь обмена, если его дата превышает заданную. Для этого в событии Перед обработкой для конкретного объекта метаданных (например, РеализацияТоваровУслуг) прописывается код:
// Пример условия в правилах регистрации объектов
ДатаОкончанияОбмена = '20231231235959'; // Условная дата конца периода
Если Объект.Дата > ДатаОкончанияОбмена Тогда
Отказ = Истина;
КонецЕсли;
Проанализируем этот подход: объект просто не будет регистрироваться на узле плана обмена. Это самый «чистый» способ для системы, так как он не создает лишней нагрузки на транспортный канал. Однако стоит помнить, что ДатаОкончанияОбмена в коде — это не всегда удобно. Лучше вынести её в дополнительную константу или параметр, который бухгалтер сможет менять самостоятельно.
Выясним причину, почему документы «будущего периода» все равно улетают в обмен. Это происходит потому, что они зарегистрированы на узле обмена. Мы можем автоматизировать процесс очистки регистрации. Рассмотрим пример кода, который можно запускать перед началом сеанса синхронизации через регламентное задание или обработку:
Процедура ОчиститьРегистрациюНаБудущее(УзелИнформационнойБазы, ДатаКонца)
Выборка = ПланыОбмена.ВыбратьИзменения(УзелИнформационнойБазы, 1);
Пока Выборка.Следующий() Цикл
ОбъектДанных = Выборка.Данные;
// Проверяем, есть ли у объекта реквизит "Дата" и превышает ли она лимит
Если ОбщегоНазначения.ЕстьРеквизитОбъекта("Дата", ОбъектДанных.Метаданные()) Тогда
Если ОбъектДанных.Дата > ДатаКонца Тогда
// Удаляем регистрацию изменения
ПланыОбмена.УдалитьРегистрациюИзменений(УзелИнформационнойБазы, ОбъектДанных);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Посмотрим на этот метод: он позволяет оставить типовую конфигурацию на поддержке, реализовав логику во внешней обработке или небольшом расширении. Мы программно «снимаем с пробега» те документы, которые еще рано передавать в бухгалтерию.
Для тех, кто предпочитает использовать современный формат Enterprise Data, решение кроется в Модуле менеджера обмена через универсальный формат. В этом модуле определяются правила, по которым данные подготавливаются к отправке.
Рассмотрим по шагам, как добавить фильтр:
Объект.Дата. В КД 3.0 это часто реализуется через перехват метода ПриОтправкеДанных в модуле менеджера или через фильтрацию в запросе формирования выборки.Например, в процедуре ДобавитьПланыОбмена или при инициализации параметров обмена можно добавить проверку:
// В расширении модуля менеджера обмена
&После("ЗаполнитьНастройкиОбмена")
Процедура Расш_ЗаполнитьНастройкиОбмена(Настройки)
// Здесь можно программно внедрить ограничение,
// если логика обмена позволяет использовать дополнительные фильтры
КонецПроцедуры
Выбор метода зависит от ваших компетенций и требований к обновляемости базы:
Универсальный обмен данными.Важно помнить: при использовании даты окончания вы рискуете тем, что документы, измененные задним числом в закрытом периоде, могут не попасть в обмен, если вы жестко ограничите регистрацию. Всегда проверяйте актуальность данных в обеих базах после проведения подобных процедур.