Генератор 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    126109    683    389    

736

Infostart PrintWizard - создание и редактирование печатных форм в 1С 8.3

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

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

18000 руб.

06.10.2023    8202    24    6    

44

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

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

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

10000 руб.

10.11.2023    4578    12    2    

38

SALE! %

PowerTools

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

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

3600 2280 руб.

14.01.2013    178791    1084    0    

862

Бустер Конвертации данных 3 (Infostart Toolkit)

Инструментарий разработчика 8.3.14 1С:Конвертация данных Россия Платные (руб)

Расширение для конфигурации “Конвертация данных 3”. Добавляет подсветку синтаксиса, детальную контекстную подсказку, глобальный поиск по коду.

15000 руб.

07.10.2021    15055    3    12    

37

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

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

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

5000 руб.

07.02.2018    99733    239    97    

298

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

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

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

2040 руб.

27.12.2017    28384    4    10    

16

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

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

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

3000 руб.

27.08.2019    18469    6    8    

40
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. SerVer1C 756 17.01.22 10:45 Сейчас в теме
"...у базы1 и у базы2 конфигурации одинаковы..." ~~~ "...для составных типов поля "_Fld...TYPE" отличаются..."
что-то тут не чисто
2. info1i 223 17.01.22 11:05 Сейчас в теме
(1) Попробуйте создать новую пустую базу и загрузите в нее конфигурацию из другой базы, после зайдите на СУБД и проверьте имена таблиц, полей, типы составных реквизитов - станет понятно.
3. SerVer1C 756 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 756 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 756 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 Ответить
Оставьте свое сообщение