Инструменты обмена данными через xml используя сериализацию объектов

10.07.24

Интеграция - Файловый обмен (TXT, XML, DBF), FTP

Восстановление справочников, документов, регистров сведений из копии через xml, используя сериализацию объектов. Выгрузка/загрузка объектов базы данных в xml, используя сериализацию. Выгрузка/загрузка таблицы значений в xml, используя сериализацию.

Предыстория: 

Конфигурация 1С на платформе 8.3. В ней есть замечательный механизм "поиск и замена ссылок". Переносил данные из нескольких баз на платформе 7.7 в одну базу на платформе 8.3. Элементы некоторые справочников задублировались (ключевые поля имели незначительные отличия в базах, хотя описывали одну сущность). Использовав механизм "поиска и замены" свернул эти справочники. Через несколько рабочих дней выяснилось, что пропало одно подразделение. Восстановил копию, проверил, на это подразделение в копии более 7 тысяч ссылок. Предприятие отработало на свернутой базе уже несколько дней, восстанавливаться из копии не вариант.

1) С чего начал: Функция НайтиПоСсылкам(МассивСсылок) - возвращает таблицу значений, содержащую Описание метаданных и ссылку на объект, содержащий искомую ссылку. Не все прошло гладко, поэтому некоторые документы догружал, получив выборку ссылок запросом. Вначале перенес элементы справочников, которые сворачивались, и которые содержались в документах со ссылкой на восстанавливаемое подразделение. 

Для выгрузки использовал вот такой кусок кода:

//Выгрузка объектов (справочников, документов) в xml используя сериализацию

ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл(ИмяФайла);
   ЗаписьXML.ЗаписатьНачалоЭлемента("Root");

       // допустим у нас есть Выборка из запроса, которая содержит ссылки на объекты
       Пока Выборка.Следующий() Цикл
          ЗаписьXML.ЗаписатьНачалоЭлемента("НовыйОбъект");
             лОбъект = Выборка.Ссылка.ПолучитьОбъект();
             ЗаписатьXML(ЗаписьXML,лОбъект);
          ЗаписьXML.ЗаписатьКонецЭлемента();
       КонецЦикла;
   ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.Закрыть();

 

Для загрузки:

 //Загрузка объектов (справочников, документов) из файла xml используя сериализацию

ЧтениеХМЛ = Новый ЧтениеXML;
ЧтениеХМЛ.ОткрытьФайл(ИмяФайла); 
ЧтениеХМЛ.Прочитать();   // получили Root   

Пока ЧтениеХМЛ.Прочитать() Цикл 
    Если (ЧтениеХМЛ.Имя = " НовыйОбъект ") И (ЧтениеХМЛ.ТипУзла = ТипУзлаXML.НачалоЭлемента) Тогда 
        ЧтениеХМЛ.Прочитать();
        Если ВозможностьЧтенияXML(ЧтениеХМЛ) Тогда
            ЗагружаемыйОбъект = ПрочитатьXML(ЧтениеХМЛ);
            ЗагружаемыйОбъект.Записать(); // непосредственная запись объекта в базу
        КонецЕсли;
    КонецЕсли;
КонецЦикла;

2) Перепровел документы, но не все записи регистров сведений формируются при проведении документов. 

Регистры сведений переносил через сериализацию таблицы значений.

В чем плюсы:

1) в копии выбрал данные из регистра запросом по определенному фильтру и результат выгрузил в таблицу значений (в примере тз), тз выгрузил в xml. 

Код для выгрузки:

//Выгрузка таблицы значений в xml используя сериализацию

ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл(ИмяФайла);
СериализаторXDTO.ЗаписатьXML(ЗаписьXML,тз);
ЗаписьXML.Закрыть();

 

2) в базе получателе (напоминаю, что это наследник копии, из которой идет перенос данных, т.е. объекты по-умолчанию существуют) загрузил данные в таблицу значений. 

//Загрузка таблицы значений из xml используя сериализацию

ТекстовыйДокумент = Новый ТекстовыйДокумент;
ТекстовыйДокумент.Прочитать(ИмяФайла);               

ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(ТекстовыйДокумент.ПолучитьТекст());

ТипОбъектаXDTO = ФабрикаXDTO.Тип("http://v8.1c.ru/8.1/data/core","ValueTable");
ОбъектXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML,ТипОбъектаXDTO);
ОбъектXDTO.Проверить();

ЧтениеXML.Закрыть();

тз = СериализаторXDTO.ПрочитатьXDTO(ОбъектXDTO);

 

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

Вступайте в нашу телеграмм-группу Инфостарт

Выгрузка/загрузка объектов базы данных в xml используя сериализацию таблицы значений

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена | Можно выполнить переход с УПП на БП 3 или запускать выгрузку данных за выбранный период времени | Переносятся документы, начальные остатки и вся справочная информация | Есть фильтр по организации и множество других параметров выгрузки | Поддерживается несколько сценариев работы: как первичный полный перенос, так и перенос только новых документов | Перенос данных возможен в "1С: Бухгалтерия 3.0" версии ПРОФ, КОРП или базовую | Переход с "1С: УПП1.3" / "1С:КА 1.1" на "1С:БП3.0" с помощью правил конвертации будет максимально комфортным! | Можно бесплатно проверить перенос на вашем сервере!

50050 руб.

25.02.2015    188814    363    291    

421

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

Правила в универсальном формате обмена для ERP 2.5, КА 2.5, УТ 11.5, БП 3.0, Розница, УНФ, для последних версий конфигураций. Ссылки на другие конфигурации в описании публикации. Правила совместимы со всеми другими версиями конфигураций новыми и старыми, поддерживающими обмен и синхронизацию в формате EnterpriseData. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

27633 руб.

12.06.2017    161534    975    321    

484

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Переносите справочную информацию, остатки и документы из УПП 1.3 в Бухгалтерию 3.0 с помощью готовых правил. Переносится более 50 видов документов. Простой интерфейс и понятные настройки.

42000 37800 руб.

15.12.2021    34641    258    64    

195

Внешние источники данных Кадровый учет Файловый обмен (TXT, XML, DBF), FTP Перенос данных 1C Программист 1С:Предприятие 8 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактическим удержаниям, НДФЛ, вычетам, страховым взносам из базы Парус 10 учреждений (далее Парус) в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (далее 1С) и начать с ней работать с любого месяца года.

85400 руб.

05.10.2022    13726    16    8    

17

Операции по ВЭД Файловый обмен (TXT, XML, DBF), FTP Программист Бухгалтер 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 Россия Бухгалтерский учет Платные (руб)

Федеральная таможенная служба России давно поддерживает унифицированный формат электронных документов для обмена с информационными системами предприятий. xmlns="urn:customs.ru:Information:ExchangeDocuments:". Структура, утвержденная комиссией Таможенного союза. Осталось только сделать загрузку в 1С из этого формата. На выходе - два документа ГТД по импорту и Поступление (акты, накладные) Обработка актуализирована на начало 2026 года (ставка НДС 22%)

24400 руб.

09.08.2016    95008    372    379    

117

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Бухгалтер 1С:Предприятие 8 1С:Бухгалтерия 2.0 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Налоговый учет Платные (руб)

Перенос данных из БП 2 в БП 3 готовые правила конвертации данных (КД 2), сэкономьте свое время! | Выполнить переход с БП 2 на БП 3 в ситуациях, когда простым обновлением перейти не получается | Переносится вся справочная информация, документы за выбранный период, а также начальные остатки на выбранную дату (то есть можно еще и свертку базы сделать при переносе) | Есть фильтр по организациям при выгрузке данных | Перенос можно проверить перед покупкой прямо на вашем сервере! Обращайтесь за проверкой!

50600 руб.

21.05.2019    58664    81    133    

73

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос данных из ERP в БП 3 | из КА 2 в БП 3 | из УТ 11 в БП 3 | из ЕРП в БП 3 | Сэкономьте время - используйте готовое решение для перехода! | Перенос разработан в формате КД 2 (правила конвертации данных) | Переносятся все возможные виды документов, начальных остатков и нормативно-справочная информация| Можно опционально выгружать каждую пару "номенклатура+характеристика" как отдельную номенклатуру | Есть выгрузка настроек счетов учета и зарплатных данных из ERP / КА 2 | Можно проверить на вашем сервере перед покупкой

58000 руб.

15.04.2019    84809    225    179    

162

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из ERP в ЗУП 3 | из КА 2 в ЗУП | Готовые правила конвертации данных (КД 2) для переноса остатков, документов с движениями и справочной информации 3 | Есть перенос начальной задолженности по зарплате и начальной штатной расстановки на выбранную дату | Обороты за прошлые годы (данные для расчета среднего) переносятся свернуто в документ "Перенос данных" | Есть фильтр по организациям | Документы за текущий период переносятся сразу с движениями, поэтому не потребуется делать перерасчеты | Перенос можно проверить перед покупкой, обращайтесь!

55200 руб.

03.12.2020    45672    130    82    

120
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. frkbvfnjh 822 24.01.23 15:08 Сейчас в теме
Спасибо, мне было полезно узнать про сериализацию ТЗ через XDTO.
2. frkbvfnjh 822 24.01.23 16:38 Сейчас в теме
А как узнали, что тип в XDTO должен называться "ValueTable"? Как мне узнать название того или иного типа 1С в XDTO?
3. andrey1508 112 25.01.23 23:25 Сейчас в теме
(2) в синтаксис помошнике в описании ТаблицаЗначений указано, что сериализуется через XDTO, указана область и имя типа XDTO.
4. frkbvfnjh 822 26.01.23 04:56 Сейчас в теме
(3) Да, действительно, есть в справке, никогда не обращал внимания. Спасибо!
5. frkbvfnjh 822 26.01.23 04:57 Сейчас в теме
Интересно, а нет метода с помощью которого можно было бы передать тип 1С, а в ответ получить строку имя типа XDTO...
6. andrey1508 112 28.01.23 11:46 Сейчас в теме
(5) не сталкивался с таким методом
7. JohnyDeath 302 28.01.23 13:27 Сейчас в теме
(5) а разве это разные строки? По-моему в типе XDTO всегда указано англ. наименование типа
8. lvictor58 139 13.02.23 17:20 Сейчас в теме
На инфострате есть обработка для лечения регистров сведений после обновления конфигурации когда происходит задваивание записей.
Выгрузка в файл происходит с использованием метода "Значение в файл" где в качестве значения берется выборка результата запроса.
А загрузка данных - через "Значение из файла". Приходилось пользоваться: все работает!
9. andrey1508 112 11.06.24 20:01 Сейчас в теме
Добавил небольшую обработку (пример) для выгрузки/загрузки регистра сведений через таблицу значений. Писал по-случаю, переносил регистр "Штрихкоды" Розницы 2.3. В принципе шаблон подойдет для переноса любого регистра в дочернюю базу или для восстановления из копии. Измените запрос и имя файла и вперед.
10. andrey1508 112 10.07.24 17:13 Сейчас в теме
Удалил обработку, чтобы не вводить в заблуждение читателей (ждали штрих кодов, а там перенос регистра сведений через таблицу значений).
11. It-developer 26 08.04.25 16:33 Сейчас в теме
п. 1 помог. Спасибо. Просто и понятно
Для отправки сообщения требуется регистрация/авторизация