Fișa de lichidare – De ce nu avem procese informaționale automatizate?

La finalizarea unui ciclu de studii, absolventul universității este pus în situația de a parcurge o serie de etape și procese în vederea eliberării documentelor care confirmă finalitatea studiilor.

Procesul clasic este descris schematic în figura următoare, poate provoca un zâmbet ilar, dar aceasta este doar realitatea simplificată.

image

Pe scurt, studentul preia de la Secretariat fișa, o completează după care se deplasează la diferite instituții din cadrul Universității, sau afiliate, pentru semnarea documentului. Văzut de cele mai multe ca o formalitate de toți actorii implicați în proces, plimbarea fișei are un aspect ironic de finețe: studentul află care ar fi fost instituțiile pe care ar fi fost bine să le viziteze în timpul studiilor.

Provocarea acestui articol este de a demonstra prin diferite metode și proceduri simple cum s-ar putea automatiza acest proces folosind tehnologia SharePoint, descriind neajunsurile fiecărei metode dar și care ar fi posibilele soluții.

Trebuie să stabilim de la început principalele limitări ale sistemului informatic universitar în care activez. Aceasta este opinie proprie și personală, asumându-mi faptul că din punct de vedere profesional pot greși în această evaluare. Ca majoritatea sistemelor informaționale mari, orice dezvoltare de fluxuri interdepartamentale este aproape imposibil de realizat în lipsa unui sistem de autentificare centralizată, în care utilizatorii să poată folosi același nume de utilizator și parolă pentru accesul la conținutul informațional instituțional.

Variantele de lucru și scurte explicații

Exclud din start varianta de a completa un template și trimiterea lui la o anumită adresă de e-mail. Se vehiculează în Universitate o formă de admitere on-line în Excel, dar pe moment prefer să nu comentez mai mult. Pentru cei care au cunoștințe mai avansate de SharePoint, nu mă refer aici la funcția de Incoming email din SharePoint configurată pe biblioteci de documente, care ar permite salvarea fișierelor atașate în acea librărie, pentru că: (1) utilizatorii externi vor ignora constant convențiile de notare ale numelor fișierelor și (2) va fi destul de greu să-i informezi despre progresul sau măcar finalitatea fluxului de semnare a documentului. (3) Nu exclud nici varianta în care unii dintre ei vor trimite mai multe emailuri pentru că nu au un feedback din sistem și nici cea în care unii nu au instalat pe calculator aplicații dedicate, gen Excel sau Word, sau nu știu să completeze într-un document Word care are câmpuri.

Varianta ideală ar fi aceea a unui formular electronic completat pe web, care să suporte semnătura electronică și să circule într-un timp relativ scurt între departamentele din cadrul instituției. Soluția ar fi utilizarea InfoPath Services cu publicare, acces și semnare direct din browser, plus un flux de notificare a utilizatorilor cu rol de semnare și verificare. Limita acestei variante, dincolo de componenta autentificării centralizate este dată de faptul că absolvenții care doresc să-și ridice actele de studii după o perioadă mai îndelungată de timp (peste 3-6 luni) nu vor mai avea active conturile de utilizator în utopicul sistem de autentificare centralizată. Mai există și problema că sistemul SharePoint, chiar cu acces anonim de Add items, nu permite adăugarea/crearea anonimă a documentelor în librăriile din site-urile publice, ci doar adăugarea de înregistrări în liste. Marele avantaj al metodei cu formularele este acea că permit semnarea electronică a formularelor, UAIC fiind una din puținele instituții de învățământ din România care pune la dispoziția utilizatorilor (profesori și administrativ) certificare digitale calificate (citiți mai multe pe pagina Departamentului de Comunicații Digitale).

Varianta cea mai plauzibilă, în contextul accesului anonim este acea a utilizării entităților de tip listă particularizată în InfoPath și cu același flux de aprobare ca la varianta cu formulare, numai că nu mai este necesară semnare ci doar feedback-ul utilizatorului consultat. S-ar putea suspecta o problemă aici, legată de securitatea procesului pentru că lipsesc semnăturile digitale. Atât timp însă cât datele de autentificare ale responsabililor nu sunt divulgate securitatea rămâne la nivelul de acceptanță al tranzacțiilor legate de acea fișă.

O scurtă analiză cu privire la definirea rolurilor

La nivelul fiecărei facultăți, în funcție de organizarea internă și de dimensiunea acesteia, pot exista secretari pentru fiecare nivel de studii, sau pe fiecare specializare, un secretar pe mai multe specializări sau un singur secretar pentru toată facultatea responsabil cu fișele de lichidare. De asemenea, pot exista mai mulți secretari pe aceeași specializare.

Tendința pare a fi aceea de a crea mai multe roluri de secretar pentru fiecare nivel, dar aceasta ar crește complexitatea gestiunii ulterioare. Având în vedere că fluxul de verificare/aprobare/semnare trebuie să facă o legătură între rolul de facultate și cel de reprezentant al acelei facultăți atunci este clar că trebuie să extindem lista de facultăți cu rolul respectiv.

Lista de facultăți este sursă de date pentru formular și în funcție de selecțiile inițiale pe care le realizează absolventul sunt preluate datele corespunzătoare în formular.

Exemplu pe lista de facultăți:

image

Câmpurile de secretar și bibliotecar sunt de tip People cu corespondență directă în Active Directory. Am încercat să realizez o separare pe diferite niveluri de studii la secretari pentru a nu complica foarte mult acest Demo.

O problemă specifică în fluxurile electronice este legată de inițiatorul unui flux și cine semnează ultimul. În rularea paralelă (specifică acestui flux clasic) orice din roluri poate începe semnarea, dar credem că în mod corect secretarul este responsabil de verificarea corectitudinii datelor și semnează primul, după care la final tot el este cel care ar trebui să finalizeze fluxul prin eliberarea documentelor specifice solicitate de absolvent.

Fluxul de lucru

Având în vedere că veleitățile mele de programator se rezumă la un IF-THEN-ELSE în Excel am preferat o variantă simplă a implementării prin construirea unui flux generic în mod vizual în Visio după care l-am exportat în format utilizabil în SharePoint Designer.

image

Pentru cunoscătorii domeniului, schema de flux nu respectă în mod fidel modelul BPMN dar permite generarea pseudocodului care va fi folosit ulterior pe partea de acțiune a procesului de semnare și validare.

Pseudocod flux generat în SharePoint Designer și particularizat după specificul activității și rolurilor definite.

image

Procesul de colectare feedback

image

Istoricul fluxului de feedback și semnare în timp real

image

Același flux de lucru este utilizat și în procesul de colectare feedback bazat pe liste.

Varianta cu InfoPath Services

Știu că Microsoft a anunțat că din anul 2023 (sau 2020) InfoPath nu va mai fi continuat ca produs. Dar va fi înlocuit probabil tot de aplicații de creare end-user a formularelor. Nu avem încă astfel de informații cu toate că se vehiculează tot felul de variante HTML5 cu CSS3 și JS.

Filmul de exemplificare creare și semnare fișa:
 

Sursa film: https://www.youtube.com/watch?v=e5hDnQLOCsg

Fișa cu semnături în browser:

image

Pentru a putea fi recunoscută și identificată semnătura electronică trebuie să respecte cele trei criterii de valabilitate: emis pentru, valid ca dată, emis de o autoritate de certificare autorizată. În lucrul cu departamente externe sau dacă documentul ar fi necesar să fie prezentat în afara instituției, semnăturile electronice generate de o autoritate de certificare internă nu sunt valabile.

Proces de semnare în browser este disponibil, din păcate pentru unii, doar în ultimele versiuni de Internet Explorer. Formularul se poate deschide în Chrome dar nu poate fi semnat.

image

image

Semnătura calificată aplicată pe documentul respectiv asigură din punct de vedere legal autenticitatea acelui document nemaifiind necesară aplicarea de semnături sau ștampile suplimentare.

Pentru cei care ”nu suportă” Internet Explorer pot apela la varianta de deschidere a formularului în aplicația InfoPath care face parte din anumite pachete Office.

Pentru personalizarea și filtrarea unei surse de date în InfoPath puteți consulta filmulețul:

 

 https://www.youtube.com/watch?v=vMBs_K2MGSs

 

Varianta cu liste

După cum aminteam în paragrafele anterioare, varianta actuală cu șanse cât de cât de implementare, este cea a accesului anonim la completarea fișei. Fiindcă utilizatorii anonimi nu pot crea sau încărca documente pe o bibliotecă de documente, ne rămâne la dispoziție varianta listelor.

Formularul cu acces anonim:

image

În momentul completării se creează un nou element în lista de fișe care ar trebui să intre în procesul de verificare și aprobare asemănător fluxului prezentat anterior.

Accesul anonim la un sistem informatic și postarea unor elemente pentru declanșarea unor procese automate de aprobare, poate constitui un risc major de securitate. Lansarea unui flux de lucru presupune pe lângă drepturile de scriere a înregistrărilor în lista de bază, crearea de înregistrări în lista de task-uri asociate fluxului de lucru precum și în istoricul de execuție a acestuia. Riscul principal în acest model este dat de faptul că cineva rău intenționat ar încerca să depună un număr mare de cereri în sistem, care ar genera un flux masiv de e-mailuri către responsabilii cu verificarea și aprobarea. În același timp configurarea posibilității de adăugare a înregistrărilor în secțiunea de task-uri destinate responsabililor de verificare și aprobare ar genera de asemenea nemulțumire și încărcarea nejustificată a operațiunilor de execuție.

Tratarea acestui risc are la bază introducerea de elemente de unicitate pe formular: numărul matricol și adresa de e-mail.

Dacă am dori totuși ca utilizatorii anonimi să inițieze un flux de lucru automat, în diferite surse de pe Internet se specifică faptul că aceștia ar trebui să primească drepturi de editare pe elementele de listă, fapt care poate provoca alte probleme de securitate.

Fiind utilizatori total anonimi nu putem acorda astfel de permisiuni, chiar dacă am face limitarea accesului la vizualizarea default a elementelor. Pentru utilizatorii care intră cu user și parolă putem activa opțiunea avansată: Creare și editare pentru elementele create de utilizator, inaplicabilă anonimilor. Malformarea URL-ului unei element de listă prin modificarea ID-ului unei înregistrări oferă utilizatorului anonim acces la editarea oricărei fișe ceea ce ar compromite integritatea înregistrărilor.

Sigur, că se poate modifica din InfoPath conținutul formularului în așa fel încât datele să nu mai poată fi modificate, dar poate exista posibilitatea de a intra în Datasheet view și a depăși limitările unui form personalizat. Se poate dezactiva și această opțiune, dar rămâne deschis riscul major de a putea vedea datele personale (Nume Prenume, Data și locul nașterii, adresa de e-mail) ale tuturor celor care au depus fișe.

Verificând totuși posibilitatea de inițiere anonimă a unui flux de lucru, cu drepturi de editare pe lista inițială și drepturi de creare elemente în lista de Task-uri și cea de istoric Workflow, am constatat că SharePoint nu permite inițierea fluxurilor de semnare. Varianta de creare a fluxurilor de lucru de tip SharePoint 2010 cu funcția de impersonate activată, ar permite rularea acestor fluxuri în numele celor care le-au creat.

Singura variantă funcțională care să ofere un minim de securitate este acela de a seta fluxul de lucru pe rulare manuală și inițierea acestuia de către secretarul de facultate după ce în prealabil a verificat datele.

Alte funcționalități și configurări sunt legate de filtrarea pe listelor în așa fel încât să nu se permită vizualizarea elementelor din exterior iar fiecare secretar sau bibliotecar să poată vedea doar fișele sale.

În loc de concluzii

Vă cer părerea legată de beneficiile pe care le-ar aduce un astfel de proces automatizat, atât pentru instituție cât și pentru absolvenți.

Credeți că principalii actori instituționali vor lucra mai mult sau mai puțin pentru verificarea și semnarea documentelor?

Puteți partaja experința dumneavoastră legată de procesul clasic?

La alte universități există un astfel de proces al fișei de lichidare, offline sau automatizat?

#ImagineCup 2015 – News (2)

 

Logica te va duce din punctul A în punctul B. Imaginaţia te va duce oriunde… (A. Einstein)

Imagine Cup 2015 își continuă pas cu pas etapele din cadrul celei de-a XIII-a ediții. Este a doua ediție care continuă în formatul cu trei competiții majore (World Citizenship, Innovation, Games) și după cum vă informam în urmă cu ceva timp s-a introdus o secțiune specială pentru studenți programatori: Code Hunt.

Până la finala din vara lui 2015 (iulie în Seattle, USA), concurenții au avut posibilitatea de a participa la o serie de concursuri cu premii intermediare:

  • (Optional) Pitch Video Challenge – Finished October 29
  • (Optional) Project Blueprint Challenge – Finished December 3
  • (Optional) User Experience Challenge – Ends January 7
  • National Games Competition – Deadlines vary by nation

Veștile bune pentru noi, sunt aduse de un premiu la secțiunea Code Hunt câștigat de Alin-Silviu Burnaru (de la Universitatea Alexandru Ioan Cuza, Iași) pentru competiția din septembrie 2014 și o serie de mențiuni speciale pentru competiția Project Blueprint:

  • Echipa Winterflame (de la Universitatea Babeş-Bolyai, Cluj) la secțiunea Games și
  • One Step Ahead (de la Colegiul National Gheorghe Rosca Codreanu din Bârlad) la secțiunea Innovation.

O altă veste bună este faptul că România va organiza și anul acesta o finală națională pentru cele trei secțiuni majore din Imagine Cup. Detaliile vor fi afișate în viitorul apropiat pe situl  TechWare al Microsoft Romania care are secțiune dedicată pentru Imagine Cup.

În așteptarea altor vești bune vă urez mult succes tuturor!

Excel – Problemă cu combinații unice [UPDATED 23.01 H15:44)

Pentru fanii de Excel am primit de la un alt pasionat o problemă deosebit de faină și utilă multora din noi.

Cerințele problemei:

Se dă o echipă formată dintr-un număr finit de membri: A, B, C, D, E, F, G, H etc.

Fiecare dintre ei, lucrează la un anumit task (activitate) (t1, t2, t3 etc). Una și aceeași persoană poate lucra în același timp la unul sau mai multe task-uri (activități).

Structura unui task: NumeTask, Responsabil, Reviewer. Responsabilii sunt introduși manual, Reviewerii se alocă aleator de aplicație.

Constraints:

a) Fiecare dintre ei, poate face echipă cu oricare dintre ceilalți, dar doar pe un singur task (i.e. dacă A lucrează la taskurile t1 si t2, la t1 poate avea un anumit partener: E dar la t2 obligatoriu un alt partener: B);

b) Să nu existe parteneri încrucișați (i.e. interzis situația asta: A lucrează la t1 cu partenerul C, iar C lucreaza la t8 cu partenerul A);

c) Distribuirea fiecăruia ca partener trebuie facută în mod echilibrat;

d) fără VBA (doar cu funcții Excel).

Se cere:

O atribuire în mod aleatoriu, a acestor parteneri. (cu un F9 sa se faca refresh)

Indicii:

F9 se folosește când modul de calculare a foii de calcul este setat pe manual (Formulas, Calculation Options, Manual)

O combinație incorectă:

Duplicate

O combinație corectă:

DuplicateOk

Nu sunt constrângeri de istoric pe alocarea curentă de task-uri.

Puteți alege o altă combinație sau structură a tabelelor. Ceea ce v-am prezentat eu este doar un exemplu.

[UPDATE DUPA ORA 22/20.01.2015]

