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




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

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

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

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

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

 

 

13 Comments

  1. asved.ru

    SELECT INTO? не, не слышал!

    Reply
  2. xast

    я взяла, по скриншотам очень заинтересовалась, тем более можно и под себя изменить. СПАСИБО.

    Reply
  3. madkat

    Кто понимает что делать с какой таблицей на sql сервреве, тот и средствами sql сервера перенесет таблицу.

    Reply
  4. DAnry

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

    Дело в том, что большинство таблиц в 1С как раз имеют связи с другим. Таким образом обработку можно рассматривать только как пример. Но все равно интересно.

    Reply
  5. Артано

    Согласен и с (3) и с (4) Обработка интересная по задумке, но прикладного применения не вижу. Операции непосредственно с таблицами выполняю обычно в консоли SQL

    Reply
  6. ixilimuse

    (1) asved.ru, Если честно не совсем понял что вы имели ввиду))) Если все же вы имели ввиду Insert into и скрипты для заливки данных — то это классика. Но bcp при больших объемах работает быстрее. По крайней мере нам так казалось при тестировании)) (нам — команде разработчиков)

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

    (4) DAnry, Оно понятно. Но дело в том что можно таким образом переносить и ряд таблиц. Хотя конечно действий больше придется совершить чем другими способами)

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

    Reply
  7. xten

    Автору Огромное Спасибо!!!!!!!!! Особенно помогла обработка при переносе КЛАДР! А что касается замечаний оппонентов по Select INTO, то не всегда все гладко проходит и если что-то криво перенесется, надо заново таблицы очищать и все снова делать, а это время. Все-таки, несмотря на совместную работу с 1с, MS SQL Server- это отдельная стихия. Так что обработка супер!!!

    Reply
  8. ixilimuse

    (7) xten, Благодарю за оценку 🙂 Рад что обработка Вам помогла)

    Reply
  9. AlexO

    (7) xten,

    Все-таки, несмотря на совместную работу с 1с, MS SQL Server- это отдельная стихия

    Это вообще другой мир, не связанный с 1С.

    (0)

    За счет того что используется утилита bcp.exe

    Она есть у всех?

    (0)

    что данная утилита переносит лишь данные одной конкретной таблицы

    Выгрузка и загрузка ОДНОЙ таблицы из одной SQL в другую аналогичную — весьма редкое и специфичное занятие.

    Вот кто-то КЛАДР переносил… как бы сказать.. ерундой занимались.

    Если очень крайне узкая задача — перенести РС там с миллионами записей туда-сюда, то да, подойдет. Но как перенос данных в 1С — категорически нет. Именно из-за ссылочной каши внутри базы 1С.

    Reply
  10. ixilimuse

    (9) AlexO, Совершенно верно, обработка написана для специфичных задач.

    И понятное дело что bcp.exe это утилита MS SQL’я, и что все это будет работать только при использовании MS SQL.

    Так что если будет надобность таскать кучу записей между тестовой базой и реальной базой, например для определенного регистра сведений, то возможно Вам это поможет. А возможно и нет =) Решать Вам. Я лишь предлагаю живой и работающий пример использования такого подхода) Любой желающий может это переделать под себя, и даже помимо одной таблицы, зацепить параллельно кучу других, на которые существуют ссылки в первой 😉

    Reply
  11. dyak84

    Автор обработка хороша нет слов. Вот если бы была возможность отобрать например по организации тогдаб вообще б цены не было.Или хотя бы подскажите как зделать такой отбор. Зарание спасибо за ответ?????

    Reply
  12. ixilimuse

    (11) dyak84, здравствуйте) Очень рад что публикации по данной теме оказались кому-то полезными.

    На сколько я помню в данной обработке реализована возможность производить отбор. По любому полю. Если не ошибаюсь в масетере это Шаг №3. Нажимаете кнопку «Установить отбор». Откроется дополнительная форма. В ней Вы можете установить отбор для любого поля которое имеется в таблице которую Вы собираете выгрузить из базы. В том числе отборы работают и для ссылочных типов.

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



    Причем прошу обратить внимание, что когда Вы будете загружать выгруженные данные на другую базу, они загрузятся с учетом отбора.

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

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

    Reply
  13. dyak84

    (12)Cпасибо за оперативный ответ на выходных, скачаю обработку и разберусь что да как работает.по результату отпишусь

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *