Cum să-i arăți angajatorului că știi să lucrezi în echipă. Jocurile de echipă nu sunt pentru toată lumea

Întrebarea veche: de ce nu există destui profesioniști pentru toată lumea? M-am gândit încă o dată la asta după aniversarea familiei prietenilor mei...
Pentru a organiza un eveniment atât de important, au invitat o femeie-maestru de ceremonii și o fată-DJ. Costul lor a fost de 3 ori mai mic decât costul meu cu un DJ în astfel de seri. Orice ieftinit imi trezeste intotdeauna suspiciuni. Desigur, eram gata să petrec chiar eu această vacanță complet gratuit, dar mi s-a spus imediat: "Sunteți oaspete! Vom invita și alți profesioniști".
Profesioniștii din primele minute au început să se piardă, publicul s-a adunat foarte diferit și iubitor de libertate. În plus, echipamentul DJ-ului a fost scos în mod evident dintr-un karaoke de acasă: microfonul a șuierat, a bubuit, a mormăit, a bâzâit, dar pur și simplu nu a funcționat.

Sunt oaspete, așa că m-am păstrat în control în toate modurile posibile pentru a nu interfera cu procesul de lucru. Și acum este timpul pentru felicitările mele. Am luat un microfon, i-am cerut fetei - DJ să pună ceva instrumental liric pe fundal. Nu era clar ce a revărsat din difuzoare, asemănător liricului doar în perioada în care în martie pisica caută o pisică.

Ei bine, peste tot sunt nuanțe. Am început să felicit. Dar când am adus microfonul aproape de buze, a început să fredoneze și să sune. Când, dimpotrivă, l-am luat de pe buze, nu am putut fi auzit. După ce mi-a urmărit chinul, toastmasterul a spus în cele din urmă o frază genială: „Este imediat evident că nu știi să lucrezi cu un microfon...”

Da, probabil în 20 de ani de lucru la radio și de a conduce sărbători în masă cu un microfon, ea nu a învățat niciodată cum să se descurce: evident că știa asta mai bine... De unde obțin oamenii o asemenea capacitate de a trage concluzii fără să se gândească măcar la ce ce spui?

Echipa reunește specialiști cu obiective comune, de care depinde succesul organizației în ansamblu și al fiecărui membru al echipei în mod individual. Când o echipă lucrează ca un singur organism, poate realiza mai mult decât toți membrii săi individual. Abilitatea de a lucra în echipă este valoroasă pentru mulți angajatori, dar ce înseamnă să ai abilități de lucru în echipă?

Știi să lucrezi în echipă dacă

...puteți combina dvssarcini si generale

Este important nu numai să-ți îndeplinești îndatoririle, ci și să poți îmbina ambițiile personale și interesele companiei. Lucrând în echipă, uneori trebuie să renunți la personal în favoarea generalului. Obținerea rezultatului general depinde în mare măsură de cât de bine fiecare membru al grupului își face treaba și susține eforturile colegilor.

ajutor pentru tine nu este o frază goală

Pentru a obține rezultatul cu care se confruntă echipa, este important să fii pregătit nu doar să-i ajuți pe colegi, ci și să nu te sfiești să accepti ajutorul de la ei.

… sunteți responsabil pentru conformitate

În munca în echipă, este importantă munca stabilă, planificată, care respectă obiectivele și termenele limită, și nu realizările periodice ale vreunuia dintre membrii echipei. Facand Afiliere la un proiect comun toți membrii echipei trebuie să fie siguri că fiecare își va face față la timp cu partea lor din sarcină.

…să știe cum să interacționeze corect în situații de conflict

Este important ca un jucător de echipă să poată comunica eficient cu ceilalți situatii conflictuale: ascultați, convingeți, rămâneți constructiv, găsiți argumente și luptați pentru compromisuri, nu deveniți personal. Cheia muncii în echipă este colaborarea.

Abilitățile de lucru în echipă sunt deosebit de importante pentru cei care lucrează la sarcini complexe, cu mai multe fațete, care nu pot fi rezolvate de un specialist individual. Pentru a înțelege ce rol jucați într-o echipă, produsul de la LifeWriter vă va ajuta. Cu el, poți afla și cum poți deveni și mai eficient în munca în echipă.

„Abilitatea de a lucra în echipă” - astfel de cuvinte pot fi găsite, probabil, în fiecare al doilea CV. Totuși, ce înseamnă să fii un jucător de echipă și este întotdeauna necesar? Cine are nevoie în special să dezvolte abilitățile de interacțiune în echipă și cui este mai bine să lucreze, după cum se spune, într-o categorie individuală?

Colectiv sau echipa?
ÎN ani sovietici cuvântul „echipă” a fost asociat mai mult cu sportul decât cu afacerile. Era obișnuit să se vorbească despre angajații întreprinderii ca pe un „colectiv”. Astăzi a devenit la modă să numim orice echipă o echipă (de aici și moda pentru team building), dar experții clarifică că acestea nu sunt concepte identice.

Dacă o echipă este reprezentată de toți angajații care lucrează într-o companie sau într-o divizie a acesteia (de exemplu, o echipă din fabrică), atunci o echipă este reprezentată de specialiști uniți printr-un obiectiv comun și cu roluri atribuite pentru a-l atinge. În același timp, scopul comun este realizat de fiecare membru al echipei și ca unul personal. Conexiunile informale și relațiile de prietenie sunt posibile atât în ​​echipă, cât și în echipă.

De exemplu, departamentul de vânzări în cele mai multe cazuri nu poate fi considerat o echipă în sensul stabilit al cuvântului, deoarece fiecare manager are propriul său plan de vânzări, și deci propriul său scop. Dar o mică agenție de PR care organizează o campanie electorală în sprijinul unui candidat la deputați la alegerile locale ar trebui să fie doar o echipă: angajații au o sarcină comună (victoria candidatului la alegeri), rolurile sunt atribuite și, dacă este necesar, specialiștii pot. ajutor reciproc.

Echipa poate fi foarte mare (sute si mii de oameni), in timp ce echipa este mai degraba o asociatie camerala. Într-o echipă adevărată, mai rar de 10-15 membri sunt implicați – este dificil să unești prea mulți oameni cu un scop comun, care ar fi realizat de toată lumea ca personal.

Pentru cine este important
Trebuie să fii capabil să lucrezi în echipă? Cel mai probabil, da, dacă munca ta devine de obicei parte a unei sarcini comune și ești personal interesat de soluția ei. De exemplu, promovarea cu succes a unui produs al unei companii depinde de eforturile întregului departament de marketing, în timp ce rolul tău (de exemplu, dezvoltarea de marfă) este foarte important pentru echipă, iar conștientizarea mărcii este și obiectivul tău personal.

Și pentru cine nu sunt esențiale abilitățile unui jucător de echipă? De regulă, pentru acei specialiști în a căror activitate, autonomia relativă a muncii și independența de luare a deciziilor, precum și rezultatele individuale sunt deosebit de importante. Este vorba despre profesori, reprezentanți de vânzări și manageri de vânzări, cercetători (cu excepția cazului în care, bineînțeles, vorbim de un proiect de cercetare care angajează mai multe persoane), medici (totuși, chirurgii și asistentele care efectuează o operație împreună pot fi considerați o echipă), jurnaliştii (jurnaliştii TV care lucrează ca parte a unei echipe de filmare pot fi consideraţi o excepţie) etc.

Stabilitate plus asistență reciprocă
Ce calități trebuie să dezvolți în tine pentru a deveni un adevărat jucător de echipă? În primul rând, în munca în echipă, este importantă capacitatea de a lucra constant și eficient pentru o perioadă lungă de timp. O echipă, de regulă, nu are nevoie de exploatații unice ale membrilor săi, ci de activitatea lor constantă eficientă - vorbind în termeni sportivi, nu de o serie de sprinturi, ci de un maraton lung. Orice sistem stabil are nevoie de stabilitate, așa că învață să-ți planifici timpul conform planurilor generale, vino la timp la întâlniri și respectă termenele limită. Amintiți-vă - dacă predați cu întârziere partea dvs. din muncă, ați dezamăgit serios oamenii care contează pe tine.

A doua calitate de care are mare nevoie unui jucător de echipă este capacitatea de a renunța uneori la personal în favoarea generalului. Înseamnă respingere alt fel intrigi şi respingerea carierismului ieftin. A trage pătura peste tine, a-ți sublinia propriul rol în cauza comună cu fiecare ocazie, nu este cea mai buna calitate pentru un membru al echipei. Desigur, o cotă de auto-promovare este necesară pentru cariera de succes Cu toate acestea, în proiectele de echipă, simțul proporției este deosebit de important.

