Перенос структуры из одной базы 1С в другую: Конфигуратор, XML, КД 2.0 и код

· 9 мин

Содержание

Чтобы скопировать структуру одной базы 1С в другую, откройте целевую базу в Конфигураторе и выберите Конфигурация → Сравнить, объединить с конфигурацией из файла. Укажите .cf исходной базы, отметьте галочками нужные справочники, документы и регистры, нажмите «Выполнить» и обновите конфигурацию базы данных (F7).

Частая ошибка — ждать, что вместе со структурой переедут и данные. Объединение переносит только метаданные: реквизиты, формы, макеты, модули. Элементы справочников и документы копируются отдельно: через XML, Конвертацию данных 2.0 или скриптом. Ниже каждый способ по шагам, с командами и кодом.

Что именно копируем: метаданные, данные или объект «Структура»

Под фразой «скопировать структуру в 1С» прячутся три разные задачи. От ответа зависит инструмент.

ЗадачаИнструментКогда подходитРиски
📐 Перенести объекты конфигурации (справочник, документ, отчёт)Сравнение и объединение в КонфигуратореНужны те же объекты в другой базеКонфликт с поддержкой поставщика
🗂 Перенести всю конфигурацию «как есть»Сохранение/загрузка .cf, XML-файлыНовая пустая база, тестовая копияЗагрузка .cf заменяет всё целиком
📦 Перенести данные между одинаковыми базамиУниверсальная выгрузка XML, .dtМетаданные совпадаютДубли и затёртые ссылки
🔄 Перенести данные между разными конфигурациямиКонвертация данных 2.0Разные структуры, нужны правилаТрудоёмкая настройка
💻 Скопировать часть данных выборочноЗапрос + COM-соединениеРазовая задача, нужен фильтрОшибки в коде пишут прямо в базу
🧩 Скопировать одну Структуру в другую в кодеДля Каждого, ЗаполнитьЗначенияСвойствРазработка, отладкаНеглубокая копия вложенных значений
Что вам нужно перенести?

Перенос структуры конфигурации через режим Конфигуратора

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

Шаг 1. Сохраните конфигурацию-источник в файл

  1. Откройте исходную базу в режиме Конфигуратора.
  2. Выберите Конфигурация → Сохранить конфигурацию в файл.
  3. Сохраните файл, например C:\Temp\source.cf.

Перед объединением выгрузите целевую базу в .dt через Администрирование → Выгрузить информационную базу. Откат объединения без копии — это ручной разбор десятков объектов.

Шаг 2. Снимите блокировку поддержки в целевой базе

Типовая конфигурация на поддержке не даёт менять объекты. Откройте Конфигурация → Поддержка → Настройка поддержки и нажмите «Включить возможность изменения». Для нужных объектов поставьте правило «Объект поставщика редактируется с сохранением поддержки».

Если базу обновляют через интернет-поддержку пользователи, такое изменение переводит её на обновление через Конфигуратор. Учтите это до начала работ.

Шаг 3. Сравните и отметьте объекты

  1. В целевой базе выберите Конфигурация → Сравнить, объединить с конфигурацией из файла.
  2. Укажите source.cf.
  3. Если программа спросит о постановке на поддержку, откажитесь, когда переносите свои объекты, а не обновляете типовую.
  4. В дереве сравнения снимите все флажки, затем отметьте только нужные объекты.
  5. Нажмите «Выполнить».

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

💡 Если обе конфигурации созданы независимо, одноимённые объекты сопоставляются по имени. Проверьте пары в дереве сравнения до запуска: справочник «Товары» в одной базе и «Товары» в другой могут иметь разные реквизиты.

Шаг 4. Обновите конфигурацию базы данных

Нажмите F7 или Конфигурация → Обновить конфигурацию базы данных. Платформа покажет список изменений структуры таблиц. Реструктуризации нужен монопольный доступ: пользователи должны выйти из базы. Планируйте этот шаг на вечер или выходной.

Вариант: выгрузка конфигурации в XML-файлы

Для разработчиков удобнее Конфигурация → Выгрузить конфигурацию в файлы. Каждый объект ложится отдельным XML-файлом с модулями в виде .bsl. Нужный каталог можно положить в Git, сравнить внешним инструментом и загрузить обратно через Конфигурация → Загрузить конфигурацию из файлов.

Загрузку отдельных объектов из файлов используйте осторожно: внутренние идентификаторы объектов в файлах берутся из источника. Для переноса между чужими конфигурациями безопаснее объединение через .cf.

Обмен данными через XML и универсальные обработки

Когда структура в обеих базах одинаковая (две копии одной конфигурации одного релиза), данные переносятся без правил обмена.

Универсальная выгрузка и загрузка данных XML

Обработку «Выгрузка и загрузка данных XML» берут с диска ИТС или из комплекта инструментов разработчика. Порядок:

  1. Откройте исходную базу в режиме 1С:Предприятие.
  2. Запустите обработку через Файл → Открыть.
  3. На вкладке выгрузки отметьте объекты: справочник целиком или документы за период.
  4. Сохраните XML-файл.
  5. В целевой базе откройте ту же обработку и загрузите файл.

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

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

Полная копия через .dt

Если нужна вся база, обработки не нужны. В Конфигураторе исходной базы: Администрирование → Выгрузить информационную базу. В новой пустой базе: Администрирование → Загрузить информационную базу. Файл .dt содержит и конфигурацию, и данные, и пользователей.

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

Конвертация данных 2.0 для сложных миграций

Когда структуры баз различаются (например, самописная конфигурация и типовая), прямой перенос невозможен. Нужно описать соответствие: какой объект источника становится каким объектом приёмника и как заполняются поля.

Как устроена работа

  1. Разверните отдельную базу «Конвертация данных» редакции 2.0.
  2. Выгрузите структуру метаданных обеих конфигураций обработкой MD82Exp.epf (входит в комплект КД 2.0) — получите два XML-файла.
  3. Загрузите оба файла в базу конвертации и создайте новую конвертацию: источник → приёмник.
  4. Создайте правила конвертации объектов (ПКО) и правила выгрузки данных (ПВД). Мастер предложит сопоставление по одинаковым именам.
  5. Сохраните правила обмена в XML-файл.
  6. В исходной базе запустите обработку «Универсальный обмен данными в формате XML», укажите правила и выгрузите данные.
  7. В целевой базе той же обработкой загрузите файл.

Что настроить вручную

  • 🔍 Поиск объектов. Задайте поля поиска: ИНН для контрагентов, код или артикул для номенклатуры. Без этого каждый запуск создаёт дубли.
  • 🔁 Разные типы полей. Если в источнике единица измерения — строка, а в приёмнике — ссылка на справочник, напишите обработчик или правило конвертации значений.
  • 🧾 Перечисления. Значения сопоставляются вручную, если имена не совпали.

Для типовых конфигураций на БСП существует Конвертация данных 3.0 и формат EnterpriseData. Если обе базы типовые и между ними уже есть синхронизация, проверьте её до написания своих правил.

Копирование через запросы и COM-соединение

Консоль запросов полезна на подготовке: она показывает, сколько записей подходит под отбор, и помогает найти дубли. Сам перенос выполняет код, который подключается к другой базе через V83.COMConnector.

Пример: перенести элементы справочника «Номенклатура» из файловой базы-источника, не создавая дубли по коду. Код запускается в целевой базе на сервере или в толстом клиенте.

