Import feronerie din XML – ghid pentru producători

<< Click to Display Table of Contents >>

Navigation:  WinArhi > Fereastra principala > Oferte si Comenzi deschise > Meniu > Optiuni > Editare Feronerie >

Import feronerie din XML – ghid pentru producători

Import feronerie din XML – ghid pentru producători

BrowseBlueLeft BrowseBlueRight

 

Acest capitol se adresează producătorilor și furnizorilor de feronerie care vor să le livreze clienților care lucrează cu WinArhi articolele și seturile de feronerie generate direct din sistemele proprii, fără introducere de mână, precum și utilizatorilor WinArhi care importă fișierele primite. Nu este nevoie să cunoașteți WinArhi: tot ce trebuie să conțină fișierele este descris aici și în capitolele Formatul XML al articolelor de feronerie și Formatul XML al seturilor de feronerie, iar schemele XSD și programul WinArhiXmlCheck de mai jos permit verificarea automată a fișierelor înainte de trimitere.

 

WinArhi folosește două fișiere XML, amândouă în formatul 2:

 - fișierul de articole (Content="HardwareArticles") – catalogul de articole de feronerie al bazei de date: cod, marcă, denumire, culoare, unitate de măsură, preț, valută, tip articol, date de desen, cotele blocatorilor, diagrama de greutate a balamalelor etc. Catalogul este comun tuturor seriilor de profile. Se importă în fereastra Editare Feronerie, fila Articole, meniul Articole > Importă din format XML;

 - fișierul de seturi (Content="HardwareSets") – seturile de feronerie ale unei serii de profile: pentru fiecare tip de deschidere, destinație (fereastră sau ușă), marcă și denumire de set, rândurile setului cu articolele lui, domeniile de dimensiuni ale cercevelei (rândurile XY), pozițiile pe laturi și blocatorii. La fiecare cercevea, WinArhi folosește setul ales pentru ea (deschidere, destinație, marcă și denumire de set; utilizatorul îl alege sau îl primește din Setări implicite la creare), verifică dacă falțul cercevelei intră în domeniul rândurilor XY și pune în consum, preț, desen și comenzile numerice articolele din rândurile care i se potrivesc (dimensiuni, stânga/dreapta, culoare, funcții). WinArhi nu trece singur de la un set la altul după dimensiuni: domeniile de dimensiuni se scriu în rândurile setului, nu ca seturi separate. Se importă în seria de profile selectată în fila Seturi, meniul Seturi > Importă seturi din format XML.

 

WinArhi scrie aceleași fișiere la export (Articole > Exportă în format XML și Seturi > Exportă seturi în format XML), așa că formatul servește și la mutarea feroneriei între două baze de date WinArhi.

 

Fișierele în formatul 2 se importă corect numai cu WinArhi 2026.0.81 sau mai nou. O versiune mai veche nu le refuză cu un mesaj clar: WinArhi 2026.0.80 le importă fără nicio verificare, fără raport și fără confirmare și pierde, la articole, atributele MountingLocation, MinLength, MinLength2, AccessoryFunctions, GroupInwardOpening, GroupOutwardOpening, ColourVariantCodes, Category1 .. Category5 și ImageFile, iar versiunile anterioare nu le pot importa deloc (vezi Versiunile formatului).

 

       Fișiere de descărcat

Fișier

Conținut

WinArhi-HardwareXML-v2.zip

Arhiva ZIP cu cele două scheme și cele două exemple din rândurile următoare. Un clic pe legătură o descarcă; dezarhivați-o pentru a folosi fișierele.

WinArhi-HardwareArticles-v2.xsd

Schema XML (XSD 1.0) a fișierului de articole: numele elementelor și atributelor, tipurile, lungimile maxime și valorile acceptate. Comentariul de la începutul schemei rezumă regulile de scriere și ce nu poate verifica schema.

WinArhi-HardwareSets-v2.xsd

Schema fișierului de seturi, cu același fel de comentariu.

WinArhi-HardwareArticles-example.xml

Exemplu de fișier de articole, valid pentru schemă: un mâner, un cremon cu două cote de blocatori, un blocator și o balama cu diagramă de greutate.

WinArhi-HardwareSets-example.xml

Exemplu de fișier de seturi, valid pentru schemă: un set oscilo-batant de fereastră (Opening="TTX") care folosește articolele din exemplul de articole – un rând XY, mânerul, cremonul cu blocatorii lui și balamalele cu verificarea diagramei de greutate.

WinArhiXmlCheck.zip

Programul WinArhiXmlCheck, pentru Windows: verifică un fișier de seturi sau de articole în linia de comandă exact ca importul WinArhi, fără WinArhi și fără o bază de date WinArhi (vezi Verificarea cu WinArhiXmlCheck).

Un clic pe o arhivă ZIP o descarcă. Schemele și exemplele se descarcă numai în arhiva WinArhi-HardwareXML-v2.zip. Dacă legăturile nu funcționează, cereți fișierele utilizatorului WinArhi sau firmei DualSoft.

Codurile, marca și prețurile din exemple sunt inventate. Importați întâi exemplul de articole, apoi pe cel de seturi: rândurile seturilor își iau denumirea și culoarea din articole. Valorile MU, Currency, ConsumptionCategory și Colour din exemplu trebuie să existe în baza de date în care îl importați; altfel importul le semnalează cu avertismente. Schemele sunt generate de WinArhi din aceeași listă de coloane pe care o folosesc importul și exportul, deci descriu exact ce scrie exportul în formatul 2 și ce trebuie să conțină un fișier de producător; importul acceptă, în plus, și fișierele vechi (vezi Validarea). Nu modificați schemele.

 

       Ordinea de lucru

1. Stabiliți împreună cu utilizatorul WinArhi, înainte de a genera fișierele:

 - marca sau mărcile (Mark) sub care apar seturile, scrise exact: marca face parte din cheia setului, iar în fila Furnizori a utilizatorului trebuie să existe o marcă scrisă identic (importul o poate adăuga, după o întrebare);

 - denumirile culorilor de feronerie (Colour): WinArhi pune un articol colorat doar la cercevelele a căror culoare de feronerie este scrisă exact la fel, inclusiv literele mari și mici; culorile de feronerie ale utilizatorului sunt cele din coloanele Culoare Feronerie și Culoare fixă feronerie ale tabelului Culori. Un articol fără culoare se folosește la orice culoare;

 - valuta prețurilor (Currency), unitățile de măsură (MU) și categoria de consum (ConsumptionCategory), care trebuie să existe în baza de date a utilizatorului;

 - limba textelor (denumirile articolelor și ale seturilor, culorile): WinArhi nu le traduce, așa că se scriu în limba de bază a bazei de date a utilizatorului (de regulă româna), iar culorile exact ca în tabelul lui de culori;

 - seriile de profile pentru care livrați seturi: domeniile de dimensiuni ale seturilor depind de sistemul de profile (falțul cercevelei), așa că se face câte un fișier de seturi pentru fiecare serie;

 - versiunea WinArhi a utilizatorului, care trebuie să fie 2026.0.81 sau mai nouă: o versiune mai veche nu refuză fișierele cu un mesaj clar, ci le importă fără verificări sau nu le poate importa deloc (vezi Versiunile formatului).

2. Generați fișierul de articole, cu toate articolele pe care le folosesc seturile: articolele din rânduri, blocatorii, prelungirile de cremon și membrii grupelor. Păstrați codurile de cel mult 20 de caractere: rândurile seturilor au, în aproape toate bazele de date, coloana de cod de 20 de caractere, chiar și acolo unde tabelul de articole acceptă coduri mai lungi.

3. Generați câte un fișier de seturi pentru fiecare serie de profile.

4. Validați ambele fișiere cu schemele XSD și verificați-le cu WinArhiXmlCheck înainte de trimitere (vezi Validarea și Verificarea cu WinArhiXmlCheck; fișierul de seturi se verifică împreună cu fișierul de articole, cu --articles), apoi trimiteți-le împreună cu nota de însoțire.

5. Utilizatorul importă întâi articolele: în Editare Feronerie, fila Articole, meniul Articole > Importă din format XML; citește raportul, confirmă importul, apoi salvează articolele cu Salvează ... articole.

6. Apoi importă seturile: în fila Seturi selectează seria de profile și alege Seturi > Importă seturi din format XML, câte un fișier de seturi pentru fiecare serie. Mărcile din fișier care lipsesc din Furnizori sunt adăugate după o întrebare.

7. Utilizatorul verifică rezultatul: deschide o ofertă cu cel puțin o fereastră (comenzile Verifică funcții de legătură au nevoie de ea), apoi rulează Seturi > Verifică funcții de legătură, Seturi > Verifică opționalele (când seria are opționale de feronerie), Articole > Verifică funcții de legătură și Articole > Verifică articolele din grupe; completează în Listă seturi setările pe care fișierul nu le transportă (vezi Ce nu conțin fișierele), permite deschiderile noi la Deschideri permise, dacă e cazul, și creează o fereastră de probă.

8. Corecturi: dacă raportul importului are erori sau avertismente, utilizatorul îl salvează în engleză (clic dreapta în fereastra Mesaje, Salvează în fișier, în engleză) și vi-l trimite. La o eroare fatală nu se deschide fereastra Mesaje, ci un singur mesaj de eroare, în limba programului: utilizatorul copiază textul lui (Ctrl+C în fereastra mesajului) și vi-l trimite; mesajul numește locul și motivul problemei. Retrimiteți fișierele corectate: la un nou import, seturile și articolele identice cu cele din baza de date nu sunt atinse, iar celelalte se înlocuiesc, respectiv se modifică. Un set reimportat înlocuiește complet setul din serie, așa că modificările făcute de utilizator în rândurile lui (condițiile din Functions, cantitățile, rândurile adăugate sau șterse) se pierd: retrimiteți numai seturile care s-au schimbat și numiți-le în nota de însoțire.

 

Un bun punct de pornire este un export din WinArhi (cereți utilizatorului un fișier scris cu Exportă în format XML și unul cu Exportă seturi în format XML): el arată numele exacte ale atributelor și forma valorilor. Exportul scrie însă toate coloanele bazei de date, inclusiv pe cele completate de utilizator (cele mai multe au nume românești, dar și DiscountPercent, OtherTaxesPercent și DrawingType4) și coloanele proprii ale acelui client, iar în fișierul de articole un atribut gol golește valoarea la import. Păstrați doar atributele pe care le completați dvs. (vezi Coloanele completate de utilizator).

 

       Reguli generale ale fișierelor

 - XML 1.0 corect format. Codificarea recomandată este UTF-8, cu sau fără BOM; WinArhi citește și UTF-16 cu BOM și codificările declarate în antet pe care le cunoaște Windows (de exemplu windows-1250 sau ISO-8859-2). Începeți fișierul cu declarația <?xml version="1.0" encoding="UTF-8"?> (obligatorie doar pentru altă codificare decât UTF-8 sau UTF-16).

 - Rădăcina este elementul Base, cu atributele obligatorii FormatVersion="2" și Content: HardwareArticles pentru articole, HardwareSets pentru seturi. Un fișier conține un singur fel de date. Elementele nu au spațiu de nume: fără xmlns="..." implicit și fără prefixe pe elemente. Declarația xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" și atributul xsi:noNamespaceSchemaLocation pe Base sunt permise și ignorate.

 - Numele elementelor sunt fixe și se scriu exact așa, cu literele mari și mici din structura de mai jos:

  <?xml version="1.0" encoding="UTF-8"?>

  <Base FormatVersion="2" Content="HardwareArticles">

    <Record Code="..." ...>

      <WeightChart>

        <WeightChartRecord KgPerMP="..." X0="..." Y0="..." .../>

      </WeightChart>

    </Record>

  </Base>

 

  <?xml version="1.0" encoding="UTF-8"?>

  <Base FormatVersion="2" Content="HardwareSets">

    <Set Opening="..." WD="..." Mark="..." HardwareSet="...">

      <SetRecord Code="..." Qty="..." .../>

      <SetRecord Code="..." Qty="..." ...>

        <CamLocks>

          <CamLocksRecord DimensionIndex="..." Code="..." .../>

        </CamLocks>

      </SetRecord>

    </Set>

  </Base>

Element

Se află în

Ce reprezintă

Base

–

Rădăcina fișierului; atributele ei sunt în tabelul de mai jos.

Record

Base

Un articol de feronerie (fișierul de articole). Vezi Record.

WeightChart

Record

Diagrama de greutate a articolului, cel mult una. Vezi WeightChart.

WeightChartRecord

WeightChart

O curbă a diagramei: poligonul dimensiunilor de falț ale cercevelei (lățime X, înălțime Y) admise pentru o umplutură de cel mult KgPerMP kg/m².

Set

Base

Un set de feronerie (fișierul de seturi). Vezi Set.

SetRecord

Set

Un rând al setului: un articol sau un domeniu de dimensiuni (Code="XY"); cel puțin unul în fiecare set. Vezi SetRecord.

CamLocks

SetRecord

Blocatorii rândului, cel mult un element. Vezi CamLocks.

CamLocksRecord

CamLocks

Un blocator.

 - Toate datele sunt atribute; elementele nu conțin text. Un text sau o secțiune CDATA într-un Set sau Record refuză setul, respectiv articolul; un text scris direct în Base este ignorat, cu un avertisment.

 - Numele atributelor se scriu exact ca în scheme: literele mari și mici contează. Ordinea atributelor nu contează. Un atribut necunoscut, scris cu alte litere mari sau mici sau pus pe alt element refuză setul, respectiv articolul; raportul propune numele corect (de exemplu Poate "Qty"?). Numele românești ale coloanelor, scrise de exporturile vechi, sunt acceptate cu un avertisment; folosiți numele din scheme.

 - Comentariile (<!-- ... -->) sunt permise oriunde și sunt ignorate, la fel ca instrucțiunile de procesare. Un fișier cu declarație DOCTYPE (DTD) este refuzat.

 - Caracterele speciale din valori se scriu ca referințe: & ca &amp;, < ca &lt;, ghilimelele ca &quot; și apostroful ca &apos; (în valorile delimitate de ele). Un tab se scrie &#9;, iar un rând nou &#10; (sau &#13;&#10;): un tab sau un rând nou scris ca atare într-o valoare de atribut este citit ca spațiu de orice parser XML. Un &#13; singur este păstrat ca CR; nu îl folosiți în valorile de pe un singur rând. De exemplu:

  <Record Code="EXA-H-101" Description="Mâner &quot;Exemplu&quot; &amp; rozetă" .../>

  <Record Code="EXA-E-800" CamLockDimensions1="150&#10;650" .../>

 - Unicitate: în fișierul de seturi, un singur Set pentru fiecare combinație Opening, WD, Mark, HardwareSet; în fișierul de articole, un singur Record pentru fiecare Code. O dublură refuză toate aparițiile ei.

Atributele elementului Base:

Atribut

Obligatoriu

Valoare

FormatVersion

da

2. Un fișier fără FormatVersion sau cu FormatVersion="1" este citit ca format 1 (fișierele vechi ale WinArhi, vezi Versiunile formatului); o versiune mai mare decât 2 este refuzată, cu propunerea de a verifica actualizările; o valoare care nu este un număr întreg pozitiv (de exemplu 2.0) refuză fișierul.

Content

da

HardwareArticles sau HardwareSets. Un fișier de articole dat la importul de seturi, sau invers, este refuzat.

Series

nu

Informativ: seria de profile pentru care a fost scris fișierul de seturi. Când diferă de seria în care se importă, confirmarea importului o afișează.

Generator

nu

Informativ: programul și versiunea care au scris fișierul (de exemplu HWExport 3.2); apare în antetul raportului salvat.

ClientColumns

nu

Scris de exporturile WinArhi: coloanele proprii ale bazei de date sursă, separate prin spațiu. Un fișier de producător nu îl folosește.

Alte atribute ale lui Base sunt ignorate, cu un avertisment.

 

       Scrierea valorilor

Fel de valoare

Se scrie

Nu se acceptă

Număr întreg

Cifre, cu semn opțional: 12, -3, +5. Spațiile de la capete sunt ignorate.

12.0, 1,5, 1 200, 0x10, 1e3, 12 mm; o valoare în afara domeniului atributului.

Număr zecimal

Punct ca separator zecimal, fără separator de mii și fără unitate de măsură: 12.5, -0.75, 1.5E3, 1000.

12,5, 1.200,5, 1,200.5, INF, NaN, 12 mm.

Bifă

X = da, gol ("") = nu. Și x este acceptat (se păstrează așa).

Orice alt caracter unic, în afara celor din coloana alăturată, este păstrat așa cum este: la bifele pe care le citește WinArhi înseamnă tot DA, iar în câteva coloane ale utilizatorului (de exemplu Variabil, FisaMontaj) literele au un sens propriu. Un producător scrie numai X sau gol.

0, N, n, F, f, -, ? (WinArhi citește orice valoare negoală ca DA, așa că un generator care vrea să spună „nu” prin ele ar obține „da”), true, yes, da, XX, doar spații, caractere non-ASCII.

Excepție: în coloanele utilizatorului LivrarePeFer și FisaMontaj, N, respectiv F, sunt păstrate cu un avertisment; un producător nu le trimite.

Valoare dintr-o listă

Codul în engleză, exact ca în schemă și în tabelele capitolelor de format (de exemplu Opening="TTX", WD="Window", Side="Hinge").

Alte valori. Excepțiile (valori păstrate cu un avertisment) sunt precizate la atribut. Importul acceptă și codurile românești ale bazei de date, iar un cod scris cu alte litere mari sau mici îl acceptă cu un avertisment; schema nu. Excepție: Use se compară exact – o altă scriere (de exemplu !group) este păstrată cu un avertisment, dar nu are efectul valorii din listă.