În plus, un specialist care lucrează în echipă ar trebui să fie întotdeauna gata să-i ajute pe colegi. Principiul „tu pentru mine - eu pentru tine” sau „quid pro quo” nu funcționează aici. Dacă lucrați în echipă, atunci furnizați informații, partajați contacte, solicitați și asigurați gratuit alți membri - amintiți-vă că obiectivele voastre finale sunt aceleași. Totuși, asta nu înseamnă că ar trebui să lucrezi sistematic și blând pentru tine și pentru acel tip. Dacă se întâmplă acest lucru, rolurile în echipă pot fi revizuite. Cu toate acestea, odată cu organizarea corectă a proceselor de afaceri în companie, o astfel de întrebare nu ar trebui să apară.

În cele din urmă, pentru un jucător de echipă, abilitatea de a vorbi cu oamenii este foarte importantă - să asculte, să înțeleagă, să cedeze, să convingă și să ajungă la un compromis. Cum să realizezi acest lucru? Puteți trece printr-un antrenament special, sau puteți învăța pe cont propriu, pregătindu-vă cu atenție pentru întâlnirile și negocierile viitoare, gândindu-vă la argumente.

Abilitatea de a lucra în echipă ca avantaj competitiv
Aproape fiecare secundă de CV țipă despre capacitatea de a lucra în echipă, dar recrutorii experimentați nu se grăbesc să ia declarații nefondate despre credință. Pentru a face din această calitate avantajul tău competitiv, trebuie să o subliniezi într-un interviu ca pe una cheie.

Pentru a face acest lucru, dă exemple concrete de lucru în echipă de succes în cariera ta, de exemplu: „Am lucrat într-o echipă de PR pentru promovarea unui produs al unui brand cunoscut, am fost responsabil cu organizarea de evenimente publice. Împreună, am obținut o creștere cu 50% a vânzărilor în șase luni.” Sau: „Departamentul nostru a fost recunoscut ca fiind cel mai bun din companie la sfârșitul anului. Mă bucur că am contribuit la asta.” Cu toate acestea, trebuie să fii atent și să subliniezi nu numai rezultatul general, ci și rolul propriu în caz.

Ar fi bine să vă evidențiați abilitățile de echipă și în CV-ul dvs. Acest lucru este deosebit de important pentru candidații care aplică pentru poziții de conducere. „Experiență în crearea unei echipe de marketing eficiente de la zero”; „Managementul de proiect pentru implementarea de software nou – crearea unei echipe eficiente și eficiente, stabilirea sarcinilor, repartizarea responsabilităților, controlul curentului» - în secțiunile relevante ale CV-ului, subliniați capacitatea dumneavoastră de a organiza o echipă.

Munca în echipă se dezvoltă, spun experții. Ascultând opiniile colegilor, vă extindeți orizonturile profesionale și vă dezvoltați inteligența emoțională.!

Titlul a ieșit captivant, dar a dat peste cap. Trebuie să spun imediat că vom vorbi despre 1C. Dragi porecle 1C, nu știți cum să lucrați cu tranzacții și nu înțelegeți ce sunt excepțiile. Am ajuns la această concluzie uitându-mă la un numar mare de Cod 1C, născut în sălbăticia întreprinderii interne. În configurațiile tipice, toate acestea sunt suficient de bune, dar o cantitate îngrozitoare de cod personalizat este scrisă incompetent din punctul de vedere al lucrului cu baza de date. Ați văzut vreodată eroarea „Au apărut deja erori în această tranzacție”? Dacă da, atunci titlul articolului vi se aplică. Să ne dăm seama sub tăietură, în sfârșit, ce sunt tranzacțiile și cum să le gestionăm corect atunci când lucrați cu 1C.

De ce trebuie să tragi alarma

Pentru început, să ne dăm seama care este eroarea „Au apărut deja erori în această tranzacție”. Acesta este, de fapt, un lucru extrem de simplu: încercați să lucrați cu baza de date într-o tranzacție deja anulată (anulată). De exemplu, metoda CancelTransaction a fost apelată undeva și încercați să o efectuați.

De ce este atât de rău? Pentru că această eroare nu vă spune nimic despre unde s-a întâmplat de fapt problema. Atunci când o captură de ecran cu un astfel de text vine în sprijinul unui utilizator, și mai ales pentru codul de server cu care o persoană nu lucrează interactiv, acesta este... Am vrut să scriu o „eroare critică”, dar m-am gândit că acesta este un cuvânt la modă. la care nimeni nu ii mai baga in seama.... E un fund. Aceasta este o eroare de programare. Acesta nu este un eșec întâmplător. Acesta este o eroare care trebuie refăcută imediat. Pentru că atunci când procesele serverului dvs. de fundal sunt deschise noaptea și compania începe să piardă bani rapid, atunci „Au apărut deja erori în această tranzacție” este ultimul lucru pe care doriți să-l vedeți în jurnalele de diagnosticare.

