Cum să găsiți o eroare la transferul de date. Cum să găsiți o eroare la transferul de date Reguli pentru conversia obiectelor 1c

Acasă / Îngheață

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, 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 de autocontabil. 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-supportingRemains.Subconto1 AS Subconto1,
| ISNULL(SUM(Self-AccountingRemaining.AmountRemainingDt),0) AS AmountRemainingDt,
| ISNULL(SUM(Self-accountingRemains.AmountRemainingCt),0) AS AmountRemainingCt,
| MAXIM (Solduri auto-contabile.Subcont2.Data) AS Data documentului de decontare,
| MAXIM (Solduri auto-contabile.Subcont2.Număr) AS Număr document contabil
|DIN
| Registrul de contabilitate
|UNDE
<>&grup și
| Solduri autonome Subcont 1. Părinte<>&grup1
|GRUPA DE
| Solduri autonome.Cont,
| Solduri autonome subcontul 1,
| Rămăși 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 = Contrapartide Găsiți după nume ("Returns from INDIVIDUS");

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); cerere.SetParameter("grup1", grup1);
request.SetParameter("OnDate",OnDate);
request.SetParameter("Cont", Planuri de conturi. Auto-contabil. Calcule cu alți furnizori și antreprenori);//76.05
Fetch = request.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 start");
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 o nouă regulă acolo cu numele „Input Balances By Mutual Settlement_7605Credit”, lăsăm obiectul sursă gol, setăm 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:

Generare 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;
object.organization=parameters.organization;
pentru fiecare pagină din bucla obiect.calculationspartners
Page.SettlementDocument = Directories.Counterparty Agreements.empty link();
PageCurrencySettlements = valuta;
dacă ValueFilled(page.counterparty.partner) atunci
p.partner = p.contraparte.partener;
altfel
parteneri = Directories.Partners.FindByName(page.counterparty.Name);
dacă biroul<>Nedefinite și birouri<>Directories.Partners.emptylink() atunci
p.partner = birou;

obiect2.Partener = birou;
obiect2.Scrie();
altfel
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țile, dar UT folosește parteneri, așa că după generarea documentului, verificăm dacă toate contrapărțile și partenerii sunt în baza de date a destinatarului, 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;
contraparte = 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.

Imprimare (Ctrl+P)

Handler Înainte de înregistrarea datelor primite

Procedură PKO_<ИмяПКО>_Înainte de înregistrarea datelor primiteîn modulul general Manager de schimb prin format universal conține textul de gestionare Înainte de înregistrarea datelor primite pentru un anumit PKO. Textul de gestionare poate fi gol. Cu toate acestea, în practică este întotdeauna folosit la încărcarea datelor pentru a implementa o logică suplimentară care trebuie efectuată înainte de a scrie un obiect în baza de informații. De exemplu, dacă modificările sunt încărcate în datele de securitate a informațiilor existente sau ar trebui să fie încărcate ca date noi.

Handler-ul conține următorii parametri;

  1. InformațiiB date– Tip – DirectoryObject, DocumentObject. Un element de date din baza de informații care corespunde datelor primite. Dacă nu se găsesc date care se potrivesc, atunci acest parametru are valoarea Nedefinit .
  2. Date primite– Tip – DirectoryObject sau DocumentObject. Element de date format din conversia datelor XDTO. Înregistrate dacă aceste date sunt noi pentru baza de informații (parametrul IB Data conține valoarea Nedefinit ). ÎN altfel Date primiteînlocui InformațiiB date(toate proprietățile de la Date primite transferat la InformațiiB date). Dacă nu este necesară înlocuirea standard a datelor de securitate a informațiilor cu datele primite, ar trebui să scrieți propria logică de transfer și apoi să instalați Date primite sens Nedefinit
  3. ConvertingProperties. Tip - Tabelul de valori. Conține reguli pentru conversia proprietăților obiectului curent, inițializate ca parte a sesiunii de schimb.
  4. Schimb de componente. O structură care conține componente de schimb: reguli de schimb și parametri de schimb. Procedura de inițializare a componentelor de schimb este localizată în modul Schimb de dateXDTOServer

