itthon / Közösségi média / XML létrehozása az xsd séma szerint 1c. Beírt DataSet objektum. XML dokumentumok olvasása és írása. XML fájl ábrázolása és olvasása

XML létrehozása az xsd séma szerint 1c. Beírt DataSet objektum. XML dokumentumok olvasása és írása. XML fájl ábrázolása és olvasása

Ez a fejezet bemutatja, hogyan kell XML-sémákat írni. Azt is megtudhatja, hogy a séma sokféleképpen írható.

XML dokumentum

Nézzük meg ezt a "shiporder.xml" XML dokumentumot:

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="shiporder.xsd">
John Smith

Ola Nordmann

Langgt 23

4000 Stavanger
Norvégia


Birodalom burleszk
Különleges kiadás
1
10.90


rejtsd el a szíved
1
9.90

A fenti XML-dokumentum egy gyökérelemből, a "shiporder"-ből áll, amely egy "orderid" nevű kötelező attribútumot tartalmaz. A "shiporder" elem három különböző utódelemet tartalmaz: "orderperson" , "shipto" és "item" . Az "item" elem kétszer jelenik meg, és tartalmaz egy "title" , egy opcionális "note" elemet, egy "quantity" és egy "price" elemet.

A fenti sor: Xmlns:XSI="http://www.w3.org/2001/XMLSchema-instance" közli az XML-elemzővel, hogy ezt a dokumentumot séma-validálni kell. Sor: xsi: noNamespaceSchemaLocation="shiporder.xsd" jelzi, hol található a séma, mi és (itt van ugyanabban a mappában, mint a "shiporder.xml") .

XML-séma létrehozása

Most szeretnénk létrehozni egy sémát a fenti XML dokumentumhoz.

Kezdjük egy új fájl megnyitásával, amelynek neve "shiporder.xsd" . Egy séma létrehozásához egyszerűen követhetjük az XML dokumentum struktúráját, és minden elemet úgy határozhatunk meg, ahogyan megtaláljuk. Kezdjük egy szabványos XML-deklarációval, amelyet xs követ: a séma elem, amely meghatározza a sémát:



...

A fenti sémában a szabványos névtereket (xs) használjuk, és az ehhez a névtérhez társított URI a séma nyelvi definíciója, amelynek szabványos értéke http://www.w3.org/2001/XMLSchema.

Ezután meg kell határoznunk a "shiporder" elemet. Ennek az elemnek van attribútuma, és más elemeket is tartalmaz, ezért összetett típusként kezeljük. Gyermek elemek A "shiporder" elemet xs veszi körül: egy sorelem, amely az alelemek rendezett sorozatát határozza meg:




...


Ezután az "orderperson" elemet egyszerű típusként kell meghatároznunk (mivel nem tartalmaz attribútumokat vagy egyéb elemeket). Az (xs:string) típus előtagja az XML-sémához társított névtér-előtag, amely meghatározza a séma előre meghatározott adattípusát:










A sémák segítségével meg tudjuk határozni, hogy egy MaxOccurs és MinOccurs attribútumokkal rendelkező elem hány lehetséges előfordulást tartalmazzon. A MaxOccurs meghatározza egy elem előfordulásának maximális számát, a MinOccurs pedig az elem előfordulásának minimális számát. A MaxOccurs és MinOccurs alapértelmezett értéke 1!

Most definiálhatjuk az "elem" elemet. Ez az elem többször is megjelenhet a "shiporder" elemen belül. Ezt úgy határozzuk meg, hogy az "item" elem maxOccurs attribútumát "unbounded" értékre állítja, ami azt jelenti, hogy az "item" elemnek annyi előfordulása lehet, amennyit a szerző akar. Vegye figyelembe, hogy a „note” elem nem kötelező. Ezt úgy határoztuk meg, hogy a minOccurs attribútumot nullára állítottuk:










Most deklarálhatjuk az elem "shiporder" attribútuma. Mivel ez egy kötelező attribútum, megadjuk a use="required".

Megjegyzés: Az attribútum-deklarációnak mindig az utolsónak kell lennie:

Itt teljes lista"shiporder.xsd" nevű sémafájl:





























Külön áramkörök

A korábbi tervezési módszer nagyon egyszerű, de bonyolult dokumentumok esetén nehéz lehet elolvasni és karbantartani.

A következő tervezési módszer az összes elem és attribútum meghatározásán, majd a ref attribútum használatával történő hivatkozáson alapul.

Itt új dizájn sémafájl ("shiporder.xsd"):








































