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

Документы и Печать · 9 мин

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

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

Табличный документ в 1С — это объект, в котором формируются печатные формы, отчёты и макеты. Задача скопировать его возникает в разных ситуациях: бухгалтеру нужно продублировать печатную форму, разработчику — перенести область из одного макета в другой, аналитику — выгрузить результат отчёта в Excel. Способ копирования зависит от того, работаете вы в режиме пользователя или пишете код на встроенном языке.

В пользовательском режиме табличный документ копируется через буфер обмена: выделили область, скопировали, вставили в другой документ или в Excel. В программном режиме применяются методы объекта «ТабличныйДокумент» — Вывести, ПолучитьОбласть, ВставитьОбласть, а также сохранение в файл с последующей загрузкой. У каждого подхода есть свои ограничения по форматированию, объединённым ячейкам и картинкам.

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

Быстрое копирование через буфер обмена

Самый доступный способ, не требующий прав на изменение конфигурации. Откройте сформированный табличный документ (печатную форму или отчёт), выделите нужную область мышью или сочетанием Ctrl+A для выделения всего документа. Затем нажмите Ctrl+C или выберите пункт «Копировать» в контекстном меню.

Вставка выполняется в другой открытый табличный документ, в Excel или в текстовый редактор через Ctrl+V. При вставке в Excel сохраняются значения ячеек, границы, шрифты и объединения — качество переноса обычно достаточное для дальнейшей обработки. При вставке в другой табличный документ 1С переносятся и значения, и оформление.

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

Сохранение в файл и загрузка копии

Когда нужно получить точную копию документа целиком — со всеми картинками, настройками страниц и форматированием — используйте сохранение в файл. В меню «Файл» выберите «Сохранить» или «Сохранить копию» и укажите формат. Для последующей работы именно в 1С выбирайте формат MXL — это родной формат табличного документа, который сохраняет всё без потерь.

Чтобы открыть сохранённую копию, используйте «Файл» → «Открыть» и укажите MXL-файл. Документ откроется как независимая копия: изменения в нём не затронут исходник. Этот приём удобен, когда нужно передать печатную форму коллеге без доступа к вашей базе или сохранить «снимок» отчёта на конкретную дату.

Для обмена с внешними программами подойдут форматы Excel (XLSX), PDF, HTML и ODS. Учтите: PDF и HTML предназначены для просмотра, обратная загрузка в 1С из них невозможна. Если планируется дальнейшее редактирование копии в 1С — сохраняйте только в MXL.

Сравнение форматов сохранения копии

MXL

Родной формат 1С. Полное сохранение форматирования, картинок и параметров страницы; открывается обратно в 1С. Не читается сторонними программами.

XLSX

Подходит для передачи в Excel и дальнейшей обработки. Возможны мелкие расхождения в оформлении и объединённых ячейках.

PDF

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

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

Разработчику для копирования фрагмента табличного документа служат методы ПолучитьОбласть и ВставитьОбласть. Типовой сценарий: получить область как отдельный табличный документ, затем вставить её в нужную позицию того же или другого документа.

ОбластьКопия = ТабДок.ПолучитьОбласть("R1C1:R10C5");

ТабДок.ВставитьОбласть(ОбластьКопия.Область(),

ТабДок.Область("R15C1"),

ТипСмещенияТабличногоДокумента.ПоВертикали);

Метод ПолучитьОбласть без параметров возвращает копию всего документа — это фактически полное дублирование. Обратите внимание: результатом является новый объект «ТабличныйДокумент», и его можно вывести в другой документ методом Вывести, который добавляет область ниже уже заполненной части.

Разница между Вывести и ВставитьОбласть принципиальна: Вывести дописывает область в конец документа, а ВставитьОбласть помещает её в указанную позицию, сдвигая существующее содержимое по вертикали или горизонтали. Если нужно заменить содержимое без сдвига — сначала очистите целевую область методом Очистить.

bsl
Копия = ТабДок.ПолучитьОбласть(); // полная копия документа
НовыйДок = Новый ТабличныйДокумент;
НовыйДок.Вывести(Копия);

Полное программное дублирование документа

Чтобы создать независимую копию табличного документа целиком, есть два надёжных пути. Первый — через ПолучитьОбласть() без параметров, как показано выше. Второй — через временный файл MXL: метод Записать сохраняет документ, метод Прочитать загружает его в новый объект. Второй способ чуть медленнее, но гарантированно переносит все свойства, включая параметры страницы.

ИмяФайла = ПолучитьИмяВременногоФайла("mxl");

ТабДок.Записать(ИмяФайла);

КопияДокумента = Новый ТабличныйДокумент;

КопияДокумента.Прочитать(ИмяФайла);

УдалитьФайлы(ИмяФайла);

На сервере временные файлы создаются в каталоге временных файлов сервера 1С — убедитесь, что у учётной записи сервера есть права на запись. В файловой базе на локальном компьютере проблем с правами обычно не возникает.

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

Копирование макета табличного документа в конфигураторе

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

Если нужно перенести макет между разными конфигурациями, используйте сравнение и объединение либо выгрузку конфигурации в файлы. Простой способ для разовой задачи: открыть оба макета, выделить всё содержимое исходного (Ctrl+A), скопировать и вставить в целевой макет. Имена областей и параметры при этом переносятся корректно.

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

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

После любого способа копирования проверьте результат до передачи документа дальше. Основные контрольные точки: полнота данных (не обрезались ли строки при выделении), сохранность объединённых ячеек, наличие картинок и корректность формул, если они использовались.

Контрольные точки

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

Количество строк в копии
Норма

Совпадает с исходным документом

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

Часть строк отсутствует — область была выделена не полностью

Оформление и объединённые ячейки
Норма

Границы, шрифты и объединения на месте

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

Оформление потеряно — вероятно, копирование шло через текстовый формат

Картинки и логотипы
Норма

Изображения отображаются в копии

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

Пустые рамки вместо картинок — используйте сохранение в MXL

Типичные ошибки
01
Копирование через буфер обмена в текстовый редактор вместо Excel — теряется всё оформление и структура таблицы.
02
Использование ВставитьОбласть без учёта сдвига — существующее содержимое документа смещается и «разъезжается».
03
Сохранение копии в PDF с целью дальнейшего редактирования — PDF не загружается обратно в 1С.
04
Копирование макета без переименования — путаница между исходным и новым макетом при доработках.

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

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

Да. Режим «Только просмотр» запрещает редактирование, но не мешает выделять области и копировать их через Ctrl+C. Скопированные данные можно вставить в Excel или в новый табличный документ.

Почему при вставке в Excel съезжают объединённые ячейки?

Это ограничение обмена через буфер обмена между разными редакторами. Для точного переноса сохраните документ из 1С сразу в формате XLSX через «Файл» → «Сохранить копию» — так структура таблицы переносится корректнее.

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

Используйте запись во временный MXL-файл методом Записать и последующее чтение методом Прочитать в новый объект ТабличныйДокумент. Этот способ переносит изображения и параметры страницы полностью, в отличие от части сценариев с ВставитьОбласть.

Чем отличается ПолучитьОбласть от ВставитьОбласть?

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

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

Да, через файл. Сохраните документ в MXL в исходной базе, передайте файл и откройте его в другой базе через «Файл» → «Открыть». Для программного переноса в типовых обменах используют те же методы Записать и Прочитать.

Почему программная копия получилась без параметров страницы?

Метод ПолучитьОбласть переносит содержимое ячеек и оформление, но не все настройки печати. Если критичны поля, ориентация и масштаб страницы, копируйте через временный MXL-файл — он сохраняет параметры страницы полностью.

Итог

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

Для разового копирования используйте буфер обмена, для точной копии со всем оформлением — сохранение в MXL, для программных задач — связку ПолучитьОбласть и ВставитьОбласть или чтение из временного файла. После копирования проверяйте полноту строк, объединённые ячейки и картинки.