Администрирование · 10 мин
Как перенести данные из одного регистра в другой в 1С
Способы переноса данных между регистрами в 1С: обработкой, запросом и типовыми средствами. Пошаговые инструкции, примеры кода, проверка результата и типичные ошибки.
Перенос данных между регистрами в 1С требуется при изменении структуры учёта, переходе на новую конфигурацию, исправлении ошибок проектирования или консолидации сведений из нескольких регистров в один. Задача решается несколькими способами: программным перебором записей через встроенный язык, обработкой «Конвертация данных», универсальными обработками загрузки/выгрузки или стандартными документами корректировки.
Выбор метода зависит от типа регистра (сведений, накопления, бухгалтерии), объёма данных и того, совпадает ли структура измерений и ресурсов. Простой перенос между регистрами сведений с одинаковой структурой выполняется несколькими строками кода, а перенос остатков по регистрам накопления требует формирования документов ввода начальных остатков, иначе нарушится связность учёта.
Перед любыми манипуляциями с регистрами обязательно сделайте резервную копию информационной базы. Прямая запись в регистры минует бизнес-логику документов, поэтому ошибка в алгоритме приведёт к расхождениям в отчётах, которые сложно отследить и откатить без архивной копии.
Определите тип регистров и ограничения переноса
Первый шаг — понять, с какими регистрами вы работаете, потому что от этого зависит допустимый способ переноса. Регистры сведений хранят данные в разрезе измерений и могут быть независимыми или подчинёнными регистратору. Регистры накопления и бухгалтерии всегда подчинены регистраторам: каждая запись в них создаётся движением документа.
Если регистр подчинён регистратору, простое копирование записей через набор записей не сработает корректно без указания регистратора — платформа потребует заполнить это поле. Правильный путь для таких регистров — создать документы (например, «Операция» в регистрах бухгалтерии или «Ввод начальных остатков» в типовых конфигурациях) и провести их.
Также проверьте совпадение структур: имена и типы измерений, ресурсов и реквизитов. Если в целевом регистре есть обязательные измерения, которых нет в источнике, потребуется логика заполнения значений по умолчанию, иначе записи будут неполными или не запишутся вовсе.
Способ 1: программный перенос через набор записей
Самый гибкий метод — обработка на встроенном языке 1С. Она подходит для регистров сведений и случаев, когда структуры регистров различаются и нужна трансформация данных «на лету». Общий принцип: прочитать записи источника запросом, пройтись по выборке и записать каждую строку в целевой регистр через менеджер записи или набор записей.
Пример кода для переноса между независимыми регистрами сведений:
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ * ИЗ РегистрСведений.СтарыйРегистр";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Менеджер = РегистрыСведений.НовыйРегистр.СоздатьМенеджерЗаписи();
Менеджер.Период = Выборка.Период;
Менеджер.Номенклатура = Выборка.Номенклатура;
Менеджер.Цена = Выборка.Цена;
Менеджер.Записать();
КонецЦикла;
При больших объёмах (сотни тысяч записей) записывайте данные пакетами через набор записей с отбором, а не по одной записи — это существенно ускорит выполнение. Дополнительно оберните цикл в транзакцию, чтобы при сбое не осталось частично перенесённых данных.
- 1Сделайте резервную копию базы
- 2Создайте внешнюю обработку или используйте консоль кода
- 3Напишите запрос к регистру-источнику
- 4В цикле заполните и запишите записи целевого регистра
- 5Очистите целевой регистр перед повторной загрузкой при ошибке
- 6Сверьте количество записей и контрольные суммы
Способ 2: обработка «Конвертация данных»
«Конвертация данных» (КД 2.1 или 3.0) — типовой инструмент фирмы «1С» для переноса между любыми объектами, включая регистры. Она незаменима, когда перенос выполняется регулярно, между разными базами или с неодинаковыми структурами и сложными правилами сопоставления полей.
Схема работы: в конфигурации «Конвертация данных» настраиваются правила конвертации объектов (ПКО) и свойств (ПКС), затем правила сохраняются в XML-файл. Универсальная обработка «Универсальный обмен данными в формате XML» выгружает данные из источника и загружает их в приёмник по этим правилам.
Плюс метода — визуальная настройка соответствий полей и возможность переиспользовать правила. Минус — порог входа выше, чем у простой обработки, и для разового переноса пары сотен записей настройка правил может занять больше времени, чем написание кода.
Сравнение способов переноса
Быстро для разовой задачи и нестандартной логики; требует навыков программирования и аккуратности
Подходит для регулярных переносов между базами и разных структур; нужна настройка правил
Единственный корректный путь для регистров, подчинённых регистраторам; медленнее на больших объёмах
Подходит, если данные есть в документах, но движения потеряны; не переносит данные между разными регистрами
Способ 3: перенос остатков через документы
Регистры накопления («ТоварыНаСкладах», «Взаиморасчёты» и подобные) и регистры бухгалтерии нельзя корректно заполнить напрямую — записи в них должны появляться как движения документов. Для переноса используются документы «Корректировка регистров», «Операция» (для регистров бухгалтерии) или специализированные документы ввода начальных остатков из состава конфигурации.
Типовой сценарий: выгрузить остатки из регистра-источника на дату свёртки, создать документы «Операция» или «Ввод остатков» с этими данными и провести их. В результате целевой регистр получит корректные движения с регистратором, а отчёты будут сходиться.
Если нужно не скопировать, а именно переместить данные (с очисткой источника), сначала сформируйте сторнирующие документы по регистру-источнику и только потом вводите остатки в целевой. Прямая очистка регистра накопления через набор записей без сторнирования приведёт к «висячим» расхождениям в отчётности.
Проверка результата переноса
После загрузки обязательно выполните контрольную сверку. Минимальный набор проверок: количество записей в источнике и приёмнике, суммы по ключевым ресурсам (остатки, суммы, количества) и отсутствие дублей по комбинации измерений.
Для сверки удобно использовать консоль запросов: выгрузите из обоих регистров группировку по измерениям с суммами ресурсов и сравните результаты. В типовых конфигурациях дополнительно сформируйте стандартные отчёты (оборотно-сальдовую ведомость, отчёт по остаткам) до и после переноса — итоги должны совпасть.
Как проверить результат
Совпадает с количеством в источнике (или равно ожидаемому после отбора)
Меньше — часть записей не записалась; больше — дубли от повторного запуска
Итоги по суммам и количествам равны контрольным
Расхождения — ошибка в сопоставлении полей или типах данных
Стандартные отчёты показывают корректные остатки
Отчёт пустой или показывает старые данные — записи без регистратора или не проведены документы
По уникальному набору измерений одна запись
Несколько записей с одинаковыми измерениями — нарушена уникальность
Типичные ошибки и ограничения
Самая частая ошибка — повторный запуск обработки без очистки целевого регистра, из-за чего записи дублируются. Перед загрузкой либо очищайте приёмник, либо используйте режим поиска существующих записей по ключевым полям с обновлением вместо вставки.
Вторая группа ошибок связана с типами данных: при переносе строк в числовые поля, дат в строковые реквизиты или ссылок несовпадающих типов (например, справочник «Номенклатура» источника не совпадает по GUID с приёмником в другой базе) записи либо не создаются, либо содержат пустые значения. При переносе между разными базами сопоставляйте ссылки по коду, наименованию или другому надёжному ключу.
Третья проблема — производительность. Запись миллиона записей по одной через менеджер записи займёт часы. Используйте пакетную запись наборами, отключайте итоги регистров накопления на время загрузки (в монопольном режиме) и выполняйте перенос вне рабочего времени.
Частые вопросы о переносе данных между регистрами
Можно ли перенести данные между регистрами без программирования?
Да, если структуры регистров идентичны и база одна — подойдёт обработка «Загрузка данных из табличного документа» (есть на диске ИТС и во многих типовых конфигурациях): выгрузите записи источника в таблицу и загрузите в приёмник. Для регистров, подчинённых регистраторам, без кода или документов обойтись нельзя.
Как перенести данные между регистрами в разных базах 1С?
Используйте «Конвертацию данных» с настроенными правилами обмена или выгрузите записи запросом в файл (XML, табличный документ) и загрузите обработкой в приёмнике. Обязательно сопоставьте ссылочные поля по коду или наименованию, так как GUID одинаковых элементов в разных базах обычно различаются.
Почему после переноса отчёт по регистру пустой?
Наиболее вероятные причины: записи созданы без регистратора в подчинённом регистре, документы-движения не проведены, либо данные записаны в другой период, чем отбирает отчёт. Проверьте наличие записей консолью запроса и даты в поле «Период».
Как очистить целевой регистр перед повторной загрузкой?
Для независимого регистра сведений создайте набор записей без отбора и вызовите метод Записать() с пустым набором — это удалит все записи. Для регистров, подчинённых регистраторам, очистка выполняется через отмену проведения документов или очистку движений каждого регистратора.
Что делать, если структуры регистров не совпадают?
Напишите обработку с явным сопоставлением полей: в цикле заполняйте каждое поле целевой записи из соответствующего поля источника, а недостающие значения вычисляйте или задавайте по умолчанию. Для сложных преобразований и повторяющихся переносов удобнее настроить правила в «Конвертации данных».
Нужно ли отключать итоги при массовой загрузке в регистр накопления?
Да, при загрузке больших объёмов через движения документов отключение итогов заметно ускоряет запись. Выполняйте операцию в монопольном режиме, а после завершения включите итоги обратно и проверьте восстановление значений, иначе отчёты по текущим остаткам будут работать медленно или некорректно.
Что важно запомнить
Способ переноса выбирается по типу регистра: сведения — программно или обработкой, регистры с регистратором — только через документы. Всегда делайте резервную копию, переносите сначала на копии базы и сверяйте количество записей и итоги по ресурсам после загрузки.