Registratura electronica

Închis
costel.vascan
Mesaje:190
Membru din:Mar Mar 23, 2010 7:02 pm
Registratura electronica

Mesaj de costel.vascan » Vin Iul 09, 2010 5:15 pm

Vreau sa fac o registratura electronica cu Excel si cer, din nou, ajutorul vostru.

Registratura clasica

Conform legii toate documentele intrate, iesite sau intocmite pentru uz intern de o entitate (societate comerciala, asociatie, fundatie etc.) trebuiesc inregistrate intr-un Registru de Intrari Iesiri si ulterior arhivate. In mod normal ar trebui ca fiecare entitate sa aiba un compartiment numit registratura unde se tine un registru de intrari iesiri si unde o anumita persoana opereaza orice document intrat, iesit sau intocmit pentru uz intern.

Dezavantaje la registratura clasica

Acest mod de abordare a lucrurilor este insa greoi si conduce la o risipa inutila de resurse umane (deci trebuie un compartiment sau macar o persoana care sa fie insarcinata cu aceasta munca) si, mai mult, la o risipa de timp (Orice persoana care expediaza, de exemplu, o scrisoare trebuie sa treaca mai intai pe la registratura ...).

Cu vreau sa fac eu

Am creat in C:FolderRegistriIntrariIesiri (folder partajat) un numar de registri excel (cate un registru pentru fiecare an avand numele registrului identic cu anul in care va fi folosit – singura diferenta intre registri va fi doar numele registrilor) si care vor inlocui compartimentul de registratura, persoana care opereaza si, evident, Registrul de Intrari Iesiri in format fizic.
Acesti registri sunt postati intr-un folder partajat in asa fel incat nici un utilizator, in afara de administrator, sa nu aiba acces direct (adica sa nu poata face o inregistrare de document efectiv de la tastatura).
Fiecare compartiment, in functie de documentele cu care lucreaza are un "RegistruSpecial.xls" in care va inregistra documentul intrat, iesit sau intocmit pentru uz intern si care va schimba date automat cu "AAAA.xls" (Adica va exporta o serie de date catre "AAAA.xls" si va importa o serie de date din "AAAA.xls") (AAAA.xls este numele registrului de intrari iesiri electronic pentru anul AAAA; eu am atasat la acest mesaj registrul pentru anul 2010).

Ce am facut pana acum?
(evident ce am facut am facut cu ajutorul vostru ca eu silabisesc deocamdata in VBA)

Am creat "RegistruSpecial.xls" (fiecare compartiment sau chiar persoana in functie de atributii va gestiona unul sau mai multe fisiere de tip "RegistruSpecial.xls") “dotat" in asa fel incat operatorul uman sa fie ingradit cat mai mult pentru a nu se gresi si, de asemenea, am creat "AAAA.xls".

Ce vreau in continuare?

Vreau sa ma ajutati sa scriu o procedura in VBA pe care sa o inserez intr-un modul din fisierul "RegistruSpecial.xls" (acest fisier este postat in C:\FolderRegistriSpeciali) care sa faca urmatoarele:

1. START (la o combinatie de taste sau la apasarea unui buton);
2. Verifica daca randul curent (randul colorat in galben) este complet (range Ci:Oi au valori diferite de blank, i=numarul randului current din "RegistruSpecial.xls") şi dacă da se continuă cu pasul următor iar dacă nu se sare la pasul 10;
3. Se cauta in folderul “C:\FolderRegistriIntrariIesiri” registrul al cărui nume este identic cu anul curent (il numim “AAAA.xls”) se verifică dacă “AAAA” este DISPONIBIL (dacă nu cumva comunica cu un alt RegistruSpecial) si dacă da se continuă cu pasul următor iar dacă nu se sare la pasul 11;
4. Se setează “AAAA.xls” ca fiind INDISPONIBIL (ma gandesc sa nu apara vreo eroare generata, de exemplu, de incercarea in acelasi timp a altui RegistruSpecial de a comunica cu AAAA.xls);
5. Se exportă randul curent (indice i) din “RegistruSpecial.xls”, respective Ci:Oi pe primul rand blank (indice j) din “AAAA.xls”, respectiv Cj:Oj (Primul rand blank este primul rand care in coloana C, incepand cu C2 este blank);
6. Se forţează un calcul al sheet-ului (valorile pe care la pasul urmator vreau sa le import se calculeaza prin niste formule in functie de valorile campurilor Cj:Oj);
7. Se importa valorile Aj, Bj, Pj si Qj din “AAAA.xls” respectiv în Ai, Bi, Pi si Qi din “RegistruSpecial.xls” (i=numarul randului curent din “RegistruSpecial.xls” iar j=numarul primului rand blank din “AAAA.xls” );
8. Se setează “AAAA.xls” ca fiind DISPONIBIL;
9. Se afiseaza mesajul “Document inregistrat in R.I.I. cu succes” şi se sare la pasul 12 ;
10. Se afişează mesajul “Rand incomplet” şi se sare la pasul 12;
11. Se afiseaza mesajul “Registru Intrari/Iesiri este INDISPONIBIL” si se sare la pasul 12;
12. STOP

Parola acolo unde ea exista este: parola
Multumesc!
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.

Avatar utilizator
dinu
Mesaje:158
Membru din:Lun Mar 08, 2010 2:48 pm

Re: Registratura electronica

Mesaj de dinu » Joi Iul 22, 2010 10:14 am

O schita de algoritm.

Cod: Selectaţi tot

Option Explicit

Private Const RegsDirPath = "C:\FolderRegistriIntrariIesiri"
Private Const RecLen = 17

Public Sub TheSub()
   Dim RgWB As Workbook, RgWs As Worksheet 'Registratura
      Dim RgRw As Long
   Dim SpWs As Worksheet                   'Current Special
      Dim SpRw As Long
      Dim ValidSpRec As Boolean
   Dim Cl As Integer
   
   Set SpWs = Worksheets("...")
   SpRw = 21 'Astea pot sa provina dinafara procedurii
   
   'Verifica validitatea inregistrarii curente
   ValidSpRec = True
   For Cl = 1 To RecLen
      If SpWs.Cells(SpRw, Cl) = "" Then ValidSpRec = False: Exit For
   Next
   If ValidSpRec Then
      'Incearca sa deschida fisierul anului curent din registratura
      On Error GoTo NoYearReg
      Set RgWB = Workbooks.Open(Filename:=RegsDirPath & "\" & Year(Date) & ".xls", Editable:=True)
      On Error GoTo 0 'Neutralizeaza tratarea erorilor
      Set RgWs = RgWB.Worksheets("...")
      
      'Exporta inregistrarea curenta
      RgRw = 2
      Do While RgWs.Cells(RgRw, 3) <> "" 'Cauta prima celula goala in coloana C
         RgRw = RgRw + 1
      Loop
      SpWs.Cells(SpRw, 1).Resize(, RecLen).Copy
      RgWs.Cells(RgRw, 1).Resize(, RecLen).Paste
      Calculate 'All open Workbooks
      
      'Importa datele calculate, presupuse ca fac parte din inregistrari, utimele 4 campuri
      RgWs.Cells(RgRw, RecLen + 1).Resize(, 4).Copy
      SpWs.Cells(SpRw, RecLen + 1).Resize(, 4).Paste
      
      RgWB.Close SaveChanges:=True 'Asta il face disponibil
      MsgBox "Document inregistrat in R.I.I. cu succes"
   Else
      MsgBox "Rand incomplet"
   End If
   Exit Sub
   
NoYearReg:
   MsgBox "Registrul Intrari/Iesiri este INDISPONIBIL"
End Sub

Avatar utilizator
gecs
Moderator
Moderator
Mesaje:2311
Membru din:Sâm Aug 15, 2009 10:05 am
Localitate:Bucuresti

Re: Registratura electronica

Mesaj de gecs » Joi Iul 22, 2010 11:09 am

Pe ce rau eram eu dus cu pluta de n-am vazut subiectul asta pana acum? :D
Nu de alta, dar ma mai dumiream si eu la ce-ti trebuia procedura aia de blocare pe randul ramas necompletat...

Daca tot folosesti vba intr-un asemenea proiect in Excel (si nici ca s-ar putea altfel, decat cu vba ;) ), eu cred ca ar fi mai bine sa ai un form care preia datele de la utilizator si le scrie in fisier la locul lor, doar daca datele sunt complete, utilizatorul nevand decat posibilitatea sa vada nu sa si editeze datele scrise in tabel prin vba (o simpla protejare a foii, cu parola, evident).

Dupa parerea mea algoritmul general ar fi urmatorul:

1 - utilizatorul deschide fisierul RegistruSpecial.xls si are in fata foaia cu tabelul, dar nu poate edita tabelul, poate doar sa-l vizualizeze - are in schimb la dispozitie o combinatie de taste, sau un buton prin care poate inscrie o inregistrare in tabel;

2 - apasarea butonului sau a combinatiei de taste afiseaza form-ul in care utilizatorul completeaza TOATE campurile, mai putin numarul de inregistrare, iar acest form are doua butoane: OK si Cancel; la apasarea pe OK codul vba din spatele form-ului face verificarea completarii si corectitudinii datelor si aici sunt doua variante: verificarea e trecuta si atunci se trece la pasul urmator, verificarea nu e trecuta si atunci se afiseaza mesajul explicativ si form-ul ramane pe ecran pana la o noua apasare a lui OK; la apasarea lui Cancel form-ul dispare de pe ecran si nu se intampla nimic legat de fisier, form etc.

3 - daca dupa apasarea lui OK testul (testele) de validare a(u) fost trecut(e) codul vba incearca dechiderea fisierului AAAA.xls, iar daca acest lucru nu e posibil pentru ca un alt utilizator lucreaza cu fisierul, afiseaza un mesaj de tipul "Busy, please wait" si repeta incercarile de deschidere a fisierului AAAA.xls pana ce reuseste sa-l deschida, preia din acel fisier numarul de inregistrare, inscrie in acel fisier inregistrarea respectiva, salveaza fisierul si il inchide si daca toata procedura s-a incheiat cu succes, inscrie in tabelul din fisierul utilizatorului noua inregistrare, salveaza fisierul utilizatorului si semnaleaza utilizatorului terminarea procedurii afisand numarul de inregistrare -> OK -> inchide form-ul.

Bineinteles ca tabelul utilizatorului ramane tot needitabil, dar va aparea in tabel noua inregistrare, care va avea acelasi numar de intrare/iesire cu cea din fisierul AAAA.xls.

costel.vascan
Mesaje:190
Membru din:Mar Mar 23, 2010 7:02 pm

Re: Registratura electronica

Mesaj de costel.vascan » Joi Aug 05, 2010 5:39 pm

In varianta in care am gandit eu s-a rezolvat, merge, multumesc mult tuturor celor care m-au ajutat.

Evident ca varianta cu form propusa de gecs este net superioara dar trebuie sa mai invat mult ca sa incerc sa o abordez.

Daca cineva vrea sa ma ajute primesc cu placere...

Multumesc mult!

Cu respect,

Avatar utilizator
dinu
Mesaje:158
Membru din:Lun Mar 08, 2010 2:48 pm

Re: Registratura electronica

Mesaj de dinu » Dum Aug 08, 2010 2:54 pm

Ultima oară modificat Joi Aug 12, 2010 6:18 pm de către dinu, modificat 1 dată în total.

costel.vascan
Mesaje:190
Membru din:Mar Mar 23, 2010 7:02 pm

Re: Registratura electronica

Mesaj de costel.vascan » Mie Aug 11, 2010 6:34 pm

Multumesc pentru referinta.

iosif55bz
Mesaje:2
Membru din:Dum Sep 02, 2012 10:01 pm

Re: Registratura electronica

Mesaj de iosif55bz » Mar Sep 04, 2012 9:53 am

Ma intereseaza si pe mine un model de registratura elecronica asa cum ai descris-o in acest articol.
Poti sa-mi trimiti si mie o descriere si modul in care se realizeaza ? Eu nu am lucrat in VBA.

cristinael
Mesaje:210
Membru din:Mie Iun 15, 2011 8:47 pm

Re: Registratura electronica

Mesaj de cristinael » Sâm Noi 17, 2012 6:59 pm

poti posta si pentru noi acest registru.Chiar e interesant.
multumim anticipat.

cristinael
Mesaje:210
Membru din:Mie Iun 15, 2011 8:47 pm

Re: Registratura electronica

Mesaj de cristinael » Dum Dec 23, 2012 2:44 pm

insist.Ne poti da si mie acest registru.Daca e cazul platesc.Eu incerc sa fac ceva de genul, dar nu ma prea descurc.Mai am multe de invatat.
Mersi

Închis

Înapoi la “Visual Basic for Application (VBA) cu Excel - Intrebari tehnice”