gifts2017

Полный перенос данных между идентичными базами (xml-сериализация)

Опубликовал Николай Зайков (Mortiferus) в раздел Обмен - Обмен через XML

Универсальная обработка для переноса данных между идентичными базами, используя xml-сериализацию

Ранее я уже приводил пример обработки переноса бухгалтерских проводок из одной базы в другую. Теперь выкладываю обработку для полного переноса данных - кому-нибудь да пригодится.

Основной плюс обработки - ее универсальность, т.е. работать будет на любой конфигурации, никаких правил переноса создавать не надо. 1С сама знает, по каким правилам записывать объекты и, соответственно, считывать.

Объекты, которые могут переноситься:

  • Константы
  • Справочники
  • Документы
  • Регистры сведений
  • Регистры накопления
  • Регистры бухгалтерии
  • Регистры расчета
  • Планы видов характеристик
  • Планы видов расчета
  • Планы счетов

т.е. практически все, что нужно для нормальной работы. Перенос происходит через промежуточные xml-файлы, для каждого типа объекта - свой файл. Это сделано для того, чтобы не произошло переполнения оперативной памяти при переносе больших баз.

(В частности у меня при переносе данных в бухгалтерии память "наелась" на регистре сведений "Адресный классификатор", поэтому я отключил его перенос. Слава богу, его можно заполнить в любое время).

При выгрузке данных помечаем объекты, которые хотим перенести, указываем каталог выгрузки:

 Выгрузка

 При загрузке в базу-приемник (должна иметь идентичную конфигурацию с базой-источником) также выбираем каталог загрузки и после обновления видим загружаемые файлы, из которых можем выбрать нужные:

 Загрузка

 Для того, чтобы объекты записывались в базу в любом случае, используется конструкция:

ЗагружаемыйОбъект.ОбменДанными.Загрузка = Истина;

соответственно в модулях таких объектов в процедуре ПередЗаписью() должно быть что-то типа:

Если ОбменДанными.Загрузка Тогда
      Возврат;
КонецЕсли;

чтобы пропустить возможные механизмы проверки на заполненность и/или корректность реквизитов объекта и т.п. В стандартных процедурах это уже, как правило, предусмотрено (это обеспечивает запись объектов при переносе из распределенных баз), для "своих" объектов это необходимо учесть.

 Проверено на Бухгалтерии 2.0 последнего релиза (2.0.49.15).

05.09.2013 - перезалил файл, поскольку при переносе данных в УТ 10 произошла ошибка, связанная с тем, что одно из измерений (или реквизитов) в одном из регистров сведений называлось "Регистр".

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

Наименование Файл Версия Размер
Полный перенос данных 669
.epf 11,65Kb
03.06.15
669
.epf 11,65Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Сергей Сытько (8SiriuS8) 16.07.13 21:06
(0) Молодец. Люблю такие инструменты. В хозяйстве пригодится
2. m-serg74 (m-serg74) 16.07.13 21:29
Подправлено, а то вылетает на запросах к регистрам.

