#std701

Разработка планов обмена с отборами

1.1.

Для синхронизации между конфигурациями и для РИБ обычно используют планы обмена. Часто требуется передавать не всю базу, а только часть данных, например в разрезе организаций, складов или подразделений.

Узлы-получатели определяйте в событиях #std464: ПередЗаписью и #std752: ПередУдалением. В этих событиях реализуйте логику регистрации изменений на узлах плана обмена (далее - логика регистрации).

Для информации

Если используется подсистема Обмен данными БСП, логику регистрации можно задать декларативно в правилах регистрации объектов (ПРО), которые разрабатываются в конфигурации Конвертация данных. Подробнее см. документацию к подсистеме Обмен данными.

1.2.

При проектировании логики регистрации учитывайте особенности:

  • данные из сообщения обмена загружаются в произвольном порядке, поэтому к моменту регистрации нужных данных может еще не быть;
  • логика регистрации выполняется и при загрузке данных, в транзакции записи объекта; признак ОбменДанными.Загрузка игнорируется, и любая ошибка логики регистрации аварийно завершает загрузку;
  • в РИБ участвуют не все данные: например, движения регистров могут мигрировать между узлами, а регистраторы (документы) - нет;
  • обращение к связанным таблицам «через точку» приводит к неявным соединениям и снижает производительность.

Для информации

При синхронизации с другими программами (не РИБ, по правилам конвертации) через подсистему Обмен данными БСП первые два пункта можно не учитывать в правилах регистрации для ссылочных типов (СправочникСсылка, ДокументСсылка и т. п.). Причина: регистрация ссылочных объектов выполняется отложенно, отдельной операцией, после загрузки всех данных из сообщения обмена.

2.

С учетом этих особенностей придерживайтесь следующих правил.

2.1.

Обеспечивайте самодостаточность данных, участвующих в обмене.

Таблицы обмена (справочники, документы, регистры и т. п.) должны содержать все данные, необходимые для логики регистрации. Логика регистрации должна работать только с данными основной таблицы и не обращаться к полям связанных таблиц.

Пример:

  • данные регистрируются в разрезе организаций;
  • в обмене участвуют две таблицы: документ и регистр накопления с движениями документа;
  • обе таблицы самодостаточны, потому что содержат ссылку на организацию;
  • при записи пользователем и при загрузке логика регистрации срабатывает отдельно для документа и для набора записей регистра.

Если самодостаточность нельзя обеспечить по другим соображениям, рассмотрите варианты из п. 2.2 и 2.3.

2.2.

Исключайте из обмена вторичные данные.

Если данные можно независимо вычислить в каждой базе, исключайте их из плана обмена. Тогда не нужна логика регистрации, которая иначе обращалась бы к связанным таблицам.

Пример:

  • данные регистрируются в разрезе организаций;
  • в обмене участвует только одна таблица - документы поступления товаров;
  • регистр сведений, который определяет права доступа к документам поступления, не самодостаточен (нет ссылки на организацию), поэтому в обмен не включается;
  • данные этого регистра вычисляются независимо в каждом узле РИБ при загрузке документов поступления.
2.3.

Регистрируйте изменения связанных данных.

Если в обмене участвуют несколько логически связанных таблиц, логика регистрации должна регистрировать к выгрузке данные всех таких таблиц, независимо от того, для какой таблицы она выполняется сейчас. Логика регистрации не должна аварийно прерываться, если нужные ей данные временно отсутствуют.

Пример:

  • регистрация идет в разрезе организаций;
  • в обмене участвуют справочник Основные средства и регистр сведений Основные средства организаций, где хранится связь основного средства и организации;
  • при записи элемента справочника и набора записей регистра к выгрузке регистрируются оба объекта;
  • если при загрузке данных сначала загружается элемент справочника, он записывается, но не регистрируется к выгрузке, потому что набор записей регистра еще не загружен;
  • когда позже загружается набор записей регистра, регистрируются изменения и самого набора, и соответствующего элемента справочника.
См. также
Источник

https://its.1c.ru/db/v8std#content:701