Как перенести сотрудников через Конвертацию данных 2.1, если они создаются в файле, но не отображаются в базе-приемнике?

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

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

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

---

Анализируем исходный алгоритм выгрузки

Рассмотрим ситуацию: в базе-источнике мы используем Правило выгрузки данных (ПВД) с типом выборки «Произвольный алгоритм». В обработчике «Перед обработкой» мы пишем запрос к табличной части документа ПриемНаРаботуВОрганизацию, собираем данные сотрудников во временную структуру и отправляем их на выгрузку по правилу конвертации.

Посмотрим на пример исходного кода в ПВД:


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

Запрос.УстановитьПараметр("ДатаНачала", НачалоДня(ДатаНачала));
Запрос.УстановитьПараметр("ДатаОкончания", КонецДня(ДатаОкончания));

Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл
    ИсходящиеДанные = Новый Структура;
    ИсходящиеДанные.Вставить("ФизЛицо", Выборка.ФизЛицо);
    ИсходящиеДанные.Вставить("Наименование", Выборка.Наименование);
    ИсходящиеДанные.Вставить("Код", Выборка.Код);
    ИсходящиеДанные.Вставить("ВидЗанятости", Выборка.ВидЗанятости);
    ИсходящиеДанные.Вставить("Сотрудник", Выборка.ФизЛицо);
    ИсходящиеДанные.Вставить("Организация", Выборка.Организация);
    
    ВыгрузитьПоПравилу(,, ИсходящиеДанные,, "СозданиеСотрудников");
КонецЦикла;

При таком подходе данные попадают в файл выгрузки, счетчик загруженных объектов в обработке «Универсальный обмен данными XML» показывает успешную обработку, но в интерфейсе базы-приемника справочник Сотрудники выглядит незаполненным. Давайте разберем по шагам, где кроются ошибки.

---

Шаг 1. Понимание связи между «Исходящими» и «Входящими» данными

Первая критическая точка — это механизм сопоставления свойств. В ПВД мы сформировали структуру и передали её третьим параметром в функцию ВыгрузитьПоПравилу:

ВыгрузитьПоПравилу(,, ИсходящиеДанные,, "СозданиеСотрудников")

Важно помнить правила жизненного цикла данных в КД 2.1:

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

---

Шаг 2. Настройка поиска и предотвращение дублирования объектов

Поскольку мы создаем сотрудников виртуально, у них нет единого уникального идентификатора (GUID), который можно было бы сопоставить с источником. Поиск по внутреннему идентификатору работать не будет.

Выполним следующие настройки в ПКО «СозданиеСотрудников»:

  1. В свойствах самого ПКО на вкладке «Настройки» установим флаги «Искать объект приемника по внутреннему идентификатору» и обязательно «Продолжить поиск по полям поиска, если по идентификатору объект не найден».
  2. Определим ключевые поля поиска. Для справочника Сотрудники уникальность чаще всего определяется комбинацией «Организация + Физическое лицо». На этих свойствах в таблице ПКС необходимо установить флаг «Поиск».
  3. Для системного свойства ЭтоГруппа флаг поиска следует отключить, чтобы избежать ошибок сопоставления иерархии.

---

Шаг 3. Решаем проблему «скрытых» сотрудников и архивации

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

В системе существует механизм автоматического скрытия неактивных сотрудников:

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

Причина А. Отсутствие записей в кадровых регистрах сведений

В ЗУП 3.1 и БП 3.0 отображение сотрудника как «активного» зависит не только от карточки справочника, но и от среза последних в регистрах сведений (таких как КадроваяИсторияСотрудников, ТекущиеКадровыеДанныеСотрудников). Если вы перенесли сам элемент справочника, но не перенесли и не провели документ Прием на работу, система считает, что у данного сотрудника нет действующих трудовых отношений. По умолчанию стандартные списки в программе отфильтрованы по работающим сотрудникам на текущую дату, и пустой без документов сотрудник автоматически скрывается.

Причина Б. Некорректно переданный статус актуальности

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

---

Варианты решения проблемы скрытых сотрудников

Рассмотрим несколько способов исправления ситуации в зависимости от архитектурных задач вашего обмена.

Способ 1. Явное управление реквизитом архивации в КД

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

В обработчике «Перед выгрузкой» для этого ПКС пропишем жесткое заполнение значения:


// Для современных конфигураций (ЗУП 3.1, БП 3.0)
Значение = Ложь; 

// Для устаревших конфигураций (ЗУП 2.5, БП 2.0)
// Значение = Истина;

Это гарантирует, что при загрузке объект не запишется со статусом «архивного» по умолчанию.

Способ 2. Перенос сотрудников в связке с кадровыми документами (Рекомендуемый)

Наиболее методологически верный способ — переносить не сам справочник изолированно через ПВД, а переносить кадровый документ Прием на работу.

При такой схеме:

  1. Создается ПКО для документа приема на работу.
  2. В ПКС реквизита документа Сотрудник указывается ПКО «СозданиеСотрудников». Через параметры ИсходящиеДанные в него передаются все необходимые сведения о физлице и организации.
  3. После загрузки в базу-приемник документ проводится, автоматически создавая записи в кадровых регистрах сведений. Сотрудник сразу приобретает статус работающего и отображается во всех отчетах и списках.

Способ 3. Визуальный контроль и проверка фильтров в приемнике

Чтобы убедиться, что элементы справочника физически создались в базе данных, выполним следующие действия в режиме «1С:Предприятие» в базе-приемнике:

  1. Откроем справочник Сотрудники.
  2. Снимем флаг фильтрации «Скрывать сотрудников, по которым уже не выполняются операции» (для ЗУП 3.1).
  3. Либо перейдем в меню «Ещё» -> «Настроить список» и полностью отключим отбор по архивному состоянию или актуальности.

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

← На главную