Contacte

Cum să găsiți o eroare la transferul de date. Exemplu de regulă de conversie a obiectelor Există întotdeauna mai multe soluții

Scopul acestei reguli de schimb este de a transfera soldurile decontărilor reciproce de la BP 2 la UT11.

Crearea pas cu pas a unei reguli de schimb folosind configurația „Conversia datelor” (metadatele trebuie încărcate):

1) Creați o regulă pentru încărcarea unui obiect; pentru aceasta, accesați fila „Reguli pentru încărcarea datelor”, faceți clic pe adăugare. În fereastra care apare, selectați obiectul eșantion; acesta va fi un registru auto-contabil. Schimbăm metoda de eșantionare cu un algoritm arbitrar.

2) Să trecem la scrierea codului în sine pentru că Nu există un registru de autocontabil în UT, așa că trebuie să îl convertim. În primul rând, avem nevoie de o interogare care, conform parametrilor noștri, va returna solduri pentru decontări reciproce. În handlerul de evenimente „Înainte de procesare” scriem următoarea solicitare:

QueryText = „SELECT
| Solduri autonome.Cont,
| Self-supporting Remainings.Subconto1 AS Subconto1,
| ISNULL(SUM(Self-AccountingRemaining.AmountRemainingDt),0) AS AmountRemainingDt,
| ISNULL(SUM(Self-accountingRemains.AmountRemainingCt),0) AS AmountRemainingCt,
| MAXIM(Solduri contabile de costuri.Subcont2.Data) AS Data decontăriiDocumentului,
| MAXIM (Solduri auto-contabile.Subcont2.Număr) AS Număr document contabil
|DIN
| Registrul de contabilitate. Autosuport. Solduri (&OnDate, Account = &account,) AS Solduri auto-suportabile
|UNDE
<>&grup și
| Solduri autonome.Subcont 1. Părinte<>&Grupa 1
|GRUPA DE
| Solduri autonome.Cont,
| Solduri autonome. Subcontul 1,
| Rămășițe autoportante.Subconto2
|COMANDA DE
| Subconto1
|COMANDĂ AUTO”;

Sarcina mea a fost să limitez grupurile de contrapărți pentru care sunt încărcate decontări reciproce.

Determinăm valorile variabilelor care vor fi utilizate în viitor.

OnDate = data("20130101");
TD = CurrentDate();
grup = Directories.Counterparties.FindByName("Cumparatori");
grup1 = Directoare. Contrapartide. Găsiți după nume ("Se întoarce de la PERSOANE FIZICE");

Creăm un tabel pe care îl vom trece ulterior la regula de conversie a valorii.

TZ = New ValueTable();
TK.Columns.Add("Contraparte");
TK.Columns.Add(„Suma”);
TK.Columns.Add("AmountREGLE");
TK.Columns.Add("CalculationDocument");
TK.Columns.Add(„Data documentului de decontare”);
TK.Columns.Add(„Numărul documentului de decontare”);
TK.Columns.Add(„Partener”);
TK.Columns.Add(„Moneda decontării reciproce”);
TK.Columns.Add(„Data plății”);

Setăm parametrii, apelăm cererea, completăm tabelul și apelăm regula de conversie.

cerere = new Request(RequestText);
request.SetParameter(„grup”, grup); request.SetParameter(„grup1”, grup1);
request.SetParameter("OnDate",OnDate);
request.SetParameter("Cont", Planuri de contabilitate. Auto-contabil. Calcule cu alți furnizori și antreprenori);//76.05
Fetch = cerere.Run().Select();
TZ.clear();
While Select.Next() Loop
dacă Sample.SumRemainingCT = 0 sau Sample.SumRemainingCT = "", atunci
continua;
endif;
dacă Sample.AmountRemainderCT< 0тогда
raport(""+Sample.Subconto1+" valoare negativă "+Sample.SumRemainingCT);
endif;
LineTZ = TZ.Add();
Linia TK.Counterparty = Selection.Subconto1;
LineTZ.sum = Selection.SumRemainingCT;//Selection.SumRemainingCT;
LineTZ.sumRegl = Sampling.SumRemainingCT;//Sampling.SumRemainingCT;
Linia TK.Calculation Document Date = Selection.Calculation Document Data;
Linia TK.Calculation Document Number = Selection.Calculation Document Number;
LineTZ.PaymentDate = TD;
EndCycle;
OutData = Structură nouă;
OutgoingData.Insert(„Data”, CurrentDate());
OutgoingData.Insert("CalculationsWithPartners", TK);
OutgoingData.Insert(„Tipul operațiunii”, „Soldurile datoriilor către furnizori”);
OutgoingData.Insert("Comentariu", "Generat pe credit de cont 76.05");
raport("76.05 CREDIT început");
UploadByRule(, OutgoingData, „Intrarea soldurilor pentru decontare reciprocă_7605Credit”);

În mod similar, efectuăm aceeași operațiune pentru conturile necesare rămase (descrierea acestora, precum și regula gata făcută, sunt în atașament).

3) Să trecem la crearea regulilor de conversie a obiectelor; pentru a face acest lucru, deschideți fila „Reguli de conversie a obiectelor”. Să adăugăm acolo o nouă regulă cu numele „Input Balances By Mutual Settlement_7605Credit”, lăsați obiectul sursă gol, setați obiectul receptor la documentul „Enter Balances”, iar din fila de setări eliminați steag-ul „Căutați obiectul receptor după identificatorul intern al obiectului sursă”.

În handlerul de evenimente „Înainte de încărcare” vom scrie următorul cod:

Generați NewNumberOrCodeIfNotSpecified = adevărat;

În handlerul de evenimente „După încărcare” vom scrie:

execute(algoritmi.AfterLoadInputRemainings);

va executa un algoritm cu următorul conținut:

valuta = Constants.RegulatedAccountingCurrency.Get();
object.Owner = SessionParameters.CurrentUser;
obiect.organizatie=parametri.organizatie;
pentru fiecare pagină din bucla obiect.calculăriparteneri
Page.SettlementDocument = Directories.Counterparty Agreements.empty link();
PageCurrencySettlements = valuta;
dacă ValueFilled(page.counterparty.partner) atunci
p.partner = p.contraparte.partener;
in caz contrar
parteneri = Directories.Partners.FindByName(page.counterparty.Name);
dacă biroul<>Nedefinite și birouri<>Directories.Partners.emptylink() atunci
p.partner = birou;

obiect2.Partener = birou;
obiect2.Scrie();
in caz contrar
execute(algoritmi.AddPartner);
endif;

endif;

sfârşitul ciclului;

Acest algoritm va fi executat pe partea receptorului (BP). Pe lângă transferul soldurilor pentru decontări reciproce, există sarcina de a transfera contrapărți, dar UT folosește parteneri, așa că după generarea documentului, verificăm dacă toate contrapărțile și partenerii se află în baza de date a receptorului; dacă din anumite motive nu sunt acolo , apoi le adăugăm.

Adăugarea contractanților va implementa regula de conversie pentru directorul „Contrapărți”; o puteți crea în același mod ca regula anterioară, dar permiteți sistemului să compare câmpurile necesare.

A fost creat un algoritm pentru parteneri care este executat pe partea receptorului.

Pentru a executa algoritmul pe partea receptorului, trebuie să bifați indicatorul „Utilizat la încărcare” din colțul din dreapta sus al ferestrei algoritmului (când îl editați).

Mai jos este codul pentru algoritmul „Adăugați partener”:

nPartner = Directories.Partners.CreateItem();
nPartner.Name = page.counterparty.name;
nPartner.Comment = "Creat la încărcare din BP";
nPartner.NameFull = page.counterparty.NameFull;
nPartner.Supplier = ?(find(page.counterparty.AdditionalInformation,"Supplier")>0,true,false);
nPartner.Client = ?(find(page.counterparty.AdditionalInformation,"Client")>0,true,false);
OtherRelations = ?(find(page.counterparty.AdditionalInformation,"Other")>0,true,false);
npartner.Write();
p.partner = npartner.link;
counterparty = Directories.Counterparties.FindByName(page.counterparty.Name);
obiect2 = contraparte.GetObject();
object2.Partner = npartner.link;
obiect2.Scrie();

Să revenim la regula de conversie a obiectelor. Acum trebuie să stabilim corespondența între câmpurile sursă și destinație; acest lucru ar fi putut fi făcut imediat înainte de a scrie codul. Pentru a compara câmpurile, în partea inferioară a tabelului există un buton pentru apelarea vrăjitorului „Sincronizare proprietăți”. În acest expert, putem fie să mapam câmpurile, fie să le lăsăm pe ambele fără sursă și fără destinație. În cazul nostru, lăsăm toate câmpurile și PM-urile fără sursă.

După ce câmpurile obligatorii au fost selectate în TC inferior, pentru fiecare câmp setăm un steag în coloana „Obțineți din datele primite”. Acest indicator indică faptul că sistemul va căuta acest câmp în datele primite. Este important ca numele câmpului să se potrivească cu numele din datele primite, altfel va fi afișat un mesaj care să arate că câmpul nu a fost găsit.

Textul nu descrie toate nuanțele procesului.

O zi bună, dragi cititori de blog. Un articol despre conversie a fost publicat anterior pe acest site
, a arătat acest articol
cum puteți configura un schimb folosind constructori care creează reguli de schimb.
Această metodă poate fi utilizată la conversia bazelor de date de la 1C versiunea 7.7 la 8.2.
Acum vom vorbi despre cum să transferăm date între configurațiile 1C 8.2, care sunt ușor diferite unele de altele.

Accentul principal al acestui articol va fi pe conversia părții tabelare a documentului, ceea ce înseamnă că
vom lucra cu reguli de conversie a grupului de proprietăți - PKGS.

Pregătirea pentru configurarea PKGS - reguli pentru conversia unui grup de proprietăți

Vom transfera documentul „Primire de bunuri și servicii”, care are diferențe în atributul Rata TVA din secțiunea tabelară „Bunuri”.
în baza de date sursă și receptor. În baza de date sursă, acest atribut are tipul „DirectoryLink.VAT Rates”,
iar în baza de date a receptorului - tipul „TransferLink.TV Rates”.

Apropo, pentru comoditate, puteți defini

În plus, în baza de date a receptorului trebuie să completăm detaliul „Cont BU”, care se află și el
în secțiunea tabelară „Marfuri” a documentului „Recepția Bunurilor și Serviciilor”. Vom prelua datele pentru a le completa din detaliile „Contabilitatea contului”.
carte de referință „Nomenclatura” bazei receptorului.

Situația este complicată de faptul că vom lucra cu partea tabulară, așa că trebuie să o configuram
reguli de conversie a grupului de proprietăți - PKGS. Va trebui să accesăm rândul curent al părții tabelare.

Crearea regulilor de conversie pentru un grup de proprietăți 1C

Am dezvoltat deja reguli de conversie pentru documentul „Recepția bunurilor și serviciilor”.

Dar pentru partea tabulară „Produse” nu există reguli de conversie a proprietății„Cote de TVA”.
Trebuie să adăugați o nouă regulă de conversie a proprietăților făcând clic pe butonul „Sincronizați proprietăți...”.

Va apărea caseta de dialog „Setarea regulilor de conversie a proprietății (primirea bunurilor și serviciilor)”.

Trebuie să repetați ceea ce sa făcut în imagine și să faceți clic pe butonul „OK”.

Deși noi am creat regula de conversie pentru un grup de proprietăți, dar nu este încă gata.
Rețineți că detaliile secțiunii tabelare „Cote TVA” diferă în funcție de tipurile de valori.
În baza de date sursă, acest atribut are tipul „DirectoryLink.VAT Rates”,
iar în baza de date a receptorului - tipul „TransferLink.TV Rates”. Ne lipsește o regulă aici
Convertirea dintr-un director într-o enumerare.

Manageri de evenimente pentru regulile de conversie a grupului de proprietăți

Pentru a configura corect conversia proprietăților, trebuie să creați o nouă regulă de conversie a obiectelor.

În dialogul care apare, indicăm că directorul „Rate TVA” este convertit într-un transfer cu același nume.

Nu vor exista reguli de conversie a proprietăților pentru această regulă.
Prin urmare, atunci când salvați această regulă, selectați „Nu” în caseta de dialog care apare.

În dialogul cu întrebarea „Creați reguli de încărcare a datelor?” Să selectăm și „Nu”.

Făcând dublu clic, vom deschide un dialog cu setarea regulii de conversie a obiectelor (PKO) „Rate TVA”.
Aici, în fila „Gestionari de evenimente”, selectați evenimentul „La descărcare” și definiți „Sursa” și
„Link Node”, adică ceea ce va fi transferat.

Dacă Sursa. Rata = 0 Atunci
LinkNode = "Bid0" ;
ElseIf Sursă. Pariu = 12 Atunci
NodeLinks = „Bet12” ;
ElseIf Sursă. Nume = „fără TVA” Apoi
NodeLinks = „Fără TVA” ;
EndIf ;

După ce ați scris handler-ul, faceți clic pe butonul „OK”.

În informații despre manipulatori:

Sursă - Personalizat - obiect sursă încărcat (link sau date personalizate).
Link Node - nod link xml inițializat. Poate fi folosit
de exemplu, pentru a inițializa proprietățile altor obiecte.

Acum vom indica în mod explicit utilizarea acestei reguli de conversie a obiectelor la descărcarea atributului „Rata TVA”.
Accesați fila „Conversie proprietăți (*)” din documentul „Primire de bunuri și servicii” și deschideți conversia
grup de proprietăți „Produse”, faceți dublu clic pe proprietatea „Rate TVA” și în caseta de dialog care se deschide, în câmpul „Regulă”
selectați regula de conversie pentru obiectul „Rata TVA”.

