gifts2017

Универсальный обмен данными (MS SQL, bcp)

Опубликовал Евгений Мукомело (ixilimuse) в раздел Обмен - Перенос данных из 1C8 в 1C8

Обработка позволяет выгружать из базы данных (1C + MS SQL) отдельно взятые таблицы. Данные сохраняются в файл. Выгруженные данные можно загрузить в другую аналогичную базу. Обработка подойдет не для всех ситуаций где нужен обмен данными. Написана для разработчиков, которым в процессе разработки и отладки необходимо переносить какие-то данные из базы в базу. За счет того что используется утилита bcp.exe, обработка позволяет довольно быстро выгружать и загружать, большие объемы данных. Тестировалась на регистре сведений объемом в 3 млн. записей.

Данная обработка позволяет быстро переносить объемные таблицы с данными из одной базы в другую. Например загружать актуальные данные из рабочей базы в тестовую, где ведется разработка. Для загрузки и выгрузки данных используется стандартная утилита Microsoft Bulk Copy Program (bcp).

Но важно понимать, что данная утилита переносит лишь данные одной конкретной таблицы. А если речь идет о переносе нескольких таблиц, между которыми существуют ссылки и зависимости, в таком случае, утилита может не подойти. Либо придется переносить все таблицы поочередно. И важно что бы структура таблиц в разных базах - была одинаковой.

Так же, важно знать что обработка перед загрузкой данных в таблицу из файла, полностью удаляет все существующие записи в базе приемнике, с учетом установленного отбора. То есть, при выгрузке данных мы можем установить отбор. При загрузке этот же самый отбор будет использоваться при удалении старых данных и загрузки новых. Но при необходимости обработку можно изменить под свои нужды. 

Интерфейс обработки построен в виде пошагового мастера.

 

 

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Обмен данными MSSQL (bcp)
.epf 28,18Kb
26.11.13
33
.epf 1.1 28,18Kb 33 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Антон Стеклов (asved.ru) 27.11.13 07:41
2. Ирина (xast) 27.11.13 13:06
я взяла, по скриншотам очень заинтересовалась, тем более можно и под себя изменить. СПАСИБО.
3. Юрий (madkat) 27.11.13 14:53
Кто понимает что делать с какой таблицей на sql сервреве, тот и средствами sql сервера перенесет таблицу.
Артано; +1 Ответить 1
4. DAnry (DAnry) 27.11.13 19:02
Ключевым тут я считаю фразу: "Но важно понимать, что данная утилита переносит лишь данные одной конкретной таблицы. А если речь идет о переносе нескольких таблиц, между которыми существуют ссылки и зависимости, в таком случае, утилита может не подойти. Либо придется переносить все таблицы поочередно. И важно что бы структура таблиц в разных базах - была одинаковой."
Дело в том, что большинство таблиц в 1С как раз имеют связи с другим. Таким образом обработку можно рассматривать только как пример. Но все равно интересно.
5. Артано Майаров (Артано) 28.11.13 07:06
Согласен и с (3) и с (4) Обработка интересная по задумке, но прикладного применения не вижу. Операции непосредственно с таблицами выполняю обычно в консоли SQL
6. Евгений Мукомело (ixilimuse) 28.11.13 13:33
(1) asved.ru, Если честно не совсем понял что вы имели ввиду))) Если все же вы имели ввиду Insert into и скрипты для заливки данных - то это классика. Но bcp при больших объемах работает быстрее. По крайней мере нам так казалось при тестировании)) (нам - команде разработчиков)

(2) xast, пожалуйста))