Așadar, după cum am promis revin cu o serie de soluții.

Soluția lui Cătălin L.

Cătălin este de profesie Virus Analyst la BitDefender și unul dintre cei mai buni studenți ai mei de la masterul Administrarea Afacerilor. A primit 10 la seminar pentru rezolvarea aproape de 80% a problemei.

Mesajul său este:

”Am rezolvat problema, zic eu, folosind Numbers de la Apple, ca nu am la indemana un Excel. Am folosit cateva campuri precalculate ca sa nu scriu o formula prea mare.”

Fișierul său este la adresa: https://onedrive.live.com/view.aspx?resid=6EC38785F56DAE91!360575&ithint=file%2cxlsx&app=Excel&authkey=!AHsr4EX9wWnob7c

sau http://1drv.ms/1uNFoww

Sau accesați direct folderul: https://onedrive.live.com/?cid=6EC38785F56DAE91&id=6EC38785F56DAE91%212853 și deschideți/descărcați fișierul: Combinații unice Catalin L.xlsx

Soluția nu este finală pentru că are destul de multe constante (Hard-Code) pentru a putea fi acceptată.

Soluția mea

Soluția propusă de mine se bazează pe puțin mai multă matematică. În prima fază ID-urile Reviewer-ilor se alocă automat prin funcția =RANDBETWEEN(1;$J$1) în care J1 este maximul ID-urilor din tabela persoane care au un nume în dreptul lor: =COUNTIFS(tblPersons[ID];”<>0″;tblPersons[Name];”<>”)

Normal că acest maxim din J1 nu funcționează corect pentru că dacă ștergem un nume intermediar, numărul rezultat prin acel COUNTIFS nu mai este concludent. Făcând o analogie la tabelele din bazele de date, orice înregistrare vidă nu mai are un ID alocat, așa că structura tabelului tblPersons nu este normalizat din punct de vedere atomic.

Trecem peste această scăpare și continuăm.

Problema concretă constă în a determina unicitatea unui tuplu:

A-B = B-A

În acest context am preferat să utilizez ID-uri numerice în loc de nume concrete sau ID-uri de tip litere.

Ca să pot determina unicitatea tuplului a trebuit să iau în considerare faptul că două numere de diferite mărimi pot da același rezultat: 4+10 = 12+2 ceea ce m-ar fi încurcat în a determina unicitatea unui tuplu.

Soluția găsită de mine a fost folosirea funcției SINH() în reprezentarea numerelor în loc de numerele pur și simplu. SINH() returnează sinusul hiperbolic al unui număr. Ăăă știu, e complicat modul în care am ajuns eu la acea formulă, dar se pare că e cea mai sigură metodă de a determina un număr suficient de diversificat pentru a putea să obții sume diferite din două numere reale destul de apropiate.

Pe coloana F mai este pus și un IF de control pentru cazul în care se alocă în mod aleatoriu un număr asemănător Responsabilului.

Pe Coloana G am folosit o combinație de funcții MATCH() cu IF() și ROW()  care îmi determină dacă acel număr obținut prin însumarea SINH()-urilor de ID-uri este unic în lista de rezultate (coloana F) sau nu.

Restul este apă de ploaie: formatare condițională la nivel de celulă și apoi la nivel de linie.

Fișierul poate fi vizualizat aici: http://1drv.ms/1uoLZP8 sau: https://onedrive.live.com/redir?resid=6EC38785F56DAE91!360578&authkey=!AHsr4EX9wWnob7c&ithint=file%2cxlsx sau din folderul: https://onedrive.live.com/?cid=6EC38785F56DAE91&id=6EC38785F56DAE91%212853

Verdictul

Nimeni nu a obținut sticla de vin, așa că ”potul” se multiplică cu 5: 4 sticle de vin real livrate la adresa fizică a celui care rezolvă problema! Una mi-o păstrez mie! :))

Să ne întoarcem la cerințele de business și să analizăm ce nu este bine în soluția mea:

1. Matematic vorbind când ai un număr mic de angajați, combinațiile unice pentru task-uri este limitat. Exemplu: dacă ai 2 angajați poți crea doar un singur task unic: A responsabil – B reviewer. Sau invers.

Dacă ai trei angajați poți crea trei task-uri unice: A-B, B-C, A-C sau combinații unice ale lor.

Chiar și la mai mulți angajați și mai multe task-uri, funcția de randomizare dă de mai multe ori ”rateuri” referindu-ne aici la faptul că trebuie să apeși de mai multe ori tasta F9 (Calculate Now) pentru a obține rezultate unice.

Poate pentru mulți nu este o problemă, dar cerința este cerință.

Indicația mea este de a compara ID-ul Reviewer-ului cu ID-ul responsabilului ca să eliminăm acele SameID și cu rezultatele anterioar obținute mai sus. Ceea ce nu am descoperit încă este cum determini care sunt rezultatele de mai sus. O posibilă soluție este eliminarea ranzomizării.

2. A doua cerință: Distribuirea fiecăruia ca partener trebuie facută în mod echilibrat;

Asta înseamnă că dacă un angajat a primit deja un task, ar trebui să alocăm altora care nu au primit deja, și care nu au același ID cu cel al resposabilului. Numărul de review-uri alocate este specificat în tabelul de Angajați sub forma unui countif din tabelul de task-uri.

Aici nu am nici o idee, dar mai investigăm. :)

[/UPDATE]

[UPDATE 21.01.2015 H22:00]

Așa cum am promis revin cu update-ul zilei la această problemă a combinațiilor unice. Personal nu am reușit să mai ”sap” după soluții pentru problemele din Verdictul anterior dar am primit o soluție surprinzător de frumoasă de la un fost coleg de muncă.

Ciprian S. propune o soluție cu o funcție de tip Array care rezolvă cu o uninicitate a combinațiilor foarte mare problema duplicatelor din problema 1 a verdictului. Rămâne deschisă problema 2 – Distribuirea echilibrată a reviewer-ilor pe task-urile deschise.

De-a dreptul spectaculos în soluția lui Ciprian este modul în care a tratat condiția de unicitate. Eu vă prezentasem acea formulă ”sefe”: SINH(). El a găsit o metodă mult mai simplă și anume concatenarea între cel mai mic număr dintre ID-ul Responsabilului pe task și ID-ul responsabilului pentru Review. Din punctul meu de vedere, faptul că știam puțină matematică prezentând o funcție de mare nișă pălește în fața simplității geniale de a alipi minimul și maximul unui număr pentru determinarea duplicității unei combinații.

Chiar dacă în schimbul de mailuri Ciprian mi-a adus aminte de o perioadă din mileniul trecut când lucram ca tehnoredactor la PIM, la el a ajuns problema prin intermediul unei puternice comunități de Office din România: http://www.itlearning.ro/forum/viewtopic.php?f=99&t=7353. În prezent Ciprian este economist la o companie din Iași.

Dar cum rigoarea academică nu lasă o soluție să treacă fără a o întoarce pe toate părțile am găsit relativ repede o excepție în funcționarea corectă a validării unicității combinațiilor. Priviți cu atenție imaginea: În cazul perechilor 1-1111 și 11-111 avem o duplicitate la metoda alipirii.

image

Și dacă am trecut la teste, am descoperit că nici SINH()-ul nu este suficient de bun pentru numere mari pentru că ultimul număr care poate fi interpretat în Excel de SINH() este 709!

Soluția ar fi să lucrăm cu materialul clientului: adică alocarea reviewer-ilor să se facă numai din lista de angajați disponibili fără randomizare, iar formula lui Ciprian pare cea mai corectă până acum pentru această situație:

=IFERROR(SMALL(IF(Nom[Index]<>[@[Cod_R]];IF((COUNTIF($D$1:D1;Nom[Index]&[@[Cod_R]])+COUNTIF($D$1:D1;[@[Cod_R]]&Nom[Index]))=0;Nom[Index]));RANDBETWEEN(1;$F$1-1-COUNTIF(B$1:C1;[@[Cod_R]])));””)

Fișierul Excel cu soluția lui Ciprian îl puteți accesa aici: https://onedrive.live.com/view.aspx?cid=6EC38785F56DAE91&resid=6EC38785F56DAE91%21360595&app=Excel sau în folderul:  https://onedrive.live.com/?cid=6EC38785F56DAE91&id=6EC38785F56DAE91%212853 cu numele: Combinații unice – Ciprian S.xlsx

Inițiatorul, cel care a născocit problema este bucuros de soluția lui Ciprian dar mai trebuie rezolvată problema alocării egale a reviewirilor din lista și cu speranța că nu vor exista situații de exepție genul: 1-1111.

Personal voi încerca să îmbunătățesc soluția mea, cu gandul la faptul că uneori tabelele relaționale sunt mult mai utile pentru asta. :) Ar fi util să întrebăm ceva specialiști în SQL cum ar trata subiectul? :)

[/UPDATE]

[UPDATE 23.01.2012 H15]

Se pare că în final avem o rezolvare acceptabilă a problemei oferită de Marius M. ca o continuare a soluției inițiale a lui Ciprian S.

Ciprian a pus mai multe update-uri pe site-ul http://www.itlearning.ro/forum/viewtopic.php?f=99&t=7353 dar se pare că Marius a găsit optimul de alocare a ID-urilor cu cea mai mică rată de dubluri, plus că reușește să facă alocarea echilibrată a reviewer-ilor în listă.

Soluția propusă de Marius M. poate fi consultată la adresa: https://onedrive.live.com/edit.aspx?cid=6EC38785F56DAE91&resid=6EC38785F56DAE91%21361092&app=Excel

sau în folderul  https://onedrive.live.com/?cid=6EC38785F56DAE91&id=6EC38785F56DAE91%212853 cu numele: Combinații unice – Marius M.xlsx

Un preview cu modulul testat al aplicației inițiate de Ciprian S și continuate de Marius M.

Solutie_Marius

Mesajul complet a lui Marius care explică modul de rezolvare:

V-am atasat solutia pe combinatii, am continuat pe solutia oferita de Ciprian, (care e foarte faina, si de la care am invatat foarte multe, nu stiam ca pot face asa ceva cu referinte structurate), dar am adaugat verificarea duplicatelor fara nici o concatenare, si fara sinus, ci cum v-am scris pe blog, cu COUNTIFS, o verificare pe randurile anterioare. Ciprian a mai propus o rezolvare cu concatenare, dar are limite, solutia asta cu COUNTIFS nu are nici o limita, si nici o exceptie.

Cel mai usor vedeti in coloana E (Status).

Apoi am propus si o incercare de distribuirie echilibrata, anume verific count-urile id-urilor atribuite pana la randul curent, si iau in considerare pentru asignare doar id-urile care au fost asignate cel mai putin. De exemplu, pana la randul curent toate id-urile au fost asignate, dar majoriatea de mai multe ori, iar doua id-uri cate o data fiecare, le iau in considerare pentru asignare cu randbetween doar pe cele 2.

Dand de mai multe ori F9, am observat ca uneori ramane un singur id cu cele mai putine asignari, dar daca il asigneaza se incalca conditia de unicitate, si atunci imi da eroare.

Vreau sa va multumesc pentru problema.”

Marius este absolvent al specializării de Informatică Economică și actualmente lucrează la http://www.hartehanks.com/

Mulțumim Marius! 

[/UPDATE]

Problema rămâne deschisă. Dacă peste timp vor mai apărea cititori ai acestui articol care vor avea soluții îmbunătățite nu ezitați să mă contactați. Chiar ar fi interesante analogii cu bazele de date sau de ce nu cu VBA. :)

În cazul în care mai aveți probleme faine de Excel și pe care ați dori să le spuneți unor dezbateri / soluții publice aștept cu interes provocările dumneavoastre.

 

Blog la WordPress.com.

SUS ↑