Перенос строк из одного документа 1С в другой: от кнопок до кода

· 9 мин

Содержание

Скопировать табличную часть из одного документа 1С в другой проще всего командами копирования и вставки строк: выделите строки в документе-источнике, нажмите «Скопировать строки», откройте другой документ и нажмите «Вставить строки». В БП 3.0 и УТ 11 эти команды стоят на командной панели табличной части или в её меню Ещё. Если документы связаны по смыслу (заказ → реализация, поступление → возврат), быстрее создать новый документ через Создать на основании: строки перенесутся сами.

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

Какой способ выбрать: сравнение

Сначала определите три вещи: сколько строк, совпадают ли колонки у двух документов и разовая это задача или регулярная.

СпособКогда подходитОграничения и риски
Команды копирования и вставки строкТиповая конфигурация, похожие документы, десятки строкПереносятся только совпадающие колонки
Создать на основанииДокументы связаны в типовом сценарииРаботает только для предусмотренных пар документов
Выгрузка в Excel и загрузка из файлаКнопок вставки нет, нужно поправить данные по путиНоменклатура сопоставляется по наименованию или артикулу
Внешняя обработка заполненияЗадача повторяется, нужна кнопка для пользователейНужен программист и подключение обработки
Код на встроенном языкеСотни документов, разные имена колонокОшибка в коде затрагивает много документов сразу

Для разового переноса из 20–50 строк почти всегда хватает первых двух способов. Программировать имеет смысл, когда задача повторяется каждую неделю или документов больше десятка.

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

Команды «Скопировать строки» и «Вставить строки»

В типовых конфигурациях на базе БСП есть собственный механизм буфера строк. Он работает внутри одной информационной базы.

  1. Откройте документ-источник, перейдите на нужную вкладку (например, «Товары»).
  2. Выделите строки: Ctrl+A — все, Shift+клик — диапазон, Ctrl+клик — выборочно.
  3. Нажмите «Скопировать строки». Если кнопки не видно на панели, откройте меню Ещё над таблицей.
  4. Откройте документ-приёмник (новый или уже созданный, но не проведённый) и ту же вкладку.
  5. Нажмите «Вставить строки». Строки добавятся в конец таблицы, существующие не удалятся.

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

Что делает обычное Ctrl+C

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

Создание документа на основании

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

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

Копия документа целиком

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

Проверьте дату и номер входящего документа в копии: они тоже могли перенестись, а дубль поступления исказит НДС и остатки.

Что проверить в документе-приёмнике после вставки

Строки скопировались — это ещё не готовый документ. Перед записью пройдитесь по короткому списку:

  • 🧾 Цены. Если у приёмника другой договор или вид цен, программа может пересчитать цену при перевыборе номенклатуры. Сверьте итоговую сумму с источником.
  • 🏷️ Ставка НДС. Организация-приёмник может применять другую систему налогообложения. Тогда ставку и сумму налога нужно поменять во всех строках.
  • 🏬 Склад и подразделение. В одних документах они в шапке, в других — в каждой строке. Убедитесь, что значение одно для всех строк или заполнено там, где нужно.
  • 🔢 Количество строк. Сравните счётчик строк внизу таблицы в обоих документах: так сразу видно, если часть строк не вставилась.

Перенос строк через Excel и загрузку из файла

Этот путь нужен, когда в конфигурации нет команд вставки строк или по дороге надо поправить цены и количества.

  1. В документе-источнике выделите строки табличной части и откройте Ещё → Вывести список….
  2. В окне оставьте только нужные колонки (номенклатура, артикул, количество, цена) и нажмите «ОК».
  3. Сохраните получившийся табличный документ в формате XLSX через меню формы или Ctrl+S.
  4. Откройте файл, при необходимости поправьте значения.
  5. В документе-приёмнике на панели табличной части найдите команду загрузки из файла (в БП 3.0 и УТ 11 это кнопка «Загрузить»).
  6. Вставьте данные из Excel в шаблон загрузки через Ctrl+V и сопоставьте колонки.
  7. На шаге сопоставления проверьте строки, для которых программа не нашла номенклатуру, и укажите её вручную.

💡 Сопоставляйте номенклатуру по артикулу или штрихкоду, а не по наименованию. У позиций «Бумага А4» и «Бумага А4 » с лишним пробелом разные наименования, и загрузка создаст путаницу.

Внешняя обработка заполнения табличной части

Если перенос повторяется регулярно, программист делает внешнюю обработку . В конфигурациях на БСП её подключают как дополнительную: Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки.

Порядок работы такой:

  • 📦 программист пишет обработку вида «Заполнение объекта» и указывает, к каким документам она относится;
  • 🔐 администратор загружает файл .epf, задаёт размещение и пользователей;
  • 🖱️ в форме документа-приёмника появляется команда в меню Заполнить или в подменю дополнительных команд;
  • ✅ пользователь выбирает документ-источник, и строки переносятся по заранее заданным правилам.

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

⚠️ Загружайте только обработки из известного источника. Внешняя обработка выполняет любой код с правами пользователя, который её запустил.

Программный перенос табличной части

Ниже два рабочих варианта для 1С 8.3. Оба выполняются на сервере.

Вариант 1. Из формы документа-приёмника

Код для модуля формы: пользователь выбрал документ-источник в реквизите, строки добавляются в текущий документ.

