Копирование списков в 1С: от одного элемента до переноса между базами
Содержание
Скопировать список в 1С 8.3 можно четырьмя основными способами, и выбор зависит от задачи. Продублировать один элемент — клавиша F9 («Создать копированием»). Выгрузить весь список в Excel или буфер — команда Вывести список в меню Ещё. Перенести данные в другую такую же базу — выгрузка в XML. Загрузить список из файла — отдельная обработка.
Все перечисленные приёмы работают на уровне платформы, поэтому одинаково доступны в «Бухгалтерии предприятия 3.0», «Зарплате и управлении персоналом 3.1», «Управлении торговлей 11» и других конфигурациях на 8.3 с интерфейсом «Такси». Разница только в том, какой именно список вы открываете.
Ниже — каждый способ с точными путями меню и примерами. Начните с короткого ориентира: что именно вы хотите скопировать и куда.
F9 — «Создать копированием». Самый быстрый путь.Ещё выберите Вывести список.Дублирование одного элемента клавишей F9
Когда нужно завести новый элемент, похожий на уже существующий, не заполняйте карточку заново. Встаньте на образец в списке и нажмите F9 либо кнопку Создать новый элемент копированием текущего на командной панели (значок двух листов).
1С откроет новую карточку, в которую перенесёт значения всех реквизитов исходного элемента, включая табличные части. Код или номер при этом создаётся новый — дубля по коду не будет.
💡 Для документов работает та же клавиша. Копия создаётся непроведённой — её нужно проверить и провести отдельно.
Что меняем в копии перед записью:
- 🔹 наименование или другие отличающие реквизиты;
- 🔹 дату документа (у копии подставляется текущая);
- 🔹 суммы и количества, если это разовая правка.
Создавать копию документа прямо в рабочей базе безопасно, но если вы её проведёте, в учёте появятся вторые движения. Лишнюю копию удаляйте через пометку на удаление, а не просто закрывайте окно.
Отдельная история — копирование строк внутри табличной части документа (например, строк товаров в накладной). Встаньте на строку таблицы, скопируйте её командой Ещё → Скопировать строку (или F9 в самой таблице) — появится дубль ниже. Так же работает перетаскивание с зажатым Ctrl. Это копирование строк списка товаров, а не всего документа.
Способ хорош для одного-двух элементов. Если копий нужно много или данные должны уйти в другую базу — смотрите следующие разделы.
Выгрузка всего списка в Excel и буфер обмена
Самый частый смысл запроса «скопировать список» — вытащить его содержимое из 1С наружу: в Excel, в текстовый файл, на печать. Для этого есть команда Вывести список.
Порядок действий:
- Откройте нужный список (например,
Справочники→НоменклатураилиКонтрагенты). - При необходимости отфильтруйте и отсортируйте строки — выгрузится ровно то, что видно на экране.
- В правом верхнем углу формы нажмите
Ещё(значок ≡) и выберитеВывести список. - В диалоге укажите вид:
Табличный документ(для Excel и печати) илиТекстовый документ. - Отметьте галочками колонки, которые нужно выгрузить, и нажмите
ОК.
1С сформирует отдельное окно табличного документа. Из него список копируется двумя путями:
- 📋 выделить всё (
Ctrl+A), скопировать (Ctrl+C) и вставить в открытый Excel; - 💾 сохранить файлом:
Главное меню→Файл→Сохранить как, форматЛист Excel 2007 (*.xlsx)илиТабличный документ (*.mxl).
Если нужного списка нет в обычном меню (например, служебный регистр), откройте его через полный перечень объектов: Главное меню → Все функции. Команду предварительно включают в Главное меню → Сервис → Параметры, галочка Отображать команду «Все функции». Дальше в открытом списке всё та же команда Вывести список.
💡 Пара ячеек копируется и напрямую: выделите строки в списке и нажмите Ctrl+C — в буфер попадёт содержимое текущей колонки. Для аккуратной выгрузки с нужными столбцами всё же надёжнее Вывести список.
Если список нужен не в файле, а на бумаге — из того же окна табличного документа идёт обычная печать: Ctrl+P. Перед печатью проверьте в предпросмотре, что строки не обрезаются по ширине страницы, и при необходимости уменьшите масштаб или скройте лишние колонки ещё на этапе Вывести список.
Программное копирование элементов встроенным языком
Когда копий нужно много или копирование должно повторяться, его описывают кодом. Базовый приём — создать новый элемент и перенести в него значения реквизитов образца.
Исходный = Справочники.Номенклатура.НайтиПоКоду("000000123").ПолучитьОбъект();
Копия = Справочники.Номенклатура.СоздатьЭлемент();
ЗаполнитьЗначенияСвойств(Копия, Исходный);
Копия.УстановитьНовыйКод();
Копия.Наименование = Исходный.Наименование + " (копия)";
Копия.Записать();
Разберём, что здесь происходит:
ЗаполнитьЗначенияСвойств(Копия, Исходный)— глобальная функция, которая переносит значения всех реквизитов с совпадающими именами. Это «шапка» элемента.УстановитьНовыйКод()— выдаёт копии новый уникальный код, чтобы не было конфликта.Записать()сохраняет элемент в базу.
Функция ЗаполнитьЗначенияСвойств копирует только реквизиты шапки, но не табличные части. Их переносят отдельно — через выгрузку в таблицу значений и загрузку обратно:
// для объекта с табличной частью «Товары»
Копия.Товары.Загрузить(Исходный.Товары.Выгрузить());
Чтобы размножить сразу много элементов, оберните это в цикл по выборке запроса:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ Ссылка ИЗ Справочник.Номенклатура
|ГДЕ ПометкаУдаления = ЛОЖЬ";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Исходный = Выборка.Ссылка.ПолучитьОбъект();
Копия = Справочники.Номенклатура.СоздатьЭлемент();
ЗаполнитьЗначенияСвойств(Копия, Исходный);
Копия.УстановитьНовыйКод();
Копия.Записать();
КонецЦикла;
Для документов всё аналогично: СоздатьДокумент(), УстановитьНовыйНомер(), перенос табличных частей. Запускают такой код через Файл → Открыть внешней обработки с модулем, либо из консоли кода администратора.
Прежде чем гнать массовое копирование по рабочей базе, выполните его на копии базы. Ошибка в условии запроса размножит не то, что нужно, тысячами строк.
Перенос списков между базами через выгрузку в XML
Если список нужно перенести в другую базу с такой же конфигурацией, подойдёт типовая обработка «Выгрузка и загрузка данных XML». Её берут из комплекта поставки на диске ИТС и открывают через Файл → Открыть.
Как это работает:
- В базе-источнике откройте обработку, на закладке выгрузки отметьте нужные справочники или виды документов.
- Выгрузите отмеченные данные в файл
.xml. - В базе-приёмнике откройте ту же обработку и загрузите этот файл.
Обработка переносит объекты вместе с их внутренними идентификаторами (GUID), поэтому ссылки между объектами сохраняются — при условии, что связанные объекты тоже попали в выгрузку либо уже есть в приёмнике.
Главное ограничение: структура метаданных в обеих базах должна совпадать. Если в приёмнике нет такого же реквизита или справочника, данные по нему просто не перенесутся.
Перед загрузкой в рабочую базу сделайте её резервную копию. Загрузка XML меняет данные напрямую, и откатить её можно только восстановлением из копии.
Для обмена между разными конфигурациями простой выгрузки мало — там нужны правила конвертации (обработка «Универсальный обмен данными в формате XML» и подготовленные правила). Это уже отдельная задача интеграции.
Загрузка списка из внешнего файла
Обратная задача — когда список готов в Excel и его нужно завести в 1С. Здесь выручает обработка «Загрузка данных из табличного документа» (тоже типовая, с диска ИТС).
Коротко по шагам:
- Откройте обработку через
Файл→Открыть. - Укажите, в какой справочник или табличную часть грузите данные.
- Загрузите файл Excel в табличный документ обработки.
- Сопоставьте колонки файла с реквизитами объекта 1С.
- Запустите загрузку и проверьте отчёт о результате.
Так удобно переносить прайс-листы, списки контрагентов, остатки — всё, что проще собрать в таблице, чем вбивать руками.
Среди сторонних решений встречаются и более гибкие обработки загрузки-выгрузки, но для большинства задач хватает двух типовых с ИТС: выгрузка-загрузка XML (между базами) и загрузка из табличного документа (из Excel).
Копирование между разными конфигурациями: что учесть
Главная ловушка при переносе списков — разница в метаданных. Одно и то же понятие в разных конфигурациях называется и устроено по-своему.
| Что сверить | Почему это важно |
|---|---|
| Совпадение имён реквизитов | ЗаполнитьЗначенияСвойств и XML переносят только совпадающие по имени поля |
| Состав табличных частей | У приёмника может не быть нужной табличной части — строки потеряются |
| Справочники-владельцы | Для подчинённого справочника сначала переносят владельца |
| Связанные объекты | Единицы измерения, виды цен, договоры должны существовать в приёмнике |
Термины между конфигурациями не смешивайте: то, что в «Бухгалтерии» зовётся «Типы цен номенклатуры», в «Управлении торговлей» — «Виды цен». При ручном сопоставлении колонок это легко перепутать.
Если базы на разных релизах одной конфигурации, перенос через XML обычно проходит, но реквизиты, добавленные в новом релизе, в старой базе не примутся — их там просто нет.
Частые ошибки при копировании списков
Отдельно соберём то, что ломается чаще всего — и чего нет в пошаговых инструкциях выше.
- ❌ Выгрузился не весь список.
Вывести списокберёт только видимые строки. Снимите отбор и разверните группы перед выгрузкой. - ❌ В Excel пропали нужные колонки. В диалоге
Вывести списокотмечаются галочками конкретные столбцы — проверьте их передОК. - ❌ После переноса XML в приёмнике пустые ссылки. Связанные объекты не попали в выгрузку. Отметьте их тоже или убедитесь, что они уже есть в приёмнике.
- ❌ Копия документа задвоила движения. Проведённая копия формирует собственные проводки. Проводите копию только осознанно, лишнюю — помечайте на удаление.
- ❌ Массовый код скопировал лишнее. Ошибка в условии запроса — и в базе тысячи ненужных элементов. Любой массовый перенос сначала гоняйте на копии базы.
- ❌ Не перенеслись табличные части при копировании кодом.
ЗаполнитьЗначенияСвойствих не трогает — переносите черезВыгрузить()/Загрузить().
Автоматизация регулярного копирования
Если список нужно копировать или синхронизировать постоянно, человека из процесса убирают.
Для разовой задачи по расписанию внутри одной базы код копирования оформляют в регламентное задание (Администрирование → Обслуживание → Регламентные и фоновые задания, в клиент-серверной базе). Задание запускается по графику и выполняет ваш код без участия пользователя.
Для постоянной синхронизации данных между двумя базами используют планы обмена: настраивается узел обмена, и изменения автоматически выгружаются и загружаются по регламенту. Это сложнее разовой выгрузки XML, но не требует ручного запуска.
Выбор простой: разовая выгрузка — руками через Вывести список или XML; повторяющаяся — регламентное задание или план обмена.
Что бы вы ни автоматизировали, оставляйте след: записывайте в журнал регистрации число обработанных элементов и возникшие исключения. Тогда при расхождении данных между базами будет видно, на каком запуске и по какому объекту копирование пошло не так, — искать вслепую по всей базе не придётся.
Сохранятся ли ссылки на другие объекты, если создать элемент копированием (F9)?
Копируется ли табличная часть при создании копированием?
F9 в интерфейсе — да, табличные части переносятся целиком. А вот в программном коде функция ЗаполнитьЗначенияСвойств их не копирует — табличные части переносят отдельно.Можно ли выгрузить список в Excel с форматированием?
Вывести список вид Табличный документ и сохраняйте его как .xlsx. Это даёт таблицу со столбцами и заголовками, пригодную для дальнейшей работы в Excel.Почему при загрузке XML в другой базе появились пустые значения?
Нужны ли права администратора, чтобы скопировать список?
Вывести список достаточно обычных прав на чтение данных. А выгрузка-загрузка XML и запуск внешних обработок обычно требуют полных прав — их настраивает администратор.