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

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

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

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

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

Выбор способа зависит от трёх условий: связаны ли документы логически (один основание, другой следствие), совпадает ли состав колонок табличных частей и разовая это операция или массовая. Ниже разобраны все рабочие варианты — от кнопки «Создать на основании» до фрагмента кода с методом Загрузить(), а также проверка результата и типичные ошибки.

Определите, какой способ подходит под вашу задачу

Прежде чем копировать, ответьте на два вопроса. Первый: есть ли между документами логическая связь? Если вы делаете реализацию по заказу покупателя или счёт-фактуру по накладной — это классический ввод на основании, и изобретать ничего не нужно. Второй вопрос: совпадают ли табличные части по структуре? Колонки «Номенклатура», «Количество», «Цена», «Сумма» есть почти везде, но состав дополнительных реквизитов (склад, характеристика, серия, ставка НДС) различается.

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

Маршрут решения

Как выбрать способ копирования

Документы связаны логически (заказ → реализация, накладная → счёт-фактура)Используйте кнопку «Создать на основании» — это самый безопасный путь
Документы не связаны, но колонки табличных частей совпадаютВыделите строки, скопируйте через Ctrl+C и вставьте Ctrl+V в новый документ
Колонки различаются или перенос нужен регулярноНапишите обработку или процедуру с методами Выгрузить() и Загрузить()
Нужно перенести строки из множества документов сразуИспользуйте программный перебор выборки с заполнением табличной части в цикле

Способ 1: ввод на основании — штатный и безопасный

Это основной механизм переноса данных между связанными документами в типовых конфигурациях: «1С:Бухгалтерия», «Управление торговлей», «ERP». Откройте документ-основание, нажмите кнопку «Создать на основании» (в некоторых интерфейсах — «Ввести на основании») и выберите тип целевого документа из списка. Программа создаст новый документ и автоматически заполнит его табличную часть строками исходного.

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

Порядок действий при вводе на основании
  1. 1
    Откройте проведённый документ-основание
  2. 2
    Нажмите «Создать на основании» и выберите тип нового документа
  3. 3
    Проверьте заполнение шапки: контрагента, договор, организацию
  4. 4
    Сверьте табличную часть с исходной — количество строк и суммы
  5. 5
    При необходимости отредактируйте строки вручную
  6. 6
    Проведите новый документ и убедитесь в отсутствии ошибок

Если нужного типа документа нет в списке «Создать на основании», значит, в конфигурации не предусмотрена такая связь. Это ограничение обходится двумя путями: копированием строк вручную или доработкой (добавлением обработчика заполнения). Для разовой задачи дорабатывать конфигурацию нерационально.

Способ 2: копирование строк через буфер обмена

Когда документы не связаны, но табличные части похожи, строки можно перенести вручную. В тонком клиенте и веб-клиенте это работает так: откройте исходный документ, встаньте на табличную часть, выделите нужные строки (все — через Ctrl+A, выборочно — через Ctrl или Shift с кликом мышью) и нажмите Ctrl+C. Затем откройте или создайте целевой документ, встаньте курсором в его табличную часть и нажмите Ctrl+V.

Во многих типовых конфигурациях вместо сочетаний клавиш есть кнопки «Скопировать строки» и «Вставить строки» в меню «Ещё» табличной части. В «1С:Бухгалтерии 8» также работает перенос через буфер между разными открытыми окнами. Учтите ограничение: вставка сработает корректно, только если в целевой табличной части есть колонки, совпадающие по имени или смыслу с исходными. Несовпадающие данные просто не перенесутся.

После вставки обязательно перепроверьте колонки «Количество», «Цена» и «Сумма»: если в исходном документе цены были с НДС, а в целевом документе установлен режим «без НДС», итоги разойдутся. Программа пересчитает суммы по своим правилам, и это нужно контролировать.

Способ 3: программное копирование методами Выгрузить() и Загрузить()

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

НовыйДок = Документы.РеализацияТоваровУслуг.СоздатьДокумент();

НовыйДок.Дата = ТекущаяДата();

НовыйДок.Контрагент = ИсходныйДок.Контрагент;

НовыйДок.Товары.Загрузить(ИсходныйДок.Товары.Выгрузить());

НовыйДок.Записать();

