К статье
Практический материал

Разработка и Конфигурация · 14 мин

ПВД в конвертации данных 1С: что это и как работает

ПВД в конвертации 1С — правила выгрузки данных. Разбираем, что это, как создать и настроить ПВД, произвольный алгоритм выборки, типичные ошибки и проверку результата.

ПВД — правило выгрузки данных, один из базовых элементов типовой обработки «Конвертация данных» (редакции 2.1 и 3.0). Именно ПВД определяет, какие объекты информационной базы-источника попадут в файл обмена: справочники, документы, регистры сведений или наборы записей. Без корректно настроенного правила выгрузки данные либо не перенесутся вообще, либо перенесутся в избыточном объёме, что замедляет обмен и засоряет базу-приёмник.

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

Материал ориентирован на специалистов, которые настраивают обмен между конфигурациями 1С: перенос справочников в новую базу, миграцию между разными конфигурациями, интеграцию с учётными системами. Рассмотрены оба подхода — классическая Конвертация данных 2.1 и формат EnterpriseData в редакции 3.0.

Что такое ПВД и где оно находится в структуре правил обмена

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

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

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

Чем ПВД отличается от ПКО и ПКС

Типичная ошибка начинающих — пытаться настроить фильтрацию данных в ПКО или ПКС, хотя эти правила предназначены для другого. Разграничение ролей выглядит так.

ЭлементНазначениеТипичная настройка
ПВДКакие объекты выбрать из источникаОтбор по периоду, организации, произвольный запрос
ПКОВ какой объект приёмника конвертироватьСоответствие «Справочник.Контрагенты» → «Справочник.Контрагенты», поиск по ИНН/КПП
ПКСКак перенести отдельные реквизитыСопоставление «Наименование» → «Наименование», приведение типов
ПЗСЧто удалить в приёмнике перед загрузкойОчистка справочника перед полной перезагрузкой

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

Способы выгрузки: стандартная выборка и произвольный алгоритм

В Конвертации данных 2.1 для ПВД доступны два основных способа выгрузки: стандартная выборка и произвольный алгоритм. Выбор зависит от сложности отбора.

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

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

// Пример: ПВД с произвольным алгоритмом — выгрузка документов по запросу

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| Реализация.Ссылка КАК Ссылка

|ИЗ

| Документ.РеализацияТоваровУслуг КАК Реализация

|ГДЕ

| Реализация.Дата МЕЖДУ &НачалоПериода И &КонецПериода

| И Реализация.Проведен";

Запрос.УстановитьПараметр("НачалоПериода", Параметры.ДатаНачала);

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

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

Пока Выборка.Следующий() Цикл

ВыгрузитьПоПравилу(Выборка.Ссылка);

КонецЦикла;

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

Как создать и настроить ПВД пошагово

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

В обработчике «Перед выгрузкой объекта» удобно отсекать ненужные элементы без изменения запроса. Например, чтобы не выгружать группы справочника, достаточно проверить Если Источник.ЭтоГруппа Тогда Отказ = Истина;. Переменная Отказ доступна во всех событиях выгрузки объекта.

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

Настройка отборов и фильтрация данных

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

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

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

Третий — произвольный алгоритм с запросом, описанный выше. Это самый гибкий вариант: можно строить выборку любой сложности, включая соединения, группировки и обращения к нескольким объектам.

Маршрут решения

Как выбрать способ отбора

Нужна разовая выгрузка с простым условием (период, организация)Используйте отбор в обработке «Универсальный обмен данными XML» без правки правил
Отбор должен работать при каждом обмене и храниться вместе с правиламиРазместите условие в обработчике «Перед выгрузкой объекта» через Отказ = Истина
Выборка требует запроса с соединениями или обращения к нескольким таблицамНастройте ПВД с произвольным алгоритмом и методом ВыгрузитьПоПравилу()
Выгружается регистр сведений с большой историейИспользуйте произвольный алгоритм с отбором по периоду — стандартный режим выгрузит все записи

ПВД в Конвертации данных 3.0 и формате EnterpriseData

В редакции 3.0 архитектура изменилась: правила хранятся в составе конфигурации, обмен идёт через XDTO-пакеты формата EnterpriseData, а отдельных ПВД в дереве правил нет. Состав выгружаемых данных определяется двумя механизмами: событием «При отправке данных» в ПКО и регистрацией изменений на узлах плана обмена.

