Как перенести документ "Перенос данных" с движениями между одинаковыми базами 1С:ЗУП?

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

Перенос данных между идентичными конфигурациями 1С:Зарплата и управление персоналом 3.1 часто сопряжен с трудностями, особенно когда речь идет о документе ПереносДанных. Этот документ является универсальным контейнером, и его структура существенно отличается от привычных документов, таких как ПриемНаРаботу или НачислениеЗарплаты. В этой статье мы подробно разберем, как правильно перенести такие документы, чтобы движения по регистрам не потерялись и данные корректно отображались в базе-приемнике.

Особенности документа "Перенос данных"

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

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

Использование стандартной обработки "Выгрузка и загрузка данных XML"

Самым простым и эффективным способом переноса между одинаковыми конфигурациями является использование типовой обработки ВыгрузкаЗагрузкаДанныхXML83.epf. Рассмотрим пошагово, как с ней работать, чтобы гарантировать результат.

  1. Выбор версии обработки. Крайне важно использовать версию обработки, предназначенную именно для вашей версии платформы (например, для 8.3). Это исключит ошибки при работе с коллекциями наборов записей.
  2. Настройка состава выгрузки. В списке объектов метаданных найдите документ ПереносДанных. Не спешите нажимать кнопку выгрузки.
  3. Активация флага "Выгружать с движениями". Это ключевой момент. Без установки этого флага система выгрузит только «шапку» документа и его GUID. Движения по регистрам (записи в таблицах БД) останутся в исходной базе.
  4. Использование фильтров. Чтобы не выгружать лишние данные, перейдите на закладку «Дополнительные объекты для выгрузки» или воспользуйтесь отбором по конкретному документу (например, по номеру или дате).

Проанализируем ситуацию, когда флаг установлен, но данные все равно не видны. Рассмотрим техническую деталь: если в базе-приемнике уже существует документ с таким же УникальныйИдентификатор (GUID), обработка может обновить только заголовок документа. Если вы столкнулись с такой проблемой, рекомендуется сначала пометить на удаление и физически удалить пустой документ в базе-приемнике, а затем повторить загрузку.

Почему табличная часть документа может оказаться пустой?

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

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

Программный способ через COM-соединение

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


// Пример алгоритма переноса движений через COM
Приемник = Новый COMОбъект("V83.COMConnector");
Соединение = Приемник.Connect("Srvr='ServerName';Ref='BaseName';Usr='Admin';Pwd='123'");

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

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

Для Каждого Запись Из НаборИсточник Цикл
    НоваяЗапись = НаборПриемник.Добавить();
    ЗаполнитьЗначенияСвойств(НоваяЗапись, Запись);
КонецЦикла;

НаборПриемник.Записать();

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

Альтернатива: Использование JSON

В современных версиях платформы 8.3 активно развивается обмен через формат JSON. Рассмотрим этот вариант как альтернативу XML. Обмен через JSON работает быстрее и более гибко обрабатывает динамические структуры данных. Если вы используете актуальные релизы 1С:ЗУП 3.1, попробуйте встроенные средства сериализации в JSON. Это особенно полезно, если в базах установлены разные расширения, которые добавляют поля в регистры.

Типичные ошибки и способы их решения

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

Рекомендации по практике

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

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

Подводя итог, можно сказать: для успешного переноса документа ПереносДанных используйте стандартную обработку XML, обязательно включайте перенос движений и предварительно убедитесь, что все справочники в базе-приемнике синхронизированы по GUID.

← На главную