Registratura electronica
-
- Mesaje:190
- Membru din:Mar Mar 23, 2010 7:02 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!
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.
Re: Registratura electronica
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
Re: Registratura electronica
Pe ce rau eram eu dus cu pluta de n-am vazut subiectul asta pana acum?
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.

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

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.
-
- Mesaje:190
- Membru din:Mar Mar 23, 2010 7:02 pm
Re: Registratura electronica
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,
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,
Re: Registratura electronica
Ultima oară modificat Joi Aug 12, 2010 6:18 pm de către dinu, modificat 1 dată în total.
-
- Mesaje:190
- Membru din:Mar Mar 23, 2010 7:02 pm
Re: Registratura electronica
Multumesc pentru referinta.
Re: Registratura electronica
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.
Poti sa-mi trimiti si mie o descriere si modul in care se realizeaza ? Eu nu am lucrat in VBA.
-
- Mesaje:210
- Membru din:Mie Iun 15, 2011 8:47 pm
Re: Registratura electronica
poti posta si pentru noi acest registru.Chiar e interesant.
multumim anticipat.
multumim anticipat.
-
- Mesaje:210
- Membru din:Mie Iun 15, 2011 8:47 pm
Re: Registratura electronica
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
Mersi