Разработка и Конфигурация · 10 мин
Как скопировать всю строку в 1С: интерфейс и программные способы
Как скопировать строку в 1С: копирование строк табличной части, таблицы значений и табличного документа через интерфейс и код. Примеры, ошибки и FAQ.
Задача скопировать строку в 1С возникает в трёх разных контекстах, и путать их нельзя: копирование строки табличной части документа через интерфейс, программное дублирование строки в таблице значений и перенос строки в табличном документе (макете, отчёте). В каждом случае действуют свои команды, горячие клавиши и методы встроенного языка.
Пользователю чаще всего нужно просто продублировать позицию в товарной части документа, не вбивая её заново. Разработчику — добавить копию строки в таблицу значений с сохранением всех значений колонок или вывести строку в табличный документ по образцу области. Ниже разобраны все три сценария с точными действиями и примерами кода.
Материал применим к платформе 1С:Предприятие 8.3 в типовых и самописных конфигурациях. Названия кнопок могут немного отличаться в зависимости от конфигурации, но принципы и методы встроенного языка одинаковы.
Копирование строки табличной части через интерфейс
Самый частый пользовательский сценарий — продублировать строку в документе «Реализация товаров и услуг», «Поступление» или заказе. Откройте документ, установите курсор на нужную строку табличной части и нажмите клавишу F9. Под текущей строкой появится её точная копия со всеми заполненными колонками: номенклатурой, количеством, ценой, суммой и ставкой НДС.
Альтернатива — кнопка «Скопировать» в командной панели табличной части (значок двух листов) или сочетание Ctrl+Shift+C. В веб-клиенте и тонком клиенте эти команды работают одинаково. После копирования отредактируйте отличающиеся поля — обычно количество или цену, — и проведите документ.
Обратите внимание: копируется вся строка целиком, включая скрытые служебные колонки. Если в документе настроены автоматические скидки или заполнение по сериям, после копирования эти механизмы могут пересчитать значения в новой строке — проверьте итоговые суммы перед проведением.
- 1Откройте документ и встаньте курсором на нужную строку табличной части
- 2Нажмите F9 или кнопку «Скопировать» на панели табличной части
- 3Отредактируйте отличающиеся поля в новой строке
- 4Проверьте суммы, налоги и скидки после пересчёта
- 5Проведите документ и сверьте итог
Копирование через буфер обмена и групповые операции
Если нужно перенести строку в другой документ, используйте классический буфер обмена: выделите строку, нажмите Ctrl+C, откройте целевой документ и нажмите Ctrl+V. Способ работает, если состав колонок табличных частей совместим — например, при копировании из счёта на оплату в реализацию.
Можно выделить сразу несколько строк: зажмите Shift для диапазона или Ctrl для отдельных строк, затем скопируйте их одной командой. Это удобно при переносе части спецификации из одного заказа в другой.
В некоторых типовых конфигурациях есть более удобный механизм — кнопка «Заполнить» или «Подобрать» с функцией переноса строк из другого документа. Она корректно обрабатывает различия в составе колонок и пересчитывает цены по текущим настройкам, поэтому для массового переноса предпочтительнее буфера обмена.
Программное копирование строки табличной части документа
Во встроенном языке строка табличной части дублируется в три действия: добавить новую строку, скопировать в неё значения исходной, при необходимости скорректировать отдельные поля. Универсальный приём — метод ЗаполнитьЗначенияСвойств(), который переносит все одноимённые свойства.
// СтрокаИсточник — строка табличной части, которую копируем
НоваяСтрока = Объект.Товары.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаИсточник);
НоваяСтрока.Количество = 1; // при необходимости переопределяем поля
Важный нюанс: ЗаполнитьЗначенияСвойств() не копирует служебные свойства вроде номера строки — он переносит только данные колонок. Если в конфигурации на события строки (ПриИзменении номенклатуры и т.п.) навешаны обработчики заполнения цен и счетов учёта, программное копирование их не вызовет. Эти процедуры нужно выполнить явно после добавления строки.
Копирование строки в таблице значений
Таблица значений — объект встроенного языка, недоступный пользователю напрямую, поэтому копирование здесь только программное. Базовый вариант тот же: Добавить() плюс ЗаполнитьЗначенияСвойств().
НоваяСтрока = ТаблицаЗначений.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаОригинал);
Если нужно скопировать все строки одной таблицы в другую с идентичной структурой, проще использовать метод Скопировать() самой таблицы — он вернёт полную копию вместе с данными. Для копирования отобранных строк передайте в метод структуру отбора: ТЗ.Скопировать(Новый Структура("Склад", ВыбранныйСклад)).
При копировании строк между таблицами с разным составом колонок ЗаполнитьЗначенияСвойств() перенесёт только совпадающие по именам поля, остальные останутся пустыми. Это безопасно, но требует явного заполнения недостающих значений.
КопияТЗ = ТаблицаЗначений.Скопировать(Новый Структура("Склад", ВыбранныйСклад));Копирование строки в табличном документе
Табличный документ (макет, отчёт, печатная форма) не имеет построчного буфера обмена в привычном смысле. Пользователь может выделить диапазон ячеек мышью и скопировать его через Ctrl+C в другой табличный документ или Excel — данные перенесутся как текст.
Программно «строки» в табличном документе выводятся областями. Чтобы повторить строку-образец, получите область из макета и выведите её нужное число раз:
Макет = ПолучитьМакет("МакетОтчета");
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
Для Каждого СтрокаДанных Из ТаблицаДанных Цикл
ОбластьСтрока.Параметры.Заполнить(СтрокаДанных);
ТабличныйДокумент.Вывести(ОбластьСтрока);
КонецЦикла;
Если нужно продублировать уже выведенную область внутри самого документа, используйте метод ПолучитьОбласть() у табличного документа с указанием диапазона и затем ВставитьОбласть(). Учтите, что при этом копируется форматирование, но не связи параметров — значения станут фиксированными.
Частые ошибки и как их избежать
Наиболее распространённая ошибка разработчика — попытка скопировать строку простым присваиванием. Строки таблиц в 1С являются объектами, поэтому присваивание создаёт вторую ссылку на ту же строку, а не её копию: изменение «копии» испортит оригинал. Всегда используйте связку Добавить() и ЗаполнитьЗначенияСвойств().
Вторая типичная проблема — забытые обработчики заполнения. При интерактивном копировании F9 конфигурация сама пересчитывает зависимые поля, а при программном добавлении строки этого не происходит. В типовых конфигурациях ищите экспортные процедуры вида «РассчитатьСуммуСтроки» и вызывайте их после копирования.
Третья ошибка пользователей — копирование строки в документ с другой организацией или складом. Строка перенесётся со старыми реквизитами учёта, что исказит проводки. После вставки через буфер обмена всегда проверяйте ключевые поля: организацию, склад, договор, счета учёта.
Проверка результата после копирования
После интерактивного копирования достаточно визуального контроля: сравните количество строк до и после, проверьте итоговую сумму документа и сумму НДС. Если документ проведён, сформируйте движения и убедитесь, что обороты соответствуют ожиданиям.
После программного копирования полезно вывести контрольную проверку в журнал: количество добавленных строк, итоговые суммы по скопированным позициям. При массовой обработке (например, размножении строк спецификации) делайте операцию в транзакции, чтобы при ошибке откатить все изменения целиком.
Как проверить результат
Увеличилось ровно на число скопированных строк
Строки задвоились или не добавились
Пересчитаны по правилам документа
Нулевые или унаследованные без пересчёта значения
Проводится без ошибок, движения корректны
Ошибки нехватки остатков или пустых счетов учёта
FAQ
Почему F9 не копирует строку в моём документе?
Возможные причины: документ открыт в режиме просмотра без права редактирования, табличная часть заблокирована настройками конфигурации, либо строка находится в иерархическом списке, где F9 копирует группу целиком. Проверьте, что документ не проведён и доступен для изменения.
Как скопировать строку вместе с сериями и характеристиками?
При копировании через F9 или ЗаполнитьЗначенияСвойств() серии и характеристики переносятся как значения колонок. Однако при проведении программа проверит их наличие на складе — если остатков нет, документ не проведётся. После копирования замените серии на актуальные.
Можно ли скопировать строку из Excel в табличную часть 1С?
Да, многие типовые конфигурации поддерживают вставку из буфера обмена через кнопку «Загрузить из внешнего источника» или прямую вставку Ctrl+V в табличную часть. Состав и порядок колонок в Excel должны соответствовать ожидаемым полям, иначе данные встанут не в те колонки.
Чем отличается копирование строки от добавления новой с заполнением?
Копирование переносит все значения исходной строки без изменений, включая цены и скидки. Добавление новой строки с последующим выбором номенклатуры запускает обработчики, которые подставят актуальные цены и настройки. Для старых документов копирование может дать устаревшие цены.
Как скопировать строку дерева значений с подчинёнными строками?
ЗаполнитьЗначенияСвойств() копирует только саму строку без ветки. Для переноса поддерева нужна рекурсивная процедура: добавьте копию строки в целевое дерево, затем в цикле по её Строки.НайтиСтроки() или прямой коллекции строк рекурсивно скопируйте каждую подчинённую.
Сохранятся ли отборы и пометки при копировании таблицы значений методом Скопировать()?
Метод Скопировать() переносит структуру колонок и данные строк, но не переносит текущие отборы, установленные через НайтиСтроки(), и не копирует дополнительные свойства, которые вы назначили таблице вручную. Их нужно восстанавливать отдельно.
Что важно запомнить
В интерфейсе строка копируется клавишей F9 или Ctrl+Shift+C, в коде — через Добавить() и ЗаполнитьЗначенияСвойств(), в табличном документе — выводом области из макета. Никогда не копируйте строку присваиванием и всегда пересчитывайте зависимые поля после программного добавления.