Coduri, Mark, HardwareSet, Colour și celelalte texte de identificare

Exact, fără spații la capete, fără tab și fără rând nou, de cel mult lungimea maximă.

O valoare mai lungă decât coloana din baza de date (setul sau articolul este refuzat); apostroful în Code (articol, rând de set, blocator), Mark, HardwareSet, Colour și Category1 .. Category5; virgula în Colour; tab sau rând nou în Mark și HardwareSet ale elementului Set; * la sfârșitul lui Mark sau HardwareSet ale elementului Set.

Denumiri (Description, SupplierDescription)

Orice text.

Nimic: un text mai lung decât coloana este scurtat, cu un avertisment.

Text pe mai multe rânduri (Functions, listele de coduri, cotele blocatorilor)

Rândurile separate cu &#10;; WinArhi le păstrează ca CR LF.

–

Lungimi. Lungimea maximă din scheme (maxLength) este lățimea obișnuită a coloanei. Unele baze de date au coloane mai înguste sau mai late: importul verifică lățimea reală și numește coloana în raport. WinArhi numără unitățile UTF-16: o literă cu diacritice contează o dată, un caracter din afara planului de bază Unicode (un emoji) contează de două ori.

Forma Unicode. Scrieți textele în forma Unicode NFC, în care o literă cu diacritic este un singur caracter (de exemplu ș). Un text descompus (NFD, litera urmată de semnul diacritic ca un caracter separat) arată la fel, dar are alte caractere: nu se potrivește cu culorile, mărcile și codurile utilizatorului, care se compară exact, și poate depăși lungimea maximă. Nici WinArhi, nici schema nu normalizează textele.

Spații. Textele nu sunt tăiate la capete: spațiile de la început și de la sfârșit rămân în baza de date (cu un avertisment) și fac, de exemplu, din "Standard " alt set decât "Standard". Nu le scrieți.

Gol și absent în fișierul de seturi. Un set înlocuiește complet setul existent cu aceeași cheie, așa că un atribut care lipsește înseamnă același lucru ca un atribut gol, cu excepția atributelor obligatorii din schemă, care se scriu întotdeauna: cheia setului (Opening, WD, Mark, HardwareSet; Opening și WD nu pot fi goale), Code și Qty pe fiecare SetRecord (Qty="" pe rândul XY) și DimensionIndex pe fiecare CamLocksRecord. Lipsa lor refuză setul; importul o trece cu vederea doar la Qty pe rândul XY, pe rândurile fără date și la blocatorii fără Code. Pe un rând de articol, Qty trebuie să fie un număr: Qty="" înseamnă cantitatea 0, iar articolul nu intră în consum și nici în preț; nici schema, nici importul nu semnalează acest lucru.

Pe un rând de set, o valoare goală la Side, Reference, IntExt, Dimension, DimensionPercent, Length, PositioningOrder sau DrawingOrder preia valoarea din articol (la cele numerice, 0 este o valoare și nu preia nimic); celelalte numere goale (de exemplu MinX .. MaxY, MaxWeight) sunt citite ca 0. O pereche Min/Max goală înseamnă „fără condiție”, dar un minim fără maxim face ca rândul să nu intre niciodată, iar un rând XY cu MaxX sau MaxY gol nu se potrivește niciodată: pentru „de la … în sus” scrieți un maxim mare, de exemplu 99999 (vezi Elementul SetRecord și Rânduri speciale).

Gol și absent în fișierul de articole. Un atribut care lipsește păstrează valoarea existentă a articolului (la un articol nou rămâne gol), iar un atribut gol ("") o șterge. WeightChart="" șterge diagrama de greutate, iar un element WeightChart o înlocuiește.

 

       Ce face importul

Cele două importuri lucrează la fel. Tot fișierul este verificat înainte să se schimbe ceva, iar nimic nu ajunge în baza de date înainte de confirmarea utilizatorului. Problemele au trei niveluri:

Nivel

Efect

Exemple

Fatal

Tot fișierul este refuzat, cu un singur mesaj (Fișier incompatibil sau versiune necunoscută!, urmat de locul și motivul problemei); nu se schimbă nimic. La un fișier de celălalt tip (de exemplu un fișier de articole dat importului de seturi), mesajul se încheie cu trimiterea la importul potrivit, de exemplu -> Articole > Importă din format XML.

XML incorect, declarație DOCTYPE, rădăcina alta decât Base, Content greșit (un fișier de articole la importul de seturi), FormatVersion mai mare decât 2 sau care nu este un număr întreg pozitiv.

Eroare

Unitatea este refuzată întreagă: un set cu toate rândurile și blocatorii lui, respectiv un articol cu diagrama lui de greutate. Celelalte unități se importă.

Număr scris cu virgulă, bifă scrisă 0 sau N, deschidere necunoscută, cod mai lung decât coloana, atribut cu nume greșit, Code sau Qty lipsă pe un rând de set, set fără rânduri, cheie sau cod dublat în fișier.

Avertisment

Unitatea se importă așa cum este scrisă, iar problema este listată.

Cod de articol care nu există în catalog, culoare care nu este o culoare de feronerie a seriei, rând care nu intră niciodată (de exemplu MinY mai mare decât MaxY), denumire scurtată, marcă nouă.

Raportul. Când fișierul are probleme, se deschide fereastra Mesaje: lista Erori are câte o intrare pentru fiecare set sau articol refuzat, cu motivele lui (în fereastră primele 10, toate în raportul salvat) și cu poziția în fișier (linie:coloană), iar lista Avertismente grupează problemele pe tipuri, cu numărul lor și cu valorile distincte. De exemplu, un set refuzat pentru o cantitate scrisă cu virgulă:

  Set 012 (348:3) [TTX|Window|ExampleHW|Standard]

    01. SetRecord 03 (351:5) ItemNo=20 Code="EXA-E-800": Qty="1,5": se așteaptă un număr scris ca 12.5, -0.75, 1.5E3, fără virgulă zecimală, spații, separator de mii sau unitate de măsură

Clic dreapta pe o listă: Salvează în fișier scrie raportul complet (fără limita de rânduri a ferestrei, în ordinea din fișier), iar Salvează în fișier, în engleză scrie același raport în engleză, pentru producătorul care trebuie să corecteze fișierul (comanda apare când traducerea în engleză a programului este instalată).

Confirmarea arată câte seturi sunt noi, înlocuite, neschimbate și refuzate (la articole: noi, modificate, neschimbate și refuzate) și principalele riscuri, de exemplu rândurile cu coduri care nu există încă în articole sau rândurile pe care seturile înlocuite le pierd. Butonul implicit este Nu când ceva este refuzat sau apare un risc; cu Nu, importul se oprește și nu se schimbă nimic.

Ce se schimbă. Un set din fișier înlocuiește complet setul din serie cu aceeași deschidere, destinație, marcă și denumire (raportul arată rândurile șterse, adăugate și modificate), un set identic nu este rescris, iar un set nou este adăugat și primește automat un rând în Listă seturi. Un articol din fișier este adăugat dacă nu există; altfel primește valorile atributelor scrise în fișier, iar un articol identic nu este atins. Seturile și articolele care nu apar în fișier rămân neschimbate: importul nu șterge și nu redenumește nimic. Avertismentele seturilor și articolelor neschimbate nu sunt listate.

Întrebări. După confirmare, WinArhi mai poate întreba:

 - Salvează ... articole? – când în articole există modificări nesalvate: ele se salvează înainte de import, iar renunțarea oprește importul;

 - Mărcile ... nu există în Furnizori. Le adăugați? – la importul de seturi, pentru mărcile din fișier care nu există în fila Furnizori. Cu Da, mărcile se adaugă vizibile (ascunse, când toate seturile mărcii au MarkHidden="X" sau când marca diferă de una existentă doar prin litere mari sau mici ori spații). Cu Nu, seturile se importă, dar mărcile nu se adaugă, iar acele seturi nu pot fi alese până când utilizatorul adaugă marca. O marcă existentă nu este schimbată niciodată; dacă este ascunsă, seturile ei nu pot fi alese (avertisment);

 - Păstrați valorile dvs. în aceste coloane? – la importul de articole, când fișierul ar schimba, la articole existente, valori pe care utilizatorul le-a completat în coloanele care îi aparțin (manoperă, rabat, taxe, formare preț, rapoarte, vezi Coloanele completate de utilizator). Cu Da se păstrează valorile utilizatorului la articolele existente, cu Nu se iau valorile din fișier, iar Anulează oprește importul.

Seturile se salvează imediat după întrebări. Articolele importate rămân nesalvate până la Salvează ... articole (sau Anulează ... articole, care anulează exact importul). Mesajul final trimite la verificările de făcut. Descrierea pentru utilizator: Articole și Seturi.

 

       Validarea cu schemele XSD și cu WinArhiXmlCheck

Validați fiecare fișier cu schema lui înainte de trimitere, cu orice validator XSD 1.0, de exemplu xmllint (din libxml2), rulat în folderul în care ați dezarhivat WinArhi-HardwareXML-v2.zip:

  xmllint --noout --schema WinArhi-HardwareArticles-v2.xsd articole.xml

  xmllint --noout --schema WinArhi-HardwareSets-v2.xsd seturi.xml

La fel de bine se pot folosi .NET (XmlSchemaSet), Java (javax.xml.validation), Xerces sau MSXML 6.

Schema este mai strictă decât importul: un fișier valid pentru schemă se importă fără erori, cu excepția verificărilor pe care o schemă nu le poate face:

 - baza de date a utilizatorului: coloanele pot fi mai înguste sau de un tip mai vechi decât cele descrise de schemă – un cod prea lung este refuzat, la fel și un cod de listă a cărui valoare stocată nu încape în coloană (VSwlX sau GltnD într-o coloană Opening de 4 caractere, OppositeHinge într-o coloană Side de 10, 1-2 într-o coloană UseCamLocksDimensions2 de 1); o denumire prea lungă este scurtată; un număr zecimal într-o coloană de numere întregi este rotunjit; ItemNo acceptă doar -32768 .. 32767 într-o coloană veche de numere întregi mici; un text pe mai multe rânduri cu caractere din afara codificării Windows este refuzat într-o coloană veche; un atribut valid pentru schemă a cărui coloană lipsește din baza de date își pierde valoarea (avertisment); raportul numește coloana și lățimea ei;

 - referințele: codurile de articol din seturi, mărcile, culorile, valutele, unitățile de măsură, categoriile de consum, codurile de manoperă și membrii grupelor se caută în baza de date (avertismente);

 - diagrama de greutate: vârfurile X0/Y0 .. X9/Y9 ale unei curbe se dau în perechi, de la X0/Y0, fără goluri (altfel articolul este refuzat);

 - coerența valorilor unui rând, de exemplu MinY mai mare decât MaxY (rândul nu intră niciodată), semnalată prin avertismente;

 - lungimile: WinArhi, MSXML și .NET numără unitățile UTF-16, pe când un validator care numără caracterele, cum cere specificația XSD, poate accepta o valoare cu un emoji pe care WinArhi o găsește prea lungă;

 - un rând nou la sfârșitul unei valori: MSXML și .NET lasă să treacă un singur &#10; final prin tiparele schemei, iar libxml2 și Xerces îl refuză; WinArhi refuză rândul nou în Mark și HardwareSet;

 - XML-ul însuși: o declarație DOCTYPE, precum și o secțiune CDATA într-un Set sau Record (chiar și una doar cu spații) sunt refuzate de WinArhi.

Invers, importul acceptă mai mult decât schema (valorile românești ale bazei de date, alte litere în bife, fișierele vechi în formatul 1), ca să poată citi exporturile mai vechi ale WinArhi. Un fișier de producător trebuie să treacă de schemă; nu vă bazați pe această toleranță. Verificarea finală este importul însuși: pentru primele livrări cereți utilizatorului raportul importului, salvat în engleză.

 

Verificarea cu WinArhiXmlCheck

WinArhiXmlCheck este un program în linie de comandă, pentru Windows, care verifică un fișier de seturi sau de articole exact ca importul WinArhi: rulează chiar codul importului și afișează mesajele lui, fără să importe nimic. Nu are nevoie de WinArhi și nici de o bază de date WinArhi. Fiecare problemă este raportată cu elementul la care se află (linia și coloana), atributul, valoarea și motivul, așa că puteți corecta fișierul înainte ca clienții dvs. să îl importe. Pe lângă regulile importului, programul aplică și regulile formatului 2 pe care WinArhi le tolerează la exporturile lui vechi (erorile de format, mai jos), așa că un fișier care trece de WinArhiXmlCheck este un fișier corect în formatul 2.

Descărcați programul de la https://winarhi.ro/kit17.0/tools/WinArhiXmlCheck.zip și dezarhivați-l într-un folder oarecare. Programul rulează numai pe Windows, nu are nevoie de alte fișiere lângă el și se pornește dintr-o fereastră de comenzi (Command Prompt sau PowerShell):

  WinArhiXmlCheck <tip> <fișier.xml> [opțiuni]

Tipul se scrie primul și spune pentru ce import este fișierul: hardware-sets (sau feronerie-seturi) pentru un fișier de seturi (Content="HardwareSets"), hardware-articles (sau feronerie-articole) pentru un fișier de articole (Content="HardwareArticles"). Un fișier dat fără tip sau înaintea tipului este o eroare, iar mesajul arată comanda corectă. Exemple:

  WinArhiXmlCheck hardware-articles articole.xml

  WinArhiXmlCheck hardware-sets seturi.xml --articles articole.xml

  WinArhiXmlCheck hardware-sets seturi.xml --articles articole.xml --report verificare.txt --quiet

  WinArhiXmlCheck hardware-sets seturi.xml --format json --report verificare.json --quiet

  WinArhiXmlCheck hardware-sets seturi.xml --lang ro

Opțiunile pot sta înainte sau după tip și fișier, scrise cu orice fel de litere, ca --nume valoare sau --nume=valoare:

Opțiune

Efect

--articles <fișier.xml>

Numai la hardware-sets: fișierul dvs. de articole. Este verificat primul (raportul lui apare primul), apoi este folosit drept catalogul de articole al seturilor: fiecare cod de articol din rândurile seturilor, din blocatori și din prelungirile de cremon trebuie să existe în el. Un cod pe care fișierul de articole nu îl are este o eroare de format (codul de ieșire 1), la fel și codul unui articol pe care fișierul îl are, dar care ar fi refuzat. Rândurile sunt verificate și față de articolele lor (culoare, diagramă de greutate, cotele blocatorilor, prelungiri, latură și referință), așa cum le verifică WinArhi față de articolele din baza lui de date. Fără --articles aceste verificări nu se fac. Dacă seturile folosesc intenționat articole pe care nu le exportați (articolele clientului), verificați seturile fără --articles.

--lang en|ro

Limba mesajelor despre fișier: engleză (implicit) sau română, adică textele pe care le afișează WinArhi. Liniile proprii ale programului (titluri, numărători, explicații, nota finală) rămân în engleză.

--report <fișier>

Scrie și raportul complet în acest fișier, în UTF-8: raportul text cu marcaj de ordine a octeților (BOM), raportul JSON fără. Fișierul se creează înainte de verificare; nu poate fi un fișier .xml și nici unul dintre fișierele verificate (programul refuză, codul de ieșire 2). Folosiți-l în locul unei redirectări (> raport.json): Windows PowerShell 5.1 recodifică ieșirea unui program pe care o redirectează, ceea ce strică diacriticele și codificarea JSON.

--format text|json

Raport text, pentru oameni (implicit), sau JSON, pentru programe; raportul JSON are același conținut.

--quiet

Numai linia de versiune și câte o linie de rezumat pentru fiecare fișier (fișierul --report rămâne complet; la JSON, fără lista problemelor).

--version

Numai linia de versiune (cu --format json: câmpurile versiunii).

--help, -h, /?

Modul de folosire.

Codurile de ieșire (pentru scripturi și pentru verificări automate):

Cod

Semnificație

0

Nimic nu ar fi refuzat și nu există nicio eroare de format. Avertismentele sunt permise, dar citiți-le: ele spun ce schimbă sau ce ignoră WinArhi.

1

Cel puțin un set sau un articol ar fi refuzat (în fișier sau în fișierul --articles) sau există o eroare de format.

2

Un fișier nu poate fi importat deloc: nu poate fi citit, nu este un XML corect, rădăcina lui nu este Base, FormatVersion este mai nou sau invalid, Content este al celuilalt import (mesajul numește atunci comanda care îl verifică, de exemplu -> WinArhiXmlCheck hardware-articles "articole.xml") sau un fișier lipsește; de asemenea, o linie de comandă greșită, un fișier --report care nu poate fi scris (atunci nu se verifică nimic) sau o eroare internă a programului.

Erorile de format. WinArhi importă și fișierele exportate de versiunile lui mai vechi, așa că acceptă, cu un avertisment sau fără mesaj, câteva lucruri pe care un fișier scris în formatul 2 nu trebuie să le aibă. WinArhiXmlCheck le raportează ca erori de format (codul de ieșire 1), într-o parte separată a raportului: FormatVersion lipsă sau 1 (WinArhi citește atunci fișierul în formatul 1), Content lipsă (WinArhi deduce atunci felul fișierului din primul lui element); un fișier de seturi fără niciun element Set sau un fișier de articole fără niciun element Record (WinArhi nu ar importa nimic); o valoare din afara unei enumerări pe care WinArhi o păstrează – Use, FittingType și MountingLocation ale unui articol în afara listelor lor, o literă veche în IntExt sau Left-Right, o valoare veche a lui Reference, de exemplu 1/2 (schemele le refuză pe toate); cu --articles, un cod de articol pe care fișierul de articole nu îl are. O valoare din afara unei enumerări pe care WinArhi nu o poate stoca deloc refuză unitatea, cu lista valorilor acceptate.

