При настройке интеграций между конфигурациями 1С (например, из 1С:Бухгалтерия 3.0 в Управление корпоративными финансами) часто возникает задача консолидации данных. Типовой механизм обмена предполагает передачу объектов «один к одному», однако бизнес-логика может требовать, чтобы множество документов (например, «Реализация товаров и услуг») за целый месяц выгружались как один сводный документ в начале следующего месяца. Рассмотрим, как реализовать такую логику с использованием Плана обмена и Конвертации данных 2.1.
Основная проблема заключается в том, что стандартный механизм регистрации изменений в 1С работает пообъектно. Как только документ изменен, он попадает в таблицу регистрации и готов к выгрузке. Чтобы реализовать схему «многие к одному», нам необходимо:
Рассмотрим алгоритм, который предложил автор темы. Он основан на управлении флагом Отказ в правилах выгрузки данных (ПВД). Разберем по шагам, как это работает в Конвертации данных 2.1.
В ПВД для объекта РеализацияТоваровУслуг в обработчике ПередВыгрузкой прописывается логика проверки даты. Если текущая дата еще не достигла «контрольной точки» (например, 4-го числа следующего месяца), выгрузка отменяется, а документ заново регистрируется на узле обмена.
Пример кода для вычисления условий выгрузки:
Сутки = 86400;
_НачалоДняВыгрузки = НачалоДня(ТекущаяДата());
_НачалоМесяцаВыгрузки = НачалоМесяца(ТекущаяДата());
_НачалоПредыдущегоМесяца = ДобавитьМесяц(_НачалоМесяцаВыгрузки, -1);
КоличествоДнейМесяца = День(КонецМесяца(_НачалоПредыдущегоМесяца));
// Проверяем, наступило ли 4-е число месяца, следующего за датой документа
Если Месяц(_НачалоМесяцаВыгрузки) - Месяц(Объект.Дата) >= 1
И _НачалоПредыдущегоМесяца <= _НачалоДняВыгрузки - (КоличествоДнейМесяца + 4) * Сутки Тогда
// Разрешаем выгрузку
Иначе
Отказ = Истина;
// Регистрируем объект повторно, чтобы он не пропал из плана обмена
ПланыОбмена.ЗарегистрироватьИзменения(Параметры.УзелДляОбмена, Объект.Ссылка);
КонецЕсли;
Важное примечание: Постоянная перерегистрация объектов через ЗарегистрироватьИзменения может создавать нагрузку на базу данных и приводить к росту таблиц регистрации. Этот метод подходит для небольших объемов данных.
Более профессиональный подход заключается в использовании ПВД с типом выборки Произвольный алгоритм. Это позволяет не зависеть от каждого конкретного документа на регистрации, а управлять процессом формирования сводного объекта целиком.
Рассмотрим логику реализации через произвольный алгоритм:
РеализацияТоваровУслуг за нужный период.ВыгрузитьПоПравилу.Пример вызова выгрузки сводных данных:
// В обработчике ПВД "ПередВыгрузкой"
Если НужноВыгружатьСводныйДокумент() Тогда
СводныеДанные = СформироватьТаблицуДляВыгрузки();
Для Каждого СтрокаСводки Из СводныеДанные Цикл
// Передаем структуру в ПКО (Правило конвертации объектов)
ВыгрузитьПоПравилу(СтрокаСводки, , , , "СводнаяРеализация");
КонецЦикла;
КонецЕсли;
Поскольку в источнике у нас нет одного физического документа, который соответствует документу в приемнике, в ПКО необходимо правильно настроить поиск. Проанализируем ключевые моменты:
Период + Организация + Контрагент).Источник.ВыгрузитьПоПравилу обязательно передавайте данные в параметре УзелСвойства или через ВходящиеДанные.Выясним, как правильно очищать регистрацию изменений, чтобы документы не выгружались повторно. После того как 4-го числа сводный документ был успешно сформирован и отправлен, необходимо выполнить метод УдалитьРегистрациюИзменений для всех документов за прошлый месяц, которые числятся на узле.
Проанализируем пример кода для очистки:
// После успешной выгрузки сводного документа
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ Ссылка ИЗ Документ.РеализацияТоваровУслуг.Изменения ГДЕ Узел = &Узел";
Запрос.УстановитьПараметр("Узел", Параметры.УзелДляОбмена);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ПланыОбмена.УдалитьРегистрациюИзменений(Параметры.УзелДляОбмена, Выборка.Ссылка);
КонецЦикла;
Рассмотрим важные нюансы, которые помогут избежать ошибок при эксплуатации такого обмена:
РегламентнаяОперация с типом «Закрытие месяца». Это гарантирует, что данные в источнике уже финальные и не изменятся.Таким образом, использование ПВД с произвольным алгоритмом и четко настроенными правилами поиска в ПКО позволяет реализовать гибкую схему консолидации данных, не нарушая целостность типовых механизмов обмена 1С.