Există, desigur, posibilitatea ca jurnalul tehnologic al serverului (l-ai activat în producție, nu?) să ajute cumva la diagnosticarea problemei, dar acum nu mă pot gândi la o opțiune - cum să găsesc exact cauza reală. a erorii indicate în acesta. Și există un singur motiv real - programatorul Vasya a primit o excepție în cadrul tranzacției și a decis că odată - nu un karabas „gândește-te, este o greșeală, hai să mergem mai departe”.

Ce sunt tranzacțiile în 1C

Este penibil să scrii despre adevăruri elementare, dar, aparent, va trebui făcut puțin. Tranzacțiile din 1C sunt aceleași cu tranzacțiile dintr-un SGBD. Acestea nu sunt niște tranzacții speciale „1C”, acestea sunt tranzacții în DBMS. Conform ideii generale a tranzacțiilor, acestea pot fi fie executate în întregime, fie deloc. Toate modificările aduse tabelelor bazei de date în cadrul unei tranzacții pot fi anulate imediat, ca și cum nimic nu s-ar fi întâmplat.

Mai mult, trebuie să înțelegeți că tranzacțiile imbricate nu sunt acceptate în 1C. De fapt, ele nu sunt suportate nu „în 1C”, dar nu sunt suportate deloc. Cel puțin, acele DBMS cu care 1C este capabil să funcționeze. Tranzacțiile imbricate, de exemplu, nu sunt disponibile în MS SQL și Postgres. Fiecare apel „imbricat” la StartTransaction pur și simplu incrementează contorul de tranzacții, iar fiecare apel la „CommitTransaction” decrește contorul. Acest comportament este descris în multe cărți și articole, dar concluziile din acest comportament, aparent, nu au fost suficient analizate. Strict vorbind, SQL are un așa-numit SAVEPOINT, dar 1C nu le folosește, iar chestia asta este destul de specifică.

Procedura Foarte Utilă&ImportantCode(Lista referințelor de referință) StartTransaction(); Pentru fiecare legătură din lista de legături ale buclei de referință Obiectul de referință = Reference.GetObject(); ReferenceObject.WhichField = "M-am schimbat de la cod"; DirectoryObject.Write(); EndCycle; CommitTransaction(); EndProcedure

Cod în engleză

Nu chiar. Absolut nu vreau să dublez exemple în engleză doar de dragul fanilor distracției holivars și ai războaielor sfinte.

Cu siguranță scrii un astfel de cod, nu? Exemplul de cod furnizat conține erori. Cel puțin trei. Știi ce? Vă spun imediat despre primul, este legat de blocarea obiectelor și nu are nicio legătură directă cu tranzacțiile. Despre al doilea - puțin mai târziu. A treia eroare este un blocaj care va apărea atunci când acest cod este executat în paralel, dar acesta este un subiect pentru un articol separat, nu îl vom lua în considerare acum, pentru a nu complica codul. Cuvânt cheie pentru google: blocaje gestionate de blocaj.

Atentie, codul este simplu. Aceasta este doar o mașină în sistemele dvs. 1C. Și conține cel puțin 3 erori deodată. Gândiți-vă pe îndelete câte erori există în scenarii mai complexe pentru a lucra cu tranzacții scrise de programatorii dvs. 1C :)

Blocarea obiectelor

Deci, prima greșeală. În 1C, există blocări de obiecte, așa-numitele „optimiste” și „pesimiste”. Cine a venit cu termenul, nu știu, ar fi ucis :). Este destul de imposibil să ne amintim cine este responsabil pentru ce. Este scris în detaliu despre ele și, precum și în altă literatură IT de uz general.

Esența problemei este că, în exemplul de cod specificat, obiectul bazei de date este schimbat, dar un utilizator interactiv (sau un thread de fundal vecin) poate sta într-o altă sesiune, care va schimba și acest obiect. Aici unul dintre voi ar putea primi eroarea „întrarea a fost modificată sau ștearsă”. Dacă acest lucru se întâmplă într-o sesiune interactivă, utilizatorul se va scarpina în cap, va înjură și va încerca să redeschidă formularul. Dacă acest lucru se întâmplă într-un thread de fundal, atunci va trebui să îl căutați în jurnale. Și jurnalul de înregistrare, după cum știți, este lent, iar stiva ELK pentru jurnalele 1C din industria noastră este configurată de câțiva ... (apropo, suntem printre cei care creează și îi ajută pe alții să configureze: ))

