De fapt, ce ar putea fi mai rău? Fluxul depășește sosirea, în depozit există un sold negativ, iar contabilitatea parțială ajustată și calculată cu atenție zboară către bunicul diavolului. Ce ar trebui să fac?
Cea mai simplă metodă este interdicția administrativă (în sensul tehnic al cuvântului) de a efectua documente retroactiv. De fapt, la urma urmei # 147; bastardii morți nu pot moșteni tronul # 147; Dar nu fiecare client este de acord cu acest punct de vedere al programatorului. Și va avea dreptate # 151; nu este numai și nu atât de multă oprire a personalului, pierzând întotdeauna unele documente și găsind în mod neașteptat alții pierduți acum o lună. Multe procese de afaceri sunt construite astfel încât realizarea documentelor de backdating este parte integrantă a acestora # 151; de exemplu, atunci când furnizorul desemnează sărbătorile (și pentru noi achiziționează) prețurile pentru un lot de mărfuri după vânzarea acestui lot.
Deci nu va funcționa. Dacă programatorul nu poate garanta corectitudinea calculelor necesare pentru client, clientul nu va intra într-o dezbatere, ci pur și simplu angajează un alt programator. Și va avea dreptate.
Firma 1C ne-a îngrijit, după ce a intrat în platforma de control al comportamentului documentelor un obiect special # 147; secventa # 148; Ideea este următoarea: determinăm ce documente sunt incluse în secvență, ale căror mișcări sunt de valoare pentru registrele comise de aceste documente. și totul, putem dormi pașnic. Sistemul în sine va urmări integritatea secvenței și ordinea cronologică și, în orice moment, folosind metodele programului acestui obiect, vom putea afla dacă secvența este întreruptă și vom continua să acționăm conform înțelegerii noastre # 151; blocați bolțul, avertizați utilizatorul, forțați-l să rearanjeze documentele în ordinea corectă, să trimită o plângere șefului utilizatorului, să formateze hard diskul etc.
Se pare că problema este rezolvată. Dar nu totul este atât de simplu # 151; restaurarea coerenței în practică înseamnă redirecționarea totală a tuturor documentelor incluse în secvență, începând cu # 147; rău # 148; și se termină cu cea mai recentă dată. Și dacă # 147; rău # 148; documentul se află la începutul anului trecut? Dacă în acest an au fost introduse în baza de date o jumătate de milion de documente? Dacă avem o sută de furnizori și 99 lucrăm cu noi ca oameni și cu suta # 151; ca cea mai reală inumană, dar este cea mai importantă pentru noi și pentru noi # 147; rău # 148; facturile din ea vin în fiecare săptămână? Trebuie să traducem și să numărăm în mod constant sute și mii (și în special norocoase și zeci de mii) documente nevinovate. Programatorii inventează cele mai incredibile moduri de a face viața mai ușoară, creând instrumente pentru recuperarea secvențială automată arbitrar. Coerența nu corespunde în mod clar rolului medicinii universale. Acum, dacă ar putea fi legat nu de mișcările registrului, ca atare, ci de deplasările registrului pentru un anumit set de măsurători. ar fi mult mai convenabil.
Încercați să uitați temporar existența obiectului # 147; Secventa # 148; și înarmați cu un instrument numit # 147; mâinile proprii # 148;. Ce se întâmplă?- În primul rând, definim # 147; cheia # 148; măsurarea registrului prin care trebuie să controlam mișcările (de obicei, aceasta este dimensiunea cea mai de sus). Vom asigura că aceasta este o carte de referință, deoarece pentru non-directoare metodologia nu a fost încă inventată.
Verificarea funcției (Con) Export
Boundary = cont.Customer.Granitsa.Receive (WorkDate ());
Dacă comparați piesele de timp (Border, Cont.Threading Document ()) = 1 Apoi
Raportați ("ay-ah! Sequence is broken");
Return 0;
altfel
Întoarcere 1;
Sfârșit Dacă;
Terminați funcția
Funcția Compara TimeCards () compară cu două documente în funcție de dată / oră și nu-i citez codul datorită trivialității complete.
Procedura de procesare ()
Dacă verificați (Context) = 0 Apoi
Stare de returnare (0);
return;
Sfârșit Dacă;
// aici este realizarea efectivă a documentului
Setați cerințele directorului (Client, "Border",
Document curent (), DataDoc. ););
Sfârșitul procedurii
Ce avem în cele din urmă? Efectuarea retroactivă a unui document necesită recalcularea întregii baze de date # 147; de la gard până la prânz # 148; dar numai câteva dintre documente. Codul de mai sus este implementarea celui mai simplu caz, deoarece # 147; cheia # 148; Măsurarea registrelor influențate de document, de obicei câteva (client, produs, firmă etc.) și schema de mai sus va da o victorie în nici un caz în nici un caz. Dar, în unele cazuri (și acest lucru este verificat de practică), utilizarea mecanismului # 147; inteligent # 148; secvențe oferă un efect bun.
Și unde este rake-ul, cititorul atent va întreba? La urma urmei, nu poate fi limitarea tehnologică a platformei atât de elementară. Într-adevăr, rake-ul este prezent.
Nu sa întâmplat ca am schimbat un șut pentru un săpun, dar pentru altul? Totul depinde de situație. Nici o sarcină nu este rezolvată într-un mod general și nici o soluție universală nu poate face fără costuri suplimentare. Pur și simplu într-un caz, o soluție este mai avantajoasă, iar în alta # 151; mai mult. Există încă situații care sunt numite # 147; Dodge-22 # 148; dar mi se pare că problema restabilirii secvențelor la astfel de nu se aplică ;-)- Ilustrație în format mic