Elnevezett típusok használata

A harmadik tervezési mód osztályokat vagy típusokat határoz meg, ami lehetővé teszi az elemdefiníciók újrafelhasználását. Ez úgy történik, hogy az elemeket simpleTypes és complexTypes néven nevezzük el, majd hivatkozunk rájuk az elem típus attribútumán keresztül.

Íme a sémafájl harmadik terve ("shiporder.xsd"):

































A kényszer elem azt jelzi, hogy az adattípus a W3C XML Schema adattípus névtérből származott. Tehát a következő részlet azt jelenti, hogy egy elem vagy attribútum értékének karakterlánc értéknek kell lennie:

A kényszer elemet gyakrabban használják kényszerek alkalmazására az elemekre. Nézze meg a fenti diagram alábbi sorait:





Ez azt jelzi, hogy az elem vagy attribútum értékének karakterláncnak kell lennie, karakterlánconként pontosan hat karakterből kell állnia, és ezeknek a karaktereknek 0 és 9 közötti számoknak kell lenniük.

Feladat volt egy XML fájl létrehozása az XSD séma alapján. A fórumokon való keresés sok vitához vezetett a folyamat megértésének hiányával kapcsolatban, és csak néhány cikk magyarázta el a lényeget. Az emberek kérdezősködtek, küzdöttek a megoldással, de miután a feladat alábbhagyott, egyszerűen eltűntek anélkül, hogy leírták volna a mechanizmust. Ez késztette az alkotást egyszerű leírás folyamat.
P.S. Ne esküdj túl sokat, nem az volt a célom, hogy szigorúan a helyes terminológiát használva valamilyen tudományos cikket alkossak, hanem hogy segítsek megtenni az első lépést egy nagyon erős XML cseremechanizmus megértése felé.
P.P.S. Rögtön meg kell jegyezni, hogy a cikkhez csatolt letöltési fájl csak egy üres, amely az XML fájl szükséges szerkezetének csak egy részét hozza létre, mert. a munkám ezzel a letöltéssel inkább oktatási jellegű volt (másolja ki az előző export dokumentumot az FCS webhelyén, és töltse le csak az Excel fájlból táblázatos rész Hatékonyabb megoldásnak tűnt az áru), és az időhiány nem tette lehetővé a teljes szerkezet kialakítását, csak perfekcionista megfontolások alapján.

Tehát, miután regisztrált a Szövetségi Vámszolgálat webhelyén, világossá vált, hogy az exportra vonatkozó statisztikai jelentési dokumentumok létrehozásához adatokat kell letöltenie a Kereskedelmi Igazgatóság áruk és szolgáltatások értékesítése dokumentumaiból, és létre kell hoznia egy fájlt a letöltéshez. .

Két lehetőség van a letöltésre.

Először: a táblázatos rész betöltése a Termékek innen Excel fájl(Ezt a lehetőséget választottuk működőképesnek, mert megvolt az az előnye, hogy nem kellett a dokumentum "fejlécének" feldolgozásával bajlódni, hanem egyszerűen átmásolhatta az előzőt, megváltoztatva a "Fejléc"-ben előírtakat. ).

Másodszor: XML-fájl létrehozása az FCS webhelyéről letöltött séma szerint "A dokumentumok elektronikus formáinak formátumainak albuma" formájában. Az album elég nagyszámú XSD sémák. Megtalálták az "Árumozgás statisztikai elszámolási formája" sémáját, ill további fájlok típusleírásokkal hozzá. A sémák az archívum cikkéhez csatolva vannak feldolgozással.

Az XSD-sémák megtekintéséhez az ingyenes Microsoft XML Notepad 2007-et használták.

A képen a fő fájl látható az XSD sémával "Az áruk mozgásának elszámolásának statisztikai formája". A kép kiemeli az XSD-séma főbb blokkjait, amelyek megértéséhez szükséges.

A diagramból látható, hogy a StaticFormType típus "xs: element" ágában megadott struktúrával feltöltött XML fájlt kell kapnunk.

A szerkezet meglehetősen bonyolult lehet (mint esetünkben). Olyan típusleírásokkal, amelyek közvetlenül az ágban vannak, külön ágba kerültek, vagy akár egy másik fájlban találhatók.

Ez a struktúra StaticFormType típusú, amely viszont a BaseDocType alaptípusból, egy objektumkészletből áll. különböző típusokés szöveg attribútumok.

A BaseDocStyle alaptípus leírása egy másik fájlban (és névtérben) található.
.

