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