Массовое копирование документов в 1С: от клавиши F9 до своей обработки
Содержание
Скопировать несколько документов в 1С одной кнопкой нельзя: команда Скопировать (клавиша F9) в списке документов работает только с текущей строкой, даже если выделено двадцать. Для группы есть три рабочих пути: копировать по одному и потом разом поправить реквизиты групповым изменением, создавать новые документы на основании старых или написать небольшую внешнюю обработку
, которая скопирует всю выборку за один проход.
Частое заблуждение — выделить строки с Ctrl или Shift, нажать F9 и ждать пачку копий. Откроется одна форма, по текущему документу. Остальные выделенные строки программа просто проигнорирует. Значит, для группы документов нужен один из обходных путей — у каждого свои ограничения.
Что делает команда «Скопировать» и почему она берёт один документ
Копирование в 1С 8.3 — это создание нового объекта по образцу. Платформа берёт реквизиты шапки и все табличные части исходного документа, открывает форму нового документа и ждёт, пока вы её запишете. Пока вы не нажали Записать или Провести и закрыть, копии в базе нет.
Что происходит с полями при копировании:
- 🔢 Номер — очищается, новый присвоится при записи по правилам нумерации.
- 📅 Дата — в типовых конфигурациях обычно подставляется текущая, но проверяйте её перед записью.
- 📦 Табличные части — переносятся целиком: товары, услуги, счета учёта.
- 🧾 Связанные документы — счета-фактуры, платёжки, ссылки «на основании» не копируются.
- ✅ Проведение — копия создаётся непроведённой.
Часть полей типовая конфигурация чистит сама — это делает обработчик ПриКопировании в модуле документа. Поэтому одинаковый документ в БП и в УТ копируется немного по-разному.
Ограничение «одна строка — одна копия» заложено в платформе: форма документа открывается одна, и интерактивно пакетно открыть десяток незаписанных копий нельзя. Отсюда все обходные пути.
Штатное копирование документов в типовых конфигурациях по одному
Если документов 5–15, быстрее всего скопировать их вручную. Порядок одинаковый для любой типовой конфигурации на интерфейсе «Такси»:
- Откройте журнал нужного вида документов, например список поступлений.
- Встаньте на документ-образец.
- Нажмите
F9или кнопку с двумя листками в командной панели. Та же команда есть в менюЕщё → Скопировать. - В открывшейся форме поправьте дату, контрагента, количество — что должно отличаться.
- Нажмите
Записать, если проводить пока рано, илиПровести и закрыть. - Вернитесь в список и повторите для следующего документа.
Если копии должны отличаться только датой или одним реквизитом, не правьте их по ходу. Запишите все копии без проведения, а потом поменяйте общий реквизит одной операцией — об этом следующий раздел.
Удобный приём для серии: копируйте не исходник, а последнюю сделанную копию. Тогда изменения, внесённые в предыдущую, переходят в следующую, и правок становится меньше.
Как поправить скопированные документы разом: групповое изменение реквизитов
Групповое изменение реквизитов само ничего не копирует. Оно меняет одинаковое поле у многих объектов сразу. В связке с ручным копированием это закрывает большую часть задач «размножить документы на новый период».
Где найти инструмент:
| Откуда запускать | Как найти |
|---|---|
| Из списка документов | выделите строки → Ещё → Изменить выделенные |
| Отдельной обработкой в БП 3.0 | Администрирование → Обслуживание → Корректировка данных → Групповое изменение реквизитов |
Как пользоваться:
- Скопируйте документы и запишите копии без проведения.
- В списке отберите их: по дате создания, автору или пустому полю «Проведён».
- Выделите строки (
Ctrl+Aвыделяет все видимые). - Откройте
Изменить выделенные, отметьте галочкой реквизит, например «Дата» или «Склад», и укажите новое значение. - Нажмите
Изменить реквизиты. Внизу формы будет отчёт, у скольких объектов изменение прошло. - Проведите документы через
Ещё → Провестиили групповым перепроведением.
Ограничения, о которых надо знать заранее:
- ⛔ Реквизиты табличных частей групповое изменение тоже умеет, но строки оно не добавляет и не удаляет.
- ⛔ Проведённые документы в закрытом периоде не изменятся, если стоит дата запрета изменения данных.
- ⛔ Меняя дату у проведённых документов, вы сдвигаете движения по регистрам. Безопаснее менять дату у непроведённых копий.
Копирование документов в 1С:Бухгалтерии и 1С:Управлении торговлей
Сама команда копирования в БП 3.0 и УТ 11 одинакова. Отличается то, что попадает в копию и что придётся заполнить заново.
1С:Бухгалтерия предприятия 3.0
- 🧾 Документ-копия не получает счёт-фактуру. Для поступлений и реализаций его регистрируют отдельно, кнопкой в подвале формы документа.
- 📊 Счета учёта в табличной части переносятся как есть. Если в новом периоде счета учёта номенклатуры поменялись, проверьте их в строках вручную: копия возьмёт старые.
- 🏦 Платёжные документы копируются без связи с банковской выпиской: копия платёжного поручения — это новый неотправленный документ.
1С:Управление торговлей 11
- 📑 Если документ создан по заказу или по распоряжению, копия наследует ссылку на распоряжение. Две реализации под один заказ — частая причина расхождений по заказу. Перед записью проверьте поле с основанием и при необходимости очистите его.
- 💲 В УТ цены задаются видами цен. В копии цены остаются старыми, даже если вид цен уже переоценён. Используйте в табличной части команду заполнения цен по виду цен.
- 🚚 Статус документа копия, как правило, получает начальный — проверьте его, если у вас настроены согласования.
Общее для обеих программ: копируйте документы в открытом периоде и до копирования убедитесь, что справочники (контрагенты, договоры, номенклатура) не помечены на удаление.
Создание на основании: когда это копирование и откуда берутся дубли
Команда Создать на основании часто решает задачу лучше копирования. Новый документ другого вида заполняется данными исходного и хранит на него ссылку. Например, реализация по заказу или платёжное поручение по поступлению.
Отличия от копирования:
| Способ | Вид нового документа | Связь с исходным | Риск дублей |
|---|---|---|---|
Скопировать (F9) | тот же | нет | высокий: два одинаковых документа |
| Создать на основании | обычно другой | есть, видна в структуре подчинённости | средний: можно ввести дважды |
| Групповое изменение | новый не создаётся | — | нет |
Часть команд создания на основании в типовых конфигурациях работает по нескольким выделенным документам. Так, в БП 3.0 по группе поступлений можно сразу создать платёжки, а в УТ — оформить одну реализацию по нескольким заказам. Если команда в меню Создать на основании доступна при выделении нескольких строк, значит, конфигурация поддерживает групповой ввод.
Откуда берутся дубли:
- Пользователь вводит документ на основании, закрывает форму без записи, а потом делает это ещё раз — и записывает оба.
- Два сотрудника одновременно оформляют реализацию по одному заказу.
- Документ копируют вместо ввода на основании, и программа не видит связи, поэтому контроль «по заказу уже отгружено» не срабатывает.
Проверить дубли помогает Структура подчинённости — команда в меню Ещё формы документа. Она показывает все документы, введённые на основании выбранного. Два одинаковых подчинённых документа — повод разобраться.
Если копию случайно провели, она задвоила движения: остатки, взаиморасчёты, НДС. Не удаляйте такую копию сразу — сначала отмените проведение, затем пометьте на удаление и удалите через Администрирование → Обслуживание → Корректировка данных → Удаление помеченных объектов.
Обработка для массового копирования документов: пример кода
Когда документов десятки и сотни, копировать их руками нет смысла. Программист за полчаса сделает внешнюю обработку, которую потом можно подключить через Администрирование → Печатные формы, отчёты и обработки → Дополнительные отчёты и обработки.
Структура обработки:
- реквизит
НоваяДата(тип «Дата»); - табличная часть
Документыс колонкамиДокумент(составной тип нужных документов),КопияиОшибка(строка); - форма с таблицей, кнопкой «Заполнить» и кнопкой «Скопировать».
Заполнение таблицы запросом — пример для поступлений в БП 3.0:
&НаСервере
Процедура ЗаполнитьНаСервере(НачалоПериода, КонецПериода)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Док.Ссылка КАК Документ
|ИЗ
| Документ.ПоступлениеТоваровУслуг КАК Док
|ГДЕ
| Док.Дата МЕЖДУ &Начало И &Конец
| И НЕ Док.ПометкаУдаления
|УПОРЯДОЧИТЬ ПО
| Док.Дата";
Запрос.УстановитьПараметр("Начало", НачалоПериода);
Запрос.УстановитьПараметр("Конец", КонецПериода);
Объект.Документы.Загрузить(Запрос.Выполнить().Выгрузить());
КонецПроцедуры
Само копирование. Метод Скопировать() объекта документа создаёт новый объект с теми же реквизитами и табличными частями; УстановитьНовыйНомер() присваивает номер:
&НаСервере
Процедура СкопироватьНаСервере()
Для Каждого Строка Из Объект.Документы Цикл
Если ЗначениеЗаполнено(Строка.Копия) Тогда
Продолжить; // уже скопирован при прошлом запуске
КонецЕсли;
Попытка
Копия = Строка.Документ.ПолучитьОбъект().Скопировать();
Копия.Дата = Объект.НоваяДата;
Копия.УстановитьНовыйНомер();
Копия.Записать(РежимЗаписиДокумента.Запись);
Строка.Копия = Копия.Ссылка;
Строка.Ошибка = "";
Исключение
Строка.Ошибка = КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
КонецЦикла;
КонецПроцедуры
Что важно в этом коде:
- 🛡 Копии записываются без проведения (
РежимЗаписиДокумента.Запись). Сначала проверяете результат, потом проводите. - 🔁 Проверка
ЗначениеЗаполнено(Строка.Копия)делает обработку возобновляемой: при повторном запуске уже скопированные строки пропускаются, дубли не появляются. - 🧯 Ошибка одного документа не останавливает остальные — текст пишется в колонку
Ошибка. - ⚙️ Обработчики
ПриКопированиииПередЗаписьюмодуля документа срабатывают так же, как при ручном копировании, поэтому типовая логика очистки полей сохраняется.
Если нужно копировать не в ту же базу, а в другую, своя обработка не нужна. Для переноса между базами с одной конфигурацией подходит Выгрузка и загрузка данных XML, для разных конфигураций — обмен по правилам конвертации.
Запускайте обработку сначала на копии базы. Ошибку в коде, создавшую 800 лишних документов, в рабочей базе исправлять долго.
Как копировать сотни и тысячи документов без зависаний
На 50 документов обработка выше отработает за секунды. На 5 000 документов с большими табличными частями — уже минуты, и тут появляются свои проблемы.
Что помогает:
- Работа целиком на сервере. Весь цикл — в одной серверной процедуре. Вызов сервера на каждый документ с клиента замедляет работу в разы.
- Порции. Обрабатывайте по 200–500 документов и сохраняйте результат. Если сеанс оборвётся, вы потеряете одну порцию, а не всё.
- Фоновое задание. Для тысяч документов запускайте копирование фоновым заданием, чтобы форма не висела и не обрывалась по таймауту. В конфигурациях на БСП для этого есть общий модуль
ДлительныеОперации. - Проведение отдельным шагом. Сначала запишите все копии, потом проводите групповым перепроведением в нужной последовательности. Проведение — самая тяжёлая часть, и в один проход с копированием оно растягивает время в несколько раз.
- Нерабочее время. Массовая запись блокирует данные. Пользователи, которые в тот же момент проводят документы, могут получать ошибки блокировок.
Отдельно про флаг ОбменДанными.Загрузка = Истина. Он ускоряет запись, потому что отключает проверки и часть обработчиков. Но вместе с проверками отключается и заполнение служебных полей, которое типовая конфигурация делает при записи. Без понимания модуля документа этот флаг не включайте: можно получить копии, которые не проводятся или проводятся неправильно.
Ориентировочно запись документа с 10–20 строками без проведения занимает десятки миллисекунд, так что 1 000 таких документов копируются за минуту-две. Точное время зависит от сервера и размера базы, поэтому сначала замерьте порцию в 100 документов на копии базы.
Частые ошибки при копировании нескольких документов
- ❌ Нажали
F9на выделенной группе и решили, что скопировали всё. Скопирован только текущий документ. Проверяйте количество новых строк в списке. - ❌ Провели копии сразу и обнаружили неверную дату. Перенос даты у проведённых документов перестраивает движения и последовательность. Меняйте дату до проведения.
- ❌ Скопировали документ со старыми ценами. Копия не пересчитывает цены. В УТ перезаполните их по виду цен, в БП — проверьте вручную.
- ❌ Скопировали документ вместо ввода на основании. Связи с заказом или договором нет, контроль отгрузки и оплаты не сработает.
- ❌ Запустили самописную обработку дважды. Без проверки уже созданных копий второй запуск создаёт дубли. Делайте обработку возобновляемой, как в примере выше.
Частые вопросы
Можно ли скопировать документы в 1С через буфер обмена, как файлы?
Ctrl+C в списке документов копирует текст строки, а не сам документ. Вставить через Ctrl+V документ как объект не получится.