Массовое копирование документов в 1С: от клавиши F9 до своей обработки

· 10 мин

Содержание

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

Частое заблуждение — выделить строки с Ctrl или Shift, нажать F9 и ждать пачку копий. Откроется одна форма, по текущему документу. Остальные выделенные строки программа просто проигнорирует. Значит, для группы документов нужен один из обходных путей — у каждого свои ограничения.

Что делает команда «Скопировать» и почему она берёт один документ

Копирование в 1С 8.3 — это создание нового объекта по образцу. Платформа берёт реквизиты шапки и все табличные части исходного документа, открывает форму нового документа и ждёт, пока вы её запишете. Пока вы не нажали Записать или Провести и закрыть, копии в базе нет.

Что происходит с полями при копировании:

  • 🔢 Номер — очищается, новый присвоится при записи по правилам нумерации.
  • 📅 Дата — в типовых конфигурациях обычно подставляется текущая, но проверяйте её перед записью.
  • 📦 Табличные части — переносятся целиком: товары, услуги, счета учёта.
  • 🧾 Связанные документы — счета-фактуры, платёжки, ссылки «на основании» не копируются.
  • ✅ Проведение — копия создаётся непроведённой.

Часть полей типовая конфигурация чистит сама — это делает обработчик ПриКопировании в модуле документа. Поэтому одинаковый документ в БП и в УТ копируется немного по-разному.

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

Штатное копирование документов в типовых конфигурациях по одному

Если документов 5–15, быстрее всего скопировать их вручную. Порядок одинаковый для любой типовой конфигурации на интерфейсе «Такси»:

  1. Откройте журнал нужного вида документов, например список поступлений.
  2. Встаньте на документ-образец.
  3. Нажмите F9 или кнопку с двумя листками в командной панели. Та же команда есть в меню Ещё → Скопировать.
  4. В открывшейся форме поправьте дату, контрагента, количество — что должно отличаться.
  5. Нажмите Записать, если проводить пока рано, или Провести и закрыть.
  6. Вернитесь в список и повторите для следующего документа.

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

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

Как поправить скопированные документы разом: групповое изменение реквизитов

Групповое изменение реквизитов само ничего не копирует. Оно меняет одинаковое поле у многих объектов сразу. В связке с ручным копированием это закрывает большую часть задач «размножить документы на новый период».

Где найти инструмент:

Откуда запускатьКак найти
Из списка документоввыделите строки → Ещё → Изменить выделенные
Отдельной обработкой в БП 3.0Администрирование → Обслуживание → Корректировка данных → Групповое изменение реквизитов

Как пользоваться:

  1. Скопируйте документы и запишите копии без проведения.
  2. В списке отберите их: по дате создания, автору или пустому полю «Проведён».
  3. Выделите строки (Ctrl+A выделяет все видимые).
  4. Откройте Изменить выделенные, отметьте галочкой реквизит, например «Дата» или «Склад», и укажите новое значение.
  5. Нажмите Изменить реквизиты. Внизу формы будет отчёт, у скольких объектов изменение прошло.
  6. Проведите документы через Ещё → Провести или групповым перепроведением.

Ограничения, о которых надо знать заранее:

  • ⛔ Реквизиты табличных частей групповое изменение тоже умеет, но строки оно не добавляет и не удаляет.
  • ⛔ Проведённые документы в закрытом периоде не изменятся, если стоит дата запрета изменения данных.
  • ⛔ Меняя дату у проведённых документов, вы сдвигаете движения по регистрам. Безопаснее менять дату у непроведённых копий.

Копирование документов в 1С:Бухгалтерии и 1С:Управлении торговлей

Сама команда копирования в БП 3.0 и УТ 11 одинакова. Отличается то, что попадает в копию и что придётся заполнить заново.

1С:Бухгалтерия предприятия 3.0

  • 🧾 Документ-копия не получает счёт-фактуру. Для поступлений и реализаций его регистрируют отдельно, кнопкой в подвале формы документа.
  • 📊 Счета учёта в табличной части переносятся как есть. Если в новом периоде счета учёта номенклатуры поменялись, проверьте их в строках вручную: копия возьмёт старые.
  • 🏦 Платёжные документы копируются без связи с банковской выпиской: копия платёжного поручения — это новый неотправленный документ.