Ez a fájl sok olyan típust is tartalmaz, amelyeket esetünkben nem használunk.

Most folytassuk az 1C-os munkát. Dióhéjban, amit tennünk kell, az a következő:

1. Az XDTO Factory létrejön

OurXDTOFactory = CreateXDTOFactory(ArrayFullFileNamesWithXSDSchemas);

2. Minden összetett adattípus az XDTO gyárában készül, amit a továbbiakban kitöltünk létrehozott fájl XML:

StaticFormType = MyFactoryXDTO.Type("urn:customs.ru:Information:CustomsDocuments:StaticForm:5.4.0", "StaticFormType");

Az adott típusba tartozó adattípusok a tulajdonságainak gyűjteményéből nyerhetők:

CUOrganizationType = StaticFormType.Properties.Get("Címzett").Típus; NameType = CUOorganizationType.Properties.Get("Szervezetnév").Típus; ShortNameType = CUOrganizationType.Properties.Get("ShortName").Type; LanguageCodeType = CUOrganizationType.Properties.Get("OrganizationLanguage").Type;

3. Amikor minden összetett adattípust létrehozunk, ezek alapján létrehozunk egy XDTO Factory objektumokból álló XML fájlstruktúrát:

StaticFormType_XDTOObject = SajátXDTOFactory.Create(StaticFormType); // gyűjtemény dokumentumokkal NewDocuments = MyXDTOFactory.Create(DocumentsType); NewDocuments.PrDocumentName = MyFactoryXDTO.Create(PrDocumentNameType, "Szállítmánylevél"); NewDocuments.PrDocumentNumber = SajátXDTOFactory.Create(PrDocumentNumberType, "123-szám"); NewDocuments.PrDocumentDate = MyXDTOFactory.Create(PrDocumentDateType, "2014-10-05"); StaticFormType_XDTO.Documents.Add(NewDocuments);

Ezzel egyidejűleg kitöltjük az elemi (egyszerű típusok) adatokat.

4. És végül mindent kirakunk az XDTO Factoryból egy fájlba:

XMLFile = Új XMLWriter(); FileXML.OpenFile(Fájlnév); FileXML.WriteDeclarationXML(); MyXDTOFactory.WriteXML(XMLFile, StaticFormType_XDTOObject); FileXML.Close();

P.S. Az archívum egy üres XML-fájlt tartalmaz (csak néhány részlet jön létre, amelyek tükrözik a fájl kitöltésének minden esetét) és XSD-sémákat.

Csomagolja ki az összes fájlt valamilyen könyvtárba.

XML jön létre benne.

Az a hiba, amely szerint a fájl nem egyezik az XSD-sémával, gyakori, amikor a rendszer nem tud adatokat olvasni a jelentésből. Általában az ilyen hibák gyakran előfordulnak az emberekben, és meglehetősen könnyű kezelni őket.

Először is meg kell értenie, hogy mit jelent az XSD séma, hogy megértse, pontosan minek nem felel meg a fájl.

Tehát az XSD programozási nyelv, leírja a jelentés felépítését. A struktúra tartalmazza például a jelentés tartalmának paramétereit, típusát, típusát, valamint adatszintaxist, információkat tartalmazó szakaszokat.

Kiderült, hogy az XSD séma az a jelentés szerkezetének leírása valamelyik programozási nyelven készült. Ha helytelen információt adunk meg a jelentésben, akkor az egyszerűen olvashatatlan lesz a séma számára, ezért a rendszer hibát jelez, hogy a fájl nem egyezik az XSD sémával.

Ez azt jelzi, hogy az Ön által megadott információ nem olvasható a programozási nyelvben, ezért a program hibásnak ismeri fel.

Meg kell jegyezni, hogy ez a probléma ennek eredményeként merülhet fel hibásan megadott adatokat(például hibát követett el a szervezet TIN-jének megadásakor), valamint az adatbevitel helytelen formátuma miatt (például extra szóközt vagy kötőjelet jelölt meg).

Azonban nem ez az egyetlen oka annak, hogy egy fájl nem egyezik az XSD-sémával. Ez a hiba Előfordulhat az is, hogy a bejelentést készítő program elavult verziója van telepítve a készülékére, illetve az is, ha a programfrissítés nincs telepítve magára az adóhatóságra.