Коннектор = Новый COMОбъект("V83.COMConnector");
Источник = Коннектор.Connect("File=""C:\Bases\Source"";Usr=""Администратор"";Pwd=""""");

Запрос = Источник.NewObject("Запрос");
Запрос.Текст =
"ВЫБРАТЬ
|	Номенклатура.Код КАК Код,
|	Номенклатура.Наименование КАК Наименование
|ИЗ
|	Справочник.Номенклатура КАК Номенклатура
|ГДЕ
|	НЕ Номенклатура.ЭтоГруппа
|	И НЕ Номенклатура.ПометкаУдаления";

Выборка = Запрос.Выполнить().Выбрать();
Создано = 0;
Пока Выборка.Следующий() Цикл
	Код = СокрЛП(Выборка.Код);
	Если Справочники.Номенклатура.НайтиПоКоду(Код).Пустая() Тогда
		Элемент = Справочники.Номенклатура.СоздатьЭлемент();
		Элемент.Код = Код;
		Элемент.Наименование = Выборка.Наименование;
		Элемент.Записать();
		Создано = Создано + 1;
	КонецЕсли;
КонецЦикла;

Сообщить(СтрШаблон("Создано элементов: %1", Создано));

Через COM передаются строки, числа, даты и булево. Ссылки из базы-источника в целевой базе не работают: для реквизита-ссылки найдите соответствующий элемент по коду или наименованию и подставьте его.

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

Для клиент-серверной базы строка подключения выглядит так: Srvr="имя_сервера";Ref="имя_базы";Usr="...";Pwd="...". Версия COM-коннектора должна совпадать с версией платформы сервера, иначе подключение вернёт ошибку.

Автоматизация переноса: пакетный режим и внешние обработки

Если структуру нужно копировать регулярно (например, из базы разработки в тестовую), операции Конфигуратора запускаются из командной строки.

@echo off
set V8="C:\Program Files\1cv8\8.3.24.1548\bin\1cv8.exe"

rem 1. Выгрузить конфигурацию разработки в файл
%V8% DESIGNER /F"C:\Bases\Dev" /N"Администратор" /P"" /DumpCfg "C:\Temp\dev.cf" /Out "C:\Temp\dump.log"

rem 2. Резервная копия тестовой базы
%V8% DESIGNER /F"C:\Bases\Test" /N"Администратор" /P"" /DumpIB "C:\Temp\test_backup.dt" /Out "C:\Temp\backup.log"

rem 3. Загрузить конфигурацию в тестовую базу и обновить структуру БД
%V8% DESIGNER /F"C:\Bases\Test" /N"Администратор" /P"" /LoadCfg "C:\Temp\dev.cf" /UpdateDBCfg /Out "C:\Temp\load.log"

Путь к 1cv8.exe замените своим: номер версии в каталоге у каждого свой. Ключ /LoadCfg полностью заменяет конфигурацию тестовой базы — для выборочного переноса объектов он не подходит. Для работы с XML-файлами есть ключи /DumpConfigToFiles и /LoadConfigFromFiles.

Ключ /UpdateDBCfg требует, чтобы в тестовой базе не было пользователей. Если они есть, команда завершится ошибкой, а лог /Out покажет причину. Запускайте скрипт по расписанию ночью.

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

Копирование одной Структуры в другую во встроенном языке

Если вопрос про объект Структура в коде, задача решается тремя способами.

Полная копия ключей и значений:

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

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

Глубокая копия. Оба способа выше копируют вложенные структуры и массивы по ссылке: изменение вложенного массива в копии изменит его и в исходной. В конфигурациях на БСП для глубокой копии есть функция ОбщегоНазначения.СкопироватьРекурсивно(Исходная).

Нужна неизменяемая копия — используйте Новый ФиксированнаяСтруктура(Исходная).

Ошибки при копировании структуры и как их предотвратить

  • ❌ «Объект не найден» в реквизитах после переноса данных. Перенесли документы без справочников, на которые они ссылаются. Выгружайте связанные справочники вместе с документами или первыми.
  • ❌ Дубли контрагентов и номенклатуры. Данные загрузили дважды или GUID в базах разные. В КД 2.0 задайте поля поиска, в скрипте проверяйте наличие по коду.
  • ❌ Пустой тип реквизита после объединения. Не отметили объект, на который ссылается реквизит. Перечитайте окно со ссылками на неотмеченные объекты.
  • ❌ Потерянные доработки целевой базы. При объединении в дереве стоял режим «Взять из файла» для объекта, который в целевой базе тоже меняли. Для таких объектов выбирайте объединение с приоритетом основной конфигурации и смотрите различия по модулям.
  • ❌ Ошибка загрузки XML «несовпадение структуры». Конфигурации отличаются релизом. Обновите одну из баз до того же релиза или переходите на правила КД 2.0.
Можно ли перенести только одну форму или макет?
Да. В дереве сравнения раскройте объект и отметьте только нужную форму или макет. Остальные свойства объекта останутся как в целевой базе.
Перенесутся ли права пользователей?
Роли — это объекты конфигурации, их можно отметить при объединении. Сами пользователи и назначенные им права хранятся в данных и через .cf не переносятся.
Чем отличается загрузка .cf от объединения?
Загрузка заменяет всю конфигурацию целевой базы содержимым файла. Объединение меняет только отмеченные объекты, остальное остаётся без изменений.
Сохранятся ли коды и номера при переносе данных?
При универсальной выгрузке XML коды и номера переносятся как есть. Если в целевой базе такие коды уже заняты, появятся элементы с одинаковыми кодами — проверьте это до загрузки.
Почему COM-соединение не создаётся?
Чаще всего не зарегистрирован comcntr.dll нужной версии или разрядность клиента не совпадает с разрядностью зарегистрированной библиотеки. Перерегистрируйте comcntr.dll из каталога bin установленной версии платформы от имени администратора.