Как изменить состав выгружаемых данных при переходе с ЗУП 2.5 на ЗУП 3.1, если правила в КД 2.0 выглядят «пустыми»

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

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

Разберем архитектуру типового переноса данных

Прежде всего, проанализируем ситуацию: почему в КД 2.0 мы видим пустые поля? Типовой переход между редакциями ЗУП реализован не классическим способом «объект в объект», а через технологию выгрузки по структуре или с использованием параметра ВходящиеДанные. Это означает следующее:

Именно поэтому в ПКО источник пуст — правила настроены на прием набора данных, чьи имена ключей соответствуют именам свойств в Правилах Конвертации Свойств (ПКС).

Где найти программный код выгрузки

Для модификации состава данных нам нужно найти «центр управления» переносом. Рассмотрим, где он находится. В типовом решении это обработка, которая обычно называется ПереносДанныхИзИнформационныхБаз1СПредприятия8. Она встроена в конфигурацию ЗУП 3.1 и часто дублируется во внешних файлах для удобства отладки.

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

Выясним причину отсутствия данных в ПВД

Рассмотрим стандартный механизм КД 2.0: обычно в ПВД пишется запрос, результат которого передается в ПКО. Однако в случае с ЗУП 2.5 разработчики 1С решили централизовать процесс в модуле обработки. Это сделано для повышения производительности и возможности сложной трансформации данных «на лету» перед выгрузкой.

Посмотрим на пример того, как это выглядит в коде обработки. Вместо обращения к объекту, в коде формируется структура:


ДанныеДляВыгрузки = Новый Структура;
ДанныеДляВыгрузки.Вставить("Наименование", СсылкаНаДолжность.Наименование);
ДанныеДляВыгрузки.Вставить("Код", СсылкаНаДолжность.Код);
// Здесь мы можем добавить свой реквизит
ДанныеДляВыгрузки.Вставить("КатегорияВоинскогоУчета", СсылкаНаДолжность.КатегорияУчета);

ВыгрузитьПоПравилу(,, ДанныеДляВыгрузки,, "Должности");

Здесь "Должности" — это имя ПКО в ваших правилах конвертации.

Пошаговая инструкция по добавлению нового реквизита

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

Шаг 1. Модификация запроса в обработке выгрузки.
Найдем в модуле обработки текст запроса, который собирает данные по должностям. Добавим в секцию ВЫБРАТЬ нужный нам реквизит из базы ЗУП 2.5. Убедитесь, что результат запроса помещается в структуру, которая позже будет передана в функцию выгрузки. Если данные собираются не запросом, а прямым обращением к свойствам объекта, просто добавьте новую строку заполнения структуры, как в примере выше.

Шаг 2. Настройка правил в Конвертации данных 2.0.
Теперь нам нужно «подружить» обновленный код с правилами XML. Разберем действия в КД 2.0:

  1. Откройте ПКО нужного объекта (например, справочника «Должности»).
  2. Перейдите на закладку «Конвертация свойств».
  3. Добавьте новое ПКС (Правило конвертации свойства).
  4. Важно: Поле Источник оставьте пустым.
  5. В поле Имя свойства источника впишите строковое название ключа из структуры, которую вы подготовили в коде обработки (например, "КатегорияВоинскогоУчета").
  6. В поле Приемник выберите соответствующий реквизит справочника в ЗУП 3.x.

Шаг 3. Сохранение и обновление правил.
Сохраните правила из КД 2.0 в файл XML. После этого у вас есть два пути:

Проанализируем работу с параметрами объекта

Иногда данные передаются не через основные поля структуры, а через коллекцию ПараметрыОбъекта. Это часто используется для передачи данных, которые не являются прямыми реквизитами справочника в приемнике, но нужны для алгоритмов «После загрузки».

Если вы видите в ПКС код типа Значение = ПараметрыОбъекта.Получить("МойПараметр"), это сигнал к тому, что в коде выгрузки (в обработке) вам нужно добавить заполнение этого параметра:


// В обработке выгрузки перед вызовом ВыгрузитьПоПравилу
ПараметрыДляВыгрузки = Новый Структура;
ПараметрыДляВыгрузки.Вставить("МойПараметр", ЗначениеПараметра);

ВыгрузитьПоПравилу(,, ДанныеДляВыгрузки, ПараметрыДляВыгрузки, "Должности");

Особенности версий и релизов

Важно помнить, что обработка перехода жестко привязана к релизам программ. Если вы решили дорабатывать перенос, убедитесь, что:

  1. Вы используете актуальное описание метаданных обеих баз. Загрузите в КД 2.0 свежие файлы .md (через обработку MD83Exp.epf).
  2. Версия правил в макете обработки соответствует логике самой обработки. Если вы возьмете правила от одного релиза, а обработку от другого, вы рискуете получить ошибку несоответствия полей в методе ВыгрузитьПоПравилу.

Резюме для решения задачи

Подводя итог, можно сказать, что решение проблемы «пустых правил» кроется в понимании разделения ответственности. В типовом переносе ЗУП 2.5 -> 3.x правила КД 2.0 являются лишь картой соответствия имен, в то время как выборка данных целиком лежит на плечах программного кода обработки. Чтобы добавить новые данные, необходимо действовать синхронно: расширить выборку в коде обработки и прописать аналогичное имя поля в ПКС правил конвертации.

← На главную