Az XSD-séma hibáinak megoldásához ezt kell tennie ellenőrizze az összes adat helyességét, amit beírt, valamint annak tisztázására, hogy megjelent-e frissítése annak a programnak, amelyben dolgozik. Mielőtt azonban ellenőrizné a fájlt, alaposan nézze meg a hiba szövegét, amelyet ad.

Az a tény, hogy bizonyos esetekben a fájl nem egyezik a sémával szöveg után kettőspont jelenik meg, majd megjelenik a probléma oka. Ha az ok nem szerepel magában a hibában, frissítse a programot a legújabb verzióra.

A frissítés befejezése után próbálja meg újra elküldeni a jelentést. Ha a fájl frissítése után ismét hibaüzenetet ad, akkor meg kell tennie keress benne problémát. Ha az 1C programban dolgozik, akkor ellenőrizheti a fájlt egy speciális „ellenőrzés az interneten” gombbal.

Ha az előző két bekezdés nem segített a probléma azonosításában, akkor ellenőrizze, hogy minden kötelező mezőt kitöltött-e, minden adatot helyesen írt-e be, mert sokat kell számokkal kitölteni, ebben az esetben nagyon könnyű elgépelést csinálni.

Ezenkívül minden mezőben ellenőriznie kell, hogy nincsenek-e benne szóközök, kötőjelek és egyéb karakterek. Ha a teljes fájlt ellenőrizte, és nem talált hibát, vagy sikerült hibát találnia, de semmilyen módon nem tudja kijavítani, akkor feltétlenül lépjen kapcsolatba a műszaki támogatással a program, amellyel jelentést készít, vagy annak fejlesztőinek.

A probléma megoldásához a programfejlesztők segítségével el kell küldenie néhány dokumentumot, például magát a fájlt, amelyben a jelentés található, vagy az értesítési protokollt, amelyet a számítógép ad.

Ezenkívül a fejlesztők kérhetnek Öntől néhány információt a szervezetéről, valamint egyéb, általuk szükségesnek tartott információkat, ezeket Önnek meg kell adnia, különben a probléma nem oldódik meg.

Tehát, ha megpróbál jelentést benyújtani az adóhatóságnak, de a fájl olyan hibát ad, hogy nem egyezik az XSD sémával, ez azt jelenti, hogy a jelentés nem küldhető, mert a program nem tudja beolvasni a beírt adatokat.

De nem szabad pánikba esni, mert a legtöbb esetben ez a probléma egészen egyszerűen megoldvaés gyorsan. Ezen kívül, ha időben elküldted a jelentést, de a rossz formátum miatt nem fogadták el, akkor az adó pénzbírságra nem jogosult azért, mert nem nyújtotta be időben a jelentést. Először is figyeljen magára a hiba szövegére, talán ott már fel van tüntetve az előfordulásának oka.

Valójában csak két oka lehet. Vagy telepítette a készülékére régi verzió programokat, mellyel feljelentést teszel, ilyenkor könnyen megoldható a probléma, csak le kell tölteni a legtöbbet Utolsó frissítés, általában az Ön által használt program weboldalán találhatja meg. A második ok az lehet, hogy bizonyos adatokat rosszul töltöttél ki, vagy egyáltalán nem töltöttél ki egyetlen mezőt sem.

Ebben az esetben ellenőriznie kell a fájlt, miközben emlékeznie kell arra, hogy a program akár hibának is tekintheti páratlan tér . Ha nem találja a hiba okát, felveheti a kapcsolatot technikai támogatás programokat, ott a szakértők biztosan segítenek megoldani a problémát.

Az XML formátum nagyon népszerű a különféle cserékben szöveges dokumentumok között információs rendszerek. A dokumentumok egyedi szerkezetének létrehozása lehetővé teszi, hogy számos területen használható legyen - digitális könyvtárak, WEB, import/export és még sok más. Az ezzel a formátummal való kényelmes munkavégzés lehetősége nélkül az 1C rendszerek nem lettek volna képesek ilyen népszerűségre szert tenni. Mivel az 1C aktívan használ WEB-technológiákat, minden fejlesztőnek képesnek kell lennie az XML olvasására és az információk írására.

XML fájl ábrázolása és olvasása

Az XML jelölőnyelv egyik legfontosabb előnye a meglehetősen kényelmes és intuitív szerkezet és szintaxis. Létrehozásakor a szerzők egy olyan jelölőnyelv létrehozását tűzték ki célul, amely ember és számítógép számára is könnyen olvasható. A mai napig az XML-t széles körben fejlesztették más formátumokká, de továbbra is népszerű és széles körben használt. Az XML fájl szerkezete a következő séma szerint épül fel:

