Генератор SQL скрипта для переноса данных

17.01.22

Разработка - Инструментарий разработчика

Обработка, генерирующая SQL скрипт для переноса данных между базами 1С с одинаковыми конфигурациями, но с разными именами таблиц и полей SQL.

Скачать исходный код

Наименование Файл Версия Размер
Генератор SQL скрипта для переноса данных:
.epf 10,00Kb
6
.epf 1.0 10,00Kb 6 Скачать

Дано:

 - база1 с многолетней историей, размер базы около 300 Гб;

 - база2 пустая, с некоторыми выполненными настройками;

 - у базы1 и у базы2 конфигурации одинаковы, но на уровне СУБД имена таблиц и полей разные (база2 создавалась с нуля загрузкой конфигурации);
 - база1 и база2 находятся на одном сервере на одной и той же СУБД MSSQL Server.

Задача: максимально быстро перенести выбранные данные из базы1 в базу2, много даннных, много таблиц; выгрузка-загрузка dt исключена из рассмотрения.

Варианты

Вариант решения с путем универсальной выгрузки/загрузки слишком долгий и высок риск падения - так оно и происходило.

Вариант путем обработки "Выгрузка в сервис"/"Загрузка из сервиса" (Fresh) является решением, но слишком долгим.

Пришлось попробовать перенести данные напрямую через SQL, для чего написана обработка, которая генерирует скрипт SQL, копирующий данные из базы1 в базу2.

Порядок работы с обработкой

1) В базе1 и в базе2 на закладке "Сохранение структуры" указываем путь для сохранения структуры хранения данных (имена таблиц, имена полей) и жмем "Сохранить структуру".


 

2) В любой базе на закладке "Генерация скрипта" заполняем поля "Имя базы1", "Имя базы2", указываем ранее сохраненные файлы из шага (1), путь к файлу сохранения скрипта. Жмем кнопку "Сгенерировать скрипт".


 

3) В среде MS SQL Server Management Studio открываем сгенерированный скрипт, редактируем (удаляем лишнее) и запускаем.


 

Скрипт гененируется для MSSQL Server, но можно доработать и для PosgreSQL.

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

Обработка тестировалась на платформе 8.3.18.1616 на конфигурации "Управление холдингом, редакция 3.1.14.26".

обработка скрипт генератор SQL перенос данных

См. также

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    124803    682    389    

732

Infostart PrintWizard

Пакетная печать Печатные формы Инструментарий разработчика Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

18000 руб.

06.10.2023    7752    24    6    

42

Infostart УДиФ: Управление данными и формами

Инструменты администратора БД Инструментарий разработчика Роли и права Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

10000 руб.

10.11.2023    4264    12    2    

36

SALE! %

PowerTools

Инструментарий разработчика Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

3600 2280 руб.

14.01.2013    178620    1083    0    

861

Многопоточность. Универсальный «Менеджер потоков» 2.1

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    99603    239    97    

298

[ЕХТ] Фреймворк для Расширений 1С

Инструментарий разработчика Платформа 1С v8.3 Управляемые формы Платные (руб)

"Фреймворк для Расширений 1С" это универсальное и многофункциональное решение, упрощающее разработку и поддержку создаваемых Расширений. Поставляется в виде комплекта из нескольких Расширений с открытым исходным кодом. Работает в любых Конфигурациях в режиме Управляемого приложения с режимом совместимости 8.3.12 и выше без необходимости внесения изменений в Конфигурацию.

3000 руб.

27.08.2019    18375    6    8    

40

Выполнение произвольного кода или запроса с параметрами через Web-сервис (замена COM-подключений)

Инструментарий разработчика Обмен между базами 1C Платформа 1С v8.3 Платные (руб)

В процессе работы в 1С часто возникает потребность получить данные из другой базы.  Обычно это делается через COM-соединение, и время выполнения запроса при этом оставляет желать лучшего. В данной публикации представлено универсальное решение, позволяющее практически моментально выполнить произвольный код или запрос с параметрами в другой информационной базе через Web-сервис.

2400 руб.

24.09.2019    23853    16    15    

33

1С HTML Шаблоны / HTML Templates

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Быстрая и удобная обработка для работы с шаблонами HTML. Позволяет легко и быстро формировать код HTML.

2040 руб.

27.12.2017    28308    3    10    

16
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. SerVer1C 750 17.01.22 10:45 Сейчас в теме
"...у базы1 и у базы2 конфигурации одинаковы..." ~~~ "...для составных типов поля "_Fld...TYPE" отличаются..."
что-то тут не чисто
+
2. info1i 223 17.01.22 11:05 Сейчас в теме
(1) Попробуйте создать новую пустую базу и загрузите в нее конфигурацию из другой базы, после зайдите на СУБД и проверьте имена таблиц, полей, типы составных реквизитов - станет понятно.
NeLenin; +1
3. SerVer1C 750 17.01.22 11:41 Сейчас в теме
(2) у меня совпало, ЧЯДНТ ?
поле _Fld{X}_TYPE всегда binary(1)
поле _Fld{X}_RTRef всегда binary(4)
поле _Fld{X}_RRRef всегда binary(16)
+
4. werd00 17.01.22 12:16 Сейчас в теме
(3) Базы с разной структурой имеют разные названия полей. Автор по имени объекта метаданных пытается их сопоставить. когда на один реквизит попадает насколько имен полей( в случае составного типа) не совсем понятно как их сопоставлять для скрипта переноса. (я руками прописывал такие исключения). Например для реквизита1 есть поля _Fld2_TYPE,_Fld2_S и т д. а в базе 2 они имеют названия _Fld5_TYPE, _Fld5_S. и точного соответствия, что _Fld2_TYPE должен переходить в _Fld5_TYPE - нет.

а про поля автор писал, "составных типов", а не типы колонок sql
user1927014; +1
5. SerVer1C 750 17.01.22 12:31 Сейчас в теме
(4) Так вы же понимаете, что несоставное поле А переходит в несоставное поле Б. И тут аналогично. У составного поля в эске есть 3 поля в скуле. Номера в имени скульного поля у них одинаковы, например, _Fld12345_TYPE, _Fld12345_RTRef, _Fld12345_RRRef
+
6. werd00 17.01.22 12:41 Сейчас в теме
(5) не совсем так. условно есть реквизит1 у справочника1. реквизит простой. поэтому можно сопоставить на 100%
что поле _Fld1 - ,будет у одноименного реквизита в базе 2 - _Fld5 ( к примеру). это можно получить сравнивая таблицу хранения данных. В случае составного типа, у вас для реквизита 1 будет несколько полей. и надо поле *_TYPE" одной базы, сопоставить с полем "*_TYPE" другой базы. При этом имя поля у них одинаковое.
Прикрепленные файлы:
+
7. werd00 17.01.22 12:49 Сейчас в теме
(5) а вторая проблема в типами. это то что документ1 имеет тип 0x000002B3 (к примеру) , в вот одноименный документ в другой базе имеет тип 0x000002С5. и при переносе надо учитывать это, и вставлять не 0x000002B3 , а 0x000002С5
SerVer1C; info1i; +2
8. info1i 223 17.01.22 13:15 Сейчас в теме
(7) Да, верно, именно в данном случае стопор.
+
9. werd00 17.01.22 13:56 Сейчас в теме
(8) ну здесь могу только предложить выгружать типы вместе со структурой, а при генерации скрипта сделать конструкцию вида case when .. then../ но это , наверное, несколько громоздко будет. подмены на каждый вид справочника и документа.
+
10. SerVer1C 750 17.01.22 15:27 Сейчас в теме
(8) Не вижу в этом проблем. Мы однозначно можем определить, что тип, например, 0xDEADBEEF - это Док.А, и в другой базе подставим свой 0xCAFEBABE
+
11. werd00 18.01.22 06:27 Сейчас в теме
(10) Ну никто и не говорил, что это нерешаемая проблема:)
+
19. пользователь 24.03.23 14:00
Сообщение было скрыто модератором.
...
18. пользователь 24.03.23 13:57
Сообщение было скрыто модератором.
...
12. NeLenin 13 18.01.22 08:19 Сейчас в теме
Можно и так. Но я бы решил такую задачу через CREATE VIEW для каждой БД
+
13. user1203706 13 18.01.22 20:07 Сейчас в теме
(0) Для большой базы, в разы быстрее делать перенос не через select into, а через выгрузку в файлы в скуле и дальше загрузку из файлов. Там используется булк инсерт.
А то что у вас...можно ожидать неделями, для большой базы
+
14. info1i 223 18.01.22 20:41 Сейчас в теме
(13) Это да, согласен. Однако Bulk insert имеет свои ограничения и минусы.
+
16. werd00 19.01.22 07:59 Сейчас в теме
(13) А для вас "большая база" это сколько? Если не секрет.
Из личного опыты: подобный механизм работал меньше часа, База 35 гб, примерно 1300 таблиц.И это не самый шустрый сервер - проц I5-8500 , 32гб ОЗУ.
+
15. user1203706 13 18.01.22 21:29 Сейчас в теме
(14) Для данной задачи, ограничений нема.
17. user1203706 13 19.01.22 09:32 Сейчас в теме
(16) Перенос одного РС, 250 млн записей, способом из 0 занял сутки. Через булку, менее полчаса.

(1) Хотя бы воткни truncate table , заместо delete
+воткни фильтры на объекты метаданных при выгрузке.

Как потом в простынке получившегося скрипта из тыщи таблиц удалять/искать нужные, если нужны не все ?

+Твой код, учитывает расширения ? Когда данные будут в табличка с суффиксом X ?

+не ясна цель такого переноса, в пустую базу (ты же всё равно данные в ней прибиваешь, судя по delete) ?

когда проще поднять архив источника.
SerVer1C; +1
Оставьте свое сообщение