Faceți clic pe butonul „OK”.

Acum trebuie doar să setăm conturile contabile în conformitate cu valorile care sunt definite pentru articol.
Să mergem la fila „Reguli de conversie a obiectelor”, să găsim obiectul „Primire de bunuri și servicii” și
Făcând dublu clic pe acesta, se va deschide dialogul pentru regulile de conversie a obiectelor (OCR).
Să mergem la fila „Gestionari de evenimente” pentru evenimentul „După încărcare” și să scriem următoarele:

Pentru fiecare LineTCH From Object. Ciclul Produselor
LineTC. AccountAccountBU = LineTC. Nomenclatură. AccountAccountBU;
EndCycle ;

Acum să încărcăm aceste reguli la sursă folosind procesarea externă „Interschimb universal de date în format XML” - „V8Exchan82.epf”.
Să încărcăm datele într-un fișier xml. Apoi, deschideți aceeași procesare în baza de date a receptorului și selectați fișierul xml de încărcare și încărcați datele.

Apropo, procesarea „Interschimb universal de date în format XML” poate fi deschisă prin elementul de meniu
„Serviciul” | „Alte schimburi de date” | „Interschimb universal de date în format XML”. S-a scris puțin despre asta într-o notă despre.

Se știe că programele 1C sunt un instrument convenabil și multifuncțional pentru automatizarea contabilității, potrivit pentru întreprinderi dintr-o mare varietate de industrii și domenii de activitate. Cu toate acestea, acest instrument este complex și, din păcate, apar adesea diferite tipuri de erori atunci când lucrați cu el. În acest articol, vă vom arăta cum să găsiți și să rezolvați o eroare care a apărut la migrarea datelor folosind regulile create de Tehnologii de conversie a datelor 2.0. Ce ar trebui să fac dacă încărcarea eșuează sau este imposibilă încărcarea datelor în baza de date de primire? Articolul nostru își propune să răspundă la aceste întrebări.

Deci, dacă ați achiziționat reguli de conversie a datelor, ați deschis procesarea pentru transfer, ați setat toate setările, dar încărcarea este întreruptă și apare un mesaj de eroare în mesajele de service, iată câteva tehnici care vă pot ajuta să găsiți și să eliminați eroarea.

În primul rând, verificați versiunile de lansare ale programului dvs. cu cele specificate în reguli. Cu o ușoară discrepanță între versiuni sursă nu apar probleme, dar dacă lansarea dvs. este semnificativ în urmă cu cele mai recente versiuni, regulile nu vor funcționa. Versiunea de configurare receptor trebuie să fie identică cu cea specificată în regulament.

Cum pot vedea pentru ce versiuni sunt regulile? Doar deschideți fișierul de reguli cu orice editor (în mod implicit poate fi Internet Explorer sau Notepad) și uitați-vă la primele rânduri - acestea conțin versiunile sursei și destinației.

Fig.1. Vedeți regulile

Ce să fac? Dacă aveți o astfel de oportunitate, actualizați programul sursă la versiunea specificată în regulile de conversie. Dacă nu puteți actualiza programul, atunci nu veți putea lucra cu aceste reguli.

Dar poate că ați făcut deja toate acestea și încărcarea are loc încă cu erori? Apoi încercați să găsiți elementul problematic care împiedică încărcarea corectă a programului.

Vom demonstra algoritmul acțiunilor la căutarea erorilor folosind exemplul de transfer de date de la KA 1.1 la BP 3.0.

Procedați după cum urmează: dezactivați toate regulile de transfer și descărcați grupurile individuale de reguli unul câte unul. Acestea. mai întâi încercați doar să descărcați Politica contabila, numai atunci Solduri primite, numai Directoare etc. (Fig. 2). Cel mai adesea, problemele apar la descărcarea documentelor, în timp ce alte tipuri de obiecte sunt descărcate în mod normal, așa că să folosim exemplul lor pentru a lua în considerare acțiuni ulterioare. Acum trebuie să repetați procesul cu încărcare alternativă cu fiecare regulă de conversie a documentului. Acestea. la rândul său, încărcați doar rapoarte anticipate, doar acreditiv transferat etc. conform listei, așa cum se arată în Fig. 3.

Fig.2. Descărcarea secvenţială a grupurilor de obiecte

Fig.3. Descărcarea tipurilor de obiecte unul câte unul

Deci, să presupunem că încărcarea este întreruptă atunci când sunt selectate toate regulile de încărcare Documentație. Ai încărcat toate tipurile de documente unul câte unul, ai trecut prin toate pozițiile unul câte unul și ai calculat că eroarea apare doar la încărcarea, de exemplu, a documentelor Operare (contabilitate si contabilitate fiscala). În continuare, ar trebui să restrângeți treptat perioada de încărcare pentru a găsi documentul problematic. Mai întâi, încărcați după trimestru, lună, săptămână până când găsiți ziua în care încărcarea eșuează.

Ce să fac? Dacă reușiți să găsiți documentul specific care provoacă eroarea și puteți vedea care este cel mai probabil problema, grozav. Remediați documentul, dacă este posibil, sau pur și simplu nu-l migrați - este mult mai ușor să reparați un document decât să faceți întreaga migrare manual. Pentru a efectua un transfer excluzând un singur document, utilizați selecția din fereastra alăturată. În coloana „Tip de comparație”, setați „Nu este egal”, în „Valoare” selectați documentul problematic și continuați încărcarea ca de obicei.

Fig.4. Selectarea unui document la încărcare

Bine, dar ce se întâmplă dacă încărcarea este finalizată corect, dar datele nu pot fi încărcate într-o altă bază de date? Mai întâi, fă-ți timp și verifică din nou dacă ai făcut totul corect și dacă versiunile programului se potrivesc. Spre deosebire de sursă, versiunea de lansare a receptorului trebuie să se potrivească strict cu cea specificată în reguli, altfel vei primi întotdeauna o eroare.

Ce să fac? Erorile din etapa de încărcare pot fi corectate cel mai adesea numai în etapa de descărcare, astfel încât procedura de găsire a problemei va fi aceeași ca cea descrisă mai sus, cu o singură excepție - după fiecare descărcare va fi necesar să se repete încărcarea pentru a găsiți elementul care se află în baza de date de recepție nu se descarcă. Urmați aceeași secvență - mai întâi migrați un grup de vizualizări de obiecte, apoi vizualizări specifice după date specifice și, în final, eliminați elementul problematic care împiedică încărcarea cu succes.

Când procesarea standard nu poate efectua încărcarea corect și procesul se oprește, întotdeauna apare un mesaj de eroare în mesajele de service. În unele cazuri, este într-adevăr posibil doar să găsiți locația și cauza acestei erori prin descărcarea diferitelor tipuri de obiecte unul câte unul. Cu toate acestea, aceasta nu este singura cale. Adesea, cauza erorii este deja dezvăluită în mesajul de service; trebuie doar să o citiți corect.

