При настройке обмена данными между конфигурациями 1С на базе Библиотеки стандартных подсистем (БСП) с использованием Конвертации данных 2.1 (КД 2.1) разработчики часто сталкиваются с крайне странным поведением системы. Сценарий выглядит следующим образом: в базе-источнике изменяется или перепроводится документ, но он упорно отказывается регистрироваться на узле плана обмена. При этом правила регистрации объектов (ПРО) настроены корректно, авторегистрация отключена (как того требует методология ИТС), а подписки на события активны. В процессе отладки выясняется, что система даже не пытается анализировать правила регистрации, прерывая выполнение алгоритма на более раннем этапе.
В этой статье мы подробно разберем, почему так происходит, как работает механизм выборочной регистрации объектов БСП «под капотом», и рассмотрим два практических способа решения этой проблемы, включая штатный документированный метод, который позволяет вернуть стандартное платформенное поведение авторегистрации.
Для того чтобы понять логику БСП, проанализируем путь, который проходит объект при записи. За регистрацию изменений в БСП обычно отвечает подписка на событие перед записью объекта, например, ОбменДаннымиСобытия.МеханизмРегистрацииОбъектовПередЗаписьюДокумента (или аналогичная для справочников).
Внутри этого механизма БСП выполняет оптимизацию, призванную снизить нагрузку на базу данных и уменьшить объем передаваемой информации. Эта оптимизация называется «Фильтром выборочной регистрации объектов». Логика разработчиков БСП здесь следующая: зачем регистрировать объект к обмену и отправлять его на другой узел, если в нем изменились только те реквизиты, которые вообще не участвуют в конвертации данных и никак не переносятся в приемник?
Чтобы реализовать эту логику, БСП работает по следующему алгоритму:
ПравилаОбмена.xml) данные записываются в регистр сведений «Правила для обмена данными».ПравилаВыборочнойРегистрацииОбъектов.Такое поведение БСП логично с точки зрения экономии трафика, но оно создает огромные проблемы разработчикам в следующих случаях:
Рассмотрим, какими способами можно решить эту проблему и заставить систему регистрировать объекты корректно.
Если вам необходимо, чтобы объекты регистрировались к обмену при абсолютно любом изменении (как это происходит при стандартной платформенной авторегистрации) и далее обрабатывались в ПРО, этот фильтр можно полностью отключить. Это самый простой и надежный способ, который избавляет от необходимости «раздувать» правила конвертации лишними реквизитами.
Разберем по шагам, как отключить фильтр выборочной регистрации:
ИспользоватьФильтрВыборочнойРегистрацииОбъектов).После отключения этого флага БСП перестанет анализировать состав реквизитов ПКС при записи объектов. При любом изменении объекта система сразу будет передавать управление правилам регистрации объектов (ПРО), где вы уже сможете тонко настроить условия регистрации.
Этот способ подойдет в том случае, если вы хотите сохранить оптимизацию БСП (чтобы база не тратила ресурсы на регистрацию объектов при изменении действительно неважных реквизитов типа «Комментарий»), но при этом вам нужно заставить систему отслеживать изменение конкретных реквизитов, которые не должны физически передаваться в базу-приемник.
Например, у нас есть реквизит СтатусДокумента или какой-то внутренний признак, изменение которого должно приводить к выгрузке документа (поскольку это меняет логику ПРО), но сам этот реквизит в приемнике не нужен или отсутствует.
Разберем, как настроить «фиктивное» правило конвертации свойства в конфигурации «Конвертация данных 2.1»:
СтатусДокумента), а приемник оставьте пустым.
// Отменяем выгрузку значения свойства в файл обмена
Значение = Неопределено;
Отказ = Истина;
Как это работает: При загрузке правил обмена в базу БСП увидит, что для реквизита СтатусДокумента определено правило конвертации (ПКС). Система послушно добавит его в список отслеживаемых в параметре сеанса ПравилаВыборочнойРегистрацииОбъектов. При изменении этого реквизита документ будет успешно зарегистрирован к обмену. Однако в момент непосредственной выгрузки сработает обработчик «При выгрузке», значение будет сброшено, и оно не попадет в файл обмена, тем самым не вызывая ошибок в базе-приемнике.
Иногда в процессе работы обменов возникает необходимость принудительно переотправить документы, которые по какой-то причине не зарегистрировались автоматически (например, если правила были настроены некорректно или произошел сбой). Менять реквизиты документов вручную ради этого — плохая практика.
Для решения таких задач в БСП предусмотрена штатная обработка «Регистрация изменений для обмена данными». Рассмотрим особенности работы с ней:
Мы выяснили, что поведение БСП, при котором изменения объектов не регистрируются из-за отсутствия реквизитов в правилах конвертации (ПКО), является штатным и задокументированным механизмом оптимизации.
Для обхода этой проблемы разработчику совершенно не обязательно вручную добавлять сотни реквизитов в ПКО и отключать их галочками. Наиболее эффективным решением является снятие флажка выборочной регистрации в регистре «Правила для обмена данными». Это позволяет вернуть стандартное, интуитивно понятное поведение системы, при котором любое изменение объекта инициирует проверку правил регистрации (ПРО).