Un exemplu de rezolvare a unei probleme abstracte de descărcare a documentelor de tip selectat pentru o anumită perioadă.
Captarea recursivă a elementelor de directoare și documente, ale căror referințe sunt prezente în toate rechizitele tuturor elementelor descărcate.
în versiunea anterioară, când descărcați directoarele ierarhice, a existat o întârziere a folderelor rădăcină.
(mulțumită lui Jkey, a dat o lovitură care ar repara "bug-ul")
O sarcină abstractă este configurată pentru a descărca documente din orice configurație a 1C: Enterprise 8.2 cu posibilitatea de a selecta după tipul, data și starea documentului (Conducted, Removed) în fișierul xml.
Fișierul trebuie să conțină două secțiuni principale: "Directoare" și "Documente". Fiecare obiect încărcat în fișier (intrare în director sau document) trebuie să aibă un identificator unic (ID) în întregul fișier. În timpul tuturor descărcărilor, obiectul trebuie să aibă același identificator.
În secțiunea "Directoare" ar trebui să existe secțiuni imbricate, ale căror nume coincid cu numele "Tipului" directorului, așa cum este specificat în configurație.
Dacă intrarea în agendă este un grup, atunci este localizată într-un element de fișier numit "Grup". Dacă intrarea în agendă nu este un grup, atunci este localizată în elementul numit "Element".
Fiecare element al directorului ar trebui să fie extins în structură, adică pune toate detaliile directorului în fișier. Valoarea detaliilor directorului este plasată în elementele secțiunii fișierului, având nume care coincid cu numele detaliilor directorului, așa cum este specificat în configurator.
Dacă directorul are recuzita de tip „director“ sau „document“, atunci ar trebui să fie plasate în secțiunea corespunzătoare de descărcare în conformitate cu celulele de descărcare directoare reguli de fișiere și utilizați aceste elemente de recuzită de valoare ar trebui să fie înlocuită cu id-ul obiectului. Dacă solicitarea directorului are un tip primitiv (șir, număr, boolean) sau "Enumerare", atunci valoarea recuzelor este plasată imediat în fișier.
Câmpuri obligatorii pentru Directoare:
- Id este identificatorul unic al elementului.
- Cod - elementul de cod al directorului.
- Nume - numele elementului din director.
- Parintele este un element director care este situat cu un nivel mai ridicat in raport cu acest element.
- Proprietarul este o intrare în director sau un document la care acest element al directorului este subordonat.
- Stare - starea intrării directorului, care poate lua valoarea "înregistrată" sau "șters".
Câmpuri dedicate pentru Documente:
- Id - identificator unic al documentului
- Numărul - numărul documentului
- Data - data documentului
- Stare - starea documentului (poate lua valoarea "deținut", "înregistrat" sau "șters").
Acesta este treaba pe care am primit-o ca răspuns la răspunsul meu la un post vacant. Înainte de asta, nu știam nimic special despre XML (puteți schimba doar cu acest format și îl puteți edita în notepad). Cred că acest lucru este normal (lipsa mea de iluminare), deoarece XML la 1C are o relație indirectă, dar pentru a fi un expert pe întregul cap, trebuie să știți și acest lucru. nimic nu se poate face, sarcina este interesantă, nouă. Este necesar să se decidă.
Acest articol nu se va referi la regulile de descărcare în xml, voi oferi ca exemplu un curs interesant "Mijloace de integrare și schimb de date în sistemul 1C: Enterprise 8".
Puteți selecta câteva metode de rezolvare.
- Primul - cel mai popular și considerat pe scară largă este crearea în configurația propriei sale scheme XDTO. Este necesar să se creeze (da, adică de a face modificări configurației, dar poate fi apoi exportate și folosindu-l pentru a încărca pe undeva, cum ar fi la fața locului), pentru toate ne interesează obiecte definesc, atributele obiect, folosit pentru a descrie tipurile de obiecte și apoi, utilizând așa-numitul "Model de obiect XML", încărcați datele.
- Al doilea este cel mai trivial, îi este dat puțin timp, pentru că este foarte simplu, chiar nu îl puteți observa (l-am folosit). Înregistrăm pur și simplu o înregistrare secundară recursivă (sau pur și simplu) bypass scriind într-un fișier XML. Aceasta nu este o metodă foarte bună din punctul de vedere al încărcării datelor (dacă încărcăm datele, înseamnă că cineva are nevoie de).
- ușor mințit, există și al treilea. 1C 82 au incorporat metode pentru descărcarea obiectelor în XML, pe baza XDTO schemele proprii, care includ deja toate descrierile, dar această metodă este adecvată numai pentru încărcarea / descărcarea în aceeași configurație, care este extrem de rară. L-am nu am folosit, deoarece toate elementele și atributele obiect paginată va fi stabilit deja numele, și nu coincid cu detaliile obiect numele (acestea sunt toate în reprezentare în limba engleză), iar noi, de fapt, trebuie să folosească „propriile“ nume ca în configuratorul.
Soluția problemei este realizată folosind, ca să spunem așa, "concepte de bază" despre scrierea unui XML, cu execuția unei înregistrări secvențiale. Modelul de obiect XML nu va fi utilizat.
Obiectul principal este Record XML. Creați un obiect nou și utilizați metodele de scriere a elementului inițial () și scrieți elementul de sfârșit (), așa că se va face. Asta e tot!
Deoarece va descărca 2 partiții, trebuie să le combinați cu un element rădăcină comun (am această "rădăcină"). După aceea, este descrisă directorul, apoi Documentele.
Pe formular sunt controalele principale:
- Tipul obiectelor (Când deschideți un formular, primim o listă a tuturor tipurilor de documente și le încărcăm în Lista de valori)
- StartPeriod și sfârșitul perioadei
- Steaguri booleene "Conducted", "Deleted". pentru posibilitatea selectării în funcție de starea documentului
- și directorul de încărcare,
În câmpul Director, directorul este selectat, fișierul este creat cu numele
FileName = Catalog + Format (CurrentDate (), "DF = ddMMMM") + ".xml";
Scurtă descriere a algoritmului:
- Selectăm documentele la cerere.
- În mod recursiv, primim toate tipurile de Directoare și Documente (când descărcarea, celelalte tipuri sunt convertite într-un șir) din toate cererile din arborele rezultat și le vom umple cu liste de valori, pentru directoare și documente, cu listele lor de valori.
- În mod recursiv, obținem toate valorile de referință ale tuturor rechizitelor.
- Apoi, efectuăm o înregistrare ierarhică secvențială a Referințelor în primul rând (din nou, recursiv, bine, cum altceva), făcând o interogare mare, pentru a folosi pachetele în buclă, să nu acceseze baza de date.
- Și apoi facem o evidență a documentelor.
Consider că este un moment interesant, primirea numelor rechizitelor și a pieselor de masă și a rechizitelor premierului, urmate de procesare.
După înregistrare, este afișat un mesaj.
Am creat procesarea externă cu formularul Normal nesupravegheat, pentru clientul gros obișnuit, pe platforma 8.2.15.
Testat pe configurația Demo a UT 10.3.
Aceasta este prima mea publicație, sper că cineva va veni la îndemână. Accept orice critică. Mult noroc.