Az adatok 1C-be történő importálására példaként a fenti fájl elegendő. Ahhoz, hogy az írott eljárás be tudja olvasni az XML fájlt, elég magának a fájlnak az elérési útját átadni benne. Ez megtehető az interfészen keresztül, lehetővé téve a felhasználók számára, hogy maguk határozzák meg a fájlt, vagy a feldolgozási szövegbe beírva.

Az 1C-ben 100 MB-ig terjedő XML-lel való munka egyik népszerű módja a dokumentumobjektum-modell (DOM) használata. Jelentése a dokumentum XML-ben ábrázolt összes csomópontjának szekvenciális feldolgozása. A beépített 1C nyelvben ez az algoritmus így néz ki:

  1. Az XML-fájl olvasási mechanizmusainak deklarálása; Hurok a csomópontok áthaladásához;
  2. Adatok és attribútumok olvasása egy csomópontban;
  3. Információ kimenet. Ha szükséges, ebben a szakaszban előfordulhat változókba vagy azonnal a szükséges táblákba írás;
  4. A mechanizmus befejezése.
&AtServer eljárás ReadAtServer(PathToFile) //Mechanizmusok deklarációjaReadMechanism = Új XMLReader; ReadMechanism.OpenFile(PathToFile); Builder = új DOM-készítő; Dokumentum = Builder.Read(ReadMechanism); //hurok a csomópontok bejárásához Minden elemhez From Document.DocumentElement.ChildrenNodes Loop //adatok olvasása If element.NodeName = "Termék" Akkor termék = elem; Minden egyes értékhez From Product.ChildNodes Loop If values.NodeName = "Név", akkor Név = értékek; Color = Name.Attributes.GetNamedElement("Color"); ElseIf values.NodeName = "Ár", akkor Költség = értékek; Pénznem = Cost.Attributes.GetNamedItem("Pénznem"); EndIf; EndCycle; //output messages Report("Név: " + Név.Szövegtartalom + "; szín: "+Szín.Érték +"; Ár: "+Költség.Szövegtartalom + "; Pénznem: "+Pénznem.Érték); EndIf; EndCycle; //a mechanizmus bezárása Vége eljárás

Ennek eredményeként üzeneteket jelenítünk meg a felhasználónak az importált adatokkal. Az összes adatot a kívánt struktúrába is elhelyezheti, és ez alapján programozhatja a dokumentum vagy bejegyzések létrehozását a könyvtárban. Az 1C sebessége xml-lel meglehetősen nagy, ezért ezt a formátumot egyre gyakrabban használják más forrásokkal való adatcserénél.

Az információk feltöltéséhez fájlokkal is kapcsolatba kell lépnünk XML formátum. Vegyünk egy példát egy rekordra, amely az 1C WriteXML platform objektumot használja, és töltsük fel az adatokat a nómenklatúra szerint. Fő előnyei a kód egyszerűsége és az adatfeldolgozási sebesség. Az XML-fájl írására szolgáló szerveralgoritmus több egymást követő lépésben ábrázolható:

  1. Csatlakozunk az xml fájlhoz;
  2. Fejelemeket hozunk létre, és adatokat írunk rájuk. Ha nagy mennyiségű információt szeretne kirakni egy XML-fájlba, akkor ebben a szakaszban ciklusokat fog használni. Ügyeljen arra, hogy ne felejtse el, hogy az adatkérést a ciklus előtt kell megtenni, nem abban;
  3. Bezárjuk a fájlt.
//nyissa meg a Nomenclatura.xml fájlt és írja be a fejelemet WriteToFile = Új WriteXML(); WriteToFile.OpenFile("D:\Nomenclatura.xml", "UTF-8"); WriteToFile.3writeStartItem("Áruk"); //kiválasztjuk a rekord adatait SelectionFromDirectory = Directories.Nomenclature.Select(); //ciklus, amelyben a rögzítés megtörténik SelectionFromDirectory.Next() ciklus közben //új adatok írása WriteToFile.WriteItemBeginning("Elem"); WriteToFile.WriteAttribute("Név", SelectionFromCatalog.Name); WriteToFile.WriteAttribute("Kezdeti ár", String(SelectionFromCatalog.InitialPrice)); WriteToFile.WriteEndElement(); EndCycle; //Zárja be a head elemet és a WriteToFile.WriteEndElement(); WriteToFile.Close();

XDTO mechanizmus 1C-ben

Az 1C cég fejlesztői létrehozták saját mechanizmusukat az XML-en keresztüli információcserére - XDTO (XML Data Transfer Objects). A 8.1-es verziótól kezdve a platform képes adatot cserélni más rendszerekkel anélkül, hogy belemélyedne az XML-fájl generálásával kapcsolatos kérdésekbe. A technikai kérdések nagy részét az 1C intézi, és csak az XML kialakításához szükséges adatokat kell megadnunk. Igaz, ehhez a fejlesztőnek előzetesen el kell végeznie néhány manipulációt.

Egy XML fájl XDTO használatával történő betöltéséhez meg kell mondanunk az 1C-nek a fájl szerkezetét. Egy sor sémán keresztül továbbítják, amelyeket szövegszerkesztőben hozhat létre, vagy használhat speciális programot. Az eredmény egy leíró fájl legyen átfogó szerkezetés az XML fájlban használt adattípusok. Új XML olvasása vagy írása előtt a fejlesztőnek be kell töltenie a sémáját az "XDTO-csomagok" szakaszban található konfigurációba.

Ebben az esetben a kezünkkel készítünk egy egyszerű csomagot, hogy az 1C megértse például a fájlunk szerkezetét. Ahhoz, hogy a fájlgenerálás sikeres legyen, tükröznünk kell a sémában, hogy van egy fejelemünk és egy attribútumokkal ellátott mellékletünk. A létrehozott sémát xsd fájlba kell exportálni, és át kell vinni az xml-lel együtt, hogy a másik oldalnak ne kelljen foglalkoznia a szerkezettel és újra létrehozni az xdto csomagot.


Új XML mentése ide HDD az előzőhöz hasonló szerveroldali algoritmus segít. Az egyetlen különbség az, hogy 1 termék adatait kell hozzáadni az XDTO gyárhoz - ez a 8.3 1C platform speciális mechanizmusa. Ha több szintű beágyazásra van szükség, le kell írnia minden egyes fejelemet.

//Nyissa meg az XML fájlt WriteToFile = Új WriteXML; WriteToFile.OpenFile("D:\Nomenclatura.xml", "UTF-8"); //Adja meg 1C, hogy milyen típusú adatokat kell létrehozni - head elem AllProducts = FactoryXDTO.Create(FactoryXDTO.Type("http://wiseadviceXML.org","Termékek")); //feltöltendő adatok kiválasztása SelectionFromDirectory = Directories.Nomenclature.Select(); //Egyes termékek hozzáadása a fejelemhez ByeDirectory Selection.Next() loop Product = XDTO Factory.Create(XDTO Factory.Type("http://wiseadviceXML.org","Termék")); Product.Description = SelectionFrom the Directory.Description; Product.InitialPrice = String(SelectionFromDirectory.InitialPrice); AllProducts.Add(Termék); EndCycle; //írja az adatokat és zárja be a fájlt FactoryXDTO.WriteXML(WriteToFile, AllProducts); WriteToFile.Close();

A figyelembe vett mechanizmusok meglehetősen univerzálisak és helyes beállítás meg tudja oldani a legtöbb problémát. Az 1C és az XML közötti interakcióban azonban sok árnyalat van. Sokkal hatékonyabb ezeket valós körülmények között tanulmányozni, és nem tesztfeladatokon, amelyekben egy XML fájl feldolgozása meglehetősen szűk feladatokat old meg.

Platformok: 1C:Enterprise 8.3, 1C:Enterprise 8.2, 1C:Enterprise 8.1
Konfigurációk: Minden konfiguráció

2012-11-25
34938

Az XDTO egy olyan mechanizmus, amelyre szükség van a webszolgáltatások létrehozásához és futtatásához. Az XDTO-csomagok leírják a szükséges XML-fájl szerkezetét, amely szükséges az adatok XML-ről és XML-re történő módosításához.

Az XML egy módja annak, hogy bonyolult adatstruktúrát írjunk le egy közönséges szövegfájlban. Nemcsak magát az adatokat írja le, hanem azokat a mezőket is, ahol azokat tárolják.
Íme egy példa egy egyszerű XML fájlra:

XML a dumákhoz

-ban használt nevek (címkék). adott fájl- gyökér, lista, név, el - teljesen tetszőleges lehet. Az XML-fájl létrehozásának alapvető szabályai azonnal láthatók a struktúrájából:
- Lehetőség van elemek egymásba ágyazására;

Elem kezdete<Имя>, a végződés ugyanaz a név, de a "/" karakter hozzáadásával.

Egy elem lehet:
- Beágyazott elemek;
- Szöveg.

Minden elemnek lehetnek tulajdonságai (attribútumai), van értéke és neve. XML-ben tilos bármilyen karaktert használni, mert ezek közül többet közvetlenül XML-hez használnak, például "<» и «>". Az XML-ben való leírás módja nagyon kényelmes a másokkal való csere során harmadik féltől származó programokés az 1C adatcsere-mechanizmusban használják.

Névtér

Az XML-fájl fejléccel kezdődik, amely leírja az XML-verziót, a kódolást stb. Az XML-fejléc nem feltétlenül szükséges, és nagyon gyakran egyszerűen nem használják. A fejlécben lehetőség van - névterek megadására is.

Az XML-fájlok továbbítása az interneten keresztül történik, és számos különböző program elfogadja őket. Érzékelt - ez azt jelenti, hogy a kódjuk védelemmel rendelkezik - ha találkozik egy bizonyos elemnévvel az XML fájlban, akkor ezt így kell érzékelnie, és ezt kell tennie. Ezért, amikor az IBM címkét használjuk, elég nagy az esélye annak, hogy egy másik program azt gondolja, hogy ez az általa ismert IBM, miközben mi a sajátunkra gondoltunk.

Ennek megelőzése és az IBM és az összes többi közötti különbség egyértelmű jelzése érdekében lehetőség van a fájlban a névtér nevének megadására - ez az előtag az elemek neve előtt.

Egy névteret (névteret) a következőképpen határozhat meg - xmlns: Előtag (NameSpace) = “URL”, példa:
xmlns:store = "http://site.ru"

Miért van szükség URL-re? Aki már gondolkodott és tovább néz - persze az általunk kitalált névtér sem lehet egyedi, pl. bárki más is használhatja. Ezért van megadva egy speciális egyedi azonosító, amely egyben meghatározza a névtér végrehajtóját is.

Ebből természetesen az következik, hogy a névteret megadó személy rendkívül őszinte. Saját webhelyére mutat, és nem használ több különböző névteret egy webhelyen. Általános szabály, hogy mind a webhely URL-címe, mind egy adott mappa URL-címe meg van adva, így lehetőség van egy másik névtér létrehozására a webhely bármely mappájában, bármilyen helyzetben használható.

DOM

Az objektum egy meghatározott adatstruktúra, amely önellátó és tartalmazza az összes adatát.

Tekintettel arra, hogy az XML fájlban található a strukturált adatok leírása, azaz az adatok olyan struktúra formájában, amelyek saját tulajdonságokkal és így tovább, objektumként tekinthetők meg. A vizsgált példában egy tulajdonságokkal rendelkező LIST objektum és egy beágyazott elem használható.

A DOM egy módja annak, hogy egy XML-fájlt ne egy adott formátumú szövegként, hanem mezőket, tulajdonságokat és egyebeket tartalmazó objektumok halmazaként tekintsünk meg.

Hátrányok szerint ez a módszer dolgozik, jelentkezik magas követelmények a PC teljesítményére, mint A DOM egyszerre dolgozza fel (objektumok formájában struktúrát alkot) a teljes XML-fájlt, méretétől függetlenül, és egyszerűen nem tudja "megemészteni" a nagy (4 GB-nál nagyobb) fájlokat.

A nagy fájlok elemzéséhez a SAX-ot használják, ez a fájlelemzési módszer a fájl szekvenciális beolvasásán alapul, és nem a teljes szerkezetének egyidejű felépítésén. .

Az XML fájl leírása

Ha állandóan egy adott szerkezetű fájlt használunk két program közötti cseréhez, akkor valószínűleg a következőket szeretnénk:

Használt konkrét címeket;
- Csak azokat az elemeket használjuk, amelyeket elvárunk (amelyeknek "létezniük kell a cserében való használathoz");
- Hogy csak az általunk elvárt típusok (szám, karakterlánc stb.) legyenek feltüntetve az attribútumokban.

Az XML-struktúra leírásához a következő fájlformátumok állnak rendelkezésre (sima szöveges fájlban is tárolva):

A DTD kiterjesztése Dokumentumtípus-meghatározás;
- Az XSD kiterjesztése XML Shema.

Ezek a formátumok leírják, hogy milyennek kell lennie a dokumentumnak. Az ilyen szabványos fájlban leírt XML-megfelelőség-ellenőrzési eljárást ellenőrzésnek nevezzük.

XDTO