Să ne uităm la exemplul de descărcare din KA 1.1. Utilizatorul se descarcă din baza de date sursă Solduri primite la începutul anului 2018. Procesul de descărcare este întrerupt și programul afișează mai multe mesaje de service, inclusiv următoarele:

Eroare în handlerul de evenimente BeforeProcessingUploadRules
PVD = Remaining_Materials
Handler = BeforeProcessingDataUpload
DescriptionErrors = Eroare la obținerea valorii proprietății obiectului (după numele proprietății sursă)
PKO = Nomenclatură (Director: Nomenclatură)
PKS = 15 (Articol --> Articol)
Obiect = Invertor aparat de sudura VDI 160R (Mije fixe)
ReceiverProperty = Articol(Șir)
DescriptionErrors = Câmpul obiect nu a fost găsit (articol)
ModulePosition = Processing.UniversalXMLDataExchange.ObjectModule(8283)
MessageCode = 13
ModulePosition = Processing.UniversalXMLDataExchange.ObjectModule(1694)
MessageCode = 31

S-ar putea merge pe calea grea și să descarce diferite tipuri de solduri unul câte unul (rămășițe de active fixe, solduri de active necorporale etc.) și să constate că eroarea apare la descărcarea conform regulii. Materiale_rămase. Sau puteți vedea imediat numele regulii în mesajul de eroare. Uite, chiar prima linie din transcrierea erorii din mesaj spune exact asta. DVP - regulă de încărcare a datelor. Regula de încărcare a datelor este egală cu Remaining_Materials. Nu trebuie să căutăm nimic, programul însuși vă spune unde a apărut eroarea.

Orez. 5.1. Mesaj de eroare de service

Putem găsi la fel de ușor și motivul. În linie DescriereErori scris Nu este un mesaj foarte clar pentru utilizator. Cu toate acestea, putem înțelege că eroarea constă într-o anumită proprietate a obiectului. Ce obiect? Cel indicat în rând Un obiectîn acest mesaj. În acest caz, acest obiect este Invertor aparat de sudura VDI 160R (Mije fixe). Deja în acest moment puteți observa o discrepanță. Regula de încărcare a datelor numit Resturi de materiale, în linie Regulă de conversie a obiectelor (OCR) scris Nomenclatură, de ce tipul de obiect este scris ca Mijloace fixe? Să ne uităm în baza de date sursă și să verificăm dacă am găsit într-adevăr obiectul corect.

În soldurile contului 10.09 „Inventar și provizii casnice” găsim obiectul nostru problematic - subconto Invertor aparat de sudura VDI 160R(vezi Fig. 5.2)

Orez. 5.2. Bilanțul contului 10.09 pentru anul 2018

Dacă deschideți acest subconto, puteți vedea imediat asta Invertor aparat de sudura VDI 160R este într-adevăr un instrument de bază, nu o nomenclatură (vezi Fig. 5.3). Ce a mai rămas Invertor aparat de sudura VDI 160R s-a dovedit a fi o eroare complet evidentă pe contul 10.09 care trebuie corectată.

Orez. 5.3. Card cu mijloace fixe Invertor aparat de sudura VDI 160R

Eroarea de descărcare în acest caz apare din cauza unui tip de obiect incorect. Conform regulii de descărcare a materialelor rămase, acesta ar trebui să fie descărcat Nomenclatură- materiale, combustibil, inventar etc. Astfel de obiecte au un anumit set de proprietăți, care sunt transferate într-o altă bază de date conform regulii de conversie. Pentru obiecte cu tip Lucrul principal setul de proprietăți va fi complet diferit. Nu există nicio modalitate de a descărca un astfel de obiect conform regulii de descărcare a materialelor. Programul identifică obiectul ca Nomenclatură dar nu găsește proprietățile necesare pe el și, în consecință, nu îl poate converti pentru scriere într-un fișier. Asta spunea mesajul Eroare la obținerea valorii proprietății obiectului (după numele proprietății sursă).

În acest exemplu, problema poate fi rezolvată destul de ușor - în regulile noastre există un parametru Nu descărcați soldul dacă cantitatea este zero. Când este instalat, balanțele cu o cantitate zero pur și simplu nu vor fi descărcate. După cum puteți vedea în bilanțul prezentat în Figura 5.2, soldurile acestui subconto nu au cantitate, adică. acest reziduu problematic poate fi ușor eliminat folosind parametrul specificat.

În alte cazuri, când nu există nicio modalitate de a exclude un obiect folosind un filtru sau un parametru, utilizatorul ar trebui să corecteze eroarea din baza de date sursă înainte de a migra datele.

Un exemplu de eroare.

Să ne uităm la un exemplu de altă eroare descoperită în timpul transferului de date.

Când a încercat prima dată să încarce documente, utilizatorul a văzut următorul text în mesajele de sistem. Un mesaj de eroare ne permite să sărim peste mecanismul de a găsi când a apărut o eroare și să trecem la remedierea acesteia. Astfel de mesaje nu apar întotdeauna și, uneori, tot trebuie să cauți o eroare folosind metoda de descărcare una câte una. Am discutat deja despre cum să citim un astfel de mesaj mai sus.

Fig.6.1. Mesaj de eroare

Deci, programul însuși ne spune documentul problematic - aceasta este Factura către cumpărător IPBP-000008, ceea ce înseamnă că mergem imediat la document și încercăm să aflăm care este eroarea.

După cum puteți vedea în Figura 6.2, în acest document, în secțiunea tabelară „Bunuri și servicii”, pe unul dintre rânduri, este setat grupul de articole, și nu articolul în sine, ceea ce în sine este o eroare. Desigur, regulile de conversie pentru acest document nu specifică modul de conversie a unui obiect din această parte tabelară grup de nomenclatură, acesta este un element cu totul diferit de el însuși nomenclatură, iar programul nu are informații despre cum să mutați un element, în afară de ceea ce este specificat în reguli. Prin urmare, procesul de conversie nu îl recunoaște, nu îl poate converti și aruncă o eroare.

Fig.6.2. Document cu o eroare

Cum și de ce s-a stabilit acest lucru nu ne interesează momentan. Decidem să nu migrăm documentul, ceea ce înseamnă că îl excludem din lista de obiecte migrate. Găsirea regulii de încărcare a documentelor Factură de plată către cumpărător, selectați-l, mergeți la selecție, setați Câmp - Link, Tip de comparație - Nu este egal, Valoare - documentul nostru cu probleme. Astfel, vom exclude acest document din lista de obiecte transferate și încărcarea ar trebui să se desfășoare normal.

Fig.6.3. Setarea preferințelor pentru excluderea documentelor

După aceasta, puteți continua să încărcați într-un mod convenabil pentru dvs. - transferați toate documentele simultan sau transferați numai facturile pentru plată, cu excepția documentului găsit, apoi transferați restul - ordinea transferului de date poate fi oricare.

Trebuie remarcat aici că posibilitatea de selectare a obiectelor există în procesare Schimb de date GenericXML nu în toate configurațiile tipice. Mai precis, o astfel de funcționalitate este absentă în modul de aplicație gestionată. În special, într-o configurație tipică Automatizare integrată rev.1.1 puteți lucra atât în ​​modul de aplicare obișnuit, cât și în modul de aplicație gestionată sau, după cum se spune, în modul formulare gestionate. În primul caz, sunt posibile selecții în procesarea standard (vezi Fig. 4), în al doilea - nu. Apoi trebuie să utilizați versiunile modificate de procesare (vezi Fig. 6.3). Dacă configurația este utilizată în modul de compatibilitate cu platforma 8.2 (acesta este în special KA 1.1Și UPP 1.3), atunci este necesară prelucrarea Schimb de date GenericXML versiuni 2.1.7 . Dacă modul de compatibilitate nu este utilizat, cum ar fi în configurație Enterprise Accounting ediția 3.0, atunci trebuie să lucrați cu procesarea versiunii 2.1.8 . Aceste tratamente au, de asemenea, capacități suplimentare de completare a selecțiilor din jurnalul de bord (mai multe detalii), deci nu sunt incluse în toate opțiunile de livrare, dar pot fi oricând achiziționate fie ca parte a pachetelor marcate ca cu selecție în funcție de istoria vieții, sau separat.

Așa arată, în general, procesul de găsire și eliminare a unei erori care a apărut în timpul transferului de date 1C.

Puteți găsi alte materiale utile în secțiunea Articole sau site-ul nostru principal.

© Anna Balyasnikova, ultimele modificări aprilie 2018

Migrarea datelor între diferite configurații nu este o sarcină trivială. Ca întotdeauna, există mai multe soluții, dar nu toate sunt optime. Să încercăm să înțelegem nuanțele transferului de date și să alegem o strategie universală pentru rezolvarea unor astfel de probleme.

Problema migrării datelor (vorbim doar despre produsele companiei 1C) de la o soluție la alta nu a apărut ieri. Compania 1C înțelege perfect cu ce dificultăți se confruntă dezvoltatorii atunci când creează migrații, așa că încearcă în toate modurile posibile să ajute cu instrumente.

În timpul dezvoltării platformei, compania a introdus o serie de instrumente universale, precum și tehnologii care simplifică transferul de date. Ele sunt încorporate în toate soluțiile standard și problema migrărilor între configurații identice a fost în general rezolvată. Victoria este confirmată încă o dată de integrarea strânsă a soluțiilor standard.

Odată cu migrarea între soluții non-standard, situația este ceva mai complicată. O selecție largă de tehnologii le permite dezvoltatorilor să aleagă în mod independent modalitatea optimă de a rezolva o problemă din punctul lor de vedere.

Să ne uităm la unele dintre ele:

  • schimb prin fișiere text;
  • utilizarea planurilor de schimb;
  • etc.

Fiecare dintre ele are propriile sale avantaje și dezavantaje. Pentru a rezuma, principalul dezavantaj va fi verbozitatea sa. Implementarea independentă a algoritmilor de migrare este plină de costuri semnificative de timp, precum și de un proces lung de depanare. Nici nu vreau să vorbesc despre sprijin suplimentar pentru astfel de decizii.

Complexitatea și costul ridicat al asistenței au determinat compania 1C să creeze o soluție universală. Tehnologii care fac posibilă simplificarea cât mai mult posibil a dezvoltării și suportului migrațiilor. Drept urmare, ideea a fost implementată sub forma unei configurații separate – „Conversia datelor”.

Conversia datelor - soluție standard, configurație independentă. Orice utilizator cu un abonament „ITS:Prof” poate descărca acest pachet complet gratuit de pe site-ul de asistență pentru utilizatori sau de pe discul ITS. Instalarea se realizează într-un mod standard - ca toate celelalte soluții standard de la 1C.

Acum puțin despre avantajele soluției. Să începem cu cel mai important lucru - versatilitatea. Soluția nu este adaptată pentru anumite configurații/versiuni ale platformei. Funcționează la fel de bine atât cu configurațiile standard, cât și cu cele personalizate. Dezvoltatorii au o tehnologie universală și o abordare standardizată pentru a crea noi migrații. Versatilitatea soluției vă permite să pregătiți migrări chiar și pentru alte platforme decât 1C:Enterprise.

Al doilea mare plus îl reprezintă ajutorul vizual. Migrațiile simple sunt create fără programare. Da, da, fără o singură linie de cod! Numai pentru asta, merită să petreci timp învățând tehnologia o dată și apoi să folosești abilități neprețuite în mod repetat.

Al treilea avantaj pe care l-aș remarca este absența restricțiilor privind distribuția datelor. Dezvoltatorul însuși alege metoda de livrare a datelor către configurația receptorului. Există două opțiuni disponibile imediat: încărcarea într-un fișier xml și conexiune directă la baza de informații (COM/OLE).

Studiind arhitectura

Știm deja că conversia datelor poate face minuni, dar nu este încă pe deplin clar care sunt avantajele tehnice. Primul lucru pe care trebuie să-l înțelegeți este că orice migrare (conversie) a datelor se bazează pe reguli de schimb. Regulile de schimb sunt un fișier xml obișnuit care descrie structura în care vor fi încărcate datele din securitatea informațiilor. Serviciul de procesare care încarcă/descărcă date analizează regulile de schimb și realizează încărcarea pe baza acestora. În timpul încărcării, are loc procesul invers.

Configurația „CD” este un fel de constructor vizual cu ajutorul căruia dezvoltatorul creează reguli de schimb. Nu știe cum să descarce date. Procesarea suplimentară a serviciilor externe inclusă în pachetul de distribuție CD este responsabilă pentru aceasta. Există mai multe dintre ele (XX în numele fișierului este numărul versiunii platformei):

  • MDXXExp.epf- procesarea vă permite să încărcați o descriere a structurii bazei de informații într-un fișier xml. Descrierea structurii este încărcată în CD pentru analiza ulterioară și crearea regulilor de schimb.
  • V8ExchanXX.epf- incarca/descarca date din baza de informatii in conformitate cu regulile de schimb. În majoritatea configurațiilor tipice, procesarea este prezentă imediat (consultați elementul de meniu „Service”). Procesarea este universală și nu este legată de anumite configurații/reguli.

Bine, acum, pe baza tuturor celor de mai sus, să definim etapele dezvoltării unei noi conversii:

  1. Definirea sarcinii. Este necesar să înțelegeți clar ce date trebuie transferate (din ce obiecte de configurare) și, cel mai important, unde să le transferați.
  2. Pregătirea descrierilor structurilor de configurare (Source/Sink) pentru încărcarea ulterioară în CD. Problema este rezolvată prin procesarea serviciului MDXXExp.epf.
  3. Încărcarea descrierilor pregătite ale structurilor în securitatea informațiilor.
  4. Crearea regulilor de schimb folosind un instrument vizual CD.
  5. Efectuarea încărcării/descărcării conform regulilor create de conversie a datelor utilizând procesarea V8ExchanXX.epf.
  6. Reguli de schimb de depanare (dacă este necesar).

Cea mai simplă conversie

Pentru demonstrație vom avea nevoie de două configurații implementate. Am decis să merg cu opțiunea: „Trade Management” ediția a 10-a și o mică soluție scrisă acasă. Sarcina va fi transferarea datelor din configurația standard „UT”. Pentru concizie, să numim soluția auto-scrisă „Sink”, iar managementul comerțului „Sursă”. Să începem să rezolvăm problema transferând elemente din directorul „Nomenclatură”.

În primul rând, să aruncăm o privire asupra schemei de conversie a datelor și să recitim lista de acțiuni care trebuie făcute. Apoi lansăm configurația „Sursă” și deschidem procesarea serviciului MD82Exp.epf în ea.

Interfața de procesare nu are o mulțime de setări. Utilizatorul trebuie doar să indice tipurile de obiecte de metadate care nu vor fi incluse în descrierea structurii. În cele mai multe cazuri, aceste setări nu trebuie modificate, deoarece Nu are rost în special în descărcarea mișcărilor folosind registre de acumulare (de exemplu).

Este mai corect să formați mișcarea în timp ce țineți documente în receptor. Toate mișcările vor fi efectuate chiar de document după transfer. Al doilea argument în apărarea setărilor implicite este reducerea dimensiunii fișierului cu încărcare.

Unele documente (în special în configurațiile standard) generează mișcări în mai multe registre. Descărcarea tuturor acestor lucruri va face fișierul XML rezultat prea mare. Acest lucru poate complica transportul și încărcarea ulterioară în baza receptorului. Cu cât fișierul de date este mai mare, cu atât va fi necesară mai multă memorie RAM pentru a-l procesa. În timpul practicii mele, am avut ocazia să întâlnesc fișiere de încărcare indecent de mari. Astfel de fișiere au refuzat complet să fie analizate folosind instrumente standard.

Deci, lăsăm toate setările implicite și încărcăm descrierea configurației într-un fișier. Repetăm ​​o procedură similară pentru a doua bază.

Deschideți CD-ul și selectați în meniul principal „Directoare” -> „Configurații”. Directorul stochează descrieri ale structurilor tuturor configurațiilor care pot fi folosite pentru a crea conversii. Încărcăm descrierea configurației o dată și apoi o putem folosi de mai multe ori pentru a crea diferite conversii.

În fereastra directorului, faceți clic pe butonul „ Adăuga” iar în fereastra care apare, selectați fișierul care descrie configurația. Bifați caseta de selectare „Încărcare într-o nouă configurație” și faceți clic pe butonul „Încărcare”. Efectuăm acțiuni similare cu descrierea structurii celei de-a doua configurații.

Acum sunteți gata să creați reguli de schimb. În meniul principal al CD-ului, selectați „Directoare” -> „Conversii”. Adăugați un element nou. În fereastra pentru crearea unei noi conversii, trebuie să specificați: configurația sursă (selectați UT) și configurația destinației (selectați „Receiver”). Apoi, deschideți fila „Avansat” și completați următoarele câmpuri:

  • nume de fișier cu reguli de schimb - regulile de schimb create vor fi salvate sub acest nume. Puteți schimba oricând numele fișierului, dar cel mai bine este să îl setați acum. Acest lucru va economisi timp în viitor. Am numit regulile pentru exemplul demonstrativ: „rules-ut-to-priemnik.xml”.
  • nume - numele conversiei. Numele poate fi absolut orice, m-am limitat la „Demo. UT la receptor.”

Asta este, faceți clic pe „Ok”. Imediat apare o fereastră în fața noastră prin care ne cere să creăm toate regulile automat. Fiind de acord cu o astfel de ofertă tentantă, comandantul va avea comanda de a analiza automat descrierea configurațiilor selectate și de a genera independent reguli de schimb.

Să punctăm „iurile” imediat. Expertul nu va putea genera nimic serios. Cu toate acestea, această posibilitate nu trebuie ignorată. Dacă este necesar să se stabilească un schimb între configurații identice, atunci serviciile unui specialist vor fi foarte utile. Pentru exemplul nostru, modul manual este de preferat.

Să aruncăm o privire mai atentă la fereastra „Setări reguli de schimb”. Interfața poate părea puțin confuză - un număr mare de file pline de comenzi. De fapt, totul nu este atât de dificil; începi să te obișnuiești cu această nebunie după câteva ore de lucru cu aplicația.

În această etapă, ne interesează două file: „Reguli de conversie a obiectelor” și „Reguli de încărcare a datelor”. La început, trebuie să configuram regulile de potrivire, adică. comparați obiecte din două configurații. Pe al doilea, determinați posibilele obiecte care vor fi disponibile utilizatorului pentru încărcare.

În a doua jumătate a filei „Reguli de conversie a obiectelor” există un panou suplimentar cu două file: „Conversie proprietăți” și „ Conversia valorilor" Primul va selecta proprietățile (detaliile) obiectului selectat, iar al doilea este necesar pentru lucrul cu valori predefinite (de exemplu, elemente de director predefinite sau elemente de enumerare).

Grozav, acum să creăm reguli de conversie pentru directoare. Puteți efectua această acțiune în două moduri: utilizați Expertul de sincronizare a obiectelor (butonul „”) sau adăugați manual corespondență pentru fiecare obiect.

Pentru a economisi spațiu, vom folosi prima opțiune. În fereastra expertului, debifați grupul „ Documentație” (pe noi ne interesează doar directoare) și extindeți grupul ” Directoare" Derulăm cu atenție lista și ne uităm la numele cărților de referință care pot fi comparate.

În cazul meu, există trei astfel de directoare: Nomenclatură, Organizații și Depozite. Există, de asemenea, un director numit Clienți, care servește același scop ca „ Contrapartide"din configurare" UT" Adevărat, maestrul nu le-a putut compara din cauza numelor diferite.

Putem rezolva singuri această problemă. Găsim în fereastră „ Potriviri de obiecte" carte de referinta " Clienții„, iar în coloana „Sursă” selectați directorul „Contrapărți”. Apoi bifați caseta din coloana „Tip” și faceți clic pe butonul „Ok”.

Expertul de sincronizare a obiectelor va oferi să creeze automat reguli pentru conversia proprietăților tuturor obiectelor selectate. Proprietățile vor fi comparate după nume și pentru demonstrația noastră acest lucru va fi destul de suficient, suntem de acord. Următoarea întrebare va fi o propunere de a crea reguli de încărcare. Să fim și de acord cu asta.

Baza pentru regulile de schimb este gata. Am selectat obiectele pentru sincronizare, iar regulile pentru conversia proprietăților și regulile de încărcare au fost create automat. Să salvăm regulile de schimb într-un fișier, apoi să deschidem „Sursa” IB (în cazul meu este UT) și să lansăm procesarea serviciului în el V8Exchan82.epf.

În primul rând, în fereastra de procesare, selectați regulile de schimb pe care le-am creat. Răspundem afirmativ la întrebarea regulilor de încărcare. Procesarea va analiza regulile de schimb și va construi un arbore de obiecte cu același nume disponibile pentru încărcare. Pentru acest arbore, putem configura tot felul de selecții sau noduri de schimb, modificând care avem nevoie pentru a selecta datele. Dorim să descarcăm absolut toate datele, deci nu este nevoie să instalăm filtre.

După finalizarea procesului de încărcare a datelor într-un fișier, accesați IB „ Receptor" Deschidem și procesarea în ea V8Exchan82.epf, doar că de această dată mergem la fila „Încărcare date”. Selectați fișierul de date și faceți clic pe butonul „Descărcare”. Gata, datele au fost transferate cu succes.

Probleme din lumea reală

Primul demo ar putea induce în eroare. Totul pare destul de simplu și logic. De fapt, acest lucru nu este adevărat. În munca reală, apar probleme care sunt dificil sau complet imposibil de rezolvat folosind numai mijloace vizuale (fără programare).

Pentru a nu fi dezamăgit de tehnologie, am pregătit mai multe probleme din viața reală. Cu siguranță le vei întâlni la serviciu. Nu arată atât de banale și te fac să privești conversia datelor dintr-un unghi nou. Luați în considerare cu atenție exemplele prezentate și nu ezitați să le utilizați ca fragmente atunci când rezolvați probleme reale.

Sarcina nr. 1. Completați detaliile lipsă

Să presupunem că trebuie să transferăm directorul „ Contrapartide" Receptorul are un director similar „Clienți” în acest scop. Este complet potrivit pentru stocarea datelor, dar are recuzită „ Organizare”, care vă permite să separați contrapărțile prin apartenența la organizație. În mod implicit, toate contrapărțile trebuie să aparțină organizației curente (aceasta poate fi obținută din constanta cu același nume).

Există mai multe soluții la problemă. Vom lua în considerare opțiunea de a completa detaliile „ Organizare„chiar în baza de date” Receptor”, adică la momentul încărcării datelor. Organizația actuală este stocată într-o constantă, prin urmare, nu există bariere în obținerea acestei valori. Să deschidem regula de conversie a obiectelor (denumită în continuare PKO) „ Clienții” (dați dublu clic pe obiect) și în vrăjitorul de configurare a regulilor, mergeți la secțiunea „Manetari de evenimente”. În lista de manipulatori vom găsi „ După descărcare”.

Să descriem codul pentru obținerea organizației curente și apoi atribuirea acestuia la detalii. În momentul în care este declanșat handlerul „După încărcare”, obiectul va fi complet format, dar nu este încă scris în baza de date. Nimeni nu ne interzice să o modificăm la discreția noastră:

Dacă NU Object.ThisGroup, atunci Object.Organization = Constants.CurrentOrganization.Get(); endIf;

Inainte de a completa detaliile " Organizare„Este necesar să se verifice valoarea atributului” Acest grup" Pentru cartea de referință " Clienții„Funcția ierarhică este setată, așa că este necesară verificarea grupului. Completați orice detalii într-un mod similar. Asigurați-vă că citiți ajutorul pentru alte opțiuni de gestionare " După Încărcare" De exemplu, printre ele se numără parametrul „ Refuz" Dacă îi atribuiți valoarea „True”, atunci obiectul nu va fi scris în baza de date. Astfel, devine posibilă limitarea obiectelor care pot fi scrise în momentul încărcării.

Sarcina nr. 2. Detalii pentru registrul de informații

În directorul „ Contrapartide„Configurații UT, detalii disponibile” Cumpărător" Și " Furnizor" Ambele detalii sunt de tipul „ boolean” și sunt folosite pentru a determina tipul de contrapartidă. În IB „ Receptor”, la directorul “ Clienții„Nu există detalii similare, dar există un registru de informații” Tipuri de Clienti" Îndeplinește o funcție similară și poate stoca mai multe atribute pentru un client. Sarcina noastră este să transferăm valorile detaliilor în intrări separate în registrul de informații.

Din păcate, mijloacele vizuale singure nu pot face față nici aici. Să începem cu mici, să creăm un nou software pentru registrul de informații „ Tipuri de Clienti" Nu cita nimic ca sursă. Evitați crearea automată a regulilor de încărcare.

Următorul pas este crearea regulilor de încărcare. Accesați fila corespunzătoare și faceți clic pe „ Adăuga" În fereastra pentru adăugarea regulilor de încărcare, completați:

  • Metoda de eșantionare. Schimbați la „Algoritm arbitrar”;
  • Regula de conversie. Selectați registrul de informații „Tipuri de clienți”;
  • Codul (numele) regulii. Notați-l ca „Descărcarea tipurilor de client”;

Acum trebuie să scrieți cod pentru a selecta datele pentru încărcare. Parametrul „ Eșantionarea datelor" Putem plasa o colecție cu un set de date pregătit în ea. Parametrul " Eșantionarea datelor” poate prelua diverse valori - rezultat al interogării, selecție, colecții de valori etc. O inițializam ca un tabel de valori cu două coloane: client și tip client.

Mai jos este codul pentru gestionarea evenimentelor „ Înainte de prelucrare" Inițializează parametrul „ Eșantionarea datelor” urmat de completarea datelor din directorul ” Contrapartide" Aici ar trebui să acordați atenție completării coloanei „ Tipul de client" În „UT” atributele noastre sunt de tip „Boolean”, iar destinatarul este o enumerare.

În această etapă, nu le putem converti în tipul necesar (nu este în UT), așa că deocamdată le vom lăsa sub formă de șiruri. Nu trebuie să faceți acest lucru, dar vreau să vă arăt imediat cum să proiectați un tip lipsă din sursă.

DataFetch = New ValueTable(); DataSelection.Columns.Add("Client"); DataSelection.Columns.Add("ClientType"); SelectingDataFromDirectory = Directories.Accounts.Select(); În timp ce SelectingDataFromDirectory.Next() Buclă dacă SelectingDataFromDirectory.ThisGroup Apoi Continuați; endIf; Dacă Selectarea datelor din Directory.Buyer, atunci NewRow = Data Selection.Add(); NewRow.Client = DataFetchFromDirectory.Link; NewRow.ClientType = "Client"; endIf; Dacă DataFetchFromDirectory.Supplier, atunci NewRow = DataFetch.Add(); NewRow.Client = DataFetchFromDirectory.Link; NewString.ClientType = "Furnizor"; endIf; EndCycle;

Să salvăm regula de încărcare a datelor și să revenim la fila „ Reguli de conversie a obiectelor" Să adăugăm pentru registrul de informații „ Tipuri de Clienti” reguli de conversie a proprietății: client și tip de client. Vom lăsa sursa goală, iar în handlerul de evenimente „Înainte de descărcare” vom scrie:

//Pentru proprietatea „Client” Value = Source.Client; //Pentru proprietatea „ClientType” If Source.Client = „Buyer” Then Expression = „Enumerations.ClientTypes.Buyer” ElseIf Source.Client = „Supplier” Then Expression = „Enumerations.ClientTypes.Supplier”; endIf;

În listă, detaliile sunt completate pe baza eșantionului de date selectat. Pur și simplu trecem clientul ca link și scriem tipul de client în parametrul „ Expresie" Datele acestui parametru vor fi interpretate în receptor, iar atunci când este executat, recuzita va fi completată cu valoarea corectă din enumerare.

Asta e, regulile de schimb sunt gata. Exemplul considerat s-a dovedit a fi destul de universal. O abordare similară este adesea folosită la migrarea datelor din configurațiile create pe platforma 7.7. Un exemplu izbitor în acest sens este transferul de detalii periodice.

Sarcina nr. 3. Trucuri cu piese de masă

Adesea, întâlniți sarcini care necesită postarea rândurilor dintr-o secțiune de tabel în mai multe. De exemplu, în configurația inițială, serviciile și bunurile sunt înregistrate într-o parte tabulară, iar în receptor, stocarea acestor entități este separată. Din nou, problema nu poate fi rezolvată prin mijloace vizuale. Aici este convenabil să luăm ca bază soluția celei de-a doua probleme.

Facem o regulă pentru descărcarea datelor, specificăm un algoritm arbitrar, iar în handlerul „Înainte de descărcare” scriem o solicitare pentru a obține date din partea tabelară.

Pentru a economisi spațiu, nu voi furniza codul (vă puteți referi oricând la sursele) solicitării - nu este nimic neobișnuit în ea. Sortăm selecția rezultată și plasăm rezultatele sortate în parametrul deja familiar „ Eșantionarea datelor" Este din nou convenabil să folosiți un tabel de valori ca colecție:

DataFetch = New ValueTable(); //Va fi o altă parte a tabelului aici Data Selection.Columns.Add(„Produse”); //Aici va exista și o parte tabelară Data Selection.Columns.Add(„Servicii”); SelectionData.Columns.Add(„Link”);

Sarcina nr. 4. Transferarea datelor la o operațiune

Dacă o organizație folosește mai multe sisteme de contabilitate, atunci mai devreme sau mai târziu va fi nevoie să migreze datele cu generarea ulterioară a tranzacțiilor.

În configurația „ BP„Există un document universal” Operațiune” și este ideal pentru a forma mai multe fire. Există o singură problemă - documentul este realizat cu viclenie, iar datele nu pot fi transferate în el atât de ușor.

Veți găsi un exemplu de astfel de conversie în codul sursă al articolului. Cantitatea de cod s-a dovedit a fi destul de mare, așa că nu are rost să o publicăm împreună cu articolul. Permiteți-mi doar să spun că încărcarea din nou folosește un algoritm arbitrar în regulile de încărcare a datelor.

Sarcina nr. 5. Sincronizarea datelor prin mai multe detalii

Ne-am uitat deja la câteva exemple, dar încă nu am vorbit despre sincronizarea obiectelor în timpul migrării. Să ne imaginăm că trebuie să transferăm contrapărți și unele dintre ele sunt probabil în baza de date a receptorilor. Cum să transferați date și să preveniți apariția duplicatelor? În acest sens, CD-ul oferă mai multe modalități de sincronizare a obiectelor transferate.

Primul este prin identificatorul unic. Multe obiecte au un identificator unic care garantează unicitatea într-un tabel. De exemplu, în directorul „ Contrapartide” nu pot exista două elemente cu aceiași identificatori. CD face calcule pentru aceasta și pentru toate PCO create, o căutare după identificator este imediat activată în mod implicit. În timpul creării PCO, ar fi trebuit să fi acordat atenție imaginii unei lupe de lângă numele obiectului.

Sincronizarea folosind un identificator unic este o metodă fiabilă, dar nu este întotdeauna adecvată. La fuzionarea directoarelor „ Contrapartide” (din mai multe sisteme diferite) nu va ajuta prea mult.

În astfel de cazuri, este mai corect să sincronizați obiectele după mai multe criterii. Este mai corect să căutați contrapărți după INN, KPP, Nume sau împărțiți căutarea în mai multe etape.

Conversia datelor nu limitează dezvoltatorul în definirea criteriilor de căutare. Să ne uităm la un exemplu abstract. Să presupunem că trebuie să sincronizăm directoarele „ Contrapartide” din diferite baze de informații. Să pregătim PKO și în setările regulilor de conversie a obiectelor, bifați „ Continuați căutarea în câmpurile de căutare dacă obiectul receptor nu este găsit prin identificator" Cu această acțiune, am definit imediat două criterii de căutare - printr-un identificator unic și câmpuri personalizate.

Avem dreptul să alegem singuri câmpurile. Bifând TIN, KPP și Nume, vom indica imediat mai multe criterii de căutare. Confortabil? Destul, dar din nou acest lucru nu este suficient. Dacă vrem să schimbăm criteriile de căutare? De exemplu, mai întâi căutăm combinația TIN+KPP, iar dacă nu găsim nimic, atunci începem să ne încercăm norocul cu numele.

Un astfel de algoritm este destul de capabil de a fi implementat. În gestionarea evenimentelor „ Câmpuri de căutare” putem specifica până la 10 criterii de căutare și pentru fiecare dintre ele definim propria compoziție a câmpurilor de căutare:

Dacă SearchOptionNumber = 1, atunci SearchPropertyNameString = „TIN, KPP”; OtherwiseIfSearchOptionNumber = 2 ThenSearchPropertyNameString = „Nume”; endIf;

Există întotdeauna mai multe soluții

Orice sarcină are mai multe soluții, iar transferul de date între diferite configurații nu face excepție. Fiecare dezvoltator are dreptul de a-și alege propria cale de soluție, dar dacă trebuie să dezvolți constant migrații complexe de date, atunci recomand cu tărie să acordați atenție „”. S-ar putea să fii nevoit să investești resurse (timp) în formare la început, dar acestea vor plăti mai mult decât primul proiect mai mult sau mai puțin serios.

În opinia mea, compania 1C ignoră în mod nedrept subiectul utilizării conversiei datelor. Pe toată durata existenței tehnologiei, a fost publicată o singură carte despre ea: „1C: Enterprise 8. Conversia datelor: schimb între soluții de aplicație”. Cartea este destul de veche (2008), dar este totuși indicat să vă familiarizați cu ea.

Cunoașterea platformelor este încă necesară

„ este un instrument universal, dar dacă intenționați să îl utilizați pentru a crea migrații de date din configurații dezvoltate pentru platforma 1C: Enterprise 7.7, atunci va trebui să petreceți timp familiarizându-vă cu limbajul încorporat. Sintaxa și ideologia limbii sunt foarte diferite, așa că va trebui să petreceți timp învățând. În rest principiul rămâne același.



Ți-a plăcut articolul? Împărtășește-l