&НаСервере
Процедура СкопироватьТоварыНаСервере(ДокументИсточник)

	Если Не ЗначениеЗаполнено(ДокументИсточник) Тогда
		Возврат;
	КонецЕсли;

	Объект.Товары.Очистить();

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

КонецПроцедуры

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

Вариант 2. Запросом с загрузкой в объект

Подходит для обработки, которая заполняет сразу много документов. Чтение запросом быстрее обхода строк через ссылку.

Запрос = Новый Запрос;
Запрос.Текст =
	"ВЫБРАТЬ
	|	Т.Номенклатура КАК Номенклатура,
	|	Т.Количество КАК Количество,
	|	Т.Цена КАК Цена,
	|	Т.Сумма КАК Сумма
	|ИЗ
	|	Документ.ЗаказКлиента.Товары КАК Т
	|ГДЕ
	|	Т.Ссылка = &Источник
	|
	|УПОРЯДОЧИТЬ ПО
	|	Т.НомерСтроки";
Запрос.УстановитьПараметр("Источник", ДокументИсточник);
Таблица = Запрос.Выполнить().Выгрузить();

ОбъектПриемник = ДокументПриемник.ПолучитьОбъект();
ОбъектПриемник.Товары.Загрузить(Таблица);
ОбъектПриемник.Записать(РежимЗаписиДокумента.Запись);

Метод Загрузить полностью заменяет строки табличной части. Имена документов и колонок в примере замените на свои: их видно в конфигураторе или в режиме Еще → Изменить форму.

Заполняйте программно только непроведённые документы. Проводите их после проверки, через форму или командой списка. Так движения сформируются один раз и по актуальным строкам.

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

Самое сложное начинается, когда колонки у документов называются по-разному или их значения нужно преобразовать. Тогда составьте таблицу соответствия до того, как писать код или настраивать обмен.

Сопоставление полей
Номенклатура→Номенклатура
Количество→Количество
Цена→Цена (пересчитать, если вид цен другой)
Сумма→Сумма (пересчитать после переноса)
СтавкаНДС→СтавкаНДС (проверить по настройкам организации)
Склад в строке→Склад в шапке документа

Переименование колонок прямо в запросе

Если в источнике колонка называется КоличествоУпаковок, а в приёмнике Количество, дайте полю нужный псевдоним: Т.КоличествоУпаковок КАК Количество. После этого Загрузить и ЗаполнитьЗначенияСвойств разложат значения куда надо.

Перенос между базами

Когда источник и приёмник лежат в разных информационных базах, копирование строк не поможет. Здесь работают правила обмена:

  1. В конфигурации «Конвертация данных» описывают правило конвертации документа-источника в документ-приёмник.
  2. Внутри правила задают соответствие табличных частей и каждого поля строки.
  3. Для ссылочных полей (номенклатура, единицы) задают способ поиска в базе-приёмнике: по коду, артикулу, ИНН или уникальному идентификатору.
  4. Выгружают правила в файл и загружают его в обработку универсального обмена в обеих базах.

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

Где чаще всего ломается перенос строк

Диагностика: выберите симптом

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

Как ускорить перенос больших табличных частей

Когда речь о тысячах строк или сотнях документов, скорость зависит не от сервера, а от того, как написан код.

  • ⚡ Читайте запросом. Обращение СтрокаИсточника.Номенклатура.Наименование в цикле — это отдельное чтение из базы на каждую строку. Запрос получает всё одной операцией.
  • 📥 Загружайте целиком. Один вызов Загрузить(Таблица) быстрее, чем тысяча вызовов Добавить() с заполнением полей.
  • 🌐 Один вызов сервера. В управляемой форме не вызывайте сервер для каждой строки. Передайте ссылку на источник одним вызовом, как в варианте 1.
  • 💾 Записывайте один раз. Пересчитайте суммы и запишите документ после заполнения всех строк, а не после каждой.
  • 📊 Ограничьте размер документа. Форма с 5–10 тысячами строк открывается и прокручивается заметно медленнее. Если строк столько, разбейте перенос на несколько документов.
  • 🕐 Массовую обработку запускайте вне рабочего времени. Запись сотен документов создаёт блокировки, и пользователи, работающие с теми же документами, увидят задержки.

Для пакетного переноса держите журнал: какой источник, какой приёмник, сколько строк, ошибка. Если что-то пойдёт не так, по журналу легко найти и исправить конкретные документы, а не проверять все подряд.

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

Можно ли скопировать строки из документа в справочник или регистр?
Командами вставки — нет, они работают между табличными частями документов. Для справочника используйте загрузку из файла, для регистра — код или обработку.
Переносятся ли при копировании строк характеристики и серии номенклатуры?
Характеристика обычно лежит в той же строке и переносится, если колонка есть в приёмнике. Серии в УТ 11 часто хранятся отдельно и требуют повторного заполнения.
Почему кнопка «Вставить строки» неактивна?
Документ открыт только для просмотра, у пользователя нет права на изменение или буфер строк пуст. Ещё одна причина — дата запрета изменения данных.
Можно ли перенести табличную часть из 1С 7.7 в 8.3?
Прямого копирования строк между ними нет. Перенос делают через правила конвертации или через Excel с загрузкой из файла.
Сохраняется ли порядок строк?
Да, если в запросе есть сортировка по номеру строки. Без неё порядок не гарантируется, а при вставке строк командами порядок сохраняется.