В процессе работы в 1С:Бухгалтерия 8.3 (редакция 3.0) пользователи часто сталкиваются с необходимостью массового создания однотипных документов. Например, когда нужно выставить счета или реализации десяткам контрагентов на основании документов прошлого месяца. По привычке многие пытаются выделить список документов мышкой и нажать клавишу F9 (стандартная команда копирования), однако система либо копирует только один (активный) документ, либо не реагирует вовсе. Разберем подробно, почему так происходит и какими способами можно реализовать групповое копирование.
Проанализируем техническую сторону вопроса. В управляемом интерфейсе 1С:Предприятие 8.3 команда «Скопировать» жестко привязана к открытию формы нового объекта. Когда вы инициируете копирование, система выполняет метод Скопировать(), создает в оперативной памяти новый объект и сразу же пытается открыть его форму, чтобы пользователь мог отредактировать данные перед записью. Если бы платформа позволяла копировать сразу 50 или 100 документов стандартным способом, интерфейс бы просто «завис», пытаясь отрисовать сотню окон одновременно. Именно поэтому штатная кнопка в списках заблокирована для множественного выбора.
Для программиста или администратора системы самым быстрым решением будет написание небольшого скрипта. Мы можем обойти открытие форм и выполнить копирование непосредственно в базе данных. Рассмотрим логику, которую необходимо реализовать:
Разберем пример кода, который можно выполнить в «Консоли кода» или оформить как команду расширения:
// МассивВыбранныхСсылок - это массив, полученный из элемента формы Список
Для Каждого СсылкаИзСписка Из МассивВыбранныхСсылок Цикл
// Создаем копию объекта на сервере
НовыйДокументОбъект = СсылкаИзСписка.Скопировать();
// Устанавливаем текущую дату и очищаем номер для корректной нумерации
НовыйДокументОбъект.Дата = ТекущаяДата();
НовыйДокументОбъект.Номер = "";
// При необходимости можно заполнить ответственного или другие реквизиты
// НовыйДокументОбъект.Ответственный = Пользователи.ТекущийПользователь();
Попытка
НовыйДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
Сообщить("Документ " + СсылкаИзСписка + " успешно скопирован.");
Исключение
Сообщить("Ошибка при копировании документа " + СсылкаИзСписка + ": " + ОписаниеОшибки());
КонецПопытки;
КонецЦикла;
Важно помнить, что метод Записать(РежимЗаписиДокумента.Запись) только сохраняет документ в списке как черновик. Если вам нужно сразу провести документы, следует использовать РежимЗаписиДокумента.Проведение, но в этом случае нужно быть готовым к обработке ошибок нехватки остатков товаров на складе.
Рассмотрим «хитрый» способ, не требующий написания кода, но требующий осторожности. Выясним, как использовать встроенный инструмент ВыгрузкаЗагрузкаДанныхXML для наших целей:
ДокументСсылка.РеализацияТоваровУслуг.УникальныйИдентификатор (UUID). Чтобы создать копии, нам бы потребовалось изменить эти ID.Внимание: Этот метод довольно сложен для рядового пользователя и чаще используется для переноса данных между разными базами. Для таких целей применяется подбор готовых правил для переноса данных в БП. Для копирования внутри одной базы лучше воспользоваться специализированными обработками.
Проанализируем ситуацию на рынке готовых решений. На профильных ресурсах, таких как Инфостарт, существуют готовые инструменты под названием «Групповое копирование документов». Рассмотрим их преимущества:
Бухгалтерия предприятия 3.0.Выясним, какие подводные камни могут возникнуть при массовом копировании именно реализаций:
Скопировать() просто переносит значения реквизитов. Если прайс-лист изменился, после копирования документы придется пересчитывать.Реализации документ СчетФактураВыданный не создается автоматически. Вам придется либо генерировать их программно, либо использовать групповую обработку «Печать счетов-фактур» после создания реализаций.Прежде чем приступать к разработке или покупке обработок, давайте проверим, нет ли в программе штатного механизма для вашей задачи. В 1С:Бухгалтерия 3.0 существует функционал Периодические счета. Если ваша цель — каждый месяц выставлять одинаковые реализации (например, за аренду или услуги охраны), эффективнее один раз настроить шаблон счета, и система сама будет напоминать о необходимости создания документов и позволять формировать их массово нажатием одной кнопки.
Подведем итог: штатного способа «выделить и нажать F9» для группы документов не существует из-за архитектурных особенностей платформы. Однако, используя Консоль кода для разовых задач или Расширения для постоянной работы, вы можете значительно ускорить процесс ввода данных, автоматизировав рутинное копирование. Для регулярного дублирования счетов и реализаций можно применить инструмент автоматизированного копирования документов.