Să ne uităm la câteva exemple practice pe care le-am rezolvat într-o configurație avansată, pentru a nu schimba configurația de bază a soluțiilor tipice de aplicație 1C.

Nu înlocuiți obiectele găsite la încărcare

În regulile de conversie a obiectelor din ediția 3.0, spre deosebire de ediția 2.0, nu există nicio proprietate „Nu înlocuiți obiectele găsite la încărcare”, datorită căreia obiectele găsite în baza de informații receptor nu vor fi modificate de valoarea câmpurilor de sincronizare.

În regulile de conversie a obiectelor din ediția 3.0, parametrul InformațiiB date are valoarea nedefinită dacă obiectul nu este găsit. În plus, dacă parametrul Date primite are semnificație nedefinit apoi la ieșirea din handler, m nu va fi înlocuit.

Angajatorul mi-a cerut să schimb regulile de conversie între configurațiile standard ale UT 11 și BP 3.0 pentru ca datele din directorul organizațiilor și depozitelor din departamentul de contabilitate să nu fie vândute la schimbul cu UT. Au vândut în special detaliile suplimentare ale acestor directoare către departamentul de contabilitate, de fiecare dată când elemente din aceste directoare erau înregistrate în UT pentru a fi trimise către departamentul de contabilitate.

Am efectuat această sarcină în extensia de configurare contabilă pentru a nu schimba configurația principală. Soluția este prezentată în Fig. 1. Dacă elementul director există (găsit în sursă), atunci parametrul InformațiiB date este definită și că toate proprietățile din Date primite NU transferat la InformațiiB date ar trebui instalat Date primite sens Nedefinit

Fig 3 Fragment codul programuluiîn extensia de configurare

Dacă obiectul director nu este găsit, atunci parametrul InformațiiB date contează Nesigur și apoi Sun procedura Continuați apelul pentru a continua apelarea handler-ului de evenimente din configurația extensibilă

Nu reflectați documentele în contabilitatea reglementată

Mi s-a cerut să fac posibilă nu reflectarea în contabilitate 3.0 a unor documente de expediere care sunt create în managementul comerțului 11. În acest scop, am introdus un detaliu suplimentar al documentului de implementare „Nu reflectați documentele în contabilitatea reglementată”. Dacă marcajul este setat, atunci acest document trebuie marcat pentru ștergere în baza de date a receptorului (BP 3.0). Complexitatea acestei sarcini constă în faptul că în departamentul de contabilitate al întreprinderii documentele nu au detalii suplimentare. Am decis să folosesc câmpul de comentarii. Când trimit pe partea sursă (UT 11), completez atributul de comentarii cu inscripția corespunzătoare, iar pe receptor (BP), în handler, înainte de a înregistra datele primite, am stabilit un marcaj pentru ștergere, așa cum se arată în Fig. 2

Manual privind conversia datelor 1C (ediția 2) Reguli pentru conversia obiectelor

După cum știm deja, regulile de conversie a obiectelor sunt folosite pentru a potrivi obiectele din configurațiile sursă și destinație. Desigur, regula specifică obiectul sursă de date (adică de unde să obțină datele) și obiectul receptor de date (adică unde să transfere sau să scrie datele).

Pe lângă acestea, există o serie de proprietăți a căror semnificație vom încerca să le dezvăluim.

Căutați un obiect destinație după identificatorul intern al obiectului sursă- flag care definește căutarea obiectelor în receptor pentru versiunea platformei V8. Dacă acest flag este bifat, atunci căutarea unui obiect pentru modificare în baza de date a receptorului se realizează folosind identificatorul intern (unic) al obiectului. Acest identificator nu este vizibil pentru utilizator, iar programul menține unicitatea identificatorilor din baza de informații, astfel încât să nu aibă două obiecte din baza de informații aceiași identificatori.

Continuați căutarea prin câmpurile de căutare dacă obiectul receptor nu este găsit prin identificator- indicatorul determină continuarea căutării unui obiect în baza de informații a receptorului dacă căutarea prin identificator unic nu conduce la un rezultat pozitiv.

Nu înlocuiți obiectele existente în receptor la încărcare, ci doar creați altele noi și umpleți-le *- steag-ul determină dacă este necesară modificarea detaliilor obiectului din baza de info receptor dacă obiectul a fost găsit cu succes printr-un identificator unic sau prin câmpuri de căutare.

Nu creați un obiect nou în receptor dacă NU este găsit *- flag-ul determină dacă un nou obiect trebuie creat în baza de informații receptor dacă nu a fost găsit printr-un identificator unic sau prin câmpuri de căutare.

Când transferați un obiect prin referință, NU creați un obiect nou, ci doar transferați referința- flag-ul determină dacă un nou obiect trebuie creat în baza de informații receptor dacă nu a fost găsit printr-un identificator unic sau prin câmpuri de căutare dacă obiectul este transferat prin referință. Dacă obiectul nu este găsit și este căutat prin identificator unic, atunci va fi transferată doar linkul către obiect (fără câmpuri de căutare - un link). Dacă obiectul este descărcat direct (adică nu numai linkul către obiect este descărcat, ci și toate detaliile acestuia), atunci steagul nu afectează nimic.

Nu descărcați obiecte de proprietate sursă prin linkuri- indicatorul determină dacă este necesar să se descarce toate obiectele la care obiectul sursă are legături sau dacă este suficient să se descarce doar informații despre legăturile către aceste obiecte. Să presupunem că încărcați o carte de referință pentru produse. Dacă PKO-ul corespunzător nu are această casetă de selectare selectată, atunci pe lângă element, toate obiectele la care se referă vor fi descărcate. Dacă steagul este armat, atunci obiectele la care se referă nomenclatorul nu vor fi descărcate. Încercați să bifați această casetă și să vizualizați fișierul de încărcare a datelor rezultat, apoi să îl eliminați și să comparați rezultatele. Îi vei înțelege rapid sensul.

Nu vă amintiți obiectele descărcate- indicatorul determină dacă sistemul trebuie să memoreze în cache ultimele obiecte descărcate la descărcare. Memorarea în cache vă permite să accelerați procesul de încărcare și încărcare a datelor.

Utilizare căutare rapidă obiect în timpul descărcarii și încărcării- indicatorul determină dacă se utilizează o căutare rapidă a obiectelor pentru încărcare. Este logic să îl folosiți pentru un număr mic de intrări în director (numărul de intrări nu depășește 1000 de elemente). Efectul este obținut dacă multe obiecte au steag-ul setat Nu descărcați obiecte de proprietate prin referință. Cu această schemă de încărcare și încărcare a datelor, viteza crește de mai multe ori.

Generați automat un număr sau un cod dacă nu este specificat- indicatorul determină dacă sistemul trebuie să genereze automat un nou cod sau număr de obiect dacă nu este completat înainte de înregistrare.

Schimb on-line

Descărcați un obiect (în întregime), numai dacă există un link către el- setarea determină în ce circumstanțe trebuie descărcat obiectul. Dacă caseta de selectare este bifată, obiectul va fi descărcat conform următoarelor reguli:

  1. Conform regulilor de descărcare, dacă un obiect a fost deja descărcat, atunci descărcați-l așa cum este
  2. Conform regulilor de descărcare, dacă obiectul nu a fost descărcat, atunci nu descarcăm
  3. Când încărcăm folosind un link către un obiect, încărcăm totul

De exemplu, dacă nu trebuie să transferați întregul articol de la un IS la altul, ci doar cel către care există link-uri, atunci caseta de selectare va fi potrivită.

Nu înlocuiți un obiect creat în baza de informații a receptorului la încărcare- setarea determină dacă este necesar să se transfere (înapoi) un obiect care a fost creat în infobaza cu care a fost organizat schimbul. Adică, dacă un document a fost creat în baza de date 1 și a intrat în baza de date 2 printr-un schimb, atunci ar trebui să fie transferat în baza de date 1 atunci când este schimbat în baza de date 2. Setarea vă permite să specificați prioritatea unui obiect la locul de schimb? crearea acestuia. Adică, modificările din baza de date în care a fost creat obiectul sunt distribuite peste tot, iar modificările din alte baze de date nu afectează acest obiect din baza de date 1.