Извиняюсь... убрал обработку, а то автору наверное не приятно будет, что все кому не лень будут выложенную мной, а на самом деле его разработку качать...
3. Алексей (alsoftik) 17.07.13 06:42
Отлично проверим, а то постоянно для этих целей, приходится писать заново правила переноса
через конвертацию данных, а до написания универсальной никак руки не доходят, в общем спс.
4. Александр Крынецкий (echo77) 17.07.13 06:48
(3) На хера писать правила? ВыгрузукаЗагрузкаДанныхXML вам поможет. Использование планов обмена тоже позволяет решить эту задачу
(0) Николай, пользуйтесь уже готовыми инструментами :-) Все же есть, зачем что-то еще писать?
Светлый ум; +1 Ответить
5. Николай Зайков (Mortiferus) 17.07.13 07:23
echo77 ВыгрузкаЗагрузкаДанныхXML сама по определенным правилам работает (насколько я знаю) и лично я неоднократно при ее использовании натыкался на всякие ошибочные сообщения или просто некорректную работу когда хотел "по-быстрому" что-нибудь перекинуть(навскидку помню проблему с переносом единиц измерения в УТ - может, конечно сейчас она уже и решена, не знаю, лень проверять). Прелесть же моей методы (извиняюсь за нескромные эпитеты) в том, что написана она один раз и навсегда - и переносит все подчистую (даже картинки), на любых конфах. Со временем в ней ничего не придется менять - только разве 1С еще придумает какие-то новые объекты. Ну и последнее, любое такое написание своих продуктов развивает творческую мысль, и я точно знаю что она может, а что не может - мне это важно, поскольку я обслуживаю многих клиентов.
1С большой респект за такие мегавещи, как та же ВыгрузкаЗагрузкаДанныхXML или ПоискИЗаменаЗначений или что-то в этом роде и вовсе не умаляю их значения - периодически ими пользуюсь, они сильно облегчают нашу нелегкую жизнь программистов. Но все-таки мне кажется, что чтобы стать "профи", нужно больше своими руками и своей головой работать, а не использовать "черные ящики" и не быть зависимым от них (никто ведь ошибок не исключал даже в этих казалось бы проверенных временем "мегавещах", верно?).
kostyaomsk; Roman24; Designer1C; mdzen; POLGA; Азбука Морзе; +6 5 Ответить 3
6. Наталья Рома (Naton) 17.07.13 07:54
(5) Mortiferus,
Подскажите, а для 1.6 данный перенос будет работать?
7. Николай Зайков (Mortiferus) 17.07.13 08:17
Naton Да, будет. Обработка универсальна. Если только она у вас дописана, проверьте на предмет записи объектов в базу, как я писал в тексте, чтобы при установке свойства объекта ЗагружаемыйОбъект.ОбменДанными.Загрузка = Истина пропускались проверки при записи. Либо на худой конец дважды прогоните загрузку, если напишет сообщения ошибок записи.
8. Oberonm (oberonm) 17.07.13 08:37
(4) Может набивка статы?
(5) При работе Универсальной не используются правила. обычная сериализация
Светлый ум; ZUL_MTFKA; MartyNSK; iceflash; echo77; +5 Ответить
9. Алексей Масалыгин (CnupT) 17.07.13 09:25
Поддерживаю oberonm. Стандартная ВыгрузкаЗагрузкаДанныхXML не использует правила обмена, работает на любых конфигурациях, проверена тысячами пользователей. Обработка, описанная в данной статье смысла не имеет.
Разве что для автора, как средство повышения навыков работы с 1С
Светлый ум; ZUL_MTFKA; suggestive; PowerBoy; iceflash; +5 Ответить
10. Алексей Масалыгин (CnupT) 17.07.13 09:27
(5) Mortiferus, вы уж меня извините, но

(никто ведь ошибок не исключал даже в этих казалось бы проверенных временем "мегавещах", верно?).

Вероятность ошибки в Вашей обработке в разы больше :)
11. Николай Зайков (Mortiferus) 17.07.13 10:16
СпирТ Возможно я отстал от жизни, и Универсальная действительно стала так работать, а я не знаю этого - всегда считал, что для нее сначала надо создать правила выгрузки/загрузки. Ну что ж, может быть и так. Не успеваю следить за всеми новшествами, и на диск ИТС заглядываю очень редко, пардонес...
12. Oberonm (oberonm) 17.07.13 10:51
(11) Она всегда работала так. А вот обработка "Универсальный обмен данными XML" требует правил и всегда требовала.
А знать типовые обработки обязан знать каждый разработчик 1С
zqzq; krylovim; +2 Ответить
13. Эдуард Зелинский (VasMart) 17.07.13 10:54
Лучше заглядывайте на ИТС. Когда поскольку я обслуживаю многих клиентов время на академические велосипеды терять, имхо, не стоит.
iceflash; echo77; +2 Ответить 1
14. Николай Зайков (Mortiferus) 17.07.13 10:59
oberonm Пардон, я спутал - думал, что речь идет именно об Универсальном обмене данными. А об Универсальной выгрузке/загрузке и не вспомнил, никогда не пользовал ее. Возможно и пользовал, да в нужный момент не вспомнил.
15. Николай Зайков (Mortiferus) 17.07.13 11:07
(13) VasMart, спасибо, учту ваши пожелания. Буду почаще заглядывать на ИТС, чтоб не тратить свое драгоценное время (коего по 8 с лишним часов с пндл по птн) на изобретение велосипедов. Клянусь - не реже раза в полгода! Может быть.
16. vicmos victor (vicmos) 17.07.13 13:37
Есть обработка Обработка ВыгрузкаЗагрузкаДанныхXML82 в поставке Конвертации данных, функционал по богаче будет
17. Александр Крынецкий (echo77) 17.07.13 16:35
(5) Эта штука работает БЕЗ правил. Тупо сериализация объектов 1С.
Если вы сделаете возможность выгружать по определенному критерию отбора - это будет уже лучше.
ВыгрузкаЗагрузкаДанныхXML лажает, если структура данные не идентичная : отсуствие одного реквизита или изменение порядка реквизитов приводят к фатальной ошибке - это да

p.s. no offence, мы тут просто ставим твою обработку в центре внимания :-)
18. Павел Опарин (opx) 17.07.13 16:38
(0) Сделал обработку на основании Вашей. Добавил возможность отбора. Можете посмотреть тут: http://infostart.ru/public/194652/
19. Николай Зайков (Mortiferus) 17.07.13 19:11
(17) echo77, да я не в обиде! Сам не ожидал такого пристального внимания к простенькой по моему мнению вещи. А судя по скачиваниям - вещь-то оказалась востребована. Приятно. Ну а то что чего-то я не знаю, так чего тут комплексовать, не знал, теперь знаю (спасибо за подсказку) - на то ведь и форум, чтоб чего-то узнавать самому, учиться у умных людей, ну и самому делиться опытом. Для меня лично механизм xml-сериализации показался очень интересным, перспективным, потому и рассказал другим.
20. Данила Елистратов (CagoBHuK) 18.07.13 10:58
А чем не нравится конвертация данных типовая?
21. Алексей Рябцев (okref) 18.07.13 11:09
Мне кажется - штука полезная.
А конвертация данных данных это все-таки инструмент для более вдумчивого и интеллектуального переноса.
Здесь же видимо старались сделать как-можно проще и быстрее.
22. С К (Gauss) 18.07.13 15:21
Есть ли возможность переноса с отбором по объектам, зарегистрированных на узле плана обмена?
23. Николай Зайков (Mortiferus) 18.07.13 15:30
(22) Gauss, нет. И не планировал, поскольку обработка решала сугубо локальную задачу - перенести тупо "все".
24. zavsom1 zavsomovich (zavsom) 18.07.13 15:49
25. Николай Зайков (Mortiferus) 18.07.13 16:01
26. Сергей Маслов (LexSeIch) 18.07.13 17:41
Мир этому дому!
Обработка интересная и она уже породила клонов (http://infostart.ru/public/194652/)с дополнительными возможностями, и видимо, это еще не окончательный вариант. Я плюсанул автору, но скачал клон, так как c дополнительным отбором функционал интересней. Например, с ее помощью планирую, например, восстанавливать из бэкапа случайно удаленные документы. Автору спасибо.
27. Николай Зайков (Mortiferus) 18.07.13 17:48
(26) LexSeIch, Спасибо на добром слове!
28. Dmitry Malyshev (SaperVodichka) 19.07.13 10:46
Коллеги, погуглите ВыгрузкаЗагрузкаДанныхXML.epf
29. Denis Shlyakhtin (Driver_Com) 19.07.13 10:56
Обработка работает как часы. Спасибо автору.
30. Николай Зайков (Mortiferus) 19.07.13 11:05
(28) SaperVodichka, погуглить не проблема. Главное в моей статье вовсе не сама обработка (т.е. что она делает) - ничего особенного в ней нет, а то, что показано, как легко и просто работать с xml-сериализацией. То, что для меня ранее было сакрально-мистическим понятием, оказалось довольно простой, удобной и мощной штукой. Вот я и делюсь своим опытом и привожу всего лишь пример (не больше того), как ею пользоваться. А уж как самим этим знанием воспользоваться - может возникнуть масса вариантов, даже не хочется приводить примеры, их масса...
Зацените сам механизм, а не то, что делает обработка! Не все ведь такие умные и не родились со знанием как работает какая-то там "xml-сериализация"!
31. Dmitry Malyshev (SaperVodichka) 19.07.13 11:43
(30) Mortiferus, понял тебя. Пойми ход моей мысли: спец выкладывает обработку универсальный механизм переноса XML с сериализацией. Ребята думают, что это какой-то прорыв в переносе данных, лайкают спасибо, будут пользоваться. Знают они что все уже давно есть - не знаю. Назови ты - это пример использования сериализации XML - дай ссылку на типовую обработку переноса и нет вопросов. Типа учитесь сериализации как я.
32. Николай Зайков (Mortiferus) 19.07.13 12:05
(31) SaperVodichka, и я тебя понял. Одна из первых моих публикаций здесь, потому возможно и не так назвал. Рецензоров-то нет, подсказать некому, только постфактум по комментариям. И потом - кого ж я в заблуждение ввожу - качают, значит надо, и ни про какой "прорыв" я ни слова не пишу вроде. Продукт на 100% моего собственного изготовления, так что никакого дисбаланса душевного я не испытываю, несмотря на то, что уже есть подобное. Есть - ну и пусть, а вот это мое. Не нравится - не берите, не навязываю.
33. evgen1977 (musatov1c.ru) 29.07.13 07:24
У меня все выходные была работа под аналогичную обработку. Все это время использовал более старые варианты, которые использовали один общий файл обмена, что сильно усложняет анализ. После двух дней возни могу сразу оценить разделение на отдельные файлы по конкретному справочнику. Очень хорошая и свежая мысль, спасибо. Возможно еще воспользуюсь.
34. ZLENKO.PRO (ZLENKO) 29.07.13 18:02
Попробуйте как круто работает сериализация в механизмах XDTO - я "прозрел" от скорости сериализации. С десериализацией помедленнее но тоже весьма впечатляет. Надо бы свой механизм обмена через XDTO довести до универсальной обработки обмена между "похожими" конфигурациями.
35. Максим Зудин (kasper076) 30.07.13 15:33
(34) ZLENKO.PRO, если объекты не идентичны, то десериализация не произойдет. А если писать обработку заполнения реквизитов в базе приемнике, то теряется смысл сериализации.
36. ZLENKO.PRO (ZLENKO) 30.07.13 15:50
(35) kasper076, Зачем писать обработку если есть замечательный метод ЗаполнитьЗначенияСвойств(<Приемник>, <Источник>, <СписокСвойств>, <ИсключаяСвойства>) ? Но работать будет конечно только для одинаковых или "похожих" конфигураций. Я делал обмен между УПП и Розница - структура документов и справочников практически идентична.
Смысл в сериализации через XDTO в скорости - сериализация документа с десятками тысяч строк занимает доли секунды! Т.к. любой метод реализованный на уровне платформы работает на порядки быстрее чем алгоритм реализованный в коде конфигурации.
По поводу десериализации в другой базе - надо подставлять правильную схему (схему из базы источника) и по ней делать десериализацию. А потом из десериализованного объекта "перелить" значения в объект базы-приемника через ЗаполнитьЗначенияСвойств.
37. Максим Зудин (kasper076) 01.08.13 07:09
(36) ZLENKO.PRO, если использовать XDTO (XSD) схему конфигурации источника, то она слишком громоздка и нет удобных инструментов для работы с ней. Если писать свою схему, то это слишком трудоемко. Если использовать "Заполнить значения свойств", то это, во-первых, не тоже самое, что десериализация объекта, скорость уже не та, во-вторых заполнятся только идентичные свойства объекта, остальные придется заполнять вручную, при чем придется переписывать код. ИМХО, лучше КД пока ничего не придумано для обмена между не идентичными конфигурациями.
38. ZLENKO.PRO (ZLENKO) 01.08.13 11:27
(37) kasper076, писать свою схему конечно трудоемко - надо использовать схему конфигурации источника. Не понимаю какие нужны еще инструменты работы с ней - она выгружается и загружается и этого достаточно. ИМХО, если бы меня устраивала КД я бы не тратил месяц (3/4 времени портатил на то чтобы понять как "подружить" конфигурации источника и приемника) на разработку механизма обмена через XDTO. Чтобы были понятны "мотивы" - типовой обмен "УПП -> Розница" передавал документ "Установка цен номенклатуры" с 10 тыс строк и 2 типа цен что то порядка 30 минут (!) и через раз вываливал ошибку нехватки памяти, а мой механизм через XDTO справляется с тем же самым за порядка 15 секунд (вместе с проведением), при том что большую часть этого врмени занимает проведение документа. Так что по поводу "лучше" и "хуже" все не так однозначно.
Borisych; +1 Ответить
39. ZLENKO.PRO (ZLENKO) 01.08.13 11:29
(37) kasper076, вы рассуждаете чисто теоретически, а у меня практический опыт, поэтому спор здесь неуместен :-)
40. Максим Зудин (kasper076) 02.08.13 07:15
(39) ZLENKO.PRO, нехватка памяти это лишь не оптимальный алгоритм выгрузки. Скорость выгрузки XDTO высока, но это преимущество с лихвой перекрывается скоростью и удобством внесения изменений. КД универсальный механизм для обмена между разными конфами, для обмена между одинаковыми есть другие механизмы. Если для обмена между разными конфигурациями использовать XDTO, то это оч не оптимальный подход. Тут как минимум нужна или своя схема, или постобработка не совпадающих реквизитов и объектов.
41. ZLENKO.PRO (ZLENKO) 02.08.13 12:07
(40) kasper076, а в чем Вы видите проблему постобработки несовпадающих реквизитов ?
Для меня приоритетами в обмене являются надежность, масштабируемость и производительность.
КД ничем из вышеперечисленного не обладает - все это принесено в жертву универсальности.
Я понимаю что нехватка памяти связана с неоптимальностью КД, но мне от этого не легче :-)

