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

Разработка и Конфигурация · 10 мин

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

Как скопировать область табличного документа в 1С: выделение и копирование ячеек вручную, методы ПолучитьОбласть и ВывестиОбласть, типичные ошибки и советы.

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

Под «областью» понимается прямоугольный диапазон ячеек: от одной ячейки до всего документа. Область может быть именованной (заданной в макете) или адресуемой по координатам вида R5C3:R12C8. От того, какая область нужна и куда её требуется поместить, зависит выбор способа копирования.

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

Копирование области вручную через интерфейс

Самый простой сценарий — скопировать часть сформированного отчёта или печатной формы без изменения кода. Откройте табличный документ, убедитесь, что он не заблокирован от редактирования (если требуется вставка в него же), и выделите нужный диапазон ячеек мышью или с клавиатуры с зажатой клавишей Shift.

Для выделения несмежных областей в табличном документе 1С стандартный приём с Ctrl, как в Excel, работает ограниченно — надёжнее копировать диапазоны по одному. После выделения нажмите Ctrl+C или выберите пункт «Копировать» в контекстном меню. Затем перейдите в целевое место — другой табличный документ, Excel, Word — и выполните вставку через Ctrl+V.

При вставке в Excel оформление (границы, цвета, шрифты) обычно переносится, но объединённые ячейки и сложные шапки могут «поехать». Если цель — именно Excel, часто надёжнее использовать команду «Файл → Сохранить как» и сохранить табличный документ в формате Excel целиком, а затем удалить лишнее уже там.

Порядок действий при ручном копировании
  1. 1
    Откройте табличный документ и при необходимости включите режим редактирования
  2. 2
    Выделите нужный диапазон ячеек мышью или клавишами Shift + стрелки
  3. 3
    Нажмите Ctrl+C или выберите «Копировать» в контекстном меню
  4. 4
    Перейдите в целевой документ и установите курсор в левую верхнюю ячейку вставки
  5. 5
    Нажмите Ctrl+V и проверьте, что значения и оформление перенеслись корректно

Программное копирование: ПолучитьОбласть и ВывестиОбласть

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

ОбластьИсточник = ДокументИсточник.ПолучитьОбласть("R5C1:R12C8");

ДокументПриемник.ВывестиОбласть(ОбластьИсточник);

Область можно задавать не только координатами, но и именем, если она именованная: ПолучитьОбласть("Шапка"). Это удобно при работе с макетами, где области заранее размечены разработчиком конфигурации. Копируются значения, текст, параметры и оформление ячеек области.

Метод ВывестиОбласть() всегда добавляет область ниже уже заполненной части документа-приёмника. Если нужно вставить фрагмент в середину или поверх существующих данных, используется ВставитьОбласть() с указанием целевой области и способа сдвига существующих ячеек.

bsl
Область = Макет.ПолучитьОбласть("СтрокаТовара");
Для Каждого Товар Из ТаблицаТоваров Цикл
    Область.Параметры.Наименование = Товар.Наименование;
    ТабДок.ВывестиОбласть(Область);
КонецЦикла;

Вставка области в середину документа через ВставитьОбласть

Когда требуется встроить скопированный фрагмент не в конец, а в произвольную позицию, применяется метод ВставитьОбласть(ОбластьИсточник, ОбластьПриемник, ТипСдвига). Область-приёмник указывает, начиная с какой ячейки разместить копию, а тип сдвига определяет, что делать с существующими ячейками: сдвинуть по вертикали, по горизонтали или не сдвигать.

ОбластьКопия = ДокументИсточник.ПолучитьОбласть("R3C1:R6C5");

ОбластьПриемник = ДокументПриемник.Область("R10C1:R13C5");