1С:Управление торговлей 11

  • 📑 Если документ создан по заказу или по распоряжению, копия наследует ссылку на распоряжение. Две реализации под один заказ — частая причина расхождений по заказу. Перед записью проверьте поле с основанием и при необходимости очистите его.
  • 💲 В УТ цены задаются видами цен. В копии цены остаются старыми, даже если вид цен уже переоценён. Используйте в табличной части команду заполнения цен по виду цен.
  • 🚚 Статус документа копия, как правило, получает начальный — проверьте его, если у вас настроены согласования.

Общее для обеих программ: копируйте документы в открытом периоде и до копирования убедитесь, что справочники (контрагенты, договоры, номенклатура) не помечены на удаление.

Создание на основании: когда это копирование и откуда берутся дубли

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

Отличия от копирования:

СпособВид нового документаСвязь с исходнымРиск дублей
Скопировать (F9)тот женетвысокий: два одинаковых документа
Создать на основанииобычно другойесть, видна в структуре подчинённостисредний: можно ввести дважды
Групповое изменениеновый не создаётся—нет

Часть команд создания на основании в типовых конфигурациях работает по нескольким выделенным документам. Так, в БП 3.0 по группе поступлений можно сразу создать платёжки, а в УТ — оформить одну реализацию по нескольким заказам. Если команда в меню Создать на основании доступна при выделении нескольких строк, значит, конфигурация поддерживает групповой ввод.

Откуда берутся дубли:

  1. Пользователь вводит документ на основании, закрывает форму без записи, а потом делает это ещё раз — и записывает оба.
  2. Два сотрудника одновременно оформляют реализацию по одному заказу.
  3. Документ копируют вместо ввода на основании, и программа не видит связи, поэтому контроль «по заказу уже отгружено» не срабатывает.

Проверить дубли помогает Структура подчинённости — команда в меню Ещё формы документа. Она показывает все документы, введённые на основании выбранного. Два одинаковых подчинённых документа — повод разобраться.

Если копию случайно провели, она задвоила движения: остатки, взаиморасчёты, НДС. Не удаляйте такую копию сразу — сначала отмените проведение, затем пометьте на удаление и удалите через Администрирование → Обслуживание → Корректировка данных → Удаление помеченных объектов.

Обработка для массового копирования документов: пример кода

Когда документов десятки и сотни, копировать их руками нет смысла. Программист за полчаса сделает внешнюю обработку, которую потом можно подключить через Администрирование → Печатные формы, отчёты и обработки → Дополнительные отчёты и обработки.

Структура обработки:

  • реквизит НоваяДата (тип «Дата»);
  • табличная часть Документы с колонками Документ (составной тип нужных документов), Копия и Ошибка (строка);
  • форма с таблицей, кнопкой «Заполнить» и кнопкой «Скопировать».

Заполнение таблицы запросом — пример для поступлений в БП 3.0:

&НаСервере
Процедура ЗаполнитьНаСервере(НачалоПериода, КонецПериода)
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    Док.Ссылка КАК Документ
    |ИЗ
    |    Документ.ПоступлениеТоваровУслуг КАК Док
    |ГДЕ
    |    Док.Дата МЕЖДУ &Начало И &Конец
    |    И НЕ Док.ПометкаУдаления
    |УПОРЯДОЧИТЬ ПО
    |    Док.Дата";
    Запрос.УстановитьПараметр("Начало", НачалоПериода);
    Запрос.УстановитьПараметр("Конец", КонецПериода);
    Объект.Документы.Загрузить(Запрос.Выполнить().Выгрузить());
КонецПроцедуры

Само копирование. Метод Скопировать() объекта документа создаёт новый объект с теми же реквизитами и табличными частями; УстановитьНовыйНомер() присваивает номер:

&НаСервере
Процедура СкопироватьНаСервере()
    Для Каждого Строка Из Объект.Документы Цикл
        Если ЗначениеЗаполнено(Строка.Копия) Тогда
            Продолжить; // уже скопирован при прошлом запуске
        КонецЕсли;
        Попытка
            Копия = Строка.Документ.ПолучитьОбъект().Скопировать();
            Копия.Дата = Объект.НоваяДата;
            Копия.УстановитьНовыйНомер();
            Копия.Записать(РежимЗаписиДокумента.Запись);
            Строка.Копия = Копия.Ссылка;
            Строка.Ошибка = "";
        Исключение
            Строка.Ошибка = КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
        КонецПопытки;
    КонецЦикла;
КонецПроцедуры

Что важно в этом коде:

  • 🛡 Копии записываются без проведения (РежимЗаписиДокумента.Запись). Сначала проверяете результат, потом проводите.
  • 🔁 Проверка ЗначениеЗаполнено(Строка.Копия) делает обработку возобновляемой: при повторном запуске уже скопированные строки пропускаются, дубли не появляются.
  • 🧯 Ошибка одного документа не останавливает остальные — текст пишется в колонку Ошибка.
  • ⚙️ Обработчики ПриКопировании и ПередЗаписью модуля документа срабатывают так же, как при ручном копировании, поэтому типовая логика очистки полей сохраняется.

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

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

Как копировать сотни и тысячи документов без зависаний

На 50 документов обработка выше отработает за секунды. На 5 000 документов с большими табличными частями — уже минуты, и тут появляются свои проблемы.

Что помогает:

  1. Работа целиком на сервере. Весь цикл — в одной серверной процедуре. Вызов сервера на каждый документ с клиента замедляет работу в разы.
  2. Порции. Обрабатывайте по 200–500 документов и сохраняйте результат. Если сеанс оборвётся, вы потеряете одну порцию, а не всё.
  3. Фоновое задание. Для тысяч документов запускайте копирование фоновым заданием, чтобы форма не висела и не обрывалась по таймауту. В конфигурациях на БСП для этого есть общий модуль ДлительныеОперации.
  4. Проведение отдельным шагом. Сначала запишите все копии, потом проводите групповым перепроведением в нужной последовательности. Проведение — самая тяжёлая часть, и в один проход с копированием оно растягивает время в несколько раз.
  5. Нерабочее время. Массовая запись блокирует данные. Пользователи, которые в тот же момент проводят документы, могут получать ошибки блокировок.

Отдельно про флаг ОбменДанными.Загрузка = Истина. Он ускоряет запись, потому что отключает проверки и часть обработчиков. Но вместе с проверками отключается и заполнение служебных полей, которое типовая конфигурация делает при записи. Без понимания модуля документа этот флаг не включайте: можно получить копии, которые не проводятся или проводятся неправильно.

Ориентировочно запись документа с 10–20 строками без проведения занимает десятки миллисекунд, так что 1 000 таких документов копируются за минуту-две. Точное время зависит от сервера и размера базы, поэтому сначала замерьте порцию в 100 документов на копии базы.

Перед массовым копированием
Выполнено: 0 / 6

Частые ошибки при копировании нескольких документов

  • ❌ Нажали F9 на выделенной группе и решили, что скопировали всё. Скопирован только текущий документ. Проверяйте количество новых строк в списке.
  • ❌ Провели копии сразу и обнаружили неверную дату. Перенос даты у проведённых документов перестраивает движения и последовательность. Меняйте дату до проведения.
  • ❌ Скопировали документ со старыми ценами. Копия не пересчитывает цены. В УТ перезаполните их по виду цен, в БП — проверьте вручную.
  • ❌ Скопировали документ вместо ввода на основании. Связи с заказом или договором нет, контроль отгрузки и оплаты не сработает.
  • ❌ Запустили самописную обработку дважды. Без проверки уже созданных копий второй запуск создаёт дубли. Делайте обработку возобновляемой, как в примере выше.

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

Можно ли скопировать документы в 1С через буфер обмена, как файлы?
Нет. Ctrl+C в списке документов копирует текст строки, а не сам документ. Вставить через Ctrl+V документ как объект не получится.
Сохранится ли у копии комментарий и ответственный?
Комментарий обычно переносится, ответственный — зависит от конфигурации: часть типовых подставляет текущего пользователя. Проверяйте поля в подвале формы перед записью.
Как скопировать документы из одной организации в другую в одной базе?
Скопируйте документы и групповым изменением замените реквизит «Организация». Затем проверьте договоры: они привязаны к организации, и их тоже придётся заменить.
Копируются ли прикреплённые файлы и сканы?
Нет. Присоединённые файлы хранятся отдельно и к копии не привязываются. Их нужно прикрепить заново.
Нужны ли права администратора для массового копирования?
Для ручного копирования и группового изменения достаточно прав на добавление и изменение документов этого вида. Для подключения внешней обработки нужны права на дополнительные обработки — обычно их выдаёт администратор.