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

Разработка и Конфигурация · 12 мин

Как скопировать движения документа в 1С

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

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

Простейший вариант — скопировать сам документ целиком и перепровести его: тогда движения сформируются заново по штатной логике. Если нужны именно записи регистров без повторного проведения, применяют ручное копирование проводок в операции, обработки типа «Универсальный подбор и обработка объектов» или программное копирование наборов записей через встроенный язык. Каждый способ имеет свои ограничения и риски.

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

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

При проведении документ записывает строки в один или несколько регистров. Например, «Реализация товаров и услуг» в типовой «Бухгалтерии предприятия» формирует проводки в регистре бухгалтерии «Хозрасчетный», записи в регистрах накопления по НДС и, при включенных настройках, в регистрах сведений. Просмотреть движения можно из формы документа: кнопка «Ещё» → «Движения документа» (в ряде конфигураций — «Показать проводки и движения»).

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

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

Способ 1. Скопировать документ и перепровести его

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

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

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

Способ 2. Ручное копирование проводок через операцию

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

Чтобы не ошибиться, откройте движения исходного документа в соседнем окне и переносите строки по одной. Обратите внимание на субконто: их состав зависит от счета, и пропущенное субконто приведет к незаполненной аналитике в отчетах. Валютные суммы, количество и суммы НУ/ПР/ВР (если ведется налоговый учет) тоже нужно переносить осознанно, а не только бухгалтерскую сумму.

Способ трудоемкий и подходит для одного-двух документов. Для массового переноса ручная работа непрактична и чревата ошибками ввода.

Способ 3. Программное копирование наборов записей

Для разработчиков и продвинутых пользователей основной инструмент — встроенный язык. Логика такая: прочитать набор записей регистра с отбором по регистратору-источнику, затем записать его с новым регистратором. Ниже типовой пример для регистра бухгалтерии.

// ДокументИсточник и ДокументПриемник — ссылки на документы

НаборИсточник = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();

НаборИсточник.Отбор.Регистратор.Установить(ДокументИсточник);

НаборИсточник.Прочитать();

НаборПриемник = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();

НаборПриемник.Отбор.Регистратор.Установить(ДокументПриемник);

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

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

Для Каждого Запись Из НаборИсточник Цикл

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

ЗаполнитьЗначенияСвойств(НоваяЗапись, Запись);

КонецЦикла;

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

Документ-приемник должен существовать в базе (быть записан) и в идеале — не иметь собственных движений по этому регистру, иначе они будут затерты или смешаются. Часто для таких целей создают служебный документ-корректировку или используют «Корректировку регистров» (в «Бухгалтерии» — «Операции, введенные вручную» с режимом корректировки регистров), который специально предназначен для ручных движений.

Для регистров накопления и сведений код аналогичен, меняется только менеджер регистра: РегистрыНакопления или РегистрыСведений. Если документ делает движения по нескольким регистрам, копировать нужно каждый набор отдельно. Список задействованных регистров виден в конфигураторе в свойствах документа на вкладке «Движения» или прямо в форме просмотра движений документа.

Нюансы при копировании

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

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

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

Способ 4. Копирование движений между базами

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

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

Для переноса между разными конфигурациями (из «Управления торговлей» в «Бухгалтерию») прямое копирование наборов не работает — структуры регистров различаются. Используйте штатные механизмы синхронизации или правила обмена «Конвертации данных».

Маршрут решения

Как выбрать способ

Нужно повторить аналогичную хозяйственную операциюСкопируйте документ (F9) и перепроведите его — движения сформируются штатно
Нужны только проводки без типового документаСоздайте операцию, введенную вручную, и перенесите проводки
Нужно программно перенести движения на другой документИспользуйте копирование наборов записей через встроенный язык
Нужно перенести движения в другую базу с той же конфигурациейИспользуйте выгрузку/загрузку XML или перенесите документы и проведите их заново

Проверка результата и типичные ошибки

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

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

Типичные ошибки
01
Копирование наборов записей без очистки приемника — старые и новые записи смешиваются, суммы задваиваются
02
Повторное проведение документа-приемника после ручного копирования — штатный алгоритм затирает скопированные движения
03
Перенос только бухгалтерской суммы без субконто, валютных и налоговых сумм — отчеты по аналитике и НУ расходятся
04
Копирование движений на документ, который не является регистратором нужного регистра — записи не видны в движениях документа
05
Работа в рабочей базе без резервной копии — при ошибке восстановить исходное состояние регистров невозможно
Контрольные точки

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

Количество строк в движениях приемника
Норма

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

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

Строк больше или меньше — возможно задвоение или неполное копирование

Итоговые суммы по регистру
Норма

Обороты по счетам/измерениям увеличились ровно на сумму источника

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

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

Состояние после перепроведения приемника
Норма

Движения соответствуют ожиданиям (штатные или осознанно сохраненные ручные)

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

Скопированные записи исчезли — штатное проведение перезаписало набор

Ограничения и безопасные границы

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

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

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

Итог

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

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

Частые вопросы

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

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

Почему после перепроведения документа скопированные вручную движения пропали?

При проведении документ полностью перезаписывает свои наборы записей по штатному алгоритму. Все строки, добавленные в обход проведения, затираются. Если нужны постоянные ручные движения, оформляйте их отдельным документом «Операция» или «Корректировка регистров», а не вмешивайтесь в движения проводимого документа.

Как скопировать движения по всем регистрам сразу?

Программно: получить список регистров из метаданных документа (свойство «Движения» объекта метаданных) и в цикле скопировать набор записей каждого регистра. Готовые универсальные обработки с ИТС и из сообществ также умеют переносить все движения документа одним действием.

Можно ли скопировать движения в закрытый период?

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

Чем отличается копирование документа от копирования его движений?

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

Как перенести движения между базами с разными конфигурациями?

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