А между идентичными базами для экспорта-импорта XDTO вообще идеально подходит...
42. Максим Зудин (kasper076) 02.08.13 12:28
43. Денис Яковлев (iceflash) 02.08.13 19:12
Лепите, лепите, и еще раз лепите! Лепите выгрузки-загрузки, переносы документов и справочников и прочее. Есть уже готовые инструменты реализованные 1С, и на уровне платформы(сериализация). Если уровень не позволяет освоить конвертацию как адекватный и мощный механизм - я рад. Я рад потому что "я потрачу меньше времени, и сделаю больше". Я не буду спорить - лепите, делайте свои обработки=)\
Все уже есть, и довольно давно.
Ну и в 8.х в сериализации между объектами с одинаковыми метаданными это делается элементарно (если уж захотелось сделать велосипед). Хотя есть давно обработка выгрузки загрузки ЛЮБЫХ метаданных между конфигурациямии с идентичными метаданными - с настройкой отборов и прочим - я поделился с вами сакральными знаниями=)
44. ZLENKO.PRO (ZLENKO) 05.08.13 18:54
(43) iceflash, конфигурация "Конвертация данных" универсальный и мощный инструмент, но адекватный далеко не для всех задач. По поводу потраченного времени - иногда лучше написать решение, которое работает именно так как нужно, чем потом все время выгребать проблемы, связанные с универсальностью решения.
С одинаковыми метаданными тут все понятно - есть типовая обработка, есть сериализация в платформе.
С неодинаковыми - не все так однозначно. Возможно для ваших задач и объемов данных "Конвертация данных" является идеальным решением, а вот для большинства моих задач меня просто напросто не устраивает производительность "Конвертация данных" - у меня нет столько времени на обмены данными. Поэтому не все так однозначно в данном вопросе как вы думаете.
45. Александр Фомин (alex15650) 06.08.13 15:02
А для управляемых приложений не предусмотрено формы? Нужно такую вещь сделать на БП 3.0
46. Николай Зайков (Mortiferus) 06.08.13 15:49
47. nmgmex nmgmex (nmgmex) 09.08.13 10:15
обычно стандартной хватало...
48. kiruha Дронов (kiruha) 13.08.13 13:49
49. Александр Кузин (sashocq) 13.09.13 15:35
Тоже, что-ли, такую же написать и выложить сюда же... Это уже не первая обработка с аналогичным функционалом, не считая стандартной, до которой не дотягивает.
50. Алексей (mrPepper) 18.10.13 23:27
народ, сделайте кто-нибудь для управляемого приложения обработку
51. Анатолий Дмитрук (progres488) 31.10.13 13:32
У меня не все доки загружает, и выдает вот такую ошибку, подскажите как решить

