Копирование списков в 1С: от одного элемента до переноса между базами

· 9 мин

Содержание

Скопировать список в 1С 8.3 можно четырьмя основными способами, и выбор зависит от задачи. Продублировать один элемент — клавиша F9 («Создать копированием»). Выгрузить весь список в Excel или буфер — команда Вывести список в меню Ещё. Перенести данные в другую такую же базу — выгрузка в XML. Загрузить список из файла — отдельная обработка.

Все перечисленные приёмы работают на уровне платформы, поэтому одинаково доступны в «Бухгалтерии предприятия 3.0», «Зарплате и управлении персоналом 3.1», «Управлении торговлей 11» и других конфигурациях на 8.3 с интерфейсом «Такси». Разница только в том, какой именно список вы открываете.

Ниже — каждый способ с точными путями меню и примерами. Начните с короткого ориентира: что именно вы хотите скопировать и куда.

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

Дублирование одного элемента клавишей F9

Когда нужно завести новый элемент, похожий на уже существующий, не заполняйте карточку заново. Встаньте на образец в списке и нажмите F9 либо кнопку Создать новый элемент копированием текущего на командной панели (значок двух листов).

1С откроет новую карточку, в которую перенесёт значения всех реквизитов исходного элемента, включая табличные части. Код или номер при этом создаётся новый — дубля по коду не будет.

💡 Для документов работает та же клавиша. Копия создаётся непроведённой — её нужно проверить и провести отдельно.

Что меняем в копии перед записью:

  • 🔹 наименование или другие отличающие реквизиты;
  • 🔹 дату документа (у копии подставляется текущая);
  • 🔹 суммы и количества, если это разовая правка.

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

Отдельная история — копирование строк внутри табличной части документа (например, строк товаров в накладной). Встаньте на строку таблицы, скопируйте её командой Ещё → Скопировать строку (или F9 в самой таблице) — появится дубль ниже. Так же работает перетаскивание с зажатым Ctrl. Это копирование строк списка товаров, а не всего документа.

Способ хорош для одного-двух элементов. Если копий нужно много или данные должны уйти в другую базу — смотрите следующие разделы.

Выгрузка всего списка в Excel и буфер обмена

Самый частый смысл запроса «скопировать список» — вытащить его содержимое из 1С наружу: в Excel, в текстовый файл, на печать. Для этого есть команда Вывести список.

Порядок действий:

  1. Откройте нужный список (например, Справочники → Номенклатура или Контрагенты).
  2. При необходимости отфильтруйте и отсортируйте строки — выгрузится ровно то, что видно на экране.
  3. В правом верхнем углу формы нажмите Ещё (значок ≡) и выберите Вывести список.
  4. В диалоге укажите вид: Табличный документ (для Excel и печати) или Текстовый документ.
  5. Отметьте галочками колонки, которые нужно выгрузить, и нажмите ОК.

1С сформирует отдельное окно табличного документа. Из него список копируется двумя путями:

  • 📋 выделить всё (Ctrl+A), скопировать (Ctrl+C) и вставить в открытый Excel;
  • 💾 сохранить файлом: Главное меню → Файл → Сохранить как, формат Лист Excel 2007 (*.xlsx) или Табличный документ (*.mxl).

Если нужного списка нет в обычном меню (например, служебный регистр), откройте его через полный перечень объектов: Главное меню → Все функции. Команду предварительно включают в Главное меню → Сервис → Параметры, галочка Отображать команду «Все функции». Дальше в открытом списке всё та же команда Вывести список.

💡 Пара ячеек копируется и напрямую: выделите строки в списке и нажмите Ctrl+C — в буфер попадёт содержимое текущей колонки. Для аккуратной выгрузки с нужными столбцами всё же надёжнее Вывести список.

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

Программное копирование элементов встроенным языком

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

Исходный = Справочники.Номенклатура.НайтиПоКоду("000000123").ПолучитьОбъект();

Копия = Справочники.Номенклатура.СоздатьЭлемент();
ЗаполнитьЗначенияСвойств(Копия, Исходный);
Копия.УстановитьНовыйКод();
Копия.Наименование = Исходный.Наименование + " (копия)";
Копия.Записать();

Разберём, что здесь происходит:

  • ЗаполнитьЗначенияСвойств(Копия, Исходный) — глобальная функция, которая переносит значения всех реквизитов с совпадающими именами. Это «шапка» элемента.
  • УстановитьНовыйКод() — выдаёт копии новый уникальный код, чтобы не было конфликта.
  • Записать() сохраняет элемент в базу.

Функция ЗаполнитьЗначенияСвойств копирует только реквизиты шапки, но не табличные части. Их переносят отдельно — через выгрузку в таблицу значений и загрузку обратно:

// для объекта с табличной частью «Товары»
Копия.Товары.Загрузить(Исходный.Товары.Выгрузить());

Чтобы размножить сразу много элементов, оберните это в цикл по выборке запроса:

Запрос = Новый Запрос;
Запрос.Текст =
    "ВЫБРАТЬ Ссылка ИЗ Справочник.Номенклатура
    |ГДЕ ПометкаУдаления = ЛОЖЬ";
Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл
    Исходный = Выборка.Ссылка.ПолучитьОбъект();
    Копия = Справочники.Номенклатура.СоздатьЭлемент();
    ЗаполнитьЗначенияСвойств(Копия, Исходный);
    Копия.УстановитьНовыйКод();
    Копия.Записать();
КонецЦикла;

Для документов всё аналогично: СоздатьДокумент(), УстановитьНовыйНомер(), перенос табличных частей. Запускают такой код через Файл → Открыть внешней обработки с модулем, либо из консоли кода администратора.

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