Если вы мигрируете правила с 2.1 на 3.0, логика ПВД переносится в обработчик «При обработке» соответствующего ПКО отправки данных: там формируется выборка и вызывается отправка объектов. Отборы по периоду и организациям в типовых обменах чаще всего настраиваются уже в форме настройки синхронизации данных, а не в правилах.

Для задачи «перенести справочники и документы в чистую базу один раз» редакция 2.1 обычно удобнее: она проще в отладке, не требует планов обмена и даёт прямой контроль над файлом. Редакция 3.0 оправдана для регулярных синхронизаций между типовыми конфигурациями.

Конвертация 2.1 и 3.0

Конвертация данных 2.1

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

Конвертация данных 3.0

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

Проверка результата выгрузки

После настройки ПВД обязательно проверьте три вещи: состав объектов в файле, отсутствие ошибок в протоколе и корректность загрузки в приёмник. Пропуск проверки — главная причина ситуаций, когда «вроде всё выгрузилось», но в новой базе не хватает половины документов.

Контрольные точки

Как проверить результат

Протокол выгрузки
Норма

Количество выгруженных объектов по каждому ПВД соответствует ожиданиям, ошибок нет

Тревожный признак

Объекты выгружены с ошибками, количество равно нулю или сильно отличается от ожидаемого

Содержимое файла обмена
Норма

В XML присутствуют узлы объектов нужного типа с заполненными реквизитами

Тревожный признак

Файл содержит только шапку или объекты без свойств

Загрузка в приёмник
Норма

Объекты создаются, поиск по ключевым полям не даёт дублей

Тревожный признак

Появляются дубли элементов, объекты создаются с пустыми реквизитами

Ссылочная целостность
Норма

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

Тревожный признак

В загруженных документах битые ссылки вида «<Объект не найден>»

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

Типичные ошибки и ограничения

Типичные ошибки при работе с ПВД
01
ПВД не связано с ПКО — обработка пропускает правило, данные не выгружаются, а ошибка не всегда очевидна в протоколе.
02
Отбор задан и в правилах, и в обработке выгрузки — условия перемножаются, часть данных теряется незаметно.
03
В произвольном алгоритме не вызван ВыгрузитьПоПравилу() — выборка сформирована, но ни один объект не попал в файл.
04
Выгрузка регистра сведений стандартным способом без отбора по периоду — файл разрастается, обмен длится часами.
05
Фильтрация по пометке удаления забыта — в приёмник переносятся помеченные на удаление объекты и засоряют базу.
06
Использование Отказ = Истина в «Перед обработкой» вместо фильтрации объектов — отменяется всё ПВД целиком, а не отдельные элементы.

Отдельно стоит предупредить о рисках при работе с реальными базами. Выгрузка больших объёмов (сотни тысяч документов) в файловой базе может занять часы и заблокировать работу пользователей; в клиент-серверном варианте планируйте обмен на нерабочее время. Перед загрузкой в рабочую базу-приёмник всегда делайте резервную копию: правила очистки данных (ПЗС) и ошибки в ПКО способны удалить или перезаписать существующие данные.

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

Что важно запомнить

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

Частые вопросы о ПВД в конвертации 1С

Можно ли выгрузить данные без создания ПВД?

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

Почему ПВД активно, но данные не выгружаются?

Чаще всего причины три: ПВД не связано с ПКО, в обработчике установлен Отказ = Истина, либо отбор в обработке выгрузки отсекает все объекты. Проверьте протокол выгрузки — там указано число объектов по каждому правилу и ошибки обработчиков.

Как выгрузить только проведённые документы?

Проще всего в обработчике «Перед выгрузкой объекта»: добавьте условие «Если Не Источник.Проведен Тогда Отказ = Истина;». При произвольном алгоритме то же условие надёжнее включить в текст запроса — выборка будет быстрее.

Чем выгрузка по ссылке отличается от выгрузки через ПВД?

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

Подходит ли Конвертация данных для регулярного обмена между базами?

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

Как отладить обработчик ПВД, если он работает не так, как ожидается?

Используйте вывод сообщений через Сообщить() в коде обработчика — они попадут в протокол выгрузки. Для глубокой отладки обработка «Универсальный обмен данными XML» поддерживает режим отладки обработчиков с выгрузкой кода во внешнюю обработку, которую можно открыть в конфигураторе и пошагово пройти отладчиком.