Az XDTO egy 1C objektum, amely lehetővé teszi XML fájlleírás hozzáadását a konfigurációhoz. Pontosabban nem magát a fájlt írják le, hanem bizonyos XML-struktúrákat.

A használható típusok jelzésére - listát, típuskönyvtárat használnak - az XDTO gyár néven. Ez a gyár nem csak egyszerű típusok(dátum, karakterlánc, szám), amelyeket más programokban, nyelveken stb. használnak, de az 1C-ben és egy bizonyos konfigurációban használt 1C típusokat is.

Az XDTO gyár több csomagot is tartalmaz. A kezdeti típusokat egy csomag írja le www.w3.org A konfigurációban szereplő adattípusok leírása a csomagban található http://v8.1c.ru/8.1/data/enterprise/current-config

Ezek a típusok a konfigurátorban található nevek szerint vannak elnevezve az angol űrlap hozzáadásával (CatalogRef, DocumentObject, CatalogObject, DocumentRef), például:

CatalogObject.Accounts

XDTO-csomag hozzáadása

Elérkeztünk az XSLT témájához, amely egy módja annak, hogy az XML-fájlokat valami mássá, például HTML-fájlokká alakítsuk. Az XML témája rendkívül kiterjedt, és nem egy könyvet írtak már róla.

Feladatunk annak megértése, hogy az XDTO lehetővé teszi azoknak az elemeknek a leírását, amelyeknek az olvasandó vagy generálandó XML-csomagban kell lenniük. Az XDTO csomagok az 1C konfigurációban és az Általános ágban - XDTO csomagok találhatók.

Az 1C-hez kézzel is hozzáadhat XDTO-csomagot, de a legjobb, ha a megfelelő XSD fájlt kész Részletes leírás rendszer. Bármely konfigurációjú XSD objektumok sémájának leírását az Általános - XDTO-csomagok ágra kattintva és a menü "Configuration data séma XML exportálása" menüpontot választva kaphatja meg.

Ez szöveges fájl, szerkesztheti Windows jegyzettömb, miközben eltávolítja a felesleges tárgyakat (az Ön számára felesleges). Lehetőség van kész XSD séma hozzáadására az 1C-hez, ha a jobb gombbal az Általános - XDTO csomagok ágra kattintunk, és a menüből kiválasztjuk az "XML séma importálása" menüpontot.

Az XDTO-val való munkavégzés az 1C-ben az értékek XML-ből XML-be történő átalakítása. Ez az 1C nyelv objektumaival történik XML/XMLWriting olvasása.

Ha az XDTO-val dolgozik, meg kell adnia azt a csomagot, amellyel közvetlenül dolgozik. Ez lehet egy általános csomag (lásd a fenti vitát, XDTO), vagy a konfigurációhoz hozzáadott csomag.

A csomagot a csomagban megadott URL azonosítja. Két fő munkamódszer létezik – ezek:

Sorozatosítás - automatikus változásértékek XML-től 1C-ig és fordítva;

Egy objektum mezőinek kitöltése, létrehozása és XML-be írása (valamint XML-ből olvasás, mezőinek további olvasása).

Képzeljünk el egy példát az értéksorosításra:

Serializer = Új XDTO Serializer (XDTO Factory);
XML fájl = Új XML Write();
XMLFile.OpenFile("Fájlnév");
Serializer.WriteXML(XMLFile, 1C érték);

Inverz függvény - Sorosozó. XMLReading(), a ReadingXML nyelv 1C objektumaiból használatos.
Példa egy objektum írására/olvasására:

XDTOObject könyvtár = FactoryXDTO.Create(XDTOFactory. Type("http://v8.1c.ru/8.1/data/enterprise/current-config", "CatalogObject.Contractors"));
Töltse ki az inPropertyValues(XDTOObject Directory, Directory.Counterparties.FindBy Attribute("Név", "Ivanov).Link);

Ezután a létrehozott objektumot pontosan ugyanúgy írhatja XML-be, mint a szerializálást. Ha az XML-t a fentebb leírt módon olvassuk, akkor nem XDTO érték adható vissza, hanem egy ilyen objektum.

Az XDTO objektum létrehozása során a konfigurációs objektum szerkezetéhez hasonló struktúra jön létre (kivéve persze, ha a konfigurációs objektumot a fenti példában megadott csomagból hozza létre). A tipikus mezők (név, kód stb.) angol nyelvűek, és az objektum üresen jön létre, ezért minden mezőhöz külön vagy a függvény használatával kell kitölteni. FillPropertyValues