Импорт из XML в формате EnterpriseData
Как можно импортировать данные из XML файла? Не нашел примеры использования IMPORT XML. Не пойму как правильно его использовать. Как итерироваться через объекты если итерация есть на разных уровнях вложенности? В какую структуру должен происходить импорт?
Конкретно мне нужно импортировать счета из 1с в формате EnterpriseData
Выглядит это вот так:
Заголовок
<?xml version="1.0"?>
<Message xmlns:msg="http://www.1c.ru/SSL/Exchange/Message" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<msg:Header>
<msg:Format>http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.3</msg:Format>
<msg:CreationDate>2024-12-12T09:38:51</msg:CreationDate>
<msg:AvailableVersion>1.3</msg:AvailableVersion>
</msg:Header>
<Body xmlns="http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.3">
И потом идут сами счета
<Документ.ЗаказКлиента>
<КлючевыеСвойства>
<Ссылка>98c212ed-c377-11e5-b9f7-88532ee9a795</Ссылка>
<Дата>2016-01-11T12:00:00</Дата>
<Номер>0000-000001</Номер>
<Организация>
<Ссылка>98c212d9-c377-11e5-b9f7-88532ee9a795</Ссылка>
<Наименование>***</Наименование>
<НаименованиеСокращенное>***</НаименованиеСокращенное>
<НаименованиеПолное>***</НаименованиеПолное>
<ИНН>***</ИНН>
<ЮридическоеФизическоеЛицо>ФизическоеЛицо</ЮридическоеФизическоеЛицо>
</Организация>
</КлючевыеСвойства>
<Ответственный>
<Ссылка>aa00559e-ad84-4494-88fd-f0826edc46f0</Ссылка>
<Наименование><Не указан></Наименование>
</Ответственный>
<Валюта>
<Ссылка>d85dd251-c377-11e5-b9f7-88532ee9a795</Ссылка>
<Код>643</Код>
<Наименование>руб.</Наименование>
</Валюта>
<Сумма>***</Сумма>
<Контрагент>
<Ссылка>98c212e9-c377-11e5-b9f7-88532ee9a795</Ссылка>
<Наименование>***</Наименование>
<НаименованиеПолное>***</НаименованиеПолное>
<ИНН>***</ИНН>
<КПП>***</КПП>
<ЮридическоеФизическоеЛицо>ЮридическоеЛицо</ЮридическоеФизическоеЛицо>
<СтранаРегистрации>
<Ссылка>a85e20f9-c377-11e5-b9f7-88532ee9a795</Ссылка>
<Код>643</Код>
<Наименование>РОССИЯ</Наименование>
</СтранаРегистрации>
</Контрагент>
<ДанныеВзаиморасчетов>
<КурсВзаиморасчетов>1</КурсВзаиморасчетов>
<КратностьВзаиморасчетов>1</КратностьВзаиморасчетов>
</ДанныеВзаиморасчетов>
<СуммаВключаетНДС>true</СуммаВключаетНДС>
<БанковскийСчетОрганизации>
<Ссылка>98c212dd-c377-11e5-b9f7-88532ee9a795</Ссылка>
<НомерСчета>***</НомерСчета>
<Банк>
<Ссылка>98c212dc-c377-11e5-b9f7-88532ee9a795</Ссылка>
<БИК>***</БИК>
<КоррСчет>***</КоррСчет>
<Наименование>***</Наименование>
</Банк>
<Владелец>
<ОрганизацииСсылка>
<Ссылка>98c212d9-c377-11e5-b9f7-88532ee9a795</Ссылка>
<Наименование>***</Наименование>
<НаименованиеСокращенное>***</НаименованиеСокращенное>
<НаименованиеПолное>***</НаименованиеПолное>
<ИНН>***</ИНН>
<ЮридическоеФизическоеЛицо>ФизическоеЛицо</ЮридическоеФизическоеЛицо>
</ОрганизацииСсылка>
</Владелец>
</БанковскийСчетОрганизации>
<Услуги>
<Строка>
<Номенклатура>
<Ссылка>98c212ec-c377-11e5-b9f7-88532ee9a795</Ссылка>
<НаименованиеПолное>***</НаименованиеПолное>
<КодВПрограмме>00-00000001</КодВПрограмме>
<Наименование>***</Наименование>
</Номенклатура>
<Количество>3</Количество>
<Сумма>***</Сумма>
<Цена>***</Цена>
<СтавкаНДС>БезНДС</СтавкаНДС>
<Содержание>***</Содержание>
</Строка>
</Услуги>
</Документ.ЗаказКлиента>
Ответы (1 шт):
В плагине к IDEA есть специальная кнопка для генерирования формы для импорт по входному файлу XML. Она находится в пункте меню LSF / Generate form / From xml.
Дальше нужно взять сгенерированный код и просто запустить оператор IMPORT (IMPORT <form> XML FROM file
). Импортированные данные будут в соответствующих локальных свойствах. Названия этих свойств можно изменить по желанию, не меняя при этом EXTID.
Единственное, рекомендуется, чтобы тэги, которых может быть несколько, были продублированы в XML. В данном случае, это Банковский счет организации (если их может быть несколько). Таким образом платформа сможет определить где должны быть таблицы (OBJECTS INTEGER), а где просто группы (GROUP).
Можно также использовать сгенерированную форму для предпросмотра импортированных данных. Я сгенерировал код для интерпретатора по указанному примеру. Он успешно импортирует и показывает результат на экран. :
GROUP vkliuchievyieSvoistva EXTID 'КлючевыеСвойства';
GROUP vorghanizatsiia EXTID 'Организация' : vkliuchievyieSvoistva;
GROUP votvietstviennyi EXTID 'Ответственный';
GROUP vvaliuta EXTID 'Валюта';
GROUP vkontraghient EXTID 'Контрагент';
GROUP vstranaRieghistratsii EXTID 'СтранаРегистрации' : vkontraghient;
GROUP vdannyieVzaimoraschietov EXTID 'ДанныеВзаиморасчетов';
GROUP vbank EXTID 'Банк';
GROUP vbankovskiiSchietOrghanizatsii EXTID 'БанковскийСчетОрганизации';
GROUP vvladieliets EXTID 'Владелец';
GROUP vorghanizatsiiSsylka EXTID 'ОрганизацииСсылка' : vvladieliets;
GROUP vuslughi EXTID 'Услуги';
GROUP vstroka EXTID 'Строка' : vuslughi;
GROUP vnomienklatura EXTID 'Номенклатура' : vstroka;
vssylka = DATA LOCAL STRING();
vdata = DATA LOCAL DATETIME();
vnomier = DATA LOCAL STRING();
vssylka1 = DATA LOCAL STRING();
vnaimienovaniie = DATA LOCAL STRING();
vnaimienovaniieSokrashchiennoie = DATA LOCAL STRING();
vnaimienovaniiePolnoie = DATA LOCAL STRING();
vINN = DATA LOCAL STRING();
viuridichieskoieFizichieskoieLitso = DATA LOCAL STRING();
vssylka2 = DATA LOCAL STRING();
vnaimienovaniie1 = DATA LOCAL STRING();
vssylka3 = DATA LOCAL STRING();
vkod = DATA LOCAL STRING();
vnaimienovaniie2 = DATA LOCAL STRING();
vsumma = DATA LOCAL STRING();
vssylka4 = DATA LOCAL STRING();
vnaimienovaniie3 = DATA LOCAL STRING();
vnaimienovaniiePolnoie1 = DATA LOCAL STRING();
vINN1 = DATA LOCAL STRING();
vKPP = DATA LOCAL STRING();
viuridichieskoieFizichieskoieLitso1 = DATA LOCAL STRING();
vssylka5 = DATA LOCAL STRING();
vkod1 = DATA LOCAL STRING();
vnaimienovaniie4 = DATA LOCAL STRING();
vkursVzaimoraschietov = DATA LOCAL STRING();
vkratnost_Vzaimoraschietov = DATA LOCAL STRING();
vsummaVkliuchaietNDS = DATA LOCAL STRING();
vssylka6 = DATA LOCAL STRING(INTEGER);
vnomierSchieta = DATA LOCAL STRING(INTEGER);
vssylka7 = DATA LOCAL STRING(INTEGER);
vBIK = DATA LOCAL STRING(INTEGER);
vkorrSchiet = DATA LOCAL STRING(INTEGER);
vnaimienovaniie5 = DATA LOCAL STRING(INTEGER);
vssylka8 = DATA LOCAL STRING(INTEGER);
vnaimienovaniie6 = DATA LOCAL STRING(INTEGER);
vnaimienovaniieSokrashchiennoie1 = DATA LOCAL STRING(INTEGER);
vnaimienovaniiePolnoie2 = DATA LOCAL STRING(INTEGER);
vINN2 = DATA LOCAL STRING(INTEGER);
viuridichieskoieFizichieskoieLitso2 = DATA LOCAL STRING(INTEGER);
vssylka9 = DATA LOCAL STRING();
vnaimienovaniiePolnoie3 = DATA LOCAL STRING();
vkodVProghrammie = DATA LOCAL STRING();
vnaimienovaniie7 = DATA LOCAL STRING();
vkolichiestvo = DATA LOCAL STRING();
vsumma1 = DATA LOCAL STRING();
vtsiena = DATA LOCAL STRING();
vstavkaNDS = DATA LOCAL STRING();
vsodierzhaniie = DATA LOCAL STRING();
FORM vdokumient_ZakazKliienta FORMEXTID 'Документ.ЗаказКлиента'
PROPERTIES() vsumma EXTID 'Сумма', vsummaVkliuchaietNDS EXTID 'СуммаВключаетНДС'
PROPERTIES() IN vkliuchievyieSvoistva vssylka EXTID 'Ссылка', vdata EXTID 'Дата', vnomier EXTID 'Номер'
PROPERTIES() IN vorghanizatsiia vssylka1 EXTID 'Ссылка', vnaimienovaniie EXTID 'Наименование', vnaimienovaniieSokrashchiennoie EXTID 'НаименованиеСокращенное', vnaimienovaniiePolnoie EXTID 'НаименованиеПолное', vINN EXTID 'ИНН', viuridichieskoieFizichieskoieLitso EXTID 'ЮридическоеФизическоеЛицо'
PROPERTIES() IN votvietstviennyi vssylka2 EXTID 'Ссылка', vnaimienovaniie1 EXTID 'Наименование'
PROPERTIES() IN vvaliuta vssylka3 EXTID 'Ссылка', vkod EXTID 'Код', vnaimienovaniie2 EXTID 'Наименование'
PROPERTIES() IN vkontraghient vssylka4 EXTID 'Ссылка', vnaimienovaniie3 EXTID 'Наименование', vnaimienovaniiePolnoie1 EXTID 'НаименованиеПолное', vINN1 EXTID 'ИНН', vKPP EXTID 'КПП', viuridichieskoieFizichieskoieLitso1 EXTID 'ЮридическоеФизическоеЛицо'
PROPERTIES() IN vstranaRieghistratsii vssylka5 EXTID 'Ссылка', vkod1 EXTID 'Код', vnaimienovaniie4 EXTID 'Наименование'
PROPERTIES() IN vdannyieVzaimoraschietov vkursVzaimoraschietov EXTID 'КурсВзаиморасчетов', vkratnost_Vzaimoraschietov EXTID 'КратностьВзаиморасчетов'
OBJECTS vbankovskiiSchietOrghanizatsii = INTEGER EXTID 'БанковскийСчетОрганизации'
PROPERTIES(vbankovskiiSchietOrghanizatsii) vssylka6 EXTID 'Ссылка', vnomierSchieta EXTID 'НомерСчета'
PROPERTIES(vbankovskiiSchietOrghanizatsii) IN vbank vssylka7 EXTID 'Ссылка', vBIK EXTID 'БИК', vkorrSchiet EXTID 'КоррСчет', vnaimienovaniie5 EXTID 'Наименование'
FILTERS imported(vbankovskiiSchietOrghanizatsii)
// OBJECTS vvladieliets = INTEGER EXTID 'Владелец'
PROPERTIES(vbankovskiiSchietOrghanizatsii) IN vorghanizatsiiSsylka vssylka8 EXTID 'Ссылка', vnaimienovaniie6 EXTID 'Наименование', vnaimienovaniieSokrashchiennoie1 EXTID 'НаименованиеСокращенное', vnaimienovaniiePolnoie2 EXTID 'НаименованиеПолное', vINN2 EXTID 'ИНН', viuridichieskoieFizichieskoieLitso2 EXTID 'ЮридическоеФизическоеЛицо'
PROPERTIES() IN vstroka vkolichiestvo EXTID 'Количество', vsumma1 EXTID 'Сумма', vtsiena EXTID 'Цена', vstavkaNDS EXTID 'СтавкаНДС', vsodierzhaniie EXTID 'Содержание'
PROPERTIES() IN vnomienklatura vssylka9 EXTID 'Ссылка', vnaimienovaniiePolnoie3 EXTID 'НаименованиеПолное', vkodVProghrammie EXTID 'КодВПрограмме', vnaimienovaniie7 EXTID 'Наименование'
;
run() {
INPUT f = FILE DO {
IMPORT vdokumient_ZakazKliienta XML FROM f;
SHOW vdokumient_ZakazKliienta DOCKED;
}
}