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

17.01.22

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Генератор SQL скрипта для переноса данных:
.epf 10,00Kb ver:1.0
8
8 Скачать (1 SM) Купить за 1 850 руб.

Дано:

 - база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 перенос данных

См. также

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

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

15500 руб.

02.09.2020    177931    988    403    

945

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

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку одновременно в несколько потоков. А так же автоматически, без непосредственного участия пользователя. Решение в Реестре отечественного ПО

8400 руб.

20.08.2024    19415    131    70    

131

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

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

22200 руб.

06.10.2023    18813    50    19    

82

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

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

15000 руб.

10.11.2023    12838    53    33    

72

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

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки.

9360 руб.

17.05.2024    28990    100    48    

146

Инструментарий разработчика Программист 8.3.14 Россия Платные (руб)

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

20000 руб.

07.10.2021    18647    7    32    

43

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

Разработка Конструктор автоматизированных рабочих мест "Конструктор АРМ" реализована в виде расширения и является универсальным инструментом для создания АРМ любой сложности в пользовательском режиме.

3600 руб.

27.12.2024    1736    2    0    

5
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. SerVer1C 876 17.01.22 10:45 Сейчас в теме
"...у базы1 и у базы2 конфигурации одинаковы..." ~~~ "...для составных типов поля "_Fld...TYPE" отличаются..."
что-то тут не чисто
2. info1i 239 17.01.22 11:05 Сейчас в теме
(1) Попробуйте создать новую пустую базу и загрузите в нее конфигурацию из другой базы, после зайдите на СУБД и проверьте имена таблиц, полей, типы составных реквизитов - станет понятно.
3. SerVer1C 876 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 876 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 239 17.01.22 13:15 Сейчас в теме
(7) Да, верно, именно в данном случае стопор.
9. werd00 17.01.22 13:56 Сейчас в теме
(8) ну здесь могу только предложить выгружать типы вместе со структурой, а при генерации скрипта сделать конструкцию вида case when .. then../ но это , наверное, несколько громоздко будет. подмены на каждый вид справочника и документа.
10. SerVer1C 876 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 14 18.01.22 08:19 Сейчас в теме
Можно и так. Но я бы решил такую задачу через CREATE VIEW для каждой БД
13. user1203706 15 18.01.22 20:07 Сейчас в теме
(0) Для большой базы, в разы быстрее делать перенос не через select into, а через выгрузку в файлы в скуле и дальше загрузку из файлов. Там используется булк инсерт.
А то что у вас...можно ожидать неделями, для большой базы
14. info1i 239 18.01.22 20:41 Сейчас в теме
(13) Это да, согласен. Однако Bulk insert имеет свои ограничения и минусы.
16. werd00 19.01.22 07:59 Сейчас в теме
(13) А для вас "большая база" это сколько? Если не секрет.
Из личного опыты: подобный механизм работал меньше часа, База 35 гб, примерно 1300 таблиц.И это не самый шустрый сервер - проц I5-8500 , 32гб ОЗУ.
15. user1203706 15 18.01.22 21:29 Сейчас в теме
(14) Для данной задачи, ограничений нема.
17. user1203706 15 19.01.22 09:32 Сейчас в теме
(16) Перенос одного РС, 250 млн записей, способом из 0 занял сутки. Через булку, менее полчаса.

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

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

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

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

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