Перенос данных между конфигурациями «1С:Зарплата и управление персоналом» редакции 2.5 и 3.1 — это классическая задача, с которой регулярно сталкиваются разработчики. Зачастую при таком переходе возникает необходимость переносить данные не по всей базе сразу, а частями или по определенному списку физических лиц. Для этих целей в обработке выгрузки предусмотрен механизм отборов.
Однако на практике разработчики часто сталкиваются с тем, что в окне настройки выгрузки кнопки добавления отборов для нужного справочника или документа оказываются неактивными (заблокированными). В рамках этой статьи мы подробно разберем, почему возникает эта проблема, как сделать отборы доступными и как правильно организовать выгрузку связанных данных (так называемого «паровоза» данных) для отобранных физических лиц.
Для начала выясним причину, по которой платформа блокирует возможность настройки интерактивного отбора в обработке выгрузки (например, в универсальной обработке V8Exch82.epf). Проанализируем, как Конвертация данных 2 (КД 2) определяет доступность полей компоновщика для пользователя.
Возможность наложения отбора напрямую зависит от настроек конкретного Правила выгрузки данных (ПВД) в конфигурации «Конвертация данных»:
Справочник.ФизическиеЛица), обработка не сможет определить доступные реквизиты для построения отбора.Рассмотрим по шагам, как правильно настроить ПВД в КД 2, чтобы открыть доступ к интерактивным отборам.
Откроем наши правила обмена в конфигурации «Конвертация данных» и перейдем к настройке ПВД для справочника физических лиц.
ФизическиеЛица.СправочникСсылка.ФизическиеЛица.После того как правила сохранены, мы загружаем их в обработку выгрузки данных в базе-источнике (ЗУП 2.5). Если после загрузки новых правил кнопки настройки отборов по-прежнему неактивны, необходимо выполнить сброс кэша.
Для этого выполним следующие действия:
%localappdata%\1C\1Cv8.Настройка простого отбора по справочнику ФизическиеЛица решает только половину задачи. В ЗУП 2.5 персональные данные физического лица (паспортные данные, контактная информация, сведения о гражданстве, инвалидности, воинском учете) распределены по различным регистрам сведений. Если мы выгрузим только само физлицо по стандартному отбору, то связанные с ним записи регистров могут либо вообще не попасть в файл выгрузки, либо (что еще хуже) выгрузятся для всей базы целиком, так как для этих регистров в ПВД прописаны свои независимые запросы выборки.
Разберем три эффективных способа, как выгрузить сопутствующие данные («паровоз») только для отобранных физических лиц.
Этот способ является наиболее гибким и позволяет передавать в правила целый список физических лиц для обмена. Создадим в КД специальный параметр выгрузки.
СписокФизЛицДляВыгрузки с типом данных СписокЗначений (или ТаблицаЗначений). Поставим галочку «Диалог задания параметров», чтобы пользователь мог заполнить этот список на форме перед выгрузкой.Пример кода для обработчика «Перед выгрузкой» ПВД регистров сведений:
// Проверяем, заполнен ли параметр со списком разрешенных физлиц
Если Параметры.Свойство("СписокФизЛицДляВыгрузки") И ЗначениеЗаполнено(Параметры.СписокФизЛицДляВыгрузки) Тогда
// Определяем, относится ли выгружаемый объект (или запись регистра) к нашему списку
// В зависимости от структуры регистра, физлицо может лежать в измерении "ФизЛицо" или "Объект"
ТекущееФизЛицо = Неопределено;
Если Метаданные.РегистрыСведений[ИмяРегистра].Измерения.Найти("Физлицо") <> Неопределено Тогда
ТекущееФизЛицо = Объект.Физлицо;
ИначеЕсли Метаданные.РегистрыСведений[ИмяРегистра].Измерения.Найти("Объект") <> Неопределено Тогда
ТекущееФизЛицо = Объект.Объект;
КонецЕсли;
// Если физлицо определено, проверяем его наличие в разрешенном списке
Если ЗначениеЗаполнено(ТекущееФизЛицо) Тогда
Если Параметры.СписокФизЛицДляВыгрузки.НайтиПоЗначению(ТекущееФизЛицо) = Неопределено Тогда
// Если физлица нет в списке, отменяем выгрузку данной записи
Отказ = Истина;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Вместо того чтобы настраивать ПВД для каждого связанного регистра отдельно, мы можем отключить самостоятельную выгрузку этих регистров в ПВД и инициировать их отправку программно — непосредственно в момент выгрузки самого физического лица.
Для этого выполним следующую настройку:
ФизическиеЛица перейдем в обработчик события «ПослеВыгрузки».Источник) и принудительно отправлять их в файл обмена с помощью функции ВыгрузитьПоПравилу.Проанализируем пример реализации такого алгоритма:
// Пример выгрузки паспортных данных (регистр сведений "ПаспортныеДанныеФизЛиц")
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ *
|ИЗ
| РегистрСведений.ПаспортныеДанныеФизЛиц КАК ПаспортныеДанные
|ГДЕ
| ПаспортныеДанные.ФизЛицо = &ФизЛицо";
Запрос.УстановитьПараметр("ФизЛицо", Источник.Ссылка);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
// Создаем структуру для передачи свойств записи регистра
СтруктураЗаписи = Новый Структура;
Для Каждого Колонка Из Выборка.Колонки Цикл
СтруктураЗаписи.Вставить(Колонка.Имя, Выборка[Колонка.Имя]);
КонецЦикла;
// Выгружаем запись по соответствующему правилу конвертации объектов (ПКО)
ВыгрузитьПоПравилу(СтруктураЗаписи, , , , "ПаспортныеДанныеФизЛиц");
КонецЦикла;
Этот подход гарантирует, что в файл обмена попадут только те персональные данные, владельцы которых прошли через основной фильтр отбора физических лиц.
В типовых правилах переноса из ЗУП 2.5 в ЗУП 3.1 разработчики фирмы «1С» предусмотрели сервисный параметр ФизЛицоДляОтладки. Рассмотрим особенности его использования.
Если вам необходимо перенести данные всего по одному или нескольким конкретным сотрудникам для тестирования, вы можете включить этот параметр на вкладке настроек выгрузки. При его активации встроенные алгоритмы правил обмена начинают жестко фильтровать основные запросы по указанному значению.
Важное предупреждение: Использование параметра ФизЛицоДляОтладки имеет ограничения. Данный механизм создавался преимущественно для поиска ошибок разработки. При его использовании могут игнорироваться связанные кадровые срезы, общие классификаторы или сведения по штатному расписанию. Для полноценного промышленного переноса части базы этот метод использовать не рекомендуется — лучше настроить полноценные параметры выгрузки, как описано в Варианте 1.