РегистрСведенийНаборЗаписей.АрхивДанныхРегламентированнойОтчетности
{Форма.Форма.Форма(205)}: Ошибка при вызове метода контекста (Записать): Ошибка записи! Не установлен отбор по регистратору (Регистр сведений: Архив данных регламентированной отчетности)
РегистрСведенийНаборЗаписей.АрхивДанныхРегламентированнойОтчетности
{Форма.Форма.Форма(205)}: Ошибка при вызове метода контекста (Записать): Ошибка записи! Не установлен отбор по регистратору (Регистр сведений: Архив данных регламентированной отчетности)

{Форма.Форма.Форма(205)}: Ошибка при вызове метода контекста (Записать): Ошибка записи! Не установлен отбор по регистратору (Регистр сведений: Цены номенклатуры)
52. Николай Зайков (Mortiferus) 31.10.13 14:20
(51) progres488, Надо сначала документы все загружать, потом регистры сведений/накоплений, чтоб по ссылке на регистратор он точно находился. Либо выгружаете из базы с "битыми" ссылками, потому и записать регистр не может.
53. Александр Федоров (Sasha255n) 28.10.14 16:51
а под 8.1 наверное не пойдет?
54. Nikita Bal' (Buхter) 28.10.15 07:28
Падает при выгрузке данных
{ВнешняяОбработка.ПолныйПереносДанных.МодульОбъекта(72)}: Ошибка при вызове метода контекста (ЗаписатьXML)
ЗаписатьXML(ЗаписьXML, Выборка.Ссылка.ПолучитьОбъект());
по причине:
Значения данного типа не могут быть представлены в XML