ДокументПриемник.ВставитьОбласть(ОбластьКопия, ОбластьПриемник,

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

Здесь кроется частая причина ошибок: размеры области-источника и области-приёмника должны совпадать. Если диапазоны разной высоты или ширины, платформа выдаст ошибку либо результат окажется непредсказуемым. Перед вставкой полезно проверить высоту и ширину обеих областей через свойства ВысотаТаблицы и ШиринаТаблицы источника.

Копирование именованных областей из макета

На практике чаще всего копируют не из готового документа, а из макета — шаблона печатной формы. Макет хранится в конфигурации, а области в нём размечены именами: «Шапка», «Строка», «Подвал». Копирование сводится к получению области макета и выводу её в результирующий табличный документ нужное число раз.

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

Если нужно скопировать область из макета другой конфигурационной единицы, макет сначала получают методом ПолучитьМакет("ИмяМакета") у объекта или общего макета, а дальше работа идёт стандартно. Помните, что макет доступен только для чтения — изменять его в режиме предприятия нельзя, все правки делаются в конфигураторе.

Сравнение способов копирования

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

СпособКогда применятьОграничение
Ручное копирование (Ctrl+C)Разовый перенос данных пользователем в Excel или WordТребует открытого документа, не автоматизируется
ВывестиОбласть()Программное добавление фрагмента в конец документаТолько последовательное заполнение снизу вверх невозможно
ВставитьОбласть()Вставка фрагмента в произвольную позициюРазмеры областей должны совпадать
ПолучитьОбласть() из макетаМногократный вывод типовых фрагментов печатной формыМакет правится только в конфигураторе
Маршрут решения

Как выбрать действие

Нужно разово перенести данные из отчёта в ExcelВыделите ячейки и скопируйте вручную или сохраните документ в формате Excel
Нужно программно добавить фрагмент в конец документаИспользуйте ПолучитьОбласть() + ВывестиОбласть()
Нужно вставить фрагмент в середину существующего документаИспользуйте ВставитьОбласть() с совпадающими размерами областей
Нужно многократно повторить типовой блок с разными даннымиПолучите область из макета и выводите её в цикле с заполнением параметров

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

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

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

Ещё одна проблема — защита табличного документа. Если у документа-приёмника включена защита (свойство Защита или «Только просмотр»), программная вставка может быть заблокирована, а ручное редактирование пользователю недоступно. Снимите защиту программно или через свойства документа перед копированием.

Типичные ошибки
01
Несовпадение размеров областей при ВставитьОбласть — платформа выдаёт ошибку или искажает результат
02
Заполнение параметров области после вызова ВывестиОбласть — параметры не применяются, заполнять нужно до вывода
03
Попытка вставки в защищённый документ — операция блокируется без явного сообщения
04
Копирование несмежных диапазонов одним действием — переносится только часть данных
05
Ожидание переноса формул и логики — копируются только значения и оформление, пересчёта не будет

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

Можно ли скопировать область табличного документа в Excel с сохранением форматирования?

Да, при вставке через буфер обмена большая часть оформления сохраняется. Для больших таблиц надёжнее сохранить документ через «Файл → Сохранить как» в формате Excel — так меньше риск потерять объединённые ячейки и ширину колонок.

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

Вызовите метод ПолучитьОбласть() без параметров у документа-источника — он вернёт полную копию. Полученный объект можно вывести в другой документ или записать в файл методом Записать().

Почему ВставитьОбласть выдаёт ошибку, хотя координаты указаны верно?

Наиболее вероятная причина — размеры области-источника и области-приёмника не совпадают по высоте или ширине. Сверьте диапазоны: количество строк и колонок должно быть одинаковым. Также проверьте, не включена ли защита у документа-приёмника.

Переносятся ли параметры и расшифровка при копировании области?

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

Как скопировать область в цикле, чтобы каждая копия содержала свои данные?

Получите область из макета один раз до цикла, а внутри цикла заполняйте её параметры через коллекцию Параметры и вызывайте ВывестиОбласть(). Параметры обязательно заполняются до вывода, иначе в документ попадут пустые значения.

Можно ли скопировать область из защищённого табличного документа?

Чтение и копирование через буфер обмена обычно доступны даже при защите — защита блокирует редактирование, а не копирование. Программно ПолучитьОбласть() также работает независимо от защиты источника, но вставка в защищённый документ-приёмник будет невозможна.

Итог

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

Вручную область копируется выделением и Ctrl+C, программно — связкой ПолучитьОбласть() и ВывестиОбласть() для добавления в конец либо ВставитьОбласть() для произвольной позиции. Следите за совпадением размеров областей, заполняйте параметры до вывода и учитывайте защиту документа-приёмника.