Перенос списков между базами через выгрузку в XML

Если список нужно перенести в другую базу с такой же конфигурацией, подойдёт типовая обработка «Выгрузка и загрузка данных XML». Её берут из комплекта поставки на диске ИТС и открывают через Файл → Открыть.

Как это работает:

  1. В базе-источнике откройте обработку, на закладке выгрузки отметьте нужные справочники или виды документов.
  2. Выгрузите отмеченные данные в файл .xml.
  3. В базе-приёмнике откройте ту же обработку и загрузите этот файл.

Обработка переносит объекты вместе с их внутренними идентификаторами (GUID), поэтому ссылки между объектами сохраняются — при условии, что связанные объекты тоже попали в выгрузку либо уже есть в приёмнике.

Главное ограничение: структура метаданных в обеих базах должна совпадать. Если в приёмнике нет такого же реквизита или справочника, данные по нему просто не перенесутся.

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

Для обмена между разными конфигурациями простой выгрузки мало — там нужны правила конвертации (обработка «Универсальный обмен данными в формате XML» и подготовленные правила). Это уже отдельная задача интеграции.

Загрузка списка из внешнего файла

Обратная задача — когда список готов в Excel и его нужно завести в 1С. Здесь выручает обработка «Загрузка данных из табличного документа» (тоже типовая, с диска ИТС).

Коротко по шагам:

  1. Откройте обработку через Файл → Открыть.
  2. Укажите, в какой справочник или табличную часть грузите данные.
  3. Загрузите файл Excel в табличный документ обработки.
  4. Сопоставьте колонки файла с реквизитами объекта 1С.
  5. Запустите загрузку и проверьте отчёт о результате.

Так удобно переносить прайс-листы, списки контрагентов, остатки — всё, что проще собрать в таблице, чем вбивать руками.

Перед загрузкой списка из Excel
Выполнено: 0 / 5

Среди сторонних решений встречаются и более гибкие обработки загрузки-выгрузки, но для большинства задач хватает двух типовых с ИТС: выгрузка-загрузка XML (между базами) и загрузка из табличного документа (из Excel).

Копирование между разными конфигурациями: что учесть

Главная ловушка при переносе списков — разница в метаданных. Одно и то же понятие в разных конфигурациях называется и устроено по-своему.

Что сверитьПочему это важно
Совпадение имён реквизитовЗаполнитьЗначенияСвойств и XML переносят только совпадающие по имени поля
Состав табличных частейУ приёмника может не быть нужной табличной части — строки потеряются
Справочники-владельцыДля подчинённого справочника сначала переносят владельца
Связанные объектыЕдиницы измерения, виды цен, договоры должны существовать в приёмнике

Термины между конфигурациями не смешивайте: то, что в «Бухгалтерии» зовётся «Типы цен номенклатуры», в «Управлении торговлей» — «Виды цен». При ручном сопоставлении колонок это легко перепутать.

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

Частые ошибки при копировании списков

Отдельно соберём то, что ломается чаще всего — и чего нет в пошаговых инструкциях выше.

  • ❌ Выгрузился не весь список. Вывести список берёт только видимые строки. Снимите отбор и разверните группы перед выгрузкой.
  • ❌ В Excel пропали нужные колонки. В диалоге Вывести список отмечаются галочками конкретные столбцы — проверьте их перед ОК.
  • ❌ После переноса XML в приёмнике пустые ссылки. Связанные объекты не попали в выгрузку. Отметьте их тоже или убедитесь, что они уже есть в приёмнике.
  • ❌ Копия документа задвоила движения. Проведённая копия формирует собственные проводки. Проводите копию только осознанно, лишнюю — помечайте на удаление.
  • ❌ Массовый код скопировал лишнее. Ошибка в условии запроса — и в базе тысячи ненужных элементов. Любой массовый перенос сначала гоняйте на копии базы.
  • ❌ Не перенеслись табличные части при копировании кодом. ЗаполнитьЗначенияСвойств их не трогает — переносите через Выгрузить() / Загрузить().

Автоматизация регулярного копирования

Если список нужно копировать или синхронизировать постоянно, человека из процесса убирают.

Для разовой задачи по расписанию внутри одной базы код копирования оформляют в регламентное задание (Администрирование → Обслуживание → Регламентные и фоновые задания, в клиент-серверной базе). Задание запускается по графику и выполняет ваш код без участия пользователя.

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

Выбор простой: разовая выгрузка — руками через Вывести список или XML; повторяющаяся — регламентное задание или план обмена.

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

Сохранятся ли ссылки на другие объекты, если создать элемент копированием (F9)?
Да. Копия ссылается на те же единицы измерения, договоры и прочие объекты, что и образец. Это независимый элемент с новым кодом, но связи он наследует.
Копируется ли табличная часть при создании копированием?
Через F9 в интерфейсе — да, табличные части переносятся целиком. А вот в программном коде функция ЗаполнитьЗначенияСвойств их не копирует — табличные части переносят отдельно.
Можно ли выгрузить список в Excel с форматированием?
Выбирайте в Вывести список вид Табличный документ и сохраняйте его как .xlsx. Это даёт таблицу со столбцами и заголовками, пригодную для дальнейшей работы в Excel.
Почему при загрузке XML в другой базе появились пустые значения?
Связанные объекты не были перенесены или отсутствуют в приёмнике. Платформа хранит ссылки по идентификатору, и если объекта нет — поле остаётся пустым.
Нужны ли права администратора, чтобы скопировать список?
Для Вывести список достаточно обычных прав на чтение данных. А выгрузка-загрузка XML и запуск внешних обработок обычно требуют полных прав — их настраивает администратор.