Как найти и отладить запросы при переносе данных из ЗУП 2.5 в ЗУП 3.1

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

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

Почему правила обмена выглядят пустыми

Традиционный подход к обмену данными в 1С предполагает, что в Правилах конвертации объектов (ПКО) указан объект-источник, из которого система автоматически выбирает данные. Однако в случае с переносом ЗУП 2.5 — 3.1 разработчики фирмы «1С» применили механизм программной выборки. Рассмотрим, что это означает на практике.

При таком подходе данные не выбираются универсальным механизмом Конвертации данных автоматически. Вместо этого в модуле обработки-помощника выполняются сложные пакетные запросы, результаты которых помещаются в Структуру или Таблицу значений. Затем эти данные передаются в процедуру выгрузки вручную. Проанализируем типичный вызов такой выгрузки:


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

// Выгрузка по правилу без указания объекта-ссылки
ВыгрузитьПоПравилу(ДанныеДляВыгрузки, , , , "Сотрудники");

Поскольку в ПКО "Сотрудники" источником является не справочник, а эта самая Структура, в интерфейсе Конвертации данных поле «Источник» остается пустым. Система просто сопоставляет ключи структуры с именами свойств приемника.

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

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

  1. Откроем конфигурацию ЗУП 2.5 в режиме Конфигуратора.
  2. Найдем в дереве метаданных обработку ПомощникПереходаНаЗУП3 (или аналогичную, в зависимости от версии релиза).
  3. Внутри обработки перейдем к макетам. Нас интересует макет ПомощникВыгрузки_V8. Это двоичные данные, представляющие собой внешнюю обработку .epf.
  4. Сохраним этот макет на диск как внешний файл и откроем его отдельно.

Внутри сохраненной обработки ПомощникВыгрузки_V8.epf также есть макеты. Рассмотрим подробнее макет ПравилаОбменаОбщие. Именно этот XML-файл нужно загружать в Конвертацию данных 2.0, чтобы увидеть дерево правил. Однако, как мы уже выяснили, «сердце» переноса находится не в XML, а в Модуле объекта этой внешней обработки.

Анализ программного кода выгрузки

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

Выясним причину сложности этих запросов. Перенос в ЗУП 3.1 бывает двух видов: краткий (рекомендуемый) и полный. В режиме краткого переноса запросы собирают остатки по регистрам (взаиморасчеты, остатки отпусков) и срезы последних на дату начала эксплуатации. При полном переносе запросы пытаются реконструировать всю историю движений, что значительно усложняет логику ВТ (временных таблиц).

Как отладить процесс выгрузки

Для отладки запросов и понимания того, почему конкретный сотрудник не переносится или переносится некорректно, рекомендуется использовать следующий алгоритм совместной работы с отладчиком:

  1. Запустим ЗУП 2.5 в режиме предприятия и откроем внешнюю обработку ПомощникВыгрузки_V8.epf, которую мы ранее извлекли.
  2. В конфигураторе установим точку останова в процедуре ВыгрузитьДанные() или непосредственно в интересующей нас функции (например, Сотрудники_Выгрузка()).
  3. Запустим процесс выгрузки. Когда выполнение прервется, мы сможем исследовать содержимое временных таблиц.
  4. Особое внимание уделим таблице ВТДанныеДляВыгрузки. Она является ключевым узлом, из которого данные распределяются по правилам обмена.

Рассмотрим пример того, как можно вычленить сложный запрос для анализа в консоли:


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

// Чтобы отладить это, скопируйте значение Запрос.Текст в консоль запросов,
// предварительно заменив программные параметры на конкретные значения.
Результат = Запрос.Выполнить().Выгрузить();

Особенности работы с параметрами

Проанализируем ситуацию, когда данные есть в базе, но не попадают в файл выгрузки. Часто это связано с глобальными параметрами обмена. В коде обработки постоянно встречаются проверки типа Если Параметры.ПереноситьИсторию... Тогда. Эти параметры устанавливаются на форме помощника пользователем перед началом выгрузки. При отладке обязательно проверим содержимое структуры Параметры, так как именно она управляет тем, какие ветки запросов будут выполнены.

Также стоит учитывать, что ЗУП 3.1 предъявляет более строгие требования к уникальности физических лиц. В коде помощника реализованы алгоритмы «схлопывания» дублей по СНИЛС и ИНН. Если в ЗУП 2.5 было два разных физлица с одинаковым СНИЛС, в процессе выгрузки они могут быть объединены программно еще до записи в XML, что невозможно отследить, глядя только на правила в Конвертации данных.

Итоги

Для успешной кастомизации или исправления ошибок переноса данных необходимо работать в связке: Конвертация данных (для понимания структуры приемника) + Отладчик в ЗУП 2.5 (для анализа логики выборки данных). Основная логика скрыта в модуле ПомощникВыгрузки_V8.epf, и именно его запросы являются определяющими для корректного перехода на новую редакцию программы.

← На главную