Перенос данных между идентичными конфигурациями 1С:Зарплата и управление персоналом 3.1 часто сопряжен с трудностями, особенно когда речь идет о документе ПереносДанных. Этот документ является универсальным контейнером, и его структура существенно отличается от привычных документов, таких как ПриемНаРаботу или НачислениеЗарплаты. В этой статье мы подробно разберем, как правильно перенести такие документы, чтобы движения по регистрам не потерялись и данные корректно отображались в базе-приемнике.
Прежде чем приступать к технической части, проанализируем ситуацию. Документ ПереносДанных — это технический объект. У него практически нет собственных реквизитов, которые несут смысловую нагрузку для учета. Основная информация хранится не «внутри» документа в привычных табличных частях, а непосредственно в физических таблицах регистров (накопления, сведений, расчета), где данный документ выступает в роли Регистратор.
Разберем важный нюанс: в метаданных документа существует служебная табличная часть ТаблицаРегистров. Она содержит список имен регистров, по которым данный документ делает движения. Если вы перенесете сам документ, но не перенесете записи регистров или эту табличную часть, документ в базе-приемнике будет выглядеть абсолютно пустым, хотя в списке документов он будет присутствовать.
Самым простым и эффективным способом переноса между одинаковыми конфигурациями является использование типовой обработки ВыгрузкаЗагрузкаДанныхXML83.epf. Рассмотрим пошагово, как с ней работать, чтобы гарантировать результат.
ПереносДанных. Не спешите нажимать кнопку выгрузки.Проанализируем ситуацию, когда флаг установлен, но данные все равно не видны. Рассмотрим техническую деталь: если в базе-приемнике уже существует документ с таким же УникальныйИдентификатор (GUID), обработка может обновить только заголовок документа. Если вы столкнулись с такой проблемой, рекомендуется сначала пометить на удаление и физически удалить пустой документ в базе-приемнике, а затем повторить загрузку.
Как отмечают специалисты, документ ПереносДанных содержит табличную часть Состав регистров (в метаданных — ТаблицаРегистров). Если при выгрузке не была установлена галочка «Переносить движения с документами», эта табличная часть в приемник придет пустой. Выясним причину: логика 1С при записи наборов записей часто опирается на состав этой таблицы. Если таблицы нет — интерфейс документа не понимает, какие закладки с данными ему нужно отобразить пользователю.
Важное правило: при выгрузке через XML ставьте режим «Выгружать по необходимости» для связанных объектов. Это позволит автоматически подтянуть справочники Сотрудники, ФизическиеЛица и Организации, на которые ссылаются движения документа.
Если стандартная обработка по каким-то причинам не подходит (например, базы имеют незначительные различия в патчах или расширениях), можно использовать программное копирование. Рассмотрим пример логики, которую можно реализовать в обработке:
// Пример алгоритма переноса движений через COM
Приемник = Новый COMОбъект("V83.COMConnector");
Соединение = Приемник.Connect("Srvr='ServerName';Ref='BaseName';Usr='Admin';Pwd='123'");
// Получаем набор записей в источнике
НаборИсточник = РегистрыНакопления.ЗарплатаКВыплате.СоздатьНаборЗаписей();
НаборИсточник.Отбор.Регистратор.Установить(ДокументСсылка);
НаборИсточник.Прочитать();
// Создаем аналогичный набор в приемнике
НаборПриемник = Соединение.РегистрыНакопления.ЗарплатаКВыплате.СоздатьНаборЗаписей();
НаборПриемник.Отбор.Регистратор.Установить(ДокументСсылкаВПриемнике);
Для Каждого Запись Из НаборИсточник Цикл
НоваяЗапись = НаборПриемник.Добавить();
ЗаполнитьЗначенияСвойств(НоваяЗапись, Запись);
КонецЦикла;
НаборПриемник.Записать();
Этот метод считается максимально надежным, так как вы напрямую управляете процессом записи каждого набора. Однако он требует написания кода для каждого типа регистра, который задействован в документе.
В современных версиях платформы 8.3 активно развивается обмен через формат JSON. Рассмотрим этот вариант как альтернативу XML. Обмен через JSON работает быстрее и более гибко обрабатывает динамические структуры данных. Если вы используете актуальные релизы 1С:ЗУП 3.1, попробуйте встроенные средства сериализации в JSON. Это особенно полезно, если в базах установлены разные расширения, которые добавляют поля в регистры.
Проанализируем основные причины, по которым движения могут «пропадать» после успешной, на первый взгляд, загрузки:
Активность у перенесенных записей. Если Активность = Ложь, данные не будут попадать в отчеты и не будут видны в форме документа.Выясним, как сделать процесс максимально безопасным. Во-первых, никогда не используйте флаг «Переносить движения» для обычных документов (например, НачислениеЗарплаты), если вы планируете их перепроводить в новой базе. Это может создать «мусорные» записи. Однако для документа ПереносДанных это единственный правильный путь, так как этот документ не имеет модуля проведения и не формирует движения автоматически при нажатии кнопки «Провести».
Во-вторых, всегда проверяйте результат через консоль запросов. Если документ открывается и вы видите заполненные закладки — значит, табличная часть ТаблицаРегистров перенеслась верно. Если при этом отчеты (например, «Расчетный листок») показывают данные — значит, и движения в регистрах физически присутствуют.
Подводя итог, можно сказать: для успешного переноса документа ПереносДанных используйте стандартную обработку XML, обязательно включайте перенос движений и предварительно убедитесь, что все справочники в базе-приемнике синхронизированы по GUID.