Pe scurt, aceasta este o greșeală enervantă și este mai bine să nu o ai. Prin urmare, standardele de dezvoltare precizează în mod clar că, înainte de a schimba obiectele, este necesar să le blocați obiectele folosind " ReferenceObject.Lock()„. Atunci sesiunea concomitentă (care ar trebui să facă și asta) nu va putea începe operația de modificare și va primi eșecul așteptat, controlat.

Și acum despre tranzacții

Cu prima eroare rezolvată, să trecem la a doua.

Dacă nu furnizați o verificare a excepțiilor în această metodă, atunci o excepție (de exemplu, foarte probabil pe metoda „Înregistrare ()” vă va scoate din această metodă fără a finaliza tranzacția. O excepție de la metoda „Scrie” poate fi aruncată dintr-o varietate de motive, de exemplu, unele verificări ale aplicației în logica de afaceri vor funcționa sau va avea loc blocarea obiectului menționată mai sus. Oricum, a doua eroare spune: codul care a început tranzacția nu este responsabil pentru finalizarea acesteia.


Așa aș numi această problemă. În analizatorul nostru de cod static 1C bazat pe SonarQube, am integrat chiar și astfel de diagnostice separat. Acum lucrez la dezvoltarea sa, iar fantezia programatorilor 1C, al căror cod îmi vine pentru analiză, uneori mă șochează și mă uimește...

De ce? Pentru că o excepție introdusă în interiorul unei tranzacții în 90% din cazuri nu va permite ca această tranzacție să fie remediată și va duce la o eroare. Trebuie înțeles că 1C derulează automat o tranzacție incompletă numai după ce se întoarce de la codul de script la nivelul de cod al platformei. Atâta timp cât sunteți la nivelul codului 1C, tranzacția rămâne activă.

Să urcăm un nivel în stiva de apeluri:

Procedura ImportantCode() LinkList = GetWhereToLinkList(); Foarte util&ImportantCode(ReferenceList); EndProcedure

Vezi ce se intampla. Al nostru metoda problemei sunat de undeva din afară, mai sus în stivă. La nivelul acestei metode, dezvoltatorul nu are idee dacă vor exista tranzacții în cadrul metodei Very UsefulAnd ImportantCode sau nu. Și dacă o vor face, vor fi toate finalizate... Suntem cu toții aici pentru pace și încapsulare, nu? Autorul metodei „ImportantCode” nu ar trebui să se gândească la ce se întâmplă exact în interiorul metodei pe care o apelează. Cel în care tranzacția este procesată incorect. Ca urmare, o încercare de a lucra cu baza de date după aruncarea unei excepții din interiorul unei tranzacții, cu o mare probabilitate, va duce la faptul că „În această tranzacție, bla bla...”

Difuzarea tranzacțiilor prin metode

A doua regulă a codului „sigur pentru tranzacții”: numărul de referințe de tranzacție la începutul metodei și la sfârșit trebuie să aibă aceeași valoare. Nu puteți începe o tranzacție într-o metodă și o puteți încheia în alta. Probabil că puteți găsi excepții de la această regulă, dar va fi un fel de cod de nivel scăzut care este scris de oameni mai competenți. În general, nu poți scrie așa.

De exemplu:

Procedura ImportantCode() LinkList = GetWhereToLinkList(); Foarte util&ImportantCode(ReferenceList); CommitTransaction(); // Un bilet spre iad, o conversație serioasă cu autorul despre relațiile noastre grele de muncă. EndProcedure

Cele de mai sus sunt un cod de rahat inacceptabil. Metodele nu pot fi scrise în așa fel încât apelantul să-și amintească și să țină evidența tranzacțiilor posibile (sau probabile - cine știe) în cadrul altor metode pe care le apelează. Aceasta este o încălcare a încapsulării și a creșterii codului de spaghete care nu poate fi urmărită, menținând în același timp sănătatea mentală.

Este deosebit de distractiv să ne amintim că codul real este mult mai mare decât exemplele sintetice de 3 linii. Căutarea tranzacțiilor de început și de încheiere pe șase niveluri de imbricare - acest lucru motivează în mod direct conversațiile inimă la inimă cu autorii.

Încerc să repar codul

Să ne întoarcem la metoda inițială și să încercăm să o reparăm. Trebuie să spun imediat că nu vom repara încă blocarea obiectului, doar pentru a nu complica exemplul de cod.

Prima abordare a unei porecle tipice 1C

De obicei, programatorii 1C știu că o excepție poate fi aruncată la scriere. De asemenea, le este frică de excepții, așa că încearcă să-i prindă pe toți. De exemplu, așa:

Procedura Foarte Utilă&ImportantCode(Lista referințelor de referință) StartTransaction(); Pentru fiecare legătură din lista de legături ale buclei de referință Obiectul de referință = Reference.GetObject(); ReferenceObject.WhichField = "M-am schimbat de la cod"; Încercarea de a ReferenceObject.Write(); Exception Log.Error("Eșuat la scrierea elementului %1", Referință); Continua; Sfârșitul încercării; EndCycle; CommitTransaction(); EndProcedure

Ei bine, s-a mai bine, nu? La urma urmei, acum, posibilele erori de înregistrare sunt procesate și chiar înregistrate. Excepții nu vor mai fi aruncate atunci când scrieți un obiect. Și în jurnal puteți vedea chiar - pe ce obiect, nu a fost prea leneș, a afișat un link în mesaj în loc de laconicul „Eroare de intrare în director”, deoarece dezvoltatorii care se grăbesc adesea le place să scrie. Cu alte cuvinte, există o preocupare pentru utilizator și creșterea competențelor.

Cu toate acestea, o poreclă experimentată 1C aici va spune că nu, nu s-a îmbunătățit. De fapt, nimic nu s-a schimbat și poate chiar mai rău. În metoda „Write()”, platforma 1C însăși va începe tranzacția de scriere, iar această tranzacție va fi deja imbricată în raport cu a noastră. Și dacă, în momentul lucrului cu baza de date, 1C își anulează tranzacția (de exemplu, se aruncă o excepție de logica de afaceri), atunci tranzacția noastră de nivel superior va fi în continuare marcată ca „stricată” și nu va fi posibilă repara-l. În consecință, acest cod va rămâne problematic și, atunci când încercați să comiteți, va afișa „erori au apărut deja”.

Acum imaginați-vă că nu vorbim despre o metodă mică, ci despre o stivă de apeluri profunde, unde în partea de jos cineva a luat și a „eliberat” tranzacția începută din metoda sa. Este posibil ca procedurile de nivel superior să nu aibă idee că cineva de acolo a început tranzacțiile. Ca urmare, întregul cod se blochează cu o eroare neclară, care este imposibil de investigat în principiu.

Codul care începe o tranzacție este necesar pentru ao finaliza sau anula. Indiferent de eventualele excepții. Fiecare cale de cod ar trebui să fie examinată pentru a vedea dacă metoda iese fără comiterea sau anularea tranzacției.

Metode de lucru cu tranzacții în 1C

Nu ar fi de prisos să ne amintim că, în general, 1C ne oferă tranzacții cu care să lucrăm. Acestea sunt metode binecunoscute:

  • StartTransaction()
  • CommitTransaction()
  • Anulați tranzacția()
  • TranzacțieActivă()

Primele 3 metode sunt evidente și fac ceea ce spun ei în numele lor. Ultima metodă returnează True dacă numărul de tranzacții este mai mare decât zero.

Și există o caracteristică interesantă. Metodele de ieșire din tranzacție (Commit și Cancel) aruncă excepții dacă numărul de tranzacții este zero. Adică, dacă apelați unul dintre ei în afara unei tranzacții, va apărea o eroare.

Cum să folosești corect aceste metode? Foarte simplu: trebuie să citiți regula formulată mai sus:

Cum poți să urmezi această regulă? Sa incercam:

Mai sus am înțeles deja că metoda DoSomething este potențial periculoasă. Poate arunca un fel de excepție, iar tranzacția se va „crawl” din metoda noastră. Bine, să adăugăm un posibil handler de excepții:

StartTransaction(); Încercați să faceți ceva (); Excepție // ce să scriu aici? Sfârșitul încercării; CommitTransaction();

Super, am prins eroarea care apare, dar ce să facem cu ea? Scrieți un mesaj în jurnal? Ei bine, poate dacă codul de înregistrare a erorilor ar trebui să fie exact la acest nivel și așteptăm eroarea aici. Și dacă nu? Dacă nu ne așteptam la vreo eroare aici? Atunci ar trebui să trecem această excepție mai sus, să lăsăm un alt strat al arhitecturii să se ocupe de ele. Acest lucru se face cu operatorul „CauseException” fără argumente. În aceste sippplusuri java ale tale, acest lucru se face exact în același mod cu declarația throw.

StartTransaction(); Încercați să faceți ceva (); Excepție ThrowException; Sfârșitul încercării; CommitTransaction();

Așadar, așteptați... Dacă doar aruncăm excepția mai departe, atunci de ce există o încercare? Și iată de ce: regula ne obligă să asigurăm finalizarea tranzacției pe care am început-o.

StartTransaction(); Încercați să faceți ceva (); Excepție CancelTransaction(); ThrowException; Sfârșitul încercării; CommitTransaction();

Acum, pare a fi frumos. Cu toate acestea, ne amintim că nu avem încredere în codul DoSomething(). Dintr-o dată, în interiorul său, autorul nu a citit acest articol și nu știe cum să lucreze cu tranzacții? Dintr-o dată, a luat-o acolo și a apelat la metoda CancelTransaction, sau invers, a remediat-o? Este foarte important pentru noi că handlerul de excepții nu a lansat o nouă excepție, în caz contrar, eroarea inițială se va pierde și investigarea problemelor va deveni imposibilă. Și ne amintim că metodele Commit și Cancel pot arunca o excepție dacă tranzacția nu există. Aici este utilă metoda TransactionActive.

versiunea finala

În cele din urmă, putem scrie cod corect, „sigur pentru tranzacții”. Aici era:

StartTransaction(); Încercați să faceți ceva (); Excepție dacă TransactionActive() Apoi CancelTransaction(); EndIf; ThrowException; Sfârșitul încercării; CommitTransaction();

Stai, nu doar „CancelTransaction” poate arunca erori. De ce atunci „CommitTransaction” nu este împachetat în aceeași stare cu „TransactionActive”? Din nou, urmând aceeași regulă: codul care a început tranzacția ar trebui să fie responsabil pentru finalizarea acesteia. Tranzacția noastră nu este neapărat prima, poate fi imbricată. La nivelul nostru de abstractizare, ni se cere doar să ne pese de tranzacția noastră. Toate celelalte nu ar trebui să ne intereseze. Sunt străini, nu ar trebui să fim responsabili pentru ei. Exact NU TREBUIE. Nu trebuie făcută nicio încercare de a afla nivelul real al contorului de tranzacții. Acest lucru va rupe din nou încapsularea și va duce la „pătuirea” logicii de gestionare a tranzacțiilor. Am verificat doar activitatea în gestionarea excepțiilor și doar pentru a ne asigura că handlerul nostru nu va genera o nouă excepție care „o ascunde” pe cea veche.

Lista de verificare a refactorizării

Să ne uităm la câteva dintre cele mai frecvente situații care necesită intervenție în cod.

Model:

StartTransaction(); Fă ceva(); CommitTransaction();

Înfășurați o construcție „sigură” cu Try, Keep alive și aruncați excepția.

Model:

If Not TransactionActive() Atunci StartTransaction() EndIf

Analiză și refactorizare. Autorul nu știa ce face. Este sigur să începeți tranzacții imbricate. Nu trebuie să verificați starea, trebuie doar să începeți o tranzacție imbricată. Mai jos în modul, probabil că încă mai perversează acolo cu fixarea lor. Acest lucru este garantat hemoroizi.

Opțiune aproximativ similară:

If TransactionActive() Atunci CommitTransaction() EndIf

în mod similar: comiterea unei tranzacții prin condiție este ciudată. De ce există o condiție? Ce, altcineva ar fi putut deja să facă această tranzacție? Motivul litigiului.

Model:

StartTransaction() While Selection.Next() Loop // citirea obiectului prin referință // scrierea obiectului EndCycle; CommitTransaction();

  1. introduceți blocarea gestionată pentru a evita blocajul
  2. introduceți apelul de metodă Block
  3. înfășurați în „încercați” așa cum se arată mai sus

Model:

StartTransaction() While Selection.Next() Loop Attempt Object.Write(); Raport de excepție ("Eșuat la scriere"); Sfârșitul încercării; EndCycle; CommitTransaction();

Această tranzacție nu va mai fi finalizată în cazul unei excepții. Nu are rost să continui ciclul. Codul trebuie rescris, referindu-se la sarcina originală. Opțional, furnizați un mesaj de eroare mai informativ.

In cele din urma

Eu, după cum probabil ați ghicit deja, aparțin unor oameni care iubesc platforma 1C și dezvoltarea pe ea. Desigur, există plângeri cu privire la platformă, în special în mediul Highload, dar, în general, vă permite să dezvoltați rapid și ieftin aplicații corporative de foarte înaltă calitate. Oferind din cutie și ORM, și GUI, și interfață web, și Raportare și multe altele. În comentariile despre Habré, de obicei scriu ceva arogant, așa că, băieți, principala problemă a 1C, ca ecosisteme, nu este o platformă sau un furnizor. Acesta este un prag de intrare prea mic, care permite oamenilor care nu înțeleg ce este un computer, bază de date, client-server, rețea și tot ce este să intre în industrie. 1C a făcut dezvoltarea de aplicații pentru întreprinderi prea ușoară. În 20 de minute pot scrie un sistem de contabilitate pentru achiziții/vânzări cu rapoarte flexibile și un client web pe el. După aceea, îmi este ușor să mă gândesc despre mine că la scară largă poți scrie aproape în același mod. Cumva, 1C va face totul în sine, nu știu cum, dar probabil o va face. Voi scrie „Începe tranzacția ()” ....

Și știi - cel mai important lucru este că este minunat. Ușurința dezvoltării în 1C vă permite să implementați instantaneu idei de afaceri și să le integrați în procesele companiei. Apoi puteți întotdeauna refactoriza, principalul lucru este să înțelegeți cum. Și dacă dintr-o dată aveți nevoie de ajutor pentru a vă audita „1C lent” – contactați specialiștii în optimizare. Nu este deloc lentă.

Productivitatea echipei, în care fiecare angajat este la locul său și, în același timp, interacționează cu pricepere cu colegii, este mult mai mare decât în ​​cazul în care, așa cum spunea Krylov, „Nu există un acord între tovarăși”. Și aproape fiecare angajator dorește ca solicitantul să aibă aceeași abilitate de „lucrare în echipă”.

Vorbește despre ce înseamnă să fii membru al unei echipe și despre cum să-l folosești în avantajul tău atunci când cauți un loc de muncă.

Ce fel de animal?

În primul rând, să ne dăm seama ce fel de jucător de echipă este.

Desigur, în CV-ul tău ai descris cât de bine te înțelegi cu colegii, ești sociabil, chiar mai mult decât atât, ai putea „creează o echipă de la zero”, „distribuiți responsabilitățile”, „stabiliți și controlați sarcini”.

Dar întrebarea este: cum să convingi un angajator care este preocupat să găsească un jucător de echipă în timpul unui interviu că tu ești exact cel de care are nevoie?

Aici, ca și în povestea despre alte abilități, operați cu fapte. Obținut de întregul departament pentru a crește vânzările? - Grozav! Împreună au făcut compania sau produsul recunoscut pe piață? - Minunat! Ați scris o parte din cod pentru un site web sau o aplicație? - Ei bine, aici este!

În plus, când vorbești despre ceea ce ai reușit să obții, asigură-te că monologul tău conține nu numai pronumele "eu"- utilizare "Noi"Și "al nostru". De exemplu, „Ne-am descurcat sarcinii cu înaltă calitate, iar clientul a fost mulțumit de rezultatele muncii noastre” sau „După însumarea rezultatelor perioadei de raportare, departamentul nostru a fost desemnat cel mai bun”.

Dar nu uita de tine. Totuși, tu ești cel care obține un loc de muncă și, pentru a-ți construi o carieră de succes, este necesară o parte din autopromovare. Prin urmare, explicați ce contribuție ați adus la cauza comună. Astfel, veți putea informa ofițerul de personal despre realizările dumneavoastră personale. Veți putea sublinia că știți să lucrați împreună și să înțelegeți importanța muncii bine coordonate a unei echipe de profesioniști.

Jocurile de echipă nu sunt pentru toată lumea

Cu toate acestea, nu toată lumea are nevoie de aceeași abilitate pentru a fi un jucător de echipă. Până la urmă, există cei a căror muncă implică o anumită autonomie, unde este necesar să se ia decizii independente și să se obțină rezultate individuale.

Această categorie include și cercetători (cu excepția cazului în care, desigur, vorbim despre un proiect de cercetare în care sunt angajați mai multe persoane), (totuși, chirurgii și asistentele care efectuează o operație împreună pot fi considerate o echipă), (o excepție). pot fi numărați jurnaliștii TV care lucrează ca parte a unei echipe de filmare) etc.

Este important să înțelegeți singur dacă faceți parte din categoria jucătorilor de echipă. Poate că ești un profesionist singuratic care, în procesul de perfecționare a aptitudinilor sale, este pregătit să concureze cu colegii. Există o anumită categorie de angajatori care preferă doar astfel de angajați. Înțelegând acest lucru, puteți alege pentru dvs. un loc de muncă cu cele mai confortabile condiții și, în același timp, să nu deveniți participant la conflicte.

Și dacă dintr-o dată jobul tău de vis necesită să-ți schimbi rolul, ei bine, niciodată nu este prea târziu să faci ajustări stilului tău de lucru.