Încărcați prioritatea obiectului- setarea determină prioritatea obiectului la încărcare în cazul unei coliziuni de modificări. Valoarea implicită și în cazul unei valori goale este Mai sus. Dacă are loc o coliziune, programul analizează prioritatea obiectului descărcat. Numai dacă prioritatea obiectului descărcat este egală cu Mai sus va fi înregistrat în baza de informații a receptorului. Dacă prioritatea este Same sau Below, programul va înregistra informațiile corespunzătoare despre coliziune în baza de informații, dar nu va schimba obiectul.

Căutați opțiuni pentru setările câmpului- masa cu opțiuni posibile setările câmpului de căutare pentru utilizator. Factorul regulilor determină combinatii posibile câmpuri de căutare pe care utilizatorul le poate selecta atunci când configurează un schimb. Toate setările specificate de dezvoltatorul regulii trebuie procesate în codul de gestionare „Câmpuri de căutare”. Variabila SearchSettings din handler determină opțiunea de potrivire selectată de utilizator (SettingNameForAlgorithm din rândul corespunzător al tabelului). Dacă utilizatorul nu a selectat nicio opțiune de potrivire sau nu i s-a oferit nicio opțiune, atunci Setări de căutare este un șir gol.

În fila „Avansat”, puteți edita numele regulii, includerea acesteia într-un anumit grup, precum și descrierea regulii.

Se știe că programele 1C sunt convenabile și unealta multifunctionala pentru automatizarea contabilă, 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 spune 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. Aceste. 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. Aceste. 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 Documente. 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, documente 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ă cu o eroare.

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 primire nu se va încărca. 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 să găsiți locația și cauza acestei erori numai prin descărcare diferite tipuri obiecte. 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 handler-ul 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 serviciu

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 Obiectîn acest mesaj. ÎN în acest caz, acest obiect este Invertor aparat de sudura VDI 160R (Mije fixe). Deja în în acest moment se vede 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 de uz casnic” 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 în contul 10.09 o eroare complet evidentă 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 Mijloace primare 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 în 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 utilizatorul a încercat pentru prima dată să încarce documente, 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 în sine ne spune documentul problematic - acesta 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 de un tip complet 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 a fost stabilit acest lucru nu ne interesează în acest moment. 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 - Legătură, Tip de comparație - Nu este egal, Valoare - documentul nostru cu probleme. Astfel vom exclude acest document din lista de obiecte transferate și descă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 mod aplicație gestionată. În special, într-o configurație standard Automatizare integrată rev.1.1 puteți lucra în oricare dintre moduri aplicare regulată, și în modul de aplicație gestionată sau, după cum se spune și în modul de 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), așa că 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 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 susținerii 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 aceasta, merită să petreceți timpul învățând tehnologia o dată, apoi să folosiți în mod repetat abilitățile neprețuite.

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. Reguli de schimb - 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 întregii economii va face rezultatul fișier XML 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 veți avea nevoie de mai mult RAM să o prelucreze. Î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ă - număr mare file pline cu 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ă 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 „ Documente” (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 referință « 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 descă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 în întregime adevărat. ÎN munca adevarata 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” Acesta este un 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 puțin, să creăm un nou software pentru registrul de informații „ Tipuri de Clienti" Nu cita nimic ca sursă. Din crearea automată refuză regulile de descă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. Îl 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 „ Tip 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; Tipuri de Clienti NewRow.ClientType = "Client";

endIf;

Dacă DataFetchFromDirectory.Supplier, atunci NewRow = DataFetch.Add(); NewRow.Client = DataFetchFromDirectory.Link; NewString.ClientType = "Furnizor";

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 împărțită. 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 (puteți oricând să vă referiți 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țiunea” și este ideal pentru a forma mai multe fire. Există o singură problemă - documentul este realizat cu viclenie, iar datele nu pot fi transferate la 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 mulți 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 câmpurilor 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? Chiar, 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ă trebuiască să investești resurse (timp) în formare la început, dar ele 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 migrări de date din configurații dezvoltate pentru platforma 1C:Enterprise 7.7, atunci va trebui să petreceți timp familiarâ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.

© 2024 ermake.ru -- Despre repararea PC-ului - Portal de informații