Перенос структуры из одной базы 1С в другую: Конфигуратор, XML, КД 2.0 и код
Содержание
Чтобы скопировать структуру одной базы 1С в другую, откройте целевую базу в Конфигураторе и выберите Конфигурация → Сравнить, объединить с конфигурацией из файла. Укажите .cf исходной базы, отметьте галочками нужные справочники, документы и регистры, нажмите «Выполнить» и обновите конфигурацию базы данных (F7).
Частая ошибка — ждать, что вместе со структурой переедут и данные. Объединение переносит только метаданные: реквизиты, формы, макеты, модули. Элементы справочников и документы копируются отдельно: через XML, Конвертацию данных 2.0 или скриптом. Ниже каждый способ по шагам, с командами и кодом.
Что именно копируем: метаданные, данные или объект «Структура»
Под фразой «скопировать структуру в 1С» прячутся три разные задачи. От ответа зависит инструмент.
| Задача | Инструмент | Когда подходит | Риски |
|---|---|---|---|
| 📐 Перенести объекты конфигурации (справочник, документ, отчёт) | Сравнение и объединение в Конфигураторе | Нужны те же объекты в другой базе | Конфликт с поддержкой поставщика |
| 🗂 Перенести всю конфигурацию «как есть» | Сохранение/загрузка .cf, XML-файлы | Новая пустая база, тестовая копия | Загрузка .cf заменяет всё целиком |
| 📦 Перенести данные между одинаковыми базами | Универсальная выгрузка XML, .dt | Метаданные совпадают | Дубли и затёртые ссылки |
| 🔄 Перенести данные между разными конфигурациями | Конвертация данных 2.0 | Разные структуры, нужны правила | Трудоёмкая настройка |
| 💻 Скопировать часть данных выборочно | Запрос + COM-соединение | Разовая задача, нужен фильтр | Ошибки в коде пишут прямо в базу |
| 🧩 Скопировать одну Структуру в другую в коде | Для Каждого, ЗаполнитьЗначенияСвойств | Разработка, отладка | Неглубокая копия вложенных значений |
Перенос структуры конфигурации через режим Конфигуратора
Это основной способ, когда нужно скопировать один или несколько объектов метаданных. Делается в две базы: из исходной берём файл, в целевую объединяем.
Шаг 1. Сохраните конфигурацию-источник в файл
- Откройте исходную базу в режиме Конфигуратора.
- Выберите
Конфигурация → Сохранить конфигурацию в файл. - Сохраните файл, например
C:\Temp\source.cf.
Перед объединением выгрузите целевую базу в .dt через Администрирование → Выгрузить информационную базу. Откат объединения без копии — это ручной разбор десятков объектов.
Шаг 2. Снимите блокировку поддержки в целевой базе
Типовая конфигурация на поддержке не даёт менять объекты. Откройте Конфигурация → Поддержка → Настройка поддержки и нажмите «Включить возможность изменения». Для нужных объектов поставьте правило «Объект поставщика редактируется с сохранением поддержки».
Если базу обновляют через интернет-поддержку пользователи, такое изменение переводит её на обновление через Конфигуратор. Учтите это до начала работ.
Шаг 3. Сравните и отметьте объекты
- В целевой базе выберите
Конфигурация → Сравнить, объединить с конфигурацией из файла. - Укажите
source.cf. - Если программа спросит о постановке на поддержку, откажитесь, когда переносите свои объекты, а не обновляете типовую.
- В дереве сравнения снимите все флажки, затем отметьте только нужные объекты.
- Нажмите «Выполнить».
При объединении программа проверяет ссылки. Если переносимый документ ссылается на справочник, которого нет в целевой базе, появится окно со списком таких объектов. Включите их в объединение, иначе реквизиты получат пустой тип.
💡 Если обе конфигурации созданы независимо, одноимённые объекты сопоставляются по имени. Проверьте пары в дереве сравнения до запуска: справочник «Товары» в одной базе и «Товары» в другой могут иметь разные реквизиты.
Шаг 4. Обновите конфигурацию базы данных
Нажмите F7 или Конфигурация → Обновить конфигурацию базы данных. Платформа покажет список изменений структуры таблиц. Реструктуризации нужен монопольный доступ: пользователи должны выйти из базы. Планируйте этот шаг на вечер или выходной.
Вариант: выгрузка конфигурации в XML-файлы
Для разработчиков удобнее Конфигурация → Выгрузить конфигурацию в файлы. Каждый объект ложится отдельным XML-файлом с модулями в виде .bsl. Нужный каталог можно положить в Git, сравнить внешним инструментом и загрузить обратно через Конфигурация → Загрузить конфигурацию из файлов.
Загрузку отдельных объектов из файлов используйте осторожно: внутренние идентификаторы объектов в файлах берутся из источника. Для переноса между чужими конфигурациями безопаснее объединение через .cf.
Обмен данными через XML и универсальные обработки
Когда структура в обеих базах одинаковая (две копии одной конфигурации одного релиза), данные переносятся без правил обмена.
Универсальная выгрузка и загрузка данных XML
Обработку «Выгрузка и загрузка данных XML» берут с диска ИТС или из комплекта инструментов разработчика. Порядок:
- Откройте исходную базу в режиме 1С:Предприятие.
- Запустите обработку через
Файл → Открыть. - На вкладке выгрузки отметьте объекты: справочник целиком или документы за период.
- Сохраните XML-файл.
- В целевой базе откройте ту же обработку и загрузите файл.
Обработка переносит ссылки по внутренним идентификаторам (GUID). Это плюс: связи между документами и справочниками не рвутся. Это и минус: если элемент уже есть в целевой базе с другим GUID, появится дубль.
Загрузка в режиме обмена данными записывает объекты без проверок заполнения и без перепроведения. Документы приедут с теми движениями, что были в источнике. Сверьте остатки по ключевым счетам до сдачи отчётности.
Полная копия через .dt
Если нужна вся база, обработки не нужны. В Конфигураторе исходной базы: Администрирование → Выгрузить информационную базу. В новой пустой базе: Администрирование → Загрузить информационную базу. Файл .dt содержит и конфигурацию, и данные, и пользователей.
Загрузка .dt полностью заменяет содержимое целевой базы. Не делайте её в рабочей базе с данными, которые жалко потерять.
Конвертация данных 2.0 для сложных миграций
Когда структуры баз различаются (например, самописная конфигурация и типовая), прямой перенос невозможен. Нужно описать соответствие: какой объект источника становится каким объектом приёмника и как заполняются поля.
Как устроена работа
- Разверните отдельную базу «Конвертация данных» редакции 2.0.
- Выгрузите структуру метаданных обеих конфигураций обработкой
MD82Exp.epf(входит в комплект КД 2.0) — получите два XML-файла. - Загрузите оба файла в базу конвертации и создайте новую конвертацию: источник → приёмник.
- Создайте правила конвертации объектов (ПКО) и правила выгрузки данных (ПВД). Мастер предложит сопоставление по одинаковым именам.
- Сохраните правила обмена в XML-файл.
- В исходной базе запустите обработку «Универсальный обмен данными в формате XML», укажите правила и выгрузите данные.
- В целевой базе той же обработкой загрузите файл.
Что настроить вручную
- 🔍 Поиск объектов. Задайте поля поиска: ИНН для контрагентов, код или артикул для номенклатуры. Без этого каждый запуск создаёт дубли.
- 🔁 Разные типы полей. Если в источнике единица измерения — строка, а в приёмнике — ссылка на справочник, напишите обработчик или правило конвертации значений.
- 🧾 Перечисления. Значения сопоставляются вручную, если имена не совпали.
Для типовых конфигураций на БСП существует Конвертация данных 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.