При настройке регулярного автоматического обмена между конфигурациями 1С:Управление торговлей 11 и 1С:Бухгалтерия предприятия 3.0 часто возникают специфические задачи. Например, требуется полностью исключить передачу финансово-кассовых документов (поступления денежных средств) или выгружать строго документы за текущий день.
Рассмотрим подробно, как устроена логика синхронизации данных в 1С, почему типовой обмен работает по зарегистрированным изменениям и какими способами можно реализовать поставленные ограничения.
Выясним причину, почему стандартная синхронизация не позволяет в один клик задать динамический фильтр «выгружать только за сегодня». В платформе 1С обмен данными на базе формата EnterpriseData использует план обмена и механизмы подписок на события.
Каждый раз, когда пользователь создает, редактирует или просто перепроводит документ в 1С:Управление торговлей, этот объект автоматически записывается в таблицу регистрации изменений для узла обмена с 1С:Бухгалтерией. При запуске фонового задания выгружаются абсолютно все объекты, находящиеся в таблице регистрации на текущий момент, независимо от даты самого документа.
Если изменить документ за прошлый месяц, он снова попадет в регистрацию и при очередном сеансе связи выгрузится в базу-приемник. Простая однократная очистка списка выгрузки не решит проблему, так как при повторном проведении документа запись возобновится.
Разберем по шагам наиболее простой и штатный способ исключения ненужных типов документов (например, кассовых и банковских поступлений) без программирования:
1С:Бухгалтерией предприятия.Поступление безналичных денежных средств и Приходный кассовый ордер.После применения этих настроек документы указанных видов перестанут попадать в состав выгружаемых данных, даже если они проводятся в базе источника.
Проанализируем ситуацию, когда типовых флагов отбора недостаточно или требуется более тонкая логика. Для этого применяются пользовательские правила регистрации объектов, созданные в программе 1С:Конвертация данных 3.0.
1С:Конвертация данных 3.0.1С:Управление торговлей через форму настройки синхронизации.Посмотрим на задачи, когда необходимо ограничить передачу данных текущей датой. Существует несколько технических решений для выполнения этого условия.
Вариант А: Очистка таблицы регистрации регламентным заданием
Создадим отдельное регламентное задание, которое запускается по расписанию за 2–3 минуты до старта основного обмена. Задание программно обходит зарегистрированные объекты и снимает с регистрации документы, дата которых не соответствует текущему дню.
Пример кода для регламентного задания:
УзелОбмена = ПланыОбмена.СинхронизацияДанныхЧерезУниверсальныйФормат.НайтиПоНаименованию("Бухгалтерия предприятия");
Если ЗначениеЗаполнено(УзелОбмена) Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Изменения.Ссылка КАК Ссылка
|ИЗ
| Документ.ПродажаНакупоны.Изменения КАК Изменения
|ГДЕ
| Изменения.Узел = &УзелОбмена
| И НАЧАЛОПЕРИОДА(Изменения.Ссылка.Дата, ДЕНЬ) <> &ТекущаяДата";
Запрос.УстановитьПараметр("УзелОбмена", УзелОбмена);
Запрос.УстановитьПараметр("ТекущаяДата", НачалоДня(ТекущаяДата()));
Результат = Запрос.Выполнить().Выбрать();
Пока Результат.Следующий() Цикл
ПланыОбмена.УдалитьРегистрациюИзменений(УзелОбмена, Результат.Ссылка);
КонецЦикл;
КонецЕсли;
Вариант Б: Использование расширения конфигурации
Разберем вариант с перехватом события регистрации. В расширении конфигурации подключается обработчик к подписке на событие при записи документа. В теле обработчика проверяется дата объекта:
Если НачалоДня(Источник.Дата) <> НачалоДня(ТекущаяДатаСеанса()) Тогда
ПланыОбмена.УдалитьРегистрациюИзменений(УзелОбмена, Источник.Ссылка);
КонецЕсли;
Вариант В: Установка даты запрета загрузки в базе-приемнике
Если целью является защита прошлых периодов в 1С:Бухгалтерии от случайного изменения, наиболее правильным архитектурным решением будет установка Даты запрета загрузки данных на стороне Бухгалтерии. В этом случае, даже если из УТ передастся измененный документ за прошлую дату, база-приемник пропустит его обработку и не станет перезаписывать данные в закрытом периоде.
Для отключения выгрузки платежных документов достаточно использовать штатный режим отбора по видам документов в настройках синхронизации. Если требуется строго ограничить выгрузку текущей датой, рекомендуется совмещать корректную настройку дат запрета загрузки в базе-приемнике с доработкой правил регистрации или использованием небольшого расширения конфигурации.