Как сопоставить справочники Физические лица и Сотрудники в 1С:Конвертация данных 2.1

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

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

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

Базовый алгоритм сопоставления через ПКС

Рассмотрим ситуацию, когда нам нужно создать ПКО, где источником выступает СправочникСсылка.ФизическиеЛица, а приемником — СправочникСсылка.Сотрудники. Основная задача — заставить механизм поиска в базе-приемнике искать сотрудника, у которого реквизит ФизЛицо совпадает с текущим выгружаемым объектом.

Разберем по шагам, как это реализовать в «Конвертации данных 2.1»:

  1. Создадим новое ПКО (Правило конвертации объектов). В поле Объект-источник выберем ФизическиеЛица, в поле Объект-приемник — Сотрудники.
  2. В табличной части ПКС (Правила конвертации свойств) добавим новую строку.
  3. В колонке Свойство-источник оставим значение пустым. Это важно, так как мы будем передавать не конкретный реквизит, а ссылку на сам объект источника.
  4. В колонке Свойство-приемник выберем реквизит ФизЛицо (тот реквизит справочника Сотрудники, по которому будет идти поиск).
  5. Для этого ПКС установим флаг Поиск. Это укажет системе, что при загрузке в приемник данный реквизит должен использоваться для идентификации объекта.
  6. Перейдем в обработчик события ПриВыгрузке для данного ПКС и напишем следующий код:

// Передаем саму ссылку на физическое лицо в качестве значения для поиска
Значение = Источник.Ссылка;

Проанализируем ситуацию: при такой настройке система выгрузит ссылку на физическое лицо, а при загрузке попытается найти в справочнике Сотрудники запись, у которой в поле ФизЛицо указано пришедшее значение. Если такая запись будет найдена, объект обновится, если нет — создастся новый.

Проблема множественности сотрудников

Важно помнить, что в типичных конфигурациях 1С (например, ЗУП или ERP) у одного физического лица может быть несколько записей в справочнике Сотрудники. Это происходит в случаях внутреннего совместительства. Если мы оставим поиск только по полю ФизЛицо, система всегда будет находить первого попавшегося сотрудника (обычно по внутреннему идентификатору или порядку в базе), что может привести к ошибкам в кадровом учете.

Для решения этой проблемы проанализируем дополнительные поля поиска. Чтобы поиск был точным, рекомендуется добавить в ПКС и включить флаг Поиск для следующих реквизитов:

Если в источнике (справочник Физические лица) нет данных об организации, их можно передать через входящие данные (ПараметрыОбъекта) из документа-владельца или установить фиксированным значением в правилах.

Использование обработчика ПоляПоиска

Если стандартного сопоставления по реквизитам недостаточно, перейдем к более гибкому инструменту — обработчику ПоляПоиска в ПКО. Рассмотрим пример, когда нам нужно реализовать сложный поиск: сначала пытаемся найти по GUID, затем по комбинации Физлицо + Организация.

В ПКО справочника Сотрудники на вкладке Обработчики событий в событии ПоляПоиска можно прописать алгоритм:


// Пример произвольного поиска
Если НомерВариантаПоиска = 1 Тогда
    // Пытаемся найти сотрудника по Физлицу и Организации
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |	Сотрудники.Ссылка
        |ИЗ
        |	Справочник.Сотрудники КАК Сотрудники
        |ГДЕ
        |	Сотрудники.ФизЛицо = &ФизЛицо
        |	И Сотрудники.Организация = &Организация
        |	И НЕ Сотрудники.ПометкаУдаления";
    
    Запрос.УстановитьПараметр("ФизЛицо", СвойстваПоиска["ФизЛицо"]);
    Запрос.УстановитьПараметр("Организация", СвойстваПоиска["Организация"]);
    
    РезультатЗапроса = Запрос.Выполнить();
    Если НЕ РезультатЗапроса.Пустой() Тогда
        Выборка = РезультатЗапроса.Выбрать();
        Выборка.Следующий();
        СсылкаНаОбъект = Выборка.Ссылка;
        ПрекратитьПоиск = Истина;
    КонецЕсли;
КонецЕсли;

Настройка поиска по УИД

Разберем важную настройку в ПКО на вкладке Настройки поиска. Там присутствует флаг Продолжить поиск по полям поиска, если по уникальному идентификатору (УИД) объект не найден.

Рекомендуется всегда устанавливать этот флаг, если вы не уверены, что справочники в обеих базах создавались путем копирования одной и той же информационной базы. Если базы развивались независимо, идентификаторы (GUID) у одних и тех же людей будут разными, и без этой галочки система просто создаст дубли, проигнорировав ваши настройки ПКС. Для контроля качества миграции и поиска ошибок в учете можно автоматически сравнить бухгалтерские и налоговые проводки между базами 1С после завершения переноса.

Синхронизация по ИНН и СНИЛС

Для надежного сопоставления самих физических лиц, на которых ссылаются сотрудники, поиск по коду часто оказывается неэффективным (коды могут переназначаться или иметь разный префикс). Выясним причину: наиболее стабильными идентификаторами человека в РФ являются ИНН и СНИЛС.

Посмотрим на пример настройки ПКО для Физических лиц:

  1. Укажите ПКС для ИНН и СНИЛС.
  2. Установите для них флаг Поиск.
  3. В обработчике ПоляПоиска добавьте проверку на заполненность этих полей, чтобы не сопоставить разных людей с пустыми номерами.

Это гарантирует, что даже если в базе-приемнике Сотрудник ссылается на «правильное» ФизЛицо, вы не создадите дубль этого физлица при переносе.

Заполнение обязательных реквизитов при создании

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

Используйте событие ПередЗагрузкой в ПКО, чтобы установить значения по умолчанию для тех реквизитов, которые отсутствуют в источнике, но обязательны в приемнике. Это позволит избежать создания «битых» ссылок и неполных объектов.

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

← На главную