Инструменты пользователя

Инструменты сайта


1s:8:synchronization:accounting30_hrm3_bug-fix-01:accounting30_hrm3_bug-fix-01

Совместная работа БП 3.0 и ЗУП 3.1. Устранение ошибки синхронизации персональных данных физических лиц.

При совместной работе конфигураций БП 3.0 и ЗУП 3.1 с использованием встроенного плана обмена ОбменЗарплата3Бухгалтерия3 персональные данные физических лиц передаются некорректно. Это связано с ошибкой в правилах обмена (замшелой уже, с учётом того, сколько времени эта ошибка «кочует» из версии в версию правил). Суть ошибки в том, что в алгоритме ВыгрузитьСведенияФизическогоЛица некорректно указаны условия отбора (аж три раза…). Вместо GUID объекта <Источник.Ссылка> в процедуру отбора в качестве параметра передаётся абстрактнейшее <Источник>.

Правила обмена, используемые по умолчанию, встроены в план обмена в виде набора шаблонов. Убедимся, что в исследуемых нами релизах ошибка присутствует:

Иллюстрации ошибки

Иллюстрации ошибки

Исправление

Для исправления ситуации необходимо выгрузить правила в соответствующие xml файлы (с помощью буфера обмена или через меню Файл/Сохранить как… ), исправить ошибки и загрузить изменённые файлы правил при настройке синхронизации.

Комплект правил плана обмена ОбменЗарплата3Бухгалтерия3 состоит из следующих правил:

  • Регистрации
  • Обмена
  • Обмена корреспондента

В режиме Конфигуратор правила доступны здесь:

Общие
Планы обмена
ОбменЗарплата3Бухгалтерия3
Макеты

Таблица соответствия объектов типа Макет и файлов:

МакетФайл
ПравилаРегистрацииRegistrationRules.xml
ПравилаОбменаExchangeRules.xml
ПравилаОбменаКорреспондентаCorrespondentExchangeRules.xml

Правила именования архива для файлов

FIXME

В плане обменаОбменЗарплата3Бухгалтерия3 открываем макет ПравилаОбмена и находим в нём:

  • БП
    <Наименование>ЗУП 3.1.9 --&gt; БП 3.0.68</Наименование> 

    Значит имя архива: accounting_3.0.68-hrm_3.1.9-rulespersdata

  • ЗУП
    <Наименование>ЗУП 3.1.9 --&gt; БП 3.0.68</Наименование>

    Значит имя архива: hrm_3.1.9-accounting_3.0.68-rulespersdata

Для архива с оригиналами используем суффикс _orig

Подготовка архива

Для подготовки архива создадим папку (например, с именем RulesPersData), создадим в ней файлы RegistrationRules.xml, ExchangeRules.xml, CorrespondentExchangeRules.xml путём копирования содержимого соответствующих шаблонов. Откорректируем созданные файлы и упакуем их в архив. При настройке синхронизации, данный архив будет использован в качестве источника для загрузки правил обмена. При настройке синхронизации есть возможность загрузить каждые правила из отдельного xml файла, либо в виде архива, содержащего эти файлы. В связи с тем, что необходимо корректировать несколько файлов, логичнее подготовить архив.

Для работы с правилами регистрации и правилами обмена формата 2 существует специальная конфигурация Конвертация данных 2.1. В случае разработки собственных правил или доработки существующих, настоятельно рекомендуется использовать для этого данную конфигурацию. В нашем случае имеет место банальное исправление ошибки, поэтому мы считаем, что корректно будет просто внести изменения любым текстовым редактором, не изменяя при этом Идентификатор правил.

:!: Правила обмена, встроенные в конфигурацию, время от времени редактируются разработчиками, поэтому при обновлении конфигурации рекомендуется проверять, отличаются ли правила обмена в новом релизе от тех, которые были нами откорректированы. В случае наличия изменений и наличия данной ошибки, рекомендуется загрузить новые правила, предварительно исправив ошибку.
Если же ошибка наконец-то будет исправлена разработчиками, необходимо в настройке синхронизации указать, что будут использоваться встроенные правила обмена.

Ниже приведены примеры исправления для БП 3.0 и ЗУП 3.1.

CorrespondentExchangeRules.xml, ExchangeRules.xml

В файлах:

  • CorrespondentExchangeRules.xml
  • ExchangeRules.xml

нужно произвести следующие замены:

  1. найти:

    НаборЗаписей.Отбор.ФизическоеЛицо.Установить(Источник);

    заменить:

    НаборЗаписей.Отбор.ФизическоеЛицо.Установить(Источник.Ссылка);
  2. найти:

    НаборЗаписей.Отбор.Физлицо.Установить(Источник);

    заменить:

    НаборЗаписей.Отбор.Физлицо.Установить(Источник.Ссылка);

RegistrationRules.xml

В файле RegistrationRules.xml у объекта:

<ОбъектМетаданныхИмя>Справочник.ФизическиеЛица</ОбъектМетаданныхИмя>

нужно найти:

<РеквизитРежимаВыгрузки>РежимВыгрузкиПриНеобходимости</РеквизитРежимаВыгрузки>

и заменить на:

<РеквизитРежимаВыгрузки>РежимВыгрузкиПерсональныеДанные</РеквизитРежимаВыгрузки>

Архивы

Ответы

Про ошибки

Первоначальное состояние

Зарплата считалась в ЗУП 2.5, данные о физических лицах (в том числе, об их документах) заполнялись в ней. В БП 3.0 данные о физических лицах передавались по ссылке, с документами обмена (через обработку выгрузки данных в бухгалтерскую программу). В процессе перехода на ЗУП 3.1 данные были перенесены в данную конфигурацию, после чего встала задача настройки синхронизации между базами через план обмена.

Используемые при настройке версии конфигураций:

  • БП 3.0.58.20
  • ЗУП 3.1.5.129

При использовании встроенных правил обмена

Было замечено, что при редактировании информации о физическом лице, либо при добавлении нового физического лица в любой из конфигураций, данные изменения не отражаются в базе-корреспонденте. Как выяснилось, во встроенных правилах регистрации объектов, для справочника Физические лица установлен режим выгрузки РежимВыгрузкиПриНеобходимости, который позволяет выгружать данные о физическом лице только по ссылке. Нас такая ситуация совершенно не устраивает, ставилась задача полной синхронности данных о физических лицах в обоих базах.

Кроме этого, была замечена странность, приводящая к ошибке: если изменить информацию о физическом лице, хранящуюся в регистрах сведений, то эти изменения регистрируются к обмену. К примеру, если изменить данные документа Паспорт гражданина РФ у какого-либо физического лица, то после синхронизации в базе-приёмнике у данного физического лица пропадает запись о документе Паспорт гражданина РФ. Это происходит в том случае, когда нет соответствия объектов (отсутствует запись в регистре сведений Соответствие объектов информационных баз, относящаяся к данному физическому лицу).

Вторая странность: если соответствие объектов установлено (оно устанавливается автоматически, при выгрузке объекта по ссылке), то любые изменения данных таких физических лиц начинают регистрироваться к обмену, как в случае режима РежимВыгрузкиПерсональныеДанные.

Источник.Ссылка

Если изменить в правилах выгрузки для физического лица режим на РежимВыгрузкиПерсональныеДанные, то любые изменения информации о физических лицах регистрируются к обмену. Однако, в этом случае записи регистров сведений, связанных с физическими лицами, начали исчезать в совершенно различных ситуациях. Анализ правил обмена выявил следующее:

При выгрузке записи справочника Физические лица, соответствующее ПКО (правило конвертации объекта) содержит обработчик события После выгрузки в файл следующего содержания:

Выполнить(Алгоритмы.ВыгрузитьСведенияФизическогоЛица);

Смысл данного алгоритма в том, чтобы сразу за выгрузкой XML узла записи о физическом лице выгрузить все записи регистров сведений ФИОФизическихЛиц, ГражданствоФизическихЛиц, ДокументыФизическихЛиц, связанных с выгружаемой записью о физическом лице.

Проанализировав состав отправленного сообщения, мы обнаружили, что сразу после объекта Физическое лицо созданы три набора записей регистра, однако, они не содержат, собственно, строк набора записей. Это говорит о том, что отборы записей в алгоритме ВыгрузитьСведенияФизическогоЛица возвращают пустой набор. Это приводит к тому, что в корреспондирующей базе записи вышеперечисленных регистров сведений, связанных с данным физическим лицом, замещается пустыми наборами, или проще говоря, удаляются. После замены в алгоритме Источник на Источник.Ссылка записи регистров начали выгружаться корректно.

Примеры сообщений при выгрузке:

Ссылки

1s/8/synchronization/accounting30_hrm3_bug-fix-01/accounting30_hrm3_bug-fix-01.txt · Последние изменения: 2023-01-12 11:17 — GreyWolf