1С:Предприятие 8.3 (8.3.6.2100)
Зарплата и Управление Персоналом, редакция 2.5 (2.5.93.2)
55. Николай Зайков (Mortiferus) 28.10.15 13:12
(54) Buхter, ну а на чем "спотыкается"-то? я ж не телепат...
56. Nikita Bal' (Buхter) 16.11.15 02:27
(55) Mortiferus,
По всей видимости на где-то на регистрах сведений.

Тестировать - не было времени. Попытался выгрузить - обработка упала.
Дальше пробовать не стал.

Попробуйте полностью выгрузить Демку зарплатную.
57. Николай Зайков (Mortiferus) 16.11.15 07:54
(56) Buхter, выгрузил все объекты поочередно, никаких проблем. Проверял на базе ЗУП демо 2.5.94.2.
58. Илья Никеров (W1zZzarD84) 15.04.16 15:36
А как обработка решает проблему с предопределенными элементами, например план счетов.
59. Николай Зайков (Mortiferus) 15.04.16 21:17
(58) W1zZzarD84, вопрос хороший. Сам недавно столкнулся с задвоением предопределенных элементов. Можно было бы допилить обработку, чтобы предопределенные элементы не переносились, с одной стороны, но, с другой стороны, если это элемент справочника "Склады", например (Основной склад), и его ссылка соответственно есть в документах - получается, что надо переносить. Так что тут дилемма. Лично я после переноса "ручками" удалял дубли-исходники, т.е. элементы не имеющие ссылок. Возможно, для этого придется создать новую роль с правом удаления предопределенных элементов справочников и т.д.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа