Secvență alternativă de documente

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ă.
  • Să spunem că am găsit o carte de referință # 147; Clienții # 148;. Creați o nouă recuzită periodică de tip # 147; Documentul nr. 148; Să o numim, de exemplu, Border. Expunem opțiunea de recuzită # 147; Modificat prin documente # 148; și dezactivați opțiunea # 147; Modificare manuală # 148;. Puteți insera aceste elemente de recuzită în formă, dar în modul R / O # 151; utilizatorii nu ar trebui să fie în măsură să-l modifice.
  • Noi scriem o funcție globală de acest fel:

    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.

  • Acum adăugăm mai multe linii în modulul de document:

    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

  • Pentru a nu suferi restabilirea manuală a microsecvenței noastre, facem procesarea serviciilor, care găsește toate documentele pentru clientul potrivit pentru o anumită perioadă și le transportă în ordinea dorită. Pentru a nu pierde timpul la pre-anulare, este posibil să trimiteți un semn (constantă, variabilă globală etc.) la procedura de verificare pentru a întoarce întotdeauna o unitate dacă comportamentul nu a fost inițiat de utilizator, ci de prelucrarea serviciilor. Va fi necesar să facem o duzină de alte lucruri, a căror descriere îmi va fi dor de mine, deoarece cititorii mei ipotetici au o bună imaginație și o bogată experiență profesională.
  • În acest exemplu, este selectată cea mai dificilă versiune a comportamentului sistemului, când backdating funcționează numai prin procesare specială (posibil numai cu autorizație DB) și toate celelalte încercări sunt blocate. Dar nimeni nu interzice implementarea unei scheme mai loiale pentru utilizatori # 151; când fapta încălcării secvenței este pur și simplu fixată undeva și apoi plutește la un moment dat. Aceasta este o chestiune de gust (sau TK), personal, prefer să nu dau utilizatorului posibilitatea de a face ceva greșit, decât să depășească cu succes consecințele acestei # 147; greșit # 148;.

    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






    Articole similare

    Trimiteți-le prietenilor: