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

Администрирование · 10 мин

Как перенести данные из одного регистра в другой в 1С

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

Перенос данных между регистрами в 1С требуется при изменении структуры учёта, переходе на новую конфигурацию, исправлении ошибок проектирования или консолидации сведений из нескольких регистров в один. Задача решается несколькими способами: программным перебором записей через встроенный язык, обработкой «Конвертация данных», универсальными обработками загрузки/выгрузки или стандартными документами корректировки.

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

Перед любыми манипуляциями с регистрами обязательно сделайте резервную копию информационной базы. Прямая запись в регистры минует бизнес-логику документов, поэтому ошибка в алгоритме приведёт к расхождениям в отчётах, которые сложно отследить и откатить без архивной копии.

Определите тип регистров и ограничения переноса

Первый шаг — понять, с какими регистрами вы работаете, потому что от этого зависит допустимый способ переноса. Регистры сведений хранят данные в разрезе измерений и могут быть независимыми или подчинёнными регистратору. Регистры накопления и бухгалтерии всегда подчинены регистраторам: каждая запись в них создаётся движением документа.

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

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

Способ 1: программный перенос через набор записей

Самый гибкий метод — обработка на встроенном языке 1С. Она подходит для регистров сведений и случаев, когда структуры регистров различаются и нужна трансформация данных «на лету». Общий принцип: прочитать записи источника запросом, пройтись по выборке и записать каждую строку в целевой регистр через менеджер записи или набор записей.

Пример кода для переноса между независимыми регистрами сведений:

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

Запрос.Текст = "ВЫБРАТЬ * ИЗ РегистрСведений.СтарыйРегистр";

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

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

Менеджер = РегистрыСведений.НовыйРегистр.СоздатьМенеджерЗаписи();

Менеджер.Период = Выборка.Период;

Менеджер.Номенклатура = Выборка.Номенклатура;

Менеджер.Цена = Выборка.Цена;

Менеджер.Записать();

КонецЦикла;

При больших объёмах (сотни тысяч записей) записывайте данные пакетами через набор записей с отбором, а не по одной записи — это существенно ускорит выполнение. Дополнительно оберните цикл в транзакцию, чтобы при сбое не осталось частично перенесённых данных.

Порядок программного переноса
  1. 1
    Сделайте резервную копию базы
  2. 2
    Создайте внешнюю обработку или используйте консоль кода
  3. 3
    Напишите запрос к регистру-источнику
  4. 4
    В цикле заполните и запишите записи целевого регистра
  5. 5
    Очистите целевой регистр перед повторной загрузкой при ошибке
  6. 6
    Сверьте количество записей и контрольные суммы

Способ 2: обработка «Конвертация данных»

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

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

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

Сравнение способов переноса

Программная обработка

Быстро для разовой задачи и нестандартной логики; требует навыков программирования и аккуратности

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

Подходит для регулярных переносов между базами и разных структур; нужна настройка правил

Документы ввода остатков

Единственный корректный путь для регистров, подчинённых регистраторам; медленнее на больших объёмах

Групповое перепроведение

Подходит, если данные есть в документах, но движения потеряны; не переносит данные между разными регистрами

Способ 3: перенос остатков через документы

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

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

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

Проверка результата переноса

После загрузки обязательно выполните контрольную сверку. Минимальный набор проверок: количество записей в источнике и приёмнике, суммы по ключевым ресурсам (остатки, суммы, количества) и отсутствие дублей по комбинации измерений.

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

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

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

Количество записей
Норма

Совпадает с количеством в источнике (или равно ожидаемому после отбора)

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

Меньше — часть записей не записалась; больше — дубли от повторного запуска

Суммы ресурсов
Норма

Итоги по суммам и количествам равны контрольным

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

Расхождения — ошибка в сопоставлении полей или типах данных

Отчёты по регистру
Норма

Стандартные отчёты показывают корректные остатки

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

Отчёт пустой или показывает старые данные — записи без регистратора или не проведены документы

Дубли измерений
Норма

По уникальному набору измерений одна запись

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

Несколько записей с одинаковыми измерениями — нарушена уникальность

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

Самая частая ошибка — повторный запуск обработки без очистки целевого регистра, из-за чего записи дублируются. Перед загрузкой либо очищайте приёмник, либо используйте режим поиска существующих записей по ключевым полям с обновлением вместо вставки.

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

Третья проблема — производительность. Запись миллиона записей по одной через менеджер записи займёт часы. Используйте пакетную запись наборами, отключайте итоги регистров накопления на время загрузки (в монопольном режиме) и выполняйте перенос вне рабочего времени.

Типичные ошибки
01
Запуск обработки дважды без очистки приёмника — дублирование записей
02
Прямая запись в регистр накопления без регистратора — отчёты не видят данные или учёт расходится с документами
03
Перенос ссылок между разными базами без сопоставления — битые ссылки и пустые поля
04
Отсутствие резервной копии — невозможность отката при ошибке в алгоритме
05
Игнорирование обязательных измерений целевого регистра — неполные записи

Частые вопросы о переносе данных между регистрами

Можно ли перенести данные между регистрами без программирования?

Да, если структуры регистров идентичны и база одна — подойдёт обработка «Загрузка данных из табличного документа» (есть на диске ИТС и во многих типовых конфигурациях): выгрузите записи источника в таблицу и загрузите в приёмник. Для регистров, подчинённых регистраторам, без кода или документов обойтись нельзя.

Как перенести данные между регистрами в разных базах 1С?

Используйте «Конвертацию данных» с настроенными правилами обмена или выгрузите записи запросом в файл (XML, табличный документ) и загрузите обработкой в приёмнике. Обязательно сопоставьте ссылочные поля по коду или наименованию, так как GUID одинаковых элементов в разных базах обычно различаются.

Почему после переноса отчёт по регистру пустой?

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

Как очистить целевой регистр перед повторной загрузкой?

Для независимого регистра сведений создайте набор записей без отбора и вызовите метод Записать() с пустым набором — это удалит все записи. Для регистров, подчинённых регистраторам, очистка выполняется через отмену проведения документов или очистку движений каждого регистратора.

Что делать, если структуры регистров не совпадают?

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

Нужно ли отключать итоги при массовой загрузке в регистр накопления?

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

Итог

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

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