Как настроить отбор физических лиц при выгрузке данных в Конвертации данных 2 (на примере ЗУП 2.5 — ЗУП 3)

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

Перенос данных между конфигурациями «1С:Зарплата и управление персоналом» редакции 2.5 и 3.1 — это классическая задача, с которой регулярно сталкиваются разработчики. Зачастую при таком переходе возникает необходимость переносить данные не по всей базе сразу, а частями или по определенному списку физических лиц. Для этих целей в обработке выгрузки предусмотрен механизм отборов.

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

Почему кнопки отбора в обработке выгрузки неактивны?

Для начала выясним причину, по которой платформа блокирует возможность настройки интерактивного отбора в обработке выгрузки (например, в универсальной обработке V8Exch82.epf). Проанализируем, как Конвертация данных 2 (КД 2) определяет доступность полей компоновщика для пользователя.

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

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

Рассмотрим по шагам, как правильно настроить ПВД в КД 2, чтобы открыть доступ к интерактивным отборам.

Шаг 1. Настройка Правила выгрузки данных (ПВД) в Конвертации данных

Откроем наши правила обмена в конфигурации «Конвертация данных» и перейдем к настройке ПВД для справочника физических лиц.

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

Шаг 2. Борьба с кэшированием в ЗУП 2.5

После того как правила сохранены, мы загружаем их в обработку выгрузки данных в базе-источнике (ЗУП 2.5). Если после загрузки новых правил кнопки настройки отборов по-прежнему неактивны, необходимо выполнить сброс кэша.

Для этого выполним следующие действия:

  1. Закроем обработку выгрузки данных.
  2. Очистим кэш платформы 1С:Предприятие. Самый быстрый способ — удалить базу из списка запуска и добавить ее заново (при этом папка кэша на диске создастся заново). Также можно вручную удалить файлы из папки %localappdata%\1C\1Cv8.
  3. Запустим базу заново, откроем обработку выгрузки и повторно загрузим наш файл правил XML. Кнопки добавления отбора станут активными.

Реализация выгрузки «паровоза» связанных данных

Настройка простого отбора по справочнику ФизическиеЛица решает только половину задачи. В ЗУП 2.5 персональные данные физического лица (паспортные данные, контактная информация, сведения о гражданстве, инвалидности, воинском учете) распределены по различным регистрам сведений. Если мы выгрузим только само физлицо по стандартному отбору, то связанные с ним записи регистров могут либо вообще не попасть в файл выгрузки, либо (что еще хуже) выгрузятся для всей базы целиком, так как для этих регистров в ПВД прописаны свои независимые запросы выборки.

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

Вариант 1. Использование параметров выгрузки и программная фильтрация

Этот способ является наиболее гибким и позволяет передавать в правила целый список физических лиц для обмена. Создадим в КД специальный параметр выгрузки.

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

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


// Проверяем, заполнен ли параметр со списком разрешенных физлиц
Если Параметры.Свойство("СписокФизЛицДляВыгрузки") И ЗначениеЗаполнено(Параметры.СписокФизЛицДляВыгрузки) Тогда
    
    // Определяем, относится ли выгружаемый объект (или запись регистра) к нашему списку
    // В зависимости от структуры регистра, физлицо может лежать в измерении "ФизЛицо" или "Объект"
    ТекущееФизЛицо = Неопределено;
    
    Если Метаданные.РегистрыСведений[ИмяРегистра].Измерения.Найти("Физлицо") <> Неопределено Тогда
        ТекущееФизЛицо = Объект.Физлицо;
    ИначеЕсли Метаданные.РегистрыСведений[ИмяРегистра].Измерения.Найти("Объект") <> Неопределено Тогда
        ТекущееФизЛицо = Объект.Объект;
    КонецЕсли;
    
    // Если физлицо определено, проверяем его наличие в разрешенном списке
    Если ЗначениеЗаполнено(ТекущееФизЛицо) Тогда
        Если Параметры.СписокФизЛицДляВыгрузки.НайтиПоЗначению(ТекущееФизЛицо) = Неопределено Тогда
            // Если физлица нет в списке, отменяем выгрузку данной записи
            Отказ = Истина;
        КонецЕсли;
    КонецЕсли;

КонецЕсли;

Вариант 2. Программный вызов выгрузки связанных объектов через ПКО

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

Для этого выполним следующую настройку:

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

Проанализируем пример реализации такого алгоритма:


// Пример выгрузки паспортных данных (регистр сведений "ПаспортныеДанныеФизЛиц")
Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ *
    |ИЗ
    |   РегистрСведений.ПаспортныеДанныеФизЛиц КАК ПаспортныеДанные
    |ГДЕ
    |   ПаспортныеДанные.ФизЛицо = &ФизЛицо";

Запрос.УстановитьПараметр("ФизЛицо", Источник.Ссылка);
Выборка = Запрос.Выполнить().Выбрать();

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

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

Вариант 3. Использование параметра «ФизЛицоДляОтладки»

В типовых правилах переноса из ЗУП 2.5 в ЗУП 3.1 разработчики фирмы «1С» предусмотрели сервисный параметр ФизЛицоДляОтладки. Рассмотрим особенности его использования.

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

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

← На главную