Linia de versiune. Fiecare rulare începe cu o linie ca aceasta:

  WinArhiXmlCheck 2026.0.81 (the import of WinArhi 2026.0.81) - checks WinArhi hardware XML format 2, which WinArhi 2026.0.81 and newer import

 - WinArhiXmlCheck 2026.0.81 (the import of WinArhi 2026.0.81): programul conține codul importului din WinArhi 2026.0.81 și raportează exact ce raportează acea versiune. Folosiți programul versiunii WinArhi pe care o au clienții dvs. sau unul mai nou: un WinArhi mai nou poate accepta mai mult decât un program mai vechi;

 - checks WinArhi hardware XML format 2: formatul pe care trebuie să îl declare fișierul (<Base FormatVersion="2" ...>), descris de cele două scheme XSD. Când formatul se schimbă, numărul lui se schimbă, iar un program mai vechi spune că nu poate citi fișierul (codul de ieșire 2);

 - which WinArhi 2026.0.81 and newer import: prima versiune WinArhi care importă formatul; versiunile mai vechi nu îl importă corect (vezi Versiunile formatului).

O copie construită de dezvoltatorii WinArhi între două versiuni publicate o spune în această linie: numește versiunea următoare, urmată de -dev, commit-ul din care a fost construită și dacă sursele erau modificate, de exemplu:

  WinArhiXmlCheck 2026.0.81-dev+1a2b3c4d (a development build of the WinArhi import after release 2026.0.80, not a release) - checks ...

O asemenea copie nu este o versiune publicată: nu o dați nimănui drept versiune. Aceeași versiune apare și în proprietățile fișierului exe (o copie de dezvoltare este marcată acolo pre-release și private build).

Raportul. Antetul arată cum este citit fișierul (FormatVersion, Content), Generator și, dacă fișierul îl dă, Series, apoi numărul de unități din fișier, acceptate și refuzate. Urmează seturile sau articolele refuzate, fiecare cu toate motivele (un set este refuzat întreg, cu rândurile și blocatorii lui, iar un articol împreună cu diagrama lui de greutate), erorile de format și avertismentele, grupate pe tipuri, fiecare apariție cu mesajul ei complet. Pozițiile sunt (linie:coloană) ale etichetei de început a elementului. Avertismentele unei unități refuzate nu sunt listate: corectați erorile și rulați din nou programul. La sfârșit, raportul arată ce nu a putut verifica și rezultatul, cu codul de ieșire.

Ce nu poate verifica. Unele verificări ale importului depind de baza de date a clientului; programul nu le face și le enumeră la sfârșitul raportului:

 - la seturi: dacă mărcile (Mark) există la furnizorii clientului (WinArhi întreabă înainte să adauge o marcă lipsă); codurile de articol ale rândurilor față de articolele clientului (cu --articles se verifică față de fișierul dvs. de articole); culorile de feronerie ale seriei de profile; deschiderile și mărcile permise de subseriile clientului și funcțiile de script ale bazei lui de date; rândurile de opționale ale seriei (un rând cu ChildParentsIDs este verificat ca și cum seria nu ar avea opționale, așa că avertismentul că nu are părinte poate să nu fie valabil când părintele este un rând de opțional al clientului); dacă un set înlocuiește un set pe care clientul îl are deja;

 - la articole: valutele, categoriile de consum, codurile de formare preț, codurile de manoperă și unitățile de măsură ale clientului; culorile de feronerie ale seriilor; membrii grupelor (Use="!GROUP") care sunt în baza de date a clientului, dar nu în fișierul dvs. (apar ca avertismente: un membru trebuie să fie în fișierul dvs. sau în baza de date a clientului); dacă un articol schimbă un articol pe care clientul îl are deja și coloanele pe care le completează singur utilizatorul WinArhi (WinArhi întreabă dacă păstrează valorile lui);

 - la amândouă: lățimile și tipurile coloanelor din baza de date a clientului. Programul folosește lățimile formatului, cele date de schemele XSD; o bază de date mai veche poate avea coloane mai înguste, iar WinArhi refuză atunci un cod sau o cheie care nu încape.

De aceea, pentru primele livrări cereți în continuare utilizatorului raportul importului, salvat în engleză.

WinArhiXmlCheck completează schemele XSD, nu le înlocuiește. O schemă nu poate exprima tot ce verifică importul: lungimile numărate în unități UTF-16, perechile de vârfuri ale diagramei de greutate, referințele la catalogul de articole, un rând nou la sfârșitul unui Mark sau HardwareSet. Programul rulează importul, deci le raportează și pe acestea, iar ce acceptă importul deși schema refuză (exporturile WinArhi vechi, valorile vechi) apare ca avertisment sau ca eroare de format. Validați fișierele cu schemele și verificați-le cu WinArhiXmlCheck. Cele două exemple din Fișiere de descărcat trec: în folderul în care ați dezarhivat WinArhi-HardwareXML-v2.zip, comanda WinArhiXmlCheck hardware-sets WinArhi-HardwareSets-example.xml --articles WinArhi-HardwareArticles-example.xml se încheie cu codul 0 și nu raportează nimic.

 

       Nota de însoțire

Trimiteți fișierele împreună cu o notă care spune:

 - versiunea minimă de WinArhi: 2026.0.81 (fișierele nu se importă cu o versiune mai veche);

 - mărcile (Mark) folosite în seturi, scrise exact, și dacă vreuna trebuie să rămână ascunsă;

 - culorile de feronerie (Colour) folosite, pe care utilizatorul le compară cu culorile lui de feronerie;

 - valuta prețurilor, unitățile de măsură și categoria de consum propusă;

 - limba textelor;

 - pentru fiecare fișier de seturi: seria de profile (sistemul de cercevea) pentru care este făcut și deschiderile folosite, pe care utilizatorul trebuie să le aibă permise la Deschideri permise în subseriile seriei (vezi Setări implicite la creare);

 - pentru fiecare set, setările din Listă seturi pe care fișierul nu le poate transporta: AreFaltSubStulp (falțul feroneriei de pe canatul inactiv se calculează până la falțul cercevelei, nu până la falțul ștulpului), descrierea setului, mânerele compatibile ale setului și subseriile pe care se folosește. Vizibilitatea se completează singură: un set nou este vizibil la fereastră și la ușă de balcon (WD="Window") sau la ușă (WD="Door"), așa că numiți doar excepțiile (de exemplu un set de fereastră care trebuie oferit și la uși);

 - seturile care s-au schimbat față de livrarea anterioară: un set reimportat înlocuiește și modificările pe care utilizatorul le-a făcut în el;

 - seturile și articolele scoase din fabricație sau redenumite față de livrarea anterioară: importul nu le șterge și nu le redenumește, așa că utilizatorul le tratează manual;

 - validatorul XSD cu care ați validat fișierele și linia de versiune a programului WinArhiXmlCheck cu care le-ați verificat.

 

       Ce nu conțin fișierele

Fișierele transportă articolele și seturile. Următoarele rămân în grija utilizatorului WinArhi și nu sunt schimbate de import:

 - mărcile din fila Furnizori (Vizibil, Ordine): importul de seturi doar adaugă, după întrebare, mărcile care lipsesc;

 - opționalele de feronerie ale seriei (catalogul și conținutul lor): rândurile de conținut ale opționalelor cu cheia setului nu fac parte din fișier și rămân neschimbate. Dacă utilizatorul a mutat rânduri din setul de bază în opționale, setul complet reimportat le aduce înapoi în setul de bază; Seturi > Verifică opționalele le arată;

 - setările din Listă seturi, pe fiecare set (vezi Seturi): Descriere, VizibilLaFereastra, VizibilLaUsa, VizibilLaUsaBalcon, Vizibil la subserie, ZoneOf (zona de ofertare), AreFaltSubStulp, IgnoraLipsaArtCulImpl, Mânere compatibile, SetFVechi și Grupe de opționale excluse (mânerele compatibile ale unui articol se transmit prin CompatibleHandles). Un set nou primește automat un rând în Listă seturi, vizibil la fereastră și la ușă de balcon (WD="Window") sau la ușă (WD="Door"), fără subserii bifate (deci pe toate subseriile); restul îl completează utilizatorul;

 - setările subseriilor, de exemplu Deschideri permise și Mărci de feronerie acceptate (vezi Setări implicite la creare);

 - tabelele proprii ale utilizatorului: culorile, valutele, unitățile de măsură, categoriile de consum, codurile de manoperă și de formare preț – fișierele doar le numesc;

 - valorile coloanelor de articol care aparțin utilizatorului (manoperă, rabat, taxe, rapoarte, excluderi din vizualizare etc.; cele mai multe au nume românești, dar și DiscountPercent, OtherTaxesPercent și DrawingType4): formatul le cuprinde, pentru mutarea articolelor între baze de date WinArhi, dar un producător nu le trimite (vezi Coloanele completate de utilizator);

 - data modificării prețului: importul o pune singur (data curentă) la articolele al căror preț se schimbă și la articolele noi cu preț;

 - imaginile: ImageFile doar numește fișierul imaginii, care se trimite separat;

 - ștergerea și redenumirea: importul nu șterge seturi sau articole și nu schimbă codul unui articol – un cod nou este un articol nou, iar OldCode nu redenumește articolul existent;

 - traducerile: textele rămân în limba în care sunt scrise.

Modificările utilizatorului în seturi nu sunt protejate. Un set reimportat înlocuiește complet setul din serie: condițiile adăugate de utilizator în Functions, cantitățile schimbate și rândurile adăugate sau șterse de el se pierd. Raportul arată rândurile șterse, adăugate și modificate ale fiecărui set înlocuit, iar confirmarea arată rândurile pe care seturile înlocuite le pierd și are atunci butonul implicit Nu. De aceea producătorul retrimite numai seturile care s-au schimbat și le numește în nota de însoțire, iar utilizatorul își reface modificările după import.

 

       Versiunile formatului și versiunea WinArhi

 - Formatul 2 (FormatVersion="2") este formatul curent, descris de schemele v2; îl scriu exporturile WinArhi 2026.0.81 și mai noi. Fișierele de producător se scriu numai în formatul 2.

 - Formatul 1 este formatul fișierelor exportate de versiunile mai vechi ale WinArhi: fără FormatVersion, cu elemente numerotate (Set1, SetRecord1, Record1 ...) și cu unele atribute cu nume românești. WinArhi le citește în continuare, mai tolerant (un atribut necunoscut este doar un avertisment). Fișierele exportate de WinArhi 2026.0.79 sau mai vechi nu conțin indexul cotelor blocatorilor (DimensionIndex) și diagramele de greutate: seturile afectate sunt refuzate, iar articolele noi fără diagramă sunt semnalate; exportați-le din nou cu versiunea curentă. WinArhi 2026.0.80 scrie tot formatul 1, dar complet (cu DimensionIndex și diagramele de greutate).

 - Un fișier cu FormatVersion mai mare decât 2 (un format viitor) este refuzat, cu propunerea de a verifica actualizările.

 - Versiunea minimă de WinArhi este 2026.0.81. Nu importați aceste fișiere cu o versiune mai veche, care nu le refuză cu un mesaj clar: WinArhi 2026.0.80 le importă fără nicio verificare, fără raport și fără confirmare și pierde o parte din atributele articolelor (cele enumerate la începutul capitolului), iar versiunile anterioare nu le pot importa deloc.

 

Vezi și: Formatul XML al articolelor de feronerie, Formatul XML al seturilor de feronerie, Articole, Seturi, Furnizori, Opționale feronerie, Mesaje.