Важный нюанс: Загрузить() переносит только те колонки, имена которых совпадают в обеих табличных частях. Если в исходном документе колонка называется «Товар», а в целевом — «Номенклатура», данные по ней будут потеряны без всякого предупреждения. Для таких случаев таблицу значений перед загрузкой дорабатывают: переименовывают колонки или заполняют строки в цикле с явным соответствием полей.

bsl
ТЗ = ИсходныйДок.Товары.Выгрузить();
ТЗ.Колонки.Товар.Имя = "Номенклатура";
НовыйДок.Товары.Загрузить(ТЗ);

Если колонок много и соответствие сложное, надёжнее построчный перенос: в цикле Для Каждого Строка Из ИсходныйДок.Товары Цикл добавляется новая строка целевого документа и каждый реквизит заполняется явно. Это длиннее, но исключает скрытые потери данных и позволяет на лету пересчитывать значения — например, менять валюту или применять скидку.

Способ 4: обработки заполнения и внешние инструменты

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

Для нестандартных задач существуют внешние обработки (файлы .epf), которые подключаются через «Файл → Открыть» или механизм дополнительных отчетов и обработок. Они позволяют, например, загрузить табличную часть из таблицы Excel или из произвольного документа с настройкой соответствия колонок. Перед использованием сторонней обработки проверьте её на копии базы: обработки имеют прямой доступ к данным и могут изменить или удалить их при ошибке в коде.

Проверка результата после копирования

Любой перенос завершайте контролем. Минимальный набор проверок: количество строк в исходной и новой табличной части совпадает (или расхождение объяснимо — например, частичной отгрузкой), итоговые суммы по документам равны, ставки и суммы НДС корректны, заполнены обязательные реквизиты строк — склад, характеристика, счета учёта.

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

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

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

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

Совпадает с исходным документом или расхождение объяснимо

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

Строк меньше без причины — часть данных потеряна при переносе

Итоговая сумма документа
Норма

Совпадает с исходной или отличается на объяснимую величину

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

Сумма отличается без причины — проверьте цены и режим НДС

Движения документа после проведения
Норма

Проводки и записи по регистрам сформированы полностью

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

Движения отсутствуют или неполные — не заполнены счета, склады, аналитика

Связь документов
Норма

В структуре подчинённости виден новый документ

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

Связи нет — документ создан копированием, а не на основании

Типичные ошибки и ограничения

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

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

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

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

Связанные документы заполняйте через «Создать на основании», несвязанные — копированием строк или кодом с Выгрузить() и Загрузить(). После любого переноса сверяйте количество строк, суммы и НДС, а после проведения — движения документа. Разные имена колонок при программном переносе требуют явного соответствия полей.

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

Можно ли скопировать табличную часть в документ другого типа, которого нет в списке «Создать на основании»?

Да, двумя путями. Разово — выделением и копированием строк через Ctrl+C / Ctrl+V или кнопки «Скопировать/Вставить строки» в меню табличной части. Постоянно — доработкой конфигурации: в модуле менеджера целевого документа добавляется обработчик заполнения с видом «ВводНаОсновании», после чего связь появится в списке.

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

Почти всегда причина в пересчёте цен или НДС: целевой документ подставил цены из своего типа цен, применил другой режим «с НДС / без НДС» или обновил ставку из карточки номенклатуры. Сравните колонки «Цена» и «Ставка НДС» в обеих табличных частях — расхождение найдётся там.

Как скопировать только часть строк, а не всю табличную часть?

При ручном копировании выделите нужные строки мышью с зажатой клавишей Ctrl и скопируйте только их. При программном переносе выгрузите табличную часть в таблицу значений, отберите строки через метод НайтиСтроки() с условием отбора и загрузите в целевой документ только результат отбора.

Перенесутся ли вместе со строками штрихкоды, серии и характеристики?

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

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

Напрямую через буфер обмена — нет. Рабочие варианты: выгрузка табличной части в табличный документ или Excel и загрузка в другой базе обработкой, универсальный обмен данными в формате XML (обработка «ВыгрузкаЗагрузкаДанныхXML») либо настройка синхронизации, если обмен между базами нужен регулярно.

Что делать, если кнопка «Создать на основании» неактивна?

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