(4) DAnry, Оно понятно. Но дело в том что можно таким образом переносить и ряд таблиц. Хотя конечно действий больше придется совершить чем другими способами)
Нам же данный инструмент нужен был для переноса одного единственного регистра сведений. Конечно он содержал в себе ссылки на другие таблицы. Но в нашем случае менялось содержимое регистра. А содержимое таблиц куда вели ссылки хранимые в регистре - не менялось. Регистр был мягко говоря пухлым, поэтому важна была скорость перезаливки данных с боевой базы в тестовую. Но глобально - согласен. Инструмент - специфичен, для специфичных задач.
7. Сергей Иванов (xten) 05.03.14 13:00
Автору Огромное Спасибо!!!!!!!!! Особенно помогла обработка при переносе КЛАДР! А что касается замечаний оппонентов по Select INTO, то не всегда все гладко проходит и если что-то криво перенесется, надо заново таблицы очищать и все снова делать, а это время. Все-таки, несмотря на совместную работу с 1с, MS SQL Server- это отдельная стихия. Так что обработка супер!!!
8. Евгений Мукомело (ixilimuse) 05.03.14 13:10
(7) xten, Благодарю за оценку :) Рад что обработка Вам помогла)
9. Алекс Ю (AlexO) 17.06.14 12:11
(7) xten,
Все-таки, несмотря на совместную работу с 1с, MS SQL Server- это отдельная стихия

Это вообще другой мир, не связанный с 1С.
(0)
За счет того что используется утилита bcp.exe

Она есть у всех?
(0)
что данная утилита переносит лишь данные одной конкретной таблицы

Выгрузка и загрузка ОДНОЙ таблицы из одной SQL в другую аналогичную - весьма редкое и специфичное занятие.
Вот кто-то КЛАДР переносил... как бы сказать.. ерундой занимались.
Если очень крайне узкая задача - перенести РС там с миллионами записей туда-сюда, то да, подойдет. Но как перенос данных в 1С - категорически нет. Именно из-за ссылочной каши внутри базы 1С.
10. Евгений Мукомело (ixilimuse) 17.06.14 12:39
(9) AlexO, Совершенно верно, обработка написана для специфичных задач.
И понятное дело что bcp.exe это утилита MS SQL'я, и что все это будет работать только при использовании MS SQL.

Так что если будет надобность таскать кучу записей между тестовой базой и реальной базой, например для определенного регистра сведений, то возможно Вам это поможет. А возможно и нет =) Решать Вам. Я лишь предлагаю живой и работающий пример использования такого подхода) Любой желающий может это переделать под себя, и даже помимо одной таблицы, зацепить параллельно кучу других, на которые существуют ссылки в первой ;)
11. andrey dyak (dyak84) 30.01.15 12:33
Автор обработка хороша нет слов. Вот если бы была возможность отобрать например по организации тогдаб вообще б цены не было.Или хотя бы подскажите как зделать такой отбор. Зарание спасибо за ответ?????
12. Евгений Мукомело (ixilimuse) 30.01.15 13:15
(11) dyak84, здравствуйте) Очень рад что публикации по данной теме оказались кому-то полезными.

На сколько я помню в данной обработке реализована возможность производить отбор. По любому полю. Если не ошибаюсь в масетере это Шаг №3. Нажимаете кнопку "Установить отбор". Откроется дополнительная форма. В ней Вы можете установить отбор для любого поля которое имеется в таблице которую Вы собираете выгрузить из базы. В том числе отборы работают и для ссылочных типов.
Потом на шаге №4 Вы увидите как Ваш отбор преобразован уже в MS SQLый запрос. И вместо представления 1С Вы увидите в условии GUID на элемент справочника по которому Вы сделали отбор. На фотках пример такого отбора:



Причем прошу обратить внимание, что когда Вы будете загружать выгруженные данные на другую базу, они загрузятся с учетом отбора.
То есть если отбора нет - таблица приемник сначала полностью очищается, затем в неё загружаются данные из файла.
Если отбор есть, то в таблице приемнике удаляются все записи с учетом отбора. Например записи ссылающиеся на какого-то контрагента. И затем загружаются записи из файла.
13. andrey dyak (dyak84) 30.01.15 18:40
(12)Cпасибо за оперативный ответ на выходных, скачаю обработку и разберусь что да как работает.по результату отпишусь
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа