#std701¶
Разработка планов обмена с отборами¶
1.1.¶
Для синхронизации между конфигурациями и для РИБ обычно используют планы обмена. Часто требуется передавать не всю базу, а только часть данных, например в разрезе организаций, складов или подразделений.
Узлы-получатели определяйте в событиях #std464: ПередЗаписью и #std752: ПередУдалением. В этих событиях реализуйте логику регистрации изменений на узлах плана обмена (далее - логика регистрации).
Для информации
Если используется подсистема Обмен данными БСП, логику регистрации можно задать декларативно в правилах регистрации объектов (ПРО), которые разрабатываются в конфигурации Конвертация данных.
Подробнее см. документацию к подсистеме Обмен данными.
1.2.¶
При проектировании логики регистрации учитывайте особенности:
- данные из сообщения обмена загружаются в произвольном порядке, поэтому к моменту регистрации нужных данных может еще не быть;
- логика регистрации выполняется и при загрузке данных, в транзакции записи объекта; признак
ОбменДанными.Загрузкаигнорируется, и любая ошибка логики регистрации аварийно завершает загрузку; - в РИБ участвуют не все данные: например, движения регистров могут мигрировать между узлами, а регистраторы (документы) - нет;
- обращение к связанным таблицам «через точку» приводит к неявным соединениям и снижает производительность.
Для информации
При синхронизации с другими программами (не РИБ, по правилам конвертации) через подсистему Обмен данными БСП первые два пункта можно не учитывать в правилах регистрации для ссылочных типов (СправочникСсылка, ДокументСсылка и т. п.).
Причина: регистрация ссылочных объектов выполняется отложенно, отдельной операцией, после загрузки всех данных из сообщения обмена.
2.¶
С учетом этих особенностей придерживайтесь следующих правил.
2.1.¶
Обеспечивайте самодостаточность данных, участвующих в обмене.
Таблицы обмена (справочники, документы, регистры и т. п.) должны содержать все данные, необходимые для логики регистрации. Логика регистрации должна работать только с данными основной таблицы и не обращаться к полям связанных таблиц.
Пример:
- данные регистрируются в разрезе организаций;
- в обмене участвуют две таблицы: документ и регистр накопления с движениями документа;
- обе таблицы самодостаточны, потому что содержат ссылку на организацию;
- при записи пользователем и при загрузке логика регистрации срабатывает отдельно для документа и для набора записей регистра.
Если самодостаточность нельзя обеспечить по другим соображениям, рассмотрите варианты из п. 2.2 и 2.3.
2.2.¶
Исключайте из обмена вторичные данные.
Если данные можно независимо вычислить в каждой базе, исключайте их из плана обмена. Тогда не нужна логика регистрации, которая иначе обращалась бы к связанным таблицам.
Пример:
- данные регистрируются в разрезе организаций;
- в обмене участвует только одна таблица - документы поступления товаров;
- регистр сведений, который определяет права доступа к документам поступления, не самодостаточен (нет ссылки на организацию), поэтому в обмен не включается;
- данные этого регистра вычисляются независимо в каждом узле РИБ при загрузке документов поступления.
2.3.¶
Регистрируйте изменения связанных данных.
Если в обмене участвуют несколько логически связанных таблиц, логика регистрации должна регистрировать к выгрузке данные всех таких таблиц, независимо от того, для какой таблицы она выполняется сейчас. Логика регистрации не должна аварийно прерываться, если нужные ей данные временно отсутствуют.
Пример:
- регистрация идет в разрезе организаций;
- в обмене участвуют справочник
Основные средстваи регистр сведенийОсновные средства организаций, где хранится связь основного средства и организации; - при записи элемента справочника и набора записей регистра к выгрузке регистрируются оба объекта;
- если при загрузке данных сначала загружается элемент справочника, он записывается, но не регистрируется к выгрузке, потому что набор записей регистра еще не загружен;
- когда позже загружается набор записей регистра, регистрируются изменения и самого набора, и соответствующего элемента справочника.
См. также¶
- #std477: Самодостаточность регистров
- #std654: Разыменование ссылочных полей составного типа в языке запросов