Коротко про XML

16.03.12

Разработка - Математика и алгоритмы

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

Выгрузка объекта в xml средствами 1C

  1. При написании XML-выгрузки  нужно думать о том, каким образом  должны загружаться данные.  
  2. Простейшая  выгрузка, которая выгружает документ,  выглядит примерно так:
    Объект = ВыгружаемыйДокумент. ПолучитьОбъект();
    ЗаписьXML = Новый ЗаписьXML;
    ЗаписьXML.ОткрытьФайл(Путь + "doc_xml.xml");
    ЗаписьXML.ЗаписатьОбъявлениеXML();
    ЗаписьXML.ЗаписатьНачалоЭлемента("Root");   
    ЗаписьXML.ЗаписатьНачалоЭлемента("ДокументРеализацияТоваровУслуг");  
    ЗаписатьXML(ЗаписьXML,Объект, НазначениеТипаXML.Явное);       
    ЗаписьXML.ЗаписатьКонецЭлемента(); //ДокументРеализацияТоваровУслуг              
    ЗаписьXML.ЗаписатьКонецЭлемента(); //Root
    ЗаписьXML.Закрыть();

В данном случае, выгружаются все атрибуты документа. Если атрибут имеет ссылочный тип, то "доминирующим" аспектом в выгрузке такого атрибута будет служить уникальный идентификатор. Другими словами, когда будет происходить загрузка нашей реализации, то если не будет в базе-приемнике, скажем, номенклатуры  с  уникальным идентификатором, который совпадает с уникальным идентификатором номенклатуры из базы-источника, то вместо номенклатуры будет значение (  или как-то так :)  ). На момент загрузки нашей реализации, все атрибуты ссылочного типа уже должны быть загружены в базу.

  1. "Продвинутый" вариант выгрузки предполагает, что помимо основного объекта (в нашем примере Документ.РеализацияТоваровУслуг) выгружаются еще и объекты, являющиеся атрибутами ссылочного типа. В нижеследующем примере выгружается  еще и Контрагент из шапки документа.
    Объект = ВыгружаемыйДокумент. ПолучитьОбъект();

    ЗаписьXML = Новый ЗаписьXML;
    ЗаписьXML.ОткрытьФайл(Путь + "doc_xml.xml");
    ЗаписьXML.ЗаписатьОбъявлениеXML();
    ЗаписьXML.ЗаписатьНачалоЭлемента("Root");

    //!!!!!!
    ЗаписьXML.ЗаписатьНачалоЭлемента("СправочникКонтрагенты");
    Контрагент = Объект.Контрагент.ПолучитьОбъект();
    ЗаписатьXML(ЗаписьXML,Контрагент, НазначениеТипаXML.Явное);
    ЗаписьXML.ЗаписатьКонецЭлемента(); //СправочникКонтрагенты
    //!!!!!!

    ЗаписьXML.ЗаписатьНачалоЭлемента("ДокументРеализацияТоваровУслуг");               
    ЗаписатьXML(ЗаписьXML,Объект, НазначениеТипаXML.Явное); 
    ЗаписьXML.ЗаписатьКонецЭлемента(); //ДокументРеализацияТоваровУслуг          
    ЗаписьXML.ЗаписатьКонецЭлемента(); //Root
    ЗаписьXML.Закрыть();

 

Теперь,  когда мы будем загружать в информационную базу-приемник нашу реализацию, то сможем создать или изменить объект  типа "Контрагент".

Очевидно, что у объекта ссылочного типа могут быть свои атрибуты ссылочного типа, а у тех - свои. Таким образом, если мы хотим выгрузить ссылочный объект "полностью", то должны построить дерево выгрузки, например, при помощи рекурсии.

 

 Загрузка объекта в xml средствами 1C 

 

1) Должен быть подготовленный файл с выгруженными данными, из которого, собственно и произойдет выгрузка

2) Простейший вариант загрузки выглядит следующим образом:

    Файл = Новый ЧтениеXML;
    Файл.ОткрытьФайл(Путь + "doc_xml.xml");
    // Позиционируемся на начале элемента, содержащего документ

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

                Объект.Записать();
            Исключение
                Сообщить(" не могуууу: " + Строка(Объект));                                                                                                                              КонецПопытки;
            КонецПопытки;
            Сообщить(Строка(Объект));
        КонецЕсли; 
    КонецЦикла;

    Файл.Закрыть();

Цикл Файл.Прочитать ()... позволяет пройтись по всем ветвям  XML-графа и создать объекты,  атрибуты которых определяются "листьями" этих ветвей. В нашем примере, в том случае, если ветвь  соответствует Контрагенту, то головному контрагенту присваивается пустая ссылка.

См. также

SALE! 20%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 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. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

26280 22338 руб.

12.06.2017    141463    798    297    

419

SALE! 10%

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

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УПП 1.3 (1.3.234.x) и БП 3.0 (3.0.161.x). Правила подходят для версии ПРОФ и КОРП.

35000 31500 руб.

15.12.2021    23985    169    51    

127

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 10 Россия Управленческий учет Платные (руб)

Перенос данных из 1С:Управление торговлей 10.3 в 1С:Управление торговлей 11.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УТ 10.3 (10.3.88.x) и УТ 11.5 (11.5.19.x).

35000 31500 руб.

23.07.2020    51180    228    69    

185

SALE! 10%

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

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

53111 47800 руб.

03.12.2020    36568    94    66    

89

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 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" с помощью правил конвертации будет максимально комфортным! | Можно бесплатно проверить перенос на вашем сервере!

48278 43450 руб.

25.02.2015    171154    303    257    

378

SALE! 15%

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

Регулярный обмен, выгрузка, перенос из КА 1.1, УПП 1.3, УТ 10.3 для обмена с любыми конфигурациями, поддерживающими обмен в формате EnterpriseData (КД3) - БП 3.0, ERP, КА 2, УТ 11, Розница 2, УНФ 1.6 и другими. Правила для старых и доработанных конфигураций не требуют синхронного обновления и совместимы с новыми и будущими конфигурациями. Обмен по расписанию, через папку, FTP, почту.

15300 13005 руб.

18.02.2016    186854    589    509    

526

SALE! 10%

Перенос данных 1C Взаиморасчеты Оптовая торговля Логистика, склад и ТМЦ Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Управление торговлей 10 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Управленческий учет Платные (руб)

Можно проверить до покупки, оставьте заявку! Воспользовались более 268 компаний! Перенос данных из УТ 10.3 в УТ 11 | из УТ 10.3 в КА 2 | из УТ 10.3 в ERP. Предлагаем качественное и проверенное временем решение для перехода с УТ 10.3. Можно перенести начальные остатки, нормативно-справочную информацию и все возможные документы. При выгрузке можно установить отбор по периоду, организациям и складам. При выходе новых релизов конфигураций 1C оперативно выпускаем обновление переноса данных.

55778 50200 руб.

24.04.2015    194949    150    243    

280

SALE! 10%

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

Перенос данных из ERP в УПП 1.3 | из КА 2 в КА 1.1 | из КА 2 в УПП 1.3 | из КА 2 в УТ 10.3 | из ERP в КА 1.1 | из ERP в УТ 10.3 | из УТ 11 в УТ 10.3 | из УТ 11 в УПП 1.3 | из УТ 11 в КА 1.1 | Можно переносить только новые объекты, найденные в приемнике перезаписываться не будут | Есть фильтр по организации при выгрузке данных | Оперативно обновляем на новые релизы 1С

53111 47800 руб.

28.11.2015    83235    32    125    

64
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. daho 8 22.03.12 07:12 Сейчас в теме
Спасибо, начнем... давно искал что-то подобное
2. mnikol 22.03.12 16:03 Сейчас в теме
Полезная информация. Спасибо.
3. awk 744 23.03.12 00:01 Сейчас в теме
(0)Жуть, а не статья.
1. Оформи нормально (в едином стиле).
2.
1)При написании XML-выгрузки нужно думать о том, каким образом должны загружаться данные.
Скорее 1С предусматривает стратегию обмена данными: "Выгрузка в формате приемника". Есть другая стратегия: "Выгрузка как есть." - Разбор XML проблема принимающей стороны.
3. Простейшая выгрузка:

Запись = Новый ЗаписьXML();
Запись.ОткрытьФайл(Путь + "doc_xml.xml");
ЗаписатьXML(Запись, Объект);
Запись.Закрыть();


Эта выгрузка подойдет только при идентичных базах. Если базы различны, то придется поплясать с бубном (СериализаторXDTO).

Только в этом случае, получится простейший код загрузки:
Чтение = Новый ЧтениеXML;
Чтение.ПерейтиКСодержимому();
Объект = ПрочитатьXML(Чтение);
Объект.Записать();


4.
Другими словами, когда будет происходить загрузка нашей реализации, то если не будет в базе-приемнике, скажем, номенклатуры с уникальным идентификатором, который совпадает с уникальным идентификатором номенклатуры из базы-источника, то вместо номенклатуры будет значение ( или как-то так :) ).
Если не будет в базе объекта на который мы ссылаемся, то будет "Объект не найден". При загрузке этого объекта или тестирования и исправления, с выбором "создавать объекты" - отсутствующие объекты будут созданы.
hazyaka; bionicle; fuxic; +3 Ответить
4. dumal 25.03.12 20:11 Сейчас в теме
Спасибо Вам. Такую бы заметочку хотя бы лет пять назад прочитать. Так ведь нет. Сейчас уже неактуально, но начинающим, наверное, поможет
5. ia57 2 27.04.12 14:25 Сейчас в теме
Спасибо. Немного посветлело.
Оставьте свое сообщение