Документы и Печать · 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.
Сравнение форматов сохранения копии
Родной формат 1С. Полное сохранение форматирования, картинок и параметров страницы; открывается обратно в 1С. Не читается сторонними программами.
Подходит для передачи в Excel и дальнейшей обработки. Возможны мелкие расхождения в оформлении и объединённых ячейках.
Только для просмотра и печати. Обратная загрузка и редактирование невозможны.
Программное копирование области внутри документа
Разработчику для копирования фрагмента табличного документа служат методы ПолучитьОбласть и ВставитьОбласть. Типовой сценарий: получить область как отдельный табличный документ, затем вставить её в нужную позицию того же или другого документа.
ОбластьКопия = ТабДок.ПолучитьОбласть("R1C1:R10C5");
ТабДок.ВставитьОбласть(ОбластьКопия.Область(),
ТабДок.Область("R15C1"),
ТипСмещенияТабличногоДокумента.ПоВертикали);
Метод ПолучитьОбласть без параметров возвращает копию всего документа — это фактически полное дублирование. Обратите внимание: результатом является новый объект «ТабличныйДокумент», и его можно вывести в другой документ методом Вывести, который добавляет область ниже уже заполненной части.
Разница между Вывести и ВставитьОбласть принципиальна: Вывести дописывает область в конец документа, а ВставитьОбласть помещает её в указанную позицию, сдвигая существующее содержимое по вертикали или горизонтали. Если нужно заменить содержимое без сдвига — сначала очистите целевую область методом Очистить.
Копия = ТабДок.ПолучитьОбласть(); // полная копия документа
НовыйДок = Новый ТабличныйДокумент;
НовыйДок.Вывести(Копия);Полное программное дублирование документа
Чтобы создать независимую копию табличного документа целиком, есть два надёжных пути. Первый — через ПолучитьОбласть() без параметров, как показано выше. Второй — через временный файл MXL: метод Записать сохраняет документ, метод Прочитать загружает его в новый объект. Второй способ чуть медленнее, но гарантированно переносит все свойства, включая параметры страницы.
ИмяФайла = ПолучитьИмяВременногоФайла("mxl");
ТабДок.Записать(ИмяФайла);
КопияДокумента = Новый ТабличныйДокумент;
КопияДокумента.Прочитать(ИмяФайла);
УдалитьФайлы(ИмяФайла);
На сервере временные файлы создаются в каталоге временных файлов сервера 1С — убедитесь, что у учётной записи сервера есть права на запись. В файловой базе на локальном компьютере проблем с правами обычно не возникает.
Если копия создаётся для дальнейшего независимого изменения, помните: метод ПолучитьОбласть возвращает именно копию, а не ссылку на исходные данные. Изменения в копии не затронут оригинал, и наоборот.
Копирование макета табличного документа в конфигураторе
Отдельная задача — скопировать сам макет (шаблон печатной формы), хранящийся в конфигурации. В конфигураторе найдите нужный макет в дереве объектов, щёлкните по нему правой кнопкой и выберите «Копировать», затем вставьте в нужную ветку — «Вставить». Получится независимый макет с тем же содержимым, который можно переименовать и изменять.
Если нужно перенести макет между разными конфигурациями, используйте сравнение и объединение либо выгрузку конфигурации в файлы. Простой способ для разовой задачи: открыть оба макета, выделить всё содержимое исходного (Ctrl+A), скопировать и вставить в целевой макет. Имена областей и параметры при этом переносятся корректно.
После копирования макета проверьте, что в коде, который его использует, обновлены обращения по имени. Типичная ошибка — скопированный макет остаётся незадействованным, потому что процедура печати продолжает обращаться к старому имени.
Проверка результата и типичные ошибки
После любого способа копирования проверьте результат до передачи документа дальше. Основные контрольные точки: полнота данных (не обрезались ли строки при выделении), сохранность объединённых ячеек, наличие картинок и корректность формул, если они использовались.
Как проверить результат
Совпадает с исходным документом
Часть строк отсутствует — область была выделена не полностью
Границы, шрифты и объединения на месте
Оформление потеряно — вероятно, копирование шло через текстовый формат
Изображения отображаются в копии
Пустые рамки вместо картинок — используйте сохранение в MXL
Частые вопросы
Можно ли скопировать табличный документ, если он открыт только для просмотра?
Да. Режим «Только просмотр» запрещает редактирование, но не мешает выделять области и копировать их через Ctrl+C. Скопированные данные можно вставить в Excel или в новый табличный документ.
Почему при вставке в Excel съезжают объединённые ячейки?
Это ограничение обмена через буфер обмена между разными редакторами. Для точного переноса сохраните документ из 1С сразу в формате XLSX через «Файл» → «Сохранить копию» — так структура таблицы переносится корректнее.
Как программно скопировать документ вместе с картинками?
Используйте запись во временный MXL-файл методом Записать и последующее чтение методом Прочитать в новый объект ТабличныйДокумент. Этот способ переносит изображения и параметры страницы полностью, в отличие от части сценариев с ВставитьОбласть.
Чем отличается ПолучитьОбласть от ВставитьОбласть?
ПолучитьОбласть создаёт копию фрагмента как отдельный табличный документ — это «снятие» копии. ВставитьОбласть помещает область в указанную позицию существующего документа со сдвигом содержимого. Обычно они используются в паре: сначала получили, затем вставили.
Можно ли скопировать табличный документ между двумя разными базами 1С?
Да, через файл. Сохраните документ в MXL в исходной базе, передайте файл и откройте его в другой базе через «Файл» → «Открыть». Для программного переноса в типовых обменах используют те же методы Записать и Прочитать.
Почему программная копия получилась без параметров страницы?
Метод ПолучитьОбласть переносит содержимое ячеек и оформление, но не все настройки печати. Если критичны поля, ориентация и масштаб страницы, копируйте через временный MXL-файл — он сохраняет параметры страницы полностью.
Что важно запомнить
Для разового копирования используйте буфер обмена, для точной копии со всем оформлением — сохранение в MXL, для программных задач — связку ПолучитьОбласть и ВставитьОбласть или чтение из временного файла. После копирования проверяйте полноту строк, объединённые ячейки и картинки.