Как настроить передачу физического лица из ERP в Документооборот как пользователя при использовании Конвертации данных 2.1?

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

При настройке обмена данными между конфигурациями на платформе 1С часто возникает задача, когда типы данных в источнике и приемнике не совпадают. Типичный пример — передача информации об ответственном лице. В 1С:ERP Управление предприятием реквизит Ответственный часто имеет тип СправочникСсылка.ФизическиеЛица, в то время как в 1С:Документооборот (ДО) аналогичный реквизит имеет тип СправочникСсылка.Пользователи. Попытка прямой передачи значения через параметры или простым сопоставлением свойств не даст результата, так как системы ожидают разные типы объектов. Разберем подробно, как решить эту задачу в «Конвертации данных 2.1» (КД 2.1).

Постановка задачи и анализ ситуации

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

Шаг 1. Создание вспомогательного ПКО для смены типа

Первым делом нам необходимо создать ПКО, которое будет отвечать за «превращение» одного типа в другой. В КД 2.1 создадим новое правило:

  1. Объект-источник: ФизическиеЛица.
  2. Объект-приемник: Пользователи.
  3. Наименование правила (ID): ФизическоеЛицо_Пользователь.

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

Шаг 2. Настройка запрета на создание новых объектов

Важный нюанс при работе со справочником Пользователи: простое создание элемента в этом справочнике средствами обмена не делает его полноценным пользователем системы (не создается запись в списке пользователей информационной базы на уровне платформы). Поэтому в настройках ПКО ФизическоеЛицо_Пользователь на закладке «Основные» обязательно установим флаг «Не создавать новый объект, если он не найден». Это предотвратит появление «пустых» карточек пользователей, которые не имеют прав доступа и логина.

Шаг 3. Связка реквизитов в основном ПКО

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

  1. Источник: Ответственный (тип ФизическоеЛицо).
  2. Приемник: Ответственный (тип Пользователь).
  3. Правило конвертации: Здесь выберем созданное нами на Шаге 1 правило ФизическоеЛицо_Пользователь.

Благодаря этой настройке, движок КД 2.1 при выгрузке ФизическогоЛица будет использовать логику поиска, описанную в правиле для Пользователя. В файл обмена попадут поля поиска (наименование), а при загрузке ДО попытается найти существующего пользователя с таким ФИО.

Шаг 4. Улучшение поиска через связанные реквизиты (БСП)

Поиск только по наименованию может быть ненадежным из-за полных тезок или различий в написании ФИО. В современных конфигурациях (ERP и ДО) справочник Пользователи имеет реквизит ФизическоеЛицо. Мы можем использовать это для более точного поиска. Посмотрим, как реализовать алгоритм в обработчике «Поля поиска» в ПКО ФизическоеЛицо_Пользователь на стороне приемника:


// Пример кода в обработчике "Поля поиска" (ПКО Пользователи)
// Свойства - структура с данными из файла
// Если поиск по наименованию не дал результатов или нужен поиск по связи

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

Программная выгрузка через обработчик «Перед выгрузкой»

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


// Обработчик "Перед выгрузкой" в ПКС Ответственный
Если ЗначениеЗаполнено(Источник.Ответственный) Тогда
    // Можно ли найти пользователя по физлицу прямо в источнике?
    ПользовательИсточник = Справочники.Пользователи.НайтиПоРеквизиту("ФизическоеЛицо", Источник.Ответственный);
    
    Если Не ПользовательИсточник.Пустая() Тогда
        // Если нашли пользователя в ERP - выгружаем его по стандартному правилу Пользователь->Пользователь
        ИмяПКО = "Пользователи";
        Значение = ПользовательИсточник;
    Иначе
        // Если нет - выгружаем физлицо по нашему правилу конвертации типов
        ИмяПКО = "ФизическоеЛицо_Пользователь";
        Значение = Источник.Ответственный;
    КонецЕсли;
КонецЕсли;

Подводные камни и рекомендации

Проанализируем возможные проблемы при такой настройке:

Таким образом, использование отдельного ПКО с четко настроенными полями поиска и правильным указанием этого ПКО в настройках свойств — это стандартный и наиболее эффективный способ конвертации физических лиц в пользователей при обмене между ERP и Документооборотом.

← На главную