commit 656d98697fc4da3437a508fdfc855a290ac9eda5 Author: Marius Mutu Date: Sat Apr 11 17:11:32 2026 +0300 Import initial din SVN ROAAUTO/Trunk @HEAD diff --git a/COMUN/Drepturi utilizatori/ROAAUTO/crsobiecte.dbf b/COMUN/Drepturi utilizatori/ROAAUTO/crsobiecte.dbf new file mode 100644 index 0000000..c088ce3 Binary files /dev/null and b/COMUN/Drepturi utilizatori/ROAAUTO/crsobiecte.dbf differ diff --git a/COMUN/Drepturi utilizatori/ROAAUTO/obiecte.dbf b/COMUN/Drepturi utilizatori/ROAAUTO/obiecte.dbf new file mode 100644 index 0000000..7799412 Binary files /dev/null and b/COMUN/Drepturi utilizatori/ROAAUTO/obiecte.dbf differ diff --git a/COMUN/Drepturi utilizatori/ROAAUTO/scrie_obiecte.prg b/COMUN/Drepturi utilizatori/ROAAUTO/scrie_obiecte.prg new file mode 100644 index 0000000..50eaa7c --- /dev/null +++ b/COMUN/Drepturi utilizatori/ROAAUTO/scrie_obiecte.prg @@ -0,0 +1,62 @@ +&& id = 8 +lnIdProgram = 8 +lcLocalDir=Addbs(Justpath(Sys(16,0))) +Cd (lcLocalDir) +If Used('obiecte') + Use In obiecte +Endif +Use obiecte In 0 +gnhandle=SQLConnect('jcsserver','contafin_oracle','123') +If Used('crsmax') + Use In CrsMax +Endif +lcSql=[select pack_drepturi.getid_obiect() as maxid from dual] +lnSucces=SQLExec(gnhandle,lcSql,'crsmax') +If lnSucces<0 + Messagebox("Eroare la citirea id-ului!") + Exit +Endif +Select CrsMax +lnMaxId=maxid +Use In CrsMax +MESSAGEBOX(lnMaxId,0,"Id maxim pentru obiecte") + +Select obiecte +Replace id_prog With lnIdProgram All +Replace cod With Padl(Substr(Padl(Alltrim(cheie),5,[ ]),5,1),2,[0]) FOR TYPE(SUBSTR(ALLTRIM(cheie),LEN(ALLTRIM(cheie))-2))='N' +Replace cod With Padl(Substr(Padl(Alltrim(cheie),5,[ ]),4,2),2,[0]) FOR TYPE(SUBSTR(ALLTRIM(cheie),LEN(ALLTRIM(cheie))-2))<>'N' +Replace cod With Substr(cod,2,1) For !Inlist(Len(Alltrim(tata)),1,2) Or Type(Substr(cod,2,1))!='N' +Replace id_obiect With Recno()+lnMaxId All +Replace cheie With Alltrim(tata)+Alltrim(cod) All +Replace id_tata With -1 All +Select id_obiect,cheie From obiecte Where Alltrim(cheie) In (Select Distinct Alltrim(tata) As cheie From obiecte) Into Cursor crstati +Select crstati +Scan + lnIdObiect=id_obiect + lcCheie=Alltrim(cheie) + Select obiecte + Replace id_tata With lnIdObiect For Alltrim(tata)=lcCheie + Select crstati +Endscan +Use In crstati + +lcSql=[update def_obiecte set sters=2 where id_program=]+ALLTRIM(STR(lnIdProgram))+[ and sters=0] +lnSucces=SQLExec(gnhandle,lcSql) +If lnSucces<0 + Messagebox("Eroare la stergerea vechilor obiecte!") + Exit +Endif + +Select obiecte +Browse +Scan + lcSql=[insert into def_obiecte (id_obiect,id_program,id_tata,descriere,cod) ]+; + [values (]+Alltrim(Str(id_obiect))+[,]+ALLTRIM(STR(id_prog))+[,]+; + ALLTRIM(Str(id_tata))+[,']+Alltrim(explicatie)+[',']+Alltrim(cod)+[')] + lnSucces=SQLExec(gnhandle,lcSql) + If lnSucces<1 + Wait Window lcSql + Endif +Endscan +SQLDisconnect(gnhandle) +Use In obiecte \ No newline at end of file diff --git a/COMUN/Drepturi utilizatori/ROACASA/roacasa_obiecte.sql b/COMUN/Drepturi utilizatori/ROACASA/roacasa_obiecte.sql new file mode 100644 index 0000000..a69dc8c --- /dev/null +++ b/COMUN/Drepturi utilizatori/ROACASA/roacasa_obiecte.sql @@ -0,0 +1,38 @@ +-- obiecte roacasa, drepturi asupra lor +-- creat de alex.lepadatu, +-- 28.04.2009 + + +prompt PL/SQL Developer import file +prompt Created on Tuesday, April 28, 2009 by alexandru.lepadatu +set feedback off +set define off +prompt Disabling triggers for DEF_OBIECTE... +alter table DEF_OBIECTE disable all triggers; +prompt Loading DEF_OBIECTE... +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5628, 197, 'Listare', 5626, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5629, 197, 'Stergere', 5626, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5625, 197, 'Rapoarte', -1, 'C', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5626, 197, 'Registrul de casa', 5625, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5627, 197, 'Export', 5626, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5741, 197, 'Operatii', -1, 'B', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5742, 197, 'Seturi', 5741, '01', null, null, 0); +commit; +prompt 7 records loaded +prompt Enabling triggers for DEF_OBIECTE... +alter table DEF_OBIECTE enable all triggers; +set feedback on +set define on +prompt Done. + + + +exec pack_migrare.UpdateVersiune('ff_2009_04_28_01_OBIECTE'); +commit; \ No newline at end of file diff --git a/COMUN/Drepturi utilizatori/ROACONT/OBIECTE.Dbf b/COMUN/Drepturi utilizatori/ROACONT/OBIECTE.Dbf new file mode 100644 index 0000000..f811ea4 Binary files /dev/null and b/COMUN/Drepturi utilizatori/ROACONT/OBIECTE.Dbf differ diff --git a/COMUN/Drepturi utilizatori/ROACONT/OBIECTE_1010.Dbf b/COMUN/Drepturi utilizatori/ROACONT/OBIECTE_1010.Dbf new file mode 100644 index 0000000..9a1459d Binary files /dev/null and b/COMUN/Drepturi utilizatori/ROACONT/OBIECTE_1010.Dbf differ diff --git a/COMUN/Drepturi utilizatori/ROACONT/obiecte_0510.dbf b/COMUN/Drepturi utilizatori/ROACONT/obiecte_0510.dbf new file mode 100644 index 0000000..a0ee075 Binary files /dev/null and b/COMUN/Drepturi utilizatori/ROACONT/obiecte_0510.dbf differ diff --git a/COMUN/Drepturi utilizatori/ROACONT/obiecte_0710.dbf b/COMUN/Drepturi utilizatori/ROACONT/obiecte_0710.dbf new file mode 100644 index 0000000..fdac47d Binary files /dev/null and b/COMUN/Drepturi utilizatori/ROACONT/obiecte_0710.dbf differ diff --git a/COMUN/Drepturi utilizatori/ROACONT/obiecte_forma.dbf b/COMUN/Drepturi utilizatori/ROACONT/obiecte_forma.dbf new file mode 100644 index 0000000..92615ee Binary files /dev/null and b/COMUN/Drepturi utilizatori/ROACONT/obiecte_forma.dbf differ diff --git a/COMUN/Drepturi utilizatori/ROACONT/obiecte_meniu.DBF b/COMUN/Drepturi utilizatori/ROACONT/obiecte_meniu.DBF new file mode 100644 index 0000000..01bbfe9 Binary files /dev/null and b/COMUN/Drepturi utilizatori/ROACONT/obiecte_meniu.DBF differ diff --git a/COMUN/Drepturi utilizatori/ROACONT/scrie_obiecte.prg b/COMUN/Drepturi utilizatori/ROACONT/scrie_obiecte.prg new file mode 100644 index 0000000..f3fe710 --- /dev/null +++ b/COMUN/Drepturi utilizatori/ROACONT/scrie_obiecte.prg @@ -0,0 +1,61 @@ +&& id = 2 +lnProgram = 2 +lcLocalDir=Addbs(Justpath(Sys(16,0))) +Cd (lcLocalDir) +If Used('obiecte') + Use In obiecte +Endif +Use obiecte In 0 +gnhandle=SQLConnect('jcsserver','contafin_oracle','123') +If Used('crsmax') + Use In CrsMax +Endif +lcSql=[select pack_drepturi.getid_obiect() as maxid from dual] +lnSucces=SQLExec(gnhandle,lcSql,'crsmax') +If lnSucces<0 + Messagebox("Eroare la citirea id-ului!") + Exit +Endif +Select CrsMax +lnMaxId=maxid +Use In CrsMax + +Select obiecte +Replace id_prog With lnProgram All +Replace cod With Padl(Substr(Padl(Alltrim(cheie),5,[ ]),5,1),2,[0]) FOR TYPE(SUBSTR(ALLTRIM(cheie),LEN(ALLTRIM(cheie))-2))='N' +Replace cod With Padl(Substr(Padl(Alltrim(cheie),5,[ ]),4,2),2,[0]) FOR TYPE(SUBSTR(ALLTRIM(cheie),LEN(ALLTRIM(cheie))-2))<>'N' +Replace cod With Substr(cod,2,1) For !Inlist(Len(Alltrim(tata)),1,2) Or Type(Substr(cod,2,1))!='N' +Replace id_obiect With Recno()+lnMaxId All +Replace cheie With Alltrim(tata)+Alltrim(cod) All +Replace id_tata With -1 All +Select id_obiect,cheie From obiecte Where Alltrim(cheie) In (Select Distinct Alltrim(tata) As cheie From obiecte) Into Cursor crstati +Select crstati +Scan + lnIdObiect=id_obiect + lcCheie=Alltrim(cheie) + Select obiecte + Replace id_tata With lnIdObiect For Alltrim(tata)=lcCheie + Select crstati +Endscan +Use In crstati + +lcSql=[update def_obiecte set sters=2 where id_program=]+ALLTRIM(STR(lnIdProgram))+[ and sters=0] +lnSucces=SQLExec(gnhandle,lcSql) +If lnSucces<0 + Messagebox("Eroare la stergerea vechilor obiecte!") + Exit +Endif + +Select obiecte +Browse +Scan + lcSql=[insert into def_obiecte (id_obiect,id_program,id_tata,descriere,cod) ]+; + [values (]+Alltrim(Str(id_obiect))+[,]+ALLTRIM(STR(id_prog))+[,]+; + ALLTRIM(Str(id_tata))+[,']+Alltrim(explicatie)+[',']+Alltrim(cod)+[')] + lnSucces=SQLExec(gnhandle,lcSql) + If lnSucces<1 + Wait Window lcSql + Endif +Endscan +SQLDisconnect(gnhandle) +Use In obiecte \ No newline at end of file diff --git a/COMUN/Drepturi utilizatori/ROADEF/obiecte.dbf b/COMUN/Drepturi utilizatori/ROADEF/obiecte.dbf new file mode 100644 index 0000000..a8fa36e Binary files /dev/null and b/COMUN/Drepturi utilizatori/ROADEF/obiecte.dbf differ diff --git a/COMUN/Drepturi utilizatori/ROADEF/roadef_obiecte.sql b/COMUN/Drepturi utilizatori/ROADEF/roadef_obiecte.sql new file mode 100644 index 0000000..13e0e01 --- /dev/null +++ b/COMUN/Drepturi utilizatori/ROADEF/roadef_obiecte.sql @@ -0,0 +1,249 @@ +-- obiecte roadef, drepturi asupra lor +-- creat de alex.lepadatu, +-- 21.04.2009 + +prompt Disabling triggers for DEF_OBIECTE... +alter table DEF_OBIECTE disable all triggers; +prompt Loading DEF_OBIECTE... +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5516, 1, 'Organizarea companiei', -1, 'A', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5517, 1, 'Datele firmei', 5516, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5518, 1, 'Sucursale/puncte de lucru', 5516, '02', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5519, 1, 'Export', 5518, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5520, 1, 'Listare', 5518, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5521, 1, 'Modificare', 5518, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5522, 1, 'Refacere', 5518, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5523, 1, 'Departamente/ Sectii', 5516, '03', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5524, 1, 'Export', 5523, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5525, 1, 'Listare', 5523, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5526, 1, 'Modificare', 5523, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5527, 1, 'Refacere', 5523, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5528, 1, 'Gestiuni', 5516, '04', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5529, 1, 'Export', 5528, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5530, 1, 'Listare', 5528, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5531, 1, 'Modificare', 5528, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5532, 1, 'Refacere', 5528, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5533, 1, 'Calculatoare', 5516, '05', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5534, 1, 'Export', 5533, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5535, 1, 'Listare', 5533, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5536, 1, 'Modificare', 5533, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5537, 1, 'Refacere', 5533, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5538, 1, 'Utilizatori', 5516, '06', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5539, 1, 'Export', 5538, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5540, 1, 'Listare', 5538, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5541, 1, 'Modificare', 5538, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5542, 1, 'Refacere', 5538, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5543, 1, 'Rapoarte', 5516, '07', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5544, 1, 'Entitati', -1, 'B', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5545, 1, 'Entitati', 5544, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5546, 1, 'Export', 5545, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5547, 1, 'Listare', 5545, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5548, 1, 'Modificare', 5545, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5549, 1, 'Refacere', 5545, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5550, 1, 'Responsabili', 5544, '02', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5551, 1, 'Export', 5550, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5552, 1, 'Listare', 5550, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5553, 1, 'Modificare', 5550, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5554, 1, 'Refacere', 5550, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5555, 1, 'Asociere entitati-sectii/gestiuni', 5544, '03', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5556, 1, 'Export', 5555, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5557, 1, 'Listare', 5555, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5558, 1, 'Modificare', 5555, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5559, 1, 'Refacere', 5555, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5560, 1, 'Angajati', 5544, '04', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5561, 1, 'Export', 5560, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5562, 1, 'Listare', 5560, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5563, 1, 'Modificare', 5560, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5564, 1, 'Refacere', 5560, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5565, 1, 'Liste nomenclatoare', -1, 'C', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5566, 1, 'Tipuri de venituri si cheltuieli', 5565, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5567, 1, 'Export', 5566, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5568, 1, 'Listare', 5566, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5569, 1, 'Modificare', 5566, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5570, 1, 'Refacere', 5566, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5571, 1, 'Lucrari', 5565, '02', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5572, 1, 'Export', 5571, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5573, 1, 'Listare', 5571, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5574, 1, 'Modificare', 5571, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5575, 1, 'Refacere', 5571, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5576, 1, 'Tipuri de documente', 5565, '03', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5577, 1, 'Export', 5576, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5578, 1, 'Listare', 5576, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5579, 1, 'Modificare', 5576, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5580, 1, 'Refacere', 5576, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5581, 1, 'Medii de transmisie', 5565, '04', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5582, 1, 'Export', 5581, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5583, 1, 'Listare', 5581, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5584, 1, 'Modificare', 5581, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5585, 1, 'Refacere', 5581, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5586, 1, 'Judete', 5565, '05', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5587, 1, 'Export', 5586, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5588, 1, 'Listare', 5586, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5589, 1, 'Modificare', 5586, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5590, 1, 'Refacere', 5586, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5591, 1, 'Localitati', 5565, '06', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5592, 1, 'Export', 5591, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5593, 1, 'Listare', 5591, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5594, 1, 'Modificare', 5591, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5595, 1, 'Refacere', 5591, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5596, 1, 'Valute', 5565, '07', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5597, 1, 'Export', 5596, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5598, 1, 'Listare', 5596, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5599, 1, 'Modificare', 5596, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5600, 1, 'Refacere', 5596, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5601, 1, 'Categorii de entitati', 5565, '08', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5602, 1, 'Export', 5601, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5603, 1, 'Listare', 5601, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5604, 1, 'Modificare', 5601, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5605, 1, 'Refacere', 5601, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5606, 1, 'Utilitati', -1, 'D', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5607, 1, 'Deschidere de luna', 5606, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5608, 1, 'Export', 5607, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5609, 1, 'Listare', 5607, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5610, 1, 'Modificare', 5607, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5611, 1, 'Refacere', 5607, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5612, 1, 'Vizualizare istoric deschid./redeschid.', 5606, '02', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5613, 1, 'Blocare de luna', 5606, '03', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5614, 1, 'Optiuni', 5606, '04', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5615, 1, 'Categorii seturi', 5606, '05', null, null, 0); +commit; +prompt 100 records committed... +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5616, 1, 'Export', 5615, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5617, 1, 'Listare', 5615, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5618, 1, 'Modificare', 5615, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5619, 1, 'Refacere', 5615, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5620, 1, 'Configurare seturi', 5606, '06', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5621, 1, 'Export', 5620, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5622, 1, 'Listare', 5620, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5623, 1, 'Modificare', 5620, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5624, 1, 'Refacere', 5620, '4', null, null, 0); +commit; +prompt 109 records loaded +prompt Enabling triggers for DEF_OBIECTE... +alter table DEF_OBIECTE enable all triggers; + + +insert into def_grup_drept_obiecte + (id_grup, id_obiect, id_utilop, dataora) + select g.id_grup, o.id_obiect, -3, sysdate + from (select id_grup + from def_grup_drept t + where id_program = 1 + and sters = 0) g, + (select id_obiect + from def_obiecte + where id_program = 1 + and sters = 0) o; +commit; + + +exec pack_migrare.UpdateVersiune('ff_2009_04_21_05_OBIECTE'); +commit; diff --git a/COMUN/Drepturi utilizatori/ROADEF/scrie_obiecte.prg b/COMUN/Drepturi utilizatori/ROADEF/scrie_obiecte.prg new file mode 100644 index 0000000..9f1eec7 --- /dev/null +++ b/COMUN/Drepturi utilizatori/ROADEF/scrie_obiecte.prg @@ -0,0 +1,62 @@ +*!* ATENTIE LA SECVENTA, SE APELEAZA AUTOMAT TRIGGERUL LA INSERT +&& id = 2 +lnIdProgram = 1 +lcLocalDir=Addbs(Justpath(Sys(16,0))) +Cd (lcLocalDir) +If Used('obiecte') + Use In obiecte +Endif +Use obiecte In 0 +gnhandle=SQLConnect('jcsserver','contafin_oracle','123') +If Used('crsmax') + Use In CrsMax +Endif +lcSql=[select pack_drepturi.getid_obiect() as maxid from dual] +lnSucces=SQLExec(gnhandle,lcSql,'crsmax') +If lnSucces<0 + Messagebox("Eroare la citirea id-ului!") + Exit +Endif +Select CrsMax +lnMaxId=maxid +Use In CrsMax + +Select obiecte +Replace id_prog With lnidProgram All +Replace cod With Padl(Substr(Padl(Alltrim(cheie),5,[ ]),5,1),2,[0]) FOR TYPE(SUBSTR(ALLTRIM(cheie),LEN(ALLTRIM(cheie))-2))='N' +Replace cod With Padl(Substr(Padl(Alltrim(cheie),5,[ ]),4,2),2,[0]) FOR TYPE(SUBSTR(ALLTRIM(cheie),LEN(ALLTRIM(cheie))-2))<>'N' +Replace cod With Substr(cod,2,1) For !Inlist(Len(Alltrim(tata)),1,2) Or Type(Substr(cod,2,1))!='N' +Replace id_obiect With Recno()+lnMaxId All +Replace cheie With Alltrim(tata)+Alltrim(cod) All +Replace id_tata With -1 All +Select id_obiect,cheie From obiecte Where Alltrim(cheie) In (Select Distinct Alltrim(tata) As cheie From obiecte) Into Cursor crstati +Select crstati +Scan + lnIdObiect=id_obiect + lcCheie=Alltrim(cheie) + Select obiecte + Replace id_tata With lnIdObiect For Alltrim(tata)=lcCheie + Select crstati +Endscan +Use In crstati + +lcSql=[update def_obiecte set sters=2 where id_program=]+ALLTRIM(STR(lnIdProgram))+[ and sters=0] +lnSucces=SQLExec(gnhandle,lcSql) +If lnSucces<0 + Messagebox("Eroare la stergerea vechilor obiecte!") + Exit +Endif + +Select obiecte +Browse +Scan + lcSql=[insert into def_obiecte (id_obiect,id_program,id_tata,descriere,cod) ]+; + [values (]+Alltrim(Str(id_obiect))+[,]+ALLTRIM(STR(id_prog))+[,]+; + ALLTRIM(Str(id_tata))+[,']+Alltrim(explicatie)+[',']+Alltrim(cod)+[')] + lnSucces=SQLExec(gnhandle,lcSql) + If lnSucces<1 + Wait Window lcSql + Endif +Endscan +SQLDisconnect(gnhandle) +Use In obiecte \ No newline at end of file diff --git a/COMUN/Drepturi utilizatori/ROAGEST/adaugare_drepturi.prg b/COMUN/Drepturi utilizatori/ROAGEST/adaugare_drepturi.prg new file mode 100644 index 0000000..78fba60 --- /dev/null +++ b/COMUN/Drepturi utilizatori/ROAGEST/adaugare_drepturi.prg @@ -0,0 +1,219 @@ +Procedure citeste_obiecte +Local lcMeniu,lcPageframe +lcMeniu=[contgest] +lcPageframe=[oprinc.pagefr1] + +Create Cursor CRSOBIECTE(ID_PROG N(1),CHEIE C(20),NIVEL N(2),EXPLICATIE C(100),TATA C(20),COD C(2),ID_OBIECT N(10),ID_TATA N(10)) +plCursor=.T. +citeste_meniu(90,lcmeniu,"Meniu") +citeste_pageframe(65,lcpageframe) +select * FROM crsobiecte INTO TABLE C:\crsobiecte.dbf +Endproc +************************************************************************ +Procedure citeste_meniu +Lparameters lnKey,lcNumeMeniu,lcOptiune +lcKey=Chr(lnKey) +*!* This.Nodes.Add(,1,lcKey,lcOptiune) +If plCursor + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey,1,lcOptiune,[ ]) +Endif +lnKey2=65 +*!* k=0 +*!* Try +*!* lcKey2=lcKey+Chr(lnKey2) +*!* lnKey2=lnKey2+1 +*!* This.Nodes.Add(lcKey,4,lcKey2,'Utile') +*!* If plCursor +*!* Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey2,4,[Utile],lcKey) +*!* Endif +*!* For i=1 To Cntbar('utile') +*!* lcOptiune=Prmbar('utile',i) +*!* If !Empty(lcOptiune) +*!* k=k+1 +*!* This.Nodes.Add(lcKey2,4,lcKey2+Padl(Alltrim(Str(k)),2,[0]),lcOptiune) +*!* If plCursor +*!* Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey2+Padl(Alltrim(Str(k)),2,[0]),4,lcOptiune,lcKey2) +*!* Endif +*!* Endif +*!* Endfor +*!* Catch +*!* ENDTRY +k=0 +Try + lcKey2=lcKey+Chr(lnKey2) + lnKey2=lnKey2+1 +*!* This.Nodes.Add(lcKey,4,lcKey2,'Initializare') + If plCursor + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey2,4,[Actualizare],lcKey) + Endif + For i=1 To Cntbar('actualizar') + lcOptiune=Prmbar('actualizar',i) + If !Empty(lcOptiune) + k=k+1 +*!* This.Nodes.Add(lcKey2,4,lcKey2+Padl(Alltrim(Str(k)),2,[0]),lcOptiune) + If plCursor + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey2+Padl(Alltrim(Str(k)),2,[0]),4,lcOptiune,lcKey2) + Endif + Endif + Endfor +Catch +Endtry +*!* k=0 +*!* Try +*!* lcKey2=lcKey+Chr(lnKey2) +*!* *!* This.Nodes.Add(lcKey,4,lcKey2,'Actualizari') +*!* If plCursor +*!* Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey2,4,[Actualizari],lcKey) +*!* Endif +*!* For i=1 To Cntbar('_1bs12qror') +*!* lcOptiune=Prmbar('_1bs12qror',i) +*!* If !Empty(lcOptiune) +*!* k=k+1 +*!* *!* This.Nodes.Add(lcKey2,4,lcKey2+Padl(Alltrim(Str(k)),2,[0]),lcOptiune) +*!* If plCursor +*!* Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey2+Padl(Alltrim(Str(k)),2,[0]),4,lcOptiune,lcKey2) +*!* Endif +*!* Endif +*!* Endfor +*!* Catch +*!* Endtry +************************************************************************ +Procedure citeste_pageframe +Lparameters lnKey,lcPageframe,lcTata +Local lcKey,lcProp,lcOptiune,lnNivel,lnPozitie,i,j,k,l +Store [] To lcKey,lcProp,lcOptiune +Store 0 To lnNivel,lnPozitie,i,j,k,l +If Empty(lcTata) + lcTata=Null + lnNivel=1 +Else + lnNivel=4 +Endif +Set Exact On +With &lcPageframe + For i=1 To .PageCount + For j=1 To .PageCount + If .Pages(j).PageOrder=i + Exit + Endif + Endfor + With .Pages(j) + lcKey=Nvl(lcTata,[])+Chr(lnKey) +*!* This.Nodes.Add(lcTata,lnNivel,lcKey,.Caption) + lcProp="cnt"+lcKey +*!* This.AddProperty(lcProp,0) + If plCursor + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey,lnNivel,.Caption,Nvl(lcTata,[ ])) + Endif + lcProp="cnt"+lcKey +*!* This.AddProperty(lcProp,0) + Dimension copii(128,3) + k=1 + For l=1 To .ControlCount + Do Case + Case Alltrim(Upper(.Objects(l).Class))='PAGEFRAME' + lcNume=lcPageframe+'.'+Alltrim(.Name)+'.'+Alltrim(Upper(.Objects(l).Name)) + citeste_pageframe(65,lcNume,lcKey) + Case Alltrim(Upper(.Objects(l).Class))='CW' And .Objects(l).nid_cw>0 + lcOptiune=.Objects(l).label_item1.Caption + lnPozitie=.Objects(l).nid_cw + copii(lnPozitie,1)=lcOptiune + copii(lnPozitie,2)=.Objects(l).ntip + copii(lnPozitie,3)=.Objects(l).cmeniu + k=k+1 + Endcase + Endfor + For l=1 To k-1 +*!* This.Nodes.Add(lcKey,4,lcKey+Padl(Alltrim(Str(l)),2,[0]),copii(l,1)) + If plCursor + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+Padl(Alltrim(Str(l)),2,[0]),4,copii(l,1),lcKey) + Endif +*!* If !Empty(copii(l,3)) +*!* This.adauga_meniuri(copii(l,3),copii(l,2),lcKey+Padl(Alltrim(Str(l)),2,[0])) +*!* Else + adauga_frunze(copii(l,2),lcKey+Padl(Alltrim(Str(l)),2,[0])) +*!* Endif + Endfor + Endwith + lnKey=lnKey+1 + Endfor +Endwith +Set Exact Off +Endproc +************************************************************************ +Procedure adauga_frunze +Lparameters lnTip,lcKey +Do Case +Case lnTip=0 && introducere +Case lnTip=1 && raport +*!* lcProp="cnt"+lcKey +*!* This.AddProperty(lcProp,0) +*!* This.Nodes.Add(lcKey,4,lcKey+"1","Export") +*!* This.Nodes.Add(lcKey,4,lcKey+"2","Listare") + If plCursor + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"1",4,"Export",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"2",4,"Listare",lcKey) + Endif +Case lnTip=2 && registru +*!* lcProp="cnt"+lcKey +*!* This.AddProperty(lcProp,0) +*!* This.Nodes.Add(lcKey,4,lcKey+"1","Export") +*!* This.Nodes.Add(lcKey,4,lcKey+"2","Listare") +*!* This.Nodes.Add(lcKey,4,lcKey+"3","Modificare") +*!* This.Nodes.Add(lcKey,4,lcKey+"4","Refacere") + If plCursor + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"1",4,"Export",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"2",4,"Listare",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"3",4,"Modificare",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"4",4,"Refacere",lcKey) + Endif +Case lnTip=3 && balanta\inreg. +*!* lcProp="cnt"+lcKey +*!* This.AddProperty(lcProp,0) +*!* This.Nodes.Add(lcKey,4,lcKey+"1","Export") +*!* This.Nodes.Add(lcKey,4,lcKey+"2","Listare") +*!* This.Nodes.Add(lcKey,4,lcKey+"3","Modificare") +*!* This.Nodes.Add(lcKey,4,lcKey+"4","Refacere") + If plCursor + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"1",4,"Export",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"2",4,"Listare",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"3",4,"Modificare",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"4",4,"Refacere",lcKey) + Endif +Case lnTip=4 && vizualizare +*!* lcProp="cnt"+lcKey +*!* This.AddProperty(lcProp,0) +*!* This.Nodes.Add(lcKey,4,lcKey+"1","Export") +*!* This.Nodes.Add(lcKey,4,lcKey+"2","Listare") +*!* This.Nodes.Add(lcKey,4,lcKey+"3","Modificare") +*!* This.Nodes.Add(lcKey,4,lcKey+"4","Stergere") +*!* This.Nodes.Add(lcKey,4,lcKey+"5","Vizualizare inreg. proprii") +*!* This.Nodes.Add(lcKey,4,lcKey+"6","Vizualizare toate inreg.") + If plCursor + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"1",4,"Export",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"2",4,"Listare",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"3",4,"Modificare",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"4",4,"Stergere",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"5",4,"Vizualizare inreg.proprii",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"6",4,"Vizualizare tot",lcKey) + ENDIF +Case lnTip=5 && personalizat +*!* lcProp="cnt"+lcKey +*!* This.AddProperty(lcProp,0) +*!* This.Nodes.Add(lcKey,4,lcKey+"1","Export") +*!* This.Nodes.Add(lcKey,4,lcKey+"2","Listare") +*!* This.Nodes.Add(lcKey,4,lcKey+"3","Modificare") +*!* This.Nodes.Add(lcKey,4,lcKey+"4","Stergere") +*!* This.Nodes.Add(lcKey,4,lcKey+"7","Altele...") +*!* This.Nodes.Add(lcKey,4,lcKey+"8","Altele...") + If plCursor + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"1",4,"Export",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"2",4,"Listare",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"3",4,"Modificare",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"4",4,"Stergere",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"7",4,"Altele...",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"8",4,"Altele...",lcKey) + Endif +Endcase +Endproc +************************************************************************ \ No newline at end of file diff --git a/COMUN/Drepturi utilizatori/ROAGEST/crsobiecte.dbf b/COMUN/Drepturi utilizatori/ROAGEST/crsobiecte.dbf new file mode 100644 index 0000000..23ffb8e Binary files /dev/null and b/COMUN/Drepturi utilizatori/ROAGEST/crsobiecte.dbf differ diff --git a/COMUN/Drepturi utilizatori/ROAGEST/obiecte.dbf b/COMUN/Drepturi utilizatori/ROAGEST/obiecte.dbf new file mode 100644 index 0000000..3afac83 Binary files /dev/null and b/COMUN/Drepturi utilizatori/ROAGEST/obiecte.dbf differ diff --git a/COMUN/Drepturi utilizatori/ROAGEST/scrie_obiecte.prg b/COMUN/Drepturi utilizatori/ROAGEST/scrie_obiecte.prg new file mode 100644 index 0000000..ee24304 --- /dev/null +++ b/COMUN/Drepturi utilizatori/ROAGEST/scrie_obiecte.prg @@ -0,0 +1,62 @@ +&& id = 5 +lnIdProgram = 5 +lcLocalDir=Addbs(Justpath(Sys(16,0))) +Cd (lcLocalDir) +If Used('obiecte') + Use In obiecte +Endif +Use obiecte In 0 +gnhandle=SQLConnect('jcsserver','contafin_oracle','123') +If Used('crsmax') + Use In CrsMax +Endif +lcSql=[select pack_drepturi.getid_obiect() as maxid from dual] +lnSucces=SQLExec(gnhandle,lcSql,'crsmax') +If lnSucces<0 + Messagebox("Eroare la citirea id-ului!") + Exit +Endif +Select CrsMax +lnMaxId=maxid +Use In CrsMax +MESSAGEBOX(lnMaxId,0,"Id maxim pentru obiecte") + +Select obiecte +Replace id_prog With lnIdProgram All +Replace cod With Padl(Substr(Padl(Alltrim(cheie),5,[ ]),5,1),2,[0]) FOR TYPE(SUBSTR(ALLTRIM(cheie),LEN(ALLTRIM(cheie))-2))='N' +Replace cod With Padl(Substr(Padl(Alltrim(cheie),5,[ ]),4,2),2,[0]) FOR TYPE(SUBSTR(ALLTRIM(cheie),LEN(ALLTRIM(cheie))-2))<>'N' +Replace cod With Substr(cod,2,1) For !Inlist(Len(Alltrim(tata)),1,2) Or Type(Substr(cod,2,1))!='N' +Replace id_obiect With Recno()+lnMaxId All +Replace cheie With Alltrim(tata)+Alltrim(cod) All +Replace id_tata With -1 All +Select id_obiect,cheie From obiecte Where Alltrim(cheie) In (Select Distinct Alltrim(tata) As cheie From obiecte) Into Cursor crstati +Select crstati +Scan + lnIdObiect=id_obiect + lcCheie=Alltrim(cheie) + Select obiecte + Replace id_tata With lnIdObiect For Alltrim(tata)=lcCheie + Select crstati +Endscan +Use In crstati + +lcSql=[update def_obiecte set sters=2 where id_program=]+ALLTRIM(STR(lnIdProgram))+[ and sters=0] +lnSucces=SQLExec(gnhandle,lcSql) +If lnSucces<0 + Messagebox("Eroare la stergerea vechilor obiecte!") + Exit +Endif + +Select obiecte +Browse +Scan + lcSql=[insert into def_obiecte (id_obiect,id_program,id_tata,descriere,cod) ]+; + [values (]+Alltrim(Str(id_obiect))+[,]+ALLTRIM(STR(id_prog))+[,]+; + ALLTRIM(Str(id_tata))+[,']+Alltrim(explicatie)+[',']+Alltrim(cod)+[')] + lnSucces=SQLExec(gnhandle,lcSql) + If lnSucces<1 + Wait Window lcSql + Endif +Endscan +SQLDisconnect(gnhandle) +Use In obiecte \ No newline at end of file diff --git a/COMUN/Drepturi utilizatori/ROALUCRARI/adaugare_drepturi.prg b/COMUN/Drepturi utilizatori/ROALUCRARI/adaugare_drepturi.prg new file mode 100644 index 0000000..4a03368 --- /dev/null +++ b/COMUN/Drepturi utilizatori/ROALUCRARI/adaugare_drepturi.prg @@ -0,0 +1,218 @@ +Procedure citeste_obiecte +Local lcMeniu,lcPageframe +*!* lcMeniu=[cont2000] +lcPageframe=[gofundal._pgfrmbase1] +Create Cursor CRSOBIECTE(ID_PROG N(1),CHEIE C(20),NIVEL N(2),EXPLICATIE C(100),TATA C(20),COD C(2),ID_OBIECT N(10),ID_TATA N(10)) +plCursor=.T. +*!* citeste_meniu(90,lcmeniu,"Meniu") +citeste_pageframe(65,lcpageframe) +select * FROM crsobiecte INTO TABLE C:\crsobiecte.dbf +Endproc +************************************************************************ +Procedure citeste_meniu +Lparameters lnKey,lcNumeMeniu,lcOptiune +lcKey=Chr(lnKey) +*!* This.Nodes.Add(,1,lcKey,lcOptiune) +If plCursor + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey,1,lcOptiune,[ ]) +Endif +lnKey2=65 +*!* k=0 +*!* Try +*!* lcKey2=lcKey+Chr(lnKey2) +*!* lnKey2=lnKey2+1 +*!* This.Nodes.Add(lcKey,4,lcKey2,'Utile') +*!* If plCursor +*!* Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey2,4,[Utile],lcKey) +*!* Endif +*!* For i=1 To Cntbar('utile') +*!* lcOptiune=Prmbar('utile',i) +*!* If !Empty(lcOptiune) +*!* k=k+1 +*!* This.Nodes.Add(lcKey2,4,lcKey2+Padl(Alltrim(Str(k)),2,[0]),lcOptiune) +*!* If plCursor +*!* Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey2+Padl(Alltrim(Str(k)),2,[0]),4,lcOptiune,lcKey2) +*!* Endif +*!* Endif +*!* Endfor +*!* Catch +*!* ENDTRY +k=0 +Try + lcKey2=lcKey+Chr(lnKey2) + lnKey2=lnKey2+1 +*!* This.Nodes.Add(lcKey,4,lcKey2,'Initializare') + If plCursor + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey2,4,[Initializare],lcKey) + Endif + For i=1 To Cntbar('initializa') + lcOptiune=Prmbar('initializa',i) + If !Empty(lcOptiune) + k=k+1 +*!* This.Nodes.Add(lcKey2,4,lcKey2+Padl(Alltrim(Str(k)),2,[0]),lcOptiune) + If plCursor + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey2+Padl(Alltrim(Str(k)),2,[0]),4,lcOptiune,lcKey2) + Endif + Endif + Endfor +Catch +Endtry +k=0 +Try + lcKey2=lcKey+Chr(lnKey2) +*!* This.Nodes.Add(lcKey,4,lcKey2,'Actualizari') + If plCursor + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey2,4,[Actualizari],lcKey) + Endif + For i=1 To Cntbar('_1bs12qror') + lcOptiune=Prmbar('_1bs12qror',i) + If !Empty(lcOptiune) + k=k+1 +*!* This.Nodes.Add(lcKey2,4,lcKey2+Padl(Alltrim(Str(k)),2,[0]),lcOptiune) + If plCursor + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey2+Padl(Alltrim(Str(k)),2,[0]),4,lcOptiune,lcKey2) + Endif + Endif + Endfor +Catch +Endtry +************************************************************************ +Procedure citeste_pageframe +Lparameters lnKey,lcPageframe,lcTata +Local lcKey,lcProp,lcOptiune,lnNivel,lnPozitie,i,j,k,l +Store [] To lcKey,lcProp,lcOptiune +Store 0 To lnNivel,lnPozitie,i,j,k,l +If Empty(lcTata) + lcTata=Null + lnNivel=1 +Else + lnNivel=4 +Endif +Set Exact On +With &lcPageframe + For i=1 To .PageCount + For j=1 To .PageCount + If .Pages(j).PageOrder=i + Exit + Endif + Endfor + With .Pages(j) + lcKey=Nvl(lcTata,[])+Chr(lnKey) +*!* This.Nodes.Add(lcTata,lnNivel,lcKey,.Caption) + lcProp="cnt"+lcKey +*!* This.AddProperty(lcProp,0) + If plCursor + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey,lnNivel,.Caption,Nvl(lcTata,[ ])) + Endif + lcProp="cnt"+lcKey +*!* This.AddProperty(lcProp,0) + Dimension copii(128,3) + k=1 + For l=1 To .ControlCount + Do Case + Case Alltrim(Upper(.Objects(l).Class))='PAGEFRAME' + lcNume=lcPageframe+'.'+Alltrim(.Name)+'.'+Alltrim(Upper(.Objects(l).Name)) + citeste_pageframe(65,lcNume,lcKey) + Case Alltrim(Upper(.Objects(l).Class))='CW' And .Objects(l).nid_cw>0 + lcOptiune=.Objects(l).label_item1.Caption + lnPozitie=.Objects(l).nid_cw + copii(lnPozitie,1)=lcOptiune + copii(lnPozitie,2)=.Objects(l).ntip + copii(lnPozitie,3)=.Objects(l).cmeniu + k=k+1 + Endcase + Endfor + For l=1 To k-1 +*!* This.Nodes.Add(lcKey,4,lcKey+Padl(Alltrim(Str(l)),2,[0]),copii(l,1)) + If plCursor + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+Padl(Alltrim(Str(l)),2,[0]),4,copii(l,1),lcKey) + Endif +*!* If !Empty(copii(l,3)) +*!* This.adauga_meniuri(copii(l,3),copii(l,2),lcKey+Padl(Alltrim(Str(l)),2,[0])) +*!* Else + adauga_frunze(copii(l,2),lcKey+Padl(Alltrim(Str(l)),2,[0])) +*!* Endif + Endfor + Endwith + lnKey=lnKey+1 + Endfor +Endwith +Set Exact Off +Endproc +************************************************************************ +Procedure adauga_frunze +Lparameters lnTip,lcKey +Do Case +Case lnTip=0 && introducere +Case lnTip=1 && raport +*!* lcProp="cnt"+lcKey +*!* This.AddProperty(lcProp,0) +*!* This.Nodes.Add(lcKey,4,lcKey+"1","Export") +*!* This.Nodes.Add(lcKey,4,lcKey+"2","Listare") + If plCursor + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"1",4,"Export",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"2",4,"Listare",lcKey) + Endif +Case lnTip=2 && registru +*!* lcProp="cnt"+lcKey +*!* This.AddProperty(lcProp,0) +*!* This.Nodes.Add(lcKey,4,lcKey+"1","Export") +*!* This.Nodes.Add(lcKey,4,lcKey+"2","Listare") +*!* This.Nodes.Add(lcKey,4,lcKey+"3","Modificare") +*!* This.Nodes.Add(lcKey,4,lcKey+"4","Refacere") + If plCursor + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"1",4,"Export",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"2",4,"Listare",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"3",4,"Modificare",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"4",4,"Refacere",lcKey) + Endif +Case lnTip=3 && balanta\inreg. +*!* lcProp="cnt"+lcKey +*!* This.AddProperty(lcProp,0) +*!* This.Nodes.Add(lcKey,4,lcKey+"1","Export") +*!* This.Nodes.Add(lcKey,4,lcKey+"2","Listare") +*!* This.Nodes.Add(lcKey,4,lcKey+"3","Modificare") +*!* This.Nodes.Add(lcKey,4,lcKey+"4","Refacere") + If plCursor + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"1",4,"Export",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"2",4,"Listare",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"3",4,"Modificare",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"4",4,"Refacere",lcKey) + Endif +Case lnTip=4 && vizualizare +*!* lcProp="cnt"+lcKey +*!* This.AddProperty(lcProp,0) +*!* This.Nodes.Add(lcKey,4,lcKey+"1","Export") +*!* This.Nodes.Add(lcKey,4,lcKey+"2","Listare") +*!* This.Nodes.Add(lcKey,4,lcKey+"3","Modificare") +*!* This.Nodes.Add(lcKey,4,lcKey+"4","Stergere") +*!* This.Nodes.Add(lcKey,4,lcKey+"5","Vizualizare inreg. proprii") +*!* This.Nodes.Add(lcKey,4,lcKey+"6","Vizualizare toate inreg.") + If plCursor + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"1",4,"Export",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"2",4,"Listare",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"3",4,"Modificare",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"4",4,"Stergere",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"5",4,"Vizualizare inreg.proprii",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"6",4,"Vizualizare tot",lcKey) + ENDIF +Case lnTip=5 && personalizat +*!* lcProp="cnt"+lcKey +*!* This.AddProperty(lcProp,0) +*!* This.Nodes.Add(lcKey,4,lcKey+"1","Export") +*!* This.Nodes.Add(lcKey,4,lcKey+"2","Listare") +*!* This.Nodes.Add(lcKey,4,lcKey+"3","Modificare") +*!* This.Nodes.Add(lcKey,4,lcKey+"4","Stergere") +*!* This.Nodes.Add(lcKey,4,lcKey+"7","Altele...") +*!* This.Nodes.Add(lcKey,4,lcKey+"8","Altele...") + If plCursor + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"1",4,"Export",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"2",4,"Listare",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"3",4,"Modificare",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"4",4,"Stergere",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"7",4,"Altele...",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"8",4,"Altele...",lcKey) + Endif +Endcase +Endproc +************************************************************************ \ No newline at end of file diff --git a/COMUN/Drepturi utilizatori/ROALUCRARI/crsobiecte.dbf b/COMUN/Drepturi utilizatori/ROALUCRARI/crsobiecte.dbf new file mode 100644 index 0000000..a40b235 Binary files /dev/null and b/COMUN/Drepturi utilizatori/ROALUCRARI/crsobiecte.dbf differ diff --git a/COMUN/Drepturi utilizatori/ROALUCRARI/def_obiecte_ROALUCRARI.sql b/COMUN/Drepturi utilizatori/ROALUCRARI/def_obiecte_ROALUCRARI.sql new file mode 100644 index 0000000..b02270c --- /dev/null +++ b/COMUN/Drepturi utilizatori/ROALUCRARI/def_obiecte_ROALUCRARI.sql @@ -0,0 +1,97 @@ +prompt PL/SQL Developer import file +prompt Created on Monday, April 17, 2006 by marius.atanasiu +set feedback off +set define off +prompt Disabling triggers for DEF_OBIECTE... +alter table DEF_OBIECTE disable all triggers; +prompt Deleting DEF_OBIECTE... +update DEF_OBIECTE set sters=2 where id_program=13; +commit; +prompt Loading DEF_OBIECTE... +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5070, 13, 'Configurare', -1, 'A', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5071, 13, 'Capitole de deviz', 5070, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5072, 13, 'Vizualizare', 5071, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5073, 13, 'Modificare', 5071, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5074, 13, 'Stergere', 5071, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5075, 13, 'Clienti', 5070, '02', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5076, 13, 'Vizualizare', 5075, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5077, 13, 'Modificare', 5075, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5078, 13, 'Stergere', 5075, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5079, 13, 'Responsabili', 5070, '03', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5080, 13, 'Vizualizare', 5079, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5081, 13, 'Modificare', 5079, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5082, 13, 'Stergere', 5079, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5083, 13, 'Configurare capitole de deviz', 5070, '04', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5084, 13, 'Vizualizare', 5083, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5085, 13, 'Modificare', 5083, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5087, 13, 'Configurare chei de repartizare a indirectelor', 5070, '05', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5088, 13, 'Vizualizare', 5087, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5089, 13, 'Modificare', 5087, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5091, 13, 'Lucrari', -1, 'B', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5092, 13, 'Oferte', 5091, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5093, 13, 'Vizualizare', 5092, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5094, 13, 'Modificare', 5092, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5095, 13, 'Stergere', 5092, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5096, 13, 'Lucrari', 5091, '02', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5097, 13, 'Vizualizare', 5096, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5098, 13, 'Modificare', 5096, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5099, 13, 'Stergere', 5096, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5100, 13, 'Contracte', 5091, '03', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5101, 13, 'Vizualizare', 5100, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5102, 13, 'Modificare', 5100, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5103, 13, 'Stergere', 5100, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5104, 13, 'Analiza', -1, 'C', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5105, 13, 'O lucrare', 5104, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5106, 13, 'Toate lucrarile', 5104, '02', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5107, 13, 'Situatie comparativa Lista lucrari', 5104, '03', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5108, 13, 'O lucrare', 5104, '04', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5109, 13, 'Toate lucrarile', 5104, '05', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5110, 13, 'Situatie de post calcul pe societate', 5104, '06', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (5111, 13, 'Opis', 5104, '07', null, null, 0); +commit; +prompt 42 records loaded +prompt Enabling triggers for DEF_OBIECTE... +alter table DEF_OBIECTE enable all triggers; +set feedback on +set define on +prompt Done. diff --git a/COMUN/Drepturi utilizatori/ROALUCRARI/obiecte.dbf b/COMUN/Drepturi utilizatori/ROALUCRARI/obiecte.dbf new file mode 100644 index 0000000..6064559 Binary files /dev/null and b/COMUN/Drepturi utilizatori/ROALUCRARI/obiecte.dbf differ diff --git a/COMUN/Drepturi utilizatori/ROALUCRARI/scrie_obiecte.prg b/COMUN/Drepturi utilizatori/ROALUCRARI/scrie_obiecte.prg new file mode 100644 index 0000000..8da86f0 --- /dev/null +++ b/COMUN/Drepturi utilizatori/ROALUCRARI/scrie_obiecte.prg @@ -0,0 +1,62 @@ +&& id = 13 +lnIdProgram = 13 +lcLocalDir=Addbs(Justpath(Sys(16,0))) +Cd (lcLocalDir) +If Used('obiecte') + Use In obiecte +Endif +Use obiecte In 0 +gnhandle=SQLConnect('jcsserver','contafin_oracle','123') +If Used('crsmax') + Use In CrsMax +Endif +lcSql=[select pack_drepturi.getid_obiect() as maxid from dual] +lnSucces=SQLExec(gnhandle,lcSql,'crsmax') +If lnSucces<0 + Messagebox("Eroare la citirea id-ului!") + Exit +Endif +Select CrsMax +lnMaxId=maxid +Use In CrsMax +MESSAGEBOX(lnMaxId,0,"Id maxim pentru obiecte") + +Select obiecte +Replace id_prog With lnIdProgram All +Replace cod With Padl(Substr(Padl(Alltrim(cheie),5,[ ]),5,1),2,[0]) FOR TYPE(SUBSTR(ALLTRIM(cheie),LEN(ALLTRIM(cheie))-2))='N' +Replace cod With Padl(Substr(Padl(Alltrim(cheie),5,[ ]),4,2),2,[0]) FOR TYPE(SUBSTR(ALLTRIM(cheie),LEN(ALLTRIM(cheie))-2))<>'N' +Replace cod With Substr(cod,2,1) For !Inlist(Len(Alltrim(tata)),1,2) Or Type(Substr(cod,2,1))!='N' +Replace id_obiect With Recno()+lnMaxId All +Replace cheie With Alltrim(tata)+Alltrim(cod) All +Replace id_tata With -1 All +Select id_obiect,cheie From obiecte Where Alltrim(cheie) In (Select Distinct Alltrim(tata) As cheie From obiecte) Into Cursor crstati +Select crstati +Scan + lnIdObiect=id_obiect + lcCheie=Alltrim(cheie) + Select obiecte + Replace id_tata With lnIdObiect For Alltrim(tata)=lcCheie + Select crstati +Endscan +Use In crstati + +lcSql=[update def_obiecte set sters=2 where id_program=]+ALLTRIM(STR(lnIdProgram))+[ and sters=0] +lnSucces=SQLExec(gnhandle,lcSql) +If lnSucces<0 + Messagebox("Eroare la stergerea vechilor obiecte!") + Exit +Endif + +Select obiecte +Browse +Scan + lcSql=[insert into def_obiecte (id_obiect,id_program,id_tata,descriere,cod) ]+; + [values (]+Alltrim(Str(id_obiect))+[,]+ALLTRIM(STR(id_prog))+[,]+; + ALLTRIM(Str(id_tata))+[,']+Alltrim(explicatie)+[',']+Alltrim(cod)+[')] + lnSucces=SQLExec(gnhandle,lcSql) + If lnSucces<1 + Wait Window lcSql + Endif +Endscan +SQLDisconnect(gnhandle) +Use In obiecte \ No newline at end of file diff --git a/COMUN/Drepturi utilizatori/ROAMANAGER/adaugare_drepturi.prg b/COMUN/Drepturi utilizatori/ROAMANAGER/adaugare_drepturi.prg new file mode 100644 index 0000000..0c9f55b --- /dev/null +++ b/COMUN/Drepturi utilizatori/ROAMANAGER/adaugare_drepturi.prg @@ -0,0 +1,216 @@ +Procedure citeste_obiecte +Local lcMeniu,lcPageframe +lcMeniu=[manager] +lcPageframe=[oprinc.pagefr1] +Create Cursor CRSOBIECTE(ID_PROG N(1),CHEIE C(20),NIVEL N(2),EXPLICATIE C(100),TATA C(20),COD C(2),ID_OBIECT N(10),ID_TATA N(10)) +plCursor=.T. +citeste_meniu(90,lcmeniu,"Meniu") +citeste_pageframe(65,lcpageframe) +select * FROM crsobiecte INTO TABLE C:\crsobiecte.dbf +Endproc +************************************************************************ +Procedure citeste_meniu +Lparameters lnKey,lcNumeMeniu,lcOptiune +lcKey=Chr(lnKey) +*!* This.Nodes.Add(,1,lcKey,lcOptiune) +If plCursor + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey,1,lcOptiune,[ ]) +Endif +lnKey2=65 +k=0 +Try + lcKey2=lcKey+Chr(lnKey2) + lnKey2=lnKey2+1 + If plCursor + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey2,4,[Optiuni],lcKey) + Endif + For i=1 To Cntbar('optiuni') + lcOptiune=Prmbar('optiuni',i) + If !Empty(lcOptiune) + k=k+1 + If plCursor + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey2+Padl(Alltrim(Str(k)),2,[0]),4,lcOptiune,lcKey2) + Endif + Endif + Endfor +Catch +ENDTRY +k=0 +Try + lcKey2=lcKey+Chr(lnKey2) + lnKey2=lnKey2+1 +*!* This.Nodes.Add(lcKey,4,lcKey2,'Initializare') + If plCursor + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey2,4,[Vizualizare],lcKey) + Endif + For i=1 To Cntbar('vizualizar') + lcOptiune=Prmbar('vizualizar',i) + If !Empty(lcOptiune) + k=k+1 +*!* This.Nodes.Add(lcKey2,4,lcKey2+Padl(Alltrim(Str(k)),2,[0]),lcOptiune) + If plCursor + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey2+Padl(Alltrim(Str(k)),2,[0]),4,lcOptiune,lcKey2) + Endif + Endif + Endfor +Catch +Endtry +k=0 +Try + lcKey2=lcKey+Chr(lnKey2) +*!* This.Nodes.Add(lcKey,4,lcKey2,'Actualizari') + If plCursor + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey2,4,[Rapoarte generale],lcKey) + Endif + For i=1 To Cntbar('rapoartege') + lcOptiune=Prmbar('rapoartege',i) + If !Empty(lcOptiune) + k=k+1 +*!* This.Nodes.Add(lcKey2,4,lcKey2+Padl(Alltrim(Str(k)),2,[0]),lcOptiune) + If plCursor + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey2+Padl(Alltrim(Str(k)),2,[0]),4,lcOptiune,lcKey2) + Endif + Endif + Endfor +Catch +Endtry +************************************************************************ +Procedure citeste_pageframe +Lparameters lnKey,lcPageframe,lcTata +Local lcKey,lcProp,lcOptiune,lnNivel,lnPozitie,i,j,k,l +Store [] To lcKey,lcProp,lcOptiune +Store 0 To lnNivel,lnPozitie,i,j,k,l +If Empty(lcTata) + lcTata=Null + lnNivel=1 +Else + lnNivel=4 +Endif +Set Exact On +With &lcPageframe + For i=1 To .PageCount + For j=1 To .PageCount + If .Pages(j).PageOrder=i + Exit + Endif + Endfor + With .Pages(j) + lcKey=Nvl(lcTata,[])+Chr(lnKey) +*!* This.Nodes.Add(lcTata,lnNivel,lcKey,.Caption) + lcProp="cnt"+lcKey +*!* This.AddProperty(lcProp,0) + If plCursor + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey,lnNivel,.Caption,Nvl(lcTata,[ ])) + Endif + lcProp="cnt"+lcKey +*!* This.AddProperty(lcProp,0) + Dimension copii(128,3) + k=1 + For l=1 To .ControlCount + Do Case + Case Alltrim(Upper(.Objects(l).Class))='PAGEFRAME' + lcNume=lcPageframe+'.'+Alltrim(.Name)+'.'+Alltrim(Upper(.Objects(l).Name)) + citeste_pageframe(65,lcNume,lcKey) + Case Alltrim(Upper(.Objects(l).Class))='CW' And .Objects(l).nid_cw>0 + lcOptiune=.Objects(l).label_item1.Caption + lnPozitie=.Objects(l).nid_cw + copii(lnPozitie,1)=lcOptiune + copii(lnPozitie,2)=.Objects(l).ntip + copii(lnPozitie,3)=.Objects(l).cmeniu + k=k+1 + Endcase + Endfor + For l=1 To k-1 +*!* This.Nodes.Add(lcKey,4,lcKey+Padl(Alltrim(Str(l)),2,[0]),copii(l,1)) + If plCursor + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+Padl(Alltrim(Str(l)),2,[0]),4,copii(l,1),lcKey) + Endif +*!* If !Empty(copii(l,3)) +*!* This.adauga_meniuri(copii(l,3),copii(l,2),lcKey+Padl(Alltrim(Str(l)),2,[0])) +*!* Else + adauga_frunze(copii(l,2),lcKey+Padl(Alltrim(Str(l)),2,[0])) +*!* Endif + Endfor + Endwith + lnKey=lnKey+1 + Endfor +Endwith +Set Exact Off +Endproc +************************************************************************ +Procedure adauga_frunze +Lparameters lnTip,lcKey +Do Case +Case lnTip=0 && introducere +Case lnTip=1 && raport +*!* lcProp="cnt"+lcKey +*!* This.AddProperty(lcProp,0) +*!* This.Nodes.Add(lcKey,4,lcKey+"1","Export") +*!* This.Nodes.Add(lcKey,4,lcKey+"2","Listare") + If plCursor + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"1",4,"Export",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"2",4,"Listare",lcKey) + Endif +Case lnTip=2 && registru +*!* lcProp="cnt"+lcKey +*!* This.AddProperty(lcProp,0) +*!* This.Nodes.Add(lcKey,4,lcKey+"1","Export") +*!* This.Nodes.Add(lcKey,4,lcKey+"2","Listare") +*!* This.Nodes.Add(lcKey,4,lcKey+"3","Modificare") +*!* This.Nodes.Add(lcKey,4,lcKey+"4","Refacere") + If plCursor + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"1",4,"Export",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"2",4,"Listare",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"3",4,"Modificare",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"4",4,"Refacere",lcKey) + Endif +Case lnTip=3 && balanta\inreg. +*!* lcProp="cnt"+lcKey +*!* This.AddProperty(lcProp,0) +*!* This.Nodes.Add(lcKey,4,lcKey+"1","Export") +*!* This.Nodes.Add(lcKey,4,lcKey+"2","Listare") +*!* This.Nodes.Add(lcKey,4,lcKey+"3","Modificare") +*!* This.Nodes.Add(lcKey,4,lcKey+"4","Refacere") + If plCursor + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"1",4,"Export",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"2",4,"Listare",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"3",4,"Modificare",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"4",4,"Refacere",lcKey) + Endif +Case lnTip=4 && vizualizare +*!* lcProp="cnt"+lcKey +*!* This.AddProperty(lcProp,0) +*!* This.Nodes.Add(lcKey,4,lcKey+"1","Export") +*!* This.Nodes.Add(lcKey,4,lcKey+"2","Listare") +*!* This.Nodes.Add(lcKey,4,lcKey+"3","Modificare") +*!* This.Nodes.Add(lcKey,4,lcKey+"4","Stergere") +*!* This.Nodes.Add(lcKey,4,lcKey+"5","Vizualizare inreg. proprii") +*!* This.Nodes.Add(lcKey,4,lcKey+"6","Vizualizare toate inreg.") + If plCursor + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"1",4,"Export",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"2",4,"Listare",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"3",4,"Modificare",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"4",4,"Stergere",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"5",4,"Vizualizare inreg.proprii",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"6",4,"Vizualizare tot",lcKey) + ENDIF +Case lnTip=5 && personalizat +*!* lcProp="cnt"+lcKey +*!* This.AddProperty(lcProp,0) +*!* This.Nodes.Add(lcKey,4,lcKey+"1","Export") +*!* This.Nodes.Add(lcKey,4,lcKey+"2","Listare") +*!* This.Nodes.Add(lcKey,4,lcKey+"3","Modificare") +*!* This.Nodes.Add(lcKey,4,lcKey+"4","Stergere") +*!* This.Nodes.Add(lcKey,4,lcKey+"7","Altele...") +*!* This.Nodes.Add(lcKey,4,lcKey+"8","Altele...") + If plCursor + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"1",4,"Export",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"2",4,"Listare",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"3",4,"Modificare",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"4",4,"Stergere",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"7",4,"Altele...",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"8",4,"Altele...",lcKey) + Endif +Endcase +Endproc +************************************************************************ \ No newline at end of file diff --git a/COMUN/Drepturi utilizatori/ROAMANAGER/crsobiecte.dbf b/COMUN/Drepturi utilizatori/ROAMANAGER/crsobiecte.dbf new file mode 100644 index 0000000..a9db1d0 Binary files /dev/null and b/COMUN/Drepturi utilizatori/ROAMANAGER/crsobiecte.dbf differ diff --git a/COMUN/Drepturi utilizatori/ROAMANAGER/obiecte.dbf b/COMUN/Drepturi utilizatori/ROAMANAGER/obiecte.dbf new file mode 100644 index 0000000..3f11771 Binary files /dev/null and b/COMUN/Drepturi utilizatori/ROAMANAGER/obiecte.dbf differ diff --git a/COMUN/Drepturi utilizatori/ROAMANAGER/scrie_obiecte.prg b/COMUN/Drepturi utilizatori/ROAMANAGER/scrie_obiecte.prg new file mode 100644 index 0000000..6d0c8a4 --- /dev/null +++ b/COMUN/Drepturi utilizatori/ROAMANAGER/scrie_obiecte.prg @@ -0,0 +1,62 @@ +&& id = 7 +lnIdProgram = 7 +lcLocalDir=Addbs(Justpath(Sys(16,0))) +Cd (lcLocalDir) +If Used('obiecte') + Use In obiecte +Endif +Use obiecte In 0 +gnhandle=SQLConnect('jcsserver','contafin_oracle','123') +If Used('crsmax') + Use In CrsMax +Endif +lcSql=[select pack_drepturi.getid_obiect() as maxid from dual] +lnSucces=SQLExec(gnhandle,lcSql,'crsmax') +If lnSucces<0 + Messagebox("Eroare la citirea id-ului!") + Exit +Endif +Select CrsMax +lnMaxId=maxid +Use In CrsMax +MESSAGEBOX(lnMaxId,0,"Id maxim pentru obiecte") + +Select obiecte +Replace id_prog With lnIdProgram All +Replace cod With Padl(Substr(Padl(Alltrim(cheie),5,[ ]),5,1),2,[0]) FOR TYPE(SUBSTR(ALLTRIM(cheie),LEN(ALLTRIM(cheie))-2))='N' +Replace cod With Padl(Substr(Padl(Alltrim(cheie),5,[ ]),4,2),2,[0]) FOR TYPE(SUBSTR(ALLTRIM(cheie),LEN(ALLTRIM(cheie))-2))<>'N' +Replace cod With Substr(cod,2,1) For !Inlist(Len(Alltrim(tata)),1,2) Or Type(Substr(cod,2,1))!='N' +Replace id_obiect With Recno()+lnMaxId All +Replace cheie With Alltrim(tata)+Alltrim(cod) All +Replace id_tata With -1 All +Select id_obiect,cheie From obiecte Where Alltrim(cheie) In (Select Distinct Alltrim(tata) As cheie From obiecte) Into Cursor crstati +Select crstati +Scan + lnIdObiect=id_obiect + lcCheie=Alltrim(cheie) + Select obiecte + Replace id_tata With lnIdObiect For Alltrim(tata)=lcCheie + Select crstati +Endscan +Use In crstati + +lcSql=[update def_obiecte set sters=2 where id_program=]+ALLTRIM(STR(lnIdProgram))+[ and sters=0] +lnSucces=SQLExec(gnhandle,lcSql) +If lnSucces<0 + Messagebox("Eroare la stergerea vechilor obiecte!") + Exit +Endif + +Select obiecte +Browse +Scan + lcSql=[insert into def_obiecte (id_obiect,id_program,id_tata,descriere,cod) ]+; + [values (]+Alltrim(Str(id_obiect))+[,]+ALLTRIM(STR(id_prog))+[,]+; + ALLTRIM(Str(id_tata))+[,']+Alltrim(explicatie)+[',']+Alltrim(cod)+[')] + lnSucces=SQLExec(gnhandle,lcSql) + If lnSucces<1 + Wait Window lcSql + Endif +Endscan +SQLDisconnect(gnhandle) +Use In obiecte \ No newline at end of file diff --git a/COMUN/Drepturi utilizatori/def_obiecte_0311.sql b/COMUN/Drepturi utilizatori/def_obiecte_0311.sql new file mode 100644 index 0000000..dbcd090 --- /dev/null +++ b/COMUN/Drepturi utilizatori/def_obiecte_0311.sql @@ -0,0 +1,1134 @@ +prompt PL/SQL Developer import file +prompt Created on Thursday, October 27, 2005 by marius.atanasiu +set feedback off +set define off +prompt Disabling triggers for DEF_OBIECTE... +alter table DEF_OBIECTE disable all triggers; +prompt Disabling foreign key constraints for DEF_OBIECTE... +alter table DEF_OBIECTE disable constraint FK_DO01; +alter table DEF_OBIECTE disable constraint FK_DO02; +prompt Loading DEF_OBIECTE... +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2809, 8, 'Mecanici', 2807, '02', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2810, 8, 'Sectii', 2807, '03', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2811, 8, 'Asiguratori', 2807, '04', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2812, 8, 'Marci masini', 2807, '05', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2813, 8, 'Dealeri', 2807, '06', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2814, 8, 'Responsabili', 2807, '07', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2815, 8, 'Delegati', 2807, '08', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2816, 8, 'Norme', 2807, '09', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2817, 8, 'Preturi', 2807, '10', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2818, 8, 'Optiuni', 2807, '11', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2819, 8, 'Comenzi', -1, 'B', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2820, 8, 'Generare', 2819, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2821, 8, 'Normare', 2819, '02', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2822, 8, 'Validare', 2819, '03', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2823, 8, 'Vizualizare stocuri', 2819, '04', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2824, 8, 'Comenzi in luna curenta', 2819, '05', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2825, 8, 'Istoric comenzi', 2819, '06', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2826, 8, 'Rapoarte', 2819, '07', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2827, 8, 'Export', 2826, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2828, 8, 'Listare', 2826, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2829, 8, 'Facturare', -1, 'C', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2830, 8, 'Factura deviz', 2829, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2831, 8, 'Factura ITP', 2829, '02', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2832, 8, 'Factura spalare auto', 2829, '03', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2833, 8, 'Factura diverse', 2829, '04', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2834, 8, 'Facturi in luna curenta', 2829, '05', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2835, 8, 'Rapoarte', 2829, '06', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2836, 8, 'Export', 2835, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2837, 8, 'Listare', 2835, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2838, 8, 'Manopera', -1, 'D', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2839, 8, 'Manopera in luna curenta', 2838, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2840, 8, 'Manopera comenzi inchise', 2838, '02', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2841, 8, 'Raport de salarizare', 2838, '03', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2842, 8, 'Rapoarte', 2838, '04', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2843, 8, 'Ore de manopera pe asiguratori', 2838, '05', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2844, 8, 'Manopera pe tehnicieni', 2838, '06', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2845, 8, 'Analiza', -1, 'E', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2846, 8, 'Verificare venituri', 2845, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2847, 8, 'Productie neterminata', 2845, '02', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2851, 8, 'Modificare date clienti', 2808, '7', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2852, 8, 'Modificare nr. telefon', 2808, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2807, 8, 'Configurare', -1, 'A', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2808, 8, 'Clienti', 2807, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2523, 2, 'Initializare', 2513, 'A', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2526, 2, 'Deschidere de luna noua', 2523, '01', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2527, 2, 'Redeschidere de luna', 2523, '02', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2534, 2, 'Plan conturi', 2523, '03', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2535, 2, 'Entitati', 2523, '04', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2536, 2, 'Balante Parteneri', 2523, '05', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2539, 2, 'Actualizari', 2513, 'B', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2543, 2, 'Initializare facturi/solduri', 2539, '01', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2548, 2, 'Verificare Globala', 2539, '02', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2549, 2, '*', -1, 'A', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2550, 2, 'Note fara predefinire', 2549, '01', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2551, 2, 'Note de inchidere', 2549, '02', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2552, 2, 'Balanta', 2549, '03', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2553, 2, 'Export', 2552, '1', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2554, 2, 'Listare', 2552, '2', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2555, 2, 'Modificare', 2552, '3', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2556, 2, 'Refacere', 2552, '4', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2557, 2, 'Registrul Jurnal', 2549, '04', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2558, 2, 'Export', 2557, '1', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2559, 2, 'Listare', 2557, '2', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2560, 2, 'Modificare', 2557, '3', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2561, 2, 'Stergere', 2557, '4', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2562, 2, 'Vizualizare inreg.proprii', 2557, '5', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2563, 2, 'Vizualizare tot', 2557, '6', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2564, 2, 'Situatii contabile', 2549, '05', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2565, 2, 'Export', 2564, '1', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2566, 2, 'Listare', 2564, '2', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2567, 2, 'Rapoarte', 2549, '06', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2568, 2, 'Export', 2567, '1', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2569, 2, 'Listare', 2567, '2', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2570, 2, 'Capitaluri', -1, 'B', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2571, 2, 'Capital social', 2570, '01', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2572, 2, 'Rezerve reevaluare', 2570, '02', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2573, 2, 'Rezerve', 2570, '03', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2574, 2, 'Rezerve de conversie', 2570, '04', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2575, 2, 'Profit si pierdere', 2570, '05', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2576, 2, 'Repartizarea profitului', 2570, '06', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2577, 2, 'Imprumuturi', 2570, '07', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2578, 2, 'Imobilizari', -1, 'C', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2579, 2, 'Necorporale', 2578, '01', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2580, 2, 'Corporale', 2578, '02', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2581, 2, 'Financiare', 2578, '03', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2582, 2, 'In curs', 2578, '04', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2583, 2, 'Leasing', 2578, '05', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2584, 2, 'Rate', 2578, '06', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2585, 2, 'Terti', -1, 'D', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2586, 2, 'Furnizori', 2585, 'A', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2587, 2, 'Furnizori', 2586, '01', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2588, 2, 'Furnizori de imobilizari', 2586, '02', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2589, 2, 'Facturi nesosite', 2586, '03', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2590, 2, 'Efecte de platit', 2586, '04', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2591, 2, 'Regularizari', 2586, '05', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2592, 2, 'Registrul de cumparari', 2586, '06', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2593, 2, 'Export', 2592, '1', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2594, 2, 'Listare', 2592, '2', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2595, 2, 'Modificare', 2592, '3', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +commit; +prompt 100 records committed... +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2596, 2, 'Refacere', 2592, '4', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2597, 2, 'Balante de furnizori', 2586, '07', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2598, 2, 'Export', 2597, '1', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2599, 2, 'Listare', 2597, '2', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2600, 2, 'Modificare', 2597, '3', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2601, 2, 'Refacere', 2597, '4', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2602, 2, 'Situatii analitice si operative', 2586, '08', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2603, 2, 'Export', 2602, '1', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2604, 2, 'Listare', 2602, '2', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2605, 2, 'Modificare', 2602, '3', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2606, 2, 'Refacere', 2602, '4', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2607, 2, 'Rapoarte', 2586, '09', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2608, 2, 'Export', 2607, '1', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2609, 2, 'Listare', 2607, '2', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2610, 2, 'Clienti', 2585, 'B', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2611, 2, 'Clienti', 2610, '01', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2612, 2, 'Clienti incerti', 2610, '02', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2613, 2, 'Facturi neintocmite', 2610, '03', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2614, 2, 'Efecte de primit', 2610, '04', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2615, 2, 'Regularizari', 2610, '05', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2616, 2, 'Registrul de vanzari', 2610, '06', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2617, 2, 'Export', 2616, '1', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2618, 2, 'Listare', 2616, '2', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2619, 2, 'Modificare', 2616, '3', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2620, 2, 'Refacere', 2616, '4', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2621, 2, 'Balante de clienti', 2610, '07', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2622, 2, 'Export', 2621, '1', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2623, 2, 'Listare', 2621, '2', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2624, 2, 'Modificare', 2621, '3', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2625, 2, 'Refacere', 2621, '4', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2626, 2, 'Situatii analitice si operative', 2610, '08', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2627, 2, 'Export', 2626, '1', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2628, 2, 'Listare', 2626, '2', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2629, 2, 'Modificare', 2626, '3', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2630, 2, 'Refacere', 2626, '4', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2631, 2, 'Rapoarte', 2610, '09', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2632, 2, 'Export', 2631, '1', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2633, 2, 'Listare', 2631, '2', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2634, 2, 'Alti', 2585, 'C', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2635, 2, 'Decontari in cadrul grupului', 2634, '01', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2636, 2, 'Plata dividende', 2634, '02', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2637, 2, 'Drepturi de personal neridicate', 2634, '03', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2638, 2, 'Debitori', 2634, '04', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2639, 2, 'Export', 2638, '1', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2640, 2, 'Listare', 2638, '2', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2641, 2, 'Modificare', 2638, '3', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2642, 2, 'Refacere', 2638, '4', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2643, 2, 'Creditori', 2634, '05', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2644, 2, 'Export', 2643, '1', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2645, 2, 'Listare', 2643, '2', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2646, 2, 'Modificare', 2643, '3', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2647, 2, 'Refacere', 2643, '4', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2648, 2, 'Dividende', 2634, '06', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2649, 2, 'Export', 2648, '1', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2650, 2, 'Listare', 2648, '2', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2651, 2, 'Modificare', 2648, '3', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2652, 2, 'Refacere', 2648, '4', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2653, 2, 'Cheltuieli in avans', 2634, '07', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2654, 2, 'Export', 2653, '1', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2655, 2, 'Listare', 2653, '2', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2656, 2, 'Modificare', 2653, '3', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2657, 2, 'Refacere', 2653, '4', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2658, 2, 'Venituri in avans', 2634, '08', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2659, 2, 'Export', 2658, '1', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2660, 2, 'Listare', 2658, '2', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2661, 2, 'Modificare', 2658, '3', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2662, 2, 'Refacere', 2658, '4', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2663, 2, 'Actionari', 2634, '09', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2664, 2, 'Export', 2663, '1', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2665, 2, 'Listare', 2663, '2', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2666, 2, 'Modificare', 2663, '3', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2667, 2, 'Refacere', 2663, '4', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2668, 2, 'Balanta Parteneri', 2634, '10', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2669, 2, 'Export', 2668, '1', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2670, 2, 'Listare', 2668, '2', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2671, 2, 'Modificare', 2668, '3', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2672, 2, 'Refacere', 2668, '4', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2673, 2, 'Balanta Parteneri Cumulata', 2634, '11', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2674, 2, 'Export', 2673, '1', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2675, 2, 'Listare', 2673, '2', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2676, 2, 'Modificare', 2673, '3', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2677, 2, 'Refacere', 2673, '4', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2678, 2, 'Rapoarte', 2634, '12', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2679, 2, 'Export', 2678, '1', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2680, 2, 'Listare', 2678, '2', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2681, 2, 'Trezorerie', -1, 'E', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2682, 2, 'Casa', 2681, 'A', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2683, 2, 'Casa incasari', 2682, '01', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2684, 2, 'Casa plati', 2682, '02', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2685, 2, 'Casa in valuta', 2682, '03', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2686, 2, 'Registrul de casa', 2682, '04', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2687, 2, 'Export', 2686, '1', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2688, 2, 'Listare', 2686, '2', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2689, 2, 'Modificare', 2686, '3', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2690, 2, 'Refacere', 2686, '4', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2691, 2, 'Solduri case', 2682, '05', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2692, 2, 'Export', 2691, '1', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2693, 2, 'Listare', 2691, '2', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2694, 2, 'Modificare', 2691, '3', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2695, 2, 'Refacere', 2691, '4', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +commit; +prompt 200 records committed... +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2696, 2, 'Reg.de casa in valuta', 2682, '06', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2697, 2, 'Export', 2696, '1', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2698, 2, 'Listare', 2696, '2', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2699, 2, 'Modificare', 2696, '3', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2700, 2, 'Refacere', 2696, '4', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2701, 2, 'Solduri case in valuta', 2682, '07', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2702, 2, 'Export', 2701, '1', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2703, 2, 'Listare', 2701, '2', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2704, 2, 'Modificare', 2701, '3', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2705, 2, 'Refacere', 2701, '4', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2706, 2, 'Rapoarte', 2682, '08', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2707, 2, 'Export', 2706, '1', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2708, 2, 'Listare', 2706, '2', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2709, 2, 'Banca', 2681, 'B', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2710, 2, 'Banca incasari', 2709, '01', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2711, 2, 'Banca plati', 2709, '02', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2712, 2, 'Banca in valuta', 2709, '03', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2713, 2, 'Registrul de banca', 2709, '04', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2714, 2, 'Export', 2713, '1', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2715, 2, 'Listare', 2713, '2', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2716, 2, 'Modificare', 2713, '3', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2717, 2, 'Refacere', 2713, '4', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2718, 2, 'Solduri banci', 2709, '05', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2719, 2, 'Export', 2718, '1', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2720, 2, 'Listare', 2718, '2', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2721, 2, 'Modificare', 2718, '3', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2722, 2, 'Refacere', 2718, '4', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2513, 2, 'Meniu', -1, 'Z', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2723, 2, 'Reg.de banca in valuta', 2709, '06', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2848, 8, 'Modificare tip comanda', 2821, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2849, 8, 'Stergere comanda', 2821, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2724, 2, 'Export', 2723, '1', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2725, 2, 'Listare', 2723, '2', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2726, 2, 'Modificare', 2723, '3', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2727, 2, 'Refacere', 2723, '4', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2728, 2, 'Solduri banci in valuta', 2709, '07', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2729, 2, 'Export', 2728, '1', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2730, 2, 'Listare', 2728, '2', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2731, 2, 'Modificare', 2728, '3', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2732, 2, 'Refacere', 2728, '4', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2733, 2, 'Rapoarte', 2709, '08', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2734, 2, 'Export', 2733, '1', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2735, 2, 'Listare', 2733, '2', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2736, 2, 'Alte', 2681, 'C', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2737, 2, 'Avansuri de trezorerie', 2736, '01', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2738, 2, 'Avansuri de trezorerie in valuta', 2736, '02', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2739, 2, 'Operatiuni cu cec', 2736, '03', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2740, 2, 'Alte operatiuni', 2736, '04', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2741, 2, 'Achizitori', 2736, '05', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2742, 2, 'Export', 2741, '1', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2743, 2, 'Listare', 2741, '2', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2744, 2, 'Modificare', 2741, '3', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2745, 2, 'Refacere', 2741, '4', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2746, 2, 'Cec - Reg. operatiuni', 2736, '06', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2747, 2, 'Export', 2746, '1', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2748, 2, 'Listare', 2746, '2', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2749, 2, 'Modificare', 2746, '3', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2750, 2, 'Refacere', 2746, '4', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2751, 2, 'Cec - Solduri', 2736, '07', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2752, 2, 'Export', 2751, '1', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2753, 2, 'Listare', 2751, '2', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2754, 2, 'Modificare', 2751, '3', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2755, 2, 'Refacere', 2751, '4', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2756, 2, 'Rapoarte', 2736, '08', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2757, 2, 'Export', 2756, '1', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2758, 2, 'Listare', 2756, '2', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2759, 2, 'Cheltuieli', -1, 'F', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2760, 2, 'Cheltuieli materiale', 2759, '01', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2761, 2, 'Alte cheltuieli', 2759, '02', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2762, 2, 'Venituri', -1, 'G', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2763, 2, 'Inregistrare venituri', 2762, '01', 3, to_date('12-10-2005 12:07:47', 'dd-mm-yyyy hh24:mi:ss'), 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (2850, 8, 'Normare comanda', 2821, '7', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3361, 4, 'Structura personalului', 3360, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3362, 4, 'Migratia personalului', 3360, '02', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3363, 4, 'Salariul mediu', 3360, '03', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3365, 5, 'Meniu', -1, 'Z', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3366, 5, 'Actualizare', 3365, 'A', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3367, 5, 'Initializare', 3366, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3368, 5, 'Recalculare', 3366, '02', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3369, 5, 'Gestiuni', -1, 'A', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3370, 5, 'Inregistrari', 3369, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3371, 5, 'Configurare', 3369, '02', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3372, 5, 'Export', 3371, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3373, 5, 'Listare', 3371, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3374, 5, 'Modificare', 3371, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3375, 5, 'Refacere', 3371, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3376, 5, 'Vizualizare', 3369, '03', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3377, 5, 'Export', 3376, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3378, 5, 'Listare', 3376, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3379, 5, 'Modificare', 3376, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3380, 5, 'Stergere', 3376, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3381, 5, 'Vizualizare inreg.proprii', 3376, '5', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3382, 5, 'Vizualizare tot', 3376, '6', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3383, 5, 'Rapoarte generale', 3369, '04', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3384, 5, 'Export', 3383, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3385, 5, 'Listare', 3383, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3386, 5, 'Registru Jurnal', 3369, '05', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3387, 5, 'Export', 3386, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3388, 5, 'Listare', 3386, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3389, 5, 'Modificare', 3386, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3390, 5, 'Stergere', 3386, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3391, 5, 'Vizualizare inreg.proprii', 3386, '5', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3392, 5, 'Vizualizare tot', 3386, '6', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3393, 5, 'Materii Prime si Materiale', -1, 'B', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3394, 5, 'Achizitie', 3393, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3395, 5, 'Achizitie din Import', 3393, '02', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3396, 5, 'Consum', 3393, '03', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3397, 5, 'Transfer', 3393, '04', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3398, 5, 'Vanzare', 3393, '05', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3399, 5, 'Stocuri materiale', 3393, '06', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3400, 5, 'Export', 3399, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3401, 5, 'Listare', 3399, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3402, 5, 'Modificare', 3399, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3403, 5, 'Refacere', 3399, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3404, 5, 'Rapoarte', 3393, '07', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3405, 5, 'Export', 3404, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3406, 5, 'Listare', 3404, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3407, 5, 'Obiecte de Inventar', -1, 'C', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3408, 5, 'Achizitie', 3407, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3409, 5, 'Consum', 3407, '02', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3410, 5, 'Transfer', 3407, '03', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3411, 5, 'Rulaje ob. de inventar in folosinta (8039)', 3407, '04', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3412, 5, 'Export', 3411, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3413, 5, 'Listare', 3411, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3414, 5, 'Modificare', 3411, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3415, 5, 'Refacere', 3411, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3416, 5, 'Obiecte de inventar in folosinta (8039)', 3407, '05', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3417, 5, 'Export', 3416, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3418, 5, 'Listare', 3416, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3419, 5, 'Modificare', 3416, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3420, 5, 'Refacere', 3416, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3421, 5, 'Obiecte de inventar in stoc / magazie (303)', 3407, '06', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3422, 5, 'Export', 3421, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3423, 5, 'Listare', 3421, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3424, 5, 'Modificare', 3421, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3425, 5, 'Refacere', 3421, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3426, 5, 'Rapoarte', 3407, '07', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3427, 5, 'Export', 3426, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3428, 5, 'Listare', 3426, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3429, 5, 'Produse', -1, 'D', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3430, 5, 'Achizitie', 3429, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3431, 5, 'Intrare in gestiune', 3429, '02', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3432, 5, 'Consum', 3429, '03', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3433, 5, 'Transfer', 3429, '04', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3434, 5, 'Vanzare', 3429, '05', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3435, 5, 'Configurare', 3429, '06', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3436, 5, 'Export', 3435, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3437, 5, 'Listare', 3435, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3438, 5, 'Modificare', 3435, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3439, 5, 'Refacere', 3435, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3440, 5, 'Stocuri produse', 3429, '07', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3441, 5, 'Export', 3440, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3442, 5, 'Listare', 3440, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3443, 5, 'Modificare', 3440, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3444, 5, 'Refacere', 3440, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3445, 5, 'Rapoarte', 3429, '08', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3446, 5, 'Export', 3445, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3447, 5, 'Listare', 3445, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3448, 5, 'Marfuri la pret de achizitie', -1, 'E', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3449, 5, 'Achizitie', 3448, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3450, 5, 'Achizitie din Import', 3448, '02', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3451, 5, 'Consum', 3448, '03', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3452, 5, 'Transfer', 3448, '04', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3453, 5, 'Vanzare', 3448, '05', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3454, 5, 'Stocuri marfa', 3448, '06', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3455, 5, 'Export', 3454, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3456, 5, 'Listare', 3454, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3457, 5, 'Modificare', 3454, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3458, 5, 'Refacere', 3454, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3459, 5, 'Rapoarte', 3448, '07', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3460, 5, 'Export', 3459, '1', null, null, 0); +commit; +prompt 100 records committed... +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3461, 5, 'Listare', 3459, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3462, 5, 'Marfuri la pret de vanzare', -1, 'F', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3463, 5, 'Achizitie', 3462, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3464, 5, 'Transfer', 3462, '02', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3465, 5, 'Vanzare', 3462, '03', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3466, 5, 'Configurare', 3462, '04', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3467, 5, 'Stocuri marfa', 3462, '05', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3468, 5, 'Export', 3467, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3469, 5, 'Listare', 3467, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3470, 5, 'Modificare', 3467, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3471, 5, 'Refacere', 3467, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3472, 5, 'Rapoarte', 3462, '06', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3473, 5, 'Export', 3472, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3474, 5, 'Listare', 3472, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3475, 5, 'Casa de marcat', 3462, '07', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3477, 7, 'Meniu', -1, 'Z', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3478, 7, 'Optiuni', 3477, 'A', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3479, 7, 'Optiuni', 3478, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3480, 7, 'Vizualizare', 3477, 'B', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3481, 7, 'Balanta', 3480, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3482, 7, 'Registru Jurnal', 3480, '02', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3483, 7, 'Rapoarte generale', 3477, 'C', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3484, 7, 'Vizualizare seturi de indicatori', 3483, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3485, 7, 'Definire set nou de indicatori', 3483, '02', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3486, 7, 'Pregatire pentru prezentare', 3483, '03', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3487, 7, 'Seturi predefinite', 3483, '04', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3488, 7, 'Rapoarte generale', -1, 'A', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3489, 7, 'Centre de cost', -1, 'B', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3490, 7, 'Raport de eficienta', 3489, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3491, 7, 'Export', 3490, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3492, 7, 'Listare', 3490, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3493, 7, 'Balanta pe centru', 3489, '02', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3494, 7, 'Export', 3493, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3495, 7, 'Listare', 3493, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3496, 7, 'Lucrari/Contracte', -1, 'C', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3497, 7, 'Raport de eficienta', 3496, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3498, 7, 'Export', 3497, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3499, 7, 'Listare', 3497, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3500, 7, 'Raport materiale Cantitativ-valoric', 3496, '02', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3501, 7, 'Export', 3500, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3502, 7, 'Listare', 3500, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3503, 7, 'Total cheltuieli directe grupate pe tipuri', 3496, '03', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3504, 7, 'Export', 3503, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3505, 7, 'Listare', 3503, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3506, 7, 'Cheltuieli directe Lista documentelor grupate dupa tipul de cheltuiala', 3496, '04', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3507, 7, 'Export', 3506, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3508, 7, 'Listare', 3506, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3509, 7, 'Venituri/Cheltuieli directe Lista documentelor in ordine cronologica', 3496, '05', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3510, 7, 'Export', 3509, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3511, 7, 'Listare', 3509, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3512, 7, 'Facturat / Incasat', 3496, '06', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3513, 7, 'Export', 3512, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3514, 7, 'Listare', 3512, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3515, 7, 'Bugete', -1, 'D', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3516, 7, 'Previzionare', 3515, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3517, 7, 'Export', 3516, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3518, 7, 'Listare', 3516, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3519, 7, 'Comparatie previzionat - realizat', 3515, '02', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3520, 7, 'Export', 3519, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3521, 7, 'Listare', 3519, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3522, 7, 'Evaluarea in valuta', -1, 'E', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3523, 7, 'Balanta', 3522, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3524, 7, 'Export', 3523, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3525, 7, 'Listare', 3523, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3526, 7, 'Registru Jurnal', 3522, '02', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3527, 7, 'Export', 3526, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3528, 7, 'Listare', 3526, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3529, 7, 'Terti', 3522, '03', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3530, 7, 'Export', 3529, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3531, 7, 'Listare', 3529, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3532, 7, 'Fluxul de trezorerie', -1, 'F', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3533, 7, 'Calcul Flux de trezorerie', 3532, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3534, 7, 'Formule Flux de trezorerie', 3532, '02', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3535, 7, 'Rapoarte', 3488, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3536, 9, 'Lucrari', 3322, '02', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3538, 9, 'Modificare', 3536, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3542, 9, 'Stergere', 3536, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3322, 9, 'Configurare', -1, 'A', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3323, 9, 'Calcul tarifar/ ora', 3322, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3324, 9, 'Pontare', -1, 'B', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3007, 3, 'Export', 3006, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3005, 3, 'Configurare', -1, 'A', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3006, 3, 'Calcul sporuri', 3005, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3008, 3, 'Listare', 3006, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3009, 3, 'Modificare', 3006, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3010, 3, 'Stergere', 3006, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3011, 3, 'Vizualizare inreg.proprii', 3006, '5', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3012, 3, 'Vizualizare tot', 3006, '6', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3013, 3, 'Calcul popriri', 3005, '02', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3014, 3, 'Export', 3013, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3015, 3, 'Listare', 3013, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3016, 3, 'Modificare', 3013, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3017, 3, 'Stergere', 3013, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3018, 3, 'Vizualizare inreg.proprii', 3013, '5', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3019, 3, 'Vizualizare tot', 3013, '6', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3020, 3, 'Calcul salariu', 3005, '03', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3021, 3, 'Calcul centralizator', 3005, '04', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3022, 3, 'Nota de inchidere', 3005, '05', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3023, 3, 'Configurare rapoarte', 3005, '06', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3024, 3, 'State', -1, 'B', null, null, 0); +commit; +prompt 200 records committed... +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3025, 3, 'Evidenta personal', 3024, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3026, 3, 'Introducere avansuri', 3024, '02', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3027, 3, 'Export', 3026, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3028, 3, 'Sporuri', 3024, '03', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3029, 3, 'Export', 3028, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3030, 3, 'Listare', 3028, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3031, 3, 'Modificare', 3028, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3032, 3, 'Popriri', 3024, '04', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3033, 3, 'Export', 3032, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3034, 3, 'Listare', 3032, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3035, 3, 'Modificare', 3032, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3036, 3, 'Prime', 3024, '05', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3037, 3, 'Export', 3036, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3038, 3, 'Calcul state', 3024, '06', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3039, 3, 'Export', 3038, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3040, 3, 'Rapoarte', 3024, '07', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3041, 3, 'Concedii', -1, 'C', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3042, 3, 'Concedii de odihna', 3041, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3043, 3, 'Export', 3042, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3044, 3, 'Listare', 3042, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3045, 3, 'Modificare', 3042, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3046, 3, 'Refacere', 3042, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3047, 3, 'Avansuri CO', 3041, '02', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3048, 3, 'Export', 3047, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3049, 3, 'Listare', 3047, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3050, 3, 'Modificare', 3047, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3051, 3, 'Refacere', 3047, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3052, 3, 'Concedii medicale', 3041, '03', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3053, 3, 'Export', 3052, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3054, 3, 'Listare', 3052, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3055, 3, 'Modificare', 3052, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3056, 3, 'Refacere', 3052, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3057, 3, 'Rapoarte', 3041, '04', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3058, 3, 'Export', 3057, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3059, 3, 'Listare', 3057, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3060, 3, 'Modificare', 3057, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3061, 3, 'Stergere', 3057, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3062, 3, 'Vizualizare inreg.proprii', 3057, '5', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3063, 3, 'Vizualizare tot', 3057, '6', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3064, 3, 'Analize', -1, 'D', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3065, 3, 'Borderou plati salarii', 3064, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3066, 3, 'Vizualizare state', 3064, '02', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3067, 3, 'Export', 3066, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3068, 3, 'Rapoarte', 3064, '03', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3069, 3, 'Nota de inchidere', 3064, '04', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3070, 3, 'Deschidere de luna', 3064, '05', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3325, 9, 'Pontare pe zile', 3324, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3326, 9, 'Pontare pe lucrari', 3324, '02', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3327, 9, 'Foaia de lucru', 3324, '03', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3328, 9, 'Modificare', 3327, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3329, 9, 'Rapoarte', 3324, '04', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3331, 4, 'Personal', -1, 'A', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3332, 4, 'Adaugare/modificare', 3331, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3333, 4, 'Listare', 3332, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3334, 4, 'Modificare', 3332, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3335, 4, 'Familie', 3331, '02', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3336, 4, 'Listare', 3335, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3337, 4, 'Modificare', 3335, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3338, 4, 'Calificare', 3331, '03', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3339, 4, 'Listare', 3338, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3340, 4, 'Modificare', 3338, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3341, 4, 'Scolarizare', 3331, '04', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3342, 4, 'Listare', 3341, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3343, 4, 'Modificare', 3341, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3344, 4, 'Vechimi', 3331, '05', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3345, 4, 'Listare', 3344, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3346, 4, 'Modificare', 3344, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3347, 4, 'Plecari din unitate', 3331, '06', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3348, 4, 'Rapoarte', 3331, '07', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3349, 4, 'Contracte de munca', -1, 'B', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3350, 4, 'Configurare contract', 3349, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3351, 4, 'Listare', 3350, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3352, 4, 'Modificare', 3350, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3353, 4, 'Listare contract', 3349, '02', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3354, 4, 'Concedii de odihna', -1, 'C', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3355, 4, 'Planificari CO', 3354, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3356, 4, 'Listare', 3355, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3357, 4, 'Modificare', 3355, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3358, 4, 'Sit CO cuvenite', 3354, '02', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3359, 4, 'Rapoarte', 3354, '03', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3360, 4, 'Rapoarte de analiza', -1, 'D', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3544, 2, 'Note contabile', 2523, '06', null, null, 0); +commit; +commit; +delete from def_obiecte where id_obiect in (2827,2828,2836,2837); +prompt 552 records loaded +prompt Enabling foreign key constraints for DEF_OBIECTE... +alter table DEF_OBIECTE enable constraint FK_DO01; +alter table DEF_OBIECTE enable constraint FK_DO02; +prompt Enabling triggers for DEF_OBIECTE... +alter table DEF_OBIECTE enable all triggers; +set feedback on +set define on +prompt Done. diff --git a/COMUN/Drepturi utilizatori/def_obiecte_completare_0311.sql b/COMUN/Drepturi utilizatori/def_obiecte_completare_0311.sql new file mode 100644 index 0000000..a3d4884 --- /dev/null +++ b/COMUN/Drepturi utilizatori/def_obiecte_completare_0311.sql @@ -0,0 +1,586 @@ +prompt PL/SQL Developer import file +prompt Created on Thursday, November 03, 2005 by marius.atanasiu +set feedback off +set define off +prompt Disabling triggers for DEF_OBIECTE... +alter table DEF_OBIECTE disable all triggers; +prompt Disabling foreign key constraints for DEF_OBIECTE... +alter table DEF_OBIECTE disable constraint FK_DO01; +alter table DEF_OBIECTE disable constraint FK_DO02; +prompt Loading DEF_OBIECTE... +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3361, 4, 'Structura personalului', 3360, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3362, 4, 'Migratia personalului', 3360, '02', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3363, 4, 'Salariul mediu', 3360, '03', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3365, 5, 'Meniu', -1, 'Z', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3366, 5, 'Actualizare', 3365, 'A', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3367, 5, 'Initializare', 3366, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3368, 5, 'Recalculare', 3366, '02', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3369, 5, 'Gestiuni', -1, 'A', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3370, 5, 'Inregistrari', 3369, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3371, 5, 'Configurare', 3369, '02', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3372, 5, 'Export', 3371, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3373, 5, 'Listare', 3371, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3374, 5, 'Modificare', 3371, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3375, 5, 'Refacere', 3371, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3376, 5, 'Vizualizare', 3369, '03', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3377, 5, 'Export', 3376, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3378, 5, 'Listare', 3376, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3379, 5, 'Modificare', 3376, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3380, 5, 'Stergere', 3376, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3381, 5, 'Vizualizare inreg.proprii', 3376, '5', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3382, 5, 'Vizualizare tot', 3376, '6', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3383, 5, 'Rapoarte generale', 3369, '04', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3384, 5, 'Export', 3383, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3385, 5, 'Listare', 3383, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3386, 5, 'Registru Jurnal', 3369, '05', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3387, 5, 'Export', 3386, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3388, 5, 'Listare', 3386, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3389, 5, 'Modificare', 3386, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3390, 5, 'Stergere', 3386, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3391, 5, 'Vizualizare inreg.proprii', 3386, '5', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3392, 5, 'Vizualizare tot', 3386, '6', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3393, 5, 'Materii Prime si Materiale', -1, 'B', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3394, 5, 'Achizitie', 3393, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3395, 5, 'Achizitie din Import', 3393, '02', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3396, 5, 'Consum', 3393, '03', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3397, 5, 'Transfer', 3393, '04', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3398, 5, 'Vanzare', 3393, '05', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3399, 5, 'Stocuri materiale', 3393, '06', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3400, 5, 'Export', 3399, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3401, 5, 'Listare', 3399, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3402, 5, 'Modificare', 3399, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3403, 5, 'Refacere', 3399, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3404, 5, 'Rapoarte', 3393, '07', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3405, 5, 'Export', 3404, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3406, 5, 'Listare', 3404, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3407, 5, 'Obiecte de Inventar', -1, 'C', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3408, 5, 'Achizitie', 3407, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3409, 5, 'Consum', 3407, '02', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3410, 5, 'Transfer', 3407, '03', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3411, 5, 'Rulaje ob. de inventar in folosinta (8039)', 3407, '04', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3412, 5, 'Export', 3411, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3413, 5, 'Listare', 3411, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3414, 5, 'Modificare', 3411, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3415, 5, 'Refacere', 3411, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3416, 5, 'Obiecte de inventar in folosinta (8039)', 3407, '05', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3417, 5, 'Export', 3416, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3418, 5, 'Listare', 3416, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3419, 5, 'Modificare', 3416, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3420, 5, 'Refacere', 3416, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3421, 5, 'Obiecte de inventar in stoc / magazie (303)', 3407, '06', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3422, 5, 'Export', 3421, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3423, 5, 'Listare', 3421, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3424, 5, 'Modificare', 3421, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3425, 5, 'Refacere', 3421, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3426, 5, 'Rapoarte', 3407, '07', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3427, 5, 'Export', 3426, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3428, 5, 'Listare', 3426, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3429, 5, 'Produse', -1, 'D', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3430, 5, 'Achizitie', 3429, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3431, 5, 'Intrare in gestiune', 3429, '02', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3432, 5, 'Consum', 3429, '03', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3433, 5, 'Transfer', 3429, '04', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3434, 5, 'Vanzare', 3429, '05', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3435, 5, 'Configurare', 3429, '06', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3436, 5, 'Export', 3435, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3437, 5, 'Listare', 3435, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3438, 5, 'Modificare', 3435, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3439, 5, 'Refacere', 3435, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3440, 5, 'Stocuri produse', 3429, '07', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3441, 5, 'Export', 3440, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3442, 5, 'Listare', 3440, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3443, 5, 'Modificare', 3440, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3444, 5, 'Refacere', 3440, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3445, 5, 'Rapoarte', 3429, '08', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3446, 5, 'Export', 3445, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3447, 5, 'Listare', 3445, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3448, 5, 'Marfuri la pret de achizitie', -1, 'E', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3449, 5, 'Achizitie', 3448, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3450, 5, 'Achizitie din Import', 3448, '02', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3451, 5, 'Consum', 3448, '03', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3452, 5, 'Transfer', 3448, '04', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3453, 5, 'Vanzare', 3448, '05', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3454, 5, 'Stocuri marfa', 3448, '06', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3455, 5, 'Export', 3454, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3456, 5, 'Listare', 3454, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3457, 5, 'Modificare', 3454, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3458, 5, 'Refacere', 3454, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3459, 5, 'Rapoarte', 3448, '07', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3460, 5, 'Export', 3459, '1', null, null, 0); +commit; +prompt 100 records committed... +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3461, 5, 'Listare', 3459, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3462, 5, 'Marfuri la pret de vanzare', -1, 'F', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3463, 5, 'Achizitie', 3462, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3464, 5, 'Transfer', 3462, '02', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3465, 5, 'Vanzare', 3462, '03', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3466, 5, 'Configurare', 3462, '04', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3467, 5, 'Stocuri marfa', 3462, '05', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3468, 5, 'Export', 3467, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3469, 5, 'Listare', 3467, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3470, 5, 'Modificare', 3467, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3471, 5, 'Refacere', 3467, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3472, 5, 'Rapoarte', 3462, '06', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3473, 5, 'Export', 3472, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3474, 5, 'Listare', 3472, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3475, 5, 'Casa de marcat', 3462, '07', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3477, 7, 'Meniu', -1, 'Z', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3478, 7, 'Optiuni', 3477, 'A', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3479, 7, 'Optiuni', 3478, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3480, 7, 'Vizualizare', 3477, 'B', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3481, 7, 'Balanta', 3480, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3482, 7, 'Registru Jurnal', 3480, '02', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3483, 7, 'Rapoarte generale', 3477, 'C', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3484, 7, 'Vizualizare seturi de indicatori', 3483, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3485, 7, 'Definire set nou de indicatori', 3483, '02', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3486, 7, 'Pregatire pentru prezentare', 3483, '03', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3487, 7, 'Seturi predefinite', 3483, '04', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3488, 7, 'Rapoarte generale', -1, 'A', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3489, 7, 'Centre de cost', -1, 'B', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3490, 7, 'Raport de eficienta', 3489, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3491, 7, 'Export', 3490, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3492, 7, 'Listare', 3490, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3493, 7, 'Balanta pe centru', 3489, '02', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3494, 7, 'Export', 3493, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3495, 7, 'Listare', 3493, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3496, 7, 'Lucrari/Contracte', -1, 'C', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3497, 7, 'Raport de eficienta', 3496, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3498, 7, 'Export', 3497, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3499, 7, 'Listare', 3497, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3500, 7, 'Raport materiale Cantitativ-valoric', 3496, '02', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3501, 7, 'Export', 3500, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3502, 7, 'Listare', 3500, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3503, 7, 'Total cheltuieli directe grupate pe tipuri', 3496, '03', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3504, 7, 'Export', 3503, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3505, 7, 'Listare', 3503, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3506, 7, 'Cheltuieli directe Lista documentelor grupate dupa tipul de cheltuiala', 3496, '04', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3507, 7, 'Export', 3506, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3508, 7, 'Listare', 3506, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3509, 7, 'Venituri/Cheltuieli directe Lista documentelor in ordine cronologica', 3496, '05', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3510, 7, 'Export', 3509, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3511, 7, 'Listare', 3509, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3512, 7, 'Facturat / Incasat', 3496, '06', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3513, 7, 'Export', 3512, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3514, 7, 'Listare', 3512, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3515, 7, 'Bugete', -1, 'D', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3516, 7, 'Previzionare', 3515, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3517, 7, 'Export', 3516, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3518, 7, 'Listare', 3516, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3519, 7, 'Comparatie previzionat - realizat', 3515, '02', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3520, 7, 'Export', 3519, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3521, 7, 'Listare', 3519, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3522, 7, 'Evaluarea in valuta', -1, 'E', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3523, 7, 'Balanta', 3522, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3524, 7, 'Export', 3523, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3525, 7, 'Listare', 3523, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3526, 7, 'Registru Jurnal', 3522, '02', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3527, 7, 'Export', 3526, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3528, 7, 'Listare', 3526, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3529, 7, 'Terti', 3522, '03', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3530, 7, 'Export', 3529, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3531, 7, 'Listare', 3529, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3532, 7, 'Fluxul de trezorerie', -1, 'F', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3533, 7, 'Calcul Flux de trezorerie', 3532, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3534, 7, 'Formule Flux de trezorerie', 3532, '02', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3535, 7, 'Rapoarte', 3488, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3536, 9, 'Lucrari', 3322, '02', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3538, 9, 'Modificare', 3536, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3542, 9, 'Stergere', 3536, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3322, 9, 'Configurare', -1, 'A', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3323, 9, 'Calcul tarifar/ ora', 3322, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3324, 9, 'Pontare', -1, 'B', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3007, 3, 'Export', 3006, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3005, 3, 'Configurare', -1, 'A', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3006, 3, 'Calcul sporuri', 3005, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3008, 3, 'Listare', 3006, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3009, 3, 'Modificare', 3006, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3010, 3, 'Stergere', 3006, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3011, 3, 'Vizualizare inreg.proprii', 3006, '5', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3012, 3, 'Vizualizare tot', 3006, '6', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3013, 3, 'Calcul popriri', 3005, '02', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3014, 3, 'Export', 3013, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3015, 3, 'Listare', 3013, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3016, 3, 'Modificare', 3013, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3017, 3, 'Stergere', 3013, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3018, 3, 'Vizualizare inreg.proprii', 3013, '5', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3019, 3, 'Vizualizare tot', 3013, '6', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3020, 3, 'Calcul salariu', 3005, '03', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3021, 3, 'Calcul centralizator', 3005, '04', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3022, 3, 'Nota de inchidere', 3005, '05', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3023, 3, 'Configurare rapoarte', 3005, '06', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3024, 3, 'State', -1, 'B', null, null, 0); +commit; +prompt 200 records committed... +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3025, 3, 'Evidenta personal', 3024, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3026, 3, 'Introducere avansuri', 3024, '02', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3027, 3, 'Export', 3026, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3028, 3, 'Sporuri', 3024, '03', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3029, 3, 'Export', 3028, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3030, 3, 'Listare', 3028, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3031, 3, 'Modificare', 3028, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3032, 3, 'Popriri', 3024, '04', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3033, 3, 'Export', 3032, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3034, 3, 'Listare', 3032, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3035, 3, 'Modificare', 3032, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3036, 3, 'Prime', 3024, '05', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3037, 3, 'Export', 3036, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3038, 3, 'Calcul state', 3024, '06', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3039, 3, 'Export', 3038, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3040, 3, 'Rapoarte', 3024, '07', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3041, 3, 'Concedii', -1, 'C', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3042, 3, 'Concedii de odihna', 3041, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3043, 3, 'Export', 3042, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3044, 3, 'Listare', 3042, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3045, 3, 'Modificare', 3042, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3046, 3, 'Refacere', 3042, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3047, 3, 'Avansuri CO', 3041, '02', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3048, 3, 'Export', 3047, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3049, 3, 'Listare', 3047, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3050, 3, 'Modificare', 3047, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3051, 3, 'Refacere', 3047, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3052, 3, 'Concedii medicale', 3041, '03', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3053, 3, 'Export', 3052, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3054, 3, 'Listare', 3052, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3055, 3, 'Modificare', 3052, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3056, 3, 'Refacere', 3052, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3057, 3, 'Rapoarte', 3041, '04', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3058, 3, 'Export', 3057, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3059, 3, 'Listare', 3057, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3060, 3, 'Modificare', 3057, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3061, 3, 'Stergere', 3057, '4', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3062, 3, 'Vizualizare inreg.proprii', 3057, '5', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3063, 3, 'Vizualizare tot', 3057, '6', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3064, 3, 'Analize', -1, 'D', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3065, 3, 'Borderou plati salarii', 3064, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3066, 3, 'Vizualizare state', 3064, '02', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3067, 3, 'Export', 3066, '1', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3068, 3, 'Rapoarte', 3064, '03', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3069, 3, 'Nota de inchidere', 3064, '04', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3070, 3, 'Deschidere de luna', 3064, '05', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3325, 9, 'Pontare pe zile', 3324, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3326, 9, 'Pontare pe lucrari', 3324, '02', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3327, 9, 'Foaia de lucru', 3324, '03', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3328, 9, 'Modificare', 3327, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3329, 9, 'Rapoarte', 3324, '04', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3331, 4, 'Personal', -1, 'A', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3332, 4, 'Adaugare/modificare', 3331, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3333, 4, 'Listare', 3332, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3334, 4, 'Modificare', 3332, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3335, 4, 'Familie', 3331, '02', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3336, 4, 'Listare', 3335, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3337, 4, 'Modificare', 3335, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3338, 4, 'Calificare', 3331, '03', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3339, 4, 'Listare', 3338, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3340, 4, 'Modificare', 3338, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3341, 4, 'Scolarizare', 3331, '04', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3342, 4, 'Listare', 3341, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3343, 4, 'Modificare', 3341, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3344, 4, 'Vechimi', 3331, '05', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3345, 4, 'Listare', 3344, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3346, 4, 'Modificare', 3344, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3347, 4, 'Plecari din unitate', 3331, '06', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3348, 4, 'Rapoarte', 3331, '07', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3349, 4, 'Contracte de munca', -1, 'B', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3350, 4, 'Configurare contract', 3349, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3351, 4, 'Listare', 3350, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3352, 4, 'Modificare', 3350, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3353, 4, 'Listare contract', 3349, '02', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3354, 4, 'Concedii de odihna', -1, 'C', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3355, 4, 'Planificari CO', 3354, '01', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3356, 4, 'Listare', 3355, '2', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3357, 4, 'Modificare', 3355, '3', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3358, 4, 'Sit CO cuvenite', 3354, '02', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3359, 4, 'Rapoarte', 3354, '03', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3360, 4, 'Rapoarte de analiza', -1, 'D', null, null, 0); +insert into DEF_OBIECTE (ID_OBIECT, ID_PROGRAM, DESCRIERE, ID_TATA, COD, ID_UTILOP, DATAORA, STERS) +values (3544, 2, 'Note contabile', 2523, '06', null, null, 0); +commit; +prompt 280 records loaded +prompt Enabling foreign key constraints for DEF_OBIECTE... +alter table DEF_OBIECTE enable constraint FK_DO01; +alter table DEF_OBIECTE enable constraint FK_DO02; +prompt Enabling triggers for DEF_OBIECTE... +alter table DEF_OBIECTE enable all triggers; +set feedback on +set define on +prompt Done. diff --git a/COMUN/Drepturi utilizatori/def_programe_2710.sql b/COMUN/Drepturi utilizatori/def_programe_2710.sql new file mode 100644 index 0000000..71134ad --- /dev/null +++ b/COMUN/Drepturi utilizatori/def_programe_2710.sql @@ -0,0 +1,38 @@ +prompt PL/SQL Developer import file +prompt Created on Thursday, October 27, 2005 by marius.atanasiu +set feedback off +set define off +prompt Disabling triggers for DEF_PROGRAME... +alter table DEF_PROGRAME disable all triggers; +prompt Disabling foreign key constraints for DEF_PROGRAME... +alter table DEF_PROGRAME disable constraint FK_DP01; +prompt Loading DEF_PROGRAME... +insert into DEF_PROGRAME (ID_PROG, DIRECTOR, EXPLICATIE, INSTALAT, ORDINE, STERS, IDE_PROGRAM, ID_UTILOP, DATAORA) +values (1, 'ROASAL', 'SALARIZAREA PERSONALULUI', 1, 4, 0, 3, 1, to_date('25-10-2005 11:10:52', 'dd-mm-yyyy hh24:mi:ss')); +insert into DEF_PROGRAME (ID_PROG, DIRECTOR, EXPLICATIE, INSTALAT, ORDINE, STERS, IDE_PROGRAM, ID_UTILOP, DATAORA) +values (2, 'ROAIMOB', 'GESTIUNEA IMOBILIZARILOR', 1, 3, 0, 6, 1, to_date('25-10-2005 11:14:25', 'dd-mm-yyyy hh24:mi:ss')); +insert into DEF_PROGRAME (ID_PROG, DIRECTOR, EXPLICATIE, INSTALAT, ORDINE, STERS, IDE_PROGRAM, ID_UTILOP, DATAORA) +values (3, 'ROADECL', 'DECLARATII SALARII', 1, 7, 0, 10, 1, to_date('25-10-2005 11:11:19', 'dd-mm-yyyy hh24:mi:ss')); +insert into DEF_PROGRAME (ID_PROG, DIRECTOR, EXPLICATIE, INSTALAT, ORDINE, STERS, IDE_PROGRAM, ID_UTILOP, DATAORA) +values (4, 'ROAAUTO', 'MANAGEMENTUL ACTIVITATII DE SERVICE AUTO', 1, 8, 0, 8, 1, to_date('25-10-2005 11:13:09', 'dd-mm-yyyy hh24:mi:ss')); +insert into DEF_PROGRAME (ID_PROG, DIRECTOR, EXPLICATIE, INSTALAT, ORDINE, STERS, IDE_PROGRAM, ID_UTILOP, DATAORA) +values (5, 'ROAGEST', 'GESTIUNEA STOCURILOR SI A OBIECTELOR DE INVENTAR', 1, 2, 0, 5, 1, to_date('18-10-2005 13:06:14', 'dd-mm-yyyy hh24:mi:ss')); +insert into DEF_PROGRAME (ID_PROG, DIRECTOR, EXPLICATIE, INSTALAT, ORDINE, STERS, IDE_PROGRAM, ID_UTILOP, DATAORA) +values (6, 'ROACONT', 'FINANCIAR CONTABILITATE', 1, 1, 0, 2, 1, to_date('18-10-2005 13:06:14', 'dd-mm-yyyy hh24:mi:ss')); +insert into DEF_PROGRAME (ID_PROG, DIRECTOR, EXPLICATIE, INSTALAT, ORDINE, STERS, IDE_PROGRAM, ID_UTILOP, DATAORA) +values (7, 'ROAMANAGER', 'MANAGER', 1, 10, 0, 7, 1, to_date('25-10-2005 11:10:21', 'dd-mm-yyyy hh24:mi:ss')); +insert into DEF_PROGRAME (ID_PROG, DIRECTOR, EXPLICATIE, INSTALAT, ORDINE, STERS, IDE_PROGRAM, ID_UTILOP, DATAORA) +values (8, 'ROADEF', 'DEFINIREA COMPANIEI', 1, 11, 0, 1, 1, to_date('25-10-2005 11:10:09', 'dd-mm-yyyy hh24:mi:ss')); +insert into DEF_PROGRAME (ID_PROG, DIRECTOR, EXPLICATIE, INSTALAT, ORDINE, STERS, IDE_PROGRAM, ID_UTILOP, DATAORA) +values (9, 'ROANOR', 'NORMAREA MUNCII', 1, 6, 0, 9, 1, to_date('25-10-2005 11:11:09', 'dd-mm-yyyy hh24:mi:ss')); +insert into DEF_PROGRAME (ID_PROG, DIRECTOR, EXPLICATIE, INSTALAT, ORDINE, STERS, IDE_PROGRAM, ID_UTILOP, DATAORA) +values (10, 'ROARES', 'RESURSE UMANE', 1, 5, 0, 4, 1, to_date('25-10-2005 11:10:59', 'dd-mm-yyyy hh24:mi:ss')); +commit; +prompt 11 records loaded +prompt Enabling foreign key constraints for DEF_PROGRAME... +alter table DEF_PROGRAME enable constraint FK_DP01; +prompt Enabling triggers for DEF_PROGRAME... +alter table DEF_PROGRAME enable all triggers; +set feedback on +set define on +prompt Done. diff --git a/COMUN/Drepturi utilizatori/drepturi_utilizatori.sql b/COMUN/Drepturi utilizatori/drepturi_utilizatori.sql new file mode 100644 index 0000000..b847ea6 --- /dev/null +++ b/COMUN/Drepturi utilizatori/drepturi_utilizatori.sql @@ -0,0 +1,1773 @@ +---------------------------------------------------------- +-- Export file for user CONTAFIN_ORACLE -- +-- Created by marius.atanasiu on 10/27/2005, 4:01:16 PM -- +---------------------------------------------------------- + +spool drepturi_utilizatori.log + +prompt +prompt Creating table DEF_GRUP +prompt ======================= +prompt +create table DEF_GRUP +( + ID_GRUP NUMBER(5) not null, + GRUP VARCHAR2(50), + STERS NUMBER(1) default 0 not null, + ID_UTILOP NUMBER(5) not null, + DATAORA DATE not null, + NR_GRUP NUMBER(5), + ID_TATA NUMBER(5) +) +tablespace ROA + pctfree 10 + initrans 1 + maxtrans 255 + storage + ( + initial 64K + minextents 1 + maxextents unlimited + ); +alter table DEF_GRUP + add constraint PK_DFG primary key (ID_GRUP) + using index + tablespace ROA + pctfree 10 + initrans 2 + maxtrans 255 + storage + ( + initial 64K + minextents 1 + maxextents unlimited + ); +alter table DEF_GRUP + add constraint UK_DFG01 unique (GRUP, STERS) + using index + tablespace ROA + pctfree 10 + initrans 2 + maxtrans 255 + storage + ( + initial 64K + minextents 1 + maxextents unlimited + ); +alter table DEF_GRUP + add constraint FK_DFG01 foreign key (ID_UTILOP) + references UTILIZATORI (ID_UTIL); + +prompt +prompt Creating table DEF_GRUP_DREPT +prompt ============================= +prompt +create table DEF_GRUP_DREPT +( + ID_GRUP NUMBER(5) not null, + ID_PROGRAM NUMBER(5) not null, + ID_DGD NUMBER(5) not null, + ID_UTILOP NUMBER(5) not null, + DATAORA DATE not null, + STERS NUMBER(1) default 0 not null +) +tablespace ROA + pctfree 10 + initrans 1 + maxtrans 255 + storage + ( + initial 64K + minextents 1 + maxextents unlimited + ); +alter table DEF_GRUP_DREPT + add constraint PK_DGD primary key (ID_DGD) + using index + tablespace ROA + pctfree 10 + initrans 2 + maxtrans 255 + storage + ( + initial 64K + minextents 1 + maxextents unlimited + ); +alter table DEF_GRUP_DREPT + add constraint FK_DGD01 foreign key (ID_GRUP) + references DEF_GRUP (ID_GRUP); +alter table DEF_GRUP_DREPT + add constraint FK_DGD02 foreign key (ID_PROGRAM) + references NOM_PROGRAME (ID_PROGRAM); +alter table DEF_GRUP_DREPT + add constraint FK_DGD03 foreign key (ID_UTILOP) + references UTILIZATORI (ID_UTIL); + +prompt +prompt Creating table DEF_OBIECTE +prompt ========================== +prompt +create table DEF_OBIECTE +( + ID_OBIECT NUMBER(10) not null, + ID_PROGRAM NUMBER(2) not null, + DESCRIERE VARCHAR2(100) not null, + ID_TATA NUMBER(10) not null, + COD VARCHAR2(3) not null, + ID_UTILOP NUMBER(10), + DATAORA DATE, + STERS NUMBER(1) default 0 +) +tablespace ROA + pctfree 10 + initrans 1 + maxtrans 255 + storage + ( + initial 64K + minextents 1 + maxextents unlimited + ); +alter table DEF_OBIECTE + add constraint PK_DO primary key (ID_OBIECT) + using index + tablespace ROA + pctfree 10 + initrans 2 + maxtrans 255 + storage + ( + initial 64K + minextents 1 + maxextents unlimited + ); +alter table DEF_OBIECTE + add constraint FK_DO01 foreign key (ID_PROGRAM) + references NOM_PROGRAME (ID_PROGRAM); +alter table DEF_OBIECTE + add constraint FK_DO02 foreign key (ID_UTILOP) + references UTILIZATORI (ID_UTIL); + +prompt +prompt Creating table DEF_GRUP_DREPT_OBIECTE +prompt ===================================== +prompt +create table DEF_GRUP_DREPT_OBIECTE +( + ID_DGDO NUMBER(10) not null, + ID_OBIECT NUMBER(10) not null, + ID_GRUP NUMBER(10) not null, + ID_UTILOP NUMBER(10) not null, + DATAORA DATE not null, + STERS NUMBER(1) default 0 not null +) +tablespace ROA + pctfree 10 + initrans 1 + maxtrans 255 + storage + ( + initial 64K + minextents 1 + maxextents unlimited + ); +alter table DEF_GRUP_DREPT_OBIECTE + add constraint PK_DGDO primary key (ID_DGDO) + using index + tablespace ROA + pctfree 10 + initrans 2 + maxtrans 255 + storage + ( + initial 64K + minextents 1 + maxextents unlimited + ); +alter table DEF_GRUP_DREPT_OBIECTE + add constraint FK_DGDO01 foreign key (ID_OBIECT) + references DEF_OBIECTE (ID_OBIECT); +alter table DEF_GRUP_DREPT_OBIECTE + add constraint FK_DGDO02 foreign key (ID_GRUP) + references DEF_GRUP (ID_GRUP); +alter table DEF_GRUP_DREPT_OBIECTE + add constraint FK_DGDO03 foreign key (ID_UTILOP) + references UTILIZATORI (ID_UTIL); + +prompt +prompt Creating table DEF_PROGRAME +prompt =========================== +prompt +create table DEF_PROGRAME +( + ID_PROG NUMBER(5) not null, + DIRECTOR VARCHAR2(30), + EXPLICATIE VARCHAR2(150), + INSTALAT NUMBER(1), + ORDINE NUMBER(2), + STERS NUMBER(1) default 0 not null, + IDE_PROGRAM NUMBER(2) default 0 not null, + ID_UTILOP NUMBER(10) not null, + DATAORA DATE default SYSDATE not null +) +tablespace ROA + pctfree 10 + initrans 1 + maxtrans 255 + storage + ( + initial 64K + minextents 1 + maxextents unlimited + ); +alter table DEF_PROGRAME + add constraint PK_DEF_PROGRAME primary key (ID_PROG) + using index + tablespace ROA + pctfree 10 + initrans 2 + maxtrans 255 + storage + ( + initial 64K + minextents 1 + maxextents unlimited + ); +alter table DEF_PROGRAME + add constraint FK_DP01 foreign key (ID_UTILOP) + references UTILIZATORI (ID_UTIL); +alter table DEF_PROGRAME + add constraint FK_DP02 foreign key (IDE_PROGRAM) + references nom_programe (ID_PROGRAM); + +prompt +prompt Creating table DEF_UTIL_GRUP +prompt ============================ +prompt +create table DEF_UTIL_GRUP +( + ID_DUG NUMBER(10) not null, + ID_FIRMA NUMBER(10) not null, + ID_GRUP NUMBER(10) not null, + ID_UTIL NUMBER(10) not null, + DATAORA DATE not null, + STERS NUMBER(1) default 0 not null, + ID_UTILOP NUMBER(10) not null +) +tablespace ROA + pctfree 10 + initrans 1 + maxtrans 255 + storage + ( + initial 64K + minextents 1 + maxextents unlimited + ); +alter table DEF_UTIL_GRUP + add constraint PK_DUG primary key (ID_DUG) + using index + tablespace ROA + pctfree 10 + initrans 2 + maxtrans 255 + storage + ( + initial 64K + minextents 1 + maxextents unlimited + ); +alter table DEF_UTIL_GRUP + add constraint FK_DUG01 foreign key (ID_GRUP) + references DEF_GRUP (ID_GRUP); +alter table DEF_UTIL_GRUP + add constraint FK_DUG02 foreign key (ID_UTIL) + references UTILIZATORI (ID_UTIL); +alter table DEF_UTIL_GRUP + add constraint FK_DUG03 foreign key (ID_FIRMA) + references NOM_FIRME (ID_FIRMA); +alter table DEF_UTIL_GRUP + add constraint FK_DUG04 foreign key (ID_UTILOP) + references UTILIZATORI (ID_UTIL); + +prompt +prompt Creating sequence SEQ_DEF_GDO +prompt ============================= +prompt +create sequence SEQ_DEF_GDO +minvalue 1 +maxvalue 999999999999999999999999999 +start with 1 +increment by 1 +nocache; + +prompt +prompt Creating sequence SEQ_DEF_GRUP +prompt ============================== +prompt +create sequence SEQ_DEF_GRUP +minvalue 1 +maxvalue 999999999999999999999999999 +start with 1 +increment by 1 +nocache; + +prompt +prompt Creating sequence SEQ_DEF_GRUP_DREPT +prompt ==================================== +prompt +create sequence SEQ_DEF_GRUP_DREPT +minvalue 0 +maxvalue 999999999999999999999999999 +start with 0 +increment by 1 +nocache; + +prompt +prompt Creating sequence SEQ_DEF_OBIECTE +prompt ================================= +prompt +create sequence SEQ_DEF_OBIECTE +minvalue 1 +maxvalue 999999999999999999999999999 +start with 2853 +increment by 1 +nocache; + +prompt +prompt Creating sequence SEQ_DEF_PROGRAME +prompt ================================== +prompt +create sequence SEQ_DEF_PROGRAME +minvalue 1 +maxvalue 999999999999999999999999999 +start with 12 +increment by 1 +nocache; + +prompt +prompt Creating sequence SEQ_DEF_UTIL_GRUP +prompt =================================== +prompt +create sequence SEQ_DEF_UTIL_GRUP +minvalue 0 +maxvalue 999999999999999999999999999 +start with 0 +increment by 1 +nocache; + +prompt +prompt Creating view VDEF_GRUP +prompt ======================= +prompt +create or replace view vdef_grup as +select id_grup,grup,sys_connect_by_path(grup,'\') as tata,id_tata,level as nivel + from def_grup + where sters=0 + start with id_tata=-1 + connect by prior id_grup=id_tata +/ + +prompt +prompt Creating view VDEF_GRUP_DREPT +prompt ============================= +prompt +create or replace view vdef_grup_drept as +select a.id_grup,a.id_program,a.id_dgd,b.denumire,c.grup + from def_grup_drept a + left join nom_programe b on a.id_program=b.id_program + left join def_grup c on a.id_grup=c.id_grup + where a.sters=0 and c.sters=0 +/ + +prompt +prompt Creating view VDEF_GRUP_OBIECTE +prompt =============================== +prompt +create or replace view vdef_grup_obiecte as +select id_dgdo,id_obiect,id_grup from def_grup_drept_obiecte where sters=0 +/ + +prompt +prompt Creating view VDEF_OBIECTE +prompt ========================== +prompt +create or replace view vdef_obiecte as +select id_obiect,descriere,sys_connect_by_path(cod,'/') as cale, +replace(sys_connect_by_path(cod,'/'),'/','') as cheie,id_program, +level as nivel,connect_by_isleaf as frunza from def_obiecte +where sters=0 +start with id_tata=-1 +connect by prior id_obiect=id_tata +order by cheie +/ + +prompt +prompt Creating view VDEF_GRUP_OBIECTE_PROG +prompt ==================================== +prompt +create or replace view vdef_grup_obiecte_prog as +select a.id_grup,b.id_program,b.cheie from vdef_grup_obiecte a left join vdef_obiecte b on a.id_obiect=b.id_obiect +/ + +prompt +prompt Creating view VDEF_UTIL_GRUP +prompt ============================ +prompt +create or replace view vdef_util_grup as +select a.id_dug,a.id_firma,a.id_util,a.id_grup,b.grup,c.firma,d.utilizator + from def_util_grup a + left join def_grup b on a.id_grup=b.id_grup + left join nom_firme c on a.id_firma=c.id_firma + left join utilizatori d on a.id_util=d.id_util + where a.sters=0 and b.sters=0 and d.sters=0 +/ + +prompt +prompt Creating view VDEF_ORGANIGRAMA_FIRME_GRUP +prompt ========================================= +prompt +create or replace view vdef_organigrama_firme_grup as +select c.tip,c.id,c.denumire,c.id_tata,sys_connect_by_path(substr(c.denumire,1,2)||id,'/') as cheie, +connect_by_isleaf as frunza,level as nivel from +(select 0 as tip,a.id_firma as id,a.firma as denumire,-1 as id_tata from v_nom_firme a +union all +select distinct 1 as tip,b.id_grup+500 as id,b.grup as denumire,b.id_firma as id_tata from vdef_util_grup b) c +start with c.id_tata=-1 +connect by prior c.id=c.id_tata +order by nivel,tip,denumire +/ + +prompt +prompt Creating view VDEF_ORGANIGRAMA_FIRME_UTIL +prompt ========================================= +prompt +create or replace view vdef_organigrama_firme_util as +select c.tip,c.id,c.denumire,c.id_tata,sys_connect_by_path(substr(c.denumire,1,2)||id,'/') as cheie, +connect_by_isleaf as frunza,level as nivel from +(select 0 as tip,a.id_firma as id,a.firma as denumire,-1 as id_tata from v_nom_firme a +union all +select distinct 1 as tip,b.id_util+500 as id,b.utilizator as denumire,b.id_firma as id_tata from vdef_util_grup b) c +start with c.id_tata=-1 +connect by prior c.id=c.id_tata +order by nivel,tip,denumire +/ + +prompt +prompt Creating view VDEF_ORGANIGRAMA_GRUPURI +prompt ====================================== +prompt +create or replace view vdef_organigrama_grupuri as +select c.tip,c.id_grup,c.grup as denumire,c.id_tata,sys_connect_by_path(substr(c.grup,1,2)||id_grup,'/') as cheie, +connect_by_isleaf as frunza,level as nivel from +(select 0 as tip,a.id_grup,a.grup,a.id_tata from def_grup a where a.sters=0 +union all +select distinct 1 as tip,b.id_util+500 as id_grup,b.utilizator as grup,b.id_grup as id_tata from vdef_util_grup b) c +start with c.id_tata=-1 +connect by prior c.id_grup=c.id_tata +order by nivel,tip,denumire +/ + +prompt +prompt Creating view VDEF_PROGRAME +prompt =========================== +prompt +create or replace view vdef_programe as +select a.id_prog,b.denumire as nume,a.director,a.explicatie,a.instalat,a.ordine,a.ide_program + from def_programe a + left join vnom_programe b on a.ide_program=b.id_program + where a.sters = 0 +/ + +prompt +prompt Creating view VDEF_ORGANIGRAMA_PROGRAME_GRUP +prompt ============================================ +prompt +create or replace view vdef_organigrama_programe_grup as +select c.tip,c.id,c.denumire,c.id_tata,sys_connect_by_path(substr(c.denumire,1,2)||id,'/') as cheie, +connect_by_isleaf as frunza,level as nivel from +(select distinct 0 as tip,a.ide_program as id,a.explicatie as denumire,-1 as id_tata from vdef_programe a +union all +select distinct 1 as tip,b.id_grup+500 as id,b.grup as denumire,b.id_program as id_tata from vdef_grup_drept b) c +start with c.id_tata=-1 +connect by prior c.id=c.id_tata +order by nivel,tip,denumire +/ + +prompt +prompt Creating view VDEF_ORGANIGRAMA_PROGRAME_UTIL +prompt ============================================ +prompt +create or replace view vdef_organigrama_programe_util as +select c.tip,c.id,c.denumire,c.id_tata,sys_connect_by_path(substr(c.denumire,1,2)||id,'/') as cheie, +connect_by_isleaf as frunza,level as nivel from +(select distinct 0 as tip,a.ide_program as id,a.explicatie as denumire,-1 as id_tata from vdef_programe a +union all +select distinct 1 as tip,b1.id_util+500 as id,b1.utilizator as denumire,b.id_program as id_tata from vdef_grup_drept b +join vdef_util_grup b1 on b.id_grup=b1.id_grup) c +start with c.id_tata=-1 +connect by prior c.id=c.id_tata +order by nivel,tip,denumire +/ + +prompt +prompt Creating view VDEF_ORGANIGRAMA_PROG_FIRME +prompt ========================================= +prompt +create or replace view vdef_organigrama_prog_firme as +select c.tip,c.id,c.denumire,c.id_tata,sys_connect_by_path(substr(c.denumire,1,2)||id,'/') as cheie, +connect_by_isleaf as frunza,level as nivel from +(select distinct 0 as tip,a.ide_program as id,a.explicatie as denumire,-1 as id_tata from vdef_programe a +union all +select distinct 1 as tip,b1.id_firma+500 as id,b1.firma as denumire,b.id_program as id_tata from vdef_grup_drept b +join vdef_util_grup b1 on b.id_grup=b1.id_grup) c +start with c.id_tata=-1 +connect by prior c.id=c.id_tata +order by nivel,tip,denumire +/ + +prompt +prompt Creating view VDEF_ORGANIGRAMA_UTIL_FIRME +prompt ========================================= +prompt +create or replace view vdef_organigrama_util_firme as +select c.tip,c.id,c.denumire,c.id_tata,sys_connect_by_path(substr(c.denumire,1,2)||id,'/') as cheie, +connect_by_isleaf as frunza,level as nivel from +(select 0 as tip,a.id_util as id,a.utilizator as denumire,-1 as id_tata from vutilizatori a where a.inactiv=0 +union all +select distinct 1 as tip,b.id_firma+500 as id,b.firma as denumire,b.id_util as id_tata from vdef_util_grup b) c +start with c.id_tata=-1 +connect by prior c.id=c.id_tata +order by nivel,tip,denumire +/ + +prompt +prompt Creating view VDEF_ORGANIGRAMA_UTIL_GRUP +prompt ======================================== +prompt +create or replace view vdef_organigrama_util_grup as +select c.tip,c.id,c.denumire,c.id_tata,sys_connect_by_path(substr(c.denumire,1,2)||id,'/') as cheie, +connect_by_isleaf as frunza,level as nivel from +(select 0 as tip,a.id_util as id,a.utilizator as denumire,-1 as id_tata from vutilizatori a where a.inactiv=0 +union all +select distinct 1 as tip,b.id_grup+500 as id,b.grup as denumire,b.id_util as id_tata from vdef_util_grup b) c +start with c.id_tata=-1 +connect by prior c.id=c.id_tata +order by nivel,tip,denumire +/ + +prompt +prompt Creating view VDEF_UTIL_FIRME +prompt ============================= +prompt +create or replace view vdef_util_firme as +select a.id_program,b.id_util,b.id_firma from def_grup_drept a +left join def_util_grup b on a.id_grup=b.id_grup where a.sters=0 and b.sters=0 +/ + +prompt +prompt Creating view VDEF_UTIL_GRUP_OBIECTE +prompt ==================================== +prompt +create or replace view vdef_util_grup_obiecte as +select a.id_util,b.id_grup,b.id_obiect,c.cheie,c.id_program + from utilizatori a + left join def_grup_drept_obiecte b on a.id_grup=b.id_grup + left join vdef_obiecte c on b.id_obiect=c.id_obiect + where a.sters=0 and b.sters=0 +/ + +prompt +prompt Creating view VDEF_UTIL_OBIECTE +prompt =============================== +prompt +create or replace view vdef_util_obiecte as +select a.id_firma,a.id_util,c.id_program,c.cheie from def_util_grup a +left join def_grup_drept_obiecte b on a.id_grup=b.id_grup +left join vdef_obiecte c on b.id_obiect=c.id_obiect +where a.sters=0 and b.sters=0 +/ + +prompt +prompt Creating view VDEF_UTIL_PROGRAME +prompt ================================ +prompt +create or replace view vdef_util_programe as +select distinct a.id_util,b.id_program,c.nume,c.director,c.explicatie,c.ordine from def_util_grup a +left join def_grup_drept b on a.id_grup=b.id_grup +left join vdef_programe c on b.id_program=c.ide_program +where a.sters=0 and b.sters=0 and c.instalat=1 +/ + +prompt +prompt Creating package PACK_DREPTURI +prompt ============================== +prompt +create or replace package PACK_DREPTURI is + + -- Author : MARIUS.ATANASIU + -- Created : 10/7/2005 10:54:27 AM + -- Purpose : + + -- Public type declarations + procedure utilizatoriinsproc(V_UTILIZATOR IN VARCHAR2, + V_PAROLA IN VARCHAR2, + V_INACTIV IN NUMBER, + V_ID_UTILAD IN NUMBER); + + procedure utilizatorimodproc(V_UTILIZATOR IN VARCHAR2, + V_PAROLA IN VARCHAR2, + V_INACTIV IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ID_UTILMOD IN NUMBER); + + procedure utilizatoridelproc(V_ID_UTIL IN NUMBER, V_ID_UTILS IN NUMBER); + + procedure parolamodproc(V_PAROLA IN VARCHAR2, V_ID_UTIL IN NUMBER); + + procedure programeinsproc(V_IDE_PROGRAM IN VARCHAR2, + V_CALE IN VARCHAR2, + V_TITLU IN VARCHAR2, + V_INSTALAT IN NUMBER, + V_ORDINE IN NUMBER, + V_ID_UTILAD IN NUMBER); + + procedure programemodproc(V_ID_PROGRAM IN NUMBER, + V_CALE IN VARCHAR2, + V_TITLU IN VARCHAR2, + V_INSTALAT IN NUMBER, + V_ORDINE IN NUMBER, + V_ID_UTILMOD IN NUMBER); + + procedure programedelproc(V_ID_PROGRAM IN NUMBER, V_ID_UTILS IN NUMBER); + + procedure firmeinsproc(V_FIRMA IN VARCHAR2, + V_FSCURT IN VARCHAR2, + V_COD_FISCAL IN VARCHAR2, + V_REG_COMERT IN VARCHAR2, + V_BANCA1 IN VARCHAR2, + V_CONT_BANCA1 IN VARCHAR2, + V_BANCA2 IN VARCHAR2, + V_CONT_BANCA2 IN VARCHAR2, + V_BANCA3 IN VARCHAR2, + V_CONT_BANCA3 IN VARCHAR2, + V_ADRESA IN VARCHAR2, + V_COD_FIRMA IN VARCHAR2, + V_PERS_JUR IN NUMBER, + V_CODANG IN NUMBER, + V_NUME IN VARCHAR2, + V_PRENUME IN VARCHAR2, + V_TELEFON1 IN VARCHAR2, + V_TELEFON2 IN VARCHAR2, + V_TELEFON3 IN VARCHAR2, + V_FAX IN VARCHAR2, + V_EMAIL IN VARCHAR2, + V_OASP IN VARCHAR2, + V_CAP_SOC_VAR IN NUMBER, + V_CAP_SOC_SUB IN NUMBER, + V_PUNCT_LUCRU IN VARCHAR2, + V_CAEN IN VARCHAR2, + V_SCHEMA IN VARCHAR2, + V_ID_MAMA IN NUMBER, + V_MAMA IN VARCHAR2, + V_SUCURSALA IN VARCHAR2, + V_ID_LOC IN NUMBER, + V_ID_UTILAD IN NUMBER); + + procedure firmemodproc(V_ID_FIRMA IN NUMBER, + V_FIRMA IN VARCHAR2, + V_FSCURT IN VARCHAR2, + V_COD_FISCAL IN VARCHAR2, + V_REG_COMERT IN VARCHAR2, + V_BANCA1 IN VARCHAR2, + V_CONT_BANCA1 IN VARCHAR2, + V_BANCA2 IN VARCHAR2, + V_CONT_BANCA2 IN VARCHAR2, + V_BANCA3 IN VARCHAR2, + V_CONT_BANCA3 IN VARCHAR2, + V_ADRESA IN VARCHAR2, + V_COD_FIRMA IN VARCHAR2, + V_PERS_JUR IN NUMBER, + V_CODANG IN NUMBER, + V_NUME IN VARCHAR2, + V_PRENUME IN VARCHAR2, + V_TELEFON1 IN VARCHAR2, + V_TELEFON2 IN VARCHAR2, + V_TELEFON3 IN VARCHAR2, + V_FAX IN VARCHAR2, + V_EMAIL IN VARCHAR2, + V_OASP IN VARCHAR2, + V_CAP_SOC_VAR IN NUMBER, + V_CAP_SOC_SUB IN NUMBER, + V_PUNCT_LUCRU IN VARCHAR2, + V_CAEN IN VARCHAR2, + V_SCHEMA IN VARCHAR2, + V_ID_MAMA IN NUMBER, + V_MAMA IN VARCHAR2, + V_SUCURSALA IN VARCHAR2, + V_ID_LOC IN NUMBER, + V_ID_UTILMOD IN NUMBER); + + procedure firmedelproc(V_ID_FIRMA IN VARCHAR2, V_ID_UTILS IN NUMBER); + + procedure grupinsproc(V_GRUP IN VARCHAR2, + V_ID_TATA IN NUMBER, + V_ID_UTILAD IN NUMBER); + + procedure grupmodproc(V_ID_GRUP IN NUMBER, + V_GRUP IN VARCHAR2, + V_ID_TATA IN NUMBER, + V_ID_UTILMOD IN NUMBER); + + procedure grupdelproc(V_ID_GRUP IN NUMBER, V_ID_UTILS IN NUMBER); + + procedure grupdreptinsproc(V_ID_GRUP IN NUMBER, + V_ID_PROGRAM IN NUMBER, + V_ACCES IN VARCHAR2, + V_ID_UTILAD IN NUMBER); + + procedure grupdreptmodproc(V_ID_GRUP IN NUMBER, + V_ID_PROGRAM IN NUMBER, + V_ACCES IN VARCHAR2, + V_ID_UTILMOD IN NUMBER); + + procedure grupdreptdelproc(V_ID_DGD IN NUMBER, V_ID_UTILS IN NUMBER); + + procedure utildreptinsproc(V_ID_UTIL IN NUMBER, + V_ID_GRUP IN NUMBER, + V_ID_FIRMA IN NUMBER, + V_ID_UTILAD IN NUMBER); + + procedure utildreptmodproc(V_ID_DUG IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ID_GRUP IN NUMBER, + V_ID_FIRMA IN NUMBER, + V_ID_UTILMOD IN NUMBER); + + procedure utildreptdelproc(V_ID_DUG IN NUMBER, V_ID_UTILS IN NUMBER); + + procedure adauga_drepturi_grup(V_ID_GRUP IN NUMBER, + V_ID_TATA IN NUMBER, + V_ID_UTILAD IN NUMBER); + + procedure modifica_drepturi_grup(V_ID_GRUP IN NUMBER, + V_ID_TATA IN NUMBER, + V_ID_UTILMOD IN NUMBER); + + procedure sterge_drepturi_grup(V_ID_GRUP IN NUMBER, V_ID_UTILS IN NUMBER); + + procedure adauga_drepturi_obiecte(V_ID_GRUP IN NUMBER, + V_ID_PROGRAM IN NUMBER, + V_ACCES IN VARCHAR2, + V_ID_UTILAD IN NUMBER); + + procedure sterge_drepturi_obiecte(V_ID_GRUP IN NUMBER, + V_ID_PROGRAM IN NUMBER, + V_ID_UTILS IN NUMBER); + + procedure adauga_drepturi_firma(V_ID_UTIL IN NUMBER, + V_ID_GRUP IN NUMBER, + V_ID_FIRMA IN NUMBER, + V_ID_UTILAD IN NUMBER); + + procedure modifica_drepturi_firma(V_ID_DUG IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ID_GRUP IN NUMBER, + V_ID_FIRMA IN NUMBER, + V_ID_UTILMOD IN NUMBER); + + procedure sterge_drepturi_firma(V_ID_DUG IN NUMBER, V_ID_UTILS IN NUMBER); + + procedure programe_grup(V_ID_GRUP IN DEF_GRUP.ID_GRUP%TYPE, + CRS_PROGRAME OUT PACK_TYPES.tip_cursor); + + procedure obiecte_program(V_ID_GRUP IN DEF_GRUP.ID_GRUP%TYPE, + V_ID_PROGRAM IN NUMBER, + CRS_OBIECTE OUT PACK_TYPES.tip_cursor); + + procedure actualizeaza_seq_obiecte; + + function verificautilizator(V_UTILIZATOR IN VARCHAR2, + V_PAROLA IN VARCHAR2) return number; + + function getid_obiect return number; + + function calculeaza_checksum(V_ID_UTIL IN NUMBER, V_NR_GRUP IN NUMBER) + return number; + +end PACK_DREPTURI; +/ + +prompt +prompt Creating package body PACK_DREPTURI +prompt =================================== +prompt +create or replace package body PACK_DREPTURI is + + procedure utilizatoriinsproc(V_UTILIZATOR IN VARCHAR2, + V_PAROLA IN VARCHAR2, + V_INACTIV IN NUMBER, + V_ID_UTILAD IN NUMBER) is + lnNrUtilizatori NUMBER(10); + begin + EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM VUTILIZATORI WHERE UTILIZATOR=:1' + USING V_UTILIZATOR; + + IF lnNrUtilizatori > 0 THEN + RAISE_APPLICATION_ERROR(-20005, + 'Mai exista un utilizator cu acest nume!'); + END IF; + + EXECUTE IMMEDIATE 'INSERT INTO UTILIZATORI(UTILIZATOR,PAROLA,INACTIV,ID_UTILOP,DATAORA) ' || + 'VALUES (:1,:2,:3,:4,SYSDATE)' + USING V_UTILIZATOR, V_PAROLA, V_INACTIV, V_ID_UTILAD; + end; + ---------------------------------------------------------------------------------------- + procedure utilizatorimodproc(V_UTILIZATOR IN VARCHAR2, + V_PAROLA IN VARCHAR2, + V_INACTIV IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ID_UTILMOD IN NUMBER) is + lnNrUtilizatori NUMBER(10); + lcParola UTILIZATORI.PAROLA%TYPE; + begin + EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM VUTILIZATORI WHERE UTILIZATOR=:1 AND ID_UTIL!=:2' + USING V_UTILIZATOR, V_ID_UTIL; + + IF lnNrUtilizatori > 0 THEN + RAISE_APPLICATION_ERROR(-20005, + 'Mai exista un utilizator cu acest nume!'); + END IF; + + IF V_INACTIV = 1 THEN + lcParola := 'UtIlIzAtOrInAcTiV' || V_ID_UTIL; + EXECUTE IMMEDIATE 'UPDATE UTILIZATORI SET PAROLA=:1,INACTIV=:2,ID_UTILOP=:3,DATAORA=SYSDATE ' || + 'WHERE ID_UTIL=:4' + USING lcParola, V_INACTIV, V_ID_UTILMOD, V_ID_UTIL; + ELSE + lcParola := V_PAROLA; + IF lcParola IS NULL THEN + EXECUTE IMMEDIATE 'UPDATE UTILIZATORI SET UTILIZATOR=:1,INACTIV=:2,ID_UTILOP=:3,DATAORA=SYSDATE ' || + 'WHERE ID_UTIL=:4' + USING V_UTILIZATOR, V_INACTIV, V_ID_UTILMOD, V_ID_UTIL; + + ELSE + EXECUTE IMMEDIATE 'UPDATE UTILIZATORI SET UTILIZATOR=:1,PAROLA=:2,INACTIV=:3,ID_UTILOP=:4,DATAORA=SYSDATE ' || + 'WHERE ID_UTIL=:5' + USING V_UTILIZATOR, lcParola, V_INACTIV, V_ID_UTILMOD, V_ID_UTIL; + END IF; + END IF; + end; + ---------------------------------------------------------------------------------------- + procedure utilizatoridelproc(V_ID_UTIL IN NUMBER, V_ID_UTILS IN NUMBER) is + begin + IF V_ID_UTIL = -1 THEN + RAISE_APPLICATION_ERROR(-20005, 'Nu puteti sterge acest utilizator!'); + END IF; + + EXECUTE IMMEDIATE 'UPDATE UTILIZATORI SET STERS=1,ID_UTILOP=:1,DATAORA=SYSDATE ' || + 'WHERE ID_UTIL=:2' + USING V_ID_UTILS, V_ID_UTIL; + end; + ---------------------------------------------------------------------------------------- + procedure parolamodproc(V_PAROLA IN VARCHAR2, V_ID_UTIL IN NUMBER) is + begin + EXECUTE IMMEDIATE 'UPDATE UTILIZATORI SET PAROLA=:1,ID_UTILOP=:2,DATAORA=SYSDATE ' || + 'WHERE ID_UTIL=:3' + USING V_PAROLA, V_ID_UTIL, V_ID_UTIL; + end; + ---------------------------------------------------------------------------------------- + procedure programeinsproc(V_IDE_PROGRAM IN NUMBER, + V_CALE IN VARCHAR2, + V_TITLU IN VARCHAR2, + V_INSTALAT IN NUMBER, + V_ORDINE IN NUMBER, + V_ID_UTILAD IN NUMBER) is + lnPrograme NUMBER(2); + lcProgram NOM_PROGRAME.DENUMIRE%TYPE; + /* V_IDE_PROGRAM NOM_PROGRAME.ID_PROGRAM%TYPE;*/ + begin + /* EXECUTE IMMEDIATE 'SELECT ID_PROGRAM FROM NOM_PROGRAME WHERE DENUMIRE=:1' + INTO V_IDE_PROGRAM + USING V_PROGRAM; + + EXECUTE IMMEDIATE 'INSERT INTO NOM_PROGRAME(NUME,DIRECTOR,EXPLICATIE,INSTALAT,ORDINE,IDE_PROGRAM) '|| + 'VALUES (:1,:2,:3,:4,:5,:6)' + USING + */ + EXECUTE IMMEDIATE 'SELECT DENUMIRE FROM VNOM_PROGRAME WHERE ID_PROGRAM=:1' + INTO lcProgram + USING V_IDE_PROGRAM; + + EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM VDEF_PROGRAME WHERE ORDINE=:1' + INTO lnPrograme + USING V_ORDINE; + + IF lnPrograme > 0 THEN + EXECUTE IMMEDIATE 'UPDATE DEF_PROGRAME SET ORDINE=ORDINE+1 WHERE ORDINE>=:1 AND STERS=0' + USING V_ORDINE; + END IF; + + EXECUTE IMMEDIATE 'INSERT INTO DEF_PROGRAME(DIRECTOR,EXPLICATIE,INSTALAT,ORDINE,IDE_PROGRAM,ID_UTILOP,DATAORA) ' || + 'VALUES (:1,:2,:3,:4,:5,:6,SYSDATE)' + USING V_CALE, V_TITLU, V_INSTALAT, V_ORDINE, V_IDE_PROGRAM, V_ID_UTILAD; + end; + ---------------------------------------------------------------------------------------- + procedure programemodproc(V_ID_PROGRAM IN NUMBER, + V_CALE IN VARCHAR2, + V_TITLU IN VARCHAR2, + V_INSTALAT IN NUMBER, + V_ORDINE IN NUMBER, + V_ID_UTILMOD IN NUMBER) is + lnPrograme NUMBER(2); + begin + EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM VDEF_PROGRAME WHERE ID_PROG!=:1 ' || + 'AND ORDINE=:2 ' + INTO lnPrograme + USING V_ID_PROGRAM, V_ORDINE; + + IF lnPrograme > 0 THEN + EXECUTE IMMEDIATE 'UPDATE DEF_PROGRAME SET ORDINE=ORDINE+1 WHERE ORDINE>=:1 AND STERS=0' + USING V_ORDINE; + END IF; + + EXECUTE IMMEDIATE 'UPDATE DEF_PROGRAME SET DIRECTOR=:1,EXPLICATIE=:2,INSTALAT=:3,' || + 'ORDINE=:4,ID_UTILOP=:5,DATAORA=SYSDATE WHERE ID_PROG=:6' + USING V_CALE, V_TITLU, V_INSTALAT, V_ORDINE, V_ID_UTILMOD, V_ID_PROGRAM; + end; + ---------------------------------------------------------------------------------------- + procedure programedelproc(V_ID_PROGRAM IN NUMBER, V_ID_UTILS IN NUMBER) is + lnOrdine DEF_PROGRAME.ORDINE%TYPE; + begin + EXECUTE IMMEDIATE 'SELECT ORDINE FROM VDEF_PROGRAME WHERE ID_PROG=:1' + INTO lnOrdine + USING V_ID_PROGRAM; + + EXECUTE IMMEDIATE 'UPDATE DEF_PROGRAME SET ORDINE=ORDINE-1 WHERE ORDINE>=:1 AND STERS=0' + USING lnOrdine; + + EXECUTE IMMEDIATE 'UPDATE DEF_PROGRAME SET STERS=1,ORDINE=-1,ID_UTILOP=:1,DATAORA=SYSDATE ' || + 'WHERE ID_PROG=:2' + USING V_ID_UTILS, V_ID_PROGRAM; + end; + ---------------------------------------------------------------------------------------- + procedure firmeinsproc(V_FIRMA IN VARCHAR2, + V_FSCURT IN VARCHAR2, + V_COD_FISCAL IN VARCHAR2, + V_REG_COMERT IN VARCHAR2, + V_BANCA1 IN VARCHAR2, + V_CONT_BANCA1 IN VARCHAR2, + V_BANCA2 IN VARCHAR2, + V_CONT_BANCA2 IN VARCHAR2, + V_BANCA3 IN VARCHAR2, + V_CONT_BANCA3 IN VARCHAR2, + V_ADRESA IN VARCHAR2, + V_COD_FIRMA IN VARCHAR2, + V_PERS_JUR IN NUMBER, + V_CODANG IN NUMBER, + V_NUME IN VARCHAR2, + V_PRENUME IN VARCHAR2, + V_TELEFON1 IN VARCHAR2, + V_TELEFON2 IN VARCHAR2, + V_TELEFON3 IN VARCHAR2, + V_FAX IN VARCHAR2, + V_EMAIL IN VARCHAR2, + V_OASP IN VARCHAR2, + V_CAP_SOC_VAR IN NUMBER, + V_CAP_SOC_SUB IN NUMBER, + V_PUNCT_LUCRU IN VARCHAR2, + V_CAEN IN VARCHAR2, + V_SCHEMA IN VARCHAR2, + V_ID_MAMA IN NUMBER, + V_MAMA IN VARCHAR2, + V_SUCURSALA IN VARCHAR2, + V_ID_LOC IN NUMBER, + V_ID_UTILAD IN NUMBER) is + lnFirme NUMBER(2); + begin + EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM V_NOM_FIRME WHERE SCHEMA=:1' + INTO lnFirme + USING V_SCHEMA; + + IF lnFirme > 0 THEN + RAISE_APPLICATION_ERROR(-20100, + 'Pe aceasta schema a mai fost definita o alta firma!'); + END IF; + + EXECUTE IMMEDIATE 'INSERT INTO NOM_FIRME(FIRMA,FSCURT,COD_FISCAL,REG_COMERT,' || + 'BANCA1,CONT_BANCA1,BANCA2,CONT_BANCA2,BANCA3,CONT_BANCA3,ADRESA,COD_FIRMA,' || + 'PERSOANA_JURIDICA,CODANG,NUME,PRENUME,TELEFON,TELEFON2,TELEFON3,FAX,EMAIL,OASP,' || + 'CAPITAL_SOC_VAR,CAPITAL_SOC_SUB,PUNCT_LUC,CAEN,SCHEMA,ID_MAMA,MAMA,SUCURSALA,' || + 'ID_LOC,ID_UTILOP,DATAORA) ' || + 'VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18,:19,:20,:21,:22,' || + ':23,:24,:25,:26,:27,:28,:29,:30,:31,:32,SYSDATE)' + USING V_FIRMA, V_FSCURT, V_COD_FISCAL, V_REG_COMERT, V_BANCA1, V_CONT_BANCA1, V_BANCA2, V_CONT_BANCA2, V_BANCA3, V_CONT_BANCA3, V_ADRESA, V_COD_FIRMA, V_PERS_JUR, V_CODANG, V_NUME, V_PRENUME, V_TELEFON1, V_TELEFON2, V_TELEFON3, V_FAX, V_EMAIL, V_OASP, V_CAP_SOC_VAR, V_CAP_SOC_SUB, V_PUNCT_LUCRU, V_CAEN, V_SCHEMA, V_ID_MAMA, V_MAMA, V_SUCURSALA, V_ID_LOC, V_ID_UTILAD; + end; + ---------------------------------------------------------------------------------------- + procedure firmemodproc(V_ID_FIRMA IN NUMBER, + V_FIRMA IN VARCHAR2, + V_FSCURT IN VARCHAR2, + V_COD_FISCAL IN VARCHAR2, + V_REG_COMERT IN VARCHAR2, + V_BANCA1 IN VARCHAR2, + V_CONT_BANCA1 IN VARCHAR2, + V_BANCA2 IN VARCHAR2, + V_CONT_BANCA2 IN VARCHAR2, + V_BANCA3 IN VARCHAR2, + V_CONT_BANCA3 IN VARCHAR2, + V_ADRESA IN VARCHAR2, + V_COD_FIRMA IN VARCHAR2, + V_PERS_JUR IN NUMBER, + V_CODANG IN NUMBER, + V_NUME IN VARCHAR2, + V_PRENUME IN VARCHAR2, + V_TELEFON1 IN VARCHAR2, + V_TELEFON2 IN VARCHAR2, + V_TELEFON3 IN VARCHAR2, + V_FAX IN VARCHAR2, + V_EMAIL IN VARCHAR2, + V_OASP IN VARCHAR2, + V_CAP_SOC_VAR IN NUMBER, + V_CAP_SOC_SUB IN NUMBER, + V_PUNCT_LUCRU IN VARCHAR2, + V_CAEN IN VARCHAR2, + V_SCHEMA IN VARCHAR2, + V_ID_MAMA IN NUMBER, + V_MAMA IN VARCHAR2, + V_SUCURSALA IN VARCHAR2, + V_ID_LOC IN NUMBER, + V_ID_UTILMOD IN NUMBER) is + lnFirme NUMBER(2); + begin + EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM V_NOM_FIRME WHERE SCHEMA=:1 AND ID_FIRMA!=:2' + INTO lnFirme + USING V_SCHEMA, V_ID_FIRMA; + + IF lnFirme > 0 THEN + RAISE_APPLICATION_ERROR(-20100, + 'Pe aceasta schema a mai fost definita o alta firma!'); + END IF; + + EXECUTE IMMEDIATE 'UPDATE NOM_FIRME SET FIRMA=:1,FSCURT=:2,COD_FISCAL=:3,' || + 'REG_COMERT=:4,BANCA1=:5,CONT_BANCA1=:6,BANCA2=:7,CONT_BANCA2=:8,BANCA3=:9,' || + 'CONT_BANCA3=:10,ADRESA=:11,COD_FIRMA=:12,PERSOANA_JURIDICA=:13,CODANG=:14,' || + 'NUME=:15,PRENUME=:16,TELEFON=:17,TELEFON2=:18,TELEFON3=:19,FAX=:20,' || + 'CAPITAL_SOC_VAR=:21,CAPITAL_SOC_SUB=:22,PUNCT_LUC=:23,CAEN=:24,SCHEMA=:25,' || + 'ID_MAMA=:26,MAMA=:27,SUCURSALA=:28,ID_LOC=:29,ID_UTILOP=:30,DATAORA=SYSDATE,EMAIL=:31, ' || + 'OASP=:32 WHERE ID_FIRMA=:33' + USING V_FIRMA, V_FSCURT, V_COD_FISCAL, V_REG_COMERT, V_BANCA1, V_CONT_BANCA1, V_BANCA2, V_CONT_BANCA2, V_BANCA3, V_CONT_BANCA3, V_ADRESA, V_COD_FIRMA, V_PERS_JUR, V_CODANG, V_NUME, V_PRENUME, V_TELEFON1, V_TELEFON2, V_TELEFON3, V_FAX, V_CAP_SOC_VAR, V_CAP_SOC_SUB, V_PUNCT_LUCRU, V_CAEN, V_SCHEMA, V_ID_MAMA, V_MAMA, V_SUCURSALA, V_ID_LOC, V_ID_UTILMOD, V_EMAIL, V_OASP, V_ID_FIRMA; + end; + ---------------------------------------------------------------------------------------- + procedure firmedelproc(V_ID_FIRMA IN VARCHAR2, V_ID_UTILS IN NUMBER) is + begin + + EXECUTE IMMEDIATE 'UPDATE NOM_FIRME SET STERS=1,ID_UTILOP=:1,DATAORA=SYSDATE ' || + 'WHERE ID_FIRMA=:2' + USING V_ID_UTILS, V_ID_FIRMA; + end; + ---------------------------------------------------------------------------------------- + procedure grupinsproc(V_GRUP IN VARCHAR2, + V_ID_TATA IN NUMBER, + V_ID_UTILAD IN NUMBER) is + V_ID_GRUP DEF_GRUP.ID_GRUP%TYPE; + lnAparitii NUMBER(3); + begin + EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM DEF_GRUP WHERE STERS=0 AND GRUP=:1' + INTO lnAparitii + USING V_GRUP; + + IF lnAparitii > 0 THEN + RAISE_APPLICATION_ERROR(-20005, + 'Mai exista un grup cu acelasi nume!'); + END IF; + + EXECUTE IMMEDIATE 'INSERT INTO DEF_GRUP(GRUP,ID_TATA,ID_UTILOP,DATAORA) ' || + 'VALUES (:1,:2,:3,SYSDATE) RETURNING ID_GRUP INTO :4' + USING V_GRUP, V_ID_TATA, V_ID_UTILAD + RETURNING INTO V_ID_GRUP; + + IF V_ID_TATA != -1 THEN + pack_drepturi.adauga_drepturi_grup(V_ID_GRUP, V_ID_TATA, V_ID_UTILAD); + END IF; + + end; + ---------------------------------------------------------------------------------------- + procedure grupmodproc(V_ID_GRUP IN NUMBER, + V_GRUP IN VARCHAR2, + V_ID_TATA IN NUMBER, + V_ID_UTILMOD IN NUMBER) is + V_ID_TATA_VECHI DEF_GRUP.ID_TATA%TYPE; + lnCopii NUMBER(3); + lnAparitii NUMBER(3); + begin + EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM DEF_GRUP WHERE STERS=0 AND GRUP=:1 AND ID_GRUP!=:2' + INTO lnAparitii + USING V_GRUP, V_ID_GRUP; + + IF lnAparitii > 0 THEN + RAISE_APPLICATION_ERROR(-20005, + 'Mai exista un grup cu acelasi nume!'); + END IF; + + EXECUTE IMMEDIATE 'SELECT ID_TATA FROM DEF_GRUP WHERE STERS=0 AND ID_GRUP=:1' + INTO V_ID_TATA_VECHI + USING V_ID_GRUP; + + EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM DEF_GRUP WHERE STERS=0 AND ID_TATA=:1' + INTO lnCopii + USING V_ID_GRUP; + + IF lnCopii > 0 AND V_ID_TATA_VECHI != V_ID_TATA THEN + RAISE_APPLICATION_ERROR(-20005, + 'Nu se poate modifica grupul superior al acestui grup,deoarece are definite subgrupuri!'); + END IF; + + EXECUTE IMMEDIATE 'UPDATE DEF_GRUP SET GRUP=:1,ID_TATA=:2,ID_UTILOP=:3,DATAORA=SYSDATE ' || + 'WHERE ID_GRUP=:4' + USING V_GRUP, V_ID_TATA, V_ID_UTILMOD, V_ID_GRUP; + + IF V_ID_TATA_VECHI != V_ID_TATA THEN + pack_drepturi.modifica_drepturi_grup(V_ID_GRUP, + V_ID_TATA, + V_ID_UTILMOD); + END IF; + + end; + ---------------------------------------------------------------------------------------- + procedure grupdelproc(V_ID_GRUP IN NUMBER, V_ID_UTILS IN NUMBER) is + lnCopii NUMBER(3); + begin + IF V_ID_GRUP = 0 THEN + RAISE_APPLICATION_ERROR(-20005, 'Nu puteti sterge acest grup!'); + END IF; + + EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM DEF_GRUP WHERE STERS=0 AND ID_TATA=:1' + INTO lnCopii + USING V_ID_GRUP; + + IF lnCopii > 0 THEN + RAISE_APPLICATION_ERROR(-20005, + 'Nu se poate sterge acest grup,deoarece are definite subgrupuri!'); + END IF; + + EXECUTE IMMEDIATE 'UPDATE DEF_GRUP SET STERS=1,ID_UTILOP=:1,DATAORA=SYSDATE ' || + 'WHERE ID_GRUP=:2' + USING V_ID_UTILS, V_ID_GRUP; + + pack_drepturi.sterge_drepturi_grup(V_ID_GRUP, V_ID_UTILS); + end; + ---------------------------------------------------------------------------------------- + procedure grupdreptinsproc(V_ID_GRUP IN NUMBER, + V_ID_PROGRAM IN NUMBER, + V_ACCES IN VARCHAR2, + V_ID_UTILAD IN NUMBER) is + lcGrup VARCHAR2(50); + lnIdGrup DEF_GRUP.ID_GRUP%TYPE; + lnGrupuri NUMBER(10); + lnSucces NUMBER(10); + lcSql VARCHAR2(500); + begin + EXECUTE IMMEDIATE 'SELECT GRUP FROM VDEF_GRUP WHERE ID_GRUP=:1' + INTO lcGrup + USING V_ID_GRUP; + + lcGrup := '%\' || lcGrup || '%'; + + lcSql := 'SELECT ID_GRUP FROM VDEF_GRUP WHERE TATA LIKE :1'; + lnGrupuri := dbms_sql.open_cursor(); + dbms_sql.parse(lnGrupuri, lcSql, dbms_sql.native); + dbms_sql.define_column(lnGrupuri, 1, lnIdGrup); + dbms_sql.bind_variable(lnGrupuri, ':1', lcGrup); + + lnSucces := dbms_sql.execute(lnGrupuri); + LOOP + EXIT WHEN dbms_sql.fetch_rows(lnGrupuri) = 0; + dbms_sql.column_value(lnGrupuri, 1, lnIdGrup); + + EXECUTE IMMEDIATE 'INSERT INTO DEF_GRUP_DREPT(ID_GRUP,ID_PROGRAM,ID_UTILOP,DATAORA) ' || + 'VALUES (:1,:2,:3,SYSDATE)' + USING lnIdGrup, V_ID_PROGRAM, V_ID_UTILAD; + + IF V_ACCES IS NOT NULL THEN + pack_drepturi.adauga_drepturi_obiecte(lnIdGrup, + V_ID_PROGRAM, + V_ACCES, + V_ID_UTILAD); + END IF; + END LOOP; + DBMS_SQL.CLOSE_CURSOR(lnGrupuri); + end; + ---------------------------------------------------------------------------------------- + procedure grupdreptmodproc(V_ID_GRUP IN NUMBER, + V_ID_PROGRAM IN NUMBER, + V_ACCES IN VARCHAR2, + V_ID_UTILMOD IN NUMBER) is + lcGrup VARCHAR2(50); + lnIdGrup DEF_GRUP.ID_GRUP%TYPE; + lnGrupuri NUMBER(10); + lnSucces NUMBER(10); + lcSql VARCHAR2(500); + begin + EXECUTE IMMEDIATE 'SELECT GRUP FROM VDEF_GRUP WHERE ID_GRUP=:1' + INTO lcGrup + USING V_ID_GRUP; + + lcGrup := '%\' || lcGrup || '%'; + + lcSql := 'SELECT ID_GRUP FROM VDEF_GRUP WHERE TATA LIKE :1'; + lnGrupuri := dbms_sql.open_cursor(); + dbms_sql.parse(lnGrupuri, lcSql, dbms_sql.native); + dbms_sql.define_column(lnGrupuri, 1, lnIdGrup); + dbms_sql.bind_variable(lnGrupuri, ':1', lcGrup); + + lnSucces := dbms_sql.execute(lnGrupuri); + LOOP + EXIT WHEN dbms_sql.fetch_rows(lnGrupuri) = 0; + dbms_sql.column_value(lnGrupuri, 1, lnIdGrup); + pack_drepturi.sterge_drepturi_obiecte(lnIdGrup, + V_ID_PROGRAM, + V_ID_UTILMOD); + + IF V_ACCES IS NOT NULL THEN + pack_drepturi.adauga_drepturi_obiecte(lnIdGrup, + V_ID_PROGRAM, + V_ACCES, + V_ID_UTILMOD); + END IF; + END LOOP; + DBMS_SQL.CLOSE_CURSOR(lnGrupuri); + end; + ---------------------------------------------------------------------------------------- + procedure grupdreptdelproc(V_ID_DGD IN NUMBER, V_ID_UTILS IN NUMBER) is + V_ID_GRUP DEF_GRUP_DREPT.ID_GRUP%TYPE; + lnIdProgram DEF_GRUP_DREPT.ID_PROGRAM%TYPE; + lcGrup VARCHAR2(50); + lnIdGrup DEF_GRUP.ID_GRUP%TYPE; + lnGrupuri NUMBER(10); + lnSucces NUMBER(10); + lcSql VARCHAR2(500); + begin + EXECUTE IMMEDIATE 'SELECT ID_PROGRAM,ID_GRUP FROM DEF_GRUP_DREPT WHERE ID_DGD=:1' + INTO lnIdProgram, V_ID_GRUP + USING V_ID_DGD; + + EXECUTE IMMEDIATE 'SELECT GRUP FROM VDEF_GRUP WHERE ID_GRUP=:1' + INTO lcGrup + USING V_ID_GRUP; + + lcGrup := '%\' || lcGrup || '%'; + + lcSql := 'SELECT ID_GRUP FROM VDEF_GRUP WHERE TATA LIKE :1'; + lnGrupuri := dbms_sql.open_cursor(); + dbms_sql.parse(lnGrupuri, lcSql, dbms_sql.native); + dbms_sql.define_column(lnGrupuri, 1, lnIdGrup); + dbms_sql.bind_variable(lnGrupuri, ':1', lcGrup); + + lnSucces := dbms_sql.execute(lnGrupuri); + LOOP + EXIT WHEN dbms_sql.fetch_rows(lnGrupuri) = 0; + dbms_sql.column_value(lnGrupuri, 1, lnIdGrup); + + EXECUTE IMMEDIATE 'UPDATE DEF_GRUP_DREPT SET STERS=1,ID_UTILOP=:1,' || + 'DATAORA=SYSDATE WHERE STERS=0 AND ' || + 'ID_GRUP=:2 AND ID_PROGRAM=:3' + USING V_ID_UTILS, lnIdGrup, lnIdProgram; + + pack_drepturi.sterge_drepturi_obiecte(lnIdGrup, + lnIdProgram, + V_ID_UTILS); + END LOOP; + DBMS_SQL.CLOSE_CURSOR(lnGrupuri); + end; + ---------------------------------------------------------------------------------------- + procedure utildreptinsproc(V_ID_UTIL IN NUMBER, + V_ID_GRUP IN NUMBER, + V_ID_FIRMA IN NUMBER, + V_ID_UTILAD IN NUMBER) is + lnSucces NUMBER(10); + lnFirme NUMBER(2); + lnIdFirma NOM_FIRME.ID_FIRMA%TYPE; + lcSql VARCHAR2(1000); + begin + IF V_ID_FIRMA > -1 THEN + pack_drepturi.adauga_drepturi_firma(V_ID_UTIL, + V_ID_GRUP, + V_ID_FIRMA, + V_ID_UTILAD); + ELSE + + lcSql := 'SELECT ID_FIRMA FROM V_NOM_FIRME WHERE ID_FIRMA NOT IN ' || + '(SELECT ID_FIRMA FROM VDEF_UTIL_GRUP WHERE ID_UTIL=:1 AND ID_GRUP=:2)'; + + lnFirme := dbms_sql.open_cursor(); + dbms_sql.parse(lnFirme, lcSql, dbms_sql.native); + dbms_sql.define_column(lnFirme, 1, lnIdFirma); + dbms_sql.bind_variable(lnFirme, ':1', V_ID_UTIL); + dbms_sql.bind_variable(lnFirme, ':2', V_ID_GRUP); + + lnSucces := dbms_sql.execute(lnFirme); + LOOP + EXIT WHEN dbms_sql.fetch_rows(lnFirme) = 0; + dbms_sql.column_value(lnFirme, 1, lnIdFirma); + pack_drepturi.adauga_drepturi_firma(V_ID_UTIL, + V_ID_GRUP, + lnIdFirma, + V_ID_UTILAD); + + END LOOP; + dbms_sql.close_cursor(lnFirme); + END IF; + end; + ---------------------------------------------------------------------------------------- + procedure utildreptmodproc(V_ID_DUG IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ID_GRUP IN NUMBER, + V_ID_FIRMA IN NUMBER, + V_ID_UTILMOD IN NUMBER) is + lnSucces NUMBER(10); + lnFirme NUMBER(2); + lnIdFirma NOM_FIRME.ID_FIRMA%TYPE; + lcSql VARCHAR2(1000); + begin + IF V_ID_FIRMA > -1 THEN + pack_drepturi.sterge_drepturi_firma(V_ID_DUG, V_ID_UTILMOD); + pack_drepturi.adauga_drepturi_firma(V_ID_UTIL, + V_ID_GRUP, + V_ID_FIRMA, + V_ID_UTILMOD); + ELSE + + lcSql := 'SELECT ID_FIRMA FROM V_NOM_FIRME WHERE ID_FIRMA NOT IN ' || + '(SELECT ID_FIRMA FROM VDEF_UTIL_GRUP WHERE ID_UTIL=:1 AND ID_GRUP=:2)'; + lnFirme := dbms_sql.open_cursor(); + dbms_sql.parse(lnFirme, lcSql, dbms_sql.native); + dbms_sql.define_column(lnFirme, 1, lnIdFirma); + dbms_sql.bind_variable(lnFirme, ':1', V_ID_UTIL); + dbms_sql.bind_variable(lnFirme, ':2', V_ID_GRUP); + + lnSucces := dbms_sql.execute(lnFirme); + LOOP + EXIT WHEN dbms_sql.fetch_rows(lnFirme) = 0; + dbms_sql.column_value(lnFirme, 1, lnIdFirma); + pack_drepturi.adauga_drepturi_firma(V_ID_UTIL, + V_ID_GRUP, + lnIdFirma, + V_ID_UTILMOD); + + END LOOP; + dbms_sql.close_cursor(lnFirme); + END IF; + end; + ---------------------------------------------------------------------------------------- + procedure utildreptdelproc(V_ID_DUG IN NUMBER, V_ID_UTILS IN NUMBER) is + begin + pack_drepturi.sterge_drepturi_firma(V_ID_DUG, V_ID_UTILS); + + end; + ---------------------------------------------------------------------------------------- + procedure adauga_drepturi_firma(V_ID_UTIL IN NUMBER, + V_ID_GRUP IN NUMBER, + V_ID_FIRMA IN NUMBER, + V_ID_UTILAD IN NUMBER) is + lnAparitii NUMBER(10); + lcFirma VARCHAR2(100); + begin + EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM DEF_UTIL_GRUP WHERE ID_UTIL=:1 AND ID_FIRMA=:2 ' || + 'AND STERS=0' + INTO lnAparitii + USING V_ID_UTIL, V_ID_FIRMA; + + IF lnAparitii > 0 THEN + EXECUTE IMMEDIATE 'SELECT FIRMA FROM V_NOM_FIRME WHERE ID_FIRMA=:1' + INTO lcFirma + USING V_ID_FIRMA; + RAISE_APPLICATION_ERROR(-20005, + 'Acest utilizator mai are drepturi pe firma ' || + lcFirma); + ELSE + EXECUTE IMMEDIATE 'INSERT INTO DEF_UTIL_GRUP(ID_UTIL,ID_GRUP,ID_FIRMA,ID_UTILOP,DATAORA) ' || + 'VALUES (:1,:2,:3,:4,SYSDATE)' + USING V_ID_UTIL, V_ID_GRUP, V_ID_FIRMA, V_ID_UTILAD; + END IF; + end; + ---------------------------------------------------------------------------------------- + procedure modifica_drepturi_firma(V_ID_DUG IN NUMBER, + V_ID_UTIL IN NUMBER, + V_ID_GRUP IN NUMBER, + V_ID_FIRMA IN NUMBER, + V_ID_UTILMOD IN NUMBER) is + begin + pack_drepturi.sterge_drepturi_firma(V_ID_DUG, V_ID_UTILMOD); + pack_drepturi.adauga_drepturi_firma(V_ID_UTIL, + V_ID_GRUP, + V_ID_FIRMA, + V_ID_UTILMOD); + end; + ---------------------------------------------------------------------------------------- + procedure sterge_drepturi_firma(V_ID_DUG IN NUMBER, V_ID_UTILS IN NUMBER) is + begin + EXECUTE IMMEDIATE 'UPDATE DEF_UTIL_GRUP SET STERS=1,ID_UTILOP=:1,DATAORA=SYSDATE ' || + 'WHERE ID_DUG=:2' + USING V_ID_UTILS, V_ID_DUG; + end; + ---------------------------------------------------------------------------------------- + procedure adauga_drepturi_grup(V_ID_GRUP IN NUMBER, + V_ID_TATA IN NUMBER, + V_ID_UTILAD IN NUMBER) is + begin + EXECUTE IMMEDIATE 'INSERT INTO DEF_GRUP_DREPT(ID_GRUP,ID_PROGRAM,ID_UTILOP,DATAORA) ' || + 'SELECT :1 AS ID_GRUP,ID_PROGRAM,:2 AS ID_UTILOP,SYSDATE AS DATAORA FROM ' || + 'DEF_GRUP_DREPT WHERE STERS=0 AND ID_GRUP=:3' + USING V_ID_GRUP, V_ID_UTILAD, V_ID_TATA; + + EXECUTE IMMEDIATE 'INSERT INTO DEF_GRUP_DREPT_OBIECTE (ID_OBIECT,ID_GRUP,ID_UTILOP,' || + 'DATAORA) SELECT ID_OBIECT,:1 AS ID_GRUP,:2 AS ID_UTILOP,SYSDATE AS DATAORA FROM ' || + 'DEF_GRUP_DREPT_OBIECTE WHERE STERS=0 AND ID_GRUP=:3' + USING V_ID_GRUP, V_ID_UTILAD, V_ID_TATA; + end; + ---------------------------------------------------------------------------------------- + procedure modifica_drepturi_grup(V_ID_GRUP IN NUMBER, + V_ID_TATA IN NUMBER, + V_ID_UTILMOD IN NUMBER) is + begin + pack_drepturi.sterge_drepturi_grup(V_ID_GRUP, V_ID_UTILMOD); + + IF V_ID_TATA != -1 THEN + pack_drepturi.adauga_drepturi_grup(V_ID_GRUP, + V_ID_TATA, + V_ID_UTILMOD); + END IF; + end; + ---------------------------------------------------------------------------------------- + procedure sterge_drepturi_grup(V_ID_GRUP IN NUMBER, V_ID_UTILS IN NUMBER) is + begin + EXECUTE IMMEDIATE 'UPDATE DEF_GRUP_DREPT SET STERS=1,ID_UTILOP=:1,DATAORA=SYSDATE ' || + 'WHERE ID_GRUP=:2 AND STERS=0' + USING V_ID_UTILS, V_ID_GRUP; + + EXECUTE IMMEDIATE 'UPDATE DEF_GRUP_DREPT_OBIECTE SET STERS=1,ID_UTILOP=:1,DATAORA=SYSDATE ' || + 'WHERE ID_GRUP=:2 AND STERS=0' + USING V_ID_UTILS, V_ID_GRUP; + end; + ---------------------------------------------------------------------------------------- + procedure adauga_drepturi_obiecte(V_ID_GRUP IN NUMBER, + V_ID_PROGRAM IN NUMBER, + V_ACCES IN VARCHAR2, + V_ID_UTILAD IN NUMBER) is + lcSir VARCHAR2(10000); + lcAcces VARCHAR2(10); + lnPozitie NUMBER(20); + lnIesire NUMBER(1); + lnCaractere NUMBER(2); + lnIdObiect NUMBER(10); + lnLungime NUMBER(10); + begin + lcSir := v_acces; + lnLungime := LENGTH(v_acces); + lnPozitie := 1; + + loop + exit when lnPozitie > lnLungime; + lcAcces := ''; + lnCaractere := 0; + lnIesire := 0; + + loop + if (ascii(substr(lcSir, lnPozitie + lnCaractere, 1)) between 48 and 57 and + ascii(substr(lcSir, lnPozitie + lnCaractere + 1, 1)) not between 48 and 57) or + (lnPozitie + lnCaractere = lnLungime) then + lnIesire := 1; + end if; + lnCaractere := lnCaractere + 1; + exit when lnIesire = 1; + end loop; + + lcAcces := substr(lcSir, lnPozitie, lnCaractere); + lnPozitie := lnPozitie + lnCaractere; + + EXECUTE IMMEDIATE 'SELECT ID_OBIECT FROM VDEF_OBIECTE WHERE CHEIE=:1 AND ID_PROGRAM=:2' + INTO lnIdObiect + USING lcAcces, v_id_program; + + EXECUTE IMMEDIATE 'INSERT INTO DEF_GRUP_DREPT_OBIECTE' || + '(ID_GRUP,ID_OBIECT,ID_UTILOP,DATAORA) VALUES(:1,:2,:3,SYSDATE)' + USING v_id_grup, lnIdObiect, v_id_utilad; + end loop; + end; + ---------------------------------------------------------------------------------------- + procedure sterge_drepturi_obiecte(V_ID_GRUP IN NUMBER, + V_ID_PROGRAM IN NUMBER, + V_ID_UTILS IN NUMBER) is + begin + EXECUTE IMMEDIATE 'UPDATE DEF_GRUP_DREPT_OBIECTE SET STERS=1,ID_UTILOP=:1,' || + 'DATAORA=SYSDATE WHERE ID_GRUP=:2 AND ' || + 'ID_OBIECT IN (SELECT ID_OBIECT FROM DEF_OBIECTE WHERE ' || + 'ID_PROGRAM=:3 AND STERS=0) AND STERS=0' + USING v_id_utils, v_id_grup, v_id_program; + end; + ---------------------------------------------------------------------------------------- + procedure programe_grup(V_ID_GRUP IN DEF_GRUP.ID_GRUP%TYPE, + CRS_PROGRAME OUT PACK_TYPES.tip_cursor) is + V_ID_TATA DEF_GRUP.ID_TATA%TYPE; + lcSelect varchar2(1000); + begin + EXECUTE IMMEDIATE 'SELECT ID_TATA FROM VDEF_GRUP WHERE ID_GRUP = :1' + INTO V_ID_TATA + USING V_ID_GRUP; + + IF V_ID_TATA = -1 THEN + lcSelect := 'SELECT IDE_PROGRAM,NUME FROM VDEF_PROGRAME WHERE INSTALAT=1 ' || + 'AND IDE_PROGRAM NOT IN (SELECT ID_PROGRAM FROM VDEF_GRUP_DREPT WHERE ' || + 'ID_GRUP=:1) ORDER BY NUME'; + + OPEN CRS_PROGRAME FOR lcSelect + USING V_ID_GRUP; + ELSE + lcSelect := 'SELECT IDE_PROGRAM,NUME FROM VDEF_PROGRAME WHERE IDE_PROGRAM ' || + 'IN (SELECT ID_PROGRAM AS IDE_PROGRAM FROM VDEF_GRUP_DREPT WHERE ID_GRUP=:1 ' || + 'MINUS SELECT ID_PROGRAM FROM VDEF_GRUP_DREPT WHERE ID_GRUP=:2) AND INSTALAT=1 ' || + 'ORDER BY NUME'; + + OPEN CRS_PROGRAME FOR lcSelect + USING V_ID_TATA, V_ID_GRUP; + END IF; + + end; + ---------------------------------------------------------------------------------------- + procedure obiecte_program(V_ID_GRUP IN DEF_GRUP.ID_GRUP%TYPE, + V_ID_PROGRAM IN NUMBER, + CRS_OBIECTE OUT PACK_TYPES.tip_cursor) is + V_ID_TATA DEF_GRUP.ID_TATA%TYPE; + lcSelect varchar2(1000); + begin + EXECUTE IMMEDIATE 'SELECT ID_TATA FROM VDEF_GRUP WHERE ID_GRUP =:1' + INTO V_ID_TATA + USING V_ID_GRUP; + + IF V_ID_TATA = -1 THEN + lcSelect := 'SELECT * FROM VDEF_OBIECTE WHERE ID_PROGRAM=:1 ORDER BY CHEIE'; + + OPEN CRS_OBIECTE FOR lcSelect + USING V_ID_PROGRAM; + ELSE + lcSelect := 'SELECT * FROM VDEF_OBIECTE WHERE ID_OBIECT IN (' || + 'SELECT ID_OBIECT FROM DEF_OBIECTE WHERE STERS=0 AND ID_PROGRAM=:1 ' || + 'START WITH ID_OBIECT IN (SELECT ID_OBIECT FROM DEF_GRUP_DREPT_OBIECTE WHERE ' || + 'STERS=0 AND ID_GRUP=:2) CONNECT BY PRIOR ID_TATA=ID_OBIECT) ORDER BY CHEIE'; + + OPEN CRS_OBIECTE FOR lcSelect + USING V_ID_PROGRAM, V_ID_TATA; + END IF; + + end; + ---------------------------------------------------------------------------------------- + procedure actualizeaza_seq_obiecte is + V_ID NUMBER(10); + V_DIF NUMBER(10); + V_CURR_VAL NUMBER(10); + V_CURR_VAL2 NUMBER(10); + begin + EXECUTE IMMEDIATE 'SELECT NVL(MAX(ID_OBIECT),1) FROM DEF_OBIECTE' + INTO V_ID; + + EXECUTE IMMEDIATE 'SELECT SEQ_DEF_OBIECTE.NEXTVAL FROM DUAL' + INTO V_CURR_VAL; + + V_DIF := V_ID - V_CURR_VAL; + + EXECUTE IMMEDIATE 'ALTER SEQUENCE SEQ_DEF_OBIECTE INCREMENT BY ' || + V_DIF || ' NOMINVALUE '; + EXECUTE IMMEDIATE 'SELECT SEQ_DEF_OBIECTE.NEXTVAL FROM DUAL' + INTO V_CURR_VAL2; + EXECUTE IMMEDIATE 'ALTER SEQUENCE SEQ_DEF_OBIECTE INCREMENT BY 1 MINVALUE 0'; + end; + ---------------------------------------------------------------------------------------- + function verificautilizator(V_UTILIZATOR IN VARCHAR2, + V_PAROLA IN VARCHAR2) return number is + lnIdUtilOrig utilizatori.id_util%type; + lnNrGrup NUMBER(10); + lnIdUtil NUMBER(10); + lnCheckSum NUMBER(2); + begin + begin + EXECUTE IMMEDIATE 'SELECT ID_UTIL FROM UTILIZATORI ' || + 'WHERE UTILIZATOR=:1 AND PAROLA=:2 ' || + 'AND INACTIV=0 AND STERS=0' + INTO lnIdUtilOrig + USING V_UTILIZATOR, V_PAROLA; + + begin + EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM DEF_UTIL_GRUP ' || + 'WHERE STERS=0 AND ID_UTIL=:1 AND ID_GRUP=0' + INTO lnNrGrup + USING lnIdUtilOrig; + exception + when NO_DATA_FOUND then + lnNrGrup := -1; + end; + + lnCheckSum := pack_drepturi.calculeaza_checksum(lnIdUtilOrig, + lnNrGrup); + lnIdUtil := lnIdUtilOrig * 100 + lnCheckSum; + exception + when NO_DATA_FOUND then + lnIdUtil := -1; + end; + return lnIdUtil; + end; + ---------------------------------------------------------------------------------------- + function getid_obiect return number is + lnIdObiect obiecte.id_obiect%type; + begin + select seq_def_obiecte.nextval into lnIdObiect from dual; + return lnIdObiect; + end; + ---------------------------------------------------------------------------------------- + function calculeaza_checksum(V_ID_UTIL IN NUMBER, V_NR_GRUP IN NUMBER) + return number is + lnNumar NUMBER(10); + lnSuma NUMBER(10); + lnCheckSum NUMBER(2); + begin + lnSuma := 0; + lnNumar := V_ID_UTIL; + LOOP + EXIT WHEN lnNumar = 0; + lnSuma := lnSuma + MOD(lnNumar, 10); + lnNumar := TRUNC(lnNumar / 10); + END LOOP; + + lnCheckSum := 13 - MOD(lnSuma, 13); + IF V_NR_GRUP < 1 THEN + lnCheckSum := lnCheckSum - 1; + END IF; + + return lnCheckSum; + end; +end PACK_DREPTURI; +/ + +prompt +prompt Creating trigger TRG_DEF_GDO_BEFOINS +prompt ==================================== +prompt +create or replace trigger TRG_DEF_GDO_BEFOINS +before insert on DEF_GRUP_DREPT_OBIECTE +referencing old as old new as new +for each row +begin +select SEQ_DEF_GDO.NEXTVAL into :new.ID_DGDO from dual; +end; +/ + +prompt +prompt Creating trigger TRG_DEF_GRUP_BEFOINS +prompt ===================================== +prompt +create or replace trigger TRG_DEF_GRUP_BEFOINS +before insert on DEF_GRUP +referencing old as old new as new +for each row +begin +select SEQ_DEF_GRUP.NEXTVAL into :new.ID_GRUP from dual; +end; +/ + +prompt +prompt Creating trigger TRG_DEF_GRUP_DREPT_BEFOINS +prompt =========================================== +prompt +create or replace trigger TRG_DEF_GRUP_DREPT_BEFOINS +before insert on DEF_GRUP_DREPT +referencing old as old new as new +for each row +begin +select SEQ_DEF_GRUP_DREPT.NEXTVAL into :new.ID_DGD from dual; +end; +/ + +prompt +prompt Creating trigger TRG_DEF_OBIECTE_BEFOINS +prompt ======================================== +prompt +create or replace trigger TRG_DEF_OBIECTE_BEFOINS +before insert on DEF_OBIECTE +referencing old as old new as new +for each row +begin +select SEQ_DEF_OBIECTE.NEXTVAL into :new.ID_OBIECT from dual; +end; +/ + +prompt +prompt Creating trigger TRG_DEF_PROGRAME_BEFOINS +prompt ========================================= +prompt +create or replace trigger TRG_DEF_PROGRAME_BEFOINS +before insert on DEF_PROGRAME +referencing old as old new as new +for each row +begin +select SEQ_DEF_PROGRAME.NEXTVAL into :new.ID_PROG from dual; +end; +/ + +prompt +prompt Creating trigger TRG_DEF_UTIL_GRUP_BEFOINS +prompt ========================================== +prompt +create or replace trigger TRG_DEF_UTIL_GRUP_BEFOINS +before insert on DEF_UTIL_GRUP +referencing old as old new as new +for each row +begin +select SEQ_DEF_UTIL_GRUP.NEXTVAL into :new.ID_DUG from dual; +end; +/ + +CREATE OR REPLACE VIEW V_NOM_FIRME AS +SELECT ID_FIRMA, FIRMA, FSCURT, COD_FISCAL, REG_COMERT,BANCA1, CONT_BANCA1,BANCA2, CONT_BANCA2,BANCA3, CONT_BANCA3, +ADRESA,COD_FIRMA,ID_MAMA,MAMA,SUCURSALA,ID_LOC,PERSOANA_JURIDICA,CODANG,NUME,PRENUME,TELEFON, FAX,EMAIL,OASP, CAPITAL_SOC_VAR,CAPITAL_SOC_SUB,PUNCT_LUC,CAEN,SCHEMA,LOCALITATE,TELEFON2,TELEFON3 +FROM NOM_FIRME WHERE STERS=0; + +alter table utilizatori add dataora date default sysdate; + +alter table utilizatori add id_utilop number(5); + +alter table nom_firme add telefon2 varchar2(20); + +alter table nom_firme add telefon3 varchar2(20); + +alter table nom_firme add id_utilop number(10); + +alter table nom_firme add dataora date default sysdate; + +alter table nom_firme add sters number(1) default 0; + +update nom_firme set sters=0; + +alter table def_grup disable all triggers; + +insert into def_grup(grup,id_tata,id_utilop,dataora) values ('ADMINISTRARE',-1,1,SYSDATE); + +alter tabel def_grup enable all triggers; + +alter table nom_programe disable all triggers; + +insert into nom_programe (id_program,denumire,descriere) values(0,'ROASTART','Start'); + +alter table nom_programe enable all triggers; + +insert into def_grup_drept(id_grup,id_program,id_utilop,dataora) values (0,0,1,SYSDATE); + +alter table nom_firme disable all triggers; + +insert into nom_firme(firma,id_firma,schema,sters,id_utilop,dataora) values('START',0,'',1,1,SYSDATE); + +alter table nom_firme enable all triggers; + +insert into def_util_grup(id_util,id_grup,id_firma,id_utilop,dataora) values (1,0,0,1,SYSDATE); + +spool off diff --git a/COMUN/Drepturi utilizatori/instructiuni drepturi.txt b/COMUN/Drepturi utilizatori/instructiuni drepturi.txt new file mode 100644 index 0000000..ffbc3d8 --- /dev/null +++ b/COMUN/Drepturi utilizatori/instructiuni drepturi.txt @@ -0,0 +1,47 @@ + - pe forme : DO_DEFAULT pe init + - trebuie completate cbuton1,cbuton2,cbuton3,cbuton4 cu numele butoanelor separate prin [;] + - daca glLunaInchisa, atunci visible=.F. + - pe click-urile de la cw: se muta tot in do_actiune ; de completat nid_cw si ntip ; linactiv=.T. daca se doreste ca cw sa fie enabled=.F. pentru toti utilizatorii + - imaginile butoanelor trebuie sa fie bazate pe OFUNDAL.IMAGINE + modificare pictureup,picturedown,mouseenter,mouseleave,do_actiune,click,picture + - trebuie completate proprietatile nid_img,ntip,ccod ale imaginilor ; de completat DODEFAULT pe click + - de completat cbuton1,... de la _frmbase + - verifica_drepturi('oprinc','pagefr1') in princ.show si unde se apeleaza DO start_firma IN ostartfirma.prg + - butoanele de modificare,stergere,refacere,excel si listare executa mai intai inainte_de_do_XXX + - daca se modifica visible = .T. pe forma pentru butoane, atunci trebuie modificate si proprietatile lactiv corespunzatoare in cazul in care butoanele executa inainte_de_do (do_modifica, do_sterge, do_refacere sau do_excel) + - de adaugat acces_meniu2 ( pentru programele care nu au definite obiecte ) sau acces_meniu ( pentru prog. care au definite obiectele ) + + VALORI PENTRU NTIP: +(0 - introducere\vizualizare simpla ; 1 - raport; 2 - registru; 3 - balanta\inreg. de parteneri; 4 - vizualizare ; 5 - personalizat) + 0 - INTRODUCERE + 1 - RAPORT + Acces: + - export in Excel + - listare + 2 - BALANTA/INREGISTRARI DE PART. + Acces : + - export in Excel + - listare + - modificare + - refacere/stergere + 3 - REGISTRU + Acces : + - export in Excel + - listare + - modificare + - refacere/stergere + 4 - VIZUALIZARI + Acces : + - export in Excel + - listare + - modificare + - refacere/stergere + - vizualizare inreg. ( doar inreg. proprii ) + - vizualizarea tuturor inreg. + 5 - PERSONALIZAT + Acces : + - export in Excel + - listare + - modificare + - stergere + - altele... + - altele... \ No newline at end of file diff --git a/COMUN/Plugin/listare_facturi_email_cu_atasament_factura_si_recapitulatie.prg b/COMUN/Plugin/listare_facturi_email_cu_atasament_factura_si_recapitulatie.prg new file mode 100644 index 0000000..e9707a1 --- /dev/null +++ b/COMUN/Plugin/listare_facturi_email_cu_atasament_factura_si_recapitulatie.prg @@ -0,0 +1,150 @@ +* PLUGIN email factura, recapitulatie si alte documente pdf cu aceeasi structura ca factura.pdf +* MARIUS MUTU +* V 23.02.2016 +* INSTALARE: Se copie fisierul prg in directorul ROA\[APLICATIE]\PLUGIN\ +* FOLOSIRE: In formularul Vizualizare facturi se apasa butonul listare +* copiat din oproceduri_facturare.prg:email_facturi + +Lparameters toFacturiForm, toDate +*** Trimit email la facturile alese, sau la factura de pe inregistrarea curenta + +Local laFiles[1], lcBody, lcClient, lcDir, lcEmail, lcErrorMessage, lcFacturaFile, lcFile +Local lcFileName, lcFiles, lcNume, lcRaportEmail, lcRecapitulatiaFile, lcScheletonFile +Local lcSerieFactura, lcSubject, lcTipDocument, lcTo, lcWhere, ldDataFactura, llClearErrors +Local llJustPDF, llListareFactura, llListareRecapitulatia, llListareAlteDocumente, llSilent, llSucces, lnFile, lnFiles +Local lnIdVanzare, lnNumarFactura, lnRecno, loDate, loMail + +loMail = getoEmail() && email.prg + +lcWhere = "" +llListareFactura = .T. +llGenerareFactura = .T. +llListareRecapitulatia = .T. +llGenerareRecapitulatia = .T. +llListareAlteDocumente = .T. +If Type('toDate') = 'O' + llListareFactura = Iif(Type('toDate.nListareFactura') = 'N', Inlist(toDate.nListareFactura, 1, 2), .T.) + llGenerareFactura = Iif(Type('toDate.nListareFactura') = 'N', toDate.nListareFactura = 2, .F.) + + llListareRecapitulatia = Iif(Type('toDate.nListareRecapitulatia') = 'N', Inlist(toDate.nListareRecapitulatia, 1, 2), .F.) + llGenerareRecapitulatia = Iif(Type('toDate.nListareRecapitulatia') = 'N', toDate.nListareRecapitulatia = 2, .F.) + + llListareAlteDocumente = Iif(Type('toDate.nListareAlteDocumente') = 'L', toDate.nListareAlteDocumente = 1, .F.) +Endif + +Select crsFacturi +lnRecno = Recno() +Locate For ales = 1 +If !Found() + Goto m.lnRecno + lcWhere = m.lcWhere + 'recno() = ' + Alltrim(Str(m.lnRecno)) +Else + lcWhere = m.lcWhere + 'ales = 1' +Endif + +lcRaportEmail = Addbs(gcTempPath) + "email_" + Ttoc(Datetime(), 1) + '.xls' + +Select F.id_vanzare, F.data_act, F.numar_act, F.serie_act, F.total_fara_tva, F.total_tva, F.total_cu_tva, F.client, ; + email_facturare, Cast(Null As L) As email_succes, Cast(Null As c(250)) As email_mesaj ; + From crsFacturi F ; + Where &lcWhere ; + Into Cursor cEmail Readwrite + +lcSubjectTemplate = loMail.cSubject +lcBodyTemplate = loMail.cHtmlBody +Sele cEmail +Scan + lcFiles = "" + ldDataFactura = data_act + lcSerieFactura = Alltrim(serie_act) + lnNumarFactura = numar_act + lcNume = Upper(Alltrim(client)) + lcClient = m.lcNume + lnIdVanzare = id_vanzare + loDate = Null + + lcSubject = m.lcSubjectTemplate + lcSubject = Strtran(m.lcSubject, '', Alltrim(Str(m.lnNumarFactura)), 1, 1, 1) + lcSubject = Strtran(m.lcSubject, '', Alltrim(Dtoc(m.ldDataFactura)), 1, 1, 1) + lcSubject = Strtran(m.lcSubject, '', m.lcClient, 1, 1, 1) + loMail.cSubject = m.lcSubject + + lcBody = m.lcBodyTemplate + lcBody = Strtran(m.lcBody, '', Alltrim(Str(m.lnNumarFactura)), 1, 10, 1) + lcBody = Strtran(m.lcBody, '', Alltrim(Dtoc(m.ldDataFactura)), 1, 10, 1) + lcBody = Strtran(m.lcBody, '', m.lcClient, 1, 10, 1) + loMail.cHtmlBody = m.lcBody + + * Generare PDF factura + lcFacturaFile = GetPDFFacturaFile(m.ldDataFactura, m.lnNumarFactura) + If m.llListareFactura + If !File(m.lcFacturaFile) And m.llGenerareFactura + llSilent = .F. + llJustPDF = .T. + lcTipDocument = 'FACTURA' + loDate = toFacturiForm.do_listare_document(m.lnIdVanzare, m.llSilent, m.llJustPDF, m.lcTipDocument) && .ListareDocument(m.llSilent, m.llJustPDF, "cEmail") + Endif + loMail.EmailSetAttachment(m.lcFacturaFile) + lcFiles = m.lcFiles + Iif(File(m.lcFacturaFile), m.lcFacturaFile, "") + Endif && llListareFactura + + * Generare PDF recapitulatie + lcRecapitulatiaFile = GetPDFRecapitulatiaFile(ldDataFactura, m.lnNumarFactura) + If m.llListareRecapitulatia + If !File(m.lcRecapitulatiaFile) And m.llGenerareRecapitulatia + llSilent = .F. + llJustPDF = .T. + lcTipDocument = 'RECAPITULATIE' + loDate = toFacturiForm.do_listare_document(m.lnIdVanzare, m.llSilent, m.llJustPDF, m.lcTipDocument) && .ListareDocument(m.llSilent, m.llJustPDF, "cEmail") + Endif + loMail.EmailSetAttachment(m.lcRecapitulatiaFile) + lcFiles = m.lcFiles + Iif(File(m.lcRecapitulatiaFile), "," + m.lcRecapitulatiaFile, "") + Endif && llListareRecapitulatia + + * Atasez alte documente cu aceeasi structura ca factura.pdf + If m.llListareAlteDocumente + lcScheletonFile = Strtran(lcFacturaFile, 'factura', '*', 1, 10, 1) && d:\roa\pdf\20200402_12346_*.pdf (_recapitulatia.pdf, _situatie_stationare.pdf, _declaratie_comandant.pdf) + lcDir = Addbs(Justpath(m.lcFacturaFile)) + lnFiles = Adir(laFiles, m.lcScheletonFile) + For lnFile = 1 To m.lnFiles + lcFileName = laFiles[m.lnFile, 1] + * Nu mai atasez factura.pdf si recapitulatie.pdf + If Inlist(Lower(m.lcFileName), Lower(JUSTFNAME(m.lcFacturaFile)), Lower(JUSTFNAME(m.lcRecapitulatiaFile))) + Loop + Endif + lcFile = m.lcDir + m.lcFileName + loMail.EmailSetAttachment(m.lcFile) + lcFiles = m.lcFiles + Iif(File(m.lcFile), m.lcFile, "") + Endfor + Endif && llListareAlteDocumente + + * Email + Wait Window 'Email ' + Alltrim(Transform(Recno('cEmail'))) + '/' + Alltrim(Transform(Reccount('cEmail'))) + ' Client: ' + m.lcClient + ' Factura: ' + Alltrim(Str(m.lnNumarFactura)) Nowait + lcEmail = Alltrim(Nvl(cEmail.email_facturare, '')) && am adaugat direct in crsFacturi.email_facturare, ca sa nu mai folosesc loDate.oClient.email_facturare, daca fisierele pdf sunt deja listate + lcTo = Iif(!Empty(Nvl(m.lcEmail, '')), m.lcEmail, '') + loMail.cTo = m.lcTo + + llSucces = .T. + lcErrorMessage = '' + If loMail.Send() > 0 + llClearErrors = .T. + lcErrorMessage = loMail.GetErrorMessage(m.llClearErrors) + llSucces = .F. + Endif + Replace email_succes With m.llSucces, email_mesaj With Left(m.lcErrorMessage, 250) In cEmail + + If Inkey(0.5) = 27 && 'ESC' + If AMESSAGEBOX('Doriti sa intrerupeti operatia?', 4 + 32, _Screen.Caption) = 6 + Exit + Endif + Endif +Endscan + +Select cEmail +Copy To (m.lcRaportEmail) Type Xl5 +OPEN_DEFAULT_APP(m.lcRaportEmail) + +Use In (Select('cEmail')) + +Select crsFacturi +Go lnRecno diff --git a/COMUN/Plugin/listare_facturi_omv_petrom_pdf_si_xml.prg b/COMUN/Plugin/listare_facturi_omv_petrom_pdf_si_xml.prg new file mode 100644 index 0000000..3efcb2c --- /dev/null +++ b/COMUN/Plugin/listare_facturi_omv_petrom_pdf_si_xml.prg @@ -0,0 +1,175 @@ +Lparameters toFacturiForm, toDate +Local lcBody, lcBodyTemplate, lcClickSignPDF, lcClient, lcContract, lcDivizia, lcEmail +Local lcErrorMessage, lcFacturaFile, lcFileSemnat, lcFiles, lcNume, lcRaportEmail, lcRun, lcSelect +Local lcSerieFactura, lcSql, lcSubject, lcSubjectTemplate, lcTipDocument, lcTo, lcValuta, lcWhere +Local lcXML, lcXMLFile, ldDataFactura, llClearErrors, llForceExit, llGenerareFactura, llInValuta +Local llJustPDF, llListareFactura, llSilent, llSucces, lnCurs, lnIdFact, lnIdVanzare, lnNumarFactura +Local lnOptDivizia, lnRecno, lnValoare, loDate, loMail + +lcSelect = Select() + +lcClickSignPDF = [C:\Program Files (x86)\clickSignPdf\clickSignPdfProfessional.exe] +If !File(m.lcClickSignPDF) + lcClickSignPDF = [C:\Program Files\clickSignPdf\clickSignPdfProfessional.exe] +Endif +If !File(m.lcClickSignPDF) + If AMESSAGEBOX('Nu este instalat clickSIGNpdf.exe! Continuati?',4+32,_Screen.Caption) <> 6 + Return + Endif +Endif + +loMail = getoEmail() && email.prg + +lcWhere = "" +llListareFactura = .T. +llGenerareFactura = .T. +If Type('toDate') = 'O' + llListareFactura = Iif(Type('toDate.nListareFactura') = 'N', Inlist(toDate.nListareFactura, 1, 2), .T.) + llGenerareFactura = Iif(Type('toDate.nListareFactura') = 'N', toDate.nListareFactura = 2, .T.) +Endif + +Select crsFacturi +lnRecno = Recno() +Locate For ales = 1 +If !Found() + Goto m.lnRecno + lcWhere = m.lcWhere + 'recno() = ' + Alltrim(Str(m.lnRecno)) +Else + lcWhere = m.lcWhere + 'ales = 1' +Endif + +lcRaportEmail = Addbs(gcTempPath) + "email_" + Ttoc(Datetime(), 1) + '.xls' + +Select F.id_vanzare, F.data_act, F.numar_act, F.serie_act, F.total_fara_tva, F.total_tva, F.total_cu_tva, F.client, F.valuta, F.contract, F.Curs, F.in_valuta,; + f.valval, F.tvaval, F.totval, F.email_facturare, Cast(Null As L) As email_succes, Cast(Null As c(250)) As email_mesaj ; + From crsFacturi F ; + Where &lcWhere ; + Into Cursor cEmail Readwrite + +lcSubjectTemplate = loMail.cSubject +lcBodyTemplate = loMail.cHtmlBody + +If Reccount('cEmail') > 0 + + lcFiles = "" + Sele cEmail + Scan + ldDataFactura = data_act + lcSerieFactura = Alltrim(serie_act) + lnNumarFactura = numar_act + lcNume = Upper(Alltrim(client)) + lcClient = m.lcNume + lnIdVanzare = id_vanzare + loDate = Null + lcValuta = Upper(Alltrim(valuta)) + lcContract = Alltrim(Nvl(contract, '')) + lnCurs = Curs + llInValuta = (Nvl(in_valuta,0) = 1) + + lcValuta = Upper(Alltrim(Nvl(valuta,''))) + Do Case + Case !m.llInValuta + lcValuta = 'RON' + Case Left(m.lcValuta,3) = 'EUR' && EURO + lcValuta = 'EUR' + Endcase + lnValoare = Iif(m.llInValuta, totval, total_cu_tva) + + lcSubject = m.lcSubjectTemplate + lcSubject = Strtran(m.lcSubject, '', Alltrim(Str(m.lnNumarFactura)), 1, 1, 1) + lcSubject = Strtran(m.lcSubject, '', Alltrim(Dtoc(m.ldDataFactura)), 1, 1, 1) + lcSubject = Strtran(m.lcSubject, '', m.lcClient, 1, 1, 1) + loMail.cSubject = m.lcSubject + + lcBody = m.lcBodyTemplate + lcBody = Strtran(m.lcBody, '', Alltrim(Str(m.lnNumarFactura)), 1, 10, 1) + lcBody = Strtran(m.lcBody, '', Alltrim(Dtoc(m.ldDataFactura)), 1, 10, 1) + lcBody = Strtran(m.lcBody, '', m.lcClient, 1, 10, 1) + loMail.cHtmlBody = m.lcBody + +* Generare PDF factura + lcFacturaFile = GetPDFFacturaFile(m.ldDataFactura, m.lnNumarFactura) + lcFacturaValutaFile = GetPDFFacturaValutaFile(m.ldDataFactura, m.lnNumarFactura) + If m.llListareFactura + If !File(m.lcFacturaFile) And m.llGenerareFactura + llSilent = .F. + llJustPDF = .T. + lcTipDocument = 'FACTURA' + loDate = toFacturiForm.do_listare_document(m.lnIdVanzare, m.llSilent, m.llJustPDF, m.lcTipDocument) && .ListareDocument(m.llSilent, m.llJustPDF, "cEmail") + Endif + Endif && llListareFactura + + If File(m.lcFacturaValutaFile) And File(m.lcFacturaFile) + lnRaspuns = AMESSAGEBOX('Doriti semnarea facturii in valuta (DA) sau a facturii in lei (NU)?',4+32,_Screen.Caption) + If m.lnRaspuns = 6 + lcFacturaFile = m.lcFacturaValutaFile + Endif + Endif +* Semnare PDF +* Lansare utilitar certsign.ro + OPEN_DEFAULT_APP(Justpath(m.lcFacturaFile)) && deschid directorul facturii + If File(m.lcClickSignPDF) + lcRun = [! /N "] + m.lcClickSignPDF + [" -i "] + m.lcFacturaFile + ["] + &lcRun + Endif + + lcFileSemnat = Strtran(m.lcFacturaFile, Juststem(m.lcFacturaFile), Juststem(m.lcFacturaFile) + '_signed') + + AMESSAGEBOX('Se verifica fisierul ' + lcFileSemnat + Chr(13) + Chr(10) + 'Apasati OK cand s-a semnat pdf-ul.',0, _Screen.Caption) +*WAIT WINDOW 'Se asteapta semnarea fisierului ' + m.lcFacturaFile NOWAIT + + llForceExit = .F. + Do While .T. + If File(m.lcFileSemnat) + Exit + Endif + Wait Window 'Se verifica ' + m.lcFileSemnat Nowait + If Inkey(1) = 27 && 'ESC' + If AMESSAGEBOX('Doriti sa intrerupeti operatia?',4+32, _Screen.Caption) = 6 + llForceExit = .T. + Exit + Endif + Endif + Enddo + + If m.llForceExit + Exit + Endif + + If File(m.lcFileSemnat) + loMail.EmailSetAttachment(m.lcFileSemnat) + Endif + +* Email + Wait Window 'Email ' + Alltrim(Transform(Recno('cEmail'))) + '/' + Alltrim(Transform(Reccount('cEmail'))) + ' Client: ' + m.lcClient + ' Factura: ' + Alltrim(Str(m.lnNumarFactura)) Nowait + lcEmail = Alltrim(Nvl(cEmail.email_facturare, '')) && am adaugat direct in crsFacturi.email_facturare, ca sa nu mai folosesc loDate.oClient.email_facturare, daca fisierele pdf sunt deja listate + lcTo = Iif(!Empty(Nvl(m.lcEmail, '')), m.lcEmail, '') + loMail.cTo = m.lcTo + + llSucces = .T. + lcErrorMessage = '' + If loMail.Send() > 0 + llClearErrors = .T. + lcErrorMessage = loMail.GetErrorMessage(m.llClearErrors) + llSucces = .F. + Endif + Replace email_succes With m.llSucces, email_mesaj With Left(m.lcErrorMessage, 250) In cEmail + + If Inkey(0.5) = 27 && 'ESC' + If AMESSAGEBOX('Doriti sa intrerupeti operatia?', 4 + 32, _Screen.Caption) = 6 + Exit + Endif + Endif + Endscan + + Select cEmail + Copy To (m.lcRaportEmail) Type Xl5 + OPEN_DEFAULT_APP(m.lcRaportEmail) +ENDIF && Reccount('cEmail') + +Use In (Select('cEmail')) + +Select (m.lcSelect) + + + diff --git a/COMUN/PluginTemplate/listare_facturi_email_cu_atasament_factura_si_recapitulatie.prg b/COMUN/PluginTemplate/listare_facturi_email_cu_atasament_factura_si_recapitulatie.prg new file mode 100644 index 0000000..e9707a1 --- /dev/null +++ b/COMUN/PluginTemplate/listare_facturi_email_cu_atasament_factura_si_recapitulatie.prg @@ -0,0 +1,150 @@ +* PLUGIN email factura, recapitulatie si alte documente pdf cu aceeasi structura ca factura.pdf +* MARIUS MUTU +* V 23.02.2016 +* INSTALARE: Se copie fisierul prg in directorul ROA\[APLICATIE]\PLUGIN\ +* FOLOSIRE: In formularul Vizualizare facturi se apasa butonul listare +* copiat din oproceduri_facturare.prg:email_facturi + +Lparameters toFacturiForm, toDate +*** Trimit email la facturile alese, sau la factura de pe inregistrarea curenta + +Local laFiles[1], lcBody, lcClient, lcDir, lcEmail, lcErrorMessage, lcFacturaFile, lcFile +Local lcFileName, lcFiles, lcNume, lcRaportEmail, lcRecapitulatiaFile, lcScheletonFile +Local lcSerieFactura, lcSubject, lcTipDocument, lcTo, lcWhere, ldDataFactura, llClearErrors +Local llJustPDF, llListareFactura, llListareRecapitulatia, llListareAlteDocumente, llSilent, llSucces, lnFile, lnFiles +Local lnIdVanzare, lnNumarFactura, lnRecno, loDate, loMail + +loMail = getoEmail() && email.prg + +lcWhere = "" +llListareFactura = .T. +llGenerareFactura = .T. +llListareRecapitulatia = .T. +llGenerareRecapitulatia = .T. +llListareAlteDocumente = .T. +If Type('toDate') = 'O' + llListareFactura = Iif(Type('toDate.nListareFactura') = 'N', Inlist(toDate.nListareFactura, 1, 2), .T.) + llGenerareFactura = Iif(Type('toDate.nListareFactura') = 'N', toDate.nListareFactura = 2, .F.) + + llListareRecapitulatia = Iif(Type('toDate.nListareRecapitulatia') = 'N', Inlist(toDate.nListareRecapitulatia, 1, 2), .F.) + llGenerareRecapitulatia = Iif(Type('toDate.nListareRecapitulatia') = 'N', toDate.nListareRecapitulatia = 2, .F.) + + llListareAlteDocumente = Iif(Type('toDate.nListareAlteDocumente') = 'L', toDate.nListareAlteDocumente = 1, .F.) +Endif + +Select crsFacturi +lnRecno = Recno() +Locate For ales = 1 +If !Found() + Goto m.lnRecno + lcWhere = m.lcWhere + 'recno() = ' + Alltrim(Str(m.lnRecno)) +Else + lcWhere = m.lcWhere + 'ales = 1' +Endif + +lcRaportEmail = Addbs(gcTempPath) + "email_" + Ttoc(Datetime(), 1) + '.xls' + +Select F.id_vanzare, F.data_act, F.numar_act, F.serie_act, F.total_fara_tva, F.total_tva, F.total_cu_tva, F.client, ; + email_facturare, Cast(Null As L) As email_succes, Cast(Null As c(250)) As email_mesaj ; + From crsFacturi F ; + Where &lcWhere ; + Into Cursor cEmail Readwrite + +lcSubjectTemplate = loMail.cSubject +lcBodyTemplate = loMail.cHtmlBody +Sele cEmail +Scan + lcFiles = "" + ldDataFactura = data_act + lcSerieFactura = Alltrim(serie_act) + lnNumarFactura = numar_act + lcNume = Upper(Alltrim(client)) + lcClient = m.lcNume + lnIdVanzare = id_vanzare + loDate = Null + + lcSubject = m.lcSubjectTemplate + lcSubject = Strtran(m.lcSubject, '', Alltrim(Str(m.lnNumarFactura)), 1, 1, 1) + lcSubject = Strtran(m.lcSubject, '', Alltrim(Dtoc(m.ldDataFactura)), 1, 1, 1) + lcSubject = Strtran(m.lcSubject, '', m.lcClient, 1, 1, 1) + loMail.cSubject = m.lcSubject + + lcBody = m.lcBodyTemplate + lcBody = Strtran(m.lcBody, '', Alltrim(Str(m.lnNumarFactura)), 1, 10, 1) + lcBody = Strtran(m.lcBody, '', Alltrim(Dtoc(m.ldDataFactura)), 1, 10, 1) + lcBody = Strtran(m.lcBody, '', m.lcClient, 1, 10, 1) + loMail.cHtmlBody = m.lcBody + + * Generare PDF factura + lcFacturaFile = GetPDFFacturaFile(m.ldDataFactura, m.lnNumarFactura) + If m.llListareFactura + If !File(m.lcFacturaFile) And m.llGenerareFactura + llSilent = .F. + llJustPDF = .T. + lcTipDocument = 'FACTURA' + loDate = toFacturiForm.do_listare_document(m.lnIdVanzare, m.llSilent, m.llJustPDF, m.lcTipDocument) && .ListareDocument(m.llSilent, m.llJustPDF, "cEmail") + Endif + loMail.EmailSetAttachment(m.lcFacturaFile) + lcFiles = m.lcFiles + Iif(File(m.lcFacturaFile), m.lcFacturaFile, "") + Endif && llListareFactura + + * Generare PDF recapitulatie + lcRecapitulatiaFile = GetPDFRecapitulatiaFile(ldDataFactura, m.lnNumarFactura) + If m.llListareRecapitulatia + If !File(m.lcRecapitulatiaFile) And m.llGenerareRecapitulatia + llSilent = .F. + llJustPDF = .T. + lcTipDocument = 'RECAPITULATIE' + loDate = toFacturiForm.do_listare_document(m.lnIdVanzare, m.llSilent, m.llJustPDF, m.lcTipDocument) && .ListareDocument(m.llSilent, m.llJustPDF, "cEmail") + Endif + loMail.EmailSetAttachment(m.lcRecapitulatiaFile) + lcFiles = m.lcFiles + Iif(File(m.lcRecapitulatiaFile), "," + m.lcRecapitulatiaFile, "") + Endif && llListareRecapitulatia + + * Atasez alte documente cu aceeasi structura ca factura.pdf + If m.llListareAlteDocumente + lcScheletonFile = Strtran(lcFacturaFile, 'factura', '*', 1, 10, 1) && d:\roa\pdf\20200402_12346_*.pdf (_recapitulatia.pdf, _situatie_stationare.pdf, _declaratie_comandant.pdf) + lcDir = Addbs(Justpath(m.lcFacturaFile)) + lnFiles = Adir(laFiles, m.lcScheletonFile) + For lnFile = 1 To m.lnFiles + lcFileName = laFiles[m.lnFile, 1] + * Nu mai atasez factura.pdf si recapitulatie.pdf + If Inlist(Lower(m.lcFileName), Lower(JUSTFNAME(m.lcFacturaFile)), Lower(JUSTFNAME(m.lcRecapitulatiaFile))) + Loop + Endif + lcFile = m.lcDir + m.lcFileName + loMail.EmailSetAttachment(m.lcFile) + lcFiles = m.lcFiles + Iif(File(m.lcFile), m.lcFile, "") + Endfor + Endif && llListareAlteDocumente + + * Email + Wait Window 'Email ' + Alltrim(Transform(Recno('cEmail'))) + '/' + Alltrim(Transform(Reccount('cEmail'))) + ' Client: ' + m.lcClient + ' Factura: ' + Alltrim(Str(m.lnNumarFactura)) Nowait + lcEmail = Alltrim(Nvl(cEmail.email_facturare, '')) && am adaugat direct in crsFacturi.email_facturare, ca sa nu mai folosesc loDate.oClient.email_facturare, daca fisierele pdf sunt deja listate + lcTo = Iif(!Empty(Nvl(m.lcEmail, '')), m.lcEmail, '') + loMail.cTo = m.lcTo + + llSucces = .T. + lcErrorMessage = '' + If loMail.Send() > 0 + llClearErrors = .T. + lcErrorMessage = loMail.GetErrorMessage(m.llClearErrors) + llSucces = .F. + Endif + Replace email_succes With m.llSucces, email_mesaj With Left(m.lcErrorMessage, 250) In cEmail + + If Inkey(0.5) = 27 && 'ESC' + If AMESSAGEBOX('Doriti sa intrerupeti operatia?', 4 + 32, _Screen.Caption) = 6 + Exit + Endif + Endif +Endscan + +Select cEmail +Copy To (m.lcRaportEmail) Type Xl5 +OPEN_DEFAULT_APP(m.lcRaportEmail) + +Use In (Select('cEmail')) + +Select crsFacturi +Go lnRecno diff --git a/COMUN/PluginTemplate/listare_facturi_omv_petrom_pdf_si_xml.prg b/COMUN/PluginTemplate/listare_facturi_omv_petrom_pdf_si_xml.prg new file mode 100644 index 0000000..3efcb2c --- /dev/null +++ b/COMUN/PluginTemplate/listare_facturi_omv_petrom_pdf_si_xml.prg @@ -0,0 +1,175 @@ +Lparameters toFacturiForm, toDate +Local lcBody, lcBodyTemplate, lcClickSignPDF, lcClient, lcContract, lcDivizia, lcEmail +Local lcErrorMessage, lcFacturaFile, lcFileSemnat, lcFiles, lcNume, lcRaportEmail, lcRun, lcSelect +Local lcSerieFactura, lcSql, lcSubject, lcSubjectTemplate, lcTipDocument, lcTo, lcValuta, lcWhere +Local lcXML, lcXMLFile, ldDataFactura, llClearErrors, llForceExit, llGenerareFactura, llInValuta +Local llJustPDF, llListareFactura, llSilent, llSucces, lnCurs, lnIdFact, lnIdVanzare, lnNumarFactura +Local lnOptDivizia, lnRecno, lnValoare, loDate, loMail + +lcSelect = Select() + +lcClickSignPDF = [C:\Program Files (x86)\clickSignPdf\clickSignPdfProfessional.exe] +If !File(m.lcClickSignPDF) + lcClickSignPDF = [C:\Program Files\clickSignPdf\clickSignPdfProfessional.exe] +Endif +If !File(m.lcClickSignPDF) + If AMESSAGEBOX('Nu este instalat clickSIGNpdf.exe! Continuati?',4+32,_Screen.Caption) <> 6 + Return + Endif +Endif + +loMail = getoEmail() && email.prg + +lcWhere = "" +llListareFactura = .T. +llGenerareFactura = .T. +If Type('toDate') = 'O' + llListareFactura = Iif(Type('toDate.nListareFactura') = 'N', Inlist(toDate.nListareFactura, 1, 2), .T.) + llGenerareFactura = Iif(Type('toDate.nListareFactura') = 'N', toDate.nListareFactura = 2, .T.) +Endif + +Select crsFacturi +lnRecno = Recno() +Locate For ales = 1 +If !Found() + Goto m.lnRecno + lcWhere = m.lcWhere + 'recno() = ' + Alltrim(Str(m.lnRecno)) +Else + lcWhere = m.lcWhere + 'ales = 1' +Endif + +lcRaportEmail = Addbs(gcTempPath) + "email_" + Ttoc(Datetime(), 1) + '.xls' + +Select F.id_vanzare, F.data_act, F.numar_act, F.serie_act, F.total_fara_tva, F.total_tva, F.total_cu_tva, F.client, F.valuta, F.contract, F.Curs, F.in_valuta,; + f.valval, F.tvaval, F.totval, F.email_facturare, Cast(Null As L) As email_succes, Cast(Null As c(250)) As email_mesaj ; + From crsFacturi F ; + Where &lcWhere ; + Into Cursor cEmail Readwrite + +lcSubjectTemplate = loMail.cSubject +lcBodyTemplate = loMail.cHtmlBody + +If Reccount('cEmail') > 0 + + lcFiles = "" + Sele cEmail + Scan + ldDataFactura = data_act + lcSerieFactura = Alltrim(serie_act) + lnNumarFactura = numar_act + lcNume = Upper(Alltrim(client)) + lcClient = m.lcNume + lnIdVanzare = id_vanzare + loDate = Null + lcValuta = Upper(Alltrim(valuta)) + lcContract = Alltrim(Nvl(contract, '')) + lnCurs = Curs + llInValuta = (Nvl(in_valuta,0) = 1) + + lcValuta = Upper(Alltrim(Nvl(valuta,''))) + Do Case + Case !m.llInValuta + lcValuta = 'RON' + Case Left(m.lcValuta,3) = 'EUR' && EURO + lcValuta = 'EUR' + Endcase + lnValoare = Iif(m.llInValuta, totval, total_cu_tva) + + lcSubject = m.lcSubjectTemplate + lcSubject = Strtran(m.lcSubject, '', Alltrim(Str(m.lnNumarFactura)), 1, 1, 1) + lcSubject = Strtran(m.lcSubject, '', Alltrim(Dtoc(m.ldDataFactura)), 1, 1, 1) + lcSubject = Strtran(m.lcSubject, '', m.lcClient, 1, 1, 1) + loMail.cSubject = m.lcSubject + + lcBody = m.lcBodyTemplate + lcBody = Strtran(m.lcBody, '', Alltrim(Str(m.lnNumarFactura)), 1, 10, 1) + lcBody = Strtran(m.lcBody, '', Alltrim(Dtoc(m.ldDataFactura)), 1, 10, 1) + lcBody = Strtran(m.lcBody, '', m.lcClient, 1, 10, 1) + loMail.cHtmlBody = m.lcBody + +* Generare PDF factura + lcFacturaFile = GetPDFFacturaFile(m.ldDataFactura, m.lnNumarFactura) + lcFacturaValutaFile = GetPDFFacturaValutaFile(m.ldDataFactura, m.lnNumarFactura) + If m.llListareFactura + If !File(m.lcFacturaFile) And m.llGenerareFactura + llSilent = .F. + llJustPDF = .T. + lcTipDocument = 'FACTURA' + loDate = toFacturiForm.do_listare_document(m.lnIdVanzare, m.llSilent, m.llJustPDF, m.lcTipDocument) && .ListareDocument(m.llSilent, m.llJustPDF, "cEmail") + Endif + Endif && llListareFactura + + If File(m.lcFacturaValutaFile) And File(m.lcFacturaFile) + lnRaspuns = AMESSAGEBOX('Doriti semnarea facturii in valuta (DA) sau a facturii in lei (NU)?',4+32,_Screen.Caption) + If m.lnRaspuns = 6 + lcFacturaFile = m.lcFacturaValutaFile + Endif + Endif +* Semnare PDF +* Lansare utilitar certsign.ro + OPEN_DEFAULT_APP(Justpath(m.lcFacturaFile)) && deschid directorul facturii + If File(m.lcClickSignPDF) + lcRun = [! /N "] + m.lcClickSignPDF + [" -i "] + m.lcFacturaFile + ["] + &lcRun + Endif + + lcFileSemnat = Strtran(m.lcFacturaFile, Juststem(m.lcFacturaFile), Juststem(m.lcFacturaFile) + '_signed') + + AMESSAGEBOX('Se verifica fisierul ' + lcFileSemnat + Chr(13) + Chr(10) + 'Apasati OK cand s-a semnat pdf-ul.',0, _Screen.Caption) +*WAIT WINDOW 'Se asteapta semnarea fisierului ' + m.lcFacturaFile NOWAIT + + llForceExit = .F. + Do While .T. + If File(m.lcFileSemnat) + Exit + Endif + Wait Window 'Se verifica ' + m.lcFileSemnat Nowait + If Inkey(1) = 27 && 'ESC' + If AMESSAGEBOX('Doriti sa intrerupeti operatia?',4+32, _Screen.Caption) = 6 + llForceExit = .T. + Exit + Endif + Endif + Enddo + + If m.llForceExit + Exit + Endif + + If File(m.lcFileSemnat) + loMail.EmailSetAttachment(m.lcFileSemnat) + Endif + +* Email + Wait Window 'Email ' + Alltrim(Transform(Recno('cEmail'))) + '/' + Alltrim(Transform(Reccount('cEmail'))) + ' Client: ' + m.lcClient + ' Factura: ' + Alltrim(Str(m.lnNumarFactura)) Nowait + lcEmail = Alltrim(Nvl(cEmail.email_facturare, '')) && am adaugat direct in crsFacturi.email_facturare, ca sa nu mai folosesc loDate.oClient.email_facturare, daca fisierele pdf sunt deja listate + lcTo = Iif(!Empty(Nvl(m.lcEmail, '')), m.lcEmail, '') + loMail.cTo = m.lcTo + + llSucces = .T. + lcErrorMessage = '' + If loMail.Send() > 0 + llClearErrors = .T. + lcErrorMessage = loMail.GetErrorMessage(m.llClearErrors) + llSucces = .F. + Endif + Replace email_succes With m.llSucces, email_mesaj With Left(m.lcErrorMessage, 250) In cEmail + + If Inkey(0.5) = 27 && 'ESC' + If AMESSAGEBOX('Doriti sa intrerupeti operatia?', 4 + 32, _Screen.Caption) = 6 + Exit + Endif + Endif + Endscan + + Select cEmail + Copy To (m.lcRaportEmail) Type Xl5 + OPEN_DEFAULT_APP(m.lcRaportEmail) +ENDIF && Reccount('cEmail') + +Use In (Select('cEmail')) + +Select (m.lcSelect) + + + diff --git a/COMUN/Rapoarte/Arhiva/Formulare tipizate/aviz_a5_ft.FRT b/COMUN/Rapoarte/Arhiva/Formulare tipizate/aviz_a5_ft.FRT new file mode 100644 index 0000000..e5b6b4d Binary files /dev/null and b/COMUN/Rapoarte/Arhiva/Formulare tipizate/aviz_a5_ft.FRT differ diff --git a/COMUN/Rapoarte/Arhiva/Formulare tipizate/aviz_a5_ft.frx b/COMUN/Rapoarte/Arhiva/Formulare tipizate/aviz_a5_ft.frx new file mode 100644 index 0000000..d84bb9d Binary files /dev/null and b/COMUN/Rapoarte/Arhiva/Formulare tipizate/aviz_a5_ft.frx differ diff --git a/COMUN/Rapoarte/Arhiva/Formulare tipizate/aviz_ft.FRT b/COMUN/Rapoarte/Arhiva/Formulare tipizate/aviz_ft.FRT new file mode 100644 index 0000000..e9a346e Binary files /dev/null and b/COMUN/Rapoarte/Arhiva/Formulare tipizate/aviz_ft.FRT differ diff --git a/COMUN/Rapoarte/Arhiva/Formulare tipizate/aviz_ft.frx b/COMUN/Rapoarte/Arhiva/Formulare tipizate/aviz_ft.frx new file mode 100644 index 0000000..904befd Binary files /dev/null and b/COMUN/Rapoarte/Arhiva/Formulare tipizate/aviz_ft.frx differ diff --git a/COMUN/Rapoarte/Arhiva/Formulare tipizate/aviz_transfer_ctva.FRT b/COMUN/Rapoarte/Arhiva/Formulare tipizate/aviz_transfer_ctva.FRT new file mode 100644 index 0000000..4754832 Binary files /dev/null and b/COMUN/Rapoarte/Arhiva/Formulare tipizate/aviz_transfer_ctva.FRT differ diff --git a/COMUN/Rapoarte/Arhiva/Formulare tipizate/aviz_transfer_ctva.frx b/COMUN/Rapoarte/Arhiva/Formulare tipizate/aviz_transfer_ctva.frx new file mode 100644 index 0000000..adbc34f Binary files /dev/null and b/COMUN/Rapoarte/Arhiva/Formulare tipizate/aviz_transfer_ctva.frx differ diff --git a/COMUN/Rapoarte/Arhiva/Formulare tipizate/factura_a5_ft.frt b/COMUN/Rapoarte/Arhiva/Formulare tipizate/factura_a5_ft.frt new file mode 100644 index 0000000..a08128b Binary files /dev/null and b/COMUN/Rapoarte/Arhiva/Formulare tipizate/factura_a5_ft.frt differ diff --git a/COMUN/Rapoarte/Arhiva/Formulare tipizate/factura_a5_ft.frx b/COMUN/Rapoarte/Arhiva/Formulare tipizate/factura_a5_ft.frx new file mode 100644 index 0000000..55d2e5c Binary files /dev/null and b/COMUN/Rapoarte/Arhiva/Formulare tipizate/factura_a5_ft.frx differ diff --git a/COMUN/Rapoarte/Arhiva/Formulare tipizate/factura_ft.frt b/COMUN/Rapoarte/Arhiva/Formulare tipizate/factura_ft.frt new file mode 100644 index 0000000..74ba056 Binary files /dev/null and b/COMUN/Rapoarte/Arhiva/Formulare tipizate/factura_ft.frt differ diff --git a/COMUN/Rapoarte/Arhiva/Formulare tipizate/factura_ft.frx b/COMUN/Rapoarte/Arhiva/Formulare tipizate/factura_ft.frx new file mode 100644 index 0000000..cb996f7 Binary files /dev/null and b/COMUN/Rapoarte/Arhiva/Formulare tipizate/factura_ft.frx differ diff --git a/COMUN/Rapoarte/Arhiva/Formulare tipizate/factura_val_a5_ft.frt b/COMUN/Rapoarte/Arhiva/Formulare tipizate/factura_val_a5_ft.frt new file mode 100644 index 0000000..f8b6000 Binary files /dev/null and b/COMUN/Rapoarte/Arhiva/Formulare tipizate/factura_val_a5_ft.frt differ diff --git a/COMUN/Rapoarte/Arhiva/Formulare tipizate/factura_val_a5_ft.frx b/COMUN/Rapoarte/Arhiva/Formulare tipizate/factura_val_a5_ft.frx new file mode 100644 index 0000000..67dcefd Binary files /dev/null and b/COMUN/Rapoarte/Arhiva/Formulare tipizate/factura_val_a5_ft.frx differ diff --git a/COMUN/Rapoarte/Arhiva/Formulare tipizate/factura_val_ft.frt b/COMUN/Rapoarte/Arhiva/Formulare tipizate/factura_val_ft.frt new file mode 100644 index 0000000..6fbef60 Binary files /dev/null and b/COMUN/Rapoarte/Arhiva/Formulare tipizate/factura_val_ft.frt differ diff --git a/COMUN/Rapoarte/Arhiva/Formulare tipizate/factura_val_ft.frx b/COMUN/Rapoarte/Arhiva/Formulare tipizate/factura_val_ft.frx new file mode 100644 index 0000000..f36720b Binary files /dev/null and b/COMUN/Rapoarte/Arhiva/Formulare tipizate/factura_val_ft.frx differ diff --git a/COMUN/Rapoarte/Arhiva/aviz_transfer.FRT b/COMUN/Rapoarte/Arhiva/aviz_transfer.FRT new file mode 100644 index 0000000..5021368 Binary files /dev/null and b/COMUN/Rapoarte/Arhiva/aviz_transfer.FRT differ diff --git a/COMUN/Rapoarte/Arhiva/aviz_transfer.frx b/COMUN/Rapoarte/Arhiva/aviz_transfer.frx new file mode 100644 index 0000000..a9e882a Binary files /dev/null and b/COMUN/Rapoarte/Arhiva/aviz_transfer.frx differ diff --git a/COMUN/Rapoarte/Arhiva/aviz_transfer_ctva.FRT b/COMUN/Rapoarte/Arhiva/aviz_transfer_ctva.FRT new file mode 100644 index 0000000..5e14343 Binary files /dev/null and b/COMUN/Rapoarte/Arhiva/aviz_transfer_ctva.FRT differ diff --git a/COMUN/Rapoarte/Arhiva/aviz_transfer_ctva.frx b/COMUN/Rapoarte/Arhiva/aviz_transfer_ctva.frx new file mode 100644 index 0000000..cba7e77 Binary files /dev/null and b/COMUN/Rapoarte/Arhiva/aviz_transfer_ctva.frx differ diff --git a/COMUN/Rapoarte/Arhiva_netipizate/aviz.FRT b/COMUN/Rapoarte/Arhiva_netipizate/aviz.FRT new file mode 100644 index 0000000..4366dde Binary files /dev/null and b/COMUN/Rapoarte/Arhiva_netipizate/aviz.FRT differ diff --git a/COMUN/Rapoarte/Arhiva_netipizate/aviz.frx b/COMUN/Rapoarte/Arhiva_netipizate/aviz.frx new file mode 100644 index 0000000..f8be0e4 Binary files /dev/null and b/COMUN/Rapoarte/Arhiva_netipizate/aviz.frx differ diff --git a/COMUN/Rapoarte/Arhiva_netipizate/aviz_a5.FRT b/COMUN/Rapoarte/Arhiva_netipizate/aviz_a5.FRT new file mode 100644 index 0000000..1d8800a Binary files /dev/null and b/COMUN/Rapoarte/Arhiva_netipizate/aviz_a5.FRT differ diff --git a/COMUN/Rapoarte/Arhiva_netipizate/aviz_a5.frx b/COMUN/Rapoarte/Arhiva_netipizate/aviz_a5.frx new file mode 100644 index 0000000..59eead2 Binary files /dev/null and b/COMUN/Rapoarte/Arhiva_netipizate/aviz_a5.frx differ diff --git a/COMUN/Rapoarte/Arhiva_netipizate/aviz_transfer.FRT b/COMUN/Rapoarte/Arhiva_netipizate/aviz_transfer.FRT new file mode 100644 index 0000000..4595216 Binary files /dev/null and b/COMUN/Rapoarte/Arhiva_netipizate/aviz_transfer.FRT differ diff --git a/COMUN/Rapoarte/Arhiva_netipizate/aviz_transfer.frx b/COMUN/Rapoarte/Arhiva_netipizate/aviz_transfer.frx new file mode 100644 index 0000000..8db94c7 Binary files /dev/null and b/COMUN/Rapoarte/Arhiva_netipizate/aviz_transfer.frx differ diff --git a/COMUN/Rapoarte/Arhiva_netipizate/aviz_transfer_ctva.FRT b/COMUN/Rapoarte/Arhiva_netipizate/aviz_transfer_ctva.FRT new file mode 100644 index 0000000..e055deb Binary files /dev/null and b/COMUN/Rapoarte/Arhiva_netipizate/aviz_transfer_ctva.FRT differ diff --git a/COMUN/Rapoarte/Arhiva_netipizate/aviz_transfer_ctva.frx b/COMUN/Rapoarte/Arhiva_netipizate/aviz_transfer_ctva.frx new file mode 100644 index 0000000..d6b8b13 Binary files /dev/null and b/COMUN/Rapoarte/Arhiva_netipizate/aviz_transfer_ctva.frx differ diff --git a/COMUN/Rapoarte/aviz.FRT b/COMUN/Rapoarte/aviz.FRT new file mode 100644 index 0000000..6e650d9 Binary files /dev/null and b/COMUN/Rapoarte/aviz.FRT differ diff --git a/COMUN/Rapoarte/aviz.frx b/COMUN/Rapoarte/aviz.frx new file mode 100644 index 0000000..070dd54 Binary files /dev/null and b/COMUN/Rapoarte/aviz.frx differ diff --git a/COMUN/Rapoarte/aviz_a5.FRT b/COMUN/Rapoarte/aviz_a5.FRT new file mode 100644 index 0000000..9dd0367 Binary files /dev/null and b/COMUN/Rapoarte/aviz_a5.FRT differ diff --git a/COMUN/Rapoarte/aviz_a5.frx b/COMUN/Rapoarte/aviz_a5.frx new file mode 100644 index 0000000..be9c11b Binary files /dev/null and b/COMUN/Rapoarte/aviz_a5.frx differ diff --git a/COMUN/Rapoarte/aviz_ctva.FRT b/COMUN/Rapoarte/aviz_ctva.FRT new file mode 100644 index 0000000..b163be9 Binary files /dev/null and b/COMUN/Rapoarte/aviz_ctva.FRT differ diff --git a/COMUN/Rapoarte/aviz_ctva.frx b/COMUN/Rapoarte/aviz_ctva.frx new file mode 100644 index 0000000..22af4c4 Binary files /dev/null and b/COMUN/Rapoarte/aviz_ctva.frx differ diff --git a/COMUN/Rapoarte/aviz_ctva_a5.FRT b/COMUN/Rapoarte/aviz_ctva_a5.FRT new file mode 100644 index 0000000..5913788 Binary files /dev/null and b/COMUN/Rapoarte/aviz_ctva_a5.FRT differ diff --git a/COMUN/Rapoarte/aviz_ctva_a5.frx b/COMUN/Rapoarte/aviz_ctva_a5.frx new file mode 100644 index 0000000..8c7e428 Binary files /dev/null and b/COMUN/Rapoarte/aviz_ctva_a5.frx differ diff --git a/COMUN/Rapoarte/balanta_parteneri_rpt1.FRT b/COMUN/Rapoarte/balanta_parteneri_rpt1.FRT new file mode 100644 index 0000000..340fae7 Binary files /dev/null and b/COMUN/Rapoarte/balanta_parteneri_rpt1.FRT differ diff --git a/COMUN/Rapoarte/balanta_parteneri_rpt1.frx b/COMUN/Rapoarte/balanta_parteneri_rpt1.frx new file mode 100644 index 0000000..ab6c425 Binary files /dev/null and b/COMUN/Rapoarte/balanta_parteneri_rpt1.frx differ diff --git a/COMUN/Rapoarte/balanta_parteneri_rpt2.FRT b/COMUN/Rapoarte/balanta_parteneri_rpt2.FRT new file mode 100644 index 0000000..6a400a2 Binary files /dev/null and b/COMUN/Rapoarte/balanta_parteneri_rpt2.FRT differ diff --git a/COMUN/Rapoarte/balanta_parteneri_rpt2.frx b/COMUN/Rapoarte/balanta_parteneri_rpt2.frx new file mode 100644 index 0000000..470d971 Binary files /dev/null and b/COMUN/Rapoarte/balanta_parteneri_rpt2.frx differ diff --git a/COMUN/Rapoarte/balanta_parteneri_rpt2_ext.FRT b/COMUN/Rapoarte/balanta_parteneri_rpt2_ext.FRT new file mode 100644 index 0000000..40bce08 Binary files /dev/null and b/COMUN/Rapoarte/balanta_parteneri_rpt2_ext.FRT differ diff --git a/COMUN/Rapoarte/balanta_parteneri_rpt2_ext.frx b/COMUN/Rapoarte/balanta_parteneri_rpt2_ext.frx new file mode 100644 index 0000000..58980b5 Binary files /dev/null and b/COMUN/Rapoarte/balanta_parteneri_rpt2_ext.frx differ diff --git a/COMUN/Rapoarte/balanta_parteneri_rpt3.FRT b/COMUN/Rapoarte/balanta_parteneri_rpt3.FRT new file mode 100644 index 0000000..fa090d8 Binary files /dev/null and b/COMUN/Rapoarte/balanta_parteneri_rpt3.FRT differ diff --git a/COMUN/Rapoarte/balanta_parteneri_rpt3.frx b/COMUN/Rapoarte/balanta_parteneri_rpt3.frx new file mode 100644 index 0000000..8d64222 Binary files /dev/null and b/COMUN/Rapoarte/balanta_parteneri_rpt3.frx differ diff --git a/COMUN/Rapoarte/balanta_parteneri_rpt4.FRT b/COMUN/Rapoarte/balanta_parteneri_rpt4.FRT new file mode 100644 index 0000000..786f4f2 Binary files /dev/null and b/COMUN/Rapoarte/balanta_parteneri_rpt4.FRT differ diff --git a/COMUN/Rapoarte/balanta_parteneri_rpt4.frx b/COMUN/Rapoarte/balanta_parteneri_rpt4.frx new file mode 100644 index 0000000..1660d89 Binary files /dev/null and b/COMUN/Rapoarte/balanta_parteneri_rpt4.frx differ diff --git a/COMUN/Rapoarte/balanta_parteneri_rpt5.FRT b/COMUN/Rapoarte/balanta_parteneri_rpt5.FRT new file mode 100644 index 0000000..e3f8a2d Binary files /dev/null and b/COMUN/Rapoarte/balanta_parteneri_rpt5.FRT differ diff --git a/COMUN/Rapoarte/balanta_parteneri_rpt5.frx b/COMUN/Rapoarte/balanta_parteneri_rpt5.frx new file mode 100644 index 0000000..ea30db8 Binary files /dev/null and b/COMUN/Rapoarte/balanta_parteneri_rpt5.frx differ diff --git a/COMUN/Rapoarte/borderou_ar.FRT b/COMUN/Rapoarte/borderou_ar.FRT new file mode 100644 index 0000000..e8af8e1 Binary files /dev/null and b/COMUN/Rapoarte/borderou_ar.FRT differ diff --git a/COMUN/Rapoarte/borderou_ar.frx b/COMUN/Rapoarte/borderou_ar.frx new file mode 100644 index 0000000..6f12ed5 Binary files /dev/null and b/COMUN/Rapoarte/borderou_ar.frx differ diff --git a/COMUN/Rapoarte/centralizator_bon.FRT b/COMUN/Rapoarte/centralizator_bon.FRT new file mode 100644 index 0000000..08bbe6e Binary files /dev/null and b/COMUN/Rapoarte/centralizator_bon.FRT differ diff --git a/COMUN/Rapoarte/centralizator_bon.frx b/COMUN/Rapoarte/centralizator_bon.frx new file mode 100644 index 0000000..961a3ef Binary files /dev/null and b/COMUN/Rapoarte/centralizator_bon.frx differ diff --git a/COMUN/Rapoarte/centralizator_comenzi.FRT b/COMUN/Rapoarte/centralizator_comenzi.FRT new file mode 100644 index 0000000..16ba04e Binary files /dev/null and b/COMUN/Rapoarte/centralizator_comenzi.FRT differ diff --git a/COMUN/Rapoarte/centralizator_comenzi.frx b/COMUN/Rapoarte/centralizator_comenzi.frx new file mode 100644 index 0000000..e090229 Binary files /dev/null and b/COMUN/Rapoarte/centralizator_comenzi.frx differ diff --git a/COMUN/Rapoarte/centralizator_lucrari.FRT b/COMUN/Rapoarte/centralizator_lucrari.FRT new file mode 100644 index 0000000..dae39dd Binary files /dev/null and b/COMUN/Rapoarte/centralizator_lucrari.FRT differ diff --git a/COMUN/Rapoarte/centralizator_lucrari.frx b/COMUN/Rapoarte/centralizator_lucrari.frx new file mode 100644 index 0000000..2c4216d Binary files /dev/null and b/COMUN/Rapoarte/centralizator_lucrari.frx differ diff --git a/COMUN/Rapoarte/centralizator_nir.FRT b/COMUN/Rapoarte/centralizator_nir.FRT new file mode 100644 index 0000000..1fcd766 Binary files /dev/null and b/COMUN/Rapoarte/centralizator_nir.FRT differ diff --git a/COMUN/Rapoarte/centralizator_nir.frx b/COMUN/Rapoarte/centralizator_nir.frx new file mode 100644 index 0000000..ea738c5 Binary files /dev/null and b/COMUN/Rapoarte/centralizator_nir.frx differ diff --git a/COMUN/Rapoarte/centralizator_schimbpret.FRT b/COMUN/Rapoarte/centralizator_schimbpret.FRT new file mode 100644 index 0000000..0138fe7 Binary files /dev/null and b/COMUN/Rapoarte/centralizator_schimbpret.FRT differ diff --git a/COMUN/Rapoarte/centralizator_schimbpret.frx b/COMUN/Rapoarte/centralizator_schimbpret.frx new file mode 100644 index 0000000..09d23e7 Binary files /dev/null and b/COMUN/Rapoarte/centralizator_schimbpret.frx differ diff --git a/COMUN/Rapoarte/chitanta.FRT b/COMUN/Rapoarte/chitanta.FRT new file mode 100644 index 0000000..a29415c Binary files /dev/null and b/COMUN/Rapoarte/chitanta.FRT differ diff --git a/COMUN/Rapoarte/chitanta.frx b/COMUN/Rapoarte/chitanta.frx new file mode 100644 index 0000000..cb77da5 Binary files /dev/null and b/COMUN/Rapoarte/chitanta.frx differ diff --git a/COMUN/Rapoarte/chitanta_landscape.FRT b/COMUN/Rapoarte/chitanta_landscape.FRT new file mode 100644 index 0000000..928ef87 Binary files /dev/null and b/COMUN/Rapoarte/chitanta_landscape.FRT differ diff --git a/COMUN/Rapoarte/chitanta_landscape.frx b/COMUN/Rapoarte/chitanta_landscape.frx new file mode 100644 index 0000000..976af93 Binary files /dev/null and b/COMUN/Rapoarte/chitanta_landscape.frx differ diff --git a/COMUN/Rapoarte/detalii_comanda.FRT b/COMUN/Rapoarte/detalii_comanda.FRT new file mode 100644 index 0000000..7e10d8c Binary files /dev/null and b/COMUN/Rapoarte/detalii_comanda.FRT differ diff --git a/COMUN/Rapoarte/detalii_comanda.frx b/COMUN/Rapoarte/detalii_comanda.frx new file mode 100644 index 0000000..01eb07a Binary files /dev/null and b/COMUN/Rapoarte/detalii_comanda.frx differ diff --git a/COMUN/Rapoarte/detalii_comanda_ingust.FRT b/COMUN/Rapoarte/detalii_comanda_ingust.FRT new file mode 100644 index 0000000..34c21c5 Binary files /dev/null and b/COMUN/Rapoarte/detalii_comanda_ingust.FRT differ diff --git a/COMUN/Rapoarte/detalii_comanda_ingust.frx b/COMUN/Rapoarte/detalii_comanda_ingust.frx new file mode 100644 index 0000000..0ebe4bf Binary files /dev/null and b/COMUN/Rapoarte/detalii_comanda_ingust.frx differ diff --git a/COMUN/Rapoarte/detalii_lucrare.FRT b/COMUN/Rapoarte/detalii_lucrare.FRT new file mode 100644 index 0000000..0ab07b8 Binary files /dev/null and b/COMUN/Rapoarte/detalii_lucrare.FRT differ diff --git a/COMUN/Rapoarte/detalii_lucrare.frx b/COMUN/Rapoarte/detalii_lucrare.frx new file mode 100644 index 0000000..e8b1233 Binary files /dev/null and b/COMUN/Rapoarte/detalii_lucrare.frx differ diff --git a/COMUN/Rapoarte/dispozitie_livrare.FRT b/COMUN/Rapoarte/dispozitie_livrare.FRT new file mode 100644 index 0000000..632013b Binary files /dev/null and b/COMUN/Rapoarte/dispozitie_livrare.FRT differ diff --git a/COMUN/Rapoarte/dispozitie_livrare.frx b/COMUN/Rapoarte/dispozitie_livrare.frx new file mode 100644 index 0000000..35de1a7 Binary files /dev/null and b/COMUN/Rapoarte/dispozitie_livrare.frx differ diff --git a/COMUN/Rapoarte/factura.frt b/COMUN/Rapoarte/factura.frt new file mode 100644 index 0000000..ea3e79b Binary files /dev/null and b/COMUN/Rapoarte/factura.frt differ diff --git a/COMUN/Rapoarte/factura.frx b/COMUN/Rapoarte/factura.frx new file mode 100644 index 0000000..27979dd Binary files /dev/null and b/COMUN/Rapoarte/factura.frx differ diff --git a/COMUN/Rapoarte/factura_a5.FRT b/COMUN/Rapoarte/factura_a5.FRT new file mode 100644 index 0000000..e034f2c Binary files /dev/null and b/COMUN/Rapoarte/factura_a5.FRT differ diff --git a/COMUN/Rapoarte/factura_a5.FRX b/COMUN/Rapoarte/factura_a5.FRX new file mode 100644 index 0000000..6c69855 Binary files /dev/null and b/COMUN/Rapoarte/factura_a5.FRX differ diff --git a/COMUN/Rapoarte/factura_chit.FRT b/COMUN/Rapoarte/factura_chit.FRT new file mode 100644 index 0000000..5175aa0 Binary files /dev/null and b/COMUN/Rapoarte/factura_chit.FRT differ diff --git a/COMUN/Rapoarte/factura_chit.frx b/COMUN/Rapoarte/factura_chit.frx new file mode 100644 index 0000000..16ef0d5 Binary files /dev/null and b/COMUN/Rapoarte/factura_chit.frx differ diff --git a/COMUN/Rapoarte/factura_val.FRT b/COMUN/Rapoarte/factura_val.FRT new file mode 100644 index 0000000..0cb925d Binary files /dev/null and b/COMUN/Rapoarte/factura_val.FRT differ diff --git a/COMUN/Rapoarte/factura_val.frx b/COMUN/Rapoarte/factura_val.frx new file mode 100644 index 0000000..50e21af Binary files /dev/null and b/COMUN/Rapoarte/factura_val.frx differ diff --git a/COMUN/Rapoarte/factura_val_a5.FRT b/COMUN/Rapoarte/factura_val_a5.FRT new file mode 100644 index 0000000..392d742 Binary files /dev/null and b/COMUN/Rapoarte/factura_val_a5.FRT differ diff --git a/COMUN/Rapoarte/factura_val_a5.frx b/COMUN/Rapoarte/factura_val_a5.frx new file mode 100644 index 0000000..e9a7af3 Binary files /dev/null and b/COMUN/Rapoarte/factura_val_a5.frx differ diff --git a/COMUN/Rapoarte/facturatip.FRT b/COMUN/Rapoarte/facturatip.FRT new file mode 100644 index 0000000..6be4f4e Binary files /dev/null and b/COMUN/Rapoarte/facturatip.FRT differ diff --git a/COMUN/Rapoarte/facturatip.frx b/COMUN/Rapoarte/facturatip.frx new file mode 100644 index 0000000..cbec93b Binary files /dev/null and b/COMUN/Rapoarte/facturatip.frx differ diff --git a/COMUN/Rapoarte/facturatip_a5.FRT b/COMUN/Rapoarte/facturatip_a5.FRT new file mode 100644 index 0000000..e6fda98 Binary files /dev/null and b/COMUN/Rapoarte/facturatip_a5.FRT differ diff --git a/COMUN/Rapoarte/facturatip_a5.frx b/COMUN/Rapoarte/facturatip_a5.frx new file mode 100644 index 0000000..2ee4da7 Binary files /dev/null and b/COMUN/Rapoarte/facturatip_a5.frx differ diff --git a/COMUN/Rapoarte/facturatip_cuchit.FRT b/COMUN/Rapoarte/facturatip_cuchit.FRT new file mode 100644 index 0000000..8127bd5 Binary files /dev/null and b/COMUN/Rapoarte/facturatip_cuchit.FRT differ diff --git a/COMUN/Rapoarte/facturatip_cuchit.frx b/COMUN/Rapoarte/facturatip_cuchit.frx new file mode 100644 index 0000000..fada77b Binary files /dev/null and b/COMUN/Rapoarte/facturatip_cuchit.frx differ diff --git a/COMUN/Rapoarte/fisa_explicativa.FRT b/COMUN/Rapoarte/fisa_explicativa.FRT new file mode 100644 index 0000000..6d34723 Binary files /dev/null and b/COMUN/Rapoarte/fisa_explicativa.FRT differ diff --git a/COMUN/Rapoarte/fisa_explicativa.frx b/COMUN/Rapoarte/fisa_explicativa.frx new file mode 100644 index 0000000..132933d Binary files /dev/null and b/COMUN/Rapoarte/fisa_explicativa.frx differ diff --git a/COMUN/Rapoarte/fisa_lichidare.FRT b/COMUN/Rapoarte/fisa_lichidare.FRT new file mode 100644 index 0000000..2f47721 Binary files /dev/null and b/COMUN/Rapoarte/fisa_lichidare.FRT differ diff --git a/COMUN/Rapoarte/fisa_lichidare.frx b/COMUN/Rapoarte/fisa_lichidare.frx new file mode 100644 index 0000000..39db151 Binary files /dev/null and b/COMUN/Rapoarte/fisa_lichidare.frx differ diff --git a/COMUN/Rapoarte/fisa_magazie.FRT b/COMUN/Rapoarte/fisa_magazie.FRT new file mode 100644 index 0000000..041a5bb Binary files /dev/null and b/COMUN/Rapoarte/fisa_magazie.FRT differ diff --git a/COMUN/Rapoarte/fisa_magazie.frx b/COMUN/Rapoarte/fisa_magazie.frx new file mode 100644 index 0000000..4ddceae Binary files /dev/null and b/COMUN/Rapoarte/fisa_magazie.frx differ diff --git a/COMUN/Rapoarte/fisa_magazie_fifo.FRT b/COMUN/Rapoarte/fisa_magazie_fifo.FRT new file mode 100644 index 0000000..e0ef23e Binary files /dev/null and b/COMUN/Rapoarte/fisa_magazie_fifo.FRT differ diff --git a/COMUN/Rapoarte/fisa_magazie_fifo.frx b/COMUN/Rapoarte/fisa_magazie_fifo.frx new file mode 100644 index 0000000..a45fd75 Binary files /dev/null and b/COMUN/Rapoarte/fisa_magazie_fifo.frx differ diff --git a/COMUN/Rapoarte/fisa_magazie_fifo_val.FRT b/COMUN/Rapoarte/fisa_magazie_fifo_val.FRT new file mode 100644 index 0000000..2ea6339 Binary files /dev/null and b/COMUN/Rapoarte/fisa_magazie_fifo_val.FRT differ diff --git a/COMUN/Rapoarte/fisa_magazie_fifo_val.frx b/COMUN/Rapoarte/fisa_magazie_fifo_val.frx new file mode 100644 index 0000000..9d77a4b Binary files /dev/null and b/COMUN/Rapoarte/fisa_magazie_fifo_val.frx differ diff --git a/COMUN/Rapoarte/fisa_obi_gest.FRT b/COMUN/Rapoarte/fisa_obi_gest.FRT new file mode 100644 index 0000000..4221435 Binary files /dev/null and b/COMUN/Rapoarte/fisa_obi_gest.FRT differ diff --git a/COMUN/Rapoarte/fisa_obi_gest.frx b/COMUN/Rapoarte/fisa_obi_gest.frx new file mode 100644 index 0000000..239b1da Binary files /dev/null and b/COMUN/Rapoarte/fisa_obi_gest.frx differ diff --git a/COMUN/Rapoarte/fisa_obi_resp.FRT b/COMUN/Rapoarte/fisa_obi_resp.FRT new file mode 100644 index 0000000..6a87b24 Binary files /dev/null and b/COMUN/Rapoarte/fisa_obi_resp.FRT differ diff --git a/COMUN/Rapoarte/fisa_obi_resp.frx b/COMUN/Rapoarte/fisa_obi_resp.frx new file mode 100644 index 0000000..f0022d0 Binary files /dev/null and b/COMUN/Rapoarte/fisa_obi_resp.frx differ diff --git a/COMUN/Rapoarte/flux_trezorerie_met_dir.FRT b/COMUN/Rapoarte/flux_trezorerie_met_dir.FRT new file mode 100644 index 0000000..bdcd054 Binary files /dev/null and b/COMUN/Rapoarte/flux_trezorerie_met_dir.FRT differ diff --git a/COMUN/Rapoarte/flux_trezorerie_met_dir.frx b/COMUN/Rapoarte/flux_trezorerie_met_dir.frx new file mode 100644 index 0000000..67d0d24 Binary files /dev/null and b/COMUN/Rapoarte/flux_trezorerie_met_dir.frx differ diff --git a/COMUN/Rapoarte/formuleflux.FRT b/COMUN/Rapoarte/formuleflux.FRT new file mode 100644 index 0000000..6e9a149 Binary files /dev/null and b/COMUN/Rapoarte/formuleflux.FRT differ diff --git a/COMUN/Rapoarte/formuleflux.frx b/COMUN/Rapoarte/formuleflux.frx new file mode 100644 index 0000000..ee29a8d Binary files /dev/null and b/COMUN/Rapoarte/formuleflux.frx differ diff --git a/COMUN/Rapoarte/grafic.FRT b/COMUN/Rapoarte/grafic.FRT new file mode 100644 index 0000000..2b81b0f Binary files /dev/null and b/COMUN/Rapoarte/grafic.FRT differ diff --git a/COMUN/Rapoarte/grafic.frx b/COMUN/Rapoarte/grafic.frx new file mode 100644 index 0000000..ecec844 Binary files /dev/null and b/COMUN/Rapoarte/grafic.frx differ diff --git a/COMUN/Rapoarte/invoice.frt b/COMUN/Rapoarte/invoice.frt new file mode 100644 index 0000000..f48b6d3 Binary files /dev/null and b/COMUN/Rapoarte/invoice.frt differ diff --git a/COMUN/Rapoarte/invoice.frx b/COMUN/Rapoarte/invoice.frx new file mode 100644 index 0000000..f3d2db3 Binary files /dev/null and b/COMUN/Rapoarte/invoice.frx differ diff --git a/COMUN/Rapoarte/invoice_a5.frt b/COMUN/Rapoarte/invoice_a5.frt new file mode 100644 index 0000000..227e102 Binary files /dev/null and b/COMUN/Rapoarte/invoice_a5.frt differ diff --git a/COMUN/Rapoarte/invoice_a5.frx b/COMUN/Rapoarte/invoice_a5.frx new file mode 100644 index 0000000..2bd58b0 Binary files /dev/null and b/COMUN/Rapoarte/invoice_a5.frx differ diff --git a/COMUN/Rapoarte/ireg_parteneri_rpt1.FRT b/COMUN/Rapoarte/ireg_parteneri_rpt1.FRT new file mode 100644 index 0000000..1ca59a5 Binary files /dev/null and b/COMUN/Rapoarte/ireg_parteneri_rpt1.FRT differ diff --git a/COMUN/Rapoarte/ireg_parteneri_rpt1.frx b/COMUN/Rapoarte/ireg_parteneri_rpt1.frx new file mode 100644 index 0000000..f4d1ec6 Binary files /dev/null and b/COMUN/Rapoarte/ireg_parteneri_rpt1.frx differ diff --git a/COMUN/Rapoarte/ireg_parteneri_rpt2.FRT b/COMUN/Rapoarte/ireg_parteneri_rpt2.FRT new file mode 100644 index 0000000..6f38174 Binary files /dev/null and b/COMUN/Rapoarte/ireg_parteneri_rpt2.FRT differ diff --git a/COMUN/Rapoarte/ireg_parteneri_rpt2.frx b/COMUN/Rapoarte/ireg_parteneri_rpt2.frx new file mode 100644 index 0000000..eedbaa3 Binary files /dev/null and b/COMUN/Rapoarte/ireg_parteneri_rpt2.frx differ diff --git a/COMUN/Rapoarte/ireg_parteneri_rpt2lei.FRT b/COMUN/Rapoarte/ireg_parteneri_rpt2lei.FRT new file mode 100644 index 0000000..9064ec9 Binary files /dev/null and b/COMUN/Rapoarte/ireg_parteneri_rpt2lei.FRT differ diff --git a/COMUN/Rapoarte/ireg_parteneri_rpt2lei.frx b/COMUN/Rapoarte/ireg_parteneri_rpt2lei.frx new file mode 100644 index 0000000..53841cf Binary files /dev/null and b/COMUN/Rapoarte/ireg_parteneri_rpt2lei.frx differ diff --git a/COMUN/Rapoarte/ireg_parteneri_rpt2lei_cum.FRT b/COMUN/Rapoarte/ireg_parteneri_rpt2lei_cum.FRT new file mode 100644 index 0000000..94610f0 Binary files /dev/null and b/COMUN/Rapoarte/ireg_parteneri_rpt2lei_cum.FRT differ diff --git a/COMUN/Rapoarte/ireg_parteneri_rpt2lei_cum.frx b/COMUN/Rapoarte/ireg_parteneri_rpt2lei_cum.frx new file mode 100644 index 0000000..8b34d2b Binary files /dev/null and b/COMUN/Rapoarte/ireg_parteneri_rpt2lei_cum.frx differ diff --git a/COMUN/Rapoarte/ireg_parteneri_rpt3.FRT b/COMUN/Rapoarte/ireg_parteneri_rpt3.FRT new file mode 100644 index 0000000..b15ff9b Binary files /dev/null and b/COMUN/Rapoarte/ireg_parteneri_rpt3.FRT differ diff --git a/COMUN/Rapoarte/ireg_parteneri_rpt3.frx b/COMUN/Rapoarte/ireg_parteneri_rpt3.frx new file mode 100644 index 0000000..e6841d6 Binary files /dev/null and b/COMUN/Rapoarte/ireg_parteneri_rpt3.frx differ diff --git a/COMUN/Rapoarte/ireg_parteneri_rpt4.FRT b/COMUN/Rapoarte/ireg_parteneri_rpt4.FRT new file mode 100644 index 0000000..054ae9d Binary files /dev/null and b/COMUN/Rapoarte/ireg_parteneri_rpt4.FRT differ diff --git a/COMUN/Rapoarte/ireg_parteneri_rpt4.frx b/COMUN/Rapoarte/ireg_parteneri_rpt4.frx new file mode 100644 index 0000000..ecff01b Binary files /dev/null and b/COMUN/Rapoarte/ireg_parteneri_rpt4.frx differ diff --git a/COMUN/Rapoarte/ireg_parteneri_rpt5.FRT b/COMUN/Rapoarte/ireg_parteneri_rpt5.FRT new file mode 100644 index 0000000..92cc6b4 Binary files /dev/null and b/COMUN/Rapoarte/ireg_parteneri_rpt5.FRT differ diff --git a/COMUN/Rapoarte/ireg_parteneri_rpt5.frx b/COMUN/Rapoarte/ireg_parteneri_rpt5.frx new file mode 100644 index 0000000..021dcff Binary files /dev/null and b/COMUN/Rapoarte/ireg_parteneri_rpt5.frx differ diff --git a/COMUN/Rapoarte/ireg_parteneri_rpt6.FRT b/COMUN/Rapoarte/ireg_parteneri_rpt6.FRT new file mode 100644 index 0000000..e394d34 Binary files /dev/null and b/COMUN/Rapoarte/ireg_parteneri_rpt6.FRT differ diff --git a/COMUN/Rapoarte/ireg_parteneri_rpt6.frx b/COMUN/Rapoarte/ireg_parteneri_rpt6.frx new file mode 100644 index 0000000..9cfb157 Binary files /dev/null and b/COMUN/Rapoarte/ireg_parteneri_rpt6.frx differ diff --git a/COMUN/Rapoarte/ist_deb_cred.FRT b/COMUN/Rapoarte/ist_deb_cred.FRT new file mode 100644 index 0000000..fc2286f Binary files /dev/null and b/COMUN/Rapoarte/ist_deb_cred.FRT differ diff --git a/COMUN/Rapoarte/ist_deb_cred.frx b/COMUN/Rapoarte/ist_deb_cred.frx new file mode 100644 index 0000000..5652391 Binary files /dev/null and b/COMUN/Rapoarte/ist_deb_cred.frx differ diff --git a/COMUN/Rapoarte/istoric_articol.FRT b/COMUN/Rapoarte/istoric_articol.FRT new file mode 100644 index 0000000..5841335 Binary files /dev/null and b/COMUN/Rapoarte/istoric_articol.FRT differ diff --git a/COMUN/Rapoarte/istoric_articol.frx b/COMUN/Rapoarte/istoric_articol.frx new file mode 100644 index 0000000..fdbb3de Binary files /dev/null and b/COMUN/Rapoarte/istoric_articol.frx differ diff --git a/COMUN/Rapoarte/lista_livrare.FRT b/COMUN/Rapoarte/lista_livrare.FRT new file mode 100644 index 0000000..f079807 Binary files /dev/null and b/COMUN/Rapoarte/lista_livrare.FRT differ diff --git a/COMUN/Rapoarte/lista_livrare.frx b/COMUN/Rapoarte/lista_livrare.frx new file mode 100644 index 0000000..76853f9 Binary files /dev/null and b/COMUN/Rapoarte/lista_livrare.frx differ diff --git a/COMUN/Rapoarte/logo.jpg b/COMUN/Rapoarte/logo.jpg new file mode 100644 index 0000000..31a89d8 Binary files /dev/null and b/COMUN/Rapoarte/logo.jpg differ diff --git a/COMUN/Rapoarte/logo_orizontal.jpg b/COMUN/Rapoarte/logo_orizontal.jpg new file mode 100644 index 0000000..31a89d8 Binary files /dev/null and b/COMUN/Rapoarte/logo_orizontal.jpg differ diff --git a/COMUN/Rapoarte/proforma.FRT b/COMUN/Rapoarte/proforma.FRT new file mode 100644 index 0000000..9d8bb00 Binary files /dev/null and b/COMUN/Rapoarte/proforma.FRT differ diff --git a/COMUN/Rapoarte/proforma.frx b/COMUN/Rapoarte/proforma.frx new file mode 100644 index 0000000..77daec8 Binary files /dev/null and b/COMUN/Rapoarte/proforma.frx differ diff --git a/COMUN/Rapoarte/proforma_orig.frt b/COMUN/Rapoarte/proforma_orig.frt new file mode 100644 index 0000000..692308f Binary files /dev/null and b/COMUN/Rapoarte/proforma_orig.frt differ diff --git a/COMUN/Rapoarte/proforma_orig.frx b/COMUN/Rapoarte/proforma_orig.frx new file mode 100644 index 0000000..1495309 Binary files /dev/null and b/COMUN/Rapoarte/proforma_orig.frx differ diff --git a/COMUN/Rapoarte/proforma_val.FRT b/COMUN/Rapoarte/proforma_val.FRT new file mode 100644 index 0000000..a023d0f Binary files /dev/null and b/COMUN/Rapoarte/proforma_val.FRT differ diff --git a/COMUN/Rapoarte/proforma_val.frx b/COMUN/Rapoarte/proforma_val.frx new file mode 100644 index 0000000..775a579 Binary files /dev/null and b/COMUN/Rapoarte/proforma_val.frx differ diff --git a/COMUN/Rapoarte/proforma_val_orig.frt b/COMUN/Rapoarte/proforma_val_orig.frt new file mode 100644 index 0000000..cd192ac Binary files /dev/null and b/COMUN/Rapoarte/proforma_val_orig.frt differ diff --git a/COMUN/Rapoarte/proforma_val_orig.frx b/COMUN/Rapoarte/proforma_val_orig.frx new file mode 100644 index 0000000..f4d9dea Binary files /dev/null and b/COMUN/Rapoarte/proforma_val_orig.frx differ diff --git a/COMUN/Rapoarte/protocol2.FRT b/COMUN/Rapoarte/protocol2.FRT new file mode 100644 index 0000000..137b33e Binary files /dev/null and b/COMUN/Rapoarte/protocol2.FRT differ diff --git a/COMUN/Rapoarte/protocol2.frx b/COMUN/Rapoarte/protocol2.frx new file mode 100644 index 0000000..b8eb467 Binary files /dev/null and b/COMUN/Rapoarte/protocol2.frx differ diff --git a/COMUN/Rapoarte/rList_set.FRT b/COMUN/Rapoarte/rList_set.FRT new file mode 100644 index 0000000..cb41077 Binary files /dev/null and b/COMUN/Rapoarte/rList_set.FRT differ diff --git a/COMUN/Rapoarte/rList_set.frx b/COMUN/Rapoarte/rList_set.frx new file mode 100644 index 0000000..58d4e45 Binary files /dev/null and b/COMUN/Rapoarte/rList_set.frx differ diff --git a/COMUN/Rapoarte/rap_artdoc.FRT b/COMUN/Rapoarte/rap_artdoc.FRT new file mode 100644 index 0000000..7f400ff Binary files /dev/null and b/COMUN/Rapoarte/rap_artdoc.FRT differ diff --git a/COMUN/Rapoarte/rap_artdoc.frx b/COMUN/Rapoarte/rap_artdoc.frx new file mode 100644 index 0000000..876c193 Binary files /dev/null and b/COMUN/Rapoarte/rap_artdoc.frx differ diff --git a/COMUN/Rapoarte/rap_articolecodbare.FRT b/COMUN/Rapoarte/rap_articolecodbare.FRT new file mode 100644 index 0000000..d2a3d94 Binary files /dev/null and b/COMUN/Rapoarte/rap_articolecodbare.FRT differ diff --git a/COMUN/Rapoarte/rap_articolecodbare.frx b/COMUN/Rapoarte/rap_articolecodbare.frx new file mode 100644 index 0000000..ab15cf7 Binary files /dev/null and b/COMUN/Rapoarte/rap_articolecodbare.frx differ diff --git a/COMUN/Rapoarte/rap_articolecodbares.FRT b/COMUN/Rapoarte/rap_articolecodbares.FRT new file mode 100644 index 0000000..b4a763b Binary files /dev/null and b/COMUN/Rapoarte/rap_articolecodbares.FRT differ diff --git a/COMUN/Rapoarte/rap_articolecodbares.frx b/COMUN/Rapoarte/rap_articolecodbares.frx new file mode 100644 index 0000000..60ddee6 Binary files /dev/null and b/COMUN/Rapoarte/rap_articolecodbares.frx differ diff --git a/COMUN/Rapoarte/rap_avizedoc.FRT b/COMUN/Rapoarte/rap_avizedoc.FRT new file mode 100644 index 0000000..a468f33 Binary files /dev/null and b/COMUN/Rapoarte/rap_avizedoc.FRT differ diff --git a/COMUN/Rapoarte/rap_avizedoc.frx b/COMUN/Rapoarte/rap_avizedoc.frx new file mode 100644 index 0000000..be752ac Binary files /dev/null and b/COMUN/Rapoarte/rap_avizedoc.frx differ diff --git a/COMUN/Rapoarte/rap_avizedoc_grup.FRT b/COMUN/Rapoarte/rap_avizedoc_grup.FRT new file mode 100644 index 0000000..dcc098f Binary files /dev/null and b/COMUN/Rapoarte/rap_avizedoc_grup.FRT differ diff --git a/COMUN/Rapoarte/rap_avizedoc_grup.frx b/COMUN/Rapoarte/rap_avizedoc_grup.frx new file mode 100644 index 0000000..79a1dc8 Binary files /dev/null and b/COMUN/Rapoarte/rap_avizedoc_grup.frx differ diff --git a/COMUN/Rapoarte/rap_bon_achi.frt b/COMUN/Rapoarte/rap_bon_achi.frt new file mode 100644 index 0000000..3113b57 Binary files /dev/null and b/COMUN/Rapoarte/rap_bon_achi.frt differ diff --git a/COMUN/Rapoarte/rap_bon_achi.frx b/COMUN/Rapoarte/rap_bon_achi.frx new file mode 100644 index 0000000..f6522d5 Binary files /dev/null and b/COMUN/Rapoarte/rap_bon_achi.frx differ diff --git a/COMUN/Rapoarte/rap_bon_achi_inv.FRT b/COMUN/Rapoarte/rap_bon_achi_inv.FRT new file mode 100644 index 0000000..204a36e Binary files /dev/null and b/COMUN/Rapoarte/rap_bon_achi_inv.FRT differ diff --git a/COMUN/Rapoarte/rap_bon_achi_inv.frx b/COMUN/Rapoarte/rap_bon_achi_inv.frx new file mode 100644 index 0000000..32f551f Binary files /dev/null and b/COMUN/Rapoarte/rap_bon_achi_inv.frx differ diff --git a/COMUN/Rapoarte/rap_bon_achi_vanz.FRT b/COMUN/Rapoarte/rap_bon_achi_vanz.FRT new file mode 100644 index 0000000..c71202a Binary files /dev/null and b/COMUN/Rapoarte/rap_bon_achi_vanz.FRT differ diff --git a/COMUN/Rapoarte/rap_bon_achi_vanz.frx b/COMUN/Rapoarte/rap_bon_achi_vanz.frx new file mode 100644 index 0000000..8c5ad17 Binary files /dev/null and b/COMUN/Rapoarte/rap_bon_achi_vanz.frx differ diff --git a/COMUN/Rapoarte/rap_bon_lucrare.FRT b/COMUN/Rapoarte/rap_bon_lucrare.FRT new file mode 100644 index 0000000..a6014e8 Binary files /dev/null and b/COMUN/Rapoarte/rap_bon_lucrare.FRT differ diff --git a/COMUN/Rapoarte/rap_bon_lucrare.frx b/COMUN/Rapoarte/rap_bon_lucrare.frx new file mode 100644 index 0000000..c1b813a Binary files /dev/null and b/COMUN/Rapoarte/rap_bon_lucrare.frx differ diff --git a/COMUN/Rapoarte/rap_bon_vanz.FRT b/COMUN/Rapoarte/rap_bon_vanz.FRT new file mode 100644 index 0000000..2bca985 Binary files /dev/null and b/COMUN/Rapoarte/rap_bon_vanz.FRT differ diff --git a/COMUN/Rapoarte/rap_bon_vanz.frx b/COMUN/Rapoarte/rap_bon_vanz.frx new file mode 100644 index 0000000..619b72d Binary files /dev/null and b/COMUN/Rapoarte/rap_bon_vanz.frx differ diff --git a/COMUN/Rapoarte/rap_bonuri.FRT b/COMUN/Rapoarte/rap_bonuri.FRT new file mode 100644 index 0000000..83a3d7d Binary files /dev/null and b/COMUN/Rapoarte/rap_bonuri.FRT differ diff --git a/COMUN/Rapoarte/rap_bonuri.frx b/COMUN/Rapoarte/rap_bonuri.frx new file mode 100644 index 0000000..dd87fd2 Binary files /dev/null and b/COMUN/Rapoarte/rap_bonuri.frx differ diff --git a/COMUN/Rapoarte/rap_borderou_clienti.FRT b/COMUN/Rapoarte/rap_borderou_clienti.FRT new file mode 100644 index 0000000..4474a90 Binary files /dev/null and b/COMUN/Rapoarte/rap_borderou_clienti.FRT differ diff --git a/COMUN/Rapoarte/rap_borderou_clienti.frx b/COMUN/Rapoarte/rap_borderou_clienti.frx new file mode 100644 index 0000000..7d38a04 Binary files /dev/null and b/COMUN/Rapoarte/rap_borderou_clienti.frx differ diff --git a/COMUN/Rapoarte/rap_catalog_articole.FRT b/COMUN/Rapoarte/rap_catalog_articole.FRT new file mode 100644 index 0000000..1407718 Binary files /dev/null and b/COMUN/Rapoarte/rap_catalog_articole.FRT differ diff --git a/COMUN/Rapoarte/rap_catalog_articole.frx b/COMUN/Rapoarte/rap_catalog_articole.frx new file mode 100644 index 0000000..06d2d54 Binary files /dev/null and b/COMUN/Rapoarte/rap_catalog_articole.frx differ diff --git a/COMUN/Rapoarte/rap_comanda_vanz.FRT b/COMUN/Rapoarte/rap_comanda_vanz.FRT new file mode 100644 index 0000000..8b21d8f Binary files /dev/null and b/COMUN/Rapoarte/rap_comanda_vanz.FRT differ diff --git a/COMUN/Rapoarte/rap_comanda_vanz.frx b/COMUN/Rapoarte/rap_comanda_vanz.frx new file mode 100644 index 0000000..e37b504 Binary files /dev/null and b/COMUN/Rapoarte/rap_comanda_vanz.frx differ diff --git a/COMUN/Rapoarte/rap_comanda_vanz_fz.FRT b/COMUN/Rapoarte/rap_comanda_vanz_fz.FRT new file mode 100644 index 0000000..b4a1335 Binary files /dev/null and b/COMUN/Rapoarte/rap_comanda_vanz_fz.FRT differ diff --git a/COMUN/Rapoarte/rap_comanda_vanz_fz.frx b/COMUN/Rapoarte/rap_comanda_vanz_fz.frx new file mode 100644 index 0000000..485512a Binary files /dev/null and b/COMUN/Rapoarte/rap_comanda_vanz_fz.frx differ diff --git a/COMUN/Rapoarte/rap_comanda_vanz_fz_val.FRT b/COMUN/Rapoarte/rap_comanda_vanz_fz_val.FRT new file mode 100644 index 0000000..fc20f40 Binary files /dev/null and b/COMUN/Rapoarte/rap_comanda_vanz_fz_val.FRT differ diff --git a/COMUN/Rapoarte/rap_comanda_vanz_fz_val.frx b/COMUN/Rapoarte/rap_comanda_vanz_fz_val.frx new file mode 100644 index 0000000..b2df6e4 Binary files /dev/null and b/COMUN/Rapoarte/rap_comanda_vanz_fz_val.frx differ diff --git a/COMUN/Rapoarte/rap_descarcare_productie.FRT b/COMUN/Rapoarte/rap_descarcare_productie.FRT new file mode 100644 index 0000000..3028f45 Binary files /dev/null and b/COMUN/Rapoarte/rap_descarcare_productie.FRT differ diff --git a/COMUN/Rapoarte/rap_descarcare_productie.frx b/COMUN/Rapoarte/rap_descarcare_productie.frx new file mode 100644 index 0000000..ff379b3 Binary files /dev/null and b/COMUN/Rapoarte/rap_descarcare_productie.frx differ diff --git a/COMUN/Rapoarte/rap_descarcare_retetar.FRT b/COMUN/Rapoarte/rap_descarcare_retetar.FRT new file mode 100644 index 0000000..40c9f31 Binary files /dev/null and b/COMUN/Rapoarte/rap_descarcare_retetar.FRT differ diff --git a/COMUN/Rapoarte/rap_descarcare_retetar.frx b/COMUN/Rapoarte/rap_descarcare_retetar.frx new file mode 100644 index 0000000..b7bc552 Binary files /dev/null and b/COMUN/Rapoarte/rap_descarcare_retetar.frx differ diff --git a/COMUN/Rapoarte/rap_dif_pret.FRT b/COMUN/Rapoarte/rap_dif_pret.FRT new file mode 100644 index 0000000..c35d3dd Binary files /dev/null and b/COMUN/Rapoarte/rap_dif_pret.FRT differ diff --git a/COMUN/Rapoarte/rap_dif_pret.frx b/COMUN/Rapoarte/rap_dif_pret.frx new file mode 100644 index 0000000..e1af970 Binary files /dev/null and b/COMUN/Rapoarte/rap_dif_pret.frx differ diff --git a/COMUN/Rapoarte/rap_echip_imputat.FRT b/COMUN/Rapoarte/rap_echip_imputat.FRT new file mode 100644 index 0000000..b55d9e2 Binary files /dev/null and b/COMUN/Rapoarte/rap_echip_imputat.FRT differ diff --git a/COMUN/Rapoarte/rap_echip_imputat.frx b/COMUN/Rapoarte/rap_echip_imputat.frx new file mode 100644 index 0000000..97a2c6c Binary files /dev/null and b/COMUN/Rapoarte/rap_echip_imputat.frx differ diff --git a/COMUN/Rapoarte/rap_echip_predat.FRT b/COMUN/Rapoarte/rap_echip_predat.FRT new file mode 100644 index 0000000..d9c87e9 Binary files /dev/null and b/COMUN/Rapoarte/rap_echip_predat.FRT differ diff --git a/COMUN/Rapoarte/rap_echip_predat.frx b/COMUN/Rapoarte/rap_echip_predat.frx new file mode 100644 index 0000000..3ffccdd Binary files /dev/null and b/COMUN/Rapoarte/rap_echip_predat.frx differ diff --git a/COMUN/Rapoarte/rap_echip_uzat.FRT b/COMUN/Rapoarte/rap_echip_uzat.FRT new file mode 100644 index 0000000..f49621d Binary files /dev/null and b/COMUN/Rapoarte/rap_echip_uzat.FRT differ diff --git a/COMUN/Rapoarte/rap_echip_uzat.frx b/COMUN/Rapoarte/rap_echip_uzat.frx new file mode 100644 index 0000000..bc7e336 Binary files /dev/null and b/COMUN/Rapoarte/rap_echip_uzat.frx differ diff --git a/COMUN/Rapoarte/rap_facturi.FRT b/COMUN/Rapoarte/rap_facturi.FRT new file mode 100644 index 0000000..e9edee7 Binary files /dev/null and b/COMUN/Rapoarte/rap_facturi.FRT differ diff --git a/COMUN/Rapoarte/rap_facturi.frx b/COMUN/Rapoarte/rap_facturi.frx new file mode 100644 index 0000000..5c2e4c6 Binary files /dev/null and b/COMUN/Rapoarte/rap_facturi.frx differ diff --git a/COMUN/Rapoarte/rap_facturi_vechime.FRT b/COMUN/Rapoarte/rap_facturi_vechime.FRT new file mode 100644 index 0000000..e9daac1 Binary files /dev/null and b/COMUN/Rapoarte/rap_facturi_vechime.FRT differ diff --git a/COMUN/Rapoarte/rap_facturi_vechime.frx b/COMUN/Rapoarte/rap_facturi_vechime.frx new file mode 100644 index 0000000..4fdc35d Binary files /dev/null and b/COMUN/Rapoarte/rap_facturi_vechime.frx differ diff --git a/COMUN/Rapoarte/rap_gestiune.FRT b/COMUN/Rapoarte/rap_gestiune.FRT new file mode 100644 index 0000000..530d5d2 Binary files /dev/null and b/COMUN/Rapoarte/rap_gestiune.FRT differ diff --git a/COMUN/Rapoarte/rap_gestiune.frx b/COMUN/Rapoarte/rap_gestiune.frx new file mode 100644 index 0000000..57c3536 Binary files /dev/null and b/COMUN/Rapoarte/rap_gestiune.frx differ diff --git a/COMUN/Rapoarte/rap_gestiune_toate.FRT b/COMUN/Rapoarte/rap_gestiune_toate.FRT new file mode 100644 index 0000000..090a84a Binary files /dev/null and b/COMUN/Rapoarte/rap_gestiune_toate.FRT differ diff --git a/COMUN/Rapoarte/rap_gestiune_toate.frx b/COMUN/Rapoarte/rap_gestiune_toate.frx new file mode 100644 index 0000000..fe2be45 Binary files /dev/null and b/COMUN/Rapoarte/rap_gestiune_toate.frx differ diff --git a/COMUN/Rapoarte/rap_incasari_facturi.FRT b/COMUN/Rapoarte/rap_incasari_facturi.FRT new file mode 100644 index 0000000..5426c5d Binary files /dev/null and b/COMUN/Rapoarte/rap_incasari_facturi.FRT differ diff --git a/COMUN/Rapoarte/rap_incasari_facturi.frx b/COMUN/Rapoarte/rap_incasari_facturi.frx new file mode 100644 index 0000000..ee25852 Binary files /dev/null and b/COMUN/Rapoarte/rap_incasari_facturi.frx differ diff --git a/COMUN/Rapoarte/rap_marfa_nelivrata.FRT b/COMUN/Rapoarte/rap_marfa_nelivrata.FRT new file mode 100644 index 0000000..c85b38f Binary files /dev/null and b/COMUN/Rapoarte/rap_marfa_nelivrata.FRT differ diff --git a/COMUN/Rapoarte/rap_marfa_nelivrata.frx b/COMUN/Rapoarte/rap_marfa_nelivrata.frx new file mode 100644 index 0000000..955b95d Binary files /dev/null and b/COMUN/Rapoarte/rap_marfa_nelivrata.frx differ diff --git a/COMUN/Rapoarte/rap_mesaje.FRT b/COMUN/Rapoarte/rap_mesaje.FRT new file mode 100644 index 0000000..2aeb557 Binary files /dev/null and b/COMUN/Rapoarte/rap_mesaje.FRT differ diff --git a/COMUN/Rapoarte/rap_mesaje.frx b/COMUN/Rapoarte/rap_mesaje.frx new file mode 100644 index 0000000..da193ed Binary files /dev/null and b/COMUN/Rapoarte/rap_mesaje.frx differ diff --git a/COMUN/Rapoarte/rap_necesar_echip.FRT b/COMUN/Rapoarte/rap_necesar_echip.FRT new file mode 100644 index 0000000..2d9bac1 Binary files /dev/null and b/COMUN/Rapoarte/rap_necesar_echip.FRT differ diff --git a/COMUN/Rapoarte/rap_necesar_echip.frx b/COMUN/Rapoarte/rap_necesar_echip.frx new file mode 100644 index 0000000..05eded9 Binary files /dev/null and b/COMUN/Rapoarte/rap_necesar_echip.frx differ diff --git a/COMUN/Rapoarte/rap_necesar_echip_cum.FRT b/COMUN/Rapoarte/rap_necesar_echip_cum.FRT new file mode 100644 index 0000000..1a9d57c Binary files /dev/null and b/COMUN/Rapoarte/rap_necesar_echip_cum.FRT differ diff --git a/COMUN/Rapoarte/rap_necesar_echip_cum.frx b/COMUN/Rapoarte/rap_necesar_echip_cum.frx new file mode 100644 index 0000000..131844f Binary files /dev/null and b/COMUN/Rapoarte/rap_necesar_echip_cum.frx differ diff --git a/COMUN/Rapoarte/rap_necesar_echip_cum_art.FRT b/COMUN/Rapoarte/rap_necesar_echip_cum_art.FRT new file mode 100644 index 0000000..d5d0726 Binary files /dev/null and b/COMUN/Rapoarte/rap_necesar_echip_cum_art.FRT differ diff --git a/COMUN/Rapoarte/rap_necesar_echip_cum_art.frx b/COMUN/Rapoarte/rap_necesar_echip_cum_art.frx new file mode 100644 index 0000000..aacdf7a Binary files /dev/null and b/COMUN/Rapoarte/rap_necesar_echip_cum_art.frx differ diff --git a/COMUN/Rapoarte/rap_nir_marfuri.FRT b/COMUN/Rapoarte/rap_nir_marfuri.FRT new file mode 100644 index 0000000..b040e4c Binary files /dev/null and b/COMUN/Rapoarte/rap_nir_marfuri.FRT differ diff --git a/COMUN/Rapoarte/rap_nir_marfuri.frx b/COMUN/Rapoarte/rap_nir_marfuri.frx new file mode 100644 index 0000000..4d49c61 Binary files /dev/null and b/COMUN/Rapoarte/rap_nir_marfuri.frx differ diff --git a/COMUN/Rapoarte/rap_nir_materiale.FRT b/COMUN/Rapoarte/rap_nir_materiale.FRT new file mode 100644 index 0000000..5dd271c Binary files /dev/null and b/COMUN/Rapoarte/rap_nir_materiale.FRT differ diff --git a/COMUN/Rapoarte/rap_nir_materiale.frx b/COMUN/Rapoarte/rap_nir_materiale.frx new file mode 100644 index 0000000..4d56013 Binary files /dev/null and b/COMUN/Rapoarte/rap_nir_materiale.frx differ diff --git a/COMUN/Rapoarte/rap_nir_standard.frt b/COMUN/Rapoarte/rap_nir_standard.frt new file mode 100644 index 0000000..618529b Binary files /dev/null and b/COMUN/Rapoarte/rap_nir_standard.frt differ diff --git a/COMUN/Rapoarte/rap_nir_standard.frx b/COMUN/Rapoarte/rap_nir_standard.frx new file mode 100644 index 0000000..c60c5f6 Binary files /dev/null and b/COMUN/Rapoarte/rap_nir_standard.frx differ diff --git a/COMUN/Rapoarte/rap_nir_toate.FRT b/COMUN/Rapoarte/rap_nir_toate.FRT new file mode 100644 index 0000000..258f67e Binary files /dev/null and b/COMUN/Rapoarte/rap_nir_toate.FRT differ diff --git a/COMUN/Rapoarte/rap_nir_toate.frx b/COMUN/Rapoarte/rap_nir_toate.frx new file mode 100644 index 0000000..ff5b03e Binary files /dev/null and b/COMUN/Rapoarte/rap_nir_toate.frx differ diff --git a/COMUN/Rapoarte/rap_nirrezervare.FRT b/COMUN/Rapoarte/rap_nirrezervare.FRT new file mode 100644 index 0000000..054977c Binary files /dev/null and b/COMUN/Rapoarte/rap_nirrezervare.FRT differ diff --git a/COMUN/Rapoarte/rap_nirrezervare.frx b/COMUN/Rapoarte/rap_nirrezervare.frx new file mode 100644 index 0000000..348c94c Binary files /dev/null and b/COMUN/Rapoarte/rap_nirrezervare.frx differ diff --git a/COMUN/Rapoarte/rap_nirtransfer_achi2.FRT b/COMUN/Rapoarte/rap_nirtransfer_achi2.FRT new file mode 100644 index 0000000..a864a4b Binary files /dev/null and b/COMUN/Rapoarte/rap_nirtransfer_achi2.FRT differ diff --git a/COMUN/Rapoarte/rap_nirtransfer_achi2.frx b/COMUN/Rapoarte/rap_nirtransfer_achi2.frx new file mode 100644 index 0000000..2ed5402 Binary files /dev/null and b/COMUN/Rapoarte/rap_nirtransfer_achi2.frx differ diff --git a/COMUN/Rapoarte/rap_nirtransfer_achi2_durata.FRT b/COMUN/Rapoarte/rap_nirtransfer_achi2_durata.FRT new file mode 100644 index 0000000..9b323ca Binary files /dev/null and b/COMUN/Rapoarte/rap_nirtransfer_achi2_durata.FRT differ diff --git a/COMUN/Rapoarte/rap_nirtransfer_achi2_durata.frx b/COMUN/Rapoarte/rap_nirtransfer_achi2_durata.frx new file mode 100644 index 0000000..8c81375 Binary files /dev/null and b/COMUN/Rapoarte/rap_nirtransfer_achi2_durata.frx differ diff --git a/COMUN/Rapoarte/rap_nirtransfer_vanz.FRT b/COMUN/Rapoarte/rap_nirtransfer_vanz.FRT new file mode 100644 index 0000000..21a0d65 Binary files /dev/null and b/COMUN/Rapoarte/rap_nirtransfer_vanz.FRT differ diff --git a/COMUN/Rapoarte/rap_nirtransfer_vanz.frx b/COMUN/Rapoarte/rap_nirtransfer_vanz.frx new file mode 100644 index 0000000..e259553 Binary files /dev/null and b/COMUN/Rapoarte/rap_nirtransfer_vanz.frx differ diff --git a/COMUN/Rapoarte/rap_nota_inv2005.FRT b/COMUN/Rapoarte/rap_nota_inv2005.FRT new file mode 100644 index 0000000..91f6f6f Binary files /dev/null and b/COMUN/Rapoarte/rap_nota_inv2005.FRT differ diff --git a/COMUN/Rapoarte/rap_nota_inv2005.frx b/COMUN/Rapoarte/rap_nota_inv2005.frx new file mode 100644 index 0000000..1b3c760 Binary files /dev/null and b/COMUN/Rapoarte/rap_nota_inv2005.frx differ diff --git a/COMUN/Rapoarte/rap_nota_inv2005_mag.FRT b/COMUN/Rapoarte/rap_nota_inv2005_mag.FRT new file mode 100644 index 0000000..c252c95 Binary files /dev/null and b/COMUN/Rapoarte/rap_nota_inv2005_mag.FRT differ diff --git a/COMUN/Rapoarte/rap_nota_inv2005_mag.frx b/COMUN/Rapoarte/rap_nota_inv2005_mag.frx new file mode 100644 index 0000000..78ef9f0 Binary files /dev/null and b/COMUN/Rapoarte/rap_nota_inv2005_mag.frx differ diff --git a/COMUN/Rapoarte/rap_nota_inv2005_mag_necompletat.FRT b/COMUN/Rapoarte/rap_nota_inv2005_mag_necompletat.FRT new file mode 100644 index 0000000..1dffac3 Binary files /dev/null and b/COMUN/Rapoarte/rap_nota_inv2005_mag_necompletat.FRT differ diff --git a/COMUN/Rapoarte/rap_nota_inv2005_mag_necompletat.frx b/COMUN/Rapoarte/rap_nota_inv2005_mag_necompletat.frx new file mode 100644 index 0000000..ceb5478 Binary files /dev/null and b/COMUN/Rapoarte/rap_nota_inv2005_mag_necompletat.frx differ diff --git a/COMUN/Rapoarte/rap_nota_inv2005_mag_necompletat_redus.FRT b/COMUN/Rapoarte/rap_nota_inv2005_mag_necompletat_redus.FRT new file mode 100644 index 0000000..07ed3e5 Binary files /dev/null and b/COMUN/Rapoarte/rap_nota_inv2005_mag_necompletat_redus.FRT differ diff --git a/COMUN/Rapoarte/rap_nota_inv2005_mag_necompletat_redus.frx b/COMUN/Rapoarte/rap_nota_inv2005_mag_necompletat_redus.frx new file mode 100644 index 0000000..23dfb4d Binary files /dev/null and b/COMUN/Rapoarte/rap_nota_inv2005_mag_necompletat_redus.frx differ diff --git a/COMUN/Rapoarte/rap_nota_inv2005_necompletat.FRT b/COMUN/Rapoarte/rap_nota_inv2005_necompletat.FRT new file mode 100644 index 0000000..59026e8 Binary files /dev/null and b/COMUN/Rapoarte/rap_nota_inv2005_necompletat.FRT differ diff --git a/COMUN/Rapoarte/rap_nota_inv2005_necompletat.frx b/COMUN/Rapoarte/rap_nota_inv2005_necompletat.frx new file mode 100644 index 0000000..ca835c3 Binary files /dev/null and b/COMUN/Rapoarte/rap_nota_inv2005_necompletat.frx differ diff --git a/COMUN/Rapoarte/rap_nota_inv2005_necompletat_tot.FRT b/COMUN/Rapoarte/rap_nota_inv2005_necompletat_tot.FRT new file mode 100644 index 0000000..1509dc5 Binary files /dev/null and b/COMUN/Rapoarte/rap_nota_inv2005_necompletat_tot.FRT differ diff --git a/COMUN/Rapoarte/rap_nota_inv2005_necompletat_tot.frx b/COMUN/Rapoarte/rap_nota_inv2005_necompletat_tot.frx new file mode 100644 index 0000000..6fdc0b2 Binary files /dev/null and b/COMUN/Rapoarte/rap_nota_inv2005_necompletat_tot.frx differ diff --git a/COMUN/Rapoarte/rap_nota_invmagazin.FRT b/COMUN/Rapoarte/rap_nota_invmagazin.FRT new file mode 100644 index 0000000..173ea2a Binary files /dev/null and b/COMUN/Rapoarte/rap_nota_invmagazin.FRT differ diff --git a/COMUN/Rapoarte/rap_nota_invmagazin.frx b/COMUN/Rapoarte/rap_nota_invmagazin.frx new file mode 100644 index 0000000..c901aff Binary files /dev/null and b/COMUN/Rapoarte/rap_nota_invmagazin.frx differ diff --git a/COMUN/Rapoarte/rap_recap_inv2005_mag.FRT b/COMUN/Rapoarte/rap_recap_inv2005_mag.FRT new file mode 100644 index 0000000..74c879a Binary files /dev/null and b/COMUN/Rapoarte/rap_recap_inv2005_mag.FRT differ diff --git a/COMUN/Rapoarte/rap_recap_inv2005_mag.frx b/COMUN/Rapoarte/rap_recap_inv2005_mag.frx new file mode 100644 index 0000000..cd802c4 Binary files /dev/null and b/COMUN/Rapoarte/rap_recap_inv2005_mag.frx differ diff --git a/COMUN/Rapoarte/rap_regjurnal.FRT b/COMUN/Rapoarte/rap_regjurnal.FRT new file mode 100644 index 0000000..d560406 Binary files /dev/null and b/COMUN/Rapoarte/rap_regjurnal.FRT differ diff --git a/COMUN/Rapoarte/rap_regjurnal.frx b/COMUN/Rapoarte/rap_regjurnal.frx new file mode 100644 index 0000000..581735b Binary files /dev/null and b/COMUN/Rapoarte/rap_regjurnal.frx differ diff --git a/COMUN/Rapoarte/rap_regjurnal_val.FRT b/COMUN/Rapoarte/rap_regjurnal_val.FRT new file mode 100644 index 0000000..c6d0442 Binary files /dev/null and b/COMUN/Rapoarte/rap_regjurnal_val.FRT differ diff --git a/COMUN/Rapoarte/rap_regjurnal_val.frx b/COMUN/Rapoarte/rap_regjurnal_val.frx new file mode 100644 index 0000000..f838017 Binary files /dev/null and b/COMUN/Rapoarte/rap_regjurnal_val.frx differ diff --git a/COMUN/Rapoarte/rap_retetar.FRT b/COMUN/Rapoarte/rap_retetar.FRT new file mode 100644 index 0000000..10711dd Binary files /dev/null and b/COMUN/Rapoarte/rap_retetar.FRT differ diff --git a/COMUN/Rapoarte/rap_retetar.frx b/COMUN/Rapoarte/rap_retetar.frx new file mode 100644 index 0000000..8e51834 Binary files /dev/null and b/COMUN/Rapoarte/rap_retetar.frx differ diff --git a/COMUN/Rapoarte/rap_retur_achi.FRT b/COMUN/Rapoarte/rap_retur_achi.FRT new file mode 100644 index 0000000..4a4b49f Binary files /dev/null and b/COMUN/Rapoarte/rap_retur_achi.FRT differ diff --git a/COMUN/Rapoarte/rap_retur_achi.frx b/COMUN/Rapoarte/rap_retur_achi.frx new file mode 100644 index 0000000..79b5b56 Binary files /dev/null and b/COMUN/Rapoarte/rap_retur_achi.frx differ diff --git a/COMUN/Rapoarte/rap_retur_vanz.FRT b/COMUN/Rapoarte/rap_retur_vanz.FRT new file mode 100644 index 0000000..da2930d Binary files /dev/null and b/COMUN/Rapoarte/rap_retur_vanz.FRT differ diff --git a/COMUN/Rapoarte/rap_retur_vanz.frx b/COMUN/Rapoarte/rap_retur_vanz.frx new file mode 100644 index 0000000..dd2a78b Binary files /dev/null and b/COMUN/Rapoarte/rap_retur_vanz.frx differ diff --git a/COMUN/Rapoarte/rap_rulajesimple.FRT b/COMUN/Rapoarte/rap_rulajesimple.FRT new file mode 100644 index 0000000..4975e81 Binary files /dev/null and b/COMUN/Rapoarte/rap_rulajesimple.FRT differ diff --git a/COMUN/Rapoarte/rap_rulajesimple.frx b/COMUN/Rapoarte/rap_rulajesimple.frx new file mode 100644 index 0000000..d6ddfd9 Binary files /dev/null and b/COMUN/Rapoarte/rap_rulajesimple.frx differ diff --git a/COMUN/Rapoarte/rap_sch_pret.FRT b/COMUN/Rapoarte/rap_sch_pret.FRT new file mode 100644 index 0000000..6f8379b Binary files /dev/null and b/COMUN/Rapoarte/rap_sch_pret.FRT differ diff --git a/COMUN/Rapoarte/rap_sch_pret.frx b/COMUN/Rapoarte/rap_sch_pret.frx new file mode 100644 index 0000000..c11990b Binary files /dev/null and b/COMUN/Rapoarte/rap_sch_pret.frx differ diff --git a/COMUN/Rapoarte/rap_schimbpret.FRT b/COMUN/Rapoarte/rap_schimbpret.FRT new file mode 100644 index 0000000..f3d6c05 Binary files /dev/null and b/COMUN/Rapoarte/rap_schimbpret.FRT differ diff --git a/COMUN/Rapoarte/rap_schimbpret.frx b/COMUN/Rapoarte/rap_schimbpret.frx new file mode 100644 index 0000000..c1b0cb0 Binary files /dev/null and b/COMUN/Rapoarte/rap_schimbpret.frx differ diff --git a/COMUN/Rapoarte/rap_stoc.FRT b/COMUN/Rapoarte/rap_stoc.FRT new file mode 100644 index 0000000..7af95f1 Binary files /dev/null and b/COMUN/Rapoarte/rap_stoc.FRT differ diff --git a/COMUN/Rapoarte/rap_stoc.frx b/COMUN/Rapoarte/rap_stoc.frx new file mode 100644 index 0000000..e2a928f Binary files /dev/null and b/COMUN/Rapoarte/rap_stoc.frx differ diff --git a/COMUN/Rapoarte/rap_stoc_art.FRT b/COMUN/Rapoarte/rap_stoc_art.FRT new file mode 100644 index 0000000..c49d5e3 Binary files /dev/null and b/COMUN/Rapoarte/rap_stoc_art.FRT differ diff --git a/COMUN/Rapoarte/rap_stoc_art.frx b/COMUN/Rapoarte/rap_stoc_art.frx new file mode 100644 index 0000000..72d9284 Binary files /dev/null and b/COMUN/Rapoarte/rap_stoc_art.frx differ diff --git a/COMUN/Rapoarte/rap_stoc_art_cant.FRT b/COMUN/Rapoarte/rap_stoc_art_cant.FRT new file mode 100644 index 0000000..e88cf6f Binary files /dev/null and b/COMUN/Rapoarte/rap_stoc_art_cant.FRT differ diff --git a/COMUN/Rapoarte/rap_stoc_art_cant.frx b/COMUN/Rapoarte/rap_stoc_art_cant.frx new file mode 100644 index 0000000..9575be0 Binary files /dev/null and b/COMUN/Rapoarte/rap_stoc_art_cant.frx differ diff --git a/COMUN/Rapoarte/rap_stoc_borderou.FRT b/COMUN/Rapoarte/rap_stoc_borderou.FRT new file mode 100644 index 0000000..325105a Binary files /dev/null and b/COMUN/Rapoarte/rap_stoc_borderou.FRT differ diff --git a/COMUN/Rapoarte/rap_stoc_borderou.frx b/COMUN/Rapoarte/rap_stoc_borderou.frx new file mode 100644 index 0000000..759459f Binary files /dev/null and b/COMUN/Rapoarte/rap_stoc_borderou.frx differ diff --git a/COMUN/Rapoarte/rap_stoc_pretv.FRT b/COMUN/Rapoarte/rap_stoc_pretv.FRT new file mode 100644 index 0000000..e665441 Binary files /dev/null and b/COMUN/Rapoarte/rap_stoc_pretv.FRT differ diff --git a/COMUN/Rapoarte/rap_stoc_pretv.frx b/COMUN/Rapoarte/rap_stoc_pretv.frx new file mode 100644 index 0000000..343c847 Binary files /dev/null and b/COMUN/Rapoarte/rap_stoc_pretv.frx differ diff --git a/COMUN/Rapoarte/rap_stocachi_grup.frt b/COMUN/Rapoarte/rap_stocachi_grup.frt new file mode 100644 index 0000000..ff2cbd4 Binary files /dev/null and b/COMUN/Rapoarte/rap_stocachi_grup.frt differ diff --git a/COMUN/Rapoarte/rap_stocachi_grup.frx b/COMUN/Rapoarte/rap_stocachi_grup.frx new file mode 100644 index 0000000..be5e666 Binary files /dev/null and b/COMUN/Rapoarte/rap_stocachi_grup.frx differ diff --git a/COMUN/Rapoarte/rap_stocachi_grup2.FRT b/COMUN/Rapoarte/rap_stocachi_grup2.FRT new file mode 100644 index 0000000..159accc Binary files /dev/null and b/COMUN/Rapoarte/rap_stocachi_grup2.FRT differ diff --git a/COMUN/Rapoarte/rap_stocachi_grup2.frx b/COMUN/Rapoarte/rap_stocachi_grup2.frx new file mode 100644 index 0000000..26adbd9 Binary files /dev/null and b/COMUN/Rapoarte/rap_stocachi_grup2.frx differ diff --git a/COMUN/Rapoarte/rap_stocachi_grup3.FRT b/COMUN/Rapoarte/rap_stocachi_grup3.FRT new file mode 100644 index 0000000..b9f82fb Binary files /dev/null and b/COMUN/Rapoarte/rap_stocachi_grup3.FRT differ diff --git a/COMUN/Rapoarte/rap_stocachi_grup3.frx b/COMUN/Rapoarte/rap_stocachi_grup3.frx new file mode 100644 index 0000000..76672c2 Binary files /dev/null and b/COMUN/Rapoarte/rap_stocachi_grup3.frx differ diff --git a/COMUN/Rapoarte/rap_stocachi_grup_obinv.frt b/COMUN/Rapoarte/rap_stocachi_grup_obinv.frt new file mode 100644 index 0000000..a4b6bca Binary files /dev/null and b/COMUN/Rapoarte/rap_stocachi_grup_obinv.frt differ diff --git a/COMUN/Rapoarte/rap_stocachi_grup_obinv.frx b/COMUN/Rapoarte/rap_stocachi_grup_obinv.frx new file mode 100644 index 0000000..b2aa51e Binary files /dev/null and b/COMUN/Rapoarte/rap_stocachi_grup_obinv.frx differ diff --git a/COMUN/Rapoarte/rap_stocvanz_grup.FRT b/COMUN/Rapoarte/rap_stocvanz_grup.FRT new file mode 100644 index 0000000..486bfa3 Binary files /dev/null and b/COMUN/Rapoarte/rap_stocvanz_grup.FRT differ diff --git a/COMUN/Rapoarte/rap_stocvanz_grup.frx b/COMUN/Rapoarte/rap_stocvanz_grup.frx new file mode 100644 index 0000000..a324b9e Binary files /dev/null and b/COMUN/Rapoarte/rap_stocvanz_grup.frx differ diff --git a/COMUN/Rapoarte/rap_stocvanzachi_grup.FRT b/COMUN/Rapoarte/rap_stocvanzachi_grup.FRT new file mode 100644 index 0000000..39aac49 Binary files /dev/null and b/COMUN/Rapoarte/rap_stocvanzachi_grup.FRT differ diff --git a/COMUN/Rapoarte/rap_stocvanzachi_grup.frx b/COMUN/Rapoarte/rap_stocvanzachi_grup.frx new file mode 100644 index 0000000..39e96bb Binary files /dev/null and b/COMUN/Rapoarte/rap_stocvanzachi_grup.frx differ diff --git a/COMUN/Rapoarte/rap_stocvanzachi_simplu_grup.FRT b/COMUN/Rapoarte/rap_stocvanzachi_simplu_grup.FRT new file mode 100644 index 0000000..346e275 Binary files /dev/null and b/COMUN/Rapoarte/rap_stocvanzachi_simplu_grup.FRT differ diff --git a/COMUN/Rapoarte/rap_stocvanzachi_simplu_grup.frx b/COMUN/Rapoarte/rap_stocvanzachi_simplu_grup.frx new file mode 100644 index 0000000..7ac6c03 Binary files /dev/null and b/COMUN/Rapoarte/rap_stocvanzachi_simplu_grup.frx differ diff --git a/COMUN/Rapoarte/rap_transferart.FRT b/COMUN/Rapoarte/rap_transferart.FRT new file mode 100644 index 0000000..6b7ed1c Binary files /dev/null and b/COMUN/Rapoarte/rap_transferart.FRT differ diff --git a/COMUN/Rapoarte/rap_transferart.frx b/COMUN/Rapoarte/rap_transferart.frx new file mode 100644 index 0000000..28c6ae2 Binary files /dev/null and b/COMUN/Rapoarte/rap_transferart.frx differ diff --git a/COMUN/Rapoarte/rap_vanzari_comp_cant.FRT b/COMUN/Rapoarte/rap_vanzari_comp_cant.FRT new file mode 100644 index 0000000..6d70a19 Binary files /dev/null and b/COMUN/Rapoarte/rap_vanzari_comp_cant.FRT differ diff --git a/COMUN/Rapoarte/rap_vanzari_comp_cant.frx b/COMUN/Rapoarte/rap_vanzari_comp_cant.frx new file mode 100644 index 0000000..a5fcf73 Binary files /dev/null and b/COMUN/Rapoarte/rap_vanzari_comp_cant.frx differ diff --git a/COMUN/Rapoarte/rap_vanzari_comp_cant_4cat.FRT b/COMUN/Rapoarte/rap_vanzari_comp_cant_4cat.FRT new file mode 100644 index 0000000..a5b6bd3 Binary files /dev/null and b/COMUN/Rapoarte/rap_vanzari_comp_cant_4cat.FRT differ diff --git a/COMUN/Rapoarte/rap_vanzari_comp_cant_4cat.frx b/COMUN/Rapoarte/rap_vanzari_comp_cant_4cat.frx new file mode 100644 index 0000000..5d2f120 Binary files /dev/null and b/COMUN/Rapoarte/rap_vanzari_comp_cant_4cat.frx differ diff --git a/COMUN/Rapoarte/rap_vanzari_comp_val.FRT b/COMUN/Rapoarte/rap_vanzari_comp_val.FRT new file mode 100644 index 0000000..e31b4ff Binary files /dev/null and b/COMUN/Rapoarte/rap_vanzari_comp_val.FRT differ diff --git a/COMUN/Rapoarte/rap_vanzari_comp_val.frx b/COMUN/Rapoarte/rap_vanzari_comp_val.frx new file mode 100644 index 0000000..afd6e1a Binary files /dev/null and b/COMUN/Rapoarte/rap_vanzari_comp_val.frx differ diff --git a/COMUN/Rapoarte/rap_vanzari_web.FRT b/COMUN/Rapoarte/rap_vanzari_web.FRT new file mode 100644 index 0000000..8023d03 Binary files /dev/null and b/COMUN/Rapoarte/rap_vanzari_web.FRT differ diff --git a/COMUN/Rapoarte/rap_vanzari_web.frx b/COMUN/Rapoarte/rap_vanzari_web.frx new file mode 100644 index 0000000..70b9e33 Binary files /dev/null and b/COMUN/Rapoarte/rap_vanzari_web.frx differ diff --git a/COMUN/Rapoarte/rapbal_a3_5_14_6_30_a.FRT b/COMUN/Rapoarte/rapbal_a3_5_14_6_30_a.FRT new file mode 100644 index 0000000..4696a4c Binary files /dev/null and b/COMUN/Rapoarte/rapbal_a3_5_14_6_30_a.FRT differ diff --git a/COMUN/Rapoarte/rapbal_a3_5_14_6_30_a.frx b/COMUN/Rapoarte/rapbal_a3_5_14_6_30_a.frx new file mode 100644 index 0000000..64485d7 Binary files /dev/null and b/COMUN/Rapoarte/rapbal_a3_5_14_6_30_a.frx differ diff --git a/COMUN/Rapoarte/rapbal_a3_6_14_6_30_b.FRT b/COMUN/Rapoarte/rapbal_a3_6_14_6_30_b.FRT new file mode 100644 index 0000000..ceb0ae7 Binary files /dev/null and b/COMUN/Rapoarte/rapbal_a3_6_14_6_30_b.FRT differ diff --git a/COMUN/Rapoarte/rapbal_a3_6_14_6_30_b.frx b/COMUN/Rapoarte/rapbal_a3_6_14_6_30_b.frx new file mode 100644 index 0000000..08dc7e6 Binary files /dev/null and b/COMUN/Rapoarte/rapbal_a3_6_14_6_30_b.frx differ diff --git a/COMUN/Rapoarte/rapbal_a4_4_14_6_30.FRT b/COMUN/Rapoarte/rapbal_a4_4_14_6_30.FRT new file mode 100644 index 0000000..2f6017c Binary files /dev/null and b/COMUN/Rapoarte/rapbal_a4_4_14_6_30.FRT differ diff --git a/COMUN/Rapoarte/rapbal_a4_4_14_6_30.frx b/COMUN/Rapoarte/rapbal_a4_4_14_6_30.frx new file mode 100644 index 0000000..3d2290e Binary files /dev/null and b/COMUN/Rapoarte/rapbal_a4_4_14_6_30.frx differ diff --git a/COMUN/Rapoarte/rapbal_a4_4_14_6_30_a.FRT b/COMUN/Rapoarte/rapbal_a4_4_14_6_30_a.FRT new file mode 100644 index 0000000..72ad84f Binary files /dev/null and b/COMUN/Rapoarte/rapbal_a4_4_14_6_30_a.FRT differ diff --git a/COMUN/Rapoarte/rapbal_a4_4_14_6_30_a.frx b/COMUN/Rapoarte/rapbal_a4_4_14_6_30_a.frx new file mode 100644 index 0000000..f14eeae Binary files /dev/null and b/COMUN/Rapoarte/rapbal_a4_4_14_6_30_a.frx differ diff --git a/COMUN/Rapoarte/rapbal_a4_4_14_6_30_a1.FRT b/COMUN/Rapoarte/rapbal_a4_4_14_6_30_a1.FRT new file mode 100644 index 0000000..b73a119 Binary files /dev/null and b/COMUN/Rapoarte/rapbal_a4_4_14_6_30_a1.FRT differ diff --git a/COMUN/Rapoarte/rapbal_a4_4_14_6_30_a1.frx b/COMUN/Rapoarte/rapbal_a4_4_14_6_30_a1.frx new file mode 100644 index 0000000..8efe082 Binary files /dev/null and b/COMUN/Rapoarte/rapbal_a4_4_14_6_30_a1.frx differ diff --git a/COMUN/Rapoarte/rapbal_solduri_a3.FRT b/COMUN/Rapoarte/rapbal_solduri_a3.FRT new file mode 100644 index 0000000..199de00 Binary files /dev/null and b/COMUN/Rapoarte/rapbal_solduri_a3.FRT differ diff --git a/COMUN/Rapoarte/rapbal_solduri_a3.frx b/COMUN/Rapoarte/rapbal_solduri_a3.frx new file mode 100644 index 0000000..9f7dd60 Binary files /dev/null and b/COMUN/Rapoarte/rapbal_solduri_a3.frx differ diff --git a/COMUN/Rapoarte/rapbal_solduri_a4.FRT b/COMUN/Rapoarte/rapbal_solduri_a4.FRT new file mode 100644 index 0000000..4cd5b6a Binary files /dev/null and b/COMUN/Rapoarte/rapbal_solduri_a4.FRT differ diff --git a/COMUN/Rapoarte/rapbal_solduri_a4.frx b/COMUN/Rapoarte/rapbal_solduri_a4.frx new file mode 100644 index 0000000..9cc42dd Binary files /dev/null and b/COMUN/Rapoarte/rapbal_solduri_a4.frx differ diff --git a/COMUN/Rapoarte/rapbal_total_a4.FRT b/COMUN/Rapoarte/rapbal_total_a4.FRT new file mode 100644 index 0000000..2f9128c Binary files /dev/null and b/COMUN/Rapoarte/rapbal_total_a4.FRT differ diff --git a/COMUN/Rapoarte/rapbal_total_a4.frx b/COMUN/Rapoarte/rapbal_total_a4.frx new file mode 100644 index 0000000..c027340 Binary files /dev/null and b/COMUN/Rapoarte/rapbal_total_a4.frx differ diff --git a/COMUN/Rapoarte/recapitulatie.FRT b/COMUN/Rapoarte/recapitulatie.FRT new file mode 100644 index 0000000..29feab0 Binary files /dev/null and b/COMUN/Rapoarte/recapitulatie.FRT differ diff --git a/COMUN/Rapoarte/recapitulatie.frx b/COMUN/Rapoarte/recapitulatie.frx new file mode 100644 index 0000000..228818f Binary files /dev/null and b/COMUN/Rapoarte/recapitulatie.frx differ diff --git a/COMUN/Rapoarte/registru_banca_rpt1.FRT b/COMUN/Rapoarte/registru_banca_rpt1.FRT new file mode 100644 index 0000000..a1da04c Binary files /dev/null and b/COMUN/Rapoarte/registru_banca_rpt1.FRT differ diff --git a/COMUN/Rapoarte/registru_banca_rpt1.frx b/COMUN/Rapoarte/registru_banca_rpt1.frx new file mode 100644 index 0000000..cda12f4 Binary files /dev/null and b/COMUN/Rapoarte/registru_banca_rpt1.frx differ diff --git a/COMUN/Rapoarte/registru_casa_rpt1.FRT b/COMUN/Rapoarte/registru_casa_rpt1.FRT new file mode 100644 index 0000000..c3e439c Binary files /dev/null and b/COMUN/Rapoarte/registru_casa_rpt1.FRT differ diff --git a/COMUN/Rapoarte/registru_casa_rpt1.frx b/COMUN/Rapoarte/registru_casa_rpt1.frx new file mode 100644 index 0000000..aa713f7 Binary files /dev/null and b/COMUN/Rapoarte/registru_casa_rpt1.frx differ diff --git a/COMUN/Rapoarte/registru_casa_rpt3.FRT b/COMUN/Rapoarte/registru_casa_rpt3.FRT new file mode 100644 index 0000000..c785991 Binary files /dev/null and b/COMUN/Rapoarte/registru_casa_rpt3.FRT differ diff --git a/COMUN/Rapoarte/registru_casa_rpt3.frx b/COMUN/Rapoarte/registru_casa_rpt3.frx new file mode 100644 index 0000000..909c725 Binary files /dev/null and b/COMUN/Rapoarte/registru_casa_rpt3.frx differ diff --git a/COMUN/Rapoarte/registru_casabanca_rpt2.FRT b/COMUN/Rapoarte/registru_casabanca_rpt2.FRT new file mode 100644 index 0000000..50fc3ed Binary files /dev/null and b/COMUN/Rapoarte/registru_casabanca_rpt2.FRT differ diff --git a/COMUN/Rapoarte/registru_casabanca_rpt2.frx b/COMUN/Rapoarte/registru_casabanca_rpt2.frx new file mode 100644 index 0000000..ef222a3 Binary files /dev/null and b/COMUN/Rapoarte/registru_casabanca_rpt2.frx differ diff --git a/COMUN/Rapoarte/registru_casabanca_valuta_rpt1.FRT b/COMUN/Rapoarte/registru_casabanca_valuta_rpt1.FRT new file mode 100644 index 0000000..8e58b1d Binary files /dev/null and b/COMUN/Rapoarte/registru_casabanca_valuta_rpt1.FRT differ diff --git a/COMUN/Rapoarte/registru_casabanca_valuta_rpt1.frx b/COMUN/Rapoarte/registru_casabanca_valuta_rpt1.frx new file mode 100644 index 0000000..b60160d Binary files /dev/null and b/COMUN/Rapoarte/registru_casabanca_valuta_rpt1.frx differ diff --git a/COMUN/Rapoarte/rvenchelt.FRT b/COMUN/Rapoarte/rvenchelt.FRT new file mode 100644 index 0000000..48dd03c Binary files /dev/null and b/COMUN/Rapoarte/rvenchelt.FRT differ diff --git a/COMUN/Rapoarte/rvenchelt.frx b/COMUN/Rapoarte/rvenchelt.frx new file mode 100644 index 0000000..673aa98 Binary files /dev/null and b/COMUN/Rapoarte/rvenchelt.frx differ diff --git a/COMUN/changelog_template.txt b/COMUN/changelog_template.txt new file mode 100644 index 0000000..43443de --- /dev/null +++ b/COMUN/changelog_template.txt @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/COMUN/clase/APPWIZ.VCT b/COMUN/clase/APPWIZ.VCT new file mode 100644 index 0000000..eb399bf Binary files /dev/null and b/COMUN/clase/APPWIZ.VCT differ diff --git a/COMUN/clase/CLOSED.BMP b/COMUN/clase/CLOSED.BMP new file mode 100644 index 0000000..5593a80 Binary files /dev/null and b/COMUN/clase/CLOSED.BMP differ diff --git a/COMUN/clase/ImportData.VCT b/COMUN/clase/ImportData.VCT new file mode 100644 index 0000000..b1ca324 Binary files /dev/null and b/COMUN/clase/ImportData.VCT differ diff --git a/COMUN/clase/LEAF.BMP b/COMUN/clase/LEAF.BMP new file mode 100644 index 0000000..5c78080 Binary files /dev/null and b/COMUN/clase/LEAF.BMP differ diff --git a/COMUN/clase/Locale/Locale.DBF b/COMUN/clase/Locale/Locale.DBF new file mode 100644 index 0000000..f561b92 Binary files /dev/null and b/COMUN/clase/Locale/Locale.DBF differ diff --git a/COMUN/clase/Locale/Locale_back.CDX b/COMUN/clase/Locale/Locale_back.CDX new file mode 100644 index 0000000..f085856 Binary files /dev/null and b/COMUN/clase/Locale/Locale_back.CDX differ diff --git a/COMUN/clase/Locale/Locale_back.DBF b/COMUN/clase/Locale/Locale_back.DBF new file mode 100644 index 0000000..76289e1 Binary files /dev/null and b/COMUN/clase/Locale/Locale_back.DBF differ diff --git a/COMUN/clase/Locale/Locale_back.FPT b/COMUN/clase/Locale/Locale_back.FPT new file mode 100644 index 0000000..8effa46 Binary files /dev/null and b/COMUN/clase/Locale/Locale_back.FPT differ diff --git a/COMUN/clase/Locale/Locale_xref.CDX b/COMUN/clase/Locale/Locale_xref.CDX new file mode 100644 index 0000000..429cc6e Binary files /dev/null and b/COMUN/clase/Locale/Locale_xref.CDX differ diff --git a/COMUN/clase/Locale/locale.CDX b/COMUN/clase/Locale/locale.CDX new file mode 100644 index 0000000..3e67574 Binary files /dev/null and b/COMUN/clase/Locale/locale.CDX differ diff --git a/COMUN/clase/Locale/locale.DCT b/COMUN/clase/Locale/locale.DCT new file mode 100644 index 0000000..b000e3d Binary files /dev/null and b/COMUN/clase/Locale/locale.DCT differ diff --git a/COMUN/clase/Locale/locale.DCX b/COMUN/clase/Locale/locale.DCX new file mode 100644 index 0000000..74b10af Binary files /dev/null and b/COMUN/clase/Locale/locale.DCX differ diff --git a/COMUN/clase/Locale/locale.FPT b/COMUN/clase/Locale/locale.FPT new file mode 100644 index 0000000..601fa8d Binary files /dev/null and b/COMUN/clase/Locale/locale.FPT differ diff --git a/COMUN/clase/Locale/locale.dbc b/COMUN/clase/Locale/locale.dbc new file mode 100644 index 0000000..fc0f219 Binary files /dev/null and b/COMUN/clase/Locale/locale.dbc differ diff --git a/COMUN/clase/Locale/locale_lang.FPT b/COMUN/clase/Locale/locale_lang.FPT new file mode 100644 index 0000000..94aa1fd Binary files /dev/null and b/COMUN/clase/Locale/locale_lang.FPT differ diff --git a/COMUN/clase/Locale/locale_lang.cdx b/COMUN/clase/Locale/locale_lang.cdx new file mode 100644 index 0000000..1623f82 Binary files /dev/null and b/COMUN/clase/Locale/locale_lang.cdx differ diff --git a/COMUN/clase/Locale/locale_lang.dbf b/COMUN/clase/Locale/locale_lang.dbf new file mode 100644 index 0000000..2f4a179 Binary files /dev/null and b/COMUN/clase/Locale/locale_lang.dbf differ diff --git a/COMUN/clase/Locale/locale_source.CDX b/COMUN/clase/Locale/locale_source.CDX new file mode 100644 index 0000000..754b91f Binary files /dev/null and b/COMUN/clase/Locale/locale_source.CDX differ diff --git a/COMUN/clase/Locale/locale_source.DBF b/COMUN/clase/Locale/locale_source.DBF new file mode 100644 index 0000000..60ba760 Binary files /dev/null and b/COMUN/clase/Locale/locale_source.DBF differ diff --git a/COMUN/clase/Locale/locale_source.FPT b/COMUN/clase/Locale/locale_source.FPT new file mode 100644 index 0000000..697f721 Binary files /dev/null and b/COMUN/clase/Locale/locale_source.FPT differ diff --git a/COMUN/clase/Locale/locale_xref.DBF b/COMUN/clase/Locale/locale_xref.DBF new file mode 100644 index 0000000..16d75bc Binary files /dev/null and b/COMUN/clase/Locale/locale_xref.DBF differ diff --git a/COMUN/clase/MB_IconExclamation.bmp b/COMUN/clase/MB_IconExclamation.bmp new file mode 100644 index 0000000..632a365 Binary files /dev/null and b/COMUN/clase/MB_IconExclamation.bmp differ diff --git a/COMUN/clase/MB_IconInformation.bmp b/COMUN/clase/MB_IconInformation.bmp new file mode 100644 index 0000000..1d3eac6 Binary files /dev/null and b/COMUN/clase/MB_IconInformation.bmp differ diff --git a/COMUN/clase/MB_IconQuestion.bmp b/COMUN/clase/MB_IconQuestion.bmp new file mode 100644 index 0000000..49a5ee7 Binary files /dev/null and b/COMUN/clase/MB_IconQuestion.bmp differ diff --git a/COMUN/clase/MB_IconStop.bmp b/COMUN/clase/MB_IconStop.bmp new file mode 100644 index 0000000..38baae6 Binary files /dev/null and b/COMUN/clase/MB_IconStop.bmp differ diff --git a/COMUN/clase/MINUS.BMP b/COMUN/clase/MINUS.BMP new file mode 100644 index 0000000..316e17f Binary files /dev/null and b/COMUN/clase/MINUS.BMP differ diff --git a/COMUN/clase/MessageBox.h b/COMUN/clase/MessageBox.h new file mode 100644 index 0000000..53db1c4 --- /dev/null +++ b/COMUN/clase/MessageBox.h @@ -0,0 +1,52 @@ +#IFNDEF MESSAGEBOX_H +#DEFINE MESSAGEBOX_H + +#DEFINE CR CHR(13) +#DEFINE LF CHR(10) +#DEFINE CRLF CHR(13) + CHR(10) + +*-- MessageBox buttons caption (RO) +#DEFINE MB_CAPTION_OK "\|] + +* -- XML Output Listener-specific user-tunable settings + +#DEFINE OUTPUTXML OUTPUTXML_RAW + +#DEFINE OUTPUTXML_OBJTYPE_NODES 1100 +#DEFINE OUTPUTXML_OBJTYPE_BANDOFFSET 500 +#DEFINE OUTPUTXML_OBJCODE_DOC 100 +#DEFINE OUTPUTXML_OBJCODE_DATA 200 +#DEFINE OUTPUTXML_OBJCODE_RDL 300 +#DEFINE OUTPUTXML_OBJCODE_PAGES 400 +#DEFINE OUTPUTXML_OBJCODE_COLS 500 +#DEFINE OUTPUTXML_OBJCODE_ATTRIBMEMBER 600 + + +#DEFINE OUTPUTXML_GOOFTAG "XXXX" + +#DEFINE OUTPUTXML_DOMDOCUMENTOBJECT "Msxml2.FreeThreadedDOMDocument.4.0" +#DEFINE OUTPUTXML_DOMFREETHREADED_DOCUMENTOBJECT "Msxml2.FreeThreadedDOMDocument.4.0" +#DEFINE OUTPUTXML_XSLT_PROCESSOROBJECT "Msxml2.XSLTemplate.4.0" + + + diff --git a/COMUN/clase/reportlisteners_locs.h b/COMUN/clase/reportlisteners_locs.h new file mode 100644 index 0000000..620a2d1 --- /dev/null +++ b/COMUN/clase/reportlisteners_locs.h @@ -0,0 +1,85 @@ +* locs for VCX super-classes + +#DEFINE OUTPUTCLASS_APPNAME_LOC "VFP Report Output Class" + +#DEFINE OUTPUTCLASS_CONFIGTABLECREATED_LOC "Configuration table "+ m.lcDBF + " was created." +* or, if you prefer: "has been written to disk." + +#DEFINE OUTPUTCLASS_CONFIGTABLEWRONG_LOC "Configuration table is not in correct format." + +* this is different from XML because in the XML class they +* are used in SEEK() and require specific tagnames, whereas +* the superclasses just require certain indexes for optimizing LOCATES, + +#DEFINE OUTPUTCLASS_CONFIGINDEXMISSING_LOC "Configuration table is missing "+ CHR(13) + ; + "one or more required indexes." + +#DEFINE OUTPUTCLASS_INITSTATUS_LOC "Initializing... " +#DEFINE OUTPUTCLASS_PREPSTATUS_LOC "Running calculation prepass... " +#DEFINE OUTPUTCLASS_RUNSTATUS_LOC "Creating output... " +#DEFINE OUTPUTCLASS_TIME_SECONDS_LOC SPACE(1) + "sec(s)" +#DEFINE OUTPUTCLASS_CANCEL_INSTRUCTIONS_LOC "Press Esc to cancel... " +#DEFINE OUTPUTCLASS_REPORT_CANCELQUERY_LOC "Stop report execution?"+CHR(13) + ; + "(If you press 'No', report execution will continue.)" +#DEFINE OUTPUTCLASS_REPORT_INCOMPLETE_LOC "Report execution was cancelled." + CHR(13) + ; + "Your results are not complete." + +#DEFINE OUTPUTCLASS_SUCCESS_LOC THIS.AppName+" created your report as"+; + CHR(13)+THIS.TargetFileName+"." + CHR(13) + ; + IIF(THIS.AllowModalMessages,; + "Press 'Yes' to store" + CHR(13) + ; + "this filename in the Clipboard.","") + +#DEFINE OUTPUTCLASS_NOFILECREATE_LOC "File " + THIS.TargetFileName+" cannot be created." + +#DEFINE OUTPUTCLASS_CREATEERRORS_LOC THIS.AppName+" created your report as"+ ; + CHR(13)+THIS.TargetFileName+". "+CHR(13)+ ; + "However, an error occurred during processing." + CHR(13) + ; + OUTPUTCLASS_REPORT_INCOMPLETE_LOC +#DEFINE OUTPUTCLASS_PAGELIMIT_LOC "Your report exceeded a specified page limit (" + ; + TRANSFORM(THIS.PageLimit) + "). " + CHR(13) + ; + OUTPUTCLASS_REPORT_INCOMPLETE_LOC + + + + +#DEFINE OUTPUTCLASS_NOCREATE_LOC THIS.AppName +" was not able to create your report." + +#DEFINE OUTPUTCLASS_ERRNOLABEL_LOC "Error: " +#DEFINE OUTPUTCLASS_ERRPROCLABEL_LOC "Method: " +#DEFINE OUTPUTCLASS_ERRLINELABEL_LOC "Line: " + +* the following loc is eval'd for updateListener's actual progress bar message. +* In most cases, +* changing this value is overkill, as the localizable portions of +* the message are already localized as separate properties. +* All the status messagse as well as the therm caption can +* also be set at runtime without touching the locs. +#DEFINE OUTPUTCLASS_THERMCAPTION_LOC [m.cMessage+ " "+ TRANSFORM(INT(THIS.PercentDone*100)) + "%" ] + ; + [+ IIF(NOT THIS.IncludeSeconds, "" , " "+] + ; + [TRANSFORM(IIF(THIS.IsRunning,DATETIME(), THIS.ReportStopRunDateTime)-] + ; + [THIS.ReportStartRunDateTime)+" " + THIS.SecondsText)] + + +* locs for XML Listener class: + +#DEFINE OUTPUTXML_APPNAME_LOC "XML Listener" + +#DEFINE OUTPUTXML_CONFIGTAGMISSING_LOC "At least one required index tag is missing "+ CHR(13) + ; + "from the configuration table." + +#DEFINE OUTPUTXML_FRXMISSING_LOC "Required FRX cursor is not available." + + +#DEFINE OUTPUTXML_FRXCURSOR_MISSING_LOC "FRX cursor helper object cannot be found in " + CHR(13)+ ; + "_FRXCURSOR.VCX, "+CHR(13)+ ; + "_REPORTOUTPUT." + CHR(13) + CHR(13)+ ; + "Some features of this class may not be active." + +* locs for XML Display Listener Class: + +#DEFINE OUTPUTXMLDISPLAY_APPNAME_LOC "XML Display Listener" + +* locs for HTML: + +#DEFINE OUTPUTHTML_APPNAME_LOC "HTML Listener" \ No newline at end of file diff --git a/COMUN/clase/resizer.VCT b/COMUN/clase/resizer.VCT new file mode 100644 index 0000000..000a24a Binary files /dev/null and b/COMUN/clase/resizer.VCT differ diff --git a/COMUN/clase/resizer.vcx b/COMUN/clase/resizer.vcx new file mode 100644 index 0000000..f40697d Binary files /dev/null and b/COMUN/clase/resizer.vcx differ diff --git a/COMUN/clase/rulaje.VCT b/COMUN/clase/rulaje.VCT new file mode 100644 index 0000000..08e172e Binary files /dev/null and b/COMUN/clase/rulaje.VCT differ diff --git a/COMUN/clase/rulaje.vcx b/COMUN/clase/rulaje.vcx new file mode 100644 index 0000000..bf51317 Binary files /dev/null and b/COMUN/clase/rulaje.vcx differ diff --git a/COMUN/clase/scrollcontainer.VCT b/COMUN/clase/scrollcontainer.VCT new file mode 100644 index 0000000..b965e56 Binary files /dev/null and b/COMUN/clase/scrollcontainer.VCT differ diff --git a/COMUN/clase/scrollcontainer.vcx b/COMUN/clase/scrollcontainer.vcx new file mode 100644 index 0000000..f108482 Binary files /dev/null and b/COMUN/clase/scrollcontainer.vcx differ diff --git a/COMUN/clase/serii_numere.VCT b/COMUN/clase/serii_numere.VCT new file mode 100644 index 0000000..5dea573 Binary files /dev/null and b/COMUN/clase/serii_numere.VCT differ diff --git a/COMUN/clase/serii_numere.vcx b/COMUN/clase/serii_numere.vcx new file mode 100644 index 0000000..5e23218 Binary files /dev/null and b/COMUN/clase/serii_numere.vcx differ diff --git a/COMUN/clase/sfsplitter.VCT b/COMUN/clase/sfsplitter.VCT new file mode 100644 index 0000000..594f81a Binary files /dev/null and b/COMUN/clase/sfsplitter.VCT differ diff --git a/COMUN/clase/sfsplitter.vcx b/COMUN/clase/sfsplitter.vcx new file mode 100644 index 0000000..afbb517 Binary files /dev/null and b/COMUN/clase/sfsplitter.vcx differ diff --git a/COMUN/clase/solution.vcx b/COMUN/clase/solution.vcx new file mode 100644 index 0000000..89ef14c Binary files /dev/null and b/COMUN/clase/solution.vcx differ diff --git a/COMUN/clase/stocuri.VCT b/COMUN/clase/stocuri.VCT new file mode 100644 index 0000000..98c6ca5 Binary files /dev/null and b/COMUN/clase/stocuri.VCT differ diff --git a/COMUN/clase/stocuri.vcx b/COMUN/clase/stocuri.vcx new file mode 100644 index 0000000..b02c41f Binary files /dev/null and b/COMUN/clase/stocuri.vcx differ diff --git a/COMUN/clase/systray.vct b/COMUN/clase/systray.vct new file mode 100644 index 0000000..d2ab46c Binary files /dev/null and b/COMUN/clase/systray.vct differ diff --git a/COMUN/clase/systray.vcx b/COMUN/clase/systray.vcx new file mode 100644 index 0000000..98f0b3f Binary files /dev/null and b/COMUN/clase/systray.vcx differ diff --git a/COMUN/clase/utility.vcx b/COMUN/clase/utility.vcx new file mode 100644 index 0000000..3a41a43 Binary files /dev/null and b/COMUN/clase/utility.vcx differ diff --git a/COMUN/clase/webreporter.vct b/COMUN/clase/webreporter.vct new file mode 100644 index 0000000..e014892 Binary files /dev/null and b/COMUN/clase/webreporter.vct differ diff --git a/COMUN/clase/webreporter.vcx b/COMUN/clase/webreporter.vcx new file mode 100644 index 0000000..78978d6 Binary files /dev/null and b/COMUN/clase/webreporter.vcx differ diff --git a/COMUN/clase/wwDialogs.VCT b/COMUN/clase/wwDialogs.VCT new file mode 100644 index 0000000..5e5ab2e Binary files /dev/null and b/COMUN/clase/wwDialogs.VCT differ diff --git a/COMUN/clase/wwdialogs.vcx b/COMUN/clase/wwdialogs.vcx new file mode 100644 index 0000000..17ebac6 Binary files /dev/null and b/COMUN/clase/wwdialogs.vcx differ diff --git a/COMUN/clase/xresize.vcx b/COMUN/clase/xresize.vcx new file mode 100644 index 0000000..c9d978b Binary files /dev/null and b/COMUN/clase/xresize.vcx differ diff --git a/COMUN/datemenu/gest_selectii.FPT b/COMUN/datemenu/gest_selectii.FPT new file mode 100644 index 0000000..719b83f Binary files /dev/null and b/COMUN/datemenu/gest_selectii.FPT differ diff --git a/COMUN/datemenu/gest_selectii.dbf b/COMUN/datemenu/gest_selectii.dbf new file mode 100644 index 0000000..7317cff Binary files /dev/null and b/COMUN/datemenu/gest_selectii.dbf differ diff --git a/COMUN/datemenu/infisiere.cdx b/COMUN/datemenu/infisiere.cdx new file mode 100644 index 0000000..8f5e4ac Binary files /dev/null and b/COMUN/datemenu/infisiere.cdx differ diff --git a/COMUN/datemenu/infisiere.dbf b/COMUN/datemenu/infisiere.dbf new file mode 100644 index 0000000..c849e6e Binary files /dev/null and b/COMUN/datemenu/infisiere.dbf differ diff --git a/COMUN/datemenu/menu1.cdx b/COMUN/datemenu/menu1.cdx new file mode 100644 index 0000000..6ea5fde Binary files /dev/null and b/COMUN/datemenu/menu1.cdx differ diff --git a/COMUN/datemenu/menu1.dbf b/COMUN/datemenu/menu1.dbf new file mode 100644 index 0000000..614a254 Binary files /dev/null and b/COMUN/datemenu/menu1.dbf differ diff --git a/COMUN/datemenu/menu1.fpt b/COMUN/datemenu/menu1.fpt new file mode 100644 index 0000000..9224e0e Binary files /dev/null and b/COMUN/datemenu/menu1.fpt differ diff --git a/COMUN/datemenu/mila1.dbf b/COMUN/datemenu/mila1.dbf new file mode 100644 index 0000000..ab1e78f Binary files /dev/null and b/COMUN/datemenu/mila1.dbf differ diff --git a/COMUN/datemenu/nom_meniu.CDX b/COMUN/datemenu/nom_meniu.CDX new file mode 100644 index 0000000..cf16c73 Binary files /dev/null and b/COMUN/datemenu/nom_meniu.CDX differ diff --git a/COMUN/datemenu/nom_meniu.dbf b/COMUN/datemenu/nom_meniu.dbf new file mode 100644 index 0000000..3955839 Binary files /dev/null and b/COMUN/datemenu/nom_meniu.dbf differ diff --git a/COMUN/datemenu/readme_x.txt b/COMUN/datemenu/readme_x.txt new file mode 100644 index 0000000..d46a801 --- /dev/null +++ b/COMUN/datemenu/readme_x.txt @@ -0,0 +1,30 @@ + Trebuie adaugate in update_nomenclator.prg : + + +goExecutor.oExecute([select id_set, nr_set, nume_set, fix as fixTemp, lista_note, explicatia, model, ] + ; + [formgest, nu_sterg as nu_stergTemp, param1, listare, param2, frm_date, discount as discountTemp, adaos as adaosTemp, factura as facturaTemp,id_selst,] + ; + [id_seldr, tip_doc, tip_ctr, expl_fixa,aleg_cont as aleg_contTemp, frm_plata,valuta as valutatemp, compens,] + ; + [id_tip_rul, id_jnetax, id_jtax, tipjurnal, id_jtaxn, productie as productieTemp, formproduc, cursval as cursvaltemp ] + ; + [from xsets], [XSetsTemp]) && are valuta si aleg_cont cu valori 1,0 care vor fi transf in .t., .f. + +Select *,Iif(valutaTemp = 1, .T., .F.) As valuta,; + IIF(aleg_contTemp = 1,.T.,.F.) As aleg_cont,; + IIF(cursvalTemp = 1,.T.,.F.) as cursval,; + IIF(productieTemp = 1,.T.,.F.) as productie,; + IIF(discountTemp = 1,.T.,.F.) as discount,; + IIF(fixTemp = 1,.T.,.F.) as fix,; + IIF(nu_stergTemp = 1,.T.,.F.) as nu_sterg,; + IIF(adaosTemp = 1,.T., .F.) as adaos,; + IIF(facturaTemp = 1,.T.,.F.) as factura ; + From XSetsTemp Into Cursor xSets Readwrite + +goExecutor.oExecute([select * from xrequest], [XRequest]) +goExecutor.oExecute([select * from xnote], [XNote]) +goExecutor.oExecute([select * from xact], [XAct]) +goExecutor.oExecute([select * from xitems], [XItems]) + +nvl2Default("xrequest", "id_tipdoc") +nvl2Default("xnote") +nvl2Default("xact") +nvl2Default("xsets") +nvl2Default("XItems") \ No newline at end of file diff --git a/COMUN/datemenu/refaceri.CDX b/COMUN/datemenu/refaceri.CDX new file mode 100644 index 0000000..4f8eebb Binary files /dev/null and b/COMUN/datemenu/refaceri.CDX differ diff --git a/COMUN/datemenu/refaceri.dbf b/COMUN/datemenu/refaceri.dbf new file mode 100644 index 0000000..777e5ea Binary files /dev/null and b/COMUN/datemenu/refaceri.dbf differ diff --git a/COMUN/datemenu/tabela_fisa_cont.FPT b/COMUN/datemenu/tabela_fisa_cont.FPT new file mode 100644 index 0000000..601fa8d Binary files /dev/null and b/COMUN/datemenu/tabela_fisa_cont.FPT differ diff --git a/COMUN/datemenu/tabela_fisa_cont.dbf b/COMUN/datemenu/tabela_fisa_cont.dbf new file mode 100644 index 0000000..e77c625 Binary files /dev/null and b/COMUN/datemenu/tabela_fisa_cont.dbf differ diff --git a/COMUN/datemenu/xold/import_xdbf/import.prg b/COMUN/datemenu/xold/import_xdbf/import.prg new file mode 100644 index 0000000..eda8e8c --- /dev/null +++ b/COMUN/datemenu/xold/import_xdbf/import.prg @@ -0,0 +1,336 @@ +#Define crlf Chr(13) + Chr(10) + +**** de verificat programul , incomplet + +Set Ansi On +Set Exact On +Set Deleted On + +***** sequence anulat +Public gnConnHandle + +Local tcHost, tcUser, tcPassword, lcTablePath, laEroare,lnSucces + +On Error +lnSucces = 0 +lcTablePath = [] + +tcHost = [jcsserver] +tcUser = [test_alex] +tcPassword = [123] + +gnConnHandle = conecteaza(tcHost, tcUser, tcPassword) +SQLSetprop(gnConnHandle,"Transactions",2) +If gnConnHandle > 0 + gcAppDir = Addbs(Justpath(Sys(16,0))) + lcTablePath = gcAppDir + [xact] + + + SQLSetprop(gnConnHandle,"Transactions",2) && tranzactie manuala + + * lnSucces = makeTable(lcTablePath) && creaza tabela cu sau fara sequence + * If lnSucces > 0 + importTable(lcTablePath,.T.) + * Endif +Else + Aerror(laEroare) + Messagebox(laEroare(2)) +Endif + +SQLSetprop(gnConnHandle,"Transactions",1) && tranzactie automata +deconecteaza() +****************************** inceput importTable ****************************************** + +Procedure importTable + Lparameters tcTableName, llDel + + Local i,lnNr, lcSql, lcInsert, lnSucces, tacColName, lcCols, lcVals, nr + lnSucces = 0 + lcNumeTabela = [] + lcSir = [] + lcCols = [] + lcVals = [] + lcInsert = [] + + lcNumeTabela = Substr(tcTableName,Rat("\",tcTableName)) + nr = Len(lcNumeTabela) + lcNumeTabela = Right(lcNumeTabela,nr-1) + + If !Used(tcTableName) + Use (tcTableName) + Endif + + If llDel + executaSql([delete from ] + Alltrim(lcNumeTabela)) + Endif + + lnNr = Afields(taColName) + + lcSql = [insert into ] + Alltrim(lcNumeTabela) + For i = 1 To lnNr + lcCols = lcCols + taColName(i,1) + [,] + Endfor + lcCols = Left(lcCols,Len(lcCols)-1) + + Scan + lcVals = [] + lcInsert = [] + For i = 1 To lnNr && se adauga valorile din tabela , convertite + If taColName(i,2) = "I" Or taColName(i,2) = "N" + lcVals = lcVals + Alltrim(Str(&taColName(i,1))) + [,] + Endif + If taColName(i,2) = "D" Or taColName(i,2) = "T" + lcVals = lcVals + [to_date('] + Alltrim(Dtos(&taColName(i,1))) + [','yyyymmdd'),] + Endif + If taColName(i,2) = "L" + lcVals = lcVals + Iif(&taColName(i,1),[1,],[0,]) + Endif + If taColName(i,2) = "C" + lcVals = lcVals + ['] + Alltrim(&taColName(i,1)) + [',] + Endif + Endfor + lcVals = Left(lcVals,Len(lcVals) - 1) + lcInsert = lcSql + [(] + lcCols + [)] + [ values(] + lcVals + [)] + + lnSucces = executaSql(lcInsert,'',.T.) + If lnSucces < 0 + Strtofile(lcInsert,[d:\afis.txt]) + Exit + Endif + Endscan + + If lnSucces < 0 + Sqlrollback(gnConnHandle) + Messagebox([ eroare la insert] + crlf + [sql-ul se gaseste in d:\afis.txt], 48) + Else + Sqlcommit(gnConnHandle) + Messagebox('sa facut importu') + Endif + + SQLSetprop(gnConnHandle,"Transactions",1) + +Endproc + +****************************** inceput makeTable ********************************************* +Function makeTable + Lparameters tcTableName, llTrg + + Local i,lnNr, lnSucces, lcSql, lcSeq, lcTrig, lcPk, lcTable, lcTipData, lcLen, lcCol, lcNumeTabela, lcSir + lnSucces = 0 + lcNumeTabela = [] + lcSir = [] + lcSeq = [] + lcTrig = [] + lcPk = [] + lcTipData = [] + lcLen = [] + lcCol = [] + lnNr = [] + lcSql = [] + + lcNumeTabela = Substr(tcTableName,Rat("\",tcTableName)) + lnNr = Len(lcNumeTabela) + lcNumeTabela = Right(lcNumeTabela,lnNr-1) + * Use (lcNumeTabela) + + If !Used(tcTableName) + Use (tcTableName) + Endif + + lnNr = Afields(taColName) && get table data + + lcTable = [create table ] + lcNumeTabela +[(] + For i = 1 To lnNr && creare tabela + lcTipData = Iif(taColName(i,2)="I" Or taColName(i,2)="N", [number],lcTipData ) + lcTipData = Iif(taColName(i,2)="D" Or taColName(i,2)="T",[date],lcTipData ) + lcTipData = Iif(taColName(i,2)="L",[number],lcTipData ) + lcTipData = Iif(taColName(i,2)="F" ,[binary_float],lcTipData ) + lcTipData = Iif(taColName(i,2)="B",[binary_double],lcTipData ) + lcTipData = Iif(taColName(i,2)="C" Or taColName(i,2)="M" Or taColName(i,2)="V",[varchar2],lcTipData ) + + lcLen = Iif(lcTipData=[number] And taColName(i,2)<>"L", ; + [(]+ Alltrim(Str(taColName(i,3))) +[)],lcLen ) + lcLen = Iif(lcTipData=[number] And taColName(i,2)="L",[(1)],lcLen ) + lcLen = Iif(lcTipData=[varchar2] And (taColName(i,2)="C" Or taColName(i,2)="V" Or taColName(i,2)="M"), ; + [(]+Alltrim(Str(taColName(i,3)))+[)],lcLen ) + + * lcCol = lcCol + [ ?taColName(i,1) ?lcTipData ?lcLen] + Iif(taColName(i,5),[ not null ],[]) + [,] + lcCol = lcCol + taColName(i,1)+ [ ] + lcTipData + lcLen + Iif(taColName(i,5),[ not null ],[]) + [,] + lcTipData = [] + lcLen = [] + Endfor + + lcTable = lcTable + Left(lcCol,Len(lcCol)-1) + [);] + lnSucces = executaSql(lcTable,'',.T.) + + *!* If lnSucces > 0 + *!* lcPk = [alter table ]+ lcNumeTabela + ; &&primary key + *!* [ add constraint PK_]+lcNumeTabela +[ primary KEY(]+taColName(1,1) +[); ] + *!* lnSucces = executaSql(lcPk) + + *!* If lnSucces > 0 &&trigger + *!* If llTrg + *!* lcSeq = [create sequence SEQ_] + lcNumeTabela + ; + *!* [ minvalue 1 ] + ; + *!* [ maxvalue 99999999999999 ]+ ; + *!* [ start with 1 ] + ; + *!* [ increment by 1 ] + ; + *!* [ nocache; ] + *!* lnSucces = executaSql(lcSeq,'',.t.) + *!* Endif + *!* If lnSucces > 0 + *!* lcTrig = [create or replace trigger TRG_]+lcNumeTabela + ; + *!* CHR(13)+Chr(10) + [ before insert on ] + lcNumeTabela + ; + *!* CHR(13)+Chr(10) + [ referencing old as old new as new] + ; + *!* CHR(13)+Chr(10) + [ for each row] + ; + *!* [ begin ] + ; + *!* CHR(13)+Chr(10) + [ if :new.] + taColName(1,1)+ [ is null then ] + ; + *!* CHR(13)+Chr(10) + [ select SEQ_] + lcNumeTabela + ; + *!* [.NEXTVAL into :new.] + taColName(1,1)+ [ from dual; ] + ; + *!* CHR(13)+Chr(10) + [ end if; ] + ; + *!* CHR(13)+Chr(10) + [ end; ] + *!* lnSucces = executaSql(lcTrig,'',.t.) + *!* Endif + *!* Endif + *!* ENDIF + + If lnSucces < 0 + Sqlrollback(gnConnHandle) + Else + Strtofile(lcTable,[D:\roa\ROACASA\COMUN\script.sql],1) + Sqlcommit(gnConnHandle) + Endif + + Return lnSucces +Endfunc + + + +************************ inceput conecteaza *************************** +Procedure conecteaza + Lparameters tcHost, tcUser, tcPassword + + gnConnHandle = SQLConnect(tcHost, tcUser, tcPassword) + If gnConnHandle < 1 + Aerror(laEroare) + Messagebox(laEroare(2)) + Endif + + Return gnConnHandle +Endproc + +**************************** inceput executaSql *************************** +Function executaSql + Lparameters cmdSql, crsName, tlShowErr + Local lnSucces + + lnSucces = -1 + + If Pcount() < 2 And !m.tlShowErr + crsName="" + Endif + + If gnConnHandle > 0 + lnSucces = SQLExec(gnConnHandle,cmdSql,crsName) + + If lnSucces < 0 And m.tlShowErr + Aerror(laEroare) + eroaresql(@laEroare,cmdSql) + Endif + Endif + + Return lnSucces +Endfunc + +************************* inceput deconecteaza ************************ +Function deconecteaza + *Lparameters lnConn + Local lnSucces + + lnSucces = -1 + If gnConnHandle > 0 + lnSucces = SQLDisconnect(gnConnHandle) + Endif + + On Error + Return lnSucces +Endfunc + +******************************* inceput eroareSql ********************************** +Procedure eroaresql + Lparameters laErr, lcSql + + External Array laErr + + Local lcMesaj + + lcMesaj = [Eroare # : ] + Alltrim(Str(laErr(1))) + crlf + ; + [Mesajul : ] + laErr(2) + ; + IIF(!Empty(laErr(3)), [Eroare OLE : ] + laErr(3) ,[]) + ; + [Aplicatie : ] + laErr(4) + ; + IIF(Pcount() = 2, crlf + lcSql, []) + Messagebox(lcMesaj,0+16) + +Endproc + + + + +*!* Procedure importTable +*!* Lparameters tcTableName, llDel + +*!* Local i,lnNr, lcSql, lnSucces, lcSql,tacColName, nr +*!* lnSucces = 0 +*!* lcNumeTabela = [] +*!* lcSir = [] + +*!* lcNumeTabela = Substr(tcTableName,Rat("\",tcTableName)) +*!* nr = Len(lcNumeTabela) +*!* lcNumeTabela = Right(lcNumeTabela,nr-1) +*!* * Use (lcNumeTabela) + +*!* If !Used(tcTableName) +*!* Use (tcTableName) +*!* Endif + +*!* lnNr = Afields(taColName) + +*!* lcSql = [insert into ] + Alltrim(lcNumeTabela) +*!* For i = 1 To lnNr +*!* lcSir = lcSir + taColName(i,1) + [,] +*!* Endfor +*!* lcSir = Left(lcSir,Len(lcSir)-1) + +*!* lcSql = lcSql + "("+ lcSir + ") values(" + +*!* lcSir = [] +*!* For i = 2 To lnNr +*!* lcSir = lcSir + "?" + taColName(i,1) + "," +*!* Endfor +*!* lcSir = Left(lcSir,Len(lcSir)-1) +*!* lcSql = lcSql + lcSir +")" + +*!* If llDel +*!* executaSql([delete from ]+Alltrim(lcNumeTabela)) +*!* ENDIF + +*!* Scan +*!* lnsucces = executaSql(lcSql,'',.t.) +*!* IF lnsucces < 0 +*!* EXIT +*!* endif +*!* ENDSCAN +*!* +*!* +*!* +*!* IF lnsucces < 0 +*!* SQLROLLBACK(gnconnhandle) +*!* ELSE +*!* SQLCOMMIT(gnconnhandle) +*!* endif + +*!* SQLSETPROP(gnconnhandle,"Transactions",1) +*!* deconecteaza() +*!* Endproc + +****************************** inceput makeTable ********************************************* diff --git a/COMUN/datemenu/xold/import_xdbf/importreq.prg b/COMUN/datemenu/xold/import_xdbf/importreq.prg new file mode 100644 index 0000000..56189d0 --- /dev/null +++ b/COMUN/datemenu/xold/import_xdbf/importreq.prg @@ -0,0 +1,83 @@ +#Define crlf Chr(13) + Chr(10) + +Local lcColoane, lcVals, lcAdresa, lcTabela, lcTable, nr, i, lnSucces, lcSql +External Array lacols +lcColoane = [] +lcVals = [] +lnSucces = 0 + +gnconn = SQLConnect([jcsserver],[test_alex],[123]) +If gnconn < 0 + Return +Endif + +lcAdresa = Addbs(Justpath(Sys(16,0))) +lcTabela = [xitems] +lcTable = lcAdresa + lcTabela +Use (lcTable) +Select 1 + +nr = Afields(lacols,lcTabela) +For i = 1 To nr + lcColoane = lcColoane + lacols(i,1) + [,] + lcVals = lcVals + [?] + lacols(i,1) + [,] +Endfor +lcColoane = Left(lcColoane,Len(Alltrim(lcColoane)) - 1) +lcVals = Left(lcVals,Len(lcVals) - 1) +lcSql = [insert into ] + lcTabela + [(] + lcColoane + [)] + [ values(] + lcVals + [)] + +SQLSetprop(gnconn,"Transactions",2) +Scan + lnSucces = executaSql(lcSql,'',.T.) + If lnSucces < 0 + Exit + Endif +Endscan + +If lnSucces > 0 + Sqlcommit(gnconn) + Messagebox([sa facut importu]) +Else + Sqlrollback(gnconn) +Endif +SQLSetprop(gnconn,"Transactions",1) + +SQLDisconnect(gnconn) + +********************************************************** +Function executaSql + Lparameters cmdSql, crsName, tlShowErr + Local lnSucces + + lnSucces = -1 + + If Pcount() < 2 And !m.tlShowErr + crsName="" + Endif + + If gnconn > 0 + lnSucces = SQLExec(gnconn,cmdSql,crsName) + + If lnSucces < 0 And m.tlShowErr + Aerror(laEroare) + eroaresql(@laEroare,cmdSql) + Endif + Endif + + Return lnSucces +Endfunc + +********************************************************** +Procedure eroaresql + Lparameters laErr, lcSql + + External Array laErr + Local lcMesaj + + lcMesaj = [Eroare # : ] + Alltrim(Str(laErr(1))) + crlf + ; + [Mesajul : ] + laErr(2) + ; + IIF(!Empty(laErr(3)), [Eroare OLE : ] + laErr(3) ,[]) + ; + [Aplicatie : ] + laErr(4) + ; + IIF(Pcount() = 2, crlf + lcSql, []) + Messagebox(lcMesaj,0+16) +Endproc diff --git a/COMUN/datemenu/xold/import_xdbf/oscrie_in_fisiere.prg b/COMUN/datemenu/xold/import_xdbf/oscrie_in_fisiere.prg new file mode 100644 index 0000000..49879c7 --- /dev/null +++ b/COMUN/datemenu/xold/import_xdbf/oscrie_in_fisiere.prg @@ -0,0 +1,562 @@ +*!* Parameters tnScrie_Sterge, tlModificare, tlRul + +*!* #Define crlf Chr(13) + Chr(10) +*!* Local lnSucces + +*!* ON ERROR deconecteaza() + +*!* lnSucces = -1 +*!* If Reccount('actactan') = 0 +*!* Messagebox('Nu s-a inregistrat nota contabila.') +*!* Return lnSucces +*!* Endif + +*!* If Empty(tnScrie_Sterge) Or Isnull(tnScrie_Sterge) +*!* tnScrie_Sterge = 0 +*!* Endif + +*!* If !Used('ACTACTAN') +*!* Messagebox('Nu exista fisierul .') +*!* Return lnSucces +*!* Endif + +*!* If tnScrie_Sterge = 2 +*!* Select actactan +*!* Locate +*!* lnCod = cod +*!* Endif + +*!* *!* modificare 18.09.2007 +*!* If tnScrie_Sterge = 2 And !tlModificare And Used('rul_temp') And Reccount('rul_temp') > 0 +*!* Private pcMesaj +*!* Store '' To pcMesaj +*!* lcSql = [begin ] + gcS +[.verifica_stoc(] + Alltrim(Str(lnCod)) + [,?@pcMesaj); end;] +*!* lnSucces = executaSql(lcSql,"",.t.) +*!* If lnSucces < 0 +*!* * Messagebox(goExecutor.oPrelucrareEroare(),16,"Eroare") +*!* Return lnSucces +*!* Endif +*!* If !Isnull(pcMesaj) +*!* Messagebox(pcMesaj,48,"Atentie") +*!* Release pcMesaj +*!* Return -5 +*!* Endif +*!* Release pcMesaj +*!* Endif +*!* *!* modificare 18.09.2007 ^ + +*!* && RESETARE VARIABILE +*!* lcSql = [begin pack_contafin.reset_variables(); end;] +*!* lnSucces = executaSql(lcSql,'',.t.) +*!* If lnSucces < 0 +*!* * Messagebox('Resetare variabile ' + Chr(13) + goExecutor.cEroare,0+16,"Eroare") +*!* Return lnSucces +*!* Endif +*!* &&------------------------------------------------------------------------------------ +*!* llManualTransactions = Iif(SQLGetprop(gnhandle,"Transactions")=2,.T.,.F.) + +*!* If lnSucces > 0 +*!* If !tlModificare And !llManualTransactions +*!* lnSucces = SQLSetprop(gnhandle,"Transactions",2) +*!* Endif +*!* Endif +*!* && SETARE VARIABILE + +*!* If lnSucces > 0 +*!* lcSql = [begin pack_contafin.set_idutil(?gnIdUtil); end;] +*!* lnSucces = executaSql(lcSql,'',.t.) + +*!* If lnSucces < 0 +*!* * Messagebox('Setare ID utilizator ' + Chr(13) + goExecutor.cEroare,0+16,"Eroare") +*!* Endif +*!* Endif +*!* If lnSucces > 0 +*!* pddata = {} +*!* lcSql = [begin pack_contafin.set_dataora(?pddata); end;] +*!* lnSucces = executaSql(lcSql,'',.t.) + +*!* *!* If lnSucces < 0 +*!* *!* Messagebox('Setare DataOra ' + Chr(13) + goExecutor.cEroare,0+16,"Eroare") +*!* *!* Endif +*!* Endif + +*!* If lnSucces > 0 +*!* lcSql = [begin pack_contafin.set_an(?gnAn); end;] +*!* lnSucces = executaSql(lcSql,'',.t.) + +*!* *!* If lnSucces < 0 +*!* *!* Messagebox('Setare An ' + Chr(13) + goExecutor.cEroare,0+16,"Eroare") +*!* *!* Endif +*!* Endif + +*!* If lnSucces > 0 +*!* lcSql = [begin pack_contafin.set_luna(?gnLuna); end;] +*!* lnSucces = executaSql(lcSql,'',.t.) + +*!* *!* If lnSucces < 0 +*!* *!* Messagebox('Setare Luna ' + Chr(13) + goExecutor.cEroare,0+16,"Eroare") +*!* *!* Endif +*!* Endif + +*!* If lnSucces > 0 And tnScrie_Sterge <> 2 +*!* && genereaza un cod de operatie +*!* lcSql = [begin pack_contafin.SET_COD('] + gcS +['); end;] +*!* lnSucces = executaSql(lcSql,'',.t.) + +*!* *!* If lnSucces < 0 +*!* *!* Messagebox(goExecutor.cEroare,0+16,"Eroare") +*!* *!* Endif +*!* Endif +*!* &&------------------------------------------------------------------------------------ +*!* If lnSucces > 0 +*!* && seteaza id_sucursala +*!* lcSql = [begin pack_contafin.SET_ID_SUCURSALA(?gnIdSucursala); end;] +*!* lnSucces = executaSql(lcSql,'',.t.) + +*!* *!* If lnSucces < 0 +*!* *!* Messagebox(goExecutor.cEroare,0+16,"Eroare") +*!* *!* Endif +*!* Endif + +*!* If lnSucces > 0 +*!* lnSucces = sql_temp_insert('actactan','ACT_TEMP') + +*!* If lnSucces > 0 And tlRul +*!* If Used('rul_temp') And Reccount('rul_temp')>0 +*!* lnSucces = sql_temp_insert('rul_temp','RUL_TEMP') +*!* Endif +*!* If Used('RUL_TEMP_OBINV') And Reccount('RUL_TEMP_OBINV')>0 +*!* lnSucces = sql_temp_insert('rul_temp_obinv','RUL_TEMP_OBINV') +*!* Endif +*!* Endif +*!* Endif + +*!* If lnSucces > 0 +*!* && SCRIE IN ACT +*!* If tnScrie_Sterge <> 2 +*!* If lnSucces > 0 +*!* lcSql = [begin pack_contafin.SCRIE_IN_ACT('] + gcS +['); end;] +*!* lnSucces = executaSql(lcSql,'',.t.) + +*!* *!* If lnSucces < 0 +*!* *!* Messagebox('SCRIE_IN_ACT ' + Chr(13) + goExecutor.cEroare,0+16,"Eroare") +*!* *!* Endif +*!* Endif +*!* Else +*!* If tlModificare +*!* lnSterge = 0 +*!* Else +*!* lnSterge = 1 +*!* Endif +*!* lcSql = [begin pack_contafin.STERGE_DIN_ACT('] + gcS +[',] + Alltrim(Str(gnAn)) + [,] + Alltrim(Str(gnLuna)) + [,] + Alltrim(Str(lnCod)) + [,] + Alltrim(Str(gnIdUtil)) + [,] + Alltrim(Str(lnSterge))+ [); end;] +*!* lnSucces = executaSql(lcSql,'',.t.) + +*!* *!* If lnSucces < 0 +*!* *!* Messagebox('STERGE_DIN_ACT ' + Chr(13) + goExecutor.cEroare,0+16,"Eroare") +*!* *!* Endif + +*!* Endif +*!* Endif +*!* If lnSucces > 0 And tlRul +*!* && SCRIE IN RUL +*!* If tnScrie_Sterge <> 2 +*!* lcSql = [begin pack_contafin.SCRIE_IN_RUL(?gcS); end;] +*!* lnSucces = executaSql(lcSql,'',.t.) + +*!* *!* If lnSucces < 0 +*!* *!* Messagebox('SCRIE IN RUL ' + Chr(13) + goExecutor.cEroare,0+16,"Eroare") +*!* *!* Endif +*!* Else + +*!* lcSql = [begin pack_contafin.STERGE_DIN_RUL('] + gcS +[',] + Alltrim(Str(gnAn)) + [,] + Alltrim(Str(gnLuna)) + [,] + Alltrim(Str(lnCod)) + [,] + Alltrim(Str(gnIdUtil)) + [); end;] +*!* lnSucces = executaSql(lcSql,'',.t.) + +*!* *!* If lnSucces < 0 +*!* *!* Messagebox('STERGE DIN RUL ' + Chr(13) + goExecutor.cEroare,0+16,"Eroare") +*!* *!* Endif + +*!* Endif +*!* Endif + +*!* If lnSucces > 0 And tlRul And Used('RUL_TEMP_OBINV') And Reccount('RUL_TEMP_OBINV')>0 +*!* && SCRIE IN RUL_OBINV +*!* If tnScrie_Sterge <> 2 +*!* lcSql = [begin pack_contafin.SCRIE_IN_RUL_OBINV(?gcS); end;] +*!* lnSucces = executaSql(lcSql,'',.t.) + +*!* *!* If lnSucces < 0 +*!* *!* Messagebox('SCRIE IN RUL_OBINV ' + Chr(13) + goExecutor.cEroare,0+16,"Eroare") +*!* *!* Endif +*!* Else + +*!* lcSql = [begin pack_contafin.STERGE_DIN_RUL_OBINV('] + gcS +[',] + Alltrim(Str(gnAn)) + [,] + Alltrim(Str(gnLuna)) + [,] + Alltrim(Str(lnCod)) + [,] + Alltrim(Str(gnIdUtil)) + [); end;] +*!* lnSucces = executaSql(lcSql,'',.t.) + +*!* *!* If lnSucces < 0 +*!* *!* Messagebox('STERGE DIN RUL_OBINV ' + Chr(13) + goExecutor.cEroare,0+16,"Eroare") +*!* *!* Endif + +*!* Endif +*!* Endif + +*!* If lnSucces > 0 +*!* && SCRIE IN BALANTA +*!* lcSql = [begin pack_contafin.SCRIE_IN_BALANTA('] + gcS +[',] + Alltrim(Str(gnAn)) + [,] + Alltrim(Str(gnLuna)) + [,] + Alltrim(Str(tnScrie_Sterge)) + [); end;] +*!* lnSucces = executaSql(lcSql,'',.t.) + +*!* *!* If lnSucces < 0 +*!* *!* Messagebox('SCRIE_IN_BALANTA ' +goExecutor.cEroare,0+16,"Eroare") +*!* *!* Endif +*!* Endif + +*!* If lnSucces > 0 +*!* && SCRIE IN BALANTA_PARTENERI +*!* lcSql = [begin pack_contafin.SCRIE_IN_BALANTA_PARTENERI('] + gcS +[',] + Alltrim(Str(gnAn)) + [,] + Alltrim(Str(gnLuna)) + [,'',] + Alltrim(Str(tnScrie_Sterge)) + [); end;] +*!* lnSucces = executaSql(lcSql,'',.t.) + +*!* *!* If lnSucces < 0 +*!* *!* Messagebox('SCRIE_IN_BALANTA_PARTENERI '+goExecutor.cEroare,0+16,"Eroare") +*!* *!* Endif +*!* Endif + +*!* If lnSucces > 0 +*!* && SCRIE IN IREG_PARTENERI +*!* * lcSql = [begin pack_contafin.SCRIE_IN_IREG_PARTENERI('] + gcS +[',] + ALLTRIM(STR(gnAn)) + [,] + ALLTRIM(STR(gnLuna)) + [,'',] + ALLTRIM(STR(tnScrie_Sterge)) + [,1); end;] +*!* lcSql = [begin pack_contafin.EXECUTA_SCRIE_IN_IREG('] + gcS +[',] + Alltrim(Str(gnAn)) + [,] + Alltrim(Str(gnLuna)) + [,'',] + Alltrim(Str(tnScrie_Sterge)) + [,0); end;] +*!* lnSucces = executaSql(lcSql,'',.t.) +*!* *!* If lnSucces < 0 +*!* *!* Messagebox('Executa_SCRIE_IN_INREGISTRARI_PARTENERI '+goExecutor.cEroare,0+16,"Eroare") +*!* *!* Endif +*!* Endif + +*!* If lnSucces > 0 +*!* && SCRIE IN CUMP +*!* Select infisiere +*!* Locate For Cont = '4426' +*!* lcCorespD = Alltrim(coresp_d) +*!* lcCorespC = Alltrim(coresp_c) +*!* lcCorespDtva = Alltrim(coresp_d) + [,4428,4427] +*!* lcCorespCtva = Alltrim(coresp_c) +*!* lcExceptii = [-1] +*!* lcSql = [select distinct cont_c as exceptie from ] + gcS + [.exceptii_ireg where cont in (] + ; +*!* lcCorespD + [) and invers = 1] +*!* lnSucces = executaSql(lcSql,'cont_exceptii',.t.) +*!* If lnSucces > 0 +*!* Select cont_exceptii +*!* Scan +*!* lcExceptii = lcExceptii + ',' + Alltrim(exceptie) +*!* Endscan +*!* Use In cont_exceptii +*!* Endif +*!* If gnAn >= 2007 +*!* lcSql = [begin PACK_CONTAFIN.SCRIE_JV_2007(?gnAn, ?gnLuna, ] + ; +*!* Iif(tnScrie_Sterge <> 2, 'pack_contafin.nScriere', 'pack_contafin.nStergere') + [); end;] +*!* Else +*!* lcSql = [begin pack_contafin.EXECUTA_SCRIE_TVA('] + gcS +[', 'cump', 1.19, 1.09, '] + ; +*!* lcCorespDtva +[', '] + lcCorespD +[', '] + lcCorespCtva +[', '] + lcCorespC + ; +*!* [','4426', '] + lcExceptii +[',] + pcan + [, ] + pcnl + [,] + Alltrim(Str(tnScrie_Sterge)) + [ ); end;] +*!* Endif +*!* lnSucces = executaSql(lcSql,'',.t.) +*!* *!* If lnSucces < 0 +*!* *!* Messagebox('SCRIE_IN_CUMP ' +goExecutor.cEroare,0+16,"Eroare") +*!* *!* Endif +*!* Endif + +*!* If lnSucces > 0 +*!* && SCRIE IN VANZ +*!* Select infisiere +*!* Locate For Cont = '4427' +*!* lcCorespD = Alltrim(coresp_d) +*!* lcCorespC = Alltrim(coresp_c)+ [,5121,5311] +*!* lcCorespDtva = Alltrim(coresp_d) +*!* lcCorespCtva = Alltrim(coresp_c) + [,4428,4426] +*!* * lcExceptii = [667,622,419] +*!* lcExceptii = [419] +*!* lcSql = [select distinct cont_c as exceptie from ] + gcS + [.exceptii_ireg where cont in (] + lcCorespC + [) and invers = 1] +*!* lnSucces = executaSql(lcSql,'cont_exceptii',.t.) +*!* If lnSucces > 0 +*!* Select cont_exceptii +*!* Scan +*!* lcExceptii = lcExceptii + ',' + Alltrim(exceptie) +*!* Endscan +*!* Use In cont_exceptii +*!* Endif +*!* If gnAn >= 2007 +*!* lcSql = [begin PACK_CONTAFIN.SCRIE_JC_2007(?gnAn, ?gnLuna, ] + ; +*!* Iif(tnScrie_Sterge <> 2, 'pack_contafin.nScriere', 'pack_contafin.nStergere') + [); end;] +*!* Else +*!* lcSql = [begin pack_contafin.EXECUTA_SCRIE_TVA('] + gcS +[', 'vanz', 1.19, 1.09, '] + ; +*!* lcCorespDtva +[', '] + lcCorespD +[', '] + lcCorespCtva +[', '] + lcCorespC +[','4427', '] + ; +*!* lcExceptii +[',] + pcan + [, ] + pcnl + [,] + Alltrim(Str(tnScrie_Sterge)) + [ ); end;] +*!* Endif +*!* lnSucces = executaSql(lcSql,'',.t.) +*!* *!* If lnSucces < 0 +*!* *!* Messagebox('SCRIE_IN_VANZ '+goExecutor.cEroare,0+16,"Eroare") +*!* *!* Endif +*!* Endif + + +*!* *!* lcSql = [SELECT * FROM ] + gcS + [.ACT_TEMP] +*!* *!* lcCursor = [crsACT_TEMP] +*!* *!* lnSucces = executaSql(lcSql,lcCursor) +*!* *!* SELECT crsACT_TEMP +*!* *!* BROWSE +*!* *!* USE IN CRSACT_TEMP + +*!* If lnSucces > 0 And tlRul +*!* Private pcTabel +*!* pcTabel = [STOC] +*!* pcIdTabel = [ID_STOC] +*!* pcConditie = [2=2] +*!* lcSql = [begin pack_contafin.SCRIE_IN_Stoc(?gcS,?gnAn,?gnLuna,0,?pcTabel,?pcIdTabel,?pcConditie); end;] +*!* lnSucces = executaSql(lcSql,'',.t.) + +*!* *!* If lnSucces < 0 +*!* *!* Messagebox('SCRIE IN STOC ' + Chr(13) + goExecutor.cEroare,0+16,"Eroare") +*!* *!* Endif +*!* Endif + +*!* If lnSucces > 0 And tlRul And Used('RUL_TEMP_OBINV') And Reccount('RUL_TEMP_OBINV')>0 +*!* Private pcTabel +*!* pcTabel = [STOC_OBINV] +*!* pcIdTabel = [ID_STOC] +*!* pcConditie = [2=2] +*!* lcSql = [begin pack_contafin.SCRIE_IN_Stoc_OBINV(?gcS,?gnAn,?gnLuna,0,?pcTabel,?pcIdTabel,?pcConditie); end;] +*!* lnSucces = executaSql(lcSql,'',.t.) + +*!* *!* If lnSucces < 0 +*!* *!* Messagebox('SCRIE IN STOC_OBINV ' + Chr(13) + goExecutor.cEroare,0+16,"Eroare") +*!* *!* Endif +*!* Endif + +*!* If lnSucces > 0 +*!* Private pcMesajRefacereNota +*!* pcMesajRefacereNota = "" +*!* lcSql = [begin pack_refacere_nota.refacere_nota(?gnAn,?gnLuna,?@pcMesajRefacereNota); end;] +*!* lnSucces = executaSql(lcSql,'',.t.) + +*!* *!* If lnSucces < 0 +*!* *!* Messagebox(goExecutor.cEroare,0+16,"Eroare") +*!* *!* Endif +*!* If !Empty(Nvl(pcMesajRefacereNota,'')) +*!* Messagebox(pcMesajRefacereNota,0+48,'Atentie') +*!* Endif +*!* Release pcMesajRefacereNota +*!* Endif + +*!* If !tlModificare And !llManualTransactions +*!* If lnSucces < 0 +*!* lcSql = "ROLLBACK" +*!* Else +*!* lcSql = "COMMIT" +*!* Endif +*!* lnSucces2 = executaSql(lcSql,'',.t.) + +*!* *!* If lnSucces2 < 0 +*!* *!* Messagebox(lcSql + Chr(13) + goExecutor.cEroare,0+16,"Eroare") +*!* *!* Endif + +*!* lnSucces2 = SQLSetprop(gnhandle,"Transactions",1) +*!* If lnSucces2 < 0 +*!* Messagebox([Programul nu a reusit sa treaca pe tranzactie automata. ] + ; +*!* [Iesiti din program si intrati din nou!],0+48,'Atentie!') +*!* Endif +*!* Endif + + +*!* *!* IF USED('CRS_ACT') +*!* *!* USE IN CRS_ACT +*!* *!* ENDIF +*!* *!* IF USED('rul_temp') +*!* *!* USE IN rul_temp +*!* *!* ENDIF +*!* *!* IF USED('rul_temp_obinv') +*!* *!* USE IN rul_temp_obinv +*!* *!* ENDIF + +*!* Return lnSucces +#Define crlf Chr(13) + Chr(10) + +Public gcdatapath, gcapppath, gnhandle + +gnhandle = conecteaza([jcsserver],[mariusm_auto],[123]) + +gcapppath = Justpath(Sys(16,0)) +*!* gcapppath = Addbs(Justpath(Sys(16,0))) +*!* gcapppath = Left(gcapppath,Rat("\",gcapppath,2)) +*!* gcdatapath = ADDBS(gcapppath) + [datemenu] +*!* SET PATH TO (gcdatapath) + +Set Path To (gcapppath) +sql_temp_insert([xnote],[xnote]) + +&& ------------------------------------------------------------------------------------ +Procedure sql_temp_insert + Lparameters tcAlias,tcTableName + + + If !Used(Addbs(gcapppath) + tcAlias) + Use (Addbs(gcapppath) + tcAlias) + Endif + + Local lcAlias,lcCursor,lnSucces + Private poIreg + Local lcVariable + + If Empty(tcAlias) + lcAlias = 'ACTACTAN' + Else + lcAlias = Upper(Alltrim(tcAlias)) + Endif + If Empty(tcTableName) + lcTableName = 'ACT_TEMP' + Else + lcTableName = Upper(Alltrim(tcTableName)) + Endif + + lcCursor = 'crs_Coloane' + lcSql = [SELECT COLUMN_NAME AS COLOANA from user_tab_columns WHERE table_name = ?lcTableName] + lnSucces = executaSql(lcSql,lcCursor,.T.) + *!* If lnSucces < 0 + *!* Messagebox('Eroare la selectare coloane din ' + lcTableName + Chr(13) + goExecutor.cEroare,0+16,'Eroare') + *!* Endif + + If lnSucces > 0 + *** + Select (lcAlias) + lnCount = Fcount() + Select (lcAlias) + lcFields = [] + lcValues = [] + lcInsert = [] + Scatter Name poIreg + For i = 1 To lnCount + ?i + Select (lcAlias) + lcFieldName = Upper(Alltrim(Field(i))) + lcFieldType = Type(lcFieldName) + lcFieldValue = Evaluate(lcFieldName) + + Do Case + Case lcFieldType = "C" + lcVariable = '?ALLTRIM(poIreg.' + lcFieldName + ')' + * CASE lcfieldtype = "L" + * lcvariable = IIF(&poIreg.lcFieldName,[1,],[0,] + Otherw + lcVariable = '?poIreg.' + lcFieldName + Endcase + + Select CRS_COLOANE + Locate For Upper(Alltrim(COLOANA)) == lcFieldName + If !Found() + Loop + Endif + lcFields = lcFields + [,] + lcFieldName + lcNumber = '0' + lcDate = '' + lcString = '' + + && FAC NULL ID-URILE CU VALOARE 0 + If Inlist(lcFieldName, 'ID_SUCURSALA') + If poIreg.id_sucursala = 0 + poIreg.id_sucursala = Null + Endif + Endif + lcValues = lcValues + [,] + lcVariable + + Endfor + + lcFields = Substr(lcFields,2) + lcValues = Substr(lcValues,2) + + + && INSERT INTO ACT_TEMP + lcInsert = [INSERT INTO ] + lcTableName + [ (] + lcFields + [) VALUES (] + lcValues + [)] + + + Scan + lnSucces = executaSql(lcInsert,'',.T.) + If lnSucces < 0 + Messagebox([eroare]) + Exit + Endif + Endscan + + Endif + If Used('crs_coloane') + Use In CRS_COLOANE + Endif + USE IN (SELECT(Addbs(gcapppath) + tcAlias)) + + Return lnSucces + +Endproc && sql_temp_insert + + + +************************ inceput conecteaza *************************** +Procedure conecteaza + Lparameters tcHost, tcUser, tcPassword + + gnhandle = SQLConnect(tcHost, tcUser, tcPassword) + If gnhandle < 1 + Aerror(laEroare) + Messagebox(laEroare(2)) + Endif + + Return gnhandle +Endproc + +**************************** inceput executaSql *************************** +Function executaSql + Lparameters cmdSql, crsName, tlShowErr + Local lnSucces + + lnSucces = -1 + + If Pcount() < 2 And !m.tlShowErr + crsName="" + Endif + + If gnhandle > 0 + lnSucces=SQLExec(gnhandle,cmdSql,crsName) + + If lnSucces < 0 And m.tlShowErr + Aerror(laEroare) + eroaresql(@laEroare,cmdSql) + Endif + Endif + + Return lnSucces +Endfunc + +************************* inceput deconecteaza ************************ +Function deconecteaza + *Lparameters lnConn + Local lnSucces + + lnSucces = -1 + If lnConn > 0 + lnSucces = SQLDisconnect(gnhandle) + Endif + + On Error + Return lnSucces +Endfunc + +******************************* inceput eroareSql ********************************** +Procedure eroaresql + Lparameters laErr, lcSql + + External Array laErr + + Local lcMesaj + + lcMesaj = [Eroare # : ] + Alltrim(Str(laErr(1))) + crlf + ; + [Mesajul : ] + laErr(2) + ; + IIF(!Empty(laErr(3)), [Eroare OLE : ] + laErr(3) ,[]) + ; + [Aplicatie : ] + laErr(4) + ; + IIF(Pcount() = 2, crlf + lcSql, []) + Messagebox(lcMesaj,0+16) + +Endproc diff --git a/COMUN/datemenu/xold/import_xdbf/trim.prg b/COMUN/datemenu/xold/import_xdbf/trim.prg new file mode 100644 index 0000000..10048d7 --- /dev/null +++ b/COMUN/datemenu/xold/import_xdbf/trim.prg @@ -0,0 +1,62 @@ +#Define crlf Chr(13) + Chr(10) + +Local lcColoane, lcVals, lcAdresa, lcTabela, lcTable, nr, i, lnSucces, lcSql +External Array lacols +lcColoane = [] +lcVals = [] +lnSucces = 0 +lctabela = UPPER([xitems]) + +gnconn = SQLConnect([jcsserver],[test_alex],[123]) +If gnconn < 0 + Return +Endif + + +lcsql = [select * from user_tab_columns where table_name = '] + lctabela + ['] +executasql(lcsql,'crsColoane',.t.) +lcsql = [] +SELECT crscoloane +SCAN + lcsql =lcsql + ALLTRIM(column_name) + [= TRIM(] + ALLTRIM(column_name) + [),] +ENDSCAN +lcsql = [update ] + lctabela + [ set ] + LEFT(lcsql,LEN(lcsql) - 1) +executasql(lcsql,'',.t.) + +********************************************************** +Function executaSql + Lparameters cmdSql, crsName, tlShowErr + Local lnSucces + + lnSucces = -1 + + If Pcount() < 2 And !m.tlShowErr + crsName="" + Endif + + If gnconn > 0 + lnSucces = SQLExec(gnconn,cmdSql,crsName) + + If lnSucces < 0 And m.tlShowErr + Aerror(laEroare) + eroaresql(@laEroare,cmdSql) + Endif + Endif + + Return lnSucces +Endfunc + +********************************************************** +Procedure eroaresql + Lparameters laErr, lcSql + + External Array laErr + Local lcMesaj + + lcMesaj = [Eroare # : ] + Alltrim(Str(laErr(1))) + crlf + ; + [Mesajul : ] + laErr(2) + ; + IIF(!Empty(laErr(3)), [Eroare OLE : ] + laErr(3) ,[]) + ; + [Aplicatie : ] + laErr(4) + ; + IIF(Pcount() = 2, crlf + lcSql, []) + Messagebox(lcMesaj,0+16) +Endproc diff --git a/COMUN/datemenu/xold/xact.dbf b/COMUN/datemenu/xold/xact.dbf new file mode 100644 index 0000000..9d13c92 Binary files /dev/null and b/COMUN/datemenu/xold/xact.dbf differ diff --git a/COMUN/datemenu/xold/xitems.cdx b/COMUN/datemenu/xold/xitems.cdx new file mode 100644 index 0000000..86a6dfc Binary files /dev/null and b/COMUN/datemenu/xold/xitems.cdx differ diff --git a/COMUN/datemenu/xold/xitems.dbf b/COMUN/datemenu/xold/xitems.dbf new file mode 100644 index 0000000..d2b88e2 Binary files /dev/null and b/COMUN/datemenu/xold/xitems.dbf differ diff --git a/COMUN/datemenu/xold/xnote.cdx b/COMUN/datemenu/xold/xnote.cdx new file mode 100644 index 0000000..e82dd1a Binary files /dev/null and b/COMUN/datemenu/xold/xnote.cdx differ diff --git a/COMUN/datemenu/xold/xnote.dbf b/COMUN/datemenu/xold/xnote.dbf new file mode 100644 index 0000000..6a4c4b5 Binary files /dev/null and b/COMUN/datemenu/xold/xnote.dbf differ diff --git a/COMUN/datemenu/xold/xnote_jurnaltva.prg b/COMUN/datemenu/xold/xnote_jurnaltva.prg new file mode 100644 index 0000000..6682dfc --- /dev/null +++ b/COMUN/datemenu/xold/xnote_jurnaltva.prg @@ -0,0 +1,31 @@ +*!* Am adaugat coloana X34 in xact cu valoarea "id_jtva_coloana" si coloana X34 in XNOTE. + +Set Deleted On +Set Century On +Set Date Dmy +Set Ansi On +Set Exact On +Set Date Dmy +Set Safety Off +Set Exclusive Off +Close Databases + +lcDir = [D:\ROA_Branch\ROACONT\COMUN\datemenu\] +lcXnote = lcDir + [xnote.dbf] +Use (lcXnote) In 0 Shared + +Select Distinct x21,x34 From xnote Into Cursor crsrezumat +Select crsrezumat +Browse + +Select xnote +Replace x34 With [id_jnetax] For x21 = [neimpozab] +Replace x34 With [id_jtax] For Inlist(x21,[pnBazaFactura],[pnBazaNir],[pnBazaVanz],[pnDiscount],[totftva]) +Replace x34 With [id_jtva] For Inlist(x21,[pnTvaDiscount],[pnTvaFactura],[pnTvaNir],[pnTvaVanzIn],[pnTvaVanzOut],[tottva]) + +Select Distinct x21,x34 From xnote Into Cursor crsrezumat +Select crsrezumat +Browse + +Use In xnote +Use In crsrezumat \ No newline at end of file diff --git a/COMUN/datemenu/xold/xrequest.cdx b/COMUN/datemenu/xold/xrequest.cdx new file mode 100644 index 0000000..70eedeb Binary files /dev/null and b/COMUN/datemenu/xold/xrequest.cdx differ diff --git a/COMUN/datemenu/xold/xrequest.dbf b/COMUN/datemenu/xold/xrequest.dbf new file mode 100644 index 0000000..f6fc97e Binary files /dev/null and b/COMUN/datemenu/xold/xrequest.dbf differ diff --git a/COMUN/datemenu/xold/xsets.cdx b/COMUN/datemenu/xold/xsets.cdx new file mode 100644 index 0000000..512075d Binary files /dev/null and b/COMUN/datemenu/xold/xsets.cdx differ diff --git a/COMUN/datemenu/xold/xsets.dbf b/COMUN/datemenu/xold/xsets.dbf new file mode 100644 index 0000000..314bdef Binary files /dev/null and b/COMUN/datemenu/xold/xsets.dbf differ diff --git a/COMUN/datemenu/xold/xsets_jurnaltva.prg b/COMUN/datemenu/xold/xsets_jurnaltva.prg new file mode 100644 index 0000000..c55b469 --- /dev/null +++ b/COMUN/datemenu/xold/xsets_jurnaltva.prg @@ -0,0 +1,91 @@ +SET DELETED ON +SET CENTURY ON +SET DATE DMY +SET ANSI ON +SET EXACT ON +SET DATE DMY +SET SAFETY OFF +SET EXCLUSIVE OFF +CLOSE DATABASES + +lcDir = [d:\roa_rb\roacont\comun\datemenu\] +lcXsets = lcDir + [xsets.dbf] +lcXnote = lcDir + [xnote.dbf] +USE (lcXsets) IN 0 SHARED +USE (lcXnote) IN 0 SHARED + +lnIdSetVzNetax = 8 +lnIdSetVzTax19 = 1 + +lnIdSetCmNetax = 113 +lnIdSetCmCapital19 = 101 +lnIdSetCmMarfa19 = 103 +lnIdSetCmBunuri19 = 105 + +lnIdSetCmTxInv = 141 && taxare inversa 19% bunuri firma +lnIdSetVzTxInv = 5 + +SELECT DISTINCT ID_SET ; + FROM XNOTE ; + WHERE INLIST(ALLTRIM(XSCD), '4111','461', '418') OR INLIST(ALLTRIM(XSCC), '419') ; + INTO CURSOR crsIdSetVz + + + +SELECT DISTINCT ID_SET ; + FROM XNOTE ; + WHERE INLIST(ALLTRIM(XSCC), '404') ; + INTO CURSOR crsIdSetCmCapital + +SELECT DISTINCT ID_SET ; + FROM XNOTE; + WHERE INLIST(ALLTRIM(XSCD), '371') AND INLIST(ALLTRIM(XSCC), '401','462', '408'); + UNION ; + SELECT DISTINCT S.ID_SET ; + FROM XSETS S JOIN (SELECT ID_SET FROM XNOTE WHERE INLIST(ALLTRIM(XSCC), '401','462', '408')) N ; + ON S.ID_SET = N.ID_SET ; + WHERE 'MARFA'$UPPER(S.NUME_SET); + INTO CURSOR crsIdSetCmMarfa + +SELECT DISTINCT ID_SET ; + FROM XNOTE ; + WHERE (INLIST(ALLTRIM(XSCC), '401','462', '408') OR INLIST(ALLTRIM(XSCD), '409')) AND !INLIST(ALLTRIM(XSCD), '371'); + INTO CURSOR crsIdSetCmBunuri + +SELECT DISTINCT ID_SET ; + FROM XSETS ; + WHERE 'INVERS'$UPPER(NUME_SET) AND '411'$UPPER(LISTA_NOTE) ; + INTO CURSOR crsIdSetVzTxInv + +SELECT DISTINCT ID_SET ; + FROM XSETS ; + WHERE 'INVERS'$UPPER(NUME_SET) AND '401'$UPPER(LISTA_NOTE) ; + INTO CURSOR crsIdSetCmTxInv + + +DO CLEAN_SETS +DO UPDATE_SETS WITH "crsIdSetVz", lnIdSetVzNetax, lnIdSetVzTax19, "JV" +DO UPDATE_SETS WITH "crsIdSetCmCapital", lnIdSetCmNetax, lnIdSetCmCapital19, "JC" +DO UPDATE_SETS WITH "crsIdSetCmMarfa", lnIdSetCmNetax, lnIdSetCmMarfa19, "JC" +DO UPDATE_SETS WITH "crsIdSetCmBunuri", lnIdSetCmNetax, lnIdSetCmBunuri19, "JC" + +DO UPDATE_SETS WITH "crsIdSetVzTxInv", lnIdSetVzNetax, lnIdSetVzTxInv, "JV" +DO UPDATE_SETS WITH "crsIdSetCmTxInv", lnIdSetCmNetax, lnIdSetCmTxInv, "JC" + + +PROCEDURE CLEAN_SETS + UPDATE XSETS SET ID_JNETAX = 0, ID_JTAX = 0, TIPJURNAL = '' +ENDPROC + +*!* +PROCEDURE UPDATE_SETS + LPARAMETERS tcCursorIdSet, tnIdSetNetax, tnIdSetTax, tcTipJurnal + SELECT (tcCursorIdSet) + SCAN + IF SEEK(ID_SET,"xsets","id_set") + IF EMPTY(XSETS.ID_JNETAX) AND EMPTY(XSETS.ID_JTAX) AND EMPTY(XSETS.TIPJURNAL) + REPLACE ID_JNETAX WITH tnIdSetNetax, ID_JTAX WITH tnIdSetTax, TIPJURNAL WITH tcTipJurnal IN XSETS + ENDIF + ENDIF + ENDSCAN +ENDPROC diff --git a/COMUN/ferestre/afisbal_ana.SCT b/COMUN/ferestre/afisbal_ana.SCT new file mode 100644 index 0000000..930ea5a Binary files /dev/null and b/COMUN/ferestre/afisbal_ana.SCT differ diff --git a/COMUN/ferestre/afisbal_ana.scx b/COMUN/ferestre/afisbal_ana.scx new file mode 100644 index 0000000..236f7b3 Binary files /dev/null and b/COMUN/ferestre/afisbal_ana.scx differ diff --git a/COMUN/ferestre/afisbal_val.SCT b/COMUN/ferestre/afisbal_val.SCT new file mode 100644 index 0000000..07dcad4 Binary files /dev/null and b/COMUN/ferestre/afisbal_val.SCT differ diff --git a/COMUN/ferestre/afisbal_val.scx b/COMUN/ferestre/afisbal_val.scx new file mode 100644 index 0000000..ad90c17 Binary files /dev/null and b/COMUN/ferestre/afisbal_val.scx differ diff --git a/COMUN/ferestre/comun.h b/COMUN/ferestre/comun.h new file mode 100644 index 0000000..0699e87 --- /dev/null +++ b/COMUN/ferestre/comun.h @@ -0,0 +1,13 @@ +#IFNDEF COMUN_H +#DEFINE COMUN_H + + +#DEFINE LF CHR(10) +#DEFINE CR CHR(10) +#DEFINE CRLF CHR(13) + CHR(10) +#DEFINE CTAB CHR(9) + +#DEFINE CT_INSUCCES -1 +#DEFINE CT_SUCCES 1 + +#ENDIF \ No newline at end of file diff --git a/COMUN/ferestre/datefact.SCT b/COMUN/ferestre/datefact.SCT new file mode 100644 index 0000000..6219d83 Binary files /dev/null and b/COMUN/ferestre/datefact.SCT differ diff --git a/COMUN/ferestre/datefact.scx b/COMUN/ferestre/datefact.scx new file mode 100644 index 0000000..e5d9f28 Binary files /dev/null and b/COMUN/ferestre/datefact.scx differ diff --git a/COMUN/ferestre/frm_about.SCT b/COMUN/ferestre/frm_about.SCT new file mode 100644 index 0000000..0e30bd6 Binary files /dev/null and b/COMUN/ferestre/frm_about.SCT differ diff --git a/COMUN/ferestre/frm_about.scx b/COMUN/ferestre/frm_about.scx new file mode 100644 index 0000000..4f0fec5 Binary files /dev/null and b/COMUN/ferestre/frm_about.scx differ diff --git a/COMUN/ferestre/frm_borderou_facturi.SCT b/COMUN/ferestre/frm_borderou_facturi.SCT new file mode 100644 index 0000000..93d1341 Binary files /dev/null and b/COMUN/ferestre/frm_borderou_facturi.SCT differ diff --git a/COMUN/ferestre/frm_borderou_facturi.scx b/COMUN/ferestre/frm_borderou_facturi.scx new file mode 100644 index 0000000..df4cd6e Binary files /dev/null and b/COMUN/ferestre/frm_borderou_facturi.scx differ diff --git a/COMUN/ferestre/frm_cere_nrserie.SCT b/COMUN/ferestre/frm_cere_nrserie.SCT new file mode 100644 index 0000000..59e079e Binary files /dev/null and b/COMUN/ferestre/frm_cere_nrserie.SCT differ diff --git a/COMUN/ferestre/frm_cere_nrserie.scx b/COMUN/ferestre/frm_cere_nrserie.scx new file mode 100644 index 0000000..aa8edbe Binary files /dev/null and b/COMUN/ferestre/frm_cere_nrserie.scx differ diff --git a/COMUN/ferestre/frm_cere_text.SCT b/COMUN/ferestre/frm_cere_text.SCT new file mode 100644 index 0000000..2d42691 Binary files /dev/null and b/COMUN/ferestre/frm_cere_text.SCT differ diff --git a/COMUN/ferestre/frm_cere_text.scx b/COMUN/ferestre/frm_cere_text.scx new file mode 100644 index 0000000..5b9e367 Binary files /dev/null and b/COMUN/ferestre/frm_cere_text.scx differ diff --git a/COMUN/ferestre/frm_changelog.SCT b/COMUN/ferestre/frm_changelog.SCT new file mode 100644 index 0000000..452f2ba Binary files /dev/null and b/COMUN/ferestre/frm_changelog.SCT differ diff --git a/COMUN/ferestre/frm_changelog.scx b/COMUN/ferestre/frm_changelog.scx new file mode 100644 index 0000000..e66a959 Binary files /dev/null and b/COMUN/ferestre/frm_changelog.scx differ diff --git a/COMUN/ferestre/frm_chatbot.SCT b/COMUN/ferestre/frm_chatbot.SCT new file mode 100644 index 0000000..709256c Binary files /dev/null and b/COMUN/ferestre/frm_chatbot.SCT differ diff --git a/COMUN/ferestre/frm_chatbot.scx b/COMUN/ferestre/frm_chatbot.scx new file mode 100644 index 0000000..79ad22c Binary files /dev/null and b/COMUN/ferestre/frm_chatbot.scx differ diff --git a/COMUN/ferestre/frm_config_note_contabile.SCT b/COMUN/ferestre/frm_config_note_contabile.SCT new file mode 100644 index 0000000..3b4c955 Binary files /dev/null and b/COMUN/ferestre/frm_config_note_contabile.SCT differ diff --git a/COMUN/ferestre/frm_config_note_contabile.scx b/COMUN/ferestre/frm_config_note_contabile.scx new file mode 100644 index 0000000..ba75501 Binary files /dev/null and b/COMUN/ferestre/frm_config_note_contabile.scx differ diff --git a/COMUN/ferestre/frm_config_note_contabile2007.SCT b/COMUN/ferestre/frm_config_note_contabile2007.SCT new file mode 100644 index 0000000..9d1b7c7 Binary files /dev/null and b/COMUN/ferestre/frm_config_note_contabile2007.SCT differ diff --git a/COMUN/ferestre/frm_config_note_contabile2007.scx b/COMUN/ferestre/frm_config_note_contabile2007.scx new file mode 100644 index 0000000..4fd5fd0 Binary files /dev/null and b/COMUN/ferestre/frm_config_note_contabile2007.scx differ diff --git a/COMUN/ferestre/frm_filtru_luna.SCT b/COMUN/ferestre/frm_filtru_luna.SCT new file mode 100644 index 0000000..8c24151 Binary files /dev/null and b/COMUN/ferestre/frm_filtru_luna.SCT differ diff --git a/COMUN/ferestre/frm_filtru_luna.scx b/COMUN/ferestre/frm_filtru_luna.scx new file mode 100644 index 0000000..8189eac Binary files /dev/null and b/COMUN/ferestre/frm_filtru_luna.scx differ diff --git a/COMUN/ferestre/frm_filtru_numar.SCT b/COMUN/ferestre/frm_filtru_numar.SCT new file mode 100644 index 0000000..c82b676 Binary files /dev/null and b/COMUN/ferestre/frm_filtru_numar.SCT differ diff --git a/COMUN/ferestre/frm_filtru_numar.scx b/COMUN/ferestre/frm_filtru_numar.scx new file mode 100644 index 0000000..12ab06a Binary files /dev/null and b/COMUN/ferestre/frm_filtru_numar.scx differ diff --git a/COMUN/ferestre/frm_filtru_text.SCT b/COMUN/ferestre/frm_filtru_text.SCT new file mode 100644 index 0000000..5a6698d Binary files /dev/null and b/COMUN/ferestre/frm_filtru_text.SCT differ diff --git a/COMUN/ferestre/frm_filtru_text.scx b/COMUN/ferestre/frm_filtru_text.scx new file mode 100644 index 0000000..9a45558 Binary files /dev/null and b/COMUN/ferestre/frm_filtru_text.scx differ diff --git a/COMUN/ferestre/frm_import_note_facturi_clienti.sct b/COMUN/ferestre/frm_import_note_facturi_clienti.sct new file mode 100644 index 0000000..46d3c90 Binary files /dev/null and b/COMUN/ferestre/frm_import_note_facturi_clienti.sct differ diff --git a/COMUN/ferestre/frm_import_note_facturi_clienti.scx b/COMUN/ferestre/frm_import_note_facturi_clienti.scx new file mode 100644 index 0000000..e3520f7 Binary files /dev/null and b/COMUN/ferestre/frm_import_note_facturi_clienti.scx differ diff --git a/COMUN/ferestre/frm_initializare_facturi_balanta.SCT b/COMUN/ferestre/frm_initializare_facturi_balanta.SCT new file mode 100644 index 0000000..ab1e01e Binary files /dev/null and b/COMUN/ferestre/frm_initializare_facturi_balanta.SCT differ diff --git a/COMUN/ferestre/frm_initializare_facturi_balanta.scx b/COMUN/ferestre/frm_initializare_facturi_balanta.scx new file mode 100644 index 0000000..a1f3330 Binary files /dev/null and b/COMUN/ferestre/frm_initializare_facturi_balanta.scx differ diff --git a/COMUN/ferestre/frm_list_balana.SCT b/COMUN/ferestre/frm_list_balana.SCT new file mode 100644 index 0000000..86529b1 Binary files /dev/null and b/COMUN/ferestre/frm_list_balana.SCT differ diff --git a/COMUN/ferestre/frm_list_balana.scx b/COMUN/ferestre/frm_list_balana.scx new file mode 100644 index 0000000..ee05823 Binary files /dev/null and b/COMUN/ferestre/frm_list_balana.scx differ diff --git a/COMUN/ferestre/frm_login.SCT b/COMUN/ferestre/frm_login.SCT new file mode 100644 index 0000000..ae53729 Binary files /dev/null and b/COMUN/ferestre/frm_login.SCT differ diff --git a/COMUN/ferestre/frm_login.scx b/COMUN/ferestre/frm_login.scx new file mode 100644 index 0000000..458eedb Binary files /dev/null and b/COMUN/ferestre/frm_login.scx differ diff --git a/COMUN/ferestre/frm_start_firma_nou.SCT b/COMUN/ferestre/frm_start_firma_nou.SCT new file mode 100644 index 0000000..d5fae39 Binary files /dev/null and b/COMUN/ferestre/frm_start_firma_nou.SCT differ diff --git a/COMUN/ferestre/frm_start_firma_nou.scx b/COMUN/ferestre/frm_start_firma_nou.scx new file mode 100644 index 0000000..0da8f39 Binary files /dev/null and b/COMUN/ferestre/frm_start_firma_nou.scx differ diff --git a/COMUN/ferestre/frm_trimit_mail.SCT b/COMUN/ferestre/frm_trimit_mail.SCT new file mode 100644 index 0000000..6994f14 Binary files /dev/null and b/COMUN/ferestre/frm_trimit_mail.SCT differ diff --git a/COMUN/ferestre/frm_trimit_mail.scx b/COMUN/ferestre/frm_trimit_mail.scx new file mode 100644 index 0000000..796190b Binary files /dev/null and b/COMUN/ferestre/frm_trimit_mail.scx differ diff --git a/COMUN/ferestre/frm_verificare_rulaje.SCT b/COMUN/ferestre/frm_verificare_rulaje.SCT new file mode 100644 index 0000000..f8f32ab Binary files /dev/null and b/COMUN/ferestre/frm_verificare_rulaje.SCT differ diff --git a/COMUN/ferestre/frm_verificare_rulaje.scx b/COMUN/ferestre/frm_verificare_rulaje.scx new file mode 100644 index 0000000..6865642 Binary files /dev/null and b/COMUN/ferestre/frm_verificare_rulaje.scx differ diff --git a/COMUN/ferestre/frm_viz_atasamente.SCT b/COMUN/ferestre/frm_viz_atasamente.SCT new file mode 100644 index 0000000..6facdfa Binary files /dev/null and b/COMUN/ferestre/frm_viz_atasamente.SCT differ diff --git a/COMUN/ferestre/frm_viz_atasamente.scx b/COMUN/ferestre/frm_viz_atasamente.scx new file mode 100644 index 0000000..2a66091 Binary files /dev/null and b/COMUN/ferestre/frm_viz_atasamente.scx differ diff --git a/COMUN/ferestre/setariupdate.SCT b/COMUN/ferestre/setariupdate.SCT new file mode 100644 index 0000000..ad2d4f8 Binary files /dev/null and b/COMUN/ferestre/setariupdate.SCT differ diff --git a/COMUN/ferestre/setariupdate.scx b/COMUN/ferestre/setariupdate.scx new file mode 100644 index 0000000..08bf783 Binary files /dev/null and b/COMUN/ferestre/setariupdate.scx differ diff --git a/COMUN/ferestre/updateapp.SCT b/COMUN/ferestre/updateapp.SCT new file mode 100644 index 0000000..768b97f Binary files /dev/null and b/COMUN/ferestre/updateapp.SCT differ diff --git a/COMUN/ferestre/updateapp.scx b/COMUN/ferestre/updateapp.scx new file mode 100644 index 0000000..2e3c844 Binary files /dev/null and b/COMUN/ferestre/updateapp.scx differ diff --git a/COMUN/ferestre/verificare.SCT b/COMUN/ferestre/verificare.SCT new file mode 100644 index 0000000..7a6828e Binary files /dev/null and b/COMUN/ferestre/verificare.SCT differ diff --git a/COMUN/ferestre/verificare.scx b/COMUN/ferestre/verificare.scx new file mode 100644 index 0000000..3086871 Binary files /dev/null and b/COMUN/ferestre/verificare.scx differ diff --git a/COMUN/ferestre/vizpage.SCT b/COMUN/ferestre/vizpage.SCT new file mode 100644 index 0000000..2aa3119 Binary files /dev/null and b/COMUN/ferestre/vizpage.SCT differ diff --git a/COMUN/ferestre/vizpage.scx b/COMUN/ferestre/vizpage.scx new file mode 100644 index 0000000..7d7cc9a Binary files /dev/null and b/COMUN/ferestre/vizpage.scx differ diff --git a/COMUN/grafice/Addressbook.bmp b/COMUN/grafice/Addressbook.bmp new file mode 100644 index 0000000..5665eda Binary files /dev/null and b/COMUN/grafice/Addressbook.bmp differ diff --git a/COMUN/grafice/CHECKMRK.ICO b/COMUN/grafice/CHECKMRK.ICO new file mode 100644 index 0000000..2eb7ca6 Binary files /dev/null and b/COMUN/grafice/CHECKMRK.ICO differ diff --git a/COMUN/grafice/CLOSED_BLUE.BMP b/COMUN/grafice/CLOSED_BLUE.BMP new file mode 100644 index 0000000..5593a80 Binary files /dev/null and b/COMUN/grafice/CLOSED_BLUE.BMP differ diff --git a/COMUN/grafice/Contacts.bmp b/COMUN/grafice/Contacts.bmp new file mode 100644 index 0000000..a0a104d Binary files /dev/null and b/COMUN/grafice/Contacts.bmp differ diff --git a/COMUN/grafice/DBtabH3.bmp b/COMUN/grafice/DBtabH3.bmp new file mode 100644 index 0000000..fd1ca74 Binary files /dev/null and b/COMUN/grafice/DBtabH3.bmp differ diff --git a/COMUN/grafice/DBtabH4.bmp b/COMUN/grafice/DBtabH4.bmp new file mode 100644 index 0000000..53c8c37 Binary files /dev/null and b/COMUN/grafice/DBtabH4.bmp differ diff --git a/COMUN/grafice/EDIT1.BMP b/COMUN/grafice/EDIT1.BMP new file mode 100644 index 0000000..87c5211 Binary files /dev/null and b/COMUN/grafice/EDIT1.BMP differ diff --git a/COMUN/grafice/EXCLAM.ICO b/COMUN/grafice/EXCLAM.ICO new file mode 100644 index 0000000..351aa72 Binary files /dev/null and b/COMUN/grafice/EXCLAM.ICO differ diff --git a/COMUN/grafice/Favorite/Favorites.png b/COMUN/grafice/Favorite/Favorites.png new file mode 100644 index 0000000..0d74770 Binary files /dev/null and b/COMUN/grafice/Favorite/Favorites.png differ diff --git a/COMUN/grafice/Favorite/na_fav.png b/COMUN/grafice/Favorite/na_fav.png new file mode 100644 index 0000000..0060357 Binary files /dev/null and b/COMUN/grafice/Favorite/na_fav.png differ diff --git a/COMUN/grafice/Favorite/nablank_fav.png b/COMUN/grafice/Favorite/nablank_fav.png new file mode 100644 index 0000000..a91c9bd Binary files /dev/null and b/COMUN/grafice/Favorite/nablank_fav.png differ diff --git a/COMUN/grafice/Favorite/readme.txt b/COMUN/grafice/Favorite/readme.txt new file mode 100644 index 0000000..08b6459 --- /dev/null +++ b/COMUN/grafice/Favorite/readme.txt @@ -0,0 +1 @@ + - se suprapune favorites.png ( cu dimensiunea 18x18 pixeli ) peste png-ul programului \ No newline at end of file diff --git a/COMUN/grafice/Favorite/roa_hanulpiratilor_fav.png b/COMUN/grafice/Favorite/roa_hanulpiratilor_fav.png new file mode 100644 index 0000000..21536cb Binary files /dev/null and b/COMUN/grafice/Favorite/roa_hanulpiratilor_fav.png differ diff --git a/COMUN/grafice/Favorite/roaacnpro_fav.png b/COMUN/grafice/Favorite/roaacnpro_fav.png new file mode 100644 index 0000000..9138e66 Binary files /dev/null and b/COMUN/grafice/Favorite/roaacnpro_fav.png differ diff --git a/COMUN/grafice/Favorite/roaapp_fav.png b/COMUN/grafice/Favorite/roaapp_fav.png new file mode 100644 index 0000000..b44ff66 Binary files /dev/null and b/COMUN/grafice/Favorite/roaapp_fav.png differ diff --git a/COMUN/grafice/Favorite/roaaprov_fav.png b/COMUN/grafice/Favorite/roaaprov_fav.png new file mode 100644 index 0000000..230d438 Binary files /dev/null and b/COMUN/grafice/Favorite/roaaprov_fav.png differ diff --git a/COMUN/grafice/Favorite/roaauto_fav.png b/COMUN/grafice/Favorite/roaauto_fav.png new file mode 100644 index 0000000..646f564 Binary files /dev/null and b/COMUN/grafice/Favorite/roaauto_fav.png differ diff --git a/COMUN/grafice/Favorite/roabavert_fav.png b/COMUN/grafice/Favorite/roabavert_fav.png new file mode 100644 index 0000000..c2ef0ff Binary files /dev/null and b/COMUN/grafice/Favorite/roabavert_fav.png differ diff --git a/COMUN/grafice/Favorite/roaclienti_fav.png b/COMUN/grafice/Favorite/roaclienti_fav.png new file mode 100644 index 0000000..7ed4185 Binary files /dev/null and b/COMUN/grafice/Favorite/roaclienti_fav.png differ diff --git a/COMUN/grafice/Favorite/roacomenzi_fav.png b/COMUN/grafice/Favorite/roacomenzi_fav.png new file mode 100644 index 0000000..878d1dd Binary files /dev/null and b/COMUN/grafice/Favorite/roacomenzi_fav.png differ diff --git a/COMUN/grafice/Favorite/roaconstructii_fav.png b/COMUN/grafice/Favorite/roaconstructii_fav.png new file mode 100644 index 0000000..4706520 Binary files /dev/null and b/COMUN/grafice/Favorite/roaconstructii_fav.png differ diff --git a/COMUN/grafice/Favorite/roacont_fav.png b/COMUN/grafice/Favorite/roacont_fav.png new file mode 100644 index 0000000..57b7a44 Binary files /dev/null and b/COMUN/grafice/Favorite/roacont_fav.png differ diff --git a/COMUN/grafice/Favorite/roacontracte_fav.png b/COMUN/grafice/Favorite/roacontracte_fav.png new file mode 100644 index 0000000..89df9ba Binary files /dev/null and b/COMUN/grafice/Favorite/roacontracte_fav.png differ diff --git a/COMUN/grafice/Favorite/roadecl_fav.png b/COMUN/grafice/Favorite/roadecl_fav.png new file mode 100644 index 0000000..65560b0 Binary files /dev/null and b/COMUN/grafice/Favorite/roadecl_fav.png differ diff --git a/COMUN/grafice/Favorite/roadef_fav.png b/COMUN/grafice/Favorite/roadef_fav.png new file mode 100644 index 0000000..ce305e5 Binary files /dev/null and b/COMUN/grafice/Favorite/roadef_fav.png differ diff --git a/COMUN/grafice/Favorite/roadefsalarii_fav.png b/COMUN/grafice/Favorite/roadefsalarii_fav.png new file mode 100644 index 0000000..f407362 Binary files /dev/null and b/COMUN/grafice/Favorite/roadefsalarii_fav.png differ diff --git a/COMUN/grafice/Favorite/roadevize_fav.png b/COMUN/grafice/Favorite/roadevize_fav.png new file mode 100644 index 0000000..ca6afd1 Binary files /dev/null and b/COMUN/grafice/Favorite/roadevize_fav.png differ diff --git a/COMUN/grafice/Favorite/roafacturare_fav.png b/COMUN/grafice/Favorite/roafacturare_fav.png new file mode 100644 index 0000000..d35cc0d Binary files /dev/null and b/COMUN/grafice/Favorite/roafacturare_fav.png differ diff --git a/COMUN/grafice/Favorite/roafurnizori_fav.png b/COMUN/grafice/Favorite/roafurnizori_fav.png new file mode 100644 index 0000000..eaade5f Binary files /dev/null and b/COMUN/grafice/Favorite/roafurnizori_fav.png differ diff --git a/COMUN/grafice/Favorite/roagen_fav.png b/COMUN/grafice/Favorite/roagen_fav.png new file mode 100644 index 0000000..8472404 Binary files /dev/null and b/COMUN/grafice/Favorite/roagen_fav.png differ diff --git a/COMUN/grafice/Favorite/roagest_descarcare_fav.png b/COMUN/grafice/Favorite/roagest_descarcare_fav.png new file mode 100644 index 0000000..89a10a2 Binary files /dev/null and b/COMUN/grafice/Favorite/roagest_descarcare_fav.png differ diff --git a/COMUN/grafice/Favorite/roagest_fav.png b/COMUN/grafice/Favorite/roagest_fav.png new file mode 100644 index 0000000..2b77e1a Binary files /dev/null and b/COMUN/grafice/Favorite/roagest_fav.png differ diff --git a/COMUN/grafice/Favorite/roagrestaurant_fav.png b/COMUN/grafice/Favorite/roagrestaurant_fav.png new file mode 100644 index 0000000..a2c35bd Binary files /dev/null and b/COMUN/grafice/Favorite/roagrestaurant_fav.png differ diff --git a/COMUN/grafice/Favorite/roaimob_fav.png b/COMUN/grafice/Favorite/roaimob_fav.png new file mode 100644 index 0000000..25e9660 Binary files /dev/null and b/COMUN/grafice/Favorite/roaimob_fav.png differ diff --git a/COMUN/grafice/Favorite/roalucrari_fav.png b/COMUN/grafice/Favorite/roalucrari_fav.png new file mode 100644 index 0000000..d63bdfa Binary files /dev/null and b/COMUN/grafice/Favorite/roalucrari_fav.png differ diff --git a/COMUN/grafice/Favorite/roamanager_fav.png b/COMUN/grafice/Favorite/roamanager_fav.png new file mode 100644 index 0000000..1fef4a8 Binary files /dev/null and b/COMUN/grafice/Favorite/roamanager_fav.png differ diff --git a/COMUN/grafice/Favorite/roanor_fav.png b/COMUN/grafice/Favorite/roanor_fav.png new file mode 100644 index 0000000..5154555 Binary files /dev/null and b/COMUN/grafice/Favorite/roanor_fav.png differ diff --git a/COMUN/grafice/Favorite/roaobinv_fav.png b/COMUN/grafice/Favorite/roaobinv_fav.png new file mode 100644 index 0000000..01a0fce Binary files /dev/null and b/COMUN/grafice/Favorite/roaobinv_fav.png differ diff --git a/COMUN/grafice/Favorite/roaoferta_fav.png b/COMUN/grafice/Favorite/roaoferta_fav.png new file mode 100644 index 0000000..c1ddecd Binary files /dev/null and b/COMUN/grafice/Favorite/roaoferta_fav.png differ diff --git a/COMUN/grafice/Favorite/roapreturi_fav.png b/COMUN/grafice/Favorite/roapreturi_fav.png new file mode 100644 index 0000000..be04f5e Binary files /dev/null and b/COMUN/grafice/Favorite/roapreturi_fav.png differ diff --git a/COMUN/grafice/Favorite/roaproductie_fav.png b/COMUN/grafice/Favorite/roaproductie_fav.png new file mode 100644 index 0000000..1a88866 Binary files /dev/null and b/COMUN/grafice/Favorite/roaproductie_fav.png differ diff --git a/COMUN/grafice/Favorite/roaprospectare_fav.png b/COMUN/grafice/Favorite/roaprospectare_fav.png new file mode 100644 index 0000000..da81ac4 Binary files /dev/null and b/COMUN/grafice/Favorite/roaprospectare_fav.png differ diff --git a/COMUN/grafice/Favorite/roaravert_fav.png b/COMUN/grafice/Favorite/roaravert_fav.png new file mode 100644 index 0000000..08bc2b9 Binary files /dev/null and b/COMUN/grafice/Favorite/roaravert_fav.png differ diff --git a/COMUN/grafice/Favorite/roaregistratura_fav.png b/COMUN/grafice/Favorite/roaregistratura_fav.png new file mode 100644 index 0000000..21536cb Binary files /dev/null and b/COMUN/grafice/Favorite/roaregistratura_fav.png differ diff --git a/COMUN/grafice/Favorite/roarepartizsal_fav.png b/COMUN/grafice/Favorite/roarepartizsal_fav.png new file mode 100644 index 0000000..ee2544c Binary files /dev/null and b/COMUN/grafice/Favorite/roarepartizsal_fav.png differ diff --git a/COMUN/grafice/Favorite/roares_fav.png b/COMUN/grafice/Favorite/roares_fav.png new file mode 100644 index 0000000..831f781 Binary files /dev/null and b/COMUN/grafice/Favorite/roares_fav.png differ diff --git a/COMUN/grafice/Favorite/roarestaurant_fav.png b/COMUN/grafice/Favorite/roarestaurant_fav.png new file mode 100644 index 0000000..ab11cb9 Binary files /dev/null and b/COMUN/grafice/Favorite/roarestaurant_fav.png differ diff --git a/COMUN/grafice/Favorite/roasal_fav.png b/COMUN/grafice/Favorite/roasal_fav.png new file mode 100644 index 0000000..5542c7d Binary files /dev/null and b/COMUN/grafice/Favorite/roasal_fav.png differ diff --git a/COMUN/grafice/Favorite/roasalspec_fav.png b/COMUN/grafice/Favorite/roasalspec_fav.png new file mode 100644 index 0000000..b73c254 Binary files /dev/null and b/COMUN/grafice/Favorite/roasalspec_fav.png differ diff --git a/COMUN/grafice/Favorite/roasitfin_fav.png b/COMUN/grafice/Favorite/roasitfin_fav.png new file mode 100644 index 0000000..2fe137a Binary files /dev/null and b/COMUN/grafice/Favorite/roasitfin_fav.png differ diff --git a/COMUN/grafice/Favorite/roasitop_fav.png b/COMUN/grafice/Favorite/roasitop_fav.png new file mode 100644 index 0000000..7b04d30 Binary files /dev/null and b/COMUN/grafice/Favorite/roasitop_fav.png differ diff --git a/COMUN/grafice/Favorite/roasuport_fav.png b/COMUN/grafice/Favorite/roasuport_fav.png new file mode 100644 index 0000000..2665142 Binary files /dev/null and b/COMUN/grafice/Favorite/roasuport_fav.png differ diff --git a/COMUN/grafice/Favorite/roavin_fav.png b/COMUN/grafice/Favorite/roavin_fav.png new file mode 100644 index 0000000..1dfa816 Binary files /dev/null and b/COMUN/grafice/Favorite/roavin_fav.png differ diff --git a/COMUN/grafice/HELP.BMP b/COMUN/grafice/HELP.BMP new file mode 100644 index 0000000..f01289e Binary files /dev/null and b/COMUN/grafice/HELP.BMP differ diff --git a/COMUN/grafice/H_POINT.CUR b/COMUN/grafice/H_POINT.CUR new file mode 100644 index 0000000..6d1096b Binary files /dev/null and b/COMUN/grafice/H_POINT.CUR differ diff --git a/COMUN/grafice/IDIC.ico b/COMUN/grafice/IDIC.ico new file mode 100644 index 0000000..9bcaea5 Binary files /dev/null and b/COMUN/grafice/IDIC.ico differ diff --git a/COMUN/grafice/IDIC.ico1 b/COMUN/grafice/IDIC.ico1 new file mode 100644 index 0000000..9bcaea5 Binary files /dev/null and b/COMUN/grafice/IDIC.ico1 differ diff --git a/COMUN/grafice/INFO_c.ICO b/COMUN/grafice/INFO_c.ICO new file mode 100644 index 0000000..883470b Binary files /dev/null and b/COMUN/grafice/INFO_c.ICO differ diff --git a/COMUN/grafice/Intreb.ico b/COMUN/grafice/Intreb.ico new file mode 100644 index 0000000..a63d9c3 Binary files /dev/null and b/COMUN/grafice/Intreb.ico differ diff --git a/COMUN/grafice/LBtabH3.bmp b/COMUN/grafice/LBtabH3.bmp new file mode 100644 index 0000000..ea10c3a Binary files /dev/null and b/COMUN/grafice/LBtabH3.bmp differ diff --git a/COMUN/grafice/LBtabH4.bmp b/COMUN/grafice/LBtabH4.bmp new file mode 100644 index 0000000..e347702 Binary files /dev/null and b/COMUN/grafice/LBtabH4.bmp differ diff --git a/COMUN/grafice/LEAF_BLUE.BMP b/COMUN/grafice/LEAF_BLUE.BMP new file mode 100644 index 0000000..5c78080 Binary files /dev/null and b/COMUN/grafice/LEAF_BLUE.BMP differ diff --git a/COMUN/grafice/Listare/listare1.bmp b/COMUN/grafice/Listare/listare1.bmp new file mode 100644 index 0000000..f5ef986 Binary files /dev/null and b/COMUN/grafice/Listare/listare1.bmp differ diff --git a/COMUN/grafice/Listare/listare2.bmp b/COMUN/grafice/Listare/listare2.bmp new file mode 100644 index 0000000..8f8fa41 Binary files /dev/null and b/COMUN/grafice/Listare/listare2.bmp differ diff --git a/COMUN/grafice/Listare/listaref_1.bmp b/COMUN/grafice/Listare/listaref_1.bmp new file mode 100644 index 0000000..a5361b7 Binary files /dev/null and b/COMUN/grafice/Listare/listaref_1.bmp differ diff --git a/COMUN/grafice/Listare/listaref_2.bmp b/COMUN/grafice/Listare/listaref_2.bmp new file mode 100644 index 0000000..f1a9ccb Binary files /dev/null and b/COMUN/grafice/Listare/listaref_2.bmp differ diff --git a/COMUN/grafice/MINUS.BMP b/COMUN/grafice/MINUS.BMP new file mode 100644 index 0000000..316e17f Binary files /dev/null and b/COMUN/grafice/MINUS.BMP differ diff --git a/COMUN/grafice/NEW.BMP b/COMUN/grafice/NEW.BMP new file mode 100644 index 0000000..025abea Binary files /dev/null and b/COMUN/grafice/NEW.BMP differ diff --git a/COMUN/grafice/NOTE16.ICO b/COMUN/grafice/NOTE16.ICO new file mode 100644 index 0000000..94b185c Binary files /dev/null and b/COMUN/grafice/NOTE16.ICO differ diff --git a/COMUN/grafice/Numpad/0_jos.jpg b/COMUN/grafice/Numpad/0_jos.jpg new file mode 100644 index 0000000..0affe0b Binary files /dev/null and b/COMUN/grafice/Numpad/0_jos.jpg differ diff --git a/COMUN/grafice/Numpad/0_sus.jpg b/COMUN/grafice/Numpad/0_sus.jpg new file mode 100644 index 0000000..a030196 Binary files /dev/null and b/COMUN/grafice/Numpad/0_sus.jpg differ diff --git a/COMUN/grafice/Numpad/1_jos.jpg b/COMUN/grafice/Numpad/1_jos.jpg new file mode 100644 index 0000000..2a72948 Binary files /dev/null and b/COMUN/grafice/Numpad/1_jos.jpg differ diff --git a/COMUN/grafice/Numpad/1_sus.jpg b/COMUN/grafice/Numpad/1_sus.jpg new file mode 100644 index 0000000..1c09628 Binary files /dev/null and b/COMUN/grafice/Numpad/1_sus.jpg differ diff --git a/COMUN/grafice/Numpad/2_jos.jpg b/COMUN/grafice/Numpad/2_jos.jpg new file mode 100644 index 0000000..ca2a961 Binary files /dev/null and b/COMUN/grafice/Numpad/2_jos.jpg differ diff --git a/COMUN/grafice/Numpad/2_sus.jpg b/COMUN/grafice/Numpad/2_sus.jpg new file mode 100644 index 0000000..d11b5de Binary files /dev/null and b/COMUN/grafice/Numpad/2_sus.jpg differ diff --git a/COMUN/grafice/Numpad/3_jos.jpg b/COMUN/grafice/Numpad/3_jos.jpg new file mode 100644 index 0000000..58126dc Binary files /dev/null and b/COMUN/grafice/Numpad/3_jos.jpg differ diff --git a/COMUN/grafice/Numpad/3_sus.jpg b/COMUN/grafice/Numpad/3_sus.jpg new file mode 100644 index 0000000..3417d89 Binary files /dev/null and b/COMUN/grafice/Numpad/3_sus.jpg differ diff --git a/COMUN/grafice/Numpad/4_jos.jpg b/COMUN/grafice/Numpad/4_jos.jpg new file mode 100644 index 0000000..acca0f4 Binary files /dev/null and b/COMUN/grafice/Numpad/4_jos.jpg differ diff --git a/COMUN/grafice/Numpad/4_sus.jpg b/COMUN/grafice/Numpad/4_sus.jpg new file mode 100644 index 0000000..79756e8 Binary files /dev/null and b/COMUN/grafice/Numpad/4_sus.jpg differ diff --git a/COMUN/grafice/Numpad/5_jos.jpg b/COMUN/grafice/Numpad/5_jos.jpg new file mode 100644 index 0000000..a41df9a Binary files /dev/null and b/COMUN/grafice/Numpad/5_jos.jpg differ diff --git a/COMUN/grafice/Numpad/5_sus.jpg b/COMUN/grafice/Numpad/5_sus.jpg new file mode 100644 index 0000000..c4249f7 Binary files /dev/null and b/COMUN/grafice/Numpad/5_sus.jpg differ diff --git a/COMUN/grafice/Numpad/6_jos.jpg b/COMUN/grafice/Numpad/6_jos.jpg new file mode 100644 index 0000000..a5dc2fb Binary files /dev/null and b/COMUN/grafice/Numpad/6_jos.jpg differ diff --git a/COMUN/grafice/Numpad/6_sus.jpg b/COMUN/grafice/Numpad/6_sus.jpg new file mode 100644 index 0000000..ec5ee53 Binary files /dev/null and b/COMUN/grafice/Numpad/6_sus.jpg differ diff --git a/COMUN/grafice/Numpad/7_jos.jpg b/COMUN/grafice/Numpad/7_jos.jpg new file mode 100644 index 0000000..3eff6a4 Binary files /dev/null and b/COMUN/grafice/Numpad/7_jos.jpg differ diff --git a/COMUN/grafice/Numpad/7_sus.jpg b/COMUN/grafice/Numpad/7_sus.jpg new file mode 100644 index 0000000..97efe8f Binary files /dev/null and b/COMUN/grafice/Numpad/7_sus.jpg differ diff --git a/COMUN/grafice/Numpad/8_jos.jpg b/COMUN/grafice/Numpad/8_jos.jpg new file mode 100644 index 0000000..ed58c65 Binary files /dev/null and b/COMUN/grafice/Numpad/8_jos.jpg differ diff --git a/COMUN/grafice/Numpad/8_sus.jpg b/COMUN/grafice/Numpad/8_sus.jpg new file mode 100644 index 0000000..e1498de Binary files /dev/null and b/COMUN/grafice/Numpad/8_sus.jpg differ diff --git a/COMUN/grafice/Numpad/9_jos.jpg b/COMUN/grafice/Numpad/9_jos.jpg new file mode 100644 index 0000000..47dc87c Binary files /dev/null and b/COMUN/grafice/Numpad/9_jos.jpg differ diff --git a/COMUN/grafice/Numpad/9_sus.jpg b/COMUN/grafice/Numpad/9_sus.jpg new file mode 100644 index 0000000..3271563 Binary files /dev/null and b/COMUN/grafice/Numpad/9_sus.jpg differ diff --git a/COMUN/grafice/Numpad/back_jos.jpg b/COMUN/grafice/Numpad/back_jos.jpg new file mode 100644 index 0000000..3439f1d Binary files /dev/null and b/COMUN/grafice/Numpad/back_jos.jpg differ diff --git a/COMUN/grafice/Numpad/back_sus.jpg b/COMUN/grafice/Numpad/back_sus.jpg new file mode 100644 index 0000000..b6175fe Binary files /dev/null and b/COMUN/grafice/Numpad/back_sus.jpg differ diff --git a/COMUN/grafice/Numpad/blank.jpg b/COMUN/grafice/Numpad/blank.jpg new file mode 100644 index 0000000..4300c0b Binary files /dev/null and b/COMUN/grafice/Numpad/blank.jpg differ diff --git a/COMUN/grafice/Numpad/dolar_jos.jpg b/COMUN/grafice/Numpad/dolar_jos.jpg new file mode 100644 index 0000000..46635f7 Binary files /dev/null and b/COMUN/grafice/Numpad/dolar_jos.jpg differ diff --git a/COMUN/grafice/Numpad/dolar_sus.jpg b/COMUN/grafice/Numpad/dolar_sus.jpg new file mode 100644 index 0000000..a6104ed Binary files /dev/null and b/COMUN/grafice/Numpad/dolar_sus.jpg differ diff --git a/COMUN/grafice/Numpad/punct_jos.jpg b/COMUN/grafice/Numpad/punct_jos.jpg new file mode 100644 index 0000000..7a80bb5 Binary files /dev/null and b/COMUN/grafice/Numpad/punct_jos.jpg differ diff --git a/COMUN/grafice/Numpad/punct_sus.jpg b/COMUN/grafice/Numpad/punct_sus.jpg new file mode 100644 index 0000000..861b37f Binary files /dev/null and b/COMUN/grafice/Numpad/punct_sus.jpg differ diff --git a/COMUN/grafice/Numpad/zerozero_jos.jpg b/COMUN/grafice/Numpad/zerozero_jos.jpg new file mode 100644 index 0000000..0c2efc3 Binary files /dev/null and b/COMUN/grafice/Numpad/zerozero_jos.jpg differ diff --git a/COMUN/grafice/Numpad/zerozero_sus.jpg b/COMUN/grafice/Numpad/zerozero_sus.jpg new file mode 100644 index 0000000..eaa81ef Binary files /dev/null and b/COMUN/grafice/Numpad/zerozero_sus.jpg differ diff --git a/COMUN/grafice/OPEN_BLUE.BMP b/COMUN/grafice/OPEN_BLUE.BMP new file mode 100644 index 0000000..460f1de Binary files /dev/null and b/COMUN/grafice/OPEN_BLUE.BMP differ diff --git a/COMUN/grafice/PLUS.BMP b/COMUN/grafice/PLUS.BMP new file mode 100644 index 0000000..c6b3a38 Binary files /dev/null and b/COMUN/grafice/PLUS.BMP differ diff --git a/COMUN/grafice/PRINT.BMP b/COMUN/grafice/PRINT.BMP new file mode 100644 index 0000000..845bee7 Binary files /dev/null and b/COMUN/grafice/PRINT.BMP differ diff --git a/COMUN/grafice/PROP.BMP b/COMUN/grafice/PROP.BMP new file mode 100644 index 0000000..25e0eef Binary files /dev/null and b/COMUN/grafice/PROP.BMP differ diff --git a/COMUN/grafice/Phone1.bmp b/COMUN/grafice/Phone1.bmp new file mode 100644 index 0000000..4085585 Binary files /dev/null and b/COMUN/grafice/Phone1.bmp differ diff --git a/COMUN/grafice/Printersmall.bmp b/COMUN/grafice/Printersmall.bmp new file mode 100644 index 0000000..dfd044e Binary files /dev/null and b/COMUN/grafice/Printersmall.bmp differ diff --git a/COMUN/grafice/SG.ICO b/COMUN/grafice/SG.ICO new file mode 100644 index 0000000..1661e47 Binary files /dev/null and b/COMUN/grafice/SG.ICO differ diff --git a/COMUN/grafice/SMMAIL.BMP b/COMUN/grafice/SMMAIL.BMP new file mode 100644 index 0000000..757af2d Binary files /dev/null and b/COMUN/grafice/SMMAIL.BMP differ diff --git a/COMUN/grafice/START.bmp b/COMUN/grafice/START.bmp new file mode 100644 index 0000000..82b951e Binary files /dev/null and b/COMUN/grafice/START.bmp differ diff --git a/COMUN/grafice/TERMINAT1.bmp b/COMUN/grafice/TERMINAT1.bmp new file mode 100644 index 0000000..dacc04a Binary files /dev/null and b/COMUN/grafice/TERMINAT1.bmp differ diff --git a/COMUN/grafice/TERMINAT1X.bmp b/COMUN/grafice/TERMINAT1X.bmp new file mode 100644 index 0000000..3c87346 Binary files /dev/null and b/COMUN/grafice/TERMINAT1X.bmp differ diff --git a/COMUN/grafice/TERMINAT2.bmp b/COMUN/grafice/TERMINAT2.bmp new file mode 100644 index 0000000..400e728 Binary files /dev/null and b/COMUN/grafice/TERMINAT2.bmp differ diff --git a/COMUN/grafice/Tasks16.png b/COMUN/grafice/Tasks16.png new file mode 100644 index 0000000..3cb5492 Binary files /dev/null and b/COMUN/grafice/Tasks16.png differ diff --git a/COMUN/grafice/Tasks24.png b/COMUN/grafice/Tasks24.png new file mode 100644 index 0000000..f217ff4 Binary files /dev/null and b/COMUN/grafice/Tasks24.png differ diff --git a/COMUN/grafice/Touchscreen/ts_jos1.bmp b/COMUN/grafice/Touchscreen/ts_jos1.bmp new file mode 100644 index 0000000..627cbf3 Binary files /dev/null and b/COMUN/grafice/Touchscreen/ts_jos1.bmp differ diff --git a/COMUN/grafice/Touchscreen/ts_jos2.bmp b/COMUN/grafice/Touchscreen/ts_jos2.bmp new file mode 100644 index 0000000..627cbf3 Binary files /dev/null and b/COMUN/grafice/Touchscreen/ts_jos2.bmp differ diff --git a/COMUN/grafice/Touchscreen/ts_sus1.bmp b/COMUN/grafice/Touchscreen/ts_sus1.bmp new file mode 100644 index 0000000..56161f5 Binary files /dev/null and b/COMUN/grafice/Touchscreen/ts_sus1.bmp differ diff --git a/COMUN/grafice/Touchscreen/ts_sus2.bmp b/COMUN/grafice/Touchscreen/ts_sus2.bmp new file mode 100644 index 0000000..56161f5 Binary files /dev/null and b/COMUN/grafice/Touchscreen/ts_sus2.bmp differ diff --git a/COMUN/grafice/Utile/_active_Find.bmp b/COMUN/grafice/Utile/_active_Find.bmp new file mode 100644 index 0000000..0da40bf Binary files /dev/null and b/COMUN/grafice/Utile/_active_Find.bmp differ diff --git a/COMUN/grafice/Utile/_disabled_Find.bmp b/COMUN/grafice/Utile/_disabled_Find.bmp new file mode 100644 index 0000000..debb794 Binary files /dev/null and b/COMUN/grafice/Utile/_disabled_Find.bmp differ diff --git a/COMUN/grafice/Utile/add.bmp b/COMUN/grafice/Utile/add.bmp new file mode 100644 index 0000000..b924205 Binary files /dev/null and b/COMUN/grafice/Utile/add.bmp differ diff --git a/COMUN/grafice/Utile/add_ref.bmp b/COMUN/grafice/Utile/add_ref.bmp new file mode 100644 index 0000000..c04e82d Binary files /dev/null and b/COMUN/grafice/Utile/add_ref.bmp differ diff --git a/COMUN/grafice/Utile/addall.bmp b/COMUN/grafice/Utile/addall.bmp new file mode 100644 index 0000000..d8ef1eb Binary files /dev/null and b/COMUN/grafice/Utile/addall.bmp differ diff --git a/COMUN/grafice/Utile/gol.bmp b/COMUN/grafice/Utile/gol.bmp new file mode 100644 index 0000000..e4e2356 Binary files /dev/null and b/COMUN/grafice/Utile/gol.bmp differ diff --git a/COMUN/grafice/Vechi/comercial.bmp b/COMUN/grafice/Vechi/comercial.bmp new file mode 100644 index 0000000..e823611 Binary files /dev/null and b/COMUN/grafice/Vechi/comercial.bmp differ diff --git a/COMUN/grafice/Vechi/cont2003.bmp b/COMUN/grafice/Vechi/cont2003.bmp new file mode 100644 index 0000000..508d281 Binary files /dev/null and b/COMUN/grafice/Vechi/cont2003.bmp differ diff --git a/COMUN/grafice/Vechi/gestiuni.bmp b/COMUN/grafice/Vechi/gestiuni.bmp new file mode 100644 index 0000000..70c1b83 Binary files /dev/null and b/COMUN/grafice/Vechi/gestiuni.bmp differ diff --git a/COMUN/grafice/Vechi/imob2003.bmp b/COMUN/grafice/Vechi/imob2003.bmp new file mode 100644 index 0000000..f032e14 Binary files /dev/null and b/COMUN/grafice/Vechi/imob2003.bmp differ diff --git a/COMUN/grafice/Vechi/manager.bmp b/COMUN/grafice/Vechi/manager.bmp new file mode 100644 index 0000000..03b0de7 Binary files /dev/null and b/COMUN/grafice/Vechi/manager.bmp differ diff --git a/COMUN/grafice/Vechi/roaautomic.ico b/COMUN/grafice/Vechi/roaautomic.ico new file mode 100644 index 0000000..55777df Binary files /dev/null and b/COMUN/grafice/Vechi/roaautomic.ico differ diff --git a/COMUN/grafice/Vechi/sal2003.bmp b/COMUN/grafice/Vechi/sal2003.bmp new file mode 100644 index 0000000..a2406ed Binary files /dev/null and b/COMUN/grafice/Vechi/sal2003.bmp differ diff --git a/COMUN/grafice/Vechi/start.ICO b/COMUN/grafice/Vechi/start.ICO new file mode 100644 index 0000000..3956ea2 Binary files /dev/null and b/COMUN/grafice/Vechi/start.ICO differ diff --git a/COMUN/grafice/Vechi/start1.ICO b/COMUN/grafice/Vechi/start1.ICO new file mode 100644 index 0000000..3956ea2 Binary files /dev/null and b/COMUN/grafice/Vechi/start1.ICO differ diff --git a/COMUN/grafice/Vechi/start_albastru.bmp b/COMUN/grafice/Vechi/start_albastru.bmp new file mode 100644 index 0000000..2ce7b06 Binary files /dev/null and b/COMUN/grafice/Vechi/start_albastru.bmp differ diff --git a/COMUN/grafice/Vechi/start_galben.bmp b/COMUN/grafice/Vechi/start_galben.bmp new file mode 100644 index 0000000..7f35b70 Binary files /dev/null and b/COMUN/grafice/Vechi/start_galben.bmp differ diff --git a/COMUN/grafice/Visits.bmp b/COMUN/grafice/Visits.bmp new file mode 100644 index 0000000..6006c5f Binary files /dev/null and b/COMUN/grafice/Visits.bmp differ diff --git a/COMUN/grafice/add.bmp b/COMUN/grafice/add.bmp new file mode 100644 index 0000000..b924205 Binary files /dev/null and b/COMUN/grafice/add.bmp differ diff --git a/COMUN/grafice/addall.bmp b/COMUN/grafice/addall.bmp new file mode 100644 index 0000000..d8ef1eb Binary files /dev/null and b/COMUN/grafice/addall.bmp differ diff --git a/COMUN/grafice/alb.bmp b/COMUN/grafice/alb.bmp new file mode 100644 index 0000000..6ec6837 Binary files /dev/null and b/COMUN/grafice/alb.bmp differ diff --git a/COMUN/grafice/alege.bmp b/COMUN/grafice/alege.bmp new file mode 100644 index 0000000..7fc19e4 Binary files /dev/null and b/COMUN/grafice/alege.bmp differ diff --git a/COMUN/grafice/arrowRight2.ico b/COMUN/grafice/arrowRight2.ico new file mode 100644 index 0000000..ce98d84 Binary files /dev/null and b/COMUN/grafice/arrowRight2.ico differ diff --git a/COMUN/grafice/attach_jos.bmp b/COMUN/grafice/attach_jos.bmp new file mode 100644 index 0000000..c7232c4 Binary files /dev/null and b/COMUN/grafice/attach_jos.bmp differ diff --git a/COMUN/grafice/attach_jos.jpg b/COMUN/grafice/attach_jos.jpg new file mode 100644 index 0000000..c7232c4 Binary files /dev/null and b/COMUN/grafice/attach_jos.jpg differ diff --git a/COMUN/grafice/attach_mic.bmp b/COMUN/grafice/attach_mic.bmp new file mode 100644 index 0000000..13652bd Binary files /dev/null and b/COMUN/grafice/attach_mic.bmp differ diff --git a/COMUN/grafice/attach_sus.bmp b/COMUN/grafice/attach_sus.bmp new file mode 100644 index 0000000..b0f7d4e Binary files /dev/null and b/COMUN/grafice/attach_sus.bmp differ diff --git a/COMUN/grafice/attach_sus.jpg b/COMUN/grafice/attach_sus.jpg new file mode 100644 index 0000000..b0f7d4e Binary files /dev/null and b/COMUN/grafice/attach_sus.jpg differ diff --git a/COMUN/grafice/bluetab.bmp b/COMUN/grafice/bluetab.bmp new file mode 100644 index 0000000..824ca7d Binary files /dev/null and b/COMUN/grafice/bluetab.bmp differ diff --git a/COMUN/grafice/but_jos.bmp b/COMUN/grafice/but_jos.bmp new file mode 100644 index 0000000..ba32316 Binary files /dev/null and b/COMUN/grafice/but_jos.bmp differ diff --git a/COMUN/grafice/buton1.pdn b/COMUN/grafice/buton1.pdn new file mode 100644 index 0000000..0d4ab5d Binary files /dev/null and b/COMUN/grafice/buton1.pdn differ diff --git a/COMUN/grafice/buton2.pdn b/COMUN/grafice/buton2.pdn new file mode 100644 index 0000000..55655c8 Binary files /dev/null and b/COMUN/grafice/buton2.pdn differ diff --git a/COMUN/grafice/calendar.png b/COMUN/grafice/calendar.png new file mode 100644 index 0000000..abf53b4 Binary files /dev/null and b/COMUN/grafice/calendar.png differ diff --git a/COMUN/grafice/cancel.bmp b/COMUN/grafice/cancel.bmp new file mode 100644 index 0000000..5542ea3 Binary files /dev/null and b/COMUN/grafice/cancel.bmp differ diff --git a/COMUN/grafice/check.bmp b/COMUN/grafice/check.bmp new file mode 100644 index 0000000..fa512ea Binary files /dev/null and b/COMUN/grafice/check.bmp differ diff --git a/COMUN/grafice/clie1.bmp b/COMUN/grafice/clie1.bmp new file mode 100644 index 0000000..2ea02f3 Binary files /dev/null and b/COMUN/grafice/clie1.bmp differ diff --git a/COMUN/grafice/clie2.bmp b/COMUN/grafice/clie2.bmp new file mode 100644 index 0000000..be12331 Binary files /dev/null and b/COMUN/grafice/clie2.bmp differ diff --git a/COMUN/grafice/compara_jos.bmp b/COMUN/grafice/compara_jos.bmp new file mode 100644 index 0000000..5e21348 Binary files /dev/null and b/COMUN/grafice/compara_jos.bmp differ diff --git a/COMUN/grafice/compara_sus.bmp b/COMUN/grafice/compara_sus.bmp new file mode 100644 index 0000000..8416784 Binary files /dev/null and b/COMUN/grafice/compara_sus.bmp differ diff --git a/COMUN/grafice/copy_jos.bmp b/COMUN/grafice/copy_jos.bmp new file mode 100644 index 0000000..45c2c2e Binary files /dev/null and b/COMUN/grafice/copy_jos.bmp differ diff --git a/COMUN/grafice/copy_sus.bmp b/COMUN/grafice/copy_sus.bmp new file mode 100644 index 0000000..14dfb41 Binary files /dev/null and b/COMUN/grafice/copy_sus.bmp differ diff --git a/COMUN/grafice/da_jos.bmp b/COMUN/grafice/da_jos.bmp new file mode 100644 index 0000000..c05face Binary files /dev/null and b/COMUN/grafice/da_jos.bmp differ diff --git a/COMUN/grafice/da_sus.bmp b/COMUN/grafice/da_sus.bmp new file mode 100644 index 0000000..d5a3989 Binary files /dev/null and b/COMUN/grafice/da_sus.bmp differ diff --git a/COMUN/grafice/delete.bmp b/COMUN/grafice/delete.bmp new file mode 100644 index 0000000..0002ab2 Binary files /dev/null and b/COMUN/grafice/delete.bmp differ diff --git a/COMUN/grafice/down.bmp b/COMUN/grafice/down.bmp new file mode 100644 index 0000000..f328ea0 Binary files /dev/null and b/COMUN/grafice/down.bmp differ diff --git a/COMUN/grafice/downArrow.bmp b/COMUN/grafice/downArrow.bmp new file mode 100644 index 0000000..1f06b07 Binary files /dev/null and b/COMUN/grafice/downArrow.bmp differ diff --git a/COMUN/grafice/erase01.ico b/COMUN/grafice/erase01.ico new file mode 100644 index 0000000..ba16119 Binary files /dev/null and b/COMUN/grafice/erase01.ico differ diff --git a/COMUN/grafice/excel_jos.bmp b/COMUN/grafice/excel_jos.bmp new file mode 100644 index 0000000..8469c30 Binary files /dev/null and b/COMUN/grafice/excel_jos.bmp differ diff --git a/COMUN/grafice/excel_sus.bmp b/COMUN/grafice/excel_sus.bmp new file mode 100644 index 0000000..adfe8c9 Binary files /dev/null and b/COMUN/grafice/excel_sus.bmp differ diff --git a/COMUN/grafice/exclamare_jos.bmp b/COMUN/grafice/exclamare_jos.bmp new file mode 100644 index 0000000..afe917d Binary files /dev/null and b/COMUN/grafice/exclamare_jos.bmp differ diff --git a/COMUN/grafice/exclamare_sus.bmp b/COMUN/grafice/exclamare_sus.bmp new file mode 100644 index 0000000..3c371e6 Binary files /dev/null and b/COMUN/grafice/exclamare_sus.bmp differ diff --git a/COMUN/grafice/explorer.bmp b/COMUN/grafice/explorer.bmp new file mode 100644 index 0000000..e7e0322 Binary files /dev/null and b/COMUN/grafice/explorer.bmp differ diff --git a/COMUN/grafice/explorer_jos.bmp b/COMUN/grafice/explorer_jos.bmp new file mode 100644 index 0000000..a2d7442 Binary files /dev/null and b/COMUN/grafice/explorer_jos.bmp differ diff --git a/COMUN/grafice/explorer_sus.bmp b/COMUN/grafice/explorer_sus.bmp new file mode 100644 index 0000000..be5db1d Binary files /dev/null and b/COMUN/grafice/explorer_sus.bmp differ diff --git a/COMUN/grafice/eye_jos.bmp b/COMUN/grafice/eye_jos.bmp new file mode 100644 index 0000000..8096aa7 Binary files /dev/null and b/COMUN/grafice/eye_jos.bmp differ diff --git a/COMUN/grafice/eye_sus.bmp b/COMUN/grafice/eye_sus.bmp new file mode 100644 index 0000000..2837513 Binary files /dev/null and b/COMUN/grafice/eye_sus.bmp differ diff --git a/COMUN/grafice/f1.jpg b/COMUN/grafice/f1.jpg new file mode 100644 index 0000000..3bff03e Binary files /dev/null and b/COMUN/grafice/f1.jpg differ diff --git a/COMUN/grafice/f2.jpg b/COMUN/grafice/f2.jpg new file mode 100644 index 0000000..8e53539 Binary files /dev/null and b/COMUN/grafice/f2.jpg differ diff --git a/COMUN/grafice/f3.jpg b/COMUN/grafice/f3.jpg new file mode 100644 index 0000000..21fd7cd Binary files /dev/null and b/COMUN/grafice/f3.jpg differ diff --git a/COMUN/grafice/factura.bmp b/COMUN/grafice/factura.bmp new file mode 100644 index 0000000..b4b634d Binary files /dev/null and b/COMUN/grafice/factura.bmp differ diff --git a/COMUN/grafice/factura.png b/COMUN/grafice/factura.png new file mode 100644 index 0000000..7193724 Binary files /dev/null and b/COMUN/grafice/factura.png differ diff --git a/COMUN/grafice/factura1.bmp b/COMUN/grafice/factura1.bmp new file mode 100644 index 0000000..142959b Binary files /dev/null and b/COMUN/grafice/factura1.bmp differ diff --git a/COMUN/grafice/factura2.bmp b/COMUN/grafice/factura2.bmp new file mode 100644 index 0000000..e8bad3a Binary files /dev/null and b/COMUN/grafice/factura2.bmp differ diff --git a/COMUN/grafice/find.BMP b/COMUN/grafice/find.BMP new file mode 100644 index 0000000..c29fbce Binary files /dev/null and b/COMUN/grafice/find.BMP differ diff --git a/COMUN/grafice/find1.bmp b/COMUN/grafice/find1.bmp new file mode 100644 index 0000000..14022fb Binary files /dev/null and b/COMUN/grafice/find1.bmp differ diff --git a/COMUN/grafice/find_jos.bmp b/COMUN/grafice/find_jos.bmp new file mode 100644 index 0000000..58f66d9 Binary files /dev/null and b/COMUN/grafice/find_jos.bmp differ diff --git a/COMUN/grafice/find_sus.bmp b/COMUN/grafice/find_sus.bmp new file mode 100644 index 0000000..0b6ff4c Binary files /dev/null and b/COMUN/grafice/find_sus.bmp differ diff --git a/COMUN/grafice/formback1.bmp b/COMUN/grafice/formback1.bmp new file mode 100644 index 0000000..96afeb8 Binary files /dev/null and b/COMUN/grafice/formback1.bmp differ diff --git a/COMUN/grafice/foxqstrt.bmp b/COMUN/grafice/foxqstrt.bmp new file mode 100644 index 0000000..c7a4d3f Binary files /dev/null and b/COMUN/grafice/foxqstrt.bmp differ diff --git a/COMUN/grafice/furn1.bmp b/COMUN/grafice/furn1.bmp new file mode 100644 index 0000000..915e1e2 Binary files /dev/null and b/COMUN/grafice/furn1.bmp differ diff --git a/COMUN/grafice/furn2.bmp b/COMUN/grafice/furn2.bmp new file mode 100644 index 0000000..16346a3 Binary files /dev/null and b/COMUN/grafice/furn2.bmp differ diff --git a/COMUN/grafice/gb.gif b/COMUN/grafice/gb.gif new file mode 100644 index 0000000..e08556c Binary files /dev/null and b/COMUN/grafice/gb.gif differ diff --git a/COMUN/grafice/grafic_jos.bmp b/COMUN/grafice/grafic_jos.bmp new file mode 100644 index 0000000..684f878 Binary files /dev/null and b/COMUN/grafice/grafic_jos.bmp differ diff --git a/COMUN/grafice/grafic_sus.bmp b/COMUN/grafice/grafic_sus.bmp new file mode 100644 index 0000000..bfd651e Binary files /dev/null and b/COMUN/grafice/grafic_sus.bmp differ diff --git a/COMUN/grafice/help/_active_Help.ico b/COMUN/grafice/help/_active_Help.ico new file mode 100644 index 0000000..6b225b6 Binary files /dev/null and b/COMUN/grafice/help/_active_Help.ico differ diff --git a/COMUN/grafice/help/_disabled_Help.ico b/COMUN/grafice/help/_disabled_Help.ico new file mode 100644 index 0000000..0eb4773 Binary files /dev/null and b/COMUN/grafice/help/_disabled_Help.ico differ diff --git a/COMUN/grafice/help_jos.bmp b/COMUN/grafice/help_jos.bmp new file mode 100644 index 0000000..85b5c5a Binary files /dev/null and b/COMUN/grafice/help_jos.bmp differ diff --git a/COMUN/grafice/help_sus.bmp b/COMUN/grafice/help_sus.bmp new file mode 100644 index 0000000..e330ba4 Binary files /dev/null and b/COMUN/grafice/help_sus.bmp differ diff --git a/COMUN/grafice/hmove.cur b/COMUN/grafice/hmove.cur new file mode 100644 index 0000000..d9ad249 Binary files /dev/null and b/COMUN/grafice/hmove.cur differ diff --git a/COMUN/grafice/homeside.bmp b/COMUN/grafice/homeside.bmp new file mode 100644 index 0000000..2f828c6 Binary files /dev/null and b/COMUN/grafice/homeside.bmp differ diff --git a/COMUN/grafice/ico/Vechi/roastart1.ico b/COMUN/grafice/ico/Vechi/roastart1.ico new file mode 100644 index 0000000..d78d706 Binary files /dev/null and b/COMUN/grafice/ico/Vechi/roastart1.ico differ diff --git a/COMUN/grafice/ico/Vechi/start.ICO b/COMUN/grafice/ico/Vechi/start.ICO new file mode 100644 index 0000000..3956ea2 Binary files /dev/null and b/COMUN/grafice/ico/Vechi/start.ICO differ diff --git a/COMUN/grafice/ico/roa_hanulpiratilor.ico b/COMUN/grafice/ico/roa_hanulpiratilor.ico new file mode 100644 index 0000000..297da7c Binary files /dev/null and b/COMUN/grafice/ico/roa_hanulpiratilor.ico differ diff --git a/COMUN/grafice/ico/roaacnpro.ico b/COMUN/grafice/ico/roaacnpro.ico new file mode 100644 index 0000000..93ba995 Binary files /dev/null and b/COMUN/grafice/ico/roaacnpro.ico differ diff --git a/COMUN/grafice/ico/roaapp.ico b/COMUN/grafice/ico/roaapp.ico new file mode 100644 index 0000000..4b244ff Binary files /dev/null and b/COMUN/grafice/ico/roaapp.ico differ diff --git a/COMUN/grafice/ico/roaappupdate.ico b/COMUN/grafice/ico/roaappupdate.ico new file mode 100644 index 0000000..6a928ae Binary files /dev/null and b/COMUN/grafice/ico/roaappupdate.ico differ diff --git a/COMUN/grafice/ico/roaaprov.ico b/COMUN/grafice/ico/roaaprov.ico new file mode 100644 index 0000000..4e9af4b Binary files /dev/null and b/COMUN/grafice/ico/roaaprov.ico differ diff --git a/COMUN/grafice/ico/roaauto.ico b/COMUN/grafice/ico/roaauto.ico new file mode 100644 index 0000000..92f0c9d Binary files /dev/null and b/COMUN/grafice/ico/roaauto.ico differ diff --git a/COMUN/grafice/ico/roabavert.ico b/COMUN/grafice/ico/roabavert.ico new file mode 100644 index 0000000..80db013 Binary files /dev/null and b/COMUN/grafice/ico/roabavert.ico differ diff --git a/COMUN/grafice/ico/roacasa.ico b/COMUN/grafice/ico/roacasa.ico new file mode 100644 index 0000000..4d307b6 Binary files /dev/null and b/COMUN/grafice/ico/roacasa.ico differ diff --git a/COMUN/grafice/ico/roaclienti.ico b/COMUN/grafice/ico/roaclienti.ico new file mode 100644 index 0000000..30a2f16 Binary files /dev/null and b/COMUN/grafice/ico/roaclienti.ico differ diff --git a/COMUN/grafice/ico/roacomenzi.ico b/COMUN/grafice/ico/roacomenzi.ico new file mode 100644 index 0000000..f4e2971 Binary files /dev/null and b/COMUN/grafice/ico/roacomenzi.ico differ diff --git a/COMUN/grafice/ico/roaconstructii.ico b/COMUN/grafice/ico/roaconstructii.ico new file mode 100644 index 0000000..63e2b53 Binary files /dev/null and b/COMUN/grafice/ico/roaconstructii.ico differ diff --git a/COMUN/grafice/ico/roacont.ico b/COMUN/grafice/ico/roacont.ico new file mode 100644 index 0000000..243a7cf Binary files /dev/null and b/COMUN/grafice/ico/roacont.ico differ diff --git a/COMUN/grafice/ico/roacontracte.ico b/COMUN/grafice/ico/roacontracte.ico new file mode 100644 index 0000000..30a2f16 Binary files /dev/null and b/COMUN/grafice/ico/roacontracte.ico differ diff --git a/COMUN/grafice/ico/roadecl.ico b/COMUN/grafice/ico/roadecl.ico new file mode 100644 index 0000000..8b56d3d Binary files /dev/null and b/COMUN/grafice/ico/roadecl.ico differ diff --git a/COMUN/grafice/ico/roadef.ico b/COMUN/grafice/ico/roadef.ico new file mode 100644 index 0000000..32fabd7 Binary files /dev/null and b/COMUN/grafice/ico/roadef.ico differ diff --git a/COMUN/grafice/ico/roadefsalarii.ico b/COMUN/grafice/ico/roadefsalarii.ico new file mode 100644 index 0000000..7488d72 Binary files /dev/null and b/COMUN/grafice/ico/roadefsalarii.ico differ diff --git a/COMUN/grafice/ico/roadevize.ico b/COMUN/grafice/ico/roadevize.ico new file mode 100644 index 0000000..4bb3098 Binary files /dev/null and b/COMUN/grafice/ico/roadevize.ico differ diff --git a/COMUN/grafice/ico/roafacturare.ico b/COMUN/grafice/ico/roafacturare.ico new file mode 100644 index 0000000..fbd5940 Binary files /dev/null and b/COMUN/grafice/ico/roafacturare.ico differ diff --git a/COMUN/grafice/ico/roafurnizori.ico b/COMUN/grafice/ico/roafurnizori.ico new file mode 100644 index 0000000..bb1f4b2 Binary files /dev/null and b/COMUN/grafice/ico/roafurnizori.ico differ diff --git a/COMUN/grafice/ico/roagen.ico b/COMUN/grafice/ico/roagen.ico new file mode 100644 index 0000000..9529cc6 Binary files /dev/null and b/COMUN/grafice/ico/roagen.ico differ diff --git a/COMUN/grafice/ico/roagest.ico b/COMUN/grafice/ico/roagest.ico new file mode 100644 index 0000000..aafda51 Binary files /dev/null and b/COMUN/grafice/ico/roagest.ico differ diff --git a/COMUN/grafice/ico/roagest_descarcare.ico b/COMUN/grafice/ico/roagest_descarcare.ico new file mode 100644 index 0000000..9d4bfd0 Binary files /dev/null and b/COMUN/grafice/ico/roagest_descarcare.ico differ diff --git a/COMUN/grafice/ico/roagrestaurant.ico b/COMUN/grafice/ico/roagrestaurant.ico new file mode 100644 index 0000000..7a982bd Binary files /dev/null and b/COMUN/grafice/ico/roagrestaurant.ico differ diff --git a/COMUN/grafice/ico/roaimob.ico b/COMUN/grafice/ico/roaimob.ico new file mode 100644 index 0000000..2a53355 Binary files /dev/null and b/COMUN/grafice/ico/roaimob.ico differ diff --git a/COMUN/grafice/ico/roajuridic.ico b/COMUN/grafice/ico/roajuridic.ico new file mode 100644 index 0000000..bb1f4b2 Binary files /dev/null and b/COMUN/grafice/ico/roajuridic.ico differ diff --git a/COMUN/grafice/ico/roalucrari.ico b/COMUN/grafice/ico/roalucrari.ico new file mode 100644 index 0000000..061e9a7 Binary files /dev/null and b/COMUN/grafice/ico/roalucrari.ico differ diff --git a/COMUN/grafice/ico/roamanager.ico b/COMUN/grafice/ico/roamanager.ico new file mode 100644 index 0000000..e5074d3 Binary files /dev/null and b/COMUN/grafice/ico/roamanager.ico differ diff --git a/COMUN/grafice/ico/roanor.ico b/COMUN/grafice/ico/roanor.ico new file mode 100644 index 0000000..4336bd6 Binary files /dev/null and b/COMUN/grafice/ico/roanor.ico differ diff --git a/COMUN/grafice/ico/roaobinv.ico b/COMUN/grafice/ico/roaobinv.ico new file mode 100644 index 0000000..dc3a980 Binary files /dev/null and b/COMUN/grafice/ico/roaobinv.ico differ diff --git a/COMUN/grafice/ico/roaoferta.ico b/COMUN/grafice/ico/roaoferta.ico new file mode 100644 index 0000000..838a3d1 Binary files /dev/null and b/COMUN/grafice/ico/roaoferta.ico differ diff --git a/COMUN/grafice/ico/roaofertare.ico b/COMUN/grafice/ico/roaofertare.ico new file mode 100644 index 0000000..838a3d1 Binary files /dev/null and b/COMUN/grafice/ico/roaofertare.ico differ diff --git a/COMUN/grafice/ico/roapreturi.ico b/COMUN/grafice/ico/roapreturi.ico new file mode 100644 index 0000000..d0e8251 Binary files /dev/null and b/COMUN/grafice/ico/roapreturi.ico differ diff --git a/COMUN/grafice/ico/roaprint.ico b/COMUN/grafice/ico/roaprint.ico new file mode 100644 index 0000000..c31ec20 Binary files /dev/null and b/COMUN/grafice/ico/roaprint.ico differ diff --git a/COMUN/grafice/ico/roaproductie.ico b/COMUN/grafice/ico/roaproductie.ico new file mode 100644 index 0000000..e832bdd Binary files /dev/null and b/COMUN/grafice/ico/roaproductie.ico differ diff --git a/COMUN/grafice/ico/roaprospectare.ico b/COMUN/grafice/ico/roaprospectare.ico new file mode 100644 index 0000000..fc70b49 Binary files /dev/null and b/COMUN/grafice/ico/roaprospectare.ico differ diff --git a/COMUN/grafice/ico/roaravert.ico b/COMUN/grafice/ico/roaravert.ico new file mode 100644 index 0000000..1c3adeb Binary files /dev/null and b/COMUN/grafice/ico/roaravert.ico differ diff --git a/COMUN/grafice/ico/roaregistratura.ico b/COMUN/grafice/ico/roaregistratura.ico new file mode 100644 index 0000000..297da7c Binary files /dev/null and b/COMUN/grafice/ico/roaregistratura.ico differ diff --git a/COMUN/grafice/ico/roarepartizsal.ico b/COMUN/grafice/ico/roarepartizsal.ico new file mode 100644 index 0000000..15fe87d Binary files /dev/null and b/COMUN/grafice/ico/roarepartizsal.ico differ diff --git a/COMUN/grafice/ico/roares.ico b/COMUN/grafice/ico/roares.ico new file mode 100644 index 0000000..caff3d2 Binary files /dev/null and b/COMUN/grafice/ico/roares.ico differ diff --git a/COMUN/grafice/ico/roarestaurant.ico b/COMUN/grafice/ico/roarestaurant.ico new file mode 100644 index 0000000..ae6f29e Binary files /dev/null and b/COMUN/grafice/ico/roarestaurant.ico differ diff --git a/COMUN/grafice/ico/roasal.ico b/COMUN/grafice/ico/roasal.ico new file mode 100644 index 0000000..03f9534 Binary files /dev/null and b/COMUN/grafice/ico/roasal.ico differ diff --git a/COMUN/grafice/ico/roasalspec.ico b/COMUN/grafice/ico/roasalspec.ico new file mode 100644 index 0000000..eaa28ae Binary files /dev/null and b/COMUN/grafice/ico/roasalspec.ico differ diff --git a/COMUN/grafice/ico/roasitfin.ico b/COMUN/grafice/ico/roasitfin.ico new file mode 100644 index 0000000..4d307b6 Binary files /dev/null and b/COMUN/grafice/ico/roasitfin.ico differ diff --git a/COMUN/grafice/ico/roasitop.ico b/COMUN/grafice/ico/roasitop.ico new file mode 100644 index 0000000..8bf9ff6 Binary files /dev/null and b/COMUN/grafice/ico/roasitop.ico differ diff --git a/COMUN/grafice/ico/roastart.ico b/COMUN/grafice/ico/roastart.ico new file mode 100644 index 0000000..3956ea2 Binary files /dev/null and b/COMUN/grafice/ico/roastart.ico differ diff --git a/COMUN/grafice/ico/roastartmic.ico b/COMUN/grafice/ico/roastartmic.ico new file mode 100644 index 0000000..9744d0d Binary files /dev/null and b/COMUN/grafice/ico/roastartmic.ico differ diff --git a/COMUN/grafice/ico/roasuport.ico b/COMUN/grafice/ico/roasuport.ico new file mode 100644 index 0000000..4b244ff Binary files /dev/null and b/COMUN/grafice/ico/roasuport.ico differ diff --git a/COMUN/grafice/ico/roavin.ico b/COMUN/grafice/ico/roavin.ico new file mode 100644 index 0000000..32b10dd Binary files /dev/null and b/COMUN/grafice/ico/roavin.ico differ diff --git a/COMUN/grafice/inBox.ico b/COMUN/grafice/inBox.ico new file mode 100644 index 0000000..9e9c57b Binary files /dev/null and b/COMUN/grafice/inBox.ico differ diff --git a/COMUN/grafice/jos1.bmp b/COMUN/grafice/jos1.bmp new file mode 100644 index 0000000..715b967 Binary files /dev/null and b/COMUN/grafice/jos1.bmp differ diff --git a/COMUN/grafice/jos2.bmp b/COMUN/grafice/jos2.bmp new file mode 100644 index 0000000..f2b84e7 Binary files /dev/null and b/COMUN/grafice/jos2.bmp differ diff --git a/COMUN/grafice/jpeggeri.dat b/COMUN/grafice/jpeggeri.dat new file mode 100644 index 0000000..7e5211a Binary files /dev/null and b/COMUN/grafice/jpeggeri.dat differ diff --git a/COMUN/grafice/lansare/chatbot.png b/COMUN/grafice/lansare/chatbot.png new file mode 100644 index 0000000..8146ffe Binary files /dev/null and b/COMUN/grafice/lansare/chatbot.png differ diff --git a/COMUN/grafice/lansare/citeste.txt b/COMUN/grafice/lansare/citeste.txt new file mode 100644 index 0000000..7890cfc --- /dev/null +++ b/COMUN/grafice/lansare/citeste.txt @@ -0,0 +1 @@ + Orice png din \lansare trebuie adaugat si in \meniutray sub forma de fisier bmp ( 15x15 ). \ No newline at end of file diff --git a/COMUN/grafice/lansare/na.png b/COMUN/grafice/lansare/na.png new file mode 100644 index 0000000..78fd426 Binary files /dev/null and b/COMUN/grafice/lansare/na.png differ diff --git a/COMUN/grafice/lansare/nablank.png b/COMUN/grafice/lansare/nablank.png new file mode 100644 index 0000000..47e2c43 Binary files /dev/null and b/COMUN/grafice/lansare/nablank.png differ diff --git a/COMUN/grafice/lansare/roa_hanulpiratilor.png b/COMUN/grafice/lansare/roa_hanulpiratilor.png new file mode 100644 index 0000000..2b723f8 Binary files /dev/null and b/COMUN/grafice/lansare/roa_hanulpiratilor.png differ diff --git a/COMUN/grafice/lansare/roaacnpro.png b/COMUN/grafice/lansare/roaacnpro.png new file mode 100644 index 0000000..9138e66 Binary files /dev/null and b/COMUN/grafice/lansare/roaacnpro.png differ diff --git a/COMUN/grafice/lansare/roaapp.png b/COMUN/grafice/lansare/roaapp.png new file mode 100644 index 0000000..4b9901b Binary files /dev/null and b/COMUN/grafice/lansare/roaapp.png differ diff --git a/COMUN/grafice/lansare/roaappupdate.PNG b/COMUN/grafice/lansare/roaappupdate.PNG new file mode 100644 index 0000000..7f46a92 Binary files /dev/null and b/COMUN/grafice/lansare/roaappupdate.PNG differ diff --git a/COMUN/grafice/lansare/roaaprov.png b/COMUN/grafice/lansare/roaaprov.png new file mode 100644 index 0000000..2ed5e55 Binary files /dev/null and b/COMUN/grafice/lansare/roaaprov.png differ diff --git a/COMUN/grafice/lansare/roaauto.png b/COMUN/grafice/lansare/roaauto.png new file mode 100644 index 0000000..8109ae8 Binary files /dev/null and b/COMUN/grafice/lansare/roaauto.png differ diff --git a/COMUN/grafice/lansare/roabavert.png b/COMUN/grafice/lansare/roabavert.png new file mode 100644 index 0000000..46dae9f Binary files /dev/null and b/COMUN/grafice/lansare/roabavert.png differ diff --git a/COMUN/grafice/lansare/roaclienti.png b/COMUN/grafice/lansare/roaclienti.png new file mode 100644 index 0000000..29c959f Binary files /dev/null and b/COMUN/grafice/lansare/roaclienti.png differ diff --git a/COMUN/grafice/lansare/roacomenzi.png b/COMUN/grafice/lansare/roacomenzi.png new file mode 100644 index 0000000..9b72f90 Binary files /dev/null and b/COMUN/grafice/lansare/roacomenzi.png differ diff --git a/COMUN/grafice/lansare/roacomercial.png b/COMUN/grafice/lansare/roacomercial.png new file mode 100644 index 0000000..96f6ad2 Binary files /dev/null and b/COMUN/grafice/lansare/roacomercial.png differ diff --git a/COMUN/grafice/lansare/roaconstructii.png b/COMUN/grafice/lansare/roaconstructii.png new file mode 100644 index 0000000..3846651 Binary files /dev/null and b/COMUN/grafice/lansare/roaconstructii.png differ diff --git a/COMUN/grafice/lansare/roacont.png b/COMUN/grafice/lansare/roacont.png new file mode 100644 index 0000000..f643de2 Binary files /dev/null and b/COMUN/grafice/lansare/roacont.png differ diff --git a/COMUN/grafice/lansare/roacontracte.png b/COMUN/grafice/lansare/roacontracte.png new file mode 100644 index 0000000..29c959f Binary files /dev/null and b/COMUN/grafice/lansare/roacontracte.png differ diff --git a/COMUN/grafice/lansare/roadecl.png b/COMUN/grafice/lansare/roadecl.png new file mode 100644 index 0000000..a66aedc Binary files /dev/null and b/COMUN/grafice/lansare/roadecl.png differ diff --git a/COMUN/grafice/lansare/roadef.png b/COMUN/grafice/lansare/roadef.png new file mode 100644 index 0000000..454e8b2 Binary files /dev/null and b/COMUN/grafice/lansare/roadef.png differ diff --git a/COMUN/grafice/lansare/roadefsalarii.png b/COMUN/grafice/lansare/roadefsalarii.png new file mode 100644 index 0000000..e3bf9b8 Binary files /dev/null and b/COMUN/grafice/lansare/roadefsalarii.png differ diff --git a/COMUN/grafice/lansare/roadevize.png b/COMUN/grafice/lansare/roadevize.png new file mode 100644 index 0000000..483d995 Binary files /dev/null and b/COMUN/grafice/lansare/roadevize.png differ diff --git a/COMUN/grafice/lansare/roafacturare.png b/COMUN/grafice/lansare/roafacturare.png new file mode 100644 index 0000000..bc179f6 Binary files /dev/null and b/COMUN/grafice/lansare/roafacturare.png differ diff --git a/COMUN/grafice/lansare/roafurnizori.png b/COMUN/grafice/lansare/roafurnizori.png new file mode 100644 index 0000000..53fa703 Binary files /dev/null and b/COMUN/grafice/lansare/roafurnizori.png differ diff --git a/COMUN/grafice/lansare/roagen.png b/COMUN/grafice/lansare/roagen.png new file mode 100644 index 0000000..01873a9 Binary files /dev/null and b/COMUN/grafice/lansare/roagen.png differ diff --git a/COMUN/grafice/lansare/roagest.png b/COMUN/grafice/lansare/roagest.png new file mode 100644 index 0000000..c57187c Binary files /dev/null and b/COMUN/grafice/lansare/roagest.png differ diff --git a/COMUN/grafice/lansare/roagest_descarcare.png b/COMUN/grafice/lansare/roagest_descarcare.png new file mode 100644 index 0000000..e50d72c Binary files /dev/null and b/COMUN/grafice/lansare/roagest_descarcare.png differ diff --git a/COMUN/grafice/lansare/roagrestaurant.png b/COMUN/grafice/lansare/roagrestaurant.png new file mode 100644 index 0000000..a5a46e8 Binary files /dev/null and b/COMUN/grafice/lansare/roagrestaurant.png differ diff --git a/COMUN/grafice/lansare/roaimob.png b/COMUN/grafice/lansare/roaimob.png new file mode 100644 index 0000000..216be88 Binary files /dev/null and b/COMUN/grafice/lansare/roaimob.png differ diff --git a/COMUN/grafice/lansare/roalucrari.png b/COMUN/grafice/lansare/roalucrari.png new file mode 100644 index 0000000..25c191d Binary files /dev/null and b/COMUN/grafice/lansare/roalucrari.png differ diff --git a/COMUN/grafice/lansare/roamanager.png b/COMUN/grafice/lansare/roamanager.png new file mode 100644 index 0000000..0dba38e Binary files /dev/null and b/COMUN/grafice/lansare/roamanager.png differ diff --git a/COMUN/grafice/lansare/roanor.png b/COMUN/grafice/lansare/roanor.png new file mode 100644 index 0000000..cde651d Binary files /dev/null and b/COMUN/grafice/lansare/roanor.png differ diff --git a/COMUN/grafice/lansare/roaobinv.png b/COMUN/grafice/lansare/roaobinv.png new file mode 100644 index 0000000..1c6c6f5 Binary files /dev/null and b/COMUN/grafice/lansare/roaobinv.png differ diff --git a/COMUN/grafice/lansare/roaoferta.png b/COMUN/grafice/lansare/roaoferta.png new file mode 100644 index 0000000..8b54a21 Binary files /dev/null and b/COMUN/grafice/lansare/roaoferta.png differ diff --git a/COMUN/grafice/lansare/roapreturi.png b/COMUN/grafice/lansare/roapreturi.png new file mode 100644 index 0000000..597d1e2 Binary files /dev/null and b/COMUN/grafice/lansare/roapreturi.png differ diff --git a/COMUN/grafice/lansare/roaprint.png b/COMUN/grafice/lansare/roaprint.png new file mode 100644 index 0000000..3e4b779 Binary files /dev/null and b/COMUN/grafice/lansare/roaprint.png differ diff --git a/COMUN/grafice/lansare/roaproductie.png b/COMUN/grafice/lansare/roaproductie.png new file mode 100644 index 0000000..ef7a166 Binary files /dev/null and b/COMUN/grafice/lansare/roaproductie.png differ diff --git a/COMUN/grafice/lansare/roaprospectare.png b/COMUN/grafice/lansare/roaprospectare.png new file mode 100644 index 0000000..752882c Binary files /dev/null and b/COMUN/grafice/lansare/roaprospectare.png differ diff --git a/COMUN/grafice/lansare/roaravert.png b/COMUN/grafice/lansare/roaravert.png new file mode 100644 index 0000000..42dfef9 Binary files /dev/null and b/COMUN/grafice/lansare/roaravert.png differ diff --git a/COMUN/grafice/lansare/roaregistratura.png b/COMUN/grafice/lansare/roaregistratura.png new file mode 100644 index 0000000..2b723f8 Binary files /dev/null and b/COMUN/grafice/lansare/roaregistratura.png differ diff --git a/COMUN/grafice/lansare/roarepartizsal.png b/COMUN/grafice/lansare/roarepartizsal.png new file mode 100644 index 0000000..1afc4b7 Binary files /dev/null and b/COMUN/grafice/lansare/roarepartizsal.png differ diff --git a/COMUN/grafice/lansare/roares.png b/COMUN/grafice/lansare/roares.png new file mode 100644 index 0000000..b6f815f Binary files /dev/null and b/COMUN/grafice/lansare/roares.png differ diff --git a/COMUN/grafice/lansare/roarestaurant.png b/COMUN/grafice/lansare/roarestaurant.png new file mode 100644 index 0000000..96f6ad2 Binary files /dev/null and b/COMUN/grafice/lansare/roarestaurant.png differ diff --git a/COMUN/grafice/lansare/roasal.png b/COMUN/grafice/lansare/roasal.png new file mode 100644 index 0000000..bf5d6af Binary files /dev/null and b/COMUN/grafice/lansare/roasal.png differ diff --git a/COMUN/grafice/lansare/roasalspec.png b/COMUN/grafice/lansare/roasalspec.png new file mode 100644 index 0000000..7291244 Binary files /dev/null and b/COMUN/grafice/lansare/roasalspec.png differ diff --git a/COMUN/grafice/lansare/roasitfin.png b/COMUN/grafice/lansare/roasitfin.png new file mode 100644 index 0000000..95d8966 Binary files /dev/null and b/COMUN/grafice/lansare/roasitfin.png differ diff --git a/COMUN/grafice/lansare/roasitop.png b/COMUN/grafice/lansare/roasitop.png new file mode 100644 index 0000000..7c33149 Binary files /dev/null and b/COMUN/grafice/lansare/roasitop.png differ diff --git a/COMUN/grafice/lansare/roasuport.png b/COMUN/grafice/lansare/roasuport.png new file mode 100644 index 0000000..4b9901b Binary files /dev/null and b/COMUN/grafice/lansare/roasuport.png differ diff --git a/COMUN/grafice/lansare/roavin.png b/COMUN/grafice/lansare/roavin.png new file mode 100644 index 0000000..0baa644 Binary files /dev/null and b/COMUN/grafice/lansare/roavin.png differ diff --git a/COMUN/grafice/lansare/romfast_suport.png b/COMUN/grafice/lansare/romfast_suport.png new file mode 100644 index 0000000..1d92ab1 Binary files /dev/null and b/COMUN/grafice/lansare/romfast_suport.png differ diff --git a/COMUN/grafice/lansare/screenshot.png b/COMUN/grafice/lansare/screenshot.png new file mode 100644 index 0000000..4a8ae34 Binary files /dev/null and b/COMUN/grafice/lansare/screenshot.png differ diff --git a/COMUN/grafice/left.bmp b/COMUN/grafice/left.bmp new file mode 100644 index 0000000..7829432 Binary files /dev/null and b/COMUN/grafice/left.bmp differ diff --git a/COMUN/grafice/listare_jos.bmp b/COMUN/grafice/listare_jos.bmp new file mode 100644 index 0000000..611101c Binary files /dev/null and b/COMUN/grafice/listare_jos.bmp differ diff --git a/COMUN/grafice/listare_sus.bmp b/COMUN/grafice/listare_sus.bmp new file mode 100644 index 0000000..7fa12f5 Binary files /dev/null and b/COMUN/grafice/listare_sus.bmp differ diff --git a/COMUN/grafice/lock.bmp b/COMUN/grafice/lock.bmp new file mode 100644 index 0000000..dd380b2 Binary files /dev/null and b/COMUN/grafice/lock.bmp differ diff --git a/COMUN/grafice/meniutray/Favorites.bmp b/COMUN/grafice/meniutray/Favorites.bmp new file mode 100644 index 0000000..e2af6f3 Binary files /dev/null and b/COMUN/grafice/meniutray/Favorites.bmp differ diff --git a/COMUN/grafice/meniutray/Thumbs.db b/COMUN/grafice/meniutray/Thumbs.db new file mode 100644 index 0000000..2d6a668 Binary files /dev/null and b/COMUN/grafice/meniutray/Thumbs.db differ diff --git a/COMUN/grafice/meniutray/na.bmp b/COMUN/grafice/meniutray/na.bmp new file mode 100644 index 0000000..55446bc Binary files /dev/null and b/COMUN/grafice/meniutray/na.bmp differ diff --git a/COMUN/grafice/meniutray/roa_hanulpiratilor.bmp b/COMUN/grafice/meniutray/roa_hanulpiratilor.bmp new file mode 100644 index 0000000..2d20e30 Binary files /dev/null and b/COMUN/grafice/meniutray/roa_hanulpiratilor.bmp differ diff --git a/COMUN/grafice/meniutray/roaacnpro.bmp b/COMUN/grafice/meniutray/roaacnpro.bmp new file mode 100644 index 0000000..68de3f5 Binary files /dev/null and b/COMUN/grafice/meniutray/roaacnpro.bmp differ diff --git a/COMUN/grafice/meniutray/roaapp.bmp b/COMUN/grafice/meniutray/roaapp.bmp new file mode 100644 index 0000000..b7140e7 Binary files /dev/null and b/COMUN/grafice/meniutray/roaapp.bmp differ diff --git a/COMUN/grafice/meniutray/roaappupdate.bmp b/COMUN/grafice/meniutray/roaappupdate.bmp new file mode 100644 index 0000000..bd342cb Binary files /dev/null and b/COMUN/grafice/meniutray/roaappupdate.bmp differ diff --git a/COMUN/grafice/meniutray/roaaprov.bmp b/COMUN/grafice/meniutray/roaaprov.bmp new file mode 100644 index 0000000..4ff5d3f Binary files /dev/null and b/COMUN/grafice/meniutray/roaaprov.bmp differ diff --git a/COMUN/grafice/meniutray/roaauto.bmp b/COMUN/grafice/meniutray/roaauto.bmp new file mode 100644 index 0000000..681120e Binary files /dev/null and b/COMUN/grafice/meniutray/roaauto.bmp differ diff --git a/COMUN/grafice/meniutray/roabavert.bmp b/COMUN/grafice/meniutray/roabavert.bmp new file mode 100644 index 0000000..302cb13 Binary files /dev/null and b/COMUN/grafice/meniutray/roabavert.bmp differ diff --git a/COMUN/grafice/meniutray/roaclienti.bmp b/COMUN/grafice/meniutray/roaclienti.bmp new file mode 100644 index 0000000..806fc15 Binary files /dev/null and b/COMUN/grafice/meniutray/roaclienti.bmp differ diff --git a/COMUN/grafice/meniutray/roacomenzi.bmp b/COMUN/grafice/meniutray/roacomenzi.bmp new file mode 100644 index 0000000..7e791e8 Binary files /dev/null and b/COMUN/grafice/meniutray/roacomenzi.bmp differ diff --git a/COMUN/grafice/meniutray/roaconstructii.bmp b/COMUN/grafice/meniutray/roaconstructii.bmp new file mode 100644 index 0000000..5627be8 Binary files /dev/null and b/COMUN/grafice/meniutray/roaconstructii.bmp differ diff --git a/COMUN/grafice/meniutray/roacont.bmp b/COMUN/grafice/meniutray/roacont.bmp new file mode 100644 index 0000000..21f3fd5 Binary files /dev/null and b/COMUN/grafice/meniutray/roacont.bmp differ diff --git a/COMUN/grafice/meniutray/roacontracte.bmp b/COMUN/grafice/meniutray/roacontracte.bmp new file mode 100644 index 0000000..806fc15 Binary files /dev/null and b/COMUN/grafice/meniutray/roacontracte.bmp differ diff --git a/COMUN/grafice/meniutray/roadecl.bmp b/COMUN/grafice/meniutray/roadecl.bmp new file mode 100644 index 0000000..c968b41 Binary files /dev/null and b/COMUN/grafice/meniutray/roadecl.bmp differ diff --git a/COMUN/grafice/meniutray/roadef.bmp b/COMUN/grafice/meniutray/roadef.bmp new file mode 100644 index 0000000..5f160a8 Binary files /dev/null and b/COMUN/grafice/meniutray/roadef.bmp differ diff --git a/COMUN/grafice/meniutray/roadefsalarii.bmp b/COMUN/grafice/meniutray/roadefsalarii.bmp new file mode 100644 index 0000000..948c3cb Binary files /dev/null and b/COMUN/grafice/meniutray/roadefsalarii.bmp differ diff --git a/COMUN/grafice/meniutray/roadevize.bmp b/COMUN/grafice/meniutray/roadevize.bmp new file mode 100644 index 0000000..8f370ca Binary files /dev/null and b/COMUN/grafice/meniutray/roadevize.bmp differ diff --git a/COMUN/grafice/meniutray/roafacturare.bmp b/COMUN/grafice/meniutray/roafacturare.bmp new file mode 100644 index 0000000..a7a9163 Binary files /dev/null and b/COMUN/grafice/meniutray/roafacturare.bmp differ diff --git a/COMUN/grafice/meniutray/roafurnizori.bmp b/COMUN/grafice/meniutray/roafurnizori.bmp new file mode 100644 index 0000000..a8ff745 Binary files /dev/null and b/COMUN/grafice/meniutray/roafurnizori.bmp differ diff --git a/COMUN/grafice/meniutray/roagen.bmp b/COMUN/grafice/meniutray/roagen.bmp new file mode 100644 index 0000000..6aac8f9 Binary files /dev/null and b/COMUN/grafice/meniutray/roagen.bmp differ diff --git a/COMUN/grafice/meniutray/roagest.bmp b/COMUN/grafice/meniutray/roagest.bmp new file mode 100644 index 0000000..15cf270 Binary files /dev/null and b/COMUN/grafice/meniutray/roagest.bmp differ diff --git a/COMUN/grafice/meniutray/roagest_descarcare.bmp b/COMUN/grafice/meniutray/roagest_descarcare.bmp new file mode 100644 index 0000000..abeceb1 Binary files /dev/null and b/COMUN/grafice/meniutray/roagest_descarcare.bmp differ diff --git a/COMUN/grafice/meniutray/roagrestaurant.bmp b/COMUN/grafice/meniutray/roagrestaurant.bmp new file mode 100644 index 0000000..2d1379c Binary files /dev/null and b/COMUN/grafice/meniutray/roagrestaurant.bmp differ diff --git a/COMUN/grafice/meniutray/roaimob.bmp b/COMUN/grafice/meniutray/roaimob.bmp new file mode 100644 index 0000000..f6eee8b Binary files /dev/null and b/COMUN/grafice/meniutray/roaimob.bmp differ diff --git a/COMUN/grafice/meniutray/roalucrari.bmp b/COMUN/grafice/meniutray/roalucrari.bmp new file mode 100644 index 0000000..a098e82 Binary files /dev/null and b/COMUN/grafice/meniutray/roalucrari.bmp differ diff --git a/COMUN/grafice/meniutray/roamanager.bmp b/COMUN/grafice/meniutray/roamanager.bmp new file mode 100644 index 0000000..89a25db Binary files /dev/null and b/COMUN/grafice/meniutray/roamanager.bmp differ diff --git a/COMUN/grafice/meniutray/roanor.bmp b/COMUN/grafice/meniutray/roanor.bmp new file mode 100644 index 0000000..1380c26 Binary files /dev/null and b/COMUN/grafice/meniutray/roanor.bmp differ diff --git a/COMUN/grafice/meniutray/roaobinv.bmp b/COMUN/grafice/meniutray/roaobinv.bmp new file mode 100644 index 0000000..ab2f3e2 Binary files /dev/null and b/COMUN/grafice/meniutray/roaobinv.bmp differ diff --git a/COMUN/grafice/meniutray/roaoferta.bmp b/COMUN/grafice/meniutray/roaoferta.bmp new file mode 100644 index 0000000..bfb249f Binary files /dev/null and b/COMUN/grafice/meniutray/roaoferta.bmp differ diff --git a/COMUN/grafice/meniutray/roapreturi.bmp b/COMUN/grafice/meniutray/roapreturi.bmp new file mode 100644 index 0000000..5fb9dd5 Binary files /dev/null and b/COMUN/grafice/meniutray/roapreturi.bmp differ diff --git a/COMUN/grafice/meniutray/roaprint.bmp b/COMUN/grafice/meniutray/roaprint.bmp new file mode 100644 index 0000000..51beae5 Binary files /dev/null and b/COMUN/grafice/meniutray/roaprint.bmp differ diff --git a/COMUN/grafice/meniutray/roaproductie.bmp b/COMUN/grafice/meniutray/roaproductie.bmp new file mode 100644 index 0000000..5a643d3 Binary files /dev/null and b/COMUN/grafice/meniutray/roaproductie.bmp differ diff --git a/COMUN/grafice/meniutray/roaprospectare.bmp b/COMUN/grafice/meniutray/roaprospectare.bmp new file mode 100644 index 0000000..91b17d4 Binary files /dev/null and b/COMUN/grafice/meniutray/roaprospectare.bmp differ diff --git a/COMUN/grafice/meniutray/roaravert.bmp b/COMUN/grafice/meniutray/roaravert.bmp new file mode 100644 index 0000000..5265bde Binary files /dev/null and b/COMUN/grafice/meniutray/roaravert.bmp differ diff --git a/COMUN/grafice/meniutray/roaregistratura.bmp b/COMUN/grafice/meniutray/roaregistratura.bmp new file mode 100644 index 0000000..95a4f35 Binary files /dev/null and b/COMUN/grafice/meniutray/roaregistratura.bmp differ diff --git a/COMUN/grafice/meniutray/roarepartizsal.bmp b/COMUN/grafice/meniutray/roarepartizsal.bmp new file mode 100644 index 0000000..c3d76d1 Binary files /dev/null and b/COMUN/grafice/meniutray/roarepartizsal.bmp differ diff --git a/COMUN/grafice/meniutray/roares.bmp b/COMUN/grafice/meniutray/roares.bmp new file mode 100644 index 0000000..19e1ad4 Binary files /dev/null and b/COMUN/grafice/meniutray/roares.bmp differ diff --git a/COMUN/grafice/meniutray/roarestaurant.bmp b/COMUN/grafice/meniutray/roarestaurant.bmp new file mode 100644 index 0000000..9bf0e1b Binary files /dev/null and b/COMUN/grafice/meniutray/roarestaurant.bmp differ diff --git a/COMUN/grafice/meniutray/roasal.bmp b/COMUN/grafice/meniutray/roasal.bmp new file mode 100644 index 0000000..19d24b9 Binary files /dev/null and b/COMUN/grafice/meniutray/roasal.bmp differ diff --git a/COMUN/grafice/meniutray/roasalspec.bmp b/COMUN/grafice/meniutray/roasalspec.bmp new file mode 100644 index 0000000..929d5a7 Binary files /dev/null and b/COMUN/grafice/meniutray/roasalspec.bmp differ diff --git a/COMUN/grafice/meniutray/roasitfin.bmp b/COMUN/grafice/meniutray/roasitfin.bmp new file mode 100644 index 0000000..8ee0f46 Binary files /dev/null and b/COMUN/grafice/meniutray/roasitfin.bmp differ diff --git a/COMUN/grafice/meniutray/roasitop.bmp b/COMUN/grafice/meniutray/roasitop.bmp new file mode 100644 index 0000000..f43dae5 Binary files /dev/null and b/COMUN/grafice/meniutray/roasitop.bmp differ diff --git a/COMUN/grafice/meniutray/roasuport.bmp b/COMUN/grafice/meniutray/roasuport.bmp new file mode 100644 index 0000000..22d4723 Binary files /dev/null and b/COMUN/grafice/meniutray/roasuport.bmp differ diff --git a/COMUN/grafice/meniutray/roavin.bmp b/COMUN/grafice/meniutray/roavin.bmp new file mode 100644 index 0000000..db7ba9a Binary files /dev/null and b/COMUN/grafice/meniutray/roavin.bmp differ diff --git a/COMUN/grafice/meniutray/romfast_suport.bmp b/COMUN/grafice/meniutray/romfast_suport.bmp new file mode 100644 index 0000000..2861963 Binary files /dev/null and b/COMUN/grafice/meniutray/romfast_suport.bmp differ diff --git a/COMUN/grafice/modific_jos.bmp b/COMUN/grafice/modific_jos.bmp new file mode 100644 index 0000000..a139b35 Binary files /dev/null and b/COMUN/grafice/modific_jos.bmp differ diff --git a/COMUN/grafice/modific_sus.bmp b/COMUN/grafice/modific_sus.bmp new file mode 100644 index 0000000..259b575 Binary files /dev/null and b/COMUN/grafice/modific_sus.bmp differ diff --git a/COMUN/grafice/modifica1.bmp b/COMUN/grafice/modifica1.bmp new file mode 100644 index 0000000..259b575 Binary files /dev/null and b/COMUN/grafice/modifica1.bmp differ diff --git a/COMUN/grafice/modifica2.bmp b/COMUN/grafice/modifica2.bmp new file mode 100644 index 0000000..a139b35 Binary files /dev/null and b/COMUN/grafice/modifica2.bmp differ diff --git a/COMUN/grafice/modiparam_jos.bmp b/COMUN/grafice/modiparam_jos.bmp new file mode 100644 index 0000000..f22d4dc Binary files /dev/null and b/COMUN/grafice/modiparam_jos.bmp differ diff --git a/COMUN/grafice/modiparam_sus.bmp b/COMUN/grafice/modiparam_sus.bmp new file mode 100644 index 0000000..332dceb Binary files /dev/null and b/COMUN/grafice/modiparam_sus.bmp differ diff --git a/COMUN/grafice/news1.ico b/COMUN/grafice/news1.ico new file mode 100644 index 0000000..4c6bd5e Binary files /dev/null and b/COMUN/grafice/news1.ico differ diff --git a/COMUN/grafice/note.gif b/COMUN/grafice/note.gif new file mode 100644 index 0000000..f9b5473 Binary files /dev/null and b/COMUN/grafice/note.gif differ diff --git a/COMUN/grafice/note.ico b/COMUN/grafice/note.ico new file mode 100644 index 0000000..35f5937 Binary files /dev/null and b/COMUN/grafice/note.ico differ diff --git a/COMUN/grafice/nou1.bmp b/COMUN/grafice/nou1.bmp new file mode 100644 index 0000000..ba8a033 Binary files /dev/null and b/COMUN/grafice/nou1.bmp differ diff --git a/COMUN/grafice/nou2.bmp b/COMUN/grafice/nou2.bmp new file mode 100644 index 0000000..8a1b0a3 Binary files /dev/null and b/COMUN/grafice/nou2.bmp differ diff --git a/COMUN/grafice/nou_jos.bmp b/COMUN/grafice/nou_jos.bmp new file mode 100644 index 0000000..8a1b0a3 Binary files /dev/null and b/COMUN/grafice/nou_jos.bmp differ diff --git a/COMUN/grafice/nou_jos_dis.bmp b/COMUN/grafice/nou_jos_dis.bmp new file mode 100644 index 0000000..7eec9dd Binary files /dev/null and b/COMUN/grafice/nou_jos_dis.bmp differ diff --git a/COMUN/grafice/nou_sus.bmp b/COMUN/grafice/nou_sus.bmp new file mode 100644 index 0000000..ba8a033 Binary files /dev/null and b/COMUN/grafice/nou_sus.bmp differ diff --git a/COMUN/grafice/nou_sus_dis.bmp b/COMUN/grafice/nou_sus_dis.bmp new file mode 100644 index 0000000..a51347d Binary files /dev/null and b/COMUN/grafice/nou_sus_dis.bmp differ diff --git a/COMUN/grafice/nu_jos.bmp b/COMUN/grafice/nu_jos.bmp new file mode 100644 index 0000000..e197e4a Binary files /dev/null and b/COMUN/grafice/nu_jos.bmp differ diff --git a/COMUN/grafice/nu_sus.bmp b/COMUN/grafice/nu_sus.bmp new file mode 100644 index 0000000..efabc33 Binary files /dev/null and b/COMUN/grafice/nu_sus.bmp differ diff --git a/COMUN/grafice/open.bmp b/COMUN/grafice/open.bmp new file mode 100644 index 0000000..59c9eeb Binary files /dev/null and b/COMUN/grafice/open.bmp differ diff --git a/COMUN/grafice/orb.bmp b/COMUN/grafice/orb.bmp new file mode 100644 index 0000000..0a48e5d Binary files /dev/null and b/COMUN/grafice/orb.bmp differ diff --git a/COMUN/grafice/original/rc1.bmp b/COMUN/grafice/original/rc1.bmp new file mode 100644 index 0000000..7bc5eff Binary files /dev/null and b/COMUN/grafice/original/rc1.bmp differ diff --git a/COMUN/grafice/original/rc2.bmp b/COMUN/grafice/original/rc2.bmp new file mode 100644 index 0000000..1523f8f Binary files /dev/null and b/COMUN/grafice/original/rc2.bmp differ diff --git a/COMUN/grafice/original/rj1.bmp b/COMUN/grafice/original/rj1.bmp new file mode 100644 index 0000000..40a0981 Binary files /dev/null and b/COMUN/grafice/original/rj1.bmp differ diff --git a/COMUN/grafice/original/rj2.bmp b/COMUN/grafice/original/rj2.bmp new file mode 100644 index 0000000..3fec774 Binary files /dev/null and b/COMUN/grafice/original/rj2.bmp differ diff --git a/COMUN/grafice/original/rv1.bmp b/COMUN/grafice/original/rv1.bmp new file mode 100644 index 0000000..a2fe15b Binary files /dev/null and b/COMUN/grafice/original/rv1.bmp differ diff --git a/COMUN/grafice/original/rv2.bmp b/COMUN/grafice/original/rv2.bmp new file mode 100644 index 0000000..9883d5e Binary files /dev/null and b/COMUN/grafice/original/rv2.bmp differ diff --git a/COMUN/grafice/paintdotnet/template.pdn b/COMUN/grafice/paintdotnet/template.pdn new file mode 100644 index 0000000..70ba0c7 Binary files /dev/null and b/COMUN/grafice/paintdotnet/template.pdn differ diff --git a/COMUN/grafice/paintdotnet/validare.png b/COMUN/grafice/paintdotnet/validare.png new file mode 100644 index 0000000..94dce6d Binary files /dev/null and b/COMUN/grafice/paintdotnet/validare.png differ diff --git a/COMUN/grafice/pericol.ico b/COMUN/grafice/pericol.ico new file mode 100644 index 0000000..36043c8 Binary files /dev/null and b/COMUN/grafice/pericol.ico differ diff --git a/COMUN/grafice/precEDENT1.bmp b/COMUN/grafice/precEDENT1.bmp new file mode 100644 index 0000000..dad6cb1 Binary files /dev/null and b/COMUN/grafice/precEDENT1.bmp differ diff --git a/COMUN/grafice/precEDENT2.bmp b/COMUN/grafice/precEDENT2.bmp new file mode 100644 index 0000000..cf55236 Binary files /dev/null and b/COMUN/grafice/precEDENT2.bmp differ diff --git a/COMUN/grafice/procente_jos.bmp b/COMUN/grafice/procente_jos.bmp new file mode 100644 index 0000000..b1adcbe Binary files /dev/null and b/COMUN/grafice/procente_jos.bmp differ diff --git a/COMUN/grafice/procente_sus.bmp b/COMUN/grafice/procente_sus.bmp new file mode 100644 index 0000000..7a84922 Binary files /dev/null and b/COMUN/grafice/procente_sus.bmp differ diff --git a/COMUN/grafice/rc1.bmp b/COMUN/grafice/rc1.bmp new file mode 100644 index 0000000..d2dcbc7 Binary files /dev/null and b/COMUN/grafice/rc1.bmp differ diff --git a/COMUN/grafice/rc2.bmp b/COMUN/grafice/rc2.bmp new file mode 100644 index 0000000..7e0f5fa Binary files /dev/null and b/COMUN/grafice/rc2.bmp differ diff --git a/COMUN/grafice/refac_jos.bmp b/COMUN/grafice/refac_jos.bmp new file mode 100644 index 0000000..73c547c Binary files /dev/null and b/COMUN/grafice/refac_jos.bmp differ diff --git a/COMUN/grafice/refac_sus.bmp b/COMUN/grafice/refac_sus.bmp new file mode 100644 index 0000000..f430a54 Binary files /dev/null and b/COMUN/grafice/refac_sus.bmp differ diff --git a/COMUN/grafice/remall.bmp b/COMUN/grafice/remall.bmp new file mode 100644 index 0000000..7a0a288 Binary files /dev/null and b/COMUN/grafice/remall.bmp differ diff --git a/COMUN/grafice/remove.bmp b/COMUN/grafice/remove.bmp new file mode 100644 index 0000000..33c76f7 Binary files /dev/null and b/COMUN/grafice/remove.bmp differ diff --git a/COMUN/grafice/renunt1.bmp b/COMUN/grafice/renunt1.bmp new file mode 100644 index 0000000..6468726 Binary files /dev/null and b/COMUN/grafice/renunt1.bmp differ diff --git a/COMUN/grafice/renunt2.bmp b/COMUN/grafice/renunt2.bmp new file mode 100644 index 0000000..a209f53 Binary files /dev/null and b/COMUN/grafice/renunt2.bmp differ diff --git a/COMUN/grafice/renunt_jos.bmp b/COMUN/grafice/renunt_jos.bmp new file mode 100644 index 0000000..a209f53 Binary files /dev/null and b/COMUN/grafice/renunt_jos.bmp differ diff --git a/COMUN/grafice/renunt_sus.bmp b/COMUN/grafice/renunt_sus.bmp new file mode 100644 index 0000000..6468726 Binary files /dev/null and b/COMUN/grafice/renunt_sus.bmp differ diff --git a/COMUN/grafice/reset.jpg b/COMUN/grafice/reset.jpg new file mode 100644 index 0000000..9eac5da Binary files /dev/null and b/COMUN/grafice/reset.jpg differ diff --git a/COMUN/grafice/reset_jos.bmp b/COMUN/grafice/reset_jos.bmp new file mode 100644 index 0000000..4d36441 Binary files /dev/null and b/COMUN/grafice/reset_jos.bmp differ diff --git a/COMUN/grafice/reset_sus.bmp b/COMUN/grafice/reset_sus.bmp new file mode 100644 index 0000000..ff4f7b3 Binary files /dev/null and b/COMUN/grafice/reset_sus.bmp differ diff --git a/COMUN/grafice/retur.png b/COMUN/grafice/retur.png new file mode 100644 index 0000000..79d3e5c Binary files /dev/null and b/COMUN/grafice/retur.png differ diff --git a/COMUN/grafice/retur1.bmp b/COMUN/grafice/retur1.bmp new file mode 100644 index 0000000..089a24c Binary files /dev/null and b/COMUN/grafice/retur1.bmp differ diff --git a/COMUN/grafice/retur2.bmp b/COMUN/grafice/retur2.bmp new file mode 100644 index 0000000..d5ce883 Binary files /dev/null and b/COMUN/grafice/retur2.bmp differ diff --git a/COMUN/grafice/right.bmp b/COMUN/grafice/right.bmp new file mode 100644 index 0000000..c87fb52 Binary files /dev/null and b/COMUN/grafice/right.bmp differ diff --git a/COMUN/grafice/rj1.bmp b/COMUN/grafice/rj1.bmp new file mode 100644 index 0000000..46b9ee5 Binary files /dev/null and b/COMUN/grafice/rj1.bmp differ diff --git a/COMUN/grafice/rj2.bmp b/COMUN/grafice/rj2.bmp new file mode 100644 index 0000000..188f6fb Binary files /dev/null and b/COMUN/grafice/rj2.bmp differ diff --git a/COMUN/grafice/ro.gif b/COMUN/grafice/ro.gif new file mode 100644 index 0000000..c717a79 Binary files /dev/null and b/COMUN/grafice/ro.gif differ diff --git a/COMUN/grafice/romfast_logo.JPG b/COMUN/grafice/romfast_logo.JPG new file mode 100644 index 0000000..24a6a76 Binary files /dev/null and b/COMUN/grafice/romfast_logo.JPG differ diff --git a/COMUN/grafice/rv1.bmp b/COMUN/grafice/rv1.bmp new file mode 100644 index 0000000..39dd7f5 Binary files /dev/null and b/COMUN/grafice/rv1.bmp differ diff --git a/COMUN/grafice/rv2.bmp b/COMUN/grafice/rv2.bmp new file mode 100644 index 0000000..8df0841 Binary files /dev/null and b/COMUN/grafice/rv2.bmp differ diff --git a/COMUN/grafice/save_jos.bmp b/COMUN/grafice/save_jos.bmp new file mode 100644 index 0000000..49799ca Binary files /dev/null and b/COMUN/grafice/save_jos.bmp differ diff --git a/COMUN/grafice/save_sus.bmp b/COMUN/grafice/save_sus.bmp new file mode 100644 index 0000000..8a18aba Binary files /dev/null and b/COMUN/grafice/save_sus.bmp differ diff --git a/COMUN/grafice/searchalb.bmp b/COMUN/grafice/searchalb.bmp new file mode 100644 index 0000000..2a531bc Binary files /dev/null and b/COMUN/grafice/searchalb.bmp differ diff --git a/COMUN/grafice/sterg2_sus_dis.bmp b/COMUN/grafice/sterg2_sus_dis.bmp new file mode 100644 index 0000000..fe17c1b Binary files /dev/null and b/COMUN/grafice/sterg2_sus_dis.bmp differ diff --git a/COMUN/grafice/sterg_jos.bmp b/COMUN/grafice/sterg_jos.bmp new file mode 100644 index 0000000..38f9994 Binary files /dev/null and b/COMUN/grafice/sterg_jos.bmp differ diff --git a/COMUN/grafice/sterg_sus.bmp b/COMUN/grafice/sterg_sus.bmp new file mode 100644 index 0000000..828c209 Binary files /dev/null and b/COMUN/grafice/sterg_sus.bmp differ diff --git a/COMUN/grafice/sterge1.bmp b/COMUN/grafice/sterge1.bmp new file mode 100644 index 0000000..828c209 Binary files /dev/null and b/COMUN/grafice/sterge1.bmp differ diff --git a/COMUN/grafice/sterge2.bmp b/COMUN/grafice/sterge2.bmp new file mode 100644 index 0000000..38f9994 Binary files /dev/null and b/COMUN/grafice/sterge2.bmp differ diff --git a/COMUN/grafice/stoc1.bmp b/COMUN/grafice/stoc1.bmp new file mode 100644 index 0000000..aed56d4 Binary files /dev/null and b/COMUN/grafice/stoc1.bmp differ diff --git a/COMUN/grafice/stoc2.bmp b/COMUN/grafice/stoc2.bmp new file mode 100644 index 0000000..d175522 Binary files /dev/null and b/COMUN/grafice/stoc2.bmp differ diff --git a/COMUN/grafice/sus1.bmp b/COMUN/grafice/sus1.bmp new file mode 100644 index 0000000..69b38c1 Binary files /dev/null and b/COMUN/grafice/sus1.bmp differ diff --git a/COMUN/grafice/sus2.bmp b/COMUN/grafice/sus2.bmp new file mode 100644 index 0000000..3d9c33b Binary files /dev/null and b/COMUN/grafice/sus2.bmp differ diff --git a/COMUN/grafice/terminat2X.bmp b/COMUN/grafice/terminat2X.bmp new file mode 100644 index 0000000..c313a44 Binary files /dev/null and b/COMUN/grafice/terminat2X.bmp differ diff --git a/COMUN/grafice/terminat_jos.bmp b/COMUN/grafice/terminat_jos.bmp new file mode 100644 index 0000000..400e728 Binary files /dev/null and b/COMUN/grafice/terminat_jos.bmp differ diff --git a/COMUN/grafice/terminat_jos_verde.bmp b/COMUN/grafice/terminat_jos_verde.bmp new file mode 100644 index 0000000..400e728 Binary files /dev/null and b/COMUN/grafice/terminat_jos_verde.bmp differ diff --git a/COMUN/grafice/terminat_sus.bmp b/COMUN/grafice/terminat_sus.bmp new file mode 100644 index 0000000..dacc04a Binary files /dev/null and b/COMUN/grafice/terminat_sus.bmp differ diff --git a/COMUN/grafice/terminat_sus_verde.bmp b/COMUN/grafice/terminat_sus_verde.bmp new file mode 100644 index 0000000..dacc04a Binary files /dev/null and b/COMUN/grafice/terminat_sus_verde.bmp differ diff --git a/COMUN/grafice/unlock.bmp b/COMUN/grafice/unlock.bmp new file mode 100644 index 0000000..da8662d Binary files /dev/null and b/COMUN/grafice/unlock.bmp differ diff --git a/COMUN/grafice/unmaskblue.bmp b/COMUN/grafice/unmaskblue.bmp new file mode 100644 index 0000000..5143426 Binary files /dev/null and b/COMUN/grafice/unmaskblue.bmp differ diff --git a/COMUN/grafice/unmaskred.bmp b/COMUN/grafice/unmaskred.bmp new file mode 100644 index 0000000..17d0d5e Binary files /dev/null and b/COMUN/grafice/unmaskred.bmp differ diff --git a/COMUN/grafice/up.bmp b/COMUN/grafice/up.bmp new file mode 100644 index 0000000..ecab466 Binary files /dev/null and b/COMUN/grafice/up.bmp differ diff --git a/COMUN/grafice/upArrow.bmp b/COMUN/grafice/upArrow.bmp new file mode 100644 index 0000000..08da460 Binary files /dev/null and b/COMUN/grafice/upArrow.bmp differ diff --git a/COMUN/grafice/urmator1.bmp b/COMUN/grafice/urmator1.bmp new file mode 100644 index 0000000..3afae03 Binary files /dev/null and b/COMUN/grafice/urmator1.bmp differ diff --git a/COMUN/grafice/urmator1_tot.bmp b/COMUN/grafice/urmator1_tot.bmp new file mode 100644 index 0000000..1dfc995 Binary files /dev/null and b/COMUN/grafice/urmator1_tot.bmp differ diff --git a/COMUN/grafice/urmator2.bmp b/COMUN/grafice/urmator2.bmp new file mode 100644 index 0000000..9668927 Binary files /dev/null and b/COMUN/grafice/urmator2.bmp differ diff --git a/COMUN/grafice/urmator2_tot.bmp b/COMUN/grafice/urmator2_tot.bmp new file mode 100644 index 0000000..4f91c4d Binary files /dev/null and b/COMUN/grafice/urmator2_tot.bmp differ diff --git a/COMUN/grafice/validare11.bmp b/COMUN/grafice/validare11.bmp new file mode 100644 index 0000000..c9a60ca Binary files /dev/null and b/COMUN/grafice/validare11.bmp differ diff --git a/COMUN/grafice/validare12.bmp b/COMUN/grafice/validare12.bmp new file mode 100644 index 0000000..d6c71f2 Binary files /dev/null and b/COMUN/grafice/validare12.bmp differ diff --git a/COMUN/grafice/validare21.bmp b/COMUN/grafice/validare21.bmp new file mode 100644 index 0000000..47f3691 Binary files /dev/null and b/COMUN/grafice/validare21.bmp differ diff --git a/COMUN/grafice/validare22.bmp b/COMUN/grafice/validare22.bmp new file mode 100644 index 0000000..1ad2f3c Binary files /dev/null and b/COMUN/grafice/validare22.bmp differ diff --git a/COMUN/grafice/validare31.bmp b/COMUN/grafice/validare31.bmp new file mode 100644 index 0000000..8fc2f05 Binary files /dev/null and b/COMUN/grafice/validare31.bmp differ diff --git a/COMUN/grafice/validare32.bmp b/COMUN/grafice/validare32.bmp new file mode 100644 index 0000000..1f4b5b8 Binary files /dev/null and b/COMUN/grafice/validare32.bmp differ diff --git a/COMUN/grafice/validare41.bmp b/COMUN/grafice/validare41.bmp new file mode 100644 index 0000000..a09dd3e Binary files /dev/null and b/COMUN/grafice/validare41.bmp differ diff --git a/COMUN/grafice/validare42.bmp b/COMUN/grafice/validare42.bmp new file mode 100644 index 0000000..140799c Binary files /dev/null and b/COMUN/grafice/validare42.bmp differ diff --git a/COMUN/grafice/verificare1.bmp b/COMUN/grafice/verificare1.bmp new file mode 100644 index 0000000..20445e0 Binary files /dev/null and b/COMUN/grafice/verificare1.bmp differ diff --git a/COMUN/grafice/verificare2.bmp b/COMUN/grafice/verificare2.bmp new file mode 100644 index 0000000..0a48e5d Binary files /dev/null and b/COMUN/grafice/verificare2.bmp differ diff --git a/COMUN/include/comun.h b/COMUN/include/comun.h new file mode 100644 index 0000000..0699e87 --- /dev/null +++ b/COMUN/include/comun.h @@ -0,0 +1,13 @@ +#IFNDEF COMUN_H +#DEFINE COMUN_H + + +#DEFINE LF CHR(10) +#DEFINE CR CHR(10) +#DEFINE CRLF CHR(13) + CHR(10) +#DEFINE CTAB CHR(9) + +#DEFINE CT_INSUCCES -1 +#DEFINE CT_SUCCES 1 + +#ENDIF \ No newline at end of file diff --git a/COMUN/include/foxpro.h b/COMUN/include/foxpro.h new file mode 100644 index 0000000..d07394f --- /dev/null +++ b/COMUN/include/foxpro.h @@ -0,0 +1,823 @@ +************************************************************************************ +************************************************************************************ +** ** +** ================ =========== ** +** == === == == ** +** == = == == ** +** == == == ** +** == === ===== ===== == == === ==== === ** +** ===== == == == == ========= == == == == == ** +** == == == == == == === == == ** +** == == == === == == == == ** +** == == == == == == == == == ** +** == == == == == == == == == ** +** ======= === ===== ==== ====== ====== === ** +** ** +************************************************************************************ +************************************************************************************ + +************************************************************************************ +************************************************************************************ +** ** +** Visual FoxPro Named Constant File ** +** This file contains named constants for most Visual FoxPro functions ** +** ** +************************************************************************************ +************************************************************************************ + +*-- General +*--ZOrder Method +#DEFINE ZORDER_BRINGTOFRONT 0 +#DEFINE ZORDER_SENDTOBACK 1 + +*-- TYPE() tags +#DEFINE T_CHARACTER "C" +#DEFINE T_NUMERIC "N" +#DEFINE T_DOUBLE "B" +#DEFINE T_DATE "D" +#DEFINE T_DATETIME "T" +#DEFINE T_MEMO "M" +#DEFINE T_GENERAL "G" +#DEFINE T_OBJECT "O" +#DEFINE T_SCREEN "S" +#DEFINE T_LOGICAL "L" +#DEFINE T_CURRENCY "Y" +#DEFINE T_UNDEFINED "U" +#DEFINE T_INTEGER "N" +#DEFINE T_VARCHAR "C" +#DEFINE T_VARBINARY "Q" +#DEFINE T_BLOB "W" + +*-- QueryUnload +#DEFINE FORM_CONTROLMENU 0 +#DEFINE FORM_CODE 1 +#DEFINE APP_WINDOWS 2 +#DEFINE APP_TASKMANAGER 3 +#DEFINE FORM_MDIFORM 4 + +*-- Columns in array returned by AVCXCLASSES() +#DEFINE AVCX_CLASS 1 && OBJNAME field +#DEFINE AVCX_BASECLASS 2 && BASECLASS field +#DEFINE AVCX_PARENTCLASS 3 && CLASS field +#DEFINE AVCX_PARENTCLASSLIB 4 && CLASSLOC field +#DEFINE AVCX_CLASSICON 5 && RESERVED4 field +#DEFINE AVCX_CONTAINERICON 6 && RESERVED5 field +#DEFINE AVCX_SCALEMODE 7 && RESERVED6 field +#DEFINE AVCX_CLASSDESCRIPTION 8 && RESERVED7 field +#DEFINE AVCX_INCLUDEFILE 9 && RESERVED8 field +#DEFINE AVCX_USERINFO 10 && USER field +#DEFINE AVCX_OLEPUBLIC 11 && RESERVED2 field + + +*-- Active Document +*-- CommandTargetQuery Command Options +#DEFINE CMDF_NOTSUPPORTED 0 && The command is not supported by this object +#DEFINE CMDF_SUPPORTED 1 && The command is supported by this object +#DEFINE CMDF_ENABLED 2 && The command is available and enabled +#DEFINE CMDF_LATCHED 4 && The command is an on-off toggle and is currently on +#DEFINE CMDF_NINCHED 8 && The command state is indeterminate + +*-- CommandTargetQuery CommandTextFlag values +#DEFINE CMDTEXTF_NONE 0 && No extra information is requested +#DEFINE CMDTEXTF_NAME 1 && Object should provide the localized name of the command +#DEFINE CMDTEXTF_STATUS 2 && Object should provide a localized status string for the command + +*-- CommandTarget Command IDs +#DEFINE CMDID_OPEN 1 && File menu, Open command +#DEFINE CMDID_NEW 2 && File menu, New command +#DEFINE CMDID_SAVE 3 && File menu, Save command +#DEFINE CMDID_SAVEAS 4 && File menu, Save As command +#DEFINE CMDID_SAVECOPYAS 5 && File menu, Save Copy As command +#DEFINE CMDID_PRINT 6 && File menu, Print command +#DEFINE CMDID_PRINTPREVIEW 7 && File menu, Print Preview command +#DEFINE CMDID_PAGESETUP 8 && File menu, Page Setup command +#DEFINE CMDID_SPELL 9 && Tools menu, Spelling command +#DEFINE CMDID_PROPERTIES 10 && File menu, Properties command +#DEFINE CMDID_CUT 11 && Edit menu, Cut command (from Host) +#DEFINE CMDID_COPY 12 && Edit menu, Copy command (from Host) +#DEFINE CMDID_PASTE 13 && Edit menu, Paste command (from Host) +#DEFINE CMDID_PASTESPECIAL 14 && Edit menu, Paste Special command (from Host) +#DEFINE CMDID_UNDO 15 && Edit menu, Undo command (from Host) +#DEFINE CMDID_REDO 16 && Edit menu, Redo command (from Host) +#DEFINE CMDID_SELECTALL 17 && Edit menu, Select All command (from Host) +#DEFINE CMDID_CLEARSELECTION 18 && Edit menu, Clear command (from Host) +#DEFINE CMDID_ZOOM 19 && View menu, Zoom command +#DEFINE CMDID_GETZOOMRANGE 20 && Retrieves zoom range applicable to View Zoom +#DEFINE CMDID_UPDATECOMMANDS 21 && Informs the Active Document of state changes +#DEFINE CMDID_REFRESH 22 && Asks the Active Document to refresh its display +#DEFINE CMDID_STOP 23 && Asks the Active Document to stop all current processing +#DEFINE CMDID_HIDETOOLBARS 24 && Asks the Active Document to hide its toolbars +#DEFINE CMDID_SETPROGRESSMAX 25 && Sets the maximum value of a progress indicator +#DEFINE CMDID_SETPROGRESSPOS 26 && Sets the current value of a progress indicator +#DEFINE CMDID_SETPROGRESSTEXT 27 && Sets the text contained in a progress indicator +#DEFINE CMDID_SETTITLE 28 && Sets the title bar text +#DEFINE CMDID_SETDOWNLOADSTATE 29 && Sent by host when its download state changes +#DEFINE CMDID_STOPDOWNLOAD 30 && Stops the download when executed +#DEFINE CMDID_ONTOOLBARACTIVATED 31 && One of the container's toolbars has received the focus +#DEFINE CMDID_ENABLE_INTERACTION 36 && Asks the Active Document to either pause or resume multimedia +#DEFINE CMDID_ONUNLOAD 37 && Sent by the Active Document host before navigation to another + && site is initiated or the host is closed + +*-- CommantTargetExec nExecOption parameter +#DEFINE CMDEXECOPT_DODEFAULT 0 && Use the default behavior +#DEFINE CMDEXECOPT_PROMPTUSER 1 && Execute the command after obtaining user input +#DEFINE CMDEXECOPT_DONTPROMPTUSER 2 && Execute the command without prompting the user +#DEFINE CMDEXECOPT_SHOWHELP 3 && Show help for the corresponding command + +*-- CommandTargetExec Return Values +#DEFINE CMD_OK 0 && Command handled okay by the Active Document +#DEFINE CMD_NOTSUPPORTED 1 && Command is not supported by the Active Document +#DEFINE CMD_DISABLED 2 && Command is disabled for the Active Document +#DEFINE CMD_NOHELP 3 && No help is available for the command from the Active Document +#DEFINE CMD_CANCELED 4 && The user canceled the execution of the command + + +*-- Project Hooks +*-- Build Actions +#DEFINE BUILDACTION_REBUILD 1 && Rebuild Project +#DEFINE BUILDACTION_BUILDAPP 2 && Build APP +#DEFINE BUILDACTION_BUILDEXE 3 && Build EXE +#DEFINE BUILDACTION_BUILDDLL 4 && Build DLL +#DEFINE BUILDACTION_BUILDMTDLL 5 && Build MTDLL + +*-- File Object SCCStatus Property +#DEFINE SCCFILE_NOTCONTROLLED 0 && File is not source controlled +#DEFINE SCCFILE_NOTCHECKEDOUT 1 && File is controlled but not checked out to anyone +#DEFINE SCCFILE_CHECKEDOUTCU 2 && File is checked out to the current user only +#DEFINE SCCFILE_CHECKEDOUTOU 3 && File is checked out to someone other than the current user +#DEFINE SCCFILE_MERGECONFLICT 4 && File has a merge conflict +#DEFINE SCCFILE_MERGE 5 && File has been merged without conflict +#DEFINE SCCFILE_CHECKEDOUTMU 6 && File is checked out to multiple users + +*-- File Object Type Property +#DEFINE FILETYPE_DATABASE "d" && Database (.DBC) +#DEFINE FILETYPE_FREETABLE "D" && Free table (.DBF) +#DEFINE FILETYPE_QUERY "Q" && Query (.QPR) +#DEFINE FILETYPE_FORM "K" && Form (.SCX) +#DEFINE FILETYPE_REPORT "R" && Report (.FRX) +#DEFINE FILETYPE_LABEL "B" && Label (.LBX) +#DEFINE FILETYPE_CLASSLIB "V" && Class Library (.VCX) +#DEFINE FILETYPE_PROGRAM "P" && Program (.PRG) +#DEFINE FILETYPE_APILIB "L" && API Library (.FLL) +#DEFINE FILETYPE_APPLICATION "Z" && Application (.APP) +#DEFINE FILETYPE_MENU "M" && Menu (.MNX) +#DEFINE FILETYPE_TEXT "T" && Text (.TXT, .H., etc.) +#DEFINE FILETYPE_OTHER "x" && Other file types not enumerated above + +*-- Server Object Instancing Property +#DEFINE SERVERINSTANCE_NOTCREATABLE 0 && Instances creatable only inside Visual FoxPro +#DEFINE SERVERINSTANCE_SINGLEUSE 1 && Single use server +#DEFINE SERVERINSTANCE_MULTIUSE 2 && Multi-use server + + +*-- Drag and Drop +*-- OLE Drag and Drop: Drop Effects +#DEFINE DROPEFFECT_NONE 0 +#DEFINE DROPEFFECT_COPY 1 +#DEFINE DROPEFFECT_MOVE 2 +#DEFINE DROPEFFECT_LINK 4 + +*-- OLE Drag and Drop: Drop Modes +#DEFINE DROP_DISABLED 0 +#DEFINE DROP_ENABLED 1 +#DEFINE DROP_PASSTOCONTAINER 2 + +*-- OLE Drag and Drop: OLEDropHasData settings +#DEFINE DROPHASDATA_VFPDETERMINE -1 +#DEFINE DROPHASDATA_NOTUSEFUL 0 +#DEFINE DROPHASDATA_USEFUL 1 + +*-- Clipboard formats (Global) +#DEFINE CF_TEXT 1 && Text +#DEFINE CF_BITMAP 2 && Bitmap +#DEFINE CF_METAFILEPICT 3 && Handle of a metafile picture format +#DEFINE CF_SYLK 4 && Microsoft Symbolic Link format +#DEFINE CF_DIF 5 && Software Arts' Data Interchange Format +#DEFINE CF_TIFF 6 && Tagged-image file format +#DEFINE CF_OEMTEXT 7 && Text format containing characters in the OEM character set +#DEFINE CF_DIB 8 && Device-independent bitmap +#DEFINE CF_PALETTE 9 && Handle of a color palette +#DEFINE CF_PENDATA 10 && Data for the pen extensions to the Microsoft Windows for Pen Computing +#DEFINE CF_RIFF 11 && Represents complex audio data +#DEFINE CF_WAVE 12 && Audio data in one of the standard wave formats +#DEFINE CF_UNICODETEXT 13 && Windows NT only: Unicode text format +#DEFINE CF_ENHMETAFILE 14 && A handle of an enhanced metafile +#DEFINE CF_FILES 15 && A list of files +#DEFINE CF_HDROP 15 && A list of files +#DEFINE CF_LOCALE 16 && A handle to the locale identifier +#DEFINE CF_MAX 17 + +*-- Other Miscellaneous Clipboard formats +#DEFINE CFSTR_HYPERLINK "Hyperlink" && A Hyperlink +#DEFINE CFSTR_BIFF "Biff" && Microsoft Excel version 2.x +#DEFINE CFSTR_BIFF3 "Biff3" && Microsoft Excel version 3.0 +#DEFINE CFSTR_BIFF4 "Biff4" && Microsoft Excel version 4.0 +#DEFINE CFSTR_BIFF5 "Biff5" && Microsoft Excel version 5.0 +#DEFINE CFSTR_BIFF7 "Biff7" && Microsoft Excel version 7.0 +#DEFINE CFSTR_BIFF8 "Biff8" && Microsoft Excel version 8.0 +#DEFINE CFSTR_XLTABLE "XlTable" && Microsoft Excel fast table format. +#DEFINE CFSTR_CSV "CSV" && Comma separated values +#DEFINE CFSTR_WK1 "Wk1" && Lotus 1-2-3 Release 2.01 and Release 2.2 format +#DEFINE CFSTR_URL "UniformResourceLocator" && URL + +#DEFINE CFSTR_RTF "Rich Text Format" +#DEFINE CFSTR_RTFNOOBJS "Rich Text Format Without Objects" +#DEFINE CFSTR_RETEXTOBJ "RichEdit Text and Objects" + +*-- Clipboard formats (Private to VFP) +#DEFINE CFSTR_OLEVARIANTARRAY "OLE Variant Array" && VFP array +#DEFINE CFSTR_OLEVARIANT "OLE Variant" && Data in variant form +#DEFINE CFSTR_VFPSOURCEOBJECT "VFP Source Object" && A reference to the VFP source object + +*-- DragMode +#DEFINE DRAG_MANUAL 0 && 0 - Manual +#DEFINE DRAG_AUTOMATIC 1 && 1 - Automatic + +*-- DragOver +#DEFINE DRAG_ENTER 0 +#DEFINE DRAG_LEAVE 1 +#DEFINE DRAG_OVER 2 + +*-- Drag (controls) +#DEFINE DRAG_CANCEL 0 +#DEFINE DRAG_BEGIN 1 +#DEFINE DRAG_END 2 + + +*-- Properties +*-- Colors +#DEFINE COLOR_WHITE 16777215 +#DEFINE COLOR_BLACK 0 +#DEFINE COLOR_GRAY 12632256 +#DEFINE COLOR_DARK_GRAY 8421504 +#DEFINE COLOR_RED 255 +#DEFINE COLOR_DARK_BLUE 8388608 +#DEFINE COLOR_CYAN 16776960 +#DEFINE COLOR_DARK_CYAN 8421376 +#DEFINE COLOR_GREEN 65280 +#DEFINE COLOR_DARK_GREEN 32768 +#DEFINE COLOR_YELLOW 65535 +#DEFINE COLOR_DARK_YELLOW 32896 +#DEFINE COLOR_BLUE 16711680 +#DEFINE COLOR_DARK_RED 128 +#DEFINE COLOR_MAGENTA 16711935 +#DEFINE COLOR_DARK_MAGENTA 8388736 + +*-- MousePointer +#DEFINE MOUSE_DEFAULT 0 && 0 - Default +#DEFINE MOUSE_ARROW 1 && 1 - Arrow +#DEFINE MOUSE_CROSSHAIR 2 && 2 - Cross +#DEFINE MOUSE_IBEAM 3 && 3 - I-Beam +#DEFINE MOUSE_ICON_POINTER 4 && 4 - Icon +#DEFINE MOUSE_SIZE_POINTER 5 && 5 - Size +#DEFINE MOUSE_SIZE_NE_SW 6 && 6 - Size NE SW +#DEFINE MOUSE_SIZE_N_S 7 && 7 - Size N S +#DEFINE MOUSE_SIZE_NW_SE 8 && 8 - Size NW SE +#DEFINE MOUSE_SIZE_W_E 9 && 9 - Size W E +#DEFINE MOUSE_UP_ARROW 10 && 10 - Up Arrow +#DEFINE MOUSE_HOURGLASS 11 && 11 - Hourglass +#DEFINE MOUSE_NO_DROP 12 && 12 - No drop +#DEFINE MOUSE_HIDE_POINTER 13 && 13 - Hide Pointer +#DEFINE MOUSE_ARROW2 14 && 14 - Arrow +#DEFINE MOUSE_CUSTOM 99 && 99 - Custom + +*-- ScrollBars +#DEFINE SCROLLBARS_NONE 0 && 0 - None (Default) +#DEFINE SCROLLBARS_HORIZONTAL 1 && 1 - Horizontal +#DEFINE SCROLLBARS_VERTICAL 2 && 2 - Vertical +#DEFINE SCROLLBARS_BOTH 3 && 3 - Both + +*-- DrawMode +#DEFINE DRAWMODE_BLACKNESS 1 && 1 - Blackness +#DEFINE DRAWMODE_NOT_MERGE_PEN 2 && 2 - Not Merge Pen +#DEFINE DRAWMODE_MASK_NOT_PEN 3 && 3 - Mask Not Pen +#DEFINE DRAWMODE_NOT_COPY_PEN 4 && 4 - Not Copy Pen +#DEFINE DRAWMODE_MASK_PEN_NOT 5 && 5 - Mask Pen Not +#DEFINE DRAWMODE_INVERT 6 && 6 - Invert +#DEFINE DRAWMODE_XOR_PEN 7 && 7 - Xor Pen +#DEFINE DRAWMODE_NOT_MASK_PEN 8 && 8 - Not Mask Pen +#DEFINE DRAWMODE_MASK_PEN 9 && 9 - Mask Pen +#DEFINE DRAWMODE_NOT_XOR_PEN 10 && 10 - Not Xor Pen +#DEFINE DRAWMODE_NOP 11 && 11 - Nop +#DEFINE DRAWMODE_MERGE_NOT_PEN 12 && 12 - Merge Not Pen +#DEFINE DRAWMODE_COPY_PEN 13 && 13 - Copy Pen +#DEFINE DRAWMODE_MERGE_PEN_NOT 14 && 14 - Merge Pen Not +#DEFINE DRAWMODE_MERGE_PEN 15 && 15 - Merge Pen +#DEFINE DRAWMODE_WHITENESS 16 && 16 - Whiteness + +*-- DrawStyle +#DEFINE DRAWSTYLE_SOLID 0 && 0 - Solid +#DEFINE DRAWSTYLE_DASH 1 && 1 - Dash +#DEFINE DRAWSTYLE_DOT 2 && 2 - Dot +#DEFINE DRAWSTYLE_DASH_DOT 3 && 3 - Dash-Dot +#DEFINE DRAWSTYLE_DASH_DOT_DOT 4 && 4 - Dash-Dot-Dot +#DEFINE DRAWSTYLE_INVISIBLE 5 && 5 - Invisible +#DEFINE DRAWSTYLE_INSIDE_SOLID 6 && 6 - Inside Solid + +*-- FillStyle +#DEFINE FILLSTYLE_SOLID 0 && 0 - Solid +#DEFINE FILLSTYLE_TRANSPARENT 1 && 1 - Transparent +#DEFINE FILLSTYLE_HORIZONTAL_LINE 2 && 2 - Horizontal Line +#DEFINE FILLSTYLE_VERTICAL_LINE 3 && 3 - Vertical Line +#DEFINE FILLSTYLE_UPWARD_DIAGONAL 4 && 4 - Upward Diagonal +#DEFINE FILLSTYLE_DOWNWARD_DIAGONAL 5 && 5 - Downward Diagonal +#DEFINE FILLSTYLE_CROSS 6 && 6 - Cross +#DEFINE FILLSTYLE_DIAGONAL_CROSS 7 && 7 - Diagonal Cross + +*-- ScaleMode +#DEFINE SCALEMODE_PIXELS 3 && 3 - Pixel +#DEFINE SCALEMODE_FOXELS 0 && 0 - Foxels + +*-- WindowState +#DEFINE WINDOWSTATE_NORMAL 0 && 0 - Normal +#DEFINE WINDOWSTATE_MINIMIZED 1 && 1 - Minimized +#DEFINE WINDOWSTATE_MAXIMIZED 2 && 2 - Maximized + +*-- Window Borders +#DEFINE BORDER_NONE 0 +#DEFINE BORDER_SINGLE 1 +#DEFINE BORDER_DOUBLE 2 +#DEFINE BORDER_SYSTEM 3 + +*-- Toolbar and Form Docking Positions +#DEFINE TOOL_NOTDOCKED -1 +#DEFINE TOOL_TOP 0 +#DEFINE TOOL_LEFT 1 +#DEFINE TOOL_RIGHT 2 +#DEFINE TOOL_BOTTOM 3 +#DEFINE TOOL_TAB 4 +#DEFINE TOOL_LINK 5 + +*-- Button parameter masks +#DEFINE BUTTON_LEFT 1 +#DEFINE BUTTON_RIGHT 2 +#DEFINE BUTTON_MIDDLE 4 + +*-- Function Parameters +*-- MessageBox parameters +#DEFINE MB_OK 0 && OK button only +#DEFINE MB_OKCANCEL 1 && OK and Cancel buttons +#DEFINE MB_ABORTRETRYIGNORE 2 && Abort, Retry, and Ignore buttons +#DEFINE MB_YESNOCANCEL 3 && Yes, No, and Cancel buttons +#DEFINE MB_YESNO 4 && Yes and No buttons +#DEFINE MB_RETRYCANCEL 5 && Retry and Cancel buttons + +#DEFINE MB_ICONSTOP 16 && Critical message +#DEFINE MB_ICONQUESTION 32 && Warning query +#DEFINE MB_ICONEXCLAMATION 48 && Warning message +#DEFINE MB_ICONINFORMATION 64 && Information message + +#DEFINE MB_APPLMODAL 0 && Application modal message box +#DEFINE MB_DEFBUTTON1 0 && First button is default +#DEFINE MB_DEFBUTTON2 256 && Second button is default +#DEFINE MB_DEFBUTTON3 512 && Third button is default +#DEFINE MB_SYSTEMMODAL 4096 && System Modal + +*-- MsgBox return values +#DEFINE IDOK 1 && OK button pressed +#DEFINE IDCANCEL 2 && Cancel button pressed +#DEFINE IDABORT 3 && Abort button pressed +#DEFINE IDRETRY 4 && Retry button pressed +#DEFINE IDIGNORE 5 && Ignore button pressed +#DEFINE IDYES 6 && Yes button pressed +#DEFINE IDNO 7 && No button pressed +#DEFINE IDTIMEOUT -1 && Timeout occurs + + +*-- Low Level File Constants +#DEFINE F_READONLY 0 +#DEFINE F_WRITEONLY 1 +#DEFINE F_READWRITE 2 +#DEFINE F_READONLY_UNBUFF 10 +#DEFINE F_WRITEONLY_UNBUFF 11 +#DEFINE F_READWRITE_UNBUFF 12 + +*-- PRTINFO() Constants +*-- PRTINFO() Valid types to pass +#DEFINE PRT_ORIENTATION 1 +#DEFINE PRT_PAPERSIZE 2 +#DEFINE PRT_PAPERLENGTH 3 +#DEFINE PRT_PAPERWIDTH 4 +#DEFINE PRT_SCALE 5 +#DEFINE PRT_COPIES 6 +#DEFINE PRT_DEFASOURCE 7 +#DEFINE PRT_PRINTQUAL 8 +#DEFINE PRT_COLOR 9 +#DEFINE PRT_DUPLEX 10 +#DEFINE PRT_YRESOLUTION 11 +#DEFINE PRT_TTOPTION 12 +#DEFINE PRT_COLLATE 13 + +*--PRTINFO() Return types +*-- Paper sizes +#define PRTPAPER_LETTER 1 && Letter 8 1/2 x 11 in +#define PRTPAPER_LETTERSMALL 2 && Letter Small 8 1/2 x 11 in +#define PRTPAPER_TABLOID 3 && Tabloid 11 x 17 in +#define PRTPAPER_LEDGER 4 && Ledger 17 x 11 in +#define PRTPAPER_LEGAL 5 && Legal 8 1/2 x 14 in +#define PRTPAPER_STATEMENT 6 && Statement 5 1/2 x 8 1/2 in +#define PRTPAPER_EXECUTIVE 7 && Executive 7 1/4 x 10 1/2 in +#define PRTPAPER_A3 8 && A3 297 x 420 mm +#define PRTPAPER_A4 9 && A4 210 x 297 mm +#define PRTPAPER_A4SMALL 10 && A4 Small 210 x 297 mm +#define PRTPAPER_A5 11 && A5 148 x 210 mm +#define PRTPAPER_B4 12 && B4 250 x 354 +#define PRTPAPER_B5 13 && B5 182 x 257 mm +#define PRTPAPER_FOLIO 14 && Folio 8 1/2 x 13 in +#define PRTPAPER_QUARTO 15 && Quarto 215 x 275 mm +#define PRTPAPER_10X14 16 && 10x14 in +#define PRTPAPER_11X17 17 && 11x17 in +#define PRTPAPER_NOTE 18 && Note 8 1/2 x 11 in +#define PRTPAPER_ENV_9 19 && Envelope #9 3 7/8 x 8 7/8 +#define PRTPAPER_ENV_10 20 && Envelope #10 4 1/8 x 9 1/2 +#define PRTPAPER_ENV_11 21 && Envelope #11 4 1/2 x 10 3/8 +#define PRTPAPER_ENV_12 22 && Envelope #12 4 \276 x 11 +#define PRTPAPER_ENV_14 23 && Envelope #14 5 x 11 1/2 +#define PRTPAPER_CSHEET 24 && C size sheet +#define PRTPAPER_DSHEET 25 && D size sheet +#define PRTPAPER_ESHEET 26 && E size sheet +#define PRTPAPER_ENV_DL 27 && Envelope DL 110 x 220mm +#define PRTPAPER_ENV_C5 28 && Envelope C5 162 x 229 mm +#define PRTPAPER_ENV_C3 29 && Envelope C3 324 x 458 mm +#define PRTPAPER_ENV_C4 30 && Envelope C4 229 x 324 mm +#define PRTPAPER_ENV_C6 31 && Envelope C6 114 x 162 mm +#define PRTPAPER_ENV_C65 32 && Envelope C65 114 x 229 mm +#define PRTPAPER_ENV_B4 33 && Envelope B4 250 x 353 mm +#define PRTPAPER_ENV_B5 34 && Envelope B5 176 x 250 mm +#define PRTPAPER_ENV_B6 35 && Envelope B6 176 x 125 mm +#define PRTPAPER_ENV_ITALY 36 && Envelope 110 x 230 mm +#define PRTPAPER_ENV_MONARCH 37 && Envelope Monarch 3.875 x 7.5 in +#define PRTPAPER_ENV_PERSONAL 38 && 6 3/4 Envelope 3 5/8 x 6 1/2 in +#define PRTPAPER_FANFOLD_US 39 && US Std Fanfold 14 7/8 x 11 in +#define PRTPAPER_FANFOLD_STD_GERMAN 40 && German Std Fanfold 8 1/2 x 12 in +#define PRTPAPER_FANFOLD_LGL_GERMAN 41 && German Legal Fanfold 8 1/2 x 13 in + +*-- Paper bins +#define PRTBIN_UPPER 1 +#define PRTBIN_ONLYONE 1 +#define PRTBIN_LOWER 2 +#define PRTBIN_MIDDLE 3 +#define PRTBIN_MANUAL 4 +#define PRTBIN_ENVELOPE 5 +#define PRTBIN_ENVMANUAL 6 +#define PRTBIN_AUTO 7 +#define PRTBIN_TRACTOR 8 +#define PRTBIN_SMALLFMT 9 +#define PRTBIN_LARGEFMT 10 +#define PRTBIN_LARGECAPACITY 11 +#define PRTBIN_CASSETTE 14 +#define PRTBIN_AUTOSELECT 15 + +*-- Print qualities +#define PRTRES_DRAFT -1 +#define PRTRES_LOW -2 +#define PRTRES_MEDIUM -3 +#define PRTRES_HIGH -4 + +*-- Color printer +#define PRTCOLOR_MONOCHROME 1 +#define PRTCOLOR_COLOR 2 + +*-- Duplexing +#define PRTDUP_SIMPLEX 1 +#define PRTDUP_VERTICAL 2 +#define PRTDUP_HORIZONTAL 3 + +*-- True Type fonts +#define PRTTT_BITMAP 1 && Print True Type fonts as graphics +#define PRTTT_DOWNLOAD 2 && Download True Type fonts as soft fonts +#define PRTTT_SUBDEV 3 && Substitute device fonts for True Type + +*-- FontMetric() +#DEFINE TM_HEIGHT 1 +#DEFINE TM_ASCENT 2 +#DEFINE TM_DESCENT 3 +#DEFINE TM_INTERNALLEADING 4 +#DEFINE TM_EXTERNALLEADING 5 +#DEFINE TM_AVECHARWIDTH 6 +#DEFINE TM_MAXCHARWIDTH 7 +#DEFINE TM_WEIGHT 8 +#DEFINE TM_ITALIC 9 +#DEFINE TM_UNDERLINED 10 +#DEFINE TM_STRUCKOUT 11 +#DEFINE TM_FIRSTCHAR 12 +#DEFINE TM_LASTCHAR 13 +#DEFINE TM_DEFAULTCHAR 14 +#DEFINE TM_BREAKCHAR 15 +#DEFINE TM_PITCHANDFAMILY 16 +#DEFINE TM_CHARSET 17 +#DEFINE TM_OVERHANG 18 +#DEFINE TM_ASPECTX 19 +#DEFINE TM_ASPECTY 20 + +*-- Sysmetric() parameter values +#DEFINE SYSMETRIC_SCREENWIDTH 1 && Screen width +#DEFINE SYSMETRIC_SCREENHEIGHT 2 && Screen width +#DEFINE SYSMETRIC_SIZINGBORDERWIDTH 3 && Width of the sizing border around a resizable window +#DEFINE SYSMETRIC_SIZINGBORDERHEIGHT 4 && Height of the sizing border around a resizable window +#DEFINE SYSMETRIC_VSCROLLBARWIDTH 5 && Width of a vertical scroll bar +#DEFINE SYSMETRIC_VSCROLLBARHEIGHT 6 && Height of the arrow bitmap on a vertical scroll bar +#DEFINE SYSMETRIC_HSCROLLBARWIDTH 7 && Width of the arrow bitmap on a horizontal scroll bar +#DEFINE SYSMETRIC_HSCROLLBARHEIGHT 8 && Height of a horizontal scroll bar +#DEFINE SYSMETRIC_WINDOWTITLEHEIGHT 9 && Height of window title (caption) area +#DEFINE SYSMETRIC_WINDOWBORDERWIDTH 10 && Width of a window border +#DEFINE SYSMETRIC_WINDOWBORDERHEIGHT 11 && Height of a window border +#DEFINE SYSMETRIC_WINDOWFRAMEWIDTH 12 && Width of the frame around the perimeter of a window + && that has a caption but is not sizable +#DEFINE SYSMETRIC_WINDOWFRAMEHEIGHT 13 && Height of the frame around the perimeter of a window + && that has a caption but is not sizable +#DEFINE SYSMETRIC_THUMBBOXWIDTH 14 && Width of the thumb box in a horizontal scroll bar +#DEFINE SYSMETRIC_THUMBBOXHEIGHT 15 && Height of the thumb box in a vertical scroll bar +#DEFINE SYSMETRIC_ICONWIDTH 16 && Width of an icon +#DEFINE SYSMETRIC_ICONHEIGHT 17 && Height of an icon +#DEFINE SYSMETRIC_CURSORWIDTH 18 && Width of a cursor +#DEFINE SYSMETRIC_CURSORHEIGHT 19 && Height of a cursor +#DEFINE SYSMETRIC_MENUBAR 20 && Height of a single-line menu bar +#DEFINE SYSMETRIC_CLIENTWIDTH 21 && Width of the client area for a full-screen window +#DEFINE SYSMETRIC_CLIENTHEIGHT 22 && Height of the client area for a full-screen window +#DEFINE SYSMETRIC_KANJIWINHEIGHT 23 && Height of the Kanji window at the bottom of the screen in DBCS versions +#DEFINE SYSMETRIC_MINDRAGWIDTH 24 && Minimum tracking width of a window. (The user cannot drag the window frame to a size smaller than this) +#DEFINE SYSMETRIC_MINDRAGHEIGHT 25 && Minimum tracking height of a window. (The user cannot drag the window frame to a size smaller than this) +#DEFINE SYSMETRIC_MINWINDOWWIDTH 26 && Minimum width of a window +#DEFINE SYSMETRIC_MINWINDOWHEIGHT 27 && Minimum height of a window +#DEFINE SYSMETRIC_TITLEBARBUTTONWIDTH 28 && Width of a title bar button +#DEFINE SYSMETRIC_TITLEBARBUTTONHEIGHT 29 && Height of a title bar button +#DEFINE SYSMETRIC_MOUSEPRESENT 30 && Is mouse present? 1 => mouse is installed, 0 => no mouse is installed +#DEFINE SYSMETRIC_DEBUGVERSION 31 && Is this a debug version? 1 => debug version, 0 => retail version +#DEFINE SYSMETRIC_MOUSEBUTTONSWAP 32 && Are mouse buttons swapped? 1 => Yes, 0 => No +#DEFINE SYSMETRIC_HALFHEIGHTBUTTONWIDTH 33 && Width of a button in a half-height title bar +#DEFINE SYSMETRIC_HALFHEIGHTBUTTONHEIGHT 34 && Height of a button in a half-height title bar + +*-- Windows GetSysMetric() defines +#DEFINE SM_CXSCREEN 0 +#DEFINE SM_CYSCREEN 1 +#DEFINE SM_CXVSCROLL 2 +#DEFINE SM_CYHSCROLL 3 +#DEFINE SM_CYCAPTION 4 +#DEFINE SM_CXBORDER 5 +#DEFINE SM_CYBORDER 6 +#DEFINE SM_CXDLGFRAME 7 +#DEFINE SM_CYDLGFRAME 8 +#DEFINE SM_CYVTHUMB 9 +#DEFINE SM_CXHTHUMB 10 +#DEFINE SM_CXICON 11 +#DEFINE SM_CYICON 12 +#DEFINE SM_CXCURSOR 13 +#DEFINE SM_CYCURSOR 14 +#DEFINE SM_CYMENU 15 +#DEFINE SM_CXFULLSCREEN 16 +#DEFINE SM_CYFULLSCREEN 17 +#DEFINE SM_CYKANJIWINDOW 18 +#DEFINE SM_MOUSEPRESENT 19 +#DEFINE SM_CYVSCROLL 20 +#DEFINE SM_CXHSCROLL 21 +#DEFINE SM_DEBUG 22 +#DEFINE SM_SWAPBUTTON 23 +#DEFINE SM_RESERVED1 24 +#DEFINE SM_RESERVED2 25 +#DEFINE SM_RESERVED3 26 +#DEFINE SM_RESERVED4 27 +#DEFINE SM_CXMIN 28 +#DEFINE SM_CYMIN 29 +#DEFINE SM_CXSIZE 30 +#DEFINE SM_CYSIZE 31 +#DEFINE SM_CXFRAME 32 +#DEFINE SM_CYFRAME 33 +#DEFINE SM_CXMINTRACK 34 +#DEFINE SM_CYMINTRACK 35 +#DEFINE SM_CMETRICS 36 + +*-- Cursor buffering modes +#DEFINE DB_BUFOFF 1 +#DEFINE DB_BUFLOCKRECORD 2 +#DEFINE DB_BUFOPTRECORD 3 +#DEFINE DB_BUFLOCKTABLE 4 +#DEFINE DB_BUFOPTTABLE 5 + +*-- Update types for views/cursors +#DEFINE DB_UPDATE 1 +#DEFINE DB_DELETEINSERT 2 + +*-- WHERE clause types for views/cursors +#DEFINE DB_KEY 1 +#DEFINE DB_KEYANDUPDATABLE 2 +#DEFINE DB_KEYANDMODIFIED 3 +#DEFINE DB_KEYANDTIMESTAMP 4 + +*-- Remote connection login prompt options +#DEFINE DB_PROMPTCOMPLETE 1 +#DEFINE DB_PROMPTALWAYS 2 +#DEFINE DB_PROMPTNEVER 3 + +*-- Remote transaction modes +#DEFINE DB_TRANSAUTO 1 +#DEFINE DB_TRANSMANUAL 2 + +*-- Source Types for CursorGetProp() +#DEFINE DB_SRCLOCALVIEW 1 +#DEFINE DB_SRCREMOTEVIEW 2 +#DEFINE DB_SRCTABLE 3 + +*-- Language IDs. +* +* A language ID is a 16 bit value which is the combination of a +* primary language ID and a secondary language ID. The bits are +* allocated as follows: +* +* +-----------------------+-------------------------+ +* | Sublanguage ID | Primary Language ID | +* +-----------------------+-------------------------+ +* 15 10 9 0 bit +* +* +* The following three combinations of primary language ID and +* sublanguage ID have special semantics: +* +* Primary Language ID Sublanguage ID Result +* ------------------- --------------- ------------------------ +* LANG_NEUTRAL SUBLANG_NEUTRAL Language neutral +* LANG_NEUTRAL SUBLANG_DEFAULT User default language +* LANG_NEUTRAL SUBLANG_SYS_DEFAULT System default language +* + +* +* Primary language IDs. +* + +#DEFINE LANG_NEUTRAL 0x00 + +#DEFINE LANG_AFRIKAANS 0x36 +#DEFINE LANG_ALBANIAN 0x1c +#DEFINE LANG_ARABIC 0x01 +#DEFINE LANG_BASQUE 0x2d +#DEFINE LANG_BELARUSIAN 0x23 +#DEFINE LANG_BULGARIAN 0x02 +#DEFINE LANG_CATALAN 0x03 +#DEFINE LANG_CHINESE 0x04 +#DEFINE LANG_CROATIAN 0x1a +#DEFINE LANG_CZECH 0x05 +#DEFINE LANG_DANISH 0x06 +#DEFINE LANG_DUTCH 0x13 +#DEFINE LANG_ENGLISH 0x09 +#DEFINE LANG_ESTONIAN 0x25 +#DEFINE LANG_FAEROESE 0x38 +#DEFINE LANG_FARSI 0x29 +#DEFINE LANG_FINNISH 0x0b +#DEFINE LANG_FRENCH 0x0c +#DEFINE LANG_GERMAN 0x07 +#DEFINE LANG_GREEK 0x08 +#DEFINE LANG_HEBREW 0x0d +#DEFINE LANG_HUNGARIAN 0x0e +#DEFINE LANG_ICELANDIC 0x0f +#DEFINE LANG_INDONESIAN 0x21 +#DEFINE LANG_ITALIAN 0x10 +#DEFINE LANG_JAPANESE 0x11 +#DEFINE LANG_KOREAN 0x12 +#DEFINE LANG_LATVIAN 0x26 +#DEFINE LANG_LITHUANIAN 0x27 +#DEFINE LANG_NORWEGIAN 0x14 +#DEFINE LANG_POLISH 0x15 +#DEFINE LANG_PORTUGUESE 0x16 +#DEFINE LANG_ROMANIAN 0x18 +#DEFINE LANG_RUSSIAN 0x19 +#DEFINE LANG_SERBIAN 0x1a +#DEFINE LANG_SLOVAK 0x1b +#DEFINE LANG_SLOVENIAN 0x24 +#DEFINE LANG_SPANISH 0x0a +#DEFINE LANG_SWEDISH 0x1d +#DEFINE LANG_THAI 0x1e +#DEFINE LANG_TURKISH 0x1f +#DEFINE LANG_UKRAINIAN 0x22 +#DEFINE LANG_VIETNAMESE 0x2a + +* +* Sublanguage IDs. +* +* The name immediately following SUBLANG_ dictates which primary +* language ID that sublanguage ID can be combined with to form a +* valid language ID. +* + +#DEFINE SUBLANG_NEUTRAL 0x0000 && language neutral +#DEFINE SUBLANG_DEFAULT 0x0400 && user default +#DEFINE SUBLANG_SYS_DEFAULT 0x0800 && system default + +#DEFINE SUBLANG_ARABIC_SAUDI_ARABIA 0x0400 && Arabic (Saudi Arabia) +#DEFINE SUBLANG_ARABIC_IRAQ 0x0800 && Arabic (Iraq) +#DEFINE SUBLANG_ARABIC_EGYPT 0x0C00 && Arabic (Egypt) +#DEFINE SUBLANG_ARABIC_LIBYA 0x1000 && Arabic (Libya) +#DEFINE SUBLANG_ARABIC_ALGERIA 0x1400 && Arabic (Algeria) +#DEFINE SUBLANG_ARABIC_MOROCCO 0x1800 && Arabic (Morocco) +#DEFINE SUBLANG_ARABIC_TUNISIA 0x1C00 && Arabic (Tunisia) +#DEFINE SUBLANG_ARABIC_OMAN 0x2000 && Arabic (Oman) +#DEFINE SUBLANG_ARABIC_YEMEN 0x2400 && Arabic (Yemen) +#DEFINE SUBLANG_ARABIC_SYRIA 0x2800 && Arabic (Syria) +#DEFINE SUBLANG_ARABIC_JORDAN 0x2C00 && Arabic (Jordan) +#DEFINE SUBLANG_ARABIC_LEBANON 0x3000 && Arabic (Lebanon) +#DEFINE SUBLANG_ARABIC_KUWAIT 0x3400 && Arabic (Kuwait) +#DEFINE SUBLANG_ARABIC_UAE 0x3800 && Arabic (U.A.E) +#DEFINE SUBLANG_ARABIC_BAHRAIN 0x3C00 && Arabic (Bahrain) +#DEFINE SUBLANG_ARABIC_QATAR 0x4000 && Arabic (Qatar) +#DEFINE SUBLANG_CHINESE_TRADITIONAL 0x0400 && Chinese (Taiwan) +#DEFINE SUBLANG_CHINESE_SIMPLIFIED 0x0800 && Chinese (PR China) +#DEFINE SUBLANG_CHINESE_HONGKONG 0x0C00 && Chinese (Hong Kong S.A.R) +#DEFINE SUBLANG_CHINESE_SINGAPORE 0x1000 && Chinese (Singapore) +#DEFINE SUBLANG_DUTCH 0x0400 && Dutch +#DEFINE SUBLANG_DUTCH_BELGIAN 0x0800 && Dutch (Belgian) +#DEFINE SUBLANG_ENGLISH_US 0x0400 && English (USA) +#DEFINE SUBLANG_ENGLISH_UK 0x0800 && English (UK) +#DEFINE SUBLANG_ENGLISH_AUS 0x0C00 && English (Australian) +#DEFINE SUBLANG_ENGLISH_CAN 0x1000 && English (Canadian) +#DEFINE SUBLANG_ENGLISH_NZ 0x1400 && English (New Zealand) +#DEFINE SUBLANG_ENGLISH_EIRE 0x1800 && English (Irish) +#DEFINE SUBLANG_ENGLISH_SOUTH_AFRICA 0x1C00 && English (South Africa) +#DEFINE SUBLANG_ENGLISH_JAMAICA 0x2000 && English (Jamaica) +#DEFINE SUBLANG_ENGLISH_CARIBBEAN 0x2400 && English (Caribbean) +#DEFINE SUBLANG_ENGLISH_BELIZE 0x2800 && English (Belize) +#DEFINE SUBLANG_ENGLISH_TRINIDAD 0x2C00 && English (Trinidad) +#DEFINE SUBLANG_FRENCH 0x0400 && French +#DEFINE SUBLANG_FRENCH_BELGIAN 0x0800 && French (Belgian) +#DEFINE SUBLANG_FRENCH_CANADIAN 0x0C00 && French (Canadian) +#DEFINE SUBLANG_FRENCH_SWISS 0x1000 && French (Swiss) +#DEFINE SUBLANG_FRENCH_LUXEMBOURG 0x1400 && French (Luxembourg) +#DEFINE SUBLANG_GERMAN 0x0400 && German +#DEFINE SUBLANG_GERMAN_SWISS 0x0800 && German (Swiss) +#DEFINE SUBLANG_GERMAN_AUSTRIAN 0x0C00 && German (Austrian) +#DEFINE SUBLANG_GERMAN_LUXEMBOURG 0x1000 && German (Luxembourg) +#DEFINE SUBLANG_GERMAN_LIECHTENSTEIN 0x1400 && German (Liechtenstein) +#DEFINE SUBLANG_ITALIAN 0x0400 && Italian +#DEFINE SUBLANG_ITALIAN_SWISS 0x0800 && Italian (Swiss) +#DEFINE SUBLANG_KOREAN 0x0400 && Korean (Extended Wansung) +#DEFINE SUBLANG_KOREAN_JOHAB 0x0800 && Korean (Johab) +#DEFINE SUBLANG_NORWEGIAN_BOKMAL 0x0400 && Norwegian (Bokmal) +#DEFINE SUBLANG_NORWEGIAN_NYNORSK 0x0800 && Norwegian (Nynorsk) +#DEFINE SUBLANG_PORTUGUESE 0x0800 && Portuguese +#DEFINE SUBLANG_PORTUGUESE_BRAZILIAN 0x0400 && Portuguese (Brazilian) +#DEFINE SUBLANG_SERBIAN_LATIN 0x0800 && Serbian (Latin) +#DEFINE SUBLANG_SERBIAN_CYRILLIC 0x0C00 && Serbian (Cyrillic) +#DEFINE SUBLANG_SPANISH 0x0400 && Spanish (Castilian) +#DEFINE SUBLANG_SPANISH_MEXICAN 0x0800 && Spanish (Mexican) +#DEFINE SUBLANG_SPANISH_MODERN 0x0C00 && Spanish (Modern) +#DEFINE SUBLANG_SPANISH_GUATEMALA 0x1000 && Spanish (Guatemala) +#DEFINE SUBLANG_SPANISH_COSTA_RICA 0x1400 && Spanish (Costa Rica) +#DEFINE SUBLANG_SPANISH_PANAMA 0x1800 && Spanish (Panama) +#DEFINE SUBLANG_SPANISH_DOMINICAN_REPUBLIC 0x1C00 && Spanish (Dominican Republic) +#DEFINE SUBLANG_SPANISH_VENEZUELA 0x2000 && Spanish (Venezuela) +#DEFINE SUBLANG_SPANISH_COLOMBIA 0x2400 && Spanish (Colombia) +#DEFINE SUBLANG_SPANISH_PERU 0x2800 && Spanish (Peru) +#DEFINE SUBLANG_SPANISH_ARGENTINA 0x2C00 && Spanish (Argentina) +#DEFINE SUBLANG_SPANISH_ECUADOR 0x3000 && Spanish (Ecuador) +#DEFINE SUBLANG_SPANISH_CHILE 0x3400 && Spanish (Chile) +#DEFINE SUBLANG_SPANISH_URUGUAY 0x3800 && Spanish (Uruguay) +#DEFINE SUBLANG_SPANISH_PARAGUAY 0x3C00 && Spanish (Paraguay) +#DEFINE SUBLANG_SPANISH_BOLIVIA 0x4000 && Spanish (Bolivia) +#DEFINE SUBLANG_SPANISH_EL_SALVADOR 0x4400 && Spanish (El Salvador) +#DEFINE SUBLANG_SPANISH_HONDURAS 0x4800 && Spanish (Honduras) +#DEFINE SUBLANG_SPANISH_NICARAGUA 0x4C00 && Spanish (Nicaragua) +#DEFINE SUBLANG_SPANISH_PUERTO_RICO 0x5000 && Spanish (Puerto Rico) +#DEFINE SUBLANG_SWEDISH 0x0400 && Swedish +#DEFINE SUBLANG_SWEDISH_FINLAND 0x0800 && Swedish (Finland) + +*-- DBC Events constants +#DEFINE DBCEVENTS_NULLTYPE 0 +#DEFINE DBCEVENTS_DATABASE 1 +#DEFINE DBCEVENTS_TABLE 2 +#DEFINE DBCEVENTS_COLUMN 3 +#DEFINE DBCEVENTS_INDEX 4 +#DEFINE DBCEVENTS_TAG 4 +#DEFINE DBCEVENTS_RELATION 5 +#DEFINE DBCEVENTS_CONNECTION 6 +#DEFINE DBCEVENTS_VIEW 7 +#DEFINE DBCEVENTS_LASTTYPE 8 +#DEFINE DBCEVENTS_STPROCS 9 + +*-- AFields() Constants +#define AFIELDS_NAME 1 +#define AFIELDS_TYPE 2 +#define AFIELDS_WIDTH 3 +#define AFIELDS_PRECISION 4 +#define AFIELDS_NULL 5 +#define AFIELDS_CODEPAGE_XLATE 6 +#define AFIELDS_VALID_EXPRESSION 7 +#define AFIELDS_VALID_TEXT 8 +#define AFIELDS_DEFAULT 9 +#define AFIELDS_TABLE_VALID_EXPRESSION 10 +#define AFIELDS_TABLE_VALID_TEXT 11 +#define AFIELDS_TABLE_LONG_NAME 12 +#define AFIELDS_INSERT_TRIGGER 13 +#define AFIELDS_UPDATE_TRIGGER 14 +#define AFIELDS_DELETE_TRIGGER 15 +#define AFIELDS_TABLE_COMMENT 16 +#define AFIELDS_AUTOINC_NEXT_VALUE 17 +#define AFIELDS_AUTOINC_STEP 18 + +* UCS Transformation Format byte order marks. +#DEFINE ENCODE_UTF16 CHR(0xFF) + CHR(0xFE) +#DEFINE ENCODE_UTF8 "" + +* COM_Attrib flag settings for Type Library attributes support +#DEFINE COMATTRIB_RESTRICTED 0x1 && The property/method should not be accessible from macro languages. +#DEFINE COMATTRIB_HIDDEN 0x40 && The property/method should not be displayed to the user, although it exists and is bindable. +#DEFINE COMATTRIB_NONBROWSABLE 0x400 && The property/method appears in an object browser, but not in a properties browser. +#DEFINE COMATTRIB_READONLY 0x100000 && The property is read-only (applies only to Properties). +#DEFINE COMATTRIB_WRITEONLY 0x200000 && The property is write-only (applies only to Properties). diff --git a/COMUN/include/mvc.h b/COMUN/include/mvc.h new file mode 100644 index 0000000..70f9131 --- /dev/null +++ b/COMUN/include/mvc.h @@ -0,0 +1,9 @@ +#IFNDEF ROARETAIL_H +#DEFINE ROARETAIL_H + +#DEFINE RR_TIPCURSOR 1 +#DEFINE RR_TIPARRAY 2 +#DEFINE RR_TIPCOLLECTION 3 + + +#ENDIF \ No newline at end of file diff --git a/COMUN/include/security.h b/COMUN/include/security.h new file mode 100644 index 0000000..84dfa74 --- /dev/null +++ b/COMUN/include/security.h @@ -0,0 +1 @@ +#DEFINE ENCRYPTKEY "233!do*32Di3-o23\409" \ No newline at end of file diff --git a/COMUN/meniuri/achi.MNT b/COMUN/meniuri/achi.MNT new file mode 100644 index 0000000..54645a1 Binary files /dev/null and b/COMUN/meniuri/achi.MNT differ diff --git a/COMUN/meniuri/achi.mnx b/COMUN/meniuri/achi.mnx new file mode 100644 index 0000000..cda56af Binary files /dev/null and b/COMUN/meniuri/achi.mnx differ diff --git a/COMUN/meniuri/config.MNT b/COMUN/meniuri/config.MNT new file mode 100644 index 0000000..a8bdafb Binary files /dev/null and b/COMUN/meniuri/config.MNT differ diff --git a/COMUN/meniuri/config.mnx b/COMUN/meniuri/config.mnx new file mode 100644 index 0000000..1d5ab30 Binary files /dev/null and b/COMUN/meniuri/config.mnx differ diff --git a/COMUN/meniuri/consum2.MNT b/COMUN/meniuri/consum2.MNT new file mode 100644 index 0000000..6335815 Binary files /dev/null and b/COMUN/meniuri/consum2.MNT differ diff --git a/COMUN/meniuri/consum2.mnx b/COMUN/meniuri/consum2.mnx new file mode 100644 index 0000000..c7cbcde Binary files /dev/null and b/COMUN/meniuri/consum2.mnx differ diff --git a/COMUN/meniuri/consum2_obinvfol.MNT b/COMUN/meniuri/consum2_obinvfol.MNT new file mode 100644 index 0000000..25ccd08 Binary files /dev/null and b/COMUN/meniuri/consum2_obinvfol.MNT differ diff --git a/COMUN/meniuri/consum2_obinvfol.mnx b/COMUN/meniuri/consum2_obinvfol.mnx new file mode 100644 index 0000000..1b1deb2 Binary files /dev/null and b/COMUN/meniuri/consum2_obinvfol.mnx differ diff --git a/COMUN/meniuri/editscurt.MNT b/COMUN/meniuri/editscurt.MNT new file mode 100644 index 0000000..e212d1b Binary files /dev/null and b/COMUN/meniuri/editscurt.MNT differ diff --git a/COMUN/meniuri/editscurt.mnx b/COMUN/meniuri/editscurt.mnx new file mode 100644 index 0000000..01eaafc Binary files /dev/null and b/COMUN/meniuri/editscurt.mnx differ diff --git a/COMUN/meniuri/introdgen.MNT b/COMUN/meniuri/introdgen.MNT new file mode 100644 index 0000000..f0ceb95 Binary files /dev/null and b/COMUN/meniuri/introdgen.MNT differ diff --git a/COMUN/meniuri/introdgen.mnx b/COMUN/meniuri/introdgen.mnx new file mode 100644 index 0000000..56f191c Binary files /dev/null and b/COMUN/meniuri/introdgen.mnx differ diff --git a/COMUN/meniuri/list2.MNT b/COMUN/meniuri/list2.MNT new file mode 100644 index 0000000..1fe0a77 Binary files /dev/null and b/COMUN/meniuri/list2.MNT differ diff --git a/COMUN/meniuri/list2.mnx b/COMUN/meniuri/list2.mnx new file mode 100644 index 0000000..a323a73 Binary files /dev/null and b/COMUN/meniuri/list2.mnx differ diff --git a/COMUN/meniuri/list2_obinvfol.MNT b/COMUN/meniuri/list2_obinvfol.MNT new file mode 100644 index 0000000..fd5bbe6 Binary files /dev/null and b/COMUN/meniuri/list2_obinvfol.MNT differ diff --git a/COMUN/meniuri/list2_obinvfol.mnx b/COMUN/meniuri/list2_obinvfol.mnx new file mode 100644 index 0000000..d63fb0c Binary files /dev/null and b/COMUN/meniuri/list2_obinvfol.mnx differ diff --git a/COMUN/meniuri/rap_listfactav_centr.MNT b/COMUN/meniuri/rap_listfactav_centr.MNT new file mode 100644 index 0000000..924f86e Binary files /dev/null and b/COMUN/meniuri/rap_listfactav_centr.MNT differ diff --git a/COMUN/meniuri/rap_listfactav_centr.mnx b/COMUN/meniuri/rap_listfactav_centr.mnx new file mode 100644 index 0000000..bab5f9e Binary files /dev/null and b/COMUN/meniuri/rap_listfactav_centr.mnx differ diff --git a/COMUN/meniuri/transfer2.MNT b/COMUN/meniuri/transfer2.MNT new file mode 100644 index 0000000..c92f07a Binary files /dev/null and b/COMUN/meniuri/transfer2.MNT differ diff --git a/COMUN/meniuri/transfer2.mnx b/COMUN/meniuri/transfer2.mnx new file mode 100644 index 0000000..9ef8d46 Binary files /dev/null and b/COMUN/meniuri/transfer2.mnx differ diff --git a/COMUN/meniuri/transfer2_obinvfol.MNT b/COMUN/meniuri/transfer2_obinvfol.MNT new file mode 100644 index 0000000..e933718 Binary files /dev/null and b/COMUN/meniuri/transfer2_obinvfol.MNT differ diff --git a/COMUN/meniuri/transfer2_obinvfol.mnx b/COMUN/meniuri/transfer2_obinvfol.mnx new file mode 100644 index 0000000..4a0339c Binary files /dev/null and b/COMUN/meniuri/transfer2_obinvfol.mnx differ diff --git a/COMUN/programe/Procese.prg b/COMUN/programe/Procese.prg new file mode 100644 index 0000000..74b4b18 --- /dev/null +++ b/COMUN/programe/Procese.prg @@ -0,0 +1,137 @@ +FUNCTION Createprocess(lcExe,lcCommandLine,lnShowWindow,llWaitForCompletion) +LOCAL hProcess, cProcessInfo, cStartupInfo + +DECLARE INTEGER CreateProcess IN kernel32 as _CreateProcess; + STRING lpApplicationName,; + STRING lpCommandLine,; + INTEGER lpProcessAttributes,; + INTEGER lpThreadAttributes,; + INTEGER bInheritHandles,; + INTEGER dwCreationFlags,; + INTEGER lpEnvironment,; + STRING lpCurrentDirectory,; + STRING lpStartupInfo,; + STRING @ lpProcessInformation + +cProcessinfo = REPLICATE(CHR(0),128) +cStartupInfo = GetStartupInfo(lnShowWindow) + + + +IF !EMPTY(lcCommandLine) + lcCommandLine = ["] + lcExe + [" ]+ lcCommandLine +ELSE + lcCommandLine = "" +ENDIF +lnResult = _CreateProcess(lcExe,lcCommandLine,0,0,1,0,0,; + SYS(5)+CURDIR(),cStartupInfo,@cProcessInfo) +lhProcess = CHARTOBIN( SUBSTR(cProcessInfo,1,4) ) +IF llWaitForCompletion + #DEFINE WAIT_TIMEOUT 0x00000102 + DECLARE INTEGER WaitForSingleObject IN kernel32.DLL ; + INTEGER hHandle, INTEGER dwMilliseconds + DO WHILE .T. + *** Update every 100 milliseconds + IF WaitForSingleObject(lhProcess, 100) != WAIT_TIMEOUT + EXIT + ELSE + DOEVENTS + ENDIF + ENDDO +ENDIF + +DECLARE INTEGER CloseHandle IN kernel32.DLL ; + INTEGER hObject +CloseHandle(lhProcess) +RETURN IIF(lnResult=1,.t.,.f.) +ENDFUNC + + + + +FUNCTION getStartupInfo(lnShowWindow) +LOCAL lnFlags +* creates the STARTUP structure to specify main window +* properties if a new window is created for a new process +IF EMPTY(lnShowWindow) + lnShowWindow = 1 +ENDIF +*| typedef struct _STARTUPINFO { +*| DWORD cb; 4 +*| LPTSTR lpReserved; 4 +*| LPTSTR lpDesktop; 4 +*| LPTSTR lpTitle; 4 +*| DWORD dwX; 4 +*| DWORD dwY; 4 +*| DWORD dwXSize; 4 +*| DWORD dwYSize; 4 +*| DWORD dwXCountChars; 4 +*| DWORD dwYCountChars; 4 +*| DWORD dwFillAttribute; 4 +*| DWORD dwFlags; 4 +*| WORD wShowWindow; 2 +*| WORD cbReserved2; 2 +*| LPBYTE lpReserved2; 4 +*| HANDLE hStdInput; 4 +*| HANDLE hStdOutput; 4 +*| HANDLE hStdError; 4 +*| } STARTUPINFO, *LPSTARTUPINFO; total: 68 bytes + + +#DEFINE STARTF_USESTDHANDLES 0x0100 +#DEFINE STARTF_USESHOWWINDOW 1 +#DEFINE SW_HIDE 0 +#DEFINE SW_SHOWMAXIMIZED 3 +#DEFINE SW_SHOWNORMAL 1 +lnFlags = STARTF_USESHOWWINDOW +RETURN binToChar(80) +; + binToChar(0) + binToChar(0) + binToChar(0) +; + binToChar(0) + binToChar(0) + binToChar(0) + binToChar(0) +; + binToChar(0) + binToChar(0) + binToChar(0) +; + binToChar(lnFlags) +; + binToWordChar(lnShowWindow) +; + binToWordChar(0) + binToChar(0) +; + binToChar(0) + binToChar(0) + binToChar(0) + REPLICATE(CHR(0),30) + ENDFUNC + + + +FUNCTION CharToBin(lcBinString,llSigned) +LOCAL m.i, lnWord +lnWord = 0 +FOR m.i = 1 TO LEN(lcBinString) + lnWord = lnWord + (ASC(SUBSTR(lcBinString, m.i, 1)) * (2 ^ (8 * (m.i - 1)))) +ENDFOR + +IF llSigned AND lnWord > 0x80000000 + lnWord = lnWord - 1 - 0xFFFFFFFF +ENDIF +RETURN lnWord +* wwAPI :: CharToBin +ENDFUNC + +************************************************************************ +FUNCTION BinToChar(lnValue) +**************************************** +Local byte(4) +If lnValue < 0 + lnValue = lnValue + 4294967296 +EndIf +byte(1) = lnValue % 256 +byte(2) = BitRShift(lnValue, 8) % 256 +byte(3) = BitRShift(lnValue, 16) % 256 +byte(4) = BitRShift(lnValue, 24) % 256 +RETURN Chr(byte(1))+Chr(byte(2))+Chr(byte(3))+Chr(byte(4)) +* wwAPI :: BinToChar +ENDFUNC + +************************************************************************ +FUNCTION BinToWordChar(lnValue) +**************************************** +*** Function: Creates a DWORD value from a number +*** Pass: lnValue - VFP numeric integer (unsigned) +*** Return: binary string +************************************************************************ +RETURN Chr(MOD(m.lnValue,256)) + CHR(INT(m.lnValue/256)) +ENDFUNC + diff --git a/COMUN/programe/Reports/DynamicFormatting.prg b/COMUN/programe/Reports/DynamicFormatting.prg new file mode 100644 index 0000000..6bb552b --- /dev/null +++ b/COMUN/programe/Reports/DynamicFormatting.prg @@ -0,0 +1,223 @@ +* Define a class that knows how to apply effects to objects in a report. + +DEFINE CLASS EffectsListener AS _ReportListener OF ; + HOME() + 'ffc\_ReportListener.vcx' + + oEffectHandlers = .NULL. +&& a collection of effect handlers + DIMENSION aRecords[1] +&& an array of information for each record in the FRX + +* Create a collection of effect handler objects and fill it with the handlers +* we know about. A subclass or instance could be filled with additional ones. + + FUNCTION INIT + DODEFAULT() + WITH THIS + .oEffectHandlers = CREATEOBJECT('Collection') + .oEffectHandlers.ADD(CREATEOBJECT('DynamicForeColorEffect')) + .oEffectHandlers.ADD(CREATEOBJECT('DynamicStyleEffect')) + ENDWITH + ENDFUNC + +* Dimension aRecords to as many records as there are in the FRX so we don't +* have to redimension it as the report runs. The first column indicates if +* we've processed that record in the FRX yet and the second column contains +* a collection of effect handlers used to process the record. + + FUNCTION BEFOREREPORT + DODEFAULT() + WITH THIS + .SetFRXDataSession() + DIMENSION .aRecords[reccount(), 2] + .ResetDataSession() + ENDWITH + ENDFUNC + + PROCEDURE ONPREVIEWCLOSE + PARAMETERS lPrint + LOCAL liRange + + THIS.COMMANDCLAUSES.PROMPT = .T. + DODEFAULT(lPrint) + ENDPROC && OnPrevieClose + +* Apply any effects that were requested to the field about to be rendered. + + FUNCTION EVALUATECONTENTS(tnFRXRecno, toObjProperties) + LOCAL loEffectObject, ; + loEffectHandler, ; + lcExpression + WITH THIS + +* If we haven't already checked if this field needs any effects, do so and +* flag that we have checked it so we don't do it again. + + IF NOT .aRecords[tnFRXRecno, 1] + .aRecords[tnFRXRecno, 1] = .T. + .aRecords[tnFRXRecno, 2] = .SetupEffectsForObject(tnFRXRecno) + ENDIF NOT .aRecords[tnFRXRecno, 1] + +* Go through the collection of effect handlers for the field (the collection +* may be empty if the field doesn't need any effects), letting each one do its +* thing. + + FOR EACH loEffectObject IN .aRecords[tnFRXRecno, 2] + loEffectHandler = loEffectObject.oEffectHandler + lcExpression = loEffectObject.cExpression + loEffectHandler.Execute(toObjProperties, lcExpression) + NEXT loEffect + ENDWITH + +* Do the normal behavior. + + DODEFAULT(tnFRXRecno, toObjProperties) + ENDFUNC + +* Go through each effect handler to see if it'll handle the current report +* object. If so, add it to a collection of handlers for the object, and return +* that collection. + + FUNCTION SetupEffectsForObject(tnFRXRecno) + LOCAL loFRX, ; + loHandlers, ; + loObject + WITH THIS + loFRX = .GetReportObject(tnFRXRecno) + loHandlers = CREATEOBJECT('Collection') + FOR EACH loEffectHandler IN .oEffectHandlers + loObject = loEffectHandler.GetEffect(loFRX) + IF VARTYPE(loObject) = 'O' + loHandlers.ADD(loObject) + ENDIF VARTYPE(loObject) = 'O' + NEXT loEffectHandler + ENDWITH + RETURN loHandlers + ENDFUNC + +* Return a SCATTER NAME object for the specified record in the FRX. + + PROCEDURE GetReportObject(tnFRXRecno) + LOCAL loObject + THIS.SetFRXDataSession() + GO tnFRXRecno + SCATTER MEMO NAME loObject + THIS.ResetDataSession() + RETURN loObject + ENDPROC +ENDDEFINE + +* Create a class that holds a reference to an effect handler and the expression +* the effect handler is supposed to act on for a particular record in the FRX. + +DEFINE CLASS EffectObject AS CUSTOM + oEffectHandler = .NULL. + cExpression = '' +ENDDEFINE + +* Define an abstract class for effect handler objects. + +DEFINE CLASS EffectHandler AS CUSTOM + +* Execute is called by the EvaluateContents method of EffectsListener to +* perform an effect. + + FUNCTION Execute(toObjProperties, tcExpression) + ENDFUNC + +* GetEffects is called to return an object containing a reference to the +* handler and the expression it's supposed to work on if the specified report +* object needs this effect, or return null if not. + + FUNCTION GetEffect(toFRX) + LOCAL loObject + loObject = .NULL. + RETURN loObject + ENDFUNC + +* EvaluateExpression may be called by Execute to evaluate the specified +* expression. + + FUNCTION EvaluateExpression(tcExpression) + RETURN EVALUATE(tcExpression) + ENDFUNC +ENDDEFINE + +* Define an abstract class for effect handlers that look for +* "*:EFFECTS = " in the USER memo. + +DEFINE CLASS UserEffectHandler AS EffectHandler + cEffectsDirective = '*:EFFECTS' +&& the directive that indicates an effect is needed + cEffectName = '' +&& the effect name to look for (filled in in a subclass) + + FUNCTION GetEffect(toFRX) + LOCAL lcEffect, ; + loObject + lcEffect = THIS.cEffectsDirective + ' ' + THIS.cEffectName + IF ATC(lcEffect, toFRX.USER) > 0 + loObject = CREATEOBJECT('EffectObject') + loObject.oEffectHandler = THIS + loObject.cExpression = STREXTRACT(toFRX.USER, lcEffect + ' = ', ; + CHR(13), 1, 3) + ELSE + loObject = .NULL. + ENDIF ATC(lcEffect, toFRX.USER) > 0 + RETURN loObject + ENDFUNC +ENDDEFINE + +* Define a class to provide dynamic forecolor effects. + +DEFINE CLASS DynamicForeColorEffect AS UserEffectHandler + cEffectName = 'FORECOLOR' + +* Evaluate the expression. If the result is a numeric value and doesn't match +* the existing color of the object, change the object's color and set the +* Reload flag to .T. + + FUNCTION Execute(toObjProperties, tcExpression) + LOCAL lnColor, ; + lnPenRed, ; + lnPenGreen, ; + lnPenBlue + lnColor = THIS.EvaluateExpression(tcExpression) + IF VARTYPE(lnColor) = 'N' + lnPenRed = BITAND(lnColor, 0x0000FF) + lnPenGreen = BITRSHIFT(BITAND(lnColor, 0x00FF00), 8) + lnPenBlue = BITRSHIFT(BITAND(lnColor, 0xFF0000), 16) + WITH toObjProperties + IF .PenRed <> lnPenRed OR ; + .PenGreen <> lnPenGreen OR ; + .PenBlue <> lnPenBlue + .PenRed = lnPenRed + .PenGreen = lnPenGreen + .PenBlue = lnPenBlue + .Reload = .T. + ENDIF .PenRed <> lnPenRed ... + ENDWITH + ENDIF VARTYPE(lnColor) = 'N' + ENDFUNC +ENDDEFINE + +* Define a class to provide dynamic style effects. + +DEFINE CLASS DynamicStyleEffect AS UserEffectHandler + cEffectName = 'STYLE' + +* Evaluate the expression. If the result is a numeric value and doesn't match +* the existing style of the object, change the object's style and set the +* Reload flag to .T. + + FUNCTION Execute(toObjProperties, tcExpression) + LOCAL lnStyle + lnStyle = THIS.EvaluateExpression(tcExpression) + WITH toObjProperties + IF VARTYPE(lnStyle) = 'N' AND .FontStyle <> lnStyle + .FontStyle = lnStyle + .Reload = .T. + ENDIF VARTYPE(lnStyle) = 'N' ... + ENDWITH + ENDFUNC +ENDDEFINE diff --git a/COMUN/programe/acces_meniu.prg b/COMUN/programe/acces_meniu.prg new file mode 100644 index 0000000..45dcbac --- /dev/null +++ b/COMUN/programe/acces_meniu.prg @@ -0,0 +1,306 @@ +*!* 08.08.2011 +*!* marius.mutu +*!* dezactiveaza_imagini - am marit distanta dintre imagini - ca sa nu se ingramadeasca textul cu shortcut-ul + +*!* 09.12.2021 +*!* marius..mutu +*!* dezactiveaza_meniuri - adaugare meniu Verificare, Import +********************************************************************************************** +Procedure verifica_drepturi + Lparameters tcObiectFundal, tcPageFrame + citeste_drepturi(gnIdUtil) + dezactiveaza_obiecte_pageframe(65, tcObiectFundal + [.] + tcPageFrame) + dezactiveaza_imagini(tcObiectFundal) + dezactiveaza_meniuri(90) +Endproc +********************************************************************************************** +Procedure citeste_drepturi + Lparameters tnIdUtil + + If Used('crsdrepturi') + Select crsdrepturi + Locate For id_firma = gnIdFirma + If Found() + Return + Else + Use In crsdrepturi + Endif + Endif + lcSql = [select cheie,id_firma from contafin_oracle.vdef_util_obiecte ] + ; + [where id_util = ?gnIdUtil and id_program=?gnIdProgram and id_firma=?gnIdFirma] + lnSucces = goExecutor.oExecute(lcSql, 'crsdrepturi') + If lnSucces < 0 + aMESSAGEBOX(goExecutor.cEroare, 0 + 16, 'Eroare') + Return + Endif + +Endproc +********************************************************************************************** +Procedure dezactiveaza_imagini + Lparameters loObiect + Local i, k, j, l, lnMinLeft + Dimension laImaginiVizibile(20, 2) + k = 0 + && left=3 pentru prima imagine + With &loObiect + For i = 1 To .ControlCount + If Alltrim(Upper(.Objects(i).Class)) = 'IMAGINE' + lcCheie = .Objects(i).ccod + If Right(lcCheie, 1) # ';' + lcCheie = lcCheie + ';' + Endif + lnPozitieS = 1 + For j = 1 To Occurs([;], lcCheie) + lnPozitieF = At([;], lcCheie, j) + lcCheie2 = Substr(lcCheie, lnPozitieS, lnPozitieF - lnPozitieS) + lcAcces = [] + Select crsdrepturi + Locate For Substr(cheie, 1, Len(lcCheie2)) = lcCheie2 + If Found() + Set Filter To Substr(cheie, 1, Len(lcCheie2)) = lcCheie2 + Scan + lcAcces = lcAcces + Substr(cheie, Len(lcCheie2) + 1, 1) + [;] + Endscan + Set Filter To + k = k + 1 + If !Empty(lcAcces) And Alltrim(lcAcces) <> [;] + .Objects(i).coptiuni_active = lcAcces + Endif + .Objects(i).Visible = .T. + laImaginiVizibile(k, 1) = i + laImaginiVizibile(k, 2) = .Objects(i).Left + Exit + Else + .Objects(i).Visible = .F. + Endif + lnPozitieS = lnPozitieF + 1 + Endfor + Endif + Endfor + If k > 0 + lnLungime = .Objects(laImaginiVizibile(1, 1)).Width + For j = 1 To k - 1 + For l = j + 1 To k + If laImaginiVizibile(j, 2) > laImaginiVizibile(l, 2) + lnPozitie = laImaginiVizibile(l, 1) + lnLeft = laImaginiVizibile(l, 2) + laImaginiVizibile(l, 1) = laImaginiVizibile(j, 1) + laImaginiVizibile(l, 2) = laImaginiVizibile(j, 2) + laImaginiVizibile(j, 1) = lnPozitie + laImaginiVizibile(j, 2) = lnLeft + Endif + Endfor + Endfor + For j = 1 To k + *!* 08.08.2011 + .Objects(laImaginiVizibile(j, 1)).Left = 5 + (j - 1) * (lnLungime + 0) + *!* 08.08.2011 ^ + Endfor + Endif + Endwith +Endproc +********************************************************************************************** +Procedure dezactiveaza_obiecte_pageframe + Lparameters lnKey, lcPageFrame, lcTata + Local lcKey, lcProp, lcOptiune, lnPozitie, i, j, k, l, lnObiecteActive + Store [] To lcKey, lcProp, lcOptiune + Store 0 To lnNivel, lnPozitie, i, j, k, l + If Empty(lcTata) + lcTata = Null + Endif + Set Exact On + With &lcPageFrame + For i = 1 To .PageCount + For j = 1 To .PageCount + If .Pages(j).PageOrder = i + Exit + Endif + Endfor + With .Pages(j) + .Enabled = .T. + lnObiecteActive = 0 + lcKey = Nvl(lcTata, []) + Chr(lnKey) + If Used('crstotal') + Use In crstotal + Endif + Select Count(*) As Total From crsdrepturi Where Substr(cheie, 1, Len(lcKey)) = lcKey Into Cursor crstotal + Select crstotal + lnObiecteActive = Total + Use In crstotal + *!* If lnObiecteActive>0 + For l = 1 To .ControlCount + Do Case + Case Alltrim(Upper(.Objects(l).Class)) = 'PAGEFRAME' + lcNume = lcPageFrame + '.' + Alltrim(.Name) + '.' + Alltrim(Upper(.Objects(l).Name)) + dezactiveaza_obiecte_pageframe(65, lcNume, lcKey) + Case Left(Alltrim(Upper(.Objects(l).Class)), 2) = 'CW' + lcOptiune = .Objects(l).label_item1.Caption + lcCheie = lcKey + Padl(Alltrim(Str(.Objects(l).nid_cw)), 2, [0]) + lcAcces = [] + .Objects(l).ccheie = lcCheie + Select crsdrepturi + Locate For Substr(cheie, 1, Len(lcCheie)) = lcCheie + If Found() + Set Filter To Substr(cheie, 1, Len(lcCheie)) = lcCheie + Scan + lcAcces = lcAcces + Substr(cheie, Len(lcCheie) + 1, 1) + [;] + Endscan + Set Filter To + .Objects(l).coptiuni_active = lcAcces + .Objects(l).activeaza() + Else + .Objects(l).dezactiveaza() + Endif + Endcase + Endfor + *!* Else + If lnObiecteActive = 0 + .Enabled = .F. + Endif + Endwith + lnKey = lnKey + 1 + Endfor + Endwith + *!* Set Exact Off +Endproc +********************************************************************************************** +Procedure dezactiveaza_meniuri() + Lparameters lnKey + Local lcKey, lcKey2, i, j, k + Do Case + Case gnIdProgram = 2 && ROACONT + Dimension laPad[5] + laPad[1] = [initializa] + laPad[2] = [_1bs12qror] + laPad[3] = [verificari] + laPad[4] = [_5100zlkwx] + laPad[5] = [eFactura] + Case gnIdProgram = 5 && ROAGEST + Dimension laPad[1] + laPad[1] = [actualizar] + Case gnIdProgram = 8 && ROAAUTO + Return + Case gnIdProgram = 7 && ROAMANAGER + Dimension laPad[3] + laPad[1] = [optiuni] + laPad[2] = [vizualizar] + laPad[3] = [rapoartege] + Case gnIdProgram = 75 && ROASALSPEC modificare 16.10.2012 + Dimension laPad[2] + laPad[1] = [_3mm0vdyef] + laPad[2] = [_3mm0ve0rs] + Case gnIdProgram = 4 && ROARES + Dimension laPad[3] + laPad[1] = [initializa] + laPad[2] = [configurar] + laPad[3] = [migrare] + Otherwise && Restul + Return + Endcase + + lcKey = Chr(lnKey) + lnKey2 = 65 + For j = 1 To Alen(laPad) + k = 0 + Try + If Cntbar(laPad[j]) > 0 + lcKey2 = lcKey + Chr(lnKey2) + lnKey2 = lnKey2 + 1 + For i = 1 To Cntbar(laPad[j]) + lcOptiune = Prmbar(laPad[j], i) + If !Empty(lcOptiune) + k = k + 1 + lcCheie = lcKey2 + Padl(Alltrim(Str(k)), 2, [0]) + Select crsdrepturi + Locate For Substr(cheie, 1, Len(lcCheie)) = lcCheie + If Found() + *!* WAIT WINDOW laPad[j]+" "+lcCheie+" gasita" + Set Skip Of Bar i Of &laPad[j] .F. + Else + *!* WAIT WINDOW laPad[j]+" "+lcCheie+" negasita" + *!* messagebox(skpbar (laPad[j],i),48,laPad[j]+" "+alltrim(str(i))) + Set Skip Of Bar i Of &laPad[j] .T. + *!* messagebox(skpbar (laPad[j],i),48,laPad[j]+" "+alltrim(str(i))) + Endif + Endif + Endfor + Endif + Catch + Endtry + Endfor +Endproc + +********************************************************************************************** +*** Citeste accesul pentru o optiune dupa cod +*** Ex. pentru initializarea accesului la lansarea unui formular direct din meniu +Function GetAccesByCod + Lparameters tcCod, tcAccesDefault + * tcCod = codul optiunii din meniu (ex: ZA01/ZA02/ZB01) + * tcAccesDefault = codul de acces in caz ca nu sunt definite drepturi pe acel cod ("1;2;3;4") + + Local lcAcces, lcAccesDefault, lcCheie, lcCheie2, lcSelect, lnPozitieF, lnPozitieS, j, k + lcAccesDefault = Iif(!Empty(m.tcAccesDefault), m.tcAccesDefault, "") + lcAcces = "" + + lcSelect = Select() + + lcCheie = Upper(Alltrim(m.tcCod)) + k = 0 + If Right(lcCheie, 1) # ';' + lcCheie = lcCheie + ';' + Endif + lnPozitieS = 1 + For j = 1 To Occurs([;], lcCheie) + lnPozitieF = At([;], lcCheie, j) + lcCheie2 = Substr(lcCheie, lnPozitieS, lnPozitieF - lnPozitieS) + lcAcces = [] + Select crsdrepturi + Locate For Substr(cheie, 1, Len(lcCheie2)) = lcCheie2 + If Found() + Set Filter To Substr(cheie, 1, Len(lcCheie2)) = lcCheie2 + Scan + lcAcces = lcAcces + Substr(cheie, Len(lcCheie2) + 1, 1) + [;] + Endscan + Set Filter To + k = k + 1 + Exit + Endif && found + lnPozitieS = lnPozitieF + 1 + ENDFOR + IF EMPTY(m.lcAcces) AND !EMPTY(m.lcAccesDefault) + lcAcces = m.lcAccesDefault + ENDIF + + Select (m.lcSelect) + RETURN m.lcAcces +ENDFUNC && GetAccesByCod + +********************************************************************************************** +Procedure actualizeaza_acces_forma + Lparameters loObiect, tcAcces + Local lcProp + For i = 1 To Len(tcAcces) + lcProp = 'this.lactiv' + Alltrim(Substr(tcAcces, i, 1)) + &lcProp = .T. + Endfor +Endproc +********************************************************************************************** +*!* Procedure setari_grupuri +*!* Private pogrupuri,pcschema1,pcselect1 +*!* Store '' To pogrupuri +*!* *!* pcschema1=['id_util n(5),utilizator c(30)'] +*!* *!* pcselect1=['select id_util,utilizator from vutil_drept where 1=2'] +*!* *!* pcorder1=[utilizator] +*!* *!* pcfiltru1=[id_firma=?gnIdFirma and id_prog=?gnIdProgram] + +*!* pcschema1=['id_grup n(5),grup c(30)'] +*!* pcselect1=['select id_grup,grup from vdef_grup where 1=2'] +*!* pcorder1=[grup] +*!* pcfiltru1=[2=2] +*!* llAfiseaza=.F. +*!* gencursor('pogrupuri','crsgrupuri',pcselect1,pcfiltru1,pcschema1,pcorder1,llAfiseaza) +*!* pogrupuri.ca_baza1.afisare() +*!* ofrmgrupuri=Createobject('frm_grupuri') +*!* ofrmgrupuri.Show(1) +*!* Release pogrupuri +*!* Endproc \ No newline at end of file diff --git a/COMUN/programe/acces_meniu2.prg b/COMUN/programe/acces_meniu2.prg new file mode 100644 index 0000000..cfe949a --- /dev/null +++ b/COMUN/programe/acces_meniu2.prg @@ -0,0 +1,103 @@ +&& este versiunea pentru programele care nu au definite obiecte +********************************************************************************************** +Procedure verifica_drepturi2 +Lparameters tcObiectFundal,tcPageFrame,tlImagini +dezactiveaza_obiecte_pageframe2(65,tcObiectFundal+[.]+tcPageFrame) +If Empty(tlImagini) Or tlImagini + dezactiveaza_imagini2(tcObiectFundal) +Endif +Endproc +********************************************************************************************** +Procedure dezactiveaza_imagini2 +Lparameters loObiect +Local i,k,j,l,lnMinLeft +Dimension laImaginiVizibile(20,2) +k=0 +&& left=3 pentru prima imagine +With &loObiect + For i=1 To .ControlCount + If Alltrim(Upper(.Objects(i).Class))='IMAGINE' + k=k+1 + lcCheie=.Objects(i).ccod + lcAcces=[1;2;3;4;5;7;] + .Objects(i).coptiuni_active=lcAcces + .Objects(i).Visible=.T. + laImaginiVizibile(k,1)=i + laImaginiVizibile(k,2)=.Objects(i).Left + Endif + Endfor + If k>0 + lnLungime=.Objects(laImaginiVizibile(1,1)).Width + For j=1 To k-1 + For l=j+1 To k + If laImaginiVizibile(j,2)>laImaginiVizibile(l,2) + lnPozitie=laImaginiVizibile(l,1) + lnLeft=laImaginiVizibile(l,2) + laImaginiVizibile(l,1)=laImaginiVizibile(j,1) + laImaginiVizibile(l,2)=laImaginiVizibile(j,2) + laImaginiVizibile(j,1)=lnPozitie + laImaginiVizibile(j,2)=lnLeft + Endif + Endfor + Endfor + For j=1 To k + .Objects(laImaginiVizibile(j,1)).Left=5+(j-1)*lnLungime + Endfor + Endif +Endwith +Endproc +********************************************************************************************** +Procedure dezactiveaza_obiecte_pageframe2 +Lparameters lnKey,lcPageFrame,lcTata +Local lcKey,lcProp,lcOptiune,lnPozitie,i,j,k,l,lnObiecteActive +Store [] To lcKey,lcProp,lcOptiune +Store 0 To lnNivel,lnPozitie,i,j,k,l +If Empty(lcTata) + lcTata=Null +ENDIF + +LOCAL lcSetExact +lcSetExact = SET("Exact") +Set Exact On +With &lcPageFrame + For i=1 To .PageCount + For j=1 To .PageCount + If .Pages(j).PageOrder=i + Exit + Endif + Endfor + With .Pages(j) + lcKey=Nvl(lcTata,[])+Chr(lnKey) + For l=1 To .ControlCount + Do Case + Case Alltrim(Upper(.Objects(l).Class))='PAGEFRAME' + lcNume=lcPageFrame+'.'+Alltrim(.Name)+'.'+Alltrim(Upper(.Objects(l).Name)) + dezactiveaza_obiecte_pageframe2(65,lcNume,lcKey) + Case Alltrim(Upper(.Objects(l).Class))='CW' + lcOptiune=.Objects(l).label_item1.Caption + lcCheie=lcKey+Padl(Alltrim(Str(.Objects(l).nid_cw)),2,[0]) + lcAcces=[1;2;3;4;7;] + .Objects(l).ccheie=lcCheie + .Objects(l).coptiuni_active=lcAcces + .Objects(l).activeaza() + Endcase + Endfor + Endwith + lnKey=lnKey+1 + Endfor +ENDWITH + +SET EXACT &lcSetExact +* Set Exact Off + +Endproc +********************************************************************************************** +Procedure actualizeaza_acces_forma +Lparameters loObiect,tcAcces +Local lcProp +For i=1 To Len(tcAcces) + lcProp='this.lactiv'+Alltrim(Substr(tcAcces,i,1)) + &lcProp=.T. +Endfor +Endproc +********************************************************************************************** \ No newline at end of file diff --git a/COMUN/programe/actualizare_aplicatie.prg b/COMUN/programe/actualizare_aplicatie.prg new file mode 100644 index 0000000..a797efa --- /dev/null +++ b/COMUN/programe/actualizare_aplicatie.prg @@ -0,0 +1,134 @@ +LPARAMETERS tcProgram, tcVersiuneURL +*** IN LUCRU +* tcProgram: ROAEFACTURA +* tcVersiuneURL: https://www.romfast.ro/romfastsuport/files/suport.xml + +#DEFINE CRLF CHR(13) + CHR(10) + +lcProgram = IIF(!EMPTY(m.tcProgram), UPPER(ALLTRIM(m.tcProgram)), UPPER(ALLTRIM(SYS(16,0)))) +lcServer = IIF(!EMPTY(m.tcVersiuneURL), m.tcVersiuneURL, [https://www.romfast.ro/romfastsuport/files/suport.xml]) + +llSucces = .F. +Try + loHTTP = Createobject('winHTTP.winHTTPrequest.5.1') + llSucces = .T. +CATCH TO loEx + This.Log('Actualizare aplicatie - Eroare: ' + loEx.Message) +ENDTRY + +IF m.llSucces + llSucces = .F. + TRY + This.Log(m.lcServer) + loHTTP.Open('GET', lcServer, .F.) + loHTTP.setRequestHeader("Content-Type", "application/xml") + loHTTP.Send() + llSucces = .T. + Catch To loEx + This.Log('Actualizare aplicatie - Eroare: ' + loEx.Message) + Endtry + +ENDIF + +IF m.llSucces + If loHTTP.Status <> 200 + This.Log('Actualizare aplicatie ' + loHTTP.StatusText) + llSucces = .F. + ELSE + goApp.Log('Actualizare aplicatie - versiunexml: SUCCES') + Endif +ENDIF + + +IF m.llSucces + llSucces = .F. + * Versiunea programului + lcVersiuneClient = get_version(.F.,.T.) + + * Versiunea de pe server + TRY + lcVersiuneXML = loHTTP.ResponseText + XMLTOCURSOR(m.lcVersiuneXML, 'crsVersiuni') + + lcVersiuneServer = '' + lcServer = '' + SELECT crsVersiuni + LOCATE FOR UPPER(ALLTRIM(program)) = m.lcProgram + IF FOUND() + lcVersiuneServer = ALLTRIM(UPPER(versiune)) + lcServer = ALLTRIM(fisier) && url aplicatie.exe + llSucces = .T. + ENDIF + CATCH TO loEx + This.Log('Actualizare aplicatie - Eroare: ' + loEx.Message) + ENDTRY +ENDIF + +If m.llSucces AND m.lcVersiuneServer <> m.lcVersiuneClient AND !EMPTY(m.lcServer) + llSucces = .F. + TRY + This.Log(m.lcServer) + loHTTP.Open('GET', lcServer, .F.) + loHTTP.setRequestHeader("Content-Type", "application/vnd.microsoft.portable-executable") + loHTTP.Send() + llSucces = .T. + Catch To loEx + This.Log('Actualizare aplicatie - Eroare: ' + loEx.Message) + Endtry + IF m.llSucces + If loHTTP.Status <> 200 + This.Log('Actualizare aplicatie - Eroare: ' + loHTTP.StatusText) + llSucces = .F. + ELSE + + This.Log('Actualizare aplicatie - program.exe Succes') + ENDIF + ENDIF +Endif + + +If !llDownloaded + Return +ENDIF + +lcBatFile = Addbs(Justpath(m.lcDestinationFile)) + 'UPDATE.BAT' +Set Textmerge On To (m.lcBatFile) Noshow +*!* wait 5 seconds for the application to quit +\@ping 127.0.0.1 -n 10 -w 1000 > nul +*!* rename original application +\REN "<>" "<>" +*!* execute the new sfx archive - the sfx archive will start the application by itself +\START "" "<>" +\@ping 127.0.0.1 -n 5 -w 1000 > nul +*!* delete the archive +\DEL "<>" +Set Textmerge To + +*!* DEZARHIVEZ APLICATIA DESCARCATA +llSucces = .F. +Try + Cd (Justpath(m.lcApplicationFile)) + + loProcess=Createobject("api_apprun", m.lcBatFile) + + goApp.Log("EXECUTARE PROGRAM;"+ " " + Alltrim(m.lcBatFile)) + loProcess.launchapp() + llSucces = .T. + +Catch To loException + goApp.Log("EXECUTARE PROGRAM;"+ " " + Alltrim(m.lcBatFile) + " " + CRLF + loEx.Message) + Messagebox("EXECUTARE PROGRAM;"+ " " + Alltrim(m.lcBatFile) + " " + CRLF + loEx.Message,0+16, _Screen.Caption) +Endtry +If llSucces + On Error + On Shutdown + Set Procedure To + Set Library To + Set Classlib To + Clear Events + If _vfp.StartMode <> 0 + Quit + Else + Return .F. + Endif +Endif diff --git a/COMUN/programe/adaugare_drepturi.prg b/COMUN/programe/adaugare_drepturi.prg new file mode 100644 index 0000000..bab00a5 --- /dev/null +++ b/COMUN/programe/adaugare_drepturi.prg @@ -0,0 +1,218 @@ +Procedure citeste_obiecte +Local lcMeniu,lcPageframe +lcMeniu=[roadef] +lcPageframe=[gofundal._pgfrmbase1] +Create Cursor CRSOBIECTE(ID_PROG N(1),CHEIE C(20),NIVEL N(2),EXPLICATIE C(100),TATA C(20),COD C(2),ID_OBIECT N(10),ID_TATA N(10)) +plCursor=.T. +citeste_meniu(90,lcmeniu,"Meniu") +citeste_pageframe(65,lcpageframe) +select * FROM crsobiecte INTO TABLE C:\crsobiecte.dbf +Endproc +************************************************************************ +Procedure citeste_meniu +Lparameters lnKey,lcNumeMeniu,lcOptiune +lcKey=Chr(lnKey) +*!* This.Nodes.Add(,1,lcKey,lcOptiune) +If plCursor + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey,1,lcOptiune,[ ]) +Endif +lnKey2=65 +*!* k=0 +*!* Try +*!* lcKey2=lcKey+Chr(lnKey2) +*!* lnKey2=lnKey2+1 +*!* This.Nodes.Add(lcKey,4,lcKey2,'Utile') +*!* If plCursor +*!* Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey2,4,[Utile],lcKey) +*!* Endif +*!* For i=1 To Cntbar('utile') +*!* lcOptiune=Prmbar('utile',i) +*!* If !Empty(lcOptiune) +*!* k=k+1 +*!* This.Nodes.Add(lcKey2,4,lcKey2+Padl(Alltrim(Str(k)),2,[0]),lcOptiune) +*!* If plCursor +*!* Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey2+Padl(Alltrim(Str(k)),2,[0]),4,lcOptiune,lcKey2) +*!* Endif +*!* Endif +*!* Endfor +*!* Catch +*!* ENDTRY +k=0 +Try + lcKey2=lcKey+Chr(lnKey2) + lnKey2=lnKey2+1 +*!* This.Nodes.Add(lcKey,4,lcKey2,'Initializare') + If plCursor + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey2,4,[Initializare],lcKey) + Endif + For i=1 To Cntbar('initializa') + lcOptiune=Prmbar('initializa',i) + If !Empty(lcOptiune) + k=k+1 +*!* This.Nodes.Add(lcKey2,4,lcKey2+Padl(Alltrim(Str(k)),2,[0]),lcOptiune) + If plCursor + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey2+Padl(Alltrim(Str(k)),2,[0]),4,lcOptiune,lcKey2) + Endif + Endif + Endfor +Catch +Endtry +k=0 +Try + lcKey2=lcKey+Chr(lnKey2) +*!* This.Nodes.Add(lcKey,4,lcKey2,'Actualizari') + If plCursor + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey2,4,[Actualizari],lcKey) + Endif + For i=1 To Cntbar('_1bs12qror') + lcOptiune=Prmbar('_1bs12qror',i) + If !Empty(lcOptiune) + k=k+1 +*!* This.Nodes.Add(lcKey2,4,lcKey2+Padl(Alltrim(Str(k)),2,[0]),lcOptiune) + If plCursor + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey2+Padl(Alltrim(Str(k)),2,[0]),4,lcOptiune,lcKey2) + Endif + Endif + Endfor +Catch +Endtry +************************************************************************ +Procedure citeste_pageframe +Lparameters lnKey,lcPageframe,lcTata +Local lcKey,lcProp,lcOptiune,lnNivel,lnPozitie,i,j,k,l +Store [] To lcKey,lcProp,lcOptiune +Store 0 To lnNivel,lnPozitie,i,j,k,l +If Empty(lcTata) + lcTata=Null + lnNivel=1 +Else + lnNivel=4 +Endif +Set Exact On +With &lcPageframe + For i=1 To .PageCount + For j=1 To .PageCount + If .Pages(j).PageOrder=i + Exit + Endif + Endfor + With .Pages(j) + lcKey=Nvl(lcTata,[])+Chr(lnKey) +*!* This.Nodes.Add(lcTata,lnNivel,lcKey,.Caption) + lcProp="cnt"+lcKey +*!* This.AddProperty(lcProp,0) + If plCursor + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey,lnNivel,.Caption,Nvl(lcTata,[ ])) + Endif + lcProp="cnt"+lcKey +*!* This.AddProperty(lcProp,0) + Dimension copii(128,3) + k=1 + For l=1 To .ControlCount + Do Case + Case Alltrim(Upper(.Objects(l).Class))='PAGEFRAME' + lcNume=lcPageframe+'.'+Alltrim(.Name)+'.'+Alltrim(Upper(.Objects(l).Name)) + citeste_pageframe(65,lcNume,lcKey) + Case Alltrim(Upper(.Objects(l).Class))='CW' And .Objects(l).nid_cw>0 + lcOptiune=.Objects(l).label_item1.Caption + lnPozitie=.Objects(l).nid_cw + copii(lnPozitie,1)=lcOptiune + copii(lnPozitie,2)=.Objects(l).ntip + copii(lnPozitie,3)=.Objects(l).cmeniu + k=k+1 + Endcase + Endfor + For l=1 To k-1 +*!* This.Nodes.Add(lcKey,4,lcKey+Padl(Alltrim(Str(l)),2,[0]),copii(l,1)) + If plCursor + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+Padl(Alltrim(Str(l)),2,[0]),4,copii(l,1),lcKey) + Endif +*!* If !Empty(copii(l,3)) +*!* This.adauga_meniuri(copii(l,3),copii(l,2),lcKey+Padl(Alltrim(Str(l)),2,[0])) +*!* Else + adauga_frunze(copii(l,2),lcKey+Padl(Alltrim(Str(l)),2,[0])) +*!* Endif + Endfor + Endwith + lnKey=lnKey+1 + Endfor +Endwith +Set Exact Off +Endproc +************************************************************************ +Procedure adauga_frunze +Lparameters lnTip,lcKey +Do Case +Case lnTip=0 && introducere +Case lnTip=1 && raport +*!* lcProp="cnt"+lcKey +*!* This.AddProperty(lcProp,0) +*!* This.Nodes.Add(lcKey,4,lcKey+"1","Export") +*!* This.Nodes.Add(lcKey,4,lcKey+"2","Listare") + If plCursor + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"1",4,"Export",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"2",4,"Listare",lcKey) + Endif +Case lnTip=2 && registru +*!* lcProp="cnt"+lcKey +*!* This.AddProperty(lcProp,0) +*!* This.Nodes.Add(lcKey,4,lcKey+"1","Export") +*!* This.Nodes.Add(lcKey,4,lcKey+"2","Listare") +*!* This.Nodes.Add(lcKey,4,lcKey+"3","Modificare") +*!* This.Nodes.Add(lcKey,4,lcKey+"4","Refacere") + If plCursor + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"1",4,"Export",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"2",4,"Listare",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"3",4,"Modificare",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"4",4,"Refacere",lcKey) + Endif +Case lnTip=3 && balanta\inreg. +*!* lcProp="cnt"+lcKey +*!* This.AddProperty(lcProp,0) +*!* This.Nodes.Add(lcKey,4,lcKey+"1","Export") +*!* This.Nodes.Add(lcKey,4,lcKey+"2","Listare") +*!* This.Nodes.Add(lcKey,4,lcKey+"3","Modificare") +*!* This.Nodes.Add(lcKey,4,lcKey+"4","Refacere") + If plCursor + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"1",4,"Export",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"2",4,"Listare",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"3",4,"Modificare",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"4",4,"Refacere",lcKey) + Endif +Case lnTip=4 && vizualizare +*!* lcProp="cnt"+lcKey +*!* This.AddProperty(lcProp,0) +*!* This.Nodes.Add(lcKey,4,lcKey+"1","Export") +*!* This.Nodes.Add(lcKey,4,lcKey+"2","Listare") +*!* This.Nodes.Add(lcKey,4,lcKey+"3","Modificare") +*!* This.Nodes.Add(lcKey,4,lcKey+"4","Stergere") +*!* This.Nodes.Add(lcKey,4,lcKey+"5","Vizualizare inreg. proprii") +*!* This.Nodes.Add(lcKey,4,lcKey+"6","Vizualizare toate inreg.") + If plCursor + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"1",4,"Export",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"2",4,"Listare",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"3",4,"Modificare",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"4",4,"Stergere",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"5",4,"Vizualizare inreg.proprii",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"6",4,"Vizualizare tot",lcKey) + ENDIF +Case lnTip=5 && personalizat +*!* lcProp="cnt"+lcKey +*!* This.AddProperty(lcProp,0) +*!* This.Nodes.Add(lcKey,4,lcKey+"1","Export") +*!* This.Nodes.Add(lcKey,4,lcKey+"2","Listare") +*!* This.Nodes.Add(lcKey,4,lcKey+"3","Modificare") +*!* This.Nodes.Add(lcKey,4,lcKey+"4","Stergere") +*!* This.Nodes.Add(lcKey,4,lcKey+"7","Altele...") +*!* This.Nodes.Add(lcKey,4,lcKey+"8","Altele...") + If plCursor + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"1",4,"Export",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"2",4,"Listare",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"3",4,"Modificare",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"4",4,"Stergere",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"7",4,"Altele...",lcKey) + Insert Into CRSOBIECTE (CHEIE,NIVEL,EXPLICATIE,TATA) Values(lcKey+"8",4,"Altele...",lcKey) + Endif +Endcase +Endproc +************************************************************************ \ No newline at end of file diff --git a/COMUN/programe/anaf_efactura.prg b/COMUN/programe/anaf_efactura.prg new file mode 100644 index 0000000..50e4208 --- /dev/null +++ b/COMUN/programe/anaf_efactura.prg @@ -0,0 +1,3806 @@ +#DEFINE LF CHR(10) +#DEFINE CRLF CHR(13)+CHR(10) + +#DEFINE CT_SUCCES 1 +#DEFINE CT_INSUCCES -1 + + +*!* 12.08.2024 +*!* ParseEFactura - discount factura, discount linie + +*!* 21.08.2024 +*!* xml2PdfAnaf - tratare Invoice / CreditNote + +*!* 03.12.2024 +*!* AnafeFactura.RefreshToken, SaveToken apeleaza AnafeFacturaServer.RefreshToken, SaveToken +*!* AnafeFacturaServer.RefreshToken - automat daca data expirarii este mai mare sau egala, fara sa mai apara formularul de Actualizare +*!* astfel incat si pe server sa se apeleze automat daca expira tokenul + +*!* 07.01.2025 +*!* UpdateDbFactura - corectie double byte characters la mesaj_raspuns +*!* RefreshToken - tratare eroare cu Try Catch + +*!* 26.03.2025 +*!* SendEfactura - uploadb2c pentru persoane fizice len(codfiscal) = 13 + +*!* 20.05.2025 +*!* DescarcareRaspunsuri - se afiseaza eroare daca nu sunt drepturi in spv + +*!* 13.03.2026 +*!* Validarea si xml2pdfanaf se fac cu serviciul autentificat cu token efactura api.anaf.ro in loc de serviciul neautentificat https://webservicesp.anaf.ro/ +*!* serviciul neautentificat nu mai raspundea + +********************************* +* Se apeleaza din ROACONT > Borderou eFactura +* Intoarce .T. daca descarcarea zip efactura si actualizarea efactura in baza de date s-au realizat cu succes +********************************* +PROCEDURE efactura_client + LPARAMETERS tnZile, tlFortareRaspunsuri, tlTest + + LOCAL lnExitCode, lcHost, lcPassword, lcUser, lnIsServer, lnFortareRaspunsuri, lnZile, llSucces + Local loAnaf As 'AnafeFacturaServer' + Local lcErrorMessage, llFortareRaspunsuri, llServer, loEx, llTest + + lcHost = '' + lcUser = IIF(TYPE('gcS') = 'C', m.gcS, '') + lcPassword = '' + llServer = .F. + lnZile = IIF(EMPTY(m.tnZile), 60, m.tnZile) + llFortareRaspunsuri = m.tlFortareRaspunsuri + llTest = m.tlTest + llSucces = .F. + + TRY + loAnaf = Createobject('AnafeFacturaServer', m.llServer, m.lcHost, m.lcuser, m.lcPassword) + loAnaf.ltest = m.llTest + llSucces = loAnaf.Run(m.lnZile, m.llFortareRaspunsuri) + + IF loAnaf.lError + goLog.Log(loAnaf.cErrorMessage) + ENDIF + CATCH TO loEx + lnExitCode = 1 + lcErrorMessage = TTOC(DATETIME(),1) + ' Eroare: ' + TRANSFORM(loEx.ErrorNo) + ' ' + loEx.Message + ' Continut: ' + loEx.LineContents + + ' Linia: ' + TRANSFORM(loEx.LineNo) + ' Program: ' + loEx.Procedure + WAIT WINDOW m.lcErrorMessage NOWAIT + AMESSAGEBOX(m.lcErrorMessage) + This.Log(m.lcErrorMessage) + ENDTRY + + RETURN m.llSucces +ENDPROC && efactura_client + +Define Class AnafeFacturaServer As Custom + dLastRunDate1 = {} && dataora inceput pentru ultima citire a raspunsurilor + dLastRunDate2 = {} && dataora sfarsit pentru ultima citire a raspunsurilor + nLastRunDays = 0 && numarul de zile pentru citirea raspunsurilor + nLastRunSucces = 0 && succes la ultima citire a raspunsurilor + + cLogFile = '' + + cToken = '' + cRefreshToken = '' + dTokenGendate = {} + dTokenExpdate = {} + cTokenUrl = '' + + cCodFiscal = '' && cod fiscal contribuabil fara atribut fiscal + lTest = .F. && .T. = transmite eFactura TEST + + cResponsesPath = '' && Citire raspunsuri. Calea unde se salveaza fisierele xml primite, semnatura MFIN, pdf generat de ANAF: z:\e-factura\\ \\ 0) + IF m.llSucces + scrie_optiune('EFACTURA_LASTRUN_DATE1', ttoc(This.dLastRunDate1), 'Efactura data inceput cand au fost verificate raspunsurile SPV') + scrie_optiune('EFACTURA_LASTRUN_DATE2', ttoc(This.dLastRunDate2), 'Efactura data sfarsit cand au fost verificate raspunsurile SPV') + scrie_optiune('EFACTURA_LASTRUN_DAYS', ALLTRIM(STR(This.nLastRunDays)), 'Efactura cate zile de raspunsuri au fost verificate ultima data') + scrie_optiune('EFACTURA_LASTRUN_SUCCES', ALLTRIM(STR(This.nLastRunSucces)), 'Efactura succes la ultima verificare de raspunsuri SPV') + ENDIF + + ENDPROC && PreRun + + ***************************** + PROCEDURE PostRun + LPARAMETERS tlSucces + Local llSucces, lnHandle + + This.nLastRunSucces = IIF(m.llSucces, 1, 0) + This.dLastRunDate2 = DATETIME() + + lnHandle = This.ConnectROA() + llSucces = (m.lnHandle > 0) + IF m.llSucces + scrie_optiune('EFACTURA_LASTRUN_SUCCES', ALLTRIM(STR(This.nLastRunSucces)), 'Efactura succes la ultima verificare de raspunsuri SPV') + scrie_optiune('EFACTURA_LASTRUN_DATE2', ttoc(This.dLastRunDate2), 'Efactura data sfarsit cand au fost verificate raspunsurile SPV') + scrie_optiune('EFACTURA_LASTRUN_SUCCES', IIF(m.tlSucces, "1", "0"), 'Efactura succes la ultima verificare de raspunsuri SPV') + ENDIF + + ENDPROC && PostRun + + ******************************* + * Verifica daca programul este conectat la baza de date + ******************************* + PROCEDURE IsConnected + LOCAL lcSql, llSucces + LOCAL loEx as Exception + Local lcErrorMessage + + + llSucces = .F. + lcSql = "SELECT sysdate FROM dual" + + TRY + llSucces = goExecutor.oExecuta(m.lcSql) + CATCH TO loEx + lcErrorMessage = TTOC(DATETIME(),1) + ' Eroare: ' + TRANSFORM(loEx.ErrorNo) + ' ' + loEx.Message + ' Continut:' + loEx.LineContents + + ' Linia: ' + TRANSFORM(loEx.LineNo) + ' Program: ' + loEx.Procedure + This.cErrorMessage = m.lcErrorMessage + This.Log(m.lcErrorMessage) + ENDTRY + + RETURN m.llSucces + + ENDPROC && IsConnected + + PROCEDURE ReadSettingsFromDb + + Local lcSql, llSucces, lcCodFiscal + Local lcErrorMessage, lcFirma, lcLastRunDate1, lcLastRunDate2, lcPath, lnHandle, lnSucces + Local lnZipDatabase + *:Global gcFirma, gnAn, gnLuna + + llSucces = .F. + + TEXT TO lcSql TEXTMERGE NOSHOW +select MAX(cod_fiscal) as cod_fiscal, MAX(firma) AS firma from syn_v_nom_firme where UPPER(schema) = '<>' AND STERS = 0 AND (E_MAMA = 1 OR (E_MAMA = 0 AND ID_MAMA IS NULL)) + ENDTEXT + + lnHandle = This.ConnectROA() + llSucces = (m.lnHandle > 0) + IF m.llSucces + lnSucces = actualizeaza_optiuni() + llSucces = (lnSucces = CT_SUCCES) + + IF m.llSucces + lcCodFiscal = '' + lcFirma = '' + llSucces = goExecutor.oExecuta(m.lcSql, "cFirmaTemp") + IF m.llSucces + lcCodFiscal = ALLTRIM(NVL(cFirmaTemp.cod_fiscal, '')) + lcFirma = ALLTRIM(NVL(cFirmaTemp.firma, '')) + This.cCodFiscal = UPPER(ALLTRIM(GetNrFromString(NVL(m.lcCodFiscal,'')))) + IF TYPE('gcFirma') = 'C' AND EMPTY(m.gcFirma) + gcFirma = m.lcFirma + ENDIF + ENDIF + USE IN (SELECT('cFirmaTemp')) + ENDIF + IF m.llSucces + IF TYPE('gnAn') = 'N' AND EMPTY(m.gnAn) + lcSql = "SELECT AN, LUNA FROM CALENDAR WHERE AN*12 + LUNA = (SELECT MAX(AN*12+LUNA) FROM CALENDAR)" + llSucces = goExecutor.oExecuta(m.lcSql, 'cCalendarTemp') + IF m.llSucces + gnAn = cCalendarTemp.an + gnLuna = cCalendarTemp.luna + ENDIF + USE IN (SELECT('cCalendarTemp')) + ENDIF + ENDIF + lnSucces = This.DisconnectROA() + llSucces = (lnSucces = CT_SUCCES) + ENDIF + + IF m.llSucces + This.cResponsesPath = ADDBS(ALLTRIM(NVL(citeste_optiune("EFACTURA_RESPONSESPATH"), ''))) && RASPUNSURI && \\raspunsuri\ + This.cSendPath = ADDBS(ALLTRIM(NVL(citeste_optiune("EFACTURA_SENDPATH"),''))) && FACTURI DE TRIMIS && \\emise\ + + This.cSaveFurnizoriPath = ADDBS(ALLTRIM(NVL(citeste_optiune("EFACTURA_SAVE_FURNIZORI_PATH"), ''))) && \\furnizori\\ \\ + This.cSaveFurnizoriFile = ALLTRIM(citeste_optiune("EFACTURA_SAVE_FURNIZORI_FILE")) && __ + This.cSaveClientiPath = Addbs(ALLTRIM(NVL(citeste_optiune("EFACTURA_SAVE_CLIENTI_PATH"), ''))) && \\clienti\\ \\ + This.cSaveClientiFile = ALLTRIM(citeste_optiune("EFACTURA_SAVE_CLIENTI_FILE")) && ___ + This.nSaveFile = INT(VAL(ALLTRIM(citeste_optiune("EFACTURA_SAVE")))) && 1 + This.nSaveAnafPdfFile = INT(VAL(ALLTRIM(citeste_optiune("EFACTURA_SAVE_ANAF_PDF")))) && 1 + + This.cServerPath = ADDBS(ALLTRIM(NVL(citeste_optiune("EFACTURA_SERVER_PATH"),''))) && C:\ROA-EFACTURA\ + This.cNetworkPath = ADDBS(ALLTRIM(NVL(citeste_optiune("EFACTURA_NETWORK_PATH"),''))) && W:\ + + lcPath = IIF(This.lServer, this.cServerPath, this.cNetworkPath) + This.cSaveFurnizoriPath = STRTRAN(STRTRAN(This.cSaveFurnizoriPath, '', m.lcPath, 1, 1, 1), '\\', '\', 1, 10, 1) + This.cSaveClientiPath = STRTRAN(STRTRAN(This.cSaveClientiPath, '', m.lcPath, 1, 1, 1), '\\', '\', 1, 10, 1) + + This.cResponsesPath = ADDBS(ALLTRIM(NVL(citeste_optiune("EFACTURA_RESPONSESPATH"),''))) && RASPUNSURI && \raspunsuri\ + This.cSendPath = ADDBS(ALLTRIM(NVL(citeste_optiune("EFACTURA_SENDPATH"),''))) && FACTURI DE TRIMIS && \emise\ + + This.cResponsesPath = STRTRAN(STRTRAN(This.cResponsesPath, '', m.lcPath, 1, 1, 1), '\\', '\', 1, 10, 1) + This.cResponsesPath = STRTRAN(This.cResponsesPath,'', UPPER(This.cUser),1,1,1) + This.cResponsesPath = This.cResponsesPath + IIF(this.lTest, 'test\', '') + This.cSaveLogsPath = This.cResponsesPath + 'logs\' + + This.cSendPath = STRTRAN(STRTRAN(This.cSendPath, '', m.lcPath, 1, 1, 1), '\\', '\', 1, 10, 1) + This.cSendPath = STRTRAN(This.cSendPath,'', UPPER(This.cUser),1,1,1) + This.cSendPath = This.cSendPath + IIF(this.lTest, 'test\', '') + This.cSendInvalidPath = This.cSendPath + 'invalid\' + This.cSendOkPath = This.cSendPath + 'ok\' + + lnZipDatabase = INT(VAL(ALLTRIM(citeste_optiune("EFACTURA_ZIP_DATABASE")))) && 1 + This.lZipDatabase = (m.lnZipDatabase = 1) + + lcLastRunDate1 = ALLTRIM(NVL(citeste_optiune("EFACTURA_LASTRUN_DATE1"), '')) + This.dLastRunDate1 = Iif(!Empty(m.lcLastRunDate1), CTOT(m.lcLastRunDate1), {//::}) + lcLastRunDate2 = ALLTRIM(NVL(citeste_optiune("EFACTURA_LASTRUN_DATE2"), '')) + This.dLastRunDate2 = Iif(!Empty(m.lcLastRunDate2), CTOT(m.lcLastRunDate2), {//::}) + This.nLastRunDays = INT(VAL(ALLTRIM(NVL(citeste_optiune("EFACTURA_LASTRUN_DAYS"), '')))) + This.nLastRunSucces = INT(VAL(ALLTRIM(NVL(citeste_optiune("EFACTURA_LASTRUN_SUCCES"), '')))) + + ************ + * Actualizeaza Token automat si citeste Token din baza de date + * This.GetToken() + This.RefreshTokenAuto() + ELSE + lcErrorMessage = 'ReadSettingsFromDb Eroare la initializarea setarilor' + This.cErrorMessage = m.lcErrorMessage + This.lError = .T. + ENDIF + + This.Log('This.nSaveFile ' + TRANSFORM(This.nSaveFile) + CHR(13) + CHR(10) + ; + 'This.nSaveAnafPdfFile ' + TRANSFORM(This.nSaveAnafPdfFile ) + CHR(13) + CHR(10) + ; + 'This.cServerPath ' + ALLTRIM(This.cServerPath) + CHR(13) + CHR(10) + ; + 'This.cNetworkPath ' + ALLTRIM(This.cNetworkPath) + CHR(13) + CHR(10) + ; + 'This.cSaveFurnizoriPath ' + ALLTRIM(This.cSaveFurnizoriPath ) + CHR(13) + CHR(10) + ; + 'This.cSaveClientiPath ' + ALLTRIM(This.cSaveClientiPath ) + CHR(13) + CHR(10) + ; + 'This.cResponsesPath ' + ALLTRIM(This.cResponsesPath ) + CHR(13) + CHR(10) + ; + 'This.cSaveLogsPath ' + ALLTRIM(This.cSaveLogsPath )) + RETURN m.llSucces + + ENDPROC && ReadSettingsFromDb + ********************* + * + ********************* + PROCEDURE InitDB + LPARAMETERS tnZile + * tnZile: cate zile de raspunsuri se descarca, pentru a se verifica si cu baza de date cu tnZile de raspunsuri + LOCAL llSucces, lnZile + lnZile = IIF(EMPTY(m.tnZile), 60, m.tnZile) + 10 && adaug 10 zile pentru precautie + + lnHandle = This.ConnectROA() + llSucces = (m.lnHandle > 0) + IF m.llSucces + pdData2 = DATE()+1 + pdData1 = DATE() - m.lnZile + + TEXT TO lcSql NOSHOW +select a.*, cast(NULL as varchar2(1000)) as factura_detalii, 0 as modificat + from anaf_efactura a + where a.data_raspuns between ?pdData1 and ?pdData2 + ENDTEXT + + llSucces = goExecutor.oExecuta(m.lcSql,"anaf_efactura") + IF m.llSucces + SELECT anaf_efactura + INDEX on id_incarcare TAG id_inc + INDEX on id_descarcare TAG id_desc + ENDIF + + lnSucces = This.DisconnectROA() + ENDIF && lnSucces + + RETURN m.llSucces + ENDPROC && InitDB + + PROCEDURE ConnectROA + Local lnSucces + + IF This.lConnected + * Nu ma conectez la baza de date daca sunt deja conectat (ex: Daca se apeleaza programul din ROACONT si sunt deja conectat la baza de date) + lnSucces = CT_SUCCES + ELSE + lnSucces = IIF(goConn.Connect() > 0, CT_SUCCES, CT_INSUCCES) + ENDIF + Return lnSucces + ENDPROC + + PROCEDURE DisconnectROA + Local lnSucces + + IF This.lConnected + lnSucces = CT_SUCCES + ELSE + lnSucces = goConn.Disconnect() + ENDIF + RETURN m.lnSucces + ENDPROC && DisconnectROA + + Procedure Log + Lparameters tcText, tcProgram + + IF TYPE('goLog') = 'O' + goLog.Log(tcText, tcProgram) + ELSE + lcText = Ttoc(Datetime(),3) + ' ' + IIF(!EMPTY(m.tcProgram), m.tcProgram + ' ', '') + m.tcText + CRLF + Strtofile(m.lcText, This.cLogFile, 1) + ENDIF + Endproc && Log + + + ******************************************************************* + * Actualizare automata Token + ******************************************************************* + FUNCTION RefreshTokenAuto + + This.GetToken() + + IF (This.lTokenAutoRefresh AND !EMPTY(NVL(This.cToken,'')) AND !EMPTY(NVL(This.cRefreshToken, ''))) AND (This.dTokenExpdate <= DATE()) + This.RefreshToken() + ENDIF + + This.GetToken() + ENDFUNC + + ************************************************************************ + Function GetToken + Local lcRefreshToken, lcToken, lcTokenExpDate, lcTokenGenDate, ldTokenExpDate, ldTokenGenDate + + lnTokenAutoRefresh = INT(VAL(ALLTRIM(citeste_optiune("ANAF_TOKEN_AUTO_REFRESH")))) && 1 + This.lTokenAutoRefresh = (m.lnTokenAutoRefresh = 1) + + * TokenJWT are dimensiunea mai mare. Il salvez in optiuni.varvalue2 + lcToken = Alltrim(Nvl(citeste_optiune('ANAF_TOKEN', .T.), '')) + lcRefreshToken = Alltrim(Nvl(citeste_optiune('ANAF_REFRESH_TOKEN', .T.), '')) + + lcTokenGenDate = Alltrim(Nvl(citeste_optiune('ANAF_TOKEN_GENDATE'), '')) + ldTokenGenDate = Iif(!Empty(m.lcTokenGenDate), Ctod(m.lcTokenGenDate), {}) + lcTokenExpDate = Alltrim(Nvl(citeste_optiune('ANAF_TOKEN_EXPDATE'), '')) + ldTokenExpDate = Iif(!Empty(m.lcTokenExpDate), Ctod(m.lcTokenExpDate), {}) + ldTokenExpDate = Iif(!Empty(m.ldTokenExpDate), m.ldTokenExpDate, m.ldTokenGenDate + 90) + lcTokenURL = Alltrim(Nvl(citeste_optiune('ANAF_URL_TOKEN'), '')) + + This.cToken = m.lcToken + This.cRefreshToken = m.lcRefreshToken + This.dTokenGendate = m.ldTokenGenDate + This.dTokenExpdate = m.ldTokenExpDate + This.cTokenUrl = m.lcTokenURL + + Do Case + Case Empty(m.lcToken) + This.Log('Token nu este configurat.') + Case m.ldTokenExpDate <= Date() + This.Log('Token expirat.') + Endcase + + Return This.cToken + Endfunc + +*************************** +* Salveaza tokenul in baza de date optiuni firma +*************************** + Procedure SaveToken + scrie_optiune('ANAF_TOKEN', This.cToken, 'ANAF Token SPV eFactura', .T.) + scrie_optiune('ANAF_REFRESH_TOKEN', This.cRefreshToken, 'ANAF Refresh Token SPV eFactura', .T.) + scrie_optiune('ANAF_TOKEN_GENDATE', Dtoc(This.dTokenGendate), 'ANAF Token SPV eFactura data generare') + scrie_optiune('ANAF_TOKEN_EXPDATE', Dtoc(This.dTokenExpdate), 'ANAF Token SPV eFactura data expirare') + Endproc && SaveToken + + +* Intoarce tokenul de acces la ANAF (eFactura) daca este salvat sau obtine un nou token +* Se apeleaza din formularul anaf_token.do_executa + Function newToken + Local lcTokenURL + + This.Log('Introduceti in calculator tokenul USB cu semnatura electronica' + LF + ; + 'Se va deschide pagina ANAF de generare token. Introduceti PIN-ul pentru semnatura electronica.' + LF + ; + 'Copiati codurile "Token" si "Refresh Token" afisate si completati-le in ' + m.gcGeneralIniFile) + + lcTokenURL = This.cTokenUrl + + open_default_app(m.gcGeneralIniFile) + open_default_app(m.lcTokenURL) + + Endfunc + +* Actualizeaza data expirarii tokenului ANAF eFactura +* Se apeleaza din formularul anaf_token.do_executa + Function refreshToken + LPARAMETERS tcMesaj + * tcMesaj (OUT) + + Local loHTTP As 'winHTTP.winHTTPrequest.5.1' + Local lcRefreshToken, lcResponse, lcURL, llSucces, loJson + llSucces = .F. + lcRefreshToken = Alltrim(This.cRefreshToken) + tcMesaj = '' + If Empty(m.lcRefreshToken) + tcMesaj = 'Completati Refresh Token' + This.Log(m.tcMesaj) + Else + lcURL = This.cTokenUrl + + TRY + loHTTP = Createobject('winHTTP.winHTTPrequest.5.1') + loHTTP.Open('POST', lcURL, .F.) + loHTTP.setRequestHeader("Content-Type", "application/x-www-form-urlencoded") + loHTTP.Send([refresh_token=] + m.lcRefreshToken) + + CATCH + loHTTP = Createobject('MSXML2.XMLHTTP.6.0') + loHTTP.Open('POST', lcURL, .F.) + loHTTP.setRequestHeader("Content-Type", "application/x-www-form-urlencoded") + loHTTP.Send([refresh_token=] + m.lcRefreshToken) + ENDTRY + + llSucces = (TYPE('loHTTP') = 'O') + IF m.llSucces + lcResponse = loHTTP.ResponseText + llSucces = (loHTTP.Status = 200) + ENDIF + If !m.llSucces + lcResponse = loHTTP.StatusText + Endif + + If m.llSucces + TRY + loJson = nfjsonread(m.lcResponse) + CATCH TO loEx + llSucces = .F. + tcMesaj = 'Refresh token - eroare extragere raspuns json: ' + loEx.message + CRLF + m.lcResponse + this.Log(m.tcMesaj) + ENDTRY + If Type('loJson.expires_in') <> 'U' And Type('loJson.access_token') <> 'U' And Type('loJson.refresh_token') <> 'U' + This.dTokenExpdate = Date() + Int(Val(Transform(loJson.expires_in)) / 24 / 3600) && 90 zile + This.dTokenGendate = Date() + This.cToken = loJson.access_token + This.cRefreshToken = loJson.refresh_token + + This.SaveToken() + tcMesaj = 'S-a regenerat token-ul, cu valabilitate pana la ' + Dtoc(This.dTokenExpdate) + This.Log(m.tcMesaj) + ELSE + tcMesaj ='Nu s-a regenerat token-ul! Generati un token nou!' + LF + m.lcResponse + This.Log(m.tcMesaj) + Endif + ELSE + tcMesaj = 'Nu s-a regenerat token-ul! Status = ' + Transform(loHTTP.Status) + CRLF + m.lcResponse + This.Log(m.tcMesaj, 0 + 48, _Screen.Caption) + Endif + Endif + + Return m.llSucces + Endfunc + + + ********************* + * Trimite fisiere xml eFactura in SPV + ********************* + PROCEDURE VizeFacturaXml + + CREATE CURSOR cXmlFiles (ales N(1), filepath c(250), procesat N(1), stare c(100), mesaj c(250), extern N(1)) + + loXmlFiles = CREATEOBJECT("anaf_efactura_xml", This) + loXmlFiles.Show(1) + + USE IN (SELECT('cXmlFiles')) + + ENDPROC && VizeFacturaXml + + ******************************** + * Genereaza xml efactura, valideaza xml si trimite la API ANAF + * parseaza un director cu xml efactura si le trimite la API ANAF + ******************************** + Procedure TrimiteFacturaXML + LPARAMETERS tcFile, tlValidare, tlValidareOnline, tlNuTrimiteEFacturaANAF, tlExtern + + Local loXmlEFactura As 'ExportEFactura' + Local lcErrorMessage, lcExecutionStatus, lcFile, lcIndexIncarcare, lcMesaj, llSucces, llValid, loEx + Local loXML, lcMesajValidare, llExtern, lcToken + PRIVATE pcIdIncarcare, pcMesajTrimis, pnTrimis + + LOCAL loReturn + + lcFile = m.tcFile + lcMesaj = '' + lcMesajValidare = '' + + lcToken = This.cToken + + loReturn = Createobject("empty") + AddProperty(loReturn, "lSucces", .F.) + AddProperty(loReturn, "cFile", '') + AddProperty(loReturn, "cResponse", '') + AddProperty(loReturn, "nStatus", 0) + + llExtern = m.tlExtern + + llValid = .T. + IF m.tlValidare + llSilentios = .T. + loXmlEFactura = CREATEOBJECT('ExportEFactura', m.llSilentios, m.lcToken) + llValid = loXmlEFactura.ValidareEFactura(m.lcFile, @lcMesajValidare, m.tlValidareOnline) + ENDIF + + IF m.llValid AND !m.tlNuTrimiteEFacturaANAF + loReturn = This.SendEfactura(m.lcFile, m.llExtern) + llSucces = loReturn.lSucces + AddProperty(loReturn, "cIdIncarcare", '') + AddProperty(loReturn, "cMesaj", '') + + If m.llSucces + pcMesajTrimis = Iif(This.lTest, 'TEST ', '') + loXML = Null + Try + loXML = nfxmlread(loReturn.cResponse) + Catch To loEx + lcErrorMessage = loEx.Message + Endtry + + lcExecutionStatus = '' + lcIndexIncarcare = '' + lcErrorMessage = '' + If Type('loxml.header._attr_.executionstatus') <> 'U' + lcExecutionStatus = loXML.Header._attr_.executionstatus + Endif + If Type('loxml.header._attr_.index__incarcare') <> 'U' + lcIndexIncarcare = loXML.Header._attr_.index__incarcare + Endif + If Type('loxml.header.errors._attr_.errorMessage') <> 'U' + lcErrorMessage = loXML.Header.errors._attr_.ErrorMessage + Endif + + Do Case + Case lcExecutionStatus = "0" + pcIdIncarcare = m.lcIndexIncarcare + pnTrimis = 1 + pcMesajTrimis = m.pcMesajTrimis + 'Transmis cu succes. Index incarcare = ' + m.pcIdIncarcare + loReturn.cIdIncarcare = m.pcIdIncarcare + loReturn.lSucces = .T. + + Case !Empty(m.lcErrorMessage) + pcIdIncarcare = '' + pnTrimis = 1 + pcMesajTrimis = m.pcMesajTrimis + Iif(This.lTest, 'TEST ', '') + 'Eroare. ' + m.lcErrorMessage + + Case [VALID] $ Upper(loReturn.cResponse) + pcIdIncarcare = '' + pnTrimis = 0 + pcMesajTrimis = m.pcMesajTrimis + loReturn.cResponse + + Otherwise + pcMesajTrimis = m.pcMesajTrimis + Iif(This.lTest, 'TEST ', '') + 'Eroare. ' + m.lcErrorMessage + pcIdIncarcare = '' + pnTrimis = 1 + Endcase + + loReturn.cMesaj = m.pcMesajTrimis + ' ' + m.lcMesajValidare + Else + pcMesajTrimis = ' Eroare transmitere - Http Status: ' + Transform(loReturn.nStatus) + ' Http Response: ' + Alltrim(Transform(loReturn.cResponse)) + ' ' + loReturn.cResponse + loReturn.cResponse = pcMesajTrimis + loReturn.cMesaj = m.pcMesajTrimis + ' ' + m.lcMesajValidare + This.Log(loReturn.cResponse) + ENDIF + ELSE + AddProperty(loReturn, "cIdIncarcare", '') + AddProperty(loReturn, "cMesaj", '') + + pcMesajTrimis = '. Nu s-a trimis fisierul la ANAF.' + loReturn.cResponse = m.pcMesajTrimis + + IF m.llValid + loReturn.cMesaj = 'Nu s-a trimis fisierul. ' + m.lcMesajValidare + loReturn.lSucces = .T. + llSucces = .T. + ELSE + loReturn.cMesaj = 'Eroare validare. Nu s-a trimis fisierul: ' + m.lcMesajValidare + loReturn.lSucces = .F. + llSucces = .F. + ENDIF + ENDIF + + RETURN loReturn + + Endproc && TrimiteFacturaXML + +* Genereaza xml eFactura, valideaza xml si trimite la ANAF + Function SendEfactura + Lparameters tcFile, tlExtern, tlMesaj + * tcFile: calea catre fisierul xml efactura / sau xml mesaj + * tlExtern: daca se apeleaza cu parametrul Extern=DA (pentru clientii externi) + * tlMesaj: daca mesajul este o factura sau un mesaj catre furnizor + + Local loEx As Exception + Local loHTTP As 'winHTTP.winHTTPrequest.5.1' + Local loReturn As "empty" + Local lcCodFiscal, lcExtern, lcFile, lcSend, lcServer, lcToken, llOk, llTest, llB2C + LOCAL lcCustomer, lcPartyLegal, lcCodFiscalClient + + loReturn = Createobject("empty") + AddProperty(loReturn, "lSucces", .F.) + AddProperty(loReturn, "cFile", '') + AddProperty(loReturn, "cResponse", '') + AddProperty(loReturn, "nStatus", 0) + + lcToken = This.cToken + lcCodFiscal = ALLTRIM(This.cCodFiscal) + llTest = This.lTest + llOk = .F. + lcFile = '' + + lcFile = Iif(Type('tcFile') = 'C' and !Empty(m.tcFile), m.tcFile, '') + loReturn.cFile = m.lcFile + lcExtern = Iif(m.tlExtern, '&extern=DA', '') + This.Log('SendEFactura: ' + m.lcFile) + If File(m.lcFile) + lcSend = Filetostr(m.lcFile) + + * Verific daca clientul este persoana fizica si folosesc upload2bc in loc de upload + lcCustomer = STREXTRACT(lcSend, '', '',1,1) + lcPartyLegal = STREXTRACT(lcCustomer, '', '',1,1) + lcCodFiscalClient = ALLTRIM(STREXTRACT(m.lcPartyLegal, '','',1,1)) + llB2C = (LEN(m.lcCodFiscalClient) = 13) && persoane fizice + + TRY + IF !m.tlMesaj + lcServer = [https://api.anaf.ro/] + Iif(m.llTest, [test], [prod]) + [/FCTEL/rest/upload] + IIF(m.llB2C,'b2c','') + [?standard=UBL&cif=] + m.lcCodFiscal + m.lcExtern + ELSE + lcServer = [https://api.anaf.ro/] + Iif(m.llTest, [test], [prod]) + [/FCTEL/rest/upload] + IIF(m.llB2C,'b2c','') + [?standard=RASP&cif=] + m.lcCodFiscal + ENDIF + + loHTTP = Createobject('winHTTP.winHTTPrequest.5.1') + loHTTP.Open('POST', lcServer, .F.) + loHTTP.setRequestHeader("Content-Type", "application/xml;") + loHTTP.setRequestHeader('Authorization', 'Bearer ' + m.lcToken) && 9b1f44af738c16aa10c78347b9a064857f034b03a20704a03c131b99f019cee5 + poLog.Log(m.lcServer) + + loHTTP.Send(m.lcSend) + + loReturn.nStatus = loHTTP.Status + loReturn.cResponse = loHTTP.ResponseText + loReturn.lSucces = (loHTTP.Status = 200) + + CATCH TO loEx + loReturn.lSucces = .F. + loReturn.cResponse = '' + ENDTRY + Else + loReturn.cResponse = '' + loReturn.lSucces = .F. + ENDIF + + This.Log('SendEFactura: ' + Transform(loReturn.nStatus) + ' ' + Transform(loReturn.lSucces) + ' ' + loReturn.cResponse) + Return loReturn + Endfunc + + * Genereaza xml mesaj catre furnizor si trimite la ANAF + Function SendMesaj + Lparameters tnIdIncarcare, tcMesaj + + LOCAL lnIdIncarcare, lcMesaj, llMesaj, loReturn, lcFile + lcFile = ADDBS(SYS(2023)) + FORCEEXT(SYS(2015), 'xml') + llMesaj = .T. + lcMesaj = Alltrim(XmlSpecialCharacters(RemoveCharacters(m.tcMesaj, .T.))) + lnIdIncarcare = ALLTRIM(NVL(m.tnIdIncarcare,'')) + +TEXT TO lcText TEXTMERGE NOSHOW + +
+ENDTEXT + STRTOFILE(m.lcText, m.lcFile) + + loReturn = This.SendEFactura(m.lcFile,,m.llMesaj) + IF FILE(m.lcFile) + DELETE FILE (m.lcFile) + ENDIF + RETURN loReturn + ENDFUNC + + ************************* + * Dezarhiveaza o arhiva si intoarce .T./.F. + ************************* + Procedure UnzipFile + Lparameters tcZipFile, tcDir, tcErrorMessage + * tcZipFile: arhiva zip cu detaliile raspunsului unei eFactura + * tcDir: IN/OUT directorul cu fisierele dezarhivate + * tcErrorMessage: OUT mesaj de eroare + + Local laZipTemp[1, 3], lcDir, lcFileName, llSucces, llSilent + tcErrorMessage = '' + llSilent = .T. + + IF TYPE('tcDir') <> 'C' OR EMPTY(NVL(m.tcDir, '')) + tcDir = ADDBS(JUSTPATH(m.tcZipFile)) + ENDIF + + This.Log('UnzipFile ' + m.tcZipFile) + llSucces = MyUnzip(m.tcZipFile, @tcDir, @tcErrorMessage, m.llSilent) + + Return m.llSucces + ENDPROC && UnzipFile + + ********************************* + * Proces ProcesCopiere: copiez arhiva zip intr-o structura de directoare, dezarhivez, transform xml in pdf + ********************************* + PROCEDURE ProcesareRaspunsuri + LPARAMETERS tlFortareRaspunsuri + + Local lcDir, lcDir2, lcErrorMessage, lcFile, lcFile2, lcFile2Semnatura, lcFilePdf, lcFileSemnatura + Local lcIdDescarcare, lcIdIncarcare, lcTipRaspuns, lcZipFile, llSucces, loEx, loFactura, llFortareRaspunsuri + + llFortareRaspunsuri = m.tlFortareRaspunsuri + + This.Log('Procesare Raspunsuri') + + * procesez server si nu este descarcat sau client (borderou eFactura ROACONT) si nu este procesat (completat detalii) + SELECT id_incarcare, id_descarcare, tip_mesaj_raspuns, filepath, procesat ; + FROM anaf_efactura WITH (BUFFERING = .T.) ; + WHERE ((This.lServer AND (procesat_server = 0 OR procesat = 0)) OR (!This.lServer AND (procesat = 0 OR modificat = 1))) AND ; + !EMPTY(NVL(filepath,'')) ; + ORDER BY id_incarcare ; + INTO CURSOR cRaspunsuriTemp + + This.Log('Procesare Raspunsuri ' + ALLTRIM(STR(RECCOUNT('cRaspunsuriTemp'))) + ' fisiere de procesat') + + llSucces = .T. + SELECT cRaspunsuriTemp + SCAN + lcIdIncarcare = ALLTRIM(id_incarcare) + lcIdDescarcare = ALLTRIM(id_descarcare) + lcZipFile = ALLTRIM(filepath) + lcTipRaspuns = UPPER(ALLTRIM(tip_mesaj_raspuns)) + + lcText = 'ProcesareRaspunsuri ' + ALLTRIM(STR(RECNO())) + '/' + ALLTRIM(STR(RECCOUNT())) + WAIT WINDOW m.lcText NOWAIT + This.Log(m.lcText) + + IF FILE(m.lcZipFile) + lcDir = '' + lcErrorMessage = '' + + llSucces = This.UnzipFile(m.lcZipFile, @lcDir, @lcErrorMessage) + + IF !m.llSucces + lcErrorMessage = 'ProcesareRaspunsuri Eroare dezarhivare detalii factura id_incarcare = ' + Alltrim(m.lcIdIncarcare) + '. ' + m.lcErrorMessage + This.cErrorMessage = m.lcErrorMessage + This.lError = .T. + WAIT WINDOW m.lcErrorMessage NOWAIT + This.Log(m.lcErrorMessage) + ELSE + TRY + lcFile = Addbs(m.lcDir) + m.lcIdIncarcare + '.xml' + lcFileSemnatura = Addbs(m.lcDir) + 'semnatura_' + m.lcIdIncarcare + '.xml' + + * Completez xml dezarhivat in anaf_efactura + lcDetalii = FILETOSTR(m.lcFile) + + llSucces = This.cUpdateDetalii(m.lcIdIncarcare, m.lcDetalii) + + IF !m.llSucces + lcErrorMessage = 'ProcesareRaspunsuri Eroare actualizare detalii id_incarcare ' + m.lcIdIncarcare + This.cErrorMessage = m.lcErrorMessage + This.lError = .T. + WAIT WINDOW m.lcErrorMessage NOWAIT + This.Log(m.lcErrorMessage) + ENDIF + + * Parsez doar FATURA PRIMITA/FACTURA TRIMISA + IF Inlist(m.lcTipRaspuns, 'FACTURA PRIMITA', 'FACTURA TRIMISA') AND FILE(m.lcFile) + loFactura = ParseEFactura(m.lcFile) + + ADDPROPERTY(loFactura, 'cIdIncarcare', m.lcIdIncarcare) + ADDPROPERTY(loFactura, 'cIdDescarcare', m.lcIdDescarcare) + ADDPROPERTY(loFactura, 'tip_mesaj_raspuns', m.lcTipRaspuns) + + llSucces = This.cUpdateFactura(loFactura) + + * Pe server, copiez arhiva zip, generez pdf in structura directoare custom + IF (This.nSaveFile = 1) AND ((This.lServer AND !EMPTY(NVL(This.cServerPath,''))) OR (!This.lServer AND !EMPTY(NVL(This.cNetworkPath,'')))) + lcFile2 = This.GetFacturaSavePath(loFactura, 'zip') + lcDir2 = ADDBS(JUSTPATH(m.lcFile2)) + lcFilePdf = m.lcDir2 + Juststem(m.lcFile2) + '.pdf' + If !File(m.lcFile2) + llSucces = This.SaveFile(m.lcZipFile, .F., m.lcDir2, JUSTFNAME(m.lcFile2)) + ENDIF + IF (this.nSaveAnafPdfFile = 1) AND !FILE(m.lcFilePdf) + lcFilePdf = This.xml2PdfAnaf(m.lcFile, m.lcFilePdf) + ENDIF + + This.cUpdateProcesatServer(m.lcIdIncarcare) + ELSE + * Marchez procesat server si daca nu trece prin procesul de procesare, pentru ca altfel il procesez din nou si urmatoarea data (dezarhivare, copiere) + This.cUpdateProcesatServer(m.lcIdIncarcare) + ENDIF && This.nSaveFile = 1 + ENDIF && lcTipRaspuns + + DELETE FILE(m.lcFile) + DELETE FILE(m.lcFileSemnatura) + + Catch To loEx + llSucces = .F. + + lcErrorMessage = 'ProcesareRaspunsuri Eroare la salvarea datelor extrase din xml eFactura. ' + 'Eroare: ' + TRANSFORM(loEx.ErrorNo) + ' ' + loEx.Message + ' Continut:' + loEx.LineContents + + ' Linia: ' + TRANSFORM(loEx.LineNo) + ' Program: ' + loEx.Procedure + This.cErrorMessage = m.lcErrorMessage + This.lError = .T. + WAIT WINDOW m.lcErrorMessage NOWAIT + This.Log(m.lcErrorMessage) + ENDTRY + ENDIF + ENDIF + ENDSCAN && cRaspunsuriTemp + + USE IN (SELECT('cRaspunsuriTemp')) + + RETURN m.llSucces + ENDPROC && ProcesareRaspunsuri + + ********************************* + * RASPUNSURI FACTURI + * Trebuie sa descarc ERORI FACTURI TRIMISE si FACTURI PRIMITE si sa citesc detalii (mesaj eroare, numar, data factura, detalii factura furnizor) + * Citesc lista de raspunsuri ANAF + * Descarc detaliile fiecarui raspuns neprocesat + * Salvez arhiva zip detalii in directorul zilei curente + ********************************* + Procedure DescarcareRaspunsuri + Lparameters tnZile, tlFortareRaspunsuri +* tnZile : Cate zile de raspunsuri de la ANAF +* tlFortareRaspunsuri: .T. = se proceseaza si mesajele + detaliile deja salvate si procesate, default .F. + + Local lcFile2, lcSelect, llSucces, lnMesaj, lnMesaje, lnRecno, lnZile, loAnafMesaj, loEx, loJson + Local loReturn, loMesaj, lnFortareRaspunsuri, loEx As Exception + + llFortareRaspunsuri = Iif(Type('tlFortareRaspunsuri') = 'L', m.tlFortareRaspunsuri, .F.) + + lcSelect = Select() + llSucces = .F. + + ************************************************* + Local loHTTP As 'winHTTP.winHTTPrequest.5.1' + Local loReturn As "empty" + Local lcServer, llTest, lcToken, lcCodFiscal, lnZile, lcText + + llTest = This.lTest + lcToken = This.cToken + lcCodFiscal = This.cCodfiscal + lnZile = Iif(!Empty(m.tnZile), Min(m.tnZile, 60), 60) + + ltEndTime = GetUtcTime(DATETIME()-60) && 60 de secunde in urma, ca sa fiu sigur? ca ceasul calculatorului nu este inainte fata de timpul serverului ANAF. Poate fi si cu mai mult de 1 minut + ltStartTime = ltEndTime - m.lnZile*24*60*60 + + lcStartTime = ALLTRIM(STR(Datetime2UnixTime(m.ltStartTime))) + '000' + lcEndTime = ALLTRIM(STR(Datetime2UnixTime(m.ltEndTime))) + '000' + + loHTTP = Createobject('winHTTP.winHTTPrequest.5.1') + + lnPagina = 1 + lnNumarTotalPagini = 99999 + + DO WHILE m.lnPagina <= m.lnNumarTotalPagini + TEXT TO lcServer TEXTMERGE NOSHOW +https://api.anaf.ro/<>/FCTEL/rest/listaMesajePaginatieFactura?startTime=<>&endTime=<>&cif=<>&pagina=<> + ENDTEXT + + lcText = 'Descarcare Raspunsuri ultimele ' + TRANSFORM(m.lnZile) + ' zile : ' + TTOC(m.ltStartTime,3) + '-' + TTOC(m.ltEndTime,3) + WAIT WINDOW m.lcText NOWAIT + This.Log(m.lcText + ' ' + m.lcServer) + + loHTTP.Open('GET', lcServer, .F.) + loHTTP.setRequestHeader("Content-Type", "application/xml;") + loHTTP.setRequestHeader('Authorization', 'Bearer ' + m.lcToken) + loHTTP.Send() + + llSucces = (loHttp.Status = 200) + IF !m.llSucces + lcErrorMessage = This.cUser + ' ' + 'DescarcareRaspunsuri Eroare la citirea raspunsurilor! Solutii: 1. Reincercati operatia cu o perioada mai mica. 2. Actualizati/Regenerati token-ul de acces daca este expirat.' + LF + loHTTP.ResponseText + This.cErrorMessage = m.lcErrorMessage + This.lError = .T. + This.Log(m.lcErrorMessage) + EXIT + ENDIF + + llSucces = This.SaveFile(loHttp.ResponseText, .T.,This.cSaveLogsPath,'response_json_' + TTOC(Datetime(),1) + '.txt') + + TRY + loJson = nfjsonread(loHTTP.ResponseText) + CATCH TO loEx + llSucces = .F. + lcErrorMessage = This.cUser + ' ' + 'DescarcareRaspunsuri ' + LF + ' Eroare: ' + TRANSFORM(loEx.ErrorNo) + ' ' + loEx.Message + ' Continut:' + loEx.LineContents + + ' Linia: ' + TRANSFORM(loEx.LineNo) + ' Program: ' + loEx.Procedure + This.cErrorMessage = m.lcErrorMessage + This.lError = .T. + This.Log(m.lcErrorMessage) + ENDTRY + + IF TYPE('loJson') <> 'O' + llSucces = .F. + lcErrorMessage = This.cUser + ' ' + 'DescarcareRaspunsuri ' + LF + ' Eroare: ' + TRANSFORM(loEx.ErrorNo) + ' ' + loEx.Message + ' Continut:' + loEx.LineContents + + ' Linia: ' + TRANSFORM(loEx.LineNo) + ' Program: ' + loEx.Procedure + This.cErrorMessage = m.lcErrorMessage + This.lError = .T. + This.Log(m.lcErrorMessage) + EXIT + ENDIF + + If Type('loJson.numar_total_pagini') = 'N' + lnNumarTotalPagini = loJson.numar_total_pagini + ENDIF + + If Type('loJson.eroare') = 'C' And !Empty(loJson.eroare) + llSucces = .F. + lcErrorMessage = This.cUser + LF + loJson.eroare + This.cErrorMessage = m.lcErrorMessage + ; + IIF(ATC('Nu exista mesaje in intervalul selectat', loJson.eroare) > 0, '', ; + LF + 'Posibile cauze/solutii: Token expirat (regenerati tokenul), semnatura electronica expirata (reinnoiti semnatura in SPV)' + ; + LF + ; + LF + 'Apasati pe butonul Chatbot (stanga) pentru alte solutii!') + This.lError = .T. + This.Log(m.lcErrorMessage) + EXIT + ENDIF + + If Type('loJson.mesaje') = 'U' + llSucces = .F. + lcErrorMessage = This.cUser + ' ' + 'DescarcareRaspunsuri Eroare: Nu exista informatia [mesaje] in raspuns.' + LF + loHttp.ResponseText + This.cErrorMessage = m.lcErrorMessage + This.lError = .T. + This.Log(m.lcErrorMessage) + EXIT + ENDIF + + lnMesaje = Alen(loJson.mesaje) + For lnMesaj = 1 To m.lnMesaje + lcText = This.cUser + ' ' + 'DescarcareRaspunsuri Raspuns ' + Alltrim(Str(m.lnMesaj)) + '/' + Alltrim(Str(m.lnMesaje)) + WAIT WINDOW m.lcText NOWAIT + This.Log(m.lcText) + + loMesaj = loJson.mesaje[m.lnMesaj] + AddProperty(loMesaj, 'recno', m.lnMesaj) + AddProperty(loMesaj, 'recc', m.lnMesaje) + + lcIdIncarcare = IIF(Type('loMesaj.id_solicitare') = 'C' And !Empty(Nvl(loMesaj.id_solicitare, '')), loMesaj.id_solicitare, '') + IF !EMPTY(m.lcIdIncarcare) + * Nu procesez mesajele deja descarcate, decat daca fortez procesarea tuturor mesajelor + IF m.llFortareRaspunsuri OR (This.lServer AND !This.cIsDescarcat(m.lcIdIncarcare)) OR (!This.lServer AND !This.cIsProcesat(m.lcIdIncarcare)) + loAnafMesaj = This.ProceseazaMesaj(loMesaj) + llSucces = !loAnafMesaj.lEroare + IF loAnafMesaj.lEroare + This.lError = .T. + This.cErrorMessage = loAnafMesaj.cEroare + ENDIF + ENDIF + ELSE + llSucces = .F. + lcErrorMessage = This.cUser + ' ' + 'DescarcareRaspunsuri Eroare: EMPTY(loMesaj.id_solicitare) Mesaj ' + Alltrim(Str(m.lnMesaj)) + '/' + Alltrim(Str(m.lnMesaje)) + This.cErrorMessage = m.lcErrorMessage + This.lError = .T. + This.Log(m.lcErrorMessage) + EXIT + ENDIF && empty + Endfor && lnMesaj + + lnPagina = m.lnPagina + 1 + ENDDO && .T. + + Select (m.lcSelect) + Return m.llSucces + Endproc && DescarcareRaspunsuri + +***************************** +* Dezarhiveaza mesajul, parseaza xml efactura trimisa/primita si salveaza pe disk si in baza de date +* Intoarce un obiect AnafMesaj (cEroare, lEroare) +**************************** + Procedure ProceseazaMesaj + Lparameters toMesaj + + Local loDate As "empty" + Local lcDirectory, lcFile, lcTip, lcTipRaspuns, llSucces, lnAn, lnLuna, lnMin, lnOra, lnSec, lnZi + Local loAnafMesaj, loDetalii, lcFilePath + + loAnafMesaj = This.NewMesaj() + + With toMesaj + loAnafMesaj.cIdIncarcare = .id_solicitare + + lnAn = Val(Substr(.data_creare, 1, 4)) + lnLuna = Val(Substr(.data_creare, 5, 2)) + lnZi = Val(Substr(.data_creare, 7, 2)) + lnOra = Val(Substr(.data_creare, 9, 2)) + lnMin = Val(Substr(.data_creare, 11, 2)) + lnSec = Val(Substr(.data_creare, 13, 2)) + loAnafMesaj.dDataRaspuns = Datetime(m.lnAn, m.lnLuna, m.lnZi, m.lnOra, m.lnMin, m.lnSec) + + loAnafMesaj.cMesajRaspuns = .detalii + loAnafMesaj.cTipMesajRaspuns = .tip + loAnafMesaj.cIdDescarcare = .Id + loAnafMesaj.cCodFiscalEmitent = Strextract(.detalii, [cif_emitent=], [ ],1,1+2) + loAnafMesaj.cCodFiscalBeneficiar = Strextract(.detalii, [cif_beneficiar=], [ ],1,1+2) + loAnafMesaj.nTest = Iif(This.lTest, 1, 0) && server TEST ANAF + loAnafMesaj.nFacturaEmisa = IIF(UPPER(ALLTRIM(.tip)) = 'FACTURA PRIMITA', 0, 1) + + lcTipRaspuns = Alltrim(Upper(loAnafMesaj.cTipMesajRaspuns)) + + + * Adaug mesajul in cRaspunsuri + This.cAddMesaj(loAnafMesaj) + + + lcTip = Iif('ERORI'$m.lcTipRaspuns, 'ERORI', Iif('PRIMIT'$m.lcTipRaspuns, 'PRIMITE', Iif('TRIMIS'$m.lcTipRaspuns, 'TRIMISE', IIF('MESAJ CUMPARATOR TRANSMIS'$m.lcTipRaspuns, 'MESAJE', 'ALTELE')))) + lcFile = loAnafMesaj.cIdIncarcare + '_' + loAnafMesaj.cIdDescarcare + '.zip' && C:\EFACTURA\PRIMITE\20240112\1234_1234\ + + IF this.lServer + lcDirectory = This.cResponsesPath + m.lcTip + '\' + Dtos(Date()) + '\' + ELSE + lcDirectory = GetPdfPath('EFACTURA', m.lcTip) + ENDIF + + lcFilePath = m.lcDirectory + m.lcFile + + * Daca nu exista fisierul zip descarcat de alt program + IF !FILE(m.lcFilePath) + * Descarca detalii raspuns + loDetalii = This.DownloadDetaliiEFactura(loAnafMesaj.cIdDescarcare, ' Descarcare detalii factura ID: ' + loAnafMesaj.cIdDescarcare) + llSucces = loDetalii.lSucces + + If !m.llSucces + loAnafMesaj.cEroare = 'Eroare descarcare detalii factura id_descarcare = ' + Alltrim(loAnafMesaj.cIdDescarcare) + ; + '. Cod eroare: ' + Alltrim(Transform(loDetalii.nStatus)) + ' ' + loDetalii.cErrorMessage + loAnafMesaj.lEroare = .T. + Else + If 'eroare' $ Lower(loDetalii.cResponse) + loAnafMesaj.cEroare = 'Eroare descarcare detalii raspuns id_descarcare = ' + Alltrim(loAnafMesaj.cIdDescarcare) + '. ' + loDetalii.cResponse + loAnafMesaj.lEroare = .T. + Endif && 'eroare' $ Lower(loDetalii.cResponse) + Endif && m.llSucces loDetalii.lSucces + + IF loAnafMesaj.lEroare + This.Log('Proceseaza Mesaj ' + loAnafMesaj.cEroare) + ELSE + llSucces = This.SaveFile(loDetalii.cResponse, .T., m.lcDirectory, m.lcFile) + This.Log('Proceseaza Mesaj salvare fisier: ' + Transform(m.llSucces) + ' ' + m.lcFilePath) + ENDIF && lEroare + + ENDIF && !file + ENDWITH && toMesaj + + * Salvez arhiva pe disk + IF FILE(m.lcFilePath) + This.Log('Proceseaza Mesaj. Exista fisierul: ' + m.lcFilePath) + loAnafMesaj.lEroare = .F. + llSucces = .T. + * Actualizez cRaspunsuri.descarcat, filepath + lnDescarcatServer = IIF(this.lServer, 1, 0) && marchez descarcat doar daca am descarcat pe server + This.cUpdateDescarcat(loAnafMesaj.cIdIncarcare, m.lnDescarcatServer, m.lcFilePath) + ENDIF + + Return loAnafMesaj + Endproc && ProceseazaMesaj + +* Salveaza fisiere/variabile pe disk + Procedure SaveFile + Lparameters tcFile, tlVariable, tcDirectory, tcFileName +* tcFile: calea catre fisierul sursa +* tlVariable: .T. daca tcFile este o variabila cu continutul fisierului +* tcFileName: numele fisierului destinatie + Local lcFile2, llSucces, loEx As Exception + + llSucces = .T. + lcFileName2 = Iif(!Empty(m.tcFileName), m.tcFileName, Justfname(m.tcFile)) + lcFile2 = Addbs(m.tcDirectory) + m.lcFileName2 + If !Empty(m.tcDirectory) And !Directory(m.tcDirectory) + Try + Md (m.tcDirectory) + Catch To loEx + llSucces = .F. + This.Log('SaveFile ' + 'Eroare: ' + TRANSFORM(loEx.ErrorNo) + ' ' + loEx.Message + ' Continut:' + loEx.LineContents + + ' Linia: ' + TRANSFORM(loEx.LineNo) + ' Program: ' + loEx.Procedure) + Endtry + Endif + If !Empty(m.tcDirectory) And Directory(m.tcDirectory) + Try + If m.tlVariable + Strtofile(m.tcFile, m.lcFile2) + Else + Copy File (m.tcFile) To (m.lcFile2) + ENDIF + This.Log('SaveFile ' + m.lcFile2) + llSucces = .T. + Catch To loEx + llSucces = .F. + This.Log('SaveFile ' + 'Eroare: ' + TRANSFORM(loEx.ErrorNo) + ' ' + loEx.Message + ' Continut:' + loEx.LineContents + + ' Linia: ' + TRANSFORM(loEx.LineNo) + ' Program: ' + loEx.Procedure) + Endtry + Endif + Return m.llSucces + Endproc && SaveFile + + ************ + * Intoarce calea de salvare xml intr-un director comun, definit in baza de date OPTIUNI + ************ + Procedure GetFacturaSavePath + Lparameters toFactura, tcExt + * tcExt: optional, default xml + + Local loReturn As "empty" + Local lcAn, lcDataAct, lcFile2, lcFile2Semnatura, lcFilePdf, lcFileSemnatura, lcFurnizor + Local lcIdDescarcare, lcIdIncarcare, lcLuna, lcLuna2, lcLuna3, lcNumarAct, lcSaveFile, lcSavePath + Local llSucces, lcExt, lcFirma + + llSucces = .F. + lcExt = IIF(!EMPTY(m.tcExt), m.tcExt, 'xml') + + lcTip = ALLTRIM(UPPER(toFactura.tip_mesaj_raspuns)) && FACTURI TRIMISE / FACTURI PRIMITE + llFurnizor = 'PRIMIT'$m.lcTip + + IF m.llFurnizor + lcPartener = WindowsSpecialCharacters(toFactura.Furnizor) + lcSavePath = This.cSaveFurnizoriPath + lcSaveFile = This.cSaveFurnizoriFile + ELSE + lcPartener = WindowsSpecialCharacters(toFactura.Client) + lcSavePath = This.cSaveClientiPath + lcSaveFile = This.cSaveClientiFile + ENDIF + lcFirma = This.cUser + lcPartener = Alltrim(Left(Strtran(m.lcPartener, '.', '',1,100,1), 50)) + + lcAn = Alltrim(Str(Year(toFactura.dataact))) + lcLuna = c_luna(Month(toFactura.dataact)) + lcLuna3 = cluna3(Month(toFactura.dataact)) + lcLuna2 = Padl(Month(toFactura.dataact), 2, '0') + lcDataAct = Dtos(toFactura.dataact) + lcIdIncarcare = toFactura.cIdIncarcare + lcIdDescarcare = toFactura.cIdDescarcare + lcNumarAct = Alltrim(WindowsSpecialCharacters(toFactura.numaract)) + + lcSavePath = Strtran(m.lcSavePath, '', m.lcAn, 1, 100, 1) + lcSavePath = Strtran(m.lcSavePath, '', m.lcAn, 1, 100, 1) + lcSavePath = Strtran(m.lcSavePath, '', m.lcIdIncarcare, 1, 100, 1) + lcSavePath = Strtran(m.lcSavePath, '', m.lcIdDescarcare, 1, 100, 1) + lcSavePath = Strtran(m.lcSavePath, '', m.lcLuna, 1, 100, 1) + lcSavePath = Strtran(m.lcSavePath, '', m.lcLuna3, 1, 100, 1) + lcSavePath = Strtran(m.lcSavePath, '', m.lcLuna2, 1, 100, 1) + lcSavePath = Strtran(m.lcSavePath, '', m.lcDataAct, 1, 100, 1) + lcSavePath = Strtran(m.lcSavePath, '', m.lcDataAct, 1, 100, 1) + lcSavePath = Strtran(m.lcSavePath, '', m.lcPartener, 1, 100, 1) + lcSavePath = Strtran(m.lcSavePath, '', m.lcPartener, 1, 100, 1) + lcSavePath = Strtran(m.lcSavePath, '', m.lcFirma, 1, 100, 1) + + lcSavePath = Addbs(m.lcSavePath) + + + If Empty(m.lcSaveFile) + lcFile2 = m.lcSavePath + m.lcIdIncarcare + '_' + m.lcIdDescarcare + '_' + m.lcDataAct + '_' + m.lcNumarAct + '.' + m.lcExt + Else + lcFile2 = m.lcSavePath + Strtran(m.lcSaveFile, '', m.lcIdIncarcare, 1, 100, 1) + lcFile2 = Strtran(m.lcFile2, '', m.lcIdDescarcare, 1, 100, 1) + lcFile2 = Strtran(m.lcFile2, '', m.lcDataAct, 1, 100, 1) + lcFile2 = Strtran(m.lcFile2, '', m.lcPartener, 1, 100, 1) + lcFile2 = Strtran(m.lcFile2, '', m.lcPartener, 1, 100, 1) + If EMPTY(Justext(Lower(m.lcFile2))) + lcFile2 = m.lcFile2 + '.' + m.lcExt + Endif + ENDIF + + RETURN m.lcFile2 + + Endproc && GetFacturaSavePath + + +************************************ +* Intoarce un obiect tip ANAF_EFACTURA, doar informatiile din mesajul ANAF, pentru salvarea in baza de date +************************************ + Function NewMesaj + Local loMesaj + loMesaj= Createobject("empty") + AddProperty(loMesaj, 'nId', Null) + AddProperty(loMesaj, 'cIdIncarcare', Null) + AddProperty(loMesaj, 'cMesajRaspuns', Null) + AddProperty(loMesaj, 'dDataRaspuns', Null) + AddProperty(loMesaj, 'cMesajRaspuns', Null) + AddProperty(loMesaj, 'cTipMesajRaspuns', Null) + AddProperty(loMesaj, 'cIdDescarcare', Null) + AddProperty(loMesaj, 'cCodFiscalEmitent', Null) + AddProperty(loMesaj, 'cCodFiscalBeneficiar', Null) + AddProperty(loMesaj, 'cDetalii', Null) + AddProperty(loMesaj, 'nFacturaEmisa', Null) + AddProperty(loMesaj, 'nTest', 0) + AddProperty(loMesaj, 'lEroare', .F.) + AddProperty(loMesaj, 'cEroare', '') + + Return loMesaj + Endfunc && NewMesaj + + +* Citeste raspunsuri eFactura de la ANAF + Function ReadResponseEFactura + Lparameters tnZile + + Local loHTTP As 'winHTTP.winHTTPrequest.5.1' + Local loReturn As "empty" + Local lcServer, llTest, lcToken, lcCodFiscal, lnZile + llTest = This.lTest + lcToken = This.cToken + lcCodFiscal = This.cCodFiscal + lnZile = Iif(!Empty(m.tnZile), Min(m.tnZile, 60), 60) + + This.Log('ReadResponseEfactura: Citire raspunsuri ANAF ultimele ' + Alltrim(Str(m.lnZile)) + '...') + + Try + lcServer = [https://api.anaf.ro/] + Iif(m.llTest, [test], [prod]) + [/FCTEL/rest/listaMesajeFactura?zile=] + Alltrim(Str(m.lnZile)) + [&cif=] + m.lcCodFiscal && 1879855 + This.Log(m.lcServer) + loHTTP = Createobject('winHTTP.winHTTPrequest.5.1') + loHTTP.Open('GET', lcServer, .F.) + loHTTP.setRequestHeader("Content-Type", "application/xml;") + loHTTP.setRequestHeader('Authorization', 'Bearer ' + m.lcToken) + + loHTTP.Send() + Catch To loEx + This.Log('ReadResponseEfactura ' + loEx.Message) + Endtry + + loReturn = Createobject("empty") + AddProperty(loReturn, "lSucces", (loHTTP.Status = 200)) + AddProperty(loReturn, "cResponse", loHTTP.ResponseText) + AddProperty(loReturn, "nStatus", loHTTP.Status) + If loHTTP.Status <> 200 + loReturn.cResponse = loHTTP.StatusText && 403 Forbidden + Endif + This.Log('ReadResponseEfactura ' + Transform(loHTTP.Status)) + + Return loReturn + + Endfunc + +****************** +* Citeste detalii factura eFactura de la ANAF +* Intoarce un obiect cu cResponse (continutul arhivei zip) +***************** + Function DownloadDetaliiEFactura + Lparameters tcIdDescarcare, tcWaitWindowText +* tcIdDescarcare: Id descarcare ANAF +* tcWaitWindowText: optional, text pentru wait window: + + Local loHTTP As 'winHTTP.winHTTPrequest.5.1' + Local loReturn As "empty", loEx As Exception + Local lcServer, llTest, lcToken, lcCodFiscal, lcIdDescarcare, lcErrorMessage, lcWaitWindowText + llTest = This.lTest + lcToken = This.cToken + lcIdDescarcare = m.tcIdDescarcare + lcErrorMessage = '' + lcWaitWindowText = Iif(!Empty(m.tcWaitWindowText), m.tcWaitWindowText, 'Descarcare detalii factura ID: ' + m.tcIdDescarcare) + + WAIT WINDOW m.lcWaitWindowText NOWAIT + + Try + lcServer = [https://api.anaf.ro/] + Iif(m.llTest, [test], [prod]) + [/FCTEL/rest/descarcare?id=] + m.lcIdDescarcare + This.Log('DownloadDetaliieFactura ' + m.lcServer) + loHTTP = Createobject('winHTTP.winHTTPrequest.5.1') + loHTTP.Open('GET', lcServer, .F.) + loHTTP.setRequestHeader("Content-Type", "application/xml;") + loHTTP.setRequestHeader('Authorization', 'Bearer ' + m.lcToken) + + loHTTP.Send() + Catch To loEx + This.Log('DownloadDetaliieFactura ' + loEx.Message) + Endtry + + loReturn = Createobject("empty") + AddProperty(loReturn, "lSucces", (loHTTP.Status = 200)) + If 'eroare' $ Lower(loHTTP.ResponseText) + lcResponse = loHTTP.ResponseText + lcErrorMessage = m.lcResponse + Else + lcResponse = loHTTP.ResponseBody + Endif + AddProperty(loReturn, "cResponse", m.lcResponse) && arhiva zip sau json cu text eroare {'eroare' : 'Factura cu id 1112 nu exista'} + AddProperty(loReturn, "nStatus", loHTTP.Status) + AddProperty(loReturn, "cErrorMessage", m.lcErrorMessage) + + This.Log('DownloadDetaliieFactura ' + Transform(loHTTP.Status) + ' ' + m.lcErrorMessage) + Return loReturn + + Endfunc + + +***************** +* Adauga/actualizeaza datele si detaliile facturii in baza de date ANAF_EFACTURA +* Foloseste obiect returnat din ParseEFactura +* Intoarce SUCCES = .T. +***************** + Procedure cUpdateFactura + Parameters toFactura, tcCursor + + *toFactura: obiect din ParseEFactura + * tcCursor: optional, anaf_efactura sau un cursor asemanator, temporar + + LOCAL llSucces, lcSql, lcCursor + lcCursor = IIF(EMPTY(m.tcCursor), 'anaf_efactura', m.tcCursor) + + UPDATE (m.lcCursor) ; + set xnumar_act = toFactura.NumarAct, ; + xdata_act = toFactura.DataAct, ; + xdata_scad = toFactura.DataScad, ; + xdescriere = toFactura.Detalii, ; + xdetalii_plata = Left(toFactura.Detaliiplata, 500), ; + xtotal_fara_tva = toFactura.TotalFaraTva, ; + xtotal_tva = toFactura.TotalTva, ; + xtotal_tva_ron = toFactura.TotalTvaRON, ; + xtotal_cu_tva = toFactura.TotalCuTva, ; + xdiscount_fara_tva = toFactura.DiscountFaraTVA, ; + xtaxe_fara_tva = toFactura.TaxeFaraTVA, ; + xvaloare_fara_tva = toFactura.ValoareFaraTVA, ; + xtotal_de_plata = toFactura.TotaldePlata, ; + xnume_valuta = toFactura.Valuta, ; + xfurnizor = toFactura.Furnizor, ; + xclient = toFactura.Client, ; + factura_detalii = toFactura.FacturaDetalii, ; + creditnote = toFactura.CreditNote, ; + cod_fiscal_emitent = IIF(EMPTY(NVL(cod_fiscal_emitent,'')), UPPER(ALLTRIM(GetNrFromString(NVL(toFactura.CodFiscalFurnizor,'')))), cod_fiscal_emitent), ; + cod_fiscal_beneficiar = IIF(EMPTY(NVL(cod_fiscal_beneficiar,'')), UPPER(ALLTRIM(GetNrFromString(NVL(toFactura.CodFiscalClient,'')))), cod_fiscal_beneficiar), ; + modificat = 1 ; + where id_incarcare = toFactura.cIdIncarcare + llSucces = .T. + + TABLEUPDATE(1,.F., m.lcCursor) + + RETURN m.llSucces + Endproc && cUpdateFactura + +***************** +* Adauga/actualizeaza un raspuns FACTURA PRIMITA/TRIMISA/EROARE in ANAF_EFACTURA +* Mesajul intoarce ANAF_EFACTURA.ID +* Intoarce SUCCES = .T. +***************** + Procedure UpdateRaspuns + Parameters toMesaj + Private pnId + pnId = 0 + + TEXT TO lcSql NOSHOW +BEGIN + pack_anaf.UpdateRaspuns(?.cIdIncarcare, + ?.dDataRaspuns, + ?.cMesajRaspuns, + ?.cTipMesajRaspuns, + ?.cIdDescarcare, + ?.cCodFiscalEmitent, + ?.cCodFiscalBeneficiar, + ?.cDetalii, + ?.nTest, + ?@pnId); +end; + ENDTEXT + With toMesaj + llSucces = goExecutor.oExecuta(m.lcSql) + Endwith + If m.llSucces + toMesaj.nId = m.pnId + Endif + + Return m.llSucces + Endproc && UpdateRaspuns + +***************** +* Actualizeaza un ANAF_EFACTURA.DETALII, DETALII_ZIP (arhiva xml efactura) dupa ce se descarca arhiva cu detaliile unui raspuns +* Intoarce SUCCES = .T. +***************** + Procedure UpdateRaspunsDetalii + Parameters pcIdDescarcare, pcDetalii, pcDetaliiZip + + Local lcSql, llSucces +* Fac update direct pe tabela in loc de pack_anaf.UpdateRaspunsDetalii, pentru ca da cateaodata eroare (BUG oracle) + llSucces = goExecutor.oExecuta('update anaf_efactura set detalii = ?pcDetalii, detalii_zip = ?pcDetaliiZip where id_descarcare = ?pcIdDescarcare') + + If .F. && am facut direct update pe tabela + lcSql = [BEGIN pack_anaf.UpdateRaspunsDetalii(?pcIdDescarcare, ?pcDetalii, ?pcDetaliiZip); end;] + llSucces = goExecutor.oExecuta(m.lcSql) + If !m.llSucces +* Da eroare cateodata, asa ca reincerc update direct pe tabela + If AMESSAGEBOX('Doriti sa reincercati actualizarea detaliilor?',4+32,_Screen.Caption) = 6 + llSucces = goExecutor.oExecuta('update anaf_efactura set detalii = ?pcDetalii, detalii_zip = ?pcDetaliiZip where id_descarcare = ?pcIdDescarcare') + Endif + Endif + Endif + + Return m.llSucces + Endproc && UpdateRaspunsDetalii + +***************** +* Marcheaza ANAF_EFACTURA.PROCESAT = 1 ca sa nu se mai descarce arhiva cu detaliile raspunsului, daca mesajul a fost procesat +***************** + Procedure UpdateProcesat + Parameters tcIdDescarcare, tnProcesat +* tnIdEfactura: ANAF_EFACTURA.ID_DESCARCARE +* tnProcesat: OPTIONAL, DEFAULT (1) + + Local lcSql, llSucces + Private pnProcesat + pnProcesat = Iif(!Empty(m.tnProcesat) And Type('tnProcesat') = 'N' And Inlist(m.tnProcesat,0,1), m.tnProcesat, 1) + + lcSql = [BEGIN pack_anaf.UpdateProcesat(?tcIdDescarcare, ?pnProcesat); END;] + + llSucces = goExecutor.oExecuta(m.lcSql) + Return m.llSucces + Endproc && UpdateProcesat + + ***************** + * Intoarce .T. daca un IdDescarcare a fost descarcat + ***************** + Function cIsDescarcat + Parameters tcIdIncarcare + Local llDescarcat + + IF SEEK(m.tcIdIncarcare, 'anaf_efactura', 'id_inc') + llDescarcat = (anaf_efactura.descarcat = 1) + ENDIF + + RETURN m.llDescarcat + Endfunc && cIsDescarcat + + ***************** + * Intoarce .T. daca un IdIncarcare a fost procesat + ***************** + Function cIsProcesat + Parameters tcIdIncarcare + Local llProcesat + + IF SEEK(m.tcIdIncarcare, 'anaf_efactura', 'id_inc') + llProcesat = (anaf_efactura.procesat = 1) + ENDIF + + RETURN m.llProcesat + Endfunc && cIsProcesat + + ***************** + * Completeaza raspunsuri.descarcat, filepath, dupa salvarea arhivei raspuns + ***************** + PROCEDURE cAddMesaj + PARAMETERS toMesaj + + LOCAL lcSql, llSucces + + + TEXT TO lcSql NOSHOW +merge into anaf_efactura a using dual b ON (a.id_incarcare = ?tcIdIncarcare) +when not matched then + INSERT (id_incarcare, id_descarcare) VALUES (?tcIdIncarcare, ?tcIdDescarcare) + ENDTEXT +*!* llSucces = goExecutor.oExecuta(m.lcSql) + +*!* IF m.llSucces + WITH toMesaj + IF !SEEK(.cIdIncarcare,'anaf_efactura', 'id_inc') + INSERT INTO anaf_efactura (id_incarcare, id_descarcare,tip_mesaj_raspuns,mesaj_raspuns,data_raspuns,cod_fiscal_emitent,cod_fiscal_beneficiar,factura_emisa,test) ; + VALUES (.cIdIncarcare, .cIdDescarcare, .cTipMesajRaspuns,.cMesajRaspuns,.dDataRaspuns,.cCodFiscalEmitent,.cCodFiscalBeneficiar,.nFacturaEmisa,.nTest) + + TABLEUPDATE(1,.F.,'ANAF_EFACTURA') + ENDIF + ENDWITH + llSucces = .T. +*!* ENDIF + RETURN m.llSucces + ENDPROC && AddMesaj + + ***************** + * Completeaza raspunsuri.descarcat, filepath, dupa salvarea arhivei raspuns + ***************** + PROCEDURE cUpdateDescarcat + PARAMETERS tcIdIncarcare, tnDescarcat, tcFilePath + + TEXT TO lcSql noshow +UPDATE anaf_efactura SET descarcat = ?tnDescarcat, filepath = ?tcFilePath WHERE id_incarcare = ?tcIdIncarcare + ENDTEXT + +*!* llSucces = goExecutor.oExecuta(m.lcSql) +*!* IF m.llSucces + UPDATE anaf_efactura SET descarcat = m.tnDescarcat, filepath = m.tcFilePath, modificat = 1 WHERE id_incarcare = m.tcIdIncarcare + + TABLEUPDATE(1,.F.,'ANAF_EFACTURA') + llSucces = .T. +*!* ENDIF + RETURN m.llSucces + ENDPROC + + ***************** + * Completeaza raspunsuri.descarcat, filepath, dupa salvarea arhivei raspuns + ***************** + PROCEDURE cUpdateProcesat + PARAMETERS tcIdIncarcare + + UPDATE anaf_efactura SET procesat = 1, modificat = 1 WHERE id_incarcare = m.tcIdIncarcare + + TABLEUPDATE(1,.F.,'ANAF_EFACTURA') + + llSucces = .T. + + RETURN m.llSucces + ENDPROC + + ***************** + * Completeaza anaf_efactura.procesat_server = 1, dupa procesarea arhivei pe servers sau in directorul din retea + ***************** + PROCEDURE cUpdateProcesatServer + PARAMETERS tcIdIncarcare + + UPDATE anaf_efactura SET procesat_server = 1, modificat = 1 WHERE id_incarcare = m.tcIdIncarcare + + TABLEUPDATE(1,.F.,'ANAF_EFACTURA') + llSucces = .T. + + RETURN m.llSucces + ENDPROC + + ***************** + * Completeaza anaf_efactura.detalii (continutul fisierului xml din raspuns) + ***************** + PROCEDURE cUpdateDetalii + PARAMETERS tcIdIncarcare, tcDetalii + + UPDATE anaf_efactura SET detalii = m.tcDetalii, modificat = 1 WHERE id_incarcare = m.tcIdIncarcare + + TABLEUPDATE(1,.F.,'ANAF_EFACTURA') + llSucces = .T. + + RETURN m.llSucces + ENDPROC + + + ***************** + * actualizeaza anaf_efactura + ***************** + PROCEDURE UpdateDb + LPARAMETERS tcCursor + + LOCAL lcSql, llSucces, lnSucces, lcSelect, lcCursor + + lcSelect = SELECT() + lcCursor = IIF(EMPTY(m.tcCursor), 'anaf_efactura', m.tcCursor) + + llSucces = .T. + + lnSucces = This.ConnectROA() + + IF m.lnSucces = CT_SUCCES + * Actualizez datele doar pentru facturile care nu au fost procesate (fie de catre server, fie de catre clienti) + SELECT * FROM (m.lcCursor) WITH (BUFFERING = .T.) WHERE modificat = 1 OR procesat = 0 INTO CURSOR crsUpdateTemp + + SELECT crsUpdateTemp + SCAN + SCATTER NAME loRec MEMO + lcText = 'Actualizare baza de date ' + ALLTRIM(STR(RECNO())) + '/' + ALLTRIM(STR(RECCOUNT())) + WAIT WINDOW m.lcText NOWAIT + This.Log(m.lcText) + llSucces = This.UpdateDbFactura(loRec) + + IF !m.llSucces + lcErrorMessage = This.cErrorMessage + IF LEN(m.lcErrorMessage) > 200 + IF This.lServer + WAIT WINDOW LEFT(m.lcErrorMessage,200) NOWAIT + ELSE + AMESSAGEBOX(m.lcErrorMessage,0+48,_Screen.Caption) + ENDIF + ELSE + WAIT WINDOW m.lcErrorMessage NOWAIT + ENDIF + + This.Log(m.lcErrorMessage) + IF !This.lServer + * daca imi da eroare la o factura, incerc sa le actualizez pe celelalte + IF AMESSAGEBOX('Continuati actualizarea celorlalte facturi in baza de date?',4+32,_screen.Caption) <> 6 + EXIT + ENDIF + ENDIF + ENDIF + ENDSCAN + + USE IN (SELECT('crsUpdateTemp')) + ENDIF && lnSucces + + lnSucces = This.DisConnectROA() + + SELECT (m.lcSelect) + RETURN m.llSucces + + ENDPROC && UpdateDb + + + ***************** + * actualizeaza o linie de factura in anaf_efactura + ***************** + PROCEDURE UpdateDbFactura + LPARAMETERS toFactura + * toFactura : obiect din anaf_efactura + + Local lcSql, llSucces, lcText + Local lcFacturaDetalii, lnIdEfactura, llZipDatabase + PRIVATE pcDetalii, pcDetaliiZip, pnId, pcDetaliiPlata + + lcText = StripNonAscii(NVL(toFactura.xdetalii_plata,''), '') + lcText = RemoveCharactersDB(m.lcText, .T.) + lcText = LEFT(ALLTRIM(m.lcText), 495) + toFactura.xdetalii_plata = m.lcText && LEFT(ALLTRIM(StripNonAscii(NVL(toFactura.xdetalii_plata,''), '')), 495) + + lcText = StripNonAscii(NVL(toFactura.xdescriere,''), '') + lcText = RemoveCharactersDB(m.lcText, .T.) + lcText = LEFT(ALLTRIM(m.lcText), 3995) + toFactura.xdescriere = m.lcText && LEFT(ALLTRIM(StripNonAscii(NVL(toFactura.xdescriere, ''), '')), 3995) + + lcText = StripNonAscii(NVL(toFactura.mesaj_raspuns,''), '') + lcText = RemoveCharactersDB(m.lcText, .T.) + lcText = LEFT(ALLTRIM(m.lcText), 250) + toFactura.mesaj_raspuns = m.lcText + + llZipDatabase = This.lZipDatabase && daca se salveaza zip efactura in baza de date + pnId = 0 + * Nu mai actualizez anaf_detalii in pack_anaf.UpdateFactura, pentru ca da eroare cateodata (cand sunt prea multe linii?) + * Actualizez separat liniile + pcDetalii = toFactura.Detalii + pcDetaliiZip = '' + + IF m.llZipDatabase AND TYPE('toFactura.filepath') = 'C' AND !EMPTY(NVL(toFactura.filepath,'')) AND FILE(NVL(toFactura.filepath,'')) + pcDetaliiZip = FILETOSTR(ALLTRIM(NVL(toFactura.filepath,''))) + ENDIF + lcFacturaDetalii = NVL(toFactura.factura_detalii, '') + toFactura.xnumar_act = RIGHT(ALLTRIM(toFactura.xnumar_act), 30) + toFactura.procesat = 1 && sa se actualizeze anaf_efactura.procesat + llSucces = .F. + + TEXT TO lcSql NOSHOW +begin + pack_anaf.AdaugaRaspunsFactura(v_id_incarcare => ?TRIM(.id_incarcare), + v_data_raspuns => ?.data_raspuns, + v_mesaj_raspuns => ?TRIM(.mesaj_raspuns), + v_tip_mesaj_raspuns => ?TRIM(.tip_mesaj_raspuns), + v_id_descarcare => ?TRIM(.id_descarcare), + v_cod_fiscal_emitent => ?TRIM(.cod_fiscal_emitent), + v_cod_fiscal_beneficiar => ?TRIM(.cod_fiscal_beneficiar), + v_detalii => ?.detalii, + v_test => ?.test, + v_numar_act => ?TRIM(.xnumar_act), + v_data_act => ?.xdata_act, + v_data_scad => ?.xdata_scad, + v_furnizor => ?TRIM(.xfurnizor), + v_client => ?TRIM(.xclient), + v_descriere => ?TRIM(LEFT(.xdescriere,3995)), + v_detalii_plata => ?.xdetalii_plata, + v_total_fara_tva => ?.xtotal_fara_tva, + v_total_tva => ?.xtotal_tva, + v_total_tva_ron => ?.xtotal_tva_ron, + v_total_cu_tva => ?.xtotal_cu_tva, + v_discount_fara_tva => ?.xdiscount_fara_tva, + v_taxe_fara_tva => ?.xtaxe_fara_tva, + v_valoare_fara_tva => ?.xvaloare_fara_tva, + v_total_de_plata => ?.xtotal_de_plata, + v_nume_valuta => ?TRIM(.xnume_valuta), + v_descarcat => ?.descarcat, + v_filepath => ?.filepath, + v_procesat_server => ?.procesat_server, + v_procesat => ?.procesat, + v_xmldetalii => ?.factura_detalii, + v_creditnote => ?.creditnote, + V_ID_EFACTURA => ?@pnId); +end; + ENDTEXT + + + * Daca len(FacturaDetalii) > 5000, da eroare si trebuie sa actualizez separat + IF LEN(m.lcFacturaDetalii) < 5000 AND LEN(m.pcDetalii) < 5000 + WITH toFactura + lnSucces = goExecutor.oExecute(m.lcSql) + llSucces = (m.lnSucces = CT_SUCCES) + ENDWITH + + IF !m.llSucces + SET STEP ON + This.lError = .T. + This.cErrorMessage = goExecutor.cEroare + ENDIF + + IF m.llSucces AND m.llZipDatabase AND !EMPTY(m.pcDetaliiZip) + * Fac update direct pe tabela in loc de pack_anaf.UpdateRaspunsDetalii, pentru ca da cateodata eroare (BUG oracle) + lcSql = 'update anaf_efactura set detalii_zip = ?pcDetaliiZip where id = ?pnId' + lnSucces = goExecutor.oExecute(m.lcSql) + llSucces = (m.lnSucces = CT_SUCCES) + IF !m.llSucces + + This.lError = .T. + This.cErrorMessage = goExecutor.cEroare + ENDIF + ENDIF + ENDIF && len + + ********************************************* + * Daca da eroare, mai incerc o data fara transmiterea detalii factura = lista articole. + * Articolele le salvez separat + IF !m.llSucces + * ORA-01460 + toFactura.factura_detalii = '' + toFactura.detalii = '' + + WITH toFactura + lnSucces = goExecutor.oExecute(m.lcSql) + llSucces = (m.lnSucces = CT_SUCCES) + ENDWITH + + IF !m.llSucces + SET STEP ON + This.lError = .T. + This.cErrorMessage = goExecutor.cEroare + ELSE + * Adaug fiecare linie in anaf_efactura_detalii pentru ca cateodata se blocheaza Oracle BUG, daca este > 4.000 caractere + llSucces = This.UpdateFacturaDetalii(m.pnId, m.lcFacturaDetalii) + ENDIF + + IF m.llSucces + * Fac update direct pe tabela in loc de pack_anaf.UpdateRaspunsDetalii, pentru ca da cateodata eroare (BUG oracle) + lcSql = 'update anaf_efactura set detalii = ?pcDetalii' + IIF(m.llZipDatabase and !EMPTY(m.pcDetaliiZip), ', detalii_zip = ?pcDetaliiZip', '') + ' where id = ?pnId' + lnSucces = goExecutor.oExecute(m.lcSql) + llSucces = (m.lnSucces = CT_SUCCES) + + IF !m.llSucces + SET STEP ON + This.lError = .T. + This.cErrorMessage = goExecutor.cEroare + ENDIF + ENDIF + ENDIF + + IF !m.llSucces + lcErrorMessage = 'UpdateDb Eroare la actualizarea datelor facturii pe server anaf_efactura.id = ' + TRANSFORM(m.pnId) + ' numar = ' + TRANSFORM(toFactura.xnumar_act) + CHR(13) + CHR(10) + ; + This.cErrorMessage + This.cErrorMessage = m.lcErrorMessage + This.lError = .T. + This.Log(m.lcErrorMessage) + ENDIF + + RETURN m.llSucces + + ENDPROC && UpdateDb + + ************************* + *** Adaug linii una cate una, din cauza ca uneori are eroare la UpdateFactura cu toate detaliile, cand sunt prea multe linii poate? + ************************* + Procedure UpdateFacturaDetalii + Parameters tnIdEfactura, tcFacturaDetalii + * tnIdEfactura: Id efactura + * tcFacturaDetalii: xml detalii factura + + Local lcSql, llSucces, lnCount, lnRec, lnRecs + Private poRec + + llSucces = .T. + lnCount = 0 + + * Verific daca exista deja introduse linii factura. Nu mai introduc + lcSql = "select count(*) from ANAF_EFACTURA_DETALII WHERE ID_EFACTURA = ?tnIdEfactura" + llSucces = goExecutor.oSelecteaza2Value(m.lcSql, @lnCount) + If Nvl(m.lnCount,0) > 0 + Return m.llSucces + Endif + + TEXT TO lcSql NOSHOW + INSERT INTO ANAF_EFACTURA_DETALII (ID_EFACTURA, NR, ARTICOL, DESCRIERE, DETALII, UM, CANTITATE, PRET, PROCTVA, TIPTVA, VALOAREFARATVA, DISCOUNTFARATVA) + VALUES (?tnIdEfactura, ?.NR, ?.ARTICOL, ?.DESCRIERE, ?.DETALII, ?.UM, ?.CANT, ?.PRET, ?.PROCTVA, ?.TIPTVA, ?.VALOAREFARATVA, ?.DISCOUNTFARATVA) + ENDTEXT + + + TRY + lnRecs = Xmltocursor(tcFacturaDetalii, "cFacturaDetaliiTemp") + + Select cFacturaDetaliiTemp + Scan + Scatter Name poRec Memo + Wait Window 'eFactura ID ' + Alltrim(Str(m.tnIdEfactura)) + ' Salvare articol ' + Alltrim(Str(Recno())) + '/' + Alltrim(Str(m.lnRecs)) + ' ...' Nowait + + With poRec + .descriere = RemoveCharactersDB(.descriere, .T.) + .descriere = LEFT(ALLTRIM(.descriere), 300) + .articol = RemoveCharactersDB(.articol, .T.) + .articol = LEFT(ALLTRIM(.articol), 300) + + lnSucces = goExecutor.oExecute(m.lcSql) + llSucces = (m.lnSucces = CT_SUCCES) + If !m.llSucces + This.cErrorMessage = goExecutor.cEroare + This.lError = .T. + Exit + Endif + Endwith + Endscan + + Use In (Select('cFacturaDetaliITemp')) + CATCH TO loEx + This.Log('tcFacturaDetalii ' + tcFacturaDetalii) + ENDTRY + + Return m.llSucces + + Endproc && UpdateFacturaDetalii + +**************** +* Genereaza pdf din xml eFactura pe serverul ANAF +**************** + Procedure xml2PdfAnaf + Lparameters tcFile, tcFisierPdf, tlVariable +* tcXml: xml eFactura +* tcFisierPdf : (optional) calea catre fisierul Pdf generat. Altfel, se intreaba utilizatorul +* tlVariable: .T. daca tcFile este o variabila cu continutul xml efactura + + Local loHTTP As 'winHTTP.winHTTPrequest.5.1' + Local loReturn As "empty" + Local lcMesaj, lcSend, lcServer, lcStare, llValid, lnBytes, lnMesaj, lnMesaje, loJson, loMessage, lcTip, lcToken + + loReturn = Createobject("empty") + AddProperty(loReturn, "lSucces", .F.) + AddProperty(loReturn, "cFile", '') + AddProperty(loReturn, "cResponse", '') + AddProperty(loReturn, "cResponseBody", '') + AddProperty(loReturn, "nStatus", 0) + AddProperty(loReturn, "cFilePdf", '') + If !Empty(m.tcFisierPdf) + loReturn.cFilePdf = m.tcFisierPdf + Endif + + lcSend = '' + If m.tlVariable + lcSend = m.tcFile + Else + If File(m.tcFile) + lcSend = Filetostr(m.tcFile) + Endif + ENDIF + lcTip = 'FACT1' + IF 'CreditNote'$m.lcSend + lcTip = 'FCN' + ENDIF + lcToken = This.cToken + +*!* lcServer = [https://webservicesp.anaf.ro/prod/FCTEL/rest/transformare/] + m.lcTip + [/DA] && serviciu neautentificat + lcServer = [https://api.anaf.ro/prod/FCTEL/rest/transformare/] + m.lcTip + [/DA] && serviciu autentificat + + loHTTP = Createobject('winHTTP.winHTTPrequest.5.1') + loHTTP.Open('POST', lcServer, .F.) + loHTTP.setRequestHeader("Content-Type", "text/plain") + loHTTP.setRequestHeader('Authorization', 'Bearer ' + m.lcToken) && 9b1f44af738c16aa10c78347b9a064857f034b03a20704a03c131b99f019cee5 + + Try + This.Log(m.lcServer) + Catch + Endtry + + + +* Elimin caracterele Chr(13), Chr(10) +* Da eroare la serviciul ANAF + lcSend = Strtran(m.lcSend, [ ], []) + +* Sterg xsi:schemaLocation pentru ca poate da request rejected +* xsi:schemaLocation="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2 ../../UBL-2.1(1)/xsd/maindoc/UBL-Invoice-2.1.xsd" + lcXsi = Strextract(lcSend, [xsi:schemaLocation="], [.xsd"], 1, 1) + lcSend = Strtran(m.lcSend, m.lcXsi, '', 1, 1, 1) + loHTTP.Send(m.lcSend) + + loReturn.nStatus = loHTTP.Status + loReturn.cResponse = loHTTP.ResponseText + loReturn.cResponseBody = loHTTP.ResponseBody + loReturn.lSucces = (loHTTP.Status = 200) + lcMesaj = '' + + If loReturn.lSucces + Do Case + Case ["stare"] $ Lower(loReturn.cResponse) +* Daca nu este valid xml + loJson = nfjsonread(loReturn.cResponse) + If Type('loJson.stare') = 'C' And !Empty(loJson.stare) + lcStare = Alltrim(Lower(loJson.stare)) + llValid = (m.lcStare == 'ok') + If !m.llValid + If Type('loJson.messages_vfpsafe_') = 'U' + lcMesaj = 'Fisierul nu s-a validat. Nu exista informatia [messages] in raspuns. ' + Chr(13) + Chr(10) + loReturn.cResponse + Else + lnMesaje = Alen(loJson.messages_vfpsafe_) + lcMesaj = '' + For lnMesaj = 1 To m.lnMesaje + loMessage = loJson.messages_vfpsafe_[m.lnMesaj] + If Type('loMessage.message') = 'C' + lcMesaj = lcMesaj + loMessage.Message + Chr(13) + Chr(10) + Endif + Endfor + Endif && messages + Endif && llValid + Endif + If !Empty(m.lcMesaj) + lcErrorMessage = 'XML2PDFANAF ' + m.lcMesaj + This.cErrorMessage = m.lcErrorMessage + This.lError = .T. + This.Log(m.lcErrorMessage) + Endif + Case 'request rejected' $ Lower(loReturn.cResponse) + lcErrorMessage = 'XML2PDFANAF Fisierul nu s-a validat.' + CRLF + loReturn.cResponse + This.cErrorMessage = m.lcErrorMessage + This.lError = .T. + This.Log(m.lcErrorMessage) + + Otherwise +* Daca este valid xml + If Empty(loReturn.cFilePdf) + loReturn.cFilePdf = Putfile('Fisier pdf', 'efactura.pdf', 'pdf') + Endif + + Try + Delete File loReturn.cFilePdf + Endtry + lnBytes = Strtofile(loReturn.cResponseBody, loReturn.cFilePdf) + This.Log('XML2PDFANAF ' + loReturn.cFilePdf) + + Endcase + Endif && loReturn.lSucces + + Return loReturn.cFilePdf + Endproc && Xml2PdfAnaf + + ********************* + * Trimite fisiere xml eFactura in SPV + ********************* + PROCEDURE VizSPV + +* [{"id":"100000000","detalii":"recipisa pentru CIF 8000000000, tip D112, numar_inregistrare INTERNT-130000000-2017/20-12-2017, perioada raportare 11.2017","cif":"8000000000","data_creare":"20.12.2017 12:00:00","id_solicitare":null,"tip":"RECIPISA"}],"cnp":"1111111111118","cui":"8000000000,8000000001,8000000002","serial":"xxxxxxxxxxxxxxxxxxx"} + +*!* CREATE CURSOR cMesajeSPV (ales N(1), id V(32), detalii V(250) null, cif V(20) null, data_creare T null, id_solicitare V(32) null, tip V(50) null, atasament W null, descarcat N(1), citit N(1), arhivat N(1)) +*!* lcSql = [select id, cif, data_creare, detalii, id_solicitare, tip, '' as atasament, citit, arhivat, descarcat from anaf_spv ] + ; +*!* IIF(!EMPTY(m.tnArhivat) and m.tnArhivat = 1, "", "where arhivat=0") +*!* llSucces = goExecutor.oExecuta(m.lcSql, 'cMesajeSPVTemp') + +*!* SELECT cMesajeSPV +*!* APPEND FROM DBF('cMesajeSPVTemp') +*!* INDEX on ID TAG Id DESCENDING +*!* USE IN (SELECT('cMesajeSPVTemp')) + + Local loFrmSPV As "anaf_spv" + Local lcFiltru, lcFiltruOriginal, lcGroup, lcOrder, lcSchema, lcSelect, llAfisare, llModParam + PRIVATE poMesaje + + lcSelect=[select 0 as ales, id, detalii, cif, data_creare, id_solicitare, tip, '' as atasament, citit, arhivat, descarcat from anaf_spv] + lcFiltru=[arhivat=0] + lcSchema=[ales N(1), id V(32), detalii V(250) null, cif V(20) null, data_creare T null, id_solicitare V(32) null, tip V(50) null, atasament W null, citit N(1), arhivat N(1), descarcat N(1)] + lcOrder=[data_creare desc] + llAfisare=.F. + lcGroup = [] + llModParam = .T. + lcFiltruOriginal = [] + poMesaje = null + gencursor('poMesaje','cMesajeSPV', m.lcSelect, m.lcFiltru, m.lcSchema, m.lcOrder, m.llAfisare, m.lcGroup, m.llModParam, m.lcFiltruOriginal) + poMesaje.ca_baza1.afisare() + + SELECT cMesajeSPV + loFrmSPV = CREATEOBJECT("anaf_spv", This) + loFrmSPV.Show(1) + + USE IN (SELECT('cMesajeSPV ')) + ENDPROC && VizSPV + + ***************** + * Citeste lista de mesaje din SPV si salveaza in baza de date + ***************** + PROCEDURE GetSPV + + Local loHTTP As "MSXML2.XMLHTTP" + Local lcCIF, lcDetaliiMesaj, lcErrorMessage, lcIdMesaj, lcIdSolicitare, lcMesaj, lcResponse, lcTip + Local llSucces, loEx, loJson, loMesaj, ltDataCreare + LOCAL lcCodFiscal, lcURL, lnZile, lcZile, loEx as Exception + + DECLARE INTEGER InternetSetOption IN "wininet.dll" ; + INTEGER hInternet, INTEGER dwOption, STRING lpBuffer, INTEGER dwBufferLength + + #DEFINE INTERNET_OPTION_END_BROWSER_SESSION 42 + + * Clear SSL cache by ending the browser session + =InternetSetOption(0, INTERNET_OPTION_END_BROWSER_SESSION, 0, 0) + + lnZile = 1000 + lcZile = ALLTRIM(STR(m.lnZile)) + lcCodFiscal = ALLTRIM(NVL(This.cCodFiscal, '')) + lcURL = "https://webserviced.anaf.ro/SPVWS2/rest/listaMesaje?zile=" + m.lcZile + "&cif=" + m.lcCodFiscal + + llSucces = .F. + TRY + loHTTP = Createobject("MSXML2.XMLHTTP") + loHTTP.Open("GET", lcURL , .F.) + loHTTP.setRequestHeader("content-type", "text/plain") + loHTTP.Send() + llSucces = .T. + CATCH TO loEx + This.cErrorMessage = loEx.message + This.lError = .T. + ENDTRY + llSucces = .T. + lcMesaj = '' + * Verificam statusul raspunsului + IF TYPE('loHttp') = 'O' AND loHttp.Status <> 200 + * Daca cererea HTTP a esuat + lcMesaj = "Eroare la conectarea la server: " + TRANSFORM(loHttp.Status) + This.cErrorMessage = m.lcMesaj + This.lError = .T. + llSucces = .F. + ENDIF + + * Preluam raspunsul JSON + IF m.llSucces + lcResponse = loHttp.ResponseText + IF ATC('', m.lcResponse) > 0 + llSucces = .F. + DO CASE + CASE ATC('utilizator neautorizat', m.lcResponse) > 0 + lcMesaj = 'Utilizator neautorizat. Posibile cauze: parola eronata sau certificat fara drepturi.' + CASE ATC('certificatul nu a fost prezentat', m.lcResponse) > 0 + lcMesaj = 'Certificatul nu a fost prezentat.' + + OTHERWISE + lcMesaj = 'Eroare certificat' + ENDCASE + This.cErrorMessage = m.lcMesaj + This.lError = .T. + ENDIF + ENDIF + + IF m.llSucces + * Transformam raspunsul JSON ntr-un obiect FoxPro + TRY + loJson = nfjsonread(m.lcResponse) + CATCH TO loEx + llSucces = .F. + lcErrorMessage = 'GetSPV ' + LF + ' Eroare: ' + TRANSFORM(loEx.ErrorNo) + ' ' + loEx.Message + ' Continut:' + loEx.LineContents + + ' Linia: ' + TRANSFORM(loEx.LineNo) + ' Program: ' + loEx.Procedure + This.cErrorMessage = m.lcErrorMessage + This.lError = .T. + This.Log(m.lcErrorMessage) + ENDTRY + + * Verificam daca exista mesaje disponibile + IF TYPE("loJson.mesaje") <> "U" + * Daca avem mesaje, le salvam ntr-un array +*!* laMesaje = loJson.mesaje +*!* lnMesajeCount = ALEN(laMesaje, 1) + + * Iteram prin lista de mesaje si descarcam fiecare mesaj + lnMesaje = 0 + FOR EACH loMesaj IN loJson.mesaje + lnMesaje = lnMesaje + 1 + *i = 1 TO lnMesajeCount +*!* lcIdMesaj = laMesaje[i].id +*!* lcDetaliiMesaj = laMesaje[i].detalii + lcIdMesaj = loMesaj.id + lcDetaliiMesaj = loMesaj.detalii + lcTip = loMesaj.tip + lcCIF = loMesaj.cif + ltDataCreare = CTOT(loMesaj.data_creare) + lcIdSolicitare = loMesaj.id_solicitare + WAIT WINDOW 'Mesaj: ' + ALLTRIM(STR(m.lnMesaje)) + ' ' + m.lcTip NOWAIT + + llSucces = This.UpdateDbSPV(m.loMesaj) +*!* IF !SEEK(m.lcIdMesaj, 'cMesajeSPV', 'id') +*!* +*!* INSERT INTO cMesajeSPV (id, detalii, tip, cif, data_creare, id_solicitare) VALUES (m.lcIdMesaj, m.lcDetaliiMesaj, m.lcTip, m.lcCIF, m.ltDataCreare, m.lcIdSolicitare) +*!* SELECT cMesajeSPV +*!* IF SEEK(m.lcIdMesaj) +*!* SCATTER NAME loMesaj MEMO +*!* llSucces = This.UpdateDbSPV(m.loMesaj) +*!* ENDIF +*!* ENDIF + ENDFOR +*!* GO TOP IN cMesajeSPV + WAIT WINDOW ALLTRIM(STR(m.lnMesaje)) + ' mesaje verificate/adaugate' NOWAIT + ELSE + * Daca nu exista mesaje + lcMesaj = "Nu exista mesaje disponibile in ultimele " + lcZile + " zile." + ENDIF + ENDIF && llSucces + + IF !This.lServer AND !EMPTY(This.cErrorMessage) + AMESSAGEBOX(This.cErrorMessage, 0+48, _screen.Caption) + ENDIF + + RETURN m.llSucces + + ENDPROC && GetSPV + + *************************** + * Salveaza un mesaj SPV in baza de date anaf_spv + *************************** + PROCEDURE UpdateDbSPV + LPARAMETERS toMesaj + + Local lcSql, llSucces + PRIVATE pcCIF, pcDetalii, pcId, pcIdSolicitare, pcTip, ptDataCreare + + TEXT TO lcSql NOSHOW + merge into anaf_spv a using dual b ON (a.id = ?pcId) + when not matched then + INSERT (id, detalii, tip, cif, data_creare, id_solicitare) VALUES (?pcId, ?pcDetalii, ?pcTip, ?pcCIF, ?ptDataCreare, ?pcIdSolicitare) + ENDTEXT + WITH toMesaj + pcId = ALLTRIM(.id) + pcDetalii = ALLTRIM(.detalii) + pcTip = ALLTRIM(.tip) + pcCIF = ALLTRIM(.cif) + ptDataCreare = CTOT(.data_creare) + pcIdSolicitare = ALLTRIM(.id_solicitare) + ENDWITH + + llSucces = goExecutor.oExecuta(m.lcSql) + IF !m.llSucces + goLog.Log(NVL(pcId, '') + ' ' + NVL(pcTip, '') + ' ' + NVL(pcCIF, '') + ' ' + TRANSFORM(NVL(ptDataCreare, {})) + ' ' + NVL(pcIdSolicitare, '') + ' ' + NVL(pcDetalii, '')) + SET STEP ON + ENDIF + RETURN m.llSucces + ENDPROC && UpdateDbSPV + + *************************** + * Salveaza atasamentul pentru un mesaj SPV in baza de date anaf_spv + *************************** + PROCEDURE UpdateDbSPVFile + PARAMETERS tcIdMesaj, tcContinut, tcFileName + * tcIdMesaj: Id mesaj SPV + * tcContinut: continutul pdf/zip mesaj + + Local lcSql, llSucces + + lcSql = [UPDATE anaf_spv SET atasament = ?tcContinut, filename = ?tcFileName, descarcat = 1 WHERE id = ?tcIdMesaj] + + llSucces = goExecutor.oExecuta(m.lcSql) + IF !m.llSucces + goLog.Log(TRANSFORM(NVL(tcContinut, '')) + ' ' + TRANSFORM(NVL(tcIdMesaj, '')) + ' ' + TRANSFORM(m.tcFileName)) + SET STEP ON + ENDIF + RETURN m.llSucces + ENDPROC && UpdateDbSPVFile + + **************** + * Actualizeaza anaf_spv.citit, descarcat, arhivat + **************** + PROCEDURE UpdateSPV + LPARAMETERS tcIdMesaj, tcAtribut, tnValoare + + lcSql = [update anaf_spv set ] + m.tcAtribut + [ = ] + ALLTRIM(STR(m.tnValoare)) + [ where id = ] + ALLTRIM(m.tcIdMesaj) + llSucces = goExecutor.oExecuta(m.lcSql) + RETURN m.llSucces + ENDPROC + + ***************** + * Descarca atasamentul pdf al unui mesaj din SPV si il salveaza pe disc + ***************** + PROCEDURE DescarcaDetaliiSPV + LPARAMETERS tcIdMesaj + * tnIdMesaj (optional): Id mesaj, altfel se descarca mesajele cMesajeSPV.ales = 1 + * ttDataCreare, tcTip (optional): pentru numele fisierului + + Local loHTTP As "MSXML2.XMLHTTP" + Local lcDirectory, lcIdMesaj, lcPdfData, lcPdfFileName, lcRecc, lcUrlDescarcare + Local lcData, lcDataCreare, lcExtensie, lcFileName, lcFiltru, lcTip, llSucces, lcIdMesaj + + lcIdMesaj = IIF(!EMPTY(m.tcIdMesaj), ALLTRIM(m.tcIdMesaj), '') + + +*!* ****************** +*!* DECLARE INTEGER InternetSetOption IN "wininet.dll" ; +*!* INTEGER hInternet, INTEGER dwOption, STRING lpBuffer, INTEGER dwBufferLength + +*!* #DEFINE INTERNET_OPTION_END_BROWSER_SESSION 42 +*!* * Clear SSL cache by ending the browser session +*!* =InternetSetOption(0, INTERNET_OPTION_END_BROWSER_SESSION, 0, 0) +*!* ****************** + IF this.lServer + lcDirectory = This.cResponsesPath + 'SPV' + '\' + Dtos(Date()) + '\' + ELSE + lcDirectory = GetPdfPath('SPV') + ENDIF + + lcFiltru = 'descarcat = 0' + DO CASE + CASE !EMPTY(m.lcIdMesaj) + lcFiltru = 'id = lcIdMesaj' + OTHERWISE + SELECT * FROM cMesajeSPV WHERE ales = 1 INTO CURSOR cMesajeSelectateTemp + IF _tally > 0 + lcFiltru = 'ales = 1' + ENDIF + USE IN (SELECT('cMesajeSelectateTemp')) + ENDCASE + + SELECT * FROM cMesajeSPV WHERE &lcFiltru INTO CURSOR cMesajeTemp NOFILTER + + lcRecc = TRANSFORM(RECCOUNT('cMesajeTemp')) + + llSucces = .F. + TRY + loHTTP = Createobject("MSXML2.XMLHTTP") + llSucces = .T. + CATCH TO loEx + This.cErrorMessage = loEx.message + This.lError = .T. + IF !This.lServer + AMESSAGEBOX('Eroare ' + This.cErrorMessage,0+48, _Screen.Caption) + ENDIF + ENDTRY + + IF m.llSucces AND TYPE('loHttp') = 'O' + This.lError = .F. + SELECT cMesajeTemp + SCAN + lcIdMesaj = ALLTRIM(id) + lcDataCreare = TTOC(data_creare,1) + lcTip = ALLTRIM(tip) + lcDetalii = ALLTRIM(detalii) + llSucces = .T. + + WAIT WINDOW TRANSFORM(RECNO()) + '/' + m.lcRecc NOWAIT + + * Construim URL-ul pentru descarcarea mesajului + lcUrlDescarcare = "https://webserviced.anaf.ro/SPVWS2/rest/descarcare?id=" + m.lcIdMesaj + + * Facem cererea pentru descarcarea mesajului PDF + + llSucces = .F. + TRY + loHttp.Open("GET", m.lcUrlDescarcare, .F.) + loHttp.Send() + llSucces = .T. + CATCH TO loEx + This.cErrorMessage = loEx.message + This.lError = .T. + IF !This.lServer + AMESSAGEBOX('Eroare ' + This.cErrorMessage,0+48, _Screen.Caption) + ENDIF + ENDTRY + + * Verificam statusul descarcarii + IF m.llSucces AND loHttp.Status = 200 + + * Verific daca raspunsul contine un mesaj de eroare in html + lcResponse = loHttp.ResponseText + DO CASE + CASE ATC('', m.lcResponse) > 0 + llSucces = .F. + DO CASE + CASE ATC('utilizator neautorizat', m.lcResponse) > 0 + lcMesaj = 'Utilizator neautorizat. Posibile cauze: parola eronata sau certificat fara drepturi.' + CASE ATC('certificatul nu a fost prezentat', m.lcResponse) > 0 + lcMesaj = 'Certificatul nu a fost prezentat.' + + OTHERWISE + lcMesaj = 'Eroare certificat' + ENDCASE + This.cErrorMessage = m.lcMesaj + This.lError = .T. + WAIT WINDOW "Eroare la descarcarea mesajului " + m.lcIdMesaj + ' : ' + m.lcMesaj NOWAIT + IF !This.lServer + AMESSAGEBOX("Eroare la descarcarea mesajului " + m.lcIdMesaj + ' : ' + m.lcMesaj + '!',0+48,_Screen.Caption) + EXIT + ENDIF + CASE LEFT(m.lcResponse, 1) = "{" +*!* {"titlu":"Descarcare mesaj","eroare":"A aparut o eroare tehnica. Cod: 2000"} + lcMesaj = GetRegExp(m.lcResponse, '(?<="eroare":")[^"]+', 1) + This.cErrorMessage = m.lcMesaj + This.lError = .T. + WAIT WINDOW "Eroare la descarcarea mesajului " + m.lcIdMesaj + ' : ' + m.lcMesaj NOWAIT + IF !This.lServer + AMESSAGEBOX("Eroare la descarcarea mesajului " + m.lcIdMesaj + ' : ' + m.lcMesaj + '!',0+48,_Screen.Caption) + EXIT + ENDIF + OTHERWISE + * Obtinem continutul PDF/ZIP + lcResponse = loHttp.ResponseBody + ENDCASE + + + * Salvam fisierul PDF/zip pe disc + *detalii: recipisa pentru CIF 1879855, tip D300, numar_inregistrare INTERNT-767970463-2024/16-08-2024, perioada raportare 7.2024 + lcTipD = GetRegExp(m.lcDetalii, ", tip ([^,]+)", 1) && obtin Tip declaratie ",tip D300," + lcTipD = ALLTRIM(STRTRAN(m.lcTipD, ", tip", "",1,1,1)) + lcTipD = IIF(!EMPTY(m.lcTipD), '_' + ALLTRIM(m.lcTipD), '') + + lcPerioadaR = GetRegExp(m.lcDetalii, "perioada raportare (\d+\.\d+)", 1) && perioada raportare "7.2024" + lcPerioadaR = ALLTRIM(STRTRAN(m.lcPerioadaR, "perioada raportare", "",1,1,1)) + lcPerioadaR = IIF(!EMPTY(m.lcPerioadaR), '_' + ALLTRIM(m.lcPerioadaR), '') + + lcExtensie = IIF(This.lError, 'html', IIF(LOWER(LEFT(loHttp.responseText, 4)) = '%pdf', 'pdf', 'zip')) + lcFileName = m.lcDirectory + "mesaj_spv_" + m.lcIdMesaj + "_" + m.lcDataCreare + "_" + m.lcTip + m.lcTipD + m.lcPerioadaR + "." + m.lcExtensie + + STRTOFILE(m.lcResponse, m.lcFileName, 0) + IF m.llSucces + * Salvez atasamentul in baza de date + llSucces = This.UpdateDbSPVFile(m.lcIdMesaj, m.lcResponse, JUSTFNAME(m.lcFileName)) + ENDIF + IF m.llSucces + UPDATE cMesajeSPV SET descarcat = 1 WHERE id = m.lcIdMesaj + ENDIF + * Afisam un mesaj de succes + WAIT WINDOW "Mesajul " + m.lcIdMesaj + " descarcat cu succes: " + m.lcFileName NOWAIT + ELSE + * Daca apare o eroare la descarcare, afisam mesajul de eroare + WAIT WINDOW "Eroare la descarcarea mesajului " + m.lcIdMesaj NOWAIT + ENDIF + ENDSCAN && cMesajeTemp + ENDIF && llSucces + + USE IN (SELECT('cMesajeTemp')) + + IF !This.lServer + open_default_app(m.lcDirectory) + ENDIF + + ENDPROC && DescarcaDetaliiSPV + + ************* + * Deschide directorul cu atasamente SPV si atasamentul dorit, dupa id mesaj + ************* + PROCEDURE DeschideAtasamentSPV + LPARAMETERS tcIdMesaj + + PRIVATE pcIdMesaj + Local laFiles[1], lcDirectory, lcFile, lcFileSkeleton, lcFiltru, lcFiltruOriginal, lcFisier, lcId + Local lcOrder, lcSchema, lcSelect, lcgroup, llAfiseaza, llModParam, lnFile, lnFiles + + pcIdMesaj = tcIdMesaj + + IF this.lServer + lcDirectory = This.cResponsesPath + 'SPV' + '\' + Dtos(Date()) + '\' + ELSE + lcDirectory = GetPdfPath('SPV') + ENDIF + lcDirectory = ADDBS(m.lcDirectory) + + lcFileSkeleton = m.lcDirectory + '*' + ALLTRIM(m.tcIdMesaj) + '*.*' + lnFiles = ADIR(laFiles, m.lcFileSkeleton) + IF m.lnFiles > 0 + open_default_app(m.lcDirectory) + + FOR lnFile = 1 TO m.lnFiles + lcFile = m.lcDirectory + laFiles[m.lnFile,1] + IF FILE(m.lcFile) + open_default_app(m.lcFile) + ENDIF + ENDFOR + ELSE + * daca nu sunt fisiere pe disk, descarc din baza de date + PRIVATE poDetaliiZip + poDetaliiZip = null + + lcSchema = [id V(36), fisier W, filename V(100)] + lcSelect = [select id, atasament, filename from anaf_spv where id = ?pcIdMesaj] + lcOrder = [] + lcgroup = [] + lcFiltru = [] + lcFiltruOriginal = [] + llModParam = .T. + llAfiseaza = .F. + + gencursor('poDetaliiZip','cRegFisierTemp', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal) + poDetaliiZip.ca_baza1.afisare() + If Used('cRegFisierTemp') + lcId= ALLTRIM(NVL(id, '')) + lcFisier = fisier + lcFileName = IIF(!EMPTY(NVL(filename, '')), ALLTRIM(NVL(filename, '')), m.pcIdMesaj + '.pdf') + Use In (Select('cRegFisierTemp')) + + lcFile = PUTFILE('Fisier', m.lcFileName, JUSTEXT(m.lcFileName)) + IF !EMPTY(m.lcFile) + Strtofile(lcFisier, m.lcFile) + open_default_app(JUSTPATH(m.lcFile)) + open_default_app(m.lcFile) + ENDIF + Endif + ENDIF + + ENDPROC && DeschideAtasamentSPV + +Enddefine && ANAFeFacturaServer + +Procedure viz_borderou_efactura + LOCAL loAnafeFactura + If !m.glEfactura + AMESSAGEBOX('Trebuie activata functionalitatea eFactura!', 0 + 48, _Screen.Caption) + Return + Endif +* gcAcces = [1;2;3;4;5;6] + loAnafeFactura = Createobject("ANAFeFactura") + loAnafeFactura.vizeFactura() +ENDPROC + +***************************** +PROCEDURE viz_efactura_xml + LOCAL loAnafeFactura + + loAnafeFactura = CREATEOBJECT("AnafeFacturaServer") + loAnafeFactura.vizeFacturaXml() +ENDPROC && viz_efactura_xml + +***************************** +PROCEDURE viz_spv + + LOCAL loAnafeFactura + loAnafeFactura = CREATEOBJECT("AnafeFacturaServer") + loAnafeFactura.VizSPV() +ENDPROC && viz_spv + +Define Class ANAFeFactura As Custom + + AnafeFacturaServer = null + + token = '' + refresh_token = '' + token_gendate = {} + token_expdate = {} + codfiscal = '' && cod fiscal contribuabil fara atribut fiscal + lTest = .F. && .T. = transmite eFactura TEST + cResponsesPath = '' + + Procedure Init + this.AnafeFacturaServer = Createobject('AnafeFacturaServer') + + This.codfiscal = IIF(TYPE('goFirma') = 'O', gofirma.codfiscalfro, '') + This.cResponsesPath = GetPdfPath('EFACTURA') && ADDBS(m.gcEFACTURA_RESPONSESPATH) && RASPUNSURI daca se descarca automat cu ROAEFACTURA + + Endproc && Init + + Procedure vizeFactura + Local lcToken + Local loFrmBorderou As "frm_borderou_efactura" + Local lcFiltru, lcFiltruOriginal, lcOrder, lcSchema, lcSelect, lcgroup, llAfiseaza, llModParam, lcData1, lnInregistrariAfisare + Local lcSqlCount, llSucces + Private poFacturiEmise, poFacturiPrimite, poFacturiTrimise, poFacturiDetalii, pnRecCnt + poFacturiEmise = Null + poFacturiPrimite = Null + poFacturiTrimise = Null + poFacturiDetalii = Null + + lcToken = This.getToken() + If Empty(m.lcToken) + AMESSAGEBOX('Nu s-a obtinut token-ul eFactura!', 0 + 48, _Screen.Caption) + Endif + + * La facturi primite/trimise aduc 0 inregistrari. + * Afisez inregistrarile la prima activare a paginilor Trimise/Primite din Borderou + * Nu aduc coloana ANAF_EFACTURA.DETALII (xml efactura) pentru ca este prea mult trafic de date si merge greu pentru multe inregistrari. Aduc detalii doar pentru cate o factura + + * FACTURI PRIMITE + lcData1 = '01' + PADL(INT(m.gnLuna),2,'0') + ALLTRIM(STR(m.gnAn)) + Text To lcSchema Noshow +ales N(1), id N(20), id_fact N(20), data_act D, data_scad D, numar_act C(30), xfurnizor C(200), xclient C(200), id_incarcare C(36), id_descarcare c(36) null, tip_mesaj_raspuns C(50) null,mesaj_raspuns C(250) null, data_raspuns D null, trimis N(1) null, data_trimis T null, cod_fiscal_emitent C(30) null, cod_fiscal_beneficiar C(30) null, detalii M null, total_fara_tva N(16,4), total_tva N(16,4), total_tva_ron N(16,4), total_cu_tva N(16,4), discount_fara_tva N(16,4), taxe_fara_tva N(16,4), valoare_fara_tva N(16,4), total_de_plata N(16,4), nume_valuta C(5), test N(1) null, jtotctva N(16,4), descriere M null, detalii_plata M null, diferenta N(16,4), procesat N(1), tip_persoana N(1) null, descarcat N(1) null, filepath c(250) null, procesat_server N(1) null, creditnote N(1) + Endtext + Text To lcSelect Noshow +SELECT 0 as ales, id, id_fact, data_act, data_scad, numar_act, xfurnizor, xclient, id_incarcare, id_descarcare, tip_mesaj_raspuns, mesaj_raspuns, data_raspuns, NVL(trimis,0) as trimis, data_trimis, cod_fiscal_emitent, cod_fiscal_beneficiar, '' as detalii, total_fara_tva, total_tva, total_tva_ron, total_cu_tva, discount_fara_tva, taxe_fara_tva, valoare_fara_tva, total_de_plata, nume_valuta, test, jtotctva, descriere, detalii_plata, decode(creditnote,0,1,-1) * NVL(total_cu_tva, 0.00)-NVL(jtotctva, 0.00) as diferenta, procesat, tip_persoana, descarcat, filepath, procesat_server, creditnote FROM anaf_vefactura_primit + Endtext + lcOrder = [data_act,numar_act,data_raspuns] + lcgroup = [] + * Aduc inregistrarile cand se activeaza prima data pagina cu facturi primite + lcFiltru = [1=2] && [(extract(year from data_act) = ?gnAn and extract(month from data_act) = ?gnLuna) or (data_act is null and data_raspuns >= to_date('] + m.lcData1 + [','ddmmyyyy'))] + lcFiltruOriginal = [] + llModParam = .T. + llAfiseaza = .F. + + gencursor('poFacturiPrimite', 'crsFacturiPrimite', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal) + poFacturiPrimite.ca_baza1.afisare() + Select crsFacturiPrimite + Go Top + + * FACTURI TRIMISE + Text To lcSchema Noshow +ales N(1), id N(20), id_fact N(20), data_act D, data_scad D, numar_act C(30), xfurnizor C(200), xclient C(200), id_incarcare C(36), id_descarcare c(36) null, mesaj_trimis C(250) null, tip_mesaj_raspuns C(50) null,mesaj_raspuns C(250) null, data_raspuns D null, trimis N(1) null, data_trimis T null, cod_fiscal_emitent C(30) null, cod_fiscal_beneficiar C(30) null, detalii M null, total_fara_tva N(16,4), total_tva N(16,4), total_tva_ron N(16,4), total_cu_tva N(16,4), discount_fara_tva N(16,4), taxe_fara_tva N(16,4), valoare_fara_tva N(16,4), total_de_plata N(16,4), nume_valuta C(5), test N(1) null, jtotctva N(16,4), descriere M null, detalii_plata M null, diferenta N(16,4), procesat N(1), tip_persoana N(1) null, descarcat N(1) null, filepath c(250) null, procesat_server N(1) null, creditnote N(1) + Endtext + Text To lcSelect Noshow +SELECT 0 as ales, id, id_fact, data_act, data_scad, numar_act, xfurnizor, xclient, id_incarcare, id_descarcare, mesaj_trimis, tip_mesaj_raspuns, mesaj_raspuns, data_raspuns, NVL(trimis,0) as trimis, data_trimis, cod_fiscal_emitent, cod_fiscal_beneficiar, '' as detalii, total_fara_tva, total_tva, total_tva_ron, total_cu_tva, discount_fara_tva, taxe_fara_tva, valoare_fara_tva, total_de_plata, nume_valuta, test, jtotctva, descriere, detalii_plata, decode(creditnote,0,1,-1) * NVL(total_cu_tva, 0.00)-NVL(jtotctva, 0.00) as diferenta, procesat, tip_persoana, descarcat, filepath, procesat_server, creditnote FROM anaf_vefactura_trimis + Endtext + lcOrder = [data_act,numar_act,data_trimis,data_raspuns] + lcgroup = [] + * Aduc inregistrarile cand se activeaza prima data pagina cu facturi trimise + lcFiltru = [1=2] && [(extract(year from data_act) = ?gnAn and extract(month from data_act) = ?gnLuna) or (data_act is null and data_raspuns >= to_date('] + m.lcData1 + [','ddmmyyyy'))] + lcFiltruOriginal = [] + llModParam = .T. + llAfiseaza = .F. + + gencursor('poFacturiTrimise', 'crsFacturiTrimise', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal) + poFacturiTrimise.ca_baza1.afisare() + Select crsFacturiTrimise + Go Top + + * FACTURI EMISE + Text To lcSchema Noshow +ales N(1), id N(20), id_fact N(20), id_vanzare N(10), data_act D, numar_act N(14), in_valuta N(1) null, curs N(10,4) null, valval N(16,2), tvaval N(16,2),totval N(16,2), total_fara_tva N(16,2), total_tva N(16,2), total_cu_tva N(16,2), nume_valuta C(5) null, client C(100), id_client N(10), cod_fiscal C(30), tip_persoana N(1) null, trimis N(1) null, data_trimis T null, stare C(100) null, id_incarcare C(36) null, mesaj_trimis C(250) null, id_descarcare c(36) null, tip_mesaj_raspuns C(50) null,mesaj_raspuns C(250) null, data_raspuns D null, cod_fiscal_emitent C(30) null, cod_fiscal_beneficiar C(30) null, detalii M null, xfurnizor C(200), xclient C(200), xdata_act D, xnumar_act C(30), xtotal_fara_tva N(16,4), xtotal_tva N(16,4), xtotal_tva_ron N(16,4), xtotal_cu_tva N(16,4), xdiscount_fara_tva N(16,4), xtaxe_fara_tva N(16,4), xvaloare_fara_tva N(16,4), xtotal_de_plata N(16,4), xnume_valuta C(5), test N(1) null, id_util N(10), utilizator C(100), jtotctva N(16,4), diferenta N(16,4), procesat N(1), procesat_server N(1), creditnote N(1) + Endtext + Text To lcSelect Noshow +SELECT 0 as ales, id, id_fact, id_vanzare, data_act, numar_act, in_valuta, curs, valval, tvaval, totval, total_fara_tva, total_tva,total_cu_tva, nume_valuta, client, id_client, cod_fiscal, NVL(tip_persoana,1) as tip_persoana, NVL(trimis,0) as trimis, data_trimis, stare, id_incarcare, mesaj_trimis, id_descarcare, tip_mesaj_raspuns, mesaj_raspuns, data_raspuns, cod_fiscal_emitent, cod_fiscal_beneficiar, '' as detalii, xfurnizor, xclient, xdata_act, xnumar_act, xtotal_fara_tva, xtotal_tva, xtotal_tva_ron, xtotal_cu_tva, xdiscount_fara_tva, xtaxe_fara_tva, xvaloare_fara_tva, xtotal_de_plata, xnume_valuta, test, id_util, utilizator, jtotctva, decode(creditnote,0,1,-1) * ROUND(NVL(xtotal_cu_tva , 0.00) * decode(in_valuta,1,curs,1), 2)-NVL(jtotctva, 0.00) as diferenta, procesat, procesat_server,creditnote FROM anaf_vefactura_emis + Endtext + lcOrder = [data_act,numar_act] + lcgroup = [] + lcFiltru = [(extract(year from data_act)=?gnAn and extract(month from data_act)=?gnLuna) OR (trimis = 1 and tip_mesaj_raspuns is null and extract(year from data_act) >=2023)] + lcFiltruOriginal = [] + llModParam = .T. + llAfiseaza = .F. + + * Afisez toate facturile emise, ca sa le pot vizualiza pe cele netrimise sau trimise cu starea lor (trimis, eroare etc.) + gencursor('poFacturiEmise', 'crsFacturiEmise', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal) + poFacturiEmise.ca_baza1.afisare() + + +* DETALII FACTURI PRIMITE/TRIMISE/EMISE + Text To lcSchema Noshow +id N(20), id_efactura N(20), nr N(5), articol V(250), descriere V(250), detalii M, cantitate N(18,6), um V(20), pret N(20,6), proctva N(7,2), valoarefaratva N(20,6), discountfaratva N(20,6) + Endtext + Text To lcSelect Noshow +select id, id_efactura, nr, articol, descriere, detalii, cantitate, um, pret, proctva, valoarefaratva, discountfaratva from anaf_vefactura_detalii + Endtext + lcOrder = [nr] + lcgroup = [] + lcFiltru = [1=2] && IIF(!EMPTY(NVL(crsFacturiPrimite.id,0)), [id_efactura=] + ALLTRIM(STR(crsFacturiPrimite.id)), [1=2]) + lcFiltruOriginal = [] + llModParam = .T. + llAfiseaza = .F. + + gencursor('poFacturiDetalii', 'crsDetaliiFacturi', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal) + poFacturiDetalii.ca_baza1.afisare() + + + Select crsFacturiEmise + loFrmBorderou = Createobject("anaf_efactura", This) + * Do Form anaf_efactura Name loFrmBorderou Linked With this Noshow + + loFrmBorderou.Show(1) + + Use In (Select('crsFacturiEmise')) + Use In (Select('crsFacturiTrimise')) + Use In (Select('crsFacturiPrimite')) + Use In (Select('crsDetaliiFacturi')) + Endproc && vizeFactura + + Function getToken + Lparameters tlShow +* tlShow: .T. arata formularul chiar daca este generat Token si nu este expirat 90 zile + Private poToken + + Local loFrmToken As "anaf_token" + Local lcToken, lcRefreshToken, lcTokenGenDate, ldTokenGenDate, loServer + + loServer = This.AnafeFacturaServer + + * TokenJWT are dimensiunea mai mare. Il salvez in optiuni.varvalue2 + IF .F. + lcToken = Alltrim(Nvl(citeste_optiune('ANAF_TOKEN', .T.), '')) + lcRefreshToken = Alltrim(Nvl(citeste_optiune('ANAF_REFRESH_TOKEN', .T.), '')) + + lcTokenGenDate = Alltrim(Nvl(citeste_optiune('ANAF_TOKEN_GENDATE'), '')) + ldTokenGenDate = Iif(!Empty(m.lcTokenGenDate), Ctod(m.lcTokenGenDate), {}) + lcTokenExpDate = Alltrim(Nvl(citeste_optiune('ANAF_TOKEN_EXPDATE'), '')) + ldTokenExpDate = Iif(!Empty(m.lcTokenExpDate), Ctod(m.lcTokenExpDate), {}) + ldTokenExpDate = Iif(!Empty(m.ldTokenExpDate), m.ldTokenExpDate, m.ldTokenGenDate + 90) + ELSE + lcToken = loServer.cToken + lcRefreshToken = loServer.cRefreshToken + ldTokenGenDate = loServer.dTokenGendate + ldTokenExpDate = loServer.dTokenExpdate + ENDIF + + This.token = m.lcToken + This.refresh_token = m.lcRefreshToken + This.token_gendate = m.ldTokenGenDate + This.token_expdate = m.ldTokenExpDate + + If m.tlShow Or Empty(m.lcToken) Or m.ldTokenExpDate <= Date() + loFrmToken = Createobject("anaf_token", This) + loFrmToken.Show(1) + If m.lcToken <> loServer.cToken + loServer.dTokenGendate = Date() + loServer.dTokenExpdate = Date() + 90 + Endif + + This.SaveToken() + Endif + + Return loServer.cToken + Endfunc + +*************************** +* Salveaza tokenul in baza de date optiuni firma +*************************** + Procedure SaveToken + LOCAL loServer + + loServer = This.AnafeFacturaServer + loServer.SaveToken() + Endproc && SaveToken + + +* Intoarce tokenul de acces la ANAF (eFactura) daca este salvat sau obtine un nou token +* Se apeleaza din formularul anaf_token.do_executa + Function newToken + AMESSAGEBOX('Introduceti in calculator tokenul USB cu semnatura electronica' + Chr(13) + Chr(10) + ; + 'Se va deschide pagina ANAF de generare token. Introduceti PIN-ul pentru semnatura electronica.' + Chr(13) + Chr(10) + ; + 'Copiati codurile "Token" si "Refresh Token" afisate si completati-le in ROA.', 0 + 64, _Screen.Caption) + + lcURL = [https://romfast.ro/oauth2/] + open_default_app(m.lcURL) + Endfunc + +* Actualizeaza data expirarii tokenului ANAF eFactura +* Se apeleaza din formularul anaf_token.do_executa + Function refreshToken + LOCAL loServer, lcMesaj, llSucces + llSucces = .F. + + loServer = This.AnafeFacturaServer + lcMesaj = '' + llSucces = loServer.RefreshToken(@lcMesaj) + + AMESSAGEBOX(m.lcMesaj, 0 + 48, _Screen.Caption) + + Return m.llSucces + Endfunc + +******************************** +* Bifeaza Trimis o factura trimisa manual la ANAF +******************************** + Procedure BifeazaTrimisManual + Lparameters tnIdFact, tnTrimis + Private pnIdFact, pnTrimis + pnIdFact = m.tnIdFact + pnTrimis = m.tnTrimis + pnTest = IIF(This.lTest, 1, 0) && server TEST ANAF + lcSql = 'begin pack_anaf.BifeazaEFactTrimisManual(?pnIdFact, ?pnTrimis, ?pnTest, ?gnIdUtil); end;' + llSucces = goExecutor.oExecuta(m.lcSql) + Return m.llSucces + Endproc && BifeazaTrimisManual + + + ******************************** + * Suprascrie Id Incarcare manual, in caz ca pe factura este un Id Incarcare al trimiterilor ulterioare care au primit raspuns Eroare factura duplicata + * Este posibil si ca la prima incarcare anaf.ro sa dea timeout si sa nu intoarca Id Incarcare si sa se trimita din nou factura. Se primeste id incarcare, dar mesajul de descarcare este EROARE factura duplicata. + ******************************** + Procedure SuprascrieIdIncarcare + Lparameters tnIdFact, tcIdIncarcare + Private pnIdFact, pcIdIncarcare + pnIdFact = m.tnIdFact + pcIdIncarcare = m.tcIdIncarcare + pnTest = IIF(This.lTest, 1, 0) && server TEST ANAF + lcSql = 'begin pack_anaf.SuprascrieIdIncarcare(?pnIdFact, ?pcIdIncarcare, ?pnTest, ?gnIdUtil); end;' + llSucces = goExecutor.oExecuta(m.lcSql) + Return m.llSucces + Endproc && SuprascrieIdIncarcare + + +******************************** +* Genereaza xml efactura, valideaza xml si trimite la API ANAF +******************************** + Procedure TrimiteFacturi + Lparameters tlNuTrimiteEFacturaANAF + + Local lcTip, llSucces, lnValoare, lnRecno, loEx as Exception + Local lcFilter, lcSql, lnIdVanzare + Local lcRecc, lcRecno, ldDataFact, lnNumarFact, loReturn, lnTrimis + Local lcMesaj + Local lcErrorMessage, lcExecutionStatus, lcIndexIncarcare, loXML + Private pnIdFact, pnValoare, pcMesajTrimis, pnTrimis, pcIdIncarcare, pnTest + + llSucces = .F. + pnIdFact = crsFacturiEmise.id_fact + pnTest = IIF(This.lTest, 1, 0) && server TEST ANAF + lnRecno = Recno('crsFacturiEmise') + lcFilter = "id_fact = " + Alltrim(Str(m.pnIdFact)) + + Select crsFacturiEmise + Locate For ales = 1 + If !Found() + Locate For id_fact = m.pnIdFact + Else + lcFilter = "ales = 1" + Endif + + If Empty(m.pnIdFact) + Return m.llSucces + Endif + + lcSql = 'begin pack_anaf.BifeazaEFactTrimis(?pnIdFact, ?pnTrimis, ?pcMesajTrimis, ?pcIdIncarcare, ?pnTest, ?gnIdUtil); end;' + + Select crsFacturiEmise + lcRecc = Alltrim(Str(Reccount())) + Scan For &lcFilter + pnIdFact = id_fact + lnIdVanzare = id_vanzare + lnNumarFact = crsFacturiEmise.numar_act + ldDataFact = crsFacturiEmise.data_act + pnTrimis = Nvl(trimis, 0) + lnTrimis = Nvl(trimis, 0) + pcIdIncarcare = Nvl(id_incarcare, '') + + lcRecno = Alltrim(Str(Recno())) + + Wait Window 'Factura ' + Alltrim(Str(m.lnNumarFact)) + ' / ' + Dtoc(m.ldDataFact) + ' ' + m.lcRecno + '/' + m.lcRecc Nowait + + loReturn = This.TrimiteEfactura(m.lnIdVanzare, m.tlNuTrimiteEFacturaANAF) + llSucces = loReturn.lSucces + + If m.llSucces + pcMesajTrimis = Iif(This.lTest, 'TEST ', '') + loXML = NULL + IF !m.tlNuTrimiteEFacturaANAF + TRY + loXML = nfxmlread(loReturn.cResponse) + CATCH TO loEx + lcErrorMessage = loEx.Message + ENDTRY + ENDIF + lcExecutionStatus = '' + lcIndexIncarcare = '' + lcErrorMessage = '' + IF TYPE('loxml.header._attr_.executionstatus') <> 'U' + lcExecutionStatus = loxml.header._attr_.executionstatus + ENDIF + IF TYPE('loxml.header._attr_.index__incarcare') <> 'U' + lcIndexIncarcare = loxml.header._attr_.index__incarcare + ENDIF + IF TYPE('loxml.header.errors._attr_.errorMessage') <> 'U' + lcErrorMessage = loxml.header.errors._attr_.errorMessage + ENDIF + + Do Case + Case lcExecutionStatus = "0" + pcIdIncarcare = m.lcIndexIncarcare + pnTrimis = 1 + pcMesajTrimis = m.pcMesajTrimis + 'Transmis cu succes. Index incarcare = ' + m.pcIdIncarcare + + Case !EMPTY(m.lcErrorMessage) + pcIdIncarcare = '' + pnTrimis = 1 + pcMesajTrimis = m.pcMesajTrimis + Iif(This.lTest, 'TEST ', '') + 'Eroare. ' + m.lcErrorMessage + + Case [VALID] $ Upper(loReturn.cResponse) + pcIdIncarcare = '' + pnTrimis = 0 + pcMesajTrimis = m.pcMesajTrimis + loReturn.cResponse + Otherwise + pcMesajTrimis = m.pcMesajTrimis + Iif(This.lTest, 'TEST ', '') + 'Eroare. ' + m.lcErrorMessage + pcIdIncarcare = '' + pnTrimis = 1 + Endcase + + * Completez doar cu raspunsul de la trimiterea la ANAF, nu si de la validare + If !m.tlNuTrimiteEFacturaANAF + pcMesajTrimis = LEFT(m.pcMesajTrimis,250) + llSucces = goExecutor.oExecuta(m.lcSql) + Endif + + If [VALID] $ Upper(loReturn.cResponse) And m.lnTrimis = 0 + Replace trimis With m.pnTrimis, id_incarcare With m.pcIdIncarcare, data_trimis With Datetime(), mesaj_trimis With m.pcMesajTrimis, ales With 0, ; + id_descarcare WITH '', data_raspuns WITH null, tip_mesaj_raspuns WITH '', mesaj_raspuns WITH null ; + In crsFacturiEmise + Else + Replace trimis With m.pnTrimis, id_incarcare With m.pcIdIncarcare, data_trimis With Datetime(), mesaj_trimis With m.pcMesajTrimis, ales With 0, ; + id_descarcare WITH '', data_raspuns WITH null, tip_mesaj_raspuns WITH '', mesaj_raspuns WITH null ; + In crsFacturiEmise + Endif + ELSE + + lcMesaj = 'Eroare transmitere factura ' + Alltrim(Str(m.lnNumarFact)) + ' / ' + Dtoc(m.ldDataFact) + Chr(13) + Chr(10) + ; + 'Fisier xml: ' + Alltrim(Transform(loReturn.cFile)) + Chr(13) + Chr(10) + ; + 'ANAF Http Status: ' + Transform(loReturn.nStatus) + Chr(13) + Chr(10) + ; + IIF(loReturn.nStatus = 403, 'Acces interzis. Token-ul a expirat si trebuie regenerat.' + Chr(13) + Chr(10), '') + ; + 'ANAF Http Response: ' + Alltrim(Transform(loReturn.cResponse)) + poLog.Log(m.lcMesaj) + + If AMESSAGEBOX(m.lcMesaj + Chr(10) + ; + 'Doriti sa continuati?', 4 + 32, _Screen.Caption) <> 6 + Exit + Endif + Endif + Endscan + + Select crsFacturiEmise + Try + If m.lnRecno > 0 + Goto m.lnRecno + Else + Go Top + Endif + Catch + Go Top + Endtry + Endproc && TrimiteFacturi + + * Genereaza xml eFactura, valideaza xml si trimite la ANAF + FUNCTION TrimiteEfactura + Lparameters tnIdVanzare, tlNuTrimiteEFacturaANAF + PRIVATE pcTokenEfactura + LOCAL loReturn + + loReturn = Createobject("empty") + AddProperty(loReturn, "lSucces", .F.) + AddProperty(loReturn, "cFile", '') + AddProperty(loReturn, "cResponse", '') + AddProperty(loReturn, "nStatus", 0) + + * Genereaza xml eFactura + llSilent = .T. + llJustPDF = .F. + lcTipDocument = 'FACTURA' + llEFactura = .T. + llOk = .F. + lcFile = '' + lcMesaj = '' + + pcTokenEfactura = This.Token && variabila privata pentru getxmlefactura > ValidareEFacturaAnaf + + loDate = listeaza_formular(m.tnIdVanzare, m.llSilent, m.llJustPDF, m.lcTipDocument, m.llEFactura) + loInfo = loDate.oInfoEFactura + If Type('loInfo.cFile') = 'C' + lcFile = Iif(Type('loInfo.cFile') = 'C', loInfo.cFile, '') + llOk = loInfo.lOk + lcMesaj = loInfo.cMesaj + Endif + + loReturn.cFile = m.lcFile + + lcCodTara = 'RO' + IF TYPE('loDate.oClient.cod_tara') <> 'U' + lcCodTara = ALLTRIM(NVL(loDate.oClient.cod_tara, '')) + IF EMPTY(m.lcCodTara) + lcCodTara = 'RO' + ENDIF + ENDIF + + llAtributFiscalRO = .F. + IF TYPE('loDate.oClient.cod_fiscal') <> 'U' + llAtributFiscalRO = 'RO'$UPPER(ALLTRIM(NVL(loDate.oClient.cod_fiscal, ''))) + ENDIF + + llExtern = (m.lcCodTara <> 'RO' AND !m.llAtributFiscalRO) && sa aiba sediul fiscal extern si sa nu fie inregistrat TVA in Romania + lcExtern = IIF(m.llExtern, '&extern=DA', '') + + If m.llOk And !Empty(m.lcFile) And Type('lcFile') = 'C' And File(m.lcFile) + If !m.tlNuTrimiteEFacturaANAF + loReturn = This.AnafeFacturaServer.SendEfactura(m.lcFile, m.llExtern) + Else + loReturn.cResponse = Iif(!Empty(m.lcMesaj), m.lcMesaj + Chr(13) + Chr(10), '') + 'VALID. Nu s-a trimis fisierul la ANAF.' + loReturn.lSucces = .T. + Endif + Else + loReturn.cResponse = m.lcMesaj + Chr(13) + Chr(10) + '' + loReturn.lSucces = .F. + Endif + + RETURN m.loReturn + + ENDFUNC && TrimiteEfactura + + + **************** + * Parseaza un xml efactura si actualizeaza ANAF_EFACTURA + **************** + PROCEDURE Detalii2UpdateFactura + LPARAMETERS tnId, tcDetalii + + LOCAL llVariable + llVariable = .T. + + TRY + loFactura = ParseEFactura(m.tcDetalii, m.llVariable) + loFactura.nId = m.tnId + + lcSql = [select a.*, 1 as modificat, to_clob(null) as factura_detalii from anaf_efactura a where id = ] + ALLTRIM(STR(m.tnId)) + llSucces = goExecutor.oExecuta(m.lcSql, 'cAnafEfacturaTemp') + IF m.llSucces + ADDPROPERTY(loFactura, 'cIdIncarcare', cAnafEfacturaTemp.id_incarcare) + ADDPROPERTY(loFactura, 'cIdDescarcare', cAnafEfacturaTemp.id_incarcare) + + llSucces = This.AnafeFacturaServer.cUpdateFactura(loFactura, 'cAnafEfacturaTemp') + + IF m.llSucces + llSucces = This.AnafeFacturaServer.UpdateDb('cAnafEfacturaTemp') + ENDIF + ENDIF + + USE IN (SELECT('cAnafEfacturaTemp')) + Catch To loEx + llSucces = .F. + ENDTRY + RETURN m.llSucces + ENDPROC && Detalii2UpdateFactura + + + + + * Salveaza pe disk arhiva cu detalii ANAF_EFACTURA.DETALII_ZIP + FUNCTION DownloadDetaliiZip + LPARAMETERS tnIdeFactura + + PRIVATE poDetaliiZip + poDetaliiZip = null + + lcSchema = [id_incarcare V(36), fisier W] + lcSelect = [select id_incarcare, detalii_zip from anaf_efactura where id = ] + Alltrim(Str(tnIdeFactura)) + lcOrder = [] + lcgroup = [] + lcFiltru = [] + lcFiltruOriginal = [] + llModParam = .T. + llAfiseaza = .F. + + gencursor('poDetaliiZip','cRegFisierTemp', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal) + poDetaliiZip.ca_baza1.afisare() + If Used('cRegFisierTemp') + lcIdIncarcare = ALLTRIM(NVL(id_incarcare, '')) + lcFisier = fisier + Use In (Select('cRegFisierTemp')) + + lcFile = PUTFILE('Fisier', m.lcIdIncarcare, 'zip') + IF !EMPTY(m.lcFile) + Strtofile(lcFisier, m.lcFile) + open_default_app(JUSTPATH(m.lcFile)) + ENDIF + Endif + ENDFUNC && DownloadDetaliiZip + +ENDDEFINE && ANAFeFactura + + + +********************* +* Parseaza xml efactura si intoarce obiect VFP cu datele facturii xml cu detaliile facturii +********************* +Procedure ParseEFactura + Lparameters tcFile, tlVariable +* tcFile: fisier sau variabila care contine xml eFactura +* tlVariable: .T. daca tcFile este o variabila care contine xml eFactura + + Local lcFileText, lcDetalii, lcFacturaDetalii, loEx As Exception, loReturn + Local laLinii[1], laLiniiDisc[1], laDetalii[1], laDetaliiLinie[1], laDetaliiPlata[1], laCommodityClassification[1] + Local lcDataFactura, lcDataScad, lcDetaliiLinie, lcUM, lcValuta, lnAn, lnCant, lnDetalii + Local lnDetaliiLinie, lnDetaliu, lnDetaliuLinie, lnLinie, lnLinii, lnLuna, lnNr, lnPret, lnProcTva + Local lnZi, loFactura, loLinie, lcArticol, lcDetaliu + Local lcArticolDescriere, lcBanca, lcCodClient, lcCodFurnizor, lcTip, lcCod, lcCodBare, lcCodCPV, lcCodNC8 + Local lcCodPlata, lcContBanca, lcPrefixInvoice, llCreditNote + Local lnCommodityClassification, lnCommodityClassifications, lnValoareFaraTVA + Local loCommodityClassification, loDetaliu, loItemClassificationCode + Local lnDiscount, lnDiscountLinie, lnValoareTVA, loTaxTotal + + + +*!* IF '4114569629'$lcfile +*!* SET STEP ON +*!* ENDIF + loReturn = Createobject("empty") + AddProperty(loReturn, "nId", "") && ANAF_EFACTURA.ID + AddProperty(loReturn, "NumarAct", "") + AddProperty(loReturn, "DataAct", {}) + AddProperty(loReturn, "DataScad", {}) + + AddProperty(loReturn, "Furnizor", "") + AddProperty(loReturn, "CodTaraFurnizor", "") + AddProperty(loReturn, "CodJudetFurnizor", "") + AddProperty(loReturn, "LocalitateFurnizor", "") + AddProperty(loReturn, "StradaFurnizor", "") + AddProperty(loReturn, "CodFiscalFurnizor", "") + + AddProperty(loReturn, "Client", "") + AddProperty(loReturn, "CodTaraClient", "") + AddProperty(loReturn, "CodJudetClient", "") + AddProperty(loReturn, "LocalitateClient", "") + AddProperty(loReturn, "StradaClient", "") + AddProperty(loReturn, "CodFiscalClient", "") + + AddProperty(loReturn, "TotalFaraTva", 0.00) + AddProperty(loReturn, "TotalTva", 0.00) + AddProperty(loReturn, "TotalTvaRON", 0.00) + AddProperty(loReturn, "TotalCuTva", 0.00) + AddProperty(loReturn, "TaxeFaraTVA", 0.00) + AddProperty(loReturn, "DiscountFaraTVA", 0.00) + AddProperty(loReturn, "ValoareFaraTVA", 0.00) && suma valoare articole + AddProperty(loReturn, "TotaldePlata", 0.00) + AddProperty(loReturn, "Valuta", "") + AddProperty(loReturn, "Detalii", "") && note factura + AddProperty(loReturn, "DetaliiPlata", "") && detalii plata (conturi bancare) + AddProperty(loReturn, "FacturaDetalii", "") && liniile facturii + AddProperty(loReturn, "FacturaDetaliiDisc", "") && linii discount la nivel de factura + AddProperty(loReturn, "Eroare", .F.) && daca a aparut o eroare la parsarea facturii + AddProperty(loReturn, "CreditNote", 0) && 1 = CreditNote, 0 = Invoice + + Create Cursor cFacturaDetaliiTemp(nr I, cant N(16, 6), um V(20), articol V(250), descriere V(250), detalii M, Pret N(16, 6), proctva N(10, 2), tiptva V(2), valoarefaratva N(16,4), discountfaratva N(16,4), codfurnizor V(100), codclient V(100), codbare V(50), codcpv V(50), codnc8 V(50)) + CREATE CURSOR cFacturaDetaliiDisc(valoare N(20,6), procentTVA N(5,2), tiptva V(10), discount N(1), motivdiscount V(200), motivdiscountcod V(50)) + + If m.tlVariable + lcFileText = m.tcFile + Else + lcFileText = Iif(File(m.tcFile), Filetostr(m.tcFile), '') + Endif + + If Empty(m.lcFileText) + loReturn.eroare = .T. + Return loReturn + Endif + + * CreditNote to Invoice + llCreditNote = 'CreditNote' $ lcFileText + loReturn.CreditNote = IIF(m.llCreditNote, 1, 0) + lcFileText = Strtran(lcFileText, 'CreditNote', 'Invoice', 1, 100000, 1) + lcFileText = Strtran(lcFileText, 'Credited', 'Invoiced', 1, 100000, 1) + + * Scot cbc: cac: + * Unele fisiere nu au, altele au. Le scot din toate + lcFileText = Strtran(lcFileText, 'cac:', '', 1, 1000000, 1) + lcFileText = Strtran(lcFileText, 'cbc:', '', 1, 1000000, 1) + + lcPrefixInvoice = STREXTRACT(m.lcFileText, [<], [Invoice],1,1) && un prefix custom la Invoice 10 && caut prefixul la a doua aparitie a < + lcPrefixInvoice = STREXTRACT(m.lcFileText, [<], [Invoice],2,1) && un prefix custom la Invoice ] && [] + lcPrefix = GetRegExp(m.lcFileText, m.lcPattern) + lcPrefix = STREXTRACT(NVL(m.lcPrefix, ''), [] + lcPrefix = GetRegExp(m.lcFileText, m.lcPattern) + lcPrefix = STREXTRACT(NVL(m.lcPrefix, ''), [ RON, atunci extrag valoare tva in RON + * Sunt 2 TaxTotal, una in valuta facturii si una in RON +*!* +*!* 0.00 +*!* + IF UPPER(ALLTRIM(loReturn.valuta)) <> 'RON' + If Type('loFactura.Invoice.TaxTotal') <> 'U' + If Type('loFactura.Invoice.TaxTotal', 1) = 'A' + FOR EACH loTaxTotal IN loFactura.Invoice.TaxTotal + IF TYPE('loTaxTotal.TaxAmount._attr_.CurrencyId') = 'C' AND TYPE('loTaxTotal.TaxAmount._nodetext_') = 'C' AND loTaxTotal.TaxAmount._attr_.CurrencyId = "RON" + loReturn.TotalTVARON = VAL(loTaxTotal.TaxAmount._nodetext_) + ENDIF + ENDFOR + ELSE + IF TYPE('loFactura.Invoice.TaxTotal') = 'O' + loTaxTotal = loFactura.Invoice.TaxTotal + IF TYPE('loTaxTotal.TaxAmount._attr_') = 'C' AND TYPE('loTaxTotal.TaxAmount._nodetext_') = 'C' AND loTaxTotal.TaxAmount._attr_.CurrencyId = "RON" + loReturn.TotalTVARON = VAL(loTaxTotal.TaxAmount._nodetext_) + ENDIF + ENDIF + ENDIF + ENDIF && <> U + ELSE + loReturn.TotalTVARON = loReturn.totaltva + ENDIF && <> RON + + + + loReturn.detalii = "" + If Type('loFactura.Invoice.note') <> 'U' + If Type('loFactura.Invoice.note', 1) = 'A' + Acopy(loFactura.Invoice.note, laDetalii) + ELSE + IF TYPE('loFactura.Invoice.note') = 'C' + laDetalii[1] = loFactura.Invoice.note + ELSE + IF TYPE('loFactura.Invoice.note._nodetext_') = 'C' + laDetalii[1] = loFactura.Invoice.note._nodetext_ + ENDIF + ENDIF + Endif + + lnDetalii = Alen(laDetalii) + For lnDetaliu = 1 To m.lnDetalii + lcDetaliu = '' + IF TYPE('laDetalii[m.lnDetaliu]') = 'C' + lcDetaliu = laDetalii[m.lnDetaliu] + ELSE + IF TYPE('laDetalii[m.lnDetaliu]._nodetext_') = 'C' + lcDetaliu = laDetalii[m.lnDetaliu]._nodetext_ + ENDIF + ENDIF + loReturn.detalii = loReturn.detalii + Iif(m.lnDetaliu > 1, " ", "") + m.lcDetaliu + Endfor + Endif + +* Detalii plata = conturi bancare plata + loReturn.detaliiplata = "" + If Type('loFactura.Invoice.paymentmeans') <> 'U' + If Type('loFactura.Invoice.paymentmeans', 1) = 'A' + Acopy(loFactura.Invoice.paymentmeans, laDetaliiPlata) + Else + laDetaliiPlata[1] = loFactura.Invoice.paymentmeans + Endif + + lnDetalii = Alen(laDetaliiPlata) + For lnDetaliu = 1 To m.lnDetalii + loDetaliu = laDetaliiPlata[m.lnDetaliu] + lcCodPlata = '' + lcContBanca = '' + lcBanca = '' + If Type('loDetaliu.paymentmeanscode') = 'C' + lcCodPlata = loDetaliu.paymentmeanscode + Else + If Type('loDetaliu.paymentmeanscode._nodetext_') = 'C' + lcCodPlata = loDetaliu.paymentmeanscode._nodetext_ + Endif + Endif + If !Empty(m.lcCodPlata) + Do Case + Case lcCodPlata = '10' + lcCodPlata = lcCodPlata + ' Numerar' + Case lcCodPlata = '20' + lcCodPlata = lcCodPlata + ' CEC' + Case lcCodPlata = '31' + lcCodPlata = lcCodPlata + ' Transfer' + Case lcCodPlata = '42' + lcCodPlata = lcCodPlata + ' OP' + Case lcCodPlata = '48' + lcCodPlata = lcCodPlata + ' Card' + Case lcCodPlata = '60' + lcCodPlata = lcCodPlata + ' BO' + Case lcCodPlata = '68' + lcCodPlata = lcCodPlata + ' Online' + Case lcCodPlata = '97' + lcCodPlata = lcCodPlata + ' Compensare' + Endcase + Endif + + If Type('loDetaliu.payeefinancialaccount.id') = 'C' + lcContBanca = loDetaliu.payeefinancialaccount.id + Else + If Type('loDetaliu.payeefinancialaccount.id._nodetext_') = 'C' + lcContBanca = loDetaliu.payeefinancialaccount.id._nodetext_ + Endif + Endif + If Type('loDetaliu.payeefinancialaccount.name') = 'C' + lcBanca = loDetaliu.payeefinancialaccount.name + Else + If Type('loDetaliu.payeefinancialaccount.name._nodetext_') = 'C' + lcBanca = loDetaliu.payeefinancialaccount.name._nodetext_ + Endif + Endif + loReturn.detaliiplata = loReturn.detaliiplata + Iif(m.lnDetaliu > 1, "; ", "") + ; + Iif(Empty(m.lcCodPlata), '', 'Tip: ' + m.lcCodPlata) + ; + Iif(Empty(m.lcContBanca), '', Iif(!Empty(m.lcCodPlata), ',', '') + ' IBAN: ' + m.lcContBanca) + ; + Iif(Empty(m.lcBanca), '', Iif(!Empty(m.lcContBanca), ',', '') + ' Banca: ' + m.lcBanca) + Endfor + Endif + + * Furnizor Denumire + If Type('lofactura.invoice.AccountingSupplierParty.Party.PartyLegalEntity.RegistrationName') = 'C' + loReturn.Furnizor = Alltrim(loFactura.Invoice.AccountingSupplierParty.Party.PartyLegalEntity.RegistrationName) + Else + If Type('lofactura.invoice.AccountingSupplierParty.Party.PartyLegalEntity.RegistrationName._nodetext_') = 'C' + loReturn.Furnizor = Alltrim(loFactura.Invoice.AccountingSupplierParty.Party.PartyLegalEntity.RegistrationName._nodetext_) + ELSE + If Type('lofactura.invoice.AccountingSupplierParty.Party.PartyLegalEntity[1].RegistrationName') = 'C' + loReturn.Furnizor = Alltrim(loFactura.Invoice.AccountingSupplierParty.Party.PartyLegalEntity[1].RegistrationName) + ELSE + If Type('lofactura.invoice.AccountingSupplierParty.Party.PartyLegalEntity[2].RegistrationName') = 'C' + loReturn.Furnizor = Alltrim(loFactura.Invoice.AccountingSupplierParty.Party.PartyLegalEntity[2].RegistrationName) + ENDIF + ENDIF + Endif + ENDIF + + * Cod fiscal Furnizor + If Type('lofactura.invoice.AccountingSupplierParty.Party.PartyTaxScheme.CompanyId') = 'C' + loReturn.CodFiscalFurnizor = Alltrim(lofactura.invoice.AccountingSupplierParty.Party.PartyTaxScheme.CompanyId) + Else + If Type('lofactura.invoice.AccountingSupplierParty.Party.PartyTaxScheme.CompanyId._nodetext_') = 'C' + loReturn.CodFiscalFurnizor = Alltrim(lofactura.invoice.AccountingSupplierParty.Party.PartyTaxScheme.CompanyId._nodetext_) + ELSE + If Type('lofactura.invoice.AccountingSupplierParty.Party.PartyLegalEntity.CompanyId') = 'C' + loReturn.CodFiscalFurnizor = Alltrim(lofactura.invoice.AccountingSupplierParty.Party.PartyLegalEntity.CompanyId) + Else + If Type('lofactura.invoice.AccountingSupplierParty.Party.PartyLegalEntity.CompanyId._nodetext_') = 'C' + loReturn.CodFiscalFurnizor = Alltrim(lofactura.invoice.AccountingSupplierParty.Party.PartyLegalEntity.CompanyId._nodetext_) + Endif + ENDIF + ENDIF + ENDIF + + + * Furnizor Cod Tara + If Type('lofactura.invoice.AccountingSupplierParty.Party.PostalAddress.Country.IdentificationCode') = 'C' + loReturn.CodTaraFurnizor = Alltrim(lofactura.invoice.AccountingSupplierParty.Party.PostalAddress.Country.IdentificationCode) + Else + If Type('lofactura.invoice.AccountingSupplierParty.Party.PostalAddress.Country.IdentificationCode._nodetext_') = 'C' + loReturn.CodTaraFurnizor = Alltrim(lofactura.invoice.AccountingSupplierParty.Party.PostalAddress.Country.IdentificationCode._nodetext_) + Endif + ENDIF + + * Furnizor Cod Judet + If Type('lofactura.invoice.AccountingSupplierParty.Party.PostalAddress.CountrySubentity') = 'C' + loReturn.CodJudetFurnizor = Alltrim(lofactura.invoice.AccountingSupplierParty.Party.PostalAddress.CountrySubentity) + Else + If Type('lofactura.invoice.AccountingSupplierParty.Party.PostalAddress.CountrySubentity._nodetext_') = 'C' + loReturn.CodJudetFurnizor = Alltrim(lofactura.invoice.AccountingSupplierParty.Party.PostalAddress.CountrySubentity._nodetext_) + Endif + Endif + + * Furnizor Localitate + If Type('lofactura.invoice.AccountingSupplierParty.Party.PostalAddress.CityName') = 'C' + loReturn.LocalitateFurnizor = Alltrim(lofactura.invoice.AccountingSupplierParty.Party.PostalAddress.CityName) + Else + If Type('lofactura.invoice.AccountingSupplierParty.Party.PostalAddress.CityName._nodetext_') = 'C' + loReturn.LocalitateFurnizor = Alltrim(lofactura.invoice.AccountingSupplierParty.Party.PostalAddress.CityName._nodetext_) + Endif + ENDIF + + * Furnizor Strada + If Type('lofactura.invoice.AccountingSupplierParty.Party.PostalAddress.StreetName') = 'C' + loReturn.StradaFurnizor = Alltrim(lofactura.invoice.AccountingSupplierParty.Party.PostalAddress.StreetName) + Else + If Type('lofactura.invoice.AccountingSupplierParty.Party.PostalAddress.StreetName._nodetext_') = 'C' + loReturn.StradaFurnizor = Alltrim(lofactura.invoice.AccountingSupplierParty.Party.PostalAddress.StreetName._nodetext_) + Endif + ENDIF + + * Client Denumire + If Type('lofactura.invoice.AccountingCustomerParty.Party.PartyLegalEntity.RegistrationName') = 'C' + loReturn.client = Alltrim(loFactura.Invoice.AccountingCustomerParty.Party.PartyLegalEntity.RegistrationName) + Else + If Type('lofactura.invoice.AccountingCustomerParty.Party.PartyLegalEntity.RegistrationName._nodetext_') = 'C' + loReturn.client = Alltrim(loFactura.Invoice.AccountingCustomerParty.Party.PartyLegalEntity.RegistrationName._nodetext_) + Endif + ENDIF + + * Cod fiscal Client + If Type('lofactura.invoice.AccountingCustomerParty.Party.PartyTaxScheme.CompanyId') = 'C' + loReturn.CodFiscalClient = Alltrim(lofactura.invoice.AccountingCustomerParty.Party.PartyTaxScheme.CompanyId) + Else + If Type('lofactura.invoice.AccountingCustomerParty.Party.PartyTaxScheme.CompanyId._nodetext_') = 'C' + loReturn.CodFiscalClient = Alltrim(lofactura.invoice.AccountingCustomerParty.Party.PartyTaxScheme.CompanyId._nodetext_) + ELSE + If Type('lofactura.invoice.AccountingCustomerParty.Party.PartyLegalEntity.CompanyId') = 'C' + loReturn.CodFiscalClient = Alltrim(lofactura.invoice.AccountingCustomerParty.Party.PartyLegalEntity.CompanyId) + Else + If Type('lofactura.invoice.AccountingCustomerParty.Party.PartyLegalEntity.CompanyId._nodetext_') = 'C' + loReturn.CodFiscalClient = Alltrim(lofactura.invoice.AccountingCustomerParty.Party.PartyLegalEntity.CompanyId._nodetext_) + Endif + ENDIF + ENDIF + ENDIF + + * Client Cod Tara + If Type('lofactura.invoice.AccountingCustomerParty.Party.PostalAddress.Country.IdentificationCode') = 'C' + loReturn.CodTaraClient = Alltrim(lofactura.invoice.AccountingCustomerParty.Party.PostalAddress.Country.IdentificationCode) + Else + If Type('lofactura.invoice.AccountingCustomerParty.Party.PostalAddress.Country.IdentificationCode._nodetext_') = 'C' + loReturn.CodTaraClient = Alltrim(lofactura.invoice.AccountingCustomerParty.Party.PostalAddress.Country.IdentificationCode._nodetext_) + Endif + ENDIF + + * Client Cod Judet + If Type('lofactura.invoice.AccountingCustomerParty.Party.PostalAddress.CountrySubentity') = 'C' + loReturn.CodJudetClient = Alltrim(lofactura.invoice.AccountingCustomerParty.Party.PostalAddress.CountrySubentity) + Else + If Type('lofactura.invoice.AccountingCustomerParty.Party.PostalAddress.CountrySubentity._nodetext_') = 'C' + loReturn.CodJudetClient = Alltrim(lofactura.invoice.AccountingCustomerParty.Party.PostalAddress.CountrySubentity._nodetext_) + Endif + Endif + + * Client Localitate + If Type('lofactura.invoice.AccountingCustomerParty.Party.PostalAddress.CityName') = 'C' + loReturn.LocalitateClient = Alltrim(lofactura.invoice.AccountingCustomerParty.Party.PostalAddress.CityName) + Else + If Type('lofactura.invoice.AccountingCustomerParty.Party.PostalAddress.CityName._nodetext_') = 'C' + loReturn.LocalitateClient = Alltrim(lofactura.invoice.AccountingCustomerParty.Party.PostalAddress.CityName._nodetext_) + Endif + ENDIF + + * Client Strada + If Type('lofactura.invoice.AccountingCustomerParty.Party.PostalAddress.StreetName') = 'C' + loReturn.StradaClient = Alltrim(lofactura.invoice.AccountingCustomerParty.Party.PostalAddress.StreetName) + Else + If Type('lofactura.invoice.AccountingCustomerParty.Party.PostalAddress.StreetName._nodetext_') = 'C' + loReturn.StradaClient = Alltrim(lofactura.invoice.AccountingCustomerParty.Party.PostalAddress.StreetName._nodetext_) + Endif + ENDIF + + + * Cursor linii factura + If Type('lofactura.invoice.invoiceline', 1) = 'A' + Acopy(loFactura.Invoice.invoiceline, laLinii) + Else + laLinii[1] = loFactura.Invoice.invoiceline + Endif + + Try + lnLinii = Alen(laLinii) + For lnLinie = 1 To m.lnLinii + loLinie = laLinii[m.lnLinie] + lnNr = 0 + If Type('loLinie.id') = 'C' + lnNr = Int(Val(loLinie.id)) + Else + If Type('loLinie.id._nodetext_') = 'C' + lnNr = Int(Val(loLinie.id._nodetext_)) + Endif + ENDIF + + lnValoareFaraTVA = 0 + If Type('loLinie.LineExtensionAmount._nodetext_') = 'C' + lnValoareFaraTVA = Val(loLinie.LineExtensionAmount._nodetext_) + Endif + + lcArticol = '' + If Type('loLinie.item.name') = 'C' + lcArticol = Alltrim(loLinie.item.name) + Else + If Type('loLinie.item.name._nodetext_') = 'C' + lcArticol = Alltrim(loLinie.item.name._nodetext_) + Endif + Endif + lcArticolDescriere = '' + If Type('loLinie.item.description') = 'C' + lcArticolDescriere = Alltrim(loLinie.item.description) + Else + If Type('loLinie.item.description._nodetext_') = 'C' + lcArticolDescriere = Alltrim(loLinie.item.description._nodetext_) + Endif + Endif + + lcDetaliiLinie = '' + If Type('loLinie.note') <> 'U' + If Type('loLinie.note', 1) = 'A' + Acopy(loLinie.note, laDetaliiLinie) + Else + If Type('loLinie.note') = 'C' + laDetaliiLinie[1] = loLinie.note + Else + If Type('loLinie.note._nodetext_') = 'C' + laDetaliiLinie[1] = loLinie.note._nodetext_ + Endif + Endif + Endif + + lnDetaliiLinie = Alen(laDetaliiLinie) + For lnDetaliuLinie = 1 To m.lnDetaliiLinie + lcDetaliiLinie = m.lcDetaliiLinie + Iif(m.lnDetaliuLinie > 1, " ", "") + laDetaliiLinie[m.lnDetaliuLinie] + Endfor + ENDIF + + * Cod articol cumparator/client + lcCodClient = '' + If Type('loLinie.item.BuyersItemIdentification.ID') = 'C' + lcCodClient = Alltrim(loLinie.item.BuyersItemIdentification.ID) + Else + If Type('loLinie.item.BuyersItemIdentification.ID._nodetext_') = 'C' + lcCodClient = Alltrim(loLinie.item.BuyersItemIdentification.ID._nodetext_) + Endif + ENDIF + + * Cod articol vanzator/furnizor + lcCodFurnizor = '' + If Type('loLinie.item.SellersItemIdentification.ID') = 'C' + lcCodFurnizor = Alltrim(loLinie.item.SellersItemIdentification.ID) + Else + If Type('loLinie.item.SellersItemIdentification.ID._nodetext_') = 'C' + lcCodFurnizor = Alltrim(loLinie.item.SellersItemIdentification.ID._nodetext_) + Endif + ENDIF + + * Cod de bare articol + lcCodBare = '' + If Type('loLinie.item.StandardItemIdentification.ID') = 'C' + lcCodBare = Alltrim(loLinie.item.StandardItemIdentification.ID) + Else + If Type('loLinie.item.StandardItemIdentification.ID._nodetext_') = 'C' + lcCodBare = Alltrim(loLinie.item.StandardItemIdentification.ID._nodetext_) + Endif + ENDIF + + lcCodCPV = '' + lcCodNC8 = '' + If Type('loLinie.item.CommodityClassification') <> 'U' + If Type('loLinie.item.CommodityClassification', 1) = 'A' + Acopy(loLinie.item.CommodityClassification, laCommodityClassification) + Else + If Type('loLinie.item.CommodityClassification') = 'O' + laCommodityClassification[1] = loLinie.item.CommodityClassification + Endif + Endif + + lnCommodityClassifications = Alen(laCommodityClassification) + For lnCommodityClassification = 1 To m.lnCommodityClassifications + loCommodityClassification = laCommodityClassification[lnCommodityClassification] + IF TYPE('loCommodityClassification.ItemClassificationCode') = 'O' + loItemClassificationCode = loCommodityClassification.ItemClassificationCode + IF TYPE('loItemClassificationCode._attr_.listid') = 'C' AND TYPE('loItemClassificationCode._nodetext_') = 'C' + lcTip = UPPER(ALLTRIM(loItemClassificationCode._attr_.listid)) + lcCod = ALLTRIM(loItemClassificationCode._nodetext_) + DO CASE + CASE m.lcTip = 'EN' AND EMPTY(m.lcCodBare)&& cod bare + lcCodBare = m.lcCod + CASE m.lcTip = 'STI' && cod CPV + lcCodCPV = m.lcCod + CASE m.lcTip = 'TSP' && cod NC8 + lcCodNC8 = m.lcCod + ENDCASE + ENDIF && type + ENDIF && type + Endfor + ENDIF + + lnCant = Val(loLinie.invoicedquantity._nodetext_) + lcUM = loLinie.invoicedquantity._attr_.unitcode + lnPret = Val(loLinie.price.priceamount._nodetext_) + lcValuta = loLinie.price.priceamount._attr_.currencyid + lnDiscountLinie = 0 + IF TYPE('loLinie.AllowanceCharge.Amount._nodetext_') = 'C' + lnDiscountLinie = Val(loLinie.AllowanceCharge.Amount._nodetext_) + ENDIF + + lnProcTva = 0 + If Type('loLinie.item.ClassifiedTaxCategory.percent') = 'C' + lnProcTva = Val(loLinie.item.ClassifiedTaxCategory.percent) + Else + If Type('loLinie.item.ClassifiedTaxCategory.percent._nodetext_') = 'C' + lnProcTva = Val(loLinie.item.ClassifiedTaxCategory.percent._nodetext_) + Endif + ENDIF + + lcTipTVA = "" && S standard/Z neplatitor TVA/AE taxare inversa + If Type('loLinie.item.ClassifiedTaxCategory.ID') = 'C' + lcTipTva = loLinie.item.ClassifiedTaxCategory.ID + Else + If Type('loLinie.item.ClassifiedTaxCategory.ID._nodetext_') = 'C' + lcTipTva = loLinie.item.ClassifiedTaxCategory.ID._nodetext_ + Endif + Endif + +* Tip CreditNote am vazut ca nu are cantitate si pret negative pe linie, dar are valoare fara tva negativ!!! + If m.llCreditNote And m.lnCant > 0 And m.lnPret > 0 And m.lnValoareFaraTVA< 0 + lnCant = -1 * m.lnCant + Endif + + Insert Into cFacturaDetaliiTemp(nr, cant, um, articol, descriere, detalii, Pret, proctva, tiptva, valoarefaratva, discountfaratva, codfurnizor, codclient, codbare, codcpv, codnc8) Values (m.lnNr, m.lnCant, m.lcUM, m.lcArticol, m.lcArticolDescriere, m.lcDetaliiLinie, m.lnPret, lnProcTva, m.lcTipTva, m.lnValoareFaraTVA, m.lnDiscountLinie, m.lcCodFurnizor, m.lcCodClient, m.lcCodBare, m.lcCodCPV, m.lcCodNC8) + Endfor + Catch To loEx + loReturn.eroare = .T. + goLog.Log('Eroare la salvarea datelor extrase din xml eFactura. ' + 'Eroare: ' + TRANSFORM(loEx.ErrorNo) + ' ' + loEx.Message + ' Continut:' + loEx.LineContents + + ' Linia: ' + TRANSFORM(loEx.LineNo) + ' Program: ' + loEx.Procedure) + Set Step On + Endtry + + Cursortoxml("cfacturadetaliitemp", "lcFacturaDetalii", 1, 0 + 8, 0, "1") + loReturn.facturadetalii = m.lcFacturaDetalii + + USE IN (SELECT('cFacturaDetaliiTemp')) + + * cursor linii discount/taxe la nivel de factura + IF TYPE('lofactura.invoice.AllowanceCharge') <> 'U' + + If Type('lofactura.invoice.AllowanceCharge', 1) = 'A' + Acopy(loFactura.Invoice.AllowanceCharge, laLiniiDisc) + Else + laLiniiDisc[1] = loFactura.Invoice.AllowanceCharge + Endif + + Try + lnLinii = Alen(laLiniiDisc) + For lnLinie = 1 To m.lnLinii + loLinie = laLiniiDisc[m.lnLinie] + lnDiscount = 1 + If Type('loLinie.ChargeIndicator') = 'C' + lnDiscount = IIF(LOWER(ALLTRIM(loLinie.ChargeIndicator)) = 'false', 1, 0) && discount = false, taxe = true + Else + If Type('loLinie.ChargeIndicator._nodetext_') = 'C' + lnDiscount = IIF(LOWER(ALLTRIM(loLinie.ChargeIndicator._nodetext_)) = 'false', 1, 0) + Endif + ENDIF + + lcMotivDiscount = '' + If Type('loLinie.AllowanceChargeReason') = 'C' + lcMotivDiscount = ALLTRIM(loLinie.AllowanceChargeReason) + Else + If Type('loLinie.AllowanceChargeReason._nodetext_') = 'C' + lcMotivDiscount = ALLTRIM(loLinie.AllowanceChargeReason._nodetext_) + Endif + ENDIF + + lcMotivDiscountCod = '' + If Type('loLinie.AllowanceChargeReasonCode') = 'C' + lcMotivDiscountCod = ALLTRIM(loLinie.AllowanceChargeReasonCode) + Else + If Type('loLinie.AllowanceChargeReasonCode._nodetext_') = 'C' + lcMotivDiscountCod = ALLTRIM(loLinie.AllowanceChargeReasonCode._nodetext_) + Endif + ENDIF + + lnValoare = 0 + If Type('loLinie.Amount._nodetext_') = 'C' + lnValoare = Val(loLinie.Amount._nodetext_) + ENDIF + + lnProcTva = 0 + If Type('loLinie.TaxCategory.Percent') = 'C' + lnProcTva = val(loLinie.TaxCategory.Percent) + Else + If Type('loLinie.TaxCategory.Percent._nodetext_') = 'C' + lnProcTva = val(loLinie.TaxCategory.Percent._nodetext_) + Endif + ENDIF + + lcTipTVA = "" && S standard/Z neplatitor TVA/AE taxare inversa + If Type('loLinie.item.ClassifiedTaxCategory.ID') = 'C' + lcTipTva = loLinie.item.ClassifiedTaxCategory.ID + Else + If Type('loLinie.item.ClassifiedTaxCategory.ID._nodetext_') = 'C' + lcTipTva = loLinie.item.ClassifiedTaxCategory.ID._nodetext_ + Endif + Endif + + Insert Into cFacturaDetaliiDisc(valoare, procenttva, tiptva, discount, motivdiscount, motivdiscountcod) Values (m.lnValoare, m.lnProcTva, m.lcTipTVA, m.lnDiscount, m.lcMotivDiscount, m.lcMotivDiscountCod) + Endfor + Catch To loEx + loReturn.eroare = .T. + goLog.Log('Eroare la salvarea datelor extrase din xml eFactura. ' + 'Eroare: ' + TRANSFORM(loEx.ErrorNo) + ' ' + loEx.Message + ' Continut:' + loEx.LineContents + + ' Linia: ' + TRANSFORM(loEx.LineNo) + ' Program: ' + loEx.Procedure) + Set Step On + Endtry + + Cursortoxml("cFacturaDetaliiDisc", "lcFacturaDetaliiDisc", 1, 0 + 8, 0, "") + loReturn.facturadetaliiDisc = m.lcFacturaDetaliiDisc + + USE IN (SELECT('cFacturaDetaliiTVA')) + ENDIF && TYPE('lofactura.invoice.AllowanceCharge') <> 'U' + + Catch To loEx + loReturn.eroare = .T. + AMESSAGEBOX(loEx.Message) + Set Step On + Endtry + + Return loReturn +Endproc && ParseEFactura + +****************************** +PROCEDURE TestParseEFactura + + Local loEfactura As "ExportEFactura" + Local lcFile, loFactura + *:Global pcDetaliiXML, pcFurnizorXML, pcNumarActXML, pcNumeValutaXML, pcXMLFacturaDetalii + *:Global pdDataActXML, pdDataScadXML, pnDiscountFaraTVAXML, pnTaxeFaraTVAXML, pnTotalCuTVAXML + *:Global pnTotalFaraTVAXML, pnTotalTVAXML, pnTotaldePlataXML, pnValoareFaraTVAXML + + lcSetProcedure = LOWER(SET("Procedure")) + lcSetClasslib = LOWER(SET("Classlib")) + + * json read + IF !'nfxmlread'$lcSetProcedure + SET PROCEDURE TO 'd:\roa\roacont\comun\utile\nfxml\nfxmlread.prg' ADDITIVE + ENDIF + + * amessagebox + IF !'oproceduri_comune'$lcSetProcedure + SET PROCEDURE TO 'd:\roa\roacont\comun\programe\oproceduri_comune.prg' ADDITIVE + ENDIF + SET STEP ON + + lcFile = GETFILE('xml','Fisier xml','Deschide', 0, "Fisier xml eFactura") + IF EMPTY(m.lcFile) + RETURN + ENDIF + + TRY + loFactura = ParseEfactura(m.lcFile) + + pcNumarActXML = loFactura.numaract + pdDataActXML = loFactura.dataact + pdDataScadXML = loFactura.datascad + pcFurnizorXML = loFactura.furnizor + pcDetaliiXML = loFactura.detalii + pcDetaliiPlataXML = loFactura.DetaliiPlata + pnTotalFaraTVAXML = loFactura.TotalFaraTva + pnTotalTVAXML = loFactura.TotalTva + pnTotalTVARONXML = loFactura.TotalTvaRON && daca factura este in valuta, se completeaza TotalTVARON + pnTotalCuTVAXML = loFactura.TotalCuTva + pnDiscountFaraTVAXML = loFactura.DiscountFaraTVA + pnTaxeFaraTVAXML = loFactura.TaxeFaraTVA + pnValoareFaraTVAXML = loFactura.ValoareFaraTVA && suma valoare fara tva articole + pnTotaldePlataXML = loFactura.TotaldePlata + pcNumeValutaXML = loFactura.valuta + pcXMLFacturaDetalii = loFactura.FacturaDetalii + + XMLTOCURSOR(m.pcXmlFacturaDetalii, "factura_detalii") + Catch To loEx + MESSAGEBOX(loEx.message) + ENDTRY + +ENDPROC && TestParseEFactura + \ No newline at end of file diff --git a/COMUN/programe/ashowcursor.prg b/COMUN/programe/ashowcursor.prg new file mode 100644 index 0000000..9447426 --- /dev/null +++ b/COMUN/programe/ashowcursor.prg @@ -0,0 +1,921 @@ +** +** wwshowcursor.fxp +** + EXTERNAL ARRAY lvHeader +ENDPROC +* +DEFINE CLASS aShowCursor AS CUSTOM + DIMENSION afIeldlist[1] + nfIeldcount = 0 + ctAbletitle = "" + chEaderstring = "" + chEaderbgcolor = "DarkBlue" + chEadercolor = "White" + chEaderfont = "Verdana,Helvetica" + ctAblebgcolor = "#EEEEEE" + caLternatingbgcolor = "#B0DAFF" + laLternaterows = .F. + ctAblewidth = "98%" + ctAbleborder = "2" + ceXtratabletags = 'style="font:normal normal 10pt Verdana;border-collapse: collapse;border-color:black" bordercolor="darkgray"' + ccEllpadding = "3" + ccEllspacing = "0" + naSciileftcolumns = 20 + nmEmowidth = 25 + lcEntertable = .T. + lsUmnumerics = .F. + lsHowastable = .T. + lsOrtable = .F. + npAge_itemsperpage = 0 + npAge_showpage = 0 + npAge_totalpages = 0 + npAge_nextpage = 0 + npAge_prevpage = 0 + cpAge_pageurl = "" + cpAge_linkhtml = "" + cpAge_oldalias = "" + nfOrcetoprelist = 40000 + ohTml = .NULL. + cbAseurl = "" + ckEyfield = "" + ckEytype = "N" + ctAblefieldlist = "" + ctAbleeditfieldlist = "" + ctAblerecordfieldlist = "" + ctAblesortcolumn = "" + laLlowadd = .T. + laLlowdelete = .T. + coLdalias = "" + cnEwalias = "" + cSumLista= "" + lSumLista = .F. +* + PROCEDURE INIT + LPARAMETER loHtml + IF VARTYPE(loHtml)<>"O" + THIS.ohTml = CREATEOBJECT('wwResponseStringNoBuffer') + ELSE + THIS.ohTml = loHtml + ENDIF + THIS.nfIeldcount = AFIELDS(THIS.afIeldlist) + + + ENDPROC +* + PROCEDURE SetCursor + LPARAMETER lcDbf + lcDbf = IIF(TYPE("lcDBF")="C", lcDbf, "") + lcStem = JUSTSTEM(lcDbf) + IF .NOT. USED(lcStem) + THIS.coLdalias = ALIAS() + USE (lcDbf) IN 0 + ENDIF + SELECT (lcStem) + ENDPROC +* + PROCEDURE DESTROY + IF .NOT. EMPTY(THIS.coLdalias) .AND. USED(THIS.coLdalias) + USE IN (THIS.cnEwalias) + IF .NOT. EMPTY(THIS.coLdalias) + SELECT (THIS.coLdalias) + ENDIF + THIS.coLdalias = "" + THIS.cnEwalias = "" + ENDIF + ENDPROC +* + PROCEDURE BuildFieldListHeader + LPARAMETER lvHeader, llPrelist + LOCAL lcHeader, lnX + lcHeader = "" + IF .NOT. EMPTY(THIS.chEaderstring) + RETURN + ENDIF + IF THIS.lsOrtable .AND. EMPTY(THIS.cbAseurl) + THIS.cbAseurl = REQUEST.geTcurrenturl()+"&" + ENDIF + IF .NOT. llPrelist + IF TYPE("lvHeader[1]")<>"U" + lcHeader = "" + THIS.nfIeldcount = ALEN(lvHeader, 1) + FOR lnX = 1 TO THIS.nfIeldcount + lcHeader = lcHeader+''+lvHeader(lnX)+ ; + '' + ENDFOR + ELSE + FOR lnX = 1 TO THIS.nfIeldcount + IF THIS.afIeldlist(lnX,2)="M" + THIS.afIeldlist[lnX, 3] = THIS.nmEmowidth + ENDIF + IF THIS.afIeldlist(lnX,2)="T" + THIS.afIeldlist[lnX, 3] = 20 + ENDIF + IF THIS.afIeldlist(lnX,2)="I" + THIS.afIeldlist[lnX, 3] = 9 + ENDIF + IF THIS.lsOrtable .AND. THIS.afIeldlist(lnX,2)$"CNIL" + lcFieldName = PROPER(CHRTRAN(THIS.afIeldlist[lnX,1],"_"," ")) + " " + [] + CHR(0x35) +" " + [] + CHR(0x36) +" " + CHR(13)+CHR(10) + ELSE + lcFieldName = PROPER(CHRTRAN(THIS.afIeldlist(lnX, ; + 1), "_", " ")) + ENDIF + lcHeader = lcHeader+''+lcFieldName+ ; + '' + ENDFOR + ENDIF + THIS.chEaderstring = ''+ ; + lcHeader+'' + ELSE + IF TYPE("lvHeader[1]")="U" + lcHeader = "" + FOR lnX = 1 TO lnFields + IF LEN(TRIM(THIS.afIeldlist(lnX,1)))> ; + THIS.afIeldlist(lnX,3) + THIS.afIeldlist[lnX, 3] = ; + LEN(TRIM(THIS.afIeldlist(lnX,1))) + ENDIF + IF THIS.afIeldlist(lnX,2)="M" + THIS.afIeldlist[lnX, 3] = THIS.nmEmowidth + ENDIF + IF THIS.afIeldlist(lnX,2)="T" + THIS.afIeldlist[lnX, 3] = 20 + ENDIF + IF THIS.afIeldlist(lnX,2)="I" + THIS.afIeldlist[lnX, 3] = 9 + ENDIF + IF THIS.afIeldlist(lnX,2)$"NFBIY" + lcHeader = lcHeader+""+ ; + PADC(THIS.afIeldlist(lnX,1), ; + THIS.afIeldlist(lnX,3))+" " + ELSE + lcHeader = lcHeader+""+ ; + PADC(THIS.afIeldlist(lnX,1), ; + THIS.afIeldlist(lnX,3))+" " + ENDIF + ENDFOR + ELSE + lcHeader = "" + FOR lnX = 1 TO ALEN(lvHeader, 1) + IF LEN(TRIM(lvHeader(lnX)))>THIS.afIeldlist(lnX,3) + THIS.afIeldlist[lnX, 3] = ; + LEN(TRIM(THIS.afIeldlist(lnX,1))) + ENDIF + IF THIS.afIeldlist(lnX,2)="M" + THIS.afIeldlist[lnX, 3] = 20 + ENDIF + IF THIS.afIeldlist(lnX,2)="T" + THIS.afIeldlist[lnX, 3] = 20 + ENDIF + lnSizeloc = ATC(":", lvHeader(lnX)) + IF lnSizeloc>0 + lnSize = VAL(SUBSTR(ALLTRIM(lvHeader(lnX)), ; + lnSizeloc+1)) + lvHeader[lnX] = SUBSTR(lvHeader(lnX), 1, lnSizeloc-1) + ELSE + lnSize = THIS.afIeldlist(lnX,3) + ENDIF + IF THIS.afIeldlist(lnX,2)$"NFBIY" + lcHeader = lcHeader+""+PADC(lvHeader(lnX), ; + lnSize)+" " + ELSE + lcHeader = lcHeader+""+PADC(lvHeader(lnX), ; + lnSize)+" " + ENDIF + ENDFOR + ENDIF + THIS.chEaderstring = lcHeader + ENDIF + ENDPROC +* + FUNCTION ShowCursor + LOCAL lcHeader, lnX, laTotals, lcOutput, lnSizeloc, lnSize, lvValue + IF EMPTY(ALIAS()) + RETURN "" + ENDIF + IF THIS.lsOrtable + lnSort = VAL(REQUEST.quErystring("Sorted")) + IF lnSort>0 + THIS.ctAblesortcolumn = TRANSFORM(lnSort) + IF .NOT. EMPTY(REQUEST.quErystring("SortDescending")) + THIS.ctAblesortcolumn = THIS.ctAblesortcolumn+ ; + " DESCENDING" + ENDIF + ENDIF + ENDIF + IF .NOT. EMPTY(THIS.ctAblefieldlist) + lcFields = THIS.ctAblefieldlist + lcOrder = IIF( .NOT. EMPTY(THIS.ctAblesortcolumn), "ORDER BY "+ ; + THIS.ctAblesortcolumn, "") + SELECT &lcFields FROM ALIAS() &lcOrder INTO CURSOR __TQuery + THIS.nfIeldcount = AFIELDS(THIS.afIeldlist) + ELSE + IF .NOT. EMPTY(THIS.ctAblesortcolumn) + lcOrder = IIF( .NOT. EMPTY(THIS.ctAblesortcolumn), ; + "ORDER BY "+THIS.ctAblesortcolumn, "") + SELECT * FROM ( ALIAS() ) &lcOrder INTO CURSOR __TQuery + ENDIF + ENDIF + lcOutput = "" + lnFields = THIS.nfIeldcount + lnReccount = RECCOUNT() + IF THIS.npAge_itemsperpage<>0 + THIS.paGefilter() + lnReccount = RECCOUNT() + ENDIF +* IF thIs.lsUmnumerics + DIMENSION laTotals[1, lnFields] + laTotals = 0 +* ENDIF + + IF THIS.lSumLista + LOCAL lalistacol + DIMENSION lalistacol[1, lnFields] + + lista2array(THIS.cSumLista,@lalistacol) + + ENDIF + + IF THIS.lsHowastable .AND. lnReccount*lnFields<=THIS.nfOrcetoprelist+1 + IF .NOT. EMPTY(THIS.ctAbletitle) + lcTitle = '

'+THIS.ctAbletitle+ ; + '

' + ELSE + lcTitle = "" + ENDIF + THIS.ohTml.WRITE(IIF(THIS.lcEntertable, '
'+CHR(13)+ ; + CHR(10), '')+''+CHR(13)+CHR(10)+IIF( ; + .NOT. EMPTY(lcTitle), lcTitle+CHR(13)+CHR(10), "")) + THIS.BuildFieldListHeader() + THIS.ohTml.WRITE(THIS.chEaderstring) + llAlternate = .T. + SCAN + lcRow = "" + FOR lnX = 1 TO lnFields + lcFieldName = THIS.afIeldlist(lnX,1) + lcFieldtype = THIS.afIeldlist(lnX,2) + lvValue = EVALUATE(lcFieldName) + DO CASE + CASE ISNULL(lvValue) + lcRow = lcRow+"" + CASE lcFieldtype="C" + lcRow = lcRow+"" + CASE lcFieldtype="M" + lcRow = lcRow+"" + CASE lcFieldtype$"NFBIY" + lcRow = lcRow+'' + IF THIS.lsUmnumerics OR (THIS.lSumLista AND ASCAN(lalistacol,ALLTRIM(STR(lnX)))>0) + laTotals[1, lnX] = laTotals(1,lnX)+lvValue + ENDIF + + CASE lcFieldtype="L" + lcRow = lcRow+'' + CASE lcFieldtype="D" + lcRow = lcRow+'' + CASE lcFieldtype="T" + lcRow = lcRow+'' + ENDCASE + ENDFOR + IF THIS.laLternaterows .AND. llAlternate + lcRow = ''+ ; + lcRow+"" + ELSE + lcRow = ''+lcRow+"" + ENDIF + llAlternate = .NOT. llAlternate + THIS.ohTml.WRITE(lcRow+CHR(13)+CHR(10)) + ENDSCAN + IF THIS.lsUmnumerics OR THIS.lSumLista && + lcRow = "" + FOR lnX = 1 TO lnFields + lcFieldName = THIS.afIeldlist(lnX,1) + lcFieldtype = THIS.afIeldlist(lnX,2) + IF lcFieldtype$"NFBIY" + lnTotal = laTotals(1,lnX) + IF this.lsumlista AND ASCAN(lalistacol,ALLTRIM(STR(lnX)))<=0 + lcRow = lcRow+"" + ELSE + lcRow = lcRow+'' + ENDIF + ELSE + lcRow = lcRow+"" + ENDIF + + ENDFOR + THIS.ohTml.WRITE(''+lcRow+''+CHR(13)+CHR(10)) + ENDIF + IF THIS.npAge_itemsperpage<>0 + IF USED("_TXQuery") + USE IN _TXQuery + ENDIF + IF USED(THIS.cpAge_oldalias) + SELECT (THIS.cpAge_oldalias) + ENDIF + IF .NOT. EMPTY(THIS.cpAge_linkhtml) + THIS.ohTml.faStwrite('') + ENDIF + ENDIF + THIS.ohTml.WRITE("
n/a"+IIF(EMPTY(lvValue), ; + "
", TRIM(lvValue))+"
"+IIF(EMPTY(lvValue), ; + "
", ; + THIS.ohTml.wrItememo(lvValue,.T.))+ ; + "
'+ ; + LTRIM(STR(lvValue, ; + THIS.afIeldlist(lnX,3), ; + THIS.afIeldlist(lnX,4)))+''+ ; + IIF(lvValue, "True", "False")+''+ ; + IIF(EMPTY(lvValue), "
", ; + DTOC(lvValue))+'
'+ ; + IIF(EMPTY(lvValue), "
", ; + LOWER(TTOC(lvValue)))+'
'+STR(lnTotal, ; + THIS.afIeldlist(lnX,3)+1, ; + THIS.afIeldlist(lnX,4))+'
'+''+THIS.cpAge_linkhtml+ ; + '
"+IIF(THIS.lcEntertable, '
', ; + '')+CHR(13)+CHR(10)) + ELSE + THIS.ohTml.WRITE('
'+CHR(13)+CHR(10)+IIF(THIS.lcEntertable,  ;
+				'
'+CHR(13)+CHR(10), '')) + IF .NOT. EMPTY(THIS.ctAbletitle) + lcTitle = '

'+THIS.ctAbletitle+'

' + ELSE + lcTitle = "" + ENDIF + THIS.chEaderstring = "" + THIS.BuildFieldListHeader( ,.T.) + THIS.ohTml.faStwrite(THIS.chEaderstring+CHR(13)+CHR(10)) + SCAN + lcRow = "" + FOR lnX = 1 TO lnFields + lcFieldName = THIS.afIeldlist(lnX,1) + lcFieldtype = THIS.afIeldlist(lnX,2) + lvValue = EVALUATE(lcFieldName) + DO CASE + CASE ISNULL(lvValue) + lcRow = lcRow+PADC("n/a", ; + THIS.afIeldlist(lnX,3)) + CASE lcFieldtype="C" + lcRow = lcRow+PADR(lvValue, ; + THIS.afIeldlist(lnX,3)) + CASE lcFieldtype="M" + lcRow = lcRow+PADR(MLINE(lvValue, 1), 25) + CASE lcFieldtype$"NFBIY" + lcRow = lcRow+STR(lvValue, ; + THIS.afIeldlist(lnX,3), ; + THIS.afIeldlist(lnX,4)) + IF THIS.lsUmnumerics OR (THIS.lSumLista AND ASCAN(lalistacol,ALLTRIM(STR(lnX)))>0) + laTotals[1, lnX] = laTotals(1,lnX)+lvValue + ENDIF + CASE lcFieldtype="L" + lcRow = lcRow+PADR(IIF(lvValue, "True ", ; + "False"), THIS.afIeldlist(lnX,3)) + CASE lcFieldtype="D" + lcRow = lcRow+DTOC(lvValue) + CASE lcFieldtype="T" + lcRow = lcRow+TTOC(lvValue) + ENDCASE + lcRow = lcRow+" | " + ENDFOR + THIS.ohTml.faStwrite(lcRow+CHR(13)+CHR(10)) + ENDSCAN + IF THIS.lsUmnumerics OR THIS.lSumLista + lcRow = "" + FOR lnX = 1 TO lnFields + lcFieldName = THIS.afIeldlist(lnX,1) + lcFieldtype = THIS.afIeldlist(lnX,2) + IF lcFieldtype$"NFBIY" + lnTotal = laTotals(1,lnX) && + IF this.lSumLista AND ASCAN(lalistacol,ALLTRIM(STR(lnX)))<=0 + lcRow = lcRow+SPACE(THIS.afIeldlist(lnX,3)+3) + ELSE + lcRow = lcRow+STR(lnTotal, THIS.afIeldlist(lnX, ; + 3), THIS.afIeldlist(lnX,4))+" " + ENDIF + ELSE + lcRow = lcRow+SPACE(THIS.afIeldlist(lnX,3)+3) + ENDIF + + ENDFOR + THIS.ohTml.faStwrite(''+lcRow+'') + ENDIF + THIS.ohTml.faStwrite(IIF(THIS.lcEntertable, '
'+ ; + CHR(13)+CHR(10), '')+"
") + ENDIF + IF .NOT. EMPTY(THIS.ctAblefieldlist) + IF USED("__TQuery") + USE IN __TQuery + ENDIF + ENDIF + RETURN + ENDFUNC +* + PROCEDURE ShowASCIIRecord + LOCAL lnX, lcFieldcaption, lnFieldcount, lcFieldtype, lcFieldName + lcOutput = "" + lcFieldcaption = "" + IF .NOT. EMPTY(DBC()) .AND. INDBC(ALIAS()+'.'+THIS.afIeldlist(1,1), ; + 'Field') .AND. TYPE(ALIAS()+"."+THIS.afIeldlist(1,1))<>"U" + FOR lnX = 1 TO THIS.nfIeldcount + lcFieldcaption = PROPER(PADL(DBGETPROP(ALIAS()+"."+ ; + THIS.afIeldlist(lnX,1), "FIELD", ; + "Caption"), 25))+": " + THIS.afIeldlist[lnX, 11] = lcFieldcaption + ENDFOR + ELSE + FOR lnX = 1 TO THIS.nfIeldcount + THIS.afIeldlist[lnX, 11] = ; + PADL(PROPER(THIS.afIeldlist(lnX,1)), ; + THIS.naSciileftcolumns)+": " + ENDFOR + ENDIF + FOR lnX = 1 TO THIS.nfIeldcount + lcFieldName = THIS.afIeldlist(lnX,1) + lcFieldtype = THIS.afIeldlist(lnX,2) + lcFieldcaption = THIS.afIeldlist(lnX,11) + lvValue = EVALUATE(lcFieldName) + lcRow = lcFieldcaption + DO CASE + CASE ISNULL(lvValue) + lcRow = lcRow+"n/a" + CASE lcFieldtype="C" + lcRow = lcRow+TRIM(lvValue) + CASE lcFieldtype="M" + lcRow = lcRow+THIS.ohTml.wrItememo(TRIM(lvValue),.T.) + CASE lcFieldtype$"NFBIY" + lcRow = lcRow+LTRIM(STR(lvValue, THIS.afIeldlist(lnX, ; + 3), THIS.afIeldlist(lnX,4))) + CASE lcFieldtype="L" + lcRow = lcRow+IIF(lvValue, "True", "False") + CASE lcFieldtype="D" + lcRow = lcRow+DTOC(lvValue) + CASE lcFieldtype="T" + lcRow = lcRow+TTOC(lvValue) + ENDCASE + THIS.ohTml.WRITE(lcRow+CHR(13)+CHR(10)) + ENDFOR + ENDPROC +* + PROCEDURE ShowRecord + LOCAL lnX, lcFieldcaption, lnFieldcount, lcFieldtype, lcFieldName + lcOutput = "" + lcFieldcaption = "" + lcFieldlist = THIS.ctAblerecordfieldlist + IF .NOT. EMPTY(lcFieldlist) + lcFields = lcFieldlist + lnRecno = RECNO() + SELECT &lcFields FROM ALIAS() WHERE RECNO() = lnRecno INTO CURSOR __TQuery + THIS.nfIeldcount = AFIELDS(THIS.afIeldlist) + ENDIF + THIS.ohTml.WRITE(IIF(THIS.lcEntertable, '
'+CHR(13)+CHR(10), ; + '')+'') + IF .NOT. EMPTY(DBC()) .AND. INDBC(ALIAS()+'.'+THIS.afIeldlist(1,1), ; + 'Field') .AND. TYPE(ALIAS()+"."+THIS.afIeldlist(1,1))<>"U" + FOR lnX = 1 TO THIS.nfIeldcount + lcCaption = DBGETPROP(ALIAS()+"."+THIS.afIeldlist(lnX,1), ; + "FIELD", "Caption") + lcCaption = IIF( .NOT. EMPTY(lcCaption), lcCaption, ; + PROPER(THIS.afIeldlist(lnX,1))) + lcCaption = PROPER(STRTRAN(lcCaption, "_", " ")) + lcFieldcaption = '' + THIS.afIeldlist[lnX, 11] = lcFieldcaption + ENDFOR + ELSE + FOR lnX = 1 TO THIS.nfIeldcount + THIS.afIeldlist[lnX, 11] = '' + ENDFOR + ENDIF + FOR lnX = 1 TO THIS.nfIeldcount + lcFieldName = THIS.afIeldlist(lnX,1) + lcFieldtype = THIS.afIeldlist(lnX,2) + lcFieldcaption = THIS.afIeldlist(lnX,11) + lvValue = EVALUATE(lcFieldName) + lcRow = lcFieldcaption + DO CASE + CASE ISNULL(lvValue) + lcRow = lcRow+"" + CASE lcFieldtype="C" .OR. lcFieldtype="M" + lcRow = lcRow+"" + CASE lcFieldtype$"NFBY" + lcRow = lcRow+'' + CASE lcFieldtype="I" + lcRow = lcRow+'' + CASE lcFieldtype="L" + lcRow = lcRow+'' + CASE lcFieldtype="D" + lcRow = lcRow+'' + CASE lcFieldtype="T" + lcRow = lcRow+'' + ENDCASE + THIS.ohTml.WRITE(lcRow+""+CHR(13)+CHR(10)) + ENDFOR + THIS.ohTml.WRITE("
'+lcCaption+":"+ ; + '
'+ ; + PROPER(STRTRAN(THIS.afIeldlist(lnX,1), "_", ; + " "))+'n/a"+IIF(EMPTY(lvValue), "
", ; + THIS.ohTml.wrItememo(lvValue,.T.))+"
'+LTRIM(STR(lvValue, ; + THIS.afIeldlist(lnX,3), THIS.afIeldlist(lnX, ; + 4)))+''+TRANSFORM(lvValue)+''+IIF(lvValue, "True", "False")+''+IIF(EMPTY(lvValue), "
", ; + DTOC(lvValue))+'
'+IIF(EMPTY(lvValue), "
", ; + TTOC(lvValue))+'
"+CHR(13)+CHR(10)+IIF(THIS.lcEntertable, ; + '
'+CHR(13)+CHR(10), "")) + ENDPROC +* + PROCEDURE ShowObject + LPARAMETER loObject + LOCAL lnX, lcFieldcaption, lnFieldcount, lcFieldtype, lcFieldName, lcRow + lcOutput = "" + THIS.ohTml.WRITE(IIF(THIS.lcEntertable, '
'+CHR(13)+CHR(10), ; + '')+'') + lnFieldcount = AMEMBERS(laFields, loObject) + FOR lnX = 1 TO lnFieldcount + lcField = laFields(lnX) + lcRow = '' + lvValue = EVALUATE("loObject."+lcField) + lcType = VARTYPE(lvValue) + DO CASE + CASE ISNULL(lvValue) + lcValue = "null" + CASE lcType="C" + IF EMPTY(lvValue) + lcValue = " " + ELSE + lcValue = diSplaymemo(lvValue) + ENDIF + CASE lcType="D" + lcValue = TRANSFORM(lvValue) + CASE lcType="T" + lcValue = tiMetoc(lvValue) + CASE lcType="L" + lcValue = IIF(lvValue, "True", "False") + CASE lcType="O" + lcValue = "Object" + CASE lcType="U" + lcValue = "Undefined" + OTHERWISE + lcValue = TRANSFORM(lvValue) + ENDCASE + THIS.ohTml.WRITE(lcRow+""+CHR(13)+CHR(10)) + ENDFOR + THIS.ohTml.WRITE(IIF(THIS.lcEntertable, ''+CHR(13)+CHR(10), ; + "")+"
'+ ; + PROPER(lcField)+":"+'"+lcValue+"
"+CHR(13)+CHR(10)) + ENDPROC +* + PROCEDURE EditRecord + LOCAL lnX, lcFieldcaption, lnFieldcount, lcFieldtype, lcFieldName, ; + lcKeyvalue + lcOutput = "" + lcFieldcaption = "" + lcFieldlist = THIS.ctAbleeditfieldlist + IF .NOT. EMPTY(THIS.ckEyfield) + lcKeyvalue = EVALUATE(THIS.ckEyfield) + ELSE + lcKeyvalue = "" + ENDIF + IF .NOT. EMPTY(lcFieldlist) + lcFields = lcFieldlist + lnRecno = RECNO() + SELECT &lcFields FROM ALIAS() WHERE RECNO() = lnRecno INTO CURSOR __TQuery + THIS.nfIeldcount = AFIELDS(THIS.afIeldlist) + ENDIF + THIS.ohTml.WRITE(IIF(THIS.lcEntertable, '
'+CHR(13)+CHR(10), ; + '')+''+CHR(13)+CHR(10)) + IF .NOT. EMPTY(DBC()) .AND. INDBC(ALIAS()+'.'+THIS.afIeldlist(1,1), ; + 'Field') .AND. TYPE(ALIAS()+"."+THIS.afIeldlist(1,1))<>"U" + FOR lnX = 1 TO THIS.nfIeldcount + lcCaption = DBGETPROP(ALIAS()+"."+THIS.afIeldlist(lnX,1), ; + "FIELD", "Caption") + lcCaption = IIF( .NOT. EMPTY(lcCaption), lcCaption, ; + PROPER(THIS.afIeldlist(lnX,1))) + lcCaption = PROPER(STRTRAN(lcCaption, "_", " ")) + lcFieldcaption = ''+CHR(13)+CHR(10) + THIS.afIeldlist[lnX, 11] = lcFieldcaption + ENDFOR + ELSE + FOR lnX = 1 TO THIS.nfIeldcount + THIS.afIeldlist[lnX, 11] = ''+CHR(13)+CHR(10) + ENDFOR + ENDIF + FOR lnX = 1 TO THIS.nfIeldcount + lcFieldName = THIS.afIeldlist(lnX,1) + lcFieldtype = THIS.afIeldlist(lnX,2) + lnFieldwidth = THIS.afIeldlist(lnX,3) + lcFieldcaption = THIS.afIeldlist(lnX,11) + lvValue = EVALUATE(lcFieldName) + lcRow = lcFieldcaption + DO CASE + CASE lcFieldtype="C" + lcRow = lcRow+'' + CASE lcFieldtype="M" + lcRow = lcRow+ ; + '' + CASE lcFieldtype$"NFBIY" + lcRow = lcRow+'' + CASE lcFieldtype="L" + lcRow = lcRow+'' + CASE lcFieldtype="D" + lcRow = lcRow+'' + CASE lcFieldtype="T" + lcRow = lcRow+'' + ENDCASE + THIS.ohTml.WRITE(lcRow+""+CHR(13)+CHR(10)) + ENDFOR + IF .NOT. EMPTY(lcKeyvalue) + THIS.ohTml.WRITE('') + ENDIF + THIS.ohTml.WRITE("
'+lcCaption+":"+ ; + '
'+ ; + PROPER(STRTRAN(THIS.afIeldlist(lnX,1), "_", ; + " "))+'
"+IIF(THIS.lcEntertable, '
'+ ; + CHR(13)+CHR(10), "")+CHR(13)+CHR(10)) + ENDPROC +* + PROCEDURE SaveRecord + LOCAL lnX, lcFieldcaption, lnFieldcount, lcFieldtype, lcFieldName + FOR lnX = 1 TO THIS.nfIeldcount + lcFieldName = THIS.afIeldlist(lnX,1) + lcFieldtype = THIS.afIeldlist(lnX,2) + IF .NOT. REQUEST.isFormvar(lcFieldName) + LOOP + ENDIF + lvValue = REQUEST.FORM(lcFieldName) + DO CASE + CASE lcFieldtype="C" .OR. lcFieldtype="M" + REPLACE &lcFieldName WITH lvValue + CASE lcFieldtype$"NFBIY" + REPLACE &lcFieldName WITH VAL(lvValue) + CASE lcFieldtype="L" + REPLACE &lcFieldName WITH IIF(lvValue="T",.T.,.F.) + CASE lcFieldtype="D" + REPLACE &lcFieldName WITH CTOD(lvValue) + CASE lcFieldtype="T" + REPLACE &lcFieldName WITH CTOT(lvValue) + ENDCASE + ENDFOR + ENDPROC +* + PROCEDURE EditTable + LOCAL lcFields + lcAction = UPPER(REQUEST.quErystring("Action")) + lcId = REQUEST.quErystring("ID") + DO CASE + CASE lcAction="EDIT" .OR. lcAction="ADD" + IF .NOT. THIS.laLlowadd + THIS.ohTml.WRITE( ; + "Sorry! Adding is not allowed at this time..." ; + ) + RETURN + ENDIF + IF lcAction="ADD" + llAdd = .T. + ELSE + llAdd = .F. + ENDIF + loResponse = THIS.ohTml + lcKeyfield = THIS.ckEyfield + IF llAdd + LOCATE FOR .F. + loResponse.WRITE([
] +CHR(13)+CHR(10)) + ELSE + IF THIS.ckEytype="N" + LOCATE FOR &lcKeyfield = VAL(lcId) + ELSE + LOCATE FOR &lcKeyfield = lcId + ENDIF + IF .NOT. FOUND() + loResponse.stAndardpage( ; + "Couldn't edit record. Invalid Key Field...", , ; + "NONE") + RETURN + ENDIF + loResponse.WRITE([] +CHR(13)+CHR(10)) + ENDIF + loResponse.WRITE([] +CHR(13)+CHR(10)) + loResponse.WRITE( ; + '

' ; + ) + THIS.EditRecord() + loResponse.WRITE( ; + '

' ; + ) + loResponse.WRITE('

'+CHR(13)+CHR(10)) + CASE lcAction="SHOW" + loResponse = THIS.ohTml + lcKeyfield = THIS.ckEyfield + IF THIS.ckEytype="N" + LOCATE FOR &lcKeyfield = VAL(lcId) + ELSE + LOCATE FOR &lcKeyfield = lcId + ENDIF + IF .NOT. FOUND() + loResponse.stAndardpage( ; + "Couldn't edit record. Invalid Key Field...", ,"NONE") + RETURN + ENDIF + THIS.ShowRecord() + CASE lcAction="SAVE" + loResponse = THIS.ohTml + lcKeyfield = THIS.ckEyfield + IF lcAction="SAVENEW" + APPEND BLANK + ELSE + IF THIS.ckEytype="N" + LOCATE FOR &lcKeyfield = VAL(lcId) + ELSE + LOCATE FOR &lcKeyfield = lcId + ENDIF + IF .NOT. FOUND() + loResponse.erRormsg( ; + "Couldn't edit record. Invalid Key Field...") + RETURN + ENDIF + ENDIF + THIS.SaveRecord() + reSponse.reDirect(THIS.cbAseurl) + CASE lcAction="DELETE" + lcKeyfield = THIS.ckEyfield + IF .NOT. THIS.laLlowdelete + THIS.ohTml.WRITE( ; + "Sorry! Deleting is not allowed at this time..." ; + ) + RETURN + ENDIF + IF THIS.ckEytype="N" + LOCATE FOR &lcKeyfield = VAL(lcId) + ELSE + LOCATE FOR &lcKeyfield = lcId + ENDIF + IF .NOT. FOUND() + THIS.ohTml.stAndardpage( ; + "Couldn't delete record. Invalid Key Field...") + RETURN + ENDIF + DELETE + reSponse.reDirect(THIS.cbAseurl) + OTHERWISE + IF THIS.laLlowadd + THIS.ohTml.WRITE('Add a new record

') + ENDIF + lcKeyfield = THIS.ckEyfield + IF EMPTY(THIS.ctAblefieldlist) + lcFields = "*" + ELSE + lcFields = THIS.ctAblefieldlist + ENDIF + lcOrder = IIF( .NOT. EMPTY(THIS.ctAblesortcolumn), ; + "ORDER BY "+THIS.ctAblesortcolumn, "") + SELECT &lcFields, PADR([Show | Edit] + IIF(THIS.laLlowdelete,[ | Delete],[]), 254) AS Action FROM ALIAS() &lcOrder INTO CURSOR __TxQuery + THIS.nfIeldcount = AFIELDS(THIS.afIeldlist) + lcOldtablefieldlist = THIS.ctAblefieldlist + THIS.ctAblefieldlist = "" + THIS.ShowCursor() + THIS.ctAblefieldlist = lcOldtablefieldlist + USE IN __TxQuery + ENDCASE + ENDPROC +* + FUNCTION GetOutput + IF .NOT. ISNULL(THIS.ohTml) + RETURN THIS.ohTml.GetOutput() + ENDIF + RETURN "" + ENDFUNC +* + PROCEDURE paGefilter + LOCAL lnX, lcOutput, lcStyle, lnPages, lnReclow, lnHighrec, ; + lnEndpage, lnStartpage, lcNolinkstyle, lnReccount + IF EMPTY(THIS.npAge_showpage) + THIS.npAge_showpage = VAL(REQUEST.quErystring("PAGE")) + IF THIS.npAge_showpage<1 + THIS.npAge_showpage = 1 + ENDIF + ENDIF + lnReccount = RECCOUNT() + IF lnReccount<=THIS.npAge_itemsperpage + RETURN + ENDIF + THIS.cpAge_oldalias = ALIAS() + lnPages = lnReccount/THIS.npAge_itemsperpage + IF INT(lnPages)1 + THIS.npAge_prevpage = THIS.npAge_showpage-1 + ELSE + THIS.npAge_prevpage = 0 + ENDIF + IF THIS.npAge_showpage=0 + THIS.npAge_showpage = 1 + ENDIF + IF THIS.npAge_showpage<=lnPages + lnReclow = (THIS.npAge_showpage-1)*THIS.npAge_itemsperpage+1 + lnHighrec = THIS.npAge_showpage*THIS.npAge_itemsperpage + SELECT * FROM (THIS.cpAge_oldalias) WHERE RECNO()>=lnReclow ; + AND RECNO()<=lnHighrec INTO CURSOR _TXQuery + ENDIF + IF .NOT. EMPTY(THIS.cpAge_pageurl) + IF lnPages<=10 + lnStartpage = 1 + lnEndpage = lnPages + ELSE + lnStartpage = THIS.npAge_showpage-4 + IF lnStartpage<1 + lnStartpage = 1 + ENDIF + lnEndpage = THIS.npAge_showpage+5 + IF lnEndpage>lnPages + lnEndpage = lnPages + ENDIF + ENDIF + lcOutput="Pages:  " + lcStyle = ' STYLE="color:'+THIS.chEadercolor+ ; + ';text-decoration:none underline"' + lcNolinkstyle = ' STYLE="color:'+THIS.chEadercolor+';"' + FOR lnX = lnStartpage TO lnEndpage + IF lnX=THIS.npAge_showpage + lcOutput = lcOutput+' '+ ; + TRANSFORM(lnX)+' ' + ELSE + lcOutput = lcOutput+''+ ; + TRANSFORM(lnX)+' ' + ENDIF + ENDFOR + lcOutput=lcOutput + [     1] + lcOutput=lcOutput + [..] + TRANSFORM(lnPages) + [  ] + IF THIS.npAge_prevpage<>0 + lcOutput = lcOutput+' Prev' + ELSE + lcOutput=lcOutput + [   Prev] + ENDIF + IF THIS.npAge_nextpage<>0 + lcOutput=lcOutput + [  Next] + ELSE + lcOutput=lcOutput + [  Next] + ENDIF + THIS.cpAge_linkhtml=lcOutput + " " + ENDIF + RETURN + ENDPROC +* +ENDDEFINE +* diff --git a/COMUN/programe/blat.prg b/COMUN/programe/blat.prg new file mode 100644 index 0000000..6c06a2c --- /dev/null +++ b/COMUN/programe/blat.prg @@ -0,0 +1,266 @@ +*!* 23.06.2014 +*!* marius.mutu +*!* SendViaBlat: Am pus calea copleta catre blat.dll + +******************************* +*!* Example of using SendViaBLAT +******************************* +#Define PRIORITYHIGH 1 +#Define PRIORITYLOW 0 + + +*!* SET PROCEDURE TO blat.prg ADDITIVE +#If .F. + Dimension aryAttach(2) + aryAttach(1) = "G:\conpress_ziare\PUBLICATIISERVER\log\server_PUBLICATIISERVER_20090810.log" && change to an actual file that exists on your computer + aryAttach(2) = "G:\conpress_ziare\PUBLICATIISERVER\log\serverupdate_PUBLICATIISERVER_20090810.log" && change to an actual file that exists on your computer + + Local lcFrom, lcTo, lcSubject, lcBody, lcCC, lcBCC, lcMailServer, lcUserName, lcPassword, lnPort, lnPriority, llHTMLFormat, lcErrReturn + + lcFrom = "publicatiiserver@conpressgroup.ro" + lcTo = "marius.mutu@romfast.ro" + lcSubject = "Hey Have You Tried VFP Email?" + *!* Sending the body in HTML format + llHTMLFormat = .T. && change to .F. to send plain text message + lcBody = "" + ; + "Hey Have You Tried VFP Email?" + ; + "" + lcCC = "mmarius28@yahoo.com" + lcBCC = "mmarius28@google.com" + lcMailServer = "romfast.ro" && my SMTP Server + lnPort = 25 && default SMTP Server port + lcUserName = "marius.mutu" && my SMTP username + lcPassword = "parola" && my SMTP password + lnPriority = PRIORITYHIGH + + SendViaBLAT(@lcErrReturn, lcFrom, lcTo, lcSubject, lcBody, @aryAttach, lcCC, lcBCC, lcMailServer, lnPort, lcUserName, lcPassword, lnPriority, llHTMLFormat) + + If Empty(lcErrReturn) + Messagebox("'" + lcSubject + "' sent successfullly.", 64, "Send email via BLAT") + Else + Messagebox("'" + lcSubject + "' failed to be sent. Reason:" + Chr(13) + lcErrReturn, 64, "Send email via BLAT") + Endif + + + *!* BlatEmail.SendViaBlat RETURNS .T. IF SUCCES + *!* BlatEmail.IsError + *!* BlatEmail.ErrorMessage + loBlatEmail = Createobject("BlatEmail") + + loBlatEmail.From = 'my@server.ro' + loBlatEmail.To = 'marius.mutu@romfast.ro' + loBlatEmail.Subject = 'Subject' + loBlatEmail.HtmlFormat = .T. + loBlatEmail.Body = 'Body' + loBlatEmail.CC = 'marius.mutu@yahoo.com' + loBlatEmail.BCC = '' + loBlatEmail.Files = "c:\file1.txt,c:\file2.txt" + loBlatEmail.MailServer = 'mail.romfast.ro' + loBlatEmail.Port = 25 + loBlatEmail.UserName = 'marius.mutu' + loBlatEmail.Password = 'parola' + + llReturn = loBlatEmail.SendViaBLAT() + If llReturn + Messagebox("'" + loBlatEmail.Subject + "' sent successfullly.", 64, "Send email via BLAT") + Else + Messagebox("'" + loBlatEmail.Subject + "' failed to be sent. Reason:" + Chr(13) + loBlatEmail.ErrorMessage, 64, "Send email via BLAT") + Endif + +#Endif + +Define Class BlatEmail As Custom + From = '' + To = '' + Subject = '' + HtmlFormat = .T. + Body = '' + CC = '' + BCC = '' + MailServer = '' + Port = 25 + UserName = '' + Password = '' + Priority = PRIORITYLOW + Files = '' + + ErrorMessage = '' + ISERROR = .F. + + + ******************************************* + Procedure SetAttachment + Lparameters tcFile + This.Files = This.Files + Iif(!Empty(This.Files), [,], []) + tcFile + Endproc && SetAttachment + + ******************************************* + Procedure ResetAttachments + This.Files = '' + Endproc && ResetAttachments + + Procedure SendViaBLAT + Local lcErrReturn, lcFrom, lcTo, lcSubject, lcBody, lcCC, lcBCC, lcMailServer, lnPort, lcUserName, lcPassword, lnPriority, llHTMLFormat + + lcErrReturn = '' + lcFrom = This.From + lcTo = This.To + lcSubject = This.Subject + lcBody = This.Body + lcCC = This.CC + lcBCC = This.BCC + lcMailServer= This.MailServer + lnPort = This.Port + lcUserName = This.UserName + lcPassword = This.Password + lnPriority = This.Priority + llHTMLFormat = This.HtmlFormat + lcFiles = This.Files + + SendViaBLAT(@lcErrReturn, lcFrom, lcTo, lcSubject, lcBody, lcFiles, lcCC, lcBCC, lcMailServer, lnPort, lcUserName, lcPassword, lnPriority, llHTMLFormat) + This.ISERROR = !Empty(lcErrReturn) + This.ErrorMessage = lcErrReturn + + Return !This.ISERROR + Endproc +Enddefine && BlatEmail + + +******************************************* +Procedure SendViaBLAT(tcReturn, tcFrom, tcTo, tcSubject, tcBody, tcFiles, tcCC, tcBCC, tcMailServer, tnPort, tcUserName, tcPassword, tnPriority, tlHtmlFormat) + ******************************************* + Local lcBlatParam, lcBodyFile, lnCountAttachments, lnResult, loError As Exception, lcFiles + lcBodyFile = "" + + Try + *!* Include full path in Declare, such as "C:\Blat240\full\blat.dll" + *!* or make sure that blat.dll is included in the system's PATH variable + lcBlatPath = ADDBS(m.dirgen) + [COMUNROA\blat.dll] + Declare Integer Send In (m.lcBlatPath) String cParam + + lcBodyFile = Addbs(Sys(2023)) + Sys(2015) + ".txt" + Strtofile(tcBody, lcBodyFile, 0) && body is placed in a text file to be sent by BLAT + + lcBlatParam = GetShortPath(lcBodyFile) + + If Type("tcTo") = "C" + lcBlatParam = lcBlatParam + " -to " + Alltrim(tcTo) + Endif + If Type("tcFrom") = "C" + lcBlatParam = lcBlatParam + " -f " + Alltrim(tcFrom) + Endif + If Type("tcCC") = "C" And !Empty(tcCC) + lcBlatParam = lcBlatParam + " -cc " + Alltrim(tcCC) + Endif + If Type("tcBCC") = "C" And !Empty(tcBCC) + lcBlatParam = lcBlatParam + " -bcc " + Alltrim(tcBCC) + Endif + If Type("tcSubject") = "C" And !Empty(tcSubject) + lcBlatParam = lcBlatParam + [ -s "] + Alltrim(tcSubject) + ["] + Endif + If Type("tcMailserver") = "C" And !Empty(tcMailServer) + lcBlatParam = lcBlatParam + " -server " + Alltrim(tcMailServer) + Endif + If Type("tnPort") = "N" And !Empty(tnPort) + lcBlatParam = lcBlatParam + ":" + Transform(tnPort) + Endif + If Type("tcUsername") = "C" And !Empty(tcUserName) + lcBlatParam = lcBlatParam + " -u " + Alltrim(tcUserName) + Endif + If Type("tcPassword") = "C" And !Empty(tcPassword) + lcBlatParam = lcBlatParam + " -pw " + Alltrim(tcPassword) + Endif + If Type("tnPriority") = "N" And Between(tnPriority, 0, 1) + lcBlatParam = lcBlatParam + " -priority " + Transform(tnPriority) + Endif + If Type("tlHTMLFormat") = "L" And tlHtmlFormat + lcBlatParam = lcBlatParam + " -html" + Endif + + *!* If Type("taFiles", 1) = "A" + *!* lcBlatParam = lcBlatParam + " -attach " + *!* For lnCountAttachments = 1 To Alen(taFiles) + *!* lcBlatParam = lcBlatParam + GetShortPath(Alltrim(taFiles(lnCountAttachments))) + "," + *!* Endfor + *!* lcBlatParam = Left(lcBlatParam, Len(lcBlatParam) - 1) && Remove Extra Comma + *!* Endif + + If Vartype(tcFiles) = "C" And !Empty(tcFiles) + tcFiles = Strtran(tcFiles, [;], [,]) + lcFiles = "" + For lnCountAttachments = 1 To Getwordcount(tcFiles,",") + lcFile = GetShortPath(Alltrim(Getwordnum(tcFiles,lnCountAttachments,","))) + If File(lcFile) + lcFiles = lcFiles + GetShortPath(Alltrim(Getwordnum(tcFiles,lnCountAttachments,","))) + "," + Endif + Endfor + If !Empty(lcFiles) + lcBlatParam = lcBlatParam + " -attach " + lcBlatParam = lcBlatParam + lcFiles + lcBlatParam = Left(lcBlatParam, Len(lcBlatParam) - 1) && Remove Extra Comma + Endif + Endif + + lnResult = Send(Alltrim(lcBlatParam)) + + If lnResult != 0 + Do Case + Case lnResult = -2 + Throw "The server actively denied our connection./The mail server doesn't like the sender name. " + Case lnResult = -1 + Throw "Unable to open SMTP socket" Or ; + "SMTP get line did not return 220" Or ; + "command unable to write to socket" Or ; + "Server does not like To: address" Or ; + "Mail server error accepting message data." + Case lnResult = 1 + Throw "File name (message text) not given" Or ; + "Bad argument given" + Case lnResult = 2 + Throw "File (message text) does not exist" + Case lnResult = 3 + Throw "Error reading the file (message text) or attached file" + Case lnResult = 4 + Throw "File (message text) not of type FILE_TYPE_DISK " + Case lnResult = 5 + Throw "Error Reading File (message text)" + Case lnResult = 12 + Throw "-server or -f options not specified and not found in registry" + Case lnResult = 13 + Throw "Error opening temporary file in temp directory" + Otherwise + Throw "Unknown Error" + Endcase + Endif + + Catch To loError + tcReturn = [Error: ] + Str(loError.ErrorNo) + Chr(13) + ; + [LineNo: ] + Str(loError.Lineno) + Chr(13) + ; + [Message: ] + loError.Message + Chr(13) + ; + [Procedure: ] + loError.Procedure + Chr(13) + ; + [Details: ] + loError.Details + Chr(13) + ; + [StackLevel: ] + Str(loError.StackLevel) + Chr(13) + ; + [LineContents: ] + loError.LineContents + Finally + Clear Dlls "Send" + If File(lcBodyFile) + Erase (lcBodyFile) + Endif + Endtry +Endproc + +**************************************** +Function GetShortPath + **************************************** + Lparameters lcFileName + Local lnReturn, lcBuffer + + Declare Integer GetShortPathNameA In Win32API As GetShortPathName String, String, Integer + + lcBuffer = Space(255) + lnReturn= GetShortPathName(lcFileName, @lcBuffer, 255) + + Clear Dlls "GetShortPathName" + + Return (Left(lcBuffer, lnReturn)) +Endfunc diff --git a/COMUN/programe/cauta_alfa.prg b/COMUN/programe/cauta_alfa.prg new file mode 100644 index 0000000..7a97c85 --- /dev/null +++ b/COMUN/programe/cauta_alfa.prg @@ -0,0 +1,598 @@ +*!* 24.07.2009 +*!* marius.mutu +*!* cauta_alfa(tcStringCriterii pentru formularul cauta_alfa_form_plus) + +*------------------------------------------------------------ +* Description: cauta_alfa - cautare generica +* Parameters: tcselect,tcfiltru,tcschema,tcorder,tccoloana,tcTitlu,tcTitluColoana,tcNume_Proc,tl_AllInList,tcFiltruOriginal,tcPrimaColoana, tnPornire, tnTipReturn, tcIdColumn, tlDesktop, tcGroup, tcGridDynamiBackColor +* Return: tnTipReturn = 0 => object (scatter name pe inregistrarea curenta) ; tnTipReturn = 1 => xml (din inregistrarile selectate) +* Use: +*------------------------------------------------------------ +* Id Date By Description +* 1 23/06/2006 marius.mutu Initial Creation +* 2 23/06/2006 marius.mutu TipReturn - se presupune ca tcSelect contine o coloana +* 19/05.2021 liana.neagu adaugare tcLocate +*------------------------------------------------------------ +Procedure cauta_alfa + Parameters tcselect,tcfiltru,tcschema,tcorder,tccoloana,tcTitlu,tcTitluColoana, ; + tcNume_Proc,tl_AllInList,tcFiltruOriginal,tcPrimaColoana, tnPornire, tnTipReturn, ; + tcIdColumn, tlDesktop, tcGroup, tcGridDynamicBackColor, tcGridToolTip, tlModParam, tcStringCriterii, ; + tcProceduraVerifica, tcProceduraCopiaza,tcLocate + + && tcStringCriterii : pentru butonul de cautare but_Start_criterii (daca este completat parametrul se foloseste cauta_alfa_form_plus) + && tnPornire: 1-incepe cu..., 2..... 6-toate + Local llModParam, lnRecc, lcCursorXML, lcIdColumn, llDesktop, lcGroup,lorec + llModParam = .F. + If Empty(tnTipReturn) + tnTipReturn = 0 + Endif + + If !Empty(tcIdColumn) + lcIdColumn = tcIdColumn + Else + lcIdColumn = "id" + Endif + + llDesktop = tlDesktop + + Private pcAles + pcAles = "" + + Local lccoloana,lcTitlu,pnbuton,lcPrimaColoana + Private deca_baza1,oForm_cautare,oReturnScattObj + Store "" To deca_baza1 + Local lcCamp,lcCursor,lcCursort + Store "" To lccoloana,lcPrimaColoana,lcCamp,lcCursor,lcCursort + + lccoloana = tccoloana + lcTitluColoana = tcTitluColoana + lcTitlu = tcTitlu + lcSelect = Upper(Alltrim(tcselect)) + + If Empty(tcPrimaColoana) + lcPrimaColoana="" + Else + lcPrimaColoana=Alltrim(tcPrimaColoana) + Endif + + If Empty(tl_AllInList) Or Type('tl_AllInList') # 'L' + ll_AllInList = .F. + Else + ll_AllInList = tl_AllInList + Endif + If Empty(tcFiltruOriginal) Or Type('tcFiltruOriginal') # 'C' + lcFiltOriginal = '' + Else + lcFiltOriginal = tcFiltruOriginal + Endif + If Empty(tcNume_Proc) + lcNume_Proc = "" + Else + lcNume_Proc = Upper(Alltrim(tcNume_Proc)) + **caut tip partener daca sunt in cazul nom. de parteneri: + lnPosComma = At(';', lcNume_Proc) + If lnPosComma > 0 + lcNume_Proc = Left(lcNume_Proc, lnPosComma - 1) + [_nou with ] + ; + ALLTRIM(Substr(lcNume_Proc, lnPosComma + 1)) + Else + lcNume_Proc = lcNume_Proc + "_nou" + Endif + + If Left(lcNume_Proc,1) = 'V' + lcNume_Proc = Substr(lcNume_Proc,2) + Endif + Endif + + lnPos = At('WHERE',lcSelect) + lnpos2 = Max(Rat(['],lcSelect),Rat(["],lcSelect)) + If lnpos2 = 0 + lnpos2 = Len(lcSelect)+1 + Endif + + + If !Inlist(Left(lcSelect,1),['],["],"[") + llModParam = .T. + Endif + + If lnPos = 0 + lcFiltru = "" + *!* llModParam = .T. + Else + If llModParam + lcFiltru = "" + Else + lcFiltru = Alltrim(Substr(lcSelect,lnPos + 6,lnpos2-lnPos-6)) + *!* llModParam = .F. + Endif + Endif + lcGroup = Iif(Empty(tcGroup) Or Type('tcGroup') <> 'C', '', tcGroup) + + *!* 24.07.2009 + If Empty(tcStringCriterii) + lcStringCriterii = "" + Else + lcStringCriterii = Alltrim(tcStringCriterii) + ENDIF + *!* 24.07.2009 ^ + + lcCursor=Sys(2015) + lcCursort = Alltrim(lcCursor) + 't' + If ll_AllInList = .T. + && sa adauge "" in cursor + gencursor('deca_baza1',lcCursort,tcselect,tcfiltru,tcschema,tcorder,.F.,lcGroup, llModParam, lcFiltOriginal) + deca_baza1.ca_baza1.afisare() + Select *, 0 As ales From &lcCursort Where .F. Into Cursor &lcCursor Readwrite + Select (lcCursor) + If Occurs([,],tccoloana) > 0 + lcField = Left(tccoloana,At([,],tccoloana)-1) + + lcCamp = lcCursort + '.' + lcField + + *IF TYPE('cursor_temp.&lcField')# 'C' + If Type(lcCamp) # 'C' + lcField = Field(1) + Endif + Else + lcField = tccoloana + + lcCamp = lcCursort + '.' + lcField + + Endif + *IF (RECCOUNT(lccursort)>0) AND TYPE('cursor_temp.&lcField')= 'C' + If (Reccount(lcCursort)>0) And Type(lcCamp)= 'C' + Insert Into &lcCursor (&lcField) Values("") + Endif + Select (lcCursor) + *APPEND FROM DBF("cursor_temp") + Append From Dbf(lcCursort) + Go Top + Use In (lcCursort) + + Else + gencursor('deca_baza1',lcCursor,tcselect,tcfiltru,tcschema,tcorder,.F.,lcGroup, llModParam ,lcFiltOriginal) + deca_baza1.ca_baza1.afisare() + Endif + + *!* modificare 30.11.2006 + If Type("poRec") = "O" + lorec = poRec + Endif + *!* modificare 30.11.2006 ^ + + lnPornire = tnPornire + pnbuton=1 + Select (lcCursor) + lnRecc = Reccount() + ** v adaugare 19.05.2021 - Liana - Sa se pozitioneze pe o anumita inregistrare +IF !EMPTY(tcLocate) + Select (lcCursor) + LOCATE FOR &tcLocate + +ENDIF + *!* 24.07.2009 + DO CASE + CASE !EMPTY(lcStringCriterii) + oForm_cautare=Createobject('cauta_alfa_form_plus',lcCursor,lcNume_Proc,lcTitluColoana,; + lccoloana,ll_AllInList,lcPrimaColoana, lnPornire, tcGridDynamicBackColor, tcGridToolTip, lcStringCriterii) + + CASE llDesktop + oForm_cautare=Createobject('cauta_alfa_form_desktop',lcCursor,lcNume_Proc,lcTitluColoana,; + lccoloana,ll_AllInList,lcPrimaColoana, lnPornire, tcGridDynamicBackColor, tcGridToolTip, ; + tcProceduraVerifica, tcProceduraCopiaza) + OTHERWISE + oForm_cautare=Createobject('cauta_alfa_form',lcCursor,lcNume_Proc,lcTitluColoana,lccoloana,; + ll_AllInList,lcPrimaColoana, lnPornire, tcGridDynamicBackColor, tcGridToolTip, ; + tcProceduraVerifica, tcProceduraCopiaza) + ENDCASE +*!* IF llDesktop +*!* oForm_cautare=Createobject('cauta_alfa_form_desktop',lcCursor,lcNume_Proc,lcTitluColoana,; +*!* lccoloana,ll_AllInList,lcPrimaColoana, lnPornire, tcGridDynamicBackColor, tcGridToolTip) +*!* ELSE +*!* oForm_cautare=Createobject('cauta_alfa_form',lcCursor,lcNume_Proc,lcTitluColoana,lccoloana,; +*!* ll_AllInList,lcPrimaColoana, lnPornire, tcGridDynamicBackColor, tcGridToolTip) +*!* ENDIF + *!* 24.07.2009 ^ + + With oForm_cautare + .crs_cursor = lcCursor + .crs_cursort = lcCursort + If !Empty(lcFiltru) + .cfiltru_original = lcFiltru + Endif + + .Lb_titlu_alb_b121.Caption=lcTitlu + .lAles = Iif(tnTipReturn = 1, .T., .F.) + If .lAles + .cAles = Replicate(" ",lnRecc) + Endif + .cIdColumn = lcIdColumn + Endwith + oForm_cautare.Show() + + *!* modificare 30.11.2006 + If Type("lorec") = "O" + poRec = lorec + Endif + *!* modificare 30.11.2006 ^ + + lcCursorXML = "" + Select (lcCursor) + If gnbuton=1 + Do Case + Case tnTipReturn = 0 + Scatter Name oReturnScattObj Memo + Otherwise + Select * From (lcCursor) With (Buffering = .T.) Where Substr(pcAles,Recno(),1) = 'X' ; + INTO Cursor crsReturnAlfa + Cursortoxml("crsReturnAlfa", "lcCursorXML", 2, 0+2+8, 0, "1") + Use In crsReturnAlfa + Endcase + Else + Do Case + Case tnTipReturn = 0 + Scatter Name oReturnScattObj Blank + Otherwise + lcCursorXML = "" + Endcase + Endif + + Release oForm_cautare + + + Use In (lcCursor) + + Do Case + Case tnTipReturn = 0 + Return oReturnScattObj + Otherwise + Return lcCursorXML + Endcase + +Endproc && cauta_alfa +*********************************************************************************************************************** +Procedure cauta_alfa_vfp + Parameters tcselect,tcfiltru,tcschema,tcorder,tccoloana,tcTitlu,tcTitluColoana,tcNume_Proc,tl_AllInList,tcFiltruOriginal,tnCriteriu,tcFiltruAfisat + *!* modificare 04.08.2011 : am adaugat tnCriteriu, tcFiltruAfisat + Local llModParam + llModParam = .F. + + Private lccoloana,lcTitlu,pnbuton,lorec + Store "" To lccoloana + lccoloana = tccoloana + lcTitluColoana = tcTitluColoana + lcTitlu = tcTitlu + lcSelect = Upper(Alltrim(tcselect)) + + If Empty(tl_AllInList) Or Type('tl_AllInList') # 'L' + ll_AllInList = .F. + Else + ll_AllInList = tl_AllInList + Endif +*!* modificare 14.12.2011 +*!* If Empty(tcFiltruOriginal) Or Type('tcFiltruOriginal') # 'C' +*!* lcFiltOriginal = '' +*!* Else +*!* lcFiltOriginal = tcFiltruOriginal +*!* Endif +*!* modificare 14.12.2011 ^ + If Empty(tcNume_Proc) + lcNume_Proc = "" + Else + lcNume_Proc = Upper(Alltrim(tcNume_Proc)) + *!* **caut tip partener daca sunt in cazul nom. de parteneri: + *!* If (Occurs("ID_TIP_PART",lcSelect)>0) + *!* lnId_tip_part_gasit = Val( Substr(lcSelect,At("= ",lcSelect)+1) ) + *!* lcNume_Proc = lcNume_Proc + "_nou with " + Alltrim(Str(lnId_tip_part_gasit)) + *!* Else + *!* lcNume_Proc = lcNume_Proc + "_nou" + *!* Endif + + *!* If Left(lcNume_Proc,1) = 'V' + *!* lcNume_Proc = Substr(lcNume_Proc,2) + *!* Endif + Endif + + lnPos = At('WHERE',lcSelect) + lnpos2 = Max(Rat(['],lcSelect),Rat(["],lcSelect)) + If lnpos2 = 0 + lnpos2 = Len(lcSelect)+1 + Endif + + && 11.07.2007 + If !Inlist(Left(lcSelect,1),['],["],"[") + llModParam = .T. + Endif + + If lnPos = 0 + lcFiltru = "" + *!* llModParam = .T. + Else + If llModParam + lcFiltru = "" + Else + lcFiltru = Alltrim(Substr(lcSelect,lnPos + 6,lnpos2-lnPos-6)) + *!* llModParam = .F. + Endif + Endif + + *!* modificare 14.12.2011 + If !Empty(tcFiltruOriginal) And Type('tcFiltruOriginal') = 'C' + lcSelect = lcSelect + [ WHERE ] + tcFiltruOriginal + Endif + *!* modificare 14.12.2011 ^ + + If ll_AllInList = .T. && sa adauge "" in cursor + lcSelectTemp=lcSelect+[ into cursor cursor_temp] + &lcSelectTemp + Select * From cursor_temp Where .F. Into Cursor cursor_curent Readwrite + Select cursor_curent + If Occurs([,],tccoloana) > 0 + lcField = Left(tccoloana,At([,],tccoloana)-1) + If Type('cursor_temp.&lcField')# 'C' + lcField = Field(1) + Endif + Else + lcField = tccoloana + Endif + + If (Reccount('cursor_temp')>0) And Type('cursor_temp.&lcField')= 'C' + Insert Into cursor_curent(&lcField) Values("") + Endif + Select cursor_curent + Append From Dbf('cursor_temp') + Go Top + Use In cursor_temp + Select cursor_curent + Else + lcSelect=lcSelect+[ into cursor cursor_curent] + &lcSelect + Endif + + *!* modificare 30.11.2006 + If Type("poRec") = "O" + lorec = poRec + Endif + *!* modificare 30.11.2006 ^ + + Select cursor_curent + *!* modificare 04.08.2011 : am adaugat tnCriteriu, tcFiltruAfisat + oForm_cautare=Createobject('cauta_alfa_form_vfp',lcNume_Proc,lcTitluColoana,lccoloana,ll_AllInList,tnCriteriu,tcFiltruAfisat) + pnbuton=1 + oForm_cautare.Lb_titlu_alb_b121.Caption=lcTitlu + oForm_cautare.Show() + + *!* modificare 30.11.2006 + If Type("lorec") = "O" + poRec = lorec + Endif + *!* modificare 30.11.2006 ^ + + Select cursor_curent + If pnbuton=1 + Scatter Name oReturnScattObj Memo + Else + Scatter Name oReturnScattObj Blank + Endif + Release oForm_cautare + + **release + Use In cursor_curent + **Release deca_baza1 + Return oReturnScattObj +Endproc && cauta_alfa_vfp +*********************************************************************************************************************** +Procedure cauta_alfa_gs + Parameters tcselect,tcfiltru,tcschema,tcorder,tccoloana,tcTitlu,tcTitluColoana,tcNume_Proc,tl_AllInList,tcFiltruOriginal,tcPrimaColoana, tnPornire, tnTipReturn, tcIdColumn, tlDesktop, toValoarePropusa + && toValoarePropusa = valoarea cu care se completeaza textboxul de la cautare + && tnPornire: 1-incepe cu..., 2..... 6-toate + Local llModParam, lnRecc, lcCursorXML, lcIdColumn, llDesktop,lorec + llModParam = .F. + If Empty(tnTipReturn) + tnTipReturn = 0 + Endif + + If !Empty(tcIdColumn) + lcIdColumn = tcIdColumn + Else + lcIdColumn = "id" + Endif + + llDesktop = tlDesktop + + Private pcAles + pcAles = "" + + Local lccoloana,lcTitlu,pnbuton,lcPrimaColoana + Private oForm_cautare,oReturnScattObj,deca_baza1 + Store "" To deca_baza1 + Local lcCursor + Store "" To lccoloana,lcPrimaColoana,lcCamp,lcCursor,lcCursort + lcSchema = tcschema + lcNumeColoane = Strtran(tccoloana,[,],[;]) + lcTitluColoane = tcTitluColoana + lcTitlu = tcTitlu + lcSelect = Upper(Alltrim(tcselect)) + + If Empty(tcPrimaColoana) + lcPrimaColoana="" + Else + lcPrimaColoana=Alltrim(tcPrimaColoana) + Endif + + If Empty(tl_AllInList) Or Type('tl_AllInList') # 'L' + ll_AllInList = .F. + Else + ll_AllInList = tl_AllInList + Endif + If Empty(tcFiltruOriginal) Or Type('tcFiltruOriginal') # 'C' + lcFiltruOriginal = '' + Else + lcFiltruOriginal = tcFiltruOriginal + Endif + If Empty(tcNume_Proc) + lcNume_Proc = "" + Else + lcNume_Proc = Upper(Alltrim(tcNume_Proc)) + **caut tip partener daca sunt in cazul nom. de parteneri: + lnPosComma = At(';', lcNume_Proc) + If lnPosComma > 0 + lcNume_Proc = Left(lcNume_Proc, lnPosComma - 1) + [_nou with ] + Alltrim(Substr(lcNume_Proc, lnPosComma + 1)) + Else + lcNume_Proc = lcNume_Proc + "_nou" + Endif + + If Left(lcNume_Proc,1) = 'V' + lcNume_Proc = Substr(lcNume_Proc,2) + Endif + Endif + + lnPos = At('WHERE',lcSelect) + lnpos2 = Max(Rat(['],lcSelect),Rat(["],lcSelect)) + If lnpos2 = 0 + lnpos2 = Len(lcSelect)+1 + Endif + + && 11.07.2007 + If !Inlist(Left(lcSelect,1),['],["],"[") + llModParam = .T. + Endif + + If lnPos = 0 + lcFiltru = "" + *!* llModParam = .T. + Else + If llModParam + lcFiltru = "" + Else + lcFiltru = Alltrim(Substr(lcSelect,lnPos + 6,lnpos2-lnPos-6)) + *!* llModParam = .F. + Endif + Endif + + *!* modificare 30.11.2006 + If Type("poRec") = "O" + lorec = poRec + Endif + *!* modificare 30.11.2006 ^ + + lcCursor=Sys(2015) + lcCursort = Alltrim(lcCursor) + 't' + lnPornire = tnPornire + pnbuton=1 + *!* IF llDesktop + *!* oForm_cautare=Createobject('cauta_alfa_form_desktop', lcCursor, lcNume_Proc, lcTitlu , lcTitluColoane, lcNumeColoane, lcSelect, lcSchema, lcFiltru, lcFiltruOriginal, lcOrder, ll_AllInList, lnPornire) + *!* ELSE + oForm_cautare=Createobject('cauta_alfa_form_gs', lcCursor, lcNume_Proc, lcTitlu , lcTitluColoane, lcNumeColoane, lcSelect, lcSchema, lcFiltru, lcFiltruOriginal, lcOrder, ll_AllInList, lnPornire, toValoarePropusa) + *!* ENDIF + + With oForm_cautare + .lAles = Iif(tnTipReturn = 1, .T., .F.) + If .lAles + .cAles = Replicate(" ",lnRecc) + Endif + Endwith + oForm_cautare.Show() + + *!* modificare 30.11.2006 + If Type("lorec") = "O" + poRec = lorec + Endif + *!* modificare 30.11.2006 ^ + + lcCursorXML = "" + Select (lcCursor) + If gnbuton=1 + Do Case + Case tnTipReturn = 0 + Scatter Name oReturnScattObj Memo + Otherwise + Select * From (lcCursor) With (Buffering = .T.) Where Substr(pcAles,Recno(),1) = 'X' Into Cursor crsReturnAlfa + Cursortoxml("crsReturnAlfa", "lcCursorXML", 2, 0+2+8, 0, "1") + Use In crsReturnAlfa + Endcase + Else + Do Case + Case tnTipReturn = 0 + Scatter Name oReturnScattObj Blank + Otherwise + lcCursorXML = "" + Endcase + Endif + + Release oForm_cautare + + + Use In (lcCursor) + + Do Case + Case tnTipReturn = 0 + Return oReturnScattObj + Otherwise + Return lcCursorXML + Endcase + +Endproc && cauta_alfa_gs +*********************************************************************************************************************** + +Procedure cauta_alfa_hash + Parameters toHash + + Local lcSelect,lcFiltru, lcSchema, lcOrder, lccoloana,lcTitlu, lcTitluColoana, lcNumeProc, llAllInList,lcFiltruOriginal,lcPrimaColoana, lnPornire, lnTipReturn, lcIdColumn, llDesktop, lcGridToolTip, llModParam + Local loCauta + loCauta = Null + +*!* loHash = GetHash() +*!* loHash.SetValue("cSelect", lcSelect) +*!* loHash.SetValue("cFiltru", lcFiltru) +*!* loHash.SetValue("cSchema", lcSchema) +*!* loHash.SetValue("cOrder", lcOrder) +*!* loHash.SetValue("cColoana", lccoloane) +*!* loHash.SetValue("cTitlu", lcTitlu) +*!* loHash.SetValue("cTitluColoana", lcTitluColoane) +*!* loHash.SetValue("cNumeProc", lcNumeProc) +*!* loHash.SetValue("lToateIreg", llToateIreg) +*!* loHash.SetValue("cFiltruOriginal", lcFiltruOriginal) +*!* loHash.SetValue("cPrimaColoana", lcPrimaColoana) +*!* loHash.SetValue("nPornire", lnPornire) +*!* loHash.SetValue("nTipReturn", lnTipReturn) +*!* loHash.SetValue("cIdColumn", lcIdColumn) +*!* loHash.SetValue("cStringCriterii", lcStringCriterii) +*!* toHash.SetValue('lModParam', llModParam) +*!* toHash.SetValue('cProceduraVerifica', lcProceduraVerifica) +*!* toHash.SetValue('cProceduraCopiaza', lcProceduraCopiaza) + + + lcSelect = toHash.GetValue('cselect') + lcFiltru = toHash.GetValue('cFiltru') + lcSchema = toHash.GetValue('cSchema') + lcOrder = toHash.GetValue('cOrder') + lcGroup = toHash.GetValue('cGroup') + lccoloana = toHash.GetValue('cColoana') + lcTitlu = toHash.GetValue('cTitlu') + lcTitluColoana = toHash.GetValue('cTitluColoana') + lcNumeProc = toHash.GetValue('cNumeProc') + llAllInList = toHash.GetValue('lAllInList') + lcFiltruOriginal = toHash.GetValue('cFiltruOriginal') + lcPrimaColoana = toHash.GetValue('cPrimaColoana') + lnPornire = toHash.GetValue('nPornire') + lnTipReturn = toHash.GetValue('nTipReturn') + lcIdColumn = toHash.GetValue('cIdColumn') + llDesktop = toHash.GetValue('lDesktop') + lcGridDynamicBackColor = toHash.GetValue('cGridDynamicBackColor') + lcGridToolTip = toHash.GetValue('cGridToolTip') + lcStringCriterii = toHash.GetValue('cStringCriterii') + llModParam = toHash.GetValue('lModParam') + If !llModParam And !Inlist(Left(lcSelect,1),['],["],"[") + llModParam = .T. + ENDIF + lcProceduraVerifica = toHash.GetValue('cProceduraVerifica') + lcProceduraCopiaza = toHash.GetValue('cProceduraCopiaza') + + loCauta = cauta_alfa(lcSelect,lcFiltru, lcSchema, lcOrder, lccoloana,lcTitlu, lcTitluColoana, lcNumeProc, llAllInList,lcFiltruOriginal,lcPrimaColoana, lnPornire, lnTipReturn, lcIdColumn, llDesktop, lcGroup, lcGridDynamicBackColor, lcGridToolTip, llModParam, lcStringCriterii, lcProceduraVerifica, lcProceduraCopiaza) + + Return loCauta +Endproc && cauta_alfa_hash + + + + diff --git a/COMUN/programe/cdo2000.prg b/COMUN/programe/cdo2000.prg new file mode 100644 index 0000000..67c37e4 --- /dev/null +++ b/COMUN/programe/cdo2000.prg @@ -0,0 +1,316 @@ +* https://www.berezniker.com/content/pages/visual-foxpro/cdo-2000-class-sending-emails + +#DEFINE cdoSendPassword "http://schemas.microsoft.com/cdo/configuration/sendpassword" +#DEFINE cdoSendUserName "http://schemas.microsoft.com/cdo/configuration/sendusername" +#DEFINE cdoSendUsingMethod "http://schemas.microsoft.com/cdo/configuration/sendusing" +#DEFINE cdoSMTPAuthenticate "http://schemas.microsoft.com/cdo/configuration/smtpauthenticate" +#DEFINE cdoSMTPConnectionTimeout "http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout" +#DEFINE cdoSMTPServer "http://schemas.microsoft.com/cdo/configuration/smtpserver" +#DEFINE cdoSMTPServerPort "http://schemas.microsoft.com/cdo/configuration/smtpserverport" +#DEFINE cdoSMTPUseSSL "http://schemas.microsoft.com/cdo/configuration/smtpusessl" +#DEFINE cdoURLGetLatestVersion "http://schemas.microsoft.com/cdo/configuration/urlgetlatestversion" +#DEFINE cdoAnonymous 0 && Perform no authentication (anonymous) +#DEFINE cdoBasic 1 && Use the basic (clear text) authentication mechanism. +#DEFINE cdoSendUsingPort 2 && Send the message using the SMTP protocol over the network. +#DEFINE cdoXMailer "urn:schemas:mailheader:x-mailer" + +DEFINE CLASS cdo2000 AS Custom + + PROTECTED aErrors[1], nErrorCount, oMsg, oCfg, cXMailer + + nErrorCount = 0 + + * Message attributes + oMsg = Null + + cFrom = "" + cReplyTo = "" + cTo = "" + cCC = "" + cBCC = "" + cAttachment = "" + + cSubject = "" + cHtmlBody = "" + cTextBody = "" + cHtmlBodyUrl = "" + + cCharset = "" + + * Priority: Normal, High, Low or empty value (Default) + cPriority = "" + + * Configuration object fields values + oCfg = Null + cServer = "" + nServerPort = 25 + * Use SSL connection + lUseSSL = .F. + nConnectionTimeout = 30 && Default 30 sec's + nAuthenticate = cdoAnonymous + cUserName = "" + cPassword = "" + * Do not use cache for cHtmlBodyUrl + lURLGetLatestVersion = .T. + + * Optional. Creates your own X-MAILER field in the header + cXMailer = "VFP CDO 2000 mailer Ver 1.1.100 2010" + + PROTECTED PROCEDURE Init + This.ClearErrors() + ENDPROC + + * Send message + PROCEDURE Send + + IF This.GetErrorCount() > 0 + RETURN This.GetErrorCount() + ENDIF + + WITH This + .ClearErrors() + .oCfg = CREATEOBJECT("CDO.Configuration") + .oMsg = CREATEOBJECT("CDO.Message") + .oMsg.Configuration = This.oCfg + ENDWITH + + * Fill message attributes + LOCAL lnind, laList[1], loHeader, laDummy[1], lcMailHeader + + IF This.SetConfiguration() > 0 + RETURN This.GetErrorCount() + ENDIF + + IF EMPTY(This.cFrom) + This.AddError("ERROR : From is empty.") + ENDIF + IF EMPTY(This.cSubject) + This.AddError("ERROR : Subject is empty.") + ENDIF + + IF EMPTY(This.cTo) AND EMPTY(This.cCC) AND EMPTY(This.cBCC) + This.AddError("ERROR : To, CC and BCC are all empty.") + ENDIF + + IF This.GetErrorCount() > 0 + RETURN This.GetErrorCount() + ENDIF + + This.SetHeader() + + WITH This.oMsg + + .From = This.cFrom + .ReplyTo = This.cReplyTo + + .To = This.cTo + .CC = This.cCC + .BCC = This.cBCC + .Subject = This.cSubject + + * Create HTML body from external HTML (file, URL) + IF NOT EMPTY(This.cHtmlBodyUrl) + .CreateMHTMLBody(This.cHtmlBodyUrl) + ENDIF + + * Send HTML body. Creates TextBody as well + IF NOT EMPTY(This.cHtmlBody) + .HtmlBody = This.cHtmlBody + ENDIF + + * Send Text body. Could be different from HtmlBody, if any + IF NOT EMPTY(This.cTextBody) + .TextBody = This.cTextBody + ENDIF + + IF NOT EMPTY(This.cCharset) + IF NOT EMPTY(.HtmlBody) + .HtmlBodyPart.Charset = This.cCharset + ENDIF + + IF NOT EMPTY(.TextBody) + .TextBodyPart.Charset = This.cCharset + ENDIF + ENDIF + + * Process attachments + IF NOT EMPTY(This.cAttachment) + * Accepts comma or semicolon + * VFP 7.0 and later + *FOR lnind=1 TO ALINES(laList, This.cAttachment, [,], [;]) + * VFP 6.0 and later compatible + FOR lnind=1 TO ALINES(laList, CHRTRAN(This.cAttachment, [,;], CHR(13) + CHR(13))) + lcAttachment = ALLTRIM(laList[lnind]) + * Ignore empty values + IF EMPTY(laList[lnind]) + LOOP + ENDIF + + * Make sure that attachment exists + IF ADIR(laDummy, lcAttachment) = 0 + This.AddError("ERROR: Attachment not Found - " + lcAttachment) + ELSE + * The full path is required. + IF UPPER(lcAttachment) <> UPPER(FULLPATH(lcAttachment)) + lcAttachment = FULLPATH(lcAttachment) + ENDIF + .AddAttachment(lcAttachment) + ENDIF + ENDFOR + ENDIF + + IF NOT EMPTY(This.cCharset) + .BodyPart.Charset = This.cCharset + ENDIF + + * Priority + IF NOT EMPTY(This.cPriority) + lcMailHeader = "urn:schemas:mailheader:" + .Fields(lcMailHeader + "Priority") = LOWER(This.cPriority) + .Fields(lcMailHeader + "Importance") = LOWER(This.cPriority) + DO CASE + CASE This.cPriority = "High" + .Fields(lcMailHeader + "X-Priority") = 1 && 5=Low, 3=Normal, 1=High + CASE This.cPriority = "Normal" + .Fields(lcMailHeader + "X-Priority") = 3 && 5=Low, 3=Normal, 1=High + CASE This.cPriority = "Low" + .Fields(lcMailHeader + "X-Priority") = 5 && 5=Low, 3=Normal, 1=High + ENDCASE + .Fields.Update() + ENDIF + ENDWITH + + IF This.GetErrorCount() > 0 + RETURN This.GetErrorCount() + ENDIF + + This.oMsg.Send() + + RETURN This.GetErrorCount() + + ENDPROC + + * Clear errors collection + PROCEDURE ClearErrors() + This.nErrorCount = 0 + DIMENSION This.aErrors[1] + This.aErrors[1] = Null + RETURN This.nErrorCount + ENDPROC + + * Return # of errors in the error collection + PROCEDURE GetErrorCount + RETURN This.nErrorCount + ENDPROC + + * Return error by index + PROCEDURE GetError + LPARAMETERS tnErrorno + IF tnErrorno <= This.GetErrorCount() + RETURN This.aErrors[tnErrorno] + ELSE + RETURN Null + ENDIF + ENDPROC + + * Populate configuration object + PROTECTED PROCEDURE SetConfiguration + + * Validate supplied configuration values + IF EMPTY(This.cServer) + This.AddError("ERROR: SMTP Server isn't specified.") + ENDIF + IF NOT INLIST(This.nAuthenticate, cdoAnonymous, cdoBasic) + This.AddError("ERROR: Invalid Authentication protocol ") + ENDIF + IF This.nAuthenticate = cdoBasic ; + AND (EMPTY(This.cUserName) OR EMPTY(This.cPassword)) + This.AddError("ERROR: User name/Password is required for basic authentication") + ENDIF + + IF This.GetErrorCount() > 0 + RETURN This.GetErrorCount() + ENDIF + + WITH This.oCfg.Fields + + * Send using SMTP server + .Item(cdoSendUsingMethod) = cdoSendUsingPort + .Item(cdoSMTPServer) = This.cServer + .Item(cdoSMTPServerPort) = This.nServerPort + .Item(cdoSMTPConnectionTimeout) = This.nConnectionTimeout + + .Item(cdoSMTPAuthenticate) = This.nAuthenticate + IF This.nAuthenticate = cdoBasic + .Item(cdoSendUserName) = This.cUserName + .Item(cdoSendPassword) = This.cPassword + ENDIF + .Item(cdoURLGetLatestVersion) = This.lURLGetLatestVersion + .Item(cdoSMTPUseSSL) = This.lUseSSL + + .Update() + ENDWITH + + RETURN This.GetErrorCount() + + ENDPROC + + *---------------------------------------------------- + * Add message to the error collection + PROTECTED PROCEDURE AddError + LPARAMETERS tcErrorMsg + This.nErrorCount = This.nErrorCount + 1 + DIMENSION This.aErrors[This.nErrorCount] + This.aErrors[This.nErrorCount] = tcErrorMsg + RETURN This.nErrorCount + ENDPROC + + *---------------------------------------------------- + * Format an error message and add to the error collection + PROTECTED PROCEDURE AddOneError + LPARAMETERS tcPrefix, tnError, tcMethod, tnLine + LOCAL lcErrorMsg, laList[1] + IF INLIST(tnError, 1427,1429) + AERROR(laList) + lcErrorMsg = TRANSFORM(laList[7], "@0") + " " + laList[3] + ELSE + lcErrorMsg = MESSAGE() + ENDIF + This.AddError(tcPrefix + ":" + TRANSFORM(tnError) + " # " + ; + tcMethod + " # " + TRANSFORM(tnLine) + " # " + lcErrorMsg) + RETURN This.nErrorCount + ENDPROC + + *---------------------------------------------------- + * Simple Error handler. Adds VFP error to the objects error collection + PROTECTED PROCEDURE Error + LPARAMETERS tnError, tcMethod, tnLine + This.AddOneError("ERROR: ", tnError, tcMethod, tnLine ) + RETURN This.nErrorCount + ENDPROC + + *------------------------------------------------------- + * Set mail header fields, if necessary. For now sets X-MAILER, if specified + PROTECTED PROCEDURE SetHeader + LOCAL loHeader + IF NOT EMPTY(This.cXMailer) + loHeader = This.oMsg.Fields + WITH loHeader + .Item(cdoXMailer) = This.cXMailer + .Update() + ENDWITH + ENDIF + ENDPROC + + *---------------------------------------------------- + * + PROTECTED PROCEDURE cPriority_assign(tvVal) + * Check for incorrect values + IF INLIST("~" + PROPER(tvVal) + "~", "~High~", "~Normal~", "~Low~") OR EMPTY(tvVal) + This.cPriority = PROPER(ALLTRIM(tvVal)) + ELSE + This.AddError("ERROR: Invalid value for cPriority property.") + ENDIF + ENDPROC + +ENDDEFINE \ No newline at end of file diff --git a/COMUN/programe/chatbot.prg b/COMUN/programe/chatbot.prg new file mode 100644 index 0000000..90fcb6d --- /dev/null +++ b/COMUN/programe/chatbot.prg @@ -0,0 +1,139 @@ +Lparameters tcQuestion, lcChatId, tlMarkDown2Html, tcChatBot + +* tlMarkDown2Html (optional, implicit .T.): converteste MarkDown in Html + +Local loHTTP As 'MSXML2.ServerXMLHTTP' + +Local lcChatId, lcQuestion, lcRaspuns, lcResponse, lcSampleReponse, lcURL, llSucces, loEx, loJson, llMarkDown2Html +LOCAL lcChatBot, lcChatBotId +lcRaspuns = '' + +llMarkDown2Html = Iif(Pcount() <= 3, .T., m.tlMarkDown2Html) + +tcQuestion = Strtran(m.tcQuestion, Chr(13), ' ',1,1000,1) +tcQuestion = Strtran(m.tcQuestion, '"', '\"',1,1000,1) + +lcChatId = Iif(!Empty(m.lcChatId), m.lcChatId, '') + +TEXT TO lcQuestion TEXTMERGE NOSHOW +{"question": "<>"<> +} +ENDTEXT + +*!* {"question": "Care este numele meu?", +*!* "chatId": "913bf69d-7838-4f55-9c6d-d7ca8645be15"} + +IF EMPTY(m.tcChatBot) + lcChatBot = 'maria' +ELSE + lcChatBot = ALLTRIM(LOWER(m.tcChatbot)) + IF !INLIST(LOWER(m.tcChatbot), 'maria', 'cezar') + lcChatBot = 'maria' + ENDIF +ENDIF + +DO CASE + CASE m.lcChatBot = 'cezar' + lcChatBotId = [462dabb9-6995-4f7e-ad8e-30624ae56be5] + CASE m.lcChatBot = 'maria' + lcChatBotId = [d4911620-07fe-41f8-adb4-f2f52d6ec766] + OTHERWISE + lcChatBotId = [462dabb9-6995-4f7e-ad8e-30624ae56be5] +ENDCASE + +lcURL = [https://mutual-special-koala.ngrok-free.app/api/v1/prediction/] + m.lcChatBotId + +TRY + loHTTP = Createobject('MSXML2.ServerXMLHTTP') + loHTTP.Open('POST', lcURL, .F.) + loHTTP.setRequestHeader("Content-Type", "application/json; charset=utf-8") + loHTTP.setRequestHeader("Accept-Charset", "UTF-8") + + loHTTP.Send(m.lcQuestion) + llSucces = (loHTTP.Status = 200) +CATCH TO loEx + llSucces = .F. + AMESSAGEBOX(loEx.message,48,_Screen.Caption) + lcRaspuns = loEx.message +ENDTRY + +If m.llSucces + lcResponse = loHTTP.ResponseText + Try + loJson = nfjsonread(m.lcResponse) + Catch To loEx + llSucces = .F. + lcRaspuns = loEx.message + AMESSAGEBOX(loEx.Message,48,_Screen.Caption) + Endtry + If Type('loJson.chatId') = 'C' + lcChatId = loJson.chatId + Endif + + If Type('loJson.text') = 'C' + lcRaspuns = loJson.Text + + If m.llMarkDown2Html + lcRaspuns = MarkdownToHtml(m.lcRaspuns) + Endif + Else + lcRaspuns = m.lcResponse + ENDIF +Endif + + TEXT TO lcSampleReponse + { + "chatId": "feec0271-7ab1-4f07-8953-3e3d9630a87e", + "chatMessageId": "2c076f7c-3097-4d38-99d5-24ad2d319b85", + "isStreamValid": true, + "memoryType": "Buffer Window Memory", + "question": "Care este procedura pentru borderoul efactura?", + "sessionId": "feec0271-7ab1-4f07-8953-3e3d9630a87e", + "text": "Procedura pentru Borderoul eFactura este urmatoarea:\n\n1. Dupa emiterea facturilor, la sfarsitul zilei, sau a doua zi, daca se poate, in Borderoul eFactura: \n * Se citesc periodic Raspunsurile din ultimele 1-60 zile (depinde de cate zile nu s-au citit raspunsurile).\n * Facturile validate de ANAF au Tip Mesaj Raspuns = \"FACTURA PRIMITA\".\n * Facturile invalide au Tip Mesaj Raspuns = \"ERORI FACTURA\" ?i fundal de culoare ro?ie.\n * Se trimit facturile netrimise (culoare fundal galben pai) ?i cu erori, daca s-au corectat erorile, (culoare fundal rosu) din ziua curenta (daca operatia se face la sfarsitul zilei) sau din ziua precedenta (daca se poate).\n2. Se citesc Raspunsurile ?i se retrimite eFactura doar daca s-a primit raspuns tip \"ERORI FACTURA\".\n3. Din Borderoul eFactura, n paginile Facturi Trimise ?i Primite se poate lista centralizatorul facturilor trimise/primite n SPV cu Id Descarcare/Id ncarcare, pe care l pute?i ata?a la Registrele de TVA Vnzare/Cumparare." + } + ENDTEXT + +Return m.lcRaspuns + +* Markdown to HTML Converter in Visual FoxPro +Function MarkdownToHtml + Lparameters lcMarkdown + + Local lcHTML, laLines[1], lnI, lcLine, lcTemp + lcHTML = "" + + * Split the Markdown into lines + Alines(laLines, lcMarkdown) + + * Process each line + For lnI = 1 To Alen(laLines) + lcLine = Alltrim(laLines[lnI]) + + * Check for headers + Do Case + Case Left(lcLine, 2) == '# ' + lcHTML = lcHTML + '

' + Substr(lcLine, 3) + '

' + Chr(13) + Chr(10) + Case Left(lcLine, 3) == '## ' + lcHTML = lcHTML + '

' + Substr(lcLine, 4) + '

' + Chr(13) + Chr(10) + Case Left(lcLine, 4) == '### ' + lcHTML = lcHTML + '

' + Substr(lcLine, 5) + '

' + Chr(13) + Chr(10) + OTHERWISE + lcHtml = lcHtml + m.lcLine + Endcase + Endfor + + * Check for bold and italic + + lcHTML = Strtran(m.lcHTML , '**', '',1,1000,1) + lcHTML = Strtran(m.lcHTML , '**', '',1,1000,1) + lcHTML = Strtran(m.lcHTML , '*', '',1,1000,1) + lcHTML = Strtran(m.lcHTML , '*', '',1,1000,1) + + + lcHTML = Strtran(m.lcHTML , '\n', '
',1,1000,1) + lcHTML = Strtran(m.lcHTML , '\t', '    ',1,1000,1) + lcHTML = Strtran(m.lcHTML , '\"', '"',1,1000,1) + + Return m.lcHTML +Endfunc + diff --git a/COMUN/programe/controllere/appbcontroller.prg b/COMUN/programe/controllere/appbcontroller.prg new file mode 100644 index 0000000..f6c286a --- /dev/null +++ b/COMUN/programe/controllere/appbcontroller.prg @@ -0,0 +1,70 @@ +#INCLUDE COMUN.H + +Define Class appBaseController As Custom + oSettings = Null + lError = .F. + cErrorMessage = '' + oLog = Null + * + Procedure Init + This.oSettings = Createobject("settingsBaseController") + This.oLog = Iif(Type('goLog') = 'O', goLog, Createobject("logBaseController")) + Endproc && INIT + * + Procedure ProcessError(toHash) + Declare laErrors[1] + + lnErrorLines = Aerror(laErrors) + + lnError = Iif(toHash.HasProperty("nError"), toHash.GetValue("nError"), Transform(laErrors(1)) + ' ' + Transform(laErrors(5))) + lcMethod = toHash.GetValue("cMethod") + lnLine = toHash.GetValue("nLine") + lcError = Iif(toHash.HasProperty("cError"), toHash.GetValue("cError"), Transform(laErrors(2))) + lcCode = Iif(toHash.HasProperty("cCode"), toHash.GetValue("cCode"), Message(1) ) + lcCallStack = GetCallStack() + lcUserMessage = toHash.GetValue("cUserMessage") + + This.cErrorMessage = lcUserMessage + CRLF + CRLF + ; + 'Eroarea nr: ' + Transform(lnError) + CRLF + ; + 'Eroarea: ' + Transform(lcError) + CRLF + ; + 'Procedura: ' + Transform(lcMethod) + CRLF + ; + 'Linia: ' + Transform(lnLine) + CRLF + ; + 'Codul: ' + Transform(lcCode) + CRLF + ; + lcCallStack + + This.lError = .T. + This.oLog.WriteLog(This.cErrorMessage) + + aMessagebox(This.cErrorMessage,0+16,'Eroare') + *!* IF MESSAGEBOX(THIS.cErrorMessage + CRLF + 'Doriti sa iesiti?',16+4,'Eroare') = 6 + *!* RETURN TO MASTER + *!* ENDIF + Endproc && ProcessError + * + Procedure Log + Lparameters tcMessage + This.oLog.WriteLog(tcMessage) + Endproc && Log + * + Function GetError + Return This.cErrorMessage + Endfunc && GetError + * + Function HasError + Return This.lError + Endfunc && HasError + + * + Function Gethost + Return "" + Endfunc && GetHost + * + Function GetUser + Return "" + Endfunc && GetUser + * + Function GetPassword + Return "" + Endfunc && GetPassword + +Enddefine \ No newline at end of file diff --git a/COMUN/programe/controllere/dbaccesscontroller.prg b/COMUN/programe/controllere/dbaccesscontroller.prg new file mode 100644 index 0000000..3c009b7 --- /dev/null +++ b/COMUN/programe/controllere/dbaccesscontroller.prg @@ -0,0 +1,339 @@ +Define Class DBAccessController As Custom + + cServer = Null + cSchema = Null + cParola = Null + oExecutor = Null + oConn = Null + nHandle = Null + nSucces = 0 + lAfiseazaEroare = .T. + *********************************************************************** + Procedure Init + If Type('goConn') = 'O' + This.oConn = goConn + Else + This.oConn = Createobject("oConn") + Public goConn + goConn = This.oConn + Endif + If Type('goExecutor') = 'O' + This.oExecutor = goExecutor + Else + This.oExecutor = Createobject("oExecutor") + Public goExecutor + goExecutor = This.oExecutor + Endif + If Type('gnHandle') = 'N' + This.nHandle = gnHandle + Else + This.nHandle = -1 + Public gnHandle + gnHandle = -1 + Endif + Endproc + *********************************************************************** + PROCEDURE conecteaza + Lparameters tcSchema,tcParola + This.cSchema = tcSchema + This.cParola = tcParola + This.nHandle = This.oConn.Connect(This.cServer,This.cSchema,This.cParola) + ENDPROC + *********************************************************************** + PROCEDURE deconecteaza + This.oConn.Disconnect(This.nHandle) + This.cSchema = Null + This.cParola = Null + This.nHandle = -1 + ENDPROC + *********************************************************************** + Procedure setServer + Lparameters tcServer + This.cServer = tcServer + Endproc + *********************************************************************** + Procedure setSchemaParola + Lparameters tcSchema,tcParola + If This.nHandle <> -1 + This.oConn.Disconnect(This.nHandle) + Endif + This.conecteaza(tcSchema,tcParola) + Endproc + *********************************************************************** + Procedure copiaza_structura_cursor + Lparameters tcSursa,tcDestinatie + LOCAL lnIndex + If !Empty(tcSursa) And !Empty(tcDestinatie) + If Used(tcSursa) + Dimension laStructura(1,18) + If Used(tcDestinatie) + Use In (tcDestinatie) + Endif + Afields(laStructura,tcSursa) +*!* lnIndex = ALEN(laStructura,1)+1 +*!* DIMENSION laStructura(lnIndex,18) +*!* laStructura[lnIndex,1] = "RN" +*!* laStructura[lnIndex,2] = "N" +*!* laStructura[lnIndex,3] = 10 +*!* laStructura[lnIndex,4] = 0 +*!* laStructura[lnIndex,5] = .F. +*!* laStructura[lnIndex,6] = laStructura[lnIndex-1,6] +*!* laStructura[lnIndex,7] = [] +*!* laStructura[lnIndex,8] = [] +*!* laStructura[lnIndex,9] = [] +*!* laStructura[lnIndex,10] = laStructura[lnIndex-1,10] +*!* laStructura[lnIndex,11] = laStructura[lnIndex-1,11] +*!* laStructura[lnIndex,12] = laStructura[lnIndex-1,12] +*!* laStructura[lnIndex,13] = [] +*!* laStructura[lnIndex,14] = [] +*!* laStructura[lnIndex,15] = [] +*!* laStructura[lnIndex,16] = [] +*!* laStructura[lnIndex,17] = 1 +*!* laStructura[lnIndex,18] = 1 + Create Cursor (tcDestinatie) From Array laStructura + Release laStructura + Else + amessagebox("Eroare interna 2 - copiaza structura cursor",16,"Eroare") + Endif + Else + amessagebox("Eroare interna 1 - copiaza structura cursor",16,"Eroare") + Endif + Endproc + *********************************************************************** + Function apeleaza_sql_hash + Lparameters toHash,tcNumeCursor + LOCAL lcSql + lcSql = [select ] + toHash.getValue('cColumns') + ; + [ from ] + toHash.getValue('cTables') + ; + IIF(!Empty(toHash.getValue('cWhere')),[ where ] + toHash.getValue('cWhere'),[]) + ; + IIF(!Empty(toHash.getValue('cGroupBy')),[ group by ] + toHash.getValue('cGroupBy'),[]) + ; + IIF(!Empty(toHash.getValue('cOrderBy')),[ order by ] + toHash.getValue('cOrderBy'),[]) + RETURN This.apeleaza_sql(lcSql,tcNumeCursor) + endfunc + *********************************************************************** + Function apeleaza_sql + Lparameters tcSql,tcNumeCursor + Local lcNumeCursor,lcAlias,llSucces + llSucces = .F. + lcAlias = Alias() + lcNumeCursor = [codbctemp] + If Used(lcNumeCursor) + Use In (lcNumeCursor) + Endif + This.nSucces = This.oExecutor.oExecute(tcSql,lcNumeCursor) + llSucces = This.verificaSucces() + If llSucces + If !Used(tcNumeCursor) + This.copiaza_structura_cursor(lcNumeCursor,tcNumeCursor) + Endif + Select (tcNumeCursor) + Zap In (tcNumeCursor) + Append From Dbf(lcNumeCursor) + Go Top + If Used(lcNumeCursor) + Use In (lcNumeCursor) + Endif + If !Empty(lcAlias) + Select (lcAlias) + Endif + Endif + Return llSucces + Endfunc + *********************************************************************** + Function apeleaza_procedura + Lparameters tcApelProcedura,tcNumeCursor + Local lcNumeCursor,lcAlias,llSucces,lcDeclaratie + llSucces = .F. + lcAlias = Alias() + If !Empty(tcNumeCursor) + lcNumeCursor = [codbctemp] + lcSql = [{call ] + tcApelProcedura + [}] + If Used(lcNumeCursor) + Use In (lcNumeCursor) + Endif + Else + lcSql = [begin ] + tcApelProcedura + [; end;] + Endif + + This.nSucces = This.oExecutor.oExecute(lcSql,lcNumeCursor) + + llSucces = This.verificaSucces() + If llSucces And !Empty(tcNumeCursor) + If !Used(tcNumeCursor) + This.copiaza_structura_cursor(lcNumeCursor,tcNumeCursor) + Endif + Select (tcNumeCursor) + Zap In (tcNumeCursor) + Append From Dbf(lcNumeCursor) + Go Top + If Used(lcNumeCursor) + Use In (lcNumeCursor) + Endif + Endif + If !Empty(lcAlias) + Select (lcAlias) + Endif + Return llSucces + Endfunc + *********************************************************************** + Function apeleaza_procedura_o + Lparameters tcApelProcedura,tcSirTip + Local lcNumeCursor,lcAlias,llSucces,lcNumeVariabila,lnParametri, lcTip + Dimension laSir[1] + llSucces = .F. + lcAlias = Alias() + lnParametri = Getwordcount(tcSirTip,[|]) + Dimension laSir[lnParametri] + For i = 1 To lnParametri + lcTip = Getwordnum(tcSirTip,i,[|]) + lcNumeVariabila = [p] + lcTip + [Parametru] + Alltrim(Str(i)) + lcDeclaratie = [Private ] + lcNumeVariabila + &lcDeclaratie + DO case + CASE UPPER(lcTip) = 'N' + lcDeclaratie = lcNumeVariabila + [ = 0] + CASE UPPER(lcTip) = 'C' + lcDeclaratie = lcNumeVariabila + [ = ''] + Otherwise + lcDeclaratie = lcNumeVariabila + [ = Null] + endcase + &lcDeclaratie + tcApelProcedura = Strtran(tcApelProcedura,[@p]+Padl(Alltrim(Str(i)),2,[0]),[@]+lcNumeVariabila) + Endfor + lcSql = [{call ] + tcApelProcedura + [}] + This.nSucces = This.oExecutor.oExecute(lcSql) + llSucces = This.verificaSucces() + If llSucces + For i = 1 To lnParametri + lcNumeVariabila = [p] + Getwordnum(tcSirTip,i,[|]) + [Parametru] + Alltrim(Str(i)) + loVariabila = &lcNumeVariabila + laSir[i] = loVariabila + lcDeclaratie = [Release ] + lcNumeVariabila + &lcDeclaratie + Endfor + ELSE + For i = 1 To lnParametri + laSir[i] = Null + Endfor + Endif + If !Empty(lcAlias) + Select (lcAlias) + Endif + Return laSir + Endfunc + *********************************************************************** + Function apeleaza_functie + Lparameters tcApelFunctie,tcTip + Local lcCursor,luReturn + lcCursor = [crstaf010101] + lcSql = [select ] + tcApelFunctie + [ as valoare from dual] + This.nSucces = This.oExecutor.oExecute(lcSql,lcCursor) + If This.verificaSucces() + Select (lcCursor) + luReturn = valoare + If Used(lcCursor) + Use In (lcCursor) + Endif + Do Case + Case Isnull(luReturn) + Return Null + Case Type('luReturn') <> tcTip + Return Val(luReturn) + Otherwise + Return luReturn + Endcase + Else + Return Null + Endif + Endfunc + *********************************************************************** + Function getEroare + Return Iif(Between(This.oExecutor.nEroare,20000,21000),This.oExecutor.cEroare,[]) + Endfunc + *********************************************************************** + Function getSucces + Return This.nSucces + Endfunc + *********************************************************************** + Function getSchema + Return This.cSchema + Endfunc + *********************************************************************** + Procedure setAfiseazaEroare + Lparameters tlAfiseazaEroare + This.lAfiseazaEroare = tlAfiseazaEroare + Endproc + *********************************************************************** + Procedure getAfiseazaEroare + Return This.lAfiseazaEroare + Endproc + *********************************************************************** + Function verificaSucces + Local llReturn + llReturn = .T. + If This.nSucces < 0 + IF This.lAfiseazaEroare OR (!BETWEEN(This.oExecutor.nEroare,20000,21000)) + amessagebox(This.oExecutor.cEroare,16,"Eroare") + ENDIF + llReturn = .F. + Endif + Return llReturn + Endfunc + *********************************************************************** + Function setTranzactieManuala + Local lnSucces + lnSucces = SQLSetprop(This.nHandle,"Transactions",2) + If lnSucces < 0 + If This.lAfiseazaEroare + amessagebox("Programul nu a reusit sa treaca pe tranzactie manuala! Reintrati in program si incercati din nou!",16,"Eroare") + Endif + llReturn = .F. + Else + llReturn = .T. + Endif + Return llReturn + Endfunc + *********************************************************************** + Function setTranzactieAutomata + Local lnSucces,llReturn + lnSucces = SQLSetprop(This.nHandle,"Transactions",1) + If lnSucces < 0 + If This.lAfiseazaEroare + amessagebox("Programul nu a reusit sa treaca pe tranzactie automata! Iesiti din program si intrati din nou!",16,"Eroare") + Endif + llReturn = .F. + Else + llReturn = .T. + Endif + Return llReturn + Endfunc + *********************************************************************** + Function confirmaOperatii + Local lnSucces,llReturn + lnSucces = Sqlcommit(This.nHandle) + If lnSucces < 0 + If This.lAfiseazaEroare + amessagebox("Eroare la COMMIT!",16,"Eroare") + Endif + llReturn = .F. + Else + llReturn = .T. + Endif + Return llReturn + Endfunc + *********************************************************************** + Function revocaOperatii + Local lnSucces,llReturn + lnSucces = Sqlrollback(This.nHandle) + If lnSucces < 0 + If This.lAfiseazaEroare + amessagebox("Eroare la ROLLBACK!",16,"Eroare") + Endif + llReturn = .F. + Else + llReturn = .T. + Endif + Return llReturn + Endfunc + *********************************************************************** +Enddefine \ No newline at end of file diff --git a/COMUN/programe/controllere/logbcontroller.prg b/COMUN/programe/controllere/logbcontroller.prg new file mode 100644 index 0000000..49b4d94 --- /dev/null +++ b/COMUN/programe/controllere/logbcontroller.prg @@ -0,0 +1,66 @@ +#INCLUDE COMUN.H + +Define Class logBaseController As Session + cLog = '' + cOutputFile = '' + lAdditive = .T. + + ******************************************************************** + Procedure Init + Lparameters tcOutputfile, tlAdditive + + If !Empty(tcOutputfile) And Type('tcOutputFile') = 'C' + This.cOutputFile = tcOutputfile + Endif + If Pcount() = 2 And Type('tlAdditive') = 'L' + This.lAdditive = tlAdditive + Endif + + This.Log() + Endproc + ******************************************************************** + Procedure Log + Lparameters tcMessage, tcProgram + Local lcLog + If Pcount() = 0 Or Type('tcMessage') # 'C' Or Empty(tcMessage) + lcLog = CRLF + Else + lcLog = Ttoc(Datetime()) + ' ' + Sys(0) + CRLF + tcMessage + CRLF + Endi + This.cLog = This.cLog + lcLog + This.WRITELOG() + Endproc + ******************************************************************** + Procedure ResetLog + This.cLog = '' + Endproc + ******************************************************************** + Procedure WRITELOG + Lparameters tcMessage, tcOutputfile, tlAdditive + Local lcOutputfile, llAdditive, lcLog + If !Empty(tcOutputfile) And Type('tcOutputFile') = 'C' + lcOutputfile = tcOutputfile + Else + lcOutputfile = This.cOutputFile + Endif + If Pcount() < 3 Or Type('tlAdditive') # 'L' + llAdditive = This.lAdditive + Else + llAdditive = tlAdditive + Endif + If Type('tcMessage') = 'C' + If Empty(tcMessage) + lcLog = CRLF + Else + lcLog = Ttoc(Datetime()) + ' ' + Sys(0) + CRLF + tcMessage + CRLF + Endif + Else + lcLog = This.cLog + Endif + If !Empty(lcOutputfile) + Strtofile(lcLog, lcOutputfile, llAdditive) + Endif + Endproc + ******************************************************************** +Enddefine +* diff --git a/COMUN/programe/controllere/logincontroller.prg b/COMUN/programe/controllere/logincontroller.prg new file mode 100644 index 0000000..3a3fea2 --- /dev/null +++ b/COMUN/programe/controllere/logincontroller.prg @@ -0,0 +1,249 @@ +#INCLUDE COMUN.H +#INCLUDE MVC.H + +Define Class LoginController As Custom + oDBController = Null + oControllerSetari = Null + oUtilizator = Null +*!* oFirma = Null + oView = Null + nTipLogin = Null + cFormLogin = Null + cProcLogin = Null + nTipVerificare = 0 +*!* 0 = verificare utilizator si parola +*!* 1 = verificare utilizator si parola cu id-ul dat ca parametru +*!* 2 = verificare utilizator si parola cu nivelul dat ca parametru + nIdUtil = Null + nNivelAcces = Null + cExplicatie = "Autentificare" + cRestaurant = Null + *********************************************************************** + Procedure Init + Lparameters toDbController,toControllerSetari,tnTipVerificare,tnParametru,tcDenumire + This.oDBController = toDbController + This.oControllerSetari = toControllerSetari + This.oUtilizator = Createobject("UtilizatorModel") + *!* This.oFirma = CREATEOBJECT("FirmaModel") + This.nTipLogin = 2 + This.cFormLogin = [Login] + Iif(This.nTipLogin=2,[CodBare],[]) + This.cProcLogin = [Login] + Iif(This.nTipLogin=2,[CodBare],[]) + This.nTipVerificare = IIF(TYPE('tnTipVerificare')<>'N',0,tnTipVerificare) + Do Case + Case This.nTipVerificare = 1 + This.nIdUtil = tnParametru + This.nNivelAcces = Null + This.cExplicatie = This.cExplicatie + [ ] + ALLTRIM(tcDenumire) + Case This.nTipVerificare = 2 + This.nNivelAcces = tnParametru + This.nIdUtil = Null + This.cExplicatie = This.cExplicatie + [ nivel minim : ] + ALLTRIM(tcDenumire) + Otherwise + This.oDBController.setLoginController(This) + This.nIdUtil = Null + This.nNivelAcces = Null + Endcase + Endfunc && INIT + *********************************************************************** + Procedure conecteaza + Local lcParolaSchema,lcServer,lcSchema,lcParola + lcServer = This.oControllerSetari.getServerSetari() + This.oDBController.setServer(lcServer) + This.oDBController.setSchemaParola(This.oControllerSetari.getSchemaSecurity(lcServer),This.oControllerSetari.getParolaSecurity(lcServer)) + lnIdFirmaSetari = This.oControllerSetari.getIdFirmaSetari() + If !Empty(lnIdFirmaSetari) + lcParolaSchema = This.oDBController.getParolaSchema(lnIdFirmaSetari) + IF !EMPTY(lcParolaSchema) + lnPoz = AT('$',lcParolaSchema) + lcSchema = SUBSTR(lcParolaSchema,1,lnPoz-1) + lcParola = SUBSTR(lcParolaSchema,lnPoz+1) + This.oDBController.setSchemaParola(lcSchema,lcParola) + If This.nTipVerificare = 0 + This.oControllerSetari.verificaVersiuni() + Endif + ENDIF + Endif + Endproc + *********************************************************************** + PROCEDURE deconecteaza + This.oDBController.deconecteaza() + This.oUtilizator.reseteazaDate() + ENDPROC + *********************************************************************** + Function getIdUtil + Return This.oUtilizator.getIdUtil() + Endfunc + *********************************************************************** + Function getUtilizator + Return This.oUtilizator.getUtilizator() + Endfunc + *********************************************************************** + Function getSex + Return This.oUtilizator.getSex() + Endfunc + *********************************************************************** + Procedure setInTura + LPARAMETERS tlInTura + This.oUtilizator.setInTura(tlInTura) + Endproc + *********************************************************************** + Function getInTura + Return This.oUtilizator.getInTura() + Endfunc + *********************************************************************** + Function getNivelAcces + Return This.oUtilizator.getNivelAcces() + Endfunc + *********************************************************************** + Function getIdRestaurant + Return This.oControllerSetari.getIdRestaurant() + Endfunc + *********************************************************************** + FUNCTION setRestaurant + LPARAMETERS tcRestaurant + This.cRestaurant = tcRestaurant + _Screen.Caption = gcExplicatieProgram + [ * ] + tcRestaurant + ENDFUNC + *********************************************************************** + FUNCTION getRestaurant + RETURN This.cRestaurant + ENDFUNC + *********************************************************************** + Function getIdSucursala + Return This.oControllerSetari.getIdSucursala() + Endfunc + ********************************************************************* + Function getIdMama + Return This.oControllerSetari.getIdMama() + Endfunc + ********************************************************************* + Function getEMama + Return This.oControllerSetari.getEMama() + Endfunc + ********************************************************************* + FUNCTION getFirma + LOCAL loFirma + loFirma = This.oControllerSetari.getoFirma() + RETURN NVL(loFirma.firma,[ ]) + endfunc + *********************************************************************** + Procedure lanseazaLogin + If This.conecteaza() + Do Form (This.cFormLogin) With This,This.cExplicatie Name This.oView + Else + amessagebox("Nu s-a putut stabili conexiunea cu serverul!",16,"Eroare") + Endif + Endproc && List + *********************************************************************** + Procedure verificaUtilizator + Parameters tcParola,tcUtilizator + Local lcCod,lcUtilizator + This.oDBController.setAfiseazaEroare(.F.) + lcCod = This.oDBController.verifica_drepturi_utilizator(tcParola,; + This.oControllerSetari.getIdFirmaSetari(),This.oControllerSetari.getNumeProgram(),; + This.nTipVerificare,IIF(This.nTipVerificare=2,This.nNivelAcces,This.nIdUtil),tcUtilizator) + + If !ISNULL(lcCod) + This.oUtilizator.actualizeazaDate(tcParola,lcCod,tcUtilizator) + IF this.nTipVerificare = 0 + This.oControllerSetari.citesteSetariSchema(This.oUtilizator.getIdUtil()) + This.setRestaurant(This.oDBController.initializeaza_restaurant(This.oControllerSetari.getIdRestaurant())) + ENDIF + Else + This.oUtilizator.reseteazaDate() + Endif + + IF This.verificaSucces() + This.oView.Release() + Else + If This.nTipLogin = 1 +*!* lcErrorMessage = "Combinatie utilizator/parola invalida!" + This.oView.txtUtilizator.SetFocus() + Else +*!* lcErrorMessage = "Cod invalid!" + This.oView.txtParola.Value = [] + This.oView.txtParola.SetFocus() + Endif +*!* This.oView.lblMessage.Caption = lcErrorMessage + This.oView.lblMessage.Caption = This.oDBController.getEroare() + Endif + This.oDBController.setAfiseazaEroare(.T.) + Endproc + *********************************************************************** + FUNCTION verificaSucces + LOCAL llReturn + IF This.esteAutentificat() +*!* AND ((This.nTipVerificare = 0) OR ; +*!* (This.nTipVerificare = 1 AND This.oUtilizator.getIdUtil() = This.nIdUtil) OR ; +*!* (This.nTipVerificare = 2 AND This.oUtilizator.getNivelAcces() >= This.nNivelAcces)) + llReturn = .T. + ELSE + llReturn = .F. + ENDIF + RETURN llReturn + ENDFUNc + *********************************************************************** + Function esteAutentificat + Return This.oUtilizator.esteAutentificat() + Endfunc + *********************************************************************** + Procedure SetEventsHandlers + Bindevent(This.oView.cmdLogin, "CLICK", This, This.cProcLogin ) + Bindevent(This.oView.cmdCancel, "CLICK", This, This.cProcLogin ) + Endproc && SetEventsHandler + *********************************************************************** + Procedure Login + Local lnRows, lcCommand, lcErrorMessage, lcUtilizator, lcParola, loUtilizator + + Declare laEvents[3] + lcErrorMessage = "" + lnRows = Aevents(laEvents,0) + + If lnRows = 3 + lcCommand = Upper(laEvents(1).Name) + Else + lcCommand = "" + Endif + If lcCommand = 'CMDLOGIN' + lcUtilizator = Alltrim(This.oView.cboUtilizator.Value) + lcParola = Alltrim(This.oView.txtParola.Value) + + This.verificaUtilizator(lcParola,lcUtilizator) + Else + This.oView.Release() + Endif + + Endproc && Login + *********************************************************************** + Procedure LoginCodBare + Local lnRows, lcCommand, lcErrorMessage, lcUtilizator, lcParola, loUtilizator + Declare laEvents[3] + lcErrorMessage = "" + lnRows = Aevents(laEvents,0) + If lnRows = 3 + lcCommand = Upper(laEvents(1).Name) + Else + lcCommand = "" + Endif + + If Inlist(lcCommand, 'CMDLOGIN') + lcCodBare = Alltrim(This.oView.txtParola.Value) +*!* lcUtilizator = Left(lcCodBare,At("$", lcCodBare)-1) +*!* lcParola = Substr(lcCodBare,At("$", lcCodBare)+1) + lcParola = lcCodBare + This.verificaUtilizator(lcParola) + Else + This.oView.Release() + Endif + + Endproc && LoginCodBare + *********************************************************************** + PROCEDURE reinitializeazaDate + This.oControllerSetari.citesteSetariSchema(This.oUtilizator.getIdUtil()) + ENDPROC + *********************************************************************** + PROCEDURE release + This.oUtilizator.Release() + ENDPROC + *********************************************************************** +Enddefine \ No newline at end of file diff --git a/COMUN/programe/controllere/orasettingscontroller.prg b/COMUN/programe/controllere/orasettingscontroller.prg new file mode 100644 index 0000000..8a93ad1 --- /dev/null +++ b/COMUN/programe/controllere/orasettingscontroller.prg @@ -0,0 +1,184 @@ +Define Class oraSettingsController As Custom + + oDBController = Null + oDateCalendar = Null + oDateFirma = Null + nIdSucursala = Null + nIdMama = Null + lEMama = Null + + Procedure Init + Lparameters toDBController + This.oDBController = toDBController + Endproc + ****************************************************************** + Procedure initializeaza_firma + Lparameters tnIdFirma,tnIdUtil + This.initializeaza_date_firma(tnIdFirma) + This.initializeaza_calendar() + This.initializeaza_optiuni() + This.initializeaza_utilizator(tnIdUtil) + Endproc + ****************************************************************** + Procedure initializeaza_utilizator + Lparameters tnIdUtil + This.initializeaza_optiuni_utilizator(tnIdUtil) + This.initializeaza_sesiune_server(tnIdUtil) + Endproc + ****************************************************************** + Procedure initializeaza_date_firma + Lparameters tnIdFirma + Local loFirma,lcCursor + This.oDateFirma = Null + lcCursor = [crsdatefirma] + If Used(lcCursor) + Use In (lcCursor) + Endif + If This.oDBController.apeleaza_sql_hash(getHash([cColumns=>*??cTables=>syn_nom_firme??cWhere=>id_firma=] + Alltrim(Str(tnIdFirma))),lcCursor) + Select (lcCursor) + Scatter Name loFirma + This.oDateFirma = loFirma + This.nIdSucursala = Iif(Nvl(loFirma.id_mama,0) <> 0, loFirma.Id_Firma, Null) && DACA ESTE SUCURSALA - ID-UL SUCURSALA PE CARE IL SCRIU IN TABELE + This.nIdMama = Iif(Nvl(loFirma.id_mama,0) <> 0, loFirma.id_mama, Null) + This.lEMama = Nvl(loFirma.e_mama,0) <> 0 + Endif + If Used(lcCursor) + Use In (lcCursor) + Endif + Endproc + ****************************************************************** + Procedure initializeaza_calendar + Local loCalendar,lcCursor + This.oDateCalendar = Null + lcCursor = [crscalendar] + If Used(lcCursor) + Use In (lcCursor) + Endif + If This.oDbController.apeleaza_sql_hash(getHash([cColumns=>*??cTables=>(select * from calendar order by id_calendar desc)??cWhere=>rownum = 1]),lcCursor) + If Reccount(lcCursor) = 0 + amessagebox("Nu exista luni deschise in calendar!",48,"Atentie") + Else + Select (lcCursor) + Scatter Name loCalendar + This.oDateCalendar = loCalendar + Endif + Endif + If Used(lcCursor) + Use In (lcCursor) + Endif + Endproc + ****************************************************************** + PROCEDURE initializeaza_optiuni_utilizator + LPARAMETERS tnIdUtil + LOCAL lcCursor + lcCursor = [crsOptiuniUtilizator] + If Used(lcCursor) + Use In (lcCursor) + Endif + This.oDbController.apeleaza_sql_hash(getHash([cColumns=>*??cTables=>optiuni_util??cWhere=>id_util=] +ALLTRIM(STR(tnIdUtil)) + [??cOrderBy=>varname]),lcCursor) + ENDPROC + ****************************************************************** + Procedure initializeaza_optiuni + Local lcNumeCursor + lcNumeCursor = [v_optiuni] + If This.citeste_optiuni(lcNumeCursor) + Select(lcNumeCursor) + Scan For !Empty(varname) And (Isnull(programe) Or gcNumeProgram$programe) + lcvarname = Alltrim(&lcNumeCursor..varname) + lcvartype = Upper(Alltrim(&lcNumeCursor..Vartype)) + Do Case + Case lcvartype = "CHARACTER" + Public gc&lcvarname. + luvarvalue = Alltrim(&lcNumeCursor..varvalue) + gc&lcvarname. = luvarvalue + Case lcvartype = "CURRENCY" + Public gy&lcvarname. + luvarvalue = Ntom(Val(&lcNumeCursor..varvalue)) + gy&lcvarname. = luvarvalue + Case lcvartype = "NUMERIC" + Public gn&lcvarname. + luvarvalue = Val(&lcNumeCursor..varvalue) + gn&lcvarname. = luvarvalue + Case lcvartype = "DATETIME" + Public gt&lcvarname. + luvarvalue = Ctot(&lcNumeCursor..varvalue) + gt&lcvarname. = luvarvalue + Case lcvartype = "DATE" + Public gd&lcvarname. + luvarvalue = Ctod(&lcNumeCursor..varvalue) + gd&lcvarname. = luvarvalue + Case lcvartype = "LOGICAL" + Public gl&lcvarname. + luvarvalue = Iif(Inlist(Upper(Left(&lcNumeCursor..varvalue, 1)), "T", "Y"), .T., .F.) + gl&lcvarname. = luvarvalue + Otherwise + pcmsgbuff = "Tip de variabila globala invalid!" + pcmsgbuff = pcmsgbuff + Chr(13) + Chr(13) + "Numele variabilei: " + lcvarname + pcmsgbuff = pcmsgbuff + Chr(13) + "Tipul variabilei: " + lcvartype + pcmsgbuff = pcmsgbuff + Chr(13) + Chr(13) + "Contactati suportul tehnic." + =aMessagebox(pcmsgbuff, 48) + pcmsgbuff = "" + Endcase + Endscan + + Endif + If Used(lcNumeCursor) + Use In (lcNumeCursor) + Endif + Endproc + ****************************************************************** + PROCEDURE initializeaza_sesiune_server + Lparameters tnIdUtil + Local lcProceduri + lcProceduri = [pack_sesiune.set_Id_Util(] + ALLTRIM(STR(tnIdUtil)) + [);] + ; + [pack_sesiune.setluna(] + ALLTRIM(STR(This.oDateCalendar.luna)) + [);] + ; + [pack_sesiune.setan(] + ALLTRIM(STR(This.oDateCalendar.anul)) + [);] + ; + [pack_sesiune.setlunabal(] + ALLTRIM(STR(This.oDateCalendar.luna)) + [);] + ; + [pack_sesiune.setanbal(] + ALLTRIM(STR(This.oDateCalendar.anul)) + [);] + ; + [pack_contafin.set_data_ron('] + ALLTRIM(This.oDateFirma.schema) + [');] + ; + [pack_sesiune.set_data_ron('] + ALLTRIM(This.oDateFirma.schema) + [');] + ; + [pack_contafin.set_id_sucursala(] + Iif(Nvl(This.oDateFirma.id_mama,0) <> 0, ALLTRIM(STR(This.oDateFirma.Id_Firma)), [NULL]) + [);] + ; + [pack_contafin.set_id_firma(] + ALLTRIM(STR(This.oDateFirma.id_firma)) + [)] + This.oDBController.apeleaza_procedura(lcProceduri) + ENDPROC + ****************************************************************** + Function scrie_optiuni + Local lcProcedura + lcProcedura = [scrie_optiuni(USER)] + Return This.oDBController.apeleaza_procedura(lcProcedura) + Endfunc + ****************************************************************** + FUNCTION verificaVersiuni + LPARAMETERS tcNumeProgram,tcVersiuneProgram,tcVersiuneDBTxt + LOCAL lcFunctie + lcFunctie = [pack_migrare.VerificaVersiune(']+tcNumeProgram+[', ']+tcVersiuneProgram+[',']+tcVersiuneDBTxt+[')] + Return This.oDBController.apeleaza_functie(lcFunctie,[C]) + ENDfunc + ****************************************************************** + Function citeste_optiuni + Lparameters tcNumeCursor + This.scrie_optiuni() + Return This.oDBController.apeleaza_sql_hash(getHash([cColumns=>*??cTables=>optiuni??cOrderBy=>varname]),tcNumeCursor) + Endfunc + ****************************************************************** + Function getoFirma + Return This.oDateFirma + Endfunc + ****************************************************************** + Function getoCalendar + Return This.oDateCalendar + Endfunc + ****************************************************************** + Function getIdSucursala + Return This.nIdSucursala + Endfunc + ****************************************************************** + Function getIdMama + Return This.nIdMama + Endfunc + ****************************************************************** + Function getEMama + Return This.lEMama + Endfunc + ****************************************************************** +Enddefine \ No newline at end of file diff --git a/COMUN/programe/controllere/roabaseapplication.prg b/COMUN/programe/controllere/roabaseapplication.prg new file mode 100644 index 0000000..8a83dd0 --- /dev/null +++ b/COMUN/programe/controllere/roabaseapplication.prg @@ -0,0 +1,202 @@ +Define Class ROABaseApplication As Custom + cLastSetClassLib = Null + cLastSetTalk = Null + cLastSetPath = Null + + cNumeProgram = [ROA] + cCopyRight = [ ROA Romfast SRL] + cUserNameApp = Null + cExplicatieProgram = Null + + cROAPath = Null + cAppPath = Null + cSecurityPath = Null + cGeneralIniFile = Null + + oLog = Null + oExecutor = Null + oConn = Null + oExport = Null + oMyXmlHttp = Null + + Procedure Init + Lparameters tcNumeProgram + This.cNumeProgram = Upper(Alltrim(tcNumeProgram)) + _Screen.Icon = tcNumeProgram + [.ico] + _Screen.Visible=.F. + This.definesteConstante() + This.setMediu() + This.setClase() + This.setProceduri() + This.declaraDLL() + This.setVariabile() + This.setAlteProceduri() + This.initializeazaControllere() + This.setExplicatieProgram() + Endproc + + PROCEDURE setVariabile + This.cAppPath = Addbs(ShortPath(GetAppStartPath())) + This.cROAPath = Addbs(Left(This.cAppPath,Rat("\",This.cAppPath,2)-1)) + This.cSecurityPath = This.cROAPath + 'Security\' + This.cGeneralIniFile = This.cROAPath + "settings.ini" + ENDPROC + + PROCEDURE setAlteProceduri + Set Path To Addbs(Substr(This.cAppPath,1,Rat([\],This.cAppPath,2)))+[COMUNROA\] Additive + ENDPROC + + PROCEDURE setExplicatieProgram + Local laVersion + Dimension laVersion(12) + If Agetfileversion(laVersion, Sys(16,0)) > 0 + This.cExplicatieProgram = laVersion(10) + IF TYPE('gcExplicatieProgram') = 'C' + gcExplicatieProgram = This.cExplicatieProgram + ENDIF + Endif + Release laVersion + ENDPROC + + Procedure definesteConstante + Public LF,CR,CRLF,CTAB,CT_INSUCCES,CT_SUCCES + Store Chr(10) To LF + Store Chr(13) To CR + Store Chr(13) + Chr(10) To CRLF + Store Chr(9) To CTAB + Store -1 To CT_INSUCCES + Store 1 To CT_SUCCES + Endproc + + Procedure initializeazaControllere + This.oLog = Createobject("logBaseController",This.cAppPath + "log_" + This.cNumeProgram + "_" + DTOS(DATE()) + ".txt") + This.oExecutor = Createobject("oExecutor") + This.oConn = Createobject("oConn") + This.oExport = Createobject("oExportConfig") + This.oMyXmlHttp = Createobject("MyXMLHTTP", getini(gcGeneralIniFile,'errors','host')) + Endproc + + Procedure declaraDLL + Declare Integer Beep In kernel32; + INTEGER dwFreq,; + INTEGER dwDuration + Declare Integer CoCreateGuid In OLE32.Dll String @lcBuffer + Endproc + + Procedure setClase + Set Classlib To registry Additive + Set Classlib To Messagebox Additive + Endproc + + Procedure setProceduri + Set Procedure To wwxmlhttp.prg Additive + Set Procedure To wwutils.prg Additive + Set Procedure To wwApi.prg Additive + SET PROCEDURE TO oproceduri_comune.prg additive + SET PROCEDURE TO ini.prg additive + Endproc + + Procedure setMediu + This.backupMediu() + + Set Path To ;Date;Include;FERESTRE;GRAFICE;Help;CLASE;MENIURI;PROGRAME;RAPOARTE;PROGS;LIBS + Push Menu _Msysmenu + Set Century On + Set Date Dmy + Set Ansi On + Set Exact On + Set Talk Off + Set Console Off + Set Safety Off + Close Databases All + Set Deleted On + Set Point To '.' + Set Hours To 24 + Set NullDisplay To "*" + Set Mark To '/' + Set Exclusive Off + Set Cpdialog Off + Set Escape Off + Set Notify Off + Set Seconds Off + Set Decimals To 4 + Endproc + + Procedure backupMediu + This.cLastSetClassLib=Set("CLASSLIB") + This.cLastSetTalk=Set("TALK") + This.cLastSetPath=Set("PATH") + Endproc + + Procedure ResetMediu + If Cntbar("_msysmenu")<>7 + Pop Menu _Msysmenu + Endif + + On Error + On Shutdown + Set Classlib To + Set Path To + Close All + Clear Events + + If Inlist(Application.StartMode,4) && EXE + Quit + Endif + + This.restoreMediu() + Endproc + + Procedure restoreMediu + If Empty(Nvl(This.cLastSetPath,[])) + Set Path To + Else + Set Path To &(This.cLastSetPath) + Endif + If This.cLastSetTalk=="ON" + Set Talk On + Else + Set Talk Off + Endif + Endproc + + Function Shutdown + If Type("goApp")=="O" And Not Isnull(goApp) + If Pemstatus(goApp,"OnShutdown",5) + Return goApp.OnShutDown() + Endif + Endif + This.ResetMediu() + Endfunc + + Function ErrorHandler(nError,cMethod,nLine) + Local lcErrorMsg,lcCodeLineMsg,lcUserName + Wait Clear + lcErrorMsg=Message()+Chr(13)+Chr(13) + lcErrorMsg=lcErrorMsg+"Method: "+cMethod + lcCodeLineMsg=Message(1) + If Between(nLine,1,10000) And Not lcCodeLineMsg="..." + lcErrorMsg=lcErrorMsg+Chr(13)+"Line: "+Alltrim(Str(nLine)) + If Not Empty(lcCodeLineMsg) + lcErrorMsg=lcErrorMsg+Chr(13)+Chr(13)+lcCodeLineMsg + Endif + Endif + lcErrorMsg = Sys(0) + ":" + Iif(Type('GCS')='C'," " + gcS,"") + Chr(13) +Chr(10) + lcErrorMsg + lcUserName = This.cUserNameApp + lcProgram = Juststem(Sys(16,0)) + This.oMyXMLHTTP.postError(lcErrorMsg, lcUserName, lcProgram) + + If aMessagebox(lcErrorMsg,17,_Screen.Caption)#1 + On Error + Return .F. + Endif + Endfunc + + Function verificaAplicatie + If !Like(This.cNumeProgram + '*', Upper(Alltrim(Juststem(Sys(16,0))))) + aMessagebox("Nu puteti porni acest program!",0+16,"Atentie") + Return .F. + Endif + Endfunc + +Enddefine \ No newline at end of file diff --git a/COMUN/programe/controllere/settingsbcontroller.prg b/COMUN/programe/controllere/settingsbcontroller.prg new file mode 100644 index 0000000..b926309 --- /dev/null +++ b/COMUN/programe/controllere/settingsbcontroller.prg @@ -0,0 +1,376 @@ +#include security.h +*!* #Define WINDOWHIDE 0x80 +*!* #Define WINDOWSHOW 0x40 +*!* #define TBAR_AUTOHIDE 1 +*!* #define TBAR_KEEPONTOP 2 +*!* #define ABM_GETSTATE 0x00000004 +*!* #define ABM_SETSTATE 0x0000000A + +Define Class settingsBaseController As Custom + cNumeProgram = '' + cAppName = '' + cAppPath = '' + cIniFile = '' + cVersiuneProgram = '' + cVersiuneDBTxt = '' + cROAClientPath = '' + cROAClientIniFile = '' + cIniText = '' + lLog = .F. + cHostErrors = '' + cCursorHost = [crshost] + nTipCriptare = 0 + oOraSettingsController = Null + + *!* 0 = fara + *!* 1 = vechi + *!* 2 = nou + + Procedure Init + Lparameters tcNumeProgram + Declare Long FindWindow In "user32" String lpClassName, String lpWindowName + Declare Long SetWindowPos In "user32" Long HWnd, Long hWndInsertAfter, Long x, Long Y, Long cx, Long cy, Long wFlags + Declare Long SHAppBarMessage In "shell32.dll" Long dwMessage,String @pData + + This.cNumeProgram = tcNumeProgram + This.cAppPath = Addbs(ShortPath(GetAppStartPath())) + This.cAppName = Allt(Uppe(Juststem(Sys(16,0)))) + This.cIniFile = This.cAppPath + 'settings.ini' + This.cROAClientPath = Addbs(Left(This.cAppPath,Rat("\",This.cAppPath,2)-1)) + This.cROAClientIniFile = This.cROAClientPath + 'settings.ini' + + If !File(This.cIniFile) + This.InitSettings() + Endif + + This.ReadSettings() + This.citesteVersiuneProgram() + This.citesteVersiuneDBTxt() + Endproc + ********************************************************************* + Procedure setDBController + Lparameters toDBController + This.oOraSettingsController = Createobject('orasettingscontroller',toDBController) + Endproc + ********************************************************************* + Procedure verificaVersiuni + Local lcMesaj,lcMesajVerificare + lcMesajVerificare = This.oOraSettingsController.verificaVersiuni(This.cNumeProgram,This.cVersiuneProgram,This.cVersiuneDBTxt) + If !Empty(Nvl(lcMesajVerificare,[])) + Do Case + Case This.cNumeProgram$Upper(lcMesajVerificare) + lcMesaj = "Trebuie actualizat " + This.cNumeProgram + " la versiunea " + Getwordnum(lcMesajVerificare, 2, ":") + Chr(13) + Chr(10) + ; + "Versiunea actuala este " + Getwordnum(lcMesajVerificare, 3, ":") + Case "DB"$Upper(lcMesajVerificare) + lcMesaj = "Trebuie actualizata baza de date la versiunea " + Getwordnum(lcMesajVerificare, 2, ":") + Chr(13) + Chr(10) + ; + "Versiunea actuala este " + Getwordnum(lcMesajVerificare, 3, ":") + Endcase + AMESSAGEBOX(lcMesaj,0+48, "Actualizare") + Endif + Release lcMesaj,lcMesajVerificare + Endproc + ********************************************************************* + Procedure citesteVersiuneProgram + Local lcFisierExe + lcFisierExe = This.cAppPath + This.cAppName + [.exe] + If Agetfileversion(aVersion, lcFisierExe) > 0 + This.cVersiuneProgram = Alltrim(aVersion(4)) + Else + This.cVersiuneProgram = [] + Endif + If Type('aVersion') <> 'U' + Release aVersion + Endif + Endproc + ********************************************************************* + Procedure citesteVersiuneDBTxt + Local lcFisierVersiuneDB + lcFisierVersiuneDB = This.cAppPath + 'versiune_db.txt' + If File(lcFisierVersiuneDB) + This.cVersiuneDBTxt = Alltrim(Filetostr(lcFisierVersiuneDB)) + Else + This.cVersiuneDBTxt = [] + Endif + Release lcFileVersiuneDB + Endproc + ********************************************************************* + Procedure InitSettings + If Empty(This.cIniText) + Return + Endif + Strtofile(This.cIniText, This.cIniFile) + Endproc && InitSettings + *!* ********************************************************************* + *!* Function HideTaskBar + *!* Local lnHandle,lcInfoBuffer + *!* lnHandle = FindWindow("Shell_TrayWnd", "") + *!* *!* SetWindowPos(lnHandle, 0, 0, 0, 0, 0, WINDOWHIDE) + *!* DEBUG + *!* SUSPEND + *!* lcInfoBuffer = This.num2dword(0) + ; + *!* This.num2dword(lnHandle) + ; + *!* This.num2dword(0) + ; + *!* This.num2dword(0) + ; + *!* This.num2dword(0) + ; + *!* This.num2dword(0) + *!* SHAppBarMessage(ABM_GETSTATE,@lcInfoBuffer) + *!* lcInfoBuffer = This.num2dword(50000) + ; + *!* This.num2dword(lnHandle) + ; + *!* This.num2dword(0) + ; + *!* This.num2dword(0) + ; + *!* This.num2dword(0) + ; + *!* This.num2dword(BITNOT(TBAR_KEEPONTOP)) + *!* SHAppBarMessage(ABM_SETSTATE,@lcInfoBuffer) + *!* Endfunc + *!* ********************************************************************* + *!* Function ShowTaskBar + *!* Local lnHandle + *!* lnHandle = FindWindow("Shell_TrayWnd", "") + *!* *!* SetWindowPos(lnHandle, 0, 0, 0, 0, 0, WINDOWSHOW) + *!* Endfunc + *!* ********************************************************************* + *!* FUNCTION num2dword + *!* LPARAMETERS tnValue + *!* #DEFINE m0 256 + *!* #DEFINE m1 65536 + *!* #DEFINE m2 16777216 + *!* LOCAL b0, b1, b2, b3 + *!* b3 = Int(tnValue/m2) + *!* b2 = Int((tnValue- b3*m2)/m1) + *!* b1 = Int((tnValue- b3*m2 - b2*m1)/m0) + *!* b0 = Mod(tnValue, m0) + *!* RETURN Chr(b0)+Chr(b1)+Chr(b2)+Chr(b3) + *!* endfunc + *!* ********************************************************************* + Procedure ReadSettings + This.cHostErrors = This.GetVariable([errors],[host]) + If Upper(Alltrim(This.GetVariable([errors],[log]))) = [TRUE] + This.lLog = .T. + Else + This.lLog = .F. + Endif + + *!* This.citesteSecurity() + Endproc + ********************************************************************* + Function getHostErrors + Return This.cHostErrors + Endfunc + ********************************************************************* + Function getlLog + Return This.lLog + Endfunc + ********************************************************************* + Function getLogPath + Return Iif(This.lLog,This.cAppPath + [log_]+ This.cNumeProgram + [_] + Dtos(Date()) + [.txt],[]) + Endfunc + ********************************************************************* + Function getUpdateServer + Return This.GetVariable([update],[server]) + Endfunc + ********************************************************************* + Function getNumeProgram + Return This.cNumeProgram + Endfunc + ********************************************************************* + Function getSchemaSecurity + Lparameters tcNumeServer + Local lcAliasVechi,lcSchema + lcSchema = [] + lcAliasVechi = Alias() + Select (This.cCursorHost) + Locate For Upper(Alltrim(Host)) = Upper(Alltrim(tcNumeServer)) + If Found() + lcSchema = Upper(Alltrim(schema)) + Endif + If Used(lcAliasVechi) + Select (lcAliasVechi) + Endif + Return lcSchema + Endfunc + ********************************************************************* + Function getParolaSecurity + Lparameters tcNumeServer + Local lcAliasVechi,lcParola + lcParola = [] + lcAliasVechi = Alias() + Select (This.cCursorHost) + Locate For Upper(Alltrim(Host)) = Upper(Alltrim(tcNumeServer)) + If Found() + lcParola = Alltrim(pwd) + lcParola = Iif(Alltrim(isEncrypted) = [1],EncryptDecrypt(lcParola,ENCRYPTKEY,"decrypt",Iif(This.nTipCriptare=2,"blowfish","old")),lcParola) + Endif + If Used(lcAliasVechi) + Select (lcAliasVechi) + Endif + Return lcParola + Endfunc + ********************************************************************* + Function citesteSecurity + Lparameters tcFileExt + Local lcSecurityFile,lcSecurityPath,lnValid,lcFileExt,lcSecurityText,llSucces + llSucces = .T. + lcFileExt = Iif(Empty(tcFileExt),[XML],tcFileExt) + + lcSecurityPath = This.cROAClientPath + [SECURITY\] + lcSecurityFile = lcSecurityPath + [roa_security.] + lcFileExt + lnValid = 0 + + If !File(lcSecurityFile) + AMESSAGEBOX('Nu exista fisierul ' + lcSecurityFile + ' !',0+16,'Atentie') + llSucces = .F. + Else + If Used(This.cCursorHost) + Use In (This.cCursorHost) + Endif + + Create Cursor (This.cCursorHost)(Host c(100), schema c(100), pwd v(100), isEncrypted c(1)) + lcSecurityText = Filetostr(lcSecurityFile) + If lcFileExt = [XML] + Try + Xmltocursor(lcSecurityFile, "cXML", 512) + Select cXml + Go Top + Scatter Name lofirstrecord + + If lofirstrecord.Host="ENCRYPTION" + This.nTipCriptare = 2 + Delete + Else + This.nTipCriptare = 1 + Endif + + Insert Into (This.cCursorHost) (Host, schema, pwd, isEncrypted) ; + SELECT Host, schema, pwd, "1" As isEncrypted ; + from cXml + lnValid = Reccount('cXML') + + Use In cXml + Catch To loex + *!* Local loEx As Exception + AMESSAGEBOX('Mesaj: ' + loex.Message + CRLF + ; + 'Eroare nr: ' + Alltrim(Transform(loex.ErrorNo)) + CRLF + ; + 'Cod: ' + loex.LineContents + CRLF + 'Procedura: ' + loex.Procedure + CRLF + ; + 'Linia nr: ' + Alltrim(Transform(loex.Lineno)),0+16,'Eroare') + llSucces = .F. + Finally + Use In (Select('cXML')) + Endtry + + Else + Local laHost + Dimension laHost[1] + + lnLen = Alines(laHost, lcSecurityText) + + If lnLen > 0 + For i = 1 To lnLen + lcLinie = laHost[i] + + lcHost = Getwordnum(lcLinie, 1, ';') + lcSchema = Getwordnum(lcLinie, 2, ';') + lcPassword = Getwordnum(lcLinie, 3, ';') + lcMode = "0" && necriptat - security.txt + + If Empty(lcHost) Or Empty(lcSchema) Or Empty(lcPassword) + Loop + Endif + + lnValid = lnValid + 1 + Insert Into (This.cCursorHost) (Host, schema, pwd, isEncrypted) Values (lcHost, lcSchema, lcPassword, Iif(Empty(lcMode), '0', lcMode)) + Endfor + This.nTipCriptare = 0 + Endif + Endif + Endif + + Return llSucces + Endfunc + ********************************************************************* + Procedure citesteSetariSchema + Lparameters tnIdUtil + This.oOraSettingsController.initializeaza_firma(This.nId,tnIdUtil) + Endproc + ****************************************************************** + Function getoFirma + Return This.oOraSettingsController.getoFirma() + Endfunc + ****************************************************************** + Function getAn + Return This.oOraSettingsController.getoCalendar().an + Endfunc + ****************************************************************** + Function getLuna + Return This.oOraSettingsController.getoCalendar().luna + Endfunc + ********************************************************************* + Function getIdSucursala + Return This.oOraSettingsController.getIdSucursala() + Endfunc + ********************************************************************* + Function getIdMama + Return This.oOraSettingsController.getIdMama() + Endfunc + ********************************************************************* + Function getEMama + Return This.oOraSettingsController.getEMama() + Endfunc + ********************************************************************* + Procedure SetVariable + Lparameters tcSection, tcVarname, tuValue + Local lcSection, lcVarname, lcValue + + lcSection = Lower(Alltrim(tcSection)) + lcVarname = Lower(Alltrim(tcVarname)) + lcValue = Transform(tuValue) + SetIni(This.cIniFile, lcSection, lcVarname, lcValue) + + Endproc && SetVariable + ********************************************************************* + Procedure GetVariable + Lparameters tcSection, tcVarname + + Local lcSection, lcVarname, lcValue + + lcSection = Lower(Alltrim(tcSection)) + lcVarname = Lower(Alltrim(tcVarname)) + lcValue = GetIni(This.cIniFile, lcSection, lcVarname) + lcValue = Nvl(lcValue, '') + If Empty(lcValue) And File(This.cROAClientIniFile) + lcValue = GetIni(This.cROAClientIniFile, lcSection, lcVarname) + lcValue = Nvl(lcValue, '') + Endif + + Return lcValue + Endproc && GetVariable + ********************************************************************* + Function getIniFilePath + Return This.cIniFile + Endfunc + ********************************************************************* + *!* FUNCTION GetValue + *!* LPARAMETERS tcSetting + *!* + *!* LOCAL lcSetting, luValue + *!* lcSetting = "THIS." + tcSetting + *!* luValue = '' + *!* IF TYPE(lcSetting) # 'U' + *!* luValue = &lcSetting + *!* ENDIF + *!* RETURN luValue + *!* + *!* ENDFUNC + *!* ********************************************************************* + *!* PROCEDURE SetValue + *!* LPARAMETERS tcSetting, tuValue + *!* + *!* LOCAL lcSetting, luValue + *!* lcSetting = "THIS." + tcSetting + *!* luValue = tuValue + *!* IF TYPE(lcSetting) # 'U' + *!* &lcSetting = luValue + *!* ENDIF + *!* + *!* ENDPROC + *!* ********************************************************************* +Enddefine && settingsBaseController diff --git a/COMUN/programe/controllerecr.prg b/COMUN/programe/controllerecr.prg new file mode 100644 index 0000000..4cbbf23 --- /dev/null +++ b/COMUN/programe/controllerecr.prg @@ -0,0 +1,303 @@ + +*!* marius.mutu +*!* 12.07.2016 +*!* initializeaza_cai: citire cale bon din settings.ini [ecr]calebon, caleroaprint + +*!* 07.02.2024 +*!* bon2ecr : tratare discount, pret negativ/cantitate negativa = reducere valorica la casa de marcat + +*#INCLUDE COMUN.H +#IFNDEF COMUN_H + #DEFINE COMUN_H + + #DEFINE LF CHR(10) + #DEFINE CR CHR(10) + #DEFINE CRLF CHR(13) + CHR(10) + #DEFINE CTAB CHR(9) + + #DEFINE CT_INSUCCES -1 + #DEFINE CT_SUCCES 1 +#ENDIF + +* #INCLUDE MVC.H +#IFNDEF ROARETAIL_H + #DEFINE ROARETAIL_H + + #DEFINE RR_TIPCURSOR 1 + #DEFINE RR_TIPARRAY 2 + #DEFINE RR_TIPCOLLECTION 3 +#ENDIF + +Define Class oControllerEcr As Custom + cNrDispozitiv = [] + nNumarBon = 0 + nNumarTichete1 = 0 + nPretTichet1 = 0 + nNumarTichete2 = 0 + nPretTichet2 = 0 + nValoareTichete = 0 + nValoareCard = 0 + nValoareReducere= 0 + nProcentReducere= 0 + nValoareNumerar = 0 + nValoareTotal = 0 + cCursor = Null + cNumeFirma = Null + cFirma = Null + cUtilizator = Null + cNumeProgram = Null + cDescriere = Null + cCaleProgramIni = [C:\ROAPRINT\ROAPRINT.EXE] + cCaleFisierIni = [C:\ROA.BON] + cCaleProgram = Null + cCaleFisier = Null + tDataOra = {} + + cSchemaTip = [0;TIP N(2);DENUMIRE C(50);CANTITATE N(10,4);PRET N(10,4);UM C(10);COTATVA N(5,2);DEPARTAMENT N(2);] +********************************************************************************************************************************** + Procedure Init + This.cNumeProgram = gcNumeProgram + Endproc +********************************************************************************************************************************** + Procedure Reset + With This + .cNrDispozitiv = [] + .nNumarBon = 0 + .nNumarTichete1 = 0 + .nPretTichet1 = 0 + .nNumarTichete2 = 0 + .nPretTichet2 = 0 + .nValoareTichete = 0 + .nValoareCard = 0 + .nValoareReducere = 0 + .nProcentReducere = 0 + .nValoareNumerar = 0 + .nValoareTotal = 0 + .cCursor = Null + .cNumeFirma = Null + .tDataOra = {} + .cCaleProgram = .cCaleProgramIni + .cCaleFisier = .cCaleFisierIni + .cFirma = Null + .cUtilizator = Null + .cDescriere = Null + Endwith + Endproc +********************************************************************************************************************************** + Procedure initializeaza_util_firma + Lparameters tcUtilizator,tcNumeFirma,tcFirma,tcDescriere + This.cUtilizator = tcUtilizator + This.cNumeFirma = tcNumeFirma + This.cFirma = tcFirma + This.cDescriere = tcDescriere + Endproc +********************************************************************************************************************************** + Procedure initializeaza_date + Lparameters toHash + Local ltDataOra,lnNumarTichete1,lnNumarTichete2 + With This + lnNumarTichete1 = toHash.getValue("nNumarTichete1") + lnNumarTichete2 = toHash.getValue("nNumarTichete2") + ltDataOra = toHash.getValue("tDataOra") + + .cNrDispozitiv = toHash.getValue("cTip") + .cCursor = toHash.getValue("cCursor") + .nNumarBon = toHash.getValue("nNumarBon") + .nValoareNumerar = toHash.getValue("nValoareNumerar") + .nValoareCard = toHash.getValue("nValoareCard") + .nProcentReducere = toHash.getValue("nProcentReducere") + .nValoareReducere = toHash.getValue("nValoareReducere") + .nValoareTotal = toHash.getValue("nValoareTotal") + IF EMPTY(NVL(.cNumeFirma,[])) + .cNumeFirma = gcS + ENDIF + .tDataOra = Iif(Empty(Nvl(ltDataOra,{})),Datetime(),ltDataOra) + IF EMPTY(NVL(.cUtilizator,[])) + .cUtilizator = gcUsernameApp + ENDIF + IF EMPTY(NVL(.cFirma,[])) + .cFirma = gcFirma + ENDIF + If !Empty(Nvl(lnNumarTichete1,0)) + .nNumarTichete1 = lnNumarTichete1 + .nPretTichet1 = toHash.getValue("nPretTichet1") + Endif + If !Empty(Nvl(lnNumarTichete2,0)) + .nNumarTichete2 = lnNumarTichete2 + .nPretTichet2 = toHash.getValue("nPretTichet2") + Endif + If !Empty(Nvl(lnNumarTichete1,0)) Or !Empty(Nvl(lnNumarTichete2,0)) + .nValoareTichete = toHash.getValue("nValoareTichete") + Endif + + Endwith + Endproc +********************************************************************************************************************************** + Procedure initializeaza_cai + Local lcBonFile,lcRoaPrint, loEx + Store "" To lcBonFile,lcRoaPrint + DO case + CASE Type('goApp.oSettings') <> 'U' + lcBonFile = goApp.oSettings.GetValue("calebon") + lcRoaPrint = goApp.oSettings.GetValue("caleroaprint") + CASE TYPE('gcGeneralIniFile') = 'C' AND FILE(m.gcGeneralIniFile) + TRY + lcBonFile = getini(m.gcGeneralIniFile,"ecr","calebon") + lcRoaPrint = getini(m.gcGeneralIniFile,"ecr","caleroaprint") + + IF EMPTY(m.lcRoaPrint) + lcRoaPrint = Addbs(Left(gcAppPath,Rat("\",gcAppPath,2)-1)) + [ROAPRINT\ROAPRINT.EXE] + ENDIF + IF EMPTY(m.lcBonFile) AND DIRECTORY('C:\temp') + lcBonFile = [c:\temp\roa.bon] + ENDIF + CATCH TO loEx + lcRoaPrint = Addbs(Left(gcAppPath,Rat("\",gcAppPath,2)-1)) + [ROAPRINT\ROAPRINT.EXE] + ENDTRY + OTHERWISE + lcRoaPrint = Addbs(Left(gcAppPath,Rat("\",gcAppPath,2)-1)) + [ROAPRINT\ROAPRINT.EXE] + ENDCASE + + This.cCaleFisier = Iif(Empty(lcBonFile),This.cCaleFisierIni,lcBonFile) + This.cCaleProgram = Iif(Empty(lcRoaPrint),This.cCaleProgramIni,lcRoaPrint) + Endproc +********************************************************************************************************************************** + Procedure imprima + Lparameters toHash + Local lcCursor + lcCursor = toHash.GetValue("cCursor") + If !Empty(Nvl(lcCursor,[])) And Used(lcCursor) + With This + .initializeaza_date(toHash) + .initializeaza_cai() + .bon2ecr() + .Reset() + Endwith + Endif + Endproc +********************************************************************************************************************************** + Procedure bon2ecr + Local lcRun, lcCurentDir + Local lcSelect, lnSucces + Local loEx As Exception + Local lcBon, lcDirectoryCaleFisier + lcBon = "" + lnSucces = CT_INSUCCES + + lcSelect = Select() +*!* ROAX FIRMATEST 1;2;3; MARIUS A 12:00:00 AM 7/7/2006 +*!* 0;TIP N(2);DENUMIRE C(50);CANTITATE N(10,4);PRET N(10,4);UM C(10);COTATVA N(5,2);DEPARTAMENT N(2); + + lcBon = This.cNumeProgram + CTAB + Allt(This.cNumeFirma) + CTAB + Allt(this.cNrDispozitiv) + CTAB + Allt(This.cUtilizator) + CTAB + Ttoc(This.tDataOra) + ; + CTAB + allt(NVL(This.cFirma,[])) + CTAB + allt(NVL(This.cDescriere,[])) + CTAB + allt(str(NVL(This.nNumarBon,0))) + CRLF + lcBon = lcBon + This.cSchemaTip + CRLF +*!* modificare 15.07.2010 : am adaugat coloanele PROCENT si DISCOUNT +*!* (lcCursor) trebuie sa aiba coloanele : DENUMIRE C(100), UM C(10), CANT N(10,4), PRET N(18,4), DEPARTAMENT N(2), PROC_TVAV N(5,2), PROCENT N(5,2), DISCOUNT N(2) +*!* modificare 15.07.2010 +*!* Select (This.cCursor) +*!* Scan +*!* *!* 1;ARDEI GRAS CU LIPTAUER 120 GR;1;0.1;PORTIE;1.19;1; +*!* +*!* lcBon = lcBon + [1;] + Alltrim(DENUMIRE) + [;] + Alltrim(Transform(CANT)) + [;] + Alltrim(Transform(Pret)) + [;] + Alltrim(NVL(UM,[])) + [;] + Alltrim(Transform(PROC_TVAV)) + [;] + Alltrim(Transform(Nvl(DEPARTAMENT,1))) + [;] + CRLF +*!* *!* modificare 0.9.27 : NVL(um,[]) +*!* Endscan + lnCampuri = AFIELDS(laColoaneBon,This.cCursor) + If lnCampuri = 8 + Select (This.cCursor) + Scan + Do Case + Case discount = 1 && discount articol anterior + lcBon = lcBon + [3;] + Alltrim(DENUMIRE) + [;] + Alltrim(Transform(CANT)) + [;] + Alltrim(Transform(procent)) + [;] + Alltrim(Nvl(UM,[BUC])) + [;] + Alltrim(Transform(PROC_TVAV)) + [;] + Alltrim(Transform(Nvl(DEPARTAMENT,1))) + [;] + CRLF + Case discount = 2 && discount subtotal + lcBon = lcBon + [4;] + Alltrim(DENUMIRE) + [;] + Alltrim(Transform(CANT)) + [;] + Alltrim(Transform(procent)) + [;] + Alltrim(Nvl(UM,[BUC])) + [;] + Alltrim(Transform(PROC_TVAV)) + [;] + Alltrim(Transform(Nvl(DEPARTAMENT,1))) + [;] + CRLF + Case cant < 0 AND pret > 0 && discount valoric subtotal; cantitatea nu poate fi negativa la casa de marcat. o tratez ca o reducere valorica + lcBon = lcBon + [41;] + Alltrim(DENUMIRE) + [;] + [1] + [;] + Alltrim(Transform(ABS(cant*pret))) + [;] + Alltrim(Nvl(UM,[BUC])) + [;] + Alltrim(Transform(PROC_TVAV)) + [;] + Alltrim(Transform(Nvl(DEPARTAMENT,1))) + [;] + CRLF + Case pret < 0 AND cant > 0 && discount valoric subtotal; bon fiscal conform factura, se cumuleaza articolele, iar discount-ul global apare cu cantitate = 1 si sum(pret) negativ + lcBon = lcBon + [41;] + Alltrim(DENUMIRE) + [;] + [1] + [;] + Alltrim(Transform(ABS(cant*pret))) + [;] + Alltrim(Nvl(UM,[BUC])) + [;] + Alltrim(Transform(PROC_TVAV)) + [;] + Alltrim(Transform(Nvl(DEPARTAMENT,1))) + [;] + CRLF + Otherwise + lcBon = lcBon + [1;] + Alltrim(DENUMIRE) + [;] + Alltrim(Transform(CANT)) + [;] + Alltrim(Transform(Pret)) + [;] + Alltrim(Nvl(UM,[BUC])) + [;] + Alltrim(Transform(PROC_TVAV)) + [;] + Alltrim(Transform(Nvl(DEPARTAMENT,1))) + [;] + CRLF + Endcase + Endscan + Else + Select (This.cCursor) + Scan + *!* 1;ARDEI GRAS CU LIPTAUER 120 GR;1;0.1;PORTIE;1.19;1; + + lcBon = lcBon + [1;] + Alltrim(DENUMIRE) + [;] + Alltrim(Transform(CANT)) + [;] + Alltrim(Transform(Pret)) + [;] + Alltrim(Nvl(UM,[BUC])) + [;] + Alltrim(Transform(PROC_TVAV)) + [;] + Alltrim(Transform(Nvl(DEPARTAMENT,1))) + [;] + CRLF + *!* modificare 0.9.27 : NVL(um,[]) + Endscan + Endif + *!* modificare 15.07.2010 ^ +*!* 2;NUMERAR;0;0.5; +*!* 2;PROCENTDISCOUNT;0;10.50; + +*!* modificare ROARESTAURANT v 0.9.30 +*!* If This.nProcentReducere > 0 +*!* lcBon = lcBon + [2;PROCENTDISCOUNT;0;] + ALLTRIM(TRANSFORM(This.nProcentReducere)) + [;] + CRLF +*!* *!* lcBon = lcBon + [2;REDUCERE;0;] + Alltrim(Transform(This.nValoareReducere)) + [;] + CRLF +*!* Endif + IF This.nProcentReducere > 0 + lcBon = lcBon + [2;DISCOUNT;0;] + ALLTRIM(TRANSFORM(This.nValoareReducere)) + [;] + CRLF + lcBon = lcBon + [2;PROCENTDISCOUNT;0;] + ALLTRIM(TRANSFORM(This.nProcentReducere)) + [;] + CRLF + *!* lcBon = lcBon + [2;REDUCERE;0;] + Alltrim(Transform(This.nValoareReducere)) + [;] + CRLF + ENDIF +*!* modificare ROARESTAURANT v 0.9.30 ^ + + If This.nNumarTichete1 > 0 + lcBon = lcBon + [2;NUMARTICHETE1;0;] + Alltrim(Transform(This.nNumarTichete1)) + [;] + CRLF + lcBon = lcBon + [2;PRETTICHET1;0;] + Alltrim(Transform(This.nPretTichet1)) + [;] + CRLF + Endif + If This.nNumarTichete2 > 0 + lcBon = lcBon + [2;NUMARTICHETE2;0;] + Alltrim(Transform(This.nNumarTichete2)) + [;] + CRLF + lcBon = lcBon + [2;PRETTICHET2;0;] + Alltrim(Transform(This.nPretTichet2)) + [;] + CRLF + Endif + + If This.nValoareCard > 0 + lcBon = lcBon + [2;CARD;0;] + Alltrim(Transform(This.nValoareCard)) + [;] + CRLF + Endif + + If This.nValoareNumerar > 0 + lcBon = lcBon + [2;NUMERAR;0;] + Alltrim(Transform(This.nValoareNumerar)) + [;] + CRLF + Endif + + lcDirectoryCaleFisier = JUSTPATH(This.cCaleFisier) + IF !DIRECTORY(m.lcDirectoryCaleFisier) + TRY + MD (m.lcDirectoryCaleFisier) + CATCH + AMESSAGEBOX('Nu exista directorul ' + m.lcDirectoryCaleFisier + ' si nu s-a putut crea! Creati-l manual!',0+32,_screen.Caption) + ENDTRY + + ENDIF + Try + Strtofile(lcBon, This.cCaleFisier) + + If File(This.cCaleProgram) + lcCurentDir = Sys(5) + Curdir() + Cd Justpath(This.cCaleProgram) + + lcRun = Juststem(This.cCaleProgram) + [("] + This.cCaleFisier + [")] + llSucces = &lcRun + + Cd (lcCurentDir) + lnSucces = Iif(llSucces, CT_SUCCES, CT_INSUCCES) + Else + lnSucces = CT_INSUCCES + AMESSAGEBOX('Nu exista ' + This.cCaleProgram + ' !',16,'Eroare') + Endif + Catch To loEx + goLog.Log(m.lcBon) + goLog.log('Fisier bon this.cCaleFisier: ' + this.cCaleFisier + " exista: " + TRANSFORM(FILE(this.cCaleFisier))) + goLog.Log('This.cCaleProgram: ' + This.cCaleProgram) + + lnSucces = CT_INSUCCES + AMESSAGEBOX(loEx.Message + CRLF + loEx.Procedure + CRLF + loEx.LineContents + CRLF + loEx.LineContents + CRLF + ; + 'Fisier bon this.cCaleFisier: ' + this.cCaleFisier + " exista: " + TRANSFORM(FILE(this.cCaleFisier)),16,'Eroare') + Endtry + + Select (lcSelect) + + Return lnSucces + Endproc && bon2ecr +********************************************************************************************************************************** +Enddefine diff --git a/COMUN/programe/email.prg b/COMUN/programe/email.prg new file mode 100644 index 0000000..b305bc9 --- /dev/null +++ b/COMUN/programe/email.prg @@ -0,0 +1,1556 @@ +* Clasa oEmail +* oEmail > oThunderbirdEmailCmd +* oEmail > oCDO +* oEmail > oOutlook +* oEmail > oMapi + +* getoEmail: citeste optiunile de email din ROA\settings.ini si intoarce obiectul oMail +* loMail = getoEmail() +* loMail.cTo = 'test@test.ro' +* loMail.EmailSetAttachment('c:\factura.pdf') +* lnErrors = loMail.Send() +* if lnErrors > 0 +* messageb(loMail.GetErrorMessage) +* end if + +*!* 07.04.2020 +*!* Am adaugat clasa trimiterea de email prin client Mapi + + +#Define oAnonymous 0 && Perform no authentication (anonymous) +#Define oBasic 1 && Use the basic (clear text) authentication mechanism. + +* https://www.berezniker.com/content/pages/visual-foxpro/cdo-2000-class-sending-emails + +#Define cdoSendPassword "http://schemas.microsoft.com/cdo/configuration/sendpassword" +#Define cdoSendUserName "http://schemas.microsoft.com/cdo/configuration/sendusername" +#Define cdoSendUsingMethod "http://schemas.microsoft.com/cdo/configuration/sendusing" +#Define cdoSMTPAuthenticate "http://schemas.microsoft.com/cdo/configuration/smtpauthenticate" +#Define cdoSMTPConnectionTimeout "http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout" +#Define cdoSMTPServer "http://schemas.microsoft.com/cdo/configuration/smtpserver" +#Define cdoSMTPServerPort "http://schemas.microsoft.com/cdo/configuration/smtpserverport" +#Define cdoSMTPUseSSL "http://schemas.microsoft.com/cdo/configuration/smtpusessl" +#Define cdoURLGetLatestVersion "http://schemas.microsoft.com/cdo/configuration/urlgetlatestversion" +#Define cdoAnonymous 0 && Perform no authentication (anonymous) +#Define cdoBasic 1 && Use the basic (clear text) authentication mechanism. +#Define cdoSendUsingPort 2 && Send the message using the SMTP protocol over the network. +#Define cdoXMailer "urn:schemas:mailheader:x-mailer" + +#Define xlCellTypeVisible 12 +#Define xlSourceRange 4 +#Define xlHtmlStatic 0 + +#Define olFolderSentMail 5 +#Define olFormatHTML 2 + +#Define wdFormatOriginalFormatting 16 && Preserves original formatting of the pasted material + +#Define SUCCESS_SUCCESS 0 +#Define MAPI_DIALOG 8 +#Define MAPI_ORIG 0 +#Define MAPI_TO 1 +#Define MAPI_CC 2 +#Define MAPI_BCC 3 +*-------------------------------------------------------------------------------------------- +SET PATH to "D:\ROA\COMUNROA\;D:\ROA\ROAFACTURARE\COMUN\utile\email\;" ADDITIVE +TEXT TO lcExemplu NOSHOW +loEmail = getoEmail() +IF TYPE('loEmail') = 'O' + loEmail.cTo = 'mmarius28@gmail.com' + loEmail.cSubject = "Test email " + Ttoc(Datetime(), 3) + + loEmail.EmailSetAttachment('e:\2017-11-10-001.jpg') + loEmail.EmailSetAttachment('e:\3. fisa-voluntarului-lideri-de-unitate.docx') + lnErrors = loEmail.Send() + MESSAGEBOX(IIF(m.lnErrors > 0 , loEmail.GetErrorMessage(), 'Succes')) +ENDIF +ENDTEXT + +llThunderbirdCMD = .F. +llCDO = .T. +llOutlook = .F. +llMapi = .F. +Do Case + Case m.llThunderbirdCMD + loEmail = Createobject("oThunderbirdEmailCmd") + Case m.llCDO + loEmail = Createobject("oCDO") + Case m.llOutlook + loEmail = Createobject("oOutlook") + Case m.llMapi + loEmail = Createobject("oMapi") + Otherwise + Return +Endcase + +************************** +* CDO Specific +loEmail.cServer = "mail.romfast.ro" +loEmail.nServerPort = 25 +loEmail.cUserName = "" +loEmail.cPassword = "" +loEmail.lUseSSL = .F. +loEmail.nAuthenticate = Iif(Empty(loEmail.cUserName), oAnonymous, oBasic) +************************** + +************************** +* Thunderbird Specific +loEmail.EmailSetExePath('C:\Program Files (x86)\Mozilla Thunderbird\thunderbird.exe') +loEmail.EmailSetWait() +************************** + +************************** +* Outlook Specific +loEmail.EmailSetPreview(.T.) +loEmail.EmailSetDisplayWithoutInfo(.T.) +************************** + +loEmail.cFrom = "marius.mutu@romfast.ro" +loEmail.cTo = "mmarius28@gmail.com" +loEmail.cCC = "" +loEmail.cBCC = "" +loEmail.cSubject = "Test email " + Iif(m.llCDO, 'CDO', Iif(m.llOutlook, 'OUTLOOK', Iif(m.llThunderbirdCMD, 'THUNDERBIRDCMD', 'OTHERS'))) + " " + Ttoc(Datetime(), 3) +loEmail.cHtmlBody = "Test atasamente" && FILETOSTR('d:\roa\factura_emailbody_acn.html') + +loEmail.EmailSetAttachment('e:\2017-11-10-001.jpg') +loEmail.EmailSetAttachment('e:\3. fisa-voluntarului-lideri-de-unitate.docx') +loEmail.EmailSendWithoutAttachments(.F.) + +lnErrors = loEmail.Send() +Messagebox(Iif(m.lnErrors > 0, loEmail.GetErrorMessage(), 'Succes')) + + +* ----------------------------------- +* Citeste optiunile din settings.ini si intoarce un obiect oEmail configurat cu optiuni +Procedure getoEmail + + Local loMail As "oThunderbirdEmailCMD" Of "email.fxp" + Local lcBodyBorderouContent, lcBodyContent, lcBodyContentTemplate, lcBodyFile, lcBodyFileGeneral + Local lcBodyFileSchema, lcDisplayWithoutInfo, lcEmailBCC, lcEmailBCCGeneral, lcEmailBCCSchema + Local lcEmailCC, lcEmailCCGeneral, lcEmailCCSchema + Local lcEmailFrom, lcEmailFromGeneral, lcEmailFromSchema, lcEmailFromName, lcEmailFromNameGeneral, lcEmailFromNameSchema + Local lcEmailHtml, lcEmailMode, lcEmailPassword, lcEmailPort, lcEmailSSL + Local lcEmailServer, lcEmailUserName, lcExePath, lcPreview, lcSendWithoutAttachments + Local lcSettingsSample, lcSubjectBoderouTemplate, lcSubjectTemplate, lcSubjectTemplateGeneral + Local lcSubjectTemplateSchema, lcWait, llDisplayEmail, llDisplayWithoutInfo, llEmailSSL, llPreview + Local llSendWithoutAttachments, llWait, lnEmailPort + llDisplayEmail = .F. + lcBodyContent = "" + + TEXT To lcSettingsSample Noshow +[email] +mailserver=mail.server.ro +port=25 +username= +password= +emailapp=OUTLOOK +other_emailapp=OUTLOOK/CDO/THUNDERBIRDCMD/MAPI +ssl=0 + +[email_factura] +bodyfile=D:\ROA\factura_emailbody.html +bodyfile[_schema]=D:\ROA\factura_emailbody_schema.html +subject=Factura +from=office@server.ro +html=1 +cc= +bcc= +pdfsufix=factura +pdfpath=D:\ROA\PDF\ +pdfhasimage=0 +emailpreview=1 +displaysent=1 +cc= +bcc= + ENDTEXT + + lcEmailMode = goApp.ReadIni('email', 'emailapp') && THUNDERBIRDCMD/OUTLOOK/CDO/MAPI + If Empty(m.lcEmailMode) + lcEmailMode = 'CDO' + goApp.WriteIni('email', 'emailapp', m.lcEmailMode) + Endif + lcEmailMode = Upper(m.lcEmailMode) + + TEXT TO m.lcBodyContentTemplate TEXTMERGE noshow +Buna ziua, +
+
+Aveti atasata factura din pentru servicii prestate de <>. Va rugam sa o listati si sa o inregistrati in contabilitate. +
+
+Pentru sugestii de imbunatatire a raportarilor sau daca doriti sa le primiti pe alta adresa, dati un reply la acest email. +
+
+ +
+--
+Cu stima, +
+
+ ENDTEXT + + lcBodyFileSchema = goApp.ReadIni('email_factura', 'bodyfile_' + m.gcS) && bodyfile_ACN + lcBodyFileGeneral = goApp.ReadIni('email_factura', 'bodyfile') + lcBodyFile = Iif(!Empty(m.lcBodyFileSchema), m.lcBodyFileSchema, m.lcBodyFileGeneral) + + If Empty(m.lcBodyFile) Or !File(m.lcBodyFile) + If AMESSAGEBOX('Doriti sa creati un fisier pentru continutul emailului(DA) sau sa alegeti un fisier (NU)?', 4 + 32, _Screen.Caption) = 6 + lcBodyFile = Putfile('Fisier continut email', 'factura_emailbody.html', 'html') + If !Empty(m.lcBodyFile) + Strtofile(m.lcBodyContentTemplate, m.lcBodyFile) + Endif + Else + lcBodyFile = Getfile('HTML', 'Alegeti fisierul continut email:', 'Alege', 1, 'Continut email') + Endif + goApp.WriteIni('email_factura', 'bodyfile', m.lcBodyFile) + Endif + + If File(m.lcBodyFile) + lcBodyContent = Filetostr(m.lcBodyFile) + Endif + + If Empty(m.lcBodyContent) + lcBodyContent = m.lcBodyContentTemplate + Endif + + ********** + TEXT TO m.lcBodyContentTemplate TEXTMERGE noshow +Buna ziua, +
+
+Aveti atasat borderoul de facturi nr. din si documentele asociate pentru serviciile prestate de <>. +
+Va rugam sa listati facturile si sa le inregistrati in contabilitate. +

+De asemenea, va rugam sa dati un reply la acest email pentru confirmarea primirii facturilor. +
+
+ +
+--
+Cu stima, +
+
+ ENDTEXT + + lcBodyFileSchema = goApp.ReadIni('email_factura', 'bodyfile_borderou_' + m.gcS) && bodyfile_ACN + lcBodyFileGeneral = goApp.ReadIni('email_factura', 'bodyfile_borderou') + lcBodyFile = Iif(!Empty(m.lcBodyFileSchema), m.lcBodyFileSchema, m.lcBodyFileGeneral) + lcBodyBorderouContent = '' + If Empty(m.lcBodyFile) Or !File(m.lcBodyFile) + If AMESSAGEBOX('Doriti sa creati un fisier pentru continutul emailului borderou (DA) sau sa alegeti un fisier (NU)?', 4 + 32, _Screen.Caption) = 6 + lcBodyFile = Putfile('Fisier continut email', 'borderou_emailbody.html', 'html') + If !Empty(m.lcBodyFile) + Strtofile(m.lcBodyContentTemplate, m.lcBodyFile) + Endif + Else + lcBodyFile = Getfile('HTML', 'Alegeti fisierul continut email:', 'Alege', 1, 'Continut email') + Endif + goApp.WriteIni('email_factura', 'bodyfile_borderou', m.lcBodyFile) + Endif + + If File(m.lcBodyFile) + lcBodyBorderouContent = Filetostr(m.lcBodyFile) + Endif + + If Empty(m.lcBodyContent) + lcBodyBorderouContent = m.lcBodyContentTemplate + Endif + + ********** + + lcEmailFromSchema = goApp.ReadIni('email_factura', 'from_' + m.gcS) + lcEmailFromGeneral = goApp.ReadIni('email_factura', 'from') + lcEmailFrom = Iif(!Empty(m.lcEmailFromSchema), m.lcEmailFromSchema, m.lcEmailFromGeneral) + If Empty(m.lcEmailFrom ) + goApp.WriteIni('email_factura', 'from_' + m.gcS, 'test@server.ro') + Endif + + lcEmailFromNameSchema = goApp.ReadIni('email_factura', 'from_name_' + m.gcS) + lcEmailFromNameGeneral = goApp.ReadIni('email_factura', 'from_name') + lcEmailFromName = Iif(!Empty(m.lcEmailFromNameSchema), m.lcEmailFromNameSchema, m.lcEmailFromNameGeneral) + If Empty(m.lcEmailFromName) + goApp.WriteIni('email_factura', 'from_name_' + m.gcS, '') + Endif + + lcEmailCCSchema = goApp.ReadIni('email_factura', 'cc_' + m.gcS) + lcEmailCCGeneral = goApp.ReadIni('email_factura', 'cc') + lcEmailCC = Iif(!Empty(m.lcEmailCCSchema), m.lcEmailCCSchema, m.lcEmailCCGeneral) + If Empty(m.lcEmailCC ) + goApp.WriteIni('email_factura', 'cc_' + m.gcS, '') + Endif + + lcEmailBCCSchema = goApp.ReadIni('email_factura', 'bcc_' + m.gcS) + lcEmailBCCGeneral = goApp.ReadIni('email_factura', 'bcc') + lcEmailBCC = Iif(!Empty(m.lcEmailBCCSchema), m.lcEmailBCCSchema, m.lcEmailBCCGeneral) + If Empty(m.lcEmailBCC ) + goApp.WriteIni('email_factura', 'bcc_' + m.gcS, '') + Endif + + lcSubjectTemplateSchema = goApp.ReadIni('email_factura', 'subject_' + m.gcS) + lcSubjectTemplateGeneral = goApp.ReadIni('email_factura', 'subject') + lcSubjectTemplate = Iif(!Empty(m.lcSubjectTemplateSchema), m.lcSubjectTemplateSchema, m.lcSubjectTemplateGeneral) + If Empty(m.lcSubjectTemplate) + lcSubjectTemplate = 'Factura ' + goApp.WriteIni('email_factura', 'subject', m.lcSubjectTemplate) + Endif + *********** + lcSubjectTemplateSchema = goApp.ReadIni('email_factura', 'subject_boderou_' + m.gcS) + lcSubjectTemplateGeneral = goApp.ReadIni('email_factura', 'subject_borderou') + lcSubjectBorderouTemplate = Iif(!Empty(m.lcSubjectTemplateSchema), m.lcSubjectTemplateSchema, m.lcSubjectTemplateGeneral) + If Empty(m.lcSubjectBoderouTemplate) + lcSubjectBoderouTemplate = 'Borderou facturi nr. din - ' + goApp.WriteIni('email_factura', 'subject_borderou', m.lcSubjectBoderouTemplate) + Endif + *********** + + lcPreview = Alltrim(goApp.ReadIni('email_factura', 'preview')) + If Empty(m.lcPreview) + lcPreview = "1" + goApp.WriteIni('email_factura', 'preview', m.lcPreview) + Endif + llPreview = (m.lcPreview = "1") + + lcWait = Alltrim(goApp.ReadIni('email_factura', 'wait')) + If Empty(m.lcWait) + lcWait = "0" + goApp.WriteIni('email_factura', 'wait', m.lcWait) + Endif + llWait = (m.lcWait = "1") + + * Display the email window if empy(to, cc, subject) or return error + lcDisplayWithoutInfo = Alltrim(goApp.ReadIni('email_factura', 'display_without_info')) + If Empty(m.lcDisplayWithoutInfo) + lcDisplayWithoutInfo = "0" + goApp.WriteIni('email_factura', 'display_without_info', m.lcDisplayWithoutInfo) + Endif + llDisplayWithoutInfo = (m.lcDisplayWithoutInfo = "1") + + * Send email without attachments or return error + lcSendWithoutAttachments = Alltrim(goApp.ReadIni('email_factura', 'send_without_attachments')) + If Empty(m.lcSendWithoutAttachments) + lcSendWithoutAttachments = "0" + goApp.WriteIni('email_factura', 'send_without_attachments', m.lcSendWithoutAttachments) + Endif + llSendWithoutAttachments = (m.lcSendWithoutAttachments = "1") + + lcEmailHtml = goApp.ReadIni('email_factura', 'html') + If Empty(m.lcEmailHtml ) + goApp.WriteIni('email_factura', 'html', '1') + Endif + + lcEmailServer = goApp.ReadIni('email', 'mailserver') + If Empty(m.lcEmailServer) + goApp.WriteIni('email', 'mailserver', 'test.server.ro') + Endif + lcEmailPort = goApp.ReadIni('email', 'port') + If Empty(m.lcEmailPort) + goApp.WriteIni('email', 'port', '25') + Endif + lnEmailPort = Int(Val(m.lcEmailPort)) + + lcEmailUserName = goApp.ReadIni('email', 'username') + If Empty(m.lcEmailUserName) + goApp.WriteIni('email', 'username', 'test') + Endif + lcEmailPassword = goApp.ReadIni('email', 'password') + If Empty(m.lcEmailPassword ) + goApp.WriteIni('email', 'password', 'test') + Endif + lcEmailSSL = goApp.ReadIni('email', 'ssl') + If Empty(m.lcEmailSSL) + goApp.WriteIni('email', 'ssl', '0') + Endif + llEmailSSL = Int(Val(m.lcEmailSSL)) + + lcExePath = goApp.ReadIni('email', 'exepath') + If Empty(m.lcExePath) + goApp.WriteIni('email', 'exepath', '') + Endif + + Do Case + Case m.lcEmailMode = 'THUNDERBIRDCMD' + loMail = Newobject("oThunderbirdEmailCMD", "email.fxp") + Case m.lcEmailMode = 'OUTLOOK' + loMail = Newobject("oOutlook", "email.fxp") + Case m.lcEmailMode = 'MAPI' + loMail = Newobject("oMapi", "email.fxp") + Otherwise + loMail = Newobject("oCDO", "email.fxp") + Endcase + + ************************** + * CDO Specific + loMail.cServer = m.lcEmailServer + loMail.nServerPort = m.lnEmailPort + loMail.cUserName = m.lcEmailUserName + loMail.cPassword = m.lcEmailPassword + loMail.lUseSSL = m.llEmailSSL + loMail.nAuthenticate = Iif(Empty(loMail.cUserName), 0, 1) + + ************************** + * Thunderbird Specific + loMail.EmailSetExePath(m.lcExePath) + loMail.EmailSetWait(m.llWait) && wait and dont't advance to the next email until send is pressed + ************************** + + ************************** + * Outlook Specific + loMail.EmailSetPreview(m.llPreview) + loMail.EmailSetDisplayWithoutInfo(m.llDisplayWithoutInfo) + ************************** + + loMail.cFrom = m.lcEmailFrom + loMail.cFromName = m.lcEmailFromName + loMail.cCC = m.lcEmailCC + loMail.cBCC = m.lcEmailBCC + + loMail.cSubject = m.lcSubjectTemplate + loMail.cHtmlBody = m.lcBodyContent + + loMail.cBorderouSubject = m.lcSubjectBorderouTemplate + loMail.cBorderouBody = m.lcBodyBorderouContent + + loMail.EmailSendWithoutAttachments(m.llSendWithoutAttachments) + + Return loMail +Endproc && getoEmail + +* ----------------------------------- +* oEmail.Send +* > EmailSend +* >> EmailCreateCfg +* >> EmailSetConfiguration +* >> EmailSetHeader +* >> EmailSetParameters +Define Class oEmail As Custom + + Protected aErrors[1], nErrorCount, oMsg, oCfg, cXMailer + + nErrorCount = 0 + + * Message attributes + oMsg = Null + + cFrom = "" + cFromName = "" + cReplyTo = "" + cTo = "" + cCC = "" + cBCC = "" + cAttachment = "" && attachment file list separated by comma + nAttachments = 0 && number of attachment files + + cSubject = "" && subiect email factura + cHtmlBody = "" && continut email factura + cTextBody = "" + cHtmlBodyUrl = "" + + cBorderouSubject = "" && subiect email borderou + cBorderouBody = "" && continut email borderou + + cCharset = "" + + * Priority: Normal, High, Low or empty value (Default) + cPriority = "" + + * Configuration object fields values + oCfg = Null + cServer = "" + nServerPort = 25 + * Use SSL connection + lUseSSL = .F. + nConnectionTimeout = 30 && Default 30 sec's + nAuthenticate = oAnonymous + cUserName = "" + cPassword = "" + * Do not use cache for cHtmlBodyUrl + lURLGetLatestVersion = .T. + + * Optional. Creates your own X-MAILER field in the header + cXMailer = "" + + cEmailExePath = '' + cEmailProfile = '' + + lEmailWait = .F. && wait for the email to be sent, to advance to the next email + + lEmailPreview = .F. && preview each mail (default .F.) + lDisplayEmailWithoutInfo = .F. && display mail without from, to, subject, body, attachment + lCanDisplayEmailWithoutInfo = .T. && can the email without from, to, subject, body be displayed to user? (CDO does not display anything, for now) + + lFirstEmail = .T. && after the first email becomes .F., in case you want to do some things only the first time (eg: show the Sent folder in Outlook) + lSendWithoutAttachments = .F. && if email can be sent without attachment (Default = .F.) + + lReadReceipt = .T. && confirmare de citire + lPriority = .F. && prioritate + + Protected Procedure Init + This.ClearErrors() + Endproc + + + * Send message + * Return Number of Errors (0 = succes) + Procedure Send + + Local lnErrorCount + lnErrorCount = This.GetErrorCount() + If m.lnErrorCount > 0 + This.ClearMessage() + Return m.lnErrorCount + Endif + + With This + .ClearErrors() + .EmailCreateCfg() && abstract, to be implemented + Endwith + + * Check server, user, password + lnErrorCount = This.SetConfiguration() + + If m.lnErrorCount = 0 + * If email without info doesn't display to the user, add error + If !(This.lDisplayEmailWithoutInfo And This.lCanDisplayEmailWithoutInfo) + If Empty(This.cFrom) + This.AddError("ERROR : From is empty.") + Endif + If Empty(This.cSubject) + This.AddError("ERROR : Subject is empty.") + Endif + + If Empty(This.cTo) && And Empty(This.cCC) And Empty(This.cBCC) + * This.AddError("ERROR : To, CC and BCC are all empty.") + * Nu permit trimiterea de emailuri (cu facturi) fara TO. + * Altfel le trimite doar la CC/BCC, adica trimite copia inapoi. + * CC/BCC sunt fixe in settings.ini si nu ma intereseaza daca sunt sau nu completate + This.AddError("ERROR : To is empty.") + Endif + Endif + Endif && SetConfiguration + + lnErrorCount = This.GetErrorCount() + If m.lnErrorCount = 0 + This.EmailSetHeader() + This.EmailSetParameters() + Endif + + lnErrorCount = This.GetErrorCount() + If m.lnErrorCount = 0 + This.AddAttachments() + + * If email without attachment doesn't display to the user, add error + If !(This.lDisplayEmailWithoutInfo And This.lCanDisplayEmailWithoutInfo) + If !This.lSendWithoutAttachments And Empty(This.EmailGetAttachmentsNumber()) + This.AddError("ERROR : There are no attachments.") + Endif + Endif + Endif + + * Send Email + lnErrorCount = This.GetErrorCount() + If m.lnErrorCount = 0 + This.EmailSend() + lnErrorCount = This.GetErrorCount() + Endif + + This.lFirstEmail = .F. + This.ClearMessage() + + Return m.lnErrorCount + Endproc + + * Clear errors collection + Procedure ClearErrors() + This.nErrorCount = 0 + Dimension This.aErrors[1] + This.aErrors[1] = Null + Return This.nErrorCount + Endproc + + * Return # of errors in the error collection + Procedure GetErrorCount + Return This.nErrorCount + Endproc + + * Return error by index + Procedure Geterror + Lparameters tnErrorno + If tnErrorno <= This.GetErrorCount() + Return This.aErrors[tnErrorno] + Else + Return Null + Endif + Endproc + + * Return all error messages into one message + Procedure GetErrorMessage + Lparameters tlClearErrors + * tlClearErrors (optional): clear all error messages + + Local lcErrorMessage, lnError, lnErrors + lnErrors = This.GetErrorCount() + lcErrorMessage = '' + For lnError = 1 To m.lnErrors + lcErrorMessage = m.lcErrorMessage + This.Geterror(m.lnError) + '***' + Endfor + + * Clear errors + If m.tlClearErrors + This.ClearErrors() + Endif + + Return m.lcErrorMessage + Endproc && GetErrorMessage + + * Populate configuration object + Protected Procedure SetConfiguration + + * Validate supplied configuration values + If Empty(This.cServer) + This.AddError("ERROR: SMTP Server isn't specified.") + Endif + If Not Inlist(This.nAuthenticate, oAnonymous, oBasic) + This.AddError("ERROR: Invalid Authentication protocol ") + Endif + If This.nAuthenticate = oBasic ; + AND (Empty(This.cUserName) Or Empty(This.cPassword)) + This.AddError("ERROR: User name/Password is required for basic authentication") + Endif + + If This.GetErrorCount() > 0 + Return This.GetErrorCount() + Endif + + * Populate configuration objects + This.EmailSetConfiguration() + + Return This.GetErrorCount() + + Endproc + + *---------------------------------------------------- + * Add message to the error collection + Protected Procedure AddError + Lparameters tcErrorMsg + This.nErrorCount = This.nErrorCount + 1 + Dimension This.aErrors[This.nErrorCount] + This.aErrors[This.nErrorCount] = tcErrorMsg + Return This.nErrorCount + Endproc + + *---------------------------------------------------- + * Format an error message and add to the error collection + Protected Procedure AddOneError + Lparameters tcPrefix, tnError, tcMethod, tnLine + Local lcErrorMsg, laList[1] + If Inlist(tnError, 1427, 1429) + Aerror(laList) + lcErrorMsg = Transform(laList[7], "@0") + " " + laList[3] + Else + lcErrorMsg = Message() + Endif + This.AddError(tcPrefix + ":" + Transform(tnError) + " # " + ; + tcMethod + " # " + Transform(tnLine) + " # " + lcErrorMsg) + Return This.nErrorCount + Endproc + + *---------------------------------------------------- + * Simple Error handler. Adds VFP error to the objects error collection + Protected Procedure Error + Lparameters tnError, tcMethod, tnLine + This.AddOneError("ERROR: ", tnError, tcMethod, tnLine ) + Return This.nErrorCount + Endproc + + Procedure EmailSetProfile + Lparameters tcProfile + This.cEmailProfile = m.tcProfile + Endproc + + Procedure EmailSetExePath + Lparameters tcExePath + This.cEmailExePath = m.tcExePath + Endproc + + Procedure EmailSetWait + Lparameters tlWait + This.lEmailWait = m.tlWait + Endproc && EmailSetWait + + + *------------------------------------------------------- + * Add a file to the attachement list + Procedure EmailSetAttachment + Lparameters tcFile + If !Empty(m.tcFile) And Type('tcFile') = 'C' + This.cAttachment = This.cAttachment + Iif(!Empty(This.cAttachment), ",", "") + m.tcFile + Endif + Endproc && SetAttachment + + *------------------------------------------------------- + * Overwrite the attachement list with a list of files + Procedure EmailSetAttachments + Lparameters tcFiles + If !Empty(m.tcFiles) And Type('tcFiles') = 'C' + This.cAttachment = m.tcFiles + Endif + Endproc && SetAttachment + + *------------------------------------------------------- + * Empty the recipient list in subclass + Procedure EmailClearMessage + * To be implemented + Endproc && EmailClearMessage + + Procedure ClearMessage + This.EmailClearMessage() + This.cTo = "" + This.cHtmlBody = "" + This.cSubject = "" + This.cAttachment = "" + Endproc && ClearMessage + + Procedure EmailSendWithoutAttachments + Lparameters tlSendWithoutAttachments + This.lSendWithoutAttachments = m.tlSendWithoutAttachments + Endproc + + + Procedure AddAttachments + Local laList[1], laDummy[1] + Local lcAttachment, lnAttachment, lnAttachments + + * Process attachments + If Not Empty(This.cAttachment) + * Accepts comma or semicolon + lnAttachments = Alines(laList, This.cAttachment, [,], [;]) + For lnAttachment = 1 To m.lnAttachments + lcAttachment = Alltrim(laList[m.lnAttachment]) + * Ignore empty values + If Empty(laList[m.lnAttachment]) + Loop + Endif + + * Make sure that attachment exists + If Adir(laDummy, lcAttachment) = 0 + This.AddError("ERROR: Attachment not Found - " + lcAttachment) + Else + * The full path is required. + If Upper(lcAttachment) <> Upper(Fullpath(lcAttachment)) + lcAttachment = Fullpath(lcAttachment) + Endif + This.EmailAddAttachment(lcAttachment) + Endif + Endfor + Endif + Endproc && AddAttachments + + Procedure EmailAddAttachment + Lparameters tcAttachment + * To be implemented + Endproc && EmailAddAtachment + + Procedure EmailGetAttachmentsNumber + Return Getwordcount(This.cAttachment, [,]) + Endproc + + Procedure EmailSetPreview + Lparameters tlSetPreview + This.lEmailPreview = m.tlSetPreview + Endproc && EmailSetPreview + + Procedure EmailSetDisplayWithoutInfo + Lparameters tlSetDisplay + This.lDisplayEmailWithoutInfo = m.tlSetDisplay + Endproc && EmailSetDisplayWithoutInfo + + *------------------------------------------------------- + * Create configuration objects + Procedure EmailCreateCfg + * to be implemented + Endproc + + *------------------------------------------------------- + * Set mail header fields, if necessary. For now sets X-MAILER, if specified + Procedure EmailSetHeader + * to be implemented + Endproc + + *------------------------------------------------------- + * Set to, from, atachments.. + Procedure EmailSetParameters + * to be implemented + Endproc + + *------------------------------------------------------- + * Set server, username, password + * Return Number of Errors (0 = success) + Procedure EmailSetConfiguration() + * to be implemented + Return 0 + Endproc + + + *------------------------------------------------------- + * Send email + Procedure EmailSend + * to be implemented + Endproc + + *------------------------------------------------------- + * Add Error + Procedure EmailAddError + Lparameters tcErrorMessage + This.AddError("ERROR : " + Transform(m.tcErrorMessage)) + Endproc + + *---------------------------------------------------- + * + Protected Procedure cPriority_assign(tvVal) + * Check for incorrect values + If Inlist("~" + Proper(tvVal) + "~", "~High~", "~Normal~", "~Low~") Or Empty(tvVal) + This.cPriority = Proper(Alltrim(tvVal)) + Else + This.AddError("ERROR: Invalid value for cPriority property.") + Endif + Endproc + +Enddefine && oEmail + +*----------------------------------------------------------- +*!* oEmail.Send +*!* > EmailCreateCfg +*!* > EmailSetConfiguration +*!* > EmailSetHeader +*!* > EmailSetParameters +*!* > EmailSend +Define Class oThunderbirdEmailCmd As oEmail + Procedure EmailSend + + Local loRun As 'api_apprun' Of 'process.vcx' + Local lcBody, lcCommandLine, lcExePath, lcProfile + + lcProfile = This.cEmailProfile + lcExePath = This.cEmailExePath + lcBody = Iif(!Empty(This.cHtmlBody), This.cHtmlBody, This.cTextBody) + + If Empty(This.cHtmlBody) + lcBody = Strtran(m.lcBody, Chr(13) + Chr(10), [
], 1, 1000, 1) + lcBody = Strtran(m.lcBody, Chr(13), [
], 1, 1000, 1) + Else + lcBody = Strtran(m.lcBody, Chr(13) + Chr(10), [], 1, 1000, 1) + lcBody = Strtran(m.lcBody, Chr(13), [], 1, 1000, 1) + Endif + lcBody = Strtran(m.lcBody, [,], [,], 1, 1000, 1) + + lcCommandLine = ["] + m.lcExePath + ["] + ; + IIF(!Empty(m.lcProfile), [-profile "] + m.lcProfile + ["], []) + ; + [ -compose ] + ; + IIF(!Empty(This.cFrom), [from="] + This.cFrom + ["], []) + ; + IIF(!Empty(This.cTo), [,to="] + This.cTo + ["], []) + ; + IIF(!Empty(This.cCC), [,cc="] + This.cCC + ["], []) + ; + IIF(!Empty(This.cBCC), [,bcc="] + This.cBCC + ["], []) + ; + IIF(!Empty(This.cSubject), [,subject="] + This.cSubject + ["], []) + ; + IIF(!Empty(m.lcBody), [,body="] + m.lcBody + ["], []) + ; + IIF(!Empty(This.cAttachment), [,attachment='] + This.cAttachment + ['], []) + + If !'process.vcx' $ Lower(Set("Classlib")) + Set Classlib To 'D:\ROA\ROAACNPRO\COMUN\clase\process.vcx' Additive + Endif + + loRun = Createobject('api_apprun') + + If File (m.lcExePath) + loRun.iccommandline = m.lcCommandLine + If This.lEmailWait + loRun.launchappandwait() + Else + loRun.launchapp() + Endif + Else + This.EmailAddError('Thunderbird exe path ' + m.lcExePath + ' does not exist!') + Endif + + Endproc && EmailSend +Enddefine && ThunderbirdEmailCMD + +*----------------------------------------------------------- +*!* oEmail.Send +*!* > EmailCreateCfg +*!* > EmailSetConfiguration +*!* > EmailSetHeader +*!* > EmailSetParameters +*!* > EmailSend +Define Class oCDO As oEmail + + Protected oMsg, oCfg + + + * Message attributes + oMsg = Null + * Configuration object fields values + oCfg = Null + + Procedure Init + DoDefault() + Local loEx As Exception + + This.lCanDisplayEmailWithoutInfo = .T. + + * Optional. Creates your own X-MAILER field in the header + This.cXMailer = "VFP CDO 2000 mailer Ver 1.1.100 2010" + Endproc + *------------------------------------------------------- + Procedure EmailCreateCfg + Local loEx As Exception + Try + This.oMsg = Createobject("CDO.Message") + This.oCfg = Createobject("CDO.Configuration") + This.oMsg.Configuration = This.oCfg + Catch To loEx + This.AddError('ERROR: CDO Configuration could not be instantiated ' + Transform(loEx.ErrorNo) + ' ' + loEx.Message) + Endtry + Endproc + + *------------------------------------------------------- + * Populate configuration object + Procedure EmailSetConfiguration + With This.oCfg.Fields + * Send using SMTP server + .Item(cdoSendUsingMethod) = cdoSendUsingPort + .Item(cdoSMTPServer) = This.cServer + .Item(cdoSMTPServerPort) = This.nServerPort + .Item(cdoSMTPConnectionTimeout) = This.nConnectionTimeout + + .Item(cdoSMTPAuthenticate) = This.nAuthenticate + If This.nAuthenticate = cdoBasic + .Item(cdoSendUserName) = This.cUserName + .Item(cdoSendPassword) = This.cPassword + Endif + .Item(cdoURLGetLatestVersion) = This.lURLGetLatestVersion + .Item(cdoSMTPUseSSL) = This.lUseSSL + + .Update() + Endwith + Endproc + + *------------------------------------------------------- + * Set mail header fields, if necessary. For now sets X-MAILER, if specified + Procedure EmailSetHeader + Local loHeader + If Not Empty(This.cXMailer) + loHeader = This.oMsg.Fields + With loHeader + .Item(cdoXMailer) = This.cXMailer + .Update() + Endwith + Endif + Endproc + + *------------------------------------------------------- + Procedure EmailSetParameters + * Fill message attributes + Local lcMailHeader + With This.oMsg + + .From = This.cFrom + .ReplyTo = This.cReplyTo + + .To = This.cTo + .CC = This.cCC + .BCC = This.cBCC + .Subject = This.cSubject + + * Create HTML body from external HTML (file, URL) + If Not Empty(This.cHtmlBodyUrl) + .CreateMHTMLBody(This.cHtmlBodyUrl) + Endif + + * Send HTML body. Creates TextBody as well + If Not Empty(This.cHtmlBody) + .HtmlBody = This.cHtmlBody + Endif + + * Send Text body. Could be different from HtmlBody, if any + If Not Empty(This.cTextBody) + .TextBody = This.cTextBody + Endif + + If Not Empty(This.cCharset) + If Not Empty(.HtmlBody) + .HtmlBodyPart.Charset = This.cCharset + Endif + + If Not Empty(.TextBody) + .TextBodyPart.Charset = This.cCharset + Endif + Endif + + If Not Empty(This.cCharset) + .BodyPart.Charset = This.cCharset + Endif + + * Priority + If Not Empty(This.cPriority) + lcMailHeader = "urn:schemas:mailheader:" + .Fields(lcMailHeader + "Priority") = Lower(This.cPriority) + .Fields(lcMailHeader + "Importance") = Lower(This.cPriority) + Do Case + Case This.cPriority = "High" + .Fields(lcMailHeader + "X-Priority") = 1 && 5=Low, 3=Normal, 1=High + Case This.cPriority = "Normal" + .Fields(lcMailHeader + "X-Priority") = 3 && 5=Low, 3=Normal, 1=High + Case This.cPriority = "Low" + .Fields(lcMailHeader + "X-Priority") = 5 && 5=Low, 3=Normal, 1=High + Endcase + .Fields.Update() + ENDIF + + * by CChalom - Codes included to allow Receipt return and Priority + * http://support.microsoft.com/kb/302839 + IF This.lReadReceipt = .T. + This.oMsg.Fields("urn:schemas:mailheader:disposition-notification-to") = This.cTo + This.oMsg.Fields("urn:schemas:mailheader:return-receipt-to") = This.cTo + This.oMsg.Fields.Update() + ENDIF + + * Set priority if needed + IF This.lPriority + This.oMsg.Fields("Priority").Value = 1 && -1=Low, 0=Normal, 1=High + This.oMsg.Fields.Item("urn:schemas:mailheader:X-Priority") = 1 && -1=Low, 0=Normal, 1=High + This.oMsg.Fields.Item("urn:schemas:httpmail:importance") = 1 + This.oMsg.Fields.Update() + ENDIF + Endwith + Endproc + + Procedure EmailAddAttachment + Lparameters tcAttachment + + This.oMsg.AddAttachment(m.tcAttachment) + Endproc + + *------------------------------ + Procedure EmailClearMessage + This.oMsg = Null + This.oCfg = Null + Endproc && EmailClearMessage + + *---------------------------------------------------- + * Send message + Procedure EmailSend + SET STEP ON + * Daca nu sunt completate toate informatiile arat emailul utilizatorului + Local _goFP As "PreviewHelper" + Local llCancelled, llEmailDisplay, llEmailPreview, lnError, lcFoxy, lcDirMare, llCancelled + LOCAL loEx as Exception + + llEmailDisplay = This.lDisplayEmailWithoutInfo And (Empty(This.cTo) Or Empty(This.cSubject) Or (!This.lSendWithoutAttachments And Empty(This.EmailGetAttachmentsNumber()))) + llEmailPreview = This.lEmailPreview + + && Daca nu arat fiecare email, il trimit automat + If !(m.llEmailPreview Or m.llEmailDisplay) + If This.oMsg.Send() > 0 + For lnError = 1 To This.oMsg.GetErrorCount() + This.AddError(This.oMsg.Geterror(m.lnError)) + Endfor + Endif + Else + TRY + lcDirMare = Addbs(Left(m.gcAppPath, Rat("\", m.gcAppPath, 2) -1)) + lcFoxy = m.lcDirMare + 'COMUNROA\foxypreviewer.app' + IF FILE(m.lcFoxy) + Do (m.lcFoxy) + + _goFP = Createobject("PreviewHelper") + With This + *_goFP.cdestFile = m.lcImageFile + *!* m.loExHandler = Newobject('ExtensionHandler') + *!* _goFP._oExHandler = m.loExHandler + _goFP.lemailAUTO = .F. + _goFP.cemailTo = .cTO + _goFP.cemailCC = .cCC + _goFP.cemailBCC = .cBCC + _goFP.cemailSubject = .cSubject + _goFP.cEmailBody = .cHtmlBody + _goFP.cAttachments = This.cAttachment + ENDWITH + llCancelled = .F. + Do Form pr_sendmail2.scx To m.llCancelled Name _goFP._oEmailSheet + IF m.llCancelled + This.AddError('CDO Email Preview Utilizatorul a anulat emailul') + ELSE + With This + .cTo = _goFP.cemailTo && "vfpimaging@hotmail.com" && "somebody@otherdomain.com, somebodyelse@otherdomain.com" + .cCC = _goFP.cEmailCC + .cBCC = _goFP.cEmailBCC + .cSubject = _goFP.cemailSubject && "FOXYPREVIEWER email" + .cReplyTo = _goFP.cEmailReplyTo + + If Empty(_goFP.cEmailBody) + _goFP.cEmailBody = "
" + Endif + + If Upper(Left(_goFP.cEmailBody, 6)) == "" + .cHtmlBody = _goFP.cEmailBody + Else + .cTextBody = _goFP.cEmailBody + Endif + + * Curat lista de atasamente anterioara si adaug atasamentele din formular + .cAttachment = _goFP._cAttachment + + .lReadReceipt = _goFP.lReadReceipt + .lPriority = _goFP.lPriority + Endwith + + This.EmailSetParameters() + This.oMsg.Attachments.DeleteAll() + This.AddAttachments() + + If This.oMsg.Send() > 0 + For lnError = 1 To This.oMsg.GetErrorCount() + This.AddError(This.oMsg.Geterror(m.lnError)) + Endfor + ENDIF + ENDIF && llCancelled + ELSE + This.AddError('CDO Email Preview ' + m.lcFoxy + ' nu exista' + ' ' + loEx.Message + ' Linia: ' + TRANSFORM(loEx.Lineno) + ' Cod: ' + loEx.LineContents) + ENDIF && FILE(m.lcFoxy) + Catch To loEx + This.AddError('CDO Email Preview ' + ' ' + loEx.Message + ' Linia: ' + TRANSFORM(loEx.Lineno) + ' Cod: ' + loEx.LineContents) + *Messagebox(loEx.Message, 0 + 48, _Screen.Caption) + Endtry + Endif && m.llEmailPreview Or m.llEmailDisplay + Endproc && EmailSend + +Enddefine && oCDO + +Define Class oOutlook As oEmail + oOutlook = Null + oMailItem = Null + + Procedure Init + DoDefault() + Local loEx As Exception + Try + This.oOutlook = Createobject('outlook.application') + Catch To loEx + This.AddError('ERROR: OUTLOOK could not be instantiated ' + Transform(loEx.ErrorNo) + ' ' + loEx.Message) + Endtry + + Endproc && Init + ************************************ + Procedure EmailCreateCfg + Local loEx As Exception + + If !Isnull(This.oOutlook) + Try + * Create Mail Item + This.oMailItem = This.oOutlook.CreateItem(0) + Catch To loEx + This.AddError('ERROR: OUTLOOK MailItem could not be instantiated ' + Transform(loEx.ErrorNo) + ' ' + loEx.Message) + Endtry + Endif + Endproc && EmailCreateCfg + + ************************************ + Procedure EmailSetParameters + Local lcAttachment, lnAttachment + With This.oMailItem + .To = This.cTo + .Subject = This.cSubject + .CC = This.cCC + .BCC = This.cBCC + .BodyFormat = olFormatHTML + .HtmlBody = This.cHtmlBody + Endwith + Endproc && EmailSetParameters + + Procedure EmailAddAttachment + Lparameters tcAttachment + + This.oMailItem.Attachments.Add(m.tcAttachment) + Endproc + + *------------------------------ + Procedure EmailClearMessage + This.oMailItem = Null + Endproc && EmailClearMessage + + *------------------------------ + Procedure EmailSend + Local llEmailDisplay, llEmailPreview, loDefaultFolder, loMailItem, loNameSpace + loMailItem = This.oMailItem + * Display Sent folder only for the first email, so that the emails will get send + If This.lFirstEmail + loNameSpace = This.oOutlook.getnamespace('MAPI') + loDefaultFolder = loNameSpace.GetDefaultFolder(olFolderSentMail) && SentMail + loDefaultFolder.Display() + Endif + + * Daca nu sunt completate toate informatiile arat emailul utilizatorului + llEmailDisplay = This.lDisplayEmailWithoutInfo And (Empty(This.cTo) Or Empty(This.cSubject) Or (!This.lSendWithoutAttachments And Empty(This.EmailGetAttachmentsNumber()))) + llEmailPreview = This.lEmailPreview + + && Daca nu arat fiecare email, il trimit automat + If m.llEmailPreview Or m.llEmailDisplay + loMailItem.Display + Else + loMailItem.Send + Endif + + This.oMailItem = Null + loMailItem = "" + Endproc && EmailSend + +Enddefine &&oOutlook + +*--------------------------------- +Define Class oMapi As oEmail + snd = .F. + rcp = .F. + att = .F. + + *------------------------------------------------------- + Procedure EmailCreateCfg + Local loEx As Exception + Try + This.snd = Createobject("TRecipients") + This.rcp = Createobject("TRecipients") + This.att = Createobject("TAttachments") + Catch To loEx + This.AddError('ERROR: Mapi Configuration could not be instantiated ' + Transform(loEx.ErrorNo) + ' ' + loEx.Message) + Endtry + Endproc + + *------------------------------------------------------- + Procedure EmailSetParameters + Local lcRecipient, lnRecipient, lnRecipients + + This.AddSender(This.cFromName, This.cFrom) + This.AddRecipient(This.cTo, MAPI_TO) + This.AddRecipient(This.cCC, MAPI_CC) + This.AddRecipient(This.cBCC, MAPI_BCC) + Endproc + + Procedure AddSender(lcSndName, lcSndAddr) + Local lnClass + lnClass = MAPI_ORIG + If Type("lcSndAddr") <> "C" + lcSndAddr = lcSndName + Endif + + This.snd.AppendItem(m.lnClass, lcSndName, lcSndAddr) + Endproc && AddSender + + * --------------------------- + * Fill To, CC, BCC + Procedure AddRecipient + Lparameters tcRecipientList, tnClass + * tcRecipientpList: comma delimited list of recipients + * tnClass: MAPI_TO, MAPI_CC, MAPI_BCC + + Local lcRecipientAddress, lcRecipientList, lcRecipientName, lnClass, lnRecipient, lnRecipients + lnClass = Iif(Type('tnClass') = 'N', m.tnClass, MAPI_TO) + lcRecipientList = Iif(Type('tcRecipientList') = 'C', m.tcRecipientList, '') + lnRecipients = Getwordcount(m.lcRecipientList, [,]) + For lnRecipient = 1 To m.lnRecipients + lcRecipientAddress = Getwordnum(m.lcRecipientList, m.lnRecipient, [,]) + lcRecipientName = m.lcRecipientAddress + This.rcp.AppendItem(m.lnClass, m.lcRecipientName, m.lcRecipientAddress) + Endfor + Endproc && AddRecipient + + Procedure EmailAddAttachment + Lparameters tcAttachment + Return This.att.AppendItem(m.tcAttachment) + Endproc + + Procedure EmailClearMessage + This.rcp.ClearItems + This.att.ClearItems + Endproc && EmailClearMessage + + + *---------------------------------------------------- + * Send message + Procedure EmailSend + + Local lcMapiMessage, loSubject, loBody, ii, lnResult, lcStoredPath + loSubject = Createobject("PChar", This.cSubject) + loBody = Createobject("PChar", This.cHtmlBody) + lcStoredPath = Sys(5) + Sys(2003) + + * assembling MapiMessage structure + lcMapiMessage = num2dword(0) + ; + num2dword(loSubject.getAddr()) + num2dword(loBody.getAddr()) + ; + num2dword(0) + num2dword(0) + num2dword(0) + num2dword(0) + ; + num2dword(This.snd.getAddr()) + ; + num2dword(This.rcp.ItemCount) + num2dword(This.rcp.getAddr()) + ; + num2dword(This.att.ItemCount) + ; + num2dword(Iif(This.att.ItemCount = 0, 0, This.att.getAddr())) + + Declare Integer MAPISendMail In mapi32; + INTEGER lhSession, Integer ulUIParam, String @lpMessage, ; + INTEGER flFlags, Integer ulReserved + + + * Daca nu sunt completate toate informatiile arat emailul utilizatorului + llEmailDisplay = This.lDisplayEmailWithoutInfo And (Empty(This.cTo) Or Empty(This.cSubject) Or (!This.lSendWithoutAttachments And Empty(This.EmailGetAttachmentsNumber()))) + llEmailPreview = This.lEmailPreview + Set Step On + && Daca nu arat fiecare email, il trimit automat + If m.llEmailPreview Or m.llEmailDisplay + lnResult = MAPISendMail(0, 0, @lcMapiMessage, MAPI_DIALOG, 0) + Else + lnResult = MAPISendMail(0, 0, @lcMapiMessage, 0, 0) + Endif + If (m.lnResult <> 0) + This.AddError("ERROR : Message not sent.") + Endif + + Set Default To (lcStoredPath) + Return (lnResult = 0) && sendmessage + Endproc + +Enddefine && oMapi + +*------------------------------------------------------ +* oMapi helper classes +Define Class TRecipients As Custom && array of recipients + ItemCount = 0 + Dimen arrRecip[1] + RcpsBuffer = .F. + + Procedure Destroy + This.UnlockData + This.ClearItems + + Procedure getAddr + This.LockData + Return This.RcpsBuffer.getAddr() + + Procedure LockData + This.UnlockData + + Local lcBuffer, ii + lcBuffer = "" + For ii = 1 To This.ItemCount + lcBuffer = lcBuffer + This.arrRecip[ii].GetValue() + Endfor + This.RcpsBuffer = Createobject("PChar", lcBuffer) + + Procedure UnlockData + If Type("THIS.RcpsBuffer") = "O" + This.RcpsBuffer.ReleaseString + This.RcpsBuffer = .F. + Endif + + Procedure AppendItem(lnClass, lcName, lcAddress) + This.ItemCount = This.ItemCount + 1 + Dimen This.arrRecip[THIS.ItemCount] + This.arrRecip[THIS.ItemCount] = Createobject("TRecipient", lnClass, lcName, lcAddress) + + Procedure ClearItems + Local ii + For ii = 1 To This.ItemCount + This.arrRecip[ii].ReleaseRecipient + This.arrRecip[ii] = .F. + Endfor + This.ItemCount = 0 + Dimen This.arrRecip[1] +Enddefine && trecipients + +Define Class TRecipient As Custom + RcpClass = 0 && 0-sender, 1-primary rec., 2-copy rec., 3-blind copy rec. + RcpName = .F. + RcpAddress = .F. + RcpBuffer = "" + + Procedure Init(lnClass, lcName, lcAddress) + This.InitRecipient(lnClass, lcName, lcAddress) + + Procedure Destroy + This.ReleaseRecipient + + Procedure ReleaseRecipient + If Type("THIS.RcpAddress") = "O" + This.RcpAddress.ReleaseString + This.RcpAddress = .F. + Endif + If Type("THIS.RcpName") = "O" + This.RcpName.ReleaseString + This.RcpName = .F. + Endif + + Procedure InitRecipient(lnClass, lcName, lcAddress) + This.ReleaseRecipient + This.RcpName = Createobject("PChar", lcName) + This.RcpAddress = Createobject("PChar", lcAddress) + + This.RcpBuffer = num2dword(0) + ; + num2dword(lnClass) + ; + num2dword(This.RcpName.getAddr()) + ; + num2dword(This.RcpAddress.getAddr()) + ; + num2dword(0) + num2dword(0) + + Function GetValue + Return This.RcpBuffer +Enddefine && trecipient + +Define Class TAttachments As Custom + ItemCount = 0 + Dimen arrAttach[1] + AttsBuffer = .F. + + Procedure Destroy + This.UnlockData + This.ClearItems + + Procedure getAddr + This.LockData + Return This.AttsBuffer.getAddr() + + Procedure LockData + This.UnlockData + + Local lcBuffer, ii + lcBuffer = "" + For ii = 1 To This.ItemCount + lcBuffer = lcBuffer + This.arrAttach[ii].GetValue() + Endfor + This.AttsBuffer = Createobject("PChar", lcBuffer) + + Procedure UnlockData + If Type("THIS.AttsBuffer") = "O" + This.AttsBuffer.ReleaseString + This.AttsBuffer = .F. + Endif + + Procedure AppendItem(lcFilename) + If File(lcFilename) + This.ItemCount = This.ItemCount + 1 + Dimen This.arrAttach[THIS.ItemCount] + + This.arrAttach[THIS.ItemCount] = ; + CREATEOBJECT("TAttachment", lcFilename, This.ItemCount) + + Return Type("THIS.arrAttach[THIS.ItemCount]") = "O" + Else + Return .F. + Endif + + Procedure ClearItems + Local ii + For ii = 1 To This.ItemCount + This.arrAttach[ii].ReleaseAttachment + This.arrAttach[ii] = .F. + Endfor + This.ItemCount = 0 + Dimen This.arrAttach[1] +Enddefine && tattachments + +Define Class TAttachment As Custom + AttBuffer = "" + AttFilename = .F. + + Procedure Init(lcFilename, nPosition) + This.InitAttachment(m.lcFilename, m.nPosition) + + Procedure Destroy + This.ReleaseAttachment + + Procedure InitAttachment(lcFilename, nPosition) + *!* typedef struct { + *!* ULONG ulReserved; + *!* ULONG flFlags; + *!* ULONG nPosition; + *!* LPTSTR lpszPathName; + *!* LPTSTR lpszFileName; + *!* LPVOID lpFileType; + *!* } MapiFileDesc, FAR *lpMapiFileDesc; + + This.ReleaseAttachment + This.AttFilename = Createobject("PChar", lcFilename) + + This.AttBuffer = num2dword(0) + num2dword(0) + ; + num2dword(m.nPosition) + ; + num2dword(This.AttFilename.getAddr()) + ; + num2dword(0) + num2dword(0) + + Procedure ReleaseAttachment + If Type("THIS.AttFilename") = "O" + This.AttFilename.ReleaseString + This.AttFilename = .F. + Endif + + Function GetValue + Return This.AttBuffer +Enddefine && tattachment + +Define Class PChar As Custom + Protected Hmem + + Procedure Init(lcString) + This.Hmem = 0 + This.setValue(lcString) + + Procedure Destroy + This.ReleaseString + + Function getAddr && returns a pointer to the string + Return This.Hmem + + Function GetValue && returns string value + Local lnSize, lcBuffer + lnSize = This.getAllocSize() + lcBuffer = Space(lnSize) + + If This.Hmem <> 0 + Declare RtlMoveMemory In kernel32 As MemToStr; + STRING @, Integer, Integer + = MemToStr(@lcBuffer, This.Hmem, lnSize) + Endif + Return lcBuffer + + Function getAllocSize && returns allocated memory size (string length) + Declare Integer GlobalSize In kernel32 Integer Hmem + Return Iif(This.Hmem = 0, 0, GlobalSize(This.Hmem)) + + Procedure setValue(lcString) && assigns new string value + #Define GMEM_FIXED 0 + This.ReleaseString + + Declare Integer GlobalAlloc In kernel32 Integer, Integer + Declare RtlMoveMemory In kernel32 As StrToMem; + INTEGER, String @, Integer + + Local lnSize + lcString = lcString + Chr(0) + lnSize = Len(lcString) + This.Hmem = GlobalAlloc(GMEM_FIXED, lnSize) + If This.Hmem <> 0 + = StrToMem(This.Hmem, @lcString, lnSize) + Endif + + Procedure ReleaseString && releases allocated memory + If This.Hmem <> 0 + Declare Integer GlobalFree In kernel32 Integer + = GlobalFree(This.Hmem) + This.Hmem = 0 + Endif +Enddefine && pchar + +Function num2dword(lnValue) + #Define m0 256 + #Define m1 65536 + #Define m2 16777216 + Local b0, b1, b2, b3 + b3 = Int(lnValue / m2) + b2 = Int((lnValue - b3 * m2) / m1) + b1 = Int((lnValue - b3 * m2 - b2 * m1) / m0) + b0 = Mod(lnValue, m0) + Return Chr(b0) + Chr(b1) + Chr(b2) + Chr(b3) +Endfunc && num2dword \ No newline at end of file diff --git a/COMUN/programe/exportare.prg b/COMUN/programe/exportare.prg new file mode 100644 index 0000000..7a6d9d8 --- /dev/null +++ b/COMUN/programe/exportare.prg @@ -0,0 +1,51 @@ +LPARAMETERS tabel, initial, final +LOCAL nrc, i, c +STORE 0 TO nrc, i +STORE '' TO c + +lcDir = ADDBS(gcTempPath) +CD (lcDir) + + +exista_excel=.F. + +initial = ','+initial+',' &&Pentru a recunoste coloanele' +final = ','+final+',' &&---||--- + +nrc = OCCURS(',', '&initial') +nrc=nrc-1 && scade vircula din fata + +LOCAL ARRAY c_initial(nrc) +LOCAL ARRAY c_final(nrc) + +FOR i = 1 TO nrc + n = AT(',', '&initial', i) + n2 =AT(',', '&initial', i+1) + c_Initial[i] = SUBSTR('&initial', n+1, n2-n-1) + *MESSAGEBOX(c_initial[i]) + n = AT(',', '&final', i) + n2 =AT(',', '&final', i+1) + c_final[i] = SUBSTR('&final', n+1, n2-n-1) + *MESSAGEBOX(c_final[i]) +ENDFOR + +FOR i=1 TO nrc + IF i=nrc + c=c+c_initial[i]+' as '+c_final[i] + ELSE + c=c+c_initial[i]+' as '+c_final[i]+',' + ENDIF +ENDFOR + +calea_fis = PUTFILE('Nume fisier:', 'Foaie_Excel', 'XLS') +IF EMPTY(calea_fis) && Esc pressed + RETURN +ENDIF + +SELECT &c FROM &tabel INTO CURSOR cur +SELECT cur +EXPORT TO (calea_fis) TYPE XL5 + +OPEN_default_app(calea_fis) +USE IN cur + diff --git a/COMUN/programe/filebringer.prg b/COMUN/programe/filebringer.prg new file mode 100644 index 0000000..2c5e448 --- /dev/null +++ b/COMUN/programe/filebringer.prg @@ -0,0 +1,209 @@ +Function BringFile + Lparameters cFilePath,lcprogram,tcLocalFile + *!* modificare ROARESTAURANT v 1.0.0 + LOCAL lnTransferTotal + lnTransferTotal = -1 + *!* modificare ROARESTAURANT v 1.0.0 ^ + If !Empty(tcLocalFile) + lcLocalFile=tcLocalFile + Else + If At("_",lcprogram)#0 + lccurrentUR=Substr(lcprogram,At("_",lcprogram)+1) + * MESSAGEBOX(lccurrentUR) + Else + lccurrentUR=lcprogram + Endif + mypath=GetIniPath() + mypath=Substr(mypath,1,Rat("\",mypath,1)) + + Try + Md mypath+lccurrentUR+"\" + Catch To loex + Endtry + lcLocalFile=Alltrim(GetCurrentTempPath(lcprogram)) + Endif + * Do Form waitwindow Name frmwait + polog.Log("Fisierul care trebuie descarcat este "+cFilePath,Program()) + If (Occurs('/', cFilePath)>0) + *WAIT WINDOW AT 10,10 NOWAIT "Se downloadeaza fisierul..." + polog.Log([Createobject("wwCodeUpdate")],Program()) + + loUpdate=Createobject("wwCodeUpdate") + *!* loUpdate.cExeFile = lcprogram+".exe" + + If Isnull(loUpdate.oHTTP) + loIP = loUpdate.CreateHTTPClient() + Else + loIP = loUpdate.oHTTP + Endif + + loIP.lShowDialog = .T. + + loUrl = loIP.InternetCrackUrl(cFilePath) + + If Isnull(loUrl) + Return .F. + Endif + + myinihandler=Createobject("iniaccess") + loIP.nhttpport=Val(loUrl.cPort) + If loIP.HTTPConnect(loUrl.cServer,myinihandler.getUsername(),myinihandler.getPassword(),; + IIF(Lower(loUrl.cProtocol)="https",.T.,.F.)) # 0 + loUpdate.SetError(loIP.cErrorMsg) + Release myinihandler + polog.Log([loIP.HTTPConnect(] + loUrl.cServer + [)#0],Program()) + Return .F. + Else + Release myinihandler + + lcTFile = lcLocalFile + lcData = "" + lnSize = 0 + polog.Log([loIP.HTTPGetEx(] + Trim(loUrl.cPath) + [)],Program()) + If(loIP.HTTPGetEx( Trim(loUrl.cPath),@lcData,@lnSize,,lcTFile)=0) + + polog.Log([lnSize=] + alltrim(transform(m.lnSize)),Program()) + TransferHandlerResult=lnSize + else + polog.Log([loIp.cerrormsg=] + alltrim(transf(loIp.nerror)) + ' ' + alltrim(transform(nvl(loIp.cerrormsg,''))),Program()) + TransferHandlerResult=0 + endif + polog.Log([lnSize=] + alltrim(transform(m.lnSize)),Program()) + polog.Log([loIP.nContentSize=] + alltrim(transform(loIP.nContentSize)),Program()) + If lnSize#loIP.nContentSize + TransferHandlerResult=0 + Endif + + + Endif + + + + * TransferHandlerResult= DownLoadURL(cFilePath,cLocalFile,"FeedBack",1000,.T.) + polog.Log("TransferHandlerResult = "+Alltrim(Transform(TransferHandlerResult)),Program()) + Else + *WAIT WINDOW NOWAIT "Se copiaza fisierul..." + *!* If Left(cFilePath,1)="\" + *!* cFilePath=Right(cFilePath,Len(cFilePath)-1) + *!* Endif + *!* cFilePath=lcNetworkPath+cFilePath + If(PathFileExists(cFilePath)=1) + scomp=Set('comp') + Set Compatible On + nsize=Fsize(cFilePath) + Set Compatible &scomp + loProgressForm = Createobject("wwProgressForm") + loProgressForm.SetCaption("Se descarc actualizarea...") + *!* loProgressForm.ShowCancelButton() + loProgressForm.Show() + *!* IF loProgressForm.lCancelled + loProgressForm.SetDescription("S-au primit de la "+Justpath(cFilePath)+":" +Chr(13)+; + "0 din "+Ltrim(Transform(nsize,"999,999,999"))+ " bytes") + *!* THIS.oProgressForm.SetDescription("Received from " + THIS.cServer + ":" +CHR(13) +; + *!* LTRIM( TRANSFORM(lnbytes,"999,999,999") ) + " of " +; + *!* LTRIM(TRANSFORM(THIS.nContentSize,"999,999,999"))+ " bytes") + *!* THIS.oProgressForm.SetProgress(lnbytes/THIS.nContentSize * 100) + loProgressForm.SetProgress(0) + loProgressForm.SetDescription("S-au primit de la "+Justpath(cFilePath)+":" +Chr(13)+; + LTRIM(Transform(nsize*0.05,"999,999,999"))+" din "+Ltrim(Transform(nsize,"999,999,999"))+ " bytes") + loProgressForm.SetProgress(5) + TransferHandlerResult= CopyFile(cFilePath, lcLocalFile, .F.) + loProgressForm.SetDescription("S-au primit de la "+Justpath(cFilePath)+":" +Chr(13)+; + LTRIM(Transform(nsize,"999,999,999"))+" din "+Ltrim(Transform(nsize,"999,999,999"))+ " bytes") + loProgressForm.SetProgress(100) + loProgressForm = .F. + Else + *MESSAGEBOX("Update-ul nu a fost gasit la locatia XML-ului") + polog.Log("A incercat cu CopyFile si nu a mers = ",Program()) + TransferHandlerResult=0 + Endif + + Endif + * frmwait.Release() + *WAIT CLEAR + If (TransferHandlerResult!=0 And TransferHandlerResult!=-1) +*!* modificare ROARESTAURANT v 1.0.0 +*!* If gTransferTotal!=-1 + IF lnTransferTotal != -1 + If TransferHandlerResult=gTransferTotal + lnTransferTotal = -1 +*!* gTransferTotal=-1 + Return .T. + Else + lnTransferTotal = -1 +*!* gTransferTotal=-1 + polog.Log("TransferHandlerresult != TransferTotal ",Program()) + Return .F. + Endif + Endif +*!* modificare ROARESTAURANT v 1.0.0 ^ + + Return .T. + Else + If TransferHandlerResult=0 + polog.Log("TransferHandlerresult = 0",Program()) + Endif + If TransferHandlerResult=-1 + polog.Log("TransferHandlerresult = -1",Program()) + Endif + + + Return .F. + Endif +Endfunc + +Function StripXmlFile + Lparameters cXmlString + Return Strextract(Alltrim(cXmlString),"(",")",1) +Endfunc + + +Function FeedBack + * if this function returned with .f., downloading would terminate + * it is called after each 100 byte downloaded. (You can alter this value!) + Lparameters tiAll, tiCount + gTransferTotal=tiAll + frmwait.label1.Caption = "Descrcare " + Alltrim(Str(tiCount/1000)) + " kb din " + Alltrim(Str(tiAll/1000)) + " kb" + procent = (tiCount*100)/tiAll + frmwait._progressbar1.Update(procent) + + If !gcmdCancelDownload + Return .T. + Else + gcmdCancelDownload= .F. + Return .F. + Endif +Endfunc + +Function CheckProcess + Lparameters ProgramCheck + + ProgramtoCheck=Addbs(gcDirMare) + ProgramCheck + "\"+ProgramCheck + ".exe" + ProgramProba= Addbs(gcDirMare) + ProgramCheck + "\" + ProgramCheck + "Proba.exe" + + Local loex As Exception + err=.F. + If File("&ProgramtoCheck") + Copy File &ProgramtoCheck To &ProgramProba + Else + Return .F. + Endif + + + Try + Delete File &ProgramtoCheck + Catch To loex + If loex.ErrorNo=1705 + err= .T. + Endif + Endtry + + If err=.F. + Copy File &ProgramProba To &ProgramtoCheck + Delete File &ProgramProba + Endif + + + + Return err +Endfunc diff --git a/COMUN/programe/gencursor.prg b/COMUN/programe/gencursor.prg new file mode 100644 index 0000000..9f0f0c7 --- /dev/null +++ b/COMUN/programe/gencursor.prg @@ -0,0 +1,132 @@ +PROCEDURE gencursor + PARAMETERS tcnume, tcalias, tcselect, tcfiltru, tcschema, tcorder, tlAfisare, tcgroup, tlModParam, tcFiltruOriginal + +&& lcSelect, lcFiltru, lcSchema, lcOrder, llAfisare, lcGroup, llModParam, lcFiltruOriginal +&& MODIFICAT 28.02.2005 +&& tlModParam = .T. daca gencursor functioneaza fara WHERE inclus in tcSelect original +&& tcFiltruOriginal : .T. daca conditia care urmeaza dupa where este salvata si adaugata la query-urile ulterioare + + LOCAL llModParam, lcFiltruOriginal + + IF EMPTY(tlModParam) OR TYPE('tlModParam') # 'L' + llModParam = .F. + ELSE + llModParam = tlModParam + ENDIF + + IF EMPTY(tcFiltruOriginal) OR TYPE('tcFiltruOriginal') # 'C' + lcFiltruOriginal = '' + ELSE + lcFiltruOriginal = ALLTRIM(tcFiltruOriginal) + ENDIF + + &tcnume=NEWOBJECT('deca_baza') + &tcnume..ADDOBJECT('ca_baza1','ca_baza') + + IF TYPE('goConn') = 'O' + &tcNume..datasource = goConn.nHandle + ELSE + IF TYPE('gnHandle') = 'N' + &tcNume..datasource = gnHandle + ENDIF + ENDIF + + *lcSelect = TRANSFORM(UPPER(ALLTRIM(tcSelect)),['] + + + + LOCAL laEroare + DECLARE laEroare[1] + + lnpCount = PCOUNT() + llAfisare = tlAfisare + + WITH &tcnume..ca_baza1 + IF lnpCount > 6 + .lAfisare = llAfisare + ENDIF + .ALIAS=ALLTRIM(UPPER(tcalias)) + IF !EMPTY(tcschema) + IF INLIST(LEFT(tcschema,1),['],["],'[') + .CURSORSCHEMA=&tcschema + ELSE + IF LEN(tcschema) > 250 + lngrupe = CEILING(LEN(tcschema)/250) + lcgrupa = tcschema + FOR i = 1 TO lngrupe + lcgrupat = LEFT(lcgrupa,250) + .CURSORSCHEMA = .CURSORSCHEMA + lcGrupat + lcgrupa = SUBSTR(lcgrupa,251) + ENDFOR + ELSE + .CURSORSCHEMA=tcschema + ENDIF + ENDIF + ENDIF + IF INLIST(LEFT(tcselect,1),['],["],'[') + .SELECTCMD = &tcselect + .cSelect = &tcselect + ELSE + IF LEN(tcselect) > 250 + lngrupe = CEILING(LEN(tcSelect)/250) + lcgrupa = tcSelect + FOR i = 1 TO lngrupe + lcgrupat = LEFT(lcgrupa,250) + .SELECTCMD = .SELECTCMD + lcGrupat + .cSelect = .cSelect + lcGrupat + lcgrupa = SUBSTR(lcgrupa,251) + ENDFOR + ELSE + .SELECTCMD = tcselect + .cSelect = tcselect + ENDIF + ENDIF +*!* STRTOFILE(.selectcmd,[c:\selectcmd.txt]) + + .cfiltru=ALLTRIM(UPPER(tcfiltru)) + IF !EMPTY(tcorder) + .cOrder=ALLTRIM(UPPER(tcorder)) + ENDIF + IF !EMPTY(tcgroup) + .cGroup=ALLTRIM(UPPER(tcgroup)) + ENDIF + .lModParam = llModParam + .cFiltruOriginal = lcFiltruOriginal + ENDWITH + + *!* IF !USED(tcAlias) + *!* AERROR(laEroare) + *!* IF TYPE('LAEROARE')!= 'U' + *!* IF ALEN(laEroare) > 1 + *!* IF TYPE('goLog')='O' + + *!* lcLog = laEroare(3) + CHR(13) + 'SELECT: ' + tcSelect + CHR(13) + 'SCHEMA: ' + tcSchema + CHR(13) + 'FILTRU: ' + tcFiltru + CHR(13) + 'ORDINE: ' + tcOrder + *!* goLog.Log(lcLog,PROGRAM()) + *!* ENDIF + *!* MESSAGEBOX(laEroare(3),0+16,"Eroare") + + *!* ENDIF + *!* ENDIF + *!* ENDIF + *!* RELEASE laEroare +ENDPROC + +PROCEDURE gencursor_hash + PARAMETERS toHash + + LOCAL lcNume, lcAlias, lcSelect, lcFiltru, lcSchema, lcOrder, llAfisare, lcGroup, llModParam, lcFiltruOriginal + + lcNume = toHash.GetValue('cNume') + lcAlias = toHash.GetValue('cAlias') + lcSelect = toHash.GetValue('cSelect') + lcFiltru = toHash.GetValue('cFiltru') + lcSchema = toHash.GetValue('cSchema') + lcOrder = toHash.GetValue('cOrder') + llAfisare = toHash.GetValue('lAfisare') + lcGroup = toHash.GetValue('cGroup') + llModParam = toHash.GetValue('lModParam') + lcFiltruOriginal = toHash.GetValue('cFiltruOriginal') + + = gencursor(lcnume, lcalias, lcselect, lcfiltru, lcschema, lcorder, llAfisare, lcgroup, llModParam, lcFiltruOriginal) + +ENDPROC && gencursor_hash \ No newline at end of file diff --git a/COMUN/programe/get_schema.prg b/COMUN/programe/get_schema.prg new file mode 100644 index 0000000..cf562da --- /dev/null +++ b/COMUN/programe/get_schema.prg @@ -0,0 +1,177 @@ +LPARAMETERS tcConnection, tcTable, tlNull, tcFormat, tnMaxCharFormat, tcPrefix, tcSufix +*!* EX: +*!* Set Procedure To GET_SCHEMA.PRG Additive +*!* LOSCHEMA = GET_SCHEMA("JCSSERVER;MARIUSM_AUTO;123","VACT",.F.,"FOX", 100, "['", " '] + ;") +*!* DO GET_SCHEMA - PUNE IN _CLIPBOARD COLOANELE SI SCHEMA +#DEFINE CRLF CHR(13) + CHR(10) + +LOCAL lcTable, lcConnection, loReturn +LOCAL lcSelect, lcSchema, i, lcGrupat, lcGrupa +lcTable = '' +lcConnection = '' + +loReturn = CREATEOBJECT("empty") +ADDPROPERTY(loReturn,"cSelect", "") +ADDPROPERTY(loReturn,"cSchema", "") + + +IF !EMPTY(tcConnection) + lcConnection = tcConnection +ELSE + lcConnection = 'JCSSERVER;MARIUSM_AUTO;123' + lcConnection = INPUTBOX('Conexiune', 'Conexiune', lcConnection) +ENDIF +IF !(EMPTY(lcConnection) OR OCCURS(';', lcConnection) < 2) + IF !EMPTY(tcTable) + lcTable = tcTable + ELSE + lcTable = INPUTBOX('Tabel', 'Tabel', lcTable) + ENDIF + IF !EMPTY(lcTable) + lcTable = UPPER(lcTable) + IF PCOUNT() = 0 && am apelat functia fara parametri + tcFormat = INPUTBOX("Formatare","FOX","FOX") + ENDIF + IF PCOUNT() = 0 + tlNull = .T. + ENDIF + + lcCursor = 'cResult' + lcSelect = [select COLUMN_NAME, DATA_TYPE, DATA_PRECISION, DATA_SCALE, DATA_LENGTH, NULLABLE ] + ; + [ FROM user_tab_columns where table_name = '] + lcTable + [' order by column_id] + + *!* lcSelect = [SELECT stringagg(COLUMN_NAME) CSELECT,] + ; + *!* [ stringagg(COLUMN_NAME || ' ' ||] + ; + *!* [ DECODE(DATA_TYPE,] + ; + *!* [ 'NUMBER',] + ; + *!* [ 'N(' || LEAST(NVL(DATA_PRECISION,DATA_LENGTH), 20) ||] + ; + *!* [ (CASE NVL(DATA_SCALE,0)] + ; + *!* [ WHEN 0 THEN] + ; + *!* [ ')'] + ; + *!* [ ELSE] + ; + *!* [ ',' || DATA_SCALE || ')'] + ; + *!* [ END) || (CASE NULLABLE WHEN 'N' THEN ' NOT NULL' ELSE ' NULL' END),] + ; + *!* [ 'DATE',] + ; + *!* [ (CASE] + ; + *!* [ WHEN COLUMN_NAME LIKE 'DATAORA%' THEN] + ; + *!* [ 'T'] + ; + *!* [ ELSE] + ; + *!* [ 'D'] + ; + *!* [ END) || (CASE NULLABLE WHEN 'N' THEN ' NOT NULL' ELSE ' NULL' END),] + ; + *!* [ 'VARCHAR2',] + ; + *!* [ (CASE WHEN NVL(DATA_LENGTH,0) > 254 THEN 'M' ELSE ] + ; + *!* [ 'V(' || DATA_LENGTH || ')' END)|| (CASE NULLABLE WHEN 'N' THEN ' NOT NULL' ELSE ' NULL' END),] + ; + *!* [ 'CHAR',] + ; + *!* [ (CASE WHEN NVL(DATA_LENGTH,0) > 254 THEN 'M' ELSE ] + ; + *!* [ 'V(' || DATA_LENGTH || ')' END) || (CASE NULLABLE WHEN 'N' THEN ' NOT NULL' ELSE ' NULL' END),] + ; + *!* [ 'CLOB',] + ; + *!* [ 'M' || (CASE NULLABLE WHEN 'N' THEN ' NOT NULL' ELSE ' NULL' END),] + ; + *!* [ 'M' || (CASE NULLABLE WHEN 'N' THEN ' NOT NULL' ELSE ' NULL' END))) CSCHEMA] + ; + *!* [ FROM (select COLUMN_NAME,] + ; + *!* [ DATA_TYPE,] + ; + *!* [ DATA_PRECISION,] + ; + *!* [ DATA_SCALE,] + ; + *!* [ DATA_LENGTH,] + ; + *!* [ NULLABLE] + ; + *!* [ FROM user_tab_columns] + ; + *!* [ where table_name = '] + lcTable + ['] + ; + *!* [ order by column_id)] + + lcHost = GETWORDNUM(lcConnection,1,';') + lcUser = GETWORDNUM(lcConnection,2,';') + lcPassword = GETWORDNUM(lcConnection,3,';') + + X= SQLCONNECT(lcHost, lcUser, lcPassword) + IF X < 0 + AERROR(laErr) + MESSAGEBOX(laErr(3)) + RETURN + ENDIF + + lnSucces = SQLEXEC(X, lcSelect, lcCursor) + IF lnSucces < 0 + AERROR(laErr) + MESSAGEBOX(laErr(3)) + ELSE + lcSchema = "" + lcSelect = "" + + SELECT (lcCursor) + SCAN + DO CASE + CASE DATA_TYPE = 'NUMBER' + lcItemSchema = 'N(' + ALLTRIM(STR(MIN(NVL(DATA_PRECISION,DATA_LENGTH), 20))) + ; + IIF(NVL(DATA_SCALE,0) = 0, ')', ',' + ALLTRIM(STR(DATA_SCALE)) + ')') + CASE DATA_TYPE = 'DATE' + lcItemSchema = IIF('DATAORA'$COLUMN_NAME, 'T', 'D') + CASE DATA_TYPE = 'VARCHAR2' + lcItemSchema = IIF(NVL(DATA_LENGTH,0) > 254, 'M', 'V(' + ALLTRIM(STR(NVL(DATA_LENGTH,0))) + ')') + CASE DATA_TYPE = 'CHAR' + lcItemSchema = IIF(NVL(DATA_LENGTH,0) > 254, 'M', 'C(' + ALLTRIM(STR(NVL(DATA_LENGTH,0))) + ')') + OTHERWISE + lcItemSchema = 'M' + ENDCASE + lcSchema = lcSchema + ALLTRIM(COLUMN_NAME) + ' ' + lcItemSchema + IIF(tlNull, IIF(NULLABLE = 'N',' NOT NULL',' NULL'), '') + ',' + lcSelect = lcSelect + ALLTRIM(COLUMN_NAME) + ',' + ENDSCAN + IF !EMPTY(lcItemSchema) + lcSchema = LEFT(lcSchema , LEN(lcSchema )-1) + lcSelect = LEFT(lcSelect , LEN(lcSelect )-1) + ENDIF + + USE IN SELECT(lcCursor) + +&& FORMATARE TEXT - 250 CARACTERE PE RAND + IF UPPER(ALLTRIM(TRANSFORM(tcFormat))) = 'FOX' + lcSelect = format_fox(lcSelect, tnMaxCharFormat, tcPrefix, tcSufix) + lcSchema = format_fox(lcSchema, tnMaxCharFormat, tcPrefix, tcSufix) + ENDIF && UPPER(tcFormat) = 'FOX' + + _CLIPTEXT = ALLTRIM(lcSelect) + CHR(13) + CHR(10) + ALLTRIM(lcSchema) + loReturn.cSelect = ALLTRIM(lcSelect) + loReturn.cSchema = ALLTRIM(lcSchema) + + ENDIF + + SQLDISCONNECT(X) + WAIT WINDOW 'Schema este in Clipboard' NOWAIT + ENDIF +ENDIF + +RETURN loReturn + + +PROCEDURE format_fox + LPARAMETERS tcText, tnMaxCharFormat, tcPrefix, tcSufix + + LOCAL lcText, lcGrupa, lcRezultat + lcRezultat = "" + lcText = tcText + + IF PCOUNT() < 2 OR EMPTY(tnMaxCharFormat) OR TYPE('tnMaxCharFormat') <> 'N' + tnMaxCharFormat = 250 + ENDIF + + tnMaxCharFormat = MIN(tnMaxCharFormat, 250) + IF PCOUNT() < 3 OR TYPE('tcPrefix') <> 'C' OR EMPTY(tcPrefix) + tcPrefix = "[" + ENDIF + + IF PCOUNT() < 4 OR TYPE('tcSufix') <> 'C' OR EMPTY(tcSufix) + tcSufix = " ] + ;" + ENDIF + + + DO WHILE LEN(lcText) > tnMaxCharFormat + lcGrupa = LEFT(lcText, tnMaxCharFormat) + lnAt = RAT(',', lcGrupa) + lcGrupa = LEFT(lcGrupa, lnAt) + lcRezultat = lcRezultat + tcPrefix + lcGrupa + tcSufix + CRLF + lcText = SUBSTR(lcText, lnAt+1) + ENDDO + IF LEN(lcText) > 0 + lcRezultat = lcRezultat + tcPrefix + lcText + tcSufix + CRLF + ENDIF + + RETURN lcRezultat +ENDPROC && format_fox diff --git a/COMUN/programe/gridproc.prg b/COMUN/programe/gridproc.prg new file mode 100644 index 0000000..ef68dc6 --- /dev/null +++ b/COMUN/programe/gridproc.prg @@ -0,0 +1,9 @@ +PROCEDURE ALL + SET FILTER TO +ENDPROC + +PROCEDURE custom_filter + RETURN + osearchform=CREATEOBJECT("searchform") + osearchform.SHOW() +ENDPROC diff --git a/COMUN/programe/import_efactura.prg b/COMUN/programe/import_efactura.prg new file mode 100644 index 0000000..30e81cc --- /dev/null +++ b/COMUN/programe/import_efactura.prg @@ -0,0 +1,229 @@ +* ointroduceri_efactura.prg + +*!* 13.08.2024 +*!* vizImportEFactura + discountfaratva + +Procedure importEfacturaPrimite + DO vizImportEFactura WITH 'PRIMITE' +ENDPROC + +PROCEDURE importEfacturaTrimise + DO vizImportEFactura WITH 'TRIMISE' +ENDPROC + +PROCEDURE vizImportEFactura + LPARAMETERS tcTip + * tcTIP: PRIMITE/TRIMISE + + Private poFacturi, poFacturiDetalii + Local loFrmFacturi As "frm_efactura_import", lcTip, llPrimite + Local lcData1, lcFiltru, lcFiltruOriginal, lcOrder, lcSchema, lcgroup, llAfiseaza, llModParam + poFacturi = Null + poFacturiDetalii = Null + + lcTip = IIF(TYPE('tcTip') = 'C' and !EMPTY(m.tcTip), UPPER(ALLTRIM(m.tcTip)), 'PRIMITE') + llPrimite = (m.lcTip = 'PRIMITE') + + lcTabel = IIF(m.lcTip = 'PRIMITE', 'anaf_vefactura_primit', 'anaf_vefactura_trimis') + +* FACTURI PRIMITE/TRIMISE + lcData1 = '01' + Padl(Int(m.gnLuna),2,'0') + Alltrim(Str(m.gnAn)) + TEXT To lcSchema Noshow +ales N(1), id N(20), id_fact N(20), data_act D, data_scad D, numar_act C(30), xfurnizor C(200), xclient C(200), partener C(200), id_incarcare C(36), id_descarcare c(36) null, tip_mesaj_raspuns C(50) null,mesaj_raspuns C(250) null, data_raspuns D null, trimis N(1) null, data_trimis T null, cod_fiscal C(30) null, cod_fiscal_emitent C(30) null, cod_fiscal_beneficiar C(30) null, detalii M null, total_fara_tva N(16,4), total_tva N(16,4), total_tva_ron N(16,4), total_cu_tva N(16,4), discount_fara_tva N(16,4), taxe_fara_tva N(16,4), valoare_fara_tva N(16,4), total_de_plata N(16,4), nume_valuta C(5), test N(1) null, jtotctva N(16,4), descriere M null, detalii_plata M null, diferenta N(16,4), procesat N(1), SerieActRoa V(10) Null, NrActRoa N(14) Null, IdPartRoa N(10) Null, PartenerRoa V(100) null, codFiscalROA V(20), idValutaROA N(5) null,numeValutaROA V(5) null, cursROA N(16,6) null,Cont c(4) Null,ACont c(4) Null,TVAIncasare N(1),Fdoc V(20) null,Id_Fdoc N(5) Null,Nrord V(100) null,Id_Lucrare I Null,Contract V(100) Null,Id_Ctr I Null,Sectie V(100) null,Id_Sectie I Null,dst_chlt V(100) null, Id_venchelt I NUll, nresp V(100) null, Id_responsabil I NUll , completat N(1), completatdet N(1), creditnote N(1), explicatiaROA V(100) null + ENDTEXT + + TEXT To lcSelect TEXTMERGE Noshow +SELECT 0 as ales, id, id_fact, data_act, data_scad, numar_act, xfurnizor, xclient, partener, id_incarcare, id_descarcare, tip_mesaj_raspuns, mesaj_raspuns, data_raspuns, NVL(trimis,0) as trimis, data_trimis, cod_fiscal, cod_fiscal_emitent, cod_fiscal_beneficiar, '' as detalii, total_fara_tva, total_tva, total_tva_ron, total_cu_tva, discount_fara_tva, taxe_fara_tva, valoare_fara_tva, total_de_plata, nume_valuta, test, jtotctva, descriere, detalii_plata, NVL(total_cu_tva, 0.00)-NVL(jtotctva, 0.00) as diferenta, procesat, + '' as SerieActRoa, CAST(null as Number(14)) as NrActRoa, CAST(null as Number(20)) as idPartRoa, '' as PartenerRoa, '' as codFiscalROA, CAST(null as Number(10)) as idValutaROA, '' as numeValutaROA, CAST(null as Number(16,6)) as cursROA, + '' as Cont, '' as acont, 0 as TVAIncasare, '' as Fdoc, CAST(0 as Number(5)) as Id_Fdoc, '' as Nrord, CAST(0 as Number(10)) as id_Lucrare, '' as Contract, CAST(null as Number(10)) as id_ctr, + '' Sectie, CAST(0 as Number(10)) as id_Sectie, '' as dst_chlt, CAST(0 as Number(10)) as id_Venchelt, '' as nresp, CAST(0 as Number(10)) as id_responsabil, 0 as completat, 0 as completatdet, creditnote, '' as explicatiaROA + FROM <> + ENDTEXT + + lcOrder = [data_act,numar_act,data_raspuns] + lcgroup = [] + lcFiltru = [(extract(year from data_act) = ?gnAn and extract(month from data_act) = ?gnLuna) or (data_act is null and data_raspuns >= to_date('] + m.lcData1 + [','ddmmyyyy'))] + lcFiltruOriginal = [] + llModParam = .T. + llAfiseaza = .F. + + gencursor('poFacturi', 'crsFacturi', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal) + poFacturi.ca_baza1.afisare() + Select crsFacturi + Go Top + +* DETALII FACTURI PRIMITE/TRIMISE/EMISE + TEXT To lcSchema Noshow +distribuie N(1), id_tip N(10) null, id_articol N(20) null, id_gestiune N(20) null, cont C(4) null, acont C(4) null, id N(20), id_efactura N(20), nr N(5), articol V(250), descriere V(250), detalii M, cantitate N(18,6), um V(20), um_iso V(50), um_roa V(50), pret N(20,6), proctva N(7,2), tiptva V(2), valoarefaratva N(20,6), discountfaratva N(20,6), in_stoc N(1), articol_roa V(250), codmat_roa V(50), codbare V(50), codclient V(100), codfurnizor V(100), codcpv V(50), codnc8 V(50), nume_gestiune V(50), cgest V(20), tva N(20,6), pretv N(20,6), tvav N(20,6), pretvtva N(20,6) + ENDTEXT + TEXT To lcSelect Noshow +select 0 as distribuie, CAST(0 as number(10)) as id_tip, id_articol, id_gestiune, cont, acont, id, id_efactura, nr, articol, descriere, detalii, cantitate, um, um_iso, um_roa, pret, proctva, tiptva, valoarefaratva, discountfaratva, in_stoc, articol_roa, codmat_roa, codbare, codclient, codfurnizor, codcpv, codnc8, nume_gestiune, cgest, 0 as tva, 0 as pretv, 0 as tvav, 0 as pretvtva from anaf_vefactura_detalii + ENDTEXT + lcOrder = [nr] + lcgroup = [] + lcFiltru = [1=2] && IIF(!EMPTY(NVL(crsFacturiPrimite.id,0)), [id_efactura=] + ALLTRIM(STR(crsFacturiPrimite.id)), [1=2]) + lcFiltruOriginal = [] + llModParam = .T. + llAfiseaza = .F. + + * In acest cursor se iau doar detaliile pentru factura curenta + gencursor('poFacturiDetalii', 'crsDetaliiFacturiTemp', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal) + poFacturiDetalii.ca_baza1.afisare() + + * In acest cursor se vor adauga detaliile de la factura curenta, daca nu exista + * Acest cursor se foloseste in formular + SELECT * FROM crsDetaliiFacturiTemp INTO CURSOR crsDetaliiFacturi READWRITE + + * Cursoare helper + CREATE CURSOR cTipArticoleP (id I, in_stoc N(1), tip V(50), cont V(4), ordine I) + INSERT INTO cTipArticoleP (id, tip, cont, in_stoc, ordine) VALUES (0, 'Nedefinit','', 0, 0) + INSERT INTO cTipArticoleP (id, tip, cont, in_stoc, ordine) VALUES (1, 'Mat. nestoc.','604', 0, 1) + INSERT INTO cTipArticoleP (id, tip, cont, in_stoc, ordine) VALUES (2, 'Energie','6051', 0, 2) + INSERT INTO cTipArticoleP (id, tip, cont, in_stoc, ordine) VALUES (3, 'Apa','6052', 0, 3) + INSERT INTO cTipArticoleP (id, tip, cont, in_stoc, ordine) VALUES (4, 'Gaze','6053', 0, 4) + INSERT INTO cTipArticoleP (id, tip, cont, in_stoc, ordine) VALUES ( 5, 'Chirii','6123', 0, 5) + INSERT INTO cTipArticoleP (id, tip, cont, in_stoc, ordine) VALUES (6, 'Colaboratori','621', 0, 6) + INSERT INTO cTipArticoleP (id, tip, cont, in_stoc, ordine) VALUES (7, 'Comisioane','622', 0, 7) + INSERT INTO cTipArticoleP (id, tip, cont, in_stoc, ordine) VALUES (8, 'Protocol','623', 0, 8) + INSERT INTO cTipArticoleP (id, tip, cont, in_stoc, ordine) VALUES (9, 'Transp. bunuri/pers.','624', 0, 9) + INSERT INTO cTipArticoleP (id, tip, cont, in_stoc, ordine) VALUES (10, 'Deplasari','625', 0, 10) + INSERT INTO cTipArticoleP (id, tip, cont, in_stoc, ordine) VALUES (11, 'Posta/telecom.','626', 0, 11) + INSERT INTO cTipArticoleP (id, tip, cont, in_stoc, ordine) VALUES (12, 'Terti','628', 0, 12) + INSERT INTO cTipArticoleP (id, tip, cont, in_stoc, ordine) VALUES (13, 'Altele','461', 0, 13) + INSERT INTO cTipArticoleP (id, tip, cont, in_stoc, ordine) VALUES (14, '-----------------','', 0, 14) + INSERT INTO cTipArticoleP (id, tip, cont, in_stoc, ordine) VALUES (15, 'Marfuri','371', 1, 15) + INSERT INTO cTipArticoleP (id, tip, cont, in_stoc, ordine) VALUES (16, 'Materii prime','301', 1, 16) + INSERT INTO cTipArticoleP (id, tip, cont, in_stoc, ordine) VALUES (17, 'Materiale auxiliare','3021', 1, 17) + INSERT INTO cTipArticoleP (id, tip, cont, in_stoc, ordine) VALUES (18, 'Ambalaje','381', 1, 18) + INSERT INTO cTipArticoleP (id, tip, cont, in_stoc, ordine) VALUES (19, 'Obiecte de inventar','303', 1, 19) + INSERT INTO cTipArticoleP (id, tip, cont, in_stoc, ordine) VALUES (20, 'Amenajari provizorii','323', 1, 20) + INSERT INTO cTipArticoleP (id, tip, cont, in_stoc, ordine) VALUES (21, 'Mat. spre prelucrare','8032', 1, 21) + INSERT INTO cTipArticoleP (id, tip, cont, in_stoc, ordine) VALUES (22, 'Mat. in pastrare/consig.','8033', 1, 22) + INSERT INTO cTipArticoleP (id, tip, cont, in_stoc, ordine) VALUES (23, 'Discount financiar intrari','767', 0, 23) + INSERT INTO cTipArticoleP (id, tip, cont, in_stoc, ordine) VALUES (24, 'Combustibili','3022', 1, 24) + INSERT INTO cTipArticoleP (id, tip, cont, in_stoc, ordine) VALUES (25, 'Piese de schimb','3024', 1, 25) + INSERT INTO cTipArticoleP (id, tip, cont, in_stoc, ordine) VALUES (26, 'Alte mat. consumabile','3028', 1, 26) + INSERT INTO cTipArticoleP (id, tip, cont, in_stoc, ordine) VALUES (27, 'Discount comercial intrari','609', 0, 27) + INSERT INTO cTipArticoleP (id, tip, cont, in_stoc, ordine) VALUES (28, 'Ambalaje SGR','461', 0, 28) + + SELECT cTipArticoleP + GO TOP IN cTipArticoleP + INDEX on ordine TAG ordine + + CREATE CURSOR cTipArticoleE (id I, in_stoc N(1), tip V(50), cont V(4), ordine I) + INSERT INTO cTipArticoleE (id, tip, cont, in_stoc, ordine) VALUES (0, 'Nedefinit','', 0, 0) + INSERT INTO cTipArticoleE (id, tip, cont, in_stoc, ordine) VALUES (29, 'Marfuri','707', 1, 1) + INSERT INTO cTipArticoleE (id, tip, cont, in_stoc, ordine) VALUES (30, 'Produse finite','701', 1, 2) + INSERT INTO cTipArticoleE (id, tip, cont, in_stoc, ordine) VALUES (31, 'Produse reziduale','703', 1, 3) + INSERT INTO cTipArticoleE (id, tip, cont, in_stoc, ordine) VALUES (32, 'Semifabricate','702', 1, 4) + INSERT INTO cTipArticoleE (id, tip, cont, in_stoc, ordine) VALUES (33, 'Discount financiar iesiri','667', 0, 5) + INSERT INTO cTipArticoleE (id, tip, cont, in_stoc, ordine) VALUES (34, 'Servicii vandute','704', 0, 6) + INSERT INTO cTipArticoleE (id, tip, cont, in_stoc, ordine) VALUES (35, 'Discount comercial iesiri','709', 0, 7) + INSERT INTO cTipArticoleE (id, tip, cont, in_stoc, ordine) VALUES (36, 'Ambalaje SGR','461', 0, 8) + + SELECT cTipArticoleE + GO TOP IN cTipArticoleE + INDEX on ordine TAG ordine + + IF m.llPrimite + SELECT id, tip, cont, in_stoc, ordine FROM cTipArticoleP ORDER BY ordine INTO CURSOR cTip + ELSE + SELECT id, tip, cont, in_stoc, ordine FROM cTipArticoleE ORDER BY ordine INTO CURSOR cTip + ENDIF + SELECT cTip + INDEX on id TAG id + +*!* llSucces = goExecutor.oExecuta("select id_articol, denumire, codmat from vnom_articole where inactiv = 0", 'cArticole') + +*!* SELECT cArticole +*!* INDEX on id_articol TAG id_articol + + llSucces = goExecutor.oExecuta([select distinct nume_gestiune,cgest,id_gestiune,nr_pag,cont from vgest_gestiuni_util where inactiv = 0 and id_util = ] + Alltrim(Str(m.gnIdUtil)), 'cGestiuni') + SELECT cGestiuni + APPEND BLANK + INDEX on id_gestiune TAG id_gest + + select cast(alltrim(nume_gestiune) + '-' + alltrim(nvl(cgest, '')) as V(50)) as nume_gestiune, id_gestiune from cGestiuni order by nume_gestiune into cursor cGestiuni2 + + llSucces = goExecutor.oExecuta("select cod_um_iso, um_iso from syn_vnom_um_iso", 'cUMISO') + SELECT cUMISO + INDEX on cod_um_iso TAG cod_um_iso + + llSucces = goExecutor.oExecuta("select id, um, cod_um_iso, um_iso from vnom_um", 'cUM') + SELECT cUM + INDEX on id TAG id + + Select crsFacturi + loFrmFacturi = Createobject("frm_import_efactura", m.llPrimite) + * Do Form frm_import_efactura Name loFrmFacturi Linked With m.llPrimite Noshow + + loFrmFacturi.Show(1) + + Use In (Select('crsFacturi')) + Use In (Select('crsDetaliiFacturi')) + USE IN (SELECT('crsDetaliiFacturiTemp')) + Use In (Select('cTip')) + Use In (Select('cArticole')) + Use In (Select('cGestiuni')) + Use In (Select('cGestiuni2')) + Use In (Select('cTip')) + Use In (Select('cTipArticoleP')) + Use In (Select('cTipArticoleE')) +Endproc && vizFacturiPrimite + +********************** +* Completez anaf_efactura_detalii.id_articol la importul eFactura +********************** +PROCEDURE UpdateEFacturaArticolROA + LPARAMETERS tnIdEFactura + + Local lcSql, llSucces, lcSelect + PRIVATE pnIdArticol, pnId, pnIdGestiune, pcCont + + lcSelect = SELECT() + lcSql = "update anaf_efactura_detalii set id_articol = ?pnIdArticol, id_gestiune = ?pnIdGestiune, cont = ?pcCont, acont = ?pcAcont where id = ?pnId" + llSucces = .T. + + SELECT id, id_articol, id_gestiune, cont, acont FROM crsDetaliiFacturi INTO CURSOR cArticoleTemp + + SELECT cArticoleTemp + SCAN + pnId = id + pnIdArticol = IIF(EMPTY(NVL(id_articol, 0)), NULL, id_articol) + pnIdGestiune = IIF(EMPTY(NVL(id_gestiune, 0)), null, id_gestiune) + pcCont = ALLTRIM(NVL(cont, '')) + pcAcont = ALLTRIM(NVL(acont, '')) + + llSucces = goExecutor.oExecuta(m.lcSql) + IF !m.llSucces + EXIT + ENDIF + ENDSCAN + + USE IN (SELECT('cArticoleTemp')) + SELECT (m.lcSelect) + + RETURN m.llSucces +ENDPROC && UpdateEFacturaArticolROA + +********************** +* Completez anaf_efactura_detalii.id_fact la importul eFactura achizitie +********************** +PROCEDURE UpdateEFacturaIdFact + LPARAMETERS tnIdEFactura, tnIdFact + + Local lcSql, llSucces, lcSelect + PRIVATE pnId, pnIdFact + + lcSelect = SELECT() + lcSql = "update anaf_efactura set id_fact = ?pnIdFact where id = ?pnId and NVL(id_fact,0) = 0" + llSucces = .T. + pnId = m.tnIdEfactura + pnIdFact = m.tnIdFact + + llSucces = goExecutor.oExecuta(m.lcSql) + + SELECT (m.lcSelect) + + RETURN m.llSucces +ENDPROC && UpdateEFacturaIdFact \ No newline at end of file diff --git a/COMUN/programe/importfromxlsx.prg b/COMUN/programe/importfromxlsx.prg new file mode 100644 index 0000000..e1ee1a3 --- /dev/null +++ b/COMUN/programe/importfromxlsx.prg @@ -0,0 +1,1393 @@ +* Version 5.0 +LPARAMETERS lcFileName,lnStartRows,lcSheet,llCursor,llEmptyCells,lnHeader,lcTableName +* Parameters +* lcFileName name of the xlsx + * nom de xlsx + * numele xlsx-ului +* lnStartRows starting row (the first lnStartRows - 1 rows are skipped) ; optional ; default 1 (all rows) + * a partir range (les premiers lnStartRows - 1 lignes sont passes) ; optionnel ; dfaut 1 (tous les champs lignes) + * primul rand (primele lnStartRows - 1 randuri ale tabelului din docx sunt omise); optional; implicit 1 (toate randurile) +* lcSheet sheet name | number ; optional ; default '' + * nom | nomber de la feuille ; optionnel ; dfaut '' + * numele |numarul foii ; optional ; implicit '' +* llCursor when .T., the result is a cursor instead of a DBF ; optional ; default .F. + * lorsque .T, le rsultat est un cursor au lieu d'un DBF; optionnel; dfaut .F. + * cand este .T., rezultatul este un cursor si nu un DBF; optional; implicit .F. +* llEmptyCells when .T., the source contains empty cells (slower import); optional ; default .F. + * lorsque .T., la source contient des cellules vides (d'importation plus lent); optionnel ; dfaut .F. + * cand este .T., documentul sursa contine celule goale (importul este mai lent); optional; implicit .F. +* lnHeader the row that contains column headers (lnHeader < lnStartRows); optional ; default 0 + * nombre de la ligne d'en-tte (lnHeader < lnStartRows); optionnel ; dfaut 0 + * linia care contine antetele coloanelor (lnHeader < lnStartRows); optional; implicit 0 +* lcTableName name of the dbf / cursor; optional ; default '' (? for SaveAs - only for table) + * nom de dbf / cursor ; optionnel ; dfaut '' (? pour SaveAs) + * numele dbf-ului / cursor; optional ; implicit '' (? pentru SaveAs - doar pentru tabele) +DECLARE Sleep IN WIN32API INTEGER +DECLARE INTEGER ShellExecute IN shell32.dll INTEGER , STRING , STRING , STRING , STRING , INTEGER +#DEFINE ERRLANG "Ro" +#IF ERRLANG = "Ro" + #DEFINE ERRMESS0 "Eroare" + #DEFINE ERRMESS1 "Nimic de importat" + #DEFINE ERRMESS3 "Foaie inexistenta" + #DEFINE ERRMESS4 "Eroare la deschiderea" + #DEFINE ERRMESS5 "Prea multe coloane" +#ELIF ERRLANG = "Fr" + #DEFINE ERRMESS0 "Erreur" + #DEFINE ERRMESS1 "Rien a ajouter" + #DEFINE ERRMESS3 "Feuille introuvable" + #DEFINE ERRMESS4 "Erreur d'ouverture" + #DEFINE ERRMESS5 "Trop de collones" +#ELIF ERRLANG = "Nl" && Koen Piller + #DEFINE ERRMESS0 "Fout" + #DEFINE ERRMESS1 "Niets te importeren" + #DEFINE ERRMESS3 "Blad niet gevonden" + #DEFINE ERRMESS4 "Fout bij openen" + #DEFINE ERRMESS5 "Te veel kolommen" +#ELSE + #DEFINE ERRMESS0 "Error" + #DEFINE ERRMESS1 "Nothing to append" + #DEFINE ERRMESS3 "Sheet not found" + #DEFINE ERRMESS4 "Error opening" + #DEFINE ERRMESS5 "Too many columns" +#ENDIF +*************************************************************** +* If you prefer to extract files with Winrar, uncomment this +*************************************************************** +*#DEFINE archiveWinRar .T. + +LOCAL lcDir,cCurStr,lSetTalk,lnColsNo,laFields[1],laEmptyCells[1],llChars,lnSelect,lcDBF,laFiles[1],cCurStyle,lcCur,laDimRef[2,2],lcStrBad,llServer +lcStrBad = '' +llServer = OS(11) > '1' +FOR lni = 0 TO 31 + IF !INLIST(m.lni,9,10,13) + lcStrBad = m.lcStrBad + CHR(m.lni) + ENDIF +NEXT +lnSelect = SELECT(0) + +IF PCOUNT() < 1 + MESSAGEBOX(ERRMESS1,16,ERRMESS0) + RETURN +ELSE + IF VARTYPE(m.lcFileName) $ "CV" + lcFileName = FORCEEXT(m.lcFileName,"xlsx") + IF !FILE(m.lcFileName) + MESSAGEBOX(ERRMESS1,16,ERRMESS0) + RETURN + ENDIF + ELSE + MESSAGEBOX(ERRMESS1,16,ERRMESS0) + RETURN + ENDIF +ENDIF +IF PCOUNT() < 2 + lnStartRows = 1 +ELSE + IF VARTYPE(m.lnStartRows) <> "N" + lnStartRows = 1 + ENDIF +ENDIF +IF PCOUNT()<3 + lcSheet = "" +ELSE + IF NOT (VARTYPE(m.lcSheet) $ "CN") + lcSheet = "" + ENDIF +ENDIF +IF PCOUNT() < 4 + llCursor = .F. +ELSE + IF VARTYPE(m.llCursor) <> "L" + llCursor = .F. + ENDIF +ENDIF +IF PCOUNT() < 5 + llEmptyCells = .F. +ELSE + IF VARTYPE(m.llEmptyCells) <> "L" + llEmptyCells = .F. + ENDIF +ENDIF +IF PCOUNT() < 6 + lnHeader = 0 +ELSE + IF VARTYPE(m.lnHeader) <> "N" + lnHeader = 0 + ENDIF +ENDIF +IF m.lnHeader >= m.lnStartRows + lnHeader = 0 +ENDIF + +IF PCOUNT() < 7 + lcTableName = '' +ELSE + IF NOT VARTYPE(m.lcFileName) $ "CV" + lcTableName = '' + ENDIF +ENDIF + +lSetTalk = SET("Talk") +SET TALK OFF + +lcDir = extract(m.lcFileName,m.llServer) +lcDBF = "" + +lcSheet = get_sheet(ADDBS(m.lcDir) + "workbook.xml",m.lcSheet) +IF EMPTY(m.lcSheet) + MESSAGEBOX(ERRMESS3,16,'Error') + cleanup(m.lcDir,m.llServer) + SET TALK &lSetTalk + SELECT (m.lnSelect) + RETURN m.lcDBF +ENDIF + +llChars = ADIR(laFiles,ADDBS(m.lcDir) + "sharedStrings.xml") > 0 +IF m.llChars + cCurStr = get_strings(ADDBS(m.lcDir) + "sharedStrings.xml") + IF EMPTY(m.cCurStr) + cleanup(m.lcDir,m.llServer) + SET TALK &lSetTalk + SELECT (m.lnSelect) + RETURN m.lcDBF + ENDIF +ELSE + cCurStr = '' +ENDIF + +cCurStyle = get_styles(ADDBS(m.lcDir) + "styles.xml") +IF EMPTY(m.cCurStyle) + cleanup(m.lcDir,m.llServer) + IF USED(m.cCurStr) + USE IN (m.cCurStr) + ENDIF + SET TALK &lSetTalk + SELECT (m.lnSelect) + RETURN m.lcDBF +ENDIF + +IF m.llServer + lcCur = gen_table(ADDBS(ADDBS(m.lcDir) + 'worksheets') + FORCEEXT(m.lcSheet,"xml"),@lnStartRows,m.lcSheet,@lnColsNo,@laFields,m.cCurStyle,m.llEmptyCells,@laEmptyCells,m.lnHeader,m.cCurStr,m.llCursor,@laDimRef) +ELSE + lcCur = gen_table(ADDBS(m.lcDir) + FORCEEXT(m.lcSheet,"xml"),@lnStartRows,m.lcSheet,@lnColsNo,@laFields,m.cCurStyle,m.llEmptyCells,@laEmptyCells,m.lnHeader,m.cCurStr,m.llCursor,@laDimRef) +ENDIF + +IF EMPTY(m.lcCur) + cleanup(m.lcDir,m.llServer) + IF USED(m.cCurStr) + USE IN (m.cCurStr) + ENDIF + IF USED(m.cCurStyle) + USE IN (m.cCurStyle) + ENDIF + SET TALK &lSetTalk + SELECT (m.lnSelect) + RETURN m.lcDBF +ENDIF + +IF m.llServer + lcDBF = get_cells(ADDBS(ADDBS(m.lcDir) + 'worksheets') + FORCEEXT(m.lcSheet,"xml"),@lcCur,m.cCurStr,m.lnColsNo,@laFields,m.lnStartRows,m.lcFileName,m.llCursor,m.llEmptyCells,m.cCurStyle,@laEmptyCells,@laDimRef,m.lcTableName) +ELSE + lcDBF = get_cells(ADDBS(m.lcDir) + FORCEEXT(m.lcSheet,"xml"),@lcCur,m.cCurStr,m.lnColsNo,@laFields,m.lnStartRows,m.lcFileName,m.llCursor,m.llEmptyCells,m.cCurStyle,@laEmptyCells,@laDimRef,m.lcTableName) +ENDIF + +cleanup(m.lcDir,m.llServer) +SET TALK &lSetTalk +SELECT (m.lnSelect) +IF USED(m.cCurStr) + USE IN (m.cCurStr) +ENDIF +IF USED(m.cCurStyle) + USE IN (m.cCurStyle) +ENDIF +IF USED(m.lcCur) + USE IN (m.lcCur) +ENDIF +RETURN m.lcDBF + +********************* +* Extract xml files * +********************* +FUNCTION extract + LPARAMETERS lcFileName,llServer + LOCAL lcDir,lcZip,oShell,ofile,loErr as Exception,lcSetSaf,lni,lnFF,laDir[1],lnDir,lnDir0 + lcDir = ADDBS(SYS(2023)) + SYS(2015) + lcZip = FORCEEXT(m.lcDir,'.zip') + COPY FILE (m.lcFileName) TO (m.lcZip) + MD (m.lcDir) +*************************** +* Use Winrar +*************************** +#IFDEF archiveWinRar + ShellExecute(0,"open","WinRAR.exe","E " + m.lcZip + " xl\sharedStrings.xml " + m.lcDir,"",1) + IF ADIR(laDir,ADDBS(m.lcDir) + "sharedStrings*.xml") > 0 + lnFF = FOPEN(ADDBS(m.lcDir) + "sharedStrings.xml") + DO WHILE m.lnFF < 0 + sleep(50) + lnFF = FOPEN(ADDBS(m.lcDir) + "sharedStrings.xml") + ENDDO + FCLOSE(m.lnFF) + ENDIF + ShellExecute(0,"open","WinRAR.exe","E " + m.lcZip + " xl\workbook.xml " + m.lcDir,"",1) + lnFF = FOPEN(ADDBS(m.lcDir) + "workbook.xml") + DO WHILE m.lnFF < 0 + sleep(50) + lnFF = FOPEN(ADDBS(m.lcDir) + "workbook.xml") + ENDDO + FCLOSE(m.lnFF) + ShellExecute(0,"open","WinRAR.exe","E " + m.lcZip + " xl\styles.xml " + m.lcDir,"",1) + lnFF = FOPEN(ADDBS(m.lcDir) + "styles.xml") + DO WHILE m.lnFF < 0 + sleep(50) + lnFF = FOPEN(ADDBS(m.lcDir) + "styles.xml") + ENDDO + FCLOSE(m.lnFF) + ShellExecute(0,"open","WinRAR.exe","E " + m.lcZip + " xl\worksheets\sheet*.xml " + m.lcDir,"",1) + lnDir0 = 0 + lnDir = ADIR(laDir,ADDBS(m.lcDir ) + "sheet*.xml") + + DO WHILE (m.lnDir <> m.lnDir0) OR (m.lnDir = 0) + FOR lni = 1 TO m.lnDir + lnFF = FOPEN(ADDBS(m.lcDir) + m.laDir[m.lni,1]) + DO WHILE m.lnFF < 0 + sleep(50) + lnFF = FOPEN(ADDBS(m.lcDir) + m.laDir[m.lni,1]) + ENDDO + FCLOSE(m.lnFF) + NEXT + lnDir0 = m.lnDir + lnDir = ADIR(laDir,ADDBS(m.lcDir ) + "sheet*.xml") + ENDDO +*************************** +* Use Explorer +*************************** +#ELSE + oShell = CREATEOBJECT("shell.application") + TRY + FOR lni = 0 TO m.oShell.NameSpace(ADDBS(m.lcZip)+'xl').items.count - 1 + ofile = m.oShell.NameSpace(ADDBS(m.lcZip)+'xl').items.item(m.lni) + lcFileName = JUSTFNAME(m.ofile.path) + IF INLIST(LOWER(m.lcFileName),'sharedstrings.xml','workbook.xml','styles.xml') + oShell.NameSpace( m.lcDir).copyhere( m.ofile) + lnFF = FOPEN(ADDBS(m.lcDir) + m.lcFileName) + DO WHILE m.lnFF < 0 + sleep(50) + lnFF = FOPEN(ADDBS(m.lcDir) + m.lcFileName) + ENDDO + FCLOSE(m.lnFF) + ENDIF + ENDFOR + IF m.llServer + FOR lni = 0 TO m.oShell.NameSpace(ADDBS(m.lcZip)+'xl').items.count - 1 + ofile = m.oShell.NameSpace(ADDBS(m.lcZip)+'xl').items.item(m.lni) + lcFileName = JUSTFNAME(m.ofile.path) + IF INLIST(JUSTSTEM(m.lcFileName),'worksheets') + oShell.NameSpace( m.lcDir).copyhere( m.ofile) + sleep(500) + EXIT + ENDIF + ENDFOR + ELSE + FOR lni = 0 TO m.oShell.NameSpace(ADDBS(m.lcZip)+'xl\worksheets').items.count - 1 + ofile = m.oShell.NameSpace(ADDBS(m.lcZip)+'xl\worksheets').items.item(m.lni) + IF LOWER(LEFT(m.ofile.name,5)) == 'sheet' + oShell.NameSpace( m.lcDir).copyhere( m.ofile) + lcFileName = JUSTFNAME(m.ofile.path) + lnFF = FOPEN(ADDBS(m.lcDir) + m.lcFileName) + DO WHILE m.lnFF < 0 + sleep(50) + lnFF = FOPEN(ADDBS(m.lcDir) + m.lcFileName) + ENDDO + FCLOSE(m.lnFF) + ENDIF + ENDFOR + ENDIF + CATCH TO loErr + ENDTRY +#ENDIF +RETURN lcDir + +**************** +* Read strings * +**************** +FUNCTION get_strings + LPARAMETERS lcStr + LOCAL cCurStr,lnF,lnPosSiSeek,lcBuff,lnPosSi,lnPosSi2,lcMemo,lcReturn,lnTextPiece,lcTextPiece,lcVal + STORE SYS(2015) TO lcReturn, cCurStr + CREATE CURSOR (m.cCurStr) (cStr M) + lnF = FOPEN(m.lcStr) + IF m.lnF >= 0 + lnPosSiSeek = 0 + DO WHILE !FEOF(m.lnF) + lcBuff = FREAD(m.lnF,8192) + lnPosSi = AT('',m.lcBuff) + lnPosSiSeek = m.lnPosSiSeek + m.lnPosSi + 3 + = FSEEK(m.lnF,m.lnPosSiSeek) + lcBuff = FREAD(m.lnF,8192) + lnPosSi2 = AT('',m.lcBuff) + lcMemo = '' + DO WHILE !FEOF(m.lnF) AND m.lnPosSi2 = 0 + lcMemo = m.lcMemo + m.lcBuff + lcBuff = FREAD(m.lnF,8192) + lnPosSi2 = AT('',m.lcMemo) + ENDDO + IF m.lnPosSi2 != 0 + lcMemo = m.lcMemo + LEFT(m.lcBuff,m.lnPosSi2 - 1) + lnPosSiSeek = m.lnPosSiSeek + m.lnPosSi2 + 4 + lnPosSi = FSEEK(m.lnF,m.lnPosSiSeek) + lcVal = "" + STORE 1 TO lnTextPiece + lcTextPiece = STREXTRACT(m.lcMemo,'') + DO WHILE !EMPTY(m.lcTextPiece) + lcVal = m.lcVal + STREXTRACT(m.lcTextPiece,[>]) + lnTextPiece = m.lnTextPiece + 1 + lcTextPiece = STREXTRACT(m.lcMemo,'',m.lnTextPiece) + ENDDO + INSERT INTO (m.cCurStr) (cStr) VALUES (htmspec(m.lcVal)) + ELSE + lcMemo = m.lcMemo + m.lcBuff + EXIT + ENDIF + ENDDO + ELSE + lcReturn = '' + MESSAGEBOX(ERRMESS4 + ' sharedStrings.xml',16,'Error') + ENDIF + FCLOSE(m.lnF) +RETURN m.lcReturn + +*************** +* Read styles * +*************** +FUNCTION get_styles + LPARAMETERS lcStr + LOCAL cCurStr,lcBuff,lcMemo,lcReturn,lcTextPiece,lnTextPiece,lcVal,llDate,lcMemo2,lcTextPiece2,lnTextPiece2,lcVal2,lcVal3 + STORE SYS(2015) TO lcReturn, cCurStyle + CREATE CURSOR (m.cCurStyle) (iIndex I AUTOINC NEXTVALUE 0,iFmt I,lDate L) + INDEX on iIndex TAG iIndex + lcBuff = FILETOSTR(m.lcStr) + lcMemo = STREXTRACT(m.lcBuff,'') + lcMemo2 = STREXTRACT(m.lcBuff,'') + lnTextPiece = 1 + lcTextPiece = STREXTRACT(m.lcMemo,'= 164 + lnTextPiece2 = 1 + lcTextPiece2 = STREXTRACT(m.lcMemo2,'') + DO WHILE !EMPTY(m.lcTextPiece2) + lcVal2 = STREXTRACT(m.lcTextPiece2,'numFmtId="','"') + IF m.lcVal2 == m.lcVal + lcVal3 = STREXTRACT(m.lcTextPiece2,'formatCode="','"') + llDate = AT("0.",m.lcVal3) + AT(".0",m.lcVal3) + AT("0,",m.lcVal3) + AT(",0",m.lcVal3) + AT("#",m.lcVal3) = 0 and m.lcVal3<>[General] + EXIT + ENDIF + lnTextPiece2 = m.lnTextPiece2 + 1 + lcTextPiece2 = STREXTRACT(m.lcMemo2,'',m.lnTextPiece2) + ENDDO + ENDIF + + INSERT INTO (m.cCurStyle) (iFmt,lDate) VALUES (VAL(m.lcVal),m.llDate) + lnTextPiece = m.lnTextPiece + 1 + lcTextPiece = STREXTRACT(m.lcMemo,' 0 + lcDimRef1 = LEFT(m.lcDimRef, m.lnDimRef - 1) + laDimRef[1,1] = VAL(CHRTRAN(m.lcDimRef1,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','')) + lcDimRef1 = CHRTRAN(m.lcDimRef1,'0123456789','') + IF LEN(m.lcDimRef1) = 1 + laDimRef[1,2] = ASC(m.lcDimRef1) - 64 + ELSE + IF LEN(m.lcDimRef1) = 2 + laDimRef[1,2] = ASC(RIGHT(m.lcDimRef1,1)) - 64 + 26 * (ASC(LEFT(m.lcDimRef1,1)) - 64) + ELSE && LEN(m.lcDimRef1) = 3 + laDimRef[1,2] = ASC(RIGHT(m.lcDimRef1,1)) - 64 + 26 * (ASC(SUBSTR(m.lcDimRef1,1,1)) - 64) + 676 * (ASC(LEFT(m.lcDimRef1,1)) - 64) + ENDIF + ENDIF + lcDimRef1 = SUBSTR(m.lcDimRef, m.lnDimRef + 1) + laDimRef[2,1] = VAL(CHRTRAN(m.lcDimRef1,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','')) + lcDimRef1 = CHRTRAN(m.lcDimRef1,'0123456789','') + IF LEN(m.lcDimRef1) = 1 + laDimRef[2,2] = ASC(m.lcDimRef1) - 64 + ELSE + IF LEN(m.lcDimRef1) = 2 + laDimRef[2,2] = ASC(RIGHT(m.lcDimRef1,1)) - 64 + 26 * (ASC(LEFT(m.lcDimRef1,1)) - 64) + ELSE && LEN(m.lcDimRef1) = 3 + laDimRef[2,2] = ASC(RIGHT(m.lcDimRef1,1)) - 64 + 26 * (ASC(SUBSTR(m.lcDimRef1,1,1)) - 64) + 676 * (ASC(LEFT(m.lcDimRef1,1)) - 64) + ENDIF + ENDIF + ELSE + laDimRef[1,1] = VAL(CHRTRAN(m.lcDimRef1,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','')) + lcDimRef1 = CHRTRAN(m.lcDimRef1,'0123456789','') + IF LEN(m.lcDimRef1) = 1 + laDimRef[1,2] = ASC(m.lcDimRef1) - 64 + ELSE + IF LEN(m.lcDimRef1) = 2 + laDimRef[1,2] = ASC(RIGHT(m.lcDimRef1,1)) - 64 + 26 * (ASC(LEFT(m.lcDimRef1,1)) - 64) + ELSE && LEN(m.lcDimRef1) = 3 + laDimRef[1,2] = ASC(RIGHT(m.lcDimRef1,1)) - 64 + 26 * (ASC(SUBSTR(m.lcDimRef1,1,1)) - 64) + 676 * (ASC(LEFT(m.lcDimRef1,1)) - 64) + ENDIF + ENDIF + ENDIF + ACTIVATE SCREEN + ******************* + lnCurRow = 1 &&m.lnStartRows + lnCurRow0 = 1 + lnStartRows0 = m.lnStartRows + lnFieldF = 0 + lnField = 1 + ************** + lcWholeRow = STREXTRACT(m.lcWholeTable,"") + IF EMPTY(m.lcWholeRow) + MESSAGEBOX(ERRMESS1,16,ERRMESS0) + RETURN '' + ENDIF + + ************** + IF m.lnHeader > 0 + lnCurRowF = 1 &&m.lnStartRows + lnCurRow0F = 1 + lnStartRows0F = m.lnHeader +* lnFieldF = 1 + lcCell = STREXTRACT(m.lcWholeRow,[],m.lnField) + IF "inlineStr" $ m.lcCell + llEmptyVal = EMPTY(STREXTRACT(m.lcCell,[])) + ELSE + llEmptyVal = EMPTY(STREXTRACT(m.lcCell,[],[])) + ENDIF + DO WHILE !EMPTY(m.lcWholeRow) AND (lnCurRowF < m.lnStartRows0F OR EMPTY(m.lcCell) OR m.llEmptyVal) && EMPTY(STREXTRACT(m.lcCell,[],[])) + lnCurRow0F = m.lnCurRow0F + 1 + IF !EMPTY(m.lcCell) AND !m.llEmptyVal && !EMPTY(STREXTRACT(m.lcCell,[],[])) + lnCurRowF = m.lnCurRowF + 1 + ENDIF + lcWholeRow = STREXTRACT(m.lcWholeTable,"",m.lnCurRow0F) + lcCell = STREXTRACT(m.lcWholeRow,[]) + IF "inlineStr" $ m.lcCell + llEmptyVal = EMPTY(STREXTRACT(m.lcCell,[])) + ELSE + llEmptyVal = EMPTY(STREXTRACT(m.lcCell,[],[])) + ENDIF + ENDDO + IF EMPTY(m.lcWholeRow) + MESSAGEBOX(ERRMESS1,16,ERRMESS0) + RETURN '' + ENDIF + DO WHILE !EMPTY(m.lcCell) + lcShCol = CHRTRAN(STREXTRACT(m.lcCell,'r="','"'),'0123456789','') + IF LEN(m.lcShCol) = 1 + lnShCol = ASC(m.lcShCol) - 64 + ELSE + IF LEN(m.lcShCol) = 2 + lnShCol = ASC(RIGHT(m.lcShCol,1)) - 64 + 26 * (ASC(LEFT(m.lcShCol,1)) - 64) + ELSE && LEN(m.lcShCol) = 3 + lnShCol = ASC(RIGHT(m.lcShCol,1)) - 64 + 26 * (ASC(SUBSTR(m.lcShCol,1,1)) - 64) + 676 * (ASC(LEFT(m.lcShCol,1)) - 64) + ENDIF + ENDIF + lnShCol = m.lnShCol - laDimRef[1,2] + 1 + DIMENSION laFieldGat[m.lnShCol,18],laEmptyCells[m.lnShCol] + FOR lnj = m.lnFieldF + 1 TO m.lnShCol + STORE 0 TO laFieldGat[m.lnj,17],laFieldGat[m.lnj,18],laFieldGat[m.lnj,4] + STORE .T. TO laFieldGat[m.lnj,5],laEmptyCells[m.lnj] + STORE .F. TO laFieldGat[m.lnj,6],laFieldGat[m.lnj,5] + STORE '' TO laFieldGat[m.lnj,7],laFieldGat[m.lnj,8],laFieldGat[m.lnj,9],laFieldGat[m.lnj,10],laFieldGat[m.lnj,11],laFieldGat[m.lnj,12],laFieldGat[m.lnj,13],laFieldGat[m.lnj,14],laFieldGat[m.lnj,15],laFieldGat[m.lnj,16] + laFieldGat[m.lnj,2] = "M" + laFieldGat[m.lnj,3] = 4 + IF m.lnj < m.lnShCol + laFieldGat[m.lnj,1] = "MFIELD"+TRANSFORM(m.lnj) + ELSE +* lcVal = STREXTRACT(m.lcCell,[],[]) + IF "inlineStr" $ m.lcCell + lcVal = STREXTRACT(m.lcCell,[],[]) + ELSE + lcVal = STREXTRACT(m.lcCell,[],[]) + ENDIF + llBool = 't="b"' $ m.lcCell + llMemo = 't="s"' $ m.lcCell or [t="inlineStr] $ m.lcCell + llNumber = !m.llBool AND !m.llMemo AND not ('s="' $ m.lcCell) + STORE .F. TO llDate, llTime + IF !llBool AND !llMemo AND !llNumber + lnStyle = VAL(STREXTRACT(m.lcCell,[s="],["])) + IF SEEK(m.lnStyle,m.cCurStyle,"iIndex") + llDate = &cCurStyle..lDate and VAL(STREXTRACT(m.lcCell,[],[])) = FLOOR(VAL(STREXTRACT(m.lcCell,[],[]))) + llTime = &cCurStyle..lDate and !m.llDate + llNumber = !m.llDate and !m.llTime + ENDIF + ENDIF + DO CASE + CASE m.llNumber + laFieldGat[m.lnShCol,1] = "_" + CHRTRAN(m.lcVal,'.,+-','') + CASE m.llDate + lnDat = VAL(m.lcVal) + IF m.lnDat >= 61 + laFieldGat[m.lnShCol,1] = "_" + DTOS(m.ldDat01 + m.lnDat) + ELSE + laFieldGat[m.lnShCol,1] = "_" + DTOS(m.ldDat02 + m.lnDat) + ENDIF + CASE m.llTime + lnTim = VAL(m.lcVal) + lnDat = FLOOR(m.lnTim) + laFieldGat[m.lnShCol,1] = "_" + TTOC(DTOT(m.ldDat01 + m.lnDat) + INT(86400.0 * (m.lnTim - m.lnDat)),1) + CASE m.llBool + laFieldGat[m.lnShCol,1] = IIF(m.lcVal == "1","TRUE","FALSE") + OTHERWISE + IF "inlineStr" $ m.lcCell + laFieldGat[m.lnShCol,1] = m.lcVal + ELSE + TRY + IF [t="s"] $ m.lcCell + SELECT (m.cCurStr) + GO VAL(m.lcVal) + 1 IN (m.cCurStr) + laFieldGat[m.lnShCol,1] = cStr + ELSE + laFieldGat[m.lnShCol,1] = m.lcVal + ENDIF + CATCH TO loErr + laFieldGat[m.lnShCol,1] = m.lcVal + ENDTRY + ENDIF + laFieldGat[m.lnShCol,1] = UPPER(ALLTRIM(laFieldGat[m.lnShCol,1])) + laFieldGat[m.lnShCol,1] = CHRTRAN(laFieldGat[m.lnShCol,1],CHRTRAN(laFieldGat[m.lnShCol,1],"_0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",""),"") + IF !ISALPHA(laFieldGat[m.lnShCol,1]) + laFieldGat[m.lnShCol,1] = "_" + laFieldGat[m.lnShCol,1] + ENDIF + ENDCASE + laFieldGat[m.lnShCol,1] = LEFT(laFieldGat[m.lnShCol,1],IIF(m.llCursor,31,10)) && 31 + lnName = 0 + lcName = laFieldGat[m.lnShCol,1] + DO WHILE BETWEEN(ASCAN(laFieldGat,m.lcName,1,-1,1,1+2+4+8), 1, m.lnShCol - 1) + lnName = m.lnName + 1 + lcName = laFieldGat[m.lnShCol,1] + lnLeftName = MIN(LEN(laFieldGat[m.lnShCol,1]) , IIF(m.llCursor,31,10) - LEN(TRANSFORM(m.lnName))) && 31 + lcName = LEFT(laFieldGat[m.lnShCol,1], m.lnLeftName) + TRANSFORM(m.lnName) + ENDDO + laFieldGat[m.lnShCol,1] = m.lcName + ENDIF + NEXT + lnFieldF = m.lnShCol + lnField = m.lnField + 1 + lcCell = STREXTRACT(m.lcWholeRow,[],m.lnField) + ENDDO + lnField = m.lnField - 1 + ENDIF + ************** + IF !m.llEmptyCells && simple case : the sheet does not contain empty cells +* lnField = 1 + lcCell = STREXTRACT(m.lcWholeRow,[],m.lnField) + IF "inlineStr" $ m.lcCell + llEmptyVal = EMPTY(STREXTRACT(m.lcCell,[])) + ELSE + llEmptyVal = EMPTY(STREXTRACT(m.lcCell,[],[])) + ENDIF + DO WHILE !EMPTY(m.lcWholeRow) AND (lnCurRow < m.lnStartRows0 OR EMPTY(m.lcCell) OR m.llEmptyVal) && EMPTY(STREXTRACT(m.lcCell,[],[])) + lnCurRow0 = m.lnCurRow0 + 1 + IF !EMPTY(m.lcCell) AND !llEmptyVal && !EMPTY(STREXTRACT(m.lcCell,[],[])) + lnCurRow = m.lnCurRow + 1 + ENDIF + lcWholeRow = STREXTRACT(m.lcWholeTable,"",m.lnCurRow0) + lcCell = STREXTRACT(m.lcWholeRow,[]) + IF "inlineStr" $ m.lcCell + llEmptyVal = EMPTY(STREXTRACT(m.lcCell,[])) + ELSE + llEmptyVal = EMPTY(STREXTRACT(m.lcCell,[],[])) + ENDIF + ENDDO + lnStartRows = lnCurRow0 + IF EMPTY(m.lcWholeRow) + MESSAGEBOX(ERRMESS1,16,ERRMESS0) + RETURN '' + ENDIF + DO WHILE !EMPTY(m.lcCell) + IF m.lnFieldF < m.lnField + DIMENSION laFieldGat[m.lnField,18],laEmptyCells[m.lnField] + STORE 0 TO laFieldGat[m.lnField,17],laFieldGat[m.lnField,18],laFieldGat[m.lnField,4] + STORE .T. TO laFieldGat[m.lnField,5],laEmptyCells[m.lnField] + STORE .F. TO laFieldGat[m.lnField,6],laFieldGat[m.lnField,5] + STORE '' TO laFieldGat[m.lnField,7],laFieldGat[m.lnField,8],laFieldGat[m.lnField,9],laFieldGat[m.lnField,10],laFieldGat[m.lnField,11],laFieldGat[m.lnField,12],laFieldGat[m.lnField,13],laFieldGat[m.lnField,14],laFieldGat[m.lnField,15],laFieldGat[m.lnField,16] + ENDIF + llBool = 't="b"' $ m.lcCell + llMemo = 't="s"' $ m.lcCell or [t="inlineStr] $ m.lcCell + llNumber = !m.llBool AND !m.llMemo AND not ('s="' $ m.lcCell) + STORE .F. TO llDate, llTime + IF !llBool AND !llMemo AND !llNumber + lnStyle = VAL(STREXTRACT(m.lcCell,[s="],["])) + IF SEEK(m.lnStyle,m.cCurStyle,"iIndex") + llDate = &cCurStyle..lDate and VAL(STREXTRACT(m.lcCell,[],[])) = FLOOR(VAL(STREXTRACT(m.lcCell,[],[]))) + llTime = &cCurStyle..lDate and !m.llDate + llNumber = !m.llDate and !m.llTime + ENDIF + ENDIF + IF m.lnFieldF < m.lnField + laFieldGat[m.lnField,1] = "MFIELD"+TRANSFORM(m.lnField) + ENDIF + laEmptyCells[m.lnField] = !m.llDate AND !m.llTime AND !m.llMemo AND !m.llBool AND !m.llNumber + DO CASE + CASE m.llNumber + laFieldGat[m.lnField,2] = "B" + laFieldGat[m.lnField,3] = 8 + laFieldGat[m.lnField,4] = 15 + CASE m.llDate + laFieldGat[m.lnField,2] = "D" + laFieldGat[m.lnField,3] = 8 + CASE m.llTime + laFieldGat[m.lnField,2] = "T" + laFieldGat[m.lnField,3] = 8 + CASE m.llBool + laFieldGat[m.lnField,2] = "L" + laFieldGat[m.lnField,3] = 1 + OTHERWISE + laFieldGat[m.lnField,2] = "M" + laFieldGat[m.lnField,3] = 4 + ENDCASE + lnField = m.lnField + 1 + lcCell = STREXTRACT(m.lcWholeRow,[],m.lnField) + ENDDO + lnField = m.lnField - 1 + ELSE && complicated : check empty cells + lnField = 1 + lcCell = STREXTRACT(m.lcWholeRow,[],m.lnField) + IF AT([ 0 + lcCell = LEFT(m.lcCell , AT([])) + ELSE + llEmptyVal = EMPTY(STREXTRACT(m.lcCell,[],[])) + ENDIF + DO WHILE !EMPTY(m.lcWholeRow) AND (lnCurRow < m.lnStartRows0 OR EMPTY(m.lcCell) OR m.llEmptyVal) && EMPTY(STREXTRACT(m.lcCell,[],[]))) + lnCurRow0 = m.lnCurRow0 + 1 + IF !EMPTY(m.lcCell) AND !m.llEmptyVal &&!EMPTY(STREXTRACT(m.lcCell,[],[])) + lnCurRow = m.lnCurRow + 1 + ENDIF + lcWholeRow = STREXTRACT(m.lcWholeTable,"",m.lnCurRow0) + lcCell = STREXTRACT(m.lcWholeRow,[]) + IF AT([ 0 + lcCell = LEFT(m.lcCell , AT([])) + ELSE + llEmptyVal = EMPTY(STREXTRACT(m.lcCell,[],[])) + ENDIF + ENDDO + lnStartRows = lnCurRow0 + IF EMPTY(m.lcWholeRow) + MESSAGEBOX(ERRMESS1,16,ERRMESS0) + RETURN '' + ENDIF + lnShField = 0 + DO WHILE !EMPTY(m.lcCell) + lnShCol = lnShField + lcShCol = CHRTRAN(STREXTRACT(m.lcCell,'r="','"'),'0123456789','') + DO CASE + CASE LEN(m.lcShCol) = 1 + lnShCol = ASC(m.lcShCol) - 64 + CASE LEN(m.lcShCol) = 2 + lnShCol = ASC(RIGHT(m.lcShCol,1)) - 64 + 26 * (ASC(LEFT(m.lcShCol,1)) - 64) + CASE LEN(m.lcShCol) = 3 + lnShCol = ASC(RIGHT(m.lcShCol,1)) - 64 + 26 * (ASC(SUBSTR(m.lcShCol,1,1)) - 64) + 676 * (ASC(LEFT(m.lcShCol,1)) - 64) + ENDCASE + lnShCol = m.lnShCol - laDimRef[1,2] + 1 + + IF m.lnFieldF < m.lnShCol + DIMENSION laFieldGat[m.lnShCol,18],laEmptyCells[m.lnShCol] + FOR lnCurCol = MAX(m.lnShField,m.lnFieldF) + 1 TO m.lnShCol + STORE 0 TO laFieldGat[m.lnCurCol,17],laFieldGat[m.lnCurCol,18],laFieldGat[m.lnCurCol,4] + STORE .T. TO laFieldGat[m.lnCurCol,5],laEmptyCells[m.lnCurCol] + STORE .F. TO laFieldGat[m.lnCurCol,6],laFieldGat[m.lnCurCol,5] + STORE '' TO laFieldGat[m.lnCurCol,7],laFieldGat[m.lnCurCol,8],laFieldGat[m.lnCurCol,9],laFieldGat[m.lnCurCol,10],laFieldGat[m.lnCurCol,11],laFieldGat[m.lnCurCol,12],laFieldGat[m.lnCurCol,13],laFieldGat[m.lnCurCol,14],laFieldGat[m.lnCurCol,15],laFieldGat[m.lnCurCol,16] + laFieldGat[m.lnCurCol,1] = "MFIELD"+TRANSFORM(m.lnCurCol) + NEXT + FOR lnCurCol = MAX(m.lnShField,m.lnFieldF) + 1 TO m.lnShCol - 1 && empty cells + laFieldGat[m.lnCurCol,2] = "M" + laFieldGat[m.lnCurCol,3] = 4 + NEXT + ENDIF + IF AT([],m.lcCell) = 0 && empty cells + laFieldGat[m.lnShCol,2] = "M" + laFieldGat[m.lnShCol,3] = 4 + ELSE + llBool = 't="b"' $ m.lcCell + llMemo = 't="s"' $ m.lcCell or [t="inlineStr] $ m.lcCell + llNumber = !llBool AND !llMemo AND not ('s="' $ m.lcCell) + STORE .F. TO llDate, llTime + IF !llBool AND !llMemo AND !llNumber + lnStyle = VAL(STREXTRACT(m.lcCell,[s="],["])) + IF SEEK(m.lnStyle,m.cCurStyle,"iIndex") + llDate = &cCurStyle..lDate and VAL(STREXTRACT(m.lcCell,[],[])) = FLOOR(VAL(STREXTRACT(m.lcCell,[],[]))) + llTime = &cCurStyle..lDate and !llDate + llNumber = !llDate and !llTime + ENDIF + ENDIF +* laFieldGat[m.lnShCol,1] = "MFIELD"+TRANSFORM(m.lnShCol) + laEmptyCells[m.lnShCol] = !m.llDate AND !m.llTime AND !m.llMemo AND !m.llBool AND !m.llNumber + DO CASE + CASE m.llNumber + laFieldGat[m.lnShCol,2] = "B" + laFieldGat[m.lnShCol,3] = 8 + laFieldGat[m.lnShCol,4] = 15 + CASE m.llDate + laFieldGat[m.lnShCol,2] = "D" + laFieldGat[m.lnShCol,3] = 8 + CASE m.llTime + laFieldGat[m.lnShCol,2] = "T" + laFieldGat[m.lnShCol,3] = 8 + CASE m.llBool + laFieldGat[m.lnShCol,2] = "L" + laFieldGat[m.lnShCol,3] = 1 + OTHERWISE + laFieldGat[m.lnShCol,2] = "M" + laFieldGat[m.lnShCol,3] = 4 + ENDCASE + ENDIF + lnField = m.lnField + 1 + lcCell = STREXTRACT(m.lcWholeRow,[],m.lnField) + IF AT([ 0 + lcCell = LEFT(m.lcCell , AT([ 254 + MESSAGEBOX(ERRMESS5,16,ERRMESS0) + RETURN '' + ELSE + CREATE CURSOR (m.lcTable) FROM ARRAY laFieldGat + ENDIF +RETURN m.lcTable + +************** +* Read sheet * +************** +FUNCTION get_cells + LPARAMETERS lcStr,cCurSheet,cCurStr,lnField,laField,lnStartRows,lcFileName,llCursor,llEmptyCells,cCurStyle,laEmptyCells,laDimRef,lcTable + LOCAL lnField,ldDat01,ldDat02,lcSetDec,lnF,lnPosSiSeek,lcBuff,lnPosSi,lnPosSi2,lcMemo,laFieldGat[1],lni,lcCell,lcVal,lnDat,lnTim,lnCurRow,laFieldPrec[m.lnField,2],loErr as Exception,lcPoint + LOCAL lcShCol,lnShCol,llDate,llTime,llBool,llMemo,llNumber,lnStyle,lcAlterCol,lnCurCell,lnj,llExtend,cCurSheet1,lcMySql,lcMySql0 + IF m.llCursor + IF EMPTY(m.lcTable) OR m.lcTable == '?' + lcTable = SYS(2015) + ELSE + lcTable = CHRTRAN(m.lcTable,CHRTRAN(m.lcTable,'_1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXUZ',''),'') + IF ISDIGIT(m.lcTable) + lcTable = '_' + m.lcTable + ENDIF + ENDIF + ELSE + IF EMPTY(m.lcTable) + lcTable = FORCEEXT(m.lcFileName,"DBF") + ELSE + IF m.lcTable == '?' + lcTable = PUTFILE('',FORCEEXT(m.lcFileName,"DBF"),'DBF') + IF EMPTY(m.lcTable) + lcTable = FORCEEXT(m.lcFileName,"DBF") + ELSE + lcTable = FORCEEXT(m.lcTable,'DBF') + ENDIF + ELSE + lcTable = FORCEEXT(m.lcTable,'DBF') + ENDIF + ENDIF + lcTable = CHRTRAN(m.lcTable,[<>:"/\|?*],'') + ENDIF + lcTable = LEFT(m.lcTable,31) + lnField = ALEN(laField,1) + ldDat01 = DATE(1900,3,1) - 61 + ldDat02 = DATE(1900,1,1) - 1 + lcPoint = SET("Point") + lcSetDec = SET("Decimals") + laFieldPrec = 0 + SET DECIMALS TO 10 + lnF = FOPEN(m.lcStr) + lnCurRow = 0 + IF m.lnF >= 0 + IF !llEmptyCells && simple : table without empty celss + lnPosSiSeek = 0 + DO WHILE !FEOF(m.lnF) + lcBuff = FREAD(m.lnF,8192) + lnPosSi = AT('',m.lcBuff) + lcMemo = '' + DO WHILE !FEOF(m.lnF) AND m.lnPosSi2 = 0 + lcMemo = m.lcMemo + m.lcBuff + lcBuff = FREAD(m.lnF,8192) + lnPosSi2 = AT('',m.lcMemo) + ENDDO + IF m.lnPosSi2 != 0 + lcMemo = m.lcMemo + LEFT(m.lcBuff,m.lnPosSi2 - 1) + lnPosSiSeek = m.lnPosSiSeek + m.lnPosSi2 + 5 + lnPosSi = FSEEK(m.lnF,m.lnPosSiSeek) + lnCurRow = m.lnCurRow + 1 + IF m.lnStartRows > m.lnCurRow + LOOP + ENDIF + SELECT (m.cCurSheet) + APPEND BLANK + SCATTER MEMO TO laFieldGat + FOR lni = 1 TO lnField + lcCell = STREXTRACT(m.lcMemo,[],m.lni) +* lcVal = STREXTRACT(m.lcCell,[],[]) + IF "inlineStr" $ m.lcCell + lcVal = STREXTRACT(m.lcCell,[],[]) + ELSE + lcVal = STREXTRACT(m.lcCell,[],[]) + ENDIF + + IF EMPTY(m.lcVal) + LOOP + ENDIF + IF laField[m.lni,2] $ "CVM" + IF "inlineStr" $ m.lcCell + laFieldGat[m.lni] = m.lcVal + ELSE + TRY + IF [t="s"] $ m.lcCell + SELECT (m.cCurStr) + GO VAL(m.lcVal) + 1 IN (m.cCurStr) + laFieldGat[m.lni] = cStr + ELSE + laFieldGat[m.lni] = m.lcVal + ENDIF + CATCH TO loErr + laFieldGat[m.lni] = m.lcVal + ENDTRY + ENDIF + laFieldPrec[m.lni,1] = MAX(laFieldPrec[m.lni,1],LEN(laFieldGat[m.lni])) + laFieldPrec[m.lni,2] = MAX(laFieldPrec[m.lni,2],OCCURS(CHR(13),laFieldGat[m.lni])) + ELSE + IF laField[m.lni,2] $ "NFBYI" + laFieldGat[m.lni] = VAL(m.lcVal) + laFieldPrec[m.lni,1] = MAX(laFieldPrec[m.lni,1],LEN(ALLTRIM(m.lcVal))) + IF AT(m.lcPoint,ALLTRIM(m.lcVal)) > 0 + laFieldPrec[m.lni,2] = MAX(laFieldPrec[m.lni,2],LEN(ALLTRIM(m.lcVal)) - AT(m.lcPoint,ALLTRIM(m.lcVal))) + ENDIF + ELSE + IF laField[m.lni,2] $ "D" + lnDat = VAL(m.lcVal) + IF m.lnDat >= 61 + laFieldGat[m.lni] = m.ldDat01 + m.lnDat + ELSE + laFieldGat[m.lni] = m.ldDat02 + m.lnDat + ENDIF + ELSE + IF laField[m.lni,2] $ "T" + lnTim = VAL(m.lcVal) + lnDat = FLOOR(m.lnTim) + laFieldGat[m.lni] = DTOT(m.ldDat01 + m.lnDat) + INT(86400.0 * (m.lnTim - m.lnDat)) + ELSE + IF laField[m.lni,2] $ "L" + laFieldGat[m.lni] = m.lcVal == "1" + ENDIF + ENDIF + ENDIF + ENDIF + ENDIF + NEXT + SELECT (m.cCurSheet) + GATHER FROM laFieldGat MEMO + ELSE + lcMemo = m.lcMemo + m.lcBuff + EXIT + ENDIF + ENDDO + ELSE && complicated : column check + lnPosSiSeek = 0 + DO WHILE !FEOF(m.lnF) + lcBuff = FREAD(m.lnF,8192) + lnPosSi = AT('',m.lcBuff) + lcMemo = '' + DO WHILE !FEOF(m.lnF) AND m.lnPosSi2 = 0 + lcMemo = m.lcMemo + m.lcBuff + lcBuff = FREAD(m.lnF,8192) + lnPosSi2 = AT('',m.lcMemo) + ENDDO + IF m.lnPosSi2 != 0 + lcMemo = m.lcMemo + LEFT(m.lcBuff,m.lnPosSi2 - 1) + lnPosSiSeek = m.lnPosSiSeek + m.lnPosSi2 + 5 + lnPosSi = FSEEK(m.lnF,m.lnPosSiSeek) + lnCurRow = m.lnCurRow + 1 + IF m.lnStartRows > m.lnCurRow + LOOP + ENDIF + SELECT (m.cCurSheet) + APPEND BLANK + SCATTER MEMO TO laFieldGat + lnCurCell = 1 + lni = 1 + llExtend = .F. + DO WHILE m.lni <= m.lnField OR m.llExtend +* FOR lni=1 TO lnField + llExtend = .F. + lcCell = STREXTRACT(m.lcMemo,[],m.lnCurCell) + IF AT([ 0 + lcCell = LEFT(m.lcCell , AT([ m.lnField + llExtend = .T. + DIMENSION laField[m.lnShCol,ALEN(laField,2)],laEmptyCells[m.lnShCol],laFieldPrec[m.lnShCol,2],laFieldGat[m.lnShCol] + lcMySql = '' + FOR lnj = 1 TO m.lnField + lcMySql = m.lcMySql + laField[m.lnj,1] + ',' + NEXT + lcMySql = RTRIM(m.lcMySql,1,',') + + FOR lnj = m.lnField + 1 TO m.lnShCol + STORE 0 TO laField[m.lnj,17],laField[m.lnj,18],laField[m.lnj,4] + STORE .T. TO laField[m.lnj,5],laEmptyCells[m.lnj] + STORE .F. TO laField[m.lnj,6],laField[m.lnj,5] + STORE '' TO laField[m.lnj,7],laField[m.lnj,8],laField[m.lnj,9],laField[m.lnj,10],laField[m.lnj,11],laField[m.lnj,12],laField[m.lnj,13],laField[m.lnj,14],laField[m.lnj,15],laField[m.lnj,16] + laField[m.lnj,2] = "M" + laField[m.lnj,3] = 4 + laEmptyCells[m.lnj] = .T. + STORE 0 TO laFieldPrec[m.lnj,1],laFieldPrec[m.lnj,2] + lcAlterCol = "MFIELD"+TRANSFORM(m.lnj) + laField[m.lnj,1] = m.lcAlterCol + NEXT + lnField = m.lnShCol + + cCurSheet1 = SYS(2015) + CREATE CURSOR (m.cCurSheet1) FROM ARRAY laField + lcMySql = "INSERT INTO " + m.cCurSheet1 + "(" + m.lcMySql + ") SELECT " + m.lcMySql + " FROM " + m.cCurSheet + &lcMySql + USE IN (m.cCurSheet) + cCurSheet = m.cCurSheet1 + GO BOTTOM IN (m.cCurSheet) + + ENDIF + IF lni < m.lnShCol + lni = m.lnShCol + ENDIF + + lnCurCell = m.lnCurCell + 1 + +* lcVal = STREXTRACT(m.lcCell,[],[]) + IF "inlineStr" $ m.lcCell + lcVal = STREXTRACT(m.lcCell,[],[]) + ELSE + lcVal = STREXTRACT(m.lcCell,[],[]) + ENDIF + IF EMPTY(m.lcVal) + lni = m.lni + 1 + LOOP + ELSE + STORE .F. TO llBool,llMemo,llNumber,llDate,llTime + llBool = 't="b"' $ m.lcCell + llMemo = 't="s"' $ m.lcCell or [t="inlineStr] $ m.lcCell + llNumber = !llBool AND !llMemo AND not ('s="' $ m.lcCell) + STORE .F. TO llDate, llTime + IF !llBool AND !llMemo AND !llNumber + lnStyle = VAL(STREXTRACT(m.lcCell,[s="],["])) + IF SEEK(m.lnStyle,m.cCurStyle,"iIndex") + llDate = &cCurStyle..lDate and VAL(STREXTRACT(m.lcCell,[],[])) = FLOOR(VAL(STREXTRACT(m.lcCell,[],[]))) + llTime = &cCurStyle..lDate and !llDate + llNumber = !llDate and !llTime + ENDIF + ENDIF + ENDIF + + lcMySql0 = '' + FOR lnj = 1 TO m.lnField + lcMySql0 = m.lcMySql0 + laField[m.lnj,1] + ',' + NEXT + lcMySql0 = RTRIM(m.lcMySql0,1,',') + lcMySql = '' + FOR lnj = 1 TO m.lni - 1 + lcMySql = m.lcMySql + laField[m.lnj,1] + ',' + NEXT + lcAlterCol = laField[m.lni,1] + IF laField[m.lni,2] == "D" AND m.llTime OR laField[m.lni,2] == "M" AND m.llTime AND m.laEmptyCells[m.lni] + laField[m.lni,2] = "T" + laEmptyCells[m.lni] = .F. + + lcMySql = m.lcMySql + "CAST(" + m.laField[m.lni,1] + " AS T) AS " + m.laField[m.lni,1] + "," + FOR lnj = m.lni + 1 TO ALEN(laField,1) + lcMySql = m.lcMySql + laField[m.lnj,1] + ',' + NEXT + lcMySql = RTRIM(m.lcMySql,1,',') + cCurSheet1 = SYS(2015) + CREATE CURSOR (m.cCurSheet1) FROM ARRAY laField + lcMySql = "INSERT INTO " + m.cCurSheet1 + "(" + m.lcMySql0 + ") SELECT " + m.lcMySql + " FROM " + m.cCurSheet + &lcMySql + USE IN (m.cCurSheet) + cCurSheet = m.cCurSheet1 + GO BOTTOM IN (m.cCurSheet) + ELSE + IF laField[m.lni,2] == "M" AND m.llDate AND m.laEmptyCells[m.lni] + laField[m.lni,2] = "D" + laEmptyCells[m.lni] = .F. + + lcMySql = m.lcMySql + "CAST(" + m.laField[m.lni,1] + " AS D) AS " + m.laField[m.lni,1] + "," + FOR lnj = m.lni + 1 TO ALEN(laField,1) + lcMySql = m.lcMySql + laField[m.lnj,1] + ',' + NEXT + lcMySql = RTRIM(m.lcMySql,1,',') + cCurSheet1 = SYS(2015) + CREATE CURSOR (m.cCurSheet1) FROM ARRAY laField + lcMySql = "INSERT INTO " + m.cCurSheet1 + "(" + m.lcMySql0 + ") SELECT " + m.lcMySql + " FROM " + m.cCurSheet + &lcMySql + USE IN (m.cCurSheet) + cCurSheet = m.cCurSheet1 + GO BOTTOM IN (m.cCurSheet) + ELSE + IF laField[m.lni,2] == "M" AND m.llBool AND m.laEmptyCells[m.lni] + laField[m.lni,2] = "L" + laEmptyCells[m.lni] = .F. + + lcMySql = m.lcMySql + "CAST(" + m.laField[m.lni,1] + " AS L) AS " + m.laField[m.lni,1] + "," + FOR lnj = m.lni + 1 TO ALEN(laField,1) + lcMySql = m.lcMySql + laField[m.lnj,1] + ',' + NEXT + lcMySql = RTRIM(m.lcMySql,1,',') + cCurSheet1 = SYS(2015) + CREATE CURSOR (m.cCurSheet1) FROM ARRAY laField + lcMySql = "INSERT INTO " + m.cCurSheet1 + "(" + m.lcMySql0 + ") SELECT " + m.lcMySql + " FROM " + m.cCurSheet + &lcMySql + USE IN (m.cCurSheet) + cCurSheet = m.cCurSheet1 + GO BOTTOM IN (m.cCurSheet) + ELSE + IF laField[m.lni,2] == "M" AND m.llNumber AND m.laEmptyCells[m.lni] + laField[m.lni,2] = "B" + laField[m.lni,3] = 8 + laField[m.lni,4] = 15 + laEmptyCells[m.lni] = .F. + + lcMySql = m.lcMySql + "CAST(" + m.laField[m.lni,1] + " AS B(15)) AS " + m.laField[m.lni,1] + "," + FOR lnj = m.lni + 1 TO ALEN(laField,1) + lcMySql = m.lcMySql + laField[m.lnj,1] + ',' + NEXT + lcMySql = RTRIM(m.lcMySql,1,',') + cCurSheet1 = SYS(2015) + CREATE CURSOR (m.cCurSheet1) FROM ARRAY laField + lcMySql = "INSERT INTO " + m.cCurSheet1 + "(" + m.lcMySql0 + ") SELECT " + m.lcMySql + " FROM " + m.cCurSheet + &lcMySql + USE IN (m.cCurSheet) + cCurSheet = m.cCurSheet1 + GO BOTTOM IN (m.cCurSheet) + ELSE + IF laField[m.lni,2] $ "BDT" AND m.llBool OR ; + laField[m.lni,2] $ "BDTL" AND m.llMemo OR ; + laField[m.lni,2] $ "DTL" AND m.llNumber OR ; + laField[m.lni,2] $ "BL" AND m.llDate OR ; + laField[m.lni,2] $ "BLD" AND m.llTime + laField[m.lni,2] = "M" + laField[m.lni,3] = 4 + laField[m.lni,4] = 0 + + lcMySql = m.lcMySql + "CAST(" + m.laField[m.lni,1] + " AS M) AS " + m.laField[m.lni,1] + "," + FOR lnj = m.lni + 1 TO ALEN(laField,1) + lcMySql = m.lcMySql + laField[m.lnj,1] + ',' + NEXT + lcMySql = RTRIM(m.lcMySql,1,',') + cCurSheet1 = SYS(2015) + CREATE CURSOR (m.cCurSheet1) FROM ARRAY laField + lcMySql = "INSERT INTO " + m.cCurSheet1 + "(" + m.lcMySql0 + ") SELECT " + m.lcMySql + " FROM " + m.cCurSheet + &lcMySql + USE IN (m.cCurSheet) + cCurSheet = m.cCurSheet1 + GO TOP IN (m.cCurSheet) + CALCULATE MAX(LEN(ALLTRIM(&lcAlterCol))) TO m.laFieldPrec[m.lni,1] IN (m.cCurSheet) + GO TOP IN (m.cCurSheet) + CALCULATE MAX(OCCURS(CHR(13),&lcAlterCol)) TO m.laFieldPrec[m.lni,2] IN (m.cCurSheet) + GO BOTTOM IN (m.cCurSheet) + ENDIF + ENDIF + ENDIF + ENDIF + ENDIF + IF laField[m.lni,2] $ "CVM" + IF m.llMemo + IF "inlineStr" $ m.lcCell + laFieldGat[m.lni] = m.lcVal + ELSE + TRY + IF [t="s"] $ m.lcCell + SELECT (m.cCurStr) + GO VAL(m.lcVal) + 1 IN (m.cCurStr) + laFieldGat[m.lni] = cStr + ELSE + laFieldGat[m.lni] = m.lcVal + ENDIF + CATCH TO loErr + laFieldGat[m.lni] = m.lcVal + ENDTRY + ENDIF + ELSE + IF m.llNumber + laFieldGat[m.lni] = m.lcVal + ELSE + IF m.llDate + lnDat = VAL(m.lcVal) + IF m.lnDat >= 61 + laFieldGat[m.lni] = TRANSFORM(m.ldDat01 + m.lnDat) + ELSE + laFieldGat[m.lni] = TRANSFORM(m.ldDat02 + m.lnDat) + ENDIF + ELSE + IF m.llTime + lnTim = VAL(m.lcVal) + lnDat = FLOOR(m.lnTim) + laFieldGat[m.lni] = TRANSFORM(DTOT(m.ldDat01 + m.lnDat) + INT(86400.0 * (m.lnTim - m.lnDat))) + ELSE && m.llBool + laFieldGat[m.lni] = IIF(m.lcVal == "1",'.T.','.F.') + ENDIF + ENDIF + ENDIF + ENDIF + laFieldPrec[m.lni,1] = MAX(laFieldPrec[m.lni,1],LEN(laFieldGat[m.lni])) + laFieldPrec[m.lni,2] = MAX(laFieldPrec[m.lni,2],OCCURS(CHR(13),laFieldGat[m.lni])) + ELSE + IF laField[m.lni,2] $ "NFBYI" + laFieldGat[m.lni] = VAL(m.lcVal) + laFieldPrec[m.lni,1] = MAX(laFieldPrec[m.lni,1],LEN(ALLTRIM(m.lcVal))) + IF AT(m.lcPoint,ALLTRIM(m.lcVal)) > 0 + laFieldPrec[m.lni,2] = MAX(laFieldPrec[m.lni,2],LEN(ALLTRIM(m.lcVal)) - AT(m.lcPoint,ALLTRIM(m.lcVal))) + ENDIF + ELSE + IF laField[m.lni,2] == "D" + lnDat = VAL(m.lcVal) + IF m.lnDat >= 61 + laFieldGat[m.lni] = m.ldDat01 + m.lnDat + ELSE + laFieldGat[m.lni] = m.ldDat02 + m.lnDat + ENDIF + ELSE + IF laField[m.lni,2] == "T" + lnTim = VAL(m.lcVal) + lnDat = FLOOR(m.lnTim) + laFieldGat[m.lni] = DTOT(m.ldDat01 + m.lnDat) + INT(86400.0 * (m.lnTim - m.lnDat)) + ELSE + IF laField[m.lni,2] $ "L" + laFieldGat[m.lni] = m.lcVal == "1" + ENDIF + ENDIF + ENDIF + ENDIF + ENDIF +* NEXT + lni = m.lni + 1 + ENDDO + SELECT (m.cCurSheet) + GATHER FROM laFieldGat MEMO + ELSE + lcMemo = m.lcMemo + m.lcBuff + EXIT + ENDIF + ENDDO + ENDIF + ELSE + MESSAGEBOX(ERRMESS4,16,'Error') + ENDIF + FCLOSE(m.lnF) + SET DECIMALS TO &lcSetDec + lcSql = "LPARAMETERS lcTable" + CHR(13) + "INSERT INTO (m.lcTable) SELECT " + FOR lni = 1 TO lnField + IF laField[m.lni,2] == "M" AND BETWEEN(laFieldPrec[m.lni,1],1,254) AND laFieldPrec[m.lni,2] = 0 + laField[m.lni,2] = "C" + laField[m.lni,3] = laFieldPrec[m.lni,1] + lcSql = m.lcSql + "LEFT(" + laField[m.lni,1] + "," + TRANSFORM(laFieldPrec[m.lni,1]) + ") AS " + laField[m.lni,1] + "," + ELSE + lcSql = m.lcSql + laField[m.lni,1] + "," + IF laField[m.lni,2] == "B" AND BETWEEN(laFieldPrec[m.lni,1],1,20) + IF laFieldPrec[m.lni,2] = 0 AND BETWEEN(laFieldPrec[m.lni,1],1,9) + laField[m.lni,2] = "I" + laField[m.lni,3] = 4 + laField[m.lni,4] = 0 + ELSE + laField[m.lni,2] = "N" + laField[m.lni,3] = laFieldPrec[m.lni,1] + laField[m.lni,4] = laFieldPrec[m.lni,2] + ENDIF + ELSE + ENDIF + ENDIF + NEXT + IF m.llCursor + *lcTable = SYS(2015) && CHRTRAN(JUSTSTEM(m.lcTable)," ","_") + CREATE CURSOR (m.lcTable) FROM ARRAY laField + lcSql = LEFT(m.lcSql,LEN(m.lcSql) - 1) + " FROM " + m.cCurSheet + EXECSCRIPT(m.lcSql,m.lcTable) + ELSE + CREATE TABLE (m.lcTable) FREE FROM ARRAY laField + lcSql = LEFT(m.lcSql,LEN(m.lcSql) - 1) + " FROM " + m.cCurSheet + CHR(13) + "RETURN ALIAS()" + USE IN (EXECSCRIPT(m.lcSql,m.lcTable)) + ENDIF + USE IN (m.cCurSheet) +RETURN m.lcTable + +********************** +* Special characters * +********************** +FUNCTION htmspec + LPARAMETERS cStr + LOCAL lni,lcStrF,lcChar,lnChar + lcStrF = m.cStr + IF AT('>',m.lcStrF)>0 + lcStrF = STRTRAN(m.lcStrF,'>','>') + ENDIF + IF AT('<',m.lcStrF)>0 + lcStrF = STRTRAN(m.lcStrF,'<','<') + ENDIF + IF AT('"',m.lcStrF)>0 + lcStrF = STRTRAN(m.lcStrF,'"','"') + ENDIF + IF AT("'",m.lcStrF)>0 + lcStrF = STRTRAN(m.lcStrF,''',"'") + ENDIF + + IF AT([&#],m.lcStrF)>0 + FOR lnChar = 0 TO 255 + lcChar = [&#]+STR(m.lnChar,3)+[;] + IF AT(m.lcChar,m.lcStrF)>0 + lcStrF = STRTRAN(m.lcStrF,m.lcChar,CHR(lnChar)) + ENDIF + NEXT + ENDIF + IF AT([&#x],m.lcStrF)>0 + FOR lnChar = 0 TO 255 + lcChar = [&#x]+RIGHT(TRANSFORM(m.lnChar,"@0"),2)+[;] + IF AT(m.lcChar,m.lcStrF)>0 + lcStrF = STRTRAN(m.lcStrF,m.lcChar,CHR(lnChar)) + ENDIF + NEXT + ENDIF + IF AT('&',m.lcStrF)>0 + lcStrF = STRTRAN(m.lcStrF,'&',CHR(38)) + ENDIF + + * suggested by Koen Piller + lcStrF = STRCONV(m.lcStrF,11) + RETURN m.lcStrF +ENDFUNC + +***************** +* Cleanup +****************** +FUNCTION cleanup + LPARAMETERS lcDir,llServer + LOCAL lcZip,lcSetSaf,loErr as Exception + lcZip = FORCEEXT(m.lcDir,'zip') + lcSetSaf = SET("Safety") + SET SAFETY OFF + TRY + IF m.llServer + ERASE (ADDBS(ADDBS(m.lcDir)+'worksheets\_rels')+'*.*') + RD (ADDBS(m.lcDir)+'worksheets\_rels')) + ERASE (ADDBS(ADDBS(m.lcDir)+'worksheets')+'*.*') + RD (ADDBS(m.lcDir)+'worksheets')) + ENDIF + ERASE (ADDBS(m.lcDir)+'*.*') + RD (m.lcDir) + CATCH TO loErr + THROW m.loErr + ENDTRY + + ERASE (m.lcZip) + SET SAFETY &lcSetSaf +RETURN .T. + +***************** +* Read workbook * +***************** +FUNCTION get_sheet +LPARAMETERS lcStr,lcSheet + LOCAL lnF,lcRealSheet,lcBuff,lcMemo,lni,lcRealSheet,lcCurSheet + lnF = FOPEN(m.lcStr) + lcRealSheet = '' + IF m.lnF >= 0 + lcBuff = FREAD(m.lnf,8192) + lcMemo = STREXTRACT(m.lcBuff,[],[]) + IF VARTYPE(m.lcSheet) == "N" + IF BETWEEN(m.lcSheet,1,OCCURS([name="],m.lcMemo)) + lcRealSheet = 'sheet' + LTRIM(STR(m.lcSheet)) + ENDIF + ELSE + IF EMPTY(m.lcSheet) + lcRealSheet = 'sheet1' + ELSE + FOR lni = 1 TO OCCURS([name="],m.lcMemo) + lcCurSheet = STREXTRACT(m.lcMemo,[name="],["],m.lni) + IF LOWER(ALLTRIM(m.lcCurSheet)) == LOWER(ALLTRIM(m.lcSheet)) + lcRealSheet = 'sheet' + TRANSFORM(m.lni) + EXIT + ENDIF + NEXT + ENDIF + ENDIF + ELSE + MESSAGEBOX(ERRMESS4 + ' workbook.xml',16,'Error') + ENDIF + FCLOSE(m.lnF) +RETURN m.lcRealSheet diff --git a/COMUN/programe/ini.prg b/COMUN/programe/ini.prg new file mode 100644 index 0000000..017b610 --- /dev/null +++ b/COMUN/programe/ini.prg @@ -0,0 +1,371 @@ +FUNCTION setini + PARAMETER pcinifile, pcsection, ; + pcvar, pcval + PRIVATE lasect + PRIVATE lavars + PRIVATE ALL LIKE j* + DIMENSION lasect[1], lavars[ 1,3] + jlsuccess = .T. + IF .NOT. EMPTY(pcinifile) + jcfilename = IIF(AT('.', ; + pcinifile) > 0, ; + pcinifile, ; + pcinifile + ; + '.INI') + pcsection = ALLTRIM(pcsection) + pcvar = ALLTRIM(pcvar) + pcval = ALLTRIM(pcval) + IF FILE(jcfilename) + jnhandle = FOPEN(jcfilename, ; + 2) + IF jnhandle < 0 + jlsuccess = .F. + = messagebox( ; + 'Unable to open file: ' + ; + jcfilename, ; + 'File Open Error', ; + 0) + RETURN jlsuccess + ENDIF + ELSE + jnhandle = -1 + ENDIF + = buildarray(jnhandle, ; + @lasect,@lavars) + IF jnhandle > -1 + = FCLOSE(jnhandle) + ENDIF + jsuccess = buildini(jcfilename, ; + pcsection,pcvar, ; + pcval,@lasect, ; + @lavars) + ELSE + jlsuccess = .F. + ENDIF + RETURN jlsuccess +ENDFUNC && setini +*!* +FUNCTION buildini + PARAMETER pcfilename, pcsection, ; + pcvar, pcval, pasect, ; + pavars + PRIVATE ALL LIKE j* + jlsuccess = .T. + jnfhandle = 0 + jlfoundvar = .F. + jnfound = 0 + IF .NOT. EMPTY(pasect) + FOR jncount = 1 TO ; + ALEN(pasect, 1) + IF UPPER(pasect(jncount)) == ; + UPPER(pcsection) + jnfound = jncount + EXIT + ENDIF + ENDFOR + ENDIF + IF jnfound > 0 + FOR jncount = 1 TO ; + ALEN(pavars, 1) + IF pavars(jncount,1) == ; + pcvar .AND. ; + pavars(jncount,3) == ; + jnfound + pavars[ jncount, ; + 2] = pcval + jlfoundvar = .T. + EXIT + ENDIF + ENDFOR + IF .NOT. jlfoundvar + IF .NOT. ; + EMPTY(pavars(1)) + jnlen2 = ALEN(pavars, ; + 1) + 1 + DIMENSION pavars[ ; + jnlen2, ; + 3] + ELSE + jnlen2 = 1 + ENDIF + pavars[ jnlen2, 1] = ; + pcvar + pavars[ jnlen2, 2] = ; + pcval + pavars[ jnlen2, 3] = ; + jnfound + ENDIF + ELSE + IF .NOT. EMPTY(pasect(1)) + jnlen = ALEN(pasect, 1) + ; + 1 + DIMENSION pasect[ ; + jnlen] + ELSE + jnlen = 1 + ENDIF + pasect[ jnlen] = pcsection + IF .NOT. EMPTY(pavars(1)) + jnlen2 = ALEN(pavars, ; + 1) + 1 + DIMENSION pavars[ ; + jnlen2, 3] + ELSE + jnlen2 = 1 + ENDIF + pavars[ jnlen2, 1] = pcvar + pavars[ jnlen2, 2] = pcval + pavars[ jnlen2, 3] = jnlen + ENDIF + IF FILE(pcfilename) + jcoldfile = SUBSTR(pcfilename, ; + 1, AT('.', ; + pcfilename) - 1) + ; + '.BAK' + IF FILE(jcoldfile) + DELETE FILE (jcoldfile) + ENDIF + RENAME (pcfilename) TO ; + (jcoldfile) + ENDIF + jnfhandle = FCREATE(pcfilename) + IF .NOT. jnfhandle == -1 .AND. ; + .NOT. EMPTY(pasect) + FOR ncount = 1 TO ; + ALEN(pasect, 1) + IF (';' $ ; + pasect(ncount)) .OR. ; + EMPTY(pasect(ncount)) + = FPUTS(jnfhandle, ; + pasect(ncount)) + ELSE + = FPUTS(jnfhandle, ; + '[' + ; + pasect(ncount) + ; + ']') + ENDIF + FOR ncount2 = 1 TO ; + ALEN(pavars, 1) + IF pavars(ncount2, ; + 3) == ncount + = FPUTS(jnfhandle, ; + pavars(ncount2, ; + 1) + ' = ' + ; + pavars(ncount2, ; + 2)) + ENDIF + ENDFOR + ENDFOR + = FCLOSE(jnfhandle) + ELSE + = messagebox( ; + 'Unable to create file: ' + ; + jcfilename, ; + 'File create error',0) + jlsuccess = .F. + ENDIF + RETURN jlsuccess +ENDFUNC && buildini +*!* +FUNCTION buildarray + PARAMETER pnfhandle, pasect, ; + pavars + PRIVATE ALL LIKE j* + jnalen = 1 + jnvarlen = 1 + IF pnfhandle > -1 + = FSEEK(pnfhandle, 0) + DO WHILE .NOT. ; + FEOF(pnfhandle) + jcline = FGETS(pnfhandle) + IF ';' $ jcline .OR. ; + EMPTY(jcline) + IF EMPTY(pasect(1)) + pasect[ 1] = ; + jcline + ELSE + jnalen = ALEN(pasect, ; + 1) + ; + 1 + DIMENSION pasect[ ; + jnalen] + pasect[ ; + jnalen] = ; + jcline + ENDIF + ELSE + jnfound1 = AT('[', jcline) + jnfound2 = AT(']', jcline) + IF jnfound1 > 0 .AND. jnfound2 > 0 + jcsection = SUBSTR(jcline, ; + jnfound1 + ; + 1, ; + jnfound2 - ; + 2) + IF EMPTY(pasect(1)) + pasect[ ; + 1] = ; + jcsection + ELSE + jnalen = ; + ALEN(pasect, ; + 1) + 1 + DIMENSION ; + pasect[ ; + jnalen] + pasect[ ; + jnalen] = ; + jcsection + ENDIF + jnalen = ALEN(pasect, ; + 1) + ELSE + IF AT('=', ; + jcline) > ; + 0 + IF EMPTY(pavars(1, ; + 1)) + pavars[ ; + 1, ; + 1] = ; + ALLTRIM(SUBSTR(jcline, ; + 1, ; + AT( ; + '=', ; + jcline) - ; + 1)) + pavars[ ; + 1, ; + 2] = ; + ALLTRIM(SUBSTR(jcline, ; + AT( ; + '=', ; + jcline) + ; + 1)) + pavars[ ; + 1, ; + 3] = ; + jnalen + ELSE + jnvarlen = ; + ALEN(pavars, ; + 1) + ; + 1 + DIMENSION ; + pavars[ ; + jnvarlen, ; + 3] + pavars[ ; + jnvarlen, ; + 1] = ; + ALLTRIM(SUBSTR(jcline, ; + 1, ; + AT( ; + '=', ; + jcline) - ; + 1)) + pavars[ ; + jnvarlen, ; + 2] = ; + ALLTRIM(SUBSTR(jcline, ; + AT( ; + '=', ; + jcline) + ; + 1)) + pavars[ ; + jnvarlen, ; + 3] = ; + jnalen + ENDIF + ENDIF + ENDIF + ENDIF + ENDDO + ENDIF + RETURN .T. +ENDFUNC && buildarray +*!* +FUNCTION getini + PARAMETER pcinifile, pcsection, ; + pcvar + PRIVATE ALL LIKE j* + jcretval = '' + IF .NOT. EMPTY(pcinifile) + jcfilename = IIF(AT('.', ; + pcinifile) > 0, ; + pcinifile, ; + pcinifile + ; + '.INI') + IF FILE(jcfilename) + jnhandle = FOPEN(jcfilename) + IF jnhandle < 0 + jlsuccess = .F. + = messagebox( ; + 'Unable to open file: ' + ; + jcfilename, ; + 'File Open Error', ; + 0) + ELSE + pcsection = ALLTRIM(UPPER(pcsection)) + pcvar = ALLTRIM(UPPER(pcvar)) + jcretval = readini(@jnhandle, ; + pcsection, ; + pcvar) + = FCLOSE(jnhandle) + ENDIF + ENDIF + ENDIF + RETURN jcretval +ENDFUNC && getini +*!* +FUNCTION readini + PARAMETER pnfhandle, pcsection, ; + pcvar + PRIVATE ALL LIKE j* + jcline = '' + jcsection = '' + jnfound1 = 0 + jnfound2 = 0 + jnfound3 = 0 + jnalen = 0 + jcretval = '' + IF .NOT. EMPTY(pnfhandle) + = FSEEK(pnfhandle, 0) + DO WHILE .NOT. ; + FEOF(pnfhandle) + jcline = FGETS(pnfhandle) + jnfound1 = AT('[', ; + jcline) + jnfound2 = AT(']', ; + jcline) + IF jnfound1 > 0 .AND. ; + jnfound2 > 0 + jcsection = UPPER(SUBSTR(jcline, ; + jnfound1 + ; + 1, ; + jnfound2 - ; + 2)) + ENDIF + IF jcsection == ; + pcsection + jnfound3 = AT('=', ; + jcline) + IF jnfound3 > 0 + IF ALLTRIM(UPPER(SUBSTR(jcline, ; + 1, ; + jnfound3 - ; + 1))) == ; + pcvar + jcretval = ; + ALLTRIM(SUBSTR(jcline, ; + jnfound3 + ; + 1)) + EXIT + ENDIF + ENDIF + ENDIF + ENDDO + ENDIF + RETURN jcretval +ENDFUNC && readini + diff --git a/COMUN/programe/iniacces.prg b/COMUN/programe/iniacces.prg new file mode 100644 index 0000000..8cae174 --- /dev/null +++ b/COMUN/programe/iniacces.prg @@ -0,0 +1,148 @@ +#include comun\include\security.h + +Define Class iniaccess As Custom + cIniFile="" + + Function Init + This.cIniFile=shortpath(GetIniPath()) + Endfunc + + Function setCValue + Lparameters tcSection, tcSetting, tcValue + Local lcFisierIni + lcFisierIni = This.cIniFile + + DECLARE INTEGER WritePrivateProfileString ; + IN WIN32API ; + STRING cSection,STRING cEntry,STRING cEntry,; + STRING cFileName + + Return WritePrivateProfileString(tcSection,tcSetting,tcValue,lcFisierIni) + Endfunc + + Function getCValue As Character + Lparameters tcSection,tcSetting + Local lcFisierIni + lcFisierIni=This.cIniFile + lcBuffer=Space(255) + + DECLARE INTEGER GetPrivateProfileString ; + IN WIN32API ; + STRING cSection,; + STRING cEntry,; + STRING cDefault,; + STRING @cRetVal,; + INTEGER nSize,; + STRING cFileName + + GetPrivateProfileString(tcSection,tcSetting,"",@lcBuffer, Len(lcBuffer), lcFisierIni) + lcBuffer = Strtran(lcBuffer,Chr(0),"") + lcBuffer = Alltrim(lcBuffer) + Return lcBuffer + Endfunc + + Function setUF + Lparameters cUFvalue + Return This.setCValue("update","UpdateFrequency",cUFvalue) + Endfunc + + Function setNetworkPath + Lparameters cNPvalue + Return This.setCValue("update","NetworkPath",cNPvalue) + Endfunc + + Function setURL + Lparameters cURLvalue + Return This.setCValue("update","InternetPath",cURLvalue) + Endfunc + + Function setUsername + Lparameters cUsername + Return This.setCValue("update","Username",cUsername) + Endfunc + + Function setPassword + Lparameters cPassword + cPassword=EncryptDecrypt(cPassword, ENCRYPTKEY, "encrypt","blowfish") + cPassword=Strconv(cPassword,13) + Return This.setCValue("update","Password",cPassword) + Endfunc + + Function setPasswordDirect + Lparameters cPassword + Return This.setCValue("update","Password",cPassword) + Endfunc + + Function SetDefault + Lparameters cDefaultvalue + Return This.setCValue("update","DefaultPath",cDefaultvalue) + Endfunc + + Function setLocalExe + Lparameters cDefaultvalue + Return This.setCValue("update","exepath",cDefaultvalue) + Endfunc + + Function setAllowConfirm + Lparameters cDefaultvalue + Return This.setCValue("update","AllowConfirm",cDefaultvalue) + Endfunc + + Function setLastServer + Lparameters cLastServer + Return This.setCValue("server","last",cLastServer) + Endfunc + + Function getUF As Character + Return This.getCValue("update","UpdateFrequency") + Endfunc + + Function getNetworkPath As Character + Return This.getCValue("update","NetworkPath") + Endfunc + + Function getLocalExe As Character + Return This.getCValue("update","exepath") + Endfunc + + Function getURL As Character + Return This.getCValue("update","InternetPath") + Endfunc + + Function getDefault As Character + Return This.getCValue("update","DefaultPath") + Endfunc + + Function getUsername As Character + Return This.getCValue("update","Username") + Endfunc + + Function getPassword As Character + Local lcParola + lcParola = This.getCValue("update","Password") + If Len(lcParola)>0 + lcParola =Alltrim(Strconv(lcParola ,14)) + lcParola = EncryptDecrypt(lcParola, ENCRYPTKEY, "decrypt","blowfish") + Endif + Return lcParola + Endfunc + + Function getPasswordDirect As Character + Return This.getCValue("update","Password") + Endfunc + + Function getAllowConfirm As Boolean + Local lcValoare + lcValoare = This.getCValue( "update","AllowConfirm") + If Upper(lcValoare)=Upper("True") + Return .T. + Else + Return .F. + Endif + Endfunc + + Function getLastServer As Character + Return This.getCValue("server","last") + Endfunc + +Enddefine diff --git a/COMUN/programe/init_program.prg b/COMUN/programe/init_program.prg new file mode 100644 index 0000000..69a24c8 --- /dev/null +++ b/COMUN/programe/init_program.prg @@ -0,0 +1,448 @@ +&& ------------------------------INCEPUT: Citeste_Cheie ------------------------------ +*!* Functie: Citeste_Cheie +*!* Parametri: tcKey, tcBranch, tcLeafe +*!* Data/Ora generarii: 16/02/2004 14:26:22 +*!* Autor: MARIUS.MUTU +FUNCTION Citeste_Cheie + LPARAMETERS tcKey, tnBranch, tcLeafe + + LOCAL lcRet,loApi, lcKey, lnBranch, lcLeafe + + lcKey = ALLTRIM(tcKey) + lnBranch = tnBranch + lcLeafe = ALLTRIM(tcLeafe) + lcRet = [] + + loApi = CREATE("registry") + + IF loApi.iskey(lcKey, lnBranch) + + loApi.openkey(lcKey, lnBranch,.F.) + lcRet = loApi.getkeyvalue(lcLeafe,) + ENDIF + + RELEASE loApi + RETURN lcRet + +ENDFUNC +&& ------------------------------SFARSIT: Citeste_Cheie ------------------------------ + +&& ------------------------------INCEPUT: Exista_Branch ------------------------------ +*!* Functie: Exista_Branch +*!* Parametri: tcKey +*!* Data/Ora generarii: 18/02/2004 14:01:29 +*!* Autor: MARIUS.MUTU +FUNCTION Exista_Branch + LPARAMETERS tcKey, tnBranch,tcCale + + + LOCAL lcRet,loApi, lcKey, lnBranch + + lccale="serverdate_"+STRTRAN(tcCale,"\","") + + IF EMPTY(tcKey) + lcKey = [contafin\] + lccale + [\util] + ELSE + lcKey = ALLTRIM(tcKey) + ENDIF + + IF EMPTY(tnBranch) + lnBranch = -2147483647 + ELSE + lnBranch = tnBranch + ENDIF + + + llRet = .F. + loApi = CREATE("registry") + IF loApi.iskey(lcKey, lnBranch) + llRet = .T. + ENDIF + + RELEASE loApi + + RETURN llRet + +ENDFUNC +&& ------------------------------SFARSIT: Exista_Branch ------------------------------ + +&& ------------------------------INCEPUT: Verific_Start ------------------------------ +*!* Functia: Verific_Start +*!* Parametri: tcParam +*!* Data/Ora generarii: 16/02/2004 13:32:11 +*!* Autor: MARIUS.MUTU +*!* returneza TRUE daca parametrul trimis codat in binar este egal cu variabila citita din registri +FUNCTION Verific_Start + LPARAMETERS tcSesiune,tcCale,tcAppName + + LOCAL llRet,loApi, lcKey, lnBranch, lcSesiune + + lccale="serverdate_"+STRTRAN(tcCale,"\","") + IF EMPTY(tcAppName) + lcAppName = JUSTSTEM(SYS(16,0)) + ELSE + lcAppName = ALLTRIM(tcAppName) + ENDIF + lcAppName = LOWER(lcAppName) + +*!* lcLog = '1 ' + tcSesiune + ', ' + tcCale +', ' + tcAppName +*!* poLog.Log(lcLog,PROGRAM()) + + llRet = .T. + lcKey = [contafin\]+lccale+[\util] + lnBranch = -2147483647 + lcLeafe = [session] + lcSesiune = [] + + IF EMPTY(tcSesiune) + llRet = .F. + + ELSE + lcSesiune = tcSesiune + + lcSesiune2 = VAL(Citeste_Cheie(lcKey, lnBranch, lcLeafe)) + + + + lcSesiune3 = BINTOC(lcSesiune2,4) + + lcsesiune1=SUBSTR(lcSesiune3,1,1)+SUBSTR(lcSesiune3,3,2) + + lcsesiune1 = STUFF(lcsesiune1,2,0,lcAppName) + + lcSesiune = ALLTRIM(UPPER(lcSesiune)) + lcSesiune1 = ALLTRIM(UPPER(lcSesiune1)) + + lnLen1 = LEN(lcSesiune) + lnLen2 = LEN(lcSesiune1) + + lcCar1 = '' + lcCar2 = '' + FOR i = 1 TO lnLen1 + lcCar = SUBSTR(lcSesiune,i,1) + lcCar1 = lcCar1 + TRANSFORM(ASC(lcCar)) + "_" + ENDFOR + FOR i = 1 TO lnLen2 + lcCar = SUBSTR(lcSesiune1,i,1) + lcCar2 = lcCar2 + TRANSFORM(ASC(lcCar)) + "_" + ENDFOR + +*!* lcLog = '1 ' + lcCar1 +*!* poLog.Log(lcLog,PROGRAM()) +*!* lcLog = '2 ' + lcCar2 +*!* poLog.Log(lcLog,PROGRAM()) + + IF LEN(lcSesiune1)>LEN(lcSesiune) + lcSesiune1 = LEFT(lcSesiune1,LEN(lcSesiune)) + ENDIF + + lnLen1 = LEN(lcSesiune) + lnLen2 = LEN(lcSesiune1) + + lcCar1 = '' + lcCar2 = '' + FOR i = 1 TO lnLen1 + lcCar = SUBSTR(lcSesiune,i,1) + lcCar1 = lcCar1 + TRANSFORM(ASC(lcCar)) + "_" + ENDFOR + FOR i = 1 TO lnLen2 + lcCar = SUBSTR(lcSesiune1,i,1) + lcCar2 = lcCar2 + TRANSFORM(ASC(lcCar)) + "_" + ENDFOR + +*!* lcLog = '3 ' + lcCar1 +*!* poLog.Log(lcLog,PROGRAM()) +*!* lcLog = '4 ' + lcCar2 +*!* poLog.Log(lcLog,PROGRAM()) + + IF SYS(2007,lcSesiune) # SYS(2007,lcSesiune1) + llRet = .F. + + ENDIF + ENDIF + +*!* lcLog = '4 llret ' + TRANSFORM(llRet) +*!* poLog.Log(lcLog,PROGRAM()) + + + RETURN llRet + +ENDFUNC +&& ------------------------------SFARSIT: Verific_Start ------------------------------ + +&& ------------------------------INCEPUT: Init_Cale_Temp------------------------------ +*!* Functia: Init_Cale_Temp +*!* Parametri: +*!* Data/Ora generarii: 16/02/2004 13:32:11 +*!* Autor: MARIUS.MUTU +*!* citeste directorul temporar din registrii si il creeaza +FUNCTION Init_Cale_Temp + PARAMETERS tcCale +* lccale="serverdate_"+STRTRAN(tccale,"\","") + + LOCAL lcTempPath,loApi, lcKey, lnBranch, lcSesiune + llRet = .T. + lcKey = [contafin\temporare] +* lcKey = [contafin\]+lccale+[\temporare] + lnBranch = -2147483647 + lcLeafe = [temp] + + + lcTempPath=Citeste_Cheie(lcKey, lnBranch, lcLeafe) + + RETURN lcTempPath + +ENDFUNC +&& ------------------------------SFARSIT: Init_Cale_Temp------------------------------ + +&& ------------------------------INCEPUT: Init_Cale_Server_Date ------------------------------ +*!* Functia: Init_Cale_Server_Date +*!* Parametri: +*!* Data/Ora generarii: 16/02/2004 13:32:11 +*!* Autor: MARIUS.MUTU +*!* citeste calea serverului de date din registri +FUNCTION Init_Cale_Server_Date + PARAMETERS tcCale + lccale="serverdate_"+STRTRAN(tcCale,"\","") + LOCAL lcCaleServerDate, loApi, lcKey, lnBranch, lcSesiune + lcCaleServerDate= [] + lcKey = [contafin\]+lccale + lnBranch = -2147483647 + lcLeafe = [cale] + + + lcCaleServerDate=Citeste_Cheie(lcKey, lnBranch, lcLeafe) + + + RETURN lcCaleServerDate + +ENDFUNC +&& ------------------------------SFARSIT: Init_Cale_Server_Date ------------------------------ + +&& ------------------------------INCEPUT: Init_Nume_Utilizator ------------------------------ +*!* Functia: Init_Nume_Utilizator +*!* Parametri: +*!* Data/Ora generarii: 16/02/2004 13:32:11 +*!* Autor: MARIUS.MUTU +*!* citeste numele utilizatorului logat la START din registri +FUNCTION Init_Nume_Utilizator + PARAMETERS tcCale + + LOCAL lcNumeUtilizator, loApi, lcKey, lnBranch, lcSesiune + + lccale="serverdate_"+STRTRAN(tcCale,"\","") + lcNumeUtilizator = [] + lcKey = [contafin\]+lccale+[\util] + lnBranch = -2147483647 + lcLeafe = [nume] + + + lcNumeUtilizator=Citeste_Cheie(lcKey, lnBranch, lcLeafe) + + + RETURN lcNumeUtilizator + +ENDFUNC +&& ------------------------------SFARSIT: Init_Nume_Utilizator------------------------------ +&& ------------------------------INCEPUT: Init_Id_Utilizator ------------------------------ +*!* Functia: Init_Id_Utilizator +*!* Parametri: +*!* Data/Ora generarii: 16/02/2004 13:32:11 +*!* Autor: MARIUS.MUTU +*!* citeste numele utilizatorului logat la START din registri +FUNCTION Init_Id_Utilizator + PARAMETERS tcCale + + LOCAL lnId_Utilizator, loApi, lcKey, lnBranch, lcSesiune + + lccale="serverdate_"+STRTRAN(tcCale,"\","") + lcNumeUtilizator = [] + lcKey = [contafin\]+lccale+[\util] + lnBranch = -2147483647 + lcLeafe = [id_util] + + + lnId_Utilizator=Citeste_Cheie(lcKey, lnBranch, lcLeafe) + + + RETURN lnId_Utilizator + +ENDFUNC +&& ------------------------------SFARSIT: Init_Id_Utilizator ------------------------------ +&& ------------------------------INCEPUT: Init_Nivel_Utilizator ------------------------------ +*!* Functia: Init_Nivel_Utilizator +*!* Parametri: +*!* Data/Ora generarii: 16/02/2004 13:32:11 +*!* Autor: MARIUS.MUTU +*!* citeste nivelul utilizatorului logat la START din registri +FUNCTION Init_Nivel_Utilizator + PARAMETERS tcCale + lccale="serverdate_"+STRTRAN(tcCale,"\","") + LOCAL lcNivelUtilizator, loApi, lcKey, lnBranch, lcSesiune + lcNumeUtilizator = [] + lcKey = [contafin\]+lccale+[\prog\]+gcAppName + lnBranch = -2147483647 + lcLeafe = [nivel] + + + lcNivelUtilizator=Citeste_Cheie(lcKey, lnBranch, lcLeafe) + + + RETURN lcNivelUtilizator + +ENDFUNC +&& ------------------------------SFARSIT: Init_Nume_Utilizator------------------------------ + +&& ------------------------------INCEPUT: Init_Nume_Statie------------------------------ +*!* Functia: Init_Nume_Statie +*!* Parametri: +*!* Data/Ora generarii: 16/02/2004 13:32:11 +*!* Autor: MARIUS.MUTU +*!* citeste numele statiei +FUNCTION Init_Nume_Statie + PARAMETERS tcCale + lccale="serverdate_"+STRTRAN(tcCale,"\","") + LOCAL lcNumeStatie, loApi, lcKey, lnBranch + lcNumeStatie= [] + lcKey = [contafin\]+lccale + lnBranch = -2147483647 + lcLeafe = [numestatie] + + + lcNumeStatie=Citeste_Cheie(lcKey, lnBranch, lcLeafe) + + + RETURN lcNumeStatie + +ENDFUNC +&& ------------------------------SFARSIT: Init_Nume_Statie + +&& ------------------------------INCEPUT: Init_NumeAlternativ------------------------------ +*!* Functia: Init_NumeAlternativ +*!* Parametri: +*!* Data/Ora generarii: 18/02/2004 16:29:11 +*!* Autor: MARIUS.MUTU +*!* citeste nume2 ex: (CONT2003) CASA +FUNCTION Init_NumeAlternativ + PARAMETERS tcCale,tcAppName + LOCAL lcNumeAlternativ, loApi, lcKey, lnBranch + lccale="serverdate_"+STRTRAN(tcCale,"\","") + IF EMPTY(tcAppName) + lcAppName = JUSTSTEM(SYS(16,0)) + ELSE + lcAppName = ALLTRIM(tcAppName) + ENDIF + + lcNumeAlternativ= [] +* lcKey = [contafin\prog\]+gcAppName + lcKey = [contafin\]+lccale+[\prog\]+lcAppName + lnBranch = -2147483647 + lcLeafe = [nume2] + + + lcNumeAlternativ = Citeste_Cheie(lcKey, lnBranch, lcLeafe) + + + RETURN lcNumeAlternativ + +ENDFUNC +&& ------------------------------SFARSIT: Init_NumeAlternativ + +&& ------------------------------INCEPUT: Start_Istoric ------------------------------ +*!* Functie: Start_Istoric +*!* Parametri: tcNumeUtilizator, tcNumeProgram, tcNumeStatie +*!* Data/Ora generarii: 08/03/2004 15:31:58 +*!* Autor: MARIUS.MUTU +FUNCTION Start_Istoric + LPARAMETERS tcNumeUtilizator, tcNumeProgram, tcNumeStatie, tcCaleIstoric, tcNumeIstoric, tcNumeIds + + lcNumeUtilizator = ALLTRIM(tcNumeUtilizator) + lcNumeProgram = ALLTRIM(tcNumeProgram) + lcNumeStatie = ALLTRIM(tcNumeStatie) + lcCaleIstoric = ADDBS(tcCaleIstoric) + lcNumeIstoric = ALLTRIM(tcNumeIstoric) + lcNumeIds = ALLTRIM(tcNumeIds) + + lcNume = ALLTRIM(lcNumeIstoric) + lcFile = ADDBS(lcCaleIstoric) + lcNumeIstoric + ".dbf" + + IF !FILE(lcFile) + RETURN + ENDIF + + llUsed = .T. + IF !USED('Istoric') + USE (lcFile) IN 0 SHARED AGAIN ALIAS Istoric + llUsed = .F. + ENDIF + + lcFile = ADDBS(lcCaleIstoric) + lcNumeIDS + ".dbf" + IF !FILE(lcFile) + RETURN + ENDIF + + llUsed2 = .T. + IF !USED('ids') + USE (lcFile) IN 0 SHARED AGAIN ALIAS Ids + llUsed2 = .F. + ENDIF + + lnNewId = new_id("istoric","id",.T.) + SELECT Istoric + IF FLOCK() + APPEND BLANK + REPLACE ID WITH lnNewId, statie WITH lcNUMESTATIE, PROGRAM WITH lcNumeProgram, utilizator WITH lcNumeUtilizator, dataoraint WITH DATETIME() + UNLOCK + ENDIF + + IF !llUsed + USE IN Istoric + ENDIF + + IF !llUsed2 + USE IN ids + ENDIF + + RETURN lnNewId + +ENDFUNC +&& ------------------------------SFARSIT: Start_Istoric ------------------------------ + +&& ------------------------------INCEPUT: End_Istoric ------------------------------ +*!* Functie: End_Istoric +*!* Parametri: tnIdIstoric +*!* Data/Ora generarii: 08/03/2004 15:51:32 +*!* Autor: MARIUS.MUTU +FUNCTION End_Istoric + LPARAMETERS tnIdIstoric, tcCaleIstoric, tcNumeIstoric + + lcCaleIstoric = ADDBS(tcCaleIstoric) + lcNumeIstoric = ALLTRIM(tcNumeIstoric) + + lcNume = ALLTRIM(lcNumeIstoric) + lcFile = ADDBS(lcCaleIstoric) + lcNume + ".dbf" + IF !FILE(lcFile) + RETURN + ENDIF + + llUsed = .T. + IF !USED('Istoric') + USE (lcFile) IN 0 SHARED AGAIN ALIAS Istoric + llUsed = .F. + ENDIF + + SELECT Istoric + LOCATE FOR ID = tnIdIstoric + IF FOUND() + IF FLOCK() + REPLACE dataoraies WITH DATETIME() + UNLOCK + ENDIF + ENDIF + + IF !llUsed + USE IN Istoric + ENDIF + +ENDFUNC +&& ------------------------------SFARSIT: End_Istoric ------------------------------ diff --git a/COMUN/programe/lista2cursor.prg b/COMUN/programe/lista2cursor.prg new file mode 100644 index 0000000..9409771 --- /dev/null +++ b/COMUN/programe/lista2cursor.prg @@ -0,0 +1,38 @@ +PROCEDURE lista2cursor +PARAMETERS tcLISTA,tcAlias,tcCol1,tcSeparator +&& tcLista este un sir de caractere care contine elementele separate prin <;> default +&& tcAlias este cursorul care se completeaza - trebuie dat prin referinta +&& tcSeparator separatorul de elemente din tcLista - default este ";" - este optional +&& intoarce numarul de elemente gasite + +&& ex: lnNr = lista2array("ana;are;mere",@alista,";") + LOCAL Lclista,lcSeparator,lnNRF,lcF1,i + + lcLista=UPPER(ALLT(tcLISTA)) + IF PARAMETERS()<3 OR EMPTY(tcSeparator) + lcSeparator=";" + ELSE + lcSeparator=ALLTRIM(tcSeparator) + ENDIF + + IF RIGHT(Lclista,1)!=lcSeparator + Lclista=Lclista+lcSeparator + ENDIF + + lnNRF=OCCURS(lcSeparator,lcLista) + + + FOR i=1 TO lnNRF + lcF1=LEFT(lcLista,AT(lcSeparator,lcLista)-1) + + IF i!=lnNRF + lcLista=SUBSTR(lcLista,AT(lcSeparator,lcLista)+1) + ENDIF + + INSERT INTO (tcAlias) (&tcCol1) VALUES (lcF1) + + ENDFOR + + RETURN lnNrf + +ENDPROC && lista2cursor \ No newline at end of file diff --git a/COMUN/programe/locale_genmenu.prg b/COMUN/programe/locale_genmenu.prg new file mode 100644 index 0000000..adc9c79 --- /dev/null +++ b/COMUN/programe/locale_genmenu.prg @@ -0,0 +1,108 @@ +* Program: _LOCALE_GENMENU.PRG +* Description: Loader to GenMenu.prg to adjust PROMPT and MESSAGE clauses for Localization. +* Created: 02/16/2004 +* Developer: Gregory L Reichert +* Copyright: Copyright (c) 2004 GLR software +*------------------------------------------------------------ + +*-------------------------------------------- +* Setup instructions. +* 1. From the main menu, Open the Options dialogs. +* 2. Click the "File Locations" tab. +* 3. Locate the "Menu Builder" item in the list. +* 4. Doble-Click the "Menu Builder" item. +* 5. Change the file reference to point to this file. +* 6. Click the "Save as Default" button. +* 7. Click the "Ok" button. +*-------------------------------------------- + + +PARAMETER m.projdbf, m.recno + +LOCAL cResult, cPath, cc +cPath = SET("Path") +cc = HOME()+";&cPath" +SET PATH TO &cc +cResult = GenMenu( (m.projdbf), (m.recno) ) +SET PATH TO &cPath + +LOCAL MenuName, cMenu +LOCAL lcLocaleObjName +lcLocaleObjName = [goLocale] + +*-------------------------------------------- +* Get menu name +*-------------------------------------------- + +USE IN (SELECT("qMenu")) +USE (m.projdbf) AGAIN IN 0 NOUPDATE ALIAS qMenu +SELECT qMenu +GOTO (m.recno) +m.MenuName = qMenu.NAME +USE IN qMenu + +*-------------------------------------------- +* If there is a "*:Locale=Yes" in the Procedure section of +* the "View->General Options", setup for translations. +*-------------------------------------------- +SELECT 0 +lcMenuFile = LEFT(m.projdbf, RAT('\', m.projdbf)) + m.MenuName +USE (m.lcMenuFile) AGAIN NOUPDATE ALIAS qMenu +GOTO TOP +m.Proc = ALLTRIM(qMenu.procedure) +USE +IF ATC("*:Locale=Yes",m.Proc)>0 + + lcMenuFile = STRTRAN(LOWER(lcMenuFile),".mnx",".mpr") + + CREATE CURSOR qMenu (LINE c(250)) + APPEND FROM (lcMenuFile) TYPE SDF + + LOCAL cLine, i, cMenu + cMenu = "" + SCAN ALL + cLine = ALLTRIM(qMenu.LINE) + + *%% Gregory L Reichert 02/16/2004 LOCALE_GENMENU.PRG : 800 : BUGBUG : Making direct reference to oLocale. It may be on Form or _SCREEN at runtime. + DO CASE + CASE ATCC([DEFINE PAD ],cLine)>0 AND ATCC([PROMPT "],cLine)>0 + i = ATCC([PROMPT "],cLine)+7 + cLine = STUFFC(cLine,i,1, lcLocaleObjName + [.getString("]) + i = RATC([" COLOR ],cLine,1) + cLine = STUFFC(cLine,i,1,[")]) + CASE ATCC([DEFINE BAR ],cLine)>0 AND ATCC([PROMPT "],cLine)>0 + i = ATCC([PROMPT "],cLine)+7 + cLine = STUFFC(cLine,i,1,lcLocaleObjName + [.getString("]) + i = RATC(["],cLine,1) + cLine = STUFFC(cLine,i,1,[")]) + CASE ATCC([MESSAGE "],cLine)>0 + i = ATCC([MESSAGE "],cLine)+8 + cLine = STUFFC(cLine,i,1,lcLocaleObjName + [.getString("]) + i = ratc(["],cLine,1) + cLine = STUFFC(cLine,i,1,[")]) + CASE ATCC([TITLE "],cLine)>0 + i = ATCC([TITLE "],cLine)+8 + cLine = STUFFC(cLine,i,1,lcLocaleObjName + [.getString("]) + i = ratc(["],cLine,1) + cLine = STUFFC(cLine,i,1,[")]) + CASE ATCC([FOOTER "],cLine)>0 + i = ATCC([FOOTER "],cLine)+8 + cLine = STUFFC(cLine,i,1,lcLocaleObjName + [.getString("]) + i = ratc(["],cLine,1) + cLine = STUFFC(cLine,i,1,[")]) + ENDCASE + + cLine = STRTRAN(cLine,"rat(","rat_c(") + cLine = STRTRAN(cLine,"ratc(","ratcc(") + cLine = STRTRAN(cLine,"at(","at_c(") + cLine = STRTRAN(cLine,"atc(","atcc(") + + cMenu = cMenu + cLine + CHR(13)+CHR(10) + ENDSCAN + STRTOFILE(cMenu, lcMenuFile, .F.) + USE IN qMenu +ENDIF + +RETURN m.cResult + + diff --git a/COMUN/programe/log_mesaje.prg b/COMUN/programe/log_mesaje.prg new file mode 100644 index 0000000..efbd8d5 --- /dev/null +++ b/COMUN/programe/log_mesaje.prg @@ -0,0 +1,84 @@ +#DEFINE CRLF CHR(13) + CHR(10) + +DEFINE CLASS log_mesaje as Relation + +cLogFile = "" + +&& ------------------------------INCEPUT: Init ------------------------------ +*!* Procedura: Init +*!* Parametri: +*!* Data/Ora generarii: 20/02/2004 12:41:53 +*!* Autor: MARIUS.MUTU +PROCEDURE Init + LPARAMETERS tcLogFile, tlAdditive + + LOCAL lcLogFile, llAdditive + LOCAL loEx as Exception + lcLogFile = IIF(TYPE('tcLogFile') = 'C', m.tcLogFile, ADDBS(SHORTPATH(JUSTPATH(SYS(16,0)))) + "log.txt") + this.cLogFile = m.lcLogFile + + SET console off + SET TALK OFF + + + IF PARAMETERS() < 2 + llAdditive = .T. + ELSE + llAdditive = tlAdditive + ENDIF + + IF FILE(lcLogFile) + lcText = TTOC(DATETIME()) + " " + SYS(0) + IIF(TYPE('GCS')='C'," " + GCS,"") + CRLF + + TRY + STRTOFILE(lcText, lcLogFile, llAdditive) + CATCH TO loEx + * nu pot sa scriu in log + ENDTRY + ENDIF && file(lcLogFile) + +ENDPROC +&& ------------------------------SFARSIT: Init ------------------------------ + +&& ------------------------------INCEPUT: Log ------------------------------ +*!* Procedura: Log +*!* Parametri: tcText +*!* Data/Ora generarii: 20/02/2004 12:48:57 +*!* Autor: MARIUS.MUTU +PROCEDURE Log + LPARAMETERS tcText, tcProgram + + LOCAL lcText, lcLogFile + LOCAL loEx as Exception + lcLogFile = this.cLogFile + IF !FILE(lcLogFile) + RETURN + ENDIF + + SET console off + SET TALK OFF + + lcText = IIF(EMPTY(tcText),"",ALLTRIM(tcText)) + lcProgram = IIF(EMPTY(tcProgram),"",ALLTRIM(tcProgram)) + lcSpatiu = SPACE(10) + lcSeparator = " *** " + + IF FILE(lcLogFile) + lcText = TTOC(DATETIME()) + " " + SYS(0) + IIF(TYPE('GCS')='C'," " + GCS,"") + m.lcSeparator + ; + IIF(!EMPTY(lcProgram),lcProgram,"") + IIF(!EMPTY(lcText),lcSpatiu+lcText,"") + CRLF + + TRY + STRTOFILE(lcText, lcLogFile, .T.) + CATCH TO loEx + * nu pot sa scriu in log + ENDTRY + ENDIF && file(lcLogFile) + +ENDPROC +&& ------------------------------SFARSIT: Log ------------------------------ +Procedure WriteLog + Lparameters tcText, tcProgram + This.Log(m.tcText, m.tcProgram) + ENDPROC && WriteLog + +ENDDEFINE && log_mesaje \ No newline at end of file diff --git a/COMUN/programe/makexmlfacturaelectronica.prg b/COMUN/programe/makexmlfacturaelectronica.prg new file mode 100644 index 0000000..3f65b94 --- /dev/null +++ b/COMUN/programe/makexmlfacturaelectronica.prg @@ -0,0 +1,1157 @@ +PROCEDURE makexmlfacturaelectronica + +LPARAMETERS plrectificativa, ; + mlnumefisier, ; + plcalefacturi +LOCAL mtipfactura, i, mlinii, ; + mliniireducere, ; + mliniistornare, mid, ; + maccize, mtotalcharges, ; + mtotalallowances, mmoneda, ; + minvoicetype, mcodfiscal, ; + mcomanda, mtara, mtiptert, ; + mtiptvacurent, mtvai, ; + mincasat, mindicetva, ; + mexpliesirilot +STORE 1 TO i +STORE 0 TO maccize, ; + mliniireducere, ; + mtotalcharges, ; + mtotalallowances, mtvai, ; + mincasat +STORE "" TO mexpliesirilot +IF EMPTY(pcodfiscal) + MESSAGEBOX( ; + "Completati codul fiscal al societatii, in ecranul 'Configurare societati'.", ; + 48, ; + "Date incomplete..." ; + ) + RETURN +ENDIF +IF .NOT. USED("SOC_SUPL") + myot("SOC_SUPL","SOC_SUPL", ; + 1) +ENDIF +UPDATE C_IES_FORM SET indice = ; + IIF(INLIST(cont, '667', ; + '709', '609'), -1, 0) +UPDATE C_IES_FORM SET protva = 0 ; + WHERE INLIST(tip, "U", ; + "H") +DELETE FROM C_IES_FORM WHERE ; + EMPTY(id_u) +mid = c_id_tip.id_iesire +IF pisfb + SQLEXEC(gnconnhandle, ; + "SELECT CONTRACTE.nr, CONTRACTE.data,CONTRACTE_TIP.recurenta FROM CONTRACTE INNER JOIN CONTR_DET ON CONTRACTE.id = CONTR_DET.id JOIN CONTRACTE_TIP ON CONTRACTE.cod_contr=CONTRACTE_TIP.cod WHERE id_fact=?mId", ; + "C_CONTRACT_FACTURA") +ELSE + SELECT contracte.nr, ; + contracte.data, ; + contracte_tip.recurenta ; + FROM CONTRACTE INNER ; + JOIN CONTR_DET ON ; + contracte.id = ; + contr_det.id INNER ; + JOIN CONTRACTE_TIP ON ; + contracte.cod_contr = ; + contracte_tip.cod ; + WHERE id_fact = mid ; + INTO CURSOR ; + C_CONTRACT_FACTURA +ENDIF +SELECT protva, ROUND(SUM(valoare) * ; + protva / 100, 2) AS tva, ; + SUM(valoare) AS valoare, ; + ' ' AS tip, REPLICATE(' ', ; + 30) AS explicatie, ; + REPLICATE(' ', 30) AS ; + motiv FROM C_IES_FORM ; + GROUP BY protva INTO ; + CURSOR C_TVA_FACTURA ; + READWRITE +SELECT c_tva_factura +SUM tva TO mtotaltva +INDEX ON protva TAG procent +IF pisfb + SQLEXEC(gnconnhandle, ; + "SELECT DISTINCT ies_det.id_u,com_m.nr,com_m.data FROM iesiri INNER JOIN ies_det ON iesiri.id_iesire=ies_det.id_iesire" + ; + " JOIN FACT_COMENZI ON ies_det.id_u=fact_comenzi.id_factura JOIN COMENZI ON FACT_COMENZI.id_comanda = comenzi.id_com JOIN com_m ON comenzi.id=com_m.id WHERE IESIRI.id_iesire=?mId", ; + "C_COMENZI_FACTURA") +ELSE + SELECT DISTINCT ies_det.id_u, ; + com_m.nr, com_m.data ; + FROM iesiri INNER ; + JOIN ies_det ON ; + iesiri.id_iesire = ; + ies_det.id_iesire ; + INNER JOIN ; + FACT_COMENZI ON ; + ies_det.id_u = ; + fact_comenzi.id_factura ; + INNER JOIN COMENZI ON ; + fact_comenzi.id_comanda = ; + comenzi.id_com INNER ; + JOIN com_m ON ; + comenzi.id = com_m.id ; + WHERE ; + iesiri.id_iesire = ; + mid INTO CURSOR ; + C_COMENZI_FACTURA +ENDIF +SELECT DISTINCT nr, data FROM ; + C_COMENZI_FACTURA INTO ; + CURSOR ; + C_COMENZI_INDIVIDUALE +IF RECCOUNT("C_COMENZI_INDIVIDUALE") = ; + 1 + mcomanda = ALLTRIM(c_comenzi_individuale.nr) + ; + "/" + ; + ALLTRIM(DTOC(c_comenzi_individuale.data)) +ELSE + mcomanda = "" +ENDIF +IF pisfb + SQLEXEC(gnconnhandle, ; + "SELECT SUM(suma) AS suma FROM NOTE_FACTURI WHERE id_factura=?mId", ; + "C_FB") + IF RECCOUNT("C_FB") > 0 ; + .AND. .NOT. ; + ISNULL(c_fb.suma) + mincasat = c_fb.suma + ENDIF +ELSE + SELECT SUM(suma) FROM ; + NOTE_FACTURI WHERE ; + id_factura = mid INTO ; + ARRAY ; + atestincasareefactura + IF _TALLY > 0 .AND. .NOT. ; + ISNULL(atestincasareefactura) + mincasat = atestincasareefactura(1) + ENDIF +ENDIF +SELECT c_ies_form +mmoneda = ALLTRIM(c_ies_form.moneda) +mcodfiscal = c_ies_form.cod_fiscal +mtipfactura = c_ies_form.tip +mtara = c_ies_form.tara +mtiptert = c_ies_form.tip_tert +mtiptvacurent = gettva(c_ies_form.data) +mtvai = c_ies_form.tvai +minf_suplm = c_ies_form.inf_suplm +IF .NOT. INLIST(mtipfactura, ' ', ; + 'S', 'M', 'U', 'H') + MESSAGEBOX( ; + "Pentru acest document nu se genereaza factura electronica momentan.", ; + 64, "Atentie...") + RETURN +ENDIF +COUNT TO mlinii +COUNT FOR indice = -1 TO ; + mliniireducere +COUNT FOR indice >= 0 .AND. ; + valoare < 0 TO ; + mliniistornare +COUNT FOR cont = '419' TO ; + mnrliniiavans +SUM ABS(valoare) TO mdiscounturi ; + FOR indice = -1 +mtotalallowances = mtotalallowances + ; + mdiscounturi +LOCATE +SELECT c_tva_factura +SCAN + DO CASE + CASE mtipfactura = 'T' ; + .OR. mtiptert = ; + 'I' + REPLACE tip WITH ; + 'AE', ; + explicatie ; + WITH ; + 'Taxare inversa', ; + motiv WITH ; + 'VATEX-EU-AE' + CASE mtipfactura = 'S' + REPLACE tip WITH ; + 'E', ; + explicatie ; + WITH ; + 'Scutit cu drept de deducere' + CASE EMPTY(mtipfactura) ; + .AND. ; + c_tva_factura.protva = ; + 0 + IF mtiptvacurent < ; + 3 + REPLACE tip ; + WITH ; + 'Z' + ELSE + REPLACE tip ; + WITH ; + 'Z' + ENDIF + CASE mtipfactura = 'H' + REPLACE tip WITH ; + 'E', ; + explicatie ; + WITH ; + 'Bunuri second-hand', ; + motiv WITH ; + 'VATEX-EU-F' + CASE mtipfactura = 'U' + REPLACE tip WITH ; + 'E', ; + explicatie ; + WITH ; + 'Regim special agentii de turism', ; + motiv WITH ; + 'VATEX-EU-D' + OTHERWISE + REPLACE tip WITH ; + 'S' + ENDCASE +ENDSCAN +IF c_ies_form.accize > 0 + maccize = c_ies_form.accize + mtotalcharges = mtotalcharges + ; + maccize + SELECT COUNT(*) FROM ; + C_TVA_FACTURA WHERE ; + tip = 'Z' INTO ARRAY ; + agetcotaz + IF _TALLY > 0 .AND. .NOT. ; + ISNULL(agetcotaz(1)) ; + .AND. agetcotaz(1) > 0 + UPDATE C_TVA_FACTURA ; + SET valoare = ; + valoare + ; + maccize WHERE ; + tip = 'Z' + ELSE + INSERT INTO ; + C_TVA_FACTURA ; + (protva, tva, ; + valoare, tip, ; + explicatie, ; + motiv) VALUES (0, ; + 0, maccize, 'Z', ; + 'Acciza', '') + ENDIF +ENDIF +SELECT c_ies_form +LOCATE +oxml = CREATEOBJECT("msxml2.DOMDocument") +oxml.appendchild(oxml.createnode("PROCESSINGINSTRUCTION", ; + "xml","")) +oinvoice = oxml.appendchild(oxml.createelement("Invoice")) +oinvoice.setattribute("xmlns:cbc", ; + "urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" ; + ) +oinvoice.setattribute("xmlns:udt", ; + "urn:oasis:names:specification:ubl:schema:xsd:UnqualifiedDataTypes-2" ; + ) +oinvoice.setattribute("xmlns:cac", ; + "urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" ; + ) +oinvoice.setattribute("xmlns:ccts", ; + "urn:un:unece:uncefact:documentation:2") +oinvoice.setattribute("xmlns", ; + "urn:oasis:names:specification:ubl:schema:xsd:Invoice-2" ; + ) +oinvoice.setattribute("xmlns:qdt", ; + "urn:oasis:names:specification:ubl:schema:xsd:QualifiedDataTypes-2" ; + ) +oinvoice.setattribute("xsi:schemaLocation", ; + "urn:oasis:names:specification:ubl:schema:xsd:Invoice-2 ../../UBL-2.1(1)/xsd/maindoc/UBL-Invoice-2.1.xsd" ; + ) +oinvoice.setattribute("xmlns:xsi", ; + "http://www.w3.org/2001/XMLSchema-instance" ; + ) +oinvoice.appendchild(oxml.createelement("cbc:UBLVersionID")) +oinvoice.lastchild.text = "2.1" +oinvoice.appendchild(oxml.createelement("cbc:CustomizationID")) +oinvoice.lastchild.text = "urn:cen.eu:en16931:2017#compliant#urn:efactura.mfinante.ro:CIUS-RO:1.0.0" +oinvoice.appendchild(oxml.createelement("cbc:ID")) +oinvoice.lastchild.text = ALLTRIM(c_ies_form.nr) +oinvoice.appendchild(oxml.createelement("cbc:IssueDate")) +oinvoice.lastchild.text = ALLTRIM(STR(YEAR(c_ies_form.data))) + ; + "-" + ; + PADL(ALLTRIM(STR(MONTH(c_ies_form.data))), ; + 2, "0") + ; + "-" + ; + PADL(ALLTRIM(STR(DAY(c_ies_form.data))), ; + 2, ; + "0") +IF .NOT. ; + EMPTY(c_ies_form.scadent) ; + .AND. .NOT. ; + ISNULL(c_ies_form.scadent) ; + .AND. c_ies_form.scadent <> ; + {} + oinvoice.appendchild(oxml.createelement("cbc:DueDate")) + oinvoice.lastchild.text = ALLTRIM(STR(YEAR(c_ies_form.scadent))) + ; + "-" + ; + PADL(ALLTRIM(STR(MONTH(c_ies_form.scadent))), ; + 2, ; + "0") + ; + "-" + ; + PADL(ALLTRIM(STR(DAY(c_ies_form.scadent))), ; + 2, ; + "0") +ENDIF +minvoicetype = "" +DO CASE + CASE plrectificativa = 1 + minvoicetype = "384" + CASE ALLTRIM(getnrfromstring(mcodfiscal)) == ; + ALLTRIM(pcodfiscal) + minvoicetype = "389" + CASE mliniistornare = mlinii + minvoicetype = "381" + OTHERWISE + minvoicetype = "380" +ENDCASE +oinvoice.appendchild(oxml.createelement("cbc:InvoiceTypeCode")) +oinvoice.lastchild.text = minvoicetype +IF mtvai = 1 + oinvoice.appendchild(oxml.createelement("cbc:Note")) + oinvoice.lastchild.text = "TVA la incasare" +ENDIF +IF .NOT. EMPTY(mtipfactura = 'T' ; + .OR. mtiptert = 'I') + oinvoice.appendchild(oxml.createelement("cbc:Note")) + oinvoice.lastchild.text = "Taxare inversa" +ENDIF +IF .NOT. ; + EMPTY(c_ies_form.inf_suplm) + oinvoice.appendchild(oxml.createelement("cbc:Note")) + oinvoice.lastchild.text = ALLTRIM(minf_suplm) +ENDIF +oinvoice.appendchild(oxml.createelement("cbc:DocumentCurrencyCode")) +IF pisexport + oinvoice.lastchild.text = ALLTRIM(moneda) +ELSE + oinvoice.lastchild.text = "RON" +ENDIF +oinvoice.appendchild(oxml.createelement("cbc:TaxCurrencyCode")) +oinvoice.lastchild.text = "RON" +IF .NOT. EMPTY(mcomanda) + oorderreference = oinvoice.appendchild(oxml.createelement("cac:OrderReference")) + oorderreference.appendchild(oxml.createelement("cbc:ID")) + oorderreference.lastchild.text = ; + mcomanda +ENDIF +IF RECCOUNT("C_CONTRACT_FACTURA") > ; + 0 + ocontractreference = oinvoice.appendchild(oxml.createelement("cac:ContractDocumentReference")) + ocontractreference.appendchild(oxml.createelement("cbc:ID")) + ocontractreference.lastchild.text = ; + ALLTRIM(c_contract_factura.nr) + ; + "/" + ; + ALLTRIM(DTOC(c_contract_factura.data)) +ENDIF +osupplier = oinvoice.appendchild(oxml.createelement("cac:AccountingSupplierParty")) +oparty = osupplier.appendchild(oxml.createelement("cac:Party")) +IF EMPTY(pcs.email) + MESSAGEBOX( ; + "Completati adresa de email a societatii in ecranul 'Configurare societati'." + ; + CHR(13) + ; + "Aceasta este necesara pentru primirea raspunsului facturii electronice.", ; + 48, ; + "Date incomplete..." ; + ) + RETURN +ENDIF +oendpointid = oparty.appendchild(oxml.createelement("cbc:EndpointID")) +oendpointid.setattribute("schemeID", ; + "EM") +oendpointid.text = ALLTRIM(pcs.email) +IF .NOT. ; + EMPTY(c_ies_form.cod_fiscal) + opartyidentification = oparty.appendchild(oxml.createelement("cac:PartyIdentification")) + oidparty = opartyidentification.appendchild(oxml.createelement("cbc:ID")) + oidparty.text = pcodfiscal +ENDIF +oadresa = oparty.appendchild(oxml.createelement("cac:PostalAddress")) +IF EMPTY(pcs.strada) + MESSAGEBOX( ; + "Completati strada in ecranul 'Configurare societati'.", ; + 48, ; + "Date incomplete..." ; + ) + RETURN +ENDIF +oadresa.appendchild(oxml.createelement("cbc:StreetName")) +oadresa.lastchild.text = ALLTRIM(pcs.strada) +IF EMPTY(pcs.localitate) + MESSAGEBOX( ; + "Completati localitatea in ecranul 'Configurare societati'.", ; + 48, ; + "Date incomplete..." ; + ) + RETURN +ENDIF +IF EMPTY(pcs.judet) + MESSAGEBOX( ; + "Alegeti judetul in ecranul 'Configurare societati'.", ; + 48, ; + "Date incomplete..." ; + ) + RETURN +ELSE + IF pcs.judet = "BUCURESTI" ; + .AND. EMPTY(pcs.sect) + MESSAGEBOX( ; + "Completati sectorul in ecranul 'Configurare societati'.", ; + 48, ; + "Date incomplete..." ; + ) + RETURN + ENDIF +ENDIF +oadresa.appendchild(oxml.createelement("cbc:CityName")) +IF pcs.judet = "B " + oadresa.lastchild.text = "SECTOR " + ; + ALLTRIM(pcs.sect) +ELSE + oadresa.lastchild.text = ALLTRIM(UPPER(pcs.localitate)) +ENDIF +SELECT cod FROM FREETAB\JUDETE ; + WHERE denjud = pcs.judet ; + INTO ARRAY agetjudadresa +mcodjudet = "" +IF _TALLY > 0 .AND. .NOT. ; + ISNULL(agetjudadresa(1)) + mcodjudet = agetjudadresa(1) +ENDIF +oadresa.appendchild(oxml.createelement("cbc:CountrySubentity")) +oadresa.lastchild.text = "RO-" + ; + ALLTRIM(mcodjudet) +otara = oadresa.appendchild(oxml.createelement("cac:Country")) +otara.appendchild(oxml.createelement("cbc:IdentificationCode")) +otara.lastchild.text = "RO" +otaxe = oparty.appendchild(oxml.createelement("cac:PartyTaxScheme")) +otaxe.appendchild(oxml.createelement("cbc:CompanyID")) +otaxe.lastchild.text = "RO" + ; + pcodfiscal +oschemataxe = otaxe.appendchild(oxml.createelement("cac:TaxScheme")) +oschemataxe.appendchild(oxml.createelement("cbc:ID")) +oschemataxe.lastchild.text = "VAT" +oformalegala = oparty.appendchild(oxml.createelement("cac:PartyLegalEntity")) +oformalegala.appendchild(oxml.createelement("cbc:RegistrationName")) +oformalegala.lastchild.text = ALLTRIM(pdensoc) +IF .NOT. EMPTY(pregcom) + oidentificatorformalegala = oformalegala.appendchild(oxml.createelement("cbc:CompanyID")) + oidentificatorformalegala.text = ; + ALLTRIM(pregcom) +ENDIF +mdensoc = UPPER(pdensoc) + " " +mprefix = "" +msufix = "" +DO CASE + CASE mdensoc = "S.C. " .OR. ; + mdensoc = "SC " + mprefix = "Societate comerciala" + CASE mdensoc = "P.F. " .OR. ; + mdensoc = "PF " + mprefix = "Persoana fizica" + CASE mdensoc = "P.F.A. " ; + .OR. mdensoc = "PFA " + mprefix = "Persoana fizica autorizata" + CASE mdensoc = "A.F. " .OR. ; + mdensoc = "AF " + mprefix = "Asociatie familiala" +ENDCASE +DO CASE + CASE " S.R.L." $ mdensoc ; + .OR. " SRL " $ mdensoc + msufix = "Societate cu raspundere limitata" + CASE " S.A." $ mdensoc .OR. ; + " SA " $ mdensoc + msufix = "Societate pe actiuni" +ENDCASE +IF .NOT. EMPTY(mprefix) + oformalegala.appendchild(oxml.createelement("cbc:CompanyLegalForm")) + oformalegala.lastchild.text = ; + ALLTRIM(mprefix) +ENDIF +IF .NOT. EMPTY(pcs.numea) .OR. ; + .NOT. EMPTY(pcs.prea) .OR. ; + .NOT. EMPTY(pcs.email) .OR. ; + .NOT. EMPTY(pcs.telefon) + ocontact = oparty.appendchild(oxml.createelement("cac:Contact")) + IF .NOT. EMPTY(pcs.numea) ; + .OR. .NOT. ; + EMPTY(pcs.prea) + ocontact.appendchild(oxml.createelement("cbc:Name")) + ocontact.lastchild.text = ; + ALLTRIM(pcs.numea) + ; + " " + ; + ALLTRIM(pcs.prea) + ENDIF + IF .NOT. EMPTY(pcs.telefon) + ocontact.appendchild(oxml.createelement("cbc:Telephone")) + ocontact.lastchild.text = ; + ALLTRIM(pcs.telefon) + ENDIF + IF .NOT. EMPTY(pcs.email) + ocontact.appendchild(oxml.createelement("cbc:ElectronicMail")) + ocontact.lastchild.text = ; + ALLTRIM(pcs.email) + ENDIF +ENDIF +SELECT c_ies_form +LOCATE +ocustomer = oinvoice.appendchild(oxml.createelement("cac:AccountingCustomerParty")) +opartys = ocustomer.appendchild(oxml.createelement("cac:Party")) +IF .NOT. EMPTY(c_ies_form.email) + oendpointid = opartys.appendchild(oxml.createelement("cbc:EndpointID")) + oendpointid.setattribute("schemeID", ; + "EM") + oendpointid.text = ALLTRIM(c_ies_form.email) +ENDIF +IF .NOT. ; + EMPTY(c_ies_form.cod_fiscal) ; + .AND. ; + verifcf(ALLTRIM(c_ies_form.cod_fiscal)) + opartyidentifications = opartys.appendchild(oxml.createelement("cac:PartyIdentification")) + oidpartys = opartyidentifications.appendchild(oxml.createelement("cbc:ID")) + oidpartys.text = ALLTRIM(c_ies_form.cod_fiscal) +ENDIF +oadresas = opartys.appendchild(oxml.createelement("cac:PostalAddress")) +IF EMPTY(c_ies_form.adresa) + MESSAGEBOX( ; + "Completati adresa clientului.", ; + 48, ; + "Date incomplete..." ; + ) + RETURN +ENDIF +oadresas.appendchild(oxml.createelement("cbc:StreetName")) +oadresas.lastchild.text = ALLTRIM(c_ies_form.adresa) +IF EMPTY(c_ies_form.localitate) + MESSAGEBOX( ; + "Completati localitatea in adresa clientului.", ; + 48, ; + "Date incomplete..." ; + ) + RETURN +ENDIF +oadresas.appendchild(oxml.createelement("cbc:CityName")) +IF EMPTY(c_ies_form.judet) + MESSAGEBOX( ; + "Alegeti judetul clientului.", ; + 48, ; + "Date incomplete..." ; + ) + RETURN +ENDIF +IF c_ies_form.judet = "B " + msector = "" + IF .NOT. "SECTOR" $ ; + UPPER(c_ies_form.localitate) + MESSAGEBOX( ; + "Alegeti un sector valid pentru Bucuresti in adresa clientului.", ; + 48, ; + "Atentie...") + RETURN + ENDIF + oadresas.lastchild.text = "SECTOR " + ; + RIGHT(ALLTRIM(c_ies_form.localitate), ; + 1) +ELSE + oadresas.lastchild.text = ALLTRIM(c_ies_form.localitate) +ENDIF +oadresas.appendchild(oxml.createelement("cbc:CountrySubentity")) +oadresas.lastchild.text = ALLTRIM(c_ies_form.judet) +otaras = oadresas.appendchild(oxml.createelement("cac:Country")) +otaras.appendchild(oxml.createelement("cbc:IdentificationCode")) +otaras.lastchild.text = IIF( ; + .NOT. ; + EMPTY(c_ies_form.tara), ; + c_ies_form.tara, ; + "RO") +IF (EMPTY(c_ies_form.tara) .OR. ; + c_ies_form.tara = 'RO') .AND. ; + .NOT. ; + EMPTY(c_ies_form.cod_fiscal) ; + .AND. ; + verifcf(c_ies_form.cod_fiscal) + otaxes = opartys.appendchild(oxml.createelement("cac:PartyTaxScheme")) + otaxes.appendchild(oxml.createelement("cbc:CompanyID")) + otaxes.lastchild.text = "RO" + ; + getnrfromstring(c_ies_form.cod_fiscal) + oschemataxes = otaxes.appendchild(oxml.createelement("cac:TaxScheme")) + oschemataxes.appendchild(oxml.createelement("cbc:ID")) + oschemataxes.lastchild.text = ; + "VAT" +ENDIF +oformalegalas = opartys.appendchild(oxml.createelement("cac:PartyLegalEntity")) +oformalegalas.appendchild(oxml.createelement("cbc:RegistrationName")) +oformalegalas.lastchild.text = ALLTRIM(c_ies_form.den_cli) +IF .NOT. ; + EMPTY(c_ies_form.reg_com) + oidentificatorformalegalas = ; + oformalegalas.appendchild(oxml.createelement("cbc:CompanyID")) + oidentificatorformalegalas.text = ; + ALLTRIM(c_ies_form.reg_com) +ENDIF +mdensoc = ALLTRIM(c_ies_form.den_cli) + ; + " " +mprefix = "" +msufix = "" +DO CASE + CASE mdensoc = "S.C. " .OR. ; + mdensoc = "SC " + mprefix = "Societate comerciala" + CASE mdensoc = "P.F. " .OR. ; + mdensoc = "PF " + mprefix = "Persoana fizica" + CASE mdensoc = "P.F.A. " ; + .OR. mdensoc = "PFA " + mprefix = "Persoana fizica autorizata" + CASE mdensoc = "A.F. " .OR. ; + mdensoc = "AF " + mprefix = "Asociatie familiala" +ENDCASE +DO CASE + CASE " S.R.L." $ mdensoc ; + .OR. " SRL " $ mdensoc + msufix = "Societate cu raspundere limitata" + CASE " S.A." $ mdensoc .OR. ; + " SA " $ mdensoc + msufix = "Societate pe actiuni" +ENDCASE +IF .NOT. EMPTY(mprefix) + oformalegalas.appendchild(oxml.createelement("cbc:CompanyLegalForm")) + oformalegalas.lastchild.text = ; + mprefix +ENDIF +IF .NOT. EMPTY(c_ies_form.tel) ; + .OR. .NOT. ; + EMPTY(c_ies_form.email) .OR. ; + .NOT. ; + EMPTY(c_ies_form.delegat) + ocontacts = opartys.appendchild(oxml.createelement("cac:Contact")) + IF .NOT. ; + EMPTY(c_ies_form.delegat) + ocontacts.appendchild(oxml.createelement("cbc:Name")) + ocontacts.lastchild.text = ; + ALLTRIM(c_ies_form.delegat) + ENDIF + IF .NOT. ; + EMPTY(c_ies_form.tel) + ocontacts.appendchild(oxml.createelement("cbc:Telephone")) + ocontacts.lastchild.text = ; + ALLTRIM(c_ies_form.tel) + ENDIF + IF .NOT. ; + EMPTY(c_ies_form.email) + ocontacts.appendchild(oxml.createelement("cbc:ElectronicMail")) + ocontacts.lastchild.text = ; + ALLTRIM(c_ies_form.email) + ENDIF +ENDIF +IF USED("C_GET_ADRLIV") .AND. ; + RECCOUNT("C_GET_ADRLIV") > 0 + SELECT c_get_adrliv + odelivery = oinvoice.appendchild(oxml.createelement("cac:Delivery")) + odeliverylocation = odelivery.appendchild(oxml.createelement("cac:DeliveryLocation")) + oadresalivrare = odeliverylocation.appendchild(oxml.createelement("cac:Address")) + oadresalivrare.appendchild(oxml.createelement("cbc:StreetName")) + oadresalivrare.lastchild.text = ; + ALLTRIM(c_get_adrliv.adresa) + oadresalivrare.appendchild(oxml.createelement("cbc:CityName")) + IF EMPTY(c_get_adrliv.localitate) + MESSAGEBOX( ; + "Alegeti localitatea din adresa de livrare.", ; + 48, ; + "Atentie...") + RETURN + ENDIF + IF EMPTY(c_get_adrliv.judet) + MESSAGEBOX( ; + "Alegeti judetul din adresa de livrare.", ; + 48, ; + "Atentie...") + RETURN + ENDIF + IF c_get_adrliv.judet = "B " + msector = "" + IF .NOT. "SECTOR" $ ; + UPPER(c_get_adrliv.localitate) + MESSAGEBOX( ; + "Alegeti un sector valid pentru Bucuresti, in adresa de livrare.", ; + 48, ; + "Atentie...") + RETURN + ENDIF + oadresalivrare.lastchild.text = ; + "SECTOR " + ; + RIGHT(ALLTRIM(c_get_adrliv.localitate), ; + 1) + ELSE + oadresalivrare.lastchild.text = ; + ALLTRIM(c_get_adrliv.localitate) + ENDIF + oadresalivrare.appendchild(oxml.createelement("cbc:CountrySubentity")) + oadresalivrare.lastchild.text = ; + "RO-" + ; + ALLTRIM(c_get_adrliv.judet) + otaralivrare = oadresalivrare.appendchild(oxml.createelement("cac:Country")) + otaralivrare.appendchild(oxml.createelement("cbc:IdentificationCode")) + otaralivrare.lastchild.text = ; + "RO" +ENDIF +SELECT c_ies_form +IF mliniireducere > 0 + SELECT c_ies_form + SCAN FOR indice = -1 + oallowancecharge = oinvoice.appendchild(oxml.createelement("cac:AllowanceCharge")) + oallowancecharge.appendchild(oxml.createelement("cbc:ChargeIndicator")) + oallowancecharge.lastchild.text = ; + "false" + oallowancecharge.appendchild(oxml.createelement("cbc:AllowanceChargeReasonCode")) + oallowancecharge.lastchild.text = ; + "95" + oallowancecharge.appendchild(oxml.createelement("cbc:AllowanceChargeReason")) + oallowancecharge.lastchild.text = ; + IIF(c_ies_form.cont = ; + "667", "Scont", ; + IIF(c_ies_form.cont = ; + "709", ; + "Reducere comerciala", ; + "Discount")) + odocallowancecharge = oallowancecharge.appendchild(oxml.createelement("cbc:Amount")) + odocallowancecharge.setattribute("currencyID", ; + mmoneda) + odocallowancecharge.text = ; + ALLTRIM(STR(ABS(c_ies_form.valoare), ; + 15, 2)) + otaxcategoryallowance = ; + oallowancecharge.appendchild(oxml.createelement("cac:TaxCategory")) + otaxcategoryallowance.appendchild(oxml.createelement("cbc:ID")) + SELECT tip FROM ; + C_TVA_FACTURA ; + WHERE protva = ; + c_ies_form.protva ; + INTO ARRAY ; + agettipcota + otaxcategoryallowance.lastchild.text = ; + ALLTRIM(agettipcota(1)) + otaxcategoryallowance.appendchild(oxml.createelement("cbc:Percent")) + otaxcategoryallowance.lastchild.text = ; + ALLTRIM(STR(c_ies_form.protva, ; + 2, 0)) + otaxschemeallowance = otaxcategoryallowance.appendchild(oxml.createelement("cac:TaxScheme")) + otaxschemeallowance.appendchild(oxml.createelement("cbc:ID")) + otaxschemeallowance.lastchild.text = ; + "VAT" + ENDSCAN +ENDIF +IF maccize > 0 + oallowancecharge = oinvoice.appendchild(oxml.createelement("cac:AllowanceCharge")) + oallowancecharge.appendchild(oxml.createelement("cbc:ChargeIndicator")) + oallowancecharge.lastchild.text = ; + "true" + oallowancecharge.appendchild(oxml.createelement("cbc:AllowanceChargeReason")) + oallowancecharge.lastchild.text = ; + "Acciza" + odocallowancecharge = oallowancecharge.appendchild(oxml.createelement("cbc:Amount")) + odocallowancecharge.setattribute("currencyID", ; + mmoneda) + odocallowancecharge.text = ALLTRIM(STR(maccize, ; + 15, ; + 2)) + otaxcategorycharge = oallowancecharge.appendchild(oxml.createelement("cac:TaxCategory")) + otaxcategorycharge.appendchild(oxml.createelement("cbc:ID")) + otaxcategorycharge.lastchild.text = ; + "Z" + otaxcategorycharge.appendchild(oxml.createelement("cbc:Percent")) + otaxcategorycharge.lastchild.text = ; + "0" + otaxschemeallowance = otaxcategorycharge.appendchild(oxml.createelement("cac:TaxScheme")) + otaxschemeallowance.appendchild(oxml.createelement("cbc:ID")) + otaxschemeallowance.lastchild.text = ; + "VAT" +ENDIF +IF RECCOUNT("C_TVA_FACTURA") > 0 + otaxtotal = oinvoice.appendchild(oxml.createelement("cac:TaxTotal")) + mtvatotal = 000000000.00 + IF .NOT. INLIST(mtipfactura, ; + "U", "H") + SELECT ROUND(SUM(valoare * ; + protva / 100), ; + 2) AS tva FROM ; + C_TVA_FACTURA ; + GROUP BY protva ; + INTO CURSOR ; + C_COTE_T + SELECT c_cote_t + SUM (tva) TO mtvatotal + ELSE + SUM (tva) TO mtvatotal + ENDIF + ototal = otaxtotal.appendchild(oxml.createelement("cbc:TaxAmount")) + ototal.setattribute("currencyID", ; + mmoneda) + ototal.text = ALLTRIM(STR(mtvatotal, ; + 15, 2)) + SELECT c_tva_factura + SET ORDER TO procent + LOCATE + SCAN + otaxablesubtotal = otaxtotal.appendchild(oxml.createelement("cac:TaxSubtotal")) + osubtotal = otaxablesubtotal.appendchild(oxml.createelement("cbc:TaxableAmount")) + osubtotal.setattribute("currencyID", ; + mmoneda) + osubtotal.text = ALLTRIM(STR(c_tva_factura.valoare, ; + 15, ; + 2)) + osubtotaltaxa = otaxablesubtotal.appendchild(oxml.createelement("cbc:TaxAmount")) + osubtotaltaxa.setattribute("currencyID", ; + mmoneda) + osubtotaltaxa.text = ALLTRIM(STR(c_tva_factura.tva, ; + 15, ; + 2)) + otaxcategorytotals = otaxablesubtotal.appendchild(oxml.createelement("cac:TaxCategory")) + otaxcategorytotals.appendchild(oxml.createelement("cbc:ID")) + otaxcategorytotals.lastchild.text = ; + ALLTRIM(c_tva_factura.tip) + otaxcategorytotals.appendchild(oxml.createelement("cbc:Percent")) + otaxcategorytotals.lastchild.text = ; + ALLTRIM(STR(c_tva_factura.protva, ; + 2, 0)) + IF .NOT. ; + EMPTY(c_tva_factura.motiv) + otaxcategorytotals.appendchild(oxml.createelement("cbc:TaxExemptionReasonCode")) + otaxcategorytotals.lastchild.text = ; + ALLTRIM(c_tva_factura.motiv) + ENDIF + IF .NOT. ; + EMPTY(c_tva_factura.explicatie) + otaxcategorytotals.appendchild(oxml.createelement("cbc:TaxExemptionReason")) + otaxcategorytotals.lastchild.text = ; + ALLTRIM(c_tva_factura.explicatie) + ENDIF + otaxschemetotals = otaxcategorytotals.appendchild(oxml.createelement("cac:TaxScheme")) + otaxschemetotals.appendchild(oxml.createelement("cbc:ID")) + otaxschemetotals.lastchild.text = ; + "VAT" + ENDSCAN + SELECT c_ies_form + LOCATE + IF mmoneda <> "RON" + otaxtotal = oinvoice.appendchild(oxml.createelement("cac:TaxTotal")) + ototal = otaxtotal.appendchild(oxml.createelement("cbc:TaxAmount")) + ototal.setattribute("currencyID", ; + "RON") + ototal.text = ALLTRIM(STR(ROUND(mtvatotal * ; + c_ies_form.curs, ; + 2), 15, ; + 2)) + ENDIF +ENDIF +SELECT c_ies_form +LOCATE +SUM valoare TO mtotalnet FOR ; + indice >= 0 +LOCATE +mtotalnetliniifactura = mtotalnet +mtotalnet = mtotalnet + ; + mtotalcharges - ; + mtotalallowances +mtotalbrut = mtotalnet + ; + mtotaltva +omonetarytotal = oinvoice.appendchild(oxml.createelement("cac:LegalMonetaryTotal")) +ototalnet = omonetarytotal.appendchild(oxml.createelement("cbc:LineExtensionAmount")) +ototalnet.setattribute("currencyID", ; + mmoneda) +ototalnet.text = ALLTRIM(STR(mtotalnetliniifactura, ; + 15, 2)) +ototalnetfaratva = omonetarytotal.appendchild(oxml.createelement("cbc:TaxExclusiveAmount")) +ototalnetfaratva.setattribute("currencyID", ; + mmoneda) +ototalnetfaratva.text = ALLTRIM(STR(mtotalnet, ; + 15, 2)) +ototalbrut = omonetarytotal.appendchild(oxml.createelement("cbc:TaxInclusiveAmount")) +ototalbrut.setattribute("currencyID", ; + mmoneda) +ototalbrut.text = ALLTRIM(STR(mtotalbrut, ; + 15, 2)) +IF mtotalallowances > 0 + ototaldeduceri = omonetarytotal.appendchild(oxml.createelement("cbc:AllowanceTotalAmount")) + ototaldeduceri.setattribute("currencyID", ; + mmoneda) + ototaldeduceri.text = ALLTRIM(STR(mtotalallowances, ; + 15, ; + 2)) +ENDIF +IF mtotalcharges > 0 + ototaltaxe = omonetarytotal.appendchild(oxml.createelement("cbc:ChargeTotalAmount")) + ototaltaxe.setattribute("currencyID", ; + mmoneda) + ototaltaxe.text = ALLTRIM(STR(mtotalcharges, ; + 15, 2)) +ENDIF +IF mincasat > 0 + ototalincasat = omonetarytotal.appendchild(oxml.createelement("cbc:PrepaidAmount")) + ototalincasat.setattribute("currencyID", ; + mmoneda) + ototalincasat.text = ALLTRIM(STR(mincasat, ; + 15, ; + 2)) +ENDIF +ototalplata = omonetarytotal.appendchild(oxml.createelement("cbc:PayableAmount")) +ototalplata.setattribute("currencyID", ; + mmoneda) +ototalplata.text = ALLTRIM(STR(mtotalbrut - ; + mincasat, 15, ; + 2)) +SELECT c_ies_form +SCAN FOR indice = 0 + oinvoiceline = oinvoice.appendchild(oxml.createelement("cac:InvoiceLine")) + oinvoiceline.appendchild(oxml.createelement("cbc:ID")) + oinvoiceline.lastchild.text = ; + ALLTRIM(STR(i, 4, 0)) + IF .NOT. ; + EMPTY(ALLTRIM(c_ies_form.text_supl)) + oinvoiceline.appendchild(oxml.createelement("cbc:Note")) + oinvoiceline.lastchild.text = ; + ALLTRIM(c_ies_form.text_supl) + ENDIF + SELECT cod FROM FREETAB\um ; + WHERE cod_ro = ; + c_ies_form.um INTO ; + ARRAY agetumfact + mum = "H87" + IF _TALLY > 0 .AND. .NOT. ; + ISNULL(agetumfact(1)) + mum = ALLTRIM(agetumfact(1)) + ENDIF + oum = oinvoiceline.appendchild(oxml.createelement("cbc:InvoicedQuantity")) + oum.setattribute("unitCode", ; + mum) + oum.text = ALLTRIM(STR(c_ies_form.cantitate, ; + 15, 3)) + oamount = oinvoiceline.appendchild(oxml.createelement("cbc:LineExtensionAmount")) + oamount.setattribute("currencyID", ; + mmoneda) + oamount.text = ALLTRIM(STR(c_ies_form.valoare, ; + 15, 2)) + SELECT * FROM ; + C_COMENZI_FACTURA ; + WHERE id_u = ; + c_ies_form.id_u ; + INTO ARRAY ; + agetcomenzilinie + IF _TALLY > 0 .AND. .NOT. ; + ISNULL(agetcomenzilinie(1, ; + 2)) .AND. .NOT. ; + ISNULL(agetcomenzilinie(1, ; + 3)) + oorderlinereference = oinvoiceline.appendchild(oxml.createelement("cac:OrderLineReference")) + oorderlinereference.appendchild(oxml.createelement("cbc:LineID")) + oorderlinereference.lastchild.text = ; + ALLTRIM(agetcomenzilinie(1, ; + 2)) + "/" + ; + ALLTRIM(DTOC(agetcomenzilinie(1, ; + 3))) + ENDIF + oitem = oinvoiceline.appendchild(oxml.createelement("cac:Item")) + IF .NOT. ; + EMPTY(c_ies_form.is_a) + oitem.appendchild(oxml.createelement("cbc:Description")) + oitem.lastchild.text = ALLTRIM(c_ies_form.is_a) + ENDIF + IF .NOT. ; + EMPTY(c_ies_form.denumire) + oitem.appendchild(oxml.createelement("cbc:Name")) + oitem.lastchild.text = ALLTRIM(c_ies_form.denumire) + ENDIF + IF .NOT. ; + EMPTY(c_ies_form.cod_art_cl) + obuyeritem = oitem.appendchild(oxml.createelement("cac:BuyersItemIdentification")) + obuyeritem.appendchild(oxml.createelement("cbc:ID")) + obuyeritem.lastchild.text = ; + c_ies_form.cod_art_cl + ENDIF + IF .NOT. ; + EMPTY(c_ies_form.cod) + oselleritem = oitem.appendchild(oxml.createelement("cac:SellersItemIdentification")) + oselleritem.appendchild(oxml.createelement("cbc:ID")) + oselleritem.lastchild.text = ; + ALLTRIM(c_ies_form.cod) + ENDIF + IF isi + SELECT c_get_cbare + LOCATE FOR cod = ; + c_ies_form.cod ; + .AND. ; + c_get_cbare.cod_bare <> ; + 0 + IF FOUND() + ostandarditem = oitem.appendchild(oxml.createelement("cac:StandardItemIdentification")) + oidstandard = ostandarditem.appendchild(oxml.createelement("cbc:ID")) + oidstandard.setattribute("schemeID", ; + "0160") + oidstandard.text = ; + ALLTRIM(STR(c_get_cbare.cod_bare, ; + 13, 0)) + ENDIF + IF pcs.is_loturi + SELECT c_get_cbare + LOCATE FOR cod = ; + c_ies_form.cod ; + .AND. ; + is_lot = 1 + IF FOUND() + IF c_ies_form.cantitate >= ; + 0 + IF .NOT. ; + USED("TMPDESC1") + getdescarcari(c_ies_form.cod, ; + c_ies_form.gestiune, ; + c_id_tip.id_iesire, ; + 0, ; + 1, ; + .F.) + ENDIF + SELECT tmpdesc1 + mexpliesirilot = ; + "" + SCAN FOR ; + .NOT. ; + EMPTY(lot) + IF pisfb + SQLEXEC(gnconnhandle, "SELECT garantie,fabricatie,explicatie FROM LOTURI WHERE cod=?TMPDESC1.lot", "C_FB") + SELECT * FROM C_FB INTO ARRAY agetgarantie + ELSE + SELECT garantie, fabricatie, explicatie FROM LOTURI WHERE cod = tmpdesc1.lot INTO ARRAY agetgarantie + ENDIF + IF _TALLY > ; + 0 + mexpliesirilot = mexpliesirilot + IIF(EMPTY(mexpliesirilot), "Lot ", "." + " Lot ") + ALLTRIM(tmpdesc1.lot) + IIF( .NOT. EMPTY(agetgarantie(1,1)) .AND. .NOT. ISNULL(agetgarantie(1,1)), " exp. " + DTOC(agetgarantie(1,1)), "") + IIF( .NOT. EMPTY(agetgarantie(1,2)) .AND. .NOT. ISNULL(agetgarantie(1,2)), " fabr. " + DTOC(agetgarantie(1,2)), "") + ELSE + mexpliesirilot = IIF(EMPTY(mexpliesirilot), "Lot " + ALLTRIM(tmpdesc1.lot), mexpliesirilot + ", " + ALLTRIM(tmpdesc1.lot)) + ENDIF + ENDSCAN + ENDIF + ENDIF + IF .NOT. ; + EMPTY(mexpliesirilot) + oclassificationlot = ; + oitem.appendchild(oxml.createelement("cac:CommodityClassification")) + olot = oclassificationlot.appendchild(oxml.createelement("cbc:ItemClassificationCode")) + olot.setattribute("listID", ; + "BB") + olot.text = IIF(LEN(ALLTRIM(mexpliesirilot)) > ; + 50, ; + LEFT(ALLTRIM(mexpliesirilot), ; + 50), ; + ALLTRIM(mexpliesirilot)) + ENDIF + ENDIF + SELECT c_get_cbare + LOCATE FOR cod = ; + c_ies_form.cod ; + .AND. ; + c_get_cbare.cod_bare <> ; + 0 + IF FOUND() + oclassificationcodbare = ; + oitem.appendchild(oxml.createelement("cac:CommodityClassification")) + ocodbare = oclassificationcodbare.appendchild(oxml.createelement("cbc:ItemClassificationCode")) + ocodbare.setattribute("listID", ; + "EN") + ocodbare.text = ALLTRIM(STR(c_get_cbare.cod_bare, ; + 13, ; + 0)) + ENDIF + SELECT c_get_cbare + LOCATE FOR cod = ; + c_ies_form.cod ; + .AND. .NOT. ; + EMPTY(c_get_cbare.cod_fe) ; + .AND. .NOT. ; + ISNULL(c_get_cbare.cod_fe) + IF FOUND() + oclassificationnc = ; + oitem.appendchild(oxml.createelement("cac:CommodityClassification")) + oclassificationstandardidnc = ; + oclassificationnc.appendchild(oxml.createelement("cbc:ItemClassificationCode")) + oclassificationstandardidnc.setattribute("listID", ; + "TSP") + oclassificationstandardidnc.text = ; + ALLTRIM(c_get_cbare.cod_fe) + ENDIF + ENDIF + oitemtaxcategory = oitem.appendchild(oxml.createelement("cac:ClassifiedTaxCategory")) + SELECT tip FROM ; + C_TVA_FACTURA WHERE ; + protva = ; + c_ies_form.protva ; + INTO ARRAY ; + agettipcota + oitemtaxcategory.appendchild(oxml.createelement("cbc:ID")) + oitemtaxcategory.lastchild.text = ; + ALLTRIM(agettipcota(1)) + oitemtaxcategory.appendchild(oxml.createelement("cbc:Percent")) + oitemtaxcategory.lastchild.text = ; + ALLTRIM(STR(c_ies_form.protva, ; + 2, 0)) + oitemtaxscheme = oitemtaxcategory.appendchild(oxml.createelement("cac:TaxScheme")) + oitemtaxscheme.appendchild(oxml.createelement("cbc:ID")) + oitemtaxscheme.lastchild.text = ; + "VAT" + oitemprice = oinvoiceline.appendchild(oxml.createelement("cac:Price")) + oitemamount = oitemprice.appendchild(oxml.createelement("cbc:PriceAmount")) + oitemamount.setattribute("currencyID", ; + mmoneda) + oitemamount.text = ALLTRIM(STR(c_ies_form.pret_vanz, ; + 15, 4)) + i = i + 1 +ENDSCAN +mdencomplet = plcalefacturi + ; + mlnumefisier + ; + ".xml" +mdenfisierraspuns = plcalefacturi + ; + mlnumefisier + ; + '.txt' +oxml.save(mdencomplet) +IF FILE(mdenfisierraspuns) + DELETE FILE ; + (mdenfisierraspuns) +ENDIF +cfilename = 'FREETAB\dist\Efactura\DUKIntegrator.jar' +cparams = ' -c FREETAB\dist\Efactura\config -v FACT1 ' + ; + mdencomplet + ' ' + ; + mdenfisierraspuns +shellexecute(0,"open",cfilename, ; + cparams,"",1) +WAIT WINDOW TIMEOUT 2 "" +shellexecute(0,"open", ; + plcalefacturi,"","", ; + 1) +IF FILE(mdenfisierraspuns) + IF FILETOSTR(mdenfisierraspuns) = ; + "ok" + MESSAGEBOX( ; + "Factura este valida. O puteti ncarca prin SPV, la sectiunea 'Factura electronica', cu optiunea de sintaxa XML - UBL sau cu programul 'Declaratii ANAF'.", ; + 64, ; + "Validare declaratie" ; + ) + DELETE FILE ; + (mdenfisierraspuns) + ELSE + MODIFY FILE ; + (mdenfisierraspuns) + ENDIF +ENDIF +ENDPROC + + + diff --git a/COMUN/programe/matxtab.prg b/COMUN/programe/matxtab.prg new file mode 100644 index 0000000..7736096 --- /dev/null +++ b/COMUN/programe/matxtab.prg @@ -0,0 +1,439 @@ +*~ Program...........: MATXTAB.PRG +*~ Author............: Valdis Matison +*~ Version...........: 2.5 +*~} Project...........: +*~ Created...........: 11/01/93 +*~ Copyright.........: (c) Matison Consulting Group Inc., 1993 +*~ 187 Dunblaine Avenue +*~ Toronto, Ontario +*~ M5M 2S6 +*~ +*~ 416-256-4495 +*~ +*~) Description.......: Replacement for GENXTAB.prg that ships with FoxPro +*~] Dependencies......: +*~ Calling Samples...: do MATXTAB with "XTAB", 1, .t., .f., 1, 4, 5, .t., 2, 3, 0, 0, .t., .t., .t., .t. +*~ do MATXTAB with "XTAB", 1, .t., .f., 1, 2, 6, .t., 3, 4, 5, 0, .t., .t., .t., .t., la_fldlist, 2, 0, 1 +*~ Returns...........: If you initialize a variable named LN_RETURN in the calling program +*~ this program will return a value in that variable +*~ This functionality is incomplete +*~ +*~ 0 = Success! +*~ - 1 = Unique column count greater than 256 +*~ - 2 = Escape pressed, procedure cancelled +*~ - 3 = No dbf in current area +*~ - 4 = Less than three fields in input dbf +*~ - 5 = Too many fields in results table +*~ - 6 = Row field must be character +*~ - 7 = Column field must be character +*~ > 0 returns Foxpro's error code generated by error() +*~ +*~ Major change list.: +*~ Future............: Create a front end, DOS/Windows/MAC +*~ Notes:............: The error handling is incomplete, the user should decide what errors to trap. +*~ Naming convention: First letter "l" denotes local variable +*~ Second letter denotes type +*~ +*~ Parameter List....: lc_outfile : Name of the output file +*~ lu_struct : 1 means cursor, 2 means table, 3 means array, +*~ .t. means cursor, .f. means table +*~ if blank, same format as input +*~ ll_closein : .t. means close input file, else keep open +*~ ll_therm : Included for compatibility with GENXTAB, not used by MATXTAB +*~ ln_rowfld : Number of field used for rows - field number +*~ ln_cellfld : Column used for individual totals in results table field number +*~ ln_colhead : Field used for column headings in XTAB report field number +*~ ll_xtotal :.t. means create cross totals, else don't bother +*~ +*~ Differences from Genxtab begin here +*~ +*~ ln_extfld1 : First extra field to go into output +*~ ln_extfld2 : Second extra field to go into output +*~ ln_extfld3 : Third extra field to go into output +*~ ln_extfld4 : Fourth extra field to go into output +*~ ll_cnt : Display count for each unique row +*~ ll_avg : Display average +*~ ll_min : Display minimum +*~ ll_max : Display maximum +*~ la_uniqcol : name of array passed that has the uniqe column names already in list +*~ ln_rowcol : Number of dimensions in the array that's sent down +*~ ln_colsort : 0 means smallest to largest +*~ 1 means largest to smallest +*~ ln_rowsort : 0 means ascending +*~ 1 means descending +*~ + +Parameters lc_outfile, lu_struct, ll_closein, ll_therm, ln_rowfld, ; + ln_colhead, ln_cellfld, ll_xtotal, ln_extfld1, ln_extfld2, ; + ln_extfld3, ln_extfld4, ll_cnt, ll_avg, ll_min, ll_max, ; + la_uniqcol, ln_rowcol, ln_colsort, ln_rowsort + +External Array la_uniqcol + +Private lc_colsort, lc_dbfname, lc_colhead, lc_cellfld, ; + ln_dimens, lc_error, lc_escasta, lc_escape, lc_group, ; + ln_params, lc_program, lc_rowfld, lc_rowsort, lc_safesta, ; + lc_talksta, lc_type, lc_where, ln_uniqcnt + +lc_dbfname = Alias() && Source file taken from alias name +lc_error = On( "ERROR" ) +lc_escasta = Set( "ESCAPE" ) +lc_escape = On( "ESCAPE" ) +ln_params = Pcount() +lc_safesta = Set( "SAFETY" ) +lc_talksta = Set( "TALK" ) + +lcOutputDir = ADDBS(SYS(2023)) + +*On Error Do lo_exit With Error() +Set Escape On +On Escape Do lo_exit With -2 +Set Safety Off +Set Talk Off + +If Empty( Alias() ) && A file must be open in the selected area + Do lo_exit With -3 +Endif + +If Fcount() < 3 && At least three fields required + Do lo_exit With -4 +Endif + +If ln_params < 1 && Nothing sent down - Determine filename for output + lc_outfile = 'XTABX.DBF' +Endif + +If ln_params < 2 && No format given for output + + If Isdigit( Left( Justfname( Dbf() ) ,1 ) ) + lu_struct = 1 && Cursor + Else + lu_struct = 2 && Table + Endif + +Else + + If Type("lu_struct") = "L" && Logical value + If lu_struct && True means create a cursor + lu_struct = 1 + Else && False means table + lu_struct = 2 + Endif && + Endif && Logical or numeric value + +Endif && No format given for output + + +If ln_params < 3 && Close input defaults to yes + ll_closein = .T. +Endif + +If ln_params < 5 && Number of field for cross tab rows + ln_rowfld = 1 +Endif + +If Type( Field( ln_rowfld ) ) <> "C" + On Escape Do lo_exit With -6 +Endif + + +If ln_params < 6 && Number of field for columns + ln_colhead = 2 +Endif + +If Type( Field( ln_colhead ) ) <> "C" + On Escape Do lo_exit With -7 +Endif + +If ln_params < 7 && Number of field for cross tab cells + ln_cellfld = 3 +Endif + +If ln_params < 8 + ll_xtotal = .F. +Endif + +If ln_params < 17 + Private la_uniqcol + Dime la_uniqcol(1) +Endif + +If ln_params > 17 + ln_dimens = ln_rowcol +Else + ln_dimens = 1 +Endif + +If ln_params > 18 + Do Case + Case ln_colsort = 1 + lc_colsort = "DESC" + + Otherwise + lc_colsort = "ASC" + Endcase + +Else + lc_colsort = "ASC" +Endif + +If ln_params = 20 + Do Case + Case ln_rowsort = 1 + lc_rowsort = "DESC" + + Otherwise + lc_rowsort = "ASC" + Endcase + +Else + lc_rowsort = "ASC" +Endif + +lc_colhead = Field( ln_colhead ) +lc_cellfld = lc_dbfname + "." + Field( ln_cellfld ) +lc_group = lc_dbfname + "." + Field( ln_rowfld ) +lc_program = Program( 1 ) +ln_return = 0 +lc_rowfld = lc_group +lc_where = "ZZ" + "." + ; + lc_colhead + "=" + ; + lc_dbfname + "." + ; + lc_colhead + + +*do matshow + +If ln_params < 17 + + lc_type = Type( (lc_colhead) ) + Do Case + Case lc_type = "C" + + Select &lc_colhead ; + from ( lc_dbfname ) ; + order By 1 &lc_colsort ; + group By 1 ; + into Array la_uniqcol + + Case lc_type = "D" + + Select "D"+Dtoc( &lc_colhead, 1 ) ; + from (lc_dbfname) ; + order By 1 &lc_colsort ; + group By 1 ; + into Array la_uniqcol + + lc_where = "ZZ" + "." + ; + lc_colhead + "=" + ; + "'D' +dtoc(" + ; + lc_dbfname + "." + ; + "&lc_colhead, 1 )" + + Endcase + + ln_uniqcnt = Alen( la_uniqcol ) + * If empty cursor + IF RECCOUNT(lc_dbfname) = 0 + ln_uniqcnt = 0 + ENDIF + +Else + + ln_uniqcnt = Alen( la_uniqcol, ln_dimens ) + +Endif + +If ln_uniqcnt >256 + Do lo_exit With -1 +Endif + +Dime la_colname[ ln_uniqcnt + 1, 4 ] +la_colname[1,1] = lc_colhead +la_colname[1,2] = "C" + +If ln_params < 17 && no array sent down + la_colname[ 1,3 ] = Len( &lc_colhead ) +Else + la_colname[ 1,3 ] = Len( la_uniqcol[ 1,1 ] ) && What about width ? +Endif + +la_colname[1,4] = 0 + + +For ln_k = 2 To ln_uniqcnt + 1 + la_colname[ ln_k, 1 ] = la_uniqcol[ 1, ln_k-1 ] + la_colname[ ln_k, 2 ] = "N" + la_colname[ ln_k, 3 ] = 1 + la_colname[ ln_k, 4 ] = 0 +Endfor + +Create Cursor ZZ From Array la_colname + +*--Now populate the table with 1's +For ln_k = 2 To ln_uniqcnt + 1 + Insert Into ZZ ( (lc_colhead), (Field(ln_k)) ) ; + VALUES (la_colname[ ln_k, 1 ], 1 ) +Endfor + +*-- +*-- Now create the cross tab +*-- + +lc_sqlxtab = "SELECT " + lc_rowfld + + +If ln_params > 8 + If ln_extfld1 > 0 + lc_sqlxtab = lc_sqlxtab + ", " + lc_dbfname + "." + field( ln_extfld1, lc_dbfname ) + lc_group = lc_group + ", " + lc_dbfname + "." + field( ln_extfld1, lc_dbfname ) + Endif +Endif + +If ln_params > 9 + If ln_extfld2 > 0 + lc_sqlxtab = lc_sqlxtab + ", " + lc_dbfname + "." + field( ln_extfld2, lc_dbfname ) + lc_group = lc_group + ", " + lc_dbfname + "." + field( ln_extfld2, lc_dbfname ) + Endif +Endif + +If ln_params > 10 + If ln_extfld3 > 0 + lc_sqlxtab = lc_sqlxtab + ", " + lc_dbfname + "." + field( ln_extfld3, lc_dbfname ) + lc_group = lc_group + ", " + lc_dbfname + "." + field( ln_extfld3, lc_dbfname ) + Endif +Endif + +If ln_params > 11 + If ln_extfld4 > 0 + lc_sqlxtab = lc_sqlxtab + ", " + lc_dbfname + "." + field( ln_extfld4, lc_dbfname ) + lc_group = lc_group + ", " + lc_dbfname + "." + field( ln_extfld4, lc_dbfname ) + Endif +Endif + +For ln_k = 1 To ln_uniqcnt + lc_sqlxtab = lc_sqlxtab + ", " + ; + "SUM( " + lc_cellfld + ; + "*ZZ." + ; + la_uniqcol[ 1, ln_k ] + ") as " + ; + la_uniqcol[ ln_dimens, ln_k ] +Endfor + +*-- +*-- Add totals column if required. +*-- Add count, average, min, max functions as well +*-- + +If ll_cnt + lc_sqlxtab = lc_sqlxtab + ; + ", COUNT( " + lc_rowfld + " ) as 'XCNT' " +Endif + +If ll_avg + lc_sqlxtab = lc_sqlxtab + ; + ", AVG( " + lc_cellfld + " ) as 'XAVG' " +Endif + +If ll_min + lc_sqlxtab = lc_sqlxtab + ; + ", MIN( " + lc_cellfld + " ) as 'XMIN' " +Endif + +If ll_max + lc_sqlxtab = lc_sqlxtab + ; + ", MAX( " + lc_cellfld + " ) as 'XMAX' " +Endif + +If ll_xtotal + lc_sqlxtab = lc_sqlxtab + ; + ", SUM( " + lc_cellfld + " ) as 'XTOT' " +Endif + +lc_sqlxtab = lc_sqlxtab + ; + " FROM (lc_dbfname), ZZ " + ; + " WHERE &lc_where " + ; + " GROUP BY &lc_group " + ; + " Order by &lc_group &lc_rowsort " + ; + " INTO " + +Do Case + Case lu_struct = 2 && output to table + lc_sqlxtab = m.lc_sqlxtab + "TABLE " + m.lcOutputDir + lc_outfile + + Case lu_struct = 3 && output to array + lc_sqlxtab = lc_sqlxtab + "ARRAY _XTABX " + + Public _xtabx + Dime _xtabx[ 1,1 ] + + Otherwise && output to cursor DEFAULT + lc_sqlxtab = lc_sqlxtab + "CURSOR " + lc_outfile +Endcase + +*-- Run the query + +&lc_sqlxtab + +Do lo_exit With ln_return +*-- eop MATXTAB + + +*~!********************************************* +*~! +*~! Procedure: lo_exit +*~! +*~!********************************************* +Procedure lo_exit + *~ Author............: Valdis Matison + *~ Modified by.......: + *~} Project...........: + *~ Created...........: 11/01/93 + *~ Copyright.........: (c) Matison Consulting Group Inc., 1993 + *~) Description.......: Shutdown procedure for MATXTAB + *~) + *~] Dependencies......: + *~ Calling Samples...: + *~ Parameter List....: ln_ret : Error code + *~ Returns...........: + *~ Future ideas......: + *~ Major change list.: + + Parameters ln_ret + ln_return = ln_ret + + If lc_talksta = "ON" + Set Talk On + Endif + + If lc_safesta = "ON" + Set Safety On + Endif + + If lc_escasta = "OFF" + Set Escape Off + Endif + + *release windows lw_mat + Clear Typeahead + + *-- Close input files only if successful + If ln_ret = 0 + USE IN (SELECT('ZZ')) + + If ll_closein && close the input file + USE IN (Select(lc_dbfname)) + Endif + IF USED(JUSTSTEM(lc_outfile)) + Select (lc_outfile) + ENDIF + Endif + + * On Error &lc_error + On Escape &lc_escape + + Return ln_ret + + *-- + *-- eop lo_exit +ENDPROC && lo_exit + diff --git a/COMUN/programe/mesaje.prg b/COMUN/programe/mesaje.prg new file mode 100644 index 0000000..db77adf --- /dev/null +++ b/COMUN/programe/mesaje.prg @@ -0,0 +1,43 @@ +*_________________________________________ +PROCEDURE anunta_rezultat + LPARAMETERS lcCategorie, lcSursa, lcMesaj, llEroare, llInTabel, lnId_ref + IF llInTabel + scrie_in_mesaje(lcCategorie, lcSursa, lcMesaj, llEroare, lnId_ref) + ELSE + DO mesaj With lcMesaj, '' + ENDIF +ENDPROC + +PROCEDURE scrie_in_mesaje + LPARAMETERS lcCategorie, lcSursa, lcMesaj, llEroare, lnId_ref + LOCAL lnOrdine + SELECT mesaje + CALCULATE MAX(ordine) TO m.lnOrdine + m.lnOrdine = m.lnOrdine + 1 + APPEND BLANK + replace ordine WITH m.lnOrdine, sursa WITH lcSursa, mesaj WITH lcMesaj, ; + eroare WITH llEroare, categorie WITH lcCategorie, id_ref WITH lnId_ref +ENDPROC + +PROCEDURE sterge_mesaje + ZAP IN mesaje +ENDPROC + +PROCEDURE raport_mesaje + PARAMETERS tcPerioada + PRIVATE pcTitlu,pcPerioada,pcDataOra +*!* PRIVATE toFirma +*!* SELECT FIRMA +*!* LOCATE FOR NFSCURT=FSCURT +*!* SCATTER NAME m.toFirma +*!* SELECT mesaje +*!* IF RECNO() > 0 +*!* SET ORDER TO ordine +*!* REPORT FORM mesaje TO PRINTER PROMPT PREVIEW +*!* ENDIF + pcTitlu=[VERIFICARE GLOBALA] + pcPerioada=[Perioada ] + pcdataora = get_ora(2) + SELECT crsverificari + REPORT FORM rap_mesaje TO PRINTER PROMPT preview +ENDPROC \ No newline at end of file diff --git a/COMUN/programe/modele/utilizatormodel.prg b/COMUN/programe/modele/utilizatormodel.prg new file mode 100644 index 0000000..bc1ea0a --- /dev/null +++ b/COMUN/programe/modele/utilizatormodel.prg @@ -0,0 +1,74 @@ +#INCLUDE COMUN.H +#INCLUDE MVC.H + +Define Class UtilizatorModel As Custom + + cUtilizator = Null + cParola = Null + nIdUtil = Null + cSex = [] + lInTura = .F. + nNivelAcces = 0 && 1 - ospatar + && 2,3(1+2) - ospatar sef + + Procedure actualizeazaDate + Lparameters tcParola,tcCod,tcUtilizator + This.cParola = tcParola + This.nNivelAcces = Val(Substr(tcCod,1,1)) + This.cSex = Iif(VAL(Substr(tcCod,2,1))=2,[F],[M]) + This.lInTura = Iif(VAL(Substr(tcCod,3,1))=0,.F.,.T.) + If Empty(tcUtilizator) + This.nIdUtil = Val(Substr(tcCod,4,AT([$],tcCod)-4)) + This.cUtilizator = Substr(tcCod,At([$],tcCod)+1) + Else + This.nIdUtil = Val(Substr(tcCod,4)) + This.cUtilizator = tcUtilizator + Endif + Endproc + *********************************************************************** + Procedure reseteazaDate + WITH This + .cUtilizator = Null + .cParola = Null + .nIdUtil = Null + .cSex = Null + .lInTura = .F. + .nNivelAcces = 0 + ENDWITH + Endproc + *********************************************************************** + Function esteAutentificat + Return Iif(Isnull(This.nIdUtil),.F.,.T.) + Endfunc + *********************************************************************** + Function getUtilizator + Return This.cUtilizator + Endfunc + *********************************************************************** + Function getIdUtil + Return This.nIdUtil + Endfunc + *********************************************************************** + FUNCTION getSex + RETURN This.cSex + ENDFUNC + *********************************************************************** + FUNCTION getNivelAcces + RETURN This.nNivelAcces + ENDFUNC + *********************************************************************** + PROCEDURE setInTura + LPARAMETERS tlInTura + This.lInTura = tlInTura + ENDPROC + *********************************************************************** + FUNCTION getInTura + RETURN This.linTura + ENDFUNC + *********************************************************************** + PROCEDURE Release + RELEASE This + ENDPROC + *********************************************************************** + +Enddefine && UtilizatorModel diff --git a/COMUN/programe/oHeader.prg b/COMUN/programe/oHeader.prg new file mode 100644 index 0000000..6f3476e --- /dev/null +++ b/COMUN/programe/oHeader.prg @@ -0,0 +1,58 @@ +Define Class PSHeader As Header + + cHOrder = "" + nOrderColor = Rgb(0,0,255) + nNotOrderColor = 0 + cCallMethod = 'Refresh()' + cPictureProp = '' + + Procedure Init + Lparameters tcOldCaption, tcFontName, tnOldForeColor, tllOldFontUnderline, tcMethodName, tcOrder, tlOldWordWrap, tcPictureProp + + DoDefault() + This.Alignment = 2 + This.Caption = tcOldCaption + This.ForeColor = tnOldForeColor + This.FontUnderline = tllOldFontUnderline + this.WordWrap = tlOldWordWrap + This.FontName = tcFontName + This.nNotOrderColor = tnOldForeColor + If !Empty(tcMethodName) + This.cCallMethod = Alltrim(tcMethodName) + ENDIF + If !Empty(tcPictureProp) + This.cPictureProp = Alltrim(tcPictureProp) + Endif + *This.cHOrder = Strextract(Lower(This.Name),'grh') + IF ([*] $ tcOrder) OR ([+] $ tcOrder) OR ([-] $ tcOrder) OR ([/] $ tcOrder) OR ([(] $ tcOrder) + this.cHOrder = [] + ELSE + this.cHOrder = ALLTRIM(tcOrder) + ENDIF + + Endproc + + + Procedure DblClick + lcOrder = This.cHOrder + + If !Empty(lcOrder) + This.Parent.Parent.SetAll("ForeColor", This.nNotOrderColor, "PSHeader") + This.Parent.Parent.SetAll("FontUnderline", .F., "PSHeader") + this.Parent.Parent.SetAll("Picture",'',"PSHeader") + This.ForeColor = This.nOrderColor + This.FontUnderline = .T. + lcCallMethod = [THIS.Parent.Parent.] + This.cCallMethod + [(lcOrder)] + &lcCallMethod + IF !EMPTY(This.cPictureProp) + lcPictureName = [THIS.Parent.Parent.] + This.cPictureProp + this.Picture = &lcPictureName + ENDIF + + Else + * Leave as is + Endif + + Endproc + +Enddefine diff --git a/COMUN/programe/obj2arr.PRG b/COMUN/programe/obj2arr.PRG new file mode 100644 index 0000000..5f5e1b5 --- /dev/null +++ b/COMUN/programe/obj2arr.PRG @@ -0,0 +1,100 @@ +* Version....: 1.0 +* Author.....: Maurice de Beijer +* Date.......: January 29, 1998 +* Notice.....: Copyright (c) 1996-1998 ABL, All Rights Reserved. +* Compiler...: Visual FoxPro 05.00.00.0415 for Windows +* Abstract...: Creates a one dimensional array with a pointer +* to all object contained within the object +* +* Returns....: The number of selected objects +* +* Parameters.: taTarget +* Target array (passed by reference) +* taObject +* Container object reference +* +LPARAMETERS taTarget, taObject + +LOCAL lnCount +lnCount = 0 + +DIMENSION taTarget[1, 1] +taTarget = NULL + +* +* Make sure an object was passed +* +IF TYPE('taObject') = 'O' AND !ISNULL(taObject) + * + * Object passed into recursive call + * + object2array(@taTarget, taObject) + + IF TYPE('taTarget[1]') = 'O' + * + * Retun the number of objects + * + lnCount = ALEN(taTarget, 1) + ENDIF +ENDIF + +RETURN lnCount + + + + +*------------------------------------------------------- +* Function....: Object2Array +* Called by...: Obj2Arr +* +* Abstract....: Creates a one dimensional array with a pointer +* to all object contained within the object +* +* Returns.....: None +* +* Parameters..: taTarget +* Target array (passed by reference) +* taObject +* Container object reference +* +* Notes.......: +*------------------------------------------------------- +PROCEDURE Object2Array(taTarget, taObject) +LOCAL ARRAY laMembers[1, 1] +LOCAL lnCount, lnI + +* +* Make sure the second parameter is an object before adding it to the array +* +IF TYPE('taObject') = 'O' AND !ISNULL(taObject) + IF TYPE('taTarget[1]') = 'O' AND !ISNULL(taTarget[1]) + * + * Increase the array size + * + lnCount = ALEN(taTarget, 1) + 1 + DIMENSION taTarget[lnCount] + * + * Add the current object to the end + * + taTarget[lnCount] = taObject + ELSE + * + * First object in the array + * + taTarget[1] = taObject + ENDIF + + * + * Get all member names + * + lnCount = AMEMBERS(laMembers, taObject, 2) + + FOR lnI = 1 TO lnCount + * + * Get all contained objects from the member objects + * + object2array(@taTarget, EVAL('taObject.' + laMembers[lnI]) ) + ENDFOR +ENDIF + +RETURN diff --git a/COMUN/programe/ocasabanca.prg b/COMUN/programe/ocasabanca.prg new file mode 100644 index 0000000..526da2e --- /dev/null +++ b/COMUN/programe/ocasabanca.prg @@ -0,0 +1,330 @@ +*!* ocasaban.prg +*!* 27.04.2009 +*!* marius.mutu +*!* am mutat viz_bancasa din roacont\programe\ocont2003.prg in comun\programe\ pentru folosire in ROACASA + +*!* 27.08.2018 +*!* marius.mutu +*!* viz_bancasa - test_casa si pentru 5314 reg. casa in valuta (trebuia atentionare pentru sold zilnic negativ + +********************************************************************************************* +* PROCEDURE viz_bancasa(tcCont) +* Date : 29/11/2005, 12:00:20 +* author : marius.mutu +* description: +******************************************* INCEPUT:viz_bancasa ******************************************* +Procedure viz_bancasa + Lparameters tcCont, tlArataInregOperator + + *!* adaugat 08.05.2009 + *!* alex.lepadatu + *!* tlArataInregOperator - daca = .t. atunci se arata doar inregistrarile operatorului + *!* 08.05.2009 ^^ + + Local lccSelect, lnPrecDeb, lnPrecCred, lnPrecDebval, lnPrecCredval, lnSold + Local lcCursor, lcSqlCount, llAfisareTot, llSucces, lnInregistrariAfisare, llValuta + Local lcExec, lcSelect, lcSchema, lcFiltru, lcOrder, lnSucces + Local lcClasa, lcTitlu, lcck_bancasa_caption, lcck_bancasa_titlu, lcTip + LOCAL oreg + PRIVATE pnRecCnt, pobancasa + Store 0 To lnPrecDeb, lnPrecCred, lnPrecDebval, lnPrecCredval + Store "" To pobancasa + lccSelect = SELECT() + + If Empty(tcCont) Or !Inlist(tcCont, '5311', '5121', '5314', '5124') + lcCont = '5311' + lcClasa = "frm_casaban" + lcTitlu = "REGISTRUL DE CASA" + lcck_bancasa_caption = "Casa" + lcck_bancasa_titlu = "Alegeti casa" + lcTip = "Casa" + Else + Local lcCont + lcCont = Alltrim(tcCont) + Endif + llValuta = Inlist(m.lcCont, '5314', '5124') + + *** SETARE CONTEXT BANCASA PENTRU VBANCASA SI VBANCASA_VAL + + *lcExec = [begin cbancasaproc('] + lcCont + [', ]+ALLTRIM(STR(gnluna+gnan*12))+[); end;] + lcExec = [begin pack_sesiune.setcont('] + lcCont + ['); end;] + + lnSucces = goExecutor.oExecute(lcExec) + If lnSucces < 0 + amessagebox(goExecutor.cEroare, 0 + 16, 'Eroare') + Return + Endif + + + *** VERIFICARI CU BALANTA DE VERIFICARE DUPA CONT + Wait Window 'VERIFICARE SOLDURI...' Nowait + Do inainte With "REGCASA", lcCont In oinainte_de.prg + + *** VERIFICARE SOLDURI CASA LEI + If Inlist(lcCont, '5311', '5314') + Wait Window 'TEST CASA...' Nowait + Do test_casa With lcCont In oinainte_de.prg + Endif + + * Calculez numarul de inregistrari. Daca numarul este mai mic de min(300, gnInregistrariAfisare) afisez toate inregistrarile in loc sa intru cu 1=2 + lnInregistrariAfisare = Iif(Type('gnInregistrariAfisare') = 'N', m.gnInregistrariAfisare, 300) + + lcSqlCount = [SELECT COUNT(*) as nr FROM balanta_parteneri where an=?gnAn and luna=?gnLuna and CONT in ('] + Alltrim(Strtran(m.lcCont, [,], [','])) + [') ] + pnRecCnt = 0 + llSucces = goExecutor.oSelecteaza2Value(m.lcSqlCount, @pnRecCnt) + llAfisareTot = (Nvl(m.pnRecCnt, 0) <= m.lnInregistrariAfisare) + + *** CALCULEZ PRECEDENTE DIN BALANTA DE PARTENERI PENTRU SOLDURI INITIALE + lcSelect = [select SUM(precdeb) as precdeb, SUM(preccred) as preccred, ] + ; + [SUM(precvaldeb) as precvaldeb, SUM(precvalcred) as precvalcred ] + ; + [from ] + gcs + [.balanta_parteneri where cont = '] + lcCont + [' ] + ; + [and an = ?gnAn and luna = ?gnLuna ] + gcCondSucursala + + lcCursor = [crsSold] + lnSucces = goExecutor.oExecute(lcSelect, lcCursor) + If lnSucces < 0 + amessagebox(goExecutor.cEroare, 0 + 16, 'Eroare') + Else + Select crsSold + Go Top + lnPrecDeb = precdeb + lnPrecCred = preccred + lnPrecDebval = precvaldeb + lnPrecCredval = precvalcred + Use In crsSold + Endif + + *!* modificare v 2.5.40 + creeaza_cursor_bancasa(m.lcCont, m.glBancasaCum) + creeaza_cursor_bancasalista(m.lcCont, .T.) + + Select casban + Do Case + Case lcCont = '5311' + lcClasa = "frm_casaban" + lcTitlu = "REGISTRUL DE CASA" + lcck_bancasa_caption = "Casa" + lcck_bancasa_titlu = "Alegeti casa" + lcTip = "Casa" + + Case lcCont = '5121' + lcClasa = "frm_casaban" + lcTitlu = "REGISTRUL DE BANCA" + lcck_bancasa_caption = "Banca" + lcck_bancasa_titlu = "Alegeti banca" + lcTip = "Banca" + + Case lcCont = '5314' + lcClasa = "frm_casaban_val" + lcTitlu = "REGISTRUL DE CASA IN VALUTA" + lcck_bancasa_caption = "Casa" + lcck_bancasa_titlu = "Alegeti casa" + lcTip = "Casa" + + Case lcCont = '5124' + lcClasa = "frm_casaban_val" + lcTitlu = "REGISTRUL DE BANCA IN VALUTA" + lcck_bancasa_caption = "Banca" + lcck_bancasa_titlu = "Alegeti banca" + lcTip = "Banca" + + Endcase + Clear Class (lcClasa) + + *oreg=Createobject(lcClasa,lcCont) + oreg = Createobject(lcClasa, lcCont, tlArataInregOperator, m.llAfisareTot) + + With oreg + .Lb_titlu_alb_b121.Caption = lcTitlu + .grid1.cbancasa.header1.Caption = lcck_bancasa_caption + .ck_bancasa.Caption = lcck_bancasa_caption + .ck_bancasa.titlu = lcck_bancasa_titlu + .nrcont = lcCont + .tip = lcTip + .nprecdebI = lnPrecDeb + .npreccredI = lnPrecCred + .nprecdebvalI = lnPrecDebval + .npreccredvalI = lnPrecCredval + Endwith + oreg.Show(1) + + Use In (SELECT('casban')) + USE IN (SELECT('cBancasaLista')) + +Endproc && viz_bancasa +******************************************* SFARSIT: viz_bancasa ******************************************* +********************************* INCEPUT: raport_regcasa_restrans **************************** +Function raport_regcasa_restrans + Lparameters tnTip, tlCasa, tcCursorSursa, tcCursorDest + Private pnDocAles, pnPartAles + Store 0 To pnDocAles, pnPartAles + Local llReturn + llReturn = .F. + + Select Distinct 0 As ales, fdoc As fel_document, id_fdoc From (tcCursorSursa) ; + Where id_fdoc <> 0 ; + Order By fel_document Into Cursor crsdocumente Readwrite + + Select Distinct 0 As ales, id_nume As id_part, nume As denumire, cod_fiscal From (tcCursorSursa) ; + Where Nvl(id_nume, 0) <> 0 ; + Order By denumire, cod_fiscal Into Cursor crsparteneri Readwrite + + If Reccount('crsdocumente') <> 0 And Reccount('crsparteneri') <> 0 + ofrmcriterii = Createobject('frm_casaban_restrans') + ofrmcriterii.Show(1) + Else + gnButon = 1 + Endif + If gnButon = 1 + llReturn = .T. + If pnDocAles = 0 And pnPartAles = 0 + If tnTip = 1 + If tlCasa + Select * From (tcCursorSursa) Where nrcrt = 2 Order By dataireg, dataact, cod Into Cursor (tcCursorDest) Readwrite + Else + Select * From (tcCursorSursa) Where nrcrt = 2 Order By dataact, cod Into Cursor (tcCursorDest) Readwrite + Endif + Else + Select * From (tcCursorSursa) Where nrcrt = 2 Order By dataireg, bancasa, dataact, cod Into Cursor (tcCursorDest) Readwrite + Endif + Else + If tnTip = 1 + If tlCasa + Select dataireg, [] As serie_act, 0 As nract, ; + nume, explicatia, nrord, Sum(incasari) As incasari, Sum(plati) As plati, ; + scd, ascd, scc, ascc, dataact, Min(cod) As cod, bancasa From (tcCursorSursa) ; + Where nrcrt = 2 And id_fdoc In (Select id_fdoc From crsdocumente Where ales = 1 ) And ; + id_nume In (Select id_part From crsparteneri Where ales = 1 ) ; + Group By 1, 2, 3, 4, 5, 6, 9, 10, 11, 12, 13, 15 ; + Union All ; + Select dataireg, serie_act, nract, ; + nume, explicatia, nrord, incasari, plati, ; + scd, ascd, scc, ascc, dataact, cod, bancasa From (tcCursorSursa) ; + Where nrcrt = 2 And Not (id_fdoc In (Select id_fdoc From crsdocumente Where ales = 1 ) And ; + id_nume In (Select id_part From crsparteneri Where ales = 1)) ; + Order By 1, 13, 14 Into Cursor (tcCursorDest) Readwrite + Else + Select dataireg, [] As serie_act, 0 As nract, ; + nume, explicatia, nrord, Sum(incasari) As incasari, Sum(plati) As plati, ; + scd, ascd, scc, ascc, dataact, Min(cod) As cod, bancasa From (tcCursorSursa) ; + Where nrcrt = 2 And id_fdoc In (Select id_fdoc From crsdocumente Where ales = 1 ) And ; + id_nume In (Select id_part From crsparteneri Where ales = 1 ) ; + Group By 1, 2, 3, 4, 5, 6, 9, 10, 11, 12, 13, 15 ; + Union All ; + Select dataireg, serie_act, nract, ; + nume, explicatia, nrord, incasari, plati, ; + scd, ascd, scc, ascc, dataact, cod, bancasa From (tcCursorSursa) ; + Where nrcrt = 2 And Not (id_fdoc In (Select id_fdoc From crsdocumente Where ales = 1 ) And ; + id_nume In (Select id_part From crsparteneri Where ales = 1)) ; + Order By 13, 14 Into Cursor (tcCursorDest) Readwrite + Endif + Else + Select dataireg, Iif(id_fdoc = gnID_FDOC_BONFISCAL, [], serie_act) As serie_act, ; + Iif(id_fdoc = gnID_FDOC_BONFISCAL, 0, nract) As nract, ; + nume, explicatia, nrord, Sum(incasari) As incasari, Sum(plati) As plati, ; + scd, ascd, scc, ascc, dataact, Min(cod) As cod, bancasa From (tcCursorSursa) ; + Where nrcrt = 2 And id_fdoc In (Select id_fdoc From crsdocumente Where ales = 1 ) And ; + id_nume In (Select id_part From crsparteneri Where ales = 1 ) ; + Group By 1, 2, 3, 4, 5, 6, 9, 10, 11, 12, 13, 15 ; + Union All ; + Select dataireg, serie_act, nract, ; + nume, explicatia, nrord, incasari, plati, ; + scd, ascd, scc, ascc, dataact, cod, bancasa From (tcCursorSursa) ; + Where nrcrt = 2 And Not (id_fdoc In (Select id_fdoc From crsdocumente Where ales = 1 ) And ; + id_nume In (Select id_part From crsparteneri Where ales = 1)) ; + Order By 1, 15, 13, 14 Into Cursor (tcCursorDest) Readwrite + Endif + Endif + Endif + If Used('crsdocumente') + Use In crsdocumente + Endif + + If Used('crsparteneri') + Use In crsparteneri + Endif + + Release ofrmcriterii, pnDocAles, pnPartAles + Return llReturn +Endfunc && raport_regcasa_restrans +********************************* SFARSIT: raport_regcasa_restrans **************************** +Procedure creeaza_cursor_bancasa + Lparameters tcCont, tlBancasaCum + Local lcCursor + + lcCursor = [casban] + *** SELECTIE SOLDURI DIN BALANTA PARTENERI SI INREGISTRARI DIN REGISTRUL JURNAL (VBANCASA SI VBANCASA_VAL) + lcSchema = [nrcrt n(1),fdoc c(30),dataact d,dataireg d,nract N(20),serie_act c(10),bancasa c(50), id_bancasa N(20), ] + ; + [nume c(50), cod_fiscal c(50), reg_comert c(50), explicatia c(100), ] + ; + [scd c(4),scc c(4),ascd c(4), ascc c(4),COD N(20),NRORD C(30),NRESP C(30),SUCURSALA C(100),id_nume N(20),id_fdoc N(20),] + ; + [incasari n(19,gnPa),plati n(19,gnPa)] + Iif(Inlist(m.tcCont, '5314', '5124'), [,incasval n(19,gnPa),platival n(19,gnPa),numeval C(10), ] + Iif(m.tlBancasaCum, [curs C(100)], [curs N(10,4)]), []) + [,soldcum N(19,gnPa)] + + lcSelect = [select nrcrt,fdoc,dataact,dataireg,nract,serie_act,bancasa,id_bancasa,nume,cod_fiscal,reg_comert,explicatia,] + ; + [scd,scc,ascd,ascc,COD,NRORD,NRESP,sucursala,id_nume,id_fdoc,] + ; + [incasari,plati] + Iif(Inlist(m.tcCont, '5314', '5124'), [,incasval,platival,numeval,curs], []) + [,CAST(0 as Number(20,4)) as soldcum] + ; + [ from vbancasa_] + Alltrim(m.tcCont) + Iif(m.tlBancasaCum, [_CUM], []) + + lcFiltru = [1 = 2] + lcOrder = [nrcrt,dataireg,bancasa,cod] + llAfisare = .F. + lcGroup = "" + llModParam = .T. + lcFiltruOriginal = "" + If Used(lcCursor) + Use In (lcCursor) + Endif + gencursor('pobancasa', lcCursor, lcSelect, lcFiltru, lcSchema, lcOrder, llAfisare, lcGroup, llModParam, lcFiltruOriginal) + pobancasa.ca_baza1.afisare() +Endproc + +* Cursor lista banci si solduri pentru filtrare in formular frm_casban +PROCEDURE creeaza_cursor_bancasalista + LPARAMETERS tcCont, tlEmpty + LOCAL lcSelect, lcSql, lnIdMax + Local llSucces, llValuta + lcSelect = SELECT() + + * Creez cursorul banci si solduri pentru filtrare + CREATE CURSOR cBancasaLista (bancasa C(250) null, id_bancasa N(20) null, numeval C(10) null, sold N(20,4) null, ord N(1) null) + * La prima apelare vreau doar cursorul gol + IF m.tlEmpty + SELECT (m.lcSelect) + RETURN + ENDIF + + llValuta = Inlist(m.tcCont, '5314', '5124') + lcSql = [select bancasa,id_bancasa,SUM(incasari) as incasari,SUM(plati) as plati,CAST(0 as Number(20,4)) as sold] + Iif(m.llValuta, [,SUM(incasval) as incasval,SUM(platival) as platival,numeval], []) + ; + [ from vbancasa_] + Alltrim(m.tcCont) + ; + [ group by bancasa,id_bancasa] + Iif(m.llValuta, [,numeval], []) + + llSucces = goExecutor.oExecuta(m.lcSql, 'cSoldTemp') + + IF m.llValuta + select 1 AS ord, PADR('TOATE', 250, ' ') as bancasa, 0 as id_bancasa, 'LEI' as numeval, sum(incasari-plati) as sold from cSoldTemp ; + UNION ALL ; + select 2 AS ord, PADR(numeval, 250, ' ') as bancasa, -1 as id_bancasa, numeval, sum(incasval-platival) as sold from cSoldTemp group by numeval ; + UNION ALL ; + select 3 AS ord, bancasa, id_bancasa, numeval, sum(incasval-platival) as sold from cSoldTemp group by bancasa, id_bancasa, numeval ; + order by 1,3 ; + INTO CURSOR cBancaTemp READWRITE + ELSE + select 1 AS ord, PADR('TOATE', 250, ' ') as bancasa, 0 as id_bancasa, 'LEI' as numeval, sum(incasari-plati) as sold from cSoldTemp ; + UNION ALL ; + select 3 AS ord, bancasa, id_bancasa, 'LEI' as numeval, sum(incasari-plati) as sold from cSoldTemp group by bancasa, id_bancasa ; + order by 1,2 ; + INTO CURSOR cBancaTemp READWRITE + ENDIF + + CALCULATE MAX(id_bancasa) TO lnIdMax IN cBancaTemp + + * creez un id_bancasa unic pentru fiecare valuta + UPDATE cBancaTemp SET id_bancasa = m.lnIdMax + RECNO() WHERE id_bancasa = -1 + + USE IN (SELECT('cSoldTemp')) + + SELECT cBancasaLista + APPEND FROM DBF('cBancaTemp') + USE IN (SELECT('cBancaTemp')) + + SELECT (m.lcSelect) +ENDPROC && creeaza_cursor_bancasalista \ No newline at end of file diff --git a/COMUN/programe/ocautare.prg b/COMUN/programe/ocautare.prg new file mode 100644 index 0000000..f1f91e9 --- /dev/null +++ b/COMUN/programe/ocautare.prg @@ -0,0 +1,3023 @@ +*!* 24.07.2009 +*!* marius.mutu +*!* CAUT_ARTICOL (tlCautPlus - daca se foloseste formularul caut_alfa_form_plus cu butonul but_start_criterii) + +*!* 04.09.2009 +*!* marius.mutu +*!* caut_gestiune_xml ( + tnPornire) + +*!* 22.02.2010 +*!* marius.mutu +*!* caut_gestiune_xml gcCondSucursala + +*!* 06.07.2011 +*!* marius.mutu +*!* caut_politici_preturi +*!* cautare in vcrm_politici_preturi dupa drepturi utilizator + +*!* 19.12.2011 +*!* marius.mutu +*!* caut_parteneri_xml - selectie inclusiv parteneri vechi unificati si transformati in parteneri noi + +*!* 01.02.2013 +*!* marius.mutu +*!* caut_gestiune_xml - corectat c.id_sucursala in loc de a.id_sucursala + +*!* 06.01.2014 +*!* marius.mutu +*!* caut_gestiune_dest - am mutat conditia de la planul de conturi sintetic si analitic in join, in loc de where - nu mergea in unele cazuri + +*!* 28.09.2018 +*!* marius.mutu +*!* caut_parteneri + parametru tlInactiv: daca arat si partenerii inactivi (ex: la fisa de cont, cand un partener s-a unificat, partenerul vechi este inactiv) + +*!* 17.01.2020 +*!* marius.mutu +*!* caut_responsabil - include CNP, se foloseste in baza.vcx > item.gotfocus, ca sa se afiseza si marca responsabilului + +*!* 12.12.2024 +*!* marius.mutu +*!* caut_client_contract_activ - nu se iau contracte active de pe clienti inactivi + +*!* #DEFINE CRLF CHR(13) + CHR(10) +#INCLUDE COMUN\ROA.H + +************************************************************************************************************************ +* CautPartenerContabilitate(cTitlu, cTipuriParteneri) +* Date : 04/10/2006 +* author : marius.mutu +* se cauta un partener dupa o lista de tipuri partener in toti partenerii +* se ordoneaza lista de parteneri - intai partenerii cu tip in lista de tipuri, apoi restul +* se coloreaza partenerii care nu au tip in lista de tipuri +* se poate da un cont - se obtine lista de tipuri partener din coresp_tip_cont +* se pot adauga corespondentele daca aleg un partener care nu are tipurile asociate +* loCauta = CautPartenerContabilitate(GetHash([cTitlu=>Alegeti partenerul 401??lAdaugCorespondente=>1??cCont=>401]) +******************************************* INCEPUT:CautPartenerContabilitate******************************************* +Procedure CautPartenerContabilitate + Lparameters toHash + && ctitlu: Nume client/furnizor etc. + && cTipuriParteneri: lista de id-uri tipuri partener delimitata prin ',' + && cCont: contul pentru care se obtine lista de tipuri partener + && llAdaugCorespondente: daca se adauga corespondente partener - tipuri partener + + + + Local loHash As MyHash, lcSelect, lcTitlu, lcTipuriParteneri, lnSucces, llAllInList, lnPornire, lcFiltruOrig, lcNumeProcedura, llAdaugCorespondente + + *!* parametrii + lcTitlu = toHash.GetValue("cTitlu") + lcTipuriParteneri = toHash.GetValue("cTipuriParteneri") + lcCont = toHash.GetValue("cCont") + llAdaugCorespondente = toHash.GetValue("lAdaugCorespondente") + lcNumeProcedura = toHash.GetValue("cNumeProc") + lcFiltruOrig = toHash.GetValue("cFiltruOrig") + llAllInList = toHash.GetValue("lAllInList") + lnPornire = toHash.GetValue("nPornire") + + *!* parametrii + + If Empty(lcTitlu) + lcTitlu = 'Alegeti partenerul' + Endif + + && se obtine lista de tipuri parteneri asociata unui cont + If !Empty(lcCont) And Empty(lcTipuriParteneri) + lcSelect = [SELECT stringAgg(to_char(id_tip_part)) FROM coresp_tip_cont WHERE cont = '] + lcCont + ['] + lnSucces = goExecutor.oSelect2Value(lcSelect, @lcTipuriParteneri) + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare, 0 + 16, 'Eroare') + Endif + Endif + lcTipuriParteneri = Nvl(lcTipuriParteneri, '') + + If !Empty(lcTipuriParteneri) + *!* selectia se face din corespondente tipuri partener + lcSelect = [SELECT MIN(CASE WHEN A.ID_TIP_PART in (] + lcTipuriParteneri + [) THEN 0 ELSE 1 END) AS TIP,] + ; + [B.ID_PART, B.DENUMIRE AS NUME, B.COD_FISCAL, B.DENUMIRE ] + ; + [ FROM CORESP_TIP_PART A ] + ; + [ LEFT JOIN NOM_PARTENERI B ON A.ID_PART = B.ID_PART ] + Else + *!* selectia se face din parteneri + lcSelect = [SELECT 0 as TIP, B.ID_PART, B.DENUMIRE AS NUME, B.COD_FISCAL, B.DENUMIRE ] + ; + [ FROM NOM_PARTENERI B ] + Endif + + loHash = GetHash() + With loHash + .SetValue("cSelect", lcSelect) + .SetValue("cFiltru", "1=2") + .SetValue("cOrder", "1,NUME") + If !Empty(Nvl(lcTipuriParteneri, '')) + .SetValue("cGroup", "B.ID_PART, B.DENUMIRE, B.COD_FISCAL") + Endif + .SetValue("cColoana", "denumire,cod_fiscal,id_part") + .SetValue("cTitlu", lcTitlu) + .SetValue("cTitluColoana", "Nume,Cod fiscal,ID") + If !Empty(lcFiltruOrig) + lcFiltruOrig = [B.STERS = 0 AND B.INACTIV = 0 AND ] + lcFiltruOrig + Else + lcFiltruOrig = [B.STERS = 0 AND B.INACTIV = 0] + Endif + .SetValue("cFiltruOriginal", lcFiltruOrig) + *!* IF EMPTY(lcTipuriParteneri) + *!* && daca nu exista tipuri la un cont + *!* .SetValue("cFiltruOriginal", "1=2") + *!* ENDIF + .SetValue("cPrimaColoana", "denumire") + If Empty(lcNumeProcedura) + .SetValue("cNumeProc", [nom_parteneri;"] + lcTipuriParteneri + ["]) + Else + .SetValue("cNumeProc", lcNumeProcedura) + ENDIF + .SetValue("cProceduraVerifica", "nom_parteneri_verifica") + .SetValue("cProceduraCopiaza", "nom_parteneri_copiaza") + If !Empty(lcTipuriParteneri) + *!* daca partenerii sunt ordonati dupa tip - coloreaza partenerii care au tip = 1 + .SetValue("cGridDynamicBackColor", [IIF(TIP = 1, RGB(225,225,225), RGB(255,255,255))]) + .SetValue("cGridToolTip", "Partenerii de alt tip sunt colorati gri.") + Endif + .SetValue("lAllInList", llAllInList) + .SetValue("nPornire", lnPornire) + + Endwith + + + loCauta = cauta_alfa_hash(loHash) && 11.07.2007 + + *!* ADAUG TIPURI DE PARTENER - PARTENER DACA NU EXISTA + If llAdaugCorespondente And !Isnull(loCauta) And Type('loCauta.id_part') = 'N' And loCauta.id_part <> 0 And !Empty(lcTipuriParteneri) And loCauta.tip = 1 + Do ADAUGA_CORESP_TIP_PART With loCauta.id_part, lcTipuriParteneri In oproceduri_parteneri.prg + Endif + + Return loCauta + +Endproc && CautPartenerContabilitate +******************************************* SFARSIT: CautPartenerContabilitate******************************************* + +* PROCEDURE caut_parteneri( tcCont ) +* Date : 04/11/2004, 14:01:21 +* author : lavinia.viziru +******************************************* INCEPUT:caut_parteneri ******************************************* +Procedure caut_parteneri( tcCont, tcTitlu, tlToateIreg, tlNou, tlInactiv) + Local lcCont, loCauta, lcFiltruOriginal + Local lcTitlu, lcFiltru, lcSchema, lcOrder, lcNumeProc, lcTitluColoane + Store "" To loCauta + lcCont = tcCont + llInactiv = m.tlInactiv && daca arat si partenerii inactivi (ex: la fisa de cont, cand un partener s-a unificat, partenerul vechi este inactiv) + + lcSelect = [select distinct p.denumire, p.nume, p.cod_fiscal, p.id_part, p.inactiv FROM Vcoresp_tip_part p ] + ; + [ join vcoresp_tip_cont c on p.id_tip_part=c.id_tip_part ] + lcFiltru = [1=2] + lcSchema = [] + lcOrder = [P.denumire] + lccoloane = [denumire, nume, cod_fiscal, id_part, inactiv] + If Empty(lcCont) + lcFiltruOriginal = IIF(m.llInactiv, [1=1],[p.inactiv = 0]) + Else + lcFiltruOriginal = IIF(m.llInactiv, [1=1],[p.inactiv = 0]) + [ and c.cont='] + Alltrim(lcCont) + ['] + Endif + If Empty(tcTitlu) + lcTitlu = "Alegeti partenerul" + Else + lcTitlu = tcTitlu + Endif + If tlNou + lcNumeProc = [nom_parteneri] + Else + lcNumeProc = [] + ENDIF + + lcTitluColoane = [Denumire, Nume,Cod fiscal, Id, Inactiv] + loCauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lccoloane, lcTitlu, lcTitluColoane, lcNumeProc, tlToateIreg, lcFiltruOriginal) && 11.07.2007 + + Return loCauta + +Endproc +******************************************* SFARSIT: caut_parteneri ******************************************* +******************************************* INCEPUT:caut_parteneri_xml ******************************************* +*** se cauta inclusiv partenerii vechi care au fost unificati in parteneri noi +Procedure caut_parteneri_xml( tcCont, tcTitlu, tlToateIreg, tlNou) + Local lcCont, loCauta, lcFiltruOriginal + Local lcTitlu, lcFiltru, lcSchema, lcOrder, lcNumeProc, lcTitluColoane + Store "" To loCauta + lcCont = tcCont + + TEXT TO lcSelect NOSHOW +select distinct + case when p2.id_part <> p1.id_part then p1.denumire || ' <<< 'else '' end || nvl(p2.denumire, p1.denumire) as denumire, + p2.nume, + p2.cod_fiscal, + CASE WHEN NVL(p2.inactiv,0) <> 0 THEN 'INACTIV' ELSE ' ' END AS inactiv, + p2.id_part + FROM CORESP_TIP_PART p + JOIN CORESP_TIP_CONT c + on p.id_tip_part = c.id_tip_part + left join nom_parteneri_modificari pm + on p.id_part = pm.id_part_vechi + left JOIN NOM_PARTENERI p1 + on pm.id_part_NOU = p1.ID_PART + left join nom_parteneri p2 + on p.id_part = p2.ID_PART + ENDTEXT + +*!* lcSelect = [select distinct p.denumire, p.nume, p.cod_fiscal, p.id_part FROM Vcoresp_tip_part p ]+; +*!* [ join vcoresp_tip_cont c on p.id_tip_part=c.id_tip_part ] + lcFiltru = [1=2] + lcSchema = [] + lcOrder = [3] + lccoloane = [denumire, nume, cod_fiscal, inactiv, id_part] +*!* lcFiltruOriginal = [p.inactiv = 0] + lcFiltruOriginal = [] + If !Empty(lcCont) +*!* lcFiltruOriginal = [p.inactiv = 0 and c.cont=']+ Alltrim(lcCont) + ['] +*!* modificare ROACONT v 2.5.40 + lcFiltruOriginal = lcFiltruOriginal + [c.cont='] + Alltrim(lcCont) + ['] + Endif + If Empty(tcTitlu) + lcTitlu = "Alegeti partenerul (mouse-click pe nume sau apasati SPACE)" + Else + lcTitlu = tcTitlu + " (mouse-click pe nume sau apasati SPACE)" + Endif + If tlNou + lcNumeProc = [nom_parteneri] + Else + lcNumeProc = [] + Endif + lcTitluColoane = [Denumire, Nume, Cod fiscal, Inactiv, Id] + lnTipReturn = 1 && XML +*!* lcPrimaColoana = "denumire" + lcPrimaColoana = "nvl(p1.denumire, p2.denumire)" + lcIdColumn = "id_part" + lcNume_Proc = [] + lnPornire = 1 + lcXMLParteneri = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lccoloane, lcTitlu, lcTitluColoane, lcNume_Proc, tlToateIreg, lcFiltruOriginal, lcPrimaColoana, lnPornire, lnTipReturn, lcIdColumn) + Return lcXMLParteneri +Endfunc && caut_parteneri_xml +******************************************* SFARSIT: caut_parteneri_xml ******************************************* +* PROCEDURE caut_partener() +* author : paula.mutu +* -- SIR CU ID-URI TIP PARTENER PENTRU -1,-2 (CLIENT/FURNIZOR) +******************************************* INCEPUT:caut_partener ******************************************* +Procedure caut_partener(tcIdTipPart, tcTitlu, tlToateIreg, tlNou) + + Private pnIdTip, pcSir_Id_tip_part + Store '' To pcSir_Id_tip_part + pnIdTip = tcIdTipPart + && pnIdTip && -1 - Clienti; -2 - Furnizori + lcSql = [begin pack_def.get_conturi_tip_part(?pnIdTip, ?@pcSir_Id_tip_part); end;] + lnSucces = goExecutor.oExecute(lcSql) + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare, 0 + 16, 'Eroare') + Return + Endif + + Local lcCont, loCauta, lcFiltruOriginal + Local lcTitlu, lcFiltru, lcSchema, lcOrder, lcNumeProc, lcTitluColoane + Store "" To loCauta + + lcSelect = [select denumire, cod_fiscal, id_part from vnom_parteneri ] + lcFiltru = [1=2] + lcSchema = [] + lcOrder = [denumire] + lccoloane = [denumire, cod_fiscal, id_part] + If Empty(pcSir_Id_tip_part) Or Isnull(pcSir_Id_tip_part) + lcFiltruOriginal = [inactiv = 0] + Else + lcFiltruOriginal = [inactiv = 0 and id_part in (select distinct id_part from coresp_tip_part where id_tip_part in (] + pcSir_Id_tip_part + [))] + Endif + + If Empty(tcTitlu) + lcTitlu = "Alegeti partenerul" + Else + lcTitlu = tcTitlu + Endif + If tlNou + lcNumeProc = [nom_parteneri] + Else + lcNumeProc = [] + Endif + lcTitluColoane = [Denumire,Cod fiscal,Id] + loCauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lccoloane, lcTitlu, lcTitluColoane, lcNumeProc, tlToateIreg, lcFiltruOriginal) && 11.07.2007 + + Return loCauta + +Endproc +******************************************* SFARSIT: caut_partener ******************************************* + +******************************************* INCEPUT: caut_partener_dupa_tip ******************************************* +Procedure caut_partener_dupa_tip + Lparameters tnIdTipPart, tcTitlu, tnIdPart, tcNumePart, tcSirIdTipPart + Local loCauta, llReturn + Store "" To loCauta + Store .F. To llReturn + pcselect = [select id_part,denumire from vcoresp_tip_part] + pcFiltruOrig = [id_tip_part=] + Alltrim(Str(tnIdTipPart)) + lcProceduraNou = [nom_parteneri;] + Alltrim(Str(tnIdTipPart)) + [,'Entitate',1,2] + If !Empty(tcSirIdTipPart) + pcFiltruOrig = pcFiltruOrig + [and id_part not in (select id_part from coresp_tip_part where id_tip_part in (] + tcSirIdTipPart + [))] + Endif + pcfiltru = [1=2] + pcschema = [] + pcorder = [2] + pccoloane = [denumire] + pcTitlu = Iif(!Empty(tcTitlu), tcTitlu, [Alegeti partenerul]) + pcTitluColoane = [Nume] + loCauta = cauta_alfa(pcselect, pcfiltru, pcschema, pcorder, pccoloane, pcTitlu, pcTitluColoane, lcProceduraNou, .F., pcFiltruOrig) && 11.07.2007 + If !Empty(loCauta.id_part) + tnIdPart = loCauta.id_part + tcNumePart = Alltrim(loCauta.denumire) + llReturn = .T. + Endif + Return llReturn +Endproc +******************************************* SFARSIT: caut_partener_dupa_tip ******************************************* +******************************************* INCEPUT: caut_categorie_entitate ******************************************* +Procedure caut_categorie_entitate + Local loCauta, llReturn + Store "" To loCauta + Store .F. To llReturn + pcselect = [select id_categorie_entitate,categorie_entitate from vnom_categorii_entitati] + pcfiltru = [1=2] + pcschema = [] + pcorder = [2] + pccoloane = [categorie_entitate] + pcTitlu = [Alegeti categoria] + pcTitluColoane = [Categorie entitate] + loCauta = cauta_alfa(pcselect, pcfiltru, pcschema, pcorder, pccoloane, pcTitlu, pcTitluColoane, "") && 11.07.2007 + Return loCauta +Endproc +******************************************* SFARSIT: caut_categorie_entitate ******************************************* +******************************************* INCEPUT: caut_marca_masina ******************************************* +Procedure caut_marca_masina + Local loCauta, llReturn + Store "" To loCauta + Store .F. To llReturn + pcselect = [select id_marca_masina,marca_masina from vnom_marci_masini] + pcfiltru = [1=2] + pcschema = [] + pcorder = [2] + pccoloane = [marca_masina] + pcTitlu = [Alegeti marca masinii] + pcTitluColoane = [Marca] + loCauta = cauta_alfa(pcselect, pcfiltru, pcschema, pcorder, pccoloane, pcTitlu, pcTitluColoane, "") && 11.07.2007 + Return loCauta +Endproc +******************************************* SFARSIT: caut_marca_masina ******************************************* + +* PROCEDURE caut_lucrare +* Date : 31.07.2006 +* author : marius.mutu +******************************************* INCEPUT:caut_lucrare ******************************************* +Procedure caut_lucrare(tlToateIreg, tlNou, tcFiltruOriginal) + *!* modificare 30.06.2011 ( ROAAUTO v 2.0.28 ) : am adaugat tcFiltruOriginal + + Local loCauta, lcFiltruOriginal + Local lcTitlu, lcFiltru, lcSchema, lcOrder, lcNumeProc, lcTitluColoane + Store Null To loCauta + + lcSelect = [select nrord, id_lucrare from vnom_lucrari] + lcFiltru = [1=2] + lcSchema = [] + lcOrder = [nrord] + lccoloane = [nrord,id_lucrare] + lcFiltruOriginal = [inactiv = 0] + IIF(!EMPTY(tcfiltruOriginal), [ and ] + tcFiltruOriginal, []) + + lcTitlu = "Alegeti lucrarea" + If tlNou + lcNumeProc = [nom_lucrari] + Else + lcNumeProc = [] + Endif + lcTitluColoane = [Lucrare,Id] + loCauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lccoloane, lcTitlu, lcTitluColoane, lcNumeProc, tlToateIreg, lcFiltruOriginal) && 11.07.2007 + + Return loCauta + +Endproc +******************************************* SFARSIT: caut_lucrare ******************************************* + +******************************************* INCEPUT:caut_articol ******************************************* +Function caut_articol + Lparameters tntipg, tlToateIreg, tlMultipleArticles, tlCRM, tlCautPlus, tlFaraAdaugare, tnIdGrupa, tlInactive + Store "" To loCauta + *!* tlCautPlus - daca se foloseste formularul caut_alfa_form_plus cu butonul but_start_criterii + *!* 24.07.2009 + *!* 29.01.2013 : am adaugat um2 in selectie + *!* 19.07.2013 : am adaugat in_stoc in selectie + *!* 11.09.2013 : am adaugat tlInactive + Local lcStringCriterii + lcStringCriterii = "" + If tlCautPlus + lcStringCriterii = "Cod material\codmat\T\none\" + crlf + ; + "Denumire articol\denumire\T\id_articol\nom_articol" + crlf + ; + "Subgrupa articol\none\I\id_subgrupa\nom_subgrupa_articol" + crlf + lcTitluColoane = [Cod Material, Denumire,Subgrupa, Cod bare,U.M.,Cont,Id] + lccoloane = [codmat,denumire,subgrupa,codbare,um,cont,id_articol] + Else + lccoloane = [denumire,codmat,codbare,um,cont,id_articol] + lcTitluColoane = [Denumire,Cod Material,Cod bare,U.M.,Cont,Id] + Endif + *!* 24.07.2009 ^ + + lcFiltru = [1=2] + lcSchema = [] + lcOrder = [denumire] + lcNumeProc = [] + + If tlMultipleArticles + lcTitlu = [Alegeti articolele (mouse-click pe denumire sau apasati SPACE)] + Else + lcTitlu = [Alegeti articolul] + Endif + + llMultipleArticles = tlMultipleArticles + If tlCRM + lcSelect = [select distinct a.denumire,a.codmat,a.codbare,a.um,a.um2,a.cont, ] + ; + [ a.id_articol, 0 as id_tipgest,a.in_stoc, a.inactiv from vnom_articole_crm a ] + lcFiltruOriginal = IIF(tlInactive, [2=2], [a.inactiv=0]) + *lcNumeProc = [nom_articole2] + *!* modificare 03.02.2010 + *!* lcNumeProc = [nom_articole] + If !tlFaraAdaugare + lcNumeProc = [nom_articole] + Endif + *!* modificare 03.02.2010 ^ + Else + If Type('tnTipg') = 'N' And tntipg > 0 + lcSelect = [select distinct a.denumire,a.codmat,a.codbare,a.um,a.um2,a.cont,a.acont, ] + ; + [a.id_articol, a.grupa, a.subgrupa, a.id_grupa, a.id_subgrupa, a.dnf, b.id_tipgest, a.in_stoc, a.inactiv from vnom_articole a inner join coresp_cont_tipgest b on a.cont = b.cont] + lcFiltruOriginal = IIF(tlInactive, [], [ a.inactiv=0 and]) + [ b.id_tipgest = ] + Alltrim(Str(tntipg)) + Else + lcSelect = [select distinct a.denumire,a.codmat,a.codbare,a.um,a.um2,a.cont,a.acont,] + ; + [a.id_articol, a.grupa, a.subgrupa, a.id_grupa, a.id_subgrupa, a.dnf, 0 as id_tipgest, a.in_stoc, a.inactiv from vnom_articole a ] + lcFiltruOriginal = IIF(tlInactive, [2=2], [a.inactiv=0]) + Endif + *!* modificare 03.02.2010 + *!* lcNumeProc = [nom_articole] + If !tlFaraAdaugare + lcNumeProc = [nom_articole] + Endif + *!* modificare 03.02.2010 ^ + Endif + *!* modificare v 10.01.2011 + IF !EMPTY(tnIdGrupa) + lcFiltruOriginal = lcFiltruOriginal + [ and a.id_subgrupa in (select id_subgrupa from vgest_art_sbgr where id_grupa = ] + ALLTRIM(STR(tnIdGrupa)) + [)] + ENDIF + *!* modificare v 10.01.2011 ^ + llToateIreg = tlToateIreg + lcPrimaColoana = [denumire] + lnPornire = 1 + lnTipReturn = Iif(tlMultipleArticles, 1, 0) + lcIdColumn = "id_articol" + + *!* 24.07.2009 + loHash = GetHash() + With loHash + .SetValue("cSelect", lcSelect) + .SetValue("cFiltru", lcFiltru) + .SetValue("cSchema", lcSchema) + .SetValue("cOrder", lcOrder) + .SetValue("cColoana", lccoloane) + .SetValue("cTitlu", lcTitlu) + .SetValue("cTitluColoana", lcTitluColoane) + .SetValue("cNumeProc", lcNumeProc) + .SetValue("lToateIreg", llToateIreg) + .SetValue("cFiltruOriginal", lcFiltruOriginal) + .SetValue("cPrimaColoana", lcPrimaColoana) + .SetValue("nPornire", lnPornire) + .SetValue("nTipReturn", lnTipReturn) + .SetValue("cIdColumn", lcIdColumn) + .SetValue("cStringCriterii", lcStringCriterii) + If tlInactive + .SetValue("cGridDynamicBackColor", [IIF(inactiv = 1, RGB(225,225,225), RGB(255,255,255))]) + Endif + Endwith + *!* loCauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lccoloane, lcTitlu, lcTitluColoane, lcNumeProc, llToateIreg, lcFiltruOriginal, lcPrimaColoana, lnPornire, lnTipReturn , lcIdColumn, lcStringCriterii) && 11.07.2007 + loCauta = cauta_alfa_hash(loHash) + *!* 24.07.2009 ^ + + Return loCauta && caut_articol + + ******************************************* SFARSIT: caut_articol ******************************************* + +Function cauta_articole + Lparameters tcFiltruOriginal, tnPornire, tlLoud, tcListaId, tcListaDenumire + *** tnPornire: incepe cu...,1,este...,2,nu este...,3,contine...,4,nu contine...,5,toate,6 + *** tlLoud = .T. daca apare messagebox "Nu ati selectat nici o inregistare" pentru cautarea multipla. Default = .F. + *** tcListaId = parametru OUT - lista id-uri articole + *** tcListaDenumire = parametru OUT - lista denumiri articole + + Local lcFiltru, lcFiltruOriginal, lcIdColumn, lcNumeProc, lcOrder, lcPrimaColoana, lcSchema + Local lcSelect, lcTitlu, lcTitluColoane, lccoloane, llMultipleArticles, llToateIreg, lnPornire + Local lnTipReturn, loCauta, loLista + + Store "" To loCauta + + lcFiltru = [1=2] + lcSchema = [] + lcOrder = [denumire] + lccoloane = [denumire,codmat,codbare,um,grupa,subgrupa,cont,acont,dnf,id_articol] + lcTitlu = [Alegeti articolele (mouse-click pe denumire sau apasati SPACE)] + lcTitluColoane = [Denumire,Cod Material,Cod bare,UM,Grupa,Subgrupa,Cont,Analitic,DNF,Id] + llMultipleArticles = .T. + lcSelect = [select a.denumire,a.codmat,a.codbare,a.um, a.grupa, a.subgrupa, a.id_grupa, a.id_subgrupa,a.dnf,a.cont, a.acont, a.inactiv, a.id_articol from vnom_articole a ] + lcFiltruOriginal = Iif(!Empty(tcFiltruOriginal), Alltrim(tcFiltruOriginal), "") + lcNumeProc = [nom_articole] + llToateIreg = .F. + lcPrimaColoana = [denumire] + lnPornire = Iif(Empty(m.tnPornire), CA_PORNIRE_INCEPE, m.tnPornire) + lnTipReturn = Iif(llMultipleArticles, 1, 0) + lcIdColumn = "id_articol" + loCauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lccoloane, lcTitlu, lcTitluColoane, lcNumeProc, llToateIreg, lcFiltruOriginal, lcPrimaColoana, lnPornire, lnTipReturn, lcIdColumn) && 11.07.2007 + + *!* 24.08.2011 + IF m.llMultipleArticles + loLista = XML2ListaIDDescriere(loCauta, "id_articol", "denumire", tlLoud) + tcListaId = loLista.ListaId + tcListaDenumire = loLista.ListaDenumire + ENDIF + *!* 24.08.2011 + + Return loCauta && cauta_articole + +Endfunc && cauta_articole +******************************************* SFARSIT: cauta_articole ******************************************* +Function cauta_nom_articole + Lparameters tcFiltruOriginal, tnPornire, tlLoud, tcListaId, tcListaDenumire + *** tnPornire: incepe cu...,1,este...,2,nu este...,3,contine...,4,nu contine...,5,toate,6 + *** tlLoud = .T. daca apare messagebox "Nu ati selectat nici o inregistare" pentru cautarea multipla. Default = .F. + *** tcListaId = parametru OUT - lista id-uri articole + *** tcListaDenumire = parametru OUT - lista denumiri articole + Local lcFiltru, lcFiltruOriginal, lcIdColumn, lcNumeProc, lcOrder, lcPrimaColoana, lcSchema, lnPornire + Local lcSelect, lcTitlu, lcTitluColoane, lccoloane, llMultipleArticles, llToateIreg, lnTipReturn + Local loCauta, loLista + Store "" To loCauta + + lcFiltru = [1=2] + lcSchema = [] + lcOrder = [denumire] + lccoloane = [denumire,codmat,codbare,um,grupa,subgrupa,cont,acont,dnf,id_articol] + lcTitlu = [Alegeti articolele (mouse-click pe denumire sau apasati SPACE)] + lcTitluColoane = [Denumire,Cod Material,Cod bare,UM,Grupa,Subgrupa,Cont,Analitic,DNF,Id] + llMultipleArticles = .T. + lcSelect = [select a.denumire,a.codmat,a.codbare,a.um, a.grupa, a.subgrupa, a.id_grupa, a.id_subgrupa,a.dnf,a.cont, a.acont, a.inactiv, a.id_articol from ] + gcS + [.vnom_articole_toate a ] + lcFiltruOriginal = Iif(!Empty(tcFiltruOriginal), Alltrim(tcFiltruOriginal) + [ and ], "") + [a.inactiv = 0] + lcNumeProc = [nom_articole] + llToateIreg = .F. + lcPrimaColoana = [denumire] + lnPornire = Iif(Empty(m.tnPornire), CA_PORNIRE_INCEPE, m.tnPornire) + lnTipReturn = Iif(llMultipleArticles, 1, 0) + lcIdColumn = "id_articol" + loCauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lccoloane, lcTitlu, lcTitluColoane, lcNumeProc, llToateIreg, lcFiltruOriginal, lcPrimaColoana, lnPornire, lnTipReturn, lcIdColumn) && 11.07.2007 + + *!* 24.08.2011 + IF m.llMultipleArticles + loLista = XML2ListaIDDescriere(loCauta, "id_articol", "denumire", tlLoud) + tcListaId = loLista.ListaId + tcListaDenumire = loLista.ListaDenumire + ENDIF + *!* 24.08.2011 + + Return loCauta && cauta_nom_articole + +Endfunc && cauta_nom_articole +******************************************* SFARSIT: cauta_nom_articole ******************************************* + +*** transforma un xml din cautare alfa multipla intr-o lista cu id-uri si o lista cu denumiri +*** ex: lista xml articole -> lista id-uri articole (100|101|102|) si lista denumiri articole (banana,morcov,telina) +*** intoarce un obiect cu 2 proprietati: ocautare.listaid, ocautare.listadenumire +FUNCTION XML2ListaIDDescriere + LPARAMETERS tcXML, tcCampId, tcCampDenumire, tlLoud + *** tcXML = xml cursor cautare alfa + *** tcCampId = nume camp ID din cursor. Ex: id_articol + *** tcCampDenumire = nume camp Denumire din cursor. Ex: denumire + *** tlLoud = .T. daca apare messagebox "Nu ati selectat nici o inregistare", Default = .F. + + LOCAL lcXML, llLoud, loCautare, lcSelect + + lcSelect = SELECT() + lcXML = IIF(TYPE('tcXML') <> 'C' or PCOUNT() < 1, "", m.tcXML) + lcCampId = IIF(TYPE('tcCampId') <> 'C' or PCOUNT() < 2, "", m.tcCampId) + lcCampDenumire = IIF(TYPE('tcCampDenumire') <> 'C' or PCOUNT() < 3, "", m.tcCampDenumire) + llLoud = IIF(TYPE('tlLoud') <> 'L' or PCOUNT() < 4, .F., m.tlLoud) + + loCautare = CREATEOBJECT("empty") + ADDPROPERTY(loCautare, "ListaId", "") + ADDPROPERTY(loCautare, "ListaDenumire", "") + + If Empty(m.lcXML) OR EMPTY(m.lcCampId) OR EMPTY(m.lcCampDenumire) + SELECT (lcSelect) + RETURN loCautare + ENDIF + + Xmltocursor(lcXML, "crsXMLTemp") + If Reccount('crsXMLTemp') = 0 AND m.llLoud + AMessageBox('Nu ati selectat nici o inregistrare!', 0 + 48, _screen.caption) + USE IN (SELECT("crsXMLTemp")) + SELECT (lcSelect) + RETURN loCautare + ENDIF + + Select crsXMLTemp + Locate For &lcCampId = 0 + If Found() And Reccount('crsXMLTemp') = 1 + loCautare.ListaId = [NULL] + loCautare.ListaDenumire = [TOATE INREGISTRARILE] + Else + loCautare.ListaId = ['] + cursor2lista("crsXMLTemp", lcCampId, "|") + loCautare.ListaDenumire = cursor2lista("crsXMLTemp", lcCampDenumire, ",") + Endif + Use In (SELECT('crsXMLTemp')) + If(Right(loCautare.ListaId, 1) # "|" And loCautare.ListaId # [NULL]) + loCautare.ListaId = loCautare.ListaId + "|" + Endif + If loCautare.ListaId <> [NULL] + loCautare.ListaId = loCautare.ListaId + "'" + Endif + + SELECT (lcSelect) + RETURN loCautare +ENDFUNC && XML2ListaIDDescriere +******************************************* INCEPUT: caut_articol_gs ******************************************* +Function caut_articol_gs + Lparameters tntipg, tlToateIreg, tlMultipleArticles, tcFiltruCont + Store "" To loCauta + + lcFiltru = [1=2] + lcSchema = [] + lcOrder = [denumire] + lccoloane = [denumire,codmat,codbare,id_articol] + lcTitlu = [Alegeti articolul] + lcTitluColoane = [Denumire,Cod Material,Cod bare,Id] + llMultipleArticles = tlMultipleArticles + If Type('tnTipg') = 'N' And tntipg > 0 + lcSelect = [select distinct a.denumire,a.codmat,a.codbare,a.um,a.cont,a.acont,] + ; + [a.id_articol, a.grupa, a.subgrupa, a.id_grupa, a.id_subgrupa, a.dnf, b.id_tipgest from vnom_articole a ] + ; + [inner join coresp_cont_tipgest b on a.cont = b.cont where 2=2 ] + lcFiltruOriginal = [ b.id_tipgest = ] + Alltrim(Str(tntipg)) + Else + lcSelect = [select distinct a.denumire,a.codmat,a.codbare,a.um,a.cont,a.acont,] + ; + [a.id_articol, a.grupa, a.subgrupa, a.id_grupa, a.id_subgrupa, a.dnf, 0 as id_tipgest ] + ; + [from vnom_articole a where 2=2 ] + lcFiltruOriginal = [ 2=2 ] + Endif + *!* modificare 10.02.2010 ROAGRESTAURANT v 0.0.17 + IF !EMPTY(tcFiltruCont) + *!* tcFiltruCont poate fi : 34% / 345 / 345,371 + Do Case + CASE AT([%], tcFiltruCont) > 0 + lcFiltruOriginal = lcFiltruOriginal + [ and a.cont like '] + Alltrim(tcFiltruCont) + ['] + CASE AT([,], tcFiltruCont) > 0 + lcFiltruOriginal = lcFiltruOriginal + [ and a.cont in ('] + Strtran(Alltrim(tcFiltruCont), [,], [',']) + [')] + Otherwise + lcFiltruOriginal = lcFiltruOriginal + [ and a.cont = '] + Alltrim(tcFiltruCont) + ['] + Endcase + ENDIF + *!* modificare 10.02.2010 ROAGRESTAURANT v 0.0.17 ^ + lcNumeProc = [nom_articole] + llToateIreg = tlToateIreg + lcPrimaColoana = [denumire] + lnPornire = 1 + lnTipReturn = Iif(tlMultipleArticles, 1, 0) + lcIdColumn = "id_articol" + loCauta = cauta_alfa_gs(lcSelect, lcFiltru, lcSchema, lcOrder, lccoloane, lcTitlu, lcTitluColoane, lcNumeProc, llToateIreg, lcFiltruOriginal, lcPrimaColoana, lnPornire, lnTipReturn, lcIdColumn) && 11.07.2007 + + Return loCauta && caut_articol_gs + +Endfunc && caut_articol_gs +******************************************* SFARSIT: caut_articol_gs ******************************************* + +******************************************* INCEPUT: cauta_articole_alege ******************************************* +*!* cautare dupa codmat, denumire, subgrupa si bifarea articolelor dorite +Function cauta_articole_alege + Private poArticole + poArticole = Null + gencursor('deca_baza1', lcCursor, tcselect, tcfiltru, tcschema, tcorder, .F., lcGroup, llModParam, lcFiltOriginal) + deca_baza1.ca_baza1.afisare() +Endfunc && cauta_articole_alege +******************************************* SFARSIT: cauta_articole_alege ******************************************* + +******************************************* INCEPUT: caut_cont ******************************************* +Function caut_cont + Lparameters tntipg, tcListaConturi, tlToateIreg, tlDoarConturi + + Store "" To loCauta + Local llToateIreg + llToateIreg = tlToateIreg + + pcfiltru = [1=2] + pcschema = [] + pcorder = [cont,acont] + pcTitlu = [Alegeti contul] + If tlDoarConturi + pccoloane = [cont,explicatie,tip_sold] + pcTitluColoane = [Cont,Explicatie,Tip sold] + Else + pccoloane = [cont,acont,explicatie,tip_sold] + pcTitluColoane = [Cont,Analitic,Explicatie,Tip sold] + Endif + + If Empty(tntipg) And Empty(tcListaConturi) + If llToateIreg + pcselect = [select a.explicatie,rpad(a.cont,22) as cont,] + ; + IIF(tlDoarConturi, [], [a.acont,]) + [a.id_plcont,a.tip_sold from vplcont_used a ] + Else + pcselect = [select a.explicatie,a.cont,] + ; + IIF(tlDoarConturi, [], [a.acont,]) + [a.id_plcont,a.tip_sold from vplcont_used a ] + Endif + pcFiltruOriginal = [ a.an=] + Alltrim(Str(gnan)) + IIF(tlDoarConturi, [ and a.acont is null], []) + Endif + + If !Empty(tcListaConturi) And Empty(tntipg) + pcselect = [select a.explicatie,a.cont,] + ; + IIF(tlDoarConturi, [], [a.acont,]) + [a.id_plcont,a.tip_sold from vplcont_used a ] + pcFiltruOriginal = [ a.an=] + Alltrim(Str(gnan)) + [ and a.cont in (] + Alltrim(tcListaConturi) + [)] + ; + IIF(tlDoarConturi, [ and a.acont is null], []) + Endif + + If !Empty(tntipg) And Empty(tcListaConturi) + pcselect = [select a.explicatie,a.cont,] + ; + IIF(tlDoarConturi, [], [a.acont,]) + [a.id_plcont,a.tip_sold,b.id_tipgest from vplcont_used a inner join coresp_cont_tipgest b on a.cont = b.cont ] + pcFiltruOriginal = [ b.id_tipgest = ] + Alltrim(Str(tntipg)) + [ and a.an=] + Alltrim(Str(gnan)) + ; + IIF(tlDoarConturi, [ and a.acont is null], []) + Endif + + If !Empty(tntipg) And !Empty(tcListaConturi) + pcselect = [select a.explicatie,a.cont,] + ; + IIF(tlDoarConturi, [], [a.acont,]) + [a.id_plcont,a.tip_sold,b.id_tipgest from vplcont_used a inner join coresp_cont_tipgest b on a.cont = b.cont ] + pcFiltruOriginal = [ b.id_tipgest = ] + Alltrim(Str(tntipg)) + [ and a.an=] + Alltrim(Str(gnan)) + ; + [ and a.cont in (] + Alltrim(tcListaConturi) + [)] + ; + IIF(tlDoarConturi, [ and a.acont is null], []) + Endif + + lcNumeProc = [] + lcPrimaColoana = [a.cont] + loCauta = cauta_alfa(pcselect, pcfiltru, pcschema, pcorder, pccoloane, pcTitlu, pcTitluColoane, lcNumeProc, llToateIreg, pcFiltruOriginal, lcPrimaColoana) && 11.07.2007 + + Return loCauta + ******************************************* SFARSIT: caut_cont ******************************************* + + + ******************************************* INCEPUT:caut_acont ******************************************* + +Function caut_acont + Lparameters tncont + + lcCont = tncont + Store "" To loCauta + pcselect = [select a.acont,a.explicatie,a.id_plcont,a.an FROM vplcont_used_analitic a ] + pcfiltru = [1=2] + pcschema = [] + pcorder = [acont] + pccoloane = [acont,explicatie] + If Pcount() < 1 + pcTitlu = [Alegeti contul analitic] + Else + pcTitlu = [Alegeti contul analitic pentru contul ] + Alltrim(lcCont) + Endif + pcTitluColoane = [Acont,Explicatie] + If Pcount() < 1 + pcFiltruOriginal = [1=2] + Else + pcFiltruOriginal = [ a.cont=] + Alltrim(lcCont) + [ and a.an=] + Alltrim(Str(gnan)) + Endif + lcNumeProc = [] + llToateIreg = .F. + lcPrimaColoana = [a.acont] + loCauta = cauta_alfa(pcselect, pcfiltru, pcschema, pcorder, pccoloane, pcTitlu, pcTitluColoane, lcNumeProc, llToateIreg, pcFiltruOriginal, lcPrimaColoana) && 11.07.2007 + + Return loCauta + + ******************************************* SFARSIT: caut_acont ******************************************* + + ******************************************* INCEPUT:caut_gestiune ******************************************* + +Function caut_gestiune + Lparameters tntipg, tnid_util, tlToateIreg, tcTitlu + + Store "" To loCauta + pcselect = [select distinct nume_gestiune,cgest,id_gestiune,nr_pag,cont from vgest_gestiuni_util ] + pcfiltru = [1=2] + pcschema = [] + pcorder = [nume_gestiune] + pccoloane = [nume_gestiune,cgest] + pcTitlu = Iif(Empty(tcTitlu), [Alegeti gestiunea], Alltrim(Upper(tcTitlu))) + pcTitluColoane = [Gestiune,Cgest] + lncount = Pcount() + + Do Case + Case Type('tnId_Util') = 'N' + If Empty(tntipg) + pcFiltruOriginal = [inactiv = 0 and id_util = ] + Alltrim(Str(tnid_util)) + Else + pcFiltruOriginal = [inactiv = 0 and nr_pag = ] + Alltrim(Str(tntipg)) + [ and id_util = ] + Alltrim(Str(tnid_util)) + Endif + Case Type('tnTipg') = 'N' + pcFiltruOriginal = [inactiv = 0] + Otherwise + pcselect = [select nume_gestiune,cgest,id_gestiune,nr_pag,cont from vnom_gestiuni ] + pcFiltruOriginal = [inactiv = 0] + Endcase + + lcNumeProc = [] + llToateIreg = tlToateIreg + loCauta = cauta_alfa(pcselect, pcfiltru, pcschema, pcorder, pccoloane, pcTitlu, pcTitluColoane, lcNumeProc, llToateIreg, pcFiltruOriginal) && 11.07.2007 + + Return loCauta + + ******************************************* SFARSIT: caut_gestiune ******************************************* + Function caut_gestiune_sectie + Lparameters tntipg, tnIdSectie, tnid_util, tcTitlu + + Store "" To loCauta + pcselect = [select distinct nume_gestiune,cgest,id_gestiune,nr_pag,cont from vgest_gestiuni_util ] + pcfiltru = [1=2] + pcschema = [] + pcorder = [nume_gestiune] + pccoloane = [nume_gestiune,cgest] + pcTitlu = Iif(Empty(tcTitlu), [Alegeti gestiunea], Alltrim(Upper(tcTitlu))) + pcTitluColoane = [Gestiune,Cgest] + + pcFiltruOriginal = [inactiv = 0] + if Type('tnTipg') = 'N' + pcFiltruOriginal = pcFiltruOriginal + [ and nr_pag = ] + Alltrim(Str(tntipg)) + endif + if Type('tnIdSectie') = 'N' + pcFiltruOriginal = pcFiltruOriginal + [ and id_sectie = ] + Alltrim(Str(tnIdSectie)) + Endif + if Type('tnId_Util') = 'N' + pcFiltruOriginal = pcFiltruOriginal + [ and id_util = ] + Alltrim(Str(tnid_util)) + Endif + lcNumeProc = [] + llToateIreg = .F. + loCauta = cauta_alfa(pcselect, pcfiltru, pcschema, pcorder, pccoloane, pcTitlu, pcTitluColoane, lcNumeProc, llToateIreg, pcFiltruOriginal) + + Return loCauta + + ******************************************* SFARSIT: caut_gestiune ******************************************* + ******************************************* INCEPUT: caut_gestiune_xml ******************************************* +Function caut_gestiune_xml + Lparameters tnTip, tlToateIreg, tnPornire, tlLoud, tcListaId, tcListaDenumire + && tnTip : 1 = toate gestiunile; 2 = gestiunile pe care are drept utilizatorul + *** tnPornire: incepe cu...,1,este...,2,nu este...,3,contine...,4,nu contine...,5,toate,6 + *** tlLoud = .T. daca apare messagebox "Nu ati selectat nici o inregistare" pentru cautarea multipla. Default = .F. + *** tcListaId = parametru OUT - lista id-uri articole + *** tcListaDenumire = parametru OUT - lista denumiri articole + + *!* 04.09.2009 + Local lnPornire + Local lcFiltru, lcIdColumn, lcNume_Proc, lcPrimaColoana, lcTitlu, lcXMLGestiuni, lnTipReturn + Local loLista + Local lnTip, llAllInList + Local lcSelect, lcSchema, lcOrder, llAfisare, lcGroup, llModParam, lcFiltruOriginal, lcCOloana, lcTitluColoana, lnPornire + + lnPornire = Iif(Empty(tnPornire), CA_PORNIRE_TOATE, tnPornire) + + If Empty(tnTip) Or Type('tnTip') <> 'N' + lnTip = 1 + Else + lnTip = tnTip + Endif + + If lnTip = 1 + lcSelect = [select distinct a.nume_gestiune,a.cgest,a.id_gestiune,a.nr_pag,a.cont from vgest_gestiuni_util a] + *!* 22.02.2010 +*!* lcFiltruOriginal = [] + *!* modificare ROAGEST v 2.2.4 + *!* lcFiltruOriginal = SUBSTR(gcCondSucursala, 6) + lcFiltruOriginal = SUBSTR(STRTRAN(gcCondSucursala, [id_sucursala], [a.id_sucursala]), 6) + *!* modificare ROAGEST v 2.2.4 ^ + *!* 22.02.2010 ^ + lcFiltruOriginal = lcFiltruOriginal + [ and a.inactiv = 0 ] && modificare ROAGEST v 2.2.4 + Else + lcSelect = [select distinct c.nume_gestiune,c.cgest,b.id_gestiune,c.nr_pag,c.cont ] + ; + [from gest_coresp_util_grupe a ] + ; + [left join gest_coresp_grupe_gestiuni b on a.id_grupe=b.id_grupe ] + ; + [left join nom_gestiuni c on b.id_gestiune=c.id_gestiune ] + + *!* 22.02.2010 + *!* lcFiltruOriginal = [a.id_util = ] + Alltrim(Str(gnIdUtil)) + *!* modificare ROAGEST v 2.2.4 + *!* lcFiltruOriginal = [a.id_util = ] + Alltrim(Str(gnIdUtil)) + gcCondSucursala + lcFiltruOriginal = [a.id_util = ] + Alltrim(Str(gnIdUtil)) + STRTRAN(gcCondSucursala, [id_sucursala], [c.id_sucursala]) + *!* modificare ROAGEST v 2.2.4 ^ + *!* 22.02.2010 ^ + lcFiltruOriginal = lcFiltruOriginal + [ and c.inactiv = 0 ] && modificare ROAGEST v 2.2.4 + Endif + + lcFiltru = [] + lcSchema = [nume_gestiune C(50),cgest C(20),id_gestiune N(5),nr_pag N(2),cont C(4)] + lcOrder = [nume_gestiune] + llAfisare = .F. + lcGroup = [] + llModParam = .T. + + + lcCOloana = "nume_gestiune,cgest,nr_pag,cont" + lcTitluColoana = "Nume, Cgest, Nr.pag, Cont" + llAllInList = tlToateIreg + lcPrimaColoana = "nume_gestiune" + lcNume_Proc = "" + lcTitlu = "Alegeti gestiunea (mouse-click pe nume sau apasati SPACE)" + lnTipReturn = 1 && XML + lcIdColumn = "id_gestiune" + lcXMLGestiuni = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lcCOloana, lcTitlu, lcTitluColoana, lcNume_Proc, llAllInList, lcFiltruOriginal, lcPrimaColoana, lnPornire, lnTipReturn, lcIdColumn) && 11.07.2007 + + *!* XMLTOCURSOR(lcXMLFacturi, "crsFacturi",0) + *!* 24.08.2011 + loLista = XML2ListaIDDescriere(lcXMLGestiuni, "id_gestiune", "nume_gestiune", m.tlLoud) + tcListaId = loLista.ListaId + tcListaDenumire = loLista.ListaDenumire + *!* 24.08.2011 + + Return lcXMLGestiuni +Endfunc && caut_gestiune_xml +******************************************* SFARSIT: caut_gestiune_xml ******************************************* +******************************************* INCEPUT:caut_responsabil ******************************************* +Function caut_responsabil + Lparameters tlToateIreg + + Local lcCont, loCauta + + Store "" To loCauta + + pcselect = [select id_responsabil, nume, marca, cnp, formatie, meserie FROM Vnom_responsabili ] + pcfiltru = [1=2] + pcschema = [] + pcorder = [NUME, marca] + pccoloane = [nume,marca,cnp,formatie,meserie,id_responsabil] + pcTitlu = [Alegeti responsabilul] + pcTitluColoane = [Nume,Marca,CNP,formatie,meserie,Id] + pcFiltruOriginal = [inactiv = 0] + lcNumeProc = [nom_parteneri;] + Alltrim(Str(gnIdTipResponsabili)) + [,'RESPONSABIL',1,2] + llToateIreg = tlToateIreg + + loCauta = cauta_alfa(pcselect, pcfiltru, pcschema, pcorder, pccoloane, pcTitlu, pcTitluColoane, lcNumeProc, llToateIreg, pcFiltruOriginal) && 11.07.2007 + + Return loCauta + ******************************************* SFARSIT: caut_responsabil ******************************************* + ******************************************* INCEPUT:caut_responsabil_stoc ******************************************* +Function caut_responsabil_stoc + Lparameters tlToateIreg + + Local lcCont, loCauta + + Store "" To loCauta + + pcselect = [select distinct s.id_responsabil, p.denumire, sp.marca ] + ; + [ from stoc_obinv s left join nom_parteneri p on s.id_responsabil = p.id_part ] + ; + [ left join sal_personal sp on s.id_responsabil = sp.id_part ] + pcfiltru = [1=2] + pcschema = [id_responsabil n(10), denumire c(50), marca n(10)] + pcorder = [denumire, marca] + pccoloane = [denumire, Marca, id_responsabil] + pcTitlu = [Alegeti responsabilul] + pcTitluColoane = [Nume,Marca,Id] + pcFiltruOriginal = [s.an = ?gnAn and s.luna = ?gnLuna] + Strtran(gcCondSucursala, [id_sucursala], [s.id_sucursala]) + lcNumeProc = [nom_parteneri;] + Alltrim(Str(gnIdTipResponsabili)) + [,'RESPONSABIL',1,2] + llToateIreg = tlToateIreg + + loCauta = cauta_alfa(pcselect, pcfiltru, pcschema, pcorder, pccoloane, pcTitlu, pcTitluColoane, lcNumeProc, llToateIreg, pcFiltruOriginal) && 11.07.2007 + + Return loCauta + ******************************************* SFARSIT: caut_responsabil_stoc ******************************************* + ******************************************* INCEPUT: caut_delegati ******************************************* +Procedure caut_delegati + Lparameters tnIdPart + Local loCauta, llReturn, lcSelect, lcProcedura + Store "" To loCauta + Store .F. To llReturn + If !Empty(tnIdPart) + lcSelect = [select id_responsabil,nume,bi,cnp,eliberatde from vnom_delegati_part] + lcFiltruOrig = [id_part=] + Alltrim(Str(tnIdPart)) + lcProcedura = [nom_parteneri;] + Alltrim(Str(gnIdTipDelegati)) + [,'DELEGAT',1,2,] + Alltrim(Str(tnIdPart)) + Else + lcSelect = [select id_responsabil,nume,bi,cnp,eliberatde from vnom_delegati] + lcProcedura = [nom_parteneri;] + Alltrim(Str(gnIdTipDelegati)) + [,'DELEGAT',1,2] + lcFiltruOrig = [] + Endif + lcFiltru = [1=2] + lcSchema = [] + lcOrder = [2] + lccoloane = [nume,bi,cnp] + lcTitlu = [Alegeti delegatul] + lcTitluColoane = [Nume,BI/CI,CNP] + loCauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lccoloane, lcTitlu, lcTitluColoane, lcProcedura, .F., lcFiltruOrig) && 11.07.2007 + Return loCauta +Endproc +******************************************* SFARSIT: caut_delegati ******************************************* +***************************************** INCEPUT: caut_delegati_hash ***************************************** +Procedure caut_delegati_hash + Lparameters tnIdPart, tlAdaugaCoresp + Local loCauta, llReturn, lcSelect, lcProcedura + Store "" To loCauta + Store .F. To llReturn + If Empty(tnIdPart) + loCauta = caut_delegati() + Else + lcSelect = [select MIN(case when c.id_part = ] + Alltrim(Str(tnIdPart)) + [ then 0 ] + ; + [when b.id_tip_part = ] + Alltrim(Str(gnIdTipDelegati)) + [ then 2 ] + ; + [else 1 end) as tip,] + ; + [a.id_part as id_responsabil,a.denumire as nume,a.reg_comert as bi,a.cod_fiscal as cnp,] + ; + [a.localitate_inreg as eliberatde,a.telefon as telefon1,a.telefon2 ] + ; + [from vnom_parteneri a ] + ; + [join coresp_tip_part b on a.ID_PART = b.id_part ] + ; + [left join coresp_delegati_part c on b.id_part = c.id_delegat and c.sters = 0 ] + lcFiltruOrig = [a.inactiv = 0] + lcProcedura = [nom_parteneri;] + Alltrim(Str(gnIdTipDelegati)) + [,'DELEGAT',1,2,] + Alltrim(Str(tnIdPart)) + lcFiltru = [1=2] + lcSchema = [] + lcGroup = [a.id_part, a.denumire, a.reg_comert, a.cod_fiscal, a.localitate_inreg, a.telefon, a.telefon2] + lcOrder = [min(case when c.id_part = ] + Alltrim(Str(tnIdPart)) + [ then 0 else 1 end),a.denumire] + lccoloane = [nume,bi,cnp] + lcTitlu = [Alegeti delegatul] + lcTitluColoane = [Nume,BI/CI,CNP] + loHash = GetHash() + With loHash + .SetValue("cSelect", lcSelect) + .SetValue("cFiltru", lcFiltru) + .SetValue("cGroup", lcGroup) + .SetValue("cOrder", lcOrder) + .SetValue("cColoana", lccoloane) + .SetValue("cTitlu", lcTitlu) + .SetValue("cTitluColoana", lcTitluColoane) + .SetValue("cFiltruOriginal", lcFiltruOrig) + .SetValue("cPrimaColoana", "nume") + .SetValue("cNumeProc", lcProcedura) + .SetValue("cGridDynamicBackColor", [IIF(TIP = 2, Rgb(180,180,180), Iif(TIP=1, RGB(225,225,225), RGB(255,255,255) ))]) + .SetValue("cGridToolTip", "Parteneri colorati in gri deschis nu sunt delegati ai acestui partener." + ; + Chr(13) + Chr(10) + "Partenerii colorati in gri inchis nu sunt delegati.") + Endwith + + loCauta = cauta_alfa_hash(loHash) + + If tlAdaugaCoresp And !Isnull(loCauta) And Type('loCauta.id_responsabil') = 'N' And loCauta.id_responsabil <> 0 And loCauta.tip <> 0 + If loCauta.tip = 1 + Do ADAUGA_CORESP_DELEGAT With loCauta.id_responsabil, tnIdPart In oproceduri_parteneri.prg + Else + Do Adauga_Delegat_Partener With loCauta.id_responsabil, tnIdPart In oproceduri_parteneri.prg + Endif + Endif + Endif + Return loCauta +Endproc && caut_delegati_hash +***************************************** SFARSIT: caut_delegati_hash ***************************************** +******************************************* INCEPUT: caut_grupa_articole ******************************************* +Procedure caut_grupa_articole + Lparameters tlToateIreg + Local loCauta, llReturn + Store "" To loCauta + Store .F. To llReturn + pcselect = [select id_grupa,grupa from vgest_art_gr] + pcfiltru = [1=2] + pcschema = [] + pcorder = [2] + pccoloane = [grupa] + pcTitlu = [Alegeti grupa de articole] + pcTitluColoane = [Grupa] + loCauta = cauta_alfa(pcselect, pcfiltru, pcschema, pcorder, pccoloane, pcTitlu, pcTitluColoane, "", tlToateIreg) && 11.07.2007 + Return loCauta +Endproc +****************************************** SFARSIT: caut_grupa_articole ******************************************* +******************************************* INCEPUT: caut_grupa_articole_xml ******************************************* +Procedure caut_grupa_articole_xml + Lparameters tlToateIreg + Local loCauta, llReturn + Store "" To loCauta + Store .F. To llReturn + pcselect = [select id_grupa,grupa from vgest_art_gr] + pcfiltru = [1=2] + pcschema = [] + pcorder = [2] + pccoloane = [grupa] + pcTitlu = [Alegeti grupele (mouse-click pe nume sau apasati SPACE)] + pcTitluColoane = [Grupa] + + lcFiltruOriginal = [2=2] + lcPrimaColoana = "grupa" + lnPornire = 5 + lnTipReturn = 1 && XML + lcIdColumn = "id_grupa" + lcXMLGrupe = cauta_alfa(pcselect, pcfiltru, pcschema, pcorder, pccoloane, pcTitlu, pcTitluColoane, "", tlToateIreg, lcFiltruOriginal, lcPrimaColoana, lnPornire, lnTipReturn, lcIdColumn) + + Return lcXMLGrupe +Endproc +****************************************** SFARSIT: caut_grupa_articole_xml ******************************************* +**************************************** INCEPUT: caut_subgrupa_articole ****************************************** +Procedure caut_subgrupa_articole + LPARAMETERS tcFiltruOriginal, tlToateIreg, tlMultipleArticles, tnPornire, tlLoud, tcListaId, tcListaDenumire + *** tnPornire: incepe cu...,1,este...,2,nu este...,3,contine...,4,nu contine...,5,toate,6 + *** tlLoud = .T. daca apare messagebox "Nu ati selectat nici o inregistare" pentru cautarea multipla. Default = .F. + *** tcListaId = parametru OUT - lista id-uri articole + *** tcListaDenumire = parametru OUT - lista denumiri articole + + Local loCauta, llReturn, loLista + Local lcFiltruOriginal, lcIdColumn, lcNumeProc, lcPrimaColoana, lcTitlu, lcTitluColoane, lccoloane + Local lcfiltru, lcorder, lcschema, lcselect, llMultipleArticles, llToateIreg, lnPornire, lnTipReturn + + loCauta = "" + llReturn = .F. + lcselect = [select id_subgrupa,subgrupa,grupa,indicativ from vgest_art_sbgr] + lcfiltru = [1=2] + lcschema = [] + lcorder = [2] + lccoloane = [subgrupa,grupa,indicativ] + lcIdColumn = "id_subgrupa" + lcPrimaColoana = "subgrupa" + + lcTitluColoane = [Subgrupa,Grupa,Indicativ] + llToateIreg = tlToateIreg + If tlMultipleArticles + lcTitlu = [Alegeti subgrupele (mouse-click pe denumire sau apasati SPACE)] + Else + lcTitlu = [Alegeti subgrupa de articole] + Endif + lcNumeProc = "" + lcFiltruOriginal = Iif(!Empty(tcFiltruOriginal), Alltrim(tcFiltruOriginal), "") + llMultipleArticles = tlMultipleArticles + llToateIreg = tlToateIreg + lnPornire = Iif(Empty(m.tnPornire), CA_PORNIRE_INCEPE, m.tnPornire) + lnTipReturn = Iif(tlMultipleArticles, 1, 0) + + loCauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lccoloane, lcTitlu, lcTitluColoane, lcNumeProc, llToateIreg, lcFiltruOriginal, lcPrimaColoana, lnPornire, lnTipReturn, lcIdColumn) && 11.07.2007 + + *!* 24.08.2011 + IF m.llMultipleArticles + loLista = XML2ListaIDDescriere(loCauta, "id_subgrupa", "subgrupa", tlLoud) + tcListaId = loLista.ListaId + tcListaDenumire = loLista.ListaDenumire + ENDIF + *!* 24.08.2011 + + Return loCauta +Endproc +******************************************* SFARSIT: caut_delegati ******************************************* +******************************************* INCEPUT:caut_grupa_gestiune ******************************************* +Function caut_grupa_gestiune + Lparameters tnIdGrupa, tlToateIreg + + ** tnIdGrupa = arat toate grupele in afara (eventual) de grupa pe care am selectat-o in cazul alegerii grupei parinte + Local lcCont, loCauta + + Store "" To loCauta + If Pcount() = 2 + llToateIreg = tlToateIreg + ELSE + llToateIreg = .T. + Endif + + pcselect = [select id_grupe, nume_grupa FROM vgest_nom_grupe] + pcfiltru = [] + pcschema = [] + pcorder = [nume_grupa] + pccoloane = [nume_grupa] + pcTitlu = [Grupa] + pcTitluColoane = [Grupa] + pcFiltruOriginal = [inactiv = 0 ] + Iif(!Empty(tnIdGrupa), [ and id_grupe <> ] + Transform(tnIdGrupa), []) + lcNumeProc = [] + loCauta = cauta_alfa(pcselect, pcfiltru, pcschema, pcorder, pccoloane, pcTitlu, pcTitluColoane, lcNumeProc, llToateIreg, pcFiltruOriginal) && 11.07.2007 + + Return loCauta +Endfunc && caut_grupa_gestiune +******************************************* SFARSIT: caut_grupa_gestiune ******************************************* + + +******************************************* INCEPUT:caut_valuta ******************************************* +Function caut_valuta + Parameters tnPornire, tlDesktop, tlFaraMonedaNationala + + Local lcCont, loCauta, lnPornire, llDesktop + lnPornire = tnPornire && 1-incepe cu...6-toate + llDesktop = tlDesktop + llFaraMonedaNationala = tlFaraMonedaNationala + Store "" To loCauta + + lcSelect = [select id_valuta, nume_val, nume_val2, moneda_nationala FROM vnom_valute] + lcFiltru = [1=2] + lcSchema = [] + lcOrder = [nume_val] + lccoloane = [nume_val,nume_val2] + lcTitlu = [Alegeti valuta] + lcTitluColoane = [Valuta,Simbol] + If llFaraMonedaNationala + lcFiltruOriginal = [inactiv = 0 and moneda_nationala = 0] + Else + lcFiltruOriginal = [inactiv = 0] + Endif + lcNumeProc = [] + llToateIreg = .F. + loCauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lccoloane, lcTitlu, lcTitluColoane, lcNumeProc, llToateIreg, lcFiltruOriginal, , lnPornire, , , llDesktop) && 11.07.2007 + + Return loCauta +Endfunc && caut_valuta +******************************************* SFARSIT: caut_valuta ******************************************* +******************************************* INCEPUT:caut_valuta_iso ******************************************* +Function cauta_valuta_iso + Lparameters tnTipCautare, tcParametru +*!* tnTipCautare +*!* 1 - arata pe toate +*!* 2 - arata pe toate in afara de cele care se afla deja in nom_valute si nu sunt sterse/inactive +*!* 3 - nu arata formularul de cautare, ci cauta direct in baza de date o valuta care sa aiba iso-ul ca tcParametru + Local lcValutaIso, loCauta, lcSelect, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane, lcFiltruOriginal, lcNumeProc, llToateIreg, lnSucces, lcCursor, lnTipCautare + Store "" To loCauta + lcSelect = [select id_valuta_iso,nume_valuta,iso_valuta from syn_vnom_valute_iso] + lcFiltru = IIF(!EMPTY(tcParametru), [iso_valuta like '] + Upper(Alltrim(tcParametru)) + [%'], [1=2]) + lnTipCautare = IIF(EMPTY(tnTipCautare), 1, tnTipCautare) + If Inlist(lnTipCautare, 1, 2) + lcSchema = [] + lcOrder = [iso_valuta] + lcColoane = [nume_valuta,iso_valuta] + lcTitlu = [Alegeti simbolul ISO] + lcTitluColoane = [Denumire,Simbol ISO] + If lnTipCautare = 2 + lcFiltruOriginal = [id_valuta_iso not in (select id_valuta_iso from nom_valute where sters = 0 and inactiv = 0 and id_valuta_iso is not null)] + Else + lcFiltruOriginal = [2=2] + Endif + lcNumeProc = [] + llToateIreg = .F. + loCauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane, lcNumeProc, llToateIreg, lcFiltruOriginal) + Else + If lcFiltru <> [1=2] + lcSelect = lcSelect + [ where ] + lcFiltru + lcCursor = Sys(2015) + lnSucces = goExecutor.oExecute(lcSelect, lcCursor) + If lnSucces < 0 + amessagebox(goExecutor.cEroare, 64, "Eroare") + Else + If Reccount(lcCursor) = 1 + Select (lcCursor) + Scatter Name loCauta + Endif + Use In (lcCursor) + Endif + Endif + Endif + Release lcValutaIso, lcSelect, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane, lcFiltruOriginal, lcNumeProc, llToateIreg, lnSucces, lcCursor + Return IIF(TYPE('loCauta') = 'C', NULL, loCauta) +Endfunc && caut_valuta_iso +******************************************* SFARSIT: caut_valuta_iso ******************************************* +******************************************* INCEPUT:caut_fdoc ******************************************* +Function caut_fdoc + Parameters llToateIreg, tlNou + Local lcCont, loCauta + + Store "" To loCauta + + lcSelect = [select id_fdoc, fel_document, tip_doc, descriere FROM vnom_fdoc] + lcFiltru = [1=2] + lcSchema = [] + lcOrder = [fel_document] + lccoloane = [fel_document, tip_doc, descriere] + lcTitlu = [Alegeti felul documentului] + lcTitluColoane = [Fel Document, Tip, Descriere] + lcFiltruOriginal = [inactiv = 0] + If tlNou + lcNumeProc = [nom_fdoc] + Else + lcNumeProc = [] + Endif + + llToateIreg = .F. + loCauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lccoloane, lcTitlu, lcTitluColoane, lcNumeProc, llToateIreg, lcFiltruOriginal) && 11.07.2007 + + Return loCauta + ******************************************* SFARSIT: caut_fdoc ******************************************* +Procedure caut_alfa_beta + Lparameters tcTabela, tcSuperCombo, tnvalueSC && tcSuperCombo = "nume_camp:tip_data;" + + + lcTabela = Alltrim(tcTabela) + lcSC = Alltrim(tcSuperCombo) + + lnLen = Getwordcount(lcSC, ';') + + Dimension taSC[lnLen, 5] &&1-camp,2-tip_data,3-nrzec,4-inputmask,5-rezervat filtru + + For i = 1 To lnLen + lcSc1 = Getwordnum(lcSC, i, ';') + taSC[i, 1] = Getwordnum(lcSc1, 1, ':') + taSC[i, 2] = Getwordnum(lcSc1, 2, ':') + taSC[i, 3] = Getwordnum(lcSc1, 3, ':') + taSC[i, 4] = Getwordnum(lcSc1, 4, ':') + Endfor + + Return @taSC + +Endproc + +***************************************************************************** +Procedure update_articole + If Used('v_articole') + Use In v_articole + Endif + lcSql = [select id_articol, codmat, denumire as nume_articol, um, cant_bax, um2,compus from vnom_articole_crm order by denumire ] + lnSucces = goExecutor.oExecute(lcSql, 'v_articole') + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare, 0 + 16, 'Eroare') + Endif + goExecutor.oReset() + Return lnSucces + +Endproc && update_articole +***************************************************************************** +******************************************* INCEPUT:caut_sectie ******************************************* +Function caut_sectie + Parameters tnPornire, tlDesktop, tlToateIreg, tlNou, tcFiltruOriginal + + Local lcCont, loCauta, lnPornire, llDesktop + lnPornire = tnPornire && 1-incepe cu...6-toate + llDesktop = tlDesktop + + Store "" To loCauta + + lcSelect = [select id_sectie, sectie, csectie FROM vnom_sectii] + lcFiltru = [1=2] + lcSchema = [] + lcOrder = [sectie] + lccoloane = [sectie, csectie] + lcTitlu = [Alegeti sectia] + lcTitluColoane = [Sectie, Indicativ] + lcFiltruOriginal = [inactiv = 0] + gcCondSucursala + IIF(!EMPTY(tcfiltruOriginal), [ and ] + tcFiltruOriginal, []) + lcNumeProc = IIF(m.tlNou, [nom_sectii], []) + llToateIreg = m.tlToateIreg + loCauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lccoloane, lcTitlu, lcTitluColoane, lcNumeProc, llToateIreg, lcFiltruOriginal, , lnPornire, , , llDesktop) && 11.07.2007 + + Return loCauta +Endfunc && caut_sectie +******************************************* SFARSIT: caut_sectie ******************************************* + +******************************************* INCEPUT:caut_venchelt ******************************************* +Function caut_venchelt + Parameters tnPornire, tlDesktop, tnTip, tnId, tlToateIreg, tlNou, tcFiltruOriginal + + Local lcCont, loCauta, lnPornire, llDesktop + lnPornire = Iif(!Empty(tnPornire), 1, tnPornire) && 1-incepe cu...6-toate + llDesktop = Iif(!Empty(tlDesktop), tlDesktop, .F.) && formulare desktop = .T. + && tnTip: 1 = cheltuieli, ,2 = venituri + + Store "" To loCauta + lcFiltruOriginal = [inactiv = 0] + IIF(!EMPTY(m.tcFiltruOriginal), [ and ] + m.tcFiltruOriginal, []) + If !Empty(tnId) + lcFiltruOriginal = lcFiltruOriginal + [ and id_venchelt <> ] + Alltrim(Str(tnId)) + Endif + If !Empty(tnTip) + lcFiltruOriginal = lcFiltruOriginal + [ and tip_venchelt = ] + Alltrim(Str(tnTip)) + Endif + + lcSelect = [select id_venchelt, explicatie, (case tip_venchelt when 1 then 'C' else 'V' end) as tip_venchelt FROM vnom_venchel ] + lcFiltru = [1=2] + lcSchema = [id_venchelt n(10),explicatie c(100),tip_venchelt c(1)] + lcOrder = [explicatie] + lccoloane = [explicatie,tip_venchelt] + lcTitlu = [Alegeti venitul/cheltuiala] + lcTitluColoane = [Explicatia, Tip] + lcNumeProc = IIF(m.tlNou, [nom_venchel], []) + llToateIreg = m.tlToateIreg + loCauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lccoloane, lcTitlu, lcTitluColoane, lcNumeProc, llToateIreg, lcFiltruOriginal, , lnPornire, , , llDesktop) && 11.07.2007 + + Return loCauta +Endfunc && caut_venchelt +******************************************* SFARSIT: caut_venchelt ******************************************* +******************************************* INCEPUT:caut_ven ******************************************* +Function caut_ven + Parameters tnPornire, tlDesktop + + Local lcCont, loCauta, lnPornire, llDesktop + lnPornire = tnPornire && 1-incepe cu...6-toate + llDesktop = tlDesktop + + Store "" To loCauta + + lcSelect = [select id_venchelt, explicatie FROM vnom_venchel ] + lcFiltru = [1=2] + lcSchema = [] + lcOrder = [explicatie] + lccoloane = [explicatie] + lcTitlu = [Alegeti venitul] + lcTitluColoane = [Explicatia] + lcFiltruOriginal = [inactiv = 0 and tip_venchelt <> 1] + lcNumeProc = [] + llToateIreg = .F. + loCauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lccoloane, lcTitlu, lcTitluColoane, lcNumeProc, llToateIreg, lcFiltruOriginal, , lnPornire, , , llDesktop) && 11.07.2007 + + Return loCauta +Endfunc && caut_ven +******************************************* SFARSIT: caut_ven ******************************************* + + + +*------------------------------------------------------------ +* Description: INTOARCE XML CU FACTURI ALESE DIN FACTURI EMISE IN PERIOADA +* Parameters: tcCont, tnIdPart, tdData1, tdData2 +* Return: lcXMLFacturi +* Use: lcXMLFacturi = Caut_Facturi(lcCont, lnIdPart, ldData1, ldData2) +*------------------------------------------------------------ +* Id Date By Description +* 1 23/06/2006 marius.mutu Initial Creation +*------------------------------------------------------------ +Function caut_facturi + Lparameters tcCont, tnIdPart, tdData1, tdData2 + + Local loCauta, ldData1, ldData2, lnTipCont + + Store Null To loCauta + ldData1 = tdData1 + ldData2 = tdData2 + + + Private pnNrLuna1, pnNrLuna2, pnIdPart, pcCont + pnNrLuna1 = Year(ldData1) * 12 + Month(ldData1) + pnNrLuna2 = Year(ldData2) * 12 + Month(ldData2) + pnIdPart = tnIdPart + pcCont = tcCont + + lnTipCont = GetTipContIreg(pcCont) + + lcSelect = [select i.id_ireg_part, i.an, i.luna, i.nume, i.cont, i.acont, i.id_fact, i.serie_act, i.nract, i.dataact, i.datascad, i.preccred + i.credit as totctva FROM VIREG_EMISE_IN_PERIOADA i] + lcFiltru = [] + lcSchema = [id_ireg_part N(20), AN N(4), LUNA N(2), NUME C(100), CONT C(4), ACONT C(4), ID_FACT N(20), SERIE_ACT C(10), NRACT N(20), DATAACT D, DATASCAD D, TOTCTVA N(20,4)] + lcOrder = [i.dataact, i.nract] + llAfisare = .F. + lcGroup = [] + llModParam = .T. + lcFiltruOriginal = [i.an * 12 + i.luna between ?pnNrLuna1 and ?pnNrLuna2 and i.id_part = ?pnIdPart AND i.cont in (SELECT x AS cont FROM table(charc2collection(?pcCont, ',')))] + + lcCOloana = "nume, serie_act, nract, dataact, datascad, totctva" + lcTitluColoana = "Nume, Serie act, Numar act, Data act, Data scad, Total factura" + llAllInList = .F. + lnPornire = 6 && TOATE + lcPrimaColoana = "NUME" + lcNume_Proc = "" + lcTitlu = "Alegeti facturile (mouse-click pe nume sau apasati SPACE)" + lnTipReturn = 1 && XML + lcIdColumn = "id_ireg_part" + lcXMLFacturi = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lcCOloana, lcTitlu, lcTitluColoana, lcNume_Proc, llAllInList, lcFiltruOriginal, lcPrimaColoana, lnPornire, lnTipReturn, lcIdColumn) && 11.07.2007 + + *!* XMLTOCURSOR(lcXMLFacturi, "crsFacturi",0) + + Return lcXMLFacturi +Endfunc && caut_facturi +******************************************* SFARSIT: caut_facturi ******************************************* + +*------------------------------------------------------------ +* caut factura in luna curenta dupa nume, numar si intorc id_fact +*------------------------------------------------------------ +Function caut_factura + Lparameters tcCont, tdData1, tdData2 + + Local loFactura, ldData1, ldData2 + + loFactura = NULL + ldData1 = tdData1 + ldData2 = tdData2 + + Private pnNrLuna1, pnNrLuna2, pcCont + pnNrLuna1 = Year(ldData1) * 12 + Month(ldData1) + pnNrLuna2 = Year(ldData2) * 12 + Month(ldData2) + pcCont = tcCont + + lcSelect = [select i.id_ireg_part, i.an, i.luna, i.nume, i.cont, i.acont, i.id_fact, i.serie_act, i.nract, i.dataact, i.datascad, i.preccred + i.credit as totctva FROM VIREG_EMISE_IN_PERIOADA i] + lcFiltru = [] + lcSchema = [id_ireg_part N(20), AN N(4), LUNA N(2), NUME C(100), CONT C(4), ACONT C(4), ID_FACT N(20), SERIE_ACT C(10), NRACT N(20), DATAACT D, DATASCAD D, TOTCTVA N(20,4)] + lcOrder = [i.dataact, i.nract] + llAfisare = .F. + lcGroup = [] + llModParam = .T. + lcFiltruOriginal = [i.an * 12 + i.luna between ?pnNrLuna1 and ?pnNrLuna2 AND i.cont in (SELECT x AS cont FROM table(charc2collection(?pcCont, ',')))] + + lcCOloana = "nume, serie_act, nract, dataact, datascad, totctva, id_fact" + lcTitluColoana = "Nume, Serie act, Numar act, Data act, Data scad, Total factura, Id Fact" + llAllInList = .F. + lnPornire = 1 && INCEPE CU + lcPrimaColoana = "NUME" + lcNume_Proc = "" + lcTitlu = "Alegeti factura" + lnTipReturn = 0 && object + lcIdColumn = "id_fact" + loFactura = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lcCOloana, lcTitlu, lcTitluColoana, lcNume_Proc, llAllInList, lcFiltruOriginal, lcPrimaColoana, lnPornire, lnTipReturn, lcIdColumn) && 11.07.2007 + + Return loFactura +Endfunc && caut_facturi +******************************************* SFARSIT: caut_facturi ******************************************* + +*------------------------------------------------------------ +* Description: INTOARCE TIPUL SOLDULUI CONTULUI (0 = ACTIV/DEBITOR, 1 = PASIV/CREDITOR) +* Parameters: +* Return: 0 (DEBITOR), 1 (CREDITOR) +* Use: lnTip = GetTipContIreg("401") +*------------------------------------------------------------ +* Id Date By Description +* 1 23/06/2006 marius.mutu Initial Creation +*------------------------------------------------------------ +Function GetTipContIreg + Parameters tcCont + + Local lcSql, lcCursor, lnSucces, lnTip + + lnTip = 0 + + lcSql = [select FEL_CONT from config_cont_ireg WHERE CONT = ?tcCont] + lcCursor = [crsTipContIreg] + lnSucces = goExecutor.oExecute(lcSql, lcCursor) + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare, 0 + 16, "Eroare") + Else + Select crsTipContIreg + If Reccount('crsTipContIreg') > 0 + Go Top + lnTip = FEL_CONT + Endif + Use In crsTipContIreg + Endif + + Return lnTip +Endfunc && GetTipContIreg + + +*!* 04.07.2006 +*!* marius.mutu +*!* adaugat cauta_utilizator si cauta_client din roaauto\programe\update_devize.prg +*********************************************************************** +Function cauta_utilizator + Lparameters tnIdUtil, tcUtilizator + Local loCauta, llReturn + Store "" To loCauta + Store .F. To llReturn + pcselect = [select id_util,utilizator from syn_vutilizatori] + pcfiltru = [1=2] + pcschema = [] + pcorder = [utilizator] + pccoloane = [Utilizator] + pcTitlu = [Alegeti utilizatorul] + pcTitluColoane = [Utilizator] + loCauta = cauta_alfa(pcselect, pcfiltru, pcschema, pcorder, pccoloane, pcTitlu, pcTitluColoane, "") && 11.07.2007 + If !Empty(loCauta.id_util) + tnIdUtil = loCauta.id_util + tcUtilizator = Alltrim(loCauta.utilizator) + llReturn = .T. + Endif + Return llReturn +Endfunc && cauta_utilizator +*********************************************************************** +Function cauta_utilizator_firma + Parameters tnPornire, tlDesktop + Local lcCont, loCauta, lnPornire, llDesktop + ***** 17.11.2008 ***** + + lnPornire = tnPornire && 1-incepe cu...6-toate + llDesktop = tlDesktop + Store "" To loCauta + + lcSelect = [select distinct b.utilizator,a.id_util from syn_vdef_util_firme a ] + ; + [left join syn_vutilizatori b on a.id_util = b.id_util ] + lcFiltru = [1=2] + lcSchema = [] + lcOrder = [b.utilizator] + lccoloane = [utilizator] + lcTitlu = [Alegeti utilizatorul] + lcTitluColoane = [Utilizator] + lcFiltruOriginal = [a.id_firma = ?gnIdFirma] + lcNumeProc = [] + llToateIreg = .F. + loCauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lccoloane, lcTitlu, lcTitluColoane, lcNumeProc, llToateIreg, lcFiltruOriginal, , lnPornire, , , llDesktop) && 11.07.2007 + + Return loCauta +Endfunc && cauta_utilizatori_firma +*********************************************************************** +Function cauta_client + Lparameters tnIdPartener, tcNume + Local loCauta, llReturn + Store "" To loCauta + Store .F. To llReturn + pcselect = [select p.id_part,p.nume,p.cod_fiscal from vcoresp_tip_part p ] + ; + [join vcoresp_tip_cont c on p.id_tip_part=c.id_tip_part] + pcFiltruOrig = [c.cont ='4111' and p.inactiv=0] + pcfiltru = [1=2] + pcschema = ['id_part n(10),nume c(100),cod_fiscal c(100)'] + pcorder = [nume] + pccoloane = [nume,cod_fiscal] + pcTitlu = [Alegeti clientul] + pcTitluColoane = [Client,Cod fiscal] + loCauta = cauta_alfa(pcselect, pcfiltru, pcschema, pcorder, pccoloane, pcTitlu, pcTitluColoane, "", .F., pcFiltruOrig) && 11.07.2007 + If !Empty(loCauta.id_part) + tnIdPartener = loCauta.id_part + tcNume = Alltrim(loCauta.nume) + llReturn = .T. + Endif + Return llReturn +Endfunc +*********************************************************************** + + +*------------------------------------------------------------ +* Description: INTOARCE PRIMUL ID_TIP_PART PENTRU UN CONT +* Parameters: +* Return: ID_TIP_PART +* Use: lnIdTipPart = GetContIdTipPart("4111") +*------------------------------------------------------------ +* Id Date By Description +* 1 14/07/2006 marius.mutu Initial Creation +*------------------------------------------------------------ +Function GetContIdTipPart + Parameters tcCont + + Local lcSql, lcCursor, lnSucces, lnIdTipPart + + lnIdTipPart = 0 + + lcSql = [select id_tip_part from coresp_tip_cont WHERE CONT = ?tcCont] + lcCursor = [crsTipPartTemp] + lnSucces = goExecutor.oExecute(lcSql, lcCursor) + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare, 0 + 16, "Eroare") + Else + If Reccount('crsTipPartTemp') > 0 + Select crsTipPartTemp + Go Top + lnIdTipPart = id_tip_part + Endif + Use In crsTipPartTemp + Endif + + Return lnIdTipPart +Endfunc && GetContIdTipPart + + + +*** modificare serii numere - 10.2007 +*!* Procedure getNirPlajaCMP +*!* Lparameters tnPlaja1, tnPlaja2 + +*!* && PLAJE NIR-URI CMP +*!* lnTip = 4 && NIR PT CMP +*!* lnSerie = 2 +*!* lnId_entitate = 0 +*!* tnPlaja1 = 0 +*!* tnPlaja2 = 0 +*!* lcSelect = [select id_plaja,pl_inf,pl_sup from vplaje_numere where ] +; +*!* [inactiv = 0 and tip = ] + Alltrim(Str(lnTip)) + [ and serie = ] + ; +*!* ALLTRIM(Str(lnSerie)) + [ and id_entitate = ] + Alltrim(Str(lnId_entitate)) +*!* lcCursor = [crsplaja] +*!* lnSucces = goExecutor.oExecute(lcSelect,lcCursor) +*!* If lnSucces < 0 +*!* AMESSAGEBOX(goExecutor.cEroare,0+16, 'Eroare') +*!* Else +*!* Select crsPlaja +*!* tnPlaja1= pl_inf +*!* tnPlaja2 = pl_sup +*!* Use In crsPlaja +*!* Endif + +*!* &&(NNIR NOT BETWEEN ] + TRANSFORM(lnNnir1) + [ AND ] + TRANSFORM(lnNnir2) + [)] +*!* && getNirPlajaCMP(@lnPlaja1, @lnPlaja2) + +*!* Endproc &&getNirPlajaCMP +*** modificare serii numere - 10.2007 ^ +******************************************************************************************************************* +Function GetTipGestiune + Lparameters tnIdGestiune + Local lnTipGestiune, lcCursor + lnTipGestiune = -1 + lcCursor = [crsTipGest] + If Used(lcCursor) + Use In (lcCursor) + Endif + + lcSql = [select nr_pag from ] + gcS + [.vnom_gestiuni where id_gestiune = ] + Alltrim(Str(tnIdGestiune)) + lnSucces = goExecutor.oExecute(lcSql, lcCursor) + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare, 16, "Eroare") + Else + If Reccount(lcCursor) > 0 + Select (lcCursor) + lnTipGestiune = nr_pag + Endif + Endif + + If Used(lcCursor) + Use In (lcCursor) + Endif + Return lnTipGestiune +Endfunc && GetTipGestiune +******************************************************************************************************************* + +* PROCEDURE caut_gruputilizatori +* Date : 18.09.2006 +* author : marius.mutu +******************************************* INCEPUT:caut_gruputilizatori ******************************************* +Procedure caut_gruputilizatori(tlToateIreg, tlNou) + + Local loCauta, lcFiltruOriginal + Local lcTitlu, lcFiltru, lcSchema, lcOrder, lcNumeProc, lcTitluColoane + Store Null To loCauta + + lcSelect = [select id_grup, id_tata, denumire_grup, inactiv, nume_parinte from vgrupuri_utilizatori] + lcFiltru = [1=2] + lcSchema = [] + lcOrder = [denumire_grup] + lccoloane = [denumire_grup,id_grup] + lcFiltruOriginal = [inactiv = 0] + + + lcTitlu = "Alegeti grupul" + If tlNou + lcNumeProc = [nom_gruputilizatori] + Else + lcNumeProc = [] + Endif + lcTitluColoane = [Grup, Id] + loCauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lccoloane, lcTitlu, lcTitluColoane, lcNumeProc, tlToateIreg, lcFiltruOriginal) && 11.07.2007 + + Return loCauta + +Endproc +******************************************* SFARSIT: caut_gruputilizatori ******************************************* + + + +* PROCEDURE caut_sucursala +* Date : 18.09.2006 +* author : marius.mutu +******************************************* INCEPUT:caut_sucursala ******************************************* +Procedure caut_sucursala(tlToateIreg, tlNou, tlBlank) + && tlBlank = .T. => arat o inregistrare goala (daca vreau sa aleg sucursala NULL pentru mama in initializari balante) + + Local loCauta, lcFiltruOriginal + Local lcTitlu, lcFiltru, lcSchema, lcOrder, lcNumeProc, lcTitluColoane + Store Null To loCauta + + lcSelect = [select id_sucursala, sucursala, inactiv from vnom_sucursale] + If tlBlank + lcSelect = [select cast (null as number(5)) as id_sucursala, rpad(' ',100, ' ') as sucursala, 0 as inactiv from dual ] + ; + [ UNION ] + ; + lcSelect + Endif + lcFiltru = [] + lcSchema = [] + lcOrder = [sucursala] + lccoloane = [sucursala,id_sucursala] + If glEMama && daca este mama - arat doar sucursalele ei + lcFiltruOriginal = [inactiv = 0 and id_mama = ?gnIdFirma] + Else && daca este sucursala nu arat nimic + lcFiltruOriginal = [1=2] + Endif + + + lcTitlu = "Alegeti sucursala" + If tlNou + lcNumeProc = [nom_sucursale] + Else + lcNumeProc = [] + Endif + lcTitluColoane = [Sucursala, Id] + loCauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lccoloane, lcTitlu, lcTitluColoane, lcNumeProc, tlToateIreg, lcFiltruOriginal) && 11.07.2007 + + Return loCauta + +Endproc +******************************************* SFARSIT: caut_gruputilizatori ******************************************* +******************************************* INCEPUT: caut_masina_gs ******************************************* +Function caut_masina_gs + Lparameters tlToateIreg, tlMaiMulteMasini + Store "" To loCauta + + lcFiltru = [1=2] + lcSchema = [id_masina n(20),nrinmat c(35),marca_masina c(24),model_masina c(20)] + lcOrder = [nrinmat] + lccoloane = [nrinmat,marca_masina,model_masina] + lcTitlu = [Alegeti maina] + lcTitluColoane = [Nr.inmatriculare,Marca,Model] + llMaiMulteMasini = tlMaiMulteMasini + lcSelect = [select id_masina,nrinmat,marca_masina,model_masina from vnom_masini where 2=2] + lcFiltruOriginal = [2=2] + lcNumeProc = [nom_masini] + llToateIreg = tlToateIreg + lcPrimaColoana = [nrinmat] + lnPornire = 1 + lnTipReturn = Iif(tlMaiMulteMasini, 1, 0) + lcIdColumn = "id_masina" + loCauta = cauta_alfa_gs(lcSelect, lcFiltru, lcSchema, lcOrder, lccoloane, lcTitlu, lcTitluColoane, lcNumeProc, llToateIreg, lcFiltruOriginal, lcPrimaColoana, lnPornire, lnTipReturn, lcIdColumn) + + Return loCauta +Endfunc && caut_masina_gs +******************************************* SFARSIT: caut_masina_gs ******************************************* + +* primeste un hash cu parametri: cTitlu, cText, cTip, cEnums +* afiseaza un textbox/editbox/combobox initializat cu cText si intoarce textul modificat +* daca tipul este COMBO - trebuie si parametrul cEnums (sir separat prin virgula cu valorile de afisat in combo) +* lcText = GetText(GetHash("cTitlu=>titlul meu??cText=>text initial??cTip=>TEXT/COMBO/EDIT??cEnums=>DA,NU")) +Procedure GetText + Parameters toHash + + Local lcText, lcTitlu, lcTip + Private pcText + + lcTitlu = toHash.GetValue("cTitlu") + pcText = toHash.GetValue("cText") + lcTip = Upper(Alltrim(toHash.GetValue("cTip"))) && text/edit/combo + lcEnums = toHash.GetValue("cEnums") + + If Empty(lcTitlu) + lcTitlu = "Valoare" + Endif + If Empty(lcTip) + lcTip = "TEXT" + Endif + lcText = pcText + + Do Case + Case lcTip = 'TEXT' + loText = Newobject("frm_textbox", "cautare.vcx") + loText.ct_text.text_simplu1.ControlSource = "pcText" + loText.ct_text.lb_simplu1.Caption = lcTitlu + + Case lcTip = 'COMBO' + loText = Newobject("frm_combobox", "cautare.vcx") + With loText.ct_text._cbbase1 + .ControlSource = "pcText" + .RowSourceType = 1 && value + .RowSource = lcEnums && sir valori + .ColumnCount = 1 && sir valori + Endwith + loText.ct_text._lbbase1.Caption = lcTitlu + + Otherwise && EDIT + loText = Newobject("frm_editbox", "cautare.vcx") + loText.ct_text._edbase1.ControlSource = "pcText" + loText.ct_text._lbbase1.Caption = lcTitlu + + Endcase + + loText.lb_titlu_alb_b121.Caption = lcTitlu + + loText.Show(1) + If gnButon = 1 + lcText = pcText + Endif + + Return lcText +Endproc && GetText + +******************************************* INCEPUT:caut_politici_preturi ******************************************* +Function caut_politici_preturi + Local lcCont, loCauta + + Store "" To loCauta + + *!* 06.07.2011 +*!* lcSelect = [select NUME_LISTA_PRETURI,DATAI,DATAS,ID_POL FROM vcrm_politici_preturi ] + lcSelect = [select nume_lista_preturi, datai, datas, id_pol from crm_vpolpretcurutil] + *!* 06.07.2011 ^ + lcFiltru = [1=2] + lcSchema = [NUME_LISTA_PRETURI C(100),DATAI D,DATAS D,ID_POL N(10)] + lcOrder = [nume_lista_preturi] + lccoloane = [NUME_LISTA_PRETURI,DATAI,DATAS,ID_POL] + lcTitlu = [Alegeti lista de pre_uri] + lcTitluColoane = [LISTA PRETURI,DATA INCEPUT,DATA SFARSIT,ID] + *!* 06.07.2011 +*!* lcFiltruOriginal = [inactiv = 0] + lcFiltruOriginal = [id_util = ?gnIdUtil] + m.gcCondSucursala + *!* 06.07.2011 ^ + lcNumeProc = [] + llToateIreg = .F. + + loCauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lccoloane, lcTitlu, lcTitluColoane, lcNumeProc, llToateIreg, lcFiltruOriginal) && 11.07.2007 + + Return loCauta + ******************************************* SFARSIT:caut_politici_preturi ******************************************* + ******************************************* INCEPUT:caut_imprimanta ******************************************* +Function caut_imprimanta + Local loCauta + Store [] To loCauta + + Create Cursor crsprinters (imprimanta C(100), port C(20)) + Aprinters(laPrinters) + Insert Into crsprinters From Array laPrinters + lcSelect = [select imprimanta,port from crsprinters] + lcFiltru = [1=2] + lcSchema = [imprimanta c(100),port c(20)] + lcOrder = [imprimanta] + lccoloane = [imprimanta,port] + lcTitlu = [Alegeti imprimanta] + lcTitluColoane = [Imprimanta,Port de conectare] + lcFiltruOriginal = [] + lcNumeProc = [] + llToateIreg = .F. + + loCauta = cauta_alfa_vfp(lcSelect, lcFiltru, lcSchema, lcOrder, lccoloane, lcTitlu, lcTitluColoane, lcNumeProc, llToateIreg, lcFiltruOriginal) && 11.07.2007 + + Release laPrinters + Return loCauta +Endproc &&caut_imprimanta +******************************************* SFARSIT:caut_imprimanta ******************************************* +************************************** INCEPUT:caut_politici_curente_util ************************************* +Procedure caut_politici_curente_util + Local loCauta, llReturn + Store "" To loCauta + Store .F. To llReturn + lcSelect = [select id_pol,nume,datai,datas from crm_vpolpretcurutil] + lcFiltru = [1=2] + lcSchema = [id_pol n(5), nume c(100), datai d,datas d] + lcOrder = [2] + lccoloane = [nume,datai,datas] + lcTitlu = [Alegeti politica de pre_uri] + lcTitluColoane = [Nume,Data inceput,Data sfarsit] + lcNumeProc = [] + llToateIreg = .F. + lcFiltruOriginal = [id_util = ?gnIdUtil] + loCauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lccoloane, lcTitlu, lcTitluColoane, lcNumeProc, llToateIreg, lcFiltruOriginal) && 11.07.2007 + Return loCauta +Endproc && caut_politici_curente_util +************************************** SFARSIT: caut_politici_curente_util ************************************** +***************************************** INCEPUT:caut_explicatie_tva ******************************************* +Function caut_explicatie_tva + Parameters tnIdJtva, tnPornire, tlDesktop, tlTipEx + *!* tlTipEx = 0 - toate + *!* = 1 - doar TVA exigibil din JC + *!* = 2 - doar TVA neexigibil din JC + *!* = 3 - doar TVA exigibil din JV + *!* = 4 - doar TVA neexigibil din JV + *!* = 5 - doar TVA exigibil ( JC + JV ) + *!* = 6 - doar TVA neexigibil ( JC + JV ) + + Local lcCont, loCauta, lnPornire, llDesktop + lnPornire = tnPornire && 1-incepe cu...6-toate + llDesktop = tlDesktop + lnIdJtva = Iif(Empty(tnIdJtva), -1, tnIdJtva) + + Store "" To loCauta + + lcSelect = [select id_jtva_coloana, denumire, cota_tva FROM vjtva_coloane] + lcFiltru = [1=2] + lcSchema = [] + lcOrder = [denumire] + lccoloane = [denumire,cota_tva] + lcTitlu = [Alegeti explica_ia TVA] + lcTitluColoane = [Explicatie TVA,Cota TVA] + *!* modificare ROACONT v 2.4.4 + do case + case empty(tlTipEx) + lcFiltruOriginal = [id_jtva_coloana > 0] + case tlTipEx = 1 + lcFiltruOriginal = [id_jtva_coloana in (select id_tva from vjtva_coloane where ] + ; + [jc = 1 and id_jtva_neex is not null)] + case tlTipEx = 2 + lcFiltruOriginal = [id_jtva_coloana in (select id_tva from vjtva_coloane where ] + ; + [jc = 1 and id_jtva_ex is not null)] + case tlTipEx = 3 + lcFiltruOriginal = [id_jtva_coloana in (select id_tva from vjtva_coloane where ] + ; + [jv = 1 and id_jtva_neex is not null)] + case tlTipEx = 4 + lcFiltruOriginal = [id_jtva_coloana in (select id_tva from vjtva_coloane where ] + ; + [jv = 1 and id_jtva_ex is not null)] + case tlTipEx = 5 + lcFiltruOriginal = [id_jtva_coloana in (select id_tva from vjtva_coloane where ] + ; + [id_jtva_neex is not null)] + Otherwise + lcFiltruOriginal = [id_jtva_coloana in (select id_tva from vjtva_coloane where ] + ; + [id_jtva_ex is not null)] + Endcase +*!* *!* If tnIdJtva > 0 +*!* *!* lcFiltruOriginal = [jc * 4 + jv * 2 + decode(afisat,0,0,1) in ] + ; +*!* *!* [(select jc * 4 + jv * 2 + decode(afisat,0,0,1) from ] + gcS + [.vjtva_coloane ] + ; +*!* *!* [where id_jtva_coloana = ] + Alltrim(Str(lnIdJtva)) + [) and id_jtva_coloana > 0] +*!* *!* ELSE +*!* lcFiltruOriginal = [id_jtva_coloana > 0] +*!* *!* Endif + *!* modificare ROACONT v 2.4.4 ^ + lcNumeProc = [] + llToateIreg = .F. + loCauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lccoloane, lcTitlu, lcTitluColoane, lcNumeProc, llToateIreg, lcFiltruOriginal, , lnPornire, , , llDesktop) && 11.07.2007 + + Return loCauta +Endfunc && caut_explicatie_tva +***************************************** SFARSIT: caut_explicatie_tva ******************************************* + +* PROCEDURE caut_formatie +* Date : 26.03.2007 +* author : paula.mutu +******************************************* INCEPUT: caut_formatie ******************************************* +Procedure caut_formatie + Lparameters tlToateIreg, tlNou, tlTranse + Local lcSelect, lcFiltruInitial, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane, lcNumeProc, tlToateIreg + lcSelect = [select * from sal_vnom_formatii] + lcFiltruInitial = [inactiv = 0] + lcFiltru = [1=1] + lcSchema = [] + lcOrder = [denumire] + lcColoane = [denumire,sectie] + IIF(tlTranse, [,transa], []) + lcTitlu = [Alegeti forma_ia] + If tlNou + lcNumeProc = [sal_nom_formatii] && [nom_formatie] + Else + lcNumeProc = [] + Endif + lcTitluColoane = [Formatie,Sectia] + IIF(tlTranse, [,Transa], []) + loCauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane, lcNumeProc, tlToateIreg, lcFiltruInitial) && 11.07.2007 + Return Iif(gnButon = 2, Null, loCauta) +Endproc && caut_formatie +***************************************** SFARSIT: caut_formatie ******************************************* +******************************************* INCEPUT: caut_gestiune_dest ******************************************* +Function caut_gestiune_dest + Lparameters tnIdGestiune, tcTip, tnTip + *!* tnIdGestiune - daca e diferit de zero atunci exclude din rezultate gestiunea cu id-ul respectiv + *!* tcTip - lista cu tipurile de gestiuni + *!* tnTip - daca e 1 atunci arata doar gestiunile, fara conturi si analitice + Local lcTip, lnTip + Store "" To loCauta, lcTip + If Empty(tcTip) + lcTip = [2,4,5,6,7] + Else + lcTip = tcTip + Endif + If Empty(tnTip) + lnTip = 0 + Else + lnTip = tnTip + Endif + pcFiltruOriginal = [a.id_util=?gnIdUtil and a.sters=0 and b.sters=0 and c.sters=0 and c.nr_pag in (] + Alltrim(lcTip) + [)] + If !Empty(Nvl(tnIdGestiune, 0)) + pcFiltruOriginal = pcFiltruOriginal + [ and b.id_gestiune!=] + Alltrim(Str(tnIdGestiune)) + Endif + + If lnTip = 1 + pcselect = [select distinct c.nume_gestiune,c.cgest,b.id_gestiune ] + ; + [from gest_coresp_util_grupe a ] + ; + [left join gest_coresp_grupe_gestiuni b on a.id_grupe=b.id_grupe ] + ; + [left join nom_gestiuni c on b.id_gestiune=c.id_gestiune ] + pcorder = [nume_gestiune] + pccoloane = [nume_gestiune,cgest] + pcTitlu = [Alegeti gestiunea destina_ie] + pcTitluColoane = [Gestiune,Cgest] + Else + pcselect = [select distinct c.nume_gestiune,c.cgest,b.id_gestiune,d.id_tipgest,] + ; + [NVL(c.cont, d.cont) as cont,NVL(c.acont, p.acont) as acont ] + ; + [from gest_coresp_util_grupe a ] + ; + [left join gest_coresp_grupe_gestiuni b on a.id_grupe=b.id_grupe ] + ; + [left join nom_gestiuni c on b.id_gestiune=c.id_gestiune ] + ; + [left join coresp_cont_tipgest d on c.nr_pag=d.id_tipgest ] + ; + [left join vplcont_analitic p on NVL(c.cont, d.cont) = p.cont and p.an = ?gnAn and p.inactiv = 0 ] + ; + [left join vplcont_sintetic s on NVL(c.cont, d.cont) = s.cont and s.an = ?gnAn and s.inactiv = 0 ] + *!* modificare ROAFACTURARE v 2.0.19 ^ + pcorder = [nume_gestiune,cgest,cont,acont] + pccoloane = [nume_gestiune,cgest,cont,acont] + pcTitlu = [Alegeti gestiunea i contul de transfer] + pcTitluColoane = [Gestiune,Cgest,Cont,Analitic] +*!* pcFiltruOriginal = pcFiltruOriginal + [ and s.an=?gnAn and s.inactiv = 0 and NVL(p.an,?gnAn)=?gnAn and NVL(p.inactiv,0) = 0] && modificare v 2.2.25 + Endif + pcfiltru = [1=2] + pcschema = [] + lcNumeProc = [] + llToateIreg = .F. + loCauta = cauta_alfa(pcselect, pcfiltru, pcschema, pcorder, pccoloane, pcTitlu, pcTitluColoane, lcNumeProc, llToateIreg, pcFiltruOriginal) && 11.07.2007 + + Return loCauta +Endfunc +******************************************* SFARSIT: caut_gestiune_dest ******************************************* +******************************************* INCEPUT:caut_mediu_transmisie ******************************************* +Function caut_mediu_transmisie + Parameters llToateIreg, tlNou + Local lcCont, loCauta + + Store "" To loCauta + + lcSelect = [select id_mediu, mediu_transmisie FROM vnom_medii_transmisie] + lcFiltru = [1=2] + lcSchema = [] + lcOrder = [mediu_transmisie] + lccoloane = [mediu_transmisie] + lcTitlu = [Alegeti mediul de transmisie] + lcTitluColoane = [Mediu transmisie] + lcFiltruOriginal = [] + If tlNou + lcNumeProc = [nom_medii_transmisie] + Else + lcNumeProc = [] + Endif + + llToateIreg = .F. + loCauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lccoloane, lcTitlu, lcTitluColoane, lcNumeProc, llToateIreg, lcFiltruOriginal) && 11.07.2007 + + Return loCauta + ******************************************* SFARSIT: caut_mediu_transmisie ******************************************* + ******************************************* INCEPUT:caut_contract ******************************************* +Function caut_contract + Lparameters tnIdTipCtr, tnIdPart, tlToate + *!* 0 - toate + *!* -1 - clienti + *!* -2 - furnizori + Local loCauta, lcFiltru + lcFiltru = [] + Store "" To loCauta + If !Empty(tnIdPart) + lcFiltru = [ and id_part = ] + Alltrim(Str(tnIdPart)) + Endif + If !Empty(tnIdTipCtr) + lcFiltru = lcFiltru + [ and id_tip_ctr = ] + Alltrim(Str(tnIdTipCtr)) + Endif + If tlToate + pcselect = [select id_ctr,id_part,denumire,data,numar_aa,numar,data_inceput,data_sfarsit,id_responsabil,observatii,] + ; + [responsabil,contract,descriere from ] + gcS + [.vcontracte_toate ] + pcorder = [data,numar_aa] + pccoloane = [numar_aa,data,denumire,data_inceput,data_sfarsit,responsabil] + Else + pcselect = [select id_ctr,id_part,denumire,data,numar,data_inceput,data_sfarsit,id_responsabil,observatii,] + ; + [responsabil,contract,descriere from ] + gcS + [.vcontracte ] + pcorder = [data,numar] + pccoloane = [numar,data,denumire,data_inceput,data_sfarsit,responsabil] + Endif + pcfiltru = [1=2] + pcschema = [''] + pcTitlu = [Alegeti contractul] + pcTitluColoane = [Numar,Data,Denumire,Data inceput,Data sfarsit,Responsabil] + pcFiltruOriginal = Substr(lcFiltru, 5) + lcNumeProc = [contracte] + llToateIreg = .F. + loCauta = cauta_alfa(pcselect, pcfiltru, pcschema, pcorder, pccoloane, pcTitlu, pcTitluColoane, lcNumeProc, llToateIreg, pcFiltruOriginal) + + Return loCauta + ******************************************* SFARSIT: caut_contract ******************************************* + ******************************************* INCEPUT: caut_raport ******************************************* +Procedure caut_raport + Lparameters tnIdFormular, tlDrepturi + Local loCauta, lcSelect + loCauta = NULL + + IF m.tlDrepturi + lcSelect = [select r.id_raport,Substr(denumire,1,254) as denumire,titlu, dataora, utilizator from vrapoarte r join rapoarte_utilizatori ru on r.id_raport = ru.id_raport] + ELSE + lcSelect = [select r.id_raport,Substr(denumire,1,254) as denumire,titlu, dataora, utilizator from vrapoarte r] + ENDIF + + loHash = GetHash() + loHash.SetValue("cSelect", lcSelect) + loHash.SetValue("cFiltru", [1=2]) + loHash.SetValue("cSchema", [id_raport n(10),denumire c(254),titlu c(150),dataora t,utilizator c(100)]) + loHash.SetValue("cOrder", [denumire]) + loHash.SetValue("cColoana", [denumire,titlu,utilizator,dataora]) + loHash.SetValue("cTitlu", [Alegeti raportul]) + loHash.SetValue("cTitluColoana", [Denumire,Titlu,Utilizator,Dataora]) + loHash.SetValue("lToateIreg", .F.) + loHash.SetValue("cFiltruOriginal", [r.id_formular_raport = ] + Alltrim(Str(m.tnIdFormular)) + IIF(m.tlDrepturi, [ and ru.id_utilizator = ] + ALLTRIM(STR(m.gnIdUtil)), [])) + loHash.SetValue("cIdColumn", "id_raport") + loHash.SetValue('lModParam', .T.) + + loCauta = cauta_alfa_hash(loHash) + Return loCauta +Endproc && caut_raport +******************************************* SFARSIT: caut_raport ******************************************* +************************************************************************************************************ +Procedure caut_sectie_util + Lparameters tnIdUtil, tnIdSucursala + Local loCauta, lcFiltru + Store "" To loCauta + If Empty(tnIdSucursala) + lcFiltruOriginal = [ and id_sectie in (select a1.id_sectie from asociere_parteneri_sectii a1 ] + ; + [left join nom_sectii a2 on a1.id_sectie = a2.id_sectie ] + ; + [where a1.id_tip = 2 and a2.sters = 0 and a1.id_part in ] + ; + [(select id_partener from vutilizatori_rol_intern where id_util = ] + Alltrim(Str(tnIdUtil)) + [))] + Else + lcFiltruOriginal = [ and id_sectie in (select a1.id_sectie from asociere_parteneri_sectii a1 ] + ; + [left join nom_sectii a2 on a1.id_sectie = a2.id_sectie ] + ; + [where a1.id_tip = 2 and a2.sters = 0 and a1.id_part in ] + ; + [(select id_partener from vutilizatori_rol_intern where id_util = ] + Alltrim(Str(tnIdUtil)) + [) ] + ; + [and a2.id_sucursala = ] + Alltrim(Str(tnIdSucursala)) + [)] + Endif + lcFiltruOriginal = [inactiv = 0] + lcFiltruOriginal + lcSelect = [select id_sectie, sectie, csectie from ] + gcS + [.vnom_sectii ] + lcOrder = [sectie] + lccoloane = [sectie,csectie] + lcFiltru = [1=2] + lcSchema = ['id_sectie n(10),sectie c(254),csectie c(50)'] + lcTitlu = [Alegeti sec_ia] + lcTitluColoane = [Sectie, Indicativ] + llToateIreg = .T. + loCauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lccoloane, lcTitlu, lcTitluColoane, [], llToateIreg, lcFiltruOriginal) + Return loCauta +Endproc +************************************************************************************************************ +Procedure caut_lucrare_sectie + Lparameters tnIdUtil, tnIdSectie, tnIdSucursala + Local loCauta, lcFiltru + Store "" To loCauta + If !Empty(tnIdSectie) + lcFiltruOriginal = [ and id_sectie = ] + Alltrim(Str(tnIdSectie)) + Else + If Empty(tnIdSucursala) + lcFiltruOriginal = [ and id_sectie in (select a1.id_sectie from asociere_parteneri_sectii a1 ] + ; + [left join nom_sectii a2 on a1.id_sectie = a2.id_sectie ] + ; + [where a1.id_tip = 2 and a2.sters = 0 and a1.id_part in ] + ; + [(select id_partener from vutilizatori_rol_intern where id_util = ] + Alltrim(Str(tnIdUtil)) + [))] + Else + lcFiltruOriginal = [ and id_sectie in (select a1.id_sectie from asociere_parteneri_sectii a1 ] + ; + [left join nom_sectii a2 on a1.id_sectie = a2.id_sectie ] + ; + [where a1.id_tip = 2 and a2.sters = 0 and a1.id_part in ] + ; + [(select id_partener from vutilizatori_rol_intern where id_util = ] + Alltrim(Str(tnIdUtil)) + [) ] + ; + [and a2.id_sucursala = ] + Alltrim(Str(tnIdSucursala)) + [)] + Endif + Endif + lcFiltruOriginal = [inactiv = 0] + lcFiltruOriginal + lcSelect = [select id_lucrare,nrord from ] + gcS + [.vlucrari_sectii ] + lcOrder = [nrord] + lccoloane = [nrord] + lcFiltru = [1=2] + lcSchema = ['id_lucrare n(10),nrord c(200)'] + lcTitlu = [Alegeti lucrarea] + lcTitluColoane = [Lucrare] + llToateIreg = .T. + loCauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lccoloane, lcTitlu, lcTitluColoane, [], llToateIreg, lcFiltruOriginal) + Return loCauta +Endproc +************************************************************************************************************ +Procedure caut_sucursala_sectii + Lparameters tnIdUtil + Local loCauta, lcFiltru + Store "" To loCauta + lcFiltruOriginal = [inactiv = 0 and id_sucursala in (select id_sucursala from nom_sectii where id_sectie in (] + ; + [select id_sectie from asociere_parteneri_sectii where id_tip = 2 and id_part in ] + ; + [(select id_partener from vutilizatori_rol_intern where id_util = ] + Alltrim(Str(tnIdUtil)) + [)) and sters = 0)] + lcSelect = [select id_sucursala,sucursala from ] + gcS + [.vnom_sucursale ] + lcOrder = [sucursala] + lccoloane = [sucursala] + lcFiltru = [1=2] + lcSchema = ['id_sucursala n(10),sucursala c(200)'] + lcTitlu = [Alegeti sucursala] + lcTitluColoane = [Sucursale] + llToateIreg = .T. + loCauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lccoloane, lcTitlu, lcTitluColoane, [], llToateIreg, lcFiltruOriginal) + Return loCauta +Endproc +************************************************************************************************************ +*!* 11.11.2009 +Procedure caut_tipuri_imobilizare + Local loHash, loCauta + loHash = GetHash() + With loHash + .SetValue("cSelect", [select id_tip_imobilizare, denumire from imob_tipuri_imobilizare]) + *!* .SetValue("cFiltru", "sters = 0 and inactiv = 0") + .SetValue("cOrder", "id_tip_imobilizare") + .SetValue("cColoana", "denumire, id_tip_imobilizare") + .SetValue("cTitlu", "Tipuri imobilizari") + .SetValue("cTitluColoana", "Denumire,Id") + .SetValue("cFiltruOriginal", "sters = 0 and inactiv = 0") + + .SetValue("cPrimaColoana", "denumire") + *!* .SetValue("cNumeProc", lcNumeProcedura) + .SetValue("nPornire", 6) && TOATE + + Endwith + + loCauta = cauta_alfa_hash(loHash) + Return loCauta +Endproc && caut_tipuri_imobilizare +*!* 11.11.2009 ^ +************************************************************************************************************ +Function caut_cass + Lparameters tlNou + Local loHash, loCauta + loHash = GetHash() + With loHash + .SetValue("cSelect", [select numecasa,judet,id_caseasig,indicativ from sal_vcaseasig]) + .SetValue("cOrder", "numecasa,judet") + .SetValue("cColoana", "numecasa,judet") + .SetValue("cTitlu", "Alegeti casa de sanatate") + .SetValue("cTitluColoana", "Casa asigurari,Judet") + .SetValue("cFiltruOriginal", "2=2") + If tlNou + .SetValue("cNumeProc", "sal_caseasig") + Endif + Endwith + loCauta = cauta_alfa_hash(loHash) + Return Iif(gnButon = 2, Null, loCauta) +Endfunc +************************************************************************************************************ +Function caut_salariat + Local lcSelect, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane + lcSelect = [select nume,prenume,marca,id_stat,id_salariat from sal_vnom_pers ] + lcFiltru = [1=2] + lcSchema = [] + lcOrder = [nume,prenume] + lcColoane = [nume,prenume,marca,id_stat,id_salariat] + lcTitlu = [Angaja_i] + lcTitluColoane = [Nume,Prenume,Marca] + locauta = cauta_alfa(lcselect, lcfiltru, lcschema, lcorder, lccoloane, lcTitlu, lcTitluColoane,,,,[nume,prenume,marca]) +*!* +*!* tcselect,tcfiltru,tcschema,tcorder,tccoloana,tcTitlu,tcTitluColoana, ; +*!* tcNume_Proc,tl_AllInList,tcFiltruOriginal,tcPrimaColoana, + + + Return IIF(gnbuton = 2, Null, locauta) +Endfunc +************************************************************************************************************ +Function caut_salariat_spec + Lparameters tnTip, tlToti + Local lcSelect, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane + If tlToti + lcSelect = [select distinct id_part,nume,prenume,codpers from spec_vvenituri_tot] + Else + lcSelect = [select id_venit,codpers,nume,prenume,judet,sector,localitate,] + ; + [strada,numar,bloc,scara,etaj,apart,codpostal,id_colaborator,id_part from spec_vvenituri] + Endif + lcFiltru = [1=2] + lcSchema = [] + lcOrder = [nume,prenume] + lcColoane = [nume,prenume,codpers] + lcTitluColoane = [Nume,Prenume,CNP] + If tnTip = 0 + lcTitlu = [Alegeti persoana] + locauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane) + Return Iif(gnbuton = 2, Null, locauta) + Else + lcTitlu = [Alegeti persoanele (mouse-click pe nume sau apasati SPACE)] + lnTipReturn = 1 && XML + lcPrimaColoana = "nume" + lcIdColumn = "id_venit" + lnPornire = 1 + lcXMLParteneri = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane, [], .F., [2=2], lcPrimaColoana, lnPornire, lnTipReturn, lcIdColumn) + Return lcXMLParteneri + Endif +Endfunc +************************************************************************************************************ +FUNCTION caut_tip_cm + Local lcSelect, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane, lcFiltruOriginal + lcSelect = [select * from ] + gcS + [.sal_vnom_cm] + lcFiltru = [2=2] + lcSchema = [] + lcOrder = [ordine,cod_cm,conc_med] + lcColoane = [cod_cm,conc_med] + lcTitlu = [Cod CM,Concediu] + lcTitluColoane = [Cod CM,Concediu] + lcFiltruOriginal = [sters = 0 ] + locauta = cauta_alfa(lcselect, lcfiltru, lcschema, lcorder, lccoloane, lcTitlu, lcTitluColoane, [], .F., lcFiltruOriginal )&&30iul2007 + Return IIF(gnbuton = 2, Null, locauta) +Endfunc +************************************************************************************************************ +FUNCTION caut_loc_prescriere + Local lcSelect, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane, lcFiltruOriginal + lcSelect = [select * from sal_loc_prescriere] + lcFiltru = [2=2] + lcSchema = [] + lcOrder = [cod_pres] + lcColoane = [locPrescriere] + lcTitlu = [Loc Prescriere] + lcTitluColoane = [Loc Prescriere] + lcFiltruOriginal = [sters = 0 ] + locauta = cauta_alfa(lcselect, lcfiltru, lcschema, lcorder, lccoloane, lcTitlu, lcTitluColoane, [], .F., lcFiltruOriginal )&&30iul2007 + Return IIF(gnbuton = 2, Null, locauta) +endfunc +************************************************************************************************************ +FUNCTION caut_tip_spor + Local lcSelect, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane, lcFiltruOriginal + lcSelect = [select id_tip_spor,nume_tip_spor,cod_categorie from syn_sal_nom_tip_spor] + lcFiltru = [2=2] + lcSchema = [] + lcOrder = [cod_categorie desc,id_tip_spor] + lcColoane = [nume_tip_spor] + lcTitlu = [Tip sporuri] + lcTitluColoane = [Tip spor] + lcFiltruOriginal = [NVL(data_inactiv,to_date('20991231','YYYYMMDD')) > to_date('] + ALLTRIM(STR(gnAn)) + ALLTRIM(STR(gnLuna)) + [','YYYYMM')] + locauta = cauta_alfa(lcselect, lcfiltru, lcschema, lcorder, lccoloane, lcTitlu, lcTitluColoane, [], .F., lcFiltruOriginal )&&30iul2007 + Return IIF(gnbuton = 2, Null, locauta) +endfunc +*********************************************************************************************************** +Function caut_tara + Lparameters tnIdCetatenie + Local lcSelect, lcFiltruInitial, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane + lcSelect = [select * from syn_nom_tari] + lcFiltruInitial = [sters = 0] + If !Empty(tnIdCetatenie) + lcFiltruInitial = lcFiltruInitial + [ and id_cetatenie = ] + Alltrim(Str(tnIdCetatenie)) + Endif + lcFiltru = [2=2] + lcSchema = [] + lcOrder = [tara] + lcColoane = [tara,prescurtare] + lcTitlu = [Na_ionalitate] + lcTitluColoane = [Tara,Abreviere] + loCauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane, , , lcFiltruInitial) + Return Iif(gnButon = 2, Null, loCauta) +Endfunc +*********************************************************************************************************** +Function caut_judet + Local lcSelect, lcFiltruInitial, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane + lcSelect = [select * from syn_vnom_judete] + lcFiltruInitial = [inactiv=0] + lcFiltru = [2=2] + lcSchema = [] + lcOrder = [judet,indicativ] + lcColoane = [judet,indicativ] + lcTitlu = [Jude_] + lcTitluColoane = [Judet,Indicativ] + loCauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane, , , lcFiltruInitial) + Return Iif(gnButon = 2, Null, loCauta) +Endfunc +*********************************************************************************************************** +Function caut_localitate + Lparameters tnIdJudet, tnIdTara + Local lcSelect, lcFiltruInitial, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane + lcSelect = [select * from syn_vnom_localitati] + lcFiltruInitial = Iif(!Empty(Nvl(tnIdJudet, 0)), [id_judet = ] + Alltrim(Str(tnIdJudet)), IIF(!EMPTY(NVL(tnIdTara, 0)), [id_tara = ] + ALLTRIM(STR(tnIdTara)), [2=2])) + lcFiltru = [inactiv=0] + lcSchema = [] + lcOrder = [localitate] + lcColoane = [localitate,siruta,judet,tara] + lcTitlu = [Localita_i] + lcTitluColoane = [Localitate,Siruta,Judet,Tara] + loCauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane, [nom_localitati], , lcFiltruInitial) + Return Iif(gnButon = 2, Null, loCauta) +Endfunc +*********************************************************************************************************** +Function caut_tipautorizatie + Local lcSelect, lcFiltruInitial, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane + lcSelect = [select id_tipautorizatie,denumire from syn_sal_nom_tipautorizatie] + lcFiltruInitial = [sters=0 and inactiv = 0] + lcFiltru = [2=2] + lcSchema = [id_tipautorizatie n(10),denumire c(250)] + lcOrder = [denumire] + lcColoane = [denumire] + lcTitlu = [Tipuri de autoriza_ie] + lcTitluColoane = [Tip autorizatie] + loCauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane, , , lcFiltruInitial) + Return Iif(gnButon = 2, Null, loCauta) +Endfunc +*********************************************************************************************************** +Function caut_cetatenie + Local lcSelect, lcFiltruInitial, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane + lcSelect = [select * from syn_nom_cetatenii] + lcFiltruInitial = [sters=0] + lcFiltru = [2=2] + lcSchema = [] + lcOrder = [denumire] + lcColoane = [denumire] + lcTitlu = [Ceta_enie] + lcTitluColoane = [Cetatenie] + loCauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane, , , lcFiltruInitial) + Return Iif(gnButon = 2, Null, loCauta) +Endfunc +*********************************************************************************************************** +Function caut_tipact + Local lcSelect, lcFiltruInitial, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane + lcSelect = [select * from ] + gcS + [.sal_nom_tip_acte] + lcFiltruInitial = [sters=0] + lcFiltru = [2=2] + lcSchema = [] + lcOrder = [denumire] + lcColoane = [denumire] + lcTitlu = [Tip act identitate] + lcTitluColoane = [Act] + loCauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane, , , lcFiltruInitial) + Return Iif(gnButon = 2, Null, loCauta) +Endfunc +*********************************************************************************************************** +Function caut_tipcontract + Local lcSelect, lcFiltruInitial, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane + lcSelect = [select * from ] + gcS + [.sal_vnom_tipctr] + lcFiltruInitial = [sters=0] + lcFiltru = [2=2] + lcSchema = [] + lcOrder = [tip_contract] + lcColoane = [tip_contract] + lcTitlu = [Tip Contract] + lcTitluColoane = [Tip Contract] + loCauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane, , , lcFiltruInitial) + Return Iif(gnButon = 2, Null, loCauta) +Endfunc +*********************************************************************************************************** +Function caut_meserie + LPARAMETERS tnTip + *!* 1 = meseria ; 2 = profesia + Local lcSelect, lcFiltruInitial, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane + lcSelect = [select * from ] + gcS + [.sal_nom_mes] + lcFiltruInitial = [sters=0 and inactiv = 0] + lcFiltru = [2=2] + lcSchema = [] + lcOrder = [meserie] + If tnTip = 1 + lcColoane = [meserie,cod_meserie] + lcTitlu = [Meserii] + lcTitluColoane = [Meserie,Cod] + Else + lcColoane = [meserie] + lcTitlu = [Profesii] + lcTitluColoane = [Profesie] + Endif + loCauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane, 'sal_nom_mes', , lcFiltruInitial,[meserie,cod_meserie]) + Return Iif(gnButon = 2, Null, loCauta) +Endfunc +*********************************************************************************************************** +FUNCTION caut_grupamunca + Local lcSelect, lcFiltruInitial, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane + lcSelect = [select * from ] + gcS + [.sal_coef_cas] + lcFiltruInitial = [sters=0] + lcFiltru = [2=2] + lcSchema = [] + lcOrder = [dengrupa] + lcColoane = [dengrupa] + lcTitlu = [Grupa de munca] + lcTitluColoane = [Denumire] + loCauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane, , , lcFiltruInitial) + Return Iif(gnButon = 2, Null, loCauta) +ENDFUNC +*********************************************************************************************************** +Function caut_clasasal + Local lcSelect, lcFiltruInitial, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane + lcSelect = [select * from ] + gcS + [.sal_vnom_clasesal] + lcFiltruInitial = [sters=0] + lcFiltru = [2=2] + lcSchema = [] + lcOrder = [cod] + lcColoane = [cod,tarifar] + lcTitlu = [Clase salarizare] + lcTitluColoane = [Cod,Tarifar] + loCauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane, , , lcFiltruInitial) + Return Iif(gnButon = 2, Null, loCauta) +Endfunc +*********************************************************************************************************** +Function caut_bancasal + Lparameters tlNou + Local lcSelect, lcFiltruInitial, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane, lcNumeProc + lcSelect = [select id_banca,denumire from ] + gcS + [.sal_nom_banci] + lcFiltruInitial = [sters=0] + lcFiltru = [2=2] + lcSchema = [] + lcOrder = [denumire] + lcColoane = [denumire] + lcTitlu = [Banca] + lcTitluColoane = [Banca] + If tlNou + lcNumeProc = [sal_nom_banci] + Else + lcNumeProc = [] + Endif + loCauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane, lcNumeProc, , lcFiltruInitial) + Return Iif(gnButon = 2, Null, loCauta) +Endfunc +*********************************************************************************************************** +Function caut_contract_activ + Lparameters tnIdTipCtr, tnIdPart, tdActivLaData + *!* 0 - toate + *!* -1 - clienti + *!* -2 - furnizori + Local lcSelect, lcFiltruInitial, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane, lcNumeProc, lcPrimaColoana + Store "" To loCauta + lcSelect = [select id_ctr,id_part,denumire,data,numar,data_inceput,data_sfarsit,id_responsabil,observatii,] + ; + [responsabil,contract,descriere from ] + gcS + [.vcontracte ] + lcFiltru = [1=2] + lcSchema = [''] + lcOrder = [data,numar] + lcColoane = [numar,data,denumire,data_inceput,data_sfarsit,responsabil] + lcTitlu = [Alegeti contractul] + lcTitluColoane = [Numar,Data,Denumire,Data inceput,Data sfarsit,Responsabil] + lcFiltruInitial = [] + If !Empty(tnIdPart) + lcFiltruInitial = [ and id_part = ] + Alltrim(Str(tnIdPart)) + Endif + If !Empty(tdActivLaData) + lcFiltruInitial = lcFiltruInitial + [ and NVL(data_sfarsit,to_date('] + DTOC(tdActivLaData, 1) + [','YYYYMMDD')) >= to_date('] + DTOC(tdActivLaData, 1) + [','YYYYMMDD')] + Else + lcFiltruInitial = lcFiltruInitial + [ and data_sfarsit is null] + Endif + lcFiltruInitial = [incetat = 0] + gcCondSucursala + lcFiltruInitial + lcNumeProc = [contracte] + lcPrimaColoana = [numar,denumire] + loCauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane, lcNumeProc, , lcFiltruInitial, lcPrimaColoana) + + Return Iif(gnButon = 2, Null, loCauta) +Endfunc +*********************************************************************************************************** +FUNCTION caut_sporuri + Local lcSelect, lcFiltruInitial, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane + lcSelect = [select * from ] + gcS + [.sal_vnom_sporuri] + lcFiltruInitial = [sters=0 and inactiv = 0] + lcFiltru = [2=2] + lcSchema = [] + lcOrder = [nume_spor] + lcColoane = [nume_spor,nume_tip_spor] + lcTitlu = [Sporuri] + lcTitluColoane = [Nume spor,Tip spor] + loCauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane, , , lcFiltruInitial) + Return Iif(gnButon = 2, Null, loCauta) +ENDFUNC +*********************************************************************************************************** +Function caut_formatii_xml + Lparameters tlToateIreg, tlNou + Local loCauta, lcFiltruOriginal + Local lcTitlu, lcFiltru, lcSchema, lcOrder, lcNumeProc, lcTitluColoane + Store "" To loCauta + lcSelect = [select * from sal_vnom_formatii] + lcFiltru = [1=1] + lcSchema = [] + lcOrder = [denumire] + lccoloane = [denumire,sectie,semnatura,directie,transa,id_formatia] + lcFiltruOriginal = [inactiv = 0] + lcTitlu = [Alegeti forma_ia (mouse-click pe nume sau apasati SPACE)] + If tlNou + lcNumeProc = [sal_nom_formatii] + Else + lcNumeProc = [] + Endif + lcTitluColoane = [Formatia,Sectie,Semnatura,Directie,Transa,Id_formatia] + lnTipReturn = 1 && XML + lcPrimaColoana = "denumire" + lcIdColumn = "id_formatia" + lnPornire = 1 + lcXMLFormatii = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lccoloane, lcTitlu, lcTitluColoane, lcNumeProc, tlToateIreg, lcFiltruOriginal, lcPrimaColoana, lnPornire, lnTipReturn, lcIdColumn) + Return lcXMLFormatii +Endfunc && caut_formatii_xml +*********************************************************************************************************** +Procedure caut_transa + Lparameters tlToateIreg, tlNou + Local lcSelect, lcFiltruInitial, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane, lcNumeProc + lcSelect = [select * from sal_vnom_transe] + lcFiltruInitial = [inactiv = 0] + lcFiltru = [1=1] + lcSchema = [] + lcOrder = [transa] + lcColoane = [transa] + lcTitlu = [Alegeti trana] + If tlNou + lcNumeProc = [sal_nom_transe] + Else + lcNumeProc = [] + Endif + lcTitluColoane = [Transa] + loCauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane, lcNumeProc, tlToateIreg, lcFiltruInitial) && 11.07.2007 + Return Iif(gnButon = 2, Null, loCauta) +Endproc && caut_transa +*********************************************************************************************************** +Procedure caut_partener_adresa + Local lcSelect, lcFiltruInitial, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane, lcNumeProc, llToateIreg + lcSelect = [select id_part, nume, prenume, cod_fiscal, reg_comert, eliberatde, dataeliberat, judet, id_judet,] + ; + [ localitate, id_loc, strada, numar, bloc, scara, etaj, apart, cont_banca, banca from vnom_parteneri] + lcFiltruInitial = [inactiv = 0 and tip_persoana = 2] + lcFiltru = [1=1] + lcSchema = [] + lcOrder = [nume,prenume,cod_fiscal] + lcColoane = [nume,prenume,cod_fiscal] + lcTitlu = [Alegeti persoana] + lcNumeProc = [] + lcTitluColoane = [Nume,Prenume,CNP] + llToateIreg = .F. + loCauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane, lcNumeProc, llToateIreg, lcFiltruInitial) + Return Iif(gnButon = 2, Null, loCauta) +endproc +*********************************************************************************************************** +Procedure cauta_facturaTVAEx + Local lcSelect, lcFiltruInitial, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane, lcNumeProc + lcCursor = [crsfacturiTvaEx] + lcSql = [{call pack_contab.cauta_facturaTVAEx(?gnLuna,?gnAn)}] + if goExecutor.oExecuta(lcSql, lcCursor) + lcSelect = [select id_part,denumire,cod_fiscal,serie_act,nract,dataact,id_fact,tip from ] + lcCursor + lcFiltru = [1=2] + lcSchema = [id_part n(10),denumire c(100),cod_fiscal c(20),serie_act c(20),nract N(20),dataact d,id_fact n(20),tip c(30)] + lcOrder = [denumire] + lccoloane = [denumire,cod_fiscal,serie_act,nract,dataact,tip] + lcTitlu = [Alegeti factura] + lcTitluColoane = [Denumire,Cod fiscal,Serie,Nr.act,Data act,Tip] + lcFiltruOriginal = [] + lcNumeProc = [] + llToateIreg = .F. + loCauta = cauta_alfa_vfp(lcSelect, lcFiltru, lcSchema, lcOrder, lccoloane, lcTitlu, lcTitluColoane, lcNumeProc, llToateIreg, lcFiltruOriginal) + Use In (lcCursor) + else + gnButon = 2 + Endif + Return Iif(gnButon = 2, Null, loCauta) +endproc +*********************************************************************************************************** +Function cauta_tehnician_deviz + Lparameters tlInactivi + Local lcSelect, lcFiltruInitial, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane, lcNumeProc, llToateIreg + lcSelect = [select id_mecanic,denumire as nume,sectie from devize_vtehnicieni] + lcFiltruInitial = Iif(!Empty(tlInactivi), [2=2], [inactiv = 0]) + lcFiltru = [1=1] + lcSchema = [] + lcOrder = [decode(id_mecanic,1,0,1),denumire] + lcColoane = [nume,sectie] + lcTitlu = [Alegeti tehnicianul] + lcNumeProc = [] + lcTitluColoane = [Nume,Sectie] + llToateIreg = .F. + loCauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane, lcNumeProc, llToateIreg, lcFiltruInitial) + Return Iif(gnButon = 2, Null, loCauta) +Endfunc +*********************************************************************************************************** + + +******************************************* INCEPUT: caut_adresa ******************************************* +Function caut_adresa + Lparameters tnIdPartener + Local lcColoane, lcFiltru, lcFiltruInitial, lcNumeProc, lcOrder, lcSchema, lcSelect, lcTitlu + Local lcTitluColoane, llToateIreg, loCauta + loCauta = NULL + PRIVATE pnIdPartener + pnIdPartener = tnIdPartener + + + lcSelect = [select id_adresa, id_part, denumire_adresa, adresa, principala from vadrese_parteneri] + lcFiltruInitial = [id_part = ?pnIdPartener] + lcFiltru = [2=2] + lcSchema = [id_adresa n(20), id_part n(20), denumire_adresa c(100), adresa c(250), principala n(1)] + lcOrder = [principala desc, denumire_adresa] + lcColoane = [adresa, denumire_adresa, principala] + lcTitlu = [Alegeti adresa] + lcNumeProc = [] + lcTitluColoane = [Adresa,Denumire,Principala] + llToateIreg = .F. + loCauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane, lcNumeProc, llToateIreg, lcFiltruInitial) + Return Iif(gnButon = 2, Null, loCauta) + +Endfunc && caut_adresa +******************************************* SFARSIT: caut_adresa ******************************************* +* PROCEDURE caut_formatie_sal_salspec +* Date : 06.04.2016 +* author : liana.neagu +******************************************* INCEPUT: caut_formatie_sal_salspec ******************************************* +Procedure caut_formatie_sal_salspec + Lparameters tlToateIreg, tlNou, tlTranse + Local lcSelect, lcFiltruInitial, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane, lcNumeProc, tlToateIreg + lcSelect = [select id_formatia,id_sectie,id_transa,denumire,sectie,transa,inactiv,1 as dinSalarii from sal_vnom_formatii ]+; + [ union ]+; + [ select id_formatia,id_sectie,0 as id_transa,formatia as denumire, sectie,'' as transa,inactiv, 0 as dinSalarii from spec_vnom_formatii] + lcFiltruInitial = [inactiv = 0] + lcFiltru = [1=1] + lcSchema = [] + lcOrder = [denumire] + lcColoane = [denumire,sectie] + IIF(tlTranse, [,transa], []) + lcTitlu = [Alegeti forma_ia] + If tlNou + lcNumeProc = [sal_nom_formatii] && [nom_formatie] + Else + lcNumeProc = [] + Endif + lcTitluColoane = [Formatie,Sectia] + IIF(tlTranse, [,Transa], []) + loCauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane, lcNumeProc, tlToateIreg, lcFiltruInitial) && 11.07.2007 + Return Iif(gnButon = 2, Null, loCauta) +Endproc && caut_formatie +***************************************** SFARSIT: caut_formatie ******************************************* +Function caut_apatrid + Local lcSelect, lcFiltruInitial, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane + lcSelect = [select * from syn_nom_tipapatrid] + lcFiltruInitial = [sters=0] + lcFiltru = [2=2] + lcSchema = [] + lcOrder = [id_tipapatrid] + lcColoane = [denumire] + lcTitlu = [Apatrid] + lcTitluColoane = [Apatrid] + loCauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane, , , lcFiltruInitial) + Return Iif(gnButon = 2, Null, loCauta) +ENDFUNC +*********************************************************************************************************** +FUNCTION caut_scutireimpozit + Local lcSelect, lcFiltruInitial, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane + lcSelect = [select * from ] + gcS + [.SAL_NOM_SCUTIRIIMP] + lcFiltruInitial = [sters=0] + lcFiltru = [2=2] + lcSchema = [] + lcOrder = [tip_scutire] + lcColoane = [scutireimpozit] + lcTitlu = [Impozitare] + lcTitluColoane = [Denumire] + loCauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane, , , lcFiltruInitial) + Return Iif(gnButon = 2, Null, loCauta) +ENDFUNC + +*********************************************************************************************************** +Function caut_client_contract_activ + Lparameters tcCond, tnIdPart, tnIdCtr + *** tnIdCtr: daca dau id_ctr direct (facturile de penalitati) selectez numai acest contractul indiferent de iscontract_valid() + + Local lcSelect, lcFiltruInitial, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane, lcNumeProc, lcPrimaColoana + Local lcFiltruContract, lcFiltruPartener, lcFiltruContractActiv, lcFiltruConditie, lcAnLuna, lcSql, lcFiltruTipPart + PRIVATE pnIdTip, pcSir_Id_tip_part + pnIdTip = -1 && CLIENTI + pcSir_Id_tip_part = '' + + loCauta = NULL + lcFiltruContract = '' + lcFiltruPartener = '' + lcFiltruContractActiv = '' + lcFiltruConditie = '' + lcFiltruTipPart = '' + + If Type('tnIdCtr') = 'N' And !Empty(m.tnIdCtr) + lcFiltruContract = [ and (c.id_ctr = ] + Alltrim(Str(m.tnIdCtr)) + [)] + ENDIF + If Type('tnIdPart') = 'N' And !Empty(m.tnIdPart) + lcFiltruPartener = [ and p.id_part = ] + Alltrim(Str(m.tnIdPart)) + Endif + + lcSql = [begin pack_def.get_conturi_tip_part(?pnIdTip, ?@pcSir_Id_tip_part); end;] + llSucces = goExecutor.oExecuta(m.lcSql) + + If llSucces AND !Empty(NVL(m.pcSir_Id_tip_part,'')) + lcFiltruTipPart = [ and p.id_part in (select distinct id_part from coresp_tip_part where id_tip_part in (] + m.pcSir_Id_tip_part + [))] + ENDIF + + lcAnLuna = Alltrim(Str(m.gnAn)) + Padl(m.gnLuna, 2, '0') + lcFiltruContractActiv = [ and ] + Alltrim(Str(m.gnAn * 12 + m.gnLuna)) + [ between extract(year from data_inceput) * 12 + extract(month from data_inceput) and ] + ; + [extract(year from nvl(data_sfarsit, to_date('] + m.lcAnLuna + [', 'yyyymm'))) * 12 + extract(month from nvl(data_sfarsit, to_date('] + m.lcAnLuna + [', 'yyyymm')))] + + lcFiltruConditie = Iif(!Empty(m.tcCond), [ and (] + m.tcCond + [)], []) + + TEXT TO lcSelect TEXTMERGE NOSHOW +select id_ctr, id_part, denumire, cod_fiscal, data, numar, data_inceput, data_sfarsit, nr_zile_scadenta, tip_curs from +(select CAST (null as Number(10)) as id_ctr, id_part, denumire, cod_fiscal, CAST(null as date) as data, CAST(null as Varchar2(100)) as numar, CAST(null as date) as data_inceput, CAST(null as date) as data_sfarsit, CAST(null as number(5)) as nr_zile_scadenta, CAST(null as number(1)) as tip_curs from nom_parteneri p + WHERE STERS = 0 AND INACTIV = 0 <> <> +union +select c.id_ctr, c.id_part, p.denumire, p.cod_fiscal, c.data, c.numar, c.data_inceput, c.data_sfarsit, c.scadenta_incasare as nr_zile_scadenta, c.tip_curs from contracte c JOIN nom_parteneri p ON c.id_part = p.id_part + where c.sters = 0 and c.inactiv = 0 and p.sters = 0 and p.inactiv = 0 <> <> <> <> <> <>) + ENDTEXT + + lcFiltru = [1=2] + lcSchema = [id_ctr I, id_part I, denumire C(100), cod_fiscal C(50), data D, numar C(100), data_inceput D,data_sfarsit D, nr_zile_scadenta N(10), tip_curs N(10)] + lcOrder = [denumire, data_inceput] + lcColoane = [denumire,cod_fiscal,numar,data,data_inceput,data_sfarsit, id_part, id_ctr] + lcTitlu = [Alegeti contractul] + lcTitluColoane = [Denumire,Cod fiscal,Contract,Data,Data inceput,Data sfarsit,IdPart,IdCtr] + lcFiltruInitial = [] + + lcNumeProc = [] + lcPrimaColoana = [denumire,numar] + + loCauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane, lcNumeProc, , lcFiltruInitial, lcPrimaColoana) + + Return loCauta +ENDFUNC +*********************************************************************************************************** +Function caut_meserii_xml + Lparameters tlToateIreg, tlNou + Local loCauta, lcFiltruOriginal + Local lcTitlu, lcFiltru, lcSchema, lcOrder, lcNumeProc, lcTitluColoane + Store "" To loCauta + lcSelect = [select meserie,cod_meserie,id_meseria from sal_vnom_mes] + lcFiltru = [1=1] + lcSchema = [] + lcOrder = [meserie] + lccoloane = [meserie,cod_meserie,id_meseria] + lcFiltruOriginal = [inactiv = 0] + lcTitlu = [Alegeti meseriile (mouse-click pe nume sau apasati SPACE)] + If tlNou + lcNumeProc = [nom_meserii] + Else + lcNumeProc = [] + Endif + lcTitluColoane = [Meserie,Cod_meserie,Id_meseria] + lnTipReturn = 1 && XML + lcPrimaColoana = "meserie" + lcIdColumn = "id_meseria" + lnPornire = 1 + lcXMLFormatii = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lccoloane, lcTitlu, lcTitluColoane, lcNumeProc, tlToateIreg, lcFiltruOriginal, lcPrimaColoana, lnPornire, lnTipReturn, lcIdColumn) + Return lcXMLFormatii +Endfunc && caut_formatii_xml +*********************************************************************************************************** +******************************************* INCEPUT: caut_formatie ******************************************* +Procedure caut_locmunca + Lparameters tlToateIreg, tlNou, tlTranse,tcLocate + Local lcSelect, lcFiltruInitial, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane, lcNumeProc, tlToateIreg,lcLocate + lcSelect = [select * from sal_vnom_locmunca ] + lcFiltruInitial = [inactiv = 0 and sters = 0] + lcFiltru = [1=1] + lcSchema = [] + lcOrder = [denumire] + lcColoane = [denumire,sectie] + IIF(tlTranse, [,transa], []) + lcTitlu = [Alegeti locul de munca] + If tlNou + lcNumeProc = [sal_nom_locmunca] && [nom_formatie] + Else + lcNumeProc = [] + ENDIF + IF EMPTY(tcLocate) + lcLocate = [] + ELSE + lcLocate = tcLocate + ENDIF + lcTitluColoane = [Loc munca,Sectia] + IIF(tlTranse, [,Activitate], []) +*!* loCauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane, lcNumeProc, tlToateIreg, lcFiltruInitial) && 11.07.2007 + + loCauta = cauta_alfa(lcSelect,lcFiltru,lcSchema,lcOrder,lcColoane,lcTitlu,lcTitluColoane,lcNumeProc,tlToateIreg,lcFiltruInitial,,,,,,,,,,,,,lcLocate) && 19 mai 2021 +*!* loCauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane, 'sal_nom_mes', , lcFiltruInitial,[meserie,cod_meserie]) + + Return Iif(gnButon = 2, Null, loCauta) +Endproc && caut_formatie +***************************************** SFARSIT: caut_formatie ******************************************* + +*********************************************************************************************************** +Function caut_locmunca_xml + Lparameters tlToateIreg, tlNou + Local loCauta, lcFiltruOriginal + Local lcTitlu, lcFiltru, lcSchema, lcOrder, lcNumeProc, lcTitluColoane + Store "" To loCauta + lcSelect = [select * from sal_vnom_locmunca ] + lcFiltru = [1=1] + lcSchema = [] + lcOrder = [denumire] + lccoloane = [denumire,sectie,semnatura,directie,transa,id_locmunca] + lcFiltruOriginal = [inactiv = 0] + lcTitlu = [Alegeti forma_ia (mouse-click pe nume sau apasati SPACE)] + If tlNou + lcNumeProc = [sal_nom_formatii] + Else + lcNumeProc = [] + Endif + lcTitluColoane = [Loc Munca,Sectie,Semnatura,Directie,Activitate,Id_locmunca] + lnTipReturn = 1 && XML + lcPrimaColoana = "denumire" + lcIdColumn = "id_locmunca" + lnPornire = 1 + lcXMLFormatii = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lccoloane, lcTitlu, lcTitluColoane, lcNumeProc, tlToateIreg, lcFiltruOriginal, lcPrimaColoana, lnPornire, lnTipReturn, lcIdColumn) + Return lcXMLFormatii +Endfunc && caut_formatii_xml +*------------------------------------- +Function caut_tipsal + Local lcSelect, lcFiltruInitial, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane + lcSelect = [select id_tippontaj,(case when nume_tip = 'Z' and id_tippontaj = -100 then 'L' else 'O' end) as nume_tip, inactiv,sters from ] + gcS + [.sal_vnom_pont] + lcFiltruInitial = [sters=0] + lcFiltru = [2=2] + lcSchema = [] + lcOrder = [nume_tip] + lcColoane = [nume_tip] + lcTitlu = [Tip Salariu] + lcTitluColoane = [Tip Salariu] + loCauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane, , , lcFiltruInitial) + Return Iif(gnButon = 2, Null, loCauta) +ENDFUNC + +*------------------------------------------------------------ +* caut imobilizare si intorc obiect din imob_vsituatie_lunara +*------------------------------------------------------------ +Function caut_imobilizare + Lparameters tnTip + * tnTip: 1 = corporale, 2 = necorporale, 3 = in curs + + PRIVATE pdDataI + Local lcColoana, lcFiltru, lcFiltruOriginal, lcGroup, lcIdColumn, lcNume_Proc, lcOrder + Local lcPrimaColoana, lcSchema, lcSelect, lcTitlu, lcTitluColoana, llAfisare, llAllInList + Local llModParam, llSucces, lnPornire, lnTipReturn, loRec + + pdDataI = Date(gnAn, gnLuna, 1) + llSucces = goExecutor.oExecuta('begin pack_imob.setlunacurenta(?pdDataI); end;') + + lcSelect = [SELECT * FROM imob_vsituatie_lunara] + lcFiltru = [1=2] + lcSchema = [] + lcOrder = [nr_inventar, denumire,data_pif] + llAfisare = .F. + lcGroup = [] + llModParam = .T. + lcFiltruOriginal = [id_tip_imobilizare = ] + Alltrim(Str(m.tnTip)) + [ AND IESIT_DIN_GEST = 0 ] + m.gcCondSucursala + + lcColoana = "nr_inventar, denumire, data_pif" + lcTitluColoana = "Numar inventar, Denumire, Data PIF" + llAllInList = .F. + lnPornire = 1 && INCEPE CU + lcPrimaColoana = "nr_inventar" + lcNume_Proc = "" + lcTitlu = "Alegeti imobilizarea" + lnTipReturn = 0 && object + lcIdColumn = "id_mf" + loRec = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lcCOloana, lcTitlu, lcTitluColoana, lcNume_Proc, llAllInList, lcFiltruOriginal, lcPrimaColoana, lnPornire, lnTipReturn, lcIdColumn) + + Return loRec +Endfunc && caut_imobilizare +******************************************* SFARSIT: caut_imobilizare ******************************************* + +FUNCTION GetImobilizareById + Lparameters tnTip, tnIdMf, tlBlank, tcAlias + * tnTip: 1 = corporale, 2 = necorporale, 3 = in curs + * tnIdMf: imob_nom_mf.id_mf. Daca tlBlank = .T., nu este nevoie de tnIdMf + * tlBlank: .T. = intoarce un obiect cu inregistrare goala tip imobilizare + * tcAlias: completat = lasa deschis cursorul tcAlias cu imobilizarile, altfel il inchide + + PRIVATE pnIdMf, pdDataI + Local lcSql, llSucces, loImob, lcAlias + + loImob = NULL + lcAlias = IIF(!EMPTY(m.tcAlias), m.tcAlias, SYS(2015)) + pnIdMf = m.tnIdMf + + pdDataI = Date(gnAn, gnLuna, 1) + llSucces = goExecutor.oExecuta('begin pack_imob.setlunacurenta(?pdDataI); end;') + IF m.llSucces + IF m.tnTip = 3 && in curs + lcSql = [SELECT * FROM imob_vlista_curs where ] + IIF(m.tlBlank, [1=2], [id_mf=?pnIdMf]) + ELSE + lcSql = [SELECT * FROM imob_vsituatie_lunara where ] + IIF(m.tlBlank, [1=2], [id_mf=?pnIdMf]) + ENDIF + llSucces = goExecutor.oExecuta(m.lcSql, m.lcAlias) + IF m.llSucces + SELECT (m.lcAlias) + GO TOP + SCATTER NAME loImob MEMO + ENDIF + + IF EMPTY(m.tcAlias) + USE IN (SELECT(m.lcAlias)) + ENDIF + + ENDIF + + Return loImob +Endfunc && GetImobilizareById \ No newline at end of file diff --git a/COMUN/programe/ocompensari.prg b/COMUN/programe/ocompensari.prg new file mode 100644 index 0000000..c408482 --- /dev/null +++ b/COMUN/programe/ocompensari.prg @@ -0,0 +1,603 @@ +*!* 27.09.2011 +*!* marius.mutu +*!* create cursor calculcompens in loc de create table +*!* #3146 Steaua Nordului + +*!* 31.01.2013 +*!* marius.mutu +*!* calculcompens - tratare facturi cu tva_incasare: calculcompens.tva_incasare_a, id_fact (ex: plata 401 = 542) + +*!* 19.04.2013 +*!* marius.mutu +*!* calculcompens - tva incasare pentru ambele facturi din compensare. ex: 401 = 4111 + +*** proceduri introducere in actactan, nu merge pentru sume negative !!!! + +*!* 25.12.2025 +*!* calculcompens - tratare compensare 5121 = 419 cu cote TVA diferite (proc_tva, id_jtvacol) + + +*!* 07.01.206 +*!* calculcompens_part - tratare compensare 419 lei 5121 = 419 cu cote TVA diferite (proc_tva, id_jtvacol) + +******************************************* INCEPUT: calculcompens ******************************************* +*** + +PROCEDURE calculcompens + PARAMETERS tcFisD, tcFisC, tnTipOrdonare, tnTipOprire + *!* modificare v 2.5.27 : tnTipOrdonare, tnTipOprire + *!* tnTipOrdonare - 0/implicit = ordonare descrescator dupa suma + *!* 1 = ordonare dupa data + *!* tnTipOprire - 0/implicit = cand sum(sumaachi) pentru ambele tabele este 0 ( initial, sum(sumaachi) dintr-un tabel este egala cu sum(sumaachi) din celalalt ) + *!* 1 = cand sum(sumaachi) pentru unul dintre tabele este 0 + + PRIVATE pcCont + STORE '' TO pcCont + + LOCAL max1, max2, nract1, nract2, lcFis1, lcFis2, id_fact1, id_fact2, llDefalcTVA, lnMaxTvai, lcOrdine + STORE 1 TO max1, max2 + STORE 0 TO nract1, nract2, id_fact1, id_fact2 + lnMaxTvai = 0 + + lcFisD = ALLTRIM(tcFisD) + lcFisC = ALLTRIM(tcFisC) + +*!* modificare v 2.5.26 +*!* modificare v 2.5.27 : am adaugat lcOrdine +*!* SELECT * FROM &lcFisD INTO CURSOR tperecheD READWRITE +*!* SELECT * FROM &lcFisC INTO CURSOR tperecheC READWRITE + lcOrdine = IIF(EVL(tnTipOrdonare,0)=1,[dataact,nract],[sumaachi desc]) + SELECT * FROM &lcFisD WHERE ales AND sumaachi <> 0 ORDER BY &lcOrdine INTO CURSOR tperecheD READWRITE + SELECT * FROM &lcFisC WHERE ales AND sumaachi <> 0 ORDER BY &lcOrdine INTO CURSOR tperecheC READWRITE +*!* modificare v 2.5.26 ^ + + *** Aflu daca exista bifa TVA_INCASARE_A intr-unul din fisiere (ex: 401 = 542) + *** pentru a putea pune in cursorul rezultat id_fact din fisierul corespunzator + *** in cazul compensarilor 401 = 4111, pot fi amandoua facturile cu TVA incasare + + llTvaIncasareD = .F. + llTvaIncasareC = .F. + select tPerecheD + locate for nvl(tva_incasare_a,0) = 1 + if found() + llTvaIncasareD = .T. + endif + + select tPerecheC + locate for nvl(tva_incasare_a,0) = 1 + if found() + llTvaIncasareC = .T. + endif + + llTVAIncasare = m.llTvaIncasareD or m.llTvaIncasareC + + CREATE cursor calculcompensare (nr_doc_d N(14), nr_doc_c N(14), id_factd N(14), id_factc N(14),; + ascc c(4), ascd c(4), sumaachi N(20,4), ales l, proc_tva N(5,2), id_jtvacol N(10), proc_tvaD N(5,2), id_jtvacolD N(10), proc_tvaC N(5,2), id_jtvacolC N(10), ; + tva_incasare_a N(1), tva_incasare_d N(1), tva_incasare_dtip C(1),tva_incasare_c N(1), tva_incasare_ctip C(1)) + + lnRecnoD = 1 + lnReccountD = Reccount("tPerecheD") + Select tperecheD + Go Top + lnSumaD = sumaachi + pcCont = Alltrim(Cont) + llDefalcTVAD = .F. + lcSelect = [select count(*) as defalcTVA from config_cont_ireg t where cont = ?pcCont and cu_proc_tva = 1] + If goExecutor.oExecuta(lcSelect, "crsDefalcTva") + Select crsDefalcTVA + llDefalcTVAD = defalcTVA >0 + Use In crsDefalcTVA + Endif + + lnRecnoC = 1 + lnReccountC = Reccount("tPerecheC") + Select tperecheC + Go Top + lnSumaC = sumaachi + pcCont = Alltrim(Cont) + llDefalcTVAC = .F. + lcSelect = [select count(*) as defalcTVA from config_cont_ireg t where cont = ?pcCont and cu_proc_tva = 1] + If goExecutor.oExecuta(lcSelect, "crsDefalcTva") + Select crsDefalcTVA + llDefalcTVAC = defalcTVA >0 + Use In crsDefalcTVA + Endif + + lnSumaCompensata = 0 + lcTipMaxUrm = [] + lnSemnSumaD = SIGN(tperecheD.sumaachi) + + *!* am ordonat documentele pereche de pe credit si de pe debit descrescator dupa sume + *!* pana ajung la 0 pe ultima inregistrare de pe una dintre tabele, aleg MIN + *!* cand am ajuns la 0 pe ultima inregistrare intr-una dintre tabele, iau doar valorile din tabelul celalalt + *!* modificare v 2.5.27 + *!* DO WHILE !(lnRecnoD = lnReccountD AND lnRecnoC = lnReccountC AND lnSumaC = 0 AND lnSumaD = 0) + DO WHILE (EVL(tnTipOprire,0) = 0 AND !(lnRecnoD = lnReccountD AND lnRecnoC = lnReccountC AND lnSumaC = 0 AND lnSumaD = 0)) ; + OR (EVL(tnTipOprire,0) = 1 AND EMPTY(lcTipMaxUrm)) + *!* modificare v 2.5.27 ^ + lcTipMax = lcTipMaxUrm + lnSumaCompensata = IIF(lcTipMax=[C],lnSumaD,IIF(lcTipMax=[D],lnSumaC,IIF(EVL(tnTipOprire,0)=1,MIN(ABS(lnSumaC),ABS(lnSumaD)),MIN(lnSumaC,lnSumaD)))) + lnProc_tva = 0.00 + lnIdJtvaColoana = 0 + lnProc_tvaD = 0.00 + lnIdJtvaColoanaD = 0 + lnProc_tvaC = 0.00 + lnIdJtvaColoanaC = 0 + ***------------------------- + SELECT tperecheD + STORE nract TO nract1 + id_fact1 = id_fact + lcascd = NVL(acont,'') + IF cu_tva = 1 AND TYPE('tPerecheD.proc_tva') # 'U' AND llDefalcTVAD + lnProc_tva = proc_tva + lnIdJtvaColoana = NVL(id_jtva_coloana,0) + lnProc_tvaD = proc_tva + lnIdJtvaColoanaD = NVL(id_jtva_coloana,0) + ENDIF + *!* cand tnTipOprire = 1, atunci trebuie sa diminuez sumaachi cu lnSumaCompensata + replace sumaachi WITH sumaachi - IIF(EVL(tnTipOprire,0)=1,lnSemnSumaD,1) * lnSumaCompensata + lnSumaD = sumaachi + Do Case + Case lnSumaD = 0 And lnRecNoD <> lnReccountD + Skip + lnSumaD = sumaachi + lnRecNoD = Recno() + Case lnSumaD = 0 And lnRecNoD = lnReccountD And EMPTY(lcTipMax) + *!* daca am ajuns la ultima inregistrare si am restul 0, atunci trebuie sa iau valorile doar din celalalt tabel + *!* pentru urmatoarele note, nu mai fac exigibilizarea de TVA pentru Debit + lcTipMaxUrm = [D] + Endcase + + ***------------------------- + SELECT tperecheC + STORE nract TO nract2 + id_fact2 = id_fact + lcascc = NVL(acont,'') + IF cu_tva = 1 AND TYPE('tPerecheC.proc_tva') # 'U' AND llDefalcTVAC + lnProc_tva = proc_tva + lnIdJtvaColoana = NVL(id_jtva_coloana,0) + lnProc_tvaC = proc_tva + lnIdJtvaColoanaC = NVL(id_jtva_coloana,0) + ENDIF + *!* cand tnTipOprire = 1, atunci trebuie sa diminuez sumaachi cu lnSumaCompensata + replace sumaachi WITH sumaachi - IIF(EVL(tnTipOprire,0)=1,lnSemnSumaD*(-1),1) * lnSumaCompensata + lnSumaC = sumaachi + Do Case + Case lnSumaC = 0 And lnRecNoC <> lnReccountC + Skip + lnSumaC = sumaachi + lnRecNoC = Recno() + Case lnSumaC = 0 And lnRecNoC = lnReccountC And EMPTY(lcTipMax) + *!* daca am ajuns la ultima inregistrare si am restul 0, atunci trebuie sa iau valorile doar din celalalt tabel + *!* pentru urmatoarele note, nu mai fac exigibilizarea de TVA pentru Credit + lcTipMaxUrm = [C] + Endcase + + SELECT calculcompensare + IF lnSumaCompensata <> 0 + APPEND BLANK + REPLACE nr_doc_c WITH nract2, ascc WITH lcascc, id_factc WITH id_fact2 + REPLACE nr_doc_d WITH nract1, ascd WITH lcascd, id_factd WITH id_fact1 + REPLACE proc_tva WITH lnProc_tva,id_jtvacol WITH lnIdJtvaColoana + REPLACE proc_tvaD WITH lnProc_tvaD,id_jtvacolD WITH lnIdJtvaColoanaD + REPLACE proc_tvaC WITH lnProc_tvaC,id_jtvacolC WITH lnIdJtvaColoanaC + REPLACE sumaachi WITH IIF(EVL(tnTipOprire,0)=1,lnSemnSumaD,1)*lnSumaCompensata + REPLACE ales WITH .T. + + if m.llTvaIncasare + replace tva_incasare_a with 1 + endif + if m.llTvaIncasareD && AND lcTipMax<>[D] : pusesem conditia ca sa nu mai genereze note de TVA la incasare cand ajungeam pe 0 la ultima inregistrare din cursor + replace tva_incasare_d with 1, tva_incasare_dtip with 'D' + endif + if m.llTvaIncasareC && AND lcTipMax<>[C] : pusesem conditia ca sa nu mai genereze note de TVA la incasare cand ajungeam pe 0 la ultima inregistrare din cursor + replace tva_incasare_c with 1, tva_incasare_ctip with 'C' + endif + ENDIF + + ENDDO +*!* modificare v 2.5.26 ^ + + USE IN tperecheD + USE IN tperecheC + RETURN + + *** + + ******************************************* SFARSIT: calculcompens in lei ******************************************* + + ******************************************* INCEPUT: calculcompens in valuta - fara sume negative ******************************************* + + *** + +PROCEDURE calculcompens_valuta + PARAMETERS tcFisD, tcFisC + + LOCAL max1, max2, nract1, nract2, lcFis1, lcFis2, id_fact1, id_fact2, llDefalcTVA + STORE 1 TO max1,max2 + STORE 0 TO nract1, nract2, id_fact1, id_fact2 + PRIVATE pcCont + pcCont = '' + + llDefalcTVA = .F. + + lcFisD = ALLTRIM(tcFisD) + lcFisC = ALLTRIM(tcFisC) + + SELECT * FROM &lcFisD INTO CURSOR tperecheD READWRITE + SELECT * FROM &lcFisC INTO CURSOR tperecheC READWRITE + + CREATE CURSOR calculcompensare (nr_doc_d N(14), nr_doc_c N(14),id_factd N(14), id_factc N(14),; + ascc c(4), ascd c(4), sumaachi2 N(20,4), achilei N(20,4), id_jtvacol N(10), proc_tva N(5,2), ; + sumaachid N(20,4), sumaachic N(20,4), cursd N(12,4), cursc N(12,4), difplus N(20,4), ; + difminus N(20,4), cursval N(12,4), cursdif N(12,4), ales l) + + DO WHILE max1!=0 AND max2!=0 + lnProc_tva = 0.00 + lnIdJtvaColoana = 0 + SELECT tperecheC + CALCULATE MAX(sumaachi2) FOR ales TO max2 + *WAIT WINDOW 'max2'+STR(max2) + SELECT tperecheD + CALCULATE MAX(sumaachi2) FOR ales TO max1 + *WAIT WINDOW 'max1'+STR(max1) + + ***------------------------- + + SELECT tperecheD + GO TOP + pcCont = ALLTRIM(CONT) + + llDefalcTVA = .F. + lcSelect = [select count(*) as defalcTVA from config_cont_ireg t where cont = ?pcCont and cu_proc_tva = 1] + lnSucces = goExecutor.oExecute(lcSelect, "crsDefalcTva") + IF lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare,0+16,'Eroare') + ELSE + SELECT crsDefalcTVA + llDefalcTVA = defalcTVA >0 + + IF USED('crsDefalcTVA') + USE IN crsDefalcTVA + ENDIF + ENDIF + + ***------------------------- + SELECT tperecheD + LOCATE FOR sumaachi2 = max1 AND ales + nract1 = nract + id_fact1 = id_fact + lcascd = NVL(acont,'') + lnCursD = cursschimb + IF TYPE('tPerecheD.proc_tva') # 'U' AND llDefalcTVA + lnProc_tva = proc_tva + lnIdJtvaColoana = NVL(id_jtva_coloana,0) + ENDIF + + IF max1 <= max2 + lnSumaleiD = sumaachi + REPLACE sumaachi2 WITH 0 + REPLACE ales WITH .F. + + ELSE + lnSumaleiD = ROUND(cursschimb * max2, gnPC) + IF lnSumaleiD > sumaachi + lnSumaleiD = sumaachi + ENDIF + REPLACE sumaachi2 WITH max1 - max2 + REPLACE sumaachi WITH sumaachi - lnSumaleiD + ENDIF + + ***------------------------- + + SELECT tperecheC + GO TOP + pcCont = ALLTRIM(CONT) + + llDefalcTVA = .F. + lcSelect = [select count(*) as defalcTVA from config_cont_ireg t where cont = ?pcCont and cu_proc_tva = 1] + lnSucces = goExecutor.oExecute(lcSelect, "crsDefalcTva") + IF lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare,0+16,'Eroare') + ELSE + SELECT crsDefalcTVA + llDefalcTVA = defalcTVA >0 + + IF USED('crsDefalcTVA') + USE IN crsDefalcTVA + ENDIF + ENDIF + ***------------------------- + + SELECT tperecheC + LOCATE FOR sumaachi2 = max2 AND ales + nract2 = nract + id_fact2 = id_fact + lcascc = NVL(acont,'') + lnCursC = cursschimb + + IF TYPE('tPerecheC.proc_tva') # 'U' AND llDefalcTVA + lnProc_tva = proc_tva + lnIdJtvaColoana = NVL(id_jtva_coloana,0) + ENDIF + + IF max2 <= max1 + lnSumaleiC = sumaachi + REPLACE sumaachi2 WITH 0 + REPLACE ales WITH .F. + + ELSE + lnSumaleiC = ROUND(cursschimb * max1, gnPC) + IF lnSumaleiC > sumaachi + lnSumaleiC = sumaachi + ENDIF + REPLACE sumaachi2 WITH max2 - max1 + REPLACE sumaachi WITH sumaachi - lnSumaleiC + ENDIF + + + + + SELECT calculcompensare + IF MIN(max1, max2) <> 0 + APPEND BLANK + REPLACE nr_doc_c WITH nract2, id_factc WITH id_fact2, ascc WITH lcascc, sumaachic WITH lnSumaleiC, cursc WITH lnCursC + REPLACE nr_doc_d WITH nract1, id_factd WITH id_fact1,ascd WITH lcascd, sumaachid WITH lnSumaleiD, cursd WITH lnCursD + REPLACE sumaachi2 WITH MIN(max1, max2),proc_tva WITH lnProc_tva,id_jtvacol WITH lnIdJtvaColoana + REPLACE ales WITH .T. + ENDIF + ENDDO + + SELECT calculcompensare + SCAN + IF sumaachid > sumaachic + REPLACE difplus WITH sumaachid - sumaachic, achilei WITH sumaachic, cursval WITH cursc, cursdif WITH cursd + ELSE + REPLACE difminus WITH sumaachic - sumaachid, achilei WITH sumaachid, cursval WITH cursd, cursdif WITH cursc + ENDIF + ENDSCAN + + USE IN tperecheD + USE IN tperecheC + + RETURN + ******************************************* SFARSIT: calculcompens - fara sume negative ******************************************* + + *** + + + + *!* PROCEDURE calculcompens_valuta + *!* PARAMETERS tcFisD, tcFisC + + *!* LOCAL max1, max2, nract1, nract2, lcFis1, lcFis2 + *!* STORE 1 TO max1,max2 + *!* STORE 0 TO nract1,nract2 + + *!* lcFisD = ALLTRIM(tcFisD) + *!* lcFisC = ALLTRIM(tcFisC) + + *!* SELECT * from &lcfisd INTO CURSOR tperecheD READWRITE + *!* SELECT * from &lcfisc INTO CURSOR tperecheC READWRITE + + *!* CREATE TABLE &gcTempPath\calculcompensare.dbf (nr_doc_d n(14), nr_doc_c n(14), ascc c(4), ascd c(4), sumaachi2 n(16,2), achilei n(16,2), ; + *!* sumaachid n(16,2), sumaachic n(16,2), cursd n(8,2), cursc n(8,2), difplus n(16,2), difminus n(16,2), cursval n(8,2), cursdif n(8,2), ales l) + *!* + *!* DO WHILE max1!=0 OR max2!=0 + *!* SELECT tperecheC + *!* CALCULATE MAX(sumaachi2) FOR ales AND sumaachi2 <> 0 TO max2 + *!* *WAIT WINDOW 'max2'+STR(max2) + *!* SELECT tperecheD + *!* CALCULATE MAX(sumaachi2) FOR ales AND sumaachi2 <> 0 TO max1 + *!* *WAIT WINDOW 'max1'+STR(max1) + + *!* SELECT tperecheD + *!* LOCATE FOR sumaachi2 = max1 AND ales + *!* nract1 = nract + *!* lcascd = acont + *!* lnCursD = cursschimb + + *!* if (max1 <= max2 OR max2 = 0) AND max1 <> 0 + *!* lnSumaleiD = sumaachi + *!* REPLACE sumaachi2 WITH 0 + *!* * REPLACE ales WITH .f. + *!* + *!* ELSE + *!* lnSumaLeiD = ROUND(cursschimb * max2, 0) + *!* IF lnSumaLeiD > sumaachi + *!* lnSumaLeiD = sumaachi + *!* ENDIF + *!* REPLACE sumaachi2 WITH max1 - max2 + *!* REPLACE sumaachi WITH sumaachi - lnSumaLeiD + *!* ENDIF + *!* + *!* SELECT tperecheC + *!* LOCATE FOR sumaachi2 = max2 AND ales + *!* nract2 = nract + *!* lcascc = acont + *!* lnCursC = cursschimb + *!* + *!* if (max2 <= max1 OR max1 = 0) AND max2 <> 0 + *!* lnSumaleiC = sumaachi + *!* REPLACE sumaachi2 WITH 0 + *!* * REPLACE ales WITH .f. + *!* + *!* ELSE + *!* lnSumaLeiC = ROUND(cursschimb * max1, 0) + *!* IF lnSumaLeiC > sumaachi + *!* lnSumaLeiC = sumaachi + *!* ENDIF + *!* REPLACE sumaachi2 WITH max2 - max1 + *!* REPLACE sumaachi WITH sumaachi - lnSumaLeiC + *!* ENDIF + *!* + *!* + *!* SELECT calculcompensare + *!* IF max1 <> 0 OR max2 <> 0 + *!* APPEND BLANK + *!* REPLACE nr_doc_c WITH nract2, ascc WITH lcAscc, sumaAchiC WITH lnSumaleiC, cursC WITH lnCursC + *!* REPLACE nr_doc_d WITH nract1, ascd WITH lcAscd, sumaAchiD WITH lnSumaleiD, cursD WITH lnCursD + *!* IF MIN(max1, max2) <> 0 + *!* REPLACE sumaachi2 WITH MIN(max1, max2) + *!* ELSE + *!* REPLACE sumaachi2 WITH MAX(max1, max2) + *!* ENDIF + *!* REPLACE ales WITH .t. + *!* ENDIF + *!* ENDDO + + *!* SELECT calculcompensare + *!* SCAN + *!* IF sumaAchiD > sumaAchiC + *!* REPLACE difplus WITH sumaAchiD - sumaAchiC, achilei WITH sumaAchiC, cursval WITH cursC, cursdif WITH cursD + *!* ELSE + *!* REPLACE difminus WITH sumaAchiC - sumaAchiD, achilei WITH sumaAchiD, cursval WITH cursD, cursdif WITH cursC + *!* ENDIF + *!* ENDSCAN + + *!* USE IN tperecheD + *!* USE IN tperecheC + + *!* RETURN + *********************************************** SFARSIT calculcompens in valuta ****************************************** +Function calculcompens_part + Lparameters tcCont, tnProcTva, tlValuta, tnIdValuta, tnIdValuta2, tcNumeVal2 + && partea in valuta nu este testata + Local llReturn, lnTip, lcCursorIregPart, lcCursorSumeNegative, lcCursorSumePozitive, lcCursorCalculCompensare, ; + lcCursorCalculCompensareTemp, lcCont, lcCond, lnIdPart, ; + lnFelCont, lnPozitie, lcSumaAchi, lcSelectie, lcSelectie1, lcSelectie2 + lcCursorIregPart = Sys(2015) + lcCursorSumeNegative = Sys(2015) + lcCursorSumePozitive = Sys(2015) + lcCursorCalculCompensare = [calculcompensare] + lcCursorCalculCompensareTemp = SYS(2015) + lcCont = Alltrim(tcCont) + lcCond = [ an = ] + Alltrim(Str(gnAn)) + [ and luna = ] + Alltrim(Str(gnluna))+ Iif(glEMama,' and NVL(id_sucursala,0) = 0 ',gcCondSucursala) + llReturn = .T. + + If tlValuta + lcCond= lcCond + [ and ABS(i.precvaldeb + i.valdebit - i.precvalcred - i.valcredit)>0 and i.id_valuta ] + ; + Iif(!EMPTY(tnIdValuta2), [in ( ] + Alltrim(Str(tnIdValuta)) + [,] + Alltrim(Str(Nvl(tnIdValuta2,0))) + [)], [ = ]+Alltrim(Str(tnIdValuta))) + Else + lcCond= lcCond + [ and (i.precvaldeb + i.valdebit - i.precvalcred - i.valcredit = 0) ] + Endif + + Select xcont + Locate For Val(contpart) = Val(lcCont) + lnIdPart = idpart + lnFelCont = fel_cont + lnPozitie = pozitie + + pcselect = ['select i.* FROM vireg_parteneri i where 2=2 '] + pcfiltru = [ i.id_part = ] + Alltrim(Str(lnIdPart)) + [ AND ABS(i.precdeb + i.debit - i.preccred - i.credit)<>0 AND i.cont = ']+ lcCont + [' and ] + lcCond + + Private podateintrod + Store '' To podateintrod + gencursor('podateintrod',lcCursorIregPart,pcselect,pcfiltru,[''],['']) + + Do Case + Case m.lnFelCont = 0 Or (m.lnFelCont = 2 And m.lnPozitie = 1) + lnTip = 1 + lcSumaAchi = [ROUND(precdeb + debit,gnPc) - ROUND(preccred+credit,gnPc)] + lcSelectie = [SELECT *, ACONT AS ASCC, nume_val as numeval, curs as cursschimb, precdeb + debit as totctva, preccred+credit as achitat, credit as achitatl, ] +; + [precvaldeb + valdebit AS sumaval, precVALcred+VALcredit as achitatval, ] + Iif(tnProcTva = 1, [1], [0]) + [ as cu_tva, ] +; + [.T. as ales, ] + lcSumaAchi + [ as sumaachi, 000000000000.0000 as sumaachi2, 00000000000000.0000 as achilei, 00000000000000.0000 as difplus, ]+; + [ 00000000000000.0000 as difminus, 000000.0000 as cursval, 000000.0000 as cursdif, id_jtva_coloana as id_jtvacol, ] +; + [CAST(0 as n(10)) as id_valuta2, CAST('' as c(30)) as nume_val2, CAST(0 as n(15,2)) as sumaachi22,tva_incasare ] + ; + [FROM ] + lcCursorIregPart + Otherwise + lnTip = 2 + lcSumaAchi = [ROUND(preccred + credit,gnPc) - ROUND(precdeb+debit,gnPc)] + lcSelectie = [SELECT *, ACONT AS ASCD, nume_val as numeval, curs as cursschimb, preccred + credit as totctva, precdeb+debit as achitat, debit as achitatl,] + ; + [precvalcred + valcredit as sumaval, precVALdeb+VALdebit as achitatval, ] + Iif(tnProcTva = 1, [1], [0]) + [ as cu_tva, ] +; + [.T. as ales, ] + lcSumaAchi + [ as sumaachi, 00000000000000.0000 as sumaachi2, 00000000000000.0000 as achilei, 00000000000000.0000 as difplus, ]+; + [ 00000000000000.0000 as difminus, 000000.0000 as cursval, 000000.0000 as cursdif, id_jtva_coloana as id_jtvacol, ] + ; + [CAST(0 as n(10)) as id_valuta2, CAST('' as c(30)) as nume_val2, CAST(0 as n(15,2)) as sumaachi22,tva_incasare ] + ; + [FROM ] + lcCursorIregPart + Endcase + lcSelectie1 = lcSelectie + [ WHERE ] + lcSumaAchi + [< 0 INTO CURSOR ] + lcCursorSumeNegative + [ READWRITE] + lcSelectie2 = lcSelectie + [ WHERE ] + lcSumaAchi + [> 0 INTO CURSOR ] + lcCursorSumePozitive + [ READWRITE] + &lcSelectie1 + &lcSelectie2 + + If !Empty(tcNumeVal2) And !Empty(Nvl(tnIdValuta2,0)) + Update (lcCursorSumeNegative) Set id_valuta2 = tnIdValuta2, nume_Val2 = tcNumeVal2 + Update (lcCursorSumePozitive) Set id_valuta2 = tnIdValuta2, nume_Val2 = tcNumeVal2 + ENDIF +*!* ROUND(sumaval-achitatval,gnPval) +*!* && sumaachi2 = valoarea in valuta facturii (euro) +*!* && sumaachi22 = valoarea in valuta de incasare(usd) +*!* && m.suma_32 = cursul usd +*!* && m.suma_3 = cursul euro +*!* Local lncurs +*!* If ales +*!* lncurs = Iif(id_valuta = id_valuta2, poact.suma_32, poact.suma_3) +*!* * lncurs = Iif(id_valuta = poact.id_valuta2, poact.suma_32, poact.suma_3) +*!* Repl sumaachi2 With Round(sumaval - achitatval,gnPval) +*!* IF poAct.suma_32 > 0 +*!* replace sumaachi22 WITH ROUND(sumaachi2 * m.lncurs / poact.suma_32,2) +*!* ENDIF +*!* If sumaachi2=0 +*!* Do mesaj With "Bifati doar inregistrarile","care au sold in valuta!" +*!* Replace ales With .F. +*!* Endif +*!* Else +*!* Repl sumaachi2 With 0, sumaachi22 With 0 +*!* Endif + + If Reccount(lcCursorSumeNegative)>0 And Reccount(lcCursorSumePozitive)>0 + Do calculcompens With lcCursorSumeNegative, lcCursorSumePozitive, 1,1 + *!* mut toate facturile pe coloana corecta si le cumulez dupa id_fact + copiaza_structura_cursor(lcCursorCalculCompensare,lcCursorCalculCompensareTemp) + INSERT INTO (lcCursorCalculCompensareTemp) SELECT * FROM (lcCursorCalculCompensare) + DELETE from (lcCursorCalculCompensare) + IF lnTip = 1 + Insert Into (lcCursorCalculCompensare) (nr_doc_d,nr_doc_c,id_factd,id_factc,ascd,ascc,sumaachi,ales,proc_tva,; + id_jtvacol,tva_incasare_a,tva_incasare_d,tva_incasare_dtip,tva_incasare_c,tva_incasare_ctip) ; + SELECT 0 As nr_doc_d, nr_doc_d As nr_doc_c, 0 As id_factd, id_factd As id_factc, '' As ascd,ascd As ascc,; + Sum(sumaachi) As sumaachi,ales,; + proc_tvaD as proc_tva,id_jtvacol as id_jtvacolC,; + tva_incasare_a,0 As tva_incasare_d,'' As tva_incasare_dtip,tva_incasare_d As tva_incasare_c,; + IIF(tva_incasare_dtip='D','C','') As tva_incasare_ctip ; + From (lcCursorCalculCompensareTemp) ; + Group By 1,2,3,4,5,6,8,9,10,11,12,13,14,15 ; + Union All ; + SELECT 0 As nr_doc_d,nr_doc_c,0 As id_factd,id_factc,'' As ascd,ascc,; + Sum(sumaachi)*(-1) As sumaachi,ales,; + proc_tvaC as proc_tva, id_jtvacolC as id_jtvacol,; + tva_incasare_a,0 As tva_incasare_d,'' As tva_incasare_dtip,tva_incasare_c,tva_incasare_ctip ; + From (lcCursorCalculCompensareTemp) ; + Group By 1,2,3,4,5,6,8,9,10,11,12,13,14,15 + ELSE + Insert Into (lcCursorCalculCompensare) (nr_doc_d,nr_doc_c,id_factd,id_factc,ascd,ascc,sumaachi,ales,proc_tva,; + id_jtvacol,tva_incasare_a,tva_incasare_d,tva_incasare_dtip,tva_incasare_c,tva_incasare_ctip) ; + SELECT nr_doc_c As nr_doc_d, 0 As nr_doc_c, id_factc As id_factd, 0 As id_factc, ascc As ascd, '' As ascc,; + Sum(sumaachi)*(-1) As sumaachi,ales,; + proc_tvaC as proc_tva, id_jtvacolC as id_jtvacol,; + tva_incasare_a,tva_incasare_c As tva_incasare_d,; + IIF(tva_incasare_ctip='C','D','') as tva_incasare_dtip,; + 0 As tva_incasare_c,'' As tva_incasare_ctip ; + From (lcCursorCalculCompensareTemp) ; + Group By 1,2,3,4,5,6,8,9,10,11,12,13,14,15 ; + Union All ; + SELECT nr_doc_d,0 As nr_doc_c,id_factd,0 As id_factc,ascd,'' As ascc,; + Sum(sumaachi) As sumaachi,ales,; + proc_tvaD as proc_tva, id_jtvacolD as id_jtvacol, ; + tva_incasare_a,tva_incasare_d,tva_incasare_dtip,0 As tva_incasare_c,'' As tva_incasare_ctip ; + From (lcCursorCalculCompensareTemp) ; + Group By 1,2,3,4,5,6,8,9,10,11,12,13,14,15 + ENDIF + USE IN (lcCursorCalculCompensareTemp) + Else + llReturn = .F. + amessagebox("Nu se pot face compensari intrucat nu exista facturi cu semn diferit!",48,"Atentie") + Endif + + Use In (lcCursorIregPart) + Use In (lcCursorSumeNegative) + Use In (lcCursorSumePozitive) + Release lnTip, lcCursorIregPart, lcCursorSumeNegative, lcCursorSumePozitive, lcCursorCalculCompensare, ; + lcCursorCalculCompensareTemp, lcCont, lcCond, lnIdPart, ; + lnFelCont, lnPozitie, lcSumaAchi, lcSelectie, lcSelectie1, lcSelectie2 + RETURN llReturn +Endproc \ No newline at end of file diff --git a/COMUN/programe/odocumente.prg b/COMUN/programe/odocumente.prg new file mode 100644 index 0000000..028be6d --- /dev/null +++ b/COMUN/programe/odocumente.prg @@ -0,0 +1,46 @@ +*** odocumente + + +*!* parametri: cod, luna, an +*!* pentru codul respectiv din act si toate id_fact se verifica +*!* daca respectivul id_fact exista pe id_factd sau id_factc pe alt cod +*!* decat cel verificat +FUNCTION ReferinteDocumenteNota + PARAMETERS tnAn, tnLuna, tnCod + + LOCAL lnReferinte, lcFunctie + lnReferinte = 1 + + + lcFunctie = "pack_documente.ReferinteDocumenteNota(?tnAn, ?tnLuna, ?tnCod)" + lnSucces = goExecutor.oFunction2Value(lcFunctie, @lnReferinte) + IF lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare,0+16,"Eroare") + ENDIF + + RETURN IIF(lnReferinte > 0, .T., .F.) + +ENDFUNC && ReferinteDocumenteNota + + +*!* parametri: an, luna, cod, id_fact +*!* pentru codul respectiv din act si toate id_fact se verifica +*!* daca respectivul id_fact exista pe id_factd sau id_factc pe alt cod +*!* decat cel verificat +FUNCTION ReferinteDocument + PARAMETERS tnAn, tnLuna, tnCod, tnIdFact + + LOCAL lnReferinte, lcFunctie + lnReferinte = 1 + + + + lcFunctie = "pack_documente.ReferinteDocument(?tnAn, ?tnLuna, ?tnCod, ?tnIdFact)" + lnSucces = goExecutor.oFunction2Value(lcFunctie, @lnReferinte) + IF lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare,0+16,"Eroare") + ENDIF + + RETURN IIF(lnReferinte > 0, .T., .F.) + +ENDFUNC && ReferinteDocument diff --git a/COMUN/programe/oexport.prg b/COMUN/programe/oexport.prg new file mode 100644 index 0000000..fbc13da --- /dev/null +++ b/COMUN/programe/oexport.prg @@ -0,0 +1,3003 @@ +*!* 19.02.2009 marius.mutu +*!* + oExportConfig.getReportPath(tcRaport) : intoarce calea raportului utilizator din DIRGEN > USERREPORT > SCHEMA sau DIRGEN > USERREPORT > SCHEMA > PROGRAM sau EXECUTABIL +*!* oExportConfig.export2frx,export2pdf + +*!* 08.12.2010 +*!* *!* marius.mutu +*!* oExportConfig.export2frx +*!* listare cu export pdf, xls +*!* + foxypreview v 2.01c + +*!* 31.05.2011 +*!* marius.mutu +*!* update foxypreview v 2.41a (email, reparat eroare listare inventarul patrimoniului - se inchidea cursorul din grid) + +*!* 01.06.2011 +*!* marius.mutu +*!* am reparat in foxypreviewcaller detectarea existentei raportului pe disc + +*!* 07.06.2011 +*!* oExportConfig.getRepPath +*** daca raportul este deja intr-un director pe disc (ex: c:\temp\tutun\rap_incasari_plati.frx) las calea asa cum este + +*!* 06.01.2014 +*!* marius.mutu +*!* FoxyPreview - se verifica daca exista proprietatea _Screen.oFoxyPreviewer.cLanguage + +*!* 19.11.2018 +*!* marius.mutu +*!* oExportConfig.export2frx - definire gcLogoPath pentru folosirea in factura sau alte rapoarte +*!* Se cauta in logo.jpg in directorul ROA si USERREPORTS + +*!* 03.10.2019 +*!* marius.mutu +*!* rapoarte personalizate salvate in baza de date atas_atasamente! +*!* getLogoPath, getRepPath - se cauta logo.jpg, logo_orizontal.jpg, raport.frx pe disc +*!* se cauta si in baza de date atas_atasamente. daca exista, se creeaza fisierele pe disc + +*!* 06.07.2020 +*!* FoxyPreview - tratare lDirectPrint mod silentios trimite direct la imprimanta + +*!* 09.12.2020 +*!* getRepPath - suprascriu raportul din USERREPORTS cu raportul din baza de date in functie de optiunea gnRAP_SUPRASCRIERE_USR + +*!* 17.12.2020 +*!* getRepPath - chiar daca exista raportul USR_*.frx in directorul firmei, il cauta si in directorul programului +*!* eroare introdusa in versiunea anterioara + +*!* 10.01.2024 +*!* export2frx - se listeaza tcRaport_IdClient daca exista, altfel tcRaport (Vadeco listeaza cu alte conturi bancare pentru OMV Petrom) + +Define Class oExportConfig As wwConfig + Dimension aImprimante(1, 2) + nTip = 1 && 1 = registru ; 2 = settings.ini + cIniPath = "settings.ini" + cSectiune = "printers" + cRegPath = "SOFTWARE\ROMFAST" + cUserRepPath = [] + cTempPath = [] + cCursorCurent = [] + cCaleCurenta = [] + oApi = [] + cReportPreview = [] + cReportOutput = [] + Dimension aExplicatii(3, 2) + aExplicatii(1, 1) = [FRX] + aExplicatii(1, 2) = [listare] + aExplicatii(2, 1) = [XLS] + aExplicatii(2, 2) = [export] + aExplicatii(3, 1) = [PDF] + aExplicatii(3, 2) = [export in PDF] + **** Init + **** getUserRepPath + **** open_default_app(tcNumeFisier) + **** getExcelMask(tcInputMask) + **** citesteSetareRegistru(tcCheie) + **** modificaSetareRegistru(tcCheie,tcValoare) + **** setCursorCurent() + **** getCursorCurent() + **** setCaleCurenta() + **** repuneCaleCurenta() + **** repuneCursorCurent() + **** verificaDate(tcAlias,tnTip) + **** export2frx(tcAlias, tcRaport, tlCereTitlu, tcSetareVizualizare, tcSetareImprimanta, tcParametriListare, toListener) + **** export2xls(tcAlias, tcNumeFisier, tcListaColoane, tcFiltru) + **** export2pdf(tcAlias, tcRaport, tlPreview, tnTip) + **** + **** de sters dupa inlocuire in ROAFACTURARE + **** listareUserReport(tcAlias, tcTipExport, tcRaport, tnVizualizare, tcSetare, tcFiltru) + **** export_frx(tcAlias, tcRaport, tnVizualizare, tcSetare) + **** export_xls(tcAlias, tcNumeFisier, tnVizualizare, tcListaColoane, tcFiltru) + ************************************** INCEPUT : Init + Procedure Init + Set Classlib To wwxml Additive + Set Procedure To wwApi.prg Additive + Set Classlib To _gdiplus Additive + Set Classlib To Listener Additive + Set Procedure To _libpdf.prg Additive + Set Procedure To build_err_msgs.prg Additive + Set Procedure To pdflistener.prg Additive + Set Procedure To frxoutput.prg Additive + This.oApi = Createobject("wwApi") + *!* This.cUserRepPath = This.getUserRepPath() + This.cTempPath = gcTempPath + Endproc + ************************************** SFARSIT : Init + ************************************** INCEPUT : setTip + Procedure setTip + Lparameters tnTip + This.nTip = tnTip + Endproc + ************************************** SFARSIT : setTip + ************************************** INCEPUT : setPath + Procedure setPath + Lparameters tcPath + If This.nTip = 1 + This.cRegPath = tcPath + Else + This.cIniPath = tcPath + Endif + Endproc + ************************************** SFARSIT : setPath + ************************************** INCEPUT : setSectiune + Procedure setSectiune + Lparameters tcSectiune + This.cSectiune = tcSectiune + Endproc + ************************************** SFARSIT : setSectiune + ************************************** INCEPUT : setRegPath + Procedure setRegPath + Lparameters tcRegPath + This.cRegPath = tcRegPath + This.setTip(1) + Endproc + ************************************** SFARSIT : setRegPath + *!* ************************************** INCEPUT : getUserRepPath + *!* Function getUserRepPath + *!* Local lcAppPath, lcAppName, liAt, lcDirgen, lcUserRepPath + *!* lcAppPath = gcAppPath + *!* lcAppName=Allt(Uppe(Juststem(Sys(16,0)))) + *!* liAt=Rat("\",lcAppPath,2) + *!* lcDirgen=Addbs(Left(lcAppPath,liAt-1)) + *!* lcUserRepPath = lcDirgen + 'USERREPORTS\' + *!* If !Directory(lcUserRepPath) + *!* Try + *!* Md (lcUserRepPath) + *!* Catch To oException + *!* Wait Window "Nu se poate crea directorul " + lcUserRepPath Nowait + *!* Endtry + *!* Endif + *!* If !Empty(Nvl(gcS,[])) + *!* lcUserRepPath = lcUserRepPath + gcS + '\' + *!* If !Directory(lcUserRepPath) + *!* Try + *!* Md (lcUserRepPath) + *!* Catch To oException + *!* Wait Window "Nu se poate crea directorul " + lcUserRepPath Nowait + *!* Endtry + *!* Endif + *!* Endif + *!* lcUserRepPath = lcUserRepPath + lcAppName + '\' + *!* If !Directory(lcUserRepPath) + *!* Try + *!* Md (lcUserRepPath) + *!* Catch To oException + *!* Wait Window "Nu se poate crea directorul " + lcUserRepPath Nowait + *!* Endtry + *!* Endif + + *!* Return lcUserRepPath + + *!* Endfunc + *!* ************************************** SFARSIT : getUserRepPath + + *!* caut usr_raport in DIRGEN > USERREPORTS > SCHEMA, apoi in DIRGEN > USERREPORTS > SCHEMA > PROGRAM, altfel in executabil + ************************************** INCEPUT : getRepPath + Function getRepPath + Lparameters tcRaport + * tcRaport = numele raportului + + Local lcAppPath, lcAppName, liAt, lcDirgen, lcUserRepPath, llSuprascriereRaportUSR + lcAppPath = gcAppPath + lcAppName = Iif(Type('gcAppName') = 'C' And !Empty(gcAppName), gcAppName, Allt(Uppe(Juststem(Sys(16, 0))))) + + liAt = Rat("\", lcAppPath, 2) + lcDirgen = Addbs(Left(lcAppPath, liAt - 1)) + lcUserRepPath = lcDirgen + 'USERREPORTS\' + m.GCS + '\' + lcRaportPath = lcUserRepPath + [USR_] + Juststem(tcRaport) + [.FRX] + lcSchemaRaportFile = Lower(m.lcRaportPath) + poLog.Log('RepPath1: ' + TRANSFORM(File(lcRaportPath)) + ' ' + m.lcRaportPath, Program()) + + llSuprascriereRaportUSR = .F. + IF TYPE('gnRAP_SUPRASCRIERE_USR') = 'N' + llSuprascriereRaportUSR = (m.gnRAP_SUPRASCRIERE_USR = 1) + ENDIF + + If !File(m.lcRaportPath) OR m.llSuprascriereRaportUSR + IF !FILE(m.lcRaportPath) + lcRaportPath = lcUserRepPath + lcAppName + [\USR_] + Juststem(tcRaport) + [.FRX] + poLog.Log('RepPath2: ' + TRANSFORM(File(lcRaportPath)) + ' ' + m.lcRaportPath, Program()) + ENDIF + If !File(lcRaportPath) OR m.llSuprascriereRaportUSR + * Caut frx in atas_atasamente si il creez pe disc daca exista + llSucces = This.Report2File(Lower(Juststem(m.tcRaport)), m.lcSchemaRaportFile) + If m.llSucces And File(m.lcSchemaRaportFile) + lcRaportPath = m.lcSchemaRaportFile + poLog.Log('RepPath3: ' + TRANSFORM(File(lcRaportPath)) + ' ' + m.lcRaportPath, Program()) + Endif && llBytesWritten + Endif && file + + poLog.Log('RepPath4: ' + TRANSFORM(File(lcRaportPath)) + ' ' + m.lcRaportPath, Program()) + If !File(lcRaportPath) + lcRaportPath = Juststem(tcRaport) + [.FRX] + Endif + Endif + *!* 07.06.2011 + *** daca este calea completa pe disc, adica raportul este deja intr-un director pe disc (ex: c:\temp\tutun\rap_incasari_plati.frx), las calea asa cum este + If !Empty(Justpath(m.tcRaport)) + lcRaportPath = m.tcRaport + poLog.Log('RepPath5: ' + TRANSFORM(File(lcRaportPath)) + ' ' + m.lcRaportPath, Program()) + Endif + + *!* 07.06.2011 ^ + This.cUserRepPath = Addbs(Justpath(lcRaportPath)) + + Return lcRaportPath + + Endfunc && getRepPath + ************************************** SFARSIT : getRepPath + + *!* caut logo.jpg/logo_orizontal.jpg in DIRGEN > USERREPORTS > SCHEMA, apoi in DIRGEN > USERREPORTS > SCHEMA > PROGRAM, altfel in executabil + ************************************** INCEPUT : getLogoPath + Function getLogoPath + Lparameters tcLogoFileName + * tcLogoFileName : logo.jpg/logo_orizontal.jpg + + Local lcAppPath, lcAppName, liAt, lcDirgen, lcUserLogoPath, lcLogoPath, lcSchemaLogoFile, lcSchemaAppLogoFile, lcFileName, lnBytesWritten + Private puFisier + lcAppPath = gcAppPath + lcAppName = Iif(Type('gcAppName') = 'C' And !Empty(gcAppName), gcAppName, Allt(Uppe(Juststem(Sys(16, 0))))) + lcLogoPath = '' + + lcFileName = Lower(Justfname(m.tcLogoFileName)) + + liAt = Rat("\", lcAppPath, 2) + lcDirgen = Addbs(Left(lcAppPath, liAt - 1)) + lcUserLogoPath = lcDirgen + 'USERREPORTS\' + m.GCS + '\' + lcLogoPath = lcUserLogoPath + tcLogoFileName + lcSchemaLogoFile = m.lcLogoPath + If !File(lcLogoPath) + lcLogoPath = lcUserLogoPath + lcAppName + [\] + m.tcLogoFileName + lcSchemaAppLogoFile = m.lcLogoPath + If !File(lcLogoPath) + lcLogoPath = Fullpath(m.tcLogoFileName) + If !File(m.lcLogoPath) + * Caut logo in atas_atasamente si il creez pe disc daca exista + lnBytesWritten = Atasament2File(, m.lcFileName, m.lcSchemaLogoFile) + If m.lnBytesWritten > 0 And File(m.lcSchemaLogoFile) + lcLogoPath = m.lcSchemaLogoFile + Endif && llBytesWritten + Endif && file + Endif && file + Endif && file + + If !File(m.lcLogoPath) + lcLogoPath = '' + Endif + + Return m.lcLogoPath + + Endfunc && getLogoPath + ************************************** SFARSIT : getLogoPath + + ************************************** + *** Extrage raport.frx si raport.frt din atas_atasamente, daca exista, si le salveaza pe disc usr_raport.frx si usr_raport.frt + *** Se apeleaza din GetRepPath + ************************************** + Function Report2File + Lparameters tcFileName, tcOutputFile + * tcFileName: numele raportului salvat in atas_atasamente (factura/factura.frx) + * tcOutputFile: calea completa a raportului (d:\roa\userreports\schema\usr_factura.frx) + + Local lcFrtFileName, lcFrtOuputFile, lcFrxFileName, lcFrxOuputFile, llSucces, lnBytesWritten + + llSucces = .F. + lcFrxFileName = Forceext(Lower(Justfname(m.tcFileName)), 'frx') && factura.frx + lcFrtFileName = Forceext(Lower(Justfname(m.tcFileName)), 'frt') && factura.frt + lcFrxOuputFile = Forceext(Lower(m.tcOutputFile), 'frx') && d:\roa\userreports\schema\usr_factura.frx + lcFrtOuputFile = Forceext(Lower(m.tcOutputFile), 'frt') && d:\roa\userreports\schema\usr_factura.frt + + lnBytesWritten = Atasament2File(, m.lcFrxFileName, m.lcFrxOuputFile) + If m.lnBytesWritten > 0 And File(m.lcFrxOuputFile) + lnBytesWritten = Atasament2File(, m.lcFrtFileName, m.lcFrtOuputFile) + llSucces = (m.lnBytesWritten > 0) + Endif + Return m.llSucces + Endfunc && Report2File + + ************************************** INCEPUT : open_default_app + Procedure OPEN_DEFAULT_APP + Parameters tcNumeFisier + Local lcActiune + + Declare Integer ShellExecute In shell32.Dll ; + Integer hndWin, ; + String cAction, ; + String cFileName, ; + String cParams, ; + String cDir, ; + Integer nShowWin + lcActiune = "open" + ShellExecute(0, lcActiune, tcNumeFisier, "", "", 1) + + Endproc && open_default_app + ************************************** SFARSIT : open_default_app + ************************************** INCEPUT : getExcelMask + Function getExcelMask + Lparameters tcInputMask + Local lnint, lndec, lcInputMask + lcInputMask = Strtran(tcInputMask, ' ', '') + lnint = Iif(At('.', lcInputMask, 1) > 0, At('.', lcInputMask, 1) - 1, Len(lcInputMask)) + lndec = Iif(Rat('.', lcInputMask, 1) > 0, Len(lcInputMask) - Rat('.', lcInputMask, 1), 0) + lnrest = Mod(lnint, 3) + + lcString = Replicate("#", lnrest) + lnint_ramas = lnint - lnrest + Do While lnint_ramas > 0 + lcString = lcString + " " + Replicate("#", 3) + lnint_ramas = lnint_ramas - 3 + Enddo + lcString = Substr(lcString, 1, Len(lcString) - 1) + "0" + If lndec > 0 + lcString = lcString + "." + Replicate("0", lndec) + Endif + + Return lcString + Endfunc && get_excel_mask + ************************************** SFARSIT : getExcelMask + ************************************** INCEPUT : citesteSetare + Function citesteSetare + Lparameters tcCheie + Return Iif(This.nTip = 1, This.citesteSetareRegistru(tcCheie), This.citesteSetareIni(This.cSectiune, tcCheie)) + Endfunc + ************************************** SFARSIT : citesteSetare + ************************************** INCEPUT : modificaSetare + Procedure modificaSetare + Lparameters tcCheie, tcValoare + If This.nTip = 1 + This.modificaSetareRegistru(tcCheie, tcValoare) + Else + This.modificaSetareIni(This.cSectiune, tcCheie, tcValoare) + Endif + Endproc + ************************************** SFARSIT : modificaSetare + ************************************** INCEPUT : citesteSetareIni + Function citesteSetareIni + Lparameters tcSectiune, tcCheie + Return Alltrim(This.oApi.GetProfileString(This.cIniPath, tcSectiune, tcCheie)) + Endfunc + ************************************** SFARSIT : citesteSetareIni + ************************************** INCEPUT : modificaSetareIni + Procedure modificaSetareIni + Lparameters tcSectiune, tcCheie, tcValoare + This.oApi.WriteProfileString(This.cIniPath, tcSectiune, tcCheie, tcValoare) + Endproc + ************************************** SFARSIT : modificaSetareIni + ************************************** INCEPUT : citesteSetareRegistru + Function citesteSetareRegistru + Lparameters tcCheie + *!* This.cRegNode = tcCheie + Return Alltrim(This.oApi.ReadRegistryString(, This.cRegPath, tcCheie)) + Endfunc + ************************************** SFARSIT : citesteSetareRegistru + ************************************** INCEPUT : modificaSetareRegistru + Procedure modificaSetareRegistru + Lparameters tcCheie, tcValoare + This.oApi.WriteRegistryString(, This.cRegPath, tcCheie, tcValoare, .T.) + Endproc + ************************************** SFARSIT : modificaSetareRegistru + ************************************** INCEPUT : setCursorCurent + Procedure setCaleCurenta + *!* This.cCaleCurenta = Sys(5)+Sys(2003) + This.cCaleCurenta = Set("Path") + Endproc + ************************************** SFARSIT : setCursorCurent + ************************************** INCEPUT : repuneCursorCurent + Procedure repuneCaleCurenta + Set Path To (This.cCaleCurenta) + Endproc + ************************************** SFARSIT : repuneCursorCurent + ************************************** INCEPUT : setCursorCurent + Procedure setCursorCurent + This.cCursorCurent = Select() + Endproc + ************************************** SFARSIT : setCursorCurent + ************************************** INCEPUT : getCursorCurent + Function getCursorCurent + Return This.cCursorCurent + Endfunc + ************************************** SFARSIT : getCursorCurent + ************************************** INCEPUT : repuneCursorCurent + Procedure repuneCursorCurent + Select (This.cCursorCurent) + Endproc + ************************************** SFARSIT : repuneCursorCurent + ************************************** INCEPUT : verificaDate + Function verificaDate + Lparameters tcAlias, tnTip, tlSilentios + Local llReturn + llReturn = .T. + Do Case + Case Empty(tcAlias) + If !tlSilentios + amessagebox("Nu au fost configurate datele! (VFPEXP-001)", 16, "Eroare") + Endif + llReturn = .F. + Case !Used(tcAlias) + If !tlSilentios + amessagebox("Nu exista datele! (VFPEXP-002)", 16, "Eroare") + Endif + llReturn = .F. + Case Reccount(tcAlias) = 0 + If !tlSilentios + amessagebox("Nu exista inregistrari pentru " + This.aExplicatii(tnTip, 2) + " !", 0 + 48, "Atentie") + Endif + llReturn = .F. + Endcase + Return llReturn + Endfunc + ************************************** SFARSIT : verificaDate + ************************************** INCEPUT : export2frx_paginaregrup + Procedure export2frx_paginaregrup + Lparameters tcAlias, tcRaport, tlCereTitlu, tcSetareVizualizare, tcSetareImprimanta, tcParametriListare, toListener, tlMultiPreview, tcReportPreviewer, toPreviewerConfig + Private pcDataOra + pcDataOra = [] + Create Cursor crsPaginiRaportGrup(id_grup N(20), pagina N(10)) + Select (tcAlias) + Report Form (tcRaport) + Release pcDataOra + This.export2frx(tcAlias, tcRaport, tlCereTitlu, tcSetareVizualizare, tcSetareImprimanta, tcParametriListare, toListener, tlMultiPreview, tcReportPreviewer, toPreviewerConfig) + If Used('crsPaginiRaportGrup') + Use In crsPaginiRaportGrup + Endif + Endproc + ************************************** SFARSIT : export2frx_paginaregrup + ************************************** INCEPUT : frx_numeroteazapagtotalgrup + Procedure frx_numeroteazapagtotalgrup + Lparameters tnIdGrup, tnPagina + Local lcCursor + If Used('crsPaginiRaportGrup') + lcCursor = Select() + Select crsPaginiRaportGrup + Locate For Nvl(id_grup, 0) = Nvl(tnIdGrup, 0) + If Found() + Replace pagina With tnPagina + Else + Append Blank + Replace id_grup With Nvl(tnIdGrup, 0), pagina With tnPagina + Endif + Select (lcCursor) + Endif + Endproc + ************************************** SFARSIT : frx_numeroteazapagtotalgrup + ************************************** INCEPUT : frx_citestepagtotalgrup + Function frx_citestepagtotalgrup + Lparameters tnIdGrup + Local lcCursor, lnPagina + lnPagina = Null + If Used('crsPaginiRaportGrup') + lcCursor = Select() + Select crsPaginiRaportGrup + Locate For id_grup = tnIdGrup + If Found() + lnPagina = pagina + Endif + Select (lcCursor) + Endif + Return lnPagina + Endfunc + ************************************** SFARSIT : frx_citestepagtotalgrup + ************************************** INCEPUT : export2frx + Procedure export2frx + Lparameters tcAlias, tcRaport, tlCereTitlu, tcSetareVizualizare, tcSetareImprimanta, tcParametriListare, toListener, tlMultiPreview, tcReportPreviewer, toPreviewerConfig + ** modificare 23.12.2008 : tcParametriListare, toListener + *!* Lparameters tcAlias, tcRaport, tlCereTitlu, tnVizualizare, tcSetareImprimanta, tcParametriListare + *!* ** tnVizualizare + *!* ** 1 - cu vizualizare + *!* ** 2 - listare directa + ** tcSetareImprimanta = numele setarii care va fi citita din registri + ** (valoarea ei reprezinta numele imprimantei pe care se va face listarea ) + ** tcParametriListare + ** NOEJECT NORESET + *!* This.cUserRepPath = This.getUserRepPath() + *!* 08.12.2010 + *!* tlMultiPreview = daca se foloseste reportpreview-ul din VFP9 cu FoxyPreview (salvare pdf, xls, rtf etc.) + *!* tcReportPreviewer - procedura pentru preview rapoarte "FoxyPreview" (default gcReportPreviewer) + *!* toPreviewerConfig - obiect PreviewerConfig cu setari pentru tcReportPreviewer + *!* loPreviewerConfig.SetValue("cDestFile", m.lcDestinationFile) + *!* loPreviewerConfig.SetValue("lOpenDestFile", .F.) + *!* loPreviewerConfig.SetValue("lPDFasImage", .T.) + Local llMultiPreview, lcReportPreviewer, loPreviewerConfig + Local lcImprimanta, lcImprimantaTemp, lcCaleRaport, llDataOraLocal, lcReportOutput, lcParametri, lcObiect + Local llDeleteRaport, llDeleteLogo, lcRaportPath, lcLogoPathDest + Private gcLogoPath, gcLogoOrizontalPath, gcTextFooterFact, gcStampilaPath, gcIsoPath + gcTextFooterFact = '' + gcLogoPath = '' + gcLogoOrizontalPath = '' + gcStampilaPath = '' + gcIsoPath = '' + llDeleteRaport = .F. + llDeleteLogo = .F. + lcRaportPath = '' + lcLogoPathDest = '' + + llMultiPreview = Iif(Type('tlMultiPreview') <> 'L', .F., tlMultiPreview) + lcReportPreviewer = Iif(Type('tcReportPreviewer') <> 'C' Or Empty(m.tcReportPreviewer), Iif(Type('gcReportPreviewer') = 'C', m.gcReportPreviewer, ""), m.tcReportPreviewer) + loPreviewerConfig = Iif(Type('toPreviewerConfig') <> 'O', Createobject("PreviewerConfig"), m.toPreviewerConfig) && oexport.prg + *!* 08.12.2010 ^ + + If Type('tcSetareVizualizare') = 'C' + *!* modificare ROARESTAURANT v 1.0.0 + *!* lnVizualizare = Iif(Empty(Nvl(tcSetareVizualizare,[])),1,Val(Nvl(This.citesteSetareRegistru(tcSetareVizualizare),[1]))) + lnVizualizare = Iif(Empty(Nvl(tcSetareVizualizare, [])), 1, Val(Nvl(This.citesteSetare(tcSetareVizualizare), [1]))) + *!* modificare ROARESTAURANT v 1.0.0 ^ + Else + lnVizualizare = tcSetareVizualizare + Endif + + This.setCursorCurent() + If This.verificaDate(tcAlias, 1) + llDataOraLocal = .F. + + *!* modificare 23.12.2008 + If !Empty(tcParametriListare) + lcParametri = tcParametriListare + Else + lcParametri = [] + Endif + *!* modificare 23.12.2008 ^ + + Do Case + Case Empty(lnVizualizare) Or lnVizualizare = 1 + lnVizualizare = 1 + lcParametri = [PROMPT PREVIEW ] + lcParametri + Case !Inlist(lnVizualizare, 1, 2) + lnVizualizare = 1 + lcParametri = [PROMPT PREVIEW ] + lcParametri + Otherwise + lcParametri = [PROMPT ] + lcParametri + Endcase + + If Type('pcDataOra') = 'U' + Private pcDataOra + pcDataOra = get_ora(2) + llDataOraLocal = .T. + Endif + + Aprinters(This.aImprimante) + If !Empty(tcSetareImprimanta) And Alen(This.aImprimante, 1) > 0 + ** verificare ca imprimanta este instalata pe calculatorul respectiv + *!* modificare ROARESTAURANT v 1.0.0 + *!* lcImprimanta = This.citesteSetareRegistru(tcSetareImprimanta) + lcImprimanta = This.citesteSetare(tcSetareImprimanta) + *!* modificare ROARESTAURANT v 1.0.0 ^ + If Ascan(This.aImprimante, lcImprimanta, 1, Alen(This.aImprimante, 1), 1, 15) = 0 + lcImprimanta = [] + *!* modificare ROARESTAURANT v 1.0.0 + This.modificaSetare(tcSetareImprimanta, lcImprimanta) + *!* modificare ROARESTAURANT v 1.0.0 ^ + Endif + Endif + + * Obtin calea catre raport (tcRaport / usr_tcRaport / usr_tcRaport_id_client) + * Verific daca exista un raport pentru clientul respectiv + + lnIdClient = 0 + lcCaleRaportClient = '' + IF TYPE('poDate.id_client') = 'N' AND !EMPTY(NVL(poDate.id_client,0)) + lnIdClient = poDate.id_client + ENDIF + *!* lcCaleRaport = This.cUserRepPath + [USR_] + Juststem(tcRaport) + [.FRX] + IF !EMPTY(m.lnIdClient) + lcRaportClient = STRTRAN(m.tcRaport, JUSTFNAME(m.tcRaport), JUSTFNAME(m.tcRaport) + '_' + ALLTRIM(STR(m.lnIdClient))) + lcCaleRaportClient = This.getRepPath(m.lcRaportClient) + ENDIF + IF !FILE(m.lcCaleRaportClient) + lcCaleRaport = This.getRepPath(tcRaport) + ELSE + lcCaleRaport = m.lcCaleRaportClient + ENDIF + poLog.Log('RepPath: ' + m.lcCaleRaport, Program()) + + *** Logo + gcLogoPath = This.getLogoPath('logo.jpg') + poLog.Log('LogoPath: ' + m.gcLogoPath, Program()) + + gcLogoOrizontalPath = This.getLogoPath('logo_orizontal.jpg') + poLog.Log('LogoOrizontalPath: ' + m.gcLogoOrizontalPath, Program()) + + gcIsoPath = This.getLogoPath('iso.jpg') + poLog.Log('IsoPath: ' + m.gcIsoPath, Program()) + + gcStampilaPath = This.getLogoPath('stampila.jpg') + poLog.Log('StampilaPath: ' + m.gcStampilaPath, Program()) + + * QR Code + IF TYPE('gnFACTURA_QR') <> 'U' AND m.gnFACTURA_QR > 0 + SET PROCEDURE TO 'D:\ROA\ROAFACTURARE\COMUN\utile\barcode\foxbarcodeqr.prg' ADDITIVE + PRIVATE poFbc + poFbc = CREATEOBJECT("FoxBarcodeQR") + poFbc.nCorrectionLevel = 1 && Level_H + gnQRSize=3 + lcQRText = IIF(m.gnFactura_Qr = 1, 'serie#nr#cod fiscal#total_plata', '') + gcQRPath = poFbc.FullQRCodeImage("https://comunidadvfp.blogspot.com",,132) + ENDIF + + + *!* gcLogoPath = ADDBS(JUSTPATH(m.lcCaleRaport)) + 'logo.jpg' + *!* gcLogoPath = FULLPATH(m.gcLogoPath) && directorul ROA (pentru rapoartele din executoabil) sau USERREPORTS (pentru rapoartele din USERREPORTS) + *!* If !File(m.gcLogoPath) + *!* IF TYPE('gcDirMare') = 'C' + *!* gcLogoPath = ADDBS(m.gcDirMare) + 'logo.jpg' && directorul ROA + *!* ELSE + *!* gcLogoPath = Addbs(Left(m.gcAppPath, Rat("\", m.gcAppPath, 2) - 1)) + 'logo.jpg' + *!* ENDIF + *!* If !File(m.gcLogoPath) + *!* gcLogoPath = ADDBS(JUSTPATH(m.gcLogoPath)) + 'USERREPORTS\logo.jpg' && directorul USERREPORTS + *!* ENDIF + *!* If !File(m.gcLogoPath) + *!* gcLogoPath = '' + *!* ENDIF + *!* ENDIF + *** Logo ^ + + *!* * daca raportul este in executabil si exista logo.jpg in USERREPORTS + *!* * extrag raportul din executabil in gcTempPath\usr_raport.frx + *!* * copii logo.jpg din directorul USERREPORTS (daca exista) in directorul gcTempPath, langa usr_raport.frx + *!* If !File(m.lcCaleRaport) + *!* lcCaleRaport = m.tcRaport + *!* + *!* lcRaport = Juststem(m.tcRaport) + [.FRX] + *!* lcRaportPath = Addbs(m.gcTempPath) + [USRX_] + m.lcRaport + *!* lcLogoPathDest = Addbs(m.gcTempPath) + "logo.jpg" + *!* + *!* If Used(Juststem(m.lcRaportPath)) + *!* Use In (Select(Juststem(m.lcRaportPath))) + *!* Endif + + *!* Use (m.lcRaport) In 0 Alias tmpRaport + *!* Select tmpRaport + *!* Copy To (m.lcRaportPath) + *!* Use In (Select('tmpRaport')) + *!* Use In Select(Juststem(m.lcRaport)) + + *!* IF EMPTY(m.gcLogoPath) OR !FILE(m.gcLogoPath) + *!* TEXT TO lcLogoTxt + *!* /9j/4AAQSkZJRgABAQEAYABgAAD/4QBmRXhpZgAATU0AKgAAAAgABAEaAAUAAAABAAAAPgEbAAUAAAABAAAARgEoAAMAAAABAAMAAAExAAIAAAAQAAAATgAAAAAAAJOjAAAD6AAAk6MAAAPocGFpbnQubmV0IDQuMS40AP/bAEMAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/bAEMBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAAEAAQMBIgACEQEDEQH/xAAfAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgv/xAC1EAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy8/T19vf4+fr/xAAfAQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgv/xAC1EQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2gAMAwEAAhEDEQA/AP7+KKKKAP/Z + *!* ENDTEXT + *!* STRTOFILE(STRCONV(m.lcLogoTxt,14), m.lcLogoPathDest) + *!* ELSE + *!* COPY FILE (m.lcLogoPath) TO (m.lcLogoPathDest) + *!* ENDIF + *!* gcLogoPath = m.lcLogoPathDest + *!* goLog.Log(gcLogoPath, PROGRAM()) + *!* llDeleteRaport = .T. + *!* llDeleteLogo = .T. + *!* ENDIF && !File(m.lcCaleRaport) + gcTextFooterFact = Iif(Type('GCTEXTFOOTERFACT1') = 'C' And !Empty(Nvl(m.GCTEXTFOOTERFACT1, '')), Allt(m.GCTEXTFOOTERFACT1), '') + ; + Iif(Type('GCTEXTFOOTERFACT2') = 'C' And !Empty(Nvl(m.GCTEXTFOOTERFACT2, '')), Chr(13) + Chr(10) + Allt(m.GCTEXTFOOTERFACT2), '') + ; + Iif(Type('GCTEXTFOOTERFACT3') = 'C' And !Empty(Nvl(m.GCTEXTFOOTERFACT3, '')), Chr(13) + Chr(10) + Allt(m.GCTEXTFOOTERFACT3), '') + ; + Iif(Type('GCTEXTFOOTERFACT4') = 'C' And !Empty(Nvl(m.GCTEXTFOOTERFACT4, '')), Chr(13) + Chr(10) + Allt(m.GCTEXTFOOTERFACT4), '') + ; + Iif(Type('GCTEXTFOOTERFACT5') = 'C' And !Empty(Nvl(m.GCTEXTFOOTERFACT5, '')), Chr(13) + Chr(10) + Allt(m.GCTEXTFOOTERFACT5), '') + + + If tlCereTitlu + If Type('pcTitlu') = 'U' + Private pcTitlu + Store '' To pcTitlu + Endif + pcTitlu = ceretitlu_rap('Titlul Raportului', pcTitlu) + Endif + + *!* modificare 23.12.2008 + If Type('toListener') = 'O' + If Empty(This.cReportOutput) + This.cReportOutput = gcAppPath + "ReportOutput.app" + Endif + If Empty(This.cReportPreview) + This.cReportPreview = gcAppPath + "ReportPreview.app" + Endif + _ReportOutput = This.cReportOutput + _ReportPreview = This.cReportPreview + lcObiect = [OBJECT toListener] + lcParametri = Strtran(Strtran(tcParametriListare, [PREVIEW], []), [PROMPT], []) + Else + lcObiect = [TO PRINTER] + Endif + *!* modificare 23.12.2008 ^ + + *!* modificare 19.06.2013 + If Type('otool') = 'O' + otool.tool1.Visible = .F. + otool.tool1.Dock(-1) + Endif + *!* modificare 19.06.2013 ^ + + Select (tcAlias) + lnRaspuns = 6 + Do While lnRaspuns = 6 + Try + *!* modificare 23.12.2008 + *!* If lnVizualizare = 1 + *!* Keyboard "{ctrl+f10}" + *!* Report Form (lcCaleRaport) To Printer Prompt Preview + *!* Else + *!* If !Empty(lcImprimanta) + *!* lcImprimantaTemp = Sys(6) + *!* Set Printer To (lcImprimanta) + *!* Report Form (lcCaleRaport) To Printer + *!* If !Empty(Nvl(lcImprimantaTemp,[])) + *!* Set Printer To (lcImprimantaTemp) + *!* Else + *!* Set Printer To + *!* Endif + *!* Else + *!* Report Form (lcCaleRaport) To Printer Prompt + *!* Endif + *!* Endif + lcImprimantaTemp = [] + If lnVizualizare = 1 + If !Empty(lcImprimanta) + lcImprimantaTemp = Sys(6) + Set Printer To Name (lcImprimanta) + Endif + Keyboard "{ctrl+f10}" + Else + If !Empty(lcImprimanta) + lcImprimantaTemp = Sys(6) + Set Printer To Name (lcImprimanta) + lcParametri = Strtran(lcParametri, [PROMPT], []) + Endif + Endif + + loPreviewerConfig.SetValue("nDockType", 0) && modificare 18.06.2013 + *!* 08.12.2010 + *!* Report Form (lcCaleRaport) &lcObiect &lcParametri + Do Case + Case !m.llMultiPreview + Report Form (m.lcCaleRaport) &lcObiect &lcParametri + Case Empty(m.lcReportPreviewer) + Report Form (lcCaleRaport) &lcObiect &lcParametri + Case Version(5) < 800 + Report Form (m.lcCaleRaport) &lcObiect &lcParametri + Otherwise + Try + lcOldReportBehaviour = Set("ReportBehavior") + + If Type('toListener') = 'O' + loPreviewerConfig.oListener = m.toListener + Endif + *!* If !EMPTY(m.lcParametri) + *!* loPreviewerConfig.cClauses = m.lcParametri + *!* ENDIF + Do &lcReportPreviewer With m.lcCaleRaport, m.loPreviewerConfig + + Set REPORTBEHAVIOR &lcOldReportBehaviour + Catch To loEx + Messagebox('Eroare: ' + loEx.Message + CRLF + 'Procedura: ' + loEx.Procedure + CRLF + 'Cod: ' + loEx.LineContents + CRLF + 'Linia nr: ' + Transform(loEx.Lineno), 0 + 32, _Screen.Caption) + Try + Set REPORTBEHAVIOR 80 && disable FoxyPreviewer + Report Form (m.lcCaleRaport) &lcObiect &lcParametri + Set REPORTBEHAVIOR 90 + Catch To loEx + Messagebox('Eroare: ' + loEx.Message + CRLF + 'Procedura: ' + loEx.Procedure + CRLF + 'Cod: ' + loEx.LineContents + CRLF + 'Linia nr: ' + Transform(loEx.Lineno), 0 + 32, _Screen.Caption) + Set REPORTBEHAVIOR 80 && disable FoxyPreviewer + *!* 31.05.2011 + Select (tcAlias) + *!* 31.05.2011 ^ + Report Form (m.lcCaleRaport) To Printer Prompt Preview + Set REPORTBEHAVIOR 90 + Endtry + Endtry + Endcase + *!* 08.12.2010 ^ + + If !Empty(Nvl(lcImprimantaTemp, [])) + Set Printer To Name (lcImprimantaTemp) + Else + Set Printer To + Endif + *!* modificare 23.12.2008 ^ + lnRaspuns = 7 + Catch To oEroare + If oEroare.Message = 'Error loading driver error.' + lnRaspuns = amessagebox("Eroare la driverul imprimantei.Doriti sa reincercati listarea?", 4 + 32 + 256, "Confirmare relistare") + Else + amessagebox(oEroare.Message, 16, "Eroare") + lnRaspuns = 7 + Endif + Endtry + Enddo + + *!* modificare 19.06.2013 + If Type('otool') = 'O' + otool.tool1.Dock(0, 0, 0) + otool.tool1.Visible = .T. + Endif + If Type('ohelp') = 'O' + ohelp.tool_help1.Visible = .F. + If Type('otool') = 'O' + ohelp.tool_help1.Dock(0, otool.tool1.Width, 0) + Else + ohelp.tool_help1.Dock(0) + Endif + ohelp.tool_help1.Visible = .T. + Endif + *!* modificare 19.06.2013 ^ + + If m.llDeleteRaport And File(m.lcRaportPath) + Delete File Forceext(m.lcRaportPath, '*') + Endif + If m.llDeleteLogo And File(m.lcLogoPathDest) + Delete File (m.lcLogoPathDest) + Endif + + If llDataOraLocal + Release pcDataOra + Endif + Endif + This.repuneCursorCurent() + Endproc && export2frx + ************************************** SFARSIT : export2frx + ************************************** INCEPUT : export2xls + Procedure export2xls + Lparameters tcAlias, tcNumeFisier, tcListaColoane, tcFiltru + Local lcDir, lcFisier, lcCursorTempXls, lcSelectie + *!* This.cUserRepPath = This.getUserRepPath() + This.setCursorCurent() + If This.verificaDate(tcAlias, 2) + lcCursorTempXls = [crsxprtxls] + + If Empty(tcNumeFisier) + tcNumeFisier = 'Foaie_Excel' + Endif + + lcFisier = Putfile('Nume fisier:', tcNumeFisier, 'XLS') + If Empty(lcFisier) && Esc pressed + Return + Endif + + If Empty(tcListaColoane) + Select (tcAlias) + Export To (lcFisier) Type Xl5 + Else + If Used(lcCursorTempXls) + Use In (lcCursorTempXls) + Endif + + lcSelectie = [SELECT ] + tcListaColoane + [ FROM ] + tcAlias + ; + Iif(!Empty(tcFiltru), [ WHERE ] + tcFiltru, []) + [ INTO CURSOR ] + lcCursorTempXls + &lcSelectie + Select (lcCursorTempXls) + Export To (lcFisier) Type Xl5 + Use In (lcCursorTempXls) + Endif + This.OPEN_DEFAULT_APP(lcFisier) + + Endif + This.repuneCursorCurent() + Endproc && export2xls + ************************************** SFARSIT : export2xls + + ************************************** INCEPUT : export2xlsx + Procedure export2xlsx + Lparameters tcAlias, tcNumeFisier, tcListaColoane, tcFiltru + Local lcDir, lcFisier, lcCursorTempXls, lcSelectie + Local llHead, llMemoAsComment, llOpen, lnCodePage, lnMaxIndexLen + *!* This.cUserRepPath = This.getUserRepPath() + + This.setCursorCurent() + If This.verificaDate(tcAlias, 2) + lcCursorTempXls = [crsxprtxls] + + If Empty(tcNumeFisier) + tcNumeFisier = 'Foaie_Excel' + Endif + + lcFisier = Putfile('Nume fisier:', tcNumeFisier, 'XLSX') + If Empty(lcFisier) && Esc pressed + Return + Endif + llHead = .T. + lnMaxIndexLen = 60 + llMemoAsComment = .F. + lnCodePage = 0 + llOpen = .T. + + If Empty(tcListaColoane) + copytoxlsx (m.tcAlias, m.lcFisier,llHead,lnMaxIndexLen,m.tcListaColoane,llMemoAsComment,lnCodePage,llOpen) + Else + Use In (SELECT(m.lcCursorTempXls)) + + lcSelectie = [SELECT ] + tcListaColoane + [ FROM ] + tcAlias + ; + Iif(!Empty(tcFiltru), [ WHERE ] + tcFiltru, []) + [ INTO CURSOR ] + lcCursorTempXls + &lcSelectie + + Select (lcCursorTempXls) + copytoxlsx (m.tcAlias, m.lcFisier,llHead,lnMaxIndexLen,m.tcListaColoane,llMemoAsComment,lnCodePage,llOpen) + Use In (SELECT(lcCursorTempXls)) + Endif + Endif + This.repuneCursorCurent() + Endproc && export2xlsx + ************************************** SFARSIT : export2xlsx + + ****************** + * Exporta coloanele unui grid in xlsxs + ****************** + Procedure export2xlsxGrid + Lparameters toGrid, tcNumeFisier, tcWhere, tcOrder + + If Type('toGrid') # 'O' + Return + Endif + + Local lcColumnList, lcHeaderList, lcSelect, llSelect, lcFrom, lcWhere, lcOrder, lcOutput + + lcFrom = toGrid.RecordSource + lcWhere = Iif(!Empty(tcWhere) And Type('tcWhere') = 'C', tcWhere, Filter(lcFrom)) + lcOrder = Iif(Empty(tcOrder) Or Type('tcOrder') # 'C', "", tcOrder) + lcColumnList = '' + lcHeaderList = '' + lcSelect = '' + llSelect = .T. + lcType = 'CURSOR' + + lcOutput = Sys(2015) + + get_schema_grid(toGrid,@lcColumnList, @lcHeaderList, @lcSelect, m.llSelect, m.lcType, m.lcFrom, m.lcWhere, m.lcOrder, m.lcOutput) + &lcSelect + + If Used(m.lcOutput) + This.export2xlsx(m.lcOutput, m.tcNumeFisier) + Use In (m.lcOutput) + Endif + + Endproc && export2xlsxGrid + + ************************************** INCEPUT : exportMultiTable2Xlsx + Procedure exportMultiTable2Xlsx + Lparameters tcTableList, tcFileName + + Local loExcel As "VFPxWorkbookXLSX" OF "VFPxWorkbookXLSX.vcx" + Local lcCursorTempXls, lcFisier, lcTable, llFreeze, llOpen, llSave, lnTable, lnTables + + This.setCursorCurent() + lcCursorTempXls = [crsxprtxls] + + If Empty(tcFileName) + tcFileName = 'Foaie_Excel' + Endif + + lcFisier = Putfile('Nume fisier:', m.tcFileName, 'xlsx') + If Empty(lcFisier) && Esc pressed + Return + Endif + llFreeze = .T. + llOpen = .T. + llSave = .T. + + loExcel = NEWOBJECT("VFPxWorkbookXLSX", "VFPxWorkbookXLSX.vcx") + lnTables = GETWORDCOUNT(m.tcTableList, ",") + FOR lnTable = 1 TO m.lnTables + lcTable = GETWORDNUM(m.tcTableList, m.lnTable, ",") + If USED(m.lcTable) + loExcel.SaveTableToWorkbook(m.lcTable, m.lcFisier, m.llFreeze, m.llSave) + ENDIF + * tcAlias, tnWB, tlFreeze, tlSaveWB, tcSheetName, tnSheet, tnBegRow, tnBegCol + ENDFOR + + This.open_default_app(m.lcFisier) + + This.repuneCursorCurent() + Endproc && export2xlsx2 + ************************************** SFARSIT : exportMultiTable2Xlsx + + ************************************** + * export xml cu extensia xls pentru a fi deschis de office + * poate exporta si grid + ************************************** + PROCEDURE Export2XmlXls + LPARAMETERS toGrid, tcFileName, tcSheetName, tlOpen + * toGrid (optional): referinta la grid sau numele unui cursor, default cursorul din zona curenta + * tcFileName (optional): numele fisierului + * tcSheetName (optional): numele sheet-ului, default 'Sheet 1' + * tlOpen (optional): se deschide xls dupa salvare, default .T. + + local loExcelXML, llOk, lcSelect + lcSelect = SELECT() + + lcFile = IIF(!EMPTY(m.tcFileName), m.tcFilename, SYS(2015) + '.xls') + lcFilePath = JUSTPATH(m.lcFile) + lcFileName = JUSTFNAME(m.lcFile) + IF EMPTY(m.lcFilePath) + lcFile = PUTFILE('XLS File', m.lcFileName, 'xls') + ENDIF + + + loExcelXML = CREATEOBJECT("ExcelXML") + loExcelXML.HasFilter = .t. + loExcelXML.LockHeader = .t. + loExcelXML.SheetName = IIF(!EMPTY(m.tcSheetName), m.tcSheetName, 'Sheet 1') + loExcelXML.OpenAfterSaving = IIF(PCOUNT()>=4, m.tlOpen, .T.) + + IF TYPE('toGrid') = 'O' + loExcelXML.GridObject = m.toGrid + ELSE + IF TYPE('toGrid') = 'C' AND USED(toGrid) + SELECT (m.toGrid) + ELSE + SELECT (m.lcSelect) + ENDIF + ENDIF + + llOk = loExcelXML.Save(m.lcFile) + SELECT (m.lcSelect) + RETURN m.llOk + ENDPROC && Export2XmlXls + + ************************************** INCEPUT : export2pdf + Procedure export2pdf + Lparameters tcAlias, tcRaport, tlPreview, tcCursorSalvare + Local llCaleModificata + llCaleModificata = .F. + This.setCursorCurent() + If This.verificaDate(tcAlias, 3, .T.) + *!* This.cUserRepPath = This.getUserRepPath() + *!* lcCaleRaport = This.cUserRepPath + [USR_] + Juststem(tcRaport) + [.FRX] + + lcCaleRaport = This.getRepPath(tcRaport) + + Local oL As pdflistener2 Of pdflistener.prg + oL = Newobject('pdflistener2', 'pdflistener.prg') + oL.enable_print = .T. + oL.enable_copy = .F. + *!* oL.user_passwd = Trim(Thisform.userpwd.Value) + Select (tcAlias) + If !Empty(This.cUserRepPath) + This.setCaleCurenta() + Set Path To (This.cUserRepPath) + llCaleModificata = .T. + Endif + + If tlPreview + Report Form (lcCaleRaport) Preview Object oL + Else + Report Form (lcCaleRaport) Object oL + Endif + If llCaleModificata + This.repuneCaleCurenta() + Endif + + If !Empty(tcCursorSalvare) + If Used(tcCursorSalvare) + Select (tcCursorSalvare) + Append Blank + Replace nume_frx With tcRaport, fisier With Filetostr(oL.pdfdoc) + Endif + Endif + If !tlPreview + Delete File(oL.pdfdoc) + Endif + Release oL + Endif + This.repuneCursorCurent() + Endproc && export2pdf + ************************************** SFARSIT : export2pdf + ************************************** INCEPUT : export2html + Procedure export2html + Lparameters tcTargetTables, tcNumeFisier, tcTableTitles, tlJustTables + *** tcTargetTables : lista cu tabelul/tabelele pentru export + *** tcNumeFisier: (optional) numele fisierului cu extensie (default "foaie_excel.xls") + *** tcTableTitles : (optional) titlurile tabelelor (default = tcTargetTables) + *** tlJustTables : (optional) doar codul pentru tabele, fara alte tag-uri + *** RETURN: creeaza un html cu extensia din tcNumeFisier si il deschide cu aplicatia implicita sau intoarce codul html pentru tabele in functie de tlJustTables + + Local lcOldError, lcTable, lcTextMergeFile, lcTextMergeFileFull, lcXLSName, lnField, lnTable + Local lnTables, lcTargetTables, lcXLS, lcTableTitles, llJustTables + Local lcExtensie, lcNumeFisier, lcReportTitle, lcTableTitle + lcXLS = "" + lcTargetTables = m.tcTargetTables + llJustTables = m.tlJustTables + + lcTableTitles = Iif(!Empty(m.tcTableTitles), m.tcTableTitles, m.lcTargetTables) + + lcNumeFisier = Iif(!Empty(m.tcNumeFisier), Lower(tcNumeFisier), "foaie_excel") + lcExtensie = Justext(tcNumeFisier) + lcExtensie = Iif(Empty(m.lcExtensie), 'html', m.lcExtensie) + + lcReportTitle = Strtran(Juststem(lcNumeFisier), "_", " ") && titlul raportului = numele fisierului + + lcTextMergeFileFull = Putfile('Nume fisier:', m.lcNumeFisier, m.lcExtensie) + If Empty(m.lcTextMergeFileFull) + Return + Endif + + This.setCursorCurent() + + Set Console Off + Set Textmerge On To Memvar lcXLS Noshow + + lnTables = Getwordcount(m.lcTargetTables, [,]) + + If !m.llJustTables +\ +\ +\ +\ +\ +\x +\ +\ +\ + Endif && llJustTables + + *** TITLU RAPORT + If !m.llJustTables + \

<>

+ Endif + + For lnTable = 1 To m.lnTables + lcTable = Getwordnum(m.lcTargetTables, m.lnTable, [,]) + + lcTableTitle = Getwordnum(m.lcTableTitles, m.lnTable, [,]) + If Empty(m.lcTableTitle) + lcTableTitle = m.lcTable + Endif + + If !Used(m.lcTable) + Loop + Endif + Select (m.lcTable) + + *** TITLU TABEL + If !m.llJustTables + \

<>

+ Endif + + *** TABEL +\ + *** CAP TABEL +\ + For lnField = 1 To Afields(laFields) &&headers + \ + Endfor +\ + *** DATE TABEL + Scan +\ + For lnField = 1 To Afields(laFields) + + Do Case &&Add Formats + Case (laFields(m.lnField, 2) = [N] Or laFields(m.lnField, 2) = [I] Or ; + laFields(m.lnField, 2) = [B]) And laFields(m.lnField, 3) <= 3&&Number/Decimal + \ + + Endfor +\ + Endscan +\
<>
>> + + Case (laFields(m.lnField, 2) = [N] Or laFields(m.lnField, 2) = [I] Or ; + laFields(m.lnField, 2) = [B]) And laFields(m.lnField, 3) > 3&&Commas/Decimal + \>> + + Case laFields(m.lnField, 2) = [D] Or laFields(m.lnField, 2) = [T]&&Date + \ + + Case laFields(m.lnField, 2) = [Y] &&Currency (US) + \ + + Otherwise &&Character + \ + + Endcase + &&STRTRAN allows html tags to work + \\<>
+ Endfor && lnTables + + If !m.llJustTables +\ + Endif + + Set Textmerge Off + Set Textmerge To + Set Console On + + If !m.llJustTables + Strtofile(m.lcXLS, m.lcTextMergeFileFull) + OPEN_DEFAULT_APP(m.lcTextMergeFileFull) + Else + Return m.lcXLS + Endif + Endproc && export2html + ************************************** SFARSIT : export2html + + ************************************** INCEPUT : listareUserReport + Procedure listareUserReport + Lparameters tcAlias, tcTipExport, tcRaport, tnVizualizare, tcSetare, tcFiltru + ** FRX >> + ** * tnVizualizare + ** 1 - cu vizualizare + ** 2 - listare directa + ** * tcSetare = numele setarii care va fi citita din registri + ** (valoarea ei reprezinta numele imprimantei pe care se va face listarea ) + ** XLS >> + ** * tnVizualizare + ** 1 - cursor + ** 2 - selectie din cursor dupa coloanele din tcSetare + ** * tcSetare = lista coloane selectie din tcAlias + Local lcTipExport, lnVizualizare + + If Type('tcTipExport') = 'C' + lcTipExport = Upper(Alltrim(tcTipExport)) + Else + amessagebox("Nu a fost configurat tipul exportului! (VFPEXP-001)", 16, "Eroare") + Return + Endif + If Empty(tcAlias) + amessagebox("Nu au fost configurate datele! (VFPEXP-002)", 16, "Eroare") + Return + Endif + If !Used(tcAlias) + amessagebox("Nu exista datele! (VFPEXP-003)", 16, "Eroare") + Return + Endif + If Empty(tnVizualizare) + lnVizualizare = 1 + Else + lnVizualizare = tnVizualizare + Endif + If Reccount(tcAlias) = 0 + amessagebox("Nu exista inregistrari pentru " + Iif(lcTipExport = [FRX], "listare", "export") + " !", 0 + 48, "Atentie") + Return + Endif + This.cCursorCurent = Select() + Do Case + Case lcTipExport = 'FRX' + This.export_frx(m.tcAlias, m.tcRaport, m.lnVizualizare, m.tcSetare) + Case lcTipExport = 'XLS' + This.export_xls(tcAlias, tcRaport, lnVizualizare, tcSetare, tcFiltru) + Endcase + Select (This.cCursorCurent) + Endproc + ************************************** SFARSIT : listareUserReport + ************************************** INCEPUT : export_frx + Procedure export_frx + Lparameters tcAlias, tcRaport, tnVizualizare, tcSetare + + Local lcImprimanta, lcImprimantaTemp, lcCaleRaport, llDataOraLocal + Local llDeleteRaport, lcRaportPath + Private gcLogoPath + gcLogoPath = '' + llDeleteRaport = .F. + llDeleteLogo = .F. + llDataOraLocal = .F. + lcRaportPath = '' + + If Type('pcDataOra') = 'U' + Private pcDataOra + pcDataOra = get_ora(2) + llDataOraLocal = .T. + Endif + + Aprinters(This.aImprimante) + If !Empty(tcSetare) And Alen(This.aImprimante, 1) > 0 + *!* verificare ca imprimanta este instalata pe calculatorul respectiv + *!* modificare ROARESTAURANT v 1.0.0 + *!* lcImprimanta = This.citesteSetareRegistru(tcSetare) + lcImprimanta = This.citesteSetare(tcSetare) + *!* modificare ROARESTAURANT v 1.0.0 ^ + If Ascan(This.aImprimante, lcImprimanta, 1, Alen(This.aImprimante, 1), 1, 15) = 0 + lcImprimanta = [] + *!* modificare ROARESTAURANT v 1.0.0 ^ + *!* This.modificaSetareRegistru(tcSetare,lcImprimanta) + This.modificaSetare(tcSetare, lcImprimanta) + *!* modificare ROARESTAURANT v 1.0.0 ^ + Endif + Endif + + *** Logo + lcLogoPath = This.cUserRepPath + 'logo.jpg' + If !File(lcLogoPath) + lcLogoPath = '' + Endif + *** Logo ^ + + lcCaleRaport = This.cUserRepPath + [USR_] + Juststem(tcRaport) + [.FRX] + *** Logo + gcLogoPath = Addbs(Justpath(m.lcCaleRaport)) + 'logo.jpg' + gcLogoPath = Fullpath(m.gcLogoPath) && directorul ROA (pentru rapoartele din executoabil) sau USERREPORTS (pentru rapoartele din USERREPORTS) + If !File(m.gcLogoPath) + If Type('gcDirMare') = 'C' + gcLogoPath = Addbs(m.gcDirMare) + 'logo.jpg' && directorul ROA + Else + gcLogoPath = Addbs(Left(m.gcAppPath, Rat("\", m.gcAppPath, 2) - 1)) + 'logo.jpg' + Endif + If !File(m.gcLogoPath) + gcLogoPath = Addbs(Justpath(m.gcLogoPath)) + 'USERREPORTS\logo.jpg' && directorul USERREPORTS + Endif + If !File(m.gcLogoPath) + gcLogoPath = '' + Endif + Endif + *** Logo ^ + + If !Empty(m.tcAlias) And Used(m.tcAlias) + Select (tcAlias) + Endif + + lnRaspuns = 6 + Do While m.lnRaspuns = 6 + Try + *!* If !Empty(toListener) + *!* Report Form (lcRaportPath) Object toListener + *!* Else + If tnVizualizare = 1 + Keyboard "{ctrl+f10}" + Report Form (m.lcCaleRaport) To Printer Prompt Preview + Else + If !Empty(lcImprimanta) + lcImprimantaTemp = Sys(6) + Set Printer To Name (lcImprimanta) + Report Form (lcCaleRaport) To Printer + If !Empty(Nvl(lcImprimantaTemp, [])) + Set Printer To Name (lcImprimantaTemp) + Else + Set Printer To + Endif + Else + Report Form (m.lcCaleRaport) To Printer Prompt + Endif + *!* Endif + Endif + lnRaspuns = 7 + Catch To oEroare + If oEroare.Message = 'Error loading driver error.' + lnRaspuns = amessagebox("Eroare la driverul imprimantei.Doriti sa reincercati listarea?", 4 + 32 + 256, "Confirmare relistare") + Else + amessagebox(oEroare.Message, 16, "Eroare") + lnRaspuns = 7 + Endif + Endtry + Enddo + + If m.llDeleteRaport And File(m.lcRaportPath) + Delete File Forceext(m.lcRaportPath, '*') + Endif + + + If m.llDataOraLocal + Release pcDataOra + Endif + Endproc && export_frx + ************************************** SFARSIT : export_frx + ************************************** INCEPUT : export_xls + Procedure export_xls + Lparameters tcAlias, tcNumeFisier, tnVizualizare, tcListaColoane, tcFiltru + Local lcDir, lcFisier, lcCursorTempXls, lcSelectie + lcCursorTempXls = [crsxprtxls] + + If Empty(tcNumeFisier) + tcNumeFisier = 'Foaie_Excel' + Endif + + If Used(tcAlias) + lcDir = Addbs(This.cTempPath) + + lcFisier = Putfile('Nume fisier:', tcNumeFisier, 'XLS') + If Empty(lcFisier) && Esc pressed + Return + Endif + + If tnVizualizare = 1 + Select (tcAlias) + Export To (lcFisier) Type Xl5 + Else + If Used(lcCursorTempXls) + Use In (lcCursorTempXls) + Endif + + lcSelectie = [SELECT ] + tcListaColoane + [ FROM ] + tcAlias + ; + Iif(!Empty(tcFiltru), [ WHERE ] + tcFiltru, []) + [ INTO CURSOR ] + lcCursorTempXls + &lcSelectie + Select (lcCursorTempXls) + Export To (lcFisier) Type Xl5 + Use In (lcCursorTempXls) + Endif + This.OPEN_DEFAULT_APP(lcFisier) + + Endif + Endproc && export_xls + ************************************** SFARSIT : export_xls + + * Intoarce un obiect oInfo.cFile, lOk, cMesaj + PROCEDURE export2xml_efactura + LPARAMETERS toDateFactura, tcCursorLiniiFactura, tlSilentios + * toDateFactura = obiect cu datele din capul de factura + * tcCursorLiniiFactura = numele cursorului cu liniile facturii, asa cum arata la listare + * tlSilentios .T. + LOCAL lcFile, loInfo + loInfo = getXmlEFactura(toDateFactura, tcCursorLiniiFactura, tlSilentios) && IN xmlEFactura.prg + RETURN loInfo + ENDPROC && export2xml_efactura +Enddefine + + +*!* Foxy Previewer mod simplificat FoxyPreviewer.app. Rapoartele trebuie sa existe fizic pe disc +Procedure FoxyPreview + Lparameters tcRaport, toPreviewerConfig && tcDestinationFile, tlDontOpenFile + + *** + Local loException As Exception + Local lcVersionFoxyPreview, lcWebsiteFoxyPreview, llDirectPrint + Local lRetVal, laProps[1], lcExtension, lcExtension2, lcFile, lcProperty, lnProperty, loDestinatie, loSursa, lcOldReportBehaviour + + lcVersionFoxyPreview = "v2.99z30-20130913" + lcWebsiteFoxyPreview = "http://foxypreviewer.codeplex.com/releases/view/49471" + *** + + Local lcRaport, lcFoxyPath, lcComunPath + Local llOpenDestinationFile, llPDFasImage, lcDestinationFile, lcExtension, lcObjType, lcPreview + + llOpenDestinationFile = .T. + llDirectPrint = .F. && trimite direct la imprimanta, fara preview + + If Type('toPreviewerConfig') <> 'O' + toPreviewerConfig = Createobject("PreviewerConfig") + Endif + + llOpenDestinationFile = Iif(Type('toPreviewerConfig.lOpenViewer') <> 'U', Nvl(toPreviewerConfig.lOpenViewer, .T.), .T.) + llDirectPrint = Iif(Type('toPreviewerConfig.lDirectPrint') <> 'U', Nvl(toPreviewerConfig.lDirectPrint, .F.), .F.) + lcDestinationFile = Iif(Type('toPreviewerConfig.cDestFile') <> 'U', Nvl(toPreviewerConfig.cDestFile, ''), '') + llPDFasImage = Iif(Type('toPreviewerConfig.lPDFasImage') <> 'U', Nvl(toPreviewerConfig.lPDFasImage, .F.), .F.) + + lcRaport = Forceext(tcRaport, 'frx') + + *goLog.Log('lcRaport ' + m.lcRaport, 'FoxyPreviewerSimple') + *goLog.Log('gcReportPreviewerPath ' + m.gcReportPreviewerPath, 'FoxyPreviewerSimple') + + lcFoxyPath = Iif(Type('gcReportPreviewerPath') = 'C', Addbs(gcReportPreviewerPath) + "FoxyPreviewer.App", "FoxyPreviewer.App") + *goLog.Log('lcFoxyPath ' + m.lcFoxyPath, 'FoxyPreviewerSimple') + + If !File(lcFoxyPath) + *goLog.Log('!FILE(lcFoxyPath)', 'FoxyPreviewerSimple') + + lcComunPath = Left(Addbs(gcAppPath), Rat('\', Addbs(gcAppPath), 2)) + 'COMUNCONTAFIN\' + If !Directory(m.lcComunPath) + lcComunPath = Left(Addbs(gcAppPath), Rat('\', Addbs(gcAppPath), 2)) + 'COMUNROA\' + Endif + lcFoxyPath = lcComunPath + "FoxyPreviewer.App" + *goLog.Log('lcFoxyPath ' + m.lcFoxyPath, 'FoxyPreviewerSimple') + If !File(lcFoxyPath) + lcFoxyPath = Addbs(Getfile("app", "FoxyPreviewer.App", "Open", 0, "Alegeti locatia " + m.lcFoxyPath)) + Endif + Endif + + If Empty(Nvl(lcFoxyPath, '')) + Report Form (m.tcRaport) To Printer Prompt Preview + Return + Endif + + If Type('_Screen.oFoxyPreviewer') <> 'O' + *goLog.Log([TYPE('_Screen.oFoxyPreviewer') <> 'O' ] + m.lcFoxyPath, 'FoxyPreviewerSimple') + Do (m.lcFoxyPath) + Else + If Isnull(_Screen.oFoxyPreviewer) + *goLog.Log([ISNULL(_Screen.oFoxyPreviewer) ] + m.lcFoxyPath, 'FoxyPreviewerSimple') + Do (m.lcFoxyPath) + Endif + Endif + + ********************************************** + * Optional available parameters + ********************************************** + If Type('_Screen.oFoxyPreviewer') = 'O' And Type('toPreviewerConfig') = 'O' And !Isnull(_Screen.oFoxyPreviewer) And !Isnull(toPreviewerConfig) + loSursa = m.toPreviewerConfig + loDestinatie = _Screen.oFoxyPreviewer + lRetVal = .T. + + = Amembers(laProps, m.loDestinatie) + + For m.lnProperty = 1 To Alen(laProps, 1) + lcProperty = laProps[m.lnProperty] + If Pemstatus(m.loSursa, m.lcProperty, 5) + Try + loDestinatie.&lcProperty = loSursa.&lcProperty + Catch To loException + If loException.ErrorNo = 1743 && property is read-only + * nu face nimic + Endif + Endtry + Endif && pemstatus + Endfor && lnProperty + Endif && type + + *!* modificare MA 03.12.2013 + If Type('_Screen.oFoxyPreviewer') = 'O' + ********************************* + * Agenda email + ********************************* + If Used('cparteneriemail') + _Screen.oFoxyPreviewer.cAdressTable = "cparteneriemail" + _Screen.oFoxyPreviewer.cAdressSearch = "denumire" + Endif + + * Limba + If Pemstatus(_Screen.oFoxyPreviewer, 'cLanguage', 5) + If Type('gcLocale') = 'C' + _Screen.oFoxyPreviewer.cLanguage = Upper(gcLocale) + Else + _Screen.oFoxyPreviewer.cLanguage = [ROMANA] + Endif + Endif + Endif + *!* modificare MA 03.12.2013 ^ + + If Empty(Justpath(m.lcRaport)) && raporte in executabil - trebuie create pe disc + + * Retrieve the FRX and FRT files from the EXE + lcFile = Addbs(Getenv("TEMP")) + 'tmp_fp_' + Juststem(m.lcRaport) + '_' + Sys(2) + "." + poLog.Log('lcFile ' + m.lcFile, Program()) + poLog.Log('lcRaport ' + m.lcRaport, Program()) + If Empty(Sys(2000, m.lcRaport)) + poLog.Log('Empty SYS(2000, lcRaport)', Program()) + Strtofile(Filetostr(Forceext(lcRaport, "FRX")), lcFile + "frx") + poLog.Log('Forceext(lcRaport,"FRX") ' + Forceext(lcRaport, "FRX") + ' lcFile + frx: ' + m.lcFile + "frx", Program()) + + Strtofile(Filetostr(Forceext(lcRaport, "FRT")), lcFile + "frt") + poLog.Log('Forceext(lcRaport,"FRT") ' + Forceext(lcRaport, "FRT") + ' lcFile + frt: ' + m.lcFile + "frt", Program()) + + lcFile = lcFile + "frx" + Else + lcFile = m.lcRaport + Endif + Else + lcFile = m.lcRaport + Endif + + *goLog.Log([lcFile ] + m.lcFile, 'FoxyPreviewerSimple') + + lcOldReportBehaviour = Set("ReportBehavior") + IF TYPE('gnReportBehaviour') = 'N' + SET REPORTBEHAVIOR (m.gnReportBehaviour) + ELSE + Set REPORTBEHAVIOR 90 + ENDIF + If !Empty(m.lcDestinationFile) + && OBJTYPE 10 = PDF , 11 = PDF AS IMAGE , 12 = RTF , 13 = XLS , 14 = HTML + lcExtension = Upper(Justext(m.lcDestinationFile)) + lcObjType = Iif(m.lcExtension = 'PDF' And m.llPDFasImage, '11', Iif(m.lcExtension = 'PDF', '10', Iif(m.lcExtension = 'RTF', '12', Iif(m.lcExtension = 'XLS', '13', '14')))) + lcPreview = Iif(m.llOpenDestinationFile, 'PREVIEW', '') + Report Form (m.lcFile) Object Type &lcObjType To File (m.lcDestinationFile) &lcPreview + ELSE + lcPreview = IIF(m.llDirectPrint, 'TO PRINTER', 'PREVIEW') + Report Form (m.lcFile) &lcPreview + Endif + Set REPORTBEHAVIOR &lcOldReportBehaviour + + *** DELETE TEMP FILES + If Left(Justfname(m.lcFile), 7) = "tmp_fp_" && We have a temp ??X, ??T files to delete + Try + Delete File (m.lcFile) + lcExtension = Justext(m.lcFile) + lcExtension2 = Stuff(m.lcExtension, Len(m.lcExtension), 1, [T]) + Delete File Forceext(m.lcFile, m.lcExtension2) + Catch + Endtry + Endif + +Endproc && FoxyPreviewSimple + +*!* Previewer rapoarte - foloseste gcReportPreviewerPath / gcAppPath pentru localizarea FoxyPreviewer.App +Procedure FoxyPreviewOld + Lparameters tcRaport, toPreviewerConfig && tcDestinationFile, tlDontOpenFile + + *** + Local lcVersionFoxyPreview, lcWebsiteFoxyPreview + lcVersionFoxyPreview = "2.41a" + lcWebsiteFoxyPreview = "http://foxypreviewer.codeplex.com/releases/view/49471" + *** + + Local lcRaport, lcFoxyPath, lcComunPath + Local llOpenDestinationFile + llOpenDestinationFile = .T. + + If Type('toPreviewerConfig') <> 'O' + toPreviewerConfig = Createobject("PreviewerConfig") + Endif + + lcRaport = Forceext(tcRaport, 'frx') + lcFoxyPath = Iif(Type('gcReportPreviewerPath') = 'C', Addbs(gcReportPreviewerPath) + "FoxyPreviewer.App", "FoxyPreviewer.App") + If !File(lcFoxyPath) + lcComunPath = Left(Addbs(gcAppPath), Rat('\', Addbs(gcAppPath), 2)) + 'COMUNCONTAFIN\' + If !Directory(m.lcComunPath) + lcComunPath = Left(Addbs(gcAppPath), Rat('\', Addbs(gcAppPath), 2)) + 'COMUNROA\' + Endif + lcFoxyPath = lcComunPath + "FoxyPreviewer.App" + If !File(lcFoxyPath) + lcFoxyPath = Addbs(Getfile("app", "FoxyPreviewer.App", "Open", 0, "Alegeti locatia " + m.lcFoxyPath)) + Endif + Endif + + If Empty(Nvl(lcFoxyPath, '')) + Report Form (m.tcRaport) To Printer Prompt Preview + Return + Endif + + If !'FOXYPREVIEWER' $ Upper(Set("Procedure")) + Set Procedure To (lcFoxyPath) Additive + Endif + + + If Empty(Justpath(m.lcRaport)) && raporte in executabil - trebuie create pe disc + Local loReport As "FoxyPreviewerCaller" && Of "FoxyPreviewerCaller.Prg" + loReport = Createobject("FoxyPreviewerCaller") + Else && rapoarte pe disc + Local loReport As "PreviewHelper" Of "FoxyPreviewer.App" + loReport = Createobject("PreviewHelper") + Endif + + If Type('loReport') <> 'O' + Report Form (m.tcRaport) To Printer Prompt Preview + Return + Endif + + With loReport As ReportHelper + .AddReport(m.lcRaport, toPreviewerConfig.GetValue("cClauses")) + + ********************************************** + * Optional available parameters + ********************************************** + Try + If Not Isnull(toPreviewerConfig.GetValue("cTitle")) + .cTitle = toPreviewerConfig.GetValue("cTitle") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("lSendToEmail")) + .lSendToEmail = toPreviewerConfig.GetValue("lSendToEmail") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("lSaveToFile")) + .lSaveToFile = toPreviewerConfig.GetValue("lSaveToFile") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("lShowCopies")) + .lShowCopies = toPreviewerConfig.GetValue("lShowCopies") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("lShowMiniatures")) + .lShowMiniatures = toPreviewerConfig.GetValue("lShowMiniatures") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("lShowSetup")) + .lShowSetup = toPreviewerConfig.GetValue("lShowSetup") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("lShowSearch")) + .lShowSearch = toPreviewerConfig.GetValue("lShowSearch") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("lPrintVisible")) + .lPrintVisible = toPreviewerConfig.GetValue("lPrintVisible") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("lPrinterPref")) + .lPrinterPref = toPreviewerConfig.GetValue("lPrinterPref") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("nCopies")) + .nCopies = toPreviewerConfig.GetValue("nCopies") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("lPrintVisible")) + .lPrintVisible = toPreviewerConfig.GetValue("lPrintVisible") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("cDefaultListener")) + .cDefaultListener = toPreviewerConfig.GetValue("cDefaultListener") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("cSuccessor")) + .cSuccessor = toPreviewerConfig.GetValue("cSuccessor") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("lUseListener")) + .lUseListener = toPreviewerConfig.GetValue("lUseListener") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("nCanvasCount")) + .nCanvasCount = toPreviewerConfig.GetValue("nCanvasCount") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("nZoomLevel")) + .nZoomLevel = toPreviewerConfig.GetValue("nZoomLevel ") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("oListener")) + .oListener = toPreviewerConfig.GetValue("oListener") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("cPrinterName")) + .cPrinterName = toPreviewerConfig.GetValue("cPrinterName") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("lSaveAsImage")) + .lSaveAsImage = toPreviewerConfig.GetValue("lSaveAsImage") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("lSaveAsHTML")) + .lSaveAsHTML = toPreviewerConfig.GetValue("lSaveAsHTML") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("lSaveAsRTF")) + .lSaveAsRTF = toPreviewerConfig.GetValue("lSaveAsRTF") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("lSaveAsXLS")) + .lSaveAsXLS = toPreviewerConfig.GetValue("lSaveAsXLS") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("lSaveAsPDF")) + .lSaveAsPDF = toPreviewerConfig.GetValue("lSaveAsPDF") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("nWindowState")) + .nWindowState = toPreviewerConfig.GetValue("nWindowState") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("nDockType")) + .nDockType = toPreviewerConfig.GetValue("nDockType") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("nMaxMiniatureDisplay")) + .nMaxMiniatureDisplay = toPreviewerConfig.GetValue("nMaxMiniatureDisplay") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("nPDFPageMode")) + .nPDFPageMode = toPreviewerConfig.GetValue("nPDFPageMode") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("nShowToolBar")) + .nShowToolBar = toPreviewerConfig.GetValue("nShowToolBar") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("lShowPrinters")) + .lShowPrinters = toPreviewerConfig.GetValue("lShowPrinters") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("cFormIcon")) + .cFormIcon = toPreviewerConfig.GetValue("cFormIcon") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("cLanguage")) + .cLanguage = toPreviewerConfig.GetValue("cLanguage") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("lEmailAuto")) + .lEmailAuto = toPreviewerConfig.GetValue("lEmailAuto") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("cEmailType")) + .cEmailType = toPreviewerConfig.GetValue("cEmailType") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("cEmailPRG")) + .cEmailPRG = toPreviewerConfig.GetValue("cEmailPRG") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("lEmailed")) + .lEmailed = toPreviewerConfig.GetValue("lEmailed") + Endif + + *!* 2010-09-17 - Jacques Parent - Add the cSaveDefName + If Not Isnull(toPreviewerConfig.GetValue("cSaveDefName")) + .cSaveDefName = toPreviewerConfig.GetValue("cSaveDefName") + Endif + + *!* IF NOT ISNULL(toPreviewerConfig.GetValue("cCodePage") + *!* .cCodePage = toPreviewerConfig.GetValue("cCodePage + *!* ENDIF + + If Not Isnull(toPreviewerConfig.GetValue("nEmailMode")) + .nEmailMode = toPreviewerConfig.GetValue("nEmailMode") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("cSMTPServer")) + .cSMTPServer = toPreviewerConfig.GetValue("cSMTPServer") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("nSMTPPort")) + .nSMTPPort = toPreviewerConfig.GetValue("nSMTPPort") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("lSMTPUseSSL")) + .lSMTPUseSSL = toPreviewerConfig.GetValue("lSMTPUseSSL") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("cSMTPUserName")) + .cSMTPUserName = toPreviewerConfig.GetValue("cSMTPUserName") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("cSMTPPassword")) + .cSMTPPassword = toPreviewerConfig.GetValue("cSMTPPassword") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("cEmailTo")) + .cEmailTo = toPreviewerConfig.GetValue("cEmailTo") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("cEmailSubject")) + .cEmailSubject = toPreviewerConfig.GetValue("cEmailSubject") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("cEmailBody")) + .cEmailBody = toPreviewerConfig.GetValue("cEmailBody") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("cEmailFrom")) + .cEmailFrom = toPreviewerConfig.GetValue("cEmailFrom") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("nButtonSize")) + .nButtonSize = toPreviewerConfig.GetValue("nButtonSize") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("cDestFile")) + .cDestFile = toPreviewerConfig.GetValue("cDestFile") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("cEmailCC")) + .cEmailCC = toPreviewerConfig.GetValue("cEmailCC") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("cEmailBCC")) + .cEmailBCC = toPreviewerConfig.GetValue("cEmailBCC") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("cEmailReplyTo")) + .cEmailReplyTo = toPreviewerConfig.GetValue("cEmailReplyTo") + Endif + + .lAutoSendMail = !Isnull(toPreviewerConfig.GetValue("cDestFile")) And toPreviewerConfig.GetValue("lAutoSendMail") + *!* *!* proprietatea exista in versiunea 2.01c + *!* If Type('lAutoSendMail') <> 'U' And Type('loReport.lAutoSendMail') <> 'U' And Not Isnull(This.lAutoSendMail) + *!* .lAutoSendMail = NOT ISNULL(This.cDestFile) AND This.lAutoSendMail + *!* ._lSendingEmail = .lAutoSendMail + *!* ENDIF + + If Not Isnull(toPreviewerConfig.GetValue("lSilent")) + .lSilent = toPreviewerConfig.GetValue("lSilent") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("lDirectPrint")) And toPreviewerConfig.GetValue("lDirectPrint") + .lDirectPrint = .T. + Endif + + If Not Isnull(toPreviewerConfig.GetValue("lSaveAsTXT")) + .lSaveAsTXT = toPreviewerConfig.GetValue("lSaveAsTXT") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("cOutputPath")) + .cOutputPath = toPreviewerConfig.GetValue("cOutputPath") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("nPrinterProptype")) + .nPrinterProptype = toPreviewerConfig.GetValue("nPrinterProptype") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("nThermType")) + .nThermType = toPreviewerConfig.GetValue("nThermType") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("nSearchPages")) + .nSearchPages = toPreviewerConfig.GetValue("nSearchPages") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("cDecryptProcedure")) + .cDecryptProcedure = toPreviewerConfig.GetValue("cDecryptProcedure") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("cEncryptProcedure")) + .cEncryptProcedure = toPreviewerConfig.GetValue("cEncryptProcedure") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("cCryptKey")) + .cCryptKey = toPreviewerConfig.GetValue("cCryptKey") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("lReadReceipt")) + .lReadReceipt = toPreviewerConfig.GetValue("lReadReceipt") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("lPriority")) + .lPriority = toPreviewerConfig.GetValue("lPriority") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("cEmailBodyFile")) + .cEmailBodyFile = toPreviewerConfig.GetValue("cEmailBodyFile") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("lPDFEmbedFonts")) + .lPDFEmbedFonts = toPreviewerConfig.GetValue("lPDFEmbedFonts") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("lPDFCanPrint")) + .lPDFCanPrint = toPreviewerConfig.GetValue("lPDFCanPrint") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("lPDFCanEdit")) + .lPDFCanEdit = toPreviewerConfig.GetValue("lPDFCanEdit") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("lPDFCanCopy")) + .lPDFCanCopy = toPreviewerConfig.GetValue("lPDFCanCopy") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("lPDFCanAddNotes")) + .lPDFCanAddNotes = toPreviewerConfig.GetValue("lPDFCanAddNotes") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("lPDFEncryptDocument")) + .lPDFEncryptDocument = toPreviewerConfig.GetValue("lPDFEncryptDocument") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("cPDFMasterPassword")) + .cPDFMasterPassword = toPreviewerConfig.GetValue("cPDFMasterPassword") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("cPDFUserPassword")) + .cPDFUserPassword = toPreviewerConfig.GetValue("cPDFUserPassword") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("lOpenViewer")) + .lOpenViewer = toPreviewerConfig.GetValue("lOpenViewer") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("cPdfAuthor")) + .cPdfAuthor = toPreviewerConfig.GetValue("cPdfAuthor") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("cPdfTitle")) + .cPdfTitle = toPreviewerConfig.GetValue("cPdfTitle") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("cPdfSubject")) + .cPdfSubject = toPreviewerConfig.GetValue("cPdfSubject") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("cPdfKeyWords")) + .cPdfKeyWords = toPreviewerConfig.GetValue("cPdfKeyWords") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("cPdfCreator")) + .cPdfCreator = toPreviewerConfig.GetValue("cPdfCreator") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("lPDFShowErrors")) + .lPDFShowErrors = toPreviewerConfig.GetValue("lPDFShowErrors") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("cPDFSymbolFontsList")) + .cPDFSymbolFontsList = toPreviewerConfig.GetValue("cPDFSymbolFontsList") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("cAdressTable")) + .cAdressTable = toPreviewerConfig.GetValue("cAdressTable") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("cAdressSearch")) + .cAdressSearch = toPreviewerConfig.GetValue("cAdressSearch") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("cAttachments")) + .cAttachments = toPreviewerConfig.GetValue("cAttachments") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("lShowClose")) + .lShowClose = toPreviewerConfig.GetValue("lShowClose") + Endif + + If Not Isnull(toPreviewerConfig.GetValue("cPDFDefaultFont")) + .cPDFDefaultFont = toPreviewerConfig.GetValue("cPDFDefaultFont") + Endif + *!* 31.05.2011 + If Not Isnull(toPreviewerConfig.GetValue("lOpenDestFile")) + .lOpenViewer = toPreviewerConfig.GetValue("lOpenDestFile") + Endif + *!* 31.05.2011 ^ + Catch To loEx + Endtry + ********************************************** + loReport.RunReport() + + *!* llOpenDestinationFile = toPreviewerConfig.GetValue("lOpenDestFile") && automatically open the destination file after save + + *!* If m.llOpenDestinationFile + *!* Do Case + *!* Case .lPrinted + *!* *!* Messagebox("Report was printed !",64, "Report status") + *!* Case loReport.lSaved + *!* Messagebox("Raportul a fost salvat ca fisier: " + Chr(13) + .cDestFile, 64, _Screen.Caption) + *!* =OPEN_DEFAULT_APP(.cDestFile) + + *!* *!* Otherwise + *!* *!* Messagebox("Report Preview was closed without saving or printing",48, "Report status") + + *!* Endcase + *!* Endif + + Endwith + +Endproc && FoxyPreview + + +*!* clasa pentru preview frx din executabil - le salveaza pe disc si apoi le previzualizeaza +Define Class FoxyPreviewerCaller As Custom + *** + cVersionFoxyPreview = "2.41a" + cWebsiteFoxyPreview = "http://foxypreviewer.codeplex.com/releases/view/49471" + *** + cPrinterName = Null && SET("Printer",3) + + lSaveToFile = Null && = .T. && adds the save to file button + lSendToEmail = Null && = .T. && adds the send to email button + lPrintVisible = Null && = .T. && shows the print button in the toolbar + lShowCopies = Null && = .T. && shows the copies spinner + lShowMiniatures = Null && = .T. && shows the miniatures page + lShowSetup = Null && = .T. && shows the setup configuration form + lPrinterPref = Null && = .T. && shows the printer preferences button + lShowSearch = Null + lShowClose = Null + + lClearPrinterInfo = .T. && NULL && = .T. && clears the EXPR, TAG, TAG2 fields of the FRX + + * Output types allowed in the "Save as.." button from the toolbar + lSaveAsImage = Null && = .T. + lSaveAsHTML = Null && = .T. + lSaveAsRTF = Null && = .T. + lSaveAsXLS = Null && = .T. + lSaveAsPDF = Null && = .T. + lSaveAsTXT = Null + cOutputPath = Null + + nPageTotal = Null && = 0 && Total pages of the current report + nCopies = Null && = 1 && The quantity of copies to be printed + cTitle = Null && = "" && The preview window title + oListener = Null + cDefaultListener = Null && = "FOXYLISTENER" + cSuccessor = Null + lUseListener = Null && = .T. + + nCanvasCount = Null && = 1 && initial nr of pages rendered on the preview form. + && Valid values are 1 (default), 2, or 4. + + nZoomLevel = Null && = 5 && initial zoom level of the preview window. Possible values are: + && 1-10%, 2-25%, 3-50%, 4-75%, 5-100% default, 6-150% ; + && 7-200%, 8-300%, 9-500%, 10-whole page + + lExtended = Null && = .T. && Flag that tells if the report is being run automatically + && using the _REPORTPERVIEW global variable + + nWindowState = Null && = 0 && Normal + nDockType = Null && = .F. + + cDestFile = Null && = "" && the destination file (image, htm, pdf, etc) + lPrinted = Null && = .F. && knows if the user printed the report + lSaved = Null && = .F. && knows if the user saved the report to a file + nVersion = Null + cVersion = Null + + + cFormIcon = Null && = "" && "wwrite.ico" + lEmailAuto = Null && = .T. + cEmailType = Null && = "PDF" + cEmailPRG = Null && = "" + + cSaveDefName = Null && "" *!* 2010-09-17 - Jacques Parent - Add the cSaveDefName + + lEmailed = Null && = .F. + cCodePage = Null && = "CP1252" && CodePage, to be used by PDF Listener + && No more need to leave this property, because this is set automatically + && left for backwards compatibility + + nMaxMiniatureDisplay = Null && = 64 && Number of miniature proof + nPDFPageMode = Null && = 0 + cLanguage = Null && = "" + nShowToolBar = Null && = 1 && Visible + lShowPrinters = Null && = .T. && determines if the available printers combo will be shown + + + lAutoSendMail = Null + + nEmailMode = Null && = 1 && 1 = MAPI, 2 = CDOSYS, 3 = Custom procedure + cSMTPServer = Null && = "" + nSMTPPort = Null && = 25 + lSMTPUseSSL = Null && = .F. + cSMTPUserName = Null && = "" + cSMTPPassword = Null && = "" + + cEmailTo = Null && = "" + cEmailSubject = Null && = "" + cEmailCC = Null + cEmailBCC = Null + cEmailBody = Null && = "" + cEmailFrom = Null && = "" + cEmailReplyTo = Null + cEmailBodyFile = Null + nButtonSize = Null && = 1 && 1=16x16 pixels (default), 2=32x32 pixels + lSilent = Null && Tell Foxypreviewer to stay silent and to write message to the cErrors property + cErrors = "" + lDirectPrint = .F. + nPrinterProptype = Null + nThermType = Null + nSearchPages = Null + + cEncryptProcedure = Null + cDecryptProcedure = Null + cCryptKey = Null + lReadReceipt = Null + lPriority = Null + + + * PDF properties + lPDFEmbedFonts = Null + lPDFCanPrint = Null + lPDFCanEdit = Null + lPDFCanCopy = Null + lPDFCanAddNotes = Null + lPDFEncryptDocument = Null + cPDFMasterPassword = Null + cPDFUserPassword = Null + lOpenViewer = Null + + cPdfAuthor = Null + cPdfTitle = Null + cPdfSubject = Null + cPdfKeyWords = Null + cPdfCreator = Null + lPDFShowErrors = Null + cPDFSymbolFontsList = Null + cPDFDefaultFont = Null + + cAdressTable = Null + cAdressSearch = Null + cAttachments = Null + + + * Internal use properties + _oReports = "" && Internal use, collection that contains the report names to be used + _oClauses = "" + _oAliases = "" + _oNames = "" + _oFoxy = "" + + Procedure Init + Endproc + + Procedure AddReport(tcReport, tcClauses) + * populates a collection object with the report files and clauses + * This method can be called many times, providing an easy way to merge reports. + + Local lcReport, lcTempDir, lcFile + lcTempDir = Addbs(Getenv("TEMP")) + + * Retrieve the FRX and FRT files from the EXE + + *!* 01.06.2011 + *!* lcFile = lcTempDir + "TMP_FP_" + Sys(2015) + "." + lcFile = lcTempDir + Juststem(tcReport) + '_' + Sys(2) + "." + *!* 01.06.2011 ^ + + If Empty(Sys(2000, tcReport)) + Strtofile(Filetostr(Forceext(tcReport, "FRX")), lcFile + "FRX") + Strtofile(Filetostr(Forceext(tcReport, "FRT")), lcFile + "FRT") + Else + lcFile = tcReport + Endif + + If Vartype(This._oReports) <> "O" + This._oReports = Createobject("Collection") + This._oClauses = Createobject("Collection") + Endif + This._oReports.Add(Forceext(lcFile, "FRX")) + This._oClauses.Add(Evl(tcClauses, "")) + Endproc + + + Procedure RunReport + Local lcFoxyPath, lcComunPath + + If !'FOXYPREVIEWER' $ Upper(Set("Procedure")) + lcFoxyPath = Iif(Type('gcReportPreviewerPath') = 'C', Addbs(gcReportPreviewerPath) + "FoxyPreviewer.App", "FoxyPreviewer.App") + If !File(lcFoxyPath) + lcComunPath = Left(Addbs(gcAppPath), Rat('\', Addbs(gcAppPath), 2)) + 'COMUNCONTAFIN\' + If !Directory(m.lcComunPath) + lcComunPath = Left(Addbs(gcAppPath), Rat('\', Addbs(gcAppPath), 2)) + 'COMUNROA\' + Endif + lcFoxyPath = lcComunPath + "FoxyPreviewer.App" + If !File(lcFoxyPath) + lcFoxyPath = Addbs(Getfile("app", "FoxyPreviewer.App", "Open", 0, "Alegeti locatia " + m.lcFoxyPath)) + Endif + Endif + If Empty(Nvl(m.lcFoxyPath, '')) + Report Form (m.tcRaport) To Printer Prompt Preview + Return + Endif + + Set Procedure To (m.lcFoxyPath) Additive + Endif + + Local loReport As "PreviewHelper" Of "FoxyPreviewer.App" + loReport = Createobject("PreviewHelper") + * TRY + With loReport + + Local N, lnCount + lnCount = This._oReports.Count + For N = 1 To lnCount + loReport.AddReport(This._oReports(N), This._oClauses(N)) + *!* LPARAMETERS tcreport, tcclauses, tcalias, tcname + + Endfor + + + If Not Isnull(This.cTitle) + .cTitle = This.cTitle + Endif + + If Not Isnull(This.lSendToEmail ) + .lSendToEmail = This.lSendToEmail + Endif + + If Not Isnull(This.lSaveToFile ) + .lSaveToFile = This.lSaveToFile + Endif + + If Not Isnull(This.lShowCopies ) + .lShowCopies = This.lShowCopies + Endif + + If Not Isnull(This.lShowMiniatures ) + .lShowMiniatures = This.lShowMiniatures + Endif + + If Not Isnull(This.lShowSetup) + .lShowSetup = This.lShowSetup + Endif + + If Not Isnull(This.lShowSearch) + .lShowSearch = This.lShowSearch + Endif + + If Not Isnull(This.lPrintVisible) + .lPrintVisible = This.lPrintVisible + Endif + + If Not Isnull(This.lPrinterPref) + .lPrinterPref = This.lPrinterPref + Endif + + If Not Isnull(This.nCopies) + .nCopies = This.nCopies + Endif + + If Not Isnull(This.lPrintVisible) + .lPrintVisible = This.lPrintVisible + Endif + + If Not Isnull(This.cDefaultListener) + .cDefaultListener = This.cDefaultListener + Endif + + If Not Isnull(This.cSuccessor) + .cSuccessor = This.cSuccessor + Endif + + If Not Isnull(This.lUseListener) + .lUseListener = This.lUseListener + Endif + + If Not Isnull(This.nCanvasCount) + .nCanvasCount = This.nCanvasCount + Endif + + If Not Isnull(This.nZoomLevel) + .nZoomLevel = This.nZoomLevel + Endif + + If Not Isnull(This.oListener) + .oListener = This.oListener + Endif + + If Not Isnull(This.cPrinterName) + .cPrinterName = This.cPrinterName + Endif + + If Not Isnull(This.lSaveAsImage) + .lSaveAsImage = This.lSaveAsImage + Endif + + If Not Isnull(This.lSaveAsHTML) + .lSaveAsHTML = This.lSaveAsHTML + Endif + + If Not Isnull(This.lSaveAsRTF) + .lSaveAsRTF = This.lSaveAsRTF + Endif + + If Not Isnull(This.lSaveAsXLS) + .lSaveAsXLS = This.lSaveAsXLS + Endif + + If Not Isnull(This.lSaveAsPDF) + .lSaveAsPDF = This.lSaveAsPDF + Endif + + If Not Isnull(This.nWindowState) + .nWindowState = This.nWindowState + Endif + + If Not Isnull(This.nDockType) + .nDockType = This.nDockType + Endif + + If Not Isnull(This.nMaxMiniatureDisplay) + .nMaxMiniatureDisplay = This.nMaxMiniatureDisplay + Endif + + If Not Isnull(This.nPDFPageMode) + .nPDFPageMode = This.nPDFPageMode + Endif + + If Not Isnull(This.nShowToolBar) + .nShowToolBar = This.nShowToolBar + Endif + + If Not Isnull(This.lShowPrinters) + .lShowPrinters = This.lShowPrinters + Endif + + If Not Isnull(This.cFormIcon) + .cFormIcon = This.cFormIcon + Endif + + If Not Isnull(This.cLanguage) + .cLanguage = This.cLanguage + Endif + + If Not Isnull(This.lEmailAuto) + .lEmailAuto = This.lEmailAuto + Endif + + If Not Isnull(This.cEmailType) + .cEmailType = This.cEmailType + Endif + + If Not Isnull(This.cEmailPRG) + .cEmailPRG = This.cEmailPRG + Endif + + If Not Isnull(This.lEmailed) + .lEmailed = This.lEmailed + Endif + + *!* 2010-09-17 - Jacques Parent - Add the cSaveDefName + If Not Isnull(This.cSaveDefName) + .cSaveDefName = This.cSaveDefName + Endif + + *!* IF NOT ISNULL(This.cCodePage) + *!* .cCodePage = This.cCodePage + *!* ENDIF + + If Not Isnull(This.nEmailMode) + .nEmailMode = This.nEmailMode + Endif + + If Not Isnull(This.cSMTPServer) + .cSMTPServer = This.cSMTPServer + Endif + + If Not Isnull(This.nSMTPPort) + .nSMTPPort = This.nSMTPPort + Endif + + If Not Isnull(This.lSMTPUseSSL) + .lSMTPUseSSL = This.lSMTPUseSSL + Endif + + If Not Isnull(This.cSMTPUserName) + .cSMTPUserName = This.cSMTPUserName + Endif + + If Not Isnull(This.cSMTPPassword) + .cSMTPPassword = This.cSMTPPassword + Endif + + If Not Isnull(This.cEmailTo) + .cEmailTo = This.cEmailTo + Endif + + If Not Isnull(This.cEmailSubject) + .cEmailSubject = This.cEmailSubject + Endif + + If Not Isnull(This.cEmailBody) + .cEmailBody = This.cEmailBody + Endif + + If Not Isnull(This.cEmailFrom) + .cEmailFrom = This.cEmailFrom + Endif + + If Not Isnull(This.nButtonSize) + .nButtonSize = This.nButtonSize + Endif + + If Not Isnull(This.cDestFile) + .cDestFile = This.cDestFile + Endif + + + + If Not Isnull(This.cEmailCC) + .cEmailCC = This.cEmailCC + Endif + + If Not Isnull(This.cEmailBCC) + .cEmailBCC = This.cEmailBCC + Endif + + If Not Isnull(This.cEmailReplyTo) + .cEmailReplyTo = This.cEmailReplyTo + Endif + + *!* proprietatea exista in versiunea 2.01c + If Type('This.lAutoSendMail') <> 'U' And Type('loReport.lAutoSendMail') <> 'U' And Not Isnull(This.lAutoSendMail) + .lAutoSendMail = Not Isnull(This.cDestFile) And This.lAutoSendMail + ._lSendingEmail = .lAutoSendMail + Endif + + If Not Isnull(This.lSilent) + .lSilent = This.lSilent + Endif + + If Not Isnull(This.lDirectPrint) And This.lDirectPrint + .lDirectPrint = .T. + Endif + + If Not Isnull(This.lSaveAsTXT) + .lSaveAsTXT = This.lSaveAsTXT + Endif + + If Not Isnull(This.cOutputPath) + .cOutputPath = This.cOutputPath + Endif + + If Not Isnull(This.nPrinterProptype) + .nPrinterProptype = This.nPrinterProptype + Endif + + If Not Isnull(This.nThermType) + .nThermType = This.nThermType + Endif + + If Not Isnull(This.nSearchPages) + .nSearchPages = This.nSearchPages + Endif + + If Not Isnull(This.cDecryptProcedure) + .cDecryptProcedure = This.cDecryptProcedure + Endif + + If Not Isnull(This.cEncryptProcedure) + .cEncryptProcedure = This.cEncryptProcedure + Endif + + If Not Isnull(This.cCryptKey) + .cCryptKey = This.cCryptKey + Endif + + If Not Isnull(This.lReadReceipt) + .lReadReceipt = This.lReadReceipt + Endif + + If Not Isnull(This.lPriority) + .lPriority = This.lPriority + Endif + + If Not Isnull(This.cEmailBodyFile) + .cEmailBodyFile = This.cEmailBodyFile + Endif + + If Not Isnull(This.lPDFEmbedFonts) + .lPDFEmbedFonts = This.lPDFEmbedFonts + Endif + + If Not Isnull(This.lPDFCanPrint) + .lPDFCanPrint = This.lPDFCanPrint + Endif + + If Not Isnull(This.lPDFCanEdit) + .lPDFCanEdit = This.lPDFCanEdit + Endif + + If Not Isnull(This.lPDFCanCopy) + .lPDFCanCopy = This.lPDFCanCopy + Endif + + If Not Isnull(This.lPDFCanAddNotes) + .lPDFCanAddNotes = This.lPDFCanAddNotes + Endif + + If Not Isnull(This.lPDFEncryptDocument) + .lPDFEncryptDocument = This.lPDFEncryptDocument + Endif + + If Not Isnull(This.cPDFMasterPassword) + .cPDFMasterPassword = This.cPDFMasterPassword + Endif + + If Not Isnull(This.cPDFUserPassword) + .cPDFUserPassword = This.cPDFUserPassword + Endif + + If Not Isnull(This.lOpenViewer) + .lOpenViewer = This.lOpenViewer + Endif + + If Not Isnull(This.cPdfAuthor) + .cPdfAuthor = This.cPdfAuthor + Endif + + If Not Isnull(This.cPdfTitle) + .cPdfTitle = This.cPdfTitle + Endif + + If Not Isnull(This.cPdfSubject) + .cPdfSubject = This.cPdfSubject + Endif + + If Not Isnull(This.cPdfKeyWords) + .cPdfKeyWords = This.cPdfKeyWords + Endif + + If Not Isnull(This.cPdfCreator) + .cPdfCreator = This.cPdfCreator + Endif + + If Not Isnull(This.lPDFShowErrors) + .lPDFShowErrors = This.lPDFShowErrors + Endif + + If Not Isnull(This.cPDFSymbolFontsList) + .cPDFSymbolFontsList = This.cPDFSymbolFontsList + Endif + + If Not Isnull(This.cAdressTable) + .cAdressTable = This.cAdressTable + Endif + + If Not Isnull(This.cAdressSearch) + .cAdressSearch = This.cAdressSearch + Endif + + If Not Isnull(This.cAttachments) + .cAttachments = This.cAttachments + Endif + + If Not Isnull(This.lShowClose) + .lShowClose = This.lShowClose + Endif + + If Not Isnull(This.cPDFDefaultFont) + .cPDFDefaultFont = This.cPDFDefaultFont + Endif + + + *!* IF NOT ISNULL(THIS.) + *!* . = THIS. + *!* ENDIF + *!* 27.05.2011 + If Used('cparteneriemail') + .cAdressTable = "cparteneriemail" + .cAdressSearch = "denumire" + Endif + *!* 27.05.2011 + Endwith + *!* CATCH TO loEx + + *!* ENDTRY + loReport.RunReport(This) && This flag will tell FoxyPreviewer that it has a caller object in an EXE + && The main class will update the properties + && "lSaved", "lPrinted", "lEmailed", "nVersion", "cVersion", "cErrors" + + Endproc + + Procedure Destroy + */ [20100517]... Now supporting Labels also (LBX,LBT) by Nick Porfyris + * Clean up, delete the temporary FRX, FRT, LBX, LBT, ??X, ??T files... + Local N, lnCount, lcFile, lcExtension, lcExtension2 + lnCount = This._oReports.Count + For N = 1 To lnCount + lcFile = This._oReports(N) + If Left(Justfname(lcFile), 7) = "TMP_FP_" && We have a temp ??X, ??T files to delete + Try + Delete File (lcFile) + lcExtension = Justext(lcFile) + lcExtension2 = Stuff(lcExtension, Len(lcExtension), 1, [T]) + Delete File Forceext(lcFile, lcExtension2) + Catch + Endtry + Endif + Endfor + Endproc + +Enddefine + +Define Class PreviewerConfig As Custom + *** + cVersionFoxyPreview = "2.41a" + cWebsiteFoxyPreview = "http://foxypreviewer.codeplex.com/releases/view/49471" + *** + cClauses = "" + *** + cPrinterName = Null && SET("Printer",3) + + lSaveToFile = Null && = .T. && adds the save to file button + lSendToEmail = Null && = .T. && adds the send to email button + lPrintVisible = Null && = .T. && shows the print button in the toolbar + lShowCopies = Null && = .T. && shows the copies spinner + lShowMiniatures = Null && = .T. && shows the miniatures page + lShowSetup = Null && = .T. && shows the setup configuration form + lPrinterPref = Null && = .T. && shows the printer preferences button + lShowSearch = Null + lShowClose = Null + + lClearPrinterInfo = .T. && NULL && = .T. && clears the EXPR, TAG, TAG2 fields of the FRX + + * Output types allowed in the "Save as.." button from the toolbar + lSaveAsImage = Null && = .T. + lSaveAsHTML = Null && = .T. + lSaveAsRTF = Null && = .T. + lSaveAsXLS = Null && = .T. + lSaveAsPDF = Null && = .T. + lSaveAsTXT = Null + cOutputPath = Null + + nPageTotal = Null && = 0 && Total pages of the current report + nCopies = Null && = 1 && The quantity of copies to be printed + cTitle = Null && = "" && The preview window title + oListener = Null + cDefaultListener = "FOXYLISTENER" + cSuccessor = Null + lUseListener = Null && = .T. + + nCanvasCount = Null && = 1 && initial nr of pages rendered on the preview form. + && Valid values are 1 (default), 2, or 4. + + nZoomLevel = Null && = 5 && initial zoom level of the preview window. Possible values are: + && 1-10%, 2-25%, 3-50%, 4-75%, 5-100% default, 6-150% ; + && 7-200%, 8-300%, 9-500%, 10-whole page + + lExtended = Null && = .T. && Flag that tells if the report is being run automatically + && using the _REPORTPERVIEW global variable + + lOpenDestFile = Null && .T. && automatically open the destination file after save + + nWindowState = Null && = 0 && Normal + nDockType = Null && = .F. + + cDestFile = Null && = "" && the destination file (image, htm, pdf, etc) + lPrinted = Null && = .F. && knows if the user printed the report + lSaved = Null && = .F. && knows if the user saved the report to a file + nVersion = Null + cVersion = Null + + + cFormIcon = Null && = "" && "wwrite.ico" + lEmailAuto = Null && = .T. + cEmailType = Null && = "PDF" + cEmailPRG = Null && = "" + + cSaveDefName = Null && "" *!* 2010-09-17 - Jacques Parent - Add the cSaveDefName + + lEmailed = Null && = .F. + cCodePage = Null && = "CP1252" && CodePage, to be used by PDF Listener + && No more need to leave this property, because this is set automatically + && left for backwards compatibility + + nMaxMiniatureDisplay = Null && = 64 && Number of miniature proof + nPDFPageMode = Null && = 0 + cLanguage = Null && = "" + nShowToolBar = Null && = 1 && Visible + lShowPrinters = Null && = .T. && determines if the available printers combo will be shown + + + lAutoSendMail = Null + + nEmailMode = Null && = 1 && 1 = MAPI, 2 = CDOSYS, 3 = Custom procedure + cSMTPServer = Null && = "" + nSMTPPort = Null && = 25 + lSMTPUseSSL = Null && = .F. + cSMTPUserName = Null && = "" + cSMTPPassword = Null && = "" + + cEmailTo = Null && = "" + cEmailSubject = Null && = "" + cEmailCC = Null + cEmailBCC = Null + cEmailBody = Null && = "" + cEmailFrom = Null && = "" + cEmailReplyTo = Null + cEmailBodyFile = Null + nButtonSize = Null && = 1 && 1=16x16 pixels (default), 2=32x32 pixels + lSilent = Null && Tell Foxypreviewer to stay silent and to write message to the cErrors property + cErrors = "" + lDirectPrint = .F. + nPrinterProptype = Null + nThermType = Null + nSearchPages = Null + + cEncryptProcedure = Null + cDecryptProcedure = Null + cCryptKey = Null + lReadReceipt = Null + lPriority = Null + + + * PDF properties + lPDFEmbedFonts = Null + lPDFCanPrint = Null + lPDFCanEdit = Null + lPDFCanCopy = Null + lPDFCanAddNotes = Null + lPDFEncryptDocument = Null + cPDFMasterPassword = Null + cPDFUserPassword = Null + lOpenViewer = Null + + cPdfAuthor = Null + cPdfTitle = Null + cPdfSubject = Null + cPdfKeyWords = Null + cPdfCreator = Null + lPDFShowErrors = Null + cPDFSymbolFontsList = Null + cPDFDefaultFont = Null + + cAdressTable = Null + cAdressSearch = Null + cAttachments = Null + + Procedure Init + * + Endproc && Init + + *!* Seteaza valoarea unei proprietati daca exista sau adauga proprietatea, si intoarce valoarea + Procedure SetValue + Lparameters tcProperty, tuValue + + If Type('THIS.&tcProperty') <> 'U' + This.&tcProperty = tuValue + Else + This.AddProperty(tcProperty, tuValue) + Endif + + Return This.&tcProperty + + Endproc && SetValue + + *!* Intoarce valoarea unei proprietati daca exista, altfel valoarea empty() corespunzator tipului proprietatii + Function GetValue + Lparameters tcProperty + + Local lcProperty, luValue + lcProperty = 'THIS.' + tcProperty + + If Type('THIS.&tcProperty') <> 'U' + luValue = This.&tcProperty + Else + luValue = This.GetDefaultValue(tcProperty) + Endif + Return luValue + + Endfunc && GetValue + + *!* Intoarce valoarea empty() a unei proprietati dupa tip = prima litera din numele proprietatii daca nu primeste decat tcProperty + *!* Converteste tcValue la tipul variabilei tcProperty daca tcValue e primit ca parametru + Function GetDefaultValue + Lparameters tcProperty, tcValue + + Local lcType, luValue + luValue = "" + lcType = Upper(Left(tcProperty, 1)) + llEmptyValue = Iif(Pcount() = 1, .T., .F.) + + Do Case + Case lcType $ "CM" + luValue = Iif(llEmptyValue, '', tcValue) + Case lcType $ "NIF" + luValue = Iif(llEmptyValue, 0, Val(tcValue)) + Case lcType = "T" + luValue = Iif(llEmptyValue, Dtot({}), Ctot(tcValue)) + Case lcType = "D" + luValue = Iif(llEmptyValue, {}, Ctod(tcValue)) + Case lcType = "L" + luValue = Iif(llEmptyValue, .F., Iif(tcValue = "1" Or Upper(tcValue) = "T" Or Upper(tcValue) = '.T.' Or Upper(tcValue) = 'YES', .T., .F.)) + Otherwise + luValue = "" + Endcase + + Return luValue + Endfunc && GetDefaultValue + + *!* Intoarce .T. daca exista proprietatea + Function HasProperty + Lparameters tcProperty + + Local lcProperty, llReturn + lcProperty = 'THIS.' + tcProperty + llReturn = .F. + + If Type('THIS.&tcProperty') <> 'U' + llReturn = .T. + Endif + + Return llReturn + + Endfunc && HasProperty +Enddefine && PreviewerConfig \ No newline at end of file diff --git a/COMUN/programe/ofacturare.prg b/COMUN/programe/ofacturare.prg new file mode 100644 index 0000000..69b4132 --- /dev/null +++ b/COMUN/programe/ofacturare.prg @@ -0,0 +1,2663 @@ +*!* 13.11.2014 +*!* marius.mutu +*!* listeaza_ofacturare - listare ROAAUTO - facturi tipizate - se listeaza A4 sau A5 dupa optiunea de tip formular netipizate + +*!* 19.01.2015 +*!* marius.mutu +*!* factureaza gnRF_ULTIMELE_DATE_COMPLETATE .completeaza_setari_document() completeaza datele de la un document anterior + +*!* 04.02.2015 +*!* marius.mutu +*!* factureaza - listare aviz de expeditie pentru bonul fiscal + +*!* 05.05.2015 +*!* marius.mutu +*!* listeaza_bon_fiscal - s-a corectat o problema la listare bon fiscal detaliat + +*!* 23.09.2015 +*!* marius.mutu +*!* listeaza_ofacturare - listare proforma (din comanda) - dadea eroare pentru ca nu existau toate coloanele necesare + +*!* 03.02.2016 +*!* marius.mutu +*!* listeaza_ofacturare: tip 41 (aviz retur subunitati) - se listeaza partenerul asociat gestiunii din care se face retur + +*!* 09.02.2016 +*!* marius.mutu +*!* listeaza_ofacturare: adaugat proprietate poDate.oClient pentru accesarea poDate.oClient.email_facturare la trimiterea emailurilor +*!* + poDate.nListareSilentioasa, poDate.nListareJustPDF + +*!* 14.07.2016 +*!* marius.mutu +*!* listeaza_ofacturare: dadea eroare la listare proforma - nu exista poDate.id_comanda_aviz si nici nu trebuia (nu exista proforme bazate pe aviz din comanda) + +*!* 21.11.2019 +*!* marius.mutu +*!* +listeaza_recapitulatie + +*!* 22.01.2020 +*!* marius.mutu +*!* listeaza_recapitulatie +poFirma.adresa + +*!* 28.01.2020 +*!* factureaza, factureaza2 - completare crsFactura.codmatc (cod material client) + +*!* 30.01.2020 +*!* marius.mutu +*!* listeaza_ofacturare - poDate.id_util in loc de gnIdUtil pentru numele celui care a introdus factura, in loc de cel care o (re)listeaza + +*!* 12.03.2021 +*!* marius.mutu +*!* factureaza +*!* daca este proforma, pun toate articolele negestionabile, ca sa nu mai arate stocul + +*!* 16.09.2021 +*!* marius.mutu +*!* listeaza_bon_fiscal: Daca bonul nu se listeaza detaliat, listez cumulat pe cote TVA +*!* lista toata suma cu cota TVA = 0 eronat!!! + +*!* factureaza: dezaloca numar chitanta, numar bon fiscal la renuntare + +*!* 17.11.2023 +*!* marius.mutu +*!* adaugare tip 52 factura fiscala in valuta contract + +*!* 15.01.2024 +*!* marius.mutu +*!* listeaza_bon_fiscal - se transmite la casa de marcat (pretctva-discountctva), in loc de pretctva + +*!* 23.01.2024 +*!* listeaza_ofacturare +*!* efactura. se listeaza valori in valuta pentru factura in valuta + +*************************************************************************************************************** +**** Proceduri: +**** factureaza +**** completeaza_date_aviz_retur +**** listeaza_ofacturare +**** listeaza_oconformitate +*************************************************************************************************************** +******************************************** INCEPUT: factureaza ********************************************** +Procedure factureaza + Lparameters tnTip, toFactura + + * toFactura - daca se doreste copierea unei facturi anterioare + + *** 08.06.2017 + *** Daca exista optiunea gnFacturareNou = 1 atunci lansez formularul frm_facturare_articole2 in loc de frm_facturare_articole + If Type('gnFacturareNou') = 'N' And m.gnFacturareNou = 1 + If AMESSAGEBOX('Facturare noua (DA) sau standard (NU)?', 4 + 32, _Screen.Caption) = 6 + factureaza2(m.tnTip) + Return + Endif + Endif + + Private pnButon, poDate, poDateGestiuneDest, pnTotalDiscountAvize, plVizibil, poGeneratorNumere + + *!* modificare v 2.0.67 + *!* PRIVATE pnTipFacturare + *!* pnTipFacturare = 0 + *!* modificare v 2.0.67 ^ + Local lcCursor, lcObiect, lcObject, lcSqlCursor, lnSucces, lnTipTemp, loArticole, ltDataOra + Local llCopiere + *:Global ofrmceredate, ofrmdetaliifactura + If glLunaInchisa + AMESSAGEBOX("Nu puteti emite documente, deoarece aceasta luna este nchisa!", 0 + 48, "Luna nchisa") + Return + Endif + + Local lnIdSet, lnRaspuns, loDateAnterior, loSoldClient + loDateAnterior = Null + llCopiere = (Type('toFactura') = 'O') + + pnTotalDiscountAvize = 0 + + **************************************************** + ** Valori pentru pnTipFacturare + ** 0 - facturare pe baza de lista de preturi,pe baza de comanda + ** 1 - facturare contracte in rate + ** 2 - facturare contracte in rate + ** 3 - facturare contracte (articole din contract) + ** 4 - facturare contracte (articole din lista de preturi) + **************************************************** + lnIdSet = 25000 + tnTip - 1 + gnScadereStoc * 10 + **************************************************** + ** Valori pentru (lnIdSet,tnTip) + ** Facturare + ** (25000,1) - pe baza de lista de preturi ( 25010 - daca e cu scadere din gestiune ) + ** (25001,2) - pe baza de contracte ( 25011 - daca e cu scadere din gestiune ) + ** (25002,3) - pe baza de comenzi ( 25012 - daca e cu scadere din gestiune ) + ** (25003,4) - pe baza de avize ( 25013 - daca e cu scadere din gestiune ) + ** (25004,5) - pe baza de lista de preturi in valuta ( 25014 - daca e cu scadere din gestiune ) + ** (25005,6) - pe baza de contract in valuta ( 25015 - daca e cu scadere din gestiune ) + ** (25006,7) - credit note + ** (25007,8) - retur factura in lei ( 25017 ) + ** (25008,9) - retur factura in valuta ( 25018 ) + ** (25009,10) - factura fiscala in valuta ( 25019 ) + ** (25043,44) - factura hotel + ** (25044,45) - factura restaurant ( 25054 ) + ** (25045,46) - nota de plata restaurant ( 25055 ) + ** (25047,48) - factura marfa custodie cu desc. k ( 25057 ) + ** (25048,49) - factura marfa custodie fara desc. k ( 25058 ) + ** (25051,52) - pe baza de contract factura fiscala in valuta ( 25061 - daca e cu scadere din gestiune ) + + ** Avize de expeditie + ** (25020,21) - catre clienti din comanda ( 25030 - daca e cu scadere din gestiune ) + ** (25021,22) - catre clienti din lista ( 25031 - daca e cu scadere din gestiune ) + ** (25022,23) - transfer catre subunitati din lista ( 25032 - daca e cu scadere din gestiune ) + ** (25023,24) - aviz de retur ( 25033 - daca e cu scadere din gestiune ) + ** (25024,25) - transfer catre subunitati din comanda ( 25034 - daca e cu scadere din gestiune ) + ** (25025,26) - catre clienti din contract ( 25035 - daca e cu scadere din gestiune ) + ** (25026,27) - transfer catre subunitati pe baza de lucrare( 25036 - daca e cu scadere din gestiune ) + ** (25027,28) - catre clienti debitori din comanda ( 25037 - daca e cu scadere din gestiune ) + ** (25028,29) - catre clienti debitori din lista ( 25038 - daca e cu scadere din gestiune ) + ** (25029,30) - transfer catre subunitati pe baza de NIR ( 25039 - daca e cu scadere din gestiune ) + ** (25040,41) - retur transfer catre subunitati lista pret ( 25050 - daca e cu scadere din gestiune ) + ** (25041,42) - catre clienti custodie pe baza de comanda ( 25051 - daca e cu scadere din gestiune ) + ** (25046,47) - catre clienti custodie pe baza de comanda ptr. descarcare cu K ( 25056 - daca e cu scadere din gestiune ) + ** (25049,50) - in lucru retur de la clienti custodie ( 25059 - daca e cu scadere din gestiune ) + ** + ** ROAGEST + ** (236/240/241/242,-6) - retur de la gestiune valorica + ** + ** ROARETAIL + ** (25042,43) - bonuri fiscale colectate de la magazine ( 25052 - daca e cu scadere din gestiune ) + ** ROAACNPRO + ** (50100,51) - factura ROAACNPRO ( 25060 - daca e cu scadere din gestiune ) + **************************************************** + *!* modificare v 2.2.0 + *!* update_jtva_coloane([JV]) + update_jtva_coloane([JV], [jtva_coloane_temp]) + update_saft_taxtable() + + *!* modificare v 2.2.0 ^ + lnRaspuns = 6 + Do While lnRaspuns = 6 + plVizibil = .T. + + If !actualizeaza_optiuni_program() + Release poDate, poGeneratorNumere + Return + Endif + + If Type('poDate') <> 'O' + poDate = Createobject("oDateFactura", lnIdSet, tnTip) + poGeneratorNumere = Createobject("oGeneratorNumere") + Endif + Do Case + Case tnTip = 27 + poDate.nIdTipDoc = 6 && AVIZ + Case tnTip = 30 + poDate.nIdTipDoc = 6 && AVIZ + Case tnTip < 21 Or Inlist(tnTip, 45, 48, 49, 51, 52) && modificare : 45 (v2.0.87), 48 (v2.0.93), 49 (v2.0.95) + poDate.nIdTipDoc = 5 && FACTURA + Otherwise + poDate.nIdTipDoc = 6 && AVIZ + Endcase + + + * Completare date + If Type('loDateAnterior') = 'O' + poDate.completeaza_setari_document(m.loDateAnterior) + Else + If m.llCopiere + poDate.completeaza_setari_document(m.toFactura, .T.) + Endif + Endif + + poGeneratorNumere.ResetNumere() + + + poDate.rezultat_serii = poGeneratorNumere.creeaza_cursor_serii(poDate.nIdTipDoc) + + If Type('poDateGestiuneDest') <> 'O' + poDateGestiuneDest = Createobject("oDateGestiune") + Endif + + Do Case + Case tnTip = 27 + lcObiect = [frm_date_aviz_lucrare] + Case tnTip = 30 + lcObiect = [frm_date_aviz_lucrare] + Case tnTip < 21 Or Inlist(tnTip, 45, 48, 49, 51, 52) && modificare : 45 (v2.0.87), 48 (v2.0.93), 49 (v2.0.95) + lcObiect = [frm_date_factura] + Otherwise + lcObiect = [frm_date_aviz] + Endcase + + pnButon = 1 + If Inlist(lcObiect, [frm_date_factura], [frm_date_aviz]) + ofrmceredate = Createobject(m.lcObiect, toFactura) + Else + ofrmceredate = Createobject(m.lcObiect) + Endif + ofrmceredate.ntip = tnTip + ofrmceredate.Show() + *!* modificare v 2.2.0 + Use In (Select('jtva_coloane')) + + * sterg regularizare taxa colectata pentru ca are procent TVA + * la adaugarea automata a tuturor articolelor factura/aviz din comanda arata formularul de adaugare articol pentru ca sunt mai mult explicatii TVA + + If poDate.tva_incasare = 0 + Select * From jtva_coloane_temp Where Isnull(id_jtva_ex) AND !'RORTC'$UPPER(coloana_jv) Into Cursor jtva_coloane + Else + Select * From jtva_coloane_temp Where Isnull(id_jtva_neex) AND !'RORTC'$UPPER(coloana_jv) Into Cursor jtva_coloane + Endif + *!* modificare v 2.2.0 ^ + Release ofrmceredate + If pnButon = 2 + poGeneratorNumere.dezaloca_numar(poDate.nIdTipDoc) + + *!* modificare v 2.0.67 + If Used('crsCtrTemp') + Use In ('crsCtrTemp') + Endif + *!* modificare v 2.0.67 ^ + Release poDate, poGeneratorNumere + Return + Else + poGeneratorNumere.verifica_numar(poDate.nIdTipDoc, poDate.nract) + Endif + + *!* modificare v 2.0.67 + *!* pnTipFacturare = 0 + *!* modificare v 2.0.67 ^ + Do Case + Case m.llCopiere + lcSqlCursor = [{call pack_facturare.cursor_retur_document(?poDate.in_valuta,?poDate.listaid,1,?poDate.eProforma,?gnIdUtil)}] + + *!* modificare v 2.0.93 ; modificare v 2.0.95 : am adaugat 49 + Case Inlist(tnTip, 48, 49) + lcSqlCursor = [{call ] + gcS + [.pack_facturare.cursor_articole_k(?poDate.zi_curs,?gnLuna,?gnAn,?gnIdUtil,?gnIdSucursala)}] + *!* modificare v 2.0.93 ^ + *!* modificare v 2.0.87 + Case tnTip = 45 + lcSqlCursor = [{call ] + gcS + [.pack_facturare.cursor_preturi(?poDate.zi_curs,?poDate.tip,?poDate.id_valuta,] + ; + [?poDate.listaid,?gnLuna,?gnAn,?gnIdUtil,?gnIdSucursala)}] + *!* modificare v 2.0.87 ^ + Case Inlist(tnTip, 1, 22, 5, 29, 7, 10, 23) && lista de preturi + && modificare v 2.0.56 : am adaugat 10 + lcSqlCursor = [{call ] + gcS + [.pack_facturare.cursor_preturi(?poDate.zi_curs,?poDate.tip,?poDate.id_valuta,] + ; + [?poDate.id_gestiune_init,?gnLuna,?gnAn,?gnIdUtil,?gnIdSucursala)}] + Case Inlist(tnTip, 2, 26, 6, 52) && contract + poDate.id_agent = 0 + *!* modificare v 2.0.67 + *!* lcSqlCursor = [{call ] + gcS + [.pack_facturare.cursor_contract(?poDate.zi_curs,?poDate.tip,?poDate.id_valuta,] + ; + *!* [?poDate.listaid,?poDate.id_gestiune_init,?gnLuna,?gnAn,?gnIdUtil,?gnIdSucursala,?@pnTipFacturare,] + ; + *!* [?@poDate.id_agent,?@poDate.nume_agent)}] + lcSqlCursor = [{call ] + gcS + [.pack_facturare.cursor_contract(?poDate.zi_curs,?poDate.tip,?poDate.id_valuta,] + ; + [?poDate.listaid,?poDate.id_gestiune_init,?gnLuna,?gnAn,?gnIdUtil,?gnIdSucursala,?@poDate.id_agent,?@poDate.nume_agent)}] + *!* modificare v 2.0.67 ^ + Case Inlist(tnTip, 3, 21, 25, 28, 42, 47) && comenzi + lcSqlCursor = [{call ] + gcS + [.pack_facturare.cursor_comanda(?poDate.zi_curs,?poDate.tip,?poDate.listaid,?gnIdUtil)}] + Case tnTip = 4 && din avize + lcSqlCursor = [{call ] + gcS + [.pack_facturare.cursor_avize(?poDate.listaid,?gnIdUtil,?@pnTotalDiscountAvize)}] + Case Inlist(tnTip, 41) && transfer intre subunitati pe baza de lista de preturi + retur transfer + lcSqlCursor = [{call ] + gcS + [.pack_facturare.cursor_gestiune(?poDate.zi_curs,?poDate.id_pol,] + ; + [?poDate.id_client,?gnLuna,?gnAn,?gnIdUtil,?gnIdSucursala)}] + Case tnTip = 30 && transfer intre subunitati pe baza de NIR + lcSqlCursor = [{call pack_facturare.cursor_aviz_nir(?poDate.id_client,?poDate.id_furnizor,?poDate.nrfactachi,?gnIdSucursala)}] + *!* modificare v 2.0.90 ^ + Case tnTip = 27 + lcSqlCursor = [{call ] + gcS + [.pack_facturare.cursor_lucrare(?poDate.zi_curs,?poDate.id_client,] + ; + [?poDate.id_lucrare,?gnLuna,?gnAn,?gnIdUtil,?gnIdSucursala)}] + *!* modificare v 2.0.56 + Case Inlist(tnTip, 8, 9, 24) && 8,9 = facturi de retur, 24 = aviz retur + lcSqlCursor = [{call ] + gcS + [.pack_facturare.cursor_retur(?poDate.in_valuta,?poDate.listaid,?gnIdUtil)}] + Endcase + + lcCursor = [crsarticole] + lnSucces = goExecutor.oExecute(lcSqlCursor, lcCursor) + + If lnSucces < 0 + AMESSAGEBOX(goExecutor.oPrelucrareEroare(), 16, "Eroare") + If goExecutor.nEroare = 20005 + vizualizeaza_curs(poDate.zi_curs) + ENDIF + *!* nu inchid crsCtrTemp + *!* modificare v 2.0.56 + *!* poGeneratorNumere.dezaloca_numar(pnIdTipDoc) + *!* modificare v 2.0.56 ^ + poGeneratorNumere.dezaloca_numar(poDate.nIdTipDoc) && 29.03.2021 deblochez numarul ca sa il pot reda pe acelasi cand se reincarca formularul + Else + If Reccount(lcCursor) = 0 And (!Used(lcCursor + '1') Or (Used(lcCursor + '1') And Reccount(lcCursor + '1') = 0)) + AMESSAGEBOX("Nu exista articole pentru optiunile alese!", 48, "Atentie") + poGeneratorNumere.dezaloca_numar(poDate.nIdTipDoc) + + Use In (SELECT('crsCtrTemp')) + ELSE + + * Daca este o proforma, consider toate articolele negestionabile, pentru a nu mai alege din stoc + * 12.03.2021 + IF poDate.eProforma = 1 + UPDATE (m.lcCursor) SET gestionabil = 0 + GO TOP IN (m.lcCursor) + ENDIF + + creeaza_facturacrs([crsfactura]) + + If tnTip = 30 && Aviz din NIR + * populez factura cu articolele din NIR + Local lcIdJtva + Select (lcCursor) + Scan + Scatter Name loArticole Memo + Select crsfactura + update_jtva_coloane([JV], 'CrsCotaTva', 0) + Select CrsCotaTva + Locate For cota_tva = (loArticole.proc_tvav * 100 - 100) + If Found() + lcIdJtva = id_jtva_coloana + Else + lcIdJtva = Null + Endif + Use In CrsCotaTva + + Insert Into crsfactura ; + (id_c, id_temp, id_articol, id_gestiune, Cont, um, ; + id_valuta, gestionabil, tip_valuta, Curs, multiplicator, id_jtva_coloana, codmat, ; + pret_achizitie, pretd, id_valuta_d, denumire, pretftva, pretctva, valftva, valtva, valctva, ; + cantitate, discountftva, discountctva, valdiscountftva, valdiscounttva, ; + valdiscountctva, valdiminuatftva, valdiminuattva, valdiminuatctva, proc_tvav, cu_tva, serie, ; + id_set_fact, explicatie, id_pol, id_ctr ) ; + Values (; + loArticole.id_c, loArticole.id_c, loArticole.id_articol, loArticole.id_gestiune, loArticole.Cont, loArticole.um, ; + loArticole.id_valuta, loArticole.gestionabil, loArticole.tip_valuta, loArticole.Curs, ; + loArticole.multiplicator, lcIdJtva, Nvl(loArticole.codmat, ' '), ; + loArticole.preta, loArticole.pretd, loArticole.id_valuta_d, loArticole.denumire, ; + loArticole.pretftva, loArticole.pretctva, ; + Round(loArticole.cantitate * loArticole.pretftva, gnpc), ; + Round(loArticole.cantitate * loArticole.tvav, gnpc), ; + Round(loArticole.cantitate * loArticole.pretctva, gnpc), ; + loArticole.cantitate, 0, 0, 0, 0, ; + 0, Round(loArticole.cantitate * loArticole.pretftva, gnpc), Round(loArticole.cantitate * loArticole.tvav, gnpc), ; + Round(loArticole.cantitate * loArticole.pretctva, gnpc), loArticole.proc_tvav, loArticole.preturi_cu_tva, '', ; + Null, '', Null, Null) + + Select (lcCursor) + Endscan + Release lcIdJtva + Select crsfactura + Release loArticole + + ENDIF && tnTip = 30 + + If tnTip = 27 + lcObject = [frm_avizare_lucrare] + Create Cursor crsgestiunidest(id_gestiune N(20), nume_gestiune c(100)) + Select crsgestiunidest + Append Blank + Replace id_gestiune With - 9999, nume_gestiune With '' + Insert Into crsgestiunidest(id_gestiune, nume_gestiune) ; + Select Distinct id_gestiune, nume_gestiune From (lcCursor) Order By nume_gestiune + Else + lcObject = [frm_facturare_articole] + Endif + *!* modificare v 2.0.67 + *!* Endif + *!* modificare v 2.0.67 ^ + *!* modificare v 2.0.56 + *!* If Type('crsarticole.curs')<>'U' + *!* Select Distinct Curs,nume_val From crsArticole With (Buffering = .T.) Where tip_valuta = 1 Into Cursor crscursuri + *!* If poDate.in_valuta = 1 + *!* Select crscursuri + *!* poDate.Curs = Curs + *!* Endif + If poDate.in_valuta = 1 + Select Distinct Curs, nume_val, id_valuta, multiplicator From (lcCursor) With (Buffering = .T.) Where tip_valuta = 1 Order By nume_val Into Cursor crscursuri + Select crscursuri + poDate.Curs = Curs + poDate.multiplicator = multiplicator + Else + citeste_cursuri_zi(poDate.zi_curs) + If Reccount('crscursuri') = 0 + Use In crscursuri + Endif + *!* modificare v 2.0.56 ^ + Endif + + If Type(lcCursor + '.nume_lista_preturi') <> 'U' + Create Cursor crspolitici (id_pol N(20), nume_lista_preturi c(100)) + Select crspolitici + *!* modificare v 2.0.77 + *!* Append Blank + *!* Replace id_pol With -9999,nume_lista_preturi With '' + Insert Into crspolitici(id_pol, nume_lista_preturi) Values (-9999, '') + *!* modificare v 2.0.77 ^ + Insert Into crspolitici(id_pol, nume_lista_preturi) ; + Select Distinct id_pol, nume_lista_preturi From (lcCursor) Order By nume_lista_preturi + Endif + + *!* modificare v 2.0.67 + If Inlist(tnTip, 2, 6, 26) + Create Cursor crscontracte(id_ctr N(20), numar_contract c(100), Data d Null, numar c(50) Null) + Select crscontracte + Append Blank + Replace id_ctr With - 9999, numar_contract With '' + Insert Into crscontracte(id_ctr, numar_contract, Data, numar) ; + Select Distinct id_ctr, numar_contract, Data, numar From (lcCursor + [1]) Order By Data, numar + Endif + *!* modificare v 2.0.67 ^ + ofrmdetaliifactura = Createobject(lcObject) + + IF tnTip = 30 && AVIZ DIN NIR + * CALCULEZ TOTALURILE SI FINALIZEZ FORMULARUL FARA SA IL ARAT + Private plreturn + Store .T. To plreturn + ofrmdetaliifactura.do_calculeaza_totaluri() + ofrmdetaliifactura.but_termin1.Click() + plVizibil = .F. + If !plreturn + Return + ENDIF + ELSE + IF m.llCopiere + * Modificare sau copiere factura + * Nu adaug automat articolele din factura originala, ca sa dau posibilitate de modificare a cantitatilor, pretului, explicatiei + * ofrmdetaliifactura.do_adauga_tot() + + * Sterg din cursorul cu articole inregistrarile adaugate in factura + *DELETE FROM crsArticole + + * Adaug in lista articolelor cursorul cu lista de preturi ca sa pot adauga si alte articole in factura copiata/modificata + lcSqlCursor = [{call pack_facturare.cursor_preturi(?poDate.zi_curs,?poDate.tip,?poDate.id_valuta,] + ; + [?poDate.id_gestiune_init,?gnLuna,?gnAn,?gnIdUtil,?gnIdSucursala)}] + + lcCursorTemp = [crsArticoleTemp] + llSucces = goExecutor.oExecuta(lcSqlCursor, lcCursorTemp) + IF m.llSucces + SELECT crsArticole + APPEND FROM DBF(m.lcCursorTemp) + ENDIF + USE IN (SELECT(m.lcCursorTemp)) + ENDIF && m.llCopiere + + If plVizibil + ofrmdetaliifactura.Show() + Else + ofrmdetaliifactura.Release() + pnButon = 2 + Endif + ENDIF && tnTip = 30 + + If Used('crspolitici') + Use In crspolitici + Endif + + If Used('crscursuri') + Use In crscursuri + Endif + + *!* modificare v 2.0.67 + If Used('crscontracte') + Use In crscontracte + Endif + If Used('crsCtrTemp') + Use In crsCtrTemp + Endif + *!* modificare v 2.0.67 ^ + + *!* modificare v 2.0.80 + If poDate.incasat <> 0 + poGeneratorNumere.verifica_numar(16, poDate.nr_incasare) + Endif + *!* modificare v 2.0.80 + + If pnButon = 1 + * Completez podate.institutie_publica + poDate.institutie_publica = GetInstitutiePublica(poDate.id_client) + + * Completare codmat client, codnc8, codcpv + Select crsfactura + Scan + Replace codmatc With GetCodmatC(poDate.id_client, crsfactura.id_articol) In crsfactura + + loCod = GetCodNC8CPV(crsfactura.id_articol) + Replace codnc8 WITH loCod.codnc8, codcpv WITH loCod.codcpv In crsfactura + Endscan + If poDate.tip <> 27 + If poDate.ntip_incasare = 2 && bon fiscal + If Type('gnListareAvizBonFiscal') = 'N' And m.gnListareAvizBonFiscal = 1 + lnTipTemp = poDate.tip + poDate.tip = 22 && La bonul fiscal listez AVIZ DE EXPEDITIE + listeaza_ofacturare() + poDate.tip = m.lnTipTemp + Endif + ltDataOra = Get_Ora() + listeaza_bon_fiscal(ltDataOra, poDate.nr_incasare, poDate.incasat, poDate.incasatCARD, poDate.proc_tva, poDate.nract, poDate.nBonDetaliat, "crsFactura") + ELSE + * Soldul pana la factura inclusiv + loSoldClient = GetSoldClient(poDate.id_client, IdVanzare2IdFact(podate.nid_vanzare)) + poDate.sold_lei = loSoldClient.sold_lei + poDate.sold_valuta = loSoldClient.sold_valuta + + listeaza_ofacturare() + ENDIF + + ENDIF && tip + Else + poGeneratorNumere.dezaloca_numar(poDate.nIdTipDoc) + + poGeneratorNumere.dezaloca_numar(16) && dezaloca numar chitanta + poGeneratorNumere.dezaloca_numar(3) && dezaloca numar bon fiscal + poGeneratorNumere.dezaloca_numar(26) && dezaloca numar POS/Card + + poDate.nr_incasare = 0 + poDate.incasat = 0 + ENDIF && pnButon + + Use In (SELECT('crsfactura')) + Use In (SELECT('crsfacturaset')) + Use In (SELECT('crsfacturafinala')) + Endif + + *!* lnRaspuns = amessagebox("Doriti sa continuati cu operatii de acest fel?", 4 + 32, "Confirmare") + lnRaspuns = AMESSAGEBOX([Doriti sa continuati cu operatii de acest fel?] + Chr(13) + Chr(10) + [DA=copiere date / NU=fara copiere date / Abandon], 3 + 32, "Confirmare") + If lnRaspuns = 6 && DA + loDateAnterior = CloneObj(m.poDate) && se retin informatiile pentru completarea pe factura urmatoare + Else + loDateAnterior = Null + If m.lnRaspuns = 7 && NU inseamna DA fara copierea datelor + lnRaspuns = 6 && DA + Endif + Endif + + poDate.Reset(7 - lnRaspuns) + poDateGestiuneDest.Reset() + Endif + *!* Endif + *!* Endif + Enddo + *!* modificare v 2.2.0 + Use In (Select('jtva_coloane_temp')) + Use In (Select('jtva_coloane')) + *!* modificare v 2.2.0 ^ + Release poDate, poGeneratorNumere +Endproc +******************************************** SFARSIT: factureaza ********************************************** + + +*** +******************************************** INCEPUT: factureaza2 ********************************************** +Procedure factureaza2 + Lparameters tnTip + Private pnButon, poDate, poDateGestiuneDest, pnTotalDiscountAvize, plVizibil, poGeneratorNumere + + *!* modificare v 2.0.67 + *!* PRIVATE pnTipFacturare + *!* pnTipFacturare = 0 + *!* modificare v 2.0.67 ^ + Local lcCursor, lcObiect, lcObject, lcSqlCursor, lnSucces, lnTipTemp, loArticole, ltDataOra + *:Global ofrmceredate, ofrmdetaliifactura + If glLunaInchisa + AMESSAGEBOX("Nu pute_i emite documente, deoarece aceasta luna este nchisa!", 0 + 48, "Luna nchisa") + Return + Endif + + Local lnIdSet, lnRaspuns, loDateAnterior + loDateAnterior = Null + + pnTotalDiscountAvize = 0 + + **************************************************** + ** Valori pentru pnTipFacturare + ** 0 - facturare pe baza de lista de preturi,pe baza de comanda + ** 1 - facturare contracte in rate + ** 2 - facturare contracte in rate + ** 3 - facturare contracte (articole din contract) + ** 4 - facturare contracte (articole din lista de preturi) + **************************************************** + lnIdSet = 25000 + tnTip - 1 + gnScadereStoc * 10 + **************************************************** + ** Valori pentru (lnIdSet,tnTip) + ** Facturare + ** (25000,1) - pe baza de lista de preturi ( 25010 - daca e cu scadere din gestiune ) + ** (25001,2) - pe baza de contracte ( 25011 - daca e cu scadere din gestiune ) + ** (25002,3) - pe baza de comenzi ( 25012 - daca e cu scadere din gestiune ) + ** (25003,4) - pe baza de avize ( 25013 - daca e cu scadere din gestiune ) + ** (25004,5) - pe baza de lista de preturi in valuta ( 25014 - daca e cu scadere din gestiune ) + ** (25005,6) - pe baza de contract in valuta ( 25015 - daca e cu scadere din gestiune ) + ** (25006,7) - credit note + ** (25007,8) - retur factura in lei ( 25017 ) + ** (25008,9) - retur factura in valuta ( 25018 ) + ** (25009,10) - factura fiscala in valuta ( 25019 ) + ** (25043,44) - factura hotel + ** (25044,45) - factura restaurant ( 25054 ) + ** (25045,46) - nota de plata restaurant ( 25055 ) + ** (25047,48) - factura marfa custodie cu desc. k ( 25057 ) + ** (25048,49) - factura marfa custodie fara desc. k ( 25058 ) + ** Avize de expeditie + ** (25020,21) - catre clienti din comanda ( 25030 - daca e cu scadere din gestiune ) + ** (25021,22) - catre clienti din lista ( 25031 - daca e cu scadere din gestiune ) + ** (25022,23) - transfer catre subunitati din lista ( 25032 - daca e cu scadere din gestiune ) + ** (25023,24) - aviz de retur ( 25033 - daca e cu scadere din gestiune ) + ** (25024,25) - transfer catre subunitati din comanda ( 25034 - daca e cu scadere din gestiune ) + ** (25025,26) - catre clienti din contract ( 25035 - daca e cu scadere din gestiune ) + ** (25026,27) - transfer catre subunitati pe baza de lucrare( 25036 - daca e cu scadere din gestiune ) + ** (25027,28) - catre clienti debitori din comanda ( 25037 - daca e cu scadere din gestiune ) + ** (25028,29) - catre clienti debitori din lista ( 25038 - daca e cu scadere din gestiune ) + ** (25029,30) - transfer catre subunitati pe baza de NIR ( 25039 - daca e cu scadere din gestiune ) + ** (25040,41) - retur transfer catre subunitati lista pret ( 25050 - daca e cu scadere din gestiune ) + ** (25041,42) - catre clienti custodie pe baza de comanda ( 25051 - daca e cu scadere din gestiune ) + ** (25046,47) - catre clienti custodie pe baza de comanda ptr. descarcare cu K ( 25056 - daca e cu scadere din gestiune ) + ** in lucru (25049,50) - retur de la clienti custodie ( 25059 - daca e cu scadere din gestiune ) + ** + ** ROAGEST + ** (236/240/241/242,-6) - retur de la gestiune valorica + ** + ** ROARETAIL + ** (25042,43) - bonuri fiscale colectate de la magazine ( 25052 - daca e cu scadere din gestiune ) + **************************************************** + *!* modificare v 2.2.0 + *!* update_jtva_coloane([JV]) + update_jtva_coloane([JV], [jtva_coloane_temp]) + *!* modificare v 2.2.0 ^ + lnRaspuns = 6 + Do While lnRaspuns = 6 + plVizibil = .T. + + If !actualizeaza_optiuni_program() + Release poDate, poGeneratorNumere + Return + Endif + + If Type('poDate') <> 'O' + poDate = Createobject("oDateFactura", lnIdSet, tnTip) + poGeneratorNumere = Createobject("oGeneratorNumere") + Endif + Do Case + Case tnTip = 27 + poDate.nIdTipDoc = 6 && AVIZ + Case tnTip = 30 + poDate.nIdTipDoc = 6 && AVIZ + Case tnTip < 21 Or Inlist(tnTip, 45, 48, 49) && modificare : 45 (v2.0.87), 48 (v2.0.93), 49 (v2.0.95) + poDate.nIdTipDoc = 5 && FACTURA + Otherwise + poDate.nIdTipDoc = 6 && AVIZ + Endcase + + + * Completare date + If Type('loDateAnterior') = 'O' + poDate.completeaza_setari_document(m.loDateAnterior) + Endif + + poGeneratorNumere.ResetNumere() + + + poDate.rezultat_serii = poGeneratorNumere.creeaza_cursor_serii(poDate.nIdTipDoc) + + If Type('poDateGestiuneDest') <> 'O' + poDateGestiuneDest = Createobject("oDateGestiune") + Endif + + Do Case + Case tnTip = 27 + lcObiect = [frm_date_aviz_lucrare] + Case tnTip = 30 + lcObiect = [frm_date_aviz_lucrare] + Case tnTip < 21 Or Inlist(tnTip, 45, 48, 49) && modificare : 45 (v2.0.87), 48 (v2.0.93), 49 (v2.0.95) + lcObiect = [frm_date_factura] + Otherwise + lcObiect = [frm_date_aviz] + Endcase + + pnButon = 1 + If .F. + ofrmceredate = Createobject(m.lcObiect) + ofrmceredate.ntip = tnTip + ofrmceredate.Show() + Endif && .F. + *!* modificare v 2.2.0 + Use In (Select('jtva_coloane')) + If poDate.tva_incasare = 0 + Select * From jtva_coloane_temp Where Isnull(id_jtva_ex) Into Cursor jtva_coloane + Else + Select * From jtva_coloane_temp Where Isnull(id_jtva_neex) Into Cursor jtva_coloane + Endif + *!* modificare v 2.2.0 ^ + Release ofrmceredate + If pnButon = 2 + poGeneratorNumere.dezaloca_numar(poDate.nIdTipDoc) + + poGeneratorNumere.dezaloca_numar(16) && dezaloca numar chitanta + poGeneratorNumere.dezaloca_numar(3) && dezaloca numar bon fiscal + + IF TYPE('poDate.nr_incasare') = 'N' + poDate.nr_incasare = 0 + ENDIF + IF TYPE('poDate.incasat') = 'N' + poDate.incasat = 0 + ENDIF + + *!* modificare v 2.0.67 + If Used('crsCtrTemp') + Use In ('crsCtrTemp') + Endif + *!* modificare v 2.0.67 ^ + Release poDate, poGeneratorNumere + Return + Else + poGeneratorNumere.verifica_numar(poDate.nIdTipDoc, poDate.nract) + Endif + + *!* modificare v 2.0.67 + *!* pnTipFacturare = 0 + *!* modificare v 2.0.67 ^ + Do Case + *!* modificare v 2.0.93 ; modificare v 2.0.95 : am adaugat 49 + Case Inlist(tnTip, 48, 49) + lcSqlCursor = [{call ] + gcS + [.pack_facturare.cursor_articole_k(?poDate.zi_curs,?gnLuna,?gnAn,?gnIdUtil,?gnIdSucursala)}] + *!* modificare v 2.0.93 ^ + *!* modificare v 2.0.87 + Case tnTip = 45 + lcSqlCursor = [{call ] + gcS + [.pack_facturare.cursor_preturi(?poDate.zi_curs,?poDate.tip,?poDate.id_valuta,] + ; + [?poDate.listaid,?gnLuna,?gnAn,?gnIdUtil,?gnIdSucursala)}] + *!* modificare v 2.0.87 ^ + Case Inlist(tnTip, 1, 22, 5, 29, 7, 10) && lista de preturi + && modificare v 2.0.56 : am adaugat 10 + lcSqlCursor = [{call ] + gcS + [.pack_facturare.cursor_preturi(?poDate.zi_curs,?poDate.tip,?poDate.id_valuta,] + ; + [?poDate.id_gestiune_init,?gnLuna,?gnAn,?gnIdUtil,?gnIdSucursala)}] + Case Inlist(tnTip, 2, 26, 6) && contract + poDate.id_agent = 0 + *!* modificare v 2.0.67 + *!* lcSqlCursor = [{call ] + gcS + [.pack_facturare.cursor_contract(?poDate.zi_curs,?poDate.tip,?poDate.id_valuta,] + ; + *!* [?poDate.listaid,?poDate.id_gestiune_init,?gnLuna,?gnAn,?gnIdUtil,?gnIdSucursala,?@pnTipFacturare,] + ; + *!* [?@poDate.id_agent,?@poDate.nume_agent)}] + lcSqlCursor = [{call ] + gcS + [.pack_facturare.cursor_contract(?poDate.zi_curs,?poDate.tip,?poDate.id_valuta,] + ; + [?poDate.listaid,?poDate.id_gestiune_init,?gnLuna,?gnAn,?gnIdUtil,?gnIdSucursala,?@poDate.id_agent,?@poDate.nume_agent)}] + *!* modificare v 2.0.67 ^ + Case Inlist(tnTip, 3, 21, 25, 28, 42, 47) && comenzi + lcSqlCursor = [{call ] + gcS + [.pack_facturare.cursor_comanda(?poDate.zi_curs,?poDate.tip,?poDate.listaid,] + ; + [?gnIdUtil)}] + Case tnTip = 4 && din avize + lcSqlCursor = [{call ] + gcS + [.pack_facturare.cursor_avize(?poDate.listaid,?gnIdUtil,?@pnTotalDiscountAvize)}] + Case Inlist(tnTip, 23, 41) && transfer intre subunitati pe baza de lista de preturi + retur transfer + lcSqlCursor = [{call ] + gcS + [.pack_facturare.cursor_gestiune(?poDate.zi_curs,?poDate.id_pol,] + ; + [?poDate.id_client,?gnLuna,?gnAn,?gnIdUtil,?gnIdSucursala)}] + Case tnTip = 30 && transfer intre subunitati pe baza de NIR + *!* modificare v 2.0.61 + *!* modificare v 2.0.56 + *!* lcSqlCursor = [select rownum as id_c, a.ID_ARTICOL,a.SERIE,a.ID_GESTIUNE,a.ID_VALUTA,]+; + *!* [ 0 as discount_unitar,a.CODMAT,a.DENUMIRE, Nvl(a.UM,Chr(32)) as um, 1 as gestionabil,]+; + *!* [ a.CANT as cantitate, a.PROC_TVAV,0 as preturi_cu_tva, a.CURS, a.PRET as preta, a.PRETv as pret,a.tvav as tvav, 0 as pret_val,a.nume_val,]+; + *!* [ 0 as discount_unitar_val, 0 as tip_valuta,cont ]+; + *!* [ from vrul A where a.cod in (select max(b.cod) ]+; + *!* [ from act b where b.id_partc = ?poDate.id_furnizor and b.scc = '401' and b.nract = ?poDate.nrfactachi)] + *!* lcSqlCursor = [select rownum as id_c,rownum as id_temp, a.ID_ARTICOL,a.SERIE,a.ID_GESTIUNE,b.ID_VALUTA,]+; + *!* [ 0 as discount_unitar,a.CODMAT,a.DENUMIRE, Nvl(a.UM,Chr(32)) as um, 1 as gestionabil,]+; + *!* [ a.CANT as cantitate, a.PROC_TVAV,0 as preturi_cu_tva, 1 as CURS, a.PRET as preta, a.PRETv as pret,a.tvav as tvav, 0 as pret_val,b.nume_val,]+; + *!* [ 0 as discount_unitar_val, 0 as tip_valuta,a.cont,a.pretd,a.id_valuta as id_valuta_d ]+; + *!* [ from vrul A left join ] + ; + *!* [ (select id_valuta, nume_val from vnom_valute where moneda_nationala = 1 and rownum = 1) b on 1 = 1 ] + ; + *!* [ where a.cod in (select max(b.cod) ]+; + *!* [ from act a1 where a1.sters = 0 and a1.id_partc = ?poDate.id_furnizor and a1.scc = '401' and a1.nract = ?poDate.nrfactachi)] + *!* *!* modificare v 2.0.56 ^ + *!* modificare v 2.0.90 + *!* modificare v 2.0.71 : 0 as curs; conditii gcCondSucursala si a.id_gestiune = ?poDate.id_client + *!* lcSqlCursor = [select rownum as id_c,rownum as id_temp, a.ID_ARTICOL,a.SERIE,a.ID_GESTIUNE,b.ID_VALUTA,]+; + *!* [ 0 as discount_unitar,c.CODMAT,c.DENUMIRE, Nvl(c.UM,Chr(32)) as um, 1 as gestionabil,]+; + *!* [ a.CANT as cantitate, a.PROC_TVAV,decode(d.nr_pag,6,1,7,1,0) as preturi_cu_tva, 0 as CURS,1 as multiplicator,a.PRET as preta,] + ; + *!* [a.pretv+a.tvav as pretctva,a.pretv as pretftva,] + ; + *!* [a.tvav,0 as pret_val,b.nume_val,]+; + *!* [ 0 as discount_unitar_val, 0 as tip_valuta,a.cont,a.pretd,a.id_valuta as id_valuta_d ]+; + *!* [ from rul A left join ] + ; + *!* [ (select id_valuta, nume_val from vnom_valute where moneda_nationala = 1 and rownum = 1) b on 1 = 1 ] + ; + *!* [ left join nom_articole c on a.id_articol = c.id_articol ] + ; + *!* [ left join nom_gestiuni d on a.id_gestiune = d.id_gestiune ] + ; + *!* [ where a.sters = 0 and a.id_gestiune = ?poDate.id_client and a.cod in (select max(a1.cod) ]+; + *!* [ from act a1 where a1.sters = 0 and a1.id_partc = ?poDate.id_furnizor and a1.scc = '401' and a1.nract = ?poDate.nrfactachi] + ; + *!* STRTRAN(gcCondSucursala,[id_sucursala],[a1.id_sucursala]) + [)] + *!* modificare v 2.0.61 ^ + lcSqlCursor = [{call pack_facturare.cursor_aviz_nir(?poDate.id_client,?poDate.id_furnizor,?poDate.nrfactachi,?gnIdSucursala)}] + *!* modificare v 2.0.90 ^ + Case tnTip = 27 + lcSqlCursor = [{call ] + gcS + [.pack_facturare.cursor_lucrare(?poDate.zi_curs,?poDate.id_client,] + ; + [?poDate.id_lucrare,?gnLuna,?gnAn,?gnIdUtil,?gnIdSucursala)}] + *!* modificare v 2.0.56 + Case Inlist(tnTip, 8, 9) && facturi de retur + lcSqlCursor = [{call ] + gcS + [.pack_facturare.cursor_retur(?poDate.in_valuta,?poDate.listaid,?gnIdUtil)}] + *!* modificare v 2.0.56 ^ + Endcase + If .F. + lcCursor = [crsarticole] + lnSucces = goExecutor.oExecute(lcSqlCursor, lcCursor) + Endif + lnSucces = 1 + If lnSucces < 0 + AMESSAGEBOX(goExecutor.oPrelucrareEroare(), 16, "Eroare") + If goExecutor.nEroare = 20005 + vizualizeaza_curs(poDate.zi_curs) + Endif + *!* nu inchid crsCtrTemp + *!* modificare v 2.0.56 + *!* poGeneratorNumere.dezaloca_numar(pnIdTipDoc) + *!* modificare v 2.0.56 ^ + Else + If .F. And Reccount(lcCursor) = 0 And (!Used(lcCursor + '1') Or (Used(lcCursor + '1') And Reccount(lcCursor + '1') = 0)) + AMESSAGEBOX("Nu exista articole pentru optiunile alese!", 48, "Atentie") + poGeneratorNumere.dezaloca_numar(poDate.nIdTipDoc) + *!* modificare v 2.0.67 + If Used('crsCtrTemp') + Use In ('crsCtrTemp') + Endif + *!* modificare v 2.0.67 ^ + Else + *!* modificare v 2.0.67 + *!* If Inlist(pnTipFacturare,1,2) + *!* *!* modificare v 2.0.56 : am mutat codul in procedura + *!* creeaza_crsfactura_rate() + *!* *!* modificare v 2.0.56 ^ + *!* lcObject = [frm_facturare_rate] + *!* Else + *!* modificare v 2.0.67 ^ + *!* modificare v 2.0.56 : am mutat codul in procedura + creeaza_facturacrs([crsfactura]) + *!* modificare v 2.0.56 ^ + If tnTip = 30 + Local lcIdJtva + Select (lcCursor) + Scan + Scatter Name loArticole Memo + Select crsfactura + update_jtva_coloane([JV], 'CrsCotaTva', 0) + Select CrsCotaTva + Locate For cota_tva = (loArticole.proc_tvav * 100 - 100) + If Found() + lcIdJtva = id_jtva_coloana + Else + lcIdJtva = Null + Endif + Use In CrsCotaTva + *!* modificare v 2.0.61 + *!* modificare v 2.0.56 : am adaugat pretd,id_valuta_d + *!* Insert Into crsfactura ; + *!* (id_c,id_temp,id_articol,id_gestiune,Cont,um,; + *!* id_valuta,gestionabil ,tip_valuta ,Curs ,id_jtva_coloana ,codmat ,; + *!* pret_achizitie,pretd,id_valuta_d,denumire ,pretftva ,pretctva ,valftva , valtva ,valctva ,; + *!* cantitate ,discountftva , discountctva , valdiscountftva ,valdiscounttva ,; + *!* valdiscountctva ,valdiminuatftva ,valdiminuattva , valdiminuatctva ,proc_tvav ,cu_tva ,serie ,; + *!* id_set_fact ,explicatie,id_pol ) ; + *!* values (; + *!* loArticole.id_c,loArticole.id_c,loArticole.id_articol,loArticole.id_gestiune,loArticole.Cont,loArticole.um,; + *!* loArticole.id_valuta,loArticole.gestionabil,loArticole.tip_valuta,loArticole.Curs,lcIdJtva ,Nvl(loArticole.codmat,' '),; + *!* loArticole.preta,loArticole.pretd,loArticole.id_valuta_d,loArticole.denumire,loArticole.Pret,loArticole.Pret+loArticole.tvav,Round(loArticole.cantitate*loArticole.Pret,gnpa),Round(loArticole.cantitate*loArticole.tvav,gnpa),Round((loArticole.cantitate*loArticole.Pret)+(loArticole.cantitate*loArticole.tvav),gnpa),; + *!* loArticole.cantitate,0,0,0,0,; + *!* 0,Round(loArticole.cantitate*loArticole.Pret,gnpa),Round(loArticole.cantitate*loArticole.tvav,gnpa),Round((loArticole.cantitate*loArticole.Pret)+(loArticole.cantitate*loArticole.tvav),gnpa),loArticole.proc_tvav,loArticole.preturi_cu_tva,'',; + *!* null,'',Null) + *!* modificare v 2.0.71 : am adaugat id_ctr = Null + *!* modificare v 2.0.90 : am adaugat multiplicator + Insert Into crsfactura ; + (id_c, id_temp, id_articol, id_gestiune, Cont, um, ; + id_valuta, gestionabil, tip_valuta, Curs, multiplicator, id_jtva_coloana, codmat, ; + pret_achizitie, pretd, id_valuta_d, denumire, pretftva, pretctva, valftva, valtva, valctva, ; + cantitate, discountftva, discountctva, valdiscountftva, valdiscounttva, ; + valdiscountctva, valdiminuatftva, valdiminuattva, valdiminuatctva, proc_tvav, cu_tva, serie, ; + id_set_fact, explicatie, id_pol, id_ctr ) ; + Values (; + loArticole.id_c, loArticole.id_c, loArticole.id_articol, loArticole.id_gestiune, loArticole.Cont, loArticole.um, ; + loArticole.id_valuta, loArticole.gestionabil, loArticole.tip_valuta, loArticole.Curs, ; + loArticole.multiplicator, lcIdJtva, Nvl(loArticole.codmat, ' '), ; + loArticole.preta, loArticole.pretd, loArticole.id_valuta_d, loArticole.denumire, ; + loArticole.pretftva, loArticole.pretctva, ; + Round(loArticole.cantitate * loArticole.pretftva, gnpc), ; + Round(loArticole.cantitate * loArticole.tvav, gnpc), ; + Round(loArticole.cantitate * loArticole.pretctva, gnpc), ; + loArticole.cantitate, 0, 0, 0, 0, ; + 0, Round(loArticole.cantitate * loArticole.pretftva, gnpc), Round(loArticole.cantitate * loArticole.tvav, gnpc), ; + Round(loArticole.cantitate * loArticole.pretctva, gnpc), loArticole.proc_tvav, loArticole.preturi_cu_tva, '', ; + Null, '', Null, Null) + *!* modificare v 2.0.61 ^ + &&25039 + Select (lcCursor) + Endscan + Release lcIdJtva + Select crsfactura + Release loArticole + Endif + + If tnTip = 27 + lcObject = [frm_avizare_lucrare] + Create Cursor crsgestiunidest(id_gestiune N(20), nume_gestiune c(100)) + Select crsgestiunidest + Append Blank + Replace id_gestiune With - 9999, nume_gestiune With '' + Insert Into crsgestiunidest(id_gestiune, nume_gestiune) ; + Select Distinct id_gestiune, nume_gestiune From (lcCursor) Order By nume_gestiune + Else + lcObject = [frm_facturare_articole2] + Endif + *!* modificare v 2.0.67 + *!* Endif + *!* modificare v 2.0.67 ^ + *!* modificare v 2.0.56 + *!* If Type('crsarticole.curs')<>'U' + *!* Select Distinct Curs,nume_val From crsArticole With (Buffering = .T.) Where tip_valuta = 1 Into Cursor crscursuri + *!* If poDate.in_valuta = 1 + *!* Select crscursuri + *!* poDate.Curs = Curs + *!* Endif + If poDate.in_valuta = 1 + Select Distinct Curs, nume_val, id_valuta, multiplicator From (lcCursor) With (Buffering = .T.) Where tip_valuta = 1 Order By nume_val Into Cursor crscursuri + Select crscursuri + poDate.Curs = Curs + poDate.multiplicator = multiplicator + Else + Do citeste_cursuri_zi With poDate.zi_curs In oproceduri_curs.prg + If Used('crscursuri') + If Reccount('crscursuri') = 0 + Use In (Select('crscursuri')) + Endif + Endif + *!* modificare v 2.0.56 ^ + Endif + + If .F. + If Type(lcCursor + '.nume_lista_preturi') <> 'U' + Create Cursor crspolitici (id_pol N(20), nume_lista_preturi c(100)) + Select crspolitici + *!* modificare v 2.0.77 + *!* Append Blank + *!* Replace id_pol With -9999,nume_lista_preturi With '' + Insert Into crspolitici(id_pol, nume_lista_preturi) Values (-9999, '') + *!* modificare v 2.0.77 ^ + Insert Into crspolitici(id_pol, nume_lista_preturi) ; + Select Distinct id_pol, nume_lista_preturi From (lcCursor) Order By nume_lista_preturi + Endif + Endif && .F. + If .F. + *!* modificare v 2.0.67 + If Inlist(tnTip, 2, 6, 26) + Create Cursor crscontracte(id_ctr N(20), numar_contract c(100), Data d Null, numar c(50) Null) + Select crscontracte + Append Blank + Replace id_ctr With - 9999, numar_contract With '' + Insert Into crscontracte(id_ctr, numar_contract, Data, numar) ; + Select Distinct id_ctr, numar_contract, Data, numar From (lcCursor + [1]) Order By Data, numar + Endif + Endif && .F. + *!* modificare v 2.0.67 ^ + ofrmdetaliifactura = Createobject(lcObject) + If tnTip = 30 + Private plreturn + Store .T. To plreturn + ofrmdetaliifactura.do_calculeaza_totaluri() + ofrmdetaliifactura.but_termin1.Click() + plVizibil = .F. + If !plreturn + Return + Endif + Else + If plVizibil + ofrmdetaliifactura.Show() + Else + ofrmdetaliifactura.Release() + pnButon = 2 + Endif + Endif + + If Used('crspolitici') + Use In crspolitici + Endif + + If Used('crscursuri') + Use In crscursuri + Endif + + *!* modificare v 2.0.67 + If Used('crscontracte') + Use In crscontracte + Endif + If Used('crsCtrTemp') + Use In crsCtrTemp + Endif + *!* modificare v 2.0.67 ^ + + *!* modificare v 2.0.80 + If poDate.incasat <> 0 + poGeneratorNumere.verifica_numar(16, poDate.nr_incasare) + Endif + *!* modificare v 2.0.80 + + If pnButon = 1 + * Completare codmat client + Select crsfactura + Scan + Replace codmatc With GetCodmatC(poDate.id_client, crsfactura.id_articol) In crsfactura + Endscan + + If poDate.tip <> 27 + If poDate.ntip_incasare = 2 && bon fiscal + If Type('gnListareAvizBonFiscal') = 'N' And m.gnListareAvizBonFiscal = 1 + lnTipTemp = poDate.tip + poDate.tip = 22 && La bonul fiscal listez AVIZ DE EXPEDITIE + listeaza_ofacturare() + poDate.tip = m.lnTipTemp + Endif + ltDataOra = Get_Ora() + listeaza_bon_fiscal(ltDataOra, poDate.nr_incasare, poDate.incasat, poDate.incasatCARD, poDate.proc_tva, poDate.nract, poDate.nBonDetaliat, "crsFactura") + Else + listeaza_ofacturare() + Endif + Endif + Else + poGeneratorNumere.dezaloca_numar(poDate.nIdTipDoc) + Endif + + If Used('crsfactura') + Use In crsfactura + Endif + If Used('crsfacturaset') + Use In crsfacturaset + Endif + If Used('crsfacturafinala') + Use In crsfacturafinala + Endif + Endif + + *!* lnRaspuns = amessagebox("Doriti sa continuati cu operatii de acest fel?", 4 + 32, "Confirmare") + lnRaspuns = AMESSAGEBOX([Doriti sa continuati cu operatii de acest fel?] + Chr(13) + Chr(10) + [DA=copiere date / NU=fara copiere date / Abandon], 3 + 32, "Confirmare") + If lnRaspuns = 6 && DA + loDateAnterior = CloneObj(m.poDate) && se retin informatiile pentru completarea pe factura urmatoare + Else + loDateAnterior = Null + If m.lnRaspuns = 7 && NU inseamna DA fara copierea datelor + lnRaspuns = 6 && DA + Endif + Endif + + poDate.Reset(7 - lnRaspuns) + poDateGestiuneDest.Reset() + Endif + *!* Endif + *!* Endif + Enddo + *!* modificare v 2.2.0 + Use In (Select('jtva_coloane_temp')) + Use In (Select('jtva_coloane')) + *!* modificare v 2.2.0 ^ + Release poDate, poGeneratorNumere +Endproc && factureaza2 +******************************************** SFARSIT: factureaza2 ********************************************** + +*** + +************************************ INCEPUT: completeaza_date_aviz_retur ************************************* +Function completeaza_date_aviz_retur + Local lnRezultatSerii + lnRezultatSerii = poGeneratorNumere.creeaza_cursor_serii(6) + ofrmdateavizretur = Createobject('frm_date_aviz_retur', lnRezultatSerii) + ofrmdateavizretur.Show(1) + Release ofrmdateavizretur, lnRezultatSerii + Return Iif(pnButon = 1, 1, -1) +Endfunc && completeaza_date_aviz_retur +************************************ SFARSIT: completeaza_date_aviz_retur ************************************* +******************************************** INCEPUT: listeaza_ofacturare ********************************************** +Procedure listeaza_ofacturare + Local loArticol, lcRaportVal, lnPretListAviz, lcRaport, llSilentios + Local loPreviewerConfig As "PreviewerConfig" + Local lcCursor, lcDestinationFile, lcDocument, lcExplicatieRaport, lcPdfHasImage, lcSetare + Local lcSetareVizualizare, lcSql, llPdfHasImage, lcSqlTVA + Local lcCursorFacturaTemp + *:Global poFirma + Private poClient, poBeneficiar, ptDataOra, pcExplicatieContract, pnTotalPozitii, pnIdUtil + poClient = Null + poBeneficiar = Null + ptDataOra = {//::} + pcExplicatieContract = '' + pnTotalPozitii = 0 + + lcRaportVal = [] + lnPretListAviz = 2 && fara TVA + pnIdUtil = Iif(!Empty(Nvl(poDate.id_util, 0)), poDate.id_util, m.gnIdUtil) + + ************************************************ + ** Date client, responsabil facturare si firma + ************************************************ + Do Case + Case poDate.eProforma = 1 + && Proforma + TEXT TO lcSql NOSHOW +select 1 as tip,(case when p.tip_persoana = 1 then prefix||' '|| p.denumire||' '|| p.sufix else p.denumire end) as denumire, + p.cod_fiscal, p.cod_fiscal2, p.adresa,p.telefon,'' as fax,p.reg_comert,p.banca,p.cont_banca, + '' as banca2,'' as cont_banca2,'' as banca3,'' as cont_banca3, + sysdate as dataora,p.tip_persoana,0 as capital_soc_var, + 0 as capital_soc_sub, b.comanda_externa,c.cod,d.adresa as adresa_facturare,NVL(d.email, p.email) as email_facturare,e.adresa as adresa_livrare, + d.denumire_adresa as denadrf,e.denumire_adresa as denadrl, + d.strada as stradaf, d.judet as judetf, d.indicativ as indicativ_judetf, d.localitate as localitatef, d.tara as taraf, d.prescurtare as cod_taraf, + e.strada as stradal, e.judet as judetl, e.indicativ as indicativ_judetl, e.localitate as localitatel, e.tara as taral, e.prescurtare as cod_taral, + f.numar as nr_ctr,f.data as data_ctr, + p.cod_tara, p.judet, p.indicativ_judet, p.cod_judet, p.localitate, p.id_cetatenie, p.strada, p.numar as strada_nr + from vnom_parteneri p + left join comenzi b on b.id_part=p.id_part and b.id_comanda=?poDate.listaid + left join parteneri_coduri c on c.id=b.id_codclient + left join vadrese_parteneri d on d.id_adresa=b.id_facturare + left join vadrese_parteneri e on e.id_adresa=b.id_livrare + left join contracte f on b.id_ctr = f.id_ctr + where p.id_part = ?poDate.id_client +union all +select 2 as tip,denumire,cod_fiscal,cod_fiscal2,'' as adresa,'' as telefon,'' as fax,reg_comert,'' as banca,'' as cont_banca, + '' as banca2,'' as cont_banca2,'' as banca3,'' as cont_banca3, + null as dataora,tip_persoana,0 as capital_soc_var,0 as capital_soc_sub ,'' as comanda_externa,'' as cod, + '' as adresa_facturare,''as email_facturare,'' as adresa_livrare,'' as denadrf,'' as denadrl, + '' as stradaf, '' as judetf, '' as indicativ_judetf, '' as localitatef, '' as taraf, '' as cod_taraf, + '' as stradal, '' as judetl, '' as indicativ_judetl, '' as localitatel, '' as taral, '' as cod_taral, + '' as nr_ctr,null as data_ctr, + '' as cod_tara, '' as judet, '' as indicativ_judet, '' as cod_judet, '' as localitate, 0 as id_cetatenie, '' as strada, '' as strada_nr + from nom_parteneri where sters = 0 and inactiv = 0 and id_part in + (select id_partener from utilizatori_rol_intern where sters = 0 and id_util = ?pnIdUtil) +union all +select 3 as tip,antet as denumire,cod_fiscal,'' as cod_fiscal2,adresa,telefon,fax,reg_comert,banca1 as banca, + cont_banca1 as cont_banca,banca2,cont_banca2,banca3,cont_banca3, + null as dataora,0 as tip_persoana,capital_soc_var,capital_soc_sub, + '' as comanda_externa,'' as cod,'' as adresa_facturare,'' as email_facturare,'' as adresa_livrare, + '' as denadrf,'' as denadrl, + '' as stradaf, '' as judetf, '' as indicativ_judetf, '' as localitatef, '' as taraf, '' as cod_taraf, + '' as stradal, '' as judetl, '' as indicativ_judetl, '' as localitatel, '' as taral, '' as cod_taral, + '' as nr_ctr,null as data_ctr, + '' as cod_tara, '' as judet, '' as indicativ_judet, '' as cod_judet, '' as localitate, 0 as id_cetatenie, '' as strada, '' as strada_nr + from syn_nom_firme where id_firma = ?gnIdFirma +union all +select 4 as tip,(case when p.tip_persoana = 1 then prefix||' '|| p.denumire||' '|| p.sufix else p.denumire end) as denumire, + p.cod_fiscal,p.cod_fiscal2,p.adresa,p.telefon,'' as fax,p.reg_comert,p.banca,p.cont_banca, + '' as banca2,'' as cont_banca2,'' as banca3,'' as cont_banca3, + sysdate as dataora,p.tip_persoana,0 as capital_soc_var, + 0 as capital_soc_sub, b.comanda_externa,c.cod,d.adresa as adresa_facturare,NVL(d.email, p.email) as email_facturare,e.adresa as adresa_livrare, + d.denumire_adresa as denadrf,e.denumire_adresa as denadrl, + d.strada as stradaf, d.judet as judetf, d.indicativ as indicativ_judetf, d.localitate as localitatef, d.tara as taraf, d.prescurtare as cod_taraf, + e.strada as stradal, e.judet as judetl, e.indicativ as indicativ_judetl, e.localitate as localitatel, e.tara as taral, e.prescurtare as cod_taral, + f.numar as nr_ctr,f.data as data_ctr, + p.cod_tara, p.judet, p.indicativ_judet, p.cod_judet, p.localitate, p.id_cetatenie, p.strada, p.numar as strada_nr + from vnom_parteneri p + left join comenzi b on b.id_part=p.id_part and b.id_comanda=?poDate.listaid + left join parteneri_coduri c on c.id=b.id_codclient + left join vadrese_parteneri d on d.id_adresa=b.id_facturare + left join vadrese_parteneri e on e.id_adresa=b.id_livrare + left join contracte f on b.id_ctr = f.id_ctr + where p.id_part = ?poDate.nIdBeneficiar + ENDTEXT + Case Inlist(poDate.tip, 23, 25, 27, 30) And Isnull(poDate.id_part_rez) && AVIZE SUBUNITATI PE BAZA DE LISTA DE PRETURI, COMANDA, LUCRARE, NIR + *!* 14.12.2015 - sesizare Printconcept 4171 - nu apareau datele clientului + lcSql = [select 1 as tip,Nvl(c.denumire,a.nume_gestiune) as denumire,nvl(c.cod_fiscal,a.cgest) as cod_fiscal,c.cod_fiscal2,] + ; + [Nvl(d.adresa,'') as adresa,NVL(d.email,'') as email,Nvl(d.telefon1,'') as telefon,Nvl(d.fax,'') as fax,] + ; + [Nvl(c.reg_comert,'') as reg_comert,Nvl(c.banca,'') as banca,Nvl(c.cont_banca,'') as cont_banca,] + ; + ['' as banca2,'' as cont_banca2,'' as banca3,'' as cont_banca3,] + ; + [sysdate as dataora,1 as tip_persoana,0 as capital_soc_var,] + ; + [0 as capital_soc_sub, ] + ; + ['' as comanda_externa,'' as cod,d.adresa as adresa_facturare,d.email as email_facturare, '' as adresa_livrare,] + ; + [d.denumire_adresa as denadrf,'' as denadrl,] + ; + [d.strada as stradaf, d.judet as judetf, d.indicativ as indicativ_judetf, d.localitate as localitatef, d.tara as taraf, d.prescurtare as cod_taraf,] + ; + ['' as stradal, '' as judetl, '' as indicativ_judetl, '' as localitatel, '' as taral, '' as cod_taral,] + ; + ['' as nr_ctr, '' as data_ctr,] + ; + [c.cod_tara, c.judet, c.indicativ_judet, c.cod_judet, c.localitate, c.id_cetatenie, c.strada, c.numar as strada_nr ] + ; + [from nom_gestiuni a ] + ; + [left join asociere_parteneri_gestiuni b on a.id_gestiune = b.id_gestiune ] + ; + [left join vnom_parteneri c on b.id_part = c.id_part ] + ; + [left join vadrese_parteneri d on c.id_part = d.id_part and d.principala = 1 ] + ; + [where a.id_gestiune = ?poDateGestiuneDest.id_gestiune ] + ; + [union all ] + ; + [select 2 as tip,denumire,cod_fiscal,'' as cod_fiscal2,'' as adresa,'' as email,'' as telefon,'' as fax,'' as reg_comert,'' as banca,] + ; + ['' as cont_banca,] + ; + ['' as banca2,'' as cont_banca2,'' as banca3,'' as cont_banca3,] + ; + [null as dataora,tip_persoana,0 as capital_soc_var,0 as capital_soc_sub, ] + ; + ['' as comanda_externa,'' as cod,] + ; + ['' as adresa_facturare,'' as email_facturare,'' as adresa_livrare,'' as denadrf,'' as denadrl,] + ; + ['' as stradaf, '' as judetf, '' as indicativ_judetf, '' as localitatef, '' as taraf, '' as cod_taraf, ] + ; + ['' as stradal, '' as judetl, '' as indicativ_judetl, '' as localitatel, '' as taral, '' as cod_taral, ] + ; + ['' as nr_ctr,null as data_ctr,] + ; + ['' as cod_tara, '' as judet, '' as indicativ_judet, '' as cod_judet, '' as localitate, 0 as id_cetatenie, '' as strada, '' as strada_nr ] + ; + [from nom_parteneri where sters = 0 and inactiv = 0 and id_part in ] + ; + [(select id_partener from utilizatori_rol_intern where sters = 0 and id_util = ?pnIdUtil)] + ; + [union all ] + ; + [select 3 as tip,antet as denumire,cod_fiscal,'' as cod_fiscal2,adresa,email,telefon,fax,reg_comert,] + ; + [banca1 as banca,cont_banca1 as cont_banca,] + ; + [banca2,cont_banca2,banca3,cont_banca3,] + ; + [null as dataora,0 as tip_persoana,capital_soc_var,capital_soc_sub, ] + ; + ['' as comanda_externa,'' as cod,] + ; + ['' as adresa_facturare,'' as email_facturare,'' as adresa_livrare,'' as denadrf,'' as denadrl,] + ; + ['' as stradaf, '' as judetf, '' as indicativ_judetf, '' as localitatef, '' as taraf, '' as cod_taraf, ] + ; + ['' as stradal, '' as judetl, '' as indicativ_judetl, '' as localitatel, '' as taral, '' as cod_taral, ] + ; + ['' as nr_ctr,null as data_ctr,] + ; + ['' as cod_tara, '' as judet, '' as indicativ_judet, '' as cod_judet, '' as localitate, 0 as id_cetatenie, '' as strada, '' as strada_nr ] + ; + [from syn_nom_firme where id_firma = ?gnIdFirma] + *!* 14.12.2015 ^ + Case Inlist(poDate.tip, 41, -6) && RETUR AVIZ SUBUNITATI(ROAFACTURARE), RETUR AVIZ DIN GESTIUNE VALORICA (ROAGEST) + lcSql = [select 1 as tip,Nvl(c.denumire,a.nume_gestiune) as denumire,nvl(c.cod_fiscal,a.cgest) as cod_fiscal,c.cod_fiscal2,] + ; + [Nvl(d.adresa,'') as adresa,NVL(d.email,'') as email,Nvl(d.telefon1,'') as telefon,Nvl(d.fax,'') as fax,] + ; + [Nvl(c.reg_comert,'') as reg_comert,Nvl(c.banca,'') as banca,Nvl(c.cont_banca,'') as cont_banca,] + ; + ['' as banca2,'' as cont_banca2,'' as banca3,'' as cont_banca3,] + ; + [sysdate as dataora,1 as tip_persoana,0 as capital_soc_var,0 as capital_soc_sub, ] + ; + ['' as comanda_externa,'' as cod,d.adresa as adresa_facturare,d.email as email_facturare, '' as adresa_livrare,] + ; + [d.denumire_adresa as denadrf,'' as denadrl,] + ; + [d.strada as stradaf, d.judet as judetf, d.indicativ as indicativ_judetf, d.localitate as localitatef, d.tara as taraf, d.prescurtare as cod_taraf,] + ; + ['' as stradal, '' as judetl, '' as indicativ_judetl, '' as localitatel, '' as taral, '' as cod_taral,] + ; + ['' as nr_ctr, '' as data_ctr,] + ; + [c.cod_tara, c.judet, c.indicativ_judet, c.cod_judet, c.localitate, c.id_cetatenie, c.strada, c.numar as strada_nr ] + ; + [from nom_gestiuni a ] + ; + [left join asociere_parteneri_gestiuni b on a.id_gestiune = b.id_gestiune ] + ; + [left join vnom_parteneri c on b.id_part = c.id_part ] + ; + [left join vadrese_parteneri d on c.id_part = d.id_part and d.principala = 1 ] + ; + [where a.id_gestiune = ?poDate.id_client ] + ; + [union all ] + ; + [select 2 as tip,denumire,cod_fiscal,cod_fiscal2,'' as adresa,'' as email,'' as telefon,'' as fax,'' as reg_comert,'' as banca,] + ; + ['' as cont_banca,] + ; + ['' as banca2,'' as cont_banca2,'' as banca3,'' as cont_banca3,] + ; + [null as dataora,tip_persoana,0 as capital_soc_var,0 as capital_soc_sub, ] + ; + ['' as comanda_externa,'' as cod,] + ; + ['' as adresa_facturare,'' as email_facturare,'' as adresa_livrare,'' as denadrf,'' as denadrl,] + ; + ['' as stradaf, '' as judetf, '' as indicativ_judetf, '' as localitatef, '' as taraf, '' as cod_taraf, ] + ; + ['' as stradal, '' as judetl, '' as indicativ_judetl, '' as localitatel, '' as taral, '' as cod_taral, ] + ; + ['' as nr_ctr,null as data_ctr,] + ; + ['' as cod_tara, '' as judet, '' as indicativ_judet, '' as cod_judet, '' as localitate, 0 as id_cetatenie, '' as strada, '' as strada_nr ] + ; + [from nom_parteneri where sters = 0 and inactiv = 0 and id_part in ] + ; + [(select id_partener from utilizatori_rol_intern where sters = 0 and id_util = ?pnIdUtil)] + ; + [union all ] + ; + [select 3 as tip,antet as denumire,cod_fiscal,'' as cod_fiscal2,adresa,email,telefon,fax,reg_comert,] + ; + [banca1 as banca,cont_banca1 as cont_banca,] + ; + [banca2,cont_banca2,banca3,cont_banca3,] + ; + [null as dataora,0 as tip_persoana,capital_soc_var,capital_soc_sub, ] + ; + ['' as comanda_externa,'' as cod,] + ; + ['' as adresa_facturare,'' as email_facturare,'' as adresa_livrare,'' as denadrf,'' as denadrl,] + ; + ['' as stradaf, '' as judetf, '' as indicativ_judetf, '' as localitatef, '' as taraf, '' as cod_taraf, ] + ; + ['' as stradal, '' as judetl, '' as indicativ_judetl, '' as localitatel, '' as taral, '' as cod_taral, ] + ; + ['' as nr_ctr,null as data_ctr,] + ; + ['' as cod_tara, '' as judet, '' as indicativ_judet, '' as cod_judet, '' as localitate, 0 as id_cetatenie, '' as strada, '' as strada_nr ] + ; + [from syn_nom_firme where id_firma = ?gnIdFirma] + *!* modificare v 2.0.16 ^ + Case Inlist(poDate.tip, 3, 21, 28, 42, 47) Or (poDate.tip = 4 And Not Empty(poDate.id_comanda_aviz)) + &&Factura pe baza de comanda/aviz din comanda sau factura din aviz si avizul este din comanda + *!* modificare v 2.0.99 : am adaugat data, nr_ctr + lcSql = [select 1 as tip,(case when p.tip_persoana = 1 then p.prefix||' '||p.denumire||' '||p.sufix else p.denumire end) as denumire,] + ; + [p.cod_fiscal,p.cod_fiscal2,p.adresa,p.telefon,'' as fax,p.reg_comert,p.banca,p.cont_banca,] + ; + ['' as banca2,'' as cont_banca2,'' as banca3,'' as cont_banca3,] + ; + [sysdate as dataora,p.tip_persoana,0 as capital_soc_var,0 as capital_soc_sub,] + ; + [b.comanda_externa,c.cod,] + ; + [d.adresa as adresa_facturare,d.email as email_facturare,e.adresa as adresa_livrare,] + ; + [d.denumire_adresa as denadrf,e.denumire_adresa as denadrl,] + ; + [d.strada as stradaf, d.judet as judetf, d.indicativ as indicativ_judetf, d.localitate as localitatef, d.tara as taraf, d.prescurtare as cod_taraf, ] + ; + [e.strada as stradal, e.judet as judetl, e.indicativ as indicativ_judetl, e.localitate as localitatel, e.tara as taral, e.prescurtare as cod_taral, ] + ; + [f.numar as nr_ctr,f.data as data_ctr, ] + ; + [p.cod_tara, p.judet, p.indicativ_judet, p.cod_judet, p.localitate, p.id_cetatenie, p.strada, p.numar as strada_nr ] + ; + [ from vnom_parteneri p ] + ; + [left join comenzi b on b.id_part=p.id_part and b.id_comanda=] + Iif(Inlist(poDate.tip, 3, 21, 28, 42, 47), [?poDate.listaid ], [?poDate.id_comanda_aviz ]) + ; + [left join parteneri_coduri c on c.id=b.id_codclient ] + ; + [left join vadrese_parteneri d on d.id_adresa=b.id_facturare ] + ; + [left join vadrese_parteneri e on e.id_adresa=b.id_livrare ] + ; + [left join contracte f on b.id_ctr = f.id_ctr ] + ; + [where p.id_part = ?poDate.id_client ] + ; + [union all ] + ; + [select 2 as tip,denumire,cod_fiscal,cod_fiscal2,'' as adresa,'' as telefon,'' as fax,reg_comert,'' as banca,'' as cont_banca,] + ; + ['' as banca2,'' as cont_banca2,'' as banca3,'' as cont_banca3,] + ; + [null as dataora,tip_persoana,0 as capital_soc_var,0 as capital_soc_sub ,] + ; + ['' as comanda_externa,'' as cod, ] + ; + ['' as adresa_facturare,'' as email_facturare,'' as adresa_livrare,'' as denadrf,'' as denadrl,] + ; + ['' as stradaf, '' as judetf, '' as indicativ_judetf, '' as localitatef, '' as taraf, '' as cod_taraf, ] + ; + ['' as stradal, '' as judetl, '' as indicativ_judetl, '' as localitatel, '' as taral, '' as cod_taral, ] + ; + ['' as nr_ctr,null as data_ctr,] + ; + ['' as cod_tara, '' as judet, '' as indicativ_judet, '' as cod_judet, '' as localitate, 0 as id_cetatenie, '' as strada, '' as strada_nr ] + ; + [from nom_parteneri ] + ; + [where sters = 0 and inactiv = 0 and id_part in ] + ; + [(select id_partener from utilizatori_rol_intern where sters = 0 and id_util = ?pnIdUtil)] + ; + [union all ] + ; + [select 3 as tip,antet as denumire,cod_fiscal,'' as cod_fiscal2,adresa,telefon,fax,reg_comert,banca1 as banca,] + ; + [cont_banca1 as cont_banca,] + ; + [banca2,cont_banca2,banca3,cont_banca3,] + ; + [null as dataora,0 as tip_persoana,capital_soc_var,capital_soc_sub,] + ; + ['' as comanda_externa,'' as cod,] + ; + ['' as adresa_facturare,'' as email_facturare,'' as adresa_livrare,'' as denadrf,'' as denadrl,] + ; + ['' as stradaf, '' as judetf, '' as indicativ_judetf, '' as localitatef, '' as taraf, '' as cod_taraf, ] + ; + ['' as stradal, '' as judetl, '' as indicativ_judetl, '' as localitatel, '' as taral, '' as cod_taral, ] + ; + ['' as nr_ctr,null as data_ctr,] + ; + ['' as cod_tara, '' as judet, '' as indicativ_judet, '' as cod_judet, '' as localitate, 0 as id_cetatenie, '' as strada, '' as strada_nr ] + ; + [from syn_nom_firme where id_firma = ?gnIdFirma] + *!* modificare ROAAUTO v 2.0.33 + Case poDate.tip = -12 And !Empty(Nvl(poDate.id_ordl, 0)) + lcSql = [select 1 as tip,(case when tip_persoana = 1 then prefix||' '||denumire||' '||sufix else denumire end) as denumire,] + ; + [cod_fiscal,cod_fiscal2,adresa,email,telefon,'' as fax,reg_comert,banca,cont_banca,] + ; + ['' as banca2,'' as cont_banca2,'' as banca3,'' as cont_banca3,] + ; + [sysdate as dataora,tip_persoana,0 as capital_soc_var, 0 as capital_soc_sub, ]+ ; + ['' as comanda_externa,'' as cod,] + ; + ['' as adresa_facturare,'' as email_facturare,'' as adresa_livrare,'' as denadrf,'' as denadrl,] + ; + ['' as stradaf, '' as judetf, '' as indicativ_judetf, '' as localitatef, '' as taraf, '' as cod_taraf, ] + ; + ['' as stradal, '' as judetl, '' as indicativ_judetl, '' as localitatel, '' as taral, '' as cod_taral, ] + ; + ['' as nr_ctr,null as data_ctr,] + ; + ['' as cod_tara, '' as judet, '' as indicativ_judet, '' as cod_judet, '' as localitate, 0 as id_cetatenie, strada, numar as strada_nr ] + ; + [from vnom_parteneri where id_part in ] + ; + [(select id_partener from dev_masiniclienti where id_masiniclient in ] + ; + [(select id_masiniclient from dev_ordl where id_ordl = ?poDate.id_ordl)) ] + ; + [union all ] + ; + [select 2 as tip,denumire,cod_fiscal,cod_fiscal2,'' as adresa,'' as email,'' as telefon,'' as fax,reg_comert,'' as banca,'' as cont_banca,] + ; + ['' as banca2,'' as cont_banca2,'' as banca3,'' as cont_banca3,] + ; + [null as dataora,tip_persoana,0 as capital_soc_var,0 as capital_soc_sub, ] + ; + ['' as comanda_externa,'' as cod,] + ; + ['' as adresa_facturare,'' as email_facturare,'' as adresa_livrare,'' as denadrf,'' as denadrl,] + ; + ['' as stradaf, '' as judetf, '' as indicativ_judetf, '' as localitatef, '' as taraf, '' as cod_taraf, ] + ; + ['' as stradal, '' as judetl, '' as indicativ_judetl, '' as localitatel, '' as taral, '' as cod_taral, ] + ; + ['' as nr_ctr,null as data_ctr,] + ; + ['' as cod_tara, '' as judet, '' as indicativ_judet, '' as cod_judet, '' as localitate, 0 as id_cetatenie, '' as strada, '' as strada_nr ] + ; + [from nom_parteneri ] + ; + [where sters = 0 and inactiv = 0 and id_part in ] + ; + [(select id_partener from utilizatori_rol_intern where sters = 0 and id_util = ?pnIdUtil)] + ; + [union all ] + ; + [select 3 as tip,antet as denumire,cod_fiscal,'' as cod_fiscal2,adresa,'' as email,telefon,fax,reg_comert,banca1 as banca,] + ; + [cont_banca1 as cont_banca,] + ; + [banca2,cont_banca2,banca3,cont_banca3,] + ; + [null as dataora,0 as tip_persoana,capital_soc_var,capital_soc_sub, ] + ; + ['' as comanda_externa,'' as cod,] + ; + ['' as adresa_facturare,'' as email_facturare,'' as adresa_livrare,'' as denadrf,'' as denadrl,] + ; + ['' as stradaf, '' as judetf, '' as indicativ_judetf, '' as localitatef, '' as taraf, '' as cod_taraf, ] + ; + ['' as stradal, '' as judetl, '' as indicativ_judetl, '' as localitatel, '' as taral, '' as cod_taral, ] + ; + ['' as nr_ctr,null as data_ctr,] + ; + ['' as cod_tara, '' as judet, '' as indicativ_judet, '' as cod_judet, '' as localitate, 0 as id_cetatenie, '' as strada, '' as strada_nr ] + ; + [from syn_nom_firme where id_firma = ?gnIdFirma] + *!* modificare ROAAUTO v 2.0.33 ^ + Otherwise + &&Factura + *!* modificare v 2.0.21 : Nvl(?poDate.id_part_rez,?poDate.id_client) in loc de ?poDate.id_client + TEXT TO lcSql NOSHOW +select 1 as tip,(case when tip_persoana = 1 then p.prefix||' '|| p.denumire||' '|| p.sufix else denumire end) as denumire, + p.cod_fiscal,p.cod_fiscal2,p.adresa,p.telefon,'' as fax,p.reg_comert,p.banca,p.cont_banca, + '' as banca2,'' as cont_banca2,'' as banca3,'' as cont_banca3, + '' as banca4,'' as cont_banca4,'' as banca5,'' as cont_banca5,'' as banca6,'' as cont_banca6,'' as banca7,'' as cont_banca7, + '' as banca8,'' as cont_banca8,'' as banca9,'' as cont_banca9,'' as banca10,'' as cont_banca10, + sysdate as dataora,p.tip_persoana,0 as capital_soc_var,0 as capital_soc_sub, + '' as comanda_externa,'' as cod, + d.adresa as adresa_facturare,d.email as email_facturare,'' as adresa_livrare,d.denumire_adresa as denadrf,'' as denadrl, + d.strada as stradaf, d.judet as judetf, d.indicativ as indicativ_judetf, d.localitate as localitatef, d.tara as taraf, d.prescurtare as cod_taraf, + '' as stradal, '' as judetl, '' as indicativ_judetl, '' as localitatel, '' as taral, '' as cod_taral, + p.cod_tara, p.judet, p.indicativ_judet, p.cod_judet, p.localitate, p.id_cetatenie, p.strada, p.numar as strada_nr + from vnom_parteneri p left join vanzari b on b.id_part=p.id_part and b.id_vanzare = ?poDate.nid_vanzare + left join vadrese_parteneri d on d.id_adresa=b.id_facturare + where p.id_part = Nvl(?poDate.id_part_rez,?poDate.id_client) +union all +select 2 as tip,denumire,cod_fiscal,cod_fiscal2,'' as adresa,'' as telefon,'' as fax,reg_comert,'' as banca,'' as cont_banca, + '' as banca2,'' as cont_banca2,'' as banca3,'' as cont_banca3, + '' as banca4,'' as cont_banca4,'' as banca5,'' as cont_banca5,'' as banca6,'' as cont_banca6,'' as banca7,'' as cont_banca7, + '' as banca8,'' as cont_banca8,'' as banca9,'' as cont_banca9,'' as banca10,'' as cont_banca10, + null as dataora,tip_persoana,0 as capital_soc_var,0 as capital_soc_sub, + '' as comanda_externa,'' as cod, + '' as adresa_facturare, '' as email_facturare,'' as adresa_livrare, '' as denadrf,'' as denadrl, + '' as stradaf, '' as judetf, '' as indicativ_judetf, '' as localitatef, '' as taraf, '' as cod_taraf, + '' as stradal, '' as judetl, '' as indicativ_judetl, '' as localitatel, '' as taral, '' as cod_taral, + '' as cod_tara, '' as judet, '' as indicativ_judet, '' as cod_judet, '' as localitate, 0 as id_cetatenie, '' as strada, '' as strada_nr + from nom_parteneri + where sters = 0 and inactiv = 0 and id_part in + (select id_partener from utilizatori_rol_intern where sters = 0 and id_util = ?pnIdUtil) +union all + select 3 as tip,antet as denumire,cod_fiscal,'' as cod_fiscal2,adresa,telefon,fax,reg_comert,banca1 as banca, + cont_banca1 as cont_banca,banca2,cont_banca2,banca3,cont_banca3, + banca4,cont_banca4,banca5,cont_banca5,banca6,cont_banca6,banca7,cont_banca7, + banca8,cont_banca8,banca9,cont_banca9,banca10,cont_banca10, + null as dataora,0 as tip_persoana,capital_soc_var,capital_soc_sub, + '' as comanda_externa,'' as cod, + '' as adresa_facturare,''as email_facturare,'' as adresa_livrare, '' as denadrf,'' as denadrl, + '' as stradaf, '' as judetf, '' as indicativ_judetf, '' as localitatef, '' as taraf, '' as cod_taraf, + '' as stradal, '' as judetl, '' as indicativ_judetl, '' as localitatel, '' as taral, '' as cod_taral, + '' as cod_tara, '' as judet, '' as indicativ_judet, '' as cod_judet, '' as localitate, 0 as id_cetatenie, '' as strada, '' as strada_nr + from syn_nom_firme where id_firma = ?gnIdFirma +union all +select 4 as tip,(case when tip_persoana = 1 then p.prefix||' '|| p.denumire||' '|| p.sufix else denumire end) as denumire, + p.cod_fiscal,p.cod_fiscal2,p.adresa,p.telefon,'' as fax,p.reg_comert,p.banca,p.cont_banca, + '' as banca2,'' as cont_banca2,'' as banca3,'' as cont_banca3, + '' as banca4,'' as cont_banca4,'' as banca5,'' as cont_banca5,'' as banca6,'' as cont_banca6,'' as banca7,'' as cont_banca7, + '' as banca8,'' as cont_banca8,'' as banca9,'' as cont_banca9,'' as banca10,'' as cont_banca10, + sysdate as dataora,p.tip_persoana,0 as capital_soc_var,0 as capital_soc_sub, + '' as comanda_externa,'' as cod, + d.adresa as adresa_facturare,d.email as email_facturare,'' as adresa_livrare,d.denumire_adresa as denadrf,'' as denadrl, + d.strada as stradaf, d.judet as judetf, d.indicativ as indicativ_judetf, d.localitate as localitatef, d.tara as taraf, d.prescurtare as cod_taraf, + '' as stradal, '' as judetl, '' as indicativ_judetl, '' as localitatel, '' as taral, '' as cod_taral, + p.cod_tara, p.judet, p.indicativ_judet, p.cod_judet, p.localitate, p.id_cetatenie, p.strada, p.numar as strada_nr + from vnom_parteneri p left join vanzari b on b.id_part=p.id_part and b.id_vanzare = ?poDate.nid_vanzare + left join vadrese_parteneri d on d.id_adresa=b.id_facturare + where p.id_part = ?poDate.nIdBeneficiar + ENDTEXT + Endcase + + If Used('crsdatefacturare') + Use In crsdatefacturare + Endif + lcCursor = [crsdatefacturare] + If !goExecutor.oExecuta(lcSql, lcCursor) + Return + Endif + + Select crsdatefacturare + Scan + Do Case + Case tip = 1 + Scatter Name poClient Memo + ptDataOra = poClient.dataora + Case tip = 2 + With poDate + .nume_responsabil = denumire + .BIresp = reg_comert + .CNPresp = cod_fiscal + Endwith + Case tip = 4 + Scatter Name poBeneficiar Memo + Otherwise + Scatter Name poFirma Memo + Endcase + Endscan + If Type('poBeneficiar') <> 'O' + Select crsdatefacturare + Scatter Name poBeneficiar Memo Blank + Endif + Use In crsdatefacturare + ************************************************ + ************************************************ + AddProperty(poClient, 'denumireClient', []) + AddProperty(poFirma, 'b_swift', []) + AddProperty(poFirma, 'b_adresa', []) + AddProperty(poFirma, 'b_swift2', []) + AddProperty(poFirma, 'b_adresa2', []) + AddProperty(poFirma, 'b_swift3', []) + AddProperty(poFirma, 'b_adresa3', []) + ************************************************ + ************************************************ + ** Date suplimentare contract + ************************************************ + poClient.denumireClient = poClient.denumire && salvez denumirea originala in denumireClient + Do Case + *!* modificare v 2.0.67 + *!* Case poDate.tip = 2 + *!* && facturare pe baza de contract + *!* Private pnIdContract + *!* pnIdContract=Iif(Type('poDate.listaid')='C',Val(poDate.listaid),poDate.listaid) + *!* lcSql = [select contract from ] + gcS + [.vcontracte where id_ctr = ?pnIdContract and text_standard = 1] + *!* If Used('crsdatesuplimentare') + *!* Use In crsdatesuplimentare + *!* Endif + *!* lcCursor = [crsdatesuplimentare] + *!* lnSucces = goExecutor.oExecute(lcSql,lcCursor) + *!* If lnSucces<0 + *!* amessagebox(goExecutor.oPrelucrareEroare(),16,"Eroare") + *!* Return + *!* Endif + *!* If Reccount('crsdatesuplimentare')>0 + *!* Select crsdatesuplimentare + *!* lcNumarCtr = Nvl(contract,[.........]) + *!* pcExplicatieContract = [Conform contractului nr. ] + lcNumarCtr + *!* Else + *!* pcExplicatieContract = [] + *!* Endif + *!* Use In crsdatesuplimentare + *!* Release pnIdContract + *!* modificare v 2.0.67 ^ + Case Inlist(poDate.tip, 3, 21, 28, 42, 47) Or (poDate.tip = 4 And Not Empty(poDate.id_comanda_aviz)) + && factura/aviz pe baza de comanda + *!* modificare v 2.0.99 : am adaugat nr_ctr si data_ctr + pcExplicatieContract = Iif(!Empty(Nvl(poClient.comanda_externa, [])), [Conform comanda nr. ] + poClient.comanda_externa, []) + ; + Iif(!Empty(Nvl(poClient.data_ctr, {})), Iif(!Empty(Nvl(poClient.comanda_externa, [])), CRLF, []) + ; + [Conform contract nr.] + Alltrim(poClient.nr_ctr) + [ din data de ] + ; + Padl(Alltrim(Str(Day(poClient.data_ctr))), 2, [0]) + [.] + ; + Padl(Alltrim(Str(Month(poClient.data_ctr))), 2, [0]) + [.] + ; + Alltrim(Str(Year(poClient.data_ctr))), []) + *!* modificare v 2.0.46 + *!* If poDate.tip = 3 Or (poDate.tip=4 And Not Empty(poDate.id_comanda_aviz)) + *!* poClient.adresa=Iif(Empty(poClient.adresa_facturare),poClient.adresa,poClient.adresa_facturare) + *!* Else + *!* poClient.adresa=Iif(Empty(poClient.adresa_livrare),poClient.adresa,poClient.adresa_livrare) + *!* Endif + + If poDate.tip = 3 Or (poDate.tip = 4 And Not Empty(poDate.id_comanda_aviz)) + poClient.adresa = Alltrim(Iif(Empty(Nvl(poClient.adresa_facturare, [])), poClient.adresa, poClient.adresa_facturare)) + poClient.denumire = poClient.denumire + Nvl(poClient.denadrf, []) + Else + poClient.adresa = Alltrim(Iif(Empty(Nvl(poClient.adresa_livrare, [])), poClient.adresa, poClient.adresa_livrare)) + poClient.denumire = poClient.denumire + Nvl(poClient.denadrl, []) + Endif + *!* modificare v 2.0.46 ^ + Case poDate.tip = 4 + && facturare conform aviz + pcExplicatieContract = [Conform aviz : ] + poDate.descriere + *!* modificare 11.02.2008 + *!* poClient.adresa=Iif(Empty(poClient.adresa_facturare),poClient.adresa,poClient.adresa_facturare) + *!* modificare 11.02.2008 ^ + Otherwise + pcExplicatieContract = [] + + If Type('poClient.adresa_facturare') = 'C' + poClient.adresa = Alltrim(Iif(Empty(Nvl(poClient.adresa_facturare, [])), poClient.adresa, poClient.adresa_facturare)) + poClient.denumire = poClient.denumire + Nvl(poClient.denadrf, []) + Endif + + Endcase + ************************************************ + ************************************************ + + * Salvez obiectul poClient in poDate sa pot accesa poDate.oClient.email_facturare la trimitere emailuri cu listare factura pdf + poDate.oClient = poClient + + *!* modificare v 2.0.58 + If poDate.nRelistare = 0 + poDate.nSalveazaAtasamente = Nvl(citeste_optiune_firma([ATASAMENTEFACT]), 0) + Endif + *!* modificare v 2.0.58 ^ + + *!* modificare v 2.0.46 + alege_optiuni_listare_facturare() + If m.glAlegeBanca + alege_banci_facturare() + Endif + *!* modificare v 2.0.46 ^ + Select crsfactura + Calculate Max(Round(Nvl(proc_tvav, 1), 2)) To poDate.proc_tva + poDate.proc_tva = poDate.proc_tva * 100 - 100 + + poDate.text_aditional = STRTRAN(poDate.text_aditional, CHR(170), CHR(13) + CHR(10), 1, 100, 1) + + poDate.text_aditional_en = poDate.text_aditional && modificare v 2.0.80 + + * Text TVA de afisat in partea de sus a facturii, daca este o singura explicatie de TVA pe toate liniile din crsDetalii + IF TYPE('poDate.cTextTVA') = 'U' + ADDPROPERTY(poDate, 'cTextTVA', '') + IF TYPE('gnTextTVAFactura') = 'N' AND m.gnTextTVAFactura = 1 AND !EMPTY(NVL(poDate.nid_vanzare,0)) + TEXT TO lcSqlTVA TEXTMERGE noshow + select distinct jt.denumire as jtva_coloana, + jte.explicatie as jtva_coloana_ex + from vanzari_detalii a + left join jtva_coloane_explicatii jte +on jte.id = a.id_jtva_coloana_ex + left join jtva_coloane jt +on jt.id_jtva_coloana = a.id_jtva_coloana + where a.id_vanzare = <> + ENDTEXT + llSucces = goExecutor.oExecuta(m.lcSqlTVA, 'cTextTVATemp') + IF m.llSucces AND RECCOUNT('cTextTVATemp') = 1 + SELECT cTextTVATemp + GO TOP + poDate.cTextTVA = IIF(!EMPTY(NVL(jtva_coloana_ex, '')), ALLTRIM(jtva_coloana_ex), ALLTRIM(NVL(jtva_coloana,''))) + ENDIF + USE IN (SELECT('cTextTVATemp')) + ENDIF + ENDIF && poDate.cTextTVA + + Do Case + CASE poDate.nEFactura = 1 + * do nothing + + Case INLIST(poDate.tip, 10, 52) And poDate.eProforma = 0 && factura fiscala in valuta lista de preturi, factura fiscala in valuta pe baza de contract + *!* modificare v 2.0.56 + lcSetare = [FACTURA] + lcExplicatieRaport = [factura] + lcSetareVizualizare = [PREVIZFACT] + Do Case + Case gnFormatFactura = 1 && format A4 + lcRaport = [FACTURA] + lcRaportVal = [FACTURA_VAL] + Case gnFormatFactura = 2 && format A5 + lcRaport = [FACTURA_A5] + lcRaportVal = [FACTURA_VAL_A5] + Case gnFormatFactura = 3 + If optiuni_format_listare(0) = 2 + lcRaport = [FACTURA_A5] + lcRaportVal = [FACTURA_VAL_A5] + Else + lcRaport = [FACTURA] + lcRaportVal = [FACTURA_VAL] + Endif + Endcase + poDate.text_aditional = Iif(!Empty(Nvl(poDate.text_aditional, [])), poDate.text_aditional + Chr(13) + Chr(10), []) + ; + [Curs valutar = ] + formateaza(poDate.Curs, 14, gnPCurs) + [ RON / ] + ; + Iif(poDate.multiplicator = 1, [], Alltrim(Str(poDate.multiplicator)) + [ ]) + Alltrim(poDate.nume_valuta) + poDate.text_aditional_en = Iif(!Empty(Nvl(poDate.text_aditional, [])), poDate.text_aditional + Chr(13) + Chr(10), []) + ; + [Exchange rate = ] + Alltrim(Str(poDate.Curs, 14, gnPCurs)) + [ RON / ] + ; + Iif(poDate.multiplicator = 1, [], Alltrim(Str(poDate.multiplicator)) + [ ]) + Alltrim(poDate.nume_valuta) + If poDate.incasat <> 0 + poDate.sumavorbe = suma_in_vorbe(poDate.incasat) + poDate.explicatie_chit = [facturii ] + Allt(Allt(Nvl(poDate.serie_act, [])) + [ ] + Alltrim(Transf(poDate.nract, get_mask(20, 0)))) + [ din ] + Dtoc(poDate.dataact) + *!* modificare ROAFACTURARE v 2.0.84 : lcDocument + lcDocument = Iif(poDate.ntip_incasare = 11, [chitanta], Iif(poDate.ntip_incasare = 2, [bon fiscal], Iif(poDate.ntip_incasare = 3, [POS/Card], [bon fiscal/chitanta]))) + *!* modificare ROAAUTO v 2.0.41 ( 06.03.2011 ) : daca e bon fiscal, atunci nu-i trec seria + poDate.text_aditional = Iif(!Empty(Nvl(poDate.text_aditional, [])), poDate.text_aditional + Chr(13) + Chr(10), []) + ; + [ Achitat cu ] + lcDocument + [ nr.] + Iif(poDate.ntip_incasare = 2, [], Alltrim(Nvl(poDate.serie_chit, []))) + [ ] + Alltrim(Str(poDate.nr_incasare)) + [ din ] + Dtoc(poDate.dataact) + [ .] + *!* modificare ROAAUTO v 2.0.41 ( 06.03.2011 ) : daca e bon fiscal, atunci nu-i trec seria + poDate.text_aditional_en = Iif(!Empty(Nvl(poDate.text_aditional_en, [])), poDate.text_aditional_en + Chr(13) + Chr(10), []) + ; + [ Paid with cash ( receipt no. ] + Iif(poDate.ntip_incasare = 2, [], Alltrim(Nvl(poDate.serie_chit, []))) + [ ] + Alltrim(Str(poDate.nr_incasare)) + [ from ] + Dtoc(poDate.dataact) + [ ).] + Endif + *!* modificare v 2.0.56 ^ + *!* modificare v 2.0.77 + *!* *!* modificare v 2.0.4 + *!* Case Inlist(poDate.tip,23,25,27,28,29,30,41,-6) + *!* If Nvl(gnPretListSubunitati,2)=2 + *!* lcRaport = [AVIZ_TRANSFER] + *!* Else + *!* lcRaport = [AVIZ_TRANSFER_CTVA] + *!* Endif + *!* lcSetare = [AVIZ] + *!* lcExplicatieRaport = [avizul de transfer] + *!* *!* modificare v 2.0.46 + *!* *!* lnVizualizare = Iif(Type('gnVizualAviz')='N',gnVizualAviz,1) + *!* lcSetareVizualizare = [PREVIZAVIZ] + *!* *!* modificare v 2.0.46 ^ + *!* *!* modificare v 2.0.4 ^ + *!* modificare v 2.0.77 ^ + *!* modificare v 2.0.93 + Case (Between(poDate.tip, 1, 20) Or Inlist(poDate.tip, -1, -2, -3, -4, -8, -11, 44, 45, 48, 49, 50, 51, 52)) And poDate.eProforma = 1 + *!* Case poDate.tip < 20 And poDate.eProforma = 1 && proforme + *!* modificare v 2.0.93 ^ + lcRaport = [PROFORMA] + lcRaportVal = [PROFORMA_VAL] + lcSetare = [PROFORMA] + lcExplicatieRaport = [proforma] + *!* modificare v 2.0.46 + *!* lnVizualizare = Iif(Type('gnVizualProf')='N',gnVizualProf,1) + lcSetareVizualizare = [PREVIZPROF] + *!* modificare v 2.0.46 ^ + *!* modificare v 2.0.70 + If Nvl(gnListCursVal, 1) = 1 And poDate.in_valuta = 0 + Local lcCurs, lcCursEn + lcCurs = [] + lcCursEn = [] + Create Cursor crsTempVal(nume_val c(100), Curs N(14, gnPCurs), multiplicator N(10)) + Insert Into crsTempVal(nume_val, Curs, multiplicator) ; + Select Distinct nume_val, Curs, multiplicator From crsfactura Where tip_valuta = 1 + Select crsTempVal + Scan + lcCurs = lcCurs + [;] + formateaza(Curs, 14, gnPCurs) + [ RON / ] + ; + Iif(multiplicator = 1, [], Alltrim(Str(multiplicator)) + [ ]) + Alltrim(nume_val) + [ ] + lcCursEn = lcCursEn + [;] + Alltrim(Str(Curs, 14, gnPCurs)) + [ RON / ] + ; + Iif(multiplicator = 1, [], Alltrim(Str(multiplicator)) + [ ]) + Alltrim(nume_val) + [ ] + Endscan + If !Empty(lcCurs) + poDate.text_aditional = Iif(!Empty(Nvl(poDate.text_aditional, [])), poDate.text_aditional + Chr(13) + Chr(10), []) + ; + [Curs valutar = ] + Substr(lcCurs, 2) + poDate.text_aditional_en = Iif(!Empty(Nvl(poDate.text_aditional, [])), poDate.text_aditional + Chr(13) + Chr(10), []) + ; + [Exchange rate = ] + Substr(lcCursEn, 2) + Endif + If Used('crsTempVal') + Use In crsTempVal + Endif + Release lcCurs, lcCursEn + Endif + *!* modificare v 2.0.70 ^ + *!* modificare v 2.0.41 + *!* Case poDate.tip < 20 + *!* modificare v 2.0.76 : am adaugat 44, 45 + *!* modificare v 2.0.93 : am adaugat 48 + Case Between(poDate.tip, 1, 20) Or Inlist(poDate.tip, -1, -2, -3, -4, -8, -11, 44, 45, 48, 49, 50, 51) && facturi lei + invoice + *!* modificare v 2.0.41 ^ + lcSetare = [FACTURA] + lcExplicatieRaport = [factura] + *!* modificare v 2.0.46 + *!* lnVizualizare = Iif(Type('gnVizualFact')='N',gnVizualFact,1) + lcSetareVizualizare = [PREVIZFACT] + *!* modificare v 2.0.46 ^ + Do Case + Case poDate.tip = 51 && ACN + lcRaport = [FACTURA_ACN] + lcRaportVal = [FACTURA_ACN] + + Case gnFormatFactura = 1 && format A4 + lcRaport = [FACTURA] + lcRaportVal = [INVOICE] + Case gnFormatFactura = 2 && format A5 + lcRaport = [FACTURA_A5] + lcRaportVal = [INVOICE_A5] + Case gnFormatFactura = 3 + *!* modificare v 2.0.46 + *!* If optiuni_format_factura() = 2 + If optiuni_format_listare(0) = 2 + *!* modificare v 2.0.46 + lcRaport = [FACTURA_A5] + lcRaportVal = [INVOICE_A5] + Else + lcRaport = [FACTURA] + lcRaportVal = [INVOICE] + Endif + Endcase + lcRaportVal = Iif(poDate.tip = 7, [CREDIT_NOTE], lcRaportVal) + If poDate.in_valuta = 1 + *!* modificare v 2.0.46 + poDate.text_aditional_invoice = poDate.text_aditional + *!* modificare v 2.0.46 ^ + poDate.text_aditional = Iif(!Empty(Nvl(poDate.text_aditional, [])), poDate.text_aditional + Chr(13) + Chr(10), []) + ; + [Curs valutar = ] + formateaza(poDate.Curs, 14, gnPCurs) + [ RON / ] + ; + Iif(poDate.multiplicator = 1, [], Alltrim(Str(poDate.multiplicator)) + [ ]) + Alltrim(poDate.nume_valuta) + poDate.text_aditional_en = Iif(!Empty(Nvl(poDate.text_aditional, [])), poDate.text_aditional + Chr(13) + Chr(10), []) + ; + [Exchange rate = ] + Alltrim(Str(poDate.Curs, 14, gnPCurs)) + [ RON / ] + ; + Iif(poDate.multiplicator = 1, [], Alltrim(Str(poDate.multiplicator)) + [ ]) + Alltrim(poDate.nume_valuta) + *!* modificare v 2.0.67 + Else + If Nvl(gnListCursVal, 1) = 1 + Local lcCurs, lcCursEn + lcCurs = [] + lcCursEn = [] + Create Cursor crsTempVal(nume_val c(100), Curs N(14, gnPCurs), multiplicator N(10)) + Insert Into crsTempVal(nume_val, Curs, multiplicator) ; + Select Distinct nume_val, Curs, multiplicator From crsfactura Where tip_valuta = 1 + Select crsTempVal + Scan + lcCurs = lcCurs + [;] + formateaza(Curs, 14, gnPCurs) + [ RON / ] + ; + Iif(multiplicator = 1, [], Alltrim(Str(multiplicator)) + [ ]) + Alltrim(nume_val) + [ ] + lcCursEn = lcCursEn + [;] + Alltrim(Str(Curs, 14, gnPCurs)) + [ RON / ] + ; + Iif(multiplicator = 1, [], Alltrim(Str(multiplicator)) + [ ]) + Alltrim(nume_val) + [ ] + Endscan + If !Empty(lcCurs) + poDate.text_aditional = Iif(!Empty(Nvl(poDate.text_aditional, [])), poDate.text_aditional + Chr(13) + Chr(10), []) + ; + [Curs valutar = ] + Substr(lcCurs, 2) + poDate.text_aditional_en = Iif(!Empty(Nvl(poDate.text_aditional, [])), poDate.text_aditional + Chr(13) + Chr(10), []) + ; + [Exchange rate = ] + Substr(lcCursEn, 2) + Endif + If Used('crsTempVal') + Use In crsTempVal + Endif + Release lcCurs + Endif + *!* modificare v 2.0.67 ^ + Endif + + If poDate.incasat <> 0 + poDate.sumavorbe = suma_in_vorbe(poDate.incasat) + poDate.explicatie_chit = [facturii ] + Allt(Allt(Nvl(poDate.serie_act, [])) + [ ] + Alltrim(Transf(poDate.nract, get_mask(20, 0)))) + [ din ] + Dtoc(poDate.dataact) + *!* modificare ROAFACTURARE v 2.0.84 : lcDocument + lcDocument = Iif(poDate.ntip_incasare = 11, [chitanta], Iif(poDate.ntip_incasare = 2, [bon fiscal], Iif(poDate.ntip_incasare = 3, [POS/Card], [bon fiscal/chitanta]))) + *!* modificare ROAAUTO v 2.0.41 ( 06.03.2011 ) : daca e bon fiscal, atunci nu-i trec seria + poDate.text_aditional = Iif(!Empty(Nvl(poDate.text_aditional, [])), poDate.text_aditional + Chr(13) + Chr(10), []) + ; + [ Achitat cu ] + lcDocument + [ nr.] + Iif(poDate.ntip_incasare = 2, [], Alltrim(Nvl(poDate.serie_chit, []))) + [ ] + Alltrim(Str(poDate.nr_incasare)) + [ din ] + Dtoc(poDate.dataact) + *!* modificare ROAAUTO v 2.0.41 ( 06.03.2011 ) : daca e bon fiscal, atunci nu-i trec seria + poDate.text_aditional_en = Iif(!Empty(Nvl(poDate.text_aditional_en, [])), poDate.text_aditional_en + Chr(13) + Chr(10), []) + ; + [ Paid with cash ( receipt no. ] + Iif(poDate.ntip_incasare = 2, [], Alltrim(Nvl(poDate.serie_chit, []))) + [ ] + Alltrim(Str(poDate.nr_incasare)) + [ from ] + Dtoc(poDate.dataact) + [ ).] + Endif + *!* modificare v 2.0.189 + *!* modificare ROAAUTO v 2.0.28 + Case Inlist(poDate.tip, -12) + lcSetare = [FACTURA] + lcExplicatieRaport = [factura] + lcSetareVizualizare = [PREVIZFACT] + Do Case + Case gnTIP_LFACTURA_LINII = 1 And (gnTIP_LFACTURA = 1 Or (gnTIP_LFACTURA = 3 And poDate.ntip_incasare = 11)) + lcRaport = [FACTURATIP_CUCHIT] + lcRaportVal = [INVOICE] + Case gnTIP_LFACTURA_LINII = 1 And Inlist(gnTIP_LFACTURA, 2, 3) + lcRaport = [FACTURATIP] && A5 + lcRaportVal = [INVOICE] + + If gnFormatFactura = 3 && A4 SAU A5 + If optiuni_format_listare(0) = 2 + lcRaport = [FACTURATIP_A5] + lcRaportVal = [INVOICE_A5] + Else + lcRaport = [FACTURATIP] + lcRaportVal = [INVOICE] + Endif + Endif + + Case gnTIP_LFACTURA_LINII = 2 And gnFormatFactura = 1 && format A4 + lcRaport = [FACTURA] + lcRaportVal = [INVOICE] + Case gnTIP_LFACTURA_LINII = 2 And gnFormatFactura = 2 && format A5 + lcRaport = [FACTURA_A5] + lcRaportVal = [INVOICE_A5] + Case gnTIP_LFACTURA_LINII = 2 And gnFormatFactura = 3 + If optiuni_format_listare(0) = 2 + lcRaport = [FACTURA_A5] + lcRaportVal = [INVOICE_A5] + Else + lcRaport = [FACTURA] + lcRaportVal = [INVOICE] + Endif + Endcase + lcRaportVal = Iif(poDate.tip = 7, [CREDIT_NOTE], lcRaportVal) + + If poDate.incasat <> 0 + poDate.sumavorbe = suma_in_vorbe(poDate.incasat) + poDate.explicatie_chit = [facturii ] + Allt(Allt(Nvl(poDate.serie_act, [])) + [ ] + Alltrim(Transf(poDate.nract, get_mask(20, 0)))) + [ din ] + Dtoc(poDate.dataact) + lcDocument = Iif(poDate.ntip_incasare = 11, [chitanta], Iif(poDate.ntip_incasare = 2, [bon fiscal], Iif(poDate.ntip_incasare = 3, [POS/Card], [bon fiscal/chitanta]))) + *!* modificare ROAAUTO v 2.0.41 ( 06.03.2011 ) : daca e bon fiscal, atunci nu-i trec seria + poDate.text_aditional = Iif(!Empty(Nvl(poDate.text_aditional, [])), poDate.text_aditional + Chr(13) + Chr(10), []) + ; + [ Achitat cu ] + lcDocument + [ nr.] + Iif(poDate.ntip_incasare = 2, [], Alltrim(Nvl(poDate.serie_chit, []))) + [ ] + Alltrim(Str(poDate.nr_incasare)) + [ din ] + Dtoc(poDate.dataact) + [ .] + Endif + *!* modificare ROAAUTO v 2.0.28 ^ + *!* modificare v 2.0.189 + Case Inlist(poDate.tip, -9, -10) + lcSetare = [AVIZ] + lcExplicatieRaport = [avizul] + lcSetareVizualizare = [PREVIZAVIZ] + lcRaport = [PROTOCOL2] + *!* modificare v 2.0.189 ^ + Otherwise && avize + lcSetare = [AVIZ] + lcExplicatieRaport = [avizul] + *!* modificare v 2.0.46 + *!* lnVizualizare = Iif(Type('gnVizualAviz')='N',gnVizualAviz,1) + lcSetareVizualizare = [PREVIZAVIZ] + *!* lcRaport = [AVIZ] + *!* modificare v 2.0.77 + *!* If Nvl(gnPretListSubunitati,2)=2 + *!* Do Case + *!* Case gnFormatAviz = 1 && format A4 + *!* lcRaport = [AVIZ] + *!* Case gnFormatAviz = 2 && format A5 + *!* lcRaport = [AVIZ_A5] + *!* Case gnFormatAviz = 3 + *!* If optiuni_format_listare(1) = 2 + *!* lcRaport = [AVIZ_A5] + *!* Else + *!* lcRaport = [AVIZ] + *!* Endif + *!* Endcase + *!* Else + *!* Do Case + *!* Case gnFormatAviz = 1 && format A4 + *!* lcRaport = [AVIZ_TRANSFER_CTVA] + *!* Case gnFormatAviz = 2 && format A5 + *!* lcRaport = [AVIZ_TRANSFER_CTVA_A5] + *!* Case gnFormatAviz = 3 + *!* If optiuni_format_listare(1) = 2 + *!* lcRaport = [AVIZ_TRANSFER_CTVA_A5] + *!* Else + *!* lcRaport = [AVIZ_TRANSFER_CTVA] + *!* Endif + *!* Endcase + *!* Endif + lcRaport = [AVIZ] + && transferuri intre subunitati : 23,25,27,28,29,30,41,-6 + If Nvl(gnPretListAviz, 2) = 1 + lcRaport = lcRaport + [_CTVA] + lnPretListAviz = 1 + Endif + If gnFormatAviz = 2 && format A5 + lcRaport = lcRaport + [_A5] + Else + If gnFormatAviz = 3 + If optiuni_format_listare(1) = 2 + lcRaport = lcRaport + [_A5] + Endif + Endif + Endif + *!* modificare v 2.0.77 ^ + *!* modificare v 2.0.46 ^ + Endcase + + * DECLARATIE CONFORMITATE + FOR lnLinie = 1 TO 8 + lcLinie = 'gcTEXTCONFORMFACT' + ALLTRIM(STR(m.lnLinie)) + &lcLinie = STRTRAN(&lcLinie, '', ALLTRIM(UPPER(NVL(poFirma.denumire,''))),1,10,1) + &lcLinie = STRTRAN(&lcLinie, '', ALLTRIM(NVL(poFirma.adresa,'')),1,10,1) + &lcLinie = STRTRAN(&lcLinie, '', ALLTRIM(NVL(poFirma.reg_comert,'')),1,10,1) + &lcLinie = STRTRAN(&lcLinie, '', ALLTRIM(NVL(poFirma.cod_fiscal,'')),1,10,1) + &lcLinie = STRTRAN(&lcLinie, '', ALLTRIM(STR(poDate.nract)),1,10,1) + &lcLinie = STRTRAN(&lcLinie, '', ALLTRIM(TRANSFORM(poDate.dataact)),1,10,1) + ENDFOR + + && prelucrare factura si aviz de retur + prelucreaza_factura([crsfactura], [crsfacturaset], [crsfacturafinala], poDate.discount_evidentiat, poDate.in_valuta, lnPretListAviz, poDate.nListareDetaliata) + If Used('crsavizretur') And poDate.nract_retur <> 0 + prelucreaza_aviz_retur(poDate.discount_evidentiat) && ofacturare_comun.prg + Endif + + lcCursorFacturaTemp = 'crsFacturaFinala' + If (poDate.tip = 51 And poDate.in_valuta = 1) + lcCursorFacturaTemp = 'crsfacturafinalaval' && la factura ACN este un singur formular pentru intern si extern. nu mai listez un formular suplimentar pentru extern + Endif + + Select (m.lcCursorFacturaTemp) + Calculate Cnt() To pnTotalPozitii For cantitate <> 0 + *!* modificare v 2.0.80 + If poDate.incasat <> 0 And poDate.eProforma = 0 AND poDate.nEFactura = 0 And poDate.in_valuta = 0 And pnTotalPozitii <= 10 And lcRaport = [FACTURA] ; + And Iif(Type('glFacturaCuChitanta') <> 'L', .F., glFacturaCuChitanta) ; + And poDate.ntip_incasare = 11 && modificare v 2.0.84 + lcRaport = [FACTURA_CHIT] + Endif + *!* modificare v 2.0.80 ^ + + Go Top + If poDate.listare_componenta_set = 0 + Select(m.lcCursorFacturaTemp) + Set Filter To cantitate <> 0 + Endif + + loPreviewerConfig = Createobject("PreviewerConfig") && rapoarte.prg + + * daca listez factura + If poDate.nListareJustPDF = 0 AND poDate.nEFactura = 0 + If poDate.nListareSilentioasa = 1 + m.loPreviewerConfig.SetValue("lDirectPrint", .T.) + Endif + && listare factura / aviz / proforma + + goExport.export2frx(m.lcCursorFacturaTemp, lcRaport, .F., lcSetareVizualizare, lcSetare, , , .T., , loPreviewerConfig) && modificare v 2.2.15 + ENDIF + + * Optiune daca se trimite factura pe email dupa generarea facturii + lnFacturaEmail = Nvl(citeste_optiune_firma([FACTURAEMAIL]), 0) && 0 = nu trimite, 1 = trimite fara confirmare, 2 = trimite cu confirmare + lnFacturaEmail = IIF(m.lnFacturaEmail >0 and poDate.nRelistare = 0, m.lnFacturaEmail, 0) + + llGenerarePDFDisk = .F. + * daca generez doar pdf pe disk sau vreau sa trimit factura pe email (trebuie sa generez pdf) + IF poDate.nListareJustPDF = 1 OR ; + (m.lnFacturaEmail = 1) OR ; + (m.lnFacturaEmail = 2 AND AMESSAGEBOX('Doriti sa trimiteti factura pe email (' + ALLTRIM(NVL(poDate.oClient.email_facturare,'')) + ')?',4+32,_screen.Caption) = 6) + lcDestinationFile = GetPDFFacturaFile(poDate.dataact, poDate.nract) + llGenerarePDFDisk = .T. + If !File(m.lcDestinationFile) Or (File(m.lcDestinationFile) And AMESSAGEBOX('Doriti sa suprascrieti ' + m.lcDestinationFile + '?', 4 + 32, _Screen.Caption) = 6) + m.loPreviewerConfig.SetValue("cDestFile", m.lcDestinationFile) + m.loPreviewerConfig.SetValue("lOpenDestFile", .F.) + m.loPreviewerConfig.SetValue("lDirectPrint", .T.) + m.loPreviewerConfig.SetValue("lOpenViewer", .F.) + + lcPdfHasImage = goApp.ReadIni([email_factura], "pdfhasimage") + llPdfHasImage = (m.lcPdfHasImage = "1") + If Empty(m.lcPdfHasImage) + goApp.WriteIni([email_factura], "pdfhasimage", "0") + llPdfHasImage = .F. + Endif + m.loPreviewerConfig.SetValue("lPDFasImage", m.llPdfHasImage) + + * tcAlias, tcRaport, tlCereTitlu, tcSetareVizualizare, tcSetareImprimanta, tcParametriListare, toListener, tlMultiPreview, tcReportPreviewer, toPreviewerConfig + goExport.export2frx(m.lcCursorFacturaTemp, lcRaport, .F., lcSetareVizualizare, lcSetare, , , .T., , loPreviewerConfig) + ENDIF + + If m.lnFacturaEmail > 0 AND File(m.lcDestinationFile) + wrap_email_facturi(null, "", 1, 1, 1, poDate.nid_vanzare) + ENDIF + ENDIF + + && salvare factura / aviz + If poDate.nRelistare = 0 And poDate.eProforma = 0 AND poDate.nEFactura = 0 And poDate.nSalveazaAtasamente = 1 + goExport.export2pdf(m.lcCursorFacturaTemp, lcRaport, .F., poDate.cDocAtasate) + Endif + If poDate.listare_componenta_set = 0 + Select (m.lcCursorFacturaTemp) + Set Filter To + Endif + + *!* modificare ROAAUTO v 2.0.28 + && certificat garantie ROAAUTO + If poDate.tip = -12 AND poDate.nEFactura = 0 + If gnTIP_LFACTURA_LINII = 2 And gnCGarantie = 1 + AMESSAGEBOX("Introduceti facturile pentru a se imprima certificatul de garantie pe verso!", 48, "Atentie") + If lcRaport = [FACTURA_A5] + goExport.export2frx('crsfacturafinala', [certificatg_a5], .F., , , , , .T.) && modificare ROAAUTO v 2.1.9 + Else + goExport.export2frx('crsfacturafinala', [certificatg_a4], .F., , , , , .T.) && modificare ROAAUTO v 2.1.9 + Endif + Endif + Endif + *!* modificare ROAAUTO v 2.0.28 ^ + + && listare si salvare aviz retur + If Used('crsfacturafinala2') AND poDate.nEFactura = 0 + Select crsfacturafinala2 + poDate.text_aditional = poDate.text_aditional_retur + poDate.nract = poDate.nract_retur + poDate.serie_act = poDate.serie_act_retur + + Calculate Cnt() To pnTotalPozitii For cantitate <> 0 + Go Top + + lcRaport = [AVIZ] + lcSetare = [AVIZ] + lcSetareVizualizare = [PREVIZAVIZ] + goExport.export2frx('crsfacturafinala2', lcRaport, .F., lcSetareVizualizare, lcSetare, , , .T.) && modificare v 2.2.15 + If poDate.nRelistare = 0 And poDate.eProforma = 0 And poDate.nSalveazaAtasamente = 1 + goExport.export2pdf('crsfacturafinala2', lcRaport, .F., poDate.cDocAtasate) + Endif + Use In crsfacturafinala2 + Endif + + && listare factura in valuta + If poDate.in_valuta = 1 And poDate.tip <> 51 AND poDate.nEFactura = 0 && la factura ACN este un singur formular pentru intern si extern. nu mai listez un formular suplimentar pentru extern + + Select crsfacturafinalaval + Calculate Cnt() To pnTotalPozitii For cantitate <> 0 + Go Top + If poDate.listare_componenta_set = 0 + Select crsfacturafinalaval + Set Filter To cantitate <> 0 + ENDIF + + * daca listez factura + If poDate.nListareJustPDF = 0 + If poDate.nListareSilentioasa = 1 + m.loPreviewerConfig.SetValue("lDirectPrint", .T.) + Endif + && listare factura / aviz / proforma + + goExport.export2frx('crsfacturafinalaval', lcRaportVal, .F., lcSetareVizualizare, lcSetare, , , .T., , loPreviewerConfig) && modificare v 2.2.15 + ENDIF + + * llGenerarePDFDisk + * Am verificat deja la listarea facturii in lei daca se doreste salvarea pdf pe disk pentru email + IF m.llGenerarePDFDisk + lcDestinationFile = GetPDFFacturaValutaFile(poDate.dataact, poDate.nract) + If !File(m.lcDestinationFile) Or (File(m.lcDestinationFile) And AMESSAGEBOX('Doriti sa suprascrieti ' + m.lcDestinationFile + '?', 4 + 32, _Screen.Caption) = 6) + m.loPreviewerConfig.SetValue("cDestFile", m.lcDestinationFile) + m.loPreviewerConfig.SetValue("lOpenDestFile", .F.) + m.loPreviewerConfig.SetValue("lDirectPrint", .T.) + m.loPreviewerConfig.SetValue("lOpenViewer", .F.) + + lcPdfHasImage = goApp.ReadIni([email_factura], "pdfhasimage") + llPdfHasImage = (m.lcPdfHasImage = "1") + If Empty(m.lcPdfHasImage) + goApp.WriteIni([email_factura], "pdfhasimage", "0") + llPdfHasImage = .F. + Endif + m.loPreviewerConfig.SetValue("lPDFasImage", m.llPdfHasImage) + + * tcAlias, tcRaport, tlCereTitlu, tcSetareVizualizare, tcSetareImprimanta, tcParametriListare, toListener, tlMultiPreview, tcReportPreviewer, toPreviewerConfig + goExport.export2frx('crsfacturafinalaval', lcRaportVal, .F., lcSetareVizualizare, lcSetare, , , .T., , loPreviewerConfig) + ENDIF + + If m.lnFacturaEmail > 0 AND File(m.lcDestinationFile) + wrap_email_facturi(null, "", 1, 1, 1, poDate.nid_vanzare) + ENDIF + ENDIF && llGenerarePDFDisk + + +*!* goExport.export2frx('crsfacturafinalaval', lcRaportVal, .F., lcSetareVizualizare, lcSetare, , , .T.) && modificare v 2.2.15 + If poDate.nRelistare = 0 And poDate.eProforma = 0 And poDate.nSalveazaAtasamente = 1 + goExport.export2pdf('crsfacturafinalaval', lcRaportVal, .F., poDate.cDocAtasate) + Endif + Use In crsfacturafinalaval + *!* modificare v 2.0.80 + *!* poDate.text_aditional = Strtran(poDate.text_aditional,[Exchange rate =],[Curs valutar =]) + poDate.text_aditional = poDate.text_aditional_en + *!* modificare v 2.0.80 ^ + Endif + + && salveaza recapitulatie + If poDate.nRelistare = 0 And poDate.eProforma = 0 AND poDate.nEFactura = 0 And Used('crsfacturaset') And poDate.nSalveazaAtasamente = 1 + prelucreaza_recapitulatie(poDate.discount_evidentiat) + Select crsrecapitulatie + Calculate Cnt() To pnTotalPozitii For cantitate <> 0 + Go Top + goExport.export2pdf('crsrecapitulatie', 'recapitulatie', .F., poDate.cDocAtasate) + Select crsrecapitulatie + Go Top + Endif + + && listare recapitulatie + If poDate.listare_recapitulatie = 1 AND poDate.nEFactura = 0 + If poDate.nRelistare = 1 ; + Or (poDate.nRelistare = 0 And poDate.eProforma = 0 And Used('crsfacturaset') And poDate.nSalveazaAtasamente = 0) && modificare v 2.0.67 + prelucreaza_recapitulatie(poDate.discount_evidentiat) + Select crsrecapitulatie + Calculate Cnt() To pnTotalPozitii For cantitate <> 0 + Go Top + Endif + goExport.export2frx('crsrecapitulatie', 'recapitulatie', , , , , , .T.) && modificare v 2.2.15 + Endif + If Used('crsrecapitulatie') + Use In crsrecapitulatie + Endif + + && listare lista livrare + If poDate.listare_lista_livrare = 1 AND poDate.nEFactura = 0 && pentru proforme e intotdeauna 0 ( vezi alege_optiuni_listare_facturare ) + prelucreaza_lista_livrare() + goExport.export2frx('crslistalivrare', 'lista_livrare', , , , , , .T.) && modificare v 2.2.15 + Use In crslistalivrare + Endif + + *!* modificare v 2.0.80 + If poDate.incasat <> 0 And poDate.eProforma = 0 AND poDate.nEFactura = 0 And poDate.in_valuta = 0 And !Inlist(lcRaport, [FACTURA_CHIT], [FACTURATIP_CUCHIT]) ; + And poDate.ntip_incasare = 11 && modificare ROAFACTURARE v 2.0.84 + goExport.export2frx('crsfacturafinala', 'chitanta', .F., lcSetareVizualizare, lcSetare, , , .T.) && modificare v 2.2.15 + Endif + *!* modificare v 2.0.80 ^ + + && salvare atasamente + If poDate.nRelistare = 0 And poDate.eProforma = 0 AND poDate.nEFactura = 0 And poDate.nSalveazaAtasamente = 1 + poDate.scrieAtasamente() + Endif + + * Listare eFactura + IF poDate.nEFactura = 1 + && listare factura in valuta + If poDate.in_valuta = 1 And poDate.tip <> 51 && la factura ACN este un singur formular pentru intern si extern. nu mai listez un formular suplimentar pentru extern + lcCursoreFactura = 'crsfacturafinalaval' + ELSE + lcCursoreFactura = m.lcCursorFacturaTemp + ENDIF + + SELECT (m.lcCursoreFactura) + Calculate Cnt() To pnTotalPozitii For cantitate <> 0 + Go Top + If poDate.listare_componenta_set = 0 + SELECT (m.lcCursoreFactura) + Set Filter To cantitate <> 0 + ENDIF + + + llSilentios = (poDate.nListareSilentioasa = 1) + poDate.oInfoEFactura = goExport.export2xml_efactura(poDate, m.lcCursoreFactura, m.llSilentios) && modificare v 2.2.15 + ENDIF + + Use In (SELECT('crsfacturafinala')) +Endproc +******************************************** SFARSIT: listeaza_ofacturare ********************************************** +Procedure listeaza_oconformitate + Local loArticol + Private poClient, poFirma&&,pcstring1,pcstring2,pcstring3 + + If Used('crsFirma') + Use In crsFirma + Endif + + lcSql = [select antet as denumire,cod_fiscal,localitate,reg_comert from syn_nom_firme ] + ; + [where id_firma = ?gnIdFirma] + lcCursor = "crsFirma" + If !goExecutor.oExecuta(lcSql, lcCursor) + Return + Endif + + Select crsFirma + Scatter Name poFirma + + *!* modificare v 2.0.46 + *!* If Used('crsConformitate') + *!* Use In crsConformitate + *!* Endif + lcCursorTemp = "crsConformitateT" + lcCursor = "crsConformitate" + If Used(lcCursorTemp) + Use In (lcCursorTemp) + Endif + *!* modificare v 2.0.46 ^ + + *!* modificare v 2.2.18 : am adaugat distinct si r.sters = 0 and r.id_tip_rulaj = 0 + lcSql = [select distinct r.id_articol,a.codmat,a.denumire,a.codmatf,a.conditii_pastrare,r.lot,r.adata_expirare,r.dataact ] + ; + [from rul r left join nom_articole a on r.id_articol = a.id_articol where r.cod = ?poDate.Cod and r.sters = 0 and r.id_tip_rulaj = 0] + *!* modificare v 2.0.46 + *!* lcCursor="crsConformitate" + *!* lnSucces = goExecutor.oExecute(lcSql,lcCursor) + If !goExecutor.oExecuta(lcSql, lcCursorTemp) + *!* modificare v 2.0.46 ^ + Return + Endif + lcRaport = "conformitate" + * loExport = Createobject("oExportConfig") + + *!* pcstring1="Noi " + NVL(ALLTRIM(poFirma.denumire),"") + "," + NVL(ALLTRIM(poFirma.Localitate),"") + "cu nr. de inregistrare la Registrul Comertului nr. " + NVL(ALLTRIM(poFirma.reg_comert),"")+ " Cod Fiscal "+NVL(ALLTRIM(poFirma.cod_fiscal),"") + *!* pcstring2=", declaram si garantam pe proprie raspundere ca produsele la care se refera aceasta declaratie nu pun in pericol" + *!* pcstring3= " viata sau sanatatea si sunt in conformitate cu legislatia sanitara, sanitar-veterinara si pentru siguranta alimentelor, in vigoare :" + *!* MESSAGEBOX(pcstring1 + pcstring2 + pcstring3) + + *!* listareUserReport('crsConformitate','FRX',lcRaport) + *!* Use In crsFirma + Select codmat, codmatf, denumire, lot, adata_expirare, dataact, conditii_pastrare, id_articol From (lcCursorTemp) ; + Into Cursor (lcCursor) Readwrite + Select (lcCursor) + Browse + goExport.export2frx(lcCursor, lcRaport, , , , , , .T.) && modificare v 2.2.15 + Use In crsFirma + Use In (lcCursorTemp) + Use In (lcCursor) + *!* modificare v 2.0.46 ^ +Endproc + + +******************************************************************************************************************* +Procedure listeaza_bon_fiscal + Lparameters ttDataOra, tnNrBon, tnSumaAchitNumerar, tnSumaAchitCARD, tnProcentTva, tnNrFact, tnBonDetaliat, tcCursorFactura + * ttDataOra: dataora listare + * tnNrBon: numar bon fiscal + * tnSumaAchitNumerar: Suma achitata numerar + * tnSumaAchitCARD: Suma achitata cu card la POS + * tnProcentTVA + * tnNrFact: Numar factura, daca NU se listeaza bonul detaliat pe articole + * tnBonDetaliat: 1 = se listeaza articolele individual; 0 = "contravaloarea factura nr..." + * tcCursorFactura: numele cursorului cu articole din factura pentru listarea detaliata a bonului fiscal + + Local lcCursor, lcCursorArticole, lcSelect, lnBonDetaliat, loHash, lnValoare, lnDiferenta + lcSelect = Select() + lnBonDetaliat = Iif(Type('tnBonDetaliat') = 'N', m.tnBonDetaliat, 0) + lcCursorFactura = Iif(Type('tcCursorFactura') = 'C' And !Empty(m.tcCursorFactura), m.tcCursorFactura, '') + + lcCursor = [crsDateBon] + Create Cursor (lcCursor) (denumire c(100), um c(10), CANT N(10, 4), Pret N(18, 4), DEPARTAMENT N(2), proc_tvav N(5, 2), PROCENT N(5, 2), DISCOUNT N(2) Default 0) + + + DO CASE + CASE m.lnBonDetaliat = 1 And !Empty(m.lcCursorFactura) And Used(m.lcCursorFactura) + Insert Into (lcCursor) (denumire, um, CANT, Pret, DEPARTAMENT, proc_tvav) ; + Select denumire, Nvl(um, 'BUC') As um, cantitate, (pretctva-discountctva), 1, proc_tvav From (m.lcCursorFactura) + + CASE m.lnBonDetaliat = 0 And !Empty(m.lcCursorFactura) And Used(m.lcCursorFactura) + * Daca bonul nu se listeaza detaliat, cumulez pe cote TVA + SELECT (lcCursorFactura) + SELECT proc_tvav, ROUND(SUM(cantitate*(pretctva-discountctva)), m.gnPC) as valoare FROM (lcCursorFactura) GROUP BY proc_tvav ORDER BY proc_tvav DESC INTO CURSOR cCoefTVATemp READWRITE + + * Pun diferenta dintre totalul incasat si totalul sumelor defalcate pe cote TVA pe prima cota TVA + CALCULATE SUM(valoare) TO lnValoare IN cCoefTVATemp + lnDiferenta = m.tnSumaAchitNumerar + m.tnSumaAchitCARD - m.lnValoare + SELECT cCoefTVATemp + LOCATE FOR !EMPTY(valoare) + IF !FOUND() + GO TOP + ENDIF + REPLACE valoare WITH valoare + m.lnDiferenta + + Insert Into (lcCursor) (denumire, um, CANT, Pret, DEPARTAMENT, proc_tvav) ; + SELECT [Fact.] + Alltrim(Str(tnNrFact)) as denumire, "" as um, 1 as cant, valoare as pret, 1 as departament, proc_tvav FROM cCoefTVATemp + + USE IN (SELECT('cCoefTVATemp')) + + OTHERWISE + Insert Into (lcCursor) (denumire, um, CANT, Pret, DEPARTAMENT, proc_tvav) ; + Values ([Fact.] + Alltrim(Str(tnNrFact)), "", 1, m.tnSumaAchitNumerar + m.tnSumaAchitCARD, 1, 1 + (tnProcentTva / 100)) + ENDCASE + + loHash = GetHash() + loHash.SetValue("cTip", "1;") + loHash.SetValue("nNumarBon", tnNrBon) + loHash.SetValue("nValoareNumerar", m.tnSumaAchitNumerar) + loHash.SetValue("nValoareCARD", m.tnSumaAchitCARD) + loHash.SetValue("nValoareTotal", m.tnSumaAchitNumerar + m.tnSumaAchitCARD) + loHash.SetValue("cCursor", lcCursor) + loHash.SetValue("tDataOra", ttDataOra) + goControllerEcr.imprima(loHash) + + Use In (lcCursor) + Release loHash + + Select (m.lcSelect) +Endproc && listeaza_bon_fiscal + + +*** Copiata din oproceduri_listari.prg ca sa nu se includa tot fisierul +Procedure listare_protocol + Lparameters tnNract, tnTip + + *!* tnTip: 1 (default) = protocol (pret cu tva); 2 = sponsorizare (pret fara tva) + Private pnNrAct, pnCod + Local lcCursor, lcCursor2, lnTip + lcCursor = [crsdateact] + lcCursor2 = [crsprotocol] + + If Type('tnTip') <> 'N' + lnTip = 1 + Else + lnTip = tnTip + Endif + pnNrAct = tnNract + *!* v 2.0.18 roagest (denumire partener, id_set 232, 233, 235) + lcSql = [Select distinct a.cod, a.dataact, p.id_part as id_client, p.denumire, b.nume_gestiune as gestiune from act a ] + ; + [ left join nom_gestiuni b on a.id_gestout = b.id_gestiune ] + ; + [ left join nom_parteneri p on a.id_partc = p.id_part ] + ; + [where a.an = ?gnAn and a.luna = ?gnLuna and a.nract = ?pnNrAct and a.scc = '401' and a.sters = 0 and a.id_set in (230,232,233,235,261) ] + ; + Strtran(gcCondSucursala, [id_sucursala], [a.id_sucursala]) + lnSucces = goExecutor.oExecute(lcSql, lcCursor) + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare, 0 + 16, "Eroare") + Return + Endif + + If Reccount(lcCursor) > 0 + Select (lcCursor) + Scatter Name poClient + *!* v 2.0.18 roagest (iau partenerul din jurnal) + *!* AddProperty(poClient,[id_client],[0]) + *!* AddProperty(poClient,[denumire],[]) + pnCod = cod + poDate = Createobject("oDateFactura", 0, 0) + poDate.nract = pnNrAct + poDate.dataact = Iif(Type('dataact') = 'T', Ttod(dataact), dataact) + poDate.dataora_exp = Get_Ora(2) && modificare ROAGEST v 2.0.150 + + *!* loCauta = caut_partener() + *!* If gnButon <> 2 + *!* poClient.id_client = loCauta.id_part + *!* poClient.denumire = loCauta.denumire + *!* Else + poDate.tip = 23 && artificiu ca sa nu mai caute doar in delegatii pentru partenerul respectiv + *!* EndIf + *!* v 2.0.18 roagest ^ + Use In (lcCursor) + + Private ofrmdatesupl + ofrmdatesupl = Createobject("frm_alte_date") + ofrmdatesupl.Show(1) + Release ofrmdatesupl + + *!* modificare ROAGEST v 2.0.150 + If gnButon = 1 + *!* modificare ROAGEST v 2.0.150 ^ + lcSql = [select denumire as nume_responsabil,cod_fiscal as CNPresp,reg_comert as BIresp from nom_parteneri ] + ; + [where sters = 0 and inactiv = 0 and id_part in ] + ; + [(select id_partener from utilizatori_rol_intern where sters = 0 and id_util = ?gnIdUtil)] + lnSucces = goExecutor.oExecute(lcSql, lcCursor2) + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare, 0 + 16, "Eroare") + Return + Endif + Select (lcCursor2) + poDate.nume_responsabil = nume_responsabil + poDate.BIresp = BIresp + poDate.CNPresp = CNPresp + Use In (lcCursor2) + + lcSql = [select a.cante as cantitate,] + ; + Iif(lnTip = 1, [a.pretv+a.tvav], [a.pretv]) + [ as pretctva, ] + ; + Iif(lnTip = 1, [Round(a.cante*(a.pretv+a.tvav),?gnPc)], [Round(a.cante*a.pretv,?gnPc)]) + [ as valctva,] + ; + [a.serie,b.codmat,b.denumire,b.um ] + ; + [from rul a left join nom_articole b on a.id_articol = b.id_articol ] + ; + [where a.sters = 0 and a.cod = ?pnCod] + lnSucces = goExecutor.oExecute(lcSql, lcCursor2) + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare, 0 + 16, "Eroare") + Return + Endif + goExport.export2frx(lcCursor2, [protocol]) + If Used(lcCursor2) + Use In (lcCursor2) + Endif + *!* modificare ROAGEST v 2.0.150 + Endif + *!* modificare ROAGEST v 2.0.150 ^ + Else + AMESSAGEBOX("Nu exista avizul cu acest numar in luna curenta!", 48, "Atentie") + Endif + Release lcCursor, lcCursor2, pnNrAct, pnCod +Endproc && listare_protocol + +******************************************************** +* apelez listarea Recapitulatiei cu numele unui cursor si numele unui raport +******************************************************** +Procedure listeaza_recapitulatie + Lparameters tcNumeCursor, tcRaport + + Local lcSql, lcCursorDetalii, lcSetareVizualizare, lcSetare, lcRaport, lcSelect, lnListareJustPDF, lnListareSilentioasa + Private poFirma, poClient, pnIdVanzare, pnIdClient + poFirma = Null + poClient = Null + lcSelect = Select() + + lnListareJustPDF = 0 + lnListareSilentioasa = 0 + pnIdVanzare = 0 + pnIdClient = 0 + + If Type('poDate') = 'O' + pnIdVanzare = Iif(Type('poDate.nid_vanzare') = 'N', poDate.nid_vanzare, 0) + pnIdClient = Iif(Type('poDate.id_client') = 'N', poDate.id_client, 0) + lnListareJustPDF = Iif(Type('poDate.nListareJustPDF') = 'N', poDate.nListareJustPDF, 0) + lnListareSilentioasa = Iif(Type('poDate.nListareSilentioasa') = 'N', poDate.nListareSilentioasa, 0) + Endif + + If Empty(m.tcNumeCursor) + Select (m.lcSelect) + Return + Endif + + TEXT TO lcSql NOSHOW +select 3 as tip,antet as denumire,cod_fiscal,'' as cod_fiscal2,adresa,telefon,fax,reg_comert,banca1 as banca, + cont_banca1 as cont_banca, + banca2,cont_banca2,banca3,cont_banca3, + null as dataora,0 as tip_persoana,capital_soc_var,capital_soc_sub, '' as adresa_facturare,''as email_facturare, '' as denadrf + from syn_nom_firme where id_firma = ?gnIdFirma + ENDTEXT + + If !goExecutor.oExecuta(lcSql, 'crsFirma') + Select (m.lcSelect) + Return + Endif + Select crsFirma + Go Top + Scatter Name poFirma Memo + Use In (Select('crsFirma')) + + TEXT TO lcSql NOSHOW +select 1 as tip,(case when tip_persoana = 1 then p.prefix||' '|| p.denumire||' '|| p.sufix else denumire end) as denumire, + p.cod_fiscal,p.cod_fiscal2,p.adresa,p.telefon,'' as fax,p.reg_comert,p.banca,p.cont_banca, + '' as banca2,'' as cont_banca2,'' as banca3,'' as cont_banca3, + sysdate as dataora,p.tip_persoana,0 as capital_soc_var, + 0 as capital_soc_sub,d.adresa as adresa_facturare,d.email as email_facturare,d.denumire_adresa as denadrf + from vnom_parteneri p left join vanzari b on b.id_part=p.id_part and b.id_vanzare = ?pnIdVanzare + left join vadrese_parteneri d on d.id_adresa=b.id_facturare + where p.id_part = ?pnIdClient + ENDTEXT + If !goExecutor.oExecuta(lcSql, 'crsClient') + Select (m.lcSelect) + Return + Endif + Select crsClient + Go Top + Scatter Name poClient Memo + Use In (Select('crsClient')) + + lcRaport = Iif(Type('tcRaport') = 'C' And !Empty(m.tcRaport), m.tcRaport, 'recapitulatie.frx') + + lcSetare = [RECAPITULATIE] + lcSetareVizualizare = [PREVIZRECAP] + loPreviewerConfig = Createobject("PreviewerConfig") && rapoarte.prg + If m.lnListareJustPDF = 0 + If m.lnListareSilentioasa = 1 + m.loPreviewerConfig.SetValue("lDirectPrint", .T.) + Endif + && listare factura / aviz / proforma + goExport.export2frx(m.tcNumeCursor, m.lcRaport, .F., m.lcSetareVizualizare, m.lcSetare, , , .T., , loPreviewerConfig) && modificare v 2.2.15 + Else + lcDestinationFile = GetPDFRecapitulatiaFile(poDate.dataact, poDate.nract) + If !File(m.lcDestinationFile) Or (File(m.lcDestinationFile) And AMESSAGEBOX('Doriti sa suprascrieti ' + m.lcDestinationFile + '?', 4 + 32, _Screen.Caption) = 6) + m.loPreviewerConfig.SetValue("cDestFile", m.lcDestinationFile) + m.loPreviewerConfig.SetValue("lOpenDestFile", .F.) + m.loPreviewerConfig.SetValue("lDirectPrint", .T.) + m.loPreviewerConfig.SetValue("lOpenViewer", .F.) + lcPdfHasImage = goApp.ReadIni([email_factura], "pdfhasimage") + llPdfHasImage = (m.lcPdfHasImage = "1") + If Empty(m.lcPdfHasImage) + goApp.WriteIni([email_factura], "pdfhasimage", "0") + llPdfHasImage = .F. + Endif + m.loPreviewerConfig.SetValue("lPDFasImage", m.llPdfHasImage) + + * tcAlias, tcRaport, tlCereTitlu, tcSetareVizualizare, tcSetareImprimanta, tcParametriListare, toListener, tlMultiPreview, tcReportPreviewer, toPreviewerConfig + goExport.export2frx(m.tcNumeCursor, m.lcRaport, .F., m.lcSetareVizualizare, m.lcSetare, , , .T., , loPreviewerConfig) + Endif + Endif +Endproc && listeaza_recapitulatie + +********************************************************************************* +*** intoarce calea catre fisierul pdf FACTURA +Function GetPDFFacturaFile + Lparameters tdDataFactura, tnNumarFactura + + Local lcDestinationFile, lcTip, lcFileName + Local lcDefaultPrefix, lcDefaultSufix + lcTip = 'factura' + lcFileName = Dtos(m.tdDataFactura) + "_" + Alltrim(Str(m.tnNumarFactura)) + lcDefaultPrefix = '' + lcDefaultSufix = m.lcTip + lcDestinationFile = GetPDFFile(m.lcTip, m.lcFileName, m.lcDefaultPrefix, m.lcDefaultSufix) + + Return m.lcDestinationFile +Endfunc && GetPDFFacturaFile + +********************************************************************************* +*** intoarce calea catre fisierul pdf FACTURA FISCALA VALUTA +Function GetPDFFacturaValutaFile + Lparameters tdDataFactura, tnNumarFactura + + Local lcDestinationFile, lcTip, lcFileName + Local lcDefaultPrefix, lcDefaultSufix + lcTip = 'factura_valuta' + lcFileName = Dtos(m.tdDataFactura) + "_" + Alltrim(Str(m.tnNumarFactura)) + lcDefaultPrefix = '' + lcDefaultSufix = m.lcTip + lcDestinationFile = GetPDFFile(m.lcTip, m.lcFileName, m.lcDefaultPrefix, m.lcDefaultSufix) + + Return m.lcDestinationFile +Endfunc && GetPDFFacturaValutaFile + +********************************************************************************* +*** intoarce calea catre fisierul pdf INVOICE +Function GetPDFInvoiceFile + Lparameters tdDataFactura, tnNumarFactura + + Local lcDestinationFile, lcTip, lcFileName + Local lcDefaultPrefix, lcDefaultSufix + lcTip = 'invoice' + lcFileName = Dtos(m.tdDataFactura) + "_" + Alltrim(Str(m.tnNumarFactura)) + lcDefaultPrefix = '' + lcDefaultSufix = m.lcTip + lcDestinationFile = GetPDFFile(m.lcTip, m.lcFileName, m.lcDefaultPrefix, m.lcDefaultSufix) + + Return m.lcDestinationFile +Endfunc && GetPDFInvoiceFile + +********************************************************************************* +*** intoarce calea catre fisierul pdf RECAPITULATIA +Function GetPDFRecapitulatiaFile + Lparameters tdDataFactura, tnNumarFactura + + Local lcDestinationFile, lcTip, lcFileName + Local lcDefaultPrefix, lcDefaultSufix + lcTip = 'recapitulatie' + lcFileName = Dtos(m.tdDataFactura) + "_" + Alltrim(Str(m.tnNumarFactura)) + lcDefaultPrefix = '' + lcDefaultSufix = m.lcTip + lcDestinationFile = GetPDFFile(m.lcTip, m.lcFileName, m.lcDefaultPrefix, m.lcDefaultSufix) + + Return m.lcDestinationFile +Endfunc && GetPDFRecapitulatiaFile + +********************************************************************************* +*** intoarce calea catre fisierul pdf BORDEROU: borderou_[aaaallzz]_[tnId].pdf +Function GetPDFBorderouFile + Lparameters tdDataBorderou, tnIdBorderou + + Local lcDestinationFile, lcTip, lcFileName + Local lcDefaultPrefix, lcDefaultSufix + lcTip = 'borderou' + lcFileName = Dtos(m.tdDataBorderou) + "_" + Alltrim(Str(m.tnIdBorderou)) + lcDefaultPrefix = '' + lcDefaultSufix = m.lcTip + lcDestinationFile = GetPDFFile(m.lcTip, m.lcFileName, m.lcDefaultPrefix, m.lcDefaultSufix) + + Return m.lcDestinationFile +Endfunc && GetPDFBorderouFile + + +************************************************* +*** Intoarce optiunea [pdf_factura_acn/recapitulatia][salvareautomata] +*** se foloseste dupa listare factura sau recapitulatie, sa se salveze automat pdf +************************************************* +Function GetPDFSalvareAutomata + Lparameters tcTip + Local lcTip, lcSection, lcPDFSalvareAutomata + + lcTip = Iif(!Empty(m.tcTip) And Type('tcTip') = 'C', Alltrim(Lower(m.tcTip)), 'factura') + lcSection = 'pdf_' + m.lcTip + '_' + m.gcS && [pdf_factura_acn] / [pdf_recapitulatia_acn] + lcPDFSalvareAutomata = goApp.ReadIni(m.lcSection, "salvareautomata") + If Empty(m.lcPDFSalvareAutomata) + lcPDFSalvareAutomata = "0" + goApp.WriteIni(m.lcSection, "salvareautomata", m.lcPDFSalvareAutomata) + Endif + + Return (lcPDFSalvareAutomata = "1") +Endfunc + +*------------------------------------------ +* Intoarce directorul catre un tip de document +* Ex: GetPdfPath(TIP_DOCUMENT) +* intoarce variabila "pdfpath" din sectiunea [pdf_TIP_DOCUMENT_SCHEMA] din settings.ini +* daca nu este completata variabila pdfpath, ofera completarea +* Ex: lcFacturaPath = GetDocumentPath('factura') +* Ex: lcRecapitulatiaPath = GetDocumentPath('recapitulatie') +Function GetDocumentPath + Lparameters tcTip + * tcTip (sectiunea de unde se citesc directorul pdf): factura/contract => email_factura/email_contract + + Local lcPdfPath, lcSection, lcTip + lcPdfPath = '' + lcTip = IIF(!EMPTY(m.tcTip), m.tcTip, 'factura') + lcSection = 'pdf_' + m.lcTip + '_' + m.gcS && [pdf_factura_acn] / [pdf_recapitulatie_acn] + lcPdfPath = goApp.ReadIni(m.lcSection, "pdfpath") + If Empty(m.lcPdfPath) + lcPdfPath = Getdir("", "Alege director pentru pdf-uri " + m.lcTip, "Director pdf " + m.lcTip, 64) + If !Empty(m.lcPdfPath) + goApp.WriteIni(m.lcSection, "pdfpath", m.lcPdfPath) + Endif + Endif + Return m.lcPdfPath +Endfunc + +*------------------------------------------ +*** intoarce calea catre fisierul pdf +Function GetPDFFile + Lparameters tcTip, tcFileName, tcDefaultPrefix, tcDefaultSufix + * tcTip (sectiunea de unde se citesc directorul pdf): factura/contract => email_factura/email_contract + * tcFileName (numele fisierului): 20160210_123456 + * tcDefaultPrefix: daca se ataseaza un prefix la tcFileName. Se suprascrie cu cel din din setting.ini + * tcDefaultSufix: daca se ataseaza un sufix la tcFileName. Se suprascrie cu cel din din setting.ini + + Local lcDestinationFile, lcFacturiPdfPath, lcSection, lcTip, lcFileName + Local lcPdfPath, lcPdfPrefix, lcPdfSufix + + lcTip = Iif(!Empty(m.tcTip) And Type('tcTip') = 'C', Alltrim(Lower(m.tcTip)), 'factura') + lcFileName = Iif(!Empty(m.tcFileName), Lower(Transform(m.tcFileName)), Sys(2015)) + lcSection = 'pdf_' + m.lcTip + '_' + m.gcS && [pdf_factura_acn] / [pdf_recapitulatia_acn] + lcPdfPath = goApp.ReadIni(m.lcSection, "pdfpath") + lcPdfPrefix = goApp.ReadIni(m.lcSection, "pdfprefix") + lcPdfSufix = goApp.ReadIni(m.lcSection, "pdfsufix") + If Empty(m.lcPdfPrefix) And !Empty(m.tcDefaultPrefix) + lcPdfPrefix = m.tcDefaultPrefix + goApp.WriteIni(m.lcSection, "pdfprefix", m.lcPdfPrefix) + Endif + If Empty(m.lcPdfSufix) And !Empty(m.tcDefaultSufix) + m.lcPdfSufix = m.tcDefaultSufix + goApp.WriteIni(m.lcSection, "pdfsufix", m.lcPdfSufix) + Endif + If Empty(m.lcPdfPrefix) And Empty(m.lcPdfSufix) + m.lcPdfSufix = m.lcTip + goApp.WriteIni(m.lcSection, "pdfsufix", m.lcPdfSufix) + Endif + + If Empty(m.lcPdfPath) + lcPdfPath = Getdir("", "Alege director pentru pdf-uri", "Director pdf", 64) + If Empty(m.lcPdfPath) + m.lcPdfPath = m.gcTempPath + Endif + goApp.WriteIni(m.lcSection, "pdfpath", m.lcPdfPath) + Endif + + lcDestinationFile = Addbs(m.lcPdfPath) + Iif(!Empty(m.lcPdfPrefix), m.lcPdfPrefix + '_', '') + m.lcFileName + Iif(!Empty(m.lcPdfSufix), "_" + Lower(Transform(m.lcPdfSufix)), '') + ".pdf" + Return m.lcDestinationFile +Endfunc && GetPDFFile + +* Intoarce codmat client din PARTENERI_ARTICOLE_CODURI pentru un (client, articol) +Function GetCodmatC + Parameters pnIdClient, pnIdArticol + Private pcCod + pcCod = '' + + llSucces = goExecutor.oSelecteaza2Value([select cod from parteneri_articole_coduri where id_part = ?pnIdClient and id_articol = ?pnIdArticol and sters = 0], @pcCod) + Return Nvl(m.pcCod, '') +Endfunc && GetCodmatC + +* Intoarce CODNC8, CODCPV din NOM_ARTICOLE pentru un articol +Function GetCodNC8CPV + Parameters pnIdArticol + LOCAL lcCursor, loRet, lcSelect + lcSelect = SELECT() + loRet = CREATEOBJECT("empty") + ADDPROPERTY(loRet, 'codnc8', '') + ADDPROPERTY(loRet, 'codcpv', '') + + lcCursor = SYS(2015) + llSucces = goExecutor.oExecuta([select codnc8, codcpv from nom_articole where id_articol = ?pnIdArticol and sters = 0], m.lcCursor) + IF m.llSucces + SELECT (m.lcCursor) + loRet.codnc8 = ALLTRIM(NVL(codnc8,'')) + loRet.codcpv = ALLTRIM(NVL(codcpv,'')) + ENDIF + USE IN (SELECT(m.lcCursor)) + SELECT (m.lcSelect) + Return loRet +Endfunc && GetCodmatC + +* intoarce nom_parteneri.institutie_publica pentru un id_part +function GetInstitutiePublica + LPARAMETERS tnIdClient + PRIVATE pnIdClient + LOCAL lnInstitutiePublica + pnIdClient = tnIdClient + lnInstitutiePublica = 0 + + llSucces = goExecutor.oSelecteaza2Value([select MAX(NVL(institutie_publica,0)) as institutie_publica from nom_parteneri where id_part = ?pnIdClient and sters = 0], @lnInstitutiePublica) + Return m.lnInstitutiePublica +ENDFUNC && GetInstitutiePublica \ No newline at end of file diff --git a/COMUN/programe/ofacturare_comun.prg b/COMUN/programe/ofacturare_comun.prg new file mode 100644 index 0000000..c92797b --- /dev/null +++ b/COMUN/programe/ofacturare_comun.prg @@ -0,0 +1,2218 @@ +*!* 12.06.2014 +*!* marius.mutu +*!* adaugat proprietatea oDateFactura.incasatCARD = suma incasata prin CARD POS + +*!* 19.01.2015 +*!* marius.mutu +*!* + oDateFactura.completeaza_setari_document() completeaza datele de la un document anterior + +*!* 19.01.2015 +*!* marius.mutu +*!* + proprietati: nIdTipDocFactura, nIdTipDocProforma, nIdTipDocBonFiscal, nIdTipDocAvizExpeditie + +*!* 06.02.2015 +*!* marius.mutu +*!* la schimbarea poDate.nIdTipDoc se initializeaza poDate.eBonFiscal, .eProforma in nIdTipDoc_Assign + +*!* 16.06.2015 +*!* marius.mutu +*!* + proprietati: oDateFactura.id_facturare, nListareDetaliata + +*!* 30.03.2017 +*!* marius.mutu +*!* prelucreaza_factura +*!* Explicatia articolului a fost marita la 500 de caractere in baza de date, tip Memo si nu poate fi folosita intr-un select group by +*!* Am selectat doar primele 240 caractere apoi completez explicatia din cursorul original + +*!* 31.03.2017 +*!* marius.mutu +*!* prelucreaza_lista_livrare - explicatie M, nu mergea grupata + +*!* 30.01.2019 +*!* marius.mutu +*!* prelucreaza_factura, prelucreaza_recapitulatia - s-au tratat grupare dupa campul explicatie Memo - Cast(explicatie as C(254)) pentru facturare seturi + +*!* 06.11.2019 +*!* marius.mutu +*!* +oDateFactura.nIdBeneficiar, nTipFactura + +*!* 20.12.2019 +*!* marius.mutu +*!* +oDateFactura.nvalval, ntvaval, ntotval, cValuta, tip_factura - pentru listarea valorilor in valuta pe facturile in lei la ROAACNPRO + +*!* 22.01.2020 +*!* marius.mutu +*!* prelucreaza_factura, prelucreaza_factura_valuta + codmatc (codmat client) + +*!* 22.07.2020 +*!* marius.mutu +*!* prelucreaza_facturacrs, prelucreaza_factura_valuta: verificare camp codmatc + +*!* 12.07.2024 +*!* marius.mutu +*!* alege_optiuni_listare_facturare - se listeaza serii/lot? + +*************************************************************************************************************** +**** Clase: +**** oDateFactura +**** init +**** initializeaza_politica_pret +**** initializeaza_setari_document +**** completeaza_setari_document +**** genereaza_numar_act +**** Reset +**** scrieAtasamente +**** oDateGestiune +**** Reset +**** Functii: +**** actualizeaza_document +**** actualizeaza_partener_fact +**** actualizeaza_politica_pret +**** optiuni_format_listare && denumire veche : optiuni_format_factura +**** recalculeaza_pret_vanzare_lei +**** recalculeaza_pret_vanzare_compus +**** Proceduri: +**** modifica_pret_articol_compus +**** prelucreaza_aviz_cu_tva +**** prelucreaza_factura +**** prelucreaza_recapitulatie +**** prelucreaza_factura_valuta +**** prelucreaza_aviz_retur +**** prelucreaza_lista_livrare +**** creeaza_crsfactura +**** creeaza_crsfactura_rate && veche +**** copiaza_structura_cursor +**** creeaza_backup_cursoare_facturare +**** repune_backup_cursoare_facturare +**** sterge_backup_cursoare_facturare +**** alege_optiuni_listare_facturare +**** alege_banci_facturare +**** completeaza_explicatie_tva +**** completeaza_explicatie_contract +*************************************************************************************************************** +******************************************** INCEPUT: oDateFactura ******************************************** +#define precizie_max_pret_vz 6 + +Define Class oDateFactura As Custom + Data = {} + dataireg = {} + nIdTipDoc = 5 + nIdTipDocFactura = 5 + nIdTipDocProforma = 23 + nIdTipDocBonFiscal = 3 + nIdTipDocAvizExpeditie = 6 + id_fdoc = Null + fdoc = [] + dataact = {} + datascad = {} + nract = 0 + serie_act = [] + nract_retur = 0 + serie_act_retur = [] + id_client = Null + nume_client = [] + listaid = [] && id_comanda sau lista id_aviz + descriere = [] && numar comanda sau numere avize + id_venchelt = Null && modificare ROAFACTURARE v 2.0.46 + venchelt = [] && modificare ROAFACTURARE v 2.0.46 + id_responsabil = Null + responsabil = [] + id_set = 0 + tip = 0 + id_pol = Null + nume_politica = [] + nume_responsabil= [] && alte date pentru facturare + BIresp = [] + CNPresp = [] + id_delegat = Null + nume_delegat = [] + BIdelegat = [] + CNPdelegat = [] + id_masina = Null + nrinmat = [] + dataora_exp = {} && modificare ROAFACTURARE v 2.0.80 + id_agent = Null + nume_agent = [] + proc_tva = 0 + explicatie_tva = [] && modificare ROAFACTURARE v 2.0.46 + zi_curs = {} + discount_evidentiat = 0 && daca se evidentiaza discount-ul sau este inclus in pret + afisare_scadenta = 1 && modificare ROACONTRACTE v 2.0.38 + text_aditional = [] + text_aditional_invoice = [] && modificare ROAFACTURARE v 2.0.46 + text_aditional_retur = [] + text_aditional_en = [] && modificare ROAFACTURARE v 2.0.80 + eProforma = 0 + nEFactura = 0 && xml eFactura + oInfoEFactura = Null && obiect cu infoe eFactura rezultat in urma listarii (cFile, lOk, cMesaj) + eBonFiscal = 0 + serie_chit = [] && modificare ROAFACTURARE v 2.0.80 + explicatie_chit = [] && modificare ROAFACTURARE v 2.0.80 + nr_incasare = 0 + id_fdoc_incasare= 0 + ntip_incasare = 0 && modificare ROAFACTURARE v 2.0.84 + id_casa = 0 + incasat = 0 && incasat numerar + incasatCARD = 0 && incasat prin CARD POS + nIncasatPos = 0 && 1 s-a ales bon fiscal prin CARD POS + nBonDetaliat = 0 && 1 se listeaza articole individuale; 0 se listeaza "contravaloare factura nr..." + incasatTichete = 0 && incasat tichete + totalctva = 0 + in_valuta = 0 + id_valuta = 0 + nume_valuta = [] + Curs = 0 + multiplicator = 1 && modificare ROAFACTURARE v 2.0.90 + id_lucrare = 0 + nrord = [] + id_sectie = 0 + sectie = [] + totctvaconv = 0 + totftvaconv = 0 + tottvaconv = 0 + nvalval = 0 + ntvaval = 0 + ntotval = 0 + cValuta = [] + rezultat_serii = 0 + listare_componenta_set = 1 + listare_componenta_set_ll = 1 && modificare ROAFACTURARE v 2.0.56 + listare_serii = 1 && modificare ROAFACTURARE v 2.0.46 + listare_recapitulatie = 1 && modificare ROAFACTURARE v 2.0.46 + listare_lista_livrare = 1 && modificare ROAFACTURARE v 2.0.46 + id_furnizor = 0 && id_furnizor - imi trebuie la aviz pe baza de NIR + furnizor = [] && nume furnizor - imi trebuie la aviz pe baza de NIR + nrfactachi = 0 && numar factura achizitie - imi trebuie la aviz pe baza de NIR + id_part_rez = Null + id_gestiune_init = Null && gestiunea aleasa in formularul de introducere a datelor facturii / avizului + cDocAtasate = [crsoDateDocAtasate]&& modificare ROAFACTURARE v 2.0.58 + nRelistare = 0 && modificare ROAFACTURARE v 2.0.58 + nSalveazaAtasamente = 0 && modificare ROAFACTURARE v 2.0.58 + nid_proforma = 9999999999 && modificare ROAFACTURARE v 2.0.58 + nid_vanzare = 9999999999 && modificare ROAFACTURARE v 2.0.58 + nid_vanzare_retur = 9999999999 && modificare ROAFACTURARE v 2.0.58 + sumavorbe = [] && modificare ROAFACTURARE v 2.0.78 + coeficient_k = 0 && modificare ROAFACTURARE v 2.0.93 + explicatia4 = [] && modificare ROACONTRACTE v 2.0.42 + id_ordl = NULL && modificare ROAAUTO v 2.0.33 + tva_incasare = 0 && modificare ROAGEST v 2.2.0 + id_facturare = NULL && id adresa facturare + adresa_facturare = '' && adresa factuare text + nListareDetaliata = 0 && articolele se listeaza cumulat dupa cantitate sau detaliat, asa cum au fost adaugate pe factura + nListareSilentioasa = 0 && listare fara previzualizare + nListareJustPDF = 0 && listare doar pdf + oClient = NULL + lCopiere = .F. && copiere factura/aviz + nIdBeneficiar = Null + nTipFactura = NULL && tip intern factura (ex: ACN 0=TRANZIT/1=CHEIAJ/3=CHIRII/5=APA/6=PENALITATI) + id_util = NULL && id utilizator + tip_doc_394 = 'F' && FACTURA pentru xml EFactura + nRectificativa = 0 && 0 = factura initiala, 1 = factura rectificativa + tip_saft = 380 && factura initiala + institutie_publica = 0 && 1 = clientul este institutie publica, pentru folosirea coduri articole CPV sau NC8 + id_ctr = NULL && ID CONTRACT + contract = NULL && CONTNRACT + eFactura = 0 && 0/1 = se transmite in borderoul eFactura + sold_lei = 0 && soldul total pe client la emiterea facturii in lei + sold_valuta = 0 && soldul total pe client la emiterea facturii in valuta (nediferentiat pe valuta) + + Procedure Init + Lparameters tnIdSet, tnTip + && 0,0 - la listare + && id_set,tip + + Local ldData + If !Empty(m.tnIdSet) + && modificare ROAFACTURARE v 2.0.58 + Use In (SELECT('crsoDateDocAtasate')) + + Create Cursor crsoDateDocAtasate (nume_frx c(50),fisier w) + && modificare ROAFACTURARE v 2.0.58 ^ + ldData = Ttod(get_ora()) + If Month(ldData)<>gnLuna Or Year(ldData)<>gnAn + ldData=Gomonth(Date(gnAn,gnLuna,1),1)-1 + Endif + With This + .Data = ldData + .dataireg = ldData + .dataact = ldData + .tva_incasare = goCalendar.tva_incasare && modificare ROAFACTURARE v 2.2.0 + If (tnTip<21) OR INLIST(tnTip,45,48,49,51,52) && modificare ROAFACTURARE v 2.0.87 ( 45 ), v 2.0.93 ( 48 ), v 2.0.95 ( 49 ) + .datascad = IIF(TYPE('gnZileScadentaFact') = 'N', Iif(gnZileScadentaFact=-1,Gomonth(ldData,1),ldData+gnZileScadentaFact), GOMONTH(m.ldData,1)) + Endif + .zi_curs = ldData + If Inlist(tnIdSet,223,225,226,227,271) OR INLIST(m.tnTip, 5,6,7,9,10,52) && ,25014,25015,25016,25018,25019,25004,25005,25006,25008,25009,25051,25061) + .in_valuta = 1 + Endif + .id_set = tnIdSet + .tip = tnTip + .initializeaza_setari_document() + If Inlist(tnTip,23,30,41) + .initializeaza_politica_pret() + Endif + *!* .genereaza_numar_act() + .discount_evidentiat = IIF(TYPE('gnDiscountEvidentiat') = 'N', m.gnDiscountEvidentiat, 1) + .nRelistare = 0 && modificare ROAFACTURARE v 2.0.58 + + If INLIST(m.tnTip, 2, 6, 52) And Type('goContract') <> 'U' && FACTURARE DIN ROACONTRACTE + .id_client = goContract.id_part + .nume_client = goContract.denumire + .listaid = goContract.id_ctr + .descriere = goContract.contract + .id_sectie = goContract.id_sectie + .sectie = goContract.sectie + .id_responsabil = goContract.id_responsabil + .responsabil = goContract.responsabil + .id_valuta = goContract.id_valuta + .nume_valuta = goContract.nume_val + + lcSql = [ select id_ctr, contract, numar, data, denumire, scadenta_incasare, opt_facturare, text_standard, afisare_scadenta ]+; + [ FROM fact_vcontracte ]+; + [ where id_ctr = ] + Alltrim(Str(goContract.id_ctr)) + lnSucces = goExecutor.oExecute(lcSql,'crsCtrTemp') + + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare,0+16,"Eroare") + Return + *!* modificare ROACONTRACTE v 2.0.35 + Else + lcAlias = SELECT() + Select crsctrtemp + Calculate Min(scadenta_incasare),MAX(afisare_scadenta) For Inlist(opt_facturare,3,4,0) To lnScadentaIncasare,lnAfisareScadenta + If lnScadentaIncasare <> 0 + .datascad = .dataact + lnScadentaIncasare + Endif + && modificare ROACONTRACTE v 2.0.38 + .afisare_scadenta = lnAfisareScadenta + && modificare ROACONTRACTE v 2.0.38 ^ + Go Top + Select (lcAlias) + *!* modificare ROACONTRACTE v 2.0.35 ^ + ENDIF && lnSucces < 0 + ENDIF && tnTip = 2 And Type('goContract') <> 'U' && FACTURARE DIN ROACONTRACTE + + + + If tnTip = 3 And Type('goComanda') = 'O' && FACTURARE DIN ROACOMENZI + .id_client = goComanda.id_part + .nume_client = ALLTRIM(goComanda.nume) + .listaid = goComanda.id_comanda + .descriere = goComanda.nr_comanda + .id_sectie = goComanda.id_sectie +*!* .sectie = goComanda.sectie +*!* .id_responsabil = goComanda.id_responsabil +*!* .responsabil = goComanda.responsabil + + lcSql = [ select sectie from nom_sectii where id_sectie = ] + ALLTRIM(STR(goComanda.id_sectie)) + lnSucces = goExecutor.oExecute(lcSql,'crsComTemp') + + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare,0+16,"Eroare") + Return + Else + lcAlias = SELECT() + IF RECCOUNT('crsComTemp') > 0 + GO TOP IN crsComTemp + .sectie = ALLTRIM(crsComTemp.sectie) + ENDIF + USE IN (SELECT('crsComTemp')) + + Select (lcAlias) + ENDIF && lnSucces < 0 + ENDIF && tnTip = 3 And Type('goComanda') = 'O' + + Endwith + Endif + Endproc + + Procedure initializeaza_politica_pret + Local lnIdPol,lcNumePol + lnIdPol = 0 + lcNumePol = [] + actualizeaza_politica_pret(This.tip,@lnIdPol,@lcNumePol) + With This + .id_pol = lnIdPol + .nume_politica = lcNumePol + Endwith + Endproc + + Procedure initializeaza_setari_document + LPARAMETERS tnTip + Local lnIdFdoc, lcFdoc, lnTip + lnIdFdoc = 0 + lcFdoc = [] + + * vreau sa ReInitializez id_fdoc, daca schimb tipul documentului FACTURA/PROFORMA/BON FISCAL + * BON FISCAL = -101, PROFORMA = -102 + lnTip = IIF(EMPTY(m.tnTip), This.tip, m.tnTip) + actualizeaza_document(m.lnTip,@lnIdFdoc,@lcFdoc) + With This + .id_fdoc = lnIdFdoc + .fdoc = lcFdoc + Endwith + Endproc + + *** Se apeleaza in functie de optiunea + Procedure completeaza_setari_document + LPARAMETERS toDateAnterior, tlFactura + * tlFactura: .T. daca copiez o factura si am nevoie de id-ul facturii anterioare, iar toDateAnterior = toFactura + + IF TYPE('toDateAnterior') = 'O' AND !ISNULL(toDateAnterior) AND PEMSTATUS(toDateAnterior,'id_lucrare', 5) + With This + IF m.tlFactura + .lCopiere = .T. + *.nIdTipDoc = toDateAnterior.nIdTipDoc + .id_lucrare = toDateAnterior.id_lucrare + .nrord = ALLTRIM(NVL(toDateAnterior.lucrare, '')) + *.id_responsabil = toDateAnterior.id_responsabil + *.responsabil = toDateAnterior.responsabil + .id_sectie = toDateAnterior.id_sectie + .sectie = ALLTRIM(NVL(toDateAnterior.sectie, '')) + *.id_venchelt = toDateAnterior.id_venchelt + *.venchelt = toDateAnterior.venchelt + .id_agent = toDateAnterior.id_agent + .nume_agent = ALLTRIM(NVL(toDateAnterior.nume_agent , '')) + .id_delegat = toDateAnterior.id_delegat + .nume_delegat = ALLTRIM(NVL(toDateAnterior.delegat, '')) + .BIdelegat = toDateAnterior.BIdelegat + .CNPdelegat = toDateAnterior.CNPdelegat + .nrinmat = ALLTRIM(NVL(toDateAnterior.nrinmat, '')) + .id_masina = toDateAnterior.id_masina + .listaid = toDateAnterior.id_vanzare + .descriere = Alltrim(Alltrim(Nvl(toDateAnterior.serie_act,[]))+[ ]+Alltrim(Str(toDateAnterior.numar_act,14,0))) + .id_client = toDateAnterior.id_part + .nume_client = toDateAnterior.client + ELSE + .nIdTipDoc = toDateAnterior.nIdTipDoc + .id_lucrare = toDateAnterior.id_lucrare + .nrord = toDateAnterior.nrord + .id_responsabil = toDateAnterior.id_responsabil + .responsabil = toDateAnterior.responsabil + .id_sectie = toDateAnterior.id_sectie + .sectie = toDateAnterior.sectie + .id_venchelt = toDateAnterior.id_venchelt + .venchelt = toDateAnterior.venchelt + .id_agent = toDateAnterior.id_agent + .nume_agent = toDateAnterior.nume_agent + .id_delegat = toDateAnterior.id_delegat + .nume_delegat = toDateAnterior.nume_delegat + .BIdelegat = toDateAnterior.BIdelegat + .CNPdelegat = toDateAnterior.CNPdelegat + .nrinmat = toDateAnterior.nrinmat + .id_masina = toDateAnterior.id_masina + ENDIF + ENDWITH + ENDIF + ENDPROC + + *!* Procedure genereaza_numar_act + *!* Private pnTip,pnNumarAct + *!* With This + *!* pnTip = .tip + *!* pnNumarAct = 0 + *!* lcSql = [begin ] + gcS + [.pack_facturare.genereaza_numar_act(?pnTip,?gnIdUtil,?@pnNumarAct);] + ; + *!* [end;] + *!* lnSucces = goExecutor.oExecute(lcSql) + *!* If lnSucces<0 + *!* amessagebox(goExecutor.oPrelucrareEroare(),16,"Eroare") + *!* Endif + *!* .nract = pnNumarAct + *!* Endwith + *!* Endproc + + Procedure scrieAtasamente + Private pnId,pnTip,pcFormat + If Used('crsoDateDocAtasate') And Nvl(poDate.nid_vanzare,9999999999)<>9999999999 + If Reccount('crsoDateDocAtasate') > 0 + Select crsoDateDocAtasate + Scan + *!* If poDate.tip = 4 And Like([AVIZ*],Upper(Alltrim(crsoDateDocAtasate.nume_frx))) + *!* lcSql = [begin pack_facturare.scrie_atasamente_factura(?poDate.nid_vanzare_retur,?crsoDateDocAtasate.nume_frx,?crsoDateDocAtasate.fisier); end;] + *!* Else + *!* lcSql = [begin pack_facturare.scrie_atasamente_factura(?poDate.nid_vanzare,?crsoDateDocAtasate.nume_frx,?crsoDateDocAtasate.fisier); end;] + *!* Endif + lcNume_Frx = crsoDateDocAtasate.nume_frx + If poDate.tip = 4 And Like([AVIZ*],Upper(Alltrim(lcNume_Frx))) + pnId = poDate.nid_vanzare_retur + Else + pnId = poDate.nid_vanzare + Endif + + Do Case + Case Like([FACTURA_VAL*],Upper(Alltrim(lcNume_Frx))) + pnTip= 2 + Case Like([FACTURA*],Upper(Alltrim(lcNume_Frx))) + pnTip = 1 + Case Like([INVOICE*],Upper(Alltrim(lcNume_Frx))) + pnTip = 3 + Case Like([RECAPITULATIE],Upper(Alltrim(lcNume_Frx))) + pnTip = 4 + Case Like([AVIZ*],Upper(Alltrim(lcNume_Frx))) + pnTip = 5 + Endcase + + If Like([*A5],Upper(Alltrim(lcNume_Frx))) + pcFormat = [A5] + Else + pcFormat = [A4] + Endif + + lcSql = [INSERT INTO ATASAMENTE_VANZARI(ID_VANZARE, TIP, FORMAT, DOCUMENT, ID_UTIL) VALUES (?pnId,?pnTip,?pcFormat,?crsoDateDocAtasate.fisier,?gnIdUtil);] + lnSucces = goExecutor.oExecute(lcSql) + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare,16,"Eroare") + Endif + Endscan + Endif + Use In crsoDateDocAtasate + Endif + Release pnId,pnTip,pcFormat + Endproc + + Procedure Reset + Lparameters tnTip + && modificare ROAFACTURARE v 2.0.58 + If Used('crsoDateDocAtasate') + Use In crsoDateDocAtasate + Endif + Create Cursor crsoDateDocAtasate (nume_frx c(50),fisier w) + && modificare ROAFACTURARE v 2.0.58 ^ + With This + .dataireg = .Data + .dataact = .Data + If (tnTip<21) OR INLIST(tnTip,45,48,49,51,52) && modificare ROAFACTURARE v 2.0.93 ; v 2.0.95 ( 49 ) +*!* modificare v 2.2.4 +*!* .datascad = Iif(gnScadentaAutomata=0,Gomonth(.Data,1),.Data+gnZileScadentaFact) + .datascad = Iif(gnZileScadentaFact=-1,Gomonth(.Data,1),.Data+gnZileScadentaFact) +*!* modificare v 2.2.4 ^ + ENDIF + .nIdTipDoc = 5 && FACTURA + .zi_curs = .Data + .id_client = Null + .nume_client = [] + .listaid = [] && id_comanda, id_contract sau lista id_aviz + .descriere = [] && numar comanda, numar contract sau numere avize + .id_venchelt = Null && modificare ROAFACTURARE v 2.0.46 + .venchelt = [] && modificare ROAFACTURARE v 2.0.46 + .id_responsabil = Null + .responsabil = [] + .id_pol = Null + .nume_politica = [] + .nume_responsabil= [] && alte date pentru facturare + .BIresp = [] + .CNPresp = [] + .id_delegat = Null + .nume_delegat = [] + .BIdelegat = [] + .CNPdelegat = [] + .id_masina = Null + .nrinmat = [] + .id_agent = Null + .dataora_exp = {} && modificare ROAFACTURARE v 2.0.80 + .nume_agent = [] + .proc_tva = 0 + .explicatie_tva = [] && modificare ROAFACTURARE v 2.0.46 + .discount_evidentiat = gnDiscountEvidentiat + .afisare_scadenta = 1 && modificare ROACONTRACTE v 2.0.38 + .text_aditional = [] + .text_aditional_invoice = [] && modificare ROAFACTURARE v 2.0.46 + .text_aditional_retur = [] + .text_aditional_en = [] && modificare ROAFACTURARE v 2.0.80 + .eProforma = 0 + .nEFactura = 0 + .oInfoEFactura = Null + .eBonFiscal = 0 + .serie_chit = [] && modificare ROAFACTURARE v 2.0.80 + .explicatie_chit = [] && modificare ROAFACTURARE v 2.0.80 + .nr_incasare = 0 + .id_casa = 0 + .ntip_incasare = 0 && modificare ROAFACTURARE v 2.0.84 + .incasat = 0 && incasat numerar + .incasatCARD = 0 && incasat prin CARD POS + .nIncasatPos = 0 && 1 s-a ales bon fiscal prin CARD POS + .nBonDetaliat = 0 && 1 se listeaza articole individuale; 0 se listeaza "contravaloare factura nr..." + .incasatTichete = 0 && incasat tichete + .totalctva = 0 + .nract = 0 + .serie_act = [] + .nract_retur = 0 + .serie_act_retur = [] + .id_valuta = 0 + .nume_valuta = [] + .Curs = 0 + .multiplicator = 1 + .id_lucrare = 0 + .nrord = [] + .id_sectie = 0 + .sectie = [] + .totctvaconv = 0 + .totftvaconv = 0 + .tottvaconv = 0 + .rezultat_serii = 0 + .listare_componenta_set = 1 + .listare_componenta_set_ll = 1 && modificare ROAFACTURARE v 2.0.56 + .id_part_rez = Null + .id_gestiune_init = Null + .listare_serii = 1 && modificare ROAFACTURARE v 2.0.46 + .listare_recapitulatie = 1 && modificare ROAFACTURARE v 2.0.46 + .listare_lista_livrare = 1 && modificare ROAFACTURARE v 2.0.46 + .nRelistare = 0 && modificare ROAFACTURARE v 2.0.58 + .nSalveazaAtasamente = 0 && modificare ROAFACTURARE v 2.0.58 + .nid_proforma = 9999999999 && modificare ROAFACTURARE v 2.0.58 + .nid_vanzare = 9999999999 && modificare ROAFACTURARE v 2.0.58 + .nid_vanzare_retur = 9999999999 && modificare ROAFACTURARE v 2.0.58 + .sumavorbe = [] && modificare ROAFACTURARE v 2.0.78 + .coeficient_k = 0 && modificare ROAFACTURARE v 2.0.93 + .explicatia4 = [] && modificare ROACONTRACTE v 2.0.42 + .id_ordl = NULL && modificare ROAAUTO v 2.0.33 + .id_facturare = NULL + .nListareDetaliata = 0 + .nListareSilentioasa = 0 && listare fara previzualizare + .nListareJustPDF = 0 && listare doar pdf + .oClient = NULL + .lCopiere = .F. && copiere factura/aviz + .nIdBeneficiar = Null + .nTipFactura = NULL && tip intern factura (ex: ACN 0=TRANZIT/1=CHEIAJ/3=CHIRII/5=APA/6=PENALITATI) + .id_util = NULL && id utilizator + .tip_doc_394 = 'F' && FACTURA pentru xml EFactura + .nRectificativa = 0 && 0 = factura initiala, 1 = factura rectificativa + .tip_saft = 380 && factura initiala + .institutie_publica = 0 && 1 = institutie publica + .eFactura = 0 && 1 = se transmite in borderoul eFactura + .id_ctr = NULL && ID CONTRACT + .contract = NULL && CONTRACT + Endwith + Endproc + + PROCEDURE nIdTipDoc_Assign + LPARAMETERS tnIdTipDoc + + This.eProforma = IIF(m.tnIdTipDoc = This.nIdTipDocProforma, 1, 0) + This.eBonFiscal = IIF(m.tnIdTipDoc = This.nIdTipDocBonFiscal, 1, 0) + + this.nIdTipDoc = m.tnIdTipDoc + ENDPROC && nIdTipDoc_Assign + +Enddefine +******************************************** SFARSIT: oDateFactura ******************************************** +******************************************** INCEPUT: oDateGestiune ******************************************** +Define Class oDateGestiune As Custom + id_gestiune = 0 + id_tipgest = 0 + Cont = [] + acont = [] + + Procedure Reset + With This + .id_gestiune = 0 + .id_tipgest = 0 + .Cont = [] + .acont = [] + Endwith +Enddefine +******************************************** SFARSIT: oDateGestiune ******************************************** +************************************** INCEPUT: actualizeaza_document ****************************************** +Function actualizeaza_document + Lparameters tnTip,tnIdFdoc,tcFdoc + Local llReturn + Private pnTip,pnIdFdoc,pcFdoc + Store .T. To llReturn + pnTip = tnTip + pnIdFdoc = tnIdFdoc + pcFdoc = tcFdoc + lcSql = [begin ] + gcS + [.pack_facturare.citeste_setari_document(?pnTip,?@pnIdFdoc,?@pcFdoc);] + ; + [end;] + lnSucces = goExecutor.oExecute(lcSql) + If lnSucces<0 + AMESSAGEBOX(goExecutor.oPrelucrareEroare(),16,"Eroare") + pnIdFdoc = Null + pcFdoc = [] + llReturn = .F. + Endif + tnIdFdoc = pnIdFdoc + tcFdoc = pcFdoc + Return llReturn +Endfunc +************************************** SFARSIT: actualizeaza_document ***************************************** +Function actualizeaza_partener_fact + Lparameters tnTip,tnIdPart,tcNumePart + Local llReturn + Private pnTip,pnIdPart,pcNumePart + Store .T. To llReturn + pnTip = tnTip + pnIdPart = tnIdPart + pcNumePart = tcNumePart + lcSql = [begin ] + gcS + [.pack_facturare.citeste_setari_partener(?pnTip,?@pnIdPart,?@pcNumePart);] + ; + [end;] + lnSucces = goExecutor.oExecute(lcSql) + If lnSucces<0 + AMESSAGEBOX(goExecutor.oPrelucrareEroare(),16,"Eroare") + pnIdPart = Null + pcNumePart = [] + llReturn = .F. + Endif + tnIdPart = pnIdPart + tcNumePart = pcNumePart + Return llReturn +Endfunc +************************************ SFARSIT: actualizeaza_partener_fact *************************************** +Function actualizeaza_politica_pret + Lparameters tnTip,tnIdPol,tcNumePol + Local llReturn + Private pnTip,pnIdPol,pcNumePol + Store .T. To llReturn + pnTip = tnTip + pnIdPol = tnIdPol + pcNumePol = tcNumePol + lcSql = [begin ] + gcS + [.pack_facturare.citeste_setari_pol_pret(?pnTip,?gnIdUtil,?@pnIdPol,?@pcNumePol);] + ; + [end;] + lnSucces = goExecutor.oExecute(lcSql) + If lnSucces<0 + AMESSAGEBOX(goExecutor.oPrelucrareEroare(),16,"Eroare") + pnIdPol = Null + pcNumePol = [] + llReturn = .F. + Endif + tnIdPol = pnIdPol + tcNumePol = pcNumePol + Return llReturn +Endfunc +************************************ SFARSIT: actualizeaza_politica_pret *************************************** +********************************************************************************************************* +Function recalculeaza_pret_vanzare_lei + Lparameters tcTabel,tnCurs + Private pcSirIdTemp,pcSirDiferenta + Store [] To pcSirIdTemp,pcSirDiferenta + Local llReturn + llReturn = .T. + lcSeparator = [|] + + Select (tcTabel) + Calculate Sum(Round(vpretftva*cantitate,gnPVal)),Sum(Round(pretftva*cantitate,gnPc)) To lnTotalVal,lnTotalLei + lnTotalVal = Round(lnTotalVal*tnCurs,gnPc) + + *!* modificare 09.11.2007 + *!* If lnTotalVal <> lnTotalLei + *!* lnDiferenta = lnTotalVal - lnTotalLei + *!* lnSemn = Sign(lnDiferenta) + *!* lnDiferenta = Abs(lnDiferenta) + *!* lnDiferentaPretU = Exp((-1)*gnPc*Log(10)) + *!* lnModificari = 1 + + *!* Do While lnModificari <> 0 + *!* lnModificari = 0 + *!* Select (tcTabel) + *!* Scan + *!* lnDiferentaPret = Round(lnDiferentaPretU*cantitate,gnPc) + *!* lnSemnPret = Sign(lnDiferentaPret) + *!* If Abs(lnDiferentaPret) <= Abs(lnDiferenta) + *!* lnDiferenta = lnDiferenta - lnSemn * lnDiferentaPret + If lnTotalVal <> lnTotalLei + lnDiferenta = lnTotalVal - lnTotalLei + lnSemn = Sign(lnDiferenta) + lnDiferentaMin = Abs(lnDiferenta) + lnDiferentaPretU = Exp((-1)*gnPPretV*Log(10)) + lnModificari = 1 + + Do While lnModificari <> 0 + lnModificari = 0 + Select (tcTabel) + Scan + lnDiferentaPret = Round(lnDiferentaPretU*cantitate,gnPC) + lnSemnPret = Sign(cantitate) + lnTestDiferenta = lnDiferenta - lnSemn * Abs(lnDiferentaPret) + *!* If Abs(lnDiferentaPret) <= Abs(lnDiferenta) And Abs(lnTestDiferenta) lnTotalLei +*!* lnDiferenta = lnTotalVal - lnTotalLei +*!* lnSemn = Sign(lnDiferenta) +*!* lnDiferentaMin = Abs(lnDiferenta) +*!* lnDiferentaPretU = Exp((-1)*gnPc*Log(10)) +*!* lnModificari = 1 + +*!* Do While lnModificari <> 0 +*!* lnModificari = 0 +*!* Select (tcTabel) +*!* Scan +*!* lnDiferentaPret = Round(lnDiferentaPretU*cantitate,gnPc) +*!* lnSemnPret = Sign(cantitate) +*!* lnTestDiferenta = lnDiferenta - lnSemn * Abs(lnDiferentaPret) +*!* *!* If Abs(lnDiferentaPret) <= Abs(lnDiferenta) And Abs(lnTestDiferenta)0 + lnPreciziePret = iif(poDate.in_valuta=0,gnPPretV,gnPVal) + lnPrecizieValoare = iif(poDate.in_valuta=0,gnPc,gnPVal) + lnDiferentaPretU = Exp((-1)*lnPreciziePret*Log(10)) + + Create Cursor crsxtemp(id_temp N(20),difunit N(18,max(lnPreciziePret,4)),tip_valuta N(1),Curs N(10,max(gnPCurs,4)),multiplicator N(10),; + cantitate N(18,max(gnPCant,4)),pret N(18,max(lnPreciziePret,4)),id_set_fact N(20)) + + *!* modificare ROAFACTURARE v 2.0.46 + *!* Insert Into crsxtemp (id_c, difunit, tip_valuta, Curs, cantitate, Pret, id_set_fact) ; + *!* Select id_c,Round(Round(lnDiferentaPretU*Iif(poDate.in_valuta=0,Iif(tip_valuta=0,1,Curs),1),gnPPret)*cantitate,gnPc) As difunit,; + *!* tip_valuta,Curs,cantitate,Iif(tip_valuta=0,pretftva,vpretftva) As Pret,id_set_fact ; + *!* FROM crsfactura Where id_set_fact <> 0 Order By 2 Desc + Insert Into crsxtemp (id_temp, difunit, tip_valuta, Curs, multiplicator, cantitate, Pret, id_set_fact) ; + Select id_temp,Round(round(lnDiferentaPretU*Iif(poDate.in_valuta=0,Iif(tip_valuta=0,1,Curs/multiplicator),1),lnPreciziePret)*cantitate,lnPrecizieValoare) As difunit,; + tip_valuta,Curs,multiplicator,cantitate,Iif(tip_valuta=0,pretftva,vpretftva) As Pret,id_set_fact ; + FROM crsfactura Where id_set_fact <> 0 Order By 2 Desc + *!* modificare ROAFACTURARE v 2.0.46 ^ + + Select crsfacturaset + Scan + lnIdSetFact = id_set_fact + lnTotalSet = Iif(poDate.in_valuta=0,Round(pretftva*cantitate,lnPrecizieValoare),Round(vpretftva*cantitate,lnPrecizieValoare)) + lnCantitateSet = cantitate + lcDenumire = Alltrim(denumire) + lnPretInitialSet = Iif(poDate.in_valuta=0,pretftva,vpretftva) + lnPretPropusSet = lnPretInitialSet + *!* lnDiferentaMin = Round(lnDiferentaPretU*cantitate,gnPc) + + Select crsfactura + Calculate Sum(Round(Iif(poDate.in_valuta=0,Iif(tip_valuta=0,pretftva,Round(vpretftva*Curs/multiplicator,gnPc)),vpretftva)*cantitate,lnPrecizieValoare)) ; + For id_set_fact = lnIdSetFact To lnTotal + + If lnTotalSet <> lnTotal + lnDiferenta = lnTotalSet - lnTotal + lnDiferentaInitiala = lnDiferenta + lnSemn = Sign(lnDiferenta) + lnDiferentaMin = Abs(lnDiferenta) + *!* lnDiferentaPretU = Exp((-1)*gnPc*Log(10)) + lnModificari = 1 + + Do While lnModificari <> 0 + lnModificari = 0 + Select crsxtemp + Scan For id_set_fact = lnIdSetFact + lnTipValuta = tip_valuta + lnCurs = Curs / multiplicator + lnDiferentaPret = difunit + lnSemnPret = Sign(cantitate) + lnTestDiferenta = lnDiferenta - lnSemn * Abs(lnDiferentaPret) + *!* STRTOFILE(ALLTRIM(STR(lnDiferenta,10,gnPc))+[ >> ]+ALLTRIM(STR(lnDiferentaPret,10,gnPc))+CHR(13)+CHR(10),[c:\testfact.txt],1) + *!* modificare ROAFACTURARE v 2.0.46 + *!* If Abs(lnDiferentaPret) <= Abs(lnDiferenta) And Abs(lnTestDiferenta)lnDiferentaMin + lnDiferentaMin = Abs(lnTestDiferenta) + lnDiferenta = lnTestDiferenta + Replace Pret With Pret + lnSemn * lnSemnPret * lnDiferentaPretU + *!* modificare ROAFACTURARE v 2.0.46 + *!* If Abs((lnDiferentaInitiala-lnDiferenta)/lnCantitateSet - Round((lnDiferentaInitiala-lnDiferenta)/lnCantitateSet,gnPc)) <= gnMarjaEroareRepartizare + If Round(Abs((lnDiferentaInitiala-lnDiferenta)/lnCantitateSet - Round((lnDiferentaInitiala-lnDiferenta)/lnCantitateSet,lnPreciziePret)),lnPreciziePret) <= gnMarjaEroareRepartizare + *!* modificare ROAFACTURARE v 2.0.46 ^ + lnPretPropusSet = lnPretInitialSet - lnSemn * lnSemnPret * ; + Floor((lnDiferentaInitiala-lnDiferenta)/lnCantitateSet*Exp(lnPreciziePret*Log(10)))*Exp((-1)*lnPreciziePret*Log(10)) + Endif + If lnDiferenta <> 0 + lnModificari = lnModificari + 1 + Else + lnModificari = 0 + Exit + Endif + + Endif + Endscan + Enddo + + *!* amessagebox(Alltrim(Str(lnDiferenta,10,gnPc))) + *!* modificare ROAFACTURARE v 2.0.46 + *!* If Abs(lnDiferenta)>gnMarjaEroareRepartizare + If Abs(Round(lnDiferenta,lnPrecizieValoare))>gnMarjaEroareRepartizare + *!* modificare ROAFACTURARE v 2.0.46 ^ + lnDiferentaUnitara = lnDiferenta/lnCantitateSet + *!* amessagebox(ALLTRIM(STR(lnDiferentaUnitara,10,gnPc))+[ ]+ALLTRIM(STR(lnDiferenta,10,gnPc))) + If Round(lnDiferentaUnitara,lnPreciziePret)=lnDiferentaUnitara + If AMESSAGEBOX("Nu s-a putut repartiza intreaga diferenta." + Chr(13) + Chr(10) + ; + "Doriti sa "+Iif(lnDiferentaUnitara>0,[diminuati],[cresteti]) + ; + " pretul unitar al articolului compus " + lcDenumire + ; + " cu " + formateaza(Abs(lnDiferentaUnitara),14,lnPreciziePret) + " ?"; + ,4+32,"Confirmare")==6 + Select crsfacturaset + && se scade pretul setului cu lnDiferentaUnitara + modifica_pret_articol_compus(1,lnDiferentaUnitara) + llReturn = .T. + Else + llReturn = .F. + Exit + Endif + Else + If lnPretPropusSet <> lnPretInitialSet + If AMESSAGEBOX("Doriti sa modificati pretul pentru " + ; + lcDenumire + " din " + formateaza(lnPretInitialSet,18,lnPreciziePret) + ; + " in " + formateaza(lnPretPropusSet,18,lnPreciziePret)+" ?",4+32,"Confirmare")=6 + modifica_pret_articol_compus(2,lnPretPropusSet) + llReturn = .F. + Else + AMESSAGEBOX("Nu se poate repartiza diferenta de pret pentru articolele din componenta " + ; + lcDenumire + " !",48,"Atentie") + llReturn = .F. + Exit + Endif + Else + AMESSAGEBOX("Nu se poate repartiza diferenta de pret pentru articolele din componenta " + ; + lcDenumire + " !",48,"Atentie") + llReturn = .F. + Exit + Endif + Endif + Endif + Endif + Endscan + Endif + + If Used('crsxtemp') And llReturn + Select crsxtemp + Scan + *!* modificare ROAFACTURARE v 2.0.46 + lnIdTemp = id_temp + *!* lnIdC = id_c + *!* modificare ROAFACTURARE v 2.0.46 ^ + lnPretNou = Pret + lnCurs = Curs / multiplicator + Select crsfactura + *!* modificare ROAFACTURARE v 2.0.46 + Locate For id_temp = lnIdTemp + *!* Locate For id_c = lnIdC + *!* modificare ROAFACTURARE v 2.0.46 ^ + If Found() + lnTipValuta = tip_valuta + If lnTipValuta = 0 + *!* modificare ROAFACTURARE v 2.0.46 + If pretftva <> lnPretNou + *!* modificare ROAFACTURARE v 2.0.46 ^ + Replace pretftva With lnPretNou,; + pretctva With lnPretNou + Round(lnPretNou*(proc_Tvav-1),lnPreciziePret),; + valftva With Round(lnPretNou * cantitate,lnPrecizieValoare),; + valtva With Round(Round(lnPretNou * cantitate,lnPrecizieValoare)*(proc_Tvav-1),lnPrecizieValoare),; + valctva With valftva + valtva,; + valdiminuatftva With Round((lnPretNou-discountftva)*cantitate,lnPrecizieValoare),; + valdiminuattva With Round(Round((lnPretNou-discountftva)*cantitate,lnPrecizieValoare)*(proc_Tvav-1),lnPrecizieValoare),; + valdiminuatctva With valdiminuatftva + valdiminuattva + *!* modificare ROAFACTURARE v 2.0.46 + Endif + *!* modificare ROAFACTURARE v 2.0.46 ^ + Else + *!* modificare ROAFACTURARE v 2.0.46 + If vpretftva <> lnPretNou + *!* modificare ROAFACTURARE v 2.0.46 ^ + Replace vpretftva With lnPretNou,; + vpretctva With lnPretNou + Round(lnPretNou*(proc_Tvav-1),lnPreciziePret),; + vvalftva With Round(lnPretNou * cantitate,lnPrecizieValoare),; + vvaltva With Round(Round(lnPretNou * cantitate,lnPrecizieValoare)*(proc_Tvav-1),lnPrecizieValoare),; + vvalctva With vvalftva + vvaltva,; + vvaldiminuatftva With Round((lnPretNou-vdiscountftva)*cantitate,lnPrecizieValoare),; + vvaldiminuattva With Round(Round((lnPretNou-vdiscountftva)*cantitate,lnPrecizieValoare)*(proc_Tvav-1),lnPrecizieValoare),; + vvaldiminuatctva With vvaldiminuatftva + vvaldiminuattva,; + pretftva With Round(lnPretNou * lnCurs,gnPPretV),; + pretctva With Round(lnPretNou * lnCurs,gnPPretV) + Round(Round(lnPretNou * lnCurs,gnPPretV)*(proc_Tvav-1),gnPPretV),; + valftva With Round(Round(lnPretNou * lnCurs,gnPPretV) * cantitate,gnPc),; + valtva With Round(Round(Round(lnPretNou * lnCurs,gnPPretV) * cantitate,gnPc)*(proc_Tvav-1),gnPc),; + valctva With valftva + valtva,; + valdiminuatftva With Round(Round((lnPretNou-vdiscountftva)*lnCurs,gnPPretV)*cantitate,gnPc),; + valdiminuattva With Round(Round(Round((lnPretNou-vdiscountftva)*lnCurs,gnPPretV)*cantitate,gnPc)*(proc_Tvav-1),gnPc),; + valdiminuatctva With valdiminuatftva + valdiminuattva + *!* modificare ROAFACTURARE v 2.0.46 + Endif + *!* modificare ROAFACTURARE v 2.0.46 ^ + Endif + Endif + Select crsxtemp + Endscan + + Use In crsxtemp + Endif + + Return llReturn +Endfunc && recalculeaza_pret_vanzare_compus +********************************************************************************************************* +Procedure modifica_pret_articol_compus + Lparameters tnTip,tnValoare + && tnTip = 1 - tnValoare este diferenta + && = 2 - tnValoare este pretul nou + Local lnPretNou + Select crsfacturaset + If poDate.in_valuta = 0 + lnPretNou = Iif(tnTip=1,pretftva + (-1) * tnValoare,tnValoare) + Replace pretftva With lnPretNou,; + pretctva With lnPretNou + Round(lnPretNou * (proc_Tvav - 1),gnPPretV),; + valftva With Round(lnPretNou * cantitate,gnPc),; + valtva With Round(Round(lnPretNou * cantitate,gnPc)*(proc_Tvav-1),gnPc),; + valctva With Round(lnPretNou * cantitate,gnPc) + Round(Round(lnPretNou * cantitate,gnPc)*(proc_Tvav-1),gnPc),; + valdiminuatftva With Round((lnPretNou - valdiscountftva)*cantitate,gnPc),; + valdiminuattva With Round(Round((lnPretNou - valdiscountftva)*cantitate,gnPc)*(proc_Tvav-1),gnPc),; + valdiminuatctva With Round((lnPretNou - valdiscountftva)*cantitate,gnPc) + Round(Round((lnPretNou - valdiscountftva)*cantitate,gnPc)*(proc_Tvav-1),gnPc) + + Else + lnPretNou = Iif(tnTip=1,vpretftva + (-1) * tnValoare,tnValoare) + Replace vpretftva With lnPretNou,; + vpretctva With lnPretNou + Round(lnPretNou * (proc_Tvav - 1), gnPVal),; + vvalftva With Round(lnPretNou * cantitate,gnPVal),; + vvaltva With Round(Round(lnPretNou * cantitate,gnPVal) * (proc_Tvav - 1),gnPVal),; + vvalctva With Round(lnPretNou * cantitate,gnPVal) + Round(Round(lnPretNou * cantitate,gnPVal) * (proc_Tvav - 1),gnPVal),; + vvaldiminuatftva With Round((lnPretNou - vdiscountftva) * cantitate,gnPVal),; + vvaldiminuattva With Round(Round((lnPretNou - vdiscountftva) * cantitate,gnPVal) * (proc_Tvav - 1),gnPVal),; + vvaldiminuatctva With Round((lnPretNou - vdiscountftva) * cantitate,gnPVal) + Round(Round((lnPretNou - vdiscountftva) * cantitate,gnPVal) * (proc_Tvav - 1),gnPVal),; + pretftva With Round(lnPretNou*Curs/multiplicator,gnPPretV),; + pretctva With Round(lnPretNou*Curs/multiplicator,gnPPretV) + Round(Round(lnPretNou*Curs/multiplicator,gnPPretV) * (proc_Tvav - 1), gnPPretV),; + valftva With Round(Round(lnPretNou * Curs/multiplicator,gnPPretV) * cantitate,gnPc),; + valtva With Round(Round(Round(lnPretNou * Curs/multiplicator,gnPPretV) * cantitate,gnPc) * (proc_Tvav - 1),gnPc),; + valctva With Round(Round(lnPretNou * Curs/multiplicator,gnPPretV) * cantitate,gnPc) + Round(Round(Round(lnPretNou * Curs/multiplicator,gnPPretV) * cantitate,gnPc) * (proc_Tvav - 1),gnPc),; + valdiminuatftva With Round(Round((lnPretNou - vdiscountftva)* Curs/multiplicator,gnPPretV) * cantitate,gnPc),; + valdiminuattva With Round(Round(Round((lnPretNou - vdiscountftva)* Curs/multiplicator,gnPPretV) * cantitate,gnPc) * (proc_Tvav - 1),gnPc),; + valdiminuatctva With Round(Round((lnPretNou - vdiscountftva)* Curs/multiplicator,gnPPretV) * cantitate,gnPc) + Round(Round(Round((lnPretNou - vdiscountftva)* Curs/multiplicator,gnPPretV) * cantitate,gnPc) * (proc_Tvav - 1),gnPc) + Endif + +Endproc && modifica_pret_articol_compus +********************************************************************************************************* +*!* Procedure prelucreaza_aviz_cu_tva +*!* Lparameters tnDiscountEvidentiat +*!* Create Cursor crsfacturafinala(denumire c(100),explicatie c(100),cantitate N(20,4),; +*!* pretctva N(20,4),valctva N(20,4),proc_tva N(20,4),um c(10),serie c(100)) +*!* Select Recno() As nrcrt,a.denumire,a.explicatie,a.cantitate,a.pretctva,a.valctva,; +*!* a.proc_tvav as proc_tva,Nvl(a.um,Space(10)) as um,Nvl(a.serie,' ') As serie From crsfactura a; +*!* into Cursor crsfacturafinala +*!* Endproc && prelucreaza_aviz_cu_tva +********************************************************************************************************* +Procedure prelucreaza_factura + *!* modificare ROAFACTURARE v 2.0.67 + *!* Lparameters tnDiscountEvidentiat,tnTipFacturare,tnInValuta,tnPretListSubunitati + *!* modificare ROAFACTURARE v 2.0.77 : am adaugat tcCursorSursa, tcCursorSursaSet,tcCursorDestinatie + Lparameters tcCursorSursa,tcCursorSursaSet,tcCursorDestinatie,tnDiscountEvidentiat,tnInValuta,tnPretListAviz, tnListareDetaliata + *!* modificare ROAFACTURARE v 2.0.67 ^ + *!* ii transmit tnPretListSubunitati ca parametru pentru ca sa nu mai testez si daca este vorba de o factura sau nu + *!* tnListareDetaliata: daca sa se listeze randurile asa cum sunt in loc de grupate dupa articol, pret. sa nu se cumuleze cantitatea pe articole + LOCAL llListareDetaliata, lnIdArticol + llListareDetaliata = (IIF(TYPE('tnListareDetaliata') = 'N', tnListareDetaliata, 0) = 1) + + Local lcCursor,lnPretListAviz,lnIdTemp + *!* modificare ROAFACTURARE v 2.0.67 : am adaugat id_ctr, numar_contract + *!* modificare v 2.0.77 + creeaza_facturafinala(tcCursorDestinatie) + *!* Create Cursor crsfacturafinala(denumire c(100),explicatie c(240),cantitate N(20,4),pretctva N(20,4),valctva N(20,4),; + *!* pretftva N(20,4),pretftvai N(20,4),pretctvai N(20,4),proc_disc N(10,4),valftva N(20,4),valtva N(20,4),; + *!* valftvai N(20,4),valctvai N(20,4),valdiscount N(20,4),; + *!* proc_tva N(20,4),um c(10),serie c(100),codmat c(50),codbare c(50),codmatf c(50),; + *!* id_jtva_coloana N(10),expltva c(100),id_ctr N(10) Null,numar_contract c(100) Null) + *!* modificare v 2.0.77 ^ + If Used('crsfacttemp') + Use In crsfacttemp + Endif + *!* modificare v 2.0.4 + If Empty(tnPretListAviz) + lnPretListAviz = 2 + Else + lnPretListAviz = Nvl(tnPretListAviz,2) + ENDIF + + *!* modificare v 2.0.4 ^ + If Empty(tcCursorSursaSet) + lcCursor = tcCursorSursa + Else + If !Used(tcCursorSursaSet) + lcCursor = tcCursorSursa + Else + Select (tcCursorSursaSet) + lcTab = Chr(9) + lcCrlf = Chr(13) + Chr(10) + *!* modificare v 2.0.4 + If Used('crsfactstemp') + Use In crsfactstemp + Endif + Select * From (tcCursorSursaSet) Into Cursor crsfactstemp + Delete From (tcCursorSursaSet) + Select crsfactstemp + *!* modificare v 2.0.4 ^ + Scan + lnIdSetFact = id_set_fact + lnCantitate = cantitate + lnIdTemp = id_temp && modificare ROAFACTURARE v 2.0.67 + + Insert Into (tcCursorSursaSet) Select * From crsfactstemp Where id_set_fact = lnIdSetFact + *!* modificare ROAFACTURARE v 2.0.67 : am pus lnIdTemp in loc de MIN(id_temp) +*!* Insert Into (tcCursorSursaSet) (id_temp,denumire) ; +*!* Select lnIdTemp As id_temp,lcTab+Alltrim(Alltrim(denumire)+lcTab+Alltrim(codmat)+lcTab+Alltrim(codmatf)+lcCrlf+Nvl(explicatie,[]))+Space(5)+; +*!* Alltrim(Str(Round(Sum(cantitate)/lnCantitate,gnPCant),9,gnPCant))+[ ]+Alltrim(Nvl(um,[])) As denumire ; +*!* From (tcCursorSursa) Where id_set_fact = lnIdSetFact Group By denumire,codmat,codmatf,explicatie,um +*!* Nu merge gruparea dupa campul explicatie Memo. Initial era tip caracter + select denumire,codmat,codmatc,codmatf,cast(explicatie as c(254)) as explicatie,um, Round(Sum(cantitate)/lnCantitate,gnPCant) as cant ; + From (tcCursorSursa) ; + Where id_set_fact = lnIdSetFact ; + Group By 1,2,3,4,5,6 ; + into cursor cSeturiTemporar + + Insert Into (tcCursorSursaSet) (id_temp,denumire) ; + Select lnIdTemp As id_temp,lcTab+Alltrim(Alltrim(denumire)+lcTab+Alltrim(codmat)+lcTab+Alltrim(codmatf)+lcCrlf+Nvl(explicatie,[]))+Space(5)+; + Alltrim(Str(cant,9,gnPCant))+[ ]+Alltrim(Nvl(um,[])) As denumire ; + From cSeturiTemporar + USE IN (SELECT('cSeturiTemporar')) + + Select crsfactstemp + *!* modificare v 2.0.4 ^ + Endscan + + Insert Into (tcCursorSursaSet) Select * From (tcCursorSursa) Where Nvl(id_set_fact,0) = 0 + *!* modificare v 2.0.4 + If Used('crsfactstemp') + Use In crsfactstemp + Endif + *!* modificare v 2.0.4 ^ + lcCursor = tcCursorSursaSet + Endif + Endif + + *!* modificare ROAFACTURARE v 2.0.31 + If gnOrdineElemDoc = 2 + Select a.* From (lcCursor) a Into Cursor (lcCursor) Order By a.denumire + *!* modificare ROAFACTURARE v 2.0.56 + Else + Select a.* From (lcCursor) a Into Cursor (lcCursor) Order By a.id_temp + *!* modificare ROAFACTURARE v 2.0.56 ^ + Endif + *!* modificare ROAFACTURARE v 2.0.31 ^ + + Select Recno() As nrcrt,IIF(m.llListareDetaliata, RECNO(), 1000) as grup, a.* From (lcCursor) a Into Cursor (lcCursor) Order By nrcrt + + creeaza_crsfacttemp() + + Do Case + Case tnDiscountEvidentiat = 1 And lnPretListAviz = 2 && pret fara tva + Insert Into crsfacttemp (nrcrt,denumire,explicatie,codmat,codmatc,codmatf,um,cod_um_iso,cantitate,; + pretftva,codbare,pretctva,pretftvai,pretctvai,proc_disc,valftvai,valctvai,; + valftva,valtva,discountftva,valdiscountftva,valdiscounttva, proc_Tvav,; + serie,id_jtva_coloana,id_jtva_coloana_ex,valctva,discountctva,valdiscountctva,id_ctr,numar_contract,grup, id_articol,lot) ; + Select Min(nrcrt) As nrcrt,denumire,LEFT(explicatie, 240) as explicatie,Nvl(codmat,Space(50)) As codmat,; + Nvl(codmatc,Space(50)) As codmatc,Nvl(codmatf,Space(50)) As codmatf,; + Nvl(um,Space(10)) As um,CAST(cod_um_iso as C(10)) As cod_um_iso,Sum(cantitate) As cantitate,; + pretftva,Nvl(codbare,Space(50)) As codbare,pretctva,; + pretftva As pretftvai,pretctva As pretctvai,0 As proc_disc,Sum(valftva) As valftvai,Sum(valftva+valtva) As valctvai,; + Sum(valftva) As valftva,Sum(valtva) As valtva, ; + discountftva,Sum(valdiscountftva) As valdiscountftva,Sum(valdiscounttva) As valdiscounttva, proc_Tvav,; + Min(Nvl(serie,Space(100))) As serie,id_jtva_coloana,id_jtva_coloana_ex, ; + SUM(valctva) As valctva,discountctva, Sum(discountctva) As valdiscountctva,id_ctr,numar_contract,grup,id_articol,Min(Nvl(lot,Space(20))) As lot ; + FROM (lcCursor) ; + group by 2,3,4,5,6,7,8,10,11,12,13,14,15,20,23,25,26,28,30,31,32,33 ; + ORDER By 1 && Into Cursor crsfacttemp + + * Group By denumire,codmat,codmatf,explicatie,um,codbare,pretftva,pretctva,proc_Tvav,id_jtva_coloana,discountftva,discountctva,id_ctr,numar_contract,grup + + Case tnDiscountEvidentiat = 0 And lnPretListAviz = 2 && pret fara tva + Insert Into crsfacttemp (denumire,explicatie,codmat,codmatc,codmatf,cantitate,pretftva,; + codbare,pretftvai,pretctvai,pretctva,proc_disc,valftva,valtva,; + valftvai,valctvai,discountftva,valdiscountftva,valdiscounttva,proc_Tvav,um,cod_um_iso,; + nrcrt,serie,id_jtva_coloana,id_jtva_coloana_ex,valctva,discountctva,valdiscountctva,id_ctr,numar_contract,grup,id_articol,lot) ; + Select denumire,LEFT(explicatie, 240) as explicatie,Nvl(codmat,Space(50)) As codmat,Nvl(codmatc,Space(50)) As codmatc,Nvl(codmatf,Space(50)) As codmatf,Sum(cantitate) As cantitate,pretftva-discountftva As pretftva,; + Nvl(codbare,Space(50)) As codbare,pretftva As pretftvai,pretctva As pretctvai,pretctva-discountctva As pretctva,; + Iif(cu_tva=0,Iif(pretftva<>0,Round(discountftva/pretftva*100,2),0),; + Iif(pretctva<>0,Round(discountctva/pretctva*100,2),0)) As proc_disc,; + Sum(valdiminuatftva) As valftva,Sum(valdiminuattva) As valtva,; + Sum(valftva) As valftvai,Sum(valftva+valtva) As valctvai,; + 0 As discountftva,0 As valdiscountftva,0 As valdiscounttva, proc_Tvav, Nvl(um,Space(10)) As um,CAST(cod_um_iso as C(10)) As cod_um_iso,; + Min(nrcrt) As nrcrt,Min(Nvl(serie,Space(100))) As serie,id_jtva_coloana,id_jtva_coloana_ex, ; + SUM(valdiminuatctva) As valctva,0 As discountctva, 0 As valdiscountctva,id_ctr,numar_contract,grup,id_articol,Min(Nvl(lot,Space(20))) As lot ; + FROM (lcCursor) Group By 1,2,3,4,5,7,8,9,10,11,12,20,21,22,25,26,28,29,30,31,32,33 Order By 23 + *!* UNION all + Insert Into crsfacttemp (denumire,explicatie,codmat,codmatc,codmatf,cantitate,pretftva,; + codbare,pretftvai,pretctvai,pretctva,proc_disc,valftva,valtva,; + valftvai,valctvai,discountftva,valdiscountftva,valdiscounttva,proc_Tvav,um,cod_um_iso,; + nrcrt,serie,id_jtva_coloana,id_jtva_coloana_ex,valctva,discountctva,valdiscountctva,grup,id_articol,lot) ; + Select denumire,explicatie,Nvl(codmat,Space(50)) As codmat,Nvl(codmatc,Space(50)) As codmatc,Nvl(codmatf,Space(50)) As codmatf,1 As cantitate,pretftva-discountftva as pretftva,; + Space(50) As codbare,pretftva As pretftvai,pretctva As pretctvai,pretctva-discountctva As pretctva,; + Iif(pretctva<>0,Round(discountctva/pretctva*100,2),0) As proc_disc,; + 0 As valftva,0 As valtva,0 As valftvai,0 As valctvai,discountftva,valdiscountftva,valdiscounttva,; + proc_Tvav, Nvl(um,Space(10)) As um,CAST(cod_um_iso as C(10)) As cod_um_iso, nrcrt, Nvl(serie,Space(100)) As serie,id_jtva_coloana,id_jtva_coloana_ex, ; + valdiminuatctva As valctva,0 As discountctva, 0 As valdiscountctva, grup,id_articol, Nvl(lot,Space(20)) As lot ; + from (lcCursor) Where denumire = Replicate('Z',20) Order By 22 && Into Cursor crsfacttemp + Case tnDiscountEvidentiat = 1 And lnPretListAviz = 1 && pret cu tva + Insert Into crsfacttemp(nrcrt,denumire,explicatie,codmat,codmatc,codmatf,um,cod_um_iso,cantitate,pretctva,; + valctva,valtva,pretftva,codbare,discountctva,valdiscountctva,valdiscounttva,proc_Tvav,serie,id_jtva_coloana,id_jtva_coloana_ex,; + pretftvai,pretctvai,proc_disc,valftva,valftvai,valctvai,id_ctr,numar_contract,grup,id_articol,lot) ; + Select Min(nrcrt) As nrcrt,denumire,LEFT(explicatie, 240) as explicatie,Nvl(codmat,Space(50)) As codmat,Nvl(codmatc,Space(50)) As codmatc,Nvl(codmatf,Space(50)) As codmatf,; + Nvl(um,Space(10)) As um,CAST(cod_um_iso as C(10)) As cod_um_iso,Sum(cantitate) As cantitate,pretctva,Sum(valctva) As valctva,Sum(valtva) As valtva, ; + pretftva,Nvl(codbare,Space(50)) As codbare,discountctva,Sum(valdiscountctva) As valdiscountctva,; + Sum(valdiscounttva) As valdiscounttva, proc_Tvav, Min(Nvl(serie,Space(100))) As serie,id_jtva_coloana,id_jtva_coloana_ex, ; + pretftva As pretftvai,pretctva As pretctvai,0 As proc_disc,Sum(valftva) As valftva,; + Sum(valftva) As valftvai,Sum(valctva) As valctvai,id_ctr,numar_contract,grup,id_articol, Min(Nvl(lot,Space(20))) As lot ; + FROM (lcCursor) ; + group by 2,3,4,5,6,7,8,10,13,14,15,18,20,21,22,23,24,28,29,30,31 ; + ORDER By 1 && Into Cursor crsfacttemp + + *Group By denumire,codmat,codmatf,explicatie,um,codbare,pretftva, pretctva,proc_Tvav,id_jtva_coloana,discountctva,id_ctr,numar_contract,grup ; + + Otherwise && pret cu tva + Insert Into crsfacttemp(denumire,explicatie,codmat,codmatc,codmatf,cantitate,pretctva,; + codbare,pretftvai,pretctvai,pretftva,proc_disc,valftva,valctva,valtva,; + valftvai,valctvai,discountctva,valdiscountctva,valdiscounttva,proc_Tvav,um,cod_um_iso,; + nrcrt,serie,id_jtva_coloana,id_jtva_coloana_ex,id_ctr,numar_contract,grup,id_articol,lot) ; + Select denumire,LEFT(explicatie, 240) as explicatie,Nvl(codmat,Space(50)) As codmat,Nvl(codmatc,Space(50)) As codmatc,Nvl(codmatf,Space(50)) As codmatf,; + Sum(cantitate) As cantitate,pretctva-discountctva As pretctva,; + Nvl(codbare,Space(50)) As codbare,pretftva As pretftvai,pretctva As pretctvai,pretftva-discountftva As pretftva,; + Iif(cu_tva=0,Iif(pretftva<>0,Round(discountftva/pretftva*100,2),0),; + Iif(pretctva<>0,Round(discountctva/pretctva*100,2),0)) As proc_disc,; + Sum(valdiminuatftva) As valftva,Sum(valdiminuatctva) As valctva,Sum(valdiminuattva) As valtva,; + Sum(valftva) As valftvai,Sum(valctva) As valctvai,; + 0 As discountctva,0 As valdiscountctva,0 As valdiscounttva, proc_Tvav, Nvl(um,Space(10)) As um,CAST(cod_um_iso as C(10)) As cod_um_iso,; + Min(nrcrt) As nrcrt, Min(Nvl(serie,Space(100))) As serie,id_jtva_coloana,id_jtva_coloana_ex,id_ctr,numar_contract,grup,id_articol, Min(Nvl(lot,Space(20))) As lot ; + FROM (lcCursor) Group By 1,2,3,4,5,7,8,9,10,11,12,21,22,23,26,27,28,29,30,31 Order By 24 + *!* UNION all + Insert Into crsfacttemp(denumire,explicatie,codmat,codmatc,codmatf,cantitate,pretctva,; + codbare,pretftvai,pretctvai,pretftva,proc_disc,valftva,valctva,valtva,; + valftvai,valctvai,discountctva,valdiscountctva,valdiscounttva,proc_Tvav,um,cod_um_iso,; + nrcrt,serie,id_jtva_coloana,id_jtva_coloana_ex,grup,id_articol,lot) ; + Select denumire,explicatie,Nvl(codmat,Space(50)) As codmat,Nvl(codmatc,Space(50)) As codmatc,Nvl(codmatf,Space(50)) As codmatf,; + 1 As cantitate,pretctva,; + Space(50) As codbare,pretftva As pretftvai,pretctva As pretctvai,pretftva,; + Iif(pretctva<>0,Round(discountctva/pretctva*100,2),0) As proc_disc,; + 0 As valftva,0 As valctva,0 As valtva,0 As valftvai,0 As valctvai,discountctva,; + valdiscountctva,valdiscounttva, proc_Tvav, Nvl(um,Space(10)) As um,CAST(cod_um_iso as C(10)) As cod_um_iso, nrcrt,; + Nvl(serie,Space(100)) As serie,id_jtva_coloana,id_jtva_coloana_ex,grup,id_articol,Nvl(lot,Space(20)) As lot ; + from (lcCursor) Where denumire = Replicate('Z',20) Order By 23 && Into Cursor crsfacttemp + ENDCASE + + ******************************** + *** Explicatia are 500 de caractere, tip Memo si nu poate fi folosita intr-un select group by + *** Am selectat doar primele 240 caractere apoi completez explicatia din cursorul original + ******************************** + SELECT (lcCursor) + SCAN + SCATTER NAME loRec MEMO + SELECT crsfacttemp + LOCATE FOR denumire = loRec.denumire AND Nvl(codmat,Space(50)) = Nvl(loRec.codmat,Space(50)) AND LEFT(explicatie, 240) = LEFT(loRec.explicatie, 240) + IF FOUND() + REPLACE explicatie WITH ALLTRIM(loRec.explicatie) + ENDIF + ENDSCAN + + *!* modificare ROAFACTURARE v 2.0.20 ^ + *!* crsfactura(id_temp N(20),id_articol N(20),id_pol N(20),id_gestiune N(20),Cont c(4),um c(10), ; + *!* denumire c(100),pretftva N(20,4),pretctva N(20,4),valftva N(20,4), valtva N(20,4), valctva N(20,4),; + *!* cantitate N(20,4),discountftva N(20,4), discountctva N(20,4),valdiscountftva N(20,4),valdiscounttva N(20,4),; + *!* valdiscountctva N(20,4),valdiminuatftva N(20,4),valdiminuattva N(20,4),; + *!* valdiminuatctva N(20,4),proc_tvav N(20,4),cu_tva N(1)) + *!* modificare ROAFACTURARE v 2.0.67 + *!* Endif + *!* modificare ROAFACTURARE v 2.0.67 ^ + Select crsfacttemp + Scan + Scatter Name loArticol Memo + Select (tcCursorDestinatie) + lcSerie = Nvl(loArticol.serie,'') && modificare ROAFACTURARE v 2.0.46 + lcLot = Nvl(loArticol.lot,'') && modificare ROAFACTURARE v 2.0.46 + If loArticol.denumire <> Replicate('Z',20) + Append Blank + *!* modificare v 2.0.4 + *!* If lnPretListSubunitati = 2 && pret fara tva + *!* *!* modificare v 2.0.4 ^ + *!* Replace denumire With Alltrim(loArticol.denumire),explicatie With Alltrim(Nvl(loArticol.explicatie,[ ])),; + *!* cantitate With loArticol.cantitate,codmat With Alltrim(NVL(loArticol.codmat,Space(50))),codmatf With Alltrim(loArticol.codmatf),; + *!* codbare With Alltrim(NVL(loArticol.codbare,Space(50))),; + *!* pretftvai with loArticol.pretftvai,pretctvai with loArticol.pretctvai,proc_disc with loArticol.proc_disc,; + *!* pretctva with loArticol.pretctva,pretftva With loArticol.pretftva,; + *!* valftva With loArticol.valftva,valtva With loArticol.valtva,; + *!* valftvai with loArticol.valftvai,valctvai with loArticol.valctvai,; + *!* pretctva With loArticol.pretctva,valctva With loArticol.valctva,valtva With loArticol.valtva,; + *!* proc_tva With loArticol.proc_Tvav,um With Alltrim(loArticol.um),serie With Alltrim(loArticol.serie),id_jtva_coloana With loArticol.id_jtva_coloana + *!* *!* modificare v 2.0.4 + *!* Else + Replace denumire With Alltrim(loArticol.denumire),explicatie With Alltrim(Nvl(loArticol.explicatie,[ ])),; + cantitate With loArticol.cantitate,codmat With Alltrim(Nvl(loArticol.codmat,Space(50))),codmatc With Alltrim(Nvl(loArticol.codmatc,Space(50))),codmatf With Alltrim(loArticol.codmatf),; + codbare With Alltrim(Nvl(loArticol.codbare,Space(50))),; + pretftvai With loArticol.pretftvai,pretctvai With loArticol.pretctvai,proc_disc With loArticol.proc_disc,; + pretctva With loArticol.pretctva,; + pretftva With loArticol.pretftva,valftva With loArticol.valftva,; + valftvai With loArticol.valftvai,valctvai With loArticol.valctvai,; + pretctva With loArticol.pretctva,valctva With loArticol.valctva,valtva With loArticol.valtva,; + proc_tva With loArticol.proc_Tvav,um With Alltrim(loArticol.um),cod_um_iso With Alltrim(loArticol.cod_um_iso),; + lot With Alltrim(loArticol.lot),serie With Alltrim(loArticol.serie),id_jtva_coloana With loArticol.id_jtva_coloana,id_jtva_coloana_ex With loArticol.id_jtva_coloana_ex,; + id_ctr With loArticol.id_ctr,numar_contract With loArticol.numar_contract, id_articol WITH loArticol.id_articol + *!* Endif + *!* modificare v 2.0.4 ^ + *!* modificare v 2.0.46 + lcSerie = [] + lcLot = [] + Select (tcCursorSursa) + *!* modificare v 2.0.47 + *!* Scan For Alltrim(denumire) = Alltrim(loArticol.denumire) ; + *!* And Alltrim(Nvl(explicatie,[x_x|])) = Alltrim(Nvl(loArticol.explicatie,[x_x|])) ; + *!* and Alltrim(Nvl(codmat,[x_x|])) = Alltrim(Nvl(loArticol.codmat,[x_x|])) ; + *!* And Alltrim(Nvl(codmatf,[x_x|])) = Alltrim(Nvl(loArticol.codmatf,[x_x|])) ; + *!* and Alltrim(Nvl(codbare,[x_x|])) = Alltrim(Nvl(loArticol.codbare,[x_x|])) ; + *!* and pretftva = loArticol.pretftva ; + *!* and Alltrim(Nvl(um,[x_x|])) = Alltrim(Nvl(loArticol.um,[x_x|])) ; + *!* and discountftva = loArticol.discountftva ; + *!* and proc_Tvav = loArticol.proc_Tvav + *!* lcSerie = lcSerie + Iif(!Empty(Nvl(serie,'')),[,]+Alltrim(serie),[]) + *!* Endscan + If lnPretListAviz = 2 + Scan For Alltrim(denumire) = Alltrim(loArticol.denumire) ; + And Alltrim(Nvl(explicatie,[x_x|])) = Alltrim(Nvl(loArticol.explicatie,[x_x|])) ; + and Alltrim(Nvl(codmat,[x_x|])) = Alltrim(Nvl(loArticol.codmat,[x_x|])) ; + And Alltrim(Nvl(codmatf,[x_x|])) = Alltrim(Nvl(loArticol.codmatf,[x_x|])) ; + and Alltrim(Nvl(codbare,[x_x|])) = Alltrim(Nvl(loArticol.codbare,[x_x|])) ; + and pretftva = loArticol.pretftva ; + and Alltrim(Nvl(um,[x_x|])) = Alltrim(Nvl(loArticol.um,[x_x|])) ; + and discountftva = loArticol.discountftva ; + and proc_Tvav = loArticol.proc_Tvav ; + and Nvl(id_ctr,-1) = Nvl(loArticol.id_ctr,-1) ; + and Nvl(numar_contract,'') = Nvl(loArticol.numar_contract,'') + lcSerie = lcSerie + Iif(!Empty(Nvl(serie,'')),[,]+Alltrim(serie),[]) + lcLot = lcLot + Iif(!Empty(Nvl(lot,'')),[,]+Alltrim(lot),[]) + Endscan + Else + Scan For Alltrim(denumire) = Alltrim(loArticol.denumire) ; + And Alltrim(Nvl(explicatie,[x_x|])) = Alltrim(Nvl(loArticol.explicatie,[x_x|])) ; + and Alltrim(Nvl(codmat,[x_x|])) = Alltrim(Nvl(loArticol.codmat,[x_x|])) ; + And Alltrim(Nvl(codmatf,[x_x|])) = Alltrim(Nvl(loArticol.codmatf,[x_x|])) ; + and Alltrim(Nvl(codbare,[x_x|])) = Alltrim(Nvl(loArticol.codbare,[x_x|])) ; + and pretctva = loArticol.pretctva ; + and Alltrim(Nvl(um,[x_x|])) = Alltrim(Nvl(loArticol.um,[x_x|])) ; + and discountctva = loArticol.discountctva ; + and proc_Tvav = loArticol.proc_Tvav ; + and Nvl(id_ctr,-1) = Nvl(loArticol.id_ctr,-1) ; + and Nvl(numar_contract,'') = Nvl(loArticol.numar_contract,'') + lcSerie = lcSerie + Iif(!Empty(Nvl(serie,'')),[,]+Alltrim(serie),[]) + lcLot = lcLot + Iif(!Empty(Nvl(lot,'')),[,]+Alltrim(lot),[]) + Endscan + Endif + *!* modificare v 2.0.47 ^ + Select (tcCursorDestinatie) + lcSerie = Iif(!Empty(lcSerie),Substr(lcSerie,2),Nvl(loArticol.serie,'')) + lcLot = Iif(!Empty(lcLot),Substr(lcLot,2),Nvl(loArticol.lot,'')) + Replace serie With m.lcSerie, lot WITH m.lcLot + *!* modificare v 2.0.46 ^ + Else + loArticol.denumire = [FACTURA] + Endif + *!* modificare v 2.0.4 + If lnPretListAviz = 2 && pret fara tva + *!* modificare v 2.0.4 ^ + If loArticol.discountftva <> 0 + Append Blank + lnProcentDiscount = loArticol.discountftva * 100 / loArticol.pretftva + Replace denumire With [Discount ]+Alltrim(Str(lnProcentDiscount,10,2))+[ % ]+Alltrim(Proper(loArticol.denumire)),; + lot With Iif(!Empty(Nvl(lcLot,[])),[],Alltrim(loArticol.lot)), serie With Iif(!Empty(Nvl(lcSerie,[])),[],Alltrim(loArticol.serie)),; + cantitate With loArticol.cantitate,um With Alltrim(loArticol.um),cod_um_iso WITH ALLTRIM(loArticol.cod_um_iso),; + codbare With Alltrim(Nvl(loArticol.codbare,Space(50))),; + pretftva With (-1) * loArticol.discountftva,valftva With (-1) * loArticol.valdiscountftva,codmat With Alltrim(Nvl(loArticol.codmat,Space(50))),; + codmatc With Alltrim(Nvl(loArticol.codmatc,Space(50))),codmatf With Alltrim(loArticol.codmatf),valtva With (-1) * loArticol.valdiscounttva,; + proc_tva With loArticol.proc_Tvav,id_jtva_coloana With loArticol.id_jtva_coloana,id_jtva_coloana_ex With loArticol.id_jtva_coloana_ex,; + id_ctr With loArticol.id_ctr,numar_contract With loArticol.numar_contract, id_articol WITH loArticol.id_articol + Endif + *!* modificare v 2.0.4 + Else + If loArticol.discountctva <> 0 + Append Blank + lnProcentDiscount = loArticol.discountctva * 100 / loArticol.pretctva + Replace denumire With [Discount ]+Alltrim(Str(lnProcentDiscount,10,2))+[ % ]+Alltrim(Proper(loArticol.denumire)),; + lot With Iif(!Empty(lcLot),[],Alltrim(loArticol.lot)), serie With Iif(!Empty(lcSerie),[],Alltrim(loArticol.serie)),; + cantitate With loArticol.cantitate,um With Alltrim(loArticol.um),cod_um_iso WITH ALLTRIM(loArticol.cod_um_iso),; + codmatc With Alltrim(Nvl(loArticol.codmatc,Space(50))),codmatf With Alltrim(loArticol.codmatf),codbare With Alltrim(Nvl(loArticol.codbare,Space(50))),; + pretctva With (-1) * loArticol.discountctva,valctva With (-1) * loArticol.valdiscountctva,codmat With Alltrim(Nvl(loArticol.codmat,Space(50))),; + valtva With (-1) * loArticol.valdiscounttva,proc_tva With loArticol.proc_Tvav,id_jtva_coloana With loArticol.id_jtva_coloana,id_jtva_coloana_ex With loArticol.id_jtva_coloana_ex,; + id_ctr With loArticol.id_ctr,numar_contract With loArticol.numar_contract, id_articol WITH loArticol.id_articol + Endif + Endif + *!* modificare v 2.0.4 ^ + Select crsfacttemp + Endscan + + Use In crsfacttemp + completeaza_explicatie_tva(tcCursorDestinatie) && modificare ROAFACTURARE v 2.0.46 + + *!* modificare ROAFACTURARE v 2.0.67 + If Inlist(poDate.tip,2,6,26,51,52) + completeaza_explicatie_contract(tcCursorDestinatie) + Endif + *!* modificare ROAFACTURARE v 2.0.67 ^ + + * Completez CODNC8/CODCPV + SELECT (m.tcCursorDestinatie) + SCAN + lnIdArticol = id_articol + loCod = GetCodNC8CPV(m.lnIdArticol) + SELECT (m.tcCursorDestinatie) + Replace codnc8 WITH loCod.codnc8, codcpv WITH loCod.codcpv + ENDSCAN + + If tnInValuta = 1 + *!* nu a fost modificata prelucreaza_factura_valuta pentru ca avizele se fac doar in lei + *!* iar optiunea de listare a pretului cu tva este valabila doar pentru RON + *!* modificare ROAFACTURARE v 2.0.67 + *!* prelucreaza_factura_valuta(tnDiscountEvidentiat,tnTipFacturare) + prelucreaza_factura_valuta(tcCursorSursa,tcCursorSursaSet,tnDiscountEvidentiat, tnListareDetaliata) + *!* modificare ROAFACTURARE v 2.0.67 ^ + Endif + +Endproc && prelucreaza_factura +********************************************************************************************************* +Procedure prelucreaza_lista_livrare + *!* modificare ROAFACTURARE v 2.0.67 + *!* Lparameters tnTipFacturare + *!* modificare ROAFACTURARE v 2.0.67 ^ + Local lcCursor + lcCursor = [crslltemp] + Create Cursor crslistalivrare(nrcrt N(10),denumire c(100),explicatie M,cantitate N(20,max(gnPCant,4)),um c(10),lot c(20) NULL, serie c(100) null,; + codmat c(50),codmatf c(50)) + + If !Used('crsfacturaset') + Select a.* From crsfactura a Where a.gestionabil = 1 Into Cursor (lcCursor) Order By 1 + Else + *!* modificare ROAFACTURARE v 2.0.56 + *!* Select a.* From crsfacturaset a Where !Isnull(a.id_set_fact) And Nvl(gestionabil,0) = 1 ; + *!* Into Cursor (lcCursor) Order By 1 + If poDate.listare_componenta_set_ll = 1 + Select a.* From crsfacturaset a Where Nvl(a.gestionabil,0) = 1 Or a.cantitate = 0 ; + Into Cursor (lcCursor) Order By 1 + Else + Select a.* From crsfacturaset a Where Nvl(a.id_set_fact,0)<>0 Or (Nvl(a.id_set_fact,0)=0 And Nvl(a.gestionabil,0) = 1) ; + Into Cursor (lcCursor) Order By 1 + Endif + *!* modificare ROAFACTURARE v 2.0.56 ^ + Endif + + If Reccount(lcCursor) > 0 + Select Min(nrcrt) As nrcrt,denumire,Nvl(codmat,Space(50)) As codmat,Nvl(codmatf,Space(50)) As codmatf,; + LEFT(explicatie,254) as explicatie,Nvl(um,Space(10)) As um,Sum(cantitate) As cantitate, ; + Nvl(lot,Space(20)) As lot, Nvl(serie,Space(100)) As serie ; + FROM (lcCursor) Group By 2,3,4,5,6,8,9 ; + ORDER By 1 Into Cursor crslistalivrare + * denumire,codmat,codmatf,explicatie,um,serie + Else + Select * From (lcCursor) Into Cursor crslistalivrare + Endif + + Use In (lcCursor) + +Endproc && prelucreaza_lista_livrare +********************************************************************************************************* +Procedure prelucreaza_recapitulatie + Lparameters tnDiscountEvidentiat + Local lcCursor + Create Cursor crsrecapitulatie(denumire c(100),explicatie M,cantitate N(20,max(gnPCant,4)),pretftva N(20,max(gnPPretV,4)),pret_achizitie N(20,max(gnPPret,4)),; + valftva N(20,max(gnPc,4)),valtva N(20,max(gnPc,4)),um c(10),lot m,serie m,codmat c(50),codmatf c(50),id_jtva_coloana N(10),expltva c(100)) + + If Used('crsfacttemp') + Use In crsfacttemp + Endif + + *!* modificare ROAFACTURARE v 2.0.31 + If gnOrdineElemDoc = 2 + Select a.* From crsfactura a Into Cursor crsfactura Order By a.denumire + *!* modificare ROAFACTURARE v 2.0.56 + Else + Select a.* From crsfactura a Into Cursor crsfactura Order By a.id_temp + *!* modificare ROAFACTURARE v 2.0.56 ^ + Endif + *!* modificare ROAFACTURARE v 2.0.31 ^ + Select Recno() As nrcrt,a.* From crsfactura a Into Cursor crsfactura Order By nrcrt + + If tnDiscountEvidentiat = 1 + Select Min(nrcrt) As nrcrt,denumire,Nvl(codmat,Space(50)) As codmat,Nvl(codmatf,Space(50)) As codmatf,; + CAST(explicatie as C(254)) as explicatie,Nvl(um,Space(10)) As um,Sum(cantitate) As cantitate,pretftva,Sum(valftva) As valftva,; + Sum(valtva) As valtva, discountftva,pret_achizitie,Sum(valdiscountftva) As valdiscountftva,; + Sum(valdiscounttva) As valdiscounttva, proc_Tvav, Nvl(serie,Space(100)) As serie,; + id_jtva_coloana, Nvl(lot,Space(20)) As lot ; + FROM crsfactura Group By 2,3,4,5,6,8,11,12,15,16,17,18 ; + ORDER By 1 Into Cursor crsfacttemp + Else + Select denumire,CAST(explicatie as C(254)) as explicatie,Nvl(codmat,Space(50)) As codmat, Sum(cantitate) As cantitate,pretftva-discountftva As pretftva,; + Sum(valdiminuatftva) As valftva,Sum(valdiminuattva) As valtva,pret_achizitie,; + 0 As discountftva,0 As valdiscountftva,0 As valdiscounttva, proc_Tvav, ; + Nvl(um,Space(10)) As um,Min(nrcrt) As nrcrt, Nvl(serie,Space(100)) As serie, ; + Nvl(codmatf,Space(50)) As codmatf,id_jtva_coloana, Nvl(lot,Space(20)) As lot ; + FROM crsfactura Group By 1,2,3,5,8,12,13,15,16,17,18 ; + UNION All ; + Select denumire,explicatie,Nvl(codmat,Space(50)) As codmat,1 As cantitate,pretftva,; + 0 As valftva,0 As valtva,0 As pret_achizitie,discountftva,valdiscountftva,valdiscounttva,; + proc_Tvav, Nvl(um,Space(10)) As um, nrcrt, Nvl(serie,Space(100)) As serie, ; + Nvl(codmatf,Space(50)) As codmatf,id_jtva_coloana, Nvl(lot,Space(20)) As lot ; + from crsfactura Where denumire = Replicate('Z',20) Order By 14 ; + Into Cursor crsfacttemp + Endif + Select crsfacttemp + Scan + Scatter Name loArticol Memo + Select crsrecapitulatie + If loArticol.denumire <> Replicate('Z',20) + Append Blank + Replace denumire With Alltrim(loArticol.denumire),explicatie With Alltrim(Nvl(loArticol.explicatie,[ ])),; + cantitate With loArticol.cantitate,codmat With Nvl(loArticol.codmat,Space(50)),codmatf With Alltrim(loArticol.codmatf),; + pretftva With loArticol.pretftva,valftva With loArticol.valftva,valtva With loArticol.valtva,; + um With Alltrim(loArticol.um),lot With Alltrim(loArticol.lot),serie With Alltrim(loArticol.serie),; + pret_achizitie With loArticol.pret_achizitie,id_jtva_coloana With loArticol.id_jtva_coloana + Else + loArticol.denumire = [FACTURA] + Endif + If loArticol.discountftva <> 0 + Append Blank + lnProcentDiscount = loArticol.discountftva * 100 / loArticol.pretftva + Replace denumire With [Discount ]+Alltrim(Str(lnProcentDiscount,10,2))+[ % ]+Alltrim(Proper(loArticol.denumire)),; + lot With Alltrim(loArticol.lot),serie With Alltrim(loArticol.serie),cantitate With loArticol.cantitate,um With Alltrim(loArticol.um),; + pretftva With (-1) * loArticol.discountftva,valftva With (-1) * loArticol.valdiscountftva,codmat With Nvl(loArticol.codmat,Space(50)),; + valtva With (-1) * loArticol.valdiscounttva,pret_achizitie With loArticol.pret_achizitie,codmatf With Nvl(loArticol.codmatf,Space(50)),; + id_jtva_coloana With loArticol.id_jtva_coloana + Endif + Select crsfacttemp + Endscan + + Use In crsfacttemp + +Endproc && prelucreaza_recapitulatie +********************************************************************************************************* +Procedure prelucreaza_factura_valuta + Lparameters tcCursorSursa,tcCursorSursaSet,tnDiscountEvidentiat, tnListareDetaliata + && ,tnTipFacturare *!* modificare ROAFACTURARE v 2.0.67 + *!* modificare v 2.0.77 + *!* tnListareDetaliata: daca sa se listeze randurile asa cum sunt in loc de grupate dupa articol, pret. sa nu se cumuleze cantitatea pe articole + + LOCAL llListareDetaliata, lnIdArticol + llListareDetaliata = (IIF(TYPE('tnListareDetaliata') = 'N', tnListareDetaliata, 0) = 1) + + creeaza_facturafinala([crsfacturafinalaval]) + *!* Create Cursor crsfacturafinalaval(denumire c(100),explicatie c(240),cantitate N(20,4),pretftva N(20,4),; + *!* valftva N(20,4),valtva N(20,4),proc_tva N(20,4),um c(10),serie m,codmat c(50),codmatf c(50),codbare c(50),; + *!* id_jtva_coloana N(10),expltva c(100),id_ctr N(10) Null,numar_contract c(100) Null) + *!* modificare v 2.0.77 ^ + If Used('crsfacttemp') + Use In crsfacttemp + Endif + + If !Used(tcCursorSursaSet) + lcCursor = tcCursorSursa + Else + lcCursor = tcCursorSursaSet + Endif + + *!* modificare ROAFACTURARE v 2.0.56 + If gnOrdineElemDoc = 2 + Select a.* From (lcCursor) a Into Cursor (lcCursor) Order By a.denumire + Else + Select a.* From (lcCursor) a Into Cursor (lcCursor) Order By a.id_temp + ENDIF + + *!* modificare ROAFACTURARE v 2.0.56 ^ + + creeaza_crsfacttemp() + If tnDiscountEvidentiat = 1 + Insert Into crsfacttemp (nrcrt,denumire,explicatie,um,cod_um_iso,cantitate,pretftva,valftva,valtva, ; + discountftva,valdiscountftva,valdiscounttva,proc_Tvav,serie,; + codmat,codmatc,codmatf,id_jtva_coloana,codbare,id_ctr,numar_contract,grup,id_articol,lot) ; + Select Min(nrcrt) As nrcrt,denumire,LEFT(explicatie, 240) as explicatie,Nvl(um,Space(10)) As um,CAST(cod_um_iso as C(10)) As cod_um_iso,Sum(cantitate) As cantitate,; + vpretftva As pretftva,Sum(vvalftva) As valftva,Sum(vvaltva) As valtva, ; + vdiscountftva As discountftva,Sum(vvaldiscountftva) As valdiscountftva,; + Sum(vvaldiscounttva) As valdiscounttva,proc_Tvav, Min(Nvl(serie,Space(100))) As serie,; + Nvl(codmat,Space(50)) As codmat,IIF(TYPE(m.lcCursor + '.codmatc') = 'C', Nvl(codmatc,Space(50)), SPACE(50)) As codmatc,Nvl(codmatf,Space(50)) As codmatf,id_jtva_coloana, ; + Nvl(codbare,Space(50)) As codbare,id_ctr,numar_contract,grup,id_articol, Min(Nvl(lot,Space(20))) As lot ; + FROM (lcCursor) Group By 2,3,4,5,7,10,13,15,16,17,18,19,20,21,22,23 ; + ORDER By 1 && Into Cursor crsfacttemp + Else + Insert Into crsfacttemp(denumire,explicatie,cantitate,pretftva,valftva,valtva,; + discountftva,valdiscountftva,valdiscounttva,proc_Tvav,um,cod_um_iso,nrcrt,serie,codmat, ; + codmatc,codmatf,id_jtva_coloana,codbare,id_ctr,numar_contract,grup,id_articol,lot) ; + Select denumire,LEFT(explicatie, 240) as explicatie,Sum(cantitate) As cantitate,vpretftva-vdiscountftva As pretftva,; + Sum(vvaldiminuatftva) As valftva,Sum(vvaldiminuattva) As valtva,; + 0 As discountftva,0 As valdiscountftva,0 As valdiscounttva, proc_Tvav,; + Nvl(um,Space(10)) As um,CAST(cod_um_iso as C(10)) As cod_um_iso,Min(nrcrt) As nrcrt, Min(Nvl(serie,Space(100))) As serie,Nvl(codmat,Space(50)) As codmat, ; + IIF(TYPE(m.lcCursor + '.codmatc') = 'C', Nvl(codmatc,Space(50)), SPACE(50)),Nvl(codmatf,Space(50)) As codmatf,id_jtva_coloana,Nvl(codbare,Space(50)) As codbare,id_ctr,numar_contract,grup,id_articol, Min(Nvl(lot,Space(20))) As lot ; + FROM (lcCursor) Group By 1,2,4,10,11,12,15,16,17,18,19,20,21,22,23 ; + UNION All ; + Select denumire,LEFT(explicatie, 240) as explicatie,1 As cantitate,vpretftva As pretftva,; + 0 As valftva,0 As valtva,vdiscountftva As discountftva,vvaldiscountftva As valdiscountftva,; + vvaldiscounttva As valdiscounttva, proc_Tvav,Nvl(um,Space(10)) As um,CAST(cod_um_iso as C(10)) As cod_um_iso, nrcrt,; + Nvl(serie,Space(100)) As serie,Nvl(codmat,Space(50)) As codmat,IIF(TYPE(m.lcCursor + '.codmatc') = 'C', Nvl(codmatc,Space(50)), SPACE(50)) As codmatc,Nvl(codmatf,Space(50)) As codmatf, ; + id_jtva_coloana,Nvl(codbare,Space(50)) As codbare,id_ctr,numar_contract,grup,id_articol,Nvl(lot,Space(20)) As lot ; + from (lcCursor) Where denumire = Replicate('Z',20) Order By 13 && Into Cursor crsfacttemp + Endif + *!* modificare ROAFACTURARE v 2.0.46 ^ + *!* modificare ROAFACTURARE v 2.0.67 + *!* Endif + *!* modificare ROAFACTURARE v 2.0.67 ^ + + ******************************** + *** Explicatia are 500 de caractere, tip Memo si nu poate fi folosita intr-un select group by + *** Am selectat doar primele 240 caractere apoi completez explicatia din cursorul original + ******************************** + SELECT (lcCursor) + SCAN + SCATTER NAME loRec MEMO + SELECT crsfacttemp + LOCATE FOR denumire = loRec.denumire AND Nvl(codmat,Space(50)) = Nvl(loRec.codmat,Space(50)) AND LEFT(explicatie, 240) = LEFT(loRec.explicatie, 240) + IF FOUND() + REPLACE explicatie WITH ALLTRIM(loRec.explicatie) + ENDIF + ENDSCAN + + Select crsfacttemp + Scan + Scatter Name loArticol Memo + Select crsfacturafinalaval + lcSerie = Nvl(loArticol.serie,'') && modificare ROAFACTURARE v 2.0.46 + lcLot = Nvl(loArticol.lot,'') + If loArticol.denumire <> Replicate('Z',20) + Append Blank + *!* modificare ROAFACTURARE v 2.0.46 + *!* Replace denumire With Alltrim(loArticol.denumire),cantitate With loArticol.cantitate,; + *!* explicatie With Alltrim(Nvl(loArticol.explicatie,[ ])),um With Alltrim(loArticol.um),; + *!* pretftva With loArticol.pretftva,valftva With loArticol.valftva,valtva With loArticol.valtva,; + *!* proc_tva With loArticol.proc_Tvav,serie With Alltrim(loArticol.serie),codmat With Alltrim(NVL(loArticol.codmat,Space(50))) + Replace denumire With Alltrim(loArticol.denumire),cantitate With loArticol.cantitate,; + explicatie With Alltrim(Nvl(loArticol.explicatie,[ ])),um With Alltrim(loArticol.um),cod_um_iso WITH ALLTRIM(loArticol.cod_um_iso),; + id_articol WITH loArticol.id_articol,; + pretftva With loArticol.pretftva,valftva With loArticol.valftva,valtva With loArticol.valtva,; + proc_tva With loArticol.proc_Tvav,codmat With Alltrim(Nvl(loArticol.codmat,Space(50))), ; + codmatc With Alltrim(Nvl(loArticol.codmatc,Space(50))),; + codmatf With Alltrim(Nvl(loArticol.codmatf,Space(50))),id_jtva_coloana With loArticol.id_jtva_coloana,; + id_ctr With loArticol.id_ctr,numar_contract With loArticol.numar_contract + lcSerie = [] + lcLot = [] + Select (tcCursorSursa) + Scan For Alltrim(denumire) = Alltrim(loArticol.denumire) ; + And Alltrim(Nvl(explicatie,[ ])) = Alltrim(Nvl(loArticol.explicatie,[ ])) ; + and Alltrim(codmat) = Alltrim(loArticol.codmat) ; + And Alltrim(codmatf) = Alltrim(loArticol.codmatf) ; + and vpretftva = loArticol.pretftva ; + and Alltrim(um) = Alltrim(loArticol.um) ; + and vdiscountftva = loArticol.discountftva ; + and proc_Tvav = loArticol.proc_Tvav ; + and Nvl(id_ctr,-1) = Nvl(loArticol.id_ctr,-1) ; + and Nvl(numar_contract,'') = Nvl(loArticol.numar_contract,'') + lcSerie = lcSerie + Iif(!Empty(Nvl(serie,'')),[,]+Alltrim(serie),[]) + lcLot = lcLot + Iif(!Empty(Nvl(lot,'')),[,]+Alltrim(lot),[]) + Select crsfactura + Endscan + Select crsfacturafinalaval + lcSerie = Iif(!Empty(lcSerie),Substr(lcSerie,2),Nvl(loArticol.serie,'')) + lcLot = Iif(!Empty(lcLot),Substr(lcLot,2),Nvl(loArticol.lot,'')) + Replace serie With m.lcSerie, lot WITH m.lcLot + *!* modificare ROAFACTURARE v 2.0.46 ^ + Else + loArticol.denumire = [INVOICE] + Endif + If loArticol.discountftva <> 0 + Append Blank + lnProcentDiscount = loArticol.discountftva * 100 / loArticol.pretftva + *!* modificare ROAFACTURARE v 2.0.46 + *!* Replace denumire With Alltrim(Proper(loArticol.denumire))+[ Discount ]+Alltrim(Str(lnProcentDiscount,10,2))+[ %],; + *!* cantitate With loArticol.cantitate,um With Alltrim(loArticol.um),serie With Alltrim(loArticol.serie),; + *!* pretftva With (-1) * loArticol.discountftva,valftva With (-1) * loArticol.valdiscountftva,; + *!* valtva With (-1) * loArticol.valdiscounttva,proc_tva With loArticol.proc_Tvav,; + *!* codmat With Alltrim(NVL(loArticol.codmat,Space(50))) + Replace denumire With Alltrim(Proper(loArticol.denumire))+[ Discount ]+Alltrim(Str(lnProcentDiscount,10,2))+[ %],; + id_articol WITH loArticol.id_articol,; + cantitate With loArticol.cantitate,um With Alltrim(loArticol.um),cod_um_iso WITH ALLTRIM(loArticol.cod_um_iso),lot WITH lcLot, serie With lcSerie,; + pretftva With (-1) * loArticol.discountftva,valftva With (-1) * loArticol.valdiscountftva,; + valtva With (-1) * loArticol.valdiscounttva,proc_tva With loArticol.proc_Tvav,; + codmatc With Alltrim(Nvl(loArticol.codmatc,Space(50))), ; + codmat With Alltrim(Nvl(loArticol.codmat,Space(50))),codmatf With Alltrim(Nvl(loArticol.codmatf,Space(50))),; + id_jtva_coloana With loArticol.id_jtva_coloana,id_ctr With loArticol.id_ctr,numar_contract With loArticol.numar_contract + *!* modificare ROAFACTURARE v 2.0.46 ^ + Endif + Select crsfacttemp + Endscan + + * Completez CODNC8/CODCPV + SELECT crsfacturafinalaval + SCAN + lnIdArticol = id_articol + loCod = GetCodNC8CPV(m.lnIdArticol) + SELECT crsfacturafinalaval + Replace codnc8 WITH loCod.codnc8, codcpv WITH loCod.codcpv + ENDSCAN + + Use In crsfacttemp + +Endproc && prelucreaza_factura_valuta +********************************************************************************************************* +Procedure prelucreaza_aviz_retur + Lparameters tnDiscountEvidentiat + *!* modificare v 2.0.77 + creeaza_facturacrs([crsavizretur2]) + prelucreaza_facturacrs([crsavizretur],[crsavizretur2],0,0,0) + prelucreaza_factura([crsavizretur2],[],[crsfacturafinala2],tnDiscountEvidentiat,0,2) + + If Used('crsavizretur') + Use In crsavizretur + Endif + If Used('crsavizretur2') + Use In crsavizretur2 + Endif + +Endproc && prelucreaza_aviz_retur +********************************************************************************************************* +*!* modificare ROAFACTURARE v 2.0.46 +*!* Function optiuni_format_factura +*!* Private pnOptiune +*!* pnOptiune = 1 +*!* pnButon = 1 +*!* lcTitlu = "LISTARE FACTURA" +*!* lcExplicatie = "Alegeti formatul facturii:" +*!* lcOptiuni = [A4;A5;] +*!* lnNrOptiuni = 2 +*!* llFaraRenuntare = .T. +*!* ofrmopt = Createobject("frm_optiune",lcTitlu,lcExplicatie,lnNrOptiuni,lcOptiuni,llFaraRenuntare) +*!* ofrmopt.Show(1) +*!* Release ofrmopt +*!* Return pnOptiune +*!* Endfunc && optiuni_format_factura +********************************************************************************************************* +Function optiuni_format_listare + Lparameters tnTip && 0 - factura ; 1 - aviz + Private pnOptiune + pnOptiune = 1 + pnButon = 1 + If Empty(tnTip) + lcTitlu = "LISTARE FACTURA" + lcExplicatie = "Alegeti formatul facturii:" + Else + lcTitlu = "LISTARE AVIZ" + lcExplicatie = "Alegeti formatul avizului:" + Endif + lcOptiuni = [A4;A5;] + lnNrOptiuni = 2 + llFaraRenuntare = .T. + ofrmopt = Createobject("frm_optiune",lcTitlu,lcExplicatie,lnNrOptiuni,lcOptiuni,llFaraRenuntare) + ofrmopt.Show(1) + Release ofrmopt + Return pnOptiune +Endfunc && optiuni_format_listare +*!* modificare ROAFACTURARE v 2.0.46 ^ +********************************************************************************************************* +Procedure creeaza_facturafinala + Lparameters tcNumeCursor + If Used(tcNumeCursor) + Use In (tcNumeCursor) + Endif + Create Cursor (tcNumeCursor) (denumire c(100),explicatie M,cantitate N(20,max(gnPCant,4)),pretctva N(20,max(gnPPretV,precizie_max_pret_vz)),valctva N(20,max(gnPc,4)),; + pretftva N(20,max(gnPPretV,precizie_max_pret_vz)),pretftvai N(20,max(gnPPretV,precizie_max_pret_vz)),pretctvai N(20,max(gnPPretV,precizie_max_pret_vz)),proc_disc N(10,4),valftva N(20,max(gnPc,4)),valtva N(20,max(gnPc,4)),; + valftvai N(20,max(gnPc,4)),valctvai N(20,max(gnPc,4)),valdiscount N(20,max(gnPc,4)),; + proc_tva N(20,4),um c(10),cod_um_iso C(10) null,lot C(20) null,serie c(100),codmat c(50),codmatc c(50), codbare c(50),codmatf c(50),; + id_jtva_coloana N(10),expltva c(100),id_jtva_coloana_ex N(10) null,expltva_ex c(100) null,id_ctr N(10) Null,numar_contract c(100) Null, taxcode N(6) null, id_articol N(10) null, codnc8 V(20) null, codcpv V(20) null) +Endproc && creeaza_crsfacturafinala +********************************************************************************************************* +Procedure creeaza_facturacrs + Lparameters tcNumeCursor + If Used(tcNumeCursor) + Use In (tcNumeCursor) + Endif + Create Cursor (tcNumeCursor) (id_c N(20),id_temp N(20),id_articol N(20) null,id_pol N(20) Null,id_gestiune N(20),Cont c(4),um c(10) Null, cod_um_iso c(5) null, ; + id_valuta N(10),gestionabil N(1),tip_valuta N(1),Curs N(20,4),multiplicator N(10),id_jtva_coloana N(20) Null,id_jtva_coloana_ex N(20) Null,codmat c(100),codmatc c(100),codmatf c(100),codbare c(50),; + pret_achizitie N(20,max(gnPPret,4)),denumire c(100),pretftva N(20,max(gnPPretV,precizie_max_pret_vz)),pretctva N(20,max(gnPPretV,precizie_max_pret_vz)),valftva N(20,max(gnPc,4)), valtva N(20,max(gnPc,4)),valctva N(20,max(gnPc,4)),; + cantitate N(20,max(gnPCant,4)),discountftva N(20,max(gnPPretV,4)), discountctva N(20,max(gnPPretV,precizie_max_pret_vz)), valdiscountftva N(20,max(gnPc,4)),valdiscounttva N(20,max(gnPc,4)),; + valdiscountctva N(20,max(gnPc,4)),valdiminuatftva N(20,max(gnPc,4)),valdiminuattva N(20,max(gnPc,4)),valdiminuatctva N(20,max(gnPc,4)),proc_Tvav N(20,4),cu_tva N(1), lot C(20) null, serie c(100) Null,; + vpretftva N(20,max(gnPVal,precizie_max_pret_vz)),vpretctva N(20,max(gnPVal,precizie_max_pret_vz)),vvalftva N(20,max(gnPVal,4)),vvaltva N(20,max(gnPVal,4)),vvalctva N(20,max(gnPVal,4)),; + vdiscountftva N(20,max(gnPVal,4)),vdiscountctva N(20,max(gnPVal,4)),vvaldiscountftva N(20,max(gnPVal,4)),vvaldiscounttva N(20,max(gnPVal,4)),; + vvaldiscountctva N(20,max(gnPVal,4)),vvaldiminuatftva N(20,max(gnPVal,4)),vvaldiminuattva N(20,max(gnPVal,4)),vvaldiminuatctva N(20,max(gnPVal,4)),id_set_fact N(20) Null,explicatie M Null,; + id_part_rez N(10) Null,id_lucrare_rez N(10) Null,pretv_orig N(20,max(gnPPretV,precizie_max_pret_vz)),pretd N(20,max(gnPPretVal,precizie_max_pret_vz)) Null,id_valuta_d N(15) Null,; + id_rata N(20) Null,data_rata d,data_scadenta d,nr_rata N(20),id_ctr N(20) Null,opt_facturare N(3),numar_contract c(100) Null,nume_val c(100),id_rul_aux n(10) null, ; + nume_gestiune c(100) null, cgest c(50) null, taxcode N(6) null, codnc8 V(20) null, codcpv V(20) null) +Endproc && creeaza_facturacrs +********************************************************************************************************* +Procedure creeaza_crsfacttemp + If Used('creeaza_crsfacttemp') + Use In creeaza_crsfacttemp + Endif + Create Cursor crsfacttemp(nrcrt N(10),id_articol N(20) null,denumire c(100),explicatie M Null,codmat c(50),codmatc c(50),codmatf c(50),codbare c(50),um c(10),cod_um_iso C(10) null, lot C(20) null, serie c(100) Null,; + id_ctr N(10) Null,numar_contract c(100) Null,cantitate N(20,max(gnPCant,4)),; + proc_Tvav N(20,4),id_jtva_coloana N(10),id_jtva_coloana_ex N(10) Null,; + pretftva N(20,max(gnPPretV,precizie_max_pret_vz)),pretftvai N(20,max(gnPPretV,precizie_max_pret_vz)),pretctva N(20,max(gnPPretV,precizie_max_pret_vz)),pretctvai N(20,max(gnPPretV,precizie_max_pret_vz)),; + valftva N(20,max(gnPc,4)),valftvai N(20,max(gnPc,4)),valtva N(20,max(gnPc,4)),valctva N(20,max(gnPc,4)),valctvai N(20,max(gnPc,4)),; + proc_disc N(10,4),discountftva N(20,max(gnPPretV,4)),discountctva N(20,max(gnPPretV,precizie_max_pret_vz)),; + valdiscountftva N(20,max(gnPC,4)),valdiscounttva N(20,max(gnPc,4)),valdiscountctva N(20,max(gnPc,4)), grup N(4), taxcode N(6) null, codnc8 V(20) null, codcpv V(20) null) +Endproc && creeaza_crsfacttemp +********************************************************************************************************* +Procedure prelucreaza_facturacrs + Lparameters tcCursorSursa,tcCursorDestinatie,tnProcTvav,tnDiscount,tnDiscountVal + Local lnTotalBaza,lnTotalBazaVal,lnIdTemp + *!* modificare ROAAUTO v 2.0.41 : am adaugat id_articol + + Insert Into (tcCursorDestinatie) (id_articol,id_temp,explicatie,denumire,lot,serie,codmat,codmatc,id_jtva_coloana,id_jtva_coloana_ex,taxcode,codmatf,codbare,pret_achizitie,cantitate,proc_Tvav,um,cod_um_iso,; + cu_tva,pretctva,discountctva,valctva,valdiscountctva,valdiminuatctva,pretftva,; + valftva,valtva,discountftva,valdiscountftva,valdiscounttva,valdiminuatftva,; + valdiminuattva,vpretftva,vvalftva,vvaltva,vdiscountftva,vvaldiscountftva,vvaldiscounttva,; + vvaldiminuatftva,vvaldiminuattva,id_set_fact,gestionabil,id_ctr,numar_contract,id_valuta,tip_valuta,Curs,multiplicator,nume_val,codnc8,codcpv) ; + SELECT CAST(IIF(TYPE(tcCursorSursa+".id_articol")='U',0,id_articol) as N(20)) as id_articol,id_vanzare_det As id_temp,; + explicatie,denumire,lot,serie,Nvl(codmat,Space(50)) As codmat,IIF(TYPE(tcCursorSursa + '.codmatc') = 'C', Nvl(codmatc,Space(50)), SPACE(50)) As codmatc,id_jtva_coloana,id_jtva_coloana_ex,taxcode,; + NVL(codmatf,Space(50)) As codmatf,; + Nvl(codbare,Space(50)) As codbare,Nvl(pret_achizitie,0.000) As pret_achizitie,Nvl(cantitate,1) As cantitate,proc_Tvav,Nvl(um,Space(50)) As um, ; + CAST(IIF(TYPE(tcCursorSursa+".cod_um_iso")='U','',cod_um_iso) as C(5)) as cod_um_iso, ; + pret_cu_tva As cu_tva,; + Iif(pret_cu_tva = 1,Round(Pret,gnPPretV),Round(Pret,gnPPretV)+Round(Round(Pret,gnPPretV)*(proc_Tvav-1),gnPPretV)) As pretctva,; + Iif(pret_cu_tva = 1,Round(discount_unitar,gnPPretV),0.000) As discountctva,; + Iif(pret_cu_tva = 1,Round(Round(Pret,gnPPretV)*Nvl(cantitate,1),gnPc),Round(Round(Pret,gnPPretV)*Nvl(cantitate,1),gnPc)+; + Round(Round(Round(Pret,gnPPretV)*Nvl(cantitate,1),gnPc)*(proc_Tvav-1),gnPc)) As valctva,; + Iif(pret_cu_tva = 1,Round(Round(discount_unitar,gnPPretV)*Nvl(cantitate,1),gnPc),; + ROUND((Round(discount_unitar,gnPPretV)-Round(Round(discount_unitar,gnPPretV)*(proc_Tvav-1),gnPPretV))*Nvl(cantitate,1),gnPc)) As valdiscountctva,; + IIF(pret_cu_tva = 1,; + ROUND((Round(Pret,gnPPretV)-Round(discount_unitar,gnPPretV))*Nvl(cantitate,1),gnPc),; + ROUND((Round(Pret,gnPPretV)+Round(Round(Pret,gnPPretV)*(proc_Tvav-1),gnPPretV)-Round(discount_unitar,gnPPretV)-Round(Round(discount_unitar,gnPPretV)*(proc_Tvav-1),gnPPretV))*Nvl(cantitate,1),gnPc)) As valdiminuatctva,; + IIF(pret_cu_tva = 0,; + Round(Pret,gnPPretV),; + Round(Round(Pret,gnPPretV)/proc_Tvav,gnPPretV)) As pretftva,; + IIF(pret_cu_tva = 0,; + Round(Round(Pret,gnPPretV)*Nvl(cantitate,1),gnPc),; + ROUND(Round(Pret,gnPPretV)*Nvl(cantitate,1),gnPc) - ; + Round(Round(Round(Pret,gnPPretV)*Nvl(cantitate,1),gnPc)*(proc_Tvav-1)/proc_Tvav, gnPc)) As valftva,; + IIF(pret_cu_tva = 0,; + Round(Round(Round(Pret,gnPPretV)*Nvl(cantitate,1),gnPc)*(proc_Tvav-1),gnPc),; + Round(Round(Round(Pret,gnPPretV)*Nvl(cantitate,1),gnPc)*(proc_Tvav-1)/proc_Tvav, gnPc)) As valtva,; + IIF(pret_cu_tva = 0,; + Round(discount_unitar,gnPPretV),; + Round(Round(discount_unitar,gnPPretV)/proc_Tvav,gnPPretV)) As discountftva,; + IIF(pret_cu_tva = 0,; + Round(Round(discount_unitar,gnPPretV)*Nvl(cantitate,1),gnPc),; + ROUND(Round(discount_unitar,gnPPretV)*Nvl(cantitate,1),gnPc) - ; + Round(Round(Round(discount_unitar,gnPPretV)*Nvl(cantitate,1),gnPc)*(proc_Tvav-1)/proc_Tvav, gnPc)) As valdiscountftva,; + IIF(pret_cu_tva = 0,; + ROUND(Round(Round(discount_unitar,gnPPretV)*Nvl(cantitate,1),gnPc)*(proc_Tvav-1),gnPc),; + Round(Round(Round(discount_unitar,gnPPretV)*Nvl(cantitate,1),gnPc)*(proc_Tvav-1)/proc_Tvav, gnPc)) As valdiscounttva,; + IIF(pret_cu_tva = 0,; + Round((Round(Pret,gnPPretV)-Round(discount_unitar,gnPPretV))*Nvl(cantitate,1),gnPc),; + ROUND((Round(Pret,gnPPretV)-Round(discount_unitar,gnPPretV))*Nvl(cantitate,1),gnPc) - ; + Round(Round((Round(Pret,gnPPretV)-Round(discount_unitar,gnPPretV))*Nvl(cantitate,1),gnPc)*(proc_Tvav-1)/proc_Tvav, gnPc)) As valdiminuatftva,; + IIF(pret_cu_tva = 0,; + Round(Round((Round(Pret,gnPPretV)-Round(discount_unitar,gnPPretV))*Nvl(cantitate,1),gnPc)*(proc_Tvav-1),gnPc),; + Round(Round((Round(Pret,gnPPretV)-Round(discount_unitar,gnPPretV))*Nvl(cantitate,1),gnPc)*(proc_Tvav-1)/proc_Tvav, gnPc)) As valdiminuattva, ; + IIF(pret_cu_tva = 0,; + Round(Pret_val,gnPVal),; + Round(Round(Pret_val,gnPVal)/proc_Tvav,gnPVal)) As vpretftva,; + IIF(pret_cu_tva = 0,; + Round(Round(Pret_val,gnPVal)*Nvl(cantitate,1),gnPVal),; + ROUND(Round(Pret_val,gnPVal)*Nvl(cantitate,1),gnPVal) - ; + Round(Round(Round(Pret_val,gnPVal)*Nvl(cantitate,1),gnPVal)*(proc_Tvav-1)/proc_Tvav, gnPVal)) As vvalftva,; + IIF(pret_cu_tva = 0,; + Round(Round(Round(Pret_val,gnPVal)*Nvl(cantitate,1),gnPVal)*(proc_Tvav-1),gnPVal),; + Round(Round(Round(Pret_val,gnPVal)*Nvl(cantitate,1),gnPVal)*(proc_Tvav-1)/proc_Tvav, gnPVal)) As vvaltva,; + IIF(pret_cu_tva = 0,; + Round(discount_unitar_val,gnPVal),; + Round(Round(discount_unitar_val,gnPVal)/proc_Tvav,gnPVal)) As vdiscountftva,; + IIF(pret_cu_tva = 0,; + Round(Round(discount_unitar_val,gnPVal)*Nvl(cantitate,1),gnPVal),; + ROUND(Round(discount_unitar_val,gnPVal)*Nvl(cantitate,1),gnPVal) - ; + Round(Round(Round(discount_unitar_val,gnPVal)*Nvl(cantitate,1),gnPVal)*(proc_Tvav-1)/proc_Tvav, gnPVal)) As vvaldiscountftva,; + IIF(pret_cu_tva = 0,; + ROUND(Round(Round(discount_unitar_val,gnPVal)*Nvl(cantitate,1),gnPVal)*(proc_Tvav-1),gnPVal),; + Round(Round(Round(discount_unitar_val,gnPVal)*Nvl(cantitate,1),gnPVal)*(proc_Tvav-1)/proc_Tvav, gnPVal)) As vvaldiscounttva,; + IIF(pret_cu_tva = 0,; + Round((Round(Pret_val,gnPVal)-Round(discount_unitar_val,gnPVal))*Nvl(cantitate,1),gnPVal),; + ROUND((Round(Pret_val,gnPVal)-Round(discount_unitar_val,gnPVal))*Nvl(cantitate,1),gnPVal) - ; + Round(Round((Round(Pret_val,gnPVal)-Round(discount_unitar_val,gnPVal))*Nvl(cantitate,1), gnPVal)*(proc_Tvav-1)/proc_Tvav, gnPVal)) As vvaldiminuatftva,; + IIF(pret_cu_tva = 0,; + Round(Round((Round(Pret_val,gnPVal)-Round(discount_unitar_val,gnPVal))*Nvl(cantitate,1),gnPVal)*(proc_Tvav-1),gnPVal),; + Round(Round((Round(Pret_val,gnPVal)-Round(discount_unitar_val,gnPVal))*Nvl(cantitate,1), gnPVal)*(proc_Tvav-1)/proc_Tvav, gnPVal)) As vvaldiminuattva, ; + Nvl(id_vanzare_set,00000000000000000) As id_set_fact,; + Iif(Nvl(id_gestiune,0)<>0,1,0) As gestionabil, ; + id_ctr,numar_contract,id_valuta,tip_valuta,Nvl(Curs,1.000) As Curs,NVL(multiplicator,1) as multiplicator,nume_val, ; + CAST(IIF(TYPE(tcCursorSursa+".codnc8")='U','',codnc8) as V(20)) as codnc8, ; + CAST(IIF(TYPE(tcCursorSursa+".codcpv")='U','',codcpv) as V(20)) as codcpv ; + From (tcCursorSursa) + If tnDiscount<> 0 + Select (tcCursorDestinatie) + Calculate Sum(valdiminuatftva),Sum(vvaldiminuatftva),Max(id_temp) To lnTotalBaza,lnTotalBazaVal,lnIdTemp + Select (tcCursorDestinatie) + Append Blank + Replace denumire With Replicate('Z',20),cantitate With 1,; + pretftva With lnTotalBaza,discountftva With tnDiscount,valdiscountftva With tnDiscount,; + valdiscounttva With Round(tnDiscount * (tnProcTvav - 1),gnPc),; + vpretftva With lnTotalBazaVal,vdiscountftva With tnDiscountVal,vvaldiscountftva With tnDiscountVal,; + vvaldiscounttva With Round(tnDiscountVal * (tnProcTvav - 1),gnPVal),; + proc_Tvav With tnProcTvav,id_temp With lnIdTemp+1 + Endif +Endproc && prelucreaza_facturacrs +********************************************************************************************************* +*!* modificare v 2.0.67 +*!* Procedure creeaza_crsfactura_rate +*!* If Used('crsfactura') +*!* Use in crsfactura +*!* EndIf +*!* Create Cursor crsfactura(id_rata N(20),id_temp N(20),den_rata c(100),data_rata d, data_scadenta d,um c(10),denumire c(100),codmat c(100),codmatf c(100),codbare c(50),; +*!* explicatie c(240),nr_rata N(20), valftva N(20,4), valtva N(20,4), valctva N(20,4),serie c(100),Curs N(20,4),id_jtva_coloana N(20),; +*!* proc_tvav N(20,4),cu_tva N(1),pretftva N(20,4),pretctva N(20,4),tip_valuta N(1),vpretftva N(20,4),vpretctva N(20,4),discountftva N(20,4)) +*!* Endproc && creeaza_crsfactura_rate +*!* modificare v 2.0.67 ^ +********************************************************************************************************* +Procedure creeaza_backup_cursoare_facturare +*!* modificare 03.06.2013 +*!* *!* modificare v 2.0.56 +*!* *!* Dimension laStructura(1,18),laStructura2(1,18) +*!* sterge_backup_cursoare_facturare() +*!* copiaza_structura_cursor([crsfactura],[bckpfactura]) +*!* *!* Afields(laStructura,[crsfactura]) +*!* *!* Create Cursor bckpfactura From Array laStructura +*!* *!* modificare v 2.0.56 ^ +*!* Select * From crsfactura Into Cursor bckpfactura +*!* *!* If Used('crsfacturaset') +*!* *!* Afields(laStructura2,[crsfacturaset]) +*!* *!* Create Cursor bckpfacturaset From Array laStructura2 +*!* *!* Select * From crsfacturaset Into Cursor bckpfacturaset +*!* *!* Endif +*!* Release laStructura,laStructura2 + creeaza_backup_cursoare([crsfactura]) && in oproceduri_comune.prg +*!* modificare 03.06.2013 ^ +Endproc && creeaza_backup_cursoare_facturare +********************************************************************************************************* +Procedure repune_backup_cursoare_facturare + *!* modificare ROAFACTURARE v 2.0.46 + *!* If Used('bckpfactura') + *!* Select * From bckpfactura Into Cursor crsfactura Readwrite + *!* Use In bckpfactura + *!* Endif + If Used('crsfacturaset') + Use In crsfacturaset + Endif +*!* modificare 03.06.2013 +*!* If Used('bckpfactura') +*!* Select crsfactura +*!* lnRecno = Recno() +*!* Select * From bckpfactura Into Cursor crsfactura Readwrite +*!* Use In bckpfactura +*!* Select crsfactura +*!* If Reccount('crsfactura') > 0 +*!* Go Min(lnRecno,Reccount('crsfactura')) +*!* Else +*!* Go Top +*!* Endif +*!* Endif +*!* *!* modificare ROAFACTURARE v 2.0.46 ^ +*!* *!* If Used('bckpfacturaset') +*!* *!* Select * From bckpfacturaset Into Cursor crsfacturaset Readwrite +*!* *!* Use In bckpfacturaset +*!* *!* Endif + repune_backup_cursoare([crsfactura]) && in oproceduri_comune.prg +*!* modificare 03.06.2013 ^ +Endproc && repune_backup_cursoare_facturare +********************************************************************************************************* +Procedure sterge_backup_cursoare_facturare +*!* modificare 03.06.2013 +*!* If Used('bckpfactura') +*!* Use In bckpfactura +*!* Endif +*!* *!* If Used('bckpfacturaset') +*!* *!* Use In bckpfacturaset +*!* *!* Endif + sterge_backup_cursoare([crsfactura]) +*!* modificare 03.06.2013 ^ +Endproc && sterge_backup_cursoare_facturare +********************************************************************************************************* +********************************************************************************************************* +Procedure alege_banci_facturare + Local ofrmbanca + lcSql = [select 0 as ales,Nvl(b.banca,b.denumire) as banca,b.cont_banca as cont,b.reg_comert as swift,] + ; + [c.adresa from coresp_tip_part a ] + ; + [join nom_parteneri b on a.id_part = b.id_part and b.sters = 0 and b.inactiv = 0 ] + ; + [left join vadrese_parteneri c on a.id_part = c.id_part and c.principala = 1 ] + ; + [where a.id_tip_part = ] + Iif(poDate.in_valuta=0,[24],[25]) + ; + [ and b.cont_banca is not null order by 2] + lnSucces = goExecutor.oExecute(lcSql,[crsbanci]) + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare,16,"Eroare") + Return + Endif + gnButon = 1 + If Reccount('crsbanci')>1 + Select crsbanci + Go Top + ofrmbanca = Createobject('frm_alege_banca') + ofrmbanca.Show(1) + Release ofrmbanca + Endif + If gnButon = 1 + Select banca,Cont,swift,adresa From crsbanci Where ales = 1 Into Array laArray + Dimension laArray(3,4) + poFirma.banca = Iif(!Empty(laArray(1,1)),laArray(1,1),Null) + poFirma.cont_banca = Iif(!Empty(laArray(1,2)),laArray(1,2),Null) + poFirma.b_swift = Iif(!Empty(laArray(1,3)),laArray(1,3),Null) + poFirma.b_adresa = Iif(!Empty(laArray(1,4)),laArray(1,4),Null) + poFirma.banca2 = Iif(!Empty(laArray(2,1)),laArray(2,1),Null) + poFirma.cont_banca2 = Iif(!Empty(laArray(2,2)),laArray(2,2),Null) + poFirma.b_swift2 = Iif(!Empty(laArray(2,3)),laArray(2,3),Null) + poFirma.b_adresa2 = Iif(!Empty(laArray(2,4)),laArray(2,4),Null) + poFirma.banca3 = Iif(!Empty(laArray(3,1)),laArray(3,1),Null) + poFirma.cont_banca3 = Iif(!Empty(laArray(3,2)),laArray(3,2),Null) + poFirma.b_swift3 = Iif(!Empty(laArray(3,3)),laArray(3,3),Null) + poFirma.b_adresa3 = Iif(!Empty(laArray(3,4)),laArray(3,4),Null) + Endif + Use In crsbanci +Endproc && alege_banci_facturare +********************************************************************************************************* +Procedure alege_optiuni_listare_facturare + Local loFrmOptiuniList,lcCursorSerii,lnVizibile + + lnVizibile = 5 + If Used('crsfactura') + lcCursorSerii = [crsverserartfact] + Select Recno() From crsfactura Where !Empty(Nvl(serie,'')) OR !EMPTY(NVL(lot, '')) Into Cursor (lcCursorSerii) + If Used(lcCursorSerii) + If Reccount(lcCursorSerii)=0 + poDate.listare_serii = 0 + lnVizibile = lnVizibile - 1 + Endif + Use In (lcCursorSerii) + Endif + Endif + + If !Used('crsfacturaset') + poDate.listare_componenta_set = 0 + poDate.listare_recapitulatie = 0 + lnVizibile = lnVizibile - 2 + Else + If poDate.eProforma = 1 + poDate.listare_recapitulatie = 0 + lnVizibile = lnVizibile - 1 + Endif + Endif + + *!* modificare ROAFACTURARE v 2.0.67 + *!* If !(Nvl(gnListaLivrare,0) = 1 And poDate.eProforma = 0 And !Inlist(pnTipFacturare,1,2) And !InList(poDate.tip,4,7)) + If !(Nvl(gnListaLivrare,0) = 1 And poDate.eProforma = 0 And !Inlist(poDate.tip,4,7)) + *!* modificare ROAFACTURARE v 2.0.67 ^ + poDate.listare_lista_livrare = 0 + poDate.listare_componenta_set_ll = 0 + lnVizibile = lnVizibile - 2 + Else + *!* modificare ROAFACTURARE v 2.0.61 : daca nu exista articole gestionabile,nu se mai listeaza + If Used('crsfactura') + lcCursorGest = [crsvergestartfact] + Select Recno() From crsfactura Where gestionabil = 1 Into Cursor (lcCursorGest) + If Used(lcCursorGest) + If Reccount(lcCursorGest)=0 + poDate.listare_lista_livrare = 0 + lnVizibile = lnVizibile - 1 + Endif + Use In (lcCursorGest) + Endif + Endif + *!* If !Used('crsfacturaset') + If !Used('crsfacturaset') Or poDate.listare_lista_livrare = 0 + *!* modificare ROAFACTURARE v 2.0.61 ^ + poDate.listare_componenta_set_ll = 0 + lnVizibile = lnVizibile - 1 + Endif + Endif + + If lnVizibile <> 0 + loFrmOptiuniList = Createobject('frm_alege_optlistfact') + loFrmOptiuniList.Show(1) + Endif + Release loFrmOptiuniList,lcCursorSerii,lnVizibile +Endproc && alege_optiuni_listare_facturare +********************************************************************************************************* +Procedure completeaza_explicatie_tva + Lparameters tcCursor + Local lnNrCote,lnNrCote0,lcListaId,lcListaIdEx,lcSql,lnSucces + + Use In (SELECT('crsproctvav')) + + IF TYPE(tcCursor + '.id_jtva_coloana_ex') = 'N' + Select Distinct id_jtva_coloana,id_jtva_coloana_ex, proc_tva From (tcCursor) Into Cursor crsproctvav + else + Select Distinct id_jtva_coloana, 0 as id_jtva_coloana_ex, proc_tva From (tcCursor) Into Cursor crsproctvav + ENDIF + If Reccount('crsproctvav')>0 + lnNrCote = Reccount('crsproctvav') + lnNrCote0 = 0 + lcListaId = [] + lcListaIdEx = [-9999] + Select crsproctvav + Scan For proc_tva = 1 And Nvl(id_jtva_coloana,-1)<>-1 + lcListaId = lcListaId + [,] + Alltrim(Str(id_jtva_coloana)) + IF !EMPTY(NVL(id_jtva_coloana_ex,0)) + lcListaIdEx = lcListaIdEx + [,] + Alltrim(Str(id_jtva_coloana_ex)) + ENDIF + lnNrCote0 = lnNrCote0 + 1 + ENDSCAN + lcListaId = IIF(!EMPTY(m.lcListaId), Substr(lcListaId,2), '') + *lcListaIdEx = IIF(!EMPTY(m.lcListaIdEx), Substr(lcListaIdEx,2), '') + + If lnNrCote0 > 0 + *!* modificare ROAFACTURARE 2.0.80 : am adaugat NVL(explicatie,denumire) in loc de denumire + TEXT TO lcSql TEXTMERGE noshow + SELECT j.id_jtva_coloana, jex.id_jtva_coloana_ex, NVL(jex.denumire, j.denumire) as denumire from + (select id_jtva_coloana,NVL(explicatie,denumire) as denumire from jtva_coloane where id_jtva_coloana in (<>)) j left join + (select id_jtva_coloana, id as id_jtva_coloana_ex, explicatie as denumire from jtva_coloane_explicatii where id in (<>)) jex on jex.id_jtva_coloana = j.id_jtva_coloana + ENDTEXT + lnSucces = goExecutor.oExecute(lcSql,[crsexpl]) + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare,16,"Eroare") + Else + If Reccount('crsexpl')=1 And lnNrCote = lnNrCote0 + Select crsexpl + poDate.explicatie_tva = Alltrim(denumire) + ENDIF + + Select crsexpl + Scan + lnIdJtva = NVL(id_jtva_coloana,0) + lnIdJtvaEx = NVL(id_jtva_coloana_ex,0) + lcDenumire = Alltrim(denumire) + Select (tcCursor) + IF TYPE(tcCursor + '.id_jtva_coloana_ex') = 'N' AND !EMPTY(m.lnIdJtvaEx) + Replace expltva With m.lcDenumire For NVL(id_jtva_coloana_ex,0) = m.lnIdJtvaEx + ELSE + Replace expltva With m.lcDenumire For NVL(id_jtva_coloana,0) = m.lnIdJtva + ENDIF + Select crsexpl + Endscan + + Use In crsexpl + Endif + Endif + Endif + + If Used('crsproctvav') + Use In crsproctvav + Endif +Endproc && completeaza_explicatie_tva +********************************************************************************************************* +Procedure completeaza_explicatie_contract + Lparameters tcCursor + Local lnPozI,lnPozF,lnIdCtr,lnIdCtrPrec,lnDimArray,lnIndex,lnIndexMax,lcNrContract,lnNrInreg + lnDimArray = 20 + Dimension laContracte[lnDimArray,3] && 1 - id_ctr; 2 - numar si data contract; 3 - pozitiile din factura coresp.ctr. + lnIndexMax = 1 + lnIdCtrPrec = Null + lcNrContract = [] + lnNrInreg = 0 + lnIndex = 1 + Select (tcCursor) + Scan For cantitate <> 0 + lnIdCtr = id_ctr + lnNrInreg = lnNrInreg+1 + Do Case + Case Isnull(lnIdCtrPrec) And Isnull(lnIdCtr) + *!* nimic + Case Nvl(lnIdCtr,-1) = Nvl(lnIdCtrPrec,-1) + lnPozF = lnNrInreg && Recno() + Otherwise + If !Isnull(lnIdCtrPrec) + lnIndex = Ascan(laContracte,lnIdCtrPrec,1,lnIndexMax*3,1,8) + If lnIndex = 0 + lnIndex = lnIndexMax + lnIndexMax = lnIndexMax + 1 + laContracte[lnIndex,1] = lnIdCtrPrec + laContracte[lnIndex,2] = lcNrContract + laContracte[lnIndex,3] = [] + Endif + If lnPozI = lnPozF + laContracte[lnIndex,3] = laContracte[lnIndex,3] + Alltrim(Str(lnPozI)) + [,] + Else + laContracte[lnIndex,3] = laContracte[lnIndex,3] + Alltrim(Str(lnPozI)) + [-] + Alltrim(Str(lnPozF)) + [,] + Endif + Endif + If !Isnull(lnIdCtr) + lnPozI = lnNrInreg && Recno() + lnPozF = lnNrInreg && Recno() + Else + lnPozI = 0 + lnPozF = 0 + Endif + Endcase + lnIdCtrPrec = lnIdCtr + lcNrContract = Alltrim(numar_contract) + Endscan + If !Isnull(lnIdCtrPrec) + lnIndex = Ascan(laContracte,lnIdCtrPrec,1,lnIndexMax*3,1,8) + If lnIndex = 0 + lnIndex = lnIndexMax + laContracte[lnIndex,1] = lnIdCtrPrec + laContracte[lnIndex,2] = lcNrContract + laContracte[lnIndex,3] = [] + Endif + If lnPozI = lnPozF + laContracte[lnIndex,3] = laContracte[lnIndex,3] + Alltrim(Str(lnPozI)) + [,] + Else + laContracte[lnIndex,3] = laContracte[lnIndex,3] + Alltrim(Str(lnPozI)) + [-] + Alltrim(Str(lnPozF)) + [,] + Endif + Endif + + *!* modificare ROAFACTURARE v 2.0.77 + && 1-3 : conditia !Empty(Nvl(laContracte[lnIndex,2],[])) a fost adaugata pentru ca daca + && pe contract nu e stipulat sa apara textul aditional, atunci pe factura nu aparea nr. contractului, ci doar + && "Conform contractului nr. " + pcExplicatieContract = [] + If lnIndexMax = 1 + If !Empty(Nvl(laContracte[lnIndex,2],[])) && 1 + pcExplicatieContract = [Conform contractului nr. ] + laContracte[lnIndex,2] + Endif && 2 + Else + For lnIndex = 1 To lnIndexMax + If !Empty(laContracte[lnIndex,1]) And !Empty(Nvl(laContracte[lnIndex,2],[])) && 3 + pcExplicatieContract = pcExplicatieContract + [;] + Substr(laContracte[lnIndex,3],1,Len(laContracte[lnIndex,3])-1) + [ cf. contractului nr. ] + laContracte[lnIndex,2] + Endif + Endfor + pcExplicatieContract = Substr(pcExplicatieContract,2) + Endif + Release lnPozI,lnPozF,lnIdCtr, lnIdCtrPrec, lnDimArray,lnIndex,lcNrContract,lnIndexMax +Endproc && completeaza_explicatie_contract +********************************************************************************************************* diff --git a/COMUN/programe/ofacturare_stoc.prg b/COMUN/programe/ofacturare_stoc.prg new file mode 100644 index 0000000..4823c70 --- /dev/null +++ b/COMUN/programe/ofacturare_stoc.prg @@ -0,0 +1,1140 @@ +*************************************************************************************************************** +**** Proceduri: +**** initializeaza_vanzare_din_stoc +**** listeaza_ofacturare_stoc +**** relisteaza_ofacturare_stoc +**** Functii: +**** oscrie_vanzare_din_stoc +*************************************************************************************************************** +*!* 10.07.2009 +*!* marius.mutu +*!* cast(nvl(id_valuta,0) as N(5)) IN LOC DE nvl(id_valuta,0) - apareau **** daca primul id_valuta/id_valutad era NULL + + +*!* 15.05.2018 +*!* marius.mutu +*!* initializeaza_vanzare_din_stoc + id_set 271 vanzare produse pret achizitie + +*!* 29.06.2018 +*!* marius.mutu +*!* initializeaza_vanzare_din_stoc + id_set 272 vanzare produse valuta pret achizitie +*!* initializeaza_vanzare_din_stoc + parametru toActAnterior - pentru lansarea din modificare_articole_gestiune + +*!* 12.11.2019 +*!* marius.mutu +*!* initializeaza_vanzare_din_stoc + IdSet2TipFacturare + +*!* 03.05.2022 +*!* oscrie_vanzare_din_stoc - completeaza pack_facturare.adauga_articol_factura_stoc(taxcode) + +**************************************** INCEPUT: initializeaza_vanzare_din_stoc ****************************** +Procedure initializeaza_vanzare_din_stoc +Lparameters tnIdSet, toActAnterior +LOCAL lnTip +If glLunaInchisa + amessagebox("Nu puteti emite documente, deoarece aceasta luna este nchisa!",0+48,"Luna nchisa") + Return +Endif +Dimension taValori[5,4] +Private poDate && ,pnTipFacturare *!* modificare v ROAFACTURARE 2.0.67 +lnTip = IdSet2TipFacturare(m.tnIdSet) +poDate = CREATEOBJECT("oDateFactura",tnIdSet,lnTip) +*!* modificare v 2.0.67 +*!* pnTipFacturare = 0 +*!* modificare v 2.0.67 ^ +If gcNumeProgram = [ROAFACTURARE] + selecteaza_gestiuni() +Endif + +taValori[1,1]="poAct.dataireg" +taValori[1,2]= Dtoc(poDate.dataireg) +taValori[1,3]= .T. + +taValori[2,1]="poAct.dataact" +taValori[2,2]= Dtoc(poDate.dataact) +taValori[2,3]= .T. + +taValori[3,1]="poAct.datascad" +taValori[3,2]= Dtoc(poDate.datascad) +taValori[3,4]= Iif(gnScadentaAutomata=0,.F.,.T.) + +taValori[4,1]="poAct.id_fdoc" +taValori[4,2]=Alltrim(Str(Nvl(poDate.id_fdoc,0))) +taValori[4,4]= !Empty(Nvl(poDate.id_fdoc,0)) + +taValori[5,1]="poAct.fdoc" +taValori[5,2]= Alltrim(poDate.fdoc) +taValori[5,4]= !Empty(Nvl(poDate.fdoc,[])) + +lnRaspuns = 6 +Do While lnRaspuns = 6 + +*!* taValori[6,1]="poAct.nract" +*!* taValori[6,2]=Alltrim(Str(poDate.nract)) +*!* taValori[6,3]= !Empty(poDate.nract) + + If Inlist(tnIdSet,223,225,226,227,272) + Dimension taValori[6,4] + taValori[6,1]="poAct.v8" + taValori[6,2]= Dtoc(poDate.zi_curs) + taValori[6,4]= .F. + + poDate.in_valuta = 1 + Endif + + lnSucces=lans(tnIdSet,.F.,.T.,@taValori, .F., toActAnterior) +*!* If lnSucces = 2 +*!* Do dezaloca_numar_fact In oserii_numere.prg +*!* Endif + + lnRaspuns = amessagebox("Doriti sa continuati cu operatii de acest fel?",4+32,"Confirmare") + poDate.Reset(7-lnRaspuns) +Enddo +*!* modificare ROAGEST v 2.0.6 +*!* If Used('nom_gestiuni') +*!* Use In nom_gestiuni +*!* Endif +*!* modificare ROAGEST v 2.0.6 ^ +Release poDate && ,pnTipFacturare *!* modificare v 2.0.67 +Endproc +**************************************** SFARSIT: initializeaza_vanzare_din_stoc ****************************** +******************************************** INCEPUT: oscrie_vanzare_din_stoc ********************************* +*!* - facturarea din gestiuni; +*!* - intrare din gestiune valorica mf la pv - aviz expeditie +Function oscrie_vanzare_din_stoc +Lparameters toSet +*!* v 2.0.18 roagest +*!* in vanzari_detalii scriu pretul cu tva daca am marfa la pret de vanzare, daca nu scriu pretul de vanzare fara tva +*!* tip = -6, id_set = 236 intrare din gestiune valorica marfa la pv - aviz expeditie +*!* tip = -6, id_set = 240 intrare din gestiune valorica (cantitativ) marfa la pv - aviz expeditie +Local lnPretCuTva, lnSucces, llSucces, lcSql +lnPretCuTva = Iif(INLIST(gnTipGest , 6,7), 1, 0) +*!* v 2.0.18 roagest ^ +If Used('crsvanztemp') + Use In crsvanztemp +Endif +If Used('crsfactura') + Use In crsfactura +Endif + +poDate.nract = poAct.nract +poDate.serie_act = poAct.serie_act + +*!* modificare ROAFACTURARE v 2.0.68 +*!* Create Cursor crsfactura(id_temp N(15),um c(10), denumire c(100), explicatie c(240), pretftva N(20,4), pretctva N(20,4),; +*!* valftva N(20,4), valtva N(20,4), valctva N(20,4),; +*!* cantitate N(20,4),discountftva N(20,4), discountctva N(20,4),valdiscountftva N(20,4),valdiscounttva N(20,4),; +*!* valdiscountctva N(20,4),id_jtva_coloana N(10),; +*!* valdiminuatftva N(20,4),valdiminuattva N(20,4), valdiminuatctva N(20,4),proc_tvav N(20,4),serie c(100),; +*!* codmat c(50), codmatf c(50), codbare c(50),cu_tva N(1),; +*!* vpretftva N(20,4),vvalftva N(20,4),vvaltva N(20,4),vdiscountftva N(20,4),vvaldiscountftva N(20,4),vvaldiscounttva N(20,4),; +*!* vvaldiminuatftva N(20,4),vvaldiminuattva N(20,4),vvaldiminuatctva N(20,4),gestionabil N(1)) +creeaza_facturacrs([crsfactura]) +*!* modificare ROAFACTURARE v 2.0.68 ^ + +*!* modificare ROAFACTURARE v 2.0.56 : am adaugat pretd, id_valutad +*!* modificare ROAFACTURARE v 2.0.90 : am adaugat multiplicator +Create Cursor crsvanztemp(id_articol N(20),Pret N(20,max(gnPPretV,4)),proc_tvav N(7,3),id_jtva_coloana N(10),cantitate N(20,max(gnPCant,4)),discount_unitar N(20,max(gnPPretV,4)),; + id_gestiune N(20),Cont c(4),pret_cu_tva N(1),serie c(100),id_valuta N(10),codmat c(50),Curs N(20,max(gnPCurs,6)),multiplicator N(10),pret_achizitie N(20,max(gnPPret,4)),; + pretd N(20,max(gnPPretVal,4)),id_valuta_d N(10),id_rul_aux N(10) Null,taxcode N(6) null,lot C(20) null) +*!* modificare ROAGEST v 2.0.142 +completeaza_facturacrs([crsfactura]) +*!* *!* v 2.0.18 roagest - am calculat total cu tva, total tva, total fara tva = diferenta, adaos +*!* If !INLIST(gnTipGest,6,7) +*!* Insert Into crsfactura (id_temp,denumire,serie,cantitate,cu_tva,pretftva,pretctva,; +*!* valftva,valtva,valctva,discountftva,discountctva,valdiscountftva,; +*!* valdiscounttva, valdiscountctva, valdiminuatftva, valdiminuattva, valdiminuatctva, proc_tvav,id_jtva_coloana,um,codmat,codbare,; +*!* vpretftva,vvalftva,vvaltva,vdiscountftva,vvaldiscountftva,vvaldiscounttva,; +*!* vvaldiminuatftva,vvaldiminuattva,vvaldiminuatctva,gestionabil) ; +*!* Select Recno() As id_temp,denumire, Nvl(serie,Space(100)) As serie, cante As cantitate,m.lnPretCuTva As cu_tva,; +*!* Round(pretv,gnPc) As pretftva,; +*!* Round(pretv,gnPc) + Round(Round(pretv,gnPc) * (proc_tvav-1),gnPc) As pretctva,; +*!* Round(Round(pretv,gnPc)*cante,gnPc) As valftva,; +*!* ROUND(Round(pretv*cante,gnPc)*(proc_tvav-1),gnPc) As valtva, ; +*!* Round(Round(pretv,gnPc)*cante,gnPc) + Round(Round(pretv*cante,gnPc)*(proc_tvav-1),gnPc) As valctva, ; +*!* ROUND(discunitar,gnPc) As discountftva,; +*!* ROUND(discunitar,gnPc)+Round(Round(discunitar,gnPc)*(proc_tvav-1),gnPc) As discountctva,; +*!* Round(Round(discunitar,gnPc)*cante,gnPc) As valdiscountftva, ; +*!* ROUND(Round(discunitar*cante,gnPc)*(proc_tvav-1),gnPc) As valdiscounttva, ; +*!* Round(Round(discunitar,gnPc)*cante,gnPc) + Round(Round(discunitar*cante,gnPc)*(proc_tvav-1),gnPc) As valdiscountctva,; +*!* Round(Round(pretv-discunitar,gnPc)*cante,gnPc) As valdiminuatftva,; +*!* ROUND(Round((pretv-discunitar)*cante,gnPc)*(proc_tvav-1),gnPc) As valdiminuattva,; +*!* ROUND(Round(Round(pretv-discunitar,gnPc)*cante,gnPc)*proc_tvav,gnPc) As valdiminuatctva,; +*!* proc_tvav,id_jtva_coloana, Nvl(um,Space(50)) As um, Nvl(codmat,Space(50)) As codmat, Nvl(codbare,Space(50)) As codbare,; +*!* Round(pretvval,gnPVal) As vpretftva,; +*!* ROUND(Round(pretvval,gnPVal)*cante,gnPVal) As vvalftva,; +*!* ROUND(Round(Round(pretvval,gnPVal)*cante,gnPVal)*(proc_tvav-1),gnPVal) As vvaltva,; +*!* 0 As vdiscountftva,0 As vvaldiscountftva,0 As vvaldiscounttva,; +*!* Round(Round(pretvval-0,gnPc)*cante,gnPc) As vvaldiminuatftva,; +*!* ROUND(Round((pretvval-0)*cante,gnPc)*(proc_tvav-1),gnPc) As vvaldiminuattva,; +*!* ROUND(Round(Round(pretvval-0,gnPc)*cante,gnPc)*proc_tvav,gnPc) As vvaldiminuatctva,; +*!* 1 As gestionabil From rul_temp Where cante <> 0 +*!* Else +*!* Insert Into crsfactura (id_temp,denumire,serie,cantitate,cu_tva,pretftva,pretctva,; +*!* valftva,valtva,valctva,discountftva,discountctva,valdiscountftva,; +*!* valdiscounttva, valdiscountctva, valdiminuatftva, valdiminuattva, valdiminuatctva, proc_tvav,id_jtva_coloana,um,codmat,codbare,; +*!* vpretftva,vvalftva,vvaltva,vdiscountftva,vvaldiscountftva,vvaldiscounttva,; +*!* vvaldiminuatftva,vvaldiminuattva,vvaldiminuatctva,gestionabil) ; +*!* Select Recno() As id_temp,denumire, Nvl(serie,Space(100)) As serie, cante As cantitate,m.lnPretCuTva As cu_tva,Round(pretv,gnPc) As pretftva, ; +*!* Round(pretv+tvav,gnPc) As pretctva,; +*!* Round(Round((pretv+tvav),gnPc)*cante,gnPc) - Round(Round((pretv+tvav)*cante,gnPc)*(proc_tvav-1)/proc_tvav,gnPc) As valftva, ; +*!* Round(Round((pretv+tvav)*cante,gnPc)*(proc_tvav-1)/proc_tvav,gnPc) As valtva, ; +*!* Round(Round((pretv+tvav),gnPc)*cante,gnPc) As valctva, ; +*!* ROUND(discunitar,gnPc) As discountftva, ; +*!* ROUND(discunitar,gnPc)+Round(Round(discunitar,gnPc)*(proc_tvav-1),gnPc) As discountctva,; +*!* Round(Round(discunitar,gnPc)*cante,gnPc) As valdiscountftva, ; +*!* Round(Round(discunitar*cante,gnPc)*(proc_tvav-1),gnPc) As valdiscounttva, ; +*!* Round(Round(discunitar,gnPc)*cante,gnPc) + Round(Round(discunitar*cante,gnPc)*(proc_tvav-1),gnPc) As valdiscountctva, ; +*!* Round(Round((pretv+tvav),gnPc)*cante,gnPc) - Round(Round((pretv+tvav)*cante,gnPc)*(proc_tvav-1)/proc_tvav,gnPc) As valdiminuatftva, ; +*!* Round(Round((pretv+tvav)*cante,gnPc)*(proc_tvav-1)/proc_tvav,gnPc) As valdiminuattva, ; +*!* Round(Round((pretv+tvav),gnPc)*cante,gnPc) As valdiminuatctva, ; +*!* proc_tvav,id_jtva_coloana, Nvl(um,Space(50)) As um,Nvl(codmat,Space(50)) As codmat, Nvl(codbare,Space(50)) As codbare, Round(pretvval,gnPVal) As vpretftva,; +*!* ROUND(Round(pretvval,gnPVal)*cante,gnPVal) As vvalftva,; +*!* ROUND(Round(Round(pretvval,gnPVal)*cante,gnPVal)*(proc_tvav-1),gnPVal) As vvaltva,; +*!* 0 As vdiscountftva,0 As vvaldiscountftva,0 As vvaldiscounttva,; +*!* Round(Round(pretvval-0,gnPc)*cante,gnPc) As vvaldiminuatftva,; +*!* ROUND(Round((pretvval-0)*cante,gnPc)*(proc_tvav-1),gnPc) As vvaldiminuattva,; +*!* ROUND(Round(Round(pretvval-0,gnPc)*cante,gnPc)*proc_tvav,gnPc) As vvaldiminuatctva,; +*!* 1 As gestionabil From rul_temp Where cante <> 0 + +*!* *!* v 2.0.52 +*!* *!* nu am discount la vanzare - si era formula gresita - trebuia sa plece de la pretv+tvav +*!* *!* Round(Round(pretv-discunitar,gnPc)*cante,gnPc) As valdiminuatftva,; +*!* *!* ROUND(Round((pretv-discunitar)*cante,gnPc)*(proc_tvav-1),gnPc) As valdiminuattva,; +*!* *!* ROUND(Round(Round(pretv-discunitar,gnPc)*cante,gnPc)*proc_tvav,gnPc) As valdiminuatctva, +*!* *!* v 2.0.52 ^ +*!* Endif +*!* *!* v 2.0.18 roagest ^ +*!* modificare ROAGEST v 2.0.142 ^ +If poDate.in_valuta = 1 +&& se foloseste pretul in valuta +*!* modificare ROAFACTURARE v 2.0.56 : am adaugat pretd, id_valutad +*!* modificare ROAFACTURARE v 2.0.90 : am adaugat multiplicator + Insert Into crsvanztemp(id_articol,Pret,proc_tvav,id_jtva_coloana,cantitate,discount_unitar,id_gestiune,Cont,pret_cu_tva,; + serie,codmat,id_valuta,Curs,multiplicator,pret_achizitie,pretd,id_valuta_d,id_rul_aux,taxcode) ; + SELECT a.id_articol,Iif(!INLIST(gnTipGest,6,7), a.pretvval, Round(a.pretvval* proc_tva, gnPVal)),a.proc_tvav,; + a.id_jtva_coloana,; + a.cante As cantitate,a.discunitar As discount_unitar,a.id_gestiune,; + a.Cont, m.lnPretCuTva As pret_cu_tva,Nvl(a.serie,Space(100)) As serie,Nvl(a.codmat,Space(50)) As codmat,; + CAST(Nvl(a.id_valuta_vanz,0) as N(5)) As id_valuta, CAST(Nvl(b.Curs,0) as N(18,6)) As Curs,; + CAST(NVL(b.multiplicator,1) as N(10)) as multiplicator,; + a.Pret As pret_achizitie,a.pretd,CAST(Nvl(a.id_valuta,0) as N(5)) As id_valuta_d,a.id_rul_aux, a.taxcode ; + From rul_temp a left join crscursuri b on NVL(a.id_valuta_vanz,0) = b.id_valuta + Use In crscursuri + + Select crsvanztemp + poDate.Curs = Curs + poDate.multiplicator = multiplicator + If !INLIST(gnTipGest,6,7) + Calculate Sum(Round(Pret*cantitate,gnPVal)),Sum(Round(Round(Pret*cantitate,gnPVal)*(proc_tvav-1),gnPVal)) ; + To poDate.totftvaconv,poDate.tottvaconv + poDate.totftvaconv = Round(poDate.totftvaconv*poDate.Curs/poDate.multiplicator,gnPc) + poDate.tottvaconv = Round(poDate.tottvaconv*poDate.Curs/poDate.multiplicator,gnPc) + poDate.totctvaconv = poDate.totftvaconv+poDate.tottvaconv + Else + Calculate Sum(Round(Pret*cantitate,gnPVal)),Sum(Round(Round(Pret*cantitate,gnPVal)*(proc_tvav-1)/proc_tvav,gnPVal)) ; + To poDate.totctvaconv,poDate.tottvaconv + poDate.totctvaconv = Round(poDate.totctvaconv*poDate.Curs/poDate.multiplicator,gnPc) + poDate.tottvaconv = Round(poDate.totcvaconv*poDate.Curs/poDate.multiplicator,gnPc) + poDate.totftvaconv = poDate.totctvaconv - poDate.tottvaconv + Endif + +Else +*!* poDate.tip = -6 retur +*!* modificare ROAFACTURARE v 2.0.56 : am adaugat pretd, id_valutad + Insert Into crsvanztemp(id_articol,Pret,proc_tvav,id_jtva_coloana,cantitate,discount_unitar,id_gestiune,Cont,pret_cu_tva,; + serie,codmat,id_valuta,Curs,multiplicator,pret_achizitie,pretd,id_valuta_d,id_rul_aux,taxcode) ; + SELECT id_articol,Iif(!INLIST(gnTipGest,6,7), pretv, pretv+tvav) As Pret,proc_tvav,id_jtva_coloana,cante As cantitate,; + discunitar As discount_unitar,Iif(poDate.tip <> -6, id_gestiune, id_gestiunec) As id_gestiune,; + cont, m.lnPretCuTva As pret_cu_tva,Nvl(serie,Space(100)) As serie,Nvl(codmat,Space(50)) As codmat,; + 0 As id_valuta,0 As Curs,1 as multiplicator,Pret,pretd,CAST(Nvl(id_valuta,0) as N(5)) As id_valuta_d,id_rul_aux,taxcode From rul_temp Where cante <> 0 +Endif + +Do Case +Case poDate.tip = -10 + Select Distinct dataireg,id_fdoc,dataact,datascad,nract,id_partc As id_part,nume_val,id_valuta,id_lucrare ; + From ACTACTAN ; + WHERE Alltrim(scd) = '6582' And Alltrim(scc) = '401' ; + Into Cursor crstemp +Case poDate.tip = -9 + Select Distinct dataireg,id_fdoc,dataact,datascad,nract,id_partc As id_part,nume_val,id_valuta,id_lucrare ; + From ACTACTAN ; + WHERE Alltrim(scd) = '623' And Alltrim(scc) = '401' ; + Into Cursor crstemp +Case poDate.tip = -6 + Select Distinct dataireg,id_fdoc,dataact,datascad,nract,id_gestin As id_part,nume_val,id_valuta,id_lucrare ; + From ACTACTAN ; + Where Alltrim(scc) = '371' ; + Into Cursor crstemp +*!* modificare ROAGEST v 2.0.46 : am inlocuit id_gestout cu id_gestin +*!* modificare ROAGEST v 2.0.51 +Case poDate.tip = -7 + Select Distinct dataireg,id_fdoc,dataact,datascad,nract,id_partd As id_part,nume_val,id_valuta,id_lucrare ; + From ACTACTAN ; + Where id_partd <> 0 And scd = '418' ; + Into Cursor crstemp +*!* modificare ROAGEST v 2.0.51 ^ +*!* modificare ROAFACTURARE v 2.0.96 +CASE poDate.tip = -13 + Select Distinct dataireg,id_fdoc,dataact,datascad,nract,id_partd As id_part,nume_val,id_valuta,id_lucrare ; + From ACTACTAN ; + Where id_partd <> 0 And scd = '357' ; + Into Cursor crstemp +*!* modificare ROAFACTURARE v 2.0.96 ^ +Otherwise + Select Distinct dataireg,id_fdoc,dataact,datascad,nract,id_partd As id_part,nume_val,id_valuta,id_lucrare ; + From ACTACTAN ; + Where id_partd <> 0 And scd = '4111' ; + Into Cursor crstemp +Endcase + +Select crstemp +poDate.dataireg = dataireg +poDate.id_fdoc = id_fdoc +poDate.dataact = dataact +poDate.datascad = datascad +poDate.nract = nract +poDate.id_client = id_part +poDate.nume_valuta = nume_val +poDate.id_valuta = id_valuta +poDate.id_lucrare = id_lucrare +poDate.id_sectie = poAct.id_sectie +poDate.tva_incasare = poAct.tva_incasare && modificare ROAGEST v 2.2.0 +Use In crstemp +*!* + +Private ofrmdatesupl +*!* modificare ROAFACTURARE v 2.0.80 : creeaza cursor +poDate.dataora_exp = Get_Ora() && modificare ROAFACTURARE v 2.0.80 +ofrmdatesupl = Createobject("frm_alte_date") +ofrmdatesupl.Show(1) +Release ofrmdatesupl +If gnButon = 2 + lnSucces = -1 +Else + lnSucces = SQLSetprop(gnhandle,"Transactions",2) + If lnSucces >= 0 +*!* modificare ROAFACTURARE v 2.0.29 +*!* lcSql = [BEGIN ] + gcS + [.pack_facturare.initializeaza_date_factura(?poDate.dataireg,?poDate.id_fdoc,?poDate.dataact,] + ; +*!* [?poDate.datascad,?poDate.serie_act,?poDate.nract,?poDate.id_client,?poDate.id_lucrare,NULL,NULL,NULL,?ALLTRIM(poDate.descriere),] + ; +*!* [?poDate.Tip,?poDate.id_set,?poDate.zi_curs,?poDate.id_valuta,?poDate.in_valuta,?gnIdSucursala,?gnIdUtil); END;] + lcSql = [begin ] + gcS +[.pack_facturare.initializeaza_date_factura(] + ; + [to_date('] + Alltrim(Dtoc(poDate.dataireg,2)) + [','YYYYMMDD'),] + ; + Nvl(Alltrim(Str(poDate.id_fdoc)),[NULL]) + [,to_date('] + Alltrim(Dtoc(poDate.dataact,2)) + [','YYYYMMDD'),] + ; + [to_date('] + Alltrim(Dtoc(poDate.datascad,2)) + [','YYYYMMDD'),'] + Nvl(poDate.serie_act,[]) + [',] + ; + Alltrim(Str(poDate.nract,14,0)) + [,] + ; + Iif(Isnull(poDate.id_client),[NULL],Alltrim(Str(poDate.id_client))) + [,] + ; + Iif(Isnull(poDate.id_lucrare),[NULL],Alltrim(Str(poDate.id_lucrare))) + [,] + ; + Iif(Isnull(poDate.id_sectie),[NULL],Alltrim(Str(poDate.id_sectie))) + [,] + ; + Iif(Isnull(poDate.id_venchelt),[NULL],Alltrim(Str(poDate.id_venchelt))) + [,] + ; + Iif(Isnull(poDate.id_responsabil),[NULL],Alltrim(Str(poDate.id_responsabil))) + [,] + ; + IIF(EMPTY(nvl(poDate.explicatia4,[])),[NULL],['] + STRTRAN(ALLTRIM(poDate.explicatia4),['],['']) + [']) + [,] + ; && modificare ROAFACTURARE v 2.0.97 + [NULL,NULL,] + ; + ['] + Strtran(Alltrim(Nvl(poDate.descriere,[])),['],['']) + [',] + ; + Alltrim(Str(poDate.tip)) + [,] + Alltrim(Str(poDate.id_set)) + [,] + ; + [to_date('] + Dtoc(poDate.zi_curs,2) + [','YYYYMMDD'),] + Alltrim(Str(poDate.id_valuta)) + [,] + ; + Alltrim(Str(poDate.in_valuta)) + [,] + ; + alltrim(str(poDate.tva_incasare)) + [,] + ; && modificare ROAGEST v 2.2.0 + Iif(Isnull(gnIdSucursala),[NULL],Alltrim(Str(gnIdSucursala))) + [,] + ; + Alltrim(Str(gnIdUtil)) + [); end;] +*!* modificare ROAFACTURARE v 2.0.29 ^ + lnSucces = goExecutor.oexecute(lcSql) + If lnSucces < 0 + amessagebox(goExecutor.oPrelucrareEroare(),16,"Eroare") + ELSE + + Private poArticol + Select crsvanztemp + Scan + Scatter Name poArticol Memo +*!* modificare ROAFACTURARE v 2.0.29 +*!* lcSql = [BEGIN ] + gcS + [.pack_facturare.adauga_articol_factura_stoc(?poArticol.id_articol,?ALLTRIM(poArticol.serie),] + ; +*!* [?poArticol.pret_achizitie,?poArticol.pret,] + ; +*!* Iif(poDate.in_valuta=1,[?poArticol.id_valuta],[NULL]) + [,] + ; +*!* [?poArticol.curs,?poArticol.proc_tvav,?poArticol.cantitate,?poArticol.discount_unitar,?poArticol.id_gestiune,] + ; +*!* [?ALLTRIM(poArticol.Cont),?poArticol.pret_cu_tva); END;] +*!* modificare ROAFACTURARE v 2.0.56 : am adaugat pretd, id_valuta + lcSql = [begin ] + gcS + [.pack_facturare.adauga_articol_factura_stoc(] + ; + Alltrim(Str(poArticol.id_articol)) + [,] + ; + ['] + Strtran(Alltrim(Nvl(poArticol.serie,[])),['],['']) + [',] + ; + Alltrim(Str(poArticol.pret_achizitie,18,gnPPret)) + [,] + ; + Alltrim(Str(poArticol.pretd,18,gnPPretVal)) + [,] + ; + Alltrim(Str(poArticol.id_valuta_d)) + [,] + ; + Alltrim(Str(poArticol.Pret,18,Iif(poDate.in_valuta = 1,gnPVal,gnPPretV))) + [,] + ; + Iif(poDate.in_valuta=1,Alltrim(Str(poArticol.id_valuta)),[NULL]) + [,] + ; + Alltrim(Str(poArticol.Curs,18,6)) + [,] + ; + Alltrim(Str(poArticol.multiplicator)) + [,] + ; + Alltrim(Str(poArticol.proc_tvav,18,2)) + [,] + ; + Alltrim(Str(poArticol.id_jtva_coloana)) + [,] + ; + Alltrim(Str(poArticol.cantitate,18,gnPCant)) + [,] + ; + Alltrim(Str(poArticol.discount_unitar,18,Iif(poDate.in_valuta = 1,gnPVal,gnPPretV))) + [,] + ; + Alltrim(Str(poArticol.id_gestiune)) + [,] + ; + ['] + Alltrim(Nvl(poArticol.Cont,'')) + [',] + ; + Alltrim(Str(poArticol.pret_cu_tva)) + [,null,]+ ; + NVL(Alltrim(Str(poArticol.id_rul_aux)),[null])+ [,] + ; + IIF(EMPTY(NVL(poArticol.taxcode, '')), [null], Alltrim(Str(poArticol.taxcode)))+ [,] + ; + ['] + Strtran(Alltrim(Nvl(poArticol.lot,[])),['],['']) + ['] + ; + [); end;] +*!* modificare ROAFACTURARE v 2.0.29 ^ + lnSucces = goExecutor.oexecute(lcSql) + if lnSucces < 0 + amessagebox(goExecutor.oPrelucrareEroare(),16,"Eroare") + Exit + Endif + Endscan + If !Used('INFISIERE') + lcCaleDateMenu = gcAppPath+[\COMUN\DATEMENU\] + Use &lcCaleDateMenu.INFISIERE In 0 Alias INFISIERE + Endif +*!* modificare ROAFACTURARE v 2.0.44 + If lnSucces >= 0 +*!* modificare ROAFACTURARE v 2.0.44 ^ + lnSucces = oscrie_in_fisiere(0,.F.,.T.) && ? + If lnSucces >= 0 +*!* modificare ROAFACTURARE v 2.0.29 +*!* lcSql = [BEGIN ] + gcS + [.pack_facturare.scrie_in_vanzari(0,?poDate.id_delegat,?poDate.id_masina,] + ; +*!* [?poDate.id_agent,?poDate.text_aditional); END;] +*!* modificare ROAFACTURARE v 2.0.58 : am adaugat poDate.nid_vanzare +*!* modificare ROAFACTURARE v 2.0.80 : am adaugat poDate.dataora_exp + lcSql = [begin ] + gcS + [.pack_facturare.scrie_in_vanzari(0,] + ; + IIF(Isnull(poDate.id_delegat),[NULL],Alltrim(Str(poDate.id_delegat))) + [,] + ; + IIF(Isnull(poDate.id_masina),[NULL],Alltrim(Str(poDate.id_masina))) + [,] + ; + IIF(Isnull(poDate.id_facturare),[NULL],Alltrim(Str(poDate.id_facturare))) + [,] + ; + IIF(Isnull(poDate.nListareDetaliata),[0],Alltrim(Str(poDate.nListareDetaliata))) + [,] + ; + [?poDate.dataora_exp,] + ; + IIF(Isnull(poDate.id_agent),[NULL],Alltrim(Str(poDate.id_agent))) + [,] + ; + ['] + Strtran(Alltrim(Nvl(poDate.text_aditional,[])),['],['']) + [',?@poDate.nid_vanzare); end;] +*!* modificare ROAFACTURARE v 2.0.29 ^ + lnSucces = goExecutor.oexecute(lcSql) + If lnSucces < 0 + amessagebox(goExecutor.oPrelucrareEroare(),16,"Eroare") + ELSE + lcSql = [update vanzari set id_fact = pack_contafin.get_idFact() where id_vanzare = ?poDate.nid_vanzare] + llSucces = goExecutor.oexecuta(lcSql) + lnSucces = IIF(m.llSucces, 1, -1) + ENDIF + + Endif +*!* modificare ROAFACTURARE v 2.0.44 + Endif +*!* modificare ROAFACTURARE v 2.0.44 ^ + Endif + Endif + + If lnSucces < 0 + amessagebox(goExecutor.oPrelucrareEroare(),16,"Eroare") + lcSql = "ROLLBACK" + Else + lcSql = "COMMIT" + Endif + lnSucces2 = goExecutor.oexecute(lcSql) + + Do Case + Case lnSucces2 < 0 + amessagebox(lcSql + Chr(13) + goExecutor.cEroare,0+16,"Eroare") + Case lnSucces2 >=0 And lcSql = "COMMIT" + SELECT crsvanztemp + listeaza_ofacturare_stoc() + Endcase + + lnSucces2 = SQLSetprop(gnhandle,"Transactions",1) + If lnSucces2 < 0 + amessagebox('Programul nu a reusit sa treaca pe tranzactie automata. Iesiti din program si intrati din nou!',48,'Atentie!') + Endif +Endif + +If Used('crsvanztemp') + Use In crsvanztemp +Endif +If Used('crsfactura') + Use In crsfactura +Endif +Return lnSucces +Endfunc +******************************************** SFARSIT: oscrie_vanzare_din_stoc ********************************* +******************************************* INCEPUT: relisteaza_ofacturare_stoc ******************************************** +Procedure relisteaza_ofacturare_stoc +Lparameters tnNrAct, tcSerie, tnTip + +Private pnCod, poDate, pnNrAct, pcSerie +*!* modificare v 2.0.67 +*!* PRIVATE pnTipFacturare +*!* pnTipFacturare = 0 +*!* modificare v 2.0.67 ^ + +pnNrAct = tnNrAct +If !Inlist(tnTip ,-9,-10) + pcSerie = Iif(Empty(Nvl(tcSerie,'')),[+_],Alltrim(tcSerie)) +Else + pcSerie = Nvl(tcSerie,[+_]) +Endif +lcSql = [Select distinct cod,datascad,dataact from act ] + ; + [where an = ?gnAn and luna = ?gnLuna and sters = 0 and nract = ?pnNrAct and Nvl(serie_act,'+_') LIKE '%]+Alltrim(pcSerie)+[%' ] +Do Case +Case tnTip = 1 + lcSql = lcSql + [ and scd = '418'] +Case tnTip = -6 && aviz de retur de la o gestiune valorica + lcSql = lcSql + [ and scc = '371'] +Case tnTip = -10 + lcSql = lcSql + [ and scd = '6582' and scc = '401' ] +Case tnTip = -9 + lcSql = lcSql + [ and scd = '623' and scc = '401' ] +Otherwise + lcSql = lcSql + [ and scd = '4111'] +Endcase + +lcSql = lcSql + [ and sters = 0] + gcCondSucursala + [ order by datascad desc] +lcCursor=[crsact] +lnSucces = goExecutor.oexecute(lcSql,lcCursor) +If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,"Eroare") + Return +Endif + +If Reccount(lcCursor) > 0 + Select (lcCursor) + pnCod = cod + poDate=Createobject("oDateFactura",0,0) + poDate.nract = pnNrAct + poDate.serie_act = pcSerie + poDate.dataact = Iif(Type('dataact')='T',Ttod(dataact),dataact) + poDate.datascad = Iif(Type('datascad')='T',Ttod(datascad),datascad) + Use In (lcCursor) + + lcSql = [select id_vanzare,id_comanda,dataora,dataora_exp,data_act,sters,dataoras,numar_act,serie_act,]+; + [tip,id_part,discount,disc_fara_tva,discount_evidentiat,text_aditional,facturat,data_facturat,]+; + [explicatie,altele,client,cod,utilizator,utils,utilfact,delegat,bidelegat,cnpdelegat,]+; + [nume_agent,nrinmat,total_fara_tva,total_tva,total_cu_tva,id_gestiune,serie_chit,nr_incasare,incasat,]+; + [in_valuta,sucursala,id_ruta,ruta,curs,multiplicator,nume_val,id_delegat,id_agent,id_masina,valoarea,]+; + [nume_gestiune,id_sectie,sectie,id_lucrare,lucrare,tip_incasare,afisare_scadenta,tva_incasare from fact_vfacturi where cod = ] + ALLTRIM(STR(pnCod)) + lnSucces = goExecutor.oexecute(lcSql,[crsfacturi]) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,"Eroare") + Return + Endif + + Select crsfacturi + poDate.nRelistare = 1 && modificare ROAFACTURARE v 2.0.58 + poDate.nid_vanzare = id_vanzare + poDate.tip = tip + poDate.discount_evidentiat = discount_evidentiat + poDate.text_aditional = Nvl(text_aditional,[]) + poDate.nrinmat = nrinmat + poDate.nume_delegat = delegat + poDate.bidelegat = bidelegat + poDate.cnpdelegat = cnpdelegat + poDate.dataora_exp = dataora_exp && modificare ROAFACTURARE v 2.0.80 + poDate.afisare_scadenta = afisare_scadenta && modificare ROACONTRACTE v 2.0.38 +*!* modificare ROAFACTURARE v 2.0.68 +*!* poDate.listaid = Iif(poDate.tip = 2,Alltrim(Str(id_ctr)),Iif(poDate.tip = 3,Alltrim(Str(id_comanda)), [0])) + poDate.listaid = Iif(poDate.tip = 3,Alltrim(Str(id_comanda)), [0]) +*!* modificare ROAFACTURARE v 2.0.68 ^ + poDate.ntip_incasare = tip_incasare && modificare ROAFACTURARE v 2.0.84 + poDate.serie_chit = NVL(serie_chit,[]) && modificare ROAFACTURARE v 2.0.80 + poDate.nr_incasare = nr_incasare + poDate.incasat = incasat + poDate.tva_incasare = tva_incasare && modificare ROAGEST v 2.2.0 + IF tnTip = -6 && aviz de retur de la o gestiune valorica + IF tnTip <> poDate.tip + amessagebox("Nu exista " + Iif(tnTip = 1,[avizul],[factura]) + " cu acest numar in luna curenta!",48,"Atentie") + USE IN crsFacturi + RELEASE podate + RETURN + ENDIF + poDate.id_client = id_gestiune + ELSE + poDate.id_client = id_part + ENDIF + poDate.nume_client = client + poDate.in_valuta = in_valuta + If poDate.in_valuta = 1 + poDate.nume_valuta = nume_val + poDate.Curs = Curs + poDate.multiplicator = multiplicator + poDate.totftvaconv = total_fara_tva + poDate.tottvaconv = total_tva + poDate.totctvaconv = poDate.totftvaconv + poDate.tottvaconv + lnDiscountVal = discount + lnDiscount = Round(lnDiscountVal * poDate.Curs / poDate.multiplicator,gnPPretV) + Else + lnDiscount = discount + lnDiscountVal = 0 + Endif + Use In crsfacturi + +*!* modificare ROAFACTURARE v 2.0.46 +*!* *!* v 2.0.18 roagest (codmat) +*!* lcSql = [select explicatie,codmat,denumire,cantitate,proc_tvav,um,pret_cu_tva,pret,discount_unitar,serie,pret_val,nume_val,] + ; +*!* [discount_unitar_val,curs,codbare from fact_vfacturi_detalii where id_vanzare = ?pnIdVanzare] +*!* *!* v 2.0.18 roagest ^ +*!* modificare ROAFACTURARE v 2.0.56 : am adaugat id_temp +*!* modificare ROAFACTURARE v 2.0.68 : am adaugat id_ctr,numar_contract,id_valuta,tip_valuta,curs,nume_val + lcSql = [select * from fact_vfacturi_detalii where id_vanzare = ] + ALLTRIM(STR(poDate.nid_vanzare)) +*!* modificare ROAFACTURARE v 2.0.46 ^ + lnSucces = goExecutor.oexecute(lcSql,[crsdetalii]) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,"Eroare") + Return + Endif + +*!* v 2.0.18 roagest (codmat, total cu tva, total tva, total fara tva = diferenta) + Select crsdetalii + Calculate Max(proc_tvav) To lnProcTvav +*!* Select explicatie,codmat,denumire,Nvl(serie,'') As serie,Nvl(cantitate,1) As cantitate,proc_tvav,Nvl(um,'') As um, ; +*!* IIF(pret_cu_tva = 0,; +*!* Round(Pret,gnPc),; +*!* Round(Round(Pret,gnPc)/proc_tvav,gnPc)) As pretftva,; +*!* IIF(pret_cu_tva = 0,; +*!* Round(Round(Pret,gnPc)*Nvl(cantitate,1),gnPc),; +*!* ROUND(Round(Round(Pret,gnPc)/proc_tvav,gnPc)*Nvl(cantitate,1),gnPc)) As valftva,; +*!* IIF(pret_cu_tva = 0,; +*!* Round(Round(Round(Pret,gnPc)*Nvl(cantitate,1),gnPc)*(proc_tvav-1),gnPc),; +*!* ROUND(Round(Pret,gnPc)*Nvl(cantitate,1),gnPc)-; +*!* Round(Round(Round(Pret,gnPc)/proc_tvav,gnPc)*Nvl(cantitate,1),gnPc)) As valtva,; +*!* IIF(pret_cu_tva = 0,; +*!* Round(discount_unitar,gnPc),; +*!* Round(Round(discount_unitar,gnPc)/proc_tvav,gnPc)) As discountftva,; +*!* IIF(pret_cu_tva = 0,; +*!* Round(Round(discount_unitar,gnPc)*Nvl(cantitate,1),gnPc),; +*!* ROUND(Round(Round(discount_unitar,gnPc)/proc_tvav,gnPc)*Nvl(cantitate,1),gnPc)) As valdiscountftva,; +*!* IIF(pret_cu_tva = 0,; +*!* ROUND(Round(Round(discount_unitar,gnPc)*Nvl(cantitate,1),gnPc)*(proc_tvav-1),gnPc),; +*!* ROUND(Round(discount_unitar,gnPc)*Nvl(cantitate,1),gnPc)-; +*!* Round(Round(Round(discount_unitar,gnPc)/proc_tvav,gnPc)*Nvl(cantitate,1),gnPc)) As valdiscounttva,; +*!* IIF(pret_cu_tva = 0,; +*!* Round((Round(Pret,gnPc)-Round(discount_unitar,gnPc))*Nvl(cantitate,1),gnPc),; +*!* ROUND(Round((Round(Pret,gnPc)-Round(discount_unitar,gnPc))/proc_tvav,gnPc)*Nvl(cantitate,1),gnPc)) As valdiminuatftva,; +*!* IIF(pret_cu_tva = 0,; +*!* Round(Round((Round(Pret,gnPc)-Round(discount_unitar,gnPc))*Nvl(cantitate,1),gnPc)*(proc_tvav-1),gnPc),; +*!* ROUND((Round(Pret,gnPc)-Round(discount_unitar,gnPc))*Nvl(cantitate,1),gnPc)-; +*!* Round(Round((Round(Pret,gnPc)-Round(discount_unitar,gnPc))/proc_tvav,gnPc)*Nvl(cantitate,1),gnPc)) As valdiminuattva,; +*!* IIF(pret_cu_tva = 0,; +*!* Round(pret_val,gnPVal),; +*!* Round(Round(pret_val,gnPVal)/proc_tvav,gnPVal)) As vpretftva,; +*!* IIF(pret_cu_tva = 0,; +*!* Round(Round(pret_val,gnPVal)*Nvl(cantitate,1),gnPVal),; +*!* ROUND(Round(Round(pret_val,gnPVal)/proc_tvav,gnPVal)*Nvl(cantitate,1),gnPVal)) As vvalftva,; +*!* IIF(pret_cu_tva = 0,; +*!* Round(Round(Round(pret_val,gnPVal)*Nvl(cantitate,1),gnPVal)*(proc_tvav-1),gnPVal),; +*!* ROUND(Round(pret_val,gnPVal)*Nvl(cantitate,1),gnPVal)-; +*!* Round(Round(Round(pret_val,gnPVal)/proc_tvav,gnPVal)*Nvl(cantitate,1),gnPVal)) As vvaltva,; +*!* IIF(pret_cu_tva = 0,; +*!* Round(discount_unitar_val,gnPc),; +*!* Round(Round(discount_unitar_val,gnPc)/proc_tvav,gnPc)) As vdiscountftva,; +*!* IIF(pret_cu_tva = 0,; +*!* Round(Round(discount_unitar_val,gnPc)*Nvl(cantitate,1),gnPc),; +*!* ROUND(Round(Round(discount_unitar_val,gnPc)/proc_tvav,gnPc)*Nvl(cantitate,1),gnPc)) As vvaldiscountftva,; +*!* IIF(pret_cu_tva = 0,; +*!* ROUND(Round(Round(discount_unitar_val,gnPc)*Nvl(cantitate,1),gnPc)*(proc_tvav-1),gnPc),; +*!* ROUND(Round(discount_unitar_val,gnPc)*Nvl(cantitate,1),gnPc)-; +*!* Round(Round(Round(discount_unitar_val,gnPc)/proc_tvav,gnPc)*Nvl(cantitate,1),gnPc)) As vvaldiscounttva,; +*!* IIF(pret_cu_tva = 0,; +*!* Round((Round(Pret_val,gnPc)-Round(discount_unitar_val,gnPc))*Nvl(cantitate,1),gnPc),; +*!* ROUND(Round((Round(Pret_val,gnPc)-Round(discount_unitar_val,gnPc))/proc_tvav,gnPc)*Nvl(cantitate,1),gnPc)) As vvaldiminuatftva,; +*!* IIF(pret_cu_tva = 0,; +*!* Round(Round((Round(Pret_val,gnPc)-Round(discount_unitar_val,gnPc))*Nvl(cantitate,1),gnPc)*(proc_tvav-1),gnPc),; +*!* ROUND((Round(Pret_val,gnPc)-Round(discount_unitar_val,gnPc))*Nvl(cantitate,1),gnPc)-; +*!* Round(Round((Round(Pret_val,gnPc)-Round(discount_unitar_val,gnPc))/proc_tvav,gnPc)*Nvl(cantitate,1),gnPc)) As vvaldiminuattva ; +*!* From crsdetalii Into Cursor crsfactura Readwrite + +*!* modificare ROAFACTURARE v 2.0.77 +*!* *!* modificare ROAFACTURARE v 2.0.56 : am adaugat id_temp +*!* Select id_temp,explicatie,Nvl(codmat,Space(50)) As codmat,Nvl(codmatf,Space(50)) As codmatf,Nvl(codbare,Space(50)) As codbare,; +*!* Iif(Nvl(id_gestiune,0)<>0,1,0) As gestionabil,denumire,Nvl(serie,Space(100)) As serie,Nvl(cantitate,1) As cantitate,; +*!* proc_tvav,id_jtva_coloana,Nvl(um,Space(10)) As um,pret_cu_tva As cu_tva,; +*!* Iif(pret_cu_tva = 1,Round(Pret,gnPc),Round(Pret,gnPc)+Round(Round(Pret,gnPc)*(proc_tvav-1),gnPc)) As pretctva,; +*!* Iif(pret_cu_tva = 1,Round(discount_unitar,gnPc),0) As discountctva,; +*!* Iif(pret_cu_tva = 1,Round(Round(Pret,gnPc)*Nvl(cantitate,1),gnPc),Round(Round(Pret,gnPc)*Nvl(cantitate,1),gnPc)+; +*!* Round(Round(Round(Pret,gnPc)*Nvl(cantitate,1),gnPc)*(proc_tvav-1),gnPc)) As valctva,; +*!* Iif(pret_cu_tva = 1,Round(Round(discount_unitar,gnPc)*Nvl(cantitate,1),gnPc),; +*!* ROUND((Round(discount_unitar,gnPc)-Round(Round(discount_unitar,gnPc)*(proc_tvav-1),gnPc))*Nvl(cantitate,1),gnPc)) As valdiscountctva,; +*!* IIF(pret_cu_tva = 1,; +*!* ROUND((Round(Pret,gnPc)-Round(discount_unitar,gnPc))*Nvl(cantitate,1),gnPc),; +*!* ROUND((Round(Pret,gnPc)+Round(Round(Pret,gnPc)*(proc_tvav-1),gnPc)-Round(discount_unitar,gnPc)-Round(Round(discount_unitar,gnPc)*(proc_tvav-1),gnPc))*Nvl(cantitate,1),gnPc)) As valdiminuatctva,; +*!* IIF(pret_cu_tva = 0,; +*!* Round(Pret,gnPc),; +*!* Round(Round(Pret,gnPc)/proc_tvav,gnPc)) As pretftva,; +*!* IIF(pret_cu_tva = 0,; +*!* Round(Round(Pret,gnPc)*Nvl(cantitate,1),gnPc),; +*!* ROUND(Round(Pret,gnPc)*Nvl(cantitate,1),gnPc) - ; +*!* Round(Round(Round(Pret,gnPc)*Nvl(cantitate,1),gnPc)*(proc_tvav-1)/proc_tvav, gnPc)) As valftva,; +*!* IIF(pret_cu_tva = 0,; +*!* Round(Round(Round(Pret,gnPc)*Nvl(cantitate,1),gnPc)*(proc_tvav-1),gnPc),; +*!* Round(Round(Round(Pret,gnPc)*Nvl(cantitate,1),gnPc)*(proc_tvav-1)/proc_tvav, gnPc)) As valtva,; +*!* IIF(pret_cu_tva = 0,; +*!* Round(discount_unitar,gnPc),; +*!* Round(Round(discount_unitar,gnPc)/proc_tvav,gnPc)) As discountftva,; +*!* IIF(pret_cu_tva = 0,; +*!* Round(Round(discount_unitar,gnPc)*Nvl(cantitate,1),gnPc),; +*!* ROUND(Round(discount_unitar,gnPc)*Nvl(cantitate,1),gnPc) - ; +*!* Round(Round(Round(discount_unitar,gnPc)*Nvl(cantitate,1),gnPc)*(proc_tvav-1)/proc_tvav, gnPc)) As valdiscountftva,; +*!* IIF(pret_cu_tva = 0,; +*!* ROUND(Round(Round(discount_unitar,gnPc)*Nvl(cantitate,1),gnPc)*(proc_tvav-1),gnPc),; +*!* Round(Round(Round(discount_unitar,gnPc)*Nvl(cantitate,1),gnPc)*(proc_tvav-1)/proc_tvav, gnPc)) As valdiscounttva,; +*!* IIF(pret_cu_tva = 0,; +*!* Round((Round(Pret,gnPc)-Round(discount_unitar,gnPc))*Nvl(cantitate,1),gnPc),; +*!* ROUND((Round(Pret,gnPc)-Round(discount_unitar,gnPc))*Nvl(cantitate,1),gnPc) - ; +*!* Round(Round((Round(Pret,gnPc)-Round(discount_unitar,gnPc))*Nvl(cantitate,1),gnPc)*(proc_tvav-1)/proc_tvav, gnPc)) As valdiminuatftva,; +*!* IIF(pret_cu_tva = 0,; +*!* Round(Round((Round(Pret,gnPc)-Round(discount_unitar,gnPc))*Nvl(cantitate,1),gnPc)*(proc_tvav-1),gnPc),; +*!* Round(Round((Round(Pret,gnPc)-Round(discount_unitar,gnPc))*Nvl(cantitate,1),gnPc)*(proc_tvav-1)/proc_tvav, gnPc)) As valdiminuattva,; +*!* IIF(pret_cu_tva = 0,; +*!* Round(pret_val,gnPVal),; +*!* Round(Round(pret_val,gnPVal)/proc_tvav,gnPVal)) As vpretftva,; +*!* IIF(pret_cu_tva = 0,; +*!* Round(Round(pret_val,gnPVal)*Nvl(cantitate,1),gnPVal),; +*!* ROUND(Round(pret_val,gnPVal)*Nvl(cantitate,1),gnPVal) - ; +*!* Round(Round(Round(pret_val,gnPVal)*Nvl(cantitate,1),gnPVal)*(proc_tvav-1)/proc_tvav, gnPVal)) As vvalftva,; +*!* IIF(pret_cu_tva = 0,; +*!* Round(Round(Round(pret_val,gnPVal)*Nvl(cantitate,1),gnPVal)*(proc_tvav-1),gnPVal),; +*!* Round(Round(Round(pret_val,gnPVal)*Nvl(cantitate,1),gnPVal)*(proc_tvav-1)/proc_tvav, gnPVal)) As vvaltva,; +*!* IIF(pret_cu_tva = 0,; +*!* Round(discount_unitar_val,gnPVal),; +*!* Round(Round(discount_unitar_val,gnPVal)/proc_tvav,gnPVal)) As vdiscountftva,; +*!* IIF(pret_cu_tva = 0,; +*!* Round(Round(discount_unitar_val,gnPVal)*Nvl(cantitate,1),gnPVal),; +*!* ROUND(Round(discount_unitar_val,gnPVal)*Nvl(cantitate,1),gnPVal) - ; +*!* Round(Round(Round(discount_unitar_val,gnPVal)*Nvl(cantitate,1),gnPVal)*(proc_tvav-1)/proc_tvav, gnPVal)) As vvaldiscountftva,; +*!* IIF(pret_cu_tva = 0,; +*!* ROUND(Round(Round(discount_unitar_val,gnPVal)*Nvl(cantitate,1),gnPVal)*(proc_tvav-1),gnPVal),; +*!* Round(Round(Round(discount_unitar_val,gnPVal)*Nvl(cantitate,1),gnPVal)*(proc_tvav-1)/proc_tvav, gnPVal)) As vvaldiscounttva,; +*!* IIF(pret_cu_tva = 0,; +*!* Round((Round(pret_val,gnPVal)-Round(discount_unitar_val,gnPVal))*Nvl(cantitate,1),gnPVal),; +*!* ROUND((Round(pret_val,gnPVal)-Round(discount_unitar_val,gnPVal))*Nvl(cantitate,1),gnPVal) - ; +*!* Round(Round((Round(pret_val,gnPVal)-Round(discount_unitar_val,gnPVal))*Nvl(cantitate,1), gnPVal)*(proc_tvav-1)/proc_tvav, gnPVal)) As vvaldiminuatftva,; +*!* IIF(pret_cu_tva = 0,; +*!* Round(Round((Round(pret_val,gnPVal)-Round(discount_unitar_val,gnPVal))*Nvl(cantitate,1),gnPVal)*(proc_tvav-1),gnPVal),; +*!* Round(Round((Round(pret_val,gnPVal)-Round(discount_unitar_val,gnPVal))*Nvl(cantitate,1), gnPVal)*(proc_tvav-1)/proc_tvav, gnPVal)) As vvaldiminuattva, ; +*!* id_ctr,numar_contract,id_valuta,tip_valuta,NVL(curs,1.000) as curs,nume_val ; && modificare ROAFACTURARE v 2.0.68 +*!* From crsdetalii Into Cursor crsfactura Readwrite +*!* *!* v 2.0.18 roagest ^ +*!* If lnDiscount<> 0 +*!* Select crsfactura +*!* *!* modificare ROAFACTURARE v 2.0.56 +*!* *!* Calculate Sum(valdiminuatftva),Sum(vvaldiminuatftva) To lnTotalBaza,lnTotalBazaVal +*!* Calculate Sum(valdiminuatftva),Sum(vvaldiminuatftva),Max(id_temp) To lnTotalBaza,lnTotalBazaVal,lnIdTemp +*!* *!* modificare ROAFACTURARE v 2.0.56 ^ +*!* Select crsfactura +*!* Append Blank +*!* *!* modificare ROAFACTURARE v 2.0.56 : am adaugat id_temp +*!* Replace denumire With Replicate('Z',20),cantitate With 1,; +*!* pretftva With lnTotalBaza,discountftva With lnDiscount,valdiscountftva With lnDiscount,; +*!* valdiscounttva With Round(lnDiscount * (lnProcTvav - 1),gnPc),; +*!* vpretftva With lnTotalBazaVal,vdiscountftva With lnDiscountVal,vvaldiscountftva With lnDiscountVal,; +*!* vvaldiscounttva With Round(lnDiscountVal * (lnProcTvav - 1),gnPc),; +*!* proc_tvav With lnProcTvav,id_temp With lnIdTemp + 1 +*!* Endif + creeaza_facturacrs([crsfactura]) + prelucreaza_facturacrs([crsdetalii],[crsfactura],lnProcTvav,lnDiscount,lnDiscountVal) + Use In crsdetalii +*!* modificare ROAFACTURARE v 2.0.77 ^ + listeaza_ofacturare_stoc() + + If Used('crsfactura') + Use In crsfactura + Endif + + Release poDate +Else + amessagebox("Nu exista " + Iif(tnTip = 1,[avizul],[factura]) + " cu acest numar in luna curenta!",48,"Atentie") +Endif + +Endproc && relisteaza_ofacturare_stoc +******************************************* SFARSIT: relisteaza_ofacturare_stoc ******************************************** +******************************************** INCEPUT: listeaza_ofacturare_stoc ********************************************* +Procedure listeaza_ofacturare_stoc +*!* modificare ROAFACTURARE v 2.0.77 +*!* Local loArticol +*!* Private poClient,ptDataOra,pcExplicatieContract,pnTotalPozitii + +*!* ************************************************ +*!* ** Date client, responsabil facturare si firma +*!* ************************************************ +*!* Do Case +*!* Case poDate.tip = 30 +*!* lcSql = [select 1 as tip,Nvl(c.denumire,a.nume_gestiune) as denumire,a.cgest as cod_fiscal,] + ; +*!* [Nvl(c.adresa,'') as adresa,'' as telefon,'' as fax,] + ; +*!* ['' as reg_comert,'' as banca,'' as cont_banca,] + ; +*!* ['' as banca2,'' as cont_banca2,'' as banca3,'' as cont_banca3,] + ; +*!* [sysdate as dataora,1 as tip_persoana,0 as capital_soc_var,] + ; +*!* [0 as capital_soc_sub from ] + gcS + [.nom_gestiuni a ] + ; +*!* [left join ] + gcS + [.asociere_parteneri_gestiuni b on a.id_gestiune = b.id_gestiune ] + ; +*!* [left join ] + gcS + [.nom_parteneri c on b.id_part = c.id_part ] + ; +*!* [where a.id_gestiune = ?poDateGestiuneDest.id_gestiune ] + ; +*!* [union all ] + ; +*!* [select 2 as tip,denumire,cod_fiscal,'' as adresa,'' as telefon,'' as fax,'' as reg_comert,'' as banca,] + ; +*!* ['' as cont_banca,] + ; +*!* ['' as banca2,'' as cont_banca2,'' as banca3,'' as cont_banca3,] + ; +*!* [null as dataora,tip_persoana,0 as capital_soc_var,0 as capital_soc_sub ] + ; +*!* [from ] + gcS + [.nom_parteneri where sters = 0 and inactiv = 0 and id_part in ] + ; +*!* [(select id_partener from ] + gcS + [.utilizatori_rol_intern where sters = 0 and id_util = ?gnIdUtil)] + ; +*!* [union all ] + ; +*!* [select 3 as tip,antet as denumire,cod_fiscal,adresa,telefon,fax,reg_comert,] + ; +*!* [banca1 as banca,cont_banca1 as cont_banca,] + ; +*!* [banca2,cont_banca2,banca3,cont_banca3,] + ; +*!* [null as dataora,0 as tip_persoana,capital_soc_var,capital_soc_sub ] + ; +*!* [from syn_nom_firme where id_firma = ?gnIdFirma] +*!* Case Inlist(poDate.tip , -6) && RETUR AVIZ DIN GESTIUNE VALORICA (ROAGEST) +*!* lcSql = [select 1 as tip,Nvl(c.denumire,a.nume_gestiune) as denumire,a.cgest as cod_fiscal,] + ; +*!* [Nvl(c.adresa,'') as adresa,'' as telefon,'' as fax,] + ; +*!* ['' as reg_comert,'' as banca,'' as cont_banca,] + ; +*!* ['' as banca2,'' as cont_banca2,'' as banca3,'' as cont_banca3,] + ; +*!* [sysdate as dataora,1 as tip_persoana,0 as capital_soc_var,] + ; +*!* [0 as capital_soc_sub from ] + gcS + [.nom_gestiuni a ] + ; +*!* [left join ] + gcS + [.asociere_parteneri_gestiuni b on a.id_gestiune = b.id_gestiune ] + ; +*!* [left join ] + gcS + [.nom_parteneri c on b.id_part = c.id_part ] + ; +*!* [where a.id_gestiune = ?poDate.id_client ] + ; +*!* [union all ] + ; +*!* [select 2 as tip,denumire,cod_fiscal,'' as adresa,'' as telefon,'' as fax,'' as reg_comert,'' as banca,] + ; +*!* ['' as cont_banca,] + ; +*!* ['' as banca2,'' as cont_banca2,'' as banca3,'' as cont_banca3,] + ; +*!* [null as dataora,tip_persoana,0 as capital_soc_var,0 as capital_soc_sub ] + ; +*!* [from ] + gcS + [.nom_parteneri where sters = 0 and inactiv = 0 and id_part in ] + ; +*!* [(select id_partener from ] + gcS + [.utilizatori_rol_intern where sters = 0 and id_util = ?gnIdUtil)] + ; +*!* [union all ] + ; +*!* [select 3 as tip,antet as denumire,cod_fiscal,adresa,telefon,fax,reg_comert,] + ; +*!* [banca1 as banca,cont_banca1 as cont_banca,] + ; +*!* [banca2,cont_banca2,banca3,cont_banca3,] + ; +*!* [null as dataora,0 as tip_persoana,capital_soc_var,capital_soc_sub ] + ; +*!* [from syn_nom_firme where id_firma = ?gnIdFirma] +*!* Otherwise +*!* lcSql = [select 1 as tip,(case when tip_persoana = 1 then prefix||' '||denumire||' '||sufix else denumire end) as denumire,]+; +*!* [cod_fiscal,adresa,telefon,'' as fax,reg_comert,banca,cont_banca,] + ; +*!* ['' as banca2,'' as cont_banca2,'' as banca3,'' as cont_banca3,] + ; +*!* [sysdate as dataora,tip_persoana,0 as capital_soc_var,] + ; +*!* [0 as capital_soc_sub from ] + gcS + [.vnom_parteneri where id_part = ?poDate.id_client ] + ; +*!* [union all ] + ; +*!* [select 2 as tip,denumire,cod_fiscal,'' as adresa,'' as telefon,'' as fax,reg_comert,'' as banca,'' as cont_banca,] + ; +*!* ['' as banca2,'' as cont_banca2,'' as banca3,'' as cont_banca3,] + ; +*!* [null as dataora,tip_persoana,0 as capital_soc_var,0 as capital_soc_sub from ] + gcS + [.nom_parteneri ] + ; +*!* [where sters = 0 and inactiv = 0 and id_part in ] + ; +*!* [(select id_partener from ] + gcS + [.utilizatori_rol_intern where sters = 0 and id_util = ?gnIdUtil)] + ; +*!* [union all ] + ; +*!* [select 3 as tip,antet as denumire,cod_fiscal,adresa,telefon,fax,reg_comert,banca1 as banca,] + ; +*!* [cont_banca1 as cont_banca,] + ; +*!* [banca2,cont_banca2,banca3,cont_banca3,] + ; +*!* [null as dataora,0 as tip_persoana,capital_soc_var,capital_soc_sub ] + ; +*!* [from syn_nom_firme where id_firma = ?gnIdFirma ] +*!* Endcase + +*!* If Used('crsdatefacturare') +*!* Use In crsdatefacturare +*!* Endif +*!* lcCursor = [crsdatefacturare] +*!* lnSucces = goExecutor.oexecute(lcSql,lcCursor) +*!* If lnSucces<0 +*!* amessagebox(goExecutor.oPrelucrareEroare(),16,"Eroare") +*!* Return +*!* Endif + +*!* Select crsdatefacturare +*!* Scan +*!* Do Case +*!* Case tip= 1 +*!* Scatter Name poClient Memo +*!* ptDataOra = poClient.dataora +*!* Case tip = 2 +*!* With poDate +*!* .nume_responsabil = denumire +*!* .BIresp = reg_comert +*!* .CNPresp = cod_fiscal +*!* Endwith +*!* Otherwise +*!* Scatter Name poFirma Memo +*!* Endcase +*!* Endscan +*!* Use In crsdatefacturare +*!* ************************************************ +*!* *!* modificare ROAFACTURARE v 2.0.46 +*!* *!* pcExplicatieContract = [] +*!* ************************************************ +*!* AddProperty(poClient,'denumireClient',[]) +*!* *!* AddProperty(poClient,'gestiune',[]) +*!* AddProperty(poFirma,'b_swift',[]) +*!* AddProperty(poFirma,'b_adresa',[]) +*!* AddProperty(poFirma,'b_swift2',[]) +*!* AddProperty(poFirma,'b_adresa2',[]) +*!* AddProperty(poFirma,'b_swift3',[]) +*!* AddProperty(poFirma,'b_adresa3',[]) +*!* ************************************************ +*!* pcExplicatieContract = [] +*!* *!* modificare ROAFACTURARE v 2.0.58 +*!* If poDate.nRelistare = 0 +*!* poDate.nSalveazaAtasamente = Nvl(citeste_optiune_firma([ATASAMENTEFACT]),0) +*!* Endif +*!* *!* modificare ROAFACTURARE v 2.0.58 ^ + +*!* alege_optiuni_listare_facturare() +*!* If glAlegeBanca +*!* alege_banci_facturare() +*!* Endif +*!* *!* modificare ROAFACTURARE v 2.0.46 ^ + +*!* Select crsfactura +*!* Calculate Max(Round(Nvl(proc_tvav,1),2)) To poDate.proc_tva +*!* poDate.proc_tva = poDate.proc_tva*100-100 + +*!* *!* modificare v 2.0.67 ^ +*!* *!* prelucreaza_factura(poDate.discount_evidentiat,pnTipFacturare,poDate.in_valuta,gnPretListSubunitati) && ofacturare_comun.prg +*!* prelucreaza_factura([crsfactura],[crsfacturaset],[crsfacturafinala],poDate.discount_evidentiat,poDate.in_valuta,gnPretListSubunitati) +*!* *!* modificare v 2.0.67 ^ + +*!* *!* modificare ROAFACTURARE v 2.0.46 +*!* *!* Local loExport +*!* *!* loExport = Createobject("oExportConfig") +*!* *!* lnVizualizare = Iif(Type('gnVizualFact')='N',gnVizualFact,1) +*!* *!* modificare ROAFACTURARE v 2.0.46 ^ +*!* lcSetare = [FACTURA] +*!* lnVizualizare = Iif(Type('gnVizualFact')='N',gnVizualFact,1) +*!* *!* 30 transfer catre subunitati pe baza de NIR +*!* *!* -6 intrare din gestiune valorica mf la pv - aviz expeditie +*!* Do Case +*!* Case Inlist(poDate.tip, 30, -6,-9) +*!* If Nvl(gnPretListSubunitati,2)=2 +*!* lcRaport = [AVIZ_TRANSFER] +*!* Else +*!* lcRaport = [AVIZ_TRANSFER_CTVA] +*!* Endif +*!* lcSetare = [AVIZ] +*!* lcExplicatieRaport = [avizul de transfer] +*!* *!* modificare ROAFACTURARE v 2.0.46 +*!* *!* lnVizualizare = Iif(Type('gnVizualAviz')='N',gnVizualAviz,1) +*!* lcSetareVizualizare = [PREVIZAVIZ] +*!* *!* modificare ROAFACTURARE v 2.0.46 ^ +*!* Case Inlist(poDate.tip,-10) + +*!* Select crsfacturafinala +*!* *!* REPLACE ALL pretctva WITH pretftva,valctva WITH valftva +*!* If Nvl(gnPretListSubunitati,2)=2 +*!* lcRaport = [AVIZ_TRANSFER] +*!* Else +*!* lcRaport = [AVIZ_TRANSFER_CTVA] +*!* Endif +*!* lcSetare = [AVIZ_TRANSFER] +*!* lcExplicatieRaport = [avizul de transfer] +*!* *!* modificare ROAFACTURARE v 2.0.46 +*!* *!* lnVizualizare = Iif(Type('gnVizualAviz')='N',gnVizualAviz,1) +*!* lcSetareVizualizare = [PREVIZAVIZ] +*!* *!* modificare ROAFACTURARE v 2.0.46 ^ +*!* Case poDate.tip = -7 +*!* lcRaport = [AVIZ] +*!* lcSetare = [AVIZ] +*!* lcExplicatieRaport = [avizul] +*!* lnVizualizare = Iif(Type('gnVizualAviz')='N',gnVizualAviz,1) +*!* lcSetareVizualizare = [PREVIZAVIZ] +*!* Otherwise +*!* lcExplicatieRaport = [factura] +*!* Do Case +*!* Case gnFormatFactura = 1 && format A4 +*!* lcRaport = [FACTURA] +*!* Case gnFormatFactura = 2 && format A5 +*!* lcRaport = [FACTURA_A5] +*!* Case gnFormatFactura = 3 +*!* If optiuni_format_listare(0) = 2 +*!* lcRaport = [FACTURA_A5] +*!* Else +*!* lcRaport = [FACTURA] +*!* Endif +*!* Endcase +*!* *!* modificare ROAFACTURARE v 2.0.46 +*!* lcSetareVizualizare = [PREVIZFACT] +*!* *!* modificare ROAFACTURARE v 2.0.46 ^ +*!* Endcase + + +*!* If poDate.in_valuta = 1 +*!* *!* modificare ROAFACTURARE v 2.0.46 +*!* poDate.text_aditional_invoice = poDate.text_aditional +*!* *!* modificare ROAFACTURARE v 2.0.46 ^ +*!* poDate.text_aditional = Iif(!Empty(Nvl(poDate.text_aditional,[])),poDate.text_aditional+Chr(13)+Chr(10),[])+; +*!* [Curs valutar = ]+Alltrim(Str(poDate.Curs,14,4))+[ RON / ] + Alltrim(poDate.nume_valuta) +*!* Endif + +*!* If poDate.incasat <> 0 +*!* poDate.text_aditional = Iif(!Empty(Nvl(poDate.text_aditional,[])),poDate.text_aditional+Chr(13)+Chr(10),[])+; +*!* [ Achitat cu numerar cu chitanta nr. ] + Alltrim(Str(poDate.nr_incasare)) + [ din ] + Dtoc(poDate.dataact) +*!* Endif + +*!* Select crsfacturafinala +*!* Calculate Cnt() To pnTotalPozitii For cantitate <> 0 +*!* Go Top +*!* *!* modificare ROAFACTURARE v 2.0.58 +*!* If poDate.nRelistare = 0 And poDate.eProforma = 0 And poDate.nSalveazaAtasamente = 1 +*!* goExport.export2pdf('crsfacturafinala', lcRaport,.F.,poDate.cDocAtasate) +*!* Endif +*!* *!* modificare ROAFACTURARE v 2.0.58 ^ +*!* lnRaspuns=6 +*!* Do While lnRaspuns=6 +*!* *!* modificare ROAFACTURARE v 2.0.46 +*!* goExport.export2frx('crsfacturafinala',lcRaport,.F.,lcSetareVizualizare,lcSetare) +*!* *!* loExport.listareUserReport('crsfacturafinala','FRX',lcRaport,lnVizualizare,lcSetare) +*!* *!* modificare ROAFACTURARE v 2.0.46 +*!* lnRaspuns=amessagebox("Doriti sa mai listati "+lcExplicatieRaport+"?",4+32+256,"Confirmare repetare listare") +*!* Enddo + +*!* If poDate.in_valuta = 1 +*!* *!* modificare ROAFACTURARE v 2.0.56 +*!* *!* lcRaportVal = lcRaport + [_VAL] +*!* *!* poDate.text_aditional = Strtran(poDate.text_aditional,[Curs valutar =],[Exchange rate =]) +*!* lcRaportVal = Strtran(lcRaport,[FACTURA],[INVOICE]) +*!* *!* modificare ROAFACTURARE v 2.0.56 ^ +*!* Select crsfacturafinalaval +*!* Calculate Cnt() To pnTotalPozitii For cantitate <> 0 +*!* Go Top +*!* *!* modificare ROAFACTURARE v 2.0.58 +*!* If poDate.nRelistare = 0 And poDate.eProforma = 0 And poDate.nSalveazaAtasamente = 1 +*!* goExport.export2pdf('crsfacturafinalaval', lcRaportVal,.F.,poDate.cDocAtasate) +*!* Endif +*!* *!* modificare ROAFACTURARE v 2.0.58 ^ + +*!* lnRaspuns=6 +*!* Do While lnRaspuns=6 +*!* *!* modificare ROAFACTURARE v 2.0.46 +*!* goExport.export2frx('crsfacturafinalaval',lcRaportVal,.F.,lcSetareVizualizare,lcSetare) +*!* *!* loExport.listareUserReport('crsfacturafinalaval','FRX',lcRaportVal,lnVizualizare,lcSetare) +*!* *!* modificare ROAFACTURARE v 2.0.46 ^ +*!* lnRaspuns=amessagebox("Doriti sa mai listati factura in valuta?",4+32+256,"Confirmare repetare listare") +*!* Enddo +*!* Use In crsfacturafinalaval +*!* Endif + +*!* *!* modificare ROAFACTURARE v 2.0.46 +*!* If poDate.listare_lista_livrare = 1 +*!* *!* modificare v 2.0.67 +*!* *!* prelucreaza_lista_livrare(pnTipFacturare) +*!* prelucreaza_lista_livrare() +*!* *!* modificare v 2.0.67 ^ +*!* If Reccount('crslistalivrare') > 0 +*!* goExport.export2frx('crslistalivrare','lista_livrare') +*!* Else +*!* amessagebox("Nu exista inregistrari pentru lista de livrare!",48,"Atentie") +*!* Endif +*!* Use In crslistalivrare +*!* Endif +*!* *!* Release loExport +*!* *!* modificare ROAFACTURARE v 2.0.46 ^ +*!* *!* modificare ROAFACTURARE v 2.0.58 +listeaza_ofacturare() +If poDate.nRelistare = 0 And poDate.eProforma = 0 And poDate.nSalveazaAtasamente = 1 +*!* poDate.scrieAtasamente() + lnSucces2 = goExecutor.oexecute([COMMIT]) +Endif +*!* *!* modificare ROAFACTURARE v 2.0.58 ^ +*!* modificare ROAFACTURARE v 2.0.77 ^ +Endproc +******************************************** SFARSIT: listeaza_ofacturare_stoc ********************************************** +Procedure completeaza_facturacrs + Lparameters tcCursor + Local lnPretCuTva + lnPretCuTva = Iif(Inlist(gnTipGest , 6,7), 1, 0) + If !Inlist(gnTipGest,6,7) + Insert Into (tcCursor) (id_temp,denumire,serie,cantitate,cu_tva,pretftva,pretctva,; + valftva,valtva,valctva,discountftva,discountctva,valdiscountftva,; + valdiscounttva, valdiscountctva, valdiminuatftva, valdiminuattva, valdiminuatctva, proc_tvav,id_jtva_coloana,um,codmat,codbare,; + vpretftva,vvalftva,vvaltva,vdiscountftva,vvaldiscountftva,vvaldiscounttva,; + vvaldiminuatftva,vvaldiminuattva,vvaldiminuatctva,gestionabil,id_rul_aux,explicatie,lot) ; + Select Recno() As id_temp,denumire, Nvl(serie,Space(100)) As serie, cante As cantitate,m.lnPretCuTva As cu_tva,; + Round(pretv,gnPPretV) As pretftva,; + Round(pretv,gnPPretV) + Round(Round(pretv,gnPPretV) * (proc_tvav-1),gnPPretV) As pretctva,; + Round(Round(pretv,gnPPretV)*cante,gnPc) As valftva,; + ROUND(Round(pretv*cante,gnPc)*(proc_tvav-1),gnPc) As valtva, ; + Round(Round(pretv,gnPPretV)*cante,gnPc) + Round(Round(pretv*cante,gnPc)*(proc_tvav-1),gnPc) As valctva, ; + ROUND(discunitar,gnPPretV) As discountftva,; + ROUND(discunitar,gnPPretV)+Round(Round(discunitar,gnPPretV)*(proc_tvav-1),gnPPretV) As discountctva,; + Round(Round(discunitar,gnPPretV)*cante,gnPc) As valdiscountftva, ; + ROUND(Round(discunitar*cante,gnPc)*(proc_tvav-1),gnPc) As valdiscounttva, ; + Round(Round(discunitar,gnPPretV)*cante,gnPc) + Round(Round(discunitar*cante,gnPc)*(proc_tvav-1),gnPc) As valdiscountctva,; + Round(Round(pretv-discunitar,gnPPretV)*cante,gnPc) As valdiminuatftva,; + ROUND(Round((pretv-discunitar)*cante,gnPc)*(proc_tvav-1),gnPc) As valdiminuattva,; + ROUND(Round(Round(pretv-discunitar,gnPPretV)*cante,gnPc)*proc_tvav,gnPc) As valdiminuatctva,; + proc_tvav,id_jtva_coloana, Nvl(um,Space(50)) As um, Nvl(codmat,Space(50)) As codmat, Nvl(codbare,Space(50)) As codbare,; + Round(pretvval,gnPVal) As vpretftva,; + ROUND(Round(pretvval,gnPVal)*cante,gnPVal) As vvalftva,; + ROUND(Round(Round(pretvval,gnPVal)*cante,gnPc)*(proc_tvav-1),gnPVal) As vvaltva,; + 0 As vdiscountftva,0 As vvaldiscountftva,0 As vvaldiscounttva,; + Round(Round(pretvval-0,gnPVal)*cante,gnPVal) As vvaldiminuatftva,; + ROUND(Round((pretvval-0)*cante,gnPVal)*(proc_tvav-1),gnPVal) As vvaldiminuattva,; + ROUND(Round(Round(pretvval-0,gnPVal)*cante,gnPVal)*proc_tvav,gnPVal) As vvaldiminuatctva,; + 1 As gestionabil,id_rul_aux,IIF(EMPTY(NVL(FIELD('explicatie',"rul_temp"),'')),'',explicatie), Nvl(lot,Space(20)) As lot From rul_temp Where cante <> 0 + Else + Insert Into (tcCursor) (id_temp,denumire,serie,cantitate,cu_tva,pretftva,pretctva,; + valftva,valtva,valctva,discountftva,discountctva,valdiscountftva,; + valdiscounttva, valdiscountctva, valdiminuatftva, valdiminuattva, valdiminuatctva, proc_tvav,id_jtva_coloana,um,codmat,codbare,; + vpretftva,vvalftva,vvaltva,vdiscountftva,vvaldiscountftva,vvaldiscounttva,; + vvaldiminuatftva,vvaldiminuattva,vvaldiminuatctva,gestionabil,id_rul_aux,explicatie,lot) ; + Select Recno() As id_temp,denumire, Nvl(serie,Space(100)) As serie, cante As cantitate,m.lnPretCuTva As cu_tva,; + Round(pretv,gnPPretV) As pretftva,; + Round(pretv+tvav,gnPPretV) As pretctva,; + Round(Round((pretv+tvav),gnPPretV)*cante,gnPc) - Round(Round((pretv+tvav)*cante,gnPc)*(proc_tvav-1)/proc_tvav,gnPc) As valftva, ; + Round(Round((pretv+tvav)*cante,gnPc)*(proc_tvav-1)/proc_tvav,gnPc) As valtva, ; + Round(Round((pretv+tvav),gnPPretV)*cante,gnPc) As valctva, ; + Round(Round(discunitar,gnPPretV)/proc_tvav,gnPPretV) As discountftva,; + ROUND(discunitar,gnPPretV) As discountctva, ; + ROUND(Round(discunitar,gnPPretV)*Nvl(cante,1),gnPc) - Round(Round(Round(discunitar,gnPPretV)*Nvl(cante,1),gnPc)*(proc_tvav-1)/proc_tvav, gnPc) As valdiscountftva,; + Round(Round(Round(discunitar,gnPPretV)*Nvl(cante,1),gnPc)*(proc_tvav-1)/proc_tvav, gnPc) As valdiscounttva,; + Round(Round(discunitar,gnPPretV)*cante,gnPc) As valdiscountctva, ; + ROUND((Round((pretv+tvav),gnPPretV)-Round(discunitar,gnPPretV))*Nvl(cante,1),gnPc) - ; + Round(Round((Round((pretv+tvav),gnPPretV)-Round(discunitar,gnPPretV))*Nvl(cante,1),gnPc)*(proc_tvav-1)/proc_tvav, gnPc) As valdiminuatftva,; + Round(Round((Round((pretv+tvav),gnPPretV)-Round(discunitar,gnPPretV))*Nvl(cante,1),gnPc)*(proc_tvav-1)/proc_tvav, gnPc) As valdiminuattva, ; + Round((Round((pretv+tvav),gnPPretV)-Round(discunitar,gnPPretV))*Nvl(cante,1),gnPc) As valdiminuatctva, ; + proc_tvav,id_jtva_coloana, Nvl(um,Space(50)) As um,Nvl(codmat,Space(50)) As codmat, Nvl(codbare,Space(50)) As codbare, Round(pretvval,gnPVal) As vpretftva,; + ROUND(Round(pretvval,gnPVal)*cante,gnPVal) As vvalftva,; + ROUND(Round(Round(pretvval,gnPVal)*cante,gnPVal)*(proc_tvav-1),gnPVal) As vvaltva,; + 0 As vdiscountftva,0 As vvaldiscountftva,0 As vvaldiscounttva,; + Round(Round(pretvval-0,gnPVal)*cante,gnPVal) As vvaldiminuatftva,; + ROUND(Round((pretvval-0)*cante,gnPVal)*(proc_tvav-1),gnPVal) As vvaldiminuattva,; + ROUND(Round(Round(pretvval-0,gnPVal)*cante,gnPVal)*proc_tvav,gnPVal) As vvaldiminuatctva,; + 1 As gestionabil,id_rul_aux,IIF(EMPTY(NVL(FIELD('explicatie',"rul_temp"),'')),'',explicatie), Nvl(lot,Space(20)) As lot From rul_temp Where cante <> 0 + *!* v 2.0.52 + *!* nu am discount la vanzare - si era formula gresita - trebuia sa plece de la pretv+tvav + *!* Round(Round(pretv-discunitar,gnPc)*cante,gnPc) As valdiminuatftva,; + *!* ROUND(Round((pretv-discunitar)*cante,gnPc)*(proc_tvav-1),gnPc) As valdiminuattva,; + *!* ROUND(Round(Round(pretv-discunitar,gnPc)*cante,gnPc)*proc_tvav,gnPc) As valdiminuatctva, + *!* v 2.0.52 ^ + Endif +Endproc +******************************************************************************************************************************* +PROCEDURE recalculeaza_cursuri + LPARAMETERS tcCursorCursuri + SELECT (tcCursorCursuri) + SCAN + + ENDSCAN +ENDPROC +******************************************************************************************************************************* + +FUNCTION IdSet2TipFacturare + LPARAMETERS tnIdSet + LOCAL lnTip + lnTip = -1 + + Do Case + Case Inlist(tnIdSet,73,222,223,224) + lnTip = -1 + Case Inlist(tnIdSet,79,83,206,225,271,272) + lnTip = -2 + Case Inlist(tnIdSet,61,62,63,102,103,226,227) + lnTip = -3 + Case Inlist(tnIdSet,64,65) + lnTip = -4 + Case Inlist(tnIdSet,236,240,241,242,255,256) + && 236 intrare din gestiune valorica - aviz expeditie, 240 + inregistrare cantitativ in chiosc + && 241 = 236, 242 = 240 pe pagina marfa la pret de achizitie + lnTip = -6 + Case INLIST(tnIdSet, 238,260) && aviz de retur - valoric + lnTip = -7 + Case INLIST(tnIdSet , 239,259) && factura de retur - valorica + lnTip = -8 + Case INLIST(tnIdSet, 243,261,233, 270) && Protocol cu TVA; 270 protocol marfa la pret de vanzare + lnTip = -9 + Case INLIST(tnIdSet, 244,262) && Sponsorizare + lnTip = -10 + Case InList(tnIdSet,252,258) && Marfa la pret de achizitie * + lnTip = -11 + CASE tnIdSet = 267 && aviz de retur - marfa in custodie + lnTip = -13 + Otherwise + lnTip = -5 + ENDCASE + RETURN m.lnTip +ENDFUNC && IdSet2TipFacturare \ No newline at end of file diff --git a/COMUN/programe/oinainte_de.prg b/COMUN/programe/oinainte_de.prg new file mode 100644 index 0000000..b70f06f --- /dev/null +++ b/COMUN/programe/oinainte_de.prg @@ -0,0 +1,411 @@ +*!* 27.02.2012 +*!* marius.mutu +*!* verificare inainte_de in functie de optiune 0 = VERIFICARE, 1 = NU SE VERIFICA, 2 = INTREBARE UTILIZATOR + +*!* 14.07.2017 +*!* marius.mutu +*!* INAINTE_DE_STOC +*!* adaugat parametru tcListaIdGestiuni (optional) pentru verificarea unei liste de gestiuni la adaugare inventar + +******************************************* +* PROCEDURE INAINTE( tcProc, tcCont ) +* Data/ora : 10/27/04, 11:30:19 +* autor : liana.macinic +* descriere: + +****** PARAMETER BLOCK ************** +* Parametri : 2 +* Parameter 1: numele procedurii de pe server +* Parameter 2: contul +* +******************************************* + +*!* do inainte WITH "IREG_parteneri",lcContPart in oinainte_de.prg + +Procedure INAINTE( tcProc, tcCont, tcVMesaj, tcVTip, tcExceptii, tcCoresp, tnLuna, tnAn ) + Local lcProc, lcCont, lcMesaj, lcTip, llProgress, lnLuna, lnAn + + *!* 27.02.2012 + If Type('gnVerificareInainte') <> 'N' + Local gnVerificareInainte + gnVerificareInainte = 0 + Endif + + *** FARA VERIFICARE + If gnVerificareInainte = 1 + Wait Window 'Nu se verifica corelatiile...' Nowait + Return + Endif + + *** INTREBARE UTILIZATOR + If gnVerificareInainte = 2 + lnOptiune = xmenu("\ 'N' + Local gnVerificareInainte + gnVerificareInainte = 0 + Endif + + *** FARA VERIFICARE + If gnVerificareInainte = 1 + Wait Window 'Nu se verifica corelatiile...' Nowait + Return + Endif + + *** INTREBARE UTILIZATOR + If gnVerificareInainte = 2 + lnOptiune = xmenu("\ 'null', m.lcIdGestiune, 'toate gestiunile') + ; + IIF(m.tnTipGest = 2, ' tip materii prime/materiale', ; + IIF(m.tnTipGest = 3, ' tip obiecte inventar', ; + IIF(m.tnTipGest = 4, ' tip produse', ; + IIF(m.tnTipGest = 5, ' tip marfa pret achizitie', ; + IIF(m.tnTipGest = 6, ' tip marfa pret vanzare', ; + IIF(m.tnTipGest = 7, ' tip marfa pret achizitie*','')))))) NOWAIT + + lnIdGestiune = Iif(LOWER(m.lcIdGestiune) = 'null', Null, Int(Val(m.lcIdGestiune))) + + lcSql = "select pack_inainte_de.inainte_de_stoc(" + Alltrim(Str(tnAn)) + "," + Alltrim(Str(tnLuna)) + "," + ; + Alltrim(Str(tnTipGest)) + "," + Alltrim(Str(tnStocObinv)) + "," + Iif(Isnull(gnIdSucursala), "null", Alltrim(Str(gnIdSucursala))) + "," + Iif(Empty(Nvl(m.lnIdGestiune, '')), "null", Alltrim(Str(lnIdGestiune))) + ") as valoare from dual" + lcCursor = [crsRezultate] + lnSucces = goExecutor.oExecute(lcSql, lcCursor) + + If lnSucces < 0 + aMessagebox(goExecutor.cEroare, 0 + 16, "Eroare") + ELSE + Select crsRezultate + IF !EMPTY(ALLTRIM(Nvl(valoare, ''))) + lcValoare = lcValoare + ALLTRIM(Nvl(valoare, '')) + Chr(13) + Chr(10) + ENDIF + Endif + Use In (Select('crsRezultate')) + Endfor + + If !Empty(m.lcValoare) + aMessagebox(m.lcValoare, 0 + 48, "Verificare") + ENDIF + + Select (m.lcSelect) + Return m.lcValoare +Endproc && INAINTE_DE_STOC diff --git a/COMUN/programe/oinit_optiuni.prg b/COMUN/programe/oinit_optiuni.prg new file mode 100644 index 0000000..fac1122 --- /dev/null +++ b/COMUN/programe/oinit_optiuni.prg @@ -0,0 +1,883 @@ +*!* citeste_optiune, scrie_optiune +parametru tValue2 + +*** OINIT_OPTIUNI.PRG + +glLuna_neplatita = .F. +glLunaInchisa = .F. + +*!* gnLuna = Round(Val(goCalendar.nl),0) +*!* gnAn = Round(Val(goCalendar.An),0) + +gnLuna = goCalendar.luna +gnAn = goCalendar.anul + +pcNl = Padl(Alltrim(Str(gnLuna)), 2, '0') +pcAn = Alltrim(Str(gnAn)) +m.nl = m.pcNl +m.an = m.pcAn +gcFirma = Upper(Alltrim(goFirma.firma)) +If Type('gnIdFirma') <> 'U' + gnIdFirma = goFirma.Id_Firma +Endif +gnIdFirma = goFirma.Id_Firma + + +*!* 08.02.2008 SUCURSALE +Public gnIdSucursala, gnIdMama, glEMama, gcCondSucursala +gnIdSucursala = Iif(Nvl(goFirma.id_mama, 0) <> 0, goFirma.Id_Firma, Null) && DACA ESTE SUCURSALA - ID-UL SUCURSALA PE CARE IL SCRIU IN TABELE +*gnIdSucursala = Iif(Nvl(goFirma.id_firma,0) <> 0, goFirma.Id_Firma, Null) +gnIdMama = Iif(Nvl(goFirma.id_mama, 0) <> 0, goFirma.id_mama, Null) +glEMama = Nvl(goFirma.e_mama, 0) <> 0 +gcCondSucursala = Iif(!Isnull(gnIdSucursala), ' AND id_sucursala = ?gnIdSucursala ', '') && CONDITIA FOLOSITA LA SELECTIILE DIN JURNAL, RULAJ, IREG_PARTENERI +*!* 08.02.2008 SUCURSALE ^ + +*!* gcSchemaPath = ADDBS(dirgen) + gcS + "\" +*!* m.calefirma = gcSchemaPath +*!* IF !DIRECTORY(gcSchemaPath) +*!* MD (gcSchemaPath) +*!* ENDIF + +*!* gnNivelUtilizator = getNivel(gnIdProgram,gnIdUtil,gnId_Firma) +*!* gcAcces = getAcces(gnIdProgram,gnIdUtil,gnId_Firma) + + +m.an = Alltrim(Str(gnAn)) +m.nl = Padl(Alltrim(Str(gnLuna)), 2, '0') +m.NumeFirma = gcFirma +m.flung = gcFirma +m.numeluna = m.nl +m.luna = m.nl +m.ctvam = goCalendar.ctvam +m.ctvai = goCalendar.ctvai +m.antet = goFirma.antet +gcAntet = goFirma.antet +*!* adaugat 25.02.2014 / liana neagu /ROARES +Public gcNumeUtilEnt +gcNumeUtilEnt = [] +lcSql = [begin pack_def.citesteNumeEnt(?gnIdUtil,?@gcNumeUtilEnt); end;] +If !goExecutor.oExecuta(lcSql) + gcNumeUtilEnt = gcUserNameApp +Endif +*!* adaugat 25.02.2014 ^ + +*!* adaugat 23.09.2011 / MARIUS ATANASIU / ROAAUTO +Public gnCotaTVAStandard +gnCotaTVAStandard = goCalendar.ctvam +*!* adaugat 23.09.2011 ^ +*** ADAUGAT 01.11.2005 +*** MARIUS MUTU +glLunaInchisa = is_luna_blocata(gcS, gnId_Prg_Owner, gnAn, gnLuna) + + +*!* 25.01.2012 +lcDeclarant = Alltrim(goFirma.declarant) +AddProperty(goFirma, 'nume_declarant', m.lcDeclarant) +AddProperty(goFirma, 'prenume_declarant', '') +lnNraparitie = At(" ", m.lcDeclarant) +If lnNraparitie > 0 + goFirma.nume_declarant = Substr(m.lcDeclarant, 1, m.lnNraparitie) + goFirma.prenume_declarant = Substr(m.lcDeclarant, m.lnNraparitie + 1) +Endif +*!* 25.01.2012 ^ + +verificare_versiune() +*---------------------- deschid lunilean , sa iau denumirea completa a lunii +Local lcNumeLuna +Store "" To lcNumeLuna +If Used("v_lunilean") + Use In v_lunilean +Endif +lcSelect = [select * from lunilean ] +lcCursor = [v_lunilean] +lnSucces = goExecutor.oExecute(lcSelect, lcCursor) +If lnSucces < 0 + AMESSAGEBOX('Eroare la selectie ' + goExecutor.cEroare) + Return +Endif +Select v_lunilean +Locate For nrluna = gnLuna +If Found() + lcNumeLuna = Alltrim(v_lunilean.numeluna) +Endif +*----------------------deschid lunilean , sa iau denumirea completa a lunii +If Type("NUMEPROGRAM") <> 'C' Or Empty(NUMEPROGRAM) + NUMEPROGRAM = gcAppName +Endif +capapl = NUMEPROGRAM + " Firma " + NumeFirma + "- Luna contabila: " + lcNumeLuna + " " + M.an + " " +*----------------------- +goApp.SetCaption(capapl) +Release lcNumeLuna + +If Used("v_lunilean") + Use In v_lunilean +Endif + +*!* 06.09.2012 / marius.atanasiu +*!* daca schimbam luna, nu se schimba gcTempPath si la BackupXML imi cauta xml-urile in firma anterioara +*!* *!* 07.06.2007 +*!* *!* marius.mutu +*!* *!* daca este definita gcTempPath in main.prg - goApi.GetTempPath() +*!* If Empty(gcTempPath) OR 'SITFIN'$UPPER(gcAppName) +*!* *!* gcTempPath = [c:\contafin\temp\] + gcS + [\] +*!* *!* IF !DIRECTORY(gcTempPath) +*!* *!* MD (gcTempPath) +*!* *!* ENDIF +&& obiectul public goApi trebuie creat in programul principal, daca nu, este creat in oinit_optiuni.prg +If Type('goApi') = 'U' + Public goApi + goApi = Newobject("wwAPI", "wwAPI.prg") +Endif +gcTempPath = Addbs(shortpath(goApi.GetTempPath())) + gcS + [\] && WWAPI.PRG +If !Directory(gcTempPath) + Md (gcTempPath) +Endif +*!* Endif +*!* 06.09.2012 ^ +m.NIVEL = 0 +m.UTILIZATOR = gcUserNameApp + + + +*!* STORE 0 TO gnPA && nr. de zecimale afisare +*!* STORE 0 TO gnPC && nr. de zecimale calcul + +If lnSucces > 0 + && setez variabilele de sesiune pe server + lnSucces = InitSesiune() && IN oInit_Optiuni.prg +Endif + +If lnSucces > 0 + Do optiuni_firma + Do coresp_cont_tipgest + Do actualizeaza_optiuni_utilizator + Do actualizeaza_optiuni +Endif + +If Type('gnTraducere') = 'N' + glTraducere = gnTraducere = 1 +Endif + +Return lnSucces + +************************************** INCEPUT: actualizeaza_optiuni_program *************************************** +Function actualizeaza_optiuni_program + Local llReturn + Store .F. To llReturn + lcSql = 'select * from ' + gcS + '.optiuni where program = ?gcNumeProgram order by varname' + lcCursor = 'v_optiuni' + + lnSucces = goExecutor.oExecute(lcSql, lcCursor) + + If lnSucces < 0 + AMESSAGEBOX('ACTUALIZEAZA_OPTIUNI_PROGRAM ' + goExecutor.cEroare, 0 + 16, "Eroare") + Return + Else + Select(lcCursor) + Scan For !Empty(varname) + lcvarname = Alltrim(&lcCursor..varname) + lcvartype = Upper(Alltrim(&lcCursor..Vartype)) + Do Case + Case lcvartype = "CHARACTER" + Public gc&lcvarname. + luvarvalue = Alltrim(&lcCursor..varvalue) + gc&lcvarname. = luvarvalue + Case lcvartype = "CURRENCY" + Public gy&lcvarname. + luvarvalue = Ntom(Val(&lcCursor..varvalue)) + gy&lcvarname. = luvarvalue + Case lcvartype = "NUMERIC" + Public gn&lcvarname. + luvarvalue = Val(&lcCursor..varvalue) + gn&lcvarname. = luvarvalue + Case lcvartype = "DATETIME" + Public gt&lcvarname. + luvarvalue = Ctot(&lcCursor..varvalue) + gt&lcvarname. = luvarvalue + Case lcvartype = "DATE" + Public gd&lcvarname. + luvarvalue = Ctod(&lcCursor..varvalue) + gd&lcvarname. = luvarvalue + Case lcvartype = "LOGICAL" + Public gl&lcvarname. + luvarvalue = Iif(Inlist(Upper(Left(&lcCursor..varvalue, 1)), "T", "Y"), .T., .F.) + gl&lcvarname. = luvarvalue + Otherwise + pcmsgbuff = "Tip de variabila globala invalid!" + pcmsgbuff = pcmsgbuff + Chr(13) + Chr(13) + "Numele variabilei: " + lcvarname + pcmsgbuff = pcmsgbuff + Chr(13) + "Tipul variabilei: " + lcvartype + pcmsgbuff = pcmsgbuff + Chr(13) + Chr(13) + "Contactati suportul tehnic." + = AMESSAGEBOX(pcmsgbuff, 48) + pcmsgbuff = "" + Endcase + Endscan + + llReturn = .T. + If Used('v_optiuni') + Use In v_optiuni + Endif + Endif + Return llReturn +Endfunc +******************************************* SFARSIT: actualizeaza_optiuni_program ******************************************* + + + +* PROCEDURE optiuni_firma( ) +* Date : 15.11.2004, 09:33:59 +* author : catalin.neagu +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* INCEPUT:optiuni_f ******************************************* +Procedure optiuni_firma + + *!* modificat 22.03.2006 + *!* mutu.marius + *!* am folosit gcUserName in loc de gcS (adica "CONTAFIN_ORACLE") si am modificat procedura SCRIE_OPTIUNI + + lcSql = [begin SCRIE_OPTIUNI('] + gcUserName + ['); end;] + lnSucces = goExecutor.oExecute(lcSql) + + If lnSucces < 0 + AMESSAGEBOX('SCRIE_OPTIUNI ' + goExecutor.cEroare, 0 + 16, "Eroare") + Return + Endif + lnSucces = -1 + lnSucces = update_optiuni() + + If lnSucces > 0 + LCFIS = 'v_optiuni' + + *-- DECLAR VARIABILELE PUBLICE SI LE INITIALIZEZ ex: pcEroriPath,pcServerPath + + Select(LCFIS) + Scan For !Empty(varname) And (Isnull(programe) Or gcNumeProgram $ programe) + lcvarname = Alltrim(&LCFIS..varname) + lcvartype = Upper(Alltrim(&LCFIS..Vartype)) + Do Case + Case lcvartype = "CHARACTER" + Public gc&lcvarname. + luvarvalue = Alltrim(&LCFIS..varvalue) + luvarvalue2 = Alltrim(&LCFIS..varvalue2) + IF !EMPTY(NVL(luvarvalue,'')) OR (EMPTY(NVL(luvarvalue,'')) AND EMPTY(NVL(luvarvalue2,''))) + gc&lcvarname. = m.luvarvalue + ELSE + gc&lcvarname. = m.luvarvalue2 + ENDIF + Case lcvartype = "CURRENCY" + Public gy&lcvarname. + luvarvalue = Ntom(Val(&LCFIS..varvalue)) + gy&lcvarname. = luvarvalue + Case lcvartype = "NUMERIC" + Public gn&lcvarname. + luvarvalue = Val(&LCFIS..varvalue) + gn&lcvarname. = luvarvalue + Case lcvartype = "DATETIME" + Public gt&lcvarname. + luvarvalue = Ctot(&LCFIS..varvalue) + gt&lcvarname. = luvarvalue + Case lcvartype = "DATE" + Public gd&lcvarname. + luvarvalue = Ctod(&LCFIS..varvalue) + gd&lcvarname. = luvarvalue + Case lcvartype = "LOGICAL" + Public gl&lcvarname. + luvarvalue = Iif(Inlist(Upper(Left(&LCFIS..varvalue, 1)), "T", "Y"), .T., .F.) + gl&lcvarname. = luvarvalue + Otherwise + pcmsgbuff = "Tip de variabila globala invalid!" + pcmsgbuff = pcmsgbuff + Chr(13) + Chr(13) + "Numele variabilei: " + lcvarname + pcmsgbuff = pcmsgbuff + Chr(13) + "Tipul variabilei: " + lcvartype + pcmsgbuff = pcmsgbuff + Chr(13) + Chr(13) + "Contactati suportul tehnic." + = AMESSAGEBOX(pcmsgbuff, 48) + pcmsgbuff = "" + Endcase + Endscan + + If Used('v_optiuni') + Use In v_optiuni + Endif + Public gnZ + m.gnZ = 0 + If Type('gnPA') = 'N' + gnZ = m.gnPA + Endif + lnSucces = optiuni_speciale() + Endif + Return lnSucces +Endproc +******************************************* SFARSIT: optiuni_f ******************************************* + +* PROCEDURE viz_optiuni( ) +* Date : 15.11.2004, 12:31:24 +* author : catalin.neagu +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* INCEPUT:viz_optiuni ******************************************* +Procedure viz_optiuni + Lparameters tcS, tnId_prg_owner + + Local lnSucces, lcS + If Empty(tcS) + lcS = "CONTAFIN_ORACLE" + Else + lcS = tcS + Endif + + Private popt + Store '' To popt + + Local lcschema, lcSelect + lcschema = [] + lcSelect = [select * from ] + lcS + [.optiuni ] + lcfiltru = [] + If !Empty(tnId_prg_owner) + lcFiltuOriginal = [id_prg_owner=] + Alltrim(Str(tnId_prg_owner)) + Else + lcFiltuOriginal = [] + Endif + lcOrder = [varname] + lcGroup = [] + llModParam = .T. + llAfisare = .F. + gencursor('popt', 'v_optiuni', lcSelect, lcfiltru, lcschema, lcOrder, llAfisare, lcGroup, llModParam, lcFiltuOriginal) + popt.ca_baza1.afisare() + + ofrmopt = Createobject('frm_optiuni') + ofrmopt.cSchema = lcS + ofrmopt.Show(1) + Release ofrmopt + +Endproc +******************************************* SFARSIT: viz_optiuni ******************************************* + +Procedure optiuni_cote_tva + + lcSql = [begin SCRIE_COTE_TVA('] + gcS + [',] + pcAn + [, ] + pcNl + [); end;] + lnSucces = goExecutor.oExecute(lcSql) + + If lnSucces < 0 + AMESSAGEBOX('SCRIE_COTE_TVA ' + goExecutor.cEroare, 0 + 16, "Eroare") + Return + Endif +Endproc + +* PROCEDURE viz_cote_tva( Tcs ) +* Date : 04/01/05, 11:22:25 +* author : catalin.neagu +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 1 +* Parameter 1: +* +******************************************* INCEPUT:viz_cote_tva ******************************************* +Procedure viz_cote_tva + LPARAMETERS tcS, tnAn, tnLuna + + Local lnSucces, lcS + If Empty(tcS) + lcS = "CONTAFIN_ORACLE" + Else + lcS = tcS + Endif + lcAn = Alltrim(Str(tnAn)) + lcLuna = Alltrim(Str(tnLuna)) + Private pcot, pcschema1, pcselect1 + Store '' To pcot + pcschema1 = [''] + pcselect1 = ['select * from ] + lcS + [.cote_tva where 1=2'] + pcfiltru1 = [ an = ] + lcAn + [and luna = ] + lcLuna + pcOrder1 = [an, luna] + gencursor('pcot', 'v_cote_tva', pcselect1, pcfiltru1, pcschema1, pcOrder1) + pcot.ca_baza1.afisare() + ofrmcot = Createobject('frm_cote_tva') + ofrmcot.cSchema = lcS + ofrmcot.Show(1) + Release ofrmcot + +Endproc +******************************************* SFARSIT: viz_cote_tva ******************************************* + +* PROCEDURE optiuni_plcont( tcs ) +* Date : 04/01/05, 13:04:09 +* author : catalin.neagu +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 1 +* Parameter 1: +* +******************************************* INCEPUT:optiuni_plcont ******************************************* +Procedure optiuni_plcont() + + lcSql = [begin SCRIE_PLCONT('] + gcS + [',] + gnAn + [); end;] + lnSucces = goExecutor.oExecute(lcSql) + + If lnSucces < 0 + AMESSAGEBOX('SCRIE_PLCONT ' + goExecutor.cEroare, 0 + 16, "Eroare") + Return + Endif +Endproc + + +******************************************* SFARSIT: optiuni_plcont ******************************************* +* PROCEDURE optiuni_notec( ) +* Date : 04/01/05, 13:05:32 +* author : catalin.neagu +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* INCEPUT:optiuni_notec ******************************************* +Procedure optiuni_notec( ) + + lcSql = [begin SCRIE_notec('] + gcS + ['); end;] + lnSucces = goExecutor.oExecute(lcSql) + + If lnSucces < 0 + AMESSAGEBOX('SCRIE_notec ' + goExecutor.cEroare, 0 + 16, "Eroare") + Return + Endif +Endproc + +******************************************* SFARSIT: optiuni_notec ******************************************* + +* PROCEDURE viz_exceptii( ) +* Date : 04/01/05, 13:40:35 +* author : catalin.neagu +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* INCEPUT:viz_exceptii ******************************************* +Procedure viz_exceptii( tcS ) + Local lnSucces, lcS + If Empty(tcS) + lcS = "CONTAFIN_ORACLE" + Else + lcS = tcS + Endif + Private pex, pcschema1, pcselect1 + Store '' To pex + pcschema1 = [''] + pcselect1 = ['select * from ] + lcS + [.exceptii_ireg where 1=2'] + pcfiltru1 = [2=2] + gencursor('pex', 'v_exceptii_ireg', pcselect1, pcfiltru1, pcschema1) + pex.ca_baza1.afisare() + ofrmex = Createobject('frm_exceptii_ireg') + ofrmex.cSchema = lcS + ofrmex.Show(1) + Release ofrmex + +Endproc +******************************************* SFARSIT: viz_exceptii ******************************************* + +Procedure coresp_cont_tipgest + + lcSql = [begin SCRIE_CORESP_CONT_TIPGEST('] + gcS + ['); end;] + lnSucces = goExecutor.oExecute(lcSql) + + If lnSucces < 0 + lcMesaj = 'SCRIE_CORESP_CONT_TIPGEST ' + goExecutor.cEroare + ofrm_er = Createobject([frm_mesaj], [Eroare], [exclam.ico], [Avertizare], lcMesaj) + ofrm_er.Show(1) + Release ofrm_er + Return + Endif + +Endproc + + + +********************* INCEPUT Optiuni_speciale ********************** +* PROCEDURE Optiuni_speciale +* Date : 03/31/05, 08:48:45 +* author : marius.mutu +* description: + +Procedure optiuni_speciale + Public gnLunaRon, gnAnRon, gl406, glEFactura + + gnLunaRon = Val(Substr(Alltrim(gcDataRon), 1, 2)) + gnAnRon = Val(Substr(Alltrim(gcDataRon), 4, 4)) + If gnAn * 12 + gnLuna < gnAnRon * 12 + gnLunaRon + Store 0 To gnPA && nr. de zecimale afisare + Store 0 To gnPC && nr. de zecimale calcul + Store 0 To gnPCurs && nr. de zecimale curs + Store 0 To gnPPretV && nr. de zecimale pret vanzare + Store 0 To gnZ && gnPA + *!* ELSE + *!* Store 2 To gnPA && nr. de zecimale afisare + *!* Store 2 To gnPC && nr. de zecimale calcul + *!* Store 4 To gnPCurs && nr. de zecimale curs + ENDIF + + * Firma are activata SAFT 406 + gl406 = (TYPE('gnD406') = 'N' and m.gnD406 = 1) + * Firma are activata Efactura + glEFactura = (TYPE('gnEFactura') = 'N' and m.gnEFactura = 1) + +Endproc +********************* SFARSIT Optiuni_speciale ********************** + +*!* marius.mutu +*!* 21.02.2006 +*!* Seteaza variabile de sesiune: pack_sesiune.id_util, pack_sesiune.Luna, pack_sesiune.An, pack_sesiune.data_ron, pack_contafin.data_ron +*** InitSesiune =========================================================================== +Procedure InitSesiune + + Local lnSucces + lnSucces = 1 + + && setez variabilele de sesiune pe server + If lnSucces > 0 + lcSql = [begin pack_sesiune.set_Id_Util(?gnIdUtil); end;] + lnSucces = goExecutor.oExecute(lcSql) + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare, 0 + 16, "Eroare") + Endif + Endif + + If lnSucces > 0 + lcSql = [begin pack_sesiune.setluna(?gnLuna); pack_sesiune.setan(?gnAn); end;] + lnSucces = goExecutor.oExecute(lcSql) + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare, 0 + 16, "Eroare") + Endif + Endif + + *!* 09.04.2008 + *!* setare lunabal si anbal pentru view-urile vbalmama si vbalanamama + If lnSucces > 0 + lcSql = [begin pack_sesiune.setlunabal(?gnLuna); pack_sesiune.setanbal(?gnAn); end;] + lnSucces = goExecutor.oExecute(lcSql) + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare, 0 + 16, "Eroare") + Endif + Endif + *!* 09.04.2008 ^ + + If lnSucces > 0 + lcSql = [begin pack_contafin.SET_DATA_RON(?gcS); end;] + lnSucces = goExecutor.oExecute(lcSql) + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare, 0 + 16, "Eroare") + Endif + Endif + If lnSucces > 0 + lcSql = [begin pack_sesiune.set_data_ron(?gcS); end;] + lnSucces = goExecutor.oExecute(lcSql) + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare, 0 + 16, "Eroare") + Endif + Endif + + llSucces = initializeaza_sucursala() + If llSucces + llSucces = initializeaza_firma() + Endif + + lnSucces = Iif(llSucces, 1, -1) + + Return lnSucces + +Endproc && InitSesiune +*** END InitSesiune =========================================================================== +Procedure actualizeazaSetare + Lparameters tcSetare, tdData + Private pcSetare, pdData, pcValoareSetare, pcTipSetare + pcSetare = tcSetare + pdData = Date() + pcValoareSetare = [-] + pcTipSetare = [-] + lcSql = [{call citeste_ora_optiune(?pcSetare,?@pdData,?@pcValoareSetare,?@pcTipSetare)}] + lnSucces = goExecutor.oExecute(lcSql) + If lnSucces < 0 + AMESSAGEBOX(goExecutor.oPrelucrareEroare(), 0 + 16, "Eroare") + Else + Do Case + Case pcTipSetare = "CHARACTER" + luvarvalue = Alltrim(pcValoareSetare) + gc&pcSetare. = luvarvalue + Case pcTipSetare = "CURRENCY" + luvarvalue = Ntom(Val(pcValoareSetare)) + gy&pcSetare. = luvarvalue + Case pcTipSetare = "NUMERIC" + luvarvalue = Val(pcValoareSetare) + gn&pcSetare. = luvarvalue + Case pcTipSetare = "DATETIME" + luvarvalue = Ctot(pcValoareSetare) + gt&pcSetare. = luvarvalue + Case pcTipSetare = "DATE" + luvarvalue = Ctod(pcValoareSetare) + gd&pcSetare. = luvarvalue + Case pcTipSetare = "LOGICAL" + luvarvalue = Iif(Inlist(Upper(Left(pcValoareSetare, 1)), "T", "Y"), .T., .F.) + gl&pcSetare. = luvarvalue + Otherwise + pcmsgbuff = "Tip de variabila globala invalid!" + pcmsgbuff = pcmsgbuff + Chr(13) + Chr(13) + "Numele variabilei: " + pcSetare + pcmsgbuff = pcmsgbuff + Chr(13) + "Tipul variabilei: " + pcTipSetare + pcmsgbuff = pcmsgbuff + Chr(13) + Chr(13) + "Contactati suportul tehnic." + = AMESSAGEBOX(pcmsgbuff, 48) + pcmsgbuff = "" + Endcase + tdData = pdData + Endif +Endproc && actualizeazaSetare +*********************************************************************** + +*!* 16.06.2007 +*!* marius.mutu +*!* verificare versiune program - versiune baza date +*!* procedura de pe server intoarce nume_program:versiune_program daca este nevoie de actualizarea programului la versiunea +*!* sau db:versiune_db daca este nevoie de actualizarea bazei de date la versiunea +Procedure verificare_versiune + Local lcFileVersiuneDB, llOk, lcMesaj + Private pcReturnValue, pcNumeProgram, pcVersiuneDB, pcVersiuneProgram + llOk = .T. + lcMesaj = "" + pcReturnValue = "" && roacont:1.0.25 sau db:2007_06_16_2 + pcNumeProgram = Upper(gcNumeProgram) + pcVersiuneDB = "" + + pcVersiuneProgram = Get_Version() + lcFileVersiuneDB = gcAppPath + "versiune_db.txt" + If File(lcFileVersiuneDB) + pcVersiuneDB = Alltrim(Filetostr(lcFileVersiuneDB)) && 2007_06_15_01 + Endif + + lnSucces = goExecutor.oFunction2Value("pack_migrare.VerificaVersiune('" + pcNumeProgram + "', '" + pcVersiuneProgram + "', '" + pcVersiuneDB + "')", @pcReturnValue) + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare, 0 + 16, "Eroare") + Else + *!* SELECT COUNT(*) AS nr FROM versiune WHERE SUBSTR(script_final,4,13) = lcVersiuneDB INTO CURSOR crsVersiuneTemp + Do Case + Case pcNumeProgram $ Upper(pcReturnValue) + llOk = .F. + lcMesaj = "Trebuie actualizat " + pcNumeProgram + " la versiunea " + Getwordnum(pcReturnValue, 2, ":") + Chr(13) + Chr(10) + ; + "Versiunea actuala este " + Getwordnum(pcReturnValue, 3, ":") + + Case "DB" $ Upper(pcReturnValue) + llOk = .F. + lcMesaj = "Trebuie actualizata baza de date la versiunea " + Getwordnum(pcReturnValue, 2, ":") + Chr(13) + Chr(10) + ; + "Versiunea actuala este " + Getwordnum(pcReturnValue, 3, ":") + Endcase + Endif + + *!* SELECT versiune_program, versiune_bd FROM versiune_programe WHERE UPPER(PROGRAM) = UPPER(gcNumeProgram) + If !Empty(lcMesaj) + AMESSAGEBOX(lcMesaj, 0 + 48, "Actualizare") + Endif + Return llOk +Endproc && verificare_versiune +****************************************************************************************** +Function initializeaza_sucursala() + Local lcSel, lnSucces, llReturn + llReturn = .T. + lcSel = [begin pack_contafin.set_id_sucursala(?gnIdSucursala); end;] + lnSucces = goExecutor.oExecute(lcSel) + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare, 0 + 16, "Eroare") + llReturn = .F. + Endif + Release lcSel, lnSucces + Return llReturn +Endfunc +****************************************************************************************** +Function initializeaza_firma() + Local lcSel, lnSucces, llReturn + llReturn = .T. + lcSel = [begin pack_contafin.set_id_firma(?gnIdFirma); end;] + lnSucces = goExecutor.oExecute(lcSel) + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare, 0 + 16, "Eroare") + llReturn = .F. + Endif + Release lcSel, lnSucces + Return llReturn +Endfunc +************************************* INCEPUT: actualizeaza_optiuni_utilizator *************************************** +Procedure actualizeaza_optiuni_utilizator + Local lnSucces + Store .F. To llReturn + lcSql = 'select * from optiuni_util where id_util = ?gnIdUtil order by varname' + lcCursor = 'crsOptiuniUtilizator' + + lnSucces = goExecutor.oExecute(lcSql, lcCursor) + + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare, 0 + 16, "Eroare") + Endif + + Return lnSucces +Endproc +******************************************* SFARSIT: actualizeaza_optiuni_utilizator ******************************************* +******************************************* INCEPUT: citeste_optiune_utilizator******************************************* +Function citeste_optiune_utilizator + Lparameters tcOptiune + + Local lcOptiune, lcValOptiune + lcOptiune = tcOptiune + lcValOptiune = '' + If Used('crsOptiuniUtilizator') + Select Nvl(varvalue, '') As varvalue ; + From crsOptiuniUtilizator ; + With (Buffering = .T.) ; + Where Upper(Alltrim(varname)) = Upper(Alltrim(tcOptiune)) ; + Into Cursor crsOptiuneUtilizator + + Select crsOptiuneUtilizator + lcValOptiune = varvalue + Endif + Return m.lcValOptiune +Endfunc && citeste_optiune_utilizator +******************************************* SFARSIT: citeste_optiune_utilizator ******************************************* +******************************************* INCEPUT: scrie_optiune_utilizator******************************************* +Procedure scrie_optiune_utilizator + Parameters tcOptiune, tcValOptiune, tcDescriereOptiune + + Private pcOptiune, pcValOptiune, pcDescriereOptiune + pcOptiune = Upper(tcOptiune) + pcValOptiune = tcValOptiune + pcDescriereOptiune = tcDescriereOptiune + + *lcSql='update optiuni_util set varvalue = ?pcValOptiune where varname=?pcOptiune and id_util = ?gnIdUtil' + + *!* lcSql=[MERGE INTO optiuni_util ]+; + *!* [USING dual ]+; + *!* [on (UPPER(varname) = ?pcOptiune and id_util = ?gnIdUtil) ]+; + *!* [WHEN MATCHED THEN ]+; + *!* [ UPDATE SET varvalue = ?pcValOptiune ]+; + *!* [WHEN NOT MATCHED THEN ]+; + *!* [INSERT (varname, id_util, varvalue) ]+; + *!* [VALUES (?pcOptiune, ?gnIdUtil, ?pcValOptiune);] + + lcSql = [begin PACK_SESIUNE.SetOptiuneUtilizator(?pcOptiune,?gnIdUtil, ?pcValOptiune, ?pcDescriereOptiune); end;] + lnSucces = goExecutor.oExecute(lcSql) + + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare, 0 + 16, "Eroare") + Else + Select crsOptiuniUtilizator + Locate For Upper(varname) = pcOptiune + If Found() + Replace varvalue With pcValOptiune + Else + Insert Into crsOptiuniUtilizator (varname, id_util, vardesc, varvalue) Values (m.pcOptiune, m.gnIdUtil, m.pcDescriereOptiune, m.pcValOptiune) + Endif + ENDIF + TABLEUPDATE( 1, .F., 'crsOptiuniUtilizator') + + Return lnSucces +Endproc && scrie_optiune_utilizator +******************************************* SFARSIT: scrie_optiune_utilizator ******************************************* + +Procedure actualizeaza_optiuni + Local lnSucces + llReturn = .F. + lcSql = 'select * from optiuni order by varname' + lcCursor = 'crsOptiuni' + + USE IN (SELECT('crsOptiuni')) + lnSucces = goExecutor.oExecute(lcSql, lcCursor) + + If m.lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare, 0 + 16, "Eroare") + Endif + + Return m.lnSucces +Endproc +******************************************* SFARSIT: actualizeaza_optiuni ******************************************* + +******************************************* INCEPUT: citeste_optiune ******************************************* +Function citeste_optiune + Parameters tcOptiune, tlValue2 + * tlValue2: .T. optiunea se citeste din optiuni.varvalue2, in loc de optiuni.varvalue + + Local lcOptiune, lcValOptiune, lcSelect + lcOptiune = tcOptiune + lcValOptiune = '' + lcSelect = Select() + + Select crsOptiuni + Locate For Upper(Alltrim(varname)) = Upper(Alltrim(m.tcOptiune)) + If Found() + If m.tlValue2 + lcValOptiune = varvalue2 + Else + lcValOptiune = varvalue + Endif + Endif + + Select (m.lcSelect) + Return lcValOptiune +Endfunc && citeste_optiune +******************************************* SFARSIT: citeste_optiune ******************************************* + +******************************************* INCEPUT: scrie_optiune ******************************************* +Procedure scrie_optiune + Lparameters tcOptiune, tcValOptiune, tcDescriereOptiune, tlValue2 + * tlValue2: .T. optiunea se scrie in optiuni.varvalue2, in loc de optiuni.varvalue + + Private pcOptiune, pcValOptiune, pcDescriereOptiune, pcTipOptiune + + Local lcSql, lcValOptiune, lnSucces + pcOptiune = Upper(tcOptiune) + pcValOptiune = m.tcValOptiune + lcValOptiune = m.tcValOptiune + pcDescriereOptiune = tcDescriereOptiune + Do Case + Case Type('tcValOptiune') = 'C' + pcTipOptiune = 'CHARACTER' + Case Type('tcValOptiune') = 'N' + pcTipOptiune = 'NUMERIC' + lcValOptiune = TRANSFORM(m.tcValOptiune) + Case Inlist(Type('tcValOptiune'), 'D', 'T') + pcTipOptiune = 'DATE' + lcValOptiune = DTOC(m.tcValOptiune) + Case Type('tcValOptiune') = 'L' + pcTipOptiune = 'LOGICAL' + lcValOptiune = TRANSFORM(m.tcValOptiune) + Otherwise + pcTipOptiune = 'CHARACTER' + Endcase + + If m.tlValue2 + lcSql = [begin PACK_SESIUNE.SetOptiune2(?pcOptiune, ?pcValOptiune, ?pcTipOptiune, ?pcDescriereOptiune); end;] + Else + lcSql = [begin PACK_SESIUNE.SetOptiune(?pcOptiune, ?pcValOptiune, ?pcTipOptiune, ?pcDescriereOptiune); end;] + Endif + lnSucces = goExecutor.oExecute(lcSql) + + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare, 0 + 16, "Eroare") + Else + Select crsOptiuni + Locate For Upper(varname) = pcOptiune + If Found() + If m.tlValue2 + Replace varvalue2 With m.lcValOptiune + Else + Replace varvalue With m.lcValOptiune + Endif + Else + If m.tlValue2 + Insert Into crsOptiuni (varname, vardesc, varvalue2) Values (m.pcOptiune, m.pcDescriereOptiune, m.lcValOptiune) + Else + Insert Into crsOptiuni (varname, vardesc, varvalue) Values (m.pcOptiune, m.pcDescriereOptiune, m.lcValOptiune) + Endif + ENDIF + TABLEUPDATE( 1, .F., 'crsOptiuni') + Endif + + Return lnSucces +Endproc && scrie_optiune \ No newline at end of file diff --git a/COMUN/programe/ointroduceri.prg b/COMUN/programe/ointroduceri.prg new file mode 100644 index 0000000..da7e9ed --- /dev/null +++ b/COMUN/programe/ointroduceri.prg @@ -0,0 +1,1945 @@ +*!* 19.02.2010 +*!* marius.mutu lans_nir_bon - crsconfigcvc (coresp_cont_venchelt) +*!* este nevoie de conturi corespondente si pentru operatiile 264,265 finalizare aprovizionare + +*!* 19.04.2010 +*!* marius.mutu +*!* vizualizeaza_inventar_magazin - creez cursor cote_tva + +*!* 29.05.2010 +*!* marius.mutu +*!* lans_nir_bon - id_set 266 - mf pret de achizitie * > facturi nesosite pret de lista + +*!* 07.09.2009 +*!* marius.mutu +*!* vizualizeaza_inventar_magazin - use in actactan + +*!* 31.01.2011 +*!* marius.mutu +*!* vizualizeaza_inventar +*!* completat select si schema (dadea eroare la adaugarea in crs_inventar NULL) +*!* #2876 + +*!* 26.10.2011 +*!* lans_nir_bon id_set 247 ( NIR cu lista de preturi) +*!* daca dau renunt la transferul articolelor din nir in alta gestiune, se in actbaza2007.release se dezaloca numarul de NIR + +*!* 21.12.2011 +*!* marius.mutu +*!* vizualizeaza_inventar, vizualizeaza_inventar_magazin +*!* parametru suplimentar inventar corectie + +*!* 19.03.2014 +*!* marius.mutu +*!* vizualizeaza_inventar - stoc_scriptic nu avea zecimale la selectia din baza de date #3953 + +*!* 14.08.2014 +*!* marius.mutu +*!* achizitie_import +*!* s-a tratat factura TVA Incasare - se schimba 4426>4428, explicatia_tva + +*!* 14.01.2015 +*!* marius.mutu +*!* NU se executa avizul de transfer automat llAvizTransferAutomat daca optiunea RG_AVIZ_TRANSFER_NIR6/RG_AVIZ_TRANSFER_NIR7 este 0 + +*!* 04.01.2016 +*!* marius.mutu +*!* achizitiile si livrarile pe 2015 trebuie sa propuna TVA 24%. +*!* In xsets s-a modificat 20% de la 01.01.2016 + +*!* 03.01.2017 +*!* achizitie_import: In 2016 lucrez cu TVA 20%. Transform TVA din 19% in 20% +*!* lans_nir_bon: achizitiile si livrarile pe 2016 trebuie sa propuna TVA 20%. In xsets s-a modificat 19% de la 01.01.2017 + +*!* 18.08.2017 +*!* lans_Nir_Bon +*!* adaugare parametru tcNumeObje = 'corectie,1234' pentru modificarea NIR/BON + +*!* 05.09.2017 +*!* vizualizeaza_inventar_magazin - se transmit in clar gnAn, gnLuna, pnIdFact - nu mai folosea indexul si facea full scan pe act + +*!* lans_Nir_Bon +*!* corectie NIR/Bon - stergere document original inainte de scrierea celui modificat + +*!* 05.01.2018 +*!* vizualizeaza_inventar + coloana dataora + +*!* 15.05.2018 +*!* marius.mutu +*!* lans_Nir_Bon - la modificare NIR/BON se sterge documentul original inainte de scrierea celui nou, doar daca s-a dat terminat la NIR/BON. Se stergea chiar daca se dadea renunt. + +*!* 12.11.2019 +*!* marius.mutu +*!* lans_nir_bon - se initializeaza poDate pentru oscrie_vanzare_din_stoc() + + +*!* 17.07.2025 +*!* marius.mutu +*!* lans_Nir_Bon = cota TVA 19%-21% pentru perioada de tranzitie +*!* achizitiile si livrarile < 08/2025 trebuie sa propuna TVA 19% +*!* In xsets s-a modificat 21% de la 01.08.2025 + + +#Define CRLF Chr(13) + Chr(10) + +********* INCEPUT: lans_Nir_Bon *********** +Procedure lans_Nir_Bon + Parameters tnIdSet, tcObj, tcNumeObj + Local llReturn,llGestin,llGestout, lnTip + Local lcSelect, lcCursor,lnPornire && modificare ROAPRODUCTIE v 2.0.0 : am adaugat lnPornire + llReturn = .T. + Store .F. To llGestin,llGestout + + Local lnNir + Store 0 To lnNir + + llCorectie = (TYPE('tcNumeObj') = 'C' AND LOWER(LEFT(m.tcNumeObj, 8)) = 'corectie') + lnCod = IIF(m.llCorectie, INT(VAL(GETWORDNUM(m.tcNumeObj,2, ','))), 0) + + *!* v 2.0.28 + *!* LA NIR BILETE RATC - CALCULUL, NOTELE CONTABILE, LISTAREA SE FAC: + *!* VALOAREA CU TVA + *!* VALOAREA TVA = VALOAREA CU TVA * (PROC_TVA - 1)/ PROC_TVA + *!* VALOAREA FARA TVA = VALOAREA CU TVA - VALOAREA TVA + Private plNIRBONPretCuTVA + plNIRBONPretCuTVA = IsNIRBONPretCuTVA(tnIdSet) && NIR BILETE RATC + *!* v 2.0.28 ^ + + Select xsets + Locate For id_set = tnIdSet + Scatter Name oSet + *!* modificare JC/JV 2007 + If gnNeplatitoare_tva = 1 + oSet.id_jtax = oSet.id_jtaxn + oSet.id_jnetax = oSet.id_jtaxn + Endif + *!* modificare JC/JV 2007 ^ + + DO CASE + CASE BETWEEN(m.gnAn*12+m.gnLuna,2018*12+1, 2025*12+7) + * achizitiile si livrarile inainte de 08/2025 trebuie sa propuna TVA 19%. + * In xsets s-a modificat 21% de la 01.08.2025 + DO case + CASE INLIST(oset.id_jtax, 208) + oset.id_jtax = 105 && ACH. INT. 19% + CASE INLIST(oset.id_jtax, 216) + oset.id_jtax = 141 && TX. INV. 19% + CASE INLIST(oset.id_jtax, 220) + oset.id_jtax = 118 && ACH. IMP. 19% + CASE oset.id_jtax = 35 + oset.id_jtax = 1 && LIVR.INTERN 19% + ENDCASE + + CASE BETWEEN(m.gnAn, 2016, 2017) + * achizitiile si livrarile pe 2016 trebuie sa propuna TVA 20%. + * In xsets s-a modificat 19% de la 01.01.2017 + DO case + CASE INLIST(oset.id_jtax, 101, 103, 105) + oset.id_jtax = 176 && ACH. INT. 20% + CASE INLIST(oset.id_jtax, 137, 139, 141) + oset.id_jtax = 186 && TX. INV. 20% + CASE INLIST(oset.id_jtax, 114, 116, 118) + oset.id_jtax = 180 && ACH. IMP. 20% + CASE oset.id_jtax = 1 + oset.id_jtax = 27 && LIVR.INTERN 20% + ENDCASE + CASE gnAn <= 2015 + * achizitiile si livrarile pe 2015 trebuie sa propuna TVA 24%. + * In xsets s-a modificat 20% de la 01.01.2016 + DO case + CASE oset.id_jtax = 176 + oset.id_jtax = 156 + CASE oset.id_jtax = 186 + oset.id_jtax = 162 + CASE oset.id_jtax = 180 + oset.id_jtax = 158 + CASE oset.id_jtax = 27 + oset.id_jtax = 15 + ENDCASE + ENDCASE + + + *!* 30.10.2008 NIR DEPOZIT + *!* NIR PE BAZA NIR DEPOZIT (CODURI DE BARE + CANTITATE CITITE DE GESTIONAR) + *!* CAUT NIR-UL DUPA NUMAR, DATA - DACA EXISTA - VERIFIC DACA EXISTA ARTICOLE NOI CARE TREBUIE ADAUGATE IN NOMENCLATOR + If oSet.model = 2 && NIR + Do COMPLETEAZA_ARTICOLE_DEP_NIR With poAct.nract, poAct.dataact In OINTRODUCERI.PRG + If gnButon = 2 && DACA AM ALES RENUNT - NU MERG MAI DEPARTE + Return gnButon + Endif + Endif + *!* 30.10.2008 ^ + + lFactura = oSet.factura + lFacturaVal = oSet.cursval && modificare 21.09.2007 + lAdaos = oSet.adaos + lDiscount = oSet.discount + lcTipFrm = Upper(oSet.explicatia) + lcFormCereDate = Alltrim(oSet.frm_date) + + lcObj = Alltrim(tcObj) + If !Inlist(Left(Alltrim(Upper(lcObj)),6), "WEBNIR","VALOAR","SCHIMB","INVENT","RESTNI") + pcObj = &tcObj + Endif + If oSet.model = 4 And oSet.factura && facturi retur + If Used('xcont') + Select xcont + Locate For Val(contpart) = 4111 + lnIdPart = idPart + lcTitlu = numepart + lcCursor = 'crs_facturi_emise' + + pcListaFacturi = aleg_facturi_pt_retur(lnIdPart,'4111',lcTitlu,lcCursor) + If Empty(pcListaFacturi) + Return 2 && renunt + Endif + Endif + Endif + + Select selectii + Locate For id_sel = oSet.id_selSt + If Found() + Scatter Name ost Memo + Else + amessagebox('NECONFIGURAT!',0+48,'Atentie!') + Return 2 && renunt + Endif + + ***--------------------- + *!* v 2.0.87 - gestselectii - coloane ordonate din optiuni utilizator + llElementeEgale = .F. + lcWidth_coloane = '' + lnPornire = 1 && v 2.0.90 + lcGestSelectii = citeste_optiune_utilizator('GEST_SELECTII') + If !Empty(lcGestSelectii) + Xmltocursor(lcGestSelectii, "crsGestSelectiiUtilizator") + + Select crsGestSelectiiUtilizator + Locate For id_sel = oSet.id_selSt + If Found() + **-- compara daca am aceleasi coloane (control source) pe server si in tabelul din proiect (gest_selectii) + Create Cursor crsLista1 (element C(100)) + Create Cursor crsLista2 (element C(100)) + + lista2cursor(crsGestSelectiiUtilizator.nume_col,"crsLista1","element",";") + lista2cursor(ost.nume_col,"crsLista2","element",";") + + Select * From crsLista1 ; + ORDER By element ; + INTO Cursor crsListaOrd1 + + Select * From crsLista2 ; + ORDER By element ; + INTO Cursor crsListaOrd2 + + lcSirOrdonat1 = cursor2lista("crsListaOrd1","element",";") + lcSirOrdonat2 = cursor2lista("crsListaOrd2","element",";") + + If Used('crsLista1') + Use In crsLista1 + Endif + If Used('crsLista2') + Use In crsLista2 + Endif + If Used('crsListaOrd1') + Use In crsListaOrd1 + Endif + If Used('crsListaOrd2') + Use In crsListaOrd2 + Endif + + If lcSirOrdonat1 = lcSirOrdonat2 + llElementeEgale = .T. + Endif + **-- + If llElementeEgale + Select crsGestSelectiiUtilizator + Locate For id_sel = oSet.id_selSt + + ost.titlu_col = titlu_col + ost.nume_col = nume_col + ost.ordine = ordine + lcWidth_coloane = width_col + If Type("pornire")<>"U" && ver. 2.0.90 + lnPornire = pornire + Endif + Endif + Endif + Else + Create Cursor crsGestSelectiiUtilizator (id_sel I, titlu_col M, nume_col M, ordine C(50), width_col M, pornire N(2)) + Endif + + *!* v 2.0.87 - gestselectii ^ + ***--------------------- + Select selectii + Locate For id_sel = oSet.id_selDr + If Found() + Scatter Name odr Memo + Else + amessagebox('NECONFIGURAT!',0+48,'Atentie!') + Return 2 && renunt + Endif + + lcFiltruOrig = Alltrim(ost.filtruOrig) + If Empty(lcFiltruOrig) + lcFiltruOrig = [2=2] + Else + lcFiltruOrig = &lcFiltruOrig + Endif + Local lcNrSt + Store 0 To lcNrSt + + Do While ("??"$ost.titlu_grid) + lcNrSt = lcNrSt + 1 + ost.titlu_grid = Stuff(ost.titlu_grid ,At("??",ost.titlu_grid ,1),At("??",ost.titlu_grid,2)-At("??",ost.titlu_grid ,1)+2,Alltrim(Evaluate(Substr(ost.titlu_grid ,At("??",ost.titlu_grid ,1)+2,At("??",ost.titlu_grid ,2)-At("??",ost.titlu_grid ,1)-2)))) + Enddo + Release lcNrSt +*!* modificare v 2.1.19 +*!* lcSelSt = Alltrim(ost.cselect) + [ from ] + gcs + [.] + Alltrim(ost.cfrom) + [ where ] + Iif(!Empty(ost.FILTRU),Alltrim(ost.FILTRU),[])+Iif(!Empty(ost.CWHERE),Iif(!Empty(ost.FILTRU),[ AND ],[ ])+Alltrim(ost.CWHERE),[]) + * 3 = BON CONSUM + IF oxset.model = 3 AND INLIST(gnFifoLifo,1,2) + lcOrdineSelectie = IIF(gnFifoLifo=1,[],[ desc]) + lcSelSt = STRTRAN(Alltrim(ost.cselect),[select ],; + [select row_number() over (partition by id_articol,id_gestiune order by denumire,id_articol,id_gestiune,datain] + lcOrdineSelectie + [) as nrordine,]) + ; + [ from ] + gcs + [.] + Alltrim(ost.cfrom) + [ where ] + Iif(!Empty(ost.FILTRU),Alltrim(ost.FILTRU),[])+Iif(!Empty(ost.CWHERE),Iif(!Empty(ost.FILTRU),[ AND ],[ ])+Alltrim(ost.CWHERE),[]) +*!* ost.ordine = [denumire,id_articol,id_gestiune,datain]+lcOrdineSelectie + else + lcSelSt = Alltrim(ost.cselect) + [ from ] + gcs + [.] + Alltrim(ost.cfrom) + [ where ] + Iif(!Empty(ost.FILTRU),Alltrim(ost.FILTRU),[])+Iif(!Empty(ost.CWHERE),Iif(!Empty(ost.FILTRU),[ AND ],[ ])+Alltrim(ost.CWHERE),[]) + ENDIF +*!* modificare v 2.1.19 ^ + lcSchemaSt = Alltrim(ost.cschema) + + *AMESSAGEBOX('lcFiltruOrig: '+lcFiltruOrig) + + odr.filtruOrig = Iif(Empty(odr.filtruOrig), [2=2], Alltrim(odr.filtruOrig)) +*!* modificare v 2.1.19 +*!* lcSelDr = Alltrim(odr.cselect) + [ from ] + gcs + [.] + Alltrim(odr.cfrom) + [ where ] + Alltrim(odr.FILTRU) + IF oxset.model = 3 AND INLIST(gnFifoLifo,1,2) + lcSelDr = Alltrim(odr.cselect) + [,0 as nrordine from ] + gcs + [.] + Alltrim(odr.cfrom) + [ where ] + Alltrim(odr.FILTRU) + ELSE + lcSelDr = Alltrim(odr.cselect) + [ from ] + gcs + [.] + Alltrim(odr.cfrom) + [ where ] + Alltrim(odr.FILTRU) + ENDIF +*!* modificare v 2.1.19 ^ + lcSchemaDr = Alltrim(odr.cschema) + + *!* modificare v 2.0.6 + *!* If Type('pcobj.id_gestout') # 'U' And !Empty(pcObj.id_gestout) + If Type('pcobj.id_gestout') # 'U' And !Empty(pcObj.id_gestout) And !Inlist(oSet.id_set,215,216,257) + *!* modificare v 2.0.6 ^ + llGestout = .T. + Endif + + If Type('pcobj.id_gestin') # 'U' And !Empty(pcObj.id_gestin) + llGestin = .T. + Endif + If Inlist(oSet.id_selSt, 1, 22) && selectie din vnom_articole + llAdMod = .T. + Else + llAdMod = .F. + Endif + + If Inlist(Left(Alltrim(Upper(lcObj)),6), 'WEBNIR',"RESTNI") + LcNumeObj = Alltrim(Upper(lcObj)) && 'WEBNIR' + + Private pnAdaosTotal + Store 0 To pnAdaosTotal + + Private pnId_lista, pdDataI, pdDataF, pcDataI, pcDataF, pcPerioada, pcDataOra + ltDataora = get_ora() + ldDataora = Ttod(ltDataora) + pnId_lista = 0 + pdDataI = DTOT(MIN(DATE(gnAn,gnLuna,1),ldDataora)) && DATE()-1 + pdDataF = Dtot(MIN(GOMONTH(DATE(gnAn,gnLuna,1),1)-1,ldDataora))+24*60*60-1 && DATE()-1 + pcDataI = '' + pcDataF = '' + pcPerioada = "" + pcDataOra = get_ora(2) + ***--------- combo liste preturi + Private pnId_lista, pnId_produs + Store 0 To pnId_lista, pnId_produs + + Private poListe_pret + Store '' To poListe_pret + + Local lcSchema1, lcSelect1, lcOrder1, lcFiltru1, llAfiseaza + lcSchema1 = [] + lcSelect1 = [select * from vcrm_politici_preturi] + lcOrder1 = [nume_lista_preturi] + lcgroup = [] + lcFiltru1 = [2=2] + lcFiltruOriginal = [] + llModParam = .T. + llAfiseaza = .F. + + gencursor('poListe_pret','cListePret', lcSelect1, lcFiltru1, lcSchema1, lcOrder1, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal) + poListe_pret.ca_baza1.afisare() + + Select cListePret + ***------------------ + Private pnIdGest_InProd, pnIdGest_InMarf + Store 0 To pnIdGest_InProd, pnIdGest_InMarf + + Private poGestiuni + Store '' To poGestiuni + + Local lcSchema1, lcSelect1, lcOrder1, lcFiltru1, llAfiseaza + lcSchema1 = [] + lcSelect1 = [select id_gestiune, nume_gestiune, cgest, nr_pag, cont, acont, inactiv, nume_tip from vnom_gestiuni] + lcOrder1 = [cgest] + lcgroup = [] + lcFiltru1 = [2=2] + If Empty(gcGestPermis) + lcFiltruOriginal = [1=2] + Else + lcFiltruOriginal = [id_gestiune in (]+ gcGestPermis + [)] + Endif + llModParam = .T. + llAfiseaza = .F. + + gencursor('poGestiuni','crsGestiuni', lcSelect1, lcFiltru1, lcSchema1, lcOrder1, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal) + poGestiuni.ca_baza1.afisare() + ***------------------ + Else + * IF oSet.id_set = 105 && NIR de marfa la pret de vanzare + Private pnId_lista, pnId_produs + Store 0 To pnId_lista, pnId_produs + + Private poListe_pret + Store '' To poListe_pret + + Local lcSchema1, lcSelect1, lcOrder1, lcFiltru1, llAfiseaza + lcSchema1 = [] + lcSelect1 = [select * from vcrm_politici_preturi] + lcOrder1 = [nume_lista_preturi] + lcgroup = [] + lcFiltru1 = [2=2] + lcFiltruOriginal = [] + llModParam = .T. + llAfiseaza = .F. + + gencursor('poListe_pret','cListePret', lcSelect1, lcFiltru1, lcSchema1, lcOrder1, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal) + poListe_pret.ca_baza1.afisare() + * ENDIF + + If !Inlist(Left(Alltrim(Upper(lcObj)),6), "WEBNIR","VALOAR","SCHIMB","INVENT","RESTNI") + LcNumeObj = "nir" + Else + LcNumeObj = Alltrim(Upper(lcObj)) + Endif + Endif + + + *!* modificare 04.10.2007 + *!* 19.02.2010 + *!* If Inlist(oSet.model,3,4) + *!* 19.02.2010 ^ + If update_corespondente_cvc() < 0 + Return + Endif + *!* Endif + *!* modificare 04.10.2007 ^ + + + *!* modificare 21.02.2007 + If update_jtva_coloane([],[jtva_temp]) > 0 + *!* modificare ROAGEST v 2.2.0 +*!* Select * From jtva_temp Where JC = 1 Into Cursor jtva_achizitie +*!* Select * From jtva_temp Where JV = 1 Into Cursor jtva_vanzare + If type('pcObj') = 'O' and pemstatus(pcObj, "tva_incasare", 5) and Empty(pcObj.tva_incasare) + Select * From jtva_temp Where JC = 1 And Isnull(id_jtva_ex) Into Cursor jtva_achizitie + Select * From jtva_temp Where JV = 1 And Isnull(id_jtva_ex) Into Cursor jtva_vanzare + Else + Select * From jtva_temp Where JC = 1 And Isnull(id_jtva_neex) Into Cursor jtva_achizitie + Select * From jtva_temp Where JV = 1 And Isnull(id_jtva_neex) Into Cursor jtva_vanzare + Endif + *!* modificare ROAGEST v 2.2.0 ^ + If Used('jtva_temp') + Use In jtva_temp + Endif + Else && adaugare 04.10.2007 + Return && adaugare 04.10.2007 + Endif + *!* modificare 21.02.2007 ^ + + If oSet.productie And !Empty(oSet.formproduc) + *!* modificare ROAPRODUCTIE v 2.0.2 : am adaugat pnInStoc,pnInCrm,pcUm + Private pnId_articol, pcDenumire, pnCant, pnId_gestiune, pcGestiune, pcCont_articol,pnInStoc,pnInCrm,pcUm, pcLot, pcSerie + Store 0 To pnId_articol, pnId_gestiune,pnInCrm + Store 1 To pnCant,pnInStoc + Store '' To pcDenumire, pcGestiune, pcCont_articol,pcUm, pcLot, pcSerie + ***--------------------------------------------------------------------------------------- + Private pnId_sectie, pcSectie, pnId_comanda, pcNr_comanda, pnValoareDecontata, pnCheltuieliDirecte + Store 0 To pnId_sectie, pnId_comanda, pnValoareDecontata, pnCheltuieliDirecte + Store '' To pcSectie, pcNr_comanda + + lcFormProductie = Alltrim(Upper(oSet.formproduc)) + loap = Createobject(lcFormProductie) + *loap = Createobject('frm_alege_prod_cant') + loap.Show(1) + *!* modificare ROAPRODUCTIE v 2.0.0 + If gnButon = 2 + Return gnButon + Endif + *!* modificare ROAPRODUCTIE v 2.0.0 ^ + Endif + + If Alltrim(Upper(LcNumeObj)) <> 'INVENTAR_STOC' + onirbon = Createobject(LcNumeObj) + If Type('onirbon.cObj') # 'U' + onirbon.cObj = lcObj + Endif + If Type('onirbon.cTip_frm') # 'U' + onirbon.cTip_frm = lcTipFrm + Endif + If Type('onirbon.cFrm_cereDate') # 'U' + onirbon.cFrm_cereDate = lcFormCereDate + Endif + + If !Inlist(Left(Alltrim(Upper(lcObj)),6), "WEBNIR","VALOAR","SCHIMB","INVENT","RESTNI") + onirbon.ct_Factura1.Visible = lFactura + onirbon.ct_factura2.Visible = lFacturaVal + onirbon.ct_Adaos1.Visible = lAdaos + onirbon.ct_Discount1.Visible = lDiscount + && daca onirbon.ct_factura2 este vizibil il trec in fata + If lFacturaVal + onirbon.ct_factura2.ZOrder(0) + Endif + && daca onirbon.ct_Discount1 este vizibil il trec in fata ( ) + If lDiscount + onirbon.ct_Discount1.ZOrder(0) + Endif + + *** INITIALIZEZ PROPRIETATILE CONTAINER STANGA + With onirbon.ct_grid_search1 + .cselect = lcSelSt + .cschema = lcSchemaSt + .cTitlu_coloane = Alltrim(ost.titlu_col) + .cNume_coloane = Alltrim(ost.nume_col) + .cMask = Alltrim(ost.mask_col) + .cWidth_coloane = Alltrim(lcWidth_coloane) + .nPornire = lnPornire + + .cFiltruOriginal = lcFiltruOrig + .cFiltru = Alltrim(ost.FILTRU) + .cOrder = Alltrim(ost.ordine) + + .cTitlu = Alltrim(ost.titlu_grid) + .cb_tx_gestout.Visible = llGestout + .CWHERE = Alltrim(ost.CWHERE) + .but_nou1.Visible = llAdMod + * .but_modifica1.VISIBLE = llAdMod + *!* modificare 03.10.2007 + If Inlist(oxset.model,4,6) && Retur + .RemoveObject([Cb_tx_gestout]) + Endif + *!* modificare 03.10.2007 ^ + Endwith + + *** INITIALIZEZ PROPRIETATILE CONTAINER DREAPTA + With onirbon.ct_grid_order1 + .cselect = lcSelDr + .cTitlu_coloane = Alltrim(odr.titlu_col) + .cNume_coloane = Alltrim(odr.nume_col) + .cMask = Alltrim(odr.mask_col) + *!* modificare v 2.0.6 + *!* modificare 15.02.2008 + *!* .cFiltruOriginal = Alltrim(odr.filtruOrig) + *!* .cFiltru = Alltrim(odr.FILTRU) + *!* .cFiltruOriginal = Evaluate(Alltrim(odr.fpfiltruOr)) + *!* .cFiltru = Evaluate(Alltrim(odr.fpFILTRU)) + *!* modificare 15.02.2008 ^ + .cFiltruOriginal = Alltrim(odr.fpfiltruOr) + .cFiltru = Alltrim(odr.FILTRU) + *!* modificare v 2.0.6 ^ + .cOrder = Alltrim(odr.ordine) + .cTitlu = Alltrim(odr.titlu_grid) + .cb_tx_gestin.Visible = llGestin + Endwith + + onirbon.osel_dr = odr + Endif + + onirbon.addproperty('lCorectie', m.llCorectie) + onirbon.addproperty('nCod', m.lnCod) + + onirbon.Show() + Endif + + Clear Class (LcNumeObj) + + && modificare 06.03 + && casa de marcat + + If buton = 1 + + If Type('glListareBonFiscal')<>'U' And glListareBonFiscal + &&E500 + && lcSirBonFiscal (explicatii) : + && 1 (vanzare);nume articol;u.m.;departament;cota tva;pret*10^2;cantitate*10^3;0 (articolul va fi vandut) + + &&MP500 + && lcSirBonFiscal (explicatii) : + && S (vanzare),nr logic,zona rezervata;Parametrii + &&Parametrii : denumire c(22);pret 99999999;cantitate 99999.999;numar departament de la 1 la 8; + && numar grupa de articole de la 1 la 99;numar grupa tva de la 1 la 8 + + If pnTipCasaMarcat=1 + lcSirBonFiscal=[] + Else + lcSirBonFiscal=[H,1,______,_,__;]+CRLF + Endif + Local lnValMp500 + + lnValMp500 = 0 + + Select rul_temp + Scan + If pnTipCasaMarcat=1 + lcSirBonFiscal=lcSirBonFiscal+[1;]+Substr(Alltrim(denumire),1,14)+[;1;2;1;]+; + ALLTRIM(Str(Round(Round(pretv,gnPPretV)+Round(tvav,gnPPretV),2)*100))+[;]++Alltrim(Str(cante*1000))+[;0]+CRLF + Else + lnValMp500 = round(Round(pretv,gnPPretV)+Round(tvav,gnPPretV),2) + *!* pnSumamp500 = pnSumamp500 + lnValMp500*cante + lcSirBonFiscal=lcSirBonFiscal+[S,1,______,_,__;]+Left(Alltrim(denumire),22)+[;]+; + ALLTRIM(Str(lnValMp500*100,8))+[;]+Alltrim(Str(cante,9,3))+[;1;1;1;0;0;]+CRLF + Endif + + Endscan + + && lcSirBonFiscal (explicatii) : + && 5 (incasare);suma achitata;0(numerar);0(moneda);0(numar card credit) + + Select actactan + *!* modificare 23.02.2007 + *!* LOCATE FOR scd='5311' + *!* IF FOUND() + *!* lnNumarBonFiscal=nract + *!* IF pnTipCasaMarcat=1 + *!* lcSirBonFiscal=lcSirBonFiscal+[5;]+ALLTRIM(STR(suma*100))+[;0;0;0]+CRLF+CRLF + *!* ENDIF + *!* ldDataBonFiscal=get_ora() + *!* ENDIF + Calculate Sum(suma) For scd='5311' To lnSuma + If lnSuma > 0 + lnNumarBonFiscal=nract + If pnTipCasaMarcat=1 + lcSirBonFiscal=lcSirBonFiscal+[5;]+Alltrim(Str(lnSuma*100))+[;0;0;0]+CRLF+CRLF + Endif + ldDataBonFiscal=get_ora() + Endif + *!* modificare 23.02.2007 ^ + Endif + + If Alltrim(LcNumeObj) = 'WEBNIR' + Select actactan + Locate For scc='371' And id_set = oSet.id_set + If Found() + lnNir = nnir + Endif + Endif + + If INLIST(Alltrim(LcNumeObj),'WEBNIR_RETETAR',"RESTNIR_RETETAR","RESTNIR_RETETAR_CUM") Or poAct.id_set = 26002 + Select actactan + Locate For scc='301' And id_set = oSet.id_set + If Found() + lnNir = nnir + Endif + Endif + + + If Alltrim(LcNumeObj) = 'INVENTAR_STOC' + *!* modificare ROAPRODUCTIE v 2.0.0 + *!* Do nota_inventar With .F., .T. In OINTRODUCERI.PRG + Private pnIdCInventar + Store 0 To pnIdCInventar + lcSql = [begin pack_inventar.adauga_inventar(] + Alltrim(Str(gnLuna)) + [,] + Alltrim(Str(gnAn)) + [,] + ; + ['] + Alltrim(poAct.gestout) + [','] + Alltrim(Str(poAct.id_gestiune)) + [|',] + Alltrim(Str(gnIdUtil)) + [,] + ; + [3,?gnIdSucursala,?@pnIdCInventar); end;] + lnSucces = goExecutor.oExecute(lcSql) + If lnSucces < 0 + amessagebox(goExecutor.oPrelucrareEroare(),16,"Eroare") + Return 2 + Else + Do vizualizeaza_inventar With pnIdCInventar In OINTRODUCERI.PRG + Endif + *!* modificare ROAPRODUCTIE v 2.0.0 ^ + Endif + + *** Modificare NIR/BON - se sterger documentului original inainte de scrierea celui nou + IF m.llCorectie + lcSql = [begin pack_contafin.sterge_document(] + ALLTRIM(STR(m.lnCod)) + [,] + ALLTRIM(STR(m.gnAn)) + [,] + ALLTRIM(STR(m.gnLuna)) + [,] + ALLTRIM(STR(gnIdUtil)) + [); end;] + llSucces = goExecutor.oExecuta(lcSql) + + buton = IIF(m.llSucces, 1, 2) + IF buton = 2 + MESSAGEBOX('Nu s-a putut sterge documentul original! Nu se va scrie nici documentul modificat!',0+48,_screen.Caption) + ENDIF + ENDIF && m.llCorectie + + ENDIF && buton = 1 + && sfarsit modificare 06.03 + + + && modificare 25.10.2006 + *!* 236, 240 = marfa pv > transfer > retur din gestiune valorica - aviz expeditie - lista preturi + *!* 241, 242 = marfa pa > transfer > retur din gestiune valorica - aviz expeditie - lista preturi + *!* modificare v 2.0.188 : am adaugat 233 + If buton = 1 And (Inlist(oSet.id_set,73,79,83,206,61,62,63,64,65, 102, 103,222,223,224,225,226,227,236,238,239,240,241,242,243,244) Or Inlist(oSet.id_set,233,252,255,256,258,259,260,261,262,267,270,272)) And oSet.model > 1 + *!* modificare 13.08.2007 + If Used('rul_temp') + Select rul_temp + Replace nract With poAct.nract,serie_Act With poAct.serie_Act All + Endif + If Used('rul_temp_obinv') + Select rul_temp_obinv + Replace nract With poAct.nract,serie_Act With poAct.serie_Act All + Endif + *!* modificare 13.08.2007 ^ + *!* 12.11.2019 poDate se initializeaza doar in initializeaza_vanzare_din_stoc() pentru vanzarea din stoc + IF TYPE('poDate') = 'U' + Private poDate + lnTip = IdSet2TipFacturare(oSet.id_set) + poDate = CREATEOBJECT("oDateFactura",oSet.id_set, m.lnTip) + ENDIF + *!* 12.11.2019 ^ + lnButon = 1 + lnSucces = oscrie_vanzare_din_stoc(oSet) && ofacturare_stoc.prg + If lnSucces < 0 + lnButon = 2 + Endif + Else + && modificare 25.10.2006 ^ + If buton = 1 And oSet.model > 1 + *!* modificare 13.08.2007 + If Used('rul_temp') + Select rul_temp + Replace nract With poAct.nract,serie_Act With poAct.serie_Act All + Endif + If Used('rul_temp_obinv') + Select rul_temp_obinv + Replace nract With poAct.nract,serie_Act With poAct.serie_Act All + Endif + *!* modificare 13.08.2007 ^ + lnButon = 1 + lnSucces = oscrie_in_fisiere(0,.F.,.T.) + If lnSucces < 0 + lnButon = 2 + Endif + *!* modificare ROAPRODUCTIE v 2.0.0 + If poAct.id_set = 26000 + If lnSucces < 0 + lcSql = [update ] + gcs + [.GEST_CENTR_INVENTAR set sters = 1, dataoras = sysdate,id_utils=?gnIdUtil where id_c_inventar =?pnIdCInventar] + Else + lcSql = [update ] + gcs + [.GEST_CENTR_INVENTAR set validat = 1, dataorav = sysdate,id_utilv=?gnIdUtil where id_c_inventar =?pnIdCInventar] + Endif + lnSucces2 = goExecutor.oExecute(lcSql) + If lnSucces2 < 0 + amessagebox(goExecutor.cEroare,0+16,"Eroare") + Endif + Release pnIdCInventar + Endif + *!* modificare ROAPRODUCTIE v 2.0.0 ^ + *!* 29.05.2010 + *!* 231 mf pret de vanzare > facturi neplatite pret de lista + *!* 247 mf pret de achizitie * > facturi neplatite pret de lista + *!* 266 mf pret de achizitie * > facturi nesosite pret de lista + llAvizTransferAutomat = IIF(oSet.id_set = 231 and ((TYPE('gnRG_AVIZ_TRANSFER_NIR6') <> 'U' and m.gnRG_AVIZ_TRANSFER_NIR6 = 1) or TYPE('gnRG_AVIZ_TRANSFER_NIR6') = 'U'), .T., ; + IIF(INLIST(oSet.id_set, 247, 266) and ((TYPE('gnRG_AVIZ_TRANSFER_NIR7') <> 'U' and m.gnRG_AVIZ_TRANSFER_NIR7 = 1) or TYPE('gnRG_AVIZ_TRANSFER_NIR7') = 'U'), .T., .F.)) + + If buton = 1 And lnSucces > 0 And Inlist(oSet.id_set, 231, 247, 266) AND m.llAvizTransferAutomat + *!* 29.05.2010 ^ + *!* 26.10.2011 + *!* daca dau renunt la transferul articolelor din nir in alta gestiune, se in actbaza2007.release se dezaloca numarul de NIR + lnOldButon = buton + Do ofactureaza.PRG + buton = lnOldButon + pnButon = lnOldButon + gnButon = lnOldButon + *!* 26.10.2011 + Endif + Else + lnButon = 2 + Endif + + lnTipGest = gnTipGest + + If lnButon # 2 And !Empty(oSet.listare) + lcProcName = Alltrim(oSet.listare) + lcParametersList = Alltrim(oSet.param2) && pcObj.nnir,gnTipGest IN oproceduri_listari + If INLIST(Left(Alltrim(LcNumeObj),6),'WEBNIR',"RESTNI") + lnNr_pag = 0 + Do Case + Case LcNumeObj = 'WEBNIR' And (oSet.id_set = 91 Or oSet.id_set = 96 Or oSet.id_set = 97 OR oSet.id_set = 106) + lnNr_pag = 5 + Do &lcProcName With lnNir, lnNr_pag In oproceduri_listari + Case LcNumeObj = 'WEBNIR' And oSet.id_set = 95 + lnNr_pag = 6 + Do &lcProcName With lnNir, lnNr_pag In oproceduri_listari + Case INLIST(LcNumeObj,'WEBNIR_RETETAR',"RESTNIR_RETETAR","RESTNIR_RETETAR_CUM") + lnNr_pag = 2 + Do listare_descarcare_productie With lnNir, lnNr_pag In oproceduri_listari + Endcase + Else + Do Case + Case LcNumeObj = 'INVENTAR_STOC' + lnNr_pag = 0 && 4 + Do &lcProcName With poAct.nract, lnNr_pag In oproceduri_listari + + If poAct.id_set = 26000 && Bon de consum cu inventar + Private pnId_gestiune, pcNumeGestiune, pnNr + pnId_gestiune = poAct.id_gestiune + pcNumeGestiune = poAct.nume_gestiune + pnNr = poAct.nract + + lcSel = [{call pack_productie.get_stoc(?gnAn, ?gnLuna, ?pnId_gestiune, ?gnIdSucursala)}] + + lcCursor = 'cStoc' + lnSucces = goExecutor.oExecute(lcSel, lcCursor) + + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,"Eroare") + Return + Endif + + Private pcTitlu, pcDataOra + pcTitlu = "INVENTAR la data de "+Dtoc(poAct.dataact) + pcDataOra = get_ora(2) + + Select cStoc + Report Form rap_inventariere_bon.frx To Printer Prompt Preview + + If Used('cStoc') + Use In cStoc + Endif + Endif + *!* Case poact.id_set = 26002 && Inregistrare productie si consum de materii prime + *!* lnNr_pag = 2 + *!* Do listare_descarcare_productie With lnNir, lnNr_pag In oproceduri_listari + Otherwise + Do &lcProcName With &lcParametersList && IN oproceduri_listari + Endcase + Endif + Endif + && modificare 25.10.2006 + Endif + && modificare 25.10.2006 ^ + + + && modificare 06.03 + && casa de marcat + If lnButon#2 And Type('glListareBonFiscal')<>'U' And glListareBonFiscal + If pnTipCasaMarcat=1 + imprimare_bon_fiscal(lcSirBonFiscal,ldDataBonFiscal,lnNumarBonFiscal) + Else + If Type('lcStringmp500')='C' + lcSirBonFiscal=lcSirBonFiscal+lcStringmp500 + Else + lcSirBonFiscal=lcSirBonFiscal+[T,1,______,_,__;]+CRLF+[F,1,______,_,__;]+CRLF + Endif + imprimare_bon_mp500(lcSirBonFiscal,ldDataBonFiscal,lnNumarBonFiscal) + Endif + Endif + && sfarsit modificare 06.03 + + Use In (Select('actactan')) + Use In (Select('rul_temp')) + Use In (Select('rul_temp_obinv')) + Use In (Select('jtva_achizitie')) + Use In (Select('jtva_vanzare')) + Use In (Select('crsconfigcvc')) + Use In (Select('crsGestSelectiiUtilizator')) + + *!* modificare ROAPRODUCTIE v 2.0.2 + If oSet.productie And !Empty(oSet.formproduc) + Release pnId_articol, pcDenumire, pnCant, pnId_gestiune, pcGestiune, pcCont_articol,pnInStoc,pnInCrm,pcUm, pcLot, pcSerie + ENDIF + *!* modificare ROAPRODUCTIE v 2.0.2 ^ + + Release oSet + Release ost + Release odr + + Return lnButon + + ********* SFARSIT: lans_Nir_Bon *********** + + **************************************************************************************************** +Function IsNIRBONPretCuTVA + Lparameters tnIdSet + Local llNIRBONPretCuTVA + &&23.10.2008 adaugat 248 - bilete ratc in gestiunea hibrid + llNIRBONPretCuTVA = Iif(Inlist(tnIdSet, 234,248),.T.,.F.) && NIR BILETE RATC + + Return llNIRBONPretCuTVA +Endfunc && IsNIRBONPretCuTVA +**************************************************************************************************** + +********* INCEPUT: aleg_facturi_pt_retur *********** +Procedure aleg_facturi_pt_retur + Parameters tnIdPart,tcCont,tcTitlu,tcCursor + + If Empty(tcTitlu) + lcTitlu = [Facturi emise] + Else + lcTitlu = Upper(Alltrim(tcTitlu)) + Endif + + *** aflu numele partenerului + *!* lcNumePart='' + + *!* lcSel = [select nume from ] + gcs + [.vnom_parteneri where id_part = ?tnIdPart] + *!* lccursor = [crsNumePart] + *!* lnsucces = goExecutor.oExecute(lcSel,lccursor) + *!* IF lnsucces < 0 + *!* lcmesaj = goExecutor.cEroare + *!* ofrm_er = CREATEOBJECT('frm_mesaj','Eroare','exclam.ico','Avertizare',lcmesaj) + *!* ofrm_er.show(1) + *!* RELEASE ofrm_er + *!* ENDIF + *!* SELECT crsNumePart + *!* LOCATE + *!* lcNumePart = ALLTRIM(nume) + *!* USE IN crsNumePart + + *** perioada din luna curenta + pdDataI = Ctod('01/' + pcNl + '/' + pcAn) + pdDataF = ultimazi(pcAn,pcNl) + + lcSel = [{call facturi_emise(?gcS,?tcCont,?tnIdPart,?pdDataI,?pdDataF)}] + lcSchema = [''] &&['ceck n(1),totdebit n(16,gnPa),totcredit n(16,gnPa),id_fact n(10),id_part n(10),nume c(50),dataact D,dataireg D,nract n(14),datascad D,cont c(4),acont c(4)'] + lcCursor = Iif(!Empty(tcCursor),Alltrim(tcCursor),'crs_facturi_emise') + lnSucces = goExecutor.oExecute(lcSel,lcCursor) + + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,"Eroare") + Return + Endif + + ofact = Createobject('facturi_retur') + With ofact.ct_grid_order1 + .cselect = lcSel + .cschema = lcSchema + .cTitlu_coloane = [Alege,Serie factura,Nr.factura,Data factura,Data scadenta,Cont,Analitic,Total cu TVA,Achitat,Sold] + .cNume_coloane = [ceck;serie_act;nract;dataact;datascad;cont;acont;totdebit;totcredit;totdebit-totcredit] + .cFiltruOriginal = [] + .cFiltru = [] + .cOrder = [dataact] + .cTitlu = [Client: ] + lcTitlu + .cnrcoloane_check = [1] + .cnumeCursor = lcCursor + .lmodparam = .T. + Endwith + + ofact.Show(1) + + Select (lcCursor) + lcFacturiAlese = [] + Select (lcCursor) + Scan For ceck = 1 + lcFacturiAlese = lcFacturiAlese + [,] + Alltrim(Str(id_fact)) + Endscan + lcFacturiAlese = Substr(lcFacturiAlese,2) + If Used(lcCursor) + Use In (lcCursor) + Endif + + Return lcFacturiAlese +Endproc +********* SFARSIT: aleg_facturi_pt_retur *********** + +********* INCEPUT: lista_inventar *********** +Procedure lista_inventar + Lparameters tnTip + Local lcSelect, lcFiltru, lcSchema, lcOrder, llAfisare, lcgroup, llModParam, lcFiltruOriginal + Local llAfiseaza + Private poInventare + poInventare = Null + + lcSchema = [id_c_inventar n(20),data_inventar t,id_util n(10),an n(4),luna n(2), ] + ; + [descriere c(240),validat n(1),dataorav t,id_utilv n(10),util c(240),utilv c(240), tip n(2), ] + ; + [id_sucursala n(5), sucursala c(100), nract n(14), nnir n(14), id_fact n(20), ] + ; + [id_gestiuni M, id_subgrupe_articole M, id_articole M] + + lcSelect = [select id_c_inventar,data_inventar,id_util,an,luna, ] + ; + [descriere,validat,dataorav,id_utilv,util,utilv,tip,id_sucursala,sucursala, nract, nnir, id_fact, id_gestiuni, id_subgrupe_articole, id_articole ] + ; + [ from vgest_centr_inventar] + lcFiltru = [an*12+luna <= ] + ALLTRIM(STR(m.gnAn*12+m.gnLuna)) + lcOrder = [2 desc] + llAfisare=.F. + lcgroup = [] + llModParam = .T. + *!* modificare ROAVIN v 2.0.0 + *!* lcFiltruOriginal = Iif(!Empty(gcCondSucursala), Substr(gcCondSucursala,6), []) + lcFiltruOriginal = Substr(gcCondSucursala + Iif(!Empty(tnTip),[ and tip = ] + Alltrim(Str(tnTip)),[]),6) + *!* modificare ROAVIN v 2.0.0 ^ + gencursor('poInventare','crsinventare',lcSelect, lcFiltru, lcSchema, lcOrder, llAfisare, lcgroup, llModParam, lcFiltruOriginal) + poInventare.ca_baza1.afisare() + *!* modificare ROAVIN v 2.0.0 + *!* loFrmInventare = Createobject('frm_inventar_centralizator') + loFrmInventare = Createobject('frm_inventar_centralizator',tnTip) + *!* modificare ROAVIN v 2.0.0 ^ + loFrmInventare.Show(1) + Use In (Select('crsInventare')) + Release loFrmInventare,poInventare +Endproc && lista_inventar +********* SFARSIT: lista_inventar *********** + +********* INCEPUT: vizualizeaza_inventar *********** +Procedure vizualizeaza_inventar + Lparameters tnIdCInventar, tlCorectie + *** tlCorectie: .T. daca inventarul este validat si se doreste corectarea lui + + LOCAL llCorectie + llCorectie = IIF(PCOUNT() >=2, tlCorectie, .F.) + + Local llBonConsum, llObinvent, llInventarROAVin,llMagazin + Local lcSelect, lcFiltru, lcSchema, lcOrder, llAfisare, lcgroup, llModParam, lcFiltruOriginal + Local lnValidat, lnTip, ldDataInventar + lnValidat = 0 + lnTip = 1 + + Local llCreareGeneratorNumere + *!* 15.06.2010 + Private pdDataRef, pdDataInceputInventar, pdDataSfarsitInventar, pnNract, pnNnir, pdDataNotaInventar, pcTextLunaAn, pcChiosc, pcTextLunaAnNecompletat + PRIVATE pnIdFact, pnCod,pnIdInventar + pnCod = 0 + pnIdFact = 0 + pnNract = 0 + pnNnir = 0 + pdDataNotaInventar = {} + pcTextLunaAn = '' + pcTextLunaAnNecompletat = '' + pcChiosc = '' + + *!* 15.06.2010 ^ +*!* 12.01.2015 + pnIdInventar = tnIdCInventar +*!* 12.01.2015 ^ + + llCreareGeneratorNumere = .F. + If Type('poGeneratorNumere') = 'U' + Private poGeneratorNumere + poGeneratorNumere = Createobject('oGeneratorNumere') + llCreareGeneratorNumere = .T. + Endif + + *!* 16.06.2010 + lcSql = "select validat, dataorav, tip, id_gestiuni, descriere, optiuneinventar, numarluni, data_inventar, id_fact, nract, nnir, dataact from VGEST_CENTR_INVENTAR where id_c_inventar=?pnIdInventar" + lcCursor = 'crsGestCentrInventarTemp' + lnSucces = goExecutor.oExecute(m.lcSql, m.lcCursor) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,"Eroare") + Return + ENDIF + + *!* 21.12.2011 + *** trebuie act.cod pentru nota de completare din inventarul de corectie + pnIdFact = NVL(crsGestCentrInventarTemp.id_fact, 0) + IF m.llCorectie +*!* lnSucces = goExecutor.oSelect2Value("SELECT MAX(cod) FROM act WHERE an = ?gnAn and luna = ?gnLuna and id_fact = ?pnIdFact", @pnCod) + lnSucces = goExecutor.oSelect2Value("SELECT MAX(cod) FROM act WHERE an = " + ALLTRIM(STR(m.gnAn)) + " and luna = " + ALLTRIM(STR(m.gnLuna)) + " and id_fact = " + ALLTRIM(STR(m.pnIdFact)), @pnCod) + IF m.lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,"Eroare") + Return + ENDIF + ENDIF + *!* 21.12.2011 ^ + + Select crsGestCentrInventarTemp + lnValidat = Validat + lnTip = tip + lcId_gestiuni = Alltrim(id_gestiuni) + lcDescriere = Alltrim(descriere) + lnOptiuneInventar = optiuneinventar + ldDataInventar = data_inventar + pdDataRef = data_inventar + pdDataInceputInventar = data_inventar + pdDataSfarsitInventar = dataorav + pnNract = nract + pnNnir = nnir + pdDataNotaInventar = dataact + pcChiosc = ALLTRIM(NVL(descriere,'')) + pcTextLunaAn = 'Luna contabila ' + PADL(allt(str(m.gnLuna)),2, '0') + '/' + allt(str(m.gnAn)) + ; + ' Inventar ' + transform(m.pdDataInceputInventar)+ ; + IIF(!EMPTY(NVL(m.pdDataSfarsitInventar,{})), ' - ' + transform(m.pdDataSfarsitInventar), '') + ; + IIF(!EMPTY(m.lcDescriere), ' | ' + m.lcDescriere , '') + ; + IIF(!EMPTY(NVL(m.pnNract, 0)), ' | Nr. doc. ' + alltrim(str(pnNract)),'') + ; + IIF(!EMPTY(NVL(m.pnNnir,0)), ' | Nr. bon ' + alltrim(str(pnNnir)),'') + ; + IIF(!EMPTY(NVL(m.pdDataNotaInventar,{})), ' | Data doc. ' + transform(m.pdDataNotaInventar), '') + + pcTextLunaAnNecompletat = 'Luna contabila ' + PADL(allt(str(m.gnLuna)),2, '0') + '/' + allt(str(m.gnAn)) + ; + IIF(!EMPTY(m.lcDescriere), ' | ' + m.lcDescriere , '') && fara data inceput inventar si numar/data bon, se poate lista si ulterior, la contabilitate si nu trebuie data generarii inventarului + + Use In (Select('crsGestCentrInventarTemp')) + *!* 16.06.2010 ^ + + llBonConsum = lnTip = 3 + llObinvent = lnTip = 2 + llInventarROAVin = lnTip = 4 + llMagazin = lnTip = 5 + + lcNumeCursor = 'crs_inventar' + *!* 31.01.2011 + IF llInventarROAVin + lcSelect = [SELECT ID_INVENTAR,ID_ARTICOL,ID_GESTIUNE,STOC_FAPTIC,PRET,PRETV,TVA,TVAV,CANTS,CANT,CANTE,CONT,PRETD,ACONT,DATAIN,DATAOUT,PROC_TVAV,ID_STOC,DATA_REFERINTA,ID_RESPONSABIL,DATAPIF,DNS_LUNI,DNS_LUNI_FAPTIC,UZURA_FAPTIC,DNS_RAMAS,STOC_SCRIPTIC,DEPRECIERE, ] + ; + [MOTIV_DEPRECIERE,ID_UTIL,SERIE,PRET_UNITAR,DENUMIRE,CODMAT,UM,DNF,ID_GRUPA,ID_SUBGRUPA,GRUPA,SUBGRUPA,CGEST,NUME_GESTIUNE,NR_PAG,UTILIZATOR,ID_MESERIA,ID_FORMATIA,DATAANG,DATALIC,DATA_EXPIRARE,ID_RUL_AUX,ID_PART_REZ,ID_LUCRARE_REZ,ID_CATEG_CALITATE, ] + ; + [ID_VIN_STADIU,ID_VENCHELT,CATEGORIE_CALITATE,CANT_ZAHAR,GRADE_ALCOOL,POTENTIAL,AN_PROD,ACRONIM,STADIU,EXPLICATIE,ID_VALUTA,VALUTA,LOT,ADATA_EXPIRARE,ID_C_INVENTAR,ID_SUCURSALA,PRETCTVAV, ] + ; + [VALIDAT, DATAORA_VALIDAT, ID_FURNIZOR, FURNIZOR, DATAORA ] + ; + [FROM vvin_gest_inventar] + + lcSchema = [ID_INVENTAR N(20) NOT NULL,ID_ARTICOL N(10) NOT NULL,ID_GESTIUNE N(5) NOT NULL,STOC_FAPTIC N(14,3) NOT NULL,PRET N(16,4) NOT NULL,PRETV N(16,4) NOT NULL,TVA N(16,4) NOT NULL,TVAV N(16,4) NOT NULL,CANTS N(14,3) NOT NULL,CANT N(14,3) NOT NULL, ] + ; + [CANTE N(14,3) NOT NULL,CONT V(4) NULL,PRETD N(16,4) NOT NULL,ACONT V(4) NULL,DATAIN T NULL,DATAOUT T NULL,PROC_TVAV N(5,2) NOT NULL,ID_STOC N(10) NOT NULL,DATA_REFERINTA T NULL,ID_RESPONSABIL N(10) NULL,DATAPIF T NULL,DNS_LUNI N(10) NOT NULL, ] + ; + [DNS_LUNI_FAPTIC N(10) NULL,UZURA_FAPTIC N(3) NULL,DNS_RAMAS N(10) NOT NULL,STOC_SCRIPTIC N(14,3) NULL,DEPRECIERE N(16,4) NOT NULL,MOTIV_DEPRECIERE V(50) NULL,ID_UTIL N(5) NOT NULL,SERIE V(100) NULL,PRET_UNITAR N(16, 4) NULL,DENUMIRE V(100) NULL, ] + ; + [CODMAT V(50) NULL,UM V(10) NULL,DNF N(5) NULL,ID_GRUPA N(5) NULL,ID_SUBGRUPA N(5) NULL,GRUPA V(100) NULL,SUBGRUPA V(100) NULL,CGEST V(20) NULL,NUME_GESTIUNE V(50) NULL,NR_PAG N(2) NULL,UTILIZATOR V(30) NULL,ID_MESERIA N(5) NULL,ID_FORMATIA N(5) NULL, ] + ; + [DATAANG T NULL,DATALIC T NULL,DATA_EXPIRARE T NULL,ID_RUL_AUX N(10) NULL,ID_PART_REZ N(10) NULL,ID_LUCRARE_REZ N(10) NULL,ID_CATEG_CALITATE N(10) NULL,ID_VIN_STADIU N(10) NULL,ID_VENCHELT N(10) NULL,CATEGORIE_CALITATE V(100) NULL,CANT_ZAHAR N(18, ] + ; + [4) NULL,GRADE_ALCOOL N(18,4) NULL,POTENTIAL N(18,4) NULL,AN_PROD N(4) NULL,ACRONIM V(15) NULL,STADIU V(50) NULL,EXPLICATIE V(200) NULL,ID_VALUTA N(5) NULL,VALUTA V(10) NULL,LOT V(20) NULL,ADATA_EXPIRARE T NULL,ID_C_INVENTAR N(20) NULL, ] + ; + [ID_SUCURSALA N(5) NULL,PRETCTVAV N(20,4) NULL, VALIDAT N(1) NULL, DATAORA_VALIDAT T NULL, ID_FURNIZOR I, FURNIZOR C(100), DATAORA T ] +* lcSchema = "" + ELSE + lcSelect = [SELECT ID_INVENTAR,ID_ARTICOL,ID_GESTIUNE,STOC_FAPTIC,STOC_FAPTIC1,STOC_FAPTIC2,STOC_FAPTIC3,STOC_FAPTIC4,STOC_FAPTIC5,PRET,PRETV,TVA,TVAV,CANTS,CANT,CANTE,CONT,PRETD,ACONT,DATAIN,DATAOUT,PROC_TVAV,ID_STOC,DATA_REFERINTA,ID_RESPONSABIL,DATAPIF,DNS_LUNI, ] + ; + [DNS_LUNI_FAPTIC,UZURA_FAPTIC,DNS_RAMAS,STOC_SCRIPTIC,DEPRECIERE,MOTIV_DEPRECIERE,PRET_UNITAR,DENUMIRE,CODMAT,CODBARE,UM,DNF,ID_GRUPA,ID_SUBGRUPA,GRUPA,SUBGRUPA,CGEST,NUME_GESTIUNE,ID_UTIL,NR_PAG,UTILIZATOR,RESPONSABIL,ID_MESERIA,MESERIE,ID_FORMATIA, ] + ; + [FORMATIA,DATAANG,DATALIC,DATA_EXPIRARE,ID_RUL_AUX,SERIE,ID_VALUTA,VALUTA,ID_PART_REZ,ID_LUCRARE_REZ,PART_REZ,NRORD_REZ,LOT,ADATA_EXPIRARE,ID_C_INVENTAR,ID_SUCURSALA,ID_SUCURSALA_GESTIUNE,PRETCTVAV,ID_SECTIE,SECTIE,FIRST_UPDATED_AT, ] + ; + [VALIDAT, DATAORA_VALIDAT, ID_FURNIZOR, FURNIZOR, DATAORA ] + ; + [FROM vgest_inventar] + + lcSchema = [ID_INVENTAR N(20) NOT NULL,ID_ARTICOL N(10) NOT NULL,ID_GESTIUNE N(5) NOT NULL,STOC_FAPTIC N(14,3) NOT NULL,STOC_FAPTIC1 N(14,3) NOT NULL,STOC_FAPTIC2 N(14,3) NOT NULL,STOC_FAPTIC3 N(14,3) NOT NULL,STOC_FAPTIC4 N(14,3) NOT NULL,STOC_FAPTIC5 N(14, ] + ; + [3) NOT NULL,PRET N(16,4) NOT NULL,PRETV N(16,4) NOT NULL,TVA N(16,4) NOT NULL,TVAV N(16,4) NOT NULL,CANTS N(14,3) NOT NULL,CANT N(14,3) NOT NULL,CANTE N(14,3) NOT NULL,CONT V(4) NULL,PRETD N(16,4) NOT NULL,ACONT V(4) NULL,DATAIN T NULL, ] + ; + [DATAOUT T NULL,PROC_TVAV N(5,2) NOT NULL,ID_STOC N(10) NOT NULL,DATA_REFERINTA T NULL,ID_RESPONSABIL N(10) NULL,DATAPIF T NULL,DNS_LUNI N(10) NOT NULL,DNS_LUNI_FAPTIC N(10) NULL,UZURA_FAPTIC N(3) NULL,DNS_RAMAS N(10) NOT NULL,STOC_SCRIPTIC N(14,3) NULL, ] + ; + [DEPRECIERE N(16,4) NOT NULL,MOTIV_DEPRECIERE V(50) NULL,PRET_UNITAR N(16,4) NULL,DENUMIRE V(100) NULL,CODMAT V(50) NULL,CODBARE V(50) NULL,UM V(10) NULL,DNF N(5) NULL,ID_GRUPA N(5) NULL,ID_SUBGRUPA N(5) NULL,GRUPA V(100) NULL,SUBGRUPA V(100) NULL, ] + ; + [CGEST V(20) NULL,NUME_GESTIUNE V(50) NULL,ID_UTIL N(5) NOT NULL,NR_PAG N(2) NULL,UTILIZATOR V(30) NULL,RESPONSABIL V(70) NULL,ID_MESERIA N(5) NULL,MESERIE V(64) NULL,ID_FORMATIA N(5) NULL,FORMATIA V(64) NULL,DATAANG T NULL,DATALIC T NULL, ] + ; + [DATA_EXPIRARE T NULL,ID_RUL_AUX N(10) NULL,SERIE V(100) NULL,ID_VALUTA N(5) NULL,VALUTA V(10) NULL,ID_PART_REZ N(10) NULL,ID_LUCRARE_REZ N(10) NULL,PART_REZ V(70) NULL,NRORD_REZ V(100) NULL,LOT V(20) NULL,ADATA_EXPIRARE T NULL, ] + ; + [ID_C_INVENTAR N(20) NULL,ID_SUCURSALA N(5) NULL,ID_SUCURSALA_GESTIUNE N(10) NULL,PRETCTVAV N(20,4) NULL,ID_SECTIE N(5) NULL,SECTIE V(50) NULL,FIRST_UPDATED_AT T NULL, VALIDAT N(1) NULL, DATAORA_VALIDAT T NULL, ID_FURNIZOR I, FURNIZOR C(100), DATAORA T ] +* lcSchema = "" + ENDIF + *!* 31.01.2011 ^ + lcFiltru= [] && + Iif(glEMama,[ and id_sucursala is null],gcCondSucursala) + lcOrder = [denumire] + llAfisare = .F. + llModParam = .T. + lcgroup = [] + lcFiltruOriginal = [id_c_inventar = ] + Alltrim(Str(tnIdCInventar)) + + If Used(lcNumeCursor) + Use In &lcNumeCursor + Endif + Private podecabaza + podecabaza = '' + gencursor('podecabaza',lcNumeCursor,lcSelect, lcFiltru, lcSchema, lcOrder, llAfisare, lcgroup, llModParam, lcFiltruOriginal) + podecabaza.ca_baza1.afisare() + gnButon = 2 + + +*!* lnData = 12*gnAn + gnLuna +*!* lcSel = [Select MAX(data_referinta) as data_referinta from ] + gcs + [.gest_inventar where 12*extract(YEAR from data_referinta) +extract(MONTH from data_referinta) <=?lnData] + +*!* lcSchema = [''] +*!* lcCursor = [crs_data] +*!* lnSucces = goExecutor.oExecute(lcSel,lcCursor) +*!* If lnSucces < 0 +*!* amessagebox(goExecutor.cEroare,0+16,"Eroare") +*!* Endif +*!* pdDataRef = data_referinta +*!* If Used('crs_data') +*!* Use In crs_data +*!* Endif +*!* modificare ROAVIN v 2.0.1 ( 19.05.2011 ) + If update_corespondente_cvc() < 0 + Return + Endif + +*!* modificare ROAVIN v 2.0.1 ( 19.05.2011 ) ^ + Select crs_inventar + lnid_c_inventar=id_c_inventar + oInventar = Createobject('inventar_stoc',tnIdCInventar) + oInventar.ocursor = podecabaza + oInventar.cnumeCursor = lcNumeCursor + *!* modificare v 2.2.6 + oInventar.cId_gestiuni = iif(!empty(nvl(lcId_gestiuni,'')),left(Strtran(lcId_gestiuni,[|],[,]),len(lcId_gestiuni)-1),'') + *!* modificare v 2.2.6 ^ + oInventar.cFiltruOriginal = lcFiltru + oInventar.lObinv = llObinvent + oInventar.lBonConsum = llBonConsum + oInventar.lInventarROAVin = llInventarROAVin + oInventar.lValidat = lnValidat = 1 + oInventar.lCorectie = m.llCorectie + oInventar.lMagazin = llMagazin + oInventar.dDataInventar = ldDataInventar + oInventar.nCod = m.pnCod + oInventar.nIdFact = m.pnIdFact + +*!* If lnValidat = 1 AND !m.llCorectie +*!* oInventar.but_nou1.Visible = .F. && adaugare +*!* oInventar.but_termin1.Visible = .F. +*!* oInventar.but_sterge1.Visible = .F. && stergere +*!* Endif + oInventar.Show() + + + If !llBonConsum And gnButon = 1 + lnSucces = oscrie_in_fisiere(0,.F.,.T.) + If lnSucces < 0 + If Type([_Screen.nId_tipdoc]) = 'N' And !Empty(_Screen.nid_tipdoc) + poGeneratorNumere.dezaloca_numar(_Screen.nid_tipdoc) + Endif + ELSE + *!* 15.06.2010 + pnIdFact = 0 + lnSucces = goExecutor.oFunction2Value("pack_contafin.GET_IDFACT()", @pnIdFact) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,"Eroare") + Endif + + TEXT TO lcSql NOSHOW + begin + update GEST_CENTR_INVENTAR set validat = 1, id_fact = ?pnIdFact, dataorav = sysdate, id_utilv = ?gnIdUtil where id_c_inventar = ?lnid_c_inventar; + update gest_inventar set validat = 1, dataora_validat = sysdate where id_c_inventar = ?lnid_c_inventar AND validat = 0 ; + end; + ENDTEXT +*!* lcSql = [update GEST_CENTR_INVENTAR set validat = 1, id_fact = ?pnIdFact, dataorav = sysdate, id_utilv=?gnIdUtil where id_c_inventar = ] + ALLTRIM(STR(lnid_c_inventar)) + + lnSucces = goExecutor.oExecute(lcSql) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,"Eroare") + Endif + Endif + Endif + If llCreareGeneratorNumere + Release poGeneratorNumere + Endif + *!* modificare 23.10.2012 + Use In (Select(lcNumeCursor)) + Use In (Select('rul_temp')) + Use In (Select('rul_temp_obinv')) + Use In (Select('actactan')) + *!* modificare 23.10.2012 ^ +*!* modificare ROAVIN v 2.0.1 ( 19.05.2011 ) + Use In (Select('crsconfigcvc')) +*!* modificare ROAVIN v 2.0.1 ( 19.05.2011 ) ^ +Endproc && vizualizeaza_inventar +********* SFARSIT: vizualizeaza_inventar *********** + +********* INCEPUT: nota_inventar *********** +Procedure nota_inventar + Parameters tlObinvent, tlBonConsum, tlInventarROAVin + + && tlBonConsum - RoaProductie - bon consum productie + + Private pdDataRef, tnRefacInventar + Local llCallProc,crsUtilNev + Store .F. To llCallProc + Store 0 To tnRefacInventar + + *!* modificare serii numere - 10.2007 + Local llCreareGeneratorNumere + llCreareGeneratorNumere = .F. + If Type('poGeneratorNumere') = 'U' + Private poGeneratorNumere + poGeneratorNumere = Createobject('oGeneratorNumere') + llCreareGeneratorNumere = .T. + Endif + *!* modificare serii numere - 10.2007 ^ + + If tlObinvent + lcCondSpec = [cont = ?gcContObInv ] + Iif(glEMama,[and id_sucursala is null],gcCondSucursala) + Else + lcCondSpec = [cont <> ?gcContObInv ] + Iif(glEMama,[and id_sucursala is null],gcCondSucursala) + Endif + + If !tlBonConsum + + lnData = 12*gnAn + gnLuna + lcSel = [Select MAX(data_referinta) as data_referinta from ] + gcs + [.gest_inventar ] + ; + [where 12*extract(YEAR from data_referinta) +extract(MONTH from data_referinta) <=?lnData ] + ; + [and validat = 0 and ] + lcCondSpec + lcSchema = [''] + lcCursor = [crs_data] + lnSucces = goExecutor.oExecute(lcSel,lcCursor) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,"Eroare") + Endif + + If lnSucces > 0 + Select crs_data + Locate + pdDataRef = data_referinta + If Used('crs_data') + Use In crs_data + Endif + If !Isnull(pdDataRef) + + lcSel = [select distinct id_util,utilizator,validat from vgest_inventar ] + ; + [where id_util != 0 and validat = 0 ] + Iif(glEMama,[and id_sucursala is null],gcCondSucursala) + lcSchema = [''] + lccrsUtilizatori="crsUtilNev" + lnSucces = goExecutor.oExecute(lcSel,lccrsUtilizatori) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,"Eroare") + Endif + lnNrUtilNev=0 + lcListaUtilNev="" + If Reccount("&lccrsUtilizatori")>0 + lnNrUtilNev = Reccount("&lccrsUtilizatori") + Select &lccrsUtilizatori + + Scan + lcListaUtilNev=lcListaUtilNev + Alltrim(&lccrsUtilizatori..utilizator) + "," + Endscan + + lcListaUtilNev=Substr(lcListaUtilNev,1,Len(lcListaUtilNev)-1) + + Endif + + If lnNrUtilNev =0 + lnRaspuns = amessagebox("Doriti sa continuati inventarierea stocului la " + Dtoc(pdDataRef) + "?" , 4+32, "Inventariere") + Else + lnRaspuns = amessagebox("Doriti sa continuati inventarierea stocului la " + Dtoc(pdDataRef) + "?" + CRLF + ; + "ATENTIE! Daca se incepe o inventariere noua se vor suprascrie modificarile nevalidate ale utilizatorilor : " + lcListaUtilNev + "!", 4+32, "Inventariere") + Endif + + *!* If buton = 2 && NU + If lnRaspuns # 6 + llCallProc = .T. + Endif + Else + llCallProc = .T. + Endif + Endif + Else + llCallProc = .T. + Endif + + If llCallProc And lnSucces > 0 + tnRefacInventar = 1 + pdDataRef = ultima_zi_din_luna(gnAn, gnLuna) + *oCere = CREATEOBJECT('frm_cere_titlu','Data de referinta:','pdDataRef') + *oCere.SHOW() + + Do While pdDataRef > ultima_zi_din_luna(gnAn, gnLuna) + amessagebox('Data trebuie sa fie din luna curenta!',0,'Atentie') + pdDataRef = ultima_zi_din_luna(gnAn, gnLuna) + * oCere = CREATEOBJECT('frm_cere_titlu','Data de referinta:','pdDataRef') + * oCere.SHOW() + Enddo + + Endif + + If lnSucces > 0 + If tlObinvent + pnObinv = 1 + Else + pnObinv = 0 + Endif + + lcSel = [{call inventar_stoc(?tnRefacInventar, ?gcS, TO_DATE(']+Dtos(pdDataRef)+[','YYYY-MM-DD'),] + ; + [?pnObinv, ?gnIdSucursala)}] + * lcSel = [{call inventar_stoc(?tnRefacInventar, ?gcS, ?pdDataRef, ?pnObinv)}] + lcSchema = [''] + *!* lcCursor ='crs_inventar' + *!* lnSucces = goExecutor.oExecute(lcSel,lcCursor) + lnSucces = goExecutor.oExecute(lcSel) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,"Eroare") + Endif + Endif + + If lnSucces > 0 + lcNumeCursor = 'crs_inventar' + lcSelect = [select * from ] + Iif(tlInventarROAVin,[vvin_gest_inventar],[vgest_inventar]) + [ where 1=2] + If tlBonConsum + lcFiltru = [id_gestiune=]+Alltrim(Str(poAct.id_gestiune)) + [ and data_referinta = ?pdDataRef and ] + lcCondSpec + Else + lcFiltru = [data_referinta = ?pdDataRef and ] + lcCondSpec + Endif + lcSchema = [] + lcOrder = [denumire] + llAfisare = .F. + llModParam = .F. + + If Used(lcNumeCursor) + Use In &lcNumeCursor + Endif + Private podecabaza + podecabaza = '' + + gencursor('podecabaza',lcNumeCursor,lcSelect,[2=2],lcSchema,lcOrder,llAfisare,'',llModParam,lcFiltru) + podecabaza.ca_baza1.afisare() + + gnButon = 2 + + *!* modificare serii numere - 10.2007 + *!* If Pemstatus(_Screen,'nIdSerie',5) + *!* _Screen.nIdSerie = 0 + *!* Endif + *!* modificare serii numere - 10.2007 ^ + + Select crs_inventar + oInventar = Createobject('inventar_stoc') + oInventar.ocursor = podecabaza + oInventar.cnumeCursor = lcNumeCursor + oInventar.cFiltruOriginal = lcFiltru + oInventar.lObinv = tlObinvent + oInventar.lBonConsum = tlBonConsum + oInventar.lInventarROAVin = tlInventarROAVin + oInventar.Show() + If !tlBonConsum And gnButon = 1 + lnSucces = oscrie_in_fisiere(0,.F.,.T.) + If lnSucces < 0 + *!* modificare serii numere - 10.2007 + If Type([_Screen.nId_tipdoc]) = 'N' And !Empty(_Screen.nid_tipdoc) + poGeneratorNumere.dezaloca_numar(_Screen.nid_tipdoc) + Endif + *!* If Pemstatus(_Screen,'nIdSerie',5) + *!* lnIdSerieBon = Str(_Screen.nIdSerie) && il salvez in item.when + *!* If Type('lnIdSerieBon') = 'N' + *!* lcSql = [update ] + gcs + [.serii_numere set alocat = 0 where ] +; + *!* [ id_numar = ?lnIdSerieBon] + *!* lnSucces = goExecutor.oExecute(lcSql) + *!* If lnSucces < 0 + *!* lcTitlu = [Eroare] + *!* lcTip = [Avertizare] + *!* lcImagine = [exclam.ico] + *!* lcMesaj = goExecutor.cEroare + *!* ofrm_eroare = Createobject('frm_mesaj',lcTitlu,lcImagine,lcTip,lcMesaj) + *!* ofrm_eroare.Show(1) + *!* Release ofrm_eroare + *!* Endif + *!* Endif + *!* Endif + *!* modificare serii numere - 10.2007 ^ + Else + + lcSql = [update ] + gcs + [.gest_inventar set validat = 1, dataora_validat = pack_contafin.GET_DATAORA() ] + ; + [where data_referinta = ?pdDataRef and stoc_faptic <> cants+cant-cante and validat = 0 ] + ; + [AND id_util = ?gnIdUtil] + Iif(glEMama,[ and id_sucursala is null],gcCondSucursala) + lnSucces = goExecutor.oExecute(lcSql) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,"Eroare") + Endif + Endif + endif + *!* modificare 23.10.2012 + Use In (lcNumeCursor) + *!* modificare 23.10.2012 ^ + Endif + + *!* modificare serii numere - 10.2007 + If llCreareGeneratorNumere + Release poGeneratorNumere + Endif + *!* modificare serii numere - 10.2007 ^ + +Endproc && nota_inventar +********* SFARSIT: nota_inventar *********** + +********* INCEPUT: achizitie_import *********** +Procedure achizitie_import + Parameters tnIdSet, tlIntern + + Local I + Private pnIdSet + pnIdSet = tnIdSet + If Empty(pnIdSet) + Return + Endif + If Type('poGeneratorNumere') = 'U' + Private poGeneratorNumere + poGeneratorNumere = Createobject('oGeneratorNumere') + llCreareGeneratorNumere = .T. + Endif + + lnButon = lans(pnIdSet) + + If lnButon = 2 + If Used('actactan') + Use In actactan + Endif + Return + Endif + + Select actactan + Locate + Scatter Name poAct + Zap + + If Used('introdc') + Use In introdc + Endif +SET STEP ON + lcSql = [select id_note, explicatie as explicatia, scd, ascd, scc, ascc, cu_tva, id_set, ordine, in_valuta, id_jtva_coloana, ptva, explicatie_tva, tipjurnal,taxcode,paymentcode from vnote_contabile ] + ; + [where id_set = ?pnIdSet] + lcCursor = [cnote_contabile] + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,'Eroare') + Return + Endif + + DO CASE + CASE m.gnAn < 2017 + * In 2016 lucrez cu TVA 20%. Transform TVA din 19% in 20% + * Ach int 20% + update cnote_contabile set ptva = 20, id_jtva_coloana = 176, explicatie_tva = 'ACH. INT. 20%' where INLIST(id_jtva_coloana, 101, 103, 105) && 19% + update cnote_contabile set ptva = 20, id_jtva_coloana = 177, explicatie_tva = 'TVA ACH. INT. 20%' where INLIST(id_jtva_coloana, 102, 104, 106) && 19% + + update cnote_contabile set ptva = 20, id_jtva_coloana = 178, explicatie_tva = 'ACH. INT. NEEX. 20%' where id_jtva_coloana = 188 + update cnote_contabile set ptva = 20, id_jtva_coloana = 179, explicatie_tva = 'TVA ACH. INT. NEEX. 20%' where id_jtva_coloana = 189 + + * Ach. b. imp. 20% + update cnote_contabile set ptva = 20, id_jtva_coloana = 180, explicatie_tva = 'ACH. IMP. 20%' where INLIST(id_jtva_coloana, 114, 116, 118) + update cnote_contabile set ptva = 20, id_jtva_coloana = 181, explicatie_tva = 'TVA ACH. IMP. 20%' where INLIST(id_jtva_coloana, 115, 117, 119) + + * Ach b. CE 20% + update cnote_contabile set ptva = 20, id_jtva_coloana = 182, explicatie_tva = 'ACH. BUNURI CE. 20%' where INLIST(id_jtva_coloana, 127, 129, 133) + update cnote_contabile set ptva = 20, id_jtva_coloana = 183, explicatie_tva = 'TVA ACH. BUNURI CE. 20%' where INLIST(id_jtva_coloana, 128, 130, 134) + + * Ach Tx inversa 20% + update cnote_contabile set ptva = 20, id_jtva_coloana = 186, explicatie_tva = 'TX. INV. 20%' where INLIST(id_jtva_coloana, 137, 139, 141) + update cnote_contabile set ptva = 20, id_jtva_coloana = 187, explicatie_tva = 'TVA TX. INV. 20%' where INLIST(id_jtva_coloana, 138, 140, 142) + + * LIV INT 20% + update cnote_contabile set ptva = 20, id_jtva_coloana = 27, explicatie_tva = 'LIVR.INTERN 20%' where id_jtva_coloana = 1 + update cnote_contabile set ptva = 20, id_jtva_coloana = 28, explicatie_tva = 'TVA LIVR.INTERN 20%' where id_jtva_coloana = 2 + + update cnote_contabile set ptva = 20, id_jtva_coloana = 29, explicatie_tva = 'LIVR.INTERN NEEX. 20%' where id_jtva_coloana = 31 + update cnote_contabile set ptva = 20, id_jtva_coloana = 30, explicatie_tva = 'TVA LIVR.INTERN NEEX. 20%' where id_jtva_coloana = 32 + + CASE gnAn <= 2015 + * In 2015 lucrez cu TVA 24%. Transform TVA din 20% in 24% + * Ach int 24% - 20% + update cnote_contabile set ptva = 24, id_jtva_coloana = 156, explicatie_tva = 'ACH. INT. 24%' where id_jtva_coloana = 176 + update cnote_contabile set ptva = 24, id_jtva_coloana = 157, explicatie_tva = 'TVA ACH. INT. 24%' where id_jtva_coloana = 177 + + update cnote_contabile set ptva = 24, id_jtva_coloana = 170, explicatie_tva = 'ACH. INT. NEEX. 24%' where id_jtva_coloana = 178 + update cnote_contabile set ptva = 24, id_jtva_coloana = 171, explicatie_tva = 'TVA ACH. INT. NEEX. 24%' where id_jtva_coloana = 179 + + * Ach. b. imp. 24% + update cnote_contabile set ptva = 24, id_jtva_coloana = 158, explicatie_tva = 'ACH. IMP. 24%' where id_jtva_coloana = 180 + update cnote_contabile set ptva = 24, id_jtva_coloana = 159, explicatie_tva = 'TVA ACH. IMP. 24%' where id_jtva_coloana = 181 + + * Ach b. CE 24% + update cnote_contabile set ptva = 24, id_jtva_coloana = 160, explicatie_tva = 'ACH. BUNURI CE. 24%' where id_jtva_coloana = 182 + update cnote_contabile set ptva = 24, id_jtva_coloana = 161, explicatie_tva = 'TVA ACH. BUNURI CE. 24%' where id_jtva_coloana = 183 + + * Ach Tx inversa 24% + update cnote_contabile set ptva = 24, id_jtva_coloana = 162, explicatie_tva = 'TX. INV. 24%' where id_jtva_coloana = 186 + update cnote_contabile set ptva = 24, id_jtva_coloana = 163, explicatie_tva = 'TVA TX. INV. 24%' where id_jtva_coloana = 187 + + * LIV INT 24% + update cnote_contabile set ptva = 24, id_jtva_coloana = 15, explicatie_tva = 'LIVR.INTERN 24%' where id_jtva_coloana = 27 + update cnote_contabile set ptva = 24, id_jtva_coloana = 16, explicatie_tva = 'TVA LIVR.INTERN 24%' where id_jtva_coloana = 28 + + update cnote_contabile set ptva = 24, id_jtva_coloana = 21, explicatie_tva = 'LIVR.INTERN NEEX. 24%' where id_jtva_coloana = 29 + update cnote_contabile set ptva = 24, id_jtva_coloana = 22, explicatie_tva = 'TVA LIVR.INTERN NEEX. 24%' where id_jtva_coloana = 30 + ENDCASE && gnAn <= 2015 + + * La facturile cu TVA Incasare modific 4426 in 4428 si explicatiile de TVA + IF m.tlIntern AND poAct.tva_incasare = 1 + SELECT cnote_contabile + SCAN + IF scd = '4426' + REPLACE scd WITH '4428' + loTVA = GeTvaColoana(id_jtva_coloana, 1, 'JC') + ELSE + loTVA = GeJtvaColoana(id_jtva_coloana, 1, 'JC') + ENDIF + SELECT cnote_contabile + REPLACE id_jtva_coloana WITH loTVA.id_jtva_coloana, explicatie_tva WITH loTVA.denumire + ENDSCAN + ENDIF + + *!* 22.05.2008 + *!* id_valuta - dadea eroare la verificare_note_contabile + *!* modificare v 2.1.39 : am adaugat data_act, fdoc, id_fdoc, se_scrie + *!* modificare v 2.2.6 : am adaugat tva_incasare #3649 + Select N.*, ; + 00000000000000.0000 As suma, 00000000000000.0000 As SUMA_val, 00000000000000 As id_partd, 00000000000000 As id_partc, Space(100) As partd, Space(100) As partc, ; + 00000000000000 As id_fact, 00000000000000 As id_factd, 00000000000000 As id_factc, 00000000000000 As pereched, 00000000000000 As perechec, ; + 00000000000000 As nract, Space(10) As serie_Act,Space(50) As explicatia4, Space(50) As explicatia5, .T. As participa_valuta, ; + poAct.id_valuta As id_valuta, poAct.Curs As Curs, poAct.dataact as dataact, poAct.fdoc as fdoc, poAct.id_fdoc as id_fdoc, 0 as se_scrie, poAct.tva_incasare as tva_incasare ; + FROM cnote_contabile N ; + WHERE N.id_set = poAct.id_set ; + INTO Cursor introdc Readwrite Order By ordine + *!* 22.05.2008 ^ + + Use In (SELECT('cnote_contabile')) + + If !Used('saft_taxtable') + update_saft_taxtable() + ENDIF + If !Used('saft_mecanisme_plati') + update_saft_mecanisme_plati() + ENDIF + + * Actualizez taxcode SAFT in functie de furnizori RTVAI + IF m.gl406 + SELECT introdc + SCAN FOR INLIST(ALLTRIM(NVL(tipjurnal,'')), 'JC', 'JV') + lnIdJtva = introdc.id_jtva_coloana + lnIdPart = NVL(introdc.id_partc, introdc.id_partd) + lnTaxCode = GetTaxCodeIdPart(m.gnAn, m.gnLuna, poAct.DataAct, m.lnIdJtva, m.lnIdPart) + SELECT introdc + REPLACE taxcode WITH m.lnTaxCode + ENDSCAN + ENDIF + GO TOP IN introdc + + Select ordine, ID_JTVA_coloana, denumire, JC, JV, AFISAT, COLOANA_JC, COLOANA_JV, COTA_TVA, ID_TVA ; + FROM jtva_coloane ; + WHERE ID_JTVA_coloana > 0 ; + UNION ; + SELECT 0 As ordine, 0 As ID_JTVA_coloana, '' As denumire, 0 As JC, 0 As JV, 1 As AFISAT, '' As COLOANA_JC, '' As COLOANA_JV, 0 As COTA_TVA, 0 As ID_TVA ; + FROM jtva_coloane ; + WHERE Recno() = 1 ; + INTO Cursor jtva_coloane2 NOFILTER ; + ORDER By 1 + + gnZvama = 0 + + gnButon = 1 + obj = Createobject('IMPORT_nota', tlIntern) + obj.oact = poAct + obj.Show() + + If gnButon=2 + If Type('poGeneratorNumere') <> 'U' + poGeneratorNumere.dezaloca_numere() + poGeneratorNumere.ResetAll() + Endif + ENDIF + + Use In (SELECT('introdc')) + Use In (SELECT('cote_tva')) + Use In (SELECT('actactan')) + Use In (SELECT('rul_temp')) + USE IN (SELECT('rul_temp_obinv')) + Use In (SELECT('jtva_coloane2')) + +ENDPROC && achizitie_import + + + + +Procedure completare_parteneri_gestiune + + *!* 02.06.2008 + *!* completez partenerii corespondenti pentru cont-gestin, cont-gestout + lcSql = [Select cont, id_gestiune, id_part, denumire from vasociere_parteneri_gestiuni] + lnSucces = goExecutor.oExecute(lcSql, "crsGestiuniParteneri") + If lnSucces < 0 + amessagebox(goExecutor.oExecute,0+16,"Eroare") + Else + Select actactan + Scan For Empty(id_partd) Or Empty(id_partc) + Scatter Name loRec + If Empty(actactan.id_partd) + Select crsGestiuniParteneri + Locate For Alltrim(Cont) == Alltrim(loRec.scd) And id_gestiune = Iif(!Empty(loRec.id_gestin), loRec.id_gestin, loRec.id_gestout) + If Found() + Replace id_partd With crsGestiuniParteneri.id_part, partd With crsGestiuniParteneri.denumire In actactan + Endif + Endif + If Empty(actactan.id_partc) + Select crsGestiuniParteneri + Locate For Alltrim(Cont) == Alltrim(loRec.scc) And id_gestiune = Iif(!Empty(loRec.id_gestout), loRec.id_gestout, loRec.id_gestin) + If Found() + Replace id_partc With crsGestiuniParteneri.id_part, partc With crsGestiuniParteneri.denumire In actactan + Endif + Endif + + Endscan + Use In (Select('crsGestiuniParteneri')) + Endif + +Endproc && completare_parteneri_gestiune + +********* INCEPUT: lista_inventar_magazin *********** +Procedure lista_inventar_magazin + Local lcSelect, lcFiltru, lcSchema, lcOrder, llAfisare, lcgroup, llModParam, lcFiltruOriginal + Local llAfiseaza + Private poInventare + poInventare = Null + lcFiltru = [] + lcSchema = [id_c_inventar n(20),data_inventar t,id_util n(10),an n(4),luna n(2), ] + ; + [descriere c(240),validat n(1),dataorav t,id_utilv n(10),util c(240),utilv c(240), tip n(2), id_sucursala n(5), sucursala c(100)] + + lcSelect = [select id_c_inventar,data_inventar,id_util,an,luna, ] + ; + [descriere,validat,dataorav,id_utilv,util,utilv,tip,id_sucursala,sucursala] + ; + [ from vgest_centr_inventar] + lcOrder = [2 desc] + llAfisare=.F. + lcgroup = [] + llModParam = .T. + lcFiltruOriginal = Iif(!Empty(gcCondSucursala), Substr(gcCondSucursala,6)+[ and tip = 5 ], [ tip = 5 ]) + gencursor('poInventare','crsinventare',lcSelect, lcFiltru, lcSchema, lcOrder, llAfisare, lcgroup, llModParam, lcFiltruOriginal) + poInventare.ca_baza1.afisare() + loFrmInventare = Createobject('frm_inventar_magazin_centralizator') &&oinventar.vcx + loFrmInventare.Show(1) + Use In (Select('crsInventare')) + Release loFrmInventare,poInventare +Endproc && lista_inventar_magazin +********* SFARSIT: lista_inventar_magazin *********** +********* INCEPUT: vizualizeaza_inventar_magazin *********** +Procedure vizualizeaza_inventar_magazin + Lparameters tnIdCInventar, tlCorectie + *** tlCorectie: .T. daca inventarul este validat si se doreste corectarea lui + LOCAL llCorectie, llNuSuprascrieCod + llNuSuprascrieCod = .F. + llCorectie = IIF(PCOUNT() >=2, tlCorectie, .F.) + + Private pdDataRef, pdDataInceputInventar, pdDataSfarsitInventar, pnNract, pnNnir, pdDataNotaInventar, pcTextLunaAn, pcTextLunaAnNecompletat, pcChiosc + *!* 15.06.2010 + PRIVATE pnIdFact, pnCod,pnIdInventar + pnCod = 0 + pnIdFact = 0 + pnNract = 0 + pnNnir = 0 + pdDataNotaInventar = {} + pcTextLunaAn = '' + pcChiosc = '' + *!* 15.06.2010 ^ +*!* 12.01.2015 + pnIdInventar = tnIdCInventar +*!* 12.01.2015 ^ + pcTextLunaAnNecompletat = '' + + Local lcSelect, lcFiltru, lcSchema, lcOrder, llAfisare, lcgroup, llModParam, lcFiltruOriginal + Local lnValidat, lnTip,lcId_gestiuni,lcDescriere, lnOptiuneInventar, ldDataInventar + lnValidat = 0 + lnTip = 1 + + Local llCreareGeneratorNumere + Private pdDataRef + llCreareGeneratorNumere = .F. + If Type('poGeneratorNumere') = 'U' + Private poGeneratorNumere + poGeneratorNumere = Createobject('oGeneratorNumere') + llCreareGeneratorNumere = .T. + ENDIF + + + *!* 16.06.2010 + lcSql = "select validat, dataorav, tip, id_gestiuni, descriere, optiuneinventar, numarluni, data_inventar, id_fact, nract, nnir, dataact from VGEST_CENTR_INVENTAR where id_c_inventar=?pnIdInventar" + *!* 16.06.2010 ^ + lcCursor = 'crsGestCentrInventarTemp' + lnSucces = goExecutor.oExecute(m.lcSql, m.lcCursor) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,"Eroare") + Return + ENDIF + + *!* 21.12.2011 + *** trebuie act.cod pentru nota de completare din inventarul de corectie + pnIdFact = NVL(crsGestCentrInventarTemp.id_fact, 0) + IF m.llCorectie + lnSucces = goExecutor.oSelect2Value("SELECT MAX(cod) FROM act WHERE an = " + ALLTRIM(STR(m.gnAn)) + " and luna = " + ALLTRIM(STR(m.gnLuna)) + " and id_fact = " + ALLTRIM(STR(m.pnIdFact)), @pnCod) + IF lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,"Eroare") + Return + ENDIF + ENDIF + *!* 21.12.2011 ^ + + Select crsGestCentrInventarTemp + lnValidat = Validat + lnTip = tip + lcId_gestiuni = Alltrim(id_gestiuni) + lcDescriere = Alltrim(descriere) + lnOptiuneInventar = optiuneinventar + ldDataInventar = data_inventar + pdDataRef = data_inventar + pdDataInceputInventar = data_inventar + pdDataSfarsitInventar = dataorav + pnNract = nract + pnNnir = nnir + pdDataNotaInventar = TTOD(NVL(dataact,{//::})) + pcChiosc = ALLTRIM(NVL(descriere,'')) + pcTextLunaAn = 'Luna contabila ' + PADL(allt(str(m.gnLuna)),2, '0') + '/' + allt(str(m.gnAn)) + ; + ' Inventar ' + transform(m.pdDataInceputInventar)+ ; + IIF(!EMPTY(NVL(m.pdDataSfarsitInventar,{})), ' - ' + transform(m.pdDataSfarsitInventar), '') + ; + IIF(!EMPTY(m.lcDescriere), ' | ' + m.lcDescriere , '') + ; + IIF(!EMPTY(NVL(m.pnNract, 0)), ' | Nr. doc. ' + alltrim(str(pnNract)),'') + ; + IIF(!EMPTY(NVL(m.pnNnir,0)), ' | Nr. bon ' + alltrim(str(pnNnir)),'') + ; + IIF(!EMPTY(NVL(m.pdDataNotaInventar,{})), ' | Data doc. ' + transform(m.pdDataNotaInventar), '') + Use In (Select('crsGestCentrInventarTemp')) + + pcTextLunaAnNecompletat = 'Luna contabila ' + PADL(allt(str(m.gnLuna)),2, '0') + '/' + allt(str(m.gnAn)) + ; + IIF(!EMPTY(m.lcDescriere), ' | ' + m.lcDescriere , '') && fara data inceput inventar si numar/data bon, se poate lista si ulterior, la contabilitate si nu trebuie data generarii inventarului + + + lcNumeCursor = 'crs_inventar' + lcSelect = [select * from vgest_inventar] + lcSchema = [] + lcFiltru= [] && + Iif(glEMama,[ and id_sucursala is null],gcCondSucursala) + lcOrder = [denumire] + llAfisare = .F. + llModParam = .T. + lcgroup = [] + lcFiltruOriginal = [id_c_inventar = ] + Alltrim(Str(tnIdCInventar)) + + If Used(lcNumeCursor) + Use In &lcNumeCursor + Endif + Private podecabaza + podecabaza = '' + gencursor('podecabaza',lcNumeCursor,lcSelect, lcFiltru, lcSchema, lcOrder, llAfisare, lcgroup, llModParam, lcFiltruOriginal) + podecabaza.ca_baza1.afisare() + gnButon = 2 + + + lcId_gestiuni = Strtran(lcId_gestiuni,[|],[,]) + If Right(Alltrim(lcId_gestiuni),1) = [,] + lcId_gestiuni = Left(Alltrim(lcId_gestiuni),Len(Alltrim(lcId_gestiuni))-1) + Endif + If Empty(Nvl(lcId_gestiuni,'')) + lcSel = [Select nume_gestiune,id_gestiune from vnom_gestiuni] + Else + lcSel = [Select nume_gestiune,id_gestiune from vnom_gestiuni where id_gestiune in (]+lcId_gestiuni +[)] + Endif + + lcSchema = [''] + lcCursor = [crs_gest] + lnSucces = goExecutor.oExecute(lcSel,lcCursor) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,"Eroare") + Endif + Select crs_gest + lcNume_gest = crs_gest.nume_gestiune + lnId_gestiune = crs_gest.id_gestiune + If Used('crs_gest') + Use In crs_gest + ENDIF + + *!* 19.04.2010 + update_cote_TVA() && updateserver.prg -> cursorul cote_tva + *!* 19.04.2010 + + Select crs_inventar + lnid_c_inventar=id_c_inventar + + + Scatter Name oinv Blank + oInventar = Createobject('inventar_stoc_magazin',tnIdCInventar) + oInventar.ocursor = podecabaza + oInventar.cnumeCursor = lcNumeCursor + oInventar.cFiltruOriginal = lcFiltru + oInventar.lValidat = lnValidat = 1 + oInventar.lCorectie = m.llCorectie + oInventar.cId_gestiuni = lcId_gestiuni + oInventar.cNume_gest = lcNume_gest + oInventar.nId_gestiune = lnId_gestiune + oInventar.cdescriere = lcDescriere + oInventar.nOptiuneInventar = lnOptiuneInventar + oInventar.dDataInventar = ldDataInventar + oInventar.nCod = m.pnCod + oInventar.nIdFact = m.pnIdFact + If lnValidat = 1 AND !m.llCorectie + oInventar.but_nou1.Visible = .F. && adaugare + oInventar.but_termin1.Visible = .F. + oInventar.but_copiaza1.Visible = .F. && copiere + oInventar.but_stergex.Visible = .F. && stergere + oInventar.Ct_clb_gestiune.Visible = .F. + oInventar.Clb_tx_codbare.Visible = .F. +*!* oInventar.Ct_clb_articol.Visible = .F. + oInventar._shape3.Visible = .F. + Endif + oInventar.Show() + + + If gnButon = 1 + *!* 21.12.2011 +*!* daca rulajele din inventarul de corectie au acelasi cod ca rulajele initiale, nu se pot sterge rulajele daca se sterge nota +*!* llNuSuprascrieCod = !m.llCorectie + llNuSuprascrieCod = .F. + *!* 21.12.2011 ^ + lnSucces = oscrie_in_fisiere(0,.F., .T., m.llNuSuprascrieCod) + If lnSucces < 0 + If Type([_Screen.nId_tipdoc]) = 'N' And !Empty(_Screen.nid_tipdoc) + poGeneratorNumere.dezaloca_numar(_Screen.nid_tipdoc) + Endif + ELSE + IF EMPTY(m.pnIdFact) + *!* 15.06.2010 + pnIdFact = 0 + lnSucces = goExecutor.oFunction2Value("pack_contafin.GET_IDFACT()", @pnIdFact) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,"Eroare") + Endif + ENDIF + + *!* 21.12.2011 + * lcSql = [update ] + gcs + [.gest_inventar set validat = 1, dataora_validat = pack_contafin.GET_DATAORA() where data_referinta = ?pdDataRef and stoc_faptic <> cants+cant-cante] + TEXT TO lcSql NOSHOW + begin + update GEST_CENTR_INVENTAR set validat = 1, id_fact = ?pnIdFact, dataorav = sysdate, id_utilv = ?gnIdUtil where id_c_inventar = ?lnid_c_inventar; + update gest_inventar set validat = 1, dataora_validat = sysdate where id_c_inventar = ?lnid_c_inventar AND validat = 0 ; + end; + ENDTEXT +*!* lcSql = [update ] + gcs + [.GEST_CENTR_INVENTAR set validat = 1, id_fact = ?pnIdFact, dataorav = sysdate,id_utilv=?gnIdUtil where id_c_inventar =?lnid_c_inventar] + *!* 21.12.2011 ^ + *!* 15.06.2010 ^ + lnSucces = goExecutor.oExecute(lcSql) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,"Eroare") + ENDIF + Endif + + If llCreareGeneratorNumere + Release poGeneratorNumere + Endif + ENDIF + *!* modificare 23.10.2012 + Use In (Select(lcNumeCursor)) + Use In (Select('rul_temp_obinv')) + *!* modificare 23.10.2012 ^ + *!* 07.09.2009 + USE IN (SELECT('actactan')) + USE IN (SELECT('rul_temp')) + *!* 07.09.2009 ^ + *!* 19.04.2010 + USE IN (SELECT('cote_tva')) + *!* 19.04.2010 ^ +Endproc && vizualizeaza_inventar_magazin +********* SFARSIT: vizualizeaza_inventar_magazin *********** + +*!* 30.10.2008 NIR DEPOZIT +Procedure COMPLETEAZA_ARTICOLE_DEP_NIR + Parameters tnNract, tdDataact + + Local lcSelect, lcSql, lcCursor, lnSucces, llContinuare + llContinuare = .T. + + lcSelect = Select() + + lcSql = [SELECT ND.ID, ND.ID_ARTICOL, ND.CODBARE, ND.DENUMIRE, ND.CANTITATE FROM DEP_NIR_DETALII ND JOIN DEP_NIR N ON ND.ID_NIR = N.ID WHERE N.NUMARACT = ?tnNract AND trunc(N.DATAACT) = ?tdDataact AND NVL(ID_ARTICOL,0) = 0] + lcCursor = [crsArticoleNoiTemp] + lnSucces = goExecutor.oExecute(lcSql, lcCursor) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,'Eroare') + Else + If Reccount(lcCursor) > 0 + loFrmArticoleNir = Createobject("frm_articole_noi") && ointroduceri_depozit.vcx + loFrmArticoleNir.lb_titlu_alb_b121.Caption = "FACTURA " + Alltrim(Str(tnNract)) + " / " + Alltrim(Transform(tdDataact)) + " - Articole noi" + loFrmArticoleNir.Show(1) + llContinuare = gnButon = 1 + Endif + Endif + + If llContinuare + lcSql = [SELECT COUNT(*) as nr FROM DEP_NIR N WHERE N.NUMARACT = ?tnNract AND trunc(N.DATAACT) = ?tdDataact] + lcCursor = [crsArticoleCount] + lnSucces = goExecutor.oExecute(lcSql, lcCursor) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,'Eroare') + Else + *!* TEMPORAR - PANA II FAC UN SET DISTINCT ??? + If Nvl(crsArticoleCount.nr,0) > 0 + oSet.id_selSt = 30 && vnom_articole_dep_nir + Endif + *!* TEMPORAR ^ + Use In (Select(lcCursor)) + Endif + Endif && llcContinuare + Select (lcSelect) + +Endproc && COMPLETEAZA_ARTICOLE_DEP_NIR +*!* 30.10.2008 ^ diff --git a/COMUN/programe/ointroduceri_efactura.prg b/COMUN/programe/ointroduceri_efactura.prg new file mode 100644 index 0000000..6c5edbc --- /dev/null +++ b/COMUN/programe/ointroduceri_efactura.prg @@ -0,0 +1,129 @@ +* ointroduceri_efactura.prg + +Procedure importEfacturaPrimite + DO vizImportEFactura WITH 'PRIMITE' +ENDPROC + +PROCEDURE importEfacturaTrimise + DO vizImportEFactura WITH 'TRIMISE' +ENDPROC + +PROCEDURE vizImportEFactura + LPARAMETERS tcTip + * tcTIP: PRIMITE/TRIMISE + + Private poFacturi, poFacturiDetalii + Local loFrmFacturi As "frm_efactura_import", lcTip, llPrimite + Local lcData1, lcFiltru, lcFiltruOriginal, lcOrder, lcSchema, lcgroup, llAfiseaza, llModParam + poFacturi = Null + poFacturiDetalii = Null + + lcTip = IIF(TYPE('tcTip') = 'C' and !EMPTY(m.tcTip), UPPER(ALLTRIM(m.tcTip)), 'PRIMITE') + llPrimite = (m.lcTip = 'PRIMITE') + + lcTabel = IIF(m.lcTip = 'PRIMITE', 'anaf_vefactura_primit', 'anaf_vefactura_trimis') + +* FACTURI PRIMITE/TRIMISE + lcData1 = '01' + Padl(Int(m.gnLuna),2,'0') + Alltrim(Str(m.gnAn)) + TEXT To lcSchema Noshow +ales N(1), id N(20), id_fact N(20), data_act D, data_scad D, numar_act C(30), xfurnizor C(200), xclient C(200), partener C(200), id_incarcare C(36), id_descarcare c(36) null, tip_mesaj_raspuns C(50) null,mesaj_raspuns C(250) null, data_raspuns D null, trimis N(1) null, data_trimis T null, cod_fiscal C(30) null, cod_fiscal_emitent C(30) null, cod_fiscal_beneficiar C(30) null, detalii M null, total_fara_tva N(16,4), total_tva N(16,4), total_cu_tva N(16,4), discount_fara_tva N(16,4), taxe_fara_tva N(16,4), valoare_fara_tva N(16,4), total_de_plata N(16,4), nume_valuta C(5), test N(1) null, jtotctva N(16,4), descriere M null, detalii_plata M null, diferenta N(16,4), procesat N(1) + ENDTEXT + + TEXT To lcSelect TEXTMERGE Noshow +SELECT 0 as ales, id, id_fact, data_act, data_scad, numar_act, xfurnizor, xclient, partener, id_incarcare, id_descarcare, tip_mesaj_raspuns, mesaj_raspuns, data_raspuns, NVL(trimis,0) as trimis, data_trimis, cod_fiscal, cod_fiscal_emitent, cod_fiscal_beneficiar, detalii, total_fara_tva, total_tva, total_cu_tva, discount_fara_tva, taxe_fara_tva, valoare_fara_tva, total_de_plata, nume_valuta, test, jtotctva, descriere, detalii_plata, NVL(total_cu_tva, 0.00)-NVL(jtotctva, 0.00) as diferenta, procesat FROM <> + ENDTEXT + lcOrder = [data_act,numar_act,data_raspuns] + lcgroup = [] + lcFiltru = [(extract(year from data_act) = ?gnAn and extract(month from data_act) = ?gnLuna) or (data_act is null and data_raspuns >= to_date('] + m.lcData1 + [','ddmmyyyy'))] + lcFiltruOriginal = [] + llModParam = .T. + llAfiseaza = .F. + + gencursor('poFacturi', 'crsFacturi', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal) + poFacturi.ca_baza1.afisare() + Select crsFacturi + Go Top + +* DETALII FACTURI PRIMITE/TRIMISE/EMISE + TEXT To lcSchema Noshow +id_tip N(10) null, cont c(4) null, id_articol N(20) null, id_gestiune N(20) null, id N(20), id_efactura N(20), nr N(5), articol V(250), descriere V(250), detalii M, cantitate N(18,6), um V(20), um_iso V(50), id_um I, um_roa V(50), pret N(20,6), proctva N(7,2), valoarefaratva N(20,6), in_stoc N(1), articol_roa V(250) + ENDTEXT + TEXT To lcSelect Noshow +select CAST(0 as number(10)) as id_tip, CAST('' as Varchar2(4)) as cont, CAST(null as Number(20)) as id_articol, CAST(null as Number(20)) as id_gestiune, id, id_efactura, nr, articol, descriere, detalii, cantitate, um, um_iso, id_um, um_roa, pret, proctva, valoarefaratva, 0 as in_stoc, CAST('' as Varchar2(250)) as articol_roa from anaf_vefactura_detalii + ENDTEXT + lcOrder = [nr] + lcgroup = [] + lcFiltru = [1=2] && IIF(!EMPTY(NVL(crsFacturiPrimite.id,0)), [id_efactura=] + ALLTRIM(STR(crsFacturiPrimite.id)), [1=2]) + lcFiltruOriginal = [] + llModParam = .T. + llAfiseaza = .F. + + gencursor('poFacturiDetalii', 'crsDetaliiFacturi', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal) + poFacturiDetalii.ca_baza1.afisare() + + * Cursoare helper + CREATE CURSOR cTip (id I, in_stoc N(1), tip V(50), cont V(4)) + INSERT INTO cTip (tip, cont, in_stoc) VALUES ('Nedefinit','', 0) + INSERT INTO cTip (tip, cont, in_stoc) VALUES ('Ch. mat. nestoc.','604', 0) + INSERT INTO cTip (tip, cont, in_stoc) VALUES ('Ch. Energie','6051', 0) + INSERT INTO cTip (tip, cont, in_stoc) VALUES ('Ch. Apa','6052', 0) + INSERT INTO cTip (tip, cont, in_stoc) VALUES ('Ch. Gaze','6053', 0) + INSERT INTO cTip (tip, cont, in_stoc) VALUES ('Ch. chirii','6123', 0) + INSERT INTO cTip (tip, cont, in_stoc) VALUES ('Ch. colaboratori','621', 0) + INSERT INTO cTip (tip, cont, in_stoc) VALUES ('Ch. comisioane','622', 0) + INSERT INTO cTip (tip, cont, in_stoc) VALUES ('Ch. protocol','623', 0) + INSERT INTO cTip (tip, cont, in_stoc) VALUES ('Ch. transp. bunuri/pers.','624', 0) + INSERT INTO cTip (tip, cont, in_stoc) VALUES ('Ch. deplasari','625', 0) + INSERT INTO cTip (tip, cont, in_stoc) VALUES ('Ch. posta/telecom.','626', 0) + INSERT INTO cTip (tip, cont, in_stoc) VALUES ('Ch. terti','628', 0) + INSERT INTO cTip (tip, cont, in_stoc) VALUES ('Altele','461', 0) + INSERT INTO cTip (tip, cont, in_stoc) VALUES ('-----------------','', 0) + INSERT INTO cTip (tip, cont, in_stoc) VALUES ('Marfuri','371', 1) + INSERT INTO cTip (tip, cont, in_stoc) VALUES ('Materii prime','301', 1) + INSERT INTO cTip (tip, cont, in_stoc) VALUES ('Materiale auxiliare','3021', 1) + INSERT INTO cTip (tip, cont, in_stoc) VALUES ('Ambalaje','381', 1) + INSERT INTO cTip (tip, cont, in_stoc) VALUES ('Obiecte de inventar','303', 1) + INSERT INTO cTip (tip, cont, in_stoc) VALUES ('Amenajari provizorii','323', 1) + INSERT INTO cTip (tip, cont, in_stoc) VALUES ('Mat. spre prelucrare','8032', 1) + INSERT INTO cTip (tip, cont, in_stoc) VALUES ('Mat. in pastrare/consig.','8033', 1) + INSERT INTO cTip (tip, cont, in_stoc) VALUES ('Discount financiar','767', 1) + INSERT INTO cTip (tip, cont, in_stoc) VALUES ('Combustibili','3022', 1) + INSERT INTO cTip (tip, cont, in_stoc) VALUES ('Piese de schimb','3024', 1) + INSERT INTO cTip (tip, cont, in_stoc) VALUES ('Alte mat. consumabile','3028', 1) + INSERT INTO cTip (tip, cont, in_stoc) VALUES ('Discount comercial','609', 1) + INSERT INTO cTip (tip, cont, in_stoc) VALUES ('Ambalaje SGR','461', 0) + + REPLACE ALL id WITH RECNO()-1 IN cTip + GO TOP IN cTip + INDEX on id TAG id + +*!* llSucces = goExecutor.oExecuta("select id_articol, denumire, codmat from vnom_articole where inactiv = 0", 'cArticole') + +*!* SELECT cArticole +*!* INDEX on id_articol TAG id_articol + + llSucces = goExecutor.oExecuta([select distinct nume_gestiune,cgest,id_gestiune,nr_pag,cont from vgest_gestiuni_util where inactiv = 0 and id_util = ] + Alltrim(Str(m.gnIdUtil)), 'cGestiuni') + SELECT cGestiuni + INDEX on id_gestiune TAG id_gest + + llSucces = goExecutor.oExecuta("select cod_um_iso, um_iso from syn_vnom_um_iso", 'cUMISO') + SELECT cUMISO + INDEX on cod_um_iso TAG cod_um_iso + + llSucces = goExecutor.oExecuta("select id, um, cod_um_iso, um_iso from vnom_um", 'cUM') + SELECT cUM + INDEX on id TAG id + + Select crsFacturi + loFrmFacturi = Createobject("frm_import_efactura", m.llPrimite) +* Do Form anaf_efactura Name loFrmBorderou Linked With this Noshow + + loFrmFacturi.Show(1) + + Use In (Select('crsFacturi')) + Use In (Select('crsDetaliiFacturi')) + Use In (Select('cTip')) + Use In (Select('cArticole')) + Use In (Select('cGestiuni')) +Endproc && vizFacturiPrimite + \ No newline at end of file diff --git a/COMUN/programe/omeniu_initializari.prg b/COMUN/programe/omeniu_initializari.prg new file mode 100644 index 0000000..983489f --- /dev/null +++ b/COMUN/programe/omeniu_initializari.prg @@ -0,0 +1,414 @@ +********************************************************************** +* Program....: OMENIU_INITIALIZARI.PRG +* Version....: +* Author.....: MMUTU # marius.mutu +* Date.......: 15 June 2006, 15:21:31 +* Notice.....: Copyright 2006, +* All Rights Reserved. +* Compiler...: Visual FoxPro 09.00.0000.2412 for Windows +* Abstract...: +* Changes....: marius.mutu, Created 15 June 2006 / 15:21:31 +* Parameters.: +* called by..: +* Purpose....: +********************************************************************** + + +*------------------------------------------------------------ +* Description: configurare_note +* Parameters: tlCRM +* Return: +* Use: +*------------------------------------------------------------ +* Id Date By Description +* 1 10/12/2004 lavinia.viziru Initial Creation +* +*------------------------------------------------------------ +Procedure configurare_note + Parameters tlCRM + + Local llCRM + Local ofrm_note As Form + Local lcCursor, lcCursor0, lcFiltru, lcForm, lcOrder, lcSchema, lcSelect, lcSelect0, lnSucces + Local lnSucces0 + llCRM = tlCRM && folosesc crm_note_vanzari de pe server + + ***----------------------------------------------------------------------------------------------------------------------------- + If llCRM + Private poNote_vanzari + Store '' To poNote_vanzari + + Local lcSchema1, lcSelect1, lcOrder1, lcFiltru1, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal + lcSchema1 = [] + lcSelect1 = [select denumire as meniu, nv.* from vcrm_note_vanzari nv] + lcOrder1 = [denumire] + lcgroup = [] + lcFiltru1 = [] + lcFiltruOriginal = [] + llModParam = .T. + llAfiseaza = .F. + + gencursor('poNote_vanzari', 'nom_meniu', lcSelect1, lcFiltru1, lcSchema1, lcOrder1, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal) + poNote_vanzari.ca_baza1.afisare() + + Else + + Select nom_meniu + Set Order To 3 && Meniu + Go Top + Endif + ***----------------------------------------------------------------------------------------------------------------------------- + lcSelect0 = [select cont, acont from ] + gcS + [.plcont where an = ] + Alltrim(Str(gnAn)) + lcCursor0 = [cplcont] + + lnSucces0 = goExecutor.oExecute(lcSelect0, lcCursor0) + If lnSucces0 < 0 + aMESSAGEBOX(goExecutor.cEroare, 0 + 16, 'Eroare') + Return + Endif + ***----------------------------------------------------------------------------------------------------------------------------- + Private ponote_contab, pcschema, pcselect + Store '' To ponote_contab + lcSchema1 = [] + lcSelect1 = [select * from ] + Iif(gnAn >= Iif(Type('gnAnFormNou') = 'U', 2007, gnAnFormNou), [vnote_contabile], [note_contabile]) + lcOrder1 = [id_set, ordine] + lcgroup = [] + lcFiltru1 = [] + lcFiltruOriginal = [] + llModParam = .T. + llAfiseaza = .F. + + gencursor('ponote_contab', 'cnote_contab', lcSelect1, lcFiltru1, lcSchema1, lcOrder1, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal) + ponote_contab.ca_baza1.afisare() + + *************************************************************** + *** Note definite de utilizator + *************************************************************** + Private poCategorii + poCategorii = Null + lcSchema = [] + lcSelect = [select categorie, id_categorie, ordine from xSetsCategorii where sters = 0 union select 'FARA CATEGORIE' as categorie, 0 as id_categorie, 0 as ordine from dual] + lcOrder = [ordine] + lcgroup = [] + lcFiltru = [1=2] + lcFiltruOriginal = [] + llModParam = .T. + llAfiseaza = .F. + + gencursor('poCategorii', 'crsECategorii', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal) + poCategorii.ca_baza1.afisare() + + Private poSets + poSets = Null + lcSchema = [] + lcSelect = [select * from xSets] + lcOrder = [nume_set] + lcgroup = [] + lcFiltru = [1=2] + lcFiltruOriginal = [id_set >= 1000000] + llModParam = .T. + llAfiseaza = .F. + + gencursor('poSets', 'crsESets', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal) + poSets.ca_baza1.afisare() + + + Private poRequest + poRequest = Null + lcSchema = [] + lcOrder = [r.nr_item] + lcgroup = [] + lcFiltru = [1=2] + lcFiltruOriginal = [] + llModParam = .T. + llAfiseaza = .F. + + Text To lcSelect Textmerge Noshow + select i.label_item, + s.nume_set, + r.valoare_default, + r.nr_item, + r.id_item, + r.id_set, + i.fis_lista, + i.id_fisier, + i.camp_lista, + rpad(case + when i.fis_lista is not null then + pack_util.GetText(i.fis_lista, + i.id_fisier, + CASE WHEN LENGTH(TRIM(TRANSLATE(r.valoare_default, '0123456789+-.', ' '))) IS NULL + THEN to_number(r.valoare_default) + ELSE 0 + END, + replace(i.camp_lista, ',', ' || '' '' || ')) + ELSE + r.valoare_default + end, + 100, + ' ') as valoare_default_text + from xrequest r + join xsets s + on s.id_set = r.id_set + join xitems i + on i.id_item = r.id_item + Endtext + + gencursor('poRequest', 'crsERequest', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal) + poRequest.ca_baza1.afisare() + + + Private poNote + poNote = Null + lcSchema = [] + lcOrder = [a.nr_nota] + lcgroup = [] + lcFiltru = [1=2] + lcFiltruOriginal = [] + llModParam = .T. + llAfiseaza = .F. + + Text To lcSelect Textmerge Noshow + SELECT decode(NVL(a.id_jtva_coloana, 0), 0, 0, 1) As Cu_tva, + Cast(0 As Number(2)) As tipnota, + cast(0 as number(20)) as id_act, + cast(0 as number(2)) as luna, + cast(0 as number(4)) as an, + cast(0 as number(20)) as cod, + a.dataireg, + a.serie_act, + a.nract, + a.dataact, + a.explicatia, + a.xscd as scd, + a.xascd as ascd, + a.xscc as scc, + a.xascc as ascc, + a.suma, + a.pereched, + a.perechec, + a.suma_val, + a.id_valuta, + v.nume_val, + a.curs, + a.datascad, + 0 AS neimpozab, + a.nnir, + cast(0 as number(5)) as id_util, + '' AS util, + sysdate as dataora, + cast(0 as number(5)) as id_utils, + '' AS utils, + sysdate as dataoras, + a.id_responsabil, + resp.denumire AS nresp, + a.id_venchelt, + venchelt.explicatie AS dst_chlt, + a.id_lucrare, + lucr.nrord, + a.id_ctr, + (case when ctr.numar is not null then ctr.numar || '/' else '' end) || TO_CHAR(ctr.data,'DD.MM.YYYY') as contract, + a.id_sectie, + sectii.sectie, + a.proc_tva, + a.id_set, + NVL(a.id_fact, 0) as id_fact, + a.id_partd, + part1.denumire AS partd, + a.id_partc, + part.denumire AS partc, + cast(0 as number(5)) as id_sucursala, + '' as sucursala, + a.id_fdoc, + fdoc.fel_document AS fdoc, + a.explicatia4, + a.explicatia5, + cast(0 as number(5)) as id_gestin, + '' AS gestin, + cast(0 as number(5)) as id_gestout, + '' AS gestout, + NVL(a.id_factd, 0) as id_factd, + NVL(a.id_factc, 0) as id_factc, + a.id_jtva_coloana, + jtva.denumire as explicatie_tva, + cast(0 AS NUMBER(1)) AS validat, + cast(0 as number(5)) as id_utilv, + '' as utilv, + SYSDATE AS dataorav, + NVL(doc.tva_incasare,0) as tva_incasare + from xnote a + LEFT JOIN nom_fdoc fdoc ON a.id_fdoc = fdoc.id_fdoc + LEFT JOIN nom_parteneri part ON a.id_partc = part.id_part + LEFT JOIN nom_parteneri part1 ON a.id_partd = part1.id_part + LEFT JOIN vnom_venchel venchelt ON a.id_venchelt = venchelt.id_venchelt + LEFT JOIN nom_parteneri resp ON a.id_responsabil = resp.id_part + LEFT JOIN nom_sectii sectii ON a.id_sectie = sectii.id_sectie + LEFT JOIN vnom_lucrari lucr ON a.id_lucrare = lucr.id_lucrare + LEFT JOIN nom_valute v ON a.id_valuta = v.id_valuta + LEFT JOIN contracte ctr ON ctr.id_ctr = a.id_ctr + LEFT JOIN jtva_coloane jtva ON a.id_jtva_coloana = jtva.id_jtva_coloana + LEFT JOIN documente doc on a.id_fact = doc.id_doc + Endtext + gencursor('poNote', 'crsENote', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal) + poNote.ca_baza1.afisare() + *************************************************************** + + + lcCursor0 = [ctva] + lcCursor = [ccalendar] + If gnAn >= Iif(Type('gnAnFormNou') = 'U', 2007, gnAnFormNou) + lcForm = [frm_config_note_contabile2007] + Else + lcSelect0 = [select descriere as tva, procent as ptva from ] + gcS + [.cote_tva where an = ?gnAn and luna = ?gnLuna] + lnSucces0 = goExecutor.oExecute(lcSelect0, lcCursor0) + If lnSucces0 < 0 + aMESSAGEBOX(goExecutor.cEroare, 0 + 16, 'Eroare') + Return + Endif + + lcSelect = [select ctvam from ] + gcS + [.calendar where an = '] + Alltrim(Str(gnAn)) + ; + [' and nl = '] + Alltrim(Str(gnAn)) + ['] + lnSucces = goExecutor.oExecute(lcSelect, lcCursor) + If lnSucces < 0 + aMESSAGEBOX(goExecutor.cEroare, 0 + 16, 'Eroare') + Return + Endif + + Private pnctvam + Select ccalendar + pnctvam = ccalendar.ctvam + + lcForm = [frm_config_note_contabile] + Endif + *ofrm_note = CREATEOBJECT(lcForm,llCRM) + Do Form (lcForm) Name ofrm_note Linked With m.llCRM Noshow + ofrm_note.Show(1) + + + Release ponote_contab + Use In (select(lcCursor0)) + Use In (select(lcCursor)) + Use In (SELECT('cnote_contab')) + If m.llCRM + Use In (SELECT('nom_meniu')) + ENDIF + USE IN (select('crsECategorii')) + USE IN (select('crsESets')) +Endproc +******************************* SFARSIT: configurare_note ************************************ + + +*------------------------------------------------------------ +* Description: configurare analitice +* Parameters: +* Return: +* Use: +*------------------------------------------------------------ +* Id Date By Description +* 1 15/06/2006 marius.mutu Initial Creation +* +*------------------------------------------------------------ +Procedure configurare_analitice + + Private poConfig + Local lcSchema, lcSelect, lcOrder, lcgroup, lcFiltru, lcFiltruOriginal, llModParam, llAfiseaza + Store Null To poConfig + lcSchema = [] + lcSelect = [select * from config_analitice] + lcOrder = [cont] + lcgroup = [] + lcFiltru = [] + lcFiltruOriginal = [] + llModParam = .T. + llAfiseaza = .F. + + gencursor('poConfig', 'crsConfigAnalitice', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal) + poConfig.ca_baza1.afisare() + + loConfigFrm = Createobject("frm_config_analitice") + loConfigFrm.Show(1) +Endproc && configurare_analitice + +*------------------------------------------------------------ +Procedure configurare_analitice_gruputil + + Private poConfig + Local lcSchema, lcSelect, lcOrder, lcgroup, lcFiltru, lcFiltruOriginal, llModParam, llAfiseaza + Store Null To poConfig + lcSchema = [] + lcSelect = [select * from vconfig_gruputil_analitice] + lcOrder = [denumire_grup, cont] + lcgroup = [] + lcFiltru = [] + lcFiltruOriginal = [] + llModParam = .T. + llAfiseaza = .F. + + gencursor('poConfig', 'crsConfigAnalitice', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal) + poConfig.ca_baza1.afisare() + + loConfigFrm = Createobject("frm_config_analitice_gruputil") + loConfigFrm.Show(1) + + USE IN (SELECT('crsConfigAnalitice')) +Endproc && configurare_analitice_gruputil + +*------------------------------------------------------------ +Procedure configurare_analitice_tva + + Private poConfig + Local lcSchema, lcSelect, lcOrder, lcgroup, lcFiltru, lcFiltruOriginal, llModParam, llAfiseaza + Store Null To poConfig + lcSchema = [] + lcSelect = [select id, id_jtva_coloana, explicatie_tva, cont, acont, id_grup, denumire_grup, id_sucursala, sucursala, id_util, utilizator, dataora from vconfig_tva_analitice] + lcOrder = [sucursala, denumire_grup, cont, explicatie_tva] + lcgroup = [] + lcFiltru = [] + lcFiltruOriginal = [] + llModParam = .T. + llAfiseaza = .F. + + gencursor('poConfig', 'crsConfigAnalitice', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal) + poConfig.ca_baza1.afisare() + + loConfigFrm = Createobject("frm_config_analitice_tva") + loConfigFrm.Show(1) + + USE IN (SELECT('crsConfigAnalitice')) +Endproc && configurare_analitice_tva + +* Eof OMENIU_INITIALIZARI.PRG + + + +******************************************* +* PROCEDURE acces_liste( ) +* Date : 08/30/06, 11:37:08 +* author : liana.macinic +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* +Procedure acces_liste( ) + Private poAccesListe + Local lcSchema, lcSelect, lcOrder, lcgroup, lcFiltru, lcFiltruOriginal, llModParam, llAfiseaza + Store Null To poAccesListe + lcSchema = [] + lcSelect = [select * from vpolitici_grupuri] + lcOrder = [nume_lista_preturi] + lcgroup = [] + lcFiltru = [1=1] + gcCondSucursala + lcFiltruOriginal = [] + llModParam = .T. + llAfiseaza = .F. + + gencursor('poAccesListe', 'crsPolGr', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal) + poAccesListe.ca_baza1.afisare() + + loAccesListeFrm = Createobject("frm_politiciGrupuri") + loAccesListeFrm.Show(1) + +Endproc +*----------------------------------sfarsit procedura acces_liste---------------------------------- \ No newline at end of file diff --git a/COMUN/programe/onom_comenzi.prg b/COMUN/programe/onom_comenzi.prg new file mode 100644 index 0000000..c751f2d --- /dev/null +++ b/COMUN/programe/onom_comenzi.prg @@ -0,0 +1,310 @@ +*************************************************************************************************************** +**** Proceduri: +**** vizualizare_lucrari +**** vizualizare_comenzi +**** vizualizare_optiuni +**** extrage_optiuni - mutata in proceduri_comune.prg ( v 2.0.11 ) +**** recompune_optiuni - mutata in proceduri_comune.prg ( v 2.0.11 ) +**** make_sectii_utilizator - mutata in proceduri_comune.prg ( v 2.0.11 ) +**** verifica_lucrare +*************************************************************************************************************** +******************************************* INCEPUT: vizualizare_lucrari ******************************************* +Procedure vizualizare_lucrari +gcAcces=[1;2;3;4;] +Private polucrari,pocomenzi,polucrarielemente +Local lcSchema,lcSelect,lcOrder,lcFiltru,lcFiltruOriginal,llAfiseaza +Store '' To polucrari,pocomenzi,polucrarielemente +lcSchema=[id_lucrare n(20),nrord c(30),termen_executie t,id_lucrari_detalii n(20),explicatie c(100),data_lucrare t,]+; + [dataora t,utilizator c(30),inchisa n(1)] +lcSelect=[select id_lucrare,nrord,termen_executie,id_lucrari_detalii,explicatie,data_lucrare,]+; + [dataora,utilizator,inchisa from vlucrari_detalii] +lcOrder=[data_lucrare] +lcFiltru = [1=2] +lcFiltruOriginal = [id_sectie=]+ALLTRIM(STR(gnId_sectie)) +llAfiseaza = .F. +lcgroup = [] +llModParam = .T. +llAfiseaza = .F. +*gencursor('polucrari','crslucrari',lcSelect,lcFiltru,lcSchema,lcOrder,llAfiseaza) +gencursor('polucrari','crslucrari', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal) +polucrari.ca_baza1.afisare() + +lcSchema=[id_comanda n(20),COMANDA_EXTERNA c(20),id_codclient c(20),id_lucrare n(20),id_part n(20),id_gestiune n(20),]+; + [nr_comanda c(100),data_comanda t,nume c(70),data_livrare t,interna n(1),id_sectie n(5),id_sectie2 n(5),id_facturare n(5),id_livrare n(5),adresa_facturare c(50),adresa_livrare c(50)] +lcSelect=[select id_comanda,COMANDA_EXTERNA,id_codclient,id_lucrare,id_part,id_gestiune]+; + [nr_comanda,data_comanda,nume,data_livrare,interna,id_sectie,id_sectie2,id_facturare,id_livrare,b.denumire_adresa as adresa_facturare,c.denumire_adresa as adresa_livrare]+; + [from vcomenzi a left join adrese_parteneri b on b.id_adresa=a.id_facturare left join adrese_parteneri c on c.id_adresa=a.id_livrare] +lcOrder=[data_comanda] +lcFiltru = [1=2] +lcFiltruOriginal = [id_sectie=]+ALLTRIM(STR(gnId_sectie)) +llAfiseaza = .F. +lcgroup = [] +llModParam = .T. +llAfiseaza = .F. +*gencursor('pocomenzi','crscomenzi',lcSelect,lcFiltru,lcSchema,lcOrder,llAfiseaza) +gencursor('pocomenzi','crscomenzi', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal) +pocomenzi.ca_baza1.afisare() + +lcSchema=[id_lucrare n(20),denumire c(100),cantitate n(16,3),um c(10),cantitate2 n(16,3),um2 c(10)] +lcSelect=[select id_lucrare,denumire,cantitate,um,cantitate2,um2 from vlucrari_elemente] +lcOrder=[denumire] +lcFiltru = [1=2] +lcFiltruOriginal = [] && [id_sectie=]+ALLTRIM(STR(gnId_sectie)) +llAfiseaza = .F. +lcgroup = [] +llModParam = .T. +llAfiseaza = .F. +*gencursor('polucrarielemente','crslucrarielemente',lcSelect,lcFiltru,lcSchema,lcOrder,llAfiseaza) +gencursor('polucrarielemente','crslucrarielemente', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal) +polucrarielemente.ca_baza1.afisare() + +ofrmlucrari=Createobject('frm_lucrari_detalii') +ofrmlucrari.Show(1) +Release polucrari,pocomenzi,polucrarielemente,ofrmlucrari + +Endproc && vizualizare_lucrari +******************************************* SFARSIT: vizualizare_lucrari ******************************************* +******************************************* INCEPUT: vizualizare_comenzi ******************************************* +Procedure vizualizare_comenzi +gcAcces=[1;2;3;4;] +Private pocomenzi,pocomenzielemente +Local lcSchema,lcSelect,lcOrder,lcFiltru,llAfiseaza +Store '' To pocomenzi,pocomenzielemente +lcSchema=[selectat n(1),id_comanda n(20),COMANDA_EXTERNA c(20),id_codclient c(20),id_lucrare n(20),id_part n(20),id_agent n(20),id_delegat n(20),id_masina n(20),]+; + [nr_comanda c(100),data_comanda t,nume c(70),tip_comanda c(20),data_livrare t,nume_agent c(70),nume_delegat c(70),]+; + [nrinmat c(10),nrord c(30),facturat n(1),dataora t,utilizator c(40),data_livrat t,interna n(1),]+; + [nr_livrare c(50),inchisa n(1), id_sectie n(5),id_sectie2 n(5),id_facturare n(5),id_livrare n(5),adresa_facturare c(50),adresa_livrare c(50), cod_client c(50), id_ctr n(10),numar_contract c(100)] +lcSelect=[select 0 as selectat,a.id_comanda,a.COMANDA_EXTERNA,a.id_codclient,a.id_lucrare,a.id_part,a.id_agent,a.id_delegat,a.id_masina,]+; + [a.nr_comanda,a.data_comanda,a.nume,a.tip_comanda,a.data_livrare,a.nume_agent,a.nume_delegat,]+; + [a.nrinmat,a.nrord,a.facturat,a.dataora,a.utilizator,a.data_livrat,a.interna,a.nr_livrare,a.inchisa,a.id_sectie,a.id_sectie2,a.id_facturare,a.id_livrare,] + ; + [b.denumire_adresa as adresa_facturare,c.denumire_adresa as adresa_livrare, d.COD as cod_client,d.id_ctr,d.numar_contract ]+; + [from vcomenzi a left join adrese_parteneri b on b.id_adresa=a.id_facturare left join adrese_parteneri c on c.id_adresa=a.id_livrare left join parteneri_coduri d on d.id=a.id_codclient] +lcOrder=[data_comanda] +lcFiltru = [1=2] +lcFiltruOriginal = [] && [id_sectie=]+ALLTRIM(STR(gnId_sectie)) +llAfiseaza = .F. +*gencursor('pocomenzi','crscomenzi',lcSelect,lcFiltru,lcSchema,lcOrder,llAfiseaza) +gencursor('pocomenzi','crscomenzi', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal) +pocomenzi.ca_baza1.afisare() + +lcSchema=[id_comanda n(20),id_articol n(20),id_pol n(20),denumire c(100),pret n(16,] + alltrim(str(gnPPretV)) + [),cantitate n(16,] + alltrim(str(gnPCant)) + [),um c(10)] +lcSelect=[select id_comanda,id_articol,id_pol,denumire,pret,cantitate,um from vcomenzi_elemente] +lcOrder=[denumire] +lcFiltru = [1=2] +lcFiltruOriginal = [] && [id_sectie=]+ALLTRIM(STR(gnId_sectie)) +llAfiseaza = .F. +*gencursor('pocomenzielemente','crscomenzielemente',lcSelect,lcFiltru,lcSchema,lcOrder,llAfiseaza) +gencursor('pocomenzielemente','crscomenzielemente', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal) +pocomenzielemente.ca_baza1.afisare() + +ofrmcomenzi=Createobject('frm_comenzi') +ofrmcomenzi.Show(1) +Release pocomenzi,pocomenzielemente,ofrmcomenzi + +Endproc && vizualizare_comenzi +******************************************* SFARSIT: vizualizare_comenzi ******************************************* +******************************************* INCEPUT: vizualizare_optiuni ******************************************* +Procedure vizualizare_optiuni +If Used('crsoptiuni') + Use In crsoptiuni +Endif +lcSql=[SELECT VARTYPE,VARNAME,VARVALUE FROM ] + gcS + [.OPTIUNI WHERE PROGRAM='] + Upper(Alltrim(gcNumeProgram)) + ['] +lcCursor=[crsoptiuni] +lnSucces=goExecutor.oExecute(lcSql,lcCursor) +If lnSucces<0 + amessagebox(goExecutor.cEroare,0+48,"Eroare") +Else + Select crsoptiuni + Scan + lcvartype=Alltrim(Upper(Vartype)) + lcvarname=Alltrim(Upper(varname)) + Do Case + Case lcvartype = "CHARACTER" + luvarvalue = Alltrim(varvalue) + gc&lcvarname. = luvarvalue + Case lcvartype = "NUMERIC" + luvarvalue = Val(varvalue) + gn&lcvarname. = luvarvalue + Endcase + Endscan + Use In crsoptiuni + ofrmoptiune=Createobject('frm_optiuni_comenzi') + ofrmoptiune.Show(1) + Release ofrmoptiune +Endif +Endproc && vizualizare_optiuni +******************************************* SFARSIT: vizualizare_optiuni ******************************************* +******************************************************************************************************************** +*!* modificare v 2.0.11 +*!* Procedure extrage_optiuni +*!* Parameters tcLista, tnId + +*!* Local lcLista, lcReturn +*!* Store '' To lcReturn +*!* lcLista = Nvl(Alltrim(tcLista),'') +*!* lnNrOptiuni = Getwordcount(lcLista,";") +*!* For i=1 To lnNrOptiuni +*!* lcExtragOptId = Getwordnum(lcLista,i,";") +*!* lcId_extras = Getwordnum(lcExtragOptId,1,"::") +*!* If lcId_extras = Alltrim(Str(tnId)) +*!* lcReturn = Getwordnum(lcExtragOptId,2,"::") +*!* Endif +*!* Endfor + +*!* Return lcReturn + +*!* Endproc && extrage_optiune +******************************************************************************************************************** +******************************************************************************************************************** +*!* *!* lcLista = '1001::3;2::777;21001::5;' +*!* *!* lcId = 2 +*!* *!* lcValoareNoua = '9' +*!* *!* lcListaNoua = recompune_optiuni(lcLista,lcId,lcValoareNoua) + +*!* Procedure recompune_optiuni +*!* Parameters tcLista, tnId, tcValoareNoua + +*!* Local lcLista, lcListaNoua, lcId, lcValoareNoua, lnGrupuri, lcGrup, lcIdCautat, lnPoz, lnPozGrup, lcValoare +*!* lcLista = Nvl(Alltrim(tcLista),'') +*!* lcId = Alltrim(Str(tnId)) +*!* lcValoareNoua = Alltrim(tcValoareNoua) + +*!* llGasit = .F. +*!* lcListaNoua = '' +*!* lnGrupuri = Getwordcount(lcLista,';') +*!* For i = 1 To lnGrupuri +*!* lcGrup = Getwordnum(lcLista,i,";") +*!* If i=1 +*!* lcIdCautat = lcId + '::' +*!* Else +*!* lcIdCautat = ';'+ lcId + '::' +*!* lcGrup = ';' + lcGrup && ';id_sectie::optiune_veche' +*!* Endif +*!* lnPozGrup = At(lcIdCautat,lcGrup) +*!* If lnPozGrup > 0 +*!* llGasit = .T. +*!* lnPoz = At('::', lcGrup) +*!* If lnPoz > 0 +*!* lcValoare = Substr(lcGrup,lnPoz) && '::optiune_veche' +*!* lcGrup= Strtran(lcGrup,lcValoare,'::'+lcValoareNoua) +*!* Endif +*!* Endif +*!* lcListaNoua = lcListaNoua + lcGrup +*!* Endfor + +*!* If lnGrupuri = 0 +*!* lcListaNoua = lcId + '::' + lcValoareNoua +*!* Else +*!* If !llGasit +*!* lcListaNoua = lcListaNoua + ';' + lcId + '::' + lcValoareNoua +*!* Endif +*!* Endif + +*!* Return lcListaNoua + +*!* Endproc && recompune_optiuni +******************************************************************************************************************** +*!* Procedure make_sectii_utilizator +*!* lcSel = [{call PACK_COMENZI.sectii_utilizator(?gnIdUtil,?gnIdSucursala)}] +*!* lcCursor = 'crsSectii' +*!* lnSucces = goExecutor.oExecute(lcSel,lcCursor) +*!* If lnSucces < 0 +*!* amessagebox(goExecutor.cEroare,0+16,"Eroare") +*!* Return +*!* Endif +*!* Select crsSectii +*!* Go Top +*!* Endproc && make_sectii_utilizator +*!* modificare v 2.0.11 ^ +******************************************************************************************************************** +Function verifica_lucrare +Lparameters tnIdLucrare,tcNumeCursorVFP +Local llReturn,lcSql,lcNumeCursorOra,lcCursorV,lcMesaj +&&& (loCauta.id_lucrare,[crstempcomlucrare]) +llReturn = .T. +lcNumeCursorTempV = [crstempvluc] +lcCursorVerificare = [crsverificareluc] +lcMesaj = [] +If Used(lcCursorVerificare) + Use In (lcCursorVerificare) +Endif +If Used(lcNumeCursorTempV) + Use In (lcNumeCursorTempV) +Endif +Create Cursor (lcCursorVerificare) (Id N(14),nume c(100),nr_comanda M) +Create Cursor (lcNumeCursorTempV) (interna N(1),Id N(14),nume c(200),nr_comanda M,nr N(14)) +If !Empty(Nvl(tnIdLucrare,0)) + lcNumeCursorOra = [crstemporalucrare] + If Used(lcNumeCursorOra) + Use In (lcNumeCursorOra) + Endif + lcSql = [select a.interna,a.id,(case when a.interna in (2,5) then b.denumire ] + ; + [when interna = 3 then c.nume_gestiune ] + ; + [when interna = 4 then d.sectie ] + ; + [else null end) as nume,] + ; + [stringagg(a.nr_comanda) as nr_comanda,a.nr from ] + ; + [(select id_lucrare, interna,] + ; + [(case when interna in (2,5) then id_part ] + ; + [when interna = 3 then id_gestiune ] + ; + [when interna = 4 then id_sectie2 ] + ; + [else null end) as id,] + ; + [nr_comanda,] + ; + [count(*) over(partition by id_lucrare, interna,(case when interna = 2 then id_part when interna = 3 then id_gestiune ] + ; + [when interna = 4 then id_sectie2 else null end)) as nr ] + ; + [from ] + gcS + [.comenzi where sters = 0 and id_sectie = ?gnId_sectie and interna <> 1 and id_lucrare = ] + Alltrim(Str(tnIdLucrare)) + [) a ] + ; + [left join ] + gcS + [.nom_parteneri b on a.id = b.id_part and a.interna = 2 ] + ; + [left join ] + gcS + [.nom_gestiuni c on a.id = c.id_gestiune and a.interna = 3 ] + ; + [left join ] + gcS + [.nom_sectii d on a.id = d.id_sectie and a.interna = 4 ] + ; + [group by a.interna,a.id,(case when a.interna in (2,5) then b.denumire when a.interna = 3 then c.nume_gestiune when a.interna = 4 then d.sectie else null end),a.nr ] + ; + [order by 3,2] + lnSucces = goExecutor.oExecute(lcSql,lcNumeCursorOra) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,16,"Eroare") + Return .F. + Else + Insert Into (lcNumeCursorTempV) Select interna,id,nume,Chr(44)+Alltrim(nr_comanda)+Chr(44) as nr_comanda,nr From (lcNumeCursorOra) + Use In (lcNumeCursorOra) + Endif +Endif + +If !Empty(tcNumeCursorVFP) + Local loDublura + Select (tcNumeCursorVFP) + Scan For interna <> 1 + Scatter Name loDublura + Select (lcNumeCursorTempV) + Locate For interna = loDublura.interna And Id = Iif(INLIST(loDublura.interna,2,5),loDublura.id_part,Iif(loDublura.interna=3,loDublura.id_gestiune,loDublura.id_sectie2)) && modificare v 2.0.20 + If Found() + If At([,] + Alltrim(loDublura.nr_comanda) + [,],Alltrim(nr_comanda)) = 0 +&& s-ar putea sa am comanda deja pe lucrare si sa o am si selectata in cursorul din VFP + Replace nr_comanda With Alltrim(nr_comanda) + Alltrim(loDublura.nr_comanda) + [,],nr With nr + 1 + Endif + Else + Append Blank + Replace interna With loDublura.interna,Id With Iif(INLIST(loDublura.interna,2,5),loDublura.id_part,Iif(loDublura.interna=3,loDublura.id_gestiune,loDublura.id_sectie2)),; && modificare v 2.0.20 + nume With loDublura.nume,nr_comanda With [,] + Alltrim(loDublura.nr_comanda) + [,],nr With 1 + Endif + Select (tcNumeCursorVFP) + Endscan + Release loDublura +Endif + +Insert Into (lcCursorVerificare) Select Id,nume,nr_comanda From (lcNumeCursorTempV) Where nr > 1 Order By nume,Id +If Reccount(lcCursorVerificare)>0 + lcMesaj = [Urmatorii beneficiari vor avea mai mult de o comanda pe lucrare : ] + Chr(13) + Chr(10) + Select (lcCursorVerificare) + Scan + lcMesaj = lcMesaj + Padr(Alltrim(nume),50,[ ]) + [ - ] + Substr(Alltrim(nr_comanda),2,Len(Alltrim(nr_comanda))-2) + Chr(13) + Chr(10) + Endscan + lcMesaj = lcMesaj + Chr(13) + Chr(10) + [Doriti sa continuati?] + If amessagebox(lcMesaj,4+32,"Comenzi multiple") = 7 + llReturn = .F. + Endif +Endif + +If Used(lcCursorVerificare) + Use In (lcCursorVerificare) +Endif +Return llReturn +Endfunc && verifica_lucrare +******************************************************************************************************************** \ No newline at end of file diff --git a/COMUN/programe/onomenclatoare.prg b/COMUN/programe/onomenclatoare.prg new file mode 100644 index 0000000..1d602c9 --- /dev/null +++ b/COMUN/programe/onomenclatoare.prg @@ -0,0 +1,2580 @@ +*!* 22.03.2010 +*!* marius.mutu +*!* nom_Gestiuni_nou, nom_gestiuni_modifica (ccsectii - completare cursor sectii) + +*!* 31.01.2017 +*!* marius.mutu +*!* nom_gestiuni_nou + tnIdGestiune (optional): daca se doreste crearea unei gestiuni prin copierea unei alte gestiuni (tnIdGestiune) + +*!* 07.01.2020 +*!* marius.mutu +*!* contracte_nou, articole_nou + @tnId pentru returnarea id-ului inregistrarii nou create + +*!* 03.03.2026 +*!* marius.mutu +*!* nom_parteneri_nou - completare nume si prenume din denumire daca nu sunt completate, pentru persoana fizica + +* PROCEDURE viz_lucrari ( ) +* Date : 07.10.2004, 14:26:02 +* author : marius.mutu +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* INCEPUT:viz_lucrari ******************************************* +Procedure viz_lucrari( ) + + Private polucrari, pcschema1, pcselect1 + Store '' To polucrari + pcschema1 = [''] + pcselect1 = ['select * from ] + gcS + [.vnom_lucrari where 1=2'] + pcorder1 = [nrord] + pcfiltru1 = [1=2] + llAfiseaza = .F. + gencursor('polucrari', 'v_nom_lucrari', pcselect1, pcfiltru1, pcschema1, pcorder1, llAfiseaza) + polucrari.ca_baza1.afisare() + ofrmsectii = Createobject('frm_lucrari') + ofrmsectii.Show(1) + Release polucrari + +Endproc +******************************************* SFARSIT: viz_lucrari******************************************* + +* PROCEDURE viz_sectii( ) +* Date : 07.10.2004, 14:26:02 +* author : catalin.neagu +* description: +******************************************* INCEPUT:viz_sectii ******************************************* +Procedure viz_sectii( ) + + Private posectii, pcschema1, pcselect1 + Store '' To posectii + pcschema1 = [''] + pcselect1 = ['select * from ] + gcS + [.vnom_sectii where 1=2'] + pcorder1 = [sectie] + pcfiltru1 = [2=2] + gcCondSucursala + llAfiseaza = .F. + gencursor('posectii', 'v_sectii', pcselect1, pcfiltru1, pcschema1, pcorder1, llAfiseaza) + posectii.ca_baza1.afisare() + ofrmsectii = Createobject('frm_sectii') + ofrmsectii.Show(1) + Release posectii + +Endproc +******************************************* SFARSIT: viz_sectii ******************************************* + +* PROCEDURE viz_sucursale( ) +* Date : 25.08.2005 +* author : marius.mutu +* description: +******************************************* INCEPUT:viz_sectii ******************************************* +Procedure viz_sucursale( ) + + Private posucursale, pcschema1, pcselect1 + Store '' To posucursale + pcschema1 = [''] + pcselect1 = ['select * from ] + gcS + [.vnom_sucursale where 1=2'] + pcorder1 = [sucursala] + pcfiltru1 = [2=2] + llAfiseaza = .F. + gencursor('posucursale', 'v_sucursale', pcselect1, pcfiltru1, pcschema1, pcorder1, llAfiseaza) + posucursale.ca_baza1.afisare() + ofrmsucursale = Createobject('frm_sucursale') + ofrmsucursale.Show(1) + Release posucursale + +Endproc +******************************************* SFARSIT: viz_sectii ******************************************* + +* PROCEDURE viz_gestiuni( ) +* Date : 07.10.2004, 16:07:41 +* author : catalin.neagu +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* INCEPUT:viz_gestiuni ******************************************* +Procedure viz_gestiuni( ) + + Private pogestiuni, pcschema1, pcselect1 + Store '' To pogestiuni + *!* pcschema1=['id_gestiune n(5),nume_gestiune c(50),cgest c(4),cont_gestiune c(4),ngest c(10),nrg n(4),ascd c(4),nr_grupa n(4),gest n(3)'] + pcschema1 = [''] + pcselect1 = ['select * from ] + gcS + [.vnom_gestiuni where 1=2'] + pcorder1 = [nume_gestiune] + pcfiltru1 = [2=2] + llAfiseaza = .F. + gencursor('pogestiuni', 'v_gestiuni', pcselect1, pcfiltru1, pcschema1, pcorder1, llAfiseaza) + pogestiuni.ca_baza1.afisare() + ofrmgest = Createobject('frm_gestiuni') + ofrmgest.Show(1) + Release posectii + +Endproc +******************************************* SFARSIT: viz_gestiuni ******************************************* + +* PROCEDURE viz_responsabili( ) +* Date : 08.10.2004, 14:24:55 +* author : catalin.neagu +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* INCEPUT:viz_responsabili ******************************************* +Procedure viz_responsabili( ) + + Private poresponsabili, pcschema1, pcselect1 + Store '' To poresponsabili + pcschema1 = [''] + pcselect1 = ['select * from ] + gcS + [.vnom_responsabili where 1=2'] + pcorder1 = [nume] + pcfiltru1 = [2=2] + llAfiseaza = .F. + gencursor('poresponsabili', 'v_responsabili', pcselect1, pcfiltru1, pcschema1, pcorder1, llAfiseaza) + poresponsabili.ca_baza1.afisare() + ofrmres = Createobject('frm_responsabili') + ofrmres.Show(1) + Release poresponsabili + + +Endproc +******************************************* SFARSIT: viz_responsabili ******************************************* + +* PROCEDURE viz_venchel( ) +* Date : 08.10.2004, 15:48:26 +* author : catalin.neagu +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* INCEPUT:viz_venchel ******************************************* +Procedure viz_venchel( ) + + &&code goes here + Private povenchel, pcschema1, pcselect1 + Store '' To povenchel + pcschema1 = ['id_venchelt n(10),id_tata n(10),tip_venchelt n(1),explicatie c(200),'+] + ; + ['explicatie_fiu c(50),explicatie_tata c(50),inactiv n(1),id_mod n(20)'] + pcselect1 = ['select id_venchelt,id_tata,tip_venchelt,explicatie,'+] + ; + ['explicatie_fiu,explicatie_tata,inactiv,id_mod from ] + gcS + [.vnom_venchel where 1=2'] + pcorder1 = [explicatie,explicatie_fiu,explicatie_tata] + pcfiltru1 = [2=2] + llAfiseaza = .F. + gencursor('povenchel', 'v_venchel', pcselect1, pcfiltru1, pcschema1, pcorder1, llAfiseaza) + povenchel.ca_baza1.afisare() + ofrmvenchel = Createobject('frm_venchel') + ofrmvenchel.Show(1) + Release povenchel + +Endproc +******************************************* SFARSIT: viz_venchel ******************************************* + +* PROCEDURE viz_plcont( ) +* Date : 08.10.2004, 16:38:18 +* author : catalin.neagu +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* INCEPUT:viz_plcont ******************************************* +Procedure viz_plcont( ) + + Private poplcont, pcschema1, pcselect1 + Store '' To poplcont + pcschema1 = [''] + pcselect1 = ['select * from ] + gcS + [.vnom_plcont where 1=2'] + pcorder1 = [AN,CONT,ACONT] + pcfiltru1 = [an=] + Alltrim(Str(gnan)) + llAfiseaza = .F. + gencursor('poplcont', 'v_plcont', pcselect1, pcfiltru1, pcschema1, pcorder1, llAfiseaza) + poplcont.ca_baza1.afisare() + ofrmplcont = Createobject('frm_plcont') + ofrmplcont.Show(1) + Release poplcont + + +Endproc +******************************************* SFARSIT: viz_plcont ******************************************* + +* PROCEDURE viz_fdoc( ) +* Date : 11.10.2004, 09:41:01 +* author : catalin.neagu +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* INCEPUT:viz_fdoc ******************************************* +Procedure viz_fdoc( ) + + Private pofdoc, pcschema1, pcselect1 + Store '' To pofdoc + + lcSchema = [ID_FDOC I, ID_FDOC2 I, FEL_DOCUMENT C(30), ID_MOD I, INACTIV I, TIP_DOC C(10), DESCRIERE C(50), PAYMENTCODE C(9), METHODCODE C(9), PAYMENTMETHOD C(110), PAYMENTNAME C(250)] + lcSelect = [select id_fdoc, id_fdoc2, fel_document, id_mod, inactiv, tip_doc, descriere, paymentcode, methodcode, paymentmethod, paymentname from vnom_fdoc] + lcOrder = [fel_document] + lcFiltru = [2=2] + llAfiseaza = .F. + lcgroup = "" + llModParam = .T. + lcFiltruOriginal = [] + + gencursor('pofdoc', 'v_fdoc', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal) + + pofdoc.ca_baza1.afisare() + ofrmfdoc = Createobject('frm_fdoc') + ofrmfdoc.Show(1) + Release pofdoc + + Use In (Select('v_fdoc')) +Endproc +******************************************* SFARSIT: viz_fdoc ******************************************* + +* PROCEDURE viz_judete( ) +* Date : 11.10.2004, 13:40:46 +* author : catalin.neagu +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* INCEPUT:viz_judete ******************************************* +Procedure viz_judete( ) + + Private pojud, pcschema1, pcselect1 + Store '' To pojud + + lnSucces = update_tip_doc() && updateserver.prg + If m.lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare, 0 + 16, _Screen.Caption) + Create Cursor crsTipDoc394 (Id I, tip C(50)) + Endif + + pcschema1 = [''] + pcselect1 = ['select * from syn_vnom_judete where 1=2'] + pcorder1 = [judet] + pcfiltru1 = [2=2] + llAfiseaza = .F. + gencursor('pojud', 'v_judet', pcselect1, pcfiltru1, pcschema1, pcorder1, llAfiseaza) + pojud.ca_baza1.afisare() + ofrmjud = Createobject('frm_judet') + ofrmjud.Show(1) + Release pojud + +Endproc +******************************************* SFARSIT: viz_judete ******************************************* + +* PROCEDURE viz_localitati( ) +* Date : 11.10.2004, 13:42:47 +* author : catalin.neagu +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* INCEPUT:viz_localitati ******************************************* +Procedure viz_localitati( ) + + Private poloc, pcschema1, pcselect1 + Store '' To poloc + pcschema1 = [''] + pcselect1 = ['select * from syn_vnom_localitati where 1=2'] + pcorder1 = [localitate] + pcfiltru1 = [2=2] + llAfiseaza = .F. + gencursor('poloc', 'v_local', pcselect1, pcfiltru1, pcschema1, pcorder1, llAfiseaza) + poloc.ca_baza1.afisare() + ofrmloc = Createobject('frm_localitati') + ofrmloc.Show(1) + Release poloc + +Endproc +******************************************* SFARSIT: viz_localitati ******************************************* + + +*------------------------------------------------------------ +* Description: vizualizare parteneri +* Parameters: +* Return: +* Use: +*------------------------------------------------------------ +* Id Date By Description +* 1 26/06/2006 paula.mutu Initial Creation +* +*------------------------------------------------------------ +Procedure viz_parteneri + Lparameters tnIdTipPart, tnSpecial, tcMesaj, tcTitlu, tnTipPersoana + *!* tnIdTipPart: tip partener care este bifat implicit + *!* tnSpecial: tipul partener bifat nu se poate modifica de utilizator + *!* tcMesaj: + *!* tcTitlu: Titlu formular (Clienti/Furnizori/Agenti/Responsabili/Delegati) + *!* tnTipPersoana : tipul de persoana cu care intra implicit la adaugare ( 1 - juridica, 2 - fizica ) + + + PRIVATE poCoduri + LOCAL lcSchema, lcSelect, lcFiltru, lcOrder, llAfiseaza, lcGroup, llModParam, lcFiltruOriginal + Local lnIdTipPart, lnSpecial, lcMesaj, lcTitlu, lnTipPersoana + + poCoduri = NULL + + lnIdTipPart = Icase(!Empty(tnIdTipPart), tnIdTipPart, 0) + lnSpecial = Icase(!Empty(tnSpecial), tnSpecial, 0) + lcMesaj = Icase(!Empty(tcMesaj), tcMesaj, '') + lcTitlu = ICASE(!EMPTY(m.tcTitlu), m.tcTitlu, '') + lnTipPersoana = ICASE(!EMPTY(m.tnTipPersoana), m.tnTipPersoana, 1) + + ** load cursor crscoresp_tip_parteneri gol: + Private pocoresp_tip_parteneri, pcselect1, pcfiltru1, pcschema1, pcorder1 + Store "" To pcselect1, pcfiltru1, pcschema1, pcorder1, pocoresp_tip_parteneri + pcselect1 = ['SELECT * FROM VCORESP_TIP_PART where 1=2'] + pcfiltru1 = [1=2] + pcschema1 = [''] + pcorder1 = [TIP_PARTENER] + llAfisare1 = .F. + gencursor('pocoresp_tip_parteneri', 'crscoresp_tip_parteneri', pcselect1, pcfiltru1, pcschema1, pcorder1, llAfisare1) + pocoresp_tip_parteneri.ca_baza1.afisare() + + && adrese + Private poAdrese, pcselect2, pcfiltru2, pcschema2, pcorder2 + Store "" To poAdrese, pcselect2, pcfiltru2, pcschema2, pcorder2 + pcselect2 = ['SELECT id_adresa, id_part, denumire_adresa, da_apare, strada, numar, bloc, scara, etaj, apart, sector, '+] + ; + ['id_loc, localitate, id_regiune, id_judet, judet, codpostal, id_tara, tara, telefon1, telefon2, fax, email, web, '+] + ; + ['inactiv, principala FROM ] + gcS + [.vadrese_parteneri where 1=2'] + pcfiltru2 = [1=2] + pcschema2 = [''] + pcorder2 = [localitate,strada] && modificare adrese parteneri 12.2013 : am adaugat localitate + llAfisare2 = .F. + gencursor('poAdrese', 'crsAdrese', pcselect2, pcfiltru2, pcschema2, pcorder2, llAfisare2) + poAdrese.ca_baza1.afisare() + + && persoane de contact + Private poPers, pcselect3, pcfiltru3, pcschema3, pcorder3 + Store "" To poPers, pcselect, pcfiltru, pcschema, pcorder + pcselect3 = ['SELECT id_pers, id_part, nume, prenume, apelativ, functia, telefon, email, inactiv, principal FROM ] + gcS + [.vpers_contact where 1=2'] + pcfiltru3 = [1=2] + pcschema3 = [''] + pcorder3 = [nume] + llAfisare3 = .F. + gencursor('poPers', 'crsPers_contact', pcselect3, pcfiltru3, pcschema3, pcorder3, llAfisare3) + poPers.ca_baza1.afisare() + + && coduri + lcSchema = [] + lcSelect = [SELECT id,id_part, cod FROM vparteneri_coduri] + lcFiltru = [1=2] + lcOrder = [cod] + llAfiseaza = .F. + lcGroup = [] + llModParam = .T. + lcFiltruOriginal = [] + gencursor('poCoduri', 'crsCoduri', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcGroup, llModParam, lcFiltruOriginal) + poCoduri.ca_baza1.afisare() + + && contracte + Private poContracte + LOCAL lcSelect4, lcFiltru4, lcSchema4, lcOrder4, llModParam4, lcFiltruOriginal4, lcGroup4 + Store NULL To poContracte + + TEXT TO lcSchema4 NOSHOW +id_ctr N(10), id_part N(12), denumire C(70), data D, numar C(100), id_tip_ctr N(6), inactiv N(3), denumire_tip C(100), tata C(200), valftva N(18,4), valctva N(18,4), id_valuta N(7), nume_val C(20), val_discount N(18,4), proc_tva N(8,2), incetat N(3), data_inceput D, data_sfarsit D, data_incetat D, motiv_incetat C(200), scadenta_incasare N(5), coef_penalitati N(8,2), id_responsabil N(12), id_sectie N(7), sectie C(50), durata N(7), semnat N(3), observatii M, sters N(3), id_util N(10), dataora D, id_utils N(10), dataoras D, opt_facturare N(6), text_standard N(3), id_agent N(20), responsabil C(70), nume_agent C(70), contract C(111), id_nota N(10), descriere C(250), id_selectie N(6), selectie C(100), grnt_proc_ret N(4), grnt_val_ret N(12,4), grnt_alerta1 N(6), grnt_proc_alerta1 N(5), grnt_pv_nr N(12), grnt_pv_data D, numar_intern C(20), data_intern D, ofertanti C(200), tip_istoric C(1), id_tata N(10), activ N(3), grnt_perioada N(4), afisare_scadenta N(3), id_sucursala N(7), tip_curs N(4), tip_curs_explicatie C(100), coef_penalitati2 N(8,2), zile_penalitati N(6), zile_penalitati2 N(6), zile_gratie_penalitati N(6) + ENDTEXT + TEXT TO lcSelect4 NOSHOW +Select id_ctr, id_part, denumire, data, numar, id_tip_ctr, inactiv, denumire_tip, tata, valftva, valctva, id_valuta, nume_val, val_discount, proc_tva, incetat, data_inceput, data_sfarsit, data_incetat, motiv_incetat, scadenta_incasare, coef_penalitati, id_responsabil, id_sectie, sectie, durata, semnat, observatii, sters, id_util, dataora, id_utils, dataoras, opt_facturare, text_standard, id_agent, responsabil, nume_agent, contract, id_nota, descriere, id_selectie, selectie, grnt_proc_ret, grnt_val_ret, grnt_alerta1, grnt_proc_alerta1, grnt_pv_nr, grnt_pv_data, numar_intern, data_intern, ofertanti, tip_istoric, id_tata, activ, grnt_perioada, afisare_scadenta, id_sucursala, tip_curs, tip_curs_explicatie, coef_penalitati2, zile_penalitati, zile_penalitati2, zile_gratie_penalitati From vContracte + ENDTEXT + + lcFiltru4 = [1=2] + lcOrder4 = [data desc] + llAfisare4 = .F. + lcGroup4 = [] + llModParam4 = .T. + lcFiltruOriginal4 = [] + gencursor('poContracte', 'crsContracte', lcselect4, lcfiltru4, lcSchema4, lcOrder4, llAfisare4, lcGroup4, llModParam4, lcFiltruOriginal4) + poContracte.ca_baza1.afisare() + + Private poparteneri + Store '' To poparteneri + + TEXT TO lcSchema1 NOSHOW +id_part N(12), denumire C(70), nume C(70), prenume C(70), cod_fiscal C(30), cod_fiscal2 C(30), reg_comert C(30), id_loc_inreg N(12), localitate C(100), tip_persoana N(3), prefix C(30), sufix C(30), banca C(40), cont_banca C(30), inactiv N(3), motiv_inactiv C(100), id_categorie_entitate N(12), categorie_entitate C(150), dataora T, utilizator C(100), adresa C(250), telefon C(50), email C(100), swift_banca C(11), adresa_banca C(150), institutie_publica N(1) + ENDTEXT + + Text To lcSelect1 Noshow +SELECT p.id_part, p.denumire, p.nume, p.prenume, p.cod_fiscal, p.cod_fiscal2, p.reg_comert, + p.id_loc_inreg, p.localitate_inreg, p.tip_persoana, p.prefix, p.sufix, p.banca, p.cont_banca, + p.inactiv, p.motiv_inactiv,p.id_categorie_entitate,p.categorie_entitate,p.dataora,p.utilizator, + p.adresa, p.telefon, p.email, p.swift_banca, p.adresa_banca, p.institutie_publica FROM VNOM_PARTENERI p + Endtext + + lcOrder1 = [p.denumire] + lcgroup = [] + lcFiltru1 = [1=2] + lcFiltruOriginal = [] + + * In programul de contracte selectez doar partenerii cu tipul -1 CLIENTI / -2 FURNIZORI + If Type('gnParametru_prog') <> 'U' And Inlist(gnParametru_prog, 1, 2) && contracte clienti/furnizori + Text To lcSelect1 ADDITIVE NOSHOW + left join CORESP_TIP_PART ctp on ctp.ID_PART = p.ID_PART + left join nom_tip_parteneri tp on (tp.id_tip_part = ctp.id_tip_part and tp.sters = 0) + Endtext + If gnParametru_prog = 1 && contracte clienti + lcFiltruOriginal = [tp.parent_id = -1] + Else && gnParametru_prog = 2 && contracte furnizori + lcFiltruOriginal = [tp.parent_id = -2] + Endif && gnParametru_prog + Endif + + llModParam = .T. + llAfiseaza = .F. + + gencursor('poparteneri', 'crsparteneri', lcSelect1, lcFiltru1, lcSchema1, lcOrder1, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal) + poparteneri.ca_baza1.afisare() + + Select crsparteneri + oParteneri = Createobject('frm_parteneri', lnIdTipPart, lnSpecial, lcMesaj, lcTitlu, lnTipPersoana) + oParteneri.Show() + Release poparteneri + Release pocoresp_tip_parteneri + Release poAdrese + Release poContracte + = close_cctipuri() + USE IN (SELECT('crsContracte')) + USE IN (SELECT('crsparteneri')) + USE IN (SELECT('crsPers_contact')) + USE IN (SELECT('crsCoduri')) + USE IN (SELECT('crscoresp_tip_parteneri')) + USE IN (SELECT('crsAdrese')) +Endproc && viz_parteneri +************************************************************* +******************************************* INCEPUT:vizualizare_partener ******************************************* +Procedure vizualizare_partener + Lparameters tnIdTipPart, tcTitlu, tnTipPersoana + *!* tnTipPersoana : tipul de persoana cu care intra implicit la adaugare ( 1 - juridica, 2 - fizica ) + + Private poparteneri, poAdrese + Local lcSchema, lcSelect, lcOrder, lcFiltru, llAfiseaza + Store '' To poparteneri, poAdrese, poCoduri + lcSchema = [] + lcSelect = [SELECT distinct p.id_part, p.denumire, p.nume, p.prenume, p.cod_fiscal, p.reg_comert,] + ; + [p.id_loc_inreg, p.localitate_inreg, p.tip_persoana, p.prefix, p.sufix, p.banca, p.cont_banca,] + ; + [p.inactiv, p.motiv_inactiv, p.id_categorie_entitate, p.categorie_entitate, p.swift_banca, p.adresa_banca from vnom_parteneri p ] + ; + [left join coresp_tip_part ctp on ctp.id_part = p.id_part where 1=2] + lcOrder = [p.denumire] + lcFiltru = [1=2] + llAfiseaza = .F. + gencursor('poparteneri', 'crsparteneri', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza) + poparteneri.ca_baza1.afisare() + + lcSchema = [] + lcSelect = ['SELECT id_adresa, id_part, denumire_adresa, da_apare, strada, numar, bloc, scara, etaj, apart, sector,'+] + ; + ['id_loc, localitate, id_regiune, id_judet, judet, codpostal, id_tara, tara, telefon1, telefon2, fax, email, web, '+] + ; + ['inactiv, principala FROM ] + gcS + [.vadrese_parteneri where 1=2'] + lcFiltru = [1=2] + lcOrder = [strada] + llAfiseaza = .F. + gencursor('poAdrese', 'crsAdrese', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza) + poAdrese.ca_baza1.afisare() + + lcSchema = [] + lcSelect = ['SELECT id,id_part, cod FROM ] + gcS + [.vparteneri_coduri where 1=2'] + lcFiltru = [1=2] + lcOrder = [cod] + llAfiseaza = .F. + gencursor('poCoduri', 'crsCoduri', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza) + poCoduri.ca_baza1.afisare() + Select crsparteneri + ofrmpartener = Createobject('frm_partener', tnIdTipPart, tcTitlu, tnTipPersoana) + ofrmpartener.Show(1) + Release ofrmpartener, poAdrese, poparteneri, poCoduri + +Endproc +******************************************* SFARSIT: vizualizare_partener******************************************* +******************************************* INCEPUT: vizualizare_furnizori ******************************************* +Procedure vizualizare_furnizori + Local lnIdTipFurnizor + If Used('crsconttemp') + Use In crsconttemp + Endif + lcSql = [select id_tip_part from ] + gcS + [.coresp_tip_cont where cont='401'] + lcCursor = [crsconttemp] + lnSucces = goExecutor.oExecute(lcSql, lcCursor) + goExecutor.oReset() + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare, 0 + 16, "Eroare") + Return + Endif + If Reccount('crsconttemp') > 0 + Select crsconttemp + lnIdTipFurnizor = id_tip_part + Use In crsconttemp + + DO viz_parteneri with lnIdTipFurnizor , 1, "Alegeti tipul", "Furnizori" +*!* Do vizualizare_partener With lnIdTipFurnizor, "Furnizori" + + Else + Use In crsconttemp + AMESSAGEBOX("Nu au fost gasite configurarile de tipuri de parteneri pentru contul 401 !", 0 + 48, "Atentie") + Endif +Endproc +******************************************* SFARSIT: vizualizare_furnizori ******************************************* +******************************************* INCEPUT: vizualizare_clienti ******************************************* +Procedure vizualizare_clienti + LPARAMETERS tlVizualizareParteneri + * tlVizualizareParteneri: .F. frm_partener, .T. frm_parteneri + If Used('crsconttemp') + Use In crsconttemp + ENDIF + + lcSql = [select id_tip_part from ] + gcS + [.coresp_tip_cont where cont='] + gcCont411 + ['] + lcCursor = [crsconttemp] + lnSucces = goExecutor.oExecute(lcSql, lcCursor) + goExecutor.oReset() + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare, 0 + 16, "Eroare") + Return + Endif + If Reccount('crsconttemp') > 0 + Select crsconttemp + lnIdTipClient = id_tip_part + Use In crsconttemp + +*!* IF m.tlVizualizareParteneri + DO viz_parteneri with lnIdTipClient, 1, "Alegeti tipul", "Clienti" +*!* ELSE +*!* Do vizualizare_partener With lnIdTipClient, "Clienti" +*!* ENDIF + Else + Use In crsconttemp + AMESSAGEBOX("Nu au fost gasite configurarile de tipuri de parteneri pentru contul " + gcCont411 + " !", 0 + 48, "Atentie") + Endif +Endproc +******************************************* SFARSIT: vizualizare_clienti ******************************************* +******************************************* INCEPUT: vizualizare_responsabili ******************************************* +Procedure vizualizare_responsabili + Do vizualizare_partener With (gnIdTipResponsabili), ("Responsabili"), (2) +Endproc +******************************************* SFARSIT: vizualizare_delegati ******************************************* +******************************************* INCEPUT: vizualizare_delegati ******************************************* +Procedure vizualizare_delegati + Do vizualizare_partener With (gnIdTipDelegati), ("Delegati"), (2) +Endproc +******************************************* SFARSIT: vizualizare_delegati ******************************************* +******************************************* INCEPUT: vizualizare_agenti ******************************************* +Procedure vizualizare_agenti + Do vizualizare_partener With (gnIdTipAgenti), ("Agenti"), (2) +Endproc +******************************************* SFARSIT: vizualizare_agenti ******************************************* +Procedure viz_entitati_conturi + + ** load cursor crstipuriconturi gol: + + Private poconturi, pcselect4, pcfiltru4, pcschema4, pcorder4 + Store "" To pcselect4, pcfiltru4, pcschema4, pcorder4, poconturi + pcselect4 = ['SELECT * FROM ] + gcS + [.CONFIG_CONT_IREG where 1=2'] + pcfiltru4 = [1=2] + pcschema4 = [''] + pcorder4 = [CONT] + llAfisare4 = .F. + gencursor('poconturi', 'crsconturi', pcselect4, pcfiltru4, pcschema4, pcorder4, llAfisare4) + poconturi.ca_baza1.afisare() + + Private potipuri_conturi, pcselect3, pcfiltru3, pcschema3, pcorder3 + Store "" To pcselect3, pcfiltru3, pcschema3, pcorder3, potipuri_conturi + **pcselect2=['SELECT * FROM '+]+gcS+[+'CORESP_TIP_PART join NOM_TIP_PARTENERI on CORESP_TIP_PART.ID_TIP_PART=NOM_TIP_PARTENERI.ID_TIP_PART where 2=2'] + pcselect3 = ['SELECT * FROM ] + gcS + [.VCORESP_TIP_CONT where 1=2'] + pcfiltru3 = [1=2] + pcschema3 = [''] + pcorder3 = [CONT] + llAfisare3 = .F. + gencursor('potipuri_conturi', 'crstipuriconturi', pcselect3, pcfiltru3, pcschema3, pcorder3, llAfisare3) + potipuri_conturi.ca_baza1.afisare() + + ** load cursor crstipuriparteneri plin: + Private potipuri_parteneri, pcselect2, pcfiltru2, pcschema2, pcorder2 + Store "" To pcselect2, pcfiltru2, pcschema2, pcorder2, potipuri_parteneri + **pcselect2=['SELECT * FROM '+]+gcS+[+'CORESP_TIP_PART join NOM_TIP_PARTENERI on CORESP_TIP_PART.ID_TIP_PART=NOM_TIP_PARTENERI.ID_TIP_PART where 2=2'] + pcselect2 = ['SELECT * FROM ] + gcS + [.VNOM_TIP_PARTENERI where 1=2'] + pcfiltru2 = [2=2] + pcschema2 = [''] + pcorder2 = [TIP_PARTENER] + llAfisare2 = .F. + gencursor('potipuri_parteneri', 'crstipuriparteneri', pcselect2, pcfiltru2, pcschema2, pcorder2, llAfisare2) + potipuri_parteneri.ca_baza1.afisare() + + Select crstipuriparteneri + oEntitati_conturi = Createobject('frm_entitati_conturi') + oEntitati_conturi.Show() + Release poconturi + Release potipuri_conturi + Release potipuri_parteneri + +Endproc && viz_entitati_conturi +******************************************* SFARSIT: viz_entitati_conturi ******************************************* + +*!* 11.04.2012 : marius.atanasiu +Procedure lucrari_validat_nou + nom_lucrari_nou() +Endproc +************************************************************* +***proceduri lansare forme de insert nou pt. cauta_alfa:***** +************************************************************* +Procedure nom_lucrari_nou + Local loRec, lnSucces, lcSelect, lcCursor + + lcSelect = [select * from ] + gcS + [.nom_lucrari where 1=2] + lcCursor = [crsLucrariTemp] + lnSucces = goExecutor.oExecute(lcSelect, lcCursor) + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare, 0 + 16, 'Eroare') + Return Null + Endif + + Select (lcCursor) + Scatter Name loRec + AddProperty(loRec, "nume_parinte", "") + Do Adauga_Modifica_Inregistrare With 'lucrari', loRec, , "INSERT" + If Used(lcCursor) + Use In (lcCursor) + Endif + + If gnButon = 1 + Return loRec + Else + Return Null + Endif +Endproc +***====================================================================================== + +*!* 28.07.2006 +*!* MARIUS.MUTU +Procedure nom_lucrari_modifica + Parameters tnIdLucrare + + Local loRec, lnSucces, lcSelect + loRec = Null + + If Empty(tnIdLucrare) Or Type('tnIdLucrare') # 'N' Or Isnull(tnIdLucrare) + Return loRec + Endif + + + lcSelect = [select * from ] + gcS + [.nom_lucrari where id_lucrare = ?tnIdLucrare] + lcCursor = [crsLucrariTemp] + lnSucces = goExecutor.oExecute(lcSelect, lcCursor) + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare, 0 + 16, 'Eroare') + Return loRec + Endif + + Select (lcCursor) + Scatter Name loRec + Use In (lcCursor) + + AddProperty(loRec, "nume_parinte", "") + + If !Isnull(loRec.id_tata) + lcSelect = [select nrord from ] + gcS + [.nom_lucrari where sters = 0 and id_lucrare = ] + Transform(loRec.id_tata) + lcCursor = [crsLucrariTemp] + lnSucces = goExecutor.oExecute(lcSelect, lcCursor) + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare, 0 + 16, 'Eroare') + Else + loRec.nume_parinte = Alltrim(crsLucrariTemp.nrord) + Endif + If Used(lcCursor) + Use In (lcCursor) + Endif + Endif + + Do Adauga_Modifica_Inregistrare With 'lucrari', loRec, loRec.id_lucrare, "UPDATE" + + + If gnButon = 1 + Return loRec + Else + Return Null + Endif + +Endproc && nom_lucrari_modifica +***====================================================================================== + +Procedure nom_fdoc_nou + + Private pofdoc, pcschema1, pcselect1 + Store '' To pofdoc + pcschema1 = [''] + pcselect1 = ['select * from ] + gcS + [.vnom_fdoc where 1=2'] + pcorder1 = [fel_document] + pcfiltru1 = [2=2] + llAfiseaza = .F. + gencursor('pofdoc', 'v_fdoc_nou', pcselect1, pcfiltru1, pcschema1, pcorder1, llAfiseaza) + pofdoc.ca_baza1.afisare() + *** + Select v_fdoc_nou + Scatter Name loRec Blank + Do Adauga_Modifica_Inregistrare With 'fdoc', loRec, , "INSERT" + Use In v_fdoc_nou + +Endproc + + +Procedure nom_gestiuni_nou + Lparameters tnIdGestiune + * tnIdGestiune (optional): daca se doreste crearea unei gestiuni prin copierea unei alte gestiuni (tnIdGestiune) + + Private pogestiuni + Local lcSchema, lcSelect, lcFiltru, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal, llBlank + Store '' To pogestiuni + + lcSchema = [] + lcSelect = [select * from vnom_gestiuni] + lcOrder = [nume_gestiune] + lcFiltru = Iif(!Empty(Nvl(tnIdGestiune, 0)), [id_gestiune = ] + Transform(tnIdGestiune), [1=2]) + llAfiseaza = .F. + lcgroup = "" + llModParam = .T. + lcFiltruOriginal = [] + + gencursor('pogestiuni', 'v_gestiuni_nou', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal) + pogestiuni.ca_baza1.afisare() + + *** + Select v_gestiuni_nou + If Empty(Nvl(tnIdGestiune, 0)) + Scatter Name loRec Memo Blank + loRec.id_responsabil = Null && modificare ROAGEST v 2.0.150 + loRec.id_sectie = Null && modificare ROAGEST v 2.1.2 + Else + Scatter Name loRec Memo + loRec.id_gestiune = Null + Endif + + Use In (Select('v_gestiuni_nou')) + + = ccsucursale() + = cctipuri_gestiuni() + llBlank = .T. + = ccsectii(m.llBlank) + + loRec.id_sucursala = gnIdSucursala + Do Adauga_Modifica_Inregistrare With 'gestiuni', loRec, , "INSERT" + + = close_ccsucursale() + = close_cctipuri_gestiuni() + = close_ccsectii() +Endproc + + +*!* 18.09.2006 +*!* MARIUS.MUTU +Procedure nom_gestiuni_modifica + Parameters tnIdGestiune + + Local loRec, lnSucces, lcSelect, llBlank + loRec = Null + + If Empty(tnIdGestiune) Or Type('tnIdGestiune') # 'N' Or Isnull(tnIdGestiune) + Return loRec + Endif + + + lcSelect = [select * from vnom_gestiuni where id_gestiune = ?tnIdGestiune] + lcCursor = [crsGestiuneTemp] + lnSucces = goExecutor.oExecute(lcSelect, lcCursor) + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare, 0 + 16, 'Eroare') + Return loRec + Endif + + Select (lcCursor) + Scatter Name loRec + Use In (lcCursor) + + = ccsucursale() + = cctipuri_gestiuni() + llBlank = .T. + = ccsectii(m.llBlank) + + Select vnom_sucursale + Locate For id_sucursala = loRec.id_sucursala + If Found() + loRec.sucursala = vnom_sucursale.sucursala + Endif + + Select vtipuri_gestiuni + Locate For id_tipgest = loRec.nr_pag + If Found() + loRec.nume_tip = vtipuri_gestiuni.nume_tip + Endif + + Do Adauga_Modifica_Inregistrare With 'gestiuni', loRec, loRec.id_gestiune, "UPDATE" + + = close_ccsucursale() + = close_cctipuri_gestiuni() + = close_ccsectii() + + If gnButon = 1 + Return loRec + Else + Return Null + Endif + +Endproc && nom_gestiuni_modifica +***====================================================================================== + + +************************************************************* +Procedure nom_judete_nou + + Private pojudete, pcschema1, pcselect1 + Store '' To pojudete + pcschema1 = [''] + pcselect1 = ['select * from syn_vnom_judete where 1=2'] + pcorder1 = [judet] + pcfiltru1 = [2=2] + llAfiseaza = .F. + gencursor('pojudete', 'v_judete_nou', pcselect1, pcfiltru1, pcschema1, pcorder1, llAfiseaza) + pojudete.ca_baza1.afisare() + *** + Select v_judete_nou + Scatter Name loRec Blank + Do Adauga_Modifica_Inregistrare With 'judet', loRec, , "INSERT" + Use In v_judete_nou + +Endproc +************************************************************* +Procedure nom_responsabili_nou + + Private poresponsabili, pcschema1, pcselect1 + Store '' To poresponsabili + pcschema1 = [''] + pcselect1 = ['select * from ] + gcS + [.vnom_responsabili where 1=2'] + pcorder1 = [nume] + pcfiltru1 = [2=2] + llAfiseaza = .F. + gencursor('poresponsabili', 'v_responsabili_nou', pcselect1, pcfiltru1, pcschema1, pcorder1, llAfiseaza) + poresponsabili.ca_baza1.afisare() + *** + Select v_responsabili_nou + Scatter Name loRec Blank + Do Adauga_Modifica_Inregistrare With 'responsabili', loRec, , "INSERT" + Use In v_responsabili_nou + +Endproc +************************************************************* +Procedure nom_sectii_nou + + Private posectii, pcschema1, pcselect1 + Store '' To posectii + pcschema1 = [''] + pcselect1 = ['select * from ] + gcS + [.vnom_sectii where 1=2'] + pcorder1 = [sectie] + pcfiltru1 = [2=2] + llAfiseaza = .F. + gencursor('posectii', 'v_sectii_nou', pcselect1, pcfiltru1, pcschema1, pcorder1, llAfiseaza) + posectii.ca_baza1.afisare() + *** + Select v_sectii_nou + Scatter Name loRec Blank + Do Adauga_Modifica_Inregistrare With 'sectii', loRec, , "INSERT" + Use In v_sectii_nou + +Endproc +************************************************************* +Procedure nom_venchel_nou + + Private posectii, pcschema1, pcselect1 + Store '' To povenchel + pcschema1 = [''] + pcselect1 = ['select * from ] + gcS + [.vnom_venchel where 1=2'] + pcorder1 = [tip_venchelt] + pcfiltru1 = [2=2] + llAfiseaza = .F. + gencursor('povenchel', 'v_venchel_nou', pcselect1, pcfiltru1, pcschema1, pcorder1, llAfiseaza) + povenchel.ca_baza1.afisare() + *** + Select v_venchel_nou + Scatter Name loRec Blank + Do Adauga_Modifica_Inregistrare With 'venchel', loRec, , "INSERT" + Use In v_venchel_nou + +Endproc +************************************************************* +Procedure nom_localitati_nou + + Private polocalitati, pcschema1, pcselect1 + Store '' To polocalitati + pcschema1 = [''] + pcselect1 = ['select * from syn_vnom_localitati where 1=2'] + pcorder1 = [localitate] + pcfiltru1 = [2=2] + llAfiseaza = .F. + gencursor('polocalitati', 'v_localitati_nou', pcselect1, pcfiltru1, pcschema1, pcorder1, llAfiseaza) + polocalitati.ca_baza1.afisare() + *** + update_judete() + Select v_localitati_nou + Scatter Name loRec Blank + Do Adauga_Modifica_Inregistrare With 'localitati', loRec, , "INSERT" + Use In v_localitati_nou + +Endproc +************************************************************* +Procedure nom_plcont_nou + + Private poplcont, pcschema1, pcselect1 + Store '' To poplcont + pcschema1 = [''] + pcselect1 = ['select * from ] + gcS + [.vnom_plcont where 1=2'] + pcorder1 = [cont] + pcfiltru1 = [2=2] + llAfiseaza = .F. + gencursor('poplcont', 'v_plcont_nou', pcselect1, pcfiltru1, pcschema1, pcorder1, llAfiseaza) + poplcont.ca_baza1.afisare() + *** + + Select v_plcont_nou + Scatter Name loRec Blank + loRec.an = gnan + Do Adauga_Modifica_Inregistrare With 'plcont', loRec, , "INSERT" + Use In v_plcont_nou + +Endproc + +************************************************************* + +************************************************************* +Procedure nom_parteneri_nou + Lparameters tnIdTipPart, tcTipPart, tnSpecial, tnTipPersoana, tnIdPartCoresp, toDate, tnIdPart + *!* tnSpecial = 1 => nu poate sa aleaga alt tip decat tnIdTipPart + *!* tnTipPersoana ( cu ce tip de persoana intra implicit ) + *!* = 1 => juridica + *!* = 2 => fizica + *!* tnIdPartCoresp = la adaugarea unui delegat, este id_part al clientului pentru care se adauga delegatul + *!* todate = contine proprietati completate pentru adaugarea silentioasa fara sa mai arate formularul nom_parteneri_nou + *!* tnId_Part = se populeaza formularul de adaugare partener cu datele partenerului dat (copiere partener) + + * Intoarce obiect cu partenerul creat si Id-ul partenerului completat sau NULL daca eroare + + Private poparteneri + Local lcSchema, lcSelect, lcFiltru, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal, lnSpecial, llCopiere, llSilentios + LOCAL lnIdPartener, lcSelect2, lnTipPersFizica + lnTipPersFizica = 2 + lcSelect2 = SELECT() + lnIdPartener = 0 + Store '' To poparteneri + Private loRec + Private pnIdPart, pnIdTipPart + pnIdPart = 0 + pnIdTipPart = 0 + + If !Empty(tnSpecial) + lnSpecial = tnSpecial + Else + lnSpecial = 0 + Endif + + If !Empty(tnTipPersoana) + lnTipPersoana = tnTipPersoana + Else + lnTipPersoana = 1 + Endif + + llCopiere = Type('tnIdPart') = 'N' + pnIdPart = Iif(Empty(m.tnIdPart), 0, m.tnIdPart) + + lcSchema = [] + * lcSelect=[SELECT id_part, denumire, nume, prenume, cod_fiscal, reg_comert, categorie_entitate, id_categorie_entitate, id_loc_inreg, localitate_inreg, tip_persoana, prefix, sufix, banca, cont_banca, inactiv, motiv_inactiv FROM ]+gcS+[.VNOM_PARTENERI] + lcSelect = [select id_part, denumire, nume, prenume, cod_fiscal, cod_fiscal2, reg_comert, id_loc_inreg, id_categorie_entitate, localitate_inreg, prefix, sufix, ] + ; + [tip_persoana, banca, cont_banca, motiv_inactiv, inactiv, eliberatde, dataeliberat, email, web, fax, id_adresa, adresa, telefon, telefon2, id_loc, localitate, ] + ; + [judet, id_judet, sector, apart, etaj, scara, bloc, strada, numar, codpostal, id_tara, tara, categorie_entitate, dataora, utilizator, swift_banca, adresa_banca, institutie_publica from vnom_parteneri] + + lcOrder = [nume] + If !m.llCopiere + lcFiltru = [1=2] + Else + lcFiltru = [id_part = ] + Alltrim(Str(m.pnIdPart)) + Endif + llAfiseaza = .F. + lcgroup = "" + llModParam = .T. + lcFiltruOriginal = [] + gencursor('poparteneri', 'crsParteneriNou', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal) + poparteneri.ca_baza1.afisare() + *** + + If Pcount() > 0 + Do Case + Case Type('tnIdTipPart') = 'N' + pnIdTipPart = tnIdTipPart + Case Type('tnIdTipPart') = 'C' + pnIdTipPart = Round(Val(Getwordnum(tnIdTipPart, 1, ",")), 0) + Otherwise + pnIdTipPart = 0 + Endcase + Endif + + Select crsParteneriNou + If !m.llCopiere + Scatter Name loRec Blank + Else + Scatter Name loRec + ENDIF + loRec.tip_persoana = lnTipPersoana && juridica + + AddProperty(loRec, "id_tip_part", pnIdTipPart) + AddProperty(loRec, "tip_partener", "0") + AddProperty(loRec, "special", lnSpecial) + *!* modificare 10.01 + *!* ccorespdel : poate fi un id (id_part) sau o lista de id-uri (id_part) separate prin virgula,dar fara virgula la final + AddProperty(loRec, "ccorespdel", Iif(Empty(tnIdPartCoresp), [], Alltrim(Str(tnIdPartCoresp)))) + *!* ^ + + IF TYPE('toDate') = 'O' + IF TYPE('toDate.denumire')= 'C' AND !EMPTY(toDate.denumire) + loRec.denumire = toDate.denumire + ENDIF + IF TYPE('toDate.nume')= 'C' AND !EMPTY(toDate.nume) + loRec.nume = toDate.nume + ENDIF + IF TYPE('toDate.prenume')= 'C' AND !EMPTY(toDate.prenume) + loRec.prenume = toDate.prenume + ENDIF + IF TYPE('toDate.cod_fiscal')= 'C' AND !EMPTY(toDate.cod_fiscal) + loRec.cod_fiscal = toDate.cod_fiscal + ENDIF + + IF TYPE('toDate.tip_persoana ')= 'N' AND !EMPTY(toDate.tip_persoana ) + loRec.tip_persoana = toDate.tip_persoana + ENDIF + IF TYPE('toDate.id_tip_part')= 'N' AND !EMPTY(toDate.id_tip_part) + loRec.id_tip_part = toDate.id_tip_part + ENDIF + ENDIF + + * Persoana fizica cu denumire, fara nume, completez nume si prenume din denumire + IF loRec.tip_persoana = m.lnTipPersFizica AND !EMPTY(NVL(loRec.denumire,'')) AND EMPTY(NVL(loRec.nume,'')) + lnPos = AT(' ', loRec.denumire) + IF m.lnPos > 0 + loRec.nume = LEFT(loRec.denumire, m.lnPos) + loRec.prenume = SUBSTR(loRec.denumire, m.lnPos + 1) + ENDIF + ENDIF + + * Nu apare formularul daca toDate.lSilentios = .T. sau exista toDate + llSilentios = .F. + IF TYPE('toDate.lSilentios') = 'L' + llSilentios = toDate.lSilentios + ELSE + llSilentios = (TYPE('toDate') = 'O') + ENDIF + + + *!* =cclocalitati() + = cccateg_ent() + + If Type('gnParametru_prog') <> 'U' + Do Case + Case gnParametru_prog = 1 && contracte clienti + pnParent_id = -1 + Case gnParametru_prog = 2 && contracte furnizori + pnParent_id = -2 + Endcase + Else + pnParent_id = 0 + Endif + + If !m.llSilentios + lcSel = [{call pack_def.get_partener_tipuri(?pnIdPart, ?pnIdTipPart, ?pnParent_id)}] + lcCursor = 'v_nom_tip_parteneri' + lnSucces = goExecutor.oExecute(lcSel, lcCursor) + + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare, 0 + 16, "Eroare") + Return + Endif + + *!* modificare adrese parteneri 12.2013 + gnButon = 2 + lcSql = [SELECT id_adresa, id_part, denumire_adresa, da_apare, strada, numar, bloc, scara, etaj, apart, sector,] + ; + [id_loc, localitate, id_regiune, id_judet, judet, codpostal, id_tara, tara, telefon1, telefon2,] + ; + [fax, email, web, inactiv, principala,id_adresa as id_adresa_orig FROM vadrese_parteneri where 1=2] + lcCursor = [crsAdreseEnt] + If goExecutor.oExecuta(lcSql, lcCursor) + lcSql = [SELECT id_pers, id_part, nume, prenume, apelativ, functia, telefon, email, inactiv, principal, id_pers as id_pers_orig FROM vpers_contact where 1=2] + lcCursor2 = [crsPersContactEnt] + If goExecutor.oExecuta(lcSql, lcCursor2) + gnButon = Adauga_Modifica_Inregistrare("parteneri", loRec, @lnIdPartener, "INSERT") && In oproceduri_ams.prg + Endif + Use In (Select(lcCursor2)) + Endif + Use In (Select(lcCursor)) + + *!* Do Adauga_Modifica_Inregistrare With "parteneri",loRec,,"INSERT" In oproceduri_ams.prg + *!* modificare adrese parteneri 12.2013 ^ + *!* =close_cclocalitati() + = close_categ_ent() + + *!* modificare ROACONT 2.0.40 + = close_cctipuri() + *!* modificare ROACONT 2.0.40 ^ + + SELECT (m.lcSelect2) + If gnButon = 1 + loRec.id_part = m.pnIdPart + Return loRec + Else + Return Null + Endif + Else + AdaugarePartener = Createobject("cus_odata_parteneri") + lnIdPartener = 0 + AdaugarePartener.lSilent = .T. + AdaugarePartener.salvare(toDate, @lnIdPartener) + toDate.id_part = m.pnIdPart + + *!* modificare ROACONT 2.0.40 + = close_cctipuri() + *!* modificare ROACONT 2.0.40 ^ + + SELECT (m.lcSelect2) + If NVL(m.pnIdPart,0) <> 0 + Return toDate + Else + Return Null + Endif + Endif + +Endproc && nom_parteneri_nou + +************************************************************* +Procedure nom_parteneri_modifica + Lparameters tnId_Part, tnIdTipPart, tcTipPart, tnSpecial, tcMesaj + *!* tnSpecial = 1 => nu poate sa aleaga alt tip decat tnIdTipPart + Local lnIdTipPart, lcTipPart, lnSpecial + If !Empty(tnIdTipPart) + lnIdTipPart = tnIdTipPart + Else + lnIdTipPart = 0 + Endif + + If !Empty(tcTipPart) + lcTipPart = tcTipPart + Else + lcTipPart = [] + Endif + + If !Empty(tnSpecial) + lnSpecial = tnSpecial + Else + lnSpecial = 0 + Endif + + + + Private poparteneri + Local lcSchema, lcSelect, lcFiltru, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal + Store '' To poparteneri + + Private pnId_part, pnIdPart + pnId_part = tnId_Part + pnIdPart = tnId_Part + lcSchema = [] + *lcSelect=[SELECT id_part, denumire, nume, prenume, cod_fiscal, reg_comert, id_loc_inreg, categorie_entitate, id_categorie_entitate, localitate_inreg, tip_persoana, prefix, sufix, banca, cont_banca, inactiv, motiv_inactiv FROM VNOM_PARTENERI] + lcSelect = [select id_part, denumire, nume, prenume, cod_fiscal, cod_fiscal2, reg_comert, id_loc_inreg, id_categorie_entitate, localitate_inreg, prefix, sufix, ] + ; + [tip_persoana, banca, cont_banca, motiv_inactiv, inactiv, eliberatde, dataeliberat, email, web, fax, id_adresa, adresa, telefon, telefon2, id_loc, localitate, ] + ; + [judet, id_judet, sector, apart, etaj, scara, bloc, strada, numar, codpostal, id_tara, tara, categorie_entitate, dataora, utilizator, swift_banca, adresa_banca, institutie_publica from vnom_parteneri] + lcOrder = [nume] + lcFiltru = [] + llAfiseaza = .F. + lcgroup = "" + llModParam = .T. + lcFiltruOriginal = [id_part = ] + Transform(pnId_part) + gencursor('poparteneri', 'crsParteneriModifica', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal) + poparteneri.ca_baza1.afisare() + + If !Used('crsParteneriModifica') + Return + Endif + + Select crsParteneriModifica + Scatter Name loRec + + AddProperty(loRec, "id_tip_part", lnIdTipPart) + AddProperty(loRec, "tip_partener", lcTipPart) + AddProperty(loRec, "special", lnSpecial) + AddProperty(loRec, "ccorespdel", []) + pccod_fiscal = loRec.cod_fiscal + pccontinua = .F. + *!* =cclocalitati() + = cccateg_ent() + + If Type('gnParametru_prog') <> 'U' + Do Case + Case gnParametru_prog = 1 && contracte clienti + pnParent_id = -1 + Case gnParametru_prog = 2 && contracte furnizori + pnParent_id = -2 + Otherwise + pnParent_id = 0 + Endcase + Else + pnParent_id = 0 + Endif + + lcSel = [{call pack_def.get_partener_tipuri(?pnId_Part, ?loRec.id_tip_part, ?pnParent_id)}] + lcCursor = 'v_nom_tip_parteneri' + lnSucces = goExecutor.oExecute(lcSel, lcCursor) + + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare, 0 + 16, "Eroare") + Return + Endif + + = cctipuri_selectate(loRec.id_part) + ****inceput exceptii*** +*!* If Reccount('v_nom_tip_parteneri_selectati') > 1 +*!* If lnIdTipPart <> 0 And lnSpecial <> 0 And !Empty(tcMesaj) +*!* AMESSAGEBOX(tcMesaj, 16, 'Atentie!') +*!* *!* modificare ROACONT 2.0.40 +*!* = close_cctipuri() +*!* = close_cctipuri_selectate() +*!* *!* modificare ROACONT 2.0.40 ^ +*!* Return Null +*!* Endif +*!* Endif + If gnId_prg_owner = 69 + If Reccount('v_nom_tip_parteneri_selectati') = 1 And v_nom_tip_parteneri_selectati.id_tip_part <> lnIdTipPart + AMESSAGEBOX(tcMesaj, 16, 'Atentie!') + *!* modificare ROACONT 2.0.40 + = close_cctipuri() + = close_cctipuri_selectate() + *!* modificare ROACONT 2.0.40 ^ + Return Null + Endif + Endif + ****sfarsit exceptii*** + + *!* modificare adrese parteneri 12.2013 + gnButon = 2 + lcSql = [SELECT id_adresa, id_part, denumire_adresa, da_apare, strada, numar, bloc, scara, etaj, apart, sector,] + ; + [id_loc, localitate, id_regiune, id_judet, judet, codpostal, id_tara, tara, telefon1, telefon2,] + ; + [fax, email, web, inactiv, principala, id_adresa as id_adresa_orig FROM vadrese_parteneri where id_part = ?pnId_part] + lcCursor = [crsAdreseEnt] + If goExecutor.oExecuta(lcSql, lcCursor) + lcSql = [SELECT id_pers, id_part, nume, prenume, apelativ, functia, telefon, email, inactiv, principal, id_pers as id_pers_orig ] + ; + [FROM vpers_contact where id_part = ?pnId_part] + lcCursor2 = [crsPersContactEnt] + If goExecutor.oExecuta(lcSql, lcCursor2) + *!* PRIVATE poRec + *!* poRec = CloneObj(loRec) + *DO FORM frm_parteneri_nou NAME loAdMod WITH poRec,poRec.id_part,"UPDATE" + Do Adauga_Modifica_Inregistrare With "parteneri", loRec, loRec.id_part, "UPDATE" In oproceduri_ams.prg + Endif + Use In (Select(lcCursor2)) + Endif + Use In (Select(lcCursor)) + *!* Do Adauga_Modifica_Inregistrare With "parteneri",loRec,loRec.id_part,"UPDATE" In oproceduri_ams.prg + *!* modificare adrese parteneri 12.2013 ^ + *!* =close_cclocalitati() + = close_cctipuri() + = close_cctipuri_selectate() + = close_categ_ent() + + If gnButon = 1 + Return loRec + Else + Return Null + Endif + +Endproc && nom_parteneri_modifica +************************************************************************************************************************** + +************************************************************************************************************************** +* local lnId +* lnId = 0 +* llSucces = nom_articole_nou(@lnId) +************************************************************************************************************************** +Procedure nom_articole_nou + LPARAMETERS tnId, toDate + * tnId: OUT id articol creat + * toDate: (optional) obiect cu date initiale (ex: denumire, um). are aceleasi atribute ca vnom_articole + + LOCAL llSucces, lnButon, loRec + tnId = 0 + llSucces = goExecutor.oExecuta('select * from vnom_articole where 1=2', 'vnom_articole_nou') + IF m.llSucces + Select vnom_articole_nou + Scatter Name loRec Blank Memo + + llSucces = goExecutor.oExecuta('SELECT id, id_part, partener, id_articol, articol, cod FROM VPARTENERI_ARTICOLE_CODURI WHERE 1=2', 'crsParteneriArticoleCoduri') + + * Initializez articolul cu date optionale + IF TYPE('toDate') = 'O' + CopyObjectProperties(toDate, loRec) + + * cod client + IF TYPE('toDate.id_client') = 'N' AND TYPE('toDate.client') = 'C' AND TYPE('toDate.cod_client') = 'C' AND !EMPTY(NVL(toDate.id_client, 0)) AND !EMPTY(NVL(toDate.cod_client, '')) + REPLACE id_part WITH toDate.id_client, partener WITH Alltrim(toDate.client), cod WITH ALLTRIM(toDate.cod_client) + ENDIF + + * cod furnizor + IF TYPE('toDate.id_furnizor') = 'N' AND TYPE('toDate.furnizor') = 'C' AND TYPE('toDate.cod_furnizor') = 'C' AND !EMPTY(NVL(toDate.id_furnizor, 0)) AND !EMPTY(NVL(toDate.cod_furnizor, '')) + loRec.id_part = toDate.id_furnizor + loRec.partener = toDate.furnizor + loRec.codmatf = ALLTRIM(toDate.cod_furnizor) + ENDIF + + ENDIF + ENDIF + * actualizez vnom_um de fiecare data, poate am facut modificari in asocierea um/cod_um_iso + IF m.llSucces + llSucces = update_um() + ENDIF + IF m.llSucces + IF !USED('vnom_um_iso') + llSucces = update_um_iso() + ENDIF + ENDIF + IF m.llSucces + DO CASE + CASE Type('gcNumeProgram') = 'C' And Inlist(Alltrim(Upper(gcNumeProgram)), 'ROAPRETURI', 'ROACONTRACTE') + loRec.in_crm = 1 + CASE Type('gcNumeProgram') = 'C' And Inlist(Alltrim(Upper(gcNumeProgram)), 'ROAACNPRO') + loRec.tip = 1 && manopera + loRec.in_crm = 0 + loRec.in_stoc = 0 + OTHERWISE + loRec.in_stoc = 1 + ENDCASE + + If m.gnCodMatAutomat = 2 + Private poGeneratorCodmat + + poGeneratorCodmat= Createobject("oGeneratorNumere") + lnRezultat = poGeneratorCodmat.creeaza_cursor_serii(14) + EndIf + If m.gnCodBareAutomat = 2 + Private poGeneratorCodBare + poGeneratorCodBare= Createobject("oGeneratorNumere") + lnRezultat2 = poGeneratorCodBare.creeaza_cursor_serii(15) + EndIf + + lnButon = Adauga_Modifica_Inregistrare('catalog_articole', loRec, @tnId , "INSERT") + llSucces = (m.lnButon = 1) + ENDIF + Use In (SELECT('vnom_articole_nou')) + USE IN (SELECT('crsParteneriArticoleCoduri')) + RETURN m.llSucces +Endproc +************************************************************************************************************************** +************************************************************************************************************************** +Procedure nom_articole2_nou + LOCAL llSucces, lnButon, loRec + * in contracte + + llSucces = goExecutor.oExecuta('select * from vnom_articole where 1=2', 'vnom_articole_nou') + IF m.llSucces + Select vnom_articole_nou + Scatter Name loRec Blank Memo + llSucces = goExecutor.oExecuta('SELECT id, id_part, partener, id_articol, articol, cod FROM VPARTENERI_ARTICOLE_CODURI WHERE 1=2', 'crsParteneriArticoleCoduri') + ENDIF + * actualizez vnom_um de fiecare data, poate am facut modificari in asocierea um/cod_um_iso + IF m.llSucces + llSucces = update_um() + ENDIF + IF m.llSucces + IF !USED('vnom_um_iso') + llSucces = update_um_iso() + ENDIF + ENDIF + IF m.llSucces + lnButon = Adauga_Modifica_Inregistrare('catalog_articole2', loRec, , "INSERT") + llSucces = (m.lnButon = 1) + ENDIF + Use In (SELECT('vnom_articole_nou')) + USE IN (SELECT('crsParteneriArticoleCoduri')) + RETURN m.llSucces +Endproc +************************************************************************************************************************** + +************************************************************************************************************************** +* llSucces = nom_articole_modifica(lnId) +************************************************************************************************************************** +Procedure nom_articole_modifica + LPARAMETERS tnId + + LOCAL llSucces, lnButon, loRec, lnId + lnId = tnId + llSucces = goExecutor.oExecuta('select * from vnom_articole where id_articol = ' + ALLTRIM(STR(m.lnId)), 'vnom_articole_nou') + IF m.llSucces + Select vnom_articole_nou + Scatter Name loRec Memo + llSucces = goExecutor.oExecuta('SELECT id, id_part, partener, id_articol, articol, cod FROM VPARTENERI_ARTICOLE_CODURI WHERE id_articol = ' + ALLTRIM(STR(m.lnId)) + ' order by partener', 'crsParteneriArticoleCoduri') + ENDIF + * actualizez vnom_um de fiecare data, poate am facut modificari in asocierea um/cod_um_iso + IF m.llSucces + llSucces = update_um() + ENDIF + IF m.llSucces + IF !USED('vnom_um_iso') + llSucces = update_um_iso() + ENDIF + ENDIF + IF m.llSucces + lorec.conditii_pastrare = Nvl(lorec.conditii_pastrare,'') + + If gnCodMatAutomat = 2 + Private poGeneratorCodmat + + poGeneratorCodmat= Createobject("oGeneratorNumere") + lnRezultat = poGeneratorCodmat.creeaza_cursor_serii(14) + Endif + If gnCodBareAutomat = 2 + Private poGeneratorCodBare + poGeneratorCodBare= Createobject("oGeneratorNumere") + lnRezultat2 = poGeneratorCodBare.creeaza_cursor_serii(15) + Endif + + lnButon = Adauga_Modifica_Inregistrare('catalog_articole', lorec, lnId, 'UPDATE') + llSucces = (m.lnButon = 1) + ENDIF + Use In (SELECT('vnom_articole_nou')) + USE IN (SELECT('crsParteneriArticoleCoduri')) + RETURN m.llSucces +Endproc +************************************************************************************************************************** + +Procedure viz_valute( ) + + Private povalute, pcschema1, pcselect1 + Store '' To povalute + pcschema1 = [''] + pcselect1 = ['select * from ] + gcS + [.vnom_valute where 1=2'] + pcorder1 = [nume_val] + pcfiltru1 = [inactiv=0] + llAfiseaza = .F. + gencursor('povalute', 'v_valute', pcselect1, pcfiltru1, pcschema1, pcorder1, llAfiseaza) + povalute.ca_baza1.afisare() + ofrmval = Createobject('frm_valute') + ofrmval.Show(1) + Release povalute + +Endproc +************************************************************************************************************************** +Procedure nom_valute_nou + + + Private povalute, pcschema1, pcselect1 + Store '' To povalute + pcschema1 = [''] + pcselect1 = ['select * from ] + gcS + [.vnom_valute where 1=2'] + pcorder1 = [ nume_val ] + pcfiltru1 = [2=2] + llAfiseaza = .F. + gencursor('povalute', 'valute_nou', pcselect1, pcfiltru1, pcschema1, pcorder1, llAfiseaza) + povalute.ca_baza1.afisare() + *** + + Select valute_nou + Scatter Name loRec Blank + + Do Adauga_Modifica_Inregistrare With 'valute', loRec, , "INSERT" + Use In valute_nou + +Endproc + + +************************************************************************************************************************** +Procedure sal_nom_mes_nou + *!* modificare 11.01.2012 + AddProperty(poRec, "tip_modificare", 1) + AddProperty(poRec, "dataconsemnare", {}) + *!* modificare 11.01.2012 ^ + Do Adauga_Modifica_Inregistrare With "meserii", poRec, , "INSERT", , "addmes" +Endproc +************************************************************************************************************************** +Procedure sal_nom_formatii_nou + Local loRec + Store '' To loRec + loRec = poRec + If Used('v_sectie') + Use In v_sectie + Endif + *cursor sectie v_sectie + lcSql = [select * from ] + gcS + [.vnom_sectii order by sectie]&& where inactiv = 0] + lcCursor = [v_sectie] + lnSucces = goExecutor.oExecute(lcSql, lcCursor) + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare, 0 + 16, "Eroare") + Endif + Select v_sectie + Scatter Name loRec Additive + *cursor semnaturi v_semnaturi + If Used('v_semnaturi') + Use In v_semnaturi + Endif + lcSql = [select * from ] + gcS + [.sal_semnaturi where sters = 0 and inactiv = 0 order by denumire ]&& where inactiv = 0] + lcCursor = [v_semnaturi] + lnSucces = goExecutor.oExecute(lcSql, lcCursor) + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare, 0 + 16, "Eroare") + Endif + Select v_semnaturi + Scatter Name loRec Additive + *cursor transa v_transe + If Used('v_transe') + Use In v_transe + Endif + lcSql = [select * from ] + gcS + [.SAL_vNOM_TRANSE where inactiv = 0 and sters = 0] + lcCursor = [v_transe] + lnSucces = goExecutor.oExecute(lcSql, lcCursor) + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare, 0 + 16, "Eroare") + Endif + Select v_transe + Scatter Name loRec Additive + + Do Adauga_Modifica_Inregistrare With "FORMATII", loRec, , "INSERT", , "addform" +Endproc +************************************************************************************************************************** +Procedure sal_nom_tipctr_nou + Local loRec + Store '' To loRec + loRec = poRec + *cursor ore/zi v_nomore + If Used('v_nomore') + Use In v_nomore + Endif + + lcSql = [select * from ] + gcS + [.SAL_vNOMORE where inactiv = 0 and sters = 0] + lcCursor = [v_nomore] + lnSucces = goExecutor.oExecute(lcSql, lcCursor) + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare, 0 + 16, "Eroare") + Endif + Select v_nomore + Scatter Name loRec Additive + + Do Adauga_Modifica_Inregistrare With "tipctr", loRec, , "INSERT", , "addtip" +Endproc +************************************************************************************************************************** +Procedure sal_nom_handicap_nou + Local loRec + Store '' To loRec + loRec = poRec + Do Adauga_Modifica_Inregistrare With "grdhand", loRec, , "INSERT", , "addhand" +Endproc +************************************************************************************************************************** +Procedure sal_nom_grmun_nou + Local loRec + Store '' To loRec + loRec = poRec + Do Adauga_Modifica_Inregistrare With "grpmun", loRec, , "INSERT", , "addgrp" +Endproc +************************************************************************************************************************** +Procedure sal_caseasig_nou + Local loRec + Store '' To loRec + loRec = poRec + *cursor judete v_jud + If Used('v_jud') + Use In v_jud + Endif + lcSql = [SELECT * from syn_vnom_judete where inactiv = 0] + lcCursor = [v_jud] + lnSucces = goExecutor.oExecute(lcSql, lcCursor) + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare, 0 + 16, "Eroare") + Endif + Select v_jud + Scatter Name loRec Additive + + Do Adauga_Modifica_Inregistrare With "caseasig", loRec, , "INSERT", , "addcasa" +Endproc +************************************************************************************************************************** +Procedure sal_nom_cm_nou + Local loRec + Store '' To loRec + loRec = poRec + lcSelect = [select * from ] + gcS + [.sal_vnom_cm where sters = 0] + lcCursor = [v_nomtipcm] + lnSucces = goExecutor.oExecute(lcSelect, lcCursor) + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare) + Return + Endif + Select v_nomtipcm + Scatter Name loRec Blank + *!* DEBUG + *!* SUSPEND + Do Adauga_Modifica_Inregistrare With "nomcm", loRec, , "INSERT", , "addcm" +Endproc + +************************************************************************************************************************** +Procedure adrese_parteneri_nou + Lparameters tnIdPartener, tcActiune, tcCursor + *!* modificare adrese parteneri 12.2013 : am adaugat tcActiune, tcCursor, lcActiune + Local lcSelect, lcCursor, lnSucces, loRec, lnidpartener, lnPrincipala, lcActiune + Private pnIdAdresa + pnIdAdresa = 0 + + If Pcount() = 0 Or Type('tnIdPartener') # 'N' + lnidpartener = 0 + Else + lnidpartener = tnIdPartener + Endif + *!* modificare adrese parteneri 12.2013 + gnButon = 1 + lcActiune = Evl(tcActiune, "INSERT") + lcCursor = "crsAdreseTemp" + If lcActiune = "LOCAL" + Select * From (tcCursor) With (Buffering = .T.) Where principala = 1 And !Deleted() Into Cursor (lcCursor) + Else + lcSelect = "SELECT * FROM vadrese_parteneri where principala = 1 and id_part = " + Transform(lnidpartener) + If !goExecutor.oExecuta(lcSelect, lcCursor) + gnButon = 2 + Endif + Endif + If gnButon = 1 + If Reccount(lcCursor) = 0 + lnPrincipala = 1 + Else + lnPrincipala = 0 + Endif + Select (lcCursor) + Scatter Name loRec Blank + Use In (lcCursor) + + loRec.id_part = tnIdPartener + loRec.principala = lnPrincipala + + Do Adauga_Modifica_Inregistrare With "parteneri_adrese", loRec, , lcActiune In oproceduri_ams.prg + Endif + *!* lcSelect = "SELECT * FROM vadrese_parteneri where principala = 1 and id_part = " + Transform(lnidpartener) + *!* lcCursor = "crsAdreseTemp" + *!* If goExecutor.oExecuta(lcSelect, lcCursor) + *!* If Reccount('crsAdreseTemp') = 0 + *!* lnPrincipala = 1 + *!* Else + *!* lnPrincipala = 0 + *!* Endif + *!* Select crsAdreseTemp + *!* Scatter Name loRec Blank + *!* Use In crsAdreseTemp + *!* loRec.id_part = tnIdPartener + *!* loRec.principala = lnPrincipala + *!* Do Adauga_Modifica_Inregistrare With "parteneri_adrese",loRec,,"INSERT" In oproceduri_ams.prg + *!* Else + *!* gnButon = 2 + *!* Endif + *!* modificare adrese parteneri 12.2013 ^ + + If gnButon = 1 + loRec.id_adresa = pnIdAdresa + Return loRec + Else + Return Null + Endif + +Endproc && adrese_parteneri_nou + +************************************************************************************************************************** +Procedure coduri_parteneri_nou + Lparameters tnIdPartener + + Local lcSelect, lcCursor, lnSucces, loRec, lnidpartener, lnPrincipala + Private pnIdAdresa + pnIdAdresa = 0 + + If Pcount() = 0 Or Type('tnIdPartener') # 'N' + lnidpartener = 0 + Else + lnidpartener = tnIdPartener + Endif + lcSelect = "SELECT * FROM parteneri_coduri where id_part = " + Transform(lnidpartener) + lcCursor = "crsCoduriTemp" + lnSucces = goExecutor.oExecute(lcSelect, lcCursor) + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare) + Return + Endif + + Select crsCoduriTemp + Scatter Name loRec Blank + Use In crsCoduriTemp + + loRec.id_part = tnIdPartener + + Do Adauga_Modifica_Inregistrare With "coduri", loRec, , "INSERT" In oproceduri_ams.prg + + If gnButon = 1 + Return loRec + Else + Return Null + Endif + +Endproc && coduri_parteneri_nou +************************************************************************************************************************** +Procedure coduri_parteneri_modifica + Lparameters tnIdCod + + Local lcSelect, lcCursor, lnSucces, loRec + + lcSelect = "SELECT * FROM parteneri_coduri where id = " + Transform(tnIdCod) + lcCursor = "crsCoduriTemp" + lnSucces = goExecutor.oExecute(lcSelect, lcCursor) + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare) + Return + Endif + Select crsCoduriTemp + Scatter Name loRec + Use In crsCoduriTemp + + Do Adauga_Modifica_Inregistrare With "coduri", loRec, tnIdCod, "UPDATE" In oproceduri_ams.prg + + If gnButon = 1 + Return loRec + Else + Return Null + Endif + +Endproc && coduri_parteneri_modifica +************************************************************* +************************************************************************************************************************** +Procedure adrese_parteneri_modifica + Lparameters tnIdAdresa, tcActiune, tcCursor + *!* modificare adrese parteneri 12.2013 : am adaugat tcActiune, tcCursor + Local lcSelect, lcCursor, lnSucces, loRec, lcActiune + + *!* modificare adrese parteneri 12.2013 + gnButon = 1 + lcActiune = Evl(tcActiune, "UPDATE") + lcCursor = Evl(tcCursor, "crsAdreseTemp") + If lcActiune = [UPDATE] + lcSelect = "SELECT * FROM vadrese_parteneri where id_adresa = " + Transform(tnIdAdresa) + If !goExecutor.oExecuta(lcSelect, lcCursor) + gnButon = 2 + Endif + Endif + + If gnButon = 1 + Select (lcCursor) + Scatter Name loRec + Do Adauga_Modifica_Inregistrare With "parteneri_adrese", loRec, tnIdAdresa, lcActiune In oproceduri_ams.prg + If lcActiune = [UPDATE] + Use In (Select(lcCursor)) + Endif + Endif + *!* lcSelect = "SELECT * FROM vadrese_parteneri where id_adresa = " + Transform(tnIdAdresa) + *!* lcCursor = "crsAdreseTemp" + *!* lnSucces = goExecutor.oExecute(lcSelect, lcCursor) + *!* If lnSucces < 0 + *!* amessagebox(goExecutor.cEroare) + *!* Return + *!* Endif + *!* Select crsAdreseTemp + *!* Scatter Name loRec + *!* Use In crsAdreseTemp + *!* =cclocalitati() + *!* =ccJudete() + *!* =ccTari() + *!* Do Adauga_Modifica_Inregistrare With "parteneri_adrese",loRec,tnIdAdresa,"UPDATE" In oproceduri_ams.prg + *!* =close_cclocalitati() + *!* =close_ccJudete() + *!* =close_ccTari() + *!* modificare adrese parteneri 12.2013 ^ + If gnButon = 1 + Return loRec + Else + Return Null + Endif +Endproc && adrese_parteneri_modifica +************************************************************* +Procedure contracte_nou + Parameters tnId_Part, tnIdTip, tnId + LOCAL lnButon, llSucces, lcSchema, lcSelect, lcOrder, lcFiltru, lcAfiseaza + + Private pnId_part, pnId_tip_ctr + If !Empty(tnId_Part) + pnId_part = tnId_Part + Else + pnId_part = 0 + ENDIF + + pnId_tip_ctr = IIF(!EMPTY(m.tnIdTip), m.tnIdTip, 0) + + Private poContracte, pcschema1, pcselect1 + Store '' To poContracte + lcschema = [''] + lcselect = ['select * from vcontracte where 1=2'] + lcorder = [denumire,data,numar] + lcfiltru = [1=2] + llAfiseaza = .F. + gencursor('poContracte', 'v_contracte_nou', m.lcSelect, m.lcFiltru, m.lcSchema, m.lcOrder, m.llAfiseaza) + poContracte.ca_baza1.afisare() + *** + Select v_contracte_nou + Scatter Name loRec Blank + AddProperty(loRec, "numar2", "") + If Type('loRec.curs') = 'U' + AddProperty(loRec, "curs", 0) + Endif + loRec.tip_istoric = [C] + loRec.Data = Date() + loRec.data_inceput = {} + loRec.data_sfarsit = {} + loRec.id_part = pnId_part && modificare 11.04.2012 + + lnButon = Adauga_Modifica_Inregistrare('contract', loRec, @tnId, "INSERT") && In oproceduri_ams.prg + llSucces = (m.lnButon = 1) + + Use In v_contracte_nou + RETURN m.llSucces +Endproc && contracte_nou +************************************************************* +Procedure nom_lucrari_detalii_nou + Private pniesire, pcNrOrd + Local loRec, lnSucces, lcSelect + Store [] To pcNrOrd + pniesire = 0 + + lcSelect = [select * from ] + gcS + [.vlucrari_detalii where 1=2] + lcCursor = [crsLucrariDetaliiTemp] + lnSucces = goExecutor.oExecute(lcSelect, lcCursor) + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare, 0 + 16, 'Eroare') + Return Null + Endif + + Select (lcCursor) + Scatter Name loRec + Use In (lcCursor) + goExecutor.oFunction2Value([pack_comenzi.genereaza_nr_lucrare], @pcNrOrd) + loRec.nrord = pcNrOrd + loRec.data_lucrare = get_ora() + Do Adauga_Modifica_Inregistrare With 'lucrari_detalii', loRec, , "INSERT" + + If gnButon = 1 + Return loRec + Else + Return Null + Endif +Endproc +************************************************************* +Procedure nom_masini_nou + Local loRec, lnSucces, lcSelect + + lcSelect = [select * from ] + gcS + [.vnom_masini where 1=2] + lcCursor = [crsMasiniTemp] + lnSucces = goExecutor.oExecute(lcSelect, lcCursor) + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare, 0 + 16, 'Eroare') + Return Null + Endif + + Select (lcCursor) + Scatter Name loRec + Do Adauga_Modifica_Inregistrare With 'masini', loRec, , "INSERT" + Use In (lcCursor) + + If gnButon = 1 + Return loRec + Else + Return Null + Endif +Endproc +************************************************************* +****************************************************************************************************************** +Procedure viz_tipuri_ctr + + Private poTipuri_ctr + Store '' To poTipuri_ctr + + Local lcSchema, lcSelect, lcOrder, lcgroup, lcFiltru, lcFiltruOriginal, llModParam, llAfiseaza + + lcSchema = [id_tip_ctr N(4), denumire_tip C(50), system N(1), id_tata N(4), tip_sup C(200)] + lcSelect = [select id_tip_ctr, denumire_tip, system, id_tata, TRIM(SUBSTR(tata,1,INSTR(tata,CHR(92),1,nivel)-1)) as tip_sup from vtipuri_contracte ] + lcOrder = [denumire_tip] + lcgroup = [] + lcFiltru = [1=2] + Do Case + Case gnParametru_prog = 1 + lcFiltruOriginal = [substr(tata,2,6)='CLIENT'] + Case gnParametru_prog = 2 + lcFiltruOriginal = [substr(tata,2,6)='FURNIZ'] + Endcase + + llModParam = .T. + llAfiseaza = .F. + + gencursor('poTipuri_ctr', 'cTipuri_ctr', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal) + poTipuri_ctr.ca_baza1.afisare() + + Select cTipuri_ctr + ofrm_t_ctr = Createobject('frm_tipuri_ctr') + ofrm_t_ctr.Show(1) + Release poTipuri_ctr + +Endproc && viz_tipuri_ctr +****************************************************************************************************************** + + +Procedure nom_calculatoare_nou + + Private poCalculatoare + Local lcSchema, lcSelect, lcFiltru, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal + Store '' To poCalculatoare + + lcSchema = [] + lcSelect = [select * from vcalculatoare] + lcOrder = [sucursala, denumire] + lcFiltru = [] + llAfiseaza = .F. + lcgroup = "" + llModParam = .T. + lcFiltruOriginal = [] + + gencursor('poCalculatoare', 'crsCalcNou', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal) + poCalculatoare.ca_baza1.afisare() + + *** + Select crsCalcNou + Scatter Name loRec Blank + Use In crsCalcNou + + = ccsucursale() + + Do Adauga_Modifica_Inregistrare With 'calc', loRec, , "INSERT" + + = close_ccsucursale() +Endproc + + +*!* 18.09.2006 +*!* MARIUS.MUTU +Procedure nom_calculatoare_modifica + Parameters tnIdCalculator + + Local loRec, lnSucces, lcSelect + loRec = Null + + If Empty(tnIdCalculator) Or Type('tnIdCalculator') # 'N' Or Isnull(tnIdCalculator) + Return loRec + Endif + + + lcSelect = [select * from vcalculatoare where id_calc = ?tnIdCalculator] + lcCursor = [crsCalculatoareTemp] + lnSucces = goExecutor.oExecute(lcSelect, lcCursor) + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare, 0 + 16, 'Eroare') + Return loRec + Endif + + Select (lcCursor) + Scatter Name loRec + Use In (lcCursor) + + = ccsucursale() + + Select vnom_sucursale + Locate For id_sucursala = loRec.id_sucursala + If Found() + loRec.sucursala = vnom_sucursale.sucursala + Endif + + Do Adauga_Modifica_Inregistrare With 'calc', loRec, loRec.id_calc, "UPDATE" + + = close_ccsucursale() + + If gnButon = 1 + Return loRec + Else + Return Null + Endif + +Endproc && nom_calculatoare_modifica +***====================================================================================== + +***====================================================================================== +Procedure utilizatorintern_nou + + Private poUtilizatori + Local lcSchema, lcSelect, lcFiltru, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal + Store '' To poUtilizatori + + lcSchema = [] + lcSelect = [select * from vutilizatori_rol_intern] + lcOrder = [sucursala, denumire_grup, utilizator] + lcFiltru = [1=2] + llAfiseaza = .F. + lcgroup = "" + llModParam = .T. + lcFiltruOriginal = [] + + gencursor('poUtilizatori', 'crsUtilNou', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal) + poUtilizatori.ca_baza1.afisare() + + *** + Select crsUtilNou + Scatter Name loRec Blank + Use In crsUtilNou + + = ccsucursale() + = ccutilizatori() + = ccgrupuri_utilizatori() + + Do Adauga_Modifica_Inregistrare With 'utilizatori', loRec, , "INSERT" + + = close_ccsucursale() + = close_ccgrupuri_utilizatori() + = close_ccutilizatori() + +Endproc && utilizatorintern_nou +***====================================================================================== + +*!* 18.09.2006 +*!* MARIUS.MUTU +Procedure utilizatorintern_modifica + Parameters tnIdUtil + + Local loRec, lnSucces, lcSelect, lcCursor + loRec = Null + + If Empty(tnIdUtil) Or Type('tnIdUtil') # 'N' Or Isnull(tnIdUtil) + Return loRec + Endif + + + lcSelect = [select * from vutilizatori_rol_intern where id_util = ?tnIdUtil] + lcCursor = [crsUtilizatoriTemp] + lnSucces = goExecutor.oExecute(lcSelect, lcCursor) + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare, 0 + 16, 'Eroare') + Return loRec + Endif + + Select (lcCursor) + Scatter Name loRec + Use In (lcCursor) + + = ccsucursale() + = ccutilizatori() + = ccgrupuri_utilizatori() + + Select vnom_sucursale + Locate For id_sucursala = loRec.id_sucursala + If Found() + loRec.sucursala = vnom_sucursale.sucursala + Endif + + Select vutilizatori + Locate For id_util = loRec.id_util + If Found() + loRec.utilizator = vutilizatori.utilizator + Endif + + Select vgrupuri_utilizatori + Locate For id_grup = loRec.id_grup + If Found() + loRec.denumire_grup = vgrupuri_utilizatori.denumire_grup + Endif + + Do Adauga_Modifica_Inregistrare With 'utilizatori', loRec, loRec.id_util, "UPDATE" + + = close_ccsucursale() + = close_ccgrupuri_utilizatori() + = close_ccutilizatori() + + If gnButon = 1 + Return loRec + Else + Return Null + Endif + +Endproc && utilizatorintern_modifica +***====================================================================================== + +Procedure sal_modlic_nou + + Private pomodlic, pcschema1, pcselect1 + Store '' To pomodlic + pcschema1 = [''] + pcselect1 = ['select * from ] + gcS + [.sal_nom_modlic where 1=2'] + pcorder1 = [modlic] + pcfiltru1 = [2=2] + llAfiseaza = .F. + gencursor('pomodlic', 'v_modlic_nou', pcselect1, pcfiltru1, pcschema1, pcorder1, llAfiseaza) + pomodlic.ca_baza1.afisare() + *** + Select v_modlic_nou + Scatter Name loRec Blank + Do Adauga_Modifica_Inregistrare With 'modlic', loRec, , "INSERT" + Use In v_modlic_nou + +Endproc +************************************************************* + + +* PROCEDURE viz_plafon_casa( Tcs ) +* Date : 04/04/06, 11:22:25 +* author : georgiana.voicu +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 1 +* Parameter 1: +* +******************************************* INCEPUT: viz_plafon_casa ******************************************* +Procedure viz_plafon_casa(tcS, tnAn, tnLuna) + + Local lnSucces, lcS + If Empty(tcS) + lcS = "CONTAFIN_ORACLE" + Else + lcS = tcS + Endif + lnAn = Iif(Empty(tnAn), gnan, tnAn) + lnLuna = Iif(Empty(tnLuna), gnLuna, tnLuna) + + Private pcot, pcschema1, pcselect1 + Store '' To pcot + pcschema1 = [''] + pcselect1 = ['select id_calendar, luna, anul, plafon_casa, plafon_plati, plafon_furnizori from ] + lcS + [.calendar where 1=2'] + pcfiltru1 = [ anul = ?lnAn and luna = ?lnluna] + pcorder1 = [anul, luna] + gencursor('pcot', 'v_plafon', pcselect1, pcfiltru1, pcschema1, pcorder1) + pcot.ca_baza1.afisare() + ofrmpc = Createobject('frm_plafon_casa') + ofrmpc.ogencursor = pcot + ofrmpc.ctabel = 'v_plafon' + ofrmpc.Show(1) + Release ofrmpc + If Used('v_plafon') + Use In v_plafon + Endif + +Endproc +******************************************* SFARSIT: viz_plafon_casa ******************************************* +************************************************************* +Procedure nom_sallucrari_nou + Local loRec, lnSucces, lcSelect, lcCursor + + lcSelect = [select * from ] + gcS + [.sal_vnom_lucrari where 1=2] + lcCursor = [crsLucrariTemp] + lnSucces = goExecutor.oExecute(lcSelect, lcCursor) + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare, 0 + 16, 'Eroare') + Return Null + Endif + + Select (lcCursor) + Scatter Name loRec + AddProperty(loRec, "nume_parinte", "") + Do Adauga_Modifica_Inregistrare With "sal_lucrari", loRec, , "INSERT", , "addcluc" + If Used(lcCursor) + Use In (lcCursor) + Endif + + If gnButon = 1 + Return loRec + Else + Return Null + Endif +Endproc +***====================================================================================== +***====================================================================================== + +Procedure sal_tipctr_nou + + Private poctr, pcschema1, pcselect1 + + Store '' To poctr + pcschema1 = [''] + pcselect1 = ['select * from ] + gcS + [.sal_nom_tipctr where 1=2'] + pcorder1 = [tip_contract] + pcfiltru1 = [2=2] + llAfiseaza = .F. + gencursor('poctr', 'v_ctr_nou', pcselect1, pcfiltru1, pcschema1, pcorder1, llAfiseaza) + poctr.ca_baza1.afisare() + *** + + Do update_ore In update_roadef_sal.prg + Select v_ctr_nou + Scatter Name loRec Blank + AddProperty(loRec, 'ore', '') + Do Adauga_Modifica_Inregistrare With 'tipctr', loRec, , "INSERT" + Use In v_ctr_nou + Use In v_nomore + + +Endproc +***====================================================================================== + + +*!* 24.10.2006 +*!* MARIUS.MUTU +***====================================================================================== +Procedure calcsetare_nou + + Private poCalcSetare + Local lcSchema, lcSelect, lcFiltru, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal + poCalcSetare = Null + + lcSchema = [] + lcSelect = [select id_calcsetare, id_calc, calculator, setare, explicatia, valoare, valoare_text, tip, tabel, coloane, titlucoloane, idcoloana, resultcoloana, titlu from vcalc_setari] + lcOrder = [] + lcFiltru = [1=2] + llAfiseaza = .F. + lcgroup = "" + llModParam = .T. + lcFiltruOriginal = [] + + gencursor('poCalcSetare', 'crsCalcSetareNou', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal) + poCalcSetare.ca_baza1.afisare() + + *** + Select crsCalcSetareNou + Scatter Name loRec Memo Blank + Use In crsCalcSetareNou + + = cccalculatoare() + = ccsetari() + + Do Adauga_Modifica_Inregistrare With 'calcsetari', loRec, , "INSERT" + + = close_cccalculatoare() + = close_ccsetari() + +Endproc && calcsetare_nou + +***====================================================================================== +Procedure calcsetare_modifica + Parameters tnIdCalcSetare + + Local loRec, lnSucces, lcSelect, lcCursor + loRec = Null + + If Empty(tnIdCalcSetare) Or Type('tnIdCalcSetare') # 'N' Or Isnull(tnIdCalcSetare) + Return loRec + Endif + + lcSelect = [select id_calcsetare, id_calc, calculator, setare, explicatia, valoare, valoare_text, tip, tabel, coloane, titlucoloane, idcoloana, resultcoloana, titlu from vcalc_setari where id_calcsetare = ?tnIdCalcSetare] + lcCursor = [crsCalcSetareTemp] + lnSucces = goExecutor.oExecute(lcSelect, lcCursor) + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare, 0 + 16, 'Eroare') + Return loRec + Endif + + Select (lcCursor) + Scatter Name loRec Memo + Use In (lcCursor) + + = cccalculatoare() + = ccsetari() + + Select vcalculatoare + Locate For id_calc = loRec.id_calc + If Found() + loRec.calculator = vcalculatoare.denumire + Endif + + Select vsetari + Locate For setare = loRec.setare + If Found() + loRec.setare = vsetari.setare + Endif + + Do Adauga_Modifica_Inregistrare With 'calcsetari', loRec, loRec.id_calcsetare, "UPDATE" + + = close_cccalculatoare() + = close_ccsetari() + + If gnButon = 1 + Return loRec + Else + Return Null + Endif + +Endproc && calcsetare_modifica +***====================================================================================== + +Procedure nom_medii_transmisie_nou + + Private poMediu_transmisie, pcschema1, pcselect1 + Store '' To poMediu_transmisie + pcschema1 = [''] + pcselect1 = ['select * from vnom_medii_transmisie where 1=2'] + pcorder1 = [mediu_transmisie] + pcfiltru1 = [2=2] + llAfiseaza = .F. + gencursor('poMediu_transmisie', 'v_mediu_transmisie_nou', pcselect1, pcfiltru1, pcschema1, pcorder1, llAfiseaza) + poMediu_transmisie.ca_baza1.afisare() + *** + Select v_mediu_transmisie_nou + Scatter Name loRec Blank + Do Adauga_Modifica_Inregistrare With 'medii_transmisie', loRec, , "INSERT" + Use In v_mediu_transmisie_nou + +Endproc +***====================================================================================== +******************************************* INCEPUT:viz_medii_transmisie ******************************************* +Procedure viz_medii_transmisie( ) + + Private poMediu_transmisie, pcschema1, pcselect1 + Store '' To poMediu_transmisie + pcschema1 = [] + pcselect1 = [select id_mediu, mediu_transmisie from vnom_medii_transmisie] + pcorder1 = [mediu_transmisie] + pcfiltru1 = [] + llAfiseaza = .F. + lcgroup = [] + lcFiltruOriginal = [] + llModParam = .T. + gencursor('poMediu_transmisie', 'v_medii_transmisie', pcselect1, pcfiltru1, pcschema1, pcorder1, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal) + poMediu_transmisie.ca_baza1.afisare() + ofrmMT = Createobject('frm_medii_transmisie') + ofrmMT.Show(1) + Release poMediu_transmisie + +Endproc +******************************************* SFARSIT: viz_medii_transmisie ******************************************* + +Procedure viz_marci( ) + + Private pomarca, pcschema1, pcselect1 + Store '' To pomarca + pcschema1 = [''] + pcselect1 = ['select * from ] + gcS + [.vnom_marci_masini where 1=2'] + pcorder1 = [marca_masina] + pcfiltru1 = [2=2] + llAfiseaza = .F. + gencursor('pomarca', 'v_marci', pcselect1, pcfiltru1, pcschema1, pcorder1, llAfiseaza) + pomarca.ca_baza1.afisare() + ofrmmarca = Createobject('frm_marci') + ofrmmarca.Show(1) + Release pomarca + +Endproc + +Procedure viz_modele( ) + + Private pomodel, pcschema1, pcselect1 + Store '' To pomodel + pcschema1 = [''] + pcselect1 = ['select * from ] + gcS + [.vnom_modele_masini where 1=2'] + pcorder1 = [model_masina] + pcfiltru1 = [2=2] + llAfiseaza = .F. + gencursor('pomodel', 'v_modele', pcselect1, pcfiltru1, pcschema1, pcorder1, llAfiseaza) + pomodel.ca_baza1.afisare() + ofrmmodel = Createobject('frm_modele') + ofrmmodel.Show(1) + Release pomodel + +Endproc + +Procedure vizualizare_soferi + Do vizualizare_partener With gnIdTipSoferi, "Soferi", 2 +Endproc + + + + + +Procedure nom_nomrute_nou + + Private pofdoc, pcschema1, pcselect1 + Store '' To pofdoc + pcschema1 = [''] + pcselect1 = ['select * from ] + gcS + [.fact_vnom_rute where 1=2'] + pcorder1 = [ruta] + pcfiltru1 = [sters = 0 ] + llAfiseaza = .F. + gencursor('pofdoc', 'v_rute', pcselect1, pcfiltru1, pcschema1, pcorder1, llAfiseaza) + pofdoc.ca_baza1.afisare() + *** + Select v_rute + Scatter Name loRec Blank + Do Adauga_Modifica_Inregistrare With 'nomrute', loRec, , "INSERT" + Use In v_rute + +Endproc +************************************************************* +Procedure proiecte_nou + Parameters tnId_Part + + Local lcSelect, lcFiltru, lcSchema, lcOrder, llAfisare, lcgroup, llModParam, lcFiltruOriginal + Private poProiecte + Store '' To poProiecte + + Private pnId_part + If !Empty(tnId_Part) + pnId_part = tnId_Part + Else + pnId_part = 0 + Endif + + + lcSchema = [] + lcSelect = [select * from con_vproiecte] + lcOrder = [denumire] + lcFiltru = [1=2] + llAfisare = .F. + lcgroup = [] + llModParam = .T. + lcFiltruOriginal = [] + gencursor('poProiecte', 'v_proiecte_nou', lcSelect, lcFiltru, lcSchema, lcOrder, llAfisare, lcgroup, llModParam, lcFiltruOriginal) + poProiecte.ca_baza1.afisare() + *** + + Select v_proiecte_nou + Scatter Name loRec Blank Memo + loRec.Data_proiect = Date() + AddProperty(loRec, 'id_responsabil', 0) + AddProperty(loRec, 'responsabil', '') + AddProperty(loRec, 'id_modelproiect', 0) + AddProperty(loRec, 'modelproiect', '') + + Do Adauga_Modifica_Inregistrare With 'proiecte', loRec, , "INSERT" In oproceduri_ams.prg + Use In v_proiecte_nou + +Endproc && proiecte_nou +************************************************************* + + +************************************************************* +*** se apeleaza din cauta_alfa_form, butonul but_verifica +************************************************************* +Procedure nom_parteneri_verifica + Lparameters toPartener + + Local loDate As "empty" + Local lcCodFiscal, lcDenumire, ldDataAct, lnOptiune, lnRaspuns, loPartener + lcCodFiscal = Alltrim(Transform(toPartener.cod_fiscal)) + lcDenumire = Upper(Alltrim(Transform(toPartener.denumire))) + ldDataAct = Iif(Type('toPartener.dataact') = 'D', toPartener.dataact, Date()) + + lnOptiune = 0 + loPartener = Null + loDate = Createobject("empty") + AddProperty(loDate, "denumire", m.lcDenumire) + AddProperty(loDate, "cod_fiscal", m.lcCodFiscal) + AddProperty(loDate, "data", m.ldDataAct) + lnRaspuns = VerificaCodFiscal(loDate, @lnOptiune, @loPartener) +Endproc && nom_parteneri_verifica + + +*** se apeleaza din cauta_alfa_form, butonul but_verifica +Procedure nom_parteneri_verifica_old + Lparameters toPartener + *!* Lparameters tlValidare && execut doar validarea codului + + Local loVerificare As "verificarecod" + Local lcCod, lcDenumire, lcEroare, lcText, lcXml, llIsCIF, llPlatitorTva, llValid, llValidare + Local loPartener + llValidare = .F. + + loVerificare = Createobject("verificarecod") && validare.prg + + lcCod = Alltrim(Transform(toPartener.cod_fiscal)) + lcDenumire = Upper(Alltrim(Transform(toPartener.denumire))) + If Empty(m.lcCod) + Return + Endif + llIsCIF = loVerificare.ISCIF(m.lcCod) + + *!* VERIFIC VALIDITATEA CODULUI + If llIsCIF + llValid = loVerificare.Validare('CIF', m.lcCod) + Else + llValid = loVerificare.Validare('CNP', m.lcCod) + Endif + + If llValidare && se verifica doar validitatea codului + Return llValid + Endif + + If !m.llValid + AMESSAGEBOX('Codul ' + m.lcCod + ' este ' + Iif(llValid, 'valid.', 'invalid.'), 0 + 48, _Screen.Caption) + Else + *!* DOAR PENTRU CIF-URI VERIFIC DENUMIREA, REG_COMERT, CALITATEA DE PLATITOR TVA + If llIsCIF + lcXml = loVerificare.Verificare('CIF', m.lcCod, 'MFINVIES') + If Type('loVerificare.oEntitate') = 'O' + loPartener = loVerificare.oEntitate + llPlatitorTva = loPartener.platitortva + lcEroare = loPartener.eroare + If !Empty(loPartener.eroare) + AMESSAGEBOX(loPartener.eroare, 0 + 48, _Screen.Caption) + Else + lcText = 'VERIFICARE CIF: ' + m.lcCod + ' ' + m.lcDenumire + CRLF + CRLF + ; + Alltrim(loPartener.firma) + CRLF + ; + Iif((loPartener.platitortvamfin And Left(m.lcCod, 2) <> 'RO') Or (!loPartener.platitortvamfin And Left(m.lcCod, 2) = 'RO'), ' *** ATENTIE *** ', '') + ; + Iif(loPartener.platitortvamfin, "PLATITOR TVA (" + Alltrim(loPartener.datatvamfin) + ")", "NEPLATITOR TVA") + CRLF + ; + Iif(loPartener.VIES, Iif(loPartener.platitortva, 'PLATITOR TVA VIES', 'NEPLATITOR TVA VIES'), 'Nu s-a interogat VIES.') + CRLF + ; + 'Stare: ' + Alltrim(loPartener.stare) + CRLF + ; + '----------------------------------------------------' + CRLF + ; + '* Adresa: ' + Alltrim(loPartener.adresa) + CRLF + ; + '* Judet: ' + loPartener.judet + CRLF + ; + '* Nr. inregistrare la Registrul Comertului: ' + loPartener.regcom + CRLF + ; + '* Cod Postal: ' + loPartener.codpostal + CRLF + ; + '* Telefon: ' + loPartener.telefon + CRLF + ; + '* Fax: ' + loPartener.fax + CRLF + CRLF + CRLF + + AMESSAGEBOX(lcText, 0 + 64, _Screen.Caption) + Endif + Endif + Endif && llIsCIF + Endif && !llValid + + Return m.llValid +Endproc && nom_parteneri_verifica + +************************************************************* +*** se apeleaza din cauta_alfa_form, butonul but_copiaza +Procedure nom_parteneri_copiaza + Lparameters toPartener, tnIdTipPart, tnTipPersoana, tnSpecial, tcTipPart + + Local lcTipPart, lnIdPart, lnIdPartCoresp, lnIdTipPart, lnSpecial, lnTipPersoana, loDate + lnIdTipPart = Iif(Empty(tnIdTipPart), 0, tnIdTipPart) + lcTipPart = Iif(Empty(Nvl(tcTipPart, [])), '', tcTipPart) + lnSpecial = Iif(Empty(tnSpecial), 0, tnSpecial) + lnTipPersoana = Iif(Empty(tnTipPersoana), 0, tnTipPersoana) + lnIdPartCoresp = 0 + loDate = Null + lnIdPart = Nvl(toPartener.id_part, 0) + + If Empty(m.lnIdPart) + Return 2 + Endif + + Do nom_parteneri_nou With m.lnIdTipPart, m.lcTipPart, m.lnSpecial, m.lnTipPersoana, m.lnIdPartCoresp, m.loDate, m.lnIdPart + + Return gnButon +Endproc && nom_parteneri_copiaza +************************************************************************************************************************** +Procedure NOM_LIMBI_NOU + Local loRec + Store '' To loRec + loRec = poRec + + Do Adauga_Modifica_Inregistrare With "nom_limbi", loRec, , "INSERT", , "addlimba" +Endproc +************************************************************************************************************************** +************************************************************************************************************************** +Procedure NOM_cursuri_NOU + Local loRec + Store '' To loRec + loRec = poRec + + Do Adauga_Modifica_Inregistrare With "curscal", loRec, , "INSERT", , "addnomcurs" +Endproc +************************************************************************************************************************** \ No newline at end of file diff --git a/COMUN/programe/onomenclatoare2.prg b/COMUN/programe/onomenclatoare2.prg new file mode 100644 index 0000000..72c8463 --- /dev/null +++ b/COMUN/programe/onomenclatoare2.prg @@ -0,0 +1,59 @@ +*************************************************************************************************************** +**** Proceduri: +**** vizualizare_masini +*************************************************************************************************************** +******************************************* INCEPUT: vizualizare_masini ******************************************* +Procedure vizualizare_masini +gcAcces=[1;2;3;4;] +Private pomasini +Local lcSchema,lcSelect,lcOrder,lcFiltru,llAfiseaza +Store '' To pomasini +lcSchema=[''] +lcSelect=['select * from ] + gcS + [.vnom_masini where 1=2'] +lcOrder=[nrinmat] +lcFiltru = [1=2] +llAfiseaza = .F. +gencursor('pomasini','crsmasini',lcSelect,lcFiltru,lcSchema,lcOrder,llAfiseaza) +pomasini.ca_baza1.afisare() +ofrmmasini=Createobject('frm_masini') +ofrmmasini.Show(1) +Release pomasini,ofrmmasini + +Endproc +******************************************* SFARSIT: vizualizare_masini ******************************************* + + +Procedure vizualizare_RUTE +Private pomasini +Local lcSchema,lcSelect,lcOrder,lcFiltru,llAfiseaza +Store '' To poRUTE +lcSchema=[''] +lcSelect=['select * from FACT_VNOM_RUTEgest where 2=2'] +lcOrder=[ruta,ORDINE] +lcFiltru = [2=2] +llAfiseaza = .F. +gencursor('poRUTE','crsRUTE',lcSelect,lcFiltru,lcSchema,lcOrder,llAfiseaza) +poRUTE.ca_baza1.afisare() +ofrmRUTE=Createobject('frm_RUTE') +ofrmRUTE.Show(1) +Release poRUTE,ofrmRUTE + +EndProc +*--------------------------------------------------------------------- + +Procedure vizualizare_nomRUTE +Private ponomrute +Local lcSchema,lcSelect,lcOrder,lcFiltru,llAfiseaza +Store '' To ponomrute +lcSchema=[''] +lcSelect=['select * from FACT_VNOM_RUTE where 2=2'] +lcOrder=[ruta] +lcFiltru = [2=2] +llAfiseaza = .F. +gencursor('ponomrute','crsnomRUTE',lcSelect,lcFiltru,lcSchema,lcOrder,llAfiseaza) +ponomrute.ca_baza1.afisare() +ofrmRUTE=Createobject('frm_nomRUTE') +ofrmRUTE.Show(1) +Release ponomrute,ofrmRUTE + +Endproc \ No newline at end of file diff --git a/COMUN/programe/ooperatii_comune.prg b/COMUN/programe/ooperatii_comune.prg new file mode 100644 index 0000000..ca6f332 --- /dev/null +++ b/COMUN/programe/ooperatii_comune.prg @@ -0,0 +1,2017 @@ +*!* 24.01.2011 +*!* marius.mutu +*!* viz_balanta_contabilitate - balanta cumulata + +*!* 07.11.2011 +*!* marius.mutu +*!* aleg_document_pereche +*!* conditie sucursala si analitic + +*!* 22.04.2020 +*!* verificare_note_contabile - se repun documente.sters = 0 daca s-a folosit id_fact pentru pereche si este sters in documente +*!* din diferite motive in documente se marcheaza sters documente care exista inca??? + +*!* 26.01.2021 +*!* viz_act - am adaugat cont_bancad si cont_bancac + +*!* 15.09.2021 +*!* verific_analitic - acont_alt, explicatie_alt + +******************************** INCEPUT: viz_act ******************************** +Procedure viz_act + Lparameters tnCurs,tcValuta + + *** verificare INAINTE_DE + Do inainte With "ACT" In oinainte_de.prg + + *** creez cursorul actjur fara date + Private poactjur,ACTJUR,poact,act,porull,rull + Store '' To poactjur,poact,porull + + *!* 24.03.2008 + *!* If m.nivel=0 + *!* If At([6;],gcAcces)>0 + pcschema=['SERIE_ACT C(10),ID_ACT N(20),LUNA N(2),AN N(4),COD N(20),DATAIREG D,nract N(20),DATAACT D,'+]+; + ['EXPLICATIA C(100),SCD C(4),ASCD C(4),SCC C(4),ASCC C(4),SUMA N(20,gnPC),PERECHED N(14),DATAACTD D,'+]+; + ['PERECHEC N(14),DATAACTC D,SUMA_VAL N(20,gnPval),ID_VALUTA N(5),NUME_VAL C(5),CURS N(10,gnPcurs2),DATASCAD D,NEIMPOZAB N(20,gnPC),'+]+; + ['NNIR N(14),ID_UTIL N(5),UTIL C(30),DATAORA T,ID_UTILS N(5),UTILS C(30),DATAORAS T,'+]+; + ['ID_RESPONSABIL N(5),NRESP C(30),ID_VENCHELT N(5),DST_CHLT C(100),ID_LUCRARE N(5),NRORD C(50),ID_CTR N(5), CONTRACT C(30),'+]+; + ['ID_SECTIE N(5),SECTIE C(30),PROC_TVA N(5,2),ID_SET N(20),ID_FACT N(20),ID_PARTD N(10),PARTD C(50),COD_FISCALD C(30), ID_PARTC N(10),'+]+; + ['PARTC C(50), COD_FISCALC C(30),ID_SUCURSALA N(5),SUCURSALA C(50),STERS N(1),ID_FDOC N(5),FDOC C(30),EXPLICATIE_TVA C(100),ID_JTVA_COLOANA N(4),'+]+; + ['EXPLICATIA4 C(100),EXPLICATIA5 C(100),ID_GESTIN N(5),GESTIN C(50),ID_GESTOUT N(5),GESTOUT C(50),ID_FACTD N(20),ID_FACTC N(20),'+]+; + ['VALIDAT N(1),ID_UTILV N(5), UTILV C(30), DATAORAV T,CONT_BANCAD C(50),BANCAD C(5),CONT_BANCAC C(50), BANCAC C(50), '+]+; + ['TAXCODE N(6), TAXNAME C(250), SAFT_DESCRIERE C(250), SAFT_PROCENT N(6,2),PAYMENTCODE C(9),PAYMENTNAME C(250), REGISTRU C(20)'] + + pcselect=['select SERIE_ACT,ID_ACT, LUNA, AN, COD, DATAIREG, NRACT, DATAACT, '+]+; + ['EXPLICATIA, SCD, ASCD, SCC, ASCC, SUMA, PERECHED, DATAACTD,'+]+; + ['PERECHEC, DATAACTC, SUMA_VAL, ID_VALUTA, NUME_VAL, CURS, DATASCAD, NEIMPOZAB, '+]+; + ['NNIR, ID_UTIL, UTIL, DATAORA, ID_UTILS, UTILS, DATAORAS, '+]+; + ['ID_RESPONSABIL, NRESP, ID_VENCHELT, DST_CHLT, ID_LUCRARE, NRORD, ID_CTR, CONTRACT, '+]+; + ['ID_SECTIE, SECTIE, PROC_TVA, ID_SET, ID_FACT, ID_PARTD, PARTD, COD_FISCALD, ID_PARTC, '+]+; + ['PARTC, COD_FISCALC, ID_SUCURSALA, SUCURSALA, STERS, ID_FDOC, FDOC, EXPLICATIE_TVA ,ID_JTVA_COLOANA ,'+]+; + ['EXPLICATIA4, EXPLICATIA5, ID_GESTIN, GESTIN, ID_GESTOUT, GESTOUT, ID_FACTD, ID_FACTC, '+]+; + ['VALIDAT, ID_UTILV, UTILV, DATAORAV,CONT_BANCAD,BANCAD,CONT_BANCAC,BANCAC,TAXCODE,TAXNAME,SAFT_DESCRIERE,SAFT_PROCENT,PAYMENTCODE,PAYMENTNAME,REGISTRU'+]+; + [' from vact_tot where 2=2'] + pcfiltru=[sters=0 and luna=]+Alltrim(Str(gnluna))+[ and an=]+Alltrim(Str(gnan)) + *!* Else + *!* pcschema=['SERIE_ACT C(10),ID_ACT N(20),LUNA N(2),AN N(4),COD N(20),DATAIREG D,NRACT N(14),DATAACT D,'+]+; + *!* ['EXPLICATIA C(100),SCD C(4),ASCD C(4),SCC C(4),ASCC C(4),SUMA N(20,gnPA),PERECHED N(14),'+]+; + *!* ['PERECHEC N(14),SUMA_VAL N(20,gnPval),ID_VALUTA N(5),NUME_VAL C(5),CURS N(10,gnPcurs),DATASCAD D,NEIMPOZAB N(20,gnPA),'+]+; + *!* ['NNIR N(10),ID_UTIL N(5),UTIL C(30),DATAORA T,ID_UTILS N(5),UTILS C(30),DATAORAS T,'+]+; + *!* ['ID_RESPONSABIL N(5),NRESP C(30),ID_VENCHELT N(5),DST_CHLT C(100),ID_LUCRARE N(5),NRORD C(50),ID_CTR N(5),CONTRACT C(30),'+]+; + *!* ['ID_SECTIE N(5),SECTIE C(30),PROC_TVA N(5,2),ID_SET N(20),ID_FACT N(20),ID_PARTD N(10),PARTD C(50),ID_PARTC N(10),'+]+; + *!* ['PARTC C(50),ID_SUCURSALA N(5),SUCURSALA C(50),ID_FDOC N(5),FDOC C(30),EXPLICATIE_TVA C(100),ID_JTVA_COLOANA N(4),'+]+; + *!* ['EXPLICATIA4 C(100),EXPLICATIA5 C(100),ID_GESTIN N(5),GESTIN C(50),ID_GESTOUT N(5),GESTOUT C(50),ID_FACTD N(20),ID_FACTC N(20),sters n(1),'+]+; + *!* ['VALIDAT N(1),ID_UTILV N(5), UTILV C(30), DATAORAV T'] + + *!* pcselect=['select SERIE_ACT,ID_ACT, LUNA, AN, COD, DATAIREG, NRACT, DATAACT,'+]+; + *!* ['EXPLICATIA, SCD, ASCD, SCC, ASCC, SUMA, PERECHED,'+]+; + *!* ['PERECHEC, SUMA_VAL, ID_VALUTA, NUME_VAL, CURS, DATASCAD, NEIMPOZAB,'+]+; + *!* ['NNIR, ID_UTIL, UTIL, DATAORA, ID_UTILS, UTILS, DATAORAS, '+]+; + *!* ['ID_RESPONSABIL, NRESP, ID_VENCHELT, DST_CHLT, ID_LUCRARE, NRORD, ID_CTR, CONTRACT,'+]+; + *!* ['ID_SECTIE, SECTIE, PROC_TVA, ID_SET, ID_FACT, ID_PARTD, PARTD, ID_PARTC, '+]+; + *!* ['PARTC, ID_SUCURSALA, SUCURSALA, ID_FDOC, FDOC, EXPLICATIE_TVA ,ID_JTVA_COLOANA ,'+]+; + *!* ['EXPLICATIA4, EXPLICATIA5, ID_GESTIN, GESTIN, ID_GESTOUT, GESTOUT, ID_FACTD, ID_FACTC, 0 as sters, '+]+; + *!* ['VALIDAT, ID_UTILV, UTILV, DATAORAV '+] + ; + *!* [' from ] + gcS + [.vact_tot where 2=2'] + *!* pcfiltru=[luna=]+Alltrim(Str(gnluna))+[ and an=]+Alltrim(Str(gnan)) + + *!* Endif + *!* 24.03.2008 ^ + * din afisactual + *!* If m.nivel>1 + If At([6;],gcAcces)=0 + pcfiltru = pcfiltru + [ AND ID_UTIL=]+Alltrim(Str(gnidutil))+[ ] + Endif + + pcfiltru=[1=2] + + *!* pcschema=[''] + pcorder=[dataireg,id_act] + llAfisare=.F. + gencursor('poactjur','actjur',pcselect,pcfiltru,pcschema,pcorder,llAfisare) + poactjur.ca_baza1.afisare() + Select ACTJUR + *COPY TO c:\act.dbf + + pcselect=['select * from act where 1=2'] + pcfiltru=[1=2] + pcschema=[''] + pcorder=[dataireg] + llAfisare=.F. + gencursor('poact','act',pcselect,pcfiltru,pcschema,pcorder,llAfisare) + poact.ca_baza1.afisare() + + pcselect=['select * from rul where 1=2'] + pcfiltru=[1=2] + pcschema=[''] + pcorder=[] + llAfisare=.F. + gencursor('porull','rull',pcselect,pcfiltru,pcschema,pcorder,llAfisare) + porull.ca_baza1.afisare() + + update_jtva_coloane("", "crsJtvaTemp", 0) && baza si neimpozabile pentru modificare explicatie TVA in rulaje + + Clear Class "afisjurcom" + Select ACTJUR + OJUR=Createobject('AFISJURcom',tnCurs,tcValuta) + If .F. + If NNN>10000 + OJUR.EACTAN=.T. + Endif + Endif + + OJUR.Show(1) + Release OJUR + Use In (SELECT('ACTJUR')) + USE IN (SELECT('crsJtvaTemp')) + + Release poactjur,poact,porull + +Endproc +******************************** SFARSIT: viz_act ******************************** + +************************** INCEPUT: aleg_document_pereche ***************************** + +Procedure aleg_document_pereche + Parameters tnFel,toAct,tcTabel + Local lcSel,lcSelAct + + *** tnFel : tipul soldului + *** toAct : obiect cu varibilele din tabel + *** tcTabel : tabelul in care se varsa datele + + *lcControl = ALLTRIM(tcControl) + *lcSelAct = &lcControl..RecordSource + + lcSelAct = Alltrim(tcTabel) + Select (lcSelAct) + lnRand = Recno() + lnSucces=1 + + If tnFel = 0 && ACTIV + pcContul = Alltrim(Nvl(toAct.scc,[])) + pcContCoresp = Alltrim(Nvl(toAct.scd,[])) + pcACont = Alltrim(Nvl(toAct.ascc,[NULL])) + pnIdPart = Nvl(toAct.Id_partc,0) + pcNume = Alltrim(Nvl(toAct.partc,[])) + pnPereche = [perecheC] + pnIdPereche = [id_factC] + pnPozCont = 1 + Else && PASIV + pcContul = Alltrim(Nvl(toAct.scd,[])) + pcContCoresp = Alltrim(Nvl(toAct.scc,[])) + pcACont = Alltrim(Nvl(toAct.ascd,[NULL])) + pnIdPart = Nvl(toAct.Id_partd,0) + pcNume = Alltrim(Nvl(toAct.partd,[])) + pnPereche = [perecheD] + pnIdPereche = [id_factD] + pnPozCont = 0 + Endif + lcFis = 'actcv' + Alltrim(pcContul) + lcTitluSpec = [] + + *!* lcSelect = [select decode(tip_sold,'A',0,'P',1,-1) as tip_sold from ] + gcs + [.vplcont_sintetic where cont = ?pcContul and an = ?gnAn] + *!* lcCursor = [crsSold] + *!* lnSucces = goexecutor.oExecute(lcSelect,lcCursor) + *!* IF lnSucces < 0 + *!* MESSAGEBOX('Modificare:Tip Sold ' +goExecutor.cEroare,0+16,"Eroare") + *!* ENDIF + + *!* IF lnSucces > 0 + *!* SELECT crsSold + *!* LOCATE + *!* IF !EOF() + *!* pnFelCont = tip_sold + *!* ELSE + *!* pnFelCont = -1 + *!* ENDIF + + *!* IF pnFelCont = -1 && dc e bifunctional sau nu e definit + *!* PRIVATE eActiv + *!* STORE .T. TO eActiv + *!* PRIVATE loCont + *!* loCont = CREATEOBJECT("custom") + *!* ADDPROPERTY(loCont,'cont',pcContul) + *!* ADDPROPERTY(loCont,'acont',pcAcont) + + *!* Ol=CREATEOBJECT("frm_sel_cont") + *!* WITH Ol + *!* .titlufrumos1.CAPTION= 'Tipul soldului' + *!* .cboCont.visible = .f. + *!* .lblCont.Caption = loCont.cont + *!* .lblAcont.Caption = loCont.acont + *!* .terminat1.enabled = .t. + *!* .ocont=loCont + *!* .HEIGHT = 190 + *!* ENDWITH + *!* Ol.SHOW(1) + *!* RELEASE loCont + *!* + *!* IF buton = 2 + *!* lnSucces = -1 + *!* ELSE + *!* pnFelCont = IIF(eActiv,0,1) + *!* ENDIF + *!* ENDIF + + + *!* *!* lcSelect = [select count(*) as ePereche from ] + gcs + [.vcoresp_tip_cont where cont = ?pcContul and fel_cont = ?pnFelCont and cu_inregistrari = 1 ] + ; + *!* *!* [and ?pcContul not in (select cont from ] + gcs + [.exceptii_ireg where cont_c = ?pcContCoresp and invers = 1 and debit =?pnPozCont)] + *!* *!* lcCursor = [crsTest] + *!* *!* lnSucces = goexecutor.oExecute(lcSelect,lcCursor) + *!* *!* IF lnSucces < 0 + *!* *!* MESSAGEBOX('Modificare:Verific existenta pereche ' +goExecutor.cEroare,0+16,"Eroare") + *!* *!* ENDIF + *!* ENDIF + + *!* IF lnSucces > 0 + *!* SELECT crsTest + *!* LOCATE + *!* IF ePereche = 0 + *!* lnSucces = -1 + *!* toact.&pnPereche = 0 + *!* toact.&pnIdPereche = 0 + *!* MESSAGEBOX('Nu trebuie completat documentul pereche!',0,'Informare') + *!* ENDIF + *!* ENDIF + + If lnSucces > 0 + If Type('toAct.Suma_val')# 'U' And !Empty(toAct.Suma_val) + llval = .T. + pnSuma = toAct.Suma_val + lcFormular = [ocompensari_val] + If Type('toAct.Id_Valuta')# 'U' + pnIdValuta = toAct.Id_Valuta + Else + pnIdValuta = 0 + Endif + Else + llval = .F. + pnSuma = toAct.Suma + lcFormular = [ocompensari] + Endif + + pcDenumire = [Partener ] + pcContul + pcCond = [ an = ?gnAn and luna = ?gnluna] + + If llval + pcCond= pcCond + [ and ABS(i.precvaldeb + i.valdebit - i.precvalcred - i.valcredit)>0 and i.id_valuta = ?pnIdValuta ] + Else + pcCond= pcCond + [ and (i.precvaldeb + i.valdebit - i.precvalcred - i.valcredit = 0) ] + Endif + + pcselect = ['select i.* FROM Vireg_parteneri i where 2=2 '] + *!* 07.11.2011 + If Alltrim(pcACont) # [NULL] + pcfiltru = [ i.id_part = ?pnIdPart AND ABS(i.precdeb + i.debit - i.preccred - i.credit)<>0 AND i.cont = ?pcContul and NVL(acont,'x') = NVL(?pcACont,'x') and ] + pcCond + Else + pcfiltru = [ i.id_part = ?pnIdPart AND ABS(i.precdeb + i.debit - i.preccred - i.credit)<>0 AND i.cont = ?pcContul and acont is null and ] + pcCond + ENDIF + pcfiltru = m.pcfiltru + m.gcCondSucursala + *!* 07.11.2011 ^ + pcschema = [''] + pcorder = [''] + + Private podateintrod + Store '' To podateintrod + + gencursor('podateintrod','crs_actcv',pcselect,pcfiltru,[''],'') + If Type('podateintrod') # 'O' + lnSucces = -1 + Endif + Endif + + If lnSucces > 0 + If Used(lcFis) + Use In &lcFis + Endif + + If tnFel = 0 + lcSel = [SELECT *, ACONT AS ASCC, nume_val as numeval, curs as cursschimb, precdeb + debit as totctva, preccred+credit as achitat, ] +; + [precvaldeb + valdebit AS sumaval, precVALcred+VALcredit as achitatval, ] +; + [.f. as ales, 00000000000000.0000 as sumaachi, 000000000000.0000 as sumaachi2, 00000000000000.0000 as achilei, 00000000000000.0000 as difplus, 00000000000000.0000 as difminus, 000000.0000 as cursval, 000000.0000 as cursdif ] +; + [FROM crs_actcv order by dataact INTO CURSOR ] + lcFis + [ READWRITE ] + Else + lcSel = [SELECT *, ACONT AS ASCD, nume_val as numeval, curs as cursschimb, preccred + credit as totctva, precdeb+debit as achitat, ] + ; + [precvalcred + valcredit as sumaval, precVALdeb+VALdebit as achitatval, ] + ; + [.f. as ales, 00000000000000.0000 as sumaachi, 00000000000000.0000 as sumaachi2, 00000000000000.0000 as achilei, 00000000000000.0000 as difplus, 00000000000000.0000 as difminus, 000000.0000 as cursval, 000000.0000 as cursdif ] + ; + [FROM crs_actcv order by dataact INTO CURSOR ] + lcFis + [ READWRITE ] + Endif + &lcSel + If Used('crs_actcv') + Use In crs_actcv + Endif + + If pcACont # [NULL] + lcTitluSpec = [ / Analitic: ] + pcACont + Endif + + Select (lcFis) + Clear Class (lcFormular) + OPLATA=Createobject(lcFormular) + OPLATA.titlufrumos1.Caption = pcDenumire + [: ] + pcNume + lcTitluSpec + OPLATA.pcFis = lcFis + OPLATA.Suma = pnSuma + *OPLATA.pnFelCont = pnFelCont + OPLATA.Show(1) + Clear Class (lcFormular) + + If gnButon = 1 + Select (lcSelAct) + Delete + Select (lcFis) + Scan For ales + Scatter Name oper + Select (lcSelAct) + Append Blank + Gather Name toAct + Replace &pnIdPereche With oper.id_fact, &pnPereche With oper.nract, Suma With oper.sumaachi + If Type('toAct.Suma_val')# 'U' + Replace Suma_val With oper.sumaachi2 + Endif + Select (lcFis) + Endscan + Else + lnSucces = -1 + Endif + Endif + + If lnSucces < 0 + Select &lcSelAct + lcUpdate = [update ] + lcSelAct + [ set ] + pnPereche + [= ] + Alltrim(Str(toAct.&pnPereche)) + [ WHERE RECNO() = ] + Alltrim(Str(lnRand)) + &lcUpdate + *UPDATE (lcSelAct) SET &pnPereche = toact.&pnPereche WHERE RECNO() = lnRand + Else + Select (lcSelAct) + Do nrord With lcSelAct + Endif + + If Used(lcFis) + Use In (lcFis) + Endif + If Used('crsTest') + Use In crsTest + Endif + + Select (lcSelAct) + *&lcControl..SetFocus + +Endproc && aleg_document_pereche + +************************** SFARSIT: aleg_document_pereche ***************************** + +************************** INCEPUT: exista_cont_in_plan_conturi ***************************** +Function exista_cont_in_plan_conturi + Parameters tcCont + LOCAL lcSelect + + lcSelect = SELECT() + llExista = .F. + tcCont = Alltrim(tcCont) + + lcSql=[select count(*) as exista_cont FROM ] + gcS + [.vplcont_sintetic where cont=?tcCont and inactiv = 0 and an = ?gnAn ] + lcCursor = 'crs_cont' + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + If lnSucces < 0 + aMESSAGEBOX('VERIFICARE CONT ' + Chr(13) + goExecutor.cEroare,0+16,"Eroare") + Endif + If lnSucces > 0 + Select crs_cont + Locate + llExista = NVL(exista_cont,0) > 0 + ENDIF + + If !llExista + aMESSAGEBOX('Acest cont nu este configurat in planul de conturi!',48,'Atentie!') + Endif + USE IN (SELECT('crs_cont')) + SELECT (lcSelect) + + Return llExista + ************************** SFARSIT: exista_cont_in_plan_conturi ***************************** + + ************************** INCEPUT: verific_partener ***************************** +Function verific_partener + Parameters tcCont, tcColNume, tcColId, tcTabel + + ll_l=.F. + + If Empty(tcCont) Or Type('tccont')#'C' + Return ll_l + Else + lcCont = Alltrim(tcCont) + Endif + + If Empty(tcColNume) Or Type('tcColNume')#'C' + Return ll_l + Else + lcColNume = Alltrim(tcColNume) + Endif + + If Empty(tcColId) Or Type('tcColId')#'C' + Return ll_l + Else + lcColID = Alltrim(tcColId) + Endif + + If Empty(tcTabel) Or Type('tcTabel')#'C' + lcTabel = Alias() + Else + lcTabel = Alltrim(tcTabel) + Endif + + + lnId_part = 0 + lcNume = '' + + lcSql=[select count(*) as valoare FROM ] + gcS + [.vconfig_cont_ireg where to_number(cont) = ] + lcCont + lcCursor = 'c_part' + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + + If lnSucces < 0 + aMESSAGEBOX('VERIFICARE CONT ' + Chr(13) + goExecutor.cEroare,0+16,"Eroare") + Else + ll_l = .T. + Select c_part + If valoare > 0 + lcTitlu = 'Nume partener ' + lcCont + llNou = .T. + *!* modificare 10.12.2010 + loCauta = CautPartenerContabilitate(GetHash([cTitlu=>] + Alltrim(lcTitlu)+[??cCont=>] + Alltrim(lcCont) + [??] + ; + [lAdaugCorespondente=>1])) + *!* locauta = caut_parteneri(lcCont, lcTitlu,,llNou) + *!* modificare 10.12.2010 ^ + If !Empty(loCauta.id_part) + lnId_part=loCauta.id_part + lcNume=Alltrim(loCauta.denumire) + Endif + Endif + + Select (lcTabel) + Replace &lcColID With lnId_part, &lcColNume With lcNume + Endif + + If Used('c_part') + Use In c_part + Endif + + Return ll_l + ************************** SFARSIT: verific_partener ***************************** + + ************************** INCEPUT: verific_analitic ***************************** +Function verific_analitic + Parameters tlClick, tcCont, tcacont, tcColoana, tcTabel + Local lcTabel, ll_l, lcAcont, lcSql, lcCursor, lnSucces + + m.den='' + ll_l=.F. + lcAcont = [] + If Empty(tcCont) + Return ll_l + Else + pcCont = Alltrim(tcCont) + Endif + + If Empty(tcacont) Or Type('tcacont')#'C' + pcACont = [] + Else + pcACont = tcacont + Endif + + If Empty(tcTabel) Or Type('tcTabel')#'C' + lcTabel = Alias() + Else + lcTabel = Alltrim(tcTabel) + Endif + + If Used('TCEVA') + Use In tceva + Endif + + TEXT TO lcSql NOSHOW +select p.acont || nvl2(p.cont_alt, ' - ' || p.cont_alt, '') || nvl2(p.cod, ' - ' || p.cod, '') || ' - ' || nvl(p.explicatie, '') as den, p.CONT, p.ACONT FROM vplcont_ANALITIC p where cont = ?pcCont and inactiv = 0 and an = ?gnAn order by acont + ENDTEXT + + lcCursor = 'tceva' + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + If lnSucces < 0 + aMESSAGEBOX('oOperatii_comune.VERIFIC_ANALITIC ' + Chr(13) + goExecutor.cEroare,0+16,"Eroare") + Endif + + If lnSucces > 0 + Select tceva + Locate + If Eof() + If !Empty(tcacont) And !Isnull(tcacont) + aMESSAGEBOX('Nu au fost definite simboluri analitice pentru contul ' + pcCont,48,"Atentie") + Endif + lnSucces = -1 + Else + If !tlClick + If Empty(tcacont) Or Isnull(tcacont) && exista analitic si nu e completat + tlClick = .T. + Endif + Endif + Endif + Endif + + If lnSucces > 0 + Select tceva + If tlClick + Do caut_alfa_cursor With 'tceva','den','Alegeti simbolul analitic','m.den' + Select tceva + Locate For Alltrim(den) = Alltrim(m.den) + pcACont = acont + Else + Locate For Alltrim(Cont) = pcCont And Alltrim(acont)=Alltrim(pcACont) + If !Found() + Do caut_alfa_cursor With 'tceva','den','Alegeti simbolul analitic','m.den' + Select tceva + Locate For Alltrim(den) = Alltrim(m.den) + pcACont = acont + Endif + Endif + Endif + + IF !EMPTY(m.lcTabel) AND !EMPTY(m.tcColoana) AND USED(m.lcTabel) + If lnSucces > 0 + Select (lcTabel) + Replace &tcColoana With pcACont + ll_l = .T. + Else + Select (lcTabel) + Replace &tcColoana With '' + ENDIF + ELSE + ll_l = (m.lnSucces > 0) + ENDIF + + Use In (SELECT('tceva')) + + Select (lcTabel) + Return ll_l + + ************************** SFARSIT: verific_analitic ***************************** + ************************** INCEPUT: verificare_note_contabile ***************************** +Procedure verificare_note_contabile + Parameters tcAct,tlVerificAnalitic,tlAlegPartener, tlNuVerificCont + + *!* 03.05.2013 : am adaugat lcIdFact, lcMesajIdFact + Local lcInMesaj, lcInMesajAcont, lcInMesajP, lcInMesajIreg, lcMesaj, lcInMesajPSters, lcAct, lnId_set, ll_return, lcIdFact, lcMesajIdFact + Store '' To lcInMesaj, lcInMesajAcont, lcInMesajP, lcInMesajIreg, lcMesaj, lcAct, lcInMesajPSters, lcIdFact, lcMesajIdFact + Store .T. To ll_return + + If Empty(tcAct) Or Type('tcAct') # 'C' + lcAct = Alias() + Else + lcAct = Alltrim(tcAct) + Endif + + Select (lcAct) + lnNrNota=1 + Scan For Suma <> 0 + lcScd = Alltrim(Nvl(scd,'')) + lcScc = Alltrim(Nvl(scc,'')) + *!* 07.05.2013 : verific id_fact de pe notele de TVA devenit exigibil ( 4426 - 4428 si 4428 - 4427 ), id_factc + *!* si id_factd sa nu fie marcate ca sterse in tabela "documente" + lcIdFact = Iif(id_fact>0 and tva_incasare=1 and ((scd = [4426] and scc = [4428]) or (scd = [4428] and scc = [4427])),Alltrim(Str(id_fact)),[]) + lcIdFact = lcIdFact + Iif(id_factc>0,Iif(!Empty(lcIdFact),[,],[]) + Alltrim(Str(id_factc)),[]) + lcIdFact = lcIdFact + Iif(id_factd>0,Iif(!Empty(lcIdFact),[,],[]) + Alltrim(Str(id_factd)),[]) + *!* 07.05.2013 ^ + *!* 11.03.2008 + *!* tlNuVerificCont - nu se verifica conturile + If !tlNuVerificCont + *!* la clasele 8 si 9 se poate sa nu fie contul corespondent completat + If Empty(lcScd) And !Inlist(Left(lcScc,1),'8','9') + ll_return = .F. + lcMesaj = lcMesaj + ',' + 'contul debitor' + Endif + If Empty(lcScc) And !Inlist(Left(lcScd,1),'8','9') + ll_return = .F. + lcMesaj = lcMesaj + ',' + 'contul creditor' + Endif + Endif + *!* 11.03.2008 ^ + If Empty(nract) + ll_return = .F. + lcMesaj = lcMesaj + ',' + 'nr.document' + Endif + If (!Empty(Suma_val) Or !Empty(Curs)) And Empty(Id_Valuta) + ll_return = .F. + lcMesaj = lcMesaj + ',' + 'nume valuta' + Endif + If Type('cu_tva')<>'U' + If cu_tva = 1 And Empty(Nvl(id_jtva_coloana,0)) + ll_return = .F. + lcMesaj = lcMesaj + ',' + 'explicatie TVA' + Endif + Endif + If !ll_return + *!* modificare ROAPRODUCTIE v 2.0.2 + *!* aMESSAGEBOX("La nota nr. "+Alltrim(Str(lnNrNota))+" nu ati completat campu"+ Iif(At([,],lcMesaj,2)>0,[rile],[l]) + ; + *!* ": "+Substr(lcMesaj,2,60)+"...",0+48,"Atentie") + lcMesaj = "La nota nr. "+Alltrim(Str(lnNrNota))+" nu ati completat campu"+ Iif(At([,],lcMesaj,2)>0,[rile],[l]) + ; + ": "+Substr(lcMesaj,2,60)+"..." + Chr(13) + Chr(10) + Chr(13)+ Chr(10) + *!* modificare ROAPRODUCTIE v 2.0.2 ^ + Exit + Endif + lnNrNota=lnNrNota+1 + Endscan + + If ll_return + lcMesaj = [] + + Select (lcAct) + Go Top + lnId_set=id_set + + *!* modificare migrare v 1.0 > v 2.0 (am si note cu suma 0) + *!* Select Distinct scd As Cont From (lcAct) ; + *!* WHERE Suma # 0 And !Empty(Nvl(scd,'')) ; + *!* UNION ; + *!* SELECT Distinct scc As Cont From (lcAct) ; + *!* WHERE Suma # 0 And !Empty(Nvl(scc,'')) ; + *!* INTO Cursor tcont + + *!* If _Tally = 0 + *!* Use In tcont + Select Distinct scd As Cont From (lcAct) ; + WHERE !Empty(Nvl(scd,'')) ; + UNION ; + SELECT Distinct scc As Cont From (lcAct) ; + WHERE !Empty(Nvl(scc,'')) ; + INTO Cursor tcont + *!* Endif + *!* modificare migrare v 1.0 > v 2.0 ^ + + lcLista = [-1] + + i = 0 + Select tcont + Scan + If Empty(Nvl(Cont,'')) + Loop + Endif + i = i + 1 + lcLista = lcLista + ',' + Alltrim(Cont) + Endscan + + lcSql = 'select distinct c.cont as contpart, c.fel_cont, c.cu_inregistrari, c.explicatie as explic_cont,e.cont_c as exceptie, e.debit as pozitie, e.invers, 0 as gasit ' + ; + 'from ' + gcS + '.vconfig_cont_ireg c left join ' + gcS + '.exceptii_ireg e on c.cont = e.cont and e.invers = 1 ' + ; + 'where to_number(c.cont) in (' + lcLista + ')' + lcCursor = 'verif_part' + + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + If lnSucces < 0 + aMESSAGEBOX('Modificare:Verific completare id_part ' +goExecutor.cEroare,0+16,"Eroare") + Endif + + If lnSucces > 0 + If Reccount('verif_part') > 0 + Select (lcAct) + Scan For !Empty(Suma) + + Scatter Name loCont + Select verif_part + Locate For contpart=loCont.scd + If Found() + If Empty(loCont.Id_partd) And !(loCont.scd$lcInMesajP) + lcInMesajP=lcInMesajP+','+loCont.scd + Replace gasit With 1 + Endif + If Empty(loCont.pereched) And cu_inregistrari = 1 And fel_cont = 1 And !(loCont.scd$lcInMesajIreg) + Locate For contpart=loCont.scd And inlist(upper(exceptie), 'X', upper(loCont.scc)) And fel_cont = 1 And pozitie = 0 And invers = 1 + If !Found() + lcInMesajIreg = lcInMesajIreg + ',' + loCont.scd + Endif + Endif + *!* modificare 06.11.2007 + Else + If !Empty(loCont.Id_partd) + Select (lcAct) + lcInMesajPSters = lcInMesajPSters + ',' + loCont.scd + Replace Id_partd With 0,partd With '' + Endif + *!* modificare 06.11.2007 ^ + Endif + + Select verif_part + Locate For contpart=loCont.scc + If Found() + If Empty(loCont.Id_partc) And !(loCont.scc$lcInMesajP) + lcInMesajP=lcInMesajP+','+loCont.scc + Replace gasit With 1 + Endif + If cu_inregistrari = 1 And fel_cont = 0 And Empty(loCont.perechec) And !(loCont.scc$lcInMesajIreg) + Locate For contpart=loCont.scc And inlist(upper(exceptie), 'X', upper(loCont.scd)) And fel_cont = 0 And pozitie = 1 And invers = 1 + If !Found() + lcInMesajIreg = lcInMesajIreg + ',' + loCont.scc + Endif + Endif + *!* modificare 06.11.2007 + Else + If !Empty(loCont.Id_partc) + Select (lcAct) + lcInMesajPSters = lcInMesajPSters + ',' + loCont.scc + Replace Id_partc With 0,partc With '' + Endif + *!* modificare 06.11.2007 ^ + Endif + Select (lcAct) + Endscan + *!* modificare 06.11.2007 + Else + Select (lcAct) + Scan + If !Empty(Id_partd) + lcInMesajPSters = lcInMesajPSters + ',' + Alltrim(scd) + Replace Id_partd With 0,partd With '' + Endif + If !Empty(Id_partc) + lcInMesajPSters = lcInMesajPSters + ',' + Alltrim(scc) + Replace Id_partc With 0,partc With '' + Endif + Endscan + Endif + *!* modificare 06.11.2007 ^ + Endif + + *!* modificare 07.05.2013 + If lnSucces > 0 And !Empty(Nvl(lcIdFact,[])) + lcSql = [select pack_contafin.verifica_id_documente(']+lcIdFact+[') as rez from dual] + lcCursor = 'crsverifdoc' + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + If lnSucces < 0 + aMESSAGEBOX('Modificare:Verific id documente ' +goExecutor.cEroare,0+16,"Eroare") + Else + select (lcCursor) + lcMesajIdFact = alltrim(nvl(rez,'')) + use in (lcCursor) + + if !empty(nvl(lcMesajIdFact,[])) + llDocumentePlus = (Occurs(',',lcMesajIdFact)>0) + IF AMESSAGEBOX('Document' + iif(m.llDocumentePlus,'ele','ul') + ' ' + lcMesajIdFact + ; + ' a fost marcat sters in lista de documente!' + + Chr(13) + Chr(10) + Chr(13) + Chr(10) + ; + 'Doriti sa ' + iif(m.llDocumentePlus,'le','il') + ' marcati activ?',4+32,_SCREEN.Caption) = 6 + lcSql = 'UPDATE DOCUMENTE SET STERS = 0 WHERE ID_DOC IN (' + m.lcIdFact + ')' + llSucces = goExecutor.oExecuta(m.lcSql) + IF m.llSucces + lcMesajIdFact = '' + ENDIF + ENDIF && messagebox + ENDIF && empty + ENDIF && lnSucces + ENDIF && lnSucces + *!* modificare 07.05.2013 ^ + + If lnSucces > 0 And tlVerificAnalitic + lcSql=[select CONT, ACONT FROM ] + gcS + [.vplcont_ANALITIC where inactiv = 0 and an = ?gnAn order by cont ] + lcCursor = 'plcontana' + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + + If lnSucces < 0 + aMESSAGEBOX('Modificare:Verific completare analitic ' +goExecutor.cEroare,0+16,"Eroare") + Endif + + If lnSucces > 0 + Select (lcAct) + Scan For !Empty(Suma) + Scatter Name loCont + If Empty(Nvl(loCont.ascd, '')) + Select plcontana + Locate For Alltrim(Cont)=Alltrim(loCont.scd) + If Found() + If !(loCont.scd$lcInMesaj) + lcInMesaj=lcInMesaj+','+loCont.scd + Endif + Endif + Else + Select plcontana + Locate For Alltrim(Cont)=Alltrim(loCont.scd) And Alltrim(acont) = Alltrim(loCont.ascd) + If !Found() + If !(Alltrim(loCont.scd) + '.' + Alltrim(loCont.ascd)$lcInMesajAcont) + lcInMesajAcont = lcInMesajAcont + ',' + Alltrim(loCont.scd) + '.' + Alltrim(loCont.ascd) + Endif + Endif + Endif + If Empty(Nvl(loCont.ascc,'')) + Select plcontana + Locate For Cont=loCont.scc + If Found() + If !(loCont.scc$lcInMesaj) + lcInMesaj=lcInMesaj+','+loCont.scc + Endif + Endif + Else + Select plcontana + Locate For Alltrim(Cont)=Alltrim(loCont.scc) And Alltrim(acont) = Alltrim(loCont.ascc) + If !Found() + If !(Alltrim(loCont.scc) + '.' + Alltrim(loCont.ascc)$lcInMesajAcont) + lcInMesajAcont = lcInMesajAcont + ',' + Alltrim(loCont.scc) + '.' + Alltrim(loCont.ascc) + Endif + Endif + Endif + Select (lcAct) + Endscan + Release loCont + Endif + Endif + + *!* modificare 07.05.2013 + if !empty(nvl(lcMesajIdFact,[])) + lcMesaj = lcMesaj + 'Document' + iif(Occurs(',',lcMesajIdFact)>0,'ele','ul') + ' ' + lcMesajIdFact + ; + ' nu mai exista in baza de date!' + Chr(13) + Chr(10) + Chr(13) + Chr(10) + ll_return = .F. + Endif + *!* modificare 07.05.2013 ^ + + If !Empty(lcInMesaj) + lcInMesaj = Substr(lcInMesaj,2) + *!* modificare ROAPRODUCTIE v 2.0.2 + *!* If Occurs(',',lcInMesaj) > 0 + *!* lcMesaj = 'Nu ati completat simbolurile analitice pentru conturile:' + *!* Else + *!* lcMesaj = 'Nu ati completat simbolul analitic pentru contul' + *!* Endif + *!* aMESSAGEBOX(lcMesaj+ ' '+ lcInMesaj+' !',48,"Atentie") + If Occurs(',',lcInMesaj) > 0 + lcInMesaj = 'simbolurile analitice pentru conturile: '+ lcInMesaj + Else + lcInMesaj = 'simbolul analitic pentru contul '+ lcInMesaj + Endif + lcMesaj = lcMesaj + 'Nu ati completat ' + lcInMesaj + ' !' + Chr(13) + Chr(10) + Chr(13) + Chr(10) + *!* modificare ROAPRODUCTIE v 2.0.2 ^ + ll_return = .F. + Endif + + If !Empty(lcInMesajAcont) + lcInMesajAcont = Substr(lcInMesajAcont,2) + If Occurs(',',lcInMesajAcont) > 0 + *!* modificare ROAPRODUCTIE v 2.0.2 + *!* lcMesaj = 'Nu exista conturile analitice in planul de conturi: ' + *!* Else + *!* lcMesaj = 'Nu exista contul analitic in planul de conturi: ' + *!* Endif + *!* aMESSAGEBOX(lcMesaj + ' ' + lcInMesajAcont +' !',48,"Atentie") + lcInMesajAcont = 'conturile analitice in planul de conturi: ' + lcInMesajAcont + Else + lcInMesajAcont = 'contul analitic in planul de conturi: ' + lcInMesajAcont + Endif + lcMesaj = lcMesaj + 'Nu exista ' + lcInMesajAcont +' !' + Chr(13) + Chr(10) + Chr(13) + Chr(10) + *!* modificare ROAPRODUCTIE v 2.0.2 ^ + ll_return = .F. + Endif + + If !Empty(lcInMesajP) + lcInMesajP = Substr(lcInMesajP,2) + If Occurs(',',lcInMesajP) > 0 + *!* modificare ROAPRODUCTIE v 2.0.2 + *!* lcMesaj = 'Nu ati completat partenerii pentru conturile:' + *!* Else + *!* lcMesaj = 'Nu ati completat partenerul pentru contul ' + *!* Endif + *!* aMESSAGEBOX(lcMesaj+' '+ lcInMesajP+' !',48,"Atentie") + lcInMesajP = 'partenerii pentru conturile: ' + lcInMesajP + Else + lcInMesajP = 'partenerul pentru contul ' + lcInMesajP + Endif + *!* modificare ROAPRODUCTIE v 2.0.2 ^ + If tlAlegPartener && dc nu pot sa ma intorc sa completez partenerii + If Used('verif_part') + *!* modificare ROAPRODUCTIE v 2.0.2 + aMESSAGEBOX('Nu ati completat '+ lcInMesajP+' !',48,"Atentie") + *!* modificare ROAPRODUCTIE v 2.0.2 ^ + Select verif_part + Scan For gasit = 1 + lcCont = Alltrim(contpart) + lcTitlu = Alltrim(explic_cont) + *!* modificare 10.12.2010 + loPart = CautPartenerContabilitate(GetHash([cTitlu=>] + Alltrim(lcTitlu) + [??] + ; + [cCont=>] + Alltrim(lcCont) + [??] + ; + [lAdaugCorespondente=>1])) + *!* loPart = caut_parteneri(lcCont , lcTitlu) + *!* modificare 10.12.2010 ^ + Select (lcAct) + Replace All Id_partd With loPart.id_part, partd With loPart.denumire For Alltrim(scd) = lcCont And Id_partd = 0 + Replace All Id_partc With loPart.id_part, partc With loPart.denumire For Alltrim(scc) = lcCont And Id_partc = 0 + Release loPart + Select verif_part + Endscan + ll_return = .F. && modificare 02.07.2007 : ca sa apese din nou pe terminat si sa se reverifice notele + *!* modificare ROAPRODUCTIE v 2.0.2 + Else + lcMesaj = lcMesaj + 'Nu ati completat '+ lcInMesajP + ' !' + Chr(13) + Chr(10) + Chr(13) + Chr(10) + *!* modificare ROAPRODUCTIE v 2.0.2 ^ + Endif + Else + *!* modificare ROAPRODUCTIE v 2.0.2 + lcMesaj = lcMesaj + 'Nu ati completat '+ lcInMesajP + ' !' + Chr(13) + Chr(10) + Chr(13) + Chr(10) + *!* modificare ROAPRODUCTIE v 2.0.2 ^ + ll_return = .F. + Endif + Endif + + If !Empty(lcInMesajIreg) + lcInMesajIreg = Substr(lcInMesajIreg,2) + If Occurs(',',lcInMesajIreg) > 0 + *!* modificare ROAPRODUCTIE v 2.0.2 + *!* lcMesaj = 'Nu ati completat doc. pereche pentru conturile:' + *!* Else + *!* lcMesaj = 'Nu ati completat doc. pereche pentru contul ' + *!* Endif + *!* aMESSAGEBOX(lcMesaj+' '+lcInMesajIreg+' !',48,"Atentie") + lcInMesajIreg = 'doc. pereche pentru conturile: ' + lcInMesajIreg + Else + lcInMesajIreg = 'doc. pereche pentru contul ' + lcInMesajIreg + Endif + lcMesaj = lcMesaj + 'Nu ati completat '+ lcInMesajIreg + ' !' + Chr(13) + Chr(10) + Chr(13) + Chr(10) + *!* modificare ROAPRODUCTIE v 2.0.2 ^ + ll_return = .F. + Endif + + *!* modificare 06.11.2007 + If !Empty(lcInMesajPSters) + lcInMesajPSters = Substr(lcInMesajPSters,2) + If Occurs(',',lcInMesajPSters) > 0 + *!* modificare ROAPRODUCTIE v 2.0.2 + *!* lcMesaj = 'Au fost stersi partenerii corespunzatori conturilor:' + *!* Else + *!* lcMesaj = 'A fost sters partenerul corespunzator contului' + *!* Endif + *!* aMESSAGEBOX(lcMesaj+ ' '+ lcInMesajPSters+' !',48,"Atentie") + lcInMesajPSters = 'Au fost stersi partenerii corespunzatori conturilor: ' + lcInMesajPSters + Else + lcInMesajPSters = 'A fost sters partenerul corespunzator contului ' + lcInMesajPSters + Endif + lcMesaj = lcMesaj + lcInMesajPSters + ' !' + Chr(13) + Chr(10) + Chr(13) + Chr(10) + *!* modificare ROAPRODUCTIE v 2.0.2 ^ + ll_return = .F. + Endif + *!* modificare 06.11.2007 ^ + + *!* modificare 14.11.2007 + *!* Verificare mai multe nr act pe acelasi Id fact + Select Distinct id_fact,nract From &lcAct Where !Inlist(Nvl(id_fact,0),0,-1) ; + and !(tva_incasare=1 and ((scd = [4426] and scc = [4428]) or (scd = [4428] and scc = [4427]))) ; && modificare ROACONT v 2.4.4 + Into Cursor cduplicatetemp1 + Select id_fact, Count(*) As nr From cduplicatetemp1 ; + GROUP By id_fact ; + INTO Cursor cduplicatetemp + + Use In (Select("cduplicatetemp1")) + + + Select cduplicatetemp + Locate For nr>1 + If Found() + *!* modificare ROAPRODUCTIE v 2.0.2 + *!* lcMesaj = 'Nu este posibil ca pe acelasi document sa existe doua numere diferite.' + *!* aMESSAGEBOX(lcMesaj,0+48,"Atentie") + lcMesaj = lcMesaj + 'Nu este posibil ca pe acelasi document sa existe doua numere diferite.' + *!* modificare ROAPRODUCTIE v 2.0.2 ^ + ll_return = .F. + Endif + Use In (Select("cduplicatetemp")) + + *!* modificare ROAPRODUCTIE v 2.0.2 + If !Empty(lcMesaj) + aMESSAGEBOX(Space(45) + "REZULTATE VERIFICARI" + Chr(13)+ Chr(10) + Replicate([=],60) + Chr(13)+ Chr(10) + lcMesaj,48,"Atentie") + Endif + *!* modificare ROAPRODUCTIE v 2.0.2 ^ + + *!* modificare 14.11.2007 ^ + + If lnSucces < 0 + ll_return = .F. + Endif + + If Used('verif_part') + Use In verif_part + Endif + If Used('plcontana') + Use In plcontana + Endif + If Used('tcont') + Use In tcont + Endif + Else + If !Empty(lcMesaj) + aMESSAGEBOX(Space(45) + "REZULTATE VERIFICARI" + Chr(13)+ Chr(10) + Replicate([=],60) + Chr(13)+ Chr(10) + lcMesaj,48,"Atentie") + Endif + Endif + + Select (lcAct) + Return ll_return + +Endproc && verificare_note_contabile +************************** SFARSIT: verificare_note_contabile ***************************** + + +******************************************* +* PROCEDURE Sterge_Nota( tnCod, tnId_Set ) +* Date : 08/07/2005, 13:03:45 +* author : marius.mutu +* description: +******************************************* +Procedure sterge_nota + Lparameters tnCod, tnId_Set + Local lnSucces + lnSucces = -1 + + If Empty(tnCod) + tnCod = 0 + Endif + If Empty(tnId_Set) + tnId_Set = 0 + Endif + If tnCod + tnId_Set = 0 + Return + Endif + + Local lcWhere + lcWhere = [] + + If !Empty(tnCod) + lcWhere = [ and cod = ] + Transform(tnCod) + Endif + If !Empty(tnId_Set) + lcWhere = [ and id_set = ] + Transform(tnId_Set) + Endif + If !Empty(lcWhere) + lcWhere = Substr(lcWhere,6) + Endif + + lcSql = [select * from ] + gcS + [.vact where ] + lcWhere + [ and an = ?gnAn and luna = ?gnLuna]+gcCondSucursala + lcCursor = [actactan] + + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + goExecutor.oReset() + If lnSucces < 0 + aMESSAGEBOX('Cautare Nota:' + Chr(13) + goExecutor.cEroare,0+16,"Eroare") + Return + Endif + + Select actactan + If Reccount() > 0 + Clear Class "verificare" + overif=Createobject('verificare') + overif.Show(1) + If buton#2 + lnSucces = OSCRIE_IN_FISIERE(2,.F.) + Else + lnSucces = -1 + Endif + Endif + + If Used('actactan') + Use In actactan + Endif + Release overif + + Return lnSucces +Endproc +*----------------------------------sfarsit procedura Sterge_Nota---------------------------------- +******************************************* +* PROCEDURE scrie_nota_import( tnId_Set, tcCursorImport ) +* Date : 08/07/2005, 14:04:32 +* author : marius.mutu +* description: +******************************************* +Procedure scrie_nota_import( tnId_Set, tlVerificAnalitic, tlCompletareParteneri, tcCursorImport,taValori ) + &&taValori -- parametru pentru lans + Local lnId_set, lcCursor, lnSucces + Local llVerificAnalitic, llCompletareParteneri + lnSucces = -1 + + lnId_set = tnId_Set + lcCursor = tcCursorImport + llVerificAnalitic = tlVerificAnalitic + llCompletareParteneri = tlCompletareParteneri + + If Type('taValori',1)#[A] + lnBut = lans(lnId_set) + Else + lnBut = lans(lnId_set,.F.,.T.,@taValori) + Endif + + If lnBut = 1 + lcListaCampuri = Lista_Campuri(lcCursor) + Select actactan + Scatter Name oact + Zap + *!* INSERT INTO actactan (scd,ascd,scc,ascc,suma, explicatia) SELECT scd, ascd, scc, ascc, suma, explicatia FROM crs_inchidere + lcInsert = [INSERT INTO ACTACTAN (] + lcListaCampuri + [) select ] + lcListaCampuri + [ from ] + lcCursor + &lcInsert + + + Select actactan + Scan + lcGather = [GATHER NAME oact FIELDS EXCEPT ] + lcListaCampuri + &lcGather + Endscan + + +*!* v2.5.51 - 15.09.2014 &&modificare facuta pentru a putea modifica nota de inchidere de salarii +*!* Select actactan +*!* LOCATE +*!* Do Form verificare With llVerificAnalitic, llCompletareParteneri +*!* If gnButon = 1 +*!* Select actactan +*!* lnSucces = OSCRIE_IN_FISIERE(0) +*!* Endif + lcJurnal = [] + update_jtva_coloane(m.lcJurnal, 'crsExplicatiiTVATemp', 1) + + Select .F. As ales, 0 As Cu_tva, Cast(0 As N(2)) As tipnota, a.*, b.denumire As explicatie_tva_2 ; + From actactan a Left Join crsExplicatiiTVATemp b On a.id_jtva_coloana = b.id_jtva_coloana ; + Into Cursor tact Readwrite + + Update tact Set explicatie_tva = explicatie_tva_2 + Use In (Select('crsExplicatiiTVATemp')) + + Select tact + Go Top + llNotaNoua = .T. + llMaximize = .T. + loForm = Createobject([frm_modific2007], m.lnId_Set, m.llNotaNoua) + loForm.lb_titlu_alb_b121.Caption = 'Nota' && 'Exigibilizare TVA Incasare' + Select tact + loForm.Show(1, m.llMaximize) + + If buton = 1 + Use In (Select('actactan')) + + Select tact + Replace id_jtva_coloana With Null, proc_tva With 0 For Cu_tva = 0 + Select * From tact Into Cursor actactan READWRITE WHERE suma <>0 + + Select actactan + Replace All id_util With gnIdUtil, id_set With m.lnId_Set + lnSucces = OSCRIE_IN_FISIERE(0) + Endif && buton = 1 +*!* v2.5.51 - 15.09.2014 ^ + + Endif + + If Used('actactan') + Use In actactan + Endif + + Return lnSucces + + +Endproc +*----------------------------------sfarsit procedura scrie_nota_import---------------------------------- + +&& ------- INCEPUT ------- ultima_zi_din_luna +Function ultima_zi_din_luna + Parameters tnAnul, tnLuna + + Local ldData, lnAn, lnLuna + If Type('tnAnul')='C' + tnAnul=Val(tnAnul) + Endif + + If Type('tnLuna')='C' + tnLuna=Val(tnLuna) + Endif + + If Empty(tnAnul) Or Type('tnAnul')#'N' + lnAn = gnan + Else + lnAn = tnAnul + Endif + If Empty(tnLuna) Or Type('tnLuna')#'N' + lnLuna = gnluna + Else + lnLuna = tnLuna + Endif + + ldData = Date(lnAn, lnLuna, 1) + ldData = Gomonth(ldData,1) + ldData = Date(Year(ldData), Month(ldData), 1) - 1 + + Return ldData +Endfunc +&& ------- SFARSIT ------- ultima_zi_din_luna + +&& -------------------------- INCEPUT do_assign_analitic ------------------------------ +Procedure do_assign_analitic + Parameters tcCont,pcAct,pcRul + + Private pcCont,pcAct,pcRul,pParamP,pParamS + Store 0 To pParamP,pParamS + lcAnalitic = '' + lcAlias = Alias() + + pcCont = Alltrim(tcCont) + + lcSel = [SELECT * from ] + gcS + [.config_analitice WHERE cont = ?pcCont] + lcCursor = 'crs_cfg_ana' + lnSucces = goExecutor.oExecute(lcSel,lcCursor) + If lnSucces < 0 + aMESSAGEBOX(goExecutor.cEroare,0+16,"Eroare") + Endif + + If lnSucces > 0 + If Reccount('crs_cfg_ana')=0 + Use In crs_cfg_ana + lnSucces = -1 + Endif + Endif + + If lnSucces > 0 + Select crs_cfg_ana + Scatter Name ocfg + lcCampPrefix = Nvl(Alltrim(ocfg.camp_leg_prefix),'') + lcCampSufix = Nvl(Alltrim(ocfg.camp_leg_sufix),'') + + If !Empty(lcCampPrefix) + If Type('&pcRul..'+lcCampPrefix) # 'U' + pParamP = &pcRul..&lcCampPrefix + Else + If Type('&pcAct..'+lcCampPrefix) # 'U' + pParamP = &pcAct..&lcCampPrefix + Endif + Endif + Endif + + If !Empty(lcCampSufix) + If Type('&pcRul..'+lcCampSufix) # 'U' + pParamS = &pcRul..&lcCampSufix + Else + If Type('&pcAct..'+lcCampSufix) # 'U' + pParamS = &pcAct..&lcCampSufix + Endif + Endif + Endif + + lcSel = [{call fconturi_analitice(?gcs,?pcCont,0,?pParamP,?pParamS)}] + lcCursor = 'crs_analitice' + lnSucces = goExecutor.oExecute(lcSel,lcCursor) + + If lnSucces < 0 + aMESSAGEBOX(goExecutor.cEroare,0+16,"Eroare") + Endif + Endif + + && iau Primul Simbol Analitic din Tabel - ordonat pt ca e selectat cu Distinct + If lnSucces > 0 + Select crs_analitice + Go Top + lcAnalitic = Alltrim(acont) + Endif + + && verificare analiticului cu Planul de Conturi + If lnSucces > 0 + *!* lcSel = [SELECT cont,acont from ] + gcs + [.vplcont_analitic WHERE cont = ?pcCont and acont = ?lcAnalitic and an = ?gnAn ] + *!* lcCursor = 'crs_verific' + *!* lnSucces = goExecutor.oExecute(lcSel,lcCursor) + *!* IF lnSucces < 0 + *!* MESSAGEBOX(goExecutor.cEroare,0+16,"Eroare") + *!* ENDIF + + lnSucces = verific_analitic_(pcCont, lcAnalitic, .T.) + Endif + + If lnSucces > 0 + If Reccount('crs_verific')=0 + lnSucces = -1 + Endif + Endif + + If Used('crs_cfg_ana') + Use In crs_cfg_ana + Endif + If Used('crs_verific') + Use In crs_verific + Endif + If Used('crs_analitice') + Use In crs_analitice + Endif + If Used('crs_verific') + Use In crs_verific + Endif + + If lnSucces < 0 + lcAnalitic = '' + Endif + + Select (lcAlias) + Return lcAnalitic + + && -------------------------- SFARSIT do_assign_analitic ------------------------------ + + && -------------------------- INCEPUT verific_cont ------------------------------ +Procedure verific_cont + Parameters tcCont, tlNoMessage + + Private pcCont + pcCont = Alltrim(tcCont) + + && verificarea contului cu Planul de Conturi + lcSel = [SELECT cont from ] + gcS + [.vplcont_sintetic WHERE TRIM(cont) = ?pcCont and an = ?gnAn ] + lcCursor = 'crs_verific' + lnSucces = goExecutor.oExecute(lcSel,lcCursor) + If lnSucces < 0 + aMESSAGEBOX(goExecutor.cEroare,0+16,"Eroare") + Endif + + If lnSucces > 0 + If Reccount('crs_verific')=0 + lnSucces = -1 + Endif + Endif + + If lnSucces < 0 And !tlNoMessage + aMESSAGEBOX('Acest cont nu este definit in planul de conturi!',0+48, 'Atentie') + Endif + + Return lnSucces + +Endproc + +&& -------------------------- SFARSIT verific_cont ------------------------------ + +&& -------------------------- INCEPUT verific_analitic ------------------------------ +Procedure verific_analitic_ + Parameters tcCont, tcacont, tlNoMessage + + Private pcCont, pcACont + pcCont = Alltrim(tcCont) + pcACont = Alltrim(tcacont) + + && verificare contului cu Planul de Conturi + lcSel = [SELECT cont, acont from ] + gcS + [.vplcont_analitic WHERE TRIM(cont) = ?pcCont and TRIM(acont) = ?pcAcont and an = ?gnAn ] + lcCursor = 'crs_verific' + lnSucces = goExecutor.oExecute(lcSel,lcCursor) + If lnSucces < 0 + aMESSAGEBOX(goExecutor.cEroare,0+16,"Eroare") + Endif + + + + If lnSucces > 0 + If Reccount('crs_verific')=0 + lnSucces = -1 + Endif + Endif + + If lnSucces < 0 And !tlNoMessage + aMESSAGEBOX('Acest analitic nu este definit in planul de conturi!',0+48, 'Atentie') + Endif + Return lnSucces + +Endproc + +&& -------------------------- SFARSIT verific_analitic ------------------------------ + +*!* vizualizare balanta, balanta c8, balanta c9 +Procedure viz_balanta_contabilitate + Lparameters tcBal, tlCumulat + + Local loFrmPerioada, lnAn1, lnLuna1, lnAn2, lnLuna2, lcPerioada, lnInit, lnFinal + Private pcondper + pcondper = "" + + If tlCumulat + loFrmPerioada=Createobject('frm_perioada_luni') + loFrmPerioada.Show(1) + + If gnButon=2 + Return + Endif + + If At('_',pcondper) > 0 + lnAn1 = Val(Substr(pcondper,3,4)) + lnLuna1 = Val(Substr(pcondper,1,2)) + lnAn2 = Val(Substr(pcondper,10,4)) + lnLuna2 = Val(Substr(pcondper,8,2)) + + lcPerioada = Substr(pcondper,1,2)+'/'+Substr(pcondper,3,4) + ' - ' + Substr(pcondper,8,2)+'/'+Substr(pcondper,10,4) + Else + lnAn1 = Val(Substr(pcondper,3,4)) + lnLuna1 = Val(Substr(pcondper,1,2)) + lnAn2 = Val(Substr(pcondper,3,4)) + lnLuna2 = Val(Substr(pcondper,1,2)) + + lcPerioada = Substr(pcondper,1,2)+'/'+Substr(pcondper,3,4) + ' - ' + Substr(pcondper,1,2)+'/'+Substr(pcondper,3,4) + Endif + lnInit = lnAn1 * 12 + lnLuna1 + lnFinal = lnAn2 * 12 + lnLuna2 + Do viz_balanta With , , , , , , m.lnLuna1, m.lnAn1, m.lnLuna2, m.lnAn2, m.tcBal + ELSE + Do viz_balanta With , , , , , , , , , , m.tcBal + Endif + + + +Endproc && viz_balanta_contabilitate + +********************************************************************************************* +* PROCEDURE viz_balanta( ) +* Date : 08/09/2004, 16:00:20 +* author : marius.mutu +* description: +* tnAn1, tnLuna1, tnAn2, tnLuna2 - luna initiala, luna finala sau luna curenta +******************************************* INCEPUT:viz_balanta ******************************************* +Procedure viz_balanta + Parameters tlFaraInainte_de, tnId_sectie, tlEval_valuta, tnCurs, tcValuta, tcFormular, tnLuna1, tnAn1, tnLuna2, tnAn2, tcBal + && tcBal = "bal/bal_c8/bal_c9" && balanta clasele 1-7/ balanta clasa 8 / balanta clasa 9 + + Local lnAn1, lnLuna1, lnAn2, lnLuna2, lcBal, lcProceduraInainte, lcCaption, lcAntetOriginal + lnAn1 = gnan + lnLuna1 = gnluna + lnAn2 = gnan + lnLuna2 = gnluna + Private m.sprecdeb1,m.spreccred1,m.ssoldideb, m.ssoldicred, m.sprecdeb,m.spreccred,m.sruldeb,m.srulcred,m.stotdeb,m.stotcred,m.ssolddeb,m.ssoldcred + Store 0 To m.sprecdeb1,m.spreccred1,m.ssoldideb, m.ssoldicred, m.sprecdeb,m.spreccred,m.sruldeb,m.srulcred,m.stotdeb,m.stotcred,m.ssolddeb,m.ssoldcred + + If Empty(tcBal) Or Pcount() < 11 + lcBal = "bal" + Else + lcBal = Iif(Lower(tcBal)$"bal/bal_c8/bal_c9", Lower(tcBal), "bal") + Endif + + lcCaption = "Balanta de verificare" + Do Case + Case lcBal = "bal" + lcProceduraInainte = "BALANTA" + lcCaption = "Balanta de verificare" + Case lcBal = "bal_c8" + lcProceduraInainte = "BALANTA_C8" + lcCaption = "Balanta de verificare clasa 8" + Case lcBal = "bal_c9" + lcProceduraInainte = "BALANTA_C9" + lcCaption = "Balanta de verificare clasa 9" + Endcase + + *** verificare INAINTE_DE + If !tlFaraInainte_de + Do inainte With lcProceduraInainte In oinainte_de.prg + Endif + + Private T, lccont1, lccont2 + Store '' To lccont1, lccont2 + T='.t.' + + Local lnId_sectie, llCentru, llEval_valuta, lnCurs, lcValuta + Store .F. To llCentru + If !Empty(tnId_sectie) + lnId_sectie = tnId_sectie + Endif + llEval_valuta = tlEval_valuta + lnCurs = tnCurs + lcValuta = tcValuta + + If Pcount() < 10 Or Empty(tnAn1) Or Empty(tnLuna1) Or Empty(tnAn2) Or Empty(tnLuna2) + lnAn1 = gnan + lnLuna1 = gnluna + lnAn2 = gnan + lnLuna2 = gnluna + Else + lnAn1 = tnAn1 + lnLuna1 = tnLuna1 + lnAn2 = tnAn2 + lnLuna2 = tnLuna2 + Endif + + If !Empty(lnId_sectie) + llCentru = .T. + If Used("tbalanta") + Use In tbalanta + Endif + + *!* lcSel = [{call pack_mg_sectie.make_balante_centru(]+Alltrim(Str(lnId_sectie))+[,]+Alltrim(Str(lnLuna1))+[,]+Alltrim(Str(lnAn1))+[,]+Alltrim(Str(lnLuna2))+[,]+Alltrim(Str(lnAn2))+[)}] + lcSel = [begin pack_mg_sectie.make_balante_centru(]+Alltrim(Str(lnId_sectie))+[,]+ ; + Alltrim(Str(lnLuna1))+[,]+Alltrim(Str(lnAn1))+[,]+Alltrim(Str(lnLuna2))+[,]+Alltrim(Str(lnAn2))+[); end;] + lnSucces = goExecutor.oExecute(lcSel) + + If lnSucces < 0 + aMESSAGEBOX(goExecutor.cEroare,0+16,"Eroare") + Return + Endif + Endif + + Do make_tbalanta With llCentru, tnLuna1, tnAn1, tnLuna2, tnAn2, lcBal + + + If llEval_valuta + lcProc_eval = 'eval_balanta' + Do &lcProc_eval With lnCurs + Endif + + && Adaugat 03.05.2006 - pt. Balanta in engleza Alfred Knight + Private pcSold1ian, pcPrec, pcRul, pcTotal, pcSolduri, pcCont, pcDenumire, plBal_alt + pcSI1 = 'Solduri initiale 1 Ian.' + pcSI = 'Solduri initiale' + pcTSP = 'Total sume precedente' + pcRLC = 'Rulajele lunii curente' + pcTS = 'Total Sume' + pcSF = 'Solduri finale' + pcTR = 'Total rulaje' + pcCont = "Cont" + pcDenumire = "Denumire" + plBal_alt = .F. + *** + + Sele tbalanta + * DO FORM afisbal_ana + If !Empty(tcFormular) And Type('tcFormular')= 'C' + loBal = Createobject(tcFormular) + Else + loBal = Createobject("frm_balanta") + Endif + + If llCentru Or llEval_valuta + lcAntetOriginal = gcAntet + Endif + + Do Case + Case llCentru + + lcSql=[select sectie from vnom_sectii where id_sectie= ]+Alltrim(Str(lnId_sectie)) + lnSucces=goExecutor.oExecute(lcSql,'crsSectie') + If lnSucces < 0 + aMESSAGEBOX(goExecutor.cEroare,0+16,'Eroare') + Endif + Select crsSectie + lcCentru_profit = sectie + If Used('crsSectie') + Use In crsSectie + Endif + + lcCaption = "BALANTA DE VERIFICARE - " + Alltrim(lcCentru_profit) + " " + Padl(Int(lnLuna1),2,'0') + '.' + Alltrim(Str(lnAn1,4,0)) + ' - ' + Padl(Int(lnLuna2),2,'0') + '.' + Alltrim(Str(lnAn2,4,0)) + gcAntet = Alltrim(gcAntet) + " - Centru: "+ lcCentru_profit + Case llEval_valuta + lcCaption = "Evaluarea Balantei in valuta 1 "+lcValuta+ "=" +Alltrim(Str(lnCurs,10,gnPCurs))+" LEI" + gcAntet = Alltrim(gcAntet) + " " + lcCaption + Otherwise + gcAntet = Alltrim(gcAntet) + Endcase + + *If llCentru Or llEval_valuta + With loBal + .lb_titlu_alb_b121.Caption = lcCaption + ; + IIF(!EMPTY(tnAn2), " " + ALLTRIM(PADL(ROUND(tnLuna1,0),2,'0')) + '/' + ALLTRIM(PADL(ROUND(tnAn1,0),4,'0')) + '-' + ALLTRIM(PADL(ROUND(tnLuna2,0),2,'0')) + '/' + ALLTRIM(PADL(ROUND(tnAn2,0),4,'0')), "") + *Endif + *!* modificare 23.02.2008 + .lCentru = llCentru + .nluna1 = IIF(EMPTY(tnLuna1), 0, ROUND(tnLuna1,0)) + .nan1 = IIF(EMPTY(tnAn1), 0, ROUND(tnAn1,0)) + .nluna2 = IIF(EMPTY(tnLuna2), 0, ROUND(tnLuna2,0)) + .nan2 = IIF(EMPTY(tnAn2), 0, ROUND(tnAn2,0)) + .cbal = lcBal + .cprocedurainainte = lcProceduraInainte + *!* modificare 23.02.2008 ^ + Endwith + loBal.Show(1) + + If llCentru Or llEval_valuta + gcAntet =lcAntetOriginal + Endif + + If Used("tbalanta") + Use In tbalanta + Endif + +Endproc && viz_balanta +******************************************* SFARSIT: viz_balanta ******************************************* +******************************************************************************************************************** +*** CREEAZA TBALANTA DIN BAL+BALANA+TOTALURI +Procedure make_tbalanta + Parameters tlCentru, tnLuna1, tnAn1, tnLuna2, tnAn2, tcBal, tlNuContAlternativ + * tcBal = "bal/bal_c8/bal_c9" && balanta clasele 1-7/ balanta clasa 8 / balanta clasa 9 + * tlNuContAlternativ: default (.F.) .T. nu se inlocuieste cont/acont cu cont_alt, acont_alt + + Local llCentru, lcBal, lcVbal, lcVBalana + llCentru = tlCentru + + && DACA SUNT PE O SUCURSALA - SELECTEZ DOAR INREGISTRARILE DE PE SUCURSALA CURENTA + Local lcFiltruSucursala + lcFiltruSucursala = "" + If !Isnull(gnIdSucursala) + lcFiltruSucursala = Substr(gcCondSucursala,6) + Endif + + If Empty(tcBal) Or Pcount() < 6 + lcBal = "bal" + Else + lcBal = Iif(Lower(tcBal)$"bal/bal_c8/bal_c9", Lower(tcBal), "bal") + Endif + lcVbal = "VBAL" + lcVBalana = "VBALANA" + + Do Case + Case lcBal = "bal" + lcVbal = "VBAL" + lcVBalana = "VBALANA" + Case lcBal = "bal_c8" + lcVbal = "VBAL_C8" + lcVBalana = "VBALANA_C8" + Case lcBal = "bal_c9" + lcVbal = "VBAL_C9" + lcVBalana = "VBALANA_C9" + Endcase + + If Used('TBALANTA') + Use In tbalanta + Endif + + Local lnAn1, lnLuna1, lnAn2, lnLuna2 + If Pcount() < 5 Or Empty(tnAn1) Or Empty(tnLuna1) Or Empty(tnAn2) Or Empty(tnLuna2) + lnAn1 = gnan + lnLuna1 = gnluna + lnAn2 = gnan + lnLuna2 = gnluna + Else + lnAn1 = tnAn1 + lnLuna1 = tnLuna1 + lnAn2 = tnAn2 + lnLuna2 = tnLuna2 + Endif + + LNPRECEDENT=0 + + + + Local lcSelect, lcFiltru, lcSchema1, lcOrder, llAfisare, lcGroup, llModParam, lcFiltruOriginal + Store '' To lcSelect, lcFiltru, lcSchema1, lcOrder, llAfisare, lcGroup, llModParam, lcFiltruOriginal + + Private potbal1, potbal2 + Store Null To potbal1, potbal2 + + && PARAMETERS tcnume, tcalias, tcselect, tcfiltru, tcschema, tcorder, tlAfisare, tcgroup, tlModParam, tcFiltruOriginal + If llCentru + Private pcselect1,pcfiltru1,pcschema1,potbal1,tbal1,pcselect2,pcfiltru2,pcschema2,potbal2,tbal2 + Store "" To potbal1,potbal2 + lcSelect = [select rpad(SUBSTR(cont,1,1),4,' ') as g1,rpad(SUBSTR(cont,1,2),4,' ') as g2,rpad(SUBSTR(cont,1,3),4,' ') as g3,]+; + [cont as g4,cont,rpad(' ',4,' ') acont, id_bal,denumire, '' as cont_alt, '' as cod,precdeb,preccred,ruldeb,rulcred,]+; + [totdeb,totcred,solddeb,soldcred,precdeb1,preccred1,4 as bnivel, difana, ]+; + [cast (null as number(5)) as id_sucursala, '' as sucursala ] + ; + [from mg_tmp_bal] + lcFiltru = [] + lcSchema = [] + lcOrder = [] + llAfisare = .F. + lcGroup = [] + llModParam = .T. + lcFiltruOriginal = [AN * 12 + LUNA BETWEEN ] +Alltrim(Str(lnAn1*12+lnLuna1)) + [ AND ] + Alltrim(Str(lnAn2*12+lnLuna2)) + + gencursor('potbal1','tbal1', lcSelect, lcFiltru, lcSchema1, lcOrder, llAfisare, lcGroup, llModParam, lcFiltruOriginal) + potbal1.ca_baza1.afisare() + + lcSelect = [select rpad(SUBSTR(cont,1,1),4,CHR(32)) as g1,rpad(SUBSTR(cont,1,2),4,CHR(32)) as g2,rpad(SUBSTR(cont,1,3),4,CHR(32)) as g3,]+; + [cont as g4,cont,acont, id_balana as id_bal,denumire, '' as cont_alt, '' as cod,precdeb,preccred,ruldeb,rulcred,]+; + [totdeb,totcred,solddeb,soldcred,precdeb1,preccred1, 5 as bnivel, 0 as difana, ]+; + [cast (null as number(5)) as id_sucursala, '' as sucursala ] + ; + [from mg_tmp_balana] + lcFiltru = [] + lcOrder = [] + lcSchema = [] + llAfisare=.F. + lcGroup = [] + llModParam = .T. + lcFiltruOriginal=[AN * 12 + LUNA BETWEEN ] +Alltrim(Str(lnAn1*12+lnLuna1)) + [ AND ] + Alltrim(Str(lnAn2*12+lnLuna2)) + + gencursor('potbal2','tbal2', lcSelect, lcFiltru, lcSchema1, lcOrder, llAfisare, lcGroup, llModParam, lcFiltruOriginal) + potbal2.ca_baza1.afisare() + Else + *** BALANTA SINTETICA CU TOATE INREGISTRARILE +*!* 25.01.2011 +*!* lcSelect = [select rpad(SUBSTR(cont,1,1),4,' ') as g1, rpad(SUBSTR(cont,1,2),4,' ') as g2, rpad(SUBSTR(cont,1,3),4,' ') as g3, ]+; +*!* [cont as g4, cont,rpad(' ',4,' ') acont, id_bal, denumire, precdeb, preccred, ruldeb, rulcred, ]+; +*!* [totdeb, totcred, solddeb, soldcred, precdeb1, preccred1, 4 as bnivel, difana, ]+; +*!* [id_sucursala, sucursala ] + ; +*!* [from ] + lcVbal + + lcSelect = [select rpad(SUBSTR(cont,1,1),4,' ') as g1, rpad(SUBSTR(cont,1,2),4,' ') as g2, rpad(SUBSTR(cont,1,3),4,' ') as g3, ]+; + [cont as g4, cont,rpad(' ',4,' ') acont, MAX(id_bal) as id_bal, denumire, ] + ; + [cont_alt, cod, ] + ; + [SUM(case when an*12+luna = ] +Alltrim(Str(lnAn1*12+lnLuna1)) + [ then precdeb else 0 end) as precdeb, ] + ; + [SUM(case when an*12+luna = ] +Alltrim(Str(lnAn1*12+lnLuna1)) + [ then preccred else 0 end) as preccred, ] + ; + [SUM(ruldeb) as ruldeb, SUM(rulcred) as rulcred, ]+; + [SUM(case when an*12+luna = ] +Alltrim(Str(lnAn2*12+lnLuna2)) + [ then totdeb else 0 end) as totdeb, ] + ; + [SUM(case when an*12+luna = ] +Alltrim(Str(lnAn2*12+lnLuna2)) + [ then totcred else 0 end ) as totcred, ] + ; + [SUM(case when an*12+luna = ] +Alltrim(Str(lnAn2*12+lnLuna2)) + [ then solddeb else 0 end) as solddeb, ] + ; + [SUM(case when an*12+luna = ] +Alltrim(Str(lnAn2*12+lnLuna2)) + [ then soldcred else 0 end ) as soldcred, ] + ; + [SUM(case when an*12+luna = ] +Alltrim(Str(lnAn1*12+lnLuna1)) + [ then precdeb1 else 0 end) as precdeb1, ] + ; + [SUM(case when an*12+luna = ] +Alltrim(Str(lnAn1*12+lnLuna1)) + [ then preccred1 else 0 end) as preccred1, ] + ; + [4 as bnivel, MAX(difana) as difana, id_sucursala, sucursala ] + ; + [from ] + lcVbal + + lcFiltru = [] + lcSchema = [] + lcOrder = [] + llAfisare = .F. + lcGroup = [cont, denumire, cont_alt, cod, id_sucursala, sucursala] + llModParam = .T. + lcFiltruOriginal = [AN * 12 + LUNA BETWEEN ] +Alltrim(Str(lnAn1*12+lnLuna1)) + [ AND ] + Alltrim(Str(lnAn2*12+lnLuna2)) + gcCondSucursala + + gencursor('potbal1','tbal1', lcSelect, lcFiltru, lcSchema1, lcOrder, llAfisare, lcGroup, llModParam, lcFiltruOriginal) + potbal1.ca_baza1.afisare() + + *** BALANTA ANALITICA CU TOATE INREGISTRARILE +*!* lcSelect = [select rpad(SUBSTR(cont,1,1), 4, CHR(32)) as g1, rpad(SUBSTR(cont,1,2), 4, CHR(32)) as g2, rpad(SUBSTR(cont,1,3),4,CHR(32)) as g3,]+; +*!* [cont as g4, cont, acont, id_balana as id_bal, denumire, precdeb, preccred, ruldeb, rulcred, ]+; +*!* [totdeb, totcred, solddeb, soldcred, precdeb1, preccred1, 5 as bnivel, 0 as difana, ]+; +*!* [id_sucursala, sucursala ] + ; +*!* [from ] + lcVBalana + + lcSelect = [select rpad(SUBSTR(cont,1,1), 4, CHR(32)) as g1, rpad(SUBSTR(cont,1,2), 4, CHR(32)) as g2, rpad(SUBSTR(cont,1,3),4,CHR(32)) as g3,]+; + [cont as g4, cont, acont, MAX(id_balana) as id_bal, denumire, ] + ; + [cont_alt, cod, ] + ; + [SUM(case when an*12+luna = ] +Alltrim(Str(lnAn1*12+lnLuna1)) + [ then precdeb else 0 end) as precdeb, ] + ; + [SUM(case when an*12+luna = ] +Alltrim(Str(lnAn1*12+lnLuna1)) + [ then preccred else 0 end) as preccred, ] + ; + [SUM(ruldeb) as ruldeb, SUM(rulcred) as rulcred, ]+; + [SUM(case when an*12+luna = ] +Alltrim(Str(lnAn2*12+lnLuna2)) + [ then totdeb else 0 end) as totdeb, ] + ; + [SUM(case when an*12+luna = ] +Alltrim(Str(lnAn2*12+lnLuna2)) + [ then totcred else 0 end ) as totcred, ] + ; + [SUM(case when an*12+luna = ] +Alltrim(Str(lnAn2*12+lnLuna2)) + [ then solddeb else 0 end) as solddeb, ] + ; + [SUM(case when an*12+luna = ] +Alltrim(Str(lnAn2*12+lnLuna2)) + [ then soldcred else 0 end ) as soldcred, ] + ; + [SUM(case when an*12+luna = ] +Alltrim(Str(lnAn1*12+lnLuna1)) + [ then precdeb1 else 0 end) as precdeb1, ] + ; + [SUM(case when an*12+luna = ] +Alltrim(Str(lnAn1*12+lnLuna1)) + [ then preccred1 else 0 end) as preccred1, ] + ; + [5 as bnivel, 0 as difana, id_sucursala, sucursala ] + ; + [from ] + lcVBalana + *!* 25.01.2011 ^ + lcFiltru = [] + lcOrder = [] + lcSchema = [] + llAfisare=.F. + lcGroup = [cont, acont, denumire, cont_alt, cod, id_sucursala, sucursala] + llModParam = .T. + lcFiltruOriginal=[AN * 12 + LUNA BETWEEN ] +Alltrim(Str(lnAn1*12+lnLuna1)) + [ AND ] + Alltrim(Str(lnAn2*12+lnLuna2)) + gcCondSucursala + + gencursor('potbal2','tbal2', lcSelect, lcFiltru, lcSchema1, lcOrder, llAfisare, lcGroup, llModParam, lcFiltruOriginal) + potbal2.ca_baza1.afisare() + Endif + + Local lcBal1 + lcBal1 = 'TBAL1' + + *!* 12.02.2008 + && daca sunt pe o mama - cumulez balantele de pe sucursale + && TOTALURILE PE CLASE, GRUPE LE FAC PE BALANTA CENTRALIZATA && TG01 in loc de TBAL1 + If glEMama + + *!* 07.03.2008 + *!* SELECTEZ CONT, PRECDEB, PRECCRED CENTRALIZATE + *!* SELECTEZ PRECDEB, PRECCRED DIN CURSOR SI RULAJELE DIN SUMA(SUCURSALE.RULAJE) + *!* DACA FAC DOAR SUMA(PRECDEB), SUMA(PRECCRED) DIN SUCURSALE PIERD SOLDAREA SUMELOR LA 1 IANUARIE + + *!* 01.04.2008 + *!* am luat sum(precdeb1) din luna curenta in loc de sum(precdeb) din luna ianuarie + TEXT to lcSql TEXTMERGE noshow +select nvl(a.cont, b.cont) as cont, +case when Nvl(a.precdeb,0) > Nvl(a.preccred,0) then abs(Nvl(a.precdeb,0)-Nvl(a.preccred,0)) else 0 end + nvl(b.debit,0) as precdeb, +case when Nvl(a.precdeb,0) < Nvl(a.preccred,0) then abs(Nvl(a.precdeb,0)-Nvl(a.preccred,0)) else 0 end + nvl(b.credit,0) as preccred +from +(select cont, sum(precdeb1) as precdeb, sum(preccred1) as preccred + from bal + where an = <> + and luna = <> + group by cont) a full join +(select cont, sum((case when 2005*12+7> an*12+luna + and 2005*12+7<=pack_sesiune.getan()*12+pack_sesiune.getluna() + then ROUND(ruldeb / 10000,2) else ruldeb end)) as debit, sum((case when 2005*12+7> an*12+luna + and 2005*12+7<=pack_sesiune.getan()*12+pack_sesiune.getluna() + then ROUND(rulcred / 10000,2) else rulcred end)) as credit + from bal + where an = <> + and luna between 1 and <> + group by cont) b on a.cont = b.cont + ENDTEXT + + lnSucces = goExecutor.oExecute(lcSql, "crsBalPrecedente") + If lnSucces < 0 + aMESSAGEBOX(goExecutor.cEroare) + Create Cursor crsBalPrecedente (Cont c(4), precdeb N(10,2), preccred N(10,2)) + Endif + + TEXT to lcSql TEXTMERGE noshow +select nvl(a.cont, b.cont) as cont, nvl(a.acont, b.acont) as acont, +case when Nvl(a.precdeb,0) > Nvl(a.preccred,0) then abs(Nvl(a.precdeb,0)-Nvl(a.preccred,0)) else 0 end + nvl(b.debit,0) as precdeb, +case when Nvl(a.precdeb,0) < Nvl(a.preccred,0) then abs(Nvl(a.precdeb,0)-Nvl(a.preccred,0)) else 0 end + nvl(b.credit,0) as preccred +from +(select cont, acont, sum(precdeb1) as precdeb, sum(preccred1) as preccred + from balana + where an = <> + and luna = <> + group by cont,acont) a full join +(select cont, acont, sum((case when 2005*12+7> an*12+luna + and 2005*12+7<=pack_sesiune.getan()*12+pack_sesiune.getluna() + then ROUND(ruldeb / 10000,2) else ruldeb end)) as debit, sum((case when 2005*12+7> an*12+luna + and 2005*12+7<=pack_sesiune.getan()*12+pack_sesiune.getluna() + then ROUND(rulcred / 10000,2) else rulcred end)) as credit + from balana + where an = <> + and luna between 1 and <> + group by cont,acont) b on a.cont = b.cont and a.acont = b.acont + ENDTEXT + + lnSucces = goExecutor.oExecute(lcSql, "crsBalanaPrecedente") + If lnSucces < 0 + aMESSAGEBOX(goExecutor.cEroare) + Create Cursor crsBalanaPrecedente (Cont c(4), acont c(4), precdeb N(10,2), preccred N(10,2)) + Endif + + + Sele G1, G2, G3, G4,; + Cont, acont, 0000000000000 As id_bal, denumire, ; + cont_alt, cod, ; + SUM(precdeb) As precdeb, Sum(preccred) As preccred,; + SUM(ruldeb) As ruldeb, Sum(rulcred) As rulcred, Sum(totdeb) As totdeb, Sum(totcred) As totcred,; + SUM(solddeb) As solddeb, Sum(soldcred)As soldcred, ; + SUM(precdeb1) As precdeb1, Sum(preccred1) As preccred1,; + 6 As bnivel, Max(difana) As difana, ; + 00000 As id_sucursala, Space(100) As sucursala ; + FROM tbal1 ; + GROUP By G1, G2, G3, G4, Cont, acont, denumire, cont_alt, cod ; + INTO Cursor TG01a Readwrite + + Sele G1, G2, G3, G4,; + Cont, acont, 0000000000000 As id_bal, denumire, ; + cont_alt, cod, ; + SUM(precdeb) As precdeb, Sum(preccred) As preccred,; + SUM(ruldeb) As ruldeb, Sum(rulcred) As rulcred, Sum(totdeb) As totdeb, Sum(totcred) As totcred,; + SUM(solddeb) As solddeb, Sum(soldcred)As soldcred, ; + SUM(precdeb1) As precdeb1, Sum(preccred1) As preccred1,; + 7 As bnivel, 0 As difana, ; + 00000 As id_sucursala, Space(100) As sucursala ; + FROM tbal2 ; + GROUP By G1, G2, G3, G4, Cont, acont, denumire, cont_alt, cod ; + INTO Cursor TG02a Readwrite + + *** BALANTA SINTETICA CENTRALIZATA + Sele a.G1, a.G2, a.G3, a.G4,; + a.Cont, a.acont, a.id_bal, a.denumire, ; + a.cont_alt, a.cod, ; + Nvl(b.precdeb, Cast(0 As N(16,4))) As precdeb, Nvl(b.preccred, Cast(0 As N(16,4))) As preccred,; + a.ruldeb, a.rulcred, Nvl(b.precdeb,0)+a.ruldeb As totdeb, Nvl(b.preccred,0)+a.rulcred As totcred,; + Iif(Nvl(b.precdeb,0)+a.ruldeb > Nvl(b.preccred,0)+a.rulcred, Abs(Nvl(b.precdeb,0)+a.ruldeb - Nvl(b.preccred,0) - a.rulcred), Cast(0 As N(16,4))) As solddeb, ; + Iif(Nvl(b.precdeb,0)+a.ruldeb < Nvl(b.preccred,0)+a.rulcred, Abs(Nvl(b.precdeb,0)+a.ruldeb - Nvl(b.preccred,0) - a.rulcred), Cast(0 As N(16,4))) As soldcred, ; + Iif(a.precdeb1 > a.preccred1, Abs(a.precdeb1-a.preccred1), Cast(0 As N(16,4))) As precdeb1, ; + Iif(a.precdeb1 < a.preccred1, Abs(a.precdeb1-a.preccred1), Cast(0 As N(16,4))) As preccred1, ; + a.bnivel, a.difana, ; + a.id_sucursala, a.sucursala ; + FROM TG01a a Left Join crsBalPrecedente b On a.Cont = b.Cont ; + INTO Cursor TG01 Readwrite + + *** BALANTA ANALITICA CENTRALIZATA + Sele a.G1, a.G2, a.G3, a.G4,; + a.Cont, a.acont, a.id_bal, a.denumire, ; + a.cont_alt, a.cod, ; + Nvl(b.precdeb, Cast(0 As N(16,4))) As precdeb, Nvl(b.preccred, Cast(0 As N(16,4))) As preccred,; + a.ruldeb, a.rulcred, Nvl(b.precdeb,0)+a.ruldeb As totdeb, Nvl(b.preccred,0)+a.rulcred As totcred,; + Iif(Nvl(b.precdeb,0)+a.ruldeb > Nvl(b.preccred,0)+a.rulcred, Abs(Nvl(b.precdeb,0)+a.ruldeb - Nvl(b.preccred,0) - a.rulcred), Cast(0 As N(16,4))) As solddeb, ; + Iif(Nvl(b.precdeb,0)+a.ruldeb < Nvl(b.preccred,0)+a.rulcred, Abs(Nvl(b.precdeb,0)+a.ruldeb - Nvl(b.preccred,0) - a.rulcred), Cast(0 As N(16,4))) As soldcred, ; + Iif(a.precdeb1 > a.preccred1, Abs(a.precdeb1-a.preccred1), Cast(0 As N(16,4))) As precdeb1, ; + Iif(a.precdeb1 < a.preccred1, Abs(a.precdeb1-a.preccred1), Cast(0 As N(16,4))) As preccred1, ; + a.bnivel, a.difana, ; + a.id_sucursala, a.sucursala ; + FROM TG02a a Left Join crsBalanaPrecedente b On a.Cont = b.Cont And a.acont = b.acont ; + INTO Cursor TG02 Readwrite + + *!* 07.03.2008 ^ + + lcBal1 = 'tg01' + Else + Sele G1, G2, G3, G4,; + Cont, acont, 0000000000000 As id_bal, denumire, ; + cont_alt, cod, ; + SUM(precdeb) As precdeb, Sum(preccred) As preccred,; + SUM(ruldeb) As ruldeb, Sum(rulcred) As rulcred, Sum(totdeb) As totdeb, Sum(totcred) As totcred,; + SUM(solddeb) As solddeb, Sum(soldcred)As soldcred, ; + SUM(precdeb1) As precdeb1, Sum(preccred1) As preccred1,; + 5 As bnivel, Max(difana) As difana, ; + 00000 As id_sucursala, Space(100) As sucursala ; + FROM tbal1 ; + WHERE .F. ; + GROUP By G1, G2, G3, G4, Cont, acont, denumire, cont_alt, cod ; + INTO Cursor TG01 + + Sele G1, G2, G3, G4,; + Cont, acont, 0000000000000 As id_bal, denumire, ; + cont_alt, cod, ; + SUM(precdeb) As precdeb, Sum(preccred) As preccred,; + SUM(ruldeb) As ruldeb, Sum(rulcred) As rulcred, Sum(totdeb) As totdeb, Sum(totcred) As totcred,; + SUM(solddeb) As solddeb, Sum(soldcred)As soldcred, ; + SUM(precdeb1) As precdeb1, Sum(preccred1) As preccred1,; + 5 As bnivel, 0 As difana, ; + 00000 As id_sucursala, Space(100) As sucursala ; + FROM tbal2 ; + WHERE .F. ; + GROUP By G1, G2, G3, G4, Cont, acont, denumire, cont_alt, cod ; + INTO Cursor TG02 + + lcBal1 = 'tbal1' + Endif + *!* 12.02.2008 ^ + + + Sele G1, Space(4) As G2, Space(4) As G3, Space(4) As G4,; + SPACE(4) As Cont, Space(4) As acont, 0000000000000 As id_bal, Padr("TOTAL "+Alltrim(G1),30," ") As denumire, ; + SPACE(20) As cont_alt, Space(20) As cod, ; + SUM(precdeb) As precdeb, Sum(preccred) As preccred,; + SUM(ruldeb) As ruldeb, Sum(rulcred) As rulcred, Sum(totdeb) As totdeb, Sum(totcred) As totcred,; + SUM(solddeb) As solddeb, Sum(soldcred)As soldcred, ; + SUM(precdeb1) As precdeb1, Sum(preccred1) As preccred1,; + 1 As bnivel, 0 As difana, ; + 00000 As id_sucursala, Space(100) As sucursala ; + FROM &lcBal1; + GROUP By G1 ; + INTO Cursor TG1 + + Sele G1, G2, Space(4) As G3, Space(4) As G4, ; + SPACE(4) As Cont, Space(4) As acont, 0000000000000 As id_bal, Padr("TOTAL "+Alltrim(G2),30," ")As denumire, ; + SPACE(20) As cont_alt, Space(20) As cod, ; + SUM(precdeb) As precdeb, Sum(preccred) As preccred, ; + SUM(ruldeb) As ruldeb, Sum(rulcred) As rulcred, Sum(totdeb) As totdeb, Sum(totcred) As totcred,; + SUM(solddeb) As solddeb, Sum(soldcred) As soldcred, ; + SUM(precdeb1) As precdeb1, Sum(preccred1) As preccred1, ; + 2 As bnivel, 0 As difana, ; + 00000 As id_sucursala, Space(100) As sucursala ; + FROM &lcBal1 ; + GROUP By G1, G2 ; + INTO Cursor TG2 + + Sele G1, G2, G3, Space(4) As G4,; + SPACE(4) As Cont, Space(4) As acont, 0000000000000 As id_bal, Padr("TOTAL "+Alltrim(G3),30," ") As denumire, ; + SPACE(20) As cont_alt, Space(20) As cod, ; + SUM(precdeb) As precdeb, Sum(preccred) As preccred,; + SUM(ruldeb) As ruldeb, Sum(rulcred) As rulcred, Sum(totdeb) As totdeb, Sum(totcred) As totcred,; + SUM(solddeb) As solddeb, Sum(soldcred) As soldcred, ; + SUM(precdeb1) As precdeb1, Sum(preccred1) As preccred1,; + 3 As bnivel, 0 As difana, ; + 00000 As id_sucursala, Space(100) As sucursala ; + FROM &lcBal1 ; + GROUP By G1, G2, G3 ; + INTO Cursor TG3 + + * 20 de caractere la cont, acont pentru ca completez ulterior cu cont_alt C(20) + Select g1,g2,g3,g4,PADR(cont,20, ' ') cont,PADR(acont, 20, ' ') acont,id_bal,denumire,cont_alt,cod,precdeb1,preccred1,precdeb,preccred,ruldeb,rulcred,totdeb,totcred,solddeb,soldcred,bnivel,difana,id_sucursala,sucursala, .F. As bifa, Space(8) As g5 From TG01 ; && BALANTA SINTETICA CENTRALIZATA / SAU CURSOR GOL + Union ; + Select g1,g2,g3,g4,PADR(cont,20, ' ') cont,PADR(acont, 20, ' ') acont,id_bal,denumire,cont_alt,cod,precdeb1,preccred1,precdeb,preccred,ruldeb,rulcred,totdeb,totcred,solddeb,soldcred,bnivel,difana,id_sucursala,sucursala, .F. As bifa, Space(8) As g5 From tbal1 ; && BALANTA SINTETICA CU TOATE INREGISTRARILE + Union ; + SELECT g1,g2,g3,g4,PADR(cont,20, ' ') cont,PADR(acont, 20, ' ') acont,id_bal,denumire,cont_alt,cod,precdeb1,preccred1,precdeb,preccred,ruldeb,rulcred,totdeb,totcred,solddeb,soldcred,bnivel,difana,id_sucursala,sucursala, .F. As bifa, Space(8) As g5 From TG3 ; && TOTALURI GRUPA 3 DIN BALANTA CENTRALIZATA / SUCURSALA / FIRMA INDEPENDENTA + Union ; + SELECT g1,g2,g3,g4,PADR(cont,20, ' ') cont,PADR(acont, 20, ' ') acont,id_bal,denumire,cont_alt,cod,precdeb1,preccred1,precdeb,preccred,ruldeb,rulcred,totdeb,totcred,solddeb,soldcred,bnivel,difana,id_sucursala,sucursala, .F. As bifa, Space(8) As g5 From TG2 ; && TOTALURI GRUPA 2 DIN BALANTA CENTRALIZATA / SUCURSALA / FIRMA INDEPENDENTA + Union ; + SELECT g1,g2,g3,g4,PADR(cont,20, ' ') cont,PADR(acont, 20, ' ') acont,id_bal,denumire,cont_alt,cod,precdeb1,preccred1,precdeb,preccred,ruldeb,rulcred,totdeb,totcred,solddeb,soldcred,bnivel,difana,id_sucursala,sucursala, .F. As bifa, Space(8) As g5 From TG1 ; && TOTALURI GRUPA 1 DIN BALANTA CENTRALIZATA / SUCURSALA / FIRMA INDEPENDENTA + Union ; + SELECT g1,g2,g3,g4,PADR(cont,20, ' ') cont,PADR(acont, 20, ' ') acont,id_bal,denumire,cont_alt,cod,precdeb1,preccred1,precdeb,preccred,ruldeb,rulcred,totdeb,totcred,solddeb,soldcred,bnivel,difana,id_sucursala,sucursala, .F. As bifa, Space(8) As g5 From tbal2 ; && BALANTA ANALITICA CU TOATE INREGISTRARILE + Union ; + SELECT g1,g2,g3,g4,PADR(cont,20, ' ') cont,PADR(acont, 20, ' ') acont,id_bal,denumire,cont_alt,cod,precdeb1,preccred1,precdeb,preccred,ruldeb,rulcred,totdeb,totcred,solddeb,soldcred,bnivel,difana,id_sucursala,sucursala, .F. As bifa, Space(8) As g5 From TG02 ; && BALANTA ANALITICA CENTRALIZATA / SAU CURSOR GOL + ORDER By G1,G2,G3,G4,sucursala ; + Into Cursor tbalanta Readwrite + + + Use In tbal1 + Use In tbal2 + Use In TG01 + Use In TG02 + Use In TG1 + Use In TG2 + Use In TG3 + + Select tbalanta + Replace All g5 With Left(G1,1)+Substr(G2,2,1)+Substr(G3,3,1) + Replace All g5 With Allt(g5)+Iif(bnivel<4,'z',Substr(G4,4,1)) + Replace All g5 With Left(Alltrim(g5)+'xxxx',4)+acont + Replace All g5 With Left(Alltrim(g5)+'zzzzzzzz',8) + + * Completez contul alternativ + IF !m.tlNuContAlternativ + REPLACE ALL cont WITH cont_alt FOR EMPTY(NVL(acont,'')) AND !EMPTY(NVL(cont_alt,'')) && cont sintetic alternativ + REPLACE ALL acont WITH cont_alt FOR !EMPTY(NVL(acont,'')) AND !EMPTY(NVL(cont_alt,'')) && cont analitic alternativ + ENDIF + + *lcIndex = ADDBS(gcTempPath) + 'tbalanta.cdx' + lcIndex = Addbs(gcTempPath) + 'tbalanta_'+Alltrim(Sys(2))+'.cdx' && ca sa pot deschid balanta din cont si manager in acelasi timp + Index On g5 Tag g5 Of (lcIndex) + Set Order To g5 + + Return "TBALANTA" +Endproc && MAKE_TBALANTA +****************************************************************************************** +Procedure Eval_balanta + Parameters tnCurs + + If tnCurs = 0 + tnCurs = 1 + Endif + + Select tbalanta + + Repl All precdeb1 With Round(precdeb1/tnCurs,gnPval) + Repl All preccred1 With Round(preccred1/tnCurs,gnPval) + Repl All precdeb With Round(precdeb/tnCurs,gnPval) + Repl All preccred With Round(preccred/tnCurs,gnPval) + Repl All solddeb With Round(solddeb/tnCurs,gnPval) + Repl All soldcred With Round(soldcred/tnCurs,gnPval) + Repl All ruldeb With Round(ruldeb/tnCurs,gnPval) + Repl All rulcred With Round(rulcred/tnCurs,gnPval) + Repl All totdeb With Round(totdeb/tnCurs,gnPval) + Repl All totcred With Round(totcred/tnCurs,gnPval) + +Endproc && eval_balanta diff --git a/COMUN/programe/oparteneri.prg b/COMUN/programe/oparteneri.prg new file mode 100644 index 0000000..50135e7 --- /dev/null +++ b/COMUN/programe/oparteneri.prg @@ -0,0 +1,1108 @@ +*!* 29.04.2015 +*!* marius.mutu +*!* lans_ireg_parteneri - adaugare coloana RTVAI - pentru verificare RTVAI la cautare + +*!* 07.05.2018 +*!* lans_balanta_parteneri - includere cont 5081 depozite bancare la vizualizarea Solduri banci lei/valuta - acelasi cont si pentru lei si pentru valuta + +*!* 05.07.2018 +*!* marius.mutu +*!* lans_balanta_parteneri, IsCalendarInit - verificare inainte de pentru mai multe conturi (ex: solduri banci "5121,5081,5126") + +*!* 27.08.2018 +*!* marius.mutu +*!* lans_ireg_parteneri - corectare precvaldeb, precvalcred pentru cont de pasiv + +*!* 15.04.2020 +*!* marius.mutu +*!* lans_ireg_parteneri - adaugare coloane contvc, acontvc, id_mf pentru ratele de la 47x venituri/cheltuieli in avans + +*!* 24.10.2023 +*!* marius.mutu +*!* lans_ireg_parteneri, lans_balanta_parteneri: + categorie_entitate + +*!* APEL DE PROCEDURA +*!* DO lans_ireg_parteneri WITH tlTest,tcCont,tlActiv + +*----------------------------------------------------------- + +Procedure lans_ireg_parteneri + Parameters tlTest, tcCont, tlactiv, tlTitluTot, tcDenumire, tcDenDebit, tcDenCredit + *!* tlTitluTot = daca denumirea titlului este totala i.e.: Nu trebuie sa mai adaug Balanta parteneri + *!* tcDenumire = titlul balantei + *!* tcDenDebit = peste tot pe unde apare debit se va inlocui cu aceasta denumire + *!* tcDenCredit = peste tot pe unde apare credit se va inlocui cu aceasta denumire + Local lcCont, llActiv, llParametri, llTitluTot, lcDenumire, lcDenDebit, lcDenCredit, llAfisare + Local Ol As "frm_sel_cont" + Local Oreg As "FRM_IREG_PARTENERI" + Local lcFiltruOriginal, lcSqlCount, llAfisareTot, llSucces, lnInregistrariAfisare, lnsucces + Local loCont + *:Global buton, pcCont, tcFis2, tlVisible + Private pnRecCnt + + llParametri = .F. + + If Empty(tlTitluTot) + llTitluTot = .F. + Else + llTitluTot = tlTitluTot + Endif + + If Empty(tcDenumire) + lcDenumire = "" + Else + lcDenumire = tcDenumire + Endif + + If Empty(tcDenDebit) + lcDenDebit = "Debit" + Else + lcDenDebit = tcDenDebit + Endif + If Empty(tcDenCredit) + lcDenCredit = "Credit" + Else + lcDenCredit = tcDenCredit + Endif + + If !Empty(tcCont) + lcCont = Alltrim(tcCont) + Else + lcCont = '' + Endif + + If !Empty(tlactiv) + llActiv = tlactiv + Else + llActiv = .F. + Endif + + + llParametri = .F. + *If PCOUNT() = 3 + *!* IF !EMPTY(tlActiv) AND !EMPTY(tcCont) AND !EMPTY(tlActiv) + *!* llParametri = .T. + *!* Endif + If !Empty(tcCont) + llParametri = .T. + Endif + Local NOU, lnTdeb, lnTcred, lnSold, lcContPart, lclista + Store 0 To lnTdeb, lnTcred, lnSold + NOU = .T. + + If glPrimaLuna + NOU = .F. + Endif + + IF !USED('saft_tip_facturi') + update_saft_tip_facturi() + ENDIF + + Private plActiv + Store .T. To plActiv + Private eActiv + Store .T. To eActiv + If !llParametri + Private polista, pcschema1, pcselect1, pcfiltru1, pcorder1 + Store "" To polista + If Used('clista') + Use In clista + Endif + pcschema1 = ['cont c(4),acont c(4),explicatie c(50),fel_cont n(1)'] + pcselect1 = ['select cont,rpad(CHR(32),4,CHR(32)) as acont,explicatie,fel_cont from ] + gcS + [.config_cont_ireg where 1=2'] + pcfiltru1 = [cu_inregistrari=1] + pcorder1 = [cont] + llAfisare = .F. + gencursor('polista', 'clista', pcselect1, pcfiltru1, pcschema1, pcorder1, llAfisare) + polista.ca_baza1.afisare() + + Select clista + loCont = myscatter('blank') + + Ol = Createobject("frm_sel_cont") + With Ol + .Lb_titlu_alb_b121.Caption = 'Selectati contul' + If Empty(.cboCont.RowSource) + .cboCont.RowSource = "clista.cont,explicatie" + .cboCont.ColumnWidths = '40,150' + Endif + .ocont = loCont + If Empty(.cAlias) + .cAlias = Left(.cboCont.RowSource, At(".", .cboCont.RowSource) - 1) + Endif + .Height = 190 + .lHide = .T. + Endwith + Ol.Show(1) + eActiv = Iif(Ol.nFel_Cont = 0, .T., .F.) + Ol.Release + + If buton = 2 + Use In clista + Return + Endif + + lcContPart = loCont.Cont + If !llTitluTot And Empty(lcDenumire) + lcDenumire = "Inregistrari " + Alltrim(clista.explicatie) + "( " + lcContPart + " )" + Else + If !Empty(lcDenumire) And !llTitluTot + lcDenumire = "Inregistrari " + lcDenumire + "( " + lcContPart + " )" + Endif + Endif + Use In clista + plActiv = eActiv + llActiv = eActiv + Else + eActiv = llActiv + plActiv = llActiv + lcContPart = lcCont + If !llTitluTot And Empty(lcDenumire) + lcDenumire = "Inregistrari " + "( " + lcContPart + " )" + Else + If !Empty(lcDenumire) And !llTitluTot + lcDenumire = "Inregistrari " + lcDenumire + "( " + lcContPart + " )" + Endif + Endif + Endif + + + *** verificare INAINTE_DE + Do inainte With "IREG_PARTENERI", lcContPart In oinainte_de.prg + + If tlTest + Do test_ireg With lcContPart, llActiv + Endif + + pcCont = lcContPart + + Private poireg_parteneri + Local lcSelect, lcFiltru, lcSchema, lcOrder, lcGroup, llModParam, lcFiltruOrigina + poireg_parteneri = Null + Store '' To lcSelect, lcFiltru, lcSchema, lcOrder, llAfisare, lcGroup + + lcSchema = [id_ireg_part n(20),an n(4), luna n(2),ID_FACT N(20),id_part n(20),cont c(4),acont c(4), ID_VALUTA N(5), ID_VENCHELT N(5), PROC_TVA N(8,2),] + ; + [PRECDEB N(20,4),PRECCRED N(20,4),PRECVALDEB N(20,4),PRECVALCRED N(20,4),] + ; + [debit n(20,4),credit n(20,4),valdebit n(20,4), valcredit n(20,4),] + ; + [nract N(20),SERIE_ACT C(10),DATAACT D,DATAIREG D,DATASCAD D,CURS N(18,6),] + ; + [COD N(20),EXPLICATIA C(100),EXPLICATIA4 C(100),EXPLICATIA5 C(100),] + ; + [ID_RESPONSABIL N(10),ID_FDOC N(5),ID_LUCRARE N(10),ID_CTR N(5),ID_SET N(20),ID_ACT N(20),] + ; + [NUME C(100),COD_FISCAL C(30),FDOC C(50),NRESP C(50),NRORD C(50),CONTRACT C(30),NUME_VAL C(10),VENCHELT C(50),ID_JTVA_COLOANA N(4),EXPLICATIE_TVA C(100),] + ; + [ID_SUCURSALA N(5), SUCURSALA C(100), DATAREFPEN D, NRZILEPEN N(10), PROCPEN N(7,3), VALPEN N(20,4), DPRIMA_RATA D, DULTIMA_RATA D, RATA N(20,4), ] + ; + [CONTVC C(4), ACONTVC C(4), ID_MF I, DATA_OPERATIE D, TVAI N(1,0), COD_FISCALFRO C(30), ALES N(1), ] + ; + [CONT_BANCA C(30), BANCA C(100), SWIFT_BANCA C(11), ADRESA_BANCA C(150), TIP_SAFT N(3), TIP_SAFTNAME C(250),INSTITUTIE_PUBLICA N(1),ENTITATE_AFILIATA N(1),CATEGORIE_ENTITATE c(150)] + + lcSelect = [SELECT I.ID_IREG_PART, I.AN, I.LUNA, ID_FACT, I.ID_PART, I.CONT, I.ACONT, I.ID_VALUTA, I.ID_VENCHELT, I.PROC_TVA,] + ; + [I.PRECDEB, I.PRECCRED, I.PRECVALDEB, I.PRECVALCRED,] + ; + [I.DEBIT, I.CREDIT, I.VALDEBIT, I.VALCREDIT,] + ; + [I.NRACT, I.SERIE_ACT, I.DATAACT, I.DATAIREG, I.DATASCAD, I.CURS,] + ; + [I.COD, I.EXPLICATIA, I.EXPLICATIA4, I.EXPLICATIA5,] + ; + [I.ID_RESPONSABIL, I.ID_FDOC, I.ID_LUCRARE, I.ID_CTR,I.ID_SET, I.ID_ACT,] + ; + [I.NUME,I.COD_FISCAL,I.FDOC,I.NRESP,I.NRORD,I.CONTRACT,I.NUME_VAL,I.VENCHELT, I.ID_JTVA_COLOANA, I.EXPLICATIE_TVA,] + ; + [I.ID_SUCURSALA,I.SUCURSALA, ] + ; + [CAST(NULL AS DATE) AS DATAREFPEN, CAST(0 AS NUMBER(10)) AS NRZILEPEN, CAST(0.000 AS NUMBER(6,3)) AS PROCPEN, CAST(0.0000 AS NUMBER(20,4)) AS VALPEN, ] + ; + [DPRIMA_RATA, DULTIMA_RATA, RATA, CONTVC, ACONTVC, ID_MF, DATA_OPERATIE, ] + ; + "0 as TVAI, REGEXP_REPLACE(I.COD_FISCAL, '[^[:digit:]]', '') AS COD_FISCALFRO, 0 as ALES, " + ; + "I.CONT_BANCA, I.BANCA, I.SWIFT_BANCA, I.ADRESA_BANCA, I.TIP_SAFT, I.TIP_SAFTNAME,I.INSTITUTIE_PUBLICA,I.ENTITATE_AFILIATA,I.CATEGORIE_ENTITATE " + ; + [ FROM VIREG_PARTENERI I] + + * Calculez numarul de inregistrari. Daca numarul este mai mic de min(500, gnInregistrariAfisare) afisez toate inregistrarile in loc sa intru cu 1=2 + lnInregistrariAfisare = Iif(Type('gnInregistrariAfisare') = 'N', m.gnInregistrariAfisare, 500) + + lcSqlCount = [SELECT COUNT(*) as nr FROM ireg_parteneri where an=?gnAn and luna=?gnLuna and CONT in ('] + Alltrim(Strtran(m.lcContPart, [,], [','])) + [') ] + pnRecCnt = 0 + llSucces = goExecutor.oSelecteaza2Value(m.lcSqlCount, @pnRecCnt) + llAfisareTot = (Nvl(m.pnRecCnt, 0) <= m.lnInregistrariAfisare) + + lcFiltru = [1=2] + lcOrder = [dataact] + llAfisare = .F. + llModParam = .T. + lcFiltruOriginal = [] + && DACA SUNT PE O SUCURSALA - SELECTEZ DOAR INREGISTRARILE DE PE SUCURSALA CURENTA + If !Isnull(gnIdSucursala) + lcFiltruOriginal = Substr(gcCondSucursala, 6) + Endif + + *!* pcfiltru1 = [cont = '] + Alltrim(pcCont) + [' and luna = ] + Alltrim(Str(gnLuna)) + [ and an = ] + Alltrim(Str(gnAn)) + gencursor('poireg_parteneri', 'actcv', lcSelect, lcFiltru, lcSchema, lcOrder, llAfisare, lcGroup, llModParam, lcFiltruOriginal) + *!* PARAMETERS tcnume, tcalias, tcselect, tcfiltru, tcschema, tcorder, tlAfisare, tcgroup, tlModParam, tcFiltruOriginal + poireg_parteneri.ca_baza1.afisare() + + + Select actcv + tcFis2 = "ActCv" + tlVisible = .T. + + Local c + c = "nume+ALLTRIM(STR(YEAR(dataact)))+RIGHT('0'+ALLTRIM(STR(MONTH(dataact))),2)+RIGHT('0'+ALLTRIM(STR(DAY(dataact))),2)" + buton = 1 + + Sele actcv + + + Private pcAnalitic, pcLucrare + Store '' To pcAnalitic, pcLucrare + + lnsucces = update_jtva_coloane(, "jtva_temp") + + + Select actcv + Oreg = Createobject("FRM_IREG_PARTENERI", m.llAfisareTot) + *DO FORM frm_ireg_parteneri NAME oreg noshow + + Select actcv + With Oreg + .lActiv = plActiv + .cCont = lcContPart + *!* .LABEL10.Caption=Proper(tctitlu)&&& trebuie facut + .Lb_titlu_alb_b121.Caption = Proper(lcDenumire) + .grid1.cTotCred.Visible = .T. + .Cont = Allt(pcCont) + .fisier = Alltrim(tcFis2) + *.Ck_valuta.VISIBLE = tlVisible + *.CK_explicatia.VISIBLE = tlVisible + *.ck_scadente.VISIBLE = tlVisible + * .CHECK9.VISIBLE = tlVisible + .grid1.cDataScad.Visible = tlVisible + .grid1.cTotDebVal.Visible = tlVisible + .grid1.cTotCredVal.Visible = tlVisible + .grid1.cSoldVal.Visible = tlVisible + .grid1.cNume_val.Visible = tlVisible + .grid1.cCurs.Visible = tlVisible + .grid1.cExplicatia.Visible = tlVisible + .grid1.cCod_fiscal.Visible = tlVisible && 24.02.09 + If !tlVisible + .CHECK3.Caption = 'Regularizate' + .CHECK4.Caption = 'Neregularizate' + .check10.Caption = 'Regularizat' + .grid1.cTotCred.header1.Caption = 'Regularizat' + .grid1.cDataScad.Width = 0 + Endif + If !plActiv + + .grid1.cSoldFinal.ControlSource = "(Preccred+credit)-(precdeb+debit)" + .grid1.cSoldVal.ControlSource = "(precvalcred+valcredit)-(precvaldeb+valdebit)" + *.ck_sold.camp_nume = "credit+preccred-precdeb-debit" + .grid1.cTotDeb.ControlSource = "preccred+credit" + .grid1.cTotCred.ControlSource = "precdeb+debit" + .grid1.cTotDebVal.ControlSource = "precvalcred+valcredit" + .grid1.cTotCredVal.ControlSource = "precvaldeb+valdebit" + .grid1.cDebit.ControlSource = "credit" + .grid1.cCredit.ControlSource = "debit" + .grid1.cValDebit.ControlSource = "valcredit" + .grid1.cValCredit.ControlSource = "valdebit" + .grid1.cPrecDeb.ControlSource = "preccred" + .grid1.cPrecCred.ControlSource = "precdeb" + .grid1.cPrecValDeb.ControlSource = "precvalcred" + .grid1.cPrecValCred.ControlSource = "precvaldeb" + + .grid1.cTotDeb.header1.Caption = "Total " + lcDenCredit + .grid1.cTotCred.header1.Caption = "Total " + lcDenDebit + .grid1.cTotDebVal.header1.Caption = "Total " + lcDenCredit + " valuta" + .grid1.cTotCredVal.header1.Caption = "Total " + lcDenDebit + " valuta" + .grid1.cDebit.header1.Caption = lcDenCredit + .grid1.cCredit.header1.Caption = lcDenDebit + .grid1.cValDebit.header1.Caption = lcDenCredit + " valuta" + .grid1.cValCredit.header1.Caption = lcDenDebit + " valuta" + .grid1.cPrecDeb.header1.Caption = "Prec " + lcDenCredit + .grid1.cPrecCred.header1.Caption = "Prec " + lcDenDebit + .grid1.cPrecValDeb.header1.Caption = "Prec Valuta " + lcDenCredit + .grid1.cPrecValCred.header1.Caption = "Prec Valuta " + lcDenDebit + Else + .grid1.cSoldFinal.ControlSource = "(precdeb+debit)-(preccred+credit)" + .grid1.cSoldVal.ControlSource = "(precvaldeb+valdebit)-(precvalcred+valcredit)" + *.ck_sold.camp_nume = "precdeb+debit-credit-preccred" + .grid1.cTotDeb.header1.Caption = "Total " + lcDenDebit + .grid1.cTotCred.header1.Caption = "Total " + lcDenCredit + .grid1.cTotDebVal.header1.Caption = "Total " + lcDenDebit + " valuta" + .grid1.cTotCredVal.header1.Caption = "Total " + lcDenCredit + " valuta" + .grid1.cDebit.header1.Caption = lcDenDebit + .grid1.cCredit.header1.Caption = lcDenCredit + .grid1.cValDebit.header1.Caption = lcDenDebit + " valuta" + .grid1.cValCredit.header1.Caption = lcDenCredit + " valuta" + .grid1.cPrecDeb.header1.Caption = "Prec " + lcDenDebit + .grid1.cPrecCred.header1.Caption = "Prec " + lcDenCredit + .grid1.cPrecValDeb.header1.Caption = "Prec Valuta " + lcDenDebit + .grid1.cPrecValCred.header1.Caption = "Prec Valuta " + lcDenCredit + Endif + If Type('pcTotctva') # 'U' And Type('pcAchitat') # 'U' + .grid1.cTotCred.header1.Caption = pcAchitat + .grid1.cTotDeb.header1.Caption = pcTotctva + Endif + If Type('pcSumaTotal') # 'U' And Type('pcSumaAchi') # 'U' + .CHECK13.Caption = pcSumaTotal + .check10.Caption = pcSumaAchi + Endif + If Type('actcv.nresp') # 'U' + .grid1.cNresp.Visible = .T. + .grid1.cNresp.ControlSource = 'nresp' + *.Ck_responsabil.VISIBLE = .T. + Endif + *!* IF plActiv + *!* .grid1.SETALL("DynamicForeColor", "IIF(ABS((preccred+credit)-(precdeb+debit))=0,RGB(0,0,0), iif(((precdeb+debit) < (preccred+credit)),RGB(255,0,0),RGB(0,0,255)))", "Column") + *!* ELSE + *!* .grid1.SETALL("DynamicForeColor", "IIF(ABS((preccred+credit)-(precdeb+debit))=0,RGB(0,0,0), iif(((precdeb+debit) > (preccred+credit)),RGB(255,0,0),RGB(0,0,255)))", "Column") + *!* ENDIF + If plActiv + .grid1.SetAll("DynamicForeColor", "IIF(ABS((preccred+credit)-(precdeb+debit))=0,RGB(0,0,0), iif(((precdeb+debit) < (preccred+credit)), RGB(166,0,0), RGB(0,89,168)))", "Column") + Else + .grid1.SetAll("DynamicForeColor", "IIF(ABS((preccred+credit)-(precdeb+debit))=0,RGB(0,0,0), iif(((precdeb+debit) > (preccred+credit)), RGB(166,0,0), RGB(0,89,168)))", "Column") + Endif + + Endwith + Oreg.Show(1) + *!* Select actcv + *!* If Used('actcv') + *!* Use In actcv + *!* Endif + *!* Release ofis + Release Oreg + Use In actcv + Use In jtva_temp + +Endproc && lans_ireg_parteneri +*--------------------------------------------------------------------------------- + +Procedure lans_balanta_parteneri + Lparameters tcCont, tlactiv, tlTitluTot, tcDenumire, tcDenDebit, tcDenCredit, tnCurs, tcValuta &&initital cu 2 parametrii + *!* tcCont: "4111" sau "5121,5126,5081" + *!* tlTitluTot = daca denumirea titlului este totala i.e.: Nu trebuie sa mai adaug Balanta parteneri + *!* tcDenumire = titlul balantei + *!* tcDenDebit = peste tot pe unde apare debit se va inlocui cu aceasta denumire + *!* tcDenCredit = peste tot pe unde apare credit se va inlocui cu aceasta denumire + + Local llParametri, lcCont, llActiv, llTitluTot, lcDenumire, lcDenDebit, lcDenCredit, lnConturi, lnCont + Local OVIZ As "frm_bal_parteneri" + Local Ol As "frm_sel_cont" + Local lcFiltruOriginal, lcGroup, lcSchema, lcSqlCount, lcViz, llAfisare, llAfisareTot + Local llModParam, llSucces, lnInregistrariAfisare, lnSemn, loCont + *:Global gcAcces, i, + PRIVATE pnRecCnt + + llParametri = .F. + lcCont = '' + llActiv = .F. + If Empty(tlTitluTot) + llTitluTot = .F. + Else + llTitluTot = tlTitluTot + Endif + + If Empty(tcDenumire) + lcDenumire = "" + Else + lcDenumire = tcDenumire + Endif + + If Empty(tcDenDebit) + lcDenDebit = "Debit" + Else + lcDenDebit = tcDenDebit + Endif + If Empty(tcDenCredit) + lcDenCredit = "Credit" + Else + lcDenCredit = tcDenCredit + Endif + *!* IF PCOUNT() < 2 + If Empty(tcCont) And Empty(tlactiv) + llParametri = .F. + Else + llParametri = .T. + lcCont = Alltrim(tcCont) + llActiv = tlactiv + Endif + + Local NOU, lnTdeb, lnTcred, lnSold, lcContPart, lclista + Store 0 To lnTdeb, lnTcred, lnSold + NOU = .T. + + If .F. + Select calendar + Go Top + If an = pcAn And NL = pcNl + NOU = .F. + Endif + Endif + *!* IF glPrimaLuna + *!* nou = .F. + *!* ENDIF + + Private polista, pcschema1, pcselect1, pcfiltru1, pcorder1 + Store "" To polista + + + If !llParametri + + If Used('clista') + Use In clista + Endif + + pcschema1 = ['cont c(4),acont c(4),explicatie c(50),fel_cont n(1)'] + pcselect1 = ['select cont,rpad(CHR(32),4,CHR(32)) as acont,explicatie,fel_cont from ] + gcS + [.config_cont_ireg where 1=2'] + *!* pcschema1=['cont c(4),acont c(4),explicatie c(50)'] + *!* pcselect1=['select distinct cont,rpad(CHR(32),4,CHR(32)) as acont,explicatie from ]+gcS+[.vcoresp_tip_cont where 1=2'] + pcfiltru1 = [2=2] + pcorder1 = [cont] + llAfisare = .F. + gencursor('polista', 'clista', pcselect1, pcfiltru1, pcschema1, pcorder1, llAfisare) + polista.ca_baza1.afisare() + + *!* SELECT DISTINCT cont, '' as acont FROM coresp_tip_cont INTO CURSOR clista + Select clista + loCont = myscatter('blank') + + Private eActiv + Store .T. To eActiv + + Ol = Createobject("frm_sel_cont") + With Ol + .Lb_titlu_alb_b121.Caption = 'Selectati contul' + If Empty(.cboCont.RowSource) + .cboCont.RowSource = "clista.cont,explicatie" + .cboCont.ColumnWidths = '40,150' + Endif + .ocont = loCont + If Empty(.cAlias) + .cAlias = Left(.cboCont.RowSource, At(".", .cboCont.RowSource) - 1) + Endif + .Height = 190 + .lHide = .T. + Endwith + Ol.Show(1) + eActiv = Iif(Ol.nFel_Cont = 0, .T., .F.) + Ol.Release + + If buton = 2 + Use In clista + Return + Endif + + lcContPart = loCont.Cont + If !llTitluTot And Empty(lcDenumire) + lcDenumire = "Balanta " + Alltrim(clista.explicatie) + "( " + lcContPart + " )" + Else + If !Empty(lcDenumire) And !llTitluTot + lcDenumire = "Balanta " + lcDenumire + "( " + lcContPart + " )" + Endif + Endif + Use In clista + Else + lcContPart = lcCont + eActiv = llActiv + + If !llTitluTot And Empty(lcDenumire) + lcDenumire = "Balanta " + "( " + lcContPart + " )" + Else + If !Empty(lcDenumire) And !llTitluTot + lcDenumire = xc + Endif + Endif + Endif + + If eActiv + lnSemn = -1 + Else + lnSemn = 1 + Endif + + + *** verificare INAINTE_DE + lnConturi = Getwordcount(m.lcContPart, ",") && "4111" sau "5121,5126,5081" + For lnCont = 1 To lnConturi + Do inainte With "BALANTA_parteneri", Getwordnum(m.lcContPart, m.lnCont, ",") In oinainte_de.prg + Endfor + + Private pobalpartext, pobalparttot + Local lcSelect, lcSchemaTot, lcSchemaExt, lcFiltru, lcOrder + *!* PRIVATE pobalpartint,pcschema3,pcselect3,pcfiltru3,pcorder3,pcgroup3 + + Store Null To pobalpartext, pobalparttot + + lcSchema = [ID_BAL_PART N(20), PRECDEB1 N(19,2),PRECCRED1 N(19,2),PRECDEB N(19,2),PRECCRED N(19,2), ] + ; + [DEB N(19,2),CRED N(19,2),PRECVALDEB1 N(19,2),PRECVALCRED1 N(19,2),PRECVALDEB N(19,2), ] + ; + [PRECVALCRED N(19,2),VALDEBIT N(19,2),VALCREDIT N(19,2),NUME_VAL C(5),ID_PART N(10), ] + ; + [NUME C(50),COD_FISCAL C(30),REG_COMERT C(20),CONT C(4),ACONT C(4),AN N(4),LUNA N(2),TOTCRED N(19,2),TOTDEB N(19,2), ] + ; + [TOTVALCRED N(19,2),TOTVALDEB N(19,2),ID_VALUTA N(5),ID_SUCURSALA N(5),SUCURSALA C(100),] + ; + [SOLDPREC1 N(19,2),SOLDPREC N(19,2),SOLD N(19,2),SOLDFINAL N(19,2),RULANDEB N(19,2),RULANCRED N(19,2),RULANPDEB N(19,2),RULANPCRED N(19,2),SOLDPRECVAL N(19,2),SOLDFINALVAL N(19,2),] + ; + [CONT_BANCA C(32), BANCA C(100), SWIFT_BANCA C(100), ADRESA_BANCA C(250), CATEGORIE_ENTITATE C(150),] + ; + [ADRESA C(250), TELEFON C(250), EMAIL C(100)] + + lcSelect = [select p.ID_BAL_PART, p.PRECDEB1,p.PRECCRED1,p.PRECDEB,p.PRECCRED, ] + ; + [p.DEBIT as DEB,p.CREDIT as CRED,p.PRECVALDEB1,p.PRECVALCRED1,p.PRECVALDEB, ] + ; + [p.PRECVALCRED,p.VALDEBIT,p.VALCREDIT,p.NUME_VAL,p.ID_PART, ] + ; + [p.NUME,p.COD_FISCAL,p.reg_comert,p.CONT,p.ACONT,p.AN,p.LUNA, ] + ; + [p.PRECCRED+p.CREDIT as TOTCRED,p.PRECDEB+p.DEBIT as TOTDEB, ] + ; + [p.PRECVALCRED+p.VALCREDIT as TOTVALCRED,p.PRECVALDEB+p.VALDEBIT as TOTVALDEB,p.ID_VALUTA,p.ID_SUCURSALA,p.SUCURSALA ,] + ; + Iif(eActiv, [p.PRECDEB1-p.PRECCRED1], [p.PRECCRED1-p.PRECDEB1]) + [ AS SOLDPREC1,] + ; + Iif(eActiv, [p.PRECDEB-p.PRECCRED], [p.PRECCRED-p.PRECDEB]) + [ AS SOLDPREC,] + ; + Iif(eActiv, [p.DEBIT-p.CREDIT], [p.CREDIT-p.DEBIT]) + [ AS SOLD,] + ; + Iif(eActiv, [p.TOTDEB-p.TOTCRED], [p.TOTCRED-p.TOTDEB]) + [ AS SOLDFINAL,] + ; + [p.TOTDEB-p.PRECDEB1 AS RULANDEB,] + ; + [p.TOTCRED-p.PRECCRED1 AS RULANCRED,] + ; + [p.TOTDEB-p.PRECDEB1-p.debit AS RULANPDEB,] + ; + [p.TOTCRED-p.PRECCRED1-p.credit AS RULANPCRED,] + ; + Iif(eActiv, [p.PRECVALDEB-p.PRECVALCRED], [p.PRECVALCRED-p.PRECVALDEB]) + [ AS SOLDPRECVAL,] + ; + Iif(eActiv, [p.TOTVALDEB-p.TOTVALCRED], [p.TOTVALCRED-p.TOTVALDEB]) + [ AS SOLDFINALVAL,] + ; + [p.cont_banca, p.banca, p.swift_banca, p.adresa_banca, p.categorie_entitate, ] + ; + [(select stringagg(adresa) as adresa from vadrese_parteneri where id_part = p.id_part group by id_part) as ADRESA,] + ; + [(select stringagg(telefon1) as telefon from vadrese_parteneri where id_part = p.id_part group by id_part) as TELEFON,] + ; + [(select stringagg(email) as email from vadrese_parteneri where id_part = p.id_part group by id_part) as EMAIL] + ; + [ from vbalanta_parteneri p ] + + lcFiltru = [1=2] + lcOrder = [nume,acont] + llAfisare = .F. + lcGroup = [] + llModParam = .T. + * 5081 apare si la banca lei 5121 si la banca valuta 5124 si separ dupa valuta + Do Case + Case Type('tcCont') = 'C' And '5121' $ tcCont + lcFiltruOriginal = [(P.CONT in ('5121', '5126') OR (P.CONT = '5081' AND NVL(P.ID_VALUTA,0) IN (SELECT 0 FROM DUAL UNION SELECT ID_VALUTA FROM VNOM_VALUTE WHERE MONEDA_NATIONALA = 1)))] + Case Type('tcCont') = 'C' And '5124' $ tcCont + lcFiltruOriginal = [(P.CONT in ('5124', '5127') OR (P.CONT = '5081' AND NVL(P.ID_VALUTA,0) NOT IN (SELECT 0 FROM DUAL UNION SELECT ID_VALUTA FROM VNOM_VALUTE WHERE MONEDA_NATIONALA = 1)))] + Otherwise + lcFiltruOriginal = [] + Endcase + && DACA SUNT PE O SUCURSALA - SELECTEZ DOAR INREGISTRARILE DE PE SUCURSALA CURENTA + If !Isnull(gnIdSucursala) + lcFiltruOriginal = Substr(gcCondSucursala, 6) + Endif + + gencursor('pobalpartext', 'xtemp', lcSelect, lcFiltru, lcSchema, lcOrder, llAfisare, lcGroup, llModParam, lcFiltruOriginal) + pobalpartext.ca_baza1.afisare() + + lcSelect = [select 0 as ID_BAL_PART, SUM(p.PRECDEB1) AS PRECDEB1,SUM(p.PRECCRED1) AS PRECCRED1,SUM(p.PRECDEB) AS PRECDEB,SUM(p.PRECCRED) AS PRECCRED, ] + ; + [SUM(p.DEBIT) as DEB,SUM(p.CREDIT) as CRED,0 AS PRECVALDEB1,0 AS PRECVALCRED1,0 AS PRECVALDEB, ] + ; + [0 AS PRECVALCRED,0 AS VALDEBIT,0 AS VALCREDIT,'LEI' AS NUME_VAL,p.ID_PART, ] + ; + [p.NUME,p.COD_FISCAL,p.REG_COMERT,p.CONT,p.ACONT,p.AN,p.LUNA, ] + ; + [SUM(p.PRECCRED+p.CREDIT) as TOTCRED,SUM(p.PRECDEB+p.DEBIT) as TOTDEB, ] + ; + [SUM(p.PRECVALCRED+p.VALCREDIT) as TOTVALCRED,SUM(p.PRECVALDEB+p.VALDEBIT) as TOTVALDEB,0 AS ID_VALUTA,p.ID_SUCURSALA,p.SUCURSALA ,] + ; + [SUM(] + Iif(eActiv, [p.PRECDEB1-p.PRECCRED1], [p.PRECCRED1-p.PRECDEB1]) + [) AS SOLDPREC1,] + ; + [SUM(] + Iif(eActiv, [p.PRECDEB-p.PRECCRED], [p.PRECCRED-p.PRECDEB]) + [) AS SOLDPREC,] + ; + [SUM(] + Iif(eActiv, [p.DEBIT-p.CREDIT], [p.CREDIT-p.DEBIT]) + [) AS SOLD,] + ; + [SUM(] + Iif(eActiv, [p.TOTDEB-p.TOTCRED], [p.TOTCRED-p.TOTDEB]) + [) AS SOLDFINAL,] + ; + [SUM(p.TOTDEB-p.PRECDEB1) AS RULANDEB, ] + ; + [SUM(p.TOTCRED-p.PRECCRED1) AS RULANCRED, ] + ; + [SUM(p.TOTDEB-p.PRECDEB1-p.debit) AS RULANPDEB,] + ; + [SUM(p.TOTCRED-p.PRECCRED1-p.credit) AS RULANPCRED,] + ; + [0 as SOLDPRECVAL, 0 AS SOLDFINALVAL,] + ; + [p.cont_banca, p.banca, p.swift_banca, p.adresa_banca,p.categorie_entitate,] + ; + [(select stringagg(adresa) as adresa from vadrese_parteneri where id_part = p.id_part group by id_part) as ADRESA,] + ; + [(select stringagg(telefon1) as telefon from vadrese_parteneri where id_part = p.id_part group by id_part) as TELEFON,] + ; + [(select stringagg(email) as email from vadrese_parteneri where id_part = p.id_part group by id_part) as EMAIL] + ; + [ from vbalanta_parteneri p] + + * Calculez numarul de inregistrari. Daca numarul este mai mic de min(300, gnInregistrariAfisare) afisez toate inregistrarile in loc sa intru cu 1=2 + lnInregistrariAfisare = Iif(Type('gnInregistrariAfisare') = 'N', m.gnInregistrariAfisare, 300) + + lcSqlCount = [SELECT COUNT(*) as nr FROM balanta_parteneri where an=?gnAn and luna=?gnLuna and CONT in ('] + Alltrim(Strtran(lcContPart, [,], [','])) + [') ] + pnRecCnt = 0 + llSucces = goExecutor.oSelecteaza2Value(m.lcSqlCount, @pnRecCnt) + llAfisareTot = (Nvl(m.pnRecCnt, 0) <= m.lnInregistrariAfisare) + + lcFiltru = [1=2] + lcOrder = [p.nume,p.acont] + lcGroup = [p.CONT,p.ACONT,p.AN,p.LUNA,p.ID_PART,p.NUME,p.COD_FISCAL, p.REG_COMERT,p.ID_SUCURSALA,p.SUCURSALA, p.cont_banca, p.banca, p.swift_banca, p.adresa_banca, p.categorie_entitate] + llAfisare = .F. + llModParam = .T. + * 5081 apare si la banca lei 5121 si la banca valuta 5124 si separ dupa valuta + Do Case + Case Type('tcCont') = 'C' And '5121' $ tcCont + lcFiltruOriginal = [(P.CONT in ('5121', '5126') OR (P.CONT = '5081' AND NVL(P.ID_VALUTA,0) IN (SELECT 0 FROM DUAL UNION SELECT ID_VALUTA FROM VNOM_VALUTE WHERE MONEDA_NATIONALA = 1)))] + Case Type('tcCont') = 'C' And '5124' $ tcCont + lcFiltruOriginal = [(P.CONT in ('5124', '5127') OR (P.CONT = '5081' AND NVL(P.ID_VALUTA,0) NOT IN (SELECT 0 FROM DUAL UNION SELECT ID_VALUTA FROM VNOM_VALUTE WHERE MONEDA_NATIONALA = 1)))] + Otherwise + lcFiltruOriginal = [] + Endcase + && DACA SUNT PE O SUCURSALA - SELECTEZ DOAR INREGISTRARILE DE PE SUCURSALA CURENTA + If !Isnull(gnIdSucursala) + lcFiltruOriginal = Substr(gcCondSucursala, 6) + Endif + gencursor('pobalparttot', 'xtemp', lcSelect, lcFiltru, lcSchema, lcOrder, llAfisare, lcGroup, llModParam, lcFiltruOriginal) + pobalparttot.ca_baza1.afisare() + + + If gcNumeProgram = [ROAMANAGER] + *!* .but_reface1.Visible = .F. + *!* .but_modifica1.Visible = .F. + gcAcces = Strtran(Strtran(gcAcces, [3;], []), [4;], []) + Endif + + OVIZ = Createobject("frm_bal_parteneri", tnCurs, tcValuta, m.llAfisareTot) + With OVIZ + *!* .LABEL10.Caption='SITUATIA ANALITICA - BALANTA PARTENERI (' + Alltrim(lcContPart) + ')' + .Lb_titlu_alb_b121.Caption = Proper(lcDenumire) + + If !Empty(tcValuta) + .Lb_titlu_alb_b121.Caption = .Lb_titlu_alb_b121.Caption + ; + " Evaluarea in valuta 1 " + Alltrim(tcValuta) + "=" + Alltrim(Str(tnCurs, 10, gnPval)) + " LEI" + Endif + If eActiv + .grid1.cSold.ControlSource = 'sold' + .grid1.cSoldFinal.ControlSource = 'soldfinal' + .grid1.cSoldPrec.ControlSource = 'soldprec' + .grid1.cSoldPrec1.ControlSource = 'soldprec1' + + .grid1.cSoldFinalVal.ControlSource = 'soldfinalval' + .grid1.cSoldPrecVal.ControlSource = 'soldprecval' + *!* .grid1.column6.header1.Caption='Sold (deb-cred)' + *!* .grid1.COLUMN4.header1.Caption='Debit' + *!* .grid1.COLUMN5.header1.Caption='Credit' + .grid1.cSold.header1.Caption = "Sold(" + Alltrim(lcDenDebit) + "-" + Alltrim(lcDenCredit) + ")"&&'Sold (cred-deb)' + .grid1.cDeb.header1.Caption = lcDenDebit&&Debit' + .grid1.cCred.header1.Caption = lcDenCredit&&'Credit' + .grid1.cPrecDeb.header1.Caption = "Prec." + lcDenDebit&&Debit' + .grid1.cPrecCred.header1.Caption = "Prec." + lcDenCredit&&'Credit' + .grid1.cTotDeb.header1.Caption = "Total" + lcDenDebit&&Debit' + .grid1.cTotCred.header1.Caption = "Total" + lcDenCredit&&'Credit' + .pcfel = 'A' + Else + .grid1.cSold.ControlSource = 'sold' + .grid1.cSoldFinal.ControlSource = 'soldfinal' + .grid1.cSoldPrec.ControlSource = 'soldprec' + .grid1.cSoldPrec1.ControlSource = 'soldprec1' + + .grid1.cSoldFinalVal.ControlSource = 'soldfinalval' + .grid1.cSoldPrecVal.ControlSource = 'soldprecval' + .grid1.cSold.header1.Caption = "Sold(" + Alltrim(lcDenCredit) + "-" + Alltrim(lcDenDebit) + ")" &&'Sold (cred-deb)' + .grid1.cDeb.header1.Caption = lcDenDebit &&Debit' + .grid1.cCred.header1.Caption = lcDenCredit &&'Credit' + .grid1.cPrecCred.header1.Caption = "Prec." + lcDenCredit && 'Credit' + .grid1.cPrecDeb.header1.Caption = "Prec." + lcDenDebit && 'Debit' + *!* .grid1.column11.controlsource = "preccred" + *!* .grid1.column12.controlsource = "precdeb" + .grid1.cTotCred.header1.Caption = "Total" + lcDenCredit&&'Credit' + .grid1.cTotDeb.header1.Caption = "Total" + lcDenDebit&&'Debit' + *!* .grid1.COLUMN15.controlsource= "totCred" &&Credit' + *!* .grid1.COLUMN16.controlsource= "TotDeb" &&'Debit' + .pcfel = 'P' + + Endif + .grid1.cSoldPrecVal.Visible = .F. + .grid1.cValDebit.Visible = .F. + .grid1.cValCredit.Visible = .F. + .grid1.cSoldFinalVal.Visible = .F. + .grid1.cNume_val.Visible = .F. + .TABEL = 'BALANTA_PARTENER' + .pcCont = Alltrim(lcContPart) + .grid1.cAvans.Width = 0 + .grid1.cAvansPrec.Width = 0 + .grid1.cTotAvans.Width = 0 + .grid1.cAvans.Visible = .F. + .grid1.cAvansPrec.Visible = .F. + .grid1.cTotAvans.Visible = .F. + *!* .label7.VISIBLE = .F. + *!* .text4.VISIBLE = .F. + *!* .TEXT5.VISIBLE = .F. + *!* .text9.VISIBLE = .F. + Endwith + If !NOU + With OVIZ.grid1 + .column2.ColumnOrder = 2 + For i = 9 To 16 + lcViz = '.column' + Alltrim(Str(i)) + '.visible=.f.' + *lcWidth='.column'+ALLTRIM(STR(i))+'.width=0' + &lcViz + *&lcWidth + Endfor + Endwith + Endif + + *!* *!* arat coloana sucursala doar pe mama + *!* OVIZ.grid1.cSucursala.visible = glEMama + + + OVIZ.Show(1) + Use In xtemp + *!* ENDIF +Endproc && lans_balanta_parteneri +*---------------------------------------------------------------------------------------------- + + +*---------------------------------- Inceput lans_balanta_cumulata ---------------------------------- +Procedure lans_balanta_cumulata + + + pcselect = [select explicatie, id_coloana from ] + gcS + [.coloane] + pcfiltru = [2=2] + pcschema = [''] + pcorder = [explicatie] + pccoloane = [explicatie] + pcTitlu = [Alegeti Balanta] + pcFiltruOriginal = [camp is null and tabel is null and id_prg_owner = 2 and configurabil = 1] + locauta = cauta_alfa(pcselect, pcfiltru, pcschema, pcorder, pccoloane, pcTitlu, pcTitlu, "", .F., pcFiltruOriginal) + + If Empty(locauta.id_coloana) Or Isnull(locauta.id_coloana) + Return + Endif + + pnIdBal = locauta.id_coloana + + + pcTitluCol = [] + pcNumeCol = [] + lcSel = [{call pack_balante_cumulate.balante_cumulate(?@pcNumeCol,?@pcTitluCol,?gcS,?pnIdBal,?gnAn,?gnLuna)}] + lcSchema = [] + lcCursor = 'crs_bal' + lnsucces = goExecutor.oExecute(lcSel, lcCursor) + + If lnsucces < 0 + aMESSAGEBOX(goExecutor.cEroare, 0 + 16, "Eroare") + Return + Endif + + + pcNumeCol = [nume;cod_fiscal;acont;] + pcNumeCol + pcTitluCol = [Partener,Cod Fiscal,Analitic,] + pcTitluCol + Select (lcCursor) + Scatter Name loto Blank + + + obalp = Createobject('frm_bal_parteneri_cumulata') + obalp.ototal = loto + With obalp.ct_grid_order1 + .cselect = lcSel + .cschema = lcSchema + .cTitlu_coloane = pcTitluCol + .cNume_coloane = pcNumeCol + .cFiltruOriginal = [] + .cFiltru = [] + .cOrder = [] + .cTitlu = [] + .cnumeCursor = lcCursor + .lmodparam = .T. + Endwith + obalp.cTitlu = locauta.explicatie + obalp.Show() + + If Used(lcCursor) + Use In (lcCursor) + Endif + +Endproc && lans_balanta_cumulata +*---------------------------------- Sfarsit lans_balanta_cumulata ---------------------------------- + + +*---------------------------------- Inceput configurare_balanta_cumulata ---------------------------------- +Procedure configurare_balanta_cumulata + Private pnIdBalanta, pnIdColoana + Store 0 To pnIdBalanta, pnIdColoana + + pcselect1 = [select explicatie,explicatie2, id_coloana from ] + gcS + [.coloane ] + pcfiltru1 = [camp is null and tabel is null and id_prg_owner = 2 and configurabil = 1] + pcschema1 = [''] + pcorder1 = [explicatie] + pccoloane1 = [explicatie; explicatie2] + pcTitluCol1 = [Titlu Balanta,Conturi] + pcTitlu1 = [Lista Balante Configurate] + + pcselect2 = [select f.id_calcul, f.id_op_col , f.ordine, f.id_coloana, c.camp, c.explicatie from ] + gcS + [.sal_calcul f left join ] + ; + gcS + [.coloane c on f.id_op_col = c.id_coloana and f.coloana = 1] + pcfiltru2 = [f.id_coloana =?pnIdBalanta] + pcschema2 = [''] + pcorder2 = [f.ordine] + pccoloane2 = [explicatie; ordine] + pcMask2 = '[1]=;[2]=REPLICATE("9",3)' + pcTitluCol2 = [Titlu coloana, Ordine] + pcTitlu2 = [Coloane Balanta] + + pcselect3 = [select id_calcul, id_coloana, id_op_col, explicatie, camp, coloana, ordine from ] + gcS + [.cont_vformule_balante ] + pcfiltru3 = [id_coloana =?pnIdColoana] + pcschema3 = [''] + pcorder3 = [ordine] + pccoloane3 = [camp;explicatie;ordine] + pcMask3 = '[1]=;[2]=;[3]=REPLICATE("9",3)' + pcTitluCol3 = [Camp,Explicatie,Ordine] + pcTitlu3 = [Formula Coloane] + + + obalp = Createobject('config_balante_parteneri') + With obalp.Ct_grid_search1 + .cselect = pcselect1 + .cschema = pcschema1 + .cTitlu_coloane = pcTitluCol1 + .cNume_coloane = pccoloane1 + .cFiltruOriginal = pcfiltru1 + .cFiltru = [2=2] + .cOrder = pcorder1 + .cTitlu = pcTitlu1 + .cnumeCursor = 'crs_NumeBal' + .lmodparam = .T. + Endwith + With obalp.Ct_grid_search2 + .cselect = pcselect2 + .cschema = pcschema2 + .cTitlu_coloane = pcTitluCol2 + .cNume_coloane = pccoloane2 + .cFiltruOriginal = pcfiltru2 + .cFiltru = [2=2] + .cOrder = pcorder2 + .cTitlu = pcTitlu2 + .cMask = pcMask2 + .cnumeCursor = 'crs_ColoaneBal' + .lmodparam = .T. + Endwith + With obalp.Ct_grid_search3 + .cselect = pcselect3 + .cschema = pcschema3 + .cTitlu_coloane = pcTitluCol3 + .cNume_coloane = pccoloane3 + .cFiltruOriginal = pcfiltru3 + .cFiltru = [2=2] + .cOrder = pcorder3 + .cTitlu = pcTitlu3 + .cMask = pcMask3 + .cnumeCursor = 'crs_FormulaBal' + .lmodparam = .T. + Endwith + obalp.Show() + +Endproc && configurare_balanta_cumulata +*---------------------------------- Sfarsit configurare_balanta_cumulata ---------------------------------- + +*!* *---------------------------------- Inceput lans_balanta_cumulata_401_409 ---------------------------------- +*!* PROCEDURE lans_balanta_cumulata_401_409 + + +*!* pcTitluCol = [] +*!* pcNumeCol = [] +*!* lcSel = [select nume,cod_fiscal,acont,(preccred-precdeb-(bprecdeb-bpreccred)) as soldprec,] + ; +*!* [(bdebit-bcredit) as avanscur,debit as productie,credit as incasat,precdeb,preccred,] + ; +*!* [(credit-debit-(bdebit-bcredit)) as soldcur,(bprecdeb-bpreccred) as avansprec,] + ; +*!* [((bprecdeb-bpreccred)+(bdebit-bcredit)) as avanstot,(preccred+credit-(precdeb+debit)-(bprecdeb-bpreccred+bdebit-bcredit)) as soldfinal,] + ; +*!* [(precdeb+debit) as totdeb,(preccred+credit) as totcred from ] + GCS + [.vbalanta_401_409 where an = ]+; +*!* ALLTRIM(STR(gnan)) + [ and luna = ] + ALLTRIM(STR(gnluna)) +*!* lcSchema = [] +*!* lcCursor = 'crs_bal' +*!* lnSucces = goExecutor.oExecute(lcSel,lcCursor) + +*!* IF lnSucces < 0 +*!* MESSAGEBOX(goExecutor.cEroare,0+16,"Eroare") +*!* RETURN +*!* ENDIF + + +*!* pcNumeCol = [nume;cod_fiscal;acont;soldprec;avanscur;productie;incasat;precdeb;preccred;soldcur;avansprec;avanstot;soldfinal;totdeb;totcred] +*!* pcTitluCol = [Partener,Cod Fiscal,Analitic,Sold Precedent,Avans curent,Productie,Incasat,Precdeb,Preccred,Sold curent,Avans curent,Avans total,Sold final,Totdeb,Totcred] +*!* SELECT (lcCursor) +*!* SCATTER NAME loto BLANK + + +*!* obalp = CREATEOBJECT('frm_bal_parteneri_cumulata') +*!* obalp.ototal = loto +*!* WITH obalp.ct_grid_order1 +*!* .cselect = lcSel +*!* .cschema = lcSchema +*!* .cTitlu_coloane = pcTitluCol +*!* .cNume_coloane = pcNumeCol +*!* .cFiltruOriginal = [] +*!* .cFiltru = [] +*!* .cOrder = [] +*!* .cTitlu = [] +*!* .cnumeCursor = lcCursor +*!* .lmodparam = .T. +*!* ENDWITH +*!* obalp.ctitlu = "BALANTA FURNIZORI CUMULATA" +*!* obalp.show() + +*!* IF USED(lcCursor) +*!* USE IN (lcCursor) +*!* ENDIF + +*!* ENDPROC && lans_balanta_cumulata +*!* *---------------------------------- Sfarsit lans_balanta_cumulata ---------------------------------- + +*!* *---------------------------------- Inceput lans_balanta_cumulata_4111_419 ---------------------------------- +*!* PROCEDURE lans_balanta_cumulata_4111_419 + + +*!* pcTitluCol = [] +*!* pcNumeCol = [] +*!* lcSel = [select nume,cod_fiscal,acont,(precdeb-preccred-(bpreccred-bprecdeb)) as soldprec,] + ; +*!* [(bcredit-bdebit) as avanscur,debit as productie,credit as incasat,precdeb,preccred,] + ; +*!* [(debit-credit-(bcredit-bdebit)) as soldcur,(bpreccred-bprecdeb) as avansprec,] + ; +*!* [((bpreccred-bprecdeb)+(bcredit-bdebit)) as avanstot,(precdeb+debit-(preccred+credit)-(bpreccred-bprecdeb+bcredit-bdebit)) as soldfinal,] + ; +*!* [(preccred+credit) as totdeb,(precdeb+debit) as totcred from ] + GCS + [.vbalanta_4111_419 where an = ]+; +*!* ALLTRIM(STR(gnan)) + [ and luna = ] + ALLTRIM(STR(gnluna)) +*!* lcSchema = [] +*!* lcCursor = 'crs_bal' +*!* lnSucces = goExecutor.oExecute(lcSel,lcCursor) + +*!* IF lnSucces < 0 +*!* MESSAGEBOX(goExecutor.cEroare,0+16,"Eroare") +*!* RETURN +*!* ENDIF + + +*!* pcNumeCol = [nume;cod_fiscal;acont;soldprec;avanscur;productie;incasat;precdeb;preccred;soldcur;avansprec;avanstot;soldfinal;totdeb;totcred] +*!* pcTitluCol = [Partener,Cod Fiscal,Analitic,Sold Precedent,Avans curent,Productie,Incasat,Precdeb,Preccred,Sold curent,Avans curent,Avans total,Sold final,Totdeb,Totcred] +*!* SELECT (lcCursor) +*!* SCATTER NAME loto BLANK + + +*!* obalp = CREATEOBJECT('frm_bal_parteneri_cumulata') +*!* obalp.ototal = loto +*!* WITH obalp.ct_grid_order1 +*!* .cselect = lcSel +*!* .cschema = lcSchema +*!* .cTitlu_coloane = pcTitluCol +*!* .cNume_coloane = pcNumeCol +*!* .cFiltruOriginal = [] +*!* .cFiltru = [] +*!* .cOrder = [] +*!* .cTitlu = [] +*!* .cnumeCursor = lcCursor +*!* .lmodparam = .T. +*!* ENDWITH +*!* obalp.ctitlu = "BALANTA CLIENTI CUMULATA" +*!* obalp.show() + +*!* IF USED(lcCursor) +*!* USE IN (lcCursor) +*!* ENDIF + +*!* ENDPROC && lans_balanta_cumulata +*!* *---------------------------------- Sfarsit lans_balanta_cumulata ---------------------------------- + +*---------------------------------- Inceput lans_balanta_cumulata_401_409 ---------------------------------- +Procedure lans_balanta_cumulata_401_409 + + Private pobalpartfc + Store "" To pobalpartfc + Local lcSelect, lcFiltru, lcSchema, lcOrder, llAfisare, lcGroup, llModParam, lcFiltruOriginal + + lcSelect = [select id_part, nume,cod_fiscal,acont, id_valuta, nume_val, (preccred-precdeb-(bprecdeb-bpreccred)) as soldprec, ] + ; + [(bdebit-bcredit) as avanscur,debit,credit,precdeb,preccred, ] + ; + [(credit-debit-(bdebit-bcredit)) as soldcur,(bprecdeb-bpreccred) as avansprec, ] + ; + [((bprecdeb-bpreccred)+(bdebit-bcredit)) as avanstot,(preccred+credit-(precdeb+debit)-(bprecdeb-bpreccred+bdebit-bcredit)) as soldfinal, ] + ; + [(precvalcred-precvaldeb-(bprecvaldeb-bprecvalcred)) as soldprecval, valdebit, valcredit, ] + ; + [(precvalcred+valcredit-(precvaldeb+valdebit)-(bprecvaldeb-bprecvalcred+bvaldebit-bvalcredit)) as soldfinalval, ] + ; + [(precdeb+debit) as totdeb,(preccred+credit) as totcred, id_sucursala, sucursala from vbalanta_401_409 ] + + lcOrder = [nume,acont] + lcFiltru = [1=2] + llAfisare = .F. + llModParam = .T. + lcFiltruOriginal = [an = ] + Alltrim(Str(gnan)) + [ and luna = ] + Alltrim(Str(gnluna)) + && DACA SUNT PE O SUCURSALA - SELECTEZ DOAR INREGISTRARILE DE PE SUCURSALA CURENTA + If !Isnull(gnIdSucursala) + lcFiltruOriginal = lcFiltruOriginal + gcCondSucursala + Endif + + gencursor('pobalpartfc', 'balpartfc', lcSelect, lcFiltru, lcSchema, lcOrder, llAfisare, lcGroup, llModParam, lcFiltruOriginal) + + + obalp = Createobject('frm_balpart_fc') + obalp.Lb_titlu_alb_b121.Caption = "BALANTA FURNIZORI CUMULATA" + obalp.WindowState = 2 + obalp.Show() + + If Used('balpartfc') + Use In balpartfc + Endif + +Endproc && lans_balanta_cumulata_401_409 +*---------------------------------- Sfarsit lans_balanta_cumulata_401_409 ---------------------------------- + +*---------------------------------- Inceput lans_balanta_cumulata_4111_419 ---------------------------------- +Procedure lans_balanta_cumulata_4111_419 + + Private pobalpartfc + Store "" To pobalpartfc + Local lcSelect, lcFiltru, lcSchema, lcOrder, llAfisare, lcGroup, llModParam, lcFiltruOriginal + + lcSelect = [select id_part, nume,cod_fiscal,acont, id_valuta, nume_val, (precdeb-preccred-(bpreccred-bprecdeb)) as soldprec, ] + ; + [(bcredit-bdebit) as avanscur,debit,credit,precdeb,preccred, ] + ; + [(debit-credit-(bcredit-bdebit)) as soldcur,(bpreccred-bprecdeb) as avansprec, ] + ; + [((bpreccred-bprecdeb)+(bcredit-bdebit)) as avanstot,(precdeb+debit-(preccred+credit)-(bpreccred-bprecdeb+bcredit-bdebit)) as soldfinal, ] + ; + [(precvaldeb-precvalcred-(bprecvalcred-bprecvaldeb)) as soldprecval, valdebit, valcredit, ] + ; + [(precvaldeb+valdebit-(precvalcred+valcredit)-(bprecvalcred-bprecvaldeb+bvalcredit-bvaldebit)) as soldfinalval, ] + ; + [(preccred+credit) as totdeb,(precdeb+debit) as totcred, id_sucursala, sucursala from vbalanta_4111_419] + + lcOrder = [nume,acont] + lcFiltru = [1=2] + llAfisare = .F. + llModParam = .T. + lcFiltruOriginal = [an = ] + Alltrim(Str(gnan)) + [ and luna = ] + Alltrim(Str(gnluna)) + && DACA SUNT PE O SUCURSALA - SELECTEZ DOAR INREGISTRARILE DE PE SUCURSALA CURENTA + If !Isnull(gnIdSucursala) + lcFiltruOriginal = lcFiltruOriginal + gcCondSucursala + Endif + + gencursor('pobalpartfc', 'balpartfc', lcSelect, lcFiltru, lcSchema, lcOrder, llAfisare, lcGroup, llModParam, lcFiltruOriginal) + + + obalp = Createobject('frm_balpart_fc') + obalp.Lb_titlu_alb_b121.Caption = "BALANTA CLIENTI CUMULATA" + obalp.grid1.column5.header1.Caption = "Productie" + obalp.grid1.column6.header1.Caption = "Incasat" + obalp.WindowState = 2 + obalp.Show() + + If Used('balpartfc') + Use In balpartfc + Endif + +Endproc && lans_balanta_cumulata_4111_419 +*---------------------------------- Sfarsit lans_balanta_cumulata_4111_419 ---------------------------------- +Procedure raport_bal_parteneri + Local loFrm + loFrm = Createobject("frm_date_rap_balpart_temp") + loFrm.Show(1) +Endproc +************************************************************************************************************** + +********************************************* +*** marcheaza/verifica/sterge o luna de initializare pentru o entitate LI/BP/BV/BP/IP si un cont +*** LI (luna initializare), BP (balanta de parteneri), BV (balanta verificare sintetica), BA (balanta de verificare analitica), IP (inregistrari parteneri) +*** se foloseste pentru a nu se reface situatiile de initializare +*** lLunaInitializare = IsCalendarInit('SET', 'IP/BP', lcCont) +********************************************* +Procedure IsCalendarInit + Lparameters tcTip, tcEntitate, tcCont + *** tcTip: GET (DEFAULT): .T./.F. daca exista inregistrarea in calendar_init + *** SET: initializeaza calendar_init + *** DEL: sterge din calendar_init + + Private pcCont, pcEntitate, pcTip, pnRezultat + Local llInit + llInit = .F. + pcTip = Upper(Alltrim(m.tcTip)) && GET/SET/DEL + pcTip = Iif(!Inlist(m.pcTip, 'GET', 'SET', 'DEL'), 'GET', m.pcTip) + + pcEntitate = Upper(Alltrim(m.tcEntitate)) + pcCont = Iif(!Empty(m.tcCont), Alltrim(m.tcCont), '') + lcCont = m.pcCont + pnRezultat = 0 + + lnConturi = Getwordcount(m.lcCont, ",") && "4111" sau "5121,5126,5081" + For lnCont = 1 To lnConturi + pcCont = Getwordnum(m.lcCont, m.lnCont, ",") + goExecutor.oExecuta('begin pack_firma.LUNA_INITIALIZARE_CONT(?pcTip, ?gnAn, ?gnLuna, ?pcEntitate, ?pcCont, ?gnIdUtil, ?@pnRezultat); end;') + If m.pnRezultat <> 0 + llInit = .T. + Endif + Endfor + + Return (m.llInit) +Endproc && IsCalendarInit + +********************************************* +*** verifica daca o luna este blocata la refacere: luna initiala, luna inchisa, situatie blocata +*** .T. = nu se reface, .F. = se poate reface +********************************************* +Function IsBlocatRefacere + Lparameters tcEntitate, tcCont + + Private pcCont, pcEntitate, pnRezultat + + pcEntitate = Upper(Alltrim(m.tcEntitate)) + pcCont = Iif(!Empty(m.tcCont), Alltrim(m.tcCont), '') + + pnRezultat = 0 + goExecutor.oSelect2Value('select pack_firma.IS_BLOCAT_REFACERE(?gnAn, ?gnLuna, ?pcEntitate, ?pcCont) from dual', @pnRezultat) + + Return (m.pnRezultat <> 0) +Endfunc \ No newline at end of file diff --git a/COMUN/programe/oproceduri_ams.prg b/COMUN/programe/oproceduri_ams.prg new file mode 100644 index 0000000..1b1e5eb --- /dev/null +++ b/COMUN/programe/oproceduri_ams.prg @@ -0,0 +1,511 @@ +*!* 19.12.2019 +*!* marius.mutu +*!* Adauga_modifica_inregistrare, sterge_inregistrare: Am adaugat variabila pnIdAMS pentru a fi completata cu id-ul generat la salvarea unei inregistrari noi in baza de date + +&& ------------------------------INCEPUT: Adauga_Modifica_Inregistrare------------------------------ +*!* Procedura: Adauga_Modifica_Inregistrare +*!* Parametri: tcForm, toRec, tnId +*!* Data/Ora generarii: 26/04/2004 11:21 +*!* Autor: MARIUS.MUTU +Procedure Adauga_Modifica_Inregistrare + Lparameters tcAlias, toRec, tnId, tcActiune,tlNoShow,tcObjName + + * parametrul @tnId se transmite optional prin referinta la INSERT pentru a fi completat cu Id-ul generat la adaugarea in baza de date + * trebuie modificate cus_odata_xxx.make_sql pentru a completa variabila pnIdAMS + Private pnIdAMS + pnIdAMS = m.tnId + + Local lcAlias,llNoShow,lcObjName + lcAlias = Upper(Alltrim(tcAlias)) + + lcForm = 'frm_' + lcAlias + '_nou' + llNoShow = tlNoShow + Private poRec + poRec = toRec + If Empty(tcObjName) + lcObjName = 'loAdMod' + lcAlias + Else + lcObjName = Alltrim(tcObjName) + Endif + *DO FORM &lcForm NAME loAdMod WITH toRec,tnId,tcActiune NOSHOW + + &lcObjName = Createobject(lcForm,poRec,tnId,tcActiune) + If !tlNoShow + &lcObjName..Show(1) + Endif + + tnId = m.pnIdAMS + + Return gnButon +Endproc +&& ------------------------------SFARSIT: Adauga_Modifica_Inregistrare------------------------------ + +&& ------------------------------INCEPUT: Sterge_Inregistrare ------------------------------ +*!* Procedura: Sterge_Inregistrare +*!* Parametri: tcAlias, tnId +*!* Data/Ora generarii: 26/04/2004 11:28 +*!* Autor: MARIUS.MUTU +Procedure Sterge_Inregistrare + Lparameters tcAlias, tnId, tlNoSave,tcObjName + + Private pnIdAMS + pnIdAMS = m.tnId + + lcAlias = Upper(Alltrim(tcAlias)) + lnId = tnId + + llNoSave = tlNoSave + If Empty(tcObjName) + lcObjName = 'loData' + Else + lcObjName = Alltrim(tcObjName) + Endif + + + lcData = 'cus_odata_' + lcAlias + &lcObjName = Createobject(lcData) + &lcObjName..cActiune = "DELETE" + + If !llNoSave + Return &lcObjName..salvare(,lnId) + Else + Return .T. + Endif + +Endproc +&& ------------------------------SFARSIT: Sterge_Inregistrare ------------------------------ + +Define Class BizDataObject As Custom + oObject = Null + cObjectName = '' + cSelect = '' + cSchema = '' + nId = NULL + + Procedure Init + Lparameters toHash + *nId: id inregistrare, doar daca se transmite si cObjectName + *cObjectName: identificator select, schema dintr-o colectie (optional) + *cSelect: instructiune [select a,b,c from tabel where id = ?pnId], in cazul in care nu exista cObjectName (optional) + *cSchema: schema pentru cSelect (optional) + * loBizDataObject = CreateObject("BizDataObject", GetHash([cSelect=>select a,b,c from tabel where id = ?pnId])) + * loBizDataObject.GetDataObject() + This.nId = toHash.GetValue("nId") + This.cObjectName = toHash.GetValue("cObjectName") + This.cSelect = toHash.GetValue("cSelect") + This.cSchema = toHash.GetValue("cSchema") + Endproc && Init + + *************************************************************** + *** Intoarce un obiect selectat din baza de date pe baza tnId + *************************************************************** + Procedure GetDataObject + LOCAL lcSelect, lcSelectV, llSucces + PRIVATE pnObjectId, poObject + lcSelectV = SELECT() + llSucces = .F. + poObject = NULL + pnObjectId = this.nId + + lcSelect = this.cSelect + lcSchema = this.cSchema && id_articol N(20), codmat V(50), denumire V(100), descriere V(200), um V(10), id_grupa N(5), grupa V(50), id_subgrupa N(5), subgrupa V(50), tip N(3) + IF !(Empty(This.cObjectName) OR EMPTY(This.nId)) + loDefObject = This.GetDefObject() + lcSelect = loDefObject.GetValue("cSelect") + lcSchema = loDefObject.GetValue("cSchema") + lcIdColumn = loDefObject.GetValue("cIdColoana") + lcSelect = lcSelect + " where " + m.lcIdColumn + " = ?pnObjectId" + This.cSelect = m.lcSelect + ENDIF + + IF !EMPTY(m.lcSelect) + IF EMPTY(m.lcSchema) + llSucces = goExecutor.oSelecteaza2Object(m.lcSelect, @poObject) + ELSE + poCursor = Null + gencursor_hash(gethash([cnume=>poCursor??cAlias=>crsDataObject??cselect=>] + m.lcSelect + [??cschema=>] + m.lcSchema + [??lModParam=>.T.??cwhere=>] + m.lcIdColumn + [=pnObjectId])) + IF USED('crsDataObject') + llSucces = .T. + SELECT crsDataObject + SCATTER NAME poObject MEMO + USE IN (SELECT('crsDataObject')) + ENDIF + ENDIF + ENDIF + IF !m.llSucces + poObject = NULL + ENDIF + SELECT (m.lcSelectV) + RETURN poObject + ENDPROC && GetDataObject + + ************************************************* + Function GetDefObject + lcObjectName = Lower(This.cObjectName) + loHash = GetHash() + Do Case + CASE EMPTY(m.lcObjectName) + * + Case lcObjectName = "nom_parteneri" + With loHash + .SetValue("cSelect", "select id_part, denumire, cod_fiscal from nom_parteneri") + .SetValue("cSchema", "") + .SetValue("cFiltru", "1=2") + .SetValue("cOrder", "denumire") + .SetValue("cColoana", "denumire,cod_fiscal,id_part") + .SetValue("cTitlu", "Alegeti partenerul") + .SetValue("cTitluColoana", "Nume,Cod fiscal,ID") + .SetValue("cFiltruOriginal", [STERS = 0 AND INACTIV = 0]) + .SetValue("cresultcoloana","denumire") + .SetValue("cidcoloana","id_Part") + Endwith + + Case lcObjectName = "nom_parteneri4111" + With loHash + .SetValue("cSelect", "SELECT B.ID_PART, B.DENUMIRE, B.COD_FISCAL " + ; + " FROM CORESP_TIP_PART A " + ; + " LEFT JOIN NOM_PARTENERI B ON A.ID_PART = B.ID_PART") + .SetValue("cSchema", "") + .SetValue("cFiltru", "1=2") + .SetValue("cOrder", "b.denumire") + .SetValue("cColoana", "b.denumire,b.cod_fiscal,b.id_part") + .SetValue("cTitlu", "Alegeti partenerul") + .SetValue("cTitluColoana", "Nume,Cod fiscal,ID") + .SetValue("cFiltruOriginal", [B.STERS = 0 AND B.INACTIV = 0 AND A.ID_TIP_PART IN (SELECT id_tip_part FROM coresp_tip_cont WHERE cont = '4111')]) + .SetValue("cresultcoloana","denumire") + .SetValue("cidcoloana","id_Part") + Endwith + + Case lcObjectName = "nom_responsabil" + With loHash + .SetValue("cSelect", "select id_responsabil, nume, marca, bi, cnp from vnom_responsabili") + .SetValue("cSchema", "") + .SetValue("cFiltru", "1=2") + .SetValue("cOrder", "nume") + .SetValue("cColoana", "nume, marca, bi, cnp, id_responsabil") + .SetValue("cTitlu", "Alegeti responsabilul") + .SetValue("cTitluColoana", "Nume, Marca, BI, CNP, Id") + .SetValue("cFiltruOriginal", []) + .SetValue("cresultcoloana","nume") + .SetValue("cidcoloana","id_responsabil") + Endwith + + + Case lcObjectName = "nom_feldoc" + With loHash + .SetValue("cSelect", "select id_fdoc, fel_document FROM vnom_fdoc") + .SetValue("cSchema", "") + .SetValue("cFiltru", "1=2") + .SetValue("cOrder", "fel_document") + .SetValue("cColoana", "fel_document,id_fdoc") + .SetValue("cTitlu", "Alegeti felul documentului") + .SetValue("cTitluColoana", "Document,ID") + .SetValue("cFiltruOriginal", [inactiv = 0]) + .SetValue("cresultcoloana","fel_document") + .SetValue("cidcoloana","id_fdoc") + Endwith + + + Case lcObjectName = "nom_gestiune" + With loHash + .SetValue("cSelect", "select nume_gestiune,cgest,id_gestiune,nr_pag,cont from vnom_gestiuni ") + .SetValue("cSchema", "") + .SetValue("cFiltru", "1=2") + .SetValue("cOrder", "nume_gestiune") + .SetValue("cColoana", "nume_gestiune,cgest") + .SetValue("cTitlu", "Alegeti Gestiunea") + .SetValue("cTitluColoana", "Gestiune,Cgest") + .SetValue("cFiltruOriginal", [inactiv = 0]) + .SetValue("cresultcoloana","nume_gestiune") + .SetValue("cidcoloana","id_gestiune") + Endwith + + Case lcObjectName = "nom_lucrare" + With loHash + .SetValue("cSelect", "select nrord, id_lucrare from vnom_lucrari") + .SetValue("cSchema", "") + .SetValue("cFiltru", "1=2") + .SetValue("cOrder", "nrord") + .SetValue("cColoana", "nrord,id_lucrare") + .SetValue("cTitlu", "Alegeti lucrarea") + .SetValue("cTitluColoana", "Lucrare,ID") + .SetValue("cFiltruOriginal", [inactiv = 0]) + .SetValue("cresultcoloana","nrord") + .SetValue("cidcoloana","id_lucrare ") + Endwith + + Case lcObjectName = "nom_sectie" + With loHash + .SetValue("cSelect", "select id_sectie, sectie, csectie FROM vnom_sectii") + .SetValue("cSchema", "") + .SetValue("cFiltru", "1=2") + .SetValue("cOrder", "sectie") + .SetValue("cColoana", "sectie, csectie") + .SetValue("cTitlu", "Alegeti sectia") + .SetValue("cTitluColoana", "Sectie, Indicativ") + .SetValue("cFiltruOriginal", [inactiv = 0]) + .SetValue("cresultcoloana","sectie") + .SetValue("cidcoloana","id_sectie") + Endwith + + Case lcObjectName = "nom_valuta" + With loHash + .SetValue("cSelect", "select id_valuta, nume_val FROM vnom_valute") + .SetValue("cSchema", "") + .SetValue("cFiltru", "1=2") + .SetValue("cOrder", "nume_val") + .SetValue("cColoana", "nume_val") + .SetValue("cTitlu", "Alegeti valuta") + .SetValue("cTitluColoana", "Valuta") + .SetValue("cFiltruOriginal", [inactiv = 0 and moneda_nationala = 0]) + .SetValue("cresultcoloana","nume_val") + .SetValue("cidcoloana","id_valuta") + Endwith + + Case lcObjectName = "nom_sucursala" + With loHash + .SetValue("cSelect", "select id_sucursala, sucursala, inactiv from vnom_sucursale") + .SetValue("cSchema", "") + .SetValue("cFiltru", "2=2") + .SetValue("cOrder", "sucursala") + .SetValue("cColoana", "sucursala,id_sucursala") + .SetValue("cTitlu", "Alegeti sucursala") + .SetValue("cTitluColoana", "Sucursala, Id") + If glEMama && DACA SUNT PE FIRMA MAMA ARAT DOAR SUCURSALELE EI + .SetValue("cFiltruOriginal", [inactiv = 0 AND id_mama = ?gnIdFirma]) + Else && DACA SUNT PE O SUCURSALA SAU PE FIRMA INDEPENDENTA NU ARAT NIMIC + .SetValue("cFiltruOriginal", [1=2]) + Endif + .SetValue("cresultcoloana","sucursala") + .SetValue("cidcoloana","id_sucursala") + Endwith + + Case lcObjectName = "nom_utilizator" + With loHash + .SetValue("cSelect", "select id_util,utilizator from syn_vutilizatori") + .SetValue("cSchema", "") + .SetValue("cFiltru", "1=2") + .SetValue("cOrder", "utilizator") + .SetValue("cColoana", "utilizator") + .SetValue("cTitlu", "Alegeti utilizatorul") + .SetValue("cTitluColoana", "Utilizator") + .SetValue("cFiltruOriginal", [inactiv = 0]) + .SetValue("cresultcoloana","utilizator") + .SetValue("cidcoloana","id_util") + Endwith + + Case lcObjectName = "nom_venchel" + With loHash + .SetValue("cSelect", "select id_venchelt, explicatie, (case tip_venchelt when 1 then 'Cheltuiala' else 'Venit' end) as tip_venchelt FROM vnom_venchel") + .SetValue("cSchema", "") + .SetValue("cFiltru", "1=2") + .SetValue("cOrder", "explicatie") + .SetValue("cColoana", "explicatie,tip_venchelt") + .SetValue("cTitlu", "Alegeti venitul/cheltuiala") + .SetValue("cTitluColoana", "Explicatia, Tip") + .SetValue("cFiltruOriginal", [inactiv = 0]) + .SetValue("cresultcoloana","explicatie") + .SetValue("cidcoloana","id_venchelt") + Endwith + + Case Inlist(lcObjectName, "nom_articol", "nom_articole") + With loHash + .SetValue("cSelect", "select denumire, codmat, um, grupa, subgrupa, id_grupa, id_subgrupa, descriere, dnf, cont, acont, inactiv, id_articol from vnom_articole") + .SetValue("cSchema", "") + .SetValue("cFiltru", "1=2") + .SetValue("cOrder", "denumire") + .SetValue("cColoana", "denumire,codmat,um,grupa,subgrupa,cont,acont,dnf,id_articol") + .SetValue("cTitlu", "Alegeti articolul") + .SetValue("cTitluColoana", "Denumire,Cod Material,UM,Grupa,Subgrupa,Cont,Analitic,DNF,Id") + .SetValue("cFiltruOriginal", [inactiv = 0]) + .SetValue("cresultcoloana","denumire") + .SetValue("cidcoloana","id_articol") + Endwith + + Case lcObjectName = "nom_grupa_articol" + With loHash + .SetValue("cSelect", "select grupa, id_grupa from vgest_art_gr") + .SetValue("cSchema", "") + .SetValue("cFiltru", "1=2") + .SetValue("cOrder", "grupa") + .SetValue("cColoana", "grupa,id_grupa") + .SetValue("cTitlu", "Alegeti grupa de articole") + .SetValue("cTitluColoana", "Grupa,Id") + .SetValue("cFiltruOriginal", []) + .SetValue("cresultcoloana","grupa") + .SetValue("cidcoloana","id_grupa") + Endwith + + Case lcObjectName = "nom_subgrupa_articol" + With loHash + .SetValue("cSelect", "select subgrupa, grupa, id_subgrupa from vgest_art_sbgr") + .SetValue("cSchema", "") + .SetValue("cFiltru", "1=2") + .SetValue("cOrder", "subgrupa") + .SetValue("cColoana", "subgrupa,grupa,id_subgrupa") + .SetValue("cTitlu", "Alegeti subgrupa de articole") + .SetValue("cTitluColoana", "Subgrupa,Grupa,Id") + .SetValue("cFiltruOriginal", []) + .SetValue("cresultcoloana","subgrupa") + .SetValue("cidcoloana","id_subgrupa") + Endwith + + Case lcObjectName = "nom_grupa_gestiune" + With loHash + .SetValue("cSelect", "select id_grupe, nume_grupa, nume_parinte, parent_id FROM vgest_nom_grupe") + .SetValue("cSchema", "") + .SetValue("cFiltru", "1=2") + .SetValue("cOrder", "nume_grupa") + .SetValue("cColoana", "nume_grupa,nume_parinte,id_grupe,parent_id") + .SetValue("cTitlu", "Alegeti grupa de gestiuni") + .SetValue("cTitluColoana", "Grupa,Grupa parinte,Id,Id parinte") + .SetValue("cFiltruOriginal", [inactiv = 0]) + .SetValue("cresultcoloana","nume_grupa") + .SetValue("cidcoloana","id_grupe") + Endwith + + Case lcObjectName = "nom_meserie" + With loHash + .SetValue("cSelect", "select id_meseria, meserie from SAL_VNOM_MES") + .SetValue("cSchema", "") + .SetValue("cFiltru", "1=2") + .SetValue("cOrder", "meserie") + .SetValue("cColoana", "id_meseria, meserie") + .SetValue("cTitlu", "Alegeti meseria") + .SetValue("cTitluColoana", "Meseria, Id") + .SetValue("cFiltruOriginal", []) + .SetValue("cresultcoloana","meserie") + .SetValue("cidcoloana","meseria") + Endwith + + Case lcObjectName = "nom_formatie" + With loHash + .SetValue("cSelect", "select id_formatia, denumire from sal_vnom_formatii") + .SetValue("cSchema", "") + .SetValue("cFiltru", "1=2") + .SetValue("cOrder", "denumire") + .SetValue("cColoana", "denumire, id_formatia") + .SetValue("cTitlu", "Alegeti formatia") + .SetValue("cTitluColoana", "Formatia, Id") + .SetValue("cFiltruOriginal", []) + .SetValue("cresultcoloana","denumire") + .SetValue("cidcoloana","id_formatia") + Endwith + + Case lcObjectName = "nom_tip_rulaj" + With loHash + .SetValue("cSelect", "select id_tip_rulaj,descriere from nom_tip_rulaj") + .SetValue("cSchema", "") + .SetValue("cFiltru", "2=2") + .SetValue("cOrder", "descriere") + .SetValue("cColoana", "descriere,id_tip_rulaj") + .SetValue("cTitlu", "Alegeti tipul de rulaj") + .SetValue("cTitluColoana", "Descriere,ID") + .SetValue("cFiltruOriginal", [STERS = 0]) + .SetValue("cresultcoloana","descriere") + .SetValue("cidcoloana","id_tip_rulaj") + Endwith + + Case lcObjectName = "nom_contracte" + With loHash + .SetValue("cSelect", "select id_ctr, id_part, denumire, contract, numar, data from vcontracte") + .SetValue("cSchema", "") + .SetValue("cFiltru", "1=2") + .SetValue("cOrder", "data desc, numar") + .SetValue("cColoana", "contract,denumire,id_ctr") + .SetValue("cTitlu", "Alegeti contractul") + .SetValue("cTitluColoana", "Contract,Partener,Id") + .SetValue("cFiltruOriginal", []) + .SetValue("cresultcoloana","contract") + .SetValue("cidcoloana","id_ctr") + Endwith + + Case lcObjectName = "tipuri_contracte" + With loHash + .SetValue("cSelect", "select id_tip_ctr,denumire from tipuri_contracte") + .SetValue("cSchema", "") + .SetValue("cFiltru", "2=2") + .SetValue("cOrder", "denumire") + .SetValue("cColoana", "denumire,id_tip_ctr") + .SetValue("cTitlu", "Alegeti tipul de contract") + .SetValue("cTitluColoana", "Denumire,ID") + .SetValue("cFiltruOriginal", []) + .SetValue("cresultcoloana","denumire") + .SetValue("cidcoloana","id_tip_ctr") + Endwith + + Case lcObjectName = "nom_transe" + With loHash + .SetValue("cSelect", "select id_transa, transa from sal_vnom_transe") + .SetValue("cSchema", "") + .SetValue("cFiltru", "1=2") + .SetValue("cOrder", "transa") + .SetValue("cColoana", "transa, id_transa") + .SetValue("cTitlu", "Alegeti transa") + .SetValue("cTitluColoana", "Transa, Id") + .SetValue("cFiltruOriginal", []) + .SetValue("cresultcoloana","transa") + .SetValue("cidcoloana","id_transa") + Endwith + + Case lcObjectName = "nom_tichete" + With loHash + .SetValue("cSelect", "select id, denumire,valoare from sal_vnom_tichete") + .SetValue("cSchema", "") + .SetValue("cFiltru", "1=2") + .SetValue("cOrder", "denumire") + .SetValue("cColoana", "denumire, valoare, id") + .SetValue("cTitlu", "Alegeti tipul tichetului") + .SetValue("cTitluColoana", "Tip tichet,Valoare, Id") + .SetValue("cFiltruOriginal", []) + .SetValue("cresultcoloana","denumire") + .SetValue("cidcoloana","id") + Endwith + + Case lcObjectName = "nom_locatii" + With loHash + .SetValue("cSelect", "select id, denumire, sters, inactiv, id_util, dataora, id_utils, dataoras from vnom_locatii") + .SetValue("cSchema", "") + .SetValue("cFiltru", "1=2") + .SetValue("cOrder", "denumire") + .SetValue("cColoana", "denumire,id") + .SetValue("cTitlu", "Alegeti locatia") + .SetValue("cTitluColoana", "Denumire,Id") + .SetValue("cFiltruOriginal", []) + .SetValue("cresultcoloana","denumire") + .SetValue("cidcoloana","id") + Endwith + + Case lcObjectName = "nom_tipfactura" + With loHash + .SetValue("cSelect", "select id, denumire from fact_tipuri") + .SetValue("cSchema", "") + .SetValue("cFiltru", "1=2") + .SetValue("cOrder", "denumire") + .SetValue("cColoana", "denumire,id") + .SetValue("cTitlu", "Alegeti tipul facturii") + .SetValue("cTitluColoana", "Denumire,Id") + .SetValue("cFiltruOriginal", []) + .SetValue("cresultcoloana","denumire") + .SetValue("cidcoloana","id") + Endwith + + Case lcObjectName = "nom_ruta" + With loHash + .SetValue("cSelect", "select id_ruta, ruta from fact_nom_rute") + .SetValue("cSchema", "") + .SetValue("cFiltru", "1=2") + .SetValue("cOrder", "ruta") + .SetValue("cColoana", "denumire,id") + .SetValue("cTitlu", "Alegeti ruta") + .SetValue("cTitluColoana", "Ruta,Id") + .SetValue("cFiltruOriginal", []) + .SetValue("cresultcoloana","ruta") + .SetValue("cidcoloana","id_ruta") + Endwith + ENDCASE + + RETURN loHash + ENDFUNC && GetDefObjectByName + +Enddefine && BizDataObject diff --git a/COMUN/programe/oproceduri_articole.prg b/COMUN/programe/oproceduri_articole.prg new file mode 100644 index 0000000..407aef2 --- /dev/null +++ b/COMUN/programe/oproceduri_articole.prg @@ -0,0 +1,177 @@ +*!* 27.08.2009 +*!* marius.mutu +*!* viz_catalog_articole - taxa reconditionare + +*!* 07.11.2019 +*!* marius.mutu +*!* viz_catalog_articole - codnc8,greutate,tara origine + +********* Inceput: viz_grupe_subgr_articole +PROCEDURE viz_grupe_subgr_articole + +PRIVATE pnId_grupa +STORE 0 TO pnId_grupa +lcSelect1 = ['select id_grupa,grupa from ] + gcS + [.vgest_art_gr where 1=2'] +lcschema1 = [''] +lcorder1= [grupa] +lcnume_coloane1 = [grupa] +lctitlu_coloane1 = [Grupa] + +lcSelect2 = ['select id_subgrupa,subgrupa,id_grupa,grupa,indicativ from ] + gcS + [.vgest_art_sbgr where 1=2'] +lcschema2 = [''] +lcorder2= [subgrupa] +lcnume_coloane2 = [subgrupa;indicativ] +lctitlu_coloane2 = [Subgrupa,Indicativ] +lcFiltru2 = [id_grupa=?pnId_grupa] + +ofrm_gsa = CREATEOBJECT('frm_grupe_subgr_articole') +ofrm_gsa.Lb_titlu_alb_b121.caption = [Categorii de articole] +*** INITIALIZEZ PROPRIETATILE CONTAINER GRID STANGA +WITH ofrm_gsa.ct_grid_search1 + .cSelect = lcSelect1 + .cSchema = lcSchema1 + .cFiltruOriginal = [2=2] + .cFiltru = [2=2] + .cTitlu = 'GRUPE' + .corder = lcorder1 + .cnume_coloane = lcnume_coloane1 + .ctitlu_coloane = lctitlu_coloane1 + .cnumecursor = [crsgrupe_art] +ENDWITH + +WITH ofrm_gsa.ct_grid_search2 + .cSelect = lcSelect2 + .cSchema = lcSchema2 + .cFiltruOriginal = lcFiltru2 + .cFiltru = [2=2] + .cTitlu = 'SUBGRUPE' + .corder = lcorder2 + .cnume_coloane = lcnume_coloane2 + .ctitlu_coloane = lctitlu_coloane2 + .cnumecursor = [crssubgrupe_art] +ENDWITH + +ofrm_gsa.show(1) +RELEASE ofrm_gsa + +ENDPROC +********* Sfarsit: viz_grupe_subgr_articole + + +********* Inceput: viz_catalog_articole +PROCEDURE viz_catalog_articole + PARAMETERS tlMax,tlCuBifa,tcfiltru_init,tlCaut,tcTitlu,tlHide + + Local lcFiltru_init, lcNrColoane_check, lcSchema, lcTitlu, lcWidth_coloane, lcfiltru, lcnume_coloane + Local lcorder, lcselect, lctitlu_coloane, llCaut, llCuBifa, llHide, llMax, lnPornire, lnparam + Local loColoaneCatalogArticole + lnparam = pcount() + llMax = IIF(lnparam >= 1 and TYPE('tlMax')='L',tlMax,.t.) + llCuBifa = IIF(lnparam >=2 and TYPE('tlCuBifa')='L', tlCuBifa,.f.) + lcFiltru_init = IIF(lnparam >=3 and TYPE('tcFiltru_init')='C', tcFiltru_init,[1=1]) + llCaut = IIF(lnparam >=4 and TYPE('tlCaut')='L', tlCaut,.f.) + lcTitlu = IIF(lnparam >= 5 and TYPE('tcTitlu')='C',tcTitlu,[CATALOG DE MATERIALE SI MARFURI]) + llHide = IIF(lnparam >=6 and TYPE('tlHide')='L', tlHide,.f.) + + + PRIVATE pnpretvtva + STORE 0 TO pnpretvtva + + IF (llCuBifa) + lcselect = ['select 0 as bifa,0 as cant,'+] + lcNrColoane_check = [2] + lcSchema = ['bifa n(1),cant n(7,3),'+] + lcnume_coloane = [bifa;] + lctitlu_coloane =[Selectat,] + ELSE + lcselect = ['select ' +] + lcSchema= [] + lcnume_coloane = [] + lctitlu_coloane =[] + lcNrColoane_check = [11,12,15,21] && IN_STOC, IN_CRM, INACTIV, LISTARE_CODBARE + ENDIF + + lcselect = lcselect + ['inactiv, id_articol, codmat, denumire, um, um2, um_iso, cod_um_iso, id_subgrupa, subgrupa,' +] +; + ['id_grupa, grupa, cant_bax, cont, acont, dnf, in_crm, in_stoc, codbare, codmatf, conditii_pastrare,' + ] + ; + ['id_part,partener,indicativ,taxa_reconditionare,' + ] + ; + ['id_articol_general, articol_general, listare_codbare, tip, timpn, codnc8, greutate, id_tara_origine, tara_origine, codcpv from vnom_articole_toate where 1=2'] + + lcschema = lcschema + ['inactiv n(1),id_articol n(20),codmat c(50),denumire c(100),um c(6),um2 c(6),um_iso c(250),cod_um_iso c(6),id_subgrupa n(5),' +] +; + ['subgrupa c(100), id_grupa n(5), grupa c(100),' +] +; + ['cant_bax n(9,4),cont c(4),acont c(4), dnf n(5), in_crm N(1), in_stoc N(1), codbare C(50), codmatf c(50),' + ] + ; + ['conditii_pastrare M,id_part n(10), partener v(70),indicativ v(10),taxa_reconditionare N(18,4),' + ] + ; + ['id_articol_general n(20),articol_general c(100), listare_codbare n(1), tip n(1), timpn n(10,3), codnc8 C(20), greutate N(12,4), id_tara_origine I, tara_origine C(100), codcpv C(20)'] + lcorder = [denumire] + lcnume_coloane = lcnume_coloane + [codmat;denumire;um;um_iso;cod_um_iso;grupa;subgrupa;cant_bax;um2;cont;acont;in_stoc;in_crm;codbare;dnf;inactiv;codmatf;conditii_pastrare;partener;taxa_reconditionare;articol_general;listare_codbare;tip;timpn;codnc8;greutate;tara_origine;codcpv] + lctitlu_coloane = lctitlu_coloane + [Cod material,Denumire,UM,UM ISO,Cod UM ISO,Grupa,Subgrupa,] +; + [Cant/impachetare,UM2,Cont,Analitic,Gestionabil,Catalog,Cod bare,DNF,Inactiv,Cod Material Furnizor,Conditii Pastrare,Furnizor principal,Taxa reconditionare,Articol general, Listare CodBare,Tip,Timp Normat,Cod NC8, Greutate, Tara origine, Cod CPV] + lcfiltru = [1=2] + + *!* 18.04.2012 + lcWidth_coloane = "" + lnPornire = 1 + loColoaneCatalogArticole = CITESTE_SELECTII_OPTIUNI_UTILIZATOR("CATALOG_ARTICOLE", lcnume_coloane) + lcnume_coloane = IIF(!EMPTY(NVL(loColoaneCatalogArticole.nume_col,'')), loColoaneCatalogArticole.nume_col, m.lcnume_coloane) + lctitlu_coloane = IIF(!EMPTY(NVL(loColoaneCatalogArticole.titlu_col,'')), loColoaneCatalogArticole.titlu_col, m.lctitlu_coloane) + lcWidth_coloane = IIF(!EMPTY(NVL(loColoaneCatalogArticole.width_col,'')), loColoaneCatalogArticole.width_col, m.lcWidth_coloane) + lcOrder = IIF(!EMPTY(NVL(loColoaneCatalogArticole.ordine,'')), loColoaneCatalogArticole.ordine, m.lcorder) + lnPornire = IIF(!EMPTY(NVL(loColoaneCatalogArticole.pornire,'')), loColoaneCatalogArticole.pornire, m.lnPornire) + *!* 18.04.2012 ^ + + PRIVATE ofrm_cat + ofrm_cat = CREATEOBJECT('frm_catalog_articole') + ofrm_cat.Lb_titlu_alb_b121.Caption = lcTitlu + ofrm_cat.lCaut = llCaut + ofrm_cat.lCuBifa = llCuBifa + ofrm_cat.lHide = llHide + + IF !llMax + ofrm_cat.windowstate = 0 + ofrm_cat.height = 350 + ofrm_cat.width = 800 + ofrm_cat.resize + ofrm_cat.autocenter = .t. + ENDIF + + + WITH ofrm_cat.ct_grid_search1 + .cSelect = lcSelect + .cSchema = lcSchema + .cFiltruOriginal = lcFiltru_init + .cFiltru = lcFiltru + .cTitlu = '' + .corder = lcorder + .cnume_coloane = lcnume_coloane + .ctitlu_coloane = lctitlu_coloane + .cnumecursor = [crsnom_articole] + .cNrColoane_check = lcNrColoane_check + *!* 18.04.2012 + .cWidth_coloane = Alltrim(lcWidth_coloane) + .nPornire = lnPornire + *!* 18.04.2012 ^ + ENDWITH + ofrm_cat.Show(1) + + RETURN ofrm_cat + +*!* USE IN (lccursor1) +*!* USE IN (lccursor2) +ENDPROC +********* Sfarsit: viz_catalog_articole + +********* Inceput: config_codmat +Procedure config_codmat + + + +ofrm_configcodmat = CreateObject([frm_config_codmat]) +ofrm_configcodmat.show(1) +EndProc +********* Sfarsit: config_codmat + +********* Inceput: config_codbare +Procedure config_codbare +ofrm_configcodbare = CreateObject([frm_config_codbare]) +ofrm_configcodbare.show(1) +EndProc +********* Sfarsit: config_codbare \ No newline at end of file diff --git a/COMUN/programe/oproceduri_atasamente.prg b/COMUN/programe/oproceduri_atasamente.prg new file mode 100644 index 0000000..7a5200e --- /dev/null +++ b/COMUN/programe/oproceduri_atasamente.prg @@ -0,0 +1,633 @@ +Procedure citeste_atasament_vanzari +Lparameters tnIdAtVanz,tcTip,tnNrAct +If !Empty(tnIdAtVanz) + Private poDocument + Store "" To poDocument + If Used('crsat') + Use In crsat + Endif + + Local loTherm + loTherm = Newobject("_thermometer","_therm","","Citire document din baza de date...") + loTherm.AlwaysOnTop = .T. + loTherm.Show() + + lcSelect = [select document from ] + gcS + [.atasamente_vanzari where ] + lcFiltru = [id_at_vanz=]+Alltrim(Str(tnIdAtVanz)) + lcSchema = [document W] + lcOrder = [] + llAfisare = .F. + GENCURSOR('poDocument','crsat',lcSelect,lcFiltru,lcSchema,lcOrder,llAfisare) + loTherm.Update(40, "Citire document din baza de date...") + poDocument.ca_baza1.afisare() + loTherm.Update(55, "Citire document din baza de date...") + + lcFisier = gcTempPath + Alltrim(Str(tnNrAct,14,0)) + [_] + Alltrim(tcTip) + [.pdf] + loTherm.Update(65, "Testare creare fisier...") + If File(lcFisier) + Try + Delete File (lcFisier) + Catch To oException + lcFisier = Strtran(lcFisier,[.pdf],Ttoc(Datetime(),1)+[.pdf]) + Endtry + Endif + Select crsat + loTherm.Update(85, "Creare fisier...") + Strtofile(Document,lcFisier) + loTherm.Update(95, "Deschidere fisier...") + open_default_app(lcFisier) + loTherm.Complete() + Use In crsat + Release poDocument,loTherm +Endif +Endproc && citeste_atasament_vanzari +***----------------------------------------------------------------------------------------------------------------------------- +Procedure arata_meniu_at_vanz +Lparameters tnCod,tcSerie,tnNrFactura,tcCampValoare +&& daca este completat si tcCampValoare, atunci apare in meniu si optiunea "Copiaza" +&& tcCampValoare trebuie sa fie de forma "cursor.coloana" +Local lnCod,lnNrAct,lcSerie +lnCod = tnCod +lnNrAct = tnNrFactura +lcSerie = Alltrim(Nvl(tcSerie,[])) +If Used('crsmeniu') + Use In crsmeniu +Endif +lcSql = [select a.id_at_vanz,a.tip,a.tip_doc from ] + gcS + [.vatasamente_vanzari a where a.cod = ] + Alltrim(Str(lnCod)) + [ order by a.tip] +lnSucces = goExecutor.oExecute(lcSql,[crsmeniu]) +If lnSucces < 0 + amessagebox(goExecutor.cEroare,16,"Eroare") +Else + Do Case + Case !Empty(tcCampValoare) + lcMeniu = [;\ 0 + lcMeniu = lcMeniu + [;\-] + Select crsmeniu + Scan + lcMeniu = lcMeniu + [;] + Alltrim(tip_doc) + Endscan + Endif + x = xmenu(Substr(lcMeniu,2)) + Do Case + Case x = 1 + _Cliptext = Transform(Evaluate(tcCampValoare)) + Case Between(x,3,2+Reccount('crsmeniu')) + Select crsmeniu + Go (x - 2) + citeste_atasament_vanzari(crsmeniu.id_at_vanz,crsmeniu.tip_doc,lnNrAct) + Endcase + Case Reccount('crsmeniu') = 1 + citeste_atasament_vanzari(crsmeniu.id_at_vanz,crsmeniu.tip_doc,lnNrAct) + Case Reccount('crsmeniu')>0 + lcMeniu = [] + Select crsmeniu + Scan + lcMeniu = lcMeniu + [;] + Alltrim(tip_doc) + Endscan + x = xmenu(Substr(lcMeniu,2)) + Select crsmeniu + Go x + citeste_atasament_vanzari(crsmeniu.id_at_vanz,crsmeniu.tip_doc,lnNrAct) + Otherwise + amessagebox("Nu exista documente salvate in baza de date pentru factura "+lcSerie+" "+Alltrim(Str(lnNrAct,14,0)) + " !",48,"Atentie") + Endcase + Use In crsmeniu +Endif +Endproc && arata_meniu_at_vanz +***----------------------------------------------------------------------------------------------------------------------------- +Procedure make_crsAtasamente +Parameters tlToate + +Private poLink +Store '' To poLink + +Local lcSchema, lcSelect, lcOrder, lcFiltru, lcFiltruOriginal, llAfiseaza, lcgroup, lcFiltruOriginal +lcSchema = [id_referinta N(5), id_atas N(5), descriere c(50), nume_fisier c(200), fisier w, dataora t, utilizator c(100) ] + +lcSelect = [select ar.id_referinta, ar.id_atas, ar.descriere, ar.nume_fisier, '' as fisier, dataora, utilizator ]+; + [ from VATAS_REFERINTE ar ] + +lcOrder = [ar.nume_fisier, ar.descriere] +lcgroup = [] +lcFiltru = [] + +*lcFiltruOriginal = [l.sters=0 and l.nume_fisier is not null and l.id_reg =]+Alltrim(Str(goRegistratura.id_reg)) +Do Case +Case Upper(Alltrim(gcNumeProgram)) = "ROAREGISTRATURA" + lcFiltruOriginal = [ ar.nume_fisier is not null and ar.id_program = 70 and ar.id_entitate=]+Alltrim(Str(goRegistratura.id_reg)) +Case Upper(Alltrim(gcNumeProgram)) = "ROACONTRACTE" + lcFiltruOriginal = [ ar.nume_fisier is not null and ar.id_program = 21 and ar.id_entitate=]+Alltrim(Str(goContract.id_ctr)) +Case Upper(Alltrim(gcNumeProgram)) = "ROALUCRARI" + lcFiltruOriginal = [ ar.nume_fisier is not null and ar.id_program = 13 and ar.id_entitate=]+Alltrim(Str(crsProiecte.id_proiect)) +Endcase + +llModParam = .T. +llAfiseaza = .F. + +GENCURSOR('poLink','crsAtasamenteI', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal) +poLink.ca_baza1.afisare() + +Select * From crsAtasamenteI With (Buffering = .T.); + into Cursor crsAtasamente Readwrite + +If Used('crsAtasamenteI') + Use In crsAtasamenteI +Endif + +Endproc && make_crsAtasamente +***----------------------------------------------------------------------------------------------------------------------------- +PROCEDURE inchide_crsAtasamente + +IF USED('crsAtasamente') + USE IN crsAtasamente +ENDIF + +ENDPROC && inchide_crsAtasamente +***----------------------------------------------------------------------------------------------------------------------------- +Procedure upload +Parameters tcTabel + +Private pnId_entitate, pcLink, pcDescriere, pcFis_name, pcFisier, pnId_atas &&,pntip_entitate modificare 30.05.2011 +Store 0 To pnTip_entitate, pnId_atas &&,pnTip_entitate modificare 30.05.2011 +Store "" To pcDescriere, pcFis_name, pcFisier, pcLink +* pcLink - private - folosit in frm_atas_nou + +Local llReturn,lcSql,lnSucces +llReturn = .T. + +Local lcTabelLinkuri +Store '' To lcTabelLinkuri + +If !Empty(tcTabel) + lcTabelLinkuri = Alltrim(tcTabel) && Thisform.grid_linkuri.RecordSource + Select (lcTabelLinkuri) + Scatter Name poLink Blank Memo +Else + Create Cursor crsAtasTemp (id_atas N(5), descriere c(50), nume_fisier c(200), fisier w) + Select crsAtasTemp + Scatter Name poLink Blank Memo + Use In crsAtasTemp +Endif + +If Upper(Alltrim(gcNumeProgram)) = "ROAREGISTRATURA" + AddProperty(poLink,'id_proiect',goRegistratura.id_proiect) + AddProperty(poLink,'proiect',Alltrim(goRegistratura.proiect)) +Else + AddProperty(poLink,'id_proiect',0) + AddProperty(poLink,'proiect','') +Endif +AddProperty(poLink,'id_ctr',0) +AddProperty(poLink,'contract','') + +lodn = Createobject("frm_atas_nou") +lodn.Show(1) +If gnButon = 2 + Return +Endif + +If Upper(Alltrim(gcNumeProgram)) = "ROAREGISTRATURA" + pnId_entitate = goRegistratura.id_reg +*!* pnTip_entitate = 1 modificare 30.05.2011 +Endif +If Upper(Alltrim(gcNumeProgram)) = "ROACONTRACTE" + pnId_entitate = goContract.id_ctr +*!* pnTip_entitate = 2 modificare 30.05.2011 +Endif +If Upper(Alltrim(gcNumeProgram)) = "ROALUCRARI" + pnId_entitate = Alltrim(Str(crsProiecte.id_proiect)) +*!* pnTip_entitate = 3 modificare 30.05.2011 +Endif +pcDescriere = Upper(Alltrim(poLink.descriere)) +pcFis_name = Upper(Alltrim(poLink.nume_fisier)) +If Empty(pcLink) + Return +Endif +pcFisier = Filetostr(pcLink) + + +lnSucces = SQLSetprop(gnhandle,"Transactions",2) +If lnSucces < 0 + amessagebox("Programul nu a reusit sa treaca pe tranzactie manuala! Reintrati in program si incercati din nou!",48,"Atentie") +Else + lcSql = [insert into atas_atasamente(fisier, nume_fisier, descriere, id_util) ]+; + [values (?pcFisier, ?pcFis_name, ?pcDescriere, ?gnIdUtil) ] + ; + [ returning id_atas into ?@pnId_atas] + lnSucces = goExecutor.oExecute(lcSql) + If lnSucces < 0 + aMessagebox(goExecutor.cEroare,0+16,'Eroare') + Else + If Upper(Alltrim(gcNumeProgram)) = "ROAREGISTRATURA" + lcSql = [update registratura set id_proiect = ?polink.id_proiect where id_reg = ?pnId_entitate] + lnSucces = goExecutor.oExecute(lcSql) + If lnSucces < 0 + aMessagebox(goExecutor.cEroare,0+16,'Eroare') + Else + lcSql = [insert into atas_referinte(id_atas, id_program, id_entitate, id_util) ]+; + [values (?pnId_atas, ?gnIdProgram, ?pnId_entitate, ?gnIdUtil) ] && registratura modificare 30.05.2011 : am inlocuit pnTip_Entitate cu gnIdProgram + lnSucces = goExecutor.oExecute(lcSql) + If lnSucces < 0 + aMessagebox(goExecutor.cEroare,0+16,'Eroare') + Else + If !Empty(Nvl(poLink.id_ctr,0)) And poLink.id_ctr<> -1 + lcSql = [insert into atas_referinte(id_atas, id_program, id_entitate, id_util) ]+; + [values (?pnId_atas, ?gnIdProgram, ?polink.id_ctr, ?gnIdUtil) ] && contracte modificare 30.05.2011 : am inlocuit pnTip_Entitate cu gnIdProgram + lnSucces = goExecutor.oExecute(lcSql) + If lnSucces < 0 + aMessagebox(goExecutor.cEroare,0+16,'Eroare') + Else + If !Empty(Nvl(poLink.id_proiect,0)) And poLink.id_proiect <> -1 + lcSql = [insert into atas_referinte(id_atas, id_program, id_entitate, id_util) ]+; + [values (?pnId_atas, ?gnIdProgram, ?polink.id_proiect, ?gnIdUtil) ] && lucrari modificare 30.05.2011 : am inlocuit pnTip_Entitate cu gnIdProgram + lnSucces = goExecutor.oExecute(lcSql) + If lnSucces < 0 + aMessagebox(goExecutor.cEroare,0+16,'Eroare') + Endif + Endif + Endif + Endif + Endif + Endif + Else && RoaContracte, RoaLucrari + lcSql = [insert into atas_referinte(id_atas, id_program, id_entitate, id_util) ]+; + [values (?pnId_atas, ?gnIdProgram, ?pnId_entitate, ?gnIdUtil) ] && modificare 30.05.2011 : am inlocuit pnTip_Entitate cu gnIdProgram + lnSucces = goExecutor.oExecute(lcSql) + If lnSucces < 0 + aMessagebox(goExecutor.cEroare,0+16,'Eroare') + Endif + Endif + Endif +Endif + +If lnSucces < 0 + lcSql = "ROLLBACK" +Else + lcSql = "COMMIT" +Endif +lnSucces2 = goExecutor.oExecute(lcSql) + +If lnSucces2 < 0 + amessagebox(lcSql + Chr(13) + goExecutor.cEroare,0+16,"Eroare") +Endif + +lnSucces2 = SQLSetprop(gnhandle,"Transactions",1) +If lnSucces2 < 0 + amessagebox('Programul nu a reusit sa treaca pe tranzactie automata. Iesiti din program si intrati din nou!',0+48,'Atentie!') +Else + If lcSql = "COMMIT" + If !Empty(lcTabelLinkuri) + Select (lcTabelLinkuri) + Append Blank + Gather Name poLink Memo + Replace fisier With pcFisier, id_atas With pnId_atas, nume_fisier With pcFis_name, descriere With pcDescriere, dataora With Datetime(), utilizator With gcUserNameApp + Endif + + Do Case + Case Upper(Alltrim(gcNumeProgram)) = "ROAREGISTRATURA" + goRegistratura.proiect = poLink.proiect + goRegistratura.id_proiect = poLink.id_proiect + + Replace are_link With 1 In cRegistratura + Replace id_proiect With poLink.id_proiect In cRegistratura + Replace proiect With poLink.proiect In cRegistratura + Case Upper(Alltrim(gcNumeProgram)) = "ROACONTRACTE" + Replace are_link With 1 In cContracte + Endcase + + Endif +Endif + + +Endproc && upload +***----------------------------------------------------------------------------------------------------------------------------- +Procedure import_atasamente +Parameters tnTipEntitate +&& completare campuri nume_fis si link_bd din link - la versiunea 2.0.7 - se salveaza atasamentele in bd +&& ver. 2.0.12 - preluare din ctr_linkuri (reg_linkuri) in atas_atasamente, atas_referinte +&& tnTipEntitate/gnIdProgram = 70-RoaRegistratura, 21-RoaContracte, 13-RoaLucrari + +Private poLink, pcFisier, pcNume_fis, pcDescriere, pnId_entitate, pnId_atas, pnId_link, pnTipEntitate +Store '' To poLink +Store 0 To pnId_entitate, pnId_atas, pnId_link +*!* modificare 31.05.2011 +*!* If Empty(tnTipEntitate) +*!* Return +*!* Endif +*!* pnTipEntitate= tnTipEntitate +pnTipEntitate = IIF(EMPTY(tnTipEntitate),gnIdProgram,tnTipEntitate) +*!* modificare 31.05.2011 ^ + +Local lcSchema, lcSelect, lcOrder, lcFiltru, lcFiltruOriginal, llAfiseaza, lcgroup, lcFiltruOriginal +lcSchema = [id_link N(5), id_entitate n(5), descriere c(50), link c(200) ] +Do Case +Case Upper(Alltrim(gcNumeProgram)) = "ROACONTRACTE" + lcSelect = [select id_link, id_ctr as id_entitate, DENUMIRE AS descriere, link ]+; + [from ctr_linkuri] +Case Upper(Alltrim(gcNumeProgram)) = "ROAREGISTRATURA" + lcSelect = [select id_link, id_reg as id_entitate, DENUMIRE AS descriere, link ]+; + [from reg_linkuri] +Case Upper(Alltrim(gcNumeProgram)) = "ROALUCRARI" + lcSelect = [select id_link, id_proiect as id_entitate, DENUMIRE AS descriere, link ]+; + [from con_linkuri] +Endcase + +lcOrder = [] +lcgroup = [] +lcFiltru = [STERS=0] +lcFiltruOriginal = [link is not null and id_link not in (select id_link from atas_atasamente where id_tip_ent_prel = ?pnTipEntitate)] +llModParam = .T. +llAfiseaza = .F. + +GENCURSOR('poLink','cCtrLink2', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal) +poLink.ca_baza1.afisare() + +Private pnId_link, pcNume_fis, pcLink_bd +Local lcMesaj +lcMesaj = '' + +Select cCtrLink2 +Calculate Cnt() To lnFisiere +lnIndex = 0 +Scan + pnId_link = id_link + pnId_entitate = id_entitate + lcLink = Alltrim(Link) + pcNume_fis = Justfname(lcLink) + pcDescriere = Upper(Alltrim(descriere)) + lnIndex = lnIndex + 1 + Wait Window Alltrim(Str(lnIndex)) + '/' + Alltrim(Str(lnFisiere)) + " " + pcNume_fis Nowait + If File(lcLink) + pcFisier = Filetostr(lcLink) +*lcSql = [update ctr_linkuri set nume_fis=?pcNume_fis, link_bd = ?pcLink_bd where id_link=?pnId_link] + lcSql = [insert into atas_atasamente (fisier, nume_fisier, id_util, descriere, id_link, id_tip_ent_prel) ]+; + [values (?pcFisier, ?pcNume_fis, ?gnIdUtil, ?pcDescriere, ?pnId_link, ?pnTipEntitate) ] +; + [returning id_atas into ?@pnId_atas] + lnSucces = goExecutor.oExecute(lcSql) + If lnSucces < 0 + If amessagebox(goExecutor.cEroare + Chr(13) + Chr(10) + 'Doriti sa continuati?',4+48,'Eroare') # 6 + Exit + Endif + Else + lcSql = [insert into atas_referinte (id_atas, id_program, id_entitate, id_util) ]+; + [values (?pnId_atas, ?pnTipEntitate, ?pnId_entitate, ?gnIdUtil)] + lnSucces = goExecutor.oExecute(lcSql) + If lnSucces < 0 + If amessagebox(goExecutor.cEroare + Chr(13) + Chr(10) + 'Doriti sa continuati?',4+48,'Eroare') # 6 + Exit + Endif + Endif + Endif + Else + lcMes = 'Nu exista fisierul '+lcLink+Chr(13) + lcMesaj = lcMesaj + lcMes + + Endif + + Select cCtrLink2 +Endscan + +If !Empty(lcMesaj) + amessagebox(lcMesaj) +Endif + +If Used('cCtrLink2') + Use In cCtrLink2 +Endif + +Endproc && import_atasamente +***----------------------------------------------------------------------------------------------------------------------------- +Procedure modifica_atasament +Parameters tcTabel + +Private pcDescriere, pnId_atas +Store 0 To pnId_atas +Store "" To pcDescriere +* pcLink - private - folosit in frm_atas_nou + +Local llReturn,lcSql,lnSucces +llReturn = .T. + +Local lcTabelLinkuri +If !Empty(tcTabel) + lcTabelLinkuri = Alltrim(tcTabel) && Thisform.grid_linkuri.RecordSource + Select (lcTabelLinkuri) + Scatter Name poLink Memo +Else + Return +Endif + +If Upper(Alltrim(gcNumeProgram)) = "ROAREGISTRATURA" + AddProperty(poLink,'id_proiect',goRegistratura.id_proiect) + AddProperty(poLink,'proiect',Alltrim(goRegistratura.proiect)) +Else + AddProperty(poLink,'id_proiect',0) + AddProperty(poLink,'proiect','') +Endif +AddProperty(poLink,'id_ctr',0) +AddProperty(poLink,'contract','') + +lodn = Createobject("frm_atas_nou") +lodn.Command3.Enabled=.F. +lodn.Show(1) +If gnButon = 2 + Return +Endif + +pnId_atas = poLink.id_atas +pcDescriere = Upper(Alltrim(poLink.descriere)) + +lcSql = [update atas_atasamente set descriere = ?pcDescriere ]+; + [where id_atas = ?pnId_atas] + +lnSucces = goExecutor.oExecute(lcSql) +If lnSucces < 0 + aMessagebox(goExecutor.cEroare,0+16,'Eroare') +Endif + +If !Empty(lcTabelLinkuri) + Select (lcTabelLinkuri) + Gather Name poLink Memo + Replace descriere With pcDescriere +Endif + +Endproc && modifica_atasament +***----------------------------------------------------------------------------------------------------------------------------- +Procedure salveaza_atasamente + Parameters tcTabel + + Local lcTabel + lcTabel = tcTabel + + lcSql = [select ar.id_referinta ]+; + [ from VATAS_REFERINTE ar ]+; + [ where ar.nume_fisier is not null and ar.id_program = ?gnIdProgram and ar.id_entitate=]+Alltrim(Str(goContract.id_ctr)) + lcCursor = 'crsAtasamente_server' + lnSucces = goExecutor.oExecute(lcSql, lcCursor) + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare,0+16,"Eroare") + Return lnSucces + Endif + + * daca exista id_referinta in plus in cursorul de pe local, adaug pe server + Private pnId_entitate, pcLink, pcDescriere, pcFis_name, pcFisier, pnId_atas + Store 0 To pnId_entitate, pnId_atas + Store "" To pcDescriere, pcFis_name, pcFisier, pcLink + + pnId_entitate = goContract.id_ctr + + Select * From (lcTabel) ; + Where (Empty(id_referinta) Or Isnull(id_referinta)) ; + INTO Cursor cAtasamente_nou + + Select cAtasamente_nou + Scan + pcDescriere = Upper(Alltrim(descriere)) + pcFis_name = Upper(Alltrim(nume_fisier)) + *!* If Empty(pcLink) + *!* Return + *!* Endif + * pcFisier = Filetostr(pcLink) + pcFisier = fisier + + lcSql = [insert into atas_atasamente(fisier, nume_fisier, descriere, id_util) ]+; + [values (?pcFisier, ?pcFis_name, ?pcDescriere, ?gnIdUtil) ] + ; + [ returning id_atas into ?@pnId_atas] + lnSucces = goExecutor.oExecute(lcSql) + If lnSucces < 0 + aMessagebox(goExecutor.cEroare,0+16,'Eroare') + Endif + + lcSql = [insert into atas_referinte(id_atas, id_program, id_entitate, id_util) ]+; + [values (?pnId_atas, ?gnIdProgram, ?pnId_entitate, ?gnIdUtil) ] + lnSucces = goExecutor.oExecute(lcSql) + If lnSucces < 0 + aMessagebox(goExecutor.cEroare,0+16,'Eroare') + Return lnSucces + Endif + Select cAtasamente_nou + Endscan + + If Used('cAtasamente_nou') + Use In cAtasamente_nou + Endif + + * daca exista id_referinta pe server, care nu mai sunt pe local, sterg + *!* Select id_referinta From crsAtasamente_server ; + *!* Where id_referinta Not In (Select id_referinta From cId_ref) ; + *!* INTO Cursor cAtasamente_sters + + lcDeleted = Set("Deleted") + + Set Deleted Off + Select * From (lcTabel) Where Deleted() And !Empty(id_referinta); + INTO Cursor cAtasamente_sters + + Select cAtasamente_sters + Scan + *pcId_atas = Alltrim(Str(id_atas)) + lcId_referinta = Alltrim(Str(id_referinta)) + lcSql = [update atas_referinte set sters = 1, dataoras = SYSDATE, id_utils = ] + Alltrim(Str(gnIdUtil)) + ; + [ WHERE id_referinta = ] + lcId_referinta + lnSucces = goExecutor.oExecute(lcSql) + + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare,0+16,"Eroare") + Return lnSucces + Endif + Select cAtasamente_sters + Endscan + + If Used('cAtasamente_sters') + Use In cAtasamente_sters + Endif + + Set Deleted &lcDeleted + + If Used('cAtasamente_sters') + Use In cAtasamente_sters + Endif + + If Used('crsAtasamente_server') + Use In crsAtasamente_server + Endif + + Return lnSucces +Endproc && salveaza_atasamente +***----------------------------------------------------------------------------------------------------------------------------- +Procedure arata_linkuri + +Private poLink +Store '' To poLink + +Local lcMenu, lnx, lcDocument,lnNrLinkuri, lnIdAtas +Local lcSchema, lcSelect, lcOrder, lcFiltru, lcFiltruOriginal, llAfiseaza, lcgroup, lcFiltruOriginal +Store '' To lcMenu +Store 0 To lnNrLinkuri, lnIdAtas + + +Do make_crsAtasamente In oproceduri_atasamente.prg + +lcMenu = lcMenu + "Ataseaza ...;\-;" +Select crsAtasamente +Scan + lcMenu = lcMenu + Alltrim(Nvl(descriere,''))+ ' - ' + Alltrim(Nvl(nume_fisier,'')) +';' + lnNrLinkuri = lnNrLinkuri + 1 + Select crsAtasamente +Endscan + +If Upper(Alltrim(gcNumeProgram)) = "ROALUCRARI" And lnNrLinkuri > 0 + lcMenu = lcMenu + '\-;'+ "Vizualizare atasamente ...;" +Endif + + +If !Empty(lcMenu) + lcMenu = Substr(lcMenu,1,Len(lcMenu)-1) + lnx = xmenu(lcMenu) + + Do Case + Case lnx = 1 && Ataseaza + Do upload In oproceduri_atasamente.prg + Case lnx = lnNrLinkuri + 4 + Select crsAtasamente + Go Top + + ofrmVizAtas = Createobject('frm_viz_atasamente') + ofrmVizAtas.Show(1) + Release ofrmVizAtas + Otherwise + + Select crsAtasamente + Locate For Recno() = lnx - 2 + If Found() + lnIdAtas = id_atas + lcNume_fisier = Alltrim(nume_fisier) + lcSchema = [fisier w ] + lcSelect = [select fisier from atas_atasamente where id_atas = ] + Alltrim(Str(lnIdAtas)) + lcOrder = [] + lcgroup = [] + lcFiltru = [] + lcFiltruOriginal = [] + llModParam = .T. + llAfiseaza = .F. + + GENCURSOR('poLink','cRegFisierTemp', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal) + poLink.ca_baza1.afisare() + If Used('cRegFisierTemp') + lcFisier = fisier + Use In (Select('cRegFisierTemp')) + lcFisSalvat = Addbs(gcTempPath)+lcNume_fisier + + Strtofile(lcFisier, lcFisSalvat) + open_default_app(lcFisSalvat) + + Endif + Endif + Endcase + + If Used('crsAtasamente') + Use In crsAtasamente + Endif +Endif + +Endproc && arata_linkuri +***----------------------------------------------------------------------------------------------------------------------------- diff --git a/COMUN/programe/oproceduri_casa_marcat_e500.prg b/COMUN/programe/oproceduri_casa_marcat_e500.prg new file mode 100644 index 0000000..9f1e792 --- /dev/null +++ b/COMUN/programe/oproceduri_casa_marcat_e500.prg @@ -0,0 +1,103 @@ +********************************************************************************************************* +Procedure imprimare_bon_fiscal +Lparameters tcSir,tdDataOra,tnNrBon +Private pcCale,pcExec,pcFisierText +Store [] To pcCaleExec,pcExec,pcFisierText +Local lcSir +lcSir=tcSir +gaseste_fisier_ini() +If !Empty(pcCaleExec) + Set Safety Off + Strtofile(lcSir,pcCaleExec+pcFisierText,0) + Cd (pcCaleExec) + lcDirectorZi=Iif(Type('tdDataOra')='D',Dtos(tdDataOra),Dtos(Ttod(tdDataOra))) + ltDataOra=Iif(Type('tdDataOra')='T',tdDataOra,Datetime()) + lcNumeFisierBon=Alltrim(Str(tnNrBon))+[_]+Alltrim(Str(Hour(ltDataOra)))+[_]+; + ALLTRIM(Str(Minute(ltDataOra)))+[_]+Alltrim(Str(Sec(ltDataOra))) + lnRaspuns=6 + lnNrIncercare=0 + Do While lnRaspuns=6 + lcComanda=[RUN ]+pcCaleExec+pcExec + &lcComanda + If File(pcCaleExec+[ERR]) + lcString=Filetostr(pcCaleExec+[ERR]) + lcStringOk=Replicate([0]+Chr(13)+Chr(10),Occurs(Chr(13)+Chr(10),lcString)) + If lcString=lcStringOk + lcDirector=[Bonuri ok] + lnRaspuns=7 + Else + lcDirector=[Bonuri err] + lnRaspuns=aMessagebox("Eroare la listarea bonului! Doriti sa reincercati?",; + 4+16+256,"Eroare") + lnNrIncercare=lnNrIncercare+1 + Endif + If !Directory(pcCaleExec+lcDirector) + Md (lcDirector) + Endif + If !Directory(pcCaleExec+lcDirector+[\]+lcDirectorZi) + Md (pcCaleExec+lcDirector+[\]+lcDirectorZi) + Endif + lcNumeFisierBon=lcNumeFisierBon+; + IIF(lnNrIncercare>0,[_I]+Alltrim(Str(lnNrIncercare)),[]) + Copy File (pcCaleExec+pcFisierText) To ; + (pcCaleExec+lcDirector+[\]+lcDirectorZi+[\]+lcNumeFisierBon+[.txt]) + Copy File (pcCaleExec+[ERR]) To ; + (pcCaleExec+lcDirector+[\]+lcDirectorZi+[\]+lcNumeFisierBon+[.err]) + Delete File (pcCaleExec+[ERR]) + Else + lcDirectorErr=[Bonuri err] + If !Directory(pcCaleExec+lcDirectorErr) + Md (lcDirectorErr) + Endif + If !Directory(pcCaleExec+lcDirectorErr+[\]+lcDirectorZi) + Md (pcCaleExec+lcDirectorErr+[\]+lcDirectorZi) + Endif + Copy File (pcCaleExec+pcFisierText) To ; + (pcCaleExec+lcDirectorErr+[\]+lcDirectorZi+[\]+lcNumeFisierBon+[.txt]) + Endif + Enddo + Cd (gcAppPath) +Endif +Endproc && imprimare_bon_fiscal +********************************************************************************************************* +Procedure gaseste_fisier_ini +Local lnFileHandle,lcFisierConfigurare,lnRaspuns +lnRaspuns=6 +lcFisierConfigurare=gcAppPath+[\INITIALIZARI\]+Alltrim(gcNumeProgram)+[_bon.xml] +Do While lnRaspuns=6 + If File(lcFisierConfigurare) + lnFileHandle=Fopen(lcFisierConfigurare,12) + lnSize = Fseek(lnFileHandle,0,2) + If lnSize>0 + Fseek(lnFileHandle, 0, 0) + lcFisier = Fread(lnFileHandle,lnSize) + lcString = Strextract(Upper(lcFisier),; + [<]+Upper(Alltrim(gcS))+[>],[]) + If !Empty(lcString) + lcElement=[LAUNCH_PATH] + pcCaleExec=Strextract(lcString,[<]+lcElement+[>],[]) + lcElement=[LAUNCH_FILE] + pcExec=Strextract(lcString,[<]+lcElement+[>],[]) + lcElement=[LAUNCH_DATA] + pcFisierText=Strextract(lcString,[<]+lcElement+[>],[]) + Else + aMessagebox("Nu exista configurarile pentru listarea bonurilor fiscale pe aceasta firma!",0+48,"Atentie") + pcCaleExec=[] + Endif + Else + aMessagebox("Fisierul de configurari pentru bonurilor fiscale este gol!",0+48,"Atentie") + pcCaleExec=[] + Endif + Fclose(lnFileHandle) + Else + aMessagebox("Nu exista fisierul de configurare pentru listarea bonurilor fiscale!",0+48,"Atentie") + pcCaleExec=[] + Endif + If Empty(pcCaleExec) + lnRaspuns=aMessagebox("Doriti sa mai incercati listarea bonului?",4+32+256,"Confirmare") + Else + lnRaspuns=7 + Endif +Enddo +Endproc && gaseste_fisier_ini +********************************************************************************************************* \ No newline at end of file diff --git a/COMUN/programe/oproceduri_casa_marcat_mp500.prg b/COMUN/programe/oproceduri_casa_marcat_mp500.prg new file mode 100644 index 0000000..5a830d2 --- /dev/null +++ b/COMUN/programe/oproceduri_casa_marcat_mp500.prg @@ -0,0 +1,116 @@ +********************************************************************************************************* +Procedure imprimare_bon_mp500 +Lparameters tcSir,tdDataOra,tnNrBon +Private pcCale,pcExec,pcFisierText +Store [] To pcCaleExec,pcExec,pcFisierText +Local lcSir,lcFisierRez,laCount,i,llOk +lcSir=tcSir +lcFisierRez = [] +laCount = 0 +i=0 +lcOk = .t. + +gaseste_fisier_ini_mp500() +If !Empty(pcCaleExec) + Set Safety Off + Strtofile(lcSir,pcCaleExec+pcFisierText,0) + + Cd (pcCaleExec) + lcDirectorZi=Iif(Type('tdDataOra')='D',Dtos(tdDataOra),Dtos(Ttod(tdDataOra))) + ltDataOra=Iif(Type('tdDataOra')='T',tdDataOra,Datetime()) + lcNumeFisierBon=Alltrim(Str(tnNrBon))+[_]+Alltrim(Str(Hour(ltDataOra)))+[_]+; + ALLTRIM(Str(Minute(ltDataOra)))+[_]+Alltrim(Str(Sec(ltDataOra))) + lnRaspuns=6 + lnNrIncercare=0 + Do While lnRaspuns=6 + + lcComanda=[RUN ]+pcCaleExec+pcExec + [ ] + pcCaleExec + pcFisierText + &lcComanda + + + lcFisierRez = pcCaleExec+[answer.txt] + laCount = ALINES(laFisierRez,FILETOSTR(lcFisierRez)) + + IF laCount#0 + FOR i=1 TO laCount + llOk = IIF(OCCURS('Er',STREXTRACT(laFisierRez[i],';',';',1))>0,.f.,.t.) + IF llOk = .f. + EXIT + ENDIF + ENDFOR + ELSE + llOk = .f. + ENDIF + + RELEASE laFisierRez + + IF llOk = .f. + + lcDirector=[Bonuri err] + lnRaspuns=aMessagebox("Eroare la listarea bonului! Doriti sa reincercati?",; + 4+16+256,"Eroare") + lnNrIncercare=lnNrIncercare+1 + ELSE + lcDirector=[Bonuri ok] + lnRaspuns=7 + + ENDIF + If !Directory(pcCaleExec+lcDirector) + Md (lcDirector) + Endif + If !Directory(pcCaleExec+lcDirector+[\]+lcDirectorZi) + Md (pcCaleExec+lcDirector+[\]+lcDirectorZi) + Endif + + lcNumeFisierBon=lcNumeFisierBon+; + IIF(lnNrIncercare>0,[_I]+Alltrim(Str(lnNrIncercare)),[]) + + Copy File (lcFisierRez) To ; + (pcCaleExec+[\]+lcDirector+[\]+lcDirectorZi+[\]+lcNumeFisierBon+[.txt]) + + Enddo + Cd (gcAppPath) +Endif +Endproc && imprimare_bon_fiscal +********************************************************************************************************* +Procedure gaseste_fisier_ini_mp500 +Local lnFileHandle,lcFisierConfigurare,lnRaspuns +lnRaspuns=6 +lcFisierConfigurare=gcAppPath+[\INITIALIZARI\]+Alltrim(gcNumeProgram)+[_mp500.xml] +Do While lnRaspuns=6 + If File(lcFisierConfigurare) + lnFileHandle=Fopen(lcFisierConfigurare,12) + lnSize = Fseek(lnFileHandle,0,2) + If lnSize>0 + Fseek(lnFileHandle, 0, 0) + lcFisier = Fread(lnFileHandle,lnSize) + lcString = Strextract(Upper(lcFisier),; + [<]+Upper(Alltrim(gcS))+[>],[]) + If !Empty(lcString) + lcElement=[LAUNCH_PATH] + pcCaleExec=Strextract(lcString,[<]+lcElement+[>],[]) + lcElement=[LAUNCH_FILE] + pcExec=Strextract(lcString,[<]+lcElement+[>],[]) + lcElement=[LAUNCH_DATA] + pcFisierText=Strextract(lcString,[<]+lcElement+[>],[]) + Else + aMessagebox("Nu exista configurarile pentru listarea bonurilor fiscale pe aceasta firma!",0+48,"Atentie") + pcCaleExec=[] + Endif + Else + aMessagebox("Fisierul de configurari pentru bonurilor fiscale este gol!",0+48,"Atentie") + pcCaleExec=[] + Endif + Fclose(lnFileHandle) + Else + aMessagebox("Nu exista fisierul de configurare pentru listarea bonurilor fiscale!",0+48,"Atentie") + pcCaleExec=[] + Endif + If Empty(pcCaleExec) + lnRaspuns=aMessagebox("Doriti sa mai incercati listarea bonului?",4+32+256,"Confirmare") + Else + lnRaspuns=7 + Endif +Enddo +Endproc && gaseste_fisier_ini +********************************************************************************************************* \ No newline at end of file diff --git a/COMUN/programe/oproceduri_casademarcat.prg b/COMUN/programe/oproceduri_casademarcat.prg new file mode 100644 index 0000000..326368e --- /dev/null +++ b/COMUN/programe/oproceduri_casademarcat.prg @@ -0,0 +1,186 @@ +Procedure casademarcat +Local lnLungime,lnButon +lnLungime=14 +lnRaspuns=6 +Dimension taValori[lnLungime,3] +*!* modificare migrare v 1.0 > v 2.0 +*!* Do While lnRaspuns = 6 +*!* glListareBonFiscal=.T. +*!* modificare migrare v 1.0 > v 2.0 ^ + +taValori[1,1]="poAct.id_fdoc" +taValori[1,2]=Alltrim(Str(gnid_fdoc_bonfiscal)) +taValori[1,3]= !Empty(gnid_fdoc_bonfiscal) + +taValori[2,1]="poAct.fdoc" +*!* modificare migrare v 1.0 > v 2.0 +*!* taValori[2,2]=IIF(!EMPTY(gnid_fdoc_bonfiscal),[BON FISCAL],[]) +taValori[2,2]=Iif(!Empty(gnid_fdoc_bonfiscal),citeste_setari_casademarcat(1,gnid_fdoc_bonfiscal),[]) +*!* modificare migrare v 1.0 > v 2.0 +taValori[2,3]= !Empty(gnid_fdoc_bonfiscal) + +taValori[3,1]="poAct.id_gestout" +taValori[3,2]=Alltrim(Str(gnid_gestiune_bufet)) +taValori[3,3]= !Empty(gnid_gestiune_bufet) + +taValori[4,1]="poAct.gestout" +*!* modificare migrare v 1.0 > v 2.0 +*!* taValori[4,2]=IIF(!EMPTY(gnid_gestiune_bufet),[BUFET],[]) +taValori[4,2]=Iif(!Empty(gnid_gestiune_bufet),citeste_setari_casademarcat(2,gnid_gestiune_bufet),[]) +*!* modificare migrare v 1.0 > v 2.0 +taValori[4,3]=!Empty(gnid_gestiune_bufet) + +*!* lnNumarBon = aloca_numar_bf() && in oserii_numere.prg +*!* IF lnNumarBon = -1 +*!* Return +*!* Endif + +*!* taValori[5,1]="poAct.nract" +*!* taValori[5,2]=Alltrim(Str(lnNumarBon)) +*!* taValori[5,3]=.T. + +taValori[5,1]="poAct.id_vv4111" +taValori[5,2]=Alltrim(Str(gnid_part_diversi)) +taValori[5,3]=!Empty(gnid_part_diversi) + +taValori[6,1]="poAct.v4111" +*!* modificare migrare v 1.0 > v 2.0 +*!* taValori[6,2]= IIF(!EMPTY(gnid_part_diversi),[DIVERSI],[]) +taValori[6,2]= Iif(!Empty(gnid_part_diversi),citeste_setari_casademarcat(3,gnid_part_diversi),[]) +*!* modificare migrare v 1.0 > v 2.0 ^ +taValori[6,3]=!Empty(gnid_part_diversi) + +taValori[7,1]="poAct.id_lucrare" +taValori[7,2]=[0] +taValori[7,3]=.T. + +taValori[8,1]="poAct.nrord" +taValori[8,2]=[] +taValori[8,3]=.T. + +taValori[9,1]="poAct.id_responsabil" +taValori[9,2]=[0] +taValori[9,3]=.T. + +taValori[10,1]="poAct.nresp" +taValori[10,2]=[] +taValori[10,3]=.T. + +taValori[11,1]="poAct.id_sectie" +taValori[11,2]=Alltrim(Str(gnid_sectie_bufet)) +taValori[11,3]=!Empty(gnid_sectie_bufet) + +taValori[12,1]="poAct.sectie" +*!* modificare migrare v 1.0 > v 2.0 +*!* taValori[12,2]=IIF(!EMPTY(gnid_sectie_bufet),[BUFET],[]) +taValori[12,2]=Iif(!Empty(gnid_sectie_bufet),citeste_setari_casademarcat(4,gnid_sectie_bufet),[]) +*!* modificare migrare v 1.0 > v 2.0 ^ +taValori[12,3]=!Empty(gnid_sectie_bufet) + +taValori[13,1]="poAct.id_vv53110" +taValori[13,2]=Alltrim(Str(gnid_part_bufet)) +taValori[13,3]=!Empty(gnid_part_bufet) + +taValori[14,1]="poAct.v53110" +*!* modificare migrare v 1.0 > v 2.0 +*!* taValori[14,2]=IIF(!EMPTY(gnid_part_bufet),[BUFET],[]) +taValori[14,2]=Iif(!Empty(gnid_part_bufet),citeste_setari_casademarcat(5,gnid_part_bufet),[]) +*!* modificare migrare v 1.0 > v 2.0 ^ +taValori[14,3]=!Empty(gnid_part_bufet) + +*!* modificare migrare v 1.0 > v 2.0 +Do While lnRaspuns = 6 + glListareBonFiscal=.T. +*!* modificare migrare v 1.0 > v 2.0 ^ + lnSucces=lans(228,.F.,.T.,@taValori) + glListareBonFiscal=.F. + lnRaspuns = amessagebox("Doriti sa continuati cu operatii de acest fel?",4+32,"Confirmare") +Enddo +Endproc + +******************************************* +Procedure creare_bon_fiscal +Local lcSirBonFiscal,lnTip,lnIdCasa,lnTotalSuma,ldDataBonFiscal,lnNumarBonFiscal,lnTotalSuma +lnNumarBonFiscal=0 +lnTotalSuma=0 +lcSirBonFiscal=[] + +&& lcSirBonFiscal (explicatii) : +&& 5 (incasare);suma achitata;0(numerar);0(moneda);0(numar card credit) +ldDataBonFiscal=get_ora() +Select actactan +Set Filter To scd='5311' +Scan + lnNumarBonFiscal=nract + lnIdCasa=id_partd + Do Case + Case Type('gnId_casa_achit')<>'U' And lnIdCasa=gnId_casa_achit && optiune din Devize + lnTip=1 +*!* Case TYPE('gnId_Part_Bufet')<>'U' AND lnIdCasa=gnId_Part_Bufet && optiune din Gestiuni +*!* lnTip=2 + Otherwise + lnTip=3 + Endcase + lcSirBonFiscal=lcSirBonFiscal+[1;Fact.]+Alltrim(Str(perechec))+[;1;]+Alltrim(Str(lnTip))+[;1;]+Alltrim(Str(suma*100))+[;1000;0]+CRLF + lnTotalSuma=lnTotalSuma+suma +Endscan +Set Filter To +If !Empty(lcSirBonFiscal) + lcSirBonFiscal=lcSirBonFiscal+[5;]+Alltrim(Str(lnTotalSuma*100))+[;0;0;0]+CRLF+CRLF + imprimare_bon_fiscal(lcSirBonFiscal,ldDataBonFiscal,lnNumarBonFiscal) +Else + amessagebox("Bonul nu contine nici un element!",0+48,"Atentie") +Endif +Endproc +****************************************************************************************** +Function citeste_setari_casademarcat +Lparameters tnTip,tnId +Local lcValoare,lcCursor,llCautare +llCautare = .T. +lcCursor = [crssetaricasa] +Do Case +Case tnTip = 1 And !Empty(Nvl(tnId,0)) + lcValoare = [BON FISCAL] + lcSql = [select fel_document as valoare from nom_fdoc ] + ; + [where sters = 0 and inactiv = 0 and id_fdoc = ] + Alltrim(Str(tnId)) && gnid_fdoc_bonfiscal +Case tnTip = 2 And !Empty(Nvl(tnId,0)) + lcValoare = [BUFET] + lcSql = [select nume_gestiune as valoare from nom_gestiuni ] + ; + [where sters = 0 and inactiv = 0 and id_gestiune = ] + Alltrim(Str(tnId)) && gnid_gestiune_bufet +Case tnTip = 3 And !Empty(Nvl(tnId,0)) + lcValoare = [DIVERSI] + lcSql = [select denumire as valoare from nom_parteneri ] + ; + [where sters = 0 and inactiv = 0 and id_part = ] + Alltrim(Str(tnId)) && gnid_part_diversi +Case tnTip = 4 And !Empty(Nvl(tnId,0)) + lcValoare = [BUFET] + lcSql = [select sectie as valoare from nom_sectii ] + ; + [where sters = 0 and inactiv = 0 and id_sectie = ] + Alltrim(Str(tnId)) && gnid_sectie_bufet +Case tnTip = 5 And !Empty(Nvl(tnId,0)) + lcValoare = [BUFET] + lcSql = [select denumire as valoare from nom_parteneri ] + ; + [where sters = 0 and inactiv = 0 and id_part = ] + Alltrim(Str(tnId)) && gnid_part_bufet +Otherwise + lcValoare = [] + llCautare = .F. +Endcase + +If llCautare + If Used(lcCursor) + Use In (lcCursor) + Endif + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + If lnSucces < 0 + amessagebox(goExecutor.oPrelucrareEroare(),16,"Eroare") + Else + If Reccount(lcCursor) > 0 + Select (lcCursor) + lcValoare = Alltrim(valoare) + Endif + Endif + If Used(lcCursor) + Use In (lcCursor) + Endif +Endif +Return lcValoare +Endfunc && citeste_setari_casademarcat +****************************************************************************************** \ No newline at end of file diff --git a/COMUN/programe/oproceduri_comune.prg b/COMUN/programe/oproceduri_comune.prg new file mode 100644 index 0000000..e216002 --- /dev/null +++ b/COMUN/programe/oproceduri_comune.prg @@ -0,0 +1,8335 @@ +*!* 07.09.2009 +*!* marius.mutu +*!* ROA.H + +*!* 04.08.2011 +*!* marius.mutu +*!* adaugare functia GetDataIreg + +*!* 01.04.2013 +*!* marius.mutu +*!* GET_SCHEMA_GRID - trateaza cazul 0.00 + +*!* 05.10.2016 +*!* marius.mutu +*!* Get_Ora - se intoarce dataora de pe server sau de pe calculatorul local in functie de settings.ini [general]tipdataora=server/local/nimic + +*!* 10.01.2018 +*!* marius.mutu +*!* VerificaCodFiscal: completare verificare ANAF cu stare TVA Incasare, Split TVA, Inactiv + +*!* 11.07.2018 +*!* marius.mutu +*!* + GetSemnatura - INTOCMIT/VERIFICAT/DIRECTOR/DIRECTOR ECONOMIC - listare balanta, registre tva, fisa cont, reg. jurnal + +*!* 03.10.2019 +*!* marius.mutu +*!* + Atasament2File + +*!* 10.01.2019 +*!* marius.mutu +*!* + VerificaFacturaClientiVanzari + +*!* 23.01.2020 +*!* marius.mutu +*!* File2Atasament - Citeste fisierul de pe disk si adauga atasament in baza de date atas_atasamente + +*!* 13.11.2020 +*!* +xdir((): Get Files in Directory (including subdirectories) +*!* +UpdatePageTotalGroup(): Functie pentru calculul _PAGETOTAL pentru grupuri care reseteaza pagina la 1 intr-un raport + +*!* 09.12.2020 +*!* Atasament2File +*!* Suprascriu fisierul din baza de date cu fisierul de pe disk doar daca dataora din baza de date > data fisierului de pe disk + +*!* 03.02.2021 +*!* xdir - declarat variabile locale +*!* la apelarea recursiva ramanea ultimul director parcurs, in loc sa se revina la directorul din iteratia corespunzatoare + +*!* 15.01.2024 +*!* GetSemnatura - + parametru prefix + +*!* 03.09.2024 +*!* ProcentTva2IdJtva - tratare procent TVA 0 si taxare inversa (eFactura) + +*!* 05.12.2024 +*!* GetArticolEFByPartDenumire - caut si articolele fara id_articol, in caz ca sunt servicii, nu articole gestionabile ROA + +*!* 15.01.2025 +*!* GetDocumentByContPartenerAct - se cauta comanda si in IREG_PARTENERI.EXPLICATIA + +*!* 17.07.2025 +*!* ProcentTva2IdJtva - cote TVA 21% si 11% + +*!* 22.07.2025 +*!* GetNamePermutations - limitare la 4 cuvinte si maxim 10 permutari + +#Include COMUN\ROA.H + +Define Class oexecutor As Custom + nHandle = 0 + cSql = '' + cCursor = '' + nSucces = 0 + cEroare = '' + nEroare = 0 + cTime = '' + lReconnect = .T. && cred ca trebuie setat pe .F. inainte de o serie de proceduri executate cu tranzactie manuala + lShowError = .F. + lQuitOnError = .F. + + Declare aEroare[1] + + + * PROCEDURE INIT( tnHandle, tcSql, tcCursor ) + * Date : 06/10/2004, 12:18:21 + * author : marius.mutu + * description: + + ****** PARAMETER BLOCK ************** + * Parameters : 3 + * Parameter 1: + * Parameter 2: + * Parameter 3: + * + ******************************************* INCEPUT:INIT ******************************************* + Procedure Init + Lparameters tnHandle, tcSql, tcCursor + + + If Empty(tnHandle) + This.nHandle = gnHandle + Else + This.nHandle = tnHandle + Endif + + Endproc + ******************************************* SFARSIT: INIT ******************************************* + + *--------------------------------------- + * Intoarce .T. daca goConn.nHandle > 0 + *--------------------------------------- + FUNCTION IsConnected + RETURN goConn.IsConnected() + ENDFUNC && IsConnected + + ******************************************* INCEPUT:oExecuta ******************************************* + Function oExecuta ( tcSql, tcCursor, tlProgress, tcTitluProgress, tnHandle, tlShowError, tlQuitOnError, tlReconnect ) + Local lnSucces, llOk + llOk = .T. + + *!* modificare 06.09.2012 + *!* lnSucces = This.oExecute(tcSql, tcCursor, tlProgress, tcTitluProgress, tnHandle, tlShowError, tlQuitOnError, tlReconnect) + Do Case + Case Pcount() < 6 + lnSucces = This.oExecute(Iif(Empty(tcSql), This.cSql, tcSql), ; + Iif(Empty(tcCursor), This.cCursor, tcCursor), ; + tlProgress, tcTitluProgress, ; + Iif(Empty(tnHandle), This.nHandle, tnHandle)) + Case Pcount() < 7 + lnSucces = This.oExecute(Iif(Empty(tcSql), This.cSql, tcSql), ; + Iif(Empty(tcCursor), This.cCursor, tcCursor), ; + tlProgress, tcTitluProgress, ; + Iif(Empty(tnHandle), This.nHandle, tnHandle), ; + tlShowError) + Case Pcount() < 8 + lnSucces = This.oExecute(Iif(Empty(tcSql), This.cSql, tcSql), ; + Iif(Empty(tcCursor), This.cCursor, tcCursor), ; + tlProgress, tcTitluProgress, ; + Iif(Empty(tnHandle), This.nHandle, tnHandle), ; + tlShowError, tlQuitOnError) + Otherwise + lnSucces = This.oExecute(Iif(Empty(tcSql), This.cSql, tcSql), ; + Iif(Empty(tcCursor), This.cCursor, tcCursor), ; + tlProgress, tcTitluProgress, ; + Iif(Empty(tnHandle), This.nHandle, tnHandle), ; + tlShowError, tlQuitOnError, tlReconnect) + Endcase + *!* modificare 06.09.2012 ^ + If lnSucces < 0 + amessagebox(This.oPrelucrareEroare(), 16, "Eroare") + llOk = .F. + Endif + Return llOk + Endfunc + ******************************************* SFARSIT:oExecuta ******************************************* + + * PROCEDURE oExecute( tcSql, tcCursor,tlProgress, tnHandle ) + * Date : 06/10/2004, 12:16:11 + * author : marius.mutu + * description: + + ****** PARAMETER BLOCK ************** + * Parameters : 3 + * Parameter 1: + * Parameter 2: + * Parameter 3: + * + ******************************************* INCEPUT:oExecute ******************************************* + Procedure oExecute( tcSql, tcCursor, tlProgress, tcTitluProgress, tnHandle, tlShowError, tlQuitOnError, tlReconnect ) + Local lnHandle, lcSql, lcCursor, llProgress, lnSucces, laEroare, lcEroare, llShowError, llQuitOnError, llReconnect + + && orice modificare aici trebuie facuta si in oExecuta + && tlQuitOnError : Daca face QUIT la eroare (daca vreau QUIT dau .T.) (default .F.) + && tlShowError : Daca arata mesajul de eroare (daca vreau sa il tratez in oexecute dau .T.) (default .F.) + && tlReconnect : Daca incearca sa se reconecteze (default .T.) + Local lcSeconds + lcSeconds = Set("Seconds") + Set Seconds On + + If .F. + Local This As oexecutor + Endif + This.Oreset() + + If Type('goLog') = 'O' + goLog.Log(tcSql, Program()) + Endif + + Local lnTip + lnTip = 0 + + *!* 29.06.2007 + *!* marius.mutu + *!* nu puneti upper(lcSql) - exista unele expresii in oracle care sunt case sensitive + If Empty(tcSql) + lcSql = This.cSql + Else + lcSql = tcSql + Endif + + If Empty(tcCursor) + lcCursor = This.cCursor + Else + lcCursor = tcCursor + Endif + + If Empty(tnHandle) + lnHandle = This.nHandle + Else + lnHandle = tnHandle + Endif + + IF (m.lnHandle <= 0) + This.nSucces = CT_INSUCCES + This.cEroare = 'Neconectat' + RETURN CT_INSUCCES + ENDIF + + && DACA AM TRANZACTIE MANUALA NU FAC RECONNECT + If SQLGetprop(lnHandle, "Transactions") = 2 && TRANZACTIE MANUALA + This.lReconnect = .F. + Else + This.lReconnect = .T. + Endif + + Do Case + Case Pcount() < 6 + llQuitOnError = This.lQuitOnError + llReconnect = This.lReconnect + llShowError = This.lShowError + Case Pcount() < 7 + llQuitOnError = This.lQuitOnError + llReconnect = This.lReconnect + *!* modificare 06.09.2012 + Case Pcount() < 8 + llReconnect = This.lReconnect + *!* modificare 06.09.2012 ^ + Otherwise + llShowError = tlShowError + llReconnect = tlReconnect + llQuitOnError = tlQuitOnError + Endcase + + lnSucces = This.nSucces + + llProgress = tlProgress && IIF(tlProgress or 'SELECT'$lcSql,.T.,.F.) + lcTitluProgress = Iif(Empty(tcTitluProgress), "", Alltrim(tcTitluProgress)) + + Declare laEroare[1] + lcEroare = '' + + + lnTip = Iif('ROLLBACK' $ lcSql Or 'COMMIT' $ lcSql, 1, 0) && daca ROLLBACK SAU COMMIT TIP = 1, ALTFEL 0 + + Do Case + Case lnTip = 0 + *!* If llProgress + *!* Local loTherm, lcTask, lnPercent, lnSeconds + *!* If !Empty(lcTitluProgress) + *!* lcTask = lcTitluProgress + *!* Else + *!* lcTask = "Se executa ... " + *!* Endif + *!* loTherm = Newobject("_thermometer","_therm","",lcTask) + + *!* lnPercent = 15 + + + *!* loTherm.Show() + *!* Endif + + *!* Do While .T. + + *!* If llProgress + *!* lnPercent = lnPercent + 5 + *!* If lnPercent > 90 + *!* lnPercent = 15 + *!* Endif + + *!* loTherm.Update(lnPercent, lcTask+" "+Trans(lnPercent)) + *!* Endif + + + *!* lnSucces = SQLExec(lnHandle,lcSql,lcCursor) + *!* If lnSucces = 0 + *!* * + *!* Else + *!* Exit + *!* Endif + *!* Enddo + + *!* If llProgress + *!* loTherm.Complete() + *!* Release loTherm + *!* Endif + + If llProgress + Local loTherm, lcTask, lnPercent, lnSeconds + If !Empty(lcTitluProgress) + lcTask = lcTitluProgress + Else + lcTask = "Se executa ... " + Endif + loTherm = Newobject("_thermometer", "_therm", "", lcTask) + + lnPercent = 15 + + + loTherm.Show() + Endif + + lnSucces = -1 + Do While .T. + Do While .T. + + If llProgress + lnPercent = lnPercent + 5 + If lnPercent > 90 + lnPercent = 15 + Endif + + loTherm.Update(lnPercent, lcTask + " " + Trans(lnPercent)) + Endif + + + lnSucces = SQLExec(lnHandle, lcSql, lcCursor) + If lnSucces = 0 + * + Else + Exit + Endif + Enddo + + If lnSucces > 0 + If Used(lcCursor) + lcTempCursor = Sys(2015) + Use Dbf(lcCursor) In 0 Again Shared Alias (lcTempCursor) + Use In (lcCursor) + Use Dbf(lcTempCursor) In 0 Again Alias (lcCursor) + Use In (lcTempCursor) + Endif + Exit + Endif + + If lnSucces < 0 + Release laEroare + Declare laEroare(1) + lnEroare1 = 0 + lnEroare2 = 0 + lcTextEroare = [] + lnHandle = 0 + llEroare = .F. + + Aerror(laEroare) + If Alen(laEroare) > 1 + lnEroare1 = laEroare[1] + lnEroare2 = laEroare[5] + lcTextEroare = laEroare[3] + lnHandle = laEroare[6] + llEroare = .T. + + Endif + + + Do Case + Case lnEroare1 <> 1526 && eroare <> ODBC + lcTextEroare = Program() + Chr(13) + Alltrim(Str(lnEroare1)) + ' ' + laEroare[2] + crlf + crlf + GETCALLSTACK() + If Type('goLog') = 'O' + goLog.Log(lcTextEroare, Program()) + Endif + If llShowError + amessagebox(lcTextEroare, 0, "Eroare") + Endif + If llQuitOnError + Quit + Retry + Else + Exit + Endif + + Case lnEroare1 = 1526 && eroare ODBC + Do Case + Case llReconnect And Inlist(lnEroare2, 12152, 3113, 3114, 12560, 4068, 28, 12) && 12512 = TNS: UNABLE TO SEND BREAK MESSAGE; 3114 = NOT CONNECTED TO ORACLE; 12560 = PROTOCOL ADAPTER ERROR + If Type('goLog') = 'O' + lcLog = laEroare(3) + crlf + crlf + GETCALLSTACK() + goLog.Log(lcLog, Program()) + Endif + + Do While .T. + lnRaspuns = amessagebox('Eroare de conectare.' + Chr(13) + lcTextEroare + Chr(13) + 'Doriti reconectare?', 4 + 32, 'Eroare') && retry = 4; cancel = 2 + If lnRaspuns = 6 + + lnHandle = goConn.Connect(goConn.cHost, goConn.cUser, goConn.cPassword, llReconnect) + + *!* gnHandle = SQLConnect(gcHost,gcUserName,gcPassword) + + If lnHandle < 0 + Declare laEroare2(1) + Aerror(laEroare2) + lcTextEroare = laEroare2(3) + If Type('goLog') = 'O' + goLog.Log(lcTextEroare, Program()) + Endif + + Release laEroare2 + Loop + Else + *!* goExecutor.nHandle = gnHandle + Exit + Endif + Else + Quit + Retry + Endif && lnRaspuns = 6 + Enddo && .T. + Loop && daca am iesit cu un handle valid intru din nou in loop si fac cursorfill + Otherwise + lcTextEroare = Program() + crlf + Alltrim(Str(lnEroare1)) + ' ' + crlf + Transform(laEroare[3]) + crlf + lcSql + crlf + crlf + GETCALLSTACK() + If llShowError + lnRaspuns = amessagebox('Eroare necunoscuta' + Chr(13) + lcTextEroare, 0, 'Eroare') && ok = 0 + Endif + If Type('goLog') = 'O' + goLog.Log(lcTextEroare, Program()) + Endif + If llQuitOnError + Quit + Retry + Else + Exit + Endif + Endcase && INLIST(lnEroare2,12152,3114) + Endcase + Endif && lnSucces < 0 + + Enddo && .T. + + If llProgress + loTherm.Complete() + Release loTherm + Endif + + Case lnTip = 1 + If 'ROLLBACK' $ lcSql + lnSucces = Sqlrollback(lnHandle) + Else + lnSucces = Sqlcommit(lnHandle) + Endif + Endcase + + If lnSucces < 0 + Aerror(laEroare) + + If laEroare[1] <> 1526 + lcEroare = laEroare[2] + Else + lcEroare = Alltrim(Transform(laEroare[1])) + crlf + + Alltrim(Transform(laEroare[3])) + crlf + lcSql + crlf + crlf + GETCALLSTACK() + *!* 07.02.2008 + This.cEroare = lcEroare + lcEroare = This.oPrelucrareEroare() + *!* 07.02.2008 ^ + Endif + + If Type('goMyXMLHTTP') = 'O' + lcLunaHTTP = Iif(Type('gnLuna') = 'N', Transform(gnLuna) + "/", "") + Iif(Type('GNAN') = 'N', Transform(gnAn), "") + lcErrorHTTP = Sys(0) + ":" + Iif(Type('GCS') = 'C', " " + GCS, "") + ": " + lcLunaHTTP + Chr(13) + Chr(10) + lcEroare + ; + Chr(13) + Chr(10) + Chr(13) + Chr(10) + GETCALLSTACK() + + lcUserName = gcUserNameApp + lcProgram = Juststem(Sys(16, 0)) + goMyXMLHTTP.postError(lcErrorHTTP, lcUserName, lcProgram) + Endif + + If llShowError + amessagebox(lcEroare, 0, "Eroare") + Endif + If llQuitOnError + Quit + Retry + Endif + + Endif + + + + This.aEroare = laEroare + This.nSucces = lnSucces + This.cEroare = lcEroare + This.nEroare = Iif(Alen(laEroare) >= 5, laEroare[5], 0) + + Set Seconds &lcSeconds + + *!* modificare ROAFACTURARE v 2.0.77 + *!* *!* 07.09.2009 + *!* *!* RETURN lnSucces + *!* Return IIF(lnSucces = 1, CT_SUCCES, CT_INSUCCES) + Return Iif(lnSucces >= 1, CT_SUCCES, CT_INSUCCES) + *!* *!* 07.09.2009 ^ + *!* modificare ROAFACTURARE v 2.0.77 ^ + Endproc + ******************************************* SFARSIT: oExecute ******************************************* + + *!* salveaza rezultatul unei functii in variabila data ca referinta + *!* intoarce SUCCES = (1,-1) + *!* lnSucces = oFunction2Value("MyFunction(MyParam1, MyParam2)", @pnReturnValue) + Function oFunction2Value + Lparameters tcFunction, tuRetValue + + lcSql = "select " + tcFunction + " as retvalue from dual" + lcCursor = Sys(2015) + lcField = lcCursor + ".retvalue" + + lnSucces = This.oExecute(lcSql, lcCursor) + + If lnSucces > 0 + tuRetValue = Evaluate(lcField) + If Used(lcCursor) + Use In (lcCursor) + Endif + Endif + + *!* 07.09.2009 + *!* RETURN lnSucces + Return Iif(lnSucces = 1, CT_SUCCES, CT_INSUCCES) + *!* 07.09.2009 ^ + + Endfunc && oFunction2Value + ******************************************* SFARSIT: oFunction2Value ******************************************* + + *!* salveaza rezultatul unui select in variabila data ca referinta + *!* daca se intorc mai multe randuri - eroare + *!* intoarce SUCCES = .T./.F. + *!* afiseaza mesajul de eroare, daca este cazul + *!* lnSucces = oSelecteaza2Value("Select sum(cantitate) from tabel where conditie", @pnReturnValue) + Function oSelecteaza2Value + Lparameters tcSql, tuRetValue + * tlShowError, daca afiseaza mesaje de eroare + Local lnSucces + lnSucces = This.oSelect2Value(m.tcSql, @m.tuRetValue) + + If m.lnSucces = CT_INSUCCES + amessagebox(This.oPrelucrareEroare(), 16, "Eroare") + Endif + + Return (m.lnSucces = CT_SUCCES) + + Endfunc &&oSelect2Value + ******************************************* SFARSIT: oFunction2Value ******************************************* + + *!* salveaza rezultatul unui select in variabila data ca referinta + *!* daca se intorc mai multe randuri - eroare + *!* intoarce SUCCES = (1,-1) + *!* lnSucces = oSelect2Value("Select sum(cantitate) from tabel where conditie", @pnReturnValue) + Function oSelect2Value + Lparameters tcSql, tuRetValue + + Local lcSelect, lcSql, lcCursor, lcField, lnSucces + + lcSelect = Select() + lcSql = tcSql + lcCursor = Sys(2015) + + lnSucces = This.oExecute(lcSql, lcCursor) + + If lnSucces > 0 + If Reccount(lcCursor) > 1 + This.nSucces = -1 + This.cEroare = 'Au rezultat mai multe valori. Se astepta o singura valoare.' + lnSucces = -1 + Else + lcField = lcCursor + '.' + Field(1) + tuRetValue = Evaluate(lcField) + Endif + If Used(lcCursor) + Use In (lcCursor) + Endif + Endif + + Select (lcSelect) + + *!* 07.09.2009 + *!* RETURN lnSucces + Return Iif(lnSucces = 1, CT_SUCCES, CT_INSUCCES) + *!* 07.09.2009 ^ + + Endfunc &&oSelect2Value + ******************************************* SFARSIT: oFunction2Value ******************************************* + + + *!* salveaza rezultatul unui select in variabila data ca referinta + *!* daca se intorc mai multe randuri - eroare + *!* intoarce SUCCES = T/F + *!* llSucces = goExecutor.oSelecteaza2Object("Select id, denumire from tabel where conditie", @poObject) + Function oSelecteaza2Object + Lparameters tcSql, toRetValue + + Local lcSelect, lcSql, lcCursor, lcField, llSucces + lcSelect = Select() + lcSql = tcSql + lcCursor = Sys(2015) + + llSucces = This.oExecuta(lcSql, lcCursor) + + If m.llSucces + If Reccount(m.lcCursor) > 1 + This.nSucces = -1 + This.cEroare = 'Au rezultat mai multe valori. Se astepta o singura valoare.' + llSucces = .F. + Else + Select (m.lcCursor) + Scatter Name toRetValue Memo + Endif + Use In (Select(m.lcCursor)) + Endif && llSucces + + Select (m.lcSelect) + Return m.llSucces + Endfunc &&oSelecteaza2Object + ******************************************* SFARSIT: oSelecteaza2Object ******************************************* + + ******************************************* INCEPUT: oPrelucrareEroare ******************************************* + && Prelucreaza mesajul de eroare : daca este intre ORA-20000 si ORA-20999 atunci afiseaza doar textul erorii + Function oPrelucrareEroare + Local lcTextEroare + lcTextEroare = This.cEroare + + If Like('*ORA-20???:*', lcTextEroare) + lnPozi = At("ORA-20", lcTextEroare) + 11 + lnPozf = At("ORA", lcTextEroare, 2) + lcTextEroare = Substr(lcTextEroare, lnPozi, lnPozf - lnPozi) + *!* ELSE + *!* lnPozf=At("ORA-",lcTextEroare,3) + *!* lcTextEroare=Substr(lcTextEroare,1,lnPozf-1)+[...] + Endif + Return lcTextEroare + Endfunc && oPrelucrareEroare + ******************************************* SFARSIT: oPrelucrareEroare ******************************************* + * PROCEDURE oReset( ) + * Date : 06/10/2004, 12:21:06 + * author : marius.mutu + * description: + + ****** PARAMETER BLOCK ************** + * Parameters : 0 + * + ******************************************* INCEPUT:oReset ******************************************* + Procedure Oreset( ) + With This + .aEroare = .F. + .nSucces = 0 + .cSql = '' + .cCursor = '' + Endwith + Endproc + ******************************************* SFARSIT: oReset ******************************************* + +Enddefine && oExecutor + + + + +*** oConn =========================================================================================== +Define Class oConn As Custom + + cHost = '' + cUser = '' + cPassword = '' + nHandle = 0 + cEroare = '' + Declare aEroare[7] + lShowError = .F. + lReconnect = .F. && Daca llReconnect = .T. se apeleaza InitSesiune din oInit_Optiuni.prg + + FUNCTION IsConnected + RETURN (This.nHandle > 0) + ENDFUNC && IsConnected + + *** Connect =========================================================================================== + Procedure Connect + Lparameters tcHost, tcUser, tcPassword, tlReconnect + + *!* tlReconnect = .T. daca se apeleaza connect la reconectare (atunci se apeleaza si InitSesiune()) + Local lnSucces, laEroare, lcString, lcHost, lcUser, lcPassword, lcSql + + If Pcount() < 3 Or Type('tcHost') # 'C' Or Type('tcUser') # 'C' Or Type('tcPassword') # 'C' + * + Else + This.cHost = tcHost + This.cUser = tcUser + This.cPassword = tcPassword + Endif + + lcHost = This.cHost + lcUser = This.cUser + lcPassword = This.cPassword + + If Pcount() < 4 Or Type('tlReconnect') # 'L' + llReconnect = This.lReconnect + Else + llReconnect = tlReconnect + Endif + + SQLSetprop(0, "DispLogin", 3) + lcString = "dsn=" + Alltrim(lcHost) + ";Uid=" + Alltrim(lcUser) + ";Pwd=" + Alltrim(lcPassword) + ";" + + This.nHandle = Sqlstringconnect(lcString) + + If Type('gnHandle') = 'N' + gnHandle = This.nHandle + Endif + + If Type('goExecutor') = 'O' + goExecutor.nHandle = This.nHandle + Endif + + If This.nHandle > 0 + lnSucces = 1 + + *** SETARI SESIUNE DUPA CONECTARE + This.postConn() + + If llReconnect + lnSucces = InitSesiune() && IN oInit_Optiuni.prg + Endif + Else + lnSucces = -1 + This.ProcessError() + Endif + + Return This.nHandle + + Endproc && Connect + *** END Connect =========================================================================================== + + *** Disconnect =========================================================================================== + Procedure Disconnect + Lparameters tnHandle + + Local lnSucces, lnHandle + + lnHandle = Iif(Empty(tnHandle) Or Type('tnHandle') # 'N', 0, tnHandle) + + lnSucces = SQLDisconnect(lnHandle) + + If lnSucces < 0 + This.ProcessError() + Endif + + *!* 07.09.2009 + *!* RETURN lnSucces + Return Iif(lnSucces = 1, CT_SUCCES, CT_INSUCCES) + *!* 07.09.2009 ^ + + Endproc && + *** END Disconnect =========================================================================================== + + *** ProcessError =========================================================================================== + Procedure ProcessError + + Local laEroare, lnEroare1, lnEroare2, lcTextEroare, lcEroareConectare + lcTextEroare = '' + lcEroareConectare = '' + Dimension laEroare[1] + + Aerror(laEroare) + If Alen(laEroare) > 1 + lnEroare1 = laEroare[1] + lnEroare2 = laEroare[5] + lcTextEroare = laEroare[3] + lnHandle = laEroare[6] + llEroare = .T. + + lcTextEroare = 'Conectarea nu a reusit ' + Chr(13) + Chr(10) + Alltrim(Transform(laEroare[1])) + ' ' + Chr(13) + Transform(laEroare[2]) + Chr(13) + Transform(laEroare[3]) + This.cEroare = lcTextEroare + This.aEroare = laEroare + + If Type('goLog') = 'O' + goLog.Log(lcTextEroare, Program()) + Endif + + If laEroare[1] = 1526 And Like('*ORA-20???:*', laEroare[2]) + lnPozi = At("ORA-20", laEroare[2]) + 11 + lnPozf = At("ORA", laEroare[2], 3) + lcEroareConectare = Substr(laEroare[2], lnPozi, lnPozf - lnPozi) + Else + lcEroareConectare = lcTextEroare + Endif + If Empty(lcEroareConectare) + lcEroareConectare = "Conectarea nu a reusit!" + Endif + + amessagebox(lcEroareConectare, 0 + 48, "Atentie") + Endif + + Return lcTextEroare + + Endproc && ProcessError + *** END ProcessError =========================================================================================== + + *** postConn =========================================================================================== + Procedure postConn + *** PUNCT ZECIMAL + lcSql = [ALTER SESSION SET NLS_NUMERIC_CHARACTERS = ".,"] + lnSucces = goExecutor.oExecute(lcSql) + If lnSucces < 0 + amessagebox(goExecutor.cEroare, 0 + 16, 'Eroare') + Endif + + Endproc && postConn + *** END postConn =========================================================================================== + + Procedure BeginManualTransaction + Local lnHandle, lnSucces, llSucces + + lnHandle = This.nHandle + llSucces = .T. + + If SQLGetprop(lnHandle, "Transactions") = 1 && TRANZACTIE AUTOMATA + lnSucces = SQLSetprop(m.lnHandle, "Transactions", 2) && TRANZACTIE MANUALA + llSucces = (m.lnSucces = 1) + Endif + Return m.llSucces + Endproc && BeginManualTransaction + + Procedure EndManualTransaction + Lparameters tcMode + *** tcMode: optional: COMMIT/ROLLBACK/EMPTY (DEFAULT) + + Local lnHandle, lcMode, lnSucces, llSucces + lcMode = Iif(!Empty(m.tcMode), Upper(m.tcMode), '') + lnHandle = This.nHandle + llSucces = .T. + If !Empty(m.lcMode) + llSucces = goExecutor.oExecuta(m.lcMode) + Endif + + If SQLGetprop(lnHandle, "Transactions") = 2 && TRANZACTIE MANUALA + lnSucces = SQLSetprop(m.lnHandle, "Transactions", 1) && TRANZACTIE AUTOMATA + llSucces = (m.lnSucces = 1) + Endif + Return m.llSucces + Endproc && BeginManualTransaction +Enddefine && oConn +*** END oConn =========================================================================================== + + + +* PROCEDURE Get_Ora( tnTip ) +* Date : 16/11/2004, 08:58:45 +* author : marius.mutu +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 1 +* Parameter 1: +* +******************************************* INCEPUT:Get_Ora ******************************************* +Procedure Get_Ora( tnTip ) + * tnTip: 1 sau nimic = DATETIME ; 2 = CHARACTER + + Local lcRetVal, lnSucces + Local lcCursor, lcSql, lcSelect, lcTipDataOra + lcSelect = Select() + + If Pcount() = 0 Or Type('tnTip') <> 'N' + lnTip = 1 + Else + lnTip = tnTip + Endif + + lcTipDataOra = Lower(Nvl(goAPI.GetProfileString(m.gcSettingsFile, [general], "tipdataora"), '')) && local/server + + lcTipDataOra = Iif(!Inlist(m.lcTipDataOra, 'local', 'server', 'nimic'), 'server', m.lcTipDataOra) + Do Case + Case m.lcTipDataOra = 'server' + &&preluare ora de pe oracle server: + Store - 1 To lnSucces + lcSql = [select to_char(SYSdate,'dd/mm/yyyy hh24:mi:ss') as dataora from dual] + lcCursor = [dataora_cursor] + lnSucces = goExecutor.oExecute(lcSql, lcCursor) + If lnSucces < 0 + amessagebox(goExecutor.cEroare, 0 + 16, , 'Eroare') + lcRetVal = Ttoc(Datetime()) + Else + Select dataora_cursor + lcRetVal = dataora_cursor.dataora + Use In dataora_cursor + Endif + If lnTip = 1 + lcRetVal = Ctot(lcRetVal) + Endif + Case m.lcTipDataOra = 'local' + * local = ora de pe calculator + lcRetVal = Iif(lnTip = 1, Datetime(), '* ' + Ttoc(Datetime())) + Otherwise && nimic + lcRetVal = Iif(lnTip = 1, Datetime(), '*') + Endcase + + If !Empty(lcSelect) + Select (lcSelect) + Endif + + Return lcRetVal +Endproc +******************************************* SFARSIT: Get_Ora ******************************************* +*________________________________________________________ + +Function ULTIMAZI + Parameters tcAn, tcLuna + + Local lcAn, lcLuna + + If Empty(tcAn) + lcAn = pcAn + Else + lcAn = Alltrim(tcAn) + Endif + + If Empty(tcLuna) + lcLuna = pcNl + Else + lcLuna = Alltrim(tcLuna) + Endif + + If Val(lcAn) = Year(Date()) And Val(lcLuna) = Month(Date()) + Return Date() + Endif + + lcData = '01/' + lcLuna + '/' + lcAn + ldData = Gomonth(Ctod(lcData), 1) - 1 + + Return ldData + + **************************************************************** + +Function get_nivel_upf(tnid_util, tnid_prog, tnid_firma) + Private pnid_util, pnid_prog, pnid_firma + pnid_util = tnid_util + pnid_prog = tnid_prog + pnid_firma = tnid_firma + Local lnnivel + lcSql = [select ud.id_nivel,n.nivel from contafin_oracle.util_drept ud ] + ; + [join contafin_oracle.nivel n on ud.id_nivel = n.id_nivel ] + ; + [where ud.id_util = ?pnid_util and ud.id_prog = ?pnid_prog and ] + ; + [ud.id_firma = ?pnid_firma] + lcCursor = [crsUtilNivel] + lnSucces = goExecutor.oExecute(lcSql, lcCursor) + If lnSucces < 0 + lcTitlu = [Eroare] + lctip = [Avertizare] + lcImagine = [exclam.ico] + lcMesaj = goExecutor.cEroare + ofrm_eroare = Createobject('frm_mesaj', lcTitlu, lcImagine, lctip, lcMesaj) + ofrm_eroare.Show(1) + Release ofrm_eroare + Return + Endif + lnnivel = &lcCursor..nivel + Return lnnivel +Endfunc &&get_nivel_upf + +******************************************************************************************************* + +Function enumefis + Parameters tc_numefis + Private pn_len, pl_return, pc_numefis, pc_char + pn_len = 0 + pc_char = '' + pl_return = .T. + pc_numefis = Alltrim(tc_numefis) + pn_len = Len(pc_numefis) + If pn_len = 0 + pl_return = .F. + Endif + Do While pn_len > 0 + pc_char = Substr(pc_numefis, pn_len, 1) + If !Between(Asc(pc_char), 48, 57) And !Between(Asc(pc_char), 97, 122) And !Between(Asc(pc_char), 65, 90) And Asc(pc_char) <> 95 And Asc(pc_char) <> 46 + pl_return = .F. + Exit + Endif + pn_len = pn_len - 1 + Enddo + Return pl_return +Endfunc && enumefis +*********************************************************************************************** + + +******************************************* +* PROCEDURE ImportTable +* Date : 08/07/2005, 09:20:54 +* author : marius.mutu +* description: intoarce numele unui cursor cu datele importate dintr-un dbf +******************************************* +Procedure ImportTable + Local lcCursor + lcCursor = "" + loimport = Newobject("frm_import", "importdata") + loimport.Show(1) + If gnButon = 1 + lcCursor = "crsReturn" + Endif + + Return lcCursor + +Endproc +*----------------------------------sfarsit procedura ImportTable---------------------------------- + + +Function Lista_Campuri + Lparameters tcAlias + + Local lcSelect, i, lcAlias, lcLista + lcLista = [] + lcSelect = Select() + lcAlias = tcAlias + + Select (lcAlias) + lnFields = Fcount() + For i = 1 To lnFields + lcField = Field(i) + lcLista = lcLista + [,] + lcField + Endfor + If !Empty(lcLista) + lcLista = Substr(lcLista, 2) + Endif + + Select (lcSelect) + Return lcLista + +Endfunc && Lista_Campuri + + +***--------------------------------------------------------------------- +Procedure OPEN_DEFAULT_APP + Parameters tcfilename, tcParams + LOCAL cFileName, cAction, cParams + + Declare Integer ShellExecute In shell32.Dll ; + Integer hndWin, ; + String cAction, ; + String cFileName, ; + String cParams, ; + String cDir, ; + Integer nShowWin + cFileName = tcfilename + cAction = "open" + cParams = IIF(!EMPTY(m.tcParams), m.tcParams, "") + + ShellExecute(0, cAction, cFileName, cParams, "", 1) + +Endproc && OPEN_DEFAULT_APP + + +***--------------------------------------------------------------------- +Procedure GET_SCHEMA_GRID + Lparameters toGrid, tcColumnList, tcHeaderList, tcSchema, tlSelect, tnType, tcFrom, tcWhere, tcOrder, tcOutputName + + Local lcSelect, llSelect, lcAlias, lcWhere, lcOrder, lcColumn, lcHeader, lnOccurs + Local lnType, lcInto + && tnType : 0 CURSOR, 1 TABLE, 2 ARRAY + + If Type('tnType') # 'N' + lnType = 0 + Else + If !Between(tnType, 0, 2) + lnType = 0 + Else + lnType = tnType + Endif + Endif + Do Case + Case lnType = 0 + lcInto = ' INTO CURSOR ' + Case lnType = 1 + lcInto = ' INTO TABLE ' + Other lnType = 1 + lcInto = ' INTO ARRAY ' + Endcase + + + tcColumnList = '' + tcHeaderList = '' + tcSchema = '' + + lnNrCol = toGrid.ColumnCount + Dimension myArray[lnNrCol, 3] + + With toGrid + For lnCol = 1 To .ColumnCount + lnColumn = .Columns(lnCol).ColumnOrder + lcColumn = .Columns(lnCol).ControlSource + llVisible = .Columns(lnCol).Visible + lnWidth = .Columns(lnCol).Width + If !llVisible Or lnWidth = 0 Or Empty(Alltrim(lcColumn)) + Adel(myArray, lnCol) + Loop + Endif + lnPos = At('.', lcColumn) + lnOccurs = Occurs('.', m.lcColumn) + If m.lnOccurs = 1 And m.lnPos > 0 + lcColumn = Substr(lcColumn, lnPos + 1) + Endif + *tcColumnList = tcColumnList + lcColumn + ',' + myArray[lnCol, 1] = lnColumn + + For lnobjcol = 1 To .Columns(lnCol).Objects.Count + If Upper(.Columns(lnCol).Objects(lnobjcol).BaseClass) = 'HEADER' + lcHeader = .Columns(lnCol).Objects(lnobjcol).Caption + lcHeader = Strtran(Strtran(Strtran(Strtran(Strtran(Strtran(Strtran(Strtran(Strtran(lcHeader, Chr(32), '_'), '.', '_'), '/', '_'), '\', '_'), "&", "_"), "%", ""), "(", "_"), ")", "_"), "-", "_") + lcHeader = Strtran(lcHeader, '=', '_') + lcHeader = Strtran(lcHeader, ',', '_') + lcHeader = Strtran(lcHeader, '+', '_') + *tcHeaderList = tcHeaderList + lcHeader + ',' + *tcSchema = tcSchema + lcColumn + [ as ] + lcHeader + [,] + myArray[lnCol, 2] = lcColumn + myArray[lnCol, 3] = lcHeader + Exit + Endif + Endfor + Endfor + *!* tcColumnList = Substr(tcColumnList, 1, Len(tcColumnList)-1) + *!* tcHeaderList = Substr(tcHeaderList , 1, Len(tcHeaderList)-1) + *!* tcSchema = Substr(tcSchema , 1, Len(tcSchema)-1) + Endwith + For i = 1 To Alen(myArray, 1) + l1 = myArray[i, 1] + If Type('l1') # 'N' + myArray[i, 1] = -1 + Endif + Endfor + + Asort(myArray) + For i = 1 To Alen(myArray, 1) + If myArray[i, 1] <> -1 + tcColumnList = tcColumnList + Alltrim(myArray[i, 2]) + [,] + tcHeaderList = tcHeaderList + Alltrim(myArray[i, 3]) + [,] + tcSchema = tcSchema + Alltrim(myArray[i, 2]) + [ as ] + Alltrim(myArray[i, 3]) + [,] + Endif + Endfor + + tcColumnList = Substr(tcColumnList, 1, Len(tcColumnList) - 1) + tcHeaderList = Substr(tcHeaderList, 1, Len(tcHeaderList) - 1) + tcSchema = Substr(tcSchema, 1, Len(tcSchema) - 1) + + + If tlSelect + tcSchema = 'SELECT ' + tcSchema + Endif + If !Empty(tcFrom) + tcSchema = tcSchema + ' FROM ' + Alltrim(tcFrom) + Endif + If !Empty(tcWhere) + tcSchema = tcSchema + ' WHERE ' + Alltrim(tcWhere) + Endif + + If !Empty(tcOrder) + tcSchema = tcSchema + ' ORDER BY ' + Alltrim(tcOrder) + Endif + + If !Empty(tcOutputName) + tcSchema = tcSchema + lcInto + tcOutputName + Endif + +Endproc && GET_SCHEMA_GRID + +***--------------------------------- +Procedure amessage + Lparameters tcMessage, tnDialogBoxType, tcTitleBarText, tnTimeOut + Local lnResponse + lnResponse = 0 + lcMessage = Iif(Empty(tcMessage), [], tcMessage) + lnDialogBoxType = Iif(Empty(tnDialogBoxType), 0, tnDialogBoxType) + lcTitleBarText = Iif(Empty(tcTitleBarText), [], tcTitleBarText) + lnTimeOut = Iif(Empty(tnTimeOut), 0, tnTimeOut) + If lnTimeOut # 0 + lnResponse = amessagebox(lcMessage, lnDialogBoxType, lcTitleBarText, lnTimeOut) + Else + lnResponse = amessagebox(lcMessage, lnDialogBoxType, lcTitleBarText) + Endif + + Return lnResponse + +Endproc && amessage +***--------------------------------- + +DEFINE CLASS oChatBotLaunch as Custom + cMessage = '' + + FUNCTION Init + LPARAMETERS tcMessage + This.cMessage = m.tcMessage + ENDFUNC + + FUNCTION Launch + open_default_app('https://www.romfast.ro/chatbot_maria.html?message=' + ALLTRIM(This.cMessage)) + ENDFUNC +ENDDEFINE + +***--------------------------------- +Function amessagebox + Lparameters tcMessage, tnDialogBoxType, tcTitle, tcFont, tnTimeOut, tnTimeoutValue + + Local loMessage, lnReturn, lcMessageboxForm + PRIVATE oChatbot + oChatBot = CREATEOBJECT("oChatBotLaunch", m.tcMessage) + + *!* *!* LOGHEZ ERORILE + *!* IF TYPE('goLog') = 'O' AND 'ERROR'$UPPER(tcMessage) OR 'EROARE'$UPPER(tcMessage) OR 'ORA-'$UPPER(tcMessage) + *!* goLog.LOG(tcMessage,PROGRAM()) + *!* ENDIF + If Type('gcNumeProgram') = 'C' And gcNumeProgram = 'ROASTART' + lcMessageboxForm = "messagebox_form_desktop" && desktop .T. + Else + lcMessageboxForm = "messagebox_form" + Endif + If !'MESSAGEBOX' $ Upper(Set("Classlib")) + If Type('lnTimeOut') = 'N' And lnTimeOut # 0 + lnReturn = Messagebox(tcMessage, tnDialogBoxType, tcTitle, tnTimeOut) + Else + lnReturn = Messagebox(tcMessage, tnDialogBoxType, tcTitle) + Endif + Else + loMessage = Newobject(lcMessageboxForm, "MessageBox.vcx", "", tcMessage, tnDialogBoxType, tcTitle, tcFont, tnTimeOut, tnTimeoutValue) + loMessage.AlwaysOnTop = .T. + loMessage.Show(1) + lnReturn = loMessage.IDOpcion + Endif + + + Return lnReturn + +Endfunc && amessagebox +***--------------------------------- + +Procedure export_xls + Lparameters tcAlias, tcNumeFisier + + If Empty(tcNumeFisier) + tcNumeFisier = 'Foaie_Excel' + Endif + + Local lcSelect + lcSelect = Select() + + If Used(tcAlias) + lcDir = Addbs(gcTempPath) + + lcFile = Putfile('Nume fisier:', tcNumeFisier, 'XLS') + If Empty(lcFile) && Esc pressed + Return + Endif + + + Select (tcAlias) + Export To (lcFile) Type Xl5 + Select (lcSelect) + + OPEN_DEFAULT_APP(lcFile) + + Endif +Endproc && export_xls + +*__________________________________________________________ + +&& Folosesc un tabel (tabel,id) cu cate o linie pt fiecare tabel +&& aflu id-ul urmator si il scriu in tabela +&& returnez id-ul +&& EX1: LNEW_ID=NEW_ID("GRILA_SAL") --> urmatorul id din fara cautare in tabela originala +&& EX2: LNEW_ID=NEW_ID("GRILA_SAL","ID") --> urmatorul id din cu cautare in tabela originala dupa campul +&& ex3: LNEW_ID=NEW_ID("GRILA_SAL","ID",.T.) --> .T. INSEAMNA CA TABELUL ORIGINAL ESTE INDEXAT DUPA FAC SEEK IN LOC DE LOCATE +Procedure NEW_ID + Parameters TALIAS, TFIELD, TTAG + *WAIT WINDOW TALIAS + *ON error Errorh(ERROR(),PROGRAM(),LINENO()) + LLLOOKUP = Iif(Type("tfield") = "C", .T., .F.) + LLTAG = Iif(Type("TTAG") = "C", .T., .F.) + TALIAS = Upper(Alltrim(TALIAS)) + + + *** Save Stats + LCOLDALIAS = Alias() && keep current work area + LNOLDRECNO = Iif(!Eof(), Recno(), 0) && save record number + + LCSETDEL = Set("deleted") + && lnmaxval = (10^pcidsize)-1 && wrap around after this val + + *** + && PUN ORDINEA PE ID + If LLLOOKUP And LLTAG + Sele (TALIAS) + Set Order To &TTAG + Endif + *** + LCNEWID = 0 && our return result - NULL if failed + Select IDS + Locate For Upper(Alltrim(TABEL)) = TALIAS + If !Found() + If Flock() + Append Blank + Replace TABEL With TALIAS + Unlock + Endif + + Endif + + Set Deleted Off + && acum sunt pe inregistrarea corecta + + + *** lock counter table and update counter + Select IDS + If Rlock() + *** Avoid use of Macros - Convert to mem var & update it + LNCOUNTERVAL = NEW_ID + + *** VERIFY ID NUMBER - search 'til no match + Do While .T. + *** increase the counter - update field and var + LNCOUNTERVAL = LNCOUNTERVAL + 1 + + *!* *** check for wraparound + *!* IF lncounterval > lnmaxval + *!* lncounterval = 1 + *!* ENDIF + + Select (TALIAS) + If LLLOOKUP + If LLTAG + LCAUT = "SEEK " + Allt(Str(LNCOUNTERVAL)) + Else + LCAUT = "LOCATE FOR " + Allt(TFIELD) + "=" + Allt(Str(LNCOUNTERVAL)) + *** now see if it exists + &LCAUT + * LOCATE FOR &TFIELD=LNCOUNTERVAL + If !Found() + *** No match - DONE + Exit + Endif && !found() + Endif && lltag + Else + Exit + Endif && lllokup + + Enddo && done + + Sele IDS + Replace NEW_ID With LNCOUNTERVAL + LCNEWID = LNCOUNTERVAL + + Unlock In IDS + Endif && rlock() + + *** Reset record number on original file + + If !Empty(LCOLDALIAS) + Sele (LCOLDALIAS) + If LNOLDRECNO # 0 + Goto LNOLDRECNO + Endif + Endif + Set Deleted &LCSETDEL + + Return LCNEWID + +Endproc && NEW_ID + + +***------------------------------------------------------------------------------------------------------- + +* Foloseste comment de la coloane si tooltiptext de la grid pt a salva recordsource si controlsource din grid inainte de reconstructie +Procedure SAVE_GRID + Param toGrid + *wait wind 'save_grid' + Private pogrid + If Param() = 0 Or Type('togrid')!= "O" + Return .F. + Endif + + pogrid = toGrid + + * remember control sources in the column's comment field + With pogrid + Local nColumnIndex + For m.nColumnIndex = 1 To .ColumnCount + .Columns(m.nColumnIndex).Tag = .Columns(m.nColumnIndex).ControlSource + Endfor + .ToolTipText = .RecordSource + .RecordSource = "" + Endwith + + Return .T. +Endproc && SAVE_GRID +***-------------------------------------------------------------- +Procedure RESTORE_GRID + Param toGrid + + *wait wind 'restore_grid' + Private pogrid + If Param() = 0 Or Type('togrid')!= "O" + Return .F. + Endif + + pogrid = toGrid + + + With pogrid + * restore record source + .RecordSource = .ToolTipText + * restore control sources + For m.nColumnIndex = 1 To .ColumnCount + .Columns(m.nColumnIndex).ControlSource = .Columns(m.nColumnIndex).Tag + Endfor + .ToolTipText = "" + Endwith + Return .T. +Endproc && RESTORE_GRID +******************************************************************* +Procedure snr_grid && switch_and_restore_grid + Lparameters toGrid, tcRecordSourceNou + Private pogrid + If Param() = 0 Or Type('togrid')!= "O" + Return .F. + Endif + pogrid = toGrid + With pogrid + .RecordSource = Iif(Empty(tcRecordSourceNou), .ToolTipText, tcRecordSourceNou) + For m.nColumnIndex = 1 To .ColumnCount + .Columns(m.nColumnIndex).ControlSource = Iif(!Empty(tcRecordSourceNou) And !Empty(.Columns(m.nColumnIndex).Tag), ; + tcRecordSourceNou + [.] + Substr(.Columns(m.nColumnIndex).Tag, At([.], .Columns(m.nColumnIndex).Tag) + 1), ; + .Columns(m.nColumnIndex).Tag) + .Tag = "" + Endfor + .ToolTipText = "" + Endwith + Return .T. +Endproc && snr_grid +******************************************************************* + +* Foloseste comment de la coloane si tooltiptext de la grid pt a salva recordsource si controlsource din grid inainte de reconstructie +Procedure SAVE_GRID_COMMENT + Param toGrid + *wait wind 'save_grid' + Private pogrid + If Param() = 0 Or Type('togrid')!= "O" + Return .F. + Endif + + pogrid = toGrid + + * remember control sources in the column's comment field + With pogrid + Local nColumnIndex + For m.nColumnIndex = 1 To .ColumnCount + .Columns(m.nColumnIndex).Comment = .Columns(m.nColumnIndex).ControlSource + Endfor + .ToolTipText = .RecordSource + .RecordSource = "" + Endwith + + Return .T. +Endproc && SAVE_GRID_COMMENT +***-------------------------------------------------------------- +Procedure RESTORE_GRID_COMMENT + Param toGrid + + *wait wind 'restore_grid' + Private pogrid + If Param() = 0 Or Type('togrid')!= "O" + Return .F. + Endif + + pogrid = toGrid + + + With pogrid + * restore record source + .RecordSource = .ToolTipText + * restore control sources + For m.nColumnIndex = 1 To .ColumnCount + .Columns(m.nColumnIndex).ControlSource = .Columns(m.nColumnIndex).Comment + Endfor + .ToolTipText = "" + Endwith + Return .T. +Endproc && RESTORE_GRID_COMMENT + + +* Foloseste comment de la coloane si tooltiptext de la grid pt a salva recordsource si controlsource din grid inainte de reconstructie +Procedure SAVE_GRID_TAG + Param toGrid + *wait wind 'save_grid' + Private pogrid + If Param() = 0 Or Type('togrid')!= "O" + Return .F. + Endif + + pogrid = toGrid + + * remember control sources in the column's comment field + With pogrid + Local nColumnIndex + For m.nColumnIndex = 1 To .ColumnCount + .Columns(m.nColumnIndex).Tag = .Columns(m.nColumnIndex).ControlSource + Endfor + .ToolTipText = .RecordSource + .RecordSource = "" + Endwith + + Return .T. +Endproc && SAVE_GRID_TAG +***-------------------------------------------------------------- +Procedure RESTORE_GRID_TAG + Param toGrid + + *wait wind 'restore_grid' + Private pogrid + If Param() = 0 Or Type('togrid')!= "O" + Return .F. + Endif + + pogrid = toGrid + + + With pogrid + * restore record source + .RecordSource = .ToolTipText + * restore control sources + For m.nColumnIndex = 1 To .ColumnCount + .Columns(m.nColumnIndex).ControlSource = .Columns(m.nColumnIndex).Tag + Endfor + .ToolTipText = "" + Endwith + Return .T. +Endproc && RESTORE_GRID_TAG + + +*------------------------------------------- +* Function...: Xmenu +* Author.....: MARTIN +* Date.......: 04/06/1997 +* Notes......: Based on an idea from Steve Zimmelman for FoxPro 2.x +* Parameters.: tcItems = Semicolon-separated String with the various options +* ...........: tnBar = Initially selected item (default=1) +* Returns....: Selected item number +* See Also...: PROMPT() [FoxPro Native] +* +Procedure XMENU + Lparameters TCITEMS, TNBAR + + Local NITEMCOUNT, AITEMS, X, NROW, NCOL, CTITLE, NLASTPOS, CCOLOR, AITEMS + + Private CPOPMENU, NSELECT && They flow into the GetChoice internal procedure + + If Pcount() < 2 + TNBAR = 1 + Endif + + Activate Screen + + * Parse every item + * + m.NITEMCOUNT = Occurs( ';', TCITEMS ) + 1 + Dimen AITEMS[ m.nItemCount ] + m.NLASTPOS = 1 + + For m.X = 1 To m.NITEMCOUNT + + If m.X < m.NITEMCOUNT + + AITEMS[ m.x ] = Subs( m.TCITEMS, m.NLASTPOS, ; + ( At( ';', m.TCITEMS, m.X ) - 1 ) - m.NLASTPOS + 1 ) + Else + AITEMS[ m.x ] = Subs( m.TCITEMS, m.NLASTPOS, ; + ( Len( m.TCITEMS ) - m.NLASTPOS ) + 1 ) + Endif + + If AITEMS[ m.x ] # "\-" + + AITEMS[ m.x ] = Allt( AITEMS[ m.x ] ) + Endif + + m.NLASTPOS = At( ';', m.TCITEMS, m.X ) + 1 + Next + + * Calculates the mouse pointer position + * + m.NROW = Iif( Mrow() + m.NITEMCOUNT < Srow(), Mrow() - 1, Srow() - m.NITEMCOUNT ) + m.NCOL = Iif( Mcol() + 10 < Scol(), Mcol() - 3, Mcol() - 13 ) + + * Gets an unique name for the pop-up + * + m.CPOPMENU = 'M' + Sys(3) + "_" + + Define Popup ( m.CPOPMENU ) SHORTCUT Relative From NROW, NCOL + + For m.X = 1 To m.NITEMCOUNT + + Define Bar m.X Of ( m.CPOPMENU ) Prompt AITEMS[ m.x ] + Next + + m.CANS = "" + m.NSELECT = 0 + Clear Type + + On Selection Popup ( m.CPOPMENU ) Do GETCHOICE + + Activate Popup ( m.CPOPMENU ) Bar TNBAR + + Pop Key + Release Popup ( m.CPOPMENU ) + + Return Iif( Lastkey() = 27, 0, m.NSELECT ) + +Endproc && XMENU + + + +******************** +*** MENIU POPUP CREAT DINAMIC +******************** +PROCEDURE XMENUP + LPARAMETERS TCITEMS, TNBAR + + LOCAL NITEMCOUNT, AITEMS, X + LOCAL loMenu, lnOption + lnOption = 0 + loMenu = NEWOBJECT("popmenu", "menutool.vcx") + + NITEMCOUNT = OCCURS( ';', TCITEMS ) + 1 + DIMEN AITEMS[ m.nItemCount ] + NLASTPOS = 1 + + FOR X = 1 TO m.NITEMCOUNT + + IF m.X < m.NITEMCOUNT + + AITEMS[ m.x ] = SUBS( m.TCITEMS, m.NLASTPOS, ; + ( AT( ';', m.TCITEMS, m.X ) - 1 ) - m.NLASTPOS + 1 ) + ELSE + AITEMS[ m.x ] = SUBS( m.TCITEMS, m.NLASTPOS, ; + ( LEN( m.TCITEMS ) - m.NLASTPOS ) + 1 ) + ENDIF + + IF AITEMS[ m.x ] # "\-" + + AITEMS[ m.x ] = ALLT( AITEMS[ m.x ] ) + ENDIF + + NLASTPOS = AT( ';', m.TCITEMS, m.X ) + 1 + loMenu.ADDITEM(AITEMS[ m.x ], X, 1) + ENDFOR + lnOption = loMenu.SHOW() + RETURN m.lnOption +ENDPROC && XMENUP + +*-------------------- +Procedure GETCHOICE + + m.NSELECT = Bar() + + Deactivate Popup ( m.CPOPMENU ) + + Return + &&&&&&&&&&&&&&&&&&&&&&&&&&&&&& MENIU &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& + +Procedure lista2array + Parameters tcLISTA, taArray, tcSeparator + && tcLista este un sir de caractere care contine elementele separate prin <;> default + && tarray este vectorul care se completeaza - trebuie dat prin referinta + && tcSeparator separatorul de elemente din tcLista - default este ";" - este optional + && intoarce numarul de elemente gasite + + && ex: lnNr = lista2array("ana;are;mere",@alista,";") + External Array taArray + Local lcLista, lcSeparator, lnNRF, lcF1, i + + lnNRF = 0 + + lcLista = Allt(tcLISTA) + If Parameters() < 3 Or Empty(tcSeparator) + lcSeparator = ";" + Else + lcSeparator = Alltrim(tcSeparator) + Endif + + If Right(lcLista, 1)!= lcSeparator + lcLista = lcLista + lcSeparator + Endif + + lnNRF = Occurs(lcSeparator, lcLista) + + If lnNRF > 0 + Dimension taArray[lnNrf, 1] + + For i = 1 To lnNRF + lcF1 = Left(lcLista, At(lcSeparator, lcLista) - 1) + + If i!= lnNRF + lcLista = Substr(lcLista, At(lcSeparator, lcLista) + 1) + Endif + + taArray[i] = lcF1 + Endfor + Else + lnNRF = 0 + Endif + + Return lnNRF + +Endproc && lista2array + + +***------------------------------------------------------------------------------------------- +Procedure get_mask + Parameters tnint, tndec + + Local lnint, lndec + lnint = tnint + lndec = tndec + lnrest = Mod(lnint, 3) + + lcString = Replicate("9", lnrest) + lnint_ramas = lnint - lnrest + Do While lnint_ramas > 0 + lcString = lcString + " " + Replicate("9", 3) + lnint_ramas = lnint_ramas - 3 + Enddo + If lndec > 0 + lcString = lcString + "." + Replicate("9", tndec) + Endif + + Return lcString + +Endproc && get_mask +******************************************************************* +Function formateaza + Parameters tnValoare, tnNrCaractere, tnNrZecimale + Local lcValoare + lcValoare = Strtran(Alltrim(Transform(tnValoare, get_mask(tnNrCaractere, tnNrZecimale))), [.], [,]) + Return lcValoare +Endfunc && formateaza +******************************************************************* +Function tradu + Lparameters tcText + Local lcText + *!* lcText = CPCONVERT(CPCURRENT(1),1252,tcText) + lcText = tcText + If Type('glFontCharSet') <> 'U' + If !Nvl(glFontCharSet, .F.) + lcText = Strtran(Strtran(Strtran(Strtran(Strtran(lcText, Chr(227), [a]), Chr(238), [i]), Chr(226), [a]), Chr(186), [s]), Chr(254), [t]) + lcText = Strtran(Strtran(Strtran(Strtran(Strtran(lcText, Chr(195), [A]), Chr(206), [I]), Chr(194), [A]), Chr(170), [S]), Chr(222), [T]) + Endif + Endif + Return lcText +Endfunc +******************************************************************* +* PROCEDURE Get_Version( ) +* Date : 17/11/2004, 16:34:20 +* author : marius.mutu +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* INCEPUT:Get_Version ******************************************* +Procedure Get_Version(tlNoRevision, tlInfo, tcfilename) + Local laVersion, lcVersion, lcFileName + + *-- Get Version Information + *-- Added 4-1-98 BDC + Local lcVersionText, lcFileName, llNoRevision, llInfo + + Dimension aVersion(12) + + If Empty(tcfilename) + lcFileName = Sys(16, 0) + Else + lcFileName = tcfilename + Endif + llNoRevision = tlNoRevision + llInfo = tlInfo + + + + *** EGL: 2002.1.2 17:06 - switched to AGETFILEVERSION(). + If Val(Substr(Version(), 15)) >= 6 + * The AGETFILEVERSION() function was introduced in VFP 6 + + *!* DECLARE STRING GetCommandLine IN Kernel32 + *!* lcFileName = GetCommandLine() + lcVersionText = "" + + *!* IF GetFileVersion(&lcFileName,@aVersion) = 0 + If Agetfileversion(aVersion, lcFileName) > 0 + If !llInfo + * daca vreau doar numarul versiunii + lcVersion = Allt(aVersion(4)) + If llNoRevision + * daca nu vreau si revizia + lnPos = Rat('.', lcVersion, 1) + Else + lnPos = Len(lcVersion) + Endif + lcVersionText = Left(lcVersion, lnPos) + Else + * vreau toata informatia despre fisier + If Not Empty(aVersion(1)) + lcVersionText = Allt(aVersion(1)) + Endif + + If Not Empty(aVersion(2)) + lcVersionText = lcVersionText + Chr(10) + "Produs de: " + Allt(aVersion(2)) + Endif + + If Not Empty(aVersion(3)) + lcVersionText = lcVersionText + Chr(10) + "Descriere: " + Allt(aVersion(3)) + Endif + + If Not Empty(aVersion(4)) + lcVersionText = lcVersionText + Chr(10) + "Versiune fisier: " + Allt(aVersion(4)) + Endif + + If Not Empty(aVersion(5)) + lcVersionText = lcVersionText + Chr(10) + "Nume intern: " + Allt(aVersion(5)) + Endif + + If Not Empty(aVersion(6)) + lcVersionText = lcVersionText + Chr(10) + "Copyright: " + Allt(aVersion(6)) + Endif + + If Not Empty(aVersion(7)) + lcVersionText = lcVersionText + Chr(10) + "Marca inregistrata: " + Allt(aVersion(7)) + Endif + + If Not Empty(aVersion(8)) + lcVersionText = lcVersionText + Chr(10) + "Nume fisier: " + Allt(aVersion(8)) + Endif + + If Not Empty(aVersion(9)) + lcVersionText = lcVersionText + Chr(10) + "Private Build: " + Allt(aVersion(9)) + Endif + + If Not Empty(aVersion(10)) + lcVersionText = lcVersionText + Chr(10) + "Nume produs: " + Allt(aVersion(10)) + Endif + + If Not Empty(aVersion(11)) + lcVersionText = lcVersionText + Chr(10) + "Versiune produs: " + Allt(aVersion(11)) + Endif + + If Not Empty(aVersion(12)) + lcVersionText = lcVersionText + Chr(10) + "Special Build: " + Allt(aVersion(12)) + Endif + + If Empty(lcVersionText) + lcVersionText = "" + Endif + Endif + Else + + lcVersionText = "" + + Endif + + Else + lcVersionText = "" + Endif + Return lcVersionText + +Endproc +******************************************* SFARSIT: Get_Version ******************************************* + + +* PROCEDURE Get_Hexa( tnDeca ) +* Date : 18/11/2004, 17:56:48 +* author : marius.mutu +* description: transforma un Deca in Hexa + +****** PARAMETER BLOCK ************** +* Parameters : 1 +* Parameter 1: Numarul in Deca +* +******************************************* INCEPUT:Get_Hexa ******************************************* +Procedure Get_Hexa( tnDeca ) + Local laHexa, lnHexa, lnDeca + + + If Empty(tnDeca) + lnDeca = 0 + Else + lnDeca = tnDeca + Endif + + Dimension laHexa[16] + laHexa[1] = '0' + laHexa[2] = '1' + laHexa[3] = '2' + laHexa[4] = '3' + laHexa[5] = '4' + laHexa[6] = '5' + laHexa[7] = '6' + laHexa[8] = '7' + laHexa[9] = '8' + laHexa[10] = '9' + laHexa[11] = 'A' + laHexa[12] = 'B' + laHexa[13] = 'C' + laHexa[14] = 'D' + laHexa[15] = 'E' + laHexa[16] = 'F' + + lnHexa = '' + + Do While lnDeca > 0 + lnrest = Mod(lnDeca, 16) + lcHexa = laHexa[lnRest + 1] + lnDeca = Int(lnDeca / 16) + + lnHexa = lcHexa + lnHexa + lnrest = Mod(lnDeca, 16) + + Enddo + + Return lnHexa + +Endproc +******************************************* SFARSIT: Get_Hexa ******************************************* +&& completeaza cu spatii si CRLF un mesaj a.i. pe fiecare linie sa fie lnLength caractere +Function format_msg + Parameters tcErrMsg, tnLength + Local lnLength, lcLinie, lcMesaj, lnPoz, lnCate, i, j + lcMesaj = "" + If Empty(tnLength) + lnLength = 50 && numarul de caractere pe linie + Else + lnLength = tnLength + Endif + i = 1 + If At(Chr(13) + Chr(10), tcErrMsg, i) > 0 + lnCate = At(Chr(13) + Chr(10), tcErrMsg, i) + 1 + i = i + 1 + Else + lnCate = Min(lnLength, Rat(' ', Substr(tcErrMsg, 1, lnLength)) - 1) + Endif + lnPoz = 1 + *!* lcLinie=Substr(tcErrMsg,1,lnCate) + + Do While lnPoz < Len(tcErrMsg) + lcLinie = Substr(tcErrMsg, lnPoz, lnCate) + + If Right(lcLinie, 2) = Chr(13) + Chr(10) + lcLinie = Alltrim(Substr(lcLinie, 1, Len(lcLinie) - 2)) + Else + lcLinie = Alltrim(lcLinie) + Endif + + j = Int((lnLength - Len(lcLinie)) / 2) + lcLinie = Iif(!Empty(lcLinie), Space(j) + lcLinie + Space(j), "") + lcMesaj = lcMesaj + lcLinie + Chr(13) + Chr(10) + + lnPoz = lnPoz + lnCate + + If At(Chr(13) + Chr(10), tcErrMsg, i) > 0 + lnCate = At(Chr(13) + Chr(10), tcErrMsg, i) + 2 - lnPoz + i = i + 1 + Else + lcNextChar = Substr(tcErrMsg, lnPoz + lnLength, 1) + lcLinieNoua = Substr(tcErrMsg, lnPoz, lnLength) + If lcNextChar!= ' ' And Len(lcLinieNoua) >= lnLength + lnCate = Min(lnLength, Rat(' ', lcLinieNoua) - 1) + Else + lnCate = lnLength + Endif + Endif + Enddo + Return lcMesaj +Endfunc && format_msg +***--------------------------------------------------------------------------------------------- +Procedure C_LUNA + Parameters tnnrluna + Do Case + Case tnnrluna = 1 + Return "IANUARIE" + Case tnnrluna = 2 + Return "FEBRUARIE" + Case tnnrluna = 3 + Return "MARTIE" + Case tnnrluna = 4 + Return "APRILIE" + Case tnnrluna = 5 + Return "MAI" + Case tnnrluna = 6 + Return "IUNIE" + Case tnnrluna = 7 + Return "IULIE" + Case tnnrluna = 8 + Return "AUGUST" + Case tnnrluna = 9 + Return "SEPTEMBRIE" + Case tnnrluna = 10 + Return "OCTOMBRIE" + Case tnnrluna = 11 + Return "NOIEMBRIE" + Case tnnrluna = 12 + Return "DECEMBRIE" + Otherwise + Return "" + Endcase +Endproc &&c_luna +***-------------------------------------------------------------------------------------- +***-------------------------------------------------------------------------------------- +Procedure CLUNA3 + Parameters tnnrluna + Do Case + Case tnnrluna = 1 + Return "Ian" + Case tnnrluna = 2 + Return "Feb" + Case tnnrluna = 3 + Return "Mar" + Case tnnrluna = 4 + Return "Apr" + Case tnnrluna = 5 + Return "Mai" + Case tnnrluna = 6 + Return "Iun" + Case tnnrluna = 7 + Return "Iul" + Case tnnrluna = 8 + Return "Aug" + Case tnnrluna = 9 + Return "Sep" + Case tnnrluna = 10 + Return "Oct" + Case tnnrluna = 11 + Return "Noi" + Case tnnrluna = 12 + Return "Dec" + Otherwise + Return Space(3) + Endcase +Endproc &&cluna3 +***-------------------------------------------------------------------------------------- +***------------------------------------------------------------------------------------ +Procedure cluna + Parameters tcGrup, tcTipCumul, tcAn + + lcTipCumul = Upper(Alltrim(tcTipCumul)) + lcAn = Alltrim(tcAn) + lcgrup = Alltrim(tcGrup) + lnGrup = Val(lcgrup) + Do Case + Case lcTipCumul = "T" + lcret = "Trim. " + lcgrup + " " + lcAn + Case lcTipCumul = "S" + lcret = "Sem. " + lcgrup + " " + lcAn + Case lcTipCumul = "A" + lcret = "Anul " + lcAn + Otherwise + Do Case + Case lnGrup = 1 + lcret = "Ian " + lcAn + Case lnGrup = 2 + lcret = "Feb " + lcAn + Case lnGrup = 3 + lcret = "Mar " + lcAn + Case lnGrup = 4 + lcret = "Apr " + lcAn + Case lnGrup = 5 + lcret = "Mai " + lcAn + Case lnGrup = 6 + lcret = "Iun " + lcAn + Case lnGrup = 7 + lcret = "Iul " + lcAn + Case lnGrup = 8 + lcret = "Aug " + lcAn + Case lnGrup = 9 + lcret = "Sep " + lcAn + Case lnGrup = 10 + lcret = "Oct " + lcAn + Case lnGrup = 11 + lcret = "Noi " + lcAn + Case lnGrup = 12 + lcret = "Dec " + lcAn + Otherwise + lcret = lcAn + Endcase + Endcase + Return lcret +Endproc &&cluna +***------------------------------------------------------------------------------------ +***------------------------------------------------------------------------------------ +Procedure get_trimestru + Parameters tnNrTrim + Do Case + Case tnNrTrim = 1 + Return "Trim. I" + Case tnNrTrim = 2 + Return "Trim. II" + Case tnNrTrim = 3 + Return "Trim. III" + Case tnNrTrim = 4 + Return "Trim. IV" + Otherwise + Return Space(7) + Endcase +Endproc && get_trimestru +***-------------------------------------------------------------------------------------- +Procedure get_semestru + Parameters tnNrSem + Do Case + Case tnNrSem = 1 + Return "Sem. I" + Case tnNrSem = 2 + Return "Sem. II" + Otherwise + Return Space(7) + Endcase +Endproc && get_semestru +***-------------------------------------------------------------------------------------- +Function Lista_Campuri + Lparameters tcAlias + + Local lcSelect, i, lcAlias, lcLista + lcLista = [] + lcSelect = Select() + lcAlias = tcAlias + + Select (lcAlias) + lnFields = Fcount() + For i = 1 To lnFields + lcField = Field(i) + lcLista = lcLista + [,] + lcField + Endfor + If !Empty(lcLista) + lcLista = Substr(lcLista, 2) + Endif + + Select (lcSelect) + Return lcLista + +Endfunc && Lista_Campuri +***---------------------------------------- + +Procedure NRORD + Parameters ALI + Sele &ALI + A = Reccount() + If A = 0 + Return + Endif + If A > 65000 + Return 0 + Endif + Declare NROR(A) + K = 0 + Scan + K = K + 1 + NROR(K) = Recno() + Endscan + Return + + ******************** +Function NRCRT + NR = Ascan(NROR, Recno()) + Return NR + ********************** + + ***---------------------------------------- +Function caps_first + Lparameters tcMesaj + Local lcMesaj + If !Empty(tcMesaj) And Len(tcMesaj) > 1 + lcMesaj = Upper(Substr(tcMesaj, 1, 1)) + Strtran(Lower(Substr(tcMesaj, 2)), [oracle], [Oracle]) + Else + lcMesaj = Upper(tcMesaj) + Endif + Return lcMesaj +Endfunc && caps_first +***---------------------------------------- + +*!* FUNCTION ultima_zi_din_luna +*!* PARAMETERS tcAnul, tcLuna +*!* +*!* LOCAL ldData +*!* ldData = DATE(VAL(tcAnul),VAL(tcLuna), 1) +*!* ldData = GOMONTH(ldData,1) +*!* ldData = DATE(YEAR(ldData),MONTH(ldData), 1) - 1 +*!* RETURN ldData +*!* ENDFUNC + +Function ultima_zi_din_luna + Parameters tcAnul, tcLuna + + Local ldData, lcAnul, lcLuna + + If Type('tcAnul') = 'N' + lcAnul = Transform(tcAnul) + Else + lcAnul = tcAnul + Endif + If Type('tcLuna') = 'N' + lcLuna = Transform(tcLuna) + Else + lcLuna = tcLuna + Endif + + ldData = Date(Val(lcAnul), Val(lcLuna), 1) + ldData = Gomonth(ldData, 1) + ldData = Date(Year(ldData), Month(ldData), 1) - 1 + Return ldData +Endfunc + + + +****************************************************************************** + +Procedure viz_prg_instalat + If Used('v_programe_instalate') + Use In v_programe_instalate + Endif + *!* lcSql = [select * from vdef_util_programe where id_util=]+Alltrim(Str(gnIdUtil))+; + *!* [ order by ordine] + lcSql = [{call contafin_oracle.pack_drepturi.programe_utilizator(] + Alltrim(Str(gnIdUtil)) + [)}] + lcCursor = [v_programe_instalate] + lnSucces = goExecutor.oExecute(lcSql, lcCursor) + goExecutor.Oreset() + +Endproc +****************************************************************************** +Procedure lansare_toolbar + + Do viz_prg_instalat In oproceduri_comune.prg + + If Used('v_programe_instalate') And Reccount('v_programe_instalate') > 0 + + + If Used('v_programe_favorite') + Use In v_programe_favorite + Endif + Select * From v_programe_instalate Where favorit = 1 And Upper(Alltrim(nume)) <> Iif(Type('gcNumeProgram') = 'U', '<>', gcNumeProgram) ; + Order By ordine_favorit Into Cursor v_programe_favorite + If Reccount('v_programe_favorite') > 0 + otool = Createobject('toolset') + With otool.tool1 + Local i + i = 0 + Select v_programe_favorite + Scan + i = i + 1 + *!* modificare 15.10.2007 + *!* If Type('gcappname')='C' + *!* If gcappname=Upper(Alltrim(nume)) + *!* Loop + *!* Endif + *!* Endif + *!* modificare 15.10.2007 ^ + + lnParametru_prog = parametru_prog && pt. programul de Contracte - clienti si furnizori + lcParametru_prog = Alltrim(Str(Nvl(lnParametru_prog, 0))) + + lnIdProgram = id_program + lcIdProgram = Alltrim(Str(lnIdProgram)) + lcNumeProgram = Proper(Alltrim(explicatie)) + + lcImagine = Upper(Alltrim(nume)) + ".png" &&nume poza + + lcCaleImagine = gcappPath + 'grafice\' + lcImagine &&cale imagine + If !File(lcCaleImagine) + lcImagine = 'na.png' + lcCaleImagine = gcappPath + 'grafice\na.png' + Endif + lnIdGrupProg = id_grup_prog + lnIdGrupProgFav = 0 + If Like([*.htm], Lower(Alltrim(nume))) Or Like([*.html], Lower(Alltrim(nume))) + lcComandaProgram = dirgen + Iif(Empty(Director), Alltrim(nume), Alltrim(Director)) + [\] + ; + Alltrim(nume) + Else + lcCaleProgram = dirgen + Iif(Empty(Director), Juststem(nume), Alltrim(Director)) + [\] + ; &&cale program + Juststem(Alltrim(nume)) + [.exe] + lcParametru = gcHost + [;] + gcuserName + [;] + gcPassword + [;] + Alltrim(Str(gnIdUtil)) + [;] + ; + lcIdProgram + [;] + lcParametru_prog + [;] &¶metri + lcComandaProgram = [run /n ] + lcCaleProgram + [ ] + lcParametru + Endif + + + lcImgNume = "img_" + lcIdProgram + "_" + lcParametru_prog + + If lnIdProgram > 0 + .AddObject(lcImgNume, 'img_program') + .&lcImgNume..comanda_program = lcComandaProgram &&adaug poza + .&lcImgNume..Picture = lcImagine + .&lcImgNume..ToolTipText = lcNumeProgram + .&lcImgNume..Visible = .T. + Endif + + Endscan + .Dock(0) + .Show + Endwith + Endif + Endif + + If Used('v_programe_instalate') + Use In v_programe_instalate + Endif + + If Used('v_programe_favorite') + Use In v_programe_favorite + Endif + +Endproc +***--------------------------------------------------------------------------------------------------------------------------------------- +***--------------------------------------------------------------------------------------------------------------------------------------- +Procedure ceretitlu_rap + Parameters tcMesaj, tctitlu + + Local lcTitlu + lcTitlu = tctitlu + obj1 = Createobject("frm_cere_titlu") + obj1.clb_tx_simplu1.lb_simplu1.Caption = tcMesaj + obj1.clb_tx_simplu1.text_simplu1.ControlSource = 'lctitlu' + obj1.Show(1) + Return lcTitlu + +Endproc +***--------------------------------------------------------------------------------------------------------------------------------------- +Procedure cursor2lista + Lparameters tcCursor, tcColumn, tcSeparator, tcFilter + && tcCursor - cursor + && tcColumn - coloana din cursor care va constitui lista + && tcSeparator separatorul de elemente din tcLista - default este ";" - este optional + && tcFilter - optional = filtru pentru tabel + && intoarce lista de valori separate prin separatori + && ex: lcLista = cursor2lista("cursor","id",";") + + Local lcLista, lcSeparator, lcSelect, lcFilter + + lcLista = "" + lcSeparator = Iif(!Empty(tcSeparator) And Type('tcSeparator') = 'C', tcSeparator, ";") + lcFilter = Iif(Empty(m.tcFilter), '.T.', m.tcFilter) + If Used(tcCursor) + lcSelect = Select() + lcColumn = tcCursor + "." + tcColumn + If Type(lcColumn) # 'U' + Select * From (tcCursor) Into Cursor crsListaTemp + + Select crsListaTemp + Scan For &lcFilter + lcLista = lcLista + Alltrim(Transform(Evaluate(tcColumn))) + lcSeparator + Endscan + Use In crsListaTemp + + If !Empty(lcLista) + lcLista = Left(lcLista, Len(lcLista) - 1) + Endif + Endif + + + Select (lcSelect) + Endif + + Return lcLista + +Endproc && cursor2lista + +***------------------------------------------------------------------------------------------- +***------------------------------------------------------------------------------------------- +Procedure GETCALLSTACK + Local nPos + nPos = Program(-1) - 2 + + + Local cCallStack, i + cCallStack = "" + For i = nPos To 1 Step - 1 + cCallStack = cCallStack + Program(i) + Chr(13) + Chr(10) + Endfor + + + Return cCallStack + +Endproc && GETCALLSTACK +***------------------------------------------------------------------------------------------- +&& -------------------------- INCEPUT verific_cont ------------------------------ +Procedure verific_cont + Parameters tcCont, tlNoMessage + + Private pcCont + pcCont = Alltrim(tcCont) + + && verificare contului cu Planul de Conturi + lcSel = [SELECT cont from ] + GCS + [.vplcont_sintetic WHERE TRIM(cont) = ?pcCont and an = ?gnAn ] + lcCursor = 'crs_verific' + lnSucces = goExecutor.oExecute(lcSel, lcCursor) + If lnSucces < 0 + amessagebox(goExecutor.cEroare, 0 + 16, "Eroare") + Endif + + If lnSucces > 0 + If Reccount('crs_verific') = 0 + lnSucces = -1 + Endif + Endif + + If lnSucces < 0 And !tlNoMessage + amessagebox('Acest cont nu este definit in planul de conturi!', 0 + 48, 'Atentie') + Endif + + Return lnSucces + +Endproc + +&& -------------------------- SFARSIT verific_cont ------------------------------ + +* ===================== GetHash ==================================== +* INTOARCE UN OBIECT DE TIP HASH CREAT DIN tcPropertyValueList +*!* loHash = GetHash([cselect=>select id, name from test??cwhere=>id=pnId??corder=>name]) +*!* lnMembers = AMEMBERS(laMembers, loHash) +*!* FOR i = 1 TO lnMembers +*!* MESSAGEBOX(loHash.&laMembers(i)) +*!* ENDFOR +* ================================================================== +Function GetHash + Lparameters tcPropertyValueList + + Local loHash + + loHash = Createobject("MyHash", tcPropertyValueList) + Return loHash + +Endfunc + + +* ===================== MyHash ==================================== +* OBIECT EMULARE HASH +* loHash = GetHash([cselect=>select id, name from test??cwhere=>id=pnId??corder=>name]) +* ================================================================== +Define Class MyHash As Custom + + + Procedure ReadMe + If .F. + Local loHash + loHash = Createobject("MyHash", [cselect=>select id, name from test??cwhere=>id=pnId??corder=>name]) + Endif + Endproc && readme + + *!* sir "proprietate1=>valoare1??proprietate2=>valoare2" + *!* genereaza proprietati si valori din sirul initial + Procedure Init + Lparameters tcPropertyValueList + + Local i, lnProperties, lcPropertyValue, lcValue, luValue + + && tcPropertyValueList = [cselect =>ala bala portocala??cfiltru=>un filtru - atentie la spatiile din stanga valorii] + If Type('tcPropertyValueList') = 'C' And !Empty(tcPropertyValueList) + lnProperties = Getwordcount(tcPropertyValueList, '??') + For i = 1 To lnProperties + lcPropertyValue = Alltrim(Getwordnum(tcPropertyValueList, i, '??')) + If At('=>', lcPropertyValue) > 0 + lcProperty = Getwordnum(Strtran(lcPropertyValue, '=>', Chr(18)), 1, Chr(18)) + lcValue = Getwordnum(Strtran(lcPropertyValue, '=>', Chr(18)), 2, Chr(18)) + luValue = This.GetDefaultValue(lcProperty, lcValue) + This.SetValue(lcProperty, luValue) + Endif + Endfor + Endif + Endproc && INIT + + *!* Seteaza valoarea unei proprietati daca exista sau adauga proprietatea, si intoarce valoarea + Procedure SetValue + Lparameters tcProperty, tuValue + + If Type('THIS.&tcProperty') <> 'U' + This.&tcProperty = tuValue + Else + This.AddProperty(tcProperty, tuValue) + Endif + + Return This.&tcProperty + + Endproc && SetValue + + *!* Intoarce valoarea unei proprietati daca exista, altfel valoarea empty() corespunzator tipului proprietatii + Function GetValue + Lparameters tcProperty + + Local lcProperty, luValue + lcProperty = 'THIS.' + tcProperty + + If Type('THIS.&tcProperty') <> 'U' + luValue = This.&tcProperty + Else + luValue = This.GetDefaultValue(tcProperty) + Endif + Return luValue + + Endfunc && GetValue + + *!* Intoarce valoarea empty() a unei proprietati dupa tip = prima litera din numele proprietatii daca nu primeste decat tcProperty + *!* Converteste tcValue la tipul variabilei tcProperty daca tcValue e primit ca parametru + Function GetDefaultValue + Lparameters tcProperty, tcValue + + Local lcType, luValue + luValue = "" + lcType = Upper(Left(tcProperty, 1)) + llEmptyValue = Iif(Pcount() = 1, .T., .F.) + + Do Case + Case lcType $ "CM" + luValue = Iif(llEmptyValue, '', tcValue) + Case lcType $ "NIF" + luValue = Iif(llEmptyValue, 0, Val(tcValue)) + Case lcType = "T" + luValue = Iif(llEmptyValue, Dtot({}), Ctot(tcValue)) + Case lcType = "D" + luValue = Iif(llEmptyValue, {}, Ctod(tcValue)) + Case lcType = "L" + luValue = Iif(llEmptyValue, .F., Iif(tcValue = "1" Or Upper(tcValue) = "T" Or Upper(tcValue) = '.T.' Or Upper(tcValue) = 'YES', .T., .F.)) + Otherwise + luValue = "" + Endcase + + Return luValue + Endfunc && GetDefaultValue + + *!* Intoarce .T. daca exista proprietatea + Function HasProperty + Lparameters tcProperty + + Local lcProperty, llReturn + lcProperty = 'THIS.' + tcProperty + llReturn = .F. + + If Type('THIS.&tcProperty') <> 'U' + llReturn = .T. + Endif + + Return llReturn + + Endfunc && HasProperty + +Enddefine && Hash + +Function get_zileluc( ) + + lnzileluc = 0 + lcSql = [select zileluc from ] + GCS + [.sal_calendar where an=?gnan and luna=?gnluna] + lcCursor = [v_zileluc] + lnSucces = goExecutor.oExecute(lcSql, lcCursor) + goExecutor.Oreset() + If lnSucces < 0 + amessagebox(goExecutor.cEroare, 0 + 16, "Eroare") + Return + Else + Select v_zileluc + lnzileluc = zileluc + Endif + Return lnzileluc + + ******************************************* + * PROCEDURE param_listari( tcraport, tcTitlu, tcSemnaturi ) + * Date : 07/28/05, 14:04:21 + * author : liana.macinic + * description: + + ****** PARAMETER BLOCK ************** + * Parameters : 3 + * Parameter 1: + * Parameter 2: + * Parameter 3: + * + ******************************************* +Procedure param_listari( tcraport, tctitlu, tcSemnaturi, tlFaraTab) + Store '' To tctitlu, tcSemnaturi + + Local lnIdRaport + If Used('v_raport') + Use In v_raport + Endif + + lcSql = [select id_raport,titlu from ] + GCS + [.sal_nom_rapoarte where UPPER(raport) = '] + Upper(Alltrim(tcraport)) + ['] + lcCursor = [v_raport] + lnSucces = goExecutor.oExecute(lcSql, lcCursor) + goExecutor.Oreset() + If lnSucces < 0 + amessagebox(goExecutor.cEroare, 0 + 16, "Eroare") + Return + Endif + Select v_raport + lnIdRaport = v_raport.id_raport + tctitlu = v_raport.titlu + Use + + + If Used('v_date') + Use In v_date + Endif + + lcSql = [select semnatura,NUME from ] + GCS + [.sal_semnaturi_rap where id_raport = ] + Alltrim(Str(lnIdRaport)) + [ and sters = 0 order by ordine] + lcCursor = [v_date] + lnSucces = goExecutor.oExecute(lcSql, lcCursor) + goExecutor.Oreset() + If lnSucces < 0 + amessagebox(goExecutor.cEroare, 0 + 16, "Eroare") + Return + Endif + + Local lcSemn, lcNumeRap, lcListaNumeRap + Store '' To lcSemn, lcNumeRap, lcListaNumeRap + + + Select v_date + Scan + Scatter Name lcDateRap Memo + lcSemn = Alltrim(Nvl(lcDateRap.semnatura, "")) + lcNumeRap = Alltrim(Nvl(lcDateRap.nume, '')) + If Len(lcSemn) => Len(lcNumeRap) + lcNumeRap = Padr(lcNumeRap, Len(lcSemn), " ") + Else + lcSemn = Padr(lcSemn, Len(lcNumeRap), " ") + Endif + If tlFaraTab + tcSemnaturi = tcSemnaturi + lcSemn + Else + tcSemnaturi = tcSemnaturi + Chr(9) + Chr(9) + lcSemn + Endif + + If tlFaraTab + lcListaNumeRap = lcListaNumeRap + lcNumeRap + Else + lcListaNumeRap = lcListaNumeRap + + Chr(9) + Chr(9) + lcNumeRap + Endif + Endscan + + tcSemnaturi = tcSemnaturi + Chr(13) + lcListaNumeRap + *!* SELECT v_date + *!* SCAN + *!* tcSemnaturi = tcSemnaturi+CHR(9)+CHR(9)+ALLTRIM(v_date.nume) + *!* ENDSCAN + *!* tcSemnaturi = tcSemnaturi+CHR(9)+CHR(9)+CHR(9)+CHR(9) + Select v_date + Use +Endproc +*----------------------------------sfarsit procedura param_listari---------------------------------- +** --------------------------------INCEPUT: facturi_duplicate ------------------------------ +Procedure facturi_duplicate + Parameters tcCont, tnId_Part, tcSerieAct, tnNract, tcMesajReturn + + Private pcCont, pnNract, pnId_part, pcSerieAct + Local lcMesaj, MesajReturn + lcMesaj = '' + pcCont = Alltrim(tcCont) + pnId_part = tnId_Part + pnNract = tnNract + pcSerieAct = Nvl(Iif(Empty(Alltrim(tcSerieAct)), Null, Alltrim(tcSerieAct)), '+_') + lcMesajReturn = tcMesajReturn + + If !(Alltrim(Nvl(Alltrim(tcSerieAct), []) + ' ' + Allt(Str(pnNract))) $ lcMesajReturn) + *!* modificare ROAFACTURARE v 2.0.46 + If Inlist(Allt(pcCont), '4111', '401', '404', '418', '408', '461', '462') + *!* If Inlist(Allt(pcCont),'4111','401','404') + *!* modificare ROAFACTURARE v 2.0.46 ^ + lnTotctva = 0 + Do Case + *!* modificare ROAFACTURARE v 2.0.46 + *!* Case Allt(pcCont) = '4111' + *!* lcSql = [select count(*) as nr_ireg, sum(debit) as debit from ireg_parteneri ]+; + *!* [ where an=?gnAn and luna=?gnLuna and cont = ?pcCont and nract = ?pnNract] + ; + *!* [ and NVL(serie_act,'+_') = ?pcSerieAct ]+; + *!* [ and extract(year from dataireg)*12+extract(month from dataireg) = ?gnAn*12+?gnLuna ] + *!* lcCursor = [crsFactDbl] + *!* lnSucces = goExecutor.oExecute(lcSql,lcCursor) + *!* goExecutor.Oreset() + *!* If lnSucces < 0 + *!* AMESSAGEBOX(goExecutor.cEroare,0+16,'Eroare') + *!* Return + *!* Endif + *!* Select crsFactDbl + *!* If nr_ireg > 0 + *!* lnTotctva = debit + *!* lcMesaj = 'Factura '+Alltrim(Alltrim(Nvl(tcSerieAct,[]))+' '+Allt(Str(pnNract))) + ", "+ Alltrim(Transform(lnTotctva, get_mask(14,GnPA)))+' lei, mai exista inregistrata in luna curenta.' + *!* Endif + Case Inlist(Allt(pcCont), '4111', '418', '461') + lcSql = [select count(*) as nr_ireg, sum(debit) as debit,] + ; + [TO_NUMBER(NVL(pack_sesiune.getoptiunefirma('NRLUNIVERIFICARENRDOC'),0)) as nrluni ] + ; + [from ireg_parteneri ] + ; + [where an*12+luna between ] + Alltrim(Str(gnAn)) + [*12+] + Alltrim(Str(gnLuna)) + ; + [-TO_NUMBER(NVL(pack_sesiune.getoptiunefirma('NRLUNIVERIFICARENRDOC'),0)) ] + ; + [and ] + Alltrim(Str(gnAn)) + [*12+] + Alltrim(Str(gnLuna)) + [ ] + ; + [and cont = '] + Alltrim(pcCont) + [' and nract = ] + Alltrim(Str(pnNract, 14, 0)) + [ ] + ; + [and NVL(serie_act,'+_') = '] + pcSerieAct + [' ] + ; + [and extract(year from dataireg)*12+extract(month from dataireg) between ] + ; + Alltrim(Str(gnAn)) + [*12+] + Alltrim(Str(gnLuna)) + ; + [-TO_NUMBER(NVL(pack_sesiune.getoptiunefirma('NRLUNIVERIFICARENRDOC'),0)) ] + ; + [and ] + Alltrim(Str(gnAn)) + [*12+] + Alltrim(Str(gnLuna)) + [ ] + gcCondSucursala + lcCursor = [crsFactDbl] + lnSucces = goExecutor.oExecute(lcSql, lcCursor) + goExecutor.Oreset() + If lnSucces < 0 + amessagebox(goExecutor.cEroare, 0 + 16, 'Eroare') + Return + Endif + + Select crsFactDbl + If nr_ireg > 0 + lnTotctva = debit + lcPerioadaVerificare = Dtoc(Gomonth(Date(gnAn, gnLuna, 1), (-1) * NrLuni)) + [ - ] + ; + Dtoc(Gomonth(Date(gnAn, gnLuna, 1), 1) - 1) + lcMesaj = Iif(INLIST(Alltrim(pcCont), '4111', '461'), 'Factura', 'Avizul') + ' ' + Alltrim(Alltrim(Nvl(tcSerieAct, [])) + ' ' + ; + Allt(Str(pnNract, 20, 0))) + ", " + Alltrim(Transform(lnTotctva, get_mask(14, GnPc))) + ; + ' lei, mai este inregistrat' + Iif(INLIST(Alltrim(pcCont), '4111', '461'), 'a', '') + ' in perioada ' + lcPerioadaVerificare + '.' + Endif + Release pnNrLuni + *!* modificare ROAFACTURARE v 2.0.46 ^ + Case Inlist(Allt(pcCont), '401', '404', '408', '462') + lcSql = [select count(*) as nr_ireg, sum(credit) as credit,] + ; + [TO_NUMBER(NVL(pack_sesiune.getoptiunefirma('NRLUNIVERIFICARENRDOC'),0)) as nrluni ] + ; + [ from ireg_parteneri ] + ; + [ where an*12+luna between ] + Alltrim(Str(gnAn)) + [*12+] + Alltrim(Str(gnLuna)) + ; + [-TO_NUMBER(NVL(pack_sesiune.getoptiunefirma('NRLUNIVERIFICARENRDOC'),0)) ] + ; + [ and ] + Alltrim(Str(gnAn)) + [*12+] + Alltrim(Str(gnLuna)) + ; + [ and cont = '] + Alltrim(pcCont) + [' and nract = ] + Alltrim(Str(pnNract, 14, 0)) + ; + [ and NVL(serie_act,'+_') = '] + pcSerieAct + [' ] + ; + [and extract(year from dataireg)*12+extract(month from dataireg) between ] + ; + Alltrim(Str(gnAn)) + [*12+] + Alltrim(Str(gnLuna)) + ; + [-TO_NUMBER(NVL(pack_sesiune.getoptiunefirma('NRLUNIVERIFICARENRDOC'),0)) ] + ; + [and ] + Alltrim(Str(gnAn)) + [*12+] + Alltrim(Str(gnLuna)) + ; + [ and id_part = ] + Alltrim(Str(m.pnId_part)) + [ ] + gcCondSucursala + lcCursor = [crsFactDbl] + lnSucces = goExecutor.oExecute(lcSql, lcCursor) + goExecutor.Oreset() + + If lnSucces < 0 + amessagebox(goExecutor.cEroare, 0 + 16, 'Eroare') + Return + Endif + + Select crsFactDbl + If nr_ireg > 0 + lnTotctva = credit + lcPerioadaVerificare = Dtoc(Gomonth(Date(gnAn, gnLuna, 1), (-1) * NrLuni)) + [ - ] + ; + Dtoc(Gomonth(Date(gnAn, gnLuna, 1), 1) - 1) + lcMesaj = 'Factura ' + Alltrim(Alltrim(Nvl(tcSerieAct, [])) + ' ' + Allt(Str(pnNract,20,0))) + ", " + Alltrim(Transform(lnTotctva, get_mask(14, GnPc))) + ' lei, mai exista inregistrata in perioada ' + lcPerioadaVerificare + '.' + Endif + *!* modificare v 2.0.132 + *!* Case Allt(pcCont) = '404' + *!* lcSql = [select count(*) as nr_ireg, sum(credit) as credit from vireg_parteneri ]+; + *!* [ where an=?gnAn and luna=?gnLuna and cont = ?pcCont and nract = ?pnNract]+; + *!* [ and NVL(serie_act,'+_') = ?pcSerieAct ]+; + *!* [ and extract(year from dataireg)*12+extract(month from dataireg) = ?gnAn*12+?gnLuna ]+; + *!* [ and id_part = ?pnId_part] + *!* lcCursor = [crsFactDbl] + *!* lnSucces = goExecutor.oExecute(lcSql,lcCursor) + *!* goExecutor.Oreset() + + *!* If lnSucces < 0 + *!* AMESSAGEBOX(goExecutor.cEroare,0+16,'Eroare') + *!* Return + *!* Endif + + *!* Select crsFactDbl + *!* If nr_ireg > 0 + *!* lnTotctva = credit + *!* lcMesaj = 'Factura '+Alltrim(Alltrim(Nvl(tcSerieAct,[]))+' '+Allt(Str(pnNract)))+ ", "+ Alltrim(Transform(lnTotctva, get_mask(14,GnPA)))+' lei, mai exista inregistrata in luna curenta.' + *!* Endif + *!* modificare v 2.0.132 ^ + Endcase + + Endif + Endif + + Return lcMesaj + +Endproc && facturi_duplicate +&& ------------------------------SFARSIT: facturi_duplicate ------------------------------ + +******************************************** +*** Verifica un numar si serie (optional) de factura clienti in vanzari in luna curenta +*** Intoarce .T. daca exista numarul de factura in luna curenta +******************************************** +Function VerificaFacturaClientiVanzari + Lparameters tnNrFactura, tcSerieFactura + * tcSerieFactura (optional) + + Private pnNrFactura, pcSerieFactura, pnCount + Local lcSql, llSucces, lcSelect, llExista + + lcSelect = Select() + pnNrFactura = tnNrFactura + pcSerieFactura = Iif(!Empty(Nvl(m.tcSerieFactura, '')), Alltrim(Transform(m.tcSerieFactura)), '') + pnCount = 0 + + lcSql = [SELECT COUNT(*) as nr FROM vanzari WHERE numar_act = ?pnNrFactura ] + Iif(!Empty(m.pcSerieFactura), [AND serie_act = ?pcSerieFactura ], []) + [AND extract(year FROM data_act) = ?gnAn AND extract(month FROM data_act) = ?gnLuna and sters = 0] + llSucces = goExecutor.oSelecteaza2Value(m.lcSql, @pnCount) + llExista = Nvl(m.pnCount, 0) > 0 + + Select (m.lcSelect) + Return m.llExista +Endfunc && VerificaNumarFacturaVanzari + +************************************ EncryptDecrypt **************************************** +*!* EncryptDecrypt +*!* EX: EncryptDecrypt("text to encrypt", "encrypt key", "encrypt") +*!* EX: EncryptDecrypt("text to decrypt", "decrypt key", "decrypt") +*!* EX: EncryptDecrypt("text to encrypt", "encrypt key", "encrypt","blowfish") +Function EncryptDecrypt + Lparameters tcText, tcPassword, tcMode, tcAlgorithm + && tcMode : ENCRYPT/DECRYPT + Local lcAlgorithm, lcReturn, lcString, lcPWD + Local loException As Exception + m.lcString = tcText + m.lcPWD = tcPassword + m.lcReturn = "" + lcAlgorithm = "" + If Type('tcAlgorithm') = 'C' + lcAlgorithm = tcAlgorithm + Endif + If lcAlgorithm = "blowfish" + If Upper(Alltrim(Transform(tcMode))) = "ENCRYPT" + lcReturn = Encrypt(m.lcString, m.lcPWD, 4, 0) + Else + Try + lcReturn = decrypt(m.lcString, Alltrim(m.lcPWD), 4, 0) + Catch To loException + If loException.ErrorNo = 2028 + polog.Log("S-a incercat decriptarea unui text care nu a fost generat cu algoritmul de criptare selectat.", Program()) + Else + polog.Log(loException.Message, Program()) + Endif + Endtry + Endif + Endif + *!* 18.03.2008 : am scos chr(0) de la sfarsitul textului decriptat + If At(Chr(0), m.lcReturn) > 0 And Upper(Alltrim(Transform(tcMode))) != "ENCRYPT" + m.lcReturn = Substr(m.lcReturn, 1, At(Chr(0), m.lcReturn) - 1) + Endif + *!* 18.03.2008 + Return m.lcReturn +Endfunc && EncryptDecrypt +*!* Function EncryptDecrypt +*!* Lparameters tcText, tcPassword, tcMode, tcAlgorithm +*!* && tcMode : ENCRYPT/DECRYPT +*!* *!* IF !'crypto'$LOWER(SET("Classlib")) +*!* *!* SET CLASSLIB TO CRYPTO.VCX ADDITIVE +*!* *!* ENDIF +*!* Local loCryptor, llNewCryptFll, lcAlgorithm +*!* loCryptor = Newobject("MyCrypt","crypto.vcx") +*!* Local loException As Exception +*!* Local lcReturn, lcString, lcPWD +*!* m.lcString = tcText +*!* m.lcPWD = tcPassword +*!* m.lcReturn = "" +*!* llNewCryptFll = .F. +*!* If Type('gnewcryptfll') <> 'U' +*!* llNewCryptFll = gnewcryptfll +*!* Endif +*!* lcAlgorithm = "" +*!* If Type('tcAlgorithm') = 'C' +*!* lcAlgorithm = tcAlgorithm +*!* Endif +*!* If !(lcAlgorithm = "blowfish" And llNewCryptFll) +*!* If Upper(Alltrim(Transform(tcMode))) = "ENCRYPT" +*!* loCryptor.EncryptSessionStreamString( m.lcString, m.lcPWD, @lcReturn) +*!* Else +*!* Try +*!* loCryptor.EncryptSessionStreamString( m.lcString, m.lcPWD, @lcReturn) +*!* Catch To loException +*!* If loException.ErrorNo=2028 +*!* polog.Log("S-a incercat decriptarea unui text care nu a fost generat cu algoritmul de criptare selectat.",Program()) +*!* Else +*!* polog.Log(loException.Message,Program()) +*!* Endif +*!* Endtry +*!* Endif +*!* Else +*!* If Upper(Alltrim(Transform(tcMode))) = "ENCRYPT" +*!* lcReturn=Encrypt(m.lcString, m.lcPWD,4,0) +*!* Else +*!* Try +*!* lcReturn=decrypt(m.lcString, Alltrim(m.lcPWD),4,0) +*!* Catch To loException +*!* If loException.ErrorNo=2028 +*!* polog.Log("S-a incercat decriptarea unui text care nu a fost generat cu algoritmul de criptare selectat.",Program()) +*!* Else +*!* polog.Log(loException.Message,Program()) +*!* Endif +*!* Endtry +*!* Endif +*!* Endif +*!* Release oCryptor +*!* *!* 18.03.2008 +*!* *!* am scos chr(0) de la sfarsitul textului decriptat +*!* If At(Chr(0),m.lcReturn) > 0 And Upper(Alltrim(Transform(tcMode))) != "ENCRYPT" +*!* m.lcReturn = Substr(m.lcReturn, 1, At(Chr(0),m.lcReturn)-1) +*!* Endif +*!* *!* 18.03.2008 +*!* Return m.lcReturn +*!* Endfunc && EncryptDecrypt +************************************ EncryptDecrypt **************************************** +Procedure lansare_help + + Do viz_prg_instalat In oproceduri_comune.prg + + If Used('v_programe_instalate') And Reccount('v_programe_instalate') > 0 + If Used('v_help') + Use In v_help + Endif + Select * From v_programe_instalate Where !Isnull(gruphelp) And nume == gcappname Into Cursor v_help + If Used('v_programe_instalate') + Use In v_programe_instalate + Endif + ohelp = Createobject('toolhelp') + + With ohelp.tool_help1 + lcImgNume = 'HELP' + .AddObject(lcImgNume, 'img_help') + If Used('v_help') And Reccount('v_help') > 0 And !Empty(gcCaleHelp) + + Select v_help + Local lcgrup, lcNume, lcIndex + lcgrup = Nvl(Alltrim(v_help.gruphelp), '') + lcNume = Nvl(Alltrim(v_help.numehelp), '') + lcIndex = Nvl(Alltrim(v_help.indexhelp), '') + lcComanda = dirgen + gcCaleHelp + '\' + lcgrup + '\' + lcNume + '\' + lcIndex + If File(lcComanda) + .&lcImgNume..Picture = '_active_help.ico' &&adaug poza + .&lcImgNume..comanda_program = lcComanda + Else + .&lcImgNume..comanda_program = 'INACTIV' + Endif + Else + .&lcImgNume..comanda_program = 'INACTIV' + Endif + .&lcImgNume..ToolTipText = 'Ajutor (F1)' + .&lcImgNume..Visible = .T. + + *!* modificare 17.11.2011 + .AddObject('stromfast', 'img_program') + With .stromfast + .Picture = 'romfast_suport.png' + .comanda_program = 'romfast_suport.exe' + .ToolTipText = 'ROMFAST suport tehnic (ALT+R)' + .Visible = .T. + Endwith + *!* modificare 17.11.2011 ^ + + *!* modificare 04.04.2016 + .AddObject('screenshot', 'img_program') + With .screenshot + .Picture = 'screenshot.png' + .comanda_program = 'roascreenshot.exe' + .ToolTipText = 'Captura ecran si email (ALT+S)' + .Visible = .T. + Endwith + *!* modificare 17.11.2011 + + .AddObject('chatbot', 'img_program') + With .chatbot + .Picture = 'chatbot.png' + .comanda_program = 'chatbot' + .ToolTipText = 'Chatbot Suport Tehnic (ALT+C)' + .Visible = .T. + Endwith + + .Dock(0) + .Show + Endwith + Endif + If Used('v_help') + Use In v_help + Endif + +Endproc +***************************************************** + +Procedure lansare_help_meniu + + If Type('ohelp.tool_help1') <> 'O' + Return + Endif + If !Empty(ohelp.tool_help1.Help.comanda_program) + If ohelp.tool_help1.Help.comanda_program <> 'INACTIV' + OPEN_DEFAULT_APP(ohelp.tool_help1.Help.comanda_program) + Else + amessagebox("Manualul de utilizare nu este configurat corect!", 0 + 48, "Atentie") + Endif + Else + amessagebox("Manualul de utilizare nu este instalat!", 0 + 48, "Atentie") + Endif + +Endproc +***************************************************** +Function getUserDocPath + Local lcAppPath, lcAppName, liAt, lcDirgen, lcUserDocPath + lcAppPath = Addbs(shortpath(Justpath(Sys(16, 0)))) + lcAppName = Allt(Uppe(Juststem(Sys(16, 0)))) + liAt = Rat("\", lcAppPath, 2) + lcDirgen = Addbs(Left(lcAppPath, liAt - 1)) + lcUserDocPath = lcDirgen + 'USERDOCSS\' + If !Directory(lcUserDocPath) + Md (lcUserDocPath) + Endif + lcUserDocPath = lcUserDocPath + lcAppName + '\' + If !Directory(lcUserDocPath) + Md (lcUserDocPath) + Endif + lcUserDocPath = lcUserDocPath + GCS + '\' + If !Directory(lcUserDocPath) + Md (lcUserDocPath) + Endif + + Return lcUserDocPath + +Endfunc +***************************************************** +Procedure copiaza_structura_cursor + Lparameters tcSursa, tcDestinatie + If !Empty(tcSursa) And !Empty(tcDestinatie) + If Used(tcSursa) + Dimension laStructura(1, 18) + If Used(tcDestinatie) + Use In (tcDestinatie) + Endif + Afields(laStructura, tcSursa) + Create Cursor (tcDestinatie) From Array laStructura + Release laStructura + Else + amessagebox("Eroare interna 2 - copiaza structura cursor", 16, "Eroare") + Endif + Else + amessagebox("Eroare interna 1 - copiaza structura cursor", 16, "Eroare") + Endif +Endproc && copiaza_structura_cursor +********************************************************************************************************* +Function citeste_optiune_firma + Lparameters tcOptiune, tlNumeProgram + Local lcCursor, lcVarType, luReturnValue + lcCursor = [crsoptiunefirma] + If Used(lcCursor) + Use In (lcCursor) + Endif + lcSql = [select varvalue,vartype from optiuni where varname = '] + Alltrim(tcOptiune) + ['] + ; + Iif(tlNumeProgram, [ and program = '] + Alltrim(gcNumeProgram) + ['], []) + lnSucces = goExecutor.oExecute(lcSql, lcCursor) + If lnSucces < 0 + amessagebox(goExecutor.cEroare, 16, "Eroare") + luReturnValue = Null + Else + If Reccount(lcCursor) > 0 + Select (lcCursor) + lcVarType = Upper(Alltrim(&lcCursor..Vartype)) + Do Case + Case lcVarType = "CHARACTER" + luReturnValue = Alltrim(&lcCursor..varvalue) + Case lcVarType = "CURRENCY" + luReturnValue = Ntom(Val(&lcCursor..varvalue)) + Case lcVarType = "NUMERIC" + luReturnValue = Val(&lcCursor..varvalue) + Case lcVarType = "DATETIME" + luReturnValue = Ctot(&lcCursor..varvalue) + Case lcVarType = "DATE" + luReturnValue = Ctod(&lcCursor..varvalue) + Case lcVarType = "LOGICAL" + luReturnValue = Iif(Inlist(Upper(Left(&lcCursor..varvalue, 1)), "T", "Y"), .T., .F.) + Otherwise + pcmsgbuff = "Tip de variabila globala invalid!" + pcmsgbuff = pcmsgbuff + Chr(13) + Chr(13) + "Numele variabilei: " + lcvarname + pcmsgbuff = pcmsgbuff + Chr(13) + "Tipul variabilei: " + lcVarType + pcmsgbuff = pcmsgbuff + Chr(13) + Chr(13) + "Contactati suportul tehnic." + = amessagebox(pcmsgbuff, 48) + pcmsgbuff = "" + luReturnValue = Null + Endcase + Else + amessagebox("Nu a fost gasita optiunea '" + tcOptiune + "' !", 16, "Eroare") + luReturnValue = Null + Endif + Use In (lcCursor) + Endif + + Return luReturnValue +Endfunc +********************************************************************************************************* +Procedure debug_dezvoltare + If Messagebox("Porniti debug?", 32 + 4 + 256, "Confirmare") = 6 + Debug + Suspend + Endif +Endproc && debug_dezvoltare +********************************************************************************************************* + + +**************************** inceput nvl2Default ***************************************************** +Procedure nvl2Default + Lparameters tcTableAlias, tcCampuriNull + * updatateaza cursorul si pune o valoare default pe toate coloanele, ; + cu exceptia celor din tcCampuriNull + * tcCampuriNull primeste lista de campuri separate prin ',' care nu vor fi modificate ; + de ex: "camp1,camp2," + + Local lnNrCol, i, lcSql, lctip, lcCampuriNull + + lctip = [] + lcSql = [update ] + tcTableAlias + [ set ] + lcCampuriNull = Iif(Type("tcCampuriNull") = "L", [], tcCampuriNull) + lcCampuriNull = Upper(Nvl(lcCampuriNull, [])) + If Right(lcCampuriNull, 1) # "," And Len(lcCampuriNull) > 0 + lcCampuriNull = lcCampuriNull + [,] + Endif + + Select(tcTableAlias) + lnNrCol = Afields(laCols) + + For i = 1 To lnNrCol + If (laCols(i, 1) + [,]) $ lcCampuriNull + Loop + Endif && daca este in lista, nu il adaugam + + If laCols(i, 2) = "C" Or laCols(i, 2) = "M" Or laCols(i, 2) = "V" + lctip = [''] && character, memo, varchar + Endif + If laCols(i, 2) = "B" Or laCols(i, 2) = "F" Or laCols(i, 2) = "I" Or laCols(i, 2) = "N" + lctip = [0] && double, float, integer, numeric + Endif + If laCols(i, 2) = "L" + lctip = [.f.] && logic + Endif + If laCols(i, 2) = "T" Or laCols(i, 2) = "D" + lctip = [{}] + Endif && date, datetime + + lcSql = lcSql + laCols(i, 1) + [ = NVL(] + laCols(i, 1) + [,] + lctip + [), ] + Endfor + + lcSql = Left(lcSql, Rat(',', lcSql) - 1) + &lcSql + Go Top && nu facea update in xitems pe coloanele xinputmask, filtru de pe ultima linie + +Endproc && nvl2Default ^ +************************************************************************************************* + +Procedure versiune + Lparameters lcvers + + External Array laVers + Local lcVersiune, lnNr + lcVersiune = [] + + lnNr = Alines(laVers, Nvl(lcvers, []), .T., ".") + If lnNr > 0 + For i = 1 To lnNr + laVers(i) = Replicate("0", 3 - Len(Alltrim(Nvl(laVers(i), [])))) + laVers(i) + lcVersiune = lcVersiune + laVers(i) + "." + Endfor + lcVersiune = Left(lcVersiune, Len(lcVersiune) - 1) + Else + lcVersiune = lcvers + Endif + Return lcVersiune + +Endproc && sfarsit versiune ^ +************************************************************************************************* +********************************************************************************************************* +Function sir2array + Lparameters tcSir, taArray, tcSeparator + + Local lcSeparator, lnValues, i, lcValue, luValue, lnPos + + External Array taArray + + If Empty(tcSeparator) + lcSeparator = ';' + Else + lcSeparator = tcSeparator + Endif + + lnValues = Alines(taArray, tcSir, 4, lcSeparator) + + Return lnValues + +Endfunc && sir2array +********************************************************************************************************* +*************************** +Function TooManyInstances(lnInstancesAllowed) + *************************** + #Define GW_CHILD 5 && 0x00000005 + #Define GW_HWNDNEXT 2 && 0x00000002 + #Define SW_MAXIMIZE 3 && 0x00000003 + #Define SW_NORMAL 1 && 0x00000001 + #Define WAIT_OBJECT_0 0 && 0x00000000 + #Define RF_MESAJ 0xA123 + + Local lcUniqueProperty, lcUniqueSemaphore, lnhSemaphore, lnHwnd, llReturn + If Pcount() = 0 + lnInstancesAllowed = 1 && default + Else + lnInstancesAllowed = Max(lnInstancesAllowed, 1) &&At least one + Endif + Do DeclareAPIs + lcUniqueSemaphore = Strtran(Justpath(Sys(16, 0)), "\", "") + *!* lcUniqueSemaphore = "968360BF-C7AD-4B62-A045-0A06D597EF18" + lcUniqueProperty = "E2429959-D873-4733-8182-7A3F14780A27" + &&& + *!* oTypeLib = CreateObject("scriptlet.typelib") + *!* lcUniqueSemaphore = substr(oTypeLib.GUID, 2, 36) + *!* oTypeLib1 = CreateObject("scriptlet.typelib") + *!* lcUniqueProperty = substr(oTypeLib1.GUID, 2, 36) + &&& + lnhSemaphore = CreateSemaphore(0, lnInstancesAllowed, lnInstancesAllowed, lcUniqueSemaphore) + If lnhSemaphore != 0 And WaitForSingleObject(lnhSemaphore, 0) != WAIT_OBJECT_0 + Do DeclareMoreAPIs + llReturn = .T. + lnHwnd = GetWindow(GetDesktopWindow(), GW_CHILD) + Do While lnHwnd != 0 && loop through all windows + If GetProp(lnHwnd, lcUniqueProperty) = 1 && does window have our unique property? + BringWindowToTop(lnHwnd) + *!* modificare v 2.0.23 + If IsIconic(lnHwnd) <> 0 + SendMessage(lnHwnd, RF_MESAJ, 0, 0) + Else + *!* modificare v 2.0.23 ^ + ShowWindow(lnHwnd, SW_NORMAL) + *!* modificare v 2.0.23 + Endif + *!* modificare v 2.0.23 ^ + llReturn = .T. + Exit + Endif + lnHwnd = GetWindow(lnHwnd, GW_HWNDNEXT) + Enddo + CloseHandle(lnHwnd) + CloseHandle(lnhSemaphore) + Clear Dlls "BringWindowToTop", "GetDesktopWindow", ; + "GetProp", "GetWindow", "ShowWindow", ; + "CloseHandle", "SendMessage", "IsIconic" + Else + = SetProp(_vfp.HWnd, lcUniqueProperty, 1) + _Screen.AddProperty("SemaphoreHandle", lnhSemaphore) + llReturn = .F. + Endif + Clear Dlls "CreateSemaphore", "GetLastError", ; + "SetProp" + Return (llReturn) +Endfunc +************************************************************************************************************************* +*************************** +Procedure DeclareAPIs() + *************************** + Declare Integer CloseHandle In Kernel32 Integer hObject + Declare Integer CreateSemaphore In Kernel32 Integer lpSemaphoreAttributes, Integer lInitialCount, Integer lMaximumCount, String lpName + Declare Integer SetProp In User32 Integer HWnd, String lpString, Integer hData + Declare Integer WaitForSingleObject In Kernel32 Integer hHandle, Integer dwMilliseconds +Endproc +************************************************************************************************************************* +*************************** +Procedure DeclareMoreAPIs() + *************************** + Declare Integer BringWindowToTop In Win32API Integer HWnd + Declare Integer GetDesktopWindow In User32 + Declare Integer GetProp In User32 Integer HWnd, String lpString + Declare Integer GetWindow In User32 Integer HWnd, Integer uCmd + Declare Integer ShowWindow In Win32API Integer HWnd, Integer nCmdShow + *!* modificare v 2.0.23 + Declare Integer SendMessage In User32 Integer HWnd, Integer Msg, Integer wParam, Integer Lparam + Declare Integer IsIconic In User32 Integer HWnd + *!* modificare v 2.0.23 ^ +Endproc +************************************************************************************************************************* + +************************************************************************************************** +*!* INTOARCE VALOAREA NOTNULL DACA EXPRESIA NU ESTE NULL SAU VALOAREA NULL DACA EXPRESIA ESTE NULL +************************************************************************************************** +Function nvl2 + Lparameters tcExpression, tuValueIfNotNull, tuValueIfNull + Local luReturn + luReturn = tuValueIfNotNull + + If Isnull(tcExpression) + luReturn = tuValueIfNull + Endif + + Return luReturn +Endfunc && nvl2 +************************************************************************************************************ +Procedure alege_vizualizare_raport + Lparameters tcCursorRaport, tcraport + Private pnButon, pnOptiune + If Reccount(tcCursorRaport) > 0 + pnButon = 1 + Do While pnButon = 1 + pnOptiune = 1 + ofrmaleg = Createobject('frm_aleg_vizualizare') + ofrmaleg.Show(1) + Do Case + Case pnButon <> 1 + Loop + Case pnOptiune = 1 + goExport.export2frx(tcCursorRaport, tcraport) + Case pnOptiune = 2 + goExport.export2xls(tcCursorRaport) + && tcAlias, tcNumeFisier, tcListaColoane, tcFiltru + Endcase + Release ofrmaleg + Enddo + Else + amessagebox("Nu exista inregistrari pentru listare!", 0 + 48, "Atentie") + Endif + Use In (tcCursorRaport) + Release pnButon, pnOptiune +Endproc +************************************************************************************************************ +**************************** +*!* Demonstrates the callback functionality +**************************** +*!* SET LIBRARY TO LOCFILE("vfpcompression.fll") +*!* ZipCallback("MyUnzipCallBack()") && Start Event Handling - Any Function/Procedure/Method (in scope of course) +*!* ?ZipOpen("MyZip.zip", "C:\", .F.) && create zip file +*!* ?ZipFile("C:\MyFile.txt", .F.) && compress file into zip +*!* ?ZipClose() && done zipping +*!* ?UnzipQuick("C:\MyZip.zip", "C:\") && unzip contents of Test.zip to C:\ +*!* ZipCallback("") && Stop Event Handling +*!* SET LIBRARY TO +Function MyUnzipCallBack + Lparameters tnBytesTotal + ***************************** + *!* Variables below are created on the fly + *!* by the FLL when the ZipCallback feature is used + + *!* Depends on the value of nZipEvent + *!* cZipObjectName && Name of Zip, File, or Folder being processed + + *!* Events that fire MyCallback + *!* 0 = Open Zip + *!* 1 = Start Zip/Unzip of File + *!* 2 = Read/Write File (nZipBytes will contain value of bytes read for event) + *!* 3 - End Zip/Unzip of File + *!* 4 - Folder Opened + *!* 5 - Close Zip + If nZipEvent = 2 + *!* Number of Bytes read (Event 3) + If !Empty(m.tnBytesTotal) + Wait Window cZipObjectName + ' ' + Transform(Int(m.nZipBytes / m.tnBytesTotal * 100)) + '% ...' Nowait + Else + Wait Window cZipObjectName + ' ' + Transform(m.nZipBytes) + ' bytes read' Nowait + Endif + Endif +Endfunc && MyUnzipCallBack +************************************************************************************************************ +*** Callback from the vfpconnection FLL - can be used to track operation progress +Procedure MyProgressHandler + Lparameters tcFile + Local lnProgress, lcFile + + lnProgress = 0 + lcFile = Iif(Empty(m.tcFile) Or Type('tcFile') <> 'C', '', m.tcFile) + If m.nConnectTotalBytes > 0 + m.lnProgress = Int(m.nConnectBytesSoFar / m.nConnectTotalBytes * 100) + Endif + + Wait Window m.lcFile + ' ' + Transform(m.lnProgress) + '% ...' Nowait +Endproc && MyProgressHandler +************************************************************************************************************ +Procedure apeleaza_calc + Do Case + Case File('C:\WINDOWS\CALC.EXE') + Run /N C:\Windows\Calc.Exe + Case File('C:\WINDOWS\SYSTEM32\CALC.EXE') + Run /N C:\Windows\SYSTEM32\Calc.Exe + Case File('C:\WINnt\system32\CALC.EXE') + Run /N C:\WINnt\SYSTEM32\Calc.Exe + Otherwise + lcMesaj = 'Aplicatia "Calculator" nu este instalata pe acest sistem!' + amessagebox(lcMesaj, 0 + 48, Iif(!Empty(Nvl(gcNumeProgram, [])), gcNumeProgram, "Atentie")) + Endcase +Endproc +************************************************************************* +Procedure apeleaza_notepad + Do Case + Case File('C:\WINDOWS\NOTEPAD.EXE') + Run /N C:\Windows\NOTEPAD.Exe + Case File('C:\WINnt\system32\NOTEPAD.EXE') + Run /N C:\WINnt\SYSTEM32\NOTEPAD.Exe + Otherwise + lcMesaj = 'Aplicatia "Notepad" nu este instalata pe acest sistem!' + amessagebox(lcMesaj, 0 + 48, Iif(!Empty(Nvl(gcNumeProgram, [])), gcNumeProgram, "Atentie")) + Endcase +Endproc +************************************************************************* +Procedure arata_modificari + Do Form frm_changelog +Endproc +************************************************************************* +Procedure arata_versiune + Do Form frm_about +Endproc +************************************************************************* +Procedure arata_manual + lansare_help_meniu() +Endproc +************************************************************************* + + +Function aInputBox + Lparameters tcPrompt, tcTitle, txDefaultValue, tnLeft, tnTop, ; + tcFormat, tcInputMask, tcPasswordChar + Private pcReturnValue + pcReturnValue = txDefaultValue + Local oInputBox + oInputBox = Createobject("aInputBox", tcPrompt, tcTitle, ; + txDefaultValue, tnLeft, tnTop, ; + tcFormat, tcInputMask, tcPasswordChar) + oInputBox.Show() + Return pcReturnValue +Endfunc && aInputBox + +************************************************** +Define Class aInputBox As Form + + + Height = 113 + Width = 318 + DoCreate = .T. + AutoCenter = .T. + Caption = "Input Box" + ControlBox = .F. + WindowType = 1 + Name = "frmInputBox" + + *-- empty value to return if Cancel is chosen; data type depends on data type of txValueIn + xemptyvalue = .F. + + *-- the default value (if any) + xdefaultvalue = .F. + + *-- the return value + xreturnvalue = .F. + + + Add Object lblinputbox As Label With ; + FontName = "Arial", ; + FontSize = 10, ; + FontCharSet = 238, ; + Alignment = 1, ; + Caption = "Introduceti valoarea ", ; + Height = 20, ; + Left = 6, ; + Top = 26, ; + Width = 190, ; + TabIndex = 1, ; + Name = "lblInputBox" + + + Add Object txtinputbox As TextBox With ; + FontName = "Arial", ; + FontSize = 10, ; + Century = 1, ; + Height = 24, ; + Left = 202, ; + SelectOnEntry = .T., ; + TabIndex = 2, ; + Top = 22, ; + Width = 110, ; + Name = "txtInputBox" + + + Add Object cmdok As CommandButton With ; + Top = 72, ; + Left = 84, ; + Height = 24, ; + Width = 72, ; + Caption = "Confirma", ; + FontCharSet = 238, ; + Default = .T., ; + TabIndex = 3, ; + Name = "cmdOK" + + + Add Object cmdcancel As CommandButton With ; + Top = 72, ; + Left = 172, ; + Height = 24, ; + Width = 72, ; + Cancel = .T., ; + Caption = "Renunta", ; + FontCharSet = 238, ; + TabIndex = 4, ; + Name = "cmdCancel" + + + Procedure Unload + With Thisform + If Type(".xReturnValue") = "C" + .xreturnvalue = Rtrim( .xreturnvalue) + Endif + pcReturnValue = .xreturnvalue + Endwith + Endproc + + + Procedure Init + Lparameters tcPrompt, tcTitle, txDefaultValue, tnLeft, tnTop, ; + tcFormat, tcInputMask, tcPasswordChar + If Type("tcPrompt") <> "C" + tcPrompt = "Introduceti valoarea " + Endif + If Type("tcTitle") <> "C" + tcTitle = "Input Box" + Endif + If !( Type("txDefaultValue") $ "CDNY") + * Valid input data types are C, D, N, and Y + txDefaultValue = "" && default to character data type + Endif + If Type("tcFormat") <> "C" + tcFormat = "" + Endif + If Type("tcInputMask") <> "C" + tcInputMask = "" + Endif + If Type("tcPasswordChar") <> "C" + tcPasswordChar = "" + Endif + If Len( Alltrim( tcPasswordChar)) > 1 + tcPasswordChar = Left( tcPasswordChar, 1) + Endif + Local llAutoCenter + If Pcount() < 5 && Top and Left parameters were not passed + tnLeft = 0 + tnTop = 0 + Else && Top and left parameters were passed but may not be numeric + If Type("tnTop") = "N" And Type("tnLeft") = "N" && both are numeric + llAutoCenter = .F. + Else && one or both is not numeric, so AutoCenter the form + tnLeft = 0 + tnTop = 0 + llAutoCenter = .T. + Endif + Endif + + With Thisform + .lblinputbox.Caption = Alltrim( tcPrompt) + .Caption = Alltrim( tcTitle) + .xdefaultvalue = txDefaultValue + .xreturnvalue = .xdefaultvalue + .txtinputbox.Value = .xdefaultvalue + .txtinputbox.Format = Alltrim( tcFormat) + .txtinputbox.InputMask = Alltrim( tcInputMask) + .txtinputbox.PasswordChar = tcPasswordChar + .Top = tnTop + .Left = tnLeft + .AutoCenter = llAutoCenter && Set AutoCenter last so it overrides Top and Left if .T. + + Do Case + Case Type("txDefaultValue") = "D" + .xemptyvalue = {} + Case Type("txDefaultValue") = "N" + .xemptyvalue = 0 + Case Type("txDefaultValue") = "Y" + .xemptyvalue = $ 0 + Otherwise + .xemptyvalue = "" + Endcase + Endwith + Endproc + + + Procedure cmdok.Click + With Thisform + .xreturnvalue = .txtinputbox.Value + .Release() + Endwith + Endproc + + + Procedure cmdcancel.Click + * + * If Cancel was chosen, return the empty value of the correct data type. + * + With Thisform + .xreturnvalue = .xemptyvalue + .Release() + Endwith + Endproc + + +Enddefine +* +*-- EndDefine: aInputBox +************************************************** + +************************************************** +*** intoarce ziua curenta daca luna contabila este egala cu luna calendaristica +*** intoarce ultima zi din luna contabila daca luna contabila nu este egala cu luna calendaristica +************************************************** +Function GetDataIreg + Local ldData + ldData = Ttod(Get_Ora()) + If Month(ldData) <> gnLuna Or Year(ldData) <> gnAn + ldData = ULTIMAZI() + Endif + Return m.ldData +Endfunc && GetDataIreg +************************************************** + +************************************************** +*** primeste tnNrluni = an*12+luna +*** intoarce anul si luna ca parametri prin referinta +*** ex: NrLuni2AnLuna(lnNrLuni, @lnAn, @lnLuna) +************************************************** +Procedure NrLuni2AnLuna + Lparameters tnNrLuni, tnAn, tnLuna + + tnLuna = INT(Mod(m.tnNrLuni, 12)) + tnAn = Int(m.tnNrLuni / 12) + If tnLuna = 0 + tnLuna = 12 + tnAn = m.tnAn - 1 + Endif +Endproc && NrLuni2AnLuna + +************************************************** +*** salveaza un cursor intr-un fisier XML in gcTempPath +*** intoarce calea fisierului xml daca s-a salvat cu succes +************************************************** +Function SaveCursor2XML + Lparameters tcAlias, tcXMLName + *** tcAlias: alias-ul cursorului (ex: tact) + *** tcXMLName: numele fisierului XML fara cale si extensie (ex: notafarapredefinire) + Local lcAlias, lcXMLFile, lcXMLName, lnBytes + + lcAlias = Iif(Empty(tcAlias), Alias(), m.tcAlias) + lcXMLName = Iif(Empty(tcXMLName), m.lcAlias, m.tcXMLName) + lcXMLFile = gcTempPath + Juststem(lcXMLName) + '.xml' + lnBytes = 0 + If Used(m.lcAlias) + lnBytes = Cursortoxml(m.lcAlias, m.lcXMLFile, 1, 2 + 512, 0, "1") + Endif + Return Iif(m.lnBytes > 0, m.lcXMLFile, '') +Endfunc && SaveCursor2XML + +************************************************** +*** transforma un xml salvat anterior in gcTempPath intr-un cursor +*** intoarce numele cursorului creat (alias), daca s-a gasit fisierul XML +************************************************** +Function RestoreXML2Cursor + Lparameters tcAlias, tcXMLName + *** tcAlias: alias-ul cursorului (ex: tact) + *** tcXMLName: numele fisierului XML fara cale si extensie (ex: notafarapredefinire) + Local lcAlias, lcXMLFile, lcXMLName, lnBytes + + lcAlias = Iif(Empty(tcAlias), Sys(2015), m.tcAlias) + lcXMLName = Iif(Empty(tcXMLName), m.lcAlias, m.tcXMLName) + lcXMLFile = gcTempPath + Juststem(lcXMLName) + '.xml' + If File(m.lcXMLFile) + Xmltocursor(m.lcXMLFile, m.lcAlias, 512) + Endif + + Return Iif(Used(m.lcAlias), m.lcAlias, '') +Endfunc && RestoreXML2Cursor + +************************************************** +*** verifica daca exista fisierul xml salvat prin SaveCursor2XML +*** intoarce +************************************************** +Function ExistsXML + Lparameters tcXMLName + *** tcXMLName: numele fisierului XML fara cale si extensie (ex: notafarapredefinire) + Local lcXMLFile, lcXMLName + + lcXMLName = Iif(Empty(tcXMLName), m.lcAlias, m.tcXMLName) + lcXMLFile = gcTempPath + Juststem(lcXMLName) + '.xml' + + Return Iif(File(m.lcXMLFile), m.lcXMLFile, '') +Endfunc && ExistsXML + +************************************************** +*** verifica daca exista fisierul xml salvat prin SaveCursor2XML +*** intoarce +************************************************** +Define Class BackupXML As Custom + + cBackupSet = "" && numele backupset-ului (un fisier xml in care se salveaza informatii despre fisierele xml, variabile etc. pentru acel backupset) + cBackupSetPath = "" && calea unde se salveaza backupset-ul (gcTempPath) + cBackupSetFile = "" && calea completa a fisierului backupset gcTempPath\backupset.xml + cBackupSetAlias = "" + lBackupSetExists = .F. && Se initializeaza in Init-ul clasei si la salvarea backupset-ului + lBackupSetLoaded = .F. + + Procedure Init + Lparameters tcBackupSet, tcBackupPath + Local lcBackupPath, lcBackupSet + + lcBackupSet = m.tcBackupSet + If Type('tcBackupPath') <> 'C' Or Empty(tcBackupPath) + lcBackupPath = m.gcTempPath + Else + lcBackupPath = m.tcBackupPath + Endif + If !(Empty(m.lcBackupSet) Or Empty(m.lcBackupPath)) + This.cBackupSetFile = Addbs(m.lcBackupPath) + Juststem(m.lcBackupSet) + '.xml' + Endif + Endproc && Init + + Procedure cBackupSetFile_ASSIGN + Lparameters tcBackupSetFile + + This.cBackupSetFile = m.tcBackupSetFile + If !Empty(m.tcBackupSetFile) + This.cBackupSetPath = Addbs(Justpath(m.tcBackupSetFile)) + This.cBackupSet = Juststem(m.tcBackupSetFile) + This.lBackupSetExists = File(This.cBackupSetFile) + This.LoadBackupSet() + Endif + Endproc && cBackupSetFile_ASSIGN + + Protected Procedure LoadBackupSet + + Local lcBackupSetAlias, lcBackupSetFile, lcSelect + lcSelect = Select() + lcBackupSetFile = This.cBackupSetFile + lcBackupSetAlias = This.cBackupSet + If File(m.lcBackupSetFile) + Xmltocursor(m.lcBackupSetFile, m.lcBackupSetAlias, 512) + *!* modificare ROACONT v 2.2.15 : pentru fisierele care aveau structura type/name/filename + If Type(lcBackupSetAlias + ".filename") <> "U" + Alter Table &lcBackupSetAlias Add Column Value M Null + Alter Table &lcBackupSetAlias Add Column valuetype C + Replace Value With filename All + Replace valuetype With "" All + Alter Table &lcBackupSetAlias Drop Column filename + Endif + *!* modificare ROACONT v 2.2.15 ^ + Else + Create Cursor &lcBackupSetAlias (Type v(20), Name v(100), Value M Null, valuetype C) + Endif + This.lBackupSetLoaded = Used(m.lcBackupSetAlias) + Select (m.lcSelect) + Endproc && LoadBackupSet + ************************************************** + *** + ************************************************** + Function ReadValue + Lparameters tcNumeVariabila + Local lcSelect, lcValue, lcValueType, luValue + lcSelect = Select() + Select (This.cBackupSet) + Locate For Alltrim(Type) = 'VARIABLE' And Upper(Alltrim(Name)) = Upper(Alltrim(tcNumeVariabila)) + If Found() + lcValue = Value + lcValueType = Upper(Alltrim(valuetype)) + Do Case + Case lcValueType $ "CM" + luValue = m.lcValue + Case lcValueType $ "NIF" + luValue = Val(m.lcValue) + Case lcValueType = "T" + luValue = Ctot(m.lcValue) + Case lcValueType = "D" + luValue = Ctod(m.lcValue) + Case lcValueType = "L" + luValue = Iif(m.lcValue = "1" Or Upper(m.lcValue) = "T" Or Upper(m.lcValue) = '.T.' Or Upper(m.lcValue) = 'YES', .T., .F.) + Otherwise + luValue = m.lcValue + Endcase + Else + luValue = Null + Endif + Select (lcSelect) + Return luValue + Endfunc + + ************************************************** + *** intoarce .T. daca exista fisierul backupset xml + ************************************************** + Function ExistsBackupSet + Return This.lBackupSetExists + Endfunc && ExistsBackupSet + + + ************************************************** + *** deschide backupset-ul si creeaza cursoarele si variabilele din definitia lui + *** intoarce .T. daca exista fisierul backupset + ************************************************** + Function RestoreBackupSet + Lparameters tcBackupSetFile + + *** tcBackupSetFile: calea completa a fisierului backupset XML, inclusiv extensie + Local lcBackupSetFile, llRestored, lcSelect + Local lcAlias, lcFile, loRec + Local lcName, lcType, lcValue, lcValueType, lcVariable, luValue + llRestored = .F. + lcSelect = Select() + + If !Empty(m.tcBackupSetFile) + This.cBackupSetFile = tcBackupSetFile + Endif + If !This.lBackupSetLoaded + Return m.llRestored + Endif + lcBackupSetFile = This.cBackupSetFile + + Select (This.cBackupSet) + Scan + Scatter Name loRec Memo + lcType = Upper(Alltrim(loRec.Type)) + lcName = loRec.Name + lcValue = loRec.Value + lcValueType = Upper(Alltrim(loRec.valuetype)) + + Do Case + *** recreare cursoare din xml-uri + Case m.lcType = 'TABLE' + lcFile = Addbs(Justpath(lcBackupSetFile)) + Juststem(Alltrim(m.lcValue)) + '.xml' + lcAlias = Alltrim(m.lcName) + If File(m.lcFile) + Xmltocursor(m.lcFile, m.lcAlias, 512) + Endif + + *** reinitializare variabile + Case loRec.Type = 'VARIABLE' + lcVariable = lcName + Do Case + Case lcValueType $ "CM" + luValue = m.lcValue + Case lcValueType $ "NIF" + luValue = Val(m.lcValue) + Case lcValueType = "T" + luValue = Ctot(m.lcValue) + Case lcValueType = "D" + luValue = Ctod(m.lcValue) + Case lcValueType = "L" + luValue = Iif(m.lcValue = "1" Or Upper(m.lcValue) = "T" Or Upper(m.lcValue) = '.T.' Or Upper(m.lcValue) = 'YES', .T., .F.) + Otherwise + luValue = m.lcValue + Endcase + &lcVariable = luValue && pcText = "abc" + Endcase + Endscan && m.lcBackupSetAlias + + llRestored = .T. + Select(m.lcSelect) + Return m.llRestored + Endfunc && RestoreBackupSet + + *********************************** + *** Saves all the private variables in the parameter list in the BackupSet + *********************************** + Procedure SavePrivateVariables + Lparameters tcPrivateVariables + + lnVariables = Getwordcount(m.tcPrivateVariables, ",") + For lnVariable = 1 To m.lnVariables + lcVariable = Alltrim(Getwordnum(m.tcPrivateVariables, m.lnVariable, ",")) + If !Empty(m.lcVariable) + This.SaveBackupSet(m.lcVariable, "VARIABLE", &lcVariable) + Endif + Endfor + Endproc && SavePrivateVariables + + ************************************************** + *** salveaza un cursor sau toate cursoarele din definitia backupset-ului in fisiere XML in gcTempPath + *** intoarce calea fisierului xml daca s-a salvat cu succes + ************************************************** + Procedure SaveBackupSet + Lparameters tcName, tcType, tuValue + *** tcName: numele cursorului sau variabilei (ex: crsAct, pcText) Daca este gol, se salveaza toate alias-urile + *** daca este completat, se adauga in definitia backupset-ului + *** tcType: TABLE/VARIABLE + *** tuValue: (optional) valoarea variabilei. Valoarea se salveaza direct in xml definitie backupset + *** tcValueType: (optional) tipul variabilei (C/N/D/T) pentru This.RestoreBackupset + + Local lcFile, lcName, lcType, lcWhere, llSaved, lnBytes, loRec, lnRecno, lcFilter + + lcName = "" + llSaved = .F. + If !This.lBackupSetLoaded + Return m.llSaved + Endif + If !Empty(tcName) + lcName = Alltrim(Transform(m.tcName)) + lcType = Iif(!Empty(m.tcType), m.tcType, "TABLE") + This.UpdateBackupSet(m.lcName, m.lcType, m.tuValue) && variabilele se salveaza direct in definitia backupset-ului + Endif + + Select (This.cBackupSet) + lcWhere = [.T.] + If !Empty(m.lcName) + lcWhere = [name = "] + m.lcName + ["] + Endif + + *** SALVARE CURSOARE IN XML + Scan For &lcWhere + Scatter Name loRec Memo + lcFile = Addbs(This.cBackupSetPath) + Alltrim(loRec.Value) && (c:\temp\backupsettest_actactan.xml) + lcName = Alltrim(loRec.Name) + + Do Case + Case loRec.Type = 'TABLE' + If Used(m.lcName) + lnRecno = Iif(Eof(m.lcName), 0, Recno(m.lcName)) + lcFilter = Filter(m.lcName) + Set Filter To In (m.lcName) + lnBytes = Cursortoxml(m.lcName, m.lcFile, 1, 2 + 512, 0, "1") + If !Empty(m.lcFilter) + lcFilterExpr = "set filter to " + m.lcFilter + " in " + m.lcName + &lcFilterExpr + Endif + If m.lnRecno > 0 + Goto m.lnRecno In (m.lcName) + Endif + Endif + Otherwise + *** + Endcase + Endscan && m.lcBackupSetAlias + + llSaved = .T. + + Return m.llSaved + Endfunc && SaveBackupSet + + Procedure DeleteBackupSet + Local lcFile, loRec, lcSelect + lcSelect = Select() + + If !File(This.cBackupSetFile) + Return + Endif + + *** sterg fisierele componenta backupset + Select (This.cBackupSet) + Scan For Upper(Alltrim(Type)) = 'TABLE' + Scatter Name loRec Memo + lcFile = Addbs(This.cBackupSetPath) + Alltrim(loRec.Value) && (c:\temp\backupsettest_actactan.xml) + + If File(m.lcFile) + Delete File (m.lcFile) + Endif + Endscan + + *** sterg inregistrarile din cursorul backupset + Delete All + + *** sterg fisierul backupset + Delete File (This.cBackupSetFile) + + Endproc && DeleteBackupSet + + + ************************************************************************* + *** actualizeaza definitia backupset-ului cu tabelele sau variabilele noi + *** UpdateBackupSet("crsAct", "TABLE") + *** UpdateBackupSet("pcText", "VARIABLE", m.pcText, "C") + ************************************************************************* + Procedure UpdateBackupSet + Lparameters tcName, tcType, tuValue + *** tcName: numele cursorului sau variabilei (ex: crsAct, pcText) + *** tcType: TABLE/VARIABLE + *** tuValue: (optional) valoarea variabilei. Valoarea se salveaza direct in xml definitie backupset + + Local lcFileName, lcName, lcType, lnBytes, lcSelect, lcValue, lcValueType + + If !This.lBackupSetLoaded + Return .F. + Endif + + lcSelect = Select() + + lcName = Iif(!Empty(m.tcName), Alltrim(Transform(m.tcName)), "") + lcType = Iif(!Empty(m.tcType), m.tcType, "TABLE") + lcValue = Transform(m.tuValue) + lcValueType = Iif(Pcount() >= 3, Type('tuValue'), "") + + Do Case + Case m.lcType = "TABLE" + lcValue = This.cBackupSet + "_" + m.lcName + ".xml" + Otherwise + * + Endcase + + If !Empty(m.lcName) + Select (This.cBackupSet) + Locate For Name = Alltrim(tcName) + If !Found() + Insert Into (This.cBackupSet) (Type, Name, Value, valuetype) Values (m.lcType, m.lcName, m.lcValue, m.lcValueType) + Else + Replace Type With m.lcType, Value With m.lcValue, valuetype With m.lcValueType + Endif + lnBytes = Cursortoxml(This.cBackupSet, This.cBackupSetFile, 1, 2 + 512, 0, "1") + Endif + Select (m.lcSelect) + + Endproc && UpdateBackupSet + + Procedure Destroy + Local lcSelect + + lcSelect = Select() + Use In (Select(This.cBackupSet)) + Select (m.lcSelect) + Endproc && Destroy + +Enddefine && BackupXML + +Procedure romfast_suport + Local lcFile, lcPath, llOpen + lcFile = "romfast_suport.exe" + lcPath = Addbs(m.gcBasePath) + llOpen = .T. + + Return DownloadSupportFile(m.lcFile, m.lcPath, m.llOpen) +Endproc && romfast_suport + +Procedure DownloadSupportFile + Lparameters tcFile, tcDownloadPath, tlOpen, tlNewVersion + + *** tlOpen: .T. daca se doreste deschiderea fisierului descarcat + *** tlNewVersion: OUT - .T. daca exista o versiune noua pe server + + Local loUpdater As "Updater" + Local lcCheckSum, lcDownloadFile, lcDownloadPath, lcErrorMessage, lcFile, lcProgressProcedure, lcURL + Local llCheckVersion, llOpen, llReturn, loUpdateRec, llError + Local lcDownloadFileTemp + llError = .F. + + Wait Window "Se cauta versiuni noi ale fisierului " + Justfname(m.tcFile) + " pe romfast.ro" Nowait + + lcFile = Alltrim(m.tcFile) && "romfast_suport.exe" + lcDownloadPath = Addbs(m.tcDownloadPath) + llOpen = m.tlOpen + lcDownloadFile = m.lcDownloadPath + m.lcFile && d:\roa\romfast_suport.exe + llCheckVersion = .F. + + loUpdater = Createobject("Updater", "", m.llCheckVersion) + If Type("loUpdater") = "O" + loUpdateRec = loUpdater.CheckNewVersion(m.lcFile, .T.) + tlNewVersion = loUpdateRec.NewVersion + If loUpdateRec.NewVersion Or !File(m.lcDownloadFile) + lcURL = Alltrim(loUpdateRec.fisier) + lcCheckSum = Alltrim(loUpdateRec.checksum) + lcProgressProcedure = "" + lcErrorMessage = "" + + lcDownloadFileTemp = loUpdater.cDownloadPath + m.lcFile && d:\contafin\_update\romfast_suport.exe + llReturn = loUpdater.DownloadFile(m.lcURL, m.lcDownloadFileTemp, m.lcProgressProcedure, @m.lcErrorMessage, m.lcCheckSum) + If !loUpdater.lError + loUpdater.UpdateVersion(m.loUpdateRec) + If File(m.lcDownloadFileTemp) + Copy File (m.lcDownloadFileTemp) To (m.lcDownloadFile) + Delete File (m.lcDownloadFileTemp) + Endif + Endif + If !Empty(m.lcErrorMessage) + amessagebox(m.lcErrorMessage, 0 + 48, _Screen.Caption) + Endif + Endif + Else + llReturn = .F. + Endif + + If m.llOpen And File(m.lcDownloadFile) + OPEN_DEFAULT_APP(m.lcDownloadFile) + Endif + + Return m.llReturn +Endproc && DownloadSupportFile + + + +Define Class Updater As Custom + cLicenta = "" && pentru CONTAFIN + cErrorMessage = "" + lError = .F. + cDownloadPath = "" + cFileVersionUrl = "" + cDownloadFileVersion = "" + + Procedure Init + Lparameters tcFileVersionUrl, tlCheckVersion, tcVersionType + + *** tcFileVersionUrl: URL fisier versiuni.xml (DEFAULT http://...contafin.xml) + *** tlCheckVersion: .T. = se verifica versiunile programelor din versiuni.xml + *** tcVersionType: CONTAFIN (DEFAULT); SUPORT + + Local lcCheie, lcConnectTimeout, lcDownloadFileVersion, lcFileLicenta, lcFileVersionUrl + Local lcLibraryPath, lcLicenta, lcResponseTimeout, lcSettingsFile, lcVersionFileName, lcVersionType + Local llReturn, loEx + lcLicenta = "" + lcFileLicenta = m.gcBasePath + 'licente.cnt' + If File(m.lcFileLicenta) + m.lcLicenta = Alltrim(Filetostr(m.lcFileLicenta)) + This.cLicenta = m.lcLicenta + Endif + + + lcLibraryPath = m.gcBasePath + Iif("ROA" $ Upper(gcBasePath), "COMUNROA", "COMUNCONTAFIN") + "\vfpconnection.fll" && CONTAFIN(ROA)\COMUNCONTAFIN(COMUNROA)\vfpconnection.fll + lcSettingsFile = m.gcBasePath + "settings.ini" && CONTAFIN(ROA)\settings.ini + + If File(m.lcLibraryPath) + Try + If !'vfpconnection' $ Set("Library") + Set Library To (lcLibraryPath) Additive + Endif + lcConnectTimeout = goAPI.GetProfileString(m.lcSettingsFile, "update", "ConnectTimeout") && timeout conectare in secunde / default 20 + lcConnectTimeout = Nvl(lcConnectTimeout, '') + lcResponseTimeout = goAPI.GetProfileString(m.lcSettingsFile, "update", "ResponseTimeout") && timeout raspuns in secunde / default 60 + lcResponseTimeout = Nvl(lcResponseTimeout, '') + If Empty(m.lcConnectTimeout) + goAPI.WriteProfileString(m.lcSettingsFile, "update", "ConnectTimeout", "20") && frecventa verificarii + lcConnectTimeout = "20" + Endif + If Empty(m.lcResponseTimeout) + goAPI.WriteProfileString(m.lcSettingsFile, "update", "ResponseTimeout", "60") && frecventa verificarii + lcResponseTimeout = "60" + Endif + + SetConnectTimeout(Val(lcConnectTimeout)) && Default is 10 seconds + SetResponseTimeout(Val(lcResponseTimeout)) && Default is 10 seconds + + + This.cDownloadPath = m.gcBasePath + '_UPDATE\' && D:\CONTAFIN\_UPDATE\ + + If !Directory(This.cDownloadPath) + Md (This.cDownloadPath) + Endif + + lcDownloadFileVersion = This.cDownloadPath + "versiune.xml" + This.cDownloadFileVersion = lcDownloadFileVersion + + lcLicenta = "" + lcFileLicenta = m.gcBasePath + 'licente.cnt' + If File(m.lcFileLicenta) + m.lcLicenta = Alltrim(Filetostr(m.lcFileLicenta)) + This.cLicenta = m.lcLicenta + Endif + + ********************************************************** + *** Citesc fileversionurl din CONTAFIN(ROA)\SETTINGS.INI + ********************************************************** + *** FileVersionUrl = http://83.103.197.79:3002/contafinupdate/default.aspx/update/download/|licenta|/contafin_local.xml + *** FileVersionUrl = http://10.0.20.122:81/contafinupdate/default.aspx/update/download/|licenta|/contafin_local.xml + lcVersionType = Upper(Alltrim(Transform(m.tcVersionType))) + lcCheie = Iif(lcVersionType = 'CONTAFIN', 'fileversionurl', 'suportversionurl') + lcVersionFileName = Iif(lcVersionType = 'CONTAFIN', 'contafin', 'suport') + + If !Empty(m.tcFileVersionUrl) + lcFileVersionUrl = m.tcFileVersionUrl + Else + lcFileVersionUrl = goAPI.GetProfileString(m.lcSettingsFile, [update], m.lcCheie) + lcFileVersionUrl = Nvl(m.lcFileVersionUrl, '') + If Empty(m.lcFileVersionUrl) + *!* 13.05.2014 cand s-a introdus taxa la dyndns, am pus ip-ul fix + *!* lcFileVersionUrl = [http://] + IIF(_vfp.StartMode = 0, [10.0.20.122:81] , [romfast.dyndns.biz:3002]) + [/contafinupdate/default.aspx/update/download/|licenta|/] + ; + *!* m.lcVersionFileName + [.xml] + lcFileVersionUrl = [http://] + Iif(_vfp.StartMode = 0, [10.0.20.122:81], [83.103.197.79:3002]) + [/contafinupdate/default.aspx/update/download/|licenta|/] + ; + M.lcVersionFileName + [.xml] + *!* 13.05.2014 ^ + goAPI.WriteProfileString(m.lcSettingsFile, [update], m.lcCheie, m.lcFileVersionUrl ) + Else + *!* 13.05.2014 cand s-a introdus taxa la dyndns, am pus ip-ul fix + + If [romfast.dyndns.biz] $ lcFileVersionUrl + lcFileVersionUrl = Strtran(lcFileVersionUrl, [romfast.dyndns.biz], [83.103.197.79]) + goAPI.WriteProfileString(m.lcSettingsFile, [update], m.lcCheie, m.lcFileVersionUrl ) + Endif + *!* 13.05.2014 ^ + + Endif + Endif + This.cFileVersionUrl = m.lcFileVersionUrl + + *!* DESCARCARE FISIER VERSIUNE + If File(m.lcDownloadFileVersion) + Delete File (m.lcDownloadFileVersion) + Endif + llReturn = This.DownloadVersionFile(m.tlCheckVersion) + + Catch To loEx + This.lError = .T. + This.cErrorMessage = loEx.Message + amessagebox(This.cErrorMessage, 0 + 16, _Screen.Caption) + Endtry + Else + This.lError = .T. + This.cErrorMessage = "Nu exista fisierul " + m.lcLibraryPath + "!" + amessagebox(This.cErrorMessage, 0 + 16, _Screen.Caption) + Endif + + Endproc && Init + + *!* verificare versiune diferita + Procedure CheckNewVersion + Lparameters tcAppName, tlCheckVersion + + Local lcSelect, lcAppName + Local loReturn + lcSelect = Select() + lcAppName = Upper(Juststem(Alltrim(m.tcAppName))) + + If Used('crsXML') + If m.tlCheckVersion + This.CheckVersion(m.lcAppName) + Endif + Select crsXMl + Locate For Upper(Alltrim(Program)) = lcAppName + If Found() + Scatter Name loReturn + AddProperty(loReturn, "newversion", Alltrim(versiune) <> Alltrim(versiuneact)) + Else + Scatter Name loReturn Blank + AddProperty(loReturn, "newversion", .F.) + Endif + Else + loReturn = Createobject("custom") + loReturn.AddProperty("newversion", .F.) + Endif + + Select (lcSelect) + + Return m.loReturn + Endproc && CheckNewVersion + + Procedure DownloadVersionFile + Lparameters tlCheckVersion + + Local llReturn, lcFileVersionUrl, lcDownloadFileVersion, lcTextXML + Local loEx As Exception + + lcFileVersionUrl = This.cFileVersionUrl + lcDownloadFileVersion = This.cDownloadFileVersion + + ****** DOWNLOAD FISIER CU ULTIMELE VERSIUNI ALE PROGRAMELOR EX:CONTAFIN.XML ******** ^ + llReturn = This.DownloadFile(m.lcFileVersionUrl, m.lcDownloadFileVersion) + llReturn = m.llReturn And File(m.lcDownloadFileVersion) + If This.lError + Messagebox(This.cErrorMessage, 0 + 64, _Screen.Caption) + Endif + ****** DOWNLOAD FISIER CU ULTIMELE VERSIUNI ALE PROGRAMELOR EX:CONTAFIN.XML ******** ^ + Create Cursor crsXMl (Program C(200), fisier C(200), Log C(200), checksum C(100), versiune C(200), versiuneact C(100), ales N(1), Terminat N(1)) + If m.llReturn + lcTextXML = Filetostr(m.lcDownloadFileVersion) + If Left(m.lcTextXML, 5) <> '= 4 + lcVersiune = aFiles(4) + Endif + Replace versiuneact With m.lcVersiune + Else + && verific daca exista versiune.txt (in cazul _alfa care nu are executabil) + If File(lcFileVersiuneText) + lcVersiune = Alltrim(Filetostr(m.lcFileVersiuneText)) + Replace versiuneact With m.lcVersiune + Else + lcVersiune = goAPI.GetProfileString(m.lcSettingsFile, [versiuni], m.lcProgram) + Replace versiuneact With Nvl(m.lcVersiune, '') + Endif + Endif + Endscan + *!* scanez cursorul cu ultimele versiuni ale programelor ^ + Select (m.lcSelect) + Endproc && CheckVersion + + Procedure UpdateVersion + Lparameters toUpdateRec + If Type('toUpdateRec') = 'O' And Type('toUpdateRec.versiune') <> 'U' + lcProgram = Alltrim(toUpdateRec.Program) + lcVersiune = Alltrim(toUpdateRec.versiune) + lcSettingsFile = m.gcBasePath + "settings.ini" && D:\CONTAFIN\settings.ini + + goAPI.WriteProfileString(m.lcSettingsFile, [versiuni], m.lcProgram, m.lcVersiune) + Endif + Endproc && UpdateVersion + + + Procedure DownloadFile + Lparameters tcUrl, tcDownloadFile, tcProgressProcedure, tcErrorMessage, tcCheckSum + Local lcURL, llReturn, lcDownloadFile, lcProgressProcedure, lcText, lcCheckSum, llDownload + Local lcCheckSumFile + + lcText = 'Nu s-a putut actualiza fisierul ' + Justfname(m.tcDownloadFile) + ' de pe serverul ROMFAST. Verificati conexiunea internet si/sau setarile de actualizare!' + If Empty(tcCheckSum) Or Type('tcCheckSum') <> 'C' + lcCheckSum = "" + Else + lcCheckSum = tcCheckSum + Endif + + goLog.WriteLog("DOWNLOAD START; " + Alltrim(m.tcUrl) + " | " + Alltrim(m.tcDownloadFile), Program()) + + lcURL = Alltrim(m.tcUrl) + lcURL = This.ReplaceLicentaTag(m.lcURL) + lcDownloadFile = Alltrim(m.tcDownloadFile) + lcProgressProcedure = Iif(Type('tcProgressProcedure') <> 'C', '', tcProgressProcedure) + + && daca am checksumul ca parametru, exista fisierul si checksumurile sunt egale nu mai downloadez + llDownload = .T. + If File(m.lcDownloadFile) && verific daca exista fisierul deja downloadat TODO: trebuie verificat hashul + If !Empty(m.lcCheckSum) + lcCheckSumFile = This.CalculateCheckSum(m.lcDownloadFile) + If m.lcCheckSum == m.lcCheckSumFile && checksumurile sunt egale + llDownload = .F. + goLog.WriteLog("FISIERUL " + Alltrim(m.tcDownloadFile) + " EXISTA DEJA IN DIRECTORUL DE DOWNLOAD SI ARE ACELASI CHECKSUM CA CEL DE PE SERVER.", Program()) + Else + goLog.WriteLog("FISIERUL " + Alltrim(m.tcDownloadFile) + " EXISTA DEJA IN DIRECTORUL DE DOWNLOAD, DAR NU ARE ACELASI CHECKSUM CA CEL DE PE SERVER.", Program()) + Endif + Endif + Endif + + llReturn = .F. + Do Case + Case !llDownload + llReturn = .T. + + Case Upper(Left(lcURL, 4)) = "FTP:" + m.llReturn = FTPGet(lcURL, m.lcDownloadFile, lcProgressProcedure) + + Case Upper(Left(lcURL, 5)) = "HTTP:" OR Upper(Left(lcURL, 6)) = "HTTPS:" + m.llReturn = HTTPDownloadFile(lcURL, m.lcDownloadFile) + + Otherwise + If Upper(Left(lcURL, 7)) != "FILE://" + lcURL = "File://" + lcURL + Endif + m.llReturn = FileGet(lcURL, m.lcDownloadFile, lcProgressProcedure) + + Endcase + + *!* verific ca exista fisierul + llReturn = m.llReturn And File(m.lcDownloadFile) + + *!* verific continutul fisierului + If m.llReturn + lcText = Filetostr(m.lcDownloadFile) + llReturn = Left(Lower(m.lcText), 3) <> 'err' And Left(Lower(m.lcText), 6) <> '' + Endif + + *!* verific checksum daca fisierul a fost downloadat + If llReturn And llDownload And !Empty(lcCheckSum) + lcCheckSumFile = This.CalculateCheckSum(m.lcDownloadFile) + If m.lcCheckSum <> m.lcCheckSumFile + m.lcText = 'Checksumul fisierului ' + m.lcDownloadFile + ' nu corespunde cu checksumul fisierului de pe server.' + llReturn = .F. + Endif + Endif + + If !llReturn + tcErrorMessage = Left(m.lcText, 100) + This.cErrorMessage = tcErrorMessage + This.lError = .T. + Else + This.cErrorMessage = "" + This.lError = .F. + Endif + + + goLog.WriteLog("DOWNLOAD END; " + + Alltrim(m.tcUrl) + " | " + Alltrim(m.tcDownloadFile) + Iif(m.llReturn, " SUCCES", " " + Left(lcText, 100) + " EROARE"), Program()) + + Return m.llReturn + + Endproc && DownloadFile + + *!* + *!* UPDATE STATUS FORMULAR + *!* APELAT DIN THIS.UPDATEFILE + *!* + Procedure UpdateStatus + Lparameters tcStatusVariable, tcStatus + Local lcStatusVariable, lcStatus, lcUpdateStatus + + lcStatusVariable = Iif(!Empty(tcStatusVariable) And Type('tcStatusVariable') = 'C', tcStatusVariable, '') + lcStatus = Iif(!Empty(tcStatus) And Type('tcStatus') = 'C', tcStatus, '') + + If !Empty(lcStatusVariable) + lcUpdateStatus = lcStatusVariable + [ = "] + lcStatus + ["] + &lcUpdateStatus + If Right(Upper(lcStatusVariable), 8) = '.CAPTION' + lcStatusObject = Left(lcStatusVariable, Len(lcStatusVariable) - 8) + loStatusObject = Evaluate(lcStatusObject) + If Pemstatus(loStatusObject, "refresh", 5) + loStatusObject.Refresh() + Endif + Endif + Endif + + Endproc && UpdateStatus + + Procedure ProgressHandler + Lparameters tcFile + Local lnProgress, lcFile + + lnProgress = 0 + lcFile = Iif(Empty(m.tcFile) Or Type('tcFile') <> 'C', '', m.tcFile) + If m.nConnectTotalBytes > 0 + m.lnProgress = Int(m.nConnectBytesSoFar / m.nConnectTotalBytes * 100) + Endif + + Wait Window m.lcFile + ' ' + Transform(m.lnProgress) + '% ...' Nowait + Endproc && ProgressHandler + + Function CalculateCheckSum + Lparameters tcFile + Local lcCheckSum, lcText + lcCheckSum = "" + If File(tcFile) + lcText = Filetostr( m.tcFile) + lcCheckSum = Sys(2007, m.lcText, 0, 1) + Endif + Return m.lcCheckSum + + Endfunc && CalculateCheckSum + + Function ReplaceLicentaTag + Lparameters tcText + Local lcText, lcReturn + + lcText = Iif(Empty(tcText) Or Type('tcText') <> 'C', "", tcText) + lcReturn = Iif(!Empty(This.cLicenta), Strtran(m.lcText, '|licenta|', This.cLicenta, 1, 1, 1), m.lcText) && inlocuiesc |licenta| + + Return m.lcReturn + + Endfunc && ReplaceLicentaTag + + Procedure Destroy + + Local lcSelect + lcSelect = Select() + + If File(This.cDownloadFileVersion) + Erase (This.cDownloadFileVersion) + Endif + + Use In (Select('crsXML')) + Select (lcSelect) + + Endproc && Destroy + +Enddefine && Updater + + +PROCEDURE verificare_iban + Lparameters tcXMLIBAN + *** tcXMLIBAN: un xml cu codurile IBAN care trebuie verificate, 2 sau 3 coloane: "denumire", "cod_fiscal", "iban" + + If Left(Lower(tcXMLIBAN), 5) = " 'O' Or Isnull(toDate) + Return m.lnRaspuns + Endif + If Pemstatus(toDate, 'cod_fiscal', 5 ) + lcCodFiscal = Alltrim(NVL(toDate.cod_fiscal,'')) + Endif + If Pemstatus(toDate, 'denumire', 5 ) + lcDenumire = Alltrim(NVL(toDate.denumire,'')) + Endif + If Pemstatus(toDate, 'data', 5 ) + ldData = NVL(toDate.Data, {}) + Endif + + If Pemstatus(toDate, 'cod_judet', 5 ) + lcCodJudet = Alltrim(NVL(toDate.cod_judet,'')) + Endif + + If Pemstatus(toDate, 'cod_auto', 5 ) + lcCodAuto = Alltrim(NVL(toDate.cod_auto, '')) + Endif + If Pemstatus(toDate, 'mesaj_intrebare', 5 ) + lcMesajIntrebare = Alltrim(toDate.mesaj_intrebare) + Endif + + If Pemstatus(toDate, 'optiuni_meniu_ante', 5 ) + lcOptiuniMeniuAnte = Alltrim(toDate.optiuni_meniu_ante) + Endif + + If Pemstatus(toDate, 'tip_verificare', 5 ) + lcTipVerificare = Alltrim(toDate.tip_verificare) + Endif + + If Empty(m.lcCodFiscal) + Return m.lnRaspuns + Endif + + If Empty(m.lcTipVerificare) + lcMenu = GetMeniuVerificareCodFiscal(m.lcCodFiscal, m.lcOptiuniMeniuAnte) + lnOptiune = XMENU(m.lcMenu) + lnOptiuneVerificare = m.lnOptiune + If !Empty(m.lcOptiuniMeniuAnte) + lnOptiuneVerificare = m.lnOptiuneVerificare - Occurs(';', m.lcOptiuniMeniuAnte) + Endif + lcTipVerificare = GetOptiuneVerificareCodFiscal(m.lnOptiuneVerificare) + Else + lnOptiune = 1 + lnOptiuneVerificare = 1 + Endif + + If Empty(m.lnOptiune) + Return m.lnRaspuns + Endif + + Do Case + Case m.lcTipVerificare = 'ISTORIC' + Do verificare_parteneri_istoric With m.lcCodFiscal && In proceduri_comune.prg + + Case m.lcTipVerificare = 'RTVAI_AUTO_COD' + loPartenerX = Createobject("empty") + loPartener = Createobject("empty") + AddProperty(loPartenerX, "cod_fiscal", m.lcCodFiscal) + AddProperty(loPartenerX, "denumire", m.lcDenumire) + AddProperty(loPartenerX, "dataact", m.ldData) + llValid = VERIFICA_RTVAI(loPartenerX, @loPartener) + If !m.llValid + amessagebox('Codul ' + m.lcCodFiscal + ' este invalid!', 0 + 48, _Screen.Caption) + Else + If Pemstatus(loPartener, "leinRtvai", 5) + If loPartener.leinRtvai + amessagebox('Partenerul ' + m.lcDenumire + ' cu codul fiscal: ' + m.lcCodFiscal + crlf + ' este in sistemul TVA la incasare!', 0 + 48, _Screen.Caption) + Else + amessagebox('Partenerul ' + m.lcDenumire + ' cu codul fiscal: ' + m.lcCodFiscal + crlf + ' NU este in sistemul TVA la incasare!', 0 + 48, _Screen.Caption) + Endif + Endif + ENDIF + + Case m.lcTipVerificare = 'VIES_AUTO' + loPartenerX = Createobject("empty") + loPartener = Createobject("empty") + AddProperty(loPartenerX, "cod_fiscal", m.lcCodFiscal) + AddProperty(loPartenerX, "denumire", m.lcDenumire) + AddProperty(loPartenerX, "dataact", m.ldData) + llValid = verifica_partener(m.lcTipVerificare, loPartenerX, @loPartener) + + If !m.llValid + amessagebox('Codul ' + m.lcCodFiscal + ' este invalid!', 0 + 48, _Screen.Caption) + ELSE + llPlatitorTVAVIES = loPartener.PlatitorTVA + llVIES = loPartener.VIES + + lcText = 'VERIFICARE CIF: ' + m.lcCodFiscal + ' ' + m.lcDenumire + crlf + crlf + ; + Alltrim(NVL(loPartener.firma,'')) + crlf + ; + Alltrim(NVL(loPartener.adresa,'')) + crlf + ; + Iif(m.llVIES, 'S-a interogat baza de date VIES: ' + Iif(m.llPlatitorTVAVIES, 'PLATITOR TVA VIES', 'NEPLATITOR TVA VIES'), 'Nu s-a interogat baza de date VIES!') + + AMESSAGEBOX(m.lcText, 0+64, _Screen.Caption) + ENDIF + + Otherwise + loPartenerX = Createobject("empty") + loPartener = Createobject("empty") + AddProperty(loPartenerX, "cod_fiscal", m.lcCodFiscal) + AddProperty(loPartenerX, "denumire", m.lcDenumire) + AddProperty(loPartenerX, "dataact", m.ldData) + llValid = verifica_partener(m.lcTipVerificare, loPartenerX, @loPartener) + + If !m.llValid + amessagebox('Codul ' + m.lcCodFiscal + ' este invalid!', 0 + 48, _Screen.Caption) + ELSE + If Pemstatus(loPartener, "platitortvamfin", 5) + lnRaspuns = verifica_partener_show_info(loPartener, m.lcCodFiscal, m.lcDenumire, m.lcMesajIntrebare) + ENDIF + Endif + Endcase + + Return m.lnRaspuns && raspunsul la intrebarea 'Doriti sa completati datele partenerului?' in formularul Adaugare partener + +Endproc && VerificaCodFiscal + +**************************************************************** +*** Verificare manuala platitor TVA pe mfinante.ro / registru inactivi anaf.ro / registru tva incasare anaf.ro +*** Lanseaza browserul cu adresa mfinante.ro, anaf.ro +**************************************************************** +Procedure VERIFICA_MANUAL_MFINANAF + Lparameters tcTip, tcCodFiscal, tcDenumire, tcCodJudet + *** tcTIP: MFIN/MFINCOD/MFINNUME/ANAF + *** tcCodFiscal: MFIN - se face verificarea dupa cod fiscal daca este completat, altfel verificare dupa nume, judet + + Local lcCodAuto, lcCodFiscal, lcDenumire, lcTipVerificare, lcURL, lcAtributFiscal + lcCodFiscal = UPPER(Alltrim(Transform(m.tcCodFiscal))) + lcDenumire = Alltrim(Transform(m.tcDenumire)) + lcCodJudet = Alltrim(Transform(m.tcCodJudet)) + lcURL = "" + lcAtributFiscal = '' + + If Isalpha(m.lcCodFiscal) + lcAtributFiscal = lcAtributFiscal + LEFT(m.lcCodFiscal,1) + lcCodFiscal = Alltrim(Substr(m.lcCodFiscal, 2)) + If Isalpha(lcCodFiscal) + lcAtributFiscal = lcAtributFiscal + LEFT(m.lcCodFiscal,1) + lcCodFiscal = Alltrim(Substr(m.lcCodFiscal, 2)) + Endif + Endif + + lctip = Iif(!Empty(m.tcTip), Upper(Alltrim(m.tcTip)), "MFIN") + + Do Case + Case "MFIN" $ m.lctip + lcTipVerificare = Iif("NUME" $ m.lctip, "NUME", "COD") + + If m.lcTipVerificare = "COD" + lcURL = "https://www.mfinante.gov.ro/apps/infocodfiscal.html?cod=" + m.lcCodFiscal + Else + lcURL = "https://www.mfinante.gov.ro/apps/numeCod.html?judet=" + m.lcCodJudet + "&name=" + m.lcDenumire + "&submit=VIZUALIZARE" + + Endif + Case "ANAF" $ m.lctip + Text To lcURL Noshow Textmerge +https://www.anaf.ro/inactivi?codFiscal=<>&judet=<>&inputdenumire=<> + Endtext + Case "RTVAI" $ m.lctip + Text To lcURL Noshow Textmerge +https://www.anaf.ro/IncasareTva/cautCodTvaIncasare.do?codFiscal=<> + Endtext + Case "VIES" $ m.lctip + Text To lcURL Noshow Textmerge +https://ec.europa.eu/taxation_customs/vies/viesquer.do?iso=<>&vat=<>&ms=<> + ENDTEXT + + Endcase + If !Empty(m.lcURL) + OPEN_DEFAULT_APP(m.lcURL) + Endif +Endproc && VERIFICA_MANUAL_MFINANAF + +************************************************************ +*** VERIFICA DACA PARTENERUL ESTE IN REGISTRUL TVA INCASARE +************************************************************ +Procedure VERIFICA_RTVAI + Lparameters toPartener, toPartenerOut + * toPartener datele partenerului: cod_fiscal,denumire,dataact + * toPartenerOut (OUT): denumire,leInRTVAI din AgentiRtvai + + Local lcCodFiscal, lcDenumire, ldDataAct, llIsCIF, llValid, lcSql, llSucces + Local loVerificare As "verificarecod" + Private pcDenumire, pdData, pnCodFiscal, pnRTVAI + + If Type('toPartener') = 'O' + lcCodFiscal = Iif(Pemstatus(toPartener, "cod_fiscal", 5), Alltrim(toPartener.cod_fiscal), '') + lcDenumire = Iif(Pemstatus(toPartener, "denumire", 5), Alltrim(Upper(toPartener.denumire)), '') + ldDataAct = Iif(Pemstatus(toPartener, "dataact", 5), toPartener.dataact, {}) + Else + lcCodFiscal = Transform(toPartener) + Endif + + + loVerificare = Createobject("verificarecod") && validare.prg + llIsCIF = loVerificare.IsCIF(m.lcCodFiscal) + + *!* VERIFIC VALIDITATEA CODULUI + If m.llIsCIF + llValid = loVerificare.Validare('CIF', m.lcCodFiscal) +*!* Else +*!* llValid = loVerificare.Validare('CNP', m.lcCodFiscal) + Endif + If !Pemstatus(toPartenerOut, "leinRtvai", 5) + AddProperty(toPartenerOut, "leinRtvai", .F.) + Endif + If !Pemstatus(toPartenerOut, "denumire", 5) + AddProperty(toPartenerOut, "denumire", "") + Endif + + If m.llIsCIF AND m.llValid + If Empty(m.ldDataAct) + ldDataAct = Date(m.gnAn, m.gnLuna, 1) + Endif + + If Isalpha(m.lcCodFiscal) + lcCodFiscal = Alltrim(Substr(m.lcCodFiscal, 2)) + If Isalpha(lcCodFiscal) + lcCodFiscal = Alltrim(Substr(m.lcCodFiscal, 2)) + Endif + Endif + pnCodFiscal = Int(Val(m.lcCodFiscal)) + pdData = ldDataAct + pcDenumire = '' + pnRTVAI = 0 + lcSql = [begin pack_roartvai.PartenerInRTVAI(?pnCodFiscal, ?pdData, ?@pcDenumire, ?@pnRTVAI); end;] + + llSucces = goExecutor.oExecuta(m.lcSql) + If m.llSucces + toPartenerOut.leinRtvai = (m.pnRTVAI = 1) + toPartenerOut.denumire = Alltrim(Nvl(pcDenumire, '')) + Endif + + Endif && m.llValid + + Return m.llValid +Endproc && VERIFICA_RTVAI + + +************************************************************ +*** Intoarce .T. daca codul fiscal exista in REGISTRUL TVA INCASARE la data +************************************************************ +Function VERIFICA_RTVAI_DATA + Lparameters tcCodFiscal, tdDataAct, tcDenumire + * tcCodFiscal: codul fiscal de verificat in RTVAI + * tdDataAct: data documentului (optional) / 1 ale lunii curente, daca nu este dat + * tcDenumire: OUT denumirea din RTVAI, daca exista + + Private pcDenumire, pdData, pnCodFiscal, pnRTVAI + Local lcCodFiscal, lcDenumire, lcSql, ldDataAct, leinRtvai, llSucces + + leinRtvai = .F. + tcDenumire = '' + + lcCodFiscal = Iif(Type('tcCodFiscal') = 'C', Alltrim(Nvl(m.tcCodFiscal, '')), '') + ldDataAct = Iif(!Empty(m.tdDataAct), m.tdDataAct, Date(m.gnAn, m.gnLuna, 1)) + + If Empty(m.lcCodFiscal) + Return m.leinRtvai + Endif + + If Isalpha(m.lcCodFiscal) + lcCodFiscal = Alltrim(Substr(m.lcCodFiscal, 2)) + If Isalpha(lcCodFiscal) + lcCodFiscal = Alltrim(Substr(m.lcCodFiscal, 2)) + Endif + Endif + + pnCodFiscal = Int(Val(m.lcCodFiscal)) + pdData = ldDataAct + pcDenumire = '' + pnRTVAI = 0 + lcSql = [begin pack_roartvai.PartenerInRTVAI(?pnCodFiscal, ?pdData, ?@pcDenumire, ?@pnRTVAI); end;] + + llSucces = goExecutor.oExecuta(m.lcSql) + If m.llSucces + leinRtvai = (m.pnRTVAI = 1) + tcDenumire = Alltrim(Nvl(m.pcDenumire, '')) + Endif + + Return m.leinRtvai +Endfunc && VERIFICA_RTVAI_DATA + + +********************************************* +*** inlocuieste caracterele speciale dintr-un text xml +*** ex: "&" devine "&" +Function XmlSpecialCharacters + Lparameters tcText + + Local lcText + lcText = tcText + lcText = Strtran(m.lcText, '&', '&') + lcText = Strtran(m.lcText, '"', '"') + lcText = Strtran(m.lcText, ['], ''') + lcText = Strtran(m.lcText, '<', '<') + lcText = Strtran(m.lcText, '>', '>') + + Return lcText +Endfunc && XmlSpecialCharacters + + +********************************************* +*** curata caracterele care nu sunt permise in nume de fisiere Windows +*** inlocuiesc cu tcReplaceCharacter +Function WindowsSpecialCharacters + Lparameters tcText, tcReplaceCharacter + * tcReplaceCharacter: caracterul cu care se inlocuiesc caracterele nepermise in numele fisierelor. Optional, default: '' + + Local lcText, lcRC + lcRC= IIF(!EMPTY(m.tcReplaceCharacter) and TYPE('tcReplaceCharacter') = 'C' and AT(m.tcReplaceCharacter, [/\?%*:|"<>.,;=]) = 0, m.tcReplaceCharacter, '') + + lcText = STRTRAN(STRTRAN(STRTRAN(STRTRAN(STRTRAN(STRTRAN(STRTRAN(STRTRAN(Strtran(TRANSFORM(m.tcText), [<], m.lcRC,1,10), [>], m.lcRC,1,10), [:], m.lcRC,1,10), ["], m.lcRC,1,10), ; + [/], m.lcRC,1,10), [\], m.lcRC,1,10), [|], m.lcRC,1,10), [?], m.lcRC,1,10), [*], m.lcRC,1,10) + + Return lcText +Endfunc && WindowsSpecialCharacters + +********************************************* +*** face conversia de la Double Byte la UTF8 +*** curata textul de diacritice, spatii, CR/LF, +*** lcMesaj = RemoveCharactersDB(lcMesaj, .T.) +********************************************* +FUNCTION RemoveCharactersDB + Lparameters tcText, tlDiacritics, tlSpaces, tlCR + LOCAL lcText + + lcText = STRCONV(tcText, 9) && conversie la UTF-8 + lcText = RemoveCharacters(tcText, tlDiacritics, tlSpaces, tlCR) + RETURN m.lcText +ENDFUNC +********************************************* +*** curata textul de diacritice, spatii, CR/LF +********************************************* +Function RemoveCharacters + Lparameters tcText, tlDiacritics, tlSpaces, tlCR + *** tcText: textul initial + *** tlDiacritics: inlocuieste diacriticele + *** tlSpaces: sterge spatiile + *** tlCR: sterge CR si LF + + Local lcText + lcText = IIF(TYPE('tcText') = 'C', Nvl(m.tcText, ''), '') + + IF EMPTY(m.lcText) + RETURN '' + ENDIF + + If m.tlDiacritics + lcText = STRTRAN(STRTRAN(Strtran(Nvl(m.lcText, ''), Chr(197) + CHR(162), 'T', 1,100,1), Chr(197) + CHR(63), 'S', 1,100,1), Chr(196) + CHR(63), 'A', 1,100,1) + lcText = Strtran(Nvl(m.lcText, ''), Chr(195) + CHR(63), 'I', 1,100,1) + lcText = Strtran(Strtran(Strtran(Strtran(Strtran(Nvl(m.lcText, ''), Chr(170), 'S', 1,100,1), Chr(222), 'T', 1,100,1), Chr(226), 'A', 1,100,1), Chr(227), 'A', 1,100,1), Chr(238), 'I', 1,100,1) + lcText = STRTRAN(Strtran(Strtran(Strtran(Nvl(m.lcText, ''), Chr(206), 'I', 1,100,1), Chr(194), 'A', 1,100,1), Chr(195), 'A', 1,100,1), Chr(196), 'A', 1,100,1) + lcText = STRTRAN(m.lcText, CHR(2), '',1,100,1) && caracter neprintabil + + * Inlocuiri pentru diacritice - minuscule + lcText = STRTRAN(lcText, "A?", "a") && a + lcText = STRTRAN(lcText, "Ac??", "a") && + lcText = STRTRAN(lcText, "A^?", "t") && ? + lcText = STRTRAN(lcText, "AfA", "i") && + lcText = STRTRAN(lcText, "A", "a") && a (alta varianta) + lcText = STRTRAN(lcText, "A", "s") && ? + + * Inlocuiri pentru diacritice - majuscule + lcText = STRTRAN(lcText, "A", "A") && A + lcText = STRTRAN(lcText, "A", "I") && I + lcText = STRTRAN(lcText, "A", "S") && ? + lcText = STRTRAN(lcText, "Ac", "T") && ? + lcText = STRTRAN(lcText, "Ă", "A") && A + ENDIF + + If m.tlSpaces + lcText = Strtran(m.lcText, ' ', '', 1, 100, 1) + Endif + If m.tlCR + lcText = Strtran(Strtran(m.lcText, Chr(13), ''), Chr(10), '') + Endif + + Return m.lcText +Endfunc + + +**************************************************** +Function OracleSpecialCharacters + Lparameters tcText + Local lcText + lcText = tcText + lcText = Strtran(m.lcText, "'", "''") + + Return lcText +Endfunc && OracleSpecialCharacters +**************************************************** +*** Citeste din optiuni utilizator ordinea coloanelor dintr-un grid de tipul ferestre_cere_date.vcx > ct_grid_search +*** ointroduceri.prg > lans_nir_bon > grid nomenclator articole +*** ointroduceri.prg > achizitie_import > fereastra cautare repere pentru adaugare +*** Intoarce obiectul loSelectie(titlu_col M, nume_col M, ordine C(50), width_col M, pornire N(2)) +*** Pentru salvarea ordinii coloanelor din grid, criteriului de sortare se apeleaza SCRIE_SELECTII_OPTIUNI_UTILIZATOR() +**************************************************** +Procedure CITESTE_SELECTII_OPTIUNI_UTILIZATOR + Lparameters tcOptiune, tcListaColoaneGrid, tcCursor, tcSearchColumn, tuSearchValue + *!* CITESTE_SELECTII_OPTIUNI_UTILIZATOR("GEST_SELECTII", ost.nume_col, "crsGestSelectiiUtilizator", "id_sel", oSet.id_selSt) + *!* tcOptiune: "GEST_SELECTII" + *!* tcListaColoaneGrid: lista coloanelor din grid: "codmat;denumire;um;serie;cantitate;pret;cant_bax;um2;grupa;subgrupa;cgest;cont;acont;datain;codmatf;lot;adata_expirare;nrord_rez;part_rez" + *!* tcCursor: "crsGestSelectiiUtilizator" (default = "crsSelectiiUtilizator") + *!* tcSearchColumn (optional): "ID_SEL" (daca in cursorul xml sunt mai multe inregistrari si doresc o anume inregistrare) + *!* tuSearchValue (optional): 1 (valoarea pentru tcSearchColumn) + *!* RETURN: loSelectie (titlu_col, nume_col, ordine, width_col, pornire) + + Local lcCursor, lcListaColoaneCursor, lcListaColoaneGrid, lcOptiune, lcSchemaCursor, lcSearchColumn + Local lcSelectii, lcSirOrdonatCursor, lcSirOrdonatGrid, loSelectie, luSearchValue + + lcOptiune = Upper(Alltrim(tcOptiune)) + lcListaColoaneGrid = m.tcListaColoaneGrid + lcCursor = Iif(!Empty(m.tcCursor), m.tcCursor, "crsSelectiiUtilizator") + lcSearchColumn = "" + luSearchValue = "" + If !Empty(tcSearchColumn) And !Empty(tuSearchValue) And Type('tcSearchColumn') = 'C' + lcSearchColumn = Upper(Alltrim(tcSearchColumn)) + luSearchValue = tuSearchValue + Endif + + lcSchemaCursor = "titlu_col M, nume_col M, ordine C(50), width_col M, pornire N(2)" + If !Empty(m.lcSearchColumn) + lcSchemaCursor = lcSearchColumn + " " + Type('tuSearchValue') + "(" + Len(tuSearchValue) + ")," + m.lcSchemaCursor + Endif + Create Cursor (m.lcCursor) (&lcSchemaCursor) + Select (m.lcCursor) + Scatter Name loSelectie Memo Blank + + lcSelectii = citeste_optiune_utilizator(m.lcOptiune) + If !Empty(m.lcSelectii) + Xmltocursor(m.lcSelectii, m.lcCursor) + + Select (m.lcCursor) + If !Empty(m.lcSearchColumn) + Locate For &lcSearchColumn = luSearchValue + If Found() + Scatter Name loSelectie Memo + Endif + Else + Go Top + Scatter Name loSelectie Memo + Endif + + **-- compara daca am aceleasi coloane (control source) pe server si in tabelul din proiect (gest_selectii) + Create Cursor crsListaCursor (element C(100)) + Create Cursor crsListaGrid (element C(100)) + + lcListaColoaneCursor = loSelectie.nume_col + lista2cursor(lcListaColoaneCursor, "crsListaCursor", "element", ";") + lista2cursor(lcListaColoaneGrid, "crsListaGrid", "element", ";") + + Select * From crsListaCursor ; + Order By element ; + Into Cursor crsListaCursorOrd + + Select * From crsListaGrid ; + Order By element ; + Into Cursor crsListaGridOrd + + lcSirOrdonatCursor = cursor2lista("crsListaCursorOrd", "element", ";") + lcSirOrdonatGrid = cursor2lista("crsListaGridOrd", "element", ";") + + Use In (Select('crsListaCursor')) + Use In (Select('crsListaGrid')) + Use In (Select('crsListaCursorOrd')) + Use In (Select('crsListaGridOrd')) + + If lcSirOrdonatCursor <> lcSirOrdonatGrid + Select (m.lcCursor) + Scatter Name loSelectie Memo Blank + Endif + + Endif + + Return loSelectie +Endproc && CITESTE_SELECTII_OPTIUNI_UTILIZATOR + +************************************************************************************************ +*** NIR.INAINTE_DE_DO_TERMIN +*** SCRIE_SELECTII_OPTIUNI_UTILIZATOR("GEST_SELECTII", toCtGridSearch, ["crsGestSelectiiUtilizator", "id_sel", oSet.id_selSt]) +*** tcOptiune: "GEST_SELECTII" +*** toCtGridSearch: referinta la containerul cu grid de tipul ct_grid_search +*** tcDescriere (optional): descriere optiune +*** tcCursor (optional): "crsGestSelectiiUtilizator" (default = "crsSelectiiUtilizator") +*** tcSearchColumn (optional): "ID_SEL" (daca in cursorul xml sunt mai multe inregistrari si doresc sa modific o anume inregistrare) +*** tuSearchValue (optional): 1 (valoarea pentru tcSearchColumn) +************************************************************************************************ +Procedure SCRIE_SELECTII_OPTIUNI_UTILIZATOR + Lparameters tcOptiune, toCtGridSearch, tcDescriere, tcCursor, tcSearchColumn, tuSearchValue + + Local lcDescriere, lcSearchColumn, luSearchValue + Local loCtGridSearch, lcOptiune, lcCursor, lcSelect + Local lcColOrd, lcControlSource, lcControlSource2, lcCursorXML, lcHeader, lcHeader2, lcNumeCol + Local lcOrd, lcOrdine, lcTitluCol, lcWidthCol, lcWidthColumn, lcWidthColumn2, llNrOrd, lnColOrd + Local lnNrCols, lnPornire, loSelectie, i + + lcSelect = Select() + loCtGridSearch = toCtGridSearch + lcOptiune = Upper(Alltrim(tcOptiune)) + lcCursor = Iif(!Empty(m.tcCursor), m.tcCursor, "crsSelectiiUtilizator") + lcDescriere = Iif(!Empty(m.tcDescriere), Alltrim(m.tcDescriere), Program(1)) + lcSearchColumn = Iif(!Empty(m.tcSearchColumn), Alltrim(m.tcSearchColumn), "") + luSearchValue = Iif(!Empty(m.luSearchValue), m.luSearchValue, "") + + Create Cursor crsGrid (ordine N(3), ctrSource C(100), titlu C(100), widthCol C(100)) + + lnNrCols = loCtGridSearch._GRID1.ColumnCount + llNrOrd = loCtGridSearch.lNumerotare + lnPornire = Val(loCtGridSearch.cb_tx_cautare1.criteriu.Value) + + For i = 1 To lnNrCols + If llNrOrd And i <> 1 && ce se intampla daca nu e llNrOrd ?????? + lcColOrd = [loCtGridSearch._grID1.column] + Alltrim(Str(i)) + [.columnorder] + lnColOrd = &lcColOrd + + *!* modificare v 2.1.19 + *!* lcHeader = [this.ct_grid_search1._grid1.column] + Alltrim(Str(I))+ [.grh]+Alltrim(Str(I))+[.]+[Caption] + lcHeader = [loCtGridSearch._GRID1.column] + Alltrim(Str(i)) + [.grh] + Alltrim(Str(i)) + If Type(lcHeader) = 'O' + lcHeader = lcHeader + [.Caption] + Else + *!* daca nu se poate ordona dupa coloana respectiva, atunci am Header1 in loc de grhI + lcHeader = [loCtGridSearch._GRID1.column] + Alltrim(Str(i)) + [.header1.Caption] + Endif + *!* modificare v 2.1.19 ^ + lcHeader2 = &lcHeader + + lcControlSource = [loCtGridSearch._grid1.column] + Alltrim(Str(i)) + [.ControlSource] + lcControlSource2 = &lcControlSource + + lcWidthColumn = [loCtGridSearch._grid1.column] + Alltrim(Str(i)) + [.width] + lcWidthColumn2 = Alltrim(Str(&lcWidthColumn)) + + Insert Into crsGrid (ordine, titlu, ctrSource, widthCol) Values (lnColOrd, lcHeader2, lcControlSource2, lcWidthColumn2) + Endif + Endfor + + + Select * From crsGrid Order By ordine Into Cursor crsGridOrd + Use In (Select('crsGrid')) + + lcTitluCol = "" + lcNumeCol = "" + lcWidthCol = "" + Select crsGridOrd + Scan + lcTitluCol = lcTitluCol + Alltrim(titlu) + "," + lcNumeCol = lcNumeCol + Alltrim(ctrSource) + ";" + lcWidthCol = lcWidthCol + Alltrim(widthCol) + ";" + + Select crsGridOrd + Endscan + + lcTitluCol = Substr(lcTitluCol, 1, Len(lcTitluCol) - 1) + lcNumeCol = Substr(lcNumeCol, 1, Len(lcNumeCol) - 1) + lcWidthCol = Substr(lcWidthCol, 1, Len(lcWidthCol) - 1) + + lcOrd = [loCtGridSearch.corder] + lcOrdine = &lcOrd + + + Select (m.lcCursor) + Scatter Name loSelectie Memo Blank + With loSelectie + .titlu_Col = m.lcTitluCol + .nume_col = m.lcNumeCol + .ordine = m.lcOrdine + .width_Col = m.lcWidthCol + .pornire = m.lnPornire + Endwith + + If !Empty(m.lcSearchColumn) + loSelectie.&lcSearchColumn = luSearchValue && loSelectii.id_sel = oSet.id_selSt + + Locate For &lcSearchColumn = luSearchValue + If Found() + Delete + Endif + Else + Go Top + Delete + Endif + + Insert Into (m.lcCursor) From Name loSelectie + + + lcCursorXML = '' + Cursortoxml(m.lcCursor, "lcCursorXML", 2, 0 + 2 + 8, 0, "1") + + scrie_optiune_utilizator(m.lcOptiune, lcCursorXML, "Ordinea coloanelor in tabelul din stanga in formularele de nir, bon, etc.") + + Select (m.lcSelect) +Endproc && SCRIE_SELECTII_OPTIUNI_UTILIZATOR + + +*---------------------------------------------------------------------- +* Function....: ExportToXMLExcel +* Author......: Core concepts presented at SW Fox 2009 by Cristof Wollenhaupt +* : Enhancements 11/21/2009 by Stein Goering +* Abstract....: Exports the current cursor to Excel (XMLSS format), optionally creates file +* Returns.....: XML string, or number of bytes written if file is specified +* Parameters..: Path and Filename of Excel file (optional) +* Notes.......: +*---------------------------------------------------------------------- +#If .F. + * Example of usage + Create Cursor Sample (cData C(30), nData N(9, 3), tData D, iData i, lData L) + Insert Into Sample Values("MadFox Rocks!", 0, {}, 5, .F.) + Insert Into Sample Values("abcdefghijklmnopqrstuvwxyz123", 34.987, Datetime(), -32760, .T.) + Insert Into Sample Values("1.23", 56, Datetime(), 6, .F.) + Browse + + If ExportToXMLExcel("Sample.xls") = 0 + Wait Window [Problem writing file] + Endif +#Endif + +Function ExportToXMLExcel(lcFileName) + Local lcWorksheet, lcPoint, lcData, lcRow, lnField, luValue, lcFieldName, lcType, lnWidth, lcColDef, lnCols + Local lcHeading, lnRows, lcStyles + *-------------------------------------------------------------------------------------- + * Set up environment + *-------------------------------------------------------------------------------------- + lcPoint = Set("Point") + Set Point To "." + + *-------------------------------------------------------------------------------------- + * Create the style string + *-------------------------------------------------------------------------------------- + Set Textmerge Delimiters + Text To lcStyles Noshow Pretext 3 + + + + + + + + + + Endtext + *-------------------------------------------------------------------------------------- + * Assemble the column width and heading strings + *-------------------------------------------------------------------------------------- + lcHeading = "" + lcColDef = [] + Dimension laFields[1] + lnCols = Afields(laFields) + For lnField = 1 To lnCols + lcFieldName = Proper(Strtran(laFields[m.lnField, 1], [_], [ ])) + lcHeading = m.lcHeading + ; + [] + Strconv(lcFieldName, 9) + [] + lcType = laFields[m.lnField, 2] + lnWidth = Icase(lcType = [C], laFields[m.lnField, 3] * 4.5, lcType = [N], laFields[m.lnField, 3] * 5, lcType = [I], 40, lcType = [D], 60, lcType = [T], 90, lcType = [L], 25, 50) + lnWidth = Max(lnWidth, Len(lcFieldName) * 6) && Make sure col is wide enough to show the heading + Text To lcColDef Additive Textmerge Noshow Pretext 3 + + Endtext + Endfor + lcHeading = m.lcHeading + "" + *-------------------------------------------------------------------------------------- + * Assemble the content string + *-------------------------------------------------------------------------------------- + lcData = "" + lnRows = 1 + Scan + lcRow = "" + For lnField = 1 To lnCols + luValue = Evaluate(Field(m.lnField)) + lcType = laFields[m.lnField, 2] + Do Case + Case lcType == "C" + luValue = Alltrim(Nvl(m.luValue, "")) + lcRow = m.lcRow + ; + [] + Strconv(m.luValue, 9) + [] + Case lcType == "L" + luValue = Iif(m.luValue, [True], [False]) + lcRow = m.lcRow + ; + [] + Strconv(m.luValue, 9) + [] + Case lcType == "N" + lcRow = m.lcRow + ; + [] + Transform(Nvl(m.luValue, 0)) + ; + [] + Case lcType == "I" + lcRow = m.lcRow + ; + [] + Transform(Nvl(m.luValue, 0)) + ; + [] + Case lcType == "D" + If Empty(m.luValue) + lcRow = m.lcRow + ; + [] + Else + lcRow = m.lcRow + ; + [] + Ttoc(Evl(m.luValue, Dtot(Date(1899, 1, 1))), 3) + ; + [] + Endif + Case lcType == "T" + If Empty(m.luValue) + lcRow = m.lcRow + ; + [] + Else + lcRow = m.lcRow + ; + [] + Ttoc(Evl(m.luValue, Dtot(Date(1899, 1, 1))), 3) + ; + [] + Endif + Otherwise + Assert .F. Message "Type not supported" + Endcase + lnRows = lnRows + 1 + Endfor + lcRow = m.lcRow + "" + lcData = m.lcData + m.lcRow + Endscan + + *-------------------------------------------------------------------------------------- + * Merge the results into the template + *-------------------------------------------------------------------------------------- + Text To m.lcWorksheet Textmerge Noshow Pretext 3 + + + + <> + + + + <> + <> + <> +
+
+
+ Endtext + + *-------------------------------------------------------------------------------------- + * Restore environment + *-------------------------------------------------------------------------------------- + Set Point To m.lcPoint + + If !Empty(lcFileName) + Return Strtofile(m.lcWorksheet, lcFileName) + Else + Return m.lcWorksheet + Endif + +Endfunc && ExportToXMLExcel + + +*-------------------------------------------------------------------------------------- +* calculeaza procentul de tva din tva/pret +*-------------------------------------------------------------------------------------- +Function TVA2PROCTVA + Lparameters tnTVA, tnPret + Local lnProcTVA + lnProcTVA = 1 + If tnPret = 0 Or tnTVA = 0 + lnProcTVA = 1 + Else + lnProcTVA = Round(tnTVA/tnPret, 2) + DO CASE + CASE gnAn*12+gnLuna >= 2025*12+8 + DO CASE + CASE Between(lnProcTVA, 0.10, 0.12) + lnProcTVA = 1.11 + CASE Between(lnProcTVA, 0.20, 0.22) + lnProcTVA = 1.21 + OTHERWISE + lnProcTVA = 1.21 + ENDCASE + + CASE BETWEEN(gnAn*12+gnLuna, 2024*12+1, 2025*12+7) + DO CASE + CASE Between(lnProcTVA, 0.08, 0.11) + lnProcTVA = 1.09 + CASE Between(lnProcTVA, 0.18, 0.20) + lnProcTVA = 1.19 + CASE Between(lnProcTVA, 0.04, 0.06) + lnProcTVA = 1.05 + OTHERWISE + lnProcTVA = 1.19 + ENDCASE + OTHERWISE + lnProcTVA = GetCoeficientTvaStandard() + ENDCASE + ENDIF + Return lnProcTVA +Endfunc && TVA2PROCTVA +*!* roagest v 2.0.24 ^ + +*!* INTOARCE IDJTVA PENTRU COTA STANDARD IN FUNCTIE DE LUNA +*!* 07/2010 S-A MODIFICAT TVA 24% +FUNCTION GetIdJtvaStandard(tcTip, tnProcTVA) + *!* tcRegistru: JC/JV + *!* tcTip: VANZARE/VANZARE_TI + *!* ACHIZITIE/ACHIZITIE_CAPITAL/ACHIZITIE_VANZARE/ACHIZITIE_MATERII/ + *!* ACHIZITIE_TI/ACHIZITIE_TI_CAPITAL/ACHIZITIE_TI_VANZARE/ACHIZITIE_TI_MATERII + + LOCAL lcTip, lnIdJtvaStandard, lnIdVanzareNepl + Local lnIdVanzare, lnIdVanzareTI, lnIdAchizitieCapital, lnIdAchizitieVanzare, lnIdAchizitieMaterii + Local lnIdAchizitieTICapital, lnIdAchizitieTIVanzare, lnIdAchizitieTIMaterii, lnIdAchizitie, lnIdAchizitieTI + + lcTip = IIF(EMPTY(tcTip) OR TYPE('tcTip') <> 'C', 'VANZARE', UPPER(ALLTRIM(m.tcTip))) + lnProcTVA = IIF(TYPE('tnProcTVA') = 'N', m.tnProcTVA, GetProcTvaStandard()) + + lnIdVanzareNepl = 8 + lnIdAchizitieNepl = 113 + DO CASE + CASE m.gnAn * 12 + m.gnLuna >= 2025 * 12 + 8 + * 21% + lnIdVanzare = IIF(lnProcTVA = 21, 35, IIF(lnProcTVA = 11, 39, 35)) + lnIdVanzareTI = 5 + + lnIdAchizitieCapital = IIF(lnProcTVA = 21, 208, IIF(lnProcTVA = 11, 212, 208)) + lnIdAchizitieVanzare = IIF(lnProcTVA = 21, 208, IIF(lnProcTVA = 11, 212, 208)) + lnIdAchizitieMaterii = IIF(lnProcTVA = 21, 208, IIF(lnProcTVA = 11, 212, 208)) + lnIdAchizitieTICapital = IIF(lnProcTVA = 21, 216, IIF(lnProcTVA = 11, 212, 218)) + lnIdAchizitieTIVanzare = IIF(lnProcTVA = 21, 216, IIF(lnProcTVA = 11, 212, 218)) + lnIdAchizitieTIMaterii = IIF(lnProcTVA = 21, 216, IIF(lnProcTVA = 11, 212, 218)) + + CASE m.gnAn * 12 + m.gnLuna <= 2010 * 12 + 6 + * 19% + lnIdVanzare = 1 + lnIdVanzareTI = 5 + lnIdAchizitieCapital = 101 + lnIdAchizitieVanzare = 103 + lnIdAchizitieMaterii = 105 + lnIdAchizitieTICapital = 137 + lnIdAchizitieTIVanzare = 139 + lnIdAchizitieTIMaterii = 141 + OTHERWISE + lnIdVanzare = IIF(lnProcTVA = 24, 15, IIF(lnProcTVA = 20, 27, IIF(lnProcTVA = 19, 1, IIF(lnProcTVA = 9, 3, 13)))) + lnIdVanzareTI = 5 + lnIdAchizitieCapital = IIF(lnProcTVA = 24, 156, IIF(lnProcTVA = 20, 176, IIF(lnProcTVA = 19, 101, IIF(lnProcTVA = 9, 107, 176)))) + lnIdAchizitieVanzare = IIF(lnProcTVA = 24, 156, IIF(lnProcTVA = 20, 176, IIF(lnProcTVA = 19, 103, IIF(lnProcTVA = 9, 109, 176)))) + lnIdAchizitieMaterii = IIF(lnProcTVA = 24, 156, IIF(lnProcTVA = 20, 176, IIF(lnProcTVA = 19, 105, IIF(lnProcTVA = 9, 111, 176)))) + lnIdAchizitieTICapital = IIF(lnProcTVA = 24, 162, IIF(lnProcTVA = 20, 186, IIF(lnProcTVA = 19, 137, IIF(lnProcTVA = 9, 143, 186)))) + lnIdAchizitieTIVanzare = IIF(lnProcTVA = 24, 162, IIF(lnProcTVA = 20, 186, IIF(lnProcTVA = 19, 139, IIF(lnProcTVA = 9, 143, 186)))) + lnIdAchizitieTIMaterii = IIF(lnProcTVA = 24, 162, IIF(lnProcTVA = 20, 186, IIF(lnProcTVA = 29, 141, IIF(lnProcTVA = 9, 145, 186)))) + ENDCASE + lnIdAchizitie = lnIdAchizitieMaterii + lnIdAchizitieTI = lnIdAchizitieTIMaterii + + lnIdJtvaStandard = lnIdVanzare + DO CASE + CASE 'VANZARE'$lcTip AND m.gnNEPLATITOARE_TVA = 1 + lnIdJtvaStandard = m.lnIdVanzareNepl + CASE 'ACHZITIE'$lcTip AND m.gnNEPLATITOARE_TVA = 1 + lnIdJtvaStandard = m.lnIdAchizitieNepl + CASE lcTip = 'VANZARE' + lnIdJtvaStandard = m.lnIdVanzare + CASE lcTip = 'VANZARE_TI' + lnIdJtvaStandard = lnIdVanzareTI + CASE lcTip = 'ACHIZITIE' + lnIdJtvaStandard = m.lnIdAchizitie + CASE lcTip = 'ACHIZITIE_CAPITAL' + lnIdJtvaStandard = lnIdAchizitieCapital + CASE lcTip = 'ACHIZITIE_VANZARE' + lnIdJtvaStandard = lnIdAchizitieVanzare + CASE lcTip = 'ACHIZITIE_MATERII' + lnIdJtvaStandard = lnIdAchizitieMaterii + CASE lcTip = 'ACHIZITIE_TI' + lnIdJtvaStandard = lnIdAchizitieTI + CASE lcTip = 'ACHIZITIE_TI_CAPITAL' + lnIdJtvaStandard = lnIdAchizitieTICapital + CASE lcTip = 'ACHIZITIE_TI_VANZARE' + lnIdJtvaStandard = lnIdAchizitieTIVanzare + CASE lcTip = 'ACHIZITIE_MATERII' + lnIdJtvaStandard = lnIdAchizitieTIMaterii + ENDCASE + RETURN lnIdJtvaStandard +ENDFUNC + + +*********************************************************************** +*!* INTOARCE PROCENTUL DE TVA STANDARD IN FUNCTIE DE LUNA 24 +*!* 07/2010 S-A MODIFICAT TVA 24% +*!* 01/2016 S-A MODIFICAT TVA 20% +*!* 01/2017 S-A MODIFICAT TVA 19%, 9%, 5% +*!* 08/2025 S-A MODIFICAT TVA 21% , 11% +FUNCTION GetProcTvaStandard + LOCAL lnAn, lnLuna, lnProcTva + + lnAn = m.gnAn + lnLuna = m.gnLuna + lnProcTva = 21 + + DO CASE + CASE m.lnAn * 12 + m.lnLuna >= 2025 * 12 + 8 + lnProcTva = 21 + CASE BETWEEN(m.lnAn * 12 + m.lnLuna, 2007*12+1, 2010 * 12 + 7) + lnProcTva = 19 + CASE BETWEEN(m.lnAn * 12 + m.lnLuna, 2010*12+8, 2015 * 12 + 12) + lnProcTva = 24 + CASE BETWEEN(m.lnAn * 12 + m.lnLuna, 2016*12+1, 2016 * 12 + 12) + lnProcTva = 20 + CASE BETWEEN(m.lnAn * 12 + m.lnLuna, 2017*12+1, 2025 * 12 + 7) + lnProcTva = 19 + ENDCASE + RETURN m.lnProcTva +ENDFUNC + +*********************************************************************** +*!* INTOARCE COEFICIENTUL DE TVA STANDARD IN FUNCTIE DE LUNA 1.24 +*!* 07/2010 S-A MODIFICAT TVA 24% +FUNCTION GetCoeficientTvaStandard + LOCAL lnAn, lnLuna, lnProcTva + + lnAn = m.gnAn + lnLuna = m.gnLuna + lnProcTva = 1.21 + + DO CASE + CASE m.lnAn * 12 + m.lnLuna >= 2025 * 12 + 8 + lnProcTva = 1.21 + CASE BETWEEN(m.lnAn * 12 + m.lnLuna, 2007*12+1, 2010 * 12 + 7) + lnProcTva = 1.19 + CASE BETWEEN(m.lnAn * 12 + m.lnLuna, 2010*12+8, 2015 * 12 + 12) + lnProcTva = 1.24 + CASE BETWEEN(m.lnAn * 12 + m.lnLuna, 2016*12+1, 2016 * 12 + 12) + lnProcTva = 1.20 + CASE BETWEEN(m.lnAn * 12 + m.lnLuna, 2017*12+1, 2025 * 12 + 7) + lnProcTva = 1.19 + ENDCASE + + RETURN m.lnProcTva +ENDFUNC + +*********************************************************************************** +*** Primeste un procent TVA si intoarce IdJTVA standard +*********************************************************************************** +FUNCTION ProcentTva2IdJtva + LPARAMETERS tnProcentTVA, tcTipJ, tlTaxareInversa, tnTvaIncasare + + * tnProcentTVA : procent TVA 0/5/9/19/11/21 + * tlTaxareInvesa : .T. daca este taxare inversa + * tnTvaIncasare : 1 daca este TVA incasare + * tcTipJ : Tip Jurnal JV/JC + + Local lcTipJ, lnIdJtva, lnIdJtvaNeex + lnIdJtva = 0 + + lcTipJ = IIF(INLIST(UPPER(m.tcTipJ), 'JV', 'JC'), UPPER(m.tcTipJ), 'JV') + + + DO CASE + CASE m.tnProcentTVA = 21 AND tcTipJ = 'JV' + lnIdJtva = IIF(!m.tlTaxareInversa, 35, 5) + CASE m.tnProcentTVA = 11 AND tcTipJ = 'JV' + lnIdJtva = IIF(!m.tlTaxareInversa, 39, 5) + CASE m.tnProcentTVA = 19 AND tcTipJ = 'JV' + lnIdJtva = IIF(!m.tlTaxareInversa, 1, 5) + CASE m.tnProcentTVA = 9 AND tcTipJ = 'JV' + lnIdJtva = IIF(!m.tlTaxareInversa, 3, 5) + CASE m.tnProcentTVA = 5 AND tcTipJ = 'JV' + lnIdJtva = IIF(!m.tlTaxareInversa, 13, 5) + CASE m.tnProcentTVA = 0 AND tcTipJ = 'JV' + lnIdJtva = IIF(!m.tlTaxareInversa, 8, 5) && ALTE LIVR. SCUTITE CU DREPT DE DEDUCERE + + CASE m.tnProcentTVA = 21 AND tcTipJ = 'JC' + lnIdJtva = IIF(!m.tlTaxareInversa, 208, 216) + CASE m.tnProcentTVA = 11 AND tcTipJ = 'JC' + lnIdJtva = IIF(!m.tlTaxareInversa, 212, 218) + CASE m.tnProcentTVA = 19 AND tcTipJ = 'JC' + lnIdJtva = IIF(!m.tlTaxareInversa, 105, 141) + CASE m.tnProcentTVA = 9 AND tcTipJ = 'JC' + lnIdJtva = IIF(!m.tlTaxareInversa, 111, 145) + CASE m.tnProcentTVA = 5 AND tcTipJ = 'JC' + lnIdJtva = IIF(!m.tlTaxareInversa, 154, 154) + CASE m.tnProcentTVA = 0 AND tcTipJ = 'JC' + lnIdJtva = IIF(!m.tlTaxareInversa, 113, 216) && ACH. INT. SCUTITE/NEIMPOZABILE + ENDCASE + + IF m.tnTvaIncasare = 1 AND !EMPTY(m.lnIdJtva) + lnIdJtvaNeex = getIdJtvaColoana(m.lnIdJtva, m.tnTvaIncasare) + If m.lnIdJtvaNeex <> 0 + lnIdJtva = m.lnIdJtvaNeex + Endif + ENDIF + + RETURN m.lnIdJtva + +ENDFUNC + +*********************************************************************************** +*** Apeleaza getIdJtvaColoana si intoarce un obiect din vjtva_coloane +*********************************************************************************** +Function GeJtvaColoana + Lparameters tnIdJtva, tnTvaIncasare, tcTipJ + + Local loRec + getIdJtvaColoana(tnIdJtva, tnTvaIncasare, tcTipJ, @loRec) + + Return loRec +Endfunc + +*********************************************************************************** +*** baza. id_jtva_coloana exigibil/neexigibil corespunzator id_jtva_coloana selectat +*********************************************************************************** +Function getIdJtvaColoana + Lparameters tnIdJtva, tnTvaIncasare, tcTipJ, toRec + + *** tnTVAIncasare = 0 > tnIdJtva este neexigibil + *** tcTipJ: JC, JV (default) + *** toRec (OUT) obiect din vjtva_coloane corespunzator IdJtva + + Local lnIdJtva, lcAlias, lcCursor, llCursorJTvaColoane, lcTipJ + If !Empty(m.tcTipJ) + lcTipJ = Upper(m.tcTipJ) + Else + lcTipJ = [JV] + Endif + + llCursorJTvaColoane = .T. + lcAlias = Select() + lcCursor = [crsjtvacoltemp] + lnIdJtva = tnIdJtva + If !Used('jtva_coloane') + llCursorJTvaColoane = .F. + update_jtva_coloane(m.lcTipJ) + Endif + *copiaza_structura_cursor([jtva_coloane],lcCursor) + Select * From jtva_coloane Into Cursor (lcCursor) + Select (lcCursor) + Scatter Name toRec Blank Memo + Locate For id_jtva_coloana = tnIdJtva + If Found() + If !Empty(tnTvaIncasare) + lnIdJtva = Nvl(id_jtva_neex, id_jtva_coloana) + Else + lnIdJtva = Nvl(id_jtva_ex, id_jtva_coloana) + Endif + + Locate For id_jtva_coloana = m.lnIdJtva + If Found() + Scatter Name toRec Memo + Endif + Endif + + Use In (Select(lcCursor)) + If !llCursorJTvaColoane + Use In jtva_coloane + Endif + Select (lcAlias) + Return lnIdJtva +Endfunc + +*********************************************************************************** +*** Apeleaza getIdTva si intoarce un obiect din vjtva_coloane +*********************************************************************************** +Function GeTvaColoana + Lparameters tnIdJtva, tnTvaIncasare, tcTipJ + + Local loRec + getIdTva(tnIdJtva, tnTvaIncasare, tcTipJ, @loRec) + + Return loRec +Endfunc + +*********************************************************************************** +*** tva.id_tva exigibil/neexigibil corespunzator id_tva selectat +*********************************************************************************** +Function getIdTva + Lparameters tnIdTva, tnTvaIncasare, tcTipJ, toRec + + *** tnTVAIncasare = 0 > tnIdTva este neexigibil + *** tcTipJ: JC, JV + *** toRec (OUT) obiect din vjtva_coloane corespunzator IdJtva + + Local lnIdTva, lnIdJTvaColoana, lcAlias, lcCursor, llCursorJTvaColoane, lcTipJ + + If !Empty(m.tcTipJ) + lcTipJ = Upper(m.tcTipJ) + Else + lcTipJ = [JV] + Endif + + llCursorJTvaColoane = .T. + lcAlias = Select() + lcCursor = [crsjtvacoltemp] + lnIdTva = tnIdTva + If !Used('jtva_coloane') + llCursorJTvaColoane = .F. + update_jtva_coloane(m.lcTipJ) + Endif + *copiaza_structura_cursor([jtva_coloane],lcCursor) + Select * From jtva_coloane Into Cursor (lcCursor) + Select (lcCursor) + Scatter Name toRec Blank Memo + Locate For id_tva = tnIdTva + If Found() + If !Empty(tnTvaIncasare) + lnIdJTvaColoana = Nvl(id_jtva_neex, id_jtva_coloana) + Else + lnIdJTvaColoana = Nvl(id_jtva_ex, id_jtva_coloana) + Endif + Locate For id_jtva_coloana = lnIdJTvaColoana + If Found() + lnIdTva = Nvl(id_tva, id_jtva_coloana) + + Locate For id_jtva_coloana = m.lnIdTva + If Found() + Scatter Name toRec Memo + Endif + Endif + Endif + + Use In (Select(lcCursor)) + If !llCursorJTvaColoane + Use In jtva_coloane + Endif + Select (lcAlias) + Return lnIdTva +Endfunc + +************************************ +*** creeaza cursorul cIsJTVACE la prima apelare a functiei si intoarce .T. daca tnIdJTVA este achizitie CE +************************************ +Function IsJCJtvaCE + Lparameters tnIdJtva + + Local llSucces, llReturn, lcSelect + llReturn = .F. + lcSelect = Select() + If !Used('cIsJTVACE') + llSucces = goExecutor.oExecuta([SELECT id_jtva_coloana as id_jtva FROM jtva_coloane WHERE denumire like 'TVA%' and denumire like '%CE%'], 'cIsJTVACE') + Endif + If Used('cIsJTVACE') + Select cIsJTVACE + Locate For id_jtva = m.tnIdJtva + llReturn = Found() + Endif + + Select (m.lcSelect) + Return m.llReturn +Endfunc + + +*********************** +*** Intoarce jtva_coloane.taxcode aferent unui id_jtva_coloana, Partener +FUNCTION GetTaxCodeIdPart + LPARAMETERS tnAn, tnLuna, tdDataAct, tnIdJTVA, tnIdPart, tlN50, tlN100, tlNeexigibil + * tnAn = anul curent + * tnLuna = luna curenta + * tdDataAct = data documentului, pentru facturi de regularizare inregistrate cu data din alta luna decat luna curenta + * tnIdJTVA = explicatia TVA + * tnIdPart = id partener pentru verificare furnizor TVA Incasare + * tlN50 = operatia are limitare deducere 50% (Taxa SAFT tip: Achizitie deductibil 50%) + * tlN100 = operatia are limitare deducere 100% (Taxa SAFT tip: Achizitie nedeductibil) + * tlNeexigibil = factura nesosita/neintocmita 408/418 + + * tlN50, tlN100 nu se mai folosesc + * baza facturii cu limitare deducere are codul ach. deductibile 100%, + * iar linia 6xx = 4426 limitare deducere are codul "ach. nedeductibile 50% cota TVA 19/9/5%" + * in loc de baza facturii "ach. nedeductibile 50%" + + Local loPartenerRTVAI As "empty" + Local loPartenerRTVAIX As "empty" + Local lcCodFiscal, lcNumePart, lcSelect, ldDataAct, llFurnizorRTVAI, llJC, llRegularizare + Local llUsedJtvaColoane, lnIdPart, lnTaxCode + + lcSelect = SELECT() + lnTaxCode = CAST(null as N(6)) + + IF !(TYPE('gl406') = 'L' AND m.gl406) + RETURN m.lnTaxCode + ENDIF + + lnIdPart = NVL(m.tnIdPart,0) + llFurnizorRTVAI = .F. + ldDataAct = IIF(!EMPTY(m.tdDataAct), m.tdDataAct, DATE(m.tnAn, m.tnLuna, 1)) + llRegularizare = YEAR(m.ldDataAct) * 12 + MONTH(m.ldDataAct) < m.tnAn*12+m.tnLuna + + llUsedJtvaColoane = Used('jtva_coloane') + If !m.llUsedJtvaColoane + update_jtva_coloane() + ENDIF + + llJC = .F. + IF SEEK(m.tnIdJTVA,'jtva_coloane','id_jtva') + llJC = (jtva_coloane.jc = 1) + ENDIF + If m.llJC AND !EMPTY(m.lnIdPart) + lnIdPart = Nvl(m.tnIdPart,0) + lcNumePart = "" + lcCodFiscal = GetCodFiscalPartenerById(m.lnIdPart) + + loPartenerRTVAIX = Createobject("empty") + loPartenerRTVAI = Createobject("empty") + AddProperty(loPartenerRTVAIX, "cod_fiscal", m.lcCodFiscal) + AddProperty(loPartenerRTVAIX, "denumire", m.lcNumePart) + AddProperty(loPartenerRTVAIX, "dataact", m.ldDataAct) + VERIFICA_RTVAI(loPartenerRTVAIX, @loPartenerRTVAI) + + llFurnizorRTVAI = loPartenerRTVAI.leinRtvai + Endif + + IF !m.llUsedJtvaColoane + USE IN (SELECT('jtva_coloane')) + ENDIF + + lnTaxCode = GetTaxCode(m.tnAn, m.tnLuna, m.tdDataAct, m.tnIdJTVA, m.llFurnizorRTVAI, tlN50, tlN100, tlNeexigibil) + + SELECT (m.lcSelect) + + RETURN m.lnTaxCode +ENDFUNC && GetTaxCodeIdPart + + +*********************** +*** Intoarce jtva_coloane.taxcode aferent unui id_jtva_coloana, furnizor tva incasare +FUNCTION GetTaxCode + LPARAMETERS tnAn, tnLuna, tdDataAct, tnIdJTVA, tlFurnizorRTVAI, tlN50, tlN100, tlNeexigibil + * tnAn = anul curent + * tnLuna = luna curenta + * tdDataAct = data documentului, pentru facturi de regularizare inregistrate cu data din alta luna decat luna curenta + * tnIdJTVA = explicatia TVA + * tlFurnizoriRTVAI = furnizor TVA Incasare + * tlN50 = inregistrarea corespunde explicatiei TVA Limitare deducere 50% (Taxa SAFT tip: Achizitie nedeductibil 50%) + * tlN100 = inregistrarea corespunde explicatiei TVA Limitare deducere 100% (Taxa SAFT tip: Achizitie nedeductibil) + * tlNeexigibil = factura nesosita/neintocmita 408/418 + + * tlN50, tlN100 se folosesc doar pentru nota contabila cu explicatie TVA Limitare deducere TVA, in pereche cu Explicatie TVA Ach. 19/9/5%, astfel incat sa intoarca codul Ach neded. 50%/100% 19/9/5% + * baza facturii cu limitare deducere are codul ach. deductibile 100%, + * iar linia 6xx = 4426 limitare deducere are codul "ach. nedeductibile 50% cota TVA 19/9/5%" + * tlN50, tlN100 sunt .T. doar pentru linia 6xx = 4426 limitare deducere TVA + + LOCAL lcSelect, llJtvaColoane, loTVA + Local llFurnizorRTVAI, llRegularizare, llUsedJtvaColoane, lnTaxCode, ldDataAct + lcSelect = SELECT() + lnTaxCode = CAST(null as N(6)) + + IF !(TYPE('gl406') = 'L' AND m.gl406) + RETURN m.lnTaxCode + ENDIF + llFurnizorRTVAI = m.tlFurnizorRTVAI + ldDataAct = IIF(!EMPTY(m.tdDataAct), m.tdDataAct, DATE(m.tnAn, m.tnLuna, 1)) + llRegularizare = YEAR(m.ldDataAct) * 12 + MONTH(m.ldDataAct) < m.tnAn*12+m.tnLuna + llUsedJtvaColoane = USED("jtva_coloane_taxcode") + + * Generez jtva_coloane_taxcode la prima utilizare si il las deschis + If !m.llUsedJtvaColoane + update_jtva_coloane("", "jtva_coloane_taxcode", 6) + ENDIF + + IF SEEK(m.tnIdJTVA, "jtva_coloane_taxcode", "id_jtva") + SELECT jtva_coloane_taxcode + SCATTER NAME loTVA + WITH loTVA + * codul taxa regularizare are prioritate fata de ach. furnizor tva incasare + lnTaxCode = .taxcode + DO CASE + CASE m.tlNeexigibil AND !EMPTY(NVL(.taxcode_neexigibil,0)) + lnTaxCode = .taxcode_neexigibil + CASE m.tlN50 AND m.llFurnizorRTVAI AND !EMPTY(NVL(.taxcode_n50_tvai,0)) + lnTaxCode = .taxcode_n50_tvai + CASE m.tlN50 + lnTaxCode = .taxcode_n50 + CASE m.tlN100 AND m.llFurnizorRTVAI AND !EMPTY(NVL(.taxcode_n100,0)) + lnTaxCode = .taxcode_n100 + CASE m.tlN100 + lnTaxCode = .taxcode_n100 + CASE m.llRegularizare AND !EMPTY(NVL(.taxcode_regularizare,0)) + lnTaxCode = .taxcode_regularizare + CASE m.llFurnizorRTVAI AND !EMPTY(NVL(.taxcode_tvai,0)) + lnTaxCode = .taxcode_tvai + ENDCASE + ENDWITH + ENDIF + + SELECT (m.lcSelect) + + RETURN m.lnTaxCode +ENDFUNC && GetTaxCode + +*********************** +*** Intoarce cod mecanism plata SAFT aferent unui fel document +FUNCTION GetPaymentCode + LPARAMETERS tnIdFdoc + LOCAL lcSelect, lnIdFdoc + Local llUsedFdoc, lnPaymentCode + lcSelect = SELECT() + lnPaymentCode = NULL + + lnIdFdoc = NVL(m.tnIdFdoc,0) + + llUsedFdoc = Used('crsFdoc') + If !m.llUsedFdoc + update_fdoc() + ENDIF + + select paymentcode FROM crsFdoc WHERE id_fdoc = m.lnIdFdoc INTO CURSOR crsFdocTemp + + SELECT crsFdocTemp + GO TOP + lnPaymentCode = ALLTRIM(NVL(paymentcode,'')) + + IF !m.llUsedFdoc + USE IN (SELECT('crsFdoc')) + ENDIF + + USE IN (SELECT('crsFdocTemp')) + SELECT (m.lcSelect) + + RETURN m.lnPaymentCode +ENDFUNC && GetPaymentCode + +******************************************************************************** +*** concateneaza valorile dintr-o coloana de pe mai multe randuri +*** tcAlias = cursorul din care se face concatenarea +*** tcAggColumn = coloana care se concateneaza +*** tlDontIgnoreEmptyValues Default .F., .T = concateneaza si valorile empty(tcAggColumn) +*** tcSeparator = separatorul valorilor concatenate. Default = [,] +*** tcFilterColumn1..tcFilterColumn20 = coloana pentru filtrare/grupare +*** tcFilterValue1..tcFilterValue20 = valoarea coloanei pentru filtrare/grupare +*** intoare un sir de caractere +*** ex: +*!* CREATE CURSOR crsInfo (nract I, dataact D, info c(10), suma n(16,2)) +*!* INSERT INTO crsInfo(nract, dataact, info, suma) values(1, DATE(), 'a',1.00) +*!* INSERT INTO crsInfo(nract, dataact, info, suma) values(1, DATE(), 'b',1.00) +*!* INSERT INTO crsInfo(nract, dataact, info, suma) values(1, DATE(), 'c',1.00) +*!* INSERT INTO crsInfo(nract, dataact, info, suma) values(2, DATE(), 'd',1.00) +*!* INSERT INTO crsInfo(nract, dataact, info, suma) values(2, DATE(), 'e',1.00) +*!* INSERT INTO crsInfo(nract, dataact, info, suma) values(2, DATE(), 'f',1.00) +*!* INSERT INTO crsInfo(nract, dataact, info, suma) values(2, DATE(), 'g',1.00) +*!* INSERT INTO crsInfo(nract, dataact, info, suma) values(3, DATE(), 'a',1.00) +*!* INSERT INTO crsInfo(nract, dataact, info, suma) values(3, DATE()-1, 'x',1.00) + +*!* SELECT nract, dataact, SUM(suma) as suma, ; +*!* StringAgg('crsInfo', 'info', .F., [ ], [nract], nract, [dataact], dataact) as infoagg ; +*!* FROM crsinfo ; +*!* group by nract, dataact ; +*!* INTO CURSOR crsRezultat +******************************************************************************** +Function StringAgg + Lparameters tcAlias, tcAggColumn, tlDontIgnoreEmptyValues, tcSeparator, ; + tcFilterColumn1, tcFilterValue1, tcFilterColumn2, tcFilterValue2, tcFilterColumn3, tcFilterValue3, tcFilterColumn4, tcFilterValue4, ; + tcFilterColumn5, tcFilterValue5, tcFilterColumn6, tcFilterValue6, tcFilterColumn7, tcFilterValue7, tcFilterColumn8, tcFilterValue8, ; + tcFilterColumn9, tcFilterValue9, tcFilterColumn10, tcFilterValue10, tcFilterColumn11, tcFilterValue11, tcFilterColumn12, tcFilterValue12, ; + tcFilterColumn13, tcFilterValue13, tcFilterColumn14, tcFilterValue14, tcFilterColumn15, tcFilterValue15, tcFilterColumn16, tcFilterValue16, ; + tcFilterColumn17, tcFilterValue17, tcFilterColumn18, tcFilterValue18, tcFilterColumn19, tcFilterValue19, tcFilterColumn20, tcFilterValue20 + + + Local lcCursor, lcRezultat, lcSelect, lcSql, lcSeparator, loEx As Exception + Local lcFilter, lcFilterColumn, lcFilterColumnEval, lcFilterValue, i + + lcRezultat = "" + lcSeparator = Iif(Type('tcSeparator') = 'C', tcSeparator, [,]) + lcSelect = Select() + lcCursor = Sys(2015) + lcFilter = "" + For i = 1 To 20 + lcFilterColumn = 'tcFilterColumn' + Alltrim(Str(i)) && tcFilterColumn1 + If Type(lcFilterColumn) <> 'C' + Exit + Endif + lcFilterColumnEval = Evaluate(m.lcFilterColumn) && [nract] + + lcFilterValue = 'tcFilterValue' + Alltrim(Str(i)) && tcFilterValue1 + + lcFilter = lcFilter + Iif(Type(m.lcFilterColumn) = 'C' And !Empty(lcFilterColumnEval), m.lcFilterColumnEval + [ = ] + lcFilterValue, "") + [ and ] + Endfor + If !Empty(m.lcFilter) + lcFilter = Left(m.lcFilter, Len(m.lcFilter) - 5) + Endif + lcFilter = Iif(!tlDontIgnoreEmptyValues, [!EMPTY(] + m.tcAggColumn + [)], []) + Iif(!Empty(m.lcFilter), [ and ], []) + m.lcFilter + + lcSql = [SELECT distinct ] + tcAggColumn + [ as aggcolumn] + ; + [ FROM ] + m.tcAlias + ; + Iif(!Empty(m.lcFilter), [ WHERE ] + m.lcFilter, []) + ; + [ INTO CURSOR ] + m.lcCursor + + &lcSql + + Select (m.lcCursor) + Scan + lcRezultat = m.lcRezultat + Alltrim(Transform(aggcolumn)) + lcSeparator + Endscan + Use In (Select(m.lcCursor)) + If !Empty(m.lcRezultat) + lcRezultat = Left(m.lcRezultat, Len(m.lcRezultat) - Len(m.lcSeparator)) + Endif + + Select (m.lcSelect) + Return m.lcRezultat +Endfunc && StringAgg + + +Function GetReportFooter + Lparameters tnPageTotal + + Local lcReportFooter, llRaportDataOra, lcDataOra + llRaportDataOra = Iif(Type('glRaportDataOra') = 'L', m.glRaportDataOra, .T.) + lcDataOra = Iif(Type('pcDataOra') = 'U', Get_Ora(2), m.pcDataOra) + + lcReportFooter = m.gcCopyRight + " - Pagina " + Allt(Str(_Pageno)) + "/" + Allt(Str(m.tnPageTotal)) + Iif(m.llRaportDataOra, " " + m.lcDataOra, "") + Return m.lcReportFooter +Endfunc +********************************************************************************************************* +Procedure creeaza_backup_cursoare + Lparameters tcOriginal + Local lcBackup + lcBackup = [bckp] + tcOriginal + sterge_backup_cursoare(tcOriginal) + copiaza_structura_cursor(tcOriginal, lcBackup) + Select * From (tcOriginal) Into Cursor (lcBackup) + Release lcBackup +Endproc && creeaza_backup_cursoare +********************************************************************************************************* +Procedure repune_backup_cursoare + Lparameters tcOriginal + Local lcBackup + lcBackup = [bckp] + tcOriginal + If Used(lcBackup) + Select (tcOriginal) + lnRecno = Recno() + Select * From (lcBackup) Into Cursor (tcOriginal) Readwrite + Use In (lcBackup) + Select (tcOriginal) + If Reccount(tcOriginal) > 0 + Go Min(lnRecno, Reccount(tcOriginal)) + Else + Go Top + Endif + Endif + Release lcBackup +Endproc && repune_backup_cursoare +********************************************************************************************************* +Procedure sterge_backup_cursoare + Lparameters tcOriginal + Local lcBackup + lcBackup = [bckp] + tcOriginal + If Used(lcBackup) + Use In (lcBackup) + Endif + Release lcBackup +Endproc && sterge_backup_cursoare +********************************************************************************************************* +Define Class oCursoareProcedura As Custom + cNumeProcedura = [] + Dimension aCursoareDeschiseI(1, 1) + Dimension aExceptiiCursoare(1) + + Procedure Init + Lparameters tcNumeProcedura + This.cNumeProcedura = tcNumeProcedura + Aused(This.aCursoareDeschiseI) + Endproc + + Function getNumeProcedura + Return This.cNumeProcedura + Endfunc + + Procedure setListaExceptii + Lparameters tcListaExceptii + Local Array laTemp(1) + lista2array(Upper(tcListaExceptii), @laTemp, [,]) + Acopy(laTemp, This.aExceptiiCursoare) + Endproc + + Procedure inchideCursoare + Local Array laCursoareDeschiseF[1, 1] + Local lnIndex + *!* cursoarele de la inceput + *!* CREATE CURSOR crs(nume c(200),nr n(10)) + *!* SELECT crs + *!* APPEND FROM array This.aCursoareDeschiseI + *!* BROWSE + *!* cursoarele de la final + *!* CREATE CURSOR crs2(nume c(200),nr n(10)) + *!* SELECT crs2 + *!* Aused(laCursoareDeschiseF) + *!* APPEND FROM array laCursoareDeschiseF + *!* BROWSE + For lnIndex = 1 To Aused(laCursoareDeschiseF) + If Ascan(This.aCursoareDeschiseI, laCursoareDeschiseF[lnIndex, 1]) = 0 And ; + Ascan(This.aExceptiiCursoare, laCursoareDeschiseF[lnIndex, 1]) = 0 + Use In (laCursoareDeschiseF[lnIndex, 1]) + Endif + Endfor + *!* exceptii + *!* CREATE CURSOR crs3(nume c(200),nr n(10)) + *!* SELECT crs3 + *!* APPEND FROM array This.aExceptiiCursoare + *!* BROWSE + *!* cursoare ramase + *!* CREATE CURSOR crs4(nume c(200),nr n(10)) + *!* SELECT crs4 + *!* Aused(laCursoareDeschiseF) + *!* APPEND FROM array laCursoareDeschiseF + *!* BROWSE + Endproc + +Enddefine +********************************************************************************************************* +Define Class oLogCursoare As Custom + && cursor in care tin numele tuturor cursoarelor deschise + oDetaliiProc = Null + lGlobal = .F. + + Procedure Init + Lparameters tlGlobal + This.oDetaliiProc = Createobject("collection") + This.lGlobal = tlGlobal + If !This.lGlobal + This.salveaza(Program(Program(-1) - 1)) + Endif + Endproc + + Procedure seteazaExceptii + Lparameters tcListaExceptii + *!* lista exceptii contine numele cursoarelor care nu se inchid la iesirea din procedura + Local lnIndex + lnIndex = This.cautaIndex(Iif(This.lGlobal, Program(Program(-1) - 1), "")) + This.oDetaliiProc.Item[lnIndex].setListaExceptii(tcListaExceptii) + Endproc + + Function cautaIndex + Lparameters tcNumeProcedura + Local lnIndexCautat, lnIndex + If !Empty(tcNumeProcedura) && sau If This.lGlobal + For lnIndex = 1 To This.oDetaliiProc.Count + If This.oDetaliiProc.Item[lnIndex].getNumeProcedura() == tcNumeProcedura + lnIndexCautat = lnIndex + Exit + Endif + Endfor + Else + lnIndexCautat = 1 + Endif + Return lnIndexCautat + Endfunc + + Procedure salveaza + *!* daca obiectul de tip oLogCursoare a fost definit global, atunci se apeleaza fara parametru, + *!* la inceputul fiecarei proceduri pentru care se doreste sa se tina istoricul cursoarelor deschise + Lparameters tcNumeProcedura + This.oDetaliiProc.Add(Createobject("oCursoareProcedura", Evl(tcNumeProcedura, Program(Program(-1) - 1)))) + Endproc + + Procedure inchideCursor + Lparameters tcNumeCursor + If Used(tcNumeCursor) + Use In (tcNumeCursor) + Endif + Endproc + + Procedure inchideCursoare + *!* daca obiectul de tip oLogCursoare a fost definit global, atunci se apeleaza + *!* inainte de fiecare RETURN din procedura respectiva + Local lcSelect, lnIndex + lcSelect = Select() + lnIndex = This.cautaIndex(Iif(This.lGlobal, Program(Program(-1) - 1), "")) + With This.oDetaliiProc + .Item[lnIndex].inchideCursoare() + .Remove(lnIndex) + Endwith + If Used(lcSelect) + Select (lcSelect) + Endif + Endproc + + Procedure Destroy + If !This.lGlobal + This.inchideCursoare() + Endif + Endproc + +Enddefine +********************************************************************************************************* + +******************************************* +*** Completare analitice pe baza de grupuri in Gestiune.NIR.inainte_de_do_termin, Contabilitate.actbaza2007.adunadate +******************************************* +Procedure completare_gruputil_analitice + *!* completez analiticele lipsa din tabelul config_gruputil_analitice + lnSucces = Update_GrupUtilAnalitice() && in updateserver.prg + If lnSucces > 0 + Select crsGrupUtilAnalitice + Scan + Scatter Name loRec Memo + Update actactan Set ascd = loRec.acont Where Empty(Nvl(ascd, '')) And Upper(Alltrim(scd)) = Upper(Alltrim(loRec.Cont)) + Update actactan Set ascc = loRec.acont Where Empty(Nvl(ascc, '')) And Upper(Alltrim(scc)) = Upper(Alltrim(loRec.Cont)) + Endscan + Use In (Select('crsGrupUtilAnalitice')) + Endif +Endproc && completare_gruputil_analitice + +******************************************* +*** Completare analitice pe baza de explicatii tva in Gestiune.NIR.inainte_de_do_termin, Contabilitate.actbaza2007.adunadate, ROAFACTURARE, ROACOMENZI, ROACONTRACTE pack_facturare +*** bun pentru analitice pe baza de cote TVA la 4426, 4428 (vezi AUTOHAUS, ABCVAL) +******************************************* +Procedure completare_tva_analitice + lnSucces = Update_TVAAnalitice() && in updateserver.prg + If lnSucces > 0 + Select crsTVAAnalitice + Scan + Scatter Name loRec Memo + Update actactan Set ascd = loRec.acont Where Empty(Nvl(ascd, '')) And Upper(Alltrim(scd)) = Upper(Alltrim(loRec.Cont)) And id_jtva_coloana = loRec.id_jtva_coloana + Update actactan Set ascc = loRec.acont Where Empty(Nvl(ascc, '')) And Upper(Alltrim(scc)) = Upper(Alltrim(loRec.Cont)) And id_jtva_coloana = loRec.id_jtva_coloana + Endscan + Use In (Select('crsTVAAnalitice')) + Endif +Endproc && completare_tva_analitice + +*** Completare taxname in actactan (frm_introd_compact.la_iesire) +PROCEDURE completare_taxname + LOCAL lcSelect + lcSelect = SELECT() + + IF USED('saft_taxtable') + UPDATE actactan SET taxname = Iif(Seek(actactan.taxcode,'saft_taxtable','taxcode'),saft_taxtable.taxname,'') + ENDIF + + SELECT (m.lcSelect) +ENDPROC && completare_taxname + +*** Completare paymentname in actactan (frm_introd_compact.la_iesire) +PROCEDURE completare_paymentname + LOCAL lcSelect + lcSelect = SELECT() + + IF USED('saft_mecanisme_plati') + UPDATE actactan SET paymentname = Iif(Seek(actactan.paymentcode,'saft_mecanisme_plati','mcode'),saft_mecanisme_plati.paymentname,'') + ENDIF + + SELECT (m.lcSelect) +ENDPROC && completare_taxname + + +*** Completare explicatie_tva in actactan (frm_introd_compact.la_iesire) +PROCEDURE completare_explicatie_tva + LOCAL lcSelect, lcCursor + lcSelect = SELECT() + + lcCursor = SYS(2015) + IF !USED(m.lcCursor) + update_jtva_coloane("", m.lcCursor,6) + ENDIF + + IF USED(m.lcCursor) + UPDATE actactan SET explicatie_tva = Iif(Seek(actactan.id_jtva_coloana, m.lcCursor,'id_jtva'), &lcCursor..denumire,'') + ENDIF + + USE IN (SELECT(m.lcCursor)) + + SELECT (m.lcSelect) +ENDPROC && completare_explicatie_tva + +************************************** +*** Cauta partenerul dupa cod fiscal si intoarce un obiect sau NULL +************************************** +Procedure GetPartenerByCodFiscal + Lparameters tcCodFiscal + Private pcCodFiscal + Local lcSql, lnSucces, lcSelect, loPartener + lcSelect = SELECT() + loPartener = NULL + + pcCodFiscal = Alltrim(Strtran(Strtran(Upper(Alltrim(m.tcCodFiscal)), ' ', ''), 'RO', '')) + + lcSql = [SELECT * from vnom_parteneri where id_part = (select MAX(id_part) as id_part from nom_parteneri where replace(replace(UPPER(cod_fiscal),' ', ''), 'RO', '') = ?pcCodFiscal and sters = 0 and inactiv = 0)] + llSucces = goExecutor.oExecuta(m.lcSql, "cPartenerTemp") + If m.llSucces + SELECT cPartenerTemp + SCATTER NAME loPartener + ENDIF + USE IN (SELECT('cPartenerTemp')) + + SELECT (m.lcSelect) + Return loPartener +Endproc + +************************************** +*** Cauta partenerul dupa denumire si intoarce un obiect sau NULL +************************************** +Procedure GetPartenerByDenumire + Lparameters tcDenumire + Private pcDenumire + Local lcSql, lnSucces, lcSelect, loPartener + lcSelect = SELECT() + loPartener = NULL + + pcDenumire = Alltrim(Upper(tcDenumire)) + + lcSql = [SELECT * from vnom_parteneri where id_part = (select MAX(id_part) as id_part from nom_parteneri where TRIM(UPPER(denumire)) = ?pcDenumire and sters = 0 and inactiv = 0)] + llSucces = goExecutor.oExecuta(m.lcSql, "cPartenerTemp") + If m.llSucces + SELECT cPartenerTemp + SCATTER NAME loPartener + ENDIF + USE IN (SELECT('cPartenerTemp')) + + SELECT (m.lcSelect) + Return loPartener +Endproc + +************************************** +*** Cauta partenerul dupa codul IBAN si intoarce un obiect sau NULL +************************************** +Procedure GetPartenerByContBanca + Lparameters tcContBanca + Private pcContBanca + Local lcSql, lnSucces, lcSelect, loPartener + lcSelect = SELECT() + loPartener = NULL + + pcContBanca = Alltrim(TRANSFORM(m.tcContBanca)) + + lcSql = [SELECT * from vnom_parteneri where id_part = (select MAX(id_part) as id_part from nom_parteneri where TRIM(UPPER(cont_banca)) = ?pcContBanca and sters = 0 and inactiv = 0)] + llSucces = goExecutor.oExecuta(m.lcSql, "cPartenerTemp") + If m.llSucces + SELECT cPartenerTemp + SCATTER NAME loPartener + ENDIF + USE IN (SELECT('cPartenerTemp')) + + SELECT (m.lcSelect) + Return loPartener +ENDPROC + +************************************** +*** Intoarce Id Partener din nomenclatorul de parteneri dupa codul fiscal +************************************** +Procedure GetIdPartenerByCodFiscal + Lparameters tcCodFiscal, tcDenumire + * tcCodFiscal: IN + * tcDenumire: OUT + Private pnIdPartener, pcCodFiscal + Local lcSql, lnSucces, lcSelect + lcSelect = SELECT() + pnIdPartener = 0 + pcCodFiscal = Alltrim(Strtran(Strtran(Upper(Alltrim(m.tcCodFiscal)), ' ', ''), 'RO', '')) + + lcSql = [select MAX(id_part) as id_part from nom_parteneri where replace(replace(UPPER(cod_fiscal),' ', ''), 'RO', '') = ?pcCodFiscal and sters = 0 and inactiv = 0] + lnSucces = goExecutor.oSelect2Value(m.lcSql, @pnIdPartener) + If m.lnSucces < 0 + amessagebox(goExecutor.cEroare, 0 + 48, _Screen.Caption) + ENDIF + + SELECT (m.lcSelect) + Return Nvl(m.pnIdPartener, 0) +Endproc + +************************************** +*** Intoarce Id Partener din nomenclatorul de parteneri dupa denumire +************************************** +Procedure GetIdPartenerByDenumire + Lparameters tcDenumire + Private pnIdPartener, pcDenumire + Local lcSql, lnSucces, lcSelect + lcSelect = SELECT() + pnIdPartener = 0 + pcDenumire = Alltrim(Upper(tcDenumire)) + + lcSql = [select MAX(id_part) as id_part from nom_parteneri where TRIM(UPPER(denumire)) = ?pcDenumire and sters = 0 and inactiv = 0] + lnSucces = goExecutor.oSelect2Value(m.lcSql, @pnIdPartener) + If m.lnSucces < 0 + amessagebox(goExecutor.cEroare, 0 + 48, _Screen.Caption) + ENDIF + SELECT (m.lcSelect) + Return Nvl(m.pnIdPartener, 0) +Endproc + +************************************** +*** Intoarce Id Partener din nomenclatorul de parteneri dupa contul bancar +************************************** +Procedure GetIdPartenerByContBanca + Lparameters tcCont + Private pnIdPartener, pcCont + Local lcSql, lnSucces + pnIdPartener = 0 + pcCont = Alltrim(Upper(tcCont)) + + lcSql = [select MAX(id_part) as id_part from nom_parteneri where TRIM(UPPER(cont_banca)) = ?pcCont and sters = 0 and inactiv = 0] + lnSucces = goExecutor.oSelect2Value(m.lcSql, @pnIdPartener) + If m.lnSucces < 0 + amessagebox(goExecutor.cEroare, 0 + 48, _Screen.Caption) + Endif + Return Nvl(m.pnIdPartener, 0) +Endproc + +************************************** +*** Intoarce denumire parteneri din nomenclatorul de parteneri dupa Id +************************************** +Procedure GetDenumirePartenerById + Lparameters tnIdPart + Private pnIdPartener, pcDenumire + Local lcSql, lnSucces, lcSelect + + lcSelect = SELECT() + pnIdPartener = tnIdPart + pcDenumire = '' + + lcSql = [select MAX(denumire) as denumire from nom_parteneri where id_part = ?pnIdPartener] + lnSucces = goExecutor.oSelect2Value(m.lcSql, @pcDenumire) + If m.lnSucces < 0 + amessagebox(goExecutor.cEroare, 0 + 48, _Screen.Caption) + ENDIF + SELECT (m.lcSelect) + Return Nvl(m.pcDenumire, '') +Endproc + +************************************** +*** Intoarce cod fiscal parteneri din nomenclatorul de parteneri dupa Id +************************************** +Procedure GetCodFiscalPartenerById + Lparameters tnIdPart + Private pnIdPartener, pcDenumire + Local lcSql, lnSucces, lcSelect + + lcSelect = SELECT() + pnIdPartener = tnIdPart + pcCodFiscal = '' + + lcSql = [select MAX(cod_fiscal) as cod_fiscal from nom_parteneri where id_part = ?pnIdPartener] + lnSucces = goExecutor.oSelect2Value(m.lcSql, @pcCodFiscal) + If m.lnSucces < 0 + amessagebox(goExecutor.cEroare, 0 + 48, _Screen.Caption) + ENDIF + SELECT (m.lcSelect) + Return Nvl(m.pcCodFiscal, '') +Endproc + + +************************************ +*** Intoarce un obiect cu (id_util, id_partener, partener) dupa id_util +************************************ +Procedure GetPartenerByUtil + Lparameters tnIdUtil + Private pnIdUtil + Local lcSql, llSucces, loPartener + pnIdUtil = m.tnIdUtil + loPartener = Createobject("empty") + AddProperty(loPartener, "id_util", m.pnIdUtil) + AddProperty(loPartener, "id_partener", 0) + AddProperty(loPartener, "partener", "") + + lcSql = [select id_util, id_partener, partener from vutilizatori_rol_intern where id_util = ?pnIdUtil] + llSucces = goExecutor.oExecuta(m.lcSql, 'cPartenerByUtilTemp') + If m.llSucces + Select cPartenerByUtilTemp + loPartener.id_partener = Nvl(id_partener, 0) + loPartener.partener = Alltrim(Nvl(partener, '')) + Use In (Select('cPartenerByUtilTemp')) + Endif + Return loPartener +Endproc + + +************************************** +* Genereaza toate variantele de [nume prenume1 prenume2] +* = GetNamePermutations("Popescu Ion Maria", .T.) && exclude varianta originala +* = GetNamePermutations("Popescu Ion Maria", .F.) && include toate variantele +************************************** +Function GetNamePermutations + Lparameters lcFullName, llExcludeOriginal + Local lcResult, lnWordCount, i + Local Array laWords[1] + PRIVATE pnMaxPerms, pnPermCount + pnMaxPerms = 10 && numarul maxim de permutari + pnPermCount = 0 + + * Separare cuvinte n array + lnWordCount = Getwordcount(lcFullName) + If lnWordCount < 2 + Return "" + Endif + + * LIMITARE LA MAXIM 4 CUVINTE 24 PERMUTARI + If lnWordCount > 4 + lnWordCount = 4 + * Reconstruim numele doar cu primele 4 cuvinte + lcFullName = Getwordnum(lcFullName, 1) + " " + ; + Getwordnum(lcFullName, 2) + " " + ; + Getwordnum(lcFullName, 3) + " " + ; + Getwordnum(lcFullName, 4) + + ENDIF + + Dimension laWords[lnWordCount] + For i = 1 To lnWordCount + laWords[i] = Getwordnum(lcFullName, i) + Endfor + + * Cazul special pentru 2 cuvinte + If lnWordCount = 2 + If llExcludeOriginal + Return laWords[2] + " " + laWords[1] + Endif + Return lcFullName + ";" + laWords[2] + " " + laWords[1] + Endif + + * Generam toate permutarile posibile n lcResult + lcResult = "" + Local Array laUsed[1], laCurrentPerm[1] + Dimension laUsed[lnWordCount], laCurrentPerm[lnWordCount] + Store .F. To laUsed + + pnPermCount = 0 && numarul de permutari + + * Primul cuvnt poate fi oricare + For i = 1 To lnWordCount + laUsed[i] = .T. + laCurrentPerm[1] = laWords[i] + GenerateWordPerms(1, @laWords, @laUsed, @laCurrentPerm, lnWordCount, @lcResult) + laUsed[i] = .F. + Endfor + + * Filtram rezultatele + Local lcFirstWord, lcLastWord, lcFiltered + lcFirstWord = laWords[1] + lcLastWord = laWords[lnWordCount] + lcFiltered = "" + + Local lnPos, lcLine + lnPos = At(";", lcResult) + Do While lnPos > 0 + lcLine = Left(lcResult, lnPos - 1) + lcResult = Substr(lcResult, lnPos + 1) + + * Verificam daca primul ?i ultimul cuvnt sunt corecte + If (Getwordnum(lcLine, 1) = lcFirstWord Or Getwordnum(lcLine, 1) = lcLastWord) And ; + (Getwordnum(lcLine, lnWordCount) = lcFirstWord Or Getwordnum(lcLine, lnWordCount) = lcLastWord) + If !llExcludeOriginal Or lcLine != lcFullName + lcFiltered = lcFiltered + lcLine + ";" + Endif + Endif + + lnPos = At(";", lcResult) + Enddo + + * Verificam ?i ultima linie + If !Empty(lcResult) + If (Getwordnum(lcResult, 1) = lcFirstWord Or Getwordnum(lcResult, 1) = lcLastWord) And ; + (Getwordnum(lcResult, lnWordCount) = lcFirstWord Or Getwordnum(lcResult, lnWordCount) = lcLastWord) + If !llExcludeOriginal Or lcResult != lcFullName + lcFiltered = lcFiltered + lcResult + ";" + Endif + Endif + Endif + + * Eliminam ultimul separator daca exista + If !Empty(lcFiltered) + lcFiltered = Left(lcFiltered, Len(lcFiltered)-1) + Endif + + Return lcFiltered +ENDPROC + +* Procedura recursiva pentru generarea permutarilor +Procedure GenerateWordPerms + Parameters lnLevel, laWords, laUsed, laCurrentPerm, lnWordCount, lcResult + + If m.pnPermCount >= m.pnMaxPerms + Return + ENDIF + + If lnLevel = lnWordCount + pnPermCount = m.pnPermCount + 1 + * Am completat toate pozitiile, adaugam permutarea la rezultat + Local i, lcPerm + lcPerm = laCurrentPerm[1] + For i = 2 To lnWordCount + lcPerm = lcPerm + " " + laCurrentPerm[i] + Endfor + lcResult = lcResult + lcPerm + ";" + Return + Endif + + * Pentru fiecare cuvnt neutilizat + Local i + For i = 1 To lnWordCount + If !laUsed[i] + laUsed[i] = .T. + laCurrentPerm[lnLevel + 1] = laWords[i] + GenerateWordPerms(lnLevel + 1, @laWords, @laUsed, @laCurrentPerm, lnWordCount, @lcResult) + laUsed[i] = .F. + Endif + Endfor +Endproc + + + +************************************** +*** Intoarce denumire fdoc din nomenclatorul de documente dupa Id +************************************** +Procedure GetFdocById + Lparameters tnId + Private pnId, pcDenumire + Local lcSql, lnSucces + pnId = tnId + pcDenumire = '' + + lcSql = [select MAX(fel_document) as fel_document from nom_fdoc where id_fdoc = ?pnId] + lnSucces = goExecutor.oSelect2Value(m.lcSql, @pcDenumire) + If m.lnSucces < 0 + amessagebox(goExecutor.cEroare, 0 + 48, _Screen.Caption) + Endif + Return Nvl(m.pcDenumire, '') +Endproc && GetFdocById + +************************************ +*** Intoarce un obiect cu (id_valuta, nume_val, moneda_nationala) dupa nume_val2/iso_valuta +************************************ +Procedure GetValutaByISO + Lparameters tcValutaISO + Private pcValutaISO + Local lcSelect, lcSql, llSucces, loValuta + lcSelect = SELECT() + pcValutaISO = m.tcValutaISO + loValuta = Createobject("empty") + AddProperty(loValuta, "id_valuta", 0) + AddProperty(loValuta, "nume_val", '') + AddProperty(loValuta, "moneda_nationala", 1) + + lcSql = [select id_valuta, nume_val, moneda_nationala from vnom_valute where nume_val2 = ?pcValutaISO] + llSucces = goExecutor.oExecuta(m.lcSql, 'cValutaTemp') + If m.llSucces + IF RECCOUNT('cValutaTemp') > 0 + Select cValutaTemp + GO TOP + loValuta.id_valuta = Nvl(id_valuta, 0) + loValuta.nume_val = Alltrim(Nvl(nume_val, '')) + loValuta.moneda_nationala = Nvl(moneda_nationala, 0) + ENDIF + Use In (Select('cValutaTemp')) + ENDIF + SELECT (m.lcSelect) + Return loValuta +ENDPROC + +************************************** +*** Cauta o factura in ireg_parteneri dupa cont, id_part, nr_act / comanda +*** Se foloseste la importul din extrasele bancare, deconturi curieri, procesatori plati +*** Intoarce un obiect (id_fact, cont, acont, nract) +************************************** +Procedure GetDocumentByContPartenerAct + Lparameters tcContPartener, tnIdPartener, tuDocument, tlComanda + * loAct id_fact, cont, acont, nract + + Local lcSql, lcSql1, lcSql2, lcWhere, lcWhere1, lcWhere2, llSucces, loAct, lcSelect + Private pnIdPartener, pcContPartener, pnNract, pnIdFact, pcComanda + + lcSelect = Select() + pnIdPartener = tnIdPartener + pcContPartener = Alltrim(Upper(tcContPartener)) + pnNract = IIF(!m.tlComanda and !EMPTY(m.tuDocument), m.tuDocument, 0) + pcComanda = ALLTRIM(UPPER(TRANSFORM(IIF(m.tlComanda and !EMPTY(m.tuDocument), m.tuDocument, '')))) +*!* pcComanda = IIF(!EMPTY(m.pcComanda), '%' + m.pcComanda + '%', '') + pnIdFact = 0 + + loAct = Createobject("Empty") + AddProperty(loAct, "id_fact", 0) + AddProperty(loAct, "cont", "") + AddProperty(loAct, "acont", "") + AddProperty(loAct, "nract", 0) + AddProperty(loAct, "solddeb", 0) + + * Daca nu am id-ul de partener -- sau nu am nici numarul, nici suma documentului, nu caut nimic + If Empty(m.pnIdPartener) && Or (Empty(m.pnNract) And Empty(m.pcComanda)) + Return loAct + Endif + + lcWhere2 = "i.an = ?gnAn and i.luna = ?gnLuna and i.id_part = ?pnIdPartener" + + DO CASE + CASE !Empty(m.pnNract) + lcWhere2 = m.lcWhere2 + " and (i.nract = ?pnNrAct)" && cautare fara cont, cu numaract + CASE !Empty(m.pcComanda) + lcWhere2 = m.lcWhere2 + " and (UPPER(l.nrord) like '%"+ m.pcComanda + "%'OR UPPER(i.explicatia) like '%" + m.pcComanda + "%' OR UPPER(i.explicatia4) like '%" + m.pcComanda + "%' OR UPPER(i.explicatia5) like '%" + pcComanda + "%')" && cautare fara cont, cu comanda + ENDCASE + + lcWhere1 = m.lcWhere2 + IIF(!Empty(m.pcContPartener), " and i.cont = ?pcContPartener", "") + + lcSql = [select i.id_fact, i.cont, i.acont, i.nract, (i.precdeb+i.debit-i.preccred-i.credit) as solddeb from ireg_parteneri i left join nom_lucrari l on i.id_lucrare = l.id_lucrare where ] + lcSql1 = m.lcSql + m.lcWhere1 + lcSql2 = m.lcSql + m.lcWhere2 + + llSucces = goExecutor.oExecuta(m.lcSql1, "cRezultatTemp") + If m.llSucces + If Reccount('cRezultatTemp') = 0 + If m.lcWhere2 <> m.lcWhere1 + Use In (Select('cRezultatTemp')) + llSucces = goExecutor.oExecuta(m.lcSql2, "cRezultatTemp") + Endif && m.lcWhere2 <> m.lcWhere1 + Endif && RECCOUNT('cRezultatTemp') = 0 + Endif && m.llSucces + + If Used('cRezultatTemp') + If Reccount('cRezultatTemp') > 1 + polog.Log('Sunt prea multe rezultate care se potrivesc', Program()) + Else + Select cRezultatTemp + Go Top + loAct.id_fact = id_fact + loAct.Cont = Alltrim(Cont) + loAct.acont = Nvl(acont, '') + loAct.nract = nract + loAct.solddeb = solddeb + Endif + Endif + + Use In (Select('cRezultatTemp')) + Select (m.lcSelect) + + Return loAct +Endproc && GetDocumentByContPartenerActSuma + +************************************** +*** Intoarce Id Sectie din nomenclatorul de sectii dupa numele sectiei +************************************** +Procedure GetIdSectie + Lparameters tcSectie + Private pnIdSectie, pcSectie + Local lcSql, lnSucces, lcSelect + lcSelect = SELECT() + pnIdSectie = 0 + pcSectie = Upper(Alltrim(Nvl(tcSectie, ''))) + + lcSql = [select MAX(id_sectie) as id_sectie from vnom_sectii where UPPER(TRIM(sectie)) = ?pcSectie and inactiv = 0] + lnSucces = goExecutor.oSelect2Value(m.lcSql, @pnIdSectie) + If m.lnSucces < 0 + amessagebox(goExecutor.cEroare, 0 + 48, _Screen.Caption) + ENDIF + SELECT (m.lcSelect) + Return Nvl(m.pnIdSectie, 0) +Endproc + +************************************** +*** Intoarce obiect(id_sectie, sectie, csectie) din nomenclatorul de sectii dupa indicativ sectie +************************************** +Procedure GetSectieByCsectie + Lparameters tcCSectie + Private pnIdSectie, pcCSectie + Local lcSql, lnSucces, lcSelect + Local loRec As "empty" + Local lcCursor, llSucces + lcSelect = SELECT() + + loRec = CREATEOBJECT("empty") + ADDPROPERTY(loRec, 'id_sectie', 0) + ADDPROPERTY(loRec, 'sectie', '') + ADDPROPERTY(loRec, 'csectie', '') + + pcCSectie = Upper(Alltrim(Nvl(tcCSectie, ''))) + + lcSql = [select id_sectie, sectie, csectie from vnom_sectii where UPPER(TRIM(csectie)) = ?pcCSectie and inactiv = 0] + lcCursor = SYS(2015) + llSucces = goExecutor.oExecuta(m.lcSql, m.lcCursor) + If m.llSucces + SELECT (m.lcCursor) + IF RECCOUNT() >= 1 + GO TOP + SCATTER NAME loRec + ENDIF + USE IN (SELECT(m.lcCursor)) + ENDIF + + SELECT (m.lcSelect) + Return loRec +Endproc + +************************************** +*** Intoarce obiect(id_sectie, sectie, csectie) din nomenclatorul de sectii dupa id sectie +************************************** +Procedure GetSectieById + Parameters tnIdSectie + + Local loRec As "empty" + Local lcSelect, llSucces + + lcSelect = SELECT() + + loRec = CREATEOBJECT("empty") + ADDPROPERTY(loRec, 'id_sectie', 0) + ADDPROPERTY(loRec, 'sectie', '') + ADDPROPERTY(loRec, 'csectie', '') + + llSucces = goExecutor.oSelecteaza2Object("select id_sectie, sectie, csectie from vnom_sectii where id_sectie = ?tnIdSectie", @loRec) + + SELECT (m.lcSelect) + Return loRec +ENDPROC + +************************************** +*** Intoarce obiect din nomenclatorul de gestiuni dupa id gestiune +************************************** +Procedure GetGestiuneById + Parameters tnIdGestiune + + Local loRec As "empty" + Local lcSelect, lcSql, llSucces + + lcSelect = SELECT() + + loRec = CREATEOBJECT("empty") + ADDPROPERTY(loRec, 'id_gestiune', 0) + ADDPROPERTY(loRec, 'nume_gestiune', '') + ADDPROPERTY(loRec, 'cgest', '') + + TEXT TO lcSql noshow +select id_gestiune, nume_gestiune, inactiv, cont, acont, nr_pag, cgest, id_sucursala, descriere, nume_tip, sucursala, id_responsabil, denumire, id_sectie, sectie, acont_adaos, acont_cheltuiala, id_lucrare, nrord, gestionar, comisie_receptie1, comisie_receptie2, comisie_receptie3 + from vnom_gestiuni + where id_gestiune = ?tnIdGestiune + ENDTEXT + + llSucces = goExecutor.oSelecteaza2Object(m.lcSql, @loRec) + + SELECT (m.lcSelect) + Return loRec +ENDPROC + +************************************** +*** Intoarce Id Lucrare din nomenclatorul de lucrari dupa numele lucrarii +************************************** +Procedure GetIdLucrare + Lparameters tcLucrare + Private pnIdLucrare, pcLucrare + Local lcSql, lnSucces, lcSelect + lcSelect = SELECT() + pnIdLucrare = 0 + pcLucrare = Upper(Alltrim(Nvl(tcLucrare, ''))) + + lcSql = [select MAX(id_lucrare) as id_lucrare from vnom_lucrari where UPPER(TRIM(nrord)) = ?pcLucrare and inactiv = 0] + lnSucces = goExecutor.oSelect2Value(m.lcSql, @pnIdLucrare) + If m.lnSucces < 0 + amessagebox(goExecutor.cEroare, 0 + 48, _Screen.Caption) + ENDIF + SELECT (m.lcSelect) + Return Nvl(m.pnIdLucrare, 0) +Endproc + +************************************** +*** Intoarce Id Venchelt din nomenclatorul de venchelt dupa numele venchelt +************************************** +Procedure GetIdVenchelt + Lparameters tcVenchelt + Private pnIdVenchelt, pcVenchelt + Local lcSql, lnSucces, lcSelect + lcSelect = SELECT() + pnIdVenchelt = 0 + pcVenchelt = Upper(Alltrim(Nvl(tcVenchelt, ''))) + + lcSql = [select MAX(id_Venchelt) as id_Venchelt from vnom_venchel where UPPER(TRIM(explicatie)) = ?pcVenchelt and inactiv = 0] + lnSucces = goExecutor.oSelect2Value(m.lcSql, @pnIdVenchelt) + If m.lnSucces < 0 + amessagebox(goExecutor.cEroare, 0 + 48, _Screen.Caption) + ENDIF + SELECT (m.lcSelect) + Return Nvl(m.pnIdVenchelt, 0) +Endproc + +************************************** +*** Intoarce obiect din nomenclatorul Venit/Cheltuiala dupa id +************************************** +Procedure GetVencheltById + Parameters tnIdVenChelt + + Local loRec As "empty" + Local lcSelect, llSucces + + lcSelect = SELECT() + + loRec = CREATEOBJECT("empty") + ADDPROPERTY(loRec, 'id_venchelt', 0) + ADDPROPERTY(loRec, 'tip_venchelt', 1) + ADDPROPERTY(loRec, 'explicatie', '') + ADDPROPERTY(loRec, 'explicatie_fiu', '') + ADDPROPERTY(loRec, 'explicatie_tata', '') + + llSucces = goExecutor.oSelecteaza2Object("select id_venchelt, id_tata, tip_venchelt, explicatie, explicatie_fiu, explicatie_tata, inactiv, id_mod from vnom_venchel where id_venchelt = ?tnIdVenChelt", @loRec) + + SELECT (m.lcSelect) + Return loRec +ENDPROC + +************************************** +*** Intoarce valoarea unei optiuni +************************************** +Procedure GetOptiuneFirma + Lparameters tcOptiune + Local lcReturn + Private pcOptiune + lcReturn = "" + If Empty(m.tcOptiune) Or Type('tcOptiune') <> 'C' + Return m.lcReturn + Endif + pcOptiune = Upper(Alltrim(m.tcOptiune)) + lnSucces = goExecutor.oSelect2Value("select pack_sesiune.getoptiunefirma(?pcOptiune) from dual", @lcReturn) + If m.lnSucces < 0 + amessagebox(goExecutor.cEroare, 0 + 48, _Screen.Caption) + Endif + + Return m.lcReturn +Endproc + +************************************** +*** Intoarce cod bare din nomenclatorul de articole +************************************** +Procedure GetCodBareByIdArticol + Lparameters tnIdArticol + Private pnIdArticol, pcCodBare + Local lcSql, lnSucces + pcCodBare = '' + pnIdArticol = m.tnIdArticol + + lcSql = [select codbare from nom_articole where id_articol = ?pnIdArticol] + llSucces = goExecutor.oSelecteaza2Value(m.lcSql, @pcCodBare) + Return NVL(m.pcCodBare, '') +Endproc + + +************************************** +*** Intoarce un obiect din vnom_articole/id_articol dupa denumire/codbare/cod client/cod furnizor +*** lnIdArticol = GetArticolByCodDenumire("articol", "cod bare", "cod furnizor", "cod client", IdPart, .T.) +*** loArticol = GetArticolByCodDenumire("articol", "cod bare", "cod furnizor", "cod client", IdPart, .F.) +************************************** +Procedure GetArticolByCodDenumire + lParameters tcDenumire, tcCodBare, tcCodMat, tcCodMatF, tcCodMatP, tnIdPart, tlReturnId + * tcDenumire: denumire articol + * tcCodBare: cod bare articol + * tcCodMat: primite = efactura.codClient, trimise = efactura.codFurnizor = nom_articole.codmat + * tcCodMatF: primite = efactura.codFurnizor = nom_articole.codmatf + * tcCodMatP: trimise = efactura.codClient = parteneri_articole_coduri.cod + * tnIdPart: id_part client + * tlReturnId: .T. = intoarce id_articol, .F. = intoarce obiect nom_articole + + Private pcDenumire, pcCodBare, pcCodFurnizor, pcCodCLient, pnIdPart + Local lcSql, lnSucces, lcSelect, loArticol, loReturn + lcSelect = SELECT() + loArticol = null + loReturn = Null + + pcDenumire = UPPER(Alltrim(NVL(m.tcDenumire, ''))) + pcCodBare = UPPER(ALLTRIM(NVL(m.tcCodBare, ''))) + pcCodMat = UPPER(ALLTRIM(NVL(m.tcCodMat, ''))) + pcCodMatF = UPPER(ALLTRIM(NVL(m.tcCodMatF, ''))) + pcCodMatP = UPPER(ALLTRIM(NVL(m.tcCodMatP, ''))) + pnIdPart = NVL(m.tnIdPart, 0) + + TEXT TO lcSql TEXTMERGE NOSHOW +SELECT * FROM vnom_articole a left join parteneri_articole_coduri c ON (a.id_part = c.id_part and c.id_part = ?pnIdPart and c.sters = 0) + where a.inactiv = 0 and rownum = 1 and (<><><><><>) + ENDTEXT + + * Daca nu exista denumire, codbare, codmat, codmatF, codmatP + lcSql = STRTRAN(m.lcSql, " and ()", " and (1=2)", 1, 1, 1) + lcSql = STRTRAN(m.lcSql, "( or ", "(", 1, 1, 1) + + llSucces = goExecutor.oSelecteaza2Object(m.lcSql, @loArticol) + + If m.llSucces + IF m.tlReturnId + loReturn = loArticol.id_articol + ELSE + loReturn = loArticol + ENDIF + ENDIF + + SELECT (m.lcSelect) + Return loReturn + +ENDPROC && GetArticolByCodDenumire + +************************************** +*** Intoarce un obiect din vnom_articole dupa id_articol +*** loArticol = GetArticolById(lnIdArticol) +************************************** +Procedure GetArticolById + lParameters tnId + * tnId: id_articol + + + lcSelect = SELECT() + loArticol = Null + pnId = NVL(m.tnId, 0) + + TEXT TO lcSql TEXTMERGE NOSHOW +SELECT * FROM vnom_articole a where id_articol = ?pnId + ENDTEXT + + llSucces = goExecutor.oSelecteaza2Object(m.lcSql, @loArticol) + + SELECT (m.lcSelect) + Return loArticol + +ENDPROC && GetArticolById + +************************************** +*** Intoarce un obiect din ANAF_VEFACTURA_DETALII/id_articol dupa cod fiscal furnizor/client si denumire +*** Cauta in articolele furnizorului/clientului, ultima aparitie a articolului respectiv +*** lnIdArticol = GetArticolEFByPartDenumire("cod fiscal", "articol", .T.) +*** loArticol = GetArticolByCodDenumire("articol", "cod bare", "cod furnizor", "cod client", IdPart, .F.) +************************************** +Procedure GetArticolEFByPartDenumire + lParameters tcCodFiscal, tlPrimite, tcDenumire, tlReturnId, tnIdEfactura + * tcCodFiscal : cod fiscal client/furnizor + * tlPrimite: facturi primite / emise + * tcDenumire: denumire articol + * tlReturnId: .T. = intoarce id_articol, .F. = intoarce obiect + * tnIdEfactura: id_efactura curenta. sa nu caut articolul in factura curenta, ci in facturile anterioare + + Private pcDenumire, pcCodBare, pcCodFurnizor, pcCodCLient, pnIdPart, pnIdEfactura + Local lcSql, lnSucces, lcSelect, loArticol, loReturn, lcColoanaCodFiscal + lcSelect = SELECT() + loArticol = null + loReturn = Null + + pcDenumire = UPPER(Alltrim(NVL(m.tcDenumire, ''))) + pcCodFiscal = UPPER(ALLTRIM(NVL(m.tcCodFiscal, ''))) + pnIdArticol = 0 + pnIdEfactura = IIF(!EMPTY(NVL(tnIdEfactura, 0)), m.tnIdEfactura, 0) + lcColoanaCodFiscal = IIF(m.tlPrimite, "e.cod_fiscal_emitent", "e.cod_fiscal_beneficiar") + + TEXT TO lcSql TEXTMERGE NOSHOW +SELECT * FROM (SELECT d.* FROM ANAF_VEFACTURA_DETALII d LEFT JOIN ANAF_EFACTURA e ON (e.id = d.id_efactura) + WHERE <> = ?pcCodFiscal AND TRIM(UPPER(d.articol)) = ?pcDenumire and id_articol is not null ORDER BY d.id desc) WHERE rownum = 1 + ENDTEXT + + llSucces = goExecutor.oSelecteaza2Object(m.lcSql, @loArticol) + + If m.llSucces + * Daca nu am gasit factura cu articol ROA (este posibil sa fie de servicii, fara articole gestionabile) + * Caut articolelele anterioare, fara id_articol + IF EMPTY(NVL(loArticol.id_articol,0)) AND !EMPTY(NVL(m.tnIdEfactura,0)) + TEXT TO lcSql TEXTMERGE NOSHOW +SELECT * FROM (SELECT d.* FROM ANAF_VEFACTURA_DETALII d LEFT JOIN ANAF_EFACTURA e ON (e.id = d.id_efactura) + WHERE <> = ?pcCodFiscal AND TRIM(UPPER(d.articol)) = ?pcDenumire and e.id <> ?pnIdEFactura ORDER BY d.id desc) WHERE rownum = 1 + ENDTEXT + + llSucces = goExecutor.oSelecteaza2Object(m.lcSql, @loArticol) + ENDIF + ENDIF + + IF m.llSucces + IF m.tlReturnId + loReturn = loArticol.id_articol + ELSE + loReturn = loArticol + ENDIF + ENDIF + + SELECT (m.lcSelect) + Return loReturn + +ENDPROC && GetArticolEFByPartDenumire + + +************************************** +*** Alege perioada +*** intoarce un obiect cu perioada aleasa +************************************** +Procedure AlegePerioada + + Local loFrmPerioada As 'frm_perioada_luni' + Local loRet As "empty" + Local lcPerioada, lnAn1, lnAn2, lnFinal, lnInit, lnLuna1, lnLuna2 + Private pcondper + pcondper = '' + + loFrmPerioada = Createobject('frm_perioada_luni') + loFrmPerioada.Show(1) + + If gnButon = 2 + Return + Endif + + If At('_', pcondper) > 0 + lnAn1 = Val(Substr(pcondper, 3, 4)) + lnLuna1 = Val(Substr(pcondper, 1, 2)) + lnAn2 = Val(Substr(pcondper, 10, 4)) + lnLuna2 = Val(Substr(pcondper, 8, 2)) + + lcPerioada = Substr(pcondper, 1, 2) + '/' + Substr(pcondper, 3, 4) + ' - ' + Substr(pcondper, 8, 2) + '/' + Substr(pcondper, 10, 4) + Else + lnAn1 = Val(Substr(pcondper, 3, 4)) + lnLuna1 = Val(Substr(pcondper, 1, 2)) + lnAn2 = Val(Substr(pcondper, 3, 4)) + lnLuna2 = Val(Substr(pcondper, 1, 2)) + + lcPerioada = Substr(pcondper, 1, 2) + '/' + Substr(pcondper, 3, 4) + ' - ' + Substr(pcondper, 1, 2) + '/' + Substr(pcondper, 3, 4) + Endif + lnInit = lnAn1 * 12 + lnLuna1 + lnFinal = lnAn2 * 12 + lnLuna2 + + loRet = Createobject("empty") + AddProperty(loRet, "an1", m.lnAn1) + AddProperty(loRet, "luna1", m.lnLuna1) + AddProperty(loRet, "an2", m.lnAn2) + AddProperty(loRet, "luna2", m.lnLuna2) + AddProperty(loRet, "perioada", m.lcPerioada) + + Return loRet + +Endproc && AlegePerioada + +*** Citeste optiunea pentru semnatura rapoarte "SEMN_CONT_INTOCMIT/SEMN_CONT_VERIFICAT/SEMN_CONT_DIRECTOR/SEMN_GEST_INTOCMIT/SEMN_INTOCMIT" +Procedure GetSemnatura + Lparameters tcModul, tcSemnatura, tcPrefix + * tcModul: CONTABILITATE/GESTIUNE... + * tcSemanatura: INTOCMIT/VERIFICAT/DIRECTOR/DIRECTOREC + * tcPrefix OPTIONAL, default 'SEMN': se poate completa cu SEMN/DEN + Local lcValue, lcOptiune, lcPrefix + lcValue = '' + + lcPrefix = IIF(TYPE('tcPrefix') = 'C' and !EMPTY(m.tcPrefix), UPPER(ALLTRIM(m.tcPrefix)), 'SEMN') + lcOptiune = lcPrefix + Iif(!Empty(m.tcModul), '_' + Upper(m.tcModul), '') + '_' + Upper(m.tcSemnatura) && 'SEMN_CONT_DIRECTOREC' / DEN_CONT_DEPFINCONT + lcValue = Strtran(Nvl(citeste_optiune(m.lcOptiune), ''), '\r', Chr(13) + Chr(10), 1, 10, 1) && INLOCUIESC /R CU LINIE NOUA + Return m.lcValue +Endproc + + +*************************************************** +* Citeste atasament din baza de date si scrie fisier pe disk (ex: logo.jpg) +* Se apeleaza fie cu id-ul atasamentului, fie cu numele fisierului +* Intoarce numarul de bytes scrisi pe disk sau 0 +*************************************************** +Function Atasament2File + Lparameters tnIdAtasament, tcfilename, tcFilePath + * tnIdAtasament (optional) : id atasament + * tcFileName (optional) : nume fisier atasament + * tcFilePath : calea completa unde se salveaza fisierul, inclusiv numele fisierului + Local lcFiltru, lcFiltruOriginal, lcFisier, lcOrder, lcSchema, lcSelect, lcgroup, llAfiseaza, lcFilePath + Local llModParam, lnIdAtas + Local lcFileName, lcNumeFisier, lnBytesWritten + Local laFiles[1], lcOraM, ldDataM, lnD, lnFiles, lnH, lnM, lnMin, lnS, lnY, ltDataOraBD, ltDataOraFile + Private poLink, pcFileName, pnIdAtasament + poLink = Null + lnBytesWritten = 0 + pnIdAtasament = Iif(!Empty(m.tnIdAtasament), m.tnIdAtasament, 0) + pcFileName = Iif(!Empty(m.tcfilename), Justfname(m.tcfilename), '') + lcFilePath = Iif(!Empty(m.tcFilePath), m.tcFilePath, '') + + If !(Empty(m.pnIdAtasament) And Empty(m.pcFileName)) + lcSchema = [fisier w, nume_fisier C(100), dataora T ] + lcSelect = [select fisier, nume_fisier, dataora from atas_atasamente where sters = 0 and ] + Iif(!Empty(m.pnIdAtasament), 'id_atas = ?pnIdAtasament', Iif(!Empty(m.pcFileName), 'nume_fisier=?pcFileName', '1=2')) + lcOrder = [] + lcgroup = [] + lcFiltru = [] + lcFiltruOriginal = [] + llModParam = .T. + llAfiseaza = .F. + + gencursor('poLink', 'cRegFisierTemp', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal) + poLink.ca_baza1.afisare() + If Used('cRegFisierTemp') + Select cRegFisierTemp + If Reccount('cRegFisierTemp') > 0 + Go Top + lcFisier = fisier + ltDataOraBD = dataora + ltDataOraFile = dataora - 1 + lcNumeFisier = Alltrim(Nvl(nume_fisier, '')) + lcFileName = Iif(!Empty(m.pcFileName), m.pcFileName, m.lcNumeFisier) + lcFilePath = Iif(!Empty(m.lcFilePath), m.lcFilePath, m.lcFileName) + + Use In (Select('cRegFisierTemp')) + If !Directory(Justpath(m.lcFilePath)) + Md (Justpath(m.lcFilePath)) + Endif + + * Verific daca data/ora modificarii din baza de date este mai mare decat cea de pe disk + * Nu suprascriu daca fisierul de pe disk este mai nou + polog.Log("Dataora fisier baza date: " + TRANSFORM(m.ltDataOraBD), Program()) + If File(m.lcFilePath) + lnFiles = Adir(laFiles, m.lcFilePath) + If m.lnFiles = 1 + ldDataM = laFiles[1, 3] + lcOraM = laFiles[1, 4] + lnY = Year(m.ldDataM) + lnM = Month(m.ldDataM) + lnD = Day(m.ldDataM) + lnH = INT(VAL(Substr(m.lcOraM, 1, 2))) + lnMin = INT(VAL(Substr(m.lcOraM, 4, 2))) + lnS = INT(VAL(Substr(m.lcOraM, 7, 2))) + Try + ltDataOraFile = Datetime(m.lnY, m.lnM, m.lnD, m.lnH, m.lnMin, m.lnS) + Catch + ltDataOraFile = m.ltDataOraBD + Endtry + ENDIF + polog.Log("Dataora fisier disk: " + TRANSFORM(m.ltDataOraFile), Program()) + Endif + + If m.ltDataOraBD > ltDataOraFile + lnBytesWritten = Strtofile(m.lcFisier, m.lcFilePath) + ELSE + lnBytesWritten = 1 + Endif + Endif && reccount + Endif && used + Endif && empty + + Return m.lnBytesWritten + +Endfunc && Atasament2File + +*************************************************** +* Citeste fisierul de pe disk si adauga atasament in baza de date atas_atasamente +* Se apeleaza cu calea completa a fisierului +* Intoarce id-ul atasamentului +*************************************************** +Function File2Atasament + Lparameters tcFile, tcDescriere + + Private pcFileName, pnId, pcFile, pcDescriere + + Local lcSql, lcSqlIns, lcSqlUpd, llSucces + pnId = 0 + If !File(m.tcFile) + tcFile = Getfile('', 'Alege un fisier', 'Alege', 0, 'Alege un fisier') + If Empty(m.tcFile) + Return m.pnId + Endif + Endif + + pcFile = Filetostr(m.tcFile) + pcFileName = Lower(Justfname(m.tcFile)) + pcDescriere = Iif(!Empty(m.tcDescriere), Alltrim(m.tcDescriere), '') + lcSql = [SELECT id_atas FROM atas_atasamente WHERE nume_fisier = ?pcFileName] + lcSqlIns = [insert into atas_atasamente (fisier, nume_fisier, descriere, id_util, dataora) values (?pcFile, ?pcFileName, ?pcDescriere, ?gnIdUtil, sysdate) returning id_atas into ?@pnId] + lcSqlUpd = [UPDATE atas_atasamente SET fisier = ?pcFile, descriere = ?pcDescriere, id_util = ?gnIdUtil, dataora = sysdate WHERE id_atas = ?pnId] + + llSucces = goExecutor.oExecuta(m.lcSql, 'crsAtasamenteTemp') + If m.llSucces + Do Case + Case Reccount('crsAtasamenteTemp') > 1 + amessagebox('Sunt mai multe inregistrari cu acelasi nume de fisier! Nu se salveaza!', 0 + 16, _Screen.Caption) + Case Reccount('crsAtasamenteTemp') = 1 + pnId = crsAtasamenteTemp.id_atas + Endcase + Use In (Select('crsAtasamenteTemp')) + + If Empty(m.pnId) + llSucces = goExecutor.oExecuta(m.lcSqlIns) + Else + llSucces = goExecutor.oExecuta(m.lcSqlUpd) + pnId = Iif(m.llSucces, m.pnId, 0) + Endif + Endif + + Return m.pnId + +Endfunc && File2Atasament + + +* ------------------------------------- +* Genereaza o comanda sql pentru totalizarea unui tabel dupa anumite coloane +* Echivalentul comenzii TOTAL TO, doar ca face group by dupa toate coloanele care nu sunt in lista de insumat +* lcSql = Cursor2Total('cAct', 'cActTVA', 'suma,suma_val,valtva,tvaval', .F.) +* &lcSql +* ------------------------------------- +Procedure Cursor2Total + Lparameters tcSource, tcDestination, tcFieldList, tcSumFieldList, tlGenerateCursor + * tcSource: source cursor name + * tcDestination: destination cursor name + * tcFieldList (optional, default empty = all fields): list of fields for group by + * tcSumFieldList: list of fields for sum() + * tlGenerateCursor (optional, default = .F.): execute the sql + Local lcField, lcFieldList, lcGroupBy, lcSql, lcSumFieldList, llField, lnColCount, lnColumn + lcSumFieldList = Alltrim(Lower(m.tcSumFieldList)) + lcFieldList = Iif(Empty(m.tcFieldList), '', Lower(m.tcFieldList)) + + lnColCount = Fcount(tcSource) + lcSql = [select ] + lcGroupBy = [] + For lnColumn = 1 To m.lnColCount + lcField = Lower(Field(m.lnColumn, m.tcSource)) + + If m.lcField $ m.lcSumFieldList + lcSql = m.lcSql + Iif(m.lnColumn > 1, [,], []) + [Sum(] + m.lcField + [) as ] + m.lcField + Else + llField = Empty(m.lcFieldList) Or m.lcField $ m.lcFieldList + If m.llField + lcSql = m.lcSql + Iif(m.lnColumn > 1, [,], []) + m.lcField + lcGroupBy = m.lcGroupBy + Iif(m.lnColumn > 1, [,], []) + m.lcField + Endif + Endif + Endfor + + lcSql = m.lcSql + [ from ] + m.tcSource + [ with (buffering=.t.) group by ] + m.lcGroupBy + [ into cursor ] + m.tcDestination + [ readwrite] + If m.tlGenerateCursor + &lcSql + Endif + Return m.lcSql +Endproc + +************************************ +* Functie pentru calculul _PAGETOTAL pentru grupuri care reseteaza pagina la 1 intr-un raport +* tcCrsAlias este optional, pentru a-l putea inchide la destroy in raport +************************************ +Function UpdatePageTotalGroup(tcGroupValue, tcCrsAlias) + Local lcAlias, lcSelect, lnPgCnt + lcSelect = Select() + lcAlias = Iif(!Empty(m.tcCrsAlias), tcCrsAlias, 'crsGrpPageCnt') + If !Used(m.lcAlias) + Create Cursor (m.lcAlias) (rptGrp C(100), pgCnt i) + Select (m.lcAlias) + Index On rptGrp Tag C_GrpPage + Endif + + Select (m.lcAlias) + If !Seek(Transform(m.tcGroupValue), m.lcAlias, 'C_GrpPage') + Insert Into (m.lcAlias) (rptGrp) Values (Transform(m.tcGroupValue)) + Endif + Replace pgCnt With Max(pgCnt, _Pageno) + lnPgCnt = pgCnt + + Select (m.lcSelect) + Return m.lnPgCnt +Endfunc && UpdatePageTotalGroup + +******************************************* +* Delete Directories and Files in Directory (including subdirectories) +* Returns the number of files +* +* lnFiles = xdelete('c:\temp') +******************************************* +FUNCTION xdelete + LPARAMETERS tcDirectory + + LOCAL laFiles[1], llDelete + llDelete = .T. + lnFiles = xdir(@laFiles, m.tcDirectory, '*.*', m.llDelete) + + TRY + RD (m.tcDirectory) + CATCH TO loEx + MESSAGEBOX(m.tcDirectory + ' ' + loEx.message) + ENDTRY + + RETURN m.lnFiles +ENDFUNC && xdelete + +******************************************* +* Get Files in Directory (including subdirectories) +* Returns the number of files +* +* ex: Dimension laFiles(1) +* =xdir(@laFiles, getdir(), '*.*') +* optional, delete the files and directories +* =xdir(@laFiles, getdir(), '*.*', .T.) +******************************************* +Function xdir + LPARAMETERS taryParam, tcDirectory, tcFileSkeleton, tlDelete + Local Array aryTemp(1, 5) + Local lnCount, lnMax, lnLen, lcFile, lcDirectory, lcFileSkeleton, lcDirFileSkeleton + + lcDirectory = Addbs(m.tcDirectory) + lcFileSkeleton = Iif(!Empty(m.tcFileSkeleton), m.tcFileSkeleton, '*.*') + lcDirFileSkeleton = Addbs(tcDirectory) + m.lcFileSkeleton + = Adir(aryTemp, m.lcDirFileSkeleton, "AHRSD", 1) + lnMax = Alen(aryTemp, 1) + + For lnCount = 1 To lnMax + lcFile = Alltrim(aryTemp(lnCount, 1)) + If !(m.lcFile == ".") And !(m.lcFile == "..") + If "D" $ aryTemp(lnCount, 5) + = xdir(@taryParam, Addbs(m.tcDirectory) + m.lcFile, m.lcFileSkeleton, m.tlDelete) + IF m.tlDelete + TRY + RD (Addbs(m.tcDirectory) + m.lcFile) + CATCH TO loEx + MESSAGEBOX(Addbs(m.tcDirectory) + m.lcFile + ' ' + loEx.message) + ENDTRY + ENDIF + Else + lnLen = Alen(taryParam) + If !Empty(taryParam(lnLen)) + Dimension taryParam(lnLen + 1) + lnLen = lnLen + 1 + Endif + taryParam(lnLen) = m.lcDirectory + m.lcFile + IF m.tlDelete + TRY + DELETE FILE (taryParam(lnLen)) + CATCH TO loEx + MESSAGEBOX(taryParam(lnLen) + ' ' + loEx.message) + ENDTRY + ENDIF + Endif + Endif + ENDFOR + + Return Alen(taryParam) +ENDFUNC + +*------------------------------------------------------------------------ +* syGetWordNum() +* An alternate version of VFP GetWordNum() that will not skip empty fields. +* e.g. +* syGetWordNum([A,,B,C],2,[,]) returns empty string instead of 'B' +* syGetWordNum([A,,B,C],3,[,]) returns 'B' instead of 'C' +* Default delimiters are space, tab, carriage return and linefeed. +* Vertical tab is used as a special token. +*------------------------------------------------------------------------ +function syGetWordNum(tcString, tnIndex, tcDelimiters) + local lcPatch, lcWord, i + if vartype(tcDelimiters)<>'C' + tcDelimiters = chr(32) + chr(9) + chr(13) + chr(10) + endif + lcPatch = tcString + for i = 1 to len(tcDelimiters) + lcPatch = strtran(lcPatch,substr(tcDelimiters,i,1),chr(11)+substr(tcDelimiters,i,1)+chr(11)) + endfor + lcWord = getwordnum(lcPatch, tnIndex, tcDelimiters) + lcWord = strtran(lcWord,chr(11)) + return lcWord +endfunc + +*------------------------------------------------------------------------ +* syGetWordCount() +* An alternate version of VFP GetWordCount() that will not skip empty fields. +* e.g. +* syGetWordCount([A,,B,C],[,]) returns 4 instead of 3 +* Default delimiters are space, tab, carriage return and linefeed. +* Vertical tab is used as a special token. +*------------------------------------------------------------------------ +function syGetWordCount(tcString, tcDelimiters) + local lcPatch, lnCount, i + if vartype(tcDelimiters)<>'C' + tcDelimiters = chr(32) + chr(9) + chr(13) + chr(10) + endif + lcPatch = tcString + for i = 1 to len(tcDelimiters) + lcPatch = strtran(lcPatch,substr(tcDelimiters,i,1),chr(11)+substr(tcDelimiters,i,1)+chr(11)) + endfor + lnCount = getwordcount(lcPatch, tcDelimiters) + return lnCount +ENDFUNC + +**************************** + +FUNCTION ValidCNP + LPARAMETERS nCnp + + LOCAL cCod + IF TYPE('nCnp') = 'N' + cCod=ALLTRIM(STR(m.nCnp,15,0)) + ELSE + cCod = ALLTRIM(m.nCnp) + ENDIF + + IF LEN(cCod)!=13 + RETURN .F. + ENDIF + LOCAL _X(13),_rest, j + FOR j=1 TO 13 + _X(j)=VAL(SUBSTR(cCod,j,1)) + ENDFOR + _rest=(_X(1)*2+_X(2)*7+_X(3)*9+_X(4)*1+_X(5)*4+_X(6)*6+_X(7)*3+_X(8)*5+_X(9)*8+_X(10)*2+_X(11)*7+_X(12)*9)%11 + RETURN IIF((_rest<10 and _rest=_X(13))or(_rest = 10 and _X(13)=1),.T.,.F.) +ENDFUNC && ValidCNP + + +FUNCTION cValidCNP + LPARAMETERS lpcnp + + IF TYPE('lpCNP') ='N' + lpCNP = ALLTRIM(STR(m.lpcnp)) + ENDIF + + IF LEN(ALLTRIM(lpcnp)) <> 13 + RETURN .F. + ENDIF + n1 = VAL(SUBSTR(lpcnp, 1, 1)) + n2 = VAL(SUBSTR(lpcnp, 2, 1)) + n3 = VAL(SUBSTR(lpcnp, 3, 1)) + n4 = VAL(SUBSTR(lpcnp, 4, 1)) + n5 = VAL(SUBSTR(lpcnp, 5, 1)) + n6 = VAL(SUBSTR(lpcnp, 6, 1)) + n7 = VAL(SUBSTR(lpcnp, 7, 1)) + n8 = VAL(SUBSTR(lpcnp, 8, 1)) + n9 = VAL(SUBSTR(lpcnp, 9, 1)) + n10 = VAL(SUBSTR(lpcnp, 10, 1)) + n11 = VAL(SUBSTR(lpcnp, 11, 1)) + n12 = VAL(SUBSTR(lpcnp, 12, 1)) + n13 = VAL(SUBSTR(lpcnp, 13, 1)) + c = MOD((n1 * 2 + n2 * 7 + n3 * 9 + ; + n4 * 1 + n5 * 4 + n6 * 6 + n7 * ; + 3 + n8 * 5 + n9 * 8 + n10 * 2 + ; + n11 * 7 + n12 * 9), 11) + IF c = 10 + c = 1 + ENDIF + IF c = n13 + RETURN .T. + ELSE + RETURN .F. + ENDIF +ENDFUNC + +* +FUNCTION GetDataCNP + LPARAMETERS plcnp + LOCAL mlan + mlan = SUBSTR(plcnp, 2, 2) + IF VAL(mlan) > 20 AND !INLIST(LEFT(plcnp, 1), "5", "6") + mlan = "19" + mlan + ELSE + mlan = "20" + mlan + ENDIF + RETURN CTOD(SUBSTR(plcnp, 6, 2) + "." + SUBSTR(plcnp, 4, 2) + "." + mlan) +ENDFUNC +* +FUNCTION VerifCF + LPARAMETERS plcfisc + LOCAL mlsuma, mlrest + plcfisc = getnrfromstring(plcfisc) + IF LEN(ALLTRIM(plcfisc)) = 13 + IF .NOT. cvalidcnp(plcfisc) + RETURN .F. + ELSE + RETURN .T. + ENDIF + ELSE + IF LEN(ALLTRIM(plcfisc)) < 2 OR LEN(ALLTRIM(plcfisc)) > 9 OR plcfisc = "0" + RETURN .F. + ENDIF + ENDIF + plcfisc = PADL(ALLTRIM(plcfisc), 10, "0") + mlsuma = 0 + FOR i = 1 TO 10 + mlsuma = mlsuma + VAL(SUBSTR(plcfisc, i, 1)) * VAL(SUBSTR("753217532", i, 1)) + ENDFOR + mlrest = MOD((mlsuma * 10), 11) + IF mlrest = 10 + mlrest = 0 + ENDIF + IF VAL(SUBSTR(plcfisc, 10, 1)) <> mlrest + RETURN .F. + ELSE + RETURN .T. + ENDIF +ENDFUNC +* +*verifiban('RO79FNNB000501041759RO01') +FUNCTION VerifIBAN + LPARAMETERS iban + iban = STRTRAN(iban, " ", "") + + IF LEN(ALLTRIM(iban)) <> 24 + RETURN .F. + ENDIF + mcontrol = SUBSTR(iban, 3, 2) + iban = SUBSTR(iban, 5, 20) + SUBSTR(iban, 1, 2) + "00" + miban = "" + FOR i = 1 TO 24 + IF ISALPHA(SUBSTR(iban, i, 1)) + miban = miban + ALLTRIM(STR(ASC(SUBSTR(iban, i, 1)) - 55)) + ELSE + miban = miban + SUBSTR(iban, i, 1) + ENDIF + ENDFOR + mibansec = miban + rest = "" + FOR i = 0 TO 7 + mibansec = rest + SUBSTR(miban, i * 5 + 1, 5) + dv = MOD(VAL(mibansec), 97) + rest = ALLTRIM(STR(dv)) + ENDFOR + IF PADL(ALLTRIM(STR(98 - VAL(rest))), 2, "0") <> mcontrol + RETURN .F. + ELSE + RETURN .T. + ENDIF +ENDFUNC +* +FUNCTION GetSumaControlIBAN +LPARAMETERS iban +IF LEN(ALLTRIM(iban)) <> 24 + RETURN "XX" +ENDIF +mcontrol = SUBSTR(iban, 3, 2) +iban = SUBSTR(iban, 5, 20) + ; + SUBSTR(iban, 1, 2) + "00" +miban = "" +FOR i = 1 TO 24 + IF ISALPHA(SUBSTR(iban, i, ; + 1)) + miban = miban + ; + ALLTRIM(STR(ASC(SUBSTR(iban, ; + i, 1)) - 55)) + ELSE + miban = miban + ; + SUBSTR(iban, i, ; + 1) + ENDIF +ENDFOR +mibansec = miban +rest = "" +FOR i = 0 TO 7 + mibansec = rest + ; + SUBSTR(miban, i * ; + 5 + 1, 5) + dv = MOD(VAL(mibansec), 97) + rest = ALLTRIM(STR(dv)) +ENDFOR +RETURN PADL(ALLTRIM(STR(98 - ; + VAL(rest))), 2, "0") +ENDFUNC +* +FUNCTION GetNrFromString + LPARAMETERS plstr + LOCAL mlenstr + mlenstr = LEN(ALLTRIM(plstr)) + + DO WHILE ISALPHA(plstr) .OR. LEFT(plstr, 1) == " "; + .OR. LEFT(plstr, 1) == "&" .OR. LEFT(plstr, 1) == "/"; + .OR. LEFT(plstr, 1) == "-" .OR. LEFT(plstr, 1) == "_"; + .OR. LEFT(plstr, 1) == "." .OR. LEFT(plstr, 1) == ":" + plstr = RTRIM(SUBSTR(plstr, 2, mlenstr)) + ENDDO + + RETURN plstr +ENDFUNC +* +FUNCTION GetDigitsFromString +LPARAMETERS plstr, plnrdigits, ; + pltip, plseparator +LOCAL mlenstr, ii, ; + mreturnnrintermed, ; + mreturnnrfinal +mlenstr = LEN(ALLTRIM(plstr)) +mreturnnrintermed = "" +mreturnnrfinal = "" +FOR ii = 1 TO mlenstr + mcurentchar = SUBSTR(plstr, ; + ii, 1) + IF ISDIGIT(mcurentchar) .OR. ; + (pltip = 3 .AND. ; + INLIST(mcurentchar, ".", ; + ",")) + mreturnnrintermed = mreturnnrintermed + ; + mcurentchar + ELSE + IF pltip = 1 .OR. pltip = ; + 2 + mreturnnrintermed = ; + "" + ENDIF + ENDIF + IF LEN(mreturnnrintermed) >= ; + plnrdigits + DO CASE + CASE pltip = 1 + IF LEN(mreturnnrintermed) <= ; + 12 .AND. ; + verifcf(mreturnnrintermed) ; + .AND. ; + .NOT. ; + ISDIGIT(SUBSTR(plstr, ; + ii + 1, ; + 1)) + mreturnnrfinal = ; + mreturnnrintermed + EXIT + ENDIF + CASE pltip = 2 + IF cvalidcnp(mreturnnrintermed) + mreturnnrfinal = ; + mreturnnrintermed + EXIT + ENDIF + CASE pltip = 3 + mreturnnrintermed = ; + STRTRAN(mreturnnrintermed, ; + plseparator, ; + "") + IF VAL(mreturnnrintermed) > ; + 0 + mreturnnrfinal = ; + mreturnnrintermed + EXIT + ENDIF + ENDCASE + ENDIF +ENDFOR +RETURN mreturnnrfinal +ENDFUNC +* +FUNCTION GetIBANFromString +LPARAMETERS plstr, plpoz +LOCAL mlenstr, ii, ; + mreturnnrintermed, ; + mreturnnrfinal +mlenstr = LEN(ALLTRIM(plstr)) +mreturnnrintermed = "" +mreturnnrfinal = "" +misok = .F. +FOR ii = 1 TO mlenstr + mcurentchar = SUBSTR(plstr, ; + ii, 1) + IF misok + IF LEN(mreturnnrintermed) < ; + 24 + mreturnnrintermed = ; + mreturnnrintermed + ; + mcurentchar + ELSE + EXIT + ENDIF + ELSE + IF mcurentchar == "R" ; + .AND. ; + mreturnnrintermed = ; + "" .AND. ; + SUBSTR(plstr, ii + 1, ; + 1) == "O" + mreturnnrintermed = ; + mreturnnrintermed + ; + mcurentchar + ELSE + IF mcurentchar == ; + "O" .AND. ; + mreturnnrintermed = ; + "R" + mreturnnrintermed = ; + mreturnnrintermed + ; + mcurentchar + ELSE + IF .NOT. ; + misok ; + .AND. ; + INLIST(mcurentchar, ; + "1", "2", ; + "3", "4", ; + "5", "6", ; + "7", "8", ; + "9", "0") ; + .AND. ; + mreturnnrintermed = ; + "RO" ; + .AND. ; + LEN(mreturnnrintermed) <= ; + 3 + mreturnnrintermed = ; + mreturnnrintermed + ; + mcurentchar + IF plpoz = ; + 1 + misok = ; + .T. + ELSE + mreturnnrintermed = ; + "" + plpoz = ; + plpoz - ; + 1 + ENDIF + ELSE + mreturnnrintermed = ; + "" + ENDIF + ENDIF + ENDIF + ENDIF +ENDFOR +IF verifiban(mreturnnrintermed) + RETURN mreturnnrintermed +ELSE + RETURN "" +ENDIF +ENDFUNC +* +FUNCTION ContainChar +LPARAMETERS plstr +DO WHILE .NOT. (ISALPHA(plstr) .OR. LEFT(plstr, 1); +== "&" .OR. LEFT(plstr, 1) == "/" .OR. LEFT(plstr,; +1) == "-" .OR. LEFT(plstr, 1) == "_") + IF EMPTY(plstr) + RETURN .F. + ENDIF + plstr = RTRIM(SUBSTR(plstr, ; + 2, 60)) +ENDDO +RETURN .T. +ENDFUNC +* +FUNCTION GetStrFromStr +LPARAMETERS plstr +LOCAL mstr +mstr = "" +DO WHILE ISALPHA(plstr) .OR. ; + LEFT(plstr, 1) == " " + mstr = mstr + LEFT(plstr, 1) + plstr = SUBSTR(plstr, 2, 20) +ENDDO +RETURN ALLTRIM(mstr) +ENDFUNC +* +FUNCTION CheckDigit +LPARAMETERS tcstring +LOCAL llsuccess +llsuccess = .F. +IF EMPTY(tcstring) + RETURN .F. +ENDIF +FOR lncharacter = 1 TO ; + LENC(tcstring) + lcchar = SUBSTRC(tcstring, ; + lncharacter, 1) + llsuccess = ISDIGIT(lcchar) + IF llsuccess + EXIT + ENDIF +ENDFOR +RETURN llsuccess +ENDFUNC +* +FUNCTION IsOnlyDigit +LPARAMETERS tcstring +LOCAL llsuccess +llsuccess = .F. +IF EMPTY(tcstring) + RETURN .F. +ENDIF +FOR lncharacter = 1 TO ; + LENC(tcstring) + lcchar = SUBSTRC(tcstring, ; + lncharacter, 1) + IF .NOT. ISDIGIT(lcchar) ; + .AND. .NOT. ; + INLIST(lcchar, ",", ".", ; + " ") + RETURN .F. + ENDIF +ENDFOR +RETURN .T. +ENDFUNC + +PROCEDURE TestExcesSerialNumber2Date +* Example +? ExcelSerialNumber2Date(39278) && 2007-07-15 +? ExcelSerialNumber2Datetime(39278.456777) && 2007-07-15 10:57:46 +? ExcelSerialNumber2Time(.456777) && 10:57:46 +ENDPROC +*-------------------------------------------------------------------- + +* Convert Excel serial number to a date +FUNCTION ExcelSerialNumber2Date(tnExcelSerialNumber) + RETURN {^1899/12/30} + tnExcelSerialNumber +ENDFUNC && ExcelSerialNumber2Date + +* Convert Excel serial number to a datetime +FUNCTION ExcelSerialNumber2Datetime(tnExcelSerialNumber) + RETURN DTOT({^1899/12/30} + INT(tnExcelSerialNumber)) + ; + ROUND(24*60*60 * (tnExcelSerialNumber % 1),0) +ENDFUNC && ExcelSerialNumber2Datetime + +* Convert Excel serial number to a time string +FUNCTION ExcelSerialNumber2Time(tnExcelSerialNumber) + RETURN SUBSTR(TTOC({^2000/01/10 00:00:00} + ROUND(24*60*60 * (tnExcelSerialNumber % 1),0),3), 12) +ENDFUNC && ExcelSerialNumber2Time + +*************************************************************** +* Unzip a zip file +* lcZipFile = 'c:\arhiva.zip' +* lcUnzipDir = '' +* lcErrrMessage = '' +* llSuccs = Unzip(m.lcZipFile, @lcUnzipDir, @lcErrrMessage) +*************************************************************** +PROCEDURE MyUnzip + LPARAMETERS tcFileName, tcUnzipDir, tcErrorMessage, tlSilent + * tcFileName: IN calea catre fisierul arhiva zip + * tcUnzipDir: IN/OUT director dezarhivare + * tcErrorMessage: OUT mesaj eroare daca RETURN = .F. + * tlSilent: .T. fara wait window la callback + * RETURN: Logical .T. daca dezarhivare cu succes + + Local lcFileName, lcLibraryPath, llSucces, loErr + + llSucces = .F. + lcFileName = m.tcFileName + tcErrorMessage = '' + If Empty(m.lcFileName) OR !FILE(m.lcFileName) + tcErrorMessage = 'Fisierul de dezarhivat nu exista!' + RETURN m.llSucces + ENDIF + + IF EMPTY(m.tcUnzipDir) + tcUnzipDir = Addbs(Sys(2023)) + Sys(2015) + ENDIF + + IF !DIRECTORY(m.tcUnzipDir ) + Md (m.tcUnzipDir ) + ENDIF + + Try + lcLibraryPath = ADDBS(m.gcBasePath) + Iif("ROA" $ Upper(gcBasePath), "COMUNROA", "COMUNCONTAFIN") + "\vfpcompression.fll" && CONTAFIN(ROA)\COMUNCONTAFIN(COMUNROA)\vfpcompression.fll + + If File(m.lcLibraryPath) + If !'vfpcompression' $ LOWER(Set("Library")) + Set Library To (m.lcLibraryPath) Additive + Endif + IF !m.tlSilent + ZipCallback("MyUnzipCallBack()") && Start Event Handling - Any Function/Procedure/Method (in scope of course) + ENDIF + llSucces = UnzipQuick(m.lcFileName, m.tcUnzipDir ) + ZipCallback("") && Stop Event Handling + ELSE + llSucces = .F. + tcErrorMessage = 'Nu exista libraria ' + m.lcLibraryPath + ENDIF + CATCH TO loErr + llSucces = .F. + tcErrorMessage = loErr.Message + ENDTRY + + RETURN m.llSucces +ENDPROC + + +Procedure UnzipQuickShell + Lparameters tcFileName, tcUnzipDir, tcErrorMessage, tlSilent + * tcFileName: IN calea catre fisierul arhiva zip + * tcUnzipDir: IN/OUT director dezarhivare + * tcErrorMessage: OUT mesaj eroare daca RETURN = .F. + * tlSilent: .T. fara wait window la callback && nu este implementat la shell + * RETURN: Logical .T. daca dezarhivare cu succes + + Local loShell As "shell.application", loEx as Exception + Local lcFileName, lcUnzipDir, llSucces, ofile + + tcErrorMessage = '' + llSucces = .F. + + Try + lcFileName = m.tcFileName && "C:\temp\D401001F.ZIP" + lcUnzipDir = m.tcUnzipDir + + IF EMPTY(m.tcUnzipDir) OR TYPE('tcUnzipDir') <> 'C' + lcUnzipDir = Addbs(Sys(2023)) + Sys(2015) + ENDIF + + If !Directory(m.lcUnzipDir) + Md (m.lcUnzipDir) + Endif + + loShell = Createobject("shell.application") + For Each ofile In loShell.NameSpace(m.lcFileName).items + loShell.NameSpace(m.lcUnzipDir).copyhere(ofile, 16) + Endfor + llSucces = .T. + Catch To loEx + tcErrorMessage = loEx.Message + llSucces = .F. + Endtry + + Return m.llSucces +Endproc && UnzipQuickShell + +******************************** +* Intoarce calea COMUNA pentru pdf-uri declaratii, efactura generate de program +* D:\ROA\[tcTip]\[AAAA_LL]\[FIRMA]\[tcTip2] +* lcFisierPDF = GetPdfPath('EFACTURA', 'PRIMITE') +******************************** +FUNCTION GetPdfPath + LPARAMETERS tcTip, tcTip2 + * tcTip: D300/D394/D390/eFactura + * tcTip2: (optional) Primite (eFactura) + + Local lcCaleFisier, lcMesaj, lcTip, llSucces, loEx, lcFirma + lcTip = IIF(!EMPTY(m.tcTip), UPPER(ALLTRIM(m.tcTip)), 'ALTE') + + *** Creez structura director export (caletemp\D390\aaaa_ll\firma\ + llSucces = .F. + Try + lcCaleFisier = Addbs(m.gcBasePath) + m.lcTip + "\" && d:\ROA\D390\ + If !Directory(m.lcCaleFisier) + Md (m.lcCaleFisier) + Endif + + lcCaleFisier = m.lcCaleFisier + Alltrim(Str(gnAn)) + "_" + Padl(Alltrim(Str(gnLuna)), 2, "0") + "\"&& d:\ROA\D390\2011_01\ + If !Directory(m.lcCaleFisier) + Md (m.lcCaleFisier) + Endif + + lcFirma = WindowsSpecialCharacters(m.gcFirma, "_") && Chrtran(m.gcFirma, [/\?%*:|"<>.,;=], Replicate('_', 14)) + lcFirma = Strtran(Alltrim(m.lcFirma), [ ], [_], 1, 100, 1) + lcFirma = LEFT(m.lcFirma,70) && daca este prea lunga calea, xml3.save nu poate salva fisiere + + lcCaleFisier = m.lcCaleFisier + m.lcFirma + "\" && Strtran(gcFirma, [ ], [_]) + "\" && d:\ROA\D390\2011_01\firma\ + + If !Directory(m.lcCaleFisier) + Md (m.lcCaleFisier) + Endif + + IF !EMPTY(m.tcTip2) + lcCaleFisier = m.lcCaleFisier + UPPER(ALLTRIM(m.tcTip2)) + '\' && d:\ROA\D390\2011_01\firma\primite\ + If !Directory(m.lcCaleFisier) + Md (m.lcCaleFisier) + ENDIF + ENDIF + + llSucces = .T. + Catch To loEx + lcCaleFisier = '' + lcMesaj = "Creare director " + lcCaleFisier + " " + loEx.Message + amessagebox(lcMesaj, 0 + 48) + Endtry + + RETURN m.lcCaleFisier +ENDFUNC && GetPdfPath + +FUNCTION DeleteFiles + lcName = SYS(2000, '*.TXT') + DO WHILE LEN (lcName) > 0 + DELETE FILE (lcName) + lcName = SYS (2000, '*.TXT') + ENDDO +ENDFUNC + +PROCEDURE HTTPDownloadFile + LPARAMETERS lcURL, m.lcDownloadFile + + Local loHTTP As "winhttp.winhttprequest.5.1" + Local lnBytes, lnStatus + + loHTTP = Createobject("winhttp.winhttprequest.5.1") + loHTTP.Open("GET", m.lcURL, .F.) + loHTTP.Send() + lnStatus = loHTTP.Status + lnBytes = 0 + If m.lnStatus = 200 && OK + lnBytes = STRTOFILE(loHTTP.ResponseBody, m.lcDownloadFile) + ENDIF + + RETURN m.lnBytes > 0 +ENDPROC \ No newline at end of file diff --git a/COMUN/programe/oproceduri_comune_imob.prg b/COMUN/programe/oproceduri_comune_imob.prg new file mode 100644 index 0000000..53cf0b7 --- /dev/null +++ b/COMUN/programe/oproceduri_comune_imob.prg @@ -0,0 +1,188 @@ +*!* oproceduri_comune_imob +*!* 12.07.2006 +*!* marius.mutu + +*!* 27.03.2013 +*!* marius.mutu +*!* GET_CURSOR_INCHIDERE_AMORTIZARI +*!* DEFALCARE SUME CHELTUIELI IN DEDUCTIBILE, NEDEDUCTIBILE IN FUNCTIE DE AMORT_MAX_DEDUCTIBL + +*!* 09.04.2013 +*!* marius.mutu +*!* GET_CURSOR_INCHIDERE_AMORTIZARI +*!* s-au tratat imobilizarile fara cont + +*!* 24.06.2020 +*!* Inchiderea de amortizari se face folosind modul experimental, din view +*!* In ROACONT nu am mod experimental, asa ca implicit este .T. + +*!* 23.01.2024 +*!* GET_CURSOR_INCHIDERE_AMORTIZARI : defalcare pe lucrari + +*** tcCursor = GET_CURSOR_AMORTIZARI (tnFiscala, tnAn, tnLuna) +*** tcCursor = GET_CURSOR_INCHIDERE_AMORTIZARI (tnTip, tnSectie, tnAn, tnLuna, tcCursor) + +*---------------------------------------------------- +Procedure GET_CURSOR_AMORTIZARI + Lparameters tnFiscala, tnAn, tnLuna, tnIdTipImobilizare, tnIdMf + + Local lnSucces, lcSel, lcCursor, llExperimental + Local lcFiltru, llSucces + Private pdDataI, pdDataF, pcCond, pnFiscala + llExperimental = .T. + IF TYPE('goApp.nExperimental') = 'N' + llExperimental = .T. && 25.11.2021 llExperimental = (goApp.nExperimental = 1) + ENDIF + + pdDataI = Date(tnAn, tnLuna, 1) + pdDataF = pdDataI + *pcCond = [id_tip_imobilizare = ] + ALLTRIM(STR(tnTip)) && merge fffff greu + + pcCond = [2=2] + lcFiltru = IIF(!EMPTY(m.tnIdTipImobilizare), [id_tip_imobilizare = ] + Alltrim(Str(m.tnIdTipImobilizare)), [1=1]) + m.gcCondSucursala + IIF(!EMPTY(m.tnIdMf), [ and id_mf = ] + ALLTRIM(STR(m.tnIdMf)), []) && merge normal in mod experimental cu selectie din view imob_vsituatie_lunara + If Empty(tnFiscala) + pnFiscala = 0 + Else + pnFiscala = tnFiscala + Endif + lcCursor = 'crsAmortizareTemp' + WAIT WINDOW 'Selectie amortizari ' + PADL(INT(m.tnLuna), 2, '0') + '/' + ALLTRIM(STR(INT(m.tnAn))) + ' ...' NOWAIT + If m.llExperimental + * EXPERIMENTAL SELECTIE DIN IMOB_VSITUATIE_LUNARA IN LOC DE PACK_IMOB.CALCUL_SITUATIE_LUNARA() + * Setez luna pentru view + + llSucces = goExecutor.oExecuta('begin pack_imob.setlunacurenta(?pdDataI); end;') + If m.llSucces + lcSel = [SELECT * FROM ] + Iif(m.pnFiscala = 0, [imob_vsituatie_lunara], [imobf_vsituatie_lunara]) + [ WHERE ] + m.lcFiltru + llSucces = goExecutor.oExecuta(m.lcSel, m.lcCursor) + Endif + Else + lcSel = [{call pack_imob.CALCUL_SITUATIE_LUNARA(?pdDataI,?pdDataF,?pcCond,?pnFiscala,?gnIdSucursala)}] + llSucces = goExecutor.oExecuta(lcSel, lcCursor) + Endif + + If !m.llSucces + lcCursor = '' + Endif + Return m.lcCursor + +Endproc && GET_CURSOR_AMORTIZARI + +*---------------------------------------------------- +Procedure GET_CURSOR_INCHIDERE_AMORTIZARI + Lparameters tnTip, tnSectie, tnLucrare, tnAn, tnLuna, tcCursor + + Local lnFiscal, lcCursor, lcSqlSectie, lnAnLuna, lnSucces + Local lcCursorPlcont, lcCursorTemp, lcSql + lnFiscal = 0 && amortizare contabila + lcCursor = "" + + lcCursor = GET_CURSOR_AMORTIZARI(m.lnFiscal, m.tnAn, m.tnLuna, m.tnTip) + If Empty(lcCursor) + Return '' + Endif + + && CORESPONDENTE CONTURI INCHIDERE + && DACA NU SUNT COMPLETATE - SE FOLOSESC CONTURI DEFAULT + *** ADAUG LINIILE PENTRU SUME DEDUCTIBILE (TIP = 1) + Create Cursor crsConturi (TIP N(1), Id N(10), id_sectie I Null, Cont c(4), acont c(4) Null, scd c(4) Null, ascd c(4) Null, scc c(4) Null, ascc c(4) Null) + + lcSql = "select 1 as tip, id, id_sectie, cont, acont, scd, ascd, scc, ascc from imob_inchidere" + llSucces = goExecutor.oExecuta(lcSql, "crsConturiTemp") + If m.llSucces + Insert Into crsConturi (tip, id, id_sectie, cont, acont, scd, ascd, scc, ascc) ; + select tip, Id, id_sectie, cont, acont, scd, ascd, scc, ascc From crsConturiTemp + Endif + +*!* *** COMPLETEZ CONTURILE CARE NU SUNT CONFIGURATE IN IMOB_INCHIDERE +*!* Insert Into crsConturi (TIP, Cont, acont) ; +*!* select Distinct 1 As TIP, Cont, acont ; +*!* from (m.lcCursor) Where !Empty(Nvl(Cont, '')) And Padr(Nvl(Cont, ''), 4, ' ') + Padr(Nvl(acont, ''), 4, ' ') Not In ; +*!* (Select Padr(Nvl(Cont, ''), 4, ' ') + Padr(Nvl(acont, ''), 4, ' ') From crsConturi) + +*!* && COMPLETEZ SCD, SCC DEFAULT +*!* Update crsConturi Set scd = '6811' Where Empty(scd) +*!* Update crsConturi Set scc = Iif(tnTip = 1, '281', '280') + Substr(Cont, 3, 1) Where Empty(scc) + + *** ADAUG LINIILE PENTRU SUME NEDEDUCTIBILE (TIP = 2) + Insert Into crsConturi (tip, id_sectie, Cont, acont, scd, ascd, scc, ascc) ; + select 2 As tip, id_sectie, Cont, acont, scd, ascd, scc, ascc ; + from crsConturi + + lnAnLuna = tnAn * 12 + tnLuna; + + lcSql = [select cont, acont, explicatie from plcont where inactiv = 0 and an = ] + Transform(tnAn) + lcCursorPlcont = [crsPlcontTemp] + lnSucces = goExecutor.oExecute(lcSql, lcCursorPlcont) + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare, 0 + 16, 'Eroare') + Endif + If !Used("crsPlContTemp") + Create Cursor crsPlContTemp (Cont c(4), acont c(4), explicatie c (30)) + Endif + + *** CUMULARE PE SECTII sau pe lucrari + m.lcCursorTemp = 'crsAmortizariTemp' + + Select Sum(Cast(Iif(c.TIP = 1, Iif(a.amort_max_deductibil > 0, Min(a.rata, a.amort_max_deductibil), a.rata), ; + iif(a.amort_max_deductibil > 0 And a.rata > a.amort_max_deductibil, a.rata - a.amort_max_deductibil, 0)) As N(20, 4))) As suma, ; + a.Cont, a.acont, Nvl(a.id_sectie, 00000) As id_sectie, Nvl(a.sectie, Space(50)) As sectie, ; + CAST(Nvl(a.id_lucrare, 0) as I) As id_lucrare, CAST(Nvl(a.nrord, '') as C(100)) As nrord, ; + IIF(!Empty(Nvl(c.Cont, "")), c.scd, Space(4)) As scd, ; + IIF(!Empty(Nvl(c.Cont, "")), c.ascd, Space(4)) As ascd, ; + IIF(!Empty(Nvl(c.Cont, "")), c.scc, Space(4)) As scc, ; + IIF(!Empty(Nvl(c.Cont, "")), c.ascc, Space(4)) As ascc, ; + padr(Alltrim(Nvl(a.Cont, '')) + Iif(!Empty(Nvl(a.acont, '')), '.' + Nvl(a.acont, ''), '') + ' ' + Alltrim(Nvl(p.explicatie, '')) + Iif(c.TIP = 1, ' - DEDUCTIBIL', ' - NEDEDUCTIBIL'), 200, ' ') As explicatie ; + from (m.lcCursor) a ; + left Join crsPlContTemp p On a.Cont = p.Cont And Nvl(a.acont, 'xxxx') = Nvl(p.acont, 'xxxx') ; + left Join crsConturi c On a.Cont = c.Cont And Nvl(a.acont, 'xxxx') = Nvl(c.acont, 'xxxx') AND NVL(a.id_sectie, 0) = NVL(c.id_sectie,0) ; + where id_tip_imobilizare = tnTip ; + group By a.Cont, a.acont, a.id_sectie, a.sectie, a.id_lucrare, a.nrord, p.explicatie, c.Cont, c.scd, c.ascd, c.scc, c.ascc, c.TIP ; + into Cursor crsAmortizariTemp Readwrite + + DO CASE + *** CUMULARE SUME PE SECTII SI LUCRARI + CASE tnSectie = 1 AND tnLucrare = 1 + Select Cont, acont, scd, ascd, scc, ascc, explicatie, id_sectie, sectie, id_lucrare, nrord, Sum(suma) As suma ; + from (m.lcCursorTemp) ; + group By Cont, acont, scd, ascd, scc, ascc, explicatie, id_sectie, sectie, id_lucrare, nrord ; + into Cursor (m.tcCursor) Readwrite + + *** CUMULARE SUME FARA SECTII, PE LUCRARI + CASE tnSectie <> 1 AND tnLucrare = 1 && nu pe sectii + Select Cont, acont, scd, ascd, scc, ascc, explicatie, 0 As id_sectie, '' As sectie, id_lucrare, nrord, Sum(suma) As suma ; + from (m.lcCursorTemp) ; + group By Cont, acont, scd, ascd, scc, ascc, explicatie, id_lucrare, nrord ; + into Cursor (m.tcCursor) Readwrite + + *** CUMULARE SUME PE SECTI, FARA LUCRARI + CASE tnSectie = 1 AND tnLucrare <> 1 && nu pe sectii + Select Cont, acont, scd, ascd, scc, ascc, explicatie, id_sectie, sectie, 0 as id_lucrare, '' as nrord, Sum(suma) As suma ; + from (m.lcCursorTemp) ; + group By Cont, acont, scd, ascd, scc, ascc, explicatie, id_sectie, sectie ; + into Cursor (m.tcCursor) Readwrite + + *** CUMULARE SUME FARA LUCRARI, FARA SECTI + CASE tnSectie <> 1 AND tnLucrare <> 1 && nu pe sectii + Select Cont, acont, scd, ascd, scc, ascc, explicatie, 0 AS id_sectie, '' AS sectie, 0 as id_lucrare, '' as nrord, Sum(suma) As suma ; + from (m.lcCursorTemp) ; + group By Cont, acont, scd, ascd, scc, ascc, explicatie ; + into Cursor (m.tcCursor) Readwrite + + ENDCASE + Use In (Select(m.lcCursorTemp)) + + + && sterg sumele 0 + Delete From (tcCursor) Where suma = 0 + + Use In (Select(m.lcCursor)) + Use In (Select(m.lcCursorPlcont)) + + If Used(m.tcCursor) + Return m.tcCursor + Else + Return '' + Endif + +Endproc && GET_CURSOR_INCHIDERE_AMORTIZARI diff --git a/COMUN/programe/oproceduri_configurare.prg b/COMUN/programe/oproceduri_configurare.prg new file mode 100644 index 0000000..401ffb5 --- /dev/null +++ b/COMUN/programe/oproceduri_configurare.prg @@ -0,0 +1,229 @@ +*!* 22.02.2010 +*!* marius.mutu +*!* viz_config_grupe_gestiuni - arat doar gestiunile din sucursala curenta + +*!* 22.03.2010 +*!* marius.mutu +*!* viz_config_grupe_gestiuni - + ID_SECTIE, SECTIE + +*!* 31.12.2019 +*!* marius.mutu +*!* viz_config_grupe_gestiuni - GESTIUNI.GESTIONAR, COMISIE_RECEPTIE + +PROCEDURE viz_config_grupe_gestiuni +PARAMETERS tntip + + + lntip = tntip + PRIVATE poGestiuni + Local lcSchema, lcSelect, lcOrder, lcFiltru, lcFiltruOriginal, llAfiseaza, lcgroup, lcFiltruOriginal + PRIVATE poGrupe,pcschema2,pcselect2,pcfiltru2,pcorder2 + PRIVATE poUtilizatori + LOCAL lcschema3,lcselect3,lcfiltru3,lcorder3,lcgroup3, llModParam3, lcFiltruOriginal3 + PRIVATE poGrupe_Gestiuni,pcschema4,pcselect4,pcfiltru4,pcorder4 + PRIVATE poGrupe_Utilizatori,pcschema5,pcselect5,pcfiltru5,pcorder5 + STORE '' TO poGestiuni,poGrupe,poUtilizatori,poGrupe_Gestiuni,poGrupe_Utilizatori + + *********************** + PRIVATE aTipuriGestiuni + DIMENSION aTipuriGestiuni(7) + *EXTERNAL ARRAY taTipuriGestiuni + aTipuriGestiuni(1)=[] + aTipuriGestiuni(2)=[Materii Prime si Materiale] + aTipuriGestiuni(3)=[Obiecte de Inventar] + aTipuriGestiuni(4)=[Produse] + aTipuriGestiuni(5)=[Marfuri la Pret de Achizitie] + aTipuriGestiuni(6)=[Marfuri la Pret de Vanzare] + aTipuriGestiuni(5)=[Marfuri la Pret de Achizitie*] + *********************** + + lcsql = [select nume_tip,id_tipgest from vtipuri_gestiuni ] + lnSucces = goExecutor.oexecute(lcSql,[crsTipuri_gest]) + IF lnSucces < 0 + lcMesaj = goExecutor.cEroare + ofrm_er =CREATEOBJECT([frm_mesaj],[Eroare],[exclam.ico],[Avertizare],lcmesaj) + ofrm_er.show() + RELEASE ofrm_er + return + ENDIF + + lcSchema = [ID_GESTIUNE N(5), NUME_GESTIUNE V(50),INACTIV N(1),CONT V(4),ACONT V(4),] + ; + [NR_PAG N(2) ,CGEST V(20) ,ID_SUCURSALA N(10) ,DESCRIERE V(100) ,NUME_TIP V(30) ,SUCURSALA V(100) , ] + ; + [ID_RESPONSABIL N(10) ,DENUMIRE V(70), ID_SECTIE N(5), SECTIE V(50), ACONT_CHELTUIALA V(4), ACONT_ADAOS V(4),ID_LUCRARE N(10), NRORD V(100), ] + ; + [GESTIONAR V(50), COMISIE_RECEPTIE1 V(50), COMISIE_RECEPTIE2 V(50), COMISIE_RECEPTIE3 V(50)] + + lcSelect = [select ID_GESTIUNE,NUME_GESTIUNE,INACTIV,CONT,ACONT,NR_PAG,CGEST,ID_SUCURSALA,DESCRIERE,NUME_TIP,SUCURSALA,ID_RESPONSABIL,DENUMIRE, ] + ; + [ID_SECTIE, SECTIE, ACONT_CHELTUIALA, ACONT_ADAOS,ID_LUCRARE, NRORD, ] +; + [GESTIONAR, COMISIE_RECEPTIE1, COMISIE_RECEPTIE2, COMISIE_RECEPTIE3] + ; + [ from vnom_gestiuni] + + lcOrder = [nume_gestiune] + lcgroup = [] + lcFiltru = [] + *!* 22.02.2010 + lcFiltruOriginal = SUBSTR(gcCondSucursala,6) + *!* 22.02.2010 ^ + + pcschema2=['id_grupe n(5),nume_grupa c(100), nume_parinte c(100), parent_id n(5), inactiv n(1)'] + pcselect2=['select id_grupe,nume_grupa, nume_parinte, parent_id, inactiv'+]+; + [' from ]+gcS+[.vgest_nom_grupe where 1=2'] + pcorder2=[nume_grupa] + pcfiltru2=[2=2] + + lcschema3=[id_util n(5),utilizator c(30)] + lcselect3=[select distinct a.id_util,a.utilizator ]+; + [ from syn_vutilizatori a join syn_vdef_util_firme b on a.id_util = b.id_util ] + +*!* pcselect3=['select id_util,utilizator'+]+; +*!* [' from contafin_oracle.vutilizatori where 1=2'] + lcorder3=[utilizator] + lcfiltru3=[1=2] + lcgroup3 = [] + llModParam3 = .T. +*!* modificare 19.03.2007 + lcFiltruOriginal3 = [a.inactiv = 0 and b.id_firma = ?gnIdFirma] +*!* lcFiltruOriginal3 = [b.id_program = ]+ALLTRIM(STR(gnIdProgram))+[ and b.id_firma = ]+ALLTRIM(STR(gnIdFirma)) +*!* modificare 19.03.2007 ^ + + pcschema4=['id_cgg n(5),id_gestiune n(5),nume_gestiune c(50),cgest c(20),nr_pag n(2),'+]+; + ['cont c(4),acont c(4),inactiv_gest n(1),nume_tip_gest c(30),'+]+; + ['id_grupe n(5),nume_grupa c(100),inactiv_grupa n(1)'] + pcselect4=['select a.id_cgg,a.id_gestiune,b.nume_gestiune,b.cgest,b.nr_pag,'+]+; + ['b.cont,b.acont,b.inactiv as inactiv_gest,b.nume_tip as nume_tip_gest,'+]+; + ['a.id_grupe,c.nume_grupa,c.inactiv as inactiv_grupa'+]+; + [' from ]+ gcS+[.vgest_coresp_grupe_gestiuni a '+] + ; + [' join ]+ gcS + [.vnom_gestiuni b on a.id_gestiune=b.id_gestiune '+]+; + [' join ]+gcS+ [.vgest_nom_grupe c on a.id_grupe = c.id_grupe '+]+; + [' where 1=2'] + pcorder4=[c.nume_grupa] + pcfiltru4=[1=2] + + pcschema5=['id_cug n(5),id_util n(5),id_grupe n(5),nume_grupa c(100),inactiv n(1)'] + pcselect5=['select a.id_cug,a.id_util,a.id_grupe,b.nume_grupa,b.inactiv'+]+; + [' from ]+gcS+[.vgest_coresp_util_grupe a '+]+; + [' join ]+gcS+[.vgest_nom_grupe b on a.id_grupe = b.id_grupe'+]+; + [' where 1=2'] + pcorder5=[b.nume_grupa] + pcfiltru5=[1=2] + + llModParam = .T. + llAfiseaza = .F. + _screen.MousePointer= 11 + *gencursor('poGestiuni','crsGestiuni',pcselect1,pcfiltru1,pcschema1,pcorder1,llAfiseaza) + gencursor('poGestiuni','crsGestiuni', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal) + gencursor('poGrupe','crsGrupe',pcselect2,pcfiltru2,pcschema2,pcorder2,llAfiseaza) + gencursor('poUtilizatori','crsUtilizatori',lcselect3,lcfiltru3,lcschema3,lcorder3,llAfiseaza,lcgroup3, llModParam3, lcFiltruOriginal3) + gencursor('poGrupe_Gestiuni','crsGrupe_Gestiuni',pcselect4,pcfiltru4,pcschema4,pcorder4,llAfiseaza) + gencursor('poGrupe_Utilizatori','crsGrupe_Utilizatori',pcselect5,pcfiltru5,pcschema5,pcorder5,llAfiseaza) + + poGrupe.ca_baza1.afisare() + poGestiuni.ca_baza1.afisare() + poUtilizatori.ca_baza1.afisare() + SELECT crsUtilizatori + + GO top + lcId_util = ALLTRIM(STR(crsUtilizatori.id_util)) + poGrupe_Utilizatori.ca_baza1.cfiltru = [a.id_util=]+lcId_util + poGrupe_Utilizatori.ca_baza1.afisare() + + + DO case + CASE lntip = 1 + SELECT crsGrupe + GO top + lcId_grupe = ALLTRIM(STR(crsGrupe.id_grupe)) + poGrupe_Gestiuni.ca_baza1.cfiltru=[a.id_grupe=]+lcId_grupe + poGrupe_Gestiuni.ca_baza1.corder=[b.nume_gestiune] + poGrupe_Gestiuni.ca_baza1.afisare() + CASE lntip = 2 + SELECT crsGestiuni + GO top + lcId_gestiune = ALLTRIM(STR(crsGestiuni.id_gestiune)) + poGrupe_Gestiuni.ca_baza1.cfiltru=[a.id_gestiune=]+lcId_gestiune + poGrupe_Gestiuni.ca_baza1.corder=[c.nume_grupa] + poGrupe_Gestiuni.ca_baza1.afisare() + CASE lntip = 3 + poGrupe_Gestiuni.ca_baza1.cfiltru = [1=2] + poGrupe_Gestiuni.ca_baza1.afisare() + ENDCASE + +*!* DO FORM frm_grupe_gestiuni_utilizatori NOSHOW NAME ofrm_gest LINKED + ofrm_gest = CREATEOBJECT('frm_gestiuni_grupe_utilizatori') + _screen.MousePointer= 0 + ofrm_gest.pagefr_config.activepage = lntip + ofrm_gest.show(1) + RELEASE ofrm_gest + + RELEASE poGestiuni + RELEASE poGrupe + RELEASE poUtilizatori + RELEASE poGrupe_Gestiuni + RELEASE poGrupe_Utilizatori + +ENDPROC +*********************** + +*********************** +FUNCTION tip_gestiune +PARAMETERS tnpoz + + IF tnpoz = 0 + RETURN [] + ELSE + RETURN aTipuriGestiuni(tnpoz) + ENDIF +ENDFUNC +*********************** + +FUNCTION iif_inactiv + LOCAL lcrez + lcrez = IIF(inactiv=1,'DA','NU') + RETURN lcrez +ENDFUNC + + +********* INCEPUT: viz_config_tipuri_gestiuni *********** +PROCEDURE viz_config_tipuri_gestiuni + + PRIVATE pnId_tipgest + STORE 0 TO pnId_tipgest + + PRIVATE poCoresp,poPlcont + STORE '' TO poCoresp,poPlcont + + lcSql1 = [select nume_tip,id_tipgest from tipuri_gestiuni] + lccursor1 = [crsTipuri_gest] + lnsucces1 = goExecutor.oExecute(lcSql1,lccursor1) + IF lnsucces1 < 0 + lcmesaj = goExecutor.cEroare + ofrm_er = CREATEOBJECT('frm_mesaj','Eroare','exclam.ico','Avertizare',lcmesaj) + ofrm_er.show(1) + RELEASE ofrm_er + RETURN + ENDIF + + lcSelect1 = ['select cont from ] + gcS + [.vplcont_sintetic where 1=2'] + lcSchema1 = ['cont c(4)'] + lcorder1 = [cont] + lcfiltru1 = [ an = ] + ALLTRIM(STR(gnAn)) + [ and SUBSTR(cont,1,1) = '3' ] + ; + [ and cont not in (select cont from ] + gcs +; + [.vcoresp_cont_tipgest where id_tipgest = ?pnId_tipgest)] + + lcSelect2 = ['select cont,id_cct,id_tipgest from ] + gcS + [.vcoresp_cont_tipgest where 1=2'] + lcSchema2 = ['cont c(4),id_cct n(5),id_tipgest n(5)'] + lcorder2 = [cont] + lcfiltru2 = [id_tipgest = ?pnId_tipgest] + llAfiseaza = .t. + + gencursor('poPlcont','crsPlcont',lcselect1,lcfiltru1,lcschema1,lcorder1,llAfiseaza) + gencursor('poCoresp','crsCoresp',lcselect2,lcfiltru2,lcschema2,lcorder2,llAfiseaza) + + ofrm_tipgest = CREATEOBJECT('frm_config_tipuri_gestiuni') + ofrm_tipgest.show(1) + RELEASE ofrm_tipgest + + RELEASE poCoresp +ENDPROC +********* SFARSIT: viz_config_tipuri_gestiuni *********** + + diff --git a/COMUN/programe/oproceduri_curs.prg b/COMUN/programe/oproceduri_curs.prg new file mode 100644 index 0000000..d298c43 --- /dev/null +++ b/COMUN/programe/oproceduri_curs.prg @@ -0,0 +1,125 @@ +*************************************************************************************************************** +**** Proceduri: +**** vizualizeaza_curs +**** citeste_cursuri_stoc +**** citeste_curs_zi +*************************************************************************************************************** +****************************************** INCEPUT: vizualizeaza_curs ***************************************** +Procedure vizualizeaza_curs +*!* modificare ROAFACTURARE v 2.0.46 +Lparameters tdDataCurs +*!* modificare ROAFACTURARE v 2.0.46 ^ +Private poCurs +Local lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, loFrmCurs +Store .F. To llAfiseaza +Store '' To poCurs +If Used('crscurs') + Use In crscurs +Endif + +lcSchema = ['id_curs n(10),id_valuta n(10),data d,data2 d,nume_val c(100),curs n(20,gnPCurs),multiplicator N(10),id_valuta_iso N(10),iso_valuta C(3),curs_bnr n(20,4)'] +lcSelect = ['select id_curs,id_valuta,data,data2,nume_val,curs,multiplicator,id_valuta_iso,iso_valuta,curs_bnr from ] + gcS + [.vcurs where 2=2'] +lcOrder = [data] +*!* modificare ROAFACTURARE v 2.0.46 +*!* lcFiltru = [1 = 2] +lcFiltru = Iif(Empty(tdDataCurs),[1 = 2],[data <= to_date('] + Dtoc(tdDataCurs,1) + [','YYYYMMDD') ] + ; + [and data2 >= to_date('] + Dtoc(tdDataCurs,1) + [','YYYYMMDD') ]) +*!* modificare ROAFACTURARE v 2.0.46 ^ +llAfiseaza = .F. +gencursor('poCurs', 'crscurs', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza) +poCurs.ca_baza1.afisare() + +*!* modificare ROAFACTURARE v 2.0.46 +*!* loFrmCurs = Createobject("frm_curs") +loFrmCurs = Createobject("frm_curs",tdDataCurs) +*!* modificare ROAFACTURARE v 2.0.46 ^ +loFrmCurs.Show(1) + +Release loFrmCurs, poCurs +If Used('crscurs') + Use In crscurs +Endif +Endproc +****************************************** SFARSIT: vizualizeaza_curs ***************************************** +***************************************** INCEPUT: citeste_cursuri_stoc **************************************** +Function citeste_cursuri_stoc +Lparameters tdData,tnIdValuta +Private pdDataCurs,pnIdValuta +Local lcCursor, llContinuare,lcListaValute +pdDataCurs = tdData +pnIdValuta = tnIdValuta +lcCursor = [crscursuri] +llVerificare = .T. +llContinuare = .T. +lnIncercari = 1 + +Do While llVerificare + If llContinuare + If Used(lcCursor) + Use In (lcCursor) + Endif + lcSql = [select a.id_valuta, b.curs, b.multiplicator, c.nume_val, c.moneda_nationala from ] + ; + [(select distinct id_valuta from ] + gcS + [.stoc where an = ?gnAn and luna = ?gnLuna ] + gcCondSucursala + ; + [and id_gestiune in (select distinct b.id_gestiune from ] + gcS + [.gest_coresp_util_grupe a ] + ; + [left join ] + gcS + [.gest_coresp_grupe_gestiuni b on a.id_grupe = b.id_grupe ] + ; + [left join ] + gcS + [.nom_gestiuni c on b.id_gestiune = c.id_gestiune ] + ; + [where a.id_util = ?gnIdUtil and a.sters = 0 and b.sters = 0 and c.nr_pag ] + IIF(gnTipGest=6,[=],[<>]) + [ 6) ] + ; + [union select ?pnIdValuta as id_valuta from dual) a ] + ; + [left join ] + gcS + [.curs b on a.id_valuta = b.id_valuta and b.data <= ?pdDataCurs and b.data2 >= ?pdDataCurs and b.sters = 0 ] + ; + [left join ] + gcS +[.nom_valute c on a.id_valuta = c.id_valuta ] + ; + [where c.moneda_nationala = 0 and a.id_valuta is not null] + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + If lnSucces < 0 + amessagebox(goExecutor.oPrelucrareEroare(),16,"Eroare") + llVerificare = .F. + llContinuare = .F. + Else + If Reccount(lcCursor) > 0 + lcListaValute = [] + Select (lcCursor) + Scan For Isnull(Curs) + lcListaValute = lcListaValute + Alltrim(Upper(nume_val)) + [,] + Endscan + If !Empty(lcListaValute) + If Used(lcCursor) + Use In (lcCursor) + Endif + If lnIncercari >= 2 And aMessagebox("Doriti sa continuati introducerea datelor?",4+32,"Confirmare continuare")==7 + llVerificare = .F. + llContinuare = .F. + Else + lcListaValute = Substr(lcListaValute,1,Len(lcListaValute)-1) + [ !] + amessagebox("Pentru data de "+Dtoc(pdDataCurs)+" nu exista cursul pentru " + ; + IIF(Getwordcount(lcListaValute,[,])=1,"valuta ","valutele ")+lcListaValute,48,"Atentie") + vizualizeaza_curs() + Endif + Else + llVerificare = .F. + Endif + Else + amessagebox("Cautarea cursurilor pentru ziua de "+Dtoc(pdDataCurs)+" nu a intors rezultate!",16,"Eroare") + llVerificare = .F. + llContinuare = .F. + Endif + Endif + Endif + lnIncercari = lnIncercari + 1 +Enddo + +Return llContinuare +Endfunc && citeste_cursuri_stoc +***************************************** SFARSIT: citeste_cursuri_stoc **************************************** +***************************************** INCEPUT: citeste_curs_zi **************************************** +Procedure citeste_cursuri_zi +Lparameters tdDataCurs +Local lcCursor +lcCursor = [crscursuri] +lcSql = [select nume_val,curs,id_valuta,multiplicator from ] + gcS + [.vcurs where data <= to_date('] + Dtoc(tdDataCurs,1) + [','YYYYMMDD') ] + ; + [and data2 >= to_date('] + Dtoc(tdDataCurs,1) + [','YYYYMMDD') order by nume_val] +lnSucces = goExecutor.oExecute(lcSql,lcCursor) +If lnSucces < 0 + amessagebox(goExecutor.oPrelucrareEroare(),16,"Eroare") +EndIf +Release lcCursor +Endproc && citeste_curs_zi +***************************************** SFARSIT: citeste_curs_zi **************************************** diff --git a/COMUN/programe/oproceduri_evolutie.prg b/COMUN/programe/oproceduri_evolutie.prg new file mode 100644 index 0000000..2832cf3 --- /dev/null +++ b/COMUN/programe/oproceduri_evolutie.prg @@ -0,0 +1,407 @@ +*!* 24.06.2011 +*!* marius.mutu +*!* calc_indicatori_randuri +*!* daca un indicator avea valoare negativa, formula dadea eroare +*!* am transformat +-valoare in +(-valoare) + +*!* 31.07.2012 +*!* marius.mutu +*!* evalueaza_randul +*** Nu reevaluez totalurile cu CASE/IIF (ex R15 = CASE WHEN R15A > 0 THEN R15A ELSE 0 END) +*** pentru ca doresc sa suprascriu R15 + +*!* 27.02.2019 +*!* marius.mutu +*!* evalueaza_randul - upper(allt(rand)) + +*!* 13.02.2026 +*!* calc_indicatori_randuri - lcRandEval = 0 daca nu exista randul + +Procedure viz_set_calc +Parameters tctable, tnId_set, tlFaraGrafic, tcNumeSet, tnId_sectie, tnId_venchelt + +Private pcDataOra +pcDataOra = Get_Ora(2) + +Local llFaraGrafic, lcTitlu +llFaraGrafic = tlFaraGrafic + +If !Empty(tcNumeSet) + lcTitlu = Alltrim(tcNumeSet) +Else + lcTitlu = '' +Endif + +*!* If !Empty(tcFCentru) +*!* If !("FIRMA"$Upper(Alltrim(tcFCentru))) +*!* lcTitlu = Proper(Alltrim(tcFCentru)) + ' - ' + lcTitlu +*!* Endif +*!* Endif + +If !Used(tctable) + Return +Endif + +Select (tctable) && id_ind, rand, nume_ind, comentariu -> ....date +frml = Createobject("frm_viz_set_calc", tnId_set, tlFaraGrafic, lcTitlu, tnId_sectie, tnId_venchelt) +frml.lb_titlu_alb_b121.Caption = "Set calculat - " + lcTitlu +frml.grid1.RecordSource = tctable +frml.grid1.DeleteColumn(1) && id_ind +frml.grid1.DeleteColumn(1) && ord_rand + + +frml.grid1.DeleteColumn(3) && comentariu +* frml.grid1.FontName = "Arial Narrow" +lnnrcoloane = frml.grid1.ColumnCount +frml.grid1.column4.Width = 300 && nume_ind + +For i = 6 To lnnrcoloane+3 + cformat = "frml.grid1.Column"+Alltrim(Str(i))+".format='rk'" + &cformat + cinputmask = "frml.grid1.Column"+Alltrim(Str(i))+".inputmask" + &cinputmask = "999 999 999 999.99" +Endfor + +*!* frml.grid1.Width = frml.edtcomentariu.Left + frml.edtcomentariu.Width +frml.edtComentariu.ControlSource = tctable + ".comentariu" + +*!* If tlcalculat +*!* frml.cb_save1.Visible = .F. +*!* frml.cb_print1.Left = frml.cb_print1.Left+frml.cb_print1.Width+1 +*!* frml.cb_excel1.Left=frml.cb_excel1.Left+frml.cb_excel1.Width+1 +*!* frml.cb_explorer1.Left=frml.cb_explorer1.Left+frml.cb_explorer1.Width+1 +*!* Endif + +*frml.lockscreen=.f. + +frml.Show(1) + + +If Used('gtemp') + Use In gtemp +Endif + +If Used('xtab') + Use In xtab +Endif +Endproc && viz_set_calc +***------------------------------------------------------------------------------------ +Procedure lanseaza_excel +Parameters tcalias, tcTitlu, tlfara_grafic + +Private pctitlu +Local llEsteExcel +llEsteExcel = .F. +llEsteExcel=isComobject("Excel.Application") +If !llEsteExcel + Do mesaj With "Instalati Microsoft Excel","" + Return +Endif + +If Empty(tcTitlu) + pctitlu="Indicatori" +Else + pctitlu=Alltrim(tcTitlu) +Endif + +Declare aranduri[1] +Declare acoloane[1] +Declare arand[1] + +Select (tcalias) +lcField2=Field(4) && campul cu descrierea indicatorilor +lcSelect = [select ] + lcField2 + " "+[from ] + tcalias +" "+[into cursor tdesc] +&lcSelect +lnCount = _Tally +Dimension aranduri[lnCount] + +&&& obtin array pt grafic +i=0 +Select tdesc +Scan + i=i+1 + aranduri[i]=tdesc.nume_ind +Endscan + +If Used("tdesc") + Use In tdesc +Endif + +*** +Select (tcalias) + +lcField1=Field(3) && campul cu numele randului (indicatorului) +lcSelect1 = [select ] + lcField1 + " "+[from ] + tcalias +" "+[into cursor trand] +&lcSelect1 +lnCount1 = _Tally +Dimension arand[lnCount1] + +j=0 + +Select trand +Scan + j=j+1 + arand[j]=Right(Alltrim(trand.Rand),2) +Endscan + +If Used("trand") + Use In trand +Endif + +Select (tcalias) +lnFields=Fcount() +Dimension acoloane[lnFields] + +Select (tcalias) +lcSelect = [select ] + +For i=5 To lnFields + lcField=Field(i) + lcSelect = lcSelect + lcField + [,] +Endfor +lcSelect=Left(lcSelect,Len(lcSelect)-1) +lcSelect = lcSelect +" "+[ from ]+tcalias+" "+[ into cursor tExcel] +&lcSelect +lnCount = _Tally + +&&& obtin d200331001 , 200304 +Select (tcalias) +For i=5 To lnFields + lcTipCumul=Left(Field(i),1) + lcan=Substr(Field(i),2,4) + lcgrup=Right(Field(i),2) + acoloane[i-4]=cluna(lcgrup,lcTipCumul,lcan) +Endfor + +lcfis = Alltrim(pctitlu) +For i=0 To Len(lcfis)-1 + lccar = Substr(lcfis,i,1) + If Inlist(lccar,":","*","/","\","<",">",'"',"|","?") + lcfis= Strtran(lcfis,lccar,"_") + Endif +Endfor + +lcexcel= Addbs(Strtran(gcTempPath,"\\","\"))+lcfis+"_"+Sys(2)+".XLS" + +lcClasa = "EXCELX" +x=Newobject("XL_Manager",lcClasa) && alternatively you can drop this class on a VFP form +x.SaveAs=lcexcel && PART.XLS to be created in your TEMP folder +Dimension x.oWorkSheet[1] && need one page +x.oWorkSheet[1] = "Page 1 (with chart)" +x.Go() && remember this calls .populate_pages(). +*WAIT WINDOW 'Check out! ' + x.SAVEAS && Presto! (the output XLS document) +Release x + +OLEAPP = Getobject("","Excel.Application") +If Type('OLEAPP')!='O' + OLEAPP = Createobject("Excel.Application") +Endif +OLEAPP.WorkBooks.Open(lcexcel) +OLEAPP.Visible=1 + +Use In texcel +Return +Endproc &&lanseaza_excel +***------------------------------------------------------------------------------------ +***------------------------------------------------------------------------------------ +Procedure lanseaza_html +Parameters tcFile, tcTitluHtml, tlFaraGrafic + +Local llFaraGrafic, lcTitluHtml +llFaraGrafic = tlFaraGrafic +lcTitluHtml = Alltrim(tcTitluHtml) + +Select (tcFile) +lcfisd = gcTempPath + "copie.dbf" +Copy To (lcfisd) +Use (lcfisd) In 0 Exclusive +Select Copie + +losc = Createobject("aShowCursor") +With losc + .lAlternateRows = .T. + .CTABLEWIDTH = '100%' + .cCellspacing = '3' + .cAlternatingBGColor = "white" + .cTableBorder = "1" + .nForceToPreList = 75000 + .ShowCursor() +Endwith + +****** +*!* DEBUG +*!* SUSPEND +lcBar = "" +loGraph = Createobject('wwWebGraphs') +*** Make sure you pick a directory that exists +*** and is accessible through the Web +If Type("loGraph") = "O" + loGraph.cPhysicalPath = gcTempPath + loGraph.cLogicalPath = gcTempPath + + loGraph.ShowGraphFromCursor() + lcBar = loGraph.GetOutput() +Endif +****** + +lcFile = Strtran(Addbs(gcTempPath),"\\","\")+"Indicatori.htm" +lchtml = [

&lcTitluHtml

] +lchtml = lchtml + losc.ohtml.coutput + +If !llFaraGrafic &&daca am bifat optiunea "fara grafic" + lchtml = lchtml + [
] + lcBar +Endif + +lchtml = lchtml + [] +Strtofile(lchtml, lcFile) + +orep = Createobject("frm_webreporter") +orep.cReportFileName = lcFile +orep.displayreport + +Use In Copie +Endproc && lanseaza_html +***------------------------------------------------------------------------------------ +*!* ***------------------------------------------------------------------------------------ +*!* Procedure calc_indicatori_randuri +*!* Parameters tcFormula, tcTabel, tcColoana + +*!* lcFormula = ALLTRIM(tcFormula) +*!* lcColoana = ALLTRIM(tcColoana) +*!* lcTabel = tcTabel +*!* lcFormEvaluata = '' + +*!* Select * From (lcTabel) Into Cursor cLucru + +*!* Do While Len(lcFormula) > 0 +*!* lnRand = At('R',lcFormula) +*!* If lnRand > 0 Then +*!* lnNext = At(']',lcFormula) +*!* lcRand = ALLTRIM(Substr(lcFormula, lnRand + 1, (lnNext - lnRand - 1))) + +*!* Select cLucru +*!* Calculate Sum(&lcColoana) For ALLTRIM(Rand) = lcRand To lnSumaRand + +*!* lcFormEvaluata = lcFormEvaluata + Substr(lcFormula, 1, lnRand - 2) + '(' + Alltrim(Str(lnSumaRand,20,gnPA) + ')') + +*!* lcFormula = Substr(lcFormula, lnNext + 1) +*!* Else +*!* lcFormEvaluata = lcFormEvaluata + Substr(lcFormula, 1) +*!* lcFormula = '' +*!* Endif +*!* Enddo + +*!* If !Empty(lcFormEvaluata) And !Isnull(lcFormEvaluata) +*!* lcOldError = On("error") +*!* On Error lnret = 0 +*!* lnret = &lcFormEvaluata +*!* On Error &lcOldError +*!* Endif + +*!* Use In cLucru +*!* Return lnret + +*!* Endproc && calc_indicatori_randuri +*!* ***------------------------------------------------------------------------------------ +****------------------------------------------------------------------------------------ +Procedure calc_indicatori_randuri +Parameters tcFormula, tcTabel, tcColoana + +Local lnRet, lcFormula, lcColoana, lcTabel, lcFormEvaluata +Store 0 To lnRet +lcFormula = Alltrim(UPPER(tcFormula)) +lcFormula = Strtran(lcFormula,'CASE WHEN','IIF(') +lcFormula = Strtran(lcFormula,'THEN',',') +lcFormula = Strtran(lcFormula,'ELSE',',') +lcFormula = Strtran(lcFormula,'END',')') + +lcColoana = Alltrim(tcColoana) +lcTabel = tcTabel +lcFormEvaluata = '' + +Select * From (lcTabel) with (buffering = .T.) Into Cursor cLucru + +If Len(lcFormula) > 0 + Do While At('[R',lcFormula)>0 + lnRand = At('[R',lcFormula) + IF lnRand > 0 + lnRand = lnRand + 1 && pozitia R + ENDIF + lnNext = At(']',lcFormula) + + lcRandCompl = Substr(lcFormula, lnRand - 1, (lnNext - lnRand + 2)) + lcRand = Alltrim(Substr(lcFormula, lnRand + 1, (lnNext - lnRand - 1))) + *STRTOFILE(TRANSFORM(lcRand) + CHR(13) + CHR(10), 'e:\rand.txt',.T.) + lcRandEval = evalueaza_randul(lcRand, "cLucru", lcColoana) + IF EMPTY(NVL(m.lcRandEval, '')) + lcRandEval = '0' + ENDIF + + lnRandEval = At('[R',lcRandEval) + If lnRandEval > 0 + lnRandEval = lnRandEval + 1 && pozitia R + lcRandEval = '(' + ALLTRIM(lcRandEval) + ')' + ENDIF + + *!* 24.06.2011 + IF LEFT(lcRandEval,1) = [-] + lcRandEval = '(' + ALLTRIM(lcRandEval) + ')' + ENDIF + *!* 24.06.2011 ^ + + lcFormula = Strtran(lcFormula,lcRandCompl,lcRandEval) + + Enddo +Endif + +If !Empty(lcFormula) And !Isnull(lcFormula) + lcOldError = On("error") + On Error lnRet = 0 + lnRet = &lcFormula + On Error &lcOldError +Endif + +If Used("cLucru") + Use In cLucru +Endif + +Return lnRet + +Endproc && calc_indicatori_randuri +***------------------------------------------------------------------------------------ +Function evalueaza_randul +Parameters tcRand, tcTabel, tcColoana + +Local lcReturn, lcRand, lcTabel, lcColoana +Store "" To lcReturn +lcRand = tcRand +lcTabel = tcTabel +lcColoana = tcColoana + +Select (lcTabel) +Locate For UPPER(ALLTRIM(Rand)) = lcRand +If Found() + lnTip = tip + If tip = 5 + *** Nu reevaluez totalurile cu CASE/IIF (ex R15 = CASE WHEN R15A > 0 THEN R15A ELSE 0 END) + *** pentru ca doresc sa suprascriu R15 + IF !('CASE'$UPPER(NVL(formula,'')) OR 'IIF'$UPPER(NVL(formula,''))) + lcReturn = UPPER(formula) + lcReturn = Strtran(lcReturn,'CASE WHEN','IIF(') + lcReturn = Strtran(lcReturn,'THEN',',') + lcReturn = Strtran(lcReturn,'ELSE',',') + lcReturn = Strtran(lcReturn,'END',')') + ELSE + lcReturn = Alltrim(Str(NVL(&tcColoana,0),20,2)) + ENDIF + Else + lcReturn = Alltrim(Str(NVL(&tcColoana,0),20,2)) + Endif +Endif + +Return lcReturn +Endfunc && evalueaza_randul +***----------------------------------------------------- + + + diff --git a/COMUN/programe/oproceduri_facturare.prg b/COMUN/programe/oproceduri_facturare.prg new file mode 100644 index 0000000..2a80993 --- /dev/null +++ b/COMUN/programe/oproceduri_facturare.prg @@ -0,0 +1,2394 @@ +*!* 20.02.2015 +*!* marius.mutu +*!* + caut_facturi_multiple_client_articol: alegere factura dupa client si articol in scop de retur articol pe o factura de vanzare normala + +*!* 16.06.2015 +*!* marius.mutu +*!* vizualizare_facturi + coloane:id_facturare, listare_detaliata + +*!* 11.05.2017 +*!* marius.mutu +*!* caut_contract_facturare: se poate adauga un contract din cautarea de contracte - parametru contracte_nou with tnIdPart + +*!* 16.12.2019 +*!* marius.mutu +*!* vizualizare_facturi, vizualizare_facturi2 crsDetalii.id_jtva_coloana_ex, jtva_coloana_ex + +*!* 29.12.2019 +*!* marius.mutu +*!* vizualizare_facturi, vizualizare_facturi2 crsFcturi.email_facturare, adresa_client, email_client, adresa_beneficiar, email_beneficiar pentru trimiterea facturii pe email la clienti + +*!* 20.01.2020 +*!* marius.mutu +*!* vizualizare_facturi, vizualizare_facturi2 crsFacturi.codmatc - codmat client + +*!* 30.01.2020 +*!* marius.mutu +*!* vizualizare_facturi, vizualizare_facturi2 + id_util pentru listarea facturii cu responsabilul care a introdus factura + +*!* 25.03.2020 +*!* marius.mutu +*!* vizualizare_facturi, vizualizare_facturi2 + tlShowRecords - arata facturile din luna la intrarea in formular + +*************************************************************************************************************** +**** Proceduri: +**** vizualizare_optiuni_facturare +**** configurare_serii_facturare +**** facturare_lista_de_preturi +**** facturare_contracte +**** facturare_comenzi +**** facturare_avize +**** facturare_articole_compuse +**** emitere_aviz_clienti +**** emitere_aviz_clienti_debitori +**** emitere_aviz_clienti_custodie +**** emitere_aviz_transfer +**** emitere_dispozitii_livrare +**** vizualizare_facturi +**** vizualizare_proforme +**** verifica_setari +**** vanzare_materii_prime +**** vanzare_produse +**** vanzare_marfa_pret_achi +**** vanzare_marfa_pret_vanz +**** vanzare_marfa_pret_achi_vanz +**** selecteaza_gestiuni +**** creeaza_cursor_seturi +**** creeaza_cursor_seturi_proforme +**** recreeaza_cursoare_retur +**** calculeaza_totaluri +**** Functii : +**** actualizeaza_optiuni_program - inlocuita de actualizeaza_optiuni_program din oinit_optiuni.prg +**** caut_comanda_client +**** caut_comanda_gestiune +**** caut_contract_facturare +**** caut_avize +**** caut_facturi_client +**** caut_facturi_multiple_client +**** caut_gestiune_sursa +**** caut_utilizator_facturare +**** caut_gestiune_dest - am mutat-o in ocautare.prg +**** caut_politici_curente_util - veche 26.01 +*************************************************************************************************************** +************************************ INCEPUT: vizualizare_optiuni_facturare *********************************** +Procedure vizualizare_optiuni_facturare + Lparameters tnTip + && 1 = optiuni de pe server + && 2 = optiuni din registrul Windows + Local lnTipOptiuni + If Used('crsoptiuni') + Use In crsoptiuni + Endif + If gcNumeProgram = 'ROACONTRACTE' + lnTipOptiuni = 2 + Else + lnTipOptiuni = 1 + Endif + Do Case + Case tnTip = 1 + If actualizeaza_optiuni_program() + ofrmoptiune = Createobject('frm_optiuni_facturare', lnTipOptiuni) + ofrmoptiune.Show(1) + Release ofrmoptiune + Endif + Case tnTip = 2 + ofrmoptiune = Createobject('frm_optiuni_facturare_local', lnTipOptiuni) + ofrmoptiune.Show(1) + Release ofrmoptiune + Otherwise + *!* amessagebox("Optiune invalida!",16,"Eroare") + lnTipOptiuni = 0 + Endcase + If Used('crsoptiuni') + Use In crsoptiuni + Endif + Release lnTipOptiuni +Endproc && vizualizare_optiuni_facturare +************************************ SFARSIT: vizualizare_optiuni_facturare *********************************** +*!* ************************************ INCEPUT: facturare_din_stoc ******************************************* +*!* Procedure facturare_din_stoc +*!* factureaza(7) +*!* Endproc && facturare_din_stoc +*!* ************************************ SFARSIT: facturare_din_stoc ******************************************* +************************************ INCEPUT: facturare_lista_de_preturi *********************************** +Procedure facturare_lista_de_preturi + Do politica.mpr +Endproc && facturare_lista_de_preturi +************************************ SFARSIT: facturare_lista_de_preturi *********************************** +************************************ INCEPUT: facturare_contracte ****************************************** +Procedure facturare_contracte + LPARAMETERS tcTip + + LOCAL lcTip + lcTip = UPPER(ALLTRIM(TRANSFORM(m.tcTip))) + + IF EMPTY(m.lcTip) OR !INLIST(m.lcTip, 'FACTURA LEI', 'INVOICE', 'FACTURA VALUTA') + lcTip = 'FACTURA LEI' + ENDIF + DO CASE + CASE m.lcTip = 'FACTURA LEI' + factureaza(2) + CASE m.lcTip = 'INVOICE' + factureaza(6) + CASE m.lcTip = 'FACTURA VALUTA' + factureaza(52) + ENDCASE +Endproc && facturare_contracte +************************************ SFARSIT: facturare_contracte ****************************************** +************************************ INCEPUT: facturare_comenzi ******************************************** +Procedure facturare_comenzi + factureaza(3) +Endproc && facturare_comenzi +************************************ SFARSIT: facturare_comenzi ******************************************** +************************************ INCEPUT: facturare_avize *********************************************** +Procedure facturare_avize + factureaza(4) +Endproc && facturare_avize +************************************ SFARSIT: facturare_avize *********************************************** + +************************************ INCEPUT: copiere_factura *********************************************** +PROCEDURE copiere_factura + LPARAMETERS toFactura + factureaza(toFactura.Tip, toFactura) +ENDPROC && copiere_factura +************************************ SFARSIT: copiere_factura *********************************************** + +********************************** INCEPUT: facturare_articole_compuse *************************************** +Function facturare_articole_compuse + Private ofrmfactseturi + Local lnNrInregRate + *!* modificare v 2.0.56 + *!* Dimension laStructura(1,18) + *!* Afields(laStructura,[crsfactura]) + *!* If Used('crsfacturaset') + *!* Use In crsfacturaset + *!* Endif + *!* Create Cursor crsfacturaset From Array laStructura + *!* modificare v 2.0.67 + *!* copiaza_structura_cursor([crsfactura],[crsfacturaset]) + *!* modificare v 2.0.67 ^ + *!* modificare v 2.0.56 ^ + gnButon = 1 + Select crsfactura + lnRecno = Recno() + Replace id_set_fact With 0 All + *!* modificare v 2.0.67 + Calculate Cnt() For Inlist(opt_facturare, 1, 2) To lnNrInregRate + Set Filter To !Inlist(opt_facturare, 1, 2) + If lnNrInregRate <> Reccount('crsfactura') + copiaza_structura_cursor([crsfactura], [crsfacturaset]) + Select crsfactura + *!* modificare v 2.0.67 ^ + Go Top + ofrmfactseturi = Createobject('frm_articole_compuse') + ofrmfactseturi.Show(1) + Release ofrmfactseturi + *!* modificare v 2.0.67 + Endif + Release lnNrInregRate + *!* modificare v 2.0.67 ^ + Select crsfactura + *!* modificare v 2.0.67 + Set Filter To + *!* modificare v 2.0.67 ^ + Go Min(lnRecno, Reccount('crsfactura')) + Return Iif(gnButon = 1, .T., .F.) +Endfunc +********************************** SFARSIT: facturare_articole_compuse *************************************** +************************************ INCEPUT: emitere_aviz_clienti ***************************************** +Procedure emitere_aviz_clienti + Lparameters tnTip + Do Case + Case tnTip = 1 + factureaza(21) && pe baza de comenzi + Case tnTip = 2 + factureaza(22) && pe baza de lista de preturi + Case tnTip = 3 + factureaza(26) && pe baza de lista de contract + + Case tnTip = 4 && Retur aviz \>) + ENDTEXT + lcCursor = SYS(2015) + llSucces = goExecutor.oExecuta(m.lcSql, m.lcCursor) + + *************** + * Suprascriere ctip_factura special pentru ACN, pentru ca voiau ENERGIE ELECTRICA in loc de CHIRII SI UTILITATI pe borderou + * si nu am adaugat un tip nou de prestatii ENERGIE ELECTRICA + *************** + IF !EMPTY(m.tcCursorFacturi) AND USED(m.tcCursorFacturi) + SELECT (m.tcCursorFacturi) + SCAN + lnIdVanzare = id_vanzare + lcTipFactura = ALLTRIM(NVL(ctip_factura,'')) + UPDATE (m.lcCursor) SET ctip_factura = m.lcTipFactura WHERE id_vanzare = m.lnIdVanzare + ENDSCAN + ENDIF + + Select distinct id_borderou, data_borderou, id_client, client, email_client, .F. As email_succes, Space(250) As email_mesaj ; + From (m.lcCursor) ; + ORDER BY id_borderou ; + Into Cursor cBorderouEmail READWRITE + + Select id_borderou, id_vanzare, data_act, numar_act, ctip_factura ; + From (m.lcCursor) ; + ORDER BY data_act, numar_act ; + Into Cursor cFacturiEmail Readwrite + + USE IN (SELECT(m.lcCursor)) + + loMail = getoEmail() && email.prg + + lcSubjectTemplate = loMail.cBorderouSubject + lcBodyTemplate = loMail.cBorderouBody + llCancel = .F. + Sele cBorderouEmail + Scan + lnIdBorderou = id_borderou + ldDataBorderou = Ttod(data_borderou) + lcClient = Upper(Alltrim(client)) + lnIdClient = id_client + lcEmailClient = Alltrim(NVL(email_client,'')) + loMail.cTo = m.lcEmailClient + llSucces = .T. + + Wait Window 'Email ' + Alltrim(Transform(Recno('cBorderouEmail'))) + '/' + Alltrim(Transform(Reccount('cBorderouEmail'))) + ' Client: ' + m.lcClient Nowait + + lcSubject = m.lcSubjectTemplate && Borderou facturi nr. din - ' + lcSubject = Strtran(m.lcSubject, '', Alltrim(Str(m.lnIdBorderou)), 1, 1, 1) + lcSubject = Strtran(m.lcSubject, '', Alltrim(Dtoc(m.ldDataBorderou)), 1, 1, 1) + lcSubject = Strtran(m.lcSubject, '', m.lcClient, 1, 1, 1) + loMail.cSubject = m.lcSubject + + lcBody = m.lcBodyTemplate && Aveti atasat borderoul de facturi nr. din si documentele asociate pentru serviciile prestate de <>. + lcBody = Strtran(m.lcBody, '', Alltrim(Str(m.lnIdBorderou)), 1, 10, 1) + lcBody = Strtran(m.lcBody, '', Alltrim(Dtoc(m.ldDataBorderou)), 1, 10, 1) + lcBody = Strtran(m.lcBody, '', m.lcClient, 1, 10, 1) + loMail.cHTMLBody = m.lcBody + + * Atasez borderoul si toate fisierele pdf care au aceeasi denumire ca aaaallzz_nrfact_[factura].pdf + lcFiles = "" + lcFile = GetPDFBorderouFile(m.ldDataBorderou, m.lnIdBorderou) && d:\roa\pdf\20200401_29_borderou.pdf + * Generez borderoul in caz ca nu era listat si salvat pdf + IF !FILE(m.lcFile) + llListare = .F. + llPdf = .T. + rap_borderou_clienti(m.lnIdBorderou, m.llPdf, m.llListare) && oproceduri_rapoarte_fact.prg + ENDIF + IF !FILE(m.lcFile) + lnRaspuns = MESSAGEBOX('Email ' + Alltrim(Transform(Recno('cBorderouEmail'))) + '/' + Alltrim(Transform(Reccount('cBorderouEmail'))) + ' Client: ' + m.lcClient + CHR(13) + CHR(10) + ; + 'Nu exista borderoul ' + m.lcFile + '!' + CHR(13) + CHR(10) + ; + 'Continuati fara borderou?', 3+32, _Screen.Caption) + DO CASE + CASE m.lnRaspuns = 6 && YES + * + CASE m.lnRaspuns = 7 && NO + llSucces = .F. + CASE m.lnRaspuns = 2 && CANCEL + llSucces = .F. + llCancel = .T. + EXIT + ENDCASE + ENDIF + IF m.llCancel + EXIT + ENDIF + + loMail.EmailSetAttachment(m.lcFile) + lcFiles = m.lcFiles + Iif(File(m.lcFile), m.lcFile, "") + + Select cFacturiEmail + Scan For id_borderou = m.lnIdBorderou + lnIdVanzare = id_vanzare + ldDataFactura = data_act + lnNumarFactura = numar_act + loDate = Null + lcFacturaFile = GetPDFFacturaFile(m.ldDataFactura, m.lnNumarFactura) && d:\roa\pdf\20200402_12346_factura.pdf + IF !FILE(m.lcFacturaFile) + lnRaspuns = MESSAGEBOX('Email ' + Alltrim(Transform(Recno('cBorderouEmail'))) + '/' + Alltrim(Transform(Reccount('cBorderouEmail'))) + ' Client: ' + m.lcClient + CHR(13) + CHR(10) + ; + 'Nu exista factura ' + m.lcFacturaFile + '!' + CHR(13) + CHR(10) + ; + 'Continuati fara factura?', 3+32, _Screen.Caption) + DO CASE + CASE m.lnRaspuns = 6 && YES + * + CASE m.lnRaspuns = 7 && NO + llSucces = .F. + EXIT + CASE m.lnRaspuns = 2 && CANCEL + llSucces = .F. + llCancel = .T. + EXIT + ENDCASE + ENDIF + lcScheletonFile = Strtran(lcFacturaFile, 'factura', '*', 1, 10, 1) && d:\roa\pdf\20200402_12346_*.pdf (_recapitulatia.pdf, _situatie_stationare.pdf, _declaratie_comandant.pdf) + lcDir = Addbs(Justpath(m.lcFacturaFile)) + lnFiles = Adir(laFiles, m.lcScheletonFile) + For lnFile = 1 To m.lnFiles + lcFile = m.lcDir + laFiles[m.lnFile, 1] + loMail.EmailSetAttachment(m.lcFile) + lcFiles = m.lcFiles + Iif(File(m.lcFile), m.lcFile, "") + Endfor + Endscan && cFacturiEmail + + IF m.llCancel + EXIT + ENDIF + + * Email + IF m.llSucces + lcErrorMessage = '' + If loMail.Send() > 0 + llClearErrors = .T. + lcErrorMessage = loMail.GetErrorMessage(m.llClearErrors) + llSucces = .F. + Endif + + Replace email_succes With m.llSucces, email_mesaj With Left(m.lcErrorMessage, 250) In cBorderouEmail + ENDIF && llSucces + + If Inkey(0.5) = 27 && 'ESC' + If AMESSAGEBOX('Doriti sa intrerupeti operatia?', 4 + 32, _Screen.Caption) = 6 + Exit + Endif + Endif + Endscan + + Select cBorderouEmail + Copy To (m.lcRaportEmail) Type Xl5 + OPEN_DEFAULT_APP(m.lcRaportEmail) + + Use In (Select('cBorderouEmail')) + Use In (Select('cFacturiEmail')) + + Select (m.lcSelect) +ENDPROC && email_borderou_facturi + +* ------------------------------------ +* Apeleaza email_facturi() cu parametri ListareFactura, ListareRecapitulatie, ListareAlteDocumente +PROCEDURE wrap_email_facturi + LPARAMETERS toFacturiForm, tcCursorFacturi, tnFactura, tnRecapitulatia, tnAlteDocumente, tnIdVanzare + * toFacturiForm (optional): referinta la formularul frm_facturi, pentru generare pdf factura, recapitulatie, in caz ca nu exista deja + * tcCursorFacturi: cursorul cu lista de facturi (id_vanzare, data_act, numar_act, serie_act, total_fara_tva, total_tva, total_cu_tva, client, email_facturare) + * tnFactura: 0 = nu se ataseaza factura, 1 = se ataseaza factura, 2 = se genereaza factura daca nu exista si se ataseaza + * tnRecapitulatia: 0 = nu se ataseaza recapitulatia, 1 = se ataseaza recapitulatia, 2 = se genereaza recapitulatia daca nu exista si se ataseaza + * tnAlteDocumente: 0 = nu se ataseaza alte documente, 1 = se ataseaza alte documente cu aceeasi structura denumire ca factura + * tnIdVanzare: (optional) vanzari.id_vanzare, daca se apeleaza din afara formularului de vizualizare facturi + + LOCAL loDate + loDate = CREATEOBJECT("empty") + ADDPROPERTY(loDate, 'cCursorFacturi', IIF(TYPE('tcCursorFacturi') = 'C' and !EMPTY(m.tcCursorFacturi) and USED(m.tcCursorFacturi), m.tcCursorFacturi, '')) + ADDPROPERTY(loDate, 'nListareFactura', m.tnFactura) + ADDPROPERTY(loDate, 'nListareRecapitulatia', m.tnRecapitulatia) + ADDPROPERTY(loDate, 'nListareAlteDocumente', m.tnAlteDocumente) + ADDPROPERTY(loDate, 'nIdVanzare', IIF(TYPE('tnIdVanzare') = 'N', m.tnIdVanzare, 0)) + + email_facturi(toFacturiForm, loDate) +ENDPROC && wrap_email_facturi + +* ------------------------------------ +* trimite email factura, recapitulatie si alte documente pdf cu aceeasi structura ca factura.pdf +* In formularul Vizualizare facturi se apasa butonul listare +PROCEDURE email_facturi + Lparameters toFacturiForm, toDate + * toFacturiForm (optional): referinta la formularul frm_facturi, pentru generare pdf factura, recapitulatie, in caz ca nu exista deja + + + *** Trimit email la facturile alese, sau la factura de pe inregistrarea curenta + + Local laFiles[1], lcBody, lcClient, lcDir, lcEmail, lcErrorMessage, lcFacturaFile, lcFile, lcSelect + Local lcFileName, lcFiles, lcNume, lcRaportEmail, lcRecapitulatiaFile, lcScheletonFile + Local lcSerieFactura, lcSubject, lcTipDocument, lcTo, lcWhere, ldDataFactura, llClearErrors + Local llJustPDF, llListareFactura, llListareRecapitulatia, llListareAlteDocumente, llSilent, llSucces, lnFile, lnFiles + Local lnIdVanzare, lnNumarFactura, lnRecno, loDate, loMail, lcSubjectTemplate, lcBodyTemplate, lnIdVanzare, lcCursorFacturi, llUsed + lcSelect = SELECT() + loMail = getoEmail() && email.prg + + lcWhere = "" + llListareFactura = .T. + llGenerareFactura = .F. + llListareRecapitulatia = .F. + llGenerareRecapitulatia = .F. + llListareAlteDocumente = .F. + lnIdVanzare = 0 + lcCursorFacturi = '' + If Type('toDate') = 'O' + lcCursorFacturi = IIF(TYPE('toDate.cCursorFacturi') = 'C', toDate.cCursorFacturi, '') + llListareFactura = IIF(Type('toDate.nListareFactura') = 'N', INLIST(toDate.nListareFactura, 1, 2), .T.) + llGenerareFactura = IIF(Type('toDate.nListareFactura') = 'N', toDate.nListareFactura = 2, .F.) + + llListareRecapitulatia = IIF(Type('toDate.nListareRecapitulatia') = 'N', INLIST(toDate.nListareRecapitulatia, 1, 2), .F.) + llGenerareRecapitulatia = IIF(Type('toDate.nListareRecapitulatia') = 'N', toDate.nListareRecapitulatia = 2, .F.) + + llListareAlteDocumente = IIF(Type('toDate.nListareAlteDocumente') = 'L', toDate.nListareAlteDocumente = 1, .F.) + lnIdVanzare = IIF(Type('toDate.nIdVanzare') = 'N', toDate.nIdVanzare, 0) + Endif + + lcRaportEmail = Addbs(gcTempPath) + "email_" + Ttoc(Datetime(), 1) + '.xls' + + CREATE CURSOR cEmail (id_vanzare I, data_act D null, numar_act N(14) null, serie_act C(20) null, client C(200) null, ; + total_fara_tva N(20,4) null, total_tva N(20,4) null, total_cu_tva N(20,4) null, ; + email_facturare C(200) null, email_succes L, email_mesaj C(250)) + + llUsed = .T. + IF !USED(m.lcCursorFacturi) AND !EMPTY(m.lnIdVanzare) + lcCursorFacturi = 'cEmailTemp' + lcSql = [SELECT id_vanzare, data_act, numar_act, serie_act, total_fara_tva, total_tva, total_cu_tva, client, email_facturare FROM fact_vfacturi2 WHERE id_vanzare = ] + ALLTRIM(STR(m.lnIdVanzare)) + llSucces = goExecutor.oExecuta(m.lcSql, m.lcCursorFacturi) + llUsed = .F. + ENDIF + IF USED(m.lcCursorFacturi) + SELECT cEmail + APPEND FROM DBF(m.lcCursorFacturi) + ENDIF + IF !m.llUsed + USE IN (SELECT(m.lcCursorFacturi)) + ENDIF + + lcSubjectTemplate = loMail.cSubject + lcBodyTemplate = loMail.cHtmlBody + + Sele cEmail + Scan + lcFiles = "" + ldDataFactura = data_act + lcSerieFactura = Alltrim(serie_act) + lnNumarFactura = numar_act + lcNume = Upper(Alltrim(NVL(client,''))) + lcClient = m.lcNume + lnIdVanzare = id_vanzare + loDate = Null + + lcSubject = m.lcSubjectTemplate + lcSubject = Strtran(m.lcSubject, '', Alltrim(Str(m.lnNumarFactura)), 1, 1, 1) + lcSubject = Strtran(m.lcSubject, '', Alltrim(Dtoc(m.ldDataFactura)), 1, 1, 1) + lcSubject = Strtran(m.lcSubject, '', m.lcClient, 1, 1, 1) + loMail.cSubject = m.lcSubject + + lcBody = m.lcBodyTemplate + lcBody = Strtran(m.lcBody, '', Alltrim(Str(m.lnNumarFactura)), 1, 10, 1) + lcBody = Strtran(m.lcBody, '', Alltrim(Dtoc(m.ldDataFactura)), 1, 10, 1) + lcBody = Strtran(m.lcBody, '', m.lcClient, 1, 10, 1) + loMail.cHtmlBody = m.lcBody + + * Generare PDF factura + lcFacturaFile = GetPDFFacturaFile(m.ldDataFactura, m.lnNumarFactura) + If m.llListareFactura + If !File(m.lcFacturaFile) AND m.llGenerareFactura AND TYPE('toFacturiForm') = 'O' + llSilent = .F. + llJustPDF = .T. + lcTipDocument = 'FACTURA' + loDate = toFacturiForm.do_listare_document(m.lnIdVanzare, m.llSilent, m.llJustPDF, m.lcTipDocument) && .ListareDocument(m.llSilent, m.llJustPDF, "cEmail") + ENDIF + IF FILE(m.lcFacturaFile) + loMail.EmailSetAttachment(m.lcFacturaFile) + lcFiles = m.lcFiles + Iif(File(m.lcFacturaFile), m.lcFacturaFile, "") + ENDIF + ENDIF && llListareFactura + + * Generare PDF recapitulatie + lcRecapitulatiaFile = GetPDFRecapitulatiaFile(ldDataFactura, m.lnNumarFactura) + If m.llListareRecapitulatia + If !File(m.lcRecapitulatiaFile) AND m.llGenerareRecapitulatia AND TYPE('toFacturiForm') = 'O' + llSilent = .F. + llJustPDF = .T. + lcTipDocument = 'RECAPITULATIE' + loDate = toFacturiForm.do_listare_document(m.lnIdVanzare, m.llSilent, m.llJustPDF, m.lcTipDocument) && .ListareDocument(m.llSilent, m.llJustPDF, "cEmail") + ENDIF + IF FILE(m.lcRecapitulatiaFile) + loMail.EmailSetAttachment(m.lcRecapitulatiaFile) + lcFiles = m.lcFiles + Iif(File(m.lcRecapitulatiaFile), "," + m.lcRecapitulatiaFile, "") + ENDIF + ENDIF && llListareRecapitulatia + + * Atasez alte documente cu aceeasi structura ca factura.pdf + IF m.llListareAlteDocumente + lcScheletonFile = Strtran(lcFacturaFile, 'factura', '*', 1, 10, 1) && d:\roa\pdf\20200402_12346_*.pdf (_recapitulatia.pdf, _situatie_stationare.pdf, _declaratie_comandant.pdf) + lcDir = Addbs(Justpath(m.lcFacturaFile)) + lnFiles = Adir(laFiles, m.lcScheletonFile) + For lnFile = 1 To m.lnFiles + lcFileName = laFiles[m.lnFile, 1] + * Nu mai atasez factura.pdf si recapitulatie.pdf + If Inlist(Lower(m.lcFileName), Lower(JUSTFNAME(m.lcFacturaFile)), Lower(JUSTFNAME(m.lcRecapitulatiaFile))) + Loop + Endif + lcFile = m.lcDir + m.lcFileName + loMail.EmailSetAttachment(m.lcFile) + lcFiles = m.lcFiles + Iif(File(m.lcFile), m.lcFile, "") + ENDFOR + ENDIF && llListareAlteDocumente + + * Email + Wait Window 'Email ' + Alltrim(Transform(Recno('cEmail'))) + '/' + Alltrim(Transform(Reccount('cEmail'))) + ' Client: ' + m.lcClient + ' Factura: ' + Alltrim(Str(m.lnNumarFactura)) Nowait + lcEmail = Alltrim(Nvl(cEmail.email_facturare, '')) && am adaugat direct in crsFacturi.email_facturare, ca sa nu mai folosesc loDate.oClient.email_facturare, daca fisierele pdf sunt deja listate + lcTo = Iif(!Empty(Nvl(m.lcEmail, '')), m.lcEmail, '') + loMail.cTo = m.lcTo + + llSucces = .T. + lcErrorMessage = '' + If loMail.Send() > 0 + llClearErrors = .T. + lcErrorMessage = loMail.GetErrorMessage(m.llClearErrors) + llSucces = .F. + Endif + Replace email_succes With m.llSucces, email_mesaj With Left(m.lcErrorMessage, 250) In cEmail + + If Inkey(0.5) = 27 && 'ESC' + If AMESSAGEBOX('Doriti sa intrerupeti operatia?', 4 + 32, _Screen.Caption) = 6 + Exit + Endif + Endif + Endscan + + lcMesaj = '' + SELECT cEmail + SCAN + lcMesaj = lcMesaj + 'Factura ' + TRANSFORM(numar_act) + ' din ' + TRANSFORM(data_act) + ' ' + ALLTRIM(NVL(client,'')) + ' : EMAIL ' + ; + IIF(email_succes, 'SUCCES', 'EROARE: ' + ' ' + ALLTRIM(NVL(email_mesaj,''))) + CHR(13) + CHR(10) + ENDSCAN + AMESSAGEBOX(m.lcMesaj,0+64,_screen.Caption) +*!* +*!* Copy To (m.lcRaportEmail) Type Xl5 +*!* OPEN_DEFAULT_APP(m.lcRaportEmail) + + Use In (Select('cEmail')) + + SELECT(m.lcSelect) + +ENDPROC && email_facturi + +*********************************************** +* Listeaza factura, aviz, proforma, recapitulatie +* Se apeleaza dupa scrierea in baza de date pe baza id_vanzare +* Exista si listarea dupa emiterea facturii, din cursoarele locale +* intoarce poDate pentru folosirea informatiilor despre factura (ex: poDate.email_factura in pluginul de trimitere email cu atasament factura) +PROCEDURE listeaza_formular + Lparameters lnIdVanzare, tlSilent, tlJustPDF, tcTipDocument, tlEFactura + * tlSilent: listare fara previzualizare + * tlJustPDF: listare doar pdf, fara previzualizare/imprimanta - pentru atasament la email + * tcTipDocument: FACTURA/RECAPITULATIE/EFACTURA + * tlEfactura: export xml eFactura + + + Local lcNumeCursor, lnIdVanzare, lcTipDocument, lnIdFact, lnIdPart, loSoldClient + Local lcCursor, lcProcedura, lcRaport, lcSql, lnSucces + LOCAL loEx as Exception + *:Global ocomanda + *lcNumeCursor = tcNumeCursor + Local lnTip + Private poDate, poDateGestiuneDest, pnCod, pnid_comanda_aviz, pnIdGestiuneRetur + Local lnDiscount, lnDiscountVal, lnProcTvav + lcTipDocument = Iif(Type('tcTipDocument') = 'C' And !Empty(m.tcTipDocument), Upper(Alltrim(m.tcTipDocument)), 'FACTURA') && FACTURA/RECAPITULATIE/EFACTURA + + +********************************************************** +* Creez cursoarele crsFacturaListare, crsDetaliiListare +********************************************************** +Create Cursor crsFacturaListare (ales N(1) null, id_vanzare N(20) null, id_fact N(20), id_comanda N(20) null, dataora T(8) null, dataora_exp T(8) null, ; + data_act D(8) null, sters N(1) null, dataoras T(8) null, numar_act N(14) null, serie_act C(10) null, tip N(5) null, ; + id_part N(10) null, discount N(17,4) null, disc_fara_tva N(17,4) null, discount_evidentiat N(1) null, text_aditional M(4) null, ; + facturat N(1) null, data_facturat T(8) null, explicatie C(240) null, altele C(200) null, client C(100) null, cod N(20) null, ; + id_util I(4) null, utilizator C(30) null, utils C(30) null, utilfact C(30) null, delegat C(70) null, bidelegat C(30) null, ; + cnpdelegat C(15) null, nume_agent C(70) null, nrinmat C(10) null, total_fara_tva N(20,4) null, total_tva N(20,4) null, total_cu_tva N(20,4) null, ; + id_gestiune N(10) null, serie_chit C(20) null, nr_incasare N(10) null, incasat N(17,4) null, in_valuta N(1) null, sucursala C(100) null, ; + id_ruta N(10) null, ruta C(100) null, curs N(20,4) null, multiplicator N(10) null, nume_val C(50) null, valuta C(50) null, id_valuta N(5) null, ; + valval N(20,4) null, tvaval N(20,4) null, totval N(20,4) null, id_delegat N(10) null, id_agent N(10) null, id_masina N(10) null, valoarea N(20,4) null, ; + nume_gestiune C(50) null, id_sectie N(5) null, sectie C(50) null, id_lucrare N(20) null, lucrare C(200) null, tip_incasare N(10) null, ; + afisare_scadenta N(1) null, id_ordl N(10) null, tva_incasare N(1) null, listare_detaliata N(1) null, id_facturare N(10) null, adresa_facturare C(250) null, ; + email_facturare C(100) null, adresa_client C(250) null, email_client C(100) null, adresa_beneficiar C(250) null, email_beneficiar C(100) null, ; + id_beneficiar N(20) null, beneficiar C(100) null, tip_factura N(5) null, ctip_factura C(100) null, id_ctr N(10) null, contract C(100) null, eproforma N(1) null,tip_saft N(3) null,institutie_publica N(1) null) + +Create Cursor crsDetaliiListare (id_vanzare N(20) null, id_vanzare_det N(10) null, id_articol N(10) null, lot c(100) null, serie C(100) null, pret N(20,6) null, pret_val N(20,6) null, sters N(1) null, dataoras D(8) null, ; +proc_tvav N(10,4) null, cantitate N(10,4) null, discount_unitar N(20,6) null, discount_unitar_val N(20,6) null, cont C(4) null, id_valuta N(10) null, id_gestiune N(20) null, ; +pret_achizitie N(20,6) null, pret_cu_tva N(1) null, denumire C(250) null, explicatie M(4) null, um C(10) null, cod_um_iso C(5) null, nume_lista_preturi C(100) null, nume_gestiune C(50) null, ; +utils C(30) null, curs N(20,4) null, multiplicator N(10) null, nume_val C(10) null, tip_valuta N(1) null, id_vanzare_set N(10) null, codmatf C(50) null, codmat C(50) null, ; +codmatc C(50) null, codbare C(50) null, id_subgrupa N(5) null, subgrupa C(100) null, client C(70) null, id_jtva_coloana N(10) null, jtva_coloana C(100) null, ; +id_jtva_coloana_ex N(10) null, jtva_coloana_ex C(100) null, id_ctr N(10) null, numar_contract C(50) null, taxcode N(6) null) + + + TEXT TO lcSqlFactura TEXTMERGE NOSHOW +select 0 as ales,id_vanzare,id_fact,id_comanda,dataora,dataora_exp,data_act,sters,dataoras,numar_act,serie_act,tip,id_part,discount,disc_fara_tva,discount_evidentiat,text_aditional,facturat,data_facturat, + explicatie,altele,client,cod,id_util,utilizator,utils,utilfact,delegat,bidelegat,cnpdelegat,nume_agent,nrinmat,total_fara_tva,total_tva,total_cu_tva,id_gestiune,serie_chit,nr_incasare,incasat, + in_valuta,sucursala,id_ruta,ruta,curs,multiplicator,nume_val,valuta,id_valuta,valval,tvaval,totval,id_delegat,id_agent,id_masina,valoarea, + nume_gestiune,id_sectie,sectie,id_lucrare,lucrare,tip_incasare,afisare_scadenta,id_ordl,tva_incasare,listare_detaliata, + id_facturare,adresa_facturare,email_facturare,adresa_client,email_client,adresa_beneficiar,email_beneficiar,id_beneficiar, beneficiar, tip_factura, ctip_factura, id_ctr, contract,eproforma,tip_saft,institutie_publica + from fact_vfacturi2 + where id_vanzare = <> + ENDTEXT + + TEXT TO lcSqlDetalii TEXTMERGE NOSHOW +select id_vanzare, id_vanzare_det, id_articol, lot, serie, pret, pret_val, sters, dataoras, + proc_tvav, cantitate, discount_unitar, discount_unitar_val, cont, + id_valuta, id_gestiune, pret_achizitie, pret_cu_tva, denumire, explicatie, + um, cod_um_iso, nume_lista_preturi, nume_gestiune, utils, curs, multiplicator, + nume_val, tip_valuta, id_vanzare_set, codmatf, codmat, codmatc, codbare, id_subgrupa, subgrupa, client, id_jtva_coloana, jtva_coloana, id_jtva_coloana_ex, jtva_coloana_ex, id_ctr, numar_contract, taxcode + from fact_vfacturi_detalii + where id_vanzare = <> + order by id_vanzare_det + ENDTEXT + + llSucces = goExecutor.oExecuta(m.lcSqlFactura, 'cFacturaTemp') + IF m.llSucces + SELECT crsFacturaListare + APPEND FROM DBF('cFacturaTemp') + USE IN (SELECT('cFacturaTemp')) + + llSucces = goExecutor.oExecuta(m.lcSqlDetalii, 'cDetaliiTemp') + IF m.llSucces + SELECT crsDetaliiListare + APPEND FROM DBF('cDetaliiTemp') + USE IN (SELECT('cDetaliiTemp')) + ENDIF && llSucces + ENDIF && llSucces + + +******************************************* + + Select crsFacturaListare + lnTip = tip + pnCod = cod + pnid_comanda_aviz = 0 + + poDate = Createobject("oDateFactura", 0, 0) + + Select crsFacturaListare + lnIdFact = id_fact + lnIdPart = id_part + poDate.nid_vanzare = id_vanzare + poDate.nRelistare = 1 + poDate.tip = lnTip + poDate.nract = numar_act + poDate.serie_act = Alltrim(serie_act) + poDate.dataact = Iif(Type('data_act') = 'T', Ttod(data_act), data_act) + poDate.discount_evidentiat = discount_evidentiat + poDate.text_aditional = Nvl(text_aditional, []) + poDate.text_aditional = Strtran(poDate.text_aditional, CHR(170),Chr(13)+Chr(10),1,100,1) + poDate.nrinmat = nrinmat + poDate.nume_delegat = delegat + poDate.bidelegat = bidelegat + poDate.cnpdelegat = cnpdelegat + poDate.dataora_exp = dataora_exp + *!* poDate.listaid = Iif(poDate.tip = 2,Alltrim(Str(id_ctr)),Iif(Inlist(poDate.tip, 3, 21, 28, 42),Alltrim(Str(id_comanda)), [0])) + poDate.listaid = Iif(Inlist(poDate.tip, 3, 21, 28, 42, 47), Alltrim(Str(id_comanda)), []) && id_comanda + poDate.ntip_incasare = tip_incasare && modificare v 2.0.84 + poDate.nr_incasare = nr_incasare + poDate.serie_chit = Nvl(serie_chit, []) && modificare v 2.0.80 + poDate.incasat = incasat + poDate.in_valuta = in_valuta + poDate.afisare_scadenta = afisare_scadenta && modificare ROACONTRACTE v 2.0.38 + poDate.descriere = altele && modificare v 2.0.44 nr comanda/aviz + poDate.id_ordl = id_ordl && modificare v 2.0.98 + poDate.tva_incasare = tva_incasare && modificare v 2.2.0 + poDate.id_facturare = id_facturare + poDate.nListareDetaliata = listare_detaliata + + poDate.nListareSilentioasa = Iif(m.tlSilent, 1, 0) + poDate.nListareJustPDF = Iif(m.tlJustPDF, 1, 0) + + poDate.nIdBeneficiar = id_beneficiar + poDate.nTipFactura = tip_factura + poDate.id_util = id_util + poDate.eProforma = eproforma + poDate.nEFactura = IIF(m.tlEFactura, 1, 0) && xml EFactura + poDate.id_ctr = id_ctr + poDate.contract = ALLTRIM(NVL(contract,'')) + + + If poDate.in_valuta = 1 + *!* modificare v 2.0.56 + poDate.nume_valuta = nume_val + poDate.Curs = Curs + poDate.multiplicator = multiplicator + poDate.totftvaconv = total_fara_tva + poDate.tottvaconv = total_tva + poDate.totctvaconv = poDate.totftvaconv + poDate.tottvaconv + lnDiscountVal = discount + lnDiscount = Round(lnDiscountVal * poDate.Curs / poDate.multiplicator, gnPc) + Else + lnDiscount = discount + lnDiscountVal = 0 + ENDIF + poDate.nValVal = valval + poDate.nTvaVal = tvaval + poDate.nTotVal = totval + poDate.cValuta = ALLTRIM(nume_val) + poDate.Curs = Curs + poDate.multiplicator = multiplicator + poDate.tip_saft = NVL(tip_saft, 380) && factura initiala + poDate.institutie_publica = NVL(institutie_publica, 0) + + Do Case + Case m.lcTipDocument = 'FACTURA' + If !Pemstatus(poDate, "id_comanda_aviz", 5) + AddProperty(poDate, "id_comanda_aviz", 0) + Endif + If Inlist(poDate.tip, 3, 21, 28, 42, 47) && factura / aviz din comanda && modificare v 2.0.93 : am adaugat 47 + Select crsFacturaListare + poDate.id_comanda_aviz = id_comanda + If Inlist(poDate.tip, 21, 28) + lcSql = [select nr_fact from fact_vdetalii_fact where id_vanzare_aviz = ] + Alltrim(Str(poDate.nid_vanzare)) + lnSucces = goExecutor.oExecute(lcSql, [crsnrfact]) + If lnSucces < 0 + amessagebox(goExecutor.oPrelucrareEroare(), 16, "Eroare") + Else + If Reccount('crsnrfact') > 0 + Select crsnrfact + AddProperty(poDate, [descriere2], Alltrim(nr_fact)) + Endif + Use In crsnrfact + Endif + Endif + Select crsFacturaListare + Else + If poDate.tip = 4 && factura din aviz + lcSql = [select max(v.id_comanda) as id_comanda from vanzari_coresp vc ] + ; + [join vanzari v on vc.id_vanzare_aviz = v.id_vanzare where vc.sters = 0 and v.sters = 0 and vc.id_vanzare_fact =] + Alltrim(Str(poDate.nid_vanzare)) + + lnSucces = goExecutor.oSelect2Value(lcSql, @pnid_comanda_aviz) + If lnSucces < 0 + amessagebox(goExecutor.oPrelucrareEroare(), 16, "Eroare") + poDate.id_comanda_aviz = 0 + Else + poDate.id_comanda_aviz = Nvl(pnid_comanda_aviz, 0) + Endif + Select crsFacturaListare + poDate.descriere = Alltrim(altele) + Endif + Endif + + + If Inlist(lnTip, 23, 25, 27, 30, 41, -6) && AVIZE SUBUNITATI 23,25,27,30; AVIZE SUBUNITATI RETUR 41, AVIZ RETUR VALORIC -6 + + poDateGestiuneDest = Createobject("oDateGestiune") + poDateGestiuneDest.id_gestiune = id_gestiune + + If Inlist(m.lnTip, 41, -6) && AVIZE SUBUNITATI RETUR (GESTIUNEA DESTINATIE ESTE DEPOZIT, TREBUIE GESTIUNEA SURSA DIN VANZARI_DETALII) + pnIdGestiuneRetur = 0 + lcSql = [select min(id_gestiune) from vanzari_detalii where id_vanzare = ] + + Alltrim(Str(poDate.nid_vanzare)) + lnSucces = goExecutor.oSelect2Value(lcSql, @pnIdGestiuneRetur) + If lnSucces < 0 + Messagebox(goExecutor.cEroare, 0 + 16, _Screen.Caption) + Else + poDateGestiuneDest.id_gestiune = m.pnIdGestiuneRetur + poDate.id_client = m.pnIdGestiuneRetur + Endif + Endif + + Select crsDetaliiListare + poDate.id_client = id_gestiune + poDate.nume_client = nume_gestiune + + If !Isnull(pnCod) + lcSql = [select r.id_responsabil, p.denumire as nresp from rul r left join nom_parteneri p on r.id_responsabil = p.id_part where r.cod = ] + Alltrim(Str(m.pnCod)) + [ and rownum = 1] + * lcSql = [select /*+ index(rul IDX_RUL_005) */ r.id_responsabil, p.denumire as nresp from rul r left join nom_parteneri p on r.id_responsabil = p.id_part where r.cod = ?pnCod and rownum = 1] + If Used('crsresp') + Use In crsresp + Endif + lcCursor = [crsresp] + lnSucces = goExecutor.oExecute(lcSql, lcCursor) + If lnSucces < 0 + amessagebox(goExecutor.oPrelucrareEroare(), 16, "Eroare") + Return + Else + Select (lcCursor) + poDate.id_responsabil = id_responsabil + poDate.responsabil = nresp + Use In (lcCursor) + Endif + + If Inlist(lnTip, 23, 25) + lcSql = [select id_partd from act where cod = ] + Alltrim(Str(m.pnCod)) + [ and scd = '357' ] + ; + [and id_gestin = ] + Alltrim(Str(poDateGestiuneDest.id_gestiune)) + [ and rownum = 1] + lnSucces = goExecutor.oExecute(lcSql, lcCursor) + If lnSucces < 0 + amessagebox(goExecutor.oPrelucrareEroare(), 16, "Eroare") + Return + Else + If Reccount(lcCursor) > 0 + Select (lcCursor) + poDate.id_part_rez = id_partd + Endif + Use In (lcCursor) + Endif + Endif + Endif + Else + poDate.id_client = id_part + poDate.nume_client = client + Endif + If !Isnull(pnCod) + If poDate.tip = -12 And !Isnull(poDate.id_ordl) + lcSql = [select a.datascad,b.nr_dosar,c1.denumire as asigurator,d.inspector from ] + ; + [(select MAX(id_lucrare) as id_lucrare,MAX(datascad) as datascad from act where cod = ] + Alltrim(Str(pnCod)) + [) a ] + ; + [left join dev_ordl b on a.id_lucrare = b.id_lucrare and b.sters = 0 ] + ; + [left join dev_nom_asiguratori c on b.id_asigurator = c.id_asigurator ] + ; + [left join nom_parteneri c1 on c.id_part = c1.id_part ] + ; + [left join dev_nom_inspectori d on b.id_inspector = d.id_inspector] + lcCursor = [crsdatascad] + If Used(lcCursor) + Use In (lcCursor) + Endif + lnSucces = goExecutor.oExecute(lcSql, lcCursor) + If lnSucces < 0 + amessagebox(goExecutor.oPrelucrareEroare(), 16, "Eroare") + Return + Else + Select (lcCursor) + Scatter Name ocomanda Memo + poDate.datascad = datascad + poDate.tip_doc_394 = 'F' && F = factura, M = factura simplificata + Use In (lcCursor) + Endif + Else + lcSql = [select MAX(a.datascad) as datascad, MAX(f.tip_doc) as tip_doc from act a left join nom_fdoc f on a.id_fdoc = f.id_fdoc where cod = ] + Alltrim(Str(m.pnCod)) + lcCursor = [crsdatascad] + Use In (SELECT(m.lcCursor)) + llSucces = goExecutor.oExecuta(lcSql, lcCursor) + If !m.llSucces + Return + Else + Select (m.lcCursor) + poDate.datascad = datascad + poDate.tip_doc_394 = NVL(tip_doc, 'F') && F = factura, M = factura simplificata + Use In (SELECT(m.lcCursor)) + ENDIF + Endif + Endif + + Use In (Select('crsfactura')) + + * Text TVA de afisat in partea de sus a facturii, daca este o singura explicatie de TVA pe toate liniile din crsDetaliiListare + ADDPROPERTY(poDate, 'cTextTVA', '') + SELECT distinct jtva_coloana_ex, jtva_coloana FROM crsDetaliiListare INTO CURSOR cTextTVATemp + IF RECCOUNT('cTextTVATemp') = 1 + SELECT cTextTVATemp + GO TOP + poDate.cTextTVA = IIF(!EMPTY(NVL(jtva_coloana_ex, '')), ALLTRIM(jtva_coloana_ex), ALLTRIM(NVL(jtva_coloana,''))) + ENDIF + USE IN (SELECT('cTextTVATemp')) + + + * Soldul pana la factura inclusiv + loSoldClient = GetSoldClient(m.lnIdPart, m.lnIdFact) + poDate.sold_lei = loSoldClient.sold_lei + poDate.sold_valuta = loSoldClient.sold_valuta + + Select crsDetaliiListare + Calculate Max(proc_tvav) To lnProcTvav + + creeaza_facturacrs([crsfactura]) + + prelucreaza_facturacrs([crsDetaliiListare], [crsfactura], lnProcTvav, lnDiscount, lnDiscountVal) + + creeaza_cursor_seturi(pnCod) + + listeaza_ofacturare() && ofacturare.prg + + Use In (Select('crsfactura')) + + Use In (Select('crsfacturaset')) + Case m.lcTipDocument = 'RECAPITULATIE' + Select crsFacturaListare + poDate.id_client = id_part + poDate.nume_client = client + + Do Case + Case poDate.tip = 51 && FACTURA ACN + *!* TRY + Do Case + Case poDate.nTipFactura = 0 && TRANZIT + do listeaza_recapitulatie_tranzit in proceduri_acnpro.prg + Case poDate.nTipFactura = 1 && CHEIAJ + do listeaza_recapitulatie_cheiaj in proceduri_acnpro.prg + Case poDate.nTipFactura = 6 && PENALITATI + do listeaza_recapitulatie_penalitati in proceduri_acnpro.prg + Otherwise && CHIRII / APA / ALTELE + do listeaza_recapitulatie_alte in proceduri_acnpro.prg + ENDCASE + *!* CATCH TO loEx + *!* AMESSAGEBOX('Listati recapitulatia din programul "ROAACNPRO"!' + CHR(13) + CHR(10) + loEx.Message,0+48,_SCREEN.Caption) + *!* ENDTRY + OTHERWISE + DO listeaza_recapitulatie WITH 'crsDetaliiListare', 'recapitulatie.frx' in ofacturare.prg + * am facu si o recapitulatie generica, pentru ca am pus recapitulatia in meniul de listare pentru ACN + ENDCASE + + Endcase + + Release pnCod, lnTip + USE IN (SELECT('crsFacturaListare')) + USE IN (SELECT('crsDetaliiListare')) + + Return poDate && intorc poDate pentru folosirea informatiilor despre factura (ex: poDate.email_factura in pluginul de trimitere email cu atasament factura) + +ENDPROC && listeaza_formular + +* Intoarce vanzari.id_fact pe baza vanzari.id_vanzare +* Folosesc la GetSoldClient +FUNCTION IdVanzare2IdFact + LPARAMETERS tnIdVanzare + PRIVATE pnIdVanzare + LOCAL lnIdFact + pnIdVanzare = m.tnIdVanzare + lnIdFact = 0 + + llSucces = goExecutor.oSelecteaza2Value("Select MIN(id_fact) from vanzari where id_vanzare = ?pnIdVanzare", @lnIdFact) + + RETURN m.lnIdFact +ENDFUNC +*********************************** +* Obtine sold client 4111 + 461 din balanta_parteneri sau din ireg_parteneri pana la numarul facturii +* Pentru afisarea in raportul factura +*********************************** +FUNCTION GetSoldClient + LPARAMETERS tnIdPart, tnIdFact + * tnIdPart: Id partener client + * tnIdFact : (optional) Id factura + + PRIVATE pnIdPart, pnIdFact + Local loSold As "empty" + Local lcSelect, lcSql, llSucces + + pnIdPart = tnIdPart + pnIdFact = tnIdFact + lcSelect = SELECT() + + loSold = CREATEOBJECT("empty") + ADDPROPERTY(loSold, 'sold_lei', 0) + ADDPROPERTY(loSold, 'sold_valuta', 0) + + lcSql = [{call pack_facturare.getSoldClient(?gnAn, ?gnLuna, ?pnIdPart, ?pnIdFact)}] + + If goExecutor.oExecuta(m.lcSql, 'cSoldClientTemp') + SELECT cSoldClientTemp + GO TOP + loSold.sold_lei = NVL(sold_lei, 0) + loSold.sold_valuta = NVL(sold_valuta, 0) + ENDIF + USE IN (SELECT('cSoldClientTemp')) + + SELECT (m.lcSelect) + RETURN loSold +ENDFUNC + +******************************** INCEPUT: verifica_setari ************************************* +Procedure verifica_setari + LPARAMETERS tlSilent + * tlSilent: .T. nu afiseaza mesajul, .F. (default) afiseaza mesajul + + Private pcMesaj + Store "" To pcMesaj + lcSql = [begin ] + gcS + [.pack_facturare.verificare_setari_program(?gnIdUtil,?@pcMesaj);] + ; + [end;] + lnSucces = goExecutor.oexecute(lcSql) + If lnSucces < 0 + amessagebox(goExecutor.oPrelucrareEroare(), 16, "Eroare") + Else + If !m.tlSilent AND !Isnull(m.pcMesaj) And !Empty(m.pcMesaj) + amessagebox(pcMesaj, 48, "Atentie") + Endif + ENDIF + RETURN m.pcMesaj +Endproc +******************************** SFARSIT: verifica_setari ************************************* +************************************ INCEPUT: vanzare_materii_prime **************************************** +Procedure vanzare_materii_prime + Local lnIdSet + gnTipGest = 2 + Do vanzare1.mpr +Endproc +************************************ SFARSIT: vanzare_materii_prime **************************************** +*************************************** INCEPUT: vanzare_produse ******************************************* +Procedure vanzare_produse + gnTipGest = 4 + Do vanzare2.mpr +Endproc +*************************************** SFARSIT: vanzare_produse ******************************************* +*********************************** INCEPUT: vanzare_marfa_pret_achi *************************************** +Procedure vanzare_marfa_pret_achi + gnTipGest = 5 + Do vanzare3.mpr +Endproc +*********************************** SFARSIT: vanzare_marfa_pret_achi *************************************** +*********************************** INCEPUT: vanzare_marfa_pret_vanz *************************************** +Procedure vanzare_marfa_pret_vanz + gnTipGest = 6 + Do vanzare4.mpr +Endproc +*********************************** SFARSIT: vanzare_marfa_pret_vanz *************************************** +*********************************** INCEPUT: vanzare_marfa_pret_achi_vanz *************************************** +Procedure vanzare_marfa_pret_achi_vanz + gnTipGest = 7 + Do vanzare5.mpr +Endproc +*********************************** SFARSIT: vanzare_marfa_pret_achi_vanz *************************************** +************************************* INCEPUT: selecteaza_gestiuni ***************************************** +Procedure selecteaza_gestiuni + If Used('nom_gestiuni') + Use In nom_gestiuni + Endif + Do Case + Case "-1" $ gcGestPermis + lcSql = [select * from ] + gcS + [.vnom_GESTIUNI where inactiv = 0 ] + ; + [and nr_pag = ?gnTipGest order by nume_gestiune] + lcCursor = [nom_gestiuni] + lnSucces = goExecutor.oexecute(lcSql, lcCursor) + If lnSucces < 0 + amessagebox(goExecutor.cEroare, 0 + 16, 'Eroare') + Quit + Endif + goExecutor.oReset() + Otherwise + lcSql = [select * from ] + gcS + [.vnom_GESTIUNI where inactiv = 0 and nr_pag = ?gnTipGest ] + ; + [ and id_gestiune in ] + ; + [(select g.id_gestiune from ] + gcS + [.vgest_coresp_grupe_gestiuni g join ] + ; + gcS + [.vgest_coresp_util_grupe u on g.id_grupe = u.id_grupe and u.id_util = ?gnIdUtil) order by nume_gestiune] + + lcCursor = [nom_gestiuni] + lnSucces = goExecutor.oexecute(lcSql, lcCursor) + If lnSucces < 0 + amessagebox(goExecutor.cEroare, 0 + 16, 'Eroare') + Quit + Endif + goExecutor.oReset() + Endcase +Endproc && selecteaza_gestiuni +************************************* SFARSIT: selecteaza_gestiuni ***************************************** +************************************* INCEPUT: creeaza_cursor_seturi ***************************************** +Procedure creeaza_cursor_seturi + Lparameters tnCod + *!* Dimension laStructura(1,18) + lcCursorTemp = [crsfacturasettemp] + lcCursor = [crsfacturaset] + If Used(lcCursorTemp) + Use In (lcCursorTemp) + Endif + If Used(lcCursor) + Use In (lcCursor) + Endif + *!* modificare v 2.0.84 + *!* lcSql = [select c.id_vanzare_set as id_set_fact,Min(b.id_vanzare_det) as id_temp,c.denumire,c.explicatie,c.cantitate,c.um,c.serie,c.pret,Nvl(c.discount_unitar,0) as discount_unitar,c.pret_cu_tva ] + ; + *!* [from ] + gcS + [.vanzari a ] + ; + *!* [left join ] + gcS + [.vanzari_detalii b on a.id_vanzare = b.id_vanzare and b.sters = 0 ] + ; + *!* [left join ] + gcS + [.vanzari_seturi c on b.id_vanzare_set = c.id_vanzare_set ] + ; + *!* [where a.cod = ] + Alltrim(Str(tnCod)) + [ and b.id_vanzare_set is not null ] + ; + *!* [group by c.id_vanzare_set,c.denumire,c.explicatie,c.cantitate,c.um,c.serie,c.pret,Nvl(c.discount_unitar,0),c.pret_cu_tva] + lcSql = [{call pack_facturare.citeste_vanzari_seturi(] + Alltrim(Str(tnCod)) + [)}] + *!* modificare v 2.0.84 ^ + lnSucces = goExecutor.oexecute(lcSql, lcCursorTemp) + Do Case + Case lnSucces < 0 + amessagebox(goExecutor.cEroare, 0 + 16, "Eroare") + Return + Case Reccount(lcCursorTemp) = 0 + Use In (lcCursorTemp) + Otherwise + *!* modificare v 2.0.56 + *!* Afields(laStructura,[crsfactura]) + *!* Create Cursor (lcCursor) From Array laStructura + copiaza_structura_cursor([crsfactura], lcCursor) + *!* modificare v 2.0.56 ^ + *!* *!* Insert Into (lcCursor) ; + *!* *!* Select a.id_set_fact,a.denumire,a.explicatie,a.cantitate,a.um,a.serie,; + *!* *!* Max(b.proc_tvav) As proc_tvav,; + *!* *!* Sum(b.valftva) As valftva,Sum(b.valtva) As valtva,; + *!* *!* Sum(b.valdiscountftva) As valdiscountftva,Sum(b.valdiscounttva) As valdiscounttva,; + *!* *!* Sum(b.valdiminuatftva) As valdiminuatftva,; + *!* *!* Sum(b.valdiminuattva) As valdiminuattva,Sum(b.valdiminuatctva) As valdiminuatctva,; + *!* *!* Sum(b.vvalftva) As vvalftva,Sum(b.vvaltva) As vvaltva,Sum(b.vvalctva) As vvalctva,; + *!* *!* Sum(b.vdiscountftva) As vdiscountftva,Sum(b.vdiscountctva) As vdiscountctva,; + *!* *!* Sum(b.vvaldiscountftva) As vvaldiscountftva,Sum(b.vvaldiscounttva) As vvaldiscounttva,; + *!* *!* Sum(b.vvaldiscountctva) As vvaldiscountctva,Sum(b.vvaldiminuatftva) As vvaldiminuatftva,; + *!* *!* Sum(b.vvaldiminuattva) As vvaldiminuattva,Sum(b.vvaldiminuatctva) As vvaldiminuatctva,; + *!* *!* Round(Sum(b.valftva)/a.cantitate,gnPc) As pretftva,Round(Sum(b.valtva)/a.cantitate,gnPc) As tva,; + *!* *!* Round(Sum(b.valdiscountftva)/a.cantitate,gnPc) As discountftva,; + *!* *!* Round(Sum(b.valdiscounttva)/a.cantitate,gnPc) As discounttva,; + *!* *!* Round(Sum(b.vvalftva)/a.cantitate,gnPc) As vpretftva,; + *!* *!* ROUND(Sum(b.vvaltva)/a.cantitate,gnPc) As vtva,; + *!* *!* Round(Sum(b.vvalctva) / a.cantitate,gnPc) As vpretctva,; + *!* *!* ROUND(Sum(b.vvaldiscountftva) / a.cantitate,gnPc) As vdiscountftva,; + *!* *!* Round(Sum(b.vvaldiscountctva) / a.cantitate,gnPc) As vdiscountctva,; + *!* *!* ROUND(Sum(b.vvaldiscountftva) / a.cantitate,gnPc) - Round(Sum(b.vvaldiscountctva) / a.cantitate,gnPc) As vdiscounttva ; + *!* *!* FROM (lcCursorTemp) a Left Join crsfactura b On a.id_set_fact = b.id_set_fact ; + *!* *!* Group By a.id_set_fact,a.denumire,a.explicatie,a.cantitate,a.um,a.serie + + *!* Insert Into (lcCursor) (id_set_fact,denumire,explicatie,cantitate,um,serie,; + *!* proc_tvav,pretftva,valftva,valtva,discountftva,valdiscountftva,; + *!* valdiscounttva,valdiminuatftva,valdiminuattva,vpretftva,; + *!* vvalftva,vvaltva,vdiscountftva,vvaldiscountftva,vvaldiscounttva,; + *!* vvaldiminuatftva,vvaldiminuattva) ; + *!* Select a.id_set_fact,a.denumire,a.explicatie,a.cantitate,a.um,a.serie,; + *!* b.proc_tvav,; + *!* Round(b.valftva/a.cantitate,gnPc) As pretftva,; + *!* b.valftva,b.valtva,; + *!* Round(b.valdiscountftva/a.cantitate,gnPc) As discountftva,; + *!* b.valdiscountftva,b.valdiscounttva,b.valdiminuatftva,b.valdiminuattva,; + *!* Round(b.vvalftva/a.cantitate,gnPc) As vpretftva,b.vvalftva,b.vvaltva,; + *!* b.vdiscountftva,b.vvaldiscountftva,b.vvaldiscounttva,b.vvaldiminuatftva,; + *!* b.vvaldiminuattva ; + *!* From (lcCursorTemp) a ; + *!* Left Join (Select Max(proc_tvav) As proc_tvav,; + *!* Sum(valftva) As valftva,Sum(valtva) As valtva,; + *!* Sum(valdiscountftva) As valdiscountftva,Sum(valdiscounttva) As valdiscounttva,; + *!* Sum(valdiminuatftva) As valdiminuatftva,; + *!* Sum(valdiminuattva) As valdiminuattva,; + *!* Sum(vvalftva) As vvalftva,Sum(vvaltva) As vvaltva,; + *!* Sum(vdiscountftva) As vdiscountftva,; + *!* Sum(vvaldiscountftva) As vvaldiscountftva,Sum(vvaldiscounttva) As vvaldiscounttva,; + *!* Sum(vvaldiminuatftva) As vvaldiminuatftva,; + *!* Sum(vvaldiminuattva) As vvaldiminuattva,id_set_fact From crsfactura Where id_set_fact <> 0 ; + *!* GROUP By id_set_fact) b On a.id_set_fact = b.id_set_fact + *!* modificare v 2.0.56 : am discount_unitar pe articolul din set + *!* Insert Into (lcCursor) (id_set_fact,id_temp,denumire,explicatie,cantitate,um,serie,; + *!* proc_tvav,id_jtva_coloana,gestionabil,pretftva,valftva,valtva,discountftva,valdiscountftva,; + *!* valdiscounttva,valdiminuatftva,valdiminuattva,vpretftva,; + *!* vvalftva,vvaltva,vdiscountftva,vvaldiscountftva,vvaldiscounttva,; + *!* vvaldiminuatftva,vvaldiminuattva) ; + *!* Select a.id_set_fact,a.id_temp,a.denumire,a.explicatie,a.cantitate,a.um,a.serie,; + *!* b.proc_tvav,b.id_jtva_coloana,b.gestionabil,IIF(poDate.in_valuta=0,a.pret,ROUND(a.pret*b.curs,gnPc)) As pretftva,; + *!* Round(Iif(poDate.in_valuta=0,a.Pret,Round(a.Pret*b.Curs,gnPc))*a.cantitate,gnPc) As valftva,; + *!* Round(Round(Iif(poDate.in_valuta=0,a.Pret,Round(a.Pret*b.Curs,gnPc))*a.cantitate,gnPc)*(b.proc_tvav-1),gnPc) As valtva,; + *!* Round(b.valdiscountftva/a.cantitate,gnPc) As discountftva,; + *!* b.valdiscountftva,b.valdiscounttva,; + *!* ROUND((Iif(poDate.in_valuta=0,a.Pret,Round(a.Pret*b.Curs,gnPc))-Round(b.valdiscountftva/a.cantitate,gnPc))*a.cantitate,gnPc) as valdiminuatftva,; + *!* ROUND(ROUND((Iif(poDate.in_valuta=0,a.Pret,Round(a.Pret*b.Curs,gnPc))-Round(b.valdiscountftva/a.cantitate,gnPc))*a.cantitate,gnPc)*(b.proc_tvav-1),gnPc) as valdiminuattva,; + *!* IIF(poDate.in_valuta=0,0,a.pret) as vpretftva,; + *!* IIF(poDate.in_valuta=0,0,ROUND(a.pret*a.cantitate,gnPc)) as vvalftva,; + *!* IIF(poDate.in_valuta=0,0,ROUND(ROUND(a.pret*a.cantitate,gnPc)*(b.proc_tvav-1),gnPc)) as vvaltva,; + *!* IIF(poDate.in_valuta=0,0,ROUND(b.vvaldiscountftva/a.cantitate,gnPc)) as vdiscountftva,; + *!* b.vvaldiscountftva,b.vvaldiscounttva,; + *!* ROUND(Iif(poDate.in_valuta=0,0,a.Pret-Round(b.vvaldiscountftva/a.cantitate,gnPc))*a.cantitate,gnPc) as vvaldiminuatftva,; + *!* ROUND(ROUND(Iif(poDate.in_valuta=0,0,a.Pret-Round(b.vvaldiscountftva/a.cantitate,gnPc))*a.cantitate,gnPc)*(b.proc_tvav-1),gnPc) as vvaldiminuattva ; + *!* From (lcCursorTemp) a ; + *!* Left Join (Select id_set_fact,IIF(poDate.in_valuta=0,1,poDate.curs) as curs,; + *!* Max(proc_tvav) As proc_tvav,Min(id_jtva_coloana) as id_jtva_coloana,Max(gestionabil) as gestionabil,; + *!* Sum(valdiscountftva) As valdiscountftva,Sum(valdiscounttva) As valdiscounttva,; + *!* Sum(vvaldiscountftva) As vvaldiscountftva,Sum(vvaldiscounttva) As vvaldiscounttva ; + *!* From crsfactura Where id_set_fact <> 0 ; + *!* GROUP By 1,2) b On a.id_set_fact = b.id_set_fact + *!* modificare v 2.0.67 : am adaugat id_ctr, numar_contract + *!* modificare v 2.0.84 + *!* Insert Into (lcCursor) (id_set_fact,id_temp,denumire,explicatie,cantitate,um,serie,; + *!* proc_tvav,id_jtva_coloana,gestionabil,pretftva,valftva,valtva,discountftva,valdiscountftva,; + *!* valdiscounttva,valdiminuatftva,valdiminuattva,vpretftva,; + *!* vvalftva,vvaltva,vdiscountftva,vvaldiscountftva,vvaldiscounttva,; + *!* vvaldiminuatftva,vvaldiminuattva,id_ctr,numar_contract) ; + *!* Select a.id_set_fact,a.id_temp,a.denumire,a.explicatie,a.cantitate,a.um,a.serie,; + *!* b.proc_tvav,b.id_jtva_coloana,b.gestionabil,; + *!* IIF(poDate.in_valuta=0,a.pret,ROUND(a.pret*b.curs,gnPc)) As pretftva,; + *!* Round(Iif(poDate.in_valuta=0,a.Pret,Round(a.Pret*b.Curs,gnPc))*a.cantitate,gnPc) As valftva,; + *!* Round(Round(Iif(poDate.in_valuta=0,a.Pret,Round(a.Pret*b.Curs,gnPc))*a.cantitate,gnPc)*(b.proc_tvav-1),gnPc) As valtva,; + *!* IIF(poDate.in_valuta=0,a.discount_unitar,ROUND(a.discount_unitar*b.curs,gnPc)) As discountftva,; + *!* Round(Iif(poDate.in_valuta=0,a.discount_unitar,Round(a.discount_unitar*b.Curs,gnPc))*a.cantitate,gnPc) As valdiscountftva,; + *!* Round(Round(Iif(poDate.in_valuta=0,a.discount_unitar,Round(a.discount_unitar*b.Curs,gnPc))*a.cantitate,gnPc)*(b.proc_tvav-1),gnPc) As valdiscounttva,; + *!* ROUND(Iif(poDate.in_valuta=0,a.Pret-a.discount_unitar,Round((a.Pret-a.discount_unitar)*b.Curs,gnPc))*a.cantitate,gnPc) as valdiminuatftva,; + *!* ROUND(ROUND(Iif(poDate.in_valuta=0,a.Pret-a.discount_unitar,Round((a.Pret-a.discount_unitar)*b.Curs,gnPc))*a.cantitate,gnPc)*(b.proc_tvav-1),gnPc) as valdiminuattva,; + *!* IIF(poDate.in_valuta=0,0,a.pret) as vpretftva,; + *!* IIF(poDate.in_valuta=0,0,ROUND(a.pret*a.cantitate,gnPc)) as vvalftva,; + *!* IIF(poDate.in_valuta=0,0,ROUND(ROUND(a.pret*a.cantitate,gnPc)*(b.proc_tvav-1),gnPc)) as vvaltva,; + *!* IIF(poDate.in_valuta=0,0,a.discount_unitar) as vdiscountftva,; + *!* IIF(poDate.in_valuta=0,0,ROUND(a.discount_unitar*a.cantitate,gnPc)) as vvaldiscountftva,; + *!* IIF(poDate.in_valuta=0,0,ROUND(ROUND(a.discount_unitar*a.cantitate,gnPc)*(b.proc_tvav-1),gnPc)) as vvaldiscounttva,; + *!* ROUND(Iif(poDate.in_valuta=0,0,a.Pret-a.discount_unitar)*a.cantitate,gnPc) as vvaldiminuatftva,; + *!* ROUND(ROUND(Iif(poDate.in_valuta=0,0,a.Pret-a.discount_unitar)*a.cantitate,gnPc)*(b.proc_tvav-1),gnPc) as vvaldiminuattva, ; + *!* b.id_ctr,b.numar_contract ; + *!* From (lcCursorTemp) a ; + *!* Left Join (Select id_set_fact,IIF(poDate.in_valuta=0,1,poDate.curs) as curs,id_ctr,numar_contract,; + *!* Max(proc_tvav) As proc_tvav,Min(id_jtva_coloana) as id_jtva_coloana,Max(gestionabil) as gestionabil ; + *!* From crsfactura Where id_set_fact <> 0 ; + *!* GROUP By 1,2,3,4) b On a.id_set_fact = b.id_set_fact + prelucreaza_facturacrs(lcCursorTemp, lcCursor, 0, 0, 0) + *!* modificare v 2.0.84 ^ + *!* modificare v 2.0.56 ^ + Endcase + If Used(lcCursorTemp) + Use In (lcCursorTemp) + Endif +Endproc && creeaza_cursor_seturi +************************************* SFARSIT: creeaza_cursor_seturi ***************************************** +********************************* INCEPUT: creeaza_cursor_seturi_proforme ************************************* +Procedure creeaza_cursor_seturi_proforme + Lparameters tnIdProforma + *!* Dimension laStructura(1,18) + lcCursorTemp = [crsfacturasettemp] + lcCursor = [crsfacturaset] + If Used(lcCursorTemp) + Use In (lcCursorTemp) + Endif + If Used(lcCursor) + Use In (lcCursor) + Endif + *!* modificare v 2.0.84 + *!* lcSql = [select Min(a.id_proforma_det) as id_temp,b.id_proforma_set as id_set_fact,b.denumire,b.explicatie,b.cantitate,b.um,b.serie,b.pret,Nvl(b.discount_unitar,0) as discount_unitar ] + ; + *!* [from ] + gcS + [.proforme_detalii a ] + ; + *!* [left join ] + gcS + [.proforme_seturi b on a.id_proforma_set = b.id_proforma_set ] + ; + *!* [where a.id_proforma = ] + Alltrim(Str(tnIdProforma)) + [ and a.id_proforma_set is not null ] + ; + *!* [and a.sters = 0 ] + ; + *!* [group by b.id_proforma_set,b.denumire,b.explicatie,b.cantitate,b.um,b.serie,b.pret,Nvl(b.discount_unitar,0)] + lcSql = [{call pack_facturare.citeste_proforme_seturi(] + Alltrim(Str(tnIdProforma)) + [)}] + *!* modificare v 2.0.84 ^ + lnSucces = goExecutor.oexecute(lcSql, lcCursorTemp) + Do Case + Case lnSucces < 0 + amessagebox(goExecutor.cEroare, 0 + 16, "Eroare") + Return + Case Reccount(lcCursorTemp) = 0 + Use In (lcCursorTemp) + Otherwise + *!* modificare v 2.0.56 + *!* Afields(laStructura,[crsfactura]) + *!* Create Cursor (lcCursor) From Array laStructura + copiaza_structura_cursor([crsfactura], lcCursor) + *!* modificare v 2.0.56 ^ + *!* Insert Into (lcCursor) (id_set_fact,denumire,explicatie,cantitate,um,serie,; + *!* proc_tvav,pretftva,valftva,valtva,discountftva,valdiscountftva,; + *!* valdiscounttva,valdiminuatftva,valdiminuattva,vpretftva,; + *!* vvalftva,vvaltva,vdiscountftva,vvaldiscountftva,vvaldiscounttva,; + *!* vvaldiminuatftva,vvaldiminuattva) ; + *!* Select a.id_set_fact,a.denumire,a.explicatie,a.cantitate,a.um,a.serie,; + *!* b.proc_tvav,; + *!* Round(b.valftva/a.cantitate,gnPc) As pretftva,; + *!* b.valftva,b.valtva,; + *!* Round(b.valdiscountftva/a.cantitate,gnPc) As discountftva,; + *!* b.valdiscountftva,b.valdiscounttva,b.valdiminuatftva,b.valdiminuattva,; + *!* Round(b.vvalftva/a.cantitate,gnPc) As vpretftva,b.vvalftva,b.vvaltva,; + *!* b.vdiscountftva,b.vvaldiscountftva,b.vvaldiscounttva,b.vvaldiminuatftva,; + *!* b.vvaldiminuattva ; + *!* FROM (lcCursorTemp) a ; + *!* Left Join (Select Max(proc_tvav) As proc_tvav,; + *!* Sum(valftva) As valftva,Sum(valtva) As valtva,; + *!* Sum(valdiscountftva) As valdiscountftva,Sum(valdiscounttva) As valdiscounttva,; + *!* Sum(valdiminuatftva) As valdiminuatftva,; + *!* Sum(valdiminuattva) As valdiminuattva,; + *!* Sum(vvalftva) As vvalftva,Sum(vvaltva) As vvaltva,; + *!* Sum(vdiscountftva) As vdiscountftva,; + *!* Sum(vvaldiscountftva) As vvaldiscountftva,Sum(vvaldiscounttva) As vvaldiscounttva,; + *!* Sum(vvaldiminuatftva) As vvaldiminuatftva,; + *!* Sum(vvaldiminuattva) As vvaldiminuattva,id_set_fact From crsfactura Where id_set_fact <> 0 ; + *!* GROUP By id_set_fact) b On a.id_set_fact = b.id_set_fact + *!* modificare v 2.0.56 : am discount_unitar pe articolul din set + *!* Insert Into (lcCursor) (id_temp,id_set_fact,denumire,explicatie,cantitate,um,serie,; + *!* proc_tvav,pretftva,valftva,valtva,discountftva,valdiscountftva,; + *!* valdiscounttva,valdiminuatftva,valdiminuattva,vpretftva,; + *!* vvalftva,vvaltva,vdiscountftva,vvaldiscountftva,vvaldiscounttva,; + *!* vvaldiminuatftva,vvaldiminuattva) ; + *!* Select a.id_temp,a.id_set_fact,a.denumire,a.explicatie,a.cantitate,a.um,a.serie,; + *!* b.proc_tvav,IIF(poDate.in_valuta=0,a.pret,ROUND(a.pret*b.curs,gnPc)) As pretftva,; + *!* Round(Iif(poDate.in_valuta=0,a.Pret,Round(a.Pret*b.Curs,gnPc))*a.cantitate,gnPc) As valftva,; + *!* Round(Round(Iif(poDate.in_valuta=0,a.Pret,Round(a.Pret*b.Curs,gnPc))*a.cantitate,gnPc)*(b.proc_tvav-1),gnPc) As valtva,; + *!* Round(b.valdiscountftva/a.cantitate,gnPc) As discountftva,; + *!* b.valdiscountftva,b.valdiscounttva,; + *!* ROUND((Iif(poDate.in_valuta=0,a.Pret,Round(a.Pret*b.Curs,gnPc))-Round(b.valdiscountftva/a.cantitate,gnPc))*a.cantitate,gnPc) as valdiminuatftva,; + *!* ROUND(ROUND((Iif(poDate.in_valuta=0,a.Pret,Round(a.Pret*b.Curs,gnPc))-Round(b.valdiscountftva/a.cantitate,gnPc))*a.cantitate,gnPc)*(b.proc_tvav-1),gnPc) as valdiminuattva,; + *!* IIF(poDate.in_valuta=0,0,a.pret) as vpretftva,; + *!* IIF(poDate.in_valuta=0,0,ROUND(a.pret*a.cantitate,gnPc)) as vvalftva,; + *!* IIF(poDate.in_valuta=0,0,ROUND(ROUND(a.pret*a.cantitate,gnPc)*(b.proc_tvav-1),gnPc)) as vvaltva,; + *!* IIF(poDate.in_valuta=0,0,ROUND(b.vvaldiscountftva/a.cantitate,gnPc)) as vdiscountftva,; + *!* b.vvaldiscountftva,b.vvaldiscounttva,; + *!* ROUND(Iif(poDate.in_valuta=0,0,a.Pret-Round(b.vvaldiscountftva/a.cantitate,gnPc))*a.cantitate,gnPc) as vvaldiminuatftva,; + *!* ROUND(ROUND(Iif(poDate.in_valuta=0,0,a.Pret-Round(b.vvaldiscountftva/a.cantitate,gnPc))*a.cantitate,gnPc)*(b.proc_tvav-1),gnPc) as vvaldiminuattva ; + *!* From (lcCursorTemp) a ; + *!* Left Join (Select id_set_fact,IIF(poDate.in_valuta=0,1,poDate.curs) as curs,; + *!* Max(proc_tvav) As proc_tvav,; + *!* Sum(valdiscountftva) As valdiscountftva,Sum(valdiscounttva) As valdiscounttva,; + *!* Sum(vvaldiscountftva) As vvaldiscountftva,Sum(vvaldiscounttva) As vvaldiscounttva ; + *!* From crsfactura Where id_set_fact <> 0 ; + *!* GROUP By 1,2) b On a.id_set_fact = b.id_set_fact + *!* modificare v 2.0.84 + *!* modificare v 2.0.84 + *!* Insert Into (lcCursor) (id_temp,id_set_fact,denumire,explicatie,cantitate,um,serie,; + *!* proc_tvav,pretftva,valftva,valtva,discountftva,valdiscountftva,; + *!* valdiscounttva,valdiminuatftva,valdiminuattva,vpretftva,; + *!* vvalftva,vvaltva,vdiscountftva,vvaldiscountftva,vvaldiscounttva,; + *!* vvaldiminuatftva,vvaldiminuattva) ; + *!* Select a.id_temp,a.id_set_fact,a.denumire,a.explicatie,a.cantitate,a.um,a.serie,; + *!* b.proc_tvav,; + *!* IIF(poDate.in_valuta=0,a.pret,ROUND(a.pret*b.curs,gnPc)) As pretftva,; + *!* Round(Iif(poDate.in_valuta=0,a.Pret,Round(a.Pret*b.Curs,gnPc))*a.cantitate,gnPc) As valftva,; + *!* Round(Round(Iif(poDate.in_valuta=0,a.Pret,Round(a.Pret*b.Curs,gnPc))*a.cantitate,gnPc)*(b.proc_tvav-1),gnPc) As valtva,; + *!* IIF(poDate.in_valuta=0,a.discount_unitar,ROUND(a.discount_unitar*b.curs,gnPc)) As discountftva,; + *!* Round(Iif(poDate.in_valuta=0,a.discount_unitar,Round(a.discount_unitar*b.Curs,gnPc))*a.cantitate,gnPc) As valdiscountftva,; + *!* Round(Round(Iif(poDate.in_valuta=0,a.discount_unitar,Round(a.discount_unitar*b.Curs,gnPc))*a.cantitate,gnPc)*(b.proc_tvav-1),gnPc) As valdiscounttva,; + *!* ROUND(Iif(poDate.in_valuta=0,a.Pret-a.discount_unitar,Round((a.Pret-a.discount_unitar)*b.Curs,gnPc))*a.cantitate,gnPc) as valdiminuatftva,; + *!* ROUND(ROUND(Iif(poDate.in_valuta=0,a.Pret-a.discount_unitar,Round((a.Pret-a.discount_unitar)*b.Curs,gnPc))*a.cantitate,gnPc)*(b.proc_tvav-1),gnPc) as valdiminuattva,; + *!* IIF(poDate.in_valuta=0,0,a.pret) as vpretftva,; + *!* IIF(poDate.in_valuta=0,0,ROUND(a.pret*a.cantitate,gnPc)) as vvalftva,; + *!* IIF(poDate.in_valuta=0,0,ROUND(ROUND(a.pret*a.cantitate,gnPc)*(b.proc_tvav-1),gnPc)) as vvaltva,; + *!* IIF(poDate.in_valuta=0,0,a.discount_unitar) as vdiscountftva,; + *!* IIF(poDate.in_valuta=0,0,ROUND(a.discount_unitar*a.cantitate,gnPc)) as vvaldiscountftva,; + *!* IIF(poDate.in_valuta=0,0,ROUND(ROUND(a.discount_unitar*a.cantitate,gnPc)*(b.proc_tvav-1),gnPc)) as vvaldiscounttva,; + *!* ROUND(Iif(poDate.in_valuta=0,0,a.Pret-a.discount_unitar)*a.cantitate,gnPc) as vvaldiminuatftva,; + *!* ROUND(ROUND(Iif(poDate.in_valuta=0,0,a.Pret-a.discount_unitar)*a.cantitate,gnPc)*(b.proc_tvav-1),gnPc) as vvaldiminuattva ; + *!* From (lcCursorTemp) a ; + *!* Left Join (Select id_set_fact,IIF(poDate.in_valuta=0,1,poDate.curs) as curs,; + *!* Max(proc_tvav) As proc_tvav ; + *!* From crsfactura Where id_set_fact <> 0 ; + *!* GROUP By 1,2) b On a.id_set_fact = b.id_set_fact + prelucreaza_facturacrs(lcCursorTemp, lcCursor, 0, 0, 0) + *!* modificare v 2.0.84 ^ + *!* modificare v 2.0.56 ^ + Endcase + If Used(lcCursorTemp) + Use In (lcCursorTemp) + Endif +Endproc && creeaza_cursor_seturi_proforme +********************************* SFARSIT: creeaza_cursor_seturi_proforme ************************************** +*!* ******************************** INCEPUT: actualizeaza_optiuni_program ************************************* +*!* Function actualizeaza_optiuni_program +*!* Lparameters tnTip +*!* && 0 - toate +*!* && 1 - fara id-uri +*!* Local llReturn +*!* Store .F. To llReturn +*!* If Empty(tnTip) +*!* lcFiltru = [] +*!* Else +*!* lcFiltru = [ and varname not like 'ID%'] +*!* Endif +*!* lcSql=[SELECT VARTYPE,VARNAME,VARVALUE FROM ] + gcS + [.OPTIUNI WHERE PROGRAM='] + Upper(Alltrim(gcNumeProgram)) + ['] + ; +*!* lcFiltru +*!* lcCursor=[crsoptiuni] +*!* lnSucces=goExecutor.oexecute(lcSql,lcCursor) +*!* If lnSucces<0 +*!* amessagebox(goExecutor.cEroare,0+48,"Eroare") +*!* Else +*!* Select crsoptiuni +*!* Scan +*!* lcvartype=Alltrim(Upper(Vartype)) +*!* lcvarname=Alltrim(Upper(varname)) +*!* Do Case +*!* Case lcvartype = "CHARACTER" +*!* luvarvalue = Alltrim(varvalue) +*!* gc&lcvarname. = luvarvalue +*!* Case lcvartype = "NUMERIC" +*!* luvarvalue = Val(varvalue) +*!* gn&lcvarname. = luvarvalue +*!* Endcase +*!* Endscan +*!* Use In crsoptiuni +*!* llReturn = .T. +*!* Endif +*!* Return llReturn +*!* Endfunc && actualizeaza_optiuni_program +*!* ******************************** SFARSIT: actualizeaza_optiuni_program ************************************* +******************************************* INCEPUT:caut_locatie_restaurant ******************************************* +Function caut_locatie_restaurant + Local loCauta + Store "" To loCauta + pcselect = [select id_rest_locatie,locatie FROM ] + gcS + [.rest_vcoresp_util_locatii] + pcfiltru = [1=2] + pcschema = [''] + pcorder = [locatie] + pccoloane = [locatie] + pcTitlu = [Alegeti locatia] + pcTitluColoane = [Locatie] + pcFiltruOriginal = [id_util_rest = ] + Alltrim(Str(gnIdUtil)) + lcNumeProc = [] + llToateIreg = .F. + loCauta = cauta_alfa(pcselect, pcfiltru, pcschema, pcorder, pccoloane, pcTitlu, pcTitluColoane, lcNumeProc, llToateIreg, pcFiltruOriginal) + Return loCauta +Endfunc +******************************************* SFARSIT: caut_locatie_restaurant ******************************************* +******************************************* INCEPUT:caut_comanda_client ******************************************* +Function caut_comanda_client + Lparameters tnIdPart + Local loCauta + Store "" To loCauta + If !Empty(tnIdPart) + lcFiltruClient = [ and id_part = ] + Alltrim(Str(tnIdPart)) + Else + lcFiltruClient = [] + Endif + pcselect = [select id_comanda, data_comanda, nr_comanda FROM vcomenzi ] + pcfiltru = [1=2] + pcschema = [''] + pcorder = [data_comanda,nr_comanda] + pccoloane = [nr_comanda,data_comanda] + pcTitlu = [Alegeti comanda] + pcTitluColoane = [Nr. comanda,Data comanda] + pcFiltruOriginal = [facturat = 0 and interna in (2,5) ] + lcFiltruClient + gcCondSucursala + lcNumeProc = [] + llToateIreg = .F. + loCauta = cauta_alfa(pcselect, pcfiltru, pcschema, pcorder, pccoloane, pcTitlu, pcTitluColoane, lcNumeProc, llToateIreg, pcFiltruOriginal) + + Return loCauta +Endfunc +******************************************* SFARSIT: caut_comanda_client ******************************************* +******************************************* INCEPUT:caut_comanda_clienti ******************************************* +* Afisez toate comenzile, indiferent de client +* Este posibil sa fac comanda pe un client si sa fac facturi pe persoana fizica si pe persoana juridica pentru acel client +* Arat comenzile ordonate dupa client si numar comanda +* Este folosita in ROAFACTURARE > frm_date_factura.do_cauta_comanda +Function caut_comanda_clienti + Lparameters tnIdPart + + PRIVATE pnIdPart + pnIdPart = IIF(!EMPTY(NVL(m.tnIdPart,0)), m.tnIdPart, 0) + + Local loCauta + Store "" To loCauta + If !Empty(tnIdPart) + lcFiltruClient = [ and id_part = ] + Alltrim(Str(tnIdPart)) + Else + lcFiltruClient = [] + Endif + pcselect = [select decode(id_part, ?pnIdpart, 1, 2) as ord, id_part, nume, id_comanda, data_comanda, nr_comanda FROM vcomenzi] + pcfiltru = [1=2] + pcschema = [''] + pcorder = [ord, nume,data_comanda,nr_comanda] + pccoloane = [nr_comanda,data_comanda,nume] + pcTitlu = [Alegeti comanda] + pcTitluColoane = [Nr. comanda,Data comanda,Client] + pcFiltruOriginal = [facturat = 0 and interna in (2,5) ] + gcCondSucursala + lcNumeProc = [] + llToateIreg = .F. + loCauta = cauta_alfa(pcselect, pcfiltru, pcschema, pcorder, pccoloane, pcTitlu, pcTitluColoane, lcNumeProc, llToateIreg, pcFiltruOriginal) + + Return loCauta +Endfunc +******************************************* SFARSIT: caut_comanda_clienti ******************************************* +******************************************* INCEPUT:caut_comanda_gestiune ******************************************* +Function caut_comanda_gestiune + Lparameters tnIdGestiune + Local loCauta + Store "" To loCauta + If !Empty(tnIdGestiune) + lcFiltruGestiune = [ and id_gestiune = ] + Alltrim(Str(tnIdGestiune)) + Else + lcFiltruGestiune = [] + Endif + pcselect = [select id_comanda, data_comanda, nr_comanda FROM ] + gcS + [.vcomenzi ] + pcfiltru = [1=2] + pcschema = [''] + pcorder = [data_comanda,nr_comanda] + pccoloane = [nr_comanda,data_comanda] + pcTitlu = [Alegeti comanda] + pcTitluColoane = [Nr. comanda,Data comanda] + pcFiltruOriginal = [facturat = 0 and interna = 3 ] + lcFiltruGestiune + gcCondSucursala + lcNumeProc = [] + llToateIreg = .F. + loCauta = cauta_alfa(pcselect, pcfiltru, pcschema, pcorder, pccoloane, pcTitlu, pcTitluColoane, lcNumeProc, llToateIreg, pcFiltruOriginal) + + Return loCauta +Endfunc +******************************************* SFARSIT: caut_comanda_gestiune ******************************************* +***************************************** INCEPUT:caut_contract_facturare ******************************************* +Function caut_contract_facturare + Lparameters tnIdPart, tcSirTipFacturare + Local loCauta, lcSelect, lcFiltru, lcSchema, lcColoane, lcTitlu, lcTitluColoane, lcFiltruOriginal, lcNumeProg, llToateInreg, lcOrder, lcFiltruSuplimentar, lcPrimaColoana, lnPornire, lnTipReturn, lcIdColumn + Store "" To loCauta + *!* modificare v 2.0.67 : am adaugat tcSirTipFacturare si lcFiltruSuplimentar + If !Empty(tcSirTipFacturare) + lcFiltruSuplimentar = [ and opt_facturare in (] + Alltrim(tcSirTipFacturare) + [)] + Else + lcFiltruSuplimentar = [] + Endif + If !Empty(tnIdPart) + lcFiltruSuplimentar = lcFiltruSuplimentar + [ and id_part = ] + Alltrim(Str(tnIdPart)) + Else + lcFiltruSuplimentar = [] + Endif + lcSelect = [select id_ctr, contract, numar, data, denumire, scadenta_incasare, opt_facturare, text_standard, afisare_scadenta FROM fact_vcontracte ] + lcFiltru = [1=2] + lcSchema = [''] + lcOrder = [data,numar] + lcColoane = [numar,data,denumire] + lcTitlu = [Alegeti contractul (mouse-click pe numar sau apasati SPACE)] + lcTitluColoane = [Numar,Data,Denumire] + lcFiltruOriginal = [2=2] + gcCondSucursala + lcFiltruSuplimentar + lcNumeProc = [contracte] + ';' + IIF(!EMPTY(m.tnIdPart), ALLTRIM(STR(m.tnIdPart)), '0') + ',-1' + llToateInreg = .F. + *!* modificare v 2.0.67 + *!* loCauta = cauta_alfa(pcselect,pcfiltru,pcschema,pcorder,pccoloane,pcTitlu,pcTitluColoane, lcNumeProc, llToateIreg, pcFiltruOriginal) + lcPrimaColoana = [numar] + lnPornire = 1 + lnTipReturn = 1 && 1 = Cursor XML + lcIdColumn = [id_ctr] + loCauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane, lcNumeProc, llToateInreg, lcFiltruOriginal, lcPrimaColoana, lnPornire, lnTipReturn, lcIdColumn) + *!* modificare v 2.0.67 ^ + Release lcSelect, lcFiltru, lcSchema, lcColoane, lcTitlu, lcTitluColoane, lcFiltruOriginal, lcNumeProg, llToateInreg, lcOrder, lcFiltruSuplimentar, lcPrimaColoana, lnPornire, lnTipReturn, lcIdColumn + Return loCauta +Endfunc +***************************************** SFARSIT: caut_contract_facturare ******************************************* +******************************************* INCEPUT: caut_avize ******************************************* +Function caut_avize + Lparameters tnIdPart + Store "" To loCauta + + lcFiltruPart = Iif(Empty(tnIdPart), [], [ and a.id_part = ] + Alltrim(Str(tnIdPart))) + lcFiltru = [1=2] + lcSchema = [serie_act C(50),numar_act N(20),data_act d,dataora t,id_vanzare N(20), id_comanda n(20)] + lcOrder = [dataora] + lcColoane = [serie_act,numar_act,data_act,dataora] + lcTitlu = [Alegeti avizele (mouse-click pe numar sau apasati SPACE)] + lcTitluColoane = [Serie act,Numar act,Data,Data inreg.] + llMultipleArticles = .T. + lcSelect = [select a.serie_act,a.numar_act,a.data_act,a.dataora,a.id_vanzare,] + ; + [(case when a.tip in (21,42) then a.id_comanda else 0 end) as id_comanda from ] + gcS + [.vanzari a ] + lcFiltruOriginal = [a.sters=0 and a.tip in (21,22,26,42) and a.facturat = 0] + Strtran(gcCondSucursala, [id_sucursala], [a.id_sucursala]) + ; + lcFiltruPart + ** 21 - catre clienti din comanda + ** 22 - catre clienti din lista + ** 23 - transfer catre subunitati din lista + ** 24 - aviz de retur + ** 25 - transfer catre subunitati din comanda + ** 26 - catre clienti din contract + ** 27 - transfer catre subunitati pe baza de lucrare + ** 28 - catre clienti debitori din comanda + ** 29 - catre clienti debitori din lista + ** 30 - transfer catre subunitati pe baza de NIR + ** 41 - retur transfer catre subunitati lista pret + ** 42 - catre clienti custodie pe baza de comanda + ** fara 47, deoarece acele avize le descarc prin alta optiune + lcNumeProc = [] + llToateIreg = .F. + lcPrimaColoana = [numar_act] + lnPornire = 1 + lnTipReturn = Iif(llMultipleArticles, 1, 0) + lcIdColumn = "id_vanzare" + loCauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane, lcNumeProc, llToateIreg, lcFiltruOriginal, lcPrimaColoana, lnPornire, lnTipReturn, lcIdColumn) + + Return loCauta +Endfunc && caut_avize +******************************************* SFARSIT: caut_avize ******************************************* +******************************************* INCEPUT: caut_facturi_client ******************************************* +Function caut_facturi_client + Lparameters tnIdPart + Local loCauta + Store "" To loCauta + If !Empty(tnIdPart) + lcFiltruClient = [ and id_part = ] + Alltrim(Str(tnIdPart)) + Else + lcFiltruClient = [] + Endif + pcselect = [select id_fact,dataact,serie_act,nract from ] + gcS + [.ireg_parteneri ] + pcfiltru = [1=2] + pcschema = [''] + pcorder = [dataact,serie_act,nract] + pccoloane = [dataact,serie_act,nract] + pcTitlu = [Alegeti factura] + pcTitluColoane = [Data factura,Serie act,Nr. factura] + pcFiltruOriginal = [an = ?gnAn and luna = ?gnLuna and cont = ?gcCont411 ] + ; + [and valdebit + precvaldeb <> precvalcred + valcredit and id_valuta <> 0 ] + lcFiltruClient + ; + + gcCondSucursala + lcNumeProc = [] + llToateIreg = .F. + loCauta = cauta_alfa(pcselect, pcfiltru, pcschema, pcorder, pccoloane, pcTitlu, pcTitluColoane, lcNumeProc, llToateIreg, pcFiltruOriginal) + + Return loCauta + ******************************************* SFARSIT: caut_facturi_client ******************************************* + *************************************** INCEPUT: caut_facturi_multiple_client *************************************** +Function caut_facturi_multiple_client + Lparameters tnIdPart, tnInValuta, tnIdValuta, tlFacturiMultiple + Local loCauta + Store "" To loCauta + lcFiltruPart = Iif(Empty(tnIdPart), [], [ and id_part = ] + Alltrim(Str(tnIdPart))) + lcFiltruValuta = Iif(Empty(tnInValuta), [ and in_valuta = 0], [ and in_valuta = 1 and id_valuta = ] + Alltrim(Str(tnIdValuta))) + lcFiltru = [1=2] + lcSchema = [serie_act C(50),numar_act N(20),data_act d,dataora t,id_vanzare N(20)] + lcOrder = [dataora] + lcColoane = [serie_act,numar_act,data_act,dataora] + If Empty(tlFacturiMultiple) + lcTitlu = [Alegeti factura] + Else + lcTitlu = [Alegeti facturile (mouse-click pe numar sau apasati SPACE)] + Endif + + lcTitluColoane = [Serie act,Numar act,Data,Data inreg.] + lcSelect = [select serie_act,numar_act,data_act,dataora,id_vanzare ] + ; + [from ] + gcS + [.fact_vfacturi ] + lcFiltruOriginal = [sters=0 and tip in (1,2,3,4,5,6,10,-1,-2,-3,-4,-11) ] + gcCondSucursala + ; + lcFiltruPart + lcFiltruValuta + lcNumeProc = [] + llToateIreg = .F. + lcPrimaColoana = [numar_act] + lnPornire = 1 + lnTipReturn = Iif(tlFacturiMultiple, 1, 0) + lcIdColumn = "id_vanzare" + loCauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane, lcNumeProc, llToateIreg, lcFiltruOriginal, lcPrimaColoana, lnPornire, lnTipReturn, lcIdColumn) + + Return loCauta + *************************************** SFARSIT: caut_facturi_multiple_client *************************************** + + *************************************** INCEPUT: caut_facturi_multiple_client_articol *************************************** +Function caut_facturi_multiple_client_articol + Lparameters tnIdPart, tnInValuta, tnIdValuta, tlFacturiMultiple, tnIdArticol + Local loCauta + loCauta = "" + PRIVATE pnIdArticol, pnIdPart, pnIdValuta + pnIdArticol = tnIdArticol + pnIdPart = tnIdPart + pnIdValuta = tnIdValuta + + lcFiltruPart = Iif(Empty(tnIdPart), [], [ and a.id_part = ?pnIdPart]) + lcFiltruValuta = Iif(Empty(tnInValuta), [ and a.in_valuta = 0], [ and a.in_valuta = 1 and b.id_valuta = ?pnIdValuta]) + lcFiltru = [1=2] + lcSchema = [serie_act C(50),numar_act N(20),data_act d,dataora t,id_vanzare N(20)] + lcOrder = [a.data_act desc, a.numar_act desc, a.dataora desc] + lcColoane = [serie_act,numar_act,data_act,dataora] + If Empty(tlFacturiMultiple) + lcTitlu = [Alegeti factura] + Else + lcTitlu = [Alegeti facturile (mouse-click pe numar sau apasati SPACE)] + Endif + + lcTitluColoane = [Serie act,Numar act,Data,Data inreg.] + lcSelect = [select a.serie_act,a.numar_act,a.data_act,a.dataora,a.id_vanzare ] + ; + [from vanzari a join vanzari_detalii b on a.id_vanzare = b.id_vanzare and b.id_articol = ?pnIdArticol ] + + lcFiltruOriginal = [a.sters=0 and a.tip in (1,2,3,4,5,6,10,-1,-2,-3,-4,-11) ] + gcCondSucursala + ; + lcFiltruPart + lcFiltruValuta + lcNumeProc = [] + llToateIreg = .F. + lcPrimaColoana = [numar_act] + lnPornire = 1 + lnTipReturn = Iif(tlFacturiMultiple, 1, 0) + lcIdColumn = "id_vanzare" + loCauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane, lcNumeProc, llToateIreg, lcFiltruOriginal, lcPrimaColoana, lnPornire, lnTipReturn, lcIdColumn) + + Return loCauta + *************************************** SFARSIT: caut_facturi_multiple_client *************************************** + + + ******************************************* INCEPUT: caut_gestiune_sursa ******************************************* +Function caut_gestiune_sursa + Lparameters tcListaTipGest + Store "" To loCauta + pcFiltruOriginal = [a.id_util = ?gnIdUtil and a.sters = 0 and b.sters = 0 and c.sters = 0] + If !Empty(tcListaTipGest) + pcFiltruOriginal = pcFiltruOriginal + [ and c.nr_pag in (] + Alltrim(tcListaTipGest) + [)] + Endif + pcselect = [select distinct c.nume_gestiune, b.id_gestiune, c.cont, c.acont ] + ; + [from ] + gcS + [.gest_coresp_util_grupe a ] + ; + [left join ] + gcS + [.gest_coresp_grupe_gestiuni b on a.id_grupe = b.id_grupe ] + ; + [left join ] + gcS + [.nom_gestiuni c on b.id_gestiune = c.id_gestiune ] + pcfiltru = [1=2] + pcschema = [] + pcorder = [nume_gestiune,cont,acont] + pccoloane = [nume_gestiune,cont,acont] + pcTitlu = [Alegeti gestiunea] + pcTitluColoane = [Gestiune,Cont,Acont] + lcNumeProc = [] + llToateIreg = .F. + loCauta = cauta_alfa(pcselect, pcfiltru, pcschema, pcorder, pccoloane, pcTitlu, pcTitluColoane, lcNumeProc, llToateIreg, pcFiltruOriginal) + + Return loCauta +Endfunc +******************************************* SFARSIT: caut_gestiune_sursa ******************************************* +**************************************** INCEPUT: caut_utilizator_facturare **************************************** +Function caut_utilizator_facturare + Store "" To loCauta + pcFiltruOriginal = [a.id_util in (select distinct id_util from ] + gcS + [.vanzari where sters = 0] + ; + gcCondSucursala + [)] + pcselect = [select a.id_util,a.utilizator from syn_vutilizatori a ] + pcfiltru = [1=2] + pcschema = [] + pcorder = [utilizator] + pccoloane = [utilizator] + pcTitlu = [Alegeti utilizatorul] + pcTitluColoane = [Utilizator] + lcNumeProc = [] + llToateIreg = .F. + loCauta = cauta_alfa(pcselect, pcfiltru, pcschema, pcorder, pccoloane, pcTitlu, pcTitluColoane, lcNumeProc, llToateIreg, pcFiltruOriginal) + + Return loCauta +Endfunc +**************************************** SFARSIT: caut_utilizator_facturare **************************************** +*!* ******************************************* INCEPUT: caut_gestiune_dest ******************************************* +*!* Function caut_gestiune_dest +*!* Lparameters tnIdGestiune +*!* Store "" To loCauta +*!* pcFiltruOriginal = [a.id_util=?gnIdUtil and a.sters=0 and b.sters=0 and c.sters=0 and c.nr_pag in (4,5,6)] +*!* If !Empty(tnIdGestiune) +*!* pcFiltruOriginal = pcFiltruOriginal + [ and b.id_gestiune!=] + Alltrim(Str(tnIdGestiune)) +*!* Endif + +*!* pcselect = [select distinct c.nume_gestiune,b.id_gestiune,d.id_tipgest,] + ; +*!* [(case when p.explicatie is null then s.explicatie else p.explicatie end) as explicatie,] + ; +*!* [d.cont,p.acont ] + ; +*!* [from ] + gcS + [.gest_coresp_util_grupe a ] + ; +*!* [left join ] + gcS + [.gest_coresp_grupe_gestiuni b on a.id_grupe=b.id_grupe ] + ; +*!* [left join ] + gcS + [.nom_gestiuni c on b.id_gestiune=c.id_gestiune ] + ; +*!* [left join ] + gcS + [.coresp_cont_tipgest d on c.nr_pag=d.id_tipgest ] + ; +*!* [left join ] + gcS + [.vplcont_analitic p on d.cont=p.cont and p.an=?gnAn ] + ; +*!* [left join ] + gcS + [.vplcont_sintetic s on d.cont=s.cont and s.an=?gnAn ] +*!* pcfiltru = [1=2] +*!* pcschema = [] +*!* pcorder = [nume_gestiune,cont,acont] +*!* pccoloane = [nume_gestiune,cont,acont,explicatie] +*!* pcTitlu = [Alegeti gestiunea si contul de transfer] +*!* pcTitluColoane = [Gestiune,Cont,Analitic,Explicatie] +*!* lcNumeProc = [] +*!* llToateIreg = .F. +*!* loCauta = cauta_alfa(pcselect,pcfiltru,pcschema,pcorder,pccoloane,pcTitlu,pcTitluColoane, lcNumeProc, llToateIreg, pcFiltruOriginal) + +*!* Return loCauta +*!* Endfunc +*!* ******************************************* SFARSIT: caut_gestiune_dest ******************************************* +*!* ******************************************* INCEPUT: caut_politici_curente_util ******************************************* +*!* Procedure caut_politici_curente_util +*!* Local loCauta,llReturn +*!* Store "" To loCauta +*!* Store .F. To llReturn +*!* lcSelect = ["select id_pol,nume,datai,datas from ] + gcS + [.fact_vpolitici_pret_curente"] +*!* lcFiltru = [1=2] +*!* lcSchema = [''] +*!* lcorder = [2] +*!* lccoloane = [nume,datai,datas] +*!* lcTitlu = [Alegeti politica de preturi] +*!* lcTitluColoane = [Nume,Data inceput,Data sfarsit] +*!* lcNumeProc = [] +*!* llToateIreg = .F. +*!* lcFiltruOriginal = [id_util = ] + Alltrim(Str(gnIdUtil)) +*!* loCauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcorder, lccoloane, lcTitlu, lcTitluColoane, lcNumeProc, llToateIreg, lcFiltruOriginal) +*!* Return loCauta +*!* Endproc && caut_politici_curente_util +*!* ******************************************* SFARSIT: caut_politici_curente_util ******************************************* +******************************************* INCEPUT: calculeaza_totaluri ******************************************* +Function calculeaza_totaluri + Lparameters toArticol + *!* v 2.0.15 calcul valoare tva din valoare cu tva daca preturi_cu_tva = 1 + Local lnProcTvav_19_119 + lnProcTvav_19_119 = (toArticol.proc_tvav - 1) / toArticol.proc_tvav + *!* v 2.0.15 ^ + If Type('toArticol.cu_tva') <> 'U' + AddProperty(toArticol, 'preturi_cu_tva', toArticol.cu_tva) + AddProperty(toArticol, 'discount_unitar', toArticol.discountftva) + AddProperty(toArticol, 'discount_unitar_ctva', toArticol.discountctva) + AddProperty(toArticol, 'pretftva_val', toArticol.vpretftva) + AddProperty(toArticol, 'pretctva_val', toArticol.vpretctva) + AddProperty(toArticol, 'discount_unitar_val', toArticol.vdiscountftva) + AddProperty(toArticol, 'discount_unitar_ctva_val', toArticol.vdiscountctva) + Endif + + If toArticol.preturi_cu_tva = 0 + toArticol.vvalftva = Round(toArticol.Pretftva_val * toArticol.cantitate, gnPVal) + toArticol.vvaltva = Round(Round(toArticol.Pretftva_val * toArticol.cantitate, gnPVal) * (toArticol.proc_tvav - 1), gnPVal) + toArticol.vvalctva = toArticol.vvalftva + toArticol.vvaltva + + toArticol.vvaldiminuatftva = Round((toArticol.Pretftva_val - toArticol.discount_unitar_val) * toArticol.cantitate, gnPVal) + toArticol.vvaldiminuattva = Round(Round((toArticol.Pretftva_val - toArticol.discount_unitar_val) * toArticol.cantitate, gnPVal) * (toArticol.proc_tvav - 1), gnPVal) + toArticol.vvaldiminuatctva = toArticol.vvaldiminuatftva + toArticol.vvaldiminuattva + + toArticol.vvaldiscountftva = Round(toArticol.discount_unitar_val * toArticol.cantitate, gnPVal) + toArticol.vvaldiscounttva = Round(Round(toArticol.discount_unitar_val * toArticol.cantitate, gnPVal) * (toArticol.proc_tvav - 1), gnPVal) + toArticol.vvaldiscountctva = toArticol.vvaldiscountftva + toArticol.vvaldiscounttva + + If poDate.in_valuta = 0 + toArticol.valftva = Round(toArticol.Pretftva * toArticol.cantitate, gnPc) + toArticol.valtva = Round(Round(toArticol.Pretftva * toArticol.cantitate, gnPc) * (toArticol.proc_tvav - 1), gnPc) + toArticol.valctva = toArticol.valftva + toArticol.valtva + + toArticol.valdiscountftva = Round(toArticol.discount_unitar * toArticol.cantitate, gnPc) + toArticol.valdiscounttva = Round(Round(toArticol.discount_unitar * toArticol.cantitate, gnPc) * (toArticol.proc_tvav - 1), gnPc) + toArticol.valdiscountctva = toArticol.valdiscountftva + toArticol.valdiscounttva + + toArticol.valdiminuatftva = Round((toArticol.Pretftva - toArticol.discount_unitar) * toArticol.cantitate, gnPc) + toArticol.valdiminuattva = Round(Round((toArticol.Pretftva - toArticol.discount_unitar) * toArticol.cantitate, gnPc) * (toArticol.proc_tvav - 1), gnPc) + toArticol.valdiminuatctva = toArticol.valdiminuatftva + toArticol.valdiminuattva + + Else + toArticol.valftva = Round(Round(toArticol.Pretftva_val * toArticol.Curs / toArticol.multiplicator, gnPPretV) * toArticol.cantitate, gnPc) + toArticol.valtva = Round(Round(Round(toArticol.Pretftva_val * toArticol.Curs / toArticol.multiplicator, gnPPretV) * toArticol.cantitate, gnPc) * (toArticol.proc_tvav - 1), gnPc) + toArticol.valctva = toArticol.valftva + toArticol.valtva + + toArticol.valdiscountftva = Round(Round(toArticol.discount_unitar_val * toArticol.Curs / toArticol.multiplicator, gnPPretV) * toArticol.cantitate, gnPc) + toArticol.valdiscounttva = Round(Round(Round(toArticol.discount_unitar_val * toArticol.Curs / toArticol.multiplicator, gnPPretV) * toArticol.cantitate, gnPc) * (toArticol.proc_tvav - 1), gnPc) + toArticol.valdiscountctva = toArticol.valdiscountftva + toArticol.valdiscounttva + + toArticol.valdiminuatftva = Round((Round(toArticol.Pretftva_val * toArticol.Curs / toArticol.multiplicator, gnPPretV) - Round(toArticol.discount_unitar_val * toArticol.Curs / toArticol.multiplicator, gnPPretV)) * toArticol.cantitate, gnPc) + toArticol.valdiminuattva = Round(Round((Round(toArticol.Pretftva_val * toArticol.Curs / toArticol.multiplicator, gnPPretV) - Round(toArticol.discount_unitar_val * toArticol.Curs / toArticol.multiplicator, gnPPretV)) * toArticol.cantitate, gnPc) * (toArticol.proc_tvav - 1), gnPc) + toArticol.valdiminuatctva = toArticol.valdiminuatftva + toArticol.valdiminuattva + Endif + + Else + *!* v 2.0.15 calcul valoare tva din valoare cu tva daca preturi_cu_tva = 1 + toArticol.vvalctva = Round(toArticol.Pretctva_val * toArticol.cantitate, gnPVal) + *!* toArticol.vvalftva = Round(toArticol.Pretftva_val * toArticol.cantitate, gnPVal) + *!* toArticol.vvaltva = toArticol.vvalctva - toArticol.vvalftva + toArticol.vvaltva = Round(toArticol.vvalctva * m.lnProcTvav_19_119, gnPVal) + toArticol.vvalftva = toArticol.vvalctva - toArticol.vvaltva + + toArticol.vvaldiscountctva = Round(toArticol.discount_unitar_ctva_val * toArticol.cantitate, gnPVal) + *!* toArticol.vvaldiscountftva = Round(toArticol.discount_unitar_val * toArticol.cantitate, gnPVal) + *!* toArticol.vvaldiscounttva = toArticol.vvaldiscountctva - toArticol.vvaldiscountftva + toArticol.vvaldiscounttva = Round(toArticol.vvaldiscountctva * m.lnProcTvav_19_119, gnPVal) + toArticol.vvaldiscountftva = toArticol.vvaldiscountctva - toArticol.vvaldiscounttva + + + toArticol.vvaldiminuatctva = Round((toArticol.Pretctva_val - toArticol.discount_unitar_ctva_val) * toArticol.cantitate, gnPVal) + *!* toArticol.vvaldiminuatftva = Round(Round((toArticol.Pretctva_val - toArticol.discount_unitar_ctva) / toArticol.proc_tvav, gnPVal) * toArticol.cantitate, gnPVal) + *!* toArticol.vvaldiminuattva = toArticol.vvaldiminuatctva - toArticol.vvaldiminuatftva + toArticol.vvaldiminuattva = Round(toArticol.vvaldiminuatctva * m.lnProcTvav_19_119, gnPVal) + toArticol.vvaldiminuatftva = toArticol.vvaldiminuatctva - toArticol.vvaldiminuattva + + If poDate.in_valuta = 0 + toArticol.valctva = Round(toArticol.Pretctva * toArticol.cantitate, gnPc) + *!* toArticol.valftva = Round(toArticol.Pretftva * toArticol.cantitate,gnPc) + *!* toArticol.valtva = toArticol.valctva - toArticol.valftva + toArticol.valtva = Round(toArticol.valctva * m.lnProcTvav_19_119, gnPc) + toArticol.valftva = toArticol.valctva - toArticol.valtva + + toArticol.valdiscountctva = Round(toArticol.discount_unitar_ctva * toArticol.cantitate, gnPc) + *!* toArticol.valdiscountftva = Round(toArticol.discount_unitar * toArticol.cantitate,gnPc) + *!* toArticol.valdiscounttva = toArticol.valdiscountctva - toArticol.valdiscountftva + toArticol.valdiscounttva = Round(toArticol.valdiscountctva * m.lnProcTvav_19_119, gnPc) + toArticol.valdiscountftva = toArticol.valdiscountctva - toArticol.valdiscounttva + + toArticol.valdiminuatctva = Round((toArticol.Pretctva - toArticol.discount_unitar_ctva) * toArticol.cantitate, gnPc) + *!* toArticol.valdiminuatftva = Round(Round((toArticol.Pretctva - toArticol.discount_unitar_ctva) / toArticol.proc_tvav,gnPc) * toArticol.cantitate, gnPc) + *!* toArticol.valdiminuattva = toArticol.valdiminuatctva - toArticol.valdiminuatftva + toArticol.valdiminuattva = Round(toArticol.valdiminuatctva * m.lnProcTvav_19_119, gnPc) + toArticol.valdiminuatftva = toArticol.valdiminuatctva - toArticol.valdiminuattva + Else + toArticol.valctva = Round(Round(toArticol.Pretctva_val * toArticol.Curs / toArticol.multiplicator, gnPPretV) * toArticol.cantitate, gnPc) + *!* toArticol.valftva = Round(Round(toArticol.Pretftva_val * toArticol.Curs,gnPc) * toArticol.cantitate,gnPc) + *!* toArticol.valtva = toArticol.valctva - toArticol.valftva + toArticol.valtva = Round(toArticol.valctva * m.lnProcTvav_19_119, gnPc) + toArticol.valftva = toArticol.valctva - toArticol.valtva + + toArticol.valdiscountctva = Round(Round(toArticol.discount_unitar_ctva_val * toArticol.Curs / toArticol.multiplicator, gnPPretV) * toArticol.cantitate, gnPc) + *!* toArticol.valdiscountftva = Round(Round(toArticol.discount_unitar_val * toArticol.Curs,gnPc) * toArticol.cantitate,gnPc) + *!* toArticol.valdiscounttva = toArticol.valdiscountctva - toArticol.valdiscountftva + toArticol.valdiscounttva = Round(toArticol.valdiscountctva * m.lnProcTvav_19_119, gnPc) + toArticol.valdiscountftva = toArticol.valdiscountctva - toArticol.valdiscounttva + + toArticol.valdiminuatctva = Round((Round(toArticol.Pretctva_val * toArticol.Curs / toArticol.multiplicator, gnPPretV) - Round(toArticol.discount_unitar_ctva_val * toArticol.Curs / toArticol.multiplicator, gnPPretV)) * toArticol.cantitate, gnPc) + *!* toArticol.valdiminuatftva = Round(Round((Round(toArticol.Pretctva_val*toArticol.Curs,gnPc) - ROUND(toArticol.discount_unitar_ctva_val*toArticol.Curs,gnPc)) / toArticol.proc_tvav,gnPc) * toArticol.cantitate, gnPc) + *!* toArticol.valdiminuattva = toArticol.valdiminuatctva - toArticol.valdiminuatftva + toArticol.valdiminuattva = Round(toArticol.valdiminuatctva * m.lnProcTvav_19_119, gnPc) + toArticol.valdiminuatftva = toArticol.valdiminuatctva - toArticol.valdiminuattva + Endif + *!* v 2.0.15 ^ + Endif + + If Type('toArticol.cu_tva') <> 'U' + toArticol.cu_tva = toArticol.preturi_cu_tva + Removeproperty(toArticol, 'preturi_cu_tva') + toArticol.discountftva = toArticol.discount_unitar + Removeproperty(toArticol, 'discount_unitar') + toArticol.discountctva = toArticol.discount_unitar_ctva + Removeproperty(toArticol, 'discount_unitar_ctva') + toArticol.vpretftva = toArticol.Pretftva_val + Removeproperty(toArticol, 'pretftva_val') + toArticol.vpretctva = toArticol.Pretctva_val + Removeproperty(toArticol, 'pretctva_val') + toArticol.vdiscountftva = toArticol.discount_unitar_val + Removeproperty(toArticol, 'discount_unitar_val') + toArticol.vdiscountctva = toArticol.discount_unitar_ctva_val + Removeproperty(toArticol, 'discount_unitar_ctva_val') + Endif + Release lnProcTvav_19_119 + Return toArticol +Endfunc +******************************************* SFARSIT: calculeaza_totaluri ******************************************* \ No newline at end of file diff --git a/COMUN/programe/oproceduri_flux.prg b/COMUN/programe/oproceduri_flux.prg new file mode 100644 index 0000000..ed7ddcf --- /dev/null +++ b/COMUN/programe/oproceduri_flux.prg @@ -0,0 +1,633 @@ +*!* 12.04.2011 +*!* marius.mtuu +*!* viz_flux +*!* salvez si refolosesc lista id act incasari/plati tip compensari de care trebuie sa se tina cont la flux + +*!* lcComentariu = FormulaFlux2Comentariu([substr(scd,1,3) in ('758','759', '760')],'D',1,"",0,"") +*!* MessageBox(lcComentariu) + +*!* 24.06.2011 +*!* marius.mutu +*!* viz_flux - se creeaza si coloanele defalcate pe luni pentru perioada precedenta +*!* dadea eroare cand se calcula defalcat pe luni + perioada precedenta + +PROCEDURE viz_flux + PARAMETERS tnLunaI, tnAnulI, tnLunaF, tnAnulF, tnModel, tlCompensari, tlPrecedent, tlDefalcat + && tnModel 1 = FORMULE FLUX MAI VECHI; 2 = FORMULE FLUX CONTAFIN CONPRESS + && tlCompensari daca se afiseaza compensarile din registrul jurnal pentru luarea in considerare in calcul + && tlDefalcat 1 = daca se creeaza cate o coloana pentru fiecare luna sau se cumuleaza lunile intr-o singura coloana + IF EMPTY(tnModel) + tnModel = 2 + ENDIF + LOCAL i, j, lcPrecedent, lcCurent + + PRIVATE pnLuna, pnAnul, pnLI, pnAI, pnLF, pnAF, pnSI, pnSF, pnModel, pnNuCalculeazaTotaluri, pcIdsAct + STORE 0 TO pnLuna, pnAnul, pnLI, pnAI, pnLF, pnAF, pnSI, pnSF + + LOCAL lcMesaje, lnDifSoldFPrecedent, lnDifSoldFCurent + lcMesaje = "" + lnDifSoldFPrecedent = 0 + lnDifSoldFCurent = 0 + + pnModel = tnModel + pnNuCalculeazaTotaluri = 0 + pcIdsAct = '' + llDefalcat = IIF(PCOUNT() = 8, tlDefalcat, .F.) + llPrecedent = tlPrecedent AND !m.llDefalcat && daca se defalca pe luni, nu mai am perioada precedenta, doar curenta + + IF !initializeaza_sucursala() && oinit_optiuni.prg + RETURN + ENDIF + + lcPrecedent = [] + lcCurent = PADL(INT(tnLunaI), 2, '0') + '/' + PADL(INT(tnAnulI), 4, '0') + ' - ' + PADL(INT(tnLunaF), 2, '0') + '/' + PADL(INT(tnAnulF), 4, '0') && pentru listare - precedent + + lnParcurgeri = 1 + IF m.llPrecedent + lnParcurgeri = 2 + lcPrecedent = PADL(INT(tnLunaI), 2, '0') + '/' + PADL(INT(tnAnulI) - 1, 4, '0') + ' - ' + PADL(INT(tnLunaF), 2, '0') + '/' + PADL(INT(tnAnulF) - 1, 4, '0') && pentru listare - precedent + ENDIF + + *!* 03.05.2011 + lcCursorFlux = [Select Rand, denumire, Cast(0 As N(14,2)) As precedent, Cast(0 As N(14,2)) As curent, ] + ; + [suma, formula, Total, tip, si, sf ] + + + FOR iLunaFlux = tnAnulI * 12 + tnLunaI TO tnAnulF * 12 + tnLunaF + lnLunaFlux = INT(MOD(m.iLunaFlux, 12)) + lnAnFlux = INT(FLOOR(iLunaFlux / 12)) + + IF m.lnLunaFlux = 0 + m.lnLunaFlux = 12 + m.lnAnFlux = m.lnAnFlux - 1 + ENDIF + + lcCursorFlux = m.lcCursorFlux + [, CAST(0 as N(14,2)) as l] + PADL(m.lnLunaFlux, 2, "0") + [_] + ALLTRIM(STR(m.lnAnFlux)) + *!* 24.06.2011 + IF m.llPrecedent + lnLunaFluxPrec = lnLunaFlux + lnAnFluxPrec = lnAnFlux - 1 + lcCursorFlux = m.lcCursorFlux + [, CAST(0 as N(14,2)) as l] + PADL(m.lnLunaFluxPrec, 2, "0") + [_] + ALLTRIM(STR(m.lnAnFluxPrec)) + ENDIF + *!* 24.06.2011 ^ + ENDFOR + lcCursorFlux = m.lcCursorFlux + [ From cIntermediar Into Cursor cFlux Readwrite] + *!* 03.05.2011 ^ + FOR j = 1 TO lnParcurgeri && 1 = precedent/curent 2 = curent/nimic + lnAnulI = tnAnulI + lnLunaI = tnLunaI + lnAnulF = tnAnulF + lnLunaF = tnLunaF + + IF j = 1 AND m.llPrecedent + lnAnulI = (lnAnulI - 1) + lnAnulF = (lnAnulF - 1) + ENDIF + + + pnLI = lnLunaI + pnAI = lnAnulI + pnLF = lnLunaF + pnAF = lnAnulF + pnSI = 0 + pnSF = 0 + + FOR i = lnAnulI * 12 + lnLunaI TO lnAnulF * 12 + lnLunaF + pnLuna = INT(MOD(i, 12)) + pnAnul = INT(FLOOR(i / 12)) + + IF pnLuna = 0 + pnLuna = 12 + pnAnul = pnAnul - 1 + ENDIF + *!* 03.05.2011 + lcColoanaLuna = "l" + PADL(m.pnLuna, 2, "0") + [_] + ALLTRIM(STR(m.pnAnul)) + *!* 03.05.2011 ^ + WAIT WINDOW 'Luna ' + PADL(ALLTRIM(STR(pnLuna)), 2, '0') + ' ' + ALLTRIM(STR(pnAnul)) NOWAIT + pcIdsAct = '' + *!* 12.04.2011 + lnSucces = goExecutor.oFunction2Value([pack_mg_flux.GetIdsActCompensari(] + ALLTRIM(STR(pnLuna)) + [, ] + ALLTRIM(STR(pnAnul)) + [)], @pcIdsAct) + IF lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare, 0 + 16, "Eroare") + RETURN + ELSE + pcIdsAct = NVL(pcIdsAct, '') + ENDIF + *!* 12.04.2011 ^ + + IF tlCompensari + lcSql = [{call PACK_MG_FLUX.GetCompensari(] + ALLTRIM(STR(pnLuna)) + [, ] + ALLTRIM(STR(pnAnul)) + [)}] + lnSucces = goExecutor.oExecute(lcSql, 'crsCompensariTemp') + IF lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare, 0 + 16, "Eroare") + RETURN + ELSE + IF RECCOUNT('crsCompensariTemp') > 0 + *!* 12.04.2011 + SELECT *, ALLTRIM(STR(id_act)) + ',' $ pcIdsAct + ',' AS ales FROM crsCompensariTemp INTO CURSOR crsCompensari READWRITE + *!* 12.04.2011 ^ + loFrmCompensari = CREATEOBJECT("frm_compensari") + loFrmCompensari.lb_titlu_alb_b121.CAPTION = 'Compensari ' + PADL(ALLTRIM(STR(pnLuna)), 2, '0') + ' ' + ALLTRIM(STR(pnAnul)) + loFrmCompensari.SHOW(1) + + pcIdsAct = '' + SELECT crsCompensari + SET FILTER TO + SCAN FOR ales + pcIdsAct = pcIdsAct + ',' + ALLTRIM(STR(id_act)) + ENDSCAN + IF !EMPTY(pcIdsAct) + pcIdsAct = SUBSTR(pcIdsAct, 2) + ENDIF + ENDIF + + USE IN (SELECT('crsCompensariTemp')) + USE IN (SELECT('crsCompensari')) + ENDIF + ENDIF && tlCompensari + + lcSql = [begin PACK_MG_FLUX.calc_flux(] + ALLTRIM(STR(pnLuna)) + [, ] + ALLTRIM(STR(pnAnul)) + [, ] + ALLTRIM(STR(pnNuCalculeazaTotaluri)) + [, ] + ALLTRIM(STR(pnModel)) + [, '] + ALLTRIM(pcIdsAct) + ['); end;] + lnSucces = goExecutor.oExecute(lcSql) + + IF lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare, 0 + 16, "Eroare") + RETURN + ENDIF + + + + * Set Textmerge On To Memvar lcMesaje Noshow + + lcSql = [select * from mg_flux_trezorerie where rand = 0 ] + lcCursor = 'cNerepartizate' + lnSucces = goExecutor.oExecute(lcSql, lcCursor) + IF lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare, 0 + 16, "Eroare") + ENDIF + + SELECT COUNT(*) AS CNT FROM cNerepartizate INTO CURSOR cNr + SELECT cNr + lnNr = CNT + + IF USED('cNr') + USE IN cNr + ENDIF + + SET TEXTMERGE ON TO MEMVAR lcMesaje ADDITIVE NOSHOW + + + IF lnNr > 0 + \*** Luna <>/<>, urmatoarele inregistrari nu au fost repartizate: <> + \ nract debit=credit suma + SELECT cNerepartizate + SCAN + \ <> <>=<> <> <> + SELECT cNerepartizate + ENDSCAN + \<> + ENDIF + USE IN cNerepartizate + + SET TEXTMERGE TO + ***-------------------- + + + lcSql = [select * FROM mg_flux order by rand] + lcCursor = 'cIntermediar' + lnSucces = goExecutor.oExecute(lcSql, lcCursor) + IF lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare, 0 + 16, "Eroare") + LOOP + ENDIF + + IF (i = lnAnulI * 12 + lnLunaI) AND (j = 1) && in prima luna creez cursorul cFLux + &lcCursorFlux + + + && completez sumele pe coloana precedent/curent cumulat + IF j = 1 AND m.llPrecedent + REPLACE ALL precedent WITH suma IN cFlux + ELSE + REPLACE ALL curent WITH suma IN cFlux + ENDIF + + && completez sumele defalcat pentru luna curenta + REPLACE ALL &lcColoanaLuna WITH suma IN cFlux + ELSE + && scanez si insumez + lnsuma = 0 + SELECT cFlux + SCAN + lcRand = RAND + SELECT cIntermediar + LOCATE FOR RAND = lcRand + IF FOUND() + lnsuma = suma + SELECT cFlux + IF j = 1 AND m.llPrecedent + REPLACE precedent WITH precedent + m.lnsuma + ELSE + REPLACE curent WITH curent + m.lnsuma + ENDIF + *!* 03.05.2011 + REPLACE &lcColoanaLuna WITH m.lnsuma + *!* 03.05.2011 ^ + ENDIF + SELECT cFlux + ENDSCAN + ENDIF && (i = lnAnulI*12 + lnLunaI) And (j = 1) && in prima luna creez cursorul cFLux + + USE IN (SELECT('cIntermediar')) + + *** solduri initiale, finale luna curenta + pnSI = 0 + pnSF = 0 + lcSql = [begin PACK_MG_FLUX.get_SI_balanta(?pnLuna, ?pnAnul, ?@pnSI); end;] + lnSucces = goExecutor.oExecute(lcSql) + + IF lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare, 0 + 16, "Eroare") + RETURN + ENDIF + + lcSql = [begin PACK_MG_FLUX.get_SF_balanta(?pnLuna, ?pnAnul, ?@pnSF); end;] + lnSucces = goExecutor.oExecute(lcSql) + + IF lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare, 0 + 16, "Eroare") + RETURN + ENDIF + + lnDifSoldF = 0 + + SELECT cFlux + REPLACE &lcColoanaLuna WITH pnSI FOR si = 1 + IF pnNuCalculeazaTotaluri = 0 && daca se calculeaza totalurile in baza de date compar soldul final calculat cu cel din balanta + LOCATE FOR sf = 1 + IF FOUND() + IF &lcColoanaLuna <> m.pnSF + lnDifSoldF = m.pnSF - (&lcColoanaLuna + m.pnSI) && soldul initial nu era inclus in randul calculat + ENDIF + ENDIF + ENDIF + REPLACE &lcColoanaLuna WITH m.pnSF FOR sf = 1 + + *!* Set Textmerge On To Memvar lcMesaje Additive Noshow + IF lnDifSoldF <> 0 + lcMesaje = lcMesaje + CHR(13) + CHR(10) + STRTRAN(SUBSTR(lcColoanaLuna, 2), "_", " ") + ' DIFERENTA INTRE SOLD FINAL TREZORERIE CALCULAT SI SOLD FINAL DIN BALANTA DE VERIFICARE: ' + ALLTRIM(TRANSFORM(lnDifSoldF, '999 999 999 999.99')) + ENDIF + *** solduri initiale, finale luna curenta ^ + ENDFOR && i = lnAnulI*12 + lnLunaI To lnAnulF*12 + lnLunaF + + *** solduri initiale, finale cumulat precedent/curent + lcSql = [begin PACK_MG_FLUX.get_SI_balanta(?pnLI, ?pnAI, ?@pnSI); end;] + lnSucces = goExecutor.oExecute(lcSql) + + IF lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare, 0 + 16, "Eroare") + RETURN + ENDIF + + lcSql = [begin PACK_MG_FLUX.get_SF_balanta(?pnLF, ?pnAF, ?@pnSF); end;] + lnSucces = goExecutor.oExecute(lcSql) + + IF lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare, 0 + 16, "Eroare") + RETURN + ENDIF + + lcDifSoldFPrecedent = 0 + lcDifSoldFCurent = 0 + + SELECT cFlux + IF j = 1 AND m.llPrecedent + REPLACE precedent WITH pnSI FOR si = 1 + IF pnNuCalculeazaTotaluri = 0 && daca se calculeaza totalurile in baza de date compar soldul final calculat cu cel din balanta + LOCATE FOR sf = 1 + IF FOUND() + IF precedent <> pnSF + lnDifSoldFPrecedent = pnSF - (precedent + pnSI) + ENDIF + ENDIF + ENDIF + REPLACE precedent WITH pnSF FOR sf = 1 + ELSE + REPLACE curent WITH pnSI FOR si = 1 + IF pnNuCalculeazaTotaluri = 0 && daca se calculeaza totalurile in baza de date compar soldul final calculat cu cel din balanta + LOCATE FOR sf = 1 + IF FOUND() + IF curent <> pnSF + lnDifSoldFCurent = pnSF - (curent + pnSI) && soldul initial nu era inclus in randul calculat + ENDIF + ENDIF + ENDIF + REPLACE curent WITH pnSF FOR sf = 1 + ENDIF + *!* Set Textmerge On To Memvar lcMesaje Additive Noshow + IF lnDifSoldFPrecedent <> 0 + lcMesaje = lcMesaje + CHR(13) + CHR(10) + 'DIFERENTA INTRE SOLD FINAL TREZORERIE CALCULAT SI SOLD FINAL DIN BALANTA DE VERIFICARE: ' + ALLTRIM(TRANSFORM(lnDifSoldFPrecedent, '999 999 999 999.99')) + ENDIF + IF lnDifSoldFCurent <> 0 + lcMesaje = lcMesaje + CHR(13) + CHR(10) + 'DIFERENTA INTRE SOLD FINAL TREZORERIE CALCULAT SI SOLD FINAL DIN BALANTA DE VERIFICARE: ' + ALLTRIM(TRANSFORM(lnDifSoldFCurent, '999 999 999 999.99')) + ENDIF + *** solduri initiale, finale cumulat precedent/curent ^ + ENDFOR && j + + lcFisier = gcTempPath + "mesaje.txt" + STRTOFILE(lcMesaje, lcFisier) + + IF !EMPTY(lcMesaje) + MODIFY FILE (lcFisier) + ENDIF + ***------------------------------------------------ + + SELECT cFlux + GO TOP + + SELECT cFlux + lovf = CREATEOBJECT('frm_flux', m.llPrecedent, lcPrecedent, lcCurent) + lovf.ADDPROPERTY("lDefalcat", tlDefalcat) + *!* 03.05.2011 + *** adaug coloane in grid pentru luni defalcat + IF m.llDefalcat + lnColumnOffset = lovf._grdrow1.COLUMNCOUNT + lovf._grdrow1.COLUMNCOUNT = m.lnColumnOffset + (tnAnulF * 12 + tnLunaF) - (tnAnulI * 12 + tnLunaI) + 1 + i = 0 + FOR iLunaFlux = tnAnulI * 12 + tnLunaI TO tnAnulF * 12 + tnLunaF + lnLunaFlux = INT(MOD(m.iLunaFlux, 12)) + lnAnFlux = INT(FLOOR(iLunaFlux / 12)) + i = i + 1 + IF m.lnLunaFlux = 0 + m.lnLunaFlux = 12 + m.lnAnFlux = m.lnAnFlux - 1 + ENDIF + lcColoanaLuna = "l" + PADL(m.lnLunaFlux, 2, "0") + [_] + ALLTRIM(STR(m.lnAnFlux)) + lnCurentColumnIndex = m.lnColumnOffset + i + WITH lovf._grdrow1 + .COLUMNS(m.lnCurentColumnIndex).NAME = lcColoanaLuna + .&lcColoanaLuna..CONTROLSOURCE = "cFlux." + m.lcColoanaLuna + .&lcColoanaLuna..FORMAT = "RK" + .&lcColoanaLuna..INPUTMASK = get_mask(14, gnPA) + .&lcColoanaLuna..Header1.CAPTION = STRTRAN(SUBSTR(m.lcColoanaLuna, 2), "_", "/") + .&lcColoanaLuna..Header1.ALIGNMENT = 2 + ENDWITH + ENDFOR && iLunaFlux = lnAnulI*12 + lnLunaI To lnAnulF*12 + lnLunaF + + lovf._grdrow1.cPrecedent.VISIBLE = .F. + lovf._grdrow1.cCurent.VISIBLE = .F. + *!* lovf._grdrow1.cCurent.Header1.Caption = PADL(INT(tnLunaI), 2, '0') + "/" + ALLTRIM(STR(INT(tnAnulI))) + " - " + PADL(INT(tnLunaF), 2, '0') + "/" + ALLTRIM(STR(INT(tnAnulF))) + ENDIF && m.llDefalcat + lovf.grid_column_bind() + *!* 03.05.2011 ^ + lovf.SHOW(1) + + IF USED('cFlux') + USE IN cFlux + ENDIF + + +ENDPROC && viz_flux +***------------------------------------------------------------------------------------- +PROCEDURE lanseaza_excel_flux + PARAMETERS tcalias, tlTip, toGridObject + + + LOCAL loExcelXML AS "ExcelXml" OF "ExcelXml.prg" + LOCAL x AS "XL_flux" OF "EXCELX" + LOCAL lcFile, lcexcel + *:Global OLEAPP + LOCAL llEsteExcel + llEsteExcel = isComobject("Excel.Application") + + IF !m.llEsteExcel + *CopyToExcelSimple("flux_trezorerie.xls", "", m.tcalias, "", "*", ".T.") + + loExcelXML = NEWOBJECT("ExcelXml", "ExcelXml.prg") + + WITH loExcelXML + .GridObject = toGridObject + .HasFilter = .F. + .LockHeader = .F. + .SheetName = "Flux Trezorerie" + .OpenAfterSaving = .T. + lcFile = PUTFILE("Flux trezorerie", "flux_trezorerie", "xls") + IF .SAVE(m.lcFile) + AMESSAGEBOX("Fisierul s-a salvat!", 64) + ELSE + AMESSAGEBOX("Fisierul nu s-a salvat!", 48) + ENDIF + ENDWITH + + RETURN + ENDIF + + + PRIVATE lcTabel + + *!* llEsteExcel = isComobject("Excel.Application") + *!* If !llEsteExcel + *!* Do mesaj With "Instalati Microsoft Excel","" + *!* Return + *!* Endif + + lcTabel = ALLTRIM(tcalias) + + *!* lcNumeDirExcel = Addbs(Strtran(CALEFIRMA,"\\","\"))+"Excel\" + *!* If !Directory(lcNumeDirExcel) + *!* Md (lcNumeDirExcel) + *!* ENDIF + *!* lcexcel = lcNumeDirExcel +"Flux de trezorerie_"+Sys(2)+".XLS" + + lcexcel = ADDBS(STRTRAN(gcTempPath, "\\", "\")) + "Flux de trezorerie_" + SYS(2) + ".XLS" + + x = NEWOBJECT("XL_flux", "EXCELX") && alternatively you can drop this class on a VFP form + x.SAVEAS = lcexcel && PART.XLS to be created in your TEMP folder + + SELECT (lcTabel) + + DIMENSION x.oWorkSheet[1] && need four pages + x.oWorkSheet[1] = "Flux" + ADDPROPERTY(x, "lTip", tlTip) + x.GO() && remember this calls .populate_pages(). + RELEASE x + + **************************8 + + OLEAPP = GETOBJECT("", "Excel.Application") + IF TYPE('OLEAPP')!= 'O' + OLEAPP = CREATEOBJECT("Excel.Application") + ENDIF + OLEAPP.WorkBooks.OPEN(lcexcel) + OLEAPP.VISIBLE = 1 + + RETURN +ENDPROC &&lanseaza_excel_flux +***------------------------------------------------------------------------------------ +PROCEDURE viz_formule_flux + LPARAMETERS tnModel + + LOCAL lcSql, lnSucces, lcCursor + PRIVATE pcDataOra, pnModel + lcCursor = 'cFormule' + + pcDataOra = Get_Ora(2) + && tnModel 1 = FORMULE FLUX MAI VECHI; 2 = FORMULE FLUX CONTAFIN CONPRESS + IF EMPTY(tnModel) + pnModel = 2 + ELSE + pnModel = tnModel + ENDIF + + + lcSql = [select * from mg_flux_formule where model = ?pnModel order by rand] + lnSucces = goExecutor.oExecute(lcSql, lcCursor) + IF lnSucces < 0 + AMESSAGEBOX(lcSql, 0 + 32, 'Eroare') + RETURN + ENDIF + + SELECT cFormule + REPLACE ALL comentariu WITH FormulaFlux2Comentariu(debit, 'D', tip, CONT, TOTAL, ftotal) + IIF(!EMPTY(credit), " " + FormulaFlux2Comentariu(credit, 'C', tip, CONT, 0, ""), "") + + SELECT DISTINCT RAND, denumire FROM cFormule INTO CURSOR cFluxParinte READWRITE + SELECT * FROM cFormule INTO CURSOR cFluxCopil READWRITE + + SELECT cFluxCopil + INDEX ON RAND TAG RAND + + SELECT cFluxParinte + SET RELATION TO RAND INTO cFluxCopil ADDITIVE + + poff = CREATEOBJECT("frm_formule") + poff.SHOW(1) + + + USE IN (SELECT('cFluxCopil')) + USE IN (SELECT('cFluxParinte')) + USE IN (SELECT('cFormule')) + + +ENDPROC && viz_formule_flux + +***--------------------------------------------------------------------------------------------- +PROCEDURE viz_conturi_flux + lcSql = [select cont from mg_flux_conturi order by cont] + lnSucces = goExecutor.oExecute(lcSql, "cConturiFlux") + IF lnSucces < 0 + AMESSAGEBOX(lcSql, 0 + 32, 'Eroare') + RETURN + ENDIF + + loFrmConturi = CREATEOBJECT("frm_conturi_flux") + loFrmConturi.SHOW(1) + USE IN (SELECT('cConturiFlux')) +ENDPROC && viz_conturi_flux + +***--------------------------------------------------------------------------------------------- +PROCEDURE FormulaFlux2Comentariu + LPARAMETERS tcFormula, tcDebit_credit, tnTip, tcContTip2, tnTotal, tcFTotal + + && cFormuleFlux.debit,'D',cFormuleFlux.tip,cFormuleFlux.cont,cFormuleFlux.total,cFormuleFlux.ftotal + + LOCAL lcFormula, lcDebit_credit, lcCautInc, lcListaConturi, lcListaContAfis, lnTip, lcContTip2, llTotal, lcFTotal + + IF !EMPTY(NVL(tcDebit_credit, '')) + lcDebit_credit = ALLTRIM(UPPER(NVL(tcDebit_credit, ''))) + ELSE + lcDebit_credit = '' + ENDIF + IF !EMPTY(NVL(tcFormula, '')) + lcFormula = ALLTRIM(NVL(tcFormula, '')) + ELSE + lcFormula = '' + ENDIF + IF !EMPTY(NVL(tnTip, 0)) + lnTip = tnTip + ELSE + lnTip = 0 + ENDIF + IF !EMPTY(NVL(tcContTip2, '')) + lcContTip2 = ALLTRIM(NVL(tcContTip2, '')) + ELSE + lcContTip2 = '' + ENDIF + STORE '' TO lcListaConturi, lcListaContAfis + llTotal = NVL(tnTotal, 0) = 1 + + IF !EMPTY(NVL(tcFTotal, '')) + lcFTotal = ALLTRIM(NVL(tcFTotal, '')) + ENDIF + + IF EMPTY(lcFormula) AND EMPTY(lcFTotal) + RETURN '' + ENDIF + + IF !llTotal + DO CASE + CASE lcDebit_credit = 'D' + lcCautInc = [substr(scd,1,3) in (] && [inlist(left(scd,3)] + CASE lcDebit_credit = 'C' + lcCautInc = [substr(scc,1,3) in (] && [inlist(left(scc,3)] + ENDCASE + + lnInc = AT(lcCautInc, lcFormula) + IF lnInc > 0 + lcCautSf = [')] + lnSF = AT(lcCautSf, lcFormula) + ENDIF + + lnLen = LEN(lcFormula) - LEN(lcCautInc) && 19 + lcListaConturi = SUBSTR(lcFormula, LEN(lcCautInc) + 1, lnLen - 1) + lcListaConturi = STRTRAN(lcListaConturi, ['], []) + + lnConturi = GETWORDCOUNT(lcListaConturi, [,]) + IF lnConturi = 1 + lcCont = GETWORDNUM(lcListaConturi, 1, [,]) + lcListaContAfis = lcListaContAfis + lcCont + ELSE + FOR i = 1 TO lnConturi + lcCont = GETWORDNUM(lcListaConturi, i, [,]) + DO CASE + CASE i = 1 + lcListaContAfis = lcListaContAfis + lcCont + [ ] + CASE i = 2 + lcListaContAfis = lcListaContAfis + [ (] + lcCont + [, ] + OTHERWISE + lcListaContAfis = lcListaContAfis + lcCont + [, ] + ENDCASE + ENDFOR + lcListaContAfis = SUBSTR(lcListaContAfis, 1, LEN(lcListaContAfis) - 2) + lcListaContAfis = lcListaContAfis + [)] + ENDIF + + DO CASE + CASE lnTip = 1 + DO CASE + CASE lcDebit_credit = 'D' + lcTraducere = [Platile din perioada selectata de tipul ] + lcListaContAfis + [ = 5xxx.] + CASE lcDebit_credit = 'C' + lcTraducere = [Incasarile din perioada selectata de tipul 5xxx = ] + lcListaContAfis + [.] + ENDCASE + CASE lnTip = 2 + DO CASE + CASE lcDebit_credit = 'D' + lcTraducere = [Platile din perioada selectata de tipul ] + lcContTip2 + [ = 5xxx, ] + lcTraducere = lcTraducere + [pentru care s-au gasit inregistrari de tipul ] + lcListaContAfis + [ = ] + lcContTip2 + [ in Registrul Jurnal Total.] + + CASE lcDebit_credit = 'C' + lcTraducere = [Incasarile din perioada selectata de tipul 5xxx = ] + lcContTip2 + [, ] + lcTraducere = lcTraducere + [pentru care s-au gasit inregistrari de tipul ] + lcContTip2 + [ = ] + lcListaContAfis + [ in Registrul Jurnal Total.] + ENDCASE + OTHERWISE + lcTraducere = '' + ENDCASE + ENDIF + + IF llTotal + lcTraducere = [Suma randurilor ] + STRTRAN(lcFTotal, 'R', '') + *lcTraducere = STRTRAN(lcTraducere, '0', ' ') + ENDIF + + RETURN lcTraducere + +ENDPROC && FormulaFlux2Comentariu diff --git a/COMUN/programe/oproceduri_listari.prg b/COMUN/programe/oproceduri_listari.prg new file mode 100644 index 0000000..cf01d1c --- /dev/null +++ b/COMUN/programe/oproceduri_listari.prg @@ -0,0 +1,2792 @@ +*!* 27.08.2009 +*!* marius.mutu +*!* listare_transfer : taxa_reconditionare - rap_nirtransfer_achi2 (landscape + coloane durata ramasa, taxa reconditionare) +*!* taxa reconditionare apare doar daca se transfera de la un responsabil la magazie + +*!* 01.07.2010 +*!* marius.mutu +*!* listare_nir - id_jtva_coloana achizitie taxare inversa, nu stiu de ce era 1 + +*!* 13.08.2014 +*!* marius.mutu +*!* list_total_NIR - s-a eliminat join cu act dupa cont - puteau aparea duplicate, in act existau mai multe inregistrari cu acelasi cont + +*!* 05.02.2015 +*!* marius.mutu +*!* LISTARE_BON_TOT - se listeaza bonurile cu foxypreviewer + +*!* 13.06.2017 +*!* marius.mutu +*!* list_raport_gestiuni - export xls + +*!* 09.07.2018 +*!* marius.mutu +*!* listare_protocol - id_set 243 + +*!* 02.07.2020 +*!* marius.mutu +*!* LISTARE_TRANSFER +*!* 229 transfer rezervare - se listeaza si clientii/lucrarile corespondente + +*!* LISTARE_BON_TOT +*!* tratare id_Set = 274 iesire din ob inv in fol si inregistrare cheltuiala + +*!* 20.02.2024 +*!* LISTARE_BON_TOT +*!* adaugare sal_stat.formatia + +Procedure listare_protocol + Lparameters tnNract, tnTip + + *!* tnTip: 1 (default) = protocol (pret cu tva); 2 = sponsorizare (pret fara tva) + Private pnNrAct,pnCod + Local lcCursor,lcCursor2, lnTip + lcCursor=[crsdateact] + lcCursor2 = [crsprotocol] + + If Type('tnTip') <> 'N' + lnTip = 1 + Else + lnTip = tnTip + Endif + pnNrAct = tnNract + *!* v 2.0.18 roagest (denumire partener, id_set 232, 233, 235) + lcSql = [Select distinct a.cod, a.dataact, p.id_part as id_client, p.denumire, b.nume_gestiune as gestiune from act a ] + ; + [ left join nom_gestiuni b on a.id_gestout = b.id_gestiune ] + ; + [ left join nom_parteneri p on a.id_partc = p.id_part ] + ; + [where a.an = ?gnAn and a.luna = ?gnLuna and a.nract = ?pnNrAct and a.scc = '401' and a.sters = 0 and a.id_set in (230,232,233,235,261,270,243) ] + ; + Strtran(gcCondSucursala,[id_sucursala],[a.id_sucursala]) + lnSucces = goExecutor.oexecute(lcSql,lcCursor) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,"Eroare") + Return + Endif + + If Reccount(lcCursor) > 0 + Select (lcCursor) + Scatter Name poClient + *!* v 2.0.18 roagest (iau partenerul din jurnal) + *!* AddProperty(poClient,[id_client],[0]) + *!* AddProperty(poClient,[denumire],[]) + pnCod = cod + poDate=Createobject("oDateFactura",0,0) + poDate.nract = pnNrAct + poDate.dataact = Iif(Type('dataact')='T',Ttod(dataact),dataact) + poDate.dataora_exp = get_ora() && modificare ROAGEST v 2.0.150 + + *!* loCauta = caut_partener() + *!* If gnButon <> 2 + *!* poClient.id_client = loCauta.id_part + *!* poClient.denumire = loCauta.denumire + *!* Else + poDate.tip = 23 && artificiu ca sa nu mai caute doar in delegatii pentru partenerul respectiv + *!* EndIf + *!* v 2.0.18 roagest ^ + Use In (lcCursor) + + Private ofrmdatesupl + ofrmdatesupl = Createobject("frm_alte_date") + ofrmdatesupl.Show(1) + Release ofrmdatesupl + + *!* modificare ROAGEST v 2.0.150 + If gnButon = 1 + *!* modificare ROAGEST v 2.0.150 ^ + lcSql = [select denumire as nume_responsabil,cod_fiscal as CNPresp,reg_comert as BIresp from nom_parteneri ] + ; + [where sters = 0 and inactiv = 0 and id_part in ] + ; + [(select id_partener from utilizatori_rol_intern where sters = 0 and id_util = ?gnIdUtil)] + lnSucces = goExecutor.oexecute(lcSql,lcCursor2) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,"Eroare") + Return + Endif + Select (lcCursor2) + poDate.nume_responsabil = nume_responsabil + poDate.BIresp = BIresp + poDate.CNPresp = CNPresp + Use In (lcCursor2) + + lcSql = [select a.cante as cantitate,] + ; + Iif(lnTip = 1, [a.pretv+a.tvav], [a.pretv]) + [ as pretctva, ] + ; + Iif(lnTip = 1, [Round(a.cante*(a.pretv+a.tvav),?gnPc)], [Round(a.cante*a.pretv,?gnPc)]) + [ as valctva,] + ; + [a.serie,a.lot,b.codmat,b.denumire,b.um ] + ; + [from rul a left join nom_articole b on a.id_articol = b.id_articol ] + ; + [where a.sters = 0 and a.cod = ] + ALLTRIM(STR(m.pnCod)) + lnSucces = goExecutor.oexecute(lcSql,lcCursor2) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,"Eroare") + Return + Endif + goExport.export2frx(lcCursor2,[protocol], , , , , , .T.) + If Used(lcCursor2) + Use In (lcCursor2) + Endif + *!* modificare ROAGEST v 2.0.150 + Endif + *!* modificare ROAGEST v 2.0.150 ^ + Else + amessagebox("Nu exista avizul cu acest numar in luna curenta!",48,"Atentie") + Endif + Release lcCursor,lcCursor2,pnNrAct,pnCod +Endproc && listare_protocol +***************************************************************************************************************** +Procedure listare_nir + Parameters tnNir, tnTip, tlProductie, tlBon_livrare,tnTipRulaj + DO listare_nir_TOT WITH tnNir,tnNir, tnTip, tlProductie, tlBon_livrare,tnTipRulaj +ENDPROC &&listare_nir +***************************************************************************************************************** + +Procedure listare_nir_TOT + Parameters tnNir1,tnNir2, tnTip, tlProductie, tlBon_livrare,tnTipRulaj + && nu merge pt baza de date din preluare (cauza id_fact); + && solutie : in loc de id_fact , cod - nu am pus cod pt ca nu e terminata modificarea din contabilitate + && tlProductie - pt. programul RoaProductie am raportul pv_prod.frx + && tnTipRulaj: NIR = 0 INTRARE REALA, 1 TRANSFER (DE LA O GESTIUNE VALORICA) + &&13.01.2015 - a fost adaugat pnNir1, pnNir2 + LOCAL lnTipRulaj + STORE 0 TO lnTipRulaj + Private lnCod,pnNir1,pnNir2,lnSuma1,lnSuma2,loact,pnTip,pnBazaDiscount,pnTvaDiscount,lcListaID,lcExceptii,lcContFact + Store "" To loact,lcListaID,lcExceptii,lcContFact + Store 0 To lnSuma1,lnSuma2,pnNir1,pnNir2,pnBazaDiscount,pnTvaDiscount + pnNir1=tnNir1 + pnNir2=tnNir2 + Private poact + Store Null To poact + + lcContFact = ['401','404','408'] + + If Empty(tnTip) + pnTip = 0 + Else + pnTip = tnTip + Endif + + *!* v 2.0.28 + *!* LA NIR BILETE RATC - CALCULUL, NOTELE CONTABILE, LISTAREA SE FAC: + *!* VALOAREA CU TVA + *!* VALOAREA TVA = VALOAREA CU TVA * (PROC_TVA - 1)/ PROC_TVA + *!* VALOAREA FARA TVA = VALOAREA CU TVA - VALOAREA TVA + Private plNIRBONPretCuTVA + plNIRBONPretCuTVA = Iif(Inlist(tnTip,17,27),.T.,.F.) && NIR BILETE RATC + pnTip = Iif(pnTip = 17, 6,Iif(pnTip = 27,7,pnTip)) + *!* v 2.0.28 ^ + + lnTipRulaj=IIF(EMPTY(tnTipRulaj),0,1) + + If Used('crsrul') + Use In crsrul + Endif + + *!* lcSql=[select cod,nnir,dataact,codmat,denumire,um,pret,tva,cant,pretv,tvav,cante,cgest,proc_tva,proc_tvav,id_fact,id_gestiune,procent, reteta ]+; + *!* [ from vrul ]+; + *!* [ where luna=?gnLuna and an=?gnAn and nnir=]+ALLTRIM(STR(pnNir))+[ and cant<>0 and cante=0 ] + ; + *!* [ and id_gestiune in (select distinct id_gestiune from ] + gcS + [.vnom_gestiuni where nr_pag = ?pnTip)] + + && 09.11.2006 - factura Metro - toate tipurile de gestiune, exc. M pret vanzare + If tlBon_livrare + lcSql=[select cod,nnir,dataact,codmat,denumire,serie,lot,um,cont,acont,pret,tva,cant,pretv,tvav,cante,cgest, nume_gestiune, gestionar, comisie_receptie1, comisie_receptie2, comisie_receptie3,] + ; + [proc_tva,proc_tvav,id_fact,id_gestiune,procent, reteta, pretd, curs, nume_val, id_rul ] + ; + [ from vrul ]+; + [ where an=] + ALLTRIM(STR(gnAn)) + [ and luna=] + ALLTRIM(STR(gnLuna)) + [ and nnir between ] + ALLTRIM(STR(pnNir1)) + [ and ] + ALLTRIM(STR(pnNir2)) + [ and cant=0 and cante<>0 and id_tip_rulaj = 0 ] + gcCondSucursala + Else + lcSql=[select cod,nnir,dataact,codmat,denumire,serie,lot,um,cont,acont,pret,tva,cant,pretv,tvav,cante,cgest, nume_gestiune, gestionar, comisie_receptie1, comisie_receptie2, comisie_receptie3,] + ; + [proc_tva,proc_tvav,id_fact,id_gestiune,procent, reteta,pretd, curs, nume_val, id_rul ] + ; + [from vrul ]+; + [ where an=] + ALLTRIM(STR(gnAn)) + [ and luna=] + ALLTRIM(STR(gnLuna)) + [ and nnir between ] + ALLTRIM(STR(pnNir1)) + [ and ] + ALLTRIM(STR(pnNir2)) + [ and cant<>0 and cante=0 and id_tip_rulaj =]+ALLTRIM(STR(lnTipRulaj)) + gcCondSucursala + Endif + lcCursor=[crsrul] + lnSucces = goExecutor.oexecute(lcSql,lcCursor) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,"Eroare") + Endif + + If lnSucces > 0 + If Reccount('crsrul')=0 + amessagebox("Nu a fost inregistrat nici un NIR in luna curenta cu numarul intre "+Alltrim(Str(pnNir1))+" si "+ALLTRIM(STR(pnNir2))+" !",0+48,"Atentie") + lnSucces = -1 + Else + lcSql=[select cont_c from exceptii_ireg where cont in ('401','404','408') and invers = 1 and debit = 0 ] + lcCursor=[crsExceptii] + lnSucces = goExecutor.oexecute(lcSql,lcCursor) + If lnSucces < 0 && dc eroare nu ies, iau exceptie default + amessagebox(goExecutor.cEroare,0+16,"Eroare") + lcExceptii = ['767'] + Endif + If Used('crsExceptii') + Select crsExceptii + Scan + lcExceptii = lcExceptii + [,'] + Alltrim(cont_c) + ['] + Endscan + lcExceptii = Substr(lcExceptii ,2) + Use In crsExceptii + Endif + + If Empty(lcExceptii) + lcExceptii = ['767'] + Endif + +*** la emiterea de factura din ROAAUTO se completeaza ID_FACT-ul facturii de vanzare pe toate rulajele care au lucrarea din factura ??? +*** asa ca id_fact din rul nu mai corespunde cu cel din act +*** folosesc cod in schimb +*!* Select Distinct id_fact From crsrul Into Cursor tfacturi + Select Distinct cod as id_fact From crsrul Into Cursor tfacturi + Select tfacturi + Scan + lcListaID = lcListaID + [,] + Alltrim(Str(id_fact)) + Endscan + lcListaID = Substr(lcListaID,2) + + If tlProductie + If tlBon_livrare + lcSql=[SELECT nract, serie_act, dataact, dataireg, fdoc, nnir, nrord, sectie, ]+; + [ partd as nume, 0 as factura, 0 as discount, 0 as tvaDiscount ]+; + [from vact ]+; + [ where an=] + ALLTRIM(STR(gnAn)) + [ and luna=] + ALLTRIM(STR(gnLuna)) + [ and nnir between ] + ALLTRIM(STR(pnNir1)) + [ and ] + ALLTRIM(STR(pnNir2)) + [ and substr(scd,1,3) = '428' and substr(scc,1,3) = '758'] + Else + lcSql=[SELECT nract, serie_act, dataact, dataireg, fdoc, nnir, nrord, sectie, max(case when scc in (]+lcContFact+[) then partc else partd end) as nume,] +; + [sum(case when SUBSTR(scd,1,2) = '40' and scc in (]+lcExceptii+[) then suma else 0.0000 end) as discount,]+; + [sum(case when SUBSTR(scd,1,2) = '40' and scc in (]+lcExceptii+[) then ROUND(suma*(proc_tva-1),?gnPc) else 0.0000 end) as tvaDiscount,]+; + [sum(case when SUBSTR(scc,1,2) = '40' then suma else 0.0000 end) as factura ]+; + [from vact ] +; + [ where an=] + ALLTRIM(STR(gnAn)) + [ and luna=] + ALLTRIM(STR(gnLuna)) + [ and nnir between ] + ALLTRIM(STR(pnNir1)) + [ and ] + ALLTRIM(STR(pnNir2)) + ; + [ group by serie_act, nract, dataact, dataireg, fdoc, nnir, nrord, sectie] + Endif + Else + + && v 2.0.17 - nu prelua corect numele furnizorului la listarea nirului - facea max intre partc si partd, in loc de partd am pus null + *!* lcSql=[SELECT nract, serie_act, dataact, dataireg, fdoc, nnir, max(case when scc in (]+lcContFact+[) then partc else partd end) as nume,] + + && v 2.0.17 ^ + *!* modificare v 2.1.17 : am adaugat 170,171,172,173,174,175 + *!* modificare v 2.2.4 : am scos 170,171,172,173,174,175 + lcSql=[SELECT nract, serie_act, dataact, dataireg, fdoc, nnir, max(case when scc in (]+lcContFact+[) then partc else null end) as nume,] +; + [sum(case when SUBSTR(scd,1,2) = '40' and scc in (]+lcExceptii+[) then suma else 0.0000 end) as discount,]+; + [sum(case when SUBSTR(scd,1,2) = '40' and scc in (]+lcExceptii+[) then ROUND(suma*(proc_tva-1),?gnPc) else 0.0000 end) as tvaDiscount,]+; + [sum(case when SUBSTR(scc,1,2) = '40' then suma else 0.0000 end) as factura, ]+; + [MAX(case when id_jtva_coloana in (137,138,139,140,141,142,143,144,145,146,162,163) then 1 else 0 end) as id_jtva_coloana ]+; + [from vact ] +; + [ where an=] + ALLTRIM(STR(gnAn)) + [ and luna=] + ALLTRIM(STR(gnLuna)) + [ and nnir between ] + ALLTRIM(STR(pnNir1)) + [ and ] + ALLTRIM(STR(pnNir2)) + [ and scc in (]+lcContFact+[,]+lcExceptii+[) ]+ ; + [ and cod in (] + lcListaID + [)] + ; + [ group by serie_act, nract, dataact,dataireg, fdoc, nnir] + Endif + lcCursor=[crsdiscount] + lnSucces = goExecutor.oexecute(lcSql,lcCursor) + + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,"Eroare") + Endif + Endif + Endif + + If lnSucces > 0 + pcDataOra = get_ora(2) + + If Used('crslistare') + Use In crslistare + Endif + + *!* 19.06.2006 + *!* marius.mutu + *!* nir import - exista > 1 factura pe acelasi nnir si se dubleaza reperele + Select * From crsdiscount Into Cursor crsDiscountTemp1 Order By nnir,factura Desc + Select * From crsDiscountTemp1 Where 1 = 2 Into Cursor crsDiscountTemp Readwrite + + Select crsDiscountTemp1 + lnNnir = 0 + Scan + Scatter Name loDisc + If lnNnir <> loDisc.nnir + lnNnir = loDisc.nnir + Insert Into crsDiscountTemp From Name loDisc + Endif + Endscan + Use In crsDiscountTemp1 + + If tlProductie + Select Alltrim(Str(a.nnir))+a.cgest As cnir_gest,a.*, ; + b.fdoc,b.nract,b.serie_act,b.dataireg,b.nume,b.nrord,b.factura - b.discount As total_factura, b.discount, b.tvaDiscount; + FROM crsrul a With (Buffering=.T.); + LEFT Join crsDiscountTemp b On a.nnir = b.nnir ; + INTO Cursor crslistare Order By 1, id_rul + Else + Select Alltrim(Str(a.nnir))+a.cgest As cnir_gest,a.*, ; + b.fdoc,b.nract,b.serie_act,b.dataireg,b.nume,b.factura - b.discount As total_factura, b.discount, b.tvaDiscount, b.id_jtva_coloana; + FROM crsrul a With (Buffering=.T.) ; + LEFT Join crsDiscountTemp b On a.nnir = b.nnir ; + INTO Cursor crslistare Order By 1, id_rul + Endif + + Use In crsDiscountTemp + + *!* 30.08.2007 + *!* marius.mutu + *!* variabile pentru curs, numevaluta + *!* rap_nir_materiale.frx : sume in valuta + Select crslistare + Locate For Curs <> 0 Or pretd<>0 + If Found() + pnCursNir = Curs + pcNumeValuta = Alltrim(nume_val) + Else + pnCursNir = 0 + pcNumeValuta = "" + Endif + + + + If tlProductie + If tlBon_livrare + lcRaport = 'bon_livrare' + Else + lcRaport = 'pv_prod' + Endif +*!* modificare ROAPRODUCTIE v 2.0.2 +*!* Report Form &lcRaport To Printer Prompt Preview + goExport.export2frx([crslistare],lcRaport, , , , , , .T.) +*!* modificare ROAPRODUCTIE v 2.0.2 ^ + *REPORT FORM pv_prod.frx TO PRINTER PROMPT PREVIEW + Else +*!* modificare v 2.1.17 +*!* *!* 01.07.2010 +*!* *!* lnIdJtvaTI = 1 &&TAXARE INVERSA +*!* lnIdJtvaTI = GetIdJtvaStandard('ACHIZITIE_TI') && TAXARE INVERSA + lnIdJtvaTI = 1 +*!* *!* 01.07.2010 ^ +*!* modificare v 2.1.17 ^ + Private pcEtichetaTI &&TAXARE INVERSA + pcEtichetaTI = '' + Select crslistare + *!* BROWSE + Locate For id_jtva_coloana=lnIdJtvaTI + If Found() + pcEtichetaTI='TAXARE INVERSA' + Endif + + If gnNir_standard = 1 && este NIR standard + *!* Report Form rap_nir_standard.frx To Printer Prompt Preview + goExport.export2frx([crslistare],[rap_nir_standard], , , , , , .T.) + Else + If Inlist(pnTip, 6, 7) && NIR MF PRET VZ, NIR RATC + *!* Report Form rap_nir_marfuri.frx To Printer Prompt Preview + goExport.export2frx([crslistare],[rap_nir_marfuri], , , , , , .T.) + Else + Private pcSemnaturi + Store '' To pcSemnaturi + param_listari('nir_rap_materiale',,@pcSemnaturi,.T.) + + Select crslistare + *!* Report Form rap_nir_materiale.frx To Printer Prompt Preview + goExport.export2frx([crslistare],[rap_nir_materiale], , , , , , .T.) + Endif + Endif + Endif + Endif + + If Used('tfacturi') + Use In tfacturi + Endif + If Used('crsrul') + Use In crsrul + Endif + If Used('crslistare') + Use In crslistare + Endif + If Used('crsdiscount') + Use In crsdiscount + Endif + +Endproc && listare_nir_TOT +*-------------------------------------------------------------------- +*!* Procedure listare_nir_MODEL1 && NU FACE BINE IN SITUATIA : MAI MULTE NIRURI PE ACELASI NR. FACTURA(ID_FACT#) +*!* Parameters tnNir,tnTip + +*!* Private lnCod,pnNir,lnSuma1,lnSuma2,loact,pnTip,pnBazaDiscount,pnTvaDiscount,lcListaID +*!* Store "" To loact,lcListaID +*!* Store 0 To lnSuma1,lnSuma2,pnNir,pnBazaDiscount,pnTvaDiscount +*!* pnNir=tnNir + +*!* If Empty(tnTip) +*!* pnTip = 0 +*!* Else +*!* pnTip = tnTip +*!* Endif + +*!* If Used('crsrul') +*!* Use In crsrul +*!* Endif + +*!* lcSql=[select cod,nnir,dataact,codmat,denumire,um,pret,tva,cant,pretv,tvav,cante,cgest,proc_tva,proc_tvav,id_fact,id_gestiune,procent from ] + gcS + [.vrul where luna=?gnLuna and an=?gnAn and nnir=]+Alltrim(Str(pnNir))+[ and cant<>0 and cante=0 ] + ; +*!* [and id_gestiune in (select distinct id_gestiune from ] + gcS + [.vnom_gestiuni where nr_pag = ?pnTip)] +*!* lcCursor=[crsrul] +*!* lnSucces = goExecutor.oExecute(lcSql,lcCursor) +*!* If lnSucces < 0 +*!* aMESSAGEBOX(goExecutor.cEroare,0+16,"Eroare") +*!* Endif + +*!* If lnSucces > 0 +*!* If Reccount('crsrul')=0 +*!* aMESSAGEBOX("Nu a fost inregistrat nici un NIR in luna curenta cu numarul "+Alltrim(Str(pnNir))+" !",0+48,"Atentie") +*!* lnSucces = -1 +*!* Else +*!* Select Distinct id_fact From crsrul Into Cursor tfacturi +*!* Select tfacturi +*!* Scan +*!* lcListaID = lcListaID + [,] + Alltrim(Str(id_fact)) +*!* Endscan +*!* lcListaID = Substr(lcListaID,2) + +*!* If Used('crsireg') +*!* Use In crsireg +*!* Endif + +*!* lcSql=[select fdoc,nract,dataireg,cont,nume,id_fact,sum(credit) as total_factura from ] + gcS + [.vireg_parteneri where SUBSTR(cont,1,2) = '40' and id_fact in (] + lcListaID + [) ] + ; +*!* [group by fdoc,nract,dataireg,cont,nume,id_fact] +*!* lcCursor=[crsireg] +*!* lnSucces = goExecutor.oExecute(lcSql,lcCursor) +*!* If lnSucces < 0 +*!* aMESSAGEBOX(goExecutor.cEroare,0+16,"Eroare") +*!* Endif +*!* Endif +*!* Endif + +*!* If lnSucces > 0 And gnNir_standard = 0 +*!* lcSql=[select sum(suma) as discount,sum(ROUND(suma*(proc_tva-1),?gnPc)) as tvaDiscount,id_fact from ] + gcS + [.vact where luna=?gnLuna and an=?gnAn and SUBSTR(scd,1,2) = '40' and SUBSTR(scc,1,3) = '767' and id_fact in (] + lcListaID + [) ] +; +*!* [ group by id_fact] +*!* lcCursor=[crsdiscount] +*!* lnSucces = goExecutor.oExecute(lcSql,lcCursor) +*!* If lnSucces < 0 +*!* aMESSAGEBOX(goExecutor.cEroare,0+16,"Eroare") +*!* Endif +*!* Endif + +*!* If lnSucces > 0 +*!* *!* Select crsireg +*!* *!* If Reccount("crsireg")>0 +*!* pcDataOra = get_ora(2) + +*!* If Used('crslistare') +*!* Use In crslistare +*!* Endif +*!* If Used('crsdiscount') && dc gnNir_standard = 0 +*!* Select Alltrim(Str(a.nnir))+a.cgest As cnir_gest,a.*,b.fdoc,b.nract,b.dataireg,b.Cont,b.nume,b.total_factura, ; +*!* NVL(c.discount,000000000.0000) As discount, Nvl(c.tvaDiscount,000000000.0000) As tvaDiscount; +*!* FROM crsrul a ; +*!* LEFT Join crsireg b On b.id_fact=a.id_fact ; +*!* LEFT Join crsdiscount c On c.id_fact=a.id_fact ; +*!* INTO Cursor crslistare Order By 1 +*!* Else +*!* Select Alltrim(Str(a.nnir))+a.cgest As cnir_gest,a.*,b.fdoc,b.nract,b.dataireg,b.Cont,b.nume,b.total_factura ; +*!* FROM crsrul a ; +*!* LEFT Join crsireg b On b.id_fact=a.id_fact ; +*!* INTO Cursor crslistare Order By 1 +*!* Endif + +*!* Select crslistare +*!* If gnNir_standard = 1 && este NIR standard +*!* Report Form rap_nir_standard.frx To Printer Prompt Preview +*!* Else +*!* If pnTip = 6 +*!* Report Form rap_nir_marfuri.frx To Printer Prompt Preview +*!* Else +*!* Report Form rap_nir_materiale.frx To Printer Prompt Preview +*!* Endif +*!* Endif +*!* *!* Endif +*!* Endif + +*!* If Used('crsireg') +*!* Use In crsireg +*!* Endif +*!* If Used('crsrul') +*!* Use In crsrul +*!* Endif +*!* If Used('crslistare') +*!* Use In crslistare +*!* Endif +*!* If Used('crsdiscount') +*!* Use In crsdiscount +*!* Endif + +*!* Endproc && listare_nir +*!* *-------------------------------------------------------------------- +*!* Procedure listare_nir_model2 && NU FACE BINE IN SITUATIA : MAI MULTE FACTURI PE ACEEASI NR NIR +*!* Parameters tnNir,tnTip + +*!* Private lnCod,pnNir,lnSuma1,lnSuma2,loact,pnTip,pnBazaDiscount,pnTvaDiscount +*!* Store "" To loact +*!* Store 0 To lnSuma1,lnSuma2,pnNir,pnBazaDiscount,pnTvaDiscount +*!* pnNir=tnNir + +*!* If Empty(tnTip) +*!* pnTip = 0 +*!* Else +*!* pnTip = tnTip +*!* Endif + +*!* If Used('crsrul') +*!* Use In crsrul +*!* Endif + +*!* lcSql=[select cod,nnir,dataact,codmat,denumire,um,pret,tva,cant,pretv,tvav,cante,cgest,proc_tva,proc_tvav,id_fact,id_gestiune,procent from ] + gcS + [.vrul where luna=?gnLuna and an=?gnAn and nnir=]+Alltrim(Str(pnNir))+[ and cant<>0 and cante=0] +*!* lcCursor=[crsrul] +*!* lnSucces = goExecutor.oExecute(lcSql,lcCursor) +*!* If lnSucces < 0 +*!* aMESSAGEBOX(goExecutor.cEroare,0+16,"Eroare") +*!* Endif + +*!* If lnSucces > 0 +*!* If Reccount('crsrul')=0 +*!* aMESSAGEBOX("Nu a fost inregistrat nici un NIR in luna curenta cu numarul "+Alltrim(Str(pnNir))+" !",0+48,"Atentie") +*!* lnSucces = -1 +*!* Else +*!* Select crsrul +*!* lnCod=cod +*!* lnIdfact = id_fact + +*!* If Used('crsireg') +*!* Use In crsireg +*!* Endif + +*!* lcSql=[select fdoc,nract,dataireg,cont,acont,nume,id_fact from ] + gcS + [.vireg_parteneri where luna=?gnLuna and an=?gnAn and SUBSTR(cont,1,2) = '40' and id_fact=?lnIdFact ] +*!* lcCursor=[crsireg] +*!* lnSucces = goExecutor.oExecute(lcSql,lcCursor) +*!* If lnSucces < 0 +*!* aMESSAGEBOX(goExecutor.cEroare,0+16,"Eroare") +*!* Endif +*!* Endif +*!* Endif + + +*!* If lnSucces > 0 And gnNir_standard = 0 +*!* lcSql=[select sum(suma) as discount, proc_tva from ] + gcS + [.vact where luna=?gnLuna and an=?gnAn and SUBSTR(scd,1,2) = '40' and SUBSTR(scc,1,3) = '767' and id_fact=?lnIdFact ] +; +*!* [ group by proc_tva] +*!* lcCursor=[crsdiscount] +*!* lnSucces = goExecutor.oExecute(lcSql,lcCursor) +*!* If lnSucces < 0 +*!* aMESSAGEBOX(goExecutor.cEroare,0+16,"Eroare") +*!* Endif +*!* Endif + +*!* If lnSucces > 0 +*!* Select crsireg +*!* If Reccount("crsireg")>0 +*!* *ptDataOra=get_ora() +*!* pcDataOra = get_ora(2) + +*!* If Used('crsdiscount') && dc gnNir_standard = 0 +*!* Select crsdiscount +*!* Sum discount To pnBazaDiscount +*!* Sum Round((discount*(proc_tva-1)),gnPc) To pnTvaDiscount +*!* Endif + +*!* If Used('crslistare') +*!* Use In crslistare +*!* Endif + +*!* Select Alltrim(Str(a.nnir))+a.cgest As cnir_gest,a.*,b.* From crsrul a Left Join crsireg b On b.id_fact=a.id_fact Where ; +*!* a.nnir = pnNir And a.cante=0 And a.cant!=0 Into Cursor crslistare Order By 1 + +*!* Select crslistare +*!* If gnNir_standard = 1 && este NIR standard +*!* Report Form rap_nir_standard.frx To Printer Prompt Preview +*!* Else +*!* If pnTip = 6 +*!* Report Form rap_nir_marfuri.frx To Printer Prompt Preview +*!* Else +*!* Report Form rap_nir_materiale.frx To Printer Prompt Preview +*!* Endif +*!* Endif +*!* Endif +*!* Endif + +*!* If Used('crsireg') +*!* Use In crsireg +*!* Endif +*!* If Used('crsrul') +*!* Use In crsrul +*!* Endif +*!* If Used('crslistare') +*!* Use In crslistare +*!* Endif +*!* If Used('crsdiscount') +*!* Use In crsdiscount +*!* Endif + +*!* Endproc + + +*-------------------------- +Procedure listare_descarcare_productie + Parameters tnNir, tnTip + + Private pnNir, pnNr_pag, pcFelDoc + pnNir = tnNir + pnNr_pag = tnTip + pcFelDoc = 'Pv productie' + + If Used('crsrul') + Use In crsrul + Endif + + *!* lcSql=[select id_articol, pret, denumire, codmat, um, cont, SUM(cant) as cant, SUM(cante) as cante from vrul where luna=?gnLuna and an=?gnAn and nnir = ?pnNir and (SUBSTR(cont,1,3) = '301' or (SUBSTR(cont,1,3) = '371'))]+; + *!* [and id_gestiune in (select distinct id_gestiune from vnom_gestiuni where nr_pag = ?pnNr_pag) ] + ; + *!* [group by id_articol, pret, denumire, codmat, um, cont ]+; + *!* [ order by cont, denumire] + + If !Empty(pnNr_pag) + && or id_set = 268) -- adaugat pe 29mar2013 v2.2.7 - sa apara la descarcarea_productie si intrarea si iesirea mixului care e pe contul 345, nu numai a ingredientelor + lcCond = [ and ((SUBSTR(cont,1,3) = '301' or (SUBSTR(cont,1,3) = '371')) or id_set = 268)] + Else + lcCond = [] + Endif + +*!* lcSql=[select a.id_gestiune,a.nume_gestiune,a.id_articol,a.pret,a.denumire, a.codmat,a.um,a.cont,a.nnir, a.dataact,]+; +*!* [(case when b.lvl = 1 then a.cant else 0 end) as cant, (case when b.lvl = 1 then 0 else a.cante end) as cante,]+; +*!* [(case when b.lvl is null then 1 when b.lvl = 1 then 2 else 3 end) as ie ]+; +*!* [ from (select id_gestiune,id_articol,pret,cont,nnir,dataact, SUM(cant) as cant,SUM(cante) as cante,um,denumire,codmat,nume_gestiune from vrul where luna=?gnLuna and an=?gnAn and nnir = ?pnNir ]+; +*!* lcCond + gcCondSucursala + [ ] + ; +*!* [group by id_gestiune, id_articol, pret, cont, nnir, dataact,um,denumire,codmat,nume_gestiune) a left join (select level as lvl from dual connect by level < 3) b on a.cant <> 0 and a.cante <> 0 order by nume_gestiune, ie, denumire] + + * Am luat in considerare si cazul in care productia aparea doar ca intrare, nu si ca iesire ca la productia de mix vopsea auto + TEXT TO lcSql NOSHOW +select id_gestiune, + nume_Gestiune, + id_articol, + pret, + denumire, + codmat, + um, + lot, + serie, + cont, + nnir, + dataact, + cant, + cante, + ie + from (select a.id_gestiune, + a.nume_gestiune, + a.id_articol, + a.pret, + a.denumire, + a.codmat, + a.um, + a.lot, + a.serie, + a.cont, + a.nnir, + a.dataact, + (case + when b.lvl = 1 then + a.cant + else + 0 + end) as cant, + (case + when b.lvl = 1 then + 0 + else + a.cante + end) as cante, + (case + when b.lvl is null then + 1 + when b.lvl = 1 then + 2 + else + 3 + end) as ie + from (select id_gestiune, + id_articol, + pret, + cont, + nnir, + dataact, + SUM(cant) as cant, + SUM(cante) as cante, + um, + lot, + serie, + denumire, + codmat, + nume_gestiune + from vrul + where luna= ?gnLuna and an= ?gnAn and nnir = ?pnNir + group by id_gestiune, + id_articol, + pret, + cont, + nnir, + dataact, + um, + lot, + serie, + denumire, + codmat, + nume_gestiune) a + left join (select level as lvl from dual connect by level < 3) b + on a.cant <> 0 + order by nume_gestiune, ie, denumire) + where cant <> 0 or cante <> 0 + ENDTEXT + + lcCursor=[crsrul] + lnSucces = goExecutor.oexecute(lcSql,lcCursor) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,"Eroare") + Return + Endif + + If Reccount('crsrul')=0 + amessagebox("Nu a fost inregistrat nici un BON in luna curenta cu numarul "+Alltrim(Str(pnNir))+" !",0+48,"Atentie") + If Used('crsrul') + Use In crsrul + Endif + Return + Endif + + goExport.export2frx([crsrul],[rap_descarcare_productie], , , , , , .T.) + + Use In (SELECT('crsrul')) +Endproc && listare_descarcare_productie +*-------------------------- + +Procedure LISTARE_BON + Parameters tnNir, tnTip, tcListaIdSet + DO LISTARE_BON_TOT WITH tnNir, tnNir, tnTip, tcListaIdSet +ENDPROC + +* FOMULAR CERERE DATE LISTARE BONURI IN LUCRU +* Trebuie facut un formular pentru completarea PERIOADA, NNIR1, NNIR2, GESTIUNE, LUCRARE +* Se apeleaza apoi LISTARE_BON_TOT +PROCEDURE LISTARE_INFO + pcNumeGestiune = Alltrim(Upper(locauta.nume_gestiune)) + pnIdGest = Iif(pcNumeGestiune # "", locauta.id_gestiune, -1) + + Release locauta + + If pnIdGest = -1 + lcCond = [ and r.id_gestiune in (select distinct id_gestiune from ] + gcS + [.vnom_gestiuni where nr_pag = ?pnTip) and id_gestiune in ] + ; + [(select g.id_gestiune from ] + gcS + [.vgest_coresp_grupe_gestiuni g join ] + ; + gcS + [.vgest_coresp_util_grupe u on g.id_grupe = u.id_grupe and u.id_util = ?gnIdUtil) ] + Else + lcCond = [ and r.id_gestiune = ?pnIdGest ] + ENDIF + + oper = Createobject('frm_perioada_luni') + oper._optiongrup1.Value=1 + oper.Show(1) + Release oper + + + If Occurs('_',pcondper)>0 + lpos = At('_',pcondper) + ldata1 = Substr(pcondper,1,lpos-1) + ldata2 = Substr(pcondper,lpos+1) + lcd1 = Substr(ldata1,1,2)+'.'+Substr(ldata1,3,4) + lcd2 = Substr(ldata2,1,2)+'.'+Substr(ldata2,3,4) + pcperioada='De la: '+lcd1+' pana la '+lcd2 + Else + ldata1 = pcondper + pcperioada='LUNA: '+Substr(ldata1,1,2)+'.'+Substr(ldata1,3,4) + ldata2 = ldata1 + Endif + lnLuna1 = Val(Substr(ldata1,1,2)) + lnAn1 = Val(Substr(ldata1,3,4)) + lnLuna2 = Val(Substr(ldata2,1,2)) + lnAn2 = Val(Substr(ldata2,3,4)) + + *pcselect = ['select * from ] + gcS + [.vLucrari_validat where 2=2'] + pcselect = [select * from vnom_Lucrari] + pcfiltru = [1=2] + pcschema = [] + pcorder = [nrord] + pccoloane = [nrord] + pcTitlu = [Lucrare/Comanda] + *pcFiltruOriginal = [validat = 0 and inactiv = 0] + pcFiltruOriginal = [] + locauta = cauta_alfa(pcselect,pcfiltru,pcschema,pcorder,pccoloane,pcTitlu,pcTitlu,'',.T.,pcFiltruOriginal) && 11.07.2007 + + If Empty(locauta.id_lucrare) And Empty(locauta.nrord) + Return + Endif + + lnIdLucrare = locauta.id_lucrare + + If Empty(tnTip) + pnTip = 0 + Else + pnTip = tnTip + Endif + + If Used('crsrul') + Use In crsrul + Endif + + lnInf = lnLuna1+ 12*lnAn1 + lnSup = lnLuna2+ 12*lnAn2 + +ENDPROC + +Procedure LISTARE_BON_TOT + *!* modificare ROADEVIZE 24.10.2013 : tcListaIdSet + Parameters tnNir1, tnNir2, tnTip, tcListaIdSet, tnIdGestiune, tnIdLucrare + + LOCAL llCasareObiecteNoi + Private lnCod,pnNir1,pnNir2,lnSuma1,lnSuma2,loact,pnTip + Store "" To loact + Store 0 To lnSuma1,lnSuma2,pnNir1, pnNir2 + pnNir1 = tnNir1 + pnNir2 = tnNir2 + + If Empty(tnTip) + pnTip = 0 + Else + pnTip = tnTip + Endif + + If Used('crsrul') + Use In crsrul + Endif + + * Listare BON CASARE obiecte inventar noi, din RUL in loc de RUL_OBINV + llCasareObiecteNoi = !EMPTY(m.tcListaIdSet) and TYPE('tcListaIdSet') = 'C' and m.tcListaIdSet = '72' + + *!* modificare 03.10.2007 + Do Case + Case Empty(tnTip) + lcCondTipGest = " " && bon de consum cu inventar + Case tnTip = 6 + lcCondTipGest = " where nr_pag = ?pnTip " + Otherwise + lcCondTipGest = " where nr_pag <> 6 " + ENDCASE + *!* modificare 29.03.2013 v 2.2.7: id_set <> 268 in lcCondTipGest - sa nu se listeze bonurile importate din xml cu productia de vopsea pentru ca n-ar fi corect sa apara produsul final pe bon + + lcCondIdSet = " and r.id_set <> 268 " + *!* modificare ROADEVIZE 24.10.2013 + If !Empty(tcListaIdSet) + lcCondIdSet = lcCondIdSet + " and r.id_set in (" + tcListaIdSet + ")" + Endif + *!* modificare ROADEVIZE 24.10.2013 ^ + *!* If !Empty(tnTip) + *!* lcCondTipGest = " where nr_pag = ?pnTip " + *!* Else + *!* lcCondTipGest = "" && bon de consum cu inventar + *!* Endif + *!* modificare 03.10.2007 ^ + +*!* 27.08.2009 + + +IF tnTip = 3 AND !m.llCasareObiecteNoi && obiecte de inventar in folosinta + *!* modificare v 2.2.4 : am pus select max(marca)... in loc de sal_personal.marca pentru ca s-ar putea sa am un salariat de mai multe ori in sal_personal + * id_set = 274 = iesire din folosinta si inregistrare cheltuiala, apare o iesire in rul_obinv.cante <> 0 + * id_set = 55 = bon consum si dare in folosinta, apare o iesire in rul si o intrare in rul_obinv.cant <> 0 +*!* lcSql=[select r.*,(select max(marca) from sal_personal where id_part = r.id_responsabil and id_salariat in ] + ; +*!* [(select id_persoana from sal_stat where an =?gnAn and luna = ?gnLuna and sters = 0)) as marca from vrul_obinv r ]+; +*!* [ where r.an=] + ALLTRIM(STR(gnAn)) + [ and r.luna=] + ALLTRIM(STR(gnLuna)) + [ and r.nnir between ] + ALLTRIM(STR(pnNir1)) + [ and ] + ALLTRIM(STR(pnNir2)) + ; +*!* [ and r.cant <> 0 and r.cante = 0 and r.id_tip_rulaj <> 3]+; +*!* STRTRAN(gcCondSucursala,[id_sucursala],[r.id_sucursala]) + [ ] + ; +*!* [and r.id_gestiune in (select distinct id_gestiune from vnom_gestiuni ]+ lcCondTipGest + [)] + lcCondIdSet +; +*!* [order by r.nnir, r.cgest, r.nrord, r.nresp, r.sectie, r.id_rul_obinv] + *!* modificare 21.06 : am adaugat id_rul la order by + + TEXT TO lcSql TEXTMERGE NOSHOW +select r.*, + (select max(p.marca) + from sal_personal p join sal_stat s on (p.id_salariat = s.id_persoana) + where p.id_part = r.id_responsabil + and s.an= <> and s.luna = <> and s.sters = 0) as marca, + (select max(f.denumire) + from sal_personal p join sal_stat s on (p.id_salariat = s.id_persoana) + left join sal_nom_formatii f on s.id_formatie = f.id_formatia + where p.id_part = r.id_responsabil + and s.an= <> and s.luna = <> and s.sters = 0) as formatie + from vrul_obinv r + where r.an = <> + and r.luna = <> + and r.nnir between <> and <> + and r.cant <> 0 and r.cante = 0 and r.id_tip_rulaj <> 3 + <> + and r.id_gestiune in (select distinct id_gestiune from vnom_gestiuni <>) + <> + order by r.nnir, r.cgest, r.nrord, r.nresp, r.sectie, r.id_rul_obinv + ENDTEXT +ELSE + *!* modificare v 2.2.4 : am pus select max(marca)... in loc de sal_personal.marca pentru ca s-ar putea sa am un salariat de mai multe ori in sal_personal +*!* lcSql=[select r.*,(select max(marca) from sal_personal where id_part = r.id_responsabil and id_salariat in ] + ; +*!* [(select id_persoana from sal_stat where an =?gnAn and luna = ?gnLuna and sters = 0)) as marca from vrul r ]+; +*!* [ where r.an=] + ALLTRIM(STR(gnAn)) + [ and r.luna=] + ALLTRIM(STR(gnLuna)) + [ and r.nnir between ] + ALLTRIM(STR(pnNir1)) + [ and ] + ALLTRIM(STR(pnNir2)) + ; +*!* [ and r.cant=0 and r.cante<>0 and r.id_tip_rulaj <> 3]+; +*!* STRTRAN(gcCondSucursala,[id_sucursala],[r.id_sucursala]) + [ ] + ; +*!* [and r.id_gestiune in (select distinct id_gestiune from vnom_gestiuni ]+ lcCondTipGest + [)] + lcCondIdSet +; +*!* [order by r.nnir, r.cgest, r.nrord, r.nresp, r.sectie, r.id_rul] + *!* modificare 21.06 : am adaugat id_rul la order by + TEXT TO lcSql TEXTMERGE NOSHOW +select r.*, + (select max(p.marca) + from sal_personal p join sal_stat s on (p.id_salariat = s.id_persoana) + where p.id_part = r.id_responsabil + and s.an= <> and s.luna = <> and s.sters = 0) as marca, + (select max(f.denumire) + from sal_personal p join sal_stat s on (p.id_salariat = s.id_persoana) + left join sal_nom_formatii f on s.id_formatie = f.id_formatia + where p.id_part = r.id_responsabil + and s.an= <> and s.luna = <> and s.sters = 0) as formatie + from vrul r + where r.an = <> + and r.luna = <> + and r.nnir between <> and <> + and r.cant = 0 and r.cante <> 0 and r.id_tip_rulaj <> 3 + <> + and r.id_gestiune in (select distinct id_gestiune from vnom_gestiuni <>) + <> + order by r.nnir, r.cgest, r.nrord, r.nresp, r.sectie, r.id_rul + ENDTEXT + +ENDIF && tnTip = 3 +*!* 27.08.2009 ^ + lcCursor=[crsrul] + lnSucces = goExecutor.oexecute(lcSql,lcCursor) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,"Eroare") + Return + Endif + + If Reccount('crsrul')=0 + amessagebox("Nu a fost inregistrat nici un BON in luna curenta cu numere intre " +Alltrim(Str(m.pnNir1))+ " si " + +Alltrim(Str(m.pnNir2))+ " !",0+48,"Atentie") + Use In crsrul + Return + Endif + + *ptDataOra=get_ora() +*!* pcDataOra = get_ora(2) + + Private pcSemnaturi + Store '' To pcSemnaturi + param_listari('rap_bon_achi',,@pcSemnaturi,.T.) + + Select crsrul + *!* modificare ROAPRODUCTIE v 2.0.2 : goExport + If pnTip = 5 && marfa la pret de achizitie + If Type("gnList_bon_marfa") = "U" +*!* Report Form rap_bon_vanz To Printer Prompt Preview + lcRaport = [rap_bon_vanz] + Else + Do Case + Case gnList_bon_marfa = 0 +*!* Report Form rap_bon_achi To Printer Prompt Preview + lcRaport = [rap_bon_achi] + Case gnList_bon_marfa = 1 +*!* Report Form rap_bon_vanz To Printer Prompt Preview + lcRaport = [rap_bon_vanz] + Case gnList_bon_marfa = 2 +*!* Report Form rap_bon_achi_vanz To Printer Prompt Preview + lcRaport = [rap_bon_achi_vanz] + Otherwise +*!* Report Form rap_bon_vanz To Printer Prompt Preview + lcRaport = [rap_bon_vanz] + Endcase + Endif + Else +*!* Report Form rap_bon_achi To Printer Prompt Preview + *!* 27.08.2009 + + IF tnTip = 3 AND !m.llCasareObiecteNoi && obiecte de inventar + lcRaport = [rap_bon_achi_inv] + ELSE + lcRaport = [rap_bon_achi] + ENDIF + *!* 27.08.2009 ^ + Endif + + IF TYPE('goExport') = 'O' + *goExport.export2frx([crsrul],lcRaport) + goExport.export2frx([crsrul],lcRaport, , , , , , .T.) + ELSE + Report Form (lcRaport) To Printer Prompt Preview + ENDIF +*!* modificare ROAPRODUCTIE v 2.0.2 ^ + + If Used('crsrul') + Use In crsrul + Endif + +Endproc && LISTARE_BON + + +*------------------------------------------------------------------ +*!* Procedure LIST_BON +*!* Parameters M.NNIR + +*!* Sele act +*!* Loca For Val(nnir)==VAL(m.NNIR) AND INLIST(ID_SET,0,56,61,78,80,88,90) &&NUMAI BONURI (NOI SAU VECHI) +*!* If !Found() +*!* Do mesaj With 'Nu a fost inregistrat nici un bon','cu numarul '+M.NNIR +*!* Return +*!* ENDIF + +*!* M.COD=COD +*!* m.T='BONURI' + +*!* SELECT DISTINCT NUME_2 As RESPONS,COD; +*!* WHERE COD=M.COD; +*!* FROM ACT INTO CURSOR FF + + +*!* Select Distinct rull.*,FF.*; +*!* from FF,rull; +*!* where FF.cod=rull.cod And Val(rull.nnir)=VAL(m.NNIR) And rull.cante # 0 And rull.cant=0; +*!* into Table &loc\&nfscurt\tempo\ra +*!* Sele ra +*!* Index On Str(gest,2)+nnir To &loc\&nfscurt\tempo\ra +*!* If !BON_ACHI +*!* Report Format BONLI.FRX To Printer Prompt Preview +*!* Else +*!* Report Format BONCONS.FRX To Printer Prompt Preview +*!* Endif + +*!* Use In ra +*!* USE IN FF + +*!* DO STERGE +*!* RETURN + +*!* *------------------------------------------------------------- + +Procedure LISTARE_TRANSFER + Parameters tnNir,tnTip, tcRul + + Private lnCod,pnNir,lnSuma1,lnSuma2,pnTip,pcGestout + Store "" To pcGestout + Store 0 To lnSuma1,lnSuma2,pnNir + pnNir = tnNir + + Local lcRul + If Empty(tcRul) Or Type('tcRul') # 'C' Or Pcount() < 3 + lcRul = 'vrul' + Else + lcRul = Alltrim(tcRul) + Endif + + If Empty(tnTip) + pnTip = 0 + Else + pnTip = tnTip + Endif + + If Used('crsrul') + Use In crsrul + Endif + + *!* lcSql=[select distinct r.*, a.nract, a.gestin, a.id_gestin from ] + gcS + [.] + lcRul + [ r left join ] + gcS +[.vact a on r.cod=a.cod and a.luna=r.luna and a.an=r.an and a.id_gestin is not null ] + ; + *!* [where r.luna=?gnLuna and r.an=?gnAn and r.nnir = ?pnNir and r.cant=0 and r.cante<>0 order by r.nnir, r.cgest, r.sectie, r.nrord, r.nresp, r.cgestc, r.nrespc] + Do Case + Case pnTip = 7 + *!* lcSql = [select cod,nnir,dataact,cgest,nume_gestiune,cgestc,nume_gestiunec,nresp,nrespc,denumire,codmat,um,max(decode(cante, 0, 0, cante)) as cante,] + ; + *!* [max(decode(cante, 0, 0, pret)) as pret,max(decode(cant, 0, 0, pret)) as pret_nou,id_articol,id_gestiune,] + ; + *!* [id_responsabil, cont from ] + gcS + [.vrul where luna = ?gnLuna and an = ?gnAn and nnir = ?pnNir ] + ; + *!* [group by id_articol, id_gestiune, id_responsabil, cont, cod, nnir, dataact, cgest, nume_gestiune,] + ; + *!* [cgestc,nume_gestiunec, nresp, nrespc,] + ; + *!* [denumire, codmat, um order by nnir,cgest,nresp] + lcSql = [select a.cod, a.nnir, a.dataact, a.cgest, a.serie, a.lot, a.nume_gestiune, a.cgestc, a.nume_gestiunec, a.nresp, a.resp_marca, ] + ; + [a.nrespc, a.respc_marca, a.denumire, a.codmat, a.um, a.cante, a.pret, b.pret as pret_nou, a.id_articol, a.id_Gestiune, ] + ; + [a.id_responsabil, a.cont, a.id_rul from ] + gcS + [.vrul a ] + ; + [left join rul b on a.cod = b.cod and a.id_articol = b.id_articol ] + ; + [and a.id_gestiune = b.id_gestiunec and a.id_gestiunec = b.id_gestiune and a.cante = b.cant ] + ; + [and Nvl(a.id_rul_aux,-99) = Nvl(b.id_rul_aux,-99) ] + ; + [and NVL(a.id_sucursala,-99) = NVL(b.id_sucursala,-99) ] + ; + [where a.luna = ] + ALLTRIM(STR(gnLuna)) + [ and a.an = ] + ALLTRIM(STR(gnAn)) + [ and a.nnir = ] + ALLTRIM(STR(pnNir)) + [ and a.cante <> 0 ] + ; + STRTRAN(gcCondSucursala,[id_sucursala],[a.id_sucursala]) + [ ] + ; + [order by a.nnir, a.cgest, a.nresp, a.id_rul] + *!* modificare migrare v 1.0 > v 2.0 + Case pnTip = 8 + lcSql=[select distinct r.*, a.nract, p.cod_fiscal, p.reg_comert, p.adresa from ] + ; + lcRul + [ r left join act a on r.cod=a.cod and a.luna=r.luna and a.an=r.an ] + ; + [ left join vnom_parteneri p on p.id_part = r.id_part_rez ] + ; + [where r.luna=?gnLuna and r.an=?gnAn and r.nnir = ?pnNir and r.cant<>0 and r.cante=0 ] + ; + [and r.id_set = 229 ] + ; + STRTRAN(gcCondSucursala,[id_sucursala],[r.id_sucursala]) + [ ] + ; + [order by r.nnir, r.cgest, r.sectie, r.nrord, r.nresp, r.cgestc, r.nrespc, r.id_rul]+; + IIF('obinv'$Lower(lcRul), '_obinv', '') + *!* modificare migrare v 1.0 > v 2.0 ^ + *!* 27.08.2009 + CASE pnTip = 10 && transfer ob inv in folosinta - durata + *!* as fi vrut doar transferurile de ob inv in folosinta cu durata ramasa + **! trebuie sa iau de pe linia cu intrarile noua durata ramasa, nu de pe iesiri + lcSql=[select distinct r.*, a.nract from ] + lcRul + [ r left join ] + gcS +[.act a on r.cod=a.cod ] + ; + [and a.luna=r.luna and a.an=r.an and NVL(r.id_sucursala,-99) = NVL(a.id_sucursala,-99) ] + ; + [where r.luna=] + ALLTRIM(STR(gnLuna)) + [ and r.an=] + ALLTRIM(STR(gnAn)) + [ and r.nnir = ] + ALLTRIM(STR(pnNir)) + [ and r.cante=0 and r.cant<>0 and r.id_set<>229 ] + ; + STRTRAN(gcCondSucursala,[id_sucursala],[r.id_sucursala]) + [ ] + ; + [order by r.nnir, r.cgest, r.sectie, r.nrord, r.nresp, r.cgestc, r.nrespc, r.id_rul]+; + IIF('obinv'$Lower(lcRul), '_obinv', '') + *!* 27.08.2009 ^ + OTHERWISE + lcSql=[select distinct r.*, a.nract from ] + lcRul + [ r left join ] + gcS +[.act a on r.cod=a.cod ] + ; + [and a.luna=r.luna and a.an=r.an and NVL(r.id_sucursala,-99) = NVL(a.id_sucursala,-99) ] + ; + [where r.luna=] + ALLTRIM(STR(gnLuna)) + [ and r.an=] + ALLTRIM(STR(gnAn)) + [ and r.nnir = ] + ALLTRIM(STR(pnNir)) + [ and r.cant=0 and r.cante<>0 and r.id_set<>229 ] + ; + STRTRAN(gcCondSucursala,[id_sucursala],[r.id_sucursala]) + [ ] + ; + [order by r.nnir, r.cgest, r.sectie, r.nrord, r.nresp, r.cgestc, r.nrespc, r.id_rul]+; + IIF('obinv'$Lower(lcRul), '_obinv', '') + + ENDCASE + + lcCursor=[crsrul] + lnSucces = goExecutor.oexecute(lcSql,lcCursor) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,"Eroare") + Return + Endif + + If Reccount('crsrul')=0 + amessagebox("Nu a fost inregistrata nici o nota de transfer in luna curenta cu numarul "+Alltrim(Str(pnNir))+" !",0+48,"Atentie") + Use In crsrul + Return + Endif + + + *!* SELECT DISTINCT id_gestiune, nume_gestiune FROM crsrul INTO CURSOR crs_gest_out + *!* SELECT crs_gest_out + *!* SCAN + *!* pcGestout = pcGestout + ',' + ALLTRIM(nume_gestiune) + *!* ENDSCAN + *!* USE IN crs_gest_out + + *!* pcGestout = SUBSTR(pcGestout,2) + *ptDataOra=get_ora() +*!* modificare ROAPRODUCTIE v 2.0.2 : goExport +*!* pcDataOra = get_ora(2) + Select crsrul + Do Case + Case pnTip = 7 + Private pcgestc, pcnume_gestiunec + Select crsrul + pcgestc = cgestc + pcnume_gestiunec = nume_gestiunec +*!* Report Form rap_dif_pret To Printer Prompt Preview + goExport.export2frx([crsrul],[rap_dif_pret]) + Release pcgestc, pcnume_gestiunec + *!* *!* modificare migrare v 1.0 > v 2.0 + Case pnTip = 8 + * partener/lucrare rezervare + Private pcPartRez, pcNrOrdRez, pcPartNrordRez, pcPartNrordRezC + Select crsrul + pcPartRez = Alltrim(Nvl(part_rez,[])) + pcNrOrdRez = Alltrim(Nvl(nrord_rez,[])) + pcPartNrordRez = ALLTRIM(nvl(part_rez,'')) + ; + iif(!empty(alltrim(nvl(nrord_rez,''))), iif(!empty(nvl(part_rez,'')), ' / ', '') + ALLTRIM(nrord_rez), '') + ; + IIF(!EMPTY(NVL(cod_fiscal, '')), ', CUI: ' + ALLTRIM(cod_fiscal) + IIF(!EMPTY(NVL(reg_comert, '')), ', Reg. Com.: ' + ALLTRIM(reg_comert), ''), '') + ; + iif(!empty(nvl(adresa,'')), CHR(13) + CHR(10) + 'Adresa: ' + alltrim(adresa), '') + + pcPartNrordRezC = '' + SET STEP ON + * articolele se transfera la un singur partener/lucrare, dar pot proveni de la mai multi parteneri/lucrari rezervate + * fac o lista partener/lucrare rezervare corespondenti + IF !EMPTY(NVL(crsRul.cod,0)) + lcSql=[select distinct part_rez, nrord_rez from ] + lcRul + ; + [ where luna=?gnLuna and an=?gnAn and cod = ] + ALLTRIM(STR(crsrul.cod)) + [ and nnir = ?pnNir and cant=0 and cante<>0 ] + ; + [ and id_set = 229 ] + m.gcCondSucursala + + llSucces = goExecutor.oexecuta(lcSql,"crsRulC") + If m.llSucces + SELECT crsRulC + SCAN + lcPartRezC = ALLTRIM(NVL(part_rez, '')) + lcNrordRezC = ALLTRIM(NVL(nrord_rez, '')) + pcPartNrordRezC = m.pcPartNrordRezC + IIF(RECNO() > 1, ', ', '') + m.lcPartRezC + ; + IIF(!EMPTY(m.lcNrordRezC), IIF(!EMPTY(m.lcPartRezC), '/', '') + m.lcNrordRezC, '') + ENDSCAN + USE IN (SELECT('crsRulC')) + ENDIF + ENDIF + + Select crsrul +*!* Report Form rap_nirrezervare To Printer Prompt Preview + goExport.export2frx([crsrul],[rap_nirrezervare], , , , , , .T.) + + Release pcPartRez,pcNrOrdRez,pcPartNrordRez,pcPartNrordRezC, pnIdSet + *!* *!* modificare migrare v 1.0 > v 2.0 ^ +*!* 27.08.2009 + Case pnTip = 10 && obiecte de inventar in folosinta - durata + goExport.export2frx([crsrul],[rap_nirtransfer_achi2_durata], , , , , , .T.) +*!* 27.08.2009 ^ + Case pnTip # 6 +*!* Report Form rap_nirtransfer_achi2 To Printer Prompt Preview + goExport.export2frx([crsrul],[rap_nirtransfer_achi2], , , , , , .T.) + Otherwise +*!* Report Form rap_nirtransfer_vanz To Printer Prompt Preview + goExport.export2frx([crsrul],[rap_nirtransfer_vanz], , , , , , .T.) + Endcase + + If Used('crsrul') + Use In crsrul + Endif +Endproc + +*------------------------------------------------------- + +Procedure LISTARE_RETUR + Parameters tnNir,tnTip + + Private lnCod,pnNir,lnSuma1,lnSuma2,pnTip,pcGestout,pcNrord + Store "" To pcGestout,pcNrord + Store 0 To lnSuma1,lnSuma2,pnNir + pnNir = tnNir + + If Empty(tnTip) + pnTip = 0 + Else + pnTip = tnTip + Endif + + If Used('crsrul') + Use In crsrul + Endif + + *!* modificare v 2.4.4 : am pus select max(marca) ... in loc de sal_personal.marca + lcSql=[select distinct r.cod,r.id_articol,r.denumire,r.codmat,r.um,r.dataact,r.pret,r.pretv,-r.cante as cante,]+; + [r.id_lucrare,r.nrord,r.id_gestiune,r.nume_gestiune,r.serie,r.lot,r.cgest,r.nnir,a.nract,r.serie_act,r.nresp,] + ; + [(select max(marca) from sal_personal where id_part = r.id_responsabil and id_salariat in ] + ; + [(select id_persoana from sal_stat where an =?gnAn and luna = ?gnLuna and sters = 0)) as marca, r.id_rul from vrul r ]+; + [ left join act a on a.sters=0 and r.cod=a.cod and a.luna=r.luna and a.an=r.an ] + ; + [where r.luna=?gnLuna and r.an=?gnAn and r.nnir = ?pnNir and r.cant=0 and r.cante<>0] + ; + STRTRAN(gcCondSucursala,[id_sucursala],[r.id_sucursala]) + [ ] + ; + [order by r.nnir,r.cgest,r.nrord,r.id_rul] + lcCursor=[crsrul] + lnSucces = goExecutor.oexecute(lcSql,lcCursor) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,"Eroare") + Return + Endif + + If Reccount('crsrul')=0 + amessagebox("Nu a fost emisa nota cu numarul "+Alltrim(Str(pnNir))+" in luna curenta!",0+48,"Atentie") + Use In crsrul + Return + Endif + + Select Distinct id_gestiune, nume_gestiune, nrord From crsrul Into Cursor crs_gest_out + Select crs_gest_out + Scan + pcGestout = pcGestout + ',' + Alltrim(nume_gestiune) + pcNrord = pcNrord + ',' + Alltrim(nrord) + Endscan + Use In crs_gest_out + + pcGestout = Substr(pcGestout,2) + pcNrord = Substr(pcNrord,2) + *ptDataOra=get_ora() + *!* modificare ROAPRODUCTIE v 2.0.2 +*!* pcDataOra = get_ora(2) + + Private pcSemnaturi + Store '' To pcSemnaturi + + Select crsrul + If pnTip # 6 + param_listari('rap_retur_achi',,@pcSemnaturi,.T.) + Select crsrul +*!* Report Form rap_retur_achi To Printer Prompt Preview + goExport.export2frx([crsrul],[rap_retur_achi], , , , , , .T.) + Else +*!* Report Form rap_retur_vanz To Printer Prompt Preview + goExport.export2frx([crsrul],[rap_retur_vanz], , , , , , .T.) + Endif + + If Used('crsrul') + Use In crsrul + Endif + + Return +ENDPROC && listare_retur + *------------------------------------------------------- + + *!* Procedure listare_facturi + *!* Parameters tcSerieAct,tnNract + + *!* *!* && object goFirma + + *!* lcSql = [Select distinct cod, serie_act, nract,id_fact,id_partd,dataact from ] + gcS + [.vact ] + ; + *!* [where an = ?gnAn and luna = ?gnLuna and nract = ?tnNract and NVL(serie_act,'+_') = NVL(?tcSerieAct,'+_') ] + ; + *!* [and scd = '4111'] + *!* lcCursor=[crsact] + *!* lnSucces = goExecutor.oExecute(lcSql,lcCursor) + *!* If lnSucces < 0 + *!* aMESSAGEBOX(goExecutor.cEroare,0+16,"Eroare") + *!* Return + *!* Endif + + *!* Select crsact + *!* Scatter Name oAct + *!* lnIdPart = oAct.id_partd + *!* lnIdfact = oAct.id_fact + *!* lnCod = oAct.cod + *!* pdDataact = Ttod(oAct.dataact) + + *!* lcSql = [Select * from ] + gcS + [.vnom_parteneri where id_part = ?lnIdPart ] + *!* lcCursor=[crspart] + *!* lnSucces = goExecutor.oExecute(lcSql,lcCursor) + *!* If lnSucces < 0 + *!* aMESSAGEBOX(goExecutor.cEroare,0+16,"Eroare") + *!* Return + *!* Endif + + *!* Select crspart + *!* Scatter Name opart + + *!* lcSql = [Select * from ] + gcS + [.vrul where an = ?gnAn and luna = ?gnLuna and id_fact=?lnIdFact and cod=?lnCod and cante<>0] + *!* lcCursor=[crsrul] + *!* lnSucces = goExecutor.oExecute(lcSql,lcCursor) + *!* If lnSucces < 0 + *!* aMESSAGEBOX(goExecutor.cEroare,0+16,"Eroare") + *!* Return + *!* Endif + + *!* Store [] To pcdelegat, pcbi, pceliberatde, pcnrinmat + *!* Do Form DATEFACT + *!* *!* sele optiuni + *!* *!* loca for optiune='FORMAT A4' + *!* llA4 = .T. + + *!* *ptDataOra=get_ora() + *!* pcDataOra = get_ora(2) + + *!* Select crsrul + + *!* If llA4 + *!* Report Form rap_FACTURI_vanzari_A4 To Printer Prompt Preview + *!* Else + *!* Report Form rap_FACTURI_vanzari_A5 To Printer Prompt Preview + *!* Endif + + *!* If Used('crsact') + *!* Use In crsact + *!* Endif + *!* If Used('crsrul') + *!* Use In crsrul + *!* Endif + *!* If Used('crspart') + *!* Use In crspart + *!* Endif + + *!* Endproc && listare_facuri + ***************************************************************************************** + +Procedure fisa_magazie_FIFO_vechi + Parameters tcod,tfis1,tfis2,tdata1,tdata2 + + lcod=Alltrim(tcod) + ldata1 = Alltrim(tdata1) + If !Empty(tdata2) + ldata2 = Alltrim(tdata2) + Else + ldata2 = ldata1 + Endif + + If Used('fisa_stoc') + Use In fisa_stoc + Endif + Create Cursor fisa_stoc (ldata d,nrdoc c(15),cantin N(12,3),pretin N(12,3),valin N(14,2),; + cantout N(12,3),pretout N(12,3),valout N(14,2),cantf N(12,3),pretf N(12,3),valf N(14,2),idf N(3)) + + && -----------------------&tfis1 = stocul + + lcSql = [select cants as cantf,pret as pretf,cants*.pret as valf,datain from ] + gcS + [.]+tfis1+[ where id_articol=]+lcod+[ order by datain] + lcCursor = [cstoc] + lnSucces = goExecutor.oexecute(lcSql,lcCursor) + goExecutor.oReset() + + If lnSucces > 0 + Select cstoc + Delete All For cantf=0 + + Select fisa_stoc + Append From Dbf('CSTOC') For !Deleted() + Select fisa_stoc + + Go Top + If Eof() + Append Blank + Endif + + Sum cantf To lnCantf + Sum valf To lnValf + + Go Top + Replace cantin With lnCantf, valin With lnValf,nrdoc With 'Stoc initial' + Replace All idf With 1 + If lnCantf#0 + Replace pretin With lnValf/lnCantf + Endif + &&----------------------&tfis2 = rulajele + + lcSql = [select * from ] + gcS + [.] + tfis2 + [ where id_articol=]+lcod+; + [ and trunc(dataact) between to_date(']+ldata1+[','YYYY-MM-DD') AND TO_DATE(']+ldata2+[','YYYY-MM-DD')]+; + [ order by dataact] + lcCursor = [trulaj] + lnSucces = goExecutor.oexecute(lcSql,lcCursor) + goExecutor.oReset() + Endif + + If lnSucces > 0 + Select trulaj + Scan + Scatter Name xrul + + Select fisa_stoc + Calculate Max(idf) To lnMax + lnMax=lnMax+1 + Append From Dbf('cstoc') For !Deleted() + Replace All idf With lnMax For Empty(idf) + + Do Case + Case xrul.cant#0 &&AND !INLIST(xrul.pret,&lista) + Locate For pretf=xrul.Pret And idf=lnMax + If !Found() + Select fisa_stoc + Append Blank + Replace cantin With xrul.cant,pretin With xrul.Pret,valin With xrul.cant*xrul.Pret + Replace cantf With xrul.cant,pretf With xrul.Pret,valf With xrul.cant*xrul.Pret + Replace idf With lnMax,ldata With xrul.datain,nrdoc With xrul.nnir + + Select cstoc + Append Blank + Replace cantf With xrul.cant,pretf With xrul.Pret,valf With xrul.cant*xrul.Pret + Else + Replace cantin With xrul.cant,pretin With xrul.Pret,valin With xrul.cant*xrul.Pret + Replace cantf With cantf+cantin,valf With valf+valin + Replace ldata With xrul.datain,nrdoc With xrul.nnir + + Select cstoc + Locate For pretf=xrul.Pret + Replace cantf With cantf+xrul.cant,valf With valf+xrul.cant*xrul.Pret + Endif + Case xrul.cante#0 + Select fisa_stoc + Locate For pretf=xrul.Pret And idf=lnMax + If !Found() + *DO mesaj WITH 'Stoc negativ','' + Append Blank + Replace idf With lnMax + Endif + + Replace cantout With xrul.cante,pretout With xrul.Pret,valout With xrul.cante*xrul.Pret + Replace cantf With cantf-cantout,pretf With xrul.Pret,valf With valf-valout + Replace ldata With xrul.dataout,nrdoc With xrul.nnir + + Select cstoc + Locate For pretf=xrul.Pret + If !Found() + *DO mesaj WITH 'Stoc negativ','' + Append Blank + Endif + Replace cantf With cantf-xrul.cante,pretf With xrul.Pret,valf With valf-xrul.cante*xrul.Pret + + Endcase + Select cstoc + Delete All For cantf=0 + Release xrul + Select trulaj + Endscan + Endif + If Used('trulaj') + Use In trulaj + Endif + If Used('cstoc') + Use In cstoc + Endif + +Endproc &&fisa_magazie_FIFO + +*----------------------------------------------------------------- + +Procedure list_bon_pe_lucrare + Parameters tnTip + + Private lnCod,lnIdLucrare,lnSuma1,lnSuma2,loact,pnTip,lnLuna1,lnLuna2,lnAn1,lnAn2,pcondper,lnInf ,lnSup,lcCondIdSet + Store "" To loact,pcondper + Store 0 To lnSuma1,lnSuma2,lnIdLucrare,lnInf,lnSup + + oper = Createobject('frm_perioada_luni') + oper._optiongrup1.Value=1 + oper.Show(1) + Release oper + + + If Occurs('_',pcondper)>0 + lpos = At('_',pcondper) + ldata1 = Substr(pcondper,1,lpos-1) + ldata2 = Substr(pcondper,lpos+1) + lcd1 = Substr(ldata1,1,2)+'.'+Substr(ldata1,3,4) + lcd2 = Substr(ldata2,1,2)+'.'+Substr(ldata2,3,4) + pcperioada='De la: '+lcd1+' pana la '+lcd2 + Else + ldata1 = pcondper + pcperioada='LUNA: '+Substr(ldata1,1,2)+'.'+Substr(ldata1,3,4) + ldata2 = ldata1 + Endif + lnLuna1 = Val(Substr(ldata1,1,2)) + lnAn1 = Val(Substr(ldata1,3,4)) + lnLuna2 = Val(Substr(ldata2,1,2)) + lnAn2 = Val(Substr(ldata2,3,4)) + + *pcselect = ['select * from ] + gcS + [.vLucrari_validat where 2=2'] + pcselect = [select * from vnom_Lucrari] + pcfiltru = [1=2] + pcschema = [] + pcorder = [nrord] + pccoloane = [nrord] + pcTitlu = [Lucrare/Comanda] + *pcFiltruOriginal = [validat = 0 and inactiv = 0] + pcFiltruOriginal = [] + locauta = cauta_alfa(pcselect,pcfiltru,pcschema,pcorder,pccoloane,pcTitlu,pcTitlu,'',.T.,pcFiltruOriginal) && 11.07.2007 + + If Empty(locauta.id_lucrare) And Empty(locauta.nrord) + Return + Endif + + lnIdLucrare = locauta.id_lucrare + + If Empty(tnTip) + pnTip = 0 + Else + pnTip = tnTip + Endif + + If Used('crsrul') + Use In crsrul + Endif + + lnInf = lnLuna1+ 12*lnAn1 + lnSup = lnLuna2+ 12*lnAn2 + *!* modificare 29.03.2013 v 2.2.7: id_set <> 268 in lcCondTipGest - sa nu se listeze bonurile importate din xml cu productia de vopsea pentru ca n-ar fi corect sa apara produsul final pe bon + + lcCondIdSet = " and id_set <> 268 " + + lcSql=[select * from ] + gcS + [.vrul where (luna+12*an between ?lnInf and ?lnSup) and cant=0 and cante<>0 ] +; + IIF(Alltrim(locauta.nrord)="",[],[and id_lucrare=?lnIdLucrare ]) +; + [and id_gestiune in (select distinct id_gestiune from ] + gcS + [.vnom_gestiuni where nr_pag ] + ; + IIF(pnTip=6,[=],[<>])+[ 6) ] + gcCondSucursala + lcCondIdSet +; + [order by nrord,nnir,cgest,nresp,sectie,id_rul] + lcCursor=[crsrul] + lnSucces = goExecutor.oexecute(lcSql,lcCursor) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,"Eroare") + Endif + + If Reccount('crsrul')=0 + amessagebox("Nu exista bonuri pe aceasta lucrare !",0+48,"Atentie") + lnSucces = -1 + Endif + + If lnSucces > 0 +*!* modificare ROAPRODUCTIE v 2.0.2 +*!* pcDataOra = get_ora(2) +*!* Select crsrul + If pnTip # 6 +*!* Report Form rap_bon_lucrare To Printer Prompt Preview + goExport.export2frx([crsrul],[rap_bon_lucrare], , , , , , .T.) +*!* modificare ROAPRODUCTIE v 2.0.2 ^ + Endif + Endif + + Release locauta + If Used('crsrul') + Use In crsrul + Endif + +Endproc && list_bon_pe_lucrare + +*------------------------------------------------------------- + +Procedure list_total_NIR + Parameters tnTip + + pnTip = tnTip + + *!* modificare ROAGEST v 2.0.6 + *!* Do Case + *!* Case "-1" $ gcGestPermis + *!* pcselect = [select * from vnom_GESTIUNI] + *!* pcFiltruOrig = [inactiv = 0 and nr_pag = ?pnTip] + *!* pcfiltru = [1=2] + *!* pcschema = [''] + *!* pcorder = [nume_gestiune] + *!* pccoloane = [nume_gestiune,cgest] + *!* pcTitlu = [Alegeti gestiunea] + *!* pcTitluColoane = [Gestiune,Indicativ] + *!* locauta = cauta_alfa(pcselect,pcfiltru,pcschema,pcorder,pccoloane,pcTitlu,pcTitluColoane,"",.T.,pcFiltruOrig) && 11.07.2007 + *!* Otherwise + pcselect = [select * from vnom_GESTIUNI] + pcFiltruOrig = [inactiv = 0 and nr_pag = ?pnTip and id_gestiune in ] + ; + [(select g.id_gestiune from vgest_coresp_grupe_gestiuni g join ] + ; + [vgest_coresp_util_grupe u on g.id_grupe = u.id_grupe and u.id_util = ?gnIdUtil)] + pcfiltru = [1=2] + pcschema = [''] + pcorder = [nume_gestiune] + pccoloane = [nume_gestiune,cgest] + pcTitlu = [Alegeti gestiunea] + pcTitluColoane = [Gestiune,Indicativ] + locauta = cauta_alfa(pcselect,pcfiltru,pcschema,pcorder,pccoloane,pcTitlu,pcTitluColoane,"",.T.,pcFiltruOrig ) && 11.07.2007 + *!* Endcase + *!* modificare ROAGEST v 2.0.6 ^ + If locauta.id_gestiune = 0 And Alltrim(Upper(locauta.nume_gestiune)) # "" + Release locauta + Return + Endif + + pcNumeGestiune = Alltrim(Upper(locauta.nume_gestiune)) + pnIdGest = Iif(pcNumeGestiune # "", locauta.id_gestiune, -1) + + Release locauta + + If pnIdGest = -1 + lcCond = [ and r.id_gestiune in (select distinct id_gestiune from ] + gcS + [.vnom_gestiuni where nr_pag = ?pnTip) and id_gestiune in ] + ; + [(select g.id_gestiune from ] + gcS + [.vgest_coresp_grupe_gestiuni g join ] + ; + gcS + [.vgest_coresp_util_grupe u on g.id_grupe = u.id_grupe and u.id_util = ?gnIdUtil) ] + Else + lcCond = [ and r.id_gestiune = ?pnIdGest ] + Endif + + lcSql = [SELECT r.serie,r.lot,r.codmat,r.denumire,r.um,r.cant,r.pret,r.pretd,r.tva,r.id_gestiune,r.cgest,r.nume_gestiune,r.nnir,r.proc_tva, ]+; + [r.gestionar,r.comisie_receptie1,r.comisie_receptie2,r.comisie_receptie3, ] + ; + [(select NVL(min(a.id_act), -1) from act a where r.cod = a.cod AND r.cont = a.scd and r.an = a.an and r.luna = a.luna and a.sters = 0 ]+; + [and NVL(r.id_sucursala, -99) = NVL(a.id_sucursala, -99)) as id_act, r.nume_val, r.curs ]+ ; + [FROM vrul r ] +; + [WHERE r.cant<>0 AND r.cante=0 and r.an = ?gnAn and r.luna = ?gnLuna ] + lcCond + + *STRTOFILE(lcSql, 'c:\Sql.txt') + lcCursor=[crsrul] + lnSucces = goExecutor.oexecute(lcSql,lcCursor) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,"Eroare") + Endif + + If lnSucces > 0 + If Reccount('crsrul') > 0 + lcListaID = [-1] + Select Distinct id_act From crsrul Into Cursor tActuri + Select tActuri + Scan + lcListaID = lcListaID + [,] + Alltrim(Str(id_act)) + Endscan + *lcListaID = SUBSTR(lcListaID,2) + + lcSql = [SELECT id_act, partc as nume, serie_act, nract, dataact, dataireg, fdoc from vact where id_act in (] + lcListaID +[)] + lcCursor=[crsAct] + lnSucces = goExecutor.oexecute(lcSql,lcCursor) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,"Eroare") + Endif + + Select r.*, a.*, 0 As discount, 0 As tvaDiscount From crsrul r ; + LEFT Join crsact a On r.id_act = a.id_act ; + INTO Cursor crslistare ; + ORDER By r.nnir + +*!* modificare ROAPRODUCTIE v 2.0.2 +*!* pcDataOra = get_ora(2) +*!* Select crslistare + *!* modificare 08.11.2007 +*!* Report Form rap_nir_toate.frx To Printer Prompt Preview + goExport.export2frx([crslistare],[rap_nir_toate], , , , , , .T.) +*!* modificare ROAPRODUCTIE v 2.0.2 ^ + *!* If pnTip = 6 + *!* Report Form rap_nir_toate.frx To Printer Prompt Preview + *!* Else + *!* Report Form rap_nir_toate.frx To Printer Prompt Preview + *!* Endif + *!* modificare 08.11.2007 ^ + Else + amessagebox('Nu a fost inregistrat nici un NIR in luna curenta' + Chr(13) + 'care sa indeplineasca conditiile!',0+48,'Atentie') + Endif + Endif + If Used('crsListare') + Use In crslistare + Endif + If Used('crsAct') + Use In crsact + Endif + If Used('crsRul') + Use In crsrul + Endif + +Endproc && list_total_NIR + +*------------------------------------------------------------- + +Procedure list_total_BON + Parameters tnTip + + pnTip = tnTip + + *!* modificare ROAGEST v 2.0.6 + *!* Do Case + *!* Case "-1" $ gcGestPermis + *!* pcselect = [select * from vnom_GESTIUNI] + *!* pcFiltruOrig = [inactiv = 0 and nr_pag = ?pnTip] + *!* pcfiltru = [1=2] + *!* pcschema = [''] + *!* pcorder = [nume_gestiune] + *!* pccoloane = [nume_gestiune,cgest] + *!* pcTitlu = [Alegeti gestiunea] + *!* pcTitluColoane = [Gestiune,Indicativ] + *!* locauta = cauta_alfa(pcselect,pcfiltru,pcschema,pcorder,pccoloane,pcTitlu,pcTitluColoane,"",.T.,pcFiltruOrig) && 11.07.2007 + *!* Otherwise + pcselect = [select * from vnom_GESTIUNI] + pcFiltruOrig = [inactiv = 0 and nr_pag = ?pnTip and id_gestiune in ] + ; + [(select g.id_gestiune from vgest_coresp_grupe_gestiuni g join ] + ; + [vgest_coresp_util_grupe u on g.id_grupe = u.id_grupe and u.id_util = ?gnIdUtil)] + pcfiltru = [1=2] + pcschema = [] + pcorder = [nume_gestiune] + pccoloane = [nume_gestiune,cgest] + pcTitlu = [Alegeti gestiunea] + pcTitluColoane = [Gestiune,Indicativ] + locauta = cauta_alfa(pcselect,pcfiltru,pcschema,pcorder,pccoloane,pcTitlu,pcTitluColoane,"",.T.,pcFiltruOrig ) && 11.07.2007 + *!* Endcase + *!* modificare ROAGEST v 2.0.6 ^ + If locauta.id_gestiune = 0 And Alltrim(Upper(locauta.nume_gestiune)) # "" + Release locauta + Return + Endif + + pcNumeGestiune = Alltrim(Upper(locauta.nume_gestiune)) + pnIdGest = Iif(pcNumeGestiune # "", locauta.id_gestiune, -1) + + Release locauta + + If pnIdGest = -1 + lcCond = [ and r.id_gestiune in (select distinct id_gestiune from ] + gcS + [.vnom_gestiuni where nr_pag = ?pnTip) and id_gestiune in ] + ; + [(select g.id_gestiune from ] + gcS + [.vgest_coresp_grupe_gestiuni g join ] + ; + gcS + [.vgest_coresp_util_grupe u on g.id_grupe = u.id_grupe and u.id_util = ?gnIdUtil) ] + Else + lcCond = [ and r.id_gestiune = ?pnIdGest ] + Endif + + *!* modificare 29.03.2013 v 2.2.7: id_set <> 268 in lcCondTipGest - sa nu se listeze bonurile importate din xml cu productia de vopsea pentru ca n-ar fi corect sa apara produsul final pe bon + + lcCondIdSet = " and r.id_set <> 268 " + + lcSql = [SELECT r.serie,r.lot,r.codmat,r.denumire,r.um,r.cantE,r.pret,r.id_gestiune,r.cgest,r.nume_gestiune,r.nnir,r.dataact, ]+ ; + [r.gestionar,r.comisie_receptie1,r.comisie_receptie2,r.comisie_receptie3 ] + ; + [FROM vrul r ] +; + [WHERE r.cantE<>0 AND r.cant=0 and r.an = ?gnAn and r.luna = ?gnLuna ] + lcCond + ; + STRTRAN(gcCondSucursala,[id_sucursala],[r.id_sucursala]) + [ ] +lcCondIdSet + ; + [ORDER BY r.nume_gestiune, r.nnir] + + * [group by r.codmat,r.denumire,r.um,r.cant,r.pret,r.id_gestiune,r.cgest,r.nume_gestiune,r.nnir,r.proc_tva ]+ + *STRTOFILE(lcSql, 'c:\Sql.txt') + + If Used('crsRul') + Use In crsrul + Endif + + lcCursor=[crsrul] + lnSucces = goExecutor.oexecute(lcSql,lcCursor) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,"Eroare") + Endif + + If lnSucces > 0 + If Reccount('crsrul') > 0 + *!* modificare ROAPRODUCTIE v 2.0.2 +*!* pcDataOra = get_ora(2) +*!* Select crsrul +*!* Report Form rap_BONURI.frx To Printer Prompt Preview + goExport.export2frx([crsrul],[rap_bonuri], , , , , , .T.) + *!* modificare ROAPRODUCTIE v 2.0.2 ^ + Else + amessagebox('Nu a fost inregistrat nici un NIR in luna curenta' + Chr(13) + 'care sa indeplineasca conditiile!',0+48,'Atentie') + Endif + Endif + + If Used('crsRul') + Use In crsrul + Endif + +Endproc && list_total_BON + +*----------------------------------------------------- +Procedure ver_nir_facturi + Parameters tnFelFact, tlProductie + Local lcSchema, lcSelect, lcOrder, lcFiltru, lcFiltruOriginal, llAfiseaza + Local lcCondProductie, lcCondConturi + lcCondProductie = "" + lcCondConturi = "" + + Private pnCod, pcCont, pcAcont, pnFel + Store '' To pcCont, pcAcont + pnCod = 0 + + Local llProductie + llProductie = tlProductie + + Private poNirBon + Store '' To poNirBon + + If Empty(tnFelFact) + pnFel = 1 && de achizitie + Else + pnFel = tnFelFact + Endif + + + + *!* VERIFICARE FACTURI - NIR-URI + && SELECTEZ DIN ACT FACTURILE DE ACHIZITIE/VANZARE (BAZA, TVA, SUMA - INCLUSIV DISCOUNTUL 667, 767) + lcSchema = [] + *!* modificare ROAPRODUCTIE v 2.0.2 + If tlProductie + lcCondProductie = [a.id_set in (26000,26001)] + ELSE + *!* modificare ROAGEST v 2.0.120 : am adaugat conditia "not like '5%'" + lcCondProductie = [2=2] + lcCondConturi = Iif(pnFel = 1, [ and ((a.scc in ('401', '404', '408', '462') and a.scd not like '5%') OR (a.scd in ('401', '404', '408', '462') and a.scc not like '5%'))], ; + [ and ((a.scc in ('4111','4118','461') and a.scd not like '5%') OR (a.scd in ('4111','4118','461') and a.scc not like '5%'))]) + Endif + *!* lcCondProductie = Iif(tlProductie, [a.id_set in (26000, 26001) ], [2=2 ]) + *!* lcCondConturi = Iif(pnFel = 1, [ and (a.scc in ('401', '404', '408', '462') OR a.scd in ('401', '404', '408', '462'))], ; + *!* [ and (a.scc in ('4111','4118','461') OR a.scd in ('4111','4118','461'))]) + *!* modificare ROAPRODUCTIE v 2.0.2 ^ + TEXT to lcSelect textmerge noshow +select a1.cod, + a1.nract, + a1.serie_act, + a1.dataact, + b.denumire as part, + a1.nnir, + a1.id_sectie, + s.sectie, + a1.suma - a1.tva as baza, + a1.tva, + a1.suma, + a1.disc_baza, + a1.disc_tva, + a1.an, + a1.luna + from (select cod, + nract, + serie_act, + dataact, + an, + luna, + decode(exceptie, 1, id_partd, id_partc) as id_partc, + nnir, + id_sectie, + sum(DECODE(EXCEPTIE, 1, -suma, suma)) as suma, + sum(CASE + WHEN SCD IN ('4426', '4427', '4428') OR + SCC IN ('4426', '4427', '4428') then + DECODE(EXCEPTIE, 1, -suma, suma) + ELSE + 0 + END) as tva, + SUM(case when SCC = '767' THEN SUMA ELSE 0 END) AS disc_baza, + SUM(case when SCC = '767' THEN ROUND(SUMA*(proc_tva-1),<>) ELSE 0 END) AS disc_tva + from act a + LEFT JOIN (SELECT DISTINCT 1 AS EXCEPTIE, + DECODE(DEBIT, 1, CONT_C, CONT) AS ESCD, + DECODE(DEBIT, 1, CONT, CONT_C) AS ESCC + FROM EXCEPTII_IREG + WHERE INVERS = 1) E ON A.SCD = E.ESCD + AND A.SCC = E.ESCC + + WHERE <> <> <> + and sters = 0 + and cod in (select distinct cod + from vrul + where < 0], [cante <> 0])>> + <>) + GROUP BY COD, + SERIE_ACT, + NRACT, + DATAACT, + AN, + LUNA, + NNIR, + ID_SECTIE, + decode(exceptie, 1, id_partd, id_partc)) a1 + left join nom_parteneri b on a1.id_partc = b.id_part + left join nom_sectii s on a1.id_sectie = s.id_sectie + ENDTEXT + *!* WHERE NVL(A1.DATAACT,to_date('1900-01-01','YYYY-MM-DD')) + *!* between to_date('20080101 00:00:00','YYYY-MM-DD HH24:MI:SS') AND + *!* to_date('20080930 23:59:59','YYYY-MM-DD HH24:MI:SS') + + lcgroup = [] + lcFiltruOriginal = [] + lcOrder = [A1.DATAACT,A1.SERIE_ACT,A1.NRACT] + + lcFiltru = [a1.an=?gnAn and a1.luna=?gnLuna] + llModParam = .T. + llAfiseaza = .F. + + gencursor('poNirBon','crsAct', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal) + poNirBon.ca_baza1.afisare() + + && SELECTEZ DIN RUL ARTICOLELE DE PE FACTURA CURENTA DUPA COD + Private poRul + poRul = '' + + + lcSqlRul = [select cod, nnir, id_articol, codmat, denumire, serie, lot, um, pret, tva, proc_tva, pretv, tvav, proc_tvav, ] + ; + IIF(pnFel = 1, [cant], [cante]) + [ as cantitate,] + ; + [(case id_set when 234 then Round((PRET+TVA)*CANT, ?gnPC)- Round(Round((PRET+TVA)*CANT, ?gnPC)*(proc_tva-1)/proc_tva, ?gnPC) ] + ; + [ else ROUND(pret*] + Iif(pnFel = 1, [cant], [cante]) + [,?gnPc) end) as valoare,] + ; + [(case when nr_pag = 6 and proc_tvav <> 0 then + Round(] + Iif(pnFel = 1, [cant], [cante]) + [*(pretv + tvav), ?gnPC) - ] + ; + [ Round(Round(] + Iif(pnFel = 1, [cant], [cante]) + [*(pretv+tvav), ?gnPC)*(PROC_TVAV-1)/PROC_TVAV, ?gnPC) else ] + ; + [ Round(] + Iif(pnFel = 1, [cant], [cante]) + [*pretv, ?gnPC) end) as valoarev, ] + ; + [(case when nr_pag = 6 and proc_tvav <> 0 then Round(] + Iif(pnFel = 1, [cant], [cante]) + [*(pretv + tvav), ?gnPC) else ] + ; + [ Round(] + Iif(pnFel = 1, [cant], [cante]) + [*pretv, ?gnPC) + Round(Round(] + Iif(pnFel = 1, [cant], [cante]) + [*pretv, ?gnPC)*(PROC_TVAV-1), ?gnPC) end) as valoarevtva, ] + ; + [cont, acont from vrul] + +*!* pcfiltru = [ an = ?gnAn and luna = ?gnLuna and cod = ?pnCod ] + pcfiltru = [ 1=2 ] + + pcschema = [] + pcorder = [dataora] + lcFiltruOriginal = Iif(tlProductie,[id_set in (26000,26001) and ],[]) + [id_tip_rulaj = 0] + gcCondSucursala + [ and cod = ?pnCod] + llAfiseaza = .F. + llModParam = .T. + lcGrup = [] + gencursor('poRul','crsRul',lcSqlRul,pcfiltru,pcschema,pcorder,llAfiseaza,lcGrup,llModParam,lcFiltruOriginal) + poRul.ca_baza1.afisare() + + *!* VERIFICARE NIR-URI - FACTURI + && SELECTEZ DIN RUL NIR-URILE GRUPATE DUPA COD, NNIR, SECTIE, NRORD, DATAACT + lcSqlRulCont = [select cod, nnir, sectie, nrord, dataact, ] + ; + [SUM(case id_set when 234 then Round((PRET+TVA)*CANT, ?gnPC)- Round(Round((PRET+TVA)*CANT, ?gnPC)*(proc_tva-1)/proc_tva, ?gnPC) ] + ; + [ else ROUND(pret*] + Iif(pnFel = 1, [cant], [cante]) + [,?gnPc) end) as valoare,] + ; + [SUM(case id_set when 234 then Round(Round((PRET+TVA)*CANT, ?gnPC)*(proc_tva-1)/proc_tva, ?gnPC) ] + ; + [ else Round(ROUND(pret*] + Iif(pnFel = 1, [cant], [cante]) + [,?gnPc)*(proc_tva-1), ?gnPC) end) as valtva,] + ; + [SUM(case id_set when 234 then Round((PRET+TVA)*CANT, ?gnPC) ] + ; + [ else ROUND(pret*] + Iif(pnFel = 1, [cant], [cante]) + [,?gnPc) + Round(Round(] + Iif(pnFel = 1, [cant], [cante]) + [*pret, ?gnPC)*(PROC_TVA-1), ?gnPC) end) as valctva,] + ; + [SUM(case when nr_pag in (6,7) and proc_tvav <> 0 then + Round(] + Iif(pnFel = 1, [cant], [cante]) + [*(pretv + tvav), ?gnPC) - ] + ; + [ Round(Round(] + Iif(pnFel = 1, [cant], [cante]) + [*(pretv+tvav), ?gnPC)*(PROC_TVAV-1)/PROC_TVAV, ?gnPC) else ] + ; + [ Round(] + Iif(pnFel = 1, [cant], [cante]) + [*pretv, ?gnPC) end) as valoarev, ] + ; + [SUM(case when nr_pag in (6,7) and proc_tvav <> 0 then Round(] + Iif(pnFel = 1, [cant], [cante]) + [*(pretv + tvav), ?gnPC) else ] + ; + [ Round(] + Iif(pnFel = 1, [cant], [cante]) + [*pretv, ?gnPC) + Round(Round(] + Iif(pnFel = 1, [cant], [cante]) + [*pretv, ?gnPC)*(PROC_TVAV-1), ?gnPC) end) as valoarevtva ] + ; + [from vrul where an = ?gnAn and luna = ?gnLuna and ]+; + IIF(tlProductie, [(id_set=26000 or id_set=26001) and ],[]) + ; + [id_tip_rulaj = 0 ] + gcCondSucursala + [ and ] + ; + IIF(pnFel = 1, [cant], [cante]) + [ <> 0 ] + ; + [group by cod, nnir, dataact, nrord, sectie ORDER BY DATAACT, NNIR] + + lcCursor = [crsRulCont] + lnSucces = goExecutor.oexecute(lcSqlRulCont,lcCursor) + If lnSucces < 0 + lcmesaj = goExecutor.cEroare + ofrm_er = Createobject('frm_mesaj','Eroare','exclam.ico','Avertizare',lcmesaj) + ofrm_er.Show(1) + Release ofrm_er + Endif + + Private poact + poact = '' + + + && selectez din act factura corespunzatoare codului NIR-ului pe care sunt pozitionat + lcFiltru = [] + lcSchema = [] + lcOrder = [] + lcgroup = [] + llModParam = .T. + lcFiltruOriginal = [] + + TEXT to lcSelect textmerge noshow +select a1.cod, + a1.nract, + a1.serie_act, + a1.dataact, + b.denumire as part, + a1.nnir, + a1.id_sectie, + s.sectie, + a1.suma - a1.tva as baza, + a1.tva, + a1.suma, + a1.an, + a1.luna + from (select cod, + nract, + serie_act, + dataact, + an, + luna, + decode(exceptie, 1, id_partd, id_partc) as id_partc, + nnir, + id_sectie, + sum(DECODE(EXCEPTIE, 1, -suma, suma)) as suma, + sum(CASE + WHEN SCD IN ('4426', '4427', '4428') OR + SCC IN ('4426', '4427', '4428') then + DECODE(EXCEPTIE, 1, -suma, suma) + ELSE + 0 + END) as tva + from act a + LEFT JOIN (SELECT DISTINCT 1 AS EXCEPTIE, + DECODE(DEBIT, 1, CONT_C, CONT) AS ESCD, + DECODE(DEBIT, 1, CONT, CONT_C) AS ESCC + FROM EXCEPTII_IREG + WHERE INVERS = 1) E ON A.SCD = E.ESCD + AND A.SCC = E.ESCC + + WHERE <> <> <> + and sters = 0 + and cod=?pnCod + GROUP BY COD, + SERIE_ACT, + NRACT, + DATAACT, + AN, + LUNA, + NNIR, + ID_SECTIE, + decode(exceptie, 1, id_partd, id_partc)) a1 + left join nom_parteneri b on a1.id_partc = b.id_part + left join nom_sectii s on a1.id_sectie = s.id_sectie + + ENDTEXT + + gencursor('poAct','crsActCont', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal) + poact.ca_baza1.afisare() + + *** vizualizare + Select crsact + Do Form frm_verificare_rulaje With pnFel, llProductie + + If Used('crsAct') + Use In crsact + Endif + + If Used('crsRul') + Use In crsrul + Endif + + If Used('crsActCont') + Use In crsActCont + Endif + + If Used('crsRulCont') + Use In crsRulCont + Endif +Endproc && ver_nir_facturi + +***---------------------------------------------------------------------------------------------------------------------------------- +PROCEDURE listare_centralizator_nir_bon + LPARAMETERS tnTip, tlProductie, tcFiltruData + * tnTip: 1 = NIR (cant <> 0); 2 = BON CONSUM (cante <> 0) + * tlProductie: ROAPRODUCTIE + * tcFiltruData: dataact >= ... and dataact <=...., apelat din ver_nir_facturi > frm_verificare_rulaje.scx + Private poNirBon + Store '' To poNirBon + + Local lcFiltruData, lnTip + lcFiltruData=[] + lnTip = IIF(TYPE('tnTip') = 'N', m.tnTip, 1) + + If !EMPTY(m.tcFiltruData) + lcFiltruData = lcFiltruData + m.tcFiltruData + ENDIF + +**************************** + llUsedAct = USED('crsAct') + IF !m.llUsedAct + + && SELECTEZ DIN ACT FACTURILE DE ACHIZITIE/VANZARE (BAZA, TVA, SUMA - INCLUSIV DISCOUNTUL 667, 767) + lcSchema = [] + If tlProductie + lcCondProductie = [a.id_set in (26000,26001)] + ELSE + lcCondProductie = [2=2] + lcCondConturi = Iif(lnTip = 1, [ and ((a.scc in ('401', '404', '408', '462') and a.scd not like '5%') OR (a.scd in ('401', '404', '408', '462') and a.scc not like '5%'))], ; + [ and ((a.scc in ('4111','4118','461') and a.scd not like '5%') OR (a.scd in ('4111','4118','461') and a.scc not like '5%'))]) + Endif + + TEXT to lcSelect textmerge noshow + select a1.cod, + a1.nract, + a1.serie_act, + a1.dataact, + b.denumire as part, + a1.nnir, + a1.id_sectie, + s.sectie, + a1.suma - a1.tva as baza, + a1.tva, + a1.suma, + a1.disc_baza, + a1.disc_tva, + a1.an, + a1.luna + from (select cod, + nract, + serie_act, + dataact, + an, + luna, + decode(exceptie, 1, id_partd, id_partc) as id_partc, + nnir, + id_sectie, + sum(DECODE(EXCEPTIE, 1, -suma, suma)) as suma, + sum(CASE + WHEN SCD IN ('4426', '4427', '4428') OR + SCC IN ('4426', '4427', '4428') then + DECODE(EXCEPTIE, 1, -suma, suma) + ELSE + 0 + END) as tva, + SUM(case when SCC = '767' THEN SUMA ELSE 0 END) AS disc_baza, + SUM(case when SCC = '767' THEN ROUND(SUMA*(proc_tva-1),<>) ELSE 0 END) AS disc_tva + from act a + LEFT JOIN (SELECT DISTINCT 1 AS EXCEPTIE, + DECODE(DEBIT, 1, CONT_C, CONT) AS ESCD, + DECODE(DEBIT, 1, CONT, CONT_C) AS ESCC + FROM EXCEPTII_IREG + WHERE INVERS = 1) E ON A.SCD = E.ESCD + AND A.SCC = E.ESCC + + WHERE <> <> <> + and sters = 0 + and cod in (select distinct cod + from vrul + where < 0], [cante <> 0])>> + <>) + GROUP BY COD, + SERIE_ACT, + NRACT, + DATAACT, + AN, + LUNA, + NNIR, + ID_SECTIE, + decode(exceptie, 1, id_partd, id_partc)) a1 + left join nom_parteneri b on a1.id_partc = b.id_part + left join nom_sectii s on a1.id_sectie = s.id_sectie + ENDTEXT + *!* WHERE NVL(A1.DATAACT,to_date('1900-01-01','YYYY-MM-DD')) + *!* between to_date('20080101 00:00:00','YYYY-MM-DD HH24:MI:SS') AND + *!* to_date('20080930 23:59:59','YYYY-MM-DD HH24:MI:SS') + + lcgroup = [] + lcFiltruOriginal = [] + lcOrder = [A1.DATAACT,A1.SERIE_ACT,A1.NRACT] + + lcFiltru = [a1.an=?gnAn and a1.luna=?gnLuna] + llModParam = .T. + llAfiseaza = .F. + + gencursor('poNirBon','crsAct', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal) + poNirBon.ca_baza1.afisare() + ENDIF && llUsedAct +**************************** + *!* 11.06.2015 + *!* MARIUS.MUTU + *!* ID_SET = 268: bon consum pe lucrari in curs de executie cu import din fisier (pentru import consum vopsea 301 si creare si consum mix vopsea 345) + *!* nu am nevoie de iesirea de mix 345 pentru ca se dubleaza iesirea de pe bon. Iese deja 301 + + + + *!* 04.02.2009 + && SELECTEZ DIN RUL NIR-URILE GRUPATE DUPA COD, NNIR, SECTIE, NRORD, DATAACT + lcSqlRulListare = [select cod, nnir, sectie, nrord, dataact, ] + ; + [SUM(case id_set when 234 then Round((PRET+TVA)*CANT, ?gnPC)- Round(Round((PRET+TVA)*CANT, ?gnPC)*(proc_tva-1)/proc_tva, ?gnPC) ] + ; + [ else ROUND(pret*] + Iif(lnTip = 1, [cant], [cante]) + [,?gnPc) end) as valoare,] + ; + [SUM(case id_set when 234 then Round(Round((PRET+TVA)*CANT, ?gnPC)*(proc_tva-1)/proc_tva, ?gnPC) ] + ; + [ else Round(ROUND(pret*] + Iif(lnTip = 1, [cant], [cante]) + [,?gnPc)*(proc_tva-1), ?gnPC) end) as valtva,] + ; + [SUM(case id_set when 234 then Round((PRET+TVA)*CANT, ?gnPC) ] + ; + [ else ROUND(pret*] + Iif(lnTip = 1, [cant], [cante]) + [,?gnPc) + Round(Round(] + Iif(lnTip = 1, [cant], [cante]) + [*pret, ?gnPC)*(PROC_TVA-1), ?gnPC) end) as valctva,] + ; + [SUM(case when nr_pag in (6,7) and proc_tvav <> 0 then + Round(] + Iif(lnTip = 1, [cant], [cante]) + [*(pretv + tvav), ?gnPC) - ] + ; + [ Round(Round(] + Iif(lnTip = 1, [cant], [cante]) + [*(pretv+tvav), ?gnPC)*(PROC_TVAV-1)/PROC_TVAV, ?gnPC) else ] + ; + [ Round(] + Iif(lnTip = 1, [cant], [cante]) + [*pretv, ?gnPC) end) as valoarev, ] + ; + [SUM(case when nr_pag in (6,7) and proc_tvav <> 0 then Round(] + Iif(lnTip = 1, [cant], [cante]) + [*(pretv + tvav), ?gnPC) else ] + ; + [ Round(] + Iif(lnTip = 1, [cant], [cante]) + [*pretv, ?gnPC) + Round(Round(] + Iif(lnTip = 1, [cant], [cante]) + [*pretv, ?gnPC)*(PROC_TVAV-1), ?gnPC) end) as valoarevtva ] + ; + [from vrul where ] + Iif(!EMPTY(lcFiltruData),; + [(]+lcFiltruData+[ and ],; + [an = ?gnAn and luna = ?gnLuna and ]) +; + IIF(tlProductie, [(id_set=26000 or id_set=26001) and ],[]) + ; + [id_tip_rulaj = 0 ] + gcCondSucursala + [ and ] + ; + IIF(m.lnTip = 1, [cant], [cante]) + [ <> 0 ] + ; + IIF(m.lnTip = 2, [ and ((id_set = 268 and cont <> '345') or id_set <> 268)], []) + ; + [group by cod, nnir, dataact, nrord, sectie ORDER BY DATAACT, NNIR] + + * ID_SET = 268: bon consum pe lucrari in curs de executie cu import din fisier (pentru import consum vopsea 301 si creare si consum mix vopsea 345) + * nu am nevoie de iesirea de mix 345 pentru ca se dubleaza iesirea de pe bon. Iese deja 301 + + lcCursor = [crsRulListare] + lnSucces = goExecutor.oexecute(lcSqlRulListare,lcCursor) + If lnSucces < 0 + aMESSAGEBOX(goExecutor.cEroare,0+16,'Eroare') + Return + Endif + *!* 04.02.2009 ^ + Use In (SELECT('crsraport')) + + If m.lnTip = 2 && Bonuri + lcRaport=[centralizator_bon.frx] + Select nnir,dataact,nrord,sectie,Sum(valoare) As valoare,Sum(valoarev) As valoarev ; + FROM crsrullistare Group By nnir,dataact,nrord,sectie ; + ORDER By dataact,nnir Into Cursor crsraport + Else + lcRaport=[centralizator_nir.frx] + Use In (SELECT('crstoate')) + + If Type('crsact.part') <> 'U' + Select a.Part As nume,a.serie_act,a.nract,a.dataact,a.baza As valftvacont, a.suma As valctvacont, b.nnir,b.valoare As valftva,b.valtva As valtva,b.valctva As valctva, ; + a.disc_baza as valdiscb, a.disc_tva as valdisct, b.valoarev - b.valoare as valadaos ; + FROM crsact a Left Join crsrullistare b On a.cod=b.cod ; + ORDER By a.dataact,b.nnir Into Cursor crstoate + Else + Select '' As nume,a.serie_act,a.nract,a.dataact,a.baza As valftvacont, a.suma As valctvacont, b.nnir,b.valoare As valftva,b.valtva,b.valctva ; + FROM crsact a Left Join crsrullistare b On a.cod=b.cod ; + ORDER By a.dataact,b.nnir Into Cursor crstoate + Endif + + Select nume,nract,serie_act,dataact,nnir,valftvacont, valctvacont, Sum(valftva) As valftva,Sum(valtva) As valtva,Sum(valctva) As valctva ,SUM(valdiscb) as valdiscb,SUM(valdisct) as valdisct,SUM(valadaos) as valadaos; + FROM crstoate Group By nume,serie_act,nract,dataact,nnir,valftvacont, valctvacont ; + ORDER By dataact,nnir Into Cursor crsraport + + Use In (SELECT('crstoate')) + Endif + + If Reccount('crsraport')>0 + pcDataora=get_ora(2) + Select crsraport + Report Form (lcRaport) To Printer Prompt Preview + Else + AMESSAGEBOX("Nu exista inregistrari pentru listare!",0+48,"Atentie") + Endif + + Use In (SELECT('crsraport')) + IF m.llUsedAct + USE IN (SELECT('crsAct')) + ENDIF + +ENDPROC && listare_centralizator_nir_bon + +***---------------------------------------------------------------------------------------------------------------------------------- +Procedure list_raport_gestiuni + Lparameters tnNr_pag + + LOCAL lcFile + Private pdData1,pdData2,pnId_gestiune, pnNr_pag, pnSoldPrec, pcNumeGest, pcDataOra,pnId_gestiunec,pcNumeGestc,pnGrupezGestc,pcGrupare,pcTitlu,pcSubtitlu,pcSirIdSubgrupArt,pcSirNumeSubgrupArt,pcSirIdArticole,pcSirNumeArticole + Store 0 To pnId_gestiune, pnNr_pag, pnSoldPrec,pnId_gestiunec,pnGrupezGestc + Store '' To pcGrupare,pcSirIdSubgrupArt,pcSirNumeSubgrupArt,pcSirIdArticole,pcSirNumeArticole,pcSubtitlu + lcFile = '' + *!* locauta = caut_gestiune(tnNr_pag, gnIdUtil,.t.) + *!* pnId_gestiune = locauta.id_gestiune + *!* pcNumeGest = locauta.nume_gestiune + *!* IF gnbuton = 2 + *!* RETURN + *!* ENDIF + pdData1 = Date(gnAn, gnLuna, 1) + pdData2 = Gomonth(pdData1,1) - 1 + + *!* loid = Createobject("frm_interval_date") + *!* loid.Show(1) + *!* IF gnbuton = 2 + *!* RETURN + *!* ENDIF + pnNr_pag = tnNr_pag + + loid = Createobject("frm_raport_gestiuni") + loid.Show(1) + If gnbuton = 2 + Return + Endif + *!* pnNr_pag = locauta.nr_pag + If Empty(pdData1) Or Empty(pdData2) Or Empty(pnNr_pag) + Return + Endif + + If Empty(Nvl(pcSirIdSubgrupArt,[])) + pcSirIdSubgrupArt = [Null] + Else + pcSubtitlu = [Subgrupe : ] + pcSirNumeSubgrupArt + CHR(13) + CHR(10) + Endif + + If Empty(Nvl(pcSirIdArticole,[])) + pcSirIdArticole = [Null] + Else + pcSubtitlu = pcSubtitlu + [Articole : ] + pcSirNumeArticole + Endif + + If pnId_gestiunec = 0 + pnId_gestiunec = Null + Endif + + If pnGrupezGestc = 0 + pcGrupare = [EOF()] + Else + pcGrupare = [nume_gestiunec] + Endif + + If pnId_gestiune = 0 + pnId_gestiune = Null + Endif + pcTitlu = [RAPORT GESTIUNE] + lcSql = [{call pack_gest_rapoarte.raport_gestiune(?pnId_gestiune, ?pdData1, ?pdData2, ?pnNr_pag, ?gnIdSucursala,] + ; + [?pnGrupezGestc,?pnId_gestiunec,] + pcSirIdArticole + [,] + pcSirIdSubgrupArt + [,?@pnSoldPrec)}] + lcCursor = 'cRulaje' + If goExecutor.oExecuta(m.lcSql,m.lcCursor) + Select (lcCursor) + goExport.export2frx(lcCursor,[rap_gestiune], , , , , , .T.) + + IF AMESSAGEBOX('Doriti sa salvati raportul in format xls?',4+32,_screen.Caption) = 6 + lcFile = PUTFILE('Raport gestiune','raport_gestiune','xls') + IF !EMPTY(m.lcFile) + + SELECT *, CAST(0 as N(18,4)) as sold FROM cRulaje ; + WHERE .F. ; + INTO CURSOR cRaportXls READWRITE + + INSERT INTO cRaportXls (fdoc, sold) VALUES ('SOLD INITIAL', m.pnSoldPrec) + SELECT cRaportXLS + APPEND from DBF('cRulaje') + + SELECT cRaportXls + GO TOP + lnSold = sold + SCAN + lnSold = NVL(m.lnSold, 0) + NVL(deb, 0) - NVL(cred, 0) + REPLACE sold WITH m.lnSold + ENDSCAN + SELECT cRaportXls + COPY TO (m.lcFile) TYPE XL5 + USE IN (SELECT('cRaportXls')) + open_default_app(m.lcFile) + ENDIF + ENDIF + Use In (SELECT(m.lcCursor)) + Endif + + *!* modificare 18.02.2008 + *!* If Reccount('cRulaje')>0 + *!* pcDataOra = get_ora(2) + *!* Select cRulaje + *!* Report Form rap_gestiune To Printer Prompt Preview + *!* Else + *!* amessagebox("Nu exista inregistrari pentru listare!",48,"Atentie") + *!* Endif + *!* modificare 18.02.2008 ^ + +Endproc && list_raport_gestiuni +***---------------------------------------------------------------------------------------------------------------------------------- +Procedure list_raport_gestiuni_centralizator + *!* modificare v 2.0.81 + Lparameters tnNr_pag + Private pdDataI,pdDataF,pnNr_pag,pnSoldPrec + Store {} To pdDataI,pdDataF + Store 0 To pnSoldPrec + ofrmperioada = Createobject('frm_perioada_zzllaaaa') + ofrmperioada.Show(1) + If gnbuton = 1 + pnNr_pag = tnNr_pag + If !Empty(pdDataI) And !Empty(pdDataF) And !Empty(pnNr_pag) + lcSel = [{call pack_gest_rapoarte.raport_gestiune_centralizator(?pdDataI, ?pdDataF, ?pnNr_pag, ?gnIdSucursala,?@pnSoldPrec)}] + lcCursor = 'cRulaje' + lnSucces = goExecutor.oexecute(lcSel, lcCursor) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,"Eroare") + Else + goExport.export2frx([cRulaje],[rap_gestiune_toate], , , , , , .T.) + Use In cRulaje + Endif + Endif + Endif + *!* modificare v 2.0.81 ^ +Endproc && list_raport_gestiuni_centralizator +***---------------------------------------------------------------------------------------------------------------------------------- +Procedure list_schimbPret + Parameters tnNir, tnTip + +*!* modificare ROAPRODUCTIE v 2.0.2 +*!* Private pcDataOra +*!* pcDataOra = get_ora(2) + + IF TYPE('schimbPret.partener_rezervare') = 'U' + Select *, '' as partener_rezervare ; + From schimbPret ; + Where schimb = 1 ; + Into Cursor cList + ELSE + Select * From schimbPret Where schimb = 1 Into Cursor cList + ENDIF + +*!* Select cList +*!* Keyboard "{ctrl+f10}" +*!* Report Form rap_schimbPret To Printer Prompt Preview + goExport.export2frx([clist],[rap_schimbPret], , , , , , .T.) +*!* modificare ROAPRODUCTIE v 2.0.2 ^ + + If Used("cList") + Use In cList + Endif + Use In (Select("schimbPret")) + +Endproc && list_schimbPret +***---------------------------------------------------------------------------------------------------------------------------------- +***---------------------------------------------------------------------------------------------------------------------------------- +Procedure raport_vanzari + + Private poVanzari, poDetalii + Local llAfiseaza + Store .F. To llAfiseaza + Store '' To poVanzari, poDetalii + If Used('crsVanzari') + Use In crsVanzari + Endif + If Used('crsDetalii') + Use In crsDetalii + Endif + + * pcschema1=['id_pol n(10), nume_lista_preturi c(100), datai d, datas d, id_valuta n(10), nume_val c(10), id_nota N(5), notaContab C(30), utilizator c(100),dataora t'] + pcschema1=[''] + pcselect1=['select * from vvanzari_tot where 2=2'] + pcorder1=[dataora] + pcfiltru1 = [1 = 2] + llAfiseaza = .F. + gencursor('poVanzari','crsVanzari',pcselect1,pcfiltru1,pcschema1,pcorder1,llAfiseaza) + poVanzari.ca_baza1.afisare() + + pcschema1=[''] + pcselect1=['select * from vvanzari_detalii_tot where 2=2'] + pcorder1=[nume_lista_preturi, denumire] + pcfiltru1 = [1 = 2] + llAfiseaza = .F. + gencursor('poDetalii','crsDetalii',pcselect1,pcfiltru1,pcschema1,pcorder1,llAfiseaza) + poDetalii.ca_baza1.afisare() + + lov = Createobject("frm_vanzari") + lov.Show(1) + + Release lov, poVanzari, poDetalii + +Endproc && raport_vanzari +***---------------------------------------------------------------------------------------------------------------------------------- +***----------------------------------------------------------------------------------------------------------- +Procedure listare_imputare + Parameters tnNir + + Private pnOperatie + pnOperatie = 3 + + Private pcTitlu, pcperioada, pcDataOra, pdDataI, pdDataF, pnId_responsabil && pt. raport + Store "" To pcTitlu, pcperioada + pcDataOra = get_ora(2) + Store {//} To pdDataI, pdDataF + pnId_responsabil = 0 + pcTitlu = "IMPUTARE" + + ***------------------------------- + lcSel = [{call pack_gest_rapoarte.fisa_echip_uzat_pred_imputat(?gnAn, ?gnLuna, ?tnNir, ?pdDataI, ?pdDataF, ?pnId_responsabil, ?pnOperatie, ?gnIdSucursala)}] + lcCursor = 'cFisa' + lnSucces = goExecutor.oexecute(lcSel,lcCursor) + + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,"Eroare") + Return + Endif + ***------------------------------- + + Private pcSemnaturi + Store '' To pcSemnaturi + + Local lcRaport + lcRaport = "RAP_ECHIP_IMPUTAT" + + param_listari(lcRaport,,@pcSemnaturi, .T.) +*!* modificare ROAPRODUCTIE v 2.0.2 + IF TYPE('goExport') = 'O' + goExport.export2frx([cFisa],lcRaport, , , , , , .T.) + ELSE + Select cFisa + Report Form &lcRaport To Printer Prompt Preview + ENDIF +*!* modificare ROAPRODUCTIE v 2.0.2 ^ + + If Used("cFisa") + Use In cFisa + Endif + +Endproc && listare_imputare +***----------------------------------------------------------------------------------------------------------- +***----------------------------------------------------------------------------------------------------------- +Procedure listare_casare + Parameters tnNir, tnIdSet + * tnIdSet default 70 +SET STEP ON + Private pnOperatie + pnOperatie = 1 + IF !EMPTY(m.tnIdSet) AND m.tnIdset = 274 + pnOperatie = 4 && iesire din gestiune ob. inv. in folosinta + ENDIF + + *!* 26.01.2011 + PRIVATE pnNnir + pnNnir = tnNir + *!* 26.01.2011 ^ + + Private pcTitlu, pcperioada, pcDataOra, pdDataI, pdDataF, pnId_responsabil && pt. raport + Store "" To pcTitlu, pcperioada + pcDataOra = get_ora(2) + Store {//} To pdDataI, pdDataF + pnId_responsabil = 0 + pcTitlu = "CASARE (din folosinta)" + + ***------------------------------- + lcSel = [{call pack_gest_rapoarte.fisa_echip_uzat_pred_imputat(?gnAn, ?gnLuna, ?tnNir, ?pdDataI, ?pdDataF, ?pnId_responsabil, ?pnOperatie, ?gnIdSucursala)}] + lcCursor = 'cFisa' + lnSucces = goExecutor.oexecute(lcSel,lcCursor) + + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,"Eroare") + Return + Endif + ***------------------------------- + + Private pcSemnaturi + Store '' To pcSemnaturi + + Local lcRaport + lcRaport = 'rap_echip_uzat' + + param_listari(lcRaport,,@pcSemnaturi, .T.) +*!* modificare ROAPRODUCTIE v 2.0.2 + IF TYPE('goExport') = 'O' + goExport.export2frx([cFisa],lcRaport, , , , , , .T.) + ELSE + Select cFisa + Report Form &lcRaport To Printer Prompt Preview + ENDIF +*!* modificare ROAPRODUCTIE v 2.0.2 ^ + If Used("cFisa") + Use In cFisa + Endif + +Endproc && listare_casare +***------------------------------------- inceput list_centr_valoric_subgr --------------------------------- +Procedure list_centr_valoric_subgr + Lparameters tnTip + + Local lnTip, lcRaport + If Type("tnTip")="N" + lnTip=tnTip + Else + lnTip = 1 + Endif + + Local lcSql,lnSucces,lcCursor + Private pcperioada,pdDataI,pdDataF,pcTitlu,pnIdGrupa,pcNumeGrupa,pcListaIdGestiuni,pcSeparator + Store '' To pcNumeGrupa,pcListaIdGestiuni + Store {} To pdDataI,pdDataF + lcCursor = [crscentrsubgr] + pcSeparator = [,] + + ofrmperioada=Createobject('frm_perioada_zzllaaaa') + ofrmperioada.Show(1) + If gnbuton=1 + pcperioada = [Perioada ] + Dtoc(pdDataI) + [ - ] + Dtoc(pdDataF) + Else + Return + Endif + + lcXMLGestiune = caut_gestiune_xml(2) + If !Empty(lcXMLGestiune) And gnbuton = 1 + Xmltocursor(lcXMLGestiune, "crsGestTemp") + If Reccount('crsGestTemp') = 0 + amessagebox('Nu ati selectat nici o gestiune!',0+48,'Inventar') + Return + Endif + pcListaIdGestiuni = cursor2lista("crsGestTemp", "id_gestiune", pcSeparator) + Use In crsGestTemp + Else + Return + Endif + + locauta = caut_grupa_gestiune() + If !Empty(locauta.id_grupe) And gnbuton = 1 + pnIdGrupa = locauta.id_grupe + pcNumeGrupa = locauta.nume_grupa + Else + Return + Endif + + pcTitlu = [CENTRALIZATOR VALORI PE SUBGRUPE DE ARTICOLE] + If Used(lcCursor) + Use In (lcCursor) + Endif + + If lnTip = 1 + + lcSql = [{call pack_gest_rapoarte.centr_valoric_subgr (?pcNumeGrupa,?pnIdGrupa,] + ; + [?pcListaIdGestiuni,?pcSeparator,?pdDataI,?pdDataF,?gnIdSucursala)}] + lcRaport = [rap_gest_val_subgrupe] + Else + lcSql = [{call pack_gest_rapoarte.centr_valoric_subgr_gestc (?pcNumeGrupa,?pnIdGrupa,] + ; + [?pcListaIdGestiuni,?pcSeparator,?pdDataI,?pdDataF,?gnIdSucursala)}] + lcRaport = [rap_gest_val_subgrupe_gestc] + Endif + lnSucces = goExecutor.oexecute(lcSql,lcCursor) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,16,"Eroare") + Else + goExport.export2frx(lcCursor,lcRaport, , , , , , .T. ) + Endif + + If Used(lcCursor) + Use In (lcCursor) + Endif + + Release lcSql,lnSucces,pcperioada,pdDataI,pdDataF,pcTitlu,pnIdGrupa,pcNumeGrupa,pcListaIdGestiuni,pcSeparator +Endproc && list_centr_valoric_subgr +************************************************************************************************************** +Procedure list_centr_intrari +Lparameters tnTipGest +Private pnIdGestiune,pcNumeGestiune,pcDataOra,pnNrRapoarte +Local loCauta,loCauta2 +loCauta = caut_gestiune(tnTipGest,gnIdUtil) +If gnButon = 1 + pnIdGestiune = loCauta.id_gestiune + pcNumeGestiune = loCauta.nume_gestiune + lcSql = [select distinct a.id_subgrupa, b.subgrupa from ] + gcS + [.nom_articole a ] + ; + [left join ] + gcS + [.gest_art_sbgr b on a.id_subgrupa = b.id_subgrupa ] + ; + [where a.id_articol in (select distinct id_articol from ] + gcS + [.rul where sters = 0 ] + ; + [and an = ?gnAn and luna = ?gnLuna ] + gcCondSucursala + [ and cant <> 0 ] + ; + [and id_tip_rulaj = 0 and id_gestiune = ?pnIdGestiune) order by subgrupa] + lnSucces = goExecutor.oExecute(lcSql,[crssubgrupe]) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,64,"Eroare") + Else + lcSql = [{call pack_gest_rapoarte.centr_intrari(?pnIdGestiune,?gnIdSucursala,?gnLuna,?gnAn)}] + lnSucces = goExecutor.oExecute(lcSql,[crsraport]) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,64,"Eroare") + Else + If Reccount('crsraport') > 0 + pcDataOra = get_ora(2) + Select subgrupa From crssubgrupe Into Array laNumeColoane + If Alen(laNumeColoane) >= 10 + pnNrRapoarte = 2 + Local ox As ReportListener + ox = Createobject('ReportListener') + ox.DynamicLineHeight = .F. + ox.ListenerType = 1 + goExport.export2frx([crsraport],[rap_centralizator_intrari],.F.,2,[],[NOPAGEEJECT],ox) + goExport.export2frx([crsraport],[rap_centralizator_intrari2],.F.,2,[],[],ox) + Release ox + Else + pnNrRapoarte = 1 + goExport.export2frx([crsraport],[rap_centralizator_intrari], , , , , , .T.) + Endif + Release laNumeColoane + Else + amessagebox("Nu exista inregistrari pentru listare!",48,"Atentie") + Endif + Endif + If Used('crsraport') + Use In crsraport + Endif + Endif + If Used('crssubgrupe') + Use In crssubgrupe + Endif +Endif +Release pnIdGestiune,pcNumeGestiune,pcDataOra,pnNrRapoarte,loCauta,loCauta2 +Endproc && list_centr_intrari +************************************************************************************************************** +Procedure list_centr_iesiri +Lparameters tnTipGest,tnTipCentralizator +*!* tnTipCentralizator +*!* = 1 - transferuri +*!* = 2 - facturi clienti +*!* = 3 - protocol si sponsorizari +Private pnIdGestiune,pcNumeGestiune,pcDataOra,pnNrRapoarte,pnTipCentralizator,pcTitlu,pnIdGrupaGest,pcNumeGrupaGest,pnIdGestiune,pcNumeGestiune,pdDataI,pdDataF +Store {} To pdDataI,pdDataF +Local lofrmperioada,loCauta,lcSql,lnSucces +lofrmperioada = Createobject('frm_perioada_zzllaaaa') +lofrmperioada.Show(1) +If !Empty(Nvl(pdDataI,{})) And !Empty(Nvl(pdDataF,{})) + pnTipCentralizator = tnTipCentralizator + pnIdGrupaGest = Null + pcNumeGrupaGest = [] + Local loCauta,loCauta2,lcSql + loCauta = caut_gestiune(tnTipGest,gnIdUtil) + If gnButon = 1 + pnIdGestiune = loCauta.id_gestiune + pcNumeGestiune = loCauta.nume_gestiune + Do Case + Case pnTipCentralizator = 1 + loCauta = caut_grupa_gestiune() + If gnButon = 1 + pnIdGrupaGest = loCauta.id_grupe + pcNumeGrupaGest = loCauta.nume_grupa + Endif + pcTitlu = [CENTRALIZATOR IESIRI (TRANSFERURI CATRE ] + Iif(!Empty(pcNumeGrupaGest),[GRUPA ] + Alltrim(pcNumeGrupaGest),[GESTIUNI LA P.V.]) + [) ] + ; + [DIN GESTIUNEA ] + Alltrim(pcNumeGestiune) + [ ( ] + Alltrim(Dtoc(pdDataI) + [ - ] + Dtoc(pdDataF)) + [ )] + Case pnTipCentralizator = 2 + pcTitlu = [CENTRALIZATOR IESIRI (FACTURI) DIN GESTIUNEA ] + Alltrim(pcNumeGestiune) + [ ( ] + Alltrim(Dtoc(pdDataI) + [ - ] + Dtoc(pdDataF)) + [ )] + Case pnTipCentralizator = 3 + pcTitlu = [CENTRALIZATOR IESIRI (PROTOCOL, SPONSORIZARI) DIN GESTIUNEA ] + Alltrim(pcNumeGestiune) + [ ( ] + Alltrim(Dtoc(pdDataI) + [ - ] + Dtoc(pdDataF)) + [ )] + Endcase + If aMessagebox("Doriti ca raportul sa cuprinda si statistica privind stocul ( initial, total intrari , total iesiri, final ) ?",4+32,"Statistici stoc")=6 + _Screen.MousePointer = 11 + lcSql = [{call pack_gest_rapoarte.centralizator_stoc(?pnIdGestiune,?pdDataI,?pdDataF,?gnIdSucursala)}] + lnSucces = goExecutor.oExecute(lcSql,[crsStatisticiStoc]) + _Screen.MousePointer = 0 + If lnSucces < 0 + amessagebox(goExecutor.cEroare,64,"Eroare") + Endif + Endif + _Screen.MousePointer = 11 + lcSql = [{call pack_gest_rapoarte.cursor_subgrupe(?pnIdGestiune,?gnIdSucursala,?pdDataI,?pdDataF,?pnTipCentralizator,?pnIdGrupaGest)}] + lnSucces = goExecutor.oExecute(lcSql,[crssubgrupe]) + _Screen.MousePointer = 0 + If lnSucces < 0 + amessagebox(goExecutor.cEroare,64,"Eroare") + Else + _Screen.MousePointer = 11 + lcSql = [{call pack_gest_rapoarte.centr_iesiri(?pnIdGestiune,?gnIdSucursala,?pdDataI,?pdDataF,?pnTipCentralizator,?pnIdGrupaGest)}] + lnSucces = goExecutor.oExecute(lcSql,[crsraport]) + _Screen.MousePointer = 0 + If lnSucces < 0 + amessagebox(goExecutor.cEroare,64,"Eroare") + Else + If Reccount('crsraport') > 0 + pcDataOra = get_ora(2) + Select subgrupa From crssubgrupe Into Array laNumeColoane + If Alen(laNumeColoane) >= 11 + pnNrRapoarte = 2 + Local ox As ReportListener + ox = Createobject('ReportListener') + ox.DynamicLineHeight = .F. + ox.ListenerType = 1 + goExport.export2frx([crsraport],[rap_centralizator_iesiri],.F.,2,[],[NOPAGEEJECT],ox) + goExport.export2frx([crsraport],[rap_centralizator_iesiri2],.F.,2,[],[],ox) + Release ox + Else + pnNrRapoarte = 1 + goExport.export2frx([crsraport],[rap_centralizator_iesiri], , , , , , .T.) + Endif + Release laNumeColoane + Else + amessagebox("Nu exista inregistrari pentru listare!",48,"Atentie") + Endif + Endif + If Used('crsraport') + Use In crsraport + Endif + Endif + If Used('crssubgrupe') + Use In crssubgrupe + EndIf + If Used('crsStatisticiStoc') + Use in crsStatisticiStoc + EndIf + Endif +Endif +Release pnIdGestiune,pcNumeGestiune,pcDataOra,pnNrRapoarte,loCauta,lcSql,pcTitlu,pnIdGrupaGest,pcNumeGrupaGest,pdDataI,pdDataF,lofrmperioada +Endproc && list_centr_iesiri +************************************************************************************************************** \ No newline at end of file diff --git a/COMUN/programe/oproceduri_maintenance.prg b/COMUN/programe/oproceduri_maintenance.prg new file mode 100644 index 0000000..a93e726 --- /dev/null +++ b/COMUN/programe/oproceduri_maintenance.prg @@ -0,0 +1,295 @@ + +gnHandle = SQLCONNECT('ROA_ARGENTA', 'ARGENTA', '123') + +SET PROCEDURE TO D:\CONTAFIN_ORACLE\COMUN\PROGRAME\OPROCEDURI_COMUNE.PRG ADDITIVE + +PRIVATE goExecutor, gcS +gcS = 'ARGENTA' +goExecutor = CREATEOBJECT("oExecutor") +goExecutor.nHandle = gnHandle + +LOCAL lcEroare, lnAn1, lnLuna1, lnAn2, lnLuna2 +LOCAL lnRecno, i, lnSucces + +lcEroare = '' +lnAn1 = 1995 +lnLuna1 = 1 +lnAn2 = 2006 +lnLuna2 = 2 + +SELECT crsPartenerDiferente +lnRecno = RECCOUNT() +i = 0 +SCAN + SCATTER NAME loPartener + i = i + 1 + WAIT WINDOW TRANSFORM(I) + '/' + TRANSFORM(LNRECNO) NOWAIT +* lcEroare = modifica_id_partener(loPartener.id_part1, loPartener.id_part, lnAn1, lnLuna1, lnAn2, lnLuna2) + lcSql = [update nom_parteneri set inactiv = 1 where id_part = ] + TRANSFORM(loPartener.id_part1) + lnSucces = goExecutor.oExecute(lcSql) + IF lnSucces < 0 + lcEroare = goExecutor.cEroare + ENDIF + + IF !EMPTY(lcEroare) + aMESSAGEBOX(lcEroare) + EXIT + ENDIF +ENDSCAN + + +IF !EMPTY(lcEroare) + aMESSAGEBOX(lcEroare) +ENDIF + +SQLDISCONNECT(0) + +*** =================================================================================== *** +*** MODIFICARE ID_PARTENER IN CAZUL IN CARE EXISTA ACELASI PARTENER DE MAI MULTE ORI *** +*** IN NOMENCLATORUL DE PARTENERI *** +*** MARIUS.MUTU *** +*** 15.02.2006 *** +*** =================================================================================== *** +PROCEDURE modifica_id_partener + LPARAMETERS tnIdPartProst, tnIdPartBun, tnAn1, tnLuna1, tnAn2, tnLuna2 + + + LOCAL lnAn1, lnLuna1, lnAn2, lnLuna2, lnSucces, lnSucces2, lcEroare + LOCAL lcSql, lcCursor + PRIVATE lnIdPartProst, tnIdPartBun, lnInit, lnFinal + + lcEroare = '' + + lnSucces = 1 + lnSucces2 = 1 + + lnIdPartProst = 0 + lnIdPartBun = 0 + lnInit = 0 + lnFinal = 0 + + IF EMPTY(tnIdPartProst) OR EMPTY(tnIdPartBun) OR EMPTY(tnAn1) OR EMPTY(tnLuna1) OR EMPTY(tnAn2) OR EMPTY(tnLuna2) + lcEroare = 'Completati parametrii' + lnSucces = -1 + ENDIF + + IF lnSucces > 0 + lnIdPartProst = tnIdPartProst + lnIdPartBun = tnIdPartBun + + lnInit = tnAn1 * 12 + tnLuna1 + lnFinal = tnAn2 * 12 + tnLuna2 + IF lnInit > lnFinal + lcEroare = 'Luna de sfarsit trebuie sa fie mai mare sau egala decat luna de inceput' + lnSucces = -1 + ENDIF + ENDIF + + IF lnSucces > 0 + +&& TRANZACTIE MANUALA + lnSucces = SQLSETPROP(gnhandle,"Transactions",2) + IF lnSucces < 0 + lcEroare = goExecutor.cEroare + ENDIF + ENDIF + +&& ACT : ID_PARTD + IF lnSucces > 0 + lcSql = [update ] + gcs + [.act set id_partd = ?lnIdPartBun where id_partd = ?lnIdPartProst and an*12+luna between ?lnInit and ?lnFinal] + lnSucces = goExecutor.oExecute(lcSql) + IF lnSucces < 0 + lcEroare = goExecutor.cEroare + ENDIF + ENDIF + +&& ACT : ID_PARTC + IF lnSucces > 0 + lcSql = [update ] + gcs + [.act set id_partc = ?lnIdPartBun where id_partc = ?lnIdPartProst and an*12+luna between ?lnInit and ?lnFinal] + lnSucces = goExecutor.oExecute(lcSql) + IF lnSucces < 0 + lcEroare = goExecutor.cEroare + ENDIF + ENDIF + +&& IREG_PARTENERI + IF lnSucces > 0 + lcSql = [update ] + gcs + [.ireg_parteneri set id_part = ?lnIdPartBun where id_part = ?lnIdPartProst and an*12+luna between ?lnInit and ?lnFinal] + lnSucces = goExecutor.oExecute(lcSql) + IF lnSucces < 0 + lcEroare = goExecutor.cEroare + ENDIF + ENDIF + + +&& BALANTA PARTENERI + IF lnSucces > 0 + FOR I = lnInit TO lnFinal + lnLuna=MOD(I,12) + lnAn=INT(I/12) + IF lnLuna=0 + lnLuna=12 + lnAn=lnAn-1 + ENDIF + + + lcSql = [SELECT ?lnIdPartBun as id_part, an, luna, NVL(cont,' ') as cont, NVL(acont,' ') as acont, id_valuta, ] +; + [sum(precdeb1) as precdeb1,sum(preccred1) as preccred1,sum(precdeb) as precdeb,sum(preccred) as preccred,] +; + [sum(precvaldeb1) as precvaldeb1,sum(precvalcred1) as precvalcred1,sum(precvaldeb) as precvaldeb,sum(precvalcred) as precvalcred,] +; + [sum(debit) as debit,sum(credit) as credit,sum(valdebit) as valdebit,sum(valcredit) as valcredit ]+; + [ FROM ] + gcs + [.BALANTA_PARTENERI WHERE ID_PART IN (?lnIdPartBun,?lnIdPartProst) AND ] +; + [ AN = ?lnAn and luna = ?lnLuna ] + ; + [ GROUP BY AN, LUNA, CONT, ACONT, ID_VALUTA ] + lcCursor = [crsBalanta] + + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + IF lnSucces < 0 + lcEroare = goExecutor.cEroare + EXIT + ENDIF + + IF lnSucces > 0 + lcDel = [DELETE FROM ] + gcs + [.BALANTA_PARTENERI WHERE ID_PART IN (?lnIdPartBun,?lnIdPartProst) AND ] +; + [ AN = ?lnAn and luna = ?lnLuna] + lnSucces = goExecutor.oExecute(lcDel) + IF lnSucces < 0 + lcEroare = goExecutor.cEroare + EXIT + ENDIF + ENDIF + + IF lnSucces > 0 + SELECT crsBalanta + SCAN + SCATTER NAME loB + loB.CONT = ALLTRIM(loB.CONT) + loB.acont = ALLTRIM(loB.acont) + lcIns = [INSERT INTO ] + gcs + [.BALANTA_PARTENERI ] + ; + [(an,luna,cont,acont,id_part,id_valuta,] + ; + [precdeb1,preccred1,precdeb,preccred,] + ; + [precvaldeb1,precvalcred1,precvaldeb,precvalcred,] + ; + [debit,credit,valdebit,valcredit) VALUES ] + ; + [(?loB.an,?loB.luna,?loB.cont,?loB.acont,?loB.id_part,?loB.id_valuta,] + ; + [?loB.precdeb1,?loB.preccred1,?loB.precdeb,?loB.preccred,] + ; + [?loB.precvaldeb1,?loB.precvalcred1,?loB.precvaldeb,?loB.precvalcred,] + ; + [?loB.debit,?loB.credit,?loB.valdebit,?loB.valcredit) ] + lnSucces = goExecutor.oExecute(lcIns) + IF lnSucces < 0 + lcEroare = goExecutor.cEroare + EXIT + ENDIF + ENDSCAN + ENDIF + IF USED('crsBalanta') + USE IN crsBalanta + ENDIF + + ENDFOR + ENDIF + +&& MASINI_CLIENTI + IF lnSucces > 0 + lcSql = [update ] + gcs + [.dev_masiniclienti set id_partener = ?lnIdPartBun where id_partener = ?lnIdPartProst] + lnSucces = goExecutor.oExecute(lcSql) + IF lnSucces < 0 + lcEroare = goExecutor.cEroare + ENDIF + ENDIF + +&& CON_LUCRARI + IF lnSucces > 0 + lcSql = [update ] + gcs + [.con_lucrari set id_part = ?lnIdPartBun where id_part = ?lnIdPartProst] + lnSucces = goExecutor.oExecute(lcSql) + IF lnSucces < 0 + lcEroare = goExecutor.cEroare + ENDIF + ENDIF + + +&& RUL - id_responsabil + IF lnSucces > 0 + lcSql = [update ] + gcs + [.rul set id_responsabil = ?lnIdPartBun where id_responsabil = ?lnIdPartProst] + lnSucces = goExecutor.oExecute(lcSql) + IF lnSucces < 0 + lcEroare = goExecutor.cEroare + ENDIF + ENDIF + +&& RUL - id_responsabilc + IF lnSucces > 0 + lcSql = [update ] + gcs + [.rul set id_responsabilc = ?lnIdPartBun where id_responsabilc = ?lnIdPartProst] + lnSucces = goExecutor.oExecute(lcSql) + IF lnSucces < 0 + lcEroare = goExecutor.cEroare + ENDIF + ENDIF + +&& RUL_OBINV + IF lnSucces > 0 + lcSql = [update ] + gcs + [.rul_obinv set id_responsabil = ?lnIdPartBun where id_responsabil = ?lnIdPartProst] + lnSucces = goExecutor.oExecute(lcSql) + IF lnSucces < 0 + lcEroare = goExecutor.cEroare + ENDIF + ENDIF + +&& STOC_OBINV + IF lnSucces > 0 + lcSql = [update ] + gcs + [.stoc_obinv set id_responsabil = ?lnIdPartBun where id_responsabil = ?lnIdPartProst] + lnSucces = goExecutor.oExecute(lcSql) + IF lnSucces < 0 + lcEroare = goExecutor.cEroare + ENDIF + ENDIF + +&& CON_CONTRACTE + IF lnSucces > 0 + lcSql = [update ] + gcs + [.con_contracte set id_part = ?lnIdPartBun where id_part = ?lnIdPartProst] + lnSucces = goExecutor.oExecute(lcSql) + IF lnSucces < 0 + lcEroare = goExecutor.cEroare + ENDIF + ENDIF + + IF lnSucces > 0 + lnSucces2 = goExecutor.oExecute('COMMIT') + IF lnSucces2 < 0 + lcEroare = goExecutor.cEroare + ENDIF + ELSE + lnSucces2 = goExecutor.oExecute('ROLLBACK') + IF lnSucces2 < 0 + lcEroare = goExecutor.cEroare + ENDIF + ENDIF + +&& inactiv + IF lnSucces > 0 + lcSql = [update ] + gcs + [.nom_parteneri set inactiv = 1 where id_part = ?lnIdPartProst] + lnSucces = goExecutor.oExecute(lcSql) + IF lnSucces < 0 + lcEroare = goExecutor.cEroare + ENDIF + ENDIF + + IF lnSucces > 0 + lnSucces2 = goExecutor.oExecute('COMMIT') + IF lnSucces2 < 0 + lcEroare = goExecutor.cEroare + ENDIF + ELSE + lnSucces2 = goExecutor.oExecute('ROLLBACK') + IF lnSucces2 < 0 + lcEroare = goExecutor.cEroare + ENDIF + ENDIF + +&& TRANZACTIE AUTOMATA + lnSucces = SQLSETPROP(gnhandle,"Transactions",1) + IF lnSucces < 0 + lcEroare = goExecutor.cEroare + ENDIF + + RETURN lcEroare + +ENDPROC && modifica_id_partener diff --git a/COMUN/programe/oproceduri_manager.prg b/COMUN/programe/oproceduri_manager.prg new file mode 100644 index 0000000..51f2d0c --- /dev/null +++ b/COMUN/programe/oproceduri_manager.prg @@ -0,0 +1,115 @@ +Procedure make_cFCentre + +*!* Create Cursor cFCentre (id_centru I(4) Null, csectie C(2) Null, centru C(30) Null) +*!* Insert Into cFCentre Values (0, '00','') + +Create Cursor cFCentre (id_sectie I(4) Null, sectie C(30) Null) +Insert Into cFCentre Values (0, '') + +Private poCentre, pcschema1, pcselect1 +Store '' To poCentre +pcschema1 = [''] + +*!* If gnId_centre_sectie = 1 Then +*!* pcselect1 = ['select ce.id_centru, ce.csectie, ce.sectie as centru ]+; +*!* [from mg_nom_centre_sectie ce ]+; +*!* [where 1=2'] +*!* pcorder1 = [ce.sectie] +*!* pcfiltru1 = [ce.sectie is not null and ce.societate = 0] +*!* Else +*!* pcselect1 = ['select ce.id_centru, ce.csectie, ce.centru ]+; +*!* [from mg_nom_centre_profit ce ]+; +*!* [where 1=2'] +*!* pcorder1 = [ce.centru] +*!* pcfiltru1 = [ce.centru is not null and ce.societate = 0] +*!* Endif + +Local lcSchema, lcSelect, lcOrder, lcgroup, lcFiltru, lcFiltruOriginal, llModParam, llAfiseaza + +lcSchema = [id_sectie N(5), sectie C(30)] +lcSelect = [select id_sectie, sectie from vnom_sectii] +lcOrder = [sectie] +lcgroup = [] +lcFiltru = [2=2] +llModParam = .T. +llAfiseaza = .F. + +gencursor('pocentre','cc', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal) +poCentre.ca_baza1.afisare() + +Select cFCentre +Append From Dbf("cc") +If Used('cc') + Use In cc +Endif + +Release poCentre + +Select cFCentre +Go Top + +Endproc && make_cFCentre +***--------------------------------------------------------------------------------------------- +Procedure make_cTipuri_seturi +Create Cursor cTipuri_seturi (id_tip_set N(5), nume_tip_set C(30)) +Insert Into cTipuri_seturi Values (0, '') + +Private poTipuri_seturi, pcschema1, pcselect1 +Store '' To poTipuri_seturi +pcschema1 = [''] +pcselect1 = ['select ts.id_tip_set, ts.nume_tip_set ]+; + [from mg_tipuri_seturi ts ]+; + [where 1=2'] +pcorder1 = [ts.nume_tip_set] +pcfiltru1 = [2=2] +llAfiseaza = .F. +gencursor('poTipuri_seturi','cc',pcselect1,pcfiltru1,pcschema1,pcorder1,llAfiseaza) +poTipuri_seturi.ca_baza1.afisare() + +Select cTipuri_seturi +Append From Dbf("cc") + +Release poTipuri_seturi + +Select cTipuri_seturi +Go Top + +Endproc && make_cTipuri_seturi +***--------------------------------------------------------------------------------------------- +Procedure make_venChelt +Create Cursor cVenChelt (id_venchelt I(4) Null, explicatie C(200) Null) +Insert Into cVenChelt Values (0, '') +Insert Into cVenChelt Values (99999, 'FARA TIP CHELTUIALA') + +Private poVenChelt, pcschema1, pcselect1 +Store '' To poVenChelt + +Local lcSchema, lcSelect, lcOrder, lcgroup, lcFiltru, lcFiltruOriginal, llModParam, llAfiseaza + + +lcSchema = [id_venchelt N(5), explicatie C(30)] +lcSelect = [select id_venchelt, explicatie from vnom_venchel] +lcOrder = [explicatie] +lcgroup = [] +lcFiltru = [2=2] +llModParam = .T. +llAfiseaza = .F. + +gencursor('poVenChelt','cc', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal) +poVenChelt.ca_baza1.afisare() + + +Select cVenChelt +Append From Dbf("cc") +If Used('cc') + Use In cc +Endif + +Release poVenChelt + +Select cVenChelt +Go Top + +Endproc && make_venChelt +***--------------------------------------------------------------------------------------------- + diff --git a/COMUN/programe/oproceduri_obinv.prg b/COMUN/programe/oproceduri_obinv.prg new file mode 100644 index 0000000..c121a28 --- /dev/null +++ b/COMUN/programe/oproceduri_obinv.prg @@ -0,0 +1,176 @@ +***----------------------------------------------------------------------------------------------------------- +PROCEDURE fisa_lichidare + + PRIVATE pcTitlu &&, pcDataOra + STORE "" TO pcTitlu &&, pcDataOra + LOCAL lcOrder, lcOrderColumn, loColumnSort + lcOrder = "" + lcOrderColumn = "" + + PRIVATE pnId_responsabil + STORE 0 TO pnId_responsabil + + loResp = caut_responsabil(.T.) + pnId_responsabil = loResp.id_responsabil + + + lcTitlu = [FISA DE LICHIDARE] + + pcTitlu = ceretitlu_rap([Titlul raportului],lcTitlu) +*!* pcDataOra = get_ora(2) + + pcGrupGest = [nresp] + pcGrupCont = [EOF()] + pcGrupAcont = [EOF()] + pcHeaderGrup = [Responsabil ] + + lcOrder = "nresp,denumire,codmat" + + lcSql = [] + * SELECT * from crsStocuri INTO CURSOR crs_rap ORDER BY &lcOrder + ***------------------------------- + lcSel = [{call pack_gest_rapoarte.fisa_ob_inventar_resp_stoc(?gnAn, ?gnLuna, ?pnId_responsabil,?gnIdSucursala)}] + lcCursor = 'cFisa' + lnSucces = goExecutor.oExecute(lcSel,lcCursor) + + IF lnSucces < 0 + AMESSAGEBOX('Call pack_gest_rapoarte.fisa_ob_inventar_resp' + CHR(13) + goExecutor.cEroare,0+16,"Eroare") + RETURN + ENDIF + ***------------------------------- + ** raportul nu calcula bine totalurile + SELECT *, ; + IIF(dnf<>0,(dnf-(dns_luni-IIF(!EMPTY(datain) AND !ISNULL(datain),((gnAn*12+gnLuna)-(YEAR(datain)*12+MONTH(datain))),0)))/dnf*100,0000) AS uzura ; + FROM cFisa ; + INTO CURSOR sel1 READWRITE + + IF USED('cFisa') + USE IN cFisa + ENDIF + + SELECT *, ; + IIF(uzura <= 100,ROUND((cants+CANT-CANTE)*PRET - (cants+CANT-CANTE)*PRET* uzura/100,gnPC),0) AS val_ramas ; + FROM sel1 ; + INTO CURSOR cFisaLic + + IF USED('sel1') + USE IN sel1 + ENDIF + + +*!* SELECT cFisaLic +*!* REPORT FORMAT fisa_lichidare.FRX TO PRINTER PROMPT NOCONSOLE PREVIEW + goExport.export2frx([cFisaLic],[fisa_lichidare]) + + IF USED('cFisaLic') + USE IN cFisaLic + ENDIF + + +ENDPROC && fisa_lichidare +***----------------------------------------------------------------------------------------------------------- +PROCEDURE fisa_echip_uzat_pred_imputat +*!* comentarii : 19.02.2008 + PARAMETERS tnOperatie + + && tnOperatie: 1 - uzat; 2 - predat + + PRIVATE pnOperatie + pnOperatie = tnOperatie + + LOCAL lcRaport + lcRaport = [] + + PRIVATE pcTitlu, pcPerioada && , pcDataOra && pt. raport + STORE "" TO pcTitlu +*!* pcDataOra = get_ora(2) + + PRIVATE pnId_responsabil + STORE 0 TO pnId_responsabil + + loResp = caut_responsabil(.T.) + pnId_responsabil = loResp.id_responsabil + + ***------------------------------- + PRIVATE pdDataI, pdDataF + STORE {} TO pdDataI, pdDataF + + loLuna = get_oluna(gnAn, gnLuna) + lcLuna1 = PADL(loLuna.lunamin,2,'0') + PADL(loLuna.anmin,4,'0') + lcLuna2 = PADL(loLuna.lunamax,2,'0') + PADL(loLuna.anmax,4,'0') + + LOCAL lcData1 + lcData1 = '01/'+PADL(loLuna.lunamin,2,'0')+'/'+ALLTRIM(STR(loLuna.anmin)) + pdDataI = CTOD(lcData1) + pdDataF = ULTIMAZI(STR(loLuna.anmax), STR(loLuna.lunamax)) + + + ofrmperioada = CREATEOBJECT('frm_perioada_zzllaaaa') + ofrmperioada.pdDataI = pdDataI + ofrmperioada.pdDataF = pdDataF + ofrmperioada.SHOW(1) + IF gnButon=2 + RETURN + ENDIF + + pcPerioada = DTOC(pdDataI) + ' - ' + DTOC(pdDataF) + + PRIVATE pnNnir + pnNnir = 0 + + ***------------------------------- + lcSel = [{call pack_gest_rapoarte.fisa_echip_uzat_pred_imputat(?gnAn, ?gnLuna, ?pnNnir, ?pdDataI, ?pdDataF, ?pnId_responsabil, ?pnOperatie, ?gnIdSucursala)}] + lcCursor = 'cFisa' + lnSucces = goExecutor.oExecute(lcSel,lcCursor) + + IF lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare,0+16,"Eroare") + RETURN + ENDIF + ***------------------------------- +*!* DO CASE +*!* CASE pnOperatie = 1 +*!* pcTitlu = "FISA ECHIPAMENT UZAT" +*!* CASE pnOperatie = 2 +*!* pcTitlu = "FISA ECHIPAMENT PREDAT" +*!* CASE pnOperatie = 3 +*!* pcTitlu = "FISA ECHIPAMENT IMPUTAT" +*!* ENDCASE + + PRIVATE pcSemnaturi + STORE '' TO pcSemnaturi + + DO CASE + CASE pnOperatie = 1 + pcTitlu = [FISA ECHIPAMENT UZAT] + lcRaport = [rap_echip_uzat] + param_listari(lcRaport,,@pcSemnaturi) +*!* SELECT cFisa +*!* REPORT FORM rap_echip_uzat TO PRINTER PROMPT PREVIEW + CASE pnOperatie = 2 + pcTitlu = [FISA ECHIPAMENT PREDAT] + lcRaport = [rap_echip_predat] + param_listari(lcRaport,,@pcSemnaturi, .T.) +*!* SELECT cFisa +*!* REPORT FORM rap_echip_predat TO PRINTER PROMPT PREVIEW + CASE pnOperatie = 3 + pcTitlu = [FISA ECHIPAMENT IMPUTAT] + lcRaport = [rap_echip_imputat] + param_listari(lcRaport,,@pcSemnaturi, .T.) +*!* SELECT cFisa +*!* REPORT FORM rap_echip_imputat TO PRINTER PROMPT PREVIEW + ENDCASE + + goExport.export2frx([cFisa],lcRaport) + + IF USED("cFisa") + USE IN cFisa + ENDIF + + +ENDPROC && fisa_echip_uzat_pred_imputat +***----------------------------------------------------------------------------------------------------------- + + + + diff --git a/COMUN/programe/oproceduri_parteneri.prg b/COMUN/programe/oproceduri_parteneri.prg new file mode 100644 index 0000000..5a04e61 --- /dev/null +++ b/COMUN/programe/oproceduri_parteneri.prg @@ -0,0 +1,276 @@ +************************************************************************************************************************* +* adauga corespondente intre partener si fiecare tip din lista de id-uri tip partener +* Date : 04/10/2006 +* author : marius.mutu +******************************************************* ADAUGA_CORESP_TIP_PART ****************************************** +PROCEDURE ADAUGA_CORESP_TIP_PART + LPARAMETERS tnIdPart, tcTipuriPartener + && tcTipuriParteneri: lista de id-uri tipuri parteneri delimitata prin ',' + *!* ADAUG TIPURI DE PARTENER - PARTENER DACA NU EXISTA + + LOCAL lcTipPart, lcSql, lnSucces, i + IF EMPTY(tcTipuriPartener) OR EMPTY(tnIdPart) + RETURN + ENDIF + FOR i = 1 TO GETWORDCOUNT(tcTipuriPartener,[,;]) + lcTipPart = GETWORDNUM(tcTipuriPartener,i,[,;]) + lcSql = [begin PACK_DEF.adauga_coresp_tip_part(] + ALLTRIM(TRANSFORM(tnIdPart)) + [,] + lcTipPart + [); END;] + lnSucces = goExecutor.oExecute(lcSql) + IF lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare,0+16,'Eroare') + ENDIF + ENDFOR +ENDPROC && ADAUGA_CORESP_TIP_PART +******************************************************* ADAUGA_CORESP_DELEGAT ****************************************** +Procedure ADAUGA_CORESP_DELEGAT +Lparameters tnIdDelegat, tnIdPart +Local lcSql,lnSucces +lcSql = [begin pack_def.adauga_coresp_delegat(] + Alltrim(Str(tnIdDelegat)) + [,] + Alltrim(Str(tnIdPart)) + [); end;] +lnSucces = goExecutor.oExecute(lcSql) +If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare,0+16,'Eroare') +Endif +EndProc +************************************************************************************************************************* +Procedure Adauga_Delegat_Partener +Lparameters tnIdDelegat, tnIdPartener +Local lcTipPart, lcSql, lnSucces +If Empty(tnIdDelegat) Or Empty(tnIdPartener) + Return +Endif +lcSql = [begin pack_def.adauga_coresp_tip_part(]+Alltrim(Str(tnIdDelegat))+[,?gnIdTipDelegati);] + ; + [pack_def.actualizeaza_coresp_delegati(] + Alltrim(Str(tnIdDelegat)) + [,'] + ; + Alltrim(Str(tnIdPartener)) + [;'); END;] +lnSucces = goExecutor.oExecute(lcSql) +If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare,0+16,'Eroare') +Endif +Endproc && Adauga_Delegat_Partener + + +PROCEDURE Adauga_partener + LPARAMETERS toPartener + + Local lcAdresa, lcApart, lcBanca, lcBloc, lcCod_fiscal, lcCodpostal, lcCont_Banca, lcCorespDel + Local lcDA_apare, lcDenumire, lcDenumire_adresa, lcEmail, lcEtaj, lcFax, lcIdPart, lcIdString + Local lcId_Judet, lcId_categ_ent, lcId_loc, lcId_loc_inreg, lcId_tara, lcId_util, lcItem, lcJudet + Local lcJudetBucuresti, lcLocalitate, lcMesaj, lcMotiv_inactiv, lcNumar, lcNume, lcPrefix, lcPrenume + Local lcPrincipala, lcReg_comert, lcScara, lcSql, lcSqlInsert, lcStrada, lcSufix, lcTara, lcTelefon1 + Local lcTelefon2, lcTip_persoana, lcWeb, lcinactiv, llSucces, lnIdJudet, lnIdJudetBucuresti + Local lnIdLocalitateBucuresti, lnIdTaraRO, lnItem, lnItems, lnSucces + *:Global pnIdAdresa, pnIdJudet + + lcDenumire = Nvl(Strtran(Alltrim(Upper(toPartener.denumire)), ['], ['']), "") + lcNume = '' + IF TYPE('toPartener.nume') = 'C' + lcNume = Nvl(Strtran(Alltrim(Upper(toPartener.nume)), ['], ['']), "") + ENDIF + If Empty(m.lcNume) + lcNume = m.lcDenumire + m.lcPrenume = '' + Endif + + lcPrenume = '' + IF TYPE('toPartener.prenume') = 'C' + lcPrenume = Nvl(Strtran(Alltrim(Upper(toPartener.prenume)), ['], ['']), "") + ENDIF + + lcCod_fiscal = '' + IF TYPE('toPartener.cod_fiscal') = 'C' + lcCod_fiscal = Upper(Alltrim(toPartener.cod_fiscal)) + ENDIF + + lcReg_comert = '' + IF TYPE('toPartener.reg_com') = 'C' + lcReg_comert = Nvl(Alltrim(Upper(toPartener.reg_com)), "") + ENDIF + + lcId_loc_inreg = 'NULL' + lcId_categ_ent = 'NULL' + lcPrefix = "" + lcSufix = "" + lcTip_persoana = IIF(!EMPTY(m.lcCod_fiscal) and LEN(m.lcCod_fiscal) < 13, "1", "2") + lcBanca = "" + lcCont_Banca = "" + lcinactiv = "0" + lcMotiv_inactiv = "" + lcTip = 'CLIENTI' + IF TYPE('toPartener.tip') = 'C' + lcTip = UPPER(ALLTRIM(toPartener.tip)) + ENDIF + lcIdString = IIF(m.lcTip = 'CLIENTI', "16", "17") && 16 = CLIENTI, 17 = FURNIZORI + lcCorespDel = "" + lcId_util = "-3" + lcSqlInsert = [begin pack_def.adauga_partener('] + lcDenumire + [','] + lcNume + [','] + lcPrenume + [','] + lcCod_fiscal + [','] + ; + lcReg_comert + [',] + lcId_loc_inreg + [,] + lcId_categ_ent + [,'] + lcPrefix + [','] + lcSufix + [',] + ; + lcTip_persoana + [,'] + lcBanca + [','] + lcCont_Banca + [',] + lcinactiv + [,'] + lcMotiv_inactiv + [',] + ; + lcId_util + [,'] + lcIdString + [','] + lcCorespDel + [',?@pnIdPart); end;] + + llSucces = goExecutor.oExecuta(m.lcSqlInsert) + + *********************************** + * Adresa partener + *********************************** + + lcIdPart = Alltrim(Str(m.pnIdPart)) + + lcAdresa = Nvl(Strtran(Alltrim(Upper(toPartener.adresa)), ['], ['']), "") + + lcDenumire_adresa = "" + lcDA_apare = "0" + lcStrada = "" + lcNumar = "" + + lcBloc = "" + lcScara = "" + lcApart = "" + lcEtaj = "" + lcId_loc = "NULL" + lcLocalitate = "" + lcId_Judet = "NULL" + lcCodpostal = "NULL" + lcId_tara = "NULL" + lcTelefon1 = "" + lcTelefon2 = "" + lcFax = "" + lcEmail = "" + lcWeb = "" + lcPrincipala = Iif(m.pnNrAdrese = 0, "1", "0") + lcinactiv = "0" + lcId_util = "-3" + + lnItems = Getwordcount(m.lcAdresa, ',') + For lnItem = 1 To m.lnItems + lcItem = Alltrim(Getwordnum(m.lcAdresa, m.lnItem, ',')) + Do Case + Case m.lnItem = 1 && strada + lcStrada = LEFT(Alltrim(m.lcItem), 150) + Case 'NR.' $ m.lcItem && nr strada + lcNumar = LEFT(Alltrim(Strtran(m.lcItem, 'NR.', '')), 10) + Case 'BL.' $ m.lcItem + lcBloc = LEFT(Alltrim(Strtran(m.lcItem, 'BL.', '')), 30) + Case 'SC.' $ m.lcItem + lcScara = LEFT(Alltrim(Strtran(m.lcItem, 'SC.', '')), 10) + Case 'ET.' $ m.lcItem + lcEtaj = LEFT(Alltrim(Strtran(m.lcItem, 'ET.', '')), 20) + Case 'AP.' $ m.lcItem + lcApart = LEFT(Alltrim(Strtran(m.lcItem, 'AP.', '')), 10) + Case 'COD POSTAL' $ m.lcItem + lcCodpostal = ALLTRIM(STR(INT(VAL(LEFT(Alltrim(Strtran(m.lcItem, 'COD POSTAL', '')), 20))))) + Case 'LOC.' $ m.lcItem + lcLocalitate = Alltrim(Strtran(m.lcItem, 'LOC.', '')) + Case 'JUD.' $ m.lcItem + lcJudet = Alltrim(Strtran(m.lcItem, 'JUD.', '')) + Case m.lnItem = m.lnItems - 1 And Empty(m.lcLocalitate) + lcLocalitate = m.lcItem + Case m.lnItem = m.lnItems + lcTara = m.lcItem + Endcase + Endfor + + lnIdJudetBucuresti = 10 + lcJudetBucuresti = "BUCURESTI" + lnIdLocalitateBucuresti = 1759 + lnIdTaraRO = 1 + + If m.lcLocalitate = 'BUCURESTI' + m.lcLocalitate = 'BUCURESTI SECTORUL 1' + Endif + If Empty(m.lcLocalitate) + lcLocalitate = 'BUCURESTI SECTORUL 1' + Endif + If Empty(m.lcJudet) + lcJudet = m.lcJudetBucuresti + ENDIF + + * caut adresa dupa localitate. daca nu o gasesc, o adaug + SELECT cAdrese + LOCATE FOR id_part = m.pnIdPart AND localitate = m.lcLocalitate + IF !FOUND() + pnIdJudet = 0 + lnSucces = goExecutor.oSelect2Value([select j.id_judet, j.id_tara from syn_nom_judete j where j.judet = '] + m.lcJudet + [' and j.inactiv = 0 and j.sters = 0], @pnIdJudet) + + If m.lnSucces > 0 + IF EMPTY(NVL(m.pnIdJudet,0)) + lnSucces = goExecutor.oSelect2Value([select j.id_judet, j.id_tara from syn_nom_judete j where j.judet like '%] + m.lcJudetBucuresti + [%' and j.inactiv = 0 and j.sters = 0], @pnIdJudet) + IF m.lnSucces > 0 + lnIdJudet = m.pnIdJudet + ELSE + lnIdJudet = m.lnIdJudetBucuresti + ENDIF + ELSE + lnIdJudet = m.pnIdJudet + ENDIF + ELSE + This.Trace(goExecutor.cEroare) + lnIdJudet = m.lnIdJudetBucuresti + ENDIF + + lcSql = [select l.id_loc, l.id_judet, j.id_tara from syn_nom_localitati l left join syn_nom_judete j on l.id_judet = j.id_judet where l.id_judet = ] + ALLTRIM(STR(m.lnIdJudet)) + [ and l.localitate = '] + m.lcLocalitate + [' and l.inactiv = 0 and l.sters = 0 order by l.localitate] + lnSucces = goExecutor.oExecute(m.lcSql, 'cLocalitateTemp') + If m.lnSucces > 0 + IF RECCOUNT('cLocalitateTemp') > 0 + Select cLocalitateTemp + Go Top + lcId_loc = Alltrim(Str(id_loc)) + lcId_Judet = Alltrim(Str(id_judet)) + lcId_tara = Alltrim(Str(id_tara)) + Use In (Select('cLocalitateTemp')) + ELSE + Use In (Select('cLocalitateTemp')) + lcSql = [select l.id_loc, l.id_judet, j.id_tara from syn_nom_localitati l left join syn_nom_judete j on l.id_judet = j.id_judet where l.id_judet = ] + ALLTRIM(STR(m.lnIdJudet)) + [ and l.inactiv = 0 and l.sters = 0 order by l.localitate] + lnSucces = goExecutor.oExecute(m.lcSql, 'cLocalitateTemp') + If m.lnSucces > 0 + Select cLocalitateTemp + Go Top + lcId_loc = Alltrim(Str(id_loc)) + lcId_Judet = Alltrim(Str(id_judet)) + lcId_tara = Alltrim(Str(id_tara)) + ELSE + This.Trace(goExecutor.cEroare) + ENDIF + Use In (Select('cLocalitateTemp')) + ENDIF + ELSE + This.Trace(goExecutor.cEroare) + ENDIF + + IF EMPTY(NVL(m.lcId_loc, '')) + lcId_loc = Alltrim(Str(m.lnIdLocalitateBucuresti)) + lcId_Judet = Alltrim(Str(m.lnIdJudetBucuresti)) + lcId_tara = Alltrim(Str(m.lnIdTaraRO)) + Endif && lnSucces + + If m.lcId_loc <> 'NULL' + pnIdAdresa = 0 +*!* * caut adresa dupa localitate. daca nu o gasesc, o adaug +*!* lcSql = [SELECT id_adresa FROM adrese_parteneri where sters = 0 and inactiv = 0 and id_loc = ] + m.lcId_loc + [ AND id_part = ] + m.lcIdPart +*!* lnSucces = goExecutor.oSelect2Value(m.lcSql, @pnIdAdresa) +*!* If m.lnSucces < 0 +*!* lcMesaj = goExecutor.cEroare +*!* Thisform.trace(m.lcMesaj) +*!* AMessagebox(m.lcMesaj, 0 + 48, _Screen.Caption ) +*!* Exit +*!* Endif + + If Empty(NVL(m.pnIdAdresa,0)) + lcSql = [begin pack_def.adauga_adresa_partener2(] + lcIdPart + [,'] + lcDenumire_adresa + [',] + lcDA_apare + [,] + ; + ['] + lcStrada + [','] + lcNumar + [','] + ; + lcBloc + [','] + lcScara + [','] + lcApart + [','] + lcEtaj + [',] + lcId_loc + [,'] + lcLocalitate + [',] + lcId_Judet + [,] + lcCodpostal + [,] + lcId_tara + [,'] + ; + lcTelefon1 + [','] + lcTelefon2 + [','] + lcFax + [','] + lcEmail + [','] + lcWeb + [',] + ; + lcPrincipala + [,] + lcinactiv + [,] + lcId_util + [,?@pnIdAdresa); end;] + + lnSucces = goExecutor.oExecute(m.lcSql) + If m.lnSucces < 0 + lcMesaj = goExecutor.cEroare + Thisform.trace(m.lcMesaj) + AMessagebox(m.lcMesaj, 0 + 48, _Screen.Caption ) + Exit + Endif + Endif && empty(m.pnIdAdresa) + + Endif && m.lcId_loc <> 'NULL' + ENDIF && !found() + +ENDPROC && Adauga_partener + \ No newline at end of file diff --git a/COMUN/programe/oproceduri_rapoarte_fact.prg b/COMUN/programe/oproceduri_rapoarte_fact.prg new file mode 100644 index 0000000..6376366 --- /dev/null +++ b/COMUN/programe/oproceduri_rapoarte_fact.prg @@ -0,0 +1,850 @@ +*************************************************************************************************************** +**** Clasa: +**** oDateListare +**** Proceduri: +**** rap_avize +**** rap_facturi +**** rap_incasari +**** rap_articole +**** rap_articole_tr +**** rap_avize_transfer +**** rap_centralizator +**** rap_centr_subgrupe +*************************************************************************************************************** +Define Class oDateListare As Custom + datai = {} + dataf = {} + data_referinta = {} + csql = [] + id_client = Null + nume_client = [] + id_agent = Null + nume_agent = [] + id_delegat = Null + nume_delegat = [] + id_masina = Null + nrinmat = [] + categorie = [] + id_categorie_entitate = Null + denumire = [] + id_articol = Null + grupa = [] + id_grupa = Null + subgrupa = [] + id_subgrupa = Null + id_gestiune_sursa = Null + gestiune_sursa = [] + id_gestiune_dest = Null + gestiune_dest = [] + id_util = Null + utilizator = [] + id_gestiune = Null + nume_gestiune = [] + subgr_art = [] + id_furnart = Null + furnizor_art = [] + *!* tip_raport = 1 + *!* Dimension acoloane(30,4) && 1 - nume_camp + *!* && 2 - ordine la grupare + *!* && 3 - ordine la order by + *!* && 4 - sens la order by ( 1 - ASC, 2 - DESC ) + Procedure Init + With This + ldData = Ttod(get_ora()) + If Year(ldData) * 12 + Month(ldData) <> gnAn * 12 + gnLuna + .datai = Date(gnAn, gnLuna, 1) + .dataf = Gomonth(Date(gnAn, gnLuna, 1), 1) - 1 + .data_referinta = .dataf + Else + .dataf = ldData + .data_referinta = ldData + .datai = Date(Year(ldData), Month(ldData), 1) + Endif + Endwith + Endproc + +Enddefine +*************************************************************************************************************** +********************************************** INCEPUT: rap_avize ********************************************* +Procedure rap_avize + Private poListare + poListare = Createobject("oDateListare") + ofrmdatelistare = Createobject("frm_date_rapoarte_avize") + ofrmdatelistare.Show(1) + Release poListare, ofrmdatelistare +Endproc && rap_avize +********************************************** SFARSIT: rap_avize ********************************************* +********************************************* INCEPUT: rap_facturi ******************************************** +Procedure rap_facturi + Private poListare + poListare = Createobject("oDateListare") + ofrmdatelistare = Createobject("frm_date_rapoarte_facturi") + ofrmdatelistare.Show(1) + Release poListare, ofrmdatelistare +Endproc && rap_facturi +********************************************** SFARSIT: rap_facturi ******************************************* +******************************************** INCEPUT: rap_incasari ******************************************** +Procedure rap_incasari + Private poListare + poListare = Createobject("oDateListare") + ofrmdatelistare = Createobject("frm_date_rapoarte_incasari") + ofrmdatelistare.Show(1) + Release poListare, ofrmdatelistare +Endproc && rap_incasari +******************************************** SFARSIT: rap_incasari ******************************************** +******************************************** INCEPUT: rap_articole ******************************************** +Procedure rap_articole + Private poListare + poListare = Createobject("oDateListare") + ofrmdatelistare = Createobject("frm_date_rapoarte_articole") + ofrmdatelistare.Show(1) + Release poListare, ofrmdatelistare +Endproc && rap_articole +******************************************** SFARSIT: rap_articole ******************************************** +******************************************** INCEPUT: rap_articole_tr ******************************************** +Procedure rap_articole_tr + Private poListare + poListare = Createobject("oDateListare") + ofrmdatelistare = Createobject("frm_date_rapoarte_articole_tr") + ofrmdatelistare.Show(1) + Release poListare, ofrmdatelistare +Endproc && rap_articole_tr +******************************************** SFARSIT: rap_articole_tr ******************************************** +******************************************** INCEPUT: rap_articole_v ******************************************** +Procedure rap_articole_v + Private poListare + poListare = Createobject("oDateListare") + ofrmdatelistare = Createobject("frm_date_rapoarte_articole_v") + ofrmdatelistare.Show(1) + Release poListare, ofrmdatelistare +Endproc && rap_articole_tr +******************************************** SFARSIT: rap_articole_v ******************************************** +***************************************** INCEPUT: rap_avize_transfer ***************************************** +Procedure rap_avize_transfer + Private poListare + poListare = Createobject("oDateListare") + ofrmdatelistare = Createobject("frm_date_rapoarte_avize_tr") + ofrmdatelistare.Show(1) + Release poListare, ofrmdatelistare +Endproc && rap_avize_transfer +***************************************** SFARSIT: rap_avize_transfer ***************************************** +***************************************** INCEPUT: rap_centralizator ****************************************** +Procedure rap_centralizator + Private pcDataora, pcPerioada, pdDataI, pdDataF, pnTotalFTva1, pnTotalTva1, pnTotalFTva2, pnTotalTva2 + Store {} To pdDataI, pdDataF + Store 0 To pnTotalFaraTva1, pnTotalTva1, pnTotalFaraTva2, pnTotalTva2 + Local lcOrder, lcSql, lcFiltru, lnSucces, lnNefacturatFTva, lnNefacturatTva + + ofrmperioada = Createobject('frm_perioada_zzllaaaa') + ofrmperioada.Show(1) + If gnButon = 2 + Return + Endif + + pcPerioada = [Perioada ] + Dtoc(pdDataI) + [ - ] + Dtoc(pdDataF) + + Create Cursor crsCentralizator(tip N(2), categorie c(100), valftva N(20, Max(gnPC, 4)), valtva N(20, Max(gnPC, 4))) + *!* tip = 1 >> nu afiseaza sumele + pcDataora = get_ora(2) + + If Used('crsCentrTot') + Use In crsCentrTot + Endif + lcSql1 = [select 1 as crs,tip,SUM(suma_fara_tva) as valftva,SUM(suma_tva) as valtva from ] + ; + gcS + [.fact_vrap_centralizator_tipuri where data_act between ?pdDataI and ?pdDataF] + gcCondSucursala + ; + [ group by tip] + lcSql2 = [select 2 as crs,null as tip,SUM(suma_fara_tva) as valftva,SUM(suma_tva) as valtva from ] + ; + gcS + [.fact_vrap_centralizator_art where data_act between ?pdDataI and ?pdDataF] + gcCondSucursala + lcSql3 = [select 3 as crs,null as tip,SUM(suma_fara_tva) as valftva,SUM(suma_tva) as valtva from ] + ; + gcS + [.fact_vrap_centralizator_rate where data_act between ?pdDataI and ?pdDataF] + gcCondSucursala + lcSql4 = [select 4 as crs,null as tip,SUM(disc_fara_tva) as valftva,SUM(disc_tva) as valtva from ] + ; + gcS + [.fact_vrap_centralizator_fact where data_act between ?pdDataI and ?pdDataF] + gcCondSucursala + lcSql = lcSql1 + [ union all ] + lcSql2 + [ union all ] + lcSql3 + [ union all ] + lcSql4 + lcCursor = [crsCentrTot] + lnSucces = goExecutor.oexecute(lcSql, lcCursor) + If lnSucces < 0 + amessagebox(goExecutor.oPrelucrareEroare(), 16, "Eroare") + Use In crsCentrTot + Return + Endif + + *** prelucrare raport + *!* Facturi + Select crsCentralizator + Append Blank + Replace categorie With "1. FACTURI" + Select Sum(valftva) As valftva, Sum(valtva) As valtva From crsCentrTot Where tip < 20 And crs = 1 Into Cursor crsTemp + Select crsTemp + Scatter Name poCentr + Select crsCentralizator + Replace valftva With Nvl(poCentr.valftva, 0), valtva With Nvl(poCentr.valtva, 0) + pnTotalFTva1 = Nvl(poCentr.valftva, 0) + pnTotalTva1 = Nvl(poCentr.valtva, 0) + + *!* Avize catre clienti + Select crsCentralizator + Append Blank + Replace categorie With "2. AVIZE CATRE CLIENTI", tip With 1 + + *!* Valoare totala + Append Blank + Replace categorie With Space(5) + "a) Valoare totala" + Select Sum(valftva) As valftva, Sum(valtva) As valtva From crsCentrTot Where Inlist(tip, 21, 22) And crs = 1 Into Cursor crsTemp + Select crsTemp + Scatter Name poCentr + Select crsCentralizator + Replace valftva With Nvl(poCentr.valftva, 0), valtva With Nvl(poCentr.valtva, 0) + lnNefacturatFTva = Nvl(poCentr.valftva, 0) + lnNefacturatTva = Nvl(poCentr.valtva, 0) + + *!* Valoare facturata + Append Blank + Replace categorie With Space(5) + "b) Valoare facturata" + Select Sum(valftva) As valftva, Sum(valtva) As valtva From crsCentrTot Where tip = 4 And crs = 1 Into Cursor crsTemp + Select crsTemp + Scatter Name poCentr + Select crsCentralizator + Replace valftva With Nvl(poCentr.valftva, 0), valtva With Nvl(poCentr.valtva, 0) + lnNefacturatFTva = lnNefacturatFTva - Nvl(poCentr.valftva, 0) + lnNefacturatTva = lnNefacturatTva - Nvl(poCentr.valtva, 0) + + *!* Valoare retururi + Append Blank + Replace categorie With Space(5) + "c) Valoare retururi" + Select Sum(valftva) As valftva, Sum(valtva) As valtva From crsCentrTot Where tip = 24 And crs = 1 Into Cursor crsTemp + Select crsTemp + Scatter Name poCentr + Select crsCentralizator + Replace valftva With Nvl(poCentr.valftva, 0), valtva With Nvl(poCentr.valtva, 0) + lnNefacturatFTva = lnNefacturatFTva + Nvl(poCentr.valftva, 0) + lnNefacturatTva = lnNefacturatTva + Nvl(poCentr.valtva, 0) + + *!* Valoare nefacturata + Append Blank + Replace categorie With Space(5) + "d) Valoare nefacturata (a-b+c)" + Replace valftva With lnNefacturatFTva, valtva With lnNefacturatTva + pnTotalFTva1 = pnTotalFTva1 + lnNefacturatFTva + pnTotalTva1 = pnTotalTva1 + lnNefacturatTva + + *!* Transferuri intre subunitati + Select crsCentralizator + Append Blank + Replace categorie With "3. TRANSFERURI INTRE SUBUNITATI" + Select Sum(valftva) As valftva, Sum(valtva) As valtva From crsCentrTot Where tip = 23 And crs = 1 Into Cursor crsTemp + Select crsTemp + Scatter Name poCentr + Select crsCentralizator + Replace valftva With Nvl(poCentr.valftva, 0), valtva With Nvl(poCentr.valtva, 0) + pnTotalFTva1 = pnTotalFTva1 + Nvl(poCentr.valftva, 0) + pnTotalTva1 = pnTotalTva1 + Nvl(poCentr.valtva, 0) + + *!* Articole + Select crsCentralizator + Append Blank + Replace categorie With "4. TOTAL ARTICOLE VANDUTE" + Select crsCentrTot + Locate For crs = 2 + Scatter Name poCentr + Select crsCentralizator + Replace valftva With Nvl(poCentr.valftva, 0), valtva With Nvl(poCentr.valtva, 0) + pnTotalFTva2 = Nvl(poCentr.valftva, 0) + pnTotalTva2 = Nvl(poCentr.valtva, 0) + + *!* Articole + Select crsCentralizator + Append Blank + Replace categorie With "5. TOTAL RATE CONTRACTE" + Select crsCentrTot + Locate For crs = 3 + Scatter Name poCentr + Select crsCentralizator + Replace valftva With Nvl(poCentr.valftva, 0), valtva With Nvl(poCentr.valtva, 0) + pnTotalFTva2 = pnTotalFTva2 + Nvl(poCentr.valftva, 0) + pnTotalTva2 = pnTotalTva2 + Nvl(poCentr.valtva, 0) + + *!* Discount-uri globale + Select crsCentralizator + Append Blank + Replace categorie With "6. TOTAL DISCOUNT GLOBAL" + Select crsCentrTot + Locate For crs = 4 + Scatter Name poCentr + Select crsCentralizator + Replace valftva With Nvl(poCentr.valftva, 0), valtva With Nvl(poCentr.valtva, 0) + pnTotalFTva2 = pnTotalFTva2 - Nvl(poCentr.valftva, 0) + pnTotalTva2 = pnTotalTva2 - Nvl(poCentr.valtva, 0) + + Release poCentr + Use In crsTemp + + If Used('crsCentrTot') + Use In crsCentrTot + Endif + + If Reccount('crsCentralizator') > 0 + Keyboard "{ctrl+f10}" + Select crsCentralizator + Report Form raport_centralizator To Printer Prompt Preview + Else + amessagebox("Nu exista inregistrari pentru listare!", 0 + 48, "Atentie") + Endif + + If Used('crsCentralizator') + Use In crsCentralizator + Endif + + Release pcDataora, pcPerioada, pdDataI, pdDataF, pnTotalFTva1, pnTotalTva1, pnTotalFTva2, pnTotalTva2 +Endproc && rap_centralizator +***************************************** SFARSIT: rap_centralizator ****************************************** +***************************************** INCEPUT: rap_centr_subgrupe ***************************************** +Procedure rap_centr_subgrupe + Local lcSql, lnSucces, lcCursor + Private pcDataora, pcPerioada, pdDataI, pdDataF, pcTitlu + Store {} To pdDataI, pdDataF + lcCursor = [crscentrsubgr] + + ofrmperioada = Createobject('frm_perioada_zzllaaaa') + ofrmperioada.Show(1) + If gnButon = 1 + pcPerioada = [Perioada ] + Dtoc(pdDataI) + [ - ] + Dtoc(pdDataF) + Else + Return + Endif + + lcXMLGestiune = caut_gestiune_xml(2) + If !Empty(lcXMLGestiune) And gnButon = 1 + Xmltocursor(lcXMLGestiune, "crsGestTemp") + If Reccount('crsGestTemp') = 0 + amessagebox('Nu ati selectat nici o gestiune!', 0 + 48, 'Inventar') + Return + Endif + pcTitlu = [CENTRALIZATOR VALORI PE SUBGRUPE DE ARTICOLE] + lcListaIdGestiuni = cursor2lista("crsGestTemp", "id_gestiune", ",") + Use In crsGestTemp + Else + Return + Endif + + If Used(lcCursor) + Use In (lcCursor) + Endif + lcSql = [select subgrupa,nume_gestiune,id_gestiune,Sum(val_ach) as val_ach,Sum(val_vanz) as val_vanz from ] + gcS + [.fact_vcentr_val_subgrupe ] + ; + [where data_act between ?pdDataI and ?pdDataF and id_gestiune in (] + lcListaIdGestiuni + [) ] + ; + [group by id_gestiune,nume_gestiune,subgrupa ] + ; + [order by nume_gestiune,subgrupa] + lnSucces = goExecutor.oexecute(lcSql, lcCursor) + If lnSucces < 0 + amessagebox(goExecutor.cEroare, 16, "Eroare") + Else + goExport.export2frx(lcCursor, [rap_centr_val_subgrupe]) && , , , , , , .T.) + Endif + If Used(lcCursor) + Use In (lcCursor) + Endif + + Release lcSql, lnSucces, pcDataora, pcPerioada, pdDataI, pdDataF, pcTitlu +Endproc && rap_centr_subgrupe +***************************************** SFARSIT: rap_centr_subgrupe ***************************************** +Procedure centr_avize_ruta + + + lcFiltru = [2=2] + lcSchema = [id_lucrare n(10),nrord c(100)] + lcOrder = [nrord] + lccoloane = [nrord] + lcTitlu = [ALEGETI LUCRAREA] + lcTitluColoane = [Lucrare] + *!* llMaiMulteMasini = tlMaiMulteMasini + lcSelect = [select id_lucrare,nrord from vnom_lucrari] + lcFiltruOriginal = [inactiv = 0] + *!* lcNumeProc = [nom_nomrute] + llToateIreg = .F. + lcPrimaColoana = [nrord] + lnPornire = 1 + *!* lnTipReturn = Iif(tlMaiMulteMasini, 1, 0) + lcIdColumn = "id_lucrare" + loCauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lccoloane, lcTitlu, lcTitluColoane, , llToateIreg, lcFiltruOriginal)&&, lcPrimaColoana, lnPornire, , lcIdColumn) + *!* loCauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lccoloane, lcTitlu, lcTitluColoane, lcNumeProc, tlToateIreg, lcFiltruOriginal) && 11.07.2007 + + + If Empty(loCauta.id_lucrare) Or Isnull(loCauta.id_lucrare) + Return + Endif + + + + lcSql = [ select * from fact_vrap_avize_ruta where id_lucrare = ] + Alltrim(Str(loCauta.id_lucrare)) + [ order by ruta,data_act,numar_act] + lcCursor = [crsavizeruta] + lnSucces = goExecutor.oexecute(lcSql, lcCursor) + If lnSucces < 0 + amessagebox(goExecutor.oPrelucrareEroare(), 16, "Eroare") + Use In crsavizeruta + Return + Endif + Select crsavizeruta + If Reccount() < 1 + amessagebox('Nu exista date pentru comanda selectata!', 0 + 64, 'Atentie') + Use In crsavizeruta + + Return + Endif + Private pcDataora + pcDataora = get_ora(2) + Select crsavizeruta + Report Form rap_avizerute To Printer Prompt Preview + + Use In crsavizeruta +Endproc + + +*------------------------------------------------------------------------------- + +Procedure centr_art_ruta + + + lcFiltru = [2=2] + lcSchema = [id_lucrare n(10),nrord c(100)] + lcOrder = [nrord] + lccoloane = [nrord] + lcTitlu = [ALEGETI LUCRAREA] + lcTitluColoane = [Lucrare] + *!* llMaiMulteMasini = tlMaiMulteMasini + lcSelect = [select id_lucrare,nrord from vnom_lucrari] + lcFiltruOriginal = [inactiv = 0] + *!* lcNumeProc = [nom_nomrute] + llToateIreg = .F. + lcPrimaColoana = [nrord] + lnPornire = 1 + *!* lnTipReturn = Iif(tlMaiMulteMasini, 1, 0) + lcIdColumn = "id_lucrare" + loCauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lccoloane, lcTitlu, lcTitluColoane, , llToateIreg, lcFiltruOriginal)&&, lcPrimaColoana, lnPornire, , lcIdColumn) + *!* loCauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lccoloane, lcTitlu, lcTitluColoane, lcNumeProc, tlToateIreg, lcFiltruOriginal) && 11.07.2007 + + + If Empty(loCauta.id_lucrare) Or Isnull(loCauta.id_lucrare) + Return + Endif + + + + lcSql = [ select * from fact_vrap_art_ruta where id_lucrare = ] + Alltrim(Str(loCauta.id_lucrare)) + [ order by ruta,subgrupa,denumire] + lcCursor = [crsartruta] + lnSucces = goExecutor.oexecute(lcSql, lcCursor) + If lnSucces < 0 + amessagebox(goExecutor.oPrelucrareEroare(), 16, "Eroare") + Use In crsartruta + Return + Endif + Select crsartruta + If Reccount() < 1 + amessagebox('Nu exista date pentru comanda selectata!', 0 + 64, 'Atentie') + Use In crsartruta + + Return + Endif + Private pcDataora + pcDataora = get_ora(2) + Select crsartruta + Report Form rap_ARTrute To Printer Prompt Preview + + Use In crsartruta +Endproc + +*--------------------------------------------------------------------------- +Procedure rap_factav_doc && lansat din rap_listfactav_centr, lansat la randul lui din frm_facturi (ofacturare.vcx) + Local lnNrIreg, lcFiltruInit, lnRecSel + Store 0 To lnNrIreg, lnRecSel + Store '' To lcFiltruInit + + Select crsfacturi + lcFiltruInit = Set("Filter") + lnRecSel = Recno() + Set Filter To ales = 1 + + Count For ales = 1 To lnNrIreg + *!* modificare v 2.0.40 + *!* If Reccount() <1 + If lnNrIreg < 1 + *!* modificare v 2.0.40 ^ + amessagebox('Nu ati selectat vreun document!', 0 + 48, 'Atentie') + *!* modificare v 2.0.40 + *!* Return + *!* EndIf + Else + *!* modificare v 2.0.40 ^ + Private pcDataora + pcDataora = get_ora(2) + Select crsfacturi + Report Form rap_avizedoc To Printer Prompt Preview + *!* modificare v 2.0.40 + Endif + *!* modificare v 2.0.40 ^ + Select crsfacturi + Set Filter To &lcFiltruInit + If lnRecSel > 0 + Goto lnRecSel + Endif +Endproc +*--------------------------------------------------------------------------- +Procedure rap_factav_grupate_doc && lansat din rap_listfactav_centr, lansat la randul lui din frm_facturi (ofacturare.vcx) + Local lnNrIreg, lcFiltruInit, lnRecSel + Store 0 To lnNrIreg, lnRecSel + Store '' To lcFiltruInit + + Select crsfacturi + lcFiltruInit = Set("Filter") + lnRecSel = Recno() + Set Filter To ales = 1 + + Count For ales = 1 To lnNrIreg + *!* modificare v 2.0.40 + *!* If Reccount() <1 + If lnNrIreg < 1 + *!* modificare v 2.0.40 ^ + amessagebox('Nu ati selectat vreun document!', 0 + 48, 'Atentie') + *!* modificare v 2.0.40 + *!* Return + *!* EndIf + Else + *!* modificare v 2.0.40 ^ + Private pcDataora + pcDataora = get_ora(2) + Select crsfacturi + *!* modificare v 2.0.63 + If Used('crsdocgrup') + Use In crsdocgrup + Endif + Select client, numar_act, data_act, valoarea, total_cu_tva, ; + PADR(Iif(Inlist(tip, 1, 2, 3, 4, 5, 6, 8, 9, 10, -1, -2, -3, -4, -8, -11), 'FACTURI', ; + IIF(Inlist(tip, 21, 22, 24, 26, -7, -13), 'AVIZE CATRE CLIENTI', ; + IIF(Inlist(tip, 23, 25, 27, 30, 41, -6), 'TRANSFERURI', ; + IIF(Inlist(tip, 28, 29), 'AVIZE CATRE CLIENTI DEBITORI', ; + IIF(Inlist(tip, -9), 'AVIZE DE PROTOCOL', ; + IIF(Inlist(tip, -10), 'AVIZE DE SPONSORIZARI', ; + IIF(Inlist(tip, 7), 'CREDIT NOTE', ; + IIF(Inlist(tip, 42, 47), 'CLIENTI IN CUSTODIE - COMANDA', ; + IIF(Inlist(tip, 43), 'BONURI FISCALE MAGAZINE', ''))))))))), 70, ' ') As explicatie ; + FROM crsfacturi ; + ORDER By 6, 1, 3 ; + INTO Cursor crsdocgrup + + Report Form rap_avizedoc_grup To Printer Prompt Preview + Use In crsdocgrup + *!* modificare v 2.0.63 ^ + + *!* modificare v 2.0.40 + Endif + *!* modificare v 2.0.40 ^ + Select crsfacturi + Set Filter To &lcFiltruInit + If lnRecSel > 0 + Goto lnRecSel + Endif +Endproc +*--------------------------------------------------------------------------- +Procedure rap_factav_art && lansat din rap_listfactav_centr, lansat la randul lui din frm_facturi (ofacturare.vcx) + Local lcidvanzari, lcSql, lnSucces + Store '' To lcidvanzari + Local lnNrIreg, lcFiltruInit, lnRecSel + Store 0 To lnNrIreg, lnRecSel + Store '' To lcFiltruInit + + Select crsfacturi + lcFiltruInit = Set("Filter") + lnRecSel = Recno() + Set Filter To ales = 1 + + Count For ales = 1 To lnNrIreg + *!* modificare v 2.0.40 + *!* If Reccount() <1 + If lnNrIreg < 1 + *!* modificare v 2.0.40 ^ + amessagebox('Nu ati selectat vreun document!', 0 + 48, 'Atentie') + *!* modificare v 2.0.40 + *!* Return + *!* EndIf + Else + *!* modificare v 2.0.40 + Select crsfacturi + Scan + lcidvanzari = lcidvanzari + [, ] + Alltrim(Str(crsfacturi .id_vanzare)) + Select crsfacturi + Endscan + lcidvanzari = Substr(lcidvanzari, 2) + *!* modificare v 2.0.83 + *!* lcSql = [select a.codmat,a.denumire,a.pret_achizitie,a.pret,a.subgrupa,sum(cantitate) as cantitate from fact_vfacturi_detalii a ]+; + *!* [ where a.id_vanzare in (]+Alltrim(lcidvanzari)+[)]+; + *!* [ group by a.codmat,a.denumire,a.pret_achizitie,a.pret,a.subgrupa]+; + *!* [ order by a.codmat, a.denumire ] + lcSql = [select d.codmat,NVL(d.denumire, a.explicatie) as denumire,a.pret_achizitie,] + ; + [sum(round(a.cantitate*a.pret_achizitie,?gnPc)) as valoare_achizitie,] + ; + [pack_sesiune.calculeaza_pret_cu_tva(a.pret,nvl(c.curs,1)/NVL(c.multiplicator,1),a.id_valuta,a.proc_tvav,a.pret_cu_tva,2) as pretvtva,] + ; + [sum(pack_sesiune.calculeaza_total_cu_tva(a.pret,a.diferenta,nvl(c.curs,1)/NVL(c.multiplicator,1),a.discount_unitar,b.discount_evidentiat,a.cantitate,a.pret_cu_tva,a.proc_tvav,?gnPPretV,?gnPC)) as valoarevtva,] + ; + [e.subgrupa,sum(a.cantitate) as cantitate ] + ; + [from vanzari_detalii a ] + ; + [left join vanzari b on a.id_vanzare = b.id_vanzare ] + ; + [left join vanzari_cursuri c on a.id_vanzare = c.id_vanzare and a.id_valuta = c.id_valuta ] + ; + [left join nom_articole d on a.id_articol = d.id_articol ] + ; + [left join gest_art_sbgr e on d.id_subgrupa = e.id_subgrupa ] + ; + [where a.sters = 0 and a.id_vanzare in (] + Alltrim(lcidvanzari) + [) ] + ; + [group by NVL(d.denumire, a.explicatie),d.codmat,a.pret_achizitie,e.subgrupa,a.pret,nvl(c.curs,1),NVL(c.multiplicator,1),a.id_valuta,a.proc_tvav,a.pret_cu_Tva ] + ; + [order by e.subgrupa,NVL(d.denumire, a.explicatie) ] + *!* modificare v 2.0.83 ^ + lnSucces = goExecutor.oexecute(lcSql, 'crsfactdetaliiartrap') + If lnSucces < 0 + amessagebox(goExecutor.cEroare, 0 + 16, "Eroare") + *!* modificare v 2.0.40 + *!* Return + *!* Endif + Else + *!* modificare v 2.0.40 ^ + Private pcDataora + pcDataora = get_ora(2) + Select crsfactdetaliiartrap + Report Form rap_artdoc To Printer Prompt Preview + *!* modificare v 2.0.40 + Endif + Endif + *!* modificare v 2.0.40 ^ + Select crsfacturi + Set Filter To &lcFiltruInit + If lnRecSel > 0 + Goto lnRecSel + Endif +Endproc +*--------------------------------------------------------------------------- +Procedure rap_borderou_ar + Local lcCursor, lcCursorAdrese + lcCursor = [crsARClienti] + lcCursorAdrese = [crsARAdresePart] + lcCursorFirma = [crsARDateFirma] + Select a.client, a.id_part, Space(255) As loc_judet From crsfacturi a With (Buffering = .T.) ; + Where ales = 1 Order By 1 Into Cursor (lcCursor) NOFILTER Readwrite + If Reccount(lcCursor) < 1 + amessagebox('Nu ati selectat nici un document!', 0 + 48, 'Atentie') + Else + lcSql = [select antet as denumire,adresa,telefon from syn_nom_firme where id_firma = ?gnIdFirma] + If goExecutor.oExecuta(lcSql, lcCursorFirma) + Private poFirma + Select (lcCursorFirma) + Scatter Name poFirma + + Select (lcCursor) + lcListaId = [] + Scan For !Isnull(id_part) + lcListaId = lcListaId + [,] + Alltrim(Str(id_part)) + Endscan + + lcSql = [select distinct id_part,localitate||nvl2(judet,' ('||judet||')','') as loc_judet from vadrese_parteneri ] + ; + [where id_part in (] + Substr(lcListaId, 2) + [) and principala = 1] + If goExecutor.oExecuta(lcSql, lcCursorAdrese) + Select (lcCursorAdrese) + Scan For !Isnull(loc_judet) + lcLocJudet = loc_judet + lnIdPart = id_part + Update (lcCursor) Set loc_judet = lcLocJudet Where id_part = lnIdPart + Endscan + goExport.export2frx(lcCursor, [borderou_ar], , , , , , .T.) + Endif + Use In (Select(lcCursorAdrese)) + Endif + Use In (Select(lcCursorFirma)) + Endif + Use In (Select(lcCursor)) +Endproc +*--------------------------------------------------------------------------- +Procedure rap_factav_docart && lansat din rap_listfactav_centr, lansat la randul lui din frm_facturi (ofacturare.vcx) + + Select a.*, 1 As g1 From crsfacturi a With (Buffering = .T.) Where ales = 1 Into Cursor crsDocArt NOFILTER Readwrite + Select crsDocArt + If Reccount() < 1 + amessagebox('Nu ati selectat nici un document!', 0 + 48, 'Atentie') + *!* modificare v 2.0.40 + *!* Return + *!* EndIf + Else + *!* modificare v 2.0.40 ^ + + Local lcidvanzari, lcSql, lnSucces + Store '' To lcidvanzari + + Select crsDocArt + Scan + lcidvanzari = lcidvanzari + [, ] + Alltrim(Str(crsDocArt.id_vanzare)) + Select crsDocArt + Endscan + lcidvanzari = Substr(lcidvanzari, 2) + + lcSql = [select a.codmat,a.denumire,a.pret_achizitie,a.pret,a.subgrupa,sum(cantitate) as cantitate from fact_vfacturi_detalii a ] + ; + [ where a.id_vanzare in (] + Alltrim(lcidvanzari) + [)] + ; + [ group by a.codmat,a.denumire,a.pret_achizitie,a.pret,a.subgrupa] + ; + [ order by a.codmat, a.denumire ] + + lnSucces = goExecutor.oexecute(lcSql, 'crsfactdetaliiartrap') + If lnSucces < 0 + amessagebox(goExecutor.cEroare, 0 + 16, "Eroare") + *!* modificare v 2.0.40 + *!* Return + *!* EndIf + Else + *!* modificare v 2.0.40 ^ + Private pcDataora + pcDataora = get_ora(2) + Select crsfactdetaliiartrap + Report Form rap_artdoc To Printer Prompt Preview + *!* modificare v 2.0.40 + Endif + Endif + *!* modificare v 2.0.40 ^ + Select crsfacturi + Set Filter To &lcFiltruInit + If lnRecSel > 0 + Goto lnRecSel + Endif +Endproc +*---------------------------------------------------------------------------------------------- +Procedure rap_transf_art + Local lcidvanzari, lcSql, lnSucces + Store '' To lcidvanzari + + Select * From crsfacturi With (Buffering = .T.) Where ales = 1 Into Cursor crsTmp + If Reccount() < 1 + amessagebox('Nu ati selectat vreun document!', 0 + 48, 'Atentie') + *!* modificare v 2.0.40 + *!* Return + *!* EndIf + Else + *!* modificare v 2.0.40 ^ + Select crsTmp + Scan + lcidvanzari = lcidvanzari + [, ] + Alltrim(Str(crsTmp.id_vanzare)) + Select crsTmp + Endscan + Use In crsTmp + lcidvanzari = Substr(lcidvanzari, 2) + lcSql = [select a.codmat,a.denumire,a.pret_achizitie,a.pret,a.subgrupa,sum(cantitate) as cantitate,client from fact_vfacturi_detalii a ] + ; + [ where a.id_vanzare in (] + Alltrim(lcidvanzari) + [)] + ; + [ group by a.denumire,a.codmat,a.pret_achizitie,a.pret,a.subgrupa,client] + ; + [ order by a.subgrupa,a.denumire ] + lnSucces = goExecutor.oexecute(lcSql, 'crssitconsum') + If lnSucces < 0 + amessagebox(goExecutor.cEroare, 0 + 16, "Eroare") + *!* modificare v 2.0.40 + *!* Return + *!* Endif + Else + *!* modificare v 2.0.40 ^ + Private pcDataora + pcDataora = get_ora(2) + Select crssitconsum + Report Form rap_transferart To Printer Prompt Preview + *!* modificare v 2.0.40 + Endif + Endif + *!* modificare v 2.0.40 ^ + Select crsfacturi +Endproc &&rap_transf_art + + +*--------------------------------------------------------------------------- +* Borderou documente de trimis la clienti grupat pe clienti +* Salveaza borderouri individiuale pdf si listeaza la imprimanta un raport cu toate borderourile [borderou1-borderou2] +* Un borderou pentru toti clientii sau un borderou pentru un client, daca se transmite tnIdPart +Procedure rap_borderou_clienti && lansat din frm_facturi (ofacturare.vcx) + Lparameters tcIds, tlPDF, tlListare, tcCursorFacturi + * tlSilent, tlPDF: se apeleaza cu parametri din generare_borderou_facturi si email_borderou_facturi pentru generare pdf silentios pentru fiecare id_borderou + * tlListare: se apeleaza din frm_facturi.do_listare + * tcIds : lista id-uri borderou C; id_borderou N + * tcCursorFacturi: optional, pentru citirea ctip_factura suprascris de utilizator (ACN!) + + Private pcDataora + Local loPreviewerConfig As "PreviewerConfig" + Local lcDestinationFile, lcSelect, lcSetare, lcSetareVizualizare, lcSql, ldDataBorderou, llSucces + Local lnIdBorderou, lcIds, lcCursor, lcCursor2 + pcDataora = get_ora(2) + + lcSelect = Select() + lcIds = IIF(TYPE('tcIds') = 'C', m.tcIds, IIF(TYPE('tcIds') = 'N', ALLTRIM(STR(m.tcIds)), '')) + llSucces = !EMPTY(m.lcIds) + lcCursor = SYS(2015) + SET STEP ON + IF m.llSucces + TEXT TO lcSql TEXTMERGE NOSHOW + Select client, data_act, numar_act, total_fara_tva, total_tva, total_cu_tva, valval, tvaval, totval, ctip_factura, in_valuta, valuta, id_vanzare, id_client, id_borderou, data_borderou, email_client, adresa_client + FROM fact_vborderou_detalii + WHERE id_borderou in (<>) + ORDER By 1, 2, 3 + ENDTEXT + + llSucces = goExecutor.oExecuta(m.lcSql, m.lcCursor) + + *************** + * Suprascriere ctip_factura special pentru ACN, pentru ca voiau ENERGIE ELECTRICA in loc de CHIRII SI UTILITATI pe borderou + * si nu am adaugat un tip nou de prestatii ENERGIE ELECTRICA + *************** + IF !EMPTY(m.tcCursorFacturi) AND USED(m.tcCursorFacturi) + SELECT (m.tcCursorFacturi) + SCAN + lnIdVanzare = id_vanzare + lcTipFactura = ALLTRIM(NVL(ctip_factura,'')) + UPDATE (m.lcCursor) SET ctip_factura = m.lcTipFactura WHERE id_vanzare = m.lnIdVanzare + ENDSCAN + ENDIF + ENDIF + + If m.llSucces + *********************** + lcSetare = [BORDEROU] + lcSetareVizualizare = [PREVIZBORDEROU] + loPreviewerConfig = Createobject("PreviewerConfig") && rapoarte.prg + + * Listez toate borderourile intr-un singur raport + If m.tlListare + * m.loPreviewerConfig.SetValue("lDirectPrint", m.tlSilent) + goExport.export2frx(m.lcCursor, [rap_borderou_clienti], .F., m.lcSetareVizualizare, m.lcSetare, , , .T., , loPreviewerConfig) + Endif && tlListare + + * salvez pdf-uri cu borderouri individuale cu denumirea borderou_[aaaallzz]_[tnId].pdf + If m.tlPDF + SELECT distinct id_borderou FROM (m.lcCursor) INTO CURSOR cIdsBorderouListareTemp + SELECT cIdsBorderouListareTemp + lcRecc = ALLTRIM(STR(RECCOUNT())) + SCAN + lnIdBorderou = id_borderou + lcRecno = ALLTRIM(STR(RECNO())) + WAIT WINDOW 'Generare pdf borderou ' + m.lcRecno + '/' + m.lcRecc NOWAIT + lcCursor2 = SYS(2015) + SELECT * FROM (m.lcCursor) WHERE id_borderou = m.lnIdBorderou INTO CURSOR (m.lcCursor2) + SELECT (m.lcCursor2) + GO TOP + ldDataBorderou = data_borderou + lcDestinationFile = GetPDFBorderouFile(m.ldDataBorderou, m.lnIdBorderou) + If !File(m.lcDestinationFile) Or (File(m.lcDestinationFile) And amessagebox('Doriti sa suprascrieti ' + m.lcDestinationFile + '?', 4 + 32, _Screen.Caption) = 6) + m.loPreviewerConfig.SetValue("cDestFile", m.lcDestinationFile) + m.loPreviewerConfig.SetValue("lOpenDestFile", .F.) + m.loPreviewerConfig.SetValue("lDirectPrint", .T.) + m.loPreviewerConfig.SetValue("lOpenViewer", .F.) + *!* lcPdfHasImage = goApp.ReadIni([email_factura], "borderoupdfhasimage") + *!* llPdfHasImage = (m.lcPdfHasImage = "1") + *!* If Empty(m.lcPdfHasImage) + *!* goApp.WriteIni([email_factura], "borderoupdfhasimage", "0") + *!* llPdfHasImage = .F. + *!* Endif + *!* m.loPreviewerConfig.SetValue("lPDFasImage", m.llPdfHasImage) + + * tcAlias, tcRaport, tlCereTitlu, tcSetareVizualizare, tcSetareImprimanta, tcParametriListare, toListener, tlMultiPreview, tcReportPreviewer, toPreviewerConfig + goExport.export2frx(m.lcCursor2, [rap_borderou_clienti], .F., m.lcSetareVizualizare, m.lcSetare, , , .T., , loPreviewerConfig) + USE IN (SELECT(m.lcCursor2)) + Endif + + ENDSCAN && cIdsBorderouListareTemp + USE IN (SELECT('cIdsBorderouListareTemp')) + Endif && m.tlPDF + *********************** + *!* goExport.export2frx('crsBorderouFacturiTemp', [rap_borderou_clienti], , , , , , .T.) + Use In (Select(m.lcCursor)) + Endif && llSuccess + + Select (m.lcSelect) + Return m.llSucces +Endproc && rap_borderou_clienti \ No newline at end of file diff --git a/COMUN/programe/oproceduri_retete.prg b/COMUN/programe/oproceduri_retete.prg new file mode 100644 index 0000000..80db0b7 --- /dev/null +++ b/COMUN/programe/oproceduri_retete.prg @@ -0,0 +1,62 @@ +********* INCEPUT: viz_retetar *********** +Procedure viz_retetar +Private pnIdReteta +Store 0 To pnIdReteta +ofrm_ret = Createobject('frm_retetar') +ofrm_ret.Show(1) +Release ofrm_ret +*!* && Produse +*!* lcSelect1 = ['select distinct id_produs,codmat_pr,denumire_pr,um_pr,cont_pr ] + ; +*!* [ from ] + gcS + [.vgest_retetar where 1=2'] +*!* lcCursor1 = [crsProduse] +*!* lcSchema1 = [''] +*!* lcOrder1 = [denumire_pr] +*!* lcFiltru1 = [1=1] +*!* lcNume_coloane1= [codmat_pr;denumire_pr;um_pr;cont_pr] +*!* lcTitlu_coloane1 = [Cod produs,Denumire,Unitate de masura,Cont] +*!* +*!* PRIVATE pnId_produs,pncant_veche,pncant_noua +*!* STORE 0 TO pnId_produs,pncant_veche,pncant_noua +*!* +*!* &&Materiale +*!* lcSelect2 = ['select id_retetar,id_produs,id_material,codmat_mat,denumire_mat,'+] +; +*!* ['um_mat,cont_mat,cant_mat from ] + gcS + [.vgest_retetar where 1=2'] +*!* lcCursor2 = [crsMateriale] +*!* lcSchema2 = ['id_retetar n(5),id_produs n(10),id_material n(10),codmat_mat c(50),' +] +; +*!* ['denumire_mat c(100),um_mat c(6),cont_mat c(4),cant_mat n(12,4)'] +*!* lcOrder2 = [denumire_mat] +*!* lcFiltru2 = [ id_produs = ?pnId_produs ] +*!* lcNume_coloane2= [codmat_mat;denumire_mat;um_mat;cont_mat;cant_mat] +*!* lcTitlu_coloane2 = [Cod material,Denumire,Unitate de masura,Cont,Cantitate] +*!* +*!* ofrm_ret = CREATEOBJECT('frm_retetar') +*!* +*!* WITH ofrm_ret.ct_grid_search1 +*!* .cSelect = lcSelect1 +*!* .cSchema = lcSchema1 +*!* .cFiltruOriginal = lcFiltru1 +*!* .cFiltru = lcFiltru1 +*!* .cTitlu = 'PRODUSE' +*!* .corder = lcorder1 +*!* .cnume_coloane = lcnume_coloane1 +*!* .ctitlu_coloane = lctitlu_coloane1 +*!* .cnumecursor = lccursor1 +*!* ENDWITH + +*!* WITH ofrm_ret.ct_grid_search2 +*!* .cSelect = lcSelect2 +*!* .cSchema = lcSchema2 +*!* .cFiltruOriginal = lcFiltru2 +*!* .cFiltru = [1=1] +*!* .cTitlu = 'MATERIALE' +*!* .corder = lcorder2 +*!* .cnume_coloane = lcnume_coloane2 +*!* .ctitlu_coloane = lctitlu_coloane2 +*!* .cnumecursor = lccursor2 +*!* ENDWITH +*!* +*!* ofrm_ret.show(1) +*!* RELEASE ofrm_ret + +Endproc +********* SFARSIT: viz_retetar *********** \ No newline at end of file diff --git a/COMUN/programe/oproceduri_roadef.prg b/COMUN/programe/oproceduri_roadef.prg new file mode 100644 index 0000000..cdf9d66 --- /dev/null +++ b/COMUN/programe/oproceduri_roadef.prg @@ -0,0 +1,632 @@ +*!* 19.03.2015 +*!* marius.mutu +*!* VIZ_LUNI_BLOCATE - se afiseaza doar programele pe care are utilizatorul dreptul + +*** OPROCEDURI_ROADEF +**************************************** INCEPUT: viz_categorii_entitati ****************************** +Procedure viz_categorii_entitati +Private poCategorii_entitati,pcSchema,pcSelect +Store '' To poCategorii_entitati +If Used('crsCategorii_entitati') + Use In crsCategorii_entitati +Endif + +llAfisare=.F. +pcSchema = [''] +pcSelect=['select * from ] + gcS + [.vnom_categorii_entitati where 1=2'] +pcOrder=[categorie_entitate] +pcFiltru = [1=2] +gencursor('poCategorii_entitati','crsCategorii_entitati',pcSelect,pcFiltru,pcSchema,pcOrder,llAfisare) +poCategorii_entitati.ca_baza1.afisare() +ofrmcategorii=Createobject('frm_categorii_entitati') +ofrmcategorii.Show(1) +Release poCategorii_entitati,ofrmcategorii +Endproc +**************************************** SFARSIT: viz_categorii_entitati ****************************** +******************************************* +* PROCEDURE VIZ_LUNI_BLOCATE +* Date : 28/10/2005, 10:27:42 +* author : marius.mutu +* description: +******************************************* +Procedure VIZ_LUNI_BLOCATE + +Local lcObiect, lcCursor, lcSelect, lcFiltru, lcSchema, lcOrder, llAfisare, lcGroup, llModParam, lcFiltruOriginal, lcSeconds +lnSucces = 1 + +lcSeconds = SET("Seconds") +SET SECONDS ON +Private poPrograme +poPrograme = .F. +lcObiect = "poPrograme" +lcCursor = "crsPrograme" +*!* lcSelect = "select ide_program, explicatie as denumire from contafin_oracle.vdef_programe" + +TEXT TO lcSelect NOSHOW +select distinct p.ide_program, p.nume as denumire, p.instalat + from contafin_oracle.vDEF_UTIL_GRUP ug + join contafin_oracle.def_grup_drept gd on ug.id_grup = gd.id_grup + join contafin_oracle.vdef_programe p on gd.id_program = p.ide_program +ENDTEXT + +lcFiltru = "" +lcSchema = "" +lcOrder = "nume" +llAfisare = .F. +lcGroup = "" +llModParam = .T. +lcFiltruOriginal = "ug.id_util = ?gnIdUtil and ug.id_firma = ?gnIdFirma and gd.sters = 0 and p.instalat = 1 and p.nume not in ('INDEX.HTM', 'ROADEF', 'ROADEFSALARII', 'ROASUPORT', 'ROADECL', 'ROAMANAGER', 'ROASITFIN', 'ROAOFERTARE', 'ROAJURIDIC', 'ROAPRETURI')" +gencursor(lcObiect, lcCursor, lcSelect, lcFiltru, lcSchema, lcOrder, llAfisare, lcGroup, llModParam, lcFiltruOriginal) +poPrograme.ca_baza1.lAfisare = .T. +poPrograme.ca_baza1.afisare() +If !Used('crsPrograme') + lnSucces = -1 +Endif + + +If lnSucces > 0 + + Private poBlocat + poBlocat = .F. + lcObiect = "poBlocat" + lcCursor = "crsLuniAn" + lcSelect = "select * from blocatprogramluni" + +TEXT TO lcSelect NOSHOW +select an, luna, ide_program, blocat, id_util, utilizator, stare, dataora from + (select b.an, + b.luna, + b.ide_program, + b.blocat, + l1.id_log, + l1.id_util, + u.utilizator, + l1.stare, + l1.dataora, + max(l1.id_log) OVER(PARTITION BY l1.id_tabel) as idlogmax + from blocatprogramluni b + left join (select l.id_log, + l.tabel, + l.id_tabel, + l.camp, + l.ID_UTIL, + DECODE(VALOAREN, 1, 'BLOCAT', 'DEBLOCAT') AS STARE, + l.dataora + from LOG l) l1 + on l1.ID_TABEL = b.ide_program || b.an || lpad(b.luna, 2, '0') + and l1.tabel = 'BLOCATPROGRAMLUNI' + and l1.camp = 'BLOCAT' + and l1.id_util <> 2 + left join syn_utilizatori u + on l1.id_util = u.id_util) +ENDTEXT + lcFiltru = "1 = 2" + lcSchema = "" + lcOrder = "ide_program, an desc, luna desc" + llAfisare = .F. + lcGroup = "" + llModParam = .T. + lcFiltruOriginal = "nvl(id_log,0) = nvl(idlogmax,0)" + gencursor(lcObiect, lcCursor, lcSelect, lcFiltru, lcSchema, lcOrder, llAfisare, lcGroup, llModParam, lcFiltruOriginal) + poBlocat.ca_baza1.lAfisare = .T. + poBlocat.ca_baza1.afisare() + If !Used('crsLuniAn') + lnSucces = -1 + Endif +Endif + +If lnSucces > 0 + ovizblocate=Createobject('frm_viz_blocate') + ovizblocate.Show(1) +Endif + +If Used('crsPrograme') + Use In crsPrograme +Endif + +If Used('crsFirme') + Use In crsFirme +Endif + +If Used('crsLuniAn') + Use In crsLuniAn +Endif +SET SECONDS &lcSeconds +Endproc +*----------------------------------sfarsit procedura VIZ_LUNI_BLOCATE---------------------------------- + +Procedure viz_firme +Private pofirme,pcschema1,pcselect1 +Store '' To pofirme +If Used('v_firme') + Use In v_firme +Endif + +llAfisare=.F. +pcschema1 = [''] +pcselect1=['select * from syn_v_nom_firme where 1=2'] +pcorder1=[firma] +pcfiltru1 = [sters=0 and id_firma = ] + Alltrim(Str(gofirma.id_firma)) +gencursor('pofirme','v_firme',pcselect1,pcfiltru1,pcschema1,pcorder1,llAfisare) +pofirme.ca_baza1.afisare() + +*!* Select v_firme +*!* Scatter Name poRec +*!* ofrmfirme=Createobject("frm_firme") +*!* ofrmfirme.Show(1) + +If Reccount('v_firme')>0 + gnButon=1 + Select v_firme + Scatter Name loRec +*!* modificare 11.08 + AddProperty(loRec,"modificare_schema",0) +*!* modificare 11.08 ^ +*!* modificare ROADEF v 2.1.2 +*!* *!* modificare ROADEF v 2.0.23 +*!* lnCodSiruta = 0 +*!* If !Empty(Nvl(loRec.id_loc,0)) +*!* lcSql = [select siruta from syn_vnom_localitati where id_loc = ] + Alltrim(Str(loRec.id_loc)) +*!* lcCursor = [crstmpsiruta] +*!* If goExecutor.oExecuta(lcSql,lcCursor) +*!* Select (lcCursor) +*!* lnCodSiruta = siruta +*!* Use In (Select(lcCursor)) +*!* Endif +*!* Endif +*!* AddProperty(loRec,"siruta",lnCodSiruta) +*!* *!* modificare ROADEF v 2.0.23 ^ +*!* modificare ROADEF v 2.1.2 ^ +*!* 07.02.2008 +*!* Do Adauga_Modifica_Inregistrare With "firme",loRec,loRec.id_firma,"UPDATE" + Private poRec + poRec = loRec + loAdModFirme = Createobject("frm_firme_nou_desktopf",loRec,loRec.id_firma,"UPDATE") + loAdModFirme.Show(1) + llRet = gnButon +*!* 07.02.2008 ^ +Endif +*!* Release ofrmfirme +Release pofirme +Endproc && viz_firme + +******************************************* +* PROCEDURE def_calculatoare( ) +* Date : 08/24/06, 11:57:53 +* author : liana.macinic +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* +Procedure def_calculatoare( ) + +Private pocalc,pcschema1,pcselect1 +Store '' To pocalc +*!* pcschema1=['id_gestiune n(5),nume_gestiune c(50),cgest c(4),cont_gestiune c(4),ngest c(10),nrg n(4),ascd c(4),nr_grupa n(4),gest n(3)'] +pcschema1 = [''] +pcselect1=['select * from ] + gcS + [.vcalculatoare where 1=2'] +pcorder1=[denumire] +pcfiltru1 = [2=2] +llAfiseaza = .F. +gencursor('pocalc','crsCalc',pcselect1,pcfiltru1,pcschema1,pcorder1,llAfiseaza) +pocalc.ca_baza1.afisare() +ofrmgest=Createobject('frm_calc') +ofrmgest.Show(1) +Release pocalc + +Endproc +*----------------------------------sfarsit procedura def_calculatoare---------------------------------- + +******************************************* +* PROCEDURE set_calculatoare( ) +* Date : 08/24/06, 12:01:59 +* author : liana.macinic +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* +Procedure set_calculatoare( ) + +Private pocalc,pcschema1,pcselect1 +Store '' To pocalc +lcSchema = [SUCURSALA C(100), ID_SUCURSALA N(10), CALCULATOR C(100), COLOANE C(100), EXPLICATIA C(100), IDCOLOANA C(50), ] + [ID_CALC N(10), ID_CALCSETARE N(10), RESULTCOLOANA C(50), SETARE C(100), TABEL C(50), TIP C(10), TITLU C(100), TITLUCOLOANE C(100), VALOARE C(64), VALOARE_TEXT C(200)] +lcSelect=[SELECT SUCURSALA, ID_SUCURSALA, CALCULATOR, COLOANE, EXPLICATIA, IDCOLOANA, ID_CALC, ID_CALCSETARE, RESULTCOLOANA, SETARE, TABEL, TIP, TITLU, TITLUCOLOANE, VALOARE, VALOARE_TEXT FROM VCALC_SETARI] + +lcOrder=[sucursala,calculator,setare] +lcFiltru = [] +lcFiltruOriginal = [] +llAfiseaza = .F. +llModParam = .T. +lcGroup = [] +gencursor('pocalc','crsCalcsetari', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcGroup, llModParam, lcFiltruOriginal) +pocalc.ca_baza1.afisare() +ofrmgest=Createobject('frm_calcsetari') +ofrmgest.Show(1) +Release pocalc + + +Endproc +*----------------------------------sfarsit procedura set_calculatoare---------------------------------- + +******************************************* +* PROCEDURE grupuri_util( ) +* Date : 08/24/06, 15:15:22 +* author : liana.macinic +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* +Procedure grupuri_util( ) +Private pogrup,pcschema1,pcselect1 +Store '' To pogrup +*!* pcschema1=['id_gestiune n(5),nume_gestiune c(50),cgest c(4),cont_gestiune c(4),ngest c(10),nrg n(4),ascd c(4),nr_grupa n(4),gest n(3)'] +pcschema1 = [''] +pcselect1=['select * from ] + gcS + [.vgrupuri_utilizatori where 1=2'] +pcorder1=[denumire_grup] +pcfiltru1 = [2=2] +llAfiseaza = .F. +gencursor('pogrup','crsGrup',pcselect1,pcfiltru1,pcschema1,pcorder1,llAfiseaza) +pogrup.ca_baza1.afisare() +ofrmgest=Createobject('frm_grupUtil') +ofrmgest.Show(1) +Release pogrup + + +Endproc +*----------------------------------sfarsit procedura grupuri_util---------------------------------- + +******************************************* +* PROCEDURE util_rol_intern( ) +* Date : 08/24/06, 15:15:38 +* author : liana.macinic +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* +Procedure util_rol_intern( ) + +Private poutil,pcschema1,pcselect1 +Store '' To poutil +*!* pcschema1=['id_gestiune n(5),nume_gestiune c(50),cgest c(4),cont_gestiune c(4),ngest c(10),nrg n(4),ascd c(4),nr_grupa n(4),gest n(3)'] +pcschema1 = [''] +pcselect1=['select * from ] + gcS + [.vutilizatori_rol_intern where 1=2'] +pcorder1=[sucursala, denumire_grup, utilizator, partener, contact] +pcfiltru1 = [2=2] +llAfiseaza = .F. +*!* modificare v 2.0.11 +lcFiltruOriginal = Substr(gcCondSucursala,5) +llModParam = .F. +lcGroup = [] +gencursor('poutil','crsUtil',pcselect1,pcfiltru1,pcschema1,pcorder1,llAfiseaza, lcgroup, llModParam, lcFiltruOriginal) +*!* gencursor('poutil','crsUtil',pcselect1,pcfiltru1,pcschema1,pcorder1,llAfiseaza) +*!* modificare v 2.0.11 ^ +poutil.ca_baza1.afisare() +ofrmgest=Createobject('frm_Utilizatori') +ofrmgest.Show(1) +Release poutil + +Endproc +*----------------------------------sfarsit procedura util_rol_intern---------------------------------- + +******************************************* +* PROCEDURE list_utilizatori( ) +* Date : 08/25/06, 13:41:16 +* author : liana.macinic +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* +Procedure list_utilizatori( ) +Local lcSelect, lcFiltru, lcSchema, lcOrder, lccoloane, lcTitlu, lcTitluColoane, lcFiltruOriginal, lcNumeProc +lcSelect = [select * FROM vNOM_SUCURSALE] +lcFiltru = [1=2] +lcSchema = [] +lcOrder = [sucursala] +lccoloane = [sucursala] +lcTitlu = [Alegeti sucursala] +lcTitluColoane = [Sucursala] +lcFiltruOriginal = [] +lcNumeProc = "" +lnPornire = 6 +llDesktop = .T. +locauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lccoloane, lcTitlu, lcTitluColoane, lcNumeProc, .F., lcFiltruOriginal,,lnPornire,,,llDesktop) +If buton=2 + Return +Endif + +lcSelect = [select * from vutilizatori_rol_intern ]+; + IIF(!Empty(locauta.id_sucursala) And !Isnull(locauta.id_sucursala), [where id_sucursala = ]+Alltrim(Str(locauta.id_sucursala)),[]) +lcCursor = [crsUtilizatori] +lnSucces = goExecutor.oExecute(lcSelect,lcCursor) +If lnSucces < 0 + aMessagebox(goExecutor.cEroare,16,"Eroare") + Exit +Endif + +*!* MESSAGEBOX(locauta.id_sucursala) + +Select crsUtilizatori +Report Form util To Printer Prompt Preview + +Endproc +*----------------------------------sfarsit procedura list_utilizatori---------------------------------- + +******************************************* +* PROCEDURE list_calculatoare( ) +* Date : 08/25/06, 13:41:31 +* author : liana.macinic +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* +Procedure list_calculatoare( ) +Local lcSelect, lcFiltru, lcSchema, lcOrder, lccoloane, lcTitlu, lcTitluColoane, lcFiltruOriginal, lcNumeProc +lcSelect = [select * FROM vNOM_SUCURSALE] +lcFiltru = [1=2] +lcSchema = [] +lcOrder = [sucursala] +lccoloane = [sucursala] +lcTitlu = [Alegeti sucursala] +lcTitluColoane = [Sucursala] +lcFiltruOriginal = [] +lcNumeProc = "" +lnPornire = 6 +llDesktop = .T. +locauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lccoloane, lcTitlu, lcTitluColoane, lcNumeProc, .F., lcFiltruOriginal,,lnPornire,,,llDesktop) +If buton=2 + Return +Endif + +lcSelect = [select * from vcalculatoare ]+; + IIF(!Empty(locauta.sucursala), [where id_sucursala = ]+Alltrim(Str(locauta.id_sucursala)),[])+[ order by sucursala] +lcCursor = [crsCalc] +lnSucces = goExecutor.oExecute(lcSelect,lcCursor) +If lnSucces < 0 + aMessagebox(goExecutor.cEroare,16,"Eroare") + Exit +Endif + + +Select crsCalc +Report Form calculatoare To Printer Prompt Preview +Endproc +*----------------------------------sfarsit procedura list_calculatoare---------------------------------- + +******************************************* +* PROCEDURE list_gestiuni( ) +* Date : 08/25/06, 13:42:03 +* author : liana.macinic +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* +Procedure list_gestiuni( ) +Local lcSelect, lcFiltru, lcSchema, lcOrder, lccoloane, lcTitlu, lcTitluColoane, lcFiltruOriginal, lcNumeProc +lcSelect = [select * FROM vNOM_SUCURSALE] +lcFiltru = [1=2] +lcSchema = [] +lcOrder = [sucursala] +lccoloane = [sucursala] +lcTitlu = [Alegeti sucursala] +lcTitluColoane = [Sucursala] +lcFiltruOriginal = [] +lcNumeProc = "" +lnPornire = 6 +llDesktop = .T. +locauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lccoloane, lcTitlu, lcTitluColoane, lcNumeProc, .F., lcFiltruOriginal,,lnPornire,,,llDesktop) +If buton=2 + Return +Endif + +lcSelect = [select * from vnom_gestiuni order by sucursala,nume_gestiune] +*!* +; +*!* IIF(!EMPTY(locauta.sucursala), [where id_sucursala = ]+ALLTRIM(STR(locauta.id_sucursala)),[]) +lcCursor = [crsGest] +lnSucces = goExecutor.oExecute(lcSelect,lcCursor) +If lnSucces < 0 + aMessagebox(goExecutor.cEroare,16,"Eroare") + Exit +Endif + +Select crsGest +Report Form gestiuni To Printer Prompt Preview + +Endproc +*----------------------------------sfarsit procedura list_gestiuni---------------------------------- + +******************************************* +* PROCEDURE list_org_calc( ) +* Date : 08/25/06, 13:42:24 +* author : liana.macinic +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* +Procedure list_org_calc( ) +&&code goes here + + +Endproc +*----------------------------------sfarsit procedura list_org_calc---------------------------------- + +******************************************* +* PROCEDURE list_org_gest( ) +* Date : 08/25/06, 13:42:41 +* author : liana.macinic +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* +Procedure list_org_gest( ) +&&code goes here + + +Endproc +*----------------------------------sfarsit procedura list_org_gest---------------------------------- +******************************************* +* PROCEDURE list_org_util( ) +* Date : 08/25/06, 13:42:58 +* author : liana.macinic +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* +Procedure list_org_util( ) +ofrmgest=Createobject('frm_listutil') +ofrmgest.Show(1) + +Endproc +*----------------------------------sfarsit procedura list_org_util---------------------------------- + +*!* iif(lower(pcPctLucru)='sucursala','Punct de lucru',IIF(LOWER(pcPctLucru) = 'partener',[Partener],'Grup')) + [: ]+ iif(allt(pcPctLucru) = 'sucursala',allt(sucursala),IIF(ALLT(pcPctLucru) = 'partener',ALLT(partener),allt(denumire_grup))) + +*---------------------------------- inceput procedura asociere_parteneri_sectii ---------------------------------- +Procedure asociere_parteneri_sectii +Parameters tnTip + +If Empty(tnTip) Or Isnull(tnTip) + Return +Endif + +Private pnTip_asociere +pnTip_asociere = tnTip + +Private poAsociere +Local lcSchema, lcSelect, lcFiltru, lcOrder, llAfiseaza, lcGroup, llModParam, lcFiltruOriginal +Store '' To poAsociere + +lcSchema = [] +lcSelect=[select * from vasociere_parteneri_sectii] +lcOrder=[denumire] +lcFiltru = [] +llAfiseaza = .F. +lcGroup = "" +llModParam = .T. +lcFiltruOriginal = [id_tip=]+Alltrim(Str(pnTip_asociere)) + +gencursor('poAsociere','crsAsociere',lcSelect,lcFiltru,lcSchema,lcOrder,llAfiseaza, lcGroup, llModParam, lcFiltruOriginal) +poAsociere.ca_baza1.afisare() + +lops = Createobject('frm_parteneri_sectii') +lops.Show(1) + +If Used('crsAsociere') + Use In crsAsociere +Endif + +Endproc && asociere_parteneri_sectii +*----------------------------------sfarsit procedura asociere_parteneri_sectii ---------------------------------- + +*---------------------------------- inceput procedura asociere_parteneri_gestiuni ---------------------------------- +Procedure asociere_parteneri_gestiuni +Parameters tnTip + +If Empty(tnTip) Or Isnull(tnTip) + Return +Endif + +Private pnTip_asociere +pnTip_asociere = tnTip + +Private poAsociere +Local lcSchema, lcSelect, lcFiltru, lcOrder, llAfiseaza, lcGroup, llModParam, lcFiltruOriginal +Store '' To poAsociere + +lcSchema = [] +lcSelect=[select id_asociere, id_part, denumire, id_gestiune, nume_gestiune, cont, id_util, dataora from vasociere_parteneri_gestiuni] +lcOrder=[cont,denumire,nume_gestiune] +lcFiltru = [] +llAfiseaza = .F. +lcGroup = "" +llModParam = .T. +lcFiltruOriginal = [id_tip=]+Alltrim(Str(pnTip_asociere)) + +gencursor('poAsociere','crsAsociere',lcSelect,lcFiltru,lcSchema,lcOrder,llAfiseaza, lcGroup, llModParam, lcFiltruOriginal) +poAsociere.ca_baza1.afisare() + +lops = Createobject('frm_parteneri_gestiuni') +lops.Show(1) + +If Used('crsAsociere') + Use In crsAsociere +Endif + +Endproc && asociere_parteneri_gestiuni +*----------------------------------sfarsit procedura asociere_parteneri_gestiuni ---------------------------------- +Procedure viz_log_redeschid + +*!* lcSelect = [select * from vlog_redeschid ] +*!* lcCursor = [crsLog_redeschid] +*!* lnSucces = goExecutor.oExecute(lcSelect,lcCursor) +*!* If lnSucces < 0 +*!* aMessagebox(goExecutor.cEroare,16,"Eroare") +*!* Endif + +PRIVATE poLog_redeschid +STORE '' TO poLog_redeschid + +Local lcSchema, lcSelect, lcOrder, lcFiltru, lcFiltruOriginal, llAfiseaza, lcGroup, lcFiltruOriginal +lcSchema = [] +lcSelect = [select * from vlog_redeschid] +lcOrder = [] +lcGroup = [] +lcFiltru = [] +lcFiltruOriginal = [] +llModParam = .T. +llAfiseaza = .F. + +gencursor('poLog_redeschid','crsLog_redeschid', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcGroup, llModParam, lcFiltruOriginal) +poLog_redeschid.ca_baza1.afisare() + +Create Cursor crsLog_luni (perioada c(22), anul N(4), luna N(2)) +Insert Into crsLog_luni (perioada) Values ("") + +Select distinct Alltrim(Str(anul))+'-'+Alltrim(Str(luna)) As perioada, anul, luna ; + from crsLog_redeschid ; + into Cursor crsLog_luni2 ; + ORDER BY anul desc, luna desc + +Select crsLog_luni +Append From Dbf("crsLog_luni2") +If Used("crsLog_luni2") + Use In crsLog_luni2 +ENDIF + +SELECT crsLog_luni +GO TOP + +Select crsLog_redeschid + +lolr = Createobject('frm_log_redeschid') +lolr.Show(1) + +If Used('crsLog_redeschid') + Use In crsLog_redeschid +Endif + +If Used('crsLog_luni') + Use In crsLog_luni +Endif + +Endproc && viz_log_redeschid +*----------------------------------sfarsit procedura viz_log_redeschid ---------------------------------- diff --git a/COMUN/programe/oproceduri_roadef_sal.prg b/COMUN/programe/oproceduri_roadef_sal.prg new file mode 100644 index 0000000..a7e13dc --- /dev/null +++ b/COMUN/programe/oproceduri_roadef_sal.prg @@ -0,0 +1,1218 @@ +******************************************* +* PROCEDURE inchidprog( ) +* Date : 05/23/05, 11:32:30 +* author : liana.macinic +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* +PROCEDURE inchidprog( ) + +RETURN + +ENDPROC +*----------------------------------sfarsit procedura inchidprog---------------------------------- + +*___________________________________________ +Procedure nrord +Parameters ALI +Sele &ALI +A=Reccount() +If A=0 + Return +Endif +If A>65000 + Return 0 +Endif +Declare NROR(A) +K=0 +Scan + K=K+1 + NROR(K)=Recno() +Endscan +Return + +Function NRCRT +NR=Ascan(NROR,Recno()) +Return NR +********************** +*_____________________________________- +PROCEDURE IESIRE + +QUIT +RETURN +*___________________________________________ +Procedure mesaj +Parameters m1,m2 +ot=Create('text') +ot.label2.Caption=m1 +ot.label3.Caption=m2 +ot.Show(1) +Return +*___________________________________________ +Procedure danu +Parameters m1 +od=Create('danu') +od.label1.Caption=m1 +od.Show(1) +RETURN + +*_________________________________________________________ +PROCEDURE caut_alfa_cursor +PARAMETERS NUMEBAZA,NUMECIMP,CAPTEXT,VARMEM +LOCAL MC0,MC1,MC2, llVizibil +SET SAFETY OFF +llVizibil = .t. + +MC0='SELE '+NUMEBAZA +MC1='VARMEM=M.'+NUMECIMP +*MC2='SET order TO TAG '+NUMECIMP +MC2 = [INDEX ON ] +NUMECIMP+ [ TAG nume OF &loc\&nfscurt\tempo\xindex.idx COMPACT ASCENDING ] + + +*!* &MC0 +*!* &MC2 +*!* GO TOP + +LOCAL lcNumeCol2 +STORE '' TO lcNumeCol2 + +LcCol = ALLTRIM(NUMEBAZA) + '.cod_fiscal' +IF TYPE(LcCol) # 'U' + lcNumeCol2 = 'cod_fiscal' +ENDIF + +LcCol = ALLTRIM(NUMEBAZA) + '.gest' +IF TYPE(LcCol) # 'U' + lcNumeCol2 = 'gest' +ENDIF + +LcCol = ALLTRIM(NUMEBAZA) + '.id_sectie' +IF TYPE(LcCol) # 'U' + lcNumeCol2 = 'id_sectie' +ENDIF + +IF EMPTY(lcNumeCol2) + lcNumeCol2 = 'space(4)' + llVizibil = .f. +ENDIF + +LcCol = ALLTRIM(NUMEBAZA) + '.id' +IF TYPE(LcCol) # 'U' + lcNumeCol3 = 'id' +ELSE + lcNumeCol3 = 'space(4)' +ENDIF + +SELECT DISTINCT &NUMECIMP, &lcNumeCol2, &lcNumeCol3 FROM (numebaza) INTO CURSOR tnomenclator READWRITE ORDER BY &NUMECIMP + +OCA=CREATEOBJECT("CAUTALFa") +OCA.CAPTION=CAPTEXT +OCA.GRID1.RECORDSOURCE='tnomenclator' +OCA.GRID1.COLUMN1.CONTROLSOURCE = NUMECIMP +OCA.GRID1.COLUMN2.CONTROLSOURCE = lcNumeCol2 +OCA.GRID1.COLUMN2.visible = llVizibil +OCA.cmdrenunt1.visible=.t. +OCA.command1.visible=.f. +OCA.command2.visible=.f. +OCA.command3.visible=.f. +OCA.SHOW(1) + +*!* &MC0 +*!* SCATTER MEMVAR +*!* SET FILTER TO + +IF buton=2 + USE IN tnomenclator + RETURN +ENDIF + +lcFile = ADDBS(gcTempPath) + 'xindex.idx' +IF FILE(lcFile) + SET INDEX TO + DELETE FILE &lcFile +ENDIF +*!* &MC1 + +SELECT tnomenclator +SCATTER MEMVAR + +&MC1 + + +USE IN tnomenclator +RETURN + +*_________________________________________________________ +Procedure CAUT_ALF +Parameters NUMEBAZA,NUMECIMP,CAPTEXT,VARMEM +Local MC0,MC1,MC2 +Set Safety Off +MC0='SELE '+NUMEBAZA +MC1='VARMEM=M.'+NUMECIMP +MC2='SET order TO TAG '+NUMECIMP + +&MC0 +Go Top +If Eof() + Appe Blank +Endif +&MC2 +OCA=Createobject("CAUTALF") +OCA.Caption=CAPTEXT +OCA.GRID1.RecordSource=NUMEBAZA +OCA.GRID1.COLUMN1.ControlSource=NUMECIMP +OCA.Show(1) + +Scatter Memvar +&MC1 + +Return + + +*_________________________________________________________ + + +******************************************* +* PROCEDURE introd_respsal( ) +* Date : 05/23/05, 12:27:24 +* author : liana.macinic +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* +PROCEDURE introd_respsal( ) + +Private poresp,pcschema1,pcselect1 +Store '' To poresp +If Used('v_resp') + Use In v_resp +Endif + +pcschema1=[''] +pcselect1=['select * from ] + gcS + [.sal_responsabil where 1=2'] +pcorder1=[nume,prenume] +pcfiltru1 = [sters = 0] +llAfiseaza = .F. +gencursor('poresp','v_resp',pcselect1,pcfiltru1,pcschema1,pcorder1,llAfiseaza) +poresp.ca_baza1.afisare() +ofrmresp=Createobject('frm_resp_sal') +ofrmresp.Show(1) +Release poresp + +ENDPROC +*----------------------------------sfarsit procedura introd_respsal---------------------------------- + +******************************************* +* PROCEDURE zile_lucr( ) +* Date : 05/23/05, 15:30:38 +* author : liana.macinic +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* +PROCEDURE zile_lucr( ) + +*----------- sarbatori +Private posarbat,pcschema1,pcselect1 +Store '' To posarbat +If Used('v_sarbat') + Use In v_sarbat +Endif +pcschema1=['data d,sarbatoare c(50),id_sarbat n(10)'] +pcselect1=[select data,sarbatoare,id_sarbat from ] + gcS + [.sal_nom_sarbatori where sters = 0] +pcorder1=[data] +*!* modificare v 2.0.5 +*!* pcfiltru1 = [extract(year from data) = ] + ALLTRIM(STR(gnAN)) + [ and sters = 0] +IF gnLuna = 12 + pcfiltru1 = [extract(year from data) between ] + ALLTRIM(STR(gnAN)) + [ and ] + ALLTRIM(STR(gnAN+1)) + [ and sters = 0] +ELSE + pcfiltru1 = [extract(year from data) = ] + ALLTRIM(STR(gnAN)) + [ and sters = 0] +ENDIF +*!* modificare v 2.0.5 ^ +llAfiseaza = .F. +gencursor('posarbat','v_sarbat',pcselect1,pcfiltru1,pcschema1,pcorder1,llAfiseaza) +posarbat.ca_baza1.afisare() +SELECT v_sarbat + + +*----------- zile lucratoare +Private pozile,pcschema2,pcselect2 +Store '' To pozile +If Used('v_zile') + Use In v_zile +Endif +pcschema2=[''] +pcselect2=[select * from ] + gcS + [.sal_calendar where 1=2] +pcorder2=[luna,an] +*!* pcfiltru2 = [ 2 = 2 ] +pcfiltru2 = [ luna = ] + ALLTRIM(STR(gnLuna)) + [ and an = ]+ALLTRIM(STR(gnAn)) + +llAfiseaza = .F. +gencursor('pozile','v_zile',pcselect2,pcfiltru2,pcschema2,pcorder2,llAfiseaza) +pozile.ca_baza1.afisare() +SELECT v_sarbat + +*-------------- +PRIVATE pnIdSal,pnZileluc,pnOreluc,pnOrestas,pnORESUPLUNA +STORE 0 TO pnIdSal,pnZileluc,pnOreluc,pnOrestas,pnORESUPLUNA + +pnIdSal = v_zile.id_Calendar +pnZileluc = v_zile.zileluc +pnOreluc = v_zile.oreluc +pnOrestas = v_zile.orestas +pnORESUPLUNA = v_zile.ORESUPLUNA + +ofrmform=Createobject('frm_zileluc') +ofrmform.Show(1) + +IF gnButon == 1 + lcSql = [update ] + gcS +[.sal_calendar set zileluc = ] + ALLTRIM(STR(NVL(pnZileluc,0))) + [,] +; + [ oreluc = ] + ALLTRIM(STR(NVL(pnOreluc,0))) +; + [,orestas = ] + ALLTRIM(STR(NVL(pnOrestas,0))) +; + [,ORESUPLUNA = ] + ALLTRIM(STR(NVL(pnORESUPLUNA,0))) +; + [where id_calendar = ] + ALLTRIM(STR(NVL(pnIdSal,0))) + + lnSucces = goExecutor.oExecute(lcSql) + IF lnSucces < 0 + MESSAGEBOX(goExecutor.cEroare,0 +16,'Eroare') + ENDIF + goExecutor.oReset() + + RETURN lnSucces +ENDIF +Release posarbat,ofrmform + + +ENDPROC +*----------------------------------sfarsit procedura zile_lucr---------------------------------- + +******************************************* +* PROCEDURE nom_formatii( ) +* Date : 05/26/05, 16:37:20 +* author : liana.macinic +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* +PROCEDURE nom_formatii( ) +Private poformatii,pcschema1,pcselect1 +Store '' To poformatii +If Used('v_formatii') + Use In v_formatii +Endif +*!* DEBUG +*!* SUSPEND +pcschema1=[''] +*!* pcselect1=[select f.*,s.SECTIE,t.TRANSA from ] + gcS +; +*!* [.sal_nom_formatii f left join ]+gcS; +*!* +[.vnom_sectii s on f.id_sectie = s.ID_SECTIE ]+; +*!* [ left join ]+gcS+[.sal_vnom_transe t on f.id_sectie = t.ID_TRANSA where 1=2] +IF gnSAL_SPECIAL = 4 AND gnIdProgram = 9 +pcselect1=[select f.*,S.SECTIE,T.TRANSA,semn.denumire as semnatura,semn.directie from ] + gcS + [.sal_nom_locmunca f ] + ; + [ LEFT JOIN ] + GCS + [.VNOM_SECTII S ON F.ID_SECTIE = S.ID_SECTIE ] +; + [ LEFT JOIN ] + GCS + [.SAL_VNOM_TRANSE T ON F.ID_TRANSA = T.ID_TRANSA ]+; + [left join sal_semnaturi semn on f.id_semnatura = semn.id_semnatura ]+; + [ where 1=2] +ELSE +pcselect1=[select f.*,S.SECTIE,T.TRANSA,semn.denumire as semnatura,semn.directie from ] + gcS + [.sal_nom_formatii f ] + ; + [ LEFT JOIN ] + GCS + [.VNOM_SECTII S ON F.ID_SECTIE = S.ID_SECTIE ] +; + [ LEFT JOIN ] + GCS + [.SAL_VNOM_TRANSE T ON F.ID_TRANSA = T.ID_TRANSA ]+; + [left join sal_semnaturi semn on f.id_semnatura = semn.id_semnatura ]+; + [ where 1=2] +ENDIF +pcorder1=[ordine] +pcfiltru1 = [f.sters = 0] +llAfiseaza = .F. +gencursor('poformatii','v_formatii',pcselect1,pcfiltru1,pcschema1,pcorder1,llAfiseaza) +poformatii.ca_baza1.afisare() +SELECT V_FORMATII +ofrmform=Createobject('frm_formatii') +ofrmform.Show(1) +Release poformatii + +ENDPROC +*----------------------------------sfarsit procedura nom_formatii---------------------------------- + +******************************************* +* PROCEDURE nom_meserii( ) +* Date : 05/23/05, 12:27:24 +* author : liana.macinic +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* +Procedure nom_meserii( ) + + Private poresp,pcschema1,pcselect1 + Local lnDiferente,lcCursor + Store '' To poresp + lcCursor = [crsTemp] + If Used('v_meserii') + Use In v_meserii + Endif + + lcSql = [select pack_def_salarii.verifica_versiune_cor() as dif from dual] + If goExecutor.oExecuta(lcSql,lcCursor) + Select (lcCursor) + lnDiferente = Dif + Use In (Select(lcCursor)) + + pcschema1=[''] + pcselect1=['select * from ] + gcS + [.sal_nom_mes where 1=2'] + pcorder1=[meserie] + pcfiltru1 = [sters = 0] + llAfiseaza = .F. + gencursor('poresp','v_meserii',pcselect1,pcfiltru1,pcschema1,pcorder1,llAfiseaza) + poresp.ca_baza1.afisare() + ofrmresp=Createobject('frm_meserii',lnDiferente) + ofrmresp.Show(1) + Release poresp + Endif + +Endproc +*----------------------------------sfarsit procedura nom_meserii---------------------------------- + + +******************************************* +* PROCEDURE nom_transe( ) +* Date : 05/23/05, 12:27:24 +* author : liana.macinic +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* +PROCEDURE nom_transe( ) + +Private potransa,pcschema1,pcselect1 +Store '' To potransa +If Used('v_transe') + Use In v_transe +Endif + +pcschema1=[''] +pcselect1=['select * from ] + gcS + [.sal_nom_transe where 1=2'] +pcorder1=[transa] +pcfiltru1 = [sters = 0] +llAfiseaza = .F. +gencursor('potransa','v_transe',pcselect1,pcfiltru1,pcschema1,pcorder1,llAfiseaza) +potransa.ca_baza1.afisare() +ofrmresp=Createobject('frm_transe') +ofrmresp.Show(1) +Release potransa + +ENDPROC +*----------------------------------sfarsit procedura nom_transe---------------------------------- +******************************************* +* PROCEDURE nom_clasesal( ) +* Date : 05/23/05, 12:27:24 +* author : liana.macinic +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* +PROCEDURE nom_clasesal( ) + +Private poclasesal,pcschema1,pcselect1 +Store '' To poclasesal +If Used('v_clasesal') + Use In v_clasesal +Endif + +pcschema1=[''] +pcselect1=['select * from ] + gcS + [.sal_nom_clasesal where 1=2'] +pcorder1=[tarifar] +pcfiltru1 = [sters = 0] +llAfiseaza = .F. +gencursor('poclasesal','v_clasesal',pcselect1,pcfiltru1,pcschema1,pcorder1,llAfiseaza) +poclasesal.ca_baza1.afisare() +ofrmresp=Createobject('frm_clasesal') +ofrmresp.Show(1) +Release poclasesal + +ENDPROC +*----------------------------------sfarsit procedura nom_clasesal---------------------------------- + +******************************************* +* PROCEDURE nom_tipctr( ) +* Date : 05/23/05, 12:27:24 +* author : liana.macinic +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* +PROCEDURE nom_tipctr + +Private potipctr,pcschema1,pcselect1 +Store '' To potipctr +If Used('v_tipctr') + Use In v_tipctr +Endif + +pcschema1=[''] +pcselect1=['select * from ] + gcS + [.sal_vnom_tipctr where 1=2'] +pcorder1=[] +pcfiltru1 = [sters = 0] +llAfiseaza = .F. +gencursor('potipctr','v_tipctr',pcselect1,pcfiltru1,pcschema1,pcorder1,llAfiseaza) +potipctr.ca_baza1.afisare() +ofrmresp=Createobject('frm_tipctr') +ofrmresp.Show(1) +Release poclasesal + +ENDPROC + +******************************************* +* PROCEDURE nom_sporuri( ) +* Date : 06/17/05, 09:04:27 +* author : liana.macinic +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* +*!* modificare ROASAL v 2.0.0 +*!* PROCEDURE nom_sporuri( ) +*!* Private ponomspor,pcschema1,pcselect1 +*!* Store '' To ponomspor +*!* If Used('v_nomspor') +*!* Use In v_nomspor +*!* Endif +*!* pcschema1=[''] +*!* pcselect1=['select * from ] + gcS + [.sal_vnom_sporuri where 1=2'] +*!* pcorder1=[] +*!* pcfiltru1 = [sters = 0] +*!* llAfiseaza = .F. +*!* gencursor('ponomspor','v_nomspor',pcselect1,pcfiltru1,pcschema1,pcorder1,llAfiseaza) +*!* ponomspor.ca_baza1.afisare() +*!* ofrmresp=Createobject('frm_nomspor') +*!* ofrmresp.Show(1) +*!* Release poclasesal +*!* ENDPROC +*!* modificare ROASAL v 2.0.0 ^ +*----------------------------------sfarsit procedura nom_sporuri---------------------------------- + + +******************************************* +* PROCEDURE nom_popriri( ) +* Date : 06/17/05, 13:52:11 +* author : liana.macinic +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* +PROCEDURE nom_popriri( ) +Private ponompop,pcschema1,pcselect1 +Store '' To ponompop +If Used('v_nompop') + Use In v_nompop +Endif + +pcschema1=[''] +pcselect1=['select * from ] + gcS + [.sal_vnom_popriri where 2=2'] +pcorder1=[] +pcfiltru1 = [sters = 0] +llAfiseaza = .F. +gencursor('ponompop','v_nompop',pcselect1,pcfiltru1,pcschema1,pcorder1,llAfiseaza) +ponompop.ca_baza1.afisare() +SELECT v_nompop +ofrmpop=Createobject('frm_nompopriri') +ofrmpop.Show(1) +Release ponompop + + +ENDPROC +*----------------------------------sfarsit procedura nom_popriri---------------------------------- + +******************************************* +* PROCEDURE nom_grpmun( ) +* Date : 06/17/05, 15:03:04 +* author : liana.macinic +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* +PROCEDURE nom_grpmun( ) +Private ponomgrp,pcschema1,pcselect1 +Store '' To ponomgrp +If Used('v_nomgrp') + Use In v_nomgrp +Endif + +pcschema1=[''] +pcselect1=['select * from ] + gcS + [.sal_coef_cas where 2=2'] +pcorder1=[] +pcfiltru1 = [sters = 0] +llAfiseaza = .F. +gencursor('ponomgrp','v_nomgrp',pcselect1,pcfiltru1,pcschema1,pcorder1,llAfiseaza) +ponomgrp.ca_baza1.afisare() +SELECT v_nomgrp +ofrmpop=Createobject('frm_grpmun') +ofrmpop.Show(1) +Release ponomgrp +*!* SELECT v_nomgrp +*!* USE + +ENDPROC +*----------------------------------sfarsit procedura nom_grpmun---------------------------------- + +******************************************* +* PROCEDURE nom_grdhand( ) +* Date : 06/17/05, 15:10:33 +* author : liana.macinic +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* +PROCEDURE nom_grdhand( ) + +Private ponomgrp,pcschema1,pcselect1 +Store '' To ponomgrp + +If Used('v_nomhand') + Use In v_nomhand +Endif + +pcschema1=[''] +pcselect1=['select * from ] + gcS + [.sal_nom_handicap where 2=2'] +pcorder1=[] +pcfiltru1 = [sters = 0] +llAfiseaza = .F. +gencursor('ponomgrp','v_nomhand',pcselect1,pcfiltru1,pcschema1,pcorder1,llAfiseaza) +ponomgrp.ca_baza1.afisare() +SELECT v_nomhand +ofrmpop=Createobject('frm_grdhand') +ofrmpop.Show(1) +Release ponompop + +*!* SELECT v_nomhand +*!* USE +ENDPROC +*----------------------------------sfarsit procedura nom_grdhand---------------------------------- + +******************************************* +* PROCEDURE nom_tipintret( ) +* Date : 06/17/05, 15:13:34 +* author : liana.macinic +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* +PROCEDURE nom_tipintret( ) + +Private ponomgrp,pcschema1,pcselect1 +Store '' To ponomgrp +If Used('v_nomintret') + Use In v_nomintret +Endif + +pcschema1=[''] +pcselect1=['select * from ] + gcS + [.sal_nom_dedsupl where 2=2'] +pcorder1=[] +pcfiltru1 = [sters = 0] +llAfiseaza = .F. +gencursor('ponomgrp','v_nomintret',pcselect1,pcfiltru1,pcschema1,pcorder1,llAfiseaza) +ponomgrp.ca_baza1.afisare() +SELECT v_nomintret +ofrmpop=Createobject('frm_tipintret') +ofrmpop.Show(1) +Release ponompop + +ENDPROC +*----------------------------------sfarsit procedura nom_tipintret---------------------------------- + +******************************************* +* PROCEDURE caseasig( ) +* Date : 06/17/05, 15:20:20 +* author : liana.macinic +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* +PROCEDURE caseasig( ) + +Private ponomgrp,pcschema1,pcselect1 +Store '' To ponomgrp +If Used('v_caseasig') + Use In v_caseasig +Endif + +pcschema1=[''] +pcselect1=['select * from ] + gcS + [.sal_vcaseasig where 2=2'] +pcorder1=[] +pcfiltru1 = [2=2] +llAfiseaza = .F. +gencursor('ponomgrp','v_caseasig',pcselect1,pcfiltru1,pcschema1,pcorder1,llAfiseaza) +ponomgrp.ca_baza1.afisare() +SELECT v_caseasig +ofrmpop=Createobject('frm_caseasig') +ofrmpop.Show(1) +Release ponompop + +ENDPROC +*----------------------------------sfarsit procedura caseasig---------------------------------- + +******************************************* +* PROCEDURE nom_tabvechimi( ) +* Date : 06/21/05, 09:54:04 +* author : liana.macinic +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* +PROCEDURE nom_tabvechimi( ) + +Private ponomgrp,pcschema1,pcselect1 +Store '' To ponomgrp +If Used('v_tabvechimi') + Use In v_tabvechimi +Endif + +pcschema1=[''] +pcselect1=['select * from ] + gcS + [.sal_vtab_vechimi where 2=2'] +pcorder1=[] +pcfiltru1 = [sters = 0] +llAfiseaza = .F. +gencursor('ponomgrp','v_tabvechimi',pcselect1,pcfiltru1,pcschema1,pcorder1,llAfiseaza) +ponomgrp.ca_baza1.afisare() +SELECT v_tabvechimi +ofrmpop=Createobject('frm_tabvechimi') +ofrmpop.Show(1) +Release ponompop + +ENDPROC +*----------------------------------sfarsit procedura nom_tabvechimi---------------------------------- + +******************************************* +* PROCEDURE nom_grilaco( ) +* Date : 06/21/05, 10:54:08 +* author : liana.macinic +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* +PROCEDURE nom_grilaco( ) +Private ponomgrp,pcschema1,pcselect1 +Store '' To ponomgrp +If Used('v_grilaco') + Use In v_grilaco +Endif + +pcschema1=['liminf n(3),limsup n(3),zile n(2),id_grilaco n(10),datai d,datas d'] +pcselect1=['select liminf,limsup,zile,id_grilaco,datai,datas from ] + gcS + [.sal_vnom_zileco where 2=2'] +pcorder1=[liminf,limsup,datai,datas] +pcfiltru1 = [1=1] +llAfiseaza = .F. +gencursor('ponomgrp','v_grilaco',pcselect1,pcfiltru1,pcschema1,pcorder1,llAfiseaza) +ponomgrp.ca_baza1.afisare() +SELECT v_grilaco +ofrmpop=Createobject('frm_grilaco') +ofrmpop.Show(1) +Release ponompop + +ENDPROC +*----------------------------------sfarsit procedura nom_grilaco---------------------------------- + +******************************************* +* PROCEDURE nom_ore( ) +* Date : 06/21/05, 11:41:51 +* author : liana.macinic +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* +PROCEDURE nom_ore( ) +Private ponomgrp,pcschema1,pcselect1 +Store '' To ponomgrp +If Used('v_nomore') + Use In v_nomore +Endif + +pcschema1=[''] +pcselect1=['select * from ] + gcS + [.sal_vnomore where 2=2'] +pcorder1=[] +pcfiltru1 = [sters = 0] +llAfiseaza = .F. +pcorder1 = [ ordine ] +gencursor('ponomgrp','v_nomore',pcselect1,pcfiltru1,pcschema1,pcorder1,llAfiseaza) +ponomgrp.ca_baza1.afisare() +SELECT v_nomore +ofrmpop=Createobject('frm_nomore') +ofrmpop.Show(1) +Release ponompop + +ENDPROC +*----------------------------------sfarsit procedura nom_ore---------------------------------- + +******************************************* +* PROCEDURE nom_tipcm( ) +* Date : 06/22/05, 09:34:42 +* author : liana.macinic +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* +PROCEDURE nom_tipcm( ) +Private ponomgrp,pcschema1,pcselect1 +Store '' To ponomgrp +If Used('v_nomtipcm') + Use In v_nomtipcm +Endif + +pcschema1=[''] +pcselect1=['select * from ] + gcS + [.sal_vnom_cm where 2=2'] +pcorder1=[] +pcfiltru1 = [sters = 0] +llAfiseaza = .F. +pcorder1 = [ ordine ] +gencursor('ponomgrp','v_nomtipcm',pcselect1,pcfiltru1,pcschema1,pcorder1,llAfiseaza) +ponomgrp.ca_baza1.afisare() +SELECT v_nomtipcm +ofrmpop=Createobject('frm_nomcm') +ofrmpop.Show(1) +Release ponompop + +ENDPROC +*----------------------------------sfarsit procedura nom_tipcm---------------------------------- + +******************************************* +* PROCEDURE impozit_luna( ) +* Date : 06/22/05, 11:36:42 +* author : liana.macinic +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* +PROCEDURE impozit_luna(tlImpAn) + +Private ponomgrp,pcschema1,pcselect1,plImpAn +Store '' To ponomgrp + +IF EMPTY(tlImpAn) + STORE .f. TO plImpAn +ELSE + STORE tlImpAn TO plImpAn +ENDIF + +If Used('v_imp') + Use In v_imp +Endif + +pcschema1=[''] +pcselect1=['select * from ] + gcS + [.sal_impozitar where 2=2'] +pcorder1=[] +IF plImpAn + pcfiltru1 = [sters = 0 and luna = 0 and an = ]+ALLTRIM(STR(gnAn)) +ELSE + pcfiltru1 = [sters = 0 and luna = ]+ALLTRIM(STR(gnLuna))+[ and an = ]+ALLTRIM(STR(gnAn)) +ENDIF + +llAfiseaza = .F. +pcorder1 = [ inf ] +gencursor('ponomgrp','v_imp',pcselect1,pcfiltru1,pcschema1,pcorder1,llAfiseaza) +ponomgrp.ca_baza1.afisare() +SELECT v_imp +ofrmpop=Createobject('frm_imp') +ofrmpop.Show(1) +Release ponompop + +ENDPROC +*----------------------------------sfarsit procedura impozit_luna---------------------------------- + +******************************************* +* PROCEDURE nom_limded( ) +* Date : 06/22/05, 13:23:29 +* author : liana.macinic +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* +PROCEDURE nom_limded( ) +Private ponomgrp,pcschema1,pcselect1 +Store '' To ponomgrp +If Used('v_deduceri') + Use In v_deduceri +ENDIF + +lcsql=[select NVL(id_calendar,0) as id_calendar,an,luna from ]+gcs+[.sal_calendar where an = ]+str(gnan)+[ and luna = ]+str(gnluna) +lnSucces = goExecutor.oExecute(lcSql,'crsCalendar') + IF lnSucces < 0 + MESSAGEBOX(goExecutor.cEroare,0 +16,'Eroare') + ENDIF + +pcschema1=[''] +pcselect1=['select * from ] + gcS + [.sal_vdeduceri where 2=2'] +pcorder1=[] +pcfiltru1 = [sters = 0] +llAfiseaza = .F. +pcorder1 = [ nrpers ] +gencursor('ponomgrp','v_deduceri',pcselect1,pcfiltru1,pcschema1,pcorder1,llAfiseaza) +ponomgrp.ca_baza1.afisare() +SELECT v_deduceri +ofrmpop=Createobject('frm_limded') +ofrmpop.Show(1) +Release ponompop + +IF USED('crsCalendar') + USE IN crsCalendar +ENDIF + +ENDPROC +*----------------------------------sfarsit procedura nom_limded---------------------------------- +******************************************* +* PROCEDURE nom_curscal( ) +* Date : 06/22/05, 14:01:51 +* author : liana.macinic +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* +PROCEDURE nom_curscal( ) +Private ponomgrp,pcschema1,pcselect1 +Store '' To ponomgrp +If Used('v_curscal') + Use In v_curscal +Endif + + +pcschema1=[''] +pcselect1=['select * from ] + gcS + [.sal_vnom_curs where 2=2'] +pcorder1=[] +pcfiltru1 = [sters = 0] +llAfiseaza = .F. +pcorder1 = [ denumire ] +gencursor('ponomgrp','v_curscal',pcselect1,pcfiltru1,pcschema1,pcorder1,llAfiseaza) +ponomgrp.ca_baza1.afisare() +SELECT v_curscal +ofrmpop=Createobject('frm_curscal') +ofrmpop.Show(1) +Release ponompop + +ENDPROC +*----------------------------------sfarsit procedura nom_curscal---------------------------------- +******************************************* +* PROCEDURE sal_coef( ) +* Date : 06/22/05, 15:27:17 +* author : liana.macinic +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* +Function modificare_coef_luna + Private pozile,pcschema2,pcselect2 + + lnSucces = goExecutor.oExecute('select MAX(coef) as coef from sal_impozitar where sters = 0 and '+[luna = ] + Alltrim(Str(gnLuna)) + [ and an = ]+Alltrim(Str(gnAn)),'crsImpozitar') + IF lnSucces < 0 + MESSAGEBOX(goExecutor.cEroare,0 +16,'Eroare') + RETURN + ENDIF + + SELECT crsImpozitar + + Store '' To pozile + If Used('v_coef') + Use In v_coef + Endif + pcschema2=[''] + pcselect2=[select * from ] + gcS + [.sal_calendar where 1=2] + pcorder2=[luna,an] + pcfiltru2 = [luna = ] + Alltrim(Str(gnLuna)) + [ and an = ]+Alltrim(Str(gnAn)) + llAfiseaza = .F. + gencursor('pozile','v_coef',pcselect2,pcfiltru2,pcschema2,pcorder2,llAfiseaza) + pozile.ca_baza1.afisare() + Select v_coef + Scatter Name pocoef + ADDPROPERTY(poCoef,'impozit',crsImpozitar.coef) + ofrmform=Createobject('frm_salcoef') + ofrmform.Show(1) +&& CURSORTOXML('v_coef','c:\coeficienti.xml',1,512) + If Used('v_coef') + Use In v_coef + ENDIF + USE IN crsImpozitar + Release posarbat,ofrmform + Return Iif(gnButon=1,pocoef,Null) +Endfunc +******************************************* +PROCEDURE sal_coef +PARAMETERS tlPreiauDinVariabile +*----------- zile lucratoare +*!* Private pozile,pcschema2,pcselect2 +*!* Store '' To pozile +*!* If Used('v_coef') +*!* Use In v_coef +*!* Endif +*!* pcschema2=[''] +*!* pcselect2=[select * from ] + gcS + [.sal_calendar where 1=2] +*!* pcorder2=[luna,an] +*!* pcfiltru2 = [ luna = ] + ALLTRIM(STR(gnLuna)) + [ and an = ]+ALLTRIM(STR(gnAn)) +*!* llAfiseaza = .F. +*!* *!* WAIT WINDOW ' Luna:'+STR(gnLuna) + ' an:'+STR(gnAn) +*!* gencursor('pozile','v_coef',pcselect2,pcfiltru2,pcschema2,pcorder2,llAfiseaza) +*!* pozile.ca_baza1.afisare() + +*!* SELECT v_coef +*!* *-------------- +*!* PRIVATE pnIdSal +*!* STORE 0 TO pnIdSal + +*!* pnIdSal = v_coef.id_Calendar +*!* SELECT v_coef +*!* SCATTER NAME pocoef + +*!* ofrmform=Createobject('frm_salcoef') +*!* ofrmform.Show(1) +IF PCOUNT() = 0 OR !tlPreiauDinVariabile + poCoef = modificare_coef_luna() +ENDIF +IF !ISNULL(poCoef) + lcSql = [begin pack_salarii.actualizeaza_calendar(] + ALLTRIM(STR(NVL(pocoef.id_Calendar,0))) + [,] + ; + ALLTRIM(STR(NVL(pocoef.c_meds,0),5,3)) + [,] +; + ALLTRIM(STR(NVL(pocoef.c_medp,0),5,3)) + [,] + ; + ALLTRIM(STR(NVL(pocoef.c_soms,0),11,8)) + [,] + ; + ALLTRIM(STR(NVL(pocoef.c_somp,0),7,5)) + [,] + ; + ALLTRIM(STR(NVL(pocoef.c_casp,0),7,5)) + [,] + ; + ALLTRIM(STR(NVL(pocoef.salmin,0),16,gnPa)) + [,] + ; + ALLTRIM(STR(NVL(pocoef.salmed,0),16,gnPa)) + [,] + ; + ALLTRIM(STR(NVL(pocoef.c_munca,0),8,6)) + [,] + ; + ALLTRIM(STR(NVL(pocoef.dedl1,0),16,gnPa)) + [,] + ; + ALLTRIM(STR(NVL(pocoef.dedl2,0),16,gnPa)) + [,] + ; + ALLTRIM(STR(NVL(pocoef.c_faambp,0),8,6)) + [,] + ; + ALLTRIM(STR(NVL(pocoef.zilecmplang,0))) + [,] + ; + ALLTRIM(STR(NVL(pocoef.zilecmplangf,0))) + [,] + ; + ALLTRIM(STR(NVL(pocoef.BAZA_INGR,0))) + [,] + ; + AllTRIM(STR(NVL(pocoef.c_cas1,0),6,4)) + [,] + ; + ALLTRIM(STR(NVL(pocoef.c_cas2,0),6,4)) + [,] + ; + ALLTRIM(STR(NVL(pocoef.c_cas3,0),6,4)) + [,] + ; + ALLTRIM(STR(NVL(pocoef.FD_FNUASS,0),6,4)) + [,] + ; + ALLTRIM(STR(NVL(pocoef.brutprimaco,0))) + [,] + ; + ALLTRIM(STR(NVL(pocoef.netprimaco,0))) + [,] + ; + ALLTRIM(STR(NVL(pocoef.coefavco,0),6,4)) + [,] + ; + ALLTRIM(STR(NVL(pocoef.C_FDGARANT,0),6,4)) + [,] + ; + ALLTRIM(STR(NVL(pocoef.fol_cstandard,0))) + [,] + ; + ALLTRIM(STR(NVL(pocoef.C_ORESUPL,0),6,3)) + [,] + ; + ALLTRIM(STR(NVL(pocoef.C_OREW,0),6,3)) + [,] + ; + ALLTRIM(STR(NVL(pocoef.C_ORENOAPTE,0),6,3)) + [,]+; + ALLTRIM(STR(NVL(pocoef.diurnaneimp,0),16,2))+ [,]+; + ALLTRIM(STR(NVL(pocoef.oug114_2018,0),1)) + [,]+; + ALLTRIM(STR(NVL(pocoef.impozit,0),6,4)) +[,]+; + ALLTRIM(STR(NVL(pocoef.salminstudii,0),16,gnPa)) + [,]+ ; + ALLTRIM(STR(NVL(pocoef.orestas,0),7,3)) +; + [); end;] +*!* lcSql = [update ] + gcS +[.sal_calendar set c_meds = ] + ALLTRIM(STR(NVL(pocoef.c_meds,0),5,3)) + [,] +; +*!* [ c_medp = ] + ALLTRIM(STR(NVL(pocoef.c_medp,0),5,3)) +; +*!* [,c_soms = ] + ALLTRIM(STR(NVL(pocoef.c_soms,0),5,3)) +; +*!* [,c_somp = ] + ALLTRIM(STR(NVL(pocoef.c_somp,0),5,3)) +; +*!* [,c_casp = ] + ALLTRIM(STR(NVL(pocoef.c_casp,0),5,3)) +; +*!* [,salmin = ] + ALLTRIM(STR(NVL(pocoef.salmin,0),16,gnPa)) +; +*!* [,salmed = ] + ALLTRIM(STR(NVL(pocoef.salmed,0),16,gnPa)) +; +*!* [,c_munca = ] + ALLTRIM(STR(NVL(pocoef.c_munca,0),8,6)) +; +*!* [,dedl1 = ] + ALLTRIM(STR(NVL(pocoef.dedl1,0),16,gnPa)) +; +*!* [,dedl2 = ] + ALLTRIM(STR(NVL(pocoef.dedl2,0),16,gnPa)) +; +*!* [,c_faambp = ] + ALLTRIM(STR(NVL(pocoef.c_faambp,0),8,6)) +; +*!* [,zilecmplang = ] + ALLTRIM(STR(NVL(pocoef.zilecmplang,0))) +; +*!* [,BAZA_INGR = ] + ALLTRIM(STR(NVL(pocoef.BAZA_INGR,0))) +; +*!* [,c_cas1 = ] + ALLTRIM(STR(NVL(pocoef.c_cas1,0),6,4)) +; +*!* [,c_cas2 = ] + ALLTRIM(STR(NVL(pocoef.c_cas2,0),6,4)) +; +*!* [,c_cas3 = ] + ALLTRIM(STR(NVL(pocoef.c_cas3,0),6,4)) +; +*!* [,FD_FNUASS = ] + ALLTRIM(STR(NVL(pocoef.FD_FNUASS,0),6,4)) +; +*!* [,brutprimaco = ] + ALLTRIM(STR(NVL(pocoef.brutprimaco,0))) +; +*!* [,netprimaco = ] + ALLTRIM(STR(NVL(pocoef.netprimaco,0))) +; +*!* [,coefavco = ] + ALLTRIM(STR(NVL(pocoef.coefavco,0),6,4)) +; +*!* [,C_FDGARANT = ] + ALLTRIM(STR(NVL(pocoef.C_FDGARANT,0),6,4)) +; +*!* [where id_calendar = ] + ALLTRIM(STR(NVL(pnIdSal,0))) + lnSucces = goExecutor.oExecute(lcSql) + IF lnSucces < 0 + MESSAGEBOX(goExecutor.cEroare,0 +16,'Eroare') + ELSE + IF USED('crsDeduceri') + SET STEP ON + LOCAL lcStringDeduceri + STORE [] TO lcStringDeduceri + SELECT crsDeduceri + SCAN + lcStringDeduceri = lcStringDeduceri +ALLTRIM(STR(crsDeduceri.nrpers))+[,]+ALLTRIM(STR(crsDeduceri.suma))+[|] + ENDSCAN + IF !EMPTY(lcStringDeduceri) + IF m.gnAn*12+m.gnLuna <=2018*12+1 + lcSql = [merge into sal_deduceri a ]+; + [ using ]+; + [(select to_number(substr(X,1,instr(X, ',') - 1)) as nrpers, ]+; + [ to_number(substr(X, instr(X, ',') + 1)) as suma, ]+; + ALLTRIM(STR(NVL(pocoef.id_Calendar,0))) + [ as id_calendar] +; + [ from table(charc2collection(']+lcStringDeduceri+[','|'))) b ]+; + [ on (a.nrpers = b.nrpers and a.id_calensal = b.id_calendar) ] +; + [ WHEN MATCHED THEN UPDATE SET ]+; + [ a.suma = b.suma ]+; + [ when not matched then ]+; + [ insert (nrpers,suma,id_calensal) values (b.nrpers,b.suma,b.id_calendar)] + ENDIF + lnSucces = goExecutor.oExecute(lcSql) + IF lnSucces < 0 + MESSAGEBOX(goExecutor.cEroare,0 +16,'Eroare') + ENDIF + ENDIF + + ENDIF + ENDIF + goExecutor.oReset() + + RETURN lnSucces +ENDIF +*!* Release posarbat,ofrmform + + +ENDPROC +*----------------------------------sfarsit procedura sal_coef---------------------------------- + +******************************************* +* PROCEDURE nom_tiptichetemasa( ) +* Date : 06/22/05, 09:34:42 +* author : liana.macinic +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* +PROCEDURE nom_tiptichetemasa( ) +Private ponomtic,pcschema1,pcselect1 +Store '' To ponomtic +If Used('vnom_tichete') + Use In vnom_tichete +Endif + +pcschema1=[''] +pcselect1=['select * from ] + gcS + [.sal_vnom_tichete where 2=2'] +pcorder1=[] +pcfiltru1 = [sters = 0] +llAfiseaza = .F. +pcorder1 = [ denumire ] +gencursor('ponomtic','vnom_tichete',pcselect1,pcfiltru1,pcschema1,pcorder1,llAfiseaza) +ponomtic.ca_baza1.afisare() +SELECT vnom_tichete +ofrmpop=Createobject('frm_nomtichete') +ofrmpop.Show(1) +Release ponompop + +ENDPROC +*----------------------------------sfarsit procedura nom_tipcm---------------------------------- + +******************************************* +* PROCEDURE nom_turelucru( ) +* Date : 19/09/2017, 09:34:42 +* author : liana.neagu +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* +PROCEDURE nom_turelucru( ) +Private ponomture,pcschema1,pcselect1 +Store '' To ponomture +If Used('vnom_ture') + Use In vnom_ture +Endif + +pcschema1=[''] +pcselect1=['select * from ] + gcS + [.sal_nom_ture where 2=2'] +pcorder1=[] +pcfiltru1 = [sters = 0] +llAfiseaza = .F. +pcorder1 = [ denumire ] +gencursor('ponomture','vnom_ture',pcselect1,pcfiltru1,pcschema1,pcorder1,llAfiseaza) +ponomture.ca_baza1.afisare() +SELECT vnom_ture +ofrmture=Createobject('frm_nomTure') +ofrmture.Show(1) +Release ponomture + +ENDPROC +*----------------------------------sfarsit procedura nom_turelucru---------------------------------- +******************************************* +* PROCEDURE nom_locmunca( ) +* Date : 03/09/21, 16:37:20 +* author : liana.neagu +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* +PROCEDURE nom_locmunca( ) +Private poformatii,pcschema1,pcselect1 +Store '' To poformatii +If Used('v_formatii') + Use In v_formatii +Endif +*!* DEBUG +*!* SUSPEND +pcschema1=[''] +*!* pcselect1=[select f.*,s.SECTIE,t.TRANSA from ] + gcS +; +*!* [.sal_nom_formatii f left join ]+gcS; +*!* +[.vnom_sectii s on f.id_sectie = s.ID_SECTIE ]+; +*!* [ left join ]+gcS+[.sal_vnom_transe t on f.id_sectie = t.ID_TRANSA where 1=2] +pcselect1=[select f.*,S.SECTIE,T.TRANSA,semn.denumire as semnatura,semn.directie from ] + gcS + [.sal_nom_locmunca f ] + ; + [ LEFT JOIN ] + GCS + [.VNOM_SECTII S ON F.ID_SECTIE = S.ID_SECTIE ] +; + [ LEFT JOIN ] + GCS + [.SAL_VNOM_TRANSE T ON F.ID_TRANSA = T.ID_TRANSA ]+; + [left join sal_semnaturi semn on f.id_semnatura = semn.id_semnatura ]+; + [ where 1=2] +pcorder1=[ordine] +pcfiltru1 = [f.sters = 0] +llAfiseaza = .F. +gencursor('poformatii','v_formatii',pcselect1,pcfiltru1,pcschema1,pcorder1,llAfiseaza) +poformatii.ca_baza1.afisare() +SELECT V_FORMATII +ofrmform=Createobject('frm_formatii') +ofrmform.but_nou1.visible = .f. +ofrmform.but_modifica1.visible = .f. +ofrmform.but_sterge1.visible = .f. +ofrmform.Show(1) +Release poformatii + +ENDPROC +*----------------------------------sfarsit procedura nom_formatii---------------------------------- \ No newline at end of file diff --git a/COMUN/programe/oproceduri_rulaje.prg b/COMUN/programe/oproceduri_rulaje.prg new file mode 100644 index 0000000..e3ed132 --- /dev/null +++ b/COMUN/programe/oproceduri_rulaje.prg @@ -0,0 +1,508 @@ +*!* 29.06.2018 +*!* marius.mutu +*!* modificare_articole_gestiune - tratare modificare nota produse > vanzare + + +*!* 31.12.2019 +*!* marius.mutu +*!* viz_rulaje, viz_rulaje_obinv - optimizat selectia pentru cursorul poBon, poNir + +Procedure viz_rulaje + Lparameters tnNrPag + Private pcselect, pcschema, pcfiltru, pcorder, llAfiseaza, porulaje, ponir, pobon, pcvrul + + Local ofrmrulaje As "frm_rulaje" + Local lcFiltruOriginal, lcgroup, llModParam + Store '' To porulaje, ponir, pobon + *!* IF m.nivel=1 + + pcschema = ['NRCRT n(10),ID_RUL n(20),AN n(4),LUNA n(2),COD n(20),NNIR n(20),SERIE_ACT C(10),NRACT n(14),UTILS c(50),DATAORAS t,ID_ARTICOL n(10),'+] + ; + ['DENUMIRE c(100),CODMAT c(50),SERIE c(100),UM c(6),ID_GESTIUNE n(5),CGEST c(20), nume_gestiune c(50), '+] + ; + ['PRET n(16,4),PRETV n(16,4),TVA n(16,4),TVAV n(16,4),CANT n(14,3),CANTE n(14,3),CONT c(4),'+] + ; + ['ADAOS n(14,4),ID_LUCRARE n(20),NRORD c(30),ID_RESPONSABIL n(5),NRESP c(30),DATAACT d,'+] + ; + ['PROCENT n(7,3),CURS n(14,4),PRETD n(14,4),ID_UTIL n(5),UTIL c(30),DATAORA t,'+] + ; + ['ID_SECTIE n(5),SECTIE c(30),ALCOOLTUTUN n(1),PRETVTVA n(14,4),'+] + ; + ['ACONT c(4),DATAIN d,DATAOUT d,PROC_DISC n(6,2),DISCUNITAR n(14,4),PROC_TVA n(5,2),PROC_TVAv n(5,2),ID_FACT n(20),STERS n(1), '+] + ; + ['ID_GESTIUNEC N(5), CGESTC C(20), ID_RESPONSABILC N(5), NRESPC C(30),ID_TIP_RULAJ N(10),TIP_RULAJ C(40),'+] + ; + ['um2 c(10),cant_bax n(9,4), id_grupa n(5), grupa c(100), id_subgrupa n(5), subgrupa c(100),'+] + ; + ['id_valuta n(5), nume_val c(4), codmatf c(50), lot c(50), adata_expirare T,'+] + ; + ['id_sucursala N(5),sucursala c(100),id_part_rez N(10),part_rez c(100),'+] + ; + ['id_lucrare_rez N(10),nrord_rez C(50), codbare c(100), id_set I, id_furnizor N(10), furnizor C(100), codnc8 C(20), greutate N(12,4), tara_origine C(100),'+] + ; + ['id_jtva_coloana N(20), explicatie_tva C(250), taxcode N(6), taxname C(250), fdoc C(30), id_fdoc I, ales N(1)'] + + pcselect = ['select row_number() over (order by a.dataact,a.nnir) as nrcrt, '+] + ; + ['A.ID_RUL,A.AN,A.LUNA,A.COD,A.NNIR,A.SERIE_ACT,A.NRACT,A.UTILS,A.DATAORAS,A.ID_ARTICOL,A.DENUMIRE,A.CODMAT,A.SERIE,'+] + ; + ['A.UM,A.ID_GESTIUNE,A.cgest, a.nume_gestiune,A.PRET,A.PRETv,A.tva,A.tvav, ' + ] + ; + ['A.CANT,A.CANTE,A.CONT,A.ADAOS,A.ID_LUCRARE,A.NRORD,A.ID_RESPONSABIL,A.NRESP,A.DATAACT,A.PROCENT,A.curs, '+] + ; + ['A.PRETD,A.ID_UTIL,A.UTIL,A.DATAORA,A.ID_SECTIE,A.SECTIE,A.ALCOOLTUTUN, '+] + ; + ['A.pretvtva,A.ACONT,A.DATAIN,A.DATAOUT,A.PROC_DISC,A.DISCUNITAR,A.PROC_TVA,A.PROC_TVAV,A.ID_FACT,a.sters, '+] + ; + ['A.ID_GESTIUNEC, A.CGESTC, A.ID_RESPONSABILC, A.NRESPC, A.ID_TIP_RULAJ, A.TIP_RULAJ, '+] + ; + ['a.um2, a.cant_bax, a.id_grupa, a.grupa, a.id_subgrupa, a.subgrupa, a.id_valuta, a.nume_val, a.codmatf,' + ] + ; + ['a.lot, a.adata_expirare, a.id_sucursala, a.sucursala,a.id_part_rez,a.part_rez,a.id_lucrare_rez,a.nrord_rez, a.codbare, a.id_set, '+] + ; + ['a.id_furnizor, a.furnizor, a.codnc8, a.greutate, a.tara_origine, a.id_jtva_coloana, a.explicatie_tva, a.taxcode, a.taxname,a.fdoc, a.id_fdoc,0 as ales '+] + ; + ['from vrul_tot a where 1=2'] + + pcvrul = '_tot' + + pcfiltru = [1=2] + pcorder = [1] + llAfiseaza = .F. + gencursor('porulaje', 'crsrulx', pcselect, pcfiltru, pcschema, pcorder, llAfiseaza) + porulaje.ca_baza1.afisare() + + pcschema = [NRCRT n(10),DENUMIRE c(100),CODMAT c(50),UM c(6),DATAACT D,PRET n(16,4),TVA n(16,4),PRETV n(16,4),TVAV n(16,4),CANT n(14,3),CANTE n(14,3),COD n(20),NNIR n(10), NRESP C(30),SERIE c(100)] + Text To pcselect Noshow + select row_number() over(order by b.denumire) as nrcrt, + b.denumire, + b.codmat, + b.um, + a.dataact, + a.pret, + a.tva, + a.pretv, + a.tvav, + a.cant, + a.cante, + a.cod, + a.nnir, + c.denumire as nresp, + a.serie + FROM rul a left join nom_articole b on a.id_articol = b.id_articol + left join nom_parteneri c on a.id_responsabil = c.id_part + Endtext + + pcfiltru = [1=2] + pcorder = [b.denumire] + llAfiseaza = .F. + lcgroup = [] + llModParam = .T. + lcFiltruOriginal = [a.sters=0] + gencursor('ponir', 'crsnir', m.pcselect, m.pcfiltru, m.pcschema, m.pcorder, m.llAfiseaza, m.lcgroup, m.llModParam, m.lcFiltruOriginal) + gencursor('pobon', 'crsbon', m.pcselect, m.pcfiltru, m.pcschema, m.pcorder, m.llAfiseaza, m.lcgroup, m.llModParam, m.lcFiltruOriginal) + + Select crsRulX + ofrmrulaje = Createobject("frm_rulaje", tnNrPag) + *DO FORM frm_rulaje NAME ofrmrulaje NOSHOW + ofrmrulaje.lb_titlu_alb_b121.Caption = ofrmrulaje.lb_titlu_alb_b121.Caption + " LUNA " + Alltrim(Str(gnLuna)) + "/" + Alltrim(Str(gnAn)) + ofrmrulaje.Show(1) + + Release porulaje + +Endproc && viz_rulaje + +*--------------------------------------------------------------------------------------------- + +Procedure viz_rulaje_obinv + Private pcselect, pcschema, pcfiltru, pcorder, llAfiseaza, porulaje, ponir, pobon, pcvrul + Local ofrmrulaje As "frm_rulaje_obinv" + Local lcFiltruOriginal, lcgroup, llModParam + Store '' To porulaje, ponir, pobon + + pcschema = [''] + pcselect = ['select row_number() over (order by a.dataact,a.nnir) as nrcrt,a.*,0 as ales from vrul_obinv_tot a where 1=2'] + pcvrul = '_tot' + + + pcfiltru = [1=2] + pcorder = [1] + llAfiseaza = .F. + gencursor('porulaje', 'crsrul', pcselect, pcfiltru, pcschema, pcorder, llAfiseaza) + porulaje.ca_baza1.afisare() + + *!* pcschema = ['NRCRT n(10),DENUMIRE c(100),CODMAT c(50),UM c(6),PRET n(16,4),'+] + ; + *!* ['TVA n(16,4),CANT n(14,3),COD n(20), NRESP C(30)'] + *!* pcselect = ['select row_number() over (order by denumire) as nrcrt,a.denumire,a.codmat,'+] + ; + *!* ['a.um,a.pret,a.tva,a.cant,a.cod, a.nresp from ] + gcS + [.vrul_obinv] + pcvrul + [ a '+] + ; + *!* ['where 1=2'] + *!* pcfiltru = [1=2] + *!* pcorder = [a.denumire] + *!* llAfiseaza = .F. + *!* gencursor('ponir', 'crsnir', pcselect, pcfiltru, pcschema, pcorder, llAfiseaza) + + *!* pcschema = ['NRCRT n(10),DATAACT d,DENUMIRE c(100),UM c(6),PRETV n(16,4),CANTE n(14,3),NNIR n(10), NRESP C(30)'] + *!* pcselect = ['select row_number() over (order by cod) as nrcrt,a.dataact,'+] + ; + *!* ['a.denumire,a.um,a.pretv,a.cante,a.nnir, a.nresp from ] + gcS + [.vrul_obinv] + pcvrul + [ a '+] + ; + *!* ['where 1=2'] + *!* pcfiltru = [1=2] + *!* pcorder = [cod] + *!* llAfiseaza = .F. + *!* gencursor('pobon', 'crsbon', pcselect, pcfiltru, pcschema, pcorder, llAfiseaza) + + pcschema = [NRCRT n(10),DENUMIRE c(100),CODMAT c(50),UM c(6),DATAACT D,PRET n(16,4),TVA n(16,4),PRETV n(16,4),TVAV n(16,4),CANT n(14,3),CANTE n(14,3),COD n(20),NNIR n(10), NRESP C(30),SERIE c(100)] + Text To pcselect Noshow + select row_number() over(order by b.denumire) as nrcrt, + b.denumire, + b.codmat, + b.um, + a.dataact, + a.pret, + a.tva, + a.pretv, + a.tvav, + a.cant, + a.cante, + a.cod, + a.nnir, + c.denumire as nresp, + a.serie + FROM rul_obinv a left join nom_articole b on a.id_articol = b.id_articol + left join nom_parteneri c on a.id_responsabil = c.id_part + Endtext + + pcfiltru = [1=2] + pcorder = [b.denumire] + llAfiseaza = .F. + lcgroup = [] + llModParam = .T. + lcFiltruOriginal = [a.sters=0] + gencursor('ponir', 'crsnir', m.pcselect, m.pcfiltru, m.pcschema, m.pcorder, m.llAfiseaza, m.lcgroup, m.llModParam, m.lcFiltruOriginal) + gencursor('pobon', 'crsbon', m.pcselect, m.pcfiltru, m.pcschema, m.pcorder, m.llAfiseaza, m.lcgroup, m.llModParam, m.lcFiltruOriginal) + + *DO FORM "frm_rulaje_obinv" NAME ofrmrulaje NOSHOW LINKED + ofrmrulaje = Createobject("frm_rulaje_obinv") + ofrmrulaje.lb_titlu_alb_b121.Caption = "RULAJE OBIECTE DE INVENTAR IN FOLOSINTA * LUNA " + Alltrim(Str(gnLuna)) + "/" + Alltrim(Str(gnAn)) + ofrmrulaje.Show(1) + + Release porulaje + +Endproc && viz_rulaje_obinv + + +****************************************************** +* +* Apelata din gestiuni_comun.vcx > afrulaje > but_modifica1 +* +****************************************************** +Procedure modificare_antet_gestiune + Lparameters toActNou + Local llSucces, lnCod, lnIdResp, lcSelect + Local lcCursor, lcSql, llRul, lnReturn, lnSucces + Local loActNou, loActOriginal + Private pnCod + Private pdDataOra + pdDataOra = Null + + llSucces = .F. + lcSelect = Select() + loActNou = toActNou + pnCod = loActNou.cod + llRul = .T. + + lcSql = [select * from vact_tot where an = ?gnAn and luna = ?gnLuna and cod = ?pnCod] + lcCursor = [actactan] + lnSucces = goExecutor.oExecute(lcSql, lcCursor) + If lnSucces < 0 + aMESSAGEBOX(goExecutor.cEroare, 0 + 16, "Eroare") + Else + Select actactan + Go Top + Scatter Name loActOriginal + + lcSql = [select * from vrul_tot where an = ?gnAn and luna = ?gnLuna and cod = ?pnCod] + lcCursor = [rul_temp] + + lnSucces = goExecutor.oExecute(lcSql, lcCursor) + If lnSucces < 0 + aMESSAGEBOX(goExecutor.cEroare, 0 + 16, "Eroare") + Else + lcSql = [select * from vrul_obinv_tot where an = ?gnAn and luna = ?gnLuna and cod = ?pnCod] + lcCursor = [RUL_TEMP_OBINV] + + lnSucces = goExecutor.oExecute(lcSql, lcCursor) + goExecutor.oReset() + If m.lnSucces < 0 + aMESSAGEBOX(goExecutor.cEroare, 0 + 16, "Eroare") + Endif && lnSucces + Endif && lnSucces + Endif && lnSucces + + If m.lnSucces > 0 + If loActNou.nract <> loActOriginal.nract + Update actactan Set nract = loActNou.nract Where nract = loActOriginal.nract + Update RUL_TEMP Set nract = loActNou.nract + Update RUL_TEMP_OBINV Set nract = loActNou.nract + Endif + If loActNou.NNIR <> loActOriginal.NNIR + Update actactan Set NNIR = loActNou.NNIR Where NNIR = loActOriginal.NNIR + Update RUL_TEMP Set NNIR = loActNou.NNIR + Update RUL_TEMP_OBINV Set NNIR = loActNou.NNIR + Endif + If loActNou.dataact <> Ttod(loActOriginal.dataact) + Update actactan Set dataact = loActNou.dataact Where dataact = loActOriginal.dataact And nract = loActOriginal.nract + Update RUL_TEMP Set dataact = loActNou.dataact + Update RUL_TEMP_OBINV Set dataact = loActNou.dataact + Endif + If loActNou.dataireg <> Ttod(loActOriginal.dataireg) + Update actactan Set dataireg = loActNou.dataireg Where dataireg = loActOriginal.dataireg + Endif + If Nvl(loActNou.id_sectie, 0) <> Nvl(loActOriginal.id_sectie, 0) + Update actactan Set id_sectie = loActNou.id_sectie Where Nvl(id_sectie, 0) = Nvl(loActOriginal.id_sectie, 0) + Update RUL_TEMP Set id_sectie = loActNou.id_sectie Where Nvl(id_sectie, 0) = Nvl(loActOriginal.id_sectie, 0) + Update RUL_TEMP_OBINV Set id_sectie = loActNou.id_sectie Where Nvl(id_sectie, 0) = Nvl(loActOriginal.id_sectie, 0) + Endif + If Nvl(loActNou.id_responsabil, 0) <> Nvl(loActOriginal.id_responsabil, 0) + Update actactan Set id_responsabil = loActNou.id_responsabil Where Nvl(id_responsabil, 0) = Nvl(loActOriginal.id_responsabil, 0) + Update RUL_TEMP Set id_responsabil = loActNou.id_responsabil Where Left(Cont, 1) <> '8' && nu modific obiectele de inventar in folosinta + Endif + If Nvl(loActNou.id_lucrare, 0) <> Nvl(loActOriginal.id_lucrare, 0) + Update actactan Set id_lucrare = loActNou.id_lucrare Where Nvl(id_lucrare, 0) = loActOriginal.id_lucrare + Update RUL_TEMP Set id_lucrare = loActNou.id_lucrare Where Nvl(id_lucrare, 0) = loActOriginal.id_lucrare + Update RUL_TEMP_OBINV Set id_lucrare = loActNou.id_lucrare Where Nvl(id_lucrare, 0) = loActOriginal.id_lucrare + Endif + + If Nvl(loActNou.id_partener, 0) <> Nvl(loActOriginal.id_partc, 0) + Update actactan Set id_partd = loActNou.id_partener Where Nvl(id_partd, 0) = Nvl(loActOriginal.id_partc, 0) + Update actactan Set id_partc = loActNou.id_partener Where Nvl(id_partc, 0) = Nvl(loActOriginal.id_partc, 0) + Endif + + If do_deschide_tranzactie() + Select actactan + lnSucces = oscrie_in_fisiere(2, .T., m.llRul) + + If m.lnSucces > 0 + lnSucces = oscrie_in_fisiere(0, .T., m.llRul) + Endif + + If m.lnSucces > 0 + lcSql = [begin pack_contafin.finalizeaza_modificare_nota(?gnLuna,?gnAn,?pdDataOra,] + Alltrim(Str(loActOriginal.id_set)) + [,] + ; + Alltrim(Str(m.pnCod)) + [,] + Alltrim(Str(loActOriginal.id_fact)) + [,] + Alltrim(Str(loActOriginal.id_fact)) + [,?gnIdUtil); end;] + lnSucces = Iif(goExecutor.oExecuta(m.lcSql), 1, -1) + Endif && lnSucces + + do_inchide_tranzactie(Iif(m.lnSucces < 0, 2, 1)) + Endif && deschide_Tranzactie + Endif && lnSucces + + Use In (Select('actactan')) + Use In (Select('RUL_TEMP')) + Use In (Select('RUL_TEMP_OBINV')) + + m.llSucces = (m.lnSucces > 0) + Select (m.lcSelect) + Return m.llSucces +Endproc && modificare_antet_gestiune + + +******************************************* +Procedure do_deschide_tranzactie + Local llReturn + If Type('goExecutor') = 'O' + goExecutor.oExecuta([select * from dual]) + Endif + lnSucces = SQLSetprop(gnHandle, "Transactions", 2) + If m.lnSucces < 0 + aMESSAGEBOX("Programul nu a reusit sa treaca pe tranzactie manuala! Reintrati in program si incercati din nou!", 48, "Atentie") + llReturn = .F. + Else + llReturn = .T. + Endif + Return m.llReturn +Endproc && do_deschide_tranzactie + +******************************************* +Procedure do_inchide_tranzactie + Lparameters tnTip + Local llReturn, lnSucces, lcExplicatie + If tnTip = 1 + lnSucces = Sqlcommit(gnHandle) + lcExplicatie = [COMMIT] + Else + lnSucces = Sqlrollback(gnHandle) + lcExplicatie = [ROLLBACK] + Endif + If lnSucces < 0 + aMESSAGEBOX("Eroare la " + lcExplicatie + "!", 48, "Atentie") + llReturn = .F. + Else + lnSucces = SQLSetprop(gnHandle, "Transactions", 1) + If lnSucces < 0 + aMESSAGEBOX('Programul nu a reusit sa treaca pe tranzactie automata. Iesiti din program si intrati din nou!', 0 + 48, 'Atentie!') + llReturn = .F. + Else + llReturn = .T. + Endif + Endif + Return llReturn +Endproc && do_inchide_tranzactie +****************************************************** +* +* Apelata din gestiuni_comun.vcx > afrulaje > but_modifica1 +* +****************************************************** +Procedure modificare_articole_gestiune + Lparameters tnCod, tnIdSet + + Private pnCod + Local lcColumnId, lcColumnValue, lcCont, lcFisLista, lcIdFisier, lcMemoryVarId, lcMemoryVarValue + Local lcSelect, lcSql, lcVarItem, lcWhere, llContinua, llPartener, llSucces, llVerificaAcont + Local lnButon, lnIdSet, lnIdValue, lnItem, lnSucces, lnVariabile, luValue, lcCgest, lnIdGestiune + Local loAct As "empty" + Local lcNumeGestiune, lcResponsabil, lnIdResponsabil + lnVariabile = 0 + llSucces = .F. + lcSelect = Select() + pnCod = m.tnCod + lnIdSet = m.tnIdSet + lcCgest = "" + lnIdGestiune = 0 + + *** Initializez variabilele din xrequest + lcSql = [select * From VACT a Where an = ] + Alltrim(Str(m.gnAn)) + [ and luna = ] + Alltrim(Str(m.gnLuna)) + [ and cod = ] + Alltrim(Str(m.pnCod)) + lnSucces = goExecutor.oExecute(m.lcSql, 'ACT_TEMP') + + If m.lnSucces < 0 + aMESSAGEBOX(goExecutor.cEroare, 0 + 48, _Screen.Caption) + Else + + lcSql = [select r.*, g.nume_gestiune, g.cgest, p.denumire as responsabil From rul r Left Join vnom_gestiuni g On r.id_gestiune = g.id_gestiune left join vnom_parteneri p on r.id_responsabil = p.id_part Where an = ] + Alltrim(Str(m.gnAn)) + [ and luna = ] + Alltrim(Str(m.gnLuna)) + [ and cod = ] + Alltrim(Str(m.pnCod)) + lnSucces = goExecutor.oExecute(m.lcSql, 'RUL_TEMP') + If m.lnSucces < 0 + aMESSAGEBOX(goExecutor.cEroare, 0 + 48, _Screen.Caption) + Endif + Endif && m.lnSucces < 0 + + If m.lnSucces < 0 + Use In (Select('ACT_TEMP')) + Use In (Select('RUL_TEMP')) + Return + Endif + + Select scd As Cont, id_partd As id_part, partd As partener ; + From ACT_TEMP ; + Where !Empty(Nvl(id_partd, 0)) ; + Union ; + Select scc As Cont, id_partc As id_part, partc As partener ; + From ACT_TEMP ; + Where !Empty(Nvl(id_partc, 0)) ; + Into Cursor cParteneriTemp + + Select a.Cont, a.id_part, b.partener ; + From (Select Cont, Max(id_part) As id_part From cParteneriTemp Group By Cont) a Left Join ; + (Select Distinct id_part, partener From cParteneriTemp) b On a.id_part = b.id_part ; + Into Cursor cParteneriAct + Use In (Select('cParteneriTemp')) + + Text To lcSql Noshow Textmerge + Select i.id_item, i.var_item, i.fis_lista, i.id_fisier + From xrequest r Join xitems i On r.id_item = i.id_item + Where r.id_set = <> + Union + Select id_item, var_item, fis_lista, id_fisier + From xitems + Where id_item = 16 + Endtext + lnSucces = goExecutor.oExecute(m.lcSql, 'crsVariabileTemp') + If lnSucces > 0 + Select Padr(Cont, 4) As var_item, 'parteneri' As fis_lista From cParteneriAct Into Cursor cVariabileParteneri + + Select crsVariabileTemp + Append From Dbf('cVariabileParteneri') + Use In (Select('cVariabileParteneri')) + Else + aMESSAGEBOX(goExecutor.cEroare) + Create Cursor crsVariabileTemp (id_item I, var_item C(20), fis_lista C(20), id_fisier C(20)) + Endif + + + loAct = Createobject("empty") + AddProperty(loAct, 'lCorectie', .T.) + AddProperty(loAct, 'nCod', m.pnCod) + + Select crsVariabileTemp + Scan + llPartener = Alltrim(Lower(Nvl(fis_lista, ''))) = 'parteneri' && variabila partener + lcVarItem = Lower(Alltrim(Nvl(var_item, ''))) + lcFisLista = Lower(Alltrim(Nvl(fis_lista, ''))) + lcIdFisier = Lower(Alltrim(Nvl(id_fisier, ''))) + lcColumnValue = 'act_temp.' + lcVarItem + lcColumnId = Iif(!Empty(m.lcIdFisier), 'act_temp.' + lcIdFisier, '') + + + Do Case + Case m.llPartener && parteneri + lcCont = Alltrim(Nvl(var_item, '')) + + Select cParteneriAct + Locate For Alltrim(Nvl(Cont, '')) = m.lcCont + If Found() + luValue = Alltrim(partener) + lnIdValue = id_part + AddProperty(loAct, 'v' + Lower(m.lcCont), m.luValue) && loAct.v4111 + AddProperty(loAct, 'id_vv' + Lower(m.lcCont), m.lnIdValue) && loAct.id_vv4111 + Endif + + + Case Inlist(m.lcVarItem, "gestin", "gestout") && numele gestiunii + * gestiunea o iau din rulaje, daca sunt mai multe gestiuni nu completez variabila + Select Distinct id_gestiune, nume_gestiune, cgest From RUL_TEMP Into Cursor crsGestiuniTemp + If _Tally = 1 + Go Top In crsGestiuniTemp + + lcNumeGestiune = Alltrim(crsGestiuniTemp.nume_gestiune) + lnIdGestiune = crsGestiuniTemp.id_gestiune + lcCgest = Alltrim(Nvl(crsGestiuniTemp.cgest, '')) + AddProperty(loAct, m.lcVarItem, m.lcNumeGestiune) && loAct.gestin + AddProperty(loAct, 'id_' + m.lcVarItem, m.lnIdGestiune) && loAct.id_gestin + AddProperty(loAct, "nume_gestiune", m.lcNumeGestiune) && loAct.nume_gestiune + AddProperty(loAct, "cgest", m.lcCgest) && loAct.cgest + AddProperty(loAct, 'id_gestiune', m.lnIdGestiune) && loAct.id_gestin + Endif + + Use In (Select('crsGestiuniTemp')) + Case m.lcVarItem = 'nresp' And m.lcFisLista = 'vnom_responsabili' && responsabil/respons sau achizitor/achit_542 + lcWhere = Iif(lnIdSet = 89, [cante <> 0], [1=1]) && la transfer intre persoane ma intereseaza persoana de la care se transfera + Select Distinct id_responsabil, responsabil From RUL_TEMP Where &lcWhere Into Cursor crsResponsabiliTemp + If _Tally = 1 + Go Top In crsResponsabiliTemp + lcResponsabil = Alltrim(crsResponsabiliTemp.responsabil) + lnIdResponsabil = crsResponsabiliTemp.id_responsabil + AddProperty(loAct, m.lcVarItem, m.lcResponsabil) && loAct.nresp + AddProperty(loAct, 'id_' + m.lcVarItem, m.lnIdResponsabil) && loAct.id_responsabil + Endif + Use In (Select('crsResponsabiliTemp')) + + Otherwise + If Type(m.lcColumnValue) <> 'U' + Select ACT_TEMP + Calculate Max(&lcVarItem) To luValue + If Inlist(m.lcVarItem, 'dataact', 'dataireg', 'datascad') And Type('luvalue') = 'T' + luValue = Ttod(m.luValue) + Endif + AddProperty(loAct, m.lcVarItem, m.luValue) && loAct.sectie/dataact/nract + + If !Empty(m.lcColumnId) And Type(m.lcColumnId) <> 'U' + Locate For &lcVarItem = luValue + If Found() + luValue = Evaluate(m.lcColumnId) + AddProperty(loAct, m.lcIdFisier, m.luValue) && loAct.id_sectie + Endif + Endif + Endif + Endcase + Endscan && crsVariabileTemp + + Use In (Select('crsVariabileTemp')) + Use In (Select('act_temp')) + Use In (Select('rul_temp')) + + *** UTILIZATORUL FACE MODIFICARI ASUPRA ARTICOLELOR IN INTRARI/IESIRI + llContinua = .F. + llVerificaAcont = .T. + If Inlist(m.tnIdSet, 79, 83, 271, 225, 272) && produse > vanzare en-gros, en-detail + llSucces = initializeaza_vanzare_din_stoc(m.tnIdSet, loAct) + lnButon = Iif(m.llSucces, 1, 2) + Else + lnButon = lans(m.tnIdSet, m.llContinua, m.llVerificaAcont, .F., .F., loAct) + Endif + *!* Do Case + *!* Case Inlist(m.lnIdSet, 92, 104) && NIR IMPORT MATERIALE/MARFA + *!* lnButon = importmat(m.lnIdSet, loDateSuplimentare) && procmenu.prg + *!* Otherwise + *!* lnButon = lans(m.tnIdSet, m.llContinua, m.llVerificaAcont, @laValori) + *!* Endcase + llSucces = (m.lnButon <> 2) + + + Select (m.lcSelect) + Return m.llSucces +Endproc &&modificare_antet_gestiune \ No newline at end of file diff --git a/COMUN/programe/oproceduri_seturi_indicatori.prg b/COMUN/programe/oproceduri_seturi_indicatori.prg new file mode 100644 index 0000000..b694e89 --- /dev/null +++ b/COMUN/programe/oproceduri_seturi_indicatori.prg @@ -0,0 +1,748 @@ +***------------------------------------------------------------------------------------ +Procedure set_set + LParameters tnId_set + + && adauga in mg_indicatori inregistrarile din mg_tmp_indicatori + + Private pnId_set + Local lcSql, lnSucces + If Empty(tnId_set) + Return + Else + pnId_set = tnId_set + Endif + + lcSql = [begin PACK_MG_EVOLUTIE.SET_SET(?pnId_set); end;] + lnSucces = goExecutor.oExecute(lcSql) + + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare, 0 + 16, "Eroare") + Endif + Return m.lnSucces +Endproc && set_set +***------------------------------------------------------------------------------------ +Procedure viz_toate_seturile + + * DO make_cFCentre IN oproceduri_manager.prg + Create Cursor cTipuri_seturi (id_tip_set N(5), nume_tip_set C(30), ales N(1)) + Select cTipuri_seturi + + + Private poSeturi + Store '' To poSeturi + + Local lcSchema1, lcSelect1, lcOrder1, lcFiltru1, llAfiseaza + *!* lcSchema1 = [id_ctr N(5), id_part N(10), nume C(30), nr_ctr N(10), data_ctr D(8), obiect C(200), tip N(1), durata N(3), valftva N(20,4), proc_tva N(5,2), avans N(20,4), proc_avans N(5,2),]+; + *!* [val_finant N(20,4), proc_finant N(5,2), dobanda N(20,4), proc_dobanda N(5,2), val_rezid N(20,4), proc_rezid N(5,2), ]+; + *!* [rata N(20,4), comision N(20,4), proc_comision N(5,2), proc_asigurare N(5,2), val_asigurare N(20,4), val_ctr N(20,4), id_valuta N(5), nume_val C(4), curs N(10,4), zi_plata N(2), incetat N(1), sters N(1) ] + *!* + *!* lcSelect1 = [select c.id_ctr, c.id_part, p.nume, c.nr_ctr, c.data_ctr, c.obiect, c.tip, c.durata, c.valftva, c.proc_tva, c.avans, c.proc_avans, ]+; + *!* [c.val_finant, c.proc_finant, c.dobanda, c.proc_dobanda, c.val_rezid, c.proc_rezid, ]+; + *!* [c.rata, c.comision, c.proc_comision, c.proc_asigurare, c.val_asigurare, c.val_ctr, c.id_valuta, v.nume_val, c.curs, c.zi_plata, c.incetat, c.sters from ] + gcS + ; + *!* [.cf_contracte c join ] + gcS + [.nom_parteneri p on p.id_part = c.id_part]+; + *!* [ join ] + gcS + [.nom_valute v on c.id_valuta = v.id_valuta] + lcSelect1 = [select s1.*, nvl(s2.uzual,0) as uzual from (select s.* from mg_seturi s) s1 left join (select distinct id_set, 1 as uzual from mg_seturi_uzuale u where u.sters = 0) s2 on s1.id_set = s2.id_set] + lcOrder1 = [s1.nume_set] + lcgroup = [] + lcFiltru1 = [1=2] + lcFiltruOriginal = [] + llModParam = .T. + llAfiseaza = .F. + + gencursor('poSeturi', 'crsSeturi', lcSelect1, lcFiltru1, lcSchema1, lcOrder1, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal) + poSeturi.ca_baza1.afisare() + + lots = Createobject("frm_toate_seturile") + lots.Show(1) + + *!* IF USED("cFCentre") + *!* USE IN cFCentre + *!* ENDIF + +Endproc && viz_toate_seturile +***------------------------------------------------------------------------------------ +Procedure modifica_parametri + Parameters tnTip, tcAlias, tlDinFormModi + && tnTip: 1 - toate seturile; 2 - seturi uzuale + + + Private pnTip, pnId_set, pnLunaI, pnAnulI, pnLunaF, pnAnulF, pnCumul, pnIndAct, pnIndBal, pnDinFormModi && le trimit pe server + Store 0 To pnIndAct, pnIndBal + + If !Empty(tnTip) + pnTip = tnTip + Else + pnTip = 0 + Endif + + Local lcalias, llDinFormModi + lcalias = Alltrim(tcAlias) + llDinFormModi = tlDinFormModi + If llDinFormModi + pnDinFormModi = 1 + Else + pnDinFormModi = 0 + Endif + + Select (lcalias) + Scatter Name poset + pnId_set = id_set + + ***---- + lcSql = [begin PACK_MG_EVOLUTIE.get_indicatori_nu_act(?pnId_set,?pnDinFormModi,?@pnIndAct,?@pnIndBal); end;] + lnSucces = goExecutor.oExecute(lcSql) + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare, 0 + 16, "Eroare") + Return + Endif + ***---- + + lopc = Createobject("frm_parametri_calcul", pnIndAct, pnIndBal) + If tnTip = 2 + *!* lcSql = [select nume_set from mg_seturi where id_set = ]+Alltrim(Str(pnId_set)) + *!* lcCursor = 'cNume_set' + *!* lnSucces = goExecutor.oExecute(lcSel, lcCursor) + *!* If lnSucces < 0 + *!* AMESSAGEBOX(goExecutor.cEroare,0+16,"Eroare") + *!* Return + *!* Endif + *!* Select cNume_set + *!* lopc.lb_titlu_alb_b121.Caption = cNume_set.nume_set + *!* If Used('cNume_set') + *!* Use In cNume_set + *!* Endif + lopc.lb_titlu_alb_b121.Caption = 'set' + Else + lopc.lb_titlu_alb_b121.Caption = Alltrim(poset.nume_set) + Endif + lopc.Show(1) + + If buton = 2 + Return + Endif + + Select (lcalias) + Gather Name poset + + *pnId_set = poset.id_set + pnLunaI = poset.lunaI + pnAnulI = poset.anulI + pnLunaF = poset.lunaF + pnAnulF = poset.anulF + pnCumul = poset.cumul + + lcSql = [begin PACK_MG_EVOLUTIE.set_parametri(?pnTip, ?pnId_set, ?pnLunaI, ?pnAnulI, ?pnLunaF, ?pnAnulF, ?pnCumul, ?gnIdutil); end;] + lnSucces = goExecutor.oExecute(lcSql) + + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare, 0 + 16, "Eroare") + Return + Endif + +Endproc && modifica_parametri +***------------------------------------------------------------------------------------ +Procedure adauga_indicator + Parameters tnId_set, tcAlias + + Local lcalias, lnInd, llSucces + Private pnId_set, pnId_ind + + If !Empty(tnId_set) + pnId_set = tnId_set + Else + pnId_set = 0 + Endif + pnId_ind = 0 + + lcalias = Alltrim(tcAlias) + lnInd = 0 + llSucces = .F. + + Select (lcalias) + Scatter Name poIndicator Blank Memo + + poIndicator.tip = 1 + + Calculate Max(Val(Rand)) To lnRandMax + lnRandMax = lnRandMax + 1 + lcRandUrm = Padl(Alltrim(Str(lnRandMax, 4, 0)), 4, '0') + + poIndicator.Rand = lcRandUrm + poIndicator.nume_ind = "INDICATOR_" + lcRandUrm + + Calculate Cnt() For !Deleted() To lnInd + poIndicator.ord_rand = m.lnInd + 1 + + loib = Createobject("frm_tip_nume_rand_indicator") + loib.Show(1) + + If buton = 2 + RETURN m.llSucces + Endif + + poIndicator.id_set = pnId_set + + lcSql = [begin PACK_MG_EVOLUTIE.next_id_ind(?@pnId_ind); end;] + llSucces = goExecutor.oExecuta(lcSql) + + If m.llSucces + poIndicator.id_ind = pnId_ind + lcSql = [begin PACK_MG_EVOLUTIE.adauga_indicator(?pnId_set, ?pnId_ind, ?ALLTRIM(poIndicator.Rand), ?ALLTRIM(poIndicator.nume_ind), ?poIndicator.tip, ?poindicator.ord_rand); end;] + llSucces = goExecutor.oExecuta(lcSql) + IF m.llSucces + Select (lcalias) + Append Blank + Gather Name poIndicator Memo + ENDIF + ENDIF + + RETURN m.llSucces +Endproc && adauga_indicator +***------------------------------------------------------------------------------------ +***------------------------------------------------------------------------------------ +Procedure modifica_indicator + Parameters tnId_set, tnId_ind, tcAlias + + Private pnId_set, pnId_ind + LOCAL lnTip, lcAlias, llSucces + pnId_set = tnId_set + pnId_ind = tnId_ind + + lcalias = Alltrim(tcAlias) + llSucces = .F. + + Select (lcalias) + Scatter Name poIndicator Memo + lnTip = poIndicator.tip + + loib = Createobject("frm_tip_nume_rand_indicator") + loib.Show(1) + + If buton = 2 + RETURN m.llSucces + ENDIF + lcSql = [begin PACK_MG_EVOLUTIE.modifica_indicator(?pnId_set, ?pnId_ind, ?Alltrim(poIndicator.Rand), ?Alltrim(poIndicator.nume_ind), ?poIndicator.tip, ?poindicator.ord_rand); end;] + llSucces = goExecutor.oExecuta(lcSql) + + If m.llSucces + IF poIndicator.tip <> m.lnTip + poIndicator.formula = "" + ENDIF + + Select (lcalias) + Gather Name poIndicator Memo + Endif + + RETURN m.llSucces +Endproc && modifica_indicator +***------------------------------------------------------------------------------------ +Procedure test + + loft = Createobject("frm_test") + loft.Show(1) + +Endproc && test +*------------------------------------------------------------------------------------ +Procedure test_List + + pcLista = "+T201 +T203 +T204+T205+T206+T207-T208+T209" + + lcLista = gcTempPath + "tLista.dbf" + Create Table (lcLista) (valoare C(11)) + + lnAparitiiP = 1 + lnAparitiiM = 1 + + For i = 1 To Len(pcLista) + lcSemn = Substr(pcLista, i, 1) + If lcSemn = "+" Or lcSemn = "-" + If lcSemn = "+" + lnAparitiiP = lnAparitiiP + 1 + Endif + If lcSemn = "-" + lnAparitiiM = lnAparitiiM + 1 + Endif + lnNextSemnP = At("+", pcLista, lnAparitiiP) + lnNextSemnM = At("-", pcLista, lnAparitiiM) + + If lnNextSemnP < lnNextSemnM And lnNextSemnP > 0 + lnNextSemn = lnNextSemnP + Else + If lnNextSemnM > 0 + lnNextSemn = lnNextSemnM + Else + lnNextSemn = lnNextSemnP + Endif + Endif + * ?'lnNextSemn = '+ALLTRIM(STR(lnNextSemn)) + lnLen = lnNextSemn - i + If lnNextSemn = 0 And i < Len(pcLista) && ultimul cont + lcCont = Substr(pcLista, i) + Else + lcCont = Substr(pcLista, i, lnLen) + Endif + Select (lcLista) + Insert Into (lcLista) (valoare) Values (lcCont) + * ?lcCont + Endif + Endfor + + + Select (lcLista) + loft = Createobject("frm_test_List") + loft.Show(1) + +Endproc && test_List +*------------------------------------------------------------------------------------ +Procedure editare_set + Lparameters tnId_set, tnId_ModiPara, tnId_ind + + Private pnId_set, pnCount, pcNume_set + pnId_set = Iif(!Empty(m.tnId_set), m.tnId_set, 0) + pnCount = 0 && cati indicatori are setul + pcNume_set = '' + llNou = Empty(m.tnId_set) + + * Nume Set + If m.llNou + pcNume_set = "Set nou_" + Ttoc(Datetime()) + lcSql = [begin PACK_MG_EVOLUTIE.next_id_set(?@pnId_set); end;] + lnSucces = goExecutor.oExecute(lcSql) + + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare, 0 + 16, "Eroare") + Return + Endif + Else + lcSql = [begin PACK_MG_EVOLUTIE.GET_NUME_SET(?ALLTRIM(STR(pnId_set)),?@pcNume_set);end;] + lnSucces = goExecutor.oExecute(lcSql) + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare, 0 + 16, "Eroare") + Return + Endif + Endif + + * Copii indicatori din mg_indicatori in temporarul mg_tmp_indicatori + * La editare lucrez cu mg_tmp_indicatori ca sa pot salva/renunta + lcSql = [begin PACK_MG_EVOLUTIE.GET_SET(?pnId_set,?@pnCount); end;] + lnSucces = goExecutor.oExecute(lcSql) + + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare, 0 + 16, "Eroare") + Return + Endif + + * Selectez din mg_tmp_indicatori + Private poset, pcschema1, pcselect1 + Store '' To poset + pcschema1 = [''] + pcselect1 = ['select id_ind, id_set, rand, ord_rand, nume_ind, formula, ales, tip, comentariu from mg_tmp_indicatori where 1=2'] + pcorder1 = [ord_rand, rand] + pcfiltru1 = [sters=0 and id_set = ] + Alltrim(Str(pnId_set)) + llAfiseaza = .F. + tcAlias = 'm_indicatori' + gencursor('poSet', 'm_indicatori', pcselect1, pcfiltru1, pcschema1, pcorder1, llAfiseaza) + poset.ca_baza1.afisare() + + * Selectez din planul de conturi + Private poPlcont, pcschema1, pcselect1 + Store '' To poPlcont + pcschema1 = [''] + pcschema1 = [cont C(4), acont C(4), explicatie C(100), an N(4) ] + pcselect1 = ['select distinct cont, acont, explicatie, an FROM plcont where 1=2'] + pcorder1 = [cont, acont] + pcfiltru1 = [] + pcfiltru1 = [AN = ] + Alltrim(Str(GNAN)) + llAfiseaza = .F. + gencursor('poPlcont', 'crsPlcont', pcselect1, pcfiltru1, pcschema1, pcorder1, llAfiseaza) + poPlcont.ca_baza1.afisare() + + * cursor temporar pentru indicatorii de tip jurnal + * lcTabelRJ = gcTempPath + "tLista_rj.dbf" + Create Cursor tLista_rj (camp_numeT C(30), camp_nume C(30), formula C(200), traducere C(200)) + + * DO make_cFCentre IN oproceduri_manager.prg && apelata in princ.set_uzual_requery + Select m_indicatori + If !Empty(tnId_ind) + Locate For id_ind = tnId_ind + If !Found() + Go Top + Endif + Else + Go Top + Endif + + poms = Createobject("frm_set", pnId_set, pcNume_set, m.llNou, tnId_ModiPara) + poms.Show(1) + + Use In (Select('tLista_rj')) + Use In (Select('m_indicatori')) + + Release poset + +Endproc && editare_set +*------------------------------------------------------------------------------------ +Procedure desparte_formula_bal + Parameters tcFormula + + Local lcFormula + lcFormula = Alltrim(tcFormula) + + Store '' To pcPD1, pcPC1, pcPD, pcPC, pcRD, pcRC, pcTD, pcTC, pcSD, pcSC + Dimension laSir(100) + lnElem = lista2array(lcFormula, @laSir, ";") + For i = 1 To lnElem + lnPD1 = At("", laSir(i)) + lnPC1 = At("", laSir(i)) + lnPD = At("", laSir(i)) + lnPC = At("", laSir(i)) + lnRD = At("", laSir(i)) + lnRC = At("", laSir(i)) + lnTD = At("", laSir(i)) + lnTC = At("", laSir(i)) + lnSD = At("", laSir(i)) + lnSC = At("", laSir(i)) + Do Case + Case lnPD1 > 0 + pcPD1 = Substr(laSir(i), 6) + Case lnPC1 > 0 + pcPC1 = Substr(laSir(i), 6) && -C1511 + Case lnPD > 0 + pcPD = Substr(laSir(i), 5) + Case lnPC > 0 + pcPC = Substr(laSir(i), 5) + Case lnRD > 0 + pcRD = Substr(laSir(i), 5) + Case lnRC > 0 + pcRC = Substr(laSir(i), 5) + Case lnTD > 0 + pcTD = Substr(laSir(i), 5) + Case lnTC > 0 + pcTC = Substr(laSir(i), 5) + Case lnSD > 0 + pcSD = Substr(laSir(i), 5) + Case lnSC > 0 + pcSC = Substr(laSir(i), 5) + Endcase + Endfor + +Endproc && desparte_formula_bal +*------------------------------------------------------------------------------------ +Procedure completeaza_lista_bal + Parameters tcLista, tcTabel + + Local lcLista, lcTabel, lnAparitiiP, lnAparitiiM + lcLista = Alltrim(tcLista) + lcTabel = Alltrim(tcTabel) + Store 1 To lnAparitiiP, lnAparitiiM + + For i = 1 To Len(lcLista) + lcSemn = Substr(lcLista, i, 1) + If lcSemn = "+" Or lcSemn = "-" + If lcSemn = "+" + lnAparitiiP = lnAparitiiP + 1 + Endif + If lcSemn = "-" + lnAparitiiM = lnAparitiiM + 1 + Endif + lnNextSemnP = At("+", lcLista, lnAparitiiP) + lnNextSemnM = At("-", lcLista, lnAparitiiM) + + If lnNextSemnP < lnNextSemnM And lnNextSemnP > 0 + lnNextSemn = lnNextSemnP + Else + If lnNextSemnM > 0 + lnNextSemn = lnNextSemnM + Else + lnNextSemn = lnNextSemnP + Endif + Endif + lnLen = lnNextSemn - i + If lnNextSemn = 0 And i < Len(lcLista) && ultimul cont + lcCont = Substr(lcLista, i) + Else + lcCont = Substr(lcLista, i, lnLen) + Endif + Select (lcTabel) + Insert Into (lcTabel) (valoare) Values (lcCont) + Endif + Endfor + + Select (lcTabel) + Insert Into (lcTabel) (valoare) Values ("") + +Endproc && completeaza_lista_bal +*------------------------------------------------------------------------------------ +*------------------------------------------------------------------------------------ +Procedure completeaza_lista_randuri + Parameters tcLista, tcTabel + + Local lcLista, lcTabel + lcLista = Alltrim(tcLista) + lcTabel = Alltrim(tcTabel) + + Do While Len(lcLista) > 0 && +[R01]+[R02] + lnRand = At("[R", lcLista) && 2 + If lnRand > 0 + + For i = 1 To lnRand - 2 + lcVal = Substr(lcLista, i, 1) + Select (lcTabel) + Insert Into (lcTabel) (valoare) Values (lcVal) + Endfor + + lnPI = At("]", lcLista) && paranteza inchisa = "]" + lcVal = Substr(lcLista, lnRand - 1, lnPI - (lnRand - 2)) && rand + Select (lcTabel) + Insert Into (lcTabel) (valoare) Values (lcVal) + lcLista = Substr(lcLista, lnPI + 1) + Else + For i = 1 To Len(lcLista) + lcVal = Substr(lcLista, i, 1) + Insert Into (lcTabel) (valoare) Values (lcVal) + Endfor + lcLista = "" + Endif + + Enddo + + Select (lcTabel) + Insert Into (lcTabel) (valoare) Values ("") + +Endproc && completeaza_lista_randuri +*------------------------------------------------------------------------------------ +Procedure desparte_formula_rj + Parameters tcFormula, tcTabel + + Local lcFormula, lcTabel + lcFormula = Alltrim(tcFormula) + lcTabel = Alltrim(tcTabel) + + Select (lcTabel) + Delete All + + If !Empty(lcFormula) + Dimension laSir(100), laSirCamp(100) + lnElem = lista2array(lcFormula, @laSir, ";") && pe cate campuri am definit formula + For i = 1 To lnElem && + lnCampuri = lista2array(laSir[i], @laSirCamp, "|") && intotdeauna am 4 chestii: + * + Select (lcTabel) + Append Blank + Replace camp_numeT With Substr(laSirCamp[1], 2, Len(laSirCamp[1]) - 2), ; + camp_nume With Substr(laSirCamp[2], 2, Len(laSirCamp[2]) - 2), ; + traducere With Substr(laSirCamp[3], 2, Len(laSirCamp[3]) - 2), ; + formula With Substr(laSirCamp[4], 2, Len(laSirCamp[4]) - 2) + Endfor + + Select (lcTabel) + Go Top + Endif + +Endproc && desparte_formula_rj +*------------------------------------------------------------------------------------ +***------------------------------------------------------------------------------------ +Procedure sterge_set_uzual + Parameters tnId_set + + Private pnId_set + + If !Empty(tnId_set) + pnId_set = tnId_set + Else + Return + Endif + + ** + lcSql = [begin pack_mg_evolutie.sterge_set_uzual(?pnId_set,?gnIdUtil); end;] + lnSucces = goExecutor.oExecute(lcSql) + + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare, 0 + 16, "Eroare") + Return + Endif + +Endproc && sterge_set_uzual +***------------------------------------------------------------------------------------ +Procedure calculeaza_set + Parameters tcFile, tcNumeSet + + Local lcNumeSet, lcFisExport + + + lcalias = Juststem(tcFile) + + Select Distinct id_set, ; + gnLuna As lunaI, GNAN As anulI, ; + gnLuna As lunaF, GNAN As anulF, ; + 00 As cumul, 0 As faraGrafic ; + From (lcalias) ; + Into Cursor cParametri + + Select cParametri + Scatter Name poset + + poset.cumul = 1 && luni + + loexport = Createobject("frm_parametri_calcul") + loexport.Show(1) + + If buton = 2 + Return + Endif + +Endproc && calculeaza_set +***------------------------------------------------------------------------------------ +***--------------------------------------------------------------------------------------------- +Procedure listare_set + Parameters tnId_set + + Private pcTitlu, pnId_set, pcNume_set && ,pcDataOra + Store '' To pcTitlu, pcNume_set + pnId_set = tnId_set + && pcDataOra = Get_Ora(2) + + Local aFormula, aImpart, lcSql, lnSucces, lcFormula + Declare aFormula[1], aImpart[1] + + lcSql = [begin PACK_MG_EVOLUTIE.GET_NUME_SET(?ALLTRIM(STR(pnId_set)),?@pcNume_set);end;] + lnSucces = goExecutor.oExecute(lcSql) + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare, 0 + 16, "Eroare") + Return + Endif + + pcTitlu = Alltrim(pcNume_set) + + Private poset + Store '' To poset + lcSchema1 = [rand C(4), nume_ind C(200), tip N(1), formula M(4), comentariu M(4)] + lcSelect1 = ['select rand, nume_ind, tip, formula, comentariu from mg_indicatori where 1=2'] + lcOrder1 = [ord_rand, rand] + lcFiltru1 = [id_set=] + Alltrim(Str(pnId_set)) + llAfiseaza = .F. + gencursor('poSet', 'cSet', lcSelect1, lcFiltru1, lcSchema1, lcOrder1, llAfiseaza) + poset.ca_baza1.afisare() + + + Select * From cSet Into Cursor cListSet Readwrite + + Select cListSet + If _Tally = 0 + AMESSAGEBOX("Setul nu contine indicatori", 0 + 48, "Atentie") + Return + Endif + + Select cListSet + Replace All formula With Strtran(formula, ";<", ";" + Chr(13) + "<") For tip = 1 + Replace All formula With Strtran(formula, "PD", "Precedent Debit") For tip = 1 + Replace All formula With Strtran(formula, "PC", "Precedent Credit") For tip = 1 + Replace All formula With Strtran(formula, "RD", "Rulaj Debit") For tip = 1 + Replace All formula With Strtran(formula, "RC", "Rulaj Credit") For tip = 1 + Replace All formula With Strtran(formula, "TD", "Total Debit") For tip = 1 + Replace All formula With Strtran(formula, "TC", "Total Credit") For tip = 1 + Replace All formula With Strtran(formula, "SD", "Sold Debit") For tip = 1 + Replace All formula With Strtran(formula, "SC", "Sold Credit") For tip = 1 + Replace All formula With Strtran(formula, ">", "> ") For tip = 1 + + Select cListSet + Scan For tip = 2 && registru jurnal + lcFormula = '' + lnCampuri = lista2array(formula, @aFormula, ";") + For i = 1 To lnCampuri + ln = lista2array(aFormula[i], @aImpart, "|") + lcFormula = lcFormula + aImpart[1] + ": " + Substr(aImpart[3], 2, Len(aImpart[3]) - 2) + Chr(13) + Replace formula With lcFormula + Endfor + Endscan + + + *!* Select cListSet + *!* Report Form rList_set To Printer Prompt Preview + goExport.export2frx([cListSet], [rList_set]) + If Used("cListSet") + Use In cListSet + Endif + + Release poset +Endproc && listare_set +***--------------------------------------------------------------------------------------------- +Procedure pre_listare_formule_set + Parameters tnId_set + + Local aFormula, aImpart, lcSql, lnSucces, lcFormula + Declare aFormula[1], aImpart[1] + + Private poset + Store '' To poset + + Local lcSchema1, lcSelect1, lcOrder1, lcFiltru1, llAfiseaza + lcSchema1 = [rand C(4), nume_ind C(200), tip N(1), formula M(4), comentariu M(4), ales N(1)] + lcSelect1 = [select rand, nume_ind, tip, formula, comentariu, ales from mg_indicatori] + lcOrder1 = [] + lcgroup = [] + lcFiltru1 = [] + lcFiltruOriginal = [id_set=] + Alltrim(Str(tnId_set)) + llModParam = .T. + llAfiseaza = .F. + + gencursor('poset', 'cSet', lcSelect1, lcFiltru1, lcSchema1, lcOrder1, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal) + poset.ca_baza1.afisare() + + Release poset + + Select * From cSet Into Cursor cListSet Readwrite + If Used("cSet") + Use In cSet + Endif + + Select cListSet + If _Tally = 0 + AMESSAGEBOX("Setul nu contine indicatori", 0 + 48, "Atentie") + Return + Endif + + Select cListSet + Replace All formula With Strtran(formula, ";<", ";" + Chr(13) + "<") For tip = 1 + Replace All formula With Strtran(formula, "PD", "Precedent Debit") For tip = 1 + Replace All formula With Strtran(formula, "PC", "Precedent Credit") For tip = 1 + Replace All formula With Strtran(formula, "RD", "Rulaj Debit") For tip = 1 + Replace All formula With Strtran(formula, "RC", "Rulaj Credit") For tip = 1 + Replace All formula With Strtran(formula, "TD", "Total Debit") For tip = 1 + Replace All formula With Strtran(formula, "TC", "Total Credit") For tip = 1 + Replace All formula With Strtran(formula, "SD", "Sold Debit") For tip = 1 + Replace All formula With Strtran(formula, "SC", "Sold Credit") For tip = 1 + Replace All formula With Strtran(formula, ">", "> ") For tip = 1 + + Select cListSet + Scan For tip = 2 && registru jurnal + lcFormula = '' + lnCampuri = lista2array(formula, @aFormula, ";") + For i = 1 To lnCampuri + ln = lista2array(aFormula[i], @aImpart, "|") + lcFormula = lcFormula + aImpart[1] + ": " + Substr(aImpart[3], 2, Len(aImpart[3]) - 2) + Chr(13) + Replace formula With lcFormula + Endfor + Endscan + + Release poset + + Return "cListSet" + +Endproc && pre_listare_formule_set +***--------------------------------------------------------------------------------------------- + + + + + + + + + + + + + + + diff --git a/COMUN/programe/oproceduri_stocuri.prg b/COMUN/programe/oproceduri_stocuri.prg new file mode 100644 index 0000000..ac2ca10 --- /dev/null +++ b/COMUN/programe/oproceduri_stocuri.prg @@ -0,0 +1,288 @@ +*!* 07.05.2010 +*!* marius.mutu +*!* viz_stocuri - + codbare + +PROCEDURE viz_stocuri +PARAMETERS tnTipGest,tcTipGest + +LOCAL lnTipGest, lcFiltruInitial,lcTipGest, lcFiltruPermis +lcFiltruTipGest = "" +lcFiltruPermis = "" +lnTipGest = tnTipGest +lcTipGest = "" +IF EMPTY(tcTipGest) + lcTipGest = [] +ELSE + lcTipGest = tcTipGest +ENDIF + +lcFiltruInitial = [a.an=]+ Alltrim(Str(gnAn))+[ and a.luna=]+ Alltrim(Str(gnLuna))+; + STRTRAN(gcCondSucursala,[id_sucursala],[a.id_sucursala]) +IF !EMPTY(lnTipGest) + lcFiltruTipGest = [ and a.nr_pag = ] + ALLTRIM(STR(lnTipGest)) +ENDIF + +IF EMPTY(gcGestPermis) + lcFiltruPermis = [ and 1=2] +else + lcFiltruPermis = [ and a.id_gestiune in (] + gcGestPermis + [)] +EndIf + +lcFiltruInitial = lcFiltruInitial + lcFiltruTipGest + lcFiltruPermis + +LOCAL lnStocObinv +lnStocObinv = 0 +DO INAINTE_DE_STOC WITH gnAn, gnLuna, tnTipGest, lnStocObinv in oinainte_de.prg + +PRIVATE postocuri,pcschema,pcselect,pcfiltru,pcorder +STORE '' TO postocuri + +*!* 07.05.2010 +pcschema=['nr_crt n(6),id_stoc n(20),an n(4),luna n(2),id_articol n(10),serie c(100),pret n(16,4),pretv n(16,4),'+]+; + ['tva n(16,4),tvav n(16,4),cants n(14,3),cant n(14,3),cante n(14,3),cont c(4),'+]+; + ['acont c(4),pretd n(16,4),dataora d,datain d,dataout d,proc_tvav n(5,2),'+]+; + ['id_gestiune n(5),codmat c(50),denumire c(100),um c(6),nr_pag n(2),nume_gestiune c(50),'+]+; + ['cgest c(20),um2 c(10),cant_bax n(9,4),grupa c(100),subgrupa c(100),id_valuta n(10), nume_val c(4),'+]+; + ['codmatf c(50), lot c(50), adata_expirare T,id_sucursala N(5),sucursala C(100),'+]+; + ['id_lucrare_rez N(10),nrord_rez C(50),id_part_rez N(10),part_rez C(100), codbare c(100),id_part N(10),furn_princ c(100), id_furnizor N(10), furnizor c(100), codnc8 C(20), greutate N(12,4), tara_origine C(100)'] + +pcselect=['select row_number() over (order by a.denumire) as nr_crt,a.id_stoc,a.an,a.luna,a.id_articol,a.serie,'+]+; + ['a.pret,a.pretv,a.tva,a.tvav,a.cants,a.cant,a.cante,a.cont,a.acont,a.pretd,a.dataora,'+]+; + ['a.datain,a.dataout,a.proc_tvav,'+]+; + ['a.id_gestiune,a.codmat,a.denumire,a.um,a.nr_pag,a.nume_gestiune,a.cgest,a.um2,a.cant_bax,a.grupa,a.subgrupa, a.id_valuta, a.nume_val, a.codmatf, a.lot, a.adata_expirare,'+]+; + ['a.id_sucursala,a.sucursala,'+]+; + ['a.id_lucrare_rez,a.nrord_rez,a.id_part_rez,a.part_rez, a.codbare,id_part,furn_princ, id_furnizor, furnizor, a.codnc8, a.greutate, a.tara_origine '+]+; + ['from vstoc a where 1=2'] +*!* 07.05.2010 ^ +pcfiltru = [1=2] +pcorder=[1] +llAfiseaza=.F. +_SCREEN.MOUSEPOINTER= 11 +gencursor('postocuri','crsStocuri',pcselect,pcfiltru,pcschema,pcorder,llAfiseaza) +postocuri.ca_baza1.afisare() + +LOCAL loStocuri +loStocuri=CREATEOBJECT('frm_stocuri') +_SCREEN.MOUSEPOINTER= 0 +loStocuri.ntipgest = lnTipGest +PRIVATE pcListTipGest +pcListTipGest = [] +lnOptgrValue = IIF(loStocuri.ntipgest<>0,IIF(loStocuri.ntipgest=6,2,IIF(loStocuri.ntipgest=7,4,1)),3) +WITH loStocuri + .Lb_titlu_alb_b121.CAPTION = [STOCURI] + IIF(!EMPTY(lcTipGest),[ / ] + lcTipGest,[]) + .cFiltruInitial = lcFiltruInitial + .optgrup.VALUE = lnOptgrValue + IF lnOptgrValue = 1 + .optgrup.option2.VISIBLE = .F. + .optgrup.option3.VISIBLE = .F. + .optgrup.option4.VISIBLE = .F. + ENDIF + IF lnOptgrValue = 2 + .optgrup.option1.VISIBLE = .F. + .optgrup.option3.VISIBLE = .F. + .optgrup.option4.VISIBLE = .F. + ENDIF + IF lnOptgrValue = 4 + .optgrup.option1.VISIBLE = .F. + .optgrup.option2.VISIBLE = .F. + .optgrup.option3.VISIBLE = .F. + ENDIF + .optgrup.ENABLED = IIF(.ntipgest<>0,.F.,.T.) + IF .But_modifica1.VISIBLE + .But_modifica1.VISIBLE = IIF(.ntipgest<>0,.T.,.F.) + ENDIF +ENDWITH +loStocuri.SHOW(1) +RELEASE postocuri + +ENDPROC && viz_stocuri +************************************************************************************************ +PROCEDURE viz_stocuri_pretv +PARAMETERS tnTipGest,tcTipGest + +LOCAL lnTipGest, lcFiltruInitial,lcTipGest, lcFiltruPermis +lcFiltruTipGest = "" +lcFiltruPermis = "" +lnTipGest = tnTipGest +lcTipGest = "" +IF EMPTY(tcTipGest) + lcTipGest = [] +ELSE + lcTipGest = tcTipGest +ENDIF + +lcFiltruInitial = [a.an=]+ Alltrim(Str(gnAn))+[ and a.luna=]+ Alltrim(Str(gnLuna))+; + STRTRAN(gcCondSucursala,[id_sucursala],[a.id_sucursala]) +IF !EMPTY(lnTipGest) + lcFiltruTipGest = [ and a.nr_pag = ] + ALLTRIM(STR(lnTipGest)) +ENDIF + +IF EMPTY(gcGestPermis) + lcFiltruPermis = [ and 1=2] +else + lcFiltruPermis = [ and a.id_gestiune in (] + gcGestPermis + [)] +EndIf + +lcFiltruInitial = lcFiltruInitial + lcFiltruTipGest + lcFiltruPermis + +LOCAL lnStocObinv +lnStocObinv = 0 +DO INAINTE_DE_STOC WITH gnAn, gnLuna, tnTipGest, lnStocObinv in oinainte_de.prg + +PRIVATE postocuri,pcschema,pcselect,pcfiltru,pcorder +STORE '' TO postocuri + +pcschema=['nr_crt n(6),an n(4),luna n(2),id_articol n(10),serie c(100),pretv n(16,4),'+]+; + ['tvav n(16,4),cants n(14,3),cant n(14,3),cante n(14,3),cont c(4),'+]+; + ['acont c(4),dataora d,datain d,dataout d,proc_tvav n(5,2),'+]+; + ['id_gestiune n(5),codmat c(50),denumire c(100),'+]+; + ['um c(6),nr_pag n(2),nume_gestiune c(50),cgest c(20),um2 c(10),cant_bax n(9,4),grupa c(100),'+]+; + ['subgrupa c(100), codmatf c(50), lot c(50), adata_expirare T,id_sucursala n(5),sucursala c(100),'+]+; + ['id_lucrare_rez N(10),nrord_rez C(50),id_part_rez N(10),part_rez C(100),id_part n(10),furn_princ c(100), id_furnizor N(10), furnizor c(100), codnc8 C(20), greutate N(12,4), tara_origine C(100)'] +pcselect=['select row_number() over (order by a.denumire) as nr_crt,a.an,a.luna,a.id_articol,a.serie,'+]+; + ['a.pretv,a.tvav,a.cants,'+]+; + ['a.cant,a.cante,a.cont,a.acont,a.dataora,'+]+; + ['a.datain,a.dataout,a.proc_tvav,'+]+; + ['a.id_gestiune,a.codmat,a.denumire,a.um,a.nr_pag,a.nume_gestiune,a.cgest,a.um2,a.cant_bax,a.grupa,'+]+; + ['a.subgrupa, a.codmatf, a.lot, a.adata_expirare,a.id_sucursala,a.sucursala,'+]+; + ['a.id_lucrare_rez,a.nrord_rez,a.id_part_rez,a.part_rez,a.id_part,a.furn_princ, a.id_furnizor, a.furnizor, a.codnc8, a.greutate, a.tara_origine '+]+; + [' from ]+ gcS+[.vstoc_pretv a where 1=2'] + +pcfiltru = [1=2] +pcorder=[1] +llAfiseaza=.F. +_SCREEN.MOUSEPOINTER= 11 +gencursor('postocuri','crsStocuri',pcselect,pcfiltru,pcschema,pcorder,llAfiseaza) +postocuri.ca_baza1.afisare() + +LOCAL loStocuri +loStocuri=CREATEOBJECT('frm_stocuri_pretv') +_SCREEN.MOUSEPOINTER= 0 +loStocuri.ntipgest = lnTipGest +PRIVATE pcListTipGest +pcListTipGest = [] +WITH loStocuri + .Lb_titlu_alb_b121.CAPTION = [STOCURI] + IIF(!EMPTY(lcTipGest),[ / ] + lcTipGest,[]) + .cFiltruInitial = lcFiltruInitial +ENDWITH +loStocuri.SHOW(1) +RELEASE postocuri + +ENDPROC && viz_stocuri_pretv +************************************************************************************************ +PROCEDURE viz_stocuri_obinv +PARAMETERS tnTipGest,tcTipGest, tlInFolosinta + +LOCAL lnTipGest, lcFiltruInitial,lcTipGest, lcFiltruPermis +lcFiltruTipGest = "" +lcFiltruPermis = "" +lnTipGest = tnTipGest +lcTipGest = "" + +IF EMPTY(tcTipGest) + lcTipGest = [] +ELSE + lcTipGest = tcTipGest +ENDIF + +lcFiltruInitial = [a.an=]+ Alltrim(Str(gnAn))+[ and a.luna=]+ Alltrim(Str(gnLuna))+; + STRTRAN(gcCondSucursala,[id_sucursala],[a.id_sucursala]) +*!* 05.06.2008 +*!* nu este nevoie de nr_pag in vstoc_obinv +*!* IF !EMPTY(lnTipGest) +*!* lcFiltruTipGest = [ and a.nr_pag = ] + ALLTRIM(STR(lnTipGest)) +*!* ENDIF +*!* 05.06.2008 ^ + +IF EMPTY(gcGestPermis) + lcFiltruPermis = [ and 1=2] +else + lcFiltruPermis = [ and a.id_gestiune in (] + gcGestPermis + [)] +EndIf + +lcFiltruInitial = lcFiltruInitial + lcFiltruTipGest + lcFiltruPermis + +LOCAL lnStocObinv +lnStocObinv = 1 +DO INAINTE_DE_STOC WITH gnAn, gnLuna, tnTipGest, lnStocObinv in oinainte_de.prg + + +PRIVATE postocuri +Local lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcGroup, llModParam, lcFiltruOriginal +STORE '' TO postocuri + +IF tlInFolosinta + lcSchema = [nr_crt n(6),id_stoc n(20),an n(4),luna n(2),id_articol n(10),serie c(100), lot c(20), pret n(16,4),cants n(14,3),cant n(14,3),cante n(14,3),cont c(4), ]+; + [acont c(4),pretd n(16,4),dataora d,datain d,dataout d, ]+; + [id_gestiune n(5),codmat c(50),denumire c(100),id_responsabil n(10),nresp c(30), ]+; + [um c(6),cgest c(20),datapif d,dnf N(5),dns_luni n(10),nume_gestiune c(50), ]+; + [marca N(10), id_meseria N(5), meserie C(64), id_formatia N(5), formatia C(64), dataang D, datalic D, ]+; + [id_grupa N(5), grupa C(100), id_subgrupa N(5), subgrupa C(100), ]+; + [um2 c(10),cant_bax n(9,4),id_sucursala N(5),sucursala C(100), furn_princ C(100), codnc8 C(20), greutate N(12,4), tara_origine C(100)] +ELSE + lcschema = [nr_crt n(6),id_stoc n(20),an n(4),luna n(2),id_articol n(10),serie c(100),lot c(20),pret n(16,4),cants n(14,3),cant n(14,3),cante n(14,3),cont c(4), ]+; + [acont c(4),pretd n(16,4),dataora d,datain d,dataout d, ]+; + [id_gestiune n(5),codmat c(50),denumire c(100),id_responsabil n(10),nresp c(30), ]+; + [um c(6),cgest c(20),datapif d,dns_luni n(10),nume_gestiune c(50), ]+; + [um2 c(10),cant_bax n(9,4),grupa c(100),subgrupa c(100),id_sucursala N(5),sucursala C(100), furn_princ C(100), codnc8 C(20), greutate N(12,4), tara_origine C(100)] +ENDIF + +IF tlInFolosinta + lcselect = [select row_number() over (order by denumire) as nr_crt, ]+; + [id_stoc, an, luna, id_articol, serie, lot,pret, cants, ]+; + [cant, cante, cont, acont, pretd, dataora, datain, dataout, id_gestiune, ]+; + [codmat, denumire, id_responsabil, nresp, ]+; + [um, cgest, datapif, dnf, dns_luni, nume_gestiune, ]+; + [marca, id_meseria, meseria, id_formatia, formatia, dataang, datalic, ]+; + [id_grupa, grupa, id_subgrupa, subgrupa, um2, cant_bax,id_sucursala,sucursala,furn_princ, codnc8, greutate, tara_origine ]+; + [ from vstoc_obinv_sal a] + +ELSE + lcselect = [select row_number() over (order by denumire) as nr_crt,id_stoc,an,luna,id_articol,serie,lot,pret,cants, ]+; + [cant,cante,cont,acont,pretd,dataora,datain,dataout,id_gestiune,codmat,denumire,id_responsabil,nresp, ]+; + [um,cgest,datapif,dns_luni,nume_gestiune,um2,cant_bax,grupa,subgrupa,id_sucursala,sucursala,furn_princ, codnc8, greutate, tara_origine ]+; + [ from vstoc_obinv a] +ENDIF + +lcFiltru = [1=2] +lcOrder = [1] +lcgroup = [] +llAfiseaza=.F. +lcFiltruOriginal = [] +llModParam = .T. +_SCREEN.MOUSEPOINTER= 11 + +gencursor('postocuri','crsStocuri', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcGroup, llModParam, lcFiltruOriginal) +postocuri.ca_baza1.afisare() +_SCREEN.MOUSEPOINTER= 0 + +PRIVATE pcListTipGest +LOCAL loStocuri +pcListTipGest = [] +loStocuri=CREATEOBJECT('frm_stocuri_obinv',tlInFolosinta) +loStocuri.ntipgest = lnTipGest +lnOptgrValue = IIF(lnTipGest<>0,IIF(lnTipGest=6,2,1),3) +WITH loStocuri + .Lb_titlu_alb_b121.CAPTION = [STOCURI / OBIECTE DE INVENTAR AFLATE IN FOLOSINTA] + .cFiltruInitial = lcFiltruInitial + .optgrup.VALUE = lnOptgrValue + IF lnOptgrValue = 1 + .optgrup.option2.VISIBLE = .F. + .optgrup.option3.VISIBLE = .F. + ENDIF + IF lnOptgrValue = 2 + .optgrup.option1.VISIBLE = .F. + .optgrup.option3.VISIBLE = .F. + ENDIF + .optgrup.ENABLED = IIF(.ntipgest<>0,.F.,.T.) + IF .But_modifica1.VISIBLE + .But_modifica1.VISIBLE = IIF(.ntipgest<>0,.T.,.F.) + ENDIF +ENDWITH +loStocuri.SHOW(1) +RELEASE postocuri + +ENDPROC && viz_stocuri_obinv + + + diff --git a/COMUN/programe/oproceduri_util.prg b/COMUN/programe/oproceduri_util.prg new file mode 100644 index 0000000..c731b5b --- /dev/null +++ b/COMUN/programe/oproceduri_util.prg @@ -0,0 +1,67 @@ +*!* 03.01.2017 +*!* GetProcTvaStandard TVA 19% + +*** proceduri utilitare + +*!* get_oluna() intoarce un obiect cu luna, anul de inceput, luna, anul de sfarsit din calendar +*!* tnAn, tnLuna - daca procedura da eroare se anul, luna inceput/sfarsit se intializeaza cu aceste valori +Function get_oluna + Lparameters tnAn, tnLuna + + Local loReturn + loReturn = Createobject("EMPTY") + Local lcSelect, lcCursor, lnSucces, lnMaxLuna, lnMinLuna, lnLunaMax, lnAnMax, lnLunaMin, lnAnMin + + lnLunaMin = tnAn + lnAnMin = tnLuna + lnLunaMax = tnAn + lnAnMax = tnLuna + + AddProperty(loReturn, 'lunamin',0) + AddProperty(loReturn, 'anmin',0) + AddProperty(loReturn, 'lunamax',0) + AddProperty(loReturn, 'anmax',0) + + + lcSelect = [select max(anul*12+luna) as maxluna, min(anul*12+luna) as minluna from calendar] + lcCursor = [crsCalendarTemp] + + lnSucces = goExecutor.oExecute(lcSelect,lcCursor) + If lnSucces > 0 + + Select crsCalendarTemp + lnMaxLuna = maxluna + lnMinLuna = minluna + + lnLunaMax = Round(Mod(lnMaxLuna,12),0) + lnAnMax = Int(lnMaxLuna/12) + If lnLunaMax = 0 And lnAnMax <> 0 + lnLunaMax = 12 + lnAnMax = lnAnMax - 1 + Endif + + lnLunaMin = Round(Mod(lnMinLuna,12),0) + lnAnMin = Int(lnMinLuna/12) + If lnLunaMin = 0 And lnAnMin <> 0 + lnLunaMin = 12 + lnAnMin = lnAnMin - 1 + Endif + + + + If Used(lcCursor) + Use In (lcCursor) + Endif + Else + aMESSAGEBOX(goExecutor.cEroare,0+16,'Eroare') + Endif + + loReturn.lunamin = lnLunaMin + loReturn.anmin = lnAnMin + loReturn.lunamax = lnLunaMax + loReturn.anmax = lnAnMax + + Return loReturn + +Endfunc && get_oluna + diff --git a/COMUN/programe/orap_comenzi.prg b/COMUN/programe/orap_comenzi.prg new file mode 100644 index 0000000..1f2db87 --- /dev/null +++ b/COMUN/programe/orap_comenzi.prg @@ -0,0 +1,323 @@ +*************************************************************************************************************** +Procedure rap_marfa_comenzi_facturate_partial + Private pcDataOra + lcSql = [select * from ] + gcS + [.com_vrap_marfa_nelivrata] + lcCursor = [crsraport] + lnSucces = goExecutor.oExecute(lcSql, lcCursor) + If lnSucces < 0 + amessagebox(goExecutor.cEroare, 0 + 48, "Eroare") + Return + Endif + + *!* modificare v 2.0.11 + *!* If Reccount('crsraport')>0 + *!* pcDataOra=get_ora(2) + *!* Keyboard "{ctrl+f10}" + *!* Select crsraport + *!* Report Form rap_marfa_nelivrata To Printer Prompt Preview + *!* Else + *!* amessagebox("Nu exista date pentru listare!",0+64,"Listare") + *!* Endif + goExport.export2frx(lcCursor, [rap_marfa_nelivrata]) + *!* modificare v 2.0.11 ^ + If Used(lcCursor) + Use In (lcCursor) + Endif +Endproc && rap_marfa_comenzi_facturate_partial +*************************************************************************************************************** +Procedure rap_vanzari_perioada + Local lnOptiune + lnOptiune = xmenu("\ 0 + loFrm = Createobject("frm_rap_vanz_centr") + loFrm.Show(1) + If gnButon = 1 + lnIdComRapVanz = crsrapoarte.id_comrapvanz + Endif + Else + amessagebox("Nu exista rapoarte in luna curenta!", 48, "Atentie") + Endif + Endif + Use In (Select(lcCursor)) + Return m.lnIdComRapVanz +Endfunc && viz_rap_vanz_per + +*************************************************************************************************************** +Procedure genereaza_rap_vanz_per + Lparameters tnIdComRapVanz, ttDataI, ttDataS + * tnIdComRapVanz: optional = daca este completat se modifica raportul deja generat, altfel se genereaza un raport nou + + Private ptDataI, ptDataS, pnIdGrupaGest, pcGrupaGest, pnProcent, pnIdComRapVanz, llSucces + Local loFrm, lcSql, lcCursor, lnSucces, lcCursor2, llGenereaza + lcCursor = [crsraport] + lcCursor2 = [crscantitati] + ptDataS = IIF(!EMPTY(m.ttDataI), m.ttDataI, get_Ora()) + ptDataI = IIF(!EMPTY(m.ttDataS), m.ttDataS, m.ptDataS - 60 * 60 * 24) + pnIdGrupaGest = Null + pcGrupaGest = [] + + pnIdComRapVanz = tnIdComRapVanz + llGenereaza = !EMPTY(m.pnIdComRapVanz) + + If Empty(m.tnIdComRapVanz) + pnProcent = citeste_optiune_firma('PROCVANZPER') + loFrm = Createobject("frm_rap_vanz") + loFrm.Show(1) + If gnButon <> 1 + Return + Endif + + lcSql = [{call pack_comenzi.raport_proc_vanzari(?ptDataI,?ptDataS,?pnIdGrupaGest,?pnProcent,?gnId_sectie,?gnIdUtil,?gnIdSucursala)}] + Else + lcSql = [{call pack_comenzi.raport_proc_vanzari_viz(?pnIdComRapVanz)}] + Endif + + llSucces = goExecutor.oExecuta(lcSql, lcCursor) + + If m.llSucces + If Reccount(lcCursor) > 0 +* Select *, IIF(cantitate <> 0, 1, 0) as validat From (lcCursor) Into CURSOR (lcCursor2) Order By nume_gestiune, subgrupa, denumire READWRITE +*!* IF TYPE(lcCursor + '.validat') = 'U' +*!* Select *, IIF(cantitate <> 0, 1, 0) as validat From (lcCursor) Into CURSOR (lcCursor2) Order By nume_gestiune, subgrupa, denumire READWRITE +*!* ELSE + Select * From (lcCursor) Into CURSOR (lcCursor2) Order By nume_gestiune, subgrupa, denumire READWRITE + SELECT (lcCursor2) + INDEX on id_comrapvanzelem TAG id + SET ORDER TO + + Use In (Select(lcCursor)) +*!* ENDIF +*!* copiaza_structura_cursor(lcCursor, lcCursor2) +*!* lnSucces = -1 +*!* Insert Into (lcCursor2) Select * From (lcCursor) Order By nume_gestiune, subgrupa, denumire + Endif + Endif + + If Used(m.lcCursor2) + Select (m.lcCursor2) + Go Top + pnIdComRapVanz = id_comrapvanz +*!* Do While !llSucces + loFrm = Createobject("frm_rap_vanz_cant", ptDataI, ptDataS, pnIdComRapVanz) + loFrm.Show(1) + If gnButon = 1 + llSucces = .T. + IF m.llGenereaza + listeaza_rap_vanz_per(m.pnIdComRapVanz) + ENDIF +*!* Else +*!* llSucces = .F. +*!* Endif + ENDIF +*!* Enddo + Release pnIdComRapVanz + Else + amessagebox("Nu exista articole in perioada care sa aiba procentul de vanzari specificat!", 48, "Atentie") + Endif + + + + Use In (Select(lcCursor2)) + + Release loFrm, lcSql, lcCursor, lnSucces, ptDataI, ptDataS, pnIdGrupaGest, pcGrupaGest +Endproc +*************************************************************************************************************** +Function completeaza_rap_vanz_per + Lparameters tnIdComRapVanz, tcCursorArt, tcCursorGest, tcCursor + Local lcCursorTemp, lcCursorTemp2, lcIdArticole, lcIdGestiuni, llReturn, lnId, lcFiltru + llReturn = .F. + lcCursorTemp = Sys(2015) + lcCursorTemp2 = Sys(2015) + lcIdArticole = cursor2lista(tcCursorArt, "id_articol", ",") + lcIdGestiuni = cursor2lista(tcCursorGest, "id_gestiune", ",") + lcSql = [{call pack_comenzi.completeaza_raport(] + Alltrim(Str(tnIdComRapVanz)) + [,] + ; + ['] + Alltrim(lcIdArticole) + [','] + Alltrim(lcIdGestiuni) + [')}] + lnSucces = goExecutor.oExecute(lcSql, lcCursorTemp) + If lnSucces < 0 + amessagebox(goExecutor.cEroare, 0 + 48, "Eroare") + Else + Select (tcCursor) + lcFiltru = Set('Filter') + lnId = id_comrapvanzelem + copiaza_structura_cursor(tcCursor, lcCursorTemp2) + Insert Into (lcCursorTemp2) ; + Select * From (lcCursorTemp) ; + Union All ; + Select * From (tcCursor) + Use In (Select(tcCursor)) + copiaza_structura_cursor(lcCursorTemp2, tcCursor) + Insert Into (tcCursor) Select * From (lcCursorTemp2) Order By nume_gestiune, subgrupa, denumire + Use In (Select(lcCursorTemp)) + Use In (Select(lcCursorTemp2)) + Select (tcCursor) + Set Filter To &lcFiltru + Locate For id_comrapvanzelem = lnId + llReturn = .T. + Endif + Release lcCursorTemp, lcCursorTemp2, lcIdArticole, lcIdGestiuni, lnId, lcFiltru + Return llReturn +Endfunc +*************************************************************************************************************** + + + +*************************************************************************************************************** +* raport comenzi pe gestiuni bazat pe vanzarile dintr-o perioda +*************************************************************************************************************** +Procedure listeaza_rap_vanz_per + Lparameters tnIdComRapVanz, tnExportExcel + Private ptDataRaport, pnIdComRapVanz + Local lcSql, lcCursor, lnSucces, lnExportExcel + If Type('tnExportExcel') = 'L' + lnExportExcel = tnExportExcel + Else + lnExportExcel = .F. + Endif + ptDataRaport = Datetime() + pnIdComRapVanz = tnIdComRapVanz + lcSql = [{call pack_comenzi.listeaza_raport(?pnIdComRapVanz,?@ptDataRaport)}] + lcCursor = [crslistare] + lnSucces = goExecutor.oExecute(lcSql, lcCursor) + If lnSucces < 0 + amessagebox(goExecutor.cEroare, 0 + 48, "Eroare") + Else + If lnExportExcel + goExport.export2xls(lcCursor, [rap_comanda_vanz]) + Else + goExport.export2frx(lcCursor, [rap_comanda_vanz]) + Endif + Endif + If Used(lcCursor) + Use In (lcCursor) + Endif + Release ptDataRaport, pnIdComRapVanz, lcSql, lcCursor, lnSucces +Endproc + +*************************************************************************************************************** +* raport comenzi pe furnizori bazat pe vanzarile dintr-o perioda +*************************************************************************************************************** +Procedure listeaza_rap_vanz_fz_per + Lparameters tnIdComRapVanz, tlCantitate, tlExportExcel + Private ptDataRaport, ptDataI, ptDataS, pnIdComRapVanz, pnCantitate + Local lcSql, lcCursor, lnSucces, llExportExcel + pnCantitate = IIF(Type('tlCantitate') = 'L', IIF(m.tlCantitate, 1, 0), 0) && daca se foloseste coloana "cantitate" sau "vanzari" pentru cantitate + llExportExcel = IIF(Type('tlExportExcel') = 'L', m.tlExportExcel, .F.) + + ptDataRaport = Datetime() + ptDataI = Datetime() + ptDataS = Datetime() + pnIdComRapVanz = tnIdComRapVanz + lcSql = [{call pack_comenzi.listeaza_raport_vz_fz(?pnIdComRapVanz, ?pnCantitate, ?@ptDataRaport,?@ptDataI,?@ptDataS)}] + lcCursor = [crslistare] + llSucces = goExecutor.oExecuta(lcSql, lcCursor) + If m.llSucces + SET FILTER TO cantitate <> 0 OR stocdep <> 0 IN (m.lcCursor) + LOCATE FOR cantitate <> 0 OR stocdep <> 0 + IF !FOUND() + AMESSAGEBOX('Nu exista inregistrari pentru listare!', 0+64, _screen.Caption) + ELSE + If m.llExportExcel + goExport.export2xls(lcCursor, [rap_comanda_vanz_fz]) + Else + goExport.export2frx(lcCursor, [rap_comanda_vanz_fz]) + ENDIF + ENDIF + Endif + + Use In (SELECT(lcCursor)) + + Release ptDataRaport, pnIdComRapVanz, lcSql, lcCursor, llSucces +Endproc +*************************************************************************************************************** +*************************************************************************************************************** +Procedure listeaza_rap_vanz_fz_val_per + Lparameters tnIdComRapVanz, tlCantitate, tnExportExcel + Private ptDataRaport, ptDataI, ptDataS, pnIdComRapVanz, pnCantitate + Local lcSql, lcCursor, lnSucces, llExportExcel + pnCantitate = IIF(Type('tlCantitate') = 'L', IIF(m.tlCantitate, 1, 0), 0) && daca se foloseste coloana "cantitate" sau "vanzari" pentru cantitate + llExportExcel = IIF(Type('tlExportExcel') = 'L', m.tlExportExcel, .F.) + + ptDataRaport = Datetime() + ptDataI = Datetime() + ptDataS = Datetime() + pnIdComRapVanz = tnIdComRapVanz + lcSql = [{call pack_comenzi.listeaza_raport_vz_fz(?pnIdComRapVanz, ?pnCantitate, ?@ptDataRaport,?@ptDataI,?@ptDataS)}] + lcCursor = [crslistare] + llSucces = goExecutor.oExecuta(lcSql, lcCursor) + If m.llSucces + SET FILTER TO stoci<>0 OR stocf <> 0 OR cantitate <> 0 OR stocdep <> 0 IN (m.lcCursor) + LOCATE FOR stoci<>0 OR stocf <> 0 OR cantitate <> 0 OR stocdep <> 0 + IF !FOUND() + AMESSAGEBOX('Nu exista inregistrari pentru listare!', 0+64, _screen.Caption) + ELSE + If m.llExportExcel + goExport.export2xls(lcCursor, [rap_comanda_vanz_fz_val]) + Else + goExport.export2frx(lcCursor, [rap_comanda_vanz_fz_val]) + ENDIF + ENDIF + Endif + Use In (SELECT(lcCursor)) + Release ptDataRaport, pnIdComRapVanz, lcSql, lcCursor, llSucces +Endproc +*************************************************************************************************************** + +*************************************************************************************************************** +* Detaliu vanzari articol, gestiune pe o perioada +* Dbl Click pe coloana vanzari +*************************************************************************************************************** +Procedure rap_vanz_per_detaliu + Parameters tnIdComrapvanzElem + + lcCursor = [crsCantitatiDetaliu] + lcSql = [{call pack_comenzi.rap_vanz_per_detaliu(?tnIdComrapvanzElem)}] + llSucces = goExecutor.oExecuta(lcSql, lcCursor) + If m.llSucces + If Reccount(m.lcCursor) > 0 + loFrm = Createobject("frm_rap_vanz_cant_detaliu") + loFrm.Show(1) + Else + amessagebox("Nu exista articole in perioada care sa aiba procentul de vanzari specificat!", 48, "Atentie") + Endif + Endif +Endproc diff --git a/COMUN/programe/orap_terti_comun.prg b/COMUN/programe/orap_terti_comun.prg new file mode 100644 index 0000000..5630c8a --- /dev/null +++ b/COMUN/programe/orap_terti_comun.prg @@ -0,0 +1,725 @@ +*!* 25.03.2022 +*!* viz_frm_facturi > situatie_facturi se afiseaza si facturile cu total cu tva = 0 + +*_________________________________________________________* +* * +* proceduri utilizate pentru generarea rapoartelor din: * +* Terti->Furnizori * +* ->Clienti * +* ->Alti * +*_________________________________________________________* + +* PROCEDURE viz_frm_facturi( tntip ) +* Date : 19/11/2004, 14:36:36 +* author : lavinia.viziru +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 1 +* Parameter 1: +* +******************************************* INCEPUT:viz_frm_facturi ******************************************* +Procedure viz_frm_facturi + Parameters tntip, tccont, tnId_part, tcNume + + && tnId_part, tcNume - din programul de contracte, ca sa intru deja pe partenerul pe care sunt pozitionat in lista de contracte + + + Private pocauta, pnlunai, pnani, pnlunaf, pnanf, pccont, plemise, pcperioada, pctitlu, pcpartener + Store '' To pocauta, pcperioada, pctitlu, pcpartener + Store 0 To pnlunai, pnani, pnlunaf, pnanf + + plemise = Iif(tntip = 2, .T., .F.) + plActiv = .T. + pccont = Iif(!Empty(tccont), tccont, []) + If !Empty(pccont) + pcexec = [select NVL(fel_cont,0) as fel_cont from ] + gcs + [.vcoresp_tip_cont where cont=?pcCont] + pcCursor = [felCont_cursor] + pnsucces = goExecutor.oExecute(pcexec, pcCursor) + If pnsucces > 0 And _Tally > 0 + Select felCont_cursor + Locate + plActiv = Iif(felCont_cursor.fel_cont = 0, .T., .F.) + Use In felCont_cursor + Endif + Endif + + gnButon = 1 + Do While gnButon = 1 + ofrm = Createobject('frm_rap_facturi') + With ofrm + If !Empty(tnId_part) + .lnIdPart = tnId_part + .ncu_contract = 1 + .ckContract.Value = 1 + *.clb_tx_simplu3.text_simplu1.Value = [] + Endif + If !Empty(tcNume) + .clb_tx_simplu2.text_simplu1.Value = tcNume + Endif + .lcCont = pccont + .llActiv = plActiv + .clb_tx_simplu1.text_simplu1.Value = pccont + .lb_titlu_alb_b121.Caption = [Facturi ] + Iif(!Empty(pccont), pccont, []) + .opt_perioada.Value = tntip + .lhide = .T. + Endwith + ofrm.Show(1) + pccont = ofrm.lcCont + plemise = Iif(ofrm.opt_perioada.Value = 1, .F., .T.) + pnIdPart = ofrm.lnIdPart + plActiv = ofrm.llActiv + pnani = ofrm.Caut_anluna1.nan + pnanf = ofrm.Caut_anluna2.nan + pnlunai = ofrm.Caut_anluna1.nluna + pnlunaf = ofrm.Caut_anluna2.nluna + pnCuAnalitic = ofrm.ncu_analitic + pcAnalitic = ofrm.lcAcont + pnCuValuta = ofrm.ncu_valuta + pnIdValuta = ofrm.lnIdValuta + pnCuVechime = ofrm.ncu_vechime + pcValuta = ofrm.txt_valuta.Value + pnCuContract = ofrm.ncu_contract + pnIdCtr = ofrm.lnIdCtr + ofrm.Release + + If gnButon = 1 + pcperioada = [Perioada: ] + Alltrim(Str(pnlunai)) + [/] + Alltrim(Str(pnani)) + ; + [ - ] + Alltrim(Str(pnlunaf)) + [/] + Alltrim(Str(pnanf)) + + + * lcCursor = situatie_facturi(pccont,plActiv,plemise,pnIdPart,pnani,pnlunai,pnanf,pnlunaf,pnCuAnalitic,pcAnalitic,pnCuValuta,pnIdValuta,pnCuVechime) + lcCursor = situatie_facturi(Alltrim(pccont), plActiv, plemise, pnIdPart, pnani, pnlunai, pnanf, pnlunaf, pnCuAnalitic, pcAnalitic, pnCuValuta, pnIdValuta, pnCuVechime, pnCuContract, pnIdCtr) + + *!* Do Case + *!* Case Empty(lcCursor) + *!* amessagebox("Nu a fost generata selectia pentru listare!",0+48,"Atentie") + *!* Case Reccount(lcCursor) = 0 + *!* amessagebox("Nu exista inregistrari pentru listare!",0+48,"Atentie") + *!* Use In (lcCursor) + *!* Otherwise + If Alltrim(pccont) = [401] + pcpartener = [Furnizor: ] + lctitlu = [Situatia facturilor de cumparari] + Else && pccont = [411] + pcpartener = [Client: ] + lctitlu = [Situatia facturilor de vanzari] + Endif + If pnCuVechime = 0 + lcRaport = [rap_facturi] + Else + lcRaport = [rap_facturi_vechime] + Endif + + If pnCuAnalitic = 0 + pcGrupAcont = [EOF()] + Else + pcGrupAcont = [acont] + Endif + If !Empty(pnIdValuta) + lctitlu = lctitlu + Chr(13) + [Valuta ] + Alltrim(pcValuta) + Endif + *!* pctitlu = ceretitlu_rap('Titlul Raportului',lctitlu) + *!* pcDataOra = Get_Ora(2) + *!* Select (lcCursor) + *!* Report Form &lcRaport To Printer Prompt Preview + pctitlu = lctitlu + goExport.export2frx(lcCursor, lcRaport, .T., , , , , .T., , ) + + If Messagebox('Doriti sa exportati in XLS?', 4 + 32, _Screen.Caption) = 6 + lcFileXLS = Putfile("Salvati fisierul XLS", "Facturi.xls", "xls") + If !Empty(lcFileXLS) + Select (lcCursor) + Copy To (lcFileXLS) Type Xl5 + open_default_app(lcFileXLS) + Endif + Endif + Use In (lcCursor) + *!* Endcase + Endif + Enddo +Endproc +****************************************** SFARSIT: viz_frm_facturi **************************** +* PROCEDURE situatie_facturi +* Date : 10/04/2006, 16:10:03 +* author : georgiana.voicu +* description: preluare facturi pentru conturi cu inregistrari + +****** PARAMETER BLOCK ************** +* Parameters : 3 +* Parameter 1: tlemise +* Description: tipul facturilor preluate +* (.t.-facturi emise intr-o perioada determinata +* .f.-facturi cu sold dintr-o perioada determinata) +* Parameter 2: tccont +* Description: contul partenerului(411-client, 401- furnizor) +* Parameter 3: topartener +* Description: obiectul care contine datele partenerului(client/furnizor) selectat:nume + id_part +* (daca numele partenerului= atunci se iau in considerare +* toti partenerii- clienti sau furnizori) +* Parameter 4,5,6,7 : perioada +******************************************* INCEPUT:situatie_facturi ******************************************* +Procedure situatie_facturi + Parameters tccont, tlActiv, tlemise, tnIdPart, tnAnI, tnLunaI, tnAnF, tnLunaF, tnCuAnalitic, tcAnalitic, tnCuValuta, tnIdValuta, tnCuVechime, tnCuContract, tnIdCtr + + Private lnrlunii, lnrlunif, lnNrPrimaL + + Local lcAchitat, lcAcontIncPl, lcCondAnalitic, lcCondData, lcCondExclud, lcCondId_ctr, lcCondId_part + Local lcCondPerioada, lcCondPrimaLuna, lcConditieSupl, lcCondvaluta, lcContIncPl, lcCursor + Local lcCursor1, lcExceptii, lcIdPartener, lcIdPereche, lcOrder, lcPartener, lcPereche, lcSelect + Local lcSelect1, lcSoldPrec, lcSql, lcTotctva, lcTotctvaPrec, ldDataFactura, ldDataVechime, lnIdFact + Local lnIdPart, lnNrRand, lnNrZile, lnSoldFact, lnSoldPart, lnSucces, lnSucces1 + PRIVATE lnnrlunii, lnnrlunif + PRIVATE oComplet, oInc, objFactInc, osold, pcExplicatie + oComplet = NULL + oInc = NULL + objFactInc = NULL + osold = NULL + pcExplicatie = '' + lnnrlunii = tnLunaI + 12 * tnAnI + lnnrlunif = tnLunaF + 12 * tnAnF + + *!* IF tlemise + lnNrPrimaL = lnnrlunii + *!* ELSE + *!* lnNrPrimaL = lnnrlunii -1 + *!* ENDIF + + Local lnId_ctr, lcContract + Store 0 To lnId_ctr + Store '' To lcContract + + If tnIdPart = 0 + lcCondId_part = [1=1] + Else + lcCondId_part = [id_part = ] + Alltrim(Str(tnIdPart)) + Endif + + If tnIdCtr = 0 + lcCondId_ctr = [1=1] + Else + lcCondId_ctr = [id_ctr = ] + Alltrim(Str(tnIdCtr)) + Endif + + lcSql = [select * from ] + gcs + [.exceptii_ireg where invers = 1 and debit = ] + Iif(tlActiv, [1], [0]) + [ and cont = ] + tccont + lcCursor = [ex_debit] + lnSucces = goExecutor.oExecute(lcSql, lcCursor) + lcExceptii = [-1] + If lnSucces > 0 + Select ex_debit + Scan + lcExceptii = lcExceptii + ',' + Alltrim(cont_c) + Endscan + Use In ex_debit + Endif + + If !tlActiv && - furnizori + lcTotctva = Iif(tnCuValuta = 0, [credit + preccred], [valcredit + precvalcred]) + *!* modificare v 2.0.46 + lcTotctvaPrec = Iif(tnCuValuta = 0, [preccred], [precvalcred]) && am nevoie pentru calcularea soldului prec. + *!* modificare v 2.0.46 ^ + lcSoldPrec = Iif(tnCuValuta = 0, [preccred - precdeb], [precvalcred - precvaldeb]) + *lcAchitat = [debit + precdeb] + lcAchitat = Iif(tnCuValuta = 0, [precdeb], [precvaldeb]) + lcPereche = [pereched] + lcIdPereche = [id_factd] + lcPartener = [partd] + lcIdPartener = [id_partd] + lcContIncPl = [scd] + lcAcontIncPl = [ascd] + lcCondExclud = [(to_number(scc) not in (] + lcExceptii + [))] + Else && - clienti + lcTotctva = Iif(tnCuValuta = 0, [debit + precdeb], [valdebit + precvaldeb]) + *!* modificare v 2.0.46 + lcTotctvaPrec = Iif(tnCuValuta = 0, [precdeb], [precvaldeb]) + *!* modificare v 2.0.46 ^ + lcSoldPrec = Iif(tnCuValuta = 0, [precdeb - preccred], [precvaldeb - precvalcred]) + *lcAchitat = [credit + preccred] + lcAchitat = Iif(tnCuValuta = 0, [preccred], [precvalcred]) + lcPereche = [perechec] + lcIdPereche = [id_factc] + lcPartener = [partc] + lcIdPartener = [id_partc] + lcContIncPl = [scc] + lcAcontIncPl = [ascc] + lcCondExclud = [(to_number(scd) not in (] + lcExceptii + [))] + Endif + + lcCondPerioada = [((luna + 12*an) between ?lnNrPrimaL and ?lnnrlunif)] + lcCondData = [(to_number(to_char(dataireg,'MM'),'99') + 12*to_number(to_char(dataireg,'YYYY'),'9999'))] + lcCondPrimaLuna = [(luna + 12*an = ?lnNrPrimaL)] + If tnCuAnalitic = 1 + lcCondAnalitic = Iif(!Empty(tcAnalitic), [acont = ?tcAnalitic], [1=1]) + Else + lcCondAnalitic = [1=1] + Endif + If tnCuValuta = 1 + lcCondvaluta = Iif(!Empty(tnIdValuta), [id_valuta = ?tnIdValuta], [id_valuta<>0]) + Else + lcCondvaluta = [1=1] + Endif + pcExplicatie = [Din Precedent] + + + *!* lcSelect = [select an, luna, id_fact, id_part, nume, acont, dataact, nract,] + lcTotctva + [ as totctva,?pcExplicatie as fdoc,] + ; + *!* IIF(tlemise,[0],[(case when ] + lcCondPrimaLuna +[ then ] + lcAchitat + [ else 0 end)]) + [ as achitat] + ; + *!* [ from ] + gcS + [.vireg_parteneri ] + ; + *!* [where cont = ?tccont and ] + lcCondId_part + [ and ] + lcCondPerioada + ; + *!* [ and (luna + 12*an =] + IIF(tlemise,lcCondData,[(case when ] + lcCondPrimaLuna +; + *!* [ then luna + 12*an else ] + lcCondData + [ end)]) + [)] + ; + *!* [ order by an, luna, nume, dataact, nract] + + lcSelect = [select an, luna, id_fact, id_part, nume, cod_fiscal, ] + ; + Iif(tnCuContract = 1, [id_ctr], [0]) + [ as id_ctr, ] + ; + Iif(tnCuContract = 1, [contract], ['xxxxxxxxxxxxxxxxxxxx']) + [ as contract, ] + ; + Iif(tnCuAnalitic = 1, [acont], ['xxxx']) + [ as acont, serie_act, dataact, nract,] + ; + Iif(tnCuValuta = 1, [id_valuta,nume_val,], []) + ; + [(case when precdeb <> 0 or preccred <> 0 then 1 else 0 end) as precedent,SUM(] + lcTotctva + [) as totctva, SUM(] + m.lcSoldPrec + [) as soldprec, ?pcExplicatie as fdoc,] + ; + [SUM(] + Iif(tlemise, [0], [(case when ] + lcCondPrimaLuna + [ then ] + lcAchitat + [ else 0 end)]) + [) as achitat] + ; + [ from ] + gcs + [.vireg_parteneri ] + ; + [ where cont = ?tccont and ] + lcCondId_part + [ and ] + lcCondId_ctr + [ and ] + lcCondPerioada + [ and ] + lcCondAnalitic + [ and ] + lcCondvaluta + m.gcCondSucursala + ; + [ and (luna + 12*an =] + Iif(tlemise, lcCondData, [(case when ] + lcCondPrimaLuna + ; + [ then luna + 12*an else ] + lcCondData + [ end)]) + [)] + ; + [ group by an, luna, id_fact, id_part, nume, cod_fiscal, ] + Iif(tnCuContract = 1, [id_ctr, contract,], []) + Iif(tnCuAnalitic = 1, [acont,], []) + [ dataact, serie_act, nract] + Iif(tnCuValuta = 1, [,id_valuta,nume_val], []) + [,(case when precdeb <> 0 or preccred <> 0 then 1 else 0 end)] + ; + [ order by ] + Iif(tnCuContract = 1, [contract,], []) + [ an, luna, nume, cod_fiscal, ] + Iif(tnCuContract = 1, [contract,], []) + Iif(tnCuValuta = 1, [id_valuta,], []) + Iif(tnCuAnalitic = 1, [acont,], []) + [dataact, serie_act, nract] + + lcCursor = [cFacturi] + + If Used(lcCursor) + Use In (lcCursor) + Endif + + lnSucces = goExecutor.oExecute(lcSelect, lcCursor) + If lnSucces < 0 + amessagebox(goExecutor.cEroare, 0 + 16, 'Eroare') + Return '' + Endif + + Select (lcCursor) + Replace All dataact With {} For Isnull(dataact) + + && 27.05.2008 + && soldurile initiale pentru facturile emise in perioada nu se pot obtine din facturile din cFacturi (nu am precdeb/preccred <> 0) + && trebuie sa le selectez din ireg_parteneri separat + If tlemise + lcSelect = [select an, luna, id_part, cont, acont, Sum(] + lcSoldPrec + [) as soldprec ] + ; + [ from ireg_parteneri ] + ; + [ where cont = ?tccont and ] + lcCondId_part + [ and ] + lcCondAnalitic + ; + [ and ] + lcCondvaluta + gcCondSucursala + ; + [ and ] + lcCondPrimaLuna + ; + [ group by an, luna, id_part, cont, acont] + + lcCursor = [cSoldParteneri] + + If Used(lcCursor) + Use In (lcCursor) + Endif + + lnSucces = goExecutor.oExecute(lcSelect, lcCursor) + If lnSucces < 0 + amessagebox(goExecutor.cEroare, 0 + 16, 'Eroare') + Return '' + Endif + Endif + && soldurile initiale pentru facturile emise in perioada ^ + + && iau in considerare doar incasarile inregistrate in perioada data + + lcCondPerioada = [((luna + 12*an) between ?lnNrLuniI and ?lnNrLuniF)] + If tnIdPart = 0 + lcCondId_part = [1=1] + Else + lcCondId_part = lcIdPartener + [ = ] + Alltrim(Str(tnIdPart)) + Endif + If tnCuAnalitic = 1 + lcCondAnalitic = Iif(!Empty(tcAnalitic), lcAcontIncPl + [ = ?tcAnalitic], [1=1]) + Else + lcCondAnalitic = [1=1] + Endif + If tnCuValuta = 1 + lcCondvaluta = Iif(!Empty(tnIdValuta), [id_valuta = ?tnIdValuta and suma_val<>0], [id_valuta<>0 and suma_val<>0]) + Else + lcCondvaluta = [1=1] + Endif + + *!* modificare v 2.0.46 + If tccont = '4111' + lcConditieSupl = [ OR (SCD = '4111' ] + Iif(!Empty(tcAnalitic), [AND ASCD = ?tcAnalitic ], []) + ; + [AND SCC = '4427' ] + Iif(tnIdPart = 0, [], [AND ID_PARTD = ] + Alltrim(Str(tnIdPart)) + [ ]) + ; + [AND (NVL(PERECHED,0) <> 0 OR NVL(ID_FACTD,0)<>0))] + lcSelect1 = [Select (case when scc = '4427' then id_partd else id_partc end) as id_part,] + ; + [(case when scc = '4427' then partd else partc end) as nume,fdoc,dataact as datadoc,] + ; + [serie_act as serie_doc,nract as nrdoc,] + ; + Iif(tnCuAnalitic = 1, [(case when scc='4427' then ascd else ascc end)], ['xxxx']) + [ as acont,] + ; + [(case when scc = '4427' then pereched else perechec end) as pereche,] + ; + [(case when scc = '4427' then id_factd else id_factc end) as id_fact,] + ; + [(case when scc = '4427' then (-1)*] + Iif(tnCuValuta = 0, [suma else suma], [suma_val else suma_val]) + [ end) as suma,] + ; + [ id_valuta, luna as luna_inc, an as an_inc ] + ; + [ from ] + gcs + [.vact ] + ; + [ where ((] + lcContIncPl + [ = ] + tccont + [ and ] + lcCondId_part + [ and ] + lcCondAnalitic + [ and (] + lcPereche + [ <> 0 or ] + lcIdPereche + [ <>0))] + ; + lcConditieSupl + [)] + ; + [ and ] + lcCondExclud + [ and ] + lcCondPerioada + ; + [ and ] + lcCondvaluta + gcCondSucursala + ; + [ order by serie_act, nract, dataact] + Else + lcSelect1 = [select ] + lcIdPartener + [ as id_part,] + lcPartener + [ as nume,fdoc,dataact as datadoc,serie_act as serie_doc,nract as nrdoc,] + ; + Iif(tnCuAnalitic = 1, lcAcontIncPl, ['xxxx']) + [ as acont,] + lcPereche + [ as pereche,] + lcIdPereche + [ as id_fact,] + ; + Iif(tnCuValuta = 0, [suma], [suma_val]) + [ as suma,] + ; + [ id_valuta, luna as luna_inc, an as an_inc ] + ; + [ from ] + gcs + [.vact ] + ; + [ where ] + lcContIncPl + [ = ] + tccont + [ and ] + lcCondId_part + [ and ] + lcCondvaluta + [ and ] + lcCondAnalitic + ; + [ and ] + lcCondExclud + [ and (] + lcPereche + [ <> 0 or ] + lcIdPereche + [ <>0) and ] + lcCondPerioada + ; + gcCondSucursala + ; + [ order by serie_act, nract, dataact] + Endif + *!* modificare v 2.0.46 ^ + lcCursor1 = [cIncasari_temp] + + If Used(lcCursor1) + Use In (lcCursor1) + Endif + + lnSucces1 = goExecutor.oExecute(lcSelect1, lcCursor1) + If lnSucces1 < 0 + amessagebox(goExecutor.cEroare, 0 + 16, 'Eroare') + Return '' + Endif + + Select cIncasari_temp + Replace All datadoc With {} For Isnull(datadoc) + + Select an, luna, id_fact, id_part, nume, cod_fiscal, acont, Nvl(Ttod(dataact), {}) As datafact, Nvl(serie_act, []) As serie_fact, ; + id_ctr, contract, ; + nract As nrfact, totctva, ; + Padr(fdoc, 30, ' ') As fdoc, {//} As datadoc, 00000000000000 As nrdoc, precedent, ; + achitat As suma, 00000000000000000000.0000 As sold, ; + 00000000000000000000.0000 As soldcumulat, 0 As tip, 00 As luna_inc, 0000 As an_inc, 0 As sold_final, ; + 00000000000000000000.0000 As vechime_1, 00000000000000000000.0000 As vechime_2, 00000000000000000000.0000 As vechime_3, 00000000000000000000.0000 As vechime_4 ; + From cFacturi ; + Where totctva - achitat <> 0 OR totctva = 0 ; + Order By nume, id_part, acont, dataact, serie_act, nract ; + Into Cursor cFactInc Readwrite + + Select cIncasari_temp + Scan + Scatter Name oInc + Select cFactInc + Locate For id_fact = oInc.id_fact And id_part = oInc.id_part And Nvl(acont, [xxxx]) = Nvl(oInc.acont, [xxxx]) + Do Case + Case !Found() && nu exista factura pentru incasare + *!* modificare v 2.0.50 ^ + *!* modificare v 2.0.46 + *!* Append blank + *!* caut incasarea neimperecheata + If Used('crstempireg') + Use In crstempireg + Endif + lcSql = [select 1 as precedent,id_fact,id_part,serie_act as serie_fact,nract as nrfact,dataact as datafact,] + ; + [pack_sesiune.suma_ron((-1)*] + ; + Iif(!tlActiv, Iif(tnCuValuta = 0, [debit], [valdebit]), Iif(tnCuValuta = 0, [credit], [valcredit])) + ; + [,Nvl(dataact,to_date(an||luna,'YYYYMM'))) as totctvaprec ] + ; + [from ireg_parteneri ] + ; + [where id_fact = ] + Alltrim(Str(oInc.id_fact)) + [ and id_part = ] + Alltrim(Str(oInc.id_part)) + [ ] + ; + [and ] + Iif(tnCuValuta = 0, [precdeb=0 and preccred=0], [precvaldeb=0 and precvalcred=0]) + [ and ] + ; + Iif(!tlActiv, Iif(tnCuValuta = 0, [credit], [valcredit]), Iif(tnCuValuta = 0, [debit], [valdebit])) + [=0] + lnSucces = goExecutor.oExecute(lcSql, [crstempireg]) + If lnSucces < 0 + amessagebox(goExecutor.cEroare, 16, "Eroare") + Return + Else + If Reccount('crstempireg') > 0 + Select crstempireg + Scatter Name oComplet + AddProperty(oComplet, "totctva", oComplet.totctvaprec) + Use In crstempireg + Select cFacturi + Locate For id_fact = oComplet.id_fact && verificare daca mai exista deja + If !Found() + Append Blank + Gather Name oComplet Fields id_part, totctva, totctvaprec, precedent + Select cFactInc + Append Blank + Gather Name oComplet + Else + Select cFactInc + Append Blank + Endif + Else + Select cFactInc + Append Blank + Endif + Endif + *!* modificare v 2.0.50 + Case Found() And ((tip = 1) Or (tip = 0 And suma <> 0)) && daca mai exista deja o incasare pe factura sau are achitat din precedent + Scatter Name objFactInc + lnId_ctr = id_ctr + lcContract = contract + Append Blank + Gather Name objFactInc + Replace totctva With 0 + Case Found() And tip = 0 && daca nu mai exista incasare pe factura + && completez dupa case + lnId_ctr = id_ctr + lcContract = contract + Otherwise && adaug incasarea + Append Blank + Endcase + *!* Endif + *!* modificare v 2.0.50 ^ + *!* modificare v 2.0.46 ^ + Gather Name oInc + Replace id_ctr With lnId_ctr, contract With lcContract && las contractul de pe factura (f. probabil sa nu-l am in precedent pe incasare ) + Replace tip With 1 + Select cIncasari_temp + Endscan + + * calculez soldurile (initial, cumulat, pe factura) + * ordonez datele pentru grupare + *!* SELECT id_part, SUM(totctva-achitat) as soldi_part FROM cFacturi WHERE an*12 + luna = lnNrPrimaL INTO CURSOR cSoldiPart GROUP BY id_part + *!* SELECT id_part,acont, SUM(totctva-achitat) as soldi_ana FROM cFacturi WHERE an*12 + luna = lnNrPrimaL INTO CURSOR cSoldiAna GROUP BY id_part, acont + + && 27.05.2008 + && soldurile initiale pentru facturile emise in perioada nu se pot obtine din facturile din cFacturi (nu am precdeb/preccred <> 0) + If tlemise + Select id_part, Sum(soldprec) As soldi_part From cSoldParteneri Into Cursor cSoldiPart Group By id_part + Select id_part, Nvl(acont, Space(4)) As acont, Sum(soldprec) As soldi_ana From cSoldParteneri Into Cursor cSoldiAna Group By id_part, acont Readwrite + Else + *!* modificare v 2.0.46 + *!* Select id_part, Sum(totctva-achitat) As soldi_part From cFacturi Where precedent = 1 Into Cursor cSoldiPart Group By id_part + *!* Select id_part,Nvl(acont,Space(4)) As acont, Sum(totctva-achitat) As soldi_ana From cFacturi Where precedent = 1 Into Cursor cSoldiAna Group By id_part, acont Readwrite + Select id_part, Sum(soldprec) As soldi_part From cFacturi Where precedent = 1 Into Cursor cSoldiPart Group By id_part + Select id_part, Nvl(acont, Space(4)) As acont, Sum(soldprec) As soldi_ana From cFacturi Where precedent = 1 Into Cursor cSoldiAna Group By id_part, acont Readwrite + *!* modificare v 2.0.46 ^ + Endif + && 27.05.2008 ^ + + If tnCuContract = 1 + lcOrder = [c.nume, c.id_part, c.id_ctr, c.acont, c.datafact, c.serie_fact, c.nrfact, c.id_fact] + Else + lcOrder = [c.nume, c.id_part, c.acont, c.datafact, c.serie_fact, c.nrfact, c.id_fact] + Endif + + * SELECT * FROM cFactInc INTO TABLE c:\factinc.dbf + + Select c.*, p.soldi_part, a.soldi_ana ; + From cFactInc c ; + Left Join cSoldiPart p On c.id_part = p.id_part ; + Left Join cSoldiAna a On c.id_part = a.id_part And Nvl(c.acont, '') = Nvl(a.acont, '') ; + Into Cursor cFactIncO ; + Order By &lcOrder Readwrite + + If Used('cSoldiPart') + Use In cSoldiPart + Endif + If Used('cSoldiAna') + Use In cSoldiAna + Endif + * soldul cumulat + **** pt vechime (temporar) aflu ultima zi a perioadei , consider data de referinta + ldDataVechime = Gomonth(Date(tnAnF, tnLunaF, 1), 1) - 1 + **** + + Select cFactIncO + Locate + lnIdFact = id_fact + lnIdPart = id_part + lnSoldFact = Nvl(totctva, 0) + lnSoldPart = Nvl(soldi_part, 0) + *ldDataFactura = NVL(TTOD(datafact),{}) + ldDataFactura = Nvl(datafact, {}) + Scan + Scatter Name osold + lnNrRand = Recno() + If lnIdFact <> osold.id_fact + Select cFactIncO + If tnCuVechime = 1 + Go lnNrRand - 1 + Replace sold_final With 1 + lnNrZile = ldDataVechime - ldDataFactura + If Empty(ldDataFactura) + lnNrZile = 400 && peste 1 An + Else + lnNrZile = ldDataVechime - ldDataFactura + Endif + Do Case + Case Between(lnNrZile, 0, 30) + Replace vechime_1 With sold + Case Between(lnNrZile, 31, 90) + Replace vechime_2 With sold + Case Between(lnNrZile, 91, 365) + Replace vechime_3 With sold + Otherwise + Replace vechime_4 With sold + Endcase + + Select cFactIncO + Go lnNrRand + Endif + *ldDataFactura = NVL(TTOD(datafact),{}) + ldDataFactura = Nvl(datafact, {}) + lnIdFact = osold.id_fact + lnSoldFact = Nvl(osold.totctva, 0) + Endif + If lnIdPart <> osold.id_part + lnIdPart = osold.id_part + lnSoldPart = Nvl(osold.soldi_part, 0) + Endif + lnSoldFact = lnSoldFact - Nvl(osold.suma, 0) + * lnSoldPart = lnSoldPart + IIF(osold.an*12+osold.luna >=lnnrlunii, NVL(osold.totctva,0), 0) - IIF(osold.an_inc*12+osold.luna_inc >=lnnrlunii, NVL(osold.suma,0), 0) + lnSoldPart = lnSoldPart + Iif(osold.precedent = 0, Nvl(osold.totctva, 0), 0) - Iif(osold.an_inc * 12 + osold.luna_inc >= lnnrlunii, Nvl(osold.suma, 0), 0) + Replace sold With lnSoldFact, soldcumulat With lnSoldPart + Select cFactIncO + Endscan + + If tnCuVechime = 1 + Select cFactIncO + Go Bottom + Replace sold_final With 1 + *ldDataFactura = NVL(TTOD(datafact),{}) + ldDataFactura = Nvl(datafact, {}) + If Empty(ldDataFactura) + lnNrZile = 400 && peste 1 An + Else + lnNrZile = ldDataVechime - ldDataFactura + Endif + Do Case + Case Between(lnNrZile, 0, 30) + Replace vechime_1 With sold + Case Between(lnNrZile, 31, 90) + Replace vechime_2 With sold + Case Between(lnNrZile, 91, 365) + Replace vechime_3 With sold + Otherwise + Replace vechime_4 With sold + Endcase + Endif + + *!* SELECT cFactIncO + *!* DELETE from cFactIncO WHERE id_fact IN (select id_fact from cFactIncO where sold_final = 1 AND NVL(vechime_1,0) = 0 AND NVL(vechime_2,0) = 0 AND NVL(vechime_3,0) = 0 AND NVL(vechime_4,0) = 0) + + If Used('cFacturi') + Use In cFacturi + Endif + If Used('cIncasari_temp') + Use In cIncasari_temp + Endif + If Used('cFactInc') + Use In cFactInc + Endif + + Return "cFactIncO" +Endproc +******************************************* SFARSIT: situatie_facturi ******************************************* + +Procedure Alege_Cont + Lparameters tccont, tleActiv + + Private polista, pcschema1, pcselect1, pcfiltru1, pcorder1 + Store "" To polista + pcschema1 = ['cont c(4),acont c(4),explicatie c(50)'] + pcselect1 = ['select distinct cont,rpad(CHR(32),4,CHR(32)) as acont,explicatie from ] + gcs + [.vcoresp_tip_cont where 1=2'] + pcfiltru1 = [2=2] + pcorder1 = [cont] + llAfisare = .F. + gencursor('polista', 'clista', pcselect1, pcfiltru1, pcschema1, pcorder1, llAfisare) + polista.ca_baza1.afisare() + + + Select clista + loCont = myscatter('blank') + + Private eActiv + Store .T. To eActiv + + Ol = Createobject("frm_cere_cont") + With Ol + *.titlufrumos1.CAPTION= 'Selectati contul' + If Empty(.cboCont.RowSource) + .cboCont.RowSource = "clista.cont,acont" + Endif + .ocont = loCont + If Empty(.cAlias) + .cAlias = Left(.cboCont.RowSource, At(".", .cboCont.RowSource) - 1) + Endif + .Height = 190 + Endwith + Ol.Show(1) + + If buton = 2 + Use In clista + Return + Endif + + tccont = loCont.Cont + tleActiv = eActiv +Endproc + +******************************************************************************************** +********************************* INCEPUT:incasari_facturi_lunac **************************** +Procedure incasari_facturi_lunac + Parameters tlemitere + + Private pctitlu, pddata_incasi, pddata_incasf && pcDataOra, + Store '' To pctitlu && ,pcDataOra + + pddata_incasi = Ctod('01/' + Alltrim(Str(gnLuna)) + '/' + Alltrim(Str(gnAn))) + If Month(Date()) = gnLuna And Year(Date()) = gnAn + pddata_incasf = Date() + Else + pddata_incasf = Gomonth(pddata_incasi, 1) - 1 + Endif + + Do Form frm_filtru_numar Name ofrm_filtru Linked With [a.dataact], [Data incasarii], 1, 1, 'D', [], 0 To lcFiltruData Noshow + *ofrm_filtru.text1.ResetToDefault([lostfocus]) + *ofrm_filtru.text1.lostfocus() + ofrm_filtru.text2.SetFocus() + ofrm_filtru.text1.ControlSource = [pddata_incasi] + ofrm_filtru.text2.ControlSource = [pddata_incasf] + ofrm_filtru.Show(1) + + pcperioada = [Perioada: ] + Alltrim(Dtoc(pddata_incasi)) + [-] + Alltrim(Dtoc(pddata_incasf)) + + If tlemitere + lcOrdonare = [data_fact,data_incas] + Else + lcOrdonare = [data_incas,data_fact] + Endif + + lcSelect = [select a.dataact as data_incas,a.nract as nr_doc, a.serie_act, f.fel_document as fdoc, a.suma as incasat,] + ; + [a.scd as tip_incas, d.denumire as nume, c.nract as nr_fact, e.nrord, c.dataact as data_fact, ] + ; + [ c.datascad, c.debit + c.precdeb as total_fact] + Iif(glEMama, [,g.firma as sucursala], []) + [ ] + ; + [from ] + gcs + [.act a join ] + gcs + [.ireg_parteneri c on ] + ; + [a.perechec = c.nract and a.id_partc = c.id_part and NVL(a.id_sucursala,-99) = NVL(c.id_sucursala,-99) ] + ; + [left join ] + gcs + [.nom_parteneri d on c.id_part = d.id_part ] + ; + [left join ] + gcs + [.vnom_lucrari e on c.id_lucrare = e.id_lucrare ] + ; + [left join ] + gcs + [.nom_fdoc f on a.id_fdoc = f.id_fdoc ] + ; + Iif(glEMama, [left join syn_nom_firme g on a.id_sucursala = g.id_firma ], []) + ; + [where a.sters = 0 and SUBSTR(a.scc,1,4) = '4111' and SUBSTR(a.scd,1,1) = '5' and c.cont = '4111'] + ; + [ and a.an = ] + Alltrim(Str(gnAn)) + [ and a.luna = ] + Alltrim(Str(gnLuna)) + ; + [ and c.an = ] + Alltrim(Str(gnAn)) + [ and c.luna = ] + Alltrim(Str(gnLuna)) + ; + Strtran(gcCondSucursala, [id_sucursala], [a.id_sucursala]) + ; + [ ] + lcFiltruData + [ order by ] + lcOrdonare + lcCursor = [cIncasari] + + lnSucces = goExecutor.oExecute(lcSelect, lcCursor) + If lnSucces < 0 + amessagebox(goExecutor.cEroare, 0 + 16, 'Eroare') + Return + Endif + + *!* If Reccount(lcCursor)>0 + pctitlu = [Situatia incasarilor ] + goExport.export2frx(lcCursor, [rap_incasari_facturi], .T.) + *!* pctitlu = ceretitlu_rap('Titlul Raportului',lctitlu) + *!* pcDataOra= Get_Ora(2) + *!* Select (lcCursor) + *!* Report Form rap_incasari_facturi To Printer Prompt Preview + *!* Else + *!* amessagebox("Nu exista inregistrari pentru listare!",48,"Atentie") + *!* Endif + + Use In (lcCursor) + Release pctitlu, pddata_incasi, pddata_incasf +Endproc +********************************* SFARSIT:incasari_facturi_lunac **************************** + diff --git a/COMUN/programe/orapoarte.prg b/COMUN/programe/orapoarte.prg new file mode 100644 index 0000000..464ed1a --- /dev/null +++ b/COMUN/programe/orapoarte.prg @@ -0,0 +1,1135 @@ +*!* 03.08.2022 +*!* rap_stocuri_pe_vechimi - includere datain in xls + +***----------------------------------------------------------------------------------------------------------- +Procedure fisa_ob_inventar_gest + Lparameters tnTipGest, tlExcel + && tlToate - se genereaza raportul pt. toate obiectele de inventar + + Set Safety Off + Private pcTitlu, pcPerioada && , pcDataOra && pt. raport + Store "" To pcTitlu + && pcDataOra = get_ora(2) + + Private pnId_gestiune, pcGestiune, pnId_articol + Store 0 To pnId_gestiune, pnId_articol + Store "" To pcGestiune + + loGest = caut_gestiune(tnTipGest, gnIdUtil) + + If buton = 2 + Return + Endif + + pcGestiune = loGest.nume_gestiune + pnId_gestiune = loGest.id_gestiune + ***------------------------------- + + *!* od=Createobject('frm_toate') + *!* od.label1.caption = "" + *!* od.label1.Caption='Sa se genereze situatia pentru:' + *!* *!* od.cmdrenunt1.Caption='\0 + *!* lpos = At('_',pcondper) + *!* ldata1 = Substr(pcondper,1,lpos-1) + *!* ldata2 = Substr(pcondper,lpos+1) + *!* lcd1 = Substr(ldata1,7,2)+'/'+Substr(ldata1,5,2)+'/'+Substr(ldata1,1,4) + *!* lcd2 = Substr(ldata2,7,2)+'/'+Substr(ldata2,5,2)+'/'+Substr(ldata2,1,4) + *!* pcPerioada='De la: '+lcd1+' pana la '+lcd2 + *!* Else + *!* ldata1 = pcondper+'01' + *!* ldData = Date(Val(Substr(ldata1,1,4)),Val(Substr(ldata1,5,2)),1) + *!* ldata2 = Dtos(Gomonth(ldData,1)-1) + *!* pcPerioada='LUNA: '+Substr(ldata1,5,2)+' '+Substr(ldata1,1,4) + *!* Endif + + + + *!* PRIVATE lnAn1, lnLuna1, lnAn2, lnLuna2 + *!* STORE 0 TO lnAn1, lnLuna1, lnAn2, lnLuna2 + + *!* loLuna = get_oluna(gnAn, gnLuna) + *!* lcLuna1 = PADL(loLuna.lunamin,2,'0') + PADL(loLuna.anmin,4,'0') + *!* lcLuna2 = PADL(loLuna.lunamax,2,'0') + PADL(loLuna.anmax,4,'0') + + *!* pcondper="" + *!* ofrmperioada=CREATEOBJECT('frm_perioada_luni') + *!* WITH ofrmperioada + *!* ._textbox1.VALUE=lcLuna1 + *!* ._textbox2.VALUE=lcLuna2 + *!* ._optiongrup1.VALUE = 2 + *!* ._optiongrup1.VALID() + *!* ENDWITH + *!* ofrmperioada.SHOW(1) + *!* IF gnButon=2 + *!* RETURN + *!* ENDIF + + *!* plPerioada=.F. + *!* lnPoz=AT('_',pcondper) + *!* IF lnPoz>0 + *!* plPerioada=.T. + *!* ENDIF + + + *!* IF plPerioada + *!* lnAn1 = VAL(SUBSTR(pcondper,3,4)) + *!* lnLuna1 = VAL(SUBSTR(pcondper,1,2)) + *!* lnAn2 = VAL(SUBSTR(pcondper,10,4)) + *!* lnLuna2 = VAL(SUBSTR(pcondper,8,2)) + + *!* lnInit = lnAn1 * 12 + lnLuna1 + *!* lnFinal = lnAn2 * 12 + lnLuna2 + *!* pcPerioada = SUBSTR(pcondper,1,2)+'/'+SUBSTR(pcondper,3,4) + ' - ' + SUBSTR(pcondper,8,2)+'/'+SUBSTR(pcondper,10,4) + *!* ELSE + *!* lnAn1 = VAL(SUBSTR(pcondper,3,4)) + *!* lnLuna1 = VAL(SUBSTR(pcondper,1,2)) + *!* lnAn2 = VAL(SUBSTR(pcondper,3,4)) + *!* lnLuna2 = VAL(SUBSTR(pcondper,1,2)) + + *!* lnInit = lnAn1 * 12 + lnLuna1 + *!* lnFinal = lnAn2 * 12 + lnLuna2 + *!* pcPerioada = SUBSTR(pcondper,1,2)+'/'+SUBSTR(pcondper,3,4) + ' - ' + SUBSTR(pcondper,1,2)+'/'+SUBSTR(pcondper,3,4) + *!* ENDIF + + ***------------------------------- + Private pdDataI, pdDataF + Store {} To pdDataI, pdDataF + + loLuna = get_oluna(gnAn, gnLuna) + lcLuna1 = Padl(loLuna.lunamin,2,'0') + Padl(loLuna.anmin,4,'0') + lcLuna2 = Padl(loLuna.lunamax,2,'0') + Padl(loLuna.anmax,4,'0') + + Local lcData1 + lcData1 = '01/'+Padl(loLuna.lunamin,2,'0')+'/'+Alltrim(Str(loLuna.anmin)) + pdDataI = Ctod(lcData1) + pdDataF = ULTIMAZI(Str(loLuna.anmax), Str(loLuna.lunamax)) + + + ofrmperioada = Createobject('frm_perioada_zzllaaaa') + ofrmperioada.pdDataI = pdDataI + ofrmperioada.pdDataF = pdDataF + ofrmperioada.Show(1) + If gnButon=2 + Return + Endif + + pcPerioada = Dtoc(pdDataI) + ' - ' + Dtoc(pdDataF) + ***------------------------------- + ***------------------------------- + lcSel = [{call pack_gest_rapoarte.fisa_ob_inventar_gest(?pdDataI, ?pdDataF, ?pnId_gestiune, ?pnId_articol, ?gnIdSucursala)}] + lcCursor = 'cFisa' + lnSucces = goExecutor.oExecute(lcSel,lcCursor) + + If lnSucces < 0 + amessage('Call pack_gest_rapoarte.fisa_ob_inventar_gest' + Chr(13) + goExecutor.cEroare,0+16,"Eroare") + Return + Endif + ***------------------------------- + pcTitlu = "FISA DE MAGAZIE" + + If tlExcel + goExport.export2xls([cFisa]) +*!* Do export_xls With 'cFisa' In oproceduri_comune.prg + Else + goExport.export2frx([cFisa],[fisa_obi_gest]) +*!* Select cFisa +*!* Report Form fisa_obi_gest To Printer Prompt Preview + Endif + + If Used("cFisa") + Use In cFisa + Endif + +Endproc && fisa_ob_inventar_gest + +***----------------------------------------------------------------------------------------------------------- +Procedure fisa_magazie + Lparameters tnTipGest + + Private pcTitlu, pcPerioada &&, pcDataOra && pt. raport + Store "" To pcTitlu +&& pcDataOra = get_ora(2) + + Private pnId_gestiune, pcGestiune, pnId_articol + Store 0 To pnId_gestiune, pnId_articol + Store "" To pcGestiune + + loGest = caut_gestiune(tnTipGest, gnIdUtil) + + If buton = 2 + Return + Endif + + pcGestiune = loGest.nume_gestiune + pnId_gestiune = loGest.id_gestiune + loArticol = caut_articol(tnTipGest, .T.) + pnId_articol = loArticol.id_articol + + If buton = 2 + Return + Endif + + Private lnAn1, lnLuna1, lnAn2, lnLuna2 + Store 0 To lnAn1, lnLuna1, lnAn2, lnLuna2 + + loLuna = get_oluna(gnAn, gnLuna) + lcLuna1 = Padl(loLuna.lunamin,2,'0') + Padl(loLuna.anmin,4,'0') + lcLuna2 = Padl(loLuna.lunamax,2,'0') + Padl(loLuna.anmax,4,'0') + + pcondper="" + ofrmperioada=Createobject('frm_perioada_luni') + With ofrmperioada + ._textbox1.Value=lcLuna1 + ._textbox2.Value=lcLuna2 + ._optiongrup1.Value = 2 + ._optiongrup1.Valid() + Endwith + ofrmperioada.Show(1) + If gnButon=2 + Return + Endif + + plPerioada=.F. + lnPoz=At('_',pcondper) + If lnPoz>0 + plPerioada=.T. + Endif + + + If plPerioada + lnAn1 = Val(Substr(pcondper,3,4)) + lnLuna1 = Val(Substr(pcondper,1,2)) + lnAn2 = Val(Substr(pcondper,10,4)) + lnLuna2 = Val(Substr(pcondper,8,2)) + + lnInit = lnAn1 * 12 + lnLuna1 + lnFinal = lnAn2 * 12 + lnLuna2 + pcPerioada = Substr(pcondper,1,2)+'/'+Substr(pcondper,3,4) + ' - ' + Substr(pcondper,8,2)+'/'+Substr(pcondper,10,4) + Else + lnAn1 = Val(Substr(pcondper,3,4)) + lnLuna1 = Val(Substr(pcondper,1,2)) + lnAn2 = Val(Substr(pcondper,3,4)) + lnLuna2 = Val(Substr(pcondper,1,2)) + + lnInit = lnAn1 * 12 + lnLuna1 + lnFinal = lnAn2 * 12 + lnLuna2 + pcPerioada = Substr(pcondper,1,2)+'/'+Substr(pcondper,3,4) + ' - ' + Substr(pcondper,1,2)+'/'+Substr(pcondper,3,4) + Endif + ***------------------------------- + lcSel = [{call pack_gest_rapoarte.fisa_magazie(?lnAn1, ?lnLuna1, ?lnAn2, ?lnLuna2, ?pnId_gestiune, ?pnId_articol, ?gnIdSucursala)}] + lcCursor = 'cFisa' + lnSucces = goExecutor.oExecute(lcSel,lcCursor) + + If lnSucces < 0 + amessage('Call pack_gest_rapoarte.fisa_magazie' + Chr(13) + goExecutor.cEroare,0+16,"Eroare") + Return + Endif + ***------------------------------- + pcTitlu = "FISA DE MAGAZIE" + + * SELECT * FROM cFisa INTO TABLE d:\fisa.dbf + goExport.export2frx([cFisa],[fisa_magazie]) +*!* Select cFisa +*!* Report Form fisa_magazie To Printer Prompt Preview + If Used("cFisa") + Use In cFisa + Endif + +Endproc && fisa_magazie + +***----------------------------------------------------------------------------------------------------------- +Procedure fisa_magazie_FIFO + Lparameters tnTipGest, tnIdGestiune, tcNumeGestiune, tnIdArticol, tcSerie + + Private pcTitlu, pcPerioada, pcDataOra && pt. raport + Store "" To pcTitlu + pcDataOra = get_ora(2) + + tcSerie = IIF(EMPTY(tcSerie), "", tcSerie) + + Private pnId_gestiune, pcGestiune, pnId_articol, pcSerie + Store 0 To pnId_gestiune, pnId_articol + Store '' To pcGestiune,pcSerie + + If Empty(tnIdGestiune) Or Type("tnIdGestiune")!="N" + loGest = caut_gestiune(tnTipGest, gnIdUtil) + If buton = 2 + Return + Endif + pcGestiune = loGest.nume_gestiune + pnId_gestiune = loGest.id_gestiune + Else + pnId_gestiune = tnIdGestiune + pcGestiune = tcNumeGestiune + Endif + If Empty(tnIdArticol) Or Type("tnIdArticol")!="N" + loArticol = caut_articol(tnTipGest, .T.) + If buton = 2 + Return + Endif + pnId_articol = loArticol.id_articol + + *!* modificare 20.08.2007 ( cere seria ) + pcSerie = [] + ofrmSerie = Null + ofrmSerie = Createobject("frm_cere_titlu",'Serie','pcSerie') + ofrmSerie.lb_titlu_alb_b121.Caption = Alltrim(loArticol.denumire) + ofrmSerie.Show(1) + pcSerie = Alltrim(pcSerie) + *!* modificare 20.08.2007 ^ + + Else + pnId_articol = tnIdArticol + pcSerie = tcSerie + Endif + + + Private lnAn1, lnLuna1, lnAn2, lnLuna2 + Store 0 To lnAn1, lnLuna1, lnAn2, lnLuna2 + + loLuna = get_oluna(gnAn, gnLuna) + lcLuna1 = Padl(loLuna.lunamin,2,'0') + Padl(loLuna.anmin,4,'0') + lcLuna2 = Padl(loLuna.lunamax,2,'0') + Padl(loLuna.anmax,4,'0') + + pcondper="" + ofrmperioada=Createobject('frm_perioada_luni') + With ofrmperioada + ._textbox1.Value=lcLuna1 + ._textbox2.Value=lcLuna2 + ._optiongrup1.Value = 2 + ._optiongrup1.Valid() + Endwith + ofrmperioada.Show(1) + If gnButon=2 + Return + Endif + + plPerioada=.F. + lnPoz=At('_',pcondper) + If lnPoz>0 + plPerioada=.T. + Endif + + + If plPerioada + lnAn1 = Val(Substr(pcondper,3,4)) + lnLuna1 = Val(Substr(pcondper,1,2)) + lnAn2 = Val(Substr(pcondper,10,4)) + lnLuna2 = Val(Substr(pcondper,8,2)) + + lnInit = lnAn1 * 12 + lnLuna1 + lnFinal = lnAn2 * 12 + lnLuna2 + pcPerioada = Substr(pcondper,1,2)+'/'+Substr(pcondper,3,4) + ' - ' + Substr(pcondper,8,2)+'/'+Substr(pcondper,10,4) + Else + lnAn1 = Val(Substr(pcondper,3,4)) + lnLuna1 = Val(Substr(pcondper,1,2)) + lnAn2 = Val(Substr(pcondper,3,4)) + lnLuna2 = Val(Substr(pcondper,1,2)) + + lnInit = lnAn1 * 12 + lnLuna1 + lnFinal = lnAn2 * 12 + lnLuna2 + pcPerioada = Substr(pcondper,1,2)+'/'+Substr(pcondper,3,4) + ' - ' + Substr(pcondper,1,2)+'/'+Substr(pcondper,3,4) + Endif + ***------------------------------- + *!* lcSel = [{call pack_gest_rapoarte.fisa_magazie(?lnAn1, ?lnLuna1, ?lnAn2, ?lnLuna2, ?pnId_gestiune, ?pnId_articol)}] + *!* lcCursor = 'cFisa' + *!* lnSucces = goExecutor.oExecute(lcSel,lcCursor) + + *!* If lnSucces < 0 + *!* amessage('Call pack_gest_rapoarte.fisa_magazie' + Chr(13) + goExecutor.cEroare,0+16,"Eroare") + *!* Return + *!* Endif + ***---------------------------- + *------------------------------ + + + If pnId_articol = 0 + lcCond = " and id_gestiune = " + Str(pnId_gestiune) + Else + lcCond = " and id_gestiune = " + Str(pnId_gestiune) + " and id_articol = " + Str(pnId_articol) + ; + IIF(!Empty(Alltrim(Nvl(pcSerie,'')))," and serie = ?pcSerie "," and TRIM(serie) IS NULL ") + Endif + If tnTipGest = 6 + lcPret = "pretv" + Else + lcPret = "pret" + Endif + lcStoc = 'crsStoc' + lcRulaje = 'crsRulaje' + + If Used(lcStoc) + Use In (lcStoc) + Endif + + If Used(lcRulaje) + Use In (lcRulaje) + Endif + lcCond = lcCond + gcCondSucursala + lcSqlStoc = "select id_articol,denumire,serie,"+ lcPret +" as pret,codmat,um,id_gestiune,cants,cante,cant,datain from vstoc where an = " + Str(lnAn1) + " and luna = " + Str(lnLuna1) + lcCond + lcSqlRulaje = "select cod,nnir,id_articol,denumire,serie,codmat,um,id_gestiune,cant,cante,"+ lcPret +" as pret,valoare,dataact,datain,dataout from vrul where an * 12 + luna between " + Str(lnAn1*12+lnLuna1) + " and " + Str(lnAn2*12+lnLuna2) + lcCond + lnSucces = goExecutor.oExecute(lcSqlStoc,lcStoc) + If lnSucces < 0 + amessage('SELECT stoc' + Chr(13) + goExecutor.cEroare,0+16,"Eroare") + Return + Endif + lnSucces = goExecutor.oExecute(lcSqlRulaje,lcRulaje) + If lnSucces < 0 + amessage('SELECT rulaje' + Chr(13) + goExecutor.cEroare,0+16,"Eroare") + Return + Endif + Select crsStoc + Replace All denumire With Nvl(denumire,''), serie With Nvl(serie,''),codmat With Nvl(codmat,''), um With Nvl(um,''), datain With Nvl(datain,{//::}) + Select crsRulaje + Replace All nnir With Nvl(nnir,0),denumire With Nvl(denumire,''), serie With Nvl(serie,''), codmat With Nvl(codmat,''), um With Nvl(um,''), datain With Nvl(datain,{//::}), dataout With Nvl(dataout,{//::}), dataact With Nvl(dataact,{//::}) + + + Select id_articol, codmat, denumire, um, serie From crsStoc ; + UNION ; + SELECT id_articol, codmat, denumire, um, serie From crsRulaje; + INTO Cursor crsArticole; + ORDER By 2, 3 + + *!* modificare 28.11.2006 + *!* CREATE TABLE &gcTempPath\fisa_stoc (id_articol N(20),denumire c(100),codmat c(50),um c(6),ldata d,nrdoc c(15),cantin N(12,3),; + *!* pretin N(12,3),valin N(14,2),cantout N(12,3),pretout N(12,3),valout N(14,2),cantf N(12,3),pretf N(12,3),; + *!* valf N(14,2),idf N(10)) + If Used('fisa_stoc') + Use In fisa_stoc + Endif + + Create Cursor fisa_stoc (id_articol N(20),denumire c(100),serie c(100),codmat c(50),um c(6),ldata d,nrdoc c(15),cantin N(12,3),; + pretin N(12,3),valin N(14,2),cantout N(12,3),pretout N(12,3),valout N(14,2),cantf N(12,3),pretf N(12,3),; + valf N(14,2),idf N(10)) + *!* modificare 28.11.2006 ^ + Select crsArticole + Scan + lnIdArticol = id_articol + lcDenumire = Alltrim(denumire) + lcCodMat = Alltrim(codmat) + lcUm = Alltrim(um) + lcSerie = Alltrim(serie) + *============================== + *!* modificare 28.11.2006 + *!* SELECT id_articol,cants AS cantf, PRET AS pretf,cants*PRET AS valf, datain AS ldata," " AS nrdoc,; + *!* denumire,codmat,um,000000000000.000 AS cantin,000000000000.000 AS pretin,00000000000000.00 AS valin,; + *!* 000000000000.000 AS cantout,000000000000.000 AS pretout,00000000000000.000 AS valout,0000000000 AS idf; + *!* FROM crsStoc WHERE id_articol = lnIdArticol AND cants <> 0; + *!* INTO TABLE &gcTempPath\cstoc ORDER BY datain READWRITE + Select id_articol,serie,cants As cantf, Pret As pretf,cants*Pret As valf, datain As ldata," " As nrdoc,; + denumire,codmat,um,000000000000.000 As cantin,000000000000.000 As pretin,00000000000000.00 As valin,; + 000000000000.000 As cantout,000000000000.000 As pretout,00000000000000.000 As valout,0000000000 As idf; + FROM crsStoc Where id_articol = lnIdArticol And cants <> 0 And Nvl(serie,'+_') = Nvl(lcSerie,'+_') ; + INTO Cursor cstoc Order By datain Readwrite + *!* modificare 28.11.2006 ^ + + Select cstoc + Sum cantf To lnCantf + Sum valf To lnValf + Locate For Empty(idf) + If Found() + Replace cantin With lnCantf, valin With lnValf,nrdoc With 'Stoc initial' + Replace denumire With lcDenumire, codmat With lcCodMat, um With lcUm, id_articol With lnIdArticol,serie With lcSerie + Replace All idf With 1 For Empty(idf) + Endif + + If _Tally > 0 + *!* modificare 28.11.2006 + *!* lcDbfStoc = DBF("cstoc") + *!* SELECT fisa_stoc + *!* APPEND FROM (lcDbfStoc) + Select fisa_stoc + Append From Dbf('cstoc') + *!* modificare 28.11.2006 ^ + Else + Select fisa_stoc + Append Blank + Replace cantin With lnCantf, valin With lnValf,nrdoc With 'Stoc initial' + Replace denumire With lcDenumire, codmat With lcCodMat, um With lcUm, id_articol With lnIdArticol,serie With lcSerie + Replace All idf With 1 For Empty(idf) + Endif + + If Used('crulaj') + Use In crulaj + Endif + Select * From crsRulaje Where id_articol = lnIdArticol And Nvl(serie,'+_') = Nvl(lcSerie,'+_'); + INTO Cursor crulaj Order By dataact, cod, nnir + + Select crulaj + + Scan + Scatter Name xrul + + Select fisa_stoc + Calculate Max(idf) To lnMax + lnMax = lnMax + 1 + + Select cstoc + Replace All idf With lnMax + + Do Case + Case xrul.CANT != 0 + Locate For pretf = xrul.Pret + If !Found() + Select cstoc + Append Blank + Replace cantin With xrul.CANT,pretin With xrul.Pret,valin With xrul.CANT*xrul.Pret + Replace cantout With 0 + Replace cantf With xrul.CANT, pretf With xrul.Pret,valf With xrul.CANT*xrul.Pret + Replace idf With lnMax,ldata With xrul.datain,nrdoc With Str(xrul.nnir) + Replace id_articol With lnIdArticol + Replace denumire With xrul.denumire, codmat With xrul.codmat, um With xrul.um, serie With xrul.serie + Else + Replace cantin With xrul.CANT,pretin With xrul.Pret,valin With xrul.CANT*xrul.Pret + Replace cantf With cantf+xrul.CANT,valf With valf+valin + Replace ldata With xrul.datain,nrdoc With Str(xrul.nnir) + Replace id_articol With lnIdArticol + Replace denumire With xrul.denumire, codmat With xrul.codmat, um With xrul.um, serie With xrul.serie + Endif + Case xrul.CANTE != 0 + Select cstoc + Locate For pretf=xrul.Pret + If !Found() + Append Blank + Replace idf With lnMax + Endif + Replace cantout With xrul.CANTE,pretout With xrul.Pret,valout With xrul.CANTE*xrul.Pret + Replace cantf With cantf-xrul.CANTE,pretf With xrul.Pret,valf With valf-valout + Replace ldata With xrul.dataout,nrdoc With Str(xrul.nnir) + Replace id_articol With lnIdArticol + Replace denumire With xrul.denumire, codmat With xrul.codmat, um With xrul.um, serie With xrul.serie + Endcase + Select fisa_stoc + *!* APPEND FROM &gcTempPath\cstoc + Append From Dbf('cstoc') + Select cstoc + Delete All For cantf=0 + Replace All cantin With 0, cantout With 0 + Release xrul + Select crulaj + Endscan &&crulaj + Endscan && crsArticole + *======================================================================================================= + pcTitlu = "FISA DE MAGAZIE" + Select fisa_stoc + replace ALL nrdoc WITH '' FOR cantin=0 AND cantout=0 AND alltrim(nrdoc)<>'Stoc initial' + If Reccount('fisa_stoc')>0 + *Keyboard '{CTRL+F10}' + *Report Form fisa_magazie_FIFO To Printer Prompt Preview + goExport.export2frx([fisa_stoc],[fisa_magazie_FIFO],.T., , , , , .T.) + Else + amessagebox("Nu exista inregistrari pentru listare!",0+48,"Atentie") + Endif + + If Used('crsstoc') + Use In crsStoc + Endif + + If Used('crsrulaje') + Use In crsRulaje + Endif + + If Used('crsarticole') + Use In crsArticole + Endif + + If Used('cstoc') + Use In cstoc + Endif + + If Used('crulaj') + Use In crulaj + Endif + + If Used("fisa_stoc") + Use In fisa_stoc + Endif + +Endproc && fisa_magazie_FIFO + + +***----------------------------------------------------------------------------------------------------------- +Procedure fisa_ob_inventar_resp + Parameters tlExcel + && tlToate - se genereaza raportul pt. toate obiectele de inventar + + Private pcTitlu, pcPerioada && , pcDataOra && pt. raport + Store "" To pcTitlu +&& pcDataOra = get_ora(2) + + Private pnId_responsabil + Store 0 To pnId_responsabil + + loResp = caut_responsabil(.T.) + pnId_responsabil = loResp.id_responsabil + + ***------------------------------- + Private pdDataI, pdDataF + Store {} To pdDataI, pdDataF + + loLuna = get_oluna(gnAn, gnLuna) + lcLuna1 = Padl(loLuna.lunamin,2,'0') + Padl(loLuna.anmin,4,'0') + lcLuna2 = Padl(loLuna.lunamax,2,'0') + Padl(loLuna.anmax,4,'0') + + Local lcData1 + lcData1 = '01/'+Padl(loLuna.lunamin,2,'0')+'/'+Alltrim(Str(loLuna.anmin)) + pdDataI = Ctod(lcData1) + pdDataF = ULTIMAZI(Str(loLuna.anmax), Str(loLuna.lunamax)) + + + ofrmperioada = Createobject('frm_perioada_zzllaaaa') + ofrmperioada.pdDataI = pdDataI + ofrmperioada.pdDataF = pdDataF + ofrmperioada.Show(1) + If gnButon=2 + Return + Endif + + pcPerioada = Dtoc(pdDataI) + ' - ' + Dtoc(pdDataF) + ***------------------------------- + lcSel = [{call pack_gest_rapoarte.fisa_ob_inventar_resp(?pdDataI, ?pdDataF, ?pnId_responsabil,?gnIdSucursala)}] + lcCursor = 'cFisa' + lnSucces = goExecutor.oExecute(lcSel,lcCursor) + + If lnSucces < 0 + amessagebox('Call pack_gest_rapoarte.fisa_ob_inventar_resp' + Chr(13) + goExecutor.cEroare,0+16,"Eroare") + Return + Endif + ***------------------------------- + pcTitlu = "FISA DE EVIDENTA A OBIECTELOR DE INVENTAR IN FOLOSINTA" + + If tlExcel + goExport.export2xls([cFisa]) +*!* Do export_xls With "cFisa" + Else + goExport.export2frx([cFisa],[fisa_obi_resp]) +*!* Select cFisa +*!* Report Form fisa_obi_resp To Printer Prompt Preview + Endif + If Used("cFisa") + Use In cFisa + Endif + +Endproc && fisa_ob_inventar_resp +***----------------------------------------------------------------------------------------------------------- +Procedure fisa_ob_inventar_resp_stoc + Parameters tlExcel + && tlToate - se genereaza raportul pt. toate obiectele de inventar + + Private pcTitlu &&, pcDataOra + Store "" To pcTitlu &&, pcDataOra + Local lcOrder, lcOrderColumn, loColumnSort + lcOrder = "" + lcOrderColumn = "" + + + Private pnId_responsabil + Store 0 To pnId_responsabil + lcTitlu = [CANTITATI CUMULATE] + pcTitlu = lcTitlu && ceretitlu_rap([Titlul raportului],lcTitlu) +*!* pcDataOra = get_ora(2) + pcGrupGest = [ALLTRIM(nresp) + ', NR. MATRICOL: ' + ALLTRIM(IIF(NVL(marca,0)=0,'',STR(NVL(marca,0))))] + pcGrupCont = [EOF()] + pcGrupAcont = [EOF()] + pcHeaderGrup = [Responsabil ] + lcOrder = "nresp,denumire,codmat" + lcSql = [] + N=0 + lcKeepTitle="" + gnButon=1 + Do While gnButon#2 + N=N+1 + loResp = caut_responsabil(.T.) + If gnButon=2 + Exit + Endif + pnId_responsabil = loResp.id_responsabil + If(N>1) + pcTitlu =lcKeepTitle + Else + pcTitlu = ceretitlu_rap([Titlul raportului],[SUBINVENTAR LA ]+Dtoc(Date())) + lcKeepTitle=pcTitlu + Endif + + lcSel = [{call pack_gest_rapoarte.fisa_ob_inventar_resp_stoc(?gnAn, ?gnLuna, ?pnId_responsabil, ?gnIdSucursala)}] + lcCursor = 'cFisa' + lnSucces = goExecutor.oExecute(lcSel,lcCursor) + + If lnSucces < 0 + amessagebox('Call pack_gest_rapoarte.fisa_ob_inventar_resp' + Chr(13) + goExecutor.cEroare,0+16,"Eroare") + Return + Endif + ***------------------------------- + + If tlExcel + goExport.export2xls([cFisa]) +*!* Do export_xls With "cFisa" + Else + goExport.export2frx([cFisa],[rap_stocachi_grup2]) +*!* Select cFisa +*!* Report Format rap_stocachi_grup2.FRX To Printer Prompt Noconsole Preview + Endif + Enddo + + If Used('cFisa') + Use In cFisa + Endif + +Endproc && fisa_ob_inventar_resp_stoc +***----------------------------------------------------------------------------------------------------------- +Procedure necesar_echipamente + + Private pdData + Store Date() To pdData + + Private pocond,pcschema1,pcselect1,pcfiltru1,pcorder1 &&Conditii din nomenclator + Store '' To pocond,pcschema1,pcselect1,pcfiltru1,pcorder1 + + pcschema1 = [''] + pcselect1 = ['select id_conditie,denumire,conditie from sal_vnom_cond where 1=1'] + lcCursor = [sCond] + pcorder1 = [denumire] + pcfiltru1 = [2=2] + llAfiseaza = .T. + gencursor('pocond',lcCursor,pcselect1,pcfiltru1,pcschema1,pcorder1,llAfiseaza) + pocond.ca_baza1.afisare() + + Select *, 1 As ales From sCond Into Cursor v_conditii Readwrite + Select v_conditii + + ***----------- + Private poper, pcschema3, pcselect3, pcfiltru3, pcorder3 &&Persoane + Store '' To poper,pcschema3,pcselect3,pcfiltru3,pcorder3 + pcschema3 = [''] + pcselect3 = ['select s.id_part,s.marca,s.nume,s.prenume, s.meserie, s.formatia, 0 as ales from sal_vstat s '+] + ; + [' where 1=2'] + pcfiltru3 = [1=2] + pcorder3 = [nume,prenume] + llAfiseaza = .T. + + gencursor('poper','v_pers',pcselect3,pcfiltru3,pcschema3,pcorder3,llAfiseaza) + poper.ca_baza1.afisare() + + lone = Createobject('frm_necesar_echipamente') + lone.Show(1) + + +Endproc && necesar_echipamente +***----------------------------------------------------------------------------------------------------------- + +*!* Procedure raport_rulaj +*!* Lparameters toHash + +*!* If Type('toHash') <> 'O' +*!* toHash = GetHash() +*!* Endif + +*!* Private poFiltru +*!* poFiltru = Createobject("custom") + +*!* With poFiltru +*!* .AddProperty("cSql","") +*!* .AddProperty("nrord","") +*!* .AddProperty("id_lucrare",0) +*!* .AddProperty("nume_gestiune","") +*!* .AddProperty("id_gestiune",0) +*!* .AddProperty("sectie","") +*!* .AddProperty("id_sectie",0) +*!* .AddProperty("nresp","") +*!* .AddProperty("id_responsabil",0) +*!* Endwith + +*!* *!* loRap = Createobject("frm_date_rapoarte_rulaje", toHash) +*!* loRap = Createobject("frm_date_rapoarte_rulaje") +*!* loRap.Show(1) + +*!* Endproc && raport_rulaj + +***----------------------------------------------------------------------------------------------------------- +*!* Procedure consum_lucrari_articole + +*!* Local loHash +*!* loHash = GetHash() +*!* With loHash +*!* .SetValue("cListaCampuri", "lucrare,articol,serie,cante,valoutach") +*!* .SetValue("cListaOrdonare", "1,2,3") +*!* .SetValue("cListaGrupare", "1,2,3") +*!* .SetValue("cTipRulaj", "IESIRI") +*!* .SetValue("cTitlu", "Consum materiale pe lucrari/articole") +*!* .SetValue("cRaport", "rap_rul_consum_lucrari_articole") +*!* .SetValue("lReadOnly", .T.) +*!* Endwith + +*!* Do raport_rulaj With loHash && "lucrare,articol,cante,valoutach", "1,2", "1,2", "IESIRI" +*!* Endproc && consum_lucrari_articole + +***----------------------------------------------------------------------------------------------------------- +*!* Procedure centralizator_consum_lucrari + +*!* Local loHash +*!* loHash = GetHash() +*!* With loHash +*!* .SetValue("cListaCampuri", "cont,lucrare,valoutach") +*!* .SetValue("cListaOrdonare", "1,2") +*!* .SetValue("cListaGrupare", "1,2") +*!* .SetValue("cTipRulaj", "IESIRI") +*!* .SetValue("cTitlu", "Centralizator consum pe lucrari") +*!* .SetValue("cRaport", "rap_rul_centralizator_consum_lucrari") +*!* .SetValue("lReadOnly", .T.) +*!* Endwith + +*!* Do raport_rulaj With loHash && "lucrare,articol,cante,valoutach", "1,2", "1,2", "IESIRI" + +*!* Endproc && centralizator_consum_lucrari +***----------------------------------------------------------------------------------------------------------- +Procedure rap_compar_stoc_bal + + Private pcLunaI, pcLunaF + pcLunaI = Padl(gnLuna,2,'0') + Alltrim(Str(gnAn)) + pcLunaF = Padl(gnLuna,2,'0') + Alltrim(Str(gnAn)) + + locsb = Createobject('frm_compar_stoc_bal') + locsb.Show(1) + +Endproc && rap_compar_stoc_bal +***----------------------------------------------------------------------------------------------------------- + +***----------------------------------------------------------------------------------------------------------- +PROCEDURE fisa_magazie_FIFO_valuta + Lparameters tnTipGest, tnIdGestiune, tcNumeGestiune, tnIdArticol, tcSerie,tnIdValuta,tcValuta + + Private pcTitlu, pcPerioada, pcDataOra && pt. raport + Store "" To pcTitlu + + + pcDataOra = get_ora(2) + + tcSerie = IIF(EMPTY(tcSerie), "", tcSerie) + + Private pnId_gestiune, pcGestiune, pnId_articol, pcSerie,pnIdValuta,pcValuta + Store 0 To pnId_gestiune, pnId_articol,pnIdValuta + Store '' To pcGestiune,pcSerie,pcValuta + + If Empty(tnIdGestiune) Or Type("tnIdGestiune")!="N" + loGest = caut_gestiune(tnTipGest, gnIdUtil) + If buton = 2 + Return + Endif + pcGestiune = loGest.nume_gestiune + pnId_gestiune = loGest.id_gestiune + pcNumeGestiune = Upper(Alltrim(loGest.nume_gestiune)) + Else + pnId_gestiune = tnIdGestiune + pcGestiune = tcNumeGestiune + pcNumeGestiune = tcNumeGestiune + Endif + If Empty(tnIdArticol) Or Type("tnIdArticol")!="N" + loArticol = caut_articol(tnTipGest, .T.) + If buton = 2 + Return + Endif + pnId_articol = loArticol.id_articol + + *!* modificare 20.08.2007 ( cere seria ) + pcSerie = [] + ofrmSerie = Null + ofrmSerie = Createobject("frm_cere_titlu",'Serie','pcSerie') + ofrmSerie.lb_titlu_alb_b121.Caption = Alltrim(loArticol.denumire) + ofrmSerie.Show(1) + pcSerie = Alltrim(pcSerie) + *!* modificare 20.08.2007 ^ + pcDenumire = Upper(Alltrim(loArticol.denumire)) + pcUm = Upper(Alltrim(loArticol.um)) + pcCodMaterial = Upper(Alltrim(loArticol.codmat)) + Else + pnId_articol = tnIdArticol + pcSerie = tcSerie + Endif + If Empty(tnIdValuta) Or Type("tnIdValuta")!="N" + loValuta = caut_valuta(.f.,.f., .T.) + If buton = 2 Or (Empty(loValuta.id_valuta) And Empty(loValuta.nume_val)) + Return + Endif + pnIdValuta = loValuta.id_valuta + pcValuta =ALLTRIM(loValuta.nume_val) + + Else + pnIdValuta = tnIdValuta + pcValuta = TcValuta + Endif +*!* Private pnIdArticol,pcDenumire,pnId_gestiune,pcNumeGestiune,pcSerie,pcUm,pcCodMaterial,pcTitlu, pcPerioada, pcDataOra,pnIdValuta +*!* Store '' To pcTitlu,pcNumeGestiune,pcSerie,pcUm,pcCodMaterial,pcDataOra + +*!* If Used('crstemp') +*!* Use In crstemp +*!* Endif + +*!* Select (lcCursor) && crsrul +*!* pnIdArticol = id_articol +*!* pnIdGestiune = id_gestiune +*!* pcDenumire = Upper(Alltrim(denumire)) +*!* pcUm = Upper(Alltrim(um)) +*!* pcCodMaterial = Upper(Alltrim(codmat)) +*!* pcSerie = Upper(Alltrim(serie)) +*!* pcNumeGestiune = Upper(Alltrim(nume_gestiune)) +*!* pnIdValuta = Nvl(id_valuta,0) + +*!* pcTitlu = [FISA MAGAZIE ( CU PRETURI IN VALUTA )] +*!* ofrmTitlu = Createobject("frm_cere_titlu",'Titlu','pcTitlu') +*!* ofrmTitlu.Show(1) +*!* pcTitlu = Alltrim(pcTitlu) +*!* Release ofrmTitlu + + +*!* perioada raport +Private pnAnI, pnLunaI, pnAnLunaI, pnAnLunaF +Store 0 To pnAnI, pnLunaI, pnAnLunaI, pnAnLunaF +loLuna = get_oluna(gnAn, gnLuna) +lcLuna1 = Padl(loLuna.lunamin,2,'0') + Padl(loLuna.anmin,4,'0') +lcLuna2 = Padl(loLuna.lunamax,2,'0') + Padl(loLuna.anmax,4,'0') + +pcondper="" +ofrmperioada=Createobject('frm_perioada_luni') +With ofrmperioada + ._textbox1.Value=lcLuna1 + ._textbox2.Value=lcLuna2 + ._optiongrup1.Value = 2 + ._optiongrup1.Valid() +Endwith +ofrmperioada.Show(1) +If gnButon=2 + Return +Endif +pcTitlu = [FISA MAGAZIE ( CU PRETURI IN ]+pcValuta + [ )] +ofrmTitlu = Createobject("frm_cere_titlu",'Titlu','pcTitlu') +ofrmTitlu.Show(1) +pcTitlu = Alltrim(pcTitlu) +Release ofrmTitlu + +plPerioada=.F. +lnPoz=At('_',pcondper) +If lnPoz>0 + plPerioada=.T. +Endif + + +If plPerioada + pnAnI = Val(Substr(pcondper,3,4)) + pnLunaI = Val(Substr(pcondper,1,2)) + pnAnF = Val(Substr(pcondper,10,4)) + pnLunaF = Val(Substr(pcondper,8,2)) + + pnAnLunaI = pnAnI * 12 + pnLunaI + pnAnLunaF = pnAnF * 12 + pnLunaF + pcPerioada = Substr(pcondper,1,2)+'/'+Substr(pcondper,3,4) + ' - ' + Substr(pcondper,8,2)+'/'+Substr(pcondper,10,4) +Else + pnAnI = Val(Substr(pcondper,3,4)) + pnLunaI = Val(Substr(pcondper,1,2)) + + pnAnLunaI = pnAnI * 12 + pnLunaI + pnAnLunaF = pnAnLunaI + pcPerioada = Substr(pcondper,1,2)+'/'+Substr(pcondper,3,4) + ' - ' + Substr(pcondper,1,2)+'/'+Substr(pcondper,3,4) +Endif + +*!* lcSql = [select a.dataact,a.nnir,a.pret,a.pretd,a.nume_valuta_a,a.cant,a.pretv,a.pretdv,a.nume_valuta_v,] + ; +*!* [a.cante,sum(nvl(a.cant, 0) - nvl(a.cante, 0)) over(order by a.dataact,a.dataora) as cants ] + ; +*!* [from (select last_day(to_date(a.an || a.luna, 'YYYYMM')) as dataact, ] + ; +*!* [null as nnir,a.pret,a.pretd,decode(b.moneda_nationala, 0, b.nume_val, null) as nume_valuta_a,] + ; +*!* [a.cants + a.cant - a.cante as cant,null as pretv,0 as pretdv,null as nume_valuta_v,null as cante,null as dataora ] + ; +*!* [from ] + gcS + [.stoc a ] + ; +*!* [left join ] + gcS + [.nom_valute b on a.id_valuta = b.id_valuta ] +; +*!* [where a.id_articol = ?pnId_Articol and NVL(a.id_valuta,0) = ?pnIdValuta and a.luna = ?pnLunaI and a.an = ?pnAnI ] + ; +*!* [and NVL(a.serie,'+_') = NVL(?pcSerie,'+_') and a.id_gestiune = ?pnId_gestiune ] + ; +*!* STRTRAN(gcCondSucursala,[id_sucursala],[a.id_sucursala]) + ; +*!* [union all ] + ; +*!* [select a.dataact,a.nnir,a.pret,] + ; +*!* [a.pretd,decode(d.moneda_nationala, 0, d.nume_val, null) as nume_valuta_a,] + ; +*!* [decode(a.cante, 0, a.cant, null) as cant,decode(a.cant, 0, a.pretv, null) as pretv,] + ; +*!* [decode(e.moneda_nationala,0,decode(c.pret_cu_tva,0,c.pret,1,round(c.pret / c.proc_tvav,] + ; +*!* [pack_sesiune.getoptiunefirma('PVAL'))),0) as pretdv,] + ; +*!* [decode(e.moneda_nationala, 0, e.nume_val, null) as nume_valuta_v,decode(a.cant, 0, a.cante, null) as cante,a.dataora ] + ; +*!* [from ] + gcS + [.rul a ] + ; +*!* [left join ] + gcS + [.vanzari b on a.cod = b.cod and b.sters = 0 and NVL(a.id_sucursala,-99) = NVL(b.id_sucursala,-99) ] + ; +*!* [left join ] + gcS + [.vanzari_Detalii c on a.id_articol = c.id_articol ] + ; +*!* [and a.id_gestiune = c.id_gestiune and a.cont = c.cont and nvl(a.serie, '+_') = nvl(c.serie, '+_') ] + ; +*!* [and b.id_vanzare = c.id_vanzare ] + ; +*!* [left join ] + gcS + [.nom_valute d on a.id_valuta = d.id_valuta ] + ; +*!* [left join ] + gcS + [.nom_valute e on c.id_valuta = e.id_valuta ] + ; +*!* [where a.id_articol = ?pnId_Articol and NVL(a.id_valuta,0) = ?pnIdValuta and a.sters = 0 ] + ; +*!* [and NVL(a.serie,'+_') = NVL(?pcSerie,'+_') and a.id_gestiune = ?pnId_gestiune ] + ; +*!* Strtran(gcCondSucursala,[id_sucursala],[a.id_sucursala]) + ; +*!* [and a.id_tip_rulaj <> 3 and a.luna + a.an * 12 between ?pnAnLunaI and ?pnAnLunaF order by 1) a ] + +lcSql = [select dataact,nnir,pret,pretd,nume_valuta_a,cant,pretv, pretdv, nume_valuta_v, cante, cants,dataora,] + ; + [sum(case when dataora is null then 0 when cants <> 0 Or ((cant Is Not Null Or cante Is Not Null) And cants = 0) then 1 else 0 end)] + ; + [ over(partition by dataact, dataora order by pretd) as ordine from ] + ; + [(select dataact,nnir,pret,pretd,nume_valuta_a,cant,pretv, pretdv,nume_valuta_v,cante,dataora,] + ; + [sum(nvl(cant, 0) - nvl(cante, 0)) over(partition by pretd order by dataact, dataora) as cants from ] +; + [(select last_day(to_date(a.an || a.luna, 'YYYYMM')) as dataact,null as nnir,] +; + [a.pret,a.pretd,decode(b.moneda_nationala, 0, b.nume_val, null) as nume_valuta_a, a.cants + a.cant - a.cante as cant,]+; + [null as pretv,null as pretdv, null as nume_valuta_v, null as cante, null as dataora ]+; + [from ] + gcS + [.stoc a ] + ; + [left join ] + gcS + [.nom_valute b on a.id_valuta = b.id_valuta ] +; + [where a.id_articol = ?pnId_Articol and NVL(a.id_valuta,0) = ?pnIdValuta and a.luna + a.an * 12 = ?pnAnLunaI-1 ] + ; + [and NVL(a.serie,'+_') = NVL(?pcSerie,'+_') and a.id_gestiune = ?pnId_gestiune ] + ; + STRTRAN(gcCondSucursala,[id_sucursala],[a.id_sucursala]) + ; + [ union all ] + ; + [(select a.dataact,a.nnir,f.pret, f.pretd,decode(d.moneda_nationala,0,d.nume_val,null) as nume_valuta_a,]+; + [decode(a.pretd,f.pretd,decode(a.cante, 0, a.cant, null),null) as cant,]+; + [decode(a.pretd,f.pretd,decode(a.cant, 0, a.pretv, null),null) as pretv,] +; + [decode(a.pretd,f.pretd,decode(e.moneda_nationala,0,decode(c.pret_cu_tva, 0,c.pret, 1,] +; + [round(c.pret / c.proc_tvav,pack_sesiune.getoptiunefirma('PVAL'))), null),null) as pretdv,] +; + [decode(a.pretd, f.pretd,decode(e.moneda_nationala,0, e.nume_val,null),null) as nume_valuta_v,] +; + [decode(a.pretd,f.pretd,decode(a.cant, 0, a.cante, null),null) as cante,a.dataora ] +; + [from ] + gcS + [.rul a ] +; + [left join ] + gcS + [.vanzari b on a.cod = b.cod and b.sters = 0 and NVL(a.id_sucursala,-99)=NVL(b.id_sucursala,-99) ] +; + [left join ] + gcS + [.vanzari_Detalii c on a.id_articol = c.id_articol and a.id_gestiune = c.id_gestiune and a.cont = c.cont and nvl(a.serie,'+_') = nvl(c.serie,'+_') and b.id_vanzare = c.id_vanzare ] +; + [left join ] + gcS + [.nom_valute d on a.id_valuta = d.id_valuta ] +; + [left join ] + gcS + [.nom_valute e on c.id_valuta = e.id_valuta ] +; + [left join (select a.pret, a.pretd, a.id_gestiune ] +; + [from ] + gcS + [.stoc a ] +; + [where a.id_articol = ?pnId_Articol and NVL(a.id_valuta, 0) = ?pnIdValuta and a.luna + a.an * 12 = ?pnAnLunaI-1 and NVL(a.serie, '+_') = NVL(?pcSerie, '+_') and a.id_gestiune = ?pnId_gestiune ] +; + STRTRAN(gcCondSucursala,[id_sucursala],[a.id_sucursala]) + ; + [ union select a.Pret, a.pretd, a.id_gestiune from ] + gcS + [.rul a ] + ; + [Where a.id_articol = ?pnId_Articol ] +; + [And Nvl(a.id_valuta, 0) = ?pnIdValuta ] +; + [And a.sters = 0 ] +; + [And Nvl(a.serie, '+_') = ] +; + [Nvl(?pcSerie, '+_') ] +; + [And a.id_gestiune = ?pnId_gestiune ] +; + STRTRAN(gcCondSucursala,[id_sucursala],[a.id_sucursala]) + ; + [ And a.id_tip_rulaj <> 3 And a.luna + a.an * 12 Between ?pnAnLunaI And ?pnAnLunaF) F On a.id_gestiune = F.id_gestiune ] +; + [Where a.id_articol = ?pnId_Articol And Nvl(a.id_valuta, 0) = ?pnIdValuta And a.sters = 0 ] +; + [And Nvl(a.serie, '+_') = Nvl(?pcSerie, '+_') And a.id_gestiune = ?pnId_gestiune ] +; + STRTRAN(gcCondSucursala,[id_sucursala],[a.id_sucursala]) + ; + [ And a.id_tip_rulaj <> 3 And a.luna + a.an * 12 Between ?pnAnLunaI And ?pnAnLunaF))) ] +; + [Where cants <> 0 Or ((cant Is Not Null Or cante Is Not Null) And cants = 0) ] +; + [Order By dataact, dataora, pretd ] + +lnSucces = goExecutor.oExecute(lcSql,[crstemp]) +If lnSucces < 0 + amessagebox(goExecutor.cEroare,16,"Eroare") +Else + If Reccount('crstemp')>0 + pcDataOra = get_ora(2) + *Keyboard '{CTRL+F10}' + Select crstemp + *Report Form fisa_magazie_fifo_val To Printer Prompt Preview + goExport.export2frx([crstemp],[fisa_magazie_fifo_val],.F., , , , , .T.) + Else + amessagebox("Nu exista inregistrari pentru perioada selectata!",0+48,"Atentie") + Endif +Endif + +If Used('crstemp') + Use In crstemp +Endif +ENDPROC + +***----------------------------------------------------------------------------------------------------------- +PROCEDURE rap_stocuri_pe_vechimi +PRIVATE pcCont,pcGestiune,pnid_gestiune,ofrmopt,pnOptiune,pnButon, pdDataReferinta +STORE '' TO pcCont,pcGestiune +STORE 0 TO pnid_gestiune +pdDataReferinta = DATE() +LOCAL lcFiltruInitial,lcTitlu,lcIntrebare,lnNrOptiuni,lcSql + +pofrmaleg = CREATEOBJECT('frm_cerere_cont_gestiune') +pofrmaleg.show(1) +IF gnButon = 2 + RETURN +ENDIF +*!* modificare ROAGEST v 2.0.103 + *!* pcTitlu = ceretitlu_rap([Titlul raportului],[RAPORT STOCURI PE VECHIMI LA ]+Dtoc(Date())) +*!* modificare ROAGEST v 2.0.103 ^ + +lcFiltruInitial = [a.an=]+ Alltrim(Str(gnAn))+[ and a.luna=]+ Alltrim(Str(gnLuna))+[ ]+; + Strtran(gcCondSucursala,[id_sucursala],[a.id_sucursala]) + +IF !EMPTY(pcCont) AND !ISNULL(pcCont) + lcFiltruInitial = lcFiltruInitial + [ and a.cont = ']+ALLTRIM(pcCont)+['] +ENDIF + +IF !EMPTY(pnid_gestiune) AND !ISNULL(pnid_gestiune) + lcFiltruInitial = lcFiltruInitial + [ and id_gestiune = ]+ALLTRIM(STR(pnid_gestiune)) +ENDIF + +lcSql = [select a.ID_ARTICOL,a.DATAIN,a.DENUMIRE,a.NUME_GESTIUNE,a.CONT,a.pret,a.CANTS+a.cant-a.cante as stoc,a.codmat,a.datain,]+; + [ NVL(trunc(last_day(to_date('] + DTOS(m.pdDataReferinta) + [','YYYYMMDD')))-trunc(a.DATAIN),400) as vechime ]+; + [ from vstoc a where ]+lcFiltruInitial +[ order by a.NUME_GESTIUNE,a.CONT,a.denumire] +lnSucces = goExecutor.oExecute(lcSql,[crsvechimestoc]) +If lnSucces < 0 + amessagebox(goExecutor.cEroare,16,"Eroare") +Else + If Reccount('crsvechimestoc')>0 + pnOptiune=1 + pnButon=1 + lcTitlu="STOCURI PE VECHIMI" + lcIntrebare=" Alegeti modul de vizualizare a datelor :" + lnNrOptiuni=2 + ofrmopt=Createobject("frm_optiune",lcTitlu,lcIntrebare,lnNrOptiuni) + ofrmopt.ogOptiuni.option1.Caption="Listare" + ofrmopt.ogOptiuni.option2.Caption="Export in Excel" + ofrmopt.Show(1) + +*!* modificare ROAGEST v 2.0.103 + IF pnButon=2 + RETURN + ENDIF +*!* pcDataOra = get_ora(2) +*!* Select crsvechimestoc + IF pnOptiune=1 + PRIVATE pcTitlu +*!* pcTitlu = ceretitlu_rap([Titlul raportului],[RAPORT STOCURI PE VECHIMI LA ]+Dtoc(Date())) +*!* Keyboard '{CTRL+F10}' +*!* Report Form rap_vechime_stocuri To Printer Prompt Preview + pcTitlu = [RAPORT STOCURI PE VECHIMI LA ]+DTOC(m.pdDataReferinta) + goExport.export2frx([crsvechimestoc],[rap_vechime_stocuri],.T.) + ELSE + SELECT nume_gestiune,cont,denumire,codmat,TTOD(datain) as datain,ROUND(pret,gnPPRET) as pret,ROUND(iif(vechime<31,stoc,0),gnPCANT) as cant_1_30,ROUND(iif(vechime<31,stoc,0)*pret,gnPA) as val_1_30,ROUND(iif(vechime>=31 and vechime<61,stoc,0),gnPCANT) as cant_31_60, ; + ROUND(iif(vechime>=31 and vechime<61,stoc,0)*pret,gnPA) as val_31_60,ROUND(iif(vechime>=61 and vechime<91,stoc,0),gnPCANT) as cant_61_90,ROUND(iif(vechime>=61 and vechime<91,stoc,0)*pret,gnPA) as val_61_90, ; + ROUND(iif(vechime>=91 and vechime<365,stoc,0),gnPCANT) as cant_91_1an,ROUND(iif(vechime>=91 and vechime<365,stoc,0),gnPA) as val_91_1an,ROUND(iif(vechime>=365,stoc,0),gnPCANT) as cant_Peste_1an, ; + ROUND(iif(vechime>=365,stoc,0)*pret,gnPA) as val_Peste_1an from crsvechimestoc ORDER BY nume_gestiune, cont, denumire into cursor crsvechimestocxls + goExport.export2xls([crsvechimestocxls]) + ENDIF + Else + amessagebox("Nu exista inregistrari pentru perioada selectata!",0+48,"Atentie") + ENDIF + +ENDIF +IF USED('crsvechimestoc') +USE IN crsvechimestoc +ENDIF +IF USED('crsvechimestocxls') +USE IN crsvechimestocxls +ENDIF +RELEASE pofrmaleg,ofrmopt +*!* modificare ROAGEST v 2.0.103 ^ + +ENDPROC + +***----------------------------------------------------------------------------------------------------------- diff --git a/COMUN/programe/orapoarte_dinamice.prg b/COMUN/programe/orapoarte_dinamice.prg new file mode 100644 index 0000000..ddca243 --- /dev/null +++ b/COMUN/programe/orapoarte_dinamice.prg @@ -0,0 +1,251 @@ +*!* 04.03.2011 +*!* marius.mutu +*!* alege_raport - arat doar rapoartele pe care are drepturi utilizatorul curent + +Procedure alege_raport + Lparameters tnIdFormularRaport, tlDrepturi + + Private pnIdRaport + Local lcSql, lnSucces, loFrmAlegeRaport,loFrmRaport,lcForm + + pnIdRaport = 0 + + + lcForm = [frm_date_rapoarte_rulaje] + Do Case + Case tnIdFormularRaport = 1 && rapoarte bazate pe rulaje + lcForm = [frm_date_rapoarte_rulaje] + Case tnIdFormularRaport = 2 && rapoarte dinamice sql + lcForm = [frm_date_rapoarte_sql] + Case tnIdFormularRaport = 3 && rapoarte bazate pe balanta de parteneri + lcForm = [frm_date_rapoarte_balpart] + Otherwise + amessagebox("Nu exista configurari pentru acest tip de raport!",16,_screen.Caption) + Return + Endcase + + If Used('crsrapoarte') + Use In crsrapoarte + Endif + + IF tlDrepturi + lcSql = [select r.id_raport,Substr(denumire,1,254) as denumire,titlu from vrapoarte r join rapoarte_utilizatori ru on r.id_raport = ru.id_raport ] + ; + [where r.id_formular_raport = ] + Alltrim(Str(m.tnIdFormularRaport)) + [ and ru.id_utilizator = ] + ALLTRIM(STR(m.gnIdUtil)) + [ order by denumire] + ELSE + lcSql = [select r.id_raport,Substr(denumire,1,254) as denumire,titlu from vrapoarte r ] + ; + [where r.id_formular_raport = ] + Alltrim(Str(tnIdFormularRaport)) + [ order by denumire] + ENDIF + lnSucces = goExecutor.oExecute(lcSql,[crsrapoarte]) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,16,"Eroare") + Return + ELSE + lcMenu = [Raport nou;\-] + SELECT crsRapoarte + SCAN + lcMenu = lcMenu + [;] + ALLTRIM(denumire) + ENDSCAN + lnMenu = xmenu(lcMenu) +*!* If Reccount('crsrapoarte') > 0 +*!* loFrmAlegeRaport = Createobject('frm_optiuni_rapoarte') +*!* loFrmAlegeRaport.Show(1) +*!* Else +*!* gnButon = 1 +*!* Endif + pnIdRaport = 0 + IF lnMenu > 0 + IF lnMenu = 1 && raport nou + pnIdRaport = 0 + ELSE + SELECT crsRapoarte + IF RECCOUNT()>= lnMenu-2 + GOTO lnMenu - 2 + pnIdRaport = id_raport + ENDIF + ENDIF + + + loFrmRaport = Createobject(lcForm, m.pnIdRaport, m.tlDrepturi) + loFrmRaport.Show(1) + + ENDIF && lnMenu > 0 + If Used('crsrapoarte') + Use In crsrapoarte + Endif + ENDIF && lnSucces < 0 + + + + Release loFrmAlegeRaport,loFrmRaport +Endproc + +*=========================================================== +* lanseaza formularul de editare raport cu un raport incarcat (fara sa aleg raportul) +* folosesc daca stiu ID-ul raportului (ex. rapoarte sql predefinite) +*=========================================================== +PROCEDURE executa_raport + LPARAMETERS tnIdFormularRaport, tnIdRaport + + llDrepturi = .T. + lcForm = [] + Do Case + Case tnIdFormularRaport = 1 && rapoarte bazate pe rulaje + lcForm = [frm_date_rapoarte_rulaje] + Case tnIdFormularRaport = 2 && rapoarte dinamice sql + lcForm = [frm_date_rapoarte_sql] + Case tnIdFormularRaport = 3 && rapoarte bazate pe balanta de parteneri + lcForm = [frm_date_rapoarte_balpart] + ENDCASE + IF EMPTY(m.lcForm) + amessagebox("Nu exista configurari pentru acest tip de raport!",16,_screen.Caption) + Return + ENDIF + + loFrmRaport = Createobject(m.lcForm, m.tnIdRaport, m.llDrepturi) + loFrmRaport.Show(1) +ENDPROC + +*=========================================================== +* creez cursorul cu parametri din tcSql, il completez cu definitiile salvate in rapoarte.csql_parametri +* salvez definitia parametrilor (titlu, tip ...) in rapoarte +* salvez filtrul cu parametri in rapoarte_filtre (titlu,camp,semn,valoare) +*=========================================================== +Procedure parametri_rapoarte_sql + Parameters tcSql, tnIdRaport + + Private pcParametriXML, pcFiltru + + Local lcParametriXML, lnSucces, lcText, lcValue, lnAtPos1, lnAtPos2, lcSelect + Local lcParametri, lcParametru, loFrmAlegeRaport, lcTitlu, lcCamp, lcTipCamp + Local lcPozitieSemn, lcValoare + + pcParametriXML = "" + pcFiltru = "" + + lcSelect = Select() + lcText = tcSql + lcParametri = "" + + + lnSucces = goExecutor.oSelect2Value([select csql_parametri from rapoarte where id_raport = ?tnIdRaport], @lcParametriXML) + + If lnSucces < 0 + amessagebox(goExecutor.cEroare,16,"Eroare") + Return + Endif + + Create Cursor crsParametriTemp(parametru C(250)) + + Create Cursor crsParametriXML(parametru C(250), titlu C(100), CAMP M, TIPCAMP C(10), CAMPID C(100), CAMPCAUTARE C(100)) + If !Empty(Nvl(m.lcParametriXML,'')) + Xmltocursor(m.lcParametriXML, "crsParametriXMLTemp") + Select crsParametriXML + Append From Dbf("crsParametriXMLTemp") + Use In (Select("crsParametriXMLTemp")) + Endif + + *** Lista de parametri din sql dupa separatori <%=...%> + *** ex: select * from act where an = <%=tnAn%> and luna = <%=tnLuna%> + + Do While Atcc('<%=', lcText) > 0 + * Get the start and end position of the next expression + lnAtPos1 = Atcc('<%=', lcText) + lnAtPos2 = Atcc('%>', lcText) + + * Extract the next expression + lcParametru = Substr(m.lcText, lnAtPos1 + 3, lnAtPos2 - lnAtPos1 - 3) + * Remove any cariage returns from the expression as they could be inserted by an HTML editor + lcParametru = Upper(Alltrim(Chrtran(m.lcParametru, Chr(13) + Chr(10), ''))) + * Adaug o singura aparitie a unui parametru (sa nu ii cer de mai multe ori data curenta, daca in sql este nevoie de ea de mai multe ori) + SELECT crsParametriTemp + LOCATE FOR parametru = lcParametru + IF !FOUND() + Insert Into crsParametriTemp (parametru) Values (m.lcParametru) + ENDIF + * Evaluate it + *!* lcValue = TRANSFORM(EVALUATE(lcEval)) + lcValue = 'x' + * Stuff the result back instead of the original expression + lcText = Stuffc(lcText, lnAtPos1, lnAtPos2 - lnAtPos1 + 2, lcValue) + Enddo + *** + + *!* completare parametri cu definitia salvata in baza de date + Select p.parametru, x.titlu, p.parametru as CAMP, x.TIPCAMP, x.CAMPID, x.CAMPCAUTARE ; + FROM crsParametriTemp p Left Join crsParametriXML x On p.parametru = x.parametru ; + INTO Cursor crsParametri Readwrite + Use In (Select('crsParametriTemp')) + Use In (Select('crsParametriXML')) + Select crsParametri + + loFrmAlegeRaport = Createobject('frm_optiuni_rapoarte_sql') + loFrmAlegeRaport.Show(1) + + If gnButon = 1 + Cursortoxml("crsParametri", "pcParametriXML",1,0+2,0,"") + lnSucces = goExecutor.oExecute("update rapoarte set csql_parametri = ?pcParametriXML where id_raport = ?tnIdRaport") + + If lnSucces < 0 + amessagebox(goExecutor.cEroare,16,"Eroare") + ELSE + *** salvez filtrul in rapoarte_filtre + pcFiltru = "" + Select crsParametri + Scan + lcTitlu = Alltrim(titlu) + lcCamp = Alltrim(parametru) + lcTipCamp = Upper(Alltrim(TIPCAMP)) + lcCamp = Iif(lcTipCamp = 'D1', 'AN*12+LUNA', lcCamp) + lcPozitieSemn = Iif(lcTipCamp = 'N', '1', Iif(lcTipCamp = 'C', '2', Iif(lcTipCamp = 'D', '1', Iif(lcTipCamp = 'D1', '1', '1')))) + lcValoare = Iif(lcTipCamp = 'N', '0', Iif(lcTipCamp = 'C', '', Iif(lcTipCamp = 'D', '{//}', Iif(lcTipCamp = 'D1', Padl(Alltrim(Str(gnLuna)),2,[0]) + [/] + Alltrim(Str(gnAn)), '0')))) + + pcFiltru = pcFiltru + lcTitlu + [;] + lcCamp + [;] + lcPozitieSemn + [;;] + lcValoare + [|] + *!* IESIRI;CANTE;2;;0.000|SI|TIP RULAJ;NONE;0;0;INTRARE/IESIRE REALA|SI|PERIOADA;AN*12+LUNA;1;;LUNA_CURENTA| + lnSucces = goExecutor.oExecute("begin pack_rapoarte.salveaza_filtru(?tnIdRaport, ?pcFiltru); end;") + + If lnSucces < 0 + amessagebox(goExecutor.cEroare,16,"Eroare") + ENDIF + Endscan + + + Endif + Endif + + + Use In (Select('crsParametri')) + Select (lcSelect) + RETURN gnButon + +Endproc + + +*=========================================================== +* creeaza cursorul crsParametriXML cu criteriile de selectie (an, luna etc.) +*=========================================================== +Procedure criterii_rapoarte_sql + Parameters tnIdRaport + + Local lcParametriXML, lnSucces, lcSelect + + + lcSelect = Select() + + + Create Cursor crsParametriXML(parametru C(250), titlu C(100), CAMP M, TIPCAMP C(10), CAMPID C(100), CAMPCAUTARE C(100) ) + + lnSucces = goExecutor.oSelect2Value([select csql_parametri from rapoarte where id_raport = ?tnIdRaport], @lcParametriXML) + + If lnSucces < 0 + amessagebox(goExecutor.cEroare,16,"Eroare") + Else + If !Empty(Nvl(m.lcParametriXML,'')) + Xmltocursor(m.lcParametriXML, "crsParametriXMLTemp") + Select crsParametriXML + Append From Dbf("crsParametriXMLTemp") + Use In (Select("crsParametriXMLTemp")) + Endif + Endif + + Select (lcSelect) +Endproc && criterii_rapoarte_sql diff --git a/COMUN/programe/oredeschid.prg b/COMUN/programe/oredeschid.prg new file mode 100644 index 0000000..182d256 --- /dev/null +++ b/COMUN/programe/oredeschid.prg @@ -0,0 +1,300 @@ +*!* 12.01.2011 +*!* marius.mutu +*!* deschidluna + parametru: tlProgramat +*!* deschiderea / redeschiderea de luna se face automat de catre un job in baza de date noaptea + +******************************************* +* PROCEDURE deschiluna( ) +* Data/ora : 11/15/04, 17:13:14 +* autor : liana.macinic +* descriere: + +****** PARAMETER BLOCK ************** +* Parametri : 1 +* parametru: tdeschid = este .t. daca procedura se foloseste pentru deschidere de luna +* este .f. daca procedura se foloseste pentru redeschidere de luna +* parametru: tcTipRefacere: refacere_completa, refacere_precedente_rulaje +* refacere_completa - stergere si refacere +* parametru: tlProgramat: deschiderea / redeschiderea de luna se face automat de catre un job in baza de date noaptea +******************************************* +Procedure deschidluna + Lparameters tlDeschid,tcTipRefacere, tlProgramat + Local lcExplicatie,lcConfirmare,lcMesaj,loFrm + If tlDeschid + lcAn = Alltrim(Str(Year(Gomonth(Date(gnAn,gnLuna,1),1)))) + lcLuna = Alltrim(Str(Month(Gomonth(Date(gnAn,gnLuna,1),1)))) + lcExplicatie = [Deschidere de lun] + lcConfirmare = [Doriti s deschideti luna ] + lcLuna + [ / ] + lcAn + [ ?] + lcMesaj = [S-a deschis luna ] + lcLuna + [ / ] + lcAn + [ !] + Else + lcAn = Alltrim(Str(gnAn)) + lcLuna = Alltrim(Str(gnLuna)) + lcExplicatie = [Redeschidere de luna] + lcConfirmare = [Doriti s redeschideti luna ] + lcLuna + [ / ] + lcAn + [ ?] + lcMesaj = [S-a redeschis luna ] + lcLuna + [ / ] + lcAn + [ !] + + IF m.glLunaInchisa + AMESSAGEBOX('Luna este inchisa! Nu se poate face redeschiderea de luna!',0+64,_screen.Caption) + RETURN + ENDIF + ENDIF + +*!* modificare v 2.4.0 + private pnTvaIncasare, pnImpozitProfit + pnTvaIncasare = goCalendar.tva_incasare + pnImpozitProfit = goCalendar.impozit_profit + + loFrm = createobject("frm_deschidere_luna_cont",lcExplicatie,lcConfirmare,tlDeschid) + loFrm.Show() + if gnButon = 1 +*!* If AMESSAGEBOX(lcConfirmare,4+32,lcExplicatie)=6 +*!* modificare v 2.4.0 ^ + _Screen.MousePointer = 11 + *!* modificare v 2.4.0 : am adaugat pnTvaIncasare + lcSql = [begin deschidere_luna(] + lcAn + [,] + lcLuna + [,] + Iif(tlDeschid,[1],[0]) + [,] + ; + IIF(EMPTY(tcTipRefacere),[1],IIF(UPPER(ALLTRIM(tcTipRefacere)) = [REFACERE_COMPLETA],[3],[1])) + [,?pnTvaIncasare,?gnIdUtil); end;] + lnSucces = goExecutor.oExecute(lcSql) + _Screen.MousePointer = 0 + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare,64,"Eroare") + Else + AMESSAGEBOX(lcMesaj,48,lcExplicatie) + If tlDeschid + lnSucces = update_calendar() + If lnSucces < 0 + AMESSAGEBOX('Eroare la actualizarea calendarului!' + CHR(13)+CHR(10) + goExecutor.cEroare, 16, "Eroare") + Return + Endif + + Select calendar + Locate For luna = VAL(lcLuna) And anul = VAL(lcAn) + If Found() + Scatter Name goCalendar + Else + AMESSAGEBOX('Eroare la citirea lunii in calendar!' + CHR(13)+CHR(10) + goExecutor.cEroare, 16, "Eroare") + Return + Endif + Do OINIT_OPTIUNI.prg + Endif + Endif + Endif + Release pnTvaIncasare && modificare v 2.4.0 +Endproc +******************************************* +*!* PROCEDURE deschidluna +*!* PARAMETERS tldeschid, tcTipRefacere +*!* +*!* LOCAL lnDuplicatTva +*!* lnDuplicatTva = 0 + +*!* PRIVATE plDeschid, pnDeschid +*!* IF !tlDeschid AND glLunaInchisa +*!* MESSAGEBOX('Luna este blocata! Nu se poate redeschide luna.', 0+64, _screen.Caption) +*!* RETURN +*!* ENDIF +*!* IF EMPTY(tldeschid) +*!* STORE .F. TO plDeschid +*!* pnDeschid = 0 +*!* ELSE +*!* plDeschid = tldeschid +*!* pnDeschid = 1 +*!* ENDIF + +*!* IF EMPTY(tcTipRefacere) OR TYPE('tcTipRefacere') <> 'C' +*!* tcTipRefacere = "REFACERE_PRECEDENTE_RULAJE" +*!* ELSE +*!* tcTipRefacere = UPPER(tcTipRefacere) +*!* ENDIF +*!* +*!* IF plDeschid +*!* ldData1 = GOMONTH(DATE(gnAn,gnLuna,1),1) +*!* lnAn = YEAR(ldData1) +*!* lnLuna = MONTH(ldData1) +*!* lcAn = ALLTRIM(STR(lnAn)) +*!* lcLuna = PADL(ALLTRIM(STR(lnLuna)),2,'0') + +*!* lnValoare = 12*lnAn + lnLuna +*!* lcSelect = [select COUNT(*) as duplicat from ] + gcS + [.CALENDAR where 12*anul + luna = ?lnValoare] +*!* lnSucces = goExecutor.oExecute(lcSelect,[crsTest]) +*!* IF lnSucces < 0 +*!* AMESSAGEBOX(goExecutor.cEroare) +*!* RETURN +*!* ENDIF + +*!* SELECT crsTest +*!* IF duplicat > 0 +*!* AMESSAGEBOX('Luna ' + lcLuna + ' / ' + lcAn + ' este deja deschisa! ') +*!* RETURN +*!* ENDIF +*!* USE IN crsTest + + + +*!* lnPlafonCasa = goCalendar.plafon_casa +*!* lnPlafonPlati = goCalendar.plafon_plati +*!* lnPlafonFurniz = goCalendar.plafon_furnizori +*!* IF AMESSAGEBOX('Doriti sa deschideti luna ' + lcLuna + ' / ' + lcAn + '?',4+32,"Deschidere de luna")!=6 +*!* RETURN +*!* ENDIF + +*!* *!* 10.07.2006 +*!* *!* FLORIN CIOCAN +*!* lcSelect = [select COUNT(*) as duplicatTVA from COTE_TVA ] + ; +*!* [ where an = ] + TRANSFORM(lnAn) + [ AND luna = ] + TRANSFORM(lnLuna) + [ AND sters = 0] +*!* lnSucces = goExecutor.oExecute(lcSelect,[crsTest]) +*!* IF lnSucces < 0 +*!* AMESSAGEBOX(goExecutor.cEroare) +*!* RETURN +*!* ENDIF + +*!* SELECT crsTest +*!* lnDuplicatTva = duplicatTva +*!* USE IN crsTest + +*!* IF lnDuplicatTva = 0 +*!* lcSql = [insert into cote_tva (proc_tva, descriere, procent, an, luna) ] + ; +*!* [ SELECT proc_tva, descriere, procent, ] + TRANSFORM(lnAn) + [,] + TRANSFORM(lnLuna) + [ from cote_tva where an = ?gnAn and luna = ?gnLuna and sters = 0 ] + +*!* lnSucces = goExecutor.oExecute(lcSql) +*!* IF lnSucces < 0 +*!* AMESSAGEBOX(goExecutor.cEroare) +*!* RETURN +*!* ENDIF +*!* ENDIF + +*!* lcInsert = [INSERT INTO ] + gcS + [.CALENDAR (NL,AN,CTVAI,CTVAM,PLAFON_casa,plafon_plati,plafon_furnizori,anul,luna) ] + ; +*!* [VALUES (?lcLuna ,?lcAn,] + ALLTRIM(STR(NVL(goCalendar.ctvai,0),5,3)) + [,] + ALLTRIM(STR(NVL(goCalendar.ctvam,0),5,3)) + [,?lnPlafonCasa,?lnPlafonPlati,?lnPlafonFurniz,?lnAn,?lnLuna)] + +*!* lnSucces = goExecutor.oExecute(lcInsert) +*!* IF lnSucces < 0 +*!* AMESSAGEBOX(goExecutor.cEroare) +*!* RETURN +*!* ENDIF + +*!* lnSucces = update_calendar() +*!* IF lnSucces < 0 +*!* AMESSAGEBOX('Eroare la actualizarea Calendarului ' + goExecutor.cEroare) +*!* RETURN +*!* ENDIF + +*!* SELECT calendar +*!* LOCATE FOR luna = lnLuna AND anul = lnAn +*!* IF FOUND() +*!* SCATTER NAME goCalendar +*!* ELSE +*!* AMESSAGEBOX('Eroare la citirea lunii in Calendar ' + goExecutor.cEroare) +*!* RETURN +*!* ENDIF + +*!* *!* 11.05.2007 +*!* *!* PAULA MUTU +*!* *** +*!* IF gnLuna = 12 +*!* lcSql = [insert into plcont (acont, explicatie, cont, tip_sold, an, tip_cont, id_mod, inactiv, nefolosit, explicatieS) ] + ; +*!* [ SELECT acont, explicatie, cont, tip_sold, ] +ALLTRIM(STR(gnAn+1)) + [ as an, tip_cont, id_mod, inactiv, nefolosit, explicatieS ]+; +*!* [ from plcont where an = ?gnAn ] + +*!* lnSucces = goExecutor.oExecute(lcSql) +*!* IF lnSucces < 0 +*!* AMESSAGEBOX(goExecutor.cEroare) +*!* RETURN +*!* ENDIF +*!* ENDIF +*!* *** + +*!* DO OINIT_OPTIUNI.prg +*!* * DO update_nomenclator IN updateserver.prg +*!* ELSE +*!* IF AMESSAGEBOX('Doriti sa redeschideti luna ' + ALLTRIM(STR(gnLuna)) + ' / ' + ALLTRIM(STR(gnAn)) + '?',4+32,"Redeschidere de luna")!=6 +*!* RETURN +*!* ENDIF +*!* ENDIF + +*!* *DO verificareGlobala WITH .F.,.T. IN overificari.prg +*!* lnLuna = goCalendar.luna +*!* lnAn = goCalendar.anul + +*!* DO VerificareLunaDeschisa WITH lnLuna, lnAn, .T., .T., .T. IN overificari.prg +*!* IF USED('crsverificari') +*!* lnNrInreg = 1 +*!* lnInreg = 1 +*!* lnNrInreg=lnNrInreg+RECCOUNT('crsconturi') +*!* loTherm = NEWOBJECT("_thermometer","_therm","","Generare situatie luna contabila "+ALLTRIM(STR(lnLuna))+"/"+ALLTRIM(STR(lnAn))+"...") +*!* WITH loTherm +*!* .SHOW() +*!* lnPercent = 0 + +*!* lcexplicatia="Generare situatie" +*!* .UPDATE(lnPercent,lcexplicatia) + +*!* SELECT crsverificari +*!* SCAN +*!* lcsursa = UPPER(ALLTRIM(sursa)) +*!* lccont = ALLTRIM(CONT) +*!* lctip = IIF(UPPER(tcTipRefacere) = 'REFACERE_COMPLETA', '3', '1') +*!* lcexplicatia = explicatia +*!* lnPercent =(lnInreg*100)/lnNrInreg + +*!* .UPDATE(lnPercent,'Generare '+lcexplicatia) + +*!* DO refacere WITH lcsursa,lctip,lccont IN orefaceri.prg +*!* lnInreg=lnInreg+1 +*!* SELECT crsverificari +*!* ENDSCAN +*!* .COMPLETE() +*!* ENDWITH +*!* RELEASE loTherm + +*!* IF plDeschid +*!* AMESSAGEBOX('S-a deschis luna '+ ALLTRIM(STR(gnLuna)) + ' / ' + ALLTRIM(STR(gnAn)) + '!',48,"Deschidere de luna") +*!* ELSE +*!* AMESSAGEBOX('S-a redeschis luna '+ ALLTRIM(STR(gnLuna)) + ' / ' + ALLTRIM(STR(gnAn))+ '!',48,"Redeschidere de luna") +*!* ENDIF +*!* +*!* lcSelect = [insert into log_redeschid (anul, luna, id_program, deschid, id_util) values (?gnAn, ?gnLuna, ?gnIdProgram, ?pnDeschid, ?gnIdUtil)] +*!* lnSucces = goExecutor.oExecute(lcSelect) +*!* IF lnSucces < 0 +*!* AMESSAGEBOX(goExecutor.cEroare) +*!* ENDIF +*!* +*!* ELSE +*!* AMESSAGEBOX('Nu s-au refacut situatiile! Verificati in meniul Actualizari / Verificare globala!',48, IIF(plDeschid,"Deschidere de luna","Redeschidere de luna")) +*!* ENDIF +*!* IF USED('crsverificari') +*!* USE IN crsverificari +*!* ENDIF + + +*!* ENDPROC && deschiluna + +*********************** SFARSIT procedura deschiluna ************************* + + +*********************** INCEPUT redeschidere_de_luna ************************* + + +*********************** SFARSIT redeschidere_de_luna ************************* + + +*********************** INCEPUT programare_deschidere_luna ************************* +PROCEDURE programare_deschidere_luna + PRIVATE poProgramare + LOCAL m.lcSelect, m.lcFiltru, m.lcSchema, m.lcOrder, m.llAfisare + + poProgramare = null + lcSchema=[] + lcSelect=[select id_redeschid, anul, luna, id_program, program, id_util, utilizator, dataora, deschid, programat, dataora_start, dataora_stop, id_utils, utilizators, dataoras, sters, SUBSTR(observatii,1,250) as observatii from vlog_redeschid] + lcFiltru=[STERS = 0 AND LUNA = ]+ALLTRIM(STR(m.gnluna))+[ AND ANUL = ]+ALLTRIM(STR(m.gnan)) + lcOrder=[anul desc, luna desc, dataora desc] + llAfisare=.F. + lcGroup = [] + llModParam = .T. + lcFiltruOriginal = "" + gencursor('poProgramare','cLogRedeschid', m.lcSelect, m.lcFiltru, m.lcSchema, m.lcOrder, m.llAfisare, m.lcgroup, m.llModParam, m.lcFiltruOriginal) + + poProgramare.ca_baza1.afisare() + + loProgramareForm = NEWOBJECT("frm_log_deschidereluna","odeschidereluna.vcx") + loProgramareForm.show(1) +ENDPROC && programare_deschidere_luna +*********************** SFARSIT programare_deschidere_luna ************************* \ No newline at end of file diff --git a/COMUN/programe/orefaceri.prg b/COMUN/programe/orefaceri.prg new file mode 100644 index 0000000..b23e308 --- /dev/null +++ b/COMUN/programe/orefaceri.prg @@ -0,0 +1,112 @@ +Procedure refacere + Lparameters tcSursa,tcLunar,tcCont,tnLuna,tnAn + *!* 11.02.2008 + *!* TREBUIE SA FIE SETAT pack_contafin.SET_ID_SUCURSALA INAINTE DE REFACERE/SCRIERE + + LOCAL lcExecute, lcSql + + Private lcLunar,lcCont,lnSucces,lnLuna,lnAn + lnSucces = -1 + If Empty(tnLuna) + lnLuna=gnLuna + Else + lnLuna=tnLuna + Endif + + If Empty(tnAn) + lnAn=gnAn + Else + lnAn=tnAn + Endif + + lcProc = "REFAC_" + Upper(Alltrim(tcSursa)) + lcLunar=Alltrim(tcLunar) + If Empty(tcCont) + lcCont = "" + Else + lcCont = Alltrim(tcCont) + Endif + + Do Case + Case lcProc == 'REFAC_BALANTA' + lcSql = [begin PACK_REFACERI.] + lcProc + [('] + gcS +[',] + Alltrim(Str(lnAn)) + [,] +; + ALLTRIM(Str(lnLuna)) + [,] + lcLunar + [); end;] + + Case lcProc == 'REFAC_BALANTA_PARTENERI' + lcSql = [begin PACK_REFACERI.] + lcProc + [('] + gcS +[',] + Alltrim(Str(lnAn)) + [,] +; + ALLTRIM(Str(lnLuna)) + [,'] + lcCont + [',] + lcLunar + [); end;] + + Case lcProc == 'REFAC_IREG_PARTENERI' + + lcSql = [begin PACK_REFACERI.] + lcProc + [('] + gcS +[',] + Alltrim(Str(lnAn)) + [,] +; + ALLTRIM(Str(lnLuna)) + [,'] + lcCont + [',] + lcLunar + [,0); end;] + + Case lcProc == 'REFAC_TVA_2007' + lcSql = [begin ] + gcS + [.PACK_REFACERI.] + lcProc + [('] + lcCont + [',] + Alltrim(Str(lnAn)) + [,] + ; + ALLTRIM(Str(lnLuna)) + [); end;] + + Case lcProc == 'REFAC_TVA' + Select infisiere + If lcCont = '4426' + Locate For Cont = '4426' + lcCorespD = Alltrim(coresp_d) + lcCorespC = Alltrim(coresp_c) + lcCorespDtva = Alltrim(coresp_d) + [,4428] + lcCorespCtva = Alltrim(coresp_c) + *lcExceptii = [767] + lcExceptii = [-1] + lcTabel = [cump] + lcSql = [select distinct cont_c as exceptie from ] + gcS + [.exceptii_ireg where cont in (] + lcCorespD + [) and invers = 1] + Endif + If lcCont = '4427' + Select infisiere + Locate For Cont = '4427' + lcCorespD = Alltrim(coresp_d) + lcCorespC = Alltrim(coresp_c) + [,5121,5311] + lcCorespDtva = Alltrim(coresp_d) + lcCorespCtva = Alltrim(coresp_c) + [,4428] + lcExceptii = [419] + lcTabel = [vanz] + lcSql = [select distinct cont_c as exceptie from ] + gcS + [.exceptii_ireg where cont in (] + lcCorespC + [) and invers = 1] + Endif + + lnSucces = goExecutor.oExecute(lcSql,'cont_exceptii') + If lnSucces > 0 + Select cont_exceptii + Scan + lcExceptii = lcExceptii + ',' + Alltrim(exceptie) + Endscan + Use In cont_exceptii + Else + amessagebox(lcProc + CRLF + goExecutor.cEroare,0+16,"Eroare") + Endif + + lcListaCampuri = get_lista_Act() + lcSql = [begin pack_REFACERI.REFAC_TVA('] + gcS +[',?lcTabel, pack_contafin.getCotaTVAStandard(?gnLuna,?gnAn), 1.09, '] + lcCorespDtva +[', '] + lcCorespD +[', '] + lcCorespCtva +[', '] + lcCorespC +[',] + lcCont + [, '] + lcExceptii +[',?lnAn, ?lnLuna,1,'] + lcListaCampuri + [' ); end;] + + Case lcProc == 'REFAC_STOC' + lcSql = [begin pack_refaceri.refac_stoc(?gcS,?lnAn,?lnLuna,] + lcLunar + [); end;] + + Case lcProc == 'REFAC_STOC_OBINV' + lcSql = [begin pack_refaceri.refac_stoc_obinv(?gcS,?lnAn,?lnLuna,] + lcLunar + [); end;] + + Otherwise + lcSql = [] + Endcase + + If !Empty(lcSql) + *!* 11.02.2008 + lcExecute = [begin pack_contafin.SET_ID_SUCURSALA(?gnIdSucursala); end;] + lnSucces = goExecutor.oExecute(lcExecute) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,"Eroare") + ELSE + lnSucces = goExecutor.oExecute(lcSql) + If lnSucces < 0 + amessagebox(lcProc + CRLF + goExecutor.cEroare,0+16,"Eroare") + ENDIF + ENDIF + *!* 11.02.2008 ^ + Endif + Return lnSucces +Endproc diff --git a/COMUN/programe/osalarii_comun.prg b/COMUN/programe/osalarii_comun.prg new file mode 100644 index 0000000..1163d12 --- /dev/null +++ b/COMUN/programe/osalarii_comun.prg @@ -0,0 +1,2395 @@ + +FUNCTION zile_supl(tnIdMes) + LOCAL lnzilesupl,lnIdMes + lnzilesupl = 0 + lcIdMes = ALLTRIM(STR(tnIdMes)) + + lcSQl = [select s.zilesupl_co from ] + gcs + [.sal_vnom_mes s where s.id_meseria =] + lcIdMes + lcCursor = 'v_mes' + lnSucces = goExecutor.oExecute(lcSQl,lcCursor) + + IF lnSucces < 0 + MESSAGEBOX(goExecutor.cEroare,0+16,"Eroare") + RETURN lnzilecuv + ENDIF + SELECT v_mes + lnzilesupl = v_mes.zilesupl_co + + RETURN lnzilesupl + + + **************************************************************************************************** + + +PROCEDURE viz_pers + LOCAL llEroare + llEroare = .F. + PRIVATE poper,pcschema1,pcselect1,pcfiltru1,pcorder1 &&personal + STORE '' TO poper,pcschema1,pcselect1,pcfiltru1,pcorder1 + + pcschema1 =['nr n(10),id_salariat n(10),nume c(50),prenume c(50),marca n(10),codpers c(30),judet c(32),localitate c(32),sector n(2),'+] + ; + ['strada c(64),numar c(16),bloc c(16),scara c(16),etaj c(4),apart c(10),codpostal n(10),vechimei n(10),modincadr c(32),cmseria c(16),'+] + ; + ['cmnr c(16),locnastere c(32),id_nationalit n(5),cetatenie c(24),biserianr c(30),bieliberat c(32),bidata d,sitmil c(32),livretmil c(32),'+] +; + ['id_profesie n(5),specializ c(32),data_vech d,stareciv n(5),numesot c(32),numetata c(32),numemama c(32),starecivil c(16),id_stat n(10),'+] +; + ['id_meserie n(5),id_formatie n(5),profesia c(64),meseria c(64),formatia c(64),dataang d,datalic d,datasfctr d,'+]+; + ['id_tipctr n(5),tip_contract c(64),id_handicap n(10),handicap c(64),id_cas n(10),'+]+; + ['grupacas c(64),id_caseasig n(10), casaasig c(64),nrctrm n(10),datactrm d,nrctr n(10),datactr d,gradmil c(32),specmil c(32),tarifar n(16,4),'+]+; + ['SECTIE c(30),fractie n(1),orenorm n(1),plcas n(1),plsomaj n(1),pensionar n(1),plimpozit n(1),functiebaza n(1),cod c(10),'+]+; + ['id_clasasal n(5),contiban c(50),vechime n(10),id_banca n(5),banca c(64),c_vechime n(5,3),in_tura n(1),'+] + ; + ['id_judet n(10),id_loc n(10),id_part n(10),id_modlic n(2),modlic c(64),motivlic c(128),biseria c(2),binr c(8),'+]+; + ['nationalitate c(64),id_cetatenie n(3),id_tip_act n(3),tip_act c(64),id_sectie n(5),elev n(1),zilecofix n(3),somaj_tehnic n(1), datast1 d, datast2 d,stare_contract n(1),'+]+; + ['datainceputs d,datasfarsits d,dataincetares d,id_parts n(10),denumires c(250),id_taras n(10),taras c(250),codcetatenie c(50),'+] + ; + ['id_temeis n(10),explicaties c(250),id_tipautorizatie n(10),tipautorizatie c(250),datainceputautorizatie d,datasfarsitautorizatie d,id_stare_ctr n(10),'+]+; + ['id_tip_norma n(10),nume_tip_norma c(200),id_durata_munca n(10),nume_durata_munca c(200),'+]+; + ['id_repartizare_munca n(10),nume_repartizare_munca c(200),id_interval_munca n(10),nume_interval_munca c(200),id_sal_ctr n(10),id_tipapatrid n(3),apatrid c(48),codapatrid c(24),'+]+; + ['cassalmin n(1),scutireimpozit c(250),oug114 n(1),studiisup n(1), sc_general c(100),sc_prof c(100),licprofil c(100),licspec c(100),sc_maistri c(100),sc_post c(100),'+]+; + ['specializare c(100),codacc c(32),telefon c(32),codcod c(32),nrctrmchr c(64)'] + pcselect1 = ['select 0000000000,id_salariat,nume ,prenume ,marca ,codpers ,judet ,localitate ,sector,strada,numar,bloc,scara,etaj,'+] + ; + ['apart ,codpostal ,vechimei ,modincadr,cmseria ,cmnr ,locnastere ,id_nationalit ,cetatenie ,biserianr ,'+] + ; + ['bieliberat ,bidata ,sitmil ,livretmil ,id_profesie ,specializ ,data_vech ,stareciv,numesot,numetata,'+] + ; + ['numemama,starecivil,id_stat,id_meserie,id_formatie,profesia,meseria,formatia,dataang,datalic,datasfctr,'+]+; + ['id_tipctr,tip_Contract,id_handicap,handicap,id_cas,'+]+; + ['grupacas,id_caseasig,casaasig,nrctrm,datactrm,nrctr,datactr,gradmil,specmil,tarifar,sectie,fractie,orenorm,plcas,plsomaj,'+] +; + ['pensionar,plimpozit,functiebaza,cod,id_clasasal,contiban,vechime,id_banca,banca,c_vechime,in_tura,'+] +; + ['id_judet,id_loc,id_part,id_modlic,modlic,motivlic,biseria,binr,nationalitate,id_cetatenie,id_tip_act,tip_act,id_sectie,elev,zilecofix,'+]+; + ['somaj_tehnic,datast1,datast2,stare_contract,datainceputs,datasfarsits,dataincetares,id_parts,denumires,id_taras,taras,codcetatenie,id_temeis,explicaties,'+]+; + ['id_tipautorizatie,tipautorizatie,datainceputautorizatie,datasfarsitautorizatie,id_stare_ctr,'+]+; + ['id_tip_norma,nume_tip_norma,id_durata_munca,nume_durata_munca,'+]+; + ['id_repartizare_munca,nume_repartizare_munca,id_interval_munca,nume_interval_munca,id_sal_ctr,id_tipapatrid,apatrid,codapatrid,'+]+; + ['cassalmin ,scutireimpozit,oug114+1 as oug114,studiisup, sc_general,sc_prof,licprofil,licspec,sc_maistri,sc_post,specializare,codacc,telefon,codcod,nrctrmchr '+]+; + [' from ] + gcs + [.sal_vnom_pers where 1=2'] + + pcorder1=[nume,prenume] + pcfiltru1 = [1=2] + llAfiseaza = .F. + + gencursor('poper','v_personal',pcselect1,pcfiltru1,pcschema1,pcorder1,llAfiseaza) + poper.ca_baza1.afisare() + + SELECT v_personal + SCATTER NAME popers + SCATTER NAME popers_orig && modificare v 2.0.0 + ******************************************************* + *!* modificare v 2.0.8 + lcSQl = [select id_tip_norma,nume_tip_norma from syn_sal_nom_tip_norme] + lnSucces = goExecutor.oExecute(lcSQl,[crsnomtipn]) + IF lnSucces < 0 + amessagebox(goExecutor.cEroare,16,"Eroare") + llEroare = .T. + ENDIF + + lcSQl = [select id_durata_munca,nume_durata_munca,id_tip_norma from syn_sal_nom_durata_munca ] + ; + [where NVL(data_inactiv,to_date('209912','YYYYMM')) > to_date('] + ALLTRIM(STR(gnAn)) + ALLTRIM(STR(gnLuna)) + [','YYYYMM')] + lnSucces = goExecutor.oExecute(lcSQl,[crsnomduratam]) + IF lnSucces < 0 + amessagebox(goExecutor.cEroare,16,"Eroare") + llEroare = .T. + ENDIF + + lcSQl = [select id_repartizare_munca,nume_repartizare_munca from syn_sal_nom_repartizare_munca ] + ; + [where NVL(data_inactiv,to_date('209912','YYYYMM')) > to_date('] + ALLTRIM(STR(gnAn)) + ALLTRIM(STR(gnLuna)) + [','YYYYMM')] + lnSucces = goExecutor.oExecute(lcSQl,[crsnomrepartm]) + IF lnSucces < 0 + amessagebox(goExecutor.cEroare,16,"Eroare") + llEroare = .T. + ENDIF + + lcSQl = [select id_interval_munca,nume_interval_munca from syn_sal_nom_intervale_munca ] + ; + [where NVL(data_inactiv,to_date('209912','YYYYMM')) > to_date('] + ALLTRIM(STR(gnAn)) + ALLTRIM(STR(gnLuna)) + [','YYYYMM')] + lnSucces = goExecutor.oExecute(lcSQl,[crsnomintm]) + IF lnSucces < 0 + amessagebox(goExecutor.cEroare,16,"Eroare") + llEroare = .T. + ENDIF + *!* modificare v 2.0.8 ^ + ******************************************************* + + PRIVATE pointr,pcschema2,pcselect2,pcfiltru2,pcorder2 &&persoane in intretinere + STORE '' TO pointr,pcschema2,pcselect2,pcfiltru2,pcorder2 + + pcschema2 = [] + pcselect2 = ['select * from ] + gcs + [.sal_vintret where 1=2'] + pcfiltru2 = [id_persoana = ] + ALLTRIM(STR(popers.id_salariat)) + pcorder2=[nume,prenume] + llAfiseaza = .F. + + gencursor('pointr','v_nom_intret',pcselect2,pcfiltru2,pcschema2,pcorder2,llAfiseaza) + pointr.ca_baza1.afisare() + ******************************************************* + + PRIVATE pocop,pcschema3,pcselect3,pcfiltru3,pcorder3 &&copii + STORE '' TO pocop,pcschema3,pcselect3,pcfiltru3,pcorder3 + + pcschema3 = ['nume c(64),prenume c(64),codpers n(13),datanast d,id_copil n(5),id_persoana n(10)'] + pcselect3 = ['select nume,prenume,codpers,datanast,id_copil,id_persoana from ] + gcs + [.sal_vcopii where 1=2'] + pcfiltru3 = [id_persoana = ] + ALLTRIM(STR(popers.id_salariat)) + pcorder3=[nume,prenume] + llAfiseaza = .F. + + gencursor('pocop','v_copii',pcselect3,pcfiltru3,pcschema3,pcorder3,llAfiseaza) + pocop.ca_baza1.afisare() + + ******************************************************* + + PRIVATE pobazacm,pcschema4,pcselect4,pcfiltru4,pcorder4 &&baza_cm + STORE '' TO pobazacm,pcschema4,pcselet4,pcfiltru4,pcorder4 + + pcschema4 = [] + pcselect4 = ['select * from ] + gcs + [.sal_vbaze_cm where 1=2'] + pcfiltru4 = [id_stat = ] + ALLTRIM(STR(popers.id_stat)) + pcorder4 = [an*12+luna] + llAfiseaza = .f. + + gencursor('pobazacm','v_bazacm',pcselect4,pcfiltru4,pcschema4,pcorder4,llAfiseaza) + pobazacm.ca_baza1.afisare() + ******************************************************* + + PRIVATE pocalif,pcschema5,pcselect5,pcfiltru5,pcorder5 &&limbi straine + STORE '' TO pocalif,pcschema5,pcselect5,pcfiltru5,pcorder5 + pcschema5=[] + pcselect5=['select * from ] + gcs + [.sal_vnom_limbi where 1=2'] + pcfiltru5 = [id_persoana = ] + ALLTRIM(STR(popers.id_salariat)) + pcorder5 = [denumire] + llAfiseaza = .f. + + gencursor('pocalif','v_calif',pcselect5,pcfiltru5,pcschema5,pcorder5,llAfiseaza) + pocalif.ca_baza1.afisare() + ******************************************************* + + PRIVATE pocurs,pcschema6,pcselect6,pcfiltru6,pcorder6 &&cursuri calificare + STORE '' TO pocurs,pcschema6,pcselect6,pcfiltru6,pcorder6 + pcschema6 = ['id_curs n(5),data d,nota c(16),test c(64),id_persoana n(5),id_c n(5)'+] + ; + [',sters n(1), denumire c(64)'] + pcselect6 = ['select c.id_curs,c.data,c.nota,c.test,c.id_persoana,c.id_c'+] + ; + [',c.sters,c.denumire from ] + gcs + [.sal_vcurs c where 1=2'] + pcfiltru6 = [id_persoana = ] + ALLTRIM(STR(popers.id_salariat)) + pcorder6 = [denumire] + llAfiseaza = .f. + + gencursor('pocurs','v_curs_calif',pcselect6,pcfiltru6,pcschema6,pcorder6,llAfiseaza) + pocurs.ca_baza1.afisare() + + ******************************************************* + + PRIVATE postud,pcschema7,pcselect7,pcfiltru7,pcorder7 &&studii + STORE '' TO postud,pcschema7,pcselect7,pcfiltru7,pcorder7 + pcschema7=[] + pcselect7=['select * from ] + gcs + [.sal_studii where 1=2'] + pcfiltru7 = [id_persoana = ] + ALLTRIM(STR(popers.id_salariat)) + [ and sters=0] + pcorder7 = [scoala] + llAfiseaza = .f. + + gencursor('postud','v_studii',pcselect7,pcfiltru7,pcschema7,pcorder7,llAfiseaza) + postud.ca_baza1.afisare() + ******************************************************* + + PRIVATE poechip,pcschema8,pcselect8,pcfiltru8,pcorder8 &&echipament (optional) + STORE '' TO poechip,pcschema8,pcselect8,pcfiltru8,pcorder8 + pcschema8=[] + pcselect8=['select * from ] + gcs + [.sal_vechip where 1=2'] + pcfiltru8 = [id_part = ] + ALLTRIM(STR(popers.id_part)) + pcorder8 = [numar] + llAfiseaza = .f. + + gencursor('poechip','v_echip',pcselect8,pcfiltru8,pcschema8,pcorder8,llAfiseaza) + poechip.ca_baza1.afisare() + ******************************************************* + + + PRIVATE poact,pcschema9,pcselect9,pcfiltru9,pcorder9 &&acte aditionale + STORE '' TO poact,pcschema9,pcselect9,pcfiltru9,pcorder9 + pcschema9=[] + pcselect9=['select * from ] + gcs + [.sal_vjurnal_contracte where 1=2'] + pcfiltru9 = [angajatid = ] +ALLTRIM(STR(VAL(popers.codpers),13)) + pcorder9 = [] + llAfiseaza = .f. + + gencursor('poact','v_jurnal',pcselect9,pcfiltru9,pcschema9,pcorder9,llAfiseaza) + poact.ca_baza1.afisare() + ******************************************************* &&documente atasate + PRIVATE poatas,pcschema10,pcselect10,pcfiltru10,pcoreder10 + STORE '' TO poatas,pcschema10,pcselect10,pcfiltru10,pcoreder10 + pcschema10=[] + pcselect10=['select * from ]+ gcs + [.sal_vatasamente where 1=2'] + pcfiltru10=[id_persoana = ] + ALLTRIM(STR(popers.id_salariat)) + [ and sters=0] + pcorder10= [] + llAfiseaza=.f. + gencursor('poatas','v_atas',pcselect10,pcfiltru10,pcschema10,pcorder10,llAfiseaza) + poatas.ca_baza1.afisare() + ************************************************************ + ******************************************************* + + PRIVATE poavize,pcschema11,pcselect11,pcfiltru11,pcorder11 &&avize + STORE '' TO poavize,pcschema11,pcselet11,pcfiltru11,pcorder11 + + + pcschema11 = ['aviz c(64),data1 d,data2 d,id_aviz n(5),id_persoana n(5)'] + pcselect11 = ['select aviz,data1,data2,id_aviz,id_persoana from ] + gcs + [.sal_avize where 1=2'] + pcfiltru11 = [id_persoana = ] + ALLTRIM(STR(popers.id_salariat))+[ and sters = 0] + pcorder11 = [data2 desc] + llAfiseaza = .f. + + gencursor('poavize','v_avize',pcselect11,pcfiltru11,pcschema11,pcorder11,llAfiseaza) + poavize.ca_baza1.afisare() + ******************************************************* + ******************************************************* + + PRIVATE poCalendar,pcschema12,pcselect12,pcfiltru12,pcorder12,pnCalendarOug114 &&sal_calendar + STORE '' TO poCalendar,pcschema12,pcselect12,pcfiltru12,pcorder12 + + + pcschema12 = ['oug114_2018 n(1)'] + pcselect12 = ['select oug114_2018 from sal_calendar where 1=2'] + pcfiltru12 = [luna = pack_sesiune.getluna() and an = pack_sesiune.getan()] + pcorder12 = [] + llAfiseaza = .f. + + gencursor('poCalendar','v_calendar',pcselect12,pcfiltru12,pcschema12,pcorder12,llAfiseaza) + poCalendar.ca_baza1.afisare() + SELECT v_calendar + pnCalendarOug114 = NVL(v_calendar.oug114_2018,0) + pnCalendarOug114 = NVL(pnCalendarOug114,0) + ******************************************************* + update_hand() + EXTERNAL ARRAY tasc + DIMENSION tasc[1,1] + tasc = caut_alfa_beta('v_personal','nume:C;marca:N:0:999999999;formatia:C;codpers:C;tarifar:N:0:999999999;meseria:C',1) &&cautare noua + + EXTERNAL ARRAY taSqlReg &&array registru salariati + DIMENSION taSqlReg[7] + + SELECT v_personal + + ***********************************************variabile_registru************************************* + *!* modificare ROARES v 1.0.49 : am adaugat si campul datactr + SCATTER NAME poRegAms FIELDS id_meserie,; &&meserie + datalic,; &&incetare contract + dataang,datasfctr,fractie,id_tipctr,; &&Tipul Contractului + nrctr,datactr,nrctrm,datactrm,; &&Numar/Data Contract + id_sectie,; && Loc de munca + nume,prenume,id_cetatenie,id_nationalit,id_tip_act,; &&date personale + codpers,cmseria,cmnr,id_loc,strada,numar,bloc,scara,etaj,apart blank + + ***********************************************variabile_registru************************************* + If !llEroare + opers = Createobject('frm_opersonal') + opers.WindowState=2 + opers.clienttoptabs1._container1.lblHeader.Caption=Alltrim(Str(popers.marca)) + " - " + Alltr(popers.nume)+" " +Alltr(popers.prenume) + opers.Show(1) + Release opers + Endif + RELEASE pcschema1, pcselect1 + IF USED('v_hand') + USE IN v_hand + ENDIF + IF USED('v_personal') + USE IN v_personal + ENDIF + IF USED('v_copii') + USE IN v_copii + ENDIF + IF USED('v_nom_intret') + USE IN v_nom_intret + ENDIF + IF USED('v_bazacm') + USE IN v_bazacm + ENDIF + IF USED('v_calif') + USE IN v_calif + ENDIF + IF USED('v_studii') + USE IN v_studii + ENDIF + IF USED('v_curs_calif') + USE IN v_curs_calif + ENDIF + IF USED('v_dif_part') + USE IN v_dif_part + ENDIF + IF USED('v_echip') + USE IN v_echip + ENDIF + IF USED('v_jurnal') + USE IN v_jurnal + ENDIF + IF USED('crsModlic') + USE IN crsModlic + ENDIF + IF USED('crsTemei') + USE IN crsTemei + ENDIF + *!* modificare ROARES v 2.0.8 + IF USED('crsnomtipn') + USE IN crsnomtipn + ENDIF + IF USED('crsnomduratam') + USE IN crsnomduratam + ENDIF + IF USED('crsnomrepartm') + USE IN crsnomrepartm + ENDIF + IF USED('crsnomintm') + USE IN crsnomintm + ENDIF + *!* modificare ROARES v 2.0.8 ^ + IF USED('v_calendar') + USE IN v_calendar + ENDIF +ENDPROC + + +********************************************************** +PROCEDURE update_dedsupl + + If Used('v_dedsupl') + Use In v_dedsupl + Endif + + lcSQl = [select * from ] + gcs + [.sal_vnom_dedsupl] + lcCursor = [v_dedsupl] + lnSucces = goExecutor.oExecute(lcSQl,lcCursor) + goExecutor.oReset() + + Return lnSucces + +ENDPROC + +********************************************************** + + +*!* PROCEDURE update_hand + +*!* If Used('v_hand') +*!* Use In v_hand +*!* Endif + +*!* lcSql = [select * from ] + gcS + [.sal_vnom_handicap] +*!* lcCursor = [v_hand] +*!* lnSucces = goExecutor.oExecute(lcSql,lcCursor) +*!* goExecutor.oReset() + +*!* Return lnSucces + +*!* ENDPROC + +********************************************************** +PROCEDURE update_mes + + If Used('v_meseria') + Use In v_meseria + Endif + + lcSQl = [select * from ] + gcs + [.sal_vnom_mes] + lcCursor = [v_meseria] + lnSucces = goExecutor.oExecute(lcSQl,lcCursor) + goExecutor.oReset() + + Return lnSucces + +ENDPROC + +******************************************************** +PROCEDURE update_form + + If Used('v_formatia') + Use In v_formatia + Endif + + lcSQl = [select * from ] + gcs + [.sal_vnom_formatii] + lcCursor = [v_formatia] + lnSucces = goExecutor.oExecute(lcSQl,lcCursor) + goExecutor.oReset() + + Return lnSucces + +ENDPROC + +************************************************************** +PROCEDURE update_limbi + + If Used('v_limba') + Use In v_limba + Endif + + lcSQl = [select * from ] + gcs + [.sal_vnom_limb] + lcCursor = [v_limba] + lnSucces = goExecutor.oExecute(lcSQl,lcCursor) + goExecutor.oReset() + + Return lnSucces + +ENDPROC + +**************************************************** +******************************************* INCEPUT: caut_limba ******************************************* +Procedure caut_limba + Lparameters tlNou + Local loHash, loCauta + loHash = GetHash() + With loHash + .SetValue("cSelect", [select * from sal_vnom_limb]) + .SetValue("cOrder", "denumire") + .SetValue("cColoana", "denumire,id_limba") + .SetValue("cTitlu", "Alegeti limba straina") + .SetValue("cTitluColoana", "Denumire,Id_limba") + .SetValue("cFiltruOriginal", "2=2") + .SetValue("cFiltru", "2=2") + If tlNou + .SetValue("cNumeProc", "nom_limbi") + Endif + Endwith + loCauta = cauta_alfa_hash(loHash) + Return Iif(gnButon = 2, Null, loCauta) +Endproc && caut_limba +***************************************** SFARSIT: caut_limba******************************************* +******************************************* INCEPUT: caut_limba ******************************************* +Procedure caut_curs + Lparameters tlNou + Local loHash, loCauta + loHash = GetHash() + With loHash + .SetValue("cSelect", [select * from sal_vnom_curs]) + .SetValue("cOrder", "denumire") + .SetValue("cColoana", "denumire,id_c") + .SetValue("cTitlu", "Alegeti cursul") + .SetValue("cTitluColoana", "Denumire,Id_curs") + .SetValue("cFiltruOriginal", "2=2") + .SetValue("cFiltru", "2=2") + If tlNou + .SetValue("cNumeProc", "nom_cursuri") + Endif + Endwith + loCauta = cauta_alfa_hash(loHash) + Return Iif(gnButon = 2, Null, loCauta) +Endproc && caut_limba +***************************************** SFARSIT: caut_limba******************************************* + +PROCEDURE update_curs + + If Used('v_curs') + Use In v_curs + Endif + + lcSQl = [select * from ] + gcs + [.sal_vnom_curs] + lcCursor = [v_curs] + lnSucces = goExecutor.oExecute(lcSQl,lcCursor) + goExecutor.oReset() + + Return lnSucces + +ENDPROC + +**************************************************** + +PROCEDURE update_stud + + If Used('v_stud') + Use In v_stud + Endif + + lcSQl = [select * from ] + gcs + [.sal_vnom_stud] + lcCursor = [v_stud] + lnSucces = goExecutor.oExecute(lcSQl,lcCursor) + goExecutor.oReset() + + Return lnSucces + +ENDPROC + +******************************************* +* PROCEDURE proc_sitco( ) +* Date : 11/17/05, 15:00:59 +* author : liana.macinic +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* +PROCEDURE proc_sitco( ) + ofrm_list_avans = CREATEOBJECT('frm_list_stat') + ofrm_list_avans.clistare = [sitco] + ofrm_list_avans.lb_titlu_alb_b121.caption = 'LISTARE PRIME' + ofrm_list_avans.show(1) + +ENDPROC +*----------------------------------sfarsit procedura proc_sitco---------------------------------- + + +*********************************INCEPUT REDESCHIDERE LUNA*********************************************** +PROCEDURE redeschidere_comun + + PRIVATE oredes + + buton = 2 + + + EXTERNAL ARRAY taOpt + DIMENSION taOpt[10] &&1 - tip redeschidere,2-state,3-pontaje,4-persintret,5-popriri,6-sporuri,7-co + taOpt[1]=1 + FOR i=2 TO 10 + taOpt[i]=1 + ENDFOR + + oredes = CREATEOBJECT('frm_redeschidere',@taOpt) + if gcAppName = "ROARES" + oredes.redOpt.option1.Enabled=.f. + oredes.page_detalii.page1.Enabled=.f. + ENDIF + oredes.show(1) + RELEASE oredes + + IF buton = 2 + RETURN + ENDIF + + IF amessagebox('Doriti sa redeschideti luna '+ALLTRIM(STR(gnLuna)) + '/'+ALLTRIM(STR(gnAn)) +' ?',4+32,'Confirmare')=7 + RETURN + ENDIF + + LOCAL lcOpt + lcOpt='' + FOR i=2 TO 10 + lcOpt = lcOpt+ALLTRIM(STR(taOpt[i]))+';' + ENDFOR + IF taOpt[1]=2 + taOpt[1]=0 + ENDIF + WAIT WINDOW "Asteptati, se redeschide luna... " NOWAIT + + *!* modificare v 2.0.22 : am modificat apelul din redeschidere_sal in redeschidere_sal_audit + lcSQl = [begin PACK_SALARII.redeschidere_sal_audit('] + gcs +[',]+ALLTRIM(STR(taOpt[1]))+[,']+lcOpt+[',]+; + ALLTRIM(STR(gnAn))+[,]+ALLTRIM(STR(gnLuna))+[); end;] + If goExecutor.oExecuta(lcSQl) + amessagebox('Redeschiderea s-a incheiat!',48,'Redeschidere luna') + Endif +ENDPROC +*********************************SFARSIT REDESCHIDERE LUNA*********************************************** +PROCEDURE sal_modlic_nou + + PRIVATE pomodlic,pcschema1,pcselect1 + STORE '' TO pomodlic + pcschema1 = [''] + pcselect1=['select * from ] + gcs + [.sal_nom_modlic where 1=2'] + pcorder1=[modlic] + pcfiltru1 = [2=2] + llAfiseaza = .F. + gencursor('pomodlic','v_modlic_nou',pcselect1,pcfiltru1,pcschema1,pcorder1,llAfiseaza) + pomodlic.ca_baza1.afisare() + *** + SELECT v_modlic_nou + SCATTER NAME loRec BLANK + DO Adauga_Modifica_Inregistrare WITH 'modlic',loRec,,"INSERT" + USE IN v_modlic_nou + +ENDPROC +************************************************************* +***====================================================================================== + +PROCEDURE sal_tipctr_nou + + PRIVATE poctr,pcschema1,pcselect1 + + STORE '' TO poctr + pcschema1 = [''] + pcselect1=['select * from ] + gcs + [.sal_nom_tipctr where 1=2'] + pcorder1=[tip_contract] + pcfiltru1 = [2=2] + llAfiseaza = .F. + gencursor('poctr','v_ctr_nou',pcselect1,pcfiltru1,pcschema1,pcorder1,llAfiseaza) + poctr.ca_baza1.afisare() + *** + + Do update_ore In update_roadef_sal.prg + SELECT v_ctr_nou + SCATTER NAME loRec BLANK + ADDPROPERTY(loRec,'ore','') + DO Adauga_Modifica_Inregistrare WITH 'tipctr',loRec,,"INSERT" + USE IN v_ctr_nou + USE IN v_nomore + + +ENDPROC +***====================================================================================== +FUNCTION verifica_adaugare_parteneri + LPARAMETERS tnTip &¶metru diferit de 1 = inchid cursor + LOCAL lflag + lflag=.f. + IF TYPE('podif')='U' &&verific variabila ( doar in cazul apelarii cu parametru) + PRIVATE podif + STORE '' TO podif + ENDIF + pcschema1 = [''] + pcselect1 = ['select * from ] + gcs + [.sal_vdif_part where 1=1'] + lcCursor = [v_dif_part] + pcorder1 = [nume,prenume] + pcfiltru1 = [nume is not null] + llAfiseaza = .f. + gencursor('podif','v_dif_part',pcselect1,pcfiltru1,pcschema1,pcorder1,llAfiseaza) + podif.ca_baza1.afisare() + IF RECCOUNT('v_dif_part')>0 + lflag=.t. + SELECT v_dif_part + replace ALL nr WITH RECNO() + GO TOP + ENDIF + IF PCOUNT()=1 + USE IN v_dif_part + RELEASE podif + ENDIF + + RETURN lflag + + **************************************************** + ***====================================================================================== +PROCEDURE res_adauga_parteneri + + pcschema1 = [''] + pcselect1 = ['select id_part,nume,cod_fiscal,reg_comert,prenume,strada,numar,bloc,scara,etaj,'+] +; + ['apart,id_loc,localitate,judet,id_judet,000000 as nr,id_adresa from ] + gcs + [.vnom_parteneri where 1=1'] + lcCursor = [v_dif_part] + pcorder1 = [nume,prenume] + pcfiltru1 = [1=2] + llAfiseaza = .t. + gencursor('podif','v_dif_part',pcselect1,pcfiltru1,pcschema1,pcorder1,llAfiseaza) + podif.ca_baza1.afisare() + +ENDPROC + +**************************************************** + +PROCEDURE update_echip + + If Used('v_echipament') + Use In v_echipament + Endif + + lcSQl = [select * from ] + gcs + [.sal_vnecesar] + lcCursor = [v_echipament] + lnSucces = goExecutor.oExecute(lcSQl,lcCursor) + goExecutor.oReset() + + Return lnSucces + +ENDPROC + +**************************************************** +PROCEDURE conditii_articole + + PRIVATE pocond,pcschema1,pcselect1,pcfiltru1,pcorder1 &&Conditii din nomenclator + STORE '' TO pocond,pcschema1,pcselect1,pcfiltru1,pcorder1 + + pcschema1 = [''] + pcselect1 = ['select id_conditie,denumire,conditie,00000 as nr from ] + gcs + [.sal_vnom_cond where 1=1'] + lcCursor = [v_conditii] + pcorder1 = [denumire] + pcfiltru1 = [2=2] + llAfiseaza = .t. + gencursor('pocond',lcCursor,pcselect1,pcfiltru1,pcschema1,pcorder1,llAfiseaza) + pocond.ca_baza1.afisare() + IF RECCOUNT('v_conditii')>0 + SELECT v_conditii + replace ALL nr WITH RECNO() + GO TOP + ENDIF + SELECT v_conditii + SCATTER NAME poconditii MEMO + + EXTERNAL ARRAY taCompun && pt compunere conditie + DIMENSION taCompun[1,3] + + EXTERNAL ARRAY taElemente + DIMENSION taElemente[4,5] &&1 - camp,2-Descriere camp,3-Camp Id,4-Valoare camp Id,5-Tabela + taElemente[1,1] = 'Sectia' + taElemente[1,2] = 'sectie' + taElemente[1,3] = 'id_sectie' + taElemente[1,5] = 'vnom_sectii' + + taElemente[2,1] = 'Formatia' + taElemente[2,2] = 'denumire' + taElemente[2,3] = 'id_formatia' + taElemente[2,5] = 'sal_vnom_formatii' + + taElemente[3,1] = 'Meseria' + taElemente[3,2] = 'meserie' + taElemente[3,3] = 'id_meseria' + taElemente[3,5] = 'sal_vnom_mes' + + taElemente[4,1] = 'Sex' + taElemente[4,2] = 'sex' + taElemente[4,3] = ':distinct' + taElemente[4,5] = 'sal_vstat' + + + + PRIVATE poart,pcschema2,pcselect2,pcfiltru2,pcorder2 &&Articole + STORE '' TO poart,pcschema2,pcselect2,pcfiltru2,pcorder2 + pcschema2 = [''] + pcselect2 = ['select c.id_nec,c.id_articol,c.id_conditie,c.denumire,c.articol,c.codmat,c.um,c.cantitate'+] + ; + [' from sal_vcond_echip c where 1=2'] + pcfiltru2 = [id_conditie = ] + ALLTRIM(STR(v_conditii.id_conditie)) + pcorder2 = [articol] + llAfiseaza = .t. + + gencursor('poart','v_articole',pcselect2,pcfiltru2,pcschema2,pcorder2,llAfiseaza) + poart.ca_baza1.afisare() + + + PRIVATE poper,pcschema3,pcselect3,pcfiltru3,pcorder3 &&Persoane + STORE '' TO poper,pcschema3,pcselect3,pcfiltru3,pcorder3 + pcschema3 = [''] + pcselect3 = ['select s.id_part,s.marca,s.nume,s.prenume from sal_vstat s '+] + ; + [' where 1=2'] + pcfiltru3 = [1=2] + pcorder3 = [nume,prenume] + llAfiseaza = .t. + + gencursor('poper','v_pers',pcselect3,pcfiltru3,pcschema3,pcorder3,llAfiseaza) + poper.ca_baza1.afisare() + + + PRIVATE poarticole,pcschema4,pcselect4,pcfiltru4,pcorder4 &&Articole + STORE '' TO poarticole,pcschema4,pcselect4,pcfiltru4,pcorder4 + pcschema4 = [''] + pcselect4 = ['select a.id_part,a.articol,a.id_articol from sal_vechip a '+] + ; + [' where 1=2'] + pcfiltru4 = [1=2] + pcorder4 = [articol] + llAfiseaza = .t. + + gencursor('poarticole','v_art_pers',pcselect4,pcfiltru4,pcschema4,pcorder4,llAfiseaza) + poarticole.ca_baza1.afisare() + + + SELECT v_conditii + + ocond = CREATEOBJECT('frm_conditii',@taElemente,@taCompun) + ocond.show(1) + RELEASE ocond,poconditii + + IF USED('v_conditii') + USE IN v_conditii + ENDIF + +ENDPROC + +************************************************* +*!* modificare v 2.0.3 : am mutat-o in registru.prg +*!* Procedure registru_unic +*!* Private pcschema1,pcselect1,pojur +*!* Store '' To pcschema1,pcselect1,pojur +*!* *!* pcschema1 =['dataschimbare d,obiectschimbare c(24),tipoperatie c(1),explicatie c(64),angajat c(128),numar c(12),'+] + ; +*!* *!* ['numaritm c(12),datacontract d,tipcontract n(1),norma n(1),ocupatie c(6),datainceput d,'+] + ; +*!* *!* ['datasfarsit d,dataincetarii d,temeiincetare c(128),datareactivare d,cnp c(13),'+] +; +*!* *!* ['cetatenie c(2),judetangajat c(32),'+] +; +*!* *!* ['localitateangajat c(32),adresaangajat c(255),angajator c(128),cui c(64),judetangajator c(32),'+]+; +*!* *!* ['localitateangajator c(64),adresaangajator c(128)'] +*!* pcschema1 = [''] +*!* pcselect1 = ['select ales,dataschimbare ,obiectschimbare ,tipoperatie ,explicatie ,angajat ,numar ,'+] + ; +*!* ['numaritm ,datacontract ,tipcontract ,norma ,ocupatie ,datainceput ,'+] + ; +*!* ['datasfirsit ,dataincetarii ,temeiincetare ,datareactivare ,cnp ,'+] + ; +*!* ['cetatenie ,judetangajat,'+]+; +*!* ['localitateangajat ,adresaangajat ,angajator ,cui ,judetangajator ,'+]+; +*!* ['localitateangajator ,adresaangajator,cheie_angajator,cheie_angajat,cheie_ctr from sal_vregistru_unic where 1=2'] +*!* pcorder1=[] +*!* pcfiltru1 = [2=2] +*!* llAfiseaza = .F. + +*!* gencursor('pojur','v_jurnal',pcselect1,pcfiltru1,pcschema1,pcorder1,llAfiseaza) +*!* pojur.ca_baza1.afisare() + + +*!* ojur = Createobject('frm_registru_unic') +*!* ojur.WindowState=2 +*!* ojur.Show(1) +*!* Release ojur,pcschema1,pcselect1 +*!* Endproc +*!* modificare v 2.0.3 ^ +******************************************* +* PROCEDURE calcul_sumaore( tnTarifOra, tnNrOre, tnprocent ) +* Date : 09/10/05, 10:47:38 +* author : liana.macinic +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 3 +* Parameter 1: +* Parameter 2: +* Parameter 3: +* +******************************************* +PROCEDURE calcul_sumaore( tnTarifOra, tnNrOre, tnprocent) +*!* IF EMPTY(tnprocent) +*!* STORE 1 TO tnprocent +*!* ENDIF + + LOCAL lnSuma + + lnSuma = tnTarifOra * tnNrOre * tnprocent + + RETURN ROUND(lnSuma,2) + +ENDPROC +*----------------------------------sfarsit procedura calcul_sumaore---------------------------------- +*!* EndProc +*------------------------------------------------------------------- + + + ******************************************* + * PROCEDURE calcul_sumaore( tnTarifOra, tnNrOre, tnprocent ) + * Date : 09/10/05, 10:47:38 + * author : liana.macinic + * description: + + ****** PARAMETER BLOCK ************** + * Parameters : 3 + * Parameter 1: + * Parameter 2: + * Parameter 3: + * + ******************************************* + *!* PROCEDURE calcul_sumaore( tnTarifOra, tnNrOre, tnprocent) + *!* IF EMPTY(tnProcent) + *!* STORE 1 TO tnProcent + *!* ENDIF + + *!* LOCAL lnSuma + + *!* lnSuma = tnTarifOra * tnNrOre * tnProcent + + *!* RETURN ROUND(lnSuma,2) + + *!* ENDPROC + *----------------------------------sfarsit procedura calcul_sumaore---------------------------------- + +PROCEDURE template_configureaza + LOCAL loFrm + loFrm = CREATEOBJECT("frm_configurare_doc") + loFrm.show(1) + RELEASE loFrm +ENDPROC +****************************************************************************************************** +Procedure template_selecteaza + Lparameters tnTip,tcNume,tnId,tcCond + Local lcNume, lnId, loRec, lcExplicatie + If Empty(tcNume) Or Empty(tnId) + If gnIdProgram = 75 + loCauta = caut_salariat_spec(0) + If !Isnull(loCauta) + AddProperty(loCauta,"id_salariat",loCauta.id_colaborator) + Endif + lcExplicatie = [colaboratorul] + Else + loCauta = caut_salariat() + lcExplicatie = [salariatul] + Endif + Do Case + Case gnButon = 2 OR ISNULL(loCauta) + Return + Case Empty(Nvl(loCauta.id_salariat,0)) + amessagebox("Nu ati ales "+lcExplicatie+"!",16,"Eroare") + Return + Otherwise + lcNume=Alltrim(loCauta.nume)+'_'+Alltrim(loCauta.prenume) + lnId = loCauta.id_salariat + Endcase + Else + lcNume = tcNume + lnId = tnId + Endif + loRec = template_citeste(tnTip) + If !Isnull(loRec) + template_completeaza(loRec,lcNume,lnId,tcCond) + Endif + Release lnConf, lcNume, lnId, loRec +Endproc +****************************************************************************************************** +Function template_adauga + Lparameters tnTipDocument,tnTip,tnIdEntitate,tnIdReferinta,tcDescriere,tcNumeFisier,tcCaleFisier + Local llReturn + Private pnIdAtas, pcNumeFisier, pcDescriere, pcFisier, pnTipDocument, pnTip, pnIdEntitate, pnIdReferinta + llReturn = .T. + If !File(tcCaleFisier) + amessagebox("Nu exista fisierul "+tcCaleFisier+" !",48,"Atentie") + llReturn = .F. + Else + pnIdAtas = 0 + pcNumeFisier = ALLTRIM(tcNumeFisier) + pcDescriere = ALLTRIM(tcDescriere) + pcFisier = Filetostr(tcCaleFisier) + pnTipDocument = tnTipDocument + pnTip = tnTip + pnIdEntitate = tnIdEntitate + pnIdReferinta = tnIdReferinta + lnSucces2 = SQLSetprop(gnhandle,"Transactions",2) + If lnSucces2 < 0 + amessagebox('Programul nu a reusit sa treaca pe tranzactie manuala. Reincercati!',0+48,'Atentie!') + llReturn = .F. + Else + lcSql2 = [COMMIT] + lcSQl = [insert into atas_atasamente(nume_fisier,descriere,fisier,id_util) ] + ; + [values (?pcNumeFisier,?pcDescriere,?pcFisier,?gnIdUtil) ] + ; + [returning id_atas into ?@pnIdAtas] + lnSucces = goExecutor.oExecute(lcSQl) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,16,"Eroare") + llReturn = .F. + lcSql2 = [ROLLBACK] + Else + lcSQl = [begin pack_def.actualizeaza_referinte(?pnTipDocument,?pnTip,?pnIdAtas,] + ; + [?pnIdEntitate,?pnIdReferinta,?gnIdProgram,?gnIdUtil); end;] + lnSucces = goExecutor.oExecute(lcSQl) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,16,"Eroare") + llReturn = .F. + lcSql2 = [ROLLBACK] + Endif + Endif + lnSucces2 = goExecutor.oExecute(lcSql2) + If lnSucces2 < 0 + amessagebox(lcSql2 + Chr(13) + goExecutor.cEroare,0+16,"Eroare") + llReturn = .F. + Endif + lnSucces2 = SQLSetprop(gnhandle,"Transactions",1) + If lnSucces2 < 0 + amessagebox('Programul nu a reusit sa treaca pe tranzactie automata. Iesiti din program si intrati din nou!',0+48,'Atentie!') + llReturn = .F. + Endif + Endif + Endif + Release pnIdAtas, pcNumeFisier, pcDescriere, pcFisier, pnTipDocument, pnTip, pnIdEntitate, pnIdReferinta + Return llReturn +Endfunc +****************************************************************************************************** +Function template_citeste + Lparameters tnTip + ** citeste din b.d. + Private poDocument + Store "" To poDocument + Local loRec, lcSQl, lcCursor, lcFiltru, lcSchema, lcOrder, llAfisare, lcView + lcCursor = [crstemplatedoc] + If gnIdProgram = 75 + lcView = [sal_vdocumente_ss] && ROASALSPEC / 75 + Else + lcView = [sal_vdocumente_ru] && ROARES / 4 + Endif + lcSQl = [select NVL(c.fisier,e.fisier) as fisier,a.id_referinta,a.NUME_FISIER from ] + ; + [(select id_referinta,tip,NUME_FISIER from ] + lcView + [ where 1=2] + lcFiltru = [id_referinta = ] + ALLTRIM(STR(tnTip)) + [) a ] + ; + [left join syn_atas_referinte b on a.id_referinta = b.id_referinta and a.tip = 1 ] + ; + [left join syn_atas_atasamente c on b.id_atas = c.id_atas ] + ; + [left join atas_referinte d on a.id_referinta = d.id_referinta and a.tip = 2 ] + ; + [left join atas_atasamente e on d.id_atas = e.id_atas] + lcSchema = [fisier W,id_referinta N(10),NUME_FISIER c(200)] + *!* lcSql = [select b.descriere,b.nume_fisier,b.fisier,a.id_entitate,a.ordine,b.id_atas,a.id_referinta ] + ; + *!* [from (select * from syn_atas_referinte where 1=2 ] + *!* lcFiltru = [id_program = ?gnIdProgram and sters = 0 and id_referinta = ] + Alltrim(Str(tnTip)) + [) a ] + ; + *!* [left join syn_atas_atasamente b on a.id_atas = b.id_atas] + *!* lcSchema = [descriere C(200),nume_fisier C(200),fisier W,id_entitate N(10),ordine N(10),id_atas N(10),id_referinta N(10)] + lcOrder = [] + llAfisare = .F. + gencursor('poDocument',lcCursor,lcSQl,lcFiltru,lcSchema,lcOrder,llAfisare) + poDocument.ca_baza1.afisare() + If Used(lcCursor) + Select (lcCursor) + Scatter Name loRec MEMO + Use In (lcCursor) + Else + loRec = Null + Endif + Release poDocument, lcSQl, lcCursor, lcFiltru, lcSchema, lcOrder, llAfisare + Return loRec +Endfunc +****************************************************************************************************** +Procedure template_completeaza + Lparameters toObiect,tcNume,tnId,tcCond + SET STEP on + Local lcDocumentMarca,lcSQl,lcCursor,lnSucces + Private poWord + lcDocumentMarca = Addbs(gcTempPath) + Alltrim(tcNume) + If File(lcDocumentMarca) + Delete File (lcDocumentMarca) + ENDIF + *WAIT WINDOW 'pack_personal.contract_munca' +*!* IF toObiect.id_referinta <> -7 + lcSQl = [{call pack_personal.contract_munca(?gcS,]+Alltrim(Str(tnId))+[,?gnIdFirma,']+IIF(!EMPTY(tcCond),ALLTRIM(tcCond),[])+[')}] + lcCursor = [crs_test] + If !goExecutor.oExecuta(lcSQl,lcCursor) + Return + ENDIF +*!* ENDIF + SELECT (lcCursor) +*!* BROWSE + *WAIT WINDOW 'end pack_personal.contract_munca' + *!* modificare pentru contract + If toObiect.id_referinta = 20 + Local lcCursor1 + lcCursor1 = [crs_test1] + Select * From (lcCursor) Into Cursor (lcCursor1) Readwrite + Use In (lcCursor) + lcCursor = lcCursor1 + Select (lcCursor) + Locate For Alltrim(variabila)='S32' + *!* modificare v 2.0.25 + *!* If Found() + *!* If !Empty(Val(valoare)) + *!* Replace valoare With '0' For Inlist(Alltrim(variabila),'S21','S34') + *!* Replace valoare With Alltrim(Str(5*Val(valoare))) For Alltrim(variabila)='S33' + *!* Endif + *!* Else + *!* Locate For Alltrim(variabila)='S21' + *!* If Found() + *!* If !Empty(Val(valoare)) + *!* Replace valoare With '0' For Inlist(Alltrim(variabila),'S32','S33') + *!* Replace valoare With Alltrim(Str(5*Val(valoare))) For Alltrim(variabila)='S34' + *!* Endif + *!* Endif + *!* ENDIF + If Found() + lnNrOreNorma = Val(valoare) + Else + lnNrOreNorma = 0 + Endif + Locate For Alltrim(variabila) = 'S21' + If Found() + lnNrOreFractie = Val(valoare) + Else + lnNrOreFractie = 0 + ENDIF + Do Case + Case lnNrOreNorma <> 0 And lnNrOreNorma = lnNrOreFractie + Replace valoare With '0' For Inlist(Alltrim(variabila),'S21','S34') + Replace valoare With Alltrim(Str(5*Val(valoare))) For Alltrim(variabila)='S33' + Case lnNrOreNorma <> lnNrOreFractie + Replace valoare With '0' For Inlist(Alltrim(variabila),'S32','S33') + Replace valoare With Alltrim(Str(5*Val(valoare))) For Alltrim(variabila)='S34' + Otherwise + lnNrOreNorma = 0 + Endcase + *!* modificare v 2.0.25 ^ + ENDIF + IF toObiect.id_referinta = -2 + DO updateNrData112 + + WAIT WINDOW [Asteptati, se calculeaza datele...] NOWAIT + lcSQl = [{call pack_personal.adeverinta_somaj(]+Alltrim(Str(tnId))+[)}] + If !goExecutor.oExecuta(lcSQl,[crs_venituri]) + RETURN + ENDIF + WAIT CLEAR + lcSQl = [select a.datainceput as datainc, a.datasfarsit as datasf,upper(c.explicatie) as temei ]+; + [ from (select distinct id_sal_ctr,id_temei,datainceput, NVL(dataincetare, datasfarsit) as datasfarsit ]+; + [ from sal_reges_stari_ctr ]+; + [ where id_tip_stare = 3 and sters <> 2 and tip_modificare <> 1) a ]+; + [ left join (select nrctr, datactr, id_sal_ctr, id_salariat ]+; + [ from (select nrctr,datactr,id_sal_ctr, id_salariat, row_number() over(partition by id_sal_ctr order by dataconsemnare desc) as nr ]+; + [ from sal_reges_contracte where sters <> 2)]+; + [ where nr = 1) b ]+; + [ on a.id_sal_ctr = b.id_sal_ctr ]+; + [ left join syn_sal_nom_temei c on a.id_temei = c.id_temei ]+; + [ where b.id_salariat = ]+ALLTRIM(STR(tnId))+; + [ union ]+; + [ select a.datainc,a.datasf , b.conc_med as temei ]+; + [ from sal_concmed a ]+; + [ left join sal_nom_cm b on a.id_cm = b.id_cm ]+; + [ where a.id_stat in (select id_stat from sal_stat where id_persoana =]+ALLTRIM(STR(tnId))+[) and a.id_cm <> 9 and a.sters = 0]+; + [ order by datainc] + + + If !goExecutor.oExecuta(lcSQl,[crs_concediiSuspendari]) + RETURN + ENDIF + ENDIF + IF toObiect.id_referinta = -11 + DO updateNrData112 + SET STEP ON + WAIT WINDOW [Asteptati, se calculeaza datele...] NOWAIT + lcSQl = [{call pack_personal.adeverinta_somaj_2018(]+Alltrim(Str(tnId))+[)}] + If !goExecutor.oExecuta(lcSQl,[crs_venituri]) + RETURN + ENDIF + WAIT CLEAR + lcSQl = [select a.datainceput as datainc, a.datasfarsit as datasf,upper(c.explicatie) as temei ]+; + [ from (select distinct id_sal_ctr,id_temei,datainceput, NVL(dataincetare, datasfarsit) as datasfarsit ]+; + [ from sal_reges_stari_ctr ]+; + [ where id_tip_stare = 3 and sters <> 2 and tip_modificare <> 1) a ]+; + [ left join (select nrctr, datactr, id_sal_ctr, id_salariat ]+; + [ from (select nrctr,datactr,id_sal_ctr, id_salariat, row_number() over(partition by id_sal_ctr order by dataconsemnare desc) as nr ]+; + [ from sal_reges_contracte where sters <> 2)]+; + [ where nr = 1) b ]+; + [ on a.id_sal_ctr = b.id_sal_ctr ]+; + [ left join syn_sal_nom_temei c on a.id_temei = c.id_temei ]+; + [ where b.id_salariat = ]+ALLTRIM(STR(tnId))+; + [ union ]+; + [ select a.datainc,a.datasf , b.conc_med as temei ]+; + [ from sal_concmed a ]+; + [ left join sal_nom_cm b on a.id_cm = b.id_cm ]+; + [ where a.id_stat in (select id_stat from sal_stat where id_persoana =]+ALLTRIM(STR(tnId))+[) and a.id_cm <> 9 and a.sters = 0]+; + [ order by datainc] + + + If !goExecutor.oExecuta(lcSQl,[crs_concediiSuspendari]) + RETURN + ENDIF + ENDIF + IF INLIST(toObiect.id_referinta, -5,-12) + + lcSQl = [select a.orenoapte,b.an,b.luna, pack_normare.tarifar_ora_luna(b.id_persoana,b.luna,b.an) as tarif_ora,a.c_orenoapte,b.tarifar,b.totbrut ]+; + [ from sal_pontaje a ]+; + [ left join sal_stat b on a.id_stat = b.id_stat ]+; + [ left join sal_personal c on b.id_persoana = c.id_salariat ]+; + [ where a.sters = 0 and b.sters = 0 and b.id_persoana = ]+ALLTRIM(STR(tnId))+; + [ order by an*12+luna ] + If !goExecutor.oExecuta(lcSQl,[crs_venituri]) + RETURN + ENDIF + ENDIF + IF toObiect.id_referinta = -1 + lcSQl = [select a.an,a.luna,a.tarifar,a.totbrut,a.salnet as net,a.fractie from sal_vstattot a where an*12+luna >= 2011*12+1 and a.id_persoana = ]+ALLTRIM(STR(tnId))+[ order by an*12+luna ] + If !goExecutor.oExecuta(lcSQl,[crs_venituri]) + RETURN + ENDIF + ENDIF + IF toObiect.id_referinta = -13 + lcSQl = [select a.an,a.luna,a.totbrut,a.zileluc+a.zileco+a.zileces as zileluc,a.zilecm from sal_vstattot a ]+; + [ where an*12+luna between pack_sesiune.getan()*12+pack_sesiune.getluna()-11 and pack_sesiune.getan()*12+pack_sesiune.getluna() ]+; + [ and a.id_persoana = ]+ALLTRIM(STR(tnId))+[ order by an*12+luna ] + If !goExecutor.oExecuta(lcSQl,[crs_bazeCM]) + RETURN + ENDIF + ENDIF + IF toObiect.id_referinta = -6 + +*!* lcSQl = [{call pack_personal.reges_citeste_vechime(]+Alltrim(Str(tnId,10))+[)}] + lcSQl = [select contract,functie,tipdurata,dataang,dataincetare,nrCtr,]+; + [to_char((case ]+; + [ when nr = 1 then ]+; + [ greatest(dataang, to_date('01012011', 'DDMMYYYY')) ]+; + [ else dataconsemnare end), ]+; + [ 'DD.MM.YYYY') || ' - ' || ]+; + [ NVL(to_char(lead(dataconsemnare - 1)]+; + [ over(partition by id_sal_ctr order by dataconsemnare),'DD.MM.YYYY'),]+; + [ NVL(to_char(dataincetare, 'DD.MM.YYYY'),NVL(to_char(datasfctr, 'DD.MM.YYYY'), 'Prezent'))) as vechime,]+; + [ salariu,tipactualizare,nractmodif,dataactmodif,tipactmodif,meserie,temeiincetare ]+; + [ from (select nrCtr,id_sal_ctr,connect_by_root(nr) as nr,connect_by_root(dataconsemnare) as dc,contract,functie,tipdurata,]+; + [ dataconsemnare,dataang,datasfctr,dataincetare,salariu,(case when connect_by_root(nr) = 1 then 'Adaugare' else ]+; + [ decode(tip_modificare,3,'Modificare',2,'Corectie','Adaugare')end) as tipactualizare,nractmodif,dataactmodif,tipactmodif,meserie,temeiincetare ]+; + [from (select nrCtr,id_sal_ctr,nr,(case when nr - lag(nr) over(partition by id_sal_ctr,nrctr,datactr,dataang,functie,datasfctr,dataincetare,]+; + [ salariu,id_tip_norma order by dataconsemnare,dataora,nrctr,datactr,dataang,functie,datasfctr,dataincetare,salariu,id_tip_norma) = 1 then ]+; + [ lag(nr) over(partition by id_sal_ctr,nrctr,datactr,dataang,functie,datasfctr,dataincetare,salariu,id_tip_norma order by dataconsemnare,]+; + [ dataora,nrctr,datactr,dataang,functie,datasfctr,dataincetare,salariu,id_tip_norma) else null end) as tata,]+; + [nrctr || '/' || to_char(datactr, 'DD.MM.YYYY') as contract,functie,nvl2(datasfctr, 'Determinata', 'Nedeterminata') as tipdurata,]+; + [ dataconsemnare,dataang,datasfctr,dataincetare,salariu,tip_modificare,nractmodif,dataactmodif,tipactmodif,meserie,temeiincetare ]+; + [ from (select a.id_sal_ctr, ]+; + [ rank() over(partition by a.id_sal_ctr order by decode(a.tip_modificare, 4, to_date('01012011', 'DDMMYYYY'), a.dataconsemnare), a.dataora, ]+; + [ a.nrctr, a.datactr, a.dataang, c.cod || '( v' || c.versiune || ' ) - ' || c.denumire, a.datasfctr, d.dataincetare, a.tarifar, a.tip_modificare) as nr,]+; + [ a.nrctr,a.datactr,c.cod || '( v' || c.versiune || ' ) - ' ||c.denumire as functie,decode(a.tip_modificare,4,to_date('01012011', 'DDMMYYYY'),]+; + [ a.dataconsemnare) as dataconsemnare,a.dataang,a.datasfctr,d.dataincetare,a.dataora,a.tarifar as salariu,a.tip_modificare,a.nractmodif,a.dataactmodif,a.id_tip_norma,]+; + [ nom_acte.nume_act as tipactmodif,e.meserie,f.denumire as temeiincetare ]+; + [ from sal_reges_contracte a left join syn_sal_cor c on a.cor = c.cod and a.versiune_cor = c.versiune ]+; + [ left join (select id_sal_ctr, dataincetare,id_temei from sal_stare_ctr where id_tip_stare = 1 and sters = 0) d on a.id_sal_ctr = d.id_sal_ctr ]+; + [ left join syn_sal_nom_temei f on d.id_temei = f.id_temei ]+; + [ left join sal_nom_acte nom_acte on a.id_tipact = nom_acte.id_act ]+; + [ left join sal_nom_mes e on a.id_meserie = e.id_meseria ]+; + [ where a.id_salariat = ]+ALLTRIM(STR(tnId))+[ and a.tip_modificare <> 1 and a.sters <> 2 and a.tip_modificare <> 2) order by dataconsemnare,id_sal_ctr, nr) start with tata is null ]+; + [ connect by tata = prior nr) order by dataconsemnare, id_sal_ctr, nr] + + If !goExecutor.oExecuta(lcSQl,[crs_venituri]) + RETURN + ENDIF +*!* lcSQl = [{call pack_personal.reges_citeste_suspendari(]+Alltrim(Str(tnId,10))+[)}] +*!* If !goExecutor.oExecuta(lcSQl,[crsSuspendari]) +*!* RETURN +*!* ENDIF + ENDIF + IF toObiect.id_referinta = -14 + lcSQl = [select an,luna,id_colaborator,baza_cas,scas from spec_vtotvenituri a where a.scas >0 ]+; + [ and a.id_colaborator = ]+ALLTRIM(STR(tnId))+[ order by an*12+luna ] + If !goExecutor.oExecuta(lcSQl,[crs_bazeCAS]) + RETURN + ENDIF + ENDIF + IF UPPER(ALLTRIM(toObiect.nume_fisier)) = 'ADEVERINTA2.DOC' + lcSQl = [select a.cod_cm as cod ,(cm.datasf - cm.datainc + 1) as zilecm,]+; + [ to_char(cm.datainc, 'DD.MM.YYYY') || ' - ' ||to_char(cm.datasf, 'DD.MM.YYYY') as perioada,b.id_persoana,b.an,b.luna from SAL_CONCMED cm ]+; + [ left join sal_nom_cm a on cm.id_cm = a.id_cm ]+; + [ left join sal_stat b on cm.id_stat = b.id_stat ]+; + [ where cm.sters =0 ]+; + [ and cm.datainc between add_months(to_date(pack_sesiune.getan() ||pack_sesiune.getluna(),'YYYYMM'),-24) and ]+; + [ last_day(to_date(pack_sesiune.getan() || pack_sesiune.getluna(),'YYYYMM'))]+; + [ and a.cod_cm <> '00' and b.id_persoana = ]+ALLTRIM(STR(tnId)) +[ order by cm.datainc ] + If !goExecutor.oExecuta(lcSQl,[crsCmuri]) + RETURN + ENDIF + SELECT crsCmuri + ENDIF + *!* modificare pentru contract ^ + Strtofile(toObiect.fisier,lcDocumentMarca) + Local xeroare As Exception + TRY + SET STEP ON + poWord = Createobject('word.application') + APPLICATION.OLERequestPendingTimeout = 0 && v 2.0.21 + poWord.visible = .t. + loDocument = poWord.Documents.Open(lcDocumentMarca) + Catch To xeroare + If Type('poword')='O' + poWord.Quit + Release poWord + Endif + If xeroare.ErrorNo = 1429 + amessagebox('Fisierul ' + lcDocumentMarca+ ' este deja deschis!',16,"Eroare") + Endif + Finally + Endtry + + If Type('xeroare') = 'O' + Release xeroare + Return + Endif + + Local loSelection,lcVariabila,lcValoare,loDoc + lcValoare = [] + loTherm = Newobject("_thermometer","_therm","","Completare document ...") + lcTask = "Document ..." + loDoc = Createobject('empty') + With loTherm + .AlwaysOnTop=.T. + .Show() + lnPercent = 5 + .Update(lnPercent, lcTask) + + For i= poWord.ActiveDocument.Fields.Count To 1 Step -1 + lnPercent = 100 / i + .Update(lnPercent, lcTask) + poWord.ActiveDocument.Fields(i).Select + loSelection = poWord.Selection + lcVariabila = loSelection.Text + *!* modificare ROARES v 2.0.14 + *!* If Type('loDoc.&cVariabila')='U' + *!* Select (lcCursor) + *!* Locate For Upper(Alltrim(variabila))=Upper(lcVariabila) + *!* If Found() + *!* lcValoare = Alltrim(valoare) + *!* Endif + *!* If Empty(NVL(lcValoare,[])) + *!* lcValoare = Replicate(Chr(95),13) + *!* Endif + *!* =AddProperty(loDoc,lcVariabila,lcValoare) + *!* Endif + *!* loSelection.Cut + *!* loSelection.InsertBefore(loDoc.&lcVariabila) + If Type('loDoc.&cVariabila')='U' + Select (lcCursor) + Locate For Upper(Alltrim(variabila))=Upper(lcVariabila) + If Found() + lcValoare = Alltrim(valoare) + If Empty(Nvl(lcValoare,[])) + lcValoare = Replicate(Chr(95),13) + Endif + =AddProperty(loDoc,lcVariabila,lcValoare) + loSelection.Cut + loSelection.InsertBefore(loDoc.&lcVariabila) + ELSE + IF UPPER(lcVariabila)= 'TABLE' + DO CASE + CASE toObiect.id_referinta = -2 + + loselection.ConvertToTable(,1,7,,,,,,,,,,,2) + loselection.Tables(1).Style = 'Table grid' + loSelection.ParagraphFormat.Alignment = 2 + loselection.TypeText("An") +*!* loselection.InsertColumnsRight + loSelection.MoveRight + loselection.TypeText("Luna") + loSelection.MoveRight + loselection.TypeText("Baza de calcul") + loSelection.MoveRight + loselection.TypeText("Contrib. individuala") + loSelection.MoveRight + loselection.TypeText("Contrib. angajator") + loSelection.MoveRight + loselection.TypeText("Nr. ireg delc.lunara") + loSelection.MoveRight + loselection.TypeText("Nat venituri baza calcul") + + loselection.InsertRowsBelow(1) + loselection.TypeText("1") + loSelection.MoveRight(1) + loselection.TypeText("2") + loSelection.MoveRight(1) + loselection.TypeText("3") + loSelection.MoveRight(1) + loselection.TypeText("4") + loSelection.MoveRight(1) + loselection.TypeText("5") + loSelection.MoveRight(1) + loselection.TypeText("6") + loSelection.MoveRight(1) + loselection.TypeText("7") + + + SELECT crs_venituri + SCAN + SCATTER NAME lovenit + loselection.InsertRowsBelow(1) + loselection.TypeText(ALLTRIM(STR(loVenit.an))) + loSelection.MoveRight(1) + loselection.TypeText(ALLTRIM(STR(loVenit.luna))) + loSelection.MoveRight(1) + loselection.TypeText(ALLTRIM(STR(NVL(loVenit.baza,0)))) + loSelection.MoveRight(1) + loselection.TypeText(ALLTRIM(STR(NVL(loVenit.somaj,0)))) + loSelection.MoveRight(1) + loselection.TypeText(ALLTRIM(STR(NVL(loVenit.somsoc,0)))) + loSelection.MoveRight(1) + loselection.TypeText(ALLTRIM(NVL(loVenit.nrdata112,''))) + loSelection.MoveRight(1) + loselection.TypeText("Venituri din salarii") + ENDSCAN +*!* loSelection.Tables(1).AutoFitBehavior(1) + + CASE toObiect.id_referinta = -11 + + loselection.ConvertToTable(,1,6,,,,,,,,,,,2) + loselection.Tables(1).Style = 'Table grid' + loSelection.ParagraphFormat.Alignment = 2 + loselection.TypeText("Nr. Crt") + loSelection.MoveRight + loselection.TypeText("Luna si Anul") + loSelection.MoveRight + loselection.TypeText("Baza de calcul contributie asiguratorie pentru munca (BC)") + loSelection.MoveRight + loselection.TypeText("Baza de calcul al indemnizatiei de somaj (BCIS)") + loSelection.MoveRight + loselection.TypeText("Numarul de inregistrare a declaratiei lunare validate") + loSelection.MoveRight + loselection.TypeText("Natura veniturilor din care este constituita baza de calcul al indemnizatiei de somaj") + + loselection.InsertRowsBelow(1) + loselection.TypeText("1") + loSelection.MoveRight(1) + loselection.TypeText("2") + loSelection.MoveRight(1) + loselection.TypeText("3") + loSelection.MoveRight(1) + loselection.TypeText("4") + loSelection.MoveRight(1) + loselection.TypeText("5") + loSelection.MoveRight(1) + loselection.TypeText("6") + lnNr = 0 + + + + SELECT crs_venituri + SCAN + SCATTER NAME lovenit + lnNr = lnNr +1 + loselection.InsertRowsBelow(1) + loselection.TypeText(ALLTRIM(STR(lnNr))) + loSelection.MoveRight(1) + loselection.TypeText(ALLTRIM(STR(loVenit.luna))+"/ "+ALLTRIM(STR(loVenit.an))) + loSelection.MoveRight(1) +*!* loselection.TypeText(ALLTRIM(STR(NVL(loVenit.somsoc,0)))) + loselection.TypeText(ALLTRIM(STR(NVL(loVenit.baza,0)))) + loSelection.MoveRight(1) + loselection.TypeText(ALLTRIM(STR(NVL(loVenit.baza,0)))) + loSelection.MoveRight(1) + loselection.TypeText(ALLTRIM(NVL(loVenit.nrdata112,''))) + loSelection.MoveRight(1) + loselection.TypeText("Venituri din salarii") + ENDSCAN +*!* loSelection.Tables(1).AutoFitBehavior(1) + + CASE toObiect.id_referinta = -1 + + loselection.ConvertToTable(,1,6,,,,,,,,,,,2) + loselection.Tables(1).Style = 'Table grid' + loSelection.ParagraphFormat.Alignment = 2 + loselection.TypeText("An") + loSelection.MoveRight + loselection.TypeText("Luna") + loSelection.MoveRight + loselection.TypeText("Salariu incadrare") + loSelection.MoveRight + loselection.TypeText("Brut") + loSelection.MoveRight + loselection.TypeText("Net") + loSelection.MoveRight + loselection.TypeText("Norma zilnica") + SELECT crs_venituri + SCAN + SCATTER NAME lovenit + loselection.InsertRowsBelow(1) + loselection.TypeText(ALLTRIM(STR(loVenit.an))) + loSelection.MoveRight(1) + loselection.TypeText(ALLTRIM(STR(loVenit.luna))) + loSelection.MoveRight(1) + loselection.TypeText(ALLTRIM(STR(loVenit.tarifar))) + loSelection.MoveRight(1) + loselection.TypeText(ALLTRIM(STR(loVenit.totbrut))) + loSelection.MoveRight(1) + loselection.TypeText(ALLTRIM(STR(loVenit.net))) + loSelection.MoveRight(1) + loselection.TypeText(ALLTRIM(STR(IIF(EMPTY(NVL(loVenit.fractie,0)),8,loVenit.fractie)))) + ENDSCAN + loSelection.Tables(1).AutoFitBehavior(1) + CASE toObiect.id_referinta = -5 + + loselection.ConvertToTable(,1,4,,,,,,,,,,,2) + loselection.Tables(1).Style = 'Table grid' + loSelection.ParagraphFormat.Alignment = 2 + loselection.TypeText("An") + loSelection.MoveRight + loselection.TypeText("Luna") + loSelection.MoveRight + loselection.TypeText("Ore noapte") + loSelection.MoveRight + loselection.TypeText("Spor noapte") + SELECT crs_venituri + SCAN + SCATTER NAME lovenit + loselection.InsertRowsBelow(1) + loselection.TypeText(ALLTRIM(STR(loVenit.an))) + loSelection.MoveRight(1) + loselection.TypeText(ALLTRIM(STR(loVenit.luna))) + loSelection.MoveRight(1) + loselection.TypeText(ALLTRIM(STR(loVenit.orenoapte))) + loSelection.MoveRight(1) + loselection.TypeText(ALLTRIM(STR(ROUND(calcul_sumaore(loVenit.tarif_ora,loVenit.orenoapte,loVenit.c_orenoapte),2),16,2))) + ENDSCAN + loSelection.Tables(1).AutoFitBehavior(1) + CASE toObiect.id_referinta = -6 + + loselection.ConvertToTable(,1,6,,,,,,,,,,,2) + loselection.Tables(1).Style = 'Table grid' + + loselection.TypeText("Nr. Crt") + loSelection.MoveRight + loselection.TypeText("Mutatia Intervenita") + loSelection.MoveRight + loselection.TypeText("Zi/Luna/An") + loSelection.MoveRight + loselection.TypeText("Meseria / Functia") + loSelection.MoveRight + loSelection.ParagraphFormat.Alignment = 2 + loselection.TypeText("Salariu de baza, inclusiv sporurile care intra n calculul punctajului mediu anual") + loSelection.MoveRight + loselection.TypeText("Nr. si data actului pe baza caruia se face nscrierea si temeiul legal") + SELECT crs_venituri + lnNr = 0 + SCAN FOR tipactualizare <> 'Corectie' + lnNr = lnNr +1 + SCATTER NAME lovenit MEMO + loselection.InsertRowsBelow(1) + loselection.TypeText(ALLTRIM(STR(lnNr))) + loSelection.MoveRight(1) + lcMotivatie = [] +*!* v2.1.7 - nu punea corect "incheiere CIM" +*!* lcMotivatie = IIF(lnNr =1,IIF(YEAR(lovenit.dataang)*12+MONTH(lovenit.dataang)<=VAL(ALLTRIM(SUBSTR(lovenit.VECHIME,7,4)))*12+VAL(ALLTRIM(SUBSTR(lovenit.VECHIME,4,2))),'Continuare CIM','Incheiere CIM'),IIF(ALLTRIM(SUBSTR(lovenit.VECHIME,1,10)) = ALLTRIM(SUBSTR(lovenit.VECHIME,13,11)),'Incetare CIM','Modificare CIM')) + lcMotivatie = IIF(lnNr =1,IIF(YEAR(lovenit.dataang)*12+MONTH(lovenit.dataang)<=2011*12+1,'Continuare CIM','Incheiere CIM'),; + IIF(YEAR(lovenit.dataincetare)*12+MONTH(lovenit.dataincetare) = VAL(ALLTRIM(SUBSTR(lovenit.VECHIME,20,4)))*12+VAL(ALLTRIM(SUBSTR(lovenit.VECHIME,17,2))) and ; + DAY(lovenit.dataincetare) = VAL(ALLTRIM(SUBSTR(lovenit.VECHIME,14,2))),'Incetare CIM','Modificare CIM')) + + IF ALLTRIM(SUBSTR(lovenit.VECHIME,1,10)) = ALLTRIM(SUBSTR(lovenit.VECHIME,13,11)) + lcMotivatie = lcMotivatie + [ cf. ]+NVL(ALLTRIM(lovenit.temeiincetare) ,[ ]) +[ din Codul Muncii] + ENDIF + SELECT crs_venituri + loselection.TypeText(ALLTRIM(lcMotivatie)) + loSelection.MoveRight(1) + loselection.TypeText(IIF(YEAR(lovenit.dataincetare) = VAL(ALLTRIM(SUBSTR(lovenit.VECHIME,20,4))) and ; + MONTH(lovenit.dataincetare) = VAL(ALLTRIM(SUBSTR(lovenit.VECHIME,17,2))); + and DAY(lovenit.dataincetare) = VAL(ALLTRIM(SUBSTR(lovenit.VECHIME,14,2))),SUBSTR(lovenit.VECHIME,14,10),SUBSTR(lovenit.VECHIME,1,10))) + loSelection.MoveRight(1) + loselection.TypeText(PROPER(ALLTRIM(loVenit.meserie))) + loSelection.MoveRight(1) + loselection.TypeText(ALLTRIM(TRANSFORM(loVenit.salariu))) + loSelection.MoveRight(1) + IF lnNr = 1 + loselection.TypeText(NVL(ALLTRIM(loVenit.tipactmodif),[CONTRACT ])+[ nr: ]+; + IIF(!EMPTY(ALLTRIM(TRANSFORM(loVenit.nractmodif))),NVL(ALLTRIM(TRANSFORM(loVenit.nractmodif)),ALLTRIM(STR(NVL(loVenit.nrCtr,0)))),ALLTRIM(STR(NVL(loVenit.nrCtr,0))))+; + [ / ]+IIF(!EMPTY(ALLTRIM(TRANSFORM(TTOD(loVenit.dataactmodif)))),NVL(ALLTRIM(TRANSFORM(TTOD(loVenit.dataactmodif))),NVL(ALLTRIM(TRANSFORM(TTOD(loVenit.dataang))),[])),; + NVL(ALLTRIM(TRANSFORM(TTOD(loVenit.dataang))),[]))) + + ELSE + loselection.TypeText(NVL(ALLTRIM(loVenit.tipactmodif),[])+[ nr: ]+NVL(ALLTRIM(TRANSFORM(loVenit.nractmodif)),[])+[ / ]+NVL(ALLTRIM(TRANSFORM(TTOD(loVenit.dataactmodif))),[])) + ENDIF + ENDSCAN + loSelection.Tables(1).AutoFitBehavior(1) + CASE toObiect.id_referinta = -7 + loselection.Font.Color = -603914241 + SELECT crsmoditarifar + SCAN + SCATTER NAME lovenit + loselection.InsertRowsBelow(1) + loselection.TypeText(ALLTRIM(STR(RECNO()))) + loSelection.MoveRight(1) + loselection.TypeText(ALLTRIM(loVenit.nume)+[ ]+ALLTRIM(loVenit.prenume)) + loSelection.MoveRight(1) + loselection.TypeText(ALLTRIM(loVenit.codpers)) + loSelection.MoveRight(1) + loselection.TypeText(ALLTRIM(STR(NVL(loVenit.tarifar_nou,0)))) + ENDSCAN + CASE toObiect.id_referinta = -12 + + loselection.ConvertToTable(,1,4,,,,,,,,,,,2) + loselection.Tables(1).Style = 'Table grid' + loSelection.ParagraphFormat.Alignment = 2 + loselection.TypeText("An") + loSelection.MoveRight + loselection.TypeText("Luna") + loSelection.MoveRight + loselection.TypeText("Salariu de baza") + loSelection.MoveRight + loselection.TypeText("Total brut") + SELECT crs_venituri + SCAN + SCATTER NAME lovenit + loselection.InsertRowsBelow(1) + loselection.TypeText(ALLTRIM(STR(loVenit.an))) + loSelection.MoveRight(1) + loselection.TypeText(ALLTRIM(STR(loVenit.luna))) + loSelection.MoveRight(1) + loselection.TypeText(ALLTRIM(STR(loVenit.tarifar))) + loSelection.MoveRight(1) + loselection.TypeText(ALLTRIM(STR(loVenit.totbrut))) + ENDSCAN + loSelection.Tables(1).AutoFitBehavior(1) + CASE toObiect.id_referinta = -13 + + loselection.ConvertToTable(,1,5,,,,,,,,,,,2) + loselection.Tables(1).Style = 'Table grid' + loSelection.ParagraphFormat.Alignment = 2 + loselection.TypeText("An") + loSelection.MoveRight + loselection.TypeText("Luna") + loSelection.MoveRight + loselection.TypeText("Total brut") + loSelection.MoveRight + loselection.TypeText("Zile lucrate") + loSelection.MoveRight + loselection.TypeText("Zile CM") + SELECT crs_bazeCM + SCAN + SCATTER NAME lovenit + loselection.InsertRowsBelow(1) + loselection.TypeText(ALLTRIM(STR(loVenit.an))) + loSelection.MoveRight(1) + loselection.TypeText(ALLTRIM(STR(loVenit.luna))) + loSelection.MoveRight(1) + loselection.TypeText(ALLTRIM(STR(loVenit.totbrut))) + loSelection.MoveRight(1) + loselection.TypeText(ALLTRIM(STR(loVenit.zileluc))) + loSelection.MoveRight(1) + loselection.TypeText(ALLTRIM(STR(loVenit.zilecm))) + ENDSCAN + *loSelection.Tables(1).AutoFitBehavior(1) + CASE toObiect.id_referinta = -14 + + loselection.ConvertToTable(,1,4,,,,,,,,,,,2) + loselection.Tables(1).Style = 'Table grid' + loSelection.ParagraphFormat.Alignment = 2 + loselection.TypeText("An") + loSelection.MoveRight + loselection.TypeText("Luna") + loSelection.MoveRight + loselection.TypeText("Baza de calcul") + loSelection.MoveRight + loselection.TypeText("CAS") + + SELECT crs_bazeCas + SCAN + SCATTER NAME lovenit + loselection.InsertRowsBelow(1) + loselection.TypeText(ALLTRIM(STR(loVenit.an))) + loSelection.MoveRight(1) + loselection.TypeText(ALLTRIM(STR(loVenit.luna))) + loSelection.MoveRight(1) + loselection.TypeText(ALLTRIM(STR(loVenit.baza_cas))) + loSelection.MoveRight(1) + loselection.TypeText(ALLTRIM(STR(loVenit.scas))) + + ENDSCAN + loSelection.Tables(1).AutoFitBehavior(1) + CASE UPPER(ALLTRIM(toObiect.nume_fisier)) = 'ADEVERINTA2.DOC' + + loselection.ConvertToTable(,1,3,,,,,,,,,,,2) + loselection.Tables(1).Style = 'Table grid' + loSelection.ParagraphFormat.Alignment = 2 + loselection.TypeText("Cod de indemnizatie") + loSelection.MoveRight + loselection.TypeText("Numar zile concediu medical n ultimele 12/24 luni") + loSelection.MoveRight + loselection.TypeText("Seria si numarul certificatului de concediu medical anterior****), pentru codul de diagnostic . . . . . . . . , valabil pna la . . . . . . . . . . ") + SELECT crsCmuri + SCAN + SCATTER NAME loCM + loselection.InsertRowsBelow(1) + loselection.TypeText(ALLTRIM(loCM.cod)) + loSelection.MoveRight(1) + loselection.TypeText(ALLTRIM(STR(loCM.zilecm))) + loSelection.MoveRight(1) +*!* loselection.TypeText(ALLTRIM(loCM.perioada)) + loselection.TypeText(" ") + + ENDSCAN + loSelection.Tables(1).AutoFitBehavior(1) + OTHERWISE + 1=1 + + + ENDCASE + + ENDIF + IF UPPER(lcVariabila)= 'TABLE2' + *---------- + DO CASE + CASE INLIST(toObiect.id_referinta ,-2,-11) + + loselection.ConvertToTable(,1,3,,,,,,,,,,,2) + loselection.Tables(1).Style = 'Table grid' + loSelection.ParagraphFormat.Alignment = 2 + loselection.TypeText("Data inceput") + *!* loselection.InsertColumnsRight + loSelection.MoveRight + loselection.TypeText("Data sfarsit") + loSelection.MoveRight + loSelection.ParagraphFormat.Alignment = 0 + loselection.TypeText("Motiv suspendare") + + + SELECT crs_concediiSuspendari + SCAN + SCATTER NAME loSuspendare MEMO + loselection.InsertRowsBelow(1) + loselection.TypeText(NVL(ALLTRIM(TRANSFORM(TTOD(loSuspendare.datainc))),[])) + loSelection.MoveRight(1) + loselection.TypeText(NVL(ALLTRIM(TRANSFORM(TTOD(loSuspendare.datasf))),[])) + loSelection.MoveRight(1) + loselection.TypeText(PROPER(ALLTRIM(loSuspendare.temei))) + ENDSCAN + RELEASE loSuspendare + USE IN crs_concediiSuspendari + *!* loSelection.Tables(1).AutoFitBehavior(1) + OTHERWISE + 1 = 1 + ENDCASE + + *----------- + ENDIF + Endif + ELSE + + loSelection.Cut + loSelection.InsertBefore(loDoc.&lcVariabila) + Endif + *!* modificare ROARES v 2.0.14 ^ + Endfor + If Used(lcCursor) + Use In (lcCursor) + ENDIF + lnPercent = 100 + .Update(lnPercent, lcTask) + .Complete() + .AlwaysOnTop=.F. + Endwith + Release loTherm + _Screen.MousePointer= 0 + + poWord.Visible =.T. + poWord = .Null. + Release poWord,lcVariabila,lcValoare,loSelection,lcDocumentMarca,lcSQl,lcCursor,lnSucces,loDoc +Endproc +****************************************************************************************************** +Procedure template_citeste_meniu + Lparameters tnTip + SET STEP ON + Local lcSQl, lnSucces, lcNumeCursor, lcMeniu, lnOptiune, lcView + lcNumeCursor = [crsmeniutempl] + If gnIdProgram = 75 + lcView = [sal_vdocumente_ss] && ROASALSPEC / 75 + Else + lcView = [sal_vdocumente_ru] && ROARES / 4 + Endif + lcSQl = [select row_number() over(order by ordine) as nr, id_referinta, descriere from ] + lcView + [ ] + ; + [where id_entitate = ] + ALLTRIM(STR(tnTip)) + [ order by ordine] + lnSucces = goExecutor.oExecute(lcSQl,lcNumeCursor) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,16,"Eroare") + Else + If Reccount(lcNumeCursor) > 0 + lcMeniu = [] + Select (lcNumeCursor) + Scan + lcMeniu = lcMeniu + [;] + Alltrim(descriere) + Endscan + lnOptiune = xmenu(SUBSTR(lcMeniu,2)) + Select (lcNumeCursor) + Locate For nr = lnOptiune + If Found() + template_selecteaza(id_referinta) + Endif + Else + amessagebox("Nu ati definit alte formulare!",48,"Atentie") + Endif + Use In (lcNumeCursor) + Endif + Release lcSQl, lnSucces, lcNumeCursor, lcMeniu, lnOptiune +Endproc +****************************************************************************************************** +*!* && ------------------------------INCEPUT: Fise_personal------------------------------ +*!* *!* Procedura: Fise_personal +*!* *!* Parametri: tcFile,tcPath,tcFileName,tcSelect +*!* *!* Data/Ora generarii: 04/09/06 01:40:26 PM +*!* *!* Autor: NEAGU.CATALIN +*!* Procedure fise_personal +*!* Lparameters tcFile,tcPath,tcNume,tnid,tcCond +*!* +*!* IF TYPE('tcCond') <> 'C' +*!* tcCond = '' +*!* ENDIF +*!* +*!* Local lcDocument,lnid + +*!* Private oWord +*!* lcDocument = tcFile +*!* cDocument = tcPath +*!* lnid=tnid + +*!* cDocumMarca = Addbs(gcTempPath) + Alltrim(tcNume) +*!* If !File(cDocument) +*!* If File(lcDocument) +*!* Copy File (lcDocument) To (cDocument) +*!* Else +*!* aMessagebox("Nu exista fisierul "+lcDocument,16,"Eroare") +*!* Return +*!* Endif +*!* Endif + +*!* If File(cDocumMarca) +*!* Delete File (cDocumMarca) +*!* Endif +*!* Copy File (cDocument) To (cDocumMarca) && + + +*!* *!* STRTOFILE(gcs+';'+ALLTRIM(STR(lcid))+';'+ALLTRIM(STR(pnId_F_contract)),'c:\conpressh.txt') +*!* *!* RETURN +*!* lcSQl = [{call pack_personal.contract_munca(?gcS,]+ALLTRIM(STR(lnid))+[,?pnId_F_contract,']+ALLTRIM(tcCond)+[')}] + +*!* lcCursor = 'crs_test' +*!* lnSucces = goExecutor.oExecute(lcSQl,lcCursor) + +*!* If lnSucces < 0 +*!* aMessagebox(goExecutor.cEroare,0+16,"Eroare") +*!* ENDIF +*!* Local xeroare As Exception + +*!* Try +*!* oWord = Createobject('word.application') +*!* oDocument = oWord.Documents.Open(cDocumMarca) +*!* oWord.Caption = "Contract de munca" +*!* Catch To xeroare +*!* If Type('oword')='O' +*!* oWord.Quit +*!* Release oWord +*!* Endif +*!* If xeroare.ErrorNo = 1429 +*!* aMessagebox('Fisierul ' + cDocumMarca + ' este deja deschis!',16,"Eroare") +*!* Endif + +*!* Finally +*!* Endtry + + +*!* If Type('xeroare') = 'O' +*!* Release xeroare +*!* Return +*!* Endif + + +*!* Local lncount,lObj,lcValoare +*!* lcValoare='' +*!* lncount=0 +*!* Doc = Createobject('empty') + +*!* lncount = oWord.ActiveDocument.Fields.Count +*!* For i=lncount To 1 Step -1 +*!* oWord.ActiveDocument.Fields(i).Select +*!* loSelection=oWord.Selection +*!* lcVariabila=loSelection.Text +*!* If Type('Doc.&lcValoare')='U' +*!* Select crs_test +*!* Locate For Upper(Alltrim(variabila))=Upper(lcVariabila) +*!* If Found() +*!* lcValoare = Alltrim(valoare) +*!* Endif +*!* If Empty(lcValoare) Or Isnull(lcValoare) +*!* lcValoare = Replicate(Chr(95),13) +*!* Endif +*!* =AddProperty(Doc,lcVariabila,lcValoare) +*!* Endif +*!* loSelection.Cut +*!* loSelection.InsertBefore(Doc.&lcVariabila) + +*!* Endfor + + +*!* oWord.Visible =.T. + + +*!* *!* wordFindAndreplace("s1","Costica Popescu") && Exemplu +*!* *!* oWord.QUIT +*!* oWord = .Null. +*!* Release oWord +*!* Release Doc,loSelection + +*!* Return && de facut: scrie valoare de retur + +*!* Endproc +&& ------------------------------SFARSIT: Fise_personal------------------------------ + + +******************************************************** +PROCEDURE update_tichete + + If Used('v_tichetemasa') + Use In v_formatia + Endif + + lcSQl = [select * from ] + gcs + [.sal_vnom_tichete where inactiv = 0] + lcCursor = [v_tichete] + lnSucces = goExecutor.oExecute(lcSQl,lcCursor) + goExecutor.oReset() + + Return lnSucces + +ENDPROC +******************************************************** +Procedure config_campdoc + Private pcschema1,pcselect1 + Store '' To pcschema1,pcselect1 + pcschema1=[''] + pcselect1=['select * from ] + gcs + [.sal_v_contract where 1=2'] + ocon = Createobject('frm_campdoc') + With ocon.ct_grid_search1 + .cSelect = pcselect1 + .cSchema = pcschema1 + .cTitlu_coloane = 'Reper,Descriere,Valoare,Tabela,Camp_id,DinSchema' + .cNume_coloane = 'variabila;descriere;valoare;tabela;camp_id;dinschema' + .cMask = '[1]=;[2]=;[3]=;[4]=;[5]=;[6]=replicate([9],1)' + IF gnIdProgram = 75 + .cFiltruOriginal = "REGEXP_LIKE(variabila, '^N|SS')" && N, SS + ELSE + .cFiltruOriginal = "REGEXP_LIKE(variabila, '^[SN][0-9]')" && N, S + ENDIF + *!* .cFiltruOriginal = [2=2] + .cOrder = 'descriere' + .cTitlu = 'Configurare' + Endwith + ocon.Show(1) + Release ocon + +Endproc +*************************************************************** + +PROCEDURE actualizez_coeficienti_xml + PARAMETERS tlupdate + SET STEP ON + DO CASE + CASE m.GnAn * 12 + m.GnLuna >= 2019*12+1 + PRIVATE poCoef,pozile + LOCAL lnCaen,lnNr,llGasit,lnLungime,lcString,llCaenGasit + Store '' To pozile + pcschema2=[''] + pcselect2=[select * from ] + gcS + [.sal_calendar where 1=2] + pcorder2=[luna,an] + pcfiltru2 = [luna = ] + Alltrim(Str(GnLuna)) + [ and an = ]+Alltrim(Str(GnAn)) + llAfiseaza = .F. + gencursor('pozile','v_coef',pcselect2,pcfiltru2,pcschema2,pcorder2,llAfiseaza) + pozile.ca_baza1.afisare() + Select v_coef + Scatter Name poCoef + Use In (Select('v_coef')) + + LOCAL llUpdate,lcFisierXML,lnPos,lcComunPath ,llSucces ,lcPath ,llOpen ,lcXML ,lnLunaCoeficientiXml,lnc_faambp + Local loXMLRequest as "Msxml2.xmlhttp" + + IF PCOUNT() <> 1 + llUpdate = .t. + ELSE + llUpdate = tlupdate + ENDIF + + lnPos = Rat("\", Addbs(m.gcAppPath), 2) + If lnPos > 0 + lcComunPath = Left(m.gcAppPath, lnPos) + ENDIF + + + lcComunPath = lcComunPath + Iif(gcAppName = "CONSAL", "COMUNCONTAFIN\", "COMUNROA\") && d:\contafin\comuncontafin\ + + lcFisierXML= Alltrim(Transform(m.lcComunPath + "coeficienti.xml")) + + + lcPath = Addbs(Justpath(m.lcFisierXML)) + llOpen = .F. + llSucces = DownloadSupportFile("coeficienti.xml", m.lcPath, m.llOpen) && proceduri_comune.prg + + If m.llSucces + lcMesaj = m.lcFisierXML+ ' Actualizare cu succes.' + Else + lcMesaj = m.lcFisierXML+ ' ATENTIE: Nu s-a actualizat!' + Endif && m.llSucces + + IF !FILE(m.lcFisierXML) + RETURN + ENDIF + XMLTOCURSOR(m.lcFisierXML,"crsCoeficientiXML",512) + SELECT crsCoeficientiXML + *!* BROWSE + + select MAX(an*12+luna) as luna from crsCoeficientiXML WHERE an*12+luna <= m.GnAn*12+m.GnLuna INTO CURSOR crsCoeficientiDinLuna + SELECT crsCoeficientiDinLuna + lnLunaCoeficientiXml = crsCoeficientiDinLuna.luna + Use In (Select('crsCoeficientiDinLuna')) + + *!* loXMLRequest = CreateObject("Msxml2.xmlhttp") + Try + loXMLRequest = CreateObject("MSXML2.XMLHTTP.6.0") + Catch + loXMLRequest = CreateObject("MSXML2.XMLHTTP.3.0") + Endtry + loXMLRequest.open("GET", m.lcFisierXML, .F.) + loXMLRequest.send(.null.) + lcXML = loXMLRequest.responseText + lnNrCoeficienti = OCCURS([], lcXML) + + + FOR lnI = 1 TO lnNrCoeficienti + + + SELECT crsCoeficientiXML + GOTO lnI + IF an*12+luna = lnLunaCoeficientiXml + SCATTER NAME localen + IF GnAn*12+GnLuna > 2018*12+12 && incepand cu 2018 nu mai exista fond de risc si accidente, iar deducerile le actualizez prin script + lcExtract = [] + STREXTRACT(lcXML, '', '', lnI) + [] + XMLTOCURSOR(lcExtract, 'crsCoef_diferiti') + SELECT crsCoef_diferiti + IF ISNULL(poCoef.oug114_2018) + LOCATE FOR UPPER(ALLTRIM(constructii)) = "T" + IF FOUND() + *------------cauta caenul firmei in lista predefinita din xml + lnNr = OCCURS(",",crsCoef_diferiti.caen) + lnCaen = ALLTRIM(TRANSFORM(gofirma.caen)) + FOR i=0 TO lnNr-1 + IF i=0 + lcString=left(crsCoef_diferiti.caen,AT(',',crsCoef_diferiti.caen,1)-1) + ELSE + + lcString=SUBSTR(crsCoef_diferiti.caen,AT(',',crsCoef_diferiti.caen,i)+1,AT(',',crsCoef_diferiti.caen,i+1)-AT(',',crsCoef_diferiti.caen,i)-1) + ENDIF + lnLungime = LEN(lcString) + IF LEFT(lnCaen,lnLungime )= lcString + llCaenGasit = .t. + IF aMESSAGEBOX('Codului Caen: '+lnCaen +' i se pot aplica prevederile OUG 114/28.12.2018?',4,'Atentie!') = 6 + poCoef.oug114_2018 = 1 + ELSE + poCoef.oug114_2018 = 0 + ENDIF + EXIT + ENDIF + + ENDFOR + IF !llCaenGasit + poCoef.oug114_2018 = 0 + ENDIF + *------------cauta caenul firmei in lista predefinita din xml + + + ENDIF + + *!* 04.01.2016 - introducere deduceri in xml + +*!* Use In (Select('crsDeduceri')) +*!* lcExtract = [] + STREXTRACT(lcXML, '', '', lnI) + [] +*!* XMLTOCURSOR(lcExtract, 'crsDeduceri') +*!* SELECT crsDeduceri + *!* ^ 04.01.2016 - introducere deduceri in xml + lnc_faambp = 0 + ELSE + lnc_faambp = 0 + ENDIF + ADDPROPERTY(poCoef,'impozit',0.1) + + SELECT crsCoef_diferiti + LOCATE FOR UPPER(ALLTRIM(constructii)) = IIF(poCoef.oug114_2018=1,'T','F') + IF FOUND() + poCoef.c_soms = crsCoef_diferiti.c_soms + poCoef.salmin= crsCoef_diferiti.salmin + poCoef.c_casp = crsCoef_diferiti.c_casp + poCoef.c_medp= crsCoef_diferiti.c_medp + poCoef.impozit = crsCoef_diferiti.impozit + ENDIF + Use In (Select('crsCoef_diferiti')) + + EXIT + ENDIF + + ENDIF + ENDFOR + + Use In (Select('crsCoeficientiXML')) + IF llUpdate + poCoef.orestas = localen.orestas && nu se actualizeaza prin oproceduri_roadef_sal.prg , am pus-o sa fie &&v2.0.53 + poCoef.c_meds = localen.c_meds + poCoef.c_somp = localen.c_somp + poCoef.salmed = localen.salmed + poCoef.c_munca = IIF(TYPE('localen.c_munca')='L',IIF(localen.c_munca,1,0),localen.c_munca) + poCoef.dedl1 = localen.dedl1 + poCoef.dedl2 = localen.dedl2 + poCoef.dedper = localen.dedper && nu se foloseste in calcul salarii, nu se actualizeaza INCA &&v2.0.53 + poCoef.c_dedper = localen.c_dedper && nu se foloseste in calcul salarii, nu se actualizeaza INCA &&v2.0.53 + poCoef.c_cheltpro = localen.c_cheltpro && nu se foloseste in calcul salarii, nu se actualizeaza INCA &&v2.0.53 + poCoef.c_faambp = lnc_faambp + poCoef.zilecmplang = localen.zilecmplang + poCoef.zilecmplangf = localen.zilecmplangf + poCoef.BAZA_INGR = IIF(TYPE('localen.BAZA_INGR')='L',IIF(localen.BAZA_INGR,1,0),localen.BAZA_INGR) + poCoef.c_cas1 = localen.c_cas1 + poCoef.c_cas2 = localen.c_cas2 + poCoef.c_cas3 = localen.c_cas3 + poCoef.FD_FNUASS = localen.FD_FNUASS + poCoef.C_FDGARANT = localen.C_FDGARANT + poCoef.diurnaneimp = localen.diurnaneimp + poCoef. salminstudii = localen. salminstudii + DO sal_coef IN oproceduri_roadef_sal.prg WITH .t. + ENDIF + Use In (Select('crsDeduceri')) + + CASE m.GnAn * 12 + m.GnLuna >= 2013*12+7 && este prima luna cu coeficienti in xml si nu as vrea sa suprascriu coeficientii pentru lunile mai vechi + PRIVATE poCoef,pozile + Store '' To pozile + pcschema2=[''] + pcselect2=[select * from ] + gcS + [.sal_calendar where 1=2] + pcorder2=[luna,an] + pcfiltru2 = [luna = ] + Alltrim(Str(GnLuna)) + [ and an = ]+Alltrim(Str(GnAn)) + llAfiseaza = .F. + gencursor('pozile','v_coef',pcselect2,pcfiltru2,pcschema2,pcorder2,llAfiseaza) + pozile.ca_baza1.afisare() + Select v_coef + Scatter Name poCoef + Use In (Select('v_coef')) + + LOCAL llUpdate,lcFisierXML,lnPos,lcComunPath ,llSucces ,lcPath ,llOpen ,lcXML ,lnLunaCoeficientiXml,lnc_faambp + Local loXMLRequest as "Msxml2.xmlhttp" + + IF PCOUNT() <> 1 + llUpdate = .t. + ELSE + llUpdate = tlupdate + ENDIF + + lnPos = Rat("\", Addbs(m.gcAppPath), 2) + If lnPos > 0 + lcComunPath = Left(m.gcAppPath, lnPos) + ENDIF + + + lcComunPath = lcComunPath + Iif(gcAppName = "CONSAL", "COMUNCONTAFIN\", "COMUNROA\") && d:\contafin\comuncontafin\ + + lcFisierXML= Alltrim(Transform(m.lcComunPath + "coeficienti.xml")) + + + lcPath = Addbs(Justpath(m.lcFisierXML)) + llOpen = .F. + llSucces = DownloadSupportFile("coeficienti.xml", m.lcPath, m.llOpen) && proceduri_comune.prg + + If m.llSucces + lcMesaj = m.lcFisierXML+ ' Actualizare cu succes.' + Else + lcMesaj = m.lcFisierXML+ ' ATENTIE: Nu s-a actualizat!' + Endif && m.llSucces + + IF !FILE(m.lcFisierXML) + RETURN + ENDIF + XMLTOCURSOR(m.lcFisierXML,"crsCoeficientiXML",512) + SELECT crsCoeficientiXML + *!* BROWSE + + select MAX(an*12+luna) as luna from crsCoeficientiXML WHERE an*12+luna <= m.GnAn*12+m.GnLuna INTO CURSOR crsCoeficientiDinLuna + SELECT crsCoeficientiDinLuna + lnLunaCoeficientiXml = crsCoeficientiDinLuna.luna + Use In (Select('crsCoeficientiDinLuna')) + + *!* loXMLRequest = CreateObject("Msxml2.xmlhttp") + Try + loXMLRequest = CreateObject("MSXML2.XMLHTTP.6.0") + Catch + loXMLRequest = CreateObject("MSXML2.XMLHTTP.3.0") + Endtry + loXMLRequest.open("GET", m.lcFisierXML, .F.) + loXMLRequest.send(.null.) + lcXML = loXMLRequest.responseText + lnNrCoeficienti = OCCURS([], lcXML) + + + FOR lnI = 1 TO lnNrCoeficienti + + + SELECT crsCoeficientiXML + GOTO lnI + IF an*12+luna = lnLunaCoeficientiXml + SCATTER NAME localen + IF GnAn*12+GnLuna < 2018*12+1 && incepand cu 2018 nu mai exista fond de risc si accidente, iar deducerile le actualizez prin script + lcExtract = [] + STREXTRACT(lcXML, '', '', lnI) + [] + XMLTOCURSOR(lcExtract, 'crsfaambp') + SELECT crsFaambp + LOCATE FOR ALLTRIM(TRANSFORM(caen)) = ALLTRIM(TRANSFORM(gofirma.caen)) + IF FOUND() + lnc_faambp = coef + ELSE + lnc_faambp = 0 &&15.01.2015 - dadea eroare daca firma nu avea completat codul caen + ENDIF + Use In (Select('crsfaambp')) + + *!* 04.01.2016 - introducere deduceri in xml + + Use In (Select('crsDeduceri')) + lcExtract = [] + STREXTRACT(lcXML, '', '', lnI) + [] + XMLTOCURSOR(lcExtract, 'crsDeduceri') + SELECT crsDeduceri + *!* ^ 04.01.2016 - introducere deduceri in xml + EXIT + ELSE + lnc_faambp = 0 + ENDIF + + + ENDIF + + + ENDFOR + + Use In (Select('crsCoeficientiXML')) + IF llUpdate + poCoef.orestas = localen.orestas && nu se actualizeaza prin oproceduri_roadef_sal.prg , am pus-o sa fie &&v2.0.53 + poCoef.c_meds = localen.c_meds + poCoef.c_medp = localen.c_medp + poCoef.c_soms = localen.c_soms + poCoef.c_somp = localen.c_somp + poCoef.c_casp = localen.c_casp + poCoef.salmin = localen.salmin + poCoef.salmed = localen.salmed + poCoef.c_munca = IIF(TYPE('localen.c_munca')='L',IIF(localen.c_munca,1,0),localen.c_munca) + poCoef.dedl1 = localen.dedl1 + poCoef.dedl2 = localen.dedl2 + poCoef.dedper = localen.dedper && nu se foloseste in calcul salarii, nu se actualizeaza INCA &&v2.0.53 + poCoef.c_dedper = localen.c_dedper && nu se foloseste in calcul salarii, nu se actualizeaza INCA &&v2.0.53 + poCoef.c_cheltpro = localen.c_cheltpro && nu se foloseste in calcul salarii, nu se actualizeaza INCA &&v2.0.53 + poCoef.c_faambp = lnc_faambp + poCoef.zilecmplang = localen.zilecmplang + poCoef.zilecmplangf = localen.zilecmplangf + poCoef.BAZA_INGR = IIF(TYPE('localen.BAZA_INGR')='L',IIF(localen.BAZA_INGR,1,0),localen.BAZA_INGR) + poCoef.c_cas1 = localen.c_cas1 + poCoef.c_cas2 = localen.c_cas2 + poCoef.c_cas3 = localen.c_cas3 + poCoef.FD_FNUASS = localen.FD_FNUASS + poCoef.C_FDGARANT = localen.C_FDGARANT + poCoef.diurnaneimp = localen.diurnaneimp + ADDPROPERTY(poCoef,'impozit',0) + poCoef.impozit=0 + DO sal_coef IN oproceduri_roadef_sal.prg WITH .t. + ENDIF + Use In (Select('crsDeduceri')) + OTHERWISE + 1=1 + ENDCASE +ENDPROC &&actualizez_coeficienti_xml + +******************************************************** +PROCEDURE updateNrData112 + + If Used('crs112') + Use In crs112 + Endif + +*!* lcSQl = [select id_calendar,an,luna,nrdata112 from sal_calendar order by an desc,luna desc] +*!* lcCursor = [crs112] +*!* lnSucces = goExecutor.oExecuta(lcSQl,lcCursor) + Private pod112,pcschema1,pcselect1 + Store '' To pod112 + pcschema1=[''] + pcselect1=['select id_calendar,an,luna,nrdata112 from sal_calendar where 1=2'] + pcorder1=[an desc,luna desc] + pcfiltru1 = [2=2] + llAfiseaza = .F. + gencursor('pod112','crs112',pcselect1,pcfiltru1,pcschema1,pcorder1,llAfiseaza) + pod112.ca_baza1.afisare() + + oNrData112 = Createobject('frm_completeznrdata112') + oNrData112.show(1) + + + If Used('crs112') + Use In crs112 + ENDIF + RELEASE pod112 +ENDPROC + + +******************************************* +* PROCEDURE config_spor( ) +* Date : 08/15/05, 13:44:09 +* author : liana.macinic +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* +PROCEDURE config_spor( ) +DO update_nom_sporuri IN update_salarii.prg +SELECT v_nomspor + +ofrm_spor = CREATEOBJECT('frm_conf_spor') +ofrm_spor.show(1) + + +ENDPROC +*----------------------------------sfarsit procedura config_spor---------------------------------- + +******************************************* +* PROCEDURE config_popr( ) +* Date : 08/15/05, 15:26:08 +* author : liana.macinic +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* +PROCEDURE config_popr( ) +DO update_nom_popr IN update_salarii.prg +SELECT v_nompopr + +ofrm_spor = CREATEOBJECT('frm_conf_popr') +ofrm_spor.show(1) + +ENDPROC +*----------------------------------sfarsit procedura config_popr---------------------------------- +**************************************************** +PROCEDURE update_sal_sarbat + If Used('sal_sarbat') + Use In sal_sarbat + ENDIF + + + + lcSQl = [select data,sarbatoare,id_sarbat from ] + gcS + [.sal_nom_sarbatori where sters = 0 ] + lcCursor = [sal_sarbat] + lnSucces = goExecutor.oExecute(lcSQl,lcCursor) + goExecutor.oReset() + + Return lnSucces + +ENDPROC + +*------------------------ +Function GetPozaFile + Lparameters tcFileName + * tcTip (sectiunea de unde se citesc directorul pdf): factura/contract => email_factura/email_contract + * tcFileName (numele fisierului): 20160210_123456 + * tcDefaultPrefix: daca se ataseaza un prefix la tcFileName. Se suprascrie cu cel din din setting.ini + * tcDefaultSufix: daca se ataseaza un sufix la tcFileName. Se suprascrie cu cel din din setting.ini + + Local lcDestinationFile, lcSection, lcFileName + Local lcPicturePath + + lcFileName = Iif(!Empty(m.tcFileName), Lower(Transform(m.tcFileName)), Sys(2015)) + lcSection = 'cale_poza_legitimatie' && [cale_poza_legitimatie] / [pdf_recapitulatia_acn] + lcPicturePath = goApp.ReadIni(m.lcSection, "pozapath") + + + If Empty(m.lcPicturePath) + lcPicturePath = Getdir("", "Alege director pentru stocarea imaginilor de pe legitimatie", "Director imagini", 64) + If Empty(m.lcPicturePath) + m.lcPicturePath = m.gcTempPath + Endif + goApp.WriteIni(m.lcSection, "pozapath", m.lcPicturePath) + Endif + + lcDestinationFile = Addbs(m.lcPicturePath) + m.lcFileName && contine si extensia + Return m.lcDestinationFile +Endfunc && GetPDFFile +*------------------------------------ + + + +**************************************************************************** +* Salveaza o imagine (ex: logo.jpg) in baza de date pentru a fi folosita la rapoarte +**************************************************************************** +PROCEDURE Image2Database + PARAMETERS tnIdPersoana + lcInputFile = GETFILE('Images:jpg,jpeg,bmp,png,gif,tiff', 'Alege un fisier', 'Alege',0, 'Alege un fisier') + lnId = 0 + llSucces = .F. + IF !EMPTY(m.lcInputFile) + lnId = File2Atasament(m.lcInputFile,,m.tnIdPersoana) + llSucces = (m.lnId > 0) + ENDIF + AMESSAGEBOX(IIF(m.llSucces, 'Imaginea s-a salvat cu succes in baza de date.','Imaginea NU s-a salvat in baza de date!'),0+64,_screen.Caption) + RETURN m.llSucces +ENDPROC && Image2Database + + +*************************************************** +* Citeste fisierul de pe disk si adauga atasament in baza de date atas_atasamente +* Se apeleaza cu calea completa a fisierului +* Intoarce id-ul atasamentului +*************************************************** +Function File2Atasament + Lparameters tcFile, tcDescriere,tnIdPersoana + + Private pcFileName, pnId, pcFile, pcDescriere + + Local lcSql, lcSqlIns, lcSqlUpd, llSucces + pnId = 0 + If !File(m.tcFile) + tcFile = GETFILE('','Alege un fisier','Alege',0,'Alege un fisier') + IF EMPTY(m.tcFile) + Return m.pnId + ENDIF + Endif + + pcFile = Filetostr(m.tcFile) + pcFileName = Lower(Justfname(m.tcFile)) + pcDescriere = Iif(!Empty(m.tcDescriere), Alltrim(m.tcDescriere), '') + + + lcSql = [SELECT id_legitimatie FROM sal_legitimatii WHERE id_salariat = ]+ALLTRIM(STR(tnIdPersoana))+[ and sters = 0] + lcSqlIns = [insert into sal_legitimatii (id_salariat ,fisier) values (?pcFile, ]+ALLTRIM(STR(tnIdPersoana))+[) returning id_legitimatie into ?@pnId] + lcSqlUpd = [UPDATE sal_legitimatii SET fisier = ?pcFile, id_salariat = ]+ALLTRIM(STR(tnIdPersoana))+[ WHERE id_legitimatie = ?pnId] + + llSucces = goExecutor.oExecuta(m.lcSql, 'crsAtasamenteTemp') + If m.llSucces + Do Case + Case Reccount('crsAtasamenteTemp') > 1 + amessagebox('Sunt mai multe inregistrari cu acelasi nume de fisier! Nu se salveaza!', 0 + 16, _Screen.Caption) + Case Reccount('crsAtasamenteTemp') = 1 + pnId = crsAtasamenteTemp.id_atas + Endcase + Use In (Select('crsAtasamenteTemp')) + + If Empty(m.pnId) + llSucces = goExecutor.oExecuta(m.lcSqlIns) + Else + llSucces = goExecutor.oExecuta(m.lcSqlUpd) + pnId = IIF(m.llSucces, m.pnId, 0) + Endif + Endif + + Return m.pnId + +Endfunc && File2Atasament diff --git a/COMUN/programe/oschimbare_pret.prg b/COMUN/programe/oschimbare_pret.prg new file mode 100644 index 0000000..8614fbe --- /dev/null +++ b/COMUN/programe/oschimbare_pret.prg @@ -0,0 +1,1194 @@ +*!* 11.01.2012 +*!* marius.mutu +*!* salvare proces verbal temporar in caz ca se da renunt sau programul iese cu eroare +*!* schimba_pret - proces verbal simplu (se repeta lans(52) + se face backup doar la cursorul crsschimb final) +*!* schimba_pret_grupa_gestiuni - proces verbal grupa de gestiuni cu/fara stoc actualizat (nu se repeta lans. se face backup la actactan, schimbpretstoc, crsschimb) + +*!* 12.01.2012 +*!* marius.mutu +*!* schimba_pret_grupa_gestiuni - proces verbal grupa de gestiuni cu/fara stoc actualizat +*!* pretvtva_orig = pretvtva din stoc +*!* pretvtva = pretul precedent introdus in formularul precedent schimbpret_grupa +*!* se facea comparatie intre pretvtva si pretvtva_orig pentru a se recalcula pretv si tvav + +*!* 12.07.2013 +*!* marius.mutu +*!* arata_stoc_schimbare - am repus selectia cumulata pentru gestiuni cu stoc neactualizat + +*!* 17.07.2013 +*!* marius.mutu +*!* relisteaza_schimbare_pret +*!* adaugat id_set 269 (pv schimbare pret pe baza de lista preturi) +*!* schimba_pret_grupa_gestiuni +*!* adaugat TIP = 4 instiintare de schimbare de pret * ( gestiuni cu stoc neactualizat ) + +*!* 10.06.2015 +*!* marius mutu +*!* relisteaza_schimbare_pret +*!* adaugat id_set 999 pv schimbare pret cu schimbare cota tva +*!* am grupat liniile sa nu mai apara separat iesirea si intrarea +*!* am pus listare cu plaja de numere in loc de un singur numar + +*!* 26.08.2015 +*!* marius.mutu +*!* listeaza_schimbare_pret +*!* corectie eroare - nu exista nract in unele cursoare +*!* #4201 + +*!* 04.08.2025 +*!* marius.mutu +*!* schimbare pret vanzare pe baza de lista de preturi +*!* arata_stoc_schimbare = se ia contul din stoc in loc de nom_articole + +PROCEDURE schimba_pret + lans(52) + *** sterg salvarea backupset-ului daca operatia se incheie cu Terminat + LOCAL loBackupXML + loBackupXML = CREATEOBJECT("BackupXML", "schimba_pret") && oproceduri_comune.prg + IF gnButon = 1 + loBackupXML.DeleteBackupSet() + ENDIF +ENDPROC && schimba_pret + +Procedure schimba_pret_grupa_gestiuni + Lparameters tnTip + *!* 1 - lista de preturi + *!* 2 - lista de preturi * ( gestiuni cu stoc neactualizat ) + *!* 3 - instiintare de schimbare de pret + *!* 4 - instiintare de schimbare de pret * ( gestiuni cu stoc neactualizat ) + + Local loIm, llPoliticaPreturi + LOCAL loBackupXML, lnReturn + Private poGeneratorNumere + poGeneratorNumere = Createobject('oGeneratorNumere') + llPoliticaPreturi = inlist(m.tnTip, 1, 2) + + *** REINCARCARE STARE PROCES VERBAL SCHIMBARE PRET SALVAT ANTERIOR IN FORMAT XML SI NETERMINAT (FATAL ERROR) + loBackupXML = CREATEOBJECT("BackupXML", "schimba_pret_grupa_gestiuni" + ALLTRIM(STR(tnTip))) && oproceduri_comune.prg + *** daca exista deja un backupset + IF loBackupXML.ExistsBackupSet() AND AMESSAGEBOX('Exista un proces verbal de schimbare de pret nesalvat. Doriti sa il continuati?', 4+32, _screen.Caption) = 6 + lnReturn = arata_stoc_schimbare(m.tnTip,.T.) + If m.lnReturn = 2 + poGeneratorNumere.dezaloca_numere() + Endif + ELSE + lnIdSet = iif(m.llPoliticaPreturi, 245, 269) && 245 = lista de preturi; 269 = instiintare schimbare pret + If lans(m.lnIdSet) = 1 + + if m.llPoliticaPreturi + *** Politica de preturi + Select actactan + Go Top + lnIdPol = id_pol + + *!* modificare ROAGEST v 2.0.105 : am adaugat 9999999 as ordine + text to lcSql textmerge noshow + select row_number() over(order by a.nume_articol) as nrcrt, + a.id_articol, + a.nume_articol, + a.codmat, + a.pret, + a.proc_tvav, + a.pret as pretnou, + 0 as schimb, + a.preturi_cu_tva, + a.id_pol, + a.id_pol_art, + a.id_venchelt, + 9999999 as ordine + from vcrm_politici_pret_art a + where a.id_pol = <> + endtext + else + *** Instiintare schimbare pret + Select actactan + Go Top + lnIdInstiintare = id_instiintare + + text to lcSql textmerge noshow + select row_number() over(order by a.denumire) as nrcrt, + id.id_articol, + a.denumire as nume_articol, + a.codmat, + id.pret_vechi as pret, + id.proc_tvav, + id.pret_nou as pretnou, + 1 as schimb, + ppa.preturi_cu_tva, + ppa.id_pol, + ppa.id_pol_art, + ppa.id_venchelt, + 9999999 as ordine + from instiintaripret_detalii id + join instiintaripret i on id.id_instiintare = i.id + join nom_articole a on id.id_articol = a.id_articol + join vcrm_politici_pret_art ppa on id.ID_ARTICOL = ppa.id_articol and i.id_pold = ppa.id_pol + where id.id_instiintare = <> + endtext + + endif + + Use In (Select("schimbPret")) + lcCursor = [schimbpret] + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare,0+16, 'Eroare') + endif + + loIm = Createobject('schimbpret_grupa',tnTip) + loIm.Show(1) + If gnButon = 2 + poGeneratorNumere.dezaloca_numere() + Endif + + ENDIF + ENDIF + + Use In (Select("rul_temp")) + Use In (Select("actactan")) + Use In (Select("schimbpret")) + Release loIm + Release poGeneratorNumere +Endproc +***************************************************************************************************************************************************** +Function arata_stoc_schimbare +Lparameters tnTip, tlLoadBackup + +PRIVATE pnIdGrupa +Local lnReturn, lcSirIdArticol, loFrm +LOCAL loBackupXML +Local lcCursor, lcSql, lnIdGestiune, lnIdTipDoc, lnNnir, lnSucces, loCauta, llStocActualizat, llPoliticaPreturi, llInstiintare + +lcSirIdArticol = [] +Use In (Select("crsschimb")) +Use In (Select("schimbpretstoc")) +Use In (Select("schimbpretstoctemp")) + +llStocActualizat = INLIST(m.tnTip, 1, 3) && 1,3 stoc actualizat; 2,4 stoc neactualizat +llPoliticaPreturi = INLIST(m.tnTip, 1, 2) && 1,2 politica preturi +llInstiintare = INLIST(m.tnTip, 3, 4) && 3,4 instiintare schimbare pret + +loBackupXML = CREATEOBJECT("BackupXML", "schimba_pret_grupa_gestiuni" + ALLTRIM(STR(tnTip))) && oproceduri_comune.prg +IF m.tlLoadBackup + IF loBackupXML.ExistsBackupSet() + loBackupXML.RestoreBackupSet() + *** aloc un numar nou de bon + lnIdGestiune = actactan.id_gestin + lnIdTipDoc = 2 && bon consum + poGeneratorNumere.creeaza_cursor_serii(m.lnIdTipDoc) + lnNnir = poGeneratorNumere.aloca_numar(m.lnIdTipDoc, m.lnIdGestiune) + Select actactan + Replace All nnir With lnNnir, nract WITH lnNnir + Select schimbpretstoc + Go Top + loFrm = Createobject('schimbpret_stoc_gest', tnTip) + loFrm.oBackupXML = m.loBackupXML + loFrm.Show(1) + lnReturn = gnButon + IF lnReturn = 1 + loBackupXML.DeleteBackupSet() + ELSE + loBackupXML.SaveBackupSet() + ENDIF + lnReturn = gnButon + ELSE + MESSAGEBOX('Nu exista nici un proces verbal de schimbare de pret nesalvat',0+48, _screen.Caption) + lnReturn = 2 + ENDIF +ELSE + *!* modificare ROAGEST v 2.0.105 : ordine + Select id_pol,id_pol_art,id_articol,pret,pretnou,preturi_cu_tva,proc_tvav,id_venchelt,ordine From schimbpret With (Buffering = .T.) Where schimb = 1 Into Cursor crsschimb + Select crsschimb + Scan + lcSirIdArticol = lcSirIdArticol + [,] + Alltrim(Str(id_articol,14,0)) + Endscan + lcSirIdArticol = Substr(lcSirIdArticol,2) + + loCauta = caut_grupa_gestiune() + If gnButon = 1 + pnIdGrupa = loCauta.id_grupe + + *!* modificare v 2.0.99 + If m.llStocActualizat && stoc actualizat + TEXT TO lcSql TEXTMERGE NOSHOW +select row_number() over(order by s.nume_gestiune, s.serie, nvl(s.pretv, 0)) as nrcrt, + s.*, + NVL(s.pretv + s.tvav, 0) as pretvtva, + cast(0 as number(20, 4)) AS stoc, + s.cants + s.cant - s.cante AS stoc_original, + 0 as schimb + FROM (select c.id_stoc, + a.id_articol, + ?gnAn as an, + ?gnLuna as luna, + nvl(c.pret, 0.0000) AS pret, + nvl(c.pretv, 0.0000) AS pretv, + a.denumire, + a.codmat, + a.um, + a.dnf, + a.um2, + a.cant_bax, + b.id_gestiune, + b.nume_gestiune, + b.cgest, + b.nr_pag, + NVL(c.tva, 0.0000) as tva, + NVL(c.tvav, 0.0000) as tvav, + NVL(c.cants, 0.0000) AS cants, + NVL(c.cant, 0.0000) AS cant, + NVL(c.cante, 0.0000) AS cante, + c.cont, + c.acont, + nvl(c.pretd, 0.0000) as pretd, + NVL(c.dataora, SYSDATE) AS dataora, + c.datain, + c.dataout, + nvl(c.proc_tvav, 0.0000) AS proc_tvav, + c.serie, + c.id_rul_aux, + c.id_valuta, + c.lot, + c.adata_expirare, + ?gnIdSucursala as id_sucursala, + c.id_lucrare_rez, + c.id_part_rez + FROM (SELECT id_articol, + denumire, + codmat, + um, + dnf, + um2, + cant_bax, + cont + FROM nom_articole + WHERE id_articol in (<>)) a + JOIN (SELECT id_gestiune, nume_gestiune, cgest, nr_pag, acont + FROM nom_gestiuni + WHERE sters = 0 + AND inactiv = 0 + AND id_gestiune in + (SELECT A1.ID_GESTIUNE + FROM GEST_CORESP_GRUPE_GESTIUNI A1 + WHERE A1.STERS = 0 + AND A1.ID_GRUPE IN + (SELECT ID_GRUPE + FROM GEST_NOM_GRUPE + WHERE STERS = 0 + START WITH ID_GRUPE = ?pnIdGrupa + CONNECT BY PRIOR ID_GRUPE = PARENT_ID))) b + ON 1 = 1 + LEFT JOIN (SELECT id_articol, + id_gestiune, + id_stoc, + cont, + acont, + pret, + pretv, + tva, + tvav, + cants, + cant, + cante, + pretd, + dataora, + datain, + dataout, + proc_tvav, + serie, + id_rul_aux, + id_valuta, + lot, + adata_expirare, + id_lucrare_rez, + id_part_rez + FROM stoc + WHERE an = ?gnAn + AND luna = ?gnLuna + AND cants + cant - cante <> 0 + and id_gestiune in + (SELECT A1.ID_GESTIUNE + FROM GEST_CORESP_GRUPE_GESTIUNI A1 + WHERE A1.STERS = 0 + AND A1.ID_GRUPE IN + (SELECT ID_GRUPE + FROM GEST_NOM_GRUPE + WHERE STERS = 0 + START WITH ID_GRUPE = ?pnIdGrupa + CONNECT BY PRIOR ID_GRUPE = PARENT_ID)) + <>) c + ON a.id_articol = c.id_articol + AND b.id_gestiune = c.id_gestiune + where a.id_articol in (<>)) s + ENDTEXT + ELSE && stoc neactualizat + lcSql=[select row_number() over(order by s.nume_gestiune,s.serie,nvl(s.pretv,0)) as nrcrt,] +; + [ s.*, NVL(s.pretv + s.tvav,0) as pretvtva, cast(0 as number(20,4)) AS stoc, s.cants + s.cant - s.cante AS stoc_original, 0 as schimb] +; + [ FROM (select c.id_stoc, a.id_articol, ?gnAn as an, ?gnLuna as luna, nvl(c.pret,0) AS pret, nvl(c.pretv,0) AS pretv,] +; + [ a.denumire, a.codmat, a.um, a.dnf, a.um2, a.cant_bax, b.id_gestiune, b.nume_gestiune, b.cgest, b.nr_pag, NVL(c.tva,0) as tva, NVL(c.tvav,0) as tvav,] +; + [ NVL(c.cants, 0) AS cants, NVL(c.cant, 0) AS cant, NVL(c.cante, 0) AS cante, a.cont, nvl(c.pretd,0) as pretd,] +; + [ NVL(c.dataora, SYSDATE) AS dataora, b.acont, c.datain, c.dataout, nvl(c.proc_tvav,0) AS proc_tvav, c.serie,] +; + [ c.id_rul_aux, c.id_valuta, c.lot, c.adata_expirare, ?gnIdSucursala as id_sucursala, c.id_lucrare_rez, c.id_part_rez] +; + [ FROM (SELECT id_articol, denumire, codmat, um, dnf, um2, cant_bax, cont FROM ] + gcS + [.nom_articole WHERE id_articol in (] + lcSirIdArticol + [)) a] +; + [ JOIN (SELECT id_gestiune, nume_gestiune, cgest, nr_pag, acont FROM ] + gcS + [.nom_gestiuni WHERE sters = 0 AND inactiv = 0 AND id_gestiune in (SELECT A1.ID_GESTIUNE ] + ; + [FROM ] +gcS + [.GEST_CORESP_GRUPE_GESTIUNI A1 WHERE A1.STERS = 0 AND A1.ID_GRUPE IN (SELECT ID_GRUPE FROM ] + gcS + [.GEST_NOM_GRUPE WHERE STERS = 0 ] + ; + [START WITH ID_GRUPE = ] + Alltrim(Str(pnIdGrupa,14,0)) + [ CONNECT BY PRIOR ID_GRUPE = PARENT_ID))) b ON 1 = 1] +; + [ LEFT JOIN (select id_stoc,id_articol,id_gestiune,pret,pretv,tva,tvav,cants,cant,cante,pretd,dataora,datain,dataout,proc_tvav,] + ; + [serie,id_rul_aux,id_valuta,lot,adata_expirare,id_lucrare_rez,id_part_rez from (SELECT id_stoc,id_articol,id_gestiune,pretv,tvav,] + ; + [sum(cants) over(partition by id_gestiune, id_articol) as cants,sum(cant) over(partition by id_gestiune, id_articol) as cant,] + ; + [sum(cante) over(partition by id_gestiune, id_articol) as cante,row_number() over(partition by id_gestiune, id_articol order by pretv desc) as ales,] + ; + [pret,tva,pretd,dataora,datain,dataout,proc_tvav,serie,id_rul_aux,id_valuta,lot,adata_expirare,id_lucrare_rez,id_part_rez from ] + gcS + [.stoc ] + ; + [where an =] + Alltrim(Str(gnAn)) + [ AND luna =] + Alltrim(Str(gnLuna)) + [ AND cants + cant - cante > 0] + gcCondSucursala + [ and id_gestiune in (SELECT A1.ID_GESTIUNE ] + ; + [FROM ] +gcS + [.GEST_CORESP_GRUPE_GESTIUNI A1 WHERE A1.STERS = 0 AND A1.ID_GRUPE IN (SELECT ID_GRUPE FROM ] + gcS + [.GEST_NOM_GRUPE WHERE STERS = 0 ] + ; + [START WITH ID_GRUPE = ] + Alltrim(Str(pnIdGrupa,14,0)) + [ CONNECT BY PRIOR ID_GRUPE = PARENT_ID))) where ales = 1) c] +; + [ ON a.id_articol =c.id_articol AND b.id_gestiune =c.id_gestiune where a.id_articol in (] + lcSirIdArticol + [)) s] + ENDIF + *!* modificare ROAGEST v 2.0.105 ^ + lcCursor = [schimbpretstoctemp] + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare,0+16, 'Eroare') + lnReturn = 2 + Else + *!* modificare ROAGEST v 2.0.105 : am modificat ordinea si am adaugat pretvtva_orig + *!* Select a.*,Iif(b.preturi_cu_tva=0,b.pretnou+Round(b.pretnou*(b.proc_tvav-1),gnPc),b.pretnou) As pretvtvanou,b.proc_tvav As proc_tva From schimbpretstoctemp a Left Join crsschimb b On a.id_articol = b.id_articol ; + *!* WHERE a.pretvtva<>Iif(b.preturi_cu_tva=0,b.pretnou+Round(b.pretnou*(b.proc_tvav-1),gnPc),b.pretnou) ; + *!* Order By a.nrcrt ; + *!* Into Cursor schimbpretstoc Readwrite + *!* modificare v 2.0.111 + If !m.llStocActualizat + Select a.*,b.ordine,Iif(b.preturi_cu_tva=0,b.pretnou+Round(b.pretnou*(b.proc_tvav-1),gnPPretV),b.pretnou) As pretvtvanou,b.proc_tvav As proc_tva,; + a.pretvtva As pretvtva_orig, ; + Iif(b.preturi_cu_tva=0,b.pret+Round(b.pret*(b.proc_tvav-1),gnPPretV),b.pret) As pretvtva_prec From schimbpretstoctemp a ; + Left Join crsschimb b On a.id_articol = b.id_articol ; + Order By b.ordine,a.nrcrt ; + Into Cursor schimbpretstoc Readwrite + *** completez pretvtva precedent cu cel completat in formularul precedent + + *!* 12.01.2012 + *!* pretvtva = pretul de vanzare precedent se completeaza cu pretul precedent introdus in formularul schimbpret_grupa (crsschimb.pret) + UPDATE schimbpretstoc SET pretvtva = pretvtva_prec + *!* 12.01.2012 ^ + ELSE && stoc actualizat + *!* modificare v 2.0.111 ^ + Select a.*,b.ordine,Iif(b.preturi_cu_tva=0,b.pretnou+Round(b.pretnou*(b.proc_tvav-1),gnPPretV),b.pretnou) As pretvtvanou,b.proc_tvav As proc_tva,; + a.pretvtva As pretvtva_orig From schimbpretstoctemp a ; + Left Join crsschimb b On a.id_articol = b.id_articol ; + WHERE a.pretvtva<>Iif(b.preturi_cu_tva=0,b.pretnou+Round(b.pretnou*(b.proc_tvav-1),gnPPretV),b.pretnou) ; + Order By b.ordine,a.nrcrt ; + Into Cursor schimbpretstoc Readwrite + Select schimbpretstoc + Replace nrcrt With Recno() All + + if m.llInstiintare && instiintare schimbare pret : stoc = stoc_original + delete from schimbpretstoc where stoc_original = 0 + update schimbpretstoc set stoc = stoc_original + endif + *!* modificare v 2.0.111 + Endif + *!* modificare v 2.0.111 ^ + *!* modificare ROAGEST v 2.0.105 ^ + *!* modificare v 2.0.99 ^ + + loBackupXML.SaveBackupSet("crsschimb") + loBackupXML.SaveBackupSet("schimbpretstoc") + loBackupXML.SaveBackupSet("actactan") + Select schimbpretstoc + Go Top + + loFrm = Createobject('schimbpret_stoc_gest', tnTip) + loFrm.oBackupXML = m.loBackupXML + loFrm.Show(1) + lnReturn = gnButon + IF lnReturn = 1 + loBackupXML.DeleteBackupSet() + ELSE + loBackupXML.SaveBackupSet() + ENDIF + Endif + Else + lnReturn = 2 + ENDIF +ENDIF && m.tlLoadBackup + +Use In (Select("crsschimb")) +Use In (Select("schimbpretstoc")) +Use In (Select("schimbpretstoctemp")) +Release lcSirIdArticol, loFrm, pnIdGrupa +Return lnReturn +Endfunc && arata_stoc_schimbare +***************************************************************************************************************************************************** +Function creeaza_note_schimbare_pret +Local lnReturn,lcCursorSchimb,lnNrDoc,lnIdTipDoc,lnTipBuffer +*!* modificare ROAGEST v 2.0.105 +lnIdTipDoc = 2 && bon de consum +lnTipBuffer = 2 && se dezaloca toate numerele in afara de primul +Select * From actactan Into Cursor crsaatemp +*!* modificare ROAGEST v 2.0.105 ^ + +lnReturn = 2 +lcCursorSchimb = [schimbpretstoc] +If Used('rul_temp') + Use In rul_temp +Endif + +lcSql = [select v.*, v.id_gestiune as id_gestin, v.nume_gestiune as gestin, v.id_gestiune as id_gestout, v.nume_gestiune as gestout,] + ; + [0 as nuInConturiX from ] + gcS + [.vrul v where 1=2] +lcCursor = [rul_temp] +lnSucces = goExecutor.oExecute(lcSql,lcCursor) +If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare,0+16, 'Eroare') + lnReturn = 2 +Else + Select actactan + Locate For Alltrim(Upper(SCD))='X' And Alltrim(SCC)='378' + If Found() + Scatter Name loAct + Delete + Endif + + Select actactan + Locate For Alltrim(Upper(SCD))='X' And Alltrim(SCC)='4428' + If Found() + Scatter Name loActTva + Delete + Endif + + lnIdSet = loAct.id_set + + Select (lcCursorSchimb) +*!* Scan For stoc <> 0 && modificare v 2.0.99 : stoc <> 0 + Scan For stoc <> 0 AND pretvtva <> pretvtvanou && modificare v 2.0.111 : pretvtva <> pretvtvanou +*!* modificare ROAGEST v 2.0.105 + If pretvtva_orig <> pretvtva + Replace pretv With Round(pretvtva/Iif(Nvl(proc_tva,1) = 0, 1, Nvl(proc_tva,1)),gnPPretV),; + tvav With pretvtva - Round(pretvtva/Iif(Nvl(proc_tva,1) = 0, 1, Nvl(proc_tva,1)),gnPPretV),; + proc_tvav With Iif(Nvl(proc_tvav,1) = 0,Iif(Nvl(proc_tva,1) = 0, 1, Nvl(proc_tva,1)),Nvl(proc_tvav,1)) +*!* completez proc_tvav ( daca pretvtva_original este 0, atunci proc_tvav este 0 si trebuie sa-l completez ) + Endif +*!* modificare ROAGEST v 2.0.105 ^ + Scatter Name poSchimb + lnPretvtva = pretvtva + lnStocOriginal=stoc_original + lnPretvtvanou = Round(pretvtvanou, gnPPretV) + lnCant = stoc +*!* modificare v 2.0.99 + lnProcTvav = Iif(Nvl(proc_tva,1) = 0, 1, Nvl(proc_tva,1)) +*!* modificare v 2.0.99 ^ + If Type(lcCursorSchimb+'.pretvnou') = 'N' + lnPretvNou = pretvnou + ELSE + lnPretvNou = Round(lnPretvtvanou / lnProcTvav, gnPPretV) + Endif + If Type(lcCursorSchimb+'.tvavnou') = 'N' + lntvav = tvavnou + Else + lntvav = lnPretvtvanou - lnPretvNou + Endif + + Select rul_temp +&& iesiri +*!* modificare v 2.0.105 +*!* modificare v 2.0.99 +*!* If lnStocOriginal>0 +*!* modificare v 2.0.99 ^ + If lnStocOriginal > 0 Or poSchimb.pretvtva <> 0 +*!* modificare v 2.0.105 ^ + Append Blank + Gather Name poSchimb + Replace cant With 0, cante With lnCant, id_tip_rulaj With 3,id_set With lnIdSet +*!* modificare v 2.0.99 + Endif +*!* modificare v 2.0.99 ^ +&& intrari + Append Blank + Gather Name poSchimb + Replace pretv With lnPretvNou, pretvtva With lnPretvtvanou, tvav With lntvav, proc_tvav With lnProcTvav,; + cant With lnCant, cante With 0, id_tip_rulaj With 3,id_set With lnIdSet + + Select (lcCursorSchimb) + Endscan + + Update (lcCursorSchimb) Set proc_tvav = 1 Where Empty(Nvl(proc_tvav,0)) + + && modificare v 2.0.111 : pretvtva <> pretvtvanou + Select Distinct Cont, acont, proc_tvav, id_gestiune,nume_gestiune From (lcCursorSchimb) With (Buffering = .T.) ; + Where stoc <> 0 AND pretvtva <> pretvtvanou Into Cursor SCDURI ; + Order By nume_gestiune, id_gestiune, Cont, acont NOFILTER + + lnNrDoc = loAct.nract + lnNnir = loAct.nnir + +*!* modificare ROAGEST v 2.0.105 + Select Count(Distinct id_gestiune) As nrgestiuni From SCDURI Into Cursor crsgstscd + Select crsgstscd + If nrgestiuni > 1 + poGeneratorNumere.activeazaBuffer(lnIdTipDoc,lnTipBuffer) + Endif + If Used('crsgstscd') + Use In crsgstscd + Endif +*!* modificare ROAGEST v 2.0.105 ^ + Select SCDURI + Go Top + lnIdGestPrec = id_gestiune + Scan + lnValdif = 0 + lnValdiftva = 0 + lcCont = Cont + lcAcont = Nvl(acont,'') + lnProc_tvav = proc_tvav + lnIdGestIn = id_gestiune + lcGestiune = nume_gestiune + If lnIdGestPrec <> lnIdGestIn +*!* modificare ROAGEST v 2.0.105 +*!* lnNrDoc = lnNrDoc + 1 +*!* lnNnir = 0 + lnNnir = poGeneratorNumere.aloca_numar(lnIdTipDoc,lnIdGestIn) + lnNrDoc = lnNnir +*!* modificare ROAGEST v 2.0.105 ^ + Endif + + Select (lcCursorSchimb) + Sum Round((pretvtvanou-pretvtva)/proc_tvav*stoc,gnPc) To lnValdif For Cont = lcCont And Nvl(acont,'') = lcAcont And proc_tvav = lnProc_tvav And id_gestiune = lnIdGestIn + Sum Round((pretvtvanou-pretvtva)*(proc_tvav-1)/proc_tvav*stoc,gnPc) To lnValdiftva For Cont = lcCont And Nvl(acont,'') = lcAcont And proc_tvav = lnProc_tvav And id_gestiune = lnIdGestIn + loAct.suma = lnValdif + loAct.SCD = lcCont + loAct.ascd = lcAcont + loAct.proc_tva = lnProc_tvav + loAct.id_gestin = lnIdGestIn + loAct.gestin = lcGestiune + loAct.nract = lnNrDoc + loAct.nnir = lnNnir + + loActTva.suma = lnValdiftva + loActTva.SCD = lcCont + loActTva.ascd = lcAcont + loActTva.proc_tva = lnProc_tvav + loActTva.id_gestin = lnIdGestIn + loActTva.gestin = lcGestiune + loActTva.nract = lnNrDoc + loActTva.nnir = lnNnir + + Select actactan + Append Blank + Gather Name loAct + Append Blank + Gather Name loActTva + + Select rul_temp + Replace dataact With loAct.dataact, nnir With loAct.nnir, proc_tva With loAct.proc_tva,nract With loAct.nract For id_gestiune = lnIdGestIn + + lnIdGestPrec = lnIdGestIn + Select SCDURI + Endscan + + Delete From actactan Where suma = 0 + + Do completare_parteneri_gestiune In ointroduceri.prg + Do completare_gruputil_analitice In oproceduri_comune.prg + Do completare_tva_analitice In oproceduri_comune.prg + + Use In (Select("crsDocumente")) +*!* Select Distinct a.nract,a.nnir,a.dataact,b.id_gestiune,b.nume_gestiune From actactan a Left Join rul_temp b On a.nract = b.nract Order By a.nract Into Cursor crsDocumente + + Select Distinct a.nract,a.nnir,a.dataact,a.id_gestin As id_gestiune,a.gestin From actactan a Where Alltrim(a.SCC) <> '4428' Order By a.nract Into Cursor crsDocumente + Select actactan + Go Top + Do Form verificare With .T.,.T.,3 && cu buton de precedent + lnReturn = gnButon + If lnReturn = 1 + lnReturn = scrie_note_schimbare_pret() + If lnReturn = 1 +*!* modificare ROAGEST v 2.0.105 + poGeneratorNumere.dezactiveazaBuffer(lnIdTipDoc) +*!* modificare ROAGEST v 2.0.105 ^ + listeaza_schimbare_pret() +*!* modificare ROAGEST v 2.0.105 + Else + poGeneratorNumere.dezaloca_buffer(lnIdTipDoc,.T.) + Select actactan + Delete All + Insert Into actactan Select * From crsaatemp +*!* modificare ROAGEST v 2.0.105 ^ + Endif +*!* modificare ROAGEST v 2.0.105 + Else + poGeneratorNumere.dezaloca_buffer(lnIdTipDoc,.T.) + Select actactan + Delete All + Insert Into actactan Select * From crsaatemp +*!* modificare ROAGEST v 2.0.105 ^ + Endif + Use In (Select("crsDocumente")) +Endif +Use In (Select("crsaatemp")) +Return lnReturn +Endfunc && creeaza_note_schimbare_pret +***************************************************************************************************************************************************** +Function scrie_note_schimbare_pret +Local lcSql, lcSelect,lnReturn +lcSelect = Select() + +lnSucces = SQLSetprop(gnHandle,"Transactions",2) +If lnSucces < 0 + AMESSAGEBOX("Programul nu a trecut pe tranzactie manuala",4+48,'Lista preturi') + lnReturn = 2 +Else + lcSqlTranzactie = [COMMIT] + Use In (Select("crsActIntermediar")) + Use In (Select("crsRulIntermediar")) + + Select * From actactan Into Cursor crsActIntermediar + Select * From rul_temp Into Cursor crsRulIntermediar + Select actactan + Delete All + Select rul_temp + Delete All + + Select crsDocumente + Scan + lnNrAct = nract + lnNnir = nnir + Select actactan + Append From Dbf('crsActIntermediar') For (nract = lnNrAct) + + Select rul_temp + Append From Dbf('crsRulIntermediar') For (nract = lnNrAct) + + If lnNnir = 0 + Select rul_temp + lnIdGestiune = id_gestiune +*!* modificare ROAGEST v 2.0.105 +*!* poGeneratorNumere.resetNumere() +*!* modificare ROAGEST v 2.0.105 ^ + lnNnir = poGeneratorNumere.aloca_numar(2,lnIdGestiune) + Select actactan + Replace All nnir With lnNnir + + Select rul_temp + Replace All nnir With lnNnir + Endif + + Select actactan + lnSuccesScriere = oscrie_in_fisiere(0,.F.,.T.) + If lnSuccesScriere < 0 + lcSqlTranzactie = [ROLLBACK] +*!* modificare ROAGEST v 2.0.105 +*!* poGeneratorNumere.dezaloca_numar(2) +*!* modificare ROAGEST v 2.0.105 ^ + Exit + Else + lcSqlS = [begin delete from act_temp; delete from rul_temp; end;] + lnSuccesScriere = goExecutor.oExecute(lcSqlS) + If lnSuccesScriere < 0 + AMESSAGEBOX(goExecutor.cEroare,64,"Eroare") + lcSqlTranzactie = [ROLLBACK] +*!* modificare ROAGEST v 2.0.105 +*!* poGeneratorNumere.dezaloca_numar(2) +*!* modificare ROAGEST v 2.0.105 ^ + Exit + Endif + Endif + + Select actactan + Delete All + Select rul_temp + Delete All + Select crsDocumente + Endscan + + Use In (Select("crsActIntermediar")) + Use In (Select("crsRulIntermediar")) + +*!* modifica preturi politica + Select crsschimb + lnIdPol = id_pol + Scan + lnIdPolArt = id_pol_art + lnIdVenchelt = id_venchelt + lnProc_tvav = proc_tvav + lnPret = pretnou + lnPretftva = Iif(preturi_cu_tva=0,lnPret,Iif(!Isnull(lnProc_tvav),Round(Round(lnPret,gnPPretV)/lnProc_tvav,gnPPretV),lnPret)) + lnPretctva = Iif(preturi_cu_tva=0,Iif(!Isnull(lnProc_tvav),Round(Round(lnPret,gnPPretV) + Round(lnPret,gnPPretV) *(lnProc_tvav -1),gnPPretV),lnPretftva),lnPret) + + lcSql = [begin ] + gcS + [.pack_preturi.modifica_pret_pol_pret_art(] + ; + ALLTRIM(Str(lnIdPolArt)) + [,] + ; && id_pol_art + Alltrim(Str(lnPret,20,4)) + [,] + ; && pret + Alltrim(Str(lnPretftva,20,4)) + [,] + ; && pretftva + Alltrim(Str(lnPretctva ,20,4)) + [,] + ; && pretctva + Iif(Isnull(lnIdVenchelt), 'NULL',Alltrim(Str(lnIdVenchelt))) + [,] + ; && id_venchelt + Iif(Isnull(lnProc_tvav), 'NULL', Alltrim(Str(lnProc_tvav,20,4))) + ; && proc_tvav + [); end;] + lnSucces = goExecutor.oExecute(lcSql) + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare,0+16, 'Eroare') + Exit + Endif + Endscan + + If lnSucces > 0 +*!* MODIFICARE DATAORA, UTIL in CRM_POLITICI_PRETURI + lcSql = [begin pack_preturi.modifica_politica_dataora(] + ; + ALLTRIM(Str(lnIdPol)) + [,] + ; && id_pol + Alltrim(Str(gnIdUtil)) + ; && id_util + [); end;] + lnSucces = goExecutor.oExecute(lcSql) + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare,0+16, 'Eroare') + lcSqlTranzactie = [ROLLBACK] + Else + lcSqlTranzactie = [COMMIT] + Endif + Else + lcSqlTranzactie = [ROLLBACK] + Endif + +*!* COMMIT / ROLLBACK + If lcSqlTranzactie = [ROLLBACK] + lnReturn = 2 + Else + lnReturn = 1 + Endif + + lnSucces2 = goExecutor.oExecute(lcSqlTranzactie) + If lnSucces2 < 0 + AMESSAGEBOX(lcSql + Chr(13) + goExecutor.cEroare,0+16,"Eroare") + Endif + + lnSucces2 = SQLSetprop(gnHandle,"Transactions",1) + If lnSucces2 < 0 + AMESSAGEBOX('Programul nu a reusit sa treaca pe tranzactie automata. Iesiti din program si intrati din nou!',0+48,'Atentie!') + Endif + +Endif +Select (lcSelect) +Return lnReturn +Endfunc && scrie_note_schimbare_pret +***************************************************************************************************************************************************** +Procedure listeaza_schimbare_pret + Private pcDataOra, poAct + Local lnNrInreg,lnTotalDocumente,lcCursorListareTemp,lcCursorListare + pcDataOra = get_ora(2) + poAct = Createobject('Custom') + AddProperty(poAct,'id_gestiune',0) + AddProperty(poAct,'nract',0) + AddProperty(poAct,'dataact',{}) + AddProperty(poAct,'gestin',[]) + + lcCursorSchimb = [schimbpretstoc] + lcCursorListare = [cList] + Use In (Select(lcCursorListare)) + *!* modificare v 2.0.110 + Local ox As ReportListener + ox = Createobject('ReportListener') + ox.DynamicLineHeight = .F. + ox.ListenerType = 1 + lnTotalDocumente = Reccount('crsDocumente') + + *!* lcCursorTemp = lcCursorSchimb + *!* IF TYPE(lcCursorSchimb + '.tvavnou') <> 'N' + *!* lcCursorTemp = SYS(2015) + *!* Select *, CAST(0 as N(16,4)) as tvavnou From (lcCursorSchimb) Into Cursor (lcCursorTemp) + *!* ENDIF + + *!* lnPretvtvanou - lnPretvNou + *!* pretvtvanou - pretvnou + + lcCursorListareTemp = m.lcCursorSchimb + * La operatiile de schimbare de pret la care nu se schimba procentul de TVA, ca nu exista coloana TVAVNOU. O adaug + IF TYPE(lcCursorSchimb + '.tvavnou') <> 'N' + lcCursorListareTemp = SYS(2015) + Select *, ; + ROUND(pretvtvanou * (Iif(Nvl(proc_tva,1) = 0, 1, Nvl(proc_tva,1)) - 1) / Iif(Nvl(proc_tva,1) = 0, 1, Nvl(proc_tva,1)), m.gnPPretV) as tvavnou ; + From (lcCursorSchimb) ; + Into Cursor (lcCursorListareTemp) + ENDIF + + IF TYPE(lcCursorListareTemp + '.partener_rezervare') = 'U' + lcCursorListareTempX = SYS(2015) + Select *, '' as partener_rezervare ; + From (m.lcCursorListareTemp) ; + Into Cursor (lcCursorListareTempX) + + IF m.lcCursorListareTemp <> m.lcCursorSchimb + USE IN (SELECT(m.lcCursorSchimb)) + ENDIF + + lcCursorListareTemp = m.lcCursorListareTempX + ENDIF + SET STEP ON + *!* modificare v 2.0.110 ^ + Select crsDocumente + Scan + *!* modificare v 2.0.110 + lnNrInreg = Recno() + *!* modificare v 2.0.110 ^ + poAct.id_gestiune = id_gestiune + poAct.nract = nract + poAct.dataact = dataact + poAct.gestin = gestin + + WAIT WINDOW 'Pregatire raport - proces verbal ' + ALLTRIM(STR(poAct.nract)) + ' - ' + ALLTRIM(STR(lnNrInreg)) + '/' + ALLTRIM(STR(lnTotalDocumente)) NOWAIT + + *!* modificare v 2.0.99: and stoc<>0 + IF TYPE(lcCursorSchimb + '.nract') = 'N' + Select * From (lcCursorListareTemp) Where id_gestiune = poAct.id_gestiune AND nract = poAct.nract And stoc<>0 order by partener_rezervare, DENUMIRE Into Cursor (lcCursorListare) + ELSE + Select * From (lcCursorListareTemp) Where id_gestiune = poAct.id_gestiune And stoc<>0 order by partener_rezervare, DENUMIRE Into Cursor (lcCursorListare) + ENDIF + *!* modificare v 2.0.99 ^ + Select (lcCursorListare) + *!* modificare v 2.0.110 + *!* Keyboard "{ctrl+f10}" + *!* Report Form rap_schimbPret To Printer Prompt Preview + If lnNrInreg <> lnTotalDocumente + goExport.export2frx(lcCursorListare,[rap_schimbPret],.F.,2,[],[NOPAGEEJECT],ox) + Else + goExport.export2frx(lcCursorListare,[rap_schimbPret],.F.,1,[],[],ox) + Endif + *!* modificare v 2.0.110 ^ + Use In (Select(lcCursorListare)) + + Select crsDocumente + Endscan + *!* modificare v 2.0.110 + Release ox + *!* modificare v 2.0.110 ^ + + IF m.lcCursorListareTemp <> m.lcCursorSchimb + USE IN (SELECT(lcCursorListareTemp)) + ENDIF + + Release poAct +Endproc && listeaza_schimbare_pret +***************************************************************************************************************************************************** +Procedure relisteaza_schimbare_pret + Private pnNrAct1, pnNrAct2 + Local lcCursorSchimb, lnNr + lcCursorSchimb = [schimbpretstoc] + Store 0 To pnNrAct1, pnNrAct2 + Do Form frm_cere_text With 'Numar','pnNrAct1','Numarul procesului verbal - inceput' To lnNr + pnNrAct2 = m.pnNrAct1 + Do Form frm_cere_text With 'Numar','pnNrAct2','Numarul procesului verbal - sfarsit' To lnNr + + If pnNrAct1 <> 0 AND pnNrAct2 <> 0 + *!* TEXT TO lcSql TEXTMERGE NOSHOW + *!* select a.id_set, + *!* a.id_rul, + *!* a.dataact, + *!* a.nract, + *!* a.id_gestiune, + *!* c.nume_gestiune, + *!* b.denumire, + *!* b.codmat, + *!* a.serie, + *!* a.stoc, + *!* a.pretvtva, + *!* a.pretvtvanou, + *!* a.pretv, + *!* a.pretvnou, + *!* a.tvav, + *!* a.tvavnou, + *!* a.proc_tvav, + *!* a.proc_tvavnou, + *!* round(a.stoc*(a.pretvnou - a.pretv), 2) as difvalv, + *!* round(a.stoc*(a.tvavnou - a.tvav), 2) as difvaltva, + *!* round(a.stoc*(a.pretvtvanou - a.pretvtva), 2) as difvalvvtva + *!* from (select MIN(id_set) as id_set, + *!* 0 as id_rul, + *!* dataact, + *!* nract, + *!* id_gestiune, + *!* id_articol, + *!* serie, + *!* sum(decode(cant, 0, cante, 0)) as stoc, + *!* max(decode(cant, 0, proc_tvav, 0)) as proc_tvav, + *!* max(decode(cante, 0, proc_tvav, 0)) as proc_tvavnou, + *!* max(decode(cant, 0, pretv, 0)) as pretv, + *!* max(decode(cante, 0, pretv, 0)) as pretvnou, + *!* max(decode(cant, 0, tvav, 0)) as tvav, + *!* max(decode(cante, 0, tvav, 0)) as tvavnou, + *!* max(decode(cant, 0, pretv + tvav, 0)) as pretvtva, + *!* max(decode(cante, 0, pretv + tvav, 0)) as pretvtvanou + *!* from rul + *!* where nract between ?pnNrAct1 and ?pnNrAct2 + *!* and sters = 0 + *!* and luna = ?gnLuna + *!* and an = ?gnAn + *!* and id_set in (245, 52, 269) + *!* group by dataact, + *!* nract, + *!* id_gestiune, + *!* id_articol, + *!* serie) a + *!* left join nom_articole b + *!* on a.id_articol = b.id_articol + *!* left join nom_gestiuni c + *!* on a.id_gestiune = c.id_gestiune + *!* union all + *!* select 999 as id_set, + *!* 0 as id_rul, + *!* a.dataact, + *!* a.nract, + *!* a.id_gestiune, + *!* c.nume_gestiune, + *!* b.denumire, + *!* b.codmat, + *!* a.serie, + *!* a.stoc, + *!* a.pretvtva, + *!* a.pretvtvanou, + *!* a.pretv, + *!* a.pretvnou, + *!* a.tvav, + *!* a.tvavnou, + *!* a.proc_tvav, + *!* a.proc_tvavnou, + *!* round(a.stoc*(a.pretvnou - a.pretv), 2) as difvalv, + *!* round(a.stoc*(a.tvavnou - a.tvav), 2) as difvaltva, + *!* round(a.stoc*(a.pretvtvanou - a.pretvtva), 2) as difvalvvtva + *!* from (select dataact, + *!* nract, + *!* id_gestiune, + *!* id_articol, + *!* serie, + *!* sum(decode(cant, 0, cante, 0)) as stoc, + *!* max(decode(cant, 0, proc_tvav, 0)) as proc_tvav, + *!* max(decode(cante, 0, proc_tvav, 0)) as proc_tvavnou, + *!* max(decode(cant, 0, pretv, 0)) as pretv, + *!* max(decode(cante, 0, pretv, 0)) as pretvnou, + *!* max(decode(cant, 0, tvav, 0)) as tvav, + *!* max(decode(cante, 0, tvav, 0)) as tvavnou, + *!* max(decode(cant, 0, pretv + tvav, 0)) as pretvtva, + *!* max(decode(cante, 0, pretv + tvav, 0)) as pretvtvanou + *!* from rul + *!* where nract between ?pnNrAct1 and ?pnNrAct2 + *!* and sters = 0 + *!* and luna = ?gnLuna + *!* and an = ?gnAn + *!* and id_set = 999 + *!* group by dataact, nract, id_gestiune, id_articol, serie) a + *!* left join nom_articole b + *!* on a.id_articol = b.id_articol + *!* left join nom_gestiuni c + *!* on a.id_gestiune = c.id_gestiune + *!* ENDTEXT + SET STEP ON + TEXT TO lcSql TEXTMERGE NOSHOW + select a.id_set, + a.id_rul, + a.id_part_rez, + p.denumire as partener_rezervare, + a.dataact, + a.nract, + a.id_gestiune, + c.nume_gestiune, + b.denumire, + b.codmat, + a.serie, + a.stoc, + a.pretvtva, + a.pretvtvanou, + a.pretv, + a.pretvnou, + a.tvav, + a.tvavnou, + a.proc_tvav, + a.proc_tvavnou, + round(a.stoc*(a.pretvnou - a.pretv), 2) as difvalv, + round(a.stoc*(a.tvavnou - a.tvav), 2) as difvaltva, + round(a.stoc*(a.pretvtvanou - a.pretvtva), 2) as difvalvvtva + from (select MIN(id_set) as id_set, + id_part_rez, + 0 as id_rul, + dataact, + nract, + id_gestiune, + id_articol, + serie, + sum(decode(cant, 0, cante, 0)) as stoc, + max(decode(cant, 0, proc_tvav, 0)) as proc_tvav, + max(decode(cante, 0, proc_tvav, 0)) as proc_tvavnou, + max(decode(cant, 0, pretv, 0)) as pretv, + max(decode(cante, 0, pretv, 0)) as pretvnou, + max(decode(cant, 0, tvav, 0)) as tvav, + max(decode(cante, 0, tvav, 0)) as tvavnou, + max(decode(cant, 0, pretv + tvav, 0)) as pretvtva, + max(decode(cante, 0, pretv + tvav, 0)) as pretvtvanou + from rul + where nract between ?pnNrAct1 and ?pnNrAct2 + and sters = 0 + and luna = ?gnLuna + and an = ?gnAn + and id_set in (245, 52, 269, 999) + group by id_part_rez, + dataact, + nract, + id_gestiune, + id_articol, + serie) a + left join nom_articole b + on a.id_articol = b.id_articol + left join nom_gestiuni c + on a.id_gestiune = c.id_gestiune + left join nom_parteneri p + ON a.id_part_rez = p.id_part + ENDTEXT + + WAIT WINDOW 'Selectie date din rulaje...' NOWAIT + lnSucces = goExecutor.oExecute(lcSql,lcCursorSchimb) + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare,16,"Eroare") + Else + If Reccount(lcCursorSchimb) > 0 + Use In (Select("crsDocumente")) + Select Distinct nract,id_gestiune,dataact,nume_gestiune As gestin From (lcCursorSchimb) ORDER BY nract, dataact, nume_gestiune Into Cursor crsDocumente + listeaza_schimbare_pret() + + IF AMESSAGEBOX('Doriti export in format XLS?',4+32,_Screen.Caption) = 6 + Select * From (lcCursorSchimb) order by partener_rezervare, nract, dataact, nume_gestiune, denumire Into Cursor crsCentralizatorSchimbPretTemp + goExport.export2xls('crsCentralizatorSchimbPretTemp', [centralizator_schimbpret]) + USE IN (SELECT('crsCentralizatorSchimbPretTemp')) + ENDIF + + Use In (Select("crsDocumente")) + Else + AMESSAGEBOX("Nu exista procese verbale din aceasta plaja de numere in luna curenta!",48,"Atentie") + Endif + Endif + Use In (Select(lcCursorSchimb)) + Else + AMESSAGEBOX("Numarul procesului verbal trebuie sa fie diferit de 0!",48,"Atentie") + Endif + +Endproc && listeaza_schimbare_pret +***************************************************************************************************************************************************** +Procedure listeaza_centralizator_schimbpret +Lparameters tnTipGest +Private pcTitlu,pdDataI,pdDataF,plGrupe,pnOptiune +Store {} To pdDataI,pdDataF +Local lofrmperioada,loCauta,lcSql,lnSucces,lcCursor,lcExplicatie,lcTitlu,lcIntrebare,lnNrOptiuni +lofrmperioada = Createobject('frm_perioada_zzllaaaa') +lofrmperioada.Show(1) +If !Empty(Nvl(pdDataI,{})) And !Empty(Nvl(pdDataF,{})) + Local loCauta + loCauta = caut_grupa_articole(.T.) + If gnButon = 1 + lcCursor = [crscentrschpret] + If loCauta.id_grupa = 0 And Alltrim(loCauta.grupa) = [] + lcExplicatie = [] + pnOptiune = 1 + lcTitlu = [P.V.SCHIMBARE PRET] + lcIntrebare="Doriti ca centralizatorul sa fie grupat dupa :" + lnNrOptiuni=2 + Local loFrmOpt + loFrmOpt=Createobject("frm_optiune",lcTitlu,lcIntrebare,lnNrOptiuni,[grupele de articole;numarul de document (nedefalcate dupa gestiune);],.T.) + loFrmOpt.Show(1) + Release loFrmOpt + If pnOptiune = 1 + plGrupe = .T. + Else + plGrupe = .F. + Endif + Else + lcExplicatie = [ - GRUPA ] + Alltrim(loCauta.grupa) + plGrupe = .F. + Endif + *!* modificare 07.11.2012 : la total, am pus gnPc in loc de gnPa + lcSql = [select a.nract,a.dataact,NVL(d.denumire,c.nume_gestiune) as denumire,] + ; + IIF(plGrupe,[NVL(g.grupa,'')],['']) + [ as grupa, ] + ; + [MAX(d.id_part) as id_part, MAX(c.id_gestiune) as id_gestiune, ] + ; + [sum(round(a.pretvtva*decode(a.cant,0,(-1)*a.cante,a.cant),] + Alltrim(Str(gnPc)) + [)) as total,] + ; + [sum(round(a.pretvtva*a.cante,] + Alltrim(Str(gnPc)) + [)) as valoare_ctva_vechi,] + ; + [sum(round(a.pretvtva*a.cant,] + Alltrim(Str(gnPc)) + [)) as valoare_ctva_nou,] + ; + [sum(round(a.pretv*a.cante,] + Alltrim(Str(gnPc)) + [)) as valoare_ftva_vechi,] + ; + [sum(round(a.pretv*a.cant,] + Alltrim(Str(gnPc)) + [)) as valoare_ftva_nou,] + ; + [sum(round(a.tva*a.cante,] + Alltrim(Str(gnPc)) + [)) as valoare_tva_vechi,] + ; + [sum(round(a.tva*a.cant,] + Alltrim(Str(gnPc)) + [)) as valoare_tva_nou ] + ; + [from rul a ] + ; + [left join asociere_parteneri_gestiuni b on a.id_gestiune = b.id_gestiune ] + ; + [left join nom_gestiuni c on b.id_gestiune = c.id_gestiune ] + ; + [left join nom_parteneri d on b.id_part = d.id_part ] + ; + [left join nom_articole e on a.id_articol = e.id_articol ] + ; + [left join gest_art_sbgr f on e.id_subgrupa = f.id_subgrupa and f.sters = 0 ] + ; + [left join gest_art_gr g on f.id_grupa = g.id_grupa and g.sters = 0 ] + ; + [where a.dataact between to_date('] + Dtoc(pdDataI,1) + [', 'YYYYMMDD') and to_date('] + Dtoc(pdDataF,1) + [', 'YYYYMMDD') ] + ; + [and a.id_set in (52, 245, 269, 999) and a.sters = 0] + Strtran(gcCondSucursala,[id_sucursala],[a.id_sucursala]) + [ ] + ; + IIF(loCauta.id_grupa = 0 And Alltrim(loCauta.grupa) = [],[],[and NVL(g.id_grupa,0) = ] + Alltrim(Str(loCauta.id_grupa)) + [ ]) + ; + [group by a.nract,a.dataact,NVL(d.denumire,c.nume_gestiune)] + ; + IIF(plGrupe,[,NVL(g.grupa,'')],[]) + [ ] + ; + [order by ] + Iif(plGrupe,[4,],[]) + [2, 1, 3 ] + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare,16,"Eroare") + Else + pcTitlu = [CENTRALIZATOR PROCESE VERBALE DE SCHIMBARE PRET DE VANZARE ( ] + Dtoc(pdDataI) + [ - ] + Dtoc(pdDataF) + [ )] + lcExplicatie + goExport.export2frx(lcCursor,[centralizator_schimbpret]) + IF AMESSAGEBOX('Doriti export in format XLS?',4+32,_Screen.Caption) = 6 + goExport.export2xls(lcCursor, [centralizator_schimbpret]) + ENDIF + Endif + If Used(lcCursor) + Use In (lcCursor) + Endif + Endif +Endif +Release lofrmperioada,loCauta,lcSql,lnSucces,lcCursor,pcTitlu,pdDataI,pdDataF,plGrupe,pnOptiune +Endproc && listeaza_centralizator_schimbpret +***************************************************************************************************************************************************** +Procedure centralizator_articole_schimbpret +Local loFrmPret +loFrmPret=Createobject('frm_centralizator_schimbare_pret') +loFrmPret.Show(1) +Release loFrmPret +Endproc && centralizator_articole_schimbpret +***************************************************************************************************************************************************** + + +PROCEDURE instiintaripret + PRIVATE poInstiintarepret, poInstiintarepret_det + LOCAL lcSchema,lcSelect,lcOrder,lcGroup,lcFiltru,lcFiltruOriginal,llModParam,llAfiseaza,lcSelect1,lcOrder1,lcFiltru1,; + lcFiltruOriginal1 + STORE NULL TO poInstiintaripret, poInstiintaripret_det + lcSchema = [] + lcSelect = [select * from vinstiintaripret ] + lcOrder = [ dataora desc ] + lcgroup = [] + lcFiltru = [] + lcFiltruOriginal = [ sters=0 ] + llModParam = .T. + llAfiseaza = .F. + + gencursor('poInstiintaripret','cInstiintaripret', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal) + poInstiintaripret.ca_baza1.afisare() + + lcSelect1 = [select * from instiintaripret_vdetalii ] + lcOrder1 = [ denumire ] + lcFiltru1 = [] + lcFiltruOriginal1 = [ 1=2 ] + gencursor('poInstiintaripret_det ','cInstiintaripret_det', lcSelect1,lcFiltru1,lcSchema,lcOrder1,llAfiseaza,lcgroup, llModParam,lcFiltruOriginal1) + poInstiintaripret_det.ca_baza1.afisare() + + SELECT cInstiintaripret + GO TOP + loFrm = CREATEOBJECT("instiintaripret") + loFrm.show(1) +ENDPROC && instiintaripret + +******************************************************************* +*** Modificare preturi la schimbarea de TVA +*** Actualizare liste de preturi +*** Procese verbale schimbare de pret pe baza de lista de preturi (optional), pentru anumite gestiuni/toate, pentru anumite subgrupe articole/toate +*** 01.07.2010 19%-24% +*** 01.06.2010 24%-9% alimente +******************************************************************* +PROCEDURE schimba_pret_tva + LOCAL loFrmSchimbarePret + + * createobject da eroare (check1???) + DO FORM frm_schimbare_pret_tva + +*!* loFrmSchimbarePret = CREATEOBJECT("schimbpret_masa_tva") +*!* loFrmSchimbarePret.show(1) +ENDPROC && schimba_pret \ No newline at end of file diff --git a/COMUN/programe/oscrie_in_fisiere.prg b/COMUN/programe/oscrie_in_fisiere.prg new file mode 100644 index 0000000..c9c9429 --- /dev/null +++ b/COMUN/programe/oscrie_in_fisiere.prg @@ -0,0 +1,357 @@ +*!* 21.12.2011 +*!* marius.mutu +*!* tlNuSuprascrieCod default .F. se foloseste codul generat din pack_contafin, .T. se foloseste codul din act_temp +*!* folosit in inventare de corectie. se foloseste acelasi cod, id_fact ca la inventarul original + +*!* 11.01.2012 +*!* marius.mutu +*!* tlLoadBackup - apelare oscrie_in_fisiere cu restaurarea actactan, rul_temp, rul_temp_obinv din backupset + +*!* 24.03.2026 +*!* marius.mutu +*!* stergere_import_note_contabile - se stergea doar prima nota cu succes, apoi iesea din scan + +Parameters tnScrie_Sterge, tlModificare, tlRul, tlNuSuprascrieCod, tlLoadBackup +*!* tnScrie_Sterge: 0 = scriere, 2 = stergere, 1 = refacere (nu se foloseste de oscrie_in_fisiere) +*!* tlModificare: .F. = nota noua, .T. modificare nota (scriere + stergere) +*!* tlNuSuprascrieCod default .F. se foloseste codul generat din pack_contafin, .T. se foloseste codul din act_temp +*!* tlLoadBackup: default .F. - nu restaurez actactan, rul_temp, rul_temp_obinv din backupset, .T. restaurez actactan, rul_temp, rul_temp_obinv din backupset + +Private pcMesajRefacereNota, pdData +Local lnSucces, lnCod, lcSql, llManualTransactions, lnSucces2 + +*!* 11.01.2012 +Local loBackupXML +pcMesajRefacereNota = "" +loBackupXML = Createobject("backupxml", "oscrie_in_fisiere") && oproceduri_comune.prg +If m.tlLoadBackup + If loBackupXML.ExistsBackupSet() + loBackupXML.RestoreBackupSet() + If Used('actactan') + Select ACTACTAN + Browse + Endif + If Used('rul_temp') + Select RUL_TEMP + Browse + Endif + If Used('rul_temp_obinv') + Select RUL_TEMP_OBINV + Browse + Endif + If AMESSAGEBOX('Doriti sa continuati scrierea notelor din backup?', 4 + 32, _Screen.Caption) <> 6 + lnSucces = -1 + Return m.lnSucces + Endif + Else + AMESSAGEBOX('Nu Exista backupset-ul "oscrie_in_fisiere"!', 0 + 48, _Screen.Caption) + lnSucces = -1 + Return m.lnSucces + Endif +Else + If loBackupXML.ExistsBackupSet() + loBackupXML.DeleteBackupSet() + Endif + + If Used('actactan') + loBackupXML.SaveBackupSet("actactan") + Endif + If Used('rul_temp') + loBackupXML.SaveBackupSet("rul_temp") + Endif + If Used('rul_temp_obinv') + loBackupXML.SaveBackupSet("rul_temp_obinv") + Endif +Endif +*!* 11.01.2012 ^ + +lnSucces = -1 +If Reccount('actactan') = 0 + AMESSAGEBOX('Nu s-a inregistrat nota contabila.') + Return lnSucces +Endif + +If Empty(tnScrie_Sterge) Or Isnull(tnScrie_Sterge) + tnScrie_Sterge = 0 +Endif + +If !Used('ACTACTAN') + AMESSAGEBOX('Nu exista fisierul .') + Return lnSucces +Endif + +If tnScrie_Sterge = 2 + Select ACTACTAN + Locate + lnCod = cod +Else + lnCod = Null +Endif + +*!* modificare 18.09.2007 +If tnScrie_Sterge = 2 And !tlModificare And Used('rul_temp') And Reccount('rul_temp') > 0 + Private pcMesaj + Store '' To pcMesaj + lcSql = [begin ] + gcS + [.verifica_stoc(] + Alltrim(Str(lnCod)) + [,?@pcMesaj); end;] + lnSucces = goExecutor.oExecute(lcSql) + If lnSucces < 0 + AMESSAGEBOX(goExecutor.oPrelucrareEroare(), 16, "Eroare") + Return lnSucces + Endif + If !Isnull(pcMesaj) + AMESSAGEBOX(pcMesaj, 48, "Atentie") + Release pcMesaj + Return - 5 + Endif + Release pcMesaj +Else + lnSucces = 1 +Endif + +llManualTransactions = Iif(SQLGetprop(gnhandle, "Transactions") = 2, .T., .F.) + +If lnSucces > 0 + If !tlModificare And !llManualTransactions + lnSucces = SQLSetprop(gnhandle, "Transactions", 2) + Endif +Endif + +If lnSucces > 0 + pdData = {} + lcSql = [begin pack_contafin.init_scriere_act_rul_local(?gnIdUtil,?gnAn,?gnLuna,] + ; + Iif(m.tlNuSuprascrieCod, "0", "1") + [,] + Alltrim(Str(tnScrie_Sterge)) + [,?gnIdSucursala); end;] + lnSucces = Iif(goExecutor.oExecuta(lcSql), 1, -1) +Endif + +If lnSucces > 0 + lnSucces = sql_temp_insert('actactan', 'ACT_TEMP') + + If lnSucces > 0 And tlRul + If Used('rul_temp') And Reccount('rul_temp') > 0 + lnSucces = sql_temp_insert('rul_temp', 'RUL_TEMP') + Endif + If Used('RUL_TEMP_OBINV') And Reccount('RUL_TEMP_OBINV') > 0 + lnSucces = sql_temp_insert('rul_temp_obinv', 'RUL_TEMP_OBINV') + Endif + Endif +Endif + +If lnSucces > 0 + pcMesajRefacereNota = "" + lcSql = [begin pack_contafin.final_scriere_act_rul_local(?gnIdUtil,?gnAn,?gnLuna,] + Iif(tnScrie_Sterge == 2, Alltrim(Str(lnCod)), [NULL]) + [,] + ; + Alltrim(Str(tnScrie_Sterge)) + [,] + Iif(tlModificare, [0], [1]) + [,?@pcMesajRefacereNota); end;] + lnSucces = Iif(goExecutor.oExecuta(lcSql), 1, -1) + If !Empty(Nvl(pcMesajRefacereNota, '')) + AMESSAGEBOX(pcMesajRefacereNota, 0 + 48, 'Atentie') + Endif +Endif + +If !tlModificare And !llManualTransactions + If lnSucces < 0 + lcSql = "ROLLBACK" + Else + lcSql = "COMMIT" + Endif + lnSucces2 = goExecutor.oExecute(lcSql) + + If lnSucces2 < 0 + AMESSAGEBOX(lcSql + Chr(13) + goExecutor.cEroare, 0 + 16, "Eroare") + Endif + + lnSucces2 = SQLSetprop(gnhandle, "Transactions", 1) + If lnSucces2 < 0 + AMESSAGEBOX('Programul nu a reusit sa treaca pe tranzactie automata. Iesiti din program si intrati din nou!', 0 + 48, 'Atentie!') + Endif +Endif + +Return lnSucces + + + +&& ------------------------------------------------------------------------------------ +Procedure sql_temp_insert + Lparameters tcAlias, tcTableName + + Local lcAlias, lcCursor, lnSucces + Private poIreg + Local lcVariable + + If Empty(tcAlias) + lcAlias = 'ACTACTAN' + Else + lcAlias = Upper(Alltrim(tcAlias)) + Endif + If Empty(tcTableName) + lcTableName = 'ACT_TEMP' + Else + lcTableName = Upper(Alltrim(tcTableName)) + Endif + + lcCursor = 'crs_Coloane' + lcSql = [SELECT COLUMN_NAME AS COLOANA from user_tab_columns WHERE table_name = ?lcTableName] + lnSucces = goExecutor.oExecute(lcSql, lcCursor) + If lnSucces < 0 + AMESSAGEBOX('Eroare la selectare coloane din ' + lcTableName + Chr(13) + goExecutor.cEroare, 0 + 16, 'Eroare') + Endif + + If lnSucces > 0 + *** + Select (lcAlias) + lnCount = Fcount() + Scan + lcFields = [] + lcValues = [] + lcInsert = [] + Scatter Name poIreg + + For i = 1 To lnCount + Select (lcAlias) + lcFieldName = Upper(Alltrim(Field(i))) + lcFieldType = Type(lcFieldName) + lcFieldValue = Evaluate(lcFieldName) + If lcFieldType = 'C' + lcVariable = '?ALLTRIM(poIreg.' + lcFieldName + ')' + Else + lcVariable = '?poIreg.' + lcFieldName + Endif + + Select CRS_COLOANE + Locate For Upper(Alltrim(COLOANA)) == lcFieldName + If !Found() + Loop + Endif + lcFields = lcFields + [,] + lcFieldName + lcNumber = '0' + lcDate = '' + lcString = '' + + lcValues = lcValues + [,] + lcVariable + + *!* DO CASE + *!* CASE lcFieldType = 'N' + *!* IF EMPTY(lcFieldValue) OR ISNULL(lcFieldValue) + *!* lcNumber = '0' + *!* ELSE + *!* lcNumber = ALLTRIM(STR(lcFieldValue,24,4)) + *!* ENDIF + + *!* lcValues = lcValues + [,] + lcNumber + *!* CASE lcFieldType = 'C' + *!* IF EMPTY(lcFieldValue) OR ISNULL(lcFieldValue) + *!* lcString = '' + *!* ELSE + *!* lcString = ALLTRIM(lcFieldValue) + *!* ENDIF + + *!* lcValues = lcValues + [,] + ['] + lcString + ['] + *!* CASE INLIST(lcFieldType,'D','T') + *!* IF EMPTY(lcFieldValue) OR ISNULL(lcFieldValue) + *!* lcDate = '' + *!* ELSE + *!* lcDate = DTOS(lcFieldValue) + *!* ENDIF + *!* lcValues = lcValues + [,] + [TO_DATE('] + lcDate + [','YYYY-MM-DD')] + *!* ENDCASE + + Endfor + * FAC NULL ID-URILE CU VALOARE 0 + poIreg.id_sucursala = IIF(!EMPTY(NVL(poIreg.id_sucursala,0)), poIreg.id_sucursala, NULL) + IF TYPE('poIreg.taxcode') <> 'U' + poIreg.taxcode = IIF(!EMPTY(NVL(poIreg.taxcode,0)), poIreg.taxcode, NULL) + ENDIF + IF TYPE('poIreg.paymentcode') <> 'U' + poIreg.paymentcode = IIF(!EMPTY(NVL(poIreg.paymentcode,'')), poIreg.paymentcode, NULL) + ENDIF + IF TYPE('poIreg.id_jtva_coloana') <> 'U' + poIreg.id_jtva_coloana = IIF(!EMPTY(NVL(poIreg.id_jtva_coloana,0)), poIreg.id_jtva_coloana, NULL) + ENDIF + + lcFields = Substr(lcFields, 2) + lcValues = Substr(lcValues, 2) + + && INSERT INTO ACT_TEMP + lcInsert = [INSERT INTO ] + lcTableName + [ (] + lcFields + [) VALUES (] + lcValues + [)] + lnSucces = goExecutor.oExecute(lcInsert) + If lnSucces < 0 + + AMESSAGEBOX(goExecutor.cEroare, 0 + 16, 'Eroare') + Exit + Endif + + Endscan + Endif + If Used('crs_coloane') + Use In CRS_COLOANE + Endif + + Return lnSucces + +Endproc && sql_temp_insert + + +****************** +* Sterge importuri dupa act.explicatia5 sau un cod, cate un calup de note (cod) +****************** +PROCEDURE stergere_import_note_contabile + LPARAMETERS tcExplicatia, tnCod, tcColoana + * tcExplicatia = valoarea din coloana act.explicatia5 + * tcColoana (optional) default = 'explicatia5' + * tnCod (optional) daca doresc sa sterg un singur cod + + PRIVATE pcExplicatia + Local lcColoana, lcCursor, lcSql, llSucces, lnSucces, lcSelect + LOCAL lnPercent, lcTask + lcselect = SELECT() + lcColoana = IIF(EMPTY(m.tcColoana), 'explicatia5', m.tcColoana) + pcExplicatia = ALLTRIM(NVL(m.tcExplicatia, '')) + pnCod = NVL(m.tnCod, 0) + IF EMPTY(m.pcExplicatia) AND EMPTY(m.pnCod) + llSucces = .F. + SELECT (m.lcSelect) + RETURN m.llSucces + ENDIF + lcTask = 'Stergere...' + + lcSql = [select distinct cod from act where an=?gnAn and Luna=?gnLuna and sters=0 ] + ; + IIF(!EMPTY(m.pcExplicatia), [ and ] + m.lcColoana + [ = ?pcExplicatia], '') + ; + IIF(!EMPTY(m.pnCod), [ and cod = ?pnCod], '') + lcCursor = [cCoduri] + llSucces = goExecutor.oExecuta(m.lcSql, m.lcCursor) + + IF !m.llSucces + SELECT (m.lcSelect) + RETURN m.llSucces + ENDIF + + lnSucces = SQLSetprop(m.gnhandle, "Transactions", 2) + lcSql = [begin pack_contafin.init_scriere_act_rul_local(?gnIdUtil,?gnAn,?gnLuna, 1,0,?gnIdSucursala); end;] + llSucces = goExecutor.oExecuta(lcSql) + If m.llSucces + Select cCoduri + Scan + pnCod = cod + If Mod(Recno(), 10) = 0 + lnPercent = Round(Recno() / Reccount() * 100, 0) + WAIT WINDOW m.lcTask + Alltrim(Str(m.lnPercent)) + '%' NOWAIT + Endif + lcSql = [begin pack_contafin.sterge_document(?pnCod); end;] + llSucces = goExecutor.oExecuta(lcSql) + If !m.llSucces + Exit + Endif + ENDSCAN + Endif + + If m.llSucces + llSucces2 = goExecutor.oExecuta('COMMIT') + Else + llSucces2 = goExecutor.oExecuta('ROLLBACK') + Endif + + SQLSetprop(m.gnhandle, "Transactions", 1) + + SELECT (m.lcSelect) + + RETURN m.llSucces +ENDPROC && stergere_import_note_contabile + \ No newline at end of file diff --git a/COMUN/programe/osecurity.prg b/COMUN/programe/osecurity.prg new file mode 100644 index 0000000..7458a33 --- /dev/null +++ b/COMUN/programe/osecurity.prg @@ -0,0 +1,268 @@ +*!* 19.05.2009 +*!* marius.mutu +*!* gnewcryptxml = .T. nu mai exista fisiere roa_security.xml cu criptarea veche (windows api) + +*!* 21.06.2012 +*!* marius.mutu +*!* VERIFICA_UTILIZATOR +*!* tratare utilizatori ADMIN -1, SUPER -2 + +#DEFINE CRLF CHR(13) + CHR(10) +*** osecurity + +********************* INCEPUT Getcrssecurity ********************** +* PROCEDURE Getcrssecurity( ) +* Date : 04/05/05, 11:25:56 +* author : marius.mutu +* description: + +PROCEDURE GetcrsSecurity + LPARAMETERS tcSecurityFile + + *!* SECURITY.TXT - NECRIPTAT + *!* SECURITY.XML - CRIPTAT + *!* DACA EXISTA SECURITY.XML - PARSEZ XML, ALTFEL PARSEZ TXT + *!* gnewcryptxml - daca roa_security.xml are criptare noua(blowfish) + *!* gnewcryptfll - daca exista vfpencryption.fll + + IF TYPE("gnewcryptxml")="U" + PUBLIC gnewcryptxml + ENDIF +*!* 19.05.2009 +*!* nu mai exista fisiere roa_security.xml cu criptarea veche (windows api) +*!* gnewcryptxml=.F. + gnewcryptxml = .T. + + IF TYPE("gnewcryptfll")="U" + PUBLIC gnewcryptfll + ENDIF + gnewcryptfll=.T. + LOCAL lnAt,lcDirMare + IF TYPE("gcComunPath")="U" + PUBLIC gcComunPath + lnAt=RAT("\",gcAppPath,2) + lcDirMare=LEFT(gcAppPath,lnAt) + gcComunPath=ADDBS(lcDirMare)+"COMUNROA\" + ENDIF + + LOCAL loex AS EXCEPTION + TRY + lcEncryptionFile = gcComunPath+"vfpencryption.fll" + IF !"vfpencryption"$LOWER(SET("Library")) + SET LIBRARY TO (lcEncryptionFile) ADDITIVE + ENDIF + CATCH TO loex + gnewcryptfll=.F. + ENDTRY + + + + LOCAL lcSecurityFile,lcSecurityPath, lcCursor, lcLinie, lcMode + LOCAL lcSecurityFileXML + + lcSecurityFileXML = FORCEEXT(tcSecurityFile,'xml') + + lcCursor = "crsHost" + lcSecurityFile = tcSecurityFile + lcSecurityPath = ADDBS(JUSTPATH(lcSecurityFile)) + + lnValid = 0 + llSucces = .T. + IF !DIRECTORY(lcSecurityPath) + TRY + MD (lcSecurityPath) + CATCH + aMESSAGEBOX('Nu se poate crea directorul ' + lcSecurityPath + '!',0+16,'Atentie') + ENDTRY + ENDIF + + IF !(FILE(lcSecurityFile) OR FILE(lcSecurityFileXML)) + CD (lcSecurityPath) + IF !FILE(lcSecurityFileXML) + lcSecurityText = 'ROA;CONTAFIN_ORACLE;123;' + lcSecurityText = INPUTBOX('Host(DSN);SCHEMA;SCHEMA_PASSWORD;1;','Server',lcSecurityText) + lcSecurityText = ALLTRIM(lcSecurityText) + IF !EMPTY(lcSecurityText) + IF RIGHT(lcSecurityText,1) # ';' + lcSecurityText = lcSecurityText + ';' + ENDIF + ELSE + llSucces = .F. + ENDIF + ENDIF + + IF llSucces + TRY + IF !(FILE(lcSecurityFileXML) OR FILE(lcSecurityFile)) + *!* SECURITY.TXT + STRTOFILE(lcSecurityText, lcSecurityFile) + *!* SECURITY.TXT ^ + ENDIF + + + *!* SECURITY.XML + IF !FILE(lcSecurityFileXML) + CREATE CURSOR cXML (HOST c(50), schema c(50), pwd c(50)) + INSERT INTO cXML (HOST, schema, pwd) VALUES("ROA","CONTAFIN_ORACLE","ENCRYPTED PWD") + + CURSORTOXML("cXML",lcSecurityFileXML, 1, 512, 0, "1") + USE IN cXML + ENDIF + *!* SECURITY.XML ^ + CATCH + aMESSAGEBOX('Nu s-a putut crea fisierul ' + lcSecurityFile,0+16,'Atentie') + llSucces = .F. + ENDTRY + ENDIF + ENDIF + + IF llSucces + IF !FILE(lcSecurityFile) AND !FILE(lcSecurityFileXML) + aMESSAGEBOX('Nu exista fisierul ' + lcSecurityFile,0+16,'Atentie') + llSucces = .F. + ENDIF + ENDIF + + IF llSucces + IF USED(lcCursor) + USE IN (lcCursor) + ENDIF + + + && daca exista security.xml - il transform in cursorul cXML si completez crsHost + CREATE CURSOR (lcCursor)(HOST c(100), schema c(100), pwd v(100), IsEncrypted c(1)) + IF FILE(lcSecurityFileXML) + TRY + lcSecurityText = FILETOSTR(lcSecurityFileXML) + XMLTOCURSOR(lcSecurityFileXML, "cXML", 512) + SELECT cXML + GO TOP + SCATTER NAME lofirstrecord + + IF lofirstrecord.HOST="ENCRYPTION" + gnewcryptxml=.T. + DELETE + ENDIF + + + INSERT INTO (lcCursor) (HOST, schema, pwd, IsEncrypted) ; + SELECT HOST, schema, pwd, "1" AS IsEncrypted ; + FROM cXML + lnValid = RECCOUNT('cXML') + + USE IN cXML + CATCH TO loex + *!* Local loEx As Exception + aMESSAGEBOX('Mesaj: ' + loex.MESSAGE + CRLF + ; + 'Eroare nr: ' + ALLTRIM(TRANSFORM(loex.ERRORNO)) + CRLF + ; + 'Cod: ' + loex.LINECONTENTS + CRLF + 'Procedura: ' + loex.PROCEDURE + CRLF + ; + 'Linia nr: ' + ALLTRIM(TRANSFORM(loex.LINENO)),0+16,'Eroare') + FINALLY + USE IN (SELECT('cXML')) + ENDTRY + + ELSE + * CREATE CURSOR (lcCursor)(HOST c(100), Schema c(100), Pwd v(100), IsEncrypted c(1)) + lcSecurityText = FILETOSTR(lcSecurityFile) + LOCAL laHost + DIMENSION laHost[1] + + lnLen = ALINES(laHost, lcSecurityText) + + IF lnLen > 0 + FOR i = 1 TO lnLen + lcLinie = laHost[i] + + lcHost = GETWORDNUM(lcLinie, 1, ';') + lcSchema = GETWORDNUM(lcLinie, 2, ';') + lcPassword = GETWORDNUM(lcLinie, 3, ';') + lcMode = "0" && necriptat - security.txt + + IF EMPTY(lcHost) OR EMPTY(lcSchema) OR EMPTY(lcPassword) + LOOP + ENDIF + + lnValid = lnValid + 1 + INSERT INTO &lcCursor (HOST, schema, pwd, IsEncrypted) VALUES (lcHost, lcSchema, lcPassword, IIF(EMPTY(lcMode), '0', lcMode)) + ENDFOR + ENDIF + ENDIF + ENDIF + + RETURN lnValid +ENDPROC +********************* SFARSIT Getcrssecurity ********************** +************************************************************************************************************* +FUNCTION verifica_utilizator + LPARAMETERS tcNumeUtilizator,tcParola + LOCAL lnVerificare,lnRezultat,lnSuma,lnCkSum + glAdministrator = .F. + glSupervizor = .F. + + lnRezultat = -1 + TRY + lcSql = [SELECT pack_drepturi.verificautilizator(']+ALLTRIM(tcNumeUtilizator)+[',']+; + ALLTRIM(tcParola)+[') as id_util from dual] + lcCursor = [v_verificare] + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + goExecutor.oReset() + IF USED('v_verificare') AND RECCOUNT('v_verificare')>0 + SELECT v_verificare + lnVerificare = id_util + USE IN v_verificare + ENDIF + IF m.lnVerificare = -1 + glAdministrator = .F. + glSupervizor = .F. + RETURN m.lnRezultat + ENDIF + IF lnVerificare < -1000000 && ADMIN, SUPER, SERVER + lnRezultat = lnVerificare + 1000000 + DO case + CASE lnRezultat = -1 && ADMIN + glAdministrator = .T. + CASE lnRezultat = -2 && SUPER + glSupervizor = .T. + ENDCASE + ELSE + lnSuma = 0 + lnRezultat = INT(lnVerificare/100) && id_util + lnVerificare = ABS(m.lnVerificare) && pentru cazul in care am id_util (-1,-2,-3) + i = lnRezultat + lnCkSum = MOD(lnVerificare,100) + DO WHILE i > 0 + lnSuma = lnSuma+MOD(i,10) + i = INT(i/10) + ENDDO + IF MOD(lnSuma+lnCkSum, 13) = 0 + glAdministrator = .T. && GRUP ADMINISTRARE ID = 0 + ELSE + IF MOD(lnSuma+lnCkSum, 11) = 0 + glSupervizor = .T. && GRUP SUPERVIZARE ID = -1 + ENDIF + ENDIF + ENDIF + CATCH + lnRezultat = -1 + ENDTRY + + RETURN lnRezultat +ENDFUNC +************************************************************************************************************* +FUNCTION verifica_id_util + LPARAMETERS tnIdUtil + LOCAL lcRezultat + lcRezultat=[] + lcSql = [SELECT pack_drepturi.verificaidutil(]+; + ALLTRIM(STR(tnIdUtil))+[) as utilizator from dual] + lcCursor = [v_cursor_verif] + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + goExecutor.oReset() + IF USED('v_cursor_verif') AND RECCOUNT('v_cursor_verif')>0 + SELECT v_cursor_verif + lcRezultat=utilizator + USE IN v_cursor_verif + ENDIF + RETURN lcRezultat +ENDFUNC +************************************************************************************************************* diff --git a/COMUN/programe/oserii_numere.prg b/COMUN/programe/oserii_numere.prg new file mode 100644 index 0000000..c8c82f3 --- /dev/null +++ b/COMUN/programe/oserii_numere.prg @@ -0,0 +1,448 @@ +************************************************************************************************************** +** Clase: +** oGeneratorNumere +** Proceduri: +** viz_config_serii_complet +** creeaza_cursor_serii +** Functii: +** caut_serii_fact +** caut_tipentitate_permis +************************************************************************************************************** +*********************************** Obiect oNumereDocumente ********************************* +Define Class oGeneratorNumere As Custom + cAliasVechi = Null + lInitializare = .F. && modificare 14.07.2010 + nTipuriDocument = 30 + Declare paPlaje (30,8) +** 1 - numar +** 2 - nume cursor +** 3 - cu_serie +** 4 - cu_plaja +** 5 - id_serie +** 6 - cu buffer .T. daca se genereaza mai multe numere in cadrul aceleiasi operatii +** 7 - tip buffer 1 - in caz de renuntare, se dezaloca toate numerele din buffer ( implicit ) +** 2 - in caz de renuntare, se dezaloca toate numerele din buffer, cu exceptia primului, care este repus in array +** 8 - nume cursor buffer +****************************** + Procedure Init +*!* modificare 14.07.2010 +*!* This.ResetAll() + This.lInitializare = .T. + This.ResetAll() + This.lInitializare = .F. +*!* modificare 14.07.2010 ^ + Endproc +****************************** + Procedure Reset + Lparameters tnIdTipDoc + With This + .paPlaje(tnIdTipDoc,1) = 0 + .paPlaje(tnIdTipDoc,2) = Null + .paPlaje(tnIdTipDoc,3) = .F. + .paPlaje(tnIdTipDoc,4) = .F. + .paPlaje(tnIdTipDoc,5) = Null + .dezactiveazaBuffer(tnIdTipDoc) + Endwith + Endproc +****************************** + Procedure ResetAll + With This + For i = 1 To This.nTipuriDocument + .Reset(i) + Endfor + Endwith + Endproc +****************************** + Procedure ResetNumar + Lparameters tnIdTipDoc + With This + .paPlaje(tnIdTipDoc,1) = 0 + .paPlaje(tnIdTipDoc,5) = Null + Endwith + Endproc +****************************** + Procedure ResetNumere + With This + For i = 1 To This.nTipuriDocument + .ResetNumar(i) + Endfor + Endwith + Endproc +****************************** + Procedure activeazaBuffer + Lparameters tnIdTipDoc,tnTipBuffer + Local lnTipBuffer + lcSql = [begin pack_serii_numere.seteazaNumereMultiple(1); end;] + If goExecutor.oExecuta(lcSql) + If Empty(tnTipBuffer) Or !Between(tnTipBuffer,1,2) + lnTipBuffer = 1 + Else + lnTipBuffer = tnTipBuffer + Endif + lcCursor = [crsbufsertemp]+Alltrim(Str(tnIdTipDoc)) + Create Cursor (lcCursor) (numar N(14)) +*!* If !Empty(This.paPlaje(tnIdTipDoc,1)) +*!* Select (lcCursor) +*!* Append Blank +*!* Replace numar With This.paPlaje(tnIdTipDoc,1) +*!* This.ResetNumar(tnIdTipDoc) +*!* Endif + This.paPlaje(tnIdTipDoc,6) = .T. + This.paPlaje(tnIdTipDoc,7) = lnTipBuffer + This.paPlaje(tnIdTipDoc,8) = lcCursor + Endif + Endproc +****************************** + Procedure dezactiveazaBuffer + Lparameters tnIdTipDoc + lcSql = [begin pack_serii_numere.seteazaNumereMultiple(0); end;] +*!* modificare 14.07.2010 : imi apeleaza de 20 de ori procedura la fiecare initializare a obiectului +*!* lnSucces = goExecutor.oExecute(lcSql) + If (This.lInitializare And tnIdTipDoc = 1) Or !This.lInitializare + llSucces = goExecutor.oExecuta(lcSql) + Else + llSucces = .T. + Endif +*!* modificare 14.07.2010 ^ + If llSucces + lcCursor = This.paPlaje(tnIdTipDoc,8) + If !Empty(Nvl(lcCursor,[])) + Use In (lcCursor) + Endif + This.paPlaje(tnIdTipDoc,6) = .F. + This.paPlaje(tnIdTipDoc,7) = 1 + This.paPlaje(tnIdTipDoc,8) = Null + Endif + Endproc +****************************** + Procedure salveazaAliasVechi + This.cAliasVechi = Alias() + Endproc +****************************** + Procedure selecteazaAliasVechi + If !Empty(Nvl(This.cAliasVechi,[])) + Select (This.cAliasVechi) + Endif + Endproc +****************************** + Function creeaza_cursor_serii + Lparameters tnIdTipDoc + Local lcSql,lcCursor,llSucces + Private pnIdTipDoc,pnRezultat + pnIdTipDoc = tnIdTipDoc + pnRezultat = 0 + This.salveazaAliasVechi() + lcCursor = [crsseriitemp]+Alltrim(Str(tnIdTipDoc)) + If Used(lcCursor) + Use In (lcCursor) + Endif + lcSql = [{call ] + gcS + [.pack_serii_numere.verifica_cursor_serii(?pnIdTipDoc,?gnIdUtil,?gnIdSucursala,?@pnRezultat)}] + llSucces = goExecutor.oExecuta(lcSql,lcCursor) + With This +*!* modificare 04.09.2012 + If !llSucces OR pnRezultat = -1 +*!* If !llSucces +*!* modificare 04.09.2012 ^ + *!* modificare ROAGEST v 2.0.138 + lcSql = [{call ] + gcs + [.pack_serii_numere.verifica_tipdoc(?pnIdTipDoc,?@pnRezultat)}] + IF !goExecutor.oExecuta(lcSql,lcCursor) + *!* modificare ROAGEST v 2.0.138 ^ + pnRezultat = 1 + .paPlaje(tnIdTipDoc,2) = Null + .paPlaje(tnIdTipDoc,3) = .F. + .paPlaje(tnIdTipDoc,4) = .F. + *!* modificare ROAGEST v 2.0.138 + Else + .paPlaje(tnIdTipDoc,2) = Null + .paPlaje(tnIdTipDoc,3) = Iif(Mod(pnRezultat,2)=1,.T.,.F.) + .paPlaje(tnIdTipDoc,4) = .F. + Endif + *!* modificare ROAGEST v 2.0.138 ^ + Else + If Reccount(lcCursor) > 0 + .paPlaje(tnIdTipDoc,2) = lcCursor + .paPlaje(tnIdTipDoc,3) = Iif(Mod(pnRezultat,2)=1,.T.,.F.) + .paPlaje(tnIdTipDoc,4) = Iif(pnRezultat>=2,.T.,.F.) + Else + pnRezultat = 1 + .paPlaje(tnIdTipDoc,2) = Null + .paPlaje(tnIdTipDoc,3) = .F. + .paPlaje(tnIdTipDoc,4) = .F. + Endif + Endif + Endwith + This.selecteazaAliasVechi() + Release pnIdTipDoc + Return pnRezultat + Endfunc && creeaza_cursor_serii +****************************** + Function aloca_numar + Lparameters tnIdTipDoc,tnIdGestiune + Private pnIdTipDoc,pnIdGestiune,pnNumar,pnIdSerie + Do Case + Case Isnull(This.paPlaje(tnIdTipDoc,2)) + pnNumar = 0 +*!* modificare ROAGEST v 2.0.105 +*!* Case This.paPlaje(tnIdTipDoc,1) <> 0 +*!* modificare ROAGEST v 2.0.105 ^ + Case This.paPlaje(tnIdTipDoc,1) <> 0 And !This.paPlaje(tnIdTipDoc,6) + pnNumar = This.paPlaje(tnIdTipDoc,1) + Otherwise + pnNumar = -1 + pnIdTipDoc = tnIdTipDoc + pnIdGestiune = Iif(Isnull(tnIdGestiune) Or Pcount()=1,Null,tnIdGestiune) + This.salveazaAliasVechi() + lcCursor = This.paPlaje(tnIdTipDoc,2) + If Used(lcCursor) + Select (lcCursor) + pnIdSerie = id_serie + Else + pnIdSerie = Null + Endif + lcSql=[begin ] + gcS + [.pack_serii_numere.aloca_numar(?pnIdTipDoc,?pnIdSerie,?pnIdGestiune,?gnIdUtil,?gnIdSucursala,?@pnNumar); end;] + IF !goExecutor.oExecuta(lcSql) + pnNumar = 0 + Endif + Release pnIdTipDoc,pnIdGestiune,pnIdEntitate + With This +*!* modificare ROAGEST v 2.0.105 : daca e activat buffer-ul, atunci pun fiecare numar generat in cursor,nu in array ( in afara de primul, care ramane in array ) + If This.paPlaje(tnIdTipDoc,6) + lcCursor = This.paPlaje(tnIdTipDoc,8) + Select (lcCursor) + Append Blank + Replace numar With pnNumar + Else +*!* modificare ROAGEST v 2.0.105^ + .paPlaje(tnIdTipDoc,1) = pnNumar +*!* modificare ROAGEST v 2.0.105 + Endif +*!* modificare ROAGEST v 2.0.105 ^ + .paPlaje(tnIdTipDoc,5) = pnIdSerie + Endwith + This.selecteazaAliasVechi() + Endcase + Return pnNumar + Endfunc && aloca_numar +****************************** + Procedure verifica_numar + Lparameters tnIdTipDoc,tnNumar + With This + If tnNumar <> .paPlaje(tnIdTipDoc,1) And .paPlaje(tnIdTipDoc,1) <> 0 + .dezaloca_numar(tnIdTipDoc) + Endif + Endwith + Endproc +****************************** + Function verifica_serie + Lparameters tnIdTipDoc + Local lcCursor,llReturn + llReturn = .F. + With This + If !Isnull(This.paPlaje(tnIdTipDoc,2)) + .salveazaAliasVechi() + lcCursor = Alltrim(.paPlaje(tnIdTipDoc,2)) + If Used(lcCursor) + Select (lcCursor) + If Nvl(.paPlaje(tnIdTipDoc,5),-99)<>Nvl(id_serie,-99) + .dezaloca_numar(tnIdTipDoc) + llReturn = .T. + Endif + Endif + .selecteazaAliasVechi() + Else + llReturn = .T. + Endif + Endwith + Return llReturn + Endfunc +****************************** + Procedure dezaloca_numar + Lparameters tnIdTipDoc + Private pnIdTipDoc + pnIdTipDoc = tnIdTipDoc + With This + If !Isnull(This.paPlaje(tnIdTipDoc,2)) + .salveazaAliasVechi() + If .paPlaje(tnIdTipDoc,1) <> 0 + * Cateodata dadea eroare la executia in Oracle wrong type, desi pnIdTipDoc era numeric +*!* lcSql=[begin ] + gcS + [.pack_serii_numere.dezaloca_numar(?pnIdTipDoc); end;] + lcSql=[begin pack_serii_numere.dezaloca_numar(] + ALLTRIM(TRANSFORM(m.pnIdTipDoc)) + [); end;] + If goExecutor.oExecuta(lcSql) + .paPlaje(tnIdTipDoc,1) = 0 + Endif + Endif + .selecteazaAliasVechi() + Endif + Endwith + Release pnIdTipDoc + Endproc && dezaloca_numar +****************************** + Procedure dezaloca_buffer + Lparameters tnIdTipDoc,tlDezactiveazaBuffer + Private pnIdTipDoc + pnIdTipDoc = tnIdTipDoc + With This + pnTip = .paPlaje(tnIdTipDoc,7) + .salveazaAliasVechi() + lcSql=[begin ] + gcS + [.pack_serii_numere.dezaloca_numere(?pnIdTipDoc,?pnTip); end;] + If goExecutor.oExecuta(lcSql) + If pnTip = 1 + .paPlaje(tnIdTipDoc,1) = 0 + Endif + If tlDezactiveazaBuffer + .dezactiveazaBuffer(tnIdTipDoc) + Endif + Endif + .selecteazaAliasVechi() + Endwith + Release pnIdTipDoc,pnTip + Endproc && dezaloca_numere +******************************* + Procedure dezaloca_numere + With This + For i = 1 To This.nTipuriDocument + If .paPlaje(i,1)<>0 + .dezaloca_numar(i) + Endif + Endfor + Endwith + Endproc && dezaloca_numere +****************************** + Function getNumeCursor + Lparameters tnIdTipDoc + Return This.paPlaje(tnIdTipDoc,2) + Endfunc && getNumeCursor +****************************** + Function getSerieCursor + Lparameters tnIdTipDoc + Local lcSerie + With This + If Reccount(.paPlaje(tnIdTipDoc,2))>0 + .salveazaAliasVechi() + Select (.paPlaje(tnIdTipDoc,2)) + lcSerie = Alltrim(serie) + .selecteazaAliasVechi() + Else + lcSerie = [] + Endif + Endwith + Return lcSerie + Endfunc && getNumeCursor +****************************** + Function getLungimeSerie + Lparameters tnIdTipDoc + Local lnLungime + With This + If Reccount(.paPlaje(tnIdTipDoc,2))>0 + .salveazaAliasVechi() + Select (.paPlaje(tnIdTipDoc,2)) + lnLungime = lungime + .selecteazaAliasVechi() + Else + lnLungime = Null + Endif + Endwith + Return lnLungime + Endfunc && getLungimeSerie +****************************** + Function getIdSerie + Lparameters tnIdTipDoc + Return This.paPlaje(tnIdTipDoc,5) + Endfunc && getIdSerie +****************************** +Enddefine +************************************ INCEPUT : viz_config_serii_complet ********************************** +Procedure viz_config_serii_complet +Lparameters tnIdTipDoc +Private pcSchema,pcSelect,pcFiltru,pcOrder,poDocumente,poPlaje,poSerii +Local llAfiseaza +Store [] To pcSchema,pcSelect,pcFiltru,pcOrder,poDocumente,poPlaje,poSerii +Store .F. To llAfiseaza +pcSchema = [] +pcSelect = [select id_tipdoc, id_tipentitate, tipdoc, descriere, maxlen, cu_serie, cu_plaje, tipentitate, plajepeentitate, an, luna, an2caractere from vserii_tipdoc where] +If Empty(tnIdTipDoc) + pcFiltru = [2=2] +Else + pcFiltru = [id_tipdoc=] + Alltrim(Str(tnIdTipDoc)) +Endif +pcOrder = [tipdoc] +llAfiseaza = .F. +gencursor('poDocumente','crsTipdoc',pcSelect,pcFiltru,pcSchema,pcOrder,llAfiseaza) +poDocumente.ca_baza1.afisare() + +pcSchema = [id_serie N(10),serie C(10),an N(1),luna N(1),lungime N(10),inactiv N(1),resetare C(50),exemplu C(50), isautofactura N(1), isbeneficiari N(1), isterti N(1), isfurnizori N(1), prefix N(5), an2caractere N(1)] +pcSelect = [select id_serie, serie, an, luna, lungime, inactiv, resetare, exemplu, isautofactura, isbeneficiari, isterti, isfurnizori, prefix, an2caractere from vserii where] +pcFiltru = [2=2] +pcOrder = [serie] +llAfiseaza = .F. +gencursor('poSerii','crsSerii',pcSelect,pcFiltru,pcSchema,pcOrder,llAfiseaza) +poSerii.ca_baza1.afisare() + +pcSchema = [id_plaja N(10),id_tipdoc N(10),id_tipentitate N(10),id_entitate N(10),pl_inf N(18),pl_sup N(18),] + ; + [inactiv N(1),id_serie N(10),datai d,datas d,tipentitate C(100),entitate C(100),serie C(10),urmval C(100),valabil N(1)] +pcSelect = [select id_plaja, id_tipdoc, id_tipentitate, id_entitate, pl_inf, pl_sup, inactiv, id_serie,] + ; + [datai, datas, tipentitate, entitate, serie, urmval, valabil from vplaje_numere where] +pcFiltru = [1=2] +pcOrder = [id_tipdoc] +llAfiseaza = .F. +lcFiltruOriginal = [NVL(id_sucursala,-99) = NVL(?gnIdSucursala,-99)] +gencursor('poPlaje','crsPlaje',pcSelect,pcFiltru,pcSchema,pcOrder,llAfiseaza,[],.F.,lcFiltruOriginal) + +ofrmseriicomplet = Createobject('frm_plaje_numere') +ofrmseriicomplet.Show(1) + +Use In (Select('crsTipdoc')) +Use In (Select('crsSerii')) +Use In (Select('crsPlaje')) +Release ofrmseriicomplet, poDocumente, poSerii, poPlaje +Endproc && viz_config_serii_complet +************************************ SFARSIT : viz_config_serii_complet ********************************** +*********************************** INCEPUT : caut_tipentitate_permis ******************************** +Function caut_tipentitate_permis +Parameters tnTipDoc,tnPornire, tlDesktop +Private pnTipDoc +pnTipDoc = tnTipDoc +Local lcCont,loCauta, lnPornire, llDesktop +lnPornire = tnPornire && 1-incepe cu...6-toate +llDesktop = tlDesktop +Store "" To loCauta + +lcSelect = [select id_tipentitate, descriere from ] + gcS + [.vserii_tipentpermis] +lcFiltru = [1=2] +lcSchema = [] +lcOrder = [descriere] +lccoloane = [descriere] +lcTitlu = [Alegeti tipul entitatii] +lcTitluColoane = [Tip entitate] +lcFiltruOriginal = [id_tipdoc = ?pnTipDoc] +lcNumeProc = [] +llToateIreg = .F. +loCauta = cauta_alfa(lcSelect,lcFiltru,lcSchema,lcOrder,lccoloane,lcTitlu,lcTitluColoane, lcNumeProc, llToateIreg, lcFiltruOriginal,,lnPornire,,,llDesktop) && 11.07.2007 + +Return loCauta +Endfunc && caut_tipentitate_permis +********************************** SFARSIT : caut_tipentitate_permis ******************************** +************************************** INCEPUT : caut_serii_fact ************************************ +Function caut_serii_fact +Parameters tnPornire, tlDesktop + +Local lcCont,loCauta, lnPornire, llDesktop +lnPornire = tnPornire && 1-incepe cu...6-toate +llDesktop = tlDesktop +Store "" To loCauta + +lcSelect = [select id_serie,serie,resetare,lungime,exemplu,an,luna from ] + gcS + [.vserii] +lcFiltru = [1=2] +lcSchema = [id_serie N(10),serie C(50),resetare C(50),lungime N(10),exemplu C(50),an N(1),luna N(1)] +lcOrder = [serie,luna,an] +lccoloane = [serie,resetare,lungime,exemplu] +lcTitlu = [Alegeti seria] +lcTitluColoane = [Serie,Resetare,Lungime,Exemplu] +lcFiltruOriginal = [inactiv = 0] +lcNumeProc = [] +llToateIreg = .F. +loCauta = cauta_alfa(lcSelect,lcFiltru,lcSchema,lcOrder,lccoloane,lcTitlu,lcTitluColoane, lcNumeProc, llToateIreg, lcFiltruOriginal,,lnPornire,,,llDesktop) && 11.07.2007 + +Return loCauta +Endfunc && caut_serii_fact +************************************** SFARSIT : caut_serii_fact ************************************ \ No newline at end of file diff --git a/COMUN/programe/ostartfirma.prg b/COMUN/programe/ostartfirma.prg new file mode 100644 index 0000000..16d9eb6 --- /dev/null +++ b/COMUN/programe/ostartfirma.prg @@ -0,0 +1,337 @@ +*!* 09.07.2020 +*!* marius.mutu +*!* start_firma - initializare pack_sesiune.set_an, set_luna, pack_sesiune.set_sucursala, pack_sesiune.set_id_util + +* PROCEDURE Start_Firma( ) +* Date : 06/10/2004, 12:27:00 +* author : marius.mutu +* description: +* creeaza cursorul v_firme; +* alege firma, anul, luna; +* initializeaza = schema firmei +* creeaza cursorul si verifica luna aleasa +* apeleaza +* apeleaza + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* INCEPUT:Start_Firma ******************************************* +Procedure Start_Firma + + + *** selectez firmele + Do update_firme_util_prog With gnIdProgram,gnIdUtil In updateserver.prg + + Select v_Firme + If Reccount() = 0 + aMessagebox('Nu aveti drepturi pe nici o firma!',0+16,'Atentie') + Quit + Endif + Go Top + If Type('goFirma') = 'O' And Type('goFirma.id_firma') = 'N' + If !Empty(goFirma.id_firma) And !Isnull(goFirma.id_firma) + Locate For id_firma = goFirma.id_firma + If !Found() + Go Top + Endif + Endif + Endif + + Do While .T. + + + *--------------------- + Private polunilean + + lcSelect = [select * from syn_lunilean ] + lcCursor = [v_lunilean] + lnSucces = goExecutor.oExecute(lcSelect,lcCursor) + If lnSucces < 0 + aMessagebox('Eroare la selectie ' + goExecutor.cEroare) + Return + Endif + + + + *--------------------- + If Type('loStart_Firma')!='O' Or Isnull(loStart_Firma) + *!* DO FORM frm_start_firma NAME loStart_Firma LINKED NOSHOW + Select v_Firme + Do Form frm_start_firma_nou Name loStart_Firma Linked Noshow + Endif + + Select v_Firme + If gnLuna*gnAn <> 0 + Select v_lunilean + Locate For nrluna = gnLuna + + loStart_Firma.cLuna = Alltrim(v_lunilean.numeluna) + loStart_Firma.cAn = Alltrim(Str(gnAn)) + Endif + loStart_Firma.cFirma = Alltrim(v_Firme.firma) + *****************************Inceput Lansare toolbar***************************** + If !(gnLuna*gnAn <> 0 And primadata=.T.) + loStart_Firma.Show(1) + Else + *!* 05.03.2007 + *!* la lansarea din toolbar formularul este invizibil si gnbuton = 2 -> (ca si cum as da renunt - iese din program) + gnbuton = 1 + *!* 05.03.2007 ^ + + Select v_Firme +*!* 11.02.2008 +*!* Locate For Upper(Alltrim(schema))== gcs + Locate For id_firma = gnIdFirma +*!* 11.02.2008 ^ + lcschemaParola=Alltrim(v_Firme.parola) + loStart_Firma.nnrluna = gnLuna + loStart_Firma.cAn = Alltrim(Str(gnAn)) + lnschema_noua = schema_noua + lnIdFirma = v_firme.id_firma + + lnSucces = schimba_firma(gnHandle,gcs,lnIdFirma,lcschemaParola,lnschema_noua) + If lnSucces<0 + aMessagebox(goExecutor.cEroare, 0+16, 'Eroare') + Return + Endif + *--- &&lansare + Endif + + *****************************Sfarsit Lansare toolbar***************************** + *!* modificare 01.03.2007 + *!* am pus conditia TYPE("loStart_Firma") # "O" pentru cazul in care utilizatorul apasa "X" + *!* atunci cand este vizibila fereastra de alegere a firmei/lunii/anului >> apare "Doriti sa iesiti din program" + *!* si daca apasa da,atunci gnButon = 1 din fereastra de confirmare si nu de la fereastra de alegere a firmei + If Type("loStart_Firma.nnrluna") = "U" And gnbuton = 1 + Return To Master + Endif + *!* modificare 01.03.2007 ^ + If gnbuton <> 1 + * QUIT + Cancel + *RETRY + *RETURN + If Buton = 2 + Do Start_Firma + Endif + Endif + + Select v_Firme + *!* modificare 17.12.2008 + Locate for id_firma = gnIdFirma + *!* modificare 17.12.2008 ^ + Scatter Name goFirma && variabila globala + + If Type('gofirma.codfiscalfro') = 'U' + AddProperty(gofirma, 'codfiscalfro', ALLTRIM(Strtran(Alltrim(gofirma.cod_fiscal), 'RO',''))) + Endif + + lnId_Firma = v_Firme.id_firma + *lnLuna = ROUND(VAL(loStart_Firma.cLuna),0) + lnLuna = loStart_Firma.nnrluna + lnAn = Round(Val(loStart_Firma.cAn),0) + lcFirma = Upper(Alltrim(v_Firme.firma)) + lcSchema = Upper(Alltrim(v_Firme.schema)) + lcschemaParola = Upper(Alltrim(v_Firme.parola)) + lnschema_noua = v_Firme.schema_noua + + *!* IF USED('v_ancalendar') + *!* USE IN v_ancalendar + *!* ENDIF + *!* IF USED('crs_ani') + *!* USE IN crs_ani + *!* ENDIF + + + + If Empty(lcSchema) Or Isnull(lcSchema) + *!* DO mesaj WITH "Firma "+ lcFirma + " nu are definita schema in ","" + lcMesaj="Firma "+ lcFirma + " nu are definita schema in !" + aMessagebox(lcMesaj,0+48,"Atentie") + Loop + Endif + +*!* 11.02.2008 +*!* If gcs <> lcSchema + IF lnId_Firma <> goFirma.id_firma + LLSCHIMB = .T. + Else + LLSCHIMB = .F. + Endif +*!* 11.02.2008 ^ + + gcs = lcSchema + lnSucces = 1 + If LLSCHIMB + lnSucces = schimba_firma(gnHandle,gcS,lnId_Firma,lcSchema,lnschema_noua) + *DO schimba_firma WITH gnHandle,GCS,lcschemaParola + If lnSucces < 0 + aMessagebox('Firma nu s-a putut schimba!'+Chr(13)+Chr(13)+'ostartfirma.prg',0+16) + Return + Endif + + Endif + + If lnSucces > 0 + lnSucces = update_calendar() + Endif + + + + llLunaBuna = .F. + If !Used('calendar') + *!* DO mesaj WITH 'Nu s-a putut deschide calendarul firmei ' + lcFirma,'' + lcMesaj="Nu s-a putut deschide calendarul firmei "+ lcFirma + "!" + aMessagebox(lcMesaj,0+48,"Atentie") + Loop + Endif + *** verific daca luna aleasa e deschisa in calendar + Select Min(Val(an)*12 + Val(nl)) As minluna,Max(Val(an)*12 + Val(nl)) As maxluna From calendar Into Cursor crsCalendar + Select crsCalendar + lnMaxLuna = maxluna + lnMinLuna = minluna + lnAnLuna = lnAn * 12+ lnLuna + Use In crsCalendar + + lnLunaMax = Mod(lnMaxLuna,12) + lnAnMax = Int(lnMaxLuna/12) + If lnLunaMax = 0 And lnAnMax <> 0 + lnLunaMax = 12 + lnAnMax = lnAnMax - 1 + Endif + + lnLunaMin = Mod(lnMinLuna,12) + lnAnMin = Int(lnMinLuna/12) + If lnLunaMin = 0 And lnAnMin <> 0 + lnLunaMin = 12 + lnAnMin = lnAnMin - 1 + Endif + + Select calendar + Locate For Val(nl) = lnLuna And Val(an) = lnAn + If Found() + llLunaBuna = .T. + Scatter Name goCalendar + + If lnMaxLuna = lnAnLuna + glUltimaLuna = .T. + Endif + If lnMinLuna = lnAnLuna + glPrimaLuna = .T. + Endif + + glLunaBuna = llLunaBuna + + + lnSucces = OINIT_OPTIUNI() + If lnSucces > 0 + Do update_nomenclator.prg + Do ovariabile_globale.prg + lcSql = [begin pack_contafin.set_idutil(?gnIdUtil); pack_contafin.set_id_sucursala(?gnIdSucursala); pack_sesiune.setan(?gnAn); pack_sesiune.setluna(?gnLuna);end;] + lnSucces = goExecutor.oExecute(m.lcSql) + Endif + + Return lnSucces + + Else + + + Do Case + Case lnAnLuna > lnMaxLuna And lnMaxLuna <> 0 + lcMesaj = [Ultima luna deschisa este ] + Alltrim(Str(lnLunaMax)) + [/] + Alltrim(Str(lnAnMax)) + gnLuna = lnLunaMax + gnAn = lnAnMax + pcNl = Padl(Alltrim(Str(gnLuna)),2,'0') + pcAn = Alltrim(Str(gnAn)) + m.nl = m.pcnl + m.an = m.pcAn + Case lnAnLuna < lnMinLuna And lnMinLuna <>0 + lcMesaj = [Prima luna deschisa este ] + Alltrim(Str(lnLunaMin)) + [/] + Alltrim(Str(lnAnMin)) + gnLuna = lnLunaMin + gnAn = lnAnMin + pcNl = Padl(Alltrim(Str(gnLuna)),2,'0') + pcAn = Alltrim(Str(gnAn)) + m.nl = m.pcnl + m.an = m.pcAn + Otherwise + lcMesaj = [Luna ] + Alltrim(Str(lnLuna)) + [ / ] + Alltrim(Str(lnAn)) + [ nu este deschisa in calendar] + Endcase + *!* DO mesaj WITH lcMesaj,'' + aMessagebox(lcMesaj,0+48,"Atentie") + Loop + Endif + Enddo +Endproc +******************************************* SFARSIT: Start_Firma ******************************************* + + +* PROCEDURE login( ) +* Date : 18/10/2004, 13:14:01 +* author : marius.mutu +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* INCEPUT:login ******************************************* +Procedure login( ) + *LPARAMETERS tcHost,tcUserName,tcPassword,tcUserNameApp,tcPasswordApp,tnIdUtil,tnIdProgram + + Do Form frm_login + +Endproc +******************************************* SFARSIT: login ******************************************* + + +******************************************* INCEPUT:schimba_firma ************************************* +Procedure schimba_firma + Lparameters tnHandle,tcSchema, tnIdFirma,tcschemaParola,tnschema_noua + Local llDeconectez,lcuser, lnSucces, lnIdFirma + LOCAL lnSucces + lnSucces = 1 + + IF TYPE('goFirma') = 'O' + lnIdFirma = goFirma.id_firma + ELSE + lnIdFirma = -1 + ENDIF +*!* 16.02.2009 +*!* aveam probleme :) +*!* ma deconectez/conectez la fiecare apel +*!* IF tnIdFirma <> lnIdFirma +*!* llDeconectez = .T. +*!* ENDIF + llDeconectez = .T. +*!* 16.02.2009 ^ + + If llDeconectez + goConn.Disconnect(tnHandle) + + If tnschema_noua = 0 + lcHost = gcHost + lcuser = gcUserName + lcPassword = gcPassword + Else + lcHost = gcHost + lcuser = tcSchema + lcPassword = tcschemaParola + Endif + + lnHandle = goConn.Connect(lcHost, lcuser, lcPassword) + goLog.Log('CONECTARE ' + lcHost + ' ' + lcUser + ' ID_FIRMA ' + STR(lnIdFirma) + ' HANDLE = ' + TRANSFORM(lnHandle), PROGRAM()) + + If lnHandle < 0 + lnSucces = -1 + Else + lnSucces = 1 + Endif + gcs = tcSchema + + Endif && llDeconectez + + + Return lnSucces + +Endproc +******************************************* SFARSIT:schimba_firma ************************************* diff --git a/COMUN/programe/oupdate.prg b/COMUN/programe/oupdate.prg new file mode 100644 index 0000000..a3fe0d1 --- /dev/null +++ b/COMUN/programe/oupdate.prg @@ -0,0 +1,515 @@ +*!* 21.07.2009 +*!* marius.mutu +*!* set library to inainte de dezarhivarea arhivelor (vezi comunroa care are vfpencryption si da conflict) + +*!* 19.03.2024 +*!* marius.mutu +*!* updatecheck: s-a inlocuit dezarhivarea cu vfpcompression cu shell.copyhere + +*!* comun\programe\ +*!* oupdate.prg +*!* iniacces.prg +*!* procese.prg +*!* version.prg +*!* xmlaccess.prg +*!* xmlparser.prg +*!* filebringer.prg +*!* wwcodeupdate.prg +*!* wwhttp.prg +*!* wwapi.prg + +*!* comun\include\ +*!* security.h + +*!* comun\clase\ +*!* wwdialogs.vcx + +*!* main.prg +*!* PRIVATE gcDirMare +*!* gcDirMare=Left(gcAppPath,liat) + +*!* SET CLASSLIB TO wwdialogs ADDITIVE + +#Define crlf Chr(13)+Chr(10) +Define Class oUpdate As Custom + oInterfataXml = Null + oContainerAfisare = Null + cFisier = Null + cExtensieFisier = [.zip] + cExtensieFisierExe = [.exe] && pentru romfast_suport + + Procedure Init + Lparameters tcFisier,toContainerAfisare,tcProgram + Declare ExitProcess In WIN32API Integer + + Return This.initializeazaDate(tcFisier,toContainerAfisare,tcProgram) + Endproc + + Function reinitializeazaDate + Lparameters tcFisier,toContainerAfisare,tcProgram + This.oInterfataXml = Null + Return This.initializeazaDate(tcFisier,toContainerAfisare,tcProgram) + Endfunc + + Function initializeazaDate + Lparameters tcFisier,toContainerAfisare,tcProgram + Local llReturn + llReturn = .T. + This.oContainerAfisare = toContainerAfisare + If Empty(tcFisier) + This.cFisier= This.getServer() + Else + This.cFisier = tcFisier + Endif + This.oInterfataXml = Createobject("xmlAccess",This.cFisier) + If Type('This.oInterfataXml') <> 'O' + This.actualizeazaContainerAfisare("Nu se pot face actualizri!") + If !Empty(tcProgram) + lcVersiune = Iif(Left(tcProgram,3)='ROA',Getversion(tcProgram),GetTxtVersion(tcProgram)) + lcVersiune = Iif(lcVersiune = [0.0.0],[...],[ ] + lcVersiune) + This.actualizeazaContainerAfisare("Se lanseaz " + tcProgram + lcVersiune) + Endif + llReturn = .F. + Endif + Return llReturn + Endfunc + + Procedure actualizeazaContainerAfisare + Lparameters tcMesaj &&,tlSelStart modificare ROASTART v 2.0.23 + If Type('this.oContainerAfisare') = 'O' + This.oContainerAfisare.Value = This.oContainerAfisare.Value + tcMesaj + crlf +*!* modificare ROASTART v 2.0.23 +*!* If tlSelStart +*!* This.oContainerAfisare.SelStart = Len(This.oContainerAfisare.Value) +*!* Endif +*!* modificare ROASTART v 2.0.23 ^ + This.oContainerAfisare.Refresh() + Endif + Endproc + + Function getServer + Local lcnumeserver + + lcnumeserver=[] + If Type('goFirma') = 'O' And Type('goFirma.nume_server') <> 'U' + lcnumeserver = Alltrim(goFirma.nume_server) + Else + lcSql = [select nume_server from syn_nom_firme where id_firma=?gnIdFirma] + lnSucces = goExecutor.oExecute(lcSql,[crsnf]) + If lnSucces < 0 + aMessagebox(goExecutor.ceroare,64,'Eroare') + Else + Select crsnf + lcnumeserver = Alltrim(nume_server) + Endif + If Used('crsnf') + Use In crsnf + Endif + Endif + Return lcnumeserver + Endfunc + Procedure createUpdateCursor + Lparameters tcNumeCursor + This.oInterfataXml.getXmlItems(tcNumeCursor) + Endproc + + Function Getversion + Lparameters tcProgram + Return This.oInterfataXml.Getversion(tcProgram) + Endfunc + + Function updatecheckTxt + Lparameters tcCurrentProg, tlSilent, tlLocalFileExist + * tlLocalFileExist: daca exista fisierul pe calculator. se descarca chiar daca versiunile din fisierul de setari si cel de pe internet sunt la fel, dar nu exista fisierul pe local + + Local lcCaleActualizari, lcVersiuneLocal, lcVersiuneInternet, lcFisier, lcFisierVersiuniInternet, lcSectiune, lcExtensieFisier + Local lcLibraryPath, loEx As Exception + lcLibraryPath = gcDirMare + [COMUNROA\vfpconnection.fll] +*!* modificare 06.03.2014 : am adaugat lcExtensieFisier in loc de This.cExtensieFisier + lcExtensieFisier = IIF(INLIST(tcCurrentProg, [romfast_suport], [roascreenshot]),This.cExtensieFisierExe,This.cExtensieFisier) + If File(lcLibraryPath) + Try + Set Library To (lcLibraryPath) Additive + lcCaleActualizari = [http://www.romfast.ro/romfastsuport/files/] + lcFisierVersiuniInternet = [versiune_aplicatii.txt] + lcSectiune = [versiuni] + lcFisier = lcCaleActualizari + lcFisierVersiuniInternet + If !HTTPGet(lcFisier, gcTempPath+lcFisierVersiuniInternet, [MyProgressHandler("] + lcFisier + [")]) + IF !m.tlSilent + polog.Log("Nu se poate descarca fisierul cu versiuni! " + m.lcFisier, Program()) + Messagebox("Nu se poate descarca fisierul cu versiuni!",16,"Eroare") + ENDIF + Else + lcBuffer=Space(255) + + DECLARE INTEGER GetPrivateProfileString ; + IN WIN32API ; + STRING cSection,; + STRING cEntry,; + STRING cDefault,; + STRING @cRetVal,; + INTEGER nSize,; + STRING cFileName + + GetPrivateProfileString(lcSectiune,tcCurrentProg,"",@lcBuffer, Len(lcBuffer), gcTempPath+lcFisierVersiuniInternet) + lcVersiuneInternet = Alltrim(Strtran(lcBuffer,Chr(0),"")) + Delete File (gcTempPath+lcFisierVersiuniInternet) + loIniHandler = Createobject("iniaccess") + lcVersiuneLocal = loIniHandler.getCValue(lcSectiune,tcCurrentProg) + polog.Log("Program: " + tcCurrentProg + " VersiuneLocal: " + lcVersiuneLocal + " VersiuneInternet: " + lcVersiuneInternet + " LocalFileExist: " + TRANSFORM(m.tlLocalFileExist), Program()) + If ((Empty(lcVersiuneLocal) Or lcVersiuneLocal < lcVersiuneInternet) And !Empty(lcVersiuneInternet)) OR !m.tlLocalFileExist +*!* modificare 28.06.2012 : am adaugat This.cExtensieFisier in loc de .exe +*!* modificare 06.03.2014 : am adaugat lcExtensieFisier in loc de This.cExtensieFisier + lcFisier = lcCaleActualizari + tcCurrentProg + lcExtensieFisier + If (Bringfile(lcFisier,tcCurrentProg,gcDirMare+tcCurrentProg+lcExtensieFisier )=.F.) + IF !m.tlSilent + polog.Log("Eroare la copierea "+tcCurrentProg + ", versiunea "+lcVersiuneInternet+"!", Program()) + Messagebox("Eroare la copierea "+tcCurrentProg + ", versiunea "+lcVersiuneInternet+"!",16,"Eroare") + ENDIF + Else + loIniHandler.setCValue(lcSectiune,tcCurrentProg,lcVersiuneInternet) + Endif + Endif + Release loIniHandler + Endif + Catch To loEx + IF !m.tlSilent + polog.Log('vfpconnection ' + loEx.Message, Program()) + Messagebox('vfpconnection ' + loEx.Message) + ENDIF + Endtry + Endif + Return .T. + Endfunc + + Function updatecheck + Lparameters tccurrentprog,tlmsgshow,tnTipActualizare,tcDefaultDir + * tccurrentprog este programul care trebuie actualizat + * lcmsgshow - daca e true,atunci se citeste din ini daca apare mesajul de confirmare sau nu + * tnTipActualizare - 0 = este din numeserver.xml ; + 1 = este din roastart.xml ; + 2 = programul se actualizeaza singur la pornire + * tcDefaultDir - directorul in care se copiaza actualizarile pentru configurarile USER... ; + ( de ex.: DEV_USERREPORTS e tccurrentprog,dar trebuie sa fie copiat in USERREPORTS ) + + Local iniHandler As Object,lnTipFisier,lnTipActualizare && modificare v 2.0.14 : am adaugat lnTipFisier + LOCAL lcOldLibrary + + lnTipActualizare = Iif(!Empty(tnTipActualizare),tnTipActualizare,0) + *!* modificare v 2.0.6 + *!* If Used("SERVER_INFO") + *!* Use In SERVER_INFO + *!* Endif + *!* modificare v 2.0.6 ^ + If lnTipActualizare<>2 + If At("_",tccurrentprog)#0 + lccurrentUR=Substr(tccurrentprog,At("_",tccurrentprog)+1) + Else + lccurrentUR=tccurrentprog + Endif + + ******************************************** + * Rularea procedurii de update pentru + * toate programele in afara de ROASTART + ******************************************** + + + lbrun=.T. + Local lraspuns + lraspuns=4 + Local loex1,loex2,loex As Exception + *!* Verifica daca trebuie rulate + *!* procedurile de update + This.actualizeazaContainerAfisare(tccurrentprog + " se verific ultima versiune") + iniHandler=Createobject("iniaccess") + If lnTipActualizare = 0 + lnTipFisier = 0 + If Empty(This.cFisier) Or This.cFisier = "ROASTART" + XmlData="nu s-a putut conecta" + Else + polog.Log("S-a gasit serverul "+This.cFisier,Program()) + polog.Log("Se cauta pentru "+This.cFisier+".XML",Program()) + XmlData=This.oInterfataXml.ReadXmlFile(tccurrentprog) + Endif + Else + If Left(tccurrentprog,3)="ROA" + lnTipFisier = 0 + Else + lnTipFisier = 1 + Endif + polog.Log("Se cauta xml-ul pentru "+tccurrentprog,Program()) + XmlData=This.oInterfataXml.ReadXmlFile(tccurrentprog) + Endif + Do Case + Case XmlData$"<>(){}" + polog.Log("Nu s-au gasit in fisierul Xml inregistrari pentru "+tccurrentprog,Program()) + Case XmlData$"nu s-a putut conecta" + If iniHandler.getURL()!="" + This.actualizeazaContainerAfisare("Nu s-a gsit actualizare pe internet.") + else + This.actualizeazaContainerAfisare("Nu s-a gsit actualizare n reea/local.") &&,.T. modificare ROASTART v 2.0.23 + Endif + Otherwise + + If tlmsgshow=.F. + lcallowconfirm=.T. + Else + lcallowconfirm=.F. + If(iniHandler.getAllowConfirm()) + lcallowconfirm=.T. + Endif + Endif + + If Compareversion(stripXmlVersion(XmlData),XmlData,; + IIF(Empty(tcDefaultDir),tccurrentprog,tcDefaultDir),lcallowconfirm,lnTipFisier) + polog.Log("S-a gasit versiunea " + stripXmlVersion(XmlData) + " pentru "+tccurrentprog + " (" + Getversion(tccurrentprog) + ")",Program()) + lcconfirm=0 + If iniHandler.getAllowConfirm() + lcconfirm = aMessagebox(stripXmlMsg(XmlData)+crlf+"Dorii s-l ncrcai?",36,"Confirmare actualizare") + Else + lcconfirm = 6 + Endif + If lcconfirm = 6 + This.actualizeazaContainerAfisare(tccurrentprog + " se actualizeaz versiunea "+stripXmlVersion(XmlData))&&,.T. modificare ROASTART v 2.0.23 + polog.Log("Se incepe actualizarea "+tccurrentprog+" la versiunea "+stripXmlVersion(XmlData),Program()) + *!* Verifica daca nu cumva programul este in procese + *This.oContainerAfisare.value = This.oContainerAfisare.value+"Se verfica daca se poate face updateul" + crlf + polog.Log("Se verifica daca nu cumva programul este in procese ",Program()) + lnWinHandle=1 + Do While lnWinHandle=1 And lraspuns=4 + lnWinHandle=0 + + If CheckProcess(tccurrentprog) + lnWinHandle=1 + *This.oContainerAfisare.value = This.oContainerAfisare.value+"Nu se poate face updateul(fisier in uz)" + crlf + polog.Log("Programul s-a gasit printre procesele care ruleaza",Program()) + Endif + + If lnWinHandle =1 + lraspuns=aMessagebox("nchideti toate instantele " + tccurrentprog + " i apsai pe Repet pentru a actualiza programul!",21,"Actualizare") + Else + Exit + Endif + Enddo + If lraspuns=2 + polog.Log("S-a respins actualizarea",Program()) + This.actualizeazaContainerAfisare("S-a respins actualizarea " + tccurrentprog)&&,.T. modificare ROASTART v 2.0.23 + Endif + + If lnWinHandle =0 + ************review ..CV + ************03.oct.2007 + polog.Log("Se aduce fisierul",Program()) + myfilestr=StripXmlFile(XmlData) + If iniHandler.getDefault()="URL" + If Occurs("http",myfilestr)>0 + lcFileToBeBrought=myfilestr + Else + If Left(myfilestr,1)="\" + lcFileToBeBrought=Right(myfilestr,Len(myfilestr)-1) + Else + lcFileToBeBrought=myfilestr + Endif + lcFileToBeBrought=iniHandler.getURL()+"/"+lcFileToBeBrought + Endif + lcFileToBeBrought = strtran(lcFileToBeBrought,[\],[/]) && modificare ROASTART v 2.1.3 + Else + If Left(myfilestr,1)="\" + lcFileToBeBrought=Right(myfilestr,Len(myfilestr)-1) + Else + lcFileToBeBrought=myfilestr + Endif + lcFileToBeBrought=Addbs(ShortPath(iniHandler.getNetworkPath()))+lcFileToBeBrought + Endif + ****************review***Cristian Vasile*** + ****************cale relativa URL********** + ******************************03.10.2007*** + If(Bringfile(lcFileToBeBrought,tccurrentprog)=.F.) + aMessagebox("A intervenit o eroare la copierea fisierului!",16,"Copiere") + polog.Log("A intervenit o eroare la copierea fisierului",Program()) + *This.oContainerAfisare.txt_Mesaj.Caption = This.oContainerAfisare.txt_Mesaj.Caption+"A intervenit o eroare la copierea fisierului" + crlf + Else + tempfile = GetCurrentTempPath(tccurrentprog) + Cd Addbs(Justpath(tempfile)) + +*!* lcEncryptionFile = gcComunPath+"vfpcompression.fll" +*!* IF !"vfpcompression"$LOWER(SET("Library")) +*!* SET LIBRARY TO (lcEncryptionFile) ADDITIVE +*!* ENDIF +*!* UnzipQuick(tempfile) + + lcErrorMessage = '' + lcUnzipDir = JUSTPATH(m.tempfile) + llSucces = UnzipQuickShell(m.tempfile, @lcUnzipDir, @lcErrorMessage) + IF m.llSucces + polog.Log("S-a actualizat "+ tccurrentprog + " la versiunea "+stripXmlVersion(XmlData),Program()) + This.actualizeazaContainerAfisare(tccurrentprog + " s-a actualizat la versiunea "+stripXmlVersion(XmlData))&&,.T. modificare ROASTART v 2.0.23 + ELSE + + polog.Log("Nu s-a actualizat "+ tccurrentprog + " la versiunea "+stripXmlVersion(XmlData),Program()) + This.actualizeazaContainerAfisare(tccurrentprog + " NU s-a actualizat la versiunea "+stripXmlVersion(XmlData) + " " + m.lcErrorMessage)&&,.T. modificare ROASTART v 2.0.23 + ENDIF + lcDir=Addbs(Justpath(Sys(16,0))) + *!* Stergere temporar + *!* + Try +*!* modificare 28.06.2012 +*!* Delete File "&tempfile" + DELETE FILE (tempfile) +*!* modificare 28.06.2012 ^ + Catch To loex2 + If loex2.ErrorNo=1705 + This.actualizeazaContainerAfisare("NU s-a putut sterge fisierul temporar!")&&,.T. modificare ROASTART v 2.0.23 + Endif + Endtry + + *!* + + If Atc("PROCEDURE",lcDir) > 0 + lcDir = Substr(lcDir,Rat(":",lcDir)-1) + Endif + Cd (lcDir) + + Endif + Else + * MESSAGEBOX("Inchideti toate instantele de ale ROA - Financiar contabilitate pentru a actualiza programul.",16,"Actualizare !") + lbrun=.F. + Endif + Else + *!* Strtofile(Dtoc(Date())+" "+Time()+" > S-a respins de utillizator updateul programului "+tccurrentprog+Chr(13)+Chr(10),gcDirMare + "updates.log",1) + polog.Log("S-a respins de utilizator actualizarea programului "+tccurrentprog,Program()) + + Endif + + Else + polog.Log(tccurrentprog + " " + stripXmlVersion(XmlData)+" este cea mai noua versiune.",Program()) + This.actualizeazaContainerAfisare(tccurrentprog + " " + stripXmlVersion(XmlData)+" este cea mai nou versiune.")&&,.T. modificare ROASTART v 2.0.23 + Endif + Endcase + + + *!* Release InterfataXml + Release iniHandler + + + Return lbrun + + ******************************************** + * Rularea procedurii de update pentru + * toate programele in afara de ROASTART + ******************************************** + Else + Try +*!* modificare 28.06.2012 +*!* Delete file "temporar.exe" + Delete File "temporar"+This.cExtensieFisier +*!* modificare 28.06.2012 ^ + Delete File "test.vbs" + Endtry + *MESSAGEBOX("Verificare") + *!* InterfataXml=Createobject("xmlAccess") + iniHandler=Createobject("iniaccess") + + XmlData=This.oInterfataXml.ReadXmlFile(tccurrentprog) + Do Case + Case XmlData$"<>(){}" + polog.Log("Nu s-au gasit in fisierul Xml inregistrari pentru "+tccurrentprog,Program()) + Case XmlData$"nu s-a putut conecta" + If iniHandler.getURL()!="" + This.actualizeazaContainerAfisare("Nu s-a gsit actualizare pe internet.") + ELSE + This.actualizeazaContainerAfisare("Nu s-a gsit actualizare n reea/local.")&&,.T. modificare ROASTART v 2.0.23 + Endif + Otherwise + polog.Log("Am inceput update "+tccurrentprog+" !",Program()) + polog.Log("Versiunea din xml este " + stripXmlVersion(XmlData)) + If Compareversion(stripXmlVersion(XmlData),XmlData,tccurrentprog,iniHandler.getAllowConfirm()) + polog.Log("Am detectat versiuni diferite",Program()) + lcconfirm=0 + If iniHandler.getAllowConfirm() + lcconfirm = aMessagebox(stripXmlMsg(XmlData)+crlf+"Dorii s-l ncrcai?",292,"Confirmare actualizare") + Else + lcconfirm = 6 + Endif + + If lcconfirm = 6 + polog.Log("Trebuie sa aduca programul",Program()) + ************review ..CV + ************03.oct.2007 + myfilestr=StripXmlFile(XmlData) + If iniHandler.getDefault()="URL" + If Occurs("http",myfilestr)>0 + lcFileToBeBrought=myfilestr + Else + If Left(myfilestr,1)="\" + lcFileToBeBrought=Right(myfilestr,Len(myfilestr)-1) + Else + lcFileToBeBrought=myfilestr + Endif + lcFileToBeBrought=iniHandler.getURL()+"/"+lcFileToBeBrought + Endif + + Else + If Left(myfilestr,1)="\" + lcFileToBeBrought=Right(myfilestr,Len(myfilestr)-1) + Else + lcFileToBeBrought=myfilestr + Endif + lcFileToBeBrought=Addbs(ShortPath(iniHandler.getNetworkPath()))+lcFileToBeBrought + Endif + ****************review***Cristian Vasile*** + ****************cale relativa URL********** + ******************************03.10.2007*** + If(Bringfile(lcFileToBeBrought,tccurrentprog)=.F.) + aMessagebox("A intervenit o eroare la ncercarea copierii fiierului de actualizare!",16,"Actualizare") + Else + polog.Log("Am adus programul",Program()) +*!* tempfile = GetCurrentTempPath(tccurrentprog) && modificare 28.06.2012 +*!* modificare v 2.0.29 +*!* lcrunvbs=[Run /N7 ]+Addbs(Substr(gcAppPath,1,Rat([\],gcAppPath,2)))+[COMUNROA\updater.exe ] + ; +*!* STRTRAN(Addbs(Justpath(Sys(16,0))),[ ],[~])+tccurrentprog+[.EXE] + lcrunvbs=[Run /N7 ]+shortpath(Addbs(Substr(gcAppPath,1,Rat([\],gcAppPath,2))))+[COMUNROA\updater.exe |] + ; + shortpath(Addbs(Justpath(Sys(16,0))))+tccurrentprog+[.EXE] +*!* modificare v 2.0.29 ^ + &lcrunvbs + polog.Log("Am executat updater.exe",Program()) + ExitProcess(0) + + Endif + Endif + Endif + Endcase + Return .T. + Endif + Endfunc +Enddefine + +Function updatecheckfiles +*!* (07.09.09) tlSilent = .T. - daca nu apare mesajul de eroare in caz ca nu poate copia fisierul + Lparameters lcFisier,tlSilent + Local loUpdate,cLocalFile,cFilePath + *************************************** + * + *************************************** + iniHandler = Createobject("iniaccess") + If lcFisier="ROA_SECURITY.XML" + cLocalFile = gcDirMare + "Security\" + lcFisier + Else + cLocalFile = gcDirMare + lcFisier + Endif + + If (iniHandler.getNetworkPath()#"" And iniHandler.getDefault()="NetworkPath") && Or iniHandler.getNetworkPath()#"" And iniHandler.getURL()="") + cFilePath = Addbs(ShortPath(iniHandler.getNetworkPath())) + lcFisier + Else + If(iniHandler.getURL()#"" And iniHandler.getDefault()="URL") && Or iniHandler.getURL()#"" And iniHandler.getNetworkPath()="") + cFilePath =iniHandler.getURL() +"/"+ lcFisier + Else + Return .F. + Endif + Endif + + If(Bringfile(cFilePath,lcFisier,cLocalFile)=.F.) and !tlSilent + aMessagebox("A intervenit o eroare la copierea fisierului de actualizare! " + CHR(10) + ; + TRANSFORM(cFilePath) + CHR(10) + TRANSFORM(lcFisier) + CHR(10) + TRANSFORM(cLocalFile),16,"Actualizare") + Endif +Endfunc \ No newline at end of file diff --git a/COMUN/programe/outile.prg b/COMUN/programe/outile.prg new file mode 100644 index 0000000..558d4f0 --- /dev/null +++ b/COMUN/programe/outile.prg @@ -0,0 +1,91 @@ +Define Class oUtile As Custom + + Procedure Init + Declare Integer GetShortPathName In Win32API; + STRING @lpszLongPath, String @lpszShortPath,; + INTEGER cchBuffer + Endproc + + Function ShortPath + Lparameter tcPath + Local lcPath, lcShortName, lnLength, lnResult + lcPath = tcPath + lcShortName = Space(260) + lnLength = Len(lcShortName) + lnResult = GetShortPathName(@lcPath, @lcShortName, lnLength) + If lnResult = 0 + Return "" + Endif + Return Left(lcShortName,lnResult) + Endfunc + + Function GetAppStartPath + Local lcPath + Do Case +*** VFP 6 provides ServerName property for COM servers EXE/DLL/MTDLL + Case Inlist(Application.StartMode,2,3,5) + lcPath = Justpath(Application.ServerName) +*!* *** Interactive +*!* CASE (Application.StartMode) = 0 +*!* lcPath = SYS(5) + CURDIR() +*** Active Document + Case Atc(".APP",Sys(16,0)) > 0 + lcPath = Justpath(Sys(16,0)) +*** Standalone EXE or VFP Development + Otherwise + lcPath = Justpath(Sys(16,0)) + If Atc("PROCEDURE",lcPath) > 0 + lcPath = Substr(lcPath,Rat(":",lcPath)-1) + Endif + Endcase + Return Addbs(lcPath) + Endfunc + + Procedure lista2array + Lparameters tcLISTA,taArray,tcSeparator +&& tcLista este un sir de caractere care contine elementele separate prin <;> default +&& tarray este vectorul care se completeaza - trebuie dat prin referinta +&& tcSeparator separatorul de elemente din tcLista - default este ";" - este optional +&& intoarce numarul de elemente gasite +&& ex: lnNr = lista2array("ana;are;mere",@alista,";") + External Array taArray + Local Lclista,lcSeparator,lnNRF,lcF1,i + lnNRF = 0 + Lclista=Allt(tcLISTA) + If Parameters()<3 Or Empty(tcSeparator) + lcSeparator=";" + Else + lcSeparator=Alltrim(tcSeparator) + Endif + + If Right(Lclista,1)!=lcSeparator + Lclista=Lclista+lcSeparator + Endif + + lnNRF=Occurs(lcSeparator,Lclista) + + If lnNRF>0 + Dimension taArray[lnNrf,1] + + For i=1 To lnNRF + lcF1=Left(Lclista,At(lcSeparator,Lclista)-1) + + If i!=lnNRF + Lclista=Substr(Lclista,At(lcSeparator,Lclista)+1) + Endif + + taArray[i]=lcF1 + Endfor + Else + lnNRF = 0 + Endif + + Return lnNRF + + Endproc && lista2array + + Procedure decripteazaParola + + Endproc + +Enddefine \ No newline at end of file diff --git a/COMUN/programe/overificari.prg b/COMUN/programe/overificari.prg new file mode 100644 index 0000000..3c533b0 --- /dev/null +++ b/COMUN/programe/overificari.prg @@ -0,0 +1,363 @@ +************************************** +* Intoarce .T. daca luna are situatii contabile invalidate +************************************** +PROCEDURE VerificaInvalidat + LPARAMETERS tnAn, tnLuna + LOCAL llInvalidat, lnRec, llInvalidat, lcSql + PRIVATE pnRec + llInvalidat = .F. + + lcSql = [select count(*) as nr from tabele_validare where dinvalidat is not null] + IF !(EMPTY(m.tnAn) OR EMPTY(m.tnLuna)) + lcSql = lcSql + [ and an = ] + ALLTRIM(STR(m.tnAn)) + [ and luna = ] + ALLTRIM(STR(m.tnLuna)) + ENDIF + pnRec = 0 + llSucces = goExecutor.oSelecteaza2Value(m.lcSql, @pnRec) + IF m.llSucces + llInvalidat = (m.pnRec > 0) + ENDIF + RETURN m.llInvalidat +ENDPROC + + +*!* Arata situatii contabile invalidate in luna curenta +Procedure SituatiiInvalidate + + Private poSituatii + Local loSituatiiInvalide As 'frm_situatii_invalidate' + Local lcFiltru, lcFiltruOriginal, lcGroup, lcOrder, lcSelect, llAfiseaza, llModParam + poSituatii = null + + Text To lcSelect Noshow + select tabel, + situatie, + an, + luna, + cont, + id_gestiune, + cgest, + nume_gestiune, + dultima_operatie, + dultima_refacere, + dinvalidat, + id_util_invalidare, + util_invalidare, + explicatie, + tip_validare, + ctip_validare, + blocat, + id_util_validare, + util_validare, + dataora_validare + from vtabele_validare + Endtext + lcSchema = [] + lcOrder = [tabel, cont, cgest, an, luna] + lcGroup = [] + lcFiltru = [1=2] + lcFiltruOriginal = [] + llModParam = .T. + llAfiseaza = .F. + + gencursor('poSituatii', 'cSituatiiInvalidate', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcGroup, llModParam, lcFiltruOriginal) + poSituatii.ca_baza1.afisare() + + If Used('cSituatiiInvalidate') + loSituatiiInvalide = Createobject('frm_situatii_invalidate') + loSituatiiInvalide.Show(1) + Endif + +Endproc && SituatiiInvalide + +Procedure verificareGlobala + Parameters tlArat, tlFaraPeriada + Private plArat, pcondper, plPerioada, plFaraPeriada + + Local lnPoz + Store .F. To plPerioada + + If Empty(tlArat) + Store .F. To plArat + Else + plArat = tlArat + Endif + + If Empty(tlFaraPeriada) + Store .F. To plFaraPeriada + Else + plFaraPeriada = tlFaraPeriada + Endif + + pcondper = "" + If !plFaraPeriada + ofrmperioada = Createobject('frm_perioada_luni') + ofrmperioada.Show(1) + + If gnButon = 2 + Return + Endif + + lnPoz = At('_', pcondper) + If lnPoz > 0 + plPerioada = .T. + Endif + Endif + + Private pcmesaj_refacere + Store "" To pcmesaj_refacere + If Used('crsverificari') + Use In crsverificari + Endif + Create Cursor crsverificari (sursa c(20), Cont c(20), tip c(1), mesaj c(200), selectat N(1), explicatia c(50), luna N(2), an N(4)) + + If !plArat + If plPerioada + lnInit = Val(Substr(pcondper, 1, 2)) + Val(Substr(pcondper, 3, 4)) * 12 + lnFinal = Val(Substr(pcondper, 8, 2)) + Val(Substr(pcondper, 10, 4)) * 12 + For k = lnInit To lnFinal + lnLuna = Mod(k, 12) + lnAn = Int(k / 12) + If lnLuna = 0 + lnLuna = 12 + lnAn = lnAn - 1 + Endif + Do VerificareLunaDeschisa With lnLuna, lnAn, .F. + Endfor + Select crsverificari + Set Filter To !Empty(mesaj) + Go Top + obj = Createobject('frm_verificare_globala_per') + obj.lb_titlu_alb_b121.Caption = "VERIFICARE GLOBALA PENTRU PERIOADA " + Substr(pcondper, 1, 2) + "/" + Substr(pcondper, 3, 4) + " - " + Substr(pcondper, 8, 2) + "/" + Substr(pcondper, 10, 4) + obj.ninit = lnInit + obj.nfinal = lnFinal + obj.Show(1) + Else + Do VerificareLunaDeschisa + If Empty(pcmesaj_refacere) + obj = Createobject('frm_verificare_globala') + obj.Show(1) + Endif + Endif + Else + Do VerificareLunaDeschisa + Select crsverificari + Replace All selectat With 1 + If Used('crsrefaceri') + Use In crsrefaceri + Endif + Select sursa, Cont, tip From crsverificari Where selectat = 1 Into Cursor crsrefaceri + If Reccount('crsrefaceri') > 0 + Local lcsursa, lccont, lctip + Select crsrefaceri + Scan + lcsursa = Upper(Alltrim(sursa)) + lccont = Alltrim(Cont) + * lctip=tip + lctip = '1' + Do refacere With lcsursa, lctip, lccont In orefaceri.prg + Select crsrefaceri + Endscan + + If Used('crsverificari') + Use In crsverificari + Endif + Create Cursor crsverificari (sursa c(20), Cont c(20), tip c(1), mesaj c(200), selectat N(1), explicatia c(50), luna N(2), an N(4)) + Do VerificareLunaDeschisa + Select crsverificari + Go Top + *!* MESSAGEBOX("Refacerea s-a incheiat!",0+64,"Info refacere") + Endif + + Use In crsrefaceri + Endif + + Use In crsverificari +Endproc +********************************************************************************************************************************** + +********************************************************************************************************************************** +Procedure VerificareLunaDeschisa + Lparameters tnLuna, tnAn, tlRefaceri, tlFaraTest, tlExtraCont + && tlRefaceri = .T. cu refaceri ; .F. fara refaceri + && tlTest = .T. face inainte_de + && llExtraCont = .T. : + STOC, STOC_OBINV + + Private pcmesaj, pctip + Local lnselectat, lcsursa, lccont, lnNrInreg, loTherm, lcTask, lnPercent, lcexplicatia, lnInregAct, lnLuna, lnAn, llRefaceri + Store "" To pcmesaj, pctip, lcsursa, lccont, loTherm, lcTask, lcexplicatia + Store 0 To lnselectat, lnNrInreg, lnPercent, lnInregAct + lnNrInreg = 6 + + If !Used('crsverificari') + Create Cursor crsverificari (sursa c(20), Cont c(20), tip c(1), mesaj c(200), selectat N(1), explicatia c(50), luna N(2), an N(4)) + Endif + + + If Empty(tnLuna) + lnLuna = gnLuna + Else + lnLuna = tnLuna + Endif + + If Empty(tnAn) + lnAn = gnAn + Else + lnAn = tnAn + Endif + + If Pcount() = 3 + llRefaceri = tlRefaceri + Else + llRefaceri = .T. + Endif + llCuTest = !tlFaraTest + + lcsursa = "BALANTA" + If llCuTest + Do inainte With lcsursa, '', "pcmesaj", "pctip", '', '', lnLuna, lnAn In oinainte_de.prg + Else + pcmesaj = "" + Endif + If !Empty(pcmesaj) And llRefaceri + pcmesaj_refacere = pcmesaj + Chr(10) + Chr(13) + Chr(10) + Chr(13) + "Doriti sa refaceti balanta?" + If Empty(plArat) Or !plArat + If aMessagebox(pcmesaj_refacere, 4 + 32, "Diferente la balanta") == 6 + aMessagebox("Se apeleaza refacerea", 64, "Info refacere") + lccont = "" + Do refacere With lcsursa, pctip, lccont, lnLuna, lnAn In orefaceri.prg + pcmesaj_refacere = "" + Do inainte With lcsursa, '', "pcmesaj", "pctip", '', '', lnLuna, lnAn In oinainte_de.prg + Else + *Return + pcmesaj_refacere = "" + Endif + Else + Do refacere With lcsursa, pctip, lnLuna, lnAn In orefaceri.prg + pcmesaj_refacere = "" + Do inainte With lcsursa, '', "pcmesaj", "pctip", '', '', lnLuna, lnAn In oinainte_de.prg + Endif + + Endif + + lnselectat = Iif(Empty(pcmesaj), 0, 1) + Insert Into crsverificari (sursa, tip, mesaj, selectat, explicatia, luna, an) Values (lcsursa, pctip, pcmesaj, lnselectat, 'Balanta', lnLuna, lnAn) + + lcSql = [select distinct 1 as nrcrt,cont from ] + Alltrim(gcS) + [.config_cont_ireg ] + lcSql = lcSql + [ union ] + lcSql = lcSql + [select distinct 2 as nrcrt,cont from ] + Alltrim(gcS) + [.config_Cont_ireg ] + ; + [where cu_Inregistrari = 1] + lcSql = lcSql + [ order by cont] + lcCursor = [crsConturi] + lnSucces = goExecutor.oExecute(lcSql, lcCursor) + If lnSucces < 0 + aMessagebox(goExecutor.cEroare, 0 + 16, "Eroare") + Endif + + If Used('crsconturi') + lnNrInreg = lnNrInreg + Reccount('crsconturi') + Endif + + loTherm = Newobject("_thermometer", "_therm", "", "Verificare globala " + Alltrim(Str(lnLuna)) + "/" + Alltrim(Str(lnAn)) + "...") + With loTherm + .Show() + lnPercent = 0 + + *!* modificare 2007 + If gnAn < 2007 + lcexplicatia = "Registrul de vanzari" + .Update(lnPercent, 'Verificare ' + lcexplicatia) + + lcCoresp = ['4111'] + lcExceptii = ['667,622'] + lcsursa = "VANZ" + If llCuTest + Do inainte With lcsursa, , "pcmesaj", "pctip", lcExceptii, lcCoresp, lnLuna, lnAn In oinainte_de.prg + Endif + lnselectat = Iif(Empty(pcmesaj), 0, 1) + Insert Into crsverificari (sursa, Cont, tip, mesaj, selectat, explicatia, luna, an) Values ('TVA', '4427', pctip, pcmesaj, lnselectat, lcexplicatia, lnLuna, lnAn) + + + lnPercent = (1 * 100) / lnNrInreg + lcexplicatia = 'Registrul de cumparari' + .Update(lnPercent, 'Verificare ' + lcexplicatia) + lcsursa = "CUMP" + If llCuTest + Do inainte With lcsursa, '', "pcmesaj", "pctip", '', '', lnLuna, lnAn In oinainte_de.prg + Endif + lnselectat = Iif(Empty(pcmesaj), 0, 1) + Insert Into crsverificari (sursa, Cont, tip, mesaj, selectat, explicatia, luna, an) Values ('TVA', '4426', pctip, pcmesaj, lnselectat, lcexplicatia, lnLuna, lnAn) + Else + + lcexplicatia = "Registrul de vanzari" + .Update(lnPercent, 'Verificare ' + lcexplicatia) + + lcCoresp = [] + lcExceptii = [] + lcsursa = "TVA_2007" + pcmesaj = "" + If llCuTest + Do inainte With "VANZ2007", , "pcmesaj", "pctip", lcExceptii, lcCoresp, lnLuna, lnAn In oinainte_de.prg + Endif + lnselectat = Iif(Empty(pcmesaj), 0, 1) + Insert Into crsverificari (sursa, Cont, tip, mesaj, selectat, explicatia, luna, an) Values (lcsursa, 'JV', pctip, pcmesaj, lnselectat, lcexplicatia, lnLuna, lnAn) + + + lnPercent = (1 * 100) / lnNrInreg + lcexplicatia = 'Registrul de cumparari' + pcmesaj = "" + .Update(lnPercent, 'Verificare ' + lcexplicatia) + lcsursa = "TVA_2007" + If llCuTest + Do inainte With "CUMP2007", '', "pcmesaj", "pctip", '', '', lnLuna, lnAn In oinainte_de.prg + Endif + lnselectat = Iif(Empty(pcmesaj), 0, 1) + Insert Into crsverificari (sursa, Cont, tip, mesaj, selectat, explicatia, luna, an) Values (lcsursa, 'JC', pctip, pcmesaj, lnselectat, lcexplicatia, lnLuna, lnAn) + + Endif + + + If Used('crsconturi') And Reccount('crsconturi') > 0 + lnInreg = 6 + Select crsconturi + Scan + lnnrcrt = nrcrt + lccont = Cont + Do Case + Case lnnrcrt = 1 + lnPercent = (lnInreg * 100) / lnNrInreg + lcexplicatia = 'Balanta analitica - cont ' + lccont + .Update(lnPercent, 'Verificare ' + lcexplicatia) + lcsursa = "BALANTA_PARTENERI" + pcmesaj = "" + If llCuTest + Do inainte With lcsursa, lccont, "pcmesaj", "pctip", '', '', lnLuna, lnAn In oinainte_de.prg + Endif + lnselectat = Iif(Empty(pcmesaj), 0, 1) + Insert Into crsverificari (sursa, Cont, tip, mesaj, selectat, explicatia, luna, an) Values (lcsursa, lccont, pctip, pcmesaj, lnselectat, lcexplicatia, lnLuna, lnAn) + lnInreg = lnInreg + 1 + + Case lnnrcrt = 2 + lnPercent = (lnInreg * 100) / lnNrInreg + lcexplicatia = 'Inregistrari - cont ' + lccont + .Update(lnPercent, 'Verificare ' + lcexplicatia) + lcsursa = "IREG_PARTENERI" + pcmesaj = "" + If llCuTest + Do inainte With lcsursa, lccont, "pcmesaj", "pctip", '', '', lnLuna, lnAn In oinainte_de.prg + Endif + lnselectat = Iif(Empty(pcmesaj), 0, 1) + Insert Into crsverificari (sursa, Cont, tip, mesaj, selectat, explicatia, luna, an) Values (lcsursa, lccont, pctip, pcmesaj, lnselectat, lcexplicatia, lnLuna, lnAn) + lnInreg = lnInreg + 1 + + Endcase + Endscan + If tlExtraCont + Insert Into crsverificari (sursa, Cont, tip, mesaj, selectat, explicatia, luna, an) Values ('STOC', '', '', '', 0, 'Stocuri', lnLuna, lnAn) + Insert Into crsverificari (sursa, Cont, tip, mesaj, selectat, explicatia, luna, an) Values ('STOC_OBINV', '', '', '', 0, 'Stocuri obiecte de inventar', lnLuna, lnAn) + Endif + Endif + .Complete() + Endwith + Release loTherm + +Endproc diff --git a/COMUN/programe/pmenu.prg b/COMUN/programe/pmenu.prg new file mode 100644 index 0000000..ec781e7 --- /dev/null +++ b/COMUN/programe/pmenu.prg @@ -0,0 +1,1164 @@ +*!* 27.03.2009 +*!* Alex.lepadatu +*!* modificari pentru mutare xsets.... in baza de date + +*!* 14.04.2009 +*!* Alex.lepadatu +*!* dupa cererea de date din lans se apeleaza 'procedura_lans'; vezi setul 50505 + +*!* 29.05.2009 +*!* marius.mutu +*!* id_set: 10600 - 10603 - banca valuta/lei > incasare/plata facturi in valuta +*!* poAct.suma_22 (banca in valuta > incasare/plata > suma in valuta de incasare) +*!* daca apare itemul 81 (suma_22), nu mai pun in xrequest itemul 11 (suma_2) si nu mai exista poAct.suma_2, deci trebuie sa adaug proprietatea +*!* poAct.suma_22a = suma in valuta incasata si convertita in valuta facturii +*!* poAct.suma_32 = curs valutei in care se incaseaza + +*!* 18.02.2010 +*!* marius.mutu +*!* + lans_generic - suport pentru note X = Y + +*!* 14.01.2015 +*!* marius.mutu +*!* LANS: se transmite poActAnterior, daca se alege continuarea cu aceeasi operatie. Se completeaza automat valorile din operatia precedenta. +*!* doar pentru contabilitate. +*!* La gestiune nu se copiaza numarul facturii si partenerul + +*!* 16.01.2015 +*!* marius.mutu +*!* LANS: se poate opta cu DA continuare operatie cu copiere date / NU continuare operatie fara copiere date / Renuntare +*!* nu se mai sare peste numar act, dataact, suma valuta + +*!* 04.03.2015 +*!* marius.mutu +*!* LANS: Completare informatii din documentul anterior +*!* Nu mai copiez partenerul, in afara de banca/casa (ex: 5311 = 4111, se retine doar casa, nu si clientul) +*!* Nu mai completez nract (nu se mai genera un numar nou la tipurilede documente cu serii, ex. chitante,facturi) + +*!* 04.01.2015 +*!* marius.mutu +*!* lans - oxset.id_jtax pentru documentele din 2015 introduse in 2016 - nu mai afisau explicatia de TVA initiala cu 24% + +*!* 06.01.2015 +*!* marius.mutu +*!* introducere_compacta +*!* In 2015 lucrez cu TVA 24%. Transform TVA din 20% in 24% + +*!* 18.08.2017 +*!* marius.mutu +*!* lans - corectie NIR/BON + +*!* 22.08.2025 +*!* marius.mutu +* introducere_compacta +* Am introdus Calendar.impozit_profit +* ID_SET = 10609 Platitorii impozit venit, pentru limitare deducere 50% nu le trebuie 2 note CHELTUIELI DEDUCTIBILE si NEDEDUCTIBILE + +*-------------------------------------------- +Function deschide_menu + Parameters tabela, cc1, cc2, mnrtata, stinga, sus, ONT + + Public nt, no, m + nt = Alltrim(tabela) + '_' + Alltrim(Str(mnrtata)) + + If Upper(Left(tabela, 6)) = '_MENU1' + no = 'o' + nt + zz = 'SELECT ' + cc1 + ' AS C1, ' + cc2 + ' AS C2,nrnod,PROCEDURA,TATAFIU,ID_SET,LISTA_NOTE FROM ' + ; + tabela + ' WHERE NRTATA=' + Alltrim(Str(mnrtata)) + ' INTO CURSOR ' + nt + Else + no = 'o_' + nt + zz = 'SELECT ' + cc1 + ' AS C1, ' + cc2 + ' AS C2,nrnod,PROCEDURA,TATAFIU,ID_SET FROM ' + ; + tabela + ' WHERE NRTATA=' + Alltrim(Str(mnrtata)) + ' INTO CURSOR ' + nt + Endif + &zz + m = 0 + + Select &nt + Scan + mm = Len(Alltrim(c1)) + m = Iif(m > mm, m, mm) + Endscan + + ta = _Tally + If ta = 0 + Return '0' + Endif + + If Type("&no")!= 'O' + Public &no + zz = no + '=crea("menuclasic")' + &zz + + With &no + wm = m * 7 + .NUME = no + .ONUMETATA = ONT + .Left = stinga + .Top = sus + .tabela = tabela + .camp1 = cc1 + .camp2 = cc2 + .sursa = nt + .Width = wm + 2 * .margine + .NRFII = ta + .rh = .container1.cwm1.Height + .Height = (.rh + 1) * .NRFII + 2 * .margine + 2 + *.show() + Endwith + Endif + + Release nt, m + Return no + + + + *------------------------------------------------------------------------------------------ +Procedure deschide_menuuri + *!* If !Used('menu1') + *!* Use &DIRGEN\CONTAB\Date\menu1 In 0 Alias menu1 Order Tag 'nrnod' + *!* Endif + *!* If !Used('menu2') + *!* Use &DIRGEN\CONTAB\Date\menu2 In 0 Alias menu2 Order Tag 'nrnod' + *!* Endif + *!* If !Used('menu3') + *!* Use &DIRGEN\CONTAB\Date\menu3 In 0 Alias menu3 Order Tag 'nrnod' + *!* Endif + *!* If !Used('menu4') + *!* Use &DIRGEN\CONTAB\Date\menu4 In 0 Alias menu4 Order Tag 'nrnod' + *!* Endif + + *!* If PRIMADATA + *!* Do CE_WINDOWS + *!* omenuvertical=Crea('menuvertical') + *!* omenuvertical.Show() + *!* Endif + *deschide_menu(tabela, cc1,cc2,mnrtata,stinga,sus,ONT + Return + + + + + *-------------------------------------- +Procedure CE_WINDOWS + Local vermajor, verminor + Public TIP_MENU, COL_MENU, cewin + Store '' To cewin + Store 0 To vermajor, verminor, TIP_MENU + + vermajor = Val(Os(3)) + verminor = Val(Os(4)) + Do Case + Case vermajor < 4 + cewin = '95' + Case vermajor = 4 + cewin = '98' + Case vermajor >= 5 + Do Case + Case verminor = 0 + cewin = '2000' + Case verminor = 1 + cewin = 'XP' + Otherwise + cewin = 'MAINOU' + Endcase + Endcase + + + *IF INLIST(CEWIN,'95','98','2000') + TIP_MENU = 0&&'RAISED' + *ELSE + *TIP_MENU=2&&'FLAT' + *ENDIF + + *!* Do Case + *!* Case Inlist(cewin,'95','98') + *!* COL_MENU=Rgb(192,192,192)&&GRI + *!* Case cewin='2000' + *!* COL_MENU=Rgb(212,208,200)&&NISIP GRI + *!* Case cewin='XP' + *!* COL_MENU=Rgb(236,233,216)&&NISIP BEJ + *!* Otherwise + COL_MENU = Rgb(255, 255, 255)&&ALB + *!* Endcase + + + Return + + + *!* 18.02.2010 + *** LANSEAZA LANS CU UN ID_SET SI CONTURILE X (CN), Y (CNY) +Procedure lans_generic + Lparameters tnIds, tcContX, tcAcontX, tcContY, tcAcontY + *!* X = Y + *!* 4426 = Y + Private pcACN, CNY, pcACNY + pcACN = "" + CNY = "" + pcACNY = "" + + If Type('tcContX') = 'C' And !Empty(tcContX) + *** CN E VARIABILA GLOBALA IN PROGRAMUL PRINCIPAL + CN = tcContX + Endif + + If Type('tcAcontX') = 'C' And !Empty(tcAcontX) + pcACN = tcAcontX + Endif + + If Type('tcContY') = 'C' And !Empty(tcContY) + CNY = tcContY + Endif + + If Type('tcaContY') = 'C' And !Empty(tcAcontY) + pcACNY = tcContY + Endif + + lans(tnIds) + +Endproc +*!* 18.02.2010 ^ + +*-------------------------------------------------------- +Function lans + Lparameters IDS, tlContinua, tlVerificaAcont, taValori, tnDeducere, poActAnterior + *!* modificare v 2.2.20 : tnDeducere + + * poActAnterior: obiectul poAct completat la un LANS din operatia anterioara. Este completat daca se doreste acelasi tip de operatie + * parametrul poActAnterior poate sa aiba si valorile: "corectie,1234" = modificare NIR/BON din ROAGEST, codul 1234 + + Local lcACT, lcForm, lcMesaj, lcNOM_CONTRACTE, lcNOM_FDOC, lcNOM_GESTIUNI, lcNOM_LUCRARI + Local lcNOM_PARTENERI, lcNOM_RESPONSABILI, lcNOM_SECTII, lcNOM_SUCURSALE, lcNOM_VALUTE + Local lcNOM_VENIT_CHELTUIELI, lcProcedura, lcSql, lcTip, lcUTILIZATORI, lcValoareDefault + Local lcVariabila, llAfiseaza, llContinua, llCreareGeneratorNumere, llEnabled, llLunaInchisa + Local llSucces, llTabStop, llVerificaAcont, lnIndexVariabile, lnLengthVariabile, lnNumarParametri + Local lnRandVariabila, lnRaspuns, lnSucces + Local lcProprietateAnt, lcValoareAnt, lnProprietate, lnProprietati, llCorectie, lnCod + *:Global pcSirFacturi, taActAnterior[1] + *:Global ID_SET, OXSET, buton, i, oitem, pcSelect, poAct + Store .T. To llContinua, llVerificaAcont + llCorectie = .F. + lnCod = 0 + IF TYPE('poActAnterior') = 'O' + llCorectie = IIF(PEMSTATUS(poActAnterior, 'lCorectie', 5), poActAnterior.lCorectie, .F.) + lnCod = IIF(m.llCorectie, poActAnterior.nCod, 0) + ENDIF + + lnRaspuns = 6 + *!* MODIFICAT 03.11.2005 + *!* MARIUS.MUTU + + llLunaInchisa = is_luna_blocata(gcS, gnId_Prg_Owner, gnAn, gnLuna) + If llLunaInchisa + aMESSAGEBOX("Aceasta luna este nchisa!", 0 + 48, "Luna nchisa") + Return 2 + Endif + lnNumarParametri = Pcount() && modificare v 2.2.20 + + Do Case + Case lnNumarParametri = 2 + llContinua = tlContinua + Case lnNumarParametri >= 3 + llContinua = tlContinua + llVerificaAcont = tlVerificaAcont + Endcase + + * gcS = variabila globala care imi tine minte schema (diferita in functie de firma) + lcNOM_FDOC = gcS + '.NOM_FDOC' + lcNOM_SUCURSALE = gcS + 'NOM_SUCURSALE' + lcNOM_PARTENERI = gcS + '.NOM_PARTENERI' + lcNOM_VENIT_CHELTUIELI = gcS + '.NOM_VENIT_CHELTUIELI' + lcNOM_RESPONSABILI = gcS + '.VNOM_RESPONSABILI' + lcUTILIZATORI = 'syn_UTILIZATORI' + lcNOM_SECTII = gcS + '.NOM_SECTII' + lcNOM_SUCURSALE = gcS + '.NOM_SUCURSALE' + lcNOM_LUCRARI = gcS + '.NOM_LUCRARI' + lcNOM_GESTIUNI = gcS + '.NOM_GESTIUNI' + lcNOM_VALUTE = gcS + '.NOM_VALUTE' + lcACT = gcS + '.ACT' + lcNOM_CONTRACTE = gcS + '.VCONTRACTE' + + If gnAn >= Iif(Type('gnAnFormNou') = 'U', 2007, gnAnFormNou) + pcSelect = ["SELECT A.SERIE_ACT,A.ID_ACT,A.LUNA,A.AN,A.COD, A.DATAIREG as datairegt,A.NRACT,] + ; + [A.DATAACT as dataactt,A.suma, A.EXPLICATIA,A.SCD,A.ASCD,A.SCC,A.ASCC, A.PERECHED,A.PERECHEC,"+] + ; + ["A.SUMA_VAL,A.EXPLICATIA4,A.EXPLICATIA5,A.CURS,A.DATASCAD as datascadt,A.NEIMPOZAB,A.NNIR,] + ; + [A.ID_UTIL,UTIL2.UTILIZATOR AS UTIL,A.DATAORA,A.ID_UTILS,UTIL1.UTILIZATOR AS UTILS,A.DATAORAS,"+] + ; + ['A.ID_RESPONSABIL,RESP.NUME AS NRESP,A.ID_VENCHELT,VENCHELT.EXPLICATIE AS DST_CHLT,A.ID_LUCRARE,] + ; + [LUCR.NRORD,A.ID_CTR,CTR.CONTRACT,A.ID_SECTIE,SECTII.SECTIE,A.PROC_TVA,A.ID_SET,A.ID_FACT,] + ; + [ A.ID_FACTD, A.ID_FACTC,'+] + ; + ['A.ID_PARTD,PART1.NUME AS PARTD,A.ID_PARTC,PART.NUME AS PARTC,A.ID_SUCURSALA,S.SUCURSALA,A.ID_FDOC,FDOC.FEL_DOCUMENT AS FDOC, ' +] + ; + ["A.ID_GESTIN,A.ID_JTVA_COLOANA,G1.NUME_GESTIUNE AS GESTIN,A.ID_GESTOUT,G2.NUME_GESTIUNE AS GESTOUT,A.ID_VALUTA,V.NUME_VAL," + ] + ; + ["0000000000 as id_pol, lpad(' ',30,' ') as nume_lista_preturi,0 as tva_incasare, "+] + ; + ["cast(0 as Number(20)) as id_instiintare, cast(0 as Number(14)) as numar_instiintare, CAST(null as number(6)) as taxcode, CAST(null as varchar2(9)) as paymentcode, "+] + ; + ["cast(null as varchar2(250)) as taxname, cast(null as varchar2(250)) as paymentname, cast(null as varchar2(250)) as explicatie_tva "+] + ; + ['FROM &lcACT A '+] + ; + ['LEFT JOIN &lcNOM_FDOC FDOC ON A.ID_FDOC=FDOC.ID_FDOC '+] + ; + ['LEFT JOIN &lcNOM_SUCURSALE S ON A.ID_SUCURSALA = S.ID_SUCURSALA '+] + ; + ['LEFT JOIN &lcNOM_PARTENERI PART ON A.ID_PARTC=PART.ID_PART '+] + ; + ['LEFT JOIN &lcNOM_PARTENERI PART1 ON A.ID_PARTD=PART1.ID_PART '+] + ; + ['LEFT JOIN &lcNOM_VENIT_CHELTUIELI VENCHELT ON A.ID_VENCHELT=VENCHELT.ID_VENCHELT '+] + ; + ['LEFT JOIN &lcNOM_RESPONSABILI RESP ON A.ID_RESPONSABIL=RESP.ID_RESPONSABIL '+] + ; + ['LEFT JOIN &lcUTILIZATORI UTIL1 ON A.ID_UTILS=UTIL1.ID_UTIL '+] + ; + ['LEFT JOIN &lcUTILIZATORI UTIL2 ON A.ID_UTIL=UTIL2.ID_UTIL '+] + ; + ['LEFT JOIN &lcNOM_LUCRARI LUCR ON A.ID_LUCRARE=LUCR.ID_LUCRARE '+] + ; + ['LEFT JOIN &lcNOM_CONTRACTE CTR ON A.ID_CTR=CTR.ID_CTR '+] + ; + ['LEFT JOIN &lcNOM_GESTIUNI G1 ON A.ID_GESTIN=G1.ID_GESTIUNE '+] + ; + ['LEFT JOIN &lcNOM_GESTIUNI G2 ON A.ID_GESTOUT=G2.ID_GESTIUNE '+] + ; + ['LEFT JOIN &lcNOM_VALUTE V ON A.ID_VALUTA=V.ID_VALUTA '+] + ; + ['LEFT JOIN &lcNOM_SECTII SECTII ON A.ID_SECTIE=SECTII.ID_SECTIE where 1=2'] + Else + pcSelect = ["SELECT A.SERIE_ACT,A.ID_ACT,A.LUNA,A.AN,A.COD, A.DATAIREG as datairegt,A.NRACT, ] + ; + [A.DATAACT as dataactt,A.suma, A.EXPLICATIA,A.SCD,A.ASCD,A.SCC,A.ASCC, A.PERECHED,A.PERECHEC,"+] + ; + ["A.SUMA_VAL,A.EXPLICATIA4,A.EXPLICATIA5,A.CURS,A.DATASCAD as datascadt,A.NEIMPOZAB,A.NNIR,] + ; + [A.ID_UTIL,UTIL2.UTILIZATOR AS UTIL,A.DATAORA,A.ID_UTILS,UTIL1.UTILIZATOR AS UTILS,A.DATAORAS,"+] + ; + ['A.ID_RESPONSABIL,RESP.NUME AS NRESP,A.ID_VENCHELT,VENCHELT.EXPLICATIE AS DST_CHLT,A.ID_LUCRARE,] + ; + [LUCR.NRORD,A.ID_CTR,CTR.CONTRACT,A.ID_SECTIE,SECTII.SECTIE,A.PROC_TVA,A.ID_SET,A.ID_FACT, A.ID_FACTD, A.ID_FACTC,'+] + ; + ['A.ID_PARTD,PART1.NUME AS PARTD,A.ID_PARTC,PART.NUME AS PARTC,A.ID_SUCURSALA,S.SUCURSALA, ] + ; + [A.ID_FDOC,FDOC.FEL_DOCUMENT AS FDOC, ' +] + ; + ["A.ID_GESTIN,G1.NUME_GESTIUNE AS GESTIN,A.ID_GESTOUT,G2.NUME_GESTIUNE AS GESTOUT,A.ID_VALUTA,V.NUME_VAL," +] + ; + ["0000000000 as id_pol, lpad(' ',30,' ') as nume_lista_preturi,0 as tva_incasare, "+] + ; + ["cast(0 as Number(20)) as id_instiintare, cast(0 as Number(14)) as nr_instiintare, CAST(null as number(6)) as taxcode, CAST(null as varchar2(9)) as paymentcode, "+] + ; + ["cast(null as varchar2(250)) as taxname, cast(null as varchar2(250)) as paymentname, cast(null as varchar2(250)) as explicatie_tva "+] + ; + ['FROM &lcACT A '+] + ; + ['LEFT JOIN &lcNOM_FDOC FDOC ON A.ID_FDOC=FDOC.ID_FDOC '+] + ; + ['LEFT JOIN &lcNOM_SUCURSALE S ON A.ID_SUCURSALA = S.ID_SUCURSALA '+] + ; + ['LEFT JOIN &lcNOM_PARTENERI PART ON A.ID_PARTC=PART.ID_PART '+] + ; + ['LEFT JOIN &lcNOM_PARTENERI PART1 ON A.ID_PARTD=PART1.ID_PART '+] + ; + ['LEFT JOIN &lcNOM_VENIT_CHELTUIELI VENCHELT ON A.ID_VENCHELT=VENCHELT.ID_VENCHELT '+] + ; + ['LEFT JOIN &lcNOM_RESPONSABILI RESP ON A.ID_RESPONSABIL=RESP.ID_RESPONSABIL '+] + ; + ['LEFT JOIN &lcUTILIZATORI UTIL1 ON A.ID_UTILS=UTIL1.ID_UTIL '+] + ; + ['LEFT JOIN &lcUTILIZATORI UTIL2 ON A.ID_UTIL=UTIL2.ID_UTIL '+] + ; + ['LEFT JOIN &lcNOM_LUCRARI LUCR ON A.ID_LUCRARE=LUCR.ID_LUCRARE '+] + ; + ['LEFT JOIN &lcNOM_CONTRACTE CTR ON A.ID_CTR=CTR.ID_CTR '+] + ; + ['LEFT JOIN &lcNOM_GESTIUNI G1 ON A.ID_GESTIN=G1.ID_GESTIUNE '+] + ; + ['LEFT JOIN &lcNOM_GESTIUNI G2 ON A.ID_GESTOUT=G2.ID_GESTIUNE '+] + ; + ['LEFT JOIN &lcNOM_VALUTE V ON A.ID_VALUTA=V.ID_VALUTA '+] + ; + ['LEFT JOIN &lcNOM_SECTII SECTII ON A.ID_SECTIE=SECTII.ID_SECTIE where 1=2'] + Endif + *!* modificare serii numere - 10.2007 + llCreareGeneratorNumere = .F. + If Type('poGeneratorNumere') = 'U' + Private poGeneratorNumere + poGeneratorNumere = Createobject('oGeneratorNumere') + llCreareGeneratorNumere = .T. + Endif + *!* modificare serii numere - 10.2007 ^ + + Private podateintrod + Store '' To podateintrod + llAfiseaza = .F. + lnSucces = gencursor('podateintrod', 'crsact', pcSelect, [1=2], [''], '', llAfiseaza) + podateintrod.ca_baza1.afisare() + + If Used('actactan') + Use In actactan + Endif + + Select 0000 As nr_nota, c.*, c.SUMA As TOTFTVA, c.SUMA As TOTTVA, Ttod(c.dataactt) As dataact, ; + Ttod(c.datairegt) As dataireg, Ttod(c.datascadt) As datascad, 0 As POZITIE_1, 0 As POZITIE_2 ; + From crsact c Into Cursor actactan Readwrite + + Use In crsact + Release podateintrod + + Select actactan + Scatter Name poAct + *!* 29.05.2009 + *!* marius.mutu + *!* poAct.suma_22 (banca in valuta > incasare/plata > suma in valuta de incasare) + *!* daca apare itemul 81 (suma_22), nu mai pun in xrequest itemul 11 (suma_2) si nu mai exista poAct.suma_2, deci trebuie sa adaug proprietatea + *!* poAct.suma_22a = suma in valuta incasata si convertita in valuta facturii + *!* poAct.suma_32 = cursul valutei in care se incaseaza + AddProperty(poAct, "suma_2", 0.0000) + AddProperty(poAct, "suma_22", 0.0000) + AddProperty(poAct, "suma_22a", 0.0000) + AddProperty(poAct, "suma_32", 0.0000) + AddProperty(poAct, "nume_val2", "") + AddProperty(poAct, "id_valuta2", Cast(0 As I)) + AddProperty(poAct, "deducere", 0) && modificare v 2.2.20 + AddProperty(poAct, "id_gestiune", 0) + AddProperty(poAct, "cgest", "") + AddProperty(poAct, "nume_gestiune", "") + AddProperty(poAct, "nume_val3", "") + AddProperty(poAct, "id_valuta3", Cast(0 As I)) + + m.ID_SET = IDS + poAct.ID_SET = IDS + + Select XSETS + Seek IDS && trebuie sa raman pozitionat in xsets pe setul curent pentru ca ma bazez in alte proceduri pe setul curent + If Found() + Scatter Name OXSET + *!* modificare JC/JV 2007 + If gnNeplatitoare_tva = 1 + OXSET.id_jtax = OXSET.id_jtaxn + OXSET.id_jnetax = OXSET.id_jtaxn + ELSE + + DO CASE + CASE BETWEEN(m.gnAn*12+m.gnLuna, 2016*12+1, 2025*12+7) + * 08/2025: 19 > 21 + DO case + CASE oxset.id_jtax = 208 + oxset.id_jtax = 105 + CASE oxset.id_jtax = 216 + oxset.id_jtax = 141 + CASE oxset.id_jtax = 220 + oxset.id_jtax = 118 + CASE oxset.id_jtax = 35 + oxset.id_jtax = 1 + ENDCASE + + CASE gnAn <= 2015 + * achizitiile si livrarile pe 2015 trebuie sa propuna TVA 24%. + * In xsets s-a modificat 20% de la 01.01.2016 + + DO case + CASE oxset.id_jtax = 176 + oxset.id_jtax = 156 + CASE oxset.id_jtax = 186 + oxset.id_jtax = 162 + CASE oxset.id_jtax = 180 + oxset.id_jtax = 158 + CASE oxset.id_jtax = 27 + oxset.id_jtax = 15 + ENDCASE + ENDCASE + ENDIF + Else + Scatter Name OXSET Blank + Endif + + + *!* modificare JC/JV 2007 ^ + If gnAn >= Iif(Type('gnAnFormNou') = 'U', 2007, gnAnFormNou) + If Inlist(OXSET.ID_SET, 208, 209, 220, 221) && achizitie import/intern cu recalculare pret achizitie din ROAGEST + Do update_jtva_coloane With (OXSET.tipjurnal), [], 1 + Else + Do update_jtva_coloane With (OXSET.tipjurnal) + Endif + lcForm = [actbaza2007] + Else + Do update_cote_TVA + lcForm = [actbaza] + Endif + + *!* modificare JC/JV 2007 ^ + oitem = Createobject(lcForm) + oitem.ID_SET = IDS + oitem.formgest = OXSET.formgest + oitem.lVerificaAcont = llVerificaAcont + oitem.pcobj = 'poAct' + IF TYPE('oitem.lCorectie') = 'L' + oitem.lCorectie = m.llCorectie && daca este corectie de NIR/BON din ROAGEST + oitem.nCod = m.lnCod && codul operatiei la care se face corectie, pentru a o putea-o sterge + ENDIF + + lnIndexVariabile = 0 + If Pcount() >= 4 And Type('taValori', 1) = 'A' + External Array taValori + With oitem + For I = 1 To Alen(taValori, 1) + .variabile[i, 1] = Upper(taValori[i, 1]) && numele variabilei : poAct.* sau poAct.id_v* + && (ptr. campurile care ar fi trebuit completate din nomenclatoare) + && exemplu: poAct.nume sau poAct.id_vnume + .variabile[i, 2] = taValori[i, 2] && valoarea variabilei + .variabile[i, 3] = taValori[i, 3] && .T. => tabstop = .F. + .variabile[i, 4] = Iif(Type("taValori[i,4]") = "L", taValori[i, 4], .F.) && .T. => enabled = .F. + lnIndexVariabile = I + Endfor + Endwith + + Endif && pcount + + *** VALORI DEFAULT XITEMS (ID_FDOC...) + Text To lcSql Noshow Textmerge + select r.valoare_default, + r.id_item, + i.camp_lista, + i.id_fisier, + CASE + WHEN i.id_fisier is not null then + pack_util.GetText(i.fis_lista, + i.id_fisier, + to_number(r.valoare_default), + replace(i.camp_lista, ',', ' || '' '' || ')) + ELSE + r.valoare_default + end as valoare_default_text, + i.var_item + from xrequest r join xitems i on i.id_item = r.id_item + where r.id_set = <> and r.valoare_default is not null + Endtext + + llSucces = goExecutor.oExecuta(lcSql, [crsRequest]) + + If m.llSucces + *** VALORI DEFAULT XNOTE (ID_PART...) + Text To m.lcSql Noshow Textmerge + select n.cont, n.id_part, n.id_set, p.nume, n.tip + from (select n1.xscd as cont, + n1.id_partd as id_part, + n1.id_set, + 'D' as tip + from xnote n1 + where nvl(n1.id_partd, 0) <> 0 + and n1.id_set = <> + union + select n2.xscc as cont, + n2.id_partc as id_part, + n2.id_set, + 'C' as tip + from xnote n2 + where nvl(n2.id_partc, 0) <> 0 + and n2.id_set = <>) n + join nom_parteneri p + on n.id_part = p.id_part + Endtext + + llSucces = goExecutor.oExecuta(lcSql, [crsNumePartener]) + Endif + + If !Used('crsNumePartener') + Create Cursor crsNumePartener (Cont c(4), id_part I, ID_SET I, NUME c(100), tip c(1)) + Endif + + If !Used('crsRequest') + Create Cursor crsRequest(valoare_default c(100), id_item I, camp_lista c(100), id_fisier c(100), valoare_default_text c(100), var_item c(100)) + ENDIF + + * Completare valori din documentul anterior + Create Cursor crsActAnterior (variabila c(100), valoare c(250), ltabstop L, lenabled L) + If Type('poActAnterior') = 'O' + lnProprietati = Amembers(taActAnterior, poActAnterior) + For lnProprietate = 1 To lnProprietati + lcProprietateAnt = Upper(taActAnterior[lnProprietate]) + + llLoop = !(lcProprietateAnt + ',' $ [FDOC,ID_FDOC,DATAIREG,DATAACT,DATASCAD,SERIE_ACT,DST_CHLT,ID_VENCHELT,NRESP,ID_RESPONSABIL,] + ; + [NRORD,ID_LUCRARE,SECTIE,ID_SECTIE,CONTRACT,ID_CONTRACT,NUME_VAL,ID_VALUTA,NUME_VAL2,ID_VALUTA2,NUME_LISTA_PRETURI,ID_POL,] + ; + [SUMA_3,SUMA_32,] Or Left(m.lcProprietateAnt, 1) = 'V' Or Left(m.lcProprietateAnt, 5) = 'ID_VV') + + IF !m.llLoop + * Nu copiez partenerul, in afara de banca/casa (ex: 5311 = 4111, se retine doar casa, nu si clientul) + llLoop = (Left(m.lcProprietateAnt, 1) = 'V' Or Left(m.lcProprietateAnt, 5) = 'ID_VV') AND !(Left(m.lcProprietateAnt, 2) = 'V5' Or Left(m.lcProprietateAnt, 6) = 'ID_VV5') + ENDIF + IF !m.llLoop + * La gestiune nu se copiaza numarul facturii si partenerul + llLoop = Type('gcNumeProgram') = 'C' And m.gcNumeProgram = 'ROAGEST' And (lcProprietateAnt + ',' $ [NRACT,SERIE_ACT,] Or Left(m.lcProprietateAnt, 1) = 'V' Or Left(m.lcProprietateAnt, 5) = 'ID_VV') + ENDIF + + * Copiez toate proprietatile daca este corectie de NIR/Bon + llLoop = m.llLoop and !m.llCorectie + IF m.llLoop + LOOP + ENDIF + + lcValoareAnt = Transform(Evaluate('poActAnterior.' + m.lcProprietateAnt)) + llTabStop = !lcProprietateAnt + ',' $ [DATAIREG,DATAACT,DATASCAD,NRACT,SERIE_ACT,SUMA_3,SUMA_32,] && sa nu fie tabstop = .t. la nract,... + llEnabled = .F. + Insert Into crsActAnterior (variabila, valoare, ltabstop, lenabled) Values ('poAct.' + m.lcProprietateAnt, m.lcValoareAnt, m.llTabStop, m.llEnabled) + Endfor + Endif + + Create Cursor crsValori (variabila c(100), valoare c(250), ltabstop L, lenabled L) + + Insert Into crsValori (variabila, valoare, ltabstop, lenabled) ; + Select "poact." + Upper(Alltrim(Nvl(crsRequest.id_fisier, []))) As variabila, ; + Allt(Nvl(crsRequest.valoare_default, [])) As valoare, ; + .T. As ltabstop, ; + .F. As lenabled ; + From crsRequest ; + Where !Empty(Nvl(crsRequest.id_fisier, [])) ; + Union All ; + Select "poAct." + Allt(Nvl(crsRequest.var_item, [])) As variabila, ; + Alltrim(Nvl(crsRequest.valoare_default_text, [])) As valoare, ; + .T. As ltabstop, ; + .F. As lenabled ; + From crsRequest ; + Union All ; + Select "poact.id_vv" + Alltrim(Nvl(crsNumePartener.Cont, [])) + Iif(Inlist(Left(Cont, 2), '51', '53'), Iif(tip = 'D', '0', '1'), '') As variabila, ; + Alltrim(Str(Nvl(crsNumePartener.id_part, 0))) As valoare, ; + .T. As ltabstop, ; + .F. As lenabled ; + From crsNumePartener ; + Union All ; + Select "poact.v" + Alltrim(crsNumePartener.Cont) + Iif(Inlist(Left(Cont, 2), '51', '53'), Iif(tip = 'D', '0', '1'), '') As variabila, ; + Alltrim(Nvl(crsNumePartener.NUME, [])) As valoare, ; + .T. As ltabstop, ; + .F. As lenabled ; + From crsNumePartener ; + Union All ; + Select variabila, valoare, ltabstop, lenabled ; + From crsActAnterior + + Use In (Select('crsActAnterior')) + + lnLengthVariabile = Alen(oitem.variabile, 1) + Select crsValori + Scan + lcVariabila = Alltrim(variabila) + lcValoareDefault = Alltrim(valoare) + llTabStop = ltabstop + llEnabled = lenabled + *** caut randul pe care se gaseste poact.id_fdoc Case Insensitive; Return row number; Exact ON + *** daca nu il gasesc il adaug in array + lnRandVariabila = Ascan(oitem.variabile, m.lcVariabila, 1, m.lnLengthVariabile, 1, 15) + If m.lnRandVariabila = 0 + lnIndexVariabile = m.lnIndexVariabile + 1 + oitem.variabile(m.lnIndexVariabile, 1) = m.lcVariabila + oitem.variabile(m.lnIndexVariabile, 2) = m.lcValoareDefault + oitem.variabile(m.lnIndexVariabile, 3) = m.llTabStop + oitem.variabile(m.lnIndexVariabile, 4) = m.llEnabled + Endif + Endscan + + Use In (Select('crsValori')) + + oitem.Show(1) + *!* adaugat 14.04.2009 + *!* modificare v 2.2.20 + If lnNumarParametri >= 5 And Type('tnDeducere') = 'N' + tnDeducere = poAct.deducere + Endif + *!* modificare v 2.2.20 ^ + + *!* alex.lepadatu + Release oitem + If pl_verificat + lcProcedura = Alltrim(Nvl(OXSET.procedura_lans, "")) + If !Empty(lcProcedura) + Do &lcProcedura + Endif + + ENDIF + + *!* 14.04.2009 + If Type("OXSET.nu_sterg") = "N" + OXSET.nu_sterg = Iif(OXSET.nu_sterg = 1, .T., .F.) + Endif + If OXSET.nu_sterg = .F. And buton!= 2 And llContinua + lcTip = [Confirmare] + lcMesaj = [Doriti sa continuati cu operatii de acest fel?] + Chr(13) + Chr(10) + [DA=copiere date / NU=fara copiere date / Abandon] + lnRaspuns = aMESSAGEBOX(lcMesaj, 3 + 32, lcTip) + If Used('cote_tva') + Use In cote_tva + Endif + If Used('jtva_coloane') + Use In jtva_coloane + Endif + *!* modificare v 2.5.16 : ar trebui resetate toate variabilele initializate inainte de lans + If Type('pcSirFacturi') <> 'U' + Store [] To pcSirFacturi + Endif + *!* modificare v 2.5.16 ^ + *!* If buton=1 + If Inlist(lnRaspuns, 6, 7) && 6=DA=copiere date;7=NU=fara copiere date + If Type('poGeneratorNumere') <> 'U' + poGeneratorNumere.ResetAll() + Endif + If Type('taValori', 1) = 'A' + lans(m.IDS, m.llContinua, m.llVerificaAcont, @taValori) + Else + If lnRaspuns = 6 && DA cu copiere date + lans(m.IDS, m.llContinua, m.llVerificaAcont, .F., .F., m.poAct) + Else + lans(m.IDS, m.llContinua, m.llVerificaAcont) + Endif + Endif + Endif + Else + lnRaspuns = Iif(buton = 1, 6, 2) + Endif + Release OXSET + + If Inlist(lnRaspuns, 6, 7) && DA + buton = 1 + Else && NU + buton = 2 + Endif + + *!* modificare serii numere - 10.2007 + If llCreareGeneratorNumere + Release poGeneratorNumere + Endif + *!* modificare serii numere - 10.2007 ^ + Return buton + + + *---------------------------------------------- +Procedure introducere_compacta + Parameters tcFis, tcscd, tcscc, tl_calcTVA, tl_plata, tctitlu, tctva, tn_idset, tl_acont, tnDeducere, tlCursorCreat, tnTotcTVA + Local llVerificaAcont, llSucces, llN50, llN100, llNeexigibil, llCursorCreat + llCursorCreat = .F. + llVerificaAcont = .T. + + *!* tcfis = fisierul din calefirma (achi_mat.dbf) + *!* tcscd = simbol cont debitor + *!* tcscc = simbol cont creditor + *!* tl_calctva = daca se calculeaza TVA-ul per total + *!* tl_plata = daca se achita factura respectiva + *!* tctitlu = titlul formularului frm_introd_compact + *!* tctva = contul de TVA (daca tl_calctva=.t.) + *!* tn_idset = parametrul functiei lans() + *!* tl_acont = daca se verifica analiticele + *!* tnDeducere = 0/1 - daca se scriu notele pentru cheltuieli deductibile 50% + *!* tlCursorCreat (optional) = .T. daca cursorul cnote_contabile este creat anterior (Ex: import din eFactura) + *!* tnTotcTVA (optional) = Valoarea cu TVA import eFactura + + If Pcount() >= 9 + llVerificaAcont = tl_acont + ENDIF + + If Pcount() >= 11 + llCursorCreat = m.tlCursorCreat + ENDIF + + Select actactan + Locate + Scatter Name poAct + AddProperty(poAct, "deducere", Iif(Empty(tnDeducere), 0, tnDeducere)) && modificare v 2.2.20 + + If Used('introdc') + Use In introdc + ENDIF + + *!* modificare JC/JV 2007 + If gnAn >= Iif(Type('gnAnFormNou') = 'U', 2007, gnAnFormNou) + *!* modificare ROACONT v 2.4.0 + Select actactan + Calculate Max(tva_incasare) To lnTvaIncasare + *!* modificare ROACONT v 2.4.0 ^ + + IF !m.llCursorCreat + lcSql = [select id_note,explicatie,scd,ascd,scc,ascc,cu_tva,id_set,ordine,in_valuta,ptva,] + ; + Iif(lnTvaIncasare = 1, [nvl(id_jtva_coloana_neex,id_jtva_coloana)], [id_jtva_coloana]) + [ as id_jtax,] + ; + Iif(lnTvaIncasare = 1, [nvl(explicatie_tva_neex,explicatie_tva)], [explicatie_tva]) + [ as denumiretax,] + ; + [CAST(0 as Number(16,4)) as suma, CAST(0 as Number(16,4)) as suma_val, CAST(0 as Number(5)) as id_valuta, CAST(null as Varchar2(5)) as nume_val,] + ; + [CAST(0 as Number(16,4)) as curs, ] + ; + [tipjurnal, taxcode, paymentcode from vnote_contabile where id_set = ] + Alltrim(Str(tn_idset)) + lcCursor = [cnote_contabile] + llSucces = goExecutor.oExecuta(lcSql, lcCursor) + If !m.llSucces + Return + ENDIF + + * 22.08.2025 + * Am introdus Calendar.impozit_profit + * Platitorii impozit venit, pentru limitare deducere 50% nu le trebuie 2 note CHELTUIELI DEDUCTIBILE si NEDEDUCTIBILE + IF m.tn_idset = 10609 AND EMPTY(NVL(goCalendar.impozit_profit,0)) AND RECCOUNT('cnote_contabile') = 2 + * STERG LINIA 2 + SELECT cnote_contabile + GO BOTTOM + DELETE + ENDIF + + ELSE + IF !USED('cnote_contabile') + AMESSAGEBOX('Nu exista cursorul cnote_contabile!',48, _screen.Caption) + RETURN + ENDIF + ENDIF + + DO CASE + CASE BETWEEN(m.gnAn*12+m.gnLuna,2018*12+1, 2025*12+7) + * achizitiile si livrarile inainte de 08/2025 trebuie sa propuna TVA 19%. + * In xsets s-a modificat 21% de la 01.08.2025 + + * Ach int 19% + IF m.lnTvaIncasare = 1 + update cnote_contabile set ptva = 19, id_jtax = 188, denumiretax = 'ACH. INT. NEEX. 19%' where INLIST(id_jtax, 208, 210) && 21% + update cnote_contabile set ptva = 19, id_jtax = 189, denumiretax = 'TVA ACH. INT. NEEX. 19%' where INLIST(id_jtax, 209, 211) && 21% + ELSE + update cnote_contabile set ptva = 19, id_jtax = 105, denumiretax = 'ACH. INT. 19%' where INLIST(id_jtax, 208, 210) && 21% + update cnote_contabile set ptva = 19, id_jtax = 106, denumiretax = 'TVA ACH. INT. 19%' where INLIST(id_jtax, 209, 211) && 21% + ENDIF + + * Ach. b. imp. 19% + update cnote_contabile set ptva = 19, id_jtax = 118, denumiretax = 'ACH. IMP. 19%' where id_jtax = 220 + update cnote_contabile set ptva = 19, id_jtax = 119, denumiretax = 'TVA ACH. IMP. 19%' WHERE id_jtax = 221 + + * Ach b. CE 19% + update cnote_contabile set ptva = 19, id_jtax = 133, denumiretax = 'ACH. BUNURI CE. 19%' where id_jtax = 226 + update cnote_contabile set ptva = 19, id_jtax = 134, denumiretax = 'TVA ACH. BUNURI CE. 19%' where id_jtax = 227 + + * Ach s. CE 19% + update cnote_contabile set ptva = 19, id_jtax = 190, denumiretax = 'ACH. SERVICII CE. 19%' where id_jtax = 222 + update cnote_contabile set ptva = 19, id_jtax = 191, denumiretax = 'TVA ACH. SERVICII CE. 19%' where id_jtax = 223 + + * Ach Tx inversa 19% + update cnote_contabile set ptva = 19, id_jtax = 141, denumiretax = 'TX. INV. 19%' where id_jtax = 216 + update cnote_contabile set ptva = 19, id_jtax = 142, denumiretax = 'TVA TX. INV. 19%' where id_jtax = 217 + + * LIV INT 19% + IF m.lnTvaIncasare = 1 + update cnote_contabile set ptva = 19, id_jtax = 31, denumiretax = 'LIVR.INTERN NEEX. 19%' where INLIST(id_jtax, 35, 37) + update cnote_contabile set ptva = 19, id_jtax = 32, denumiretax = 'TVA LIVR.INTERN NEEX. 19%' where INLIST(id_jtax, 36, 38) + ELSE + update cnote_contabile set ptva = 19, id_jtax = 1, denumiretax = 'LIVR.INTERN 19%' where INLIST(id_jtax, 35, 37) + update cnote_contabile set ptva = 19, id_jtax = 2, denumiretax = 'TVA LIVR.INTERN 19%' where INLIST(id_jtax, 36, 38) + ENDIF + + CASE BETWEEN(m.gnAn, 2016, 2017) + * achizitiile si livrarile pe 2016 trebuie sa propuna TVA 20%. + * In xsets s-a modificat 19% de la 01.01.2017 + + CASE m.gnAn = 2016 + * In 2016 lucrez cu TVA 20%. Transform TVA din 19% in 20% + * Ach int 20% + IF m.lnTvaIncasare = 1 + update cnote_contabile set ptva = 20, id_jtax = 178, denumiretax = 'ACH. INT. NEEX. 20%' where INLIST(id_jtax, 101, 103, 105, 188) && 19% + update cnote_contabile set ptva = 20, id_jtax = 179, denumiretax = 'TVA ACH. INT. NEEX. 20%' where INLIST(id_jtax, 102, 104, 106, 189) && 19% + ELSE + update cnote_contabile set ptva = 20, id_jtax = 176, denumiretax = 'ACH. INT. 20%' where INLIST(id_jtax, 101, 103, 105, 188) && 19% + update cnote_contabile set ptva = 20, id_jtax = 177, denumiretax = 'TVA ACH. INT. 20%' where INLIST(id_jtax, 102, 104, 106, 189) && 19% + ENDIF + + + * Ach. b. imp. 20% + update cnote_contabile set ptva = 20, id_jtax = 180, denumiretax = 'ACH. IMP. 20%' where INLIST(id_jtax, 114, 116, 118) + update cnote_contabile set ptva = 20, id_jtax = 181, denumiretax = 'TVA ACH. IMP. 20%' where INLIST(id_jtax, 115, 117, 119) + + * Ach b. CE 20% + update cnote_contabile set ptva = 20, id_jtax = 182, denumiretax = 'ACH. BUNURI CE. 20%' where INLIST(id_jtax, 127, 129, 133) + update cnote_contabile set ptva = 20, id_jtax = 183, denumiretax = 'TVA ACH. BUNURI CE. 20%' where INLIST(id_jtax, 128, 130, 134) + + * Ach Tx inversa 20% + update cnote_contabile set ptva = 20, id_jtax = 186, denumiretax = 'TX. INV. 20%' where INLIST(id_jtax, 137, 139, 141) + update cnote_contabile set ptva = 20, id_jtax = 187, denumiretax = 'TVA TX. INV. 20%' where INLIST(id_jtax, 138, 140, 142) + + * LIV INT 20% + IF m.lnTvaIncasare = 1 + update cnote_contabile set ptva = 20, id_jtax = 29, denumiretax = 'LIVR.INTERN NEEX. 20%' where INLIST(id_jtax, 1, 31) + update cnote_contabile set ptva = 20, id_jtax = 30, denumiretax = 'TVA LIVR.INTERN NEEX. 20%' where INLIST(id_jtax, 2, 32) + ELSE + update cnote_contabile set ptva = 20, id_jtax = 27, denumiretax = 'LIVR.INTERN 20%' where INLIST(id_jtax, 1, 31) + update cnote_contabile set ptva = 20, id_jtax = 28, denumiretax = 'TVA LIVR.INTERN 20%' where INLIST(id_jtax, 2, 32) + ENDIF + + CASE gnAn <= 2015 + * In 2015 lucrez cu TVA 24%. Transform TVA din 20% in 24% + IF m.lnTvaIncasare = 1 + update cnote_contabile set ptva = 24, id_jtax = 170, denumiretax = 'ACH. INT. NEEX. 24%' where INLIST(id_jtax, 176, 178) + update cnote_contabile set ptva = 24, id_jtax = 171, denumiretax = 'TVA ACH. INT. NEEX. 24%' where INLIST(id_jtax, 177, 179) + ELSE + * Ach int 24% - 20% + update cnote_contabile set ptva = 24, id_jtax = 156, denumiretax = 'ACH. INT. 24%' where INLIST(id_jtax, 176, 178) + update cnote_contabile set ptva = 24, id_jtax = 157, denumiretax = 'TVA ACH. INT. 24%' where INLIST(id_jtax, 177, 179) + ENDIF + + + * Ach. b. imp. 24% + update cnote_contabile set ptva = 24, id_jtax = 158, denumiretax = 'ACH. IMP. 24%' where id_jtax = 180 + update cnote_contabile set ptva = 24, id_jtax = 159, denumiretax = 'TVA ACH. IMP. 24%' where id_jtax = 181 + + * Ach b. CE 24% + update cnote_contabile set ptva = 24, id_jtax = 160, denumiretax = 'ACH. BUNURI CE. 24%' where id_jtax = 182 + update cnote_contabile set ptva = 24, id_jtax = 161, denumiretax = 'TVA ACH. BUNURI CE. 24%' where id_jtax = 183 + + * Ach Tx inversa 24% + update cnote_contabile set ptva = 24, id_jtax = 162, denumiretax = 'TX. INV. 24%' where id_jtax = 186 + update cnote_contabile set ptva = 24, id_jtax = 163, denumiretax = 'TVA TX. INV. 24%' where id_jtax = 187 + + * LIV INT 24% + IF m.lnTvaIncasare = 1 + update cnote_contabile set ptva = 24, id_jtax = 21, denumiretax = 'LIVR.INTERN NEEX. 24%' where INLIST(id_jtax, 27, 29) + update cnote_contabile set ptva = 24, id_jtax = 22, denumiretax = 'TVA LIVR.INTERN NEEX. 24%' where INLIST(id_jtax, 28, 30) + ELSE + update cnote_contabile set ptva = 24, id_jtax = 15, denumiretax = 'LIVR.INTERN 24%' where INLIST(id_jtax, 27, 29) + update cnote_contabile set ptva = 24, id_jtax = 16, denumiretax = 'TVA LIVR.INTERN 24%' where INLIST(id_jtax, 28, 30) + ENDIF + + ENDCASE && gnAn <= 2015 + + lcForm = [FRM_INTROD_COMPACT2007] + + *!* modificare ROACONT v 2.4.0 : am adaugat lnTvaIncasare + Select N.*, A.id_responsabil, A.id_partd, A.id_partc, A.partd, A.partc, ; + A.nresp, A.id_sectie, A.sectie, A.id_venchelt, A.dst_chlt, N.id_jtax As id_jtva_coloana, ; + 00000000000000 As id_factd, 00000000000000 As id_factc, 00000000000000 As pereched, 00000000000000 As perechec, ; + a.nrord, a.id_lucrare ; + From cnote_contabile N Join actactan A On N.ID_SET = A.ID_SET ; + Where N.ID_SET = tn_idset ; + Into Cursor introdc Readwrite Order By ordine + + If !Used('saft_taxtable') + update_saft_taxtable() + ENDIF + If !Used('saft_mecanisme_plati') + update_saft_mecanisme_plati() + ENDIF + + * Actualizez taxcode SAFT in functie de furnizori RTVAI + IF m.gl406 + * llN50/llN100 = .T. doar pentru linia cu Explicatie TVA = "Limitare deducere TVA" + llN50 = .F. && (tn_idset = 10609) or (poAct.deducere = 1) && deducere 50% + llN100 = .F. && (tn_idset = 10647) && deducere 100% + + SELECT distinct id_jtva_coloana, NVL(id_partc, id_partd) as id_part, (LEFT(scd,3) = '418' OR LEFT(scc,3) = '408') as neexigibil ; + FROM introdc ; + WHERE INLIST(ALLTRIM(NVL(tipjurnal,'')), 'JC', 'JV') ; + INTO CURSOR cIntrodcTemp + SELECT cIntrodcTemp + SCAN + lnIdJtva = id_jtva_coloana + lnIdPart = id_part + llNeexigibil = neexigibil + + lnTaxCode = GetTaxCodeIdPart(m.gnAn, m.gnLuna, poAct.DataAct, m.lnIdJtva, m.lnIdPart, m.llN50, m.llN100, m.llNeexigibil) + UPDATE introdc SET taxcode = m.lnTaxcode WHERE id_jtva_coloana = m.lnIdJtva AND NVL(id_partc, id_partd) = m.lnIdPart + ENDSCAN + ENDIF + + Use In (SELECT('crsjtva')) + Use In (SELECT('crstemp')) + + Select Distinct tipjurnal From cnote_contabile Where !Isnull(tipjurnal) Into Cursor crstemp + If Reccount('crstemp') = 1 + Select crstemp + lcTipJurnal = Upper(Alltrim(tipjurnal)) + [ = 1] + *!* modificare ROACONT v 2.4.0 + *!* Select denumire As denumiretax,id_jtva_coloana,cota_tva From jtva_coloane Where &lcTipJurnal Into Cursor crsjtva + If lnTvaIncasare = 0 + Select denumire As denumiretax, id_jtva_coloana, cota_tva From jtva_coloane Where &lcTipJurnal And Isnull(id_jtva_ex) Into Cursor crsjtva + Else + Select denumire As denumiretax, id_jtva_coloana, cota_tva From jtva_coloane Where &lcTipJurnal And Isnull(id_jtva_neex) Into Cursor crsjtva + Endif + *!* modificare ROACONT v 2.4.0 ^ + Else + *!* modificare ROACONT v 2.4.0 + *!* Select denumire As denumiretax,id_jtva_coloana,cota_tva From jtva_coloane Into Cursor crsjtva + If lnTvaIncasare = 0 + Select denumire As denumiretax, id_jtva_coloana, cota_tva From jtva_coloane Where Isnull(id_jtva_ex) Into Cursor crsjtva + Else + Select denumire As denumiretax, id_jtva_coloana, cota_tva From jtva_coloane Where Isnull(id_jtva_neex) Into Cursor crsjtva + Endif + *!* modificare ROACONT v 2.4.0 ^ + Endif + + If Used('crstemp') + Use In crstemp + Endif + Else + lcSql = [select * from ] + gcS + [.note_contabile where id_set = ] + Alltrim(Str(tn_idset)) + lcCursor = [cnote_contabile] + lnSucces = goExecutor.oExecute(lcSql, lcCursor) + If lnSucces < 0 + Return + Endif + + lcForm = [FRM_INTROD_COMPACT] + Select N.*, 00000000000000.0000 As SUMA, A.id_responsabil, A.id_partd, A.id_partc, A.partd, A.partc, ; + A.nresp, A.id_sectie, A.sectie, A.id_venchelt, A.dst_chlt, ; + 00000000000000 As id_factd, 00000000000000 As id_factc, 00000000000000 As pereched, 00000000000000 As perechec ; + From cnote_contabile N Join actactan A On N.ID_SET = A.ID_SET ; + Where N.ID_SET = tn_idset ; + Into Cursor introdc Readwrite Order By ordine + + lcSql = [SELECT descriere as tva, procent as ptva FROM ] + gcS + [.cote_tva where sters = 0 and an = ] + pcAn + [ and luna = ] + pcNl + lcCursor = [ttva] + lnSucces = goExecutor.oExecute(lcSql, lcCursor) + If lnSucces < 0 + Return + Endif + + Select ttva + Replace All tva With Alltrim(Str(ptva)) + ' %' + Endif + *!* modificare JC/JV 2007 ^ + + Use In cnote_contabile + + Select introdc + If Flock() + + If !Empty(tcscd) + Replace All SCD With tcscd For Empty(SCD) Or Upper(SCD) = 'X' + Endif + + If !Empty(tcscc) + Replace All SCC With tcscc For Empty(SCC) Or Upper(SCC) = 'X' + Endif + + *!* If m.ctva-1 = 0 + *!* Replace All ptva With 0 + *!* Endif + + Replace All id_partd With 0, partd With '' FOR EMPTY(NVL(id_partd,0)) + Replace All id_partc With 0, partc With '' FOR EMPTY(NVL(id_partc,0)) + + Replace All ascd With '' For Isnull(ascd) + Replace All ascc With '' For Isnull(ascc) + + If Used('xcont') + Select Xcont + Scan + pcContPart = contPart + lnIdPart = idpart + lcNumePart = numePart + Select introdc + Scan For SCD = pcContPart + Replace id_partd With lnIdPart + Replace partd With lcNumePart + Endscan + + Scan For SCC = pcContPart + Replace id_partc With lnIdPart + Replace partc With lcNumePart + Endscan + Select Xcont + Endscan + Endif + + Endif + Unlock + + Select actactan + Zap + + + *Create Table &gcTempPath\ttva (tva c(11), ptva N(3)) + + + lcExceptii_scc = '0' + lcExceptii_scd = '0' + + If !Empty(tcscd) + lcSql = [select * from ] + gcS + [.exceptii_ireg where invers = 1 and debit = 1 and cont = ] + tcscd + lcCursor = [ex_debit] + lnSucces = goExecutor.oExecute(lcSql, lcCursor) + If lnSucces < 0 + Return + Endif + Select ex_debit + Scan + lcExceptii_scd = lcExceptii_scd + ',' + Alltrim(cont_c) + Endscan + Use In ex_debit + Endif + + If !Empty(tcscc) + lcSql = [select * from ] + gcS + [.exceptii_ireg where invers = 1 and debit = 0 and cont = ] + tcscc + lcCursor = [ex_credit] + lnSucces = goExecutor.oExecute(lcSql, lcCursor) + If lnSucces < 0 + Return + Endif + Select ex_credit + Scan + lcExceptii_scc = lcExceptii_scc + ',' + Alltrim(cont_c) + Endscan + Use In ex_credit + Endif + + Select introdc + Go Top + + obj = Createobject(lcForm) + obj.cSCD = tcscd + obj.cSCC = tcscc + obj.gridb1.column3.BackColor = Rgb(255, 255, 255) + obj.gridb1.column4.BackColor = Rgb(255, 255, 255) + obj.pcobj = 'poAct' + obj.pcExceptii_scd = lcExceptii_scd + obj.pcExceptii_scc = lcExceptii_scc + obj.lVerificaAcont = llVerificaAcont + + + obj.titlufrumos1.Caption = tctitlu + obj.Show(1) + + USE IN (SELECT('crsTaxTable')) + USE IN (SELECT('crsjtva')) + + If buton = 2 + Do deschid_actc + Return + Endif + + *!* IF tn_idset=10455 && rate leasing + *!* lans(10411) + *!* ENDIF + + Select actactan + Replace All ID_SET With tn_idset + + Select actactan + Do oscrie_in_fisiere.prg + + Do deschid_actc + +Endproc &&introducere_compacta + +*--------------------------------------------------------------------------------------- + +Procedure deschid_actc + + If Used('actactan') + Use In actactan + Endif + + If Used('xcont') + Use In 'xcont' + Endif + + If Used('introdc') + Use In 'introdc' + Endif + + If Used('ttva') + Use In ttva + Endif +Endproc && deschid_actc + +*____________________________________________________ +Procedure inchid_actcv + + If Used('actcv') + Use In actcv + Endif + + If Used('ACTcv1') + Use In 'ACTcv1' + Endif + +Endproc && inchid_actcv + + +*_____________________________________________________________________________________________________________________ + + + +*-------------------------------------------------------------------- +Procedure umple_log + Parameters textul, textmare + Local datatext + datatext = "" + *----------------FACE INREGISTRARI IN LOG_TEXT. + datatext = CALEFIRMA + "\logs\contab\log_" + Alltrim(Str(Day(Date()))) + "_" + Alltrim(Str(Month(Date()))) + "_" + Alltrim(Str(Year(Date()))) + ".txt" + Cd &CALEFIRMA + If !Directory("LOGS") + Md logs + Endif + Cd &CALEFIRMA\logs + If !Directory("contab") + Md contab + Endif + Set Textmerge On + Set Textmerge Noshow + Set Textmerge To &datatext Additive +\\<>,<>,<>,<> +\ + Set Textmerge To + Cd &dirgen + + Return &&-------UMPLE_LOG + + + *!* *______________________________________________________ + + + +Procedure introducere_monetar + + + +Endproc diff --git a/COMUN/programe/prg2vcx.prg b/COMUN/programe/prg2vcx.prg new file mode 100644 index 0000000..70e0b51 --- /dev/null +++ b/COMUN/programe/prg2vcx.prg @@ -0,0 +1,44 @@ +* Prg2Vcx.prg +* By CarlKarsten +* converts a procedure file to a vcx class. + +* Uses VfpDiff's .aProcs to break the prg into methods, but... +* it expects it to be "properly formated" with ENDPROC at the end of each proc +* and Parameter ilnes, no F(x) declarations. +* and last I checked it didn't do FUNCTIONs. + +* I tried to make aProcs smarter and found it was easier to just clean up the PRG: +* search/replace all FUNCTION with PROCEDURE, fix any f(x)'s, etc. +* it took me about 10 attemtps to get it working right. + +* Don't forget you will have to convert all internal calls from f(x) to this.f(x) + + +Local ; + loForm as Form + +Local ; + laProc[1], ; + laX[1], ; + loIU as Custom + +lcPrgName = "P:\html\temp\SaveClipImage.PRG" +lcPrg = FileToStr( lcPrgName ) + +Do Form vfpdiff name loForm +loForm.Visible = .f. && get it out of the way +Activate Screen + +Create Class "iImageUtils" as custom of d:\vfe\ilibs\iimage.VCX nowait +? ASelObj( laX ) +loIU = laX[1] + +For lnProc = 1 to loform.aProcs( laProc, lcPrg ) + lcMethodName = laProc[ lnProc, 1 ] + lcMethodText = "* " + laProc[ lnProc, 2 ] + loIU.WriteMethod( lcMethodName, lcMethodText, .t. ) +endfor + +loForm.Release() + +return \ No newline at end of file diff --git a/COMUN/programe/printsettingscontroller.prg b/COMUN/programe/printsettingscontroller.prg new file mode 100644 index 0000000..0c2dd1c --- /dev/null +++ b/COMUN/programe/printsettingscontroller.prg @@ -0,0 +1,243 @@ +Define Class printSettingsController As wwConfig + cMode = "XML" + nNrMaxDispozitiv = 0 + nBonFiscal = 1 + nNotaPlata = 2 + nNotaMasa = 3 + ******************************************************************************* + Procedure Init + Dimension laListaDispozitive[1] + AddProperty(This,'aListaDispozitive',CREATEOBJECT('Collection')) + *!* trebuie adaugate toate proprietatile obiectului care nu trebuie sa apara in fisierul xml (scrise fara majuscule) + This.cPropertyExclusionList = This.cPropertyExclusionList + [,nnrmaxdispozitiv,alistadispozitive,nbonfiscal,nnotaplata,nnotamasa] + Endproc + ******************************************************************************* + Procedure seteazaFisier + Lparameters tcCaleROA,tcNumeProgram,tcSchema + Local lcCaleXML,lcBuffer,lcGeneralIniFile,lcIniPath + lcGeneralIniFile = Alltrim(tcCaleROA) + [ROAPRINT\settings.ini] + If !File(lcGeneralIniFile) + lcCaleXML = Alltrim(tcCaleROA) + [USERCONFIG\] + Alltrim(tcNumeProgram) + [_] + Alltrim(tcSchema) + [.XML] + Else + lcBuffer = Space(255) + GetPrivateProfileString( "initializari","Path","",@lcBuffer, Len(lcBuffer), lcGeneralIniFile) + lcBuffer = Addbs(Alltrim(Strtran(lcBuffer,Chr(0),""))) + If !Empty(lcBuffer) + lcIniPath = lcBuffer + Else + lcIniPath = Alltrim(tcCaleROA) + [USERCONFIG\] + Endif + lcCaleXML = lcIniPath + Alltrim(tcNumeProgram) + [_] + Alltrim(tcSchema) + [.XML] + Endif + This.seteazaConfigurari(lcCaleXML) + Endproc + ******************************************************************************* + Procedure seteazaConfigurari + Lparameters tcFisierConfigurare + Local lcCursorTemp,lcNrD,lnNrDMax,i && ,loObiect + This.cFileName = tcFisierConfigurare + lcCursorTemp = [TMP] + Sys(2015) + If !File(This.cFileName) +*!* This.adauga_dispozitiv() + This.Save() + Else + Xmltocursor(This.cFileName,lcCursorTemp,512) + lnNrDMax = 0 + For i = 1 To Fcount(lcCursorTemp) + lnNrD = VAL(Strtran(Lower(Field(i)),'device','')) + This.adauga_dispozitiv(lnNrD) + If lnNrD > lnNrDMax + lnNrDMax = lnNrD + Endif + Endfor + This.nNrMaxDispozitiv = lnNrDMax + Use In (lcCursorTemp) + Endif + This.Load() + Endproc + ******************************************************************************* + Function citeste_nr_dispozitiv + Lparameters tnTipListare, tcDescriere + *!* caut dupa tip listare si descriere ( ex : [NOTA MASA ]+ tcDescriere ) + Local lnNrDispozitiv, loObiect, i + lnNrDispozitiv = 0 + With This.aListaDispozitive + For i = 1 To .Count + If .Item(i).nTipListare = tnTipListare AND UPPER(.Item(i).cDescription) = This.getDescription(tnTipListare,tcDescriere) + lnNrDispozitiv = .Item(i).nNrDispozitiv + Exit + Endif + Endfor + Endwith + IF lnNrDispozitiv = 0 + loObiect = This.adauga_dispozitiv() + loObiect.nTipListare = tnTipListare + loObiect.cDescription = This.getDescription(tnTipListare,tcDescriere) + loObiect.cDeviceType = This.getDeviceType(tnTipListare) + lnNrDispozitiv = loObiect.nNrDispozitiv + ENDIF + RETURN lnNrDispozitiv + Endfunc + ******************************************************************************* + Function adauga_dispozitiv + Lparameters tnNrDispozitiv + Local lcNumeObiect,lnNrDispozitiv, loObiect + If Empty(tnNrDispozitiv) + This.nNrMaxDispozitiv = This.nNrMaxDispozitiv + 1 + lnNrDispozitiv = This.nNrMaxDispozitiv + Else + lnNrDispozitiv = tnNrDispozitiv + Endif + lcNumeObiect = 'oDevice'+Alltrim(Str(lnNrDispozitiv)) + AddProperty(This,lcNumeObiect,Createobject("cDevice")) + lcNumeObiect = [This.] + lcNumeObiect + loObiect = &lcNumeObiect + This.aListaDispozitive.Add(loObiect) + loObiect.nNrDispozitiv = lnNrDispozitiv + Return loObiect + Endfunc + ******************************************************************************* + Function citeste_imprimanta_dispozitiv + Lparameters tnNrDispozitiv + Local lcImprimanta, i + lcImprimanta = [] + With This.aListaDispozitive + For i = 1 To .Count + If .Item(i).nNrDispozitiv = tnNrDispozitiv + lcImprimanta = .Item(i).cDeviceName + Exit + Endif + Endfor + Endwith + Return lcImprimanta + Endfunc + ******************************************************************************* + Function scrie_imprimanta_dispozitiv + Lparameters tnNrDispozitiv,tcImprimanta,tnTipListare,tcDescriere + *!* scrie imprimanta si dispozitivul ( daca nu exista, atunci il creeaza; daca exista, atunci doar inlocuieste imprimanta) + Local llNou, i, loObiect + llNou = .T. + With This.aListaDispozitive + For i = 1 To .Count + If .Item(i).nNrDispozitiv = tnNrDispozitiv + .Item(i).cDeviceName = tcImprimanta + .Item(i).cDescription = This.getDescription(tnTipListare,tcDescriere) + llNou = .F. + Exit + Endif + Endfor + Endwith + If llNou + loObiect = This.adauga_dispozitiv() + loObiect.nTipListare = tnTipListare + loObiect.cDescription = This.getDescription(tnTipListare,tcDescriere) + loObiect.cDeviceName = tcImprimanta + loObiect.cDeviceType = This.getDeviceType(tnTipListare) + Endif + Return .T. + Endfunc + ******************************************************************************* + Function getDescription + Lparameters tnTipListare,tcDescriere + Local lcDescriere + Do Case + Case tnTipListare = This.nBonFiscal + lcDescriere = Alltrim([BON FISCAL ] + tcDescriere) + Case tnTipListare = This.nNotaPlata + lcDescriere = Alltrim([NOTA PLATA ] + tcDescriere) + Case tnTipListare = This.nNotaMasa + lcDescriere = Alltrim([NOTA MASA ] + tcDescriere) + Otherwise + lcDescriere = Alltrim(tcDescriere) + Endcase + Return lcDescriere + Endfunc + ******************************************************************************* + Function getDeviceType + Lparameters tnTipListare + Local lcTipDispozitiv + Do Case + Case tnTipListare = This.nBonFiscal + lcTipDispozitiv = [ECR] + Case tnTipListare = This.nNotaPlata + lcTipDispozitiv = [PRINTER] + Case tnTipListare = This.nNotaMasa + lcTipDispozitiv = [PRINTER] + Otherwise + lcTipDispozitiv = [] + Endcase + Return lcTipDispozitiv + Endfunc + ******************************************************************************* + Procedure salveaza + This.Save() +*!* Release This + Endproc + ******************************************************************************* +Enddefine +******************************************************************************* +Define Class cDevice As Relation + nNrDispozitiv = 0 + nTiplistare = 0 + cDescription = "" + cDeviceType="" + cDeviceName = "" + cDeviceDriver= "" + cDeviceTemplate = "" + cNetwork = "0" + cExePath = "" + cExeParams = "" + cPrintPath = "" + cErrorFileProcedure = "" + cErrorFile = "" + nErrorFileType = 0 && 1=se apeleaza procedura de eroare cu calea completa a fisierului de eroare, din tagul errorfile, in loc de tagul exepath + nTimeOut = 0 + cTVAGrupe = "" && 19|9|5|0|N + nNeplatitorTVA = 0 && 0=Platitor TVA, 1=Neplatitor TVA +Enddefine +********************************************************************************* +*!* Define Class cDevice1 As Relation +*!* nTiplistare = 1 && 1 = BON FISCAL +*!* cDescription = "Bon Fiscal" +*!* cDeviceType="ECR" +*!* cDeviceName = "EURO500" +*!* cDeviceDriver= "COMM2A" +*!* cDeviceTemplate = "EURO500_WIN.TMPL" +*!* cNetwork = "0" +*!* cExePath = "C:\COMM2A\COMM2A.EXE" +*!* cExeParams = "/RO /T /com:1 /speed:38400 /ECR:10 /num:1 /o:18 /data_file:items.txt /err_file:Online.err /LEN:??numar_linii_bon??" +*!* cPrintPath = "C:\COMM2A\ITEMS.TXT" +*!* cErrorFileProcedure = "euro500_win.err" +*!* cErrorFile = "C:\COMM2A\ONLINE.ERR" +*!* Enddefine +*!* ******************************************************************************* +*!* Define Class cDevice2 As Relation +*!* nTiplistare = 2 && nota plata +*!* cDescription = "Nota Plata" +*!* cDeviceType = "PRINTER" +*!* cDeviceName = "EPSONTM220" +*!* cDeviceDriver = "EPSONTM220" +*!* cDeviceTemplate = "NOTA.TMPL" +*!* cNetwork = "0" +*!* cExePath = "" +*!* cExeParams = "" +*!* cPrintPath = "C:\ITEMS.TXT" +*!* cErrorFileProcedure = "" +*!* cErrorFile = "" +*!* Enddefine +*!* ******************************************************************************* +*!* Define Class cDevice3 As Relation +*!* nTiplistare = 3 && nota masa +*!* cDescription = "Nota Masa" +*!* cDeviceType = "PRINTER" +*!* cDeviceName = "EPSONTM220" +*!* cDeviceDriver = "EPSONTM220" +*!* cDeviceTemplate = "NOTA.TMPL" +*!* cNetwork = "0" +*!* cExePath = "" +*!* cExeParams = "" +*!* cPrintPath = "C:\ITEMS.TXT" +*!* cErrorFileProcedure = "" +*!* cErrorFile = "" +*!* Enddefine +*!* ******************************************************************************* \ No newline at end of file diff --git a/COMUN/programe/proc_calcule_salarii.prg b/COMUN/programe/proc_calcule_salarii.prg new file mode 100644 index 0000000..a03dbfb --- /dev/null +++ b/COMUN/programe/proc_calcule_salarii.prg @@ -0,0 +1,65 @@ +******************************************* +* PROCEDURE calcul_brutcm( tnbazaCalcul, tnIdConc, tnziang, tnZicas, tnbrutAng, tnBrutCas ) +* Date : 07/18/05, 10:36:57 +* author : liana.macinic +* description: calcul brut concedii medicale + +****** PARAMETER BLOCK ************** +* Parameters : 6 +* Parameter 1: baza de calcul +* Parameter 2: id-ul concediului din nomenclator, pentru a gasi formula de calcul +* Parameter 3: zile platite de angajator +* Parameter 4: zile platite din bass +* Parameter 5: +* Parameter 6: +* +******************************************* +PROCEDURE calcul_brutcm( tnbazaCalcul, tnIdConc, tnziang, tnZicas,tnC_vechime, tnbrutAng, tnBrutCas ) +*!* IF !USED('v_nomcm') +*!* DO update_nomcm IN update_salarii.prg +*!* ENDIF + +SELECT v_nomcm +LOCATE FOR id_cm = tnIdConc +SCATTER NAME ocm +*!* IF ocm.ingrijire = 0 +tnbrutAng = ROUND(ocm.coef * tnbazaCalcul * (IIF(ocm.cuvechime = 1,1 + tnC_vechime,1))*tnziang,gnPs) +tnBrutCas = ROUND(ocm.coef * tnbazaCalcul * (IIF(ocm.cuvechime = 1,1 + tnC_vechime,1))*tnZicas,gnPs) +*!* ENDIF +ENDPROC +*----------------------------------sfarsit procedura calcul_brutcm---------------------------------- + + + +******************************************* +* PROCEDURE calcul_brutco( tnbazaCO, tnZile, tnCvechime, ) +* Date : 07/19/05, 11:47:27 +* author : liana.macinic +* description: tnbazaco + +****** PARAMETER BLOCK ************** +* Parameters : +* Parameter 1: +* Parameter 2: +* Parameter 3: +* Parameter 4: +* +******************************************* +PROCEDURE calcul_brutco( tnbazaCO, tnZile,tnZileTot, tnC_vechime,tnBrutCo,tnBrutCoTot ) +IF INLIST(gnSAL_TIPINDCO,1 ,3) + tnBrutCo = ROUND(tnbazaCO *tnZile,gnPs) + tnBrutCoTot = ROUND(tnbazaCO * tnZileTot,gnPs) +ELSE + IF gnSAL_TIPINDCO = 2 + tnBrutCo = ROUND(1 * tnbazaCO *tnZile,gnPs) + tnBrutCoTot = ROUND(1 * tnbazaCO *tnZileTot,gnPs) + ELSE +*!* (porec.bazaco,porec.ZILECOLUNA,porec.ZILECOTOT,porec.C_vechime,@pnBrutCO,@pnBrutCOtot + tnBrutCo = ROUND(1 * tnbazaCO * (1 + tnC_vechime)*tnZile,gnPs) + tnBrutCoTot = ROUND(1 * tnbazaCO * (1 + tnC_vechime)*tnZileTot,gnPs) + ENDIF +ENDIF +ENDPROC +*----------------------------------sfarsit procedura calcul_brutco---------------------------------- + + diff --git a/COMUN/programe/proceduri.prg b/COMUN/programe/proceduri.prg new file mode 100644 index 0000000..b7da698 --- /dev/null +++ b/COMUN/programe/proceduri.prg @@ -0,0 +1,227 @@ +*!* *_________________________________________________________ +PROCEDURE caut_alfa_cursor +PARAMETERS NUMEBAZA,NUMECIMP,CAPTEXT,VARMEM +LOCAL MC0,MC1,MC2, llVizibil +SET SAFETY OFF +llVizibil = .t. + +MC0='SELE '+NUMEBAZA +MC1='VARMEM=M.'+NUMECIMP +MC2 = [INDEX ON ] +NUMECIMP+ [ TAG nume OF &loc\&nfscurt\tempo\xindex.idx COMPACT ASCENDING ] + + +LOCAL lcNumeCol2 +STORE '' TO lcNumeCol2 + +LcCol = ALLTRIM(NUMEBAZA) + '.cod_fiscal' +IF TYPE(LcCol) # 'U' + lcNumeCol2 = 'cod_fiscal' +ENDIF + +LcCol = ALLTRIM(NUMEBAZA) + '.gest' +IF TYPE(LcCol) # 'U' + lcNumeCol2 = 'gest' +ENDIF + +LcCol = ALLTRIM(NUMEBAZA) + '.id_sectie' +IF TYPE(LcCol) # 'U' + lcNumeCol2 = 'id_sectie' +ENDIF + +IF EMPTY(lcNumeCol2) + lcNumeCol2 = 'space(4)' + llVizibil = .f. +ENDIF + +LcCol = ALLTRIM(NUMEBAZA) + '.id' +IF TYPE(LcCol) # 'U' + lcNumeCol3 = 'id' +ELSE + lcNumeCol3 = 'space(4)' +ENDIF + +SELECT DISTINCT &NUMECIMP, &lcNumeCol2, &lcNumeCol3 FROM (numebaza) INTO CURSOR tnomenclator READWRITE ORDER BY &NUMECIMP + +OCA=CREATEOBJECT("CAUTALFa") +OCA.CAPTION=CAPTEXT +OCA.GRID1.RECORDSOURCE='tnomenclator' +OCA.GRID1.COLUMN1.CONTROLSOURCE = NUMECIMP +OCA.GRID1.COLUMN2.CONTROLSOURCE = lcNumeCol2 +OCA.GRID1.COLUMN2.visible = llVizibil +OCA.cmdrenunt1.visible=.t. +OCA.command1.visible=.f. +OCA.command2.visible=.f. +OCA.command3.visible=.f. +OCA.SHOW(1) + +IF buton=2 + USE IN tnomenclator + RETURN +ENDIF + +lcFile = ADDBS(gcTempPath) + 'xindex.idx' +IF FILE(lcFile) + SET INDEX TO + DELETE FILE &lcFile +ENDIF +*!* &MC1 + +SELECT tnomenclator +SCATTER MEMVAR + +&MC1 + + +USE IN tnomenclator +RETURN + + +*!* *___________________________________________ +PROCEDURE MESAJ +PARAMETERS m1,m2 +ot=create('text') +ot.label2.caption=m1 +ot.label3.caption=m2 +ot.show(1) +RETURN + + +*!* *___________________________________________ +*!* PROCEDURE mesajmare +*!* PARAMETERS m1 +*!* ot=create('textmare') +*!* ot.label2.caption=m1 +*!* ot.show(1) +*!* RETURN + +*!* *___________________________________________ +*!* PROCEDURE mesajval +*!* PARAMETERS m1,m2 +*!* ot=create('textval') +*!* ot.label2.caption=m1 +*!* ot.valoare=m2 +*!* ot.show(1) +*!* RETURN + +*!* *___________________________________________ +PROCEDURE mesajatent +PARAMETERS m1,m2 +ot=create('atentie') +ot.label2.caption=m1 +ot.label3.caption=m2 +ot.show(1) +RETURN + +*!* *___________________________________________ +*!* PROCEDURE mesajrosu +*!* PARAMETERS m1,m2 +*!* ot=create('atentierosu') +*!* ot.label2.caption=m1 +*!* ot.label3.caption=m2 +*!* ot.show(1) +*!* RETURN + + +*!* *_____________________________________- +*!* PROCEDURE mesajm +*!* PARAM txt,i + +*!* LOCAL t,p +*!* p=iif(i<10,str(i,1),str(i,2)) +*!* T='orm.label'+p+'.caption="'+txt+'"' +*!* &t +*!* IF i<20 +*!* i=i+1 +*!* ENDIF +*!* p=iif(i<10,str(i,1),str(i,2)) +*!* T='orm.IMAGE'+p+'.VISIBLE=.T.' +*!* &t + +*!* RETURN + + + + +*!* *___________________________________________ +PROCEDURE danu +PARAMETERS m1 +od=create('danu') +od.label1.caption=m1 +od.show(1) +RETURN +*!* *___________________________________________ +*!* *____________________________________ +*!* PROC PR +*!* PARAM J +*!* IF J>M +*!* op.release +*!* op=crea('progresbar') +*!* J=0 +*!* op.show() +*!* ENDIF +*!* op.PRBAR.VALUE=J +*!* op.p=ROUND(100*op.PRBAR.VALUE/op.PRBAR.MAX,2) +*!* op.REFRESH +*!* J=J+1 +*!* RETURN + + +*!* *_________________________ +*!* PROC MESAJT +*!* PARAM M.denumire +*!* OTEXT.oleTreeview.NODES.add(,,,M.denumire,) +*!* STARE=STARE+1 +*!* RETURN + + + + + + + +*!* *!* ***------------------------------------------------------------------------------------ + +*!* *!* Procedure lanseaza_excel_standard +*!* *!* Parameters tcalias + +*!* *!* Private lcTabelSectii +*!* *!* lcTabelSectii = Alltrim(tcalias) + +*!* *!* Select (lcTabelSectii) + +*!* *!* lcexcel=Addbs(pccaletempo)+"Fisa de calcul a eficientei"+".XLS" +*!* *!* x=Newobject("XL_Sectie_standard","EXCELX") && alternatively you can drop this class on a VFP form +*!* *!* x.SaveAs=lcexcel && PART.XLS to be created in your TEMP folder + +*!* *!* Select centre_profit +*!* *!* Set Filter To + +*!* *!* Count For ((!virtual And contribuie) Or SOCIETATE) And ales To lnNrSectii +*!* *!* If !lnNrSectii>0 +*!* *!* Return +*!* *!* Endif + +*!* *!* Dimension x.oWorkSheet[lnNrSectii] && need four pages + +*!* *!* I=0 +*!* *!* Select centre_profit +*!* *!* Scan For ((!virtual And contribuie) Or SOCIETATE) And ales +*!* *!* lccentru = Alltrim(centru) +*!* *!* I=I+1 +*!* *!* x.oWorkSheet[I] = lccentru +*!* *!* Endscan + +*!* *!* x.Go() && remember this calls .populate_pages(). +*!* *!* Release x + +*!* *!* **************************8 + +*!* *!* OLEAPP = Getobject("","Excel.Application") +*!* *!* If Type('OLEAPP')!='O' +*!* *!* OLEAPP = Createobject("Excel.Application") +*!* *!* Endif +*!* *!* OLEAPP.WorkBooks.Open(lcexcel) +*!* *!* OLEAPP.Visible=1 + +*!* *!* Return +*!* *!* Endproc &&lanseaza_excel_standard diff --git a/COMUN/programe/proceduri_comune.prg b/COMUN/programe/proceduri_comune.prg new file mode 100644 index 0000000..1b342eb --- /dev/null +++ b/COMUN/programe/proceduri_comune.prg @@ -0,0 +1,1675 @@ +*!* 22.07.2016 +*!* marius.mutu +*!* cursor2lista - adaugare parametru tcFilter + +Function caut_nume_politica +Lparameters tnIdPol +Local lcNume +Store "" To lcNume +If !Empty(Nvl(tnIdPol,0)) + If Used('crstemppol') + Use In crstemppol + Endif + lcSql = [select nume from ] + gcS + [.crm_vpolitici_pret_curente where id_pol = ] + Alltrim(Str(tnIdPol)) + lnSucces = goExecutor.oExecute(lcSql,[crstemppol]) + If lnSucces < 0 + amessagebox(goExecutor.oPrelucrareEroare(),16,"Eroare") + Else + Select crstemppol + lcNume = Alltrim(Upper(nume)) + Endif + If Used('crstemppol') + Use In crstemppol + Endif +Endif +Return lcNume +Endfunc && caut_nume_politica +***************************************************************************************** +Function caut_nume_grupa_art +Lparameters tnIdGrupaArt +Local lcNume +Store "" To lcNume +If !Empty(Nvl(tnIdGrupaArt,0)) + If Used('crstempgrupart') + Use In crstempgrupart + Endif + lcSql = [select grupa from ] + gcS + [.vgest_art_gr where id_grupa = ] + Alltrim(Str(tnIdGrupaArt)) + lnSucces = goExecutor.oExecute(lcSql,[crstempgrupart]) + If lnSucces < 0 + amessagebox(goExecutor.oPrelucrareEroare(),16,"Eroare") + Else + Select crstempgrupart + lcNume = Alltrim(Upper(grupa)) + Endif + If Used('crstempgrupart') + Use IN crstempgrupart + Endif +Endif +Return lcNume +ENDFUNC + +***************************************************************************************** +* Cautare nume gestiuni depozit/sectie (roacomenzi) +***************************************************************************************** +Function caut_nume_gest_dep + parameters tcLISTA_GESTIUNI_DEPOZIT + * tcLISTA_GESTIUNI_DEPOZIT: lista id-uri gestiuni tip depozit corespunzatoare unei sectii, separate prin | + + Local lcNume + Store "" To lcNume + If !Empty(Nvl(tcLISTA_GESTIUNI_DEPOZIT,'')) + Use In (SELECT('crstempgest')) + lcSql = [select stringagg(cgest) as cgest from vnom_gestiuni where id_gestiune in (SELECT X FROM table(charn2collection(?tcLISTA_GESTIUNI_DEPOZIT, ',')))] + llSucces = goExecutor.oExecuta(lcSql,[crstempgest]) + If llSucces + Select crstempgest + lcNume = Alltrim(Upper(cgest)) + Endif + Use In (SELECT('crstempgest')) + Endif + Return lcNume +ENDFUNC + +***************************************************************************************** +Procedure make_sectii_utilizator + lcSel = [{call PACK_COMENZI.sectii_utilizator(?gnIdUtil,?gnIdSucursala)}] + lcCursor = 'crsSectii' + lnSucces = goExecutor.oExecute(lcSel,lcCursor) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,"Eroare") + Return + Endif + Select crsSectii + Go Top +Endproc && make_sectii_utilizator +***************************************************************************************** +Procedure extrage_optiuni +Parameters tcLista, tnId + +Local lcLista, lcReturn +Store '' To lcReturn +lcLista = Nvl(Alltrim(tcLista),'') +lnNrOptiuni = Getwordcount(lcLista,";") +For i=1 To lnNrOptiuni + lcExtragOptId = Getwordnum(lcLista,i,";") + lcId_extras = Getwordnum(lcExtragOptId,1,[:]) + If lcId_extras = Alltrim(Str(tnId)) + lcReturn = Getwordnum(lcExtragOptId,2,[:]) + Endif +Endfor + +Return lcReturn + +Endproc && extrage_optiune +******************************************************************************************************************** +*!* lcLista = '1001::3;2::777;21001::5;' +*!* lcId = 2 +*!* lcValoareNoua = '9' +*!* lcListaNoua = recompune_optiuni(lcLista,lcId,lcValoareNoua) +Procedure recompune_optiuni +Parameters tcLista, tnId, tcValoareNoua + +Local lcLista, lcListaNoua, lcId, lcValoareNoua, lnGrupuri, lcGrup, lcIdCautat, lnPoz, lnPozGrup, lcValoare +lcLista = Nvl(Alltrim(tcLista),'') +lcId = Alltrim(Str(tnId)) +lcValoareNoua = Alltrim(tcValoareNoua) + +llGasit = .F. +lcListaNoua = '' +lnGrupuri = Getwordcount(lcLista,';') +For i = 1 To lnGrupuri + lcGrup = Getwordnum(lcLista,i,";") + If i=1 + lcIdCautat = lcId + [:] + Else + lcIdCautat = ';'+ lcId + [:] + lcGrup = ';' + lcGrup && ';id_sectie::optiune_veche' + Endif + lnPozGrup = At(lcIdCautat,lcGrup) + If lnPozGrup > 0 + llGasit = .T. + lnPoz = At([:], lcGrup) + If lnPoz > 0 + lcValoare = Substr(lcGrup,lnPoz) && '::optiune_veche' + lcGrup= Strtran(lcGrup,lcValoare,[:]+lcValoareNoua) + Endif + Endif + lcListaNoua = lcListaNoua + lcGrup +Endfor + +If lnGrupuri = 0 + lcListaNoua = lcId + [:] + lcValoareNoua +Else + If !llGasit + lcListaNoua = lcListaNoua + ';' + lcId + [:] + lcValoareNoua + Endif +Endif + +Return lcListaNoua + +Endproc && recompune_optiuni +***************************************************************************************** +Function cere_perioada_luni +Lparameters tlIanMar,tnOptiuneStart +*** tnOptiuneStart - pe ce e setat +*** 0 = luna +*** 1 = perioada +Local lcAn1,lcAn2,lcLuna1,lcLuna2,loPerioada,lofrmperioada +Private pcondper +Store "" To loPerioada,lofrmperioada +pcondper = "" +lofrmperioada = Createobject('frm_perioada_luni',.T.,tnOptiuneStart) +lofrmperioada.Show(1) +If gnButon=2 + loPerioada = Null +Else + loPerioada = Createobject("Session") + loPerioada.AddProperty([cPerioada],[]) + loPerioada.AddProperty([nInit],0) + loPerioada.AddProperty([nFinal],0) + + lnPoz=At('_',pcondper) + lcAn1 = Substr(pcondper,3,4) + lcLuna1 = Substr(pcondper,1,2) + If lnPoz>0 + lcAn2 = Substr(pcondper,10,4) + lcLuna2 = Substr(pcondper,8,2) + Else + lcAn2 = Substr(pcondper,3,4) + lcLuna2 = Substr(pcondper,1,2) + Endif + + loPerioada.nInit = Val(lcAn1) * 12 + Val(lcLuna1) + loPerioada.nFinal = Val(lcAn2) * 12 + Val(lcLuna2) + loPerioada.cPerioada = lcLuna1 + '/' + lcAn1 + ' - ' + lcLuna2 + '/' + lcAn2 +Endif +Release pcondper,lcAn1,lcAn2,lcLuna1,lcLuna2,lofrmperioada +Return loPerioada +Endfunc + +*!* SET CLASSLIB TO d:\contafin\contab\clase\caut.vcx ADDITIVE +*!* oo=ret_luna("Luna de inceput") +*** scattered = MYSCATTER() && This is instead of SCATTER NAME... +Procedure myScatter + Parameters tcBlank + Local llBlank, loScatter + + llBlank=.F. + If Type('tcBlank')='C' + If 'BLANK'$UPPER(tcBlank) + llBlank=.T. + Endif + Endif + + myScatterObject = Createobject("myScatterObject") + If !Empty(Alias()) + If llBlank + Scatter Name loScatter Memo Blank + Else + Scatter Name loScatter Memo + Endif + lnFields = Fcount(Alias()) + For N =1 To lnFields + lcField=Field(N) + lcvalue=loScatter.&lcField + myScatterObject.AddProperty(lcField, lcvalue) + Endfor + Release loScatter + Endif + Return myScatterObject && Always return an object, so GATHER command could not choke. +Endproc + +Define Class myScatterObject As Session + * You may use any VFP class directly like myScatterObject = CREATEOBJECT("Session") + * But you may optionally use this DEFINE CLASS + * and declare the native PEMs here as HIDDEN if you want, so they are not exposed + * in case you are using class other than Session or work with VFP version prior to VFP 7.0 +Enddefine +PROCEDURE lista2cursor +PARAMETERS tcLISTA,tcAlias,tcCol1,tcSeparator +&& tcLista este un sir de caractere care contine elementele separate prin <;> default +&& tcAlias este cursorul care se completeaza - trebuie dat prin referinta +&& tcSeparator separatorul de elemente din tcLista - default este ";" - este optional +&& intoarce numarul de elemente gasite + +&& ex: lnNr = lista2array("ana;are;mere",@alista,";") + LOCAL Lclista,lcSeparator,lnNRF,lcF1,i + + lcLista=UPPER(ALLT(tcLISTA)) + IF PARAMETERS()<3 OR EMPTY(tcSeparator) + lcSeparator=";" + ELSE + lcSeparator=ALLTRIM(tcSeparator) + ENDIF + + IF RIGHT(Lclista,1)!=lcSeparator + Lclista=Lclista+lcSeparator + ENDIF + + lnNRF=OCCURS(lcSeparator,lcLista) + + + FOR i=1 TO lnNRF + lcF1=LEFT(lcLista,AT(lcSeparator,lcLista)-1) + + IF i!=lnNRF + lcLista=SUBSTR(lcLista,AT(lcSeparator,lcLista)+1) + ENDIF + + INSERT INTO (tcAlias) (&tcCol1) VALUES (lcF1) + + ENDFOR + + RETURN lnNrf + +ENDPROC && lista2cursor +*____________________________________________________________________________________________ + +*** returneaza un obiect cu proprietatile cont si acont (doar conturile din 'tcListaConturi' existente in planul de conturi) +Function ret_cont + Parameters tcTitlu, tcListaConturi + + Private loCont + + Local Ol As "frm_sel_cont" + Local lcLista, lcSel, lnSucces, lcSelect + lcSelect = SELECT() + + Create Cursor tCont (conturi c(5)) + lcLista = IIF(!EMPTY(m.tcListaConturi), Alltrim(m.tcListaConturi), '') + lista2cursor(m.lcLista, 'tCont', 'conturi', ',') + + Select tCont + Replace All conturi With Alltrim(conturi) + '*' + + lcSel = [select cont, acont, tip_sold from plcont where an = ] + Alltrim(Str(gnAn)) + [ and inactiv = 0 and nefolosit = 0 ] + lnSucces = goExecutor.oExecute(lcSel, 'tplcont') + + If lnSucces < 0 + amessagebox(goExecutor.cEroare, 0 + 16, 'Eroare') + Use In (Select('tCont')) + Return .F. + Endif + + Use In (Select('tsel_cont')) + + Select * From tplcont p Join tCont T On Like(Alltrim(T.conturi), p.Cont) ; + Into Cursor tsel_cont Readwrite ; + Order By p.Cont, p.acont + + Use In (Select('tCont')) + Use In (Select('tPlCont')) + + Select tsel_cont + Delete All For acont = '0000' + loCont = myScatter('blank') + + Ol = Createobject("frm_sel_cont") + With Ol + .lb_titlu_alb_b121.Caption = tcTitlu + If Empty(.cboCont.RowSource) + .cboCont.RowSource = "tsel_cont.cont,acont" + Endif + .ocont = loCont + If Empty(.cAlias) + .cAlias = Left(.cboCont.RowSource, At(".", .cboCont.RowSource) - 1) + Endif + Endwith + Ol.Show(1) + + Use In (Select('tsel_Cont')) + Select (m.lcSelect) + + Return loCont +Endfunc && ret_cont +*------------------------------------------------------------------------------------------- + +*** returneaza un obiect cu proprietatile an si nl (de fapt cu toate coloanele din calendar) +Function ret_luna + Parameters tcTitlu + + PRIVATE loLuna + + Select calendar + USE DBF('calendar') IN 0 AGAIN ALIAS tsel_luna share + SELECT tsel_luna + loLuna=myscatter('blank') + + Ol=Createobject("frm_sel_luna") + WITH Ol + .lblTitlu.Caption=tcTitlu + IF EMPTY(.cboLuna.rowsource) + .cboLuna.rowsource="tsel_luna.nl,an" + ENDIF + .oLuna=loLuna + IF EMPTY(.cAlias) + .cAlias=LEFT(.cboLuna.RowSource,AT(".",.cboLuna.RowSource)-1) + ENDIF + ENDWITH + Ol.Show(1) + + USE IN tsel_luna + + Return loLuna +ENDFUNC && ret_oluna +*___________________________________________________________________________________________ + +PROCEDURE ceretitlu_rap +PARAMETERS tcmesaj,tctitlu + +LOCAL lctitlu +lctitlu = tctitlu +obj1=CREATEOBJECT("frm_cere_titlu") +obj1.clb_tx_simplu1.lb_simplu1.caption = tcmesaj +obj1.clb_tx_simplu1.text_simplu1.controlsource = 'lctitlu' +obj1.show(1) +RETURN lctitlu + +ENDPROC + + +*____________________________________________________________________________________________ + +PROCEDURE cerestring +PARAMETERS tit,nvar + OLIT=CREATEOBJECT("CAUTLITERE") + WITH OLIT + .CAPTION=tit + .label1.visible=.f. + .text1.controlsource=nvar + endwith + olit.show(1) +RETURN + +*----------------------------------------- +PROCEDURE cerenumar +PARAMETERS tit,nvar + Ointre=CREATEOBJECT("CAUTintre") + WITH Ointre + .CAPTION='' + .label1.caption=tit + .label2.visible=.f. + .text1.controlsource=nvar + .text2.visible=.f. + endwith + ointre.show(1) +RETURN + + +*----------------------------------------- +PROCEDURE cereDATE +PARAMETERS tit,nvar1,NVAR2,L1,L2 + Ointre=CREATEOBJECT("CAUTintre") + WITH Ointre + .CAPTION=TIT + .text1.controlsource=nvar1 + .text2.controlsource=nvar2 + .label1.caption=L1 + .label2.caption=L2 + endwith + ointre.show(1) +RETURN + + + +*---------------------------------------------- +FUNCTION get_date_prec +Sele calendar +Locate For nl=m.nl And an=m.an +Skip -1 +If !Bof() + nla=nl + ana=an + dateA=calefirma+'\an'+ana+'\date'+nla &&DATE PREC +Else + dateA=dirgen+'\_alfa\an0000\date00\' +Endif +RETURN datea + +*-------------------------------------------------------------------------------- + +function existacimp +param numet,numec +for i=1 to fcount() +if upper(allt(field(i)))=upper(allt(numec)) + return .t. +endif +next +return .f. + +*--------------------------------------------------------------------------------- + +function compartabele +PARAMETERS nume + +SET EXACT on +SELECT fistotv +LOCATE FOR numef=UPPER(nume) +IF !FOUND() + RETURN +ENDIF +SCATTER memv +c1=ALLTRIM(m.calealfa)+'\' +c2=ALLTRIM(m.cale)+'\' +SELECT &nume +nrcol1=FCOUNT() +dat=c1+m.numef + +USE &dat IN 0 ALIAS aliasmf + +SELECT aliasmf +nrcol2=FCOUNT() +USE IN aliasmf + +IF nrcol1<>nrcol2 +RETURN .f. + ELSE +RETURN .t. +ENDIF + +ENDPROC +*----------------------------------------- +function cereluna +PARAMETERS tit +LOCAL lz,az +lz=luna +az=anul +SELECT calendar +SET FILTER TO + Ox=CREATEOBJECT("seleluna") + ox.label1.caption=tit + ox.show(1) + nlun=luna + nan=anul +luna=lz +anul=az +SELECT calendar +SET FILTER TO +RETURN nlun+nan + +*__________________________________________________________ + +&& Folosesc un tabel (tabel,id) cu cate o linie pt fiecare tabel +&& aflu id-ul urmator si il scriu in tabela +&& returnez id-ul +&& EX1: LNEW_ID=NEW_ID("GRILA_SAL") --> urmatorul id din fara cautare in tabela originala +&& EX2: LNEW_ID=NEW_ID("GRILA_SAL","ID") --> urmatorul id din cu cautare in tabela originala dupa campul +&& ex3: LNEW_ID=NEW_ID("GRILA_SAL","ID",.T.) --> .T. INSEAMNA CA TABELUL ORIGINAL ESTE INDEXAT DUPA FAC SEEK IN LOC DE LOCATE +PROCEDURE NEW_ID + PARAMETERS TALIAS,TFIELD,TTAG + *WAIT WINDOW TALIAS + *ON error Errorh(ERROR(),PROGRAM(),LINENO()) + LLLOOKUP=IIF(TYPE("tfield")="C",.T.,.F.) + LLTAG=IIF(TYPE("TTAG")="C",.T.,.F.) + TALIAS=UPPER(ALLTRIM(TALIAS)) + + + *** Save Stats + LCOLDALIAS = ALIAS() && keep current work area + LNOLDRECNO = IIF(!EOF(),RECNO(),0) && save record number + + LCSETDEL=SET("deleted") +&& lnmaxval = (10^pcidsize)-1 && wrap around after this val + + *** +&& PUN ORDINEA PE ID + IF LLLOOKUP AND LLTAG + SELE (TALIAS) + SET ORDER TO &TTAG + ENDIF + *** + LCNEWID = 0 && our return result - NULL if failed + SELECT IDS + LOCATE FOR UPPER(ALLTRIM(TABEL))=TALIAS + IF !FOUND() + IF FLOCK() + APPEND BLANK + REPLACE TABEL WITH TALIAS + UNLOCK + ENDIF + + ENDIF + + SET DELETED OFF +&& acum sunt pe inregistrarea corecta + + + *** lock counter table and update counter + SELECT IDS + IF RLOCK() + *** Avoid use of Macros - Convert to mem var & update it + LNCOUNTERVAL = NEW_ID + + *** VERIFY ID NUMBER - search 'til no match + DO WHILE .T. + *** increase the counter - update field and var + LNCOUNTERVAL = LNCOUNTERVAL+1 + + *!* *** check for wraparound + *!* IF lncounterval > lnmaxval + *!* lncounterval = 1 + *!* ENDIF + + SELECT (TALIAS) + IF LLLOOKUP + IF LLTAG + LCAUT="SEEK "+ALLT(STR(LNCOUNTERVAL)) + ELSE + LCAUT="LOCATE FOR "+ALLT(TFIELD)+"="+ALLT(STR(LNCOUNTERVAL)) + *** now see if it exists + &LCAUT + * LOCATE FOR &TFIELD=LNCOUNTERVAL + IF !FOUND() + *** No match - DONE + EXIT + ENDIF && !found() + ENDIF && lltag + ELSE + EXIT + ENDIF && lllokup + + ENDDO && done + + SELE IDS + REPLACE NEW_ID WITH LNCOUNTERVAL + LCNEWID=LNCOUNTERVAL + + UNLOCK IN IDS + ENDIF && rlock() + + *** Reset record number on original file + + IF !EMPTY(lcoldAlias) + SELE (LCOLDALIAS) + IF LNOLDRECNO#0 + GOTO LNOLDRECNO + ENDIF + ENDIF + SET DELETED &LCSETDEL + + RETURN LCNEWID + +ENDPROC && NEW_ID + + +***------------------------------------------------------------------------------------------------------- + +* Foloseste comment de la coloane si tooltiptext de la grid pt a salva recordsource si controlsource din grid inainte de reconstructie +PROCEDURE SAVE_GRID +PARAM toGrid +*wait wind 'save_grid' +private pogrid +if param()=0 or type('togrid')!="O" + return .F. +endif + +poGrid=togrid + +* remember control sources in the column's comment field +with pogrid + local nColumnIndex + for m.nColumnIndex = 1 to .ColumnCount + .Columns(m.nColumnIndex).Tag = .Columns(m.nColumnIndex).ControlSource + endfor + .ToolTipText=.RecordSource + .RecordSource="" +endwith + +return .T. +endproc && SAVE_GRID +***-------------------------------------------------------------- +PROCEDURE RESTORE_GRID +PARAM toGrid + +*wait wind 'restore_grid' +private pogrid +if param()=0 or type('togrid')!="O" + return .F. +endif + +poGrid=togrid + + +with poGrid +* restore record source + .RecordSource = .ToolTipText +* restore control sources + for m.nColumnIndex = 1 to .ColumnCount + .Columns(m.nColumnIndex).ControlSource = .Columns(m.nColumnIndex).Tag + endfor + .ToolTipText="" +endwith +return .T. +endproc && RESTORE_GRID + +****** + +* Foloseste comment de la coloane si tooltiptext de la grid pt a salva recordsource si controlsource din grid inainte de reconstructie +PROCEDURE SAVE_GRID_COMMENT +PARAM toGrid +*wait wind 'save_grid' +private pogrid +if param()=0 or type('togrid')!="O" + return .F. +endif + +poGrid=togrid + +* remember control sources in the column's comment field +with pogrid + local nColumnIndex + for m.nColumnIndex = 1 to .ColumnCount + .Columns(m.nColumnIndex).Comment = .Columns(m.nColumnIndex).ControlSource + endfor + .ToolTipText=.RecordSource + .RecordSource="" +endwith + +return .T. +endproc && SAVE_GRID_COMMENT +***-------------------------------------------------------------- +PROCEDURE RESTORE_GRID_COMMENT +PARAM toGrid + +*wait wind 'restore_grid' +private pogrid +if param()=0 or type('togrid')!="O" + return .F. +endif + +poGrid=togrid + + +with poGrid +* restore record source + .RecordSource = .ToolTipText +* restore control sources + for m.nColumnIndex = 1 to .ColumnCount + .Columns(m.nColumnIndex).ControlSource = .Columns(m.nColumnIndex).Comment + endfor + .ToolTipText="" +endwith +return .T. +endproc && RESTORE_GRID_COMMENT + + +* Foloseste comment de la coloane si tooltiptext de la grid pt a salva recordsource si controlsource din grid inainte de reconstructie +PROCEDURE SAVE_GRID_TAG +PARAM toGrid +*wait wind 'save_grid' +private pogrid +if param()=0 or type('togrid')!="O" + return .F. +endif + +poGrid=togrid + +* remember control sources in the column's comment field +with pogrid + local nColumnIndex + for m.nColumnIndex = 1 to .ColumnCount + .Columns(m.nColumnIndex).Tag = .Columns(m.nColumnIndex).ControlSource + endfor + .ToolTipText=.RecordSource + .RecordSource="" +endwith + +return .T. +endproc && SAVE_GRID_TAG +***-------------------------------------------------------------- +PROCEDURE RESTORE_GRID_TAG +PARAM toGrid + +*wait wind 'restore_grid' +private pogrid +if param()=0 or type('togrid')!="O" + return .F. +endif + +poGrid=togrid + + +with poGrid +* restore record source + .RecordSource = .ToolTipText +* restore control sources + for m.nColumnIndex = 1 to .ColumnCount + .Columns(m.nColumnIndex).ControlSource = .Columns(m.nColumnIndex).Tag + endfor + .ToolTipText="" +endwith +return .T. +endproc && RESTORE_GRID_TAG + + +*------------------------------------------- +* Function...: Xmenu +* Author.....: MARTIN +* Date.......: 04/06/1997 +* Notes......: Based on an idea from Steve Zimmelman for FoxPro 2.x +* Parameters.: tcItems = Semicolon-separated String with the various options +* ...........: tnBar = Initially selected item (default=1) +* Returns....: Selected item number +* See Also...: PROMPT() [FoxPro Native] +* +PROCEDURE XMENU + LPARAMETERS TCITEMS, TNBAR + + LOCAL NITEMCOUNT, AITEMS, X, NROW, NCOL, CTITLE, NLASTPOS, CCOLOR, AITEMS + + PRIVATE CPOPMENU, NSELECT && They flow into the GetChoice internal procedure + + IF PCOUNT() < 2 + TNBAR = 1 + ENDIF + + ACTIVATE SCREEN + + * Parse every item + * + M.NITEMCOUNT = OCCURS( ';', TCITEMS ) + 1 + DIMEN AITEMS[ m.nItemCount ] + M.NLASTPOS = 1 + + FOR m.X = 1 TO m.NITEMCOUNT + + IF m.X < m.NITEMCOUNT + + AITEMS[ m.x ] = SUBS( m.TCITEMS, m.NLASTPOS, ; + ( AT( ';', m.TCITEMS, m.X ) - 1 ) - m.NLASTPOS + 1 ) + ELSE + AITEMS[ m.x ] = SUBS( m.TCITEMS, m.NLASTPOS, ; + ( LEN( m.TCITEMS ) - m.NLASTPOS ) + 1 ) + ENDIF + + IF AITEMS[ m.x ] # "\-" + + AITEMS[ m.x ] = ALLT( AITEMS[ m.x ] ) + ENDIF + + M.NLASTPOS=AT( ';', m.TCITEMS, m.X ) + 1 + NEXT + + * Calculates the mouse pointer position + * + M.NROW = IIF( MROW() + m.NITEMCOUNT < SROW(), MROW() - 1, SROW() - m.NITEMCOUNT ) + M.NCOL = IIF( MCOL() + 10 < SCOL(), MCOL() - 3, MCOL() - 13 ) + + * Gets an unique name for the pop-up + * + M.CPOPMENU = 'M' + SYS(3) + "_" + +DEFINE POPUP ( m.CPOPMENU ) SHORTCUT RELATIVE FROM NROW, NCOL + +FOR m.X = 1 TO m.NITEMCOUNT + +DEFINE BAR m.X OF ( m.CPOPMENU ) PROMPT AITEMS[ m.x ] +NEXT + +M.CANS = "" +M.NSELECT = 0 +CLEAR TYPE + +ON SELECTION POPUP ( m.CPOPMENU ) DO GETCHOICE + +ACTIVATE POPUP ( m.CPOPMENU ) BAR TNBAR + +POP KEY +RELEASE POPUP ( m.CPOPMENU ) + +RETURN IIF( LASTKEY()=27, 0, m.NSELECT ) + +ENDPROC && XMENU + +*-------------------- + PROCEDURE GETCHOICE + + M.NSELECT = BAR() + + DEACTIVATE POPUP ( m.CPOPMENU ) + + RETURN +&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& MENIU &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& + +*--------------------------------------------------------------------------------- +*** compara 2 tabele ca structura si ca tag-uri de indexare +FUNCTION compara_tabele +PARAMETERS tcAliasC,tcFisS + +lcExact=SET("Exact") +SET EXACT ON +*** tcAliasC = Alias-ul tabelului comparat ; trebuie sa fie deschis +*** tcFisS = calea completa catre fisierul standard + +LOCAL lnOK,lnFileSDoesntexist,lnDifferentColumnCount,lnDifferentColumns,lnDifferentTags + +lnOK = 0 +lnFileSDoesntexist = 1 +lnDifferentColumns = 2 +lnDifferentTags = 3 + +PRIVATE lcOldAlias +lcOldAlias=ALIAS() +IF EMPTY(lcOldAlias) + lcOldAlias=SELECT(0) +ENDIF + +lcAliasC=ALLTRIM(tcAliasC) +lcFisS=ALLTRIM(tcFisS) + +IF !FILE('&lcFisS') + SELECT (lcOldAlias) + RETURN lnFileSDoesntexist +ENDIF + + +USE ('&lcFisS') IN 0 SHARED ALIAS FisierSursa + + +*** verific numarul de coloane +SELECT (lcAliasC) +lnnrcolC=FCOUNT() +lnNrTagC=TAGCOUNT() + +SELECT FisierSursa +lnNrColS=FCOUNT() +lnNrTagS=TAGCOUNT() + +IF lnNrcolC!=lnNrcolS + USE IN FisierSursa + RETURN lnDifferentColumns +ENDIF + +*** verific daca am aceleasi coloane + +SELECT FisierSursa +FOR i=1 TO lnNrColS + + lcFieldName=FIELD(i) + lcFieldTypeS=TYPE(lcFieldName) + lcFieldC=lcAliasC+"."+lcFieldName + lcFieldTypeC=TYPE(lcFieldC) + + lnSizeS = FSIZE(lcFieldName) + lnSizeC = FSIZE(lcFieldName,lcAliasC) + + IF lcFieldTypeC="U" OR lcFieldTypeC!=lcFieldTypeS OR lnSizeS!=lnSizeC&& nu exista campul sau exista dar au tipuri diferite sau au dimensiune diferita + USE IN FisierSursa + SELECT (lcOldAlias) + RETURN lnDifferentColumns + ENDIF + + SELECT FisierSursa +ENDFOR + +*** verific daca am acelasi nr de taguri +IF lnNrTagC!=lnNrTagS + USE IN FisierSursa + SELECT (lcOldAlias) + RETURN lnDifferentTags +ENDIF + +*** verific daca am aceleasi taguri +SELECT FisierSursa +FOR i=1 TO lnNrTagS + lcTagS=TAG(i) + + SELECT (lcAliasC) + lcTagC=TAG(i) + IF lcTagC!=lcTagS + USE IN FisierSursa + SELECT (lcOldAlias) + RETURN lnDifferentTags + ENDIF + SELECT FisierSursa +ENDFOR + + +USE IN FisierSursa +SELECT (lcOldAlias) +RETURN lnOK + + +ENDPROC && compara_tabele + +***---------------------------------------------------------------- +*!* get_text("parteneri","id","partener",id_partD) +FUNCTION get_text +PARAMETERS tcAlias1,tcField1,tcField2,tcField3 + +PRIVATE lcOldAlias,lcField3,lcret +lcRet="" +lcoldalias=ALIAS() +*!* IF !EMPTY(tcAlias2) +*!* SELECT (tcalias2) +*!* ENDIF +lcfield3=tcfield3 +*WAIT WINDOW tcfield3+STR(lcfield3) +SELECT (tcAlias1) +*LOCATE FOR &tcField1=lcField3 +IF SEEK(lcfield3,tcalias1,tcField1) + lcret=&tcField2 +ENDIF +SELECT (lcOldAlias) +RETURN lcRet + +ENDFUNC && get_text + +*----------------------------------- + + +PROCEDURE lista2array +PARAMETERS tcLISTA,taArray,tcSeparator +&& tcLista este un sir de caractere care contine elementele separate prin <;> default +&& tarray este vectorul care se completeaza - trebuie dat prin referinta +&& tcSeparator separatorul de elemente din tcLista - default este ";" - este optional +&& intoarce numarul de elemente gasite + +&& ex: lnNr = lista2array("ana;are;mere",@alista,";") +EXTERNAL ARRAY taArray + LOCAL Lclista,lcSeparator,lnNRF,lcF1,i + + lnNRF = 0 + + lcLista=ALLT(tcLISTA) + IF PARAMETERS()<3 OR EMPTY(tcSeparator) + lcSeparator=";" + ELSE + lcSeparator=ALLTRIM(tcSeparator) + ENDIF + + IF RIGHT(Lclista,1)!=lcSeparator + Lclista=Lclista+lcSeparator + ENDIF + + lnNRF=OCCURS(lcSeparator,lcLista) + + IF lnNRF>0 + DIMENSION taArray[lnNrf,1] + + FOR i=1 TO lnNRF + lcF1=LEFT(lcLista,AT(lcSeparator,lcLista)-1) + + IF i!=lnNRF + lcLista=SUBSTR(lcLista,AT(lcSeparator,lcLista)+1) + ENDIF + + taArray[i]=lcF1 + ENDFOR + ELSE + lnNRF = 0 + ENDIF + + RETURN lnNrf + +ENDPROC && lista2array + +***------------------------------------------------------------------------------------------- +PROCEDURE cursor2lista + LPARAMETERS tcCursor, tcColumn,tcSeparator, tcFilter + && tcCursor - cursor + && tcColumn - coloana din cursor care va constitui lista + && tcSeparator separatorul de elemente din tcLista - default este ";" - este optional + && tcFilter - optional = filtru pentru tabel + && intoarce lista de valori separate prin separatori + && ex: lcLista = cursor2lista("cursor","id",";") + + LOCAL lclista,lcSeparator, lcSelect, lcFilter + + lcLista = "" + lcSeparator = IIF(!EMPTY(tcSeparator) and TYPE('tcSeparator') = 'C', tcSeparator, ";") + lcFilter = IIF(EMPTY(m.tcFilter), '.T.', m.tcFilter) + IF USED(tcCursor) + lcSelect = SELECT() + lcColumn = tcCursor + "." + tcColumn + IF TYPE(lcColumn) # 'U' + SELECT * FROM (tcCursor) INTO CURSOR crsListaTemp + + SELECT crsListaTemp + SCAN FOR &lcFilter + lcLista = lcLista + ALLTRIM(TRANSFORM(EVALUATE(tcColumn))) + lcSeparator + ENDSCAN + USE IN crsListaTemp + + IF !EMPTY(lcLista) + lcLista = LEFT(lcLista, LEN(lcLista) - 1) + ENDIF + ENDIF + + + SELECT (lcSelect) + ENDIF + + RETURN lcLista + +ENDPROC && cursor2lista + +***------------------------------------------------------------------------------------------- +*** Creeaza o lista dintr-un cursor, la coloane de tip caracter, incadreaza itemii cu apostrof +PROCEDURE cursor2listac + LPARAMETERS tcCursor, tcColumn,tcSeparator, tcFilter + && tcCursor - cursor + && tcColumn - coloana din cursor care va constitui lista + && tcSeparator separatorul de elemente din tcLista - default este ";" - este optional + && tcFilter - optional = filtru pentru tabel + && intoarce lista de valori separate prin separatori + && ex: lcLista = cursor2lista("cursor","id",";") + + LOCAL lclista,lcSeparator, lcSelect, lcFilter, llChar + + lcLista = "" + lcSeparator = IIF(!EMPTY(tcSeparator) and TYPE('tcSeparator') = 'C', tcSeparator, ";") + lcFilter = IIF(EMPTY(m.tcFilter), '.T.', m.tcFilter) + IF USED(tcCursor) + lcSelect = SELECT() + lcColumn = tcCursor + "." + tcColumn + llChar = (TYPE(lcColumn) = 'C') + IF TYPE(lcColumn) # 'U' + SELECT * FROM (tcCursor) INTO CURSOR crsListaTemp + + SELECT crsListaTemp + SCAN FOR &lcFilter + lcLista = m.lcLista + IIF(m.llChar, ['], []) + ALLTRIM(TRANSFORM(EVALUATE(tcColumn))) + IIF(m.llChar, ['], []) + m.lcSeparator + ENDSCAN + USE IN crsListaTemp + + IF !EMPTY(lcLista) + lcLista = LEFT(lcLista, LEN(lcLista) - 1) + ENDIF + ENDIF + + + SELECT (lcSelect) + ENDIF + + RETURN lcLista + +ENDPROC && cursor2listac + +***------------------------------------------------------------------------------------------- +PROCEDURE get_mask +PARAMETERS tnint, tndec + +LOCAL lnint, lndec +lnint = tnint +lndec = tndec +lnrest = MOD(lnint,3) + +lcString = REPLICATE("9",lnrest) +lnint_ramas = lnint - lnrest +DO WHILE lnint_ramas > 0 +lcString = lcString + " "+ REPLICATE("9",3) +lnint_ramas = lnint_ramas - 3 +ENDDO +IF lndec > 0 +lcString = lcString +"."+REPLICATE("9",tndec) +ENDIF + +RETURN lcString + +ENDPROC && get_mask +***----------------------------------------------------------- + + +******************************************************************* +* PROCEDURE Get_Version( ) +* Date : 17/11/2004, 16:34:20 +* author : marius.mutu +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* INCEPUT:Get_Version ******************************************* +PROCEDURE Get_Version(tlNoRevision,tlInfo,tcFileName) + LOCAL laVersion,lcVersion,lcFileName + + *-- Get Version Information + *-- Added 4-1-98 BDC + LOCAL lcVersionText, lcFileName,llNoRevision,llInfo + + DIMENSION aVersion(12) + + IF EMPTY(tcFileName) + lcFileName = SYS(16,0) + ELSE + lcFileName = tcFileName + ENDIF + llNoRevision = tlNoRevision + llInfo = tlInfo + + + + *** EGL: 2002.1.2 17:06 - switched to AGETFILEVERSION(). + IF VAL(SUBSTR(VERSION(), 15)) >= 6 + * The AGETFILEVERSION() function was introduced in VFP 6 + + *!* DECLARE STRING GetCommandLine IN Kernel32 + *!* lcFileName = GetCommandLine() + lcVersionText = "" + + *!* IF GetFileVersion(&lcFileName,@aVersion) = 0 + IF AGETFILEVERSION(aVersion, lcFileName) > 0 + IF !llInfo + * daca vreau doar numarul versiunii + lcVersion = ALLT(aVersion(4)) + IF llNoRevision + * daca nu vreau si revizia + lnPos = RAT('.',lcVersion,1) + ELSE + lnPos = LEN(lcVersion) + ENDIF + lcVersionText = LEFT(lcVersion,lnPos) + ELSE + * vreau toata informatia despre fisier + IF NOT EMPTY(aVersion(1)) + lcVersionText = ALLT(aVersion(1)) + ENDIF + + IF NOT EMPTY(aVersion(2)) + lcVersionText = lcVersionText+CHR(10)+"Produs de: "+ ALLT(aVersion(2)) + ENDIF + + IF NOT EMPTY(aVersion(3)) + lcVersionText = lcVersionText+CHR(10)+"Descriere: "+ ALLT(aVersion(3)) + ENDIF + + IF NOT EMPTY(aVersion(4)) + lcVersionText = lcVersionText+CHR(10)+"Versiune fisier: "+ ALLT(aVersion(4)) + ENDIF + + IF NOT EMPTY(aVersion(5)) + lcVersionText = lcVersionText+CHR(10)+"Nume intern: "+ ALLT(aVersion(5)) + ENDIF + + IF NOT EMPTY(aVersion(6)) + lcVersionText = lcVersionText+CHR(10)+"Copyright: "+ ALLT(aVersion(6)) + ENDIF + + IF NOT EMPTY(aVersion(7)) + lcVersionText = lcVersionText+CHR(10)+"Marca inregistrata: "+ ALLT(aVersion(7)) + ENDIF + + IF NOT EMPTY(aVersion(8)) + lcVersionText = lcVersionText+CHR(10)+"Nume fisier: "+ ALLT(aVersion(8)) + ENDIF + + IF NOT EMPTY(aVersion(9)) + lcVersionText = lcVersionText+CHR(10)+"Private Build: "+ ALLT(aVersion(9)) + ENDIF + + IF NOT EMPTY(aVersion(10)) + lcVersionText = lcVersionText+CHR(10)+"Nume produs: "+ ALLT(aVersion(10)) + ENDIF + + IF NOT EMPTY(aVersion(11)) + lcVersionText = lcVersionText+CHR(10)+"Versiune produs: "+ ALLT(aVersion(11)) + ENDIF + + IF NOT EMPTY(aVersion(12)) + lcVersionText = lcVersionText+CHR(10)+"Special Build: "+ ALLT(aVersion(12)) + ENDIF + + IF EMPTY(lcVersionText) + lcVersionText = "" + ENDIF + ENDIF + ELSE + + lcVersionText = "" + + ENDIF + + ELSE + lcVersionText = "" + ENDIF + RETURN lcVersionText + +ENDPROC +******************************************* SFARSIT: Get_Version ******************************************* + + +* PROCEDURE Get_Hexa( tnDeca ) +* Date : 18/11/2004, 17:56:48 +* author : marius.mutu +* description: transforma un Deca in Hexa + +****** PARAMETER BLOCK ************** +* Parameters : 1 +* Parameter 1: Numarul in Deca +* +******************************************* INCEPUT:Get_Hexa ******************************************* +PROCEDURE Get_Hexa( tnDeca ) + LOCAL laHexa,lnHexa,lnDeca + + + IF EMPTY(tnDeca) + lnDeca = 0 + ELSE + lnDeca = tnDeca + ENDIF + + DIMENSION laHexa[16] + laHexa[1] = '0' + laHexa[2] = '1' + laHexa[3] = '2' + laHexa[4] = '3' + laHexa[5] = '4' + laHexa[6] = '5' + laHexa[7] = '6' + laHexa[8] = '7' + laHexa[9] = '8' + laHexa[10] = '9' + laHexa[11] = 'A' + laHexa[12] = 'B' + laHexa[13] = 'C' + laHexa[14] = 'D' + laHexa[15] = 'E' + laHexa[16] = 'F' + + lnHexa = '' + + DO WHILE lnDeca > 0 + lnRest = MOD(lnDeca,16) + lcHexa = laHexa[lnRest+1] + lnDeca = INT(lnDeca/16) + + lnHexa = lcHexa + lnHexa + lnRest = MOD(lnDeca,16) + + ENDDO + + RETURN lnHexa + +ENDPROC +******************************************* SFARSIT: Get_Hexa ******************************************* +&& completeaza cu spatii si CRLF un mesaj a.i. pe fiecare linie sa fie lnLength caractere +Function format_msg +Parameters tcErrMsg,tnLength +Local lnLength,lcLinie,lcMesaj,lnPoz,lnCate,i,j +lcMesaj="" +If Empty(tnLength) + lnLength=50 && numarul de caractere pe linie +Else + lnLength=tnLength +Endif +i=1 +If At(Chr(13)+Chr(10),tcErrMsg,i)>0 + lnCate=At(Chr(13)+Chr(10),tcErrMsg,i)+1 + i=i+1 +Else + lnCate=Min(lnLength,Rat(' ',Substr(tcErrMsg,1,lnLength))-1) +Endif +lnPoz=1 +*!* lcLinie=Substr(tcErrMsg,1,lnCate) + +Do While lnPoz0 + lnCate=At(Chr(13)+Chr(10),tcErrMsg,i)+2-lnPoz + i=i+1 + Else + lcNextChar=Substr(tcErrMsg,lnPoz+lnLength,1) + lcLinieNoua=Substr(tcErrMsg,lnPoz,lnLength) + If lcNextChar!=' ' And Len(lcLinieNoua)>=lnLength + lnCate=Min(lnLength,Rat(' ',lcLinieNoua)-1) + Else + lnCate=lnLength + Endif + Endif +Enddo +Return lcMesaj +Endfunc && format_msg +***--------------------------------------------------------------------------------------------- +PROCEDURE C_LUNA + PARAMETERS tnnrluna + DO CASE + CASE tnnrluna=1 + RETURN "IANUARIE" + CASE tnnrluna=2 + RETURN "FEBRUARIE" + CASE tnnrluna=3 + RETURN "MARTIE" + CASE tnnrluna=4 + RETURN "APRILIE" + CASE tnnrluna=5 + RETURN "MAI" + CASE tnnrluna=6 + RETURN "IUNIE" + CASE tnnrluna=7 + RETURN "IULIE" + CASE tnnrluna=8 + RETURN "AUGUST" + CASE tnnrluna=9 + RETURN "SEPTEMBRIE" + CASE tnnrluna=10 + RETURN "OCTOMBRIE" + CASE tnnrluna=11 + RETURN "NOIEMBRIE" + CASE tnnrluna=12 + RETURN "DECEMBRIE" + OTHERWISE + RETURN "" + ENDCASE + ENDPROC &&c_luna +***-------------------------------------------------------------------------------------- +***-------------------------------------------------------------------------------------- + PROCEDURE CLUNA3 + PARAMETERS tnnrluna + DO CASE + CASE tnnrluna=1 + RETURN "Ian" + CASE tnnrluna=2 + RETURN "Feb" + CASE tnnrluna=3 + RETURN "Mar" + CASE tnnrluna=4 + RETURN "Apr" + CASE tnnrluna=5 + RETURN "Mai" + CASE tnnrluna=6 + RETURN "Iun" + CASE tnnrluna=7 + RETURN "Iul" + CASE tnnrluna=8 + RETURN "Aug" + CASE tnnrluna=9 + RETURN "Sep" + CASE tnnrluna=10 + RETURN "Oct" + CASE tnnrluna=11 + RETURN "Noi" + CASE tnnrluna=12 + RETURN "Dec" + OTHERWISE + RETURN SPACE(3) + ENDCASE + ENDPROC &&cluna3 +***-------------------------------------------------------------------------------------- +***------------------------------------------------------------------------------------ +Procedure cluna +Parameters tcGrup,tcTipCumul,tcAn + +lcTipCumul=Upper(Alltrim(tcTipCumul)) +lcan=Alltrim(tcAn) +lcgrup=Alltrim(tcGrup) +lnGrup=Val(lcgrup) +Do Case +Case lcTipCumul="T" + lcret="Trim. "+lcgrup+" "+lcan +Case lcTipCumul="S" + lcret="Sem. "+lcgrup+" "+lcan +Case lcTipCumul="A" + lcret="Anul "+lcan +Otherwise + Do Case + Case lnGrup=1 + lcret="Ian "+lcan + Case lnGrup=2 + lcret="Feb "+lcan + Case lnGrup=3 + lcret="Mar "+lcan + Case lnGrup=4 + lcret="Apr "+lcan + Case lnGrup=5 + lcret="Mai "+lcan + Case lnGrup=6 + lcret="Iun "+lcan + Case lnGrup=7 + lcret="Iul "+lcan + Case lnGrup=8 + lcret="Aug "+lcan + Case lnGrup=9 + lcret="Sep "+lcan + Case lnGrup=10 + lcret="Oct "+lcan + Case lnGrup=11 + lcret="Noi "+lcan + Case lnGrup=12 + lcret="Dec "+lcan + Otherwise + lcret=lcan + Endcase +Endcase +Return lcret +Endproc &&cluna +***------------------------------------------------------------------------------------ +***------------------------------------------------------------------------------------ +PROCEDURE get_trimestru +PARAMETERS tnNrTrim + DO CASE + CASE tnNrTrim = 1 + RETURN "Trim. I" + CASE tnNrTrim = 2 + RETURN "Trim. II" + CASE tnNrTrim = 3 + RETURN "Trim. III" + CASE tnNrTrim = 4 + RETURN "Trim. IV" + OTHERWISE + RETURN SPACE(7) + ENDCASE + ENDPROC && get_trimestru +***-------------------------------------------------------------------------------------- +PROCEDURE get_semestru +PARAMETERS tnNrSem + DO CASE + CASE tnNrSem = 1 + RETURN "Sem. I" + CASE tnNrSem = 2 + RETURN "Sem. II" + OTHERWISE + RETURN SPACE(7) + ENDCASE + ENDPROC && get_semestru +***-------------------------------------------------------------------------------------- +FUNCTION Lista_Campuri + LPARAMETERS tcCursorSource, tcCursorDest + + LOCAL lcSelect, i, lcAlias, lcLista + lcLista = [] + lcSelect = SELECT() + lcAlias = m.tcCursorSource + + SELECT (lcAlias) + lnFields = FCOUNT() + FOR i = 1 TO lnFields + lcField = FIELD(i) + * lista doar cu campurile comune + IF !EMPTY(m.tcCursorDest) AND TYPE(m.tcCursorDest + '.' + m.lcField) = 'U' + LOOP + ENDIF + lcLista = m.lcLista + [,] + m.lcField + ENDFOR + IF !EMPTY(m.lcLista) + lcLista = SUBSTR(m.lcLista,2) + ENDIF + + SELECT (m.lcSelect) + RETURN m.lcLista + +ENDFUNC && Lista_Campuri +***---------------------------------------- + +PROCEDURE GETCALLSTACK + local nPos + nPos=program(-1) - 2 + + + local cCallStack,i + cCallStack="" + for i=nPos to 1 step -1 + cCallStack=cCallStack + program(i) + chr(13)+chr(10) + endfor + + + return cCallStack + +ENDPROC && GETCALLSTACK +***------------------------------------------------------ + +PROCEDURE findCriteriu +PARAMETERS tacriterii,nCriteriu +EXTERNAL ARRAY tacriterii + +FOR n = 1 TO ALEN(tacriterii,0) + IF tacriterii(n,6)=nCriteriu + lnNumar=n + ENDIF +ENDFOR + RETURN lnNumar +ENDPROC + + + +#IF .F. + *!* VERIFICARE CloneObj + Local loRecS, loRecD + Local loRecS As Custom + loRecS = Createobject("custom") + loRecS.Tag = 'TEST S' + + loRecD = CloneObj(loRecS) + loRecD.Tag = 'TEST D' + + Messagebox(loRecS.Tag + ' ' + loRecD.Tag) + + *!* VERIFICARE CopyProps + loRecS = Createobject("empty") + ADDPROPERTY(loRecS,"myProperty", "CUSTOMPROPERTY") + + loRecD = Createobject("custom") + loRecD.Tag = 'TAG D' + ADDPROPERTY(loRecD,"myProperty", "") + + + CopyProps (loRecS, loRecD, .F.) + Messagebox(loRecD.Tag + ' ' + loRecD.myProperty) +#ENDIF + +*!* COPIAZA PROPRIETATILE UNUI OBIECT SURSA IN OBIECTUL DESTINATIE +*!* OBIECTUL SURSA ESTE CREAT +*!* NU COPIAZA PROPRIETATILE/VALORILE DE TIP OBIECT (EX: COLLECTION) +Procedure CloneObj (toSource) + Local laProps[1],lnPropCount,loDest,i, lcProperty, luValue + Local loEx As Exception + + If Type('toSource.Class')='C' And Type('toSource.ClassLibrary')='C' + loDest = Newobject(toSource.Class,toSource.ClassLibrary) + Else + loDest = Createobject('EMPTY') + Endif + + lnPropCount = Amembers(laProps,toSource,0) + For i = 1 To m.lnPropCount + lcProperty = laProps[m.i] + luValue = Null + + Try + luValue = Getpem(toSource, lcProperty) + Catch To loEx When loEx.ErrorNo = 1924 && "name" is not an object (Error 1924) + * + Endtry + If !Pemstatus(loDest, lcProperty, 5) + AddProperty(loDest, lcProperty, luValue) + Else + Try + loDest.&lcProperty = luValue + Catch To loEx When loEx.ErrorNo = 1743 && Property "name" is read-only (Error 1743) + * + Endtry + Endif + Endfor + + Return loDest +ENDPROC && CloneObj + +*!* COPIAZA PROPRIETATILE UNUI OBIECT SURSA IN OBIECTUL DESTINATIE +*!* tlAddProperty : T daca se adauga proprietatile noi din sursa in destinatie, .F. se copie doar proprietatile existente (Default .F.) +Procedure CopyProps (toSource, toDest, tlAddProperty) + Local laProps[1],lnPropCount,loDest,i, lcProperty, luValue + Local loEx As Exception + LOCAL llAddProperty + + IF TYPE('toSource') <> 'O' OR TYPE('toDest') <> 'O' + RETURN + ENDIF + + IF PCOUNT() < 3 OR TYPE('tlAddProperty') <> 'L' + llAddProperty = .F. + ELSE + llAddProperty = tlAddProperty + ENDIF + + lnPropCount = Amembers(laProps,toSource, 0) + For i = 1 To m.lnPropCount + lcProperty = laProps[m.i] + luValue = Null + + Try + luValue = Getpem(toSource, lcProperty) + Catch To loEx When loEx.ErrorNo = 1924 && "name" is not an object (Error 1924) + LOOP && NU MAI SETEZ PROPRIETATEA DACA IMI DA EROARE + ENDTRY + + If !Pemstatus(toDest, lcProperty, 5) + IF llAddProperty + AddProperty(toDest, lcProperty, luValue) + ENDIF + Else + Try + toDest.&lcProperty = luValue + Catch To loEx When loEx.ErrorNo = 1743 && Property "name" is read-only (Error 1743) + * + Endtry + Endif + Endfor +ENDPROC && CopyProps + +PROCEDURE debug_start_eventtracking + LOCAL lcDebug_eventlog + lcDebug_eventlog = gcAppPath + FORCEEXT("event_" + TTOC(DATETIME(),1),"log") + + + *-- load the events to track + SET EVENTLIST TO AfterRowColChange,; + BeforeRowColChange,; + Click,; + DblClick,; + Delete,; + Deleted,; + Destroy,; + Error,; + ErrorMessage,; + GotFocus,; + Init,; + InteractiveChange,; + keyPress,; + Load,; + LostFocus,; + ProgrammaticChange,; + Valid,; + When + + SET EVENTTRACKING TO (lcDebug_eventlog) + SET EVENTTRACKING ON + +ENDPROC && debug_start_eventtracking + +PROCEDURE debug_end_eventtracking + SET EVENTTRACKING TO && Closes the log file! + SET EVENTTRACKING OFF +ENDPROC && debug_end_eventtracking diff --git a/COMUN/programe/proceduri_excel.prg b/COMUN/programe/proceduri_excel.prg new file mode 100644 index 0000000..05c6fc1 --- /dev/null +++ b/COMUN/programe/proceduri_excel.prg @@ -0,0 +1,358 @@ +***----------------------------------------------------------- +Procedure get_excel_mask + Lparameters tcInputMask + Local lnint, lndec, lcInputMask + lcInputMask=Strtran(tcInputMask,' ','') + lnint = Iif(At('.',lcInputMask,1)>0,At('.',lcInputMask,1)-1,Len(lcInputMask)) + lndec = Iif(Rat('.',lcInputMask,1)>0,Len(lcInputMask)-Rat('.',lcInputMask,1),0) + lnrest = Mod(lnint,3) + + lcString = Replicate("#",lnrest) + lnint_ramas = lnint - lnrest + Do While lnint_ramas > 0 + lcString = lcString + " " + Replicate("#",3) + lnint_ramas = lnint_ramas - 3 + Enddo + lcString=Substr(lcString,1,Len(lcString)-1)+"0" + If lndec > 0 + lcString = lcString +"."+Replicate("0",lndec) + Endif + + Return lcString + +Endproc && get_excel_mask +***----------------------------------------------------------- +Procedure export_excel + Lparameters toGrid,tcTitlu,tcCursor + Local loXLSheet,loXLApp,poExcel + Local i,k,lnCol,lnRow,lnColumn,lnObjCol + Local lcCursor,lcNume,lcSirNume,lcSirColoane,lcInputMask + Local llexista_Excel,llexista_invizibile + + Store '' To lcSirNume,lcSirColoane,lcInputMask + Store .T. To llexista_Excel + + If Empty(tcCursor) + lcCursor=toGrid.RecordSource + Else + lcCursor=tcCursor + Endif + + k=0 + With toGrid + For i=1 To .ColumnCount + lnCol=1 + Do While i!=.Columns(lnCol).ColumnOrder + lnCol=lnCol+1 + Enddo + lnColumn=.Columns(lnCol).ColumnOrder + If .Columns(lnCol).Visible + lcSirColoane=lcSirColoane+.Columns(lnCol).ControlSource+',' + For lnObjCol=1 To .Columns(lnCol).Objects.Count + If Upper(.Columns(lnCol).Objects(lnObjCol).BaseClass)='HEADER' + lcNume=.Columns(lnCol).Objects(lnObjCol).Caption + lcSirNume=lcSirNume+Strtran(Strtran(lcNume,Chr(32),'_'),'.','_')+',' + Exit + Endif + Endfor + Else + k=k+1 + Endif + Endfor + lcSirColoane=Substr(lcSirColoane,1,Len(lcSirColoane)-1) + lcSirNume=Substr(lcSirNume,1,Len(lcSirNume)-1) + Endwith + + Try + *!* On Error Do exportare With lcCursor,lcSirColoane,lcSirNume + loXLSheet = Getobject('','excel.sheet') + *!* On Error + llexista_invizibile=.F. + *!* If llexista_Excel + Wait Window "Se transmit datele catre Excel..." Nowait + + If k>0 + Dimension laInvizibile(k) + llexista_invizibile=.T. + Endif + + loXLApp = loXLSheet.Application + + loXLApp.workbooks.Close() + loXLApp.workbooks.Add() + poExcel = loXLApp.ActiveSheet + + Select &lcCursor + Go Top + poExcel.Cells(1,1).Font.Size=16 + poExcel.Cells(1,1).Font.Bold=.T. + poExcel.Cells(1,1)=tcTitlu+" Luna "+Alltrim(Str(gnLuna))+"/"+Alltrim(Str(gnAn)) + lnRow = 3 + k=1 + With toGrid + For lnCol = 1 To .ColumnCount + lnColumn = .Columns(lnCol).ColumnOrder + If .Columns(lnCol).Visible + poExcel.Columns(lnColumn).ColumnWidth = .Columns(lnCol).Width/5 + lcInputMask=.Columns(lnCol).InputMask + If At('9',lcInputMask)>0 + poExcel.Columns(Chr(64+lnColumn)).EntireColumn.NumberFormat=get_excel_mask(lcInputMask) + Endif + For lnObjCol=1 To .Columns(lnCol).Objects.Count + If Upper(.Columns(lnCol).Objects(lnObjCol).BaseClass)='HEADER' + poExcel.Cells(lnRow,lnColumn) = .Columns(lnCol).Objects(lnObjCol).Caption + Exit + Endif + Endfor + poExcel.Cells(lnRow,lnColumn).Font.Bold = .T. + poExcel.Cells(lnRow,lnColumn).Interior.ColorIndex = 16 + Else + laInvizibile(k)=lnColumn + k=k+1 + Endif + Endfor + + Select &lcCursor + Scan + lnRow = lnRow + 1 + For lnCol = 1 To .ColumnCount + If .Columns(lnCol).Visible + lnColumn = .Columns(lnCol).ColumnOrder + If At('CHECK',Upper(.Columns(lnCol).CurrentControl))>0 + poExcel.Cells(lnRow,lnColumn)=Iif(Eval(.Columns(lnCol).ControlSource)==0,'NU','DA') + Else + poExcel.Cells(lnRow,lnColumn) = Iif(Isnull(Eval(.Columns(lnCol).ControlSource)),'',Eval(.Columns(lnCol).ControlSource)) + Endif + Endif + Endfor + Endscan + + If llexista_invizibile + Asort(laInvizibile) + For i = 1 To Alen(laInvizibile) + poExcel.Columns(Chr(65+laInvizibile(i)-i)).Delete + Endfor + Endif + Endwith + + loXLApp.Visible = .T. + *!* Endif + Catch + Do exportare With lcCursor,lcSirColoane,lcSirNume + Finally + + Endtry + + +Endproc && export_excel +***----------------------------------------------------------- +Procedure exportare + Lparameters tabel, Initial, Final + Local nrc, i, c + Store 0 To nrc, i + Store '' To c + + A='C:\MY DOCUMENTS' + B='C:\DOCUMENTS AND SETTINGS' + Do Case + Case Directory('&A') + Set Default To '&A' + Case Directory('&B') + Set Default To '&B' + Otherwise + Md &A + Set Default To '&A' + Endcase + + exista_excel=.F. + + Initial = ','+Initial+',' &&Pentru a recunoaste coloanele' +Final = ','+Final+',' &&---||--- + + nrc = Occurs(',', '&initial') + nrc=nrc-1 && scade virgula din fata + + Local Array c_initial(nrc) + Local Array c_final(nrc) + + For i = 1 To nrc + N = At(',', '&initial', i) + n2 =At(',', '&initial', i+1) + c_initial[i] = Substr('&initial', N+1, n2-N-1) + N = At(',', '&final', i) + n2 =At(',', '&final', i+1) + c_final[i] = Substr('&final', N+1, n2-N-1) + Endfor + + For i=1 To nrc + If i=nrc + c=c+c_initial[i]+' as '+c_final[i] + Else + c=c+c_initial[i]+' as '+c_final[i]+',' + Endif + Endfor + + calea_fis = Putfile('Nume fisier:', 'Foaie_Excel', 'XLS') + If Empty(calea_fis) && Esc pressed + Return + Endif + + If Used('crsexport') + Use In crsexport + Endif + + Select &tabel + lcFiltru=Filter() + + Select &c From &tabel Where &lcFiltru Into Cursor crsexport + Select crsexport + Export To (calea_fis) Type Xl5 + + Set Default To &DIRGEN + + Use In crsexport +Endproc + + + +*!* 12.05.2006 +*!* MARIUS MUTU +******************************************************************************************************** +Procedure export_excel_grid + Lparameters toGrid, tcOrder, tcWhere, tcTitlu + + If Type('toGrid') # 'O' + Return + Endif + + Local lcColumnList, lcHeaderList, lcSelect, llSelect, lcFrom, lcWhere, lcOrder, lcOutput + + lcFrom = toGrid.RecordSource + lcWhere = Iif(!Empty(tcWhere) And Type('tcWhere') = 'C', tcWhere, Filter(lcFrom)) + + lcColumnList = '' + lcHeaderList = '' + lcSelect = '' + llSelect = .T. + lcType = 'CURSOR' + lcOrder = Iif(Empty(tcOrder) Or Type('tcOrder') # 'C', "", tcOrder) + lcOutput = Sys(2015) + + get_schema_grid(toGrid,@lcColumnList, @lcHeaderList, @lcSelect, llSelect, lcType, lcFrom, lcWhere, lcOrder, lcOutput) + &lcSelect + + If Used(lcOutput) + Do export_xls With lcOutput, tcTitlu In oproceduri_comune.prg + Use In (lcOutput) + Endif + + +Endproc && export_excel_grid + +***------------------------------------------------------------------------------------------- +Procedure LIST_EXCEL + Param TTABEL,TTITLU,TAHEADER + + External Array TAHEADER + A='C:\MY DOCUMENTS' + B='C:\DOCUMENTS AND SETTINGS' + Do Case + Case Directory('&A') + Set Default To '&A' + Case Directory('&B') + Set Default To '&B' + Otherwise + Md &A + Set Default To '&A' + Endcase + lcNumeDirExcel = Putfile('Nume fisier:', 'Foaie_Excel', 'XLS') + If Empty(lcNumeDirExcel) && Esc pressed + Return + Endif + + + *!* lcNumeDirExcel = ADDBS(calefirma)+"Excel\" + *!* IF !DIRECTORY(lcNumeDirExcel) + *!* MD (lcNumeDirExcel) + *!* ENDIF + + *!* lcdata = STRTRAN(DTOC(DATETIME()),"/","_") + lcfis = lcNumeDirExcel +"LIST_"+Sys(2)+".XLS" + + + lcfis=Strtran(lcfis,'\\','\') + + Set Textmerge On To (lcfis) Noshow + LCANTET=Uppe(Allt(TTITLU))+crlf +\ +\\<> +\ + If Parameters()<3 + LCHEADER="" + Sele (TTABEL) + For i=1 To Fcount() + LCHEADER=LCHEADER+Upper(Allt(Field(i)))+Tab + Endfor + LCHEADER=LCHEADER+crlf +\\<> + + Sele (TTABEL) + Scan + LDATE="" + For i=1 To Fcount() + F=Field(i) + T=&F + LDATE=LDATE+Transform(T,Iif(Type(F)="N","999999999999999.99",''))+Tab + Endfor + LDATE=LDATE+crlf + \\<> + Endscan + Set Textmerge To + Else + LCHEADER="" + NRCOL=Alen(TAHEADER,1) + Sele (TTABEL) + For i=1 To NRCOL + + If Empty(TAHEADER[I,1]) + LCHEADER=LCHEADER+Upper(Allt(TAHEADER[I,2]))+Tab + Else + LCHEADER=LCHEADER+Upper(Allt(TAHEADER[I,1]))+Tab + Endif + + Endfor + LCHEADER=LCHEADER+crlf + +\\<> + + Sele (TTABEL) + Scan + LDATE="" + For i=1 To NRCOL + * F=Field(TAHEADER[I,2]) + F=TAHEADER[I,2] + * IF EXISTACAMP(,F) + T=&F + LDATE=LDATE+Alltrim(Transform(T,Iif(Type(F)="N","999999999999999.99",'')))+Tab + * ELSE + * LDATE=LDATE+" "+Tab + * ENDIF + Endfor + LDATE=LDATE+crlf + \\<> + Endscan + Set Textmerge To + Endif + * WAIT WINDOW "Se deschide Excel..." NOWAIT + + + + OEXCEL = Createobject("Excel.Application") + OEXCEL.workbooks.Open(lcfis) + OEXCEL.Visible=1 + *!* IF TYPE(OEXCEL)='0' + *!* OEXCEL="" + *!* ENDIF + +Endproc && list_excel +***------------------------------------------------------------------------------------------- diff --git a/COMUN/programe/proceduri_rapoarte.prg b/COMUN/programe/proceduri_rapoarte.prg new file mode 100644 index 0000000..ef747e3 --- /dev/null +++ b/COMUN/programe/proceduri_rapoarte.prg @@ -0,0 +1,315 @@ +*!* PROCEDURI_RAPOARTE.PRG +*!* 19.02.2009 marius.mutu +*!* LISTAREUSERREPORT - calea se citeste din goExport.GetRepPath + +*!* 23.01.2020 +*!* marius.mutu +*!* Salveaza un raport de pe disk in baza de date + +PROCEDURE LISTAREUSERREPORT_HASH + LPARAMETERS toHash + + LOCAL lcAlias, lcTipExport, lcRaport, loListener, lnPreview, lcImprimanta, lcCommandClauses + + lcAlias = toHash.GetValue("cAlias") + lcTipExport = toHash.GetValue("cTipExport") + lcRaport = toHash.GetValue("cRaport") + loListener = toHash.GetValue("oListener") + lnPreview = toHash.GetValue("nPreview") + lcImprimanta = toHash.GetValue("cImprimanta") + lcCommandClauses = toHash.GetValue("cCommandClauses") + IF EMPTY(lcTipExport) + lcTipExport = 'FRX' + ENDIF + IF EMPTY(lcAlias) + lcAlias = ALIAS() + ENDIF + + DO LISTAREUSERREPORT WITH lcAlias, lcTipExport, lcRaport, loListener, lnPreview, lcImprimanta, lcCommandClauses +ENDPROC && LISTAREUSERREPORT_HASH + + +*!* LISTARE RAPORT UTILIZATOR +*!* PARAMETRI : tcAlias - alias-ul cursorului; tcTipExport - FRX/XLS; tcRaport - numele raportului +*!* Se listeaza raportul USR_ din directorul \\SERVER\ROA\USERREPORTS\\\ daca exista +*!* Daca nu exista raporturl USR_ se listeaza raportul default +PROCEDURE LISTAREUSERREPORT + LPARAMETERS tcAlias, tcTipExport, tcRaport, toListener, tnPreview, tcImprimanta, tcCommandClauses + ** Valori pentru tnPreview + ** 1 - cu vizualizare + ** 2 - listare directa + ** tcCommandClauses: PROMPT PREVIEW NOEJECT NORESET + + LOCAL lcSelect, lcRaportPath, lcTipExport, lnPreview, lcImprimanta, lcCommandClauses + STORE [] TO lcImprimanta + + LOCAL loExport + IF TYPE('goExport') = 'U' + IF !'oexport'$LOWER(SET("Procedure")) + SET PROCEDURE TO oexport.prg ADDITIVE + ENDIF + loExport = Createobject("oExportConfig") + ELSE + loExport = goExport + ENDIF + + IF TYPE('tcCommandClauses') = 'C' + lcCommandClauses = tcCommandClauses + ELSE + lcCommandClauses = "" + ENDIF + + IF TYPE('tcTipExport') = 'C' + lcTipExport = UPPER(ALLTRIM(tcTipExport)) + ELSE + IF EMPTY(tcRaport) + lcTipExport = 'XLS' + ELSE + lcTipExport = 'FRX' + ENDIF + ENDIF + IF EMPTY(tcAlias) + RETURN + ENDIF + IF !USED(tcAlias) + RETURN + ENDIF + IF EMPTY(tnPreview) + lnPreview = 1 + ELSE + lnPreview = tnPreview + ENDIF + + DO CASE + CASE lcTipExport = 'FRX' + IF !EMPTY(tcImprimanta) + *!* verificare ca tcImprimanta este instalata pe calculatorul respectiv + IF APRINTERS(laPrinters) > 0 AND ASCAN(laPrinters,tcImprimanta,1,ALEN(laPrinters,1),1,15) > 0 + lcImprimanta = tcImprimanta + ENDIF + ENDIF + + RELEASE laPrinters + + lcRaportPath = loExport.GetRepPath(tcRaport) +*!* lcRaportPath = getUserRepPath() + [USR_] + JUSTSTEM(tcRaport) + [.FRX] + +*!* IF !FILE(lcRaportPath) +*!* lcRaportPath = tcRaport +*!* ENDIF + + lcSelect = SELECT() + IF !EMPTY(tcAlias) AND USED(tcAlias) + SELECT (tcAlias) + ENDIF + + lnRaspuns = 6 + DO WHILE lnRaspuns = 6 + TRY + IF TYPE('toListener') = 'O' + IF TYPE('gcReportOutput') = 'U' + PUBLIC gcReportOutput + gcReportOutput = "" + ENDIF + + IF EMPTY(gcReportOutput) + gcReportOutput = gcAppPath + "ReportOutput.app" + ENDIF + + IF TYPE('gcReportPreview') = 'U' + PUBLIC gcReportPreview + gcReportPreview = "" + ENDIF + + IF EMPTY(gcReportPreview) + gcReportPreview = gcAppPath + "ReportPreview.app" + IF !FILE(m.gcReportPreview) + AMESSAGEBOX('Nu exista fisierul ' + gcReportPreview, 0+48,_screen.Caption) + ENDIF + ENDIF + + _REPORTOUTPUT = gcReportOutput + _REPORTPREVIEW = gcReportPreview +* LCREPORT = 'REPORT FORM (' + lcRaportPath + ') OBJECT toListener ' + lcCommandClauses +* WAIT WINDOW LCREPORT + REPORT FORM (lcRaportPath) OBJECT toListener &lcCommandClauses + ELSE + IF lnPreview = 1 + KEYBOARD '{CTRL+F10}' + REPORT FORM (lcRaportPath) TO PRINTER PROMPT PREVIEW + ELSE + IF !EMPTY(lcImprimanta) + lcImprimantaTemp = SYS(6) + SET PRINTER TO NAME (lcImprimanta) + REPORT FORM (lcRaportPath) TO PRINTER + IF !EMPTY(NVL(lcImprimantaTemp,[])) + SET PRINTER TO (lcImprimantaTemp) + ELSE + SET PRINTER TO + ENDIF + ELSE + REPORT FORM (lcRaportPath) TO PRINTER PROMPT + ENDIF + ENDIF + ENDIF + lnRaspuns = 7 + CATCH TO oEroare + IF oEroare.MESSAGE='Error loading driver error.' + lnRaspuns = aMESSAGEBOX("Eroare la driverul imprimantei.Doriti sa reincercati listarea?",4+32+256,"Confirmare relistare") + ELSE + aMESSAGEBOX(oEroare.MESSAGE,16,"Eroare") + lnRaspuns = 7 + ENDIF + ENDTRY + ENDDO + + SELECT (lcSelect) + + CASE lcTipExport = 'XLS' + export_xls(tcAlias) + ENDCASE + + +ENDPROC && LISTAREUSERREPORT + +********************* INCEPUT Modifica_raport_utilizator ********************** +* PROCEDURE Modifica_raport_utilizator +* Date : 26.07.2006, 17:44:33 +* author : marius.mutu +PROCEDURE Modifica_raport_utilizator + + lcUserRepPath = getUserRepPath() + CD (lcUserRepPath) + lcFile = GETFILE("frx","Alegeti un raport","Alege") + IF FILE(lcFile) AND UPPER(JUSTEXT(lcFile)) = "FRX" + MODIFY REPORT (lcFile) + ENDIF + +ENDPROC && Modifica_raport_utilizator +********************* SFARSIT Modifica_raport_utilizator ********************** + +*!* INTOARCE DIRECTORUL CU RAPOARTE UTILIZATOR PENTRU APLICATIA, SCHEMA CURENTA +FUNCTION getUserRepPath + LOCAL lcAppPath, lcAppName, liAt, lcDirgen, lcUserRepPath + *!* lcAppPath=ADDBS(JUSTPATH(SYS(16,0))) + lcAppPath = gcAppPath + lcAppName=ALLT(UPPE(JUSTSTEM(SYS(16,0)))) + liAt=RAT("\",lcAppPath,2) + lcDirgen=ADDBS(LEFT(lcAppPath,liAt-1)) + lcUserRepPath = lcDirgen + 'USERREPORTS\' + IF !DIRECTORY(lcUserRepPath) + MD (lcUserRepPath) + ENDIF + lcUserRepPath = lcUserRepPath + gcS + '\' + IF !DIRECTORY(lcUserRepPath) + MD (lcUserRepPath) + ENDIF + lcUserRepPath = lcUserRepPath + lcAppName + '\' + IF !DIRECTORY(lcUserRepPath) + MD (lcUserRepPath) + ENDIF + + RETURN lcUserRepPath + +ENDFUNC + +**************************************************************************** +*!* extrage frx din executabil pe disc in directorul USERREPORTS +PROCEDURE UserReport2File + LPARAMETERS tcRaport + + LOCAL lcRaport, lcFile + IF EMPTY(tcRaport) + lcRaport= INPUTBOX("Raport","Scrieti numele raportului","raport.frx") + ELSE + lcRaport = tcRaport + ENDIF + + IF EMPTY(lcRaport) + RETURN + ENDIF + + LOCAL loExport + IF TYPE('goExport') = 'U' + IF !'oexport'$LOWER(SET("Procedure")) + SET PROCEDURE TO oexport.prg ADDITIVE + ENDIF + loExport = Createobject("oExportConfig") + ELSE + loExport = goExport + ENDIF + + + lcRaport = JUSTSTEM(lcRaport) + '.frx' + +*!* lcFile = getUserRepPath() + "USR_" + lcRaport + lcFile = loExport.GetRepPath(lcRaport) + + IF FILE(lcFile) + AMESSAGEBOX('Raportul ' + lcFile + ' exista deja!', 0+48, _screen.Caption) + RETURN + ENDIF + + *!* TRY + *!* USE (lcRaport) IN 0 again SHARED ALIAS crsRaportTemp + *!* ENDTRY + + IF !FILE(lcRaport) + aMESSAGEBOX('Nu exista raportul ' + lcRaport, 0+48, _screen.Caption) + ELSE + USE (lcRaport) IN 0 AGAIN SHARED ALIAS crsRaportTemp + SELECT crsRaportTemp + COPY TO (lcFile) + USE IN crsRaportTemp + AMESSAGEBOX('S-a creat raportul ' + lcFile, 0+48, _screen.Caption) + ENDIF + +ENDPROC && UserReport2File + +**************************************************************************** +* Salveaza un raport de pe disk in baza de date +**************************************************************************** +PROCEDURE Report2Database + Local lcFrtFileName, lcFrtInputFile, lcFrxFileName, lcFrxInputFile, llSucces, lnId + llSucces = .F. + lcInputFile = GETFILE('FRX', 'Alege un fisier FRX', 'Alege',0, 'Alege un fisier FRX') + + IF !EMPTY(m.lcInputFile) + lcFrxFileName = Forceext(Lower(Justfname(m.lcInputFile)), 'frx') && factura.frx + lcFrtFileName = Forceext(Lower(Justfname(m.lcInputFile)), 'frt') && factura.frt + + lcFrxInputFile = Forceext(Lower(m.lcInputFile), 'frx') && d:\roa\userreports\schema\usr_factura.frx + lcFrtInputFile = Forceext(Lower(m.lcInputFile), 'frt') && d:\roa\userreports\schema\usr_factura.frt + + llSucces = (FILE(m.lcFrxInputFile) AND FILE(m.lcFrtInputFile)) + IF m.llSucces + lnId = File2Atasament(m.lcFrxInputFile) + llSucces = (m.lnId > 0) + ELSE + AMESSAGEBOX('Nu exista fisierul ' + m.lcFrxFileName + ' sau ' + m.lcFrtFileName,0+48,_screen.Caption) + ENDIF + + If m.llSucces + lnId = File2Atasament(m.lcFrtInputFile) + llSucces = (m.lnId > 0) + Endif + ENDIF + AMESSAGEBOX(IIF(m.llSucces, 'Raportul s-a salvat cu succes in baza de date.','Raportul NU s-a salvat in baza de date!'),0+64,_screen.Caption) + + Return m.llSucces +ENDPROC && Report2Database + +**************************************************************************** +* Salveaza o imagine (ex: logo.jpg) in baza de date pentru a fi folosita la rapoarte +**************************************************************************** +PROCEDURE Image2Database + lcInputFile = GETFILE('Images:jpg,jpeg,bmp,png,gif,tiff', 'Alege un fisier', 'Alege',0, 'Alege un fisier') + lnId = 0 + llSucces = .F. + IF !EMPTY(m.lcInputFile) + lnId = File2Atasament(m.lcInputFile) + llSucces = (m.lnId > 0) + ENDIF + AMESSAGEBOX(IIF(m.llSucces, 'Imaginea s-a salvat cu succes in baza de date.','Imaginea NU s-a salvat in baza de date!'),0+64,_screen.Caption) + RETURN m.llSucces +ENDPROC && Image2Database \ No newline at end of file diff --git a/COMUN/programe/quitapp.prg b/COMUN/programe/quitapp.prg new file mode 100644 index 0000000..bd26e33 --- /dev/null +++ b/COMUN/programe/quitapp.prg @@ -0,0 +1,340 @@ +* Program: QUITAPP.PRG +* Description: Client-side of remote termination of applications. +* Created: 07/11/2003 +* Developer: Gregory L Reichert +* Copyright: Copyright (c) 2003 GLR software +*------------------------------------------------------------ +* Id Date By Description +* 1 07/11/2003 Gregory L Reichert Initial Creation +* +*------------------------------------------------------------ + +*!* Overview + +*!* The component is the client-side portion of a Remote Application Killer. +*!* With the use of a shared table, an network administrator can determine +*!* what workstation has what application running, and instruct that application +*!* to quit. + +*!* An administrator can monitor which applications are running, and instruct them +*!* termination themselves. + +*!* Instructions + +*!* This component is based on a Timer class with a one minute interval. Each minute +*!* the application check to see if the administrator wishs the application to +*!* quit. If discovered so, the countdown begins (default 10 minutes). During the +*!* Countdown, a message is displayed notifing the user that the automatic termination of +*!* the application is underway. They can manual exit the application, or wait for the +*!* automatic. Either way, it is intended for the user to complete their current task. +*!* At the end of the countdown, the application issues a QUIT command. + +*!* Call this routine, and a object reference is returned. This object should +*!* remain active throughout the life of the application. + +*!* PRIVATE oQuitApp +*!* oQuitApp = QuitApp( "\\MyServer\MyDrive\CommonFiles\" ) +*!* +*!* When the administrator wish to terminate one or more application, they place +*!* a True (.T.) in the "lQuit" field of the QuitApp.dbf table. As the Application continues +*!* countdown to automated termination, the "Remain" field indicates the number of minutes +*!* remaining. If the Admin changes the value of "Remain", the countdown continues from +*!* that new value. If a value less then zero (0) is entered, the application terminates +*!* the next time the QuitApp timer is fired. + + +*!* Two exposed method are provided to inform the routine that the application +*!* is performing critical operations and can not be interupted. These are called +*!* EnterCritical() and LeaveCritical(). The EnterCritical() should be called when the +*!* critical section begins, and the LeaveCritical() should be called when the section +*!* ends. + +*!* The administrator can check to see a application is running, or if it crashed before hand, +*!* by set the "aLiveTest" field of the QuitApp.dbf to False (.F.). After a couple of minutes, +*!* if the application is still alive, the field will revert to True (.T.). + +*!* The form called Admin_QuitApp.scx is used by the administrator to monitor and control the +*!* remote applications. + +*!* ===================================================================================== + +LPARAMETERS tcPath, tcQuitName + +RETURN CREATEOBJECT("QuitApp", tcPath, tcQuitName) + + +#DEFINE kQuitMax 10 && Wait 10 minutes before auto-quit + +*------------------------------------------------------------ +* Description: QuitApp class +*------------------------------------------------------------ +* Id Date By Description +* 1 07/11/2003 Gregory L Reichert Initial Creation +* +*------------------------------------------------------------ +DEFINE CLASS QuitApp AS TIMER + + INTERVAL = (60*1000) && check once a minute. + ENABLE = .T. + cPath = tcPath + cQuitName ="QuitApp" + cQFile ="QuitApp" + cAlias = "QuitApp" + && Full URN to QuitApp.dbf. Must be at a shared network location for all running application to gain access. + + *------------------------------------------------------------ + * Description: Error Trap + * Parameters: internal + * Return: n/a + * Use: internal + *------------------------------------------------------------ + * Id Date By Description + * 1 07/11/2003 Gregory L Reichert Initial Creation + * + *------------------------------------------------------------ + PROCEDURE ERROR( a,b,c ) + *-- ignore all error from this class + RETURN + ENDPROC + + *------------------------------------------------------------ + * Description: Initializes the timer + * Parameters: cPath: path to the shared QuitApp.dbf - path only + * Return: N/A + * Use: ox = CreateObject( "QuitApp","\\myserver\shared\CommonFiles\" ) + *------------------------------------------------------------ + * Id Date By Description + * 1 07/11/2003 Gregory L Reichert Initial Creation + * + *------------------------------------------------------------ + PROCEDURE INIT( cPath, cQuitName ) + LOCAL lc + lc = SELECT() + + + cPath = ADDBS(IIF(EMPTY(cPath),"", cPath)) + cQuitName = IIF(EMPTY(cQuitName),"QuitApp",JUSTSTEM(cQuitName)) + cQFile = cPath+cQuitName+".dbf" + cAlias = "QuitApp" + + this.cPath = cPath + this.cQuitName = cQuitName + this.cQFile = cQFile + this.cAlias = cAlias + *------------------------------------- + * create QuitApp table if missing. + *------------------------------------- + IF NOT FILE(this.cQFile) + SELECT 0 + CREATE TABLE (this.cQFile) (ws c(40),ID N(10,0), cCaption c(100),lQuit L, remain N(3), Critical L, aLiveTest L) + USE + ENDIF + + SELECT(lc) + ENDPROC + + *------------------------------------------------------------ + * Description: Timer routine + * Parameters: n/a + * Return: n/a + * Use: internal + *------------------------------------------------------------ + * Id Date By Description + * 1 07/11/2003 Gregory L Reichert Initial Creation + * + *------------------------------------------------------------ + PROCEDURE TIMER + + + LOCAL lc + lc = SELECT() + USE (this.cQFile) IN 0 SHARED ALIAS (this.cAlias) + SELECT (this.cAlias) + + LOCATE FOR ID=_VFP.HWND AND cCaption=_VFP.CAPTION AND NOT DELETED() + IF NOT FOUND() + + *------------------------------------- + * Add an instence for this workstation / application + INSERT INTO (this.cQFile) (ws,ID,cCaption,lQuit,remain, Critical, aLiveTest) ; + VALUES ( UPPER(SYS(0)),_VFP.HWND, _VFP.CAPTION, .F., kQuitMax, .F., .T.) + ENDIF + + *- Each time, reset the aLiveTest field. + REPLACE aLiveTest WITH .T. + + IF NOT Critical AND TXNLEVEL()=0 + *- do only if not in Critical Section of the code, + * and not in a Transaction block + IF lQuit + *------------------------------------- + * if still timing out, display remaining time. + *------------------------------------- + IF remain>0 + IF remain=kQuitMax + * - if first time displaying the warning, force application on top. + _SCREEN.ALWAYSONTOP=.T. + _SCREEN.ALWAYSONTOP=.F. + ENDIF + *- decrement the counter, and display warning. + REPLACE remain WITH remain -1 + osh=CREATEOBJECT('shell.application') + osh.minimazeall + _screen.windowstate=2 + WAIT WINDOW NOCLEAR NOWAIT "Programul se va inchide automat in " +ALLTRIM(STR(remain,10))+" minute." + ?? CHR(7) + osh.undominimazeall + RELEASE osh + ELSE + *------------------------------------- + * otherwise, quit the application. + *------------------------------------- + USE IN (this.cAlias) + CLEAR EVENTS + glQuit = .T. + QUIT + ENDIF + ELSE + *------------------------------------- + * if nolonger quiing, reset counter. + *------------------------------------- + REPLACE remain WITH kQuitMax + WAIT CLEAR + ENDIF + ENDIF + + USE IN (this.cAlias) + THIS.RESET + SELECT(lc) + ENDPROC + + *------------------------------------------------------------ + * Description: Called when entering a Critical Section of the code. + * Parameters: n/a + * Return: True + * Use: .EnterCritical + *------------------------------------------------------------ + * Id Date By Description + * 1 07/11/2003 Gregory L Reichert Initial Creation + * + *------------------------------------------------------------ + PROCEDURE EnterCritical() + LOCAL lc + lc = SELECT() + USE (this.cQFile) IN 0 SHARED ALIAS (this.cAlias) + SELECT (this.cAlias) + + UPDATE (this.cQFile) SET Critical=.T. WHERE ID=_VFP.HWND AND cCaption=_VFP.CAPTION + + USE IN (this.cAlias) + SELECT(lc) + ENDPROC + + *------------------------------------------------------------ + * Description: Called when exitting a Critical Section of the code. + * Parameters: n/a + * Return: True + * Use: .LeaveCritical + *------------------------------------------------------------ + * Id Date By Description + * 1 07/11/2003 Gregory L Reichert Initial Creation + * + *------------------------------------------------------------ + PROCEDURE LeaveCritical() + LOCAL lc + lc = SELECT() + USE (this.cQFile) IN 0 SHARED ALIAS (this.cAlias) + SELECT (this.cAlias) + + UPDATE (this.cQFile) SET Critical=.F. WHERE ID=_VFP.HWND AND cCaption=_VFP.CAPTION + + USE IN (this.cAlias) + SELECT(lc) + ENDPROC + + *------------------------------------------------------------ + * Description: Destroy this object + * Parameters: n/a + * Return: n/a + * Use: internal + *------------------------------------------------------------ + * Id Date By Description + * 1 07/11/2003 Gregory L Reichert Initial Creation + * + *------------------------------------------------------------ + PROCEDURE DESTROY + *----------------------------------------------- + * On destroy, remove the application reference from the QuitApp table. + *----------------------------------------------- + LOCAL lc + lc = SELECT() + USE (this.cQFile) IN 0 SHARED ALIAS (this.cAlias) + SELECT (this.cAlias) + + DELETE FROM (this.cQFile) WHERE ID=_VFP.HWND AND cCaption=_VFP.CAPTION + + USE IN (this.cAlias) + SELECT(lc) + ENDPROC + +ENDDEFINE + + + +&& ------------------------------INCEPUT: Quit_Automat ------------------------------ +*!* Procedura: Quit_Automat +*!* Parametri: tlQuit +*!* Data/Ora generarii: 19/02/2004 12:48 +*!* Autor: MARIUS.MUTU +PROCEDURE Quit_Automat +LPARAMETERS tlQuit + +IF tlQuit + QUIT +ENDIF + +ENDPROC +&& ------------------------------SFARSIT: Quit_Automat ------------------------------ + +* Eof QUITAPP.PRG +*************************** +*!* FUNCTION AppInstance +*!* PARAMETERS WindowName + +*!* #DEFINE GW_OWNER 4 +*!* #DEFINE GW_HWNDFIRST 0 +*!* #DEFINE GW_HWNDNEXT 2 +*!* #DEFINE SW_MAXIMIZE 3 +*!* #DEFINE SW_NORMAL 1 + +*!* DECLARE integer SetForegroundWindow in win32api long lnhWnd +*!* DECLARE integer GetWindowText in win32api integer, string, integer +*!* DECLARE integer GetWindow in win32api integer,INTEGER +*!* DECLARE integer IsWindowVisible in win32api integer +*!* DECLARE integer GetActiveWindow in win32api +*!* DECLARE integer ShowWindow in user32 INTEGER lnhWnd, INTEGER lnCmdShow + +*!* IsWindEx = .F. +*!* if len(WindowName) < 1 +*!* return .t. +*!* endif + +*!* foxhwnd = GetActiveWindow() +*!* hwndNext = GetWindow(foxhwnd,GW_HWNDFIRST) + +*!* DO WHILE hwndNext <> 0 +*!* IF (hwndnext <> foxhwnd .AND. GetWindow(hwndnext,GW_OWNER) = 0) +*!* Stuffer = SPACE(64) +*!* x = GetWindowText(hwndnext,@Stuffer,64) +*!* IF WindowName $ Stuffer +*!* IsWindEx = .T. +*!* =SetForegroundWindow(hwndnext) +*!* =ShowWindow(hwndNext,SW_MAXIMIZE) +*!* EXIT +*!* ENDIF +*!* ENDIF +*!* hwndNext = GetWindow(hwndnext,GW_HWNDNEXT) +*!* ENDDO + +*!* RETURN IsWindEx +*!* ENDFUNC \ No newline at end of file diff --git a/COMUN/programe/regex.prg b/COMUN/programe/regex.prg new file mode 100644 index 0000000..1087ecb --- /dev/null +++ b/COMUN/programe/regex.prg @@ -0,0 +1,268 @@ +*!* CLEAR +*!* ?strtranx([ana are 1234567890.1234 lei], [\s\d+\.\d\s], [=TRANSFORM($1, "999 999 999 999.99")]) +*?strtranx([ana are <<1234567890.1234>> lei], [<<], [=TRANSFORM($1, "AA")]) +*!* RETURN +CLEAR + + +*-- http://www.cornerstonenw.com/article_id_parsing3.htm +SET STEP ON + +lcSourceString = [ana are mere 123,345 678 ad] +LOCAL laItems[10] + +lnResults = GetRegExpAll(lcSourceString, '\d+', @laItems) + +SET STEP ON +RETURN +strTest = [ab cd2""$$] +?strTest +?StripNonAscii(strTest) + +*-- replace non a-z09 with "" case-insensitive +? strtranx([Ab ra /ca\d&abr'a],"[^a-z0-9]",[],1,,1) +RETURN + +*-- count words +? OccursRegExp("\b(\w+)\b", [the then quick quick brown fox fox]) +&& prints 7 + +*-- count repeatedwords +? OccursRegExp("\b(\w+)\s\1\b", [the then quick quick brown fox fox]) +&& prints 2 + + +*-- replace first and second lower-case "a" +? strtranx([Abracadabra],[a],[*],1,2) +&& prints Abr*c*dabra + +*-- replace first and second "a" case-insensitive +? strtranx([Abracadabra],[a],[*],1,2,1) +&& prints *br*cadabra + +*-- locate the replacement targets +? strtranx([Abracadabra],[^a|a$],[*],1,2,0) +&& Abracadabr* +? strtranx([Abracadabra],[^a|a$],[*],1,2,1) +&& *bracadabr* + + +lcText = "The cost, is $123,345.75. " +*-- convert the commas +lcText = strtranx( m.lcText, "(\d{1,3})\,(\d{1,}) ","$1 $2" ) + +*-- convert the decimals +? strtranx( m.lcText, "(\d{1,3})\.(\d{1,})", "$1,$2" ) + +** prints "The cost, is $123 345,75." + +*-- add 1 to all digits +? strtranx( [ABC123], "(\d)", [=TRANSFORM(VAL($1)+1)] ) +** prints "ABC234" + +*-- convert all dates to long format +? strtranx( [the date is: 7/18/2004 ] , [(\d{1,2}/\d{1,2}/\d{4})], [=TRANSFORM(CTOD($1),"@YL")]) +** prints "the date is: Sunday, July 18, 2004" + + +*---------------------------------------------------------- +FUNCTION StrtranRegExp( tcSourceString, tcPattern, tcReplace ) + LOCAL loRE + loRE = CREATEOBJECT("vbscript.regexp") + WITH loRE + .PATTERN = tcPattern + .GLOBAL = .T. + .multiline = .T. + RETURN .REPLACE( tcSourceString , tcReplace ) + ENDWITH +ENDFUNC + +*---------------------------------------------------------- +FUNCTION OccursRegExp(tcPattern, tcText) + LOCAL loRE, loMatches, lnResult + loRE = CREATEOBJECT("vbscript.regexp") + WITH loRE + .PATTERN = m.tcPattern + .GLOBAL = .T. + .multiline = .T. + loMatches = loRE.Execute( m.tcText ) + lnResult = loMatches.COUNT + loMatches = NULL + ENDWITH + RETURN m.lnResult +ENDFUNC + + + +*---------------------------------------------------------- +FUNCTION strtranx(tcSearched, ; + tcSearchFor, ; + tcReplacement, ; + tnStart, tnNumber, ; + tnFlag ) + + *-- the final version of the UDF + LOCAL loRE, lcText, lnShift, lcCommand,; + loMatch, loMatches, lnI, lnK, lcSubMatch,; + llevaluate, lcMatchDelim, lcReplaceText, lcReplacement,; + lnStart, lnNumber, loCol, lcKey + + IF EMPTY(NVL(tcSearched, '')) + RETURN NVL(tcSearched, '') + ENDIF + + loRE = CREATEOBJECT("vbscript.regexp") + + WITH loRE + .PATTERN = m.tcSearchFor + .GLOBAL = .T. + .multiline = .T. + .ignorecase = IIF(VARTYPE(m.tnFlag)=[N],m.tnFlag = 1,.F.) + ENDWITH + + lcReplacement = m.tcReplacement + + *--- are we evaluating? + IF m.lcReplacement = [=] + llevaluate = .T. + lcReplacement = SUBSTR( m.lcReplacement, 2 ) + ENDIF + + IF VARTYPE( m.tnStart )=[N] + lnStart = m.tnStart + ELSE + lnStart = 1 + ENDIF + + IF VARTYPE( m.tnNumber) =[N] + lnNumber = m.tnNumber + ELSE + lnNumber = -1 + ENDIF + + IF m.lnStart>1 OR m.lnNumber#-1 OR m.llevaluate + + lcText = m.tcSearched + lnShift = 1 + loMatches = loRE.execute( m.lcText ) + loCol = CREATEOBJECT([collection]) + lnNumber = IIF( lnNumber=-1,loMatches.COUNT,MIN(lnNumber,loMatches.COUNT)) + + FOR lnK = m.lnStart TO m.lnNumber + loMatch = loMatches.ITEM(m.lnK-1) && zero based + lcCommand = m.lcReplacement + FOR lnI= 1 TO loMatch.submatches.COUNT + lcSubMatch = loMatch.submatches(m.lnI-1) && zero based + IF m.llevaluate + * "escape" the string we are about to use in an evaluation. + * it is important to escape due to possible delim chars (like ", ' etc) + * malicious content, or VFP line-length violations. + lcKey = ALLTRIM(TRANSFORM(m.lnK)+[_]+TRANSFORM(m.lnI)) + loCol.ADD( m.lcSubMatch, m.lcKey ) + lcSubMatch = [loCol.item(']+m.lcKey+[')] + ENDIF + lcCommand = STRTRAN( m.lcCommand, "$" + ALLTRIM( STR( m.lnI ) ) , m.lcSubMatch) + ENDFOR + + IF m.llevaluate + TRY + lcReplaceText = EVALUATE( m.lcCommand ) + CATCH TO loErr + lcReplaceText="[[ERROR #"+TRANSFORM(loErr.ERRORNO)+[ ]+loErr.MESSAGE+"]]" + ENDTRY + ELSE + lcReplaceText = m.lcCommand + ENDIF + lcText = STUFF( m.lcText, loMatch.FirstIndex + m.lnShift, m.loMatch.LENGTH, m.lcReplaceText ) + lnShift = m.lnShift + LEN( m.lcReplaceText ) - m.loMatch.LENGTH + ENDFOR + ELSE + lcText = loRE.REPLACE( m.tcSearched, m.tcReplacement ) + ENDIF + RETURN m.lcText +ENDFUNC + +*===================== +FUNCTION StripNonAscii + LPARAMETERS tcSourceString, tcReplaceString + +TEXT TO lcPattern NOSHOW +[^A-Za-z 0-9 \.,\?'""!@#\$%\^&\*\(\)-_=\+;:<>\/\\\|\}\{\[\]`~] +ENDTEXT + lcReplace = IIF(TYPE('tcReplaceString') <> 'C', "", tcReplaceString) + lcReturn = strtranx( m.tcSourceString, m.lcPattern, m.lcReplace,1,,1) + + RETURN m.lcReturn +ENDFUNC && StripNonAscii + +*===================== +* Intoarce un text care se potriveste cu pattern-ul +* Ex. Localitatea din textul: STRADA NR LOCALITATE +*===================== +FUNCTION GetRegExp + LPARAMETERS tcSourceString, tcPattern, tnOccurence + + * tcSourceString: Bld. Stefan cel Mare 14 Tirgu Neamt + * tcPattern: [A-Za-z\s]+$ = (caracter sau spatiu) de cel putin o data la sfarsitul liniei = Tirgu Neamt + * tcPattern: \d+[A-Za-z\s]+$ = oricate cifre (caracter sau spatiu) de cel putin o data la sfarsitul liniei = 14 Tirgu Neamt + + LOCAL loRE, loMatches, lcResult, lnOccurence + lcResult = '' + lnOccurence = IIF(!EMPTY(m.tnOccurence) and TYPE('tnOccurence') = 'N', m.tnOccurence, 1) + + loRE = CREATEOBJECT("vbscript.regexp") + WITH loRE + .PATTERN = m.tcPattern + .GLOBAL = .T. + .multiline = .T. + loMatches = loRE.Execute( m.tcSourceString) + IF loMatches.COUNT >= m.lnOccurence + lcResult = loMatches.Item(m.lnOccurence - 1).Value + ENDIF + loMatches = NULL + ENDWITH + + RETURN m.lcResult +ENDFUNC && GetRegExp + +*===================== +* Intoarce numarul potrivirilor si un parametru OUT array sau lista de numere facturi separate prin "," +* Ex. Toate numerele dintr-un text lnMatches = GetRegExpAll(lcSourceString, '\d+', @loMatches) +*===================== +FUNCTION GetRegExpAll + LPARAMETERS tcSourceString, tcPattern, taItems + + * tcSourceString: Bld. Stefan cel Mare 14 Tirgu Neamt + * tcPattern: [A-Za-z\s]+$ = (caracter sau spatiu) de cel putin o data la sfarsitul liniei = Tirgu Neamt + * tcPattern: \d+[A-Za-z\s]+$ = oricate cifre (caracter sau spatiu) de cel putin o data la sfarsitul liniei = 14 Tirgu Neamt + * taItems "A">taItems : array cu rezultatele (OUT) taItems[1..Result] sau taItems "C" lista facturi separate prin virgula + LOCAL loRE, loMatches, lnResults, lnItem + IF TYPE('taItems') = "A" + EXTERNAL ARRAY taItems + ELSE + taItems = "" + ENDIF + lnResult = 0 + + loRE = CREATEOBJECT("vbscript.regexp") + WITH loRE + .PATTERN = m.tcPattern + .GLOBAL = .T. + .multiline = .T. + loMatches = loRE.Execute( m.tcSourceString) + lnResults = loMatches.COUNT + IF TYPE('taItems') = "A" + DIMENSION taItems[m.lnResult] + FOR lnItem = 1 TO m.lnResult + taItems[m.lnItem] = loMatches.Item(m.lnItem-1).Value + ENDFOR + ELSE + FOR lnItem = 1 TO m.lnResults + taItems = taItems + IIF(m.lnItem > 1, ",", "") + loMatches.Item(m.lnItem-1).Value + ENDFOR + ENDIF + loMatches = NULL + ENDWITH + + RETURN m.lnResults +ENDFUNC && GetRegExp \ No newline at end of file diff --git a/COMUN/programe/reglari_denominare2005.prg b/COMUN/programe/reglari_denominare2005.prg new file mode 100644 index 0000000..9bf081c --- /dev/null +++ b/COMUN/programe/reglari_denominare2005.prg @@ -0,0 +1,148 @@ +*** Note contabile pentru reglarea diferentelor provenite din denominare 01-07-2005 + +IF gnAn * 12 + gnLuna # 2005*12 + 7 + aMESSAGEBOX('Notele de reglare denominare se pot face doar in luna 07-2005',0+48,'Atentie') + RETURN +ENDIF + +lnButon = lans(77770) +IF lnButon <> 1 + IF USED('actactan') + USE IN actactan + ENDIF + RETURN +ENDIF + +lcContDenominare = gcCont_Denominare +lcAcontDenominare = gcAnalitic_Denominare + +SELECT actactan +SCATTER NAME loact +ZAP +*** REGLARE FACTURI-BALANTA PARTENERI *** +lcSel = [{call pack_denominare_reglari.ireg_vs_bal_parteneri(?gcS,?gnAn,?gnLuna)}] +lcCursor = 'crsDifParteneri' +lnSucces = goExecutor.oExecute(lcSel,lcCursor) + +IF lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,"Eroare") + RETURN +ENDIF + +SELECT actactan +APPEND FROM DBF(lcCursor) +IF USED(lcCursor) + USE IN (lcCursor) +ENDIF +SELECT actactan +REPLACE ALL id_set WITH 77771, explicatia WITH loact.explicatia, explicatia4 WITH 'REGLARE FACTURI-BALANTA PARTENERI' +REPLACE ALL id_fdoc WITH loact.id_fdoc, nract WITH loact.nract, dataact WITH loact.dataact, dataireg WITH loact.dataireg +REPLACE ALL scd WITH lcContDenominare, ascd WITH lcAcontDenominare FOR EMPTY(scd) OR ISNULL(scd) +REPLACE ALL scc WITH lcContDenominare, ascc WITH lcAcontDenominare FOR EMPTY(scc) OR ISNULL(scc) + +IF RECCOUNT('actactan') <> 0 + oscrie_in_fisiere(0) +ELSE + amessagebox('REGLARE FACTURI cu BALANTA PARTENERI' + Chr(10)+Chr(13)+Chr(10)+Chr(13) + 'Nu sunt diferente.' + CHR(13) + 'Nu s-a inregistrat nota contabila.',0+64,'Info') +ENDIF + + +*** REGLARE BALANTA PARTENERI-BALANTA ANALITICA *** +lcSel = [{call pack_denominare_reglari.bal_part_vs_bal_ana(?gcS,?gnAn,?gnLuna)}] +lcCursor = 'crsDifBalante' +lnSucces = goExecutor.oExecute(lcSel,lcCursor) + +IF lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,"Eroare") + RETURN +ENDIF + +SELECT actactan +ZAP +APPEND FROM DBF(lcCursor) +IF USED(lcCursor) + USE IN (lcCursor) +ENDIF +SELECT actactan +REPLACE ALL id_set WITH 77772, explicatia WITH loact.explicatia, explicatia4 WITH 'REGLARE BALANTA PARTENERI-BALANTA ANALITICA' +REPLACE ALL id_fdoc WITH loact.id_fdoc, nract WITH loact.nract, dataact WITH loact.dataact, dataireg WITH loact.dataireg +REPLACE ALL scd WITH lcContDenominare, ascd WITH lcAcontDenominare FOR EMPTY(scd) OR ISNULL(scd) +REPLACE ALL scc WITH lcContDenominare, ascc WITH lcAcontDenominare FOR EMPTY(scc) OR ISNULL(scc) + +IF RECCOUNT('actactan') <> 0 + oscrie_in_fisiere(0) +ELSE + amessagebox('REGLARE BALANTA PARTENERI cu BALANTA DE VERIFICARE ANALITICA' + Chr(10)+Chr(13)+Chr(10)+Chr(13) +'Nu sunt diferente.' + CHR(13) + 'Nu s-a inregistrat nota contabila.',0+64,'Info') +ENDIF + + +*** REGLARE BALANTA ANALITICA-SINTETICA *** +lcSel = [{call pack_denominare_reglari.bal_ana_vs_bal_sint(?gcS,?gnAn,?gnLuna)}] +lcCursor = 'crsDifBal' +lnSucces = goExecutor.oExecute(lcSel,lcCursor) + +IF lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,"Eroare") + RETURN +ENDIF + +SELECT actactan +ZAP +APPEND FROM DBF(lcCursor) +IF USED(lcCursor) + USE IN (lcCursor) +ENDIF +SELECT actactan +REPLACE ALL id_set WITH 77773, explicatia WITH loact.explicatia, explicatia4 WITH 'REGLARE BALANTA ANALITICA-SINTETICA' +REPLACE ALL id_fdoc WITH loact.id_fdoc, nract WITH loact.nract, dataact WITH loact.dataact, dataireg WITH loact.dataireg +REPLACE ALL scd WITH lcContDenominare, ascd WITH lcAcontDenominare FOR EMPTY(scd) OR ISNULL(scd) +REPLACE ALL scc WITH lcContDenominare, ascc WITH lcAcontDenominare FOR EMPTY(scc) OR ISNULL(scc) + +IF RECCOUNT('actactan') <> 0 + oscrie_in_fisiere(0) +ELSE + amessagebox('REGLARE BALANTA ANALITICA cu BALANTA SINTETICA' + Chr(10)+Chr(13)+Chr(10)+Chr(13) + 'Nu sunt diferente.' + CHR(13) + 'Nu s-a inregistrat nota contabila.',0+64,'Info') +ENDIF + + +*** REGLARE SOLDURI BALANTA SINTETICA *** +lcSel = [{call pack_denominare_reglari.bal_sintetica_total(?gcS,?gnAn,?gnLuna)}] +lcCursor = 'crsDifBal' +lnSucces = goExecutor.oExecute(lcSel,lcCursor) + +IF lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,"Eroare") + RETURN +ENDIF + +SELECT (lcCursor) +lnSumaD = debit +lnSumaC = credit + +IF USED(lcCursor) + USE IN (lcCursor) +ENDIF + +SELECT actactan +ZAP +IF lnSumaD <> 0 + APPEND BLANK + REPLACE scd WITH lcContDenominare, ascd WITH lcAcontDenominare, suma WITH lnSumaD +ENDIF +IF lnSumaC <> 0 + APPEND BLANK + REPLACE scc WITH lcContDenominare, ascc WITH lcAcontDenominare, suma WITH lnSumaC +ENDIF + +REPLACE ALL id_set WITH 77774, explicatia WITH loact.explicatia, explicatia4 WITH 'REGLARE SOLDURI BALANTA SINTETICA' +REPLACE ALL id_fdoc WITH loact.id_fdoc, nract WITH loact.nract, dataact WITH loact.dataact, dataireg WITH loact.dataireg + +IF RECCOUNT('actactan') <> 0 + oscrie_in_fisiere(0) +ELSE + amessagebox('REGLARE SOLDURI BALANTA SINTETICA' + Chr(10)+Chr(13)+Chr(10)+Chr(13) + 'Nu sunt diferente.' + CHR(13) + 'Nu s-a inregistrat nota contabila.',0+64,'Info') +ENDIF + +IF USED('actactan') + USE IN actactan +ENDIF \ No newline at end of file diff --git a/COMUN/programe/roa.prg b/COMUN/programe/roa.prg new file mode 100644 index 0000000..8650e51 --- /dev/null +++ b/COMUN/programe/roa.prg @@ -0,0 +1,1229 @@ +Define Class RoaApp As Custom + + Dimension aVersiune[12] + Dimension aforms[1] && Forms collection for application object. + Dimension aformnames[1] && Form name collection for application object. + + lParametri = .F. + cHost = Null + cUserName = Null + cPassword = Null + nIdUtil = 0 + nIdProgram = 0 + nAn = 0 + nLuna = 0 + cSchema = Null + nIdFirma = 0 + cLastSetTalk = Null + cLastSetPath = Null + cLastSetClassLib = Null + cMainClassLib = Null + + cNumeProgram = Null + cAppName = Null + cAppPath = Null + cUtilizatoriPath = Null + cDirMare = Null + + cLocalePath = Null + lTraducere = .F. + oLocale = Null + + cGeneralIniFile = Null + cSecurityFile = Null + lnewcryptxml = .T. + lnewcryptfll = .T. + + lQuit = .F. + + oLog = Null + oExecutor = Null + oConn = Null + oMyXMLHTTP = Null + oBaraFavorite = Null + oBaraManual = Null + oCalendar = Null + oExport = Null + + lFontCharSet = .F. + + cStartUpForm = "" + cStartUpMenu = "" && Menu (MPR) which is executed when the application object is shown. + Protected ccaption + ccaption = "" && Caption of the application object. + Protected cicon + cicon = "" && Icon of the application object. + Protected clasticon + clasticon = "" && Last icon setting of _screen before application object was intantiated. + Protected clastcaption + clastcaption = "" && Last caption setting of _screen before application object was intantiated. + nformcount = 0 && Forms collection count for application object. + npixeloffset = 22 && Number of pixels which offset multiple instances of the same form. + lcascadeforms = .T. && Specifies whether forms are cascaded if multiple instances of the same form are opened in the same top and left positions of the desktop. + lreadevents = .T. && Enable READ EVENTS within ReadEvents method. + Name = "roaapplication" + cReportPreviewer = "" + cReportPreviewerPath = "" + + + Function initializeaza + Lparameters tParametri,tcNumeProgram,tcMainClassLib + Local llReturn + llReturn = .F. + This.ResetFormsCollection() + This.cNumeProgram = tcNumeProgram + This.cMainClassLib = tcMainClassLib + If This.verificaProgram() + If This.citesteParametri(tParametri) + This.initializeazaFunctiiWin() + This.initializeazaEnv() + This.initializeazaCai() + This.initializeazaClassLib() + This.initializeazaProceduri() + This.initializeazaSettingsIni() + This.initializeazaSecurity() + This.initializeazaReportPreviewer() + This.initializeazaLocale() + This.initializeazaVariabile() + This.initializeazaVariabileGlobale() + This.initializeazaObiecte() + This.initializeazaObiecteGlobale() + llReturn = .T. + Endif + Endif + Return llReturn + Endfunc + + Function verificaProgram + Local llReturn + llReturn = .T. + If !Like(This.cNumeProgram + '*', Upper(Alltrim(Juststem(Sys(16,0))))) AND _VFP.StartMode <> 0 + Messagebox("Nu puteti porni acest program!",0+16,"Atentie") + llReturn = .F. + Else + _Screen.Icon=This.cNumeProgram + [.ICO] + Endif + Return llReturn + Endfunc + + Procedure initializeazaFunctiiWin + Declare Integer GetShortPathName In Win32API; + STRING @lpszLongPath, String @lpszShortPath,; + INTEGER cchBuffer + + Declare Integer GetPrivateProfileString In Kernel32 ; + string, String, String, String @, Integer, String + + Declare Integer WritePrivateProfileString In Kernel32 string, String, String, String + + Declare Integer CopyFile In kernel32 STRING lpExistingFileName, STRING lpNewFileName, INTEGER bFailIfExists + + Declare Integer MoveFile In Win32API String @cSource, String @cTarget + + Declare Integer DeleteFile In kernel32 String @pFileName + + Declare Integer URLDownloadToFile In urlmon.Dll; + INTEGER pCaller, String szURL, String szFileName,; + INTEGER dwReserved, Integer lpfnCB + + Declare Integer PathFileExists In shlwapi; + STRING pszPath + Endproc + + Function ShortPath + Lparameter tcPath + Local lcPath, lcShortName, lnLength, lnResult + lcPath = tcPath + lcShortName = Space(260) + lnLength = Len(lcShortName) + lnResult = GetShortPathName(@lcPath, @lcShortName, lnLength) + If lnResult = 0 + Return "" + Endif + Return Left(lcShortName,lnResult) + Endfunc + + Function GetAppStartPath + Local lcPath + Do Case +*** VFP 6 provides ServerName property for COM servers EXE/DLL/MTDLL + Case Inlist(Application.StartMode,2,3,5) + lcPath = Justpath(Application.ServerName) +*!* *** Interactive +*!* CASE (Application.StartMode) = 0 +*!* lcPath = SYS(5) + CURDIR() +*** Active Document + Case Atc(".APP",Sys(16,0)) > 0 + lcPath = Justpath(Sys(16,0)) +*** Standalone EXE or VFP Development + Otherwise + lcPath = Justpath(Sys(16,0)) + If Atc("PROCEDURE",lcPath) > 0 + lcPath = Substr(lcPath,Rat(":",lcPath)-1) + Endif + Endcase + Return Addbs(lcPath) + Endfunc + + ************************************************************************ + * wwAPI :: CopyFile + ********************************* + *** Function: Copies File. Faster than Fox Copy and handles + *** errors internally. + *** Pass: tcSource - Source File + *** tcTarget - Target File + *** tnFlag - 0* override, 1 don't + *** Return: .T. or .F. + ************************************************************************ + Function CopyFile + Lparameters lcSource, lcTarget, lnFlag + Local lnRetVal + + *** Copy File and overwrite + lnFlag = Iif(Type("nFlag") = "N", nFlag, 0) + lnRetVal = CopyFile(m.lcSource, m.lcTarget, m.lnFlag) + + Return Iif(m.lnRetVal = 0, .F., .T.) + Endproc + + ************************************************************************ + * wwAPI :: MoveFile + ********************************* + *** Function: Rename/Moves a file + *** Pass: tcSource - Source File + *** tcTarget - Target File + *** Return: .T. or .F. + ************************************************************************ + Function MoveFile + Lparameters lcSource, lcTarget + Local lnRetVal + + lnRetVal = MoveFile(m.lcSource, m.lcTarget) + + Return Iif(m.lnRetVal = 0, .F., .T.) + Endfunc + + ************************************************************************ + * wwAPI :: MoveFile + ********************************* + *** Function: Deletes a file + *** Pass: tcFile - File path + *** Return: .T. or .F. + ************************************************************************ + Function DeleteFile + Lparameters tcFile + Local lnRetVal + + lnRetVal = DeleteFile(m.tcFile) + + Return Iif(m.lnRetVal = 0, .F., .T.) + ENDFUNC + + *-------------------------------------------- + * Check file exist + * Return .T. / .F. + FUNCTION FileExist + LPARAMETERS tcFileName + LOCAL ARRAY laDirFiles[1,5] + LOCAL llExist + llExist = .F. + IF !EMPTY(m.tcFileName) + IF ADIR(laDirFiles, m.tcFileName) > 0 + llExist = .T. + ENDIF + ENDIF + RETURN m.llExist + ENDFUNC && FileExist + + *-------------------------------------------- + Function ShowErrorEx + Lparameters toEx, tcMesaj + * tcMesaj (optional): mesaj suplimentar + Local loEx as Exception, lcMesaj + loEx = m.toEx + lcMesaj = IIF(!EMPTY(m.tcMesaj), ALLTRIM(TRANSFORM(m.tcMesaj)) + CHR(13) + CHR(10), '') + + amessagebox(lcMesaj + ; + loEx.Message + Chr(13) + Chr(10) + ; + 'Eroare #' + Alltrim(Str(loEx.ErrorNo)) + Chr(13) + Chr(10) + ; + 'Linia #' + Alltrim(Str(loEx.Lineno)) + Chr(13) + Chr(10) + ; + 'Procedura ' + loEx.Procedure + Chr(13) + Chr(10) + ; + 'Cod ' + loEx.LineContents + CHR(13) + CHR(10) + ; + GETCALLSTACK(), 0 + 16, _Screen.Caption) + ENDFUNC + + ************************************************************************ + Procedure Lista2Array + Lparameters tcLista,taArray,tcSeparator +&& tcLista este un sir de caractere care contine elementele separate prin <;> default +&& tarray este vectorul care se completeaza - trebuie dat prin referinta +&& tcSeparator separatorul de elemente din tcLista - default este ";" - este optional +&& intoarce numarul de elemente gasite +&& ex: lnNr = lista2array("ana;are;mere",@alista,";") + External Array taArray + Local Lclista,lcSeparator,lnNRF,lcF1,i + lnNRF = 0 + + Lclista=Allt(tcLISTA) + If Parameters()<3 Or Empty(tcSeparator) + lcSeparator=";" + Else + lcSeparator=Alltrim(tcSeparator) + Endif + + If Right(Lclista,1)!=lcSeparator + Lclista=Lclista+lcSeparator + Endif + + lnNRF=Occurs(lcSeparator,Lclista) + + If lnNRF>0 + Dimension taArray[lnNrf,1] + + For i=1 To lnNRF + lcF1=Left(Lclista,At(lcSeparator,Lclista)-1) + + If i!=lnNRF + Lclista=Substr(Lclista,At(lcSeparator,Lclista)+1) + Endif + + taArray[i]=lcF1 + Endfor + Else + lnNRF = 0 + Endif + + Return lnNRF + + Endproc && lista2array + + Function citesteParametri + Lparameters tParametri + Local llReturn, lcParametri, lnNr + Private paParametri + Declare paParametri[1] + llReturn = .T. + If Type('tParametri') = 'C' + This.lParametri = .T. + lcParametri = Alltrim(tParametri) + lnNr = This.lista2array(lcParametri,@paParametri,";") + Do Case + Case lnNr < 5 + aMessagebox('Numar incorect de parametri',0+16,'Eroare') + llReturn = .F. + Case Type('paParametri',1)<>"A" + llReturn = .F. + Otherwise + This.cHost = paParametri[1] + This.cUserName = paParametri[2] + This.cPassword = paParametri[3] + This.nIdUtil = Round(Val(paParametri[4]),0) + This.nIdProgram = Round(Val(paParametri[5]),0) + If Alen(paParametri,1)=10 + This.nAn = Val(paParametri[7]) + This.nLuna = Val(paParametri[8]) + This.cSchema = paParametri[9] + This.nIdFirma = Val(paParametri[10]) + Endif + Endcase + Else + This.lParametri = .F. + This.cHost = '' + This.cUserName = '' + This.cPassword = '' + This.nIdUtil = 0 + This.nIdProgram = 0 + This.nAn = 0 + This.nLuna = 0 + This.cSchema = '' + This.nIdFirma = -1 + Endif + Release paParametri, lcParametri, lnNr + Return llReturn + Endfunc + + Procedure initializeazaEnv + This.cLastSetTalk = Set("TALK") + This.clastcaption=_Screen.Caption + This.clasticon=_Screen.Icon + This.lFontCharSet = AFONT(laFontCharSet,"Arial Narrow",238) + + Push Menu _Msysmenu + Set Century On + Set Deleted On + Set Date To Dmy + Set Exclusive Off + Set Cpdialog Off + Set Talk Off + Set Safety Off + Set Escape Off + Set Exact On + Set Mark To '/' + Set Ansi On + Set Console Off + Set Notify Off + Set Seconds Off + Set NullDisplay To '' + Set Decimals To 4 + Set Point To '.' + SET HOURS TO 24 + Set SQLBUFFERING On + _Screen.Visible=.F. + _Screen.AutoCenter=.T. + +* On Shutdown do onShutDown() + On Error goApp.ErrorHandler(Error(),Program(),Lineno()) + Endproc + + Procedure restaureazaEnv + On Error + On Shutdown + If Not Empty(This.clastcaption) And Not _Screen.Caption==This.clastcaption + _Screen.Caption=This.clastcaption + Endif + If Not Empty(This.clasticon) And Not _Screen.Icon==This.clasticon + _Screen.Icon=This.clasticon + Endif + If Not This.cLastSetClassLib==Set("classlib") AND !EMPTY(This.cMainClassLib) + Release Classlib (This.cMainClassLib) + Endif + If Empty(NVL(This.cLastSetPath, '')) + Set Path To + Else + Set Path To (This.cLastSetPath) + Endif + If This.cLastSetTalk=="ON" + Set Talk On + Else + Set Talk Off + Endif + + If Cntbar("_msysmenu")=7 + Return + Endif + Set Classlib To + Set Path To + * Clear All + + * Close All + Pop Menu _Msysmenu + Endproc + + Procedure initializeazaCai + This.cLastSetPath=Set("PATH") + This.cAppPath = Addbs(This.ShortPath(This.GetAppStartPath())) + If Right(This.cAppPath ,9)="PROGRAME\" + This.cAppPath = Substr(This.cAppPath ,1,Len(This.cAppPath )-9) + Endif + This.cAppName=Allt(Uppe(Juststem(Sys(16,0)))) + This.cUtilizatoriPath = This.cAppPath + "UTILIZATORI\" + This.cDirMare = Addbs(Left(This.cAppPath,Rat("\",This.cAppPath,2)-1)) + + Set Default To (This.cAppPath) + lcPath = This.cAppPath + 'Date;' + ; + This.cAppPath + 'Include;' + ; + This.cAppPath + 'FERESTRE;' + ; + This.cAppPath + 'GRAFICE;' + ; + This.cAppPath + 'CLASE;' + ; + This.cAppPath + 'MENIURI;' + ; + This.cAppPath + 'PROGRAME;' + ; + This.cAppPath + 'RAPOARTE;' + ; + This.cAppPath + 'COMUN\CLASE;' + ; + This.cAppPath + 'COMUN\FERESTRE;' + ; + This.cAppPath + 'COMUN\PROGRAME;' + ; + This.cAppPath + 'COMUN\GRAFICE;' + ; + This.cAppPath + 'COMUN\RAPOARTE;' + ; + This.cAppPath + 'COMUN\UTILE\CTL32;' + ; + This.cAppPath + 'COMUN\UTILE\HPDF;' + ; + This.cAppPath + 'COMUN\UTILE\HPDF\REPORTOUTPUT;' + ; + This.cAppPath + 'COMUN\UTILE\WEB;' + ; + This.cAppPath + 'COMUN\UTILE\CALENDAR;' + ; + This.cAppPath + 'COMUN\UTILE\GridExtras;' + ; + This.cAppPath + 'COMUN\UTILE\nfjson;' + ; + This.cAppPath + 'COMUN\UTILE\tooltip;' + ; + This.cAppPath + 'COMUN\UTILE\excel;' + ; + This.cAppPath + 'COMUN\UTILE\Menu;' + ; + This.cAppPath + 'COMUN\UTILE\email;' + ; + This.cDirMare + 'COMUNROA\' + + Set Path To &lcPath Additive + This.initializeazaAlteCai() + Endproc + + Procedure initializeazaAlteCai +*!* suprascrisa in fiecare aplicatie care are cai suplimentare +*!* la sfarsit trebuie sa aiba SET PATH TO ... ADDITIVE + Endproc + + Procedure initializeazaClassLib + This.cLastSetClassLib=Set("CLASSLIB") + If !Empty(Nvl(This.cMainClassLib,[])) + Set Classlib To (This.cMainClassLib) Additive + Endif +*!* _ + Set Classlib To _calendar.vcx Additive +*!* A + Set Classlib To appwiz Additive + Set Classlib To accessibility Additive +*!* B + Set Classlib To baza Additive +*!* C + Set Classlib To CAUT Additive + Set Classlib To caut_ora Additive + Set Classlib To cauta_alfa_forms Additive +*!* D + Set Classlib To decabaza Additive +*!* F + Set Classlib To ferestre_cere_date Additive + Set Classlib To ferestre_oracle Additive +*!* L + Set Classlib To locale Additive +*!* M + Set Classlib To Messagebox Additive +*!* O + Set Classlib To ofirma Additive + *Set Classlib To onom_sal Additive + Set Classlib To onomenclatoare Additive + Set Classlib To ooptiuni Additive + *Set Classlib To opersonal Additive + Set Classlib To otoolbar Additive + SET CLASSLIB TO ocriterii ADDITIVE +*!* R + Set Classlib To registry Additive +*!* V + SET CLASSLIB TO vfpxworkbookxlsx ADDITIVE +*!* W + Set Classlib To wwdialogs Additive + + + This.initializeazaAlteClassLib() + + Set Library To (This.cDirMare+[COMUNROA\vfpencryption.fll]) Additive + Endproc + + + Procedure initializeazaAlteClassLib +*!* suprascrisa in fiecare aplicatie care are clase suplimentare + Endproc + + Procedure initializeazaProceduri +*!* _ + Set Procedure To _libpdf Additive +*!* A + Set Procedure To acces_meniu Additive + Set Procedure To acces_meniu2 Additive +*!* B + Set Procedure To build_err_msgs Additive +*!* C + Set Procedure To cauta_alfa Additive +*!* F + Set Procedure To filebringer Additive + Set Procedure To frxoutput Additive +*!* G + Set Procedure To gencursor Additive +*!* I + Set Procedure To ini Additive + Set Procedure To iniacces Additive + Set Procedure To init_program Additive +*!* O + Set Procedure To ocautare Additive + Set Procedure To oExport Additive + Set Procedure To oinit_optiuni Additive + Set Procedure To onomenclatoare Additive + Set Procedure To ooperatii_comune Additive + Set Procedure To oproceduri_ams Additive + Set Procedure To oproceduri_comune Additive + Set Procedure To oproceduri_maintenance Additive + Set Procedure To osecurity Additive + Set Procedure To oupdate Additive +*!* P + Set Procedure To pdflistener Additive + Set Procedure To proceduri_comune Additive + Set Procedure To proceduri_Excel Additive + Set Procedure To procese.prg Additive +*!* R + SET PROCEDURE TO regex.prg ADDITIVE +*!* Q + Set Procedure To quitapp Additive + Set Procedure To updateserver Additive +*!* V + Set Procedure To validare Additive + Set Procedure To Version Additive +*!* W + Set Procedure To This.cAppPath + "\COMUN\UTILE\web\WWAPI.PRG" Additive + Set Procedure To wwconfig Additive + Set Procedure To wwcodeupdate Additive + Set Procedure To wwhttp Additive + Set Procedure To This.cAppPath + "\COMUN\UTILE\web\WWUTILS.PRG" Additive + Set Procedure To wwxmlhttp Additive +*!* X + Set Procedure To xmlaccess Additive + Set Procedure To xmlparser Additive + + This.initializeazaAlteProceduri() + Endproc + + Procedure initializeazaAlteProceduri +*!* suprascrisa in fiecare aplicatie care are proceduri suplimentare + Endproc + + Procedure initializeazaLocale + Local lcObjLocale, lcLanguage, llLocale, lcLocale, lcLocalePath + lcLocalePath = This.cAppPath + "Locale\" + If Directory(lcLocalePath) + This.cLocalePath = lcLocalePath + This.lTraducere = .F. + Endif + lcLanguage = getini(This.cGeneralIniFile,"locale","lang") + llLocale = getini(This.cGeneralIniFile,"locale","llocale") + If Empty(lcLanguage) OR UPPER(m.lcLanguage) = 'ROMANA' + lcLocale = 'Romana' + lcObjLocale = [Locale_dummy] + Else + lcLocale = lcLanguage + lcObjLocale = [Locale] + Endif + This.oLocale=Newobject(lcObjLocale,"Locale.vcx") + If !Empty(llLocale) And llLocale<>'0' + This.oLocale.llocale=.T. + Endif + This.oLocale.locale = lcLocale + Release lcObjLocale, lcLanguage, llLocale, lcLocale, lcLocalePath + Endproc + + Procedure initializeazaReportPreviewer + This.cReportPreviewer = "FoxyPreview" + This.cReportPreviewerPath = This.cDirMare + "COMUNROA\" + Endproc + + Procedure initializeazaSettingsIni + Local lcSettings + This.cGeneralIniFile = This.cDirMare + "settings.ini" + If !File(This.cGeneralIniFile) + TEXT TO lcSettings NOSHOW +[errors] +host=http://83.103.197.79:3000/errors/create_xml + ENDTEXT + + Strtofile(lcSettings, This.cGeneralIniFile) + Endif + Release lcSettings + Endproc + + Procedure initializeazaSecurity + Local lnValid + This.cSecurityFile = This.cDirMare + 'Security\ROA_SECURITY.TXT' + If !This.lParametri + lnValid = This.getcrsSecurity() + If lnValid > 0 + If Used('crsHost') + Select crsHost + Go Top + This.cHost = Alltrim(Host) + This.cUserName = Alltrim(schema) + This.cPassword = Alltrim(pwd) + Use In crsHost + Endif + Endif + Endif + Release lnValid + Endproc + + Procedure initializeazaObiecte + This.oLog = Newobject("Log_Mesaje","Log_Mesaje.prg") + This.oExecutor = Createobject("oExecutor") + This.oConn = Createobject("oConn") + This.oExport = Createobject("oExportConfig") + This.oMyXMLHTTP = Createobject("MyXMLHTTP", getini(This.cGeneralIniFile,'errors','host')) + This.oBaraFavorite = Null + This.oBaraManual = Null + This.oCalendar = Null + Endproc + + Procedure initializeazaVariabile +*!* Public CRLF,CR,LF,Tab + CR=Chr(13) + LF=Chr(10) + CRLF = CR + LF + Tab=Chr(9) + Agetfileversion(This.aVersiune,Sys(16,0)) + This.SetCaption(Iif(Alen(This.aVersiune,1)<10,This.cNumeProgram,This.aVersiune(10))) + This.cStartUpMenu = This.cAppPath + "meniuri\" + This.cNumeProgram + '.mpr' + This.cStartUpForm = This.cAppPath + "comun\ferestre\frm_login.scx" + Endproc + + Procedure initializeazaVariabileGlobale +*!* Public gcNumeProgram, NUMEPROGRAM, MENIUPROGRAM, FUNDALPROGRAM + gcNumeProgram = This.cNumeProgram + _program = This.cNumeProgram + NUMEPROGRAM = This.ccaption + MENIUPROGRAM = This.cStartUpMenu + +*!* Public pcNl, pcAn, gcAcces, gcAppPath, gcAppName, gcUtilizatoriPath, gcDirMare, DIRGEN, gcTempPath, ; +*!* glParametri, gcHost, gcUsername, gcPassword, gcUserNameApp, gcPasswordApp, gnIdUtil, gnIdProgram, ; +*!* gnAn, gnLuna, gcS, gnIdFirma, gcGeneralIniFile, gcSecurityFile, gnHandle, gnButon, BUTON, gcFirma, gcBasePath + Store "" To pcNl,pcAn && se initializeaza in start00 + gcAcces = [] + gcAppPath = This.cAppPath + gcAppName = This.cAppName + gcUtilizatoriPath = This.cUtilizatoriPath + gcDirMare = This.cDirMare + gcComunPath = This.cDirMare+[COMUNROA\] + DIRGEN = This.cDirMare + gcBasePath = This.cDirMare + gcTempPath = [] && o citesc in oinit_optiuni.prg + glParametri = This.lParametri + gcHost = This.cHost + gcUsername = This.cUserName + gcPassword = This.cPassword + gcUserNameApp = [] && le citesc in frm_login + gcPasswordApp = [] && + gnIdUtil = This.nIdUtil + gnIdProgram = This.nIdProgram + gnAn = This.nAn + gnLuna = This.nLuna + gcS = This.cSchema + gnIdFirma = This.nIdFirma + If !Empty(Nvl(This.cLocalePath,[])) + Private gcLocalePath, goLocale, glTraducere + gcLocalePath = This.cLocalePath + glTraducere = This.lTraducere + goLocale = This.oLocale + Endif + gcLocale = This.oLocale.locale + gcGeneralIniFile = This.cGeneralIniFile + gcSettingsFile = This.cGeneralIniFile + gcSecurityFile = This.cSecurityFile + gnHandle = -1 + gnButon = 2 + BUTON = 2 + gcFirma = [] + glFontCharSet = This.lFontCharSet + gcReportPreviewer = This.cReportPreviewer + gcReportPreviewerPath = This.cReportPreviewerPath + +*!* Private gcCopyRight, pcTitlu + pcTitlu = [] + gcCopyRight = ' ROA Romfast SRL' + +*!* Private glUltimaLuna, glPrimaLuna, glLunaBuna, glLuna_neplatita, glLunaInchisa +*!* Private glQuit, pl_verificat + Store .F. To glUltimaLuna, glPrimaLuna, glLunaBuna, glLuna_neplatita, glLunaInchisa + Store .F. To glQuit, pl_verificat + +*!* Public gnewcryptfll, gnewcryptxml, gTransferTotal + Store -1 To gTransferTotal + gnewcryptfll = This.lnewcryptfll + gnewcryptxml = This.lnewcryptxml +&& ALTELE +*!* Declare nror[65000] +*!* Declare RTVA[22,2] +*!* Public luna_inchisa, luna_neplatita, PRIMADATA, m.ctva, m.ctvam, m.ctvai, antet, m.nivel +*!* Public OStart,OSETVIZ,OSETTULBAR,OSETINSTRUM,orm,OTEXT,OJUR,osetgest,tlbr_INSTR,tlbr_VIZ,oprinc +*!* Public pcapsocsub,pcapsocvar + pcapsocsub=0 + pcapsocvar=0 +*!* Public a4 + a4=.T. + m.nrgrup=999 + + Store .F. To luna_inchisa,tlbr_INSTRum,tlbr_VIZ + Store 1 To col_menu + Store .T. To PRIMADATA,luna_neplatita + + This.initializeazaAlteVariabileGlobale() + Endproc + + Procedure initializeazaAlteVariabileGlobale +*!* suprascrisa in fiecare aplicatie care are variabile globale suplimentare + Endproc + + Procedure initializeazaObiecteGlobale +*!* Private poLog, goLog, oTool, oHelp, goExecutor, goConn, goMyXMLHTTP, goCalendar, goExport, goUtilizator, goFundal, goFirma + poLog = This.oLog + goLog = This.oLog + oTool = This.oBaraFavorite + oHelp = This.oBaraManual + goExecutor = This.oExecutor + goConn = This.oConn + goMyXMLHTTP = This.oMyXMLHTTP + goCalendar = This.oCalendar + goExport = This.oExport + goUtilizator = Null + goFundal = Null + goFirma = Null + + This.initializeazaAlteObiecteGlobale() + Endproc + + Procedure initializeazaAlteObiecteGlobale +*!* suprascrisa in fiecare aplicatie care are obiecte globale suplimentare + Endproc + + Procedure lanseazaAplicatie + _Screen.Visible = .T. + _Screen.WindowState=2 + + This.DoMenu(This.cStartUpMenu) + This.DoForm(This.cStartUpForm) + This.ReadEvents() + Endproc + + Procedure getcrsSecurity + Lparameters tcSecurityFile +*!* SECURITY.TXT - NECRIPTAT +*!* SECURITY.XML - CRIPTAT +*!* DACA EXISTA SECURITY.XML - PARSEZ XML, ALTFEL PARSEZ TXT +*!* gnewcryptxml - daca roa_security.xml are criptare noua(blowfish) +*!* gnewcryptfll - daca exista vfpencryption.fll +*!* 19.05.2009 +*!* nu mai exista fisiere roa_security.xml cu criptarea veche (windows api) +*!* gnewcryptxml=.F. + + Local lcSecurityFile, lcSecurityPath, lcCursor, lnValid, llSucces, lcSecurityFileXML + lcCursor = "crsHost" + If !Empty(tcSecurityFile) + lcSecurityFile = tcSecurityFile + Else + lcSecurityFile = This.cSecurityFile + Endif + lcSecurityFileXML = Forceext(lcSecurityFile,'xml') + lcSecurityPath = Addbs(Justpath(lcSecurityFile)) + lnValid = 0 + llSucces = .T. + If !Directory(lcSecurityPath) + Try + Md (lcSecurityPath) + Catch + aMessagebox('Nu se poate crea directorul ' + lcSecurityPath + '!',0+16,'Atentie') + Endtry + Endif + + If !(File(lcSecurityFile) Or File(lcSecurityFileXML)) + Cd (lcSecurityPath) + If !File(lcSecurityFileXML) + lcSecurityText = 'ROA;CONTAFIN_ORACLE;123;' + lcSecurityText = Inputbox('Host(DSN);SCHEMA;SCHEMA_PASSWORD;1;','Server',lcSecurityText) + lcSecurityText = Alltrim(lcSecurityText) + If !Empty(lcSecurityText) + If Right(lcSecurityText,1) # ';' + lcSecurityText = lcSecurityText + ';' + Endif + Else + llSucces = .F. + Endif + Endif + + If llSucces + Try + If !(File(lcSecurityFileXML) Or File(lcSecurityFile)) +*!* SECURITY.TXT + Strtofile(lcSecurityText, lcSecurityFile) +*!* SECURITY.TXT ^ + Endif +*!* SECURITY.XML + If !File(lcSecurityFileXML) + Create Cursor cXML (Host c(50), schema c(50), pwd c(50)) + Insert Into cXML (Host, schema, pwd) Values("ROA","CONTAFIN_ORACLE","ENCRYPTED PWD") + Cursortoxml("cXML",lcSecurityFileXML, 1, 512, 0, "1") + Use In cXML + Endif +*!* SECURITY.XML ^ + Catch + aMessagebox('Nu s-a putut crea fisierul ' + lcSecurityFile,0+16,'Atentie') + llSucces = .F. + Endtry + Endif + Endif + + If llSucces + If !File(lcSecurityFile) And !File(lcSecurityFileXML) + aMessagebox('Nu exista fisierul ' + lcSecurityFile,0+16,'Atentie') + llSucces = .F. + Endif + Endif + + If llSucces + If Used(lcCursor) + Use In (lcCursor) + Endif + +&& daca exista security.xml - il transform in cursorul cXML si completez crsHost + Create Cursor (lcCursor)(Host c(100), schema c(100), pwd v(100), IsEncrypted c(1)) + If File(lcSecurityFileXML) + Try + lcSecurityText = Filetostr(lcSecurityFileXML) + Xmltocursor(lcSecurityFileXML, "cXML", 512) + Select cXML + Go Top + Scatter Name lofirstrecord + + If lofirstrecord.Host="ENCRYPTION" + This.lnewcryptxml=.T. + Delete + Else + This.lnewcryptxml=.F. + Endif + + Insert Into (lcCursor) (Host, schema, pwd, IsEncrypted) ; + SELECT Host, schema, pwd, "1" As IsEncrypted ; + FROM cXML + lnValid = Reccount('cXML') + + Use In cXML + Catch To loex + goApp.ErrorHandler(loex.ErrorNo,loex.Procedure,loex.Lineno) + Finally + Use In (Select('cXML')) + Endtry + + Else +* CREATE CURSOR (lcCursor)(HOST c(100), Schema c(100), Pwd v(100), IsEncrypted c(1)) + lcSecurityText = Filetostr(lcSecurityFile) + Local laHost + Dimension laHost[1] + + lnLen = Alines(laHost, lcSecurityText) + + If lnLen > 0 + For i = 1 To lnLen + lcLinie = laHost[i] + + lcHost = Getwordnum(lcLinie, 1, ';') + lcSchema = Getwordnum(lcLinie, 2, ';') + lcPassword = Getwordnum(lcLinie, 3, ';') + lcMode = "0" && necriptat - security.txt + + If Empty(lcHost) Or Empty(lcSchema) Or Empty(lcPassword) + Loop + Endif + + lnValid = lnValid + 1 + Insert Into &lcCursor (Host, schema, pwd, IsEncrypted) Values (lcHost, lcSchema, lcPassword, Iif(Empty(lcMode), '0', lcMode)) + Endfor + Endif + Endif + Endif + + Return lnValid + Endproc + + Procedure Release + RETURN + If Not This.ReleaseForms() + Return .F. + Endif + This.ClearEvents() + Release This + Endproc + +*-- Executes an SCX form. + Procedure DoForm + Lparameters tcFileName,tcClass,tlNoMultipleInstances,tlNoShow + Local lcFileName,lcClass,oForm,oForm2,lcName,lnCount,lnTop,lnLeft + Local lcFormName,lnFormCount + _Screen.Visible=.T. + lcFileName=Alltrim(tcFileName) + If Empty(lcFileName) + Return .F. + Endif + lcClass=Iif(Type("tcClass")=="C",Lower(Alltrim(tcClass)),"") + lcFileName=Lower(Fullpath(lcFileName)) + If Not "."$lcFileName + lcFileName=lcFileName+Iif(Empty(lcClass),".scx",".vcx") + Endif + If Not File(lcFileName) + This.FileNotFoundMsgBox(lcFileName) + Return .F. + Endif + lcFormName=Iif(Empty(lcClass),lcFileName,lcFileName+","+lcClass) + If tlNoMultipleInstances + For lnCount = 1 To This.nformcount + If This.aformnames[lnCount]==lcFormName And ; + TYPE("this.aForms[lnCount]")=="O" And ; + NOT Isnull(This.aforms[lnCount]) + This.aforms[lnCount].Show + Return .F. + Endif + Endfor + Endif + This.RefreshFormsCollection + This.nformcount=This.nformcount+1 + Dimension This.aforms[this.nFormCount],This.aformnames[this.nFormCount] + This.aformnames[this.nFormCount]=lcFormName + If Not Empty(lcClass) + Set Classlib To (lcFileName) Additive + This.aforms[this.nFormCount]=Createobject(lcClass) + If Not tlNoShow And Type("this.aForms[this.nFormCount]")=="O" And ; + NOT Isnull(This.aforms[this.nFormCount]) + This.aforms[this.nFormCount].Show + Endif + Else + Do Form (lcFileName) Name This.aforms[this.nFormCount] Linked Noshow + Endif + lnFormCount=This.nformcount + This.RefreshFormsCollection + If This.lcascadeforms And This.nformcount>=lnFormCount + oForm=This.aforms[this.nFormCount] + lnTop=oForm.Top + lnLeft=oForm.Left + lcName=oForm.Name + If Wexist(lcName) And oForm.WindowState#2 + For lnCount = 1 To (This.nformcount-1) + oForm2=This.aforms[lnCount] + If Type("oForm2")#"O" Or Isnull(oForm2) + Loop + Endif + If lcName==oForm2.Name And Wlrow(lcName)=Wlrow(oForm2.Name) And ; + WLCOL(lcName)=Wlcol(oForm2.Name) + lnTop=lnTop+This.npixeloffset + lnLeft=lnLeft+This.npixeloffset + Endif + Endfor + If oForm.Top#lnTop + oForm.Top=lnTop + Endif + If oForm.Left#lnLeft + oForm.Left=lnLeft + Endif + Endif + Endif + + If !(tlNoShow Or ('LOGIN'$Upper(lcFileName) And This.lParametri)) + This.aforms[this.nFormCount].Show + Endif + Endproc + + Procedure DoMenu + Lparameters tcFileName + Local lcFileName + lcFileName=Alltrim(tcFileName) + If Empty(lcFileName) + Return .F. + Endif + If At('.', lcFileName) = 0 + lcFileName = lcFileName + '.mpr' + ENDIF + + If File(lcFileName) + If Type('This.oLocale') = '0' + This.oLocale.SetMenu(lcFileName,"menu", Null) + Endif + Do &lcFileName + Endif + Endproc + + Procedure ClearEvents + Clear Events + Endproc + +*-- Starts read events mode. + Procedure ReadEvents + This.BeforeReadEvents() + + RETURN + + If This.lreadevents + Read Events + Endif + Endproc + +*-- Sets the caption of the application. + Procedure SetCaption + Lparameters tcCaption + + If Type("tcCaption")#"C" + Return .F. + Endif + This.ccaption=tcCaption + _Screen.Caption=tcCaption + Endproc + + +*-- Sets the icon of the application. + Procedure seticon + Lparameters tcIcon + If Type("tcIcon")#"C" + Return .F. + Endif + This.cicon=tcIcon + _Screen.Icon=tcIcon + Endproc + +*-- Returns the caption of the application. + Procedure getcaption + Return This.ccaption + Endproc + +*-- Returns the icon of the application. + Procedure geticon + Return This.cicon + Endproc + +*-- Occurs when the user attempts to exit Visual FoxPro. + Procedure onShutDown + Local loMesaj + + If This.lQuit + Quit + Endif + + loMesaj=Createobject('frm_mesaj', This.cNumeProgram ,'intreb.ico','INTREBARE','Dorii s ieii din program?') + loMesaj.lbl_mesaj1.FontBold=.T. + loMesaj.lbl_mesaj1.FontSize=12 + loMesaj.lbl_mesaj1.Top=55 + loMesaj.Show(1) + If BUTON=1 + On Shutdown + On Error + *Clear Events + If _vfp.StartMode <> 0 + Quit + Endif + Endif + Endproc + +*-- Release all application forms from memory. + Procedure ReleaseForms + Local lnFormCount + + This.RefreshFormsCollection + Do While This.nformcount>0 + lnFormCount=This.nformcount + If Not This.ReleaseForm(This.aforms[lnFormCount]) Or This.nformcount=lnFormCount + Return .F. + Endif + Enddo + Endproc + + +*-- Release specifc or active form from memory. + Procedure ReleaseForm + Lparameters toForm + + If Parameters()=0 + If Type("_screen.ActiveForm")#"O" Or Isnull(_Screen.ActiveForm) + Return .F. + Endif + _Screen.ActiveForm.Release + Else + If Type("toForm")#"O" Or Isnull(toForm) + Return .F. + Endif + toForm.Release + Endif + This.RefreshFormsCollection + Endproc + + +*-- Reset arrays and counters of forms collection. + Protected Procedure ResetFormsCollection + This.nformcount=0 + Dimension This.aforms[1],This.aformnames[1] + This.aforms=.Null. + This.aformnames="" + Endproc + + +*-- Refresh forms collection arrays and counters. + Procedure RefreshFormsCollection + Local lnCount,lnCount2 + + lnCount=1 + Do While lnCount<=This.nformcount + If Type("this.aForms[lnCount]")=="O" And Not Isnull(This.aforms[lnCount]) + lnCount=lnCount+1 + Loop + Endif + For lnCount2 = lnCount To (This.nformcount-1) + This.aforms[lnCount2]=This.aforms[lnCount2+1] + This.aforms[lnCount2+1]=.Null. + This.aformnames[lnCount2]=This.aformnames[lnCount2+1] + This.aformnames[lnCount2+1]="" + Endfor + This.nformcount=This.nformcount-1 + If This.nformcount=0 + Exit + Endif + Dimension This.aforms[this.nFormCount],This.aformnames[this.nFormCount] + Enddo + If This.nformcount=0 + This.ResetFormsCollection + Endif + Endproc + + Protected Procedure Destroy +* Clear Events +* This.restaureazaEnv() + Endproc + +*-- Method executed before READ EVENTS is executed when ReadEvents is called. + Protected Procedure BeforeReadEvents + Endproc + + Function ErrorHandler + *!* de modificat variabilele globale cu proprietati ale obiectului atunci cand + *!* o sa si actualizez proprietatile coresp. obiectului din schimba_firma, etc. + Lparameters nError,cMethod,nLine + Local lcErrorMsg,lcCodeLineMsg + + Wait Clear + lcErrorMsg=Message()+Chr(13)+Chr(13) + lcErrorMsg=lcErrorMsg+"Metoda: "+cMethod + lcCodeLineMsg=Message(1) + If Between(nLine,1,10000) And Not lcCodeLineMsg="..." + lcErrorMsg=lcErrorMsg+Chr(13)+"Linia: "+Alltrim(Str(nLine)) + If Not Empty(lcCodeLineMsg) + lcErrorMsg=lcErrorMsg+Chr(13)+Chr(13)+lcCodeLineMsg + Endif + ENDIF + lcErrorMsg = m.lcErrorMsg + CHR(13) + CHR(13) + GETCALLSTACK() + + +*!* If Type('This.oMyXMLHTTP') = 'O' +*!* lcLunaHTTP = Iif(Type('gnLuna') = 'N', Transform(gnLuna) + "/","") + Iif(Type('GNAN') = 'N', Transform(gnAn),"") +*!* lcErrorMsgHTTP = Sys(0) + ":" + Iif(Type('GCS')='C'," " + gcS,"") + ": " + lcLunaHTTP + Chr(13) +Chr(10) + lcErrorMsg + ; +*!* CHR(13) +Chr(10) + Chr(13) + Chr(10) + GETCALLSTACK() +*!* lcUserName = gcUserNameApp +*!* lcProgram = Juststem(Sys(16,0)) +*!* This.oMyXMLHTTP.postError(lcErrorMsgHTTP, lcUserName, lcProgram) +*!* Endif + + If aMessagebox(lcErrorMsg,17,_Screen.Caption)#1 + If _vfp.StartMode = 0 + Set Step On + ELSE + ON SHUTDOWN + ON ERROR + Quit + Endif + Endif + Endfunc + + FUNCTION ReadIni + LPARAMETERS tcSection, tcVariable + + lcSection = IIF(!EMPTY(m.tcSection), ALLTRIM(LOWER(m.tcSection)), '') + lcVariable = IIF(!EMPTY(m.tcVariable), ALLTRIM(LOWER(m.tcVariable)), '') + lcValue = '' + + IF TYPE('goApi') = 'O' AND !EMPTY(m.lcSection) AND !EMPTY(m.lcVariable) + lcValue = goAPI.GetProfileString(m.gcSettingsFile, m.lcSection, m.lcVariable) + ENDIF + + RETURN NVL(m.lcValue,'') + ENDFUNC + + PROCEDURE WriteIni + LPARAMETERS tcSection, tcVariable, tcValue + + lcSection = IIF(!EMPTY(m.tcSection), ALLTRIM(LOWER(m.tcSection)), '') + lcVariable = IIF(!EMPTY(m.tcVariable), ALLTRIM(LOWER(m.tcVariable)), '') + lcValue = IIF(!EMPTY(m.tcValue), ALLTRIM(TRANSFORM(m.tcValue)), '') + + IF TYPE('goApi') = 'O' AND !EMPTY(m.lcSection) AND !EMPTY(m.lcVariable) + goAPI.WriteProfileString(m.gcSettingsFile, m.lcSection, m.lcVariable, m.lcValue) + ENDIF + ENDPROC + +ENDDEFINE diff --git a/COMUN/programe/roa/roa.prg b/COMUN/programe/roa/roa.prg new file mode 100644 index 0000000..10a714e --- /dev/null +++ b/COMUN/programe/roa/roa.prg @@ -0,0 +1,1082 @@ +Define Class RoaApp As Custom + + Dimension aVersiune[12] + Dimension aforms[1] && Forms collection for application object. + Dimension aformnames[1] && Form name collection for application object. + + lParametri = .F. + cHost = Null + cUserName = Null + cPassword = Null + nIdUtil = 0 + nIdProgram = 0 + nAn = 0 + nLuna = 0 + cSchema = Null + nIdFirma = 0 + cLastSetTalk = Null + cLastSetPath = Null + cLastSetClassLib = Null + cMainClassLib = Null + + cNumeProgram = Null + cAppName = Null + cAppPath = Null + cUtilizatoriPath = Null + cDirMare = Null + + cLocalePath = Null + lTraducere = .F. + oLocale = Null + + cGeneralIniFile = Null + cSecurityFile = Null + lnewcryptxml = .T. + lnewcryptfll = .T. + + lQuit = .F. + + oLog = Null + oExecutor = Null + oConn = Null + oMyXMLHTTP = Null + oBaraFavorite = Null + oBaraManual = Null + oCalendar = Null + oExport = Null + + lFontCharSet = .F. + + cStartUpForm = "" + cStartUpMenu = "" && Menu (MPR) which is executed when the application object is shown. + Protected ccaption + ccaption = "" && Caption of the application object. + Protected cicon + cicon = "" && Icon of the application object. + Protected clasticon + clasticon = "" && Last icon setting of _screen before application object was intantiated. + Protected clastcaption + clastcaption = "" && Last caption setting of _screen before application object was intantiated. + nformcount = 0 && Forms collection count for application object. + npixeloffset = 22 && Number of pixels which offset multiple instances of the same form. + lcascadeforms = .T. && Specifies whether forms are cascaded if multiple instances of the same form are opened in the same top and left positions of the desktop. + lreadevents = .T. && Enable READ EVENTS within ReadEvents method. + Name = "roaapplication" + + Function initializeaza + Lparameters tParametri,tcNumeProgram,tcMainClassLib + Local llReturn + llReturn = .F. + This.ResetFormsCollection() + This.cNumeProgram = tcNumeProgram + This.cMainClassLib = tcMainClassLib + If This.verificaProgram() + If This.citesteParametri(tParametri) + This.initializeazaFunctiiWin() + This.initializeazaEnv() + This.initializeazaCai() + This.initializeazaClassLib() + This.initializeazaProceduri() + This.initializeazaSettingsIni() + This.initializeazaSecurity() + This.initializeazaReportPreviewer() + This.initializeazaLocale() + This.initializeazaVariabile() + This.initializeazaVariabileGlobale() + This.initializeazaObiecte() + This.initializeazaObiecteGlobale() + llReturn = .T. + Endif + Endif + Return llReturn + Endfunc + + Function verificaProgram + Local llReturn + llReturn = .T. + If !Like(This.cNumeProgram + '*', Upper(Alltrim(Juststem(Sys(16,0))))) + Messagebox("Nu puteti porni acest program!",0+16,"Atentie") + llReturn = .F. + Else + _Screen.Icon=This.cNumeProgram + [.ICO] + Endif + Return llReturn + Endfunc + + Procedure initializeazaFunctiiWin + Declare Integer GetShortPathName In Win32API; + STRING @lpszLongPath, String @lpszShortPath,; + INTEGER cchBuffer + Declare Integer GetPrivateProfileString In Kernel32 ; + string, String, String, String @, Integer, String + Declare Integer WritePrivateProfileString In Kernel32 ; + string, String, String, String + Declare Integer CopyFile In kernel32; + STRING lpExistingFileName,; + STRING lpNewFileName,; + INTEGER bFailIfExists + Declare Integer URLDownloadToFile In urlmon.Dll; + INTEGER pCaller, String szURL, String szFileName,; + INTEGER dwReserved, Integer lpfnCB + Declare Integer PathFileExists In shlwapi; + STRING pszPath + Endproc + + Function ShortPath + Lparameter tcPath + Local lcPath, lcShortName, lnLength, lnResult + lcPath = tcPath + lcShortName = Space(260) + lnLength = Len(lcShortName) + lnResult = GetShortPathName(@lcPath, @lcShortName, lnLength) + If lnResult = 0 + Return "" + Endif + Return Left(lcShortName,lnResult) + Endfunc + + Function GetAppStartPath + Local lcPath + Do Case +*** VFP 6 provides ServerName property for COM servers EXE/DLL/MTDLL + Case Inlist(Application.StartMode,2,3,5) + lcPath = Justpath(Application.ServerName) +*!* *** Interactive +*!* CASE (Application.StartMode) = 0 +*!* lcPath = SYS(5) + CURDIR() +*** Active Document + Case Atc(".APP",Sys(16,0)) > 0 + lcPath = Justpath(Sys(16,0)) +*** Standalone EXE or VFP Development + Otherwise + lcPath = Justpath(Sys(16,0)) + If Atc("PROCEDURE",lcPath) > 0 + lcPath = Substr(lcPath,Rat(":",lcPath)-1) + Endif + Endcase + Return Addbs(lcPath) + Endfunc + + Procedure lista2array + Lparameters tcLISTA,taArray,tcSeparator +&& tcLista este un sir de caractere care contine elementele separate prin <;> default +&& tarray este vectorul care se completeaza - trebuie dat prin referinta +&& tcSeparator separatorul de elemente din tcLista - default este ";" - este optional +&& intoarce numarul de elemente gasite +&& ex: lnNr = lista2array("ana;are;mere",@alista,";") + External Array taArray + Local Lclista,lcSeparator,lnNRF,lcF1,i + lnNRF = 0 + + Lclista=Allt(tcLISTA) + If Parameters()<3 Or Empty(tcSeparator) + lcSeparator=";" + Else + lcSeparator=Alltrim(tcSeparator) + Endif + + If Right(Lclista,1)!=lcSeparator + Lclista=Lclista+lcSeparator + Endif + + lnNRF=Occurs(lcSeparator,Lclista) + + If lnNRF>0 + Dimension taArray[lnNrf,1] + + For i=1 To lnNRF + lcF1=Left(Lclista,At(lcSeparator,Lclista)-1) + + If i!=lnNRF + Lclista=Substr(Lclista,At(lcSeparator,Lclista)+1) + Endif + + taArray[i]=lcF1 + Endfor + Else + lnNRF = 0 + Endif + + Return lnNRF + + Endproc && lista2array + + Function citesteParametri + Lparameters tParametri + Local llReturn, lcParametri, lnNr + Private paParametri + Declare paParametri[1] + llReturn = .T. + If Type('tParametri') = 'C' + This.lParametri = .T. + lcParametri = Alltrim(tParametri) + lnNr = This.lista2array(lcParametri,@paParametri,";") + Do Case + Case lnNr < 5 + aMessagebox('Numar incorect de parametri',0+16,'Eroare') + llReturn = .F. + Case Type('paParametri',1)<>"A" + llReturn = .F. + Otherwise + This.cHost = paParametri[1] + This.cUserName = paParametri[2] + This.cPassword = paParametri[3] + This.nIdUtil = Round(Val(paParametri[4]),0) + This.nIdProgram = Round(Val(paParametri[5]),0) + If Alen(paParametri,1)=10 + This.nAn = Val(paParametri[7]) + This.nLuna = Val(paParametri[8]) + This.cSchema = paParametri[9] + This.nIdFirma = Val(paParametri[10]) + Endif + Endcase + Else + This.lParametri = .F. + This.cHost = '' + This.cUserName = '' + This.cPassword = '' + This.nIdUtil = 0 + This.nIdProgram = 0 + This.nAn = 0 + This.nLuna = 0 + This.cSchema = '' + This.nIdFirma = -1 + Endif + Release paParametri, lcParametri, lnNr + Return llReturn + Endfunc + + Procedure initializeazaEnv + This.cLastSetTalk = Set("TALK") + This.clastcaption=_Screen.Caption + This.clasticon=_Screen.Icon + This.lFontCharSet = AFONT(laFontCharSet,"Arial Narrow",238) + + Push Menu _Msysmenu + Set Century On + Set Deleted On + Set Date To Dmy + Set Exclusive Off + Set Cpdialog Off + Set Talk Off + Set Safety Off + Set Escape Off + Set Exact On + Set Mark To '/' + Set Ansi On + Set Console Off + Set Notify Off + Set Seconds Off + Set NullDisplay To '' + Set Decimals To 4 + Set Point To '.' + SET HOURS TO 24 + Set SQLBUFFERING On + _Screen.Visible=.F. + _Screen.AutoCenter=.T. + + On Shutdown do goRoa.onShutDown() + On Error goRoa.ErrorHandler(Error(),Program(),Lineno()) + Endproc + + Procedure restaureazaEnv + On Error + On Shutdown + If Not Empty(This.clastcaption) And Not _Screen.Caption==This.clastcaption + _Screen.Caption=This.clastcaption + Endif + If Not Empty(This.clasticon) And Not _Screen.Icon==This.clasticon + _Screen.Icon=This.clasticon + Endif + If Not This.cLastSetClassLib==Set("classlib") + Release Classlib (This.cMainClassLib) + Endif + If Empty(This.cLastSetPath) + Set Path To + Else + Set Path To (This.cLastSetPath) + Endif + If This.cLastSetTalk=="ON" + Set Talk On + Else + Set Talk Off + Endif + + If Cntbar("_msysmenu")=7 + Return + Endif + Set Classlib To + Set Path To + Clear All +* Close All + Pop Menu _Msysmenu + Endproc + + Procedure initializeazaCai + This.cLastSetPath=Set("PATH") + This.cAppPath = Addbs(This.ShortPath(This.GetAppStartPath())) + If Right(This.cAppPath ,9)="PROGRAME\" + This.cAppPath = Substr(This.cAppPath ,1,Len(This.cAppPath )-9) + Endif + This.cAppName=Allt(Uppe(Juststem(Sys(16,0)))) + This.cUtilizatoriPath = This.cAppPath + "UTILIZATORI\" + This.cDirMare = Addbs(Left(This.cAppPath,Rat("\",This.cAppPath,2)-1)) + + Set Default To (This.cAppPath) + lcPath = This.cAppPath + 'Date;' + ; + This.cAppPath + 'Include;' + ; + This.cAppPath + 'FERESTRE;' + ; + This.cAppPath + 'GRAFICE;' + ; + This.cAppPath + 'CLASE;' + ; + This.cAppPath + 'MENIURI;' + ; + This.cAppPath + 'PROGRAME;' + ; + This.cAppPath + 'RAPOARTE;' + ; + This.cAppPath + 'COMUN\CLASE;' + ; + This.cAppPath + 'COMUN\FERESTRE;' + ; + This.cAppPath + 'COMUN\PROGRAME;' + ; + This.cAppPath + 'COMUN\GRAFICE;' + ; + This.cAppPath + 'COMUN\RAPOARTE;' + ; + This.cAppPath + 'COMUN\UTILE\CTL32;' + ; + This.cAppPath + 'COMUN\UTILE\HPDF;' + ; + This.cAppPath + 'COMUN\UTILE\HPDF\REPORTOUTPUT;' + ; + This.cAppPath + 'COMUN\UTILE\WEB;' + ; + This.cDirMare + 'COMUNROA\' + + Set Path To &lcPath Additive + This.initializeazaAlteCai() + Endproc + + Procedure initializeazaAlteCai +*!* suprascrisa in fiecare aplicatie care are cai suplimentare +*!* la sfarsit trebuie sa aiba SET PATH TO ... ADDITIVE + Endproc + + Procedure initializeazaClassLib + This.cLastSetClassLib=Set("CLASSLIB") + If !Empty(Nvl(This.cMainClassLib,[])) + Set Classlib To (This.cMainClassLib) Additive + Endif +*!* _ + Set Classlib To _calendar.vcx Additive +*!* A + Set Classlib To appwiz Additive + Set Classlib To accessibility Additive +*!* B + Set Classlib To baza Additive +*!* C + Set Classlib To CAUT Additive + Set Classlib To caut_ora Additive + Set Classlib To cauta_alfa_forms Additive +*!* D + Set Classlib To decabaza Additive +*!* F + Set Classlib To ferestre_cere_date Additive + Set Classlib To ferestre_oracle Additive +*!* L + Set Classlib To locale Additive +*!* M + Set Classlib To Messagebox Additive +*!* O + Set Classlib To ofirma Additive + Set Classlib To onom_sal Additive + Set Classlib To onomenclatoare Additive + Set Classlib To ooptiuni Additive + Set Classlib To opersonal Additive + Set Classlib To otoolbar Additive +*!* R + Set Classlib To registry Additive +*!* W + Set Classlib To wwdialogs Additive + + This.initializeazaAlteClassLib() + + Set Library To (This.cDirMare+[COMUNROA\vfpencryption.fll]) Additive + Endproc + + + Procedure initializeazaAlteClassLib +*!* suprascrisa in fiecare aplicatie care are clase suplimentare + Endproc + + Procedure initializeazaProceduri +*!* _ + Set Procedure To _libpdf Additive +*!* A + Set Procedure To acces_meniu Additive +*!* B + Set Procedure To build_err_msgs Additive +*!* C + Set Procedure To cauta_alfa Additive +*!* F + Set Procedure To filebringer Additive + Set Procedure To frxoutput Additive +*!* G + Set Procedure To gencursor Additive +*!* I + Set Procedure To ini Additive + Set Procedure To iniacces Additive + Set Procedure To init_program Additive +*!* O + Set Procedure To ocautare Additive + Set Procedure To oExport Additive + Set Procedure To oinit_optiuni Additive + Set Procedure To onomenclatoare Additive + Set Procedure To ooperatii_comune Additive + Set Procedure To oproceduri_ams Additive + Set Procedure To oproceduri_comune Additive + Set Procedure To oproceduri_maintenance Additive + Set Procedure To osecurity Additive + Set Procedure To oupdate Additive +*!* P + Set Procedure To pdflistener Additive + Set Procedure To proceduri_comune Additive + Set Procedure To proceduri_Excel Additive + Set Procedure To procese.prg Additive +*!* Q + Set Procedure To quitapp Additive + Set Procedure To updateserver Additive +*!* V + Set Procedure To validare Additive + Set Procedure To Version Additive +*!* W + Set Procedure To This.cAppPath + "\COMUN\UTILE\web\WWAPI.PRG" Additive + Set Procedure To wwconfig Additive + Set Procedure To wwcodeupdate Additive + Set Procedure To wwhttp Additive + Set Procedure To This.cAppPath + "\COMUN\UTILE\web\WWUTILS.PRG" Additive + Set Procedure To wwxmlhttp Additive +*!* X + Set Procedure To xmlaccess Additive + Set Procedure To xmlparser Additive + + This.initializeazaAlteProceduri() + Endproc + + Procedure initializeazaAlteProceduri +*!* suprascrisa in fiecare aplicatie care are proceduri suplimentare + Endproc + + Procedure initializeazaLocale + Local lcObjLocale, lcLanguage, llLocale, lcLocale, lcLocalePath + lcLocalePath = This.cAppPath + "Locale\" + If Directory(lcLocalePath) + This.cLocalePath = lcLocalePath + This.lTraducere = .F. + Endif + lcLanguage = getini(This.cGeneralIniFile,"locale","lang") + llLocale = getini(This.cGeneralIniFile,"locale","llocale") + If Empty(lcLanguage) + lcLocale = 'Romana' + lcObjLocale = [Locale_dummy] + Else + lcLocale = lcLanguage + lcObjLocale = [Locale] + Endif + This.oLocale=Newobject(lcObjLocale,"Locale.vcx") + If !Empty(llLocale) And llLocale<>'0' + This.oLocale.llocale=.T. + Endif + This.oLocale.locale = lcLocale + Release lcObjLocale, lcLanguage, llLocale, lcLocale, lcLocalePath + Endproc + + Procedure initializeazaReportPreviewer + This.cReportPreviewer = "FoxyPreview" + This.cReportPreviewerPath = This.cDirMare + "COMUNROA\" + Endproc + + Procedure initializeazaSettingsIni + Local lcSettings + This.cGeneralIniFile = This.cDirMare + "settings.ini" + If !File(This.cGeneralIniFile) + TEXT TO lcSettings NOSHOW +[errors] +host=http://83.103.197.79:3000/errors/create_xml + ENDTEXT + + Strtofile(lcSettings, This.cGeneralIniFile) + Endif + Release lcSettings + Endproc + + Procedure initializeazaSecurity + Local lnValid + This.cSecurityFile = This.cDirMare + 'Security\ROA_SECURITY.TXT' + If !This.lParametri + lnValid = This.getcrsSecurity() + If lnValid > 0 + If Used('crsHost') + Select crsHost + Go Top + This.cHost = Alltrim(Host) + This.cUserName = Alltrim(schema) + This.cPassword = Alltrim(pwd) + Use In crsHost + Endif + Endif + Endif + Release lnValid + Endproc + + Procedure initializeazaObiecte + This.oLog = Newobject("Log_Mesaje","Log_Mesaje.prg") + This.oExecutor = Createobject("oExecutor") + This.oConn = Createobject("oConn") + This.oExport = Createobject("oExportConfig") + This.oMyXMLHTTP = Createobject("MyXMLHTTP", getini(This.cGeneralIniFile,'errors','host')) + This.oBaraFavorite = Null + This.oBaraManual = Null + This.oCalendar = Null + Endproc + + Procedure initializeazaVariabile +*!* Public CRLF,CR,LF,Tab + CR=Chr(13) + LF=Chr(10) + CRLF = CR + LF + Tab=Chr(9) + Agetfileversion(This.aVersiune,Sys(16,0)) + This.SetCaption(Iif(Alen(This.aVersiune,1)<10,This.cNumeProgram,This.aVersiune(10))) + This.cStartUpMenu = This.cAppPath + "meniu\" + This.cNumeProgram + This.cStartUpForm = This.cAppPath + "comun\ferestre\frm_login.scx" + Endproc + + Procedure initializeazaVariabileGlobale +*!* Public gcNumeProgram, NUMEPROGRAM, MENIUPROGRAM, FUNDALPROGRAM + gcNumeProgram = This.cNumeProgram + _program = This.cNumeProgram + NUMEPROGRAM = This.ccaption + MENIUPROGRAM = This.cStartUpMenu + +*!* Public pcNl, pcAn, gcAcces, gcAppPath, gcAppName, gcUtilizatoriPath, gcDirMare, DIRGEN, gcTempPath, ; +*!* glParametri, gcHost, gcUsername, gcPassword, gcUserNameApp, gcPasswordApp, gnIdUtil, gnIdProgram, ; +*!* gnAn, gnLuna, gcS, gnIdFirma, gcGeneralIniFile, gcSecurityFile, gnHandle, gnButon, BUTON, gcFirma, gcBasePath + Store "" To pcNl,pcAn && se initializeaza in start00 + gcAcces = [] + gcAppPath = This.cAppPath + gcAppName = This.cAppName + gcUtilizatoriPath = This.cUtilizatoriPath + gcDirMare = This.cDirMare + gcComunPath = This.cDirMare+[COMUNROA\] + DIRGEN = This.cDirMare + gcBasePath = This.cDirMare + gcTempPath = [] && o citesc in oinit_optiuni.prg + glParametri = This.lParametri + gcHost = This.cHost + gcUsername = This.cUserName + gcPassword = This.cPassword + gcUserNameApp = [] && le citesc in frm_login + gcPasswordApp = [] && + gnIdUtil = This.nIdUtil + gnIdProgram = This.nIdProgram + gnAn = This.nAn + gnLuna = This.nLuna + gcS = This.cSchema + gnIdFirma = This.nIdFirma + If !Empty(Nvl(This.cLocalePath,[])) + Private gcLocalePath, goLocale, glTraducere + gcLocalePath = This.cLocalePath + glTraducere = This.lTraducere + goLocale = This.oLocale + Endif + gcLocale = This.oLocale.locale + gcGeneralIniFile = This.cGeneralIniFile + gcSettingsFile = This.cGeneralIniFile + gcSecurityFile = This.cSecurityFile + gnHandle = -1 + gnButon = 2 + BUTON = 2 + gcFirma = [] + glFontCharSet = This.lFontCharSet + gcReportPreviewer = This.cReportPreviewer + gcReportPreviewerPath = This.cReportPreviewerPath + +*!* Private gcCopyRight, pcTitlu + pcTitlu = [] + gcCopyRight = ' ROA Romfast SRL' + +*!* Private glUltimaLuna, glPrimaLuna, glLunaBuna, glLuna_neplatita, glLunaInchisa +*!* Private glQuit, pl_verificat + Store .F. To glUltimaLuna, glPrimaLuna, glLunaBuna, glLuna_neplatita, glLunaInchisa + Store .F. To glQuit, pl_verificat + +*!* Public gnewcryptfll, gnewcryptxml, gTransferTotal + Store -1 To gTransferTotal + gnewcryptfll = This.lnewcryptfll + gnewcryptxml = This.lnewcryptxml +&& ALTELE +*!* Declare nror[65000] +*!* Declare RTVA[22,2] +*!* Public luna_inchisa, luna_neplatita, PRIMADATA, m.ctva, m.ctvam, m.ctvai, antet, m.nivel +*!* Public OStart,OSETVIZ,OSETTULBAR,OSETINSTRUM,orm,OTEXT,OJUR,osetgest,tlbr_INSTR,tlbr_VIZ,oprinc +*!* Public pcapsocsub,pcapsocvar + pcapsocsub=0 + pcapsocvar=0 +*!* Public a4 + a4=.T. + m.nrgrup=999 + + Store .F. To luna_inchisa,tlbr_INSTRum,tlbr_VIZ + Store 1 To col_menu + Store .T. To PRIMADATA,luna_neplatita + + This.initializeazaAlteVariabileGlobale() + Endproc + + Procedure initializeazaAlteVariabileGlobale +*!* suprascrisa in fiecare aplicatie care are variabile globale suplimentare + Endproc + + Procedure initializeazaObiecteGlobale +*!* Private poLog, goLog, oTool, oHelp, goExecutor, goConn, goMyXMLHTTP, goCalendar, goExport, goUtilizator, goFundal, goFirma + poLog = This.oLog + goLog = This.oLog + oTool = This.oBaraFavorite + oHelp = This.oBaraManual + goExecutor = This.oExecutor + goConn = This.oConn + goMyXMLHTTP = This.oMyXMLHTTP + goCalendar = This.oCalendar + goExport = This.oExport + goUtilizator = Null + goFundal = Null + goFirma = Null + + This.initializeazaAlteObiecteGlobale() + Endproc + + Procedure initializeazaAlteObiecteGlobale +*!* suprascrisa in fiecare aplicatie care are obiecte globale suplimentare + Endproc + + Procedure lanseazaAplicatie + _Screen.Visible = .T. + _Screen.WindowState=2 + This.DoMenu(This.cStartUpMenu) + This.DoForm(This.cStartUpForm) + This.ReadEvents() + Endproc + + Procedure getcrsSecurity + Lparameters tcSecurityFile +*!* SECURITY.TXT - NECRIPTAT +*!* SECURITY.XML - CRIPTAT +*!* DACA EXISTA SECURITY.XML - PARSEZ XML, ALTFEL PARSEZ TXT +*!* gnewcryptxml - daca roa_security.xml are criptare noua(blowfish) +*!* gnewcryptfll - daca exista vfpencryption.fll +*!* 19.05.2009 +*!* nu mai exista fisiere roa_security.xml cu criptarea veche (windows api) +*!* gnewcryptxml=.F. + + Local lcSecurityFile, lcSecurityPath, lcCursor, lnValid, llSucces, lcSecurityFileXML + lcCursor = "crsHost" + If !Empty(tcSecurityFile) + lcSecurityFile = tcSecurityFile + Else + lcSecurityFile = This.cSecurityFile + Endif + lcSecurityFileXML = Forceext(lcSecurityFile,'xml') + lcSecurityPath = Addbs(Justpath(lcSecurityFile)) + lnValid = 0 + llSucces = .T. + If !Directory(lcSecurityPath) + Try + Md (lcSecurityPath) + Catch + aMessagebox('Nu se poate crea directorul ' + lcSecurityPath + '!',0+16,'Atentie') + Endtry + Endif + + If !(File(lcSecurityFile) Or File(lcSecurityFileXML)) + Cd (lcSecurityPath) + If !File(lcSecurityFileXML) + lcSecurityText = 'ROA;CONTAFIN_ORACLE;123;' + lcSecurityText = Inputbox('Host(DSN);SCHEMA;SCHEMA_PASSWORD;1;','Server',lcSecurityText) + lcSecurityText = Alltrim(lcSecurityText) + If !Empty(lcSecurityText) + If Right(lcSecurityText,1) # ';' + lcSecurityText = lcSecurityText + ';' + Endif + Else + llSucces = .F. + Endif + Endif + + If llSucces + Try + If !(File(lcSecurityFileXML) Or File(lcSecurityFile)) +*!* SECURITY.TXT + Strtofile(lcSecurityText, lcSecurityFile) +*!* SECURITY.TXT ^ + Endif +*!* SECURITY.XML + If !File(lcSecurityFileXML) + Create Cursor cXML (Host c(50), schema c(50), pwd c(50)) + Insert Into cXML (Host, schema, pwd) Values("ROA","CONTAFIN_ORACLE","ENCRYPTED PWD") + Cursortoxml("cXML",lcSecurityFileXML, 1, 512, 0, "1") + Use In cXML + Endif +*!* SECURITY.XML ^ + Catch + aMessagebox('Nu s-a putut crea fisierul ' + lcSecurityFile,0+16,'Atentie') + llSucces = .F. + Endtry + Endif + Endif + + If llSucces + If !File(lcSecurityFile) And !File(lcSecurityFileXML) + aMessagebox('Nu exista fisierul ' + lcSecurityFile,0+16,'Atentie') + llSucces = .F. + Endif + Endif + + If llSucces + If Used(lcCursor) + Use In (lcCursor) + Endif + +&& daca exista security.xml - il transform in cursorul cXML si completez crsHost + Create Cursor (lcCursor)(Host c(100), schema c(100), pwd v(100), IsEncrypted c(1)) + If File(lcSecurityFileXML) + Try + lcSecurityText = Filetostr(lcSecurityFileXML) + Xmltocursor(lcSecurityFileXML, "cXML", 512) + Select cXML + Go Top + Scatter Name lofirstrecord + + If lofirstrecord.Host="ENCRYPTION" + This.lnewcryptxml=.T. + Delete + Else + This.lnewcryptxml=.F. + Endif + + Insert Into (lcCursor) (Host, schema, pwd, IsEncrypted) ; + SELECT Host, schema, pwd, "1" As IsEncrypted ; + FROM cXML + lnValid = Reccount('cXML') + + Use In cXML + Catch To loex + This.ErrorHandler(loex.ErrorNo,loex.Procedure,loex.Lineno) + Finally + Use In (Select('cXML')) + Endtry + + Else +* CREATE CURSOR (lcCursor)(HOST c(100), Schema c(100), Pwd v(100), IsEncrypted c(1)) + lcSecurityText = Filetostr(lcSecurityFile) + Local laHost + Dimension laHost[1] + + lnLen = Alines(laHost, lcSecurityText) + + If lnLen > 0 + For i = 1 To lnLen + lcLinie = laHost[i] + + lcHost = Getwordnum(lcLinie, 1, ';') + lcSchema = Getwordnum(lcLinie, 2, ';') + lcPassword = Getwordnum(lcLinie, 3, ';') + lcMode = "0" && necriptat - security.txt + + If Empty(lcHost) Or Empty(lcSchema) Or Empty(lcPassword) + Loop + Endif + + lnValid = lnValid + 1 + Insert Into &lcCursor (Host, schema, pwd, IsEncrypted) Values (lcHost, lcSchema, lcPassword, Iif(Empty(lcMode), '0', lcMode)) + Endfor + Endif + Endif + Endif + + Return lnValid + Endproc + + Procedure Release + If Not This.ReleaseForms() + Return .F. + Endif + This.ClearEvents() + Release This + Endproc + +*-- Executes an SCX form. + Procedure DoForm + Lparameters tcFileName,tcClass,tlNoMultipleInstances,tlNoShow + Local lcFileName,lcClass,oForm,oForm2,lcName,lnCount,lnTop,lnLeft + Local lcFormName,lnFormCount + _Screen.Visible=.T. + lcFileName=Alltrim(tcFileName) + If Empty(lcFileName) + Return .F. + Endif + lcClass=Iif(Type("tcClass")=="C",Lower(Alltrim(tcClass)),"") + lcFileName=Lower(Fullpath(lcFileName)) + If Not "."$lcFileName + lcFileName=lcFileName+Iif(Empty(lcClass),".scx",".vcx") + Endif + If Not File(lcFileName) + This.FileNotFoundMsgBox(lcFileName) + Return .F. + Endif + lcFormName=Iif(Empty(lcClass),lcFileName,lcFileName+","+lcClass) + If tlNoMultipleInstances + For lnCount = 1 To This.nformcount + If This.aformnames[lnCount]==lcFormName And ; + TYPE("this.aForms[lnCount]")=="O" And ; + NOT Isnull(This.aforms[lnCount]) + This.aforms[lnCount].Show + Return .F. + Endif + Endfor + Endif + This.RefreshFormsCollection + This.nformcount=This.nformcount+1 + Dimension This.aforms[this.nFormCount],This.aformnames[this.nFormCount] + This.aformnames[this.nFormCount]=lcFormName + If Not Empty(lcClass) + Set Classlib To (lcFileName) Additive + This.aforms[this.nFormCount]=Createobject(lcClass) + If Not tlNoShow And Type("this.aForms[this.nFormCount]")=="O" And ; + NOT Isnull(This.aforms[this.nFormCount]) + This.aforms[this.nFormCount].Show + Endif + Else + Do Form (lcFileName) Name This.aforms[this.nFormCount] Linked Noshow + Endif + lnFormCount=This.nformcount + This.RefreshFormsCollection + If This.lcascadeforms And This.nformcount>=lnFormCount + oForm=This.aforms[this.nFormCount] + lnTop=oForm.Top + lnLeft=oForm.Left + lcName=oForm.Name + If Wexist(lcName) And oForm.WindowState#2 + For lnCount = 1 To (This.nformcount-1) + oForm2=This.aforms[lnCount] + If Type("oForm2")#"O" Or Isnull(oForm2) + Loop + Endif + If lcName==oForm2.Name And Wlrow(lcName)=Wlrow(oForm2.Name) And ; + WLCOL(lcName)=Wlcol(oForm2.Name) + lnTop=lnTop+This.npixeloffset + lnLeft=lnLeft+This.npixeloffset + Endif + Endfor + If oForm.Top#lnTop + oForm.Top=lnTop + Endif + If oForm.Left#lnLeft + oForm.Left=lnLeft + Endif + Endif + Endif + + If !(tlNoShow Or ('LOGIN'$Upper(lcFileName) And This.lParametri)) + This.aforms[this.nFormCount].Show + Endif + Endproc + + Procedure DoMenu + Lparameters tcFileName + Local lcFileName + lcFileName=Alltrim(tcFileName) + If Empty(lcFileName) + Return .F. + Endif + If At('.', lcFileName) = 0 + lcFileName = lcFileName + '.mpr' + Endif + If File(lcFileName) + If Type('This.oLocale') = '0' + This.oLocale.SetMenu(lcFileName,"menu", Null) + Endif + Do &lcFileName + Endif + Endproc + + Procedure ClearEvents + Clear Events + Endproc + +*-- Starts read events mode. + Procedure ReadEvents + This.BeforeReadEvents() + If This.lreadevents + Read Events + Endif + Endproc + +*-- Sets the caption of the application. + Procedure SetCaption + Lparameters tcCaption + + If Type("tcCaption")#"C" + Return .F. + Endif + This.ccaption=tcCaption + _Screen.Caption=tcCaption + Endproc + + +*-- Sets the icon of the application. + Procedure seticon + Lparameters tcIcon + If Type("tcIcon")#"C" + Return .F. + Endif + This.cicon=tcIcon + _Screen.Icon=tcIcon + Endproc + +*-- Returns the caption of the application. + Procedure getcaption + Return This.ccaption + Endproc + +*-- Returns the icon of the application. + Procedure geticon + Return This.cicon + Endproc + +*-- Occurs when the user attempts to exit Visual FoxPro. + Procedure onShutDown + Local loMesaj + + If This.lQuit + Quit + Endif + + loMesaj=Createobject('frm_mesaj', This.cNumeProgram ,'intreb.ico','INTREBARE','Dorii s ieii din program?') + loMesaj.lbl_mesaj1.FontBold=.T. + loMesaj.lbl_mesaj1.FontSize=12 + loMesaj.lbl_mesaj1.Top=55 + loMesaj.Show(1) + If BUTON=1 + On Shutdown + On Error + Clear Events + If _vfp.StartMode <> 0 + Quit + Endif + Endif + Endproc + +*-- Release all application forms from memory. + Procedure ReleaseForms + Local lnFormCount + + This.RefreshFormsCollection + Do While This.nformcount>0 + lnFormCount=This.nformcount + If Not This.ReleaseForm(This.aforms[lnFormCount]) Or This.nformcount=lnFormCount + Return .F. + Endif + Enddo + Endproc + + +*-- Release specifc or active form from memory. + Procedure ReleaseForm + Lparameters toForm + + If Parameters()=0 + If Type("_screen.ActiveForm")#"O" Or Isnull(_Screen.ActiveForm) + Return .F. + Endif + _Screen.ActiveForm.Release + Else + If Type("toForm")#"O" Or Isnull(toForm) + Return .F. + Endif + toForm.Release + Endif + This.RefreshFormsCollection + Endproc + + +*-- Reset arrays and counters of forms collection. + Protected Procedure ResetFormsCollection + This.nformcount=0 + Dimension This.aforms[1],This.aformnames[1] + This.aforms=.Null. + This.aformnames="" + Endproc + + +*-- Refresh forms collection arrays and counters. + Procedure RefreshFormsCollection + Local lnCount,lnCount2 + + lnCount=1 + Do While lnCount<=This.nformcount + If Type("this.aForms[lnCount]")=="O" And Not Isnull(This.aforms[lnCount]) + lnCount=lnCount+1 + Loop + Endif + For lnCount2 = lnCount To (This.nformcount-1) + This.aforms[lnCount2]=This.aforms[lnCount2+1] + This.aforms[lnCount2+1]=.Null. + This.aformnames[lnCount2]=This.aformnames[lnCount2+1] + This.aformnames[lnCount2+1]="" + Endfor + This.nformcount=This.nformcount-1 + If This.nformcount=0 + Exit + Endif + Dimension This.aforms[this.nFormCount],This.aformnames[this.nFormCount] + Enddo + If This.nformcount=0 + This.ResetFormsCollection + Endif + Endproc + + Protected Procedure Destroy + Clear Events + This.restaureazaEnv() + Endproc + +*-- Method executed before READ EVENTS is executed when ReadEvents is called. + Protected Procedure BeforeReadEvents + Endproc + + Function ErrorHandler + *!* de modificat variabilele globale cu proprietati ale obiectului atunci cand + *!* o sa si actualizez proprietatile coresp. obiectului din schimba_firma, etc. + Lparameters nError,cMethod,nLine + Local lcErrorMsg,lcCodeLineMsg + + Wait Clear + lcErrorMsg=Message()+Chr(13)+Chr(13) + lcErrorMsg=lcErrorMsg+"Metoda: "+cMethod + lcCodeLineMsg=Message(1) + If Between(nLine,1,10000) And Not lcCodeLineMsg="..." + lcErrorMsg=lcErrorMsg+Chr(13)+"Linia: "+Alltrim(Str(nLine)) + If Not Empty(lcCodeLineMsg) + lcErrorMsg=lcErrorMsg+Chr(13)+Chr(13)+lcCodeLineMsg + Endif + Endif + + If Type('This.oMyXMLHTTP') = 'O' + lcLunaHTTP = Iif(Type('gnLuna') = 'N', Transform(gnLuna) + "/","") + Iif(Type('GNAN') = 'N', Transform(gnAn),"") + lcErrorMsgHTTP = Sys(0) + ":" + Iif(Type('GCS')='C'," " + gcS,"") + ": " + lcLunaHTTP + Chr(13) +Chr(10) + lcErrorMsg + ; + CHR(13) +Chr(10) + Chr(13) + Chr(10) + GETCALLSTACK() + lcUserName = gcUserNameApp + lcProgram = Juststem(Sys(16,0)) + This.oMyXMLHTTP.postError(lcErrorMsgHTTP, lcUserName, lcProgram) + Endif + + If aMessagebox(lcErrorMsg,17,_Screen.Caption)#1 + If _vfp.StartMode = 0 + Set Step On + Else + Quit + Endif + Endif + Endfunc + +Enddefine \ No newline at end of file diff --git a/COMUN/programe/roa/roaapp.prg.tmpl b/COMUN/programe/roa/roaapp.prg.tmpl new file mode 100644 index 0000000..c891928 --- /dev/null +++ b/COMUN/programe/roa/roaapp.prg.tmpl @@ -0,0 +1,64 @@ +Parameters tParametri +*!* obiecte globale +Private poLog, goLog, oTool, oHelp, goExecutor, goConn, goMyXMLHTTP, goCalendar, goExport, goUtilizator, goFundal, goFirma, goApp +Store "" To poLog, goLog, oTool, oHelp, goExecutor, goConn, goMyXMLHTTP, goCalendar, goExport, goUtilizator, goFundal, goFirma, goApp + +Private gcLocalePath, goLocale, gcLocale +STORE "" TO gcLocalePath, goLocale, gcLocale + +*!* variabile globale +Public CRLF,CR,LF,Tab +Public gcNumeProgram, NUMEPROGRAM, MENIUPROGRAM, FUNDALPROGRAM +Public pcNl, pcAn, gcAcces, gcAppPath, gcAppName, gcUtilizatoriPath, gcDirMare, DIRGEN, gcTempPath, ; + glParametri, gcHost, gcUsername, gcPassword, gcUserNameApp, gcPasswordApp, gnIdUtil, gnIdProgram, ; + gnAn, gnLuna, gcS, gnIdFirma, gcGeneralIniFile, gcSecurityFile, gnHandle, gnButon, BUTON, gcFirma, gcBasePath, gcComunPath, ; + gnTipGest, gcGestPermis, glFontCharSet, gcReportPreviewer, gcReportPreviewerPath, gcLocale, gcSettingsFile +Public gcCopyRight, pcTitlu +Public glUltimaLuna, glPrimaLuna, glLunaBuna, glLuna_neplatita, glLunaInchisa +Public glQuit, pl_verificat +Public gnewcryptfll, gnewcryptxml, gTransferTotal +Private gnId_Prg_Owner +*!* altele +Declare nror[65000] +Declare RTVA[22,2] +Public luna_inchisa, luna_neplatita, PRIMADATA, m.ctva, m.ctvam, m.ctvai, antet, m.nivel +Public OStart,OSETVIZ,OSETTULBAR,OSETINSTRUM,orm,OTEXT,OJUR,osetgest,tlbr_INSTR,tlbr_VIZ,oprinc +Public pcapsocsub,pcapsocvar +Public a4 + +Set Default To (Addbs(Justpath(Sys(16,0)))) +Set Procedure To roa.prg Additive +Private goRoa +goRoa = Createobject("oApp") +If goRoa.initializeaza(tParametri,[ROAAPP]) + goRoa.lanseazaAplicatie() +Endif + +Define Class oApp As RoaApp + + Procedure initializeazaAlteCai + Endproc + + Procedure initializeazaAlteClassLib + Endproc + + Procedure initializeazaAlteProceduri + Endproc + + Procedure initializeazaAlteVariabileGlobale + STORE 0 TO gnTipGest + STORE '' TO gcGestPermis + Endproc + + Procedure initializeazaAlteObiecteGlobale + Endproc + +ENDDEFINE + +*!* Function Shutdown +*!* If Type("goApp")=="O" And Not Isnull(goApp) +*!* Return goApp.OnShutDown() +*!* Endif +*!* Cleanup() +*!* Quit +*!* Endfunc diff --git a/COMUN/programe/sendmail.prg b/COMUN/programe/sendmail.prg new file mode 100644 index 0000000..a31b414 --- /dev/null +++ b/COMUN/programe/sendmail.prg @@ -0,0 +1,175 @@ +PROCEDURE lansez_salvare_mail +LPARAMETERS aryAttach,lcSubiect,lcBody + +PRIVATE pcAdresa,pcServer,pcUser,pcPass,pnPort,pcAdresad,pcBody,pcSubiect +STORE [] to pcAdresa,pcServer,pcUser,pcPass,pcAdresad,pcBody,pcSubiect +IF !EMPTY(lcSubiect) + pcSubiect = lcSubiect +ENDIF + +STORE 25 TO pnPort +lcSql = [select adresa_expeditor,server_mail,user_mail,pass_mail,port from sal_nom_expeditori] +lcCursor = [v_exp] +lnSucces = goExecutor.oExecute(lcSql,lcCursor) +goExecutor.oReset() +IF lnSucces < 0 + MESSAGEBOX(goExecutor.cEroare,0+16,"Eroare") + RETURN +ENDIF +lcSql=[select adresa_destinatar from sal_nom_destinatari] +lcCursor=[v_dest] +lnSucces=goExecutor.oExecute(lcSql,lcCursor) +goExecutor.oReset() +IF lnSucces < 0 + MESSAGEBOX(goExecutor.cEroare,0+16,"Eroare") + RETURN +ENDIF +lotrimitmail = CREATEOBJECT('frm_trimit_mail') +lotrimitmail.show(1) +ENDPROC +************************************************ +PROCEDURE adauga_expeditor +LPARAMETERS tcadresa_expeditor,tcserver_mail,tcuser_mail,tcpass_mail,tnPort + +lcSql = [begin pack_sal_declaratii.adaugare_expeditor(']+ALLTRIM(tcadresa_expeditor)+[',']+ALLTRIM(tcserver_mail)+[',']+ALLTRIM(tcuser_mail)+[',']+ALLTRIM(tcpass_mail)+[',]+ALLTRIM(STR(tnport))+[); end;] +lnSucces = goExecutor.oExecute(lcSql) +goExecutor.oReset() +IF lnSucces < 0 + MESSAGEBOX(goExecutor.cEroare,0+16,"Eroare") + RETURN +ENDIF +ENDPROC +******************************************* +PROCEDURE adauga_destinatar +LPARAMETERS tcadresa_destinatar + +lcSql = [begin pack_sal_declaratii.adaugare_destinatar(']+ALLTRIM(tcadresa_destinatar)+['); end;] +lnSucces = goExecutor.oExecute(lcSql) +goExecutor.oReset() +IF lnSucces < 0 + MESSAGEBOX(goExecutor.cEroare,0+16,"Eroare") + RETURN +ENDIF +ENDPROC +**************************************** +PROCEDURE SendViaBLAT(tcReturn, tcFrom, tcTo, tcSubject, tcBody, taFiles, tcCC, tcBCC, tcMailServer, tnPort, tcUserName, tcPassword, tnPriority, tlHTMLFormat) +******************************************* + LOCAL lcBlatParam, lcBodyFile, lnCountAttachments, lnResult, loError as Exception + + lcBodyFile = "" + + TRY + *!* Include full path in Declare, such as "C:\Blat240\full\blat.dll" + *!* or make sure that blat.dll is included in the system's PATH variable + DECLARE INTEGER Send IN "D:\ROA_TRUNK\ROADECL\blat.dll" STRING cParam + + lcBodyFile = ADDBS(SYS(2023)) + SYS(2015) + ".txt" + STRTOFILE(tcBody, lcBodyFile, 0) && body is placed in a text file to be sent by BLAT + + lcBlatParam = GetShortPath(lcBodyFile) + lcBlatParam = lcBodyFile + IF TYPE("tcTo") = "C" + lcBlatParam = lcBlatParam + " -to " + ALLTRIM(tcTo) + ENDIF + IF TYPE("tcFrom") = "C" + lcBlatParam = lcBlatParam + " -f " + ALLTRIM(tcFrom) + ENDIF + IF TYPE("tcCC") = "C" + lcBlatParam = lcBlatParam + " -cc " + ALLTRIM(tcCC) + ENDIF + IF TYPE("tcBCC") = "C" and !empty(tcBCC) + lcBlatParam = lcBlatParam + " -bcc " + ALLTRIM(tcBCC) + ENDIF + IF TYPE("tcSubject") = "C" + lcBlatParam = lcBlatParam + [ -s "] + ALLTRIM(tcSubject) + ["] + ENDIF + IF TYPE("tcMailserver") = "C" + lcBlatParam = lcBlatParam + " -server " + ALLTRIM(tcMailserver) + ENDIF + IF TYPE("tnPort") = "N" + lcBlatParam = lcBlatParam + ":" + TRANSFORM(tnPort) + ENDIF + IF TYPE("tcUsername") = "C" + lcBlatParam = lcBlatParam + " -u " + ALLTRIM(tcUsername) + ENDIF + IF TYPE("tcPassword") = "C" + lcBlatParam = lcBlatParam + " -pw " + ALLTRIM(tcPassword) + ENDIF + IF TYPE("tnPriority") = "N" AND BETWEEN(tnPriority, 0, 1) + lcBlatParam = lcBlatParam + " -priority " + TRANSFORM(tnPriority) + ENDIF + IF TYPE("tlHTMLFormat") = "L" AND tlHTMLFormat + lcBlatParam = lcBlatParam + " -html" + ENDIF + + IF TYPE("taFiles", 1) = "A" + lcBlatParam = lcBlatParam + " -attach " + FOR lnCountAttachments = 1 TO ALEN(taFiles) + lcBlatParam = lcBlatParam + GetShortPath(ALLTRIM(taFiles(lnCountAttachments))) + "," + ENDFOR + lcBlatParam = LEFT(lcBlatParam, LEN(lcBlatParam) - 1) && Remove Extra Comma + ENDIF + + lnResult = Send(ALLTRIM(lcBlatParam)) + + IF lnResult != 0 + DO CASE + CASE lnResult = -2 + THROW "The server actively denied our connection./The mail server doesn't like the sender name. " + CASE lnResult = -1 + THROW "Unable to open SMTP socket" OR ; + "SMTP get line did not return 220" OR ; + "command unable to write to socket" OR ; + "Server does not like To: address" OR ; + "Mail server error accepting message data." + CASE lnResult = 1 + THROW "File name (message text) not given" OR ; + "Bad argument given" + CASE lnResult = 2 + THROW "File (message text) does not exist" + CASE lnResult = 3 + THROW "Error reading the file (message text) or attached file" + CASE lnResult = 4 + THROW "File (message text) not of type FILE_TYPE_DISK " + CASE lnResult = 5 + THROW "Error Reading File (message text)" + CASE lnResult = 12 + THROW "-server or -f options not specified and not found in registry" + CASE lnResult = 13 + THROW "Error opening temporary file in temp directory" + OTHERWISE + THROW "Unknown Error" + ENDCASE + ENDIF + + CATCH TO loError + tcReturn = [Error: ] + STR(loError.ERRORNO) + CHR(13) + ; + [LineNo: ] + STR(loError.LINENO) + CHR(13) + ; + [Message: ] + loError.MESSAGE + CHR(13) + ; + [Procedure: ] + loError.PROCEDURE + CHR(13) + ; + [Details: ] + loError.DETAILS + CHR(13) + ; + [StackLevel: ] + STR(loError.STACKLEVEL) + CHR(13) + ; + [LineContents: ] + loError.LINECONTENTS + FINALLY + CLEAR DLLS "Send" + IF FILE(lcBodyFile) + ERASE (lcBodyFile) + ENDIF + ENDTRY +ENDPROC + +**************************************** +Function GetShortPath +**************************************** + LPARAMETERS lcFileName + LOCAL lnReturn, lcBuffer + + Declare Integer GetShortPathNameA In Win32API As GetShortPathName String, String, Integer + + lcBuffer = SPACE(255) + lnReturn= GetShortPathName(lcFileName, @lcBuffer, 255) + + Clear Dlls "GetShortPathName" + + Return (Left(lcBuffer, lnReturn)) +ENDFUNC \ No newline at end of file diff --git a/COMUN/programe/setobjrf.prg b/COMUN/programe/setobjrf.prg new file mode 100644 index 0000000..851540d --- /dev/null +++ b/COMUN/programe/setobjrf.prg @@ -0,0 +1,119 @@ +* SetObjRf.PRG - Set Object Referece. +* +* Copyright (c) 1997 Microsoft Corp. +* 1 Microsoft Way +* Redmond, WA 98052 +* +* Description: +* Set an object reference to a specified property based on a specified class. +* Return new instance of specified class if name is an empty string. + +LPARAMETERS toObject,tcName,tvClass,tvClassLibrary +LOCAL lcName,lcClass,lcClassLibrary,oObject,lnCount +LOCAL lnObjectRefIndex,lnObjectRefCount,oExistingObject + +IF TYPE("toObject")#"O" OR ISNULL(toObject) + RETURN .NULL. +ENDIF +lcName=IIF(TYPE("tcName")=="C",ALLTRIM(tcName),LOWER(SYS(2015))) +oExistingObject=.NULL. +oObject=.NULL. +lcClassLibrary="" +DO CASE + CASE TYPE("tvClass")=="O" + oObject=tvClass + lcClass=LOWER(oObject.Class) + lcClassLibrary=LOWER(oObject.ClassLibrary) + IF NOT ISNULL(oExistingObject) AND LOWER(oExistingObject.Class)==lcClass AND ; + LOWER(oExistingObject.ClassLibrary)==lcClassLibrary + toObject.vResult=oExistingObject + RETURN toObject.vResult + ENDIF + CASE EMPTY(tvClass) + oObject=toObject + lcClass=LOWER(oObject.Class) + lcClassLibrary=LOWER(oObject.ClassLibrary) + IF NOT ISNULL(oExistingObject) AND LOWER(oExistingObject.Class)==lcClass AND ; + LOWER(oExistingObject.ClassLibrary)==lcClassLibrary + toObject.vResult=oExistingObject + RETURN toObject.vResult + ENDIF + OTHERWISE + lcClass=LOWER(ALLTRIM(tvClass)) + DO CASE + CASE TYPE("tvClassLibrary")=="O" + lcClassLibrary=LOWER(tvClassLibrary.ClassLibrary) + CASE TYPE("tvClassLibrary")=="C" + IF EMPTY(tvClassLibrary) + lcClassLibrary=LOWER(toObject.ClassLibrary) + ELSE + lcClassLibrary=LOWER(ALLTRIM(tvClassLibrary)) + IF EMPTY(JUSTEXT(lcClassLibrary)) + lcClassLibrary=LOWER(FORCEEXT(lcClassLibrary,"vcx")) + ENDIF + llClassLib=(JUSTEXT(lcClassLibrary)=="vcx") + IF NOT "\"$lcClassLibrary + lcClassLibrary=LOWER(FORCEPATH(lcClassLibrary,JUSTPATH(toObject.ClassLibrary))) + IF NOT FILE(lcClassLibrary) AND VERSION(2)#0 + lcClassLibrary=LOWER(FORCEPATH(lcClassLibrary,HOME()+"ffc\")) + IF NOT FILE(lcClassLibrary) + lcClassLibrary=LOWER(FULLPATH(JUSTFNAME(lcClassLibrary))) + ENDIF + ENDIF + ENDIF + IF NOT FILE(lcClassLibrary) + toObject.vResult=.NULL. + RETURN toObject.vResult + ENDIF + ENDIF + OTHERWISE + lcClassLibrary="" + ENDCASE + IF NOT ISNULL(oExistingObject) AND LOWER(oExistingObject.Class)==lcClass AND ; + LOWER(oExistingObject.ClassLibrary)==lcClassLibrary + toObject.vResult=oExistingObject + RETURN toObject.vResult + ENDIF + oObject=NEWOBJECT(lcClass,lcClassLibrary) + IF TYPE("oObject")#"O" OR ISNULL(oObject) + toObject.vResult=.NULL. + RETURN toObject.vResult + ENDIF +ENDCASE +DO CASE + CASE EMPTY(lcName) + toObject.vResult=oObject + RETURN toObject.vResult + OTHERWISE + IF NOT toObject.AddProperty(lcName,oObject) + oObject=.NULL. + ENDIF +ENDCASE +IF ISNULL(oObject) + toObject.vResult=.NULL. + RETURN toObject.vResult +ENDIF +IF PEMSTATUS(oObject,"oHost",5) + oObject.oHost=toObject.oHost +ELSE + oObject.AddProperty("oHost",toObject.oHost) +ENDIF +IF EMPTY(lcClassLibrary) + lcClassLibrary=LOWER(oObject.ClassLibrary) +ENDIF +lnObjectRefCount=toObject.nObjectRefCount +lnObjectRefIndex=lnObjectRefCount+1 +FOR lnCount = 1 TO lnObjectRefCount + IF toObject.aObjectRefs[lnCount,1]==LOWER(lcName) + lnObjectRefIndex=lnCount + EXIT + ENDIF +ENDFOR +IF lnObjectRefIndex>lnObjectRefCount + DIMENSION toObject.aObjectRefs[lnObjectRefIndex,3] +ENDIF +toObject.aObjectRefs[lnObjectRefIndex,1]=LOWER(lcName) +toObject.aObjectRefs[lnObjectRefIndex,2]=lcClass +toObject.aObjectRefs[lnObjectRefIndex,3]=lcClassLibrary +toObject.vResult=oObject +RETURN toObject.vResult diff --git a/COMUN/programe/suma_in_vorbe.prg b/COMUN/programe/suma_in_vorbe.prg new file mode 100644 index 0000000..2d394f9 --- /dev/null +++ b/COMUN/programe/suma_in_vorbe.prg @@ -0,0 +1,267 @@ +*!* 30.06.2017 +*!* marius.mutu +*!* adaugat parametru tcValuta + +*!* MESSAGEBOX(suma_in_vorbe(1)) +*!* MESSAGEBOX(suma_in_vorbe(10)) +*!* MESSAGEBOX(suma_in_vorbe(100)) +*!* MESSAGEBOX(suma_in_vorbe(1000)) +*!* MESSAGEBOX(suma_in_vorbe(10000)) +*!* MESSAGEBOX(suma_in_vorbe(100000)) +*!* MESSAGEBOX(suma_in_vorbe(1000000)) +*!* MESSAGEBOX(suma_in_vorbe(10000000)) +*!* MESSAGEBOX(suma_in_vorbe(100000000)) +*!* MESSAGEBOX(suma_in_vorbe(1000000000)) +*!* MESSAGEBOX(suma_in_vorbe(10000000000)) +*!* MESSAGEBOX(suma_in_vorbe(11000000000)) +*!* MESSAGEBOX(suma_in_vorbe(11100000000)) +*!* MESSAGEBOX(suma_in_vorbe(11110000000)) +*!* MESSAGEBOX(suma_in_vorbe(11111000000)) +*!* MESSAGEBOX(suma_in_vorbe(11111100000)) +*!* MESSAGEBOX(suma_in_vorbe(11111110000)) +*!* MESSAGEBOX(suma_in_vorbe(11111111000)) +*!* MESSAGEBOX(suma_in_vorbe(11111111100)) +*!* MESSAGEBOX(suma_in_vorbe(11111111110)) +*!* MESSAGEBOX(suma_in_vorbe(11111111111)) + +*!* Function SUMA_IN_VORBE +Parameter tnSuma, tcValuta + +LOCAL lcValuta, lcLei, lcLeu, lcBani, lcBan + +lcValuta = IIF(EMPTY(m.tcValuta), 'RON', ALLTRIM(UPPER(tcValuta))) +lcLei = IIF(INLIST(m.lcValuta,'LEI','RON'), 'lei', IIF('EUR'$m.lcValuta, 'euro', IIF(m.lcValuta = 'USD', 'dolari', IIF(m.lcValuta = 'GBP', 'lire', 'lei')))) +lcLeu = IIF(INLIST(m.lcValuta,'LEI','RON'), 'un leu', IIF('EUR'$m.lcValuta, 'un euro', IIF(m.lcValuta = 'USD', 'un dolar', IIF(m.lcValuta = 'GBP', 'o lira', 'un leu')))) +lcBani = IIF(INLIST(m.lcValuta,'LEI','RON'), 'bani', IIF('EUR'$m.lcValuta, 'centi', IIF(m.lcValuta = 'USD', 'centi', IIF(m.lcValuta = 'GBP', 'pence', 'bani')))) +lcBan = IIF(INLIST(m.lcValuta,'LEI','RON'), 'un ban', IIF('EUR'$m.lcValuta, 'un cent', IIF(m.lcValuta = 'USD', 'un cent', IIF(m.lcValuta = 'GBP', 'un peny', 'un ban')))) + +Local i,j, putere, lit,numar1,numar2 +Local lnSuma, lnSuma2 +Local A[1], B[1] + +Store 0 To i,j,lnSuma,lnSuma2 +Store 1 To putere +Store '' To lit,numar1,numar2 + +lnSuma=Round(tnSuma,2) +lnSuma2=(lnSuma-Int(lnSuma))*100 +lnSuma=Int(lnSuma) + +*!* lnSuma=ROUND(lnSuma,gnPa) +*!* FOR j=1 TO gnPa +*!* putere=10*putere +*!* ENDFOR +*!* lnSuma2=(lnSuma-Int(lnSuma))*putere + +numar1=Space(12) +*!* numar2=Space(gnPa) +numar2=Space(2) + +numar1=Str(lnSuma,12) +*!* numar2=Str(lnSuma2,gnPa) +numar2=Str(lnSuma2,2) + +Dimension A(12) +A(1)=Subs(numar1,12,1) +A(2)=Subs(numar1,11,1) +A(3)=Subs(numar1,10,1) +A(4)=Subs(numar1,9,1) +A(5)=Subs(numar1,8,1) +A(6)=Subs(numar1,7,1) +A(7)=Subs(numar1,6,1) +A(8)=Subs(numar1,5,1) +A(9)=Subs(numar1,4,1) +A(10)=Subs(numar1,3,1) +A(11)=Subs(numar1,2,1) +A(12)=Subs(numar1,1,1) +Sele mila1 +********************* +Loca For NR=Val(A(12)) +lit=lit+Alltri(cr1) + +If Val(A(11))=1 + If Val(A(10))=0 + Loca For NR=Val(A(11)) + lit=lit+Alltri(cr5) + Else + Loca For NR=Val(A(10)) + *!* modificare ROAAUTO v 2.0.5 + *!* lit=lit+Alltri(cr4) + lit=lit+Alltri(Strtran(cr4,[doi],[doua])) + *!* modificare ROAAUTO v 2.0.5 ^ + Endif +Else + If Val(A(10))=0 + Loca For NR=Val(A(11)) + lit=lit+Alltrim(cr5) + Else + Loca For NR=Val(A(11)) + lit=lit+Alltrim(cr2) + Loca For NR=Val(A(10)) + *!* modificare ROAAUTO v 2.0.5 + *!* lit=lit+Alltri(cr3) + *!* modificare ROAAUTO v 2.1.12 + lit=lit+Alltri(Strtran(Strtran(cr3,[unu],[un]),[doi],[doua])) + *!* modificare ROAAUTO v 2.0.5 ^ + Endif +Endif +Do Case + CASE Val(A(10)) = 1 AND VAL(a(11)) = 0 AND VAL(a(12)) = 0 && modificare ROAAUTO v 2.1.12 + lit=lit+' miliard' + Case Val(A(12)) # 0 + lit=lit+' miliarde' + Case Val(A(11)) # 0 + lit=lit+' miliarde' + Case Val(A(10)) # 0 + lit=lit+' miliarde' +Endcase +*********************** +Loca For NR=Val(A(9)) +lit=lit+Alltri(cr1) + +If Val(A(8))=1 + If Val(A(7))=0 + Loca For NR=Val(A(8)) + lit=lit+Alltri(cr5) + Else + Loca For NR=Val(A(7)) + *!* modificare ROAAUTO v 2.0.5 + *!* lit=lit+Alltri(cr4) + lit=lit+Alltri(Strtran(cr4,[doi],[doua])) + *!* modificare ROAAUTO v 2.0.5 ^ + Endif +Else + If Val(A(7))=0 + Loca For NR=Val(A(8)) + lit=lit+Alltrim(cr5) + Else + Loca For NR=Val(A(8)) + lit=lit+Alltrim(cr2) + Loca For NR=Val(A(7)) + *!* modificare ROAAUTO v 2.0.5 + *!* lit=lit+Alltri(cr3) + *!* modificare ROAAUTO v 2.1.12 + lit=lit+Alltri(Strtran(Strtran(cr3,[unu],[un]),[doi],[doua])) + *!* modificare ROAAUTO v 2.0.5 ^ + Endif +Endif +Do Case + CASE Val(A(7)) = 1 AND VAL(a(8)) = 0 AND VAL(a(9)) = 0 && modificare ROAAUTO v 2.1.12 + lit=lit+' milion' + Case Val(A(9)) # 0 + lit=lit+' milioane' + Case Val(A(8)) # 0 + lit=lit+' milioane' + Case Val(A(7)) # 0 + lit=lit+' milioane' +Endcase +*********************** +Loca For NR=Val(A(6)) +lit=lit+Alltri(cr1) + +If Val(A(5))=1 + If Val(A(4))=0 + Loca For NR=Val(A(5)) + lit=lit+Alltri(cr5) + Else + Loca For NR=Val(A(4)) + *!* modificare ROAAUTO v 2.0.5 + *!* lit=lit+Alltri(cr4) + lit=lit+Alltri(Strtran(cr4,[doi],[doua])) + *!* modificare ROAAUTO v 2.0.5 ^ + Endif +Else + If Val(A(4))=0 + Loca For NR=Val(A(5)) + lit=lit+Alltrim(cr5) + Else + Loca For NR=Val(A(5)) + lit=lit+Alltrim(cr2) + Loca For NR=Val(A(4)) + *!* modificare ROAAUTO v 2.0.5 + *!* lit=lit+Alltri(cr3) + *!* modificare ROAAUTO v 2.1.12 + lit=lit+Alltri(STRTRAN(Strtran(cr3,[unu],[una]),[doi],[doua])) + *!* modificare ROAAUTO v 2.0.5 ^ + Endif +Endif +Do Case + CASE Val(A(4)) = 1 AND VAL(a(5)) = 0 AND VAL(a(6)) = 0 && modificare ROAAUTO v 2.1.12 + lit=lit+' mie' + Case Val(A(6)) # 0 + lit=lit+' mii' + Case Val(A(5)) # 0 + lit=lit+' mii' + Case Val(A(4)) # 0 + lit=lit+' mii' +Endcase + +********************* +Loca For NR=Val(A(3)) +lit=lit+Alltri(cr1) + +If Val(A(2))=1 + If Val(A(1))=0 + Loca For NR=Val(A(2)) + lit=lit+Alltri(cr5) + Else + Loca For NR=Val(A(1)) + lit=lit+Alltri(cr4) + Endif +Else + If Val(A(1))=0 + Loca For NR=Val(A(2)) + lit=lit+Alltrim(cr5) + Else + Loca For NR=Val(A(2)) + lit=lit+Alltrim(cr2) + Loca For NR=Val(A(1)) + lit=lit+Alltrim(cr3) + Endif +Endif +*!* modificare ROAAUTO v 2.1.12 +*!* lit=lit+' lei' +IF lnSuma # 0 + IF lnSuma = 1 + lit = m.lcLeu && 'un leu' + Else + lit=lit+' ' + m.lcLei && 'lei' + Endif +Endif +*!* modificare ROAAUTO v 2.1.12 ^ +********************* +Do Case + Case lnSuma2>1 + lit=lit+' si' + Dimension B(2) + B(1)=Subs(numar2,2,1) + B(2)=Subs(numar2,1,1) + + Do Case + Case Val(B(2))=1 And Val(B(1))!=0 + Loca For NR=Val(B(1)) + lit=lit+Alltri(cr4) + Case Val(B(2))=0 + Loca For NR=Val(B(1)) + lit=lit+Alltrim(cr3) + Case Val(B(1))=0 + Loca For NR=Val(B(2)) + lit=lit+Alltrim(cr5) + Otherwise + Loca For NR=Val(B(2)) + lit=lit+Alltrim(cr2) + Loca For NR=Val(B(1)) + lit=lit+Alltrim(cr3) + Endcase + lit=lit+' ' + m.lcBani &&& 'bani' + Case lnSuma2=1 + lit=lit+'si ' + m.lcBan && 'un ban' +Endcase + +Sele mila1 +*!* use + +lit=Strtran(lit,' ','') + +Return lit + \ No newline at end of file diff --git a/COMUN/programe/test_init_env.prg b/COMUN/programe/test_init_env.prg new file mode 100644 index 0000000..e1c1146 --- /dev/null +++ b/COMUN/programe/test_init_env.prg @@ -0,0 +1,351 @@ +SET DELETED ON +SET ANSI ON +SET EXACT ON +SET SAFETY OFF +CLOSE DATABASES +SET CENTURY ON +SET DATE DMY +SET NULLDISPLAY TO '' + +CT_SUCCES = 1 +CT_INSUCCES = -1 +crlf = CHR(13) + CHR(10) +gnAn = 2022 +gnLuna = 6 +gnIdUtil = -3 +glEMama = .T. +gnIdFirma = 110 +gcCondSucursala = [] +gnIdSucursala = m.gnIdFirma +gcS = 'ROMFAST' +gcFirma = 'ROMFAST' +gcUserName = m.gcS +gcNumeProgram=[ROACONT] +gcAppName = [ROACONT] +glLunaInchisa = .F. +glEMama = .F. + +Declare nror[65000] +buton = 1 +gnButon = 1 +pnButon = 1 + +LOCAL lcPath +PRIVATE gcAppPath + +gcAppPath = [D:\ROA\ROACONT\] +Set Default To (gcAppPath) +lcPath = gcAppPath + 'Date;' + ; + gcAppPath + 'Include;' + ; + gcAppPath + 'FERESTRE;' + ; + gcAppPath + 'GRAFICE;' + ; + gcAppPath + 'CLASE;' + ; + gcAppPath + 'MENIURI;' + ; + gcAppPath + 'PROGRAME;' + ; + gcAppPath + 'RAPOARTE;' + ; + gcAppPath + 'COMUN\CLASE;' + ; + gcAppPath + 'COMUN\FERESTRE;' + ; + gcAppPath + 'COMUN\PROGRAME;' + ; + gcAppPath + 'COMUN\GRAFICE;' + ; + gcAppPath + 'COMUN\RAPOARTE;' + ; + gcAppPath + 'COMUN\UTILE\CALENDAR;' + ; + gcAppPath + 'COMUN\UTILE\CTL32;' + ; + gcAppPath + 'COMUN\UTILE\HPDF;' + ; + gcAppPath + 'COMUN\UTILE\HPDF\REPORTOUTPUT;' + ; + gcAppPath + 'COMUN\UTILE\WEB;' + ; + gcAppPath + 'COMUN\UTILE\NFJSON;' + ; + gcAppPath + 'COMUN\UTILE\NFXML;' + ; + gcAppPath + 'COMUN\UTILE\EXCEL;' + ; + Addbs(Substr(gcAppPath,1,Rat([\],gcAppPath,2)))+[COMUNROA\] + +SET PATH TO &lcPath ADDITIVE + +lcLastSetClassLib=Set("CLASSLIB") +lcMainClassLib="clase\cont2000" + + + +*CLASE__________________________________________________________ +Set Classlib To (lcMainClassLib) Additive +Set Classlib To appwiz Additive +Set Classlib To CAUT Additive +* SET CLASSLIB TO FERESTREBAZA ADDITIVE +Set Classlib To BAZA Additive +Set Classlib To contab Additive +Set Classlib To comun Additive +Set Classlib To registry Additive +Set Classlib To cauta_alfa_forms.vcx Additive +Set Classlib To obalanta Additive +Set Classlib To ocriterii.vcx Additive +Set Classlib To ctl32_statusbar.vcx Additive +Set Classlib To ctl32_common.vcx Additive +Set Classlib To ctl32_structs.vcx Additive +Set Classlib To ctl32_progressbar.vcx Additive +*!* SET CLASSLIB TO ctl32_scontainer.vcx additive + + +*PROCEDURI______________________________________________________ +Set Procedure To PROCEDURI Additive +Set Procedure To pmenu Additive +Set Procedure To proceduri_comune Additive +Set Procedure To mesaje Additive +Set Procedure To acces_meniu Additive +Set Procedure To quitapp Additive +Set Procedure To init_program Additive +Set Procedure To oproceduri_maintenance.PRG Additive +Set Procedure To gridproc Additive +Set Procedure To proceduri_excel Additive +Set Procedure To oserii_numere.PRG Additive +Set Procedure To cauta_alfa Additive +Set Procedure To oproceduri_parteneri Additive +Set Procedure To oproceduri_incasari Additive +Set Procedure To oserii_numere Additive +Set Procedure To wwconfig Additive +Set Procedure To oexport Additive +SET PROCEDURE TO ocasabanca ADDITIVE +SET PROCEDURE TO importfromxlsx ADDITIVE +SET PROCEDURE TO appendfromxlsx.prg ADDITIVE +SET PROCEDURE TO overificari.prg ADDITIVE +SET PROCEDURE TO onomenclatoare.prg ADDITIVE +SET PROCEDURE TO excelxml.prg ADDITIVE + + +SET PROCEDURE TO saft_d406.prg ADDITIVE + +&& CLASE ORACLE +Set Classlib To DECABAZA Additive +Set Classlib To onomenclatoare Additive +Set Classlib To oparteneri Additive +Set Classlib To OCASABANCA Additive +Set Classlib To OVANZCUMP Additive +Set Classlib To oCompensari Additive +Set Classlib To oRapoarte_cont Additive +Set Classlib To oSit_Op Additive +Set Classlib To overificari Additive +Set Classlib To oteste Additive +Set Classlib To omodificari Additive +Set Classlib To ooptiuni Additive +Set Classlib To ointroduceri_cont Additive +Set Classlib To onote_contabile Additive +Set Classlib To odebcred Additive +Set Classlib To ferestre_oracle Additive +Set Classlib To caut_ora Additive +Set Classlib To otoolbar Additive +Set Classlib To inchideri_sal Additive +Set Classlib To serii_numere Additive +Set Classlib To contabilitate_rapoarte Additive +Set Classlib To oconversii Additive +Set Classlib To oactualizari Additive +Set Classlib To anaf_efactura Additive + +&& CLASE UTILITARE +Set Classlib To Messagebox Additive +SET CLASSLIB TO wwdialogs ADDITIVE +SET CLASSLIB TO orapoarte.vcx additive +SET CLASSLIB TO orapoarte_contabilitate.vcx additive +SET CLASSLIB TO accessibility.vcx ADDITIVE +SET CLASSLIB TO _calendar.vcx ADDITIVE +SET CLASSLIB TO orapoarte_comun.vcx ADDITIVE +SET CLASSLIB TO saft_d406.vcx ADDITIVE + +&& PROCEDURI ORACLE +Set Procedure To GENCURSOR.PRG Additive +Set Procedure To OPROCEDURI_COMUNE.PRG Additive +Set Procedure To OINIT_OPTIUNI.PRG Additive +Set Procedure To updateserver.PRG Additive +Set Procedure To oCompensari.PRG Additive +Set Procedure To oSituatii_Operative.PRG Additive +Set Procedure To oOperatii_comune.PRG Additive + +Set Procedure To OCONT2003.PRG Additive +Set Procedure To OPROCEDURI_aMS.PRG Additive +Set Procedure To oparteneri.PRG Additive +Set Procedure To orapoarte.PRG Additive +Set Procedure To orap_trezorerie Additive +Set Procedure To ocautare Additive +Set Procedure To omeniu_initializari Additive +Set Procedure To osecurity Additive +Set Procedure To oheader Additive +Set Procedure To orefaceri Additive +Set Procedure To oproceduri_casademarcat Additive +Set Procedure To controllerecr Additive +Set Procedure To oproceduri_comune_imob.PRG Additive +Set Procedure To oproceduri_conversie.PRG Additive +Set Procedure To odocumente.PRG Additive +Set Procedure To oproceduri_actualizari.PRG Additive +SET PROCEDURE TO orapoarte_dinamice.prg additive +SET PROCEDURE TO update_imob.prg ADDITIVE +SET PROCEDURE TO oproceduri_import.prg ADDITIVE +Set Procedure To wwutils.PRG Additive +Set Procedure To wwxmlhttp.PRG Additive +Set Procedure To ini.PRG Additive +Set Procedure To regex.PRG Additive +Set Procedure To validare.PRG Additive && validare cif +Set Procedure To oproceduri_evolutie Additive +Set Procedure To oproceduri_decont Additive + +Set Procedure To proceduri_rapoarte.PRG Additive +SET PROCEDURE TO anaf_efactura.prg ADDITIVE + + +*!* modificare v 2.0.95 +SET PROCEDURE TO iniacces.prg ADDITIVE +SET PROCEDURE TO oupdate.prg additive +SET PROCEDURE TO procese.prg additive +SET PROCEDURE TO version.prg additive +SET PROCEDURE TO xmlaccess.prg additive +SET PROCEDURE TO xmlparser.prg additive +SET PROCEDURE TO filebringer.prg additive +SET PROCEDURE TO wwcodeupdate.prg additive +SET PROCEDURE TO wwhttp.prg ADDITIVE +SET PROCEDURE TO wwapi.prg ADDITIVE +*!* modificare v 2.0.95^ + +*!* modificare v 2.5.28 +Declare Integer GetPrivateProfileString In WIN32API ; + string, String, String, String @, Integer, String +Declare Integer WritePrivateProfileString In Win32Api ; + string, String, String, String +Declare Integer CopyFile In WIN32API ; + STRING lpExistingFileName,; + STRING lpNewFileName,; + INTEGER bFailIfExists +Declare Integer URLDownloadToFile In urlmon.Dll; + INTEGER pCaller, String szURL, String szFileName,; + INTEGER dwReserved, Integer lpfnCB +Declare Integer PathFileExists In shlwapi; + STRING pszPath +*!* modificare v 2.5.28 ^ + +If Type('goApi') = 'U' + Public goApi + goApi = Newobject("wwAPI", "wwAPI.prg") +ENDIF + +set procedure to oinit_optiuni.prg additive +set procedure to oproceduri_comune.prg additive + +PRIVATE gnHandle, goExecutor, goConn, goFirma, goCalendar, gcAcces, goApp, DIRGEN, gcBasePath, gcTempPath +Private gcGeneralIniFile +DIRGEN = [D:\ROA\] +gcBasePath = dirgen +gcGeneralIniFile = DIRGEN + "settings.ini" +gcSettingsFile = m.gcGeneralIniFile +gcTempPath = Addbs(shortpath(goApi.GetTempPath())) + gcS + [\] && WWAPI.PRG +If !Directory(gcTempPath) + Md (gcTempPath) +Endif + +Private poLog,goLog && obiect pt logarea mesajelor sistemului +poLog = Newobject("Log_Mesaje","Log_Mesaje.prg") +goLog = poLog + +goApp=Createobject("wzApplication") + +gnHandle = 0 + +goExecutor = createobject("oExecutor") +goConn = createobject("oConn") +lcHost = INPUTBOX('Host','Host','ROA_ROMFAST') +lcSchema = INPUTBOX('Schema','Schema', m.gcS) +lcPassword = INPUTBOX('Password','Password','ROMFASTSOFT') +gcS = ALLTRIM(m.lcSchema) +gcUserName = m.gcS +goConn.Connect(m.lcHost, m.lcSchema, m.lcPassword) + +gcAcces=[1;2;3;4;5;6;7;8;] + +goFirma = null +llSucces = goExecutor.oExecuta("select * from syn_v_nom_firme where schema = ?gcS", "cFirma") + +SELECT cFirma +gnIdFirma = id_firma +gnIdSucursala = null +gcFirma = ALLTRIM(firma) + +IF m.llSucces + SELECT cFirma + SCATTER NAME goFirma +ELSE + goFirma = CREATEOBJECT('custom') + goFirma.addproperty('cod_fiscal', 'RO1879855') + goFirma.addproperty('schema', m.gcS) + goFirma.addproperty('firma', m.gcS) +ENDIF +lcDeclarant = Alltrim(goFirma.declarant) +AddProperty(goFirma, 'nume_declarant', m.lcDeclarant) +AddProperty(goFirma, 'prenume_declarant', '') +lnNraparitie = At(" ", m.lcDeclarant) +If lnNraparitie > 0 + goFirma.nume_declarant = Substr(m.lcDeclarant, 1, m.lnNraparitie) + goFirma.prenume_declarant = Substr(m.lcDeclarant, m.lnNraparitie + 1) +Endif + +USE IN (SELECT('cFirma')) + +goCalendar = null +llSucces = goExecutor.oExecuta('SELECT anul, luna, tva_incasare FROM calendar WHERE an*12+luna = (select MAX(an*12+luna) FROM calendar)', 'cCalendar') +IF m.llSucces + SELECT cCalendar + GO TOP + gnAn = anul + gnLuna = luna + SCATTER NAME goCalendar +ENDIF +USE IN (SELECT('cCalendar')) + +_SCREEN.Caption = ALLTRIM(goFirma.firma) + " " + PADL(m.gnLuna,2, "0") + "/" + PADL(gnAn,4,"0") + +CREATE CURSOR dual (dummy c(10)) +INSERT INTO dual (dummy) VALUES ("") + +actualizeaza_optiuni() +Do optiuni_firma IN oinit_optiuni.prg + +&& setez variabilele de sesiune pe server + +lcSql = [begin pack_sesiune.set_Id_Util(?gnIdUtil); end;] +llSucces = goExecutor.oExecuta(lcSql) + +lcSql = [begin pack_sesiune.setluna(?gnLuna); pack_sesiune.setan(?gnAn); end;] +llSucces = goExecutor.oExecuta(lcSql) + +lcSql = [begin pack_sesiune.setlunabal(?gnLuna); pack_sesiune.setanbal(?gnAn); end;] +llSucces = goExecutor.oExecuta(lcSql) + +lcSql = [begin pack_contafin.SET_DATA_RON(?gcS); end;] +llSucces = goExecutor.oExecuta(lcSql) + +lcSql = [begin pack_sesiune.set_data_ron(?gcS); end;] +llSucces = goExecutor.oExecuta(lcSql) + +lcSql = [begin pack_contafin.set_id_sucursala(?gnIdSucursala); end;] +llSucces = goExecutor.oExecuta(lcSql) + +lcSql = [begin pack_contafin.set_id_firma(?gnIdFirma); end;] +llSucces = goExecutor.oExecuta(lcSql) + + +* lcCommand = INPUTBOX('Command', 'Command', 'DO FORM d:\roa\roacont\ferestre\frm_import_note_a4200.scx') +lnOptiune = xmenu('SAFT;Import extrase;XML eFactura;Import eFactura;SPV;Chatbot') +lcCommand = '' +DO CASE + CASE m.lnOptiune = 1 + CD [D:\ROA\COMUNROA\dist406] + lcCommand = INPUTBOX('Command', 'Command', 'do viz_saft_d406 in saft_d406.prg') + CASE m.lnOptiune = 2 + lcCommand = INPUTBOX('Command', 'Command', 'do form frm_import_extrase_banca.scx') + CASE m.lnOptiune = 3 + lcCommand = INPUTBOX('Command', 'Command', 'do xmlefactura.prg') + CASE m.lnOptiune = 4 + lcCommand = INPUTBOX('Command', 'Command', 'do vizImportEFactura in import_efactura.prg') + CASE m.lnOptiune = 5 + lcCommand = INPUTBOX('Command', 'Command', 'do viz_spv in anaf_efactura.prg') + CASE m.lnOptiune = 6 + lcCommand = INPUTBOX('Command', 'Command', 'do form frm_chatbot.scx') +*!* lcCommand = INPUTBOX('Command', 'Command', 'do chatbot.prg') + +ENDCASE +IF !EMPTY(m.lcCommand) + &lcCommand +ENDIF diff --git a/COMUN/programe/update_comenzi.prg b/COMUN/programe/update_comenzi.prg new file mode 100644 index 0000000..c876680 --- /dev/null +++ b/COMUN/programe/update_comenzi.prg @@ -0,0 +1,202 @@ +*!* 20.01.2026 +*!* update_articole_politica, update_articole_politica_comenzi + codbare + +*************************************************************************************************************** +**** Proceduri +**** update_articole_politica ( tnIdPol ) +**** update_articole_politica_utilizator - veche 26.01 +**** update_articole_politica_comenzi +**** caut_politici_curente - veche 26.01 +**** caut_politici_curente_utilizator +**** caut_lucrari_curente - veche 26.01 +**** caut_lucrari_curente_gs +**** Functii +**** caut_nume_politica - mutata in proceduri_comune.prg ( v 2.0.11 ) +*************************************************************************************************************** +PROCEDURE extrage_optiuni_firma && adaugata v 2.0.15 + gnIdGrupaArtSectie = Val(extrage_optiuni(gcGrupaArtSectie, gnId_sectie)) + gnTipUzualComanda = Val(extrage_optiuni(gcTipUzualComanda, gnId_sectie)) + gnComenziInitial = Val(extrage_optiuni(gcComenziInitial, gnId_sectie)) + gnOre_inchidere = Val(extrage_optiuni(gcOre_inchidere, gnId_sectie)) + gnOre_livrare = Val(extrage_optiuni(gcOre_livrare, gnId_sectie)) + gnOre_executie = Val(extrage_optiuni(gcOre_executie, gnId_sectie)) + gnCopiereCantitate = Val(extrage_optiuni(gcCopiereCantitate, gnId_sectie)) + gnIdPoliticaPretC = Val(extrage_optiuni(gcIdPoliticaPretC, gnId_sectie)) + gnIdPoliticaPret = Val(extrage_optiuni(gcIdPoliticaPret, gnId_sectie)) + gnId_lista_preturi_PV = Val(extrage_optiuni(gcId_lista_preturi_PV, gnId_sectie)) + gnSuprascriePretComanda = Val(extrage_optiuni(gcSuprascriePretComanda, gnId_sectie)) + gnRF_ORDONARECOMENZI = Val(extrage_optiuni(gcRF_ORDONARECOMENZI, gnId_sectie)) +ENDPROC +*************************************************************************************************************** +Procedure update_articole_politica +Lparameters tnIdPol +If Used('v_articole') + Use In v_articole +Endif + +TEXT TO lcSql TEXTMERGE NOSHOW +select p.id_articol,p.id_pol,p.pret,p.um,p.nume_articol,p.codmat,p.codbare,p.preturi_cu_tva as pret_cu_tva, s.stoc + from com_vpreturi_utilizator p + left join (select id_articol, + sum(cants + cant - cante) as stoc + from stoc + where an = <> + and luna = <> + and id_gestiune in + (SELECT X + FROM table(charn2collection((select pack_comenzi.extrage_optiuni(varvalue, <>) as id_pol from optiuni where varname = 'LISTA_GESTIUNI_STOC'), + ','))) + group by id_articol) s + on p.id_articol = s.id_articol + where p.id_util = <> and p.id_pol= <> +ENDTEXT + + +lcCursor = [v_articole] +lnSucces = goExecutor.oExecute(lcSql,lcCursor) +goExecutor.oReset() + +Return lnSucces +Endproc && update_articole_politica +*************************************************************************************************************** +*!* Procedure update_articole_politica_utilizator +*!* If Used('v_articole') +*!* Use In v_articole +*!* Endif +*!* lcSql = [select id_articol,id_pol,pret,um,nume_articol,codmat ] + ; +*!* [from ] + gcS + [.com_vpreturi_utilizator where id_util = ?gnIdUtil order by nume_articol] +*!* lcCursor = [v_articole] +*!* lnSucces = goExecutor.oExecute(lcSql,lcCursor) +*!* goExecutor.oReset() + +*!* Return lnSucces +*!* Endproc && update_articole_politica_utilizator +*************************************************************************************************************** +Procedure update_articole_politica_comenzi +Lparameters tcOptiune + +PRIVATE pcOptiune +If Used('v_articole') + Use In v_articole +Endif +pcOptiune = NVL(tcOptiune,[]) + +TEXT TO lcSql TEXTMERGE NOSHOW +select p.id_articol,p.id_pol,p.pret,p.um,p.nume_articol,p.codmat,p.codbare,p.preturi_cu_tva as pret_cu_tva, s.stoc + from com_vpreturi_utilizator p + left join (select id_articol, + sum(cants + cant - cante) as stoc + from stoc + where an = <> + and luna = <> + and id_gestiune in + (SELECT X + FROM table(charn2collection((select pack_comenzi.extrage_optiuni(varvalue, <>) as id_pol from optiuni where varname = 'LISTA_GESTIUNI_STOC'), + ','))) + group by id_articol) s + on p.id_articol = s.id_articol + where p.id_util = ?gnIdUtil and p.id_pol in + (select to_number(pack_comenzi.extrage_optiuni(varvalue,<>)) as id_pol from optiuni where varname = '<>') + order by p.nume_articol +ENDTEXT +lcCursor = [v_articole] +lnSucces = goExecutor.oExecute(lcSql,lcCursor) +goExecutor.oReset() +RELEASE pcOptiune +Return lnSucces +Endproc && update_articole_politica_comenzi +*************************************************************************************************************** +*!* Procedure caut_politici_curente +*!* Local locauta,llReturn +*!* Store "" To locauta +*!* Store .F. To llReturn +*!* lcSelect = ["select id_pol,nume,datai,datas from ] + gcS + [.crm_vpolitici_pret_curente"] +*!* lcFiltru = [1=2] +*!* lcSchema = [''] +*!* lcOrder = [2] +*!* lcColoane = [nume,datai,datas] +*!* lcTitlu = [ALEGETI POLITICA DE PRETURI] +*!* lcTitluColoane = [Nume,Data inceput,Data sfarsit] +*!* locauta = cauta_alfa(lcSelect,lcFiltru,lcSchema,lcOrder,lcColoane,lcTitlu,lcTitluColoane,"") +*!* Return locauta +*!* Endproc && caut_politici_curente +*************************************************************************************************************** +PROCEDURE caut_politici_curente_utilizator +Local locauta,llReturn +Store "" To locauta +Store .F. To llReturn +lcSelect = [select id_pol,nume,datai,datas from ] + gcS + [.crm_vpolpretcurutil] +lcFiltru = [] +lcFiltruOriginal = [id_util = ?gnIdUtil] +lcSchema = [] +lcOrder = [2] +lcColoane = [nume,datai,datas] +lcTitlu = [ALEGETI POLITICA DE PRETURI] +lcTitluColoane = [Nume,Data inceput,Data sfarsit] +locauta = cauta_alfa(lcSelect,lcFiltru,lcSchema,lcOrder,lcColoane,lcTitlu,lcTitluColoane,"",.F.,lcFiltruOriginal) +Return locauta +Endproc && caut_politici_curente_utilizator +*************************************************************************************************************** +*!* Procedure caut_lucrari_curente +*!* Local locauta,llReturn +*!* Store "" To locauta +*!* Store .F. To llReturn +*!* lcSelect = ["select id_lucrare,nrord,data_lucrare,termen_executie from ] + gcS + [.vlucrari_curente"] +*!* lcFiltru = [1=2] +*!* lcSchema = [''] +*!* lcOrder = [2] +*!* lcColoane = [nrord,data_lucrare,termen_executie] +*!* lcTitlu = [ALEGETI LUCRAREA] +*!* lcTitluColoane = [Numar lucrare,Data lucrare,Termen] +*!* locauta = cauta_alfa(lcSelect,lcFiltru,lcSchema,lcOrder,lcColoane,lcTitlu,lcTitluColoane,"") +*!* Return locauta +*!* Endproc +*************************************************************************************************************** +Function caut_lucrari_curente_gs +Lparameters tlToateIreg, tlMaiMulteLucrari +Store "" To locauta + +lcFiltru = [1=2] +lcSchema = [id_lucrare n(20),nrord c(30),data_lucrare t,termen_executie t] +lcOrder = [termen_executie] +lcColoane = [nrord,data_lucrare,termen_executie] +lcTitlu = [ALEGETI LUCRAREA] +lcTitluColoane = [Numar lucrare,Data lucrare,Termen] +llMaiMulteLucrari = tlMaiMulteLucrari +lcSelect = [select id_lucrare,nrord,data_lucrare,termen_executie from vlucrari_curente where] +lcFiltruOriginal = [2=2] +lcNumeProc = [nom_lucrari_detalii] +llToateIreg = tlToateIreg +lcPrimaColoana = [termen_executie] +lnPornire = 1 +lnTipReturn = Iif(tlMaiMulteLucrari, 1, 0) +lcIdColumn = "id_lucrare" +locauta = cauta_alfa_gs(lcSelect, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane, lcNumeProc, llToateIreg, lcFiltruOriginal, lcPrimaColoana, lnPornire, lnTipReturn , lcIdColumn, .F. , get_ora()) + +Return locauta +Endfunc && caut_lucrari_curente_gs +***************************************************************************************************************** +*!* Function caut_nume_politica +*!* Lparameters tnIdPol +*!* Local lcNume +*!* Store "" To lcNume +*!* If !Empty(Nvl(tnIdPol,0)) +*!* If Used('crstemppol') +*!* Use In crstemppol +*!* Endif +*!* lcSql = [select nume from ] + gcS + [.crm_vpolitici_pret_curente where id_pol = ] + Alltrim(Str(tnIdPol)) +*!* lnSucces = goExecutor.oExecute(lcSql,[crstemppol]) +*!* If lnSucces < 0 +*!* amessagebox(goExecutor.oPrelucrareEroare(),16,"Eroare") +*!* Else +*!* Select crstemppol +*!* lcNume = Alltrim(Upper(nume)) +*!* Endif +*!* If Used('crstemppol') +*!* Use In crstemppol +*!* Endif +*!* Endif + +*!* Return lcNume +*!* Endfunc && caut_nume_politica +*************************************************************************************************************** \ No newline at end of file diff --git a/COMUN/programe/update_imob.prg b/COMUN/programe/update_imob.prg new file mode 100644 index 0000000..55b9db3 --- /dev/null +++ b/COMUN/programe/update_imob.prg @@ -0,0 +1,71 @@ +Procedure cctipuri_imob() + +If Used('v_tipuri_imob') + Use In v_tipuri_imob +Endif + +lcSql = [select id_tip_imobilizare,TRIM(denumire) as denumire,]+; + [inactiv from ] + gcS + [.imob_vtipuri_imobilizare] +lcCursor = [v_tipuri_imob] +lnSucces = goExecutor.oExecute(lcSql,lcCursor) +If lnSucces < 0 + aMessagebox(goExecutor.cEroare,0+16,"Eroare") +Endif +goExecutor.oReset() +Return lnSucces + +Endproc +********************************************************************** +Procedure cctipuri_amort() + +If Used('v_tipuri_amort') + Use In v_tipuri_amort +Endif + +lcSql = [select id_tip_amortizare,TRIM(denumire) as denumire,]+; + [inactiv from ] + gcS + [.imob_vtipuri_amortizare] +lcCursor = [v_tipuri_amort] +lnSucces = goExecutor.oExecute(lcSql,lcCursor) +If lnSucces < 0 + aMessagebox(goExecutor.cEroare,0+16,"Eroare") +Endif +goExecutor.oReset() +Return lnSucces + +Endproc +********************************************************************** +Procedure cctipuri_operatie() + +If Used('v_tipuri_operatie') + Use In v_tipuri_operatie +Endif + +lcSql = [select id_tip_operatie,TRIM(denumire) as denumire,]+; + [inactiv from ] + gcS + [.imob_vtipuri_operatie where inactiv = 0 order by Id_tip_operatie] +lcCursor = [v_tipuri_operatie] +lnSucces = goExecutor.oExecute(lcSql,lcCursor) +If lnSucces < 0 + aMessagebox(goExecutor.cEroare,0+16,"Eroare") +Endif +goExecutor.oReset() +Return lnSucces + +Endproc +********************************************************************** +Procedure ccnorme() + +If Used('v_norme') + Use In v_norme +Endif + +lcSql = [select * from ] + gcS + [.imob_vnorme] +lcCursor = [v_norme] +lnSucces = goExecutor.oExecute(lcSql,lcCursor) +If lnSucces < 0 + aMessagebox(goExecutor.cEroare,0+16,"Eroare") +Endif +goExecutor.oReset() +Return lnSucces + +Endproc +********************************************************************** \ No newline at end of file diff --git a/COMUN/programe/update_nomenclator_salarii.prg b/COMUN/programe/update_nomenclator_salarii.prg new file mode 100644 index 0000000..f1245c4 --- /dev/null +++ b/COMUN/programe/update_nomenclator_salarii.prg @@ -0,0 +1,123 @@ +********************************************************** +PROCEDURE update_dedsupl + +If Used('v_dedsupl') + Use In v_dedsupl +Endif + +lcSql = [select * from ] + gcS + [.sal_vnom_dedsupl] +lcCursor = [v_dedsupl] +lnSucces = goExecutor.oExecute(lcSql,lcCursor) +goExecutor.oReset() + +Return lnSucces + +ENDPROC + +********************************************************** + + +PROCEDURE update_hand +LPARAMETERS tnAlias + +*!* If Used('v_hand') +*!* Use In v_hand +*!* Endif + +lcSql = [select * from ] + gcS + [.sal_vnom_handicap] +IF PCOUNT()=1 + lcCursor = [v_hand]+ALLTRIM(STR(tnAlias)) +ELSE + lcCursor = [v_hand] +ENDIF +lnSucces = goExecutor.oExecute(lcSql,lcCursor) +goExecutor.oReset() + +Return lnSucces + +ENDPROC + +********************************************************** +PROCEDURE update_mes + +If Used('v_meseria') + Use In v_meseria +Endif + +lcSql = [select * from ] + gcS + [.sal_vnom_mes] +lcCursor = [v_meseria] +lnSucces = goExecutor.oExecute(lcSql,lcCursor) +goExecutor.oReset() + +Return lnSucces + +ENDPROC + +******************************************************** +PROCEDURE update_form + +If Used('v_formatia') + Use In v_formatia +Endif + +lcSql = [select * from ] + gcS + [.sal_vnom_formatii] +lcCursor = [v_formatia] +lnSucces = goExecutor.oExecute(lcSql,lcCursor) +goExecutor.oReset() + +Return lnSucces + +ENDPROC + +************************************************************** +PROCEDURE update_limbi + +If Used('v_limba') + Use In v_limba +Endif + +lcSql = [select * from ] + gcS + [.sal_vnom_limb] +lcCursor = [v_limba] +lnSucces = goExecutor.oExecute(lcSql,lcCursor) +goExecutor.oReset() + +Return lnSucces + +ENDPROC + +**************************************************** +PROCEDURE update_curs + +If Used('v_curs') + Use In v_curs +Endif + +lcSql = [select * from ] + gcS + [.sal_vnom_curs] +lcCursor = [v_curs] +lnSucces = goExecutor.oExecute(lcSql,lcCursor) +goExecutor.oReset() + +Return lnSucces + +ENDPROC + +**************************************************** + +PROCEDURE update_stud + +If Used('v_stud') + Use In v_stud +Endif + +lcSql = [select * from ] + gcS + [.sal_vnom_stud] +lcCursor = [v_stud] +lnSucces = goExecutor.oExecute(lcSql,lcCursor) +goExecutor.oReset() + +Return lnSucces + +ENDPROC +**************************************************** + + + diff --git a/COMUN/programe/update_roadef_sal.prg b/COMUN/programe/update_roadef_sal.prg new file mode 100644 index 0000000..45f56bf --- /dev/null +++ b/COMUN/programe/update_roadef_sal.prg @@ -0,0 +1,143 @@ + +******************************************* +* PROCEDURE update_responsabil( ) +* Date : 05/23/05, 12:25:08 +* author : liana.macinic +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* +PROCEDURE update_responsabil( ) +If Used('v_resp') + Use In v_resp +Endif + +lcSql = [select * from ] + gcS + [.sal_responsabil where ales_decl = 1 and sters = 0 and inactiv = 0] +lcCursor = [v_resp] +lnSucces = goExecutor.oExecute(lcSql,lcCursor) +goExecutor.oReset() + +ENDPROC +*----------------------------------sfarsit procedura update_responsabil---------------------------------- + +******************************************* +* PROCEDURE update_sectie( ) +* Data/ora : 12/16/04, 14:26:22 +* autor : liana.macinic +* descriere: + +****** PARAMETER BLOCK ************** +* Parametri : 0 +* +******************************************* +Procedure update_sectie( ) +If Used('v_sectie') + Use In v_sectie +Endif + +lcSql = [select * from ] + gcS + [.vnom_sectii order by sectie]&& where inactiv = 0] +lcCursor = [v_sectie] +lnSucces = goExecutor.oExecute(lcSql,lcCursor) +goExecutor.oReset() + +Return lnSucces + +Endproc +******************************************* +* PROCEDURE update_transe( ) +* Date : 05/26/05, 16:25:42 +* author : liana.macinic +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* +PROCEDURE update_transe( ) +If Used('v_transe') + Use In v_sectie +Endif + +lcSql = [select * from ] + gcS + [.SAL_NOM_TRANSE where inactiv = 0 and sters = 0] +lcCursor = [v_transe] +lnSucces = goExecutor.oExecute(lcSql,lcCursor) +goExecutor.oReset() + +Return lnSucces + +ENDPROC +*----------------------------------sfarsit procedura update_transa---------------------------------- +******************************************* +* PROCEDURE update_semnaturi( ) +* Date : 05/26/05, 16:25:42 +* author : liana.macinic +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* +PROCEDURE update_semnaturi( ) +If Used('v_semnaturi') + Use In v_semnaturi +Endif + +lcSql = [select a.*,a.denumire as semnatura from SAL_semnaturi a where a.inactiv = 0 and a.sters = 0] +lcCursor = [v_semnaturi] +lnSucces = goExecutor.oExecute(lcSql,lcCursor) +goExecutor.oReset() + +Return lnSucces + +ENDPROC +*----------------------------------sfarsit procedura update_transa---------------------------------- +******************************************* +* PROCEDURE update_ore( ) +* Date : 05/26/05, 16:25:42 +* author : liana.macinic +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* +PROCEDURE update_ore( ) +If Used('v_nomore') + Use In v_nomore +Endif + +lcSql = [select * from ] + gcS + [.SAL_NOMORE where inactiv = 0 and sters = 0] +lcCursor = [v_nomore] +lnSucces = goExecutor.oExecute(lcSql,lcCursor) +goExecutor.oReset() + +Return lnSucces + +ENDPROC +*----------------------------------sfarsit procedura update_ore---------------------------------- +******************************************* +* PROCEDURE update_calcdin( ) +* Date : 06/17/05, 12:52:29 +* author : liana.macinic +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* +PROCEDURE update_calcdin( ) +If Used('v_calcdin') + Use In v_calcdin +Endif + +lcSql = [select id_calcdin,camp,denumire as nume_camp,tabel from ] + gcS + [.sal_nom_calcdin where 2=2] +lcCursor = [v_calcdin] +lnSucces = goExecutor.oExecute(lcSql,lcCursor) +goExecutor.oReset() + +Return lnSucces + +ENDPROC +*----------------------------------sfarsit procedura update_calcdin---------------------------------- \ No newline at end of file diff --git a/COMUN/programe/updateserver.prg b/COMUN/programe/updateserver.prg new file mode 100644 index 0000000..bb8e391 --- /dev/null +++ b/COMUN/programe/updateserver.prg @@ -0,0 +1,1458 @@ +*!* 19.02.2010 +*!* marius.mutu +*!* update_corespondente_cvc - finalizare aprovizionare - corespondenta cont_aprovizionare +*!* 3xx = 401 -> 3xx = 32x + +*!* 22.03.2010 +*!* marius.mutu +*!* ccsectii, close_ccsectii + +*!* 27.05.2011 +*!* marius.mutu +*!* update_parteneriemail + +*!* 07.10.2016 +*!* marius.mutu +*!* ccsectii - corectie sql + +* PROCEDURE update_lunilean( ) +* Date : 06/10/2004, 13:27:54 +* author : marius.mutu +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* INCEPUT:update_lunilean******************************************* +PROCEDURE update_lunilean( ) + LOCAL lcSql, lcCursor, lnSucces + lcSql = [select * from contafin_oracle.lunilean] + lcCursor = [lunilean] + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + goExecutor.oReset() + + RETURN lnSucces + +ENDPROC +******************************************* SFARSIT: update_lunilean ******************************************* + + +* PROCEDURE update_calendar( ) +* Date : 06/10/2004, 13:27:54 +* author : marius.mutu +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* INCEPUT:update_calendar ******************************************* +PROCEDURE update_calendar( ) + + LOCAL lcNumeCal + STORE '' TO lcNumeCal + lcSelect = [select varvalue, col_an, col_luna, tip_col_an, tip_col_luna from syn_optiuni_programe WHERE id_prg_owner = ]+ALLTRIM(STR(gnIdProgram)) +[ and UPPER(varname) = 'CALENDAR'] + lcCursor = [crsNumeCal] + lnsucces = goExecutor.oExecute(lcSelect,lcCursor) + IF lnsucces < 0 + aMESSAGEBOX('Eroare la selectie ' + goExecutor.cEroare,0+16,"Eroare") + RETURN + ENDIF + + SELECT crsNumeCal + IF RECCOUNT() = 0 + lcNumeCal = 'CALENDAR' + lcCol_an = 'an' + lcCol_luna = 'luna' + lcSel_Col_an = 'an' + lcSel_Col_luna = ' to_char(' + lcCol_luna + ') ' + ELSE + lcNumeCal = ALLTRIM(crsNumeCal.varvalue) + lcCol_an = ALLTRIM(col_an) && an + lcCol_luna = ALLTRIM(col_luna) && luna + lctip_col_an = UPPER(ALLTRIM(tip_col_an)) && roaCont = C, roaSal = N + lctip_col_luna = UPPER(ALLTRIM(tip_col_luna)) + + DO case + CASE lctip_col_an = 'N' + lcSel_Col_an = ' to_char(' + lcCol_an + ') ' + CASE lctip_col_an = 'C' + lcSel_Col_an = lcCol_an + ENDCASE + + DO CASE + CASE lctip_col_luna = 'N' + lcSel_Col_luna = ' to_char(' + lcCol_luna + ') ' + CASE lctip_col_luna = 'C' + lcSel_Col_luna = lcCol_luna + ENDCASE + ENDIF + + If lcNumeCal = 'CALENDAR' + lcSelect = [select * from ] + gcS + [.calendar order by anul, luna] + Else + lcSelect = [select ] + lcSel_Col_an + [ as an, ] + lcSel_Col_luna + [ as nl ] + ; + [,0 as ctvai,0 as ctvam,0 as plafon_casa,0 as plafon_furnizori,0 as plafon_plati,]+; + lcCol_an+[ as anul,]+lcCol_luna+; + [ as luna from ] + lcSchema + [.] + lcNumeCal +; + [ order by ] + lcCol_an + [ * 12 + ] + lcCol_luna + EndIf + + lcCursor = [calendar] + lnsucces = goExecutor.oExecute(lcSelect,lcCursor) + goExecutor.oReset() + + RETURN lnSucces + + +ENDPROC +******************************************* SFARSIT: update_calendar ******************************************* + + +* PROCEDURE update_firme( ) +* Date : 06/10/2004, 13:27:08 +* author : marius.mutu +* description: +******************************************* INCEPUT:update_firme ******************************************* +PROCEDURE update_firme( ) + + *** selectez firmele + LOCAL lcSql, llSucces + lcSql = [select * from syn_nom_firme order by firma] + + llSucces = goExecutor.oExecuta(lcSql,'crsFirmeTemp') + IF llSucces + SET TEXTMERGE ON TO memvar lcSql NOSHOW + SELECT v_firme_temp + SCAN + \select CAST(<> as varchar2(50)) as schema, + \CAST(0 as Number(4)) as an1, CAST(0 as Number(2)) as luna1, min(anul*12+luna) as minanluna, + \CAST(0 as Number(4)) as an1, CAST(0 as Number(2)) as luna1, max(anul*12+luna) as maxanluna + \from <>.calendar + \union + ENDSCAN + SET TEXTMERGE TO + llSucces = goExecutor.oExecuta(lcSql,'crsFirmeLunaTemp') + IF llSucces + UPDATE crsFirmeLunaTemp SET an2 = INT(maxanluna/12), luna2 = MOD(maxanluna,12), an1 = INT(minanluna/12), luna2 = MOD(minanluna,12) + UPDATE crsFirmeLunaTemp SET an2 = an2 - 1, luna2 = 12 WHERE luna2 = 0 + UPDATE crsFirmeLunaTemp SET an1 = an1 - 1, luna1 = 12 WHERE luna1 = 0 + + SELECT a.*, b.an1, b.luna1, b.an2, b.luna2 from crsFirmeTemp a JOIN crsFirmeLunaTemp b ON PADR(UPPER(a.schema), 50, ' ') = PADR(UPPER(b.schema), 50, ' ') ; + INTO CURSOR v_firme + + USE IN (SELECT('crsFirmeLunaTemp')) + ENDIF + USE IN (SELECT('crsFirmeLunaTemp')) + ENDIF + + RETURN IIF(m.llSucces, 1, -1) +ENDPROC +******************************************* SFARSIT: update_firme ******************************************* + +* PROCEDURE update_firme_util_prog +* Date : 01/04/2005, 08:53:08 +* author : marius.mutu +* description: +******************************************* INCEPUT:update_firme_util_prog ******************************************* +PROCEDURE update_firme_util_prog +LPARAMETERS tnIdProgram, tnIdUtil + +LOCAL lnSucces + +PRIVATE pnIdProgram, pnIdUtil +pnIdProgram = tnIdProgram +pnIdUtil = tnIdUtil + +*!* lcSql = [select * from v_nom_firme where id_firma in ] + ; +*!* [(select id_firma from vdef_util_firme where id_program = ?pnIdProgram and id_util = ?pnIdUtil) ] + ; +*!* [order by firma] + lcSql = [{call syn_pack_drepturi.citeste_firme_program(?pnIdProgram,?pnIdUtil)}] + lcCursor = [v_firme] + + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + IF lnSucces < 0 + aMESSAGEBOX(goExecutor.cEroare,0 +16,'Eroare') + ENDIF + goExecutor.oReset() + + RETURN lnSucces + +ENDPROC +******************************************* SFARSIT: update_firme_util_prog ******************************************* + + +* PROCEDURE update_utilizatori( ) +* Date : 06/10/2004, 13:26:23 +* author : marius.mutu +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* INCEPUT:update_utilizatori ******************************************* +PROCEDURE update_utilizatori( ) + LOCAL lcSql, lcCursor, lnSucces + lcSql = [SELECT * from utilizatori] + lcCursor = [v_utilizatori] + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + goExecutor.oReset() + + RETURN lnSucces + +ENDPROC +******************************************* SFARSIT: update_utilizatori ******************************************* + +* PROCEDURE update_judete( ) +* Date : 11.10.2004, 15:24:02 +* author : catalin.neagu +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* INCEPUT:update_judete ******************************************* +PROCEDURE update_judete( ) + LOCAL lcSql, lcCursor, lnSucces + lcSql = [SELECT * from syn_vnom_judete order by judet] + lcCursor = [v_jud] + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + goExecutor.oReset() + + RETURN lnSucces +ENDPROC +******************************************* SFARSIT: update_judete ******************************************* +********************************************************************** +PROCEDURE cccateg_ent + LOCAL lcSql, lcCursor, lnSucces + + TEXT TO lcSql NOSHOW +select 1 as ordine, + CAST(null as number(10)) as id_categorie_entitate, + CAST(null as varchar2(150)) as categorie_entitate + from dual +union +select 2 as ordine, id_categorie_entitate, categorie_entitate + from vnom_categorii_entitati + where inactiv = 0 + order by ordine, categorie_entitate + ENDTEXT + lcCursor = 'v_nom_categ_ent' + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + RETURN lnSucces + +ENDPROC +***********************************************************************PROCEDURE close_categ_ent +PROCEDURE close_categ_ent + IF USED('v_nom_categ_ent') + USE IN v_nom_categ_ent + ENDIF +ENDPROC && close_categ_ent +********************************************************************** +PROCEDURE cclocalitati + LOCAL lcSql, lcCursor, lnSucces + lcSql = [select id_loc, localitate, id_judet, judet, id_tara, tara from syn_vnom_localitati where inactiv = 0 order by judet nulls last,tara,localitate] + lcCursor = 'v_nom_localitati' + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + RETURN lnSucces + +ENDPROC +***********************************************************************PROCEDURE close_cclocalitati +PROCEDURE close_cclocalitati + IF USED('v_nom_localitati') + USE IN v_nom_localitati + ENDIF +ENDPROC && close_cclocalitati +*********************************************************************** +PROCEDURE ccJudete + LOCAL lcSql, lcCursor, lnSucces + lcSql = 'select id_judet, judet, indicativ from '+gcS+'.vnom_judete order by judet' + lcCursor = 'v_nom_judete' + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + RETURN lnSucces + +ENDPROC && ccJudete +*********************************************************************** +PROCEDURE close_ccJudete + IF USED('v_nom_judete') + USE IN v_nom_judete + ENDIF +ENDPROC && close_ccJudete +*********************************************************************** +PROCEDURE ccTari + LOCAL lcSql, lcCursor, lnSucces + lcSql = [select null as id_tara, '' as tara, '' as prescurtare from dual union all] +; + [ select id_tara, tara, prescurtare from syn_nom_tari order by tara nulls first] + lcCursor = 'v_nom_tari' + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + RETURN lnSucces + +ENDPROC && ccTari +*********************************************************************** +PROCEDURE close_ccTari + IF USED('v_nom_tari') + USE IN v_nom_tari + ENDIF +ENDPROC && close_ccTari +*********************************************************************** +PROCEDURE cctipuri + LOCAL lcSql, lcCursor, lnSucces + lcSql='select id_tip_part,tip_partener from '+gcS+'.vnom_tip_parteneri order by tip_partener' &&id_tip_part' + lcCursor = 'v_nom_tip_parteneri' + + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + RETURN lnSucces + +ENDPROC +*********************************************************************** +PROCEDURE close_cctipuri + IF USED('v_nom_tip_parteneri') + USE IN v_nom_tip_parteneri + ENDIF +ENDPROC && close_cctipuri + +*********************************************************************** +PROCEDURE config_ireg + LOCAL lcSql, lcCursor, lnSucces + lcSql='select * from '+gcS+'.vconfig_cont_ireg order by cont' + lcCursor = 'v_config_cont_ireg' + + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + IF lnSucces < 0 + aMESSAGEBOX(goExecutor.cEroare,0+16,"Eroare") + ENDIF + + RETURN lnSucces + +ENDPROC && config_ireg +*********************************************************************** +PROCEDURE close_config_ireg + IF USED('v_config_cont_ireg') + USE IN v_config_cont_ireg + ENDIF +ENDPROC && close_config_ireg + +*********************************************************************** +* PROCEDURE update_coresp_tip_part( ) +* Date : 13/10/2004, 10:46:59 +* author : marius.mutu +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* INCEPUT:update_coresp_tip_part******************************************* +PROCEDURE update_coresp_tip_part( ) + + *** deschid corespondentele parteneri + lcSql = [select * from ] + gcS + [.coresp_tip_part] + lcCursor = [coresp_tip_part] + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + RETURN lnSucces + +ENDPROC +******************************************* SFARSIT: update_coresp_tip_part******************************************* + + +* PROCEDURE update_coresp_tip_cont( ) +* Date : 13/10/2004, 10:49:03 +* author : marius.mutu +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* INCEPUT:update_coresp_tip_cont ******************************************* +PROCEDURE update_coresp_tip_cont( ) + + lcSql = [select * from ] + gcS + [.vcoresp_tip_cont] + lcCursor = [coresp_tip_cont] + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + RETURN lnSucces + +ENDPROC +******************************************* SFARSIT: update_coresp_tip_cont ******************************************* + +PROCEDURE cctipuri_selectate + LPARAMETERS tnId_part + lnId_part = tnId_part + + lcSql='select id_tip_part,tip_partener from '+gcS+'.VCORESP_TIP_PART where id_part = '+ALLTRIM(STR(lnId_part))+ 'order by tip_partener ' + lcCursor = 'v_nom_tip_parteneri_selectati' + + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + RETURN lnSucces + +ENDPROC + +*********************************************************************** +PROCEDURE close_cctipuri_selectate + IF USED('v_nom_tip_parteneri_selectati') + USE IN v_nom_tip_parteneri_selectati + ENDIF +ENDPROC && close_cctipuri_selectate + +*********************************************************************** + +PROCEDURE cctipuri_selectate_NOU + LPARAMETERS tnId_TIP_part + + IF PCOUNT()<1 OR TYPE('tnId_TIP_part')#'N' + RETURN -1 + ENDIF + + lnId_TIP_part = tnId_TIP_part + + lcSql='select id_tip_part,tip_partener from '+gcS+'.VNOM_TIP_PARTENERI where id_TIP_part = '+ALLTRIM(STR(lnId_TIP_part))+ 'order by tip_partener ' + lcCursor = 'v_nom_tip_parteneri_selectati' + + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + RETURN lnSucces + +ENDPROC + + +*********************************************************************** +PROCEDURE close_cctipuri_selectate_NOU + IF USED('v_nom_tip_parteneri_selectati') + USE IN v_nom_tip_parteneri_selectati + ENDIF +ENDPROC && close_cctipuri_selectate_NOU + +*********************************************************************** + +PROCEDURE ccvalute + + lcSql='select id_valuta,nume_val from '+gcS+'.vnom_valute order by nume_val' + lcCursor = 'v_nom_valute' + + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + RETURN lnSucces + +ENDPROC + + + + +******************************************* SFARSIT: update_parteneri ******************************************* +* PROCEDURE update_actper( ) +* Date : 09.11.2004, 09:33:32 +* author : catalin.neagu +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* INCEPUT:update_actper ******************************************* +PROCEDURE update_actper(tnCod) + + lcCod = ALLTRIM(STR(tnCod)) + lcSql = [SELECT * from ] + gcS + [.vact where cod = ] + lcCod + lcCursor = [ACTACT] + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + goExecutor.oReset() + + IF lnSucces>0 + SELECT * FROM actact INTO CURSOR actactan READWRITE + ENDIF + IF USED('actact') + USE IN actact + ENDIF + RETURN lnSucces + +ENDPROC +******************************************* SFARSIT: update_actper ******************************************* + + +* PROCEDURE Get_Lista_Act +* Date : 09/11/2004, 15:05:42 +* author : marius.mutu +* description: creeaza o lista cu campurile din act + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* INCEPUT:Get_Lista_Act******************************************* +PROCEDURE Get_Lista_Act + LOCAL lcLista + lcLista = [] + + lcSql = [select * from ] + gcS + [.ACT WHERE 1=2] + lcCursor = [CRS_ACT] + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + goExecutor.oReset() + IF lnSucces < 0 + aMESSAGEBOX(goExecutor.cEroare,0+16,"Eroare") + ENDIF + IF lnSucces > 0 + SELECT CRS_ACT + lnCount = FCOUNT() + FOR i = 1 TO lnCount + SELECT CRS_ACT + lcFieldName = UPPER(ALLTRIM(FIELD(i))) + lcLista = lcLista + [,] + lcFieldName + ENDFOR + lcLista = SUBSTR(lcLista,2) + ENDIF + IF USED('crs_Act') + USE IN CRS_ACT + ENDIF + + RETURN lcLista +ENDPROC +******************************************* SFARSIT: Get_Lista_Act ******************************************* + + +* PROCEDURE update_optiuni( ) +* Date : 15.11.2004, 10:08:49 +* author : catalin.neagu +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* INCEPUT:update_optiuni ******************************************* +PROCEDURE update_optiuni( ) + + lcSql='select * from '+gcS+'.optiuni order by varname' + lcCursor = 'v_optiuni' + + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + RETURN lnSucces + +ENDPROC +******************************************* SFARSIT: update_optiuni ******************************************* + +******************************************* INCEPUT:update_exceptii_ireg ************************************** +PROCEDURE update_exceptii_ireg( ) + + lcSql = [select * from ] + gcS + [.exceptii_ireg] + lcCursor = [exceptii_ireg] + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + RETURN lnSucces + +ENDPROC +******************************************* SFARSIT:update_exceptii_ireg *************************************** + +******************************************* INCEPUT:update_cote_TVA ************************************** +PROCEDURE update_cote_TVA( ) + + IF USED('cote_TVA') + USE IN cote_TVA + ENDIF + + lcSql = [select * from ] + gcS + [.cote_TVA where an =?gnAn and luna = ?gnLuna] + + lcCursor = [cote_TVA] + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + RETURN lnSucces + +ENDPROC +******************************************* SFARSIT:update_cote_TVA *************************************** + +******************************************* INCEPUT:update_jtva_coloane ************************************** +Procedure update_jtva_coloane + Lparameters tcTipJ,tcNumeCursor,tnTip + *!* tcTipJ > [JC] + *!* > [JV] + *!* tnTip > 0 - arata doar baza si neimpozabile + *!* > 1 - arata baza,tva si neimpozabile + *!* > 2 - arata doar baza si neimpozabile - fara neexigibile + *!* > 3 - arata baza,tva si neimpozabile - fara neexigibile + *!* > 4 - arata doar baza si neimpozabile - fara exigibile + *!* > 5 - arata baza,tva si neimpozabile - fara exigibile + *!* > 6 - arata tot + Local lcFiltru, lcNumeCursor, lnTip + If Empty(tcNumeCursor) + lcNumeCursor = [jtva_coloane] + Else + lcNumeCursor = tcNumeCursor + Endif + If Used(lcNumeCursor) + Use In (lcNumeCursor) + Endif + *!* modificare ROAFACTURARE v 2.2.0 + lnTip = iif(empty(tnTip),0,tnTip) + If inlist(lnTip,0,2,4) + *!* If Empty(tnTip) + *!* modificare ROAFACTURARE v 2.2.0 ^ + lcFiltru = [where afisat > 0 and id_jtva_coloana > 0] + ELSE + IF m.lnTip = 6 + lcFiltru = [where 1=1] + ELSE + lcFiltru = [where id_jtva_coloana > 0] + ENDIF + Endif + *!* modificare ROAFACTURARE v 2.2.0 + do case + case inlist(lnTip,2,3) + lcFiltru = lcFiltru + [ and id_jtva_ex is null] + case inlist(lnTip,4,5) + lcFiltru = lcFiltru + [ and id_jtva_neex is null] + otherwise + lcFiltru = lcFiltru + endcase + *!* modificare ROAFACTURARE v 2.2.0 ^ + *!* modificare 12.07.2010 + lcFiltru = lcFiltru + [ and cota_tva in (select procent from cote_tva where sters = 0 and an = ?gnAn and luna = ?gnLuna)] + *!* modificare 12.07.2010 ^ + If !Empty(tcTipJ) + lcFiltru = lcFiltru + [ and ] + Alltrim(tcTipJ) + [ = 1] + Endif + + lcSql = [select * from vjtva_coloane ] + lcFiltru + [ order by ordine] + lnSucces = goExecutor.oExecute(lcSql,lcNumeCursor) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,16,"Eroare") + ELSE + SELECT (m.lcNumeCursor) + INDEX on id_jtva_coloana TAG id_jtva + Endif + goExecutor.oReset() + Return lnSucces + +Endproc +******************************************* SFARSIT:update_jtva_coloane *************************************** + +PROCEDURE update_saft_taxtable + LPARAMETERS tcNumeCursor + + Local lcSelect, lcNumeCursor, lcNumeCursorTemp, lcSql, llSucces + lcSelect = SELECT() + + lcNumeCursor = IIF(!EMPTY(m.tcNumeCursor), m.tcNumeCursor, 'saft_taxtable') + lcNumeCursorTemp = SYS(2015) + CREATE cursor (m.lcNumeCursor) (taxname C(250) null, typename C(250) null, taxcode N(6) null, taxtype N(3) null, descriere C(250) null, tip C(100) null, descriere_tip C(250) null, ; + procent_taxa N(7,2) null, procent_prorata N(7,2) null, inactiv N(1) null, tva N(1) null, wht N(1) null, tva_achizitii N(1) null, tva_livrari N(1) null) + + * adaug o inregistrare goala pentru a putea alege fara taxcode + INSERT INTO (m.lcNumeCursor) (taxname, taxcode, descriere, procent_taxa, tva, wht, tva_achizitii, tva_livrari) VALUES ('', 0, '', 0, 1, 1, 1, 1) + + lcSql = [select * from vsaft_taxtable order by tva, tva_livrari, tva_achizitii, wht, taxcode] + llSucces = goExecutor.oExecuta(m.lcSql, m.lcNumeCursorTemp) + + SELECT (m.lcNumeCursor) + APPEND FROM DBF(m.lcNumeCursorTemp) + INDEX on taxcode TAG taxcode + + USE IN (SELECT(m.lcNumeCursorTemp)) + + SELECT (m.lcSelect) + RETURN m.llSucces +ENDPROC + +PROCEDURE update_saft_mecanisme_plati + LPARAMETERS tcNumeCursor + + Local lcSelect, lcNumeCursor, lcSql, llSucces + lcSelect = SELECT() + lcNumeCursor = IIF(!EMPTY(m.tcNumeCursor), m.tcNumeCursor, 'saft_mecanisme_plati') + lcNumeCursorTemp = SYS(2015) + + CREATE cursor (m.lcNumeCursor) (mechanismcode C(9) null, name C(250) null, methodcode C(9) null, methodname C(250) null, paymentname C(250) null, afisat N(1) null, ordine N(3) null) + * adaug o inregistrare goala pentru a putea alege fara mechanismcode + INSERT INTO (m.lcNumeCursor) (mechanismcode, name, methodcode,methodname,afisat,ordine) VALUES ('','','','',1,0) + + lcSql = [select * from vsaft_mecanisme_plati order by ordine] + llSucces = goExecutor.oExecuta(m.lcSql, m.lcNumeCursorTemp) + + SELECT (m.lcNumeCursor) + APPEND FROM DBF(m.lcNumeCursorTemp) + INDEX on mechanismcode TAG mcode + + USE IN (SELECT(m.lcNumeCursorTemp)) + + SELECT (m.lcSelect) + RETURN m.llSucces +ENDPROC && update_saft_mecanisme_plati + +PROCEDURE update_saft_tip_facturi + LPARAMETERS tcNumeCursor + + Local lcSelect, lcNumeCursor, lcSql, llSucces + lcSelect = SELECT() + lcNumeCursor = IIF(!EMPTY(m.tcNumeCursor), m.tcNumeCursor, 'saft_tip_facturi') + lcNumeCursorTemp = SYS(2015) + + CREATE cursor (m.lcNumeCursor) (cod N(3) null, tip_saftname C(200) null) + * adaug o inregistrare goala pentru a putea alege fara mechanismcode + INSERT INTO (m.lcNumeCursor) (cod, tip_saftname) VALUES (null,'') + + lcSql = [select * from vsaft_tip_facturi order by tip_saftname] + llSucces = goExecutor.oExecuta(m.lcSql, m.lcNumeCursorTemp) + + SELECT (m.lcNumeCursor) + APPEND FROM DBF(m.lcNumeCursorTemp) + INDEX on cod TAG cod + + USE IN (SELECT(m.lcNumeCursorTemp)) + + SELECT (m.lcSelect) + RETURN m.llSucces +ENDPROC && update_saft_tip_facturi + +PROCEDURE update_um + LPARAMETERS tcNumeCursor + + Local lcSelect, lcNumeCursor, lcSql, llSucces + lcSelect = SELECT() + lcNumeCursor = IIF(!EMPTY(m.tcNumeCursor), m.tcNumeCursor, 'vnom_um') + lcSql = [select * from vnom_um] + llSucces = goExecutor.oExecuta(m.lcSql, m.lcNumeCursor) + + SELECT (m.lcNumeCursor) + INDEX on UM TAG UM + + SELECT (m.lcSelect) + RETURN m.llSucces +ENDPROC && update_um + +PROCEDURE update_um_iso + LPARAMETERS tcNumeCursor + + Local lcSelect, lcNumeCursor, lcSql, llSucces + lcSelect = SELECT() + lcNumeCursor = IIF(!EMPTY(m.tcNumeCursor), m.tcNumeCursor, 'vnom_um_iso') + lcSql = [select * from syn_vnom_um_iso ORDER BY um_iso] + llSucces = goExecutor.oExecuta(m.lcSql, m.lcNumeCursor) + + SELECT (m.lcNumeCursor) + INDEX on cod_um_iso TAG cod_um_iso + SET ORDER TO + SELECT (m.lcSelect) + RETURN m.llSucces +ENDPROC && update_um_iso + + +***************************************** INCEPUT:update_corespondente_cvc ************************************ +Procedure update_corespondente_cvc + If Used('crsconfigcvc') + Use In crsconfigcvc + Endif + *!* 19.02.2010 + lcSql = [select cont,cont_chelt,cont_venit, cont_aprovizionare, cont_diferente from vcoresp_cont_venchelt order by cont] + *!* 19.02.2010 ^ + lnSucces = goExecutor.oExecute(lcSql,[crsconfigcvc]) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,16,"Eroare") + Endif + goExecutor.oReset() + Return lnSucces + +Endproc +***************************************** SFARSIT:update_corespondente_cvc ************************************* +******************************************* INCEPUT:update_modele_masini ************************************** +Procedure update_modele_masini +Lparameters tnIdMarcaMasina +If Used('crsmodelemasini') + Use In crsmodelemasini +Endif +If Empty(tnIdMarcaMasina) + lcConditie=[] +Else + lcConditie=[where id_marca_masina=]+Alltrim(Str(tnIdMarcaMasina)) +Endif +lcSql = [select * from ] + gcS + [.vnom_modele_masini ]+lcConditie+[ order by model_masina] +lcCursor = [crsmodelemasini] +lnSucces = goExecutor.oExecute(lcSql,lcCursor) +If lnSucces < 0 + amessagebox(goExecutor.cEroare,16,"Eroare") +Endif +goExecutor.oReset() + +Return lnSucces +Endproc && update_modele_masini +******************************************* SFARSIT:update_modele_masini ************************************** + +********************* INCEPUT Get_programid ********************** +* PROCEDURE Get_programid( tcProgramName ) +* Date : 04/01/05, 10:02:08 +* author : marius.mutu +* description: +PROCEDURE Get_programId +LPARAMETERS tcProgramName +LOCAL lnProgramId +lnProgramId = -1 + +PRIVATE lcProgramName +lcProgramName = UPPER(ALLTRIM(tcProgramName)) + +lnSucces = goExecutor.oExecute('SELECT IDE_PROGRAM FROM vdef_programe WHERE UPPER(NUME) = ?lcProgramName','crsProgram') +IF lnSucces < 0 + aMESSAGEBOX(goExecutor.cEroare,0+16,'Eroare') +ENDIF +SELECT crsProgram +IF RECCOUNT() > 0 + GO top + lnProgramId = ide_program +ENDIF +IF USED('crsProgram') + USE IN crsProgram +ENDIF +RETURN lnProgramId + +ENDPROC +********************* SFARSIT Get_programid ********************** + + +********************* INCEPUT Acces_program_util ********************** +* PROCEDURE Acces_program_util( tnProgramId, tnUtilId ) +* Date : 04/01/05, 10:18:14 +* author : marius.mutu +* description: +PROCEDURE acces_program_util( tnProgramId, tnUtilId ) +*!* tnProgramId = identificatorul de program +*!* tnUtilId = id utilizator + +LOCAL llAcces +llAcces = .F. + +Private lnProgramId,lnUtilId +lnProgramId = tnProgramId +lnUtilId = tnUtilId +*!* MODIFICAT 03.11.2005 +*!* MARIUS.MUTU +lnSucces = goExecutor.oExecute('SELECT count(*) as acces FROM vdef_util_programe WHERE ID_UTIL = ?lnUtilId and ID_PROGRAM = ?lnProgramId','crsAcces') +IF lnSucces < 0 + aMESSAGEBOX(goExecutor.cEroare,0+16,'Eroare') +ENDIF +SELECT crsAcces +IF RECCOUNT() > 0 + GO top + IF acces >= 1 + llAcces = .T. + ENDIF +ENDIF +IF USED('crsAcces') + USE IN crsAcces +ENDIF +RETURN llAcces + +ENDPROC +********************* SFARSIT Acces_program_util ********************** + + +********************* INCEPUT GetAcces ********************** +* PROCEDURE GetAcces( tnIdProgram, tnIdUtil, tnIdFirma ) +* Date : 04/01/05, 10:18:14 +* author : marius.mutu +* description: +PROCEDURE GetAcces(tnIdProgram, tnIdUtil, tnIdFirma) + +LOCAL lnAcces +lnAcces = -1 + +Private lnIdProgram, lnIdUtil, lnIdFirma +lnIdProgram = tnIdProgram +lnIdUtil = tnIdUtil +lnIdFirma = tnIdFirma + +lnSucces = goExecutor.oExecute('SELECT acces FROM vutil_drept WHERE ID_UTIL = ?lnIdUtil and ID_PROG = ?lnIdProgram and id_firma = ?lnIdFirma','crsAcces') +IF lnSucces < 0 + aMESSAGEBOX(goExecutor.cEroare,0+16,'Eroare') +ENDIF +SELECT crsAcces +IF RECCOUNT() > 0 + GO top + lnAcces = acces +ENDIF +IF USED('crsAcces') + USE IN crsAcces +ENDIF +RETURN lnAcces + +ENDPROC +********************* SFARSIT GetAcces ********************** + +********************* INCEPUT GetNivel ********************** +* PROCEDURE GetNivel(tnIdProgram, tnIdUtil, tnIdFirma) +* Date : 04/01/05, 10:18:14 +* author : marius.mutu +* description: +PROCEDURE GetNivel(tnIdProgram, tnIdUtil, tnIdFirma) + +LOCAL lnNivel +lnNivel = -1 + +Private lnIdProgram, lnIdUtil, lnIdFirma +lnIdProgram = tnIdProgram +lnIdUtil = tnIdUtil +lnIdFirma = tnIdFirma + +lnSucces = goExecutor.oExecute('SELECT nivel FROM vutil_drept WHERE ID_UTIL = ?lnIdUtil and ID_PROG = ?lnIdProgram and id_firma = ?lnIdFirma','crsNivel') +IF lnSucces < 0 + aMESSAGEBOX(goExecutor.cEroare,0+16,'Eroare') +ENDIF +SELECT crsNivel +IF RECCOUNT() > 0 + GO top + lnNivel = nivel +ENDIF +IF USED('crsNivel') + USE IN crsNivel +ENDIF +RETURN lnNivel + +ENDPROC +********************* SFARSIT GetNivel ********************** + +********************* INCEPUT Get_id_prg_owner ********************** +PROCEDURE Get_id_prg_owner(tnId_program) + +PRIVATE pnId_program +pnId_program = tnId_program + +LOCAL lnIde_program +lnIde_program = -1 + +lnSucces = goExecutor.oExecute('SELECT IDE_PROGRAM FROM vprograme WHERE ID_PROG = ?pnId_program','crsProgram') +IF lnSucces < 0 + aMESSAGEBOX(goExecutor.cEroare,0+16,'Eroare') +ENDIF +SELECT crsProgram +IF RECCOUNT() > 0 + GO top + lnIde_program = ide_program +ENDIF +IF USED('crsProgram') + USE IN crsProgram +ENDIF +RETURN lnIde_program + +ENDPROC && Get_id_prg_owner +********************* SFARSIT Get_id_prg_owner ********************** + +******************************************* +* PROCEDURE IS_LUNA_BLOCATA( ) +* Date : 01/11/2005, 14:34:03 +* author : marius.mutu +* description: +******************************************* +PROCEDURE IS_LUNA_BLOCATA +PARAMETERS tcS, tnIdePrg, tnAn, tnLuna + + +PRIVATE pcS, pnIdePrg, pnAn, pnLuna, pnLunaBlocata +pcS = tcS +pnIdePrg = tnIdePrg +pnAn = tnAn +pnLuna = tnLuna +pnLunaBlocata = 0 + + +lcSql = [begin PACK_FIRMA.IS_LUNA_BLOCATA(?pcS, ?pnIdePrg, ?pnAn, ?pnLuna, ?@pnLunaBlocata); end;] +*!*lcSql = [begin PACK_FIRMA.IS_LUNA_BLOCATA(?gcS, ?gnId_prg_owner, ?gnAn, ?gnLuna, ?@pnLunaBlocata); end;] +lnSucces = goExecutor.oexecute(lcSql) +IF lnSucces < 0 + aMESSAGEBOX(goExecutor.cEroare,0+16,"Eroare") +ENDIF + +RETURN IIF(pnLunaBlocata = 1, .T., .F.) + +ENDPROC +*----------------------------------sfarsit procedura IS_LUNA_BLOCATA---------------------------------- + + + + +*----------------------------------inceput procedura update_placont---------------------------------- +*!* PARAMETRII: CONT SINTETIC / NIMIC, ANUL +*!* CREEAZA UN CURSOR CU CONTUL / CONTURILE SINTETICE DIN PLANUL DE CONTURI +*!* RETURN - NUMELE CURSORULUI + +PROCEDURE update_plcont +LPARAMETERS tcCont, tnAn + + LOCAL lcCont, lcReturn, lnSucces, lnAn, lcCursor + lcCont = ALLTRIM(tcCont) + lcReturn = "" + lnAn = tnAn + + IF !EMPTY(lcCont) + lcSql=[select id_plcont,cont,tip_sold from ] + gcS + [.Vplcont_sintetic where cont = '] + lcCont + [' and an = ] + ALLTRIM(STR(tnAn)) + [ order by cont] + ELSE + lcSql=[select id_plcont,cont,tip_sold from ] + gcS + [.Vplcont_sintetic WHERE an = ] + ALLTRIM(STR(gnan)) + [ order by cont] + ENDIF + + lcCursor = 'v_nom_cont' + IF USED(lcCursor) + USE IN (lcCursor) + ENDIF + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + + IF lnSucces < 0 + aMESSAGEBOX(goExecutor.cEroare,0+16,"Eroare") + ENDIF + + && INTORC NUMELE CURSORULUI DACA SUCCES + IF lnSucces > 0 + lcReturn = "v_nom_cont" + ENDIF + + RETURN lcReturn + +ENDPROC && get_cont +*----------------------------------sfarsit procedura update_placont---------------------------------- + +*----------------------------------inceput procedura update_placont---------------------------------- +*!* PARAMETRII: CONT SINTETIC, ANUL +*!* CREEAZA UN CURSOR CU CONTUL / CONTURILE SINTETICE DIN PLANUL DE CONTURI +*!* RETURN - NUMELE CURSORULUI + +PROCEDURE update_placont + LPARAMETERS tcCont, tnAn + + LOCAL lcCont, lcReturn, lnSucces, lnAn, lcCursor + + lcCont = ALLTRIM(tcCont) + lnAn = tnAn + lcReturn = "" + + lcSql = [select acont, acont || ' - ' || explicatie as denumire from ] + gcs + [.vplcont_analitic where cont = ']+; + lcCont + [' and an = ] + ALLTRIM(STR(lnAn)) + [ order by acont] + lcCursor = 'v_nom_acont' + + IF USED(lcCursor) + USE IN (lcCursor) + ENDIF + + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + + IF lnSucces < 0 + aMESSAGEBOX(goExecutor.cEroare,16,'Eroare') + ENDIF + + + IF USED('v_acont_tot') + USE IN v_acont_tot + ENDIF + + CREATE CURSOR v_acont_tot (acont c(4), denumire c(100)) + INSERT INTO v_acont_tot (acont, denumire) values('-1', "") + + IF USED('v_nom_acont') + SELECT v_acont_tot + APPEND FROM DBF('v_nom_acont') + USE IN v_nom_acont + ENDIF + + && INTORC NUMELE CURSORULUI DACA SUCCES + IF lnSucces > 0 + lcReturn = "v_acont_tot" + ENDIF + + RETURN lcReturn + +ENDPROC && update_placont +*---------------------------------- sfarsit procedura update_placont---------------------------------- + +PROCEDURE ccsucursale_mama + + LOCAL lcSql, lcCursor, lnSucces + lcSql = 'select id_sucursala,sucursala from vnom_sucursale where id_mama = ?gnIdFirma order by sucursala' + lcCursor = 'vnom_sucursale_mama' + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + IF lnSucces < 0 + AMESSAGEBOX(goExecutor.oPrelucrareEroare(),0+16,'Eroare') + ENDIF + RETURN lnSucces +ENDPROC && ccsucursale_mama +********************************************************************** +PROCEDURE close_ccsucursale_mama + USE IN (SELECT('vnom_sucursale_mama')) +ENDPROC && close_ccsucursale_mama + +********************************************************************** +PROCEDURE ccsucursale + + LOCAL lcSql, lcCursor, lnSucces + *!* modificare ROADEF v 2.0.11 : am adaugat e_mama + *!* modificare ROADEF v 2.0.16 : am adaugat filtrul inactiv = 0 + lcSql = 'select id_sucursala,sucursala,e_mama from vnom_sucursale where inactiv=0 order by sucursala' + lcCursor = 'vnom_sucursale' + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + IF lnSucces < 0 + AMESSAGEBOX(goExecutor.oPrelucrareEroare(),0+16,'Eroare') + ENDIF + RETURN lnSucces + +ENDPROC && ccsucursale +***********************************************************************PROCEDURE close_cclocalitati +PROCEDURE close_ccsucursale + IF USED('vnom_sucursale') + USE IN vnom_sucursale + ENDIF +ENDPROC && close_ccsucursale + + +********************************************************************** +PROCEDURE cctipuri_gestiuni + LOCAL lcSql, lcCursor, lnSucces + lcSql = 'select nume_tip,id_tipgest from vtipuri_gestiuni where id_tipgest <> 0 order by id_tipgest' + lcCursor = 'vtipuri_gestiuni' + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + IF lnSucces < 0 + AMESSAGEBOX(goExecutor.oPrelucrareEroare(),0+16,'Eroare') + ENDIF + RETURN lnSucces + +ENDPROC && cctipuri_gestiuni + +*********************************************************************** +PROCEDURE close_cctipuri_gestiuni + IF USED('vtipuri_gestiuni') + USE IN vtipuri_gestiuni + ENDIF +ENDPROC && close_cctipuri_gestiuni + + +********************************************************************** +PROCEDURE ccgrupuri_utilizatori + + LOCAL lcSql, lcCursor, lnSucces + lcSql = 'select id_grup, id_tata, denumire_grup, inactiv, nume_parinte from vgrupuri_utilizatori where inactiv = 0 order by denumire_grup' + lcCursor = 'vgrupuri_utilizatori' + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + IF lnSucces < 0 + AMESSAGEBOX(goExecutor.oPrelucrareEroare(),0+16,'Eroare') + ENDIF + RETURN lnSucces + +ENDPROC && ccgrupuri_utilizatori + +*********************************************************************** +PROCEDURE close_ccgrupuri_utilizatori + IF USED('vgrupuri_utilizatori') + USE IN vgrupuri_utilizatori + ENDIF +ENDPROC && close_ccgrupuri_utilizatori + + +********************************************************************** +*!* utilizatorii cu acces pe firma curenta +PROCEDURE ccutilizatori + + LOCAL lcSql, lcCursor, lnSucces +*!* modificare ROADEF v 2.0.16 : am adaugat filtrul inactiv = 0 + lcSql = [select distinct a.id_util,a.utilizator from syn_vutilizatori a join syn_vdef_util_firme b on a.id_util = b.id_util ] + ; + [WHERE b.id_firma = ?gnIdFirma and a.inactiv = 0 order by a.utilizator] + lcCursor = 'vutilizatori' + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + IF lnSucces < 0 + AMESSAGEBOX(goExecutor.oPrelucrareEroare(),0+16,'Eroare') + ENDIF + RETURN lnSucces + +ENDPROC && ccutilizatori +*********************************************************************** +PROCEDURE close_ccutilizatori + IF USED('vutilizatori') + USE IN vutilizatori + ENDIF +ENDPROC && close_ccutilizatori + +*********************************************************************** +*** intoarce loMonedaNationala.id_valuta, .nume_valuta +PROCEDURE GetMonedaNationala + LOCAL lcSelect, lcSql, lcCursor, lnSucces + + lcSelect = SELECT() + + lcSql = [SELECT id_valuta, nume_val FROM nom_valute WHERE sters = 0 AND inactiv = 0 AND (id_valuta = 0 or moneda_nationala = 1) AND rownum = 1] + lcCursor = SYS(2015) + lnSucces = goExecutor.oExecute(lcSql, lcCursor) + IF lnSucces < 0 + AMESSAGEBOX(goExecutor.oPrelucrareEroare(),0+16,'Eroare') + + loValuta = GetHash() + loValuta.SetValue("id_valuta",0) + loValuta.SetValue("nume_val","LEI") + ELSE + IF RECCOUNT(lcCursor) < 1 + loValuta = GetHash() + loValuta.SetValue("id_valuta",0) + loValuta.SetValue("nume_val","LEI") + ELSE + SELECT (lcCursor) + SCATTER NAME loValuta + ENDIF + ENDIF + IF USED(lcCursor) + USE IN (lcCursor) + ENDIF + + SELECT (lcSelect) + RETURN loValuta +ENDPROC && GetMonedaNationala + + +********************************************************************** +PROCEDURE cccalculatoare + + LOCAL lcSql, lcCursor, lnSucces + lcSql = 'select id_calc, id_sucursala, denumire, inactiv, descriere, sucursala from vcalculatoare where inactiv = 0 order by denumire' + lcCursor = 'vcalculatoare' + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + IF lnSucces < 0 + AMESSAGEBOX(goExecutor.oPrelucrareEroare(),0+16,'Eroare') + ENDIF + RETURN lnSucces + +ENDPROC && cccalculatoare + +*********************************************************************** +PROCEDURE close_cccalculatoare + IF USED('vcalculatoare') + USE IN vcalculatoare + ENDIF +ENDPROC && close_cccalculatoare + +********************************************************************** +PROCEDURE ccsetari + + LOCAL lcSql, lcCursor, lnSucces + lcSql = 'select id, setare, descriere, tip, enums, tabel, coloane, schema, titlucoloane, idcoloana, resultcoloana, titlu, filtru, filtruoriginal, ordine from setari order by setare' + lcCursor = 'vsetari' + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + IF lnSucces < 0 + AMESSAGEBOX(goExecutor.oPrelucrareEroare(),0+16,'Eroare') + ENDIF + RETURN lnSucces + +ENDPROC && ccsetari + +*********************************************************************** +PROCEDURE close_ccsetari + IF USED('vsetari') + USE IN vsetari + ENDIF +ENDPROC && close_ccsetari + +*********************************************************************** +&&Cod Ocupatie +PROCEDURE update_cor + +If Used('v_cor') + Use In v_cor +Endif + +lcSql = [select a.*,row_number() over(order by cod) as rown from sal_vcor a order by cod] +lcCursor = [v_cor] +lnSucces = goExecutor.oExecute(lcSql,lcCursor) +goExecutor.oReset() + +Return lnSucces + +ENDPROC + +PROCEDURE update_marci + + lcSql = [SELECT * from ] + gcS + [.vnom_marci_masini] + lcCursor = [v_marci] + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + goExecutor.oReset() + + RETURN lnSucces +ENDPROC + +Procedure Update_GrupUtilAnalitice + LOCAL lcSql, lcCursor, lnSucces + + lcSql = "select ga.cont, ga.acont ; + from config_gruputil_analitice ga join utilizatori_rol_intern u on ga.id_grup = u.id_grup ; + where u.id_util = ?gnIdUtil" + + lcCursor = 'crsGrupUtilAnalitice' + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + IF lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare,0+16,'Eroare') + ENDIF + + RETURN lnSucces +EndProc && Update_GrupUtilAnalitice + +******************************************* +Procedure Update_TVAAnalitice + LOCAL lcSql, lcCursor, lnSucces + +TEXT TO lcSql NOSHOW +select c.id_jtva_coloana, + c.explicatie_tva, + c.cont, + c.acont, + c.id_grup, + c.denumire_grup, + c.id_sucursala, + c.sucursala, + c.id_util, + c.utilizator, + c.dataora + from vconfig_tva_analitice c + left join utilizatori_rol_intern u on (c.id_grup = u.id_grup and u.sters = 0) + where c.id_grup is null or u.id_util = ?gnIdUtil or c.id_sucursala is null or c.id_sucursala = ?gnIdSucursala +ENDTEXT + + lcCursor = 'crsTVAAnalitice' + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + IF lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare,0+16,'Eroare') + ENDIF + + RETURN lnSucces +EndProc && Update_TVAAnalitice + +******************************************* +PROCEDURE update_optiuni_util( ) + IF USED('v_optiuni_util') + USE IN v_optiuni_util + ENDIF + + lcSql='select * from optiuni_util where id_util = '+ALLTRIM(STR(gnIdUtil)) + [ or id_util = 0 order by varname] + lcCursor = 'v_optiuni_util' + + lnSucces = goExecutor.oExecute(lcSql,lcCursor) +*!* MESSAGEBOX('v_optiuni_util') + RETURN lnSucces + +ENDPROC + +********************************************************************** +PROCEDURE ccsectii + lparameters tlBlank + *** tlBlank: .T. daca se adauga o inregistrare goala la inceputul cursorului pentru cazul in care nu este obligatorie completarea sectiei (ex: nom_gestiuni.id_sectie) + + LOCAL lcSql, lcCursor, llSucces, lcSqlBlank + + text to lcSqlBlank noshow +select cast(NULL AS NUMBER(5)) as id_sectie, + rpad(' ', 50, ' ') as sectie, + cast(0 as NUMBER(20)) as id_mod, + 0 as inactiv, + 0 as nsectie, + rpad(' ', 10, ' ') as csectie, + cast(0 as NUMBER(5)) as id_sucursala, + rpad(' ', 100, ' ') as sucursala, + rpad(' ', 10, ' ') as caen + from dual + endtext + + lcSql = ' select id_sectie, sectie, id_mod, inactiv, nsectie, csectie, id_sucursala, sucursala, caen from vnom_sectii where inactiv=0 order by sectie' + lcSql = iif(m.tlBlank, m.lcSqlBlank + ' UNION ALL ', '') + m.lcSql + + lcCursor = 'vnom_sectii' + llSucces = goExecutor.oExecuta(lcSql,lcCursor) + + RETURN iif(m.llSucces, 1, -1) + +ENDPROC && ccsectii +***********************************************************************PROCEDURE close_cclocalitati +PROCEDURE close_ccsectii + USE IN (SELECT('vnom_sectii')) +ENDPROC && close_ccsucursale + +***********************************************************************PROCEDURE close_cclocalitati +PROCEDURE update_parteneriemail + LOCAL lcSql, lcCursor, lnSucces + + lcSql='select p.denumire, a.email, substr(a.adresa,1,250) as adresa from nom_parteneri p join vadrese_parteneri a on p.id_part = a.id_part where p.sters = 0 and p.inactiv = 0 and a.email is not null' + lcCursor = 'cparteneriemail' + + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + RETURN lnSucces +ENDPROC && update_parteneriemail + +*********************************************************************** +PROCEDURE close_parteneriemail + IF USED('cparteneriemail') + USE IN (SELECT('cparteneriemail')) + ENDIF +ENDPROC && close_parteneriemail + +*********************************************************************** +procedure update_grupe_art + Local lcCursor, lcSel, lnsucces + Use In (select('crs_grupe_art')) + + lcSel = [select grupa,id_grupa from vgest_art_gr order by grupa] + lcCursor = [crs_grupe_art] + lnsucces = goExecutor.oExecuta(m.lcSel, m.lccursor) +endproc && update_grupe_art + +*********************************************************************** +PROCEDURE close_grupe_art + USE IN (SELECT('crs_grupe_art')) +ENDPROC && close_grupe_art + +*********************************************************************** +procedure update_subgrupe_art + Local lccursor, lcsel, lnsucces + Use In (select('crs_subgrupe_art')) + + lcsel = [select subgrupa,id_subgrupa,id_grupa,indicativ from vgest_art_sbgr order by subgrupa] + lccursor = [crs_subgrupe_art] + lnsucces = goExecutor.oExecute(m.lcsel, m.lccursor) +endproc && update_subgrupe_art + +*********************************************************************** +PROCEDURE close_subgrupe_art + USE IN (SELECT('crs_subgrupe_art')) +ENDPROC && close_subgrupe_art + +*********************************************************************** +procedure update_tip_doc + LPARAMETERS tlBlank + * tlBlank - se adauga o inregistrare goala + + Local lccursor, lcsel, llsucces + Use In (select('crsTipDoc')) + + lcsel = IIF(m.tlBlank, [select '' as tip, '--' as descriere from dual UNION ALL ], []) + [select tip, descriere from nom_tip_doc order by descriere] + lccursor = [crsTipDoc] + llsucces = goExecutor.oExecuta(m.lcsel, m.lccursor) + RETURN llSucces +endproc && update_tip_doc + +*********************************************************************** +PROCEDURE close_tip_doc + USE IN (SELECT('crsTipDoc')) +ENDPROC && close_tip_doc + +*********************************************************************** +procedure update_fdoc + LPARAMETERS tcFilter, tcAlias + Local lccursor, lcsel, llsucces + lccursor = IIF(!EMPTY(tcAlias), m.tcAlias, [crsFDoc]) + Use In (select(m.lccursor)) + + lcsel = [select id_fdoc, fel_document, tip_doc, descriere, paymentcode from vnom_fdoc ] + IIF(!EMPTY(m.tcFilter), [where ] + m.tcFilter , []) + [ order by fel_document] + llsucces = goExecutor.oExecuta(m.lcsel, m.lccursor) + RETURN llSucces +endproc && update_fdoc + +*********************************************************************** +PROCEDURE close_fdoc + USE IN (SELECT('crsFDoc')) +ENDPROC && close_fdoc + + +*********************************************************************** +procedure update_serii + LPARAMETERS tlBlank, tcFilter, tcAlias + * tlBlank - se adauga o inregistrare goala + + Local lccursor, lcsel, llsucces + + lccursor = IIF(!EMPTY(tcAlias), m.tcAlias, [crsSerii]) + Use In (select(m.lccursor)) + + lcsel = IIF(m.tlBlank, [select 0 as id_serie, '--' as serie, 0 as an, 0 as luna, 0 as lungime, 0 as inactiv, '' as resetare, '' as exemplu, 0 as isautofactura, 0 as isbeneficiari, 0 as isterti, 0 as isfurnizori from dual UNION ALL ], []) + ; + [select id_serie, serie, an, luna, lungime, inactiv, resetare, exemplu, isautofactura, isbeneficiari, isterti, isfurnizori from vserii ] + IIF(!EMPTY(m.tcFilter), [where ] + m.tcFilter , []) + [ order by serie] + llsucces = goExecutor.oExecuta(m.lcsel, m.lccursor) + RETURN llSucces +endproc && update_serii + +*********************************************************************** +PROCEDURE close_serii + USE IN (SELECT('crsSerii')) +ENDPROC && close_serii + \ No newline at end of file diff --git a/COMUN/programe/validare.prg b/COMUN/programe/validare.prg new file mode 100644 index 0000000..4a0820a --- /dev/null +++ b/COMUN/programe/validare.prg @@ -0,0 +1,2226 @@ +*!* 15.03.2010 +*!* marius.mutu +*!* VerificareCod.Vies - iau direct din pagina web in loc de serviciu web (nu mai merge) + +*!* 07.04.2011 +*!* marius.mutu +*!* adaugare verificarecod.InfoMfin2Array, ParseTable +*!* modificat Verificarecod.MFIN - alta aranjare in pagina a tabelului cu date de la mfinante.ro +*!* s-a modificat adresa de la mfinante.ro + +*!* 12.04.2011 +*!* marius.mutu +*!* verificarecod.validare_cif - intorc .T. pentru CIF-urile <> RO (nu am algoritm) +*!* tratare VIES alte tari din UE in afara de RO + +*!* 20.01.2012 +*!* marius.mutu +*!* VERIFICARE_CIF, MFIN - Taxa pe valoarea adaugata (data luarii in evidenta) + datatvamfin, platitortvamfin + +*!* 27.01.2012 +*!* marius.mutu +*!* VerificareCod.Init - nu mai este nevoie de tlMFINROMFAST, tlVIESROMFAST ca parametri - se citesc din settings.ini + +*!* 28.11.2012 +*!* marius.mutu +*!* verificare_cif, mfin - Se verifica si starea pentru un cod fiscal de pe mfinante.ro +*!* s-au adaugat proprietati pentru captcha, si o singura sesiune xmlhttp + +*!* 04.12.2014 +*!* marius.mutu +*!* MFIN - se foloseste GET in loc de POST - restrictii puse de MF + +*!* 27.02.2017 +*!* marius.mutu +*!* ANAF_SincronWebService_PlatitorTva +*!* se incearca prima oara cu inHTTP.winHTTPrequest.5.1 + +*!* 10.01.2018 +*!* marius.mutu +*!* VerificareANAF - completare stare TVA Incasare, Split TVA, Inactiv + +*!* 20.07.2020 +*!* marius.mutu +*!* ANAF_SincronWebService_PlatitorTva api v4 + +*!* 06.01.2021 +*!* marius.mutu +*!* ANAF_SincronWebService_PlatitorTva api v5 +nrRegCom + +*!* 24.04.2023 +*!* marius.mutu +*!* ANAF_SincronWebService_PlatitorTva api v8 + +*!* 19.05.2025 +*!* marius.mutu +*!* ANAF_SincronWebService_PlatitorTva api v9 + +*!* http://ec.europa.eu/taxation_customs/vies/viesquer.do +*!* http://localhost/contafinupdate/verificarecod.aspx/verificarecod/verificare/CIF/1879855/MFIN +*!* http://localhost/contafinupdate/verificarecod.aspx/verificarecod/verificare/CNP/1810228134187 + +*!* http://localhost:1512/WebRoot/codfiscaldebug.aspx/verificarecod/verificare/CIF/1879855/1 + +*!* http://localhost/update/codfiscal.aspx/verificarecod/validare/CIF/1879855 +*!* http://localhost/update/codfiscal.aspx/verificarecod/validare/CNP/1810228134187 + +#Define TIP_CNP 1 +#Define TIP_CIF 2 +#Define TIP_IBAN 3 +#Define TIP_CC 4 +#Define TIP_ISBN 5 +#Define TIP_NIF 6 +#Define CRLF Chr(13) + Chr(10) +#Define CR Chr(13) + +Clear +Local lcDir, lcPath, llVIESURL, lcRomfastURL, loVerificare +Local llMFINURL, lcMfinanteURL, lcMfinanteParams, I +Local llValid, lcRegCom, llPlatitorTVA + +lcDir = Addbs(Justpath(Sys(16, 0))) +lcDir = Left(lcDir, Rat('\', lcDir, 2) ) +*!* MESSAGEBOX(lcDir) +Set Default To (lcDir) +lcPath = lcDir + 'controllers;' + ; + lcDir + 'programe;' + ; + lcDir + 'utility;' + +Set Path To (lcPath) +Set Procedure To regex.prg Additive + +*!* strPattern = "[^A-Za-z 0-9 \.,\?'""!@#\$%\^&\*\(\)-_=\+;:<>\/\\\|\}\{\[\]`~]*" +Create Cursor cTeste (test c(200), rezultat L, mesaj c(250)) + +If .T. + *!* TREBUIE OPTIUNI - VARIABILE PUBLICE gcVIESDotNet, gcVIESURL + + lcRomfastURL = "http://localhost/update/verificarecod.aspx/verificarecod/verificare/CIF/|CIF|/|TIP|" + *!* lcMfinanteURL = "http://www.mfinante.ro/contribuabili/link.jsp?body=/cod.do" + *!* lcMfinanteURL = "http://apt1.mfinante.ro/site/contribuabili/link.jsp?body=/cod.do" + *!* lcMfinanteParams = "cod=|CIF|" + lcMfinanteURL = "http://www.mfinante.ro/infocodfiscal.html" + lcMfinanteParams = "cod=|CIF|&captcha=|CAPTCHA|&B1=VIZUALIZARE" + + For I = 1 To 2 + + llVIESURL = I = 1 + llMFINURL = I = 1 + ? + ?'------------------------------------------' + If I = 1 + ?'* VERIFICARE CIF PE ROMFAST' + Else + ?'* VERIFICARE PE MFINANTE SI CU DLL DIRECT PE VIES' + Endif + + ? + ?'* ROMFAST SRL - VALIDARE', I + llValid = .T. + lcRegCom = '' + llPlatitorTVA = .F. + test_verificare_cif('1879855', '', llVIESURL, llMFINURL, lcRomfastURL, lcMfinanteURL, lcMfinanteParams, llValid, lcRegCom, llPlatitorTVA) + + ? + ?'* ROMFAST SRL - VIES', I + llValid = .T. + lcRegCom = '' + llPlatitorTVA = .T. + test_verificare_cif('1879855', 'VIES', llVIESURL, llMFINURL, lcRomfastURL, lcMfinanteURL, lcMfinanteParams, llValid, lcRegCom, llPlatitorTVA) + + ? + ?'* ROMFAST SRL - MFIN', I + llValid = .T. + lcRegCom = 'J13/626/1991' + llPlatitorTVA = .F. + test_verificare_cif('1879855', 'MFIN', llVIESURL, llMFINURL, lcRomfastURL, lcMfinanteURL, lcMfinanteParams, llValid, lcRegCom, llPlatitorTVA) + + ? + ?'* ROMFAST SRL - MFINVIES', I + llValid = .T. + lcRegCom = 'J13/626/1991' + llPlatitorTVA = .T. + test_verificare_cif('1879855', 'MFINVIES', llVIESURL, llMFINURL, lcRomfastURL, lcMfinanteURL, lcMfinanteParams, llValid, lcRegCom, llPlatitorTVA) + + ? + ?'* COD INVALID - VALIDARE', I + llValid = .F. + lcRegCom = '' + llPlatitorTVA = .F. + test_verificare_cif('187985X', 'MFINVIES', llVIESURL, llMFINURL, lcRomfastURL, lcMfinanteURL, lcMfinanteParams, llValid, lcRegCom, llPlatitorTVA) + Endfor && i +Endif + +? +?'------------------------------------------' +?'* VALIDARE CIF' +loVerificare = Createobject("verificarecod") +test_cif('7320118', .T.) +test_cif('RO7320118', .T.) +test_cif('RO 7320118', .T.) +test_cif('R 7320118', .T.) +test_cif('R7320118', .T.) +test_cif('7320117', .F.) +test_cif('RO7320117', .F.) +test_cif('', .F.) +test_cif('3654392', .F.) +test_cif('14699589', .T.) +test_cif('11071295', .T.) + +? +?'------------------------------------------' +?'VALIDARE CNP' +? +test_cnp('1810228134187', .T.) +test_cnp('181022813418', .F.) + +Select cTeste +Browse + +*!* TESTEAZA FUNCTIA DE VALIDARE CIF +Function test_cif + Lparameters tcCIF, tuValoareCorect + Local luRezultat, lcMesaj + Local luReturn + luReturn = .F. + + luRezultat = VALIDARE_CIF(tcCIF) + lcMesaj = 'VALIDARE_CIF(' + tcCIF + ') ' + Transform(luRezultat) + ' (' + Transform(tuValoareCorect) + ')' + + If luRezultat <> tuValoareCorect + lcMesaj = 'ERR ' + m.lcMesaj + luReturn = .F. + Else + lcMesaj = 'OK ' + m.lcMesaj + luReturn = .T. + Endif + ?m.lcMesaj + If Used('cTeste') + Insert Into cTeste (test, rezultat, mesaj) Values('VALIDARE CIF', luReturn, lcMesaj) + Endif + + Return luReturn + +Endfunc && TEST_CIF + +*!* TESTEAZA FUNCTIA DE VALIDARE CNP +Function test_cnp + Lparameters tcCNP, tuValoareCorect + Local luRezultat, lcMesaj + Local luReturn + luReturn = .F. + + luRezultat = VALIDARE_CNP(tcCNP) + + lcMesaj = 'VALIDARE_CNP(' + tcCNP + ') ' + Transform(luRezultat) + ' (' + Transform(tuValoareCorect) + ')' + + If luRezultat <> tuValoareCorect + lcMesaj = 'ERR ' + m.lcMesaj + luReturn = .F. + Else + lcMesaj = 'OK ' + m.lcMesaj + luReturn = .T. + Endif + ?m.lcMesaj + + If Used('cTeste') + Insert Into cTeste (test, rezultat, mesaj) Values('VALIDARE CNP', luReturn, lcMesaj) + Endif + + Return luReturn + +Endfunc && TEST_CNP + +*!* TESTEAZA FUNCTIA DE VERIFICARE CIF +Function test_verificare_cif + Lparameters tcCIF, tcTipInterogare, tlVIESURL, tlMFINURL, tcRomfastURL, tcMfinanteURL, tcMfinanteParams, tlValid, tcRegCom, tlPlatitorTVA + + + + Local lcMesaj, llSucces, lcEroare + Local loVerificare, llValid, lcRegCom, llPlatitorTVA + Local lcXML, loEx As Exception + Local luReturn + luReturn = .F. + + llSucces = .F. + Try + loVerificare = Createobject("verificarecod", tlVIESURL, tlMFINURL, tcRomfastURL, tcMfinanteURL, tcMfinanteParams) + lcXML = loVerificare.verificare('CIF', tcCIF, tcTipInterogare) + llValid = loVerificare.oEntitate.Valid + lcRegCom = loVerificare.oEntitate.regcom + llPlatitorTVA = loVerificare.oEntitate.PlatitorTVA + llSucces = .T. + Catch To loEx + lcEroare = loEx.Message + Endtry + + If llSucces + lcMesaj = 'VERIFICARE_CIF ' + tcCIF + ' VALID: ' + Transform(llValid) + '(' + Transform(tlValid) + ')' + ; + ' REGCOM: ' + Alltrim(Transform(lcRegCom)) + '(' + Transform(tcRegCom) + ')' + ; + ' PLATITOR TVA: ' + Transform(llPlatitorTVA) + '(' + Transform(tlPlatitorTVA) + ')' + Else + lcMesaj = 'VERIFICARE_CIF ' + tcCIF + ' ' + lcEroare + Endif + + If !llSucces Or (tlValid <> llValid Or tcRegCom <> lcRegCom Or tlPlatitorTVA <> tlPlatitorTVA) + lcMesaj = 'ERR ' + m.lcMesaj + luReturn = .F. + Else + lcMesaj = 'OK ' + m.lcMesaj + luReturn = .T. + Endif + ?m.lcMesaj + + If Used('cTeste') + Insert Into cTeste (test, rezultat, mesaj) Values('VERIFICARE CIF', luReturn, lcMesaj) + Endif + Return luReturn + +Endfunc && TEST_VERIFICARE_CIF + + +*============================= +*!* verifica lungimea <= 10 caractere + + +*============================= +*!* VALIDARE CIF +*!* tcCIF - codul fiscal +*!* toVerificare - optional in cazul in care am multe verificari sa nu se se instantiatieze obiectul la fiecare verificare +Function VALIDARE_CIF + Lparameters tcCIF, toVerificare + Local loVerificare, lcCod, llReturn + + If Type('tcCIF') <> 'C' + lcCod = '' + Else + lcCod = tcCIF + Endif + If Type('toVerificare') = 'O' And Pemstatus(toVerificare, 'VALIDARE', 5) + loVerificare = toVerificare + Else + loVerificare = Createobject("verificarecod") + Endif + + + llReturn = loVerificare.validare('CIF', lcCod) + Return llReturn +Endfunc && VALIDARE_CIF + + +*============================= +*!* VERIFICARE_PLATITORTVA +*!* tcCIF - codul fiscal +*!* toVerificare - optional in cazul in care am multe verificari sa nu se se instantiatieze obiectul la fiecare verificare +Function VERIFICARE_PLATITORTVA + Lparameters tcCIF, toVerificare + Local loVerificare, lcCod, llReturn + Local llReturn + + If Type('tcCIF') <> 'C' + lcCod = '' + Else + lcCod = tcCIF + Endif + If Type('toVerificare') = 'O' And Pemstatus(toVerificare, 'VALIDARE', 5) + loVerificare = toVerificare + Else + loVerificare = Createobject("verificarecod") + Endif + + + llReturn = loVerificare.verificare('CIF', lcCod) + Return llReturn +Endfunc && VALIDARE_CIF + +*============================= +*!* VALIDARE CNP +*!* tcCIF - CNP +*!* toVerificare - optional in cazul in care am multe verificari sa nu se se instantiatieze obiectul la fiecare verificare +Function VALIDARE_CNP + Lparameters tcCNP, toVerificare + Local loVerificare, lcCod, llReturn + + If Type('tcCNP') <> 'C' + lcCod = '' + Else + lcCod = tcCNP + Endif + + If Type('toVerificare') = 'O' And Pemstatus(toVerificare, 'VALIDARE', 5) + loVerificare = toVerificare + Else + loVerificare = Createobject("verificarecod") + Endif + + llReturn = loVerificare.validare('CNP', lcCod) + Return llReturn +Endfunc && VALIDARE_CNP + +*==================================== +Define Class VerificareCod As Custom + lVIESURL = .F. && .T. ROMFAST URL, .F. DOT NET DIRECT VIES + lMFINURL = .F. && .T. ROMFAST URL, .F. www.mfinante.ro + cRomfastURL = "http://83.103.197.79:3002/contafinupdate/verificarecod.aspx/verificarecod/verificare/CIF/|CIF|/|TIP|" && url catre Romfast pentru verificare MFIN, VIES + + *!* cMfinanteURL = "http://www.mfinante.ro/contribuabili/link.jsp?body=/cod.do" && url catre www.mfinante.ro + *!* cMfinanteParams = "cod=|CIF|" + + cMfinanteURL = "" && "http://voes.mfinante.ro/codfiscal/codfiscal.html" && url catre www.mfinante.ro + cMfinanteParams = "" && [cod=|CIF|&cap=null&B1=VIZUALIZARE] + + cMFINURL = '' && url catre Romfast pentru verificare informatii cod fiscal + oEntitate = Null + + cMfinCaptcha = "" && codul CAPTCHA pentru verificarea codurilor fiscale pe mfinante + oHTTP = Null + + *** se pare ca mfinante.ro are un bug - nu mai cere kaptcha la interogare directa si nu da mesajul "serverul este ocupat" la interogare rapida daca sunt sesiuni diferite + lOneSession = .T. && oHTTP se retine pe instanta sau se creeaza oHTTP la fiecare interogare + lCaptcha = .T. && se apeleaza Captcha de la mfinante, valabil doar pentru apelarea din program, nu de pe serverul romfast + + + cMfinAnchorString = "AGENTUL ECONOMIC CU CODUL UNIC" && textul dupa care apare tabelul cu informatii MFIN + cMfinNuExistaString = "NU EXISTA AGENT ECONOMIC CU ACEST COD FISCAL" + lXMLHTTP = .F. && daca se foloseste xmlhttp pentru interogarea MFINANTE sau InternetExplorer.Application din luna 02/2017 nu mai merge apelul prin xmlhttp + + dDataAct = DATE() + + *================================= + Procedure Init + Lparameters tlVIESURL, tlMFINURL, tcRomfastURL, tcMfinanteURL, tcMfinanteParams + + This.cMfinanteURL = "http://www.mfinante.gov.ro/infocodfiscal.html" && url catre www.mfinante.ro + This.cMfinanteParams = "cod=|CIF|&captcha=|CAPTCHA|&B1=VIZUALIZARE" + + *!* 27.01.2012 + If Pcount() >= 2 And Type('goApi') = 'O' And Type('gcSettingsFile') = 'C' And !Empty(m.gcSettingsFile) + lcMFINROMFAST = goAPI.GetProfileString(m.gcSettingsFile, [validare], "mfinromfast") + lcVIESROMFAST = goAPI.GetProfileString(m.gcSettingsFile, [validare], "viesromfast") + lcMFINROMFAST = Nvl(m.lcMFINROMFAST, '') + lcVIESROMFAST = Nvl(m.lcVIESROMFAST, '') + If !Inlist(m.lcMFINROMFAST, '.T.', '.F.') + tlMFINURL = .T. + Else + tlMFINURL = &lcMFINROMFAST + Endif + If !Inlist(m.lcVIESROMFAST, '.T.', '.F.') + tlVIESURL = .T. + Else + tlVIESURL = &lcVIESROMFAST + Endif + Endif && PCOUNT + *!* 27.01.2012 ^ + + If Type('goApi') = 'O' And Type('gcSettingsFile') = 'C' And !Empty(m.gcSettingsFile) + lcXMLHTTP = goAPI.GetProfileString(m.gcSettingsFile, [validare], "xmlhttp") + lcXMLHTTP = Nvl(m.lcXMLHTTP, '') + If !Inlist(m.lcXMLHTTP, '.T.', '.F.') + llXMLHTTP = .F. + Else + llXMLHTTP = &lcXMLHTTP + Endif + This.lXMLHTTP = m.llXMLHTTP + Endif + + This.lVIESURL = Iif(Type('tlVIESURL') = 'L', tlVIESURL, .F.) && default .F. pentru dll + This.lMFINURL = Iif(Type('tlMFINURL') = 'L', tlMFINURL, .F.) && default .F. pentru www.mfinante.ro + If Type('tcRomfastUrl') = 'C' And !Empty(tcRomfastURL) + This.cRomfastURL = tcRomfastURL + Endif + If Type('tcMfinanteUrl') = 'C' And !Empty(tcMfinanteURL) + This.cMfinanteURL = tcMfinanteURL + Endif + If Type('tcMfinanteParams') = 'C' And !Empty(tcMfinanteParams) + This.cMfinanteParams = tcMfinanteParams + Endif + *!* 13.01.2012 + If _vfp.StartMode = 0 + This.cRomfastURL = Strtran(This.cRomfastURL, '83.103.197.79:3002', '10.0.20.122:81') + Endif + *!* 13.01.2012 ^ + This.cMfinCaptcha = "" + Endproc && Init + + Function Destroy + Local loEx As Exception + If Type('This.oHTTP') = 'O' And Pemstatus(This.oHTTP, 'visible', 5) + Try + This.oHTTP.Visible = .F. + This.oHTTP.Quit + This.oHTTP = Null + Catch To loEx + * + Endtry + Endif + Endfunc && Destroy + + *================================= + Function verificare + Lparameters tcTip, tcCod, tcExtraParam1, tcExtraParam2, tcExtraParam3, tcExtraParam4, tcExtraParam5 + Local lcTip, lcXML + lcXML = '' + lcTip = Iif(Type('tcTip') = 'C' And !Empty(tcTip), Upper(tcTip), 'CIF') + + This.Log('VERIFICARE ' + lcTip + ' ' + tcCod + ' ' + Transform(tcExtraParam1) + ' ' + Transform(tcExtraParam2) + ' ' + Transform(tcExtraParam3) + ' ' + Transform(tcExtraParam4) + ' ' + Transform(tcExtraParam5) ) + + Do Case + Case lcTip = 'CNP' + lcXML = This.VERIFICARE_CNP(tcCod) + Case lcTip = 'CIF' + lcXML = This.VERIFICARE_CIF(tcCod, tcExtraParam1, tcExtraParam2, tcExtraParam3, tcExtraParam4, tcExtraParam5) + Otherwise + lcXML = '' + Endcase + + Return lcXML + Endfunc && VERIFICARE + + + *================================= + Function XMLCursorToOBj + Lparameters tcXML + Local lcCursor, lcSelect, loReturn + Local lcEroare, loEx + + loReturn = Null + lcCursor = Sys(2015) + lcSelect = Select() + Try + Xmltocursor(tcXML, lcCursor) + Select (lcCursor) + Scatter Name loReturn + Catch To loEx + lcEroare = 'XMLCursorToOBj ' + loEx.Message + " " + loEx.LineContents + " " + Transform(loEx.Lineno) + This.Log(m.lcEroare) + Endtry + + Use In (Select(lcSelect)) + Select (lcSelect) + Return loReturn + Endfunc && XMLCursorToOBj + + *================================= + Function ISCIF + Lparameters tcCod + Local lcCod, llIsCIF + llIsCIF = .F. + lcCod = Iif(Type('tcCod') <> 'C', '', Alltrim(tcCod)) + + Do Case + Case !Isdigit(lcCod) && Daca incepe cu o litera il consider COD FISCAL && ROXXX + llIsCIF = .T. + Case Len(lcCod) <= 10 + llIsCIF = .T. + Endcase + + Return llIsCIF + + Endfunc && IsCIF + + *================================= + * VERIFICARE_CNP('1810228134187') + Procedure VERIFICARE_CNP + Lparameters tcCNP + + + Local lcSelect, lcCNP, llSucces, loEx As Exception, lcEroare, llValid, lcXML + + lcXML = '' + lcSelect = Select() + lcCNP = Iif(Empty(tcCNP) Or Type('tcCNP') <> 'C', '', Alltrim(tcCNP)) + lcEroare = '' + + + Create Cursor cVerificareCod (Valid L, eroare c(250), cod c(100) Null) + Cursortoxml("cVerificareCod", "lcXML", 1, 0, 0, "1") + Select cVerificareCod + Scatter Name This.oEntitate + + llSucces = .F. + llValid = .F. + Try + llValid = This.validare('CNP', lcCNP) + llSucces = .T. + Catch To loEx + lcEroare = 'VERIFICARE_CNP VALIDARE ' + loEx.Message + " " + loEx.LineContents + " " + Transform(loEx.Lineno) + This.Log(m.lcEroare) + Endtry + + Try + Insert Into cVerificareCod(Valid, eroare, cod) ; + Values (llValid, lcEroare, lcCNP) + + Cursortoxml("cVerificareCod", "lcXML", 1, 0, 0, "1") + Catch To loEx + lcEroare = 'VERIFICARE_CNP XML ' + loEx.Message + " " + loEx.LineContents + " " + Transform(loEx.Lineno) + This.Log(m.lcEroare) + Endtry + + Select cVerificareCod + Go Top + Scatter Name This.oEntitate + + Use In (Select('cVerificareCod')) + Select (lcSelect) + + Return m.lcXML + + Endproc && VERIFICARE_CNP + + + *================================= + * VERIFICARE_CIF('1879855', ['VIES' | 'MFIN' | 'MFINVIES']) + * valideaza CIF + aduna informatii de pe www.mfinante.ro + platitor tva de pe vies + Procedure VERIFICARE_CIF + Lparameters tcVerificareCod, tcTipInterogare, tdData, tcExtraParam3, tcExtraParam4, tcExtraParam5 + + Local lcVerificareCod, lcFirma, lcAdresa, lcJudet, lcRegCom, lcCodpostal, lcTelefon, lcFax, lcSelect, lcXML, llVies, llPlatitorTVA, llValid, lcCodTara, llRO, lcStare + Local loEx As Exception + Local lcMfinanteURL, lcMfinanteParams, lcRomfastURL, llMFINURL, loMFIN, loVIES, lcProcedura, llInterogareAnaf + Local lStare, lcApart, lcBloc, lcDataTVAMFIN, lcEtaj, lcLocalitate, lcNr, lcScara, lcStrada + Local llPlatitorTVAMFIN, lnSucces, llTVAIncasare, llSplitTVA, llInactiv, ldData + + Local lcTipInterogare, llInterogareVies, llInterogareMfin + If Empty(tcTipInterogare) Or Type('tcTipInterogare') <> 'C' + lcTipInterogare = '' + Else + lcTipInterogare = Upper(tcTipInterogare) + ENDIF + ldData = IIF(EMPTY(m.tdData) or TYPE('tdData') <> 'D', {}, m.tdData) + + llInterogareVies = 'VIES' $ lcTipInterogare + llInterogareMfin = 'MFIN' $ lcTipInterogare + llInterogareAnaf = 'ANAF' $ lcTipInterogare + lcMfinanteURL = This.cMfinanteURL + lcMfinanteParams = This.cMfinanteParams + lcRomfastURL = This.cRomfastURL + llMFINURL = This.lMFINURL + *!* This.Log(Alltrim(Transform(tcVerificareCod))) + + + + Local llSucces, lcEroare + + lcXML = '' + lcSelect = Select() + lcVerificareCod = Iif(Empty(tcVerificareCod) Or Type('tcVerificareCod') <> 'C', '', UPPER(Alltrim(tcVerificareCod))) + *!* 12.04.2011 + lcCodTara = This.GetCodTara(m.lcVerificareCod) + llRO = lcCodTara = 'RO' + lcVerificareCod = Strtran(lcVerificareCod, m.lcCodTara, '') + lcVerificareCod = Strtran(Strtran(Strtran(lcVerificareCod, ' ', ''), 'RO', ''), 'R', '') + *!* 12.04.2011 ^ + lcFirma = '' + lcAdresa = '' + lcJudet = '' + lcRegCom = '' + lcCodpostal = '' + lcTelefon = '' + lcFax = '' + llPlatitorTVA = .F. + llVies = .F. + lcEroare = '' + lcDataTVAMFIN = "" + llPlatitorTVAMFIN = .F. + lcStare = '' + lcStrada = '' + lcNr = '' + lcLocalitate = '' + lcBloc = '' + lcScara = '' + lcEtaj = '' + lcApart = '' + llTVAIncasare = .F. + llSplitTVA = .F. + llInactiv = .F. + + Create Cursor cVerificareCod (Valid L, eroare c(250), cod V(100) Null, firma V(100), adresa V(250), judet V(100), ; + regcom V(30), codpostal V(20), telefon V(30), fax V(30), datatvamfin V(30), platitortvamfin L, VIES L, PlatitorTVA L, ; + stare V(100), strada V(100), nr V(25), localitate V(100), Bloc V(30), Scara V(10), Etaj V(10), Apart V(20), ; + tvaincasare L, splittva L, inactiv L) + + Cursortoxml("cVerificareCod", "lcXML", 1, 0, 0, "1") + Select cVerificareCod + Scatter Name This.oEntitate + + llSucces = .F. + llValid = .F. + Try + llValid = This.validare('CIF', m.tcVerificareCod) + llSucces = .T. + Catch To loEx + lcEroare = 'VERIFICARE_CIF VALIDARE ' + loEx.Message + " " + loEx.LineContents + " " + Transform(loEx.Lineno) + This.Log(m.lcEroare) + Endtry + + If m.llValid And m.llRO And m.llInterogareAnaf + + loMFIN = This.ANAF(m.lcVerificareCod, m.ldData) + + lcFirma = loMFIN.firma + lcAdresa = loMFIN.adresa + lcJudet = loMFIN.judet + lcRegCom = loMFIN.regcom + lcCodpostal = loMFIN.codpostal + lcTelefon = loMFIN.telefon + lcFax = loMFIN.fax + lcEroare = loMFIN.eroare + lcDataTVAMFIN = TRANSFORM(loMFIN.datatvamfin) + llPlatitorTVAMFIN = loMFIN.platitortvamfin + lcStare = loMFIN.stare + lcStrada = loMFIN.strada + lcNr = loMFIN.nr + lcLocalitate = loMFIN.localitate + lcBloc = EVALUATE('loMFIN.Bloc') + lcScara = loMFIN.scara + lcEtaj = loMFIN.etaj + lcApart = loMFIN.apart + llTvaIncasare = loMFIN.tvaIncasare + llSplitTVA = loMFIN.SplitTVA + llInactiv = loMFIN.Inactiv + Endif && llValid AND llInterogareMfin + + If m.llValid And m.llRO And m.llInterogareMfin + loMFIN = This.MFIN(lcVerificareCod) + + lcFirma = loMFIN.firma + lcAdresa = loMFIN.adresa + lcJudet = loMFIN.judet + lcRegCom = loMFIN.regcom + lcCodpostal = loMFIN.codpostal + lcTelefon = loMFIN.telefon + lcFax = loMFIN.fax + lcEroare = loMFIN.eroare + lcDataTVAMFIN = loMFIN.datatvamfin + llPlatitorTVAMFIN = loMFIN.platitortvamfin + lcStare = loMFIN.stare + lcStrada = loMFIN.strada + lcNr = loMFIN.nr + lcLocalitate = loMFIN.localitate + lcBloc = EVALUATE('loMFIN.Bloc') + lcScara = loMFIN.scara + lcEtaj = loMFIN.etaj + lcApart = loMFIN.apart + llTvaIncasare = loMFIN.tvaIncasare + llSplitTVA = loMFIN.SplitTVA + llInactiv = loMFIN.Inactiv + Endif && llValid AND llInterogareMfin + + *!* VERIFICARE VIES pentru platitori TVA + If llValid And llInterogareVies + loVIES = This.VIES(m.lcVerificareCod, m.lcCodTara) + llPlatitorTVA = loVIES.PlatitorTVA + If !llInterogareMfin Or Empty(lcFirma) + lcFirma = loVIES.firma + lcAdresa = loVIES.adresa + Endif + llVies = loVIES.VIES + lcEroare = lcEroare + ' ' + loVIES.eroare + Endif && llValid AND llInterogareVies + * lcAdresa = StripNonAscii(lcAdresa, ' ') && regex.prg + + lcFirma = This.RemoveCharacters(m.lcFirma) && Strtran(Strtran(Upper(Alltrim(Nvl(m.lcFirma, ''))), Chr(170), 'S'), Chr(222), 'T') + lcAdresa = This.RemoveCharacters(m.lcAdresa) && Strtran(Strtran(Upper(Alltrim(Nvl(m.lcAdresa, ''))), Chr(170), 'S'), Chr(222), 'T') + lcJudet = This.RemoveCharacters(m.lcJudet) && Strtran(Strtran(Upper(Alltrim(Nvl(m.lcJudet, ''))), Chr(170), 'S'), Chr(222), 'T') + lcRegCom = This.RemoveCharacters(m.lcRegCom) && Strtran(Strtran(Upper(Alltrim(Nvl(m.lcRegCom, ''))), Chr(170), 'S'), Chr(222), 'T') + lcLocalitate = This.RemoveCharacters(m.lcLocalitate) + lcStrada = This.RemoveCharacters(m.lcStrada) + + TRY + Insert Into cVerificareCod(Valid, eroare, cod, firma, adresa, judet, regcom, codpostal, telefon, fax, datatvamfin, platitortvamfin, VIES, PlatitorTVA, stare, strada, nr, localitate, bloc, scara, etaj, apart, tvaincasare, splittva, inactiv) ; + Values (m.llValid, Left(m.lcEroare, 250), m.lcVerificareCod, m.lcFirma, m.lcAdresa, m.lcJudet, m.lcRegCom, m.lcCodpostal, m.lcTelefon, m.lcFax, m.lcDataTVAMFIN, m.llPlatitorTVAMFIN, m.llVies, m.llPlatitorTVA, m.lcStare, m.lcStrada, m.lcNr, m.lcLocalitate, m.lcBloc, m.lcscara, m.lcetaj, m.lcapart, m.llTVAIncasare, m.llSplitTVA, m.llInactiv) + + Select cVerificareCod + Go Top + Scatter Name This.oEntitate + Cursortoxml("cVerificareCod", "lcXML", 1, 0, 0, "1") + + *** ROA salvez datele in istoric_coduri_fiscale + If Type('goExecutor') = 'O' + Private pcCodFiscal, pcFirma, pcAdresa, pcJudet, pcRegCom, pcCodPostal, pcTelefon, pcFax, pcDataTvamfin, pnPlatitorTvaMfin, pcStare, pnPlatitorTvaVies, pnInterogareVies + pcCodFiscal = m.lcVerificareCod + pcFirma = m.lcFirma && Strtran(Strtran(Upper(Alltrim(Nvl(m.lcFirma, ''))), Chr(170), 'S'), Chr(222), 'T') + pcAdresa = m.lcAdresa && Strtran(Strtran(Upper(Alltrim(Nvl(m.lcAdresa, ''))), Chr(170), 'S'), Chr(222), 'T') + pcJudet = m.lcJudet && Strtran(Strtran(Upper(Alltrim(Nvl(m.lcJudet, ''))), Chr(170), 'S'), Chr(222), 'T') + pcRegCom = m.lcRegCom && Strtran(Strtran(Upper(Alltrim(Nvl(m.lcRegCom, ''))), Chr(170), 'S'), Chr(222), 'T') + pcCodPostal = Upper(Alltrim(Nvl(m.lcCodpostal, ''))) + pcTelefon = Upper(Alltrim(Nvl(m.lcTelefon, ''))) + pcFax = Upper(Alltrim(Nvl(m.lcFax, ''))) + pcDataTvamfin = Upper(Alltrim(Nvl(m.lcDataTVAMFIN, ''))) + pnPlatitorTvaMfin = Iif(m.llPlatitorTVAMFIN, 1, 0) + pcStare = Upper(Alltrim(Nvl(m.lcStare, ''))) + pnPlatitorTvaVies = Iif(m.llPlatitorTVA, 1, 0) + pnInterogareVies = Iif(m.llVies, 1, 0) + If !Empty(m.pcFirma) + lnSucces = goExecutor.oExecuta("begin pack_parteneri.save_istoric_cod_fiscal(?pcCodFiscal,?pcFirma,?pcAdresa,?pcJudet,?pcRegCom,?pcCodPostal,?pcTelefon,?pcFax,?pcDataTvamfin,?pnPlatitorTvaMfin,?pcStare,?pnPlatitorTvaVies,?pnInterogareVies,?gnIdUtil); end;") + Endif + Endif + *** CONTAFIN salvez datele in istoric_coduri_fiscale + If Used('ISTORIC_CODURI_FISCALE') + lcProcedura = [SAVE_ISTORIC_COD_FISCAL] && sa nu dea eroarea ROACONT la compilare ca nu gaseste procedura din CONCONT + Do &lcProcedura With This.oEntitate In proceduri_comune.prg + Endif + + Catch To loEx + lcEroare = 'VERIFICARE_CIF INSERT XML' + loEx.Message + " " + loEx.LineContents + " " + Transform(loEx.Lineno) + This.Log(m.lcEroare) + Endtry + + Use In (Select('cVerificareCod')) + Select (lcSelect) + + Return m.lcXML + Endproc && VERIFICARE_CIF + + + *================================================== + *!* Aduce informatii despre starea de platitor TVA si adresa prin SERVICIU WEB ANAF + *================================================== + Procedure ANAF + Lparameters tcCodFiscal, tdData + * tcCodFiscal + * optional tdData + + Local loVerificareANAF As "VerificareANAF" + Local lcCodFiscal, lcCursorVerificareANAF, lcSelect, loMFIN, ldData + lcCodFiscal = Iif(!Empty(m.tcCodFiscal) And Type('tcCodFiscal') = 'C', Alltrim(m.tcCodFiscal), '') + lcSelect = Select() + ldData = IIF(TYPE('tdData') = 'D' and !EMPTY(m.tdData), m.tdData, DATE(m.gnAn, m.gnLuna, 1)) + loMFIN = This.GetEmptyMfinObj() + + && verificare serviciu web ANAF + loVerificareANAF = Createobject("VerificareANAF") && validare.prg + lcCursorVerificareANAF = loVerificareANAF.VerificaListaCIF(m.lcCodFiscal, m.ldData) + If Used(m.lcCursorVerificareANAF) + If Reccount(m.lcCursorVerificareANAF) >= 1 + Select (m.lcCursorVerificareANAF) + Go Top + loMFIN.firma = firma + loMFIN.adresa = adresa + loMFIN.judet = judet + loMFIN.regcom = nrregcom + loMFIN.codpostal = '' + loMFIN.telefon = '' + loMFIN.fax = '' + loMFIN.eroare = '' + loMFIN.datatvamfin = Data + loMFIN.platitortvamfin = tva + loMFIN.stare = mesaj + loMFIN.strada = strada + loMFIN.nr = nr + loMFIN.localitate = localitate + loMFIN.Bloc = Bloc + loMFIN.scara = scara + loMFIN.etaj = etaj + loMFIN.apart = apart + loMFIN.TVAIncasare = tvaincasare + loMFIN.SplitTVA = splittva + loMFIN.Inactiv = inactiv + Endif + Endif + + Select (lcSelect) + Return loMFIN + + Endproc && ANAF + + *================================================== + *!* VERIFICARE INFORMATII MFINANTE + *!* DIRECT PE MFINANTE.RO PE URL ROMFAST + Procedure MFIN + Lparameters tcCodFiscal + Local llMFINURL, lcMfinanteURL, lcMfinanteParams, lcRomfastURL, lcSelect, loHTTP + Local llPlatitorTVA, lcFirma, lcAdresa, lcEroare, llVies, lcStrada, lcNr, lcLocalitate + + Local loMFIN + Local lnStatus, lcXML, lcJudet, lcRegCom, lcCodpostal, lcDataTVAMFIN, llPlatitorTVAMFIN, lcStare + Local lcTelefon, lcFax, lcValues, lcResponse, loEx + Local Array laMfin[100, 2] + Local loFormIntroducereCod + loFormIntroducereCod = Null + + llPlatitorTVA = .F. + lcFirma = '' + lcAdresa = '' + lcEroare = '' + llVies = .F. + lcStare = '' + lcStrada = '' + lcNr = '' + lcLocalitate = '' + + lcSelect = Select() + llMFINURL = This.lMFINURL + lcMfinanteURL = This.cMfinanteURL + lcMfinanteParams = This.cMfinanteParams + lcMfinanteParams = Strtran(lcMfinanteParams, '|CIF|', tcCodFiscal, 1, 1, 1) + + lcRomfastURL = This.cRomfastURL + lcRomfastURL = Strtran(lcRomfastURL, '|CIF|', tcCodFiscal, 1, 1, 1) && http://localhost/update/verificarecod.aspx/verificarecod/verificare/CIF/|CIF|/|TIP| + lcRomfastURL = Strtran(lcRomfastURL, '|TIP|', 'MFIN', 1, 1, 1) + + loMFIN = This.GetEmptyMfinObj() + + *!* if This.lOneSession + If Type("This.oHTTP") <> "O" && la prima apelare a verificarii MFIN + If This.lXMLHTTP + This.oHTTP = Createobject("winhttp.winhttprequest.5.1") + Else + This.oHTTP = Createobject("InternetExplorer.Application") + This.oHTTP.Visible = .F. + Endif + Endif + loHTTP = This.oHTTP + *!* ELSE + *!* IF This.lXMLHTTP + *!* loHTTP = Createobject("winhttp.winhttprequest.5.1") + *!* ELSE + *!* loHTTP = Createobject("InternetExplorer.Application") + *!* loHTTP.visible = .T. + *!* ENDIF + *!* endif + + *** INTRODUCERE CAPTCHA DACA NU ESTE INTRODUS DEJA + *** Daca exista proprietatea VerificareCod.UserHostAddress, atunci clasa este instantiata din DISPATCHREQUEST de pe serverul ROMFAST + If This.lXMLHTTP And !Pemstatus(This, "UserHostAddress", 5) And Empty(This.cMfinCaptcha) And This.lCaptcha + lcCodFile = Addbs(Getenv("TEMP")) + "captcha_" + Sys(2015) + ".jpg" + loHTTP.Open('GET', "http://www.mfinante.ro/kaptcha.jpg", .F.) + loHTTP.Send() + + = Strtofile(loHTTP.ResponseBody, m.lcCodFile) + This.cMfinCaptcha = "" + Clear Class "IntroducereCod" + loFormIntroducereCod = Createobject("IntroducereCod", m.lcCodFile) + loFormIntroducereCod.Show(1) + If File(m.lcCodFile) + Delete File (m.lcCodFile) + Endif + If Type('loFormIntroducereCod') = 'O' And Type('loFormIntroducereCod.cCod') = 'C' + This.cMfinCaptcha = loFormIntroducereCod.cCod + Release loFormIntroducereCod + Endif + Endif && !PEMSTATUS + + + Do Case + Case This.lMFINURL + Try + + *!* loHttp.SetTimeouts(ResolveTimeout, ConnectTimeout, SendTimeout, ReceiveTimeout) + * loHttp.SetTimeouts(60000, 60000, 60000, 60000) + loHTTP.Open("GET", lcRomfastURL, .F.) + loHTTP.Send() + lnStatus = loHTTP.Status + If lnStatus = 200 && OK + lcXML = loHTTP.responseText + + Xmltocursor(lcXML, 'cMFINTemp') + + lcFirma = Alltrim(cMFINTemp.firma) + lcAdresa = Alltrim(cMFINTemp.adresa) + lcJudet = Alltrim(cMFINTemp.judet) + lcRegCom = Alltrim(cMFINTemp.regcom) + lcCodpostal = Alltrim(cMFINTemp.codpostal) + lcTelefon = Alltrim(cMFINTemp.telefon) + lcFax = Alltrim(cMFINTemp.fax) + lcEroare = Alltrim(cMFINTemp.eroare) + lcDataTVAMFIN = cMFINTemp.datatvamfin + llPlatitorTVAMFIN = cMFINTemp.platitortvamfin + lcStare = cMFINTemp.stare + lcStrada = Alltrim(cMFINTemp.strada) + lcNr = Alltrim(cMFINTemp.nr) + lcLocalitate = Alltrim(cMFINTemp.localitate) + + Use In (Select('cMFINTemp')) + Else + lcEroare = 'VERIFICARE_CIF MFIN - ' + Alltrim(Transform(lcRomfastURL)) + ' eroare ' + Alltrim(Str(lnStatus)) + Endif && lnStatus + Catch To loEx + lcEroare = 'VERIFICARE_CIF MFIN ' + CRLF + loEx.Message + " " + loEx.LineContents + " " + Transform(loEx.Lineno) + This.Log(m.lcEroare) + Endtry + Otherwise + Try + If !Empty(This.cMfinCaptcha) + lcMfinanteParams = Strtran(lcMfinanteParams, '|CAPTCHA|', This.cMfinCaptcha, 1, 1, 1) + Else + && daca nu introduc CAPTCHA prima oara, nu il mai cer ulterior. sa vad daca merge ??? + lcMfinanteParams = Strtran(lcMfinanteParams, '&captcha=|CAPTCHA|', '', 1, 1, 1) + This.lCaptcha = .F. + Endif + + Do Case + Case .F. + loHTTP.Open("POST", lcMfinanteURL, .F.) + loHTTP.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded') + lcValues = lcMfinanteParams + loHTTP.Send(lcValues) + lnStatus = loHTTP.Status + Case This.lXMLHTTP + lcValues = lcMfinanteParams + loHTTP.Open("GET", m.lcMfinanteURL + '?' + m.lcValues, .F.) + loHTTP.setRequestHeader ("Content-Type", "multipart/form-data; ") + loHTTP.setRequestHeader ("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)") + loHTTP.Send(Null) + lnStatus = loHTTP.Status + Otherwise + * Internet.Application din cauza ca nu mai merge interogarea cu xmlhttp + lcValues = lcMfinanteParams + loHTTP.Navigate(m.lcMfinanteURL + '?' + m.lcValues) + * Astept maxim 10 secunde sa se incarce documentul si verific daca exista tag-ul + lnSeconds = Seconds() + lnStatus = -200 + Do While .T. + Inkey(1) + lnSecondsPassed = Seconds() - lnSeconds + Wait Window 'Astept incarcarea paginii mfinante.ro ' + Alltrim(Str(m.lnSecondsPassed)) + '/20 sec.' Nowait + + If (loHTTP.ReadyState = 4 And !loHTTP.Busy) Or m.lnSecondsPassed > 20 + If This.cMfinAnchorString $ Upper(loHTTP.Document.body.innerhtml) Or This.cMfinNuExistaString $ Upper(loHTTP.Document.body.innerhtml) + lnStatus = 200 + Exit + Else + If m.lnSecondsPassed > 20 + Exit + Endif + Endif + Endif + Enddo + Endcase + + If lnStatus = 200 && OK + If This.lXMLHTTP + lcResponse = Upper(loHTTP.responseText) + Else + lcResponse = loHTTP.Document.body.innerhtml + Endif + *STRTOFILE(m.lcResponse, "c:\info_" + m.tcCodFiscal + ".html") + This.InfoMfin2Array(m.lcResponse, @laMfin) + + lcFirma = This.RemoveCharacters(laMfin(1, 2), .T.) && Strtran(Strtran(Upper(Alltrim(Nvl(aMfin(1, 2), ''))), Chr(170), 'S'), Chr(222), 'T') + lcAdresa = This.RemoveCharacters(laMfin(2, 2), .T., .F., .T.) && Strtran(Strtran(Upper(Alltrim(Nvl(laMfin(2, 2), ''))), Chr(170), 'S'), Chr(222), 'T') + lcJudet = This.RemoveCharacters(laMfin(3, 2), .T.) && Strtran(Strtran(Upper(Alltrim(Nvl(laMfin(3, 2), ''))), Chr(170), 'S'), Chr(222), 'T') + lcRegCom = This.RemoveCharacters(laMfin(4, 2), .T., .T., .T.) && Strtran(Strtran(Upper(Alltrim(Nvl(STRTRAN(laMfin(4, 2), ' ',''), ''))), Chr(170), 'S'), Chr(222), 'T') + lcCodpostal = This.RemoveCharacters(laMfin(6, 2), .T., .T., .T.) && laMfin(6, 2) + lcTelefon = This.RemoveCharacters(laMfin(7, 2), .T., .T., .T.) && laMfin(7, 2) + lcFax = This.RemoveCharacters(laMfin(8, 2), .T., .T., .T.) && laMfin(8, 2) + lcStare = This.RemoveCharacters(laMfin(9, 2), .T., .F., .T.) && Strtran(Strtran(Upper(Alltrim(Nvl(laMfin(9, 2), ''))), Chr(170), 'S'), Chr(222), 'T') + lcDataTVAMFIN = Nvl(laMfin(16, 2), '') + llPlatitorTVAMFIN = !(Empty(m.lcDataTVAMFIN) Or Isalpha(m.lcDataTVAMFIN)) + + loAdresa = This.ParseAdresaMFin(m.lcAdresa) + lcStrada = loAdresa.strada + lcNr = loAdresa.nr + lcLocalitate = loAdresa.localitate + Else + lcEroare = 'VERIFICARE_CIF MFIN - ' + Alltrim(Transform(lcMfinanteURL)) + ' eroare ' + Alltrim(Str(lnStatus)) + Endif + Catch To loEx + lcEroare = 'VERIFICARE_CIF MFIN ' + CRLF + loEx.Message + " " + loEx.LineContents + " " + Transform(loEx.Lineno) + This.Log(m.lcEroare) + Endtry + Endcase + + loMFIN.firma = m.lcFirma + loMFIN.adresa = m.lcAdresa + loMFIN.judet = m.lcJudet + loMFIN.regcom = m.lcRegCom + loMFIN.codpostal = m.lcCodpostal + loMFIN.telefon = m.lcTelefon + loMFIN.fax = m.lcFax + loMFIN.eroare = m.lcEroare + loMFIN.datatvamfin = m.lcDataTVAMFIN + loMFIN.platitortvamfin = m.llPlatitorTVAMFIN + loMFIN.stare = m.lcStare + loMFIN.strada = m.lcStrada + loMFIN.nr = m.lcNr + loMFIN.localitate = m.lcLocalitate + + Select (lcSelect) + Return loMFIN + + Endproc && MFIN + + *================================================== + *!* VERIFICARE CALITATE PLATITOR TVA + *!* DIRECT PE VIES CU DLL DOTNET SAU PE URL ROMFAST + Procedure VIES + Lparameters tcCodFiscal, tcCodTara + + Local ws, loVIES, llVIESURL, lcRomfastURL, lcSelect, loHTTP + Local llPlatitorTVA, lcFirma, lcAdresa, lcEroare, llVies, lcCodTara + Local lnStatus, lcXML, loEx, lcViesURL + + llPlatitorTVA = .F. + lcFirma = '' + lcAdresa = '' + lcEroare = '' + llVies = .F. + + lcSelect = Select() + *!* 12.04.2011 + lcCodTara = Iif(!Empty(m.tcCodTara), Alltrim(Upper(Transform(m.tcCodTara))), 'RO') + *!* 12.04.2011 ^ + + llVIESURL = This.lVIESURL + lcRomfastURL = This.cRomfastURL + *!* 12.04.2011 + lcRomfastURL = Strtran(lcRomfastURL, '|CIF|', m.lcCodTara + m.tcCodFiscal, 1, 1, 1) && http://localhost/update/verificarecod.aspx/verificarecod/verificare/CIF/|CIF|/|TIP| + *!* 12.04.2011 ^ + lcRomfastURL = Strtran(lcRomfastURL, '|TIP|', 'VIES', 1, 1, 1) + + loVIES = Createobject("empty") + AddProperty(loVIES, "Vies", .F.) + AddProperty(loVIES, "Eroare", '') + AddProperty(loVIES, "Cod", tcCodFiscal) + AddProperty(loVIES, "PlatitorTVA", .F.) + AddProperty(loVIES, "Firma", "") + AddProperty(loVIES, "Adresa", "") + + If This.lVIESURL + Try + *!* loHTTP = Createobject("MSXML2.ServerXMLHTTP") + loHTTP = Createobject("winhttp.winhttprequest.5.1") + loHTTP.Open("GET", lcRomfastURL, .F.) + loHTTP.Send() + lnStatus = loHTTP.Status + If lnStatus = 200 && OK + lcXML = loHTTP.responseText + + Xmltocursor(lcXML, 'cVIESTemp') + llPlatitorTVA = cVIESTemp.PlatitorTVA + lcFirma = Alltrim(cVIESTemp.firma) + lcAdresa = Alltrim(cVIESTemp.adresa) + lcEroare = Alltrim(cVIESTemp.eroare) + llVies = cVIESTemp.VIES + Use In (Select('cVIESTemp')) + Else + lcEroare = 'VERIFICARE_CIF VIES - ' + Alltrim(Transform(lcRomfastURL)) + ' eroare ' + Alltrim(Str(lnStatus)) + Endif && lnStatus + Catch To loEx + lcEroare = 'VERIFICARE_CIF VIES ' + CRLF + loEx.Message + " " + loEx.LineContents + " " + Transform(loEx.Lineno) + This.Log(m.lcEroare) + Endtry + Else + If .F. + Try + llVies = .F. + ws = Createobject('DotNetCom.VerificareCIF') + llPlatitorTVA = ws.VerifCIF(tcCodFiscal) &&returneza .T. sau .F., in functie de existenta CIF in baza de date EU + lcFirma = ws.firma + lcAdresa = Strtran(Strtran(ws.adresa, Chr(13), ''), Chr(10), '') + llVies = .T. + Catch To loEx + lcEroare = 'VERIFICARE_CIF VIES ' + CRLF + loEx.Message + " " + loEx.LineContents + " " + Transform(loEx.Lineno) + This.Log(m.lcEroare) + Endtry + ELSE + + *!* 15.03.2010 + IF .F. + Try + *!* loHTTP = Createobject("MSXML2.ServerXMLHTTP") && ("Microsoft.XMLHTTP") + loHTTP = Createobject("winhttp.winhttprequest.5.1") + *!* 12.04.2011 + lcViesURL = "http://ec.europa.eu/taxation_customs/vies/viesquer.do?ms=" + m.lcCodTara + "&iso=" + m.lcCodTara + "&vat=" + m.tcCodFiscal + *!* 12.04.2011 ^ + loHTTP.Open("GET", m.lcViesURL, .F.) + loHTTP.Send() + lnStatus = loHTTP.Status + If lnStatus = 200 && OK + lcXML = loHTTP.responseText + llPlatitorTVA = 'YES, VALID VAT NUMBER' $ Upper(lcXML) + lcFirma = '' + lcAdresa = '' + llVies = .T. + Else + lcEroare = 'VERIFICARE_CIF VIES - ' + m.lcViesURL + ' eroare ' + Alltrim(Str(lnStatus)) + Endif && lnStatus + Catch To loEx + lcEroare = 'VERIFICARE_CIF VIES ' + CRLF + loEx.Message + " " + loEx.LineContents + " " + Transform(loEx.Lineno) + This.Log(m.lcEroare) + Endtry + *!* 15.03.2010 ^ + ENDIF && .F. + Try + loHTTP = Createobject("winhttp.winhttprequest.5.1") + loHTTP.Open("POST", "http://ec.europa.eu/taxation_customs/vies/services/checkVatService", .F.) + loHTTP.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded') + + TEXT TO lcValues NOSHOW TEXTMERGE + + + + <> + <> + + + + ENDTEXT + + loHTTP.Send(lcValues) + lnStatus = loHTTP.Status + If lnStatus = 200 && OK + lcXML = loHTTP.responseText + llPlatitorTVA = (STREXTRACT(m.lcXML, [],[],1,1) = 'true') && true/false + lcFirma = STRTRAN(STREXTRACT(m.lcXML, [],[],1,1), '-','',1,10,1) + lcAdresa = STRTRAN(STREXTRACT(m.lcXML, [
],[
],1,1), '-','',1,10,1) + lcAdresa = Strtran(m.lcAdresa, Chr(13) + CHR(10), ' ') + llVies = .T. + Else + lcEroare = 'VERIFICARE_CIF VIES - ' + m.lcViesURL + ' eroare ' + Alltrim(Str(lnStatus)) + Endif && lnStatus + Catch To loEx + lcEroare = 'VERIFICARE_CIF VIES ' + CRLF + loEx.Message + " " + loEx.LineContents + " " + Transform(loEx.Lineno) + This.Log(m.lcEroare) + Endtry + Endif + Endif + loVIES.PlatitorTVA = llPlatitorTVA + loVIES.firma = lcFirma + loVIES.adresa = lcAdresa + loVIES.eroare = lcEroare + loVIES.VIES = llVies + + Select (lcSelect) + Return loVIES + + Endproc && VIES + + *================================= + Function validare + Lparameters tcTip, tcCod + Local lcTip, llReturn + + llReturn = .F. + + lcTip = Iif(Type('tcTip') = 'C' And !Empty(tcTip), Upper(tcTip), 'CIF') + + Do Case + Case lcTip = 'CNP' + llReturn = This.VALIDARE_CNP(tcCod) + Case lcTip = 'CIF' + llReturn = This.VALIDARE_CIF(tcCod) + Otherwise + llReturn = .F. + Endcase + + Return llReturn + Endfunc && VALIDARE + + *================================= + *!* VALIDEAZA CIF + *!* RETURN .T. / .F. + Function VALIDARE_CIF + Lparameters tcCIF + + Local lcCIFinv, I + Local llCorect, lcCif, cheieinv, lnSuma, lnRest, lnCifraVerificare, lcCifraControl, lnCifraControl + + If Type('tcCIF') <> 'C' + tcCIF = '' + Endif + + *!* 12.04.2011 + lcCif = Alltrim(Nvl(tcCIF, '')) + lcCodTara = This.GetCodTara(m.lcCif) + *!* daca primele 2 caractere sunt coduri de tara le elimin + If !Substr(M.lcCif, 1, 1) $ '0123456789' + m.lcCif = Alltrim(Substr(m.lcCif, 2)) + Endif + If !Substr(M.lcCif, 1, 1) $ '0123456789' + m.lcCif = Alltrim(Substr(m.lcCif, 2)) + Endif + llCorect = .T. + + If !(Empty(m.lcCodTara) Or m.lcCodTara = 'RO') + Return m.llCorect + Endif + *!* 12.04.2011 ^ + + *!* lcCIF = '7320118' + *!* Pas preliminar: Se testeaza daca codul respecta formatul unui cod CIF. Adica lungimea maxima sa fie de 10 cifre si sa contina doar caractere numerice. + If Len(m.lcCif) > 10 Or Empty(m.lcCif) + llCorect = .F. + Else + For I = 1 To Len(m.lcCif) + If !Substr(m.lcCif, I, 1) $ '0123456789' + llCorect = .F. + Endif + Endfor + Endif + + *!* Pas 1: Se foloseste cheia de testare "753217532". Se inverseaza ordinea cifrelor codului CIF precum si a cheii de testare. + *!* Pas 2: Se ignora prima cifra din codul CIF inversat (aceasta este cifra de control) si se inmulteste fiecare cifra cu cifra corespunzatoare din cheia de testare inversata. + *!* Pas 3: Se aduna toate produsele obtinute. Suma rezultata se inmulteste cu 10 si produsul este impartit la 11. Cifra obtinuta, in urma operatiei MODULO 11 reprezita cifra de verificare. Daca in urma impartirii s-a obtinut restul 10 atunci cifra de verificare va fi 0. + *!* Pas 4: Pentru un CIF valid cifra de verificare va trebui sa corespunda cu cifra de control a codului CIF initial. + cheieinv = '235712357' + If llCorect + lcCIFinv = '' + lnSuma = 0 + For I = Len(m.lcCif) - 1 To 1 Step - 1 + lcCIFinv = m.lcCIFinv + Substr(m.lcCif, I, 1) + Endfor + + For I = 1 To Len(m.lcCIFinv) + lnSuma = lnSuma + Val(Substr(m.lcCIFinv, I, 1)) * Val(Substr(m.cheieinv, I, 1)) + Endfor + lnRest = Mod(m.lnSuma * 10, 11) + lnCifraVerificare = Iif(m.lnRest = 10, 0, lnRest) + lcCifraControl = Substr(m.lcCif, Len(m.lcCif), 1) + lnCifraControl = Val(lcCifraControl) + + If m.lnCifraVerificare <> m.lnCifraControl + llCorect = .F. + Endif + Endif + *!* ?IIF(llCorect, 'CORECT', 'INCORECT') + Return llCorect + + Endfunc && VALIDARE_CIF + + *================================= + *!* VALIDEAZA CNP + *!* RETURN .T. / .F. + Function VALIDARE_CNP + Lparameters cCnp + Local cCod + cCod = Alltrim(cCnp) + If Len(cCod)!= 13 + Return .F. + Endif + Local _X(13), _rest, j + For j = 1 To 13 + _X(j) = Val(Substr(cCod, j, 1)) + Endfor + _rest = (_X(1) * 2 + _X(2) * 7 + _X(3) * 9 + _X(4) * 1 + _X(5) * 4 + _X(6) * 6 + _X(7) * 3 + _X(8) * 5 + _X(9) * 8 + _X(10) * 2 + _X(11) * 7 + _X(12) * 9) % 11 + Return Iif((_rest < 10 And _rest = _X(13))Or(_rest = 10 And _X(13) = 1), .T., .F.) + Endfunc && VALIDARE_CNP + + *================================= + Function GetError + Local lcReturn, lnLines + Local Array laEroare(1) + + lcReturn = "" + + lnLines = Aerror(laEroare) + If lnLines = 7 + lcReturn = Alltrim(Transform(laEroare(1))) + ' ' + Alltrim(Transform(laEroare(2))) &&+ ALLTRIM(TRANSFORM(laEroare(3))) + Endif + Return lcReturn + Endfunc + + *============================ + Procedure Log + Lparameters tcText + If Type('goLog') = 'O' + goLog.Log(tcText) + Else + Local lcText + lcText = Transform(Datetime()) + " " + Iif(Empty(tcText), "", tcText) + Chr(13) + Chr(10) + + Strtofile(m.lcText, "log.txt", .T.) + Endif + + Endproc && Log + + Function GetInfoMfin(lcResponse, lnRand) + Local cAnchorString, cTable, lcRand, lcReturn + + m.cAnchorString = "AGENTUL ECONOMIC CU CODUL UNIC" + m.cTable = Upper(Strextract( Substr(lcResponse, Atc( m.cAnchorString, lcResponse)), '')) + + lcRand = Strextract( cTable, "", lnRand ) + lcReturn = Strextract( lcRand, [SIZE="2">], "", 2) + Return lcReturn + Endfunc && GetInfoMfin + + *** Parseaza html-ul de la mfinante.ro si transforma tabelul intr-un array cu 2 coloane (descriere, valoare) + Procedure InfoMfin2Array(lcResponse, laInfo) + Local lcList, lcTable, lnLinii, I + + If Atc('NU ATI INTRODUS CODUL DE VALIDARE CORECT', m.lcResponse, 1) > 0 + Dimension laInfo(100, 2) + laInfo = "" + laInfo(2, 2) = "Nu ati introdus codul de validare corect!" + Else + lcString = This.cMfinAnchorString && "AGENTUL ECONOMIC CU CODUL UNIC" + lcTable = Strextract(Substr(m.lcResponse, Atc(m.lcString, m.lcResponse)), '', 1, 1) + + If Empty(m.lcTable) + Dimension laInfo(100, 2) + laInfo = "" + laInfo(2, 2) = "Nu s-a gasit tabelul!" + Else + * Elimin CR LF TAB NBSP si "reglez" & + lcTable = Transform(m.lcTable) + lcTable = Strtran(m.lcTable, Chr(10), '', 1, 1000, 1) + * lcTable = Strtran(m.lcTable, Chr(9), '',1,1000,1) + lcTable = Strtran(m.lcTable, Chr(13), '', 1, 1000, 1) + lcTable = Strtran(m.lcTable, ' ', ' ', 1, 1000, 1) + lcTable = Strtran(m.lcTable, '&', '&', 1, 1000, 1) + + *!* lcTable = STREXTRACT(m.lcResponse,'',1,5) + *** functia parsetable transforma tabelul html intr-o lista fara tag-uri + lcList = This.ParseTable(m.lcTable) + *** se trece lista intr-un vector + lnLinii = Alines(laInfo, lcList, 1) + If lnLinii > 1 + *** vectorul laInfo se redimensioneaza la 2 coloane. Prima coloana contine explicatia, a doua valoarea + Dimension laInfo (Ceiling(lnLinii / 2), 2) + For I = 1 To Alen(laInfo, 1) + laInfo(I, 1) = Alltrim(Strtran(Alltrim(Strtran(laInfo(I, 1), " ", "", 1, 1000, 1)), Chr(9), "")) + laInfo(I, 2) = Alltrim(Strtran(Alltrim(Strtran(laInfo(I, 2), " ", "", 1, 1000, 1)), Chr(9), "")) + Endfor + Else + Dimension laInfo(100, 2) + laInfo = "" + laInfo(2, 2) = "Tabelul are dimensiunea < 2!" + Endif && lnLinii > 1 + Endif && EMPTY(m.lcTable) + Endif && NU ATI INTRODUS CODUL DE VALIDARE CORECT + Endproc && InfoMfin2Array + + *** Parseaza html-ul de la vies si transforma tabelul intr-un array cu 2 coloane (descriere, valoare) + Procedure InfoVIES2Array(lcResponse, laInfo) + + Local lcList, lcTable, lnLinii, I + + lcTable = Strextract(m.lcResponse, '', 5, 5) + *** functia parsetable transforma tabelul html intr-o lista fara tag-uri + lcList = This.ParseTable(m.lcTable) + *** se trece lista intr-un vector + lnLinii = Alines(laInfo, lcList, 1) + *** vectorul laInfo se redimensioneaza la 2 coloane. Prima coloana contine explicatia, a doua valoarea + Dimension laInfo (lnLinii / 2, 2) + For I = 1 To Alen(laInfo, 1) + laInfo(I, 1) = Alltrim(Strtran(Alltrim(Strtran(laInfo(I, 1), " ", "", 1, 10, 1)), Chr(9), "")) + laInfo(I, 2) = Alltrim(Strtran(Alltrim(Strtran(laInfo(I, 2), " ", "", 1, 10, 1)), Chr(9), "")) + Endfor + Endproc && InfoMfin2Array + + *** creaza o lista caracter cu valorile dintr-un tabel html + *** rand 1: cell_1_1, rand 2: cell_1_2, rand 3: cell_2_1, rand 4: cell_2_2 etc. + Function ParseTable + Lparameters tcTable + + Local lcList, lcCell, lcData, lnCell, lnTag + lcList = '' + For lnCell = 1 To Occurs('', lnCell, 3) + lcData = '' + For lnTag = 1 To Occurs('>', lcCell) + lcData = lcData + Strextract(lcCell, '>', '<', lnTag, 3) + Next lnTag + lcData = Alltrim(Chrtran(lcData, Chr(10) + Chr(13), Space(1))) + Do While At(Space(2), lcData) > 0 + lcData = Strtran(lcData, Space(2), Space(1)) + Enddo + lcList = lcList + lcData + CR + Endfor + Return lcList + Endfunc && ParseTable + + *** Extrage codul de tara din codul fiscal (primele 2 caractere) + Function GetCodTara + Lparameters tcCodFiscal + + Local lcCodTara, lcCodFiscal + Local lcChar1, lcChar2 + lcCodTara = "" + lcCodFiscal = Alltrim(Strtran(Upper(Transform(tcCodFiscal)), ' ', '')) + lcChar1 = Substr(m.lcCodFiscal, 1, 1) + + If Isalpha(m.lcChar1) + m.lcCodTara = m.lcCodTara + m.lcChar1 + lcChar2 = Substr(m.lcCodFiscal, 2, 1) + If Isalpha(m.lcChar2) + m.lcCodTara = m.lcCodTara + m.lcChar2 + Endif + Endif + + If m.lcCodTara = 'R' Or Empty(m.lcCodTara) + m.lcCodTara = 'RO' + Endif + + Return m.lcCodTara + Endfunc && GetCodTara + + *** curata textul de diacritice, spatii, CR/LF + Function RemoveCharacters + Lparameters tcText, tlDiacritics, tlSpaces, tlCR + *** tcText: textul initial + *** tlDiacritics: inlocuieste diacriticele + *** tlSpaces: sterge spatiile + *** tlCR: sterge CR si LF + + If Pcount() = 1 + tlDiacritics = .T. + Endif + + Local lcText + lcText = Nvl(m.tcText, '') + If m.tlDiacritics + lcText = STRTRAN(STRTRAN(Strtran(Nvl(m.lcText, ''), Chr(197) + CHR(162), 'T', 1,100,1), Chr(197) + CHR(63), 'S', 1,100,1), Chr(196) + CHR(63), 'A', 1,100,1) + lcText = Strtran(Nvl(m.lcText, ''), Chr(195) + CHR(63), 'I', 1,100,1) + lcText = Strtran(Strtran(Strtran(Strtran(Strtran(Nvl(m.lcText, ''), Chr(170), 'S', 1,100,1), Chr(222), 'T', 1,100,1), Chr(226), 'A', 1,100,1), Chr(227), 'A', 1,100,1), Chr(238), 'I', 1,100,1) + lcText = STRTRAN(Strtran(Strtran(Strtran(Nvl(m.lcText, ''), Chr(206), 'I', 1,100,1), Chr(194), 'A', 1,100,1), Chr(195), 'A', 1,100,1), Chr(196), 'A', 1,100,1) + lcText = STRTRAN(m.lcText, CHR(2), '',1,100,1) && caracter neprintabil + ENDIF + + + If m.tlSpaces + lcText = Strtran(m.lcText, ' ', '', 1, 100, 1) + Endif + If m.tlCR + lcText = Strtran(Strtran(m.lcText, Chr(13), ''), Chr(10), '') + Endif + + Return m.lcText + Endfunc + + ****************************************************** + *** Primeste o adresa de forma Strada NR LOCALITATE + *** Intoarce un obiect cu proprietatile: STRADA, NR, LOCALITATE + ****************************************************** + Procedure ParseAdresaMFin + Lparameters tcAdresa + * tcAdresa: Bld. Stefan cel Mare 14 Tirgu Neamt + Local lcAdresa, loAdresa + loAdresa = Createobject("empty") + AddProperty(loAdresa, "strada", "") + AddProperty(loAdresa, "nr", "") + AddProperty(loAdresa, "localitate", "") + + lcAdresa = Iif(!Empty(m.tcAdresa) And Type('tcAdresa') = 'C', m.tcAdresa, '') + If !Empty(m.lcAdresa) + lcPatternNrLocalitate = "\d+[A-Za-z\s]+$" && 14 Tirgu Neamt + lcNrLocalitate = GetRegexp(m.lcAdresa, m.lcPatternNrLocalitate, 1) && 14 Tirgu Neamt + + lcPatternLocalitate = "[A-Za-z\s]+$" && Tirgu Neamt + loAdresa.localitate = GetRegexp(m.lcAdresa, m.lcPatternLocalitate, 1) && Tirgu Neamt + + loAdresa.nr = Alltrim(Strtran(m.lcNrLocalitate, loAdresa.localitate, '')) && 14 + + If !Empty(m.lcNrLocalitate) + loAdresa.strada = Alltrim(Strtran(m.lcAdresa, m.lcNrLocalitate, '')) && Bld. Stefan cel Mare + Endif + Endif && !EMPTY() + + Return loAdresa + Endproc && ParseAdresaMfin + + *************************************************************** + *** Intoarce un obiect Mfin cu atribute goale, pentru uz intern + *************************************************************** + Function GetEmptyMfinObj + Local loMFIN + + loMFIN = Createobject("empty") + AddProperty(loMFIN, "Eroare", '') + AddProperty(loMFIN, "Cod", "") + AddProperty(loMFIN, "Firma", "") + AddProperty(loMFIN, "Adresa", "") + AddProperty(loMFIN, "Judet", "") + AddProperty(loMFIN, "Regcom", "") + AddProperty(loMFIN, "codpostal", "") + AddProperty(loMFIN, "telefon", "") + AddProperty(loMFIN, "fax", "") + AddProperty(loMFIN, "DataTVAMFIN", "") + AddProperty(loMFIN, "PlatitorTVAMFIN", .F.) + AddProperty(loMFIN, "Stare", "") + AddProperty(loMFIN, "Strada", "") + AddProperty(loMFIN, "Nr", "") + AddProperty(loMFIN, "Localitate", "") + AddProperty(loMFIN, "Bloc", "") + AddProperty(loMFIN, "Scara", "") + AddProperty(loMFIN, "Etaj", "") + AddProperty(loMFIN, "Apart", "") + AddProperty(loMFIN, "TvaIncasare", .F.) + AddProperty(loMFIN, "SplitTVA", .F.) + AddProperty(loMFIN, "Inactiv", .F.) + Return loMFIN + Endfunc && GetEmptyMfinObj +Enddefine + +********************************************* +*** Verificare coduri fiscale folosind serviciul web ANAF, cate 500 de coduri per interogare +********************************************* +Define Class VerificareANAF As Custom + + Procedure Init + If !'nfjsonread' $ Lower(Set("Procedure")) + Set Procedure To nfjsonread.prg Additive + Endif + If !'nfjsoncreate' $ Lower(Set("Procedure")) + Set Procedure To nfjsoncreate.prg Additive + Endif + Endproc && Init + + ************************************* + *** VerificaListaCIF("31103995,1879855", Date(), "crsANAF") + *** Verifica codurile fiscale din lista, la data + *** Intoarce un cursor crsANAF (cui N(13), Data d, denumire c(60), adresa c(244), tva L, data_sfarsit d, data_anul_imp d, mesaj c(100)) + ************************************* + Function VerificaListaCIF + Lparameters tcListaCIF, tdData, tcAlias + * tcListaCIF: lista coduri fiscale sau numele unui cursor cu coduri fiscale + + Local llUsed, lcCursorListaCIF, lnRec, lnRecs, lcAlias + + lcCursorListaCIF = "" + llUsed = .F. + lcAlias = "" + + goLog.Log('tcListaCIF: ' + tcListaCIF, 'VerificaListaCIF') + If Used(tcListaCIF) + * cursor + lcCursorListaCIF = m.tcListaCIF + llUsed = .T. + Else + * lista + lcCursorListaCIF = "cListaCIFTemp" + lnRecs = Getwordcount(m.tcListaCIF, ',') + Create Cursor (lcCursorListaCIF) (cod_fiscal c(30) Null, data D null) + For lnRec = 1 To m.lnRecs + lcCodFiscal = Getwordnum(m.tcListaCIF, m.lnRec, ',') + Insert Into (lcCursorListaCIF) (cod_fiscal, data) Values (m.lcCodFiscal, m.tdData) + Endfor + Endif + + lcAlias = This.ANAF_SincronWebService_PlatitorTva(m.lcCursorListaCIF, m.tdData, m.tcAlias) + If !m.llUsed + Use In (Select(lcCursorListaCIF)) + Endif + + Return m.lcAlias + Endfunc && AnafPlatitorTVA + + * + Function ANAF_SincronWebService_PlatitorTva + Lparameters tcCursorListaCIF, tdData, tcAlias + + Local loCol As "empty" + Local loHTTP As 'Microsoft.XMLHTTP' + Local laCoduri[1], lcAlias, lcData, lcDataFormatted, lcJsonString, lcListaCIF, lcSend, lcServer, lcCodFiscal, llDataCursor + Local ldData, lnRec, lnRecords, loJsonObject, lnIdx, lnRec1, lnRec2, lnGrup, lnGrupuri, loEx As Exception + Local loVerificareCod As "VerificareCod" + Local lcCodFiscalFRO, lcCodTara, lcMesaj, llRO, lnReqNo, lnWaitSeconds, laFound, lcCodJudet + + lcJsonString = "" + + lcAlias = Iif(!Empty(m.tcAlias) And Type('tcAlias') = "C", m.tcAlias, "crsANAF") + USE IN (SELECT(m.lcAlias)) + + ldData = Iif(!Empty(m.tdData) And Type('tdData') = "D", m.tdData, Date()) + + lcData = Dtos(m.ldData) + *lcDataFormatted = Left(m.lcData, 4) + "-" + Substr(m.lcData, 5, 2) + "-" + Substr(m.lcData, 7, 2) + lnRecords = Reccount(tcCursorListaCIF) + + IF m.lnRecords = 0 + Return m.lcAlias + ENDIF + + llDataCursor = (TYPE(tcCursorListaCIF + '.data') = 'D') && daca exista coloana data in cursor, folosesc data din cursor, daca este completata + + goLog.Log('lnRecords: ' + Transform(m.lnRecords), 'ANAF_SincronWebService_PlatitorTva') + Try + loHTTP = Createobject('winHTTP.winHTTPrequest.5.1') + Catch To loEx + ENDTRY + + If Type('loHTTP') <> 'O' + Try + loHTTP = Createobject('Microsoft.XMLHTTP') && 04.07.2016 + Catch To loEx + AMESSAGEBOX(loEx.Message, 0 + 16, _Screen.Caption) + Endtry + Endif + If Type('loHTTP') <> 'O' + goLog.Log("TYPE('loHTTP') <> 'O'", 'ANAF_SincronWebService_PlatitorTva') + Return m.lcAlias + Endif + + * lcServer = 'https://webservicesp.anaf.ro:/PlatitorTvaRest/api/v1/ws/tva' && api v1 + * lcServer = 'https://webservicesp.anaf.ro/PlatitorTvaRest/api/v3/ws/tva' +*!* lcServer = 'https://webservicesp.anaf.ro/PlatitorTvaRest/api/v5/ws/tva' +*!* lcServer = 'https://webservicesp.anaf.ro/PlatitorTvaRest/api/v6/ws/tva' + lcServer = 'https://webservicesp.anaf.ro/api/PlatitorTvaRest/v9/tva' + + loVerificareCod = Createobject("VerificareCod") + lnReqNo = 100 && maxim 100 CUI-uri pe verificare + lnWaitSeconds = 1 && minim 1 secunda intre interogari + lnGrupuri = Max(CEILING(m.lnRecords / m.lnReqNo), 1) && grupuri de cate 500 de coduri maxim per interogare + For lnGrup = 1 To m.lnGrupuri + lnRec1 = m.lnReqNo * (m.lnGrup - 1) + 1 + lnRec2 = Min(m.lnReqNo * m.lnGrup, m.lnRecords) + Wait Window 'Verific codurile fiscale ' + Alltrim(Str(m.lnRec1)) + '..' + Alltrim(Str(m.lnRec2)) + ' / ' + Alltrim(Str(m.lnRecords)) Nowait + + Release laCoduri + Dimension laCoduri(m.lnRec2 - lnRec1 + 1) + lnIdx = 0 + Select (m.tcCursorListaCIF) + Scan For Between(Recno(), lnRec1, lnRec2) + lcCodFiscal = Alltrim(cod_fiscal) + IF m.llDataCursor AND !EMPTY(data) + lcData = DTOS(data) + ELSE + lcData = DTOS(m.ldData) + ENDIF + lcDataFormatted = Left(m.lcData, 4) + "-" + Substr(m.lcData, 5, 2) + "-" + Substr(m.lcData, 7, 2) + + lcCodTara = loVerificareCod.GetCodTara(m.lcCodFiscal) + llRO = (m.lcCodTara = 'RO') + + lcCodFiscalFRO = Strtran(m.lcCodFiscal, m.lcCodTara, '') + lcCodFiscalFRO = Strtran(Strtran(Strtran(m.lcCodFiscalFRO, ' ', ''), 'RO', ''), 'R', '') + + If m.llRO AND (Isdigit(m.lcCodFiscalFRO) and Len(m.lcCodFiscalFRO) <= 10) + loCol = Createobject("empty") + AddProperty(loCol, "cui", Int(Val(m.lcCodFiscalFRO))) + AddProperty(loCol, "data", m.lcDataFormatted) + lnIdx = lnIdx + 1 + laCoduri[lnIdx] = loCol + ENDIF + Endscan && tcCursorListaCIF + IF m.lnIdx > 0 + Dimension laCoduri(lnIdx) + ENDIF + + lcSend = nfjsoncreate(@laCoduri) + goLog.Log('lcSend: ' + m.lcSend, 'ANAF_SincronWebService_PlatitorTva') + + lcJsonString = '' + Try + loHTTP.Open('POST', lcServer, .F.) && !!! POST e blocat de furnizor + loHTTP.setRequestHeader("Content-Type", "application/json;") + loHTTP.Send(lcSend) + If loHTTP.Status = 200 + lcJsonString = ALLTRIM(loHTTP.responseText) + IF LEFT(m.lcJsonString,1) <> '{' + IF 'mentenanta'$LOWER(m.lcJsonString) + AMESSAGEBOX('Serviciul web ANAF este in mentenanta!',0+48,_screen.Caption) + ELSE + AMESSAGEBOX('Serviciul web ANAF nu a intors un raspuns corespunzator.!' + CHR(13) + CHR(10) + m.lcJsonString,0+48,_screen.Caption) + ENDIF + lcJsonString = '' + ENDIF + ENDIF + Catch To loEx + AMESSAGEBOX(loEx.Message, 0 + 16, _Screen.Caption) + Endtry + * + goLog.Log('lcJsonString: ' + m.lcJsonString, 'ANAF_SincronWebService_PlatitorTva') + + * + SET STEP ON + If Not Empty(m.lcJsonString) + TRY + loJsonObject = nfjsonread(m.lcJsonString) && nfJson from http://vfpx.codeplex.com/ + lcCodJudet = "" + IF TYPE('loJsonObject.found_vfpsafe_[1].adresa_domiciliu_fiscal.dcod_judet') <> 'U' + lcCodJudet = loJsonObject.found_vfpsafe_[1].adresa_domiciliu_fiscal.dcod_judet + ENDIF + IF !EMPTY(m.lcCodJudet) + lcAlias = This.ParseJsonANAFv8(loJsonObject, m.tcAlias) + ELSE + lcMesaj = 'Serviciul web ANAF intors mesaj de eroare: ' + IIF(TYPE('loJsonObject.message') = 'C', loJsonObject.message, '') + AMESSAGEBOX(m.lcMesaj, 0+48, _screen.Caption) + ENDIF + CATCH TO loEx + AMESSAGEBOX(loEx.Message, 0 + 16, _Screen.Caption) + ENDTRY + Endif + If m.lnGrup < m.lnGrupuri + INKEY(m.lnWaitSeconds)&& astept o secunda intre interogari + ENDIF + Endfor && lnGrup + * + Return m.lcAlias + Endfunc && ANAF_SincronWebService_PlatitorTva + + ************************************* + *** Parseaza obiectul cu raspunsul de la ANAF si creeaza cursorul crsANAF + *** intoarce numele cursorului creat + ************************************* + Procedure ParseJsonANAFv8 + Lparameters toJsonObject, m.tcAlias + + Local lcSave_SetDate, lnRec, loRec, loAdresa + Local lcAlias, lnCUI, lnRecords, loDate, loDateGenerale, loEx, loInregistrareRTVAI + Local loInregistrareSplitTVA, loInregistrareTVA, loJsonObject, loStareInactiv + + loJsonObject = Iif(Type('toJsonObject') = "O" And Pemstatus(toJsonObject, "found_vfpsafe_", 5), toJsonObject, Null) + + lcAlias = Iif(!Empty(m.tcAlias) And Type('tcAlias') = "C", m.tcAlias, "crsANAF") + If !Used(m.lcAlias) + Create Cursor (m.lcAlias) (cui N(13), data D, denumire V(100), firma V(100), adresa C(244), nrRegCom C(30), scpTVA L, data_inceput_ScpTVA D, data_sfarsit_ScpTVA D, data_anul_imp_ScpTVA D, mesaj_ScpTVA C(244), ; + dataInceputTvaInc D, dataSfarsitTvaInc D, dataActualizareTvaInc D, dataPublicareTvaInc D, tipActTvaInc C(100), statusTvaIncasare L, dataInactivare D, dataReactivare D, dataPublicare D, dataRadiere D, statusInactivi L, ; + dataInceputSplitTVA D, dataAnulareSplitTVA D, statusSplitTVA L, ; + tva L, tvaincasare L, splittva L, inactiv L, ; + mesaj V(100), judet V(100), strada V(100), nr V(20), localitate V(100), Bloc V(20), scara V(20), etaj V(20), apart V(20)) + Endif + + If !Isnull(loJsonObject) + goLog.Log('JsonObject ' + Transform(Alen(loJsonObject.found_vfpsafe_, 1)) + ' found ' + Transform(Alen(loJsonObject.notfound, 1)) + ' not found', 'ParseJsonANAF') + + lcSave_SetDate = Set("Date") + Set Date To YMD + * + lnRecords = Alen(loJsonObject.found_vfpsafe_, 1) + For lnRec = 1 To m.lnRecords + loRec = loJsonObject.found_vfpsafe_(m.lnRec) + If Type('loRec') <> 'O' + LOOP + ENDIF + SELECT (m.lcAlias) + SCATTER NAME loDate MEMO BLANK + + IF TYPE('loRec.date_generale') = 'O' + loDateGenerale = loRec.date_generale + + loDateGenerale.adresa = This.RemoveCharacters(loDateGenerale.adresa) + loAdresa = This.ParseAdresaAnaf(loDateGenerale.adresa) + + loDate.cui = loDateGenerale.Cui + loDate.data = CTOD(loDateGenerale.data) + + loDate.denumire = This.RemoveCharacters(loDateGenerale.denumire) + loDate.firma = loDateGenerale.denumire + + loDate.adresa = loDateGenerale.adresa + loDate.judet = loAdresa.judet + loDate.strada = loAdresa.strada + loDate.nr = loAdresa.nr + loDate.localitate = loAdresa.localitate + loDate.bloc = loAdresa.Bloc + loDate.scara = loAdresa.scara + loDate.etaj = loAdresa.etaj + loDate.apart = loAdresa.apart + + loDate.nrRegCom = IIF(TYPE('loDateGenerale.nrRegCom') <> 'U', loDateGenerale.nrRegCom, '') + ENDIF + + IF TYPE('loRec.inregistrare_scop_tva') = 'O' + loInregistrareTVA = loRec.inregistrare_scop_tva + + loDate.scpTVA = loInregistrareTVA.scpTVA + IF TYPE('loInregistrareTVA.perioade_tva',1) <> "U" + TRY + loDate.data_inceput_ScpTVA = CTOD(loInregistrareTVA.perioade_tva[1].data_inceput_ScpTVA) + loDate.data_sfarsit_ScpTVA = CTOD(loInregistrareTVA.perioade_tva[1].data_sfarsit_ScpTVA) + loDate.data_anul_imp_ScpTVA = CTOD(loInregistrareTVA.perioade_tva[1].data_anul_imp_ScpTVA) + loDate.mesaj_ScpTVA = loInregistrareTVA.perioade_tva[1].mesaj_ScpTVA + CATCH TO loEx + ENDTRY + ENDIF + ENDIF + + IF TYPE('loRec.inregistrare_RTVAI') = 'O' + loInregistrareRTVAI = loRec.inregistrare_RTVAI + + loDate.dataInceputTvaInc = CTOD(loInregistrareRTVAI.dataInceputTvaInc) + loDate.dataSfarsitTvaInc = CTOD(loInregistrareRTVAI.dataSfarsitTvaInc) + loDate.dataActualizareTvaInc = CTOD(loInregistrareRTVAI.dataActualizareTvaInc) + loDate.dataPublicareTvaInc = CTOD(loInregistrareRTVAI.dataPublicareTvaInc) + loDate.tipActTvaInc = loInregistrareRTVAI.tipActTvaInc + loDate.statusTvaIncasare = loInregistrareRTVAI.statusTvaIncasare + ENDIF + + IF TYPE('loRec.stare_inactiv') = 'O' + loStareInactiv = loRec.stare_inactiv + + loDate.dataInactivare = CTOD(loStareInactiv.dataInactivare) + loDate.dataReactivare = CTOD(loStareInactiv.dataReactivare) + loDate.dataPublicare = CTOD(loStareInactiv.dataPublicare) + loDate.dataRadiere = CTOD(loStareInactiv.dataRadiere) + loDate.statusInactivi = loStareInactiv.statusInactivi + ENDIF + + IF TYPE('loRec.inregistrare_SplitTVA') = 'O' + loInregistrareSplitTVA = loRec.inregistrare_SplitTVA + + loDate.dataInceputSplitTVA = CTOD(loInregistrareSplitTVA.dataInceputSplitTVA) + loDate.dataAnulareSplitTVA = CTOD(loInregistrareSplitTVA.dataAnulareSplitTVA) + loDate.statusSplitTVA = loInregistrareSplitTVA.statusSplitTVA + loDate.statusSplitTVA = loInregistrareSplitTVA.statusSplitTVA + ENDIF + + loDate.tva = loDate.scpTVA + loDate.tvaincasare = loDate.statusTvaIncasare + loDate.splittva = loDate.statusSplitTVA + loDate.inactiv = loDate.statusInactivi + loDate.mesaj = loDate.mesaj_ScpTVA + + IF !EMPTY(NVL(loDate.cui, 0)) + Insert Into (m.lcAlias) FROM NAME loDate + ENDIF + Endfor + + For lnRec = 1 To Alen(loJsonObject.notfound, 1) + lnCUI = loJsonObject.notfound(m.lnRec) + If Type('lnCUI') = 'N' + SELECT (m.lcAlias) + SCATTER NAME loDate MEMO BLANK + + loDate.cui = m.lnCUI + + IF !EMPTY(NVL(loDate.cui, 0)) + Insert Into (m.lcAlias) FROM NAME loDate + ENDIF + Endif + Endfor + * + Set Date To &lcSave_SetDate + Else + goLog.Log('JsonObject is null', 'ParseJsonANAF') + Endif + Return m.lcAlias + ENDPROC + + ************************************* + *** Parseaza obiectul cu raspunsul de la ANAF si creeaza cursorul crsANAF + *** intoarce numele cursorului creat + ************************************* + Procedure ParseJsonANAFv3 + Lparameters toJsonObject, m.tcAlias + + Local lcSave_SetDate, lnRec, loRec, loAdresa + loJsonObject = Iif(Type('toJsonObject') = "O" And Pemstatus(toJsonObject, "found_vfpsafe_", 5), toJsonObject, Null) + + lcAlias = Iif(!Empty(m.tcAlias) And Type('tcAlias') = "C", m.tcAlias, "crsANAF") + If !Used(m.lcAlias) + Create Cursor (m.lcAlias) (cui N(13), data D, denumire V(100), firma V(100), adresa C(244), nrRegCom C(30), scpTVA L, data_inceput_ScpTVA D, data_sfarsit_ScpTVA D, data_anul_imp_ScpTVA D, mesaj_ScpTVA C(244), ; + dataInceputTvaInc D, dataSfarsitTvaInc D, dataActualizareTvaInc D, dataPublicareTvaInc D, tipActTvaInc C(100), statusTvaIncasare L, dataInactivare D, dataReactivare D, dataPublicare D, dataRadiere D, statusInactivi L, ; + dataInceputSplitTVA D, dataAnulareSplitTVA D, statusSplitTVA L, ; + tva L, tvaincasare L, splittva L, inactiv L, ; + mesaj V(100), judet V(100), strada V(100), nr V(20), localitate V(100), Bloc V(20), scara V(20), etaj V(20), apart V(20)) + Endif + + If !Isnull(loJsonObject) + goLog.Log('JsonObject ' + Transform(Alen(loJsonObject.found_vfpsafe_, 1)) + ' found ' + Transform(Alen(loJsonObject.notfound, 1)) + ' not found', 'ParseJsonANAF') + + lcSave_SetDate = Set("Date") + Set Date To YMD + * + For lnRec = 1 To Alen(loJsonObject.found_vfpsafe_, 1) + loRec = loJsonObject.found_vfpsafe_(m.lnRec) + If Type('loRec') = 'O' + loRec.adresa = This.RemoveCharacters(loRec.adresa) + loAdresa = This.ParseAdresaAnaf(loRec.adresa) + lcNrRegCom = IIF(TYPE('loRec.nrRegCom') <> 'U', loRec.nrRegCom, '') + + Insert Into (m.lcAlias) (cui, data, denumire, firma, adresa, nrRegCom, ; + scpTVA, data_inceput_ScpTVA, data_sfarsit_ScpTVA, data_anul_imp_ScpTVA, mesaj_ScpTVA, ; + dataInceputTvaInc, dataSfarsitTvaInc, dataActualizareTvaInc, dataPublicareTvaInc, tipActTvaInc, statusTvaIncasare, ; + dataInactivare, dataReactivare, dataPublicare, dataRadiere, statusInactivi, ; + dataInceputSplitTVA, dataAnulareSplitTVA, statusSplitTVA, ; + tva, tvaincasare, splittva, inactiv, ; + mesaj, judet, strada, nr, localitate, Bloc, scara, etaj, apart) VALUES ; + (loRec.cui, CTOD(loRec.data), loRec.denumire, loRec.denumire, loRec.adresa, m.lcNrRegCom, ; + loRec.scpTVA, CTOD(loRec.data_inceput_ScpTVA), CTOD(loRec.data_sfarsit_ScpTVA), CTOD(loRec.data_anul_imp_ScpTVA), loRec.mesaj_ScpTVA, ; + CTOD(loRec.dataInceputTvaInc), CTOD(loRec.dataSfarsitTvaInc), CTOD(loRec.dataActualizareTvaInc), CTOD(loRec.dataPublicareTvaInc), loRec.tipActTvaInc, loRec.statusTvaIncasare, ; + CTOD(loRec.dataInactivare), CTOD(loRec.dataReactivare), CTOD(loRec.dataPublicare), CTOD(loRec.dataRadiere), loRec.statusInactivi, ; + CTOD(loRec.dataInceputSplitTVA), CTOD(loRec.dataAnulareSplitTVA), loRec.statusSplitTVA, ; + loRec.scpTVA, loRec.statusTvaIncasare, loRec.statusSplitTVA, loRec.statusInactivi, ; + loRec.mesaj_ScpTVA, loAdresa.judet, loAdresa.strada, loAdresa.nr, loAdresa.localitate, loAdresa.Bloc, loAdresa.scara, loAdresa.etaj, loAdresa.apart) + Endif + Endfor + + For lnRec = 1 To Alen(loJsonObject.notfound, 1) + loRec = loJsonObject.notfound(m.lnRec) + If Type('loRec') = 'O' + loRec.adresa = This.RemoveCharacters(loRec.adresa) + loAdresa = This.ParseAdresaAnaf(loRec.adresa) + lcNrRegCom = IIF(TYPE('loRec.nrRegCom') <> 'U', loRec.nrRegCom, '') + + Insert Into (m.lcAlias) (cui, data, denumire, firma, adresa, nrRegCom, ; + scpTVA, data_inceput_ScpTVA, data_sfarsit_ScpTVA, data_anul_imp_ScpTVA, mesaj_ScpTVA, ; + dataInceputTvaInc, dataSfarsitTvaInc, dataActualizareTvaInc, dataPublicareTvaInc, tipActTvaInc, statusTvaIncasare, ; + dataInactivare, dataReactivare, dataPublicare, dataRadiere, statusInactivi, ; + dataInceputSplitTVA, dataAnulareSplitTVA, statusSplitTVA, ; + tva, tvaincasare, splittva, inactiv, ; + mesaj, judet, strada, nr, localitate, Bloc, scara, etaj, apart) VALUES ; + (loRec.cui, CTOD(loRec.data), loRec.denumire, loRec.denumire, loRec.adresa, m.lcNrRegCom, ; + loRec.scpTVA, CTOD(loRec.data_inceput_ScpTVA), CTOD(loRec.data_sfarsit_ScpTVA), CTOD(loRec.data_anul_imp_ScpTVA), loRec.mesaj_ScpTVA, ; + CTOD(loRec.dataInceputTvaInc), CTOD(loRec.dataSfarsitTvaInc), CTOD(loRec.dataActualizareTvaInc), CTOD(loRec.dataPublicareTvaInc), loRec.tipActTvaInc, loRec.statusTvaIncasare, ; + CTOD(loRec.dataInactivare), CTOD(loRec.dataReactivare), CTOD(loRec.dataPublicare), CTOD(loRec.dataRadiere), loRec.statusInactivi, ; + CTOD(loRec.dataInceputSplitTVA), CTOD(loRec.dataAnulareSplitTVA), loRec.statusSplitTVA, ; + loRec.scpTVA, loRec.statusTvaIncasare, loRec.statusSplitTVA, loRec.statusInactivi, ; + loRec.mesaj_ScpTVA, loAdresa.judet, loAdresa.strada, loAdresa.nr, loAdresa.localitate, loAdresa.Bloc, loAdresa.scara, loAdresa.etaj, loAdresa.apart) + + Endif + Endfor + * + Set Date To &lcSave_SetDate + Else + goLog.Log('JsonObject is null', 'ParseJsonANAF') + Endif + Return m.lcAlias + ENDPROC + + ************************************* + *** Parseaza obiectul cu raspunsul de la ANAF si creeaza cursorul crsANAF + *** intoarce numele cursorului creat + ************************************* + Procedure ParseJsonANAFv1 + Lparameters toJsonObject, m.tcAlias + + Local lcSave_SetDate, lnRec, loRec, loAdresa + loJsonObject = Iif(Type('toJsonObject') = "O" And Pemstatus(toJsonObject, "found_vfpsafe_", 5), toJsonObject, Null) + + lcAlias = Iif(!Empty(m.tcAlias) And Type('tcAlias') = "C", m.tcAlias, "crsANAF") + If !Used(m.lcAlias) + Create Cursor (m.lcAlias)(cui N(13), Data D, denumire V(100), firma V(100), adresa V(244), tva L, data_sfarsit D, data_anul_imp D, mesaj V(100), judet V(100), strada V(100), nr V(20), localitate V(100), Bloc V(20), scara V(20), etaj V(20), apart V(20)) + Endif + + If !Isnull(loJsonObject) + goLog.Log('JsonObject ' + Transform(Alen(loJsonObject.found_vfpsafe_, 1)) + ' found ' + Transform(Alen(loJsonObject.notfound, 1)) + ' not found', 'ParseJsonANAF') + + lcSave_SetDate = Set("Date") + Set Date To YMD + * + For lnRec = 1 To Alen(loJsonObject.found_vfpsafe_, 1) + loRec = loJsonObject.found_vfpsafe_(m.lnRec) + If Type('loRec') = 'O' + loRec.adresa = This.RemoveCharacters(loRec.adresa) + loAdresa = This.ParseAdresaAnaf(loRec.adresa) + Insert Into (m.lcAlias) (cui, Data, denumire, firma, adresa, tva, data_sfarsit, data_anul_imp, mesaj, judet, strada, nr, localitate, Bloc, scara, etaj, apart) Values; + (loRec.cui, Ctod(loRec.Data), loRec.denumire, loRec.denumire, loRec.adresa, loRec.tva, Ctod(loRec.data_sfarsit), Ctod(loRec.data_anul_imp), loRec.mesaj, loAdresa.judet, loAdresa.strada, loAdresa.nr, loAdresa.localitate, loAdresa.Bloc, loAdresa.scara, loAdresa.etaj, loAdresa.apart) + Endif + Endfor + + For lnRec = 1 To Alen(loJsonObject.notfound, 1) + loRec = loJsonObject.notfound(m.lnRec) + If Type('loRec') = 'O' + loRec.adresa = This.RemoveCharacters(loRec.adresa) + loAdresa = This.ParseAdresaAnaf(loRec.adresa) + Insert Into (m.lcAlias) (cui, Data, denumire, firma, adresa, tva, data_sfarsit, data_anul_imp, mesaj, judet, strada, nr, localitate, Bloc, scara, etaj, apart) Values; + (loRec.cui, Ctod(loRec.Data), loRec.denumire, loRec.denumire, loRec.adresa, loRec.tva, Ctod(loRec.data_sfarsit), Ctod(loRec.data_anul_imp), loRec.mesaj, loAdresa.judet, loAdresa.strada, loAdresa.nr, loAdresa.localitate, loAdresa.Bloc, loAdresa.scara, loAdresa.etaj, loAdresa.apart) + Endif + Endfor + * + Set Date To &lcSave_SetDate + Else + goLog.Log('JsonObject is null', 'ParseJsonANAF') + Endif + Return m.lcAlias + Endproc + + *** curata textul de diacritice, spatii, CR/LF + Function RemoveCharacters + Lparameters tcText, tlDiacritics, tlSpaces, tlCR + *** tcText: textul initial + *** tlDiacritics: inlocuieste diacriticele + *** tlSpaces: sterge spatiile + *** tlCR: sterge CR si LF + + If Pcount() = 1 + tlDiacritics = .T. + Endif + + Local lcText + lcText = Nvl(m.tcText, '') + If m.tlDiacritics + lcText = STRTRAN(STRTRAN(Strtran(Nvl(m.lcText, ''), Chr(197) + CHR(162), 'T', 1,100,1), Chr(197) + CHR(63), 'S', 1,100,1), Chr(196) + CHR(63), 'A', 1,100,1) + lcText = Strtran(Nvl(m.lcText, ''), Chr(195) + CHR(63), 'I', 1,100,1) + lcText = Strtran(Strtran(Strtran(Strtran(Strtran(Nvl(m.lcText, ''), Chr(170), 'S', 1,100,1), Chr(222), 'T', 1,100,1), Chr(226), 'A', 1,100,1), Chr(227), 'A', 1,100,1), Chr(238), 'I', 1,100,1) + lcText = STRTRAN(Strtran(Strtran(Strtran(Nvl(m.lcText, ''), Chr(206), 'I', 1,100,1), Chr(194), 'A', 1,100,1), Chr(195), 'A', 1,100,1), Chr(196), 'A', 1,100,1) + Endif + + If m.tlSpaces + lcText = Strtran(m.lcText, ' ', '', 1, 100, 1) + Endif + If m.tlCR + lcText = Strtran(Strtran(m.lcText, Chr(13), ''), Chr(10), '') + Endif + + Return m.lcText + ENDFUNC + + ****************************************************** + *** Primeste o adresa de forma * JUD. CONSTANTA, MUN. CONSTANTA, ALEEA CRIZANTEMELOR, NR.6, CAMERA 2, BL.H1, SC.F, ET.2, AP.109 + *** Intoarce un obiect cu proprietatile: STRADA, NR, LOCALITATE + ****************************************************** + Procedure ParseAdresaAnaf + Lparameters tcAdresa + * JUD. CONSTANTA, MUN. CONSTANTA, ALEEA CRIZANTEMELOR, NR.6, CAMERA 2, BL.H1, SC.F, ET.2, AP.109 + Local lcAdresa, loAdresa, lcCamera, lcItem, lnItem, lnItems, lcPrefix + lcAdresa = Iif(!Empty(m.tcAdresa) And Type('tcAdresa') = 'C', Alltrim(m.tcAdresa), "") + + lcCamera = "" + loAdresa = Createobject("empty") + AddProperty(loAdresa, "judet", "") + AddProperty(loAdresa, "strada", "") + AddProperty(loAdresa, "nr", "") + AddProperty(loAdresa, "localitate", "") + AddProperty(loAdresa, "bloc", "") + AddProperty(loAdresa, "scara", "") + AddProperty(loAdresa, "etaj", "") + AddProperty(loAdresa, "apart", "") + + If !Empty(m.lcAdresa) + lnItems = Getwordcount(m.lcAdresa) + For lnItem = 1 To m.lnItems + lcItem = Alltrim(Getwordnum(m.lcAdresa, m.lnItem, ',')) + Do Case + Case m.lnItem = 1 && 'JUD.'$UPPER(lcItem) + *!* lcJudet = ALLTRIM(STRTRAN(m.lcItem, 'JUD.', '',1,1,1)) + loAdresa.judet = Getwordnum(m.lcItem, 2, ' ') && CONSTANTA + Case m.lnItem = 2 && 'MUN.'$UPPER(lcItem) + *!* lcLocalitate = ALLTRIM(STRTRAN(m.lcItem, 'MUN.', '',1,1,1)) + IF LEFT(m.lcItem, 7) = "SECTOR " + loAdresa.localitate = STRTRAN(m.lcItem, "SECTOR ", "BUCURESTI SECTORUL ") + ELSE + loAdresa.localitate = Getwordnum(m.lcItem, 2, ' ') && CONSTANTA + ENDIF + Case m.lnItem = 3 + lcPrefix = Getwordnum(m.lcItem, 1, ' ') && STR. / BD. + loAdresa.strada = ALLTRIM(STRTRAN(m.lcItem, m.lcPrefix, '',1,1,1)) && Getwordnum(m.lcItem, 2, ' ') && CRIZANTEMELOR + Case m.lnItem = 4 + loAdresa.nr = Alltrim(Strtran(m.lcItem, 'NR.', '', 1, 1, 1)) && 6 + ENDCASE + IF Left(Upper(m.lcItem), 3) = 'BL.' + loAdresa.Bloc = Alltrim(Strtran(m.lcItem, 'BL.', '', 1, 1, 1)) && H1 + ENDIF + IF Left(Upper(m.lcItem), 3) = 'SC.' + loAdresa.scara = Alltrim(Strtran(m.lcItem, 'SC.', '', 1, 1, 1)) && F + ENDIF + IF Left(Upper(m.lcItem), 3) = 'ET.' + loAdresa.etaj = Alltrim(Strtran(m.lcItem, 'ET.', '', 1, 1, 1)) && 2 + ENDIF + IF Left(Upper(m.lcItem), 3) = 'AP.' + loAdresa.apart = Alltrim(Strtran(m.lcItem, 'AP.', '', 1, 1, 1)) && 109 + ENDIF + IF Left(Upper(m.lcItem), 6) = 'CAMERA' + lcCamera = Alltrim(Strtran(m.lcItem, 'CAMERA', '', 1, 1, 1)) && 2 + ENDIF + ENDFOR + If !Empty(m.lcCamera) And !Empty(loAdresa.apart) + loAdresa.apart = loAdresa.apart + ' C. ' + m.lcCamera + Endif + Endif && !empty + + Return loAdresa + Endproc + + +Enddefine && VerificareANAF + +*** WEBSITE ALTERNATIV PENTRU VERIFICARE PLATITOR TVA VIES +Procedure VIES_VAT + Lparameters tara, vat_id + + Local lResult + lResult = .F. + + #Define HTTPSTATUS_OK 200 + #Define HTTPSTATUS_CREATED 201 + #Define HTTPSTATUS_ACCEPTED 202 + #Define HTTPSTATUS_MULTISTATUS 207 + #Define HTTPSTATUS_BADREQUEST 400 + #Define HTTPSTATUS_UNAUTHORIZED 401 + #Define HTTPSTATUS_FORBIDDEN 403 + #Define HTTPSTATUS_NOTFOUND 404 + #Define HTTPSTATUS_INTERNALSERVERERROR 500 + Local oHTTP As "Microsoft.XMLHTTP", cURL + oHTTP = Createobject("Microsoft.XMLHTTP") + cURL = 'http://isvat.appspot.com/' + Upper(Trim(tara)) + '/' + Upper(Trim(vat_id)) + '/' + Try + oHTTP.Open("GET", cURL, .F.) + oHTTP.Send() + If oHTTP.Status = HTTPSTATUS_OK + lResult = Iif(oHTTP.responseText = 'true', .T., .F.) + Endif + Catch + lResult = .F. + * error handling code here. + Endtry + + Return lResult +Endproc && VIES_VAT + +Procedure ONRC + cCui = '1879855' + + oHTTP = Createobject('winhttp.winhttprequest.5.1') + oHTTP.Open('POST', 'http://recom1-ssl.onrc.ro/cgi-bin/intguest.cgi', .F.) + oHTTP.setRequestHeader("Content-Type", "application/x-www-form-urlencoded") + oHTTP.setRequestHeader("Referrer", "http://recom1-ssl.onrc.ro/cgi-bin/recom.cgi?o7=1&l=R") + oHTTP.setRequestHeader("Authorization", "Basic Z3Vlc3Q6Z3Vlc3Q") + oHTTP.setRequestHeader("credentials", "guest:guest") + oHTTP.Send("l=R&o=7&jud=99&cfiscalf=" + cCui + "&cauta=Selectie") + + cTable = Strextract(oHTTP.responseText, '', 5, 4) + Messagebox(cTable) +Endproc && ONRC + + +*** FORMULAR INTRODUCERE COD KAPTCH MFINANTE +Define Class IntroducereCod As Form + Height = 140 + Width = 393 + DoCreate = .T. + AutoCenter = .T. + Caption = "Cod Siguranta Ministerul de Finante" + WindowType = 1 + cCod = "" + _MemberData = [] + ccodfile = "" + Name = "Form1" + ControlBox = .F. + + + Add Object label1 As Label With ; + BackStyle = 0, ; + Caption = "Introduceti codul din imaginea de mai sus" + CRLF + "si apasati ENTER", ; + Height = 40, ; + Left = 39, ; + Top = 84, ; + Width = 234, ; + Name = "Label1" + + + Add Object text1 As TextBox With ; + FontBold = .T., ; + FontSize = 12, ; + Height = 30, ; + Left = 283, ; + Top = 76, ; + Width = 54, ; + Name = "Text1" + + + Add Object imagine As Image With ; + Height = 53, ; + Left = 83, ; + Top = 12, ; + Width = 200, ; + Name = "Imagine" + + + Procedure Init + Lparameters tcCodFile + This.ccodfile = m.tcCodFile + Thisform.imagine.Picture = m.tcCodFile + This.Icon = _Screen.Icon + Endproc + + + Procedure Unload + Return This.cCod + Endproc + + + Procedure text1.Valid + Thisform.cCod = Alltrim(This.Value) + Thisform.Hide() + Endproc + + +Enddefine && IntroducereCod + \ No newline at end of file diff --git a/COMUN/programe/version.prg b/COMUN/programe/version.prg new file mode 100644 index 0000000..4592511 --- /dev/null +++ b/COMUN/programe/version.prg @@ -0,0 +1,127 @@ +Function Getversion + Lparameters lcprogram + Dimension versionarray[1] + clocalexe=GetCurrentAppPath(lcprogram) + *MESSAGEBOX("&clocalexe") + Agetfileversion(versionarray,"&clocalexe") + If Alen(versionarray)>3 + Return versionarray[4] + Else + Return "0.0.0" + Endif + +EndFunc +******************************************************************************************* +Function GetTxtVersion + Lparameters lcprogram + lcFisierVersiune = gcDirMare + [\] + lcProgram + [\versiune.txt] + If File(lcFisierVersiune) + lcVersiune = FileToStr(lcFisierVersiune) + If Empty(lcVersiune) + Return "0.0.0" + Else + Return lcVersiune + EndIf + Else + Return "0.0.0" + Endif +Endfunc +******************************************************************************************* +Function CompareVersion + Lparameters xmlVersion,xmlData,lcprogram,msg,tnTip + *!* modificare v 2.0.14 + && tnTip = 0 sau nu este dat ca parametru : versiunea se citeste din executabil + && tnTip = 1 : versiunea se citeste din fisierul versiune.txt + cVersionCurrent = Iif(Empty(tnTip),Getversion(lcprogram),GetTxtVersion(lcprogram)) + *!* cVersionCurrent=Getversion(lcprogram) + *!* modificare v 2.0.14 ^ + cXmlVersion=xmlVersion + *MESSAGEBOX(cVersionCurrent + " " +cXmlVersion) + If cVersionCurrent="0" + cVersionCurrent="0.0.0" + Endif + + If cVersionCurrent="0" + Return .F. + Else + lnTmpLen=Len(cVersionCurrent) +*!* modificare v 2.0.13 : daca am cVersionCurrent = '1.0.10' si cXmlVersion = '1.0.100' nu mai face actualizarea +*!* If (Alltrim(cVersionCurrent)=Left(Alltrim(cXmlVersion),lnTmpLen)) + If Alltrim(cVersionCurrent)=Alltrim(cXmlVersion) +*!* modificare v 2.0.13 ^ + Return .F. + Else + lcmesaj1=stripXmlMsg(xmlData) + If lcmesaj1#"NO_MESSAGE" And !msg + AMessagebox(lcmesaj1,48,"Actualizare") + Endif + Return .T. + Endif + Endif + +Endfunc +******************************************************************************************* +Function StripXmlVersion + Lparameters cXmlVersion + Return Strextract(Alltrim(cXmlVersion),"<",">",1) +Endfunc +******************************************************************************************* +Function stripXmlMsg + Lparameters cXmlVersion + Return Strextract(Alltrim(cXmlVersion),"{","}",1) +Endfunc +******************************************************************************************* +Function GetCurrentAppPath + Lparameters lcprogram + + If At("_",lcprogram)#0 + lccurrentUR=Substr(lcprogram,At("_",lcprogram)+1) + * MESSAGEBOX(lccurrentUR) + Else + lccurrentUR=lcprogram + Endif + + cAppPath=Addbs(Justpath(Sys(16,0))) + If Atc("PROCEDURE",cAppPath) > 0 + cAppPath = Substr(cAppPath,Rat(":",cAppPath)-1) + Endif + liat=Rat("\",cAppPath,2) + Return Addbs(Left(cAppPath,liat-1))+lccurrentUR+"\"+lcprogram+".exe" + +Endfunc +******************************************************************************************* +Function GetIniPath + Local lcAppPath + + lcAppPath=Addbs(GetAppStartPath()) + lcAppPath = STRTRAN(lcAppPath, 'PROGRAME\','',1,1,1) + lcAppPath = STRTRAN(lcAppPath, 'PROGRAMS\','',1,1,1) + liat=Rat("\",lcAppPath,2) + lcAppPath=Addbs(Left(lcAppPath,liat-1))+"settings.ini" + Return lcAppPath +Endfunc +******************************************************************************************* +Function GetCurrentTempPath + Lparameters lcprogram + + If At("_",lcprogram)#0 + lccurrentUR=Substr(lcprogram,At("_",lcprogram)+1) + * MESSAGEBOX(lccurrentUR) + Else + lccurrentUR=lcprogram + Endif + cAppPath=Addbs(Justpath(Sys(16,0))) + If Atc("PROCEDURE",cAppPath) > 0 + cAppPath = Substr(cAppPath,Rat(":",cAppPath)-1) + Endif + liat=Rat("\",cAppPath,2) + Return Addbs(Left(cAppPath,liat-1))+lccurrentUR+"\temporar.zip" +Endfunc +******************************************************************************************* +Function GetProg + Lparameters cAppPath + cAppPath = Substr(cAppPath,Rat("\",cAppPath)+1) + cAppPath = Left(cAppPath,At("exe",cAppPath)-2) + Return cAppPath +Endfunc +******************************************************************************************* \ No newline at end of file diff --git a/COMUN/programe/xdate.prg b/COMUN/programe/xdate.prg new file mode 100644 index 0000000..a6dab53 --- /dev/null +++ b/COMUN/programe/xdate.prg @@ -0,0 +1,163 @@ +*!* 07.04.2009 +*!* creez cursoarele xsets_standard doar la prima intrare +*!* creez cursoarele xsets_utilizator la fiecare intrare si le combin cu xsets_standard in xsets + +*!* 13.07.2020 +*!* cursorul xnote contine si sectie, nresp, nrord, dst_chlt pentru folosirea la adun_date + +Local lnSucces, i, lcWhere, lcXsets, lcXrequest, lcXnote +lnSucces = 1 + +For i = 1 To 2 + If i = 1 + lcWhere = "id_set < 1000000" && seturi standard + lcXsets = 'xsets_standard' + lcXrequest = 'xrequest_standard' + lcXnote = 'xnote_standard' + Else + lcWhere = "id_set >= 1000000"&& seturi utilizator + lcXsets = 'xsets_utilizator' + lcXrequest = 'xrequest_utilizator' + lcXnote = 'xnote_utilizator' + Endif + + + + If i = 1 And Used(lcXsets) + Loop + Endif + + If i = 1 +* WAIT WINDOW 'xAct...' NOWAIT + lnSucces = goExecutor.oExecute([select * from xact], [XAct]) + If lnSucces < 0 + Messagebox(goExecutor.cEroare,0+16,_Screen.Caption) + Endif + + If lnSucces > 0 +* WAIT WINDOW 'xItems...' NOWAIT + lnSucces = goExecutor.oExecute([select * from xitems], [XItems]) + If lnSucces < 0 + Messagebox(goExecutor.cEroare,0+16,_Screen.Caption) + Endif + Endif + + + If lnSucces > 0 +* WAIT WINDOW 'xSetsCategorii...' NOWAIT + lnSucces = goExecutor.oExecute([select * from xsetscategorii], [Xsetscategorii]) + If lnSucces < 0 + Messagebox(goExecutor.cEroare,0+16,_Screen.Caption) + Endif + Endif + + If lnSucces > 0 +* WAIT WINDOW 'xSetsUtilizatori...' NOWAIT + lnSucces = goExecutor.oExecute([select * from xsets_utilizatori], [xsets_utilizatori]) + If lnSucces < 0 + Messagebox(goExecutor.cEroare,0+16,_Screen.Caption) + Endif + Endif + + nvl2Default("xact") + nvl2Default("XItems") + + Endif && i = 1 + + lcSqlxSets = [select id_set, nr_set, nume_set, fix as fixTemp, lista_note, explicatia, model, ] + ; + [formgest, nu_sterg as nu_stergTemp, param1, listare, param2, frm_date, discount as discountTemp, ] + ; + [adaos as adaosTemp, factura as facturaTemp,id_selst,] + ; + [id_seldr, tip_doc, tip_ctr, expl_fixa,aleg_cont as aleg_contTemp, frm_plata,valuta as valutatemp, compens, ] + ; + [id_tip_rul, id_jnetax, id_jtax, tipjurnal, id_jtaxn, productie as productieTemp, ] + ; + [formproduc, cursval as cursvaltemp, procedura_lans, wht as whttemp, plata as platatemp, ] + ; + [nu_jtva as nu_jtvatemp, nu_doc_pereche as nu_doc_perechetemp ] + ; + [from xsets where ] + lcWhere + + lcSqlXrequest = [select * from xrequest where ] + lcWhere + +*!* lcSqlXnote = [select * from xnote where ] + lcWhere + TEXT TO lcSqlXnote TEXTMERGE NOSHOW +select n.*, s.sectie, l.nrord, p.denumire as nresp, v.tip_venchelt as dst_chlt, c.numar as contract +from xnote n left join nom_sectii s on n.id_sectie = s.Id_Sectie +left join nom_lucrari l on n.id_lucrare = l.id_lucrare +left join nom_parteneri p on n.id_responsabil = p.id_part +left join nom_venit_cheltuieli v on n.id_venchelt = v.id_venchelt +left join contracte c on n.id_ctr = c.id_ctr +where <> + endtext + + Use In (Select(lcXsets)) + Use In (Select(lcXrequest)) + Use In (Select(lcXnote)) + + lnSucces = goExecutor.oExecute(lcSqlxSets, [XSetsTemp]) && are valuta si aleg_cont cu valori 1,0 care vor fi transf in .t., .f. + If lnSucces < 0 + Messagebox(goExecutor.cEroare,0+16,_Screen.Caption) + Else + Select *,Iif(valutaTemp = 1, .T., .F.) As valuta,; + IIF(aleg_contTemp = 1,.T.,.F.) As aleg_cont,; + IIF(cursvalTemp = 1,.T.,.F.) As cursval,; + IIF(productieTemp = 1,.T.,.F.) As productie,; + IIF(discountTemp = 1,.T.,.F.) As discount,; + IIF(fixTemp = 1,.T.,.F.) As fix,; + IIF(nu_stergTemp = 1,.T.,.F.) As nu_sterg,; + IIF(adaosTemp = 1,.T., .F.) As adaos,; + IIF(facturaTemp = 1,.T.,.F.) As factura, ; + IIF(whtTemp = 1,.T.,.F.) As wht, ; + IIF(plataTemp = 1,.T.,.F.) As plata, ; + (nu_jtvatemp = 1) As nu_jtva, ; + (nu_doc_perechetemp = 1) As nu_doc_pereche ; + From XSetsTemp ; + Into Cursor (lcXsets) Readwrite + + USE IN (SELECT('xSetsTemp')) + Endif + + If lnSucces > 0 + lnSucces = goExecutor.oExecute(lcSqlXrequest , lcXrequest) + If lnSucces < 0 + Messagebox(goExecutor.cEroare,0+16,_Screen.Caption) + Endif + Endif + + If lnSucces > 0 + lnSucces = goExecutor.oExecute(lcSqlXnote , lcXnote) + If lnSucces < 0 + Messagebox(goExecutor.cEroare,0+16,_Screen.Caption) + Endif + Endif + + nvl2Default(lcXsets) + nvl2Default(lcXrequest, "id_tipdoc") + nvl2Default(lcXnote) + +Endfor && i + +Use In (Select('xsets')) +Select * From xsets_standard Into Cursor xsets READWRITE +If Used('xsets_utilizator') + Append From Dbf('xsets_utilizator') + Use In (Select('xsets_utilizator')) +Endif + +Use In (Select('xrequest')) +Select * From xrequest_standard Into Cursor xrequest READWRITE +If Used('xrequest_utilizator') + Append From Dbf('xrequest_utilizator') + Use In (Select('xrequest_utilizator')) +Endif + +Use In (Select('xnote')) +Select * From xnote_standard Into Cursor xnote READWRITE +If Used('xnote_utilizator') + Append From Dbf('xnote_utilizator') + Use In (Select('xnote_utilizator')) +Endif + +Select xsets +Index On nume_set Tag nume_set +Index On nr_Set Tag nr_Set +Index On id_set Tag id_set +Set Order To id_set + +Return lnSucces diff --git a/COMUN/programe/xmlaccess.prg b/COMUN/programe/xmlaccess.prg new file mode 100644 index 0000000..4216aaf --- /dev/null +++ b/COMUN/programe/xmlaccess.prg @@ -0,0 +1,148 @@ +#Define CRLF Chr(13) + Chr(10) + +Define Class xmlAccess As Custom + + oXml = Null + ** init : din connecttoXml doar partea care citeste fisierul XML de pe url/network path + ** destroy : release This.oXml + + Procedure getXmlItems + Lparameters tcNumeCursor + This.oXml.getCursorItems(tcNumeCursor) + Endproc + + Function getVersion + Lparameters tcProgram + Return This.oXml.selectnodes(tcProgram) + Endfunc + + Procedure Init + Lparameters tcFisier + Local loex As Exception + myinihandler=Createobject("iniaccess") + clocal=myinihandler.getNetworkPath() + curlstring=myinihandler.getURL() + cdefault=myinihandler.getDefault() + + This.oXml = Createobject('xmlparserclass') + lcsucces="" + + loUpdate=Createobject("wwCodeUpdate") + If Isnull(loUpdate.oHTTP) + loIP = loUpdate.CreateHTTPClient() + Else + loIP = loUpdate.oHTTP + Endif + If cdefault="NetworkPath" + cconnectlocation=Addbs(ShortPath(clocal))+tcFisier+".xml" + polog.Log("Locatia "+cconnectlocation,Program()) + *!* crets=This.connecttoXml(cconnectlocation,"network") + Else + If Right(curlstring,1)#"/" + curlstring=curlstring +"/" + Endif + cconnectlocation=curlstring+tcFisier+".xml" + polog.Log("Locatia "+cconnectlocation,Program()) + *!* crets=This.connecttoXml(cconnectlocation,"URL") + Endif + + *!* IF cdefault="NetworkPath" + *!* cconnectlocation=curlstring+"/"+lcprogram+".xml" + *!* polog.Log("Locatia "+cconnectlocation,Program()) + *!* *!* crets=This.connecttoXml(cconnectlocation,"URL") + *!* Endif + *!* Release myinihandler + If cdefault="URL" + loIP.lShowDialog = .F. + loUrl = loIP.InternetCrackUrl(cconnectlocation) + If Isnull(loUrl) + polog.Log("informatii despre server invalide :" + cconnectlocation ,Program()) + Return .F. + Endif + loIP.nhttpport=Val(loUrl.cPort) + If loIP.HTTPConnect(loUrl.cServer,myinihandler.getUsername(),myinihandler.getPassword(),; + IIF(Lower(loUrl.cProtocol)="https",.T.,.F.)) # 0 + loUpdate.SetError(loIP.cErrorMsg) + Release myinihanler + polog.Log("Nu s-a putut conecta la "+loUrl.cServer + " cu "+loUrl.cProtocol,Program()) + Return .F. + Else + polog.Log("S-a conectat la "+loUrl.cServer ,Program()) + Release myinihanler + lcTFile = "temporary.xml" + lcData = "" + lnSize = 0 + polog.Log("Se descarca "+loUrl.cpath,Program()) + If(loIP.HTTPGetEx( Trim(loUrl.cpath),@lcData,@lnSize,,lcTFile)=0) + TransferHandlerResult=lnSize + Endif + + If(loIP.cErrorMsg <>'') + If(loIP.cErrorMsg="Not found") + polog.Log("NU s-a gasit fisierul la locatia respectiva",Program()) + Else + polog.Log(loIP.cErrorMsg,Program()) + Endif + lcsucces="false" + amessagebox("Nu s-a putut descarca fisierul xml.Verificati 'Configurare actualizari'!",0+48,"Atentie") + Endif + + Endif + Else + Try + Delete File temporary.XML + polog.Log("Se copiaza" + cconnectlocation + " in temporar",Program()) + Copy File (cconnectlocation) To temporary.XML + Catch + polog.Log("NU s-a putut descarca " + cconnectlocation + " in temporar",Program()) + lcsucces="false" + amessagebox("Nu s-a putut descarca fisierul xml.Verificati 'Configurare actualizari'!",0+48,"Atentie") + Endtry + Endif + *!* LOCAL LOeX as Exception + If lcsucces<>"false" + loex = This.oXml.Load("temporary.xml") + If !Isnull(loex) + + lcMesaj = 'Eroarea nr. ' + Alltrim(Transform(loex.ErrorNo)) + CRLF + ; + ALLTRIM(loex.Message) + CRLF + ; + 'Linia ' + Alltrim(Transform(loex.Lineno)) + CRLF + ; + 'Codul ' + Alltrim(loex.LineContents) + CRLF + ; + 'Metoda ' + Alltrim(loex.Procedure) + + *!* Strtofile(Dtoc(Date())+" "+Time()+" " + m.lcMesaj, gcDirMare + "updates.log",1) + polog.Log(m.lcMesaj, Program()) + lcsucces="false" + Endif + + If !Empty(Alltrim(This.oXml.ParseError)) + polog.Log("Eroare la parsarea xml-ului",Program()) + Endif + Endif + If lcsucces="false" + Return .F. + Endif + Endproc + + Procedure Destroy + This.oXml = Null + Try + Delete File "temporary.xml" + Endtry + Endproc + + + Function ReadXmlFile As Character + Lparameters lcprogram + Local lcversiune + lcversiune = This.oXml.selectnodes(lcprogram) + If Empty(lcversiune) + polog.Log("nu s-a putut conecta",Program()) + Return "nu s-a putut conecta" + Else + polog.Log(lcversiune,Program()) + Return lcversiune + Endif + Endfunc + +Enddefine diff --git a/COMUN/programe/xmlefactura-preview-utils.txt b/COMUN/programe/xmlefactura-preview-utils.txt new file mode 100644 index 0000000..62b7fe2 --- /dev/null +++ b/COMUN/programe/xmlefactura-preview-utils.txt @@ -0,0 +1,237 @@ +TEXT TO lcReceiver NOSHOW +// receiver.php + + $error->level, + 'code' => $error->code, + 'column' => $error->column, + 'message' => $error->message, + 'line' => $error->line + ]; + } + + libxml_clear_errors(); + + return [ + 'valid' => false, + 'errors' => $errorMessages + ]; + } + + // Verifica namespace-urile necesare + $namespaces = $xml->getNamespaces(true); + $requiredNamespaces = [ + 'urn:oasis:names:specification:ubl:schema:xsd:Invoice-2', + 'urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2', + 'urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2' + ]; + + foreach ($requiredNamespaces as $ns) { + $found = false; + foreach ($namespaces as $namespace) { + if ($namespace === $ns) { + $found = true; + break; + } + } + + if (!$found) { + return [ + 'valid' => false, + 'errors' => [ + ['message' => "Namespace lipsa: $ns"] + ] + ]; + } + } + + return [ + 'valid' => true, + 'errors' => [] + ]; +} + +// Verificare IP +function checkIP() { + global $config; + $clientIP = $_SERVER['REMOTE_ADDR']; + return in_array($clientIP, $config['allowed_ips']); +} + +// Verificare token +function validateToken() { + global $config; + $headers = getallheaders(); + $token = isset($headers['X-Api-Key']) ? $headers['X-Api-Key'] : ''; + return hash_equals($config['api_key'], $token); +} + +// Verificare origine request +if (!checkIP()) { + header('HTTP/1.1 403 Forbidden'); + error_log("Acces interzis pentru IP: " . $_SERVER['REMOTE_ADDR']); + die(json_encode([ + 'success' => false, + 'error' => 'Acces interzis', + 'details' => 'IP-ul nu este autorizat' + ])); +} + +// Verificare token +if (!validateToken()) { + header('HTTP/1.1 401 Unauthorized'); + error_log("Token invalid de la IP: " . $_SERVER['REMOTE_ADDR']); + die(json_encode([ + 'success' => false, + 'error' => 'Token invalid', + 'details' => 'Autentificare e?uata' + ])); +} + +// Configurare director pentru fi?iere temporare +$uploadDir = dirname(__FILE__) . '/temp/'; +if (!file_exists($uploadDir)) { + mkdir($uploadDir, 0777, true); +} + +// Procesare request POST (primire XML) +if ($_SERVER['REQUEST_METHOD'] === 'POST') { + try { + // Cite?te con?inutul XML din request + $xmlContent = file_get_contents('php://input'); + + // Validare XML + $validationResult = validateXML($xmlContent); + + if (!$validationResult['valid']) { + header('Content-Type: application/json'); + http_response_code(400); + echo json_encode([ + 'success' => false, + 'error' => 'XML invalid', + 'details' => $validationResult['errors'] + ]); + error_log("Validare XML e?uata: " . json_encode($validationResult['errors'])); + exit; + } + + // Genereaza nume unic pentru fi?ier + $fileName = uniqid('xml_') . '.xml'; + $filePath = $uploadDir . $fileName; + + // Salveaza fi?ierul + if (file_put_contents($filePath, $xmlContent)) { + // Raspuns succes + header('Content-Type: application/json'); + echo json_encode([ + 'success' => true, + 'fileName' => $fileName + ]); + } else { + throw new Exception('Eroare la salvarea fi?ierului'); + } + } catch (Exception $e) { + header('Content-Type: application/json'); + http_response_code(500); + error_log("Eroare procesare XML: " . $e->getMessage()); + echo json_encode([ + 'success' => false, + 'error' => $e->getMessage() + ]); + } +} + +// Procesare request GET (cura?are fi?iere temporare) +if ($_SERVER['REQUEST_METHOD'] === 'GET' && isset($_GET['cleanup'])) { + $fileName = basename($_GET['cleanup']); // Sanitizare nume fi?ier + if (preg_match('/^xml_[a-f0-9]+\.xml$/', $fileName)) { // Verifica formatul numelui + $filePath = $uploadDir . $fileName; + + if (file_exists($filePath)) { + if (unlink($filePath)) { + header('Content-Type: application/json'); + echo json_encode(['success' => true]); + } else { + header('Content-Type: application/json'); + http_response_code(500); + error_log("Nu s-a putut ?terge fi?ierul: " . $filePath); + echo json_encode([ + 'success' => false, + 'error' => 'Nu s-a putut ?terge fi?ierul' + ]); + } + } else { + header('Content-Type: application/json'); + http_response_code(404); + echo json_encode([ + 'success' => false, + 'error' => 'Fi?ierul nu exista' + ]); + } + } else { + header('Content-Type: application/json'); + http_response_code(400); + error_log("Nume fi?ier invalid solicitat: " . $fileName); + echo json_encode([ + 'success' => false, + 'error' => 'Nume fi?ier invalid' + ]); + } +} + +// Cura?are automata a fi?ierelor vechi +$files = glob($uploadDir . 'xml_*.xml'); +$now = time(); +$maxAge = $config['temp_file_lifetime'] * 3600; // Conversie ore n secunde + +foreach ($files as $file) { + if ($now - filemtime($file) > $maxAge) { + @unlink($file); + error_log("Fi?ier vechi ?ters: " . basename($file)); + } +} +?> +ENDTEXT + +TEXT TO lcJson noshow +//config.json +{ + "api_key": "d3a46a47f844dcb5c34cafac19d678c4", + "allowed_ips": [ + "127.0.0.1", + "::1", + "localhost", + "5.14.199.44", + "83.103.197.79" + ], + "temp_file_lifetime": 1 +} +ENDTEXT + diff --git a/COMUN/programe/xmlefactura-preview.prg b/COMUN/programe/xmlefactura-preview.prg new file mode 100644 index 0000000..cef71af --- /dev/null +++ b/COMUN/programe/xmlefactura-preview.prg @@ -0,0 +1,222 @@ +* VFP -> POST XML -> PHP -> Salveaza n fixier /temp/xml_xxx.xml -> BROWSER Afiseaza date + +* trimite un fisier xml eFactura la romfast.ro/efactura-generator/receier.php +* receiver.php salveaza fisierul xml pe server in directul /temp si intoarce json cu numele fierului xml +* se deschide browserul cu romfast.ro/efactura-generator/index.html?xml=fisier.xml pentru editare fisier xml + +* Program principal +Local loSender +loSender = Createobject("eFacturaXmlPreview") +loSender.webURL = "https://romfast.ro/efactura-generator/" +loSender.SendXML("C:\temp\factura.xml") + +*** Program pentru trimitere XML pe server romfast.ro si previzualizare web +Define Class eFacturaXmlPreview As Custom + * Configurari + webURL = "https://romfast.ro/efactura-generator/" + apiKey = "d3a46a47f844dcb5c34cafac19d678c4" + debugMode = .F. && Mod depanare pentru nregistrari detaliate + + * Procedura principala pentru trimitere XML + Procedure SendXML + Parameters tcXMLFile, tlVariable + + * tcXMLFile: calea catre fisier xml sau continutul unui fisier xml (tlVariable = .T.) + * tlVariable: .T. daca tcXMLFile este continutul unui fisier, in loc de calea catre fisier + + Local loXMLHTTP, lcResponse, lcFileName, lcXML, llSucces, loXMLDoc + llSucces = .T. + lcResponse = '' + lcFileName = '' + lcXML = '' + loXMLDoc = Null + Set Step On + * Curata fisierele debug anterioare + If This.debugMode + Try + Erase "debug_xml_sent.txt" + Erase "debug_response.txt" + Erase "debug_headers.txt" + Erase "debug_status.txt" + Catch + Endtry + Endif + + Try + * Verifica existenta fisierului + If !m.tlVariable AND !File(tcXMLFile) + Messagebox("Fisierul XML nu exista: " + tcXMLFile, 16, "Eroare") + llSucces = .F. + Endif + + * Citeste XML-ul cu codare UTF-8 explicita + If m.llSucces + IF m.tlVariable + lcXML = m.tcXMLFile + ELSE + lcXML = Strconv(Filetostr(tcXMLFile), 9) + ENDIF + + * Elimina potentialul BOM (Byte Order Mark) + If Substr(lcXML, 1, 3) = Chr(239) + Chr(187) + Chr(191) + lcXML = Substr(lcXML, 4) + Endif + + * Validare structura XML nainte de trimitere + If Empty(Alltrim(lcXML)) + Messagebox("Fisierul XML este gol!", 16, "Eroare") + llSucces = .F. + Endif + Endif + + * Validare XML folosind MSXML + If m.llSucces + Try + loXMLDoc = Createobject("MSXML2.DOMDocument.6.0") + loXMLDoc.Async = .F. + loXMLDoc.LoadXML(lcXML) + + If loXMLDoc.ParseError.Errorcode <> 0 + Messagebox("Eroare parsare XML: " + loXMLDoc.ParseError.Reason, 16, "Eroare XML") + llSucces = .F. + Endif + Catch To loXMLException + Messagebox("Eroare validare structura XML: " + loXMLException.Message, 16, "Eroare Validare") + llSucces = .F. + Endtry + Endif + + * Salveaza XML-ul pentru depanare + If This.debugMode + Strtofile(lcXML, "debug_xml_sent.txt") + Endif + + If m.llSucces + * Creeaza obiectul XMLHTTP pentru trimitere + loXMLHTTP = Createobject("MSXML2.ServerXMLHTTP.6.0") + + * Configureaza timeout si alti parametri + loXMLHTTP.SetTimeouts(30000, 30000, 30000, 30000) + + * Deschide conexiunea + loXMLHTTP.Open("POST", This.webURL + "receiver.php", .F.) + + * Seteaza headere + loXMLHTTP.setRequestHeader("Content-Type", "application/xml; charset=UTF-8") + loXMLHTTP.setRequestHeader("X-Api-Key", This.apiKey) + + * Trimite XML-ul + loXMLHTTP.Send(m.lcXML) + + * Salveaza antetele si statusul pentru depanare + If This.debugMode + Strtofile(loXMLHTTP.getAllResponseHeaders(), "debug_headers.txt") + Strtofile(Transform(loXMLHTTP.Status), "debug_status.txt") + Strtofile(loXMLHTTP.responseText, "debug_response.txt") + Endif + + * Proceseaza raspunsul serverului + Do Case + Case loXMLHTTP.Status = 200 + lcResponse = loXMLHTTP.responseText + lcFileName = This.GetJSONValue(lcResponse, "fileName") + + If !Empty(lcFileName) + This.OpenBrowser(This.webURL + "index.html?xml=" + lcFileName) + llSucces = .T. + Messagebox("XML trimis cu succes!", 64, "Succes") + Else + Messagebox("Nu s-a primit numele fisierului n raspuns." + Chr(13) + ; + "Raspuns server: " + loXMLHTTP.responseText, 16, "Eroare") + Endif + + Case loXMLHTTP.Status = 400 + * Eroare de validare XML + Messagebox("XML invalid! Detalii:" + Chr(13) + ; + loXMLHTTP.responseText, 16, "Eroare Validare XML") + llSucces = .F. + + Case loXMLHTTP.Status = 401 + Messagebox("Token invalid!", 16, "Eroare Autentificare") + llSucces = .F. + + Case loXMLHTTP.Status = 403 + Messagebox("Acces interzis! IP-ul nu este autorizat.", 16, "Eroare Acces") + llSucces = .F. + + Otherwise + Messagebox("Eroare la trimiterea XML-ului: " + loXMLHTTP.responseText + ; + CHR(13) + "Status: " + Transform(loXMLHTTP.Status), ; + 16, "Eroare") + llSucces = .F. + Endcase + + Endif && llSucces + + Catch To loException + llSucces = .F. + Messagebox("Eroare generala: " + loException.Message + ; + CHR(13) + "Detalii n fisierele debug", ; + 16, "Eroare") + + * Salveaza XML-ul de eroare + If This.debugMode + Strtofile(lcXML, "debug_xml_error.txt") + Endif + Endtry + + Return llSucces + Endproc + + * Extrage valoarea dintr-un JSON simplu + Function GetJSONValue + Lparameters tcJSON, tcKey + Local lcPattern, lnPosStart, lnPosEnd, lcValue + + * Creeaza un pattern pentru cheia JSON + lcPattern = '"' + tcKey + '":' + + * Gase?te pozi?ia de start a valorii + lnPosStart = At(lcPattern, tcJSON) + If lnPosStart = 0 + Return "" + Endif + + lnPosStart = lnPosStart + Len(lcPattern) + + * Gaseste pozitia delimitatorului de sfarsit + lnPosEnd = At(",", tcJSON, lnPosStart) + If lnPosEnd = 0 + lnPosEnd = At("}", tcJSON, 1) && Daca nu gaseste virgula, cauta acolada de nchidere + Endif + + If lnPosEnd = 0 + Return "" && Daca nici acum nu gaseste delimitator, JSON-ul este invalid + Endif + + * Extrage valoarea + lcValue = Substr(tcJSON, lnPosStart, lnPosEnd - lnPosStart) + lcValue = Alltrim(Strtran(lcValue, '"', "")) + + Return lcValue + Endfunc + + + + * Deschide browser-ul + Procedure OpenBrowser + Parameters tcURL + + Declare Integer ShellExecute In shell32.Dll ; + INTEGER hndWin, ; + STRING cOperation, ; + STRING cFileName, ; + STRING cParams, ; + STRING cDir, ; + INTEGER nShowWin + + ShellExecute(0, "open", tcURL, "", "", 1) + Endproc +Enddefine + + diff --git a/COMUN/programe/xmlefactura.prg b/COMUN/programe/xmlefactura.prg new file mode 100644 index 0000000..c3c9510 --- /dev/null +++ b/COMUN/programe/xmlefactura.prg @@ -0,0 +1,1360 @@ +*!* 16.10.2023 +*!* ExportEFactura.xmlEFactura : se pare ca la ultima versiune de verificare, cota 0 trebuie sa aiba cod de scutire sau text scutire + +*!* 31.10.2023 +*!* ExportEFactura.xmlEFactura : corectat eroare articol codbare + +*!* 13.11.2023 +*!* ParseEFactura - tratare xml CreditNote + +*!* 28.11.2023 +*!* TrimiteFacturi - se trateaza ExecutionStatus cu sau fara spatii + +*!* 04.01.2024 +*!* ExportEFactura.xmlEFactura : limitare strada adresa client la 150 caractere +*!* getXmlEFactura : nu validez xmlefactura daca plFaraValidareEFactura = .T. (din borderou efactura) + +*!* 10.01.2024 +*!* ExportEFactura.xmlEFactura: corectie completare strada si denumire client. S-au completat in poDate +*!* ExportEFactura.xmlEFactura: am pus la loc "adresa" in loc de "strada" la +*!* AnafEFactura.SendEfactura: am pus parametrul "EXTERN=DA" pentru trimiterea facturilor cu clienti externi + +*!* 15.01.2024 +*!* ExportEFactura.xmlEFactura: explicatia de pe articol se sparge in primele 200 caractere pe Item.descrition si urmatoarele 300 pe InvoiceLine.note + +*!* 19.01.2024 +*!* ParseEFactura : am tratat fisierele fara cbc, cac; am tratat invoice.note._nodetext_ + +*!* 23.01.2024 +*!* RaspunsuriFactura : se apeleza endpoint-ul cu paginatie, in caz ca sunt mai mult de 500 de raspunsuri + +*!* 26.01.2024 +*!* ExportEFactura.xmlEFactura: limitare la 300 caractere invoice.note + +*!* 30.01.2024 +*!* ExportEFactura.xmlEFactura: cumulare discount pe cote TVA + +*!* 06.03.2024 +*!* ParseEFactura: extragere TotalTVARON, articol (codCPV, codNC8, codBare, codFurnizor, codClient) + + +*!* 08.03.2024 +*!* ExportEFactura.xmlEFactura: se completeaza AllowanceCharge la nivel de Invoice.InvoiceLine si Invoice.InvoiceLine.Item.Price +*!* daca optiunile gnEFACTURA_XML_DISC_PLISTA_LINIE si gnEFACTURA_XML_DISC_PLISTA_ART = 1 + +*!* 08.03.2024 +*!* ExportEFactura.xmlEFactura: se completeaza Invoice.Id cu seria + nr factura, Invoice.Note cu cursul valutar + +*!* 29.03.2024 +*!* ExportEFactura.xmlEFactura: Se completeaza corect codul taxa pentru operatiile scutite + +*!* 10.04.2024 +*!* ExportEFactura.xmlEFactura - nu este permis pret negativ. se shimba semnul intre cantitate si pret + +*!* 02.07.2024 +*!* xmlEFactura - limitare detalii la 4000 caractere + +*!* 04.07.2024 +*!* xmlEFactura - salvare raspunsuri facturi primite/trimise intr-un director comun + +*!* 15.07.2024 +*!* xmlEFactura - 10 conturi bancare din datele firmei la modalitati de plata, in loc de 3 conturi bancare + +*!* 07.08.2024 +*!* xmlEFactura - Atasamente inglobate in xml +*!* xmlEFactura - completare registrul comertului in BT-46 (client si furnizor) +*!* xmlEFactura - completare capital social subscris si varsat in BT-33 + +*!* 08.08.2024 +*!* xmlEFactura - Furnizor.StreetName = strada si numar + +*!* 28.10.2024 +*!* xmlEFactura - GetTipTaxa - completare explicatia TVA la motivul scutirii TVA, cota 0% + +*!* 06.12.2024 +*!* getXmlEFactura - xml efactura clienti persoane fizice fara cod fiscal - se completeaza Customer.Party.PartyLegalEntity.CompanyId cu 13 zero + +*!* 13.03.2026 +*!* ValidareEFacturaANAF - folosire validare oauth daca exista token + +* DO TestValidareEFactura +#define precizie_max_pret_vz 6 +#define precizie_max_pret_ach 6 + +Do TestParseEFactura + +Procedure getXmlEFactura + Lparameters toDateFactura, tcCursorLiniiFactura, tlSilentios, tcFisierXML, tcMesaj +* tcFisierXML OUT +* tcMesaj OUT pentru cazu in care generarea xml este silentioasa + + Local loEFactura As "ExportEFactura" + Local lcFisierXML, llOk, loInfo, llValidareOnline, lcToken + + llOk = .F. + lcMesaj = '' + lcFisierXML = '' + lcToken = '' + + loInfo = Createobject("empty") + AddProperty(loInfo, 'lOk', m.llOk) + AddProperty(loInfo, 'cFile', m.lcFisierXML) + AddProperty(loInfo, 'cMesaj', m.lcMesaj) + + IF TYPE('pcTokenEfactura') = 'C' AND !EMPTY(m.pcTokenEfactura) + lcToken = m.pcTokenEfactura + ENDIF + + loEFactura = Createobject("ExportEFactura", m.tlSilentios, m.lcToken) + lcFisierXML = loEFactura.xmlEFactura(toDateFactura, tcCursorLiniiFactura) + loInfo.cFile = Iif(Type('lcFisierXml') = 'C', m.lcFisierXML, '') + + * Daca nu validez eFactura + llFaraValidare = .F. + If Type('plFaraValidareEFactura') = 'L' + * Definesc plFaraValidareEFactura pentru a suprascrie parametrul la momentul listarii (in borderoul eFactura) + llFaraValidare = m.plFaraValidareEFactura + ENDIF + + + If !m.llFaraValidare AND !Empty(m.lcFisierXML) And File(m.lcFisierXML) + + * gnEFACTURA_VALIDARE_ONLINE optiune globala + llValidareOnline = Iif(Type('gnEFACTURA_VALIDARE_ONLINE') = 'N', (m.gnEFACTURA_VALIDARE_ONLINE = 1), .F.) + + * Definesc plValidareEfacturaOnline pentru a suprascrie parametrul la momentul listarii (in borderoul eFactura) + If Type('plValidareEfacturaOnline') = 'L' + llValidareOnline = m.plValidareEfacturaOnline + Endif + llOk = loEFactura.ValidareEFactura(m.lcFisierXML, @lcMesaj, m.llValidareOnline) + loInfo.lOk = m.llOk + loInfo.cMesaj = m.lcMesaj + ENDIF + + * Daca nu trebuie sa validez, intorc SUCCES + IF m.llFaraValidare + loInfo.lOk = .T. + ENDIF + + Return m.loInfo +Endproc && xmlEFactura + +Define Class ExportEFactura As Custom + lSilentios = .F. + cToken = '' && token eFactura, din anaf_efactura.prg + + Procedure Init + Lparameters tlSilentios, tcToken + This.lSilentios = m.tlSilentios + + IF TYPE('tcToken') = 'C' AND !EMPTY(m.tcToken) + This.cToken = m.tcToken + ENDIF + Endproc && Init +* + Procedure xmlEFactura + Lparameters toDateFactura, tcCursorLiniiFactura +* toDateFactura = obiect cu capul facturii +* tcCursorLiniiFactura = cursor cu liniile facturii, asa cum sunt la listare + + Local oxml As "msxml2.DOMDocument" + Local lcBanca, lcCaleFisier, lcCodBare, lcCont, lcFileName, lcNumeClient, lcNumeFirma, lcNumeFisier + Local lcText, lcTextAditional, lcTipTVA, llSucces, llTaxareInversaSauIntracomunitar, lnCont + Local lnSucces, loClient, lFurnizorPlatitorTVA, lClientPlatitorTVA, llExtern + Local lcExplicatie, lcLocalitateBuc, lcMotiv, lcTextDescriere, lcTextNota, lcTip, lnDiscftva + Local lnPretftva, lnPretftvai, lnProcDisc, lnProcTva, lnValDisc, lnValftva, lnValftvai, loRec + Local laFiles[1], lcDir, lcExtensie, lcFacturaFile, lcFile, lcMimeType, lcScheletonFile, lcSerieAct + Local ldDataFactura, lnFile, lnFiles, lnNumarFactura, lcText +*:Global oAdditionalDocumentReference, oAttachment + + *:Global oAllowance, oBaseAmount + +*:Global agettipcota[1], maccize, mcodfiscal, mcodjudet, mcomanda, mdensoc, mdiscounturi, mincasat +*:Global minf_suplm, minvoicetype, mlinii, mliniireducere, mliniistornare, mmoneda, mnrliniiavans +*:Global mprefix, msector, msufix, mtara, mtipfactura, mtiptert, mtiptvacurent, mtotalallowances +*:Global mtotalbrut, mtotalcharges, mtotalnet, mtotalnetliniifactura, mtotaltva, mtvai, mtvatotal +*:Global mum, oPayeeFinancialAccount, oPayeeFinancialAccountId, oPayeeFinancialAccountName +*:Global oPaymentMeans, oPaymentMeansCode, oadresa, oadresalivrare, oadresas, oallowancecharge +*:Global oamount, obuyeritem, oclassificationcodbare, oclassificationlot, oclassificationnc +*:Global oclassificationstandardidnc, ocodbare, ocontact, ocontacts, ocontractreference, ocustomer +*:Global odelivery, odeliverylocation, odocallowancecharge, oendpointid, oformalegala, oformalegalas +*:Global oidentificatorformalegala, oidentificatorformalegalas, oidparty, oidpartys, oidstandard +*:Global oinvoice, oinvoiceline, oitem, oitemamount, oitemprice, oitemtaxcategory, oitemtaxscheme +*:Global olot, omonetarytotal, oorderreference, oparty, opartyidentification, opartyidentifications +*:Global opartys, oschemataxe, oschemataxes, oselleritem, ostandarditem, osubtotal, osubtotaltaxa +*:Global osupplier, otara, otaralivrare, otaras, otaxablesubtotal, otaxcategoryallowance +*:Global otaxcategorycharge, otaxcategorytotals, otaxe, otaxes, otaxschemeallowance +*:Global otaxschemetotals, otaxtotal, ototal, ototalbrut, ototaldeduceri, ototalincasat, ototalnet +*:Global ototalnetfaratva, ototalplata, ototaltaxe, oum + + If !(Type('toDateFactura.nract') = 'N' And Type('tcCursorLiniiFactura') = 'C' And !Empty(m.tcCursorLiniiFactura) And Used(m.tcCursorLiniiFactura)) + AMESSAGEBOX('Apelati exportul xml EFactura cu parametrii (DateFactura, CursorFactura)!', 0 + 48, _Screen.Caption) + Return '' + Endif + + Local lcSelect, llRectificativa, tcNumeFisier, tcCaleFacturi, loDate, llInstitutiePublica + lcSelect = Select() + + loDate = toDateFactura +*!* lcTipTVA = Upper(Nvl(citeste_optiune('D394_TIP'), 'LUNAR')) +*!* lcTipTVA = Iif(!Inlist(m.lcTipTVA, 'LUNAR', 'TRIMESTRIAL', 'SEMESTRIAL', 'ANUAL'), 'LUNAR', m.lcTipTVA) + +* Factura rectificativa + llRectificativa = Iif(Type('loDate.nRectificativa') = 'N', (loDate.nRectificativa = 1), .F.) + llRectificativa = m.llRectificativa Or Iif(Type('loDate.tip_saft') = 'N', (loDate.tip_saft = 384), .F.) + +* Institutie publica - se folosesc coduri articole CPV sau NC8 + llInstitutiePublica = Iif(Type('loDate.institutie_publica') = 'N', (loDate.institutie_publica = 1), .F.) + + maccize = 0 + mliniireducere = 0 + mtotalcharges = 0 + mtotalallowances = 0 + mtvai = 0 + mincasat = 0 + + If Type('gofirma.codfiscalfro') = 'U' + AddProperty(gofirma, 'codfiscalfro', getnrfromstring(gofirma.cod_fiscal)) + Endif + lnSucces = update_jtva_coloane("JV", "cJTVAVanzariTemp", 0) + llSucces = update_um() && vnom_um + + Select a.*, b.coloana_jv, ; + Iif(Left(b.coloana_jv, 2) = 'CE', 1, 0) As intracomunitar, ; + Iif(b.coloana_jv = 'ROTI', 1, 0) As taxare_inversa, ; + Iif(Inlist(b.coloana_jv, 'WRSCDD', 'WRSCFDD', 'WRN', 'FODD', 'WRSCDDAB', 'WRSCDDCD'), 1, 0) As scutit, ; + Iif('DISCOUNT' $ Upper(a.denumire) And a.pretftva < 0, 1, 0) As discount ; + From (m.tcCursorLiniiFactura) a Left Join cJTVAVanzariTemp b On a.id_jtva_coloana = b.id_jtva_coloana ; + Into Cursor C_IES_FORM Readwrite + + + * Nu este permis pret unitar negativ. Schimb semnul intre cantitate si pret unitar + SELECT c_ies_form + SCAN FOR pretftva < 0 + REPLACE cantitate WITH -cantitate, pretftva WITH -pretftva, pretctva WITH -pretctva, pretctvai WITH -pretctvai, pretftvai WITH -pretftvai + ENDSCAN + + + Select(proc_tva - 1) * 100 As proc_tva, intracomunitar, taxare_inversa, scutit, expltva, ; + Sum(valtva) As tva, ; + Sum(valftva) As valoare, CAST('F' as C(5)) As tip, Replicate(' ', 100) As explicatie, Replicate(' ', 100) As motiv ; + From C_IES_FORM ; + Group By proc_tva, intracomunitar, taxare_inversa, scutit, expltva ; + Into Cursor C_TVA_FACTURA ; + Readwrite + + Select C_TVA_FACTURA + Sum tva To mtotaltva + Index On proc_tva Tag procent + + loClient = loDate.oClient + loClient.cod_tara = ALLTRIM(NVL(loClient.cod_tara,'')) + IF EMPTY(loClient.cod_tara) + loClient.cod_tara = 'RO' + ENDIF + + llExtern = (loClient.cod_tara <> 'RO') + lFurnizorPlatitorTVA = (LEFT(UPPER(ALLTRIM(goFirma.cod_fiscal)),2) = 'RO') + lClientPlatitorTVA = (LEFT(UPPER(ALLTRIM(loClient.cod_fiscal)),2) = 'RO') + + mcomanda = "" + mincasat = 0 + mmoneda = Iif(loDate.in_valuta = 0, 'RON', Iif(!Empty(Nvl(loDate.cValuta, '')), Upper(Alltrim(loDate.cValuta)), 'RON')) + mmoneda = Iif(mmoneda = 'EURO', 'EUR', mmoneda) + +*!* mcodfiscal = Alltrim(Nvl(loClient.cod_fiscal, '')) + mtipfactura = loDate.tip_doc_394 && 'F', 'S', 'M', 'U', 'H' +*!* mtara = Alltrim(Nvl(loClient.cod_tara, 'RO')) +*!* mtiptert = Iif(loClient.id_cetatenie = 1, '', Iif(loClient.id_cetatenie = 2, 'I', 'E')) && 1 = RO, 2 = UE, 3 = NON-UE +*!* mtiptvacurent = Iif(m.lcTipTVA = 'LUNAR', 1, Iif(m.lcTipTVA = 'TRIMESTRIAL', 2, 1)) && 1 = lunar, 2 = trimestrial, 3 = anulare TVA + mtvai = loDate.tva_incasare + minf_suplm = '' + If !Inlist(mtipfactura, 'F', 'S', 'M', 'U', 'H') + AMESSAGEBOX( "Pentru acest document nu se genereaza factura electronica momentan.", 64, "Atentie...") + Return '' + Endif +* discount-ul are valoare negativa, il inmultesc cu -1 + Select C_IES_FORM + Calculate Cnt(), Sum(-1 * valftva) For discount = 1 To mliniireducere, mdiscounturi + Calculate Cnt() For cantitate < 0 To mliniistornare + mlinii = Reccount('C_IES_FORM') + mnrliniiavans = 0 && 419 + mtotalallowances = 0 + mtotalallowances = mtotalallowances + mdiscounturi + Select C_IES_FORM + Locate For taxare_inversa = 1 Or intracomunitar = 1 + llTaxareInversaSauIntracomunitar = Found() + +* nomenclator 5305: S=Standard rate,Z=Zero rated goods,E=Exempt from tax,AE=VAT Reverse charge,K=VAT exempt for EEA intra-community supply of goods and services,G=Free export item, tax not charged,O=Service outside scope of tax,L=Canary Islands general indirect tax,M=Tax for production, services and importation in Ceuta and Melilla + Select C_TVA_FACTURA + SCAN + SCATTER NAME loRec + lcExplicatie = '' + lcMotiv = '' + lcTip = This.GetTipTaxa(mtipfactura, loRec.intracomunitar, loRec.taxare_inversa, loRec.scutit, loRec.proc_tva, @lcExplicatie, @lcMotiv, loRec.expltva) + REPLACE tip WITH m.lcTip, explicatie WITH m.lcExplicatie, motiv WITH m.lcMotiv + +*!* Do Case +*!* Case intracomunitar = 1 +*!* Replace tip With 'K', explicatie With 'Livrare intracomunitara', motiv With 'VATEX-EU-IC' +*!* Case taxare_inversa = 1 +*!* Replace tip With 'AE', explicatie With 'Taxare inversa', motiv With 'VATEX-EU-AE' +*!* Case scutit = 1 +*!* Replace tip With 'E', explicatie With 'Scutit cu drept de deducere' +*!* Case mtipfactura = 'F' And proc_tva = 0 +*!* Replace tip With 'Z' +*!* Case mtipfactura = 'H' +*!* Replace tip With 'E', explicatie With 'Bunuri second-hand', motiv With 'VATEX-EU-F' +*!* Case mtipfactura = 'U' +*!* Replace tip With 'E', explicatie With 'Regim special agentii de turism', motiv With 'VATEX-EU-D' +*!* Otherwise +*!* Replace tip With 'S' +*!* Endcase + Endscan + +* Nu am accize. Introduc o linie cu valoare 0 +* Nu mai introduc o linie cu cota TVA = 0, pentru ca daca am penalitati cu cota TVA = 0, se duplica liniile cu cota TVA = 0 +*Insert Into C_TVA_FACTURA (proc_tva, tva, valoare, tip, explicatie, motiv) Values (0, 0, maccize, 'Z', 'Acciza', '') + + oxml = Createobject("msxml2.DOMDocument") + oxml.appendchild(oxml.createnode("PROCESSINGINSTRUCTION", "xml", "")) + oinvoice = oxml.appendchild(oxml.createelement("Invoice")) + oinvoice.setattribute("xmlns:cbc", "urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2") + oinvoice.setattribute("xmlns:udt", "urn:oasis:names:specification:ubl:schema:xsd:UnqualifiedDataTypes-2") + oinvoice.setattribute("xmlns:cac", "urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2") + oinvoice.setattribute("xmlns:ccts", "urn:un:unece:uncefact:documentation:2") + oinvoice.setattribute("xmlns", "urn:oasis:names:specification:ubl:schema:xsd:Invoice-2") + oinvoice.setattribute("xmlns:qdt", "urn:oasis:names:specification:ubl:schema:xsd:QualifiedDataTypes-2") + oinvoice.setattribute("xsi:schemaLocation", "urn:oasis:names:specification:ubl:schema:xsd:Invoice-2 http://docs.oasis-open.org/ubl/os-UBL-2.1/xsd/maindoc/UBL-Invoice-2.1.xsd") + oinvoice.setattribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance") + oinvoice.appendchild(oxml.createelement("cbc:UBLVersionID")) + oinvoice.lastchild.Text = "2.1" + oinvoice.appendchild(oxml.createelement("cbc:CustomizationID")) + oinvoice.lastchild.Text = "urn:cen.eu:en16931:2017#compliant#urn:efactura.mfinante.ro:CIUS-RO:1.0.1" + oinvoice.appendchild(oxml.createelement("cbc:ID")) + lcSerieAct = UPPER(Alltrim(XmlSpecialCharacters(RemoveCharacters(loDate.serie_act, .T.)))) + oinvoice.lastchild.Text = m.lcSerieAct + IIF(!EMPTY(m.lcSerieAct), ' ', '') + Alltrim(Str(loDate.nract, 30, 0)) + oinvoice.appendchild(oxml.createelement("cbc:IssueDate")) + oinvoice.lastchild.Text = Alltrim(Str(Year(loDate.dataact))) + "-" + Padl(Alltrim(Str(Month(loDate.dataact))), 2, "0") + "-" + Padl(Alltrim(Str(Day(loDate.dataact))), 2, "0") + If !Empty(Nvl(loDate.datascad, {})) + oinvoice.appendchild(oxml.createelement("cbc:DueDate")) + oinvoice.lastchild.Text = Alltrim(Str(Year(loDate.datascad))) + "-" + Padl(Alltrim(Str(Month(loDate.datascad))), 2, "0") + "-" + Padl(Alltrim(Str(Day(loDate.datascad))), 2, "0") + Endif + minvoicetype = "" + + If Type('loDate.tip_saft') = 'N' And !Empty(Nvl(loDate.tip_saft, 0)) + minvoicetype = Alltrim(Str(loDate.tip_saft)) + Else + Do Case + Case m.llRectificativa + minvoicetype = "384" + Case Alltrim(getnrfromstring(loClient.cod_fiscal)) == Alltrim(gofirma.codfiscalfro) + minvoicetype = "389" + Case mliniistornare = mlinii + minvoicetype = "380" + Otherwise + minvoicetype = "380" + Endcase + Endif + oinvoice.appendchild(oxml.createelement("cbc:InvoiceTypeCode")) + oinvoice.lastchild.Text = minvoicetype + + lcTextAditional = Alltrim(Nvl(loDate.text_aditional, '')) + If mtvai = 1 + lcTextAditional = m.lcTextAditional + Iif(!Empty(m.lcTextAditional), ' # ', '') + "TVA la incasare" + Endif + If m.llTaxareInversaSauIntracomunitar + lcTextAditional = m.lcTextAditional + Iif(!Empty(m.lcTextAditional), ' # ', '') + "Taxare inversa" + ENDIF + + IF !EMPTY(NVL(loDate.curs,0)) AND ATC('curs', m.lcTextAditional) = 0 + lcTextAditional = m.lcTextAditional + Iif(!Empty(m.lcTextAditional), ' # ', '') + "Curs: " + ALLTRIM(STR(loDate.curs, 10,4)) + " RON/" + STRTRAN(ALLTRIM(Nvl(loDate.cValuta, '')),'EURO', 'EUR',1,1,1) + ENDIF + + If !Empty(m.lcTextAditional) + oinvoice.appendchild(oxml.createelement("cbc:Note")) + lcText = Alltrim(Left(XmlSpecialCharacters(RemoveCharacters(m.lcTextAditional, .T.)), 300)) + oinvoice.lastchild.Text = m.lcText + Endif + oinvoice.appendchild(oxml.createelement("cbc:DocumentCurrencyCode")) + If loDate.in_valuta = 1 + oinvoice.lastchild.Text = m.mmoneda + Else + oinvoice.lastchild.Text = "RON" + Endif + oinvoice.appendchild(oxml.createelement("cbc:TaxCurrencyCode")) + oinvoice.lastchild.Text = "RON" + If loDate.tip = 3 And !Empty(Nvl(loDate.descriere, '')) + oorderreference = oinvoice.appendchild(oxml.createelement("cac:OrderReference")) + oorderreference.appendchild(oxml.createelement("cbc:ID")) + oorderreference.lastchild.Text = Alltrim(Left(XmlSpecialCharacters(RemoveCharacters(loDate.descriere, .T.)), 100)) + + Endif + If !Empty(Nvl(loDate.contract, '')) + ocontractreference = oinvoice.appendchild(oxml.createelement("cac:ContractDocumentReference")) + ocontractreference.appendchild(oxml.createelement("cbc:ID")) + ocontractreference.lastchild.Text = Alltrim(Left(XmlSpecialCharacters(RemoveCharacters(loDate.contract, .T.)), 100)) + ENDIF + + * Atasamente inglobate in xml + IF TYPE('pnAtasamenteEfactura') = 'N' AND m.pnAtasamenteEfactura > 0 + * pnAtasamente = 0: nimic, 1 : factura, 2: toate inclusiv factura, 3: toate fara factura + ldDataFactura = loDate.dataact + lnNumarFactura = loDate.nract + lcFacturaFile = GetPDFFacturaFile(m.ldDataFactura, m.lnNumarFactura) && d:\roa\pdf\20200402_12346_factura.pdf + lcScheletonFile = Strtran(lcFacturaFile, 'factura', '*', 1, 10, 1) && d:\roa\pdf\20200402_12346_*.pdf (_recapitulatia.pdf, _situatie_stationare.pdf, _declaratie_comandant.pdf) + lcDir = Addbs(Justpath(m.lcFacturaFile)) + lnFiles = Adir(laFiles, m.lcScheletonFile) + For lnFile = 1 To m.lnFiles + lcFileName = laFiles[m.lnFile, 1] + lcFile = m.lcDir + laFiles[m.lnFile, 1] + IF !FILE(m.lcFile) + LOOP + ENDIF + IF (m.pnAtasamenteEfactura = 1 AND '_factura'$ LOWER(m.lcFileName)) OR m.pnAtasamenteEfactura = 2 OR (m.pnAtasamenteEfactura = 3 AND !'_factura'$ LOWER(m.lcFileName)) + oAdditionalDocumentReference = oinvoice.appendchild(oxml.createelement("cac:AdditionalDocumentReference")) + oAdditionalDocumentReference.appendchild(oxml.createelement("cbc:ID")) + oAdditionalDocumentReference.lastchild.Text = Alltrim(Left(XmlSpecialCharacters(RemoveCharacters(m.lcFileName, .T.)), 50)) + oAdditionalDocumentReference.appendchild(oxml.createelement("cbc:DocumentDescription")) + oAdditionalDocumentReference.lastchild.Text = Alltrim(Left(XmlSpecialCharacters(RemoveCharacters(m.lcFileName, .T.)), 50)) + oAttachment = oAdditionalDocumentReference.appendchild(oxml.createelement("cac:Attachment")) + oEmbeddedDocumentBinaryObject = oAttachment.appendchild(oxml.createelement("cbc:EmbeddedDocumentBinaryObject")) + lcExtensie = LOWER(JUSTEXT(m.lcFileName)) + lcMimeType = GetMimeType(m.lcExtensie) && wwutils.prg + oEmbeddedDocumentBinaryObject.setattribute("mimeCode", m.lcMimeType) + oEmbeddedDocumentBinaryObject.setattribute("filename", m.lcFileName) + oEmbeddedDocumentBinaryObject.Text = STRCONV(FILETOSTR(m.lcFile),13) + ENDIF + Endfor + ENDIF && Type(pnAtasamenteEfactura) + + + osupplier = oinvoice.appendchild(oxml.createelement("cac:AccountingSupplierParty")) + oparty = osupplier.appendchild(oxml.createelement("cac:Party")) + If Empty(Nvl(gofirma.email, '')) + AMESSAGEBOX( ; + "Completati adresa de email a societatii in datele firmei." + ; + Chr(13) + ; + "Aceasta este necesara pentru primirea raspunsului facturii electronice.", ; + 48, ; + "Date incomplete..." ; + ) + Return '' + Endif + + oendpointid = oparty.appendchild(oxml.createelement("cbc:EndpointID")) + oendpointid.setattribute("schemeID", ; + "EM") + oendpointid.Text = Alltrim(gofirma.email) + + lcPartyIdentification = ALLTRIM(NVL(goFirma.reg_comert, '')) + If !Empty(m.lcPartyIdentification) + opartyidentification = oparty.appendchild(oxml.createelement("cac:PartyIdentification")) + oidparty = opartyidentification.appendchild(oxml.createelement("cbc:ID")) && BT-29 + oidparty.Text = m.lcPartyIdentification + Endif + oadresa = oparty.appendchild(oxml.createelement("cac:PostalAddress")) + If Empty(Nvl(gofirma.strada, '')) + AMESSAGEBOX( "Completati strada in datele firmei.", 48, "Date incomplete..." ) + Return '' + Endif + + oadresa.appendchild(oxml.createelement("cbc:StreetName")) + oadresa.lastchild.Text = Alltrim(Nvl(gofirma.strada, '')) + ' ' + Alltrim(Nvl(gofirma.numar, '')) + + If Empty(Nvl(gofirma.localitate, '')) + AMESSAGEBOX( "Completati localitatea in datele firmei.", 48, "Date incomplete..." ) + Return '' + Endif + If Empty(Nvl(gofirma.judet, '')) + AMESSAGEBOX( "Alegeti judetul in datele firmei.", 48, "Date incomplete..." ) + Return '' + * Nu mai completez sectorul, doar localitatea "BUCURESTI SECTORUL 1" +*!* Else +*!* If gofirma.judet = "BUCURESTI" And Empty(Nvl(gofirma.sector, '')) +*!* AMESSAGEBOX( "Completati sectorul in datele firmei.", 48, "Date incomplete..." ) +*!* Return '' +*!* Endif + Endif + oadresa.appendchild(oxml.createelement("cbc:CityName")) + If gofirma.judet = "BUCURESTI" + oadresa.lastchild.Text = ALLTRIM(STRTRAN(Upper(gofirma.localitate), "BUCURESTI SECTORUL ", "SECTOR")) + Else + oadresa.lastchild.Text = Alltrim(Upper(gofirma.localitate)) + Endif + mcodjudet = gofirma.indicativ_judet + + oadresa.appendchild(oxml.createelement("cbc:CountrySubentity")) + + oadresa.lastchild.Text = "RO-" + Alltrim(mcodjudet) + otara = oadresa.appendchild(oxml.createelement("cac:Country")) + otara.appendchild(oxml.createelement("cbc:IdentificationCode")) + otara.lastchild.Text = "RO" + + otaxe = oparty.appendchild(oxml.createelement("cac:PartyTaxScheme")) + otaxe.appendchild(oxml.createelement("cbc:CompanyID")) && BT-31 + otaxe.lastchild.Text = IIF(m.lFurnizorPlatitorTVA, "RO", "") + Alltrim(gofirma.codfiscalfro) + oschemataxe = otaxe.appendchild(oxml.createelement("cac:TaxScheme")) + IF m.lFurnizorPlatitorTVA + oschemataxe.appendchild(oxml.createelement("cbc:ID")) + oschemataxe.lastchild.Text = "VAT" + ENDIF + + oformalegala = oparty.appendchild(oxml.createelement("cac:PartyLegalEntity")) + oformalegala.appendchild(oxml.createelement("cbc:RegistrationName")) + lcText = Alltrim(Left(XmlSpecialCharacters(RemoveCharacters(gofirma.firma, .T.)), 200)) + oformalegala.lastchild.Text = m.lcText + + oidentificatorformalegala = oformalegala.appendchild(oxml.createelement("cbc:CompanyID")) && BT-30 + * Furnizor platitor TVA : Reg Comert, Furnizor neplatitor TVA : CIF + IF !Empty(Nvl(gofirma.reg_comert, '')) + oidentificatorformalegala.Text = Alltrim(gofirma.reg_comert) + ELSE + oidentificatorformalegala.Text = Alltrim(gofirma.codfiscalfro) + Endif + mdensoc = Upper(Alltrim(gofirma.firma)) + " " + + lcText = IIF(!EMPTY(NVL(gofirma.forma_juridica,'')), Alltrim(NVL(gofirma.forma_juridica,'')), '') + lcText = m.lcText + IIF(!EMPTY(m.lcText), " # ", "") + IIF(!EMPTY(NVL(gofirma.capital_soc_sub, 0)), "Capital social subscris: " + Alltrim(STR(gofirma.capital_soc_sub)), '') + lcText = m.lcText + IIF(!EMPTY(m.lcText), " # ", "") + IIF(!EMPTY(NVL(gofirma.capital_soc_var, 0)), "Capital social varsat: " + Alltrim(STR(gofirma.capital_soc_var)), '') + If !Empty(Nvl(gofirma.forma_juridica, '')) + oformalegala.appendchild(oxml.createelement("cbc:CompanyLegalForm")) && BT-33 + oformalegala.lastchild.Text = m.lcText + + ENDIF + + If !Empty(Nvl(gofirma.nume, '')) Or !Empty(Nvl(gofirma.prenume, '')) Or !Empty(Nvl(gofirma.email, '')) Or !Empty(Nvl(gofirma.telefon, '')) + ocontact = oparty.appendchild(oxml.createelement("cac:Contact")) + If !Empty(Nvl(gofirma.nume, '')) Or !Empty(Nvl(gofirma.prenume, '')) + ocontact.appendchild(oxml.createelement("cbc:Name")) + ocontact.lastchild.Text = Alltrim(Nvl(gofirma.nume, '')) + " " + Alltrim(Nvl(gofirma.prenume, '')) + Endif + If !Empty(Nvl(gofirma.telefon, '')) + ocontact.appendchild(oxml.createelement("cbc:Telephone")) + ocontact.lastchild.Text = Alltrim(gofirma.telefon) + Endif + If !Empty(Nvl(gofirma.email, '')) + ocontact.appendchild(oxml.createelement("cbc:ElectronicMail")) + ocontact.lastchild.Text = Alltrim(gofirma.email) + Endif + Endif + + ocustomer = oinvoice.appendchild(oxml.createelement("cac:AccountingCustomerParty")) + opartys = ocustomer.appendchild(oxml.createelement("cac:Party")) + If !Empty(Nvl(loClient.email_facturare, '')) + oendpointid = opartys.appendchild(oxml.createelement("cbc:EndpointID")) + oendpointid.setattribute("schemeID", "EM") + oendpointid.Text = Alltrim(loClient.email_facturare) + ENDIF + + * Registrul Comertului + lcPartyIdentification = IIF(!EMPTY(NVL(loClient.reg_comert,'')), ALLTRIM(NVL(loClient.reg_comert,'')), '') + If !Empty(m.lcPartyIdentification) + opartyidentifications = opartys.appendchild(oxml.createelement("cac:PartyIdentification")) + oidpartys = opartyidentifications.appendchild(oxml.createelement("cbc:ID")) && BT-46 + oidpartys.Text = m.lcPartyIdentification + Endif + oadresas = opartys.appendchild(oxml.createelement("cac:PostalAddress")) + + If Empty(Nvl(loClient.adresa, '')) + AMESSAGEBOX("Completati adresa clientului.", 48, "Date incomplete..." ) + Return '' + Endif + oadresas.appendchild(oxml.createelement("cbc:StreetName")) && adresa linia 1 + oadresas.lastchild.Text = Alltrim(Left(XmlSpecialCharacters(RemoveCharacters(loClient.adresa, .T.)), 150)) + + If Empty(Nvl(loClient.localitate, '')) + AMESSAGEBOX("Completati localitatea in adresa clientului.", 48, "Date incomplete..." ) + Return '' + Endif + oadresas.appendchild(oxml.createelement("cbc:CityName")) + If !m.llExtern AND Empty(Nvl(loClient.judet, '')) + AMESSAGEBOX("Alegeti judetul clientului.", 48, "Date incomplete..." ) + Return '' + Endif + If loClient.judet = "BUCURESTI" + msector = "" + lcLocalitateBuc = Upper(loClient.localitate) + lcLocalitateBuc = Alltrim(Strtran(m.lcLocalitateBuc, 'BUCURESTI', '')) + lcLocalitateBuc = Alltrim(Strtran(m.lcLocalitateBuc, 'SECTORUL ', 'SECTOR', 1, 1, 1)) && TREBUIE SA FIE "SECTOR1" in loc de "SECTORUL 1" + + If !"SECTOR" $ m.lcLocalitateBuc + AMESSAGEBOX("Alegeti un sector valid pentru Bucuresti in adresa clientului.", 48, "Atentie...") + Return '' + Endif + oadresas.lastchild.Text = m.lcLocalitateBuc + Else + oadresas.lastchild.Text = Alltrim(loClient.localitate) + ENDIF + IF !m.llExtern + oadresas.appendchild(oxml.createelement("cbc:CountrySubentity")) + oadresas.lastchild.Text = IIF(!m.llExtern, "RO-" + Alltrim(loClient.indicativ_judet), '') + ENDIF + otaras = oadresas.appendchild(oxml.createelement("cac:Country")) + otaras.appendchild(oxml.createelement("cbc:IdentificationCode")) + otaras.lastchild.Text = Iif(!Empty(Nvl(loClient.cod_tara, '')), Alltrim(loClient.cod_tara), "RO") + + If Alltrim(loClient.cod_tara) = 'RO' And !Empty(Nvl(loClient.cod_fiscal, '')) AND 'RO'$UPPER(loClient.cod_fiscal) And verifcf(loClient.cod_fiscal) + * clienti RO, platitori TVA, cu cod fiscal cu RO + otaxes = opartys.appendchild(oxml.createelement("cac:PartyTaxScheme")) + otaxes.appendchild(oxml.createelement("cbc:CompanyID")) + otaxes.lastchild.Text = "RO" + Alltrim(getnrfromstring(Nvl(loClient.cod_fiscal, ''))) && BT-48 + oschemataxes = otaxes.appendchild(oxml.createelement("cac:TaxScheme")) + oschemataxes.appendchild(oxml.createelement("cbc:ID")) + oschemataxes.lastchild.Text = "VAT" + ELSE + * clienti non-RO, cu cod fiscal + otaxes = opartys.appendchild(oxml.createelement("cac:PartyTaxScheme")) + IF !Empty(Nvl(loClient.cod_tara, '')) AND Alltrim(loClient.cod_tara) <> 'RO' AND !Empty(Nvl(loClient.cod_fiscal, '')) + otaxes.appendchild(oxml.createelement("cbc:CompanyID")) + otaxes.lastchild.Text = loClient.cod_tara + Alltrim(getnrfromstring(Nvl(loClient.cod_fiscal, ''))) + ENDIF + oschemataxes = otaxes.appendchild(oxml.createelement("cac:TaxScheme")) + oschemataxes.appendchild(oxml.createelement("cbc:ID")) + oschemataxes.lastchild.Text = "VAT" + Endif + oformalegalas = opartys.appendchild(oxml.createelement("cac:PartyLegalEntity")) + oformalegalas.appendchild(oxml.createelement("cbc:RegistrationName")) + oformalegalas.lastchild.Text = Alltrim(Nvl(loClient.denumireclient, '')) + + If !Empty(Nvl(loClient.cod_fiscal, '')) + oidentificatorformalegalas = oformalegalas.appendchild(oxml.createelement("cbc:CompanyID")) && BT-47 + IF Alltrim(loClient.cod_tara) = 'RO' + IF 'RO'$UPPER(NVL(loClient.cod_fiscal,'')) + * clienti RO, platitori TVA, pot sa pun Reg. Comert sau codul fiscal + oidentificatorformalegalas.Text = ALLTRIM(NVL(loClient.reg_comert,'')) + ELSE + * clienti RO, neplatitori TVA, se pune codul fiscal + oidentificatorformalegalas.Text = Alltrim(getnrfromstring(Nvl(loClient.cod_fiscal, ''))) + ENDIF + ELSE + oidentificatorformalegalas.setattribute("schemeID", "0028") && International Standard ISO 6523 https://docs.peppol.eu/poacc/billing/3.0/codelist/ICD/ + oidentificatorformalegalas.text = loClient.cod_tara + Alltrim(getnrfromstring(Nvl(loClient.cod_fiscal, ''))) + ENDIF + ELSE + IF EMPTY(NVL(loClient.cod_fiscal,'')) AND NVL(loClient.tip_persoana,0) = 2 + * clienti RO, persoane fizice, fara cod fiscal. se pune 0 de 13 ori + oidentificatorformalegalas = oformalegalas.appendchild(oxml.createelement("cbc:CompanyID")) + oidentificatorformalegalas.Text = REPLICATE('0',13) + ELSE + IF m.llExtern && Alltrim(loClient.cod_tara) = 'RO' + IF EMPTY(NVL(loClient.reg_comert, '')) + AMESSAGEBOX("Completati identificatorul clientului (Reg. Comert)!", 48, "Date incomplete..." ) + Return '' + ENDIF + oidentificatorformalegalas = oformalegalas.appendchild(oxml.createelement("cbc:CompanyID")) + oidentificatorformalegalas.text = ALLTRIM(NVL(loClient.reg_comert,'')) + ENDIF + ENDIF + Endif + mdensoc = Alltrim(Nvl(loClient.denumireclient, '')) + " " + mprefix = "" + msufix = "" + Do Case + Case mdensoc = "S.C. " Or mdensoc = "SC " + mprefix = "Societate comerciala" + Case mdensoc = "P.F. " Or mdensoc = "PF " + mprefix = "Persoana fizica" + Case mdensoc = "P.F.A. " Or mdensoc = "PFA " + mprefix = "Persoana fizica autorizata" + Case mdensoc = "A.F. " Or mdensoc = "AF " + mprefix = "Asociatie familiala" + Endcase + Do Case + Case " S.R.L." $ mdensoc ; + .Or. " SRL " $ mdensoc + msufix = "Societate cu raspundere limitata" + Case " S.A." $ mdensoc .Or. ; + " SA " $ mdensoc + msufix = "Societate pe actiuni" + Endcase + If !Empty(mprefix) + oformalegalas.appendchild(oxml.createelement("cbc:CompanyLegalForm")) + oformalegalas.lastchild.Text = mprefix + Endif + If !Empty(Nvl(loClient.telefon, '')) Or !Empty(Nvl(loClient.email_facturare, '')) + ocontacts = opartys.appendchild(oxml.createelement("cac:Contact")) +*!* If !EMPTY(C_IES_FORM.delegat) +*!* ocontacts.appendchild(oxml.createelement("cbc:Name")) +*!* ocontacts.lastchild.Text = ALLTRIM(C_IES_FORM.delegat) +*!* Endif + If !Empty(Nvl(loClient.telefon, '')) + ocontacts.appendchild(oxml.createelement("cbc:Telephone")) + ocontacts.lastchild.Text = Alltrim(loClient.telefon) + Endif + If !Empty(Nvl(loClient.email_facturare, '')) + ocontacts.appendchild(oxml.createelement("cbc:ElectronicMail")) + ocontacts.lastchild.Text = Alltrim(loClient.email_facturare) + Endif + Endif + + * la adresa de livrare, daca exista in xml, trebuie completata neaparat strada, nu numai judetul si localitatea + If !Empty(Nvl(loClient.adresa_livrare, '')) + odelivery = oinvoice.appendchild(oxml.createelement("cac:Delivery")) + odeliverylocation = odelivery.appendchild(oxml.createelement("cac:DeliveryLocation")) + oadresalivrare = odeliverylocation.appendchild(oxml.createelement("cac:Address")) + IF EMPTY(Nvl(loClient.stradal, '')) + AMESSAGEBOX( "Completati strada in adresa de livrare a clientului!", 48, "Atentie...") + Return '' + ENDIF + oadresalivrare.appendchild(oxml.createelement("cbc:StreetName")) + oadresalivrare.lastchild.Text = Alltrim(Nvl(loClient.stradal, '')) + + oadresalivrare.appendchild(oxml.createelement("cbc:CityName")) + If Empty(Nvl(loClient.localitatel, '')) + AMESSAGEBOX( "Alegeti localitatea din adresa de livrare.", 48, "Atentie...") + Return '' + Endif + If Empty(Nvl(loClient.indicativ_judetl, '')) + AMESSAGEBOX( "Alegeti judetul din adresa de livrare.", 48, "Atentie...") + Return '' + Endif + If loClient.judetl = "BUCURESTI" + msector = "" + lcLocalitateBuc = Upper(loClient.localitatel) + lcLocalitateBuc = Alltrim(Strtran(m.lcLocalitateBuc, 'BUCURESTI', '')) + lcLocalitateBuc = Alltrim(Strtran(m.lcLocalitateBuc, 'SECTORUL ', 'SECTOR', 1, 1, 1)) && TREBUIE SA FIE "SECTOR1" in loc de "SECTORUL 1" + + If !"SECTOR" $ m.lcLocalitateBuc + AMESSAGEBOX( "Alegeti un sector valid pentru Bucuresti, in adresa de livrare.", 48, "Atentie...") + Return '' + Endif + + oadresalivrare.lastchild.Text = m.lcLocalitateBuc + Else + oadresalivrare.lastchild.Text = Alltrim(loClient.localitatel) + Endif + oadresalivrare.appendchild(oxml.createelement("cbc:CountrySubentity")) + oadresalivrare.lastchild.Text = "RO-" + Alltrim(loClient.indicativ_judet) + otaralivrare = oadresalivrare.appendchild(oxml.createelement("cac:Country")) + otaralivrare.appendchild(oxml.createelement("cbc:IdentificationCode")) + otaralivrare.lastchild.Text = "RO" + Endif && adresa_livrare + + +* Conturi IBAN instructiune plata + For lnCont = 1 To 10 + lcCont = Alltrim(Nvl(Evaluate('goFirma.cont_banca' + Alltrim(Str(m.lnCont))), '')) + lcBanca = Alltrim(Nvl(Evaluate('goFirma.banca' + Alltrim(Str(m.lnCont))), '')) + + If !Empty(Nvl(m.lcCont, '')) + oPaymentMeans = oinvoice.appendchild(oxml.createelement("cac:PaymentMeans")) + oPaymentMeansCode = oPaymentMeans.appendchild(oxml.createelement("cbc:PaymentMeansCode")) + oPaymentMeansCode.Text = '42' && virament bancar + oPayeeFinancialAccount = oPaymentMeans.appendchild(oxml.createelement("cac:PayeeFinancialAccount")) + oPayeeFinancialAccountId = oPayeeFinancialAccount.appendchild(oxml.createelement("cbc:ID")) + oPayeeFinancialAccountId.Text = m.lcCont && cont IBAN + oPayeeFinancialAccountName = oPayeeFinancialAccount.appendchild(oxml.createelement("cbc:Name")) + oPayeeFinancialAccountName.Text = m.lcBanca && nume cont + Endif + Endfor + + Select C_IES_FORM + If mliniireducere > 0 + SELECT SUM(-1*valftva) as valftva, proc_tva ; + FROM C_IES_FORM ; + WHERE discount = 1 ; + GROUP BY proc_tva ; + ORDER BY proc_tva ; + INTO CURSOR cDiscounturiTemp + + Select cDiscounturiTemp + SCAN + lnValftva = cDiscounturiTemp.valftva + lnProcTva = cDiscounturiTemp.proc_tva + + oallowancecharge = oinvoice.appendchild(oxml.createelement("cac:AllowanceCharge")) + oallowancecharge.appendchild(oxml.createelement("cbc:ChargeIndicator")) + oallowancecharge.lastchild.Text = "false" + oallowancecharge.appendchild(oxml.createelement("cbc:AllowanceChargeReasonCode")) + oallowancecharge.lastchild.Text = "95" + oallowancecharge.appendchild(oxml.createelement("cbc:AllowanceChargeReason")) + oallowancecharge.lastchild.Text = "Discount" + odocallowancecharge = oallowancecharge.appendchild(oxml.createelement("cbc:Amount")) && BT-92 + odocallowancecharge.setattribute("currencyID", "RON") + odocallowancecharge.Text = Alltrim(Str(m.lnValftva, 15, 2)) + otaxcategoryallowance = oallowancecharge.appendchild(oxml.createelement("cac:TaxCategory")) + otaxcategoryallowance.appendchild(oxml.createelement("cbc:ID")) + Select tip From ; + C_TVA_FACTURA ; + Where proc_tva = (m.lnProcTva - 1) * 100 ; + Into Array agettipcota + otaxcategoryallowance.lastchild.Text = Alltrim(agettipcota(1)) + otaxcategoryallowance.appendchild(oxml.createelement("cbc:Percent")) + otaxcategoryallowance.lastchild.Text = Alltrim(Str((m.lnProcTva - 1) * 100, 2, 0)) + otaxschemeallowance = otaxcategoryallowance.appendchild(oxml.createelement("cac:TaxScheme")) + otaxschemeallowance.appendchild(oxml.createelement("cbc:ID")) + otaxschemeallowance.lastchild.Text = "VAT" + ENDSCAN + + USE IN (SELECT('cDiscounturiTemp')) + Endif + If maccize <> 0 + oallowancecharge = oinvoice.appendchild(oxml.createelement("cac:AllowanceCharge")) + oallowancecharge.appendchild(oxml.createelement("cbc:ChargeIndicator")) + oallowancecharge.lastchild.Text = "true" + oallowancecharge.appendchild(oxml.createelement("cbc:AllowanceChargeReason")) + oallowancecharge.lastchild.Text = "Acciza" + odocallowancecharge = oallowancecharge.appendchild(oxml.createelement("cbc:Amount")) + odocallowancecharge.setattribute("currencyID", "RON") + odocallowancecharge.Text = Alltrim(Str(maccize, 15, 2)) + otaxcategorycharge = oallowancecharge.appendchild(oxml.createelement("cac:TaxCategory")) + otaxcategorycharge.appendchild(oxml.createelement("cbc:ID")) + otaxcategorycharge.lastchild.Text = "Z" + otaxcategorycharge.appendchild(oxml.createelement("cbc:Percent")) + otaxcategorycharge.lastchild.Text = "0" + otaxschemeallowance = otaxcategorycharge.appendchild(oxml.createelement("cac:TaxScheme")) + otaxschemeallowance.appendchild(oxml.createelement("cbc:ID")) + otaxschemeallowance.lastchild.Text = "VAT" + ENDIF + + If Reccount("C_TVA_FACTURA") > 0 + otaxtotal = oinvoice.appendchild(oxml.createelement("cac:TaxTotal")) + Calculate Sum(tva) To mtvatotal In C_TVA_FACTURA + + ototal = otaxtotal.appendchild(oxml.createelement("cbc:TaxAmount")) + ototal.setattribute("currencyID", mmoneda) + ototal.Text = Alltrim(Str(mtvatotal, 15, 2)) + Select C_TVA_FACTURA + Set Order To procent + Scan + otaxablesubtotal = otaxtotal.appendchild(oxml.createelement("cac:TaxSubtotal")) + osubtotal = otaxablesubtotal.appendchild(oxml.createelement("cbc:TaxableAmount")) + osubtotal.setattribute("currencyID", mmoneda) + osubtotal.Text = Alltrim(Str(C_TVA_FACTURA.valoare, 15, 2)) + osubtotaltaxa = otaxablesubtotal.appendchild(oxml.createelement("cbc:TaxAmount")) + osubtotaltaxa.setattribute("currencyID", mmoneda) + osubtotaltaxa.Text = Alltrim(Str(C_TVA_FACTURA.tva, 15, 2)) + otaxcategorytotals = otaxablesubtotal.appendchild(oxml.createelement("cac:TaxCategory")) + otaxcategorytotals.appendchild(oxml.createelement("cbc:ID")) + otaxcategorytotals.lastchild.Text = Alltrim(C_TVA_FACTURA.tip) + otaxcategorytotals.appendchild(oxml.createelement("cbc:Percent")) + otaxcategorytotals.lastchild.Text = Alltrim(Str(C_TVA_FACTURA.proc_tva, 2, 0)) +* eroare regula: BR_Z_10: O detaliere a TVA (BG-23) cu codul categoriei de TVA (BT-118) Cota zero trebuie sa nu aiba un cod al motivului de exceptare de la TVA (BT-121) sau un text cu motivul exceptarii de la TVA (BT-120). + + If !Empty(C_TVA_FACTURA.motiv) AND (INLIST(Alltrim(C_TVA_FACTURA.tip), 'K', 'AE') OR C_TVA_FACTURA.proc_tva <> 0) + * BT 121 CODUL MOTIVULUI SCUTIRII PENTRU LIVRARI INTRACOMUNITARE K (vatex-eu-k) SAU TAXARE INVERSA AE (vatex-eu-ae) + otaxcategorytotals.appendchild(oxml.createelement("cbc:TaxExemptionReasonCode")) + otaxcategorytotals.lastchild.Text = Alltrim(C_TVA_FACTURA.motiv) + Endif + If !Empty(C_TVA_FACTURA.explicatie) && And C_TVA_FACTURA.proc_tva <> 0 && se pare ca la ultima versiune de verificare, cota 0 trebuie sa aiba cod de scutire sau text scutire + otaxcategorytotals.appendchild(oxml.createelement("cbc:TaxExemptionReason")) + otaxcategorytotals.lastchild.Text = Alltrim(C_TVA_FACTURA.explicatie) + Endif + otaxschemetotals = otaxcategorytotals.appendchild(oxml.createelement("cac:TaxScheme")) + otaxschemetotals.appendchild(oxml.createelement("cbc:ID")) + otaxschemetotals.lastchild.Text = "VAT" + Endscan + + Select C_IES_FORM + Locate + If mmoneda <> "RON" + otaxtotal = oinvoice.appendchild(oxml.createelement("cac:TaxTotal")) + ototal = otaxtotal.appendchild(oxml.createelement("cbc:TaxAmount")) + ototal.setattribute("currencyID", "RON") + ototal.Text = Alltrim(Str(Round(mtvatotal * loDate.Curs, 2), 15, 2)) + Endif + Endif && Reccount("C_TVA_FACTURA") > 0 + + Select C_IES_FORM + Sum valftva To mtotalnet For discount = 0 + + Locate + mtotalnetliniifactura = mtotalnet + + mtotalnet = mtotalnet + mtotalcharges - mtotalallowances + mtotalbrut = mtotalnet + mtotaltva + omonetarytotal = oinvoice.appendchild(oxml.createelement("cac:LegalMonetaryTotal")) + ototalnet = omonetarytotal.appendchild(oxml.createelement("cbc:LineExtensionAmount")) && BT-106 + ototalnet.setattribute("currencyID", mmoneda) + ototalnet.Text = Alltrim(Str(mtotalnetliniifactura, 15, 2)) + ototalnetfaratva = omonetarytotal.appendchild(oxml.createelement("cbc:TaxExclusiveAmount")) && BT-109 + ototalnetfaratva.setattribute("currencyID", mmoneda) + ototalnetfaratva.Text = Alltrim(Str(mtotalnet, 15, 2)) + ototalbrut = omonetarytotal.appendchild(oxml.createelement("cbc:TaxInclusiveAmount")) && BT-112 + ototalbrut.setattribute("currencyID", mmoneda) + ototalbrut.Text = Alltrim(Str(mtotalbrut, 15, 2)) + If mtotalallowances <> 0 + ototaldeduceri = omonetarytotal.appendchild(oxml.createelement("cbc:AllowanceTotalAmount")) && BT-107 + ototaldeduceri.setattribute("currencyID", mmoneda) + ototaldeduceri.Text = Alltrim(Str(mtotalallowances, 15, 2)) + Endif + If mtotalcharges <> 0 + ototaltaxe = omonetarytotal.appendchild(oxml.createelement("cbc:ChargeTotalAmount")) && BT-108 + ototaltaxe.setattribute("currencyID", mmoneda) + ototaltaxe.Text = Alltrim(Str(mtotalcharges, 15, 2)) + Endif + If mincasat <> 0 + ototalincasat = omonetarytotal.appendchild(oxml.createelement("cbc:PrepaidAmount")) + ototalincasat.setattribute("currencyID", mmoneda) + ototalincasat.Text = Alltrim(Str(mincasat, 15, 2)) + Endif + ototalplata = omonetarytotal.appendchild(oxml.createelement("cbc:PayableAmount")) + ototalplata.setattribute("currencyID", mmoneda) + ototalplata.Text = Alltrim(Str(mtotalbrut - mincasat, 15, 2)) + + Select C_IES_FORM + Scan For discount = 0 + SCATTER NAME loRec + + * Discount + lnValftva = valftva + lnValftvai = valftvai + lnValDisc = valftvai-valftva + lnPretftva = pretftva + lnPretftvai = pretftvai + lnDiscftva = pretftvai-pretftva + lnProcDisc = proc_disc + + oinvoiceline = oinvoice.appendchild(oxml.createelement("cac:InvoiceLine")) + oinvoiceline.appendchild(oxml.createelement("cbc:ID")) + oinvoiceline.lastchild.Text = Alltrim(Str(Recno(), 4, 0)) + + lcText = '' + lcTextDescriere = '' + lcTextNota = '' + IF !EMPTY(ALLTRIM(NVL(C_IES_FORM.explicatie,''))) + lcText = XmlSpecialCharacters(RemoveCharacters(Alltrim(C_IES_FORM.explicatie), .T.)) + lcTextDescriere = SUBSTR(m.lcText, 1, 200) && item.description, maxim 200 caractere + lcTextNota = ALLTRIM(SUBSTR(m.lcText, 201, 300)) && line.note, maxim 300 caractere + ENDIF + + If !EMPTY(m.lcTextNota) + oinvoiceline.appendchild(oxml.createelement("cbc:Note")) + oinvoiceline.lastchild.Text = m.lcTextNota + ENDIF + + mum = Iif(Empty(Nvl(cod_um_iso, "")), "H87", Alltrim(cod_um_iso)) + oum = oinvoiceline.appendchild(oxml.createelement("cbc:InvoicedQuantity")) + oum.setattribute("unitCode", mum) + oum.Text = Alltrim(Str(C_IES_FORM.cantitate, 15, 3)) + oamount = oinvoiceline.appendchild(oxml.createelement("cbc:LineExtensionAmount")) && BT-131 + oamount.setattribute("currencyID", mmoneda) + oamount.Text = Alltrim(Str(C_IES_FORM.valftva, 15, 2)) +*!* If _Tally > 0 +*!* oorderlinereference = oinvoiceline.appendchild(oxml.createelement("cac:OrderLineReference")) +*!* oorderlinereference.appendchild(oxml.createelement("cbc:LineID")) +*!* oorderlinereference.lastchild.Text = ALLTRIM(agetcomenzilinie(1, 2)) + "/" + ALLTRIM(Dtoc(agetcomenzilinie(1, 3))) +*!* Endif + + * Daca am discount (valftvai valoare de lista <> valftva valoare factura) +*!* +*!* false +*!* 95 +*!* 35.00 +*!* 17.33 +*!* 49.52 +*!* + IF TYPE('gnEFACTURA_XML_DISC_PLISTA_LINIE') = 'N' AND m.gnEFACTURA_XML_DISC_PLISTA_LINIE = 1 AND m.lnPretftvai > m.lnPretftva + oAllowance = oinvoiceline.appendchild(oxml.createelement("cac:AllowanceCharge")) + + oAllowance.appendchild(oxml.createelement("cbc:ChargeIndicator")) + oAllowance.lastchild.Text = 'false' + + oAllowance.appendchild(oxml.createelement("cbc:AllowanceChargeReasonCode")) + oAllowance.lastchild.Text = '95' + + oAllowance.appendchild(oxml.createelement("cbc:MultiplierFactorNumeric")) + oAllowance.lastchild.Text = ALLTRIM(STR(m.lnProcDisc,5,2)) + + oAmount = oAllowance.appendchild(oxml.createelement("cbc:Amount")) + oAmount.setattribute("currencyID", mmoneda) + oAmount.Text = Alltrim(Str(m.lnValDisc, 15, 2)) + + oBaseAmount = oAllowance.appendchild(oxml.createelement("cbc:BaseAmount")) + oBaseAmount.setattribute("currencyID", mmoneda) + oBaseAmount.Text = Alltrim(Str(m.lnValftvai, 15, 2)) + ENDIF + + oitem = oinvoiceline.appendchild(oxml.createelement("cac:Item")) + If !Empty(m.lcTextDescriere) + oitem.appendchild(oxml.createelement("cbc:Description")) + oitem.lastchild.Text = m.lcTextDescriere + Endif + If !Empty(C_IES_FORM.denumire) + oitem.appendchild(oxml.createelement("cbc:Name")) + lcText = LEFT(XmlSpecialCharacters(RemoveCharacters(Alltrim(C_IES_FORM.denumire), .T.)),100) && maxim 100 caractere + oitem.lastchild.Text = m.lcText + Endif + If !Empty(Nvl(C_IES_FORM.codmatc, '')) + obuyeritem = oitem.appendchild(oxml.createelement("cac:BuyersItemIdentification")) + obuyeritem.appendchild(oxml.createelement("cbc:ID")) + obuyeritem.lastchild.Text = Alltrim(C_IES_FORM.codmatc) + Endif + If !Empty(Nvl(C_IES_FORM.codmat, '')) + oselleritem = oitem.appendchild(oxml.createelement("cac:SellersItemIdentification")) + oselleritem.appendchild(oxml.createelement("cbc:ID")) + oselleritem.lastchild.Text = Alltrim(C_IES_FORM.codmat) + Endif + + lcCodBare = GetCodBareByIdArticol(C_IES_FORM.id_articol) + If !Empty(m.lcCodBare) + ostandarditem = oitem.appendchild(oxml.createelement("cac:StandardItemIdentification")) + oidstandard = ostandarditem.appendchild(oxml.createelement("cbc:ID")) + oidstandard.setattribute("schemeID", "0160") + oidstandard.Text = Alltrim(m.lcCodBare) + + oclassificationcodbare = oitem.appendchild(oxml.createelement("cac:CommodityClassification")) + ocodbare = oclassificationcodbare.appendchild(oxml.createelement("cbc:ItemClassificationCode")) + ocodbare.setattribute("listID", "EN") + ocodbare.Text = Left(Alltrim(m.lcCodBare), 13) + Endif + + If !Empty(Nvl(C_IES_FORM.serie, '')) + oclassificationlot = oitem.appendchild(oxml.createelement("cac:CommodityClassification")) + olot = oclassificationlot.appendchild(oxml.createelement("cbc:ItemClassificationCode")) + olot.setattribute("listID", "BB") + olot.Text = Alltrim(Left(XmlSpecialCharacters(RemoveCharacters(C_IES_FORM.serie, .T.)), 50)) + Endif + + If !Empty(Nvl(C_IES_FORM.codcpv, '')) + oclassificationnc = oitem.appendchild(oxml.createelement("cac:CommodityClassification")) + oclassificationstandardidnc = oclassificationnc.appendchild(oxml.createelement("cbc:ItemClassificationCode")) + oclassificationstandardidnc.setattribute("listID", "STI") + oclassificationstandardidnc.Text = Alltrim(C_IES_FORM.codcpv) + Endif + + If !Empty(Nvl(C_IES_FORM.codnc8, '')) + oclassificationnc = oitem.appendchild(oxml.createelement("cac:CommodityClassification")) + oclassificationstandardidnc = oclassificationnc.appendchild(oxml.createelement("cbc:ItemClassificationCode")) + oclassificationstandardidnc.setattribute("listID", "TSP") + oclassificationstandardidnc.Text = Alltrim(C_IES_FORM.codnc8) + Endif + + oitemtaxcategory = oitem.appendchild(oxml.createelement("cac:ClassifiedTaxCategory")) +*!* Select tip From C_TVA_FACTURA ; +*!* Where proc_tva = (C_IES_FORM.proc_tva - 1) * 100 ; +*!* Into Array agettipcota +*!* lcTip = Alltrim(agettipcota(1)) + + lcTip = This.GetTipTaxa(mtipfactura, loRec.intracomunitar, loRec.taxare_inversa, loRec.scutit, (loRec.proc_tva -1)*100) + + oitemtaxcategory.appendchild(oxml.createelement("cbc:ID")) + oitemtaxcategory.lastchild.Text = m.lcTip + oitemtaxcategory.appendchild(oxml.createelement("cbc:Percent")) + oitemtaxcategory.lastchild.Text = Alltrim(Str((C_IES_FORM.proc_tva - 1) * 100, 2, 0)) + oitemtaxscheme = oitemtaxcategory.appendchild(oxml.createelement("cac:TaxScheme")) + oitemtaxscheme.appendchild(oxml.createelement("cbc:ID")) + oitemtaxscheme.lastchild.Text = "VAT" + oitemprice = oinvoiceline.appendchild(oxml.createelement("cac:Price")) + oitemamount = oitemprice.appendchild(oxml.createelement("cbc:PriceAmount")) + oitemamount.setattribute("currencyID", mmoneda) + oitemamount.Text = Alltrim(Str(C_IES_FORM.pretftva, 15, precizie_max_pret_vz)) + + * Discount unitar pret +*!* +*!* false +*!* 8.67 +*!* 24.76 +*!* + IF TYPE('gnEFACTURA_XML_DISC_PLISTA_ART') = 'N' AND m.gnEFACTURA_XML_DISC_PLISTA_ART = 1 AND m.lnPretftvai > m.lnPretftva + oAllowance = oitemprice.appendchild(oxml.createelement("cac:AllowanceCharge")) + + oAllowance.appendchild(oxml.createelement("cbc:ChargeIndicator")) + oAllowance.lastchild.Text = 'false' + + oAmount = oAllowance.appendchild(oxml.createelement("cbc:Amount")) + oAmount.setattribute("currencyID", mmoneda) + oAmount.Text = Alltrim(Str(ABS(m.lnDiscftva), 15, 4)) + + oBaseAmount = oAllowance.appendchild(oxml.createelement("cbc:BaseAmount")) + oBaseAmount.setattribute("currencyID", mmoneda) + oBaseAmount.Text = Alltrim(Str(ABS(m.lnPretftvai), 15, 4)) + ENDIF + + Endscan + + + Wait Window 'Salvare fisier XML...' Nowait + + lcCaleFisier = GetPdfPath("Efactura") + + lcNumeClient = WindowsSpecialCharacters(Nvl(loClient.denumireclient, ''), "_") + lcNumeClient = Strtran(Alltrim(m.lcNumeClient), [ ], [_], 1, 100, 1) + lcNumeClient = ALLTRIM(LEFT(WindowsSpecialCharacters(m.lcNumeClient, "_"), 70)) + + lcNumeFisier = 'efactura_' + Dtos(loDate.dataact) + '_' + Alltrim(Str(loDate.nract)) + '_' + m.lcNumeClient + + lcFileName = m.lcCaleFisier + lcNumeFisier + '.xml' + + If File(m.lcFileName) + Delete File (m.lcFileName) + Endif + +* scriu fisierul xml + oxml.Save(m.lcFileName) + If File(m.lcFileName) + Return m.lcFileName + Else + AMESSAGEBOX('Nu s-a putut salva fisierul ' + m.lcFileName, 0 + 48, _Screen.Caption) + Return '' + Endif + + Endproc && XMLEFactura + + + * GetTipTaxa: intoarce Tip Taxa + * tcExplicatie, tcMotiv pentru tip E scutit: optional OUT + * lcTip = This.GetTipTaxa('F', 1, 0, 0, 0, @lcExplicatie, @lcMotiv, lcExplicatieTVA) + PROCEDURE GetTipTaxa + LPARAMETERS tcTipFactura, tnIntracomunitar, tnTaxareInversa, tnScutit, tnProcTva, tcExplicatie, tcMotiv, tcExplicatieTVA + * tcExplicatieTVA (optional): pentru completarea tcExplicatie pentru Scutit, ca sa nu mai fie la toate "scutit cu drept de deducere" + + lcTip = '' + tcExplicatie = '' + tcMotiv = '' + lcTipFactura = UPPER(ALLTRIM(NVL(m.tcTipFactura, ''))) + llIntracomunitar = (tnIntracomunitar = 1) + llTaxareInversa = (tnTaxareInversa = 1) + llScutit = (tnScutit = 1) + lnProcTva = m.tnProcTva + + Do Case + Case m.llIntracomunitar + lcTip = 'K' + tcExplicatie = 'Livrare intracomunitara' + tcMotiv = 'VATEX-EU-IC' + Case m.llTaxareInversa + lcTip = 'AE' + tcExplicatie = 'Taxare inversa' + tcMotiv = 'VATEX-EU-AE' + Case m.llScutit + lcTip = 'E' + tcExplicatie = IIF(!EMPTY(m.tcExplicatieTVA) and TYPE('tcExplicatieTVA') = 'C', m.tcExplicatieTVA, 'Scutit cu drept de deducere') + Case m.lcTipFactura = 'F' And m.lnProcTva = 0 + lcTip = 'Z' + Case m.lcTipFactura = 'H' + lcTip = 'E' + tcExplicatie = 'Bunuri second-hand' + tcMotiv = 'VATEX-EU-F' + Case m.lcTipFactura = 'U' + lcTip = 'E' + tcExplicatie = 'Regim special agentii de turism' + tcMotiv = 'VATEX-EU-D' + Otherwise + lcTip = 'S' + Endcase + + RETURN m.lcTip + ENDPROC && GetTipTaxa +********* +******************************* +* Validare eFactura online ANAF sau offline DukIntegrator +* OUT PARAMETER: mesaj eroare +* RETURN: .T. VALID, .F. INVALID +******************************* + Procedure ValidareEFactura + Lparameters tcFileName, tcMesaj, tlValidareEFacturaOnline + + Local llValid + + llValid = .F. + +* tlOnline: (implicit .F.) .T. daca se valideaza xml eFactura Online + If Pcount() < 3 Or !m.tlValidareEFacturaOnline + llValid = This.ValidareEFacturaDUK(tcFileName, @tcMesaj) + Else + llValid = This.ValidareEFacturaANAF(tcFileName, @tcMesaj) + Endif + Return m.llValid + Endproc + + Procedure ValidareEFacturaDUK + Lparameters tcFileName, tcMesaj +* tcMesaj: OUT mesaj daca validarea este silentioasa + + Local lcFileName, lcFisierRaspuns, lnTimes + Local lcComunPath, lcConfigDir, lcParams, lcValidator, llOk, lcMesaj + lcMesaj = '' + lcFileName = m.tcFileName + llOk = .F. + llSilentios = This.lSilentios + + Wait Window 'Validare fisier ' + m.lcFileName Nowait + lcFisierRaspuns = Forceext(m.lcFileName, 'txt') + If File(m.lcFisierRaspuns) + Delete File (m.lcFisierRaspuns) + Endif + +* validez xml + lcComunPath = m.gcBasePath + Iif(gcAppName = "CONCONT", "COMUNCONTAFIN\", "COMUNROA\") + lcValidator = m.lcComunPath + [dist_efactura\DUKIntegrator.jar] && ROA\COMUNROA\DIST_EFACTURA\DUKIntegrator.jar + If !File(m.lcValidator) + open_default_app('https://mfinante.gov.ro/web/efactura/informatii-tehnice') + AMESSAGEBOX('Nu exista fisierul: "' + m.lcValidator + '"!' + Chr(13) + Chr(10) + ; + 'Pentru validare xml Efactura, instalati validatorul Efactura in directorul: "' + Justpath(m.lcValidator) + '"', 0 + 48, _Screen.Caption) + Else + lcConfigDir = m.lcComunPath + [dist_efactura\config] + lcParams = ' -c "' + m.lcConfigDir + '" -v FACT1 "' + m.lcFileName + '" "' + m.lcFisierRaspuns + '"' + + open_default_app(m.lcValidator, m.lcParams) + + lnTimes = 0 + Do While lnTimes <= 10 And !File(m.lcFisierRaspuns) + lnTimes = lnTimes + 1 + Wait Window Timeout 1 "" + Enddo + If File(m.lcFisierRaspuns) + If Lower(Filetostr(m.lcFisierRaspuns)) = "ok" + lcMesaj = "Factura este valida. O puteti ncarca prin SPV, la sectiunea 'Factura electronica', cu optiunea de sintaxa XML - UBL" + Chr(13) + Chr(10) + m.lcFileName + If !m.llSilentios + AMESSAGEBOX(m.lcMesaj, 0 + 48, _Screen.Caption) + Endif + Delete File(m.lcFisierRaspuns) + llOk = .T. + Else + lcMesaj = 'Validare cu erori fisier: ' + m.lcFileName + + If !m.llSilentios + AMESSAGEBOX(m.lcMesaj, 0 + 48, _Screen.Caption) + open_default_app(m.lcFisierRaspuns) + Endif + lcMesaj = m.lcMesaj + + Chr(13) + Chr(10) + ; + 'Fisier raspuns: ' + m.lcFisierRaspuns + Chr(13) + Chr(10) + Chr(13) + Chr(10) ; + + Filetostr(m.lcFisierRaspuns) + Chr(13) + Chr(10) + Chr(13) + Chr(10) + Endif + Else + lcMesaj = 'Nu s-a creat fisierul raspuns ' + m.lcFisierRaspuns + ' dupa validare!' + If !m.llSilentios + AMESSAGEBOX(m.lcMesaj, 0 + 48, _Screen.Caption) + Endif + Endif + Endif + +*** deschid explorer in directorul de export + If !m.llSilentios + open_default_app(Justpath(m.lcFileName)) + Endif + + tcMesaj = m.lcMesaj + Return m.llOk + Endproc && ValidareEFacturaDUK + + Procedure ValidareEFacturaANAF + Lparameters tcFileName, tcMesaj +* tcMesaj: OUT mesaj daca validarea este silentioasa +* lReturn: .T. valid, .F. invalid + Local loReturn, llValid + Local loHTTP As 'winHTTP.winHTTPrequest.5.1' + Local lcFileName, lcFisierRaspuns, lcMesaj, lcSend, lcServer, lcStare, llOk, llSilentios, llSucces + Local lnMesaj, lnMesaje, loJson, loMessage, loEx as Exception, lcToken + + llValid = .F. + lcMesaj = '' + lcFileName = m.tcFileName + llOk = .F. + llSilentios = This.lSilentios + lcMesaj = '' + lcToken = This.cToken + + loReturn = Createobject("empty") + AddProperty(loReturn, "lSucces", .F.) + AddProperty(loReturn, "cFile", '') + AddProperty(loReturn, "cResponse", '') + AddProperty(loReturn, "nStatus", 0) + + Wait Window 'Validare fisier ' + m.lcFileName Nowait + lcFisierRaspuns = Forceext(m.lcFileName, 'txt') + If File(m.lcFisierRaspuns) + Delete File (m.lcFisierRaspuns) + Endif + +* validez xml + + If !Empty(m.lcFileName) And Type('lcFileName') = 'C' And File(m.lcFileName) + TRY + lcSend = Filetostr(m.lcFileName) + + IF !EMPTY(m.lcToken) + * validare oauth + lcServer = [https://api.anaf.ro/prod/FCTEL/rest/validare/FACT1] + ELSE + * validare fara autentificare + lcServer = [https://webservicesp.anaf.ro/prod/FCTEL/rest/validare/FACT1] + ENDIF + + loHTTP = Createobject('winHTTP.winHTTPrequest.5.1') + loHTTP.Open('POST', lcServer, .F.) + loHTTP.setRequestHeader("Content-Type", "text/plain") + IF !EMPTY(m.lcToken) && validare oauth + loHTTP.setRequestHeader('Authorization', 'Bearer ' + m.lcToken) + ENDIF + Try + poLog.Log(m.lcServer) + Catch + Endtry + loHTTP.Send(m.lcSend) + + loReturn.nStatus = loHTTP.Status + loReturn.cResponse = loHTTP.ResponseText + loReturn.lSucces = (loHTTP.Status = 200) + CATCH TO loEx + loReturn.cResponse = m.lcMesaj + Chr(13) + Chr(10) + '' + loReturn.lSucces = .F. + ENDTRY + + Else + loReturn.cResponse = m.lcMesaj + Chr(13) + Chr(10) + '' + loReturn.lSucces = .F. + Endif + + If loReturn.lSucces + loJson = nfjsonread(loReturn.cResponse) + If Type('loJson.stare') = 'C' And !Empty(loJson.stare) + lcStare = Alltrim(Lower(loJson.stare)) + llValid = (m.lcStare == 'ok') + If !m.llValid + If Type('loJson.messages_vfpsafe_') = 'U' + llSucces = .F. + lcMesaj = 'Nu exista informatia [messages] in raspuns.' + Chr(13) + Chr(10) + loReturn.cResponse + Else + lnMesaje = Alen(loJson.messages_vfpsafe_) + lcMesaj = '' + For lnMesaj = 1 To m.lnMesaje + loMessage = loJson.messages_vfpsafe_[m.lnMesaj] + If Type('loMessage.message') = 'C' + lcMesaj = lcMesaj + loMessage.Message + Chr(13) + Chr(10) + Endif + Endfor + Endif && messages + + If !m.llSilentios And !Empty(m.lcMesaj) + AMESSAGEBOX(m.lcMesaj, 0 + 48, _Screen.Caption) + Endif + + Else + lcMesaj = "Factura este valida. O puteti ncarca prin SPV, la sectiunea 'Factura electronica', cu optiunea de sintaxa XML - UBL" + Chr(13) + Chr(10) + m.lcFileName + If !m.llSilentios + AMESSAGEBOX(m.lcMesaj, 0 + 48, _Screen.Caption) + Endif + Endif && llValid + Endif && loJson.stare + Endif && loReturn.lSucces + +*** deschid explorer in directorul de export + If !m.llSilentios + open_default_app(Justpath(m.lcFileName)) + Endif + + tcMesaj = m.lcMesaj + Return m.llValid + Endproc && ValidareEFacturaANAF + +Enddefine && ExportEFactura + + + + + +PROCEDURE TestValidareEFactura + + Local loExport As 'ExportEFactura' + Local lcFile, llValid, lcMesaj, llOnline + lcMesaj = '' + llOnline = .T. + lcFile = 'f:\efactura_rompetrol.xml' + loExport = CREATEOBJECT('ExportEFactura') + SET STEP ON + llValid = loExport.ValidareEFactura(m.lcFile, @lcMesaj, m.llOnline) + +ENDPROC && TestValidareEFactura \ No newline at end of file diff --git a/COMUN/programe/xmlparser.prg b/COMUN/programe/xmlparser.prg new file mode 100644 index 0000000..3abc8ee --- /dev/null +++ b/COMUN/programe/xmlparser.prg @@ -0,0 +1,50 @@ +Define Class xmlparserclass As Custom + cXmlCursor = [crsXmlCrs] + ParseError="" + + Function Load + Lparameters lcFile + LOCAL loex as Exception + loex=null + If Used(This.cXmlCursor) + Use In (This.cXmlCursor) + Endif + Try + Xmltocursor(lcFile,This.cXmlCursor,512) + Catch To loex + Messagebox("Structura fisierului Xml nu este corecta!",0+16, 'Eroare') + ENDTRY + RETURN loex + Endfunc + + Procedure getCursorItems + Lparameters tcNumeCursor + If Used(tcNumeCursor) + Use In (tcNumeCursor) + Endif + Select Item From (This.cXmlCursor) Into Cursor (tcNumeCursor) Readwrite + Endproc + + Function SelectNodes + Lparameters lcItem + Local lcVersiune,lcCursorVechi + lcCursorVechi = Alias() + Select (This.cXmlCursor) + Locate For Upper(Alltrim(Item)) = Upper(Alltrim(lcItem)) + If Found() + lcUsermsg = Iif(Empty(Alltrim(usermsg)),[S-a gasit ] + Upper(Alltrim(lcItem)) +[ versiunea ] + Alltrim(Version) + [.] + ; + [Programul va incepe procedurile de actualizare!],Alltrim(usermsg)) + lcVersiune = "<" + Alltrim(Version) + ">(" + Alltrim(fileURL) + "){" + lcUsermsg + "}" + Else + lcVersiune = [<>(){}] + Endif + Select (lcCursorVechi) + Return lcVersiune + Endfunc + + Procedure Destroy + If Used(This.cXmlCursor) + Use In (This.cXmlCursor) + Endif + Endproc +Enddefine diff --git a/COMUN/rapoarte_coduri.txt b/COMUN/rapoarte_coduri.txt new file mode 100644 index 0000000..989accd --- /dev/null +++ b/COMUN/rapoarte_coduri.txt @@ -0,0 +1,171 @@ +PROGRAM:COD:RAPORT:CALE +ROACONT:RC-0001:sit_oper_multi_gr_rpt1:Terti > Clienti > Rapoarte > Situatia operativa +ROACONT:RC-0002:sit_oper_multi_negr_rpt1:Terti > Clienti > Rapoarte > Situatia operativa +ROACONT:RC-0003:rap_facturi:Terti > Clienti > Rapoarte > Situatii facturi > Facturi vanzari > Toate facturile (pe clienti) > Cu sold in perioada/Emise in perioada +ROACONT:RC-0004:rap_facturi_vechime:Terti > Clienti > Rapoarte > Situatii facturi > Facturi vanzari > Toate facturile (pe clienti) > Cu sold in perioada/Emise in perioada +ROACONT:RC-0005:rap_facturi_neachit:Terti > Clienti > Rapoarte > Situatii facturi > Facturi vanzari > Facturi neincasate (pe clienti) > Solduri pe facturi/analitic +ROACONT:RC-0005:rap_facturi_neachit:Terti > Clienti > Rapoarte > Situatii facturi > Facturi vanzari > Facturi neincasate (in ordinea emiterii) +ROACONT:RC-0005:rap_facturi_neachit:Terti > Clienti > Rapoarte > Situatii facturi > Facturi scadente +ROACONT:RC-0006:rap_facturi_emise:Terti > Clienti > Rapoarte > Situatii facturi > Facturi vanzari > Situatia facturilor emise pe zile +ROACONT:RC-0007:ireg_parteneri_rpt4:Terti > Clienti > Rapoarte > Situatii facturi > Facturi vanzari > Facturi pe contracte +ROACONT:RC-0008:rap_facturi_furncli:Terti > Clienti > Rapoarte > Situatii facturi > Facturi furnizor-client +ROACONT:RC-0009:rap_incasari_facturi:Terti > Clienti > Rapoarte > Situatii facturi > Facturi incasate in luna curenta > Grupate dupa luna emiterii/data incasarii +ROACONT:RC-0010:rap_vechime_clienti:Terti > Clienti > Rapoarte > Situatie clienti pe vechimi +ROACONT:RC-0011:rap_vechime_furnizori:Terti > Furnizori > Rapoarte > Situatie furnizori pe vechimi +ROACONT:RC-0012:balanta_parteneri_rpt3:Terti > Alti > Rapoarte > Balanta analitica +ROACONT:RC-0013:balanta_parteneri_rpt1: +ROACONT:RC-0014:balanta_parteneri_rpt2: +ROACONT:RC-0015:balanta_parteneri_rpt2_ext: +ROACONT:RC-0016:balanta_parteneri_rpt4: +ROACONT:RC-0017:rap_scadentar: Terti > Clienti (Furnizori) > Rapoarte > Raport scadentar +ROACONT:RC-0018:jurnal_plati_incasari: Trezorerie > Alte > Rapoarte > Jurnal incasari pe parteneri +ROACONT:RC-0019:fisegrup3:* > Situatii Contabile > Fisa de cont / Fisa de cont in valuta +ROACONT:RC-0020:registru_banca_rpt1:Trezorerie > Banca > Registru de banca > Listare registru +ROACONT:RC-0021:registru_casabanca_valuta_rpt1:Trezorerie > Banca > Registru de banca in valuta > Listare registru +ROACONT:RC-0022:registru_casa_rpt1:Trezorerie > Banca > Registru de casa > Listare registru +ROACONT:RC-0023:registru_casabanca_rpt2:Trezorerie > Banca > Registru de banca/casa > Listare selectie +ROACONT:RC-0024:registru_casa_rpt3:Trezorerie > Banca > Registru de casa > Listare registru - case cumulate +ROACONT:RC-0025:rap_inventar_patrimoniu:* > Inventarul patrimoniului +ROACONT:RC-0026:rap_inventar_patrimoniu_valuta:* > Inventarul patrimoniului +ROACONT:RC-0027:ireg_parteneri_rpt1: +ROACONT:RC-0028:ireg_parteneri_rpt2:Terti > Furnizori/Clienti/Alti > Rapoarte > Inregistrari Furnizori/Clienti/Alti cu sold final in luna +ROACONT:RC-0029:ireg_parteneri_rpt2lei:Terti > Furnizori/Clienti/Alti > Rapoarte > Inregistrari Furnizori/Clienti/Alti cu sold final in luna +ROACONT:RC-0030:ireg_parteneri_rpt3: +ROACONT:RC-0031:ireg_parteneri_rpt5: +ROACONT:RC-0032:ireg_parteneri_rpt6: +ROACONT:RC-0033:rapbal_a3_5_14_6_30_a +ROACONT:RC-0034:rapbal_a3_6_14_6_30_b: +ROACONT:RC-0035:rapbal_a4_4_14_6_30: +ROACONT:RC-0036:rapbal_a4_4_14_6_30_a: +ROACONT:RC-0037:rapbal_a4_4_14_6_30_a1: +ROACONT:RC-0038:ireg_parteneri_penalitati_evaluare: +ROACONT:RC-0039:ireg_parteneri_rpt2lei_cum: +ROACONT:RC-0040:notificare: +ROACONT:RC-0041:rap_regjurnal_val +ROACONT:RC-0042:rap_pondere_clienti_furnizori +ROACONT:RC-0043:registrul_inventar +ROACONT:RC-0044:rap_regjurnal +ROACONT:RC-0045:rap_reg_incaspl +ROACONT:RC-0046:balanta_parteneri_rpt5: balanta parteneri rulaje anuale + +ROAFACTURARE:RF-0001:borderou_incasari: +ROAFACTURARE:RF-0002:raport_articole: +ROAFACTURARE:RF-0003:raport_avize: +ROAFACTURARE:RF-0004:raport_avize_transfer: +ROAFACTURARE:RF-0005:raport_centralizator: +ROAFACTURARE:RF-0006:raport_facturat: +ROAFACTURARE:RF-0007:raport_incasat: +ROAFACTURARE:RF-0008:rap_artdoc: +ROAFACTURARE:RF-0009:rap_artrute: +ROAFACTURARE:RF-0010:rap_avizedoc: +ROAFACTURARE:RF-0011:rap_avizerute: +ROAFACTURARE:RF-0012:rap_rute: +ROAFACTURARE:RF-0013:rap_transferart:Rapoarte > Lista facturi si avize > Listare centralizatoare > Centralizar transferuri articole pe gestiuni +ROAFACTURARE:RF-0014:lista_aviz_lucrare: +ROAFACTURARE:RF-0015:rap_centr_val_subgrupe: +ROAFACTURARE:RF-0016:raport_articole_transfer: +ROAFACTURARE:RF-0017:raport_comision_incasari_agenti:Rapoarte > Incasari + +ROACOMENZI:RCM-0001:centralizatori_comenzi: +ROACOMENZI:RCM-0002:centralizator_lucrari: +ROACOMENZI:RCM-0003:detalii_comanda: +ROACOMENZI:RCM-0004:detalii_lucrare: +ROACOMENZI:RCM-0005:dispozitie_livrare: +ROACOMENZI:RCM-0006:rap_marfa_nelivrata: +ROACOMENZI:RCM-0007:rap_comanda_vanz: comenzi pe baza vanzarilor +ROACOMENZI:RCM-0008:rap_comanda_vanz_fz: comenzi furnizori pe baza vanzarilor +ROACOMENZI:RCM-0009:rap_comanda_vanz_fz_val: comenzi furnizori pe baza vanzarilor cu valori + +ROAPRETURI:RPP-0001:rap_liste: +ROAPRETURI:RPP-0002:rap_liste_subgrupe: + + +ROAGEST:RG-0001:rap_nir_transfer_achi: +ROAGEST:RG-0002:rap_nir_transfer_achi2: +ROAGEST:RG-0003:rap_nir_transfer_vanz: +ROAGEST:RG-0004:rap_nir_marfuri: +ROAGEST:RG-0005:rap_nir_materiale: +ROAGEST:RG-0006:rap_nir_standard: +ROAGEST:RG-0007:rap_nir_toate: +ROAGEST:RG-0008:rap_stocachi_grup: +ROAGEST:RG-0009:rap_stocvanz_grup: +ROAGEST:RG-0010:rap_stocvanzachi_grup: +ROAGEST:RG-0011:rap_stocvanzachi_simplu_grup: +ROAGEST:RG-0012:centralizator_nir: +ROAGEST:RG-0013:centralizator_bon: +ROAGEST:RG-0014:rap_gest_val_subgrupe: +ROAGEST:RG-0015:rap_gestiune: +ROAGEST:RG-0016:rap_nota_invmagazin: +ROAGEST:RG-0017:rap_nota_inv2005_mag: +ROAGEST:RG-0018:rap_recap_inv2005_mag: +ROAGEST:RG-0019:fisa_explicativa: +ROAGEST:RG-0020:fisa_magazie_fifo_val: +ROAGEST:RG-0021:fisa_magazie_fifo: +ROAGEST:RG-0022:rap_gestiune_toate: +ROAGEST:RG-0023:rap_vechime_stocuri: +ROAGEST:RG-0024:rap_sch_pret.frx: +ROAGEST:RG-0025:rap_centralizator_intrari.frx: +ROAGEST:RG-0025:rap_centralizator_intrari2.frx: +ROAGEST:RG-0026:rap_centralizator_iesiri.frx: +ROAGEST:RG-0026:rap_centralizator_iesiri2.frx: +ROAGEST:RG-0027:centralizator_schimbpret.frx: +ROAGEST:RG-0028:rap_bon_achi: +ROAGEST:RG-0029:rap_bon_achi_inv: +ROAGEST:RG-0030:rap_articolecodbare: +ROAGEST:RG-0031:rap_recap_inv2005_mag_necompletat:inventar magazin +ROAGEST:RG-0032:rap_recap_inv2005_mag_necompletat_redus:inventar magazin +ROAGEST:RG-0033:rap_nota_inv2005:inventar materiale/marfa +ROAGEST:RG-0034:rap_bonuri +ROAGEST:RG-0035:rap_bon_achi +ROAGEST:RG-0036:rap_bon_achi_vanz +ROAGEST:RG-0037:rap_bon_lucrare +ROAGEST:RG-0038:rap_bon_vanz + +ROAVIN:RV-0001:proces_verbal.frx: +ROAVIN:RV-0002:proces_verbal_ferma.frx: +ROAVIN:RV-0003:proces_verbal_tr.frx: +ROAVIN:RV-0004:rap_rulaje_vin.frx: +ROAVIN:RV-0005:rap_vin_nota_inv.frx: +ROAVIN:RV-0006:rap_vin_nota_inv_necompletat.frx: +ROAVIN:RV-0007:stoc_crama.frx: +ROAVIN:RV-0008:stoc_ferma.frx: +ROAVIN:RV-0009:transfer.frx: +ROAVIN:RV-0010:transfer_crama.frx: +ROAVIN:RV-0011:transfer_pret.frx: +ROAVIN:RV-0012:vin_centralizator_intrari.frx: +ROAVIN:RV-0013:vin_fabricatie_must.frx: +ROAVIN:RV-0014:vin_intrare_articol.frx: +ROAVIN:RV-0015:vin_intrare_gestiune.frx: +ROAVIN:RV-0016:vin_intrari_art_soi.frx: + +ROAPRODUCTIE:RPD-0001:ana_chelt_dir.frx: +ROAPRODUCTIE:RPD-0002:ana_cost1.frx: +ROAPRODUCTIE:RPD-0003:ana_cost_cu_retetar.frx: +ROAPRODUCTIE:RPD-0004:ana_mat_prime.frx: +ROAPRODUCTIE:RPD-0005:ana_mat_prime_2.frx: +ROAPRODUCTIE:RPD-0006:ana_produse.frx: +ROAPRODUCTIE:RPD-0007:rap_livrari_1_15.frx: +ROAPRODUCTIE:RPD-0008:rap_livrari_16_31.frx: + +ROAAUTO:RA-0001:preco.frx: +ROAAUTO:RA-0002:precog.frx: +ROAAUTO:RA-0003:centralizator_devize.frx: + +ROADEVIZE:RDEV-0001:dev_comanda.frx: +ROADEVIZE:RDEV-0002:dev_comandaverif.frx: +ROADEVIZE:RDEV-0003:dev_produse.frx: +ROADEVIZE:RDEV-0004:rap_devizest.frx: +ROADEVIZE:RDEV-0005:rap_rapproductie.frx: +ROADEVIZE:RDEV-0006:dev_detalii_manopera.frx: +ROADEVIZE:RDEV-0007:salarii.frx: +ROADEVIZE:RDEV-0008:centralizator_devize.frx: +ROADEVIZE:RDEV-0009:operal.frx: +ROADEVIZE:RDEV-0010:opersalcom.frx: +ROADEVIZE:RDEV-0011:rap_manopera_sectii.frx: + +FACTURA: factura A4 pe mai multe pagini +FACTURATIP: factura A4 pe mai multe pagini (acelasi raport ca FACTURA) +FACTURA_A5: factura A5 pe mai multe pagini +FACTURATIP_A5: factura A5 pe o singura pagina, aranjata cat mai condensat +FACTURA_CHIT: factura A4 pe mai multe pagini + chitanta in footer +FACTURATIP_CUCHIT: factura A4 pe mai multe pagini + chitanta in footer (acelasi raport ca FACTURA_CHIT) \ No newline at end of file diff --git a/COMUN/roa.h b/COMUN/roa.h new file mode 100644 index 0000000..4431999 --- /dev/null +++ b/COMUN/roa.h @@ -0,0 +1,25 @@ +#DEFINE CRLF CHR(13)+CHR(10) + +#DEFINE CT_SUCCES 1 +#DEFINE CT_INSUCCES -1 + +*** CAUTA_ALFA +#DEFINE CA_PORNIRE_INCEPE 1 +#DEFINE CA_PORNIRE_ESTE 2 +#DEFINE CA_PORNIRE_NUESTE 3 +#DEFINE CA_PORNIRE_CONTINE 4 +#DEFINE CA_PORNIRE_NUCONTINE 5 +#DEFINE CA_PORNIRE_TOATE 6 + +*** INVENTAR +#DEFINE RG_INV_TIP_STOC 1 +#DEFINE RG_INV_TIP_OBINVFOL 2 +#DEFINE RG_INV_TIP_ROAVIN 3 +#DEFINE RG_INV_TIP_BONCONSUM 4 +#DEFINE RG_INV_TIP_MAGAZIN 5 + +#DEFINE RG_INV_OPT_STOC 1 +#DEFINE RG_INV_OPT_FARAARTICOLE 2 +#DEFINE RG_INV_OPT_ARTICOLELUNI 3 + + diff --git a/COMUN/update_readme.txt b/COMUN/update_readme.txt new file mode 100644 index 0000000..fd5cc63 --- /dev/null +++ b/COMUN/update_readme.txt @@ -0,0 +1,40 @@ +*!* Exemplu apel din program care se actualizeaza singur +*!* gcDirMare, gcNumeProgram, gcTempPath, gcAppPath, gcAppName, poLog = D:\ROA + +*!* lcServer = setare care se citeste din settings.ini al programului +loUpdate=CREATEOBJECT("oUpdate",lcServer) +loUpdate.updatecheck(gcNumeProgram,.T.,2) +RELEASE loUpdate + +*!* trebuie adaugate in fiecare proiect +*!* trebuie sa existe variabila gcDirMare +SET PROCEDURE TO filebringer.prg additive +SET PROCEDURE TO iniacces.prg ADDITIVE +SET PROCEDURE TO oupdate.prg additive +SET PROCEDURE TO procese.prg additive +SET PROCEDURE TO version.prg additive +SET PROCEDURE TO wwapi.prg ADDITIVE +SET PROCEDURE TO wwcodeupdate.prg additive +SET PROCEDURE TO wwhttp.prg ADDITIVE +SET PROCEDURE TO xmlaccess.prg additive +SET PROCEDURE TO xmlparser.prg additive + +SET CLASSLIB TO wwdialogs.vcx ADDITIVE + +Declare Integer GetPrivateProfileString In Kernel32 ; + string, String, String, String @, Integer, String +Declare Integer WritePrivateProfileString In Kernel32 ; + string, String, String, String +Declare Integer CopyFile In kernel32; + STRING lpExistingFileName,; + STRING lpNewFileName,; + INTEGER bFailIfExists +Declare Integer URLDownloadToFile In urlmon.Dll; + INTEGER pCaller, String szURL, String szFileName,; + INTEGER dwReserved, Integer lpfnCB +Declare Integer PathFileExists In shlwapi; + STRING pszPath +*!* trebuie adaugat security.h + +*!* in caz ca da eroare encryptkey not found, trebuie scos din proiect iniacces.prg(din comun/programe) si adaugat / sau sterse fxp-urile + diff --git a/COMUN/utile/Google Translator/google.prg b/COMUN/utile/Google Translator/google.prg new file mode 100644 index 0000000..fa18ad2 --- /dev/null +++ b/COMUN/utile/Google Translator/google.prg @@ -0,0 +1,73 @@ +CLOSE DATABASES +SET DELETED ON +SET CENTURY on +SET ANSI ON +SET EXACT ON +*!* SET DEFAULT TO "d:\roa_trunk\roastart\locale" +USE locale IN 0 SHARED + +*Use test +oGt = Createobje("ugt") && ,"google.prg") + +SELECT locale +Scan For Language='English' AND !translated + *!* ?oGt.translate("ro","en",cuvant) + lcPhrase = ALLTRIM(phrase) + IF RIGHT(lcPhrase,1) = '*' + lcPhrase = LEFT(lcPhrase, LEN(lcPhrase) - 1) + ENDIF + lcTranslated = oGt.translate("ro","en",lcPhrase) + IF !EMPTY(lcTranslated) + Replace phrase With lcTranslated , translated WITH .T. + ENDIF +ENDSCAN + +Select locale +Browse +Define Class ugt As Custom + * apiUrl = "http://translate.google.com/translate_t?&"+"hl=en&"+"ie=UTF8" + apiUrl = "http://translate.google.com/translate_t?" + *!* apiStartTags = "<"+"div id=result_box dir=ltr>" + apiStartTags = [
] + apiEndTags = "<"+"/div>" + Function translate(lcFrom,lcTo,lcText) + Local lcHttp As MSXML2.XMLHTTP + Local lcRequest As String + lcRequest = This.apiUrl+"langpair="+This.urlEncode(lcFrom+"|"+lcTo)+"&"+"text="+This.urlEncode(lcText) + lcHttp = Createobject("MSXML2.XMLHTTP") + *!-- lcHttp.open("GET",this.apiUrl,.f.) + lcHttp.Open("GET",lcRequest,.F.) + lcHttp.Send() + *!* DEBUG + *!* SUSPEND + If lcHttp.Status == 200 + lcText = Strextract(lcHttp.responseText,This.apiStartTags,This.apiEndTags) + Endif + Return lcText + Endfunc + + Function urlEncode + Parameters tcValue, llNoPlus + Local lcResult, lcChar, lnSize, lnX + + *** Do it in VFP Code + lcResult="" + + For lnX=1 To Len(tcValue) + lcChar = Substr(tcValue,lnX,1) + If Atc(lcChar,"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789") > 0 + lcResult=lcResult + lcChar + Loop + Endif + If lcChar=" " And !llNoPlus + lcResult = lcResult + "+" + Loop + Endif + *** Convert others to Hex equivalents + lcResult = lcResult + "%" + Right(Transform(Asc(lcChar),"@0"),2) + Endfor + + Return lcResult + Endfunc +Enddefine + diff --git a/COMUN/utile/GridExtras/adauga.png b/COMUN/utile/GridExtras/adauga.png new file mode 100644 index 0000000..4a7ea12 Binary files /dev/null and b/COMUN/utile/GridExtras/adauga.png differ diff --git a/COMUN/utile/GridExtras/add16.png b/COMUN/utile/GridExtras/add16.png new file mode 100644 index 0000000..4a7ea12 Binary files /dev/null and b/COMUN/utile/GridExtras/add16.png differ diff --git a/COMUN/utile/GridExtras/addfilter16.bmp b/COMUN/utile/GridExtras/addfilter16.bmp new file mode 100644 index 0000000..8c0aabb Binary files /dev/null and b/COMUN/utile/GridExtras/addfilter16.bmp differ diff --git a/COMUN/utile/GridExtras/ascendingsort12.bmp b/COMUN/utile/GridExtras/ascendingsort12.bmp new file mode 100644 index 0000000..ea211d0 Binary files /dev/null and b/COMUN/utile/GridExtras/ascendingsort12.bmp differ diff --git a/COMUN/utile/GridExtras/cauta.png b/COMUN/utile/GridExtras/cauta.png new file mode 100644 index 0000000..e6969c5 Binary files /dev/null and b/COMUN/utile/GridExtras/cauta.png differ diff --git a/COMUN/utile/GridExtras/clearfilter16.bmp b/COMUN/utile/GridExtras/clearfilter16.bmp new file mode 100644 index 0000000..2823623 Binary files /dev/null and b/COMUN/utile/GridExtras/clearfilter16.bmp differ diff --git a/COMUN/utile/GridExtras/close16.bmp b/COMUN/utile/GridExtras/close16.bmp new file mode 100644 index 0000000..b0a1934 Binary files /dev/null and b/COMUN/utile/GridExtras/close16.bmp differ diff --git a/COMUN/utile/GridExtras/config.fpw b/COMUN/utile/GridExtras/config.fpw new file mode 100644 index 0000000..db4a499 --- /dev/null +++ b/COMUN/utile/GridExtras/config.fpw @@ -0,0 +1 @@ +RESOURCE=OFF \ No newline at end of file diff --git a/COMUN/utile/GridExtras/delete16.png b/COMUN/utile/GridExtras/delete16.png new file mode 100644 index 0000000..1294132 Binary files /dev/null and b/COMUN/utile/GridExtras/delete16.png differ diff --git a/COMUN/utile/GridExtras/descendingsort12.bmp b/COMUN/utile/GridExtras/descendingsort12.bmp new file mode 100644 index 0000000..d73caed Binary files /dev/null and b/COMUN/utile/GridExtras/descendingsort12.bmp differ diff --git a/COMUN/utile/GridExtras/excel.jpg b/COMUN/utile/GridExtras/excel.jpg new file mode 100644 index 0000000..7cdfda6 Binary files /dev/null and b/COMUN/utile/GridExtras/excel.jpg differ diff --git a/COMUN/utile/GridExtras/excel24.jpg b/COMUN/utile/GridExtras/excel24.jpg new file mode 100644 index 0000000..f54e6fe Binary files /dev/null and b/COMUN/utile/GridExtras/excel24.jpg differ diff --git a/COMUN/utile/GridExtras/exit.png b/COMUN/utile/GridExtras/exit.png new file mode 100644 index 0000000..36b9c58 Binary files /dev/null and b/COMUN/utile/GridExtras/exit.png differ diff --git a/COMUN/utile/GridExtras/filter12.bmp b/COMUN/utile/GridExtras/filter12.bmp new file mode 100644 index 0000000..1c59153 Binary files /dev/null and b/COMUN/utile/GridExtras/filter12.bmp differ diff --git a/COMUN/utile/GridExtras/find.BMP b/COMUN/utile/GridExtras/find.BMP new file mode 100644 index 0000000..c29fbce Binary files /dev/null and b/COMUN/utile/GridExtras/find.BMP differ diff --git a/COMUN/utile/GridExtras/gridextras.CDX b/COMUN/utile/GridExtras/gridextras.CDX new file mode 100644 index 0000000..c4ce87e Binary files /dev/null and b/COMUN/utile/GridExtras/gridextras.CDX differ diff --git a/COMUN/utile/GridExtras/gridextras.FPT b/COMUN/utile/GridExtras/gridextras.FPT new file mode 100644 index 0000000..0139651 Binary files /dev/null and b/COMUN/utile/GridExtras/gridextras.FPT differ diff --git a/COMUN/utile/GridExtras/gridextras.VCT b/COMUN/utile/GridExtras/gridextras.VCT new file mode 100644 index 0000000..6195869 Binary files /dev/null and b/COMUN/utile/GridExtras/gridextras.VCT differ diff --git a/COMUN/utile/GridExtras/gridextras.dbf b/COMUN/utile/GridExtras/gridextras.dbf new file mode 100644 index 0000000..3fa5285 Binary files /dev/null and b/COMUN/utile/GridExtras/gridextras.dbf differ diff --git a/COMUN/utile/GridExtras/gridextras.vcx b/COMUN/utile/GridExtras/gridextras.vcx new file mode 100644 index 0000000..baad226 Binary files /dev/null and b/COMUN/utile/GridExtras/gridextras.vcx differ diff --git a/COMUN/utile/GridExtras/gridextrasprocs.prg b/COMUN/utile/GridExtras/gridextrasprocs.prg new file mode 100644 index 0000000..f9f9abf --- /dev/null +++ b/COMUN/utile/GridExtras/gridextrasprocs.prg @@ -0,0 +1,712 @@ +******************************** +*!* Simple Sample Usage +******************************** +*!* DIMENSION aWrkSht(1), aCols(1) +*!* m.lcXlsFile = GETFILE("Excel:XLS,XLSX,XLSB,XLSM") +*!* IF FILE(m.lcXlsFile) +*!* CLEAR +*!* ?AWorkSheets(@aWrkSht,m.lcXlsFile,.T.) +*!* ?AWorkSheetColumns(@aCols,m.lcXlsFile,"Sheet1") +*!* AppendFromExcel(m.lcXlsFile, "Sheet1", "MyTable", "column1,column2,column3", "Recnum Is Not Null", "field1,field2,field3", "field1 > 14000") +*!* SELECT MyTable +*!* GO TOP IN "MyTable" +*!* BROWSE LAST NOWAIT +*!* ENDIF +*!* CopyToExcel("C:\Test.xlsx", "Sheet1", "MyTable") && try xls, xlsb, and xlsm as well + +********************************** +FUNCTION AppendFromExcel(tcXLSFile, tcSheet, tvWorkarea, tcExcelFieldList, tcExcelWhereExpr, tcTableFieldList, tcTableForExpr, tlNoHeaderRow) + ********************************** + * PARAMETER Information + * tcXLSFile := a string specifying an excel file (*.xls, *.xlsx, *.xlsm, *.xlsb) on disk + * tcSheet := a string specifying the name of a worksheet within the excel workbook (can also be a range Sheet1$A1:C20 for instance) + * tvWorkarea [optional] := the Alias, Work Area, or File Name of the table you want the worksheet result set appended to (default is currently selected Alias) + * tcExcelFieldList [optional] := a comma delimited list of columns you want from the worksheet (default is '*' - all columns) + * tcExcelWhereExpr [optional] := a valid SQL Where clause to be used when querying the worksheet (default is '1=1') + * tcTableFieldList [optional] := a comma delimited list of fields you want the worksheet result set inserted into (default is '*' - all fields) + * tcTableForExpr [optional] := a valid VFP Where clause to be used when querying the worksheet result set (cursor) (default is '.T.') + * tlNoHeaderRow [optional] := pass .T. if the worksheet does not contain a header row, .F. is the default which specifies that a header row does exist + * + * RETURN Information + * returns numeric, the number of records inserted into tvWorkArea + * + * Provider Information + * the default provider being used in the SQLStringConnect function can be downloaded and installed from: + * http://www.microsoft.com/downloads/details.aspx?FamilyID=7554F536-8C28-4598-9B72-EF94E038C891&displaylang=en + ********************************** + LOCAL lnSelect, laErr[1], laTableFields[1], laExcelFields[1], lnFieldCounter, ; + lcSQLAlias, lnResult, lcInsertValues, lcFieldList, lcNvlFieldList, ; + lcFieldType, lcExcelFieldType, lcNvlFieldName, lcTempAlias, loExc, lnReturn, ; + lcHeaderRow, llOpenedtvWorkArea + m.lnSelect = SELECT(0) + m.lnReturn = 0 + IF NOT FILE(m.tcXLSFile) + ERROR 1, m.tcXLSFile + ENDIF + + IF !USED(m.tvWorkarea) AND TYPE("m.tvWorkArea") = "C" AND FILE(DEFAULTEXT(m.tvWorkarea,"DBF")) + SELECT 0 + USE (DEFAULTEXT(m.tvWorkarea,"DBF")) SHARED AGAIN + m.tvWorkarea = ALIAS() + m.llOpenedtvWorkArea = .T. + ELSE + IF !USED(m.tvWorkarea) + m.tvWorkarea = ALIAS() + ENDIF + ENDIF + IF TYPE("m.tvWorkArea") = "N" + m.tvWorkArea = ALIAS(m.tvWorkArea) + ENDIF + + m.tcSheet = ALLTRIM(EVL(m.tcSheet,"Sheet1$")) + IF AT("$",m.tcSheet) = 0 + m.tcSheet = m.tcSheet + "$" + ENDIF + m.tcExcelFieldList = EVL(m.tcExcelFieldList,"*") + m.tcExcelWhereExpr = EVL(m.tcExcelWhereExpr,"1=1") + m.tcTableFieldList = EVL(m.tcTableFieldList,"*") + m.tcTableForExpr = EVL(m.tcTableForExpr,".T.") + m.lcSQLAlias = SYS(2015) + m.lcTempAlias = SYS(2015) + m.lnSQL = 0 + m.lcHeaderRow = IIF(EMPTY(m.tlNoHeaderRow), "Yes", "No") + TRY + SELECT (m.tvWorkarea) + + m.lnSQL = SQLSTRINGCONNECT([Provider=Microsoft.ACE.OLEDB.12.0;Data Source="] + m.tcXLSFile + [";Extended Properties="Excel 12.0 Xml;HDR=] + m.lcHeaderRow + [;";]) + + *!* Alternate using DSN that comes with Office install (MSDASQL = OLEDB wrapper for ODBC) + *!* m.lnSQL = SQLSTRINGCONNECT("Provider=MSDASQL.1;" ; + *!* +"Persist Security Info=False;" ; + *!* +"DSN=Excel Files;" ; + *!* +"DBQ="+FULLPATH(m.tcXLSFile)+";" ; + *!* +"DriverId=790;" ; + *!* +"MaxBufferSize=2048;" ; + *!* +"PageTimeout=5;") + + *!* Try a few other drivers that may be on the user's machine + IF m.lnSQL < 0 + m.lnSQL = SQLSTRINGCONNECT("Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};" ; + + "DBQ="+FULLPATH(m.tcXLSFile)+";") + IF m.lnSQL < 0 AND UPPER(ALLTRIM(JUSTEXT(m.tcXLSFile))) == "XLS" && can we try using the older driver? + IF m.lnSQL < 0 + m.lnSQL = SQLSTRINGCONNECT("Driver={Microsoft Excel Driver (*.xls)};" ; + + "DBQ="+FULLPATH(m.tcXLSFile)+";") + ENDIF + ENDIF + IF m.lnSQL < 0 + AERROR(m.laErr) + ERROR m.laErr[2] + ENDIF + ENDIF + + m.lnResult = SQLEXEC(m.lnSQL,[SELECT ] + m.tcExcelFieldList + [ FROM "] + m.tcSheet + [" Where ] + m.tcExcelWhereExpr, m.lcSQLAlias) + IF m.lnResult < 0 + AERROR(m.laErr) + ERROR m.laErr[2] + ENDIF + + IF USED(m.lcSQLAlias) + m.lcFieldList = "" + m.lcNvlFieldList = "" + m.lnTotalExcelFields = AFIELDS(m.laExcelFields, m.lcSQLAlias) + SELECT &tcTableFieldList FROM (m.tvWorkarea) WHERE .F. INTO CURSOR (m.lcTempAlias) + FOR m.lnFieldCounter = 1 TO MIN(AFIELDS(m.laTableFields, m.lcTempAlias), m.lnTotalExcelFields) + m.lcFieldList = m.lcFieldList + IIF(!EMPTY(m.lcFieldList),",","")+m.laTableFields[m.lnFieldCounter,1] + m.lcFieldType = CHRTRAN(m.laTableFields[m.lnFieldCounter,2],"NIFYD","BBBBT") + m.lcExcelFieldType = CHRTRAN(m.laExcelFields[m.lnFieldCounter,2],"CVNIFYD","MMBBBBT") + m.lcNvlFieldName = m.laExcelFields[m.lnFieldCounter,1] + IF !m.laTableFields[m.lnFieldCounter,5] + m.lcNvlFieldName = [NVL(]+m.lcNvlFieldName+[,]+; + ICASE(m.lcExcelFieldType="B", "0", ; + m.lcExcelFieldType="M", "''", ; + m.lcExcelFieldType="T", "{//}", ; + m.lcExcelFieldType="L", ".F.", ; + "''")+[)] + ENDIF + IF INLIST(m.lcFieldType, "C", "V") + m.lcNvlFieldName = [CAST(]+m.lcNvlFieldName+[ AS ]+m.lcFieldType+[(] + TRANSFORM(m.laTableFields[m.lnFieldCounter,3]) + [))] + ELSE + m.lcNvlFieldName = [CAST(]+m.lcNvlFieldName+[ AS ]+m.lcFieldType+[)] + ENDIF + m.lcNvlFieldList = m.lcNvlFieldList + IIF(!EMPTY(m.lcNvlFieldList),",","") + m.lcNvlFieldName + ENDFOR + INSERT INTO (m.tvWorkarea) (&lcFieldList) SELECT &lcNvlFieldList FROM (m.lcSQLAlias) WHERE &tcTableForExpr + m.lnReturn = _TALLY + ENDIF + + CATCH TO m.loExc + *!* MESSAGEBOX(m.loExc.MESSAGE + " : " + TRANSFORM(m.loExc.LINENO)) + FINALLY + IF m.llOpenedtvWorkArea + USE IN SELECT(m.tvWorkArea) + ENDIF + IF m.lnSQL > 0 + SQLDISCONNECT(m.lnSQL) + ENDIF + USE IN SELECT(m.lcTempAlias) + USE IN SELECT(m.lcSQLAlias) + SELECT (m.lnSelect) + ENDTRY + RETURN m.lnReturn +ENDFUNC + +********************************** +FUNCTION AWorkSheets(taArray, tcXLSFile, tlAllTables) + ********************************** + * PARAMETER Information + * taArray := an array sent in by reference to fill with Worksheet/Table information + * tcXLSFile := a string specifying an excel file (*.xls, *.xlsx, *.xlsm, *.xlsb) on disk + * tlAllTables := if .T., array will contain information regarding all tables in workbook; .F. returns only worksheets + * + * RETURN Information + * returns numeric, the number of tables found in the workbook + ********************************** + + LOCAL lnSQL, laErr[1], lcSQLAlias, lnResult, lnReturn, loExc + m.lnReturn = 0 + m.lnSQL = SQLSTRINGCONNECT("Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};" ; + +"DBQ="+FULLPATH(m.tcXLSFile)+";") + + *!* Alternate using DSN that comes with Office install (MSDASQL = OLEDB wrapper for ODBC) + *!* m.lnSQL = SQLSTRINGCONNECT("Provider=MSDASQL.1;" ; + *!* +"Persist Security Info=False;" ; + *!* +"DSN=Excel Files;" ; + *!* +"DBQ="+FULLPATH(m.tcXLSFile)+";" ; + *!* +"DriverId=790;" ; + *!* +"MaxBufferSize=2048;" ; + *!* +"PageTimeout=5;") + + *!* Try a few other drivers that may be on the user's machine + IF m.lnSQL < 0 + IF UPPER(ALLTRIM(JUSTEXT(m.tcXLSFile))) == "XLS" && can we try using the older driver? + m.lnSQL = SQLSTRINGCONNECT("Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};" ; + + "DBQ="+FULLPATH(m.tcXLSFile)+";") + IF m.lnSQL < 0 + m.lnSQL = SQLSTRINGCONNECT("Driver={Microsoft Excel Driver (*.xls)};" ; + + "DBQ="+FULLPATH(m.tcXLSFile)+";") + ENDIF + ELSE + m.lnSQL = SQLSTRINGCONNECT("Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};" ; + + "DBQ="+FULLPATH(m.tcXLSFile)+";") + ENDIF + IF m.lnSQL < 0 + AERROR(m.laErr) + ERROR m.laErr[2] + ENDIF + ENDIF + + m.lcSQLAlias = SYS(2015) + m.lnResult = SQLTABLES(m.lnSQL,"VIEW,TABLE,SYSTEM TABLE",m.lcSQLAlias) + + IF m.lnSQL > 0 + SQLDISCONNECT(m.lnSQL) + ENDIF + + IF m.lnResult < 0 + AERROR(m.laErr) + ERROR m.laErr[2] + ENDIF + + IF USED(m.lcSQLAlias) + TRY + IF tlAllTables + SELECT CAST(ALLTRIM(table_name) AS V(100)), ; + CAST(ALLTRIM(table_type) AS V(12)) ; + FROM (m.lcSQLAlias) ; + INTO ARRAY taArray + ELSE + SELECT CAST(ALLTRIM(table_name) AS V(100)), ; + CAST(ALLTRIM(table_type) AS V(12)) ; + FROM (m.lcSQLAlias) ; + WHERE table_type = "SYSTEM TABLE" ; + INTO ARRAY taArray + ENDIF + m.lnReturn = _TALLY + CATCH TO m.loExc + THROW + FINALLY + *!* USE IN SELECT(m.lcSQLAlias) + ENDTRY + ENDIF + + RETURN m.lnReturn +ENDFUNC + +********************************** +FUNCTION AWorkSheetColumns(taArray, tcXLSFile, tcSheet) + ********************************** + * PARAMETER Information + * taArray := an array sent in by reference to fill with the specified worksheet's column information + * tcXLSFile := a string specifying an excel file (*.xls, *.xlsx, *.xlsm, *.xlsb) on disk + * tcSheet := a string specifying the worksheet or table to use when retrieving column information + * + * RETURN Information + * returns numeric, the number of columns found in the worksheet/table + ********************************** + LOCAL lnSQL, laErr[1], lnResult, lnReturn, lcSQLAlias, loExc + m.lnReturn = 0 + m.lnSQL = SQLSTRINGCONNECT("Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};" ; + +"DBQ="+FULLPATH(m.tcXLSFile)+";") + *!* Alternate using DSN that comes with Office install (MSDASQL = OLEDB wrapper for ODBC) + *!* m.lnSQL = SQLSTRINGCONNECT("Provider=MSDASQL.1;" ; + *!* +"Persist Security Info=False;" ; + *!* +"DSN=Excel Files;" ; + *!* +"DBQ="+FULLPATH(m.tcXLSFile)+";" ; + *!* +"DriverId=790;" ; + *!* +"MaxBufferSize=2048;" ; + *!* +"PageTimeout=5;") + + *!* Try a few other drivers that may be on the user's machine + IF m.lnSQL < 0 + IF UPPER(ALLTRIM(JUSTEXT(m.tcXLSFile))) == "XLS" && can we try using the older driver? + m.lnSQL = SQLSTRINGCONNECT("Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};" ; + + "DBQ="+FULLPATH(m.tcXLSFile)+";") + IF m.lnSQL < 0 + m.lnSQL = SQLSTRINGCONNECT("Driver={Microsoft Excel Driver (*.xls)};" ; + + "DBQ="+FULLPATH(m.tcXLSFile)+";") + ENDIF + ELSE + m.lnSQL = SQLSTRINGCONNECT("Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};" ; + + "DBQ="+FULLPATH(m.tcXLSFile)+";") + ENDIF + IF m.lnSQL < 0 + AERROR(m.laErr) + ERROR m.laErr[2] + ENDIF + ENDIF + + m.lcSQLAlias = SYS(2015) + m.lnResult = SQLEXEC(m.lnSQL,[SELECT * FROM "] + m.tcSheet + [$" Where 1=0], m.lcSQLAlias) + + IF m.lnSQL > 0 + SQLDISCONNECT(m.lnSQL) + ENDIF + + IF m.lnResult < 0 + AERROR(m.laErr) + ERROR m.laErr[2] + ENDIF + + IF USED(m.lcSQLAlias) + TRY + m.lnReturn = AFIELDS(m.taArray, m.lcSQLAlias) + CATCH TO m.loExc + THROW + FINALLY + USE IN SELECT(m.lcSQLAlias) + ENDTRY + ENDIF + + RETURN m.lnReturn +ENDFUNC + +*********************************** +FUNCTION CopyToExcel(tcXLSFile, tcSheet, tvWorkArea, tcExcelFieldList, tcTableFieldList, tcTableForExpr) + *********************************** + * PARAMETER Information + * tcXLSFile := a string specifying an excel file (*.xls, *.xlsx, *.xlsm, *.xlsb) on disk + * tcSheet := a string specifying the name of the worksheet to create within the excel workbook + * tvWorkarea [optional] := the Alias, Work Area, or File Name of the table you want to be copied to the worksheet (default is currently selected Alias) + * tcExcelFieldList [optional] := a comma delimited list of columns you want to create in the worksheet (default is '*' - columns will match table field list) + * tcTableFieldList [optional] := a comma delimited list of fields you want this function to copy from tvWorkArea + * tcTableForExpr [optional] := a valid VFP Where/For clause to be used when querying tvWorkArea for data to be copied to the worksheet + * + * RETURN Information + * returns numeric, the number of records inserted into the worksheet + * + * Provider Information + * the default provider being used in the SQLStringConnect function can be downloaded and installed from: + * http://www.microsoft.com/downloads/details.aspx?FamilyID=7554F536-8C28-4598-9B72-EF94E038C891&displaylang=en + ********************************** + #DEFINE adOpenStatic 3 + #DEFINE adOpenKeyset 1 + #DEFINE adLockOptimistic 3 + #DEFINE adUseClient 3 + #DEFINE adUseServer 2 + #DEFINE adCmdText 0x0001 + LOCAL loConnection as ADODB.Connection, lcCreateTableCommand, llOpenedtvWorkArea, loExc as Exception, ; + lnReturn, lnResult, lnFieldCounter, lnSQL, loCursorAdapter as CursorAdapter, ; + lcFieldName, lcFieldType, lcSelectFields, lcUpdateNameListFields, lcUpdatableFieldList, ; + loRecordSet as ADODB.Recordset, lcConversionFunc, lcVFPFieldName, laTableFields[1], laErr[1] + + m.lnSelect = SELECT(0) + m.lnReturn = 0 + + m.llOpenedtvWorkArea = .F. + IF !USED(m.tvWorkarea) AND TYPE("m.tvWorkArea") = "C" AND FILE(DEFAULTEXT(m.tvWorkarea,"DBF")) + SELECT 0 + USE (DEFAULTEXT(m.tvWorkarea,"DBF")) SHARED AGAIN + m.tvWorkarea = ALIAS() + m.llOpenedtvWorkArea = .T. + ELSE + IF !USED(m.tvWorkarea) + m.tvWorkarea = ALIAS() + ENDIF + ENDIF + IF TYPE("m.tvWorkArea") = "N" + m.tvWorkArea = ALIAS(m.tvWorkArea) + ENDIF + + m.tcSheet = ALLTRIM(EVL(m.tcSheet,"Sheet1$")) + IF AT("$",m.tcSheet) = 0 + m.tcSheet = m.tcSheet + "$" + ENDIF + m.tcExcelFieldList = EVL(m.tcExcelFieldList,"") + m.tcTableFieldList = EVL(m.tcTableFieldList,"*") + m.tcTableForExpr = EVL(m.tcTableForExpr,".T.") + m.lnSQL = 0 + m.lcTempAlias = SYS(2015) + + TRY + CreateExcelTemplate(m.tcXLSFile) + IF !FILE(m.tcXLSFile) + m.lnReturn + ENDIF + m.loConnection = CreateObject ( "ADODB.Connection") + *!* This is the only provider/driver that appears to work without showing Select Data Source dialog + *!* or throwing a weird error about the excel Database being readonly. + m.loConnection.ConnectionString = [Provider=Microsoft.ACE.OLEDB.12.0;Data Source="] + m.tcXLSFile + [";Extended Properties="Excel 12.0 Xml;HDR=Yes;";] + m.loConnection.Open() + m.loConnection.Execute("DROP TABLE [Sheet1$]") + SELECT &tcTableFieldList FROM (m.tvWorkarea) WHERE &tcTableForExpr INTO CURSOR (m.lcTempAlias) NOFILTER + GO TOP IN (m.lcTempAlias) + m.lnReturn = RECCOUNT(m.lcTempAlias) + m.lcCreateTableCommand = "" + m.lcSelectFields = "" + m.lcUpdateNameListFields = "" + m.lcUpdatableFieldList = "" + m.lcConversionFunc = "" + FOR m.lnFieldCounter = 1 TO AFIELDS(m.laTableFields, m.lcTempAlias) + m.lcVFPFieldName = m.laTableFields(m.lnFieldCounter, 1) + m.lcFieldName = ALLTRIM(GETWORDNUM(m.tcExcelFieldList, m.lnFieldCounter, ",")) + IF EMPTY(m.lcFieldName) + m.lcFieldName = m.laTableFields(m.lnFieldCounter, 1) + ENDIF + m.lcSelectFields = m.lcSelectFields + "[" + m.lcFieldName + "] " + " AS " + m.lcVFPFieldName + m.lcUpdateNameListFields = m.lcUpdateNameListFields + m.lcVFPFieldName + " [" + m.tcSheet + "].[" + m.lcFieldName + "]" + m.lcUpdatableFieldList = m.lcUpdatableFieldList + m.lcVFPFieldName + m.lcCreateTableCommand = m.lcCreateTableCommand + "[" + m.lcFieldName + "] " + m.lcFieldType = m.laTableFields(m.lnFieldCounter, 2) + m.lcCreateTableCommand = m.lcCreateTableCommand + ; + ICASE(m.lcFieldType = 'C', 'Char(' + TRANSFORM(m.laTableFields(m.lnFieldCounter, 3)) + ')', ; + m.lcFieldType = 'Y', 'Currency', ; + m.lcFieldType = 'D', 'Date', ; + m.lcFieldType = 'T', 'DateTime', ; + m.lcFieldType = 'B', 'Double', ; + m.lcFieldType = 'F', 'Double', ; + m.lcFieldType = 'G', 'Binary', ; + m.lcFieldType = 'I', 'Integer', ; + m.lcFieldType = 'L', 'Logical', ; + m.lcFieldType = 'M', 'Text', ; + m.lcFieldType = 'N', 'Numeric(' + TRANSFORM(m.laTableFields(m.lnFieldCounter, 3)) + ',' + TRANSFORM(m.laTableFields(m.lnFieldCounter, 4)) + ')', ; + m.lcFieldType = 'Q', 'Binary', ; + m.lcFieldType = 'V', 'VarChar(' + TRANSFORM(m.laTableFields(m.lnFieldCounter, 3)) + ')', ; + m.lcFieldType = 'W', 'Blob', ; + 'Char(' + TRANSFORM(m.laTableFields(m.lnFieldCounter, 3)) + ')') + IF INLIST(m.lcFieldType,"T","D") + m.lcConversionFunc = m.lcConversionFunc + IIF(!EMPTY(m.lcConversionFunc), ", ", "") + m.lcVFPFieldName + " EmptyFieldToNull" + ENDIF + IF m.lnFieldCounter != ALEN(m.laTableFields,1) + m.lcCreateTableCommand = m.lcCreateTableCommand + ',' + m.lcSelectFields = m.lcSelectFields + ',' + m.lcUpdateNameListFields = m.lcUpdateNameListFields + ',' + m.lcUpdatableFieldList = m.lcUpdatableFieldList + ',' + ENDIF + ENDFOR + IF !EMPTY(m.lcCreateTableCommand) + IF m.tcSheet != [Sheet1$] + m.tcSheet = STRTRAN(m.tcSheet,"$","") + ENDIF + m.lcCreateTableCommand = "CREATE TABLE [" + m.tcSheet + "](" + m.lcCreateTableCommand + ")" + m.loConnection.Errors.Clear() + m.loConnection.Execute(m.lcCreateTableCommand) + IF m.loConnection.Errors.Count>0 + ERROR m.loConnection.Errors(0).Description + ENDIF + m.loRecordSet = CreateObject("ADODB.Recordset") + With m.loRecordSet + .ActiveConnection = m.loConnection + .CursorLocation = adUseClient + .CursorType = adOpenStatic + .LockType = adLockOptimistic + ENDWITH + m.loCursorAdapter = CREATEOBJECT("CursorAdapter") + m.loCursorAdapter.Alias = SYS(2015) + m.loCursorAdapter.DataSourceType = "ADO" + m.loCursorAdapter.DataSource = m.loRecordSet + m.loCursorAdapter.SelectCmd = "Select " + m.lcSelectFields + " From [" + m.tcSheet + "]" + IF m.loCursorAdapter.CursorFill(.F.,.T.) + m.loCursorAdapter.Tables = "[" + m.tcSheet + "]" + m.loCursorAdapter.BufferModeOverride = 3 && faster than 5 when dealing with larger record sets + m.loCursorAdapter.UpdateNameList = m.lcUpdateNameListFields + m.loCursorAdapter.UpdatableFieldList = m.lcUpdatableFieldList + IF !EMPTY(m.lcConversionFunc) + m.loCursorAdapter.ConversionFunc = m.lcConversionFunc + ENDIF + INSERT INTO (m.loCursorAdapter.Alias) SELECT * FROM (m.lcTempAlias) + m.lnReturn = TABLEUPDATE(.T.,.T.,m.loCursorAdapter.Alias) + ELSE + AERROR(m.laErr) + ERROR m.laErr(2) + ENDIF + ENDIF + m.loConnection.Close() + CATCH TO m.loExc + SET STEP ON + m.lnReturn = 0 + FINALLY + m.loCursorAdapter = Null + m.loConnection = Null + RELEASE loCursorAdapter, loConnection + IF m.llOpenedtvWorkArea + USE IN SELECT(m.tvWorkarea) + ENDIF + USE IN SELECT(m.lcTempAlias) + SELECT (m.lnSelect) + ENDTRY + RETURN m.lnReturn +ENDFUNC + +*********************************** +FUNCTION CopyToExcelSimple(tcXLSFile, tcSheet, tvWorkArea, tcExcelFieldList, tcTableFieldList, tcTableForExpr) + *********************************** + * PARAMETER Information + * tcXLSFile := a string specifying an excel file (*.xls, *.xlsx, *.xlsm, *.xlsb) on disk + * tcSheet := a string specifying the name of the worksheet to create within the excel workbook + * tvWorkarea [optional] := the Alias, Work Area, or File Name of the table you want to be copied to the worksheet (default is currently selected Alias) + * tcExcelFieldList [optional] := a comma delimited list of columns you want to create in the worksheet (default is '*' - columns will match table field list) + * tcTableFieldList [optional] := a comma delimited list of fields you want this function to copy from tvWorkArea + * tcTableForExpr [optional] := a valid VFP Where/For clause to be used when querying tvWorkArea for data to be copied to the worksheet + * + * RETURN Information + * returns numeric, the number of records inserted into the worksheet + * + ********************************** + + LOCAL llOpenedtvWorkArea, loExc as Exception, ; + lnReturn, lnResult, lnFieldCounter, lnSQL, ; + lcFieldName, lcFieldType, lcSelectFields, ; + laErr[1] + + m.lnSelect = SELECT(0) + m.lnReturn = 0 + + m.llOpenedtvWorkArea = .F. + IF !USED(m.tvWorkarea) AND TYPE("m.tvWorkArea") = "C" AND FILE(DEFAULTEXT(m.tvWorkarea,"DBF")) + SELECT 0 + USE (DEFAULTEXT(m.tvWorkarea,"DBF")) SHARED AGAIN + m.tvWorkarea = ALIAS() + m.llOpenedtvWorkArea = .T. + ELSE + IF !USED(m.tvWorkarea) + m.tvWorkarea = ALIAS() + ENDIF + ENDIF + IF TYPE("m.tvWorkArea") = "N" + m.tvWorkArea = ALIAS(m.tvWorkArea) + ENDIF + + m.tcSheet = ALLTRIM(EVL(m.tcSheet,"Sheet1$")) + IF AT("$",m.tcSheet) = 0 + m.tcSheet = m.tcSheet + "$" + ENDIF + m.tcExcelFieldList = EVL(m.tcExcelFieldList,"") + m.tcTableFieldList = EVL(m.tcTableFieldList,"*") + m.tcTableForExpr = EVL(m.tcTableForExpr,".T.") + m.lnSQL = 0 + m.lcTempAlias = SYS(2015) + + TRY + SELECT &tcTableFieldList FROM (m.tvWorkarea) WHERE &tcTableForExpr INTO CURSOR (m.lcTempAlias) NOFILTER + COPY TO (m.tcXLSFile) TYPE XL5 + CATCH TO m.loExc + SET STEP ON + m.lnReturn = 0 + FINALLY + IF m.llOpenedtvWorkArea + USE IN SELECT(m.tvWorkarea) + ENDIF + USE IN SELECT(m.lcTempAlias) + SELECT (m.lnSelect) + ENDTRY + RETURN m.lnReturn +ENDFUNC + + +******************* +FUNCTION EmptyFieldToNull(tdFieldValue) +******************* + RETURN EVL(m.tdFieldValue,NULL) +ENDFUNC + +******************* +FUNCTION CreateExcelTemplate(tcExcelFile) +******************* + LOCAL lcExcelFileExtension, lcFileBinary + m.llReturn = .F. + IF FILE(m.tcExcelFile) + m.llReturn = .T. + ELSE + m.lcExcelFileExtension = UPPER(JUSTEXT(m.tcExcelFile)) + DO case + CASE m.lcExcelFileExtension = "XLSX" + m.lcFileBinary = 0h504B030414000600080000002100CC7EE6A14E010000080400001300DF015B436F6E74656E745F54797065735D2E786D6C20A2DB0128A00002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h000000000000000000000000000000000000AC93CB4EC3301045F748FC83E52D8ADDB2400835ED82C712BA281F60EC4963D52F79DCD2FE3D938422814A455536B1226BEE9D39733D996DBD631BC86863A8F9588C3883A0A3B16159F3D7C55375CB1916158C723140CD77807C36BDBC982C7609905175C09AB7A5A43B2951B7E0158A9820D04D13B357857EF35226A5576A09F27A34BA913A8602A154A5D3E0D3C90B3590AD013657B93C2B4F3E72EB64213518BE63417A9CDD0F859D77CD554ACE6A55A873B909E6876B159BC66A3051AF3D79895EECAA5391BF1A62D939C0B3AD306550065B80E29D1844F7CE0FD0A8B52BEC714B0406E8191C9E36DA274C + m.lcFileBinary = m.lcFileBinary + 0h4195FDF8D8DA84471C8EB33BCEE43DE6D55B8CABFFA6D2D1115ED9B0EFFB5008687BF31C134ADAF5D90D4087DC80A91249422E16BE981DF2A60076B3F76B44D91FE7A7F07B34BEF4FFC440C70CA743D867A5AB3E30B9ECDFF1F4030000FFFF0300504B030414000600080000002100B5553023F50000004C0200000B00CE015F72656C732F2E72656C7320A2CA0128A0000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008C92CF4EC3300CC6EF48BC43E4FBEA6E4808A1A5BB4C48BB21541EC024EE1FB58DA32440F7F68403824A63DBD1F6E7CF3F5BDEEEE669541F1C622F4EC3BA2841B133627BD76A78AD9F560FA06222676914C71A8E1C6157DDDE6C5F78A4949B62D7FBA8B28B8B1ABA94FC2362341D4F140BF1EC72A5913051CA6168D19319A865DC94E53D86BF1E502D3CD5C16A08077B07AA3EFA3CF9B2B7344D6F782FE67D62974E8C409E + m.lcFileBinary = m.lcFileBinary + 0h133BCB76E543660BA9CFDBA89A42CB498315F39CD311C9FB2263039E26DA5C4FF4FFB63871224B89D048E0F33CDF8A7340EBEB812E9F68A9F8BDCE3CE2A784E14D64F861C1C50F545F000000FFFF0300504B0304140006000800000021008D87DA70E00000002D0200001A000801786C2F5F72656C732F776F726B626F6F6B2E786D6C2E72656C7320A2040128A00001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AC91CB6AC3301045F785FE83987D3D760AA594C8D99442B6C5FD00218F1FC496846692D67F5FE182DD404836D908AE06DD73246D773FE3A04E14B9F74E4391E5A0C8595FF7AED5F0557D3CBD826231AE368377A46122865DF9F8B0FDA4C1483AC45D1F58A516C71A3A91F086C8B6 + m.lcFileBinary = m.lcFileBinary + 0hA3D170E603B934697C1C8DA4185B0CC61E4C4BB8C9F3178CFF3BA03CEB54FB5A43DCD7CFA0AA2924F2ED6EDF34BDA5776F8F2339B98040966948175095892D8986BF9C2547C0CBF8CD3DF1929E8556FA1C715E8B6B0EC53D1DBE7D3C704724ABC7B2C5384F16193CFBE4F2170000FFFF0300504B030414000600080000002100A460FAFF52010000270200000F000000786C2F776F726B626F6F6B2E786D6C8C915D6FC2201486EF97EC3F10EE272DA9CE185B93655BE6CD6232A7D7AC9C5A228506A8D57FBF534CE776B72BCE073CE7BC2FCBD5B9D1E404CE2B6B729A4E124AC094562A73C8E9E7F6F5614E890FC248A1AD819C5EC0D355717FB7ECAD3B7E + m.lcFileBinary = m.lcFileBinary + 0h597B2408303EA77508ED82315FD6D0083FB12D18EC54D6352260EA0ECCB70E84F435406834E34932638D50865E090BF71F86AD2A55C2B32DBB064CB8421C6811707D5FABD6D36259290DBBAB2222DAF65D34B8F75953A2850F2F52059039CD30B53DFC29B8AE7DEA941EBAD3644A59F12372E3085203B88D5327515ED0294A2454A2D3618B82C77958E719E7B3E1ED60CE4E41EF6F982125E7BD32D2F639E5199A7D19B31427923EB6F64A861A51D9FC567B0375A8434EE7499A0C74F60B1F2DC531F12426EAFD186CC625636D8D9230760B85815BCB3412C667A5D0250A1C8E78914F1F7954CFC63F2EBE010000FFFF0300504B0304140006000800000021 + m.lcFileBinary = m.lcFileBinary + 0h00A083C4AEA3010000640300000D000000786C2F7374796C65732E786D6CA453C16ADC3010BD17F20F42F746BB0B0D6DB19D436121909440B6D0AB6CC95EC16864A4F1B2EED767643BDEDD530EBD584F4F336F9E66E4E2F1EC419C6C4C2E6029B7F71B292C36C138EC4AF9E7B0FFFA5D8A441A8D8680B694A34DF2B1BAFB52241AC1BE1DAD25C112984A7924EA7F2A959AA3F53ADD87DE229FB4217A4DBC8D9D4A7DB4DAA49CE441ED369B07E5B54359156D404AA2090312BB5888AA48FFC44903335BA9AAA20910A2209667231383DADB39E29706574797C35AED1D8C33BDCBC4E46889F30E43CCA4CA259725719203580DECB20126AAA2D74436E29E3762 + m.lcFileBinary = m.lcFileBinary + 0hC187B1E7F2C8DD9865A6B84FA2BBA8C7EDEEDB55829A0A56451DA2E1EE5F5F7DA6AA026C4B6C34BAEE98570A3D7FEB40143C03E37417500343F591B100BE4E6301DEF284FEB637DAE756E0E0F79E9E4C2979D6B9091F902FB2C0596FDE64FD6BB559FBBF65C5B9BDD567C52BDB37A6D7F222CFBB94BFF39302B94A887A70400E6F05A7EBB3A6395F5AB0C913205DF3CBCDCD59AB70278C6DF50074580F4B79C12FD6B8C1FF58A35EDD29D02451CA0B7ECE93DA3E4C534EEBEF51BD030000FFFF0300504B030414000600080000002100E9A625B882060000531B000013000000786C2F7468656D652F7468656D65312E786D6CEC594F6FDB3614BF0FD87720 + m.lcFileBinary = m.lcFileBinary + 0h746F6D27B61B07758AD8B19BAD4D1BC46E871E6999965853A240D2497D1BDAE38001C3BA619701BBED306C2BD002BB749F265B87AD03FA15F6484AB218CB4BD2061BD6D58744227F7CFFDFE32375F5DA8388A1432224E571DBAB5DAE7A88C43E1FD338687B7786FD4B1B1E920AC763CC784CDADE9C48EFDAD6FBEF5DC59B2A241141B03E969BB8ED854A259B958AF46118CBCB3C2131CC4DB888B082571154C6021F01DD8855D6AAD56625C234F6508C23207B7B32A13E41434DD2DBCA88F718BCC64AEA019F8981264D9C15063B9ED63442CE659709748859DB033E637E34240F948718960A26DA5ED5FCBCCAD6D50ADE4C1731B5626D615DDFFCD275E982 + m.lcFileBinary = m.lcFileBinary + 0hF174CDF014C128675AEBD75B577672FA06C0D432AED7EB757BB59C9E0160DF074DAD2C459AF5FE46AD93D12C80ECE332ED6EB551ADBBF802FDF525995B9D4EA7D14A65B1440DC83ED697F01BD5667D7BCDC11B90C53796F0F5CE76B7DB74F00664F1CD257CFF4AAB5977F10614321A4F97D0DAA1FD7E4A3D874C38DB2D856F007CA39AC2172888863CBA348B098FD5AA588BF07D2EFA00D04086158D919A2764827D88E22E8E468262CD006F125C98B143BE5C1AD2BC90F4054D54DBFB30C190110B7AAF9E7FFFEAF953F4EAF993E387CF8E1FFE74FCE8D1F1C31F2D2D67E12E8E83E2C297DF7EF6E7D71FA33F9E7EF3F2F117E57859C4FFFAC327BFFCFC79 + m.lcFileBinary = m.lcFileBinary + 0h3910326821D18B2F9FFCF6ECC98BAF3EFDFDBBC725F06D814745F8904644A25BE4081DF0087433867125272371BE15C3105367050E817609E99E0A1DE0AD396665B80E718D775740F128035E9FDD77641D8462A66809E71B61E400F738671D2E4A0D7043F32A5878388B8372E66256C41D607C58C6BB8B63C7B5BD590255330B4AC7F6DD903862EE331C2B1C909828A4E7F8949012EDEE51EAD8758FFA824B3E51E81E451D4C4B4D32A4232790168B7669047E9997E90CAE766CB3771775382BD37A871CBA484808CC4A841F12E698F13A9E291C95911CE288150D7E13ABB04CC8C15CF8455C4F2AF074401847BD3191B26CCD6D01FA169C7E0343BD2A75FB + m.lcFileBinary = m.lcFileBinary + 0h1E9B472E52283A2DA37913735E44EEF06937C45152861DD0382C623F905308518CF6B92A83EF713743F43BF801C72BDD7D9712C7DDA717823B3470445A04889E9909ED4B28D44EFD8D68FC77C59851A8C63606DE15E3B6B70D5B53594AEC9E28C1AB70FFC1C2BB8367F13E81585FDE78DED5DD7775D77BEBEBEEAA5C3E6BB55D1458A8BDBA79B07DB1E992A3954DF28432365073466E4AD3274BD82CC67D18D4EBCC0191E487A62484C7B4B83BB84060B30609AE3EA22A1C8438811EBBE66922814C490712255CC2D9CE0C97D2D678E8D3953D1936F499C1D60389D51E1FDBE1753D9C1D0D723266CB09CCF93363B4AE099C95D9FA959428A8FD3ACC6A5AA8 + m.lcFileBinary = m.lcFileBinary + 0h3373AB19D14CA973B8E52A830F975583C1DC9AD08520E85DC0CA4D38A26BD67036C18C8CB5DDED069CB9C578E1225D24433C26A98FB4DECB3EAA192765B1622E0320764A7CA4CF79A758ADC0ADA5C9BE01B7B338A9C8AEBE825DE6BD37F15216C10B2FE9BC3D918E2C2E26278BD151DB6B35D61A1EF271D2F62670AC85C72801AF4BDDF86116C0DD90AF840DFB5393D964F9C29BAD4C3137096A705361EDBEA4B053071221D50E96A10D0D339586008B35272BFF5A03CC7A510AD8487F0D29D6372018FE3529C08EAE6BC964427C5574766144DBCEBEA6A594CF141183707C84466C260E30B85F872AE833A6126E274C45D02F7095A6AD6DA6DCE29C265DF1 + m.lcFileBinary = m.lcFileBinary + 0h02CBE0EC38664988D372AB5334CB640B37799CCB60DE0AE2816EA5B21BE5CEAF8A49F90B52A518C6FF3355F47E02D705EB63ED011F6E7205463A5FDB1E172AE450859290FA7D018D83A91D102D701D0BD31054709F6CFE0B72A8FFDB9CB3344C5AC3A94F1DD000090AFB910A0521FB50964CF49D42AC96EE5D96244B0999882A882B132BF6881C1236D435B0A9F7760F8510EAA69AA465C0E04EC69FFB9E66D028D04D4E31DF9C1A92EFBD3607FEE9CEC7263328E5D661D3D064F6CF452CD955ED7AB33CDB7B8B8AE889459B55CFB2029815B682569AF6AF29C239B75A5BB196345E6B64C28117973586C1BC214AE0D207E93FB0FF51E133FB71426FA8437E + m.lcFileBinary = m.lcFileBinary + 0h00B515C1B7064D0CC206A2FA926D3C902E907670048D931DB4C1A44959D3A6AD93B65AB6595F70A79BF33D616C2DD959FC7D4E63E7CD99CBCEC9C58B34766A61C7D6766CA5A9C1B32753148626D941C638C67CD52A7E78E2A3FBE0E81DB8E29F31254D30C1672581A1F51C983C80E4B71CCDD2ADBF000000FFFF0300504B030414000600080000002100075F38D31E010000C701000018000000786C2F776F726B7368656574732F7368656574312E786D6C8C514D6BC3300CBD0FF61F8CEE8BD38D6EA324298352B6C360ECEBEE2472626A5BC156D7EDDFCF496819F4B29B3EDE7BD2938AF5B7B3E20B4334E44B58643908F40DB5C677257CBC6FAFEE4144 + m.lcFileBinary = m.lcFileBinary + 0h56BE55963C96F08311D6D5E54571A0B08B3D228BA4E063093DF3B09232363D3A15331AD0A78EA6E014A73474320E01553B919C95D7797E2B9D321E668555F88F06696D1ADC50B377E87916096815A7FD636F860855D19AD41B0D8980BA848705C8AA98C67E1A3CC43FB16055BFA1C586B14DEE418CAE6AA2DD087C4AA57CA4CA33EE7672F512448B5AED2DBFD2E1114DD77312599EA66D14AB441F5487CF2A74C6476151274C9EDD8108337E8A9986A9BA04511333B963D6A783613A4C9EDD80D0447C4CC6B54E2FA87E010000FFFF0300504B030414000600080000002100A6A453EB3E0100005102000011000801646F6350726F70732F636F72652E786D + m.lcFileBinary = m.lcFileBinary + 0h6C20A2040128A00001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h000000000000000000007C92516BC3201485DF07FB0FC1F7449342DB4992C236FAB4C260191B7B13BD6D65D188BAA5FDF733499BA65006BE78CFB9DF3D5ECC57075547BF609D6C7481D284A008346F84D4BB02BD57EB788922E79916AC6E3414E8080EADCAFBBB9C1BCA1B0BAFB63160BD0417059276949B02EDBD371463C7F7A0984B82430771DB58C57CB8DA1D368C7FB31DE08C903956E099609EE10E189B91884E48C147A4F9B1750F101C430D0AB477384D527CF17AB0CADD6CE8958953497F34E14DA7B853B6E08338BA0F4E8EC6B66D9376D6C708F953FCB97979EB9F1A4BDDED8A032A73C129B7C07C63CB1C4F2F617135737E1376BC95201E8F41 + m.lcFileBinary = m.lcFileBinary + 0hBF5113BC8F3B40404421001DE29E958FD9D373B54665B7C3983CC4E9BC2284F6E7AB1B79D5DF051A0AEA34F87FE2B223924595113A5BD02C9B10CF8021F7F52728FF000000FFFF0300504B03041400060008000000210027388BC4880100001103000010000801646F6350726F70732F6170702E786D6C20A2040128A000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009C92C16EDB300C86EF03F60E86EE8D9C601886405651A41D7AD8B00049BBB326D3B150591244D648F6F4A36DA471BA9DA613C99FF8F58994BA3D76BEE821A38BA112CB45290A0836D62E1C2AF1B4FF7AF345144826D4C6C7009538018A5BFDF183DAE6982093032CD82260255AA2B496126D0B9DC105CB819526E6CE10A7F9 + m.lcFileBinary = m.lcFileBinary + 0h2063D3380BF7D1BE761048AECAF2B3842341A8A1BE496F8662725CF7F4BFA675B4031F3EEF4F8981B5BA4BC93B6B885FA9BF3B9B23C6868A87A305AFE45C544CB703FB9A1D9D74A9E43C553B6B3C6CD85837C623287929A84730C3D0B6C665D4AAA7750F96622ED0FDE6B1AD44F1CB200C3895E84D762610630D6D5332C63E2165FD33E6176C010895E486A93886F3DE79EC3EE9E5D8C0C175E3603081B0708DB877E4017F345B93E91FC4CB39F1C830F14E38BB816FBA73CE373E996F7AE7BD895D32E1C4C25BF4CD85177C4AFB786F08CEE3BC2EAA5D6B32D4BC81B37E29A8479E64F683C9A635E100F5B9E76F6158FEF3F4C3F572B528F98C3B3FD794BC + m.lcFileBinary = m.lcFileBinary + 0hFC65FD070000FFFF0300504B01022D0014000600080000002100CC7EE6A14E010000080400001300000000000000000000000000000000005B436F6E74656E745F54797065735D2E786D6C504B01022D0014000600080000002100B5553023F50000004C0200000B000000000000000000000000005E0300005F72656C732F2E72656C73504B01022D00140006000800000021008D87DA70E00000002D0200001A000000000000000000000000004A060000786C2F5F72656C732F776F726B626F6F6B2E786D6C2E72656C73504B01022D0014000600080000002100A460FAFF52010000270200000F000000000000000000000000006A080000786C2F776F + m.lcFileBinary = m.lcFileBinary + 0h726B626F6F6B2E786D6C504B01022D0014000600080000002100A083C4AEA3010000640300000D00000000000000000000000000E9090000786C2F7374796C65732E786D6C504B01022D0014000600080000002100E9A625B882060000531B00001300000000000000000000000000B70B0000786C2F7468656D652F7468656D65312E786D6C504B01022D0014000600080000002100075F38D31E010000C701000018000000000000000000000000006A120000786C2F776F726B7368656574732F7368656574312E786D6C504B01022D0014000600080000002100A6A453EB3E010000510200001100000000000000000000000000BE130000646F635072 + m.lcFileBinary = m.lcFileBinary + 0h6F70732F636F72652E786D6C504B01022D001400060008000000210027388BC48801000011030000100000000000000000000000000033160000646F6350726F70732F6170702E786D6C504B050600000000090009003E020000F11800000000 + CASE m.lcExcelFileExtension = "XLSB" + m.lcFileBinary = 0h504B030414000600080000002100558086C16D010000020400001300DD015B436F6E74656E745F54797065735D2E786D6C20A2D90128A00002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h00000000000000000000000000000000A453CD4BC33014BF0BFE0F255769B2791091B53BE8042FBAC3C47396BEAE616912F2B2D9FEF7BEB6ACA0EC83E1A5A16D7E9F2F99CD9BDA247B08A89DCDD8944F580256B942DB4DC63E57AFE9234B304A5B48E32C64AC0564F3FCF666B66A3D6042688B19AB62F44F42A0AAA096C89D074B7F4A176A19E9356C84976A2B3720EE279307A19C8D60631A3B0E96CF5EA0943B139345439F07276B6D59F23CECEBA43226BD375AC94846C5DE16BCC6141A058663051039016468792D55700B2BD706688B241691CF3E2860D005244B19E2BBAC894D344644720BC373CAC9EF05C1DFA95257965A41E1D4AEA62CBC27BBEB + m.lcFileBinary = m.lcFileBinary + 0h584E0B7EBBB0EDDDA2E89769E7FA82EA1873047702471A0B60F002D79F047E980927645F2B56DAE321C21185F3159D894E252D83F3286886FF2E1ABA435240917AA28410358C9E4FCC796C0EC5704ADE08DF5C553EE17AD0179E192FC6D6005E33D301718A72AC4DB900D7F776186F873E5296E86F70FE030000FFFF0300504B0304140006000800000021004382E3C5F70000004C0200000B00CE015F72656C732F2E72656C7320A2CA0128A000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008C92CF4EC3300CC6EF48BC43E4FBEA6E4808A1B5BB20A4DD102A0FE0256E1BB58DA32440F7F66427A834B61DFDEFF3CF9FBCDDCDD3A8BE38442BAE8275518262A7C558D755F0D1BCAE9E40C544CED0288E2B3872845D7D7FB77DE791521E8ABDF5516515172BE853F2CF8851F73C512CC4B3CB9556C2442987A1434F7AA08E7153968F18FE6A40BD + m.lcFileBinary = m.lcFileBinary + 0hD0547B5341D89B0750CDD1E7CDD7B5A56DADE617D19F13BB746605F29CD819362B1F325B48365FA31A0A1DA70A8CE8B79C8E48DE17191BF03CD1E676A2FFAFC58913194A845A025FE639755C025ADF0E74DDA265C7AF3BF388DF128683C8501CAC3B99838B1FA87F000000FFFF0300504B03041400060008000000210006332055E50000002D0200001A000801786C2F5F72656C732F776F726B626F6F6B2E62696E2E72656C7320A2040128A000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AC91C16AC3301044EF85FE83D87BBD760AA594C8B98442AEC1FD00555EDB22B624B4DB36FEFB0A97360DA4F4928B60B468DEEC68BD394EA37AA7C42E780D555182226F43EB7CAFE1A579BE7B04C562 + m.lcFileBinary = m.lcFileBinary + 0h7C6BC6E049C34C0C9BFAF666BDA7D1487EC4838BACB28B670D83487C42643BD064B808917C9E74214D46B24C3D46630FA6275C95E503A6DF1E509F79AA5DAB21EDDA7B50CD1C33F97FEFD075CED236D8B789BC5C4020CB3CE6055463524FA2E14B17AFCE035EC6AFAE89975C0B9DE88BC4E5AC8ADCD35F19AA6B66F808E9C003919C72FC5C312E93EABB103CFBE4FA130000FFFF0300504B030414000600080000002100A76734B792000000C00000000F000000786C2F776F726B626F6F6B2E62696E6A66646860346040034C407E05430E0323903681922C60B62983018329C34C461E0DA0B0D35390020686764686798CB21F80AC4C20BE6AC9C0E025CF + m.lcFileBinary = m.lcFileBinary + 0hC0100132050A2A3A1819FA1919E630AA800440BA40C615317832A4301832B001D9C10C190CA9405802E44F606498CB2825FB9A11AC320528FB67E5C74BBE4901F6209D590CB31819196603710B2303000000FFFF0300504B030414000600080000002100F98F44D4E0000000CA0100000D000000786C2F7374796C65732E62696EA4904F4B424114C57FBEB9E8F6B9EB1BB410FF1104EE8C5CA608F60514438522100DFA16ADEAC3E52E15FCB3D255923CCFBC47E2D26860CE9C7BCF993B73EF7BC097590AC85D4E846F9E0690F127444146784B9B470674180AA7C6A7993CE46BDEE3AA1E89DC8D402B8EFE00F95A56EEFF569918B3A491C295CAA58E1F38 + m.lcFileBinary = m.lcFileBinary + 0h8FCD8D4D72BD189EB61086B03516BFDAB1AC88D796C62AD14A175ED36B515A6783670DEB291EDCDAF876E6D59DE3C7353DCB6ADF4BED68B00FB418F11AB3BAA2AE863CD6DD4AEC6A2A7A51B5D189EB4EB91E7DE5CA5CB3777C041C000000FFFF0300504B030414000600080000002100E9A625B882060000531B000013000000786C2F7468656D652F7468656D65312E786D6CEC594F6FDB3614BF0FD87720746F6D27B61B07758AD8B19BAD4D1BC46E871E6999965853A240D2497D1BDAE38001C3BA619701BBED306C2BD002BB749F265B87AD03FA15F6484AB218CB4BD2061BD6D58744227F7CFFDFE32375F5DA8388A1432224E571DBAB5DAE7A88C43E + m.lcFileBinary = m.lcFileBinary + 0h1FD338687B7786FD4B1B1E920AC763CC784CDADE9C48EFDAD6FBEF5DC59B2A241141B03E969BB8ED854A259B958AF46118CBCB3C2131CC4DB888B082571154C6021F01DD8855D6AAD56625C234F6508C23207B7B32A13E41434DD2DBCA88F718BCC64AEA019F8981264D9C15063B9ED63442CE659709748859DB033E637E34240F948718960A26DA5ED5FCBCCAD6D50ADE4C1731B5626D615DDFFCD275E982F174CDF014C128675AEBD75B577672FA06C0D432AED7EB757BB59C9E0160DF074DAD2C459AF5FE46AD93D12C80ECE332ED6EB551ADBBF802FDF525995B9D4EA7D14A65B1440DC83ED697F01BD5667D7BCDC11B90C53796F0F5CE76B7DB74F006 + m.lcFileBinary = m.lcFileBinary + 0h64F1CD257CFF4AAB5977F10614321A4F97D0DAA1FD7E4A3D874C38DB2D856F007CA39AC2172888863CBA348B098FD5AA588BF07D2EFA00D04086158D919A2764827D88E22E8E468262CD006F125C98B143BE5C1AD2BC90F4054D54DBFB30C190110B7AAF9E7FFFEAF953F4EAF993E387CF8E1FFE74FCE8D1F1C31F2D2D67E12E8E83E2C297DF7EF6E7D71FA33F9E7EF3F2F117E57859C4FFFAC327BFFCFC793910326821D18B2F9FFCF6ECC98BAF3EFDFDBBC725F06D814745F8904644A25BE4081DF0087433867125272371BE15C3105367050E817609E99E0A1DE0AD396665B80E718D775740F128035E9FDD77641D8462A66809E71B61E400F738671D2E + m.lcFileBinary = m.lcFileBinary + 0h4A0D7043F32A5878388B8372E66256C41D607C58C6BB8B63C7B5BD590255330B4AC7F6DD903862EE331C2B1C909828A4E7F8949012EDEE51EAD8758FFA824B3E51E81E451D4C4B4D32A4232790168B7669047E9997E90CAE766CB3771775382BD37A871CBA484808CC4A841F12E698F13A9E291C95911CE288150D7E13ABB04CC8C15CF8455C4F2AF074401847BD3191B26CCD6D01FA169C7E0343BD2A75FB1E9B472E52283A2DA37913735E44EEF06937C45152861DD0382C623F905308518CF6B92A83EF713743F43BF801C72BDD7D9712C7DDA717823B3470445A04889E9909ED4B28D44EFD8D68FC77C59851A8C63606DE15E3B6B70D5B53594AEC9E28 + m.lcFileBinary = m.lcFileBinary + 0hC1AB70FFC1C2BB8367F13E81585FDE78DED5DD7775D77BEBEBEEAA5C3E6BB55D1458A8BDBA79B07DB1E992A3954DF28432365073466E4AD3274BD82CC67D18D4EBCC0191E487A62484C7B4B83BB84060B30609AE3EA22A1C8438811EBBE66922814C490712255CC2D9CE0C97D2D678E8D3953D1936F499C1D60389D51E1FDBE1753D9C1D0D723266CB09CCF93363B4AE099C95D9FA959428A8FD3ACC6A5AA83373AB19D14CA973B8E52A830F975583C1DC9AD08520E85DC0CA4D38A26BD67036C18C8CB5DDED069CB9C578E1225D24433C26A98FB4DECB3EAA192765B1622E0320764A7CA4CF79A758ADC0ADA5C9BE01B7B338A9C8AEBE825DE6BD37F15216 + m.lcFileBinary = m.lcFileBinary + 0hC10B2FE9BC3D918E2C2E26278BD151DB6B35D61A1EF271D2F62670AC85C72801AF4BDDF86116C0DD90AF840DFB5393D964F9C29BAD4C3137096A705361EDBEA4B053071221D50E96A10D0D339586008B35272BFF5A03CC7A510AD8487F0D29D6372018FE3529C08EAE6BC964427C5574766144DBCEBEA6A594CF141183707C84466C260E30B85F872AE833A6126E274C45D02F7095A6AD6DA6DCE29C265DF102CBE0EC38664988D372AB5334CB640B37799CCB60DE0AE2816EA5B21BE5CEAF8A49F90B52A518C6FF3355F47E02D705EB63ED011F6E7205463A5FDB1E172AE450859290FA7D018D83A91D102D701D0BD31054709F6CFE0B72A8FFDB9CB3344C + m.lcFileBinary = m.lcFileBinary + 0h5AC3A94F1DD000090AFB910A0521FB50964CF49D42AC96EE5D96244B0999882A882B132BF6881C1236D435B0A9F7760F8510EAA69AA465C0E04EC69FFB9E66D028D04D4E31DF9C1A92EFBD3607FEE9CEC7263328E5D661D3D064F6CF452CD955ED7AB33CDB7B8B8AE889459B55CFB2029815B682569AF6AF29C239B75A5BB196345E6B64C28117973586C1BC214AE0D207E93FB0FF51E133FB71426FA8437E00B515C1B7064D0CC206A2FA926D3C902E907670048D931DB4C1A44959D3A6AD93B65AB6595F70A79BF33D616C2DD959FC7D4E63E7CD99CBCEC9C58B34766A61C7D6766CA5A9C1B32753148626D941C638C67CD52A7E78E2A3FBE0E81DB8E29F + m.lcFileBinary = m.lcFileBinary + 0h31254D30C1672581A1F51C983C80E4B71CCDD2ADBF000000FFFF0300504B030414000600080000002100A1512698C10000001C01000023000000786C2F776F726B7368656574732F5F72656C732F7368656574312E62696E2E72656C736CCFC16AC3300C06E0FBA0EF60745F9CF430C68853D861906BE91E40B395C434968D654AF2F6F56DEDD8F197F83FA1FEB48555DD288B8F6CA06B5A50C4363ACFB381EFCBD7EB3B2829C80ED7C864602781D37078E9CFB462A925597C12551516034B29E9436BB10B05942626E2BA99620E586ACCB34E68AF38933EB6ED9BCE8F060C4FA61A9D813CBA0ED4654FF5F21F3B789BA3C4A93436061DA7C9DBFF54BDAD9F + m.lcFileBinary = m.lcFileBinary + 0h9E31EF233BDAAA8579A662E0E777D83535801E7AFDF4D370070000FFFF0300504B030414000600080000002100A273D38D810000001601000018000000786C2F776F726B7368656574732F7368656574312E62696E6A646498CC287E928589C181010CFE430188338551002C8644B432327432CADD61461202EB4C411298C1A882220F946244928631BB1819DA18199E32F3806CE460D001AB99C8C8308991613A8B134415480C9B5E9819301A5D0D887F97994980E10EB3411A183CB387D1103D2FEC61B431185CB687D14D8C0C00000000FFFF0300504B0304140006000800000021001E06781015000000200000001E000000786C2F776F726B73686565 + m.lcFileBinary = m.lcFileBinary + 0h74732F62696E617279496E646578312E62696ED29260000205108106A632310011000000FFFF0300504B0304140006000800000021004B7C9F083E0100005102000011000801646F6350726F70732F636F72652E786D6C20A2040128A0000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007C925F4BC33014C5DF05BF43C97B9B74835943DB81CA9E1C085614DF4272D7159B3F24D16EDFDEB4DD6A0743C84BEE39F7774F2EC9D707D9463F605DA35581D284A00814D7A2517581DEAA4D9CA1C879A6046BB582021DC1A175797B937343B9B6F062B501EB1B7051202947B929D0DE7B4331767C0F92B92438541077DA4AE6C3D5D6D830FEC56AC00B42565882678279867B606C26223A21059F90E6DBB6 + m.lcFileBinary = m.lcFileBinary + 0h0340700C2D4850DEE13449F19FD78395EE6AC3A0CC9CB2F14713DE748A3B670B3E8A93FBE09AC9D8755DD22D8718217F8A3FB6CFAFC353E346F5BBE280CA5C70CA2D30AF6D99E3F9252CAE65CE6FC38E770D888763D0AFD4041FE28E1010510840C7B867E57DF9F8546D50D9EF3026F771BAAA08A1C3F9EC475EF4F781C6823C0DFE9F98F54472572D085D66946433E21930E6BEFC04E52F000000FFFF0300504B0304140006000800000021006F7E771280010000FE02000010000801646F6350726F70732F6170702E786D6C20A2040128A00001000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009C92416BE3301085EF85FD0F46F7464E589625C82AA569E9614B0349B367551EC7228A64345393F4D7 + m.lcFileBinary = m.lcFileBinary + 0h776C93C6D9EDA93A8DE63D9E3E8DA46E0E7B9FB590D0C55088E9241719041B4B17B68578593F5CFF16199209A5F13140218E80E246FFB852CB141B48E400338E0858889AA8994B89B686BDC109CB81952AA6BD21DEA6AD8C55E52C2CA27DDB432039CBF35F120E04A184F2BAF90C1443E2BCA5EF8696D1767CB8591F1B06D6EAB669BCB386F896FAC9D914315694DD1F2C7825C7A262BA15D8B7E4E8A87325C75BB5B2C6C31D07EBCA780425CF0DF508A61BDAD2B8845AB5346FC1524C19BA771EDB4C64AF06A1C329446B92338118ABB30D9BBEF60D52D27F63DA610D40A8241B86665F8EBDE3DAFDD4D3DEC0C5A5B10B184058B8445C3BF280CFD5D224FA + m.lcFileBinary = m.lcFileBinary + 0h82783A26EE1906DE0167D5F10D678EF9FA2BF349FF64FF7161872FCD3A2E0CC16976974DB5AA4D8292C77DD2CF0DF5C8634BBE0BB9AB4DD84279F2FC2F742FBD19BEB39ECE2639AFFE814F3D25CF1F577F000000FFFF0300504B01022D0014000600080000002100558086C16D010000020400001300000000000000000000000000000000005B436F6E74656E745F54797065735D2E786D6C504B01022D00140006000800000021004382E3C5F70000004C0200000B000000000000000000000000007B0300005F72656C732F2E72656C73504B01022D001400060008000000210006332055E50000002D0200001A00000000000000000000000000690600 + m.lcFileBinary = m.lcFileBinary + 0h00786C2F5F72656C732F776F726B626F6F6B2E62696E2E72656C73504B01022D0014000600080000002100A76734B792000000C00000000F000000000000000000000000008E080000786C2F776F726B626F6F6B2E62696E504B01022D0014000600080000002100F98F44D4E0000000CA0100000D000000000000000000000000004D090000786C2F7374796C65732E62696E504B01022D0014000600080000002100E9A625B882060000531B00001300000000000000000000000000580A0000786C2F7468656D652F7468656D65312E786D6C504B01022D0014000600080000002100A1512698C10000001C01000023000000000000000000000000000B + m.lcFileBinary = m.lcFileBinary + 0h110000786C2F776F726B7368656574732F5F72656C732F7368656574312E62696E2E72656C73504B01022D0014000600080000002100A273D38D810000001601000018000000000000000000000000000D120000786C2F776F726B7368656574732F7368656574312E62696E504B01022D00140006000800000021001E06781015000000200000001E00000000000000000000000000C4120000786C2F776F726B7368656574732F62696E617279496E646578312E62696E504B01022D00140006000800000021004B7C9F083E01000051020000110000000000000000000000000015130000646F6350726F70732F636F72652E786D6C504B01022D001400 + m.lcFileBinary = m.lcFileBinary + 0h06000800000021006F7E771280010000FE02000010000000000000000000000000008A150000646F6350726F70732F6170702E786D6C504B0506000000000B000B00DB020000401800000000 + CASE m.lcExcelFileExtension = "XLSM" + m.lcFileBinary = 0h504B03041400060008000000210038088E4F60010000F20300001300DB015B436F6E74656E745F54797065735D2E786D6C20A2D70128A00002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h0000000000000000000000000000A4934D6EC2301085F7957A87C8DB2A31745155158105A5CB96053D80B127C4C27FF2181A6EDF495290401481D838B2A279DFBC37E3D1A4B126DB4244ED5DC986C58065E0A457DAAD4AF6BDF8C85F59864938258C7750B21D209B8C1F1F468B5D00CCA8DA61C9EA94C21BE7286BB0020B1FC0D19FCA472B125DE38A0721D76205FC793078E1D2BB042EE5A9D560E3D1173510B5826C2E62FA149638BC313C911AF4E7B0203D964DFBC2965D321182D15224EA9C6F9D3AA1E6BEAAB404E5E5C612ABE8C49E5A15FE2F10D3CE00DE8DC2104128AC019235452FBA27BF4325362665B38612E8438F60F0366B7F611654D9D9C7 + m.lcFileBinary = m.lcFileBinary + 0h5A07BC40B89CDDE54C7E7C5C2FBD5F5F918AC51C1A0964B9B55E5821A39F39B134A0E8A2DDBEC373E3A639CDA30FC869AA57A08E37EC74D6D086AB40E5812421260D8774CEB169D55A975DD7C8BBCFFDFB76BC0407FDAB32903EC2ED21ECB7A2AD3EE39C772F76FC0B0000FFFF0300504B030414000600080000002100B5553023F50000004C0200000B00CE015F72656C732F2E72656C7320A2CA0128A000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008C92CF4EC3300CC6EF48BC43E4FBEA6E4808A1A5BB4C48BB21541EC024EE1FB58DA32440F7F68403824A63DBD1F6E7CF3F5BDEEEE669541F1C622F4EC3BA2841B133627BD76A78AD9F560FA06222676914C71A8E1C6157DDDE6C5F78A4949B62D7FBA8B28B8B1ABA94FC2362341D4F140BF1EC72A5913051CA6168D19319A865DC94E53D86BF1E502D3CD5C16A08077B07AA3EFA3CF9B2 + m.lcFileBinary = m.lcFileBinary + 0hB7344D6F782FE67D62974E8C409E133BCB76E543660BA9CFDBA89A42CB498315F39CD311C9FB2263039E26DA5C4FF4FFB63871224B89D048E0F33CDF8A7340EBEB812E9F68A9F8BDCE3CE2A784E14D64F861C1C50F545F000000FFFF0300504B0304140006000800000021008D87DA70E00000002D0200001A000801786C2F5F72656C732F776F726B626F6F6B2E786D6C2E72656C7320A2040128A0000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AC91CB6AC3301045F785FE83987D3D760AA594C8D99442B6C5FD00218F1FC496846692D67F5FE182DD404836D908AE06DD73246D773FE3A04E14B9F74E4391E5A0C8595FF7AED5F0557D3CBD826231AE368377A46122865DF9F8B0FDA4C1483A + m.lcFileBinary = m.lcFileBinary + 0hC45D1F58A516C71A3A91F086C8B6A3D170E603B934697C1C8DA4185B0CC61E4C4BB8C9F3178CFF3BA03CEB54FB5A43DCD7CFA0AA2924F2ED6EDF34BDA5776F8F2339B98040966948175095892D8986BF9C2547C0CBF8CD3DF1929E8556FA1C715E8B6B0EC53D1DBE7D3C704724ABC7B2C5384F16193CFBE4F2170000FFFF0300504B030414000600080000002100A460FAFF52010000270200000F000000786C2F776F726B626F6F6B2E786D6C8C915D6FC2201486EF97EC3F10EE272DA9CE185B93655BE6CD6232A7D7AC9C5A228506A8D57FBF534CE776B72BCE073CE7BC2FCBD5B9D1E404CE2B6B729A4E124AC094562A73C8E9E7F6F5614E890FC248A1 + m.lcFileBinary = m.lcFileBinary + 0hAD819C5EC0D355717FB7ECAD3B7E597B2408303EA77508ED82315FD6D0083FB12D18EC54D6352260EA0ECCB70E84F435406834E34932638D50865E090BF71F86AD2A55C2B32DBB064CB8421C6811707D5FABD6D36259290DBBAB2222DAF65D34B8F75953A2850F2F52059039CD30B53DFC29B8AE7DEA941EBAD3644A59F12372E3085203B88D5327515ED0294A2454A2D3618B82C77958E719E7B3E1ED60CE4E41EF6F982125E7BD32D2F639E5199A7D19B31427923EB6F64A861A51D9FC567B0375A8434EE7499A0C74F60B1F2DC531F12426EAFD186CC625636D8D9230760B85815BCB3412C667A5D0250A1C8E78914F1F7954CFC63F2EBE010000FFFF03 + m.lcFileBinary = m.lcFileBinary + 0h00504B030414000600080000002100A083C4AEA3010000640300000D000000786C2F7374796C65732E786D6CA453C16ADC3010BD17F20F42F746BB0B0D6DB19D436121909440B6D0AB6CC95EC16864A4F1B2EED767643BDEDD530EBD584F4F336F9E66E4E2F1EC419C6C4C2E6029B7F71B292C36C138EC4AF9E7B0FFFA5D8A441A8D8680B694A34DF2B1BAFB52241AC1BE1DAD25C112984A7924EA7F2A959AA3F53ADD87DE229FB4217A4DBC8D9D4A7DB4DAA49CE441ED369B07E5B54359156D404AA2090312BB5888AA48FFC44903335BA9AAA20910A2209667231383DADB39E29706574797C35AED1D8C33BDCBC4E46889F30E43CCA4CA25972571920358 + m.lcFileBinary = m.lcFileBinary + 0h0DECB20126AAA2D74436E29E3762C187B1E7F2C8DD9865A6B84FA2BBA8C7EDEEDB55829A0A56451DA2E1EE5F5F7DA6AA026C4B6C34BAEE98570A3D7FEB40143C03E37417500343F591B100BE4E6301DEF284FEB637DAE756E0E0F79E9E4C2979D6B9091F902FB2C0596FDE64FD6BB559FBBF65C5B9BDD567C52BDB37A6D7F222CFBB94BFF39302B94A887A70400E6F05A7EBB3A6395F5AB0C913205DF3CBCDCD59AB70278C6DF50074580F4B79C12FD6B8C1FF58A35EDD29D02451CA0B7ECE93DA3E4C534EEBEF51BD030000FFFF0300504B030414000600080000002100E9A625B882060000531B000013000000786C2F7468656D652F7468656D65312E78 + m.lcFileBinary = m.lcFileBinary + 0h6D6CEC594F6FDB3614BF0FD87720746F6D27B61B07758AD8B19BAD4D1BC46E871E6999965853A240D2497D1BDAE38001C3BA619701BBED306C2BD002BB749F265B87AD03FA15F6484AB218CB4BD2061BD6D58744227F7CFFDFE32375F5DA8388A1432224E571DBAB5DAE7A88C43E1FD338687B7786FD4B1B1E920AC763CC784CDADE9C48EFDAD6FBEF5DC59B2A241141B03E969BB8ED854A259B958AF46118CBCB3C2131CC4DB888B082571154C6021F01DD8855D6AAD56625C234F6508C23207B7B32A13E41434DD2DBCA88F718BCC64AEA019F8981264D9C15063B9ED63442CE659709748859DB033E637E34240F948718960A26DA5ED5FCBCCAD6D50ADE + m.lcFileBinary = m.lcFileBinary + 0h4C1731B5626D615DDFFCD275E982F174CDF014C128675AEBD75B577672FA06C0D432AED7EB757BB59C9E0160DF074DAD2C459AF5FE46AD93D12C80ECE332ED6EB551ADBBF802FDF525995B9D4EA7D14A65B1440DC83ED697F01BD5667D7BCDC11B90C53796F0F5CE76B7DB74F00664F1CD257CFF4AAB5977F10614321A4F97D0DAA1FD7E4A3D874C38DB2D856F007CA39AC2172888863CBA348B098FD5AA588BF07D2EFA00D04086158D919A2764827D88E22E8E468262CD006F125C98B143BE5C1AD2BC90F4054D54DBFB30C190110B7AAF9E7FFFEAF953F4EAF993E387CF8E1FFE74FCE8D1F1C31F2D2D67E12E8E83E2C297DF7EF6E7D71FA33F9E7EF3F2 + m.lcFileBinary = m.lcFileBinary + 0hF117E57859C4FFFAC327BFFCFC793910326821D18B2F9FFCF6ECC98BAF3EFDFDBBC725F06D814745F8904644A25BE4081DF0087433867125272371BE15C3105367050E817609E99E0A1DE0AD396665B80E718D775740F128035E9FDD77641D8462A66809E71B61E400F738671D2E4A0D7043F32A5878388B8372E66256C41D607C58C6BB8B63C7B5BD590255330B4AC7F6DD903862EE331C2B1C909828A4E7F8949012EDEE51EAD8758FFA824B3E51E81E451D4C4B4D32A4232790168B7669047E9997E90CAE766CB3771775382BD37A871CBA484808CC4A841F12E698F13A9E291C95911CE288150D7E13ABB04CC8C15CF8455C4F2AF074401847BD3191B2 + m.lcFileBinary = m.lcFileBinary + 0h6CCD6D01FA169C7E0343BD2A75FB1E9B472E52283A2DA37913735E44EEF06937C45152861DD0382C623F905308518CF6B92A83EF713743F43BF801C72BDD7D9712C7DDA717823B3470445A04889E9909ED4B28D44EFD8D68FC77C59851A8C63606DE15E3B6B70D5B53594AEC9E28C1AB70FFC1C2BB8367F13E81585FDE78DED5DD7775D77BEBEBEEAA5C3E6BB55D1458A8BDBA79B07DB1E992A3954DF28432365073466E4AD3274BD82CC67D18D4EBCC0191E487A62484C7B4B83BB84060B30609AE3EA22A1C8438811EBBE66922814C490712255CC2D9CE0C97D2D678E8D3953D1936F499C1D60389D51E1FDBE1753D9C1D0D723266CB09CCF93363B4AE09 + m.lcFileBinary = m.lcFileBinary + 0h9C95D9FA959428A8FD3ACC6A5AA83373AB19D14CA973B8E52A830F975583C1DC9AD08520E85DC0CA4D38A26BD67036C18C8CB5DDED069CB9C578E1225D24433C26A98FB4DECB3EAA192765B1622E0320764A7CA4CF79A758ADC0ADA5C9BE01B7B338A9C8AEBE825DE6BD37F15216C10B2FE9BC3D918E2C2E26278BD151DB6B35D61A1EF271D2F62670AC85C72801AF4BDDF86116C0DD90AF840DFB5393D964F9C29BAD4C3137096A705361EDBEA4B053071221D50E96A10D0D339586008B35272BFF5A03CC7A510AD8487F0D29D6372018FE3529C08EAE6BC964427C5574766144DBCEBEA6A594CF141183707C84466C260E30B85F872AE833A6126E274C45 + m.lcFileBinary = m.lcFileBinary + 0hD02F7095A6AD6DA6DCE29C265DF102CBE0EC38664988D372AB5334CB640B37799CCB60DE0AE2816EA5B21BE5CEAF8A49F90B52A518C6FF3355F47E02D705EB63ED011F6E7205463A5FDB1E172AE450859290FA7D018D83A91D102D701D0BD31054709F6CFE0B72A8FFDB9CB3344C5AC3A94F1DD000090AFB910A0521FB50964CF49D42AC96EE5D96244B0999882A882B132BF6881C1236D435B0A9F7760F8510EAA69AA465C0E04EC69FFB9E66D028D04D4E31DF9C1A92EFBD3607FEE9CEC7263328E5D661D3D064F6CF452CD955ED7AB33CDB7B8B8AE889459B55CFB2029815B682569AF6AF29C239B75A5BB196345E6B64C28117973586C1BC214AE0D207 + m.lcFileBinary = m.lcFileBinary + 0hE93FB0FF51E133FB71426FA8437E00B515C1B7064D0CC206A2FA926D3C902E907670048D931DB4C1A44959D3A6AD93B65AB6595F70A79BF33D616C2DD959FC7D4E63E7CD99CBCEC9C58B34766A61C7D6766CA5A9C1B32753148626D941C638C67CD52A7E78E2A3FBE0E81DB8E29F31254D30C1672581A1F51C983C80E4B71CCDD2ADBF000000FFFF0300504B030414000600080000002100075F38D31E010000C701000018000000786C2F776F726B7368656574732F7368656574312E786D6C8C514D6BC3300CBD0FF61F8CEE8BD38D6EA324298352B6C360ECEBEE2472626A5BC156D7EDDFCF496819F4B29B3EDE7BD2938AF5B7B3E20B4334E44B586439 + m.lcFileBinary = m.lcFileBinary + 0h08F40DB5C677257CBC6FAFEE414456BE55963C96F08311D6D5E54571A0B08B3D228BA4E063093DF3B09232363D3A15331AD0A78EA6E014A73474320E01553B919C95D7797E2B9D321E668555F88F06696D1ADC50B377E87916096815A7FD636F860855D19AD41B0D8980BA848705C8AA98C67E1A3CC43FB16055BFA1C586B14DEE418CAE6AA2DD087C4AA57CA4CA33EE7672F512448B5AED2DBFD2E1114DD77312599EA66D14AB441F5487CF2A74C6476151274C9EDD8108337E8A9986A9BA04511333B963D6A783613A4C9EDD80D0447C4CC6B54E2FA87E010000FFFF0300504B0304140006000800000021000ACFE8CF3F0100005102000011000801646F + m.lcFileBinary = m.lcFileBinary + 0h6350726F70732F636F72652E786D6C20A2040128A0000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h0000000000000000000000000000000000000000000000007C92CB6AC3301045F785FE83D1DE969C904785ED405BB26AA0509794EE8434494CAD07925A277F5FD94E5C0742411BCDBD73E66A50B63ACA3AFA01EB2AAD7294260445A0B81695DAE7E8BD5CC74B1439CF9460B55690A31338B42AEEEF326E28D7165EAD36607D052E0A24E52837393A786F28C68E1F40329704870AE24E5BC97CB8DA3D368C7FB13DE00921732CC133C13CC32D303603119D91820F48F36DEB0E2038861A2428EF709AA4F8CFEBC14A77B3A153464E59F993096F3AC71DB305EFC5C17D74D5606C9A2669A65D8C903FC51F9B97B7EEA971A5DA5D7140452638E51698D7B6C8F0 + m.lcFileBinary = m.lcFileBinary + 0hF812165733E73761C7BB0AC4E329E8376A8277717B08882804A07DDC8BB29D3E3D976B54B43B8CC9439CCE4B4268773EDB9157FD6DA0BE20CF83FF272E5B2259941342A70B3A9B8D8817409FFBFA1314BF000000FFFF0300504B0304140006000800000021006F7E771280010000FE02000010000801646F6350726F70732F6170702E786D6C20A2040128A000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009C92416BE3301085EF85FD0F46F7464E589625C82AA569E9614B0349B367551EC7228A64345393F4D7776C93C6D9EDA93A8DE63D9E3E8DA46E0E7B9FB590D0C55088E9241719041B4B17B68578593F5CFF16199209A5F13140218E80E246FFB852CB141B48E400338E0858889AA8994B + m.lcFileBinary = m.lcFileBinary + 0h89B686BDC109CB81952AA6BD21DEA6AD8C55E52C2CA27DDB432039CBF35F120E04A184F2BAF90C1443E2BCA5EF8696D1767CB8591F1B06D6EAB669BCB386F896FAC9D914315694DD1F2C7825C7A262BA15D8B7E4E8A87325C75BB5B2C6C31D07EBCA780425CF0DF508A61BDAD2B8845AB5346FC1524C19BA771EDB4C64AF06A1C329446B92338118ABB30D9BBEF60D52D27F63DA610D40A8241B86665F8EBDE3DAFDD4D3DEC0C5A5B10B184058B8445C3BF280CFD5D224FA82783A26EE1906DE0167D5F10D678EF9FA2BF349FF64FF7161872FCD3A2E0CC16976974DB5AA4D8292C77DD2CF0DF5C8634BBE0BB9AB4DD84279F2FC2F742FBD19BEB39ECE2639 + m.lcFileBinary = m.lcFileBinary + 0hAFFE814F3D25CF1F577F000000FFFF0300504B01022D001400060008000000210038088E4F60010000F20300001300000000000000000000000000000000005B436F6E74656E745F54797065735D2E786D6C504B01022D0014000600080000002100B5553023F50000004C0200000B000000000000000000000000006C0300005F72656C732F2E72656C73504B01022D00140006000800000021008D87DA70E00000002D0200001A0000000000000000000000000058060000786C2F5F72656C732F776F726B626F6F6B2E786D6C2E72656C73504B01022D0014000600080000002100A460FAFF52010000270200000F000000000000000000000000007808 + m.lcFileBinary = m.lcFileBinary + 0h0000786C2F776F726B626F6F6B2E786D6C504B01022D0014000600080000002100A083C4AEA3010000640300000D00000000000000000000000000F7090000786C2F7374796C65732E786D6C504B01022D0014000600080000002100E9A625B882060000531B00001300000000000000000000000000C50B0000786C2F7468656D652F7468656D65312E786D6C504B01022D0014000600080000002100075F38D31E010000C7010000180000000000000000000000000078120000786C2F776F726B7368656574732F7368656574312E786D6C504B01022D00140006000800000021000ACFE8CF3F010000510200001100000000000000000000000000CC13 + m.lcFileBinary = m.lcFileBinary + 0h0000646F6350726F70732F636F72652E786D6C504B01022D00140006000800000021006F7E771280010000FE020000100000000000000000000000000042160000646F6350726F70732F6170702E786D6C504B050600000000090009003E020000F81800000000 + OTHERWISE && XLS + m.lcFileBinary = 0hD0CF11E0A1B11AE1000000000000000000000000000000003E000300FEFF0900060000000000000000000000010000000100000000000000001000001A00000001000000FEFFFFFF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + m.lcFileBinary = m.lcFileBinary + 0hFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + m.lcFileBinary = m.lcFileBinary + 0hFFFFFDFFFFFF1C000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F00000010000000110000001200000013000000140000001500000016000000170000001800000019000000FEFFFFFFFEFFFFFF1D000000FEFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + m.lcFileBinary = m.lcFileBinary + 0hFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + m.lcFileBinary = m.lcFileBinary + 0hFFFFFFFF52006F006F007400200045006E00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500FFFFFFFFFFFFFFFF020000002008020000000000C00000000000004600000000000000000000000030C843AA2911C9011B000000800200000000000057006F0072006B0062006F006F006B000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200020104000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000000000000000000000000000002000000892F00 + m.lcFileBinary = m.lcFileBinary + 0h00000000000500530075006D006D0061007200790049006E0066006F0072006D006100740069006F006E000000000000000000000000000000000000000000000000000000280002010100000003000000FFFFFFFF00000000000000000000000000000000000000000000000000000000000000000000000000000000C800000000000000050044006F00630075006D0065006E007400530075006D006D0061007200790049006E0066006F0072006D006100740069006F006E000000000000000000000038000201FFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000000000000000000000000000004000000E000 + m.lcFileBinary = m.lcFileBinary + 0h0000000000000908100000060500A91FCD07C100010006040000E1000200B004C10002000000E20000005C0070000200002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202042000200B004610102000000C00100003D01020001009C0002001000190002000000120002000000130002000000AF0102000000BC01020000003D001200F0006900D5394A1F380000000000010058024000020000008D00020000002200020000 + m.lcFileBinary = m.lcFileBinary + 0h000E0002000100B70102000000DA000200000031001E00DC000000080090010000000200AA0701430061006C00690062007200690031001E00DC000000080090010000000200AA0701430061006C00690062007200690031001E00DC000000080090010000000200AA0701430061006C00690062007200690031001E00DC000000080090010000000200AA0701430061006C00690062007200690031001E00DC000000080090010000000200AA0701430061006C00690062007200690031001E00680101003800BC020000000200AA0701430061006D00620072006900610031001E002C0101003800BC020000000200AA0701430061006C00690062007200 + m.lcFileBinary = m.lcFileBinary + 0h690031001E00040101003800BC020000000200AA0701430061006C00690062007200690031001E00DC0001003800BC020000000200AA0701430061006C00690062007200690031001E00DC000000110090010000000200AA0701430061006C00690062007200690031001E00DC000000140090010000000200AA0701430061006C00690062007200690031001E00DC0000003C0090010000000200AA0701430061006C00690062007200690031001E00DC0000003E0090010000000200AA0701430061006C00690062007200690031001E00DC0001003F00BC020000000200AA0701430061006C00690062007200690031001E00DC0001003400BC02000000 + m.lcFileBinary = m.lcFileBinary + 0h0200AA0701430061006C00690062007200690031001E00DC000000340090010000000200AA0701430061006C00690062007200690031001E00DC0001000900BC020000000200AA0701430061006C00690062007200690031001E00DC0000000A0090010000000200AA0701430061006C00690062007200690031001E00DC000200170090010000000200AA0701430061006C00690062007200690031001E00DC0001000800BC020000000200AA0701430061006C00690062007200690031001E00DC000000090090010000000200AA0701430061006C0069006200720069001E041C000500170000222422232C2323305F293B5C28222422232C2323305C29 + m.lcFileBinary = m.lcFileBinary + 0h1E04210006001C0000222422232C2323305F293B5B5265645D5C28222422232C2323305C291E04220007001D0000222422232C2323302E30305F293B5C28222422232C2323302E30305C291E0427000800220000222422232C2323302E30305F293B5B5265645D5C28222422232C2323302E30305C291E0437002A003200005F282224222A20232C2323305F293B5F282224222A205C28232C2323305C293B5F282224222A20222D225F293B5F28405F291E042E0029002900005F282A20232C2323305F293B5F282A205C28232C2323305C293B5F282A20222D225F293B5F28405F291E043F002C003A00005F282224222A20232C2323302E30305F293B5F + m.lcFileBinary = m.lcFileBinary + 0h282224222A205C28232C2323302E30305C293B5F282224222A20222D223F3F5F293B5F28405F291E0436002B003100005F282A20232C2323302E30305F293B5F282A205C28232C2323302E30305C293B5F282A20222D223F3F5F293B5F28405F29E000140000000000F5FF200000000000000000000000C020E000140000000000F5FF200000000000000000000000C020E000140000000000F5FF200000000000000000000000C020E000140000000000F5FF200000000000000000000000C020E000140000000000F5FF200000000000000000000000C020E000140000000000F5FF200000000000000000000000C020E000140000000000F5FF20000000 + m.lcFileBinary = m.lcFileBinary + 0h0000000000000000C020E000140000000000F5FF200000000000000000000000C020E000140000000000F5FF200000000000000000000000C020E000140000000000F5FF200000000000000000000000C020E000140000000000F5FF200000000000000000000000C020E000140000000000F5FF200000000000000000000000C020E000140000000000F5FF200000000000000000000000C020E000140000000000F5FF200000000000000000000000C020E000140000000000F5FF200000000000000000000000C020E0001400000000000100200000000000000000000002C020E000140005000000F5FF200000B400000000000000049F20E000140005 + m.lcFileBinary = m.lcFileBinary + 0h000000F5FF200000B40000000000000004AD20E000140005000000F5FF200000B40000000000000004AA20E000140005000000F5FF200000B40000000000000004AE20E000140005000000F5FF200000B400000000000000049B20E000140005000000F5FF200000B40000000000000004AF20E000140005000000F5FF200000B40000000000000004AC20E000140005000000F5FF200000B400000000000000049D20E000140005000000F5FF200000B400000000000000048B20E000140005000000F5FF200000B40000000000000004AE20E000140005000000F5FF200000B40000000000000004AC20E000140005000000F5FF200000B4000000000000 + m.lcFileBinary = m.lcFileBinary + 0h0004B320E000140015000000F5FF200000B400000000000000049E20E000140015000000F5FF200000B400000000000000049D20E000140015000000F5FF200000B400000000000000048B20E000140015000000F5FF200000B40000000000000004A420E000140015000000F5FF200000B40000000000000004B120E000140015000000F5FF200000B40000000000000004B420E000140015000000F5FF200000B40000000000000004BE20E000140015000000F5FF200000B400000000000000048A20E000140015000000F5FF200000B40000000000000004B920E000140015000000F5FF200000B40000000000000004A420E000140015000000F5FF20 + m.lcFileBinary = m.lcFileBinary + 0h0000B40000000000000004B120E000140015000000F5FF200000B40000000000000004B520E00014000B000000F5FF200000B40000000000000004AD20E00014000F000000F5FF200000941111970B970B00049620E000140011000000F5FF200000946666BF1FBF1F0004B720E000140005002B00F5FF200000F80000000000000000C020E000140005002900F5FF200000F80000000000000000C020E000140005002C00F5FF200000F80000000000000000C020E000140005002A00F5FF200000F80000000000000000C020E000140013000000F5FF200000F40000000000000000C020E00014000A000000F5FF200000B40000000000000004AA20E000 + m.lcFileBinary = m.lcFileBinary + 0h140007000000F5FF200000D400500000001F0000C020E000140008000000F5FF200000D400500000000B0000C020E000140009000000F5FF200000D400200000000F0000C020E000140009000000F5FF200000F40000000000000000C020E00014000D000000F5FF200000941111970B970B0004AF20E000140010000000F5FF200000D400600000001A0000C020E00014000C000000F5FF200000B40000000000000004AB20E000140005000000F5FF2000009C1111160B160B00049A20E00014000E000000F5FF200000941111BF1FBF1F00049620E000140005000900F5FF200000F80000000000000000C020E000140006000000F5FF200000F4000000 + m.lcFileBinary = m.lcFileBinary + 0h0000000000C020E000140014000000F5FF200000D4006100003E1F0000C020E000140012000000F5FF200000F40000000000000000C0207C0814007C080000000000000000000000003E00DED9EE787D082D007D080000000000000000000000000000000002000D001400030000000100000030305C293B5F282A0E000500027D082D007D080000000000000000000000000100000002000D001400030000000100000030305C293B5F282A0E000500027D082D007D080000000000000000000000000200000002000D001400030000000100000030305C293B5F282A0E000500027D082D007D080000000000000000000000000300000002000D00140003 + m.lcFileBinary = m.lcFileBinary + 0h0000000100000030305C293B5F282A0E000500027D082D007D080000000000000000000000000400000002000D001400030000000100000030305C293B5F282A0E000500027D082D007D080000000000000000000000000500000002000D001400030000000100000030305C293B5F282A0E000500027D082D007D080000000000000000000000000600000002000D001400030000000100000030305C293B5F282A0E000500027D082D007D080000000000000000000000000700000002000D001400030000000100000030305C293B5F282A0E000500027D082D007D080000000000000000000000000800000002000D001400030000000100000030305C + m.lcFileBinary = m.lcFileBinary + 0h293B5F282A0E000500027D082D007D080000000000000000000000000900000002000D001400030000000100000030305C293B5F282A0E000500027D082D007D080000000000000000000000000A00000002000D001400030000000100000030305C293B5F282A0E000500027D082D007D080000000000000000000000000B00000002000D001400030000000100000030305C293B5F282A0E000500027D082D007D080000000000000000000000000C00000002000D001400030000000100000030305C293B5F282A0E000500027D082D007D080000000000000000000000000D00000002000D001400030000000100000030305C293B5F282A0E00050002 + m.lcFileBinary = m.lcFileBinary + 0h7D082D007D080000000000000000000000000E00000002000D001400030000000100000030305C293B5F282A0E000500027D082D007D080000000000000000000000000F00000002000D001400030000000100000030305C293B5F282A0E000500027D082D007D080000000000000000000000002B00000002000D001400030000000100000030305C293B5F282A0E000500027D082D007D080000000000000000000000002C00000002000D001400030000000100000030305C293B5F282A0E000500027D082D007D080000000000000000000000002D00000002000D001400030000000100000030305C293B5F282A0E000500027D082D007D0800000000 + m.lcFileBinary = m.lcFileBinary + 0h00000000000000002E00000002000D001400030000000100000030305C293B5F282A0E000500027D082D007D080000000000000000000000003A00000002000D001400030000000100000030305C293B5F282A0E000500027D082D007D080000000000000000000000003B00000002000D001400030000000300000030305C293B5F282A0E000500017D0841007D080000000000000000000000003100000003000D001400030000000300000030305C293B5F282A0E000500020800140003000000040000003B5F28405F2920207D0841007D080000000000000000000000003200000003000D001400030000000300000030305C293B5F282A0E00050002 + m.lcFileBinary = m.lcFileBinary + 0h080014000300FF3F040000003B5F28405F2920207D0841007D080000000000000000000000003300000003000D001400030000000300000030305C293B5F282A0E000500020800140003003233040000003B5F28405F2920207D082D007D080000000000000000000000003400000002000D001400030000000300000030305C293B5F282A0E000500027D0841007D080000000000000000000000003000000003000D00140002000000006100FF30305C293B5F282A0E000500020400140002000000C6EFCEFF3B5F28405F2920207D0841007D080000000000000000000000002800000003000D001400020000009C0006FF30305C293B5F282A0E000500 + m.lcFileBinary = m.lcFileBinary + 0h020400140002000000FFC7CEFF3B5F28405F2920207D0841007D080000000000000000000000003700000003000D001400020000009C6500FF30305C293B5F282A0E000500020400140002000000FFEB9CFF3B5F28405F2920207D0891007D080000000000000000000000003500000007000D001400020000003F3F76FF30305C293B5F282A0E000500020400140002000000FFCC99FF3B5F28405F29202007001400020000007F7F7FFF202020202020202008001400020000007F7F7FFF202020202020202009001400020000007F7F7FFF00000000000000000A001400020000007F7F7FFF00000000000000007D0891007D0800000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h00003900000007000D001400020000003F3F3FFF30305C293B5F282A0E000500020400140002000000F2F2F2FF3B5F28405F29202007001400020000003F3F3FFF202020202020202008001400020000003F3F3FFF202020202020202009001400020000003F3F3FFF00000000000000000A001400020000003F3F3FFF00000000000000007D0891007D080000000000000000000000002900000007000D00140002000000FA7D00FF30305C293B5F282A0E000500020400140002000000F2F2F2FF3B5F28405F29202007001400020000007F7F7FFF202020202020202008001400020000007F7F7FFF202020202020202009001400020000007F7F7FFF00 + m.lcFileBinary = m.lcFileBinary + 0h000000000000000A001400020000007F7F7FFF00000000000000007D0841007D080000000000000000000000003600000003000D00140002000000FA7D00FF30305C293B5F282A0E000500020800140002000000FF8001FF3B5F28405F2920207D0891007D080000000000000000000000002A00000007000D001400030000000000000030305C293B5F282A0E000500020400140002000000A5A5A5FF3B5F28405F29202007001400020000003F3F3FFF202020202020202008001400020000003F3F3FFF202020202020202009001400020000003F3F3FFF00000000000000000A001400020000003F3F3FFF00000000000000007D082D007D0800000000 + m.lcFileBinary = m.lcFileBinary + 0h00000000000000003D00000002000D00140002000000FF0000FF30305C293B5F282A0E000500027D0891007D080000000000000000000000003800000007000D001400030000000100000030305C293B5F282A0E000500020400140002000000FFFFCCFF3B5F28405F2920200700140002000000B2B2B2FF20202020202020200800140002000000B2B2B2FF20202020202020200900140002000000B2B2B2FF00000000000000000A00140002000000B2B2B2FF00000000000000007D082D007D080000000000000000000000002F00000002000D001400020000007F7F7FFF30305C293B5F282A0E000500027D0855007D08000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h3C00000004000D001400030000000100000030305C293B5F282A0E000500020700140003000000040000003B5F28405F29202008001400030000000400000020202020202020207D0841007D080000000000000000000000002200000003000D001400030000000000000030305C293B5F282A0E000500020400140003000000040000003B5F28405F2920207D0841007D080000000000000000000000001000000003000D001400030000000100000030305C293B5F282A0E000500020400140003006566040000003B5F28405F2920207D0841007D080000000000000000000000001600000003000D001400030000000100000030305C293B5F282A0E00 + m.lcFileBinary = m.lcFileBinary + 0h050002040014000300CC4C040000003B5F28405F2920207D0841007D080000000000000000000000001C00000003000D001400030000000000000030305C293B5F282A0E000500020400140003003233040000003B5F28405F2920207D0841007D080000000000000000000000002300000003000D001400030000000000000030305C293B5F282A0E000500020400140003000000050000003B5F28405F2920207D0841007D080000000000000000000000001100000003000D001400030000000100000030305C293B5F282A0E000500020400140003006566050000003B5F28405F2920207D0841007D080000000000000000000000001700000003000D + m.lcFileBinary = m.lcFileBinary + 0h001400030000000100000030305C293B5F282A0E00050002040014000300CC4C050000003B5F28405F2920207D0841007D080000000000000000000000001D00000003000D001400030000000000000030305C293B5F282A0E000500020400140003003233050000003B5F28405F2920207D0841007D080000000000000000000000002400000003000D001400030000000000000030305C293B5F282A0E000500020400140003000000060000003B5F28405F2920207D0841007D080000000000000000000000001200000003000D001400030000000100000030305C293B5F282A0E000500020400140003006566060000003B5F28405F2920207D084100 + m.lcFileBinary = m.lcFileBinary + 0h7D080000000000000000000000001800000003000D001400030000000100000030305C293B5F282A0E00050002040014000300CC4C060000003B5F28405F2920207D0841007D080000000000000000000000001E00000003000D001400030000000000000030305C293B5F282A0E000500020400140003003233060000003B5F28405F2920207D0841007D080000000000000000000000002500000003000D001400030000000000000030305C293B5F282A0E000500020400140003000000070000003B5F28405F2920207D0841007D080000000000000000000000001300000003000D001400030000000100000030305C293B5F282A0E00050002040014 + m.lcFileBinary = m.lcFileBinary + 0h0003006566070000003B5F28405F2920207D0841007D080000000000000000000000001900000003000D001400030000000100000030305C293B5F282A0E00050002040014000300CC4C070000003B5F28405F2920207D0841007D080000000000000000000000001F00000003000D001400030000000000000030305C293B5F282A0E000500020400140003003233070000003B5F28405F2920207D0841007D080000000000000000000000002600000003000D001400030000000000000030305C293B5F282A0E000500020400140003000000080000003B5F28405F2920207D0841007D080000000000000000000000001400000003000D001400030000 + m.lcFileBinary = m.lcFileBinary + 0h000100000030305C293B5F282A0E000500020400140003006566080000003B5F28405F2920207D0841007D080000000000000000000000001A00000003000D001400030000000100000030305C293B5F282A0E00050002040014000300CC4C080000003B5F28405F2920207D0841007D080000000000000000000000002000000003000D001400030000000000000030305C293B5F282A0E000500020400140003003233080000003B5F28405F2920207D0841007D080000000000000000000000002700000003000D001400030000000000000030305C293B5F282A0E000500020400140003000000090000003B5F28405F2920207D0841007D0800000000 + m.lcFileBinary = m.lcFileBinary + 0h00000000000000001500000003000D001400030000000100000030305C293B5F282A0E000500020400140003006566090000003B5F28405F2920207D0841007D080000000000000000000000001B00000003000D001400030000000100000030305C293B5F282A0E00050002040014000300CC4C090000003B5F28405F2920207D0841007D080000000000000000000000002100000003000D001400030000000000000030305C293B5F282A0E000500020400140003003233090000003B5F28405F2920209302120010000D0000323025202D20416363656E743192084D0092080000000000000000000001041EFF0D0032003000250020002D0020004100 + m.lcFileBinary = m.lcFileBinary + 0h6300630065006E00740031000000030001000C0007046566DBE5F1FF05000C0007010000000000FF25000500029302120011000D0000323025202D20416363656E743292084D00920800000000000000000000010422FF0D0032003000250020002D00200041006300630065006E00740032000000030001000C0007056566F2DDDCFF05000C0007010000000000FF25000500029302120012000D0000323025202D20416363656E743392084D00920800000000000000000000010426FF0D0032003000250020002D00200041006300630065006E00740033000000030001000C0007066566EAF1DDFF05000C0007010000000000FF250005000293021200 + m.lcFileBinary = m.lcFileBinary + 0h13000D0000323025202D20416363656E743492084D0092080000000000000000000001042AFF0D0032003000250020002D00200041006300630065006E00740034000000030001000C0007076566E5E0ECFF05000C0007010000000000FF25000500029302120014000D0000323025202D20416363656E743592084D0092080000000000000000000001042EFF0D0032003000250020002D00200041006300630065006E00740035000000030001000C0007086566DBEEF3FF05000C0007010000000000FF25000500029302120015000D0000323025202D20416363656E743692084D00920800000000000000000000010432FF0D0032003000250020002D + m.lcFileBinary = m.lcFileBinary + 0h00200041006300630065006E00740036000000030001000C0007096566FDE9D9FF05000C0007010000000000FF25000500029302120016000D0000343025202D20416363656E743192084D0092080000000000000000000001041FFF0D0034003000250020002D00200041006300630065006E00740031000000030001000C000704CC4CB8CCE4FF05000C0007010000000000FF25000500029302120017000D0000343025202D20416363656E743292084D00920800000000000000000000010423FF0D0034003000250020002D00200041006300630065006E00740032000000030001000C000705CC4CE6B9B8FF05000C0007010000000000FF25000500 + m.lcFileBinary = m.lcFileBinary + 0h029302120018000D0000343025202D20416363656E743392084D00920800000000000000000000010427FF0D0034003000250020002D00200041006300630065006E00740033000000030001000C000706CC4CD7E4BCFF05000C0007010000000000FF25000500029302120019000D0000343025202D20416363656E743492084D0092080000000000000000000001042BFF0D0034003000250020002D00200041006300630065006E00740034000000030001000C000707CC4CCCC0DAFF05000C0007010000000000FF2500050002930212001A000D0000343025202D20416363656E743592084D0092080000000000000000000001042FFF0D0034003000 + m.lcFileBinary = m.lcFileBinary + 0h250020002D00200041006300630065006E00740035000000030001000C000708CC4CB6DDE8FF05000C0007010000000000FF2500050002930212001B000D0000343025202D20416363656E743692084D00920800000000000000000000010433FF0D0034003000250020002D00200041006300630065006E00740036000000030001000C000709CC4CFCD5B4FF05000C0007010000000000FF2500050002930212001C000D0000363025202D20416363656E743192084D00920800000000000000000000010420FF0D0036003000250020002D00200041006300630065006E00740031000000030001000C000704323395B3D7FF05000C0007000000FFFFFF + m.lcFileBinary = m.lcFileBinary + 0hFF2500050002930212001D000D0000363025202D20416363656E743292084D00920800000000000000000000010424FF0D0036003000250020002D00200041006300630065006E00740032000000030001000C0007053233D99795FF05000C0007000000FFFFFFFF2500050002930212001E000D0000363025202D20416363656E743392084D00920800000000000000000000010428FF0D0036003000250020002D00200041006300630065006E00740033000000030001000C0007063233C2D69AFF05000C0007000000FFFFFFFF2500050002930212001F000D0000363025202D20416363656E743492084D0092080000000000000000000001042CFF0D + m.lcFileBinary = m.lcFileBinary + 0h0036003000250020002D00200041006300630065006E00740034000000030001000C0007073233B2A1C7FF05000C0007000000FFFFFFFF25000500029302120020000D0000363025202D20416363656E743592084D00920800000000000000000000010430FF0D0036003000250020002D00200041006300630065006E00740035000000030001000C000708323393CDDDFF05000C0007000000FFFFFFFF25000500029302120021000D0000363025202D20416363656E743692084D00920800000000000000000000010434FF0D0036003000250020002D00200041006300630065006E00740036000000030001000C0007093233FAC090FF05000C000700 + m.lcFileBinary = m.lcFileBinary + 0h0000FFFFFFFF250005000293020C002200070000416363656E74319208410092080000000000000000000001041DFF070041006300630065006E00740031000000030001000C00070400004F81BDFF05000C0007000000FFFFFFFF250005000293020C002300070000416363656E743292084100920800000000000000000000010421FF070041006300630065006E00740032000000030001000C0007050000C0504DFF05000C0007000000FFFFFFFF250005000293020C002400070000416363656E743392084100920800000000000000000000010425FF070041006300630065006E00740033000000030001000C00070600009BBB59FF05000C000700 + m.lcFileBinary = m.lcFileBinary + 0h0000FFFFFFFF250005000293020C002500070000416363656E743492084100920800000000000000000000010429FF070041006300630065006E00740034000000030001000C00070700008064A2FF05000C0007000000FFFFFFFF250005000293020C002600070000416363656E74359208410092080000000000000000000001042DFF070041006300630065006E00740035000000030001000C00070800004BACC6FF05000C0007000000FFFFFFFF250005000293020C002700070000416363656E743692084100920800000000000000000000010431FF070041006300630065006E00740036000000030001000C0007090000F79646FF05000C000700 + m.lcFileBinary = m.lcFileBinary + 0h0000FFFFFFFF25000500029302080028000300004261649208390092080000000000000000000001011BFF03004200610064000000030001000C0005FF0000FFC7CEFF05000C0005FF00009C0006FF25000500029302100029000B000043616C63756C6174696F6E92088100920800000000000000000000010216FF0B00430061006C00630075006C006100740069006F006E000000070001000C0005FF0000F2F2F2FF05000C0005FF0000FA7D00FF250005000206000E0005FF00007F7F7FFF010007000E0005FF00007F7F7FFF010008000E0005FF00007F7F7FFF010009000E0005FF00007F7F7FFF010093020F002A000A0000436865636B2043656C + m.lcFileBinary = m.lcFileBinary + 0h6C92087F00920800000000000000000000010217FF0A0043006800650063006B002000430065006C006C000000070001000C0005FF0000A5A5A5FF05000C0007000000FFFFFFFF250005000206000E0005FF00003F3F3FFF060007000E0005FF00003F3F3FFF060008000E0005FF00003F3F3FFF060009000E0005FF00003F3F3FFF0600930204002B8003FF92082000920800000000000000000000010503FF050043006F006D006D00610000000000930204002C8006FF92082800920800000000000000000000010506FF090043006F006D006D00610020005B0030005D0000000000930204002D8004FF92082600920800000000000000000000010504 + m.lcFileBinary = m.lcFileBinary + 0hFF0800430075007200720065006E006300790000000000930204002E8007FF92082E00920800000000000000000000010507FF0C00430075007200720065006E006300790020005B0030005D0000000000930215002F001000004578706C616E61746F7279205465787492084700920800000000000000000000010235FF10004500780070006C0061006E00610074006F0072007900200054006500780074000000020005000C0005FF00007F7F7FFF2500050002930209003000040000476F6F6492083B0092080000000000000000000001011AFF040047006F006F0064000000030001000C0005FF0000C6EFCEFF05000C0005FF0000006100FF250005 + m.lcFileBinary = m.lcFileBinary + 0h000293020E00310009000048656164696E67203192084700920800000000000000000000010310FF0900480065006100640069006E006700200031000000030005000C00070300001F497DFF250005000207000E00070400004F81BDFF050093020E00320009000048656164696E67203292084700920800000000000000000000010311FF0900480065006100640069006E006700200032000000030005000C00070300001F497DFF250005000207000E000704FF3FA8C0DEFF050093020E00330009000048656164696E67203392084700920800000000000000000000010312FF0900480065006100640069006E006700200033000000030005000C0007 + m.lcFileBinary = m.lcFileBinary + 0h0300001F497DFF250005000207000E000704323395B3D7FF020093020E00340009000048656164696E67203492083900920800000000000000000000010313FF0900480065006100640069006E006700200034000000020005000C00070300001F497DFF250005000293020A003500050000496E70757492087500920800000000000000000000010214FF050049006E007000750074000000070001000C0005FF0000FFCC99FF05000C0005FF00003F3F76FF250005000206000E0005FF00007F7F7FFF010007000E0005FF00007F7F7FFF010008000E0005FF00007F7F7FFF010009000E0005FF00007F7F7FFF01009302100036000B00004C696E6B6564 + m.lcFileBinary = m.lcFileBinary + 0h2043656C6C92084B00920800000000000000000000010218FF0B004C0069006E006B00650064002000430065006C006C000000030005000C0005FF0000FA7D00FF250005000207000E0005FF0000FF8001FF060093020C0037000700004E65757472616C9208410092080000000000000000000001011CFF07004E00650075007400720061006C000000030001000C0005FF0000FFEB9CFF05000C0005FF00009C6500FF250005000293020400008000FF92083300920800000000000000000000010100FF06004E006F0072006D0061006C000000020005000C0007010000000000FF25000500029302090038000400004E6F746592086200920800000000 + m.lcFileBinary = m.lcFileBinary + 0h00000000000001020AFF04004E006F00740065000000050001000C0005FF0000FFFFCCFF06000E0005FF0000B2B2B2FF010007000E0005FF0000B2B2B2FF010008000E0005FF0000B2B2B2FF010009000E0005FF0000B2B2B2FF010093020B0039000600004F757470757492087700920800000000000000000000010215FF06004F00750074007000750074000000070001000C0005FF0000F2F2F2FF05000C0005FF00003F3F3FFF250005000206000E0005FF00003F3F3FFF010007000E0005FF00003F3F3FFF010008000E0005FF00003F3F3FFF010009000E0005FF00003F3F3FFF0100930204003A8005FF9208240092080000000000000000000001 + m.lcFileBinary = m.lcFileBinary + 0h0505FF0700500065007200630065006E0074000000000093020A003B000500005469746C659208310092080000000000000000000001030FFF05005400690074006C0065000000020005000C00070300001F497DFF250005000193020A003C00050000546F74616C92084D00920800000000000000000000010319FF050054006F00740061006C000000040005000C0007010000000000FF250005000206000E00070400004F81BDFF010007000E00070400004F81BDFF0600930211003D000C00005761726E696E67205465787492083F0092080000000000000000000001020BFF0C005700610072006E0069006E00670020005400650078007400000002 + m.lcFileBinary = m.lcFileBinary + 0h0005000C0005FF0000FF0000FF25000500028E0858008E080000000000000000000090000000110011005400610062006C0065005300740079006C0065004D0065006400690075006D0039005000690076006F0074005300740079006C0065004C0069006700680074003100360060010200000085000E00032E0000000006005368656574319A0818009A0800000000000000000000010000000000000001000000A3081000A30800000000000000000000000000008C00040001000100C1010800C10100001DEB0100FC0008000000000000000000FF00020008006308160063080000000000000000000016000000040000000200960810009608000000 + m.lcFileBinary = m.lcFileBinary + 0h0000000000000042E501009B0810009B0800000000000000000000010000008C0810008C0800000000000000000000000000000A0000000908100000061000A91FCD07C1000100060400000B021000000000000000000000000000152F00000D00020001000C00020064000F000200010011000200000010000800FCA9F1D24D62503F5F00020001002A00020000002B00020000008200020001008000080000000000000000002502040000002C0181000200C104140000001500000083000200000084000200000026000800666666666666E63F27000800666666666666E63F28000800000000000000E83F29000800000000000000E83FA10022000000 + m.lcFileBinary = m.lcFileBinary + 0h2C01010001000100040042E50100333333333333D33F333333333333D33F74009C0826009C0800000000000000000000000000000000000000000000000000003C33000000000000000055000200080000020E0000000000000000000000000000003E021200B606000000004000000000000000000000008B0810008B0800000000000000000000000002001D000F0003000000000000010000000000000067081700670800000000000000000000020001FFFFFFFF034400000A0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000200000003000000FEFFFFFF050000000600000007000000FEFFFFFF09000000FEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + m.lcFileBinary = m.lcFileBinary + 0hFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + m.lcFileBinary = m.lcFileBinary + 0hFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFF0000060002000000000000000000000000000000000001000000E0859FF2F94F6810AB9108002B27B3D930000000980000000700000001000000400000000400000048000000080000005400000012000000600000000C000000780000000D00000084000000130000009000000002000000E40400001E00000004000000000000001E00000004000000000000001E000000100000004D6963726F736F667420457863656C004000000000C07C0D23D9C601400000000086FCA92911C90103000000000000 + m.lcFileBinary = m.lcFileBinary + 0h000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FEFF000006000200000000000000000000000000000000000100000002D5CDD59C2E1B10939708002B2CF9AE30000000B000000008000000010000004800000017000000500000000B000000580000001000000060000000130000006800000016000000700000000D000000780000000C0000008B00000002000000E40400000300000000000C000B000000000000000B000000000000000B000000000000000B000000000000001E1000000100000007000000536865657431000C100000020000001E0000 + m.lcFileBinary = m.lcFileBinary + 0h000B000000576F726B73686565747300030000000100000000000000000000000000000000000000000000000000000000000000000000000000010043006F006D0070004F0062006A0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000200FFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000000000000800000072000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FF + m.lcFileBinary = m.lcFileBinary + 0hFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0hFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100FEFF030A0000FFFFFFFF2008020000000000C000000000000046260000004D6963726F736F6674204F666669636520457863656C203230303320576F726B736865657400060000004269666638000E000000457863656C2E53686565742E3800F439B271000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + ENDCASE + IF !EMPTY(m.lcFileBinary) + IF STRTOFILE(m.lcFileBinary, m.tcExcelFile, 0) > 0 + m.llReturn = .T. + ENDIF + ENDIF + ENDIF + RETURN m.llReturn +ENDFUNC \ No newline at end of file diff --git a/COMUN/utile/GridExtras/gridextrasselect.vct b/COMUN/utile/GridExtras/gridextrasselect.vct new file mode 100644 index 0000000..01b8c30 Binary files /dev/null and b/COMUN/utile/GridExtras/gridextrasselect.vct differ diff --git a/COMUN/utile/GridExtras/gridextrasselect.vcx b/COMUN/utile/GridExtras/gridextrasselect.vcx new file mode 100644 index 0000000..4c6f832 Binary files /dev/null and b/COMUN/utile/GridExtras/gridextrasselect.vcx differ diff --git a/COMUN/utile/GridExtras/gridfunctions16.bmp b/COMUN/utile/GridExtras/gridfunctions16.bmp new file mode 100644 index 0000000..e5a44a9 Binary files /dev/null and b/COMUN/utile/GridExtras/gridfunctions16.bmp differ diff --git a/COMUN/utile/GridExtras/modifica.png b/COMUN/utile/GridExtras/modifica.png new file mode 100644 index 0000000..f48da8f Binary files /dev/null and b/COMUN/utile/GridExtras/modifica.png differ diff --git a/COMUN/utile/GridExtras/nosort12.bmp b/COMUN/utile/GridExtras/nosort12.bmp new file mode 100644 index 0000000..b531a2f Binary files /dev/null and b/COMUN/utile/GridExtras/nosort12.bmp differ diff --git a/COMUN/utile/GridExtras/renunta.png b/COMUN/utile/GridExtras/renunta.png new file mode 100644 index 0000000..9a27ad1 Binary files /dev/null and b/COMUN/utile/GridExtras/renunta.png differ diff --git a/COMUN/utile/GridExtras/salveaza.png b/COMUN/utile/GridExtras/salveaza.png new file mode 100644 index 0000000..ba15628 Binary files /dev/null and b/COMUN/utile/GridExtras/salveaza.png differ diff --git a/COMUN/utile/GridExtras/sample.PJT b/COMUN/utile/GridExtras/sample.PJT new file mode 100644 index 0000000..110ef0f Binary files /dev/null and b/COMUN/utile/GridExtras/sample.PJT differ diff --git a/COMUN/utile/GridExtras/sample.SCT b/COMUN/utile/GridExtras/sample.SCT new file mode 100644 index 0000000..611b012 Binary files /dev/null and b/COMUN/utile/GridExtras/sample.SCT differ diff --git a/COMUN/utile/GridExtras/sample.exe b/COMUN/utile/GridExtras/sample.exe new file mode 100644 index 0000000..7b4d301 Binary files /dev/null and b/COMUN/utile/GridExtras/sample.exe differ diff --git a/COMUN/utile/GridExtras/sample.pjx b/COMUN/utile/GridExtras/sample.pjx new file mode 100644 index 0000000..3b11824 Binary files /dev/null and b/COMUN/utile/GridExtras/sample.pjx differ diff --git a/COMUN/utile/GridExtras/sample.scx b/COMUN/utile/GridExtras/sample.scx new file mode 100644 index 0000000..8fdbbd4 Binary files /dev/null and b/COMUN/utile/GridExtras/sample.scx differ diff --git a/COMUN/utile/GridExtras/search16.bmp b/COMUN/utile/GridExtras/search16.bmp new file mode 100644 index 0000000..e6969c5 Binary files /dev/null and b/COMUN/utile/GridExtras/search16.bmp differ diff --git a/COMUN/utile/GridExtras/showfilters16.bmp b/COMUN/utile/GridExtras/showfilters16.bmp new file mode 100644 index 0000000..5b11413 Binary files /dev/null and b/COMUN/utile/GridExtras/showfilters16.bmp differ diff --git a/COMUN/utile/GridExtras/sterge.png b/COMUN/utile/GridExtras/sterge.png new file mode 100644 index 0000000..1294132 Binary files /dev/null and b/COMUN/utile/GridExtras/sterge.png differ diff --git a/COMUN/utile/GridExtras/table_sql_view.png b/COMUN/utile/GridExtras/table_sql_view.png new file mode 100644 index 0000000..e3da5a5 Binary files /dev/null and b/COMUN/utile/GridExtras/table_sql_view.png differ diff --git a/COMUN/utile/GridExtras/table_sql_view16.png b/COMUN/utile/GridExtras/table_sql_view16.png new file mode 100644 index 0000000..f48da8f Binary files /dev/null and b/COMUN/utile/GridExtras/table_sql_view16.png differ diff --git a/COMUN/utile/GridTreeView/GTV_DESCHIS.BMP b/COMUN/utile/GridTreeView/GTV_DESCHIS.BMP new file mode 100644 index 0000000..e629654 Binary files /dev/null and b/COMUN/utile/GridTreeView/GTV_DESCHIS.BMP differ diff --git a/COMUN/utile/GridTreeView/GTV_FRUNZA.BMP b/COMUN/utile/GridTreeView/GTV_FRUNZA.BMP new file mode 100644 index 0000000..d6b95bc Binary files /dev/null and b/COMUN/utile/GridTreeView/GTV_FRUNZA.BMP differ diff --git a/COMUN/utile/GridTreeView/GTV_INCHIS.BMP b/COMUN/utile/GridTreeView/GTV_INCHIS.BMP new file mode 100644 index 0000000..58426d9 Binary files /dev/null and b/COMUN/utile/GridTreeView/GTV_INCHIS.BMP differ diff --git a/COMUN/utile/GridTreeView/GTV_MINUS.BMP b/COMUN/utile/GridTreeView/GTV_MINUS.BMP new file mode 100644 index 0000000..f01b6ca Binary files /dev/null and b/COMUN/utile/GridTreeView/GTV_MINUS.BMP differ diff --git a/COMUN/utile/GridTreeView/GTV_PLUS.BMP b/COMUN/utile/GridTreeView/GTV_PLUS.BMP new file mode 100644 index 0000000..63e3e59 Binary files /dev/null and b/COMUN/utile/GridTreeView/GTV_PLUS.BMP differ diff --git a/COMUN/utile/GridTreeView/gridtreeview.SCT b/COMUN/utile/GridTreeView/gridtreeview.SCT new file mode 100644 index 0000000..e9c4ece Binary files /dev/null and b/COMUN/utile/GridTreeView/gridtreeview.SCT differ diff --git a/COMUN/utile/GridTreeView/gridtreeview.scx b/COMUN/utile/GridTreeView/gridtreeview.scx new file mode 100644 index 0000000..77691a8 Binary files /dev/null and b/COMUN/utile/GridTreeView/gridtreeview.scx differ diff --git a/COMUN/utile/GridTreeView/gridtreeview.vct b/COMUN/utile/GridTreeView/gridtreeview.vct new file mode 100644 index 0000000..90bc605 Binary files /dev/null and b/COMUN/utile/GridTreeView/gridtreeview.vct differ diff --git a/COMUN/utile/GridTreeView/gridtreeview.vcx b/COMUN/utile/GridTreeView/gridtreeview.vcx new file mode 100644 index 0000000..243e8aa Binary files /dev/null and b/COMUN/utile/GridTreeView/gridtreeview.vcx differ diff --git a/COMUN/utile/ListProperty/Calendar.bmp b/COMUN/utile/ListProperty/Calendar.bmp new file mode 100644 index 0000000..d4e1f47 Binary files /dev/null and b/COMUN/utile/ListProperty/Calendar.bmp differ diff --git a/COMUN/utile/ListProperty/Calendar.ico b/COMUN/utile/ListProperty/Calendar.ico new file mode 100644 index 0000000..1f7b043 Binary files /dev/null and b/COMUN/utile/ListProperty/Calendar.ico differ diff --git a/COMUN/utile/ListProperty/CalendarButton.bmp b/COMUN/utile/ListProperty/CalendarButton.bmp new file mode 100644 index 0000000..a158817 Binary files /dev/null and b/COMUN/utile/ListProperty/CalendarButton.bmp differ diff --git a/COMUN/utile/ListProperty/ColorButton.bmp b/COMUN/utile/ListProperty/ColorButton.bmp new file mode 100644 index 0000000..e594445 Binary files /dev/null and b/COMUN/utile/ListProperty/ColorButton.bmp differ diff --git a/COMUN/utile/ListProperty/Colors.bmp b/COMUN/utile/ListProperty/Colors.bmp new file mode 100644 index 0000000..1443ef9 Binary files /dev/null and b/COMUN/utile/ListProperty/Colors.bmp differ diff --git a/COMUN/utile/ListProperty/Colors.ico b/COMUN/utile/ListProperty/Colors.ico new file mode 100644 index 0000000..f2e4475 Binary files /dev/null and b/COMUN/utile/ListProperty/Colors.ico differ diff --git a/COMUN/utile/ListProperty/Holidays.ini b/COMUN/utile/ListProperty/Holidays.ini new file mode 100644 index 0000000..31a4cd3 --- /dev/null +++ b/COMUN/utile/ListProperty/Holidays.ini @@ -0,0 +1,39 @@ +[Enero] +Days=01 +Day01Tips=Da de mi programa + +[Febrero] +Days=14 +Day14Tips=Da de la amistad + +[Abril] +Days=17,18 +Day17Tips= +Day18Tips= + +[Mayo] +Days=01 +Day01Tips= + +[Julio] +Days=28,29 +Day28Tips=Fiestas patrias +Day29Tips=Desfile militar + +[Agosto] +Days=30 +Day30Tips=Santa Rosa de Lima + +[Octubre] +Days=08 +Day08Tips=8 Octubre + +[Noviembre] +Days=01 +Day01Tips= + +[Diciembre] +Days=08,25 +Day08Tips=Dia de San Guchito +Day25Tips=Navidad!!! ... Nacimiento del nio Jess + diff --git a/COMUN/utile/ListProperty/Library.bmp b/COMUN/utile/ListProperty/Library.bmp new file mode 100644 index 0000000..c573c15 Binary files /dev/null and b/COMUN/utile/ListProperty/Library.bmp differ diff --git a/COMUN/utile/ListProperty/Property.bmp b/COMUN/utile/ListProperty/Property.bmp new file mode 100644 index 0000000..8a0b830 Binary files /dev/null and b/COMUN/utile/ListProperty/Property.bmp differ diff --git a/COMUN/utile/ListProperty/VE_SIZEB.CUR b/COMUN/utile/ListProperty/VE_SIZEB.CUR new file mode 100644 index 0000000..dda3483 Binary files /dev/null and b/COMUN/utile/ListProperty/VE_SIZEB.CUR differ diff --git a/COMUN/utile/ListProperty/WinCalendar.bmp b/COMUN/utile/ListProperty/WinCalendar.bmp new file mode 100644 index 0000000..6543b76 Binary files /dev/null and b/COMUN/utile/ListProperty/WinCalendar.bmp differ diff --git a/COMUN/utile/ListProperty/_lproperty.VCT b/COMUN/utile/ListProperty/_lproperty.VCT new file mode 100644 index 0000000..f628c4f Binary files /dev/null and b/COMUN/utile/ListProperty/_lproperty.VCT differ diff --git a/COMUN/utile/ListProperty/_lproperty.vcx b/COMUN/utile/ListProperty/_lproperty.vcx new file mode 100644 index 0000000..ebb4662 Binary files /dev/null and b/COMUN/utile/ListProperty/_lproperty.vcx differ diff --git a/COMUN/utile/ListProperty/archivo1.txt b/COMUN/utile/ListProperty/archivo1.txt new file mode 100644 index 0000000..03350ce --- /dev/null +++ b/COMUN/utile/ListProperty/archivo1.txt @@ -0,0 +1,10 @@ +nControls = ASelObj(aObjects) +If nControls = 0 + nControls = ASelObj(aObjects, 1) +EndIf +oObject = aObjects(1) +If oObject.Class = "_sbrstatusbar" + Set Classlib To (oObject.ClassLibrary) + oPageProperty = Createobject("_pgeProperty", oObject) + oPageProperty.Show() +EndIf diff --git a/COMUN/utile/ListProperty/custom.pal b/COMUN/utile/ListProperty/custom.pal new file mode 100644 index 0000000..a569fb6 Binary files /dev/null and b/COMUN/utile/ListProperty/custom.pal differ diff --git a/COMUN/utile/ListProperty/frmcalendar.SCT b/COMUN/utile/ListProperty/frmcalendar.SCT new file mode 100644 index 0000000..15027ad Binary files /dev/null and b/COMUN/utile/ListProperty/frmcalendar.SCT differ diff --git a/COMUN/utile/ListProperty/frmcalendar.scx b/COMUN/utile/ListProperty/frmcalendar.scx new file mode 100644 index 0000000..836291e Binary files /dev/null and b/COMUN/utile/ListProperty/frmcalendar.scx differ diff --git a/COMUN/utile/ListProperty/frmexample.SCT b/COMUN/utile/ListProperty/frmexample.SCT new file mode 100644 index 0000000..3179713 Binary files /dev/null and b/COMUN/utile/ListProperty/frmexample.SCT differ diff --git a/COMUN/utile/ListProperty/frmexample.scx b/COMUN/utile/ListProperty/frmexample.scx new file mode 100644 index 0000000..49f98b7 Binary files /dev/null and b/COMUN/utile/ListProperty/frmexample.scx differ diff --git a/COMUN/utile/ListProperty/lProperty.PJT b/COMUN/utile/ListProperty/lProperty.PJT new file mode 100644 index 0000000..91c9050 Binary files /dev/null and b/COMUN/utile/ListProperty/lProperty.PJT differ diff --git a/COMUN/utile/ListProperty/lProperty.pjx b/COMUN/utile/ListProperty/lProperty.pjx new file mode 100644 index 0000000..031e8e1 Binary files /dev/null and b/COMUN/utile/ListProperty/lProperty.pjx differ diff --git a/COMUN/utile/ListProperty/lproperty.FPT b/COMUN/utile/ListProperty/lproperty.FPT new file mode 100644 index 0000000..9d6f762 Binary files /dev/null and b/COMUN/utile/ListProperty/lproperty.FPT differ diff --git a/COMUN/utile/ListProperty/lproperty.dbf b/COMUN/utile/ListProperty/lproperty.dbf new file mode 100644 index 0000000..3f5bbfe Binary files /dev/null and b/COMUN/utile/ListProperty/lproperty.dbf differ diff --git a/COMUN/utile/ListProperty/programa1.prg b/COMUN/utile/ListProperty/programa1.prg new file mode 100644 index 0000000..747b49a --- /dev/null +++ b/COMUN/utile/ListProperty/programa1.prg @@ -0,0 +1,10 @@ +colMyCollection=CREATEOBJECT("Collection") +frm1=CREATEOBJECT("Form") +frm2=CREATEOBJECT("Form") +colMyCollection.Add(frm1) +colMyCollection.Add(frm2) +colMyCollection.Add("Item 1") +colMyCollection.Add("Item 2") +colMyCollection.Add("Item 3") +Form1.lstMyList.RowSourceType = 10 +Form1.lstMyList.RowSource = "colMyCollection, Caption, Name" diff --git a/COMUN/utile/Menu/MenuTool.VCT b/COMUN/utile/Menu/MenuTool.VCT new file mode 100644 index 0000000..c60f90a Binary files /dev/null and b/COMUN/utile/Menu/MenuTool.VCT differ diff --git a/COMUN/utile/Menu/PopMenu.zip b/COMUN/utile/Menu/PopMenu.zip new file mode 100644 index 0000000..7497a8d Binary files /dev/null and b/COMUN/utile/Menu/PopMenu.zip differ diff --git a/COMUN/utile/Menu/citeste.txt b/COMUN/utile/Menu/citeste.txt new file mode 100644 index 0000000..764a70b --- /dev/null +++ b/COMUN/utile/Menu/citeste.txt @@ -0,0 +1,34 @@ +loPop = Newobject("PopMenu", "menutool.vcx") +loPop.Clear + +*** Categorii note +lcParentKey = "" +lcKey = Alltrim(Str(NVL(loCategorie.Id, 0))) +lcTitle = Alltrim(loCategorie.nume) + " (" + ALLTRIM(STR(loCategorie.nr_seturi)) + ")" +lcCommand = "" +lcPicture = "" +llEnabled = .T. +lnAddFlag = 0x00 +loPop.Add(m.lcParentKey, m.lcKey, m.lcTitle, m.lcCommand, m.lcPicture, m.llEnabled, m.lnAddFlag) + +lcKey = lcParentKey + "_" + Alltrim(Str(loSet.Id)) +lcTitle = Alltrim(loSet.nume) +lcCommand = "" +lcPicture = "" +llEnabled = .T. +lnAddFlag = 0x00 +loPop.Add(m.lcParentKey, m.lcKey, m.lcTitle, m.lcCommand, m.lcPicture, m.llEnabled, m.lnAddFlag) + +loPop.nReturn = 1 && Key +loPop.lOwnerDraw = .T. +lcReturnKey = loPop.ShowBy(This) +lcReturnKey = NVL(lcReturnKey, '') + +IF !EMPTY(m.lcReturnKey) + lnPos = AT('_', m.lcReturnKey) + IF m.lnPos > 0 + lcIdSet = SUBSTR(m.lcReturnKey, m.lnPos + 1) + lnIdSet = VAL(m.lcIdSet) + DO note_fara_predefinire WITH m.lnIdSet IN proceduri.prg + ENDIF +ENDIF diff --git a/COMUN/utile/Menu/menutool.vcx b/COMUN/utile/Menu/menutool.vcx new file mode 100644 index 0000000..f8cfbaa Binary files /dev/null and b/COMUN/utile/Menu/menutool.vcx differ diff --git a/COMUN/utile/Menu/win32api.h b/COMUN/utile/Menu/win32api.h new file mode 100644 index 0000000..9cf08ab --- /dev/null +++ b/COMUN/utile/Menu/win32api.h @@ -0,0 +1,1207 @@ +*-- +*-- ó +*-- +#Define CR Chr(13) +#Define LF Chr(10) +#Define CRLF CR + LF +#Define TRUE .T. +#Define FALSE .F. +*-- +*-- data types +*-- +#Define WORD_SIZE 2 +#Define DWORD_SIZE 4 + +*-- +*-- ýṹĴС +*-- +#Define POINT_SIZE DWORD_SIZE * 2 +#Define RECT_SIZE DWORD_SIZE * 4 +#Define BITMAP_SIZE DWORD_SIZE * 4 + WORD_SIZE * 2 + DWORD_SIZE +#Define DRAWITEMSTRUCT_SIZE 64 +#Define MEASUREITEMSTRUCT_SIZE DWORD_SIZE * 6 +#Define ICONINFO_SIZE DWORD_SIZE * 5 + +*** +*** δ +*** +#Define BI_RGB 0x00 +#Define DIB_RGB_COLORS 0 + +#Define TS_MIN 0 +#Define TS_TRUE 1 +#Define TS_DRAW 2 + + +*-- +*-- Window messages +*-- +#Define WM_NULL 0x00 && ?? +#Define WM_CREATE 0x01 && һ +#Define WM_DESTROY 0x02 && ڱ +#Define WM_MOVE 0x03 && ƶʱ +#Define WM_SIZE 0x05 && ıһڵĴС +#Define WM_ACTIVATE 0x06 && һ +#Define WM_SETFOCUS 0x07 && ڵõʱ +#Define WM_KILLFOCUS 0x08 && ʧȥʱ +#Define WM_ENABLE 0x0A && ıenable״̬ +#Define WM_SETREDRAW 0x0B && ôǷػ +#Define WM_SETTEXT 0x0C && ӦóʹϢһڵı +#Define WM_GETTEXT 0x0D +#Define WM_GETTEXTLENGTH 0x0E +#Define WM_PAINT 0x0F && ҪػԼ +#Define WM_CLOSE 0x10 && һڻӦóҪرʱһź +#Define WM_QUERYENDSESSION 0x11 +#Define WM_QUIT 0x12 +#Define WM_QUERYOPEN 0x13 +#Define WM_ERASEBKGND 0x14 +#Define WM_SYSCOLORCHANGE 0x15 && ϵͳɫıʱʹϢж +#Define WM_ENDSESSION 0x16 +#Define WM_SHOWWINDOW 0x18 +#Define WM_WININICHANGE 0x1A && Win.ini ļı䣬ϵͳԹ㲥ʽ֪ͨÿ +#Define WM_DEVMODECHANGE 0x1B +#Define WM_ACTIVATEAPP 0x1C +#Define WM_FONTCHANGE 0x1D +#Define WM_TIMECHANGE 0x1E +#Define WM_CANCELMODE 0x1F +#Define WM_SETCURSOR 0x20 && ״ıʱ +#Define WM_MOUSEACTIVATE 0x21 +#Define WM_CHILDACTIVATE 0x22 +#Define WM_QUEUESYNC 0x23 +#Define WM_GETMINMAXINFO 0x24 +#Define WM_PAINTICON 0x26 +#Define WM_ICONERASEBKGND 0x27 +#Define WM_NEXTDLGCTL 0x28 +#Define WM_SPOOLERSTATUS 0x2A +#Define WM_DRAWITEM 0x2B && Ʋ˵ +#Define WM_MEASUREITEM 0x2C && ˵߶ȺͿ +#Define WM_DELETEITEM 0x2D +#Define WM_VKEYTOITEM 0x2E +#Define WM_CHARTOITEM 0x2F +#Define WM_SETFONT 0x30 +#Define WM_GETFONT 0x31 +#Define WM_SETHOTKEY 0x32 +#Define WM_GETHOTKEY 0x33 +#Define WM_QUERYDRAGICON 0x37 +#Define WM_COMPAREITEM 0x39 && ʹϢж combobox listbox ӵλ +#Define WM_GETOBJECT 0x3D +#Define WM_COMPACTING 0x41 && ʾڴѾ +#Define WM_OTHERWINDOWCREATED 0x42 +#Define WM_OTHERWINDOWDESTROYED 0x43 +#Define WM_COMMNOTIFY 0x44 +#Define WM_WINDOWPOSCHANGING 0x46 && ڵĴСλýҪıʱ +#Define WM_WINDOWPOSCHANGED 0x47 && ʹϢǸڵĴСλѾı +#Define WM_POWER 0x48 && (16λwindows ϵͳҪͣ״̬ʱʹϢ +#Define WM_HELP 0x53 +#Define WM_COPYDATA 0x4A && һӦó򴫵ݸһӦóʱʹϢ +#Define WM_CANCELJOURNAL 0x4B && ijûȡ־״̬ύϢ +#Define WM_NOTIFY 0x4E && ijؼij¼ѾؼҪõһЩϢʱʹϢĸ +#Define WM_CONTEXTMENU 0x7B && ûijеһҼͷʹϢ +#Define WM_STYLECHANGED 0x7D && SETWINDOWLONGһڵķʹϢǸ +#Define WM_SETICON 0x80 && ӦóʹϢһµĴͼСͼ봰ڹ +#Define WM_NCCREATE 0x81 +#Define WM_NCDESTROY 0x82 +#Define WM_NCCALCSIZE 0x83 +#Define WM_NCHITTEST 0x84 && ƶ +#Define WM_NCPAINT 0x85 && ڵĿܱ뱻ʱ(Сı߷ı?) +#Define WM_NCACTIVATE 0x86 && ڷǿͻҪıʾǼǷǼ״̬ +#Define WM_GETDLGCODE 0x87 +#Define WM_SYNCPAINT 0x88 +#Define WM_NCMOUSEMOVE 0xA0 && ڴڷǿͻƶǿͻָ:ıı߿ +#Define WM_NCLBUTTONDOWN 0xA1 && ڴڷǿͻڰʱ +#Define WM_NCLBUTTONUP 0xA2 && ڴڷǿͻ̧ʱ +#Define WM_NCLBUTTONDBLCLK 0xA3 && ڴڷǿͻ˫ʱ +#Define WM_NCRBUTTONDOWN 0xA4 && ڴڷǿͻڰҼʱ +#Define WM_NCRBUTTONUP 0xA5 && ڴڷǿͻ̧Ҽʱ +#Define WM_NCRBUTTONDBLCLK 0xA6 && ڴڷǿͻ˫Ҽʱ +#Define WM_NCMBUTTONDOWN 0xA7 +#Define WM_NCMBUTTONUP 0xA8 +#Define WM_NCMBUTTONDBLCLK 0xA9 +#Define WM_KEYFIRST 0x0100 +#Define WM_KEYDOWN 0x0100 && һʱ +#Define WM_KEYUP 0x0101 && ̧һ +#Define WM_CHAR 0x0102 && ijѷ WM_KEYDOWN WM_KEYUP Ϣ +#Define WM_DEADCHAR 0x0103 && translatemessage WM_KEYUP ϢʱʹϢӵнĴ +#Define WM_SYSKEYDOWN 0x0104 && ûס ALT ͬʱʱύϢӵнĴ +#Define WM_SYSKEYUP 0x0105 && ûͷһͬʱ ALT ʱύϢӵнĴ +#Define WM_SYSCHAR 0x0106 && WM_SYSKEYDOWN Ϣ TRANSLATEMESSAGE ύϢӵнĴ +#Define WM_SYSDEADCHAR 0x0107 && WM_SYSKEYDOWN Ϣ TRANSLATEMESSAGE ʹϢӵнĴ +#Define WM_KEYLAST 0x0108 +#Define WM_INITDIALOG 0x0110 && һԻʾǰʹϢ,ôϢʼؼִ +#Define WM_COMMAND 0x0111 && ѡ˵ +#Define WM_SYSCOMMAND 0x0112 && ڲ˵һûѡ󻯻СʱǸʱ +#Define WM_TIMER 0x0113 +#Define WM_INITMENU 0x0116 && һ˵ҪʱʹϢû˵еijij˵ +#Define WM_INITMENUPOPUP 0x0117 && һ˵Ӳ˵ҪʱʹϢ +#Define WM_MENUSELECT 0x011F && ѡ˵ +#Define WM_MENUCHAR 0x0120 && ˵ѱûijͬڷʼʹϢ˵ +#Define WM_ENTERIDLE 0x0121 && һģ̬Ի˵״̬ʱʹϢ +#Define WM_MENURBUTTONUP 0x0122 +#Define WM_MENUDRAG 0x0123 +#Define WM_MENUGETOBJECT 0x0124 +#Define WM_UNINITMENUPOPUP 0x0125 +#Define WM_CTLCOLORMSGBOX 0x0132 +#Define WM_CTLCOLOREDIT 0x0133 +#Define WM_CTLCOLORLISTBOX 0x0134 +#Define WM_CTLCOLORBTN 0x0135 +#Define WM_CTLCOLORDLG 0x0136 +#Define WM_CTLCOLORSCROLLBAR 0x0137 +#Define WM_CTLCOLORSTATIC 0x0138 +#Define WM_MOUSEFIRST 0x0200 +#Define WM_MOUSEMOVE 0x0200 +#Define WM_LBUTTONDOWN 0x0201 && ڴڿͻڰ +#Define WM_LBUTTONUP 0x0202 && ڴڿͻ̧ +#Define WM_LBUTTONDBLCLK 0x0203 && ڴڿͻ˫ +#Define WM_RBUTTONDOWN 0x0204 && ڴڿͻڰҼ +#Define WM_RBUTTONUP 0x0205 && ڴڿͻ̧Ҽ +#Define WM_RBUTTONDBLCLK 0x0206 && ڴڿͻ˫Ҽ +#Define WM_MBUTTONDOWN 0x0204 && ڴڿͻڰм +#Define WM_MBUTTONUP 0x0205 && ڴڿͻ̧м +#Define WM_MBUTTONDBLCLK 0x0206 && ڴڿͻ˫м +#Define WM_MBUTTONDOWN 0x0207 +#Define WM_MBUTTONUP 0x0208 +#Define WM_MBUTTONDBLCLK 0x0209 +#Define WM_MOUSELAST 0x0209 +#Define WM_PARENTNOTIFY 0x0210 +#Define WM_ENTERMENULOOP 0x0211 +#Define WM_EXITMENULOOP 0x0212 && ˳˵Ϣѭ +#Define WM_NEXTMENU 0x0213 +#Define WM_SIZING 0x0214 +#Define WM_CAPTURECHANGED 0x0215 +#Define WM_MDICREATE 0x0220 +#Define WM_MDIDESTROY 0x0221 +#Define WM_MDIACTIVATE 0x0222 +#Define WM_MDIRESTORE 0x0223 +#Define WM_MDINEXT 0x0224 +#Define WM_MDIMAXIMIZE 0x0225 +#Define WM_MDITILE 0x0226 +#Define WM_MDICASCADE 0x0227 +#Define WM_MDIICONARRANGE 0x0228 +#Define WM_MDIGETACTIVE 0x0229 +#Define WM_MDISETMENU 0x0230 +#Define WM_DROPFILES 0x0233 +#Define WM_MDIREFRESHMENU 0x0234 +#Define WM_IME_SETCONTEXT 0x0281 +#Define WM_CUT 0x0300 +#Define WM_COPY 0x0301 +#Define WM_PASTE 0x0302 +#Define WM_CLEAR 0x0303 +#Define WM_UNDO 0x0304 +#Define WM_RENDERFORMAT 0x0305 +#Define WM_RENDERALLFORMATS 0x0306 +#Define WM_DESTROYCLIPBOARD 0x0307 +#Define WM_DRAWCLIPBOARD 0x0308 +#Define WM_PAINTCLIPBOARD 0x0309 +#Define WM_VSCROLLCLIPBOARD 0x030A +#Define WM_SIZECLIPBOARD 0x030B +#Define WM_ASKCBFORMATNAME 0x030C +#Define WM_CHANGECBCHAIN 0x030D +#Define WM_HSCROLLCLIPBOARD 0x030E +#Define WM_QUERYNEWPALETTE 0x030F +#Define WM_PALETTEISCHANGING 0x0310 +#Define WM_PALETTECHANGED 0x0311 +#Define WM_HOTKEY 0x0312 +#Define WM_THEMECHANGED 0x031A && ϵͳıʱ(xp) +#Define WM_PENWINFIRST 0x0380 +#Define WM_PENWINLAST 0x038F +#Define WM_USER 0x0400 && ûԶϢ +#Define WM_SETTINGCHANGE WM_WININICHANGE +*-- +*-- Message SYSCOMMAND by wPara +*-- +#Define SC_SIZE 0xF000 +#Define SC_MOVE 0xF010 +#Define SC_MINIMIZE 0xF020 +#Define SC_MAXIMIZE 0xF030 +#Define SC_NEXTWINDOW 0xF040 +#Define SC_PREVWINDOW 0xF050 +#Define SC_CLOSE 0xF060 +#Define SC_VSCROLL 0xF070 +#Define SC_HSCROLL 0xF080 +#Define SC_MOUSEMENU 0xF090 +#Define SC_KEYMENU 0xF100 +#Define SC_ARRANGE 0xF110 +#Define SC_RESTORE 0xF120 +#Define SC_TASKLIST 0xF130 +#Define SC_SCREENSAVE 0xF140 +#Define SC_HOTKEY 0xF150 +#Define SC_ICON SC_MINIMIZE +#Define SC_ZOOM SC_MAXIMIZE +#Define SC_MANAGER_CONNECT 0x01 +#Define SC_MANAGER_CREATE_SERVICE 0x02 +#Define SC_MANAGER_ENUMERATE_SERVICE 0x04 +#Define SC_MANAGER_LOCK 0x08 +#Define SC_MANAGER_QUERY_LOCK_STATUS 0x10 +#Define SC_MANAGER_MODIFY_BOOT_CONFIG 0x20 +#Define SC_MANAGER_ALL_ACCESS STANDARD_RIGHTS_REQUIRED ; + + SC_MANAGER_CONNECT ; + + SC_MANAGER_CREATE_SERVICE ; + + SC_MANAGER_ENUMERATE_SERVICE ; + + SC_MANAGER_LOCK ; + + SC_MANAGER_QUERY_LOCK_ST +#Define SC_FLAGS 0x0400 +#Define SC_FLAGS_STR "/sc" +#Define SC_GROUP_IDENTIFIER "+" +#Define SC_GROUP_IDENTIFIERA "+" +#Define SC_GROUP_IDENTIFIERW "+" + +#Define MSGF_DIALOGBOX 0 +#Define MSGF_MESSAGEBOX 1 +#Define MSGF_MENU 2 +#Define MSGF_MOVE 3 +#Define MSGF_SIZE 4 +#Define MSGF_SCROLLBAR 5 +#Define MSGF_NEXTWINDOW 6 +#Define MSGF_MAINLOOP 8 +#Define MSGF_MAX 8 +#Define MSGF_USER 0x1000 +#Define MSGF_DDEMGR 0x8001 + +*-- +*-- ??? To WM_MENUCHAR +*-- + +#Define MNC_CLOSE 1 +#Define MNC_EXECUTE 2 +#Define MNC_IGNORE 0 +#Define MNC_SELECT 3 + +#Define MND_CONTINUE 0 +#Define MND_ENDMENU 1 + +*-- +*-- dwStyle To CreateWindow +*-- +#Define WS_MAXIMIZEBOX 0x010000 && 󻯰ť +#Define WS_MINIMIZEBOX 0x020000 && Сť +#Define WS_THICKFRAME 0x040000 && пɵ߿( WS_SIZEBOX ʽͬ) +#Define WS_SYSMENU 0x080000 && ϴдڲ˵(ָ WS_CAPTION ʽ) +#Define WS_HSCROLL 0x100000 && ˮƽ +#Define WS_VSCROLL 0x200000 && дֱ +#Define WS_DLGFRAME 0x400000 && Ի߿ʽ, +#Define WS_BORDER 0x800000 && е߿ +#Define WS_CAPTION 0xC00000 && бͱ߿(WS_TILEDʽͬ) +#Define WS_MAXIMIZE 0x01000000 && 󻯰ť,ָWS_SYSTEMʽ +#Define WS_CLIPCHILDREN 0x02000000 && ڸڻͼʱ,ųӴ +#Define WS_CLIPSIBLINGS 0x04000000 && ʹųӴ֮ +#Define WS_DISABLED 0x08000000 && ״̬ +#Define WS_VISIBLE 0x10000000 && ɼ״̬ +#Define WS_MINIMIZE 0x20000000 && С״̬ +#Define WS_CHILD 0x40000000 && +#Define WS_POPUP 0x80000000 && ʽ(WS_CHILDWINDOWʽͬʱʹ) +#Define WS_SIZEBOX WS_THICKFRAME && ɵСı߿ +#Define WS_CHILDWINDOW WS_CHILD && Ӵ(WS_POPUP) +* +#Define WS_TABSTOP 0x010000 && ɽ TAB +#Define WS_GROUP 0x020000 && ʽ,ÿĵһؼ WS_TABSTOP ʽ +#Define WS_OVERLAPPEDWINDOW (WS_OVERLAPPED + WS_CAPTION + WS_SYSMENU + WS_THICKFRAME + WS_MINIMIZEBOX + WS_MAXIMIZEBOX) + && в,,ϵͳ˵,ɵ߿,ϵͳť +#Define WS_POPUPWINDOW (WS_POPUP + WS_BORDER + WS_SYSMENU) + && е߿,ʽ,ϵͳ˵ʽ +*-- +*-- dwExStyle To CreateWindowEx +*-- +#Define WS_EX_DLGMODALFRAME 0x01 && ˫߿ +#Define WS_EX_NOPARENTNOTIFY 0x04 && /ʱ֪ͨ +#Define WS_EX_TOPMOST 0x08 && ö(ͣз߲㴰ڵ) +#Define WS_EX_ACCEPTFILES 0x10 && ɽļϷ +#Define WS_EX_TRANSPARENT 0x20 && ͸ʽ,ͬػʱôڲſػ +#Define WS_EX_MDICHILD 0x40 && MDIӴʽ +#Define WS_EX_TOOLWINDOW 0x80 && ʽ +#Define WS_EX_WINDOWEDGE 0x0100 && ͹Եı߿ +#Define WS_EX_CLIENTEDGE 0x0200 && ӰıԵ +#Define WS_EX_CONTEXTHELP 0x0400 && İʽ,һʺű־ +#Define WS_EX_RIGHT 0x1000 && Ҷ +#Define WS_EX_RTLREADING 0x2000 && ıҵʾ +#Define WS_EX_LEFTSCROLLBAR 0x4000 && ֱڴ߽ +#Define WS_EX_CONTROLPARENT 0x010000 && ûʹTABڴڵӴڼ +#Define WS_EX_STATICEDGE 0x020000 && Ϊ״̬ʱһάԵ +#Define WS_EX_APPWINDOW 0x040000 && ڿɼʱһ㴰ڷ +#Define WS_EX_OVERLAPPEDWINDOW (WS_EX_WINDOWEDGE + WS_EX_CLIENTEDGE) + && ͹Եı߿,ԵӰ +#Define WS_EX_PALETTEWINDOW (WS_EX_WINDOWEDGE + WS_EX_TOOLWINDOW + WS_EX_TOPMOST) + && ߿,йʽ,ڶ +#Define WS_EX_LAYERED 0x080000 && ֲ͸,ʽʹûЧ +#Define WS_EX_NOINHERITLAYOUT 0x100000 && ӿؼ̳дؼIJ +#Define WS_EX_LAYOUTRTL 0x400000 && ؼдIJ(ᱻ) +#Define WS_EX_NOACTIVATE 0x08000000 && ڶ㵫 +* WS_EX_COMPOSITED && ˫µϻƴڵ(WinXP) + +*-- +*-- ??? to CreateWindowEx +*-- +#Define CW_USEDEFAULT 0x80000000 + +*-- +*-- TOOLINFO +*-- +#Define TTS_ALWAYSTIP 0x01 && ʹûлý㣬Ҳʾʾ +#Define TTS_NOPREFIX 0x02 +#Define TTS_NOANIMATE 0x10 +#Define TTS_NOFADE 0x20 +#Define TTS_BALLOON 0x40 && ʾ֮ +#Define TTS_CLOSE 0x80 +#Define TTS_USEVISUALSTYLE 0x0100 && VISTA + +#Define TTI_NONE 0x00 && ͼ +#Define TTI_INFO 0x01 && Ϣ +#Define TTI_WARNING 0x02 && +#Define TTI_ERROR 0x03 && + +#Define TTDT_AUTOMATIC 0x00 +#Define TTDT_RESHOW 0x01 +#Define TTDT_AUTOPOP 0x02 +#Define TTDT_INITIAL 0x03 + +#Define TTF_IDISHWND 0x01 +#Define TTF_CENTERTIP 0x02 && ʾʾڽܵ· +#Define TTF_RTLREADING 0x04 && ıԴ˳ʾ԰ϣϵͳЧ +#Define TTF_SUBCLASS 0x10 && ʾؼ໯""ڴԱȡ͸ĵϢ +#Define TTF_TRACK 0x20 +#Define TTF_ABSOLUTE 0x80 && λãĻ޷ʾҲıʾλ +#Define TTF_TRANSPARENT 0x0100 +#Define TTF_PARSELINKS 0x1000 +#Define TTF_DI_SETITEM 0x8000 +#Define TTF_BITMAP 0x10000 && VISTA + +#Define TTM_ACTIVATE WM_USER + 01 +#Define TTM_SETDELAYTIME WM_USER + 03 && Tooltip ʱ +#Define TTM_ADDTOOL WM_USER + 04 && Tooltip +#Define TTM_ADDTOOLA WM_USER + 04 && TTM_ADDTOOLA ʲôͬ +#Define TTM_DELTOOLA WM_USER + 05 +#Define TTM_NEWTOOLRECTA WM_USER + 06 +#Define TTM_RELAYEVENT WM_USER + 07 +#Define TTM_GETTOOLINFOA WM_USER + 08 +#Define TTM_SETTOOLINFOA WM_USER + 09 +#Define TTM_HITTESTA WM_USER + 10 +#Define TTM_GETTEXTA WM_USER + 11 +#Define TTM_UPDATETIPTEXTA WM_USER + 12 +#Define TTM_GETTOOLCOUNT WM_USER + 13 +#Define TTM_ENUMTOOLSA WM_USER + 14 +#Define TTM_GETCURRENTTOOLA WM_USER + 15 +#Define TTM_WINDOWFROMPOINT WM_USER + 16 +#Define TTM_TRACKACTIVATE WM_USER + 17 +#Define TTM_TRACKPOSITION WM_USER + 18 +#Define TTM_SETTIPBKCOLOR WM_USER + 19 && ñɫ +#Define TTM_SETTIPTEXTCOLOR WM_USER + 20 && ıɫ +#Define TTM_GETDELAYTIME WM_USER + 21 +#Define TTM_GETTIPBKCOLOR WM_USER + 22 +#Define TTM_GETTIPTEXTCOLOR WM_USER + 23 +#Define TTM_SETMAXTIPWIDTH WM_USER + 24 && +#Define TTM_GETMAXTIPWIDTH WM_USER + 25 +#Define TTM_SETMARGIN WM_USER + 26 +#Define TTM_GETMARGIN WM_USER + 27 +#Define TTM_POP WM_USER + 28 +#Define TTM_UPDATE WM_USER + 29 +#Define TTM_GETBUBBLESIZE WM_USER + 30 +#Define TTM_ADJUSTRECT WM_USER + 31 +#Define TTM_SETTITLEA WM_USER + 32 && ñ +#Define TTM_SETTITLEW WM_USER + 33 +#Define TTM_POPUP WM_USER + 34 +#Define TTM_ADDTOOLW WM_USER + 50 +#Define TTM_DELTOOLW WM_USER + 51 +#Define TTM_NEWTOOLRECTW WM_USER + 52 +#Define TTM_GETTOOLINFOW WM_USER + 53 +#Define TTM_SETTOOLINFOW WM_USER + 54 +#Define TTM_HITTESTW WM_USER + 55 +#Define TTM_GETTEXTW WM_USER + 56 +#Define TTM_UPDATETIPTEXTW WM_USER + 57 +#Define TTM_ENUMTOOLSW WM_USER + 58 +#Define TTM_GETCURRENTTOOLW WM_USER + 59 +* #Define TTM_SETWINDOWTHEME = CCM_SETWINDOWTHEME + +#Define LPSTR_TEXTCALLBACKA -1 +#Define LPSTR_TEXTCALLBACKW -1 + +#Define TTN_FIRST -520 +#Define TTN_LAST -549 +#Define TTN_GETDISPINFOA TTN_FIRST - 0 +#Define TTN_GETDISPINFOW TTN_FIRST - 10 +#Define TTN_LINKCLICK TTN_FIRST - 3 +* #Define TTN_NEEDTEXT TTN_GETDISPINFO +#Define TTN_NEEDTEXTA TTN_GETDISPINFOA +#Define TTN_NEEDTEXTW TTN_GETDISPINFOW +#Define TTN_POP TTN_FIRST - 2 +#Define TTN_SHOW TTN_FIRST - 1 +*-- +*-- ؼʽο +*-- +#Define LVS_ICON 0 && ͼ +#Define LVS_REPORT 0x01 && ϸ +#Define LVS_SMALLICON 0x02 && Сͼ +#Define LVS_LIST 0x03 && б +#Define LVS_SINGLESEL 0x04 && ֻܵѡ +#Define LVS_SHOWSELALWAYS 0x08 && ʼʾѡ(ʧȥʱ) +#Define LVS_SORTASCENDING 0x10 && +#Define LVS_SORTDESCENDING 0x20 && +#Define LVS_SHAREIMAGELISTS 0x40 && ͼб(ؼʱͼбԿ) +#Define LVS_NOLABELWRAP 0x80 && ֲ +#Define LVS_AUTOARRANGE 0x0100 && Զ +#Define LVS_EDITLABELS 0x0200 && ༭ǩ(Դļ) +#Define LVS_OWNERDATA 0x1000 && ָһListView, ûԼItem +#Define LVS_NOSCROLL 0x2000 && ֹ(LVS_LISTLVS_REPORTʽ) +#Define LVS_ALIGNTOP 0 && ˶ +#Define LVS_ALIGNLEFT 0x0800 && +#Define LVS_OWNERDRAWFIXED 0x0400 && Ի(ϸģʽ) +#Define LVS_NOCOLUMNHEADER 0x4000 && ϸģʽʱʾͷ +#Define LVS_NOSORTHEADER 0x8000 && ͷʾΪƽ,Ӧ(ϸģʽ) +* չؼʽοб +#Define LVS_EX_GRIDLINES 0x01 && ʾ(ϸģʽ) +#Define LVS_EX_SUBITEMIMAGES 0x02 && Ŀʾͼ(ϸģʽ) +#Define LVS_EX_CHECKBOXES 0x04 && ڸĿǰʾѡ +#Define LVS_EX_TRACKSELECT 0x08 && ȵѡ +#Define LVS_EX_HEADERDRAGDROP 0x10 && ͨϷͷ°Ÿ(ϸģʽ) +#Define LVS_EX_FULLROWSELECT 0x20 && ѡ(ϸģʽ) +#Define LVS_EX_ONECLICKACTIVATE 0x40 && Ŀ +#Define LVS_EX_TWOCLICKACTIVATE 0x80 && ˫Ŀ +#Define LVS_EX_FLATSB 0x0100 && ƽ +#Define LVS_EX_REGIONAL 0x0200 && ĿΧֻͼ겻͸(ͼģʽ) +#Define LVS_EX_INFOTIP 0x0400 && ʾϢڵϢ֪ͨ +#Define LVS_EX_UNDERLINEHOT 0x0800 && ȵĿִ» +#Define LVS_EX_UNDERLINECOLD 0x1000 && ȵĿִ» +#Define LVS_EX_MULTIWORKAREAS 0x2000 && (ûĿǰ) +#Define LVS_EX_LABELTIP 0x4000 && ûʾϢıչصıǩ +#Define LVS_EX_BORDERSELECT 0x8000 && ѡ߿ʽ +#Define LVS_EX_DOUBLEBUFFER 0x010000 && ˫(WinXP) +#Define LVS_EX_HIDELABELS 0x020000 && رǩ(WinXP) +#Define LVS_EX_SINGLEROW 0x040000 && ʾ(WinXP) +#Define LVS_EX_SNAPTOGRID 0x080000 && ͼԶ뵽(WinXP) +* LVS_EX_SIMPLESELECT && (WinXP) + + +*-- +*-- idTimer to SetTimer +*-- +#Define IDT_TIMER 101 + + +*-- +*-- nIndex to SetWindowLong and GetWindowLong +*-- +#Define GWL_WNDPROC -4 && ڹ +#Define GWL_HINSTANCE -6 +#Define GWL_HWNDPARENT -8 +#Define GWL_ID -12 +#Define GWL_STYLE -16 && ڵʽ +#Define GWL_EXSTYLE -20 && չʽ +#Define GWL_USERDATA -21 +* The following values are also available when the hwnd parameter identifies a dialog box: +#Define DWL_MSGRESULT 0 +#Define DWL_DLGPROC 4 +#Define DWL_USER 8 + + +*-- +*-- fuLoad to LoadImage +*-- +#Define LR_DEFAULTCOLOR 0x00 && Գ淽ʽͼ +#Define LR_MONOCHROME 0x01 && ͼתɵɫ +#Define LR_COLOR 0x02 +#Define LR_COPYRETURNORG 0x04 +#Define LR_COPYDELETEORG 0x08 +#Define LR_LOADFROMFILE 0x10 && Ҫⲿļеͼ +#Define LR_LOADTRANSPARENT 0x20 && ͼеһضϵͳ滻 +#Define LR_DEFAULTSIZE 0x40 && n1 n2 Ϊ㣬ʹϵͳͼĬϴС +#Define LR_VGACOLOR 0x80 && ʹ VGA ɫ +#Define LR_LOADMAP3DCOLORS 0x1000 && ͼеҡҡԼdzض滻COLOR_3DSHADOW,COLOR_3DFACE,COLOR_3DLIGHTĵǰ +#Define LR_CREATEDIBSECTION 0x2000 && uTypeIMAGE_BITMAPһʾ豸λͼ +#Define LR_COPYFROMRESOURCE 0x4000 +#Define LR_SHARED 0x8000 && ͼΪһԴ롣NT 4.0װعԴʱҪõ +* LR_LOADREALSIZE && ͼŴn1n2 + +*-- +*-- uType to LoadImage +*-- +#Define IMAGE_BITMAP 0 +#Define IMAGE_ICON 1 +#Define IMAGE_CURSOR 2 + +*-- +*-- DwRop to BitBlt and StretchBlt +*-- +#Define BLACKNESS 0x42 +#Define DSTINVERT 0x550009 +#Define MERGECOPY 0xC000CA +#Define MERGEPAINT 0xBB0226 +#Define NOTSRCCOPY 0x330008 +#Define NOTSRCERASE 0x1100A6 +#Define PATCOPY 0xF00021 +#Define PATINVERT 0x5A0049 +#Define PATPAINT 0xFB0A09 +#Define SRCAND 0x8800C6 +#Define SRCCOPY 0xCC0020 +#Define SRCERASE 0x440328 +#Define SRCINVERT 0x660046 +#Define SRCPAINT 0xEE0086 +#Define WHITENESS 0xFF0062 + + +*-- +*-- CtlType to DRAWITEMSTRUCT +*-- +#Define ODT_BUTTON 4 +#Define ODT_COMBOBOX 3 +#Define ODT_LISTBOX 2 +#Define ODT_LISTVIEW 102 +#Define ODT_MENU 1 +#Define ODT_STATIC 5 +#Define ODT_TAB 101 + +*-- +*-- itemAction to DRAWITEMSTRUCT +*-- +#Define ODA_DRAWENTIRE 1 +#Define ODA_SELECT 2 +#Define ODA_FOCUS 4 + +*-- +*-- itemState to DRAWITEMSTRUCT +*-- +#Define ODS_SELECTED 0x01 && ˵ѡ +#Define ODS_GRAYED 0x02 && ˵ǻɫ(ֻڲ˵) +#Define ODS_DISABLED 0x04 && +#Define ODS_CHECKED 0x08 && ˵ѡ +#Define ODS_FOCUS 0x10 && ʾؼҪ뽹 +#Define ODS_DEFAULT 0x20 && ǰؼĬ״̬ +#Define ODS_HOTLIGHT 0x40 && ʾָλڿؼ֮ʱؼʾɫ֧Windows 98/Me, Windows 2000/XP +#Define ODS_INACTIVE 0x80 +#Define ODS_NOACCEL 0x100 +#Define ODS_NOFOCUSRECT 0x200 +#Define ODS_COMBOBOXEDIT 0x1000 && ԻϿؼֻѡ + +*-- +*-- iBkMode to SetBkMode +*-- +#Define TRANSPARENT 1 && ͸, +#Define OPAQUE 2 && õǰıɫ߻ʡӰˢԼַĿ϶ +#Define NEWTRANSPARENT 3 && ɫIJ˵ϻ͸ + +*-- +*-- uFlags to LocalAlloc +*-- +#Define LMEM_FIXED 0x00 +#Define LMEM_MOVEABLE 0x02 +#Define LMEM_NOCOMPACT 0x10 +#Define LMEM_NODISCARD 0x20 +#Define LMEM_ZEROINIT 0x40 +#Define LMEM_MODIFY 0x80 +#Define LMEM_DISCARDABLE 0x0F00 +#Define LMEM_VALID_FLAGS 0x0F72 +#Define LMEM_INVALID_HANDLE 0x8000 +#Define NONZEROLHND LMEM_MOVEABLE +#Define NONZEROLPTR LMEM_FIXED +#Define LHND LMEM_MOVEABLE + LMEM_ZEROINIT +#Define LPTR LMEM_FIXED + LMEM_ZEROINIT + +*-- +*-- diFlags to DrawIconEx +*-- +#Define DI_MASK 0x01 && ͼʱʹͼMASK (絥ʹ, ɻͼģ) +#Define DI_IMAGE 0x02 && ͼʱʹͼXOR (ͼû͸) +#Define DI_COMPAT 0x04 && ϵͳȱʡͼûͼͼ͹ +#Define DI_DEFAULTSIZE 0x08 && CXWidthCyWidthΪ㣬ϵͳָͼ͹ĵĹƿȺ͸ Ȼͼ͹ꣻδָcxWidthcyWithΪ꣬ʹԴʵʴС +#Define DI_NORMAL DI_MASK + DI_IMAGE && ó淽ʽͼ (ϲ DI_IMAGE DI_MASK) + +*-- +*-- uFlags to AppendMenu +*-- +#Define MF_BITMAP 0x04 && ˵Ŀһλͼ. һ˵, λͼ;Բɾ +#Define MF_CHECKED 0x08 && ָIJ˵Ŀ +#Define MF_DISABLED 0x02 && ָֹIJ˵Ŀ +#Define MF_ENABLED 0x00 && ָIJ˵Ŀ +#Define MF_GRAYED 0x01 && ָֹIJ˵Ŀ, dzɫ +#Define MF_MENUBARBREAK 0x20 && ڵʽ˵, ָĿһ, һֱ߷ָͬ +#Define MF_MENUBREAK 0x40 && ڵʽ˵, ָĿһ. ڶ˵, Ŀõһ +#Define MF_OWNERDRAW 0x0100 && һͼ˵, ɳƲ˵ +#Define MF_POPUP 0x0010 && һʽ˵ָĿ, ڴӲ˵ʽ˵ +#Define MF_SEPARATOR 0x0800 && ָĿʾһָ +#Define MF_STRING 0x00 && ָĿһִ +#Define MF_UNCHECKED 0x08 && ָĿ + +#Define MF_BYCOMMAND 0x0000 && ɲ˵IDָ +#Define MF_BYPOSITION 0x0400 && Ŀڲ˵еλþ (˵еĵһĿ) +#Define MF_DEFAULT 0x1000 +#Define MF_RIGHTJUSTIFY 0x4000 +#Define MF_HELP 0x4000 +#Define MF_HILITE 0x80 +#Define MF_UNHILITE 0x00 +#Define MF_USECHECKBITMAPS 0x0200 +*** бDzһʹ +*** MF_DISABLED, MF_ENABLED, and MF_GRAYED +*** MF_BITMAP, MF_STRING, and MF_OWNERDRAW +*** MF_MENUBARBREAK and MF_MENUBREAK +*** MF_CHECKED and MF_UNCHECKED + +*-- +*-- fMask To InsertMenuItem MENUITEMINFO ЩԱЧ +*-- +#Define MIIM_STATE 0x01 +#Define MIIM_ID 0x02 +#Define MIIM_SUBMENU 0x04 +#Define MIIM_CHECKMARKS 0x08 +#Define MIIM_TYPE 0x10 +#Define MIIM_DATA 0x20 +#Define MIIM_STRING 0x40 +#Define MIIM_BITMAP 0x80 +#Define MIIM_FTYPE 0x0100 + +*-- +*-- fType To InsertMenuItem MENUITEMINFO в˵ +*-- +#Define MFT_STRING 0x00 +#Define MFT_BITMAP 0x04 +#Define MFT_MENUBARBREAK 0x20 +#Define MFT_MENUBREAK 0x40 +#Define MFT_OWNERDRAW 0x0100 +#Define MFT_SEPARATOR 0x0800 + +*-- +*-- fState to InsertMenuItem MENUITEMINFO в˵״̬ +*-- +#Define MFS_ENABLED 0x00 +#Define MFS_UNCHECKED 0x00 +#Define MFS_UNHILITE 0x00 +#Define MFS_GRAYED 0x01 +#Define MFS_DISABLED 0x02 +#Define MFS_CHECKED 0x08 +#Define MFS_HILITE 0x80 + +*-- +*-- nFormat to DrawText +*-- +#Define DT_TOP 0x00 && ֱ (ʱЧ) +#Define DT_LEFT 0x00 && ˮƽ +#Define DT_CENTER 0x01 && ˮƽж +#Define DT_RIGHT 0x02 && ˮƽҶ +#Define DT_VCENTER 0x04 && ֱж (ʱЧ) +#Define DT_BOTTOM 0x08 && ֱ¶ (ʱЧ) +#Define DT_WORDBREAK 0x10 && Զ. SetTextAlignTA_UPDATECP־, Ч. +#Define DT_SINGLELINE 0x20 && +#Define DT_EXPANDTABS 0x40 && ֵʱ, Ʊվչ. ĬϵƱվ8ַ. , DT_TABSTOP־ı趨. +#Define DT_TABSTOP 0x80 && ָµƱվ, ĸ 8 λ +#Define DT_NOCLIP 0x0100 && ʱеָľ +#Define DT_EXTERNALLEADING 0x0200 && ıи߶ȵʱ, ʹõǰⲿ +#Define DT_CALCRECT 0x0400 && лͼʱεĵױ߸Ҫչ, Ա; лͼʱ, չεҲ, , lpRectָľλֵ +#Define DT_NOPREFIX 0x0800 && ֹ & Ϊʼ +#Define DT_INTERNAL 0x1000 + + +*-- +*-- uFlags to TrackPopupMenu and TrackPopupMenuEx +*-- +#Define TPM_LEFTALIGN 0x00 +#Define TPM_CENTERALIGN 0x04 +#Define TPM_RIGHTALIGN 0x08 && Positions the pop-up menu so that its right side is aligned with the coordinate specified by the x parameter +* New flags for the "TrackPopupMenuEx" version +#Define TPM_TOPALIGN 0x00 +#Define TPM_BOTTOMALIGN 0x20 +#Define TPM_HORIZONTAL 0x00 +#Define TPM_HORNEGANIMATION 0x0800 +#Define TPM_HORPOSANIMATION 0x0400 +#Define TPM_NOANIMATION 0x4000 +#Define TPM_NONOTIFY 0x80 +#Define TPM_RECURSE 0x01 +#Define TPM_VCENTERALIGN 0x10 +#Define TPM_VERNEGANIMATION 0x2000 +#Define TPM_VERPOSANIMATION 0x1000 +#Define TPM_VERTICAL 0x40 + +* Value Meaning +#Define TPM_LEFTBUTTON 0x00 +#Define TPM_RIGHTBUTTON 0x02 +#Define TPM_RETURNCMD 0x0100 + +*-- +*-- nIndex to GetSysColor +*-- +#Define COLOR_SCROLLBAR 0 && +#Define COLOR_BACKGROUND 1 && Windows +#Define COLOR_ACTIVECAPTION 2 && ڵı +#Define COLOR_INACTIVECAPTION 3 && ڵı +#Define COLOR_MENU 4 && ˵ +#Define COLOR_WINDOW 5 && ڱ +#Define COLOR_WINDOWFRAME 6 && +#Define COLOR_MENUTEXT 7 && ˵ +#Define COLOR_WINDOWTEXT 8 && +#Define COLOR_CAPTIONTEXT 9 && ڱе +#Define COLOR_ACTIVEBORDER 10 && ڵı߿ +#Define COLOR_INACTIVEBORDER 11 && ڵı߿ +#Define COLOR_APPWORKSPACE 12 && MDIı +#Define COLOR_HIGHLIGHT 13 && ѡ +#Define COLOR_HIGHLIGHTTEXT 14 && ѡ +#Define COLOR_BTNFACE 15 && ť +#Define COLOR_BTNSHADOW 16 && ť3DӰ +#Define COLOR_GRAYTEXT 17 && ɫ; ʹ˶Ϊ +#Define COLOR_BTNTEXT 18 && ť +#Define COLOR_INACTIVECAPTIONTEXT 19 && ڵ +#Define COLOR_BTNHIGHLIGHT 20 && ť3D +#Define COLOR_3DDKSHADOW 21 +#Define COLOR_GRADIENTACTIVECAPTION 27 +#Define COLOR_GRADIENTINACTIVECAPTION 28 +#Define COLOR_MENUHILIGHT 29 +#Define COLOR_MENUBAR 30 + +*-- +*-- fuFlags to DrawState +*-- +* type +#Define DST_COMPLEX 0x00 && ͼ lpDrawStateProc ָĻصڼִ, lParam wParam ᴫݸص¼. +#Define DST_TEXT 0x01 && lParamֵĵַ(ʹһִ), wParam ִij. +#Define DST_PREFIXTEXT 0x02 && DST_TEXT , ֻ & ַָΪ¸ַ» +#Define DST_ICON 0x03 && lParam ͼľ +#Define DST_BITMAP 0x04 && lParam λͼľ +* state +#Define DSS_NORMAL 0x00 && ͨͼ +#Define DSS_UNION 0x10 && ͼж +#Define DSS_DISABLED 0x20 && ͼиЧ +#Define DSS_MONO 0x80 && hBrush ͼ +#Define DSS_RIGHT 0x8000 && κ + +*-- +*-- edge to DrawEdge +*-- +#Define BDR_RAISEDOUTER 0x01 && ͹ +#DEfine BDR_SUNKENOUTER 0x02 && 㰼 +#Define BDR_RAISEDINNER 0x04 && ڲ͹ +#Define BDR_SUNKENINNER 0x08 && ڲ㰼 +#Define BDR_OUTER 0x03 +#Define BDR_RAISED 0x05 +#Define BDR_SUNKEN 0x0A +#Define BDR_INNER 0x0C +#Define EDGE_BUMP BitOr(BDR_RAISEDOUTER, BDR_SUNKENINNER) +#Define EDGE_ETCHED BitOr(BDR_SUNKENOUTER, BDR_RAISEDINNER) +#Define EDGE_RAISED BitOr(BDR_RAISEDOUTER, BDR_RAISEDINNER) +#Define EDGE_SUNKEN BitOr(BDR_SUNKENOUTER, BDR_SUNKENINNER) + +*-- +*-- grfFlags to DrawEdge +*-- +#Define BF_LEFT 0x01 && Ե +#Define BF_TOP 0x02 && ϱԵ +#Define BF_RIGHT 0x04 && ұԵ +#Define BF_BOTTOM 0x08 && ±Ե +#Define BF_DIAGONAL 0x10 && Խ +#Define BF_MIDDLE 0x800 && ڲ +#Define BF_SOFT 0x1000 && MSDN: Soft buttons instead of tiles. +#Define BF_ADJUST 0x2000 && , Ԥͻ +#Define BF_FLAT 0x4000 && ƽԵ +#Define BF_MONO 0x8000 && һάԵ +#Define BF_TOPLEFT BitOr(BF_TOP, BF_LEFT) +#Define BF_TOPRIGHT BitOr(BF_TOP, BF_RIGHT) +#Define BF_BOTTOMLEFT BitOr(BF_BOTTOM, BF_LEFT) +#Define BF_BOTTOMRIGHT BitOr(BF_BOTTOM, BF_RIGHT) +#Define BF_RECT BitOr(BF_LEFT, BitOr(BF_TOP, BitOr(BF_RIGHT, BF_BOTTOM))) +#Define BF_DIAGONAL_ENDTOPRIGHT BitOr(BF_DIAGONAL, BitOr(BF_TOP, BF_RIGHT)) +#Define BF_DIAGONAL_ENDTOPLEFT BitOr(BF_DIAGONAL, BitOr(BF_TOP, BF_LEFT)) +#Define BF_DIAGONAL_ENDBOTTOMLEFT BitOr(BF_DIAGONAL, BitOr(BF_BOTTOM, BF_LEFT)) +#Define BF_DIAGONAL_ENDBOTTOMRIGHT BitOr((BF_DIAGONAL, BitOr(BF_BOTTOM, BF_RIGHT)) + + +*-- +*-- fnPenStyle to CreatePen +*-- +#Define PS_SOLID 0 && ʵ _______ +#Define PS_DASH 1 && (nWidth1) ------- +#Define PS_DOT 2 && (nWidth1) ....... +#Define PS_DASHDOT 3 && 㻮 (nWidth1) _._._._ +#Define PS_DASHDOTDOT 4 && -- (nWidth1) _.._.._ +#Define PS_NULL 5 && +#Define PS_INSIDEFRAME 6 && Χ(nWidth1) + + +*-- +*-- nIndex to GetSystemMetrics +*-- +#Define SM_CXSCREEN 0 && Ļ +#Define SM_CYSCREEN 1 && Ļ߶ +#Define SM_CXVSCROLL 2 && ֱеļͷťĴС +#Define SM_CYHSCROLL 3 && ˮƽϵļͷС +#Define SM_CYCAPTION 4 && ڱĸ߶ +#Define SM_CXBORDER 5 && ߴ粻ɱ߿Ŀ +#Define SM_CYBORDER 6 && ߴ粻ɱ߿ĸ߶ +#Define SM_CXDLGFRAME 7 && Ի߿Ŀ +#Define SM_CYDLGFRAME 8 && Ի߿ĸ߶ +#Define SM_CYVTHUMB 9 && ֱϹĸ߶ +#Define SM_CXHTHUMB 10 && ˮƽϹĴС +#Define SM_CXICON 11 && ׼ͼĿ +#Define SM_CYICON 12 && ׼ͼĸ߶ +#Define SM_CXCURSOR 13 && ׼ָ +#Define SM_CYCURSOR 14 && ׼ָ߶ +#Define SM_CYMENU 15 && ˵߶ +#Define SM_CXFULLSCREEN 16 && 󻯴ڿͻĿ +#Define SM_CYFULLSCREEN 17 && 󻯴ڿͻĸ߶ +#Define SM_CYKANJIWINDOW 18 && KanjiڵĴСHeight Of Kanji window +#Define SM_MOUSEPRESENT 19 && Ƿװ +#Define SM_CYVSCROLL 20 && ֱеļͷťĴС +#Define SM_CXHSCROLL 21 && ˮƽеļͷťĴС +#Define SM_DEBUG 22 && windows ĵ԰УΪ .T. +#Define SM_SWAPBUTTON 23 && Ƿ񽻻Ҽ +#Define SM_RESERVED1 24 +#Define SM_RESERVED2 25 +#Define SM_RESERVED3 26 +#Define SM_RESERVED4 27 +#Define SM_CXMIN 28 && С +#Define SM_CYMIN 29 && С߶ +#Define SM_CXSIZE 30 && λͼĿ +#Define SM_CYSIZE 31 && λͼĸ߶ +#Define SM_CXFRAME 32 && ߴɱ߿Ŀ +#Define SM_CYFRAME 33 && ߴɱ߿ĸ߶ +#Define SM_CXMINTRACK 34 && ڵС켣 +#Define SM_CYMINTRACK 35 && ڵС켣߶ +#Define SM_CXDOUBLECLK 36 && ˫ X λ +#Define SM_CYDOUBLECLK 37 && ˫ Y λ +#Define SM_CXICONSPACING 38 && ͼ֮ļ +#Define SM_CYICONSPACING 39 && ͼ֮ļ߶ +#Define SM_MENUDROPALIGNMENT 40 && 絯ʽ˵˵Ŀ࣬Ϊ 0 +#Define SM_PENWINDOWS 41 && װֱ֧ʴڵDLLʾʴڵľ +#Define SM_DBCSENABLED 42 && Ƿ֧˫ֽ +#Define SM_CMOUSEBUTTONS 43 +#Define SM_CMETRICS 44 +#Define SM_CXEDGE 45 +#Define SM_CYEDGE 46 +#Define SM_CXMINSPACING 47 +#Define SM_CYMINSPACING 48 +#Define SM_CXSMICON 49 && Сͼȣ +#Define SM_CYSMICON 50 && Сͼ߶ȣ +#Define SM_CYSMCAPTION 51 +#Define SM_CXSMSIZE 52 && СⰴťĿ +#Define SM_CYSMSIZE 53 && Сⰴťĸ߶ +#Define SM_CXMENUSIZE 54 +#Define SM_CYMENUSIZE 55 +#Define SM_ARRANGE 56 && windows Сڵһ־οapi32.txtе ARW +#Define SM_CXMINIMIZED 57 +#Define SM_CYMINIMIZED 58 +#Define SM_CXMAXTRACK 59 +#Define SM_CYMAXTRACK 60 +#Define SM_CXMAXIMIZED 61 +#Define SM_CYMAXIMIZED 62 +#Define SM_NETWORK 63 +* #Define +* #Define +* #Define +#Define SM_CLEANBOOT 67 && ʽ: 0 1 ȫģʽ 2 簲ȫģʽ +#Define SM_CXDRAG 68 && ϶ʱ X ƫ +#Define SM_CYDRAG 69 && ϶ʱ Y ƫ +#Define SM_SHOWSOUNDS 70 +#Define SM_CXMENUCHECK 71 && ΪλIJ˵ѡбλͼ X ߴ +#Define SM_CYMENUCHECK 72 && ΪλIJ˵ѡбλͼ Y ߴ +#Define SM_SLOWMACHINE 73 +#Define SM_MIDEASTENABLED 74 +#Define SM_MOUSEWHEELPRESENT 75 +#Define SM_XVIRTUALSCREEN 76 +#Define SM_YVIRTUALSCREEN 77 +#Define SM_CXVIRTUALSCREEN 78 +#Define SM_CYVIRTUALSCREEN 79 +#Define SM_CMONITORS 80 +#Define SM_SAMEDISPLAYFORMAT 81 +#Define SM_IMMENABLED 82 +#Define SM_REMOTESESSION 0x1000 +#Define SM_CXSIZEFRAME SM_CXFRAME +#Define SM_CYSIZEFRAME SM_CYFRAME +#Define SM_CXFIXEDFRAME SM_CXDLGFRAME +#Define SM_CYFIXEDFRAME SM_CYDLGFRAME +#Define SM_GETCURFOCUSA WM_USER + 1003 +#Define SM_GETCURFOCUSW WM_USER + 1004 +#Define SM_GETOPTIONS WM_USER + 1005 +#Define SM_GETSELCOUNT WM_USER + 1000 +#Define SM_GETSERVERSELA WM_USER + 1001 +#Define SM_GETSERVERSELW WM_USER + 1002 +* SM_SECURE Ƿװ˰ȫܣ +* SM_SHOWSOUNDS ǿӾʾ +* SM_SLOWMACHINE ϵͳٶ̫ + + + +*-- +*-- uiAction to SystemParametersInfo +*-- +#Define SPI_GETBEEP 1 +#Define SPI_SETBEEP 2 +#Define SPI_GETMOUSE 3 +#Define SPI_SETMOUSE 4 +#Define SPI_GETBORDER 5 +#Define SPI_SETBORDER 6 +#Define SPI_GETKEYBOARDSPEED 10 +#Define SPI_SETKEYBOARDSPEED 11 +#Define SPI_LANGDRIVER 12 +#Define SPI_ICONHORIZONTALSPACING 13 +#Define SPI_GETSCREENSAVETIMEOUT 14 +#Define SPI_SETSCREENSAVETIMEOUT 15 +#Define SPI_GETSCREENSAVEACTIVE 16 +#Define SPI_SETSCREENSAVEACTIVE 17 +#Define SPI_GETGRIDGRANULARITY 18 +#Define SPI_SETGRIDGRANULARITY 19 +#Define SPI_SETDESKWALLPAPER 20 +#Define SPI_SETDESKPATTERN 21 +#Define SPI_GETKEYBOARDDELAY 22 +#Define SPI_SETKEYBOARDDELAY 23 +#Define SPI_ICONVERTICALSPACING 24 +#Define SPI_GETICONTITLEWRAP 25 +#Define SPI_SETICONTITLEWRAP 26 +#Define SPI_GETMENUDROPALIGNMENT 27 +#Define SPI_SETMENUDROPALIGNMENT 28 +#Define SPI_SETDOUBLECLKWIDTH 29 +#Define SPI_SETDOUBLECLKHEIGHT 30 +#Define SPI_GETICONTITLELOGFONT 31 +#Define SPI_SETDOUBLECLICKTIME 32 +#Define SPI_SETMOUSEBUTTONSWAP 33 +#Define SPI_SETICONTITLELOGFONT 34 +#Define SPI_GETFASTTASKSWITCH 5 +#Define SPI_SETFASTTASKSWITCH 36 +#Define SPI_SETDRAGFULLWINDOWS 37 +#Define SPI_GETDRAGFULLWINDOWS 38 +#Define SPI_GETNONCLIENTMETRICS 41 +#Define SPI_SETNONCLIENTMETRICS 42 +#Define SPI_GETMINIMIZEDMETRICS 43 +#Define SPI_SETMINIMIZEDMETRICS 44 +#Define SPI_GETICONMETRICS 45 +#Define SPI_SETICONMETRICS 46 +#Define SPI_SETWORKAREA 47 +#Define SPI_GETWORKAREA 48 +#Define SPI_SETPENWINDOWS 49 +#Define SPI_GETFILTERKEYS 50 +#Define SPI_SETFILTERKEYS 51 +#Define SPI_GETTOGGLEKEYS 52 +#Define SPI_SETTOGGLEKEYS 53 +#Define SPI_GETMOUSEKEYS 54 +#Define SPI_SETMOUSEKEYS 55 +#Define SPI_GETSHOWSOUNDS 56 +#Define SPI_SETSHOWSOUNDS 57 +#Define SPI_GETSTICKYKEYS 58 +#Define SPI_SETSTICKYKEYS 59 +#Define SPI_GETACCESSTIMEOUT 60 +#Define SPI_SETACCESSTIMEOUT 61 +#Define SPI_GETSERIALKEYS 62 +#Define SPI_SETSERIALKEYS 63 +#Define SPI_GETSOUNDSENTRY 64 +#Define SPI_SETSOUNDSENTRY 65 +#Define SPI_GETHIGHCONTRAST 66 +#Define SPI_SETHIGHCONTRAST 67 +#Define SPI_GETKEYBOARDPREF 68 +#Define SPI_SETKEYBOARDPREF 69 +#Define SPI_GETSCREENREADER 70 +#Define SPI_SETSCREENREADER 71 +#Define SPI_GETANIMATION 72 +#Define SPI_SETANIMATION 73 +#Define SPI_GETFONTSMOOTHING 74 +#Define SPI_SETFONTSMOOTHING 75 +#Define SPI_SETDRAGWIDTH 76 +#Define SPI_SETDRAGHEIGHT 77 +#Define SPI_SETHANDHELD 78 +#Define SPI_GETLOWPOWERTIMEOUT 79 +#Define SPI_GETPOWEROFFTIMEOUT 80 +#Define SPI_SETLOWPOWERTIMEOUT 81 +#Define SPI_SETPOWEROFFTIMEOUT 82 +#Define SPI_GETLOWPOWERACTIVE 83 +#Define SPI_GETPOWEROFFACTIVE 84 +#Define SPI_SETLOWPOWERACTIVE 85 +#Define SPI_SETPOWEROFFACTIVE 86 +#Define SPI_SETCURSORS 87 +#Define SPI_SETICONS 88 +#Define SPI_GETDEFAULTINPUTLANG 89 +#Define SPI_SETDEFAULTINPUTLANG 90 +#Define SPI_SETLANGTOGGLE 91 +#Define SPI_GETWINDOWSEXTENSION 92 +#Define SPI_SETMOUSETRAILS 93 +#Define SPI_GETMOUSETRAILS 94 +#Define SPI_SCREENSAVERRUNNING 97 +#Define SPI_GETMENUSHOWDELAY 106 +#Define SPI_GETMENUFADE 0x1012 +#Define SPI_GETDROPSHADOW 0x1024 + +*-- +*-- fMode to SetTextAlign +*-- +#Define TA_NOUPDATECP 0 +#Define TA_UPDATECP 1 +#Define TA_TOP 0 && The reference point will be on the top edge of the bounding rectangle. +#Define TA_LEFT 0 && The reference point will be on the left edge of the bounding rectangle. +#Define TA_RIGHT 2 && The reference point will be on the right edge of the bounding rectangle. +#Define TA_CENTER 6 && The reference point will be aligned horizontally with the center of the bounding rectangle. +#Define TA_BOTTOM 8 && The reference point will be on the bottom edge of the bounding rectangle. +#Define TA_BASELINE 24 && The reference point will be on the base line of the text. +#Define VTA_BASELINE TA_BASELINE && The reference point will be on the base line of the text. +#Define VTA_RIGHT TA_TOP +#Define VTA_LEFT TA_BOTTOM +#Define VTA_CENTER TA_CENTER && The reference point will be aligned vertically with the center of the bounding rectangle. +#Define VTA_BOTTOM TA_RIGHT +#Define VTA_TOP TA_LEFT +*** The default values are TA_LEFT, TA_TOP, and TA_NOUPDATECP. + + +*-- +*-- nIndex to GetDeviceCaps +*-- +#Define DRIVERVERSION 0 && The device driver version. +#Define TECHNOLOGY 2 && Device technology. It can be any one of the + #Define DT_PLOTTER 0 && Vector plotter + #Define DT_RASDISPLAY 1 && Raster display + #Define DT_RASPRINTER 2 && Raster printer + #Define DT_RASCAMERA 3 && Raster camera + #Define DT_CHARSTREAM 4 && Character stream + #Define DT_METAFILE 5 && Metafile + #Define DT_DISPFILE 6 && Display file +#Define HORZSIZE 4 && Ļȣ׵λ +#Define VERTSIZE 6 && Ļ߶ȣ׵λ +#Define HORZRES 8 && Width, in pixels, of the screen. +#Define VERTRES 10 && Height, in raster lines, of the screen. +#Define LOGPIXELSX 88 && ÿ߼ӢӦˮƽص +#Define LOGPIXELSY 90 && ÿ߼ӢӦĴֱص +#Define BITSPIXEL 12 && Number of adjacent color bits for each pixel. +#Define PLANES 14 && Number of color planes. +#Define NUMBRUSHES 16 && Number of device-specific brushes +#Define NUMPENS 18 && Number of device-specific pens +#Define NUMFONTS 22 && Number of device-specific fonts. +#Define NUMCOLORS 24 && Number of entries in the device's color table. +#Define ASPECTX 40 && Relative width of a device pixel used for line drawing. +#Define ASPECTY 42 && Relative height of a device pixel used for line drawing. +#Define ASPECTXY 44 && Diagonal width of the device pixel used for line drawing. +#Define PDEVICESIZE 26 && Reserved +#Define CLIPCAPS 36 +#Define SIZEPALETTE 104 +#Define NUMRESERVED 106 +#Define COLORRES 108 +#Define PHYSICALWIDTH 110 && For printing devices: the physical width, in device units. +#Define PHYSICALHEIGHT 111 && For printing devices: the physical height, in device units. +#Define PHYSICALOFFSETX 112 && For printing devices: the physical printable area horizontal margin. +#Define PHYSICALOFFSETY 113 && For printing devices: the physical printable area vertical margin. +#Define SCALINGFACTORX 114 && For printing devices: the scaling factor along the horizontal axis. +#Define SCALINGFACTORY 115 && For printing devices: the scaling factor along the vertical axis. +* VREFRESH Windows NT only +* DESKTOPHORZRES Windows NT only +* DESKTOPVERTRES Windows NT only +* BLTALIGNMENT Windows NT only +#Define RASTERCAPS 38 && Value that indicates the raster capabilities of the device, as shown in the following table + * Capability Meaning + #Define RC_BANDING 2 && Requires banding support. + #Define RC_BITBLT 1 && Capable of transferring bitmaps. + #Define RC_BITMAP64 8 && Capable of supporting bitmaps larger than 64K. + #Define RC_DI_BITMAP 0x80 && Capable of supporting the SetDIBits and GetDIBits functions. + #Define RC_DIBTODEV 0x0200 && Capable of supporting the SetDIBitsToDevice function. + #Define RC_FLOODFILL 0x1000 && Capable of performing flood fills. + #Define RC_GDI20_OUTPUT 0x10 && Capable of supporting features of Windows 2.0. + #Define RC_PALETTE 0x0100 && Specifies a palette-based device. + #Define RC_SCALING 0x04 && Capable of scaling. + #Define RC_STRETCHBLT 0x0800 && Capable of performing the StretchBlt function. + #Define RC_STRETCHDIB 0x2000 && Capable of performing the StretchDIBits function. +#Define CURVECAPS 28 && Value that indicates the curve capabilities of the device, as shown in the following table: + * Value Meaning + #Define CC_NONE 0 && Device does not support curves. + #Define CC_CIRCLES 1 && Device can draw circles. + #Define CC_PIE 2 && Device can draw pie wedges. + #Define CC_CHORD 4 && Device can draw chord arcs. + #Define CC_ELLIPSES 8 && Device can draw ellipses. + #Define CC_WIDE 16 && Device can draw wide borders. + #Define CC_STYLED 32 && Device can draw styled borders. + #Define CC_WIDESTYLED 64 && Device can draw borders that are wide and styled. + #Define CC_INTERIORS 128 && Device can draw interiors. + #Define CC_ROUNDRECT 256 && Device can draw rounded rectangles. +#Define LINECAPS 30 && Value that indicates the line capabilities of the device, as shown in the following table: + * Value Meaning + #Define LC_NONE 0 && Device does not support lines. + #Define LC_POLYLINE 2 && Device can draw a polyline. + #Define LC_MARKER 4 && Device can draw a marker. + #Define LC_POLYMARKER 8 && Device can draw multiple markers. + #Define LC_WIDE 16 && Device can draw wide lines. + #Define LC_STYLED 32 && Device can draw styled lines. + #Define LC_WIDESTYLED 64 && Device can draw lines that are wide and styled. + #Define LC_INTERIORS 128 && Device can draw interiors. +#Define POLYGONALCAPS 32 && Value that indicates the polygon capabilities of the device, as shown in the following table: + * Value Meaning + #Define PC_NONE 0 && Device does not support polygons. + #Define PC_POLYGON 1 && Device can draw alternate-fill polygons. + #Define PC_RECTANGLE 2 && Device can draw rectangles. + #Define PC_WINDPOLYGON 4 && Device can draw winding-fill polygons. + #Define PC_SCANLINE 8 && Device can draw a single scanline. + #Define PC_WIDE 16 && Device can draw wide borders. + #Define PC_STYLED 32 && Device can draw styled borders. + #Define PC_WIDESTYLED 64 && Device can draw borders that are wide and styled. + #Define PC_INTERIORS 128 && Device can draw interiors. +#Define TEXTCAPS 34 && Value that indicates the text capabilities of the device, as shown in the following table: + * Bit Meaning + #Define TC_OP_CHARACTER 0x01 && Device is capable of character output precision. + #Define TC_OP_STROKE 0x02 && Device is capable of stroke output precision. + #Define TC_CP_STROKE 0x04 && Device is capable of stroke clip precision. + #Define TC_CR_90 0x08 && Device is capable of 90-degree character rotation. + #Define TC_CR_ANY 0x10 && Device is capable of any character rotation. + #Define TC_SF_X_YINDEP 0x20 && Device can scale independently in the x- and y-directions. + #Define TC_SA_DOUBLE 0x40 && Device is capable of doubled character for scaling. + #Define TC_SA_INTEGER 0x80 && Device uses integer multiples only for character scaling. + #Define TC_SA_CONTIN 0x0100 && Device uses any multiples for exact character scaling. + #Define TC_EA_DOUBLE 0x0200 && Device can draw double-weight characters. + #Define TC_IA_ABLE 0x0400 && Device can italicize. + #Define TC_UA_ABLE 0x0800 && Device can underline. + #Define TC_SO_ABLE 0x1000 && Device can draw strikeouts. + #Define TC_RA_ABLE 0x2000 && Device can draw raster fonts. + #Define TC_VA_ABLE 0x4000 && Device can draw vector fonts. + #Define TC_RESERVED 0x8000 && Reserved; must be zero. + #Define TC_SCROLLBLT 0x010000 + + +*-- +*-- fnWeight to CreateFont +*-- +#Define FW_DONTCARE 0 +#Define FW_THIN 100 +#Define FW_EXTRALIGHT 200 +#Define FW_LIGHT 300 +#Define FW_NORMAL 400 +#Define FW_MEDIUM 500 +#Define FW_SEMIBOLD 600 +#Define FW_BOLD 700 +#Define FW_EXTRABOLD 800 +#Define FW_HEAVY 900 +*-- +*-- fdwQuality to CreateFont +*-- +#Define DEFAULT_QUALITY 0 +#Define DRAFT_QUALITY 1 +#Define PROOF_QUALITY 2 +*-- +*-- fdwCharSet to CreateFont +*-- +#Define ANSI_CHARSET 0 +#Define DEFAULT_CHARSET 1 +#Define SYMBOL_CHARSET 2 +#Define SHIFTJIS_CHARSET 128 +#Define HANGEUL_CHARSET 129 +#Define CHINESEBIG5_CHARSET 136 +#Define OEM_CHARSET 255 +#Define JOHAB_CHARSET 130 +#Define HEBREW_CHARSET 177 +#Define ARABIC_CHARSET 178 +#Define GREEK_CHARSET 161 +#Define TURKISH_CHARSET 162 +#Define THAI_CHARSET 222 +#Define EASTEUROPE_CHARSET 238 +#Define RUSSIAN_CHARSET 204 +#Define MAC_CHARSET 77 +#Define BALTIC_CHARSET 186 +*-- +*-- fdwOutputPrecision to CreateFont +*-- +#Define OUT_DEFAULT_PRECIS 0 +#Define OUT_STRING_PRECIS 1 +#Define OUT_CHARACTER_PRECIS 2 +#Define OUT_STROKE_PRECIS 3 +#Define OUT_TT_PRECIS 4 +#Define OUT_DEVICE_PRECIS 5 +#Define OUT_RASTER_PRECIS 6 +#Define OUT_TT_ONLY_PRECIS 7 +#Define OUT_OUTLINE_PRECIS 8 +*-- +*-- fdwClipPrecision to CreateFont +*-- +#Define CLIP_DEFAULT_PRECIS 0 +#Define CLIP_CHARACTER_PRECIS 1 +#Define CLIP_STROKE_PRECIS 2 +#Define CLIP_MASK 15 +#Define CLIP_LH_ANGLES 16 +#Define CLIP_TT_ALWAYS 32 +#Define CLIP_EMBEDDED 128 +*-- +*-- fdwPitchAndFamily to CreateFont +*-- +#Define DEFAULT_PITCH 0 +#Define FIXED_PITCH 1 +#Define VARIABLE_PITCH 2 diff --git a/COMUN/utile/Teste/test.prg b/COMUN/utile/Teste/test.prg new file mode 100644 index 0000000..708c0fa --- /dev/null +++ b/COMUN/utile/Teste/test.prg @@ -0,0 +1,23 @@ +lcFile = FORCEEXT(SYS(16),'prg') +lnRows = APROCINFO(laproc,lcFile) + +lcProcedures = "" +FOR i = 1 TO lnRows + IF LOWER(laproc[i,3]) = 'procedure' + lcProcedures = lcProcedures + laproc[i,1] + CHR(13) + CHR(10) + ENDIF +ENDFOR +MESSAGEBOX(lcProcedures) + +PROCEDURE test1 + +ENDPROC && test1 + + +PROCEDURE test2 + +ENDPROC && test2 + +PROCEDURE test31 + +ENDPROC && test31 diff --git a/COMUN/utile/Teste/teste_roacont.prg b/COMUN/utile/Teste/teste_roacont.prg new file mode 100644 index 0000000..edf52e6 --- /dev/null +++ b/COMUN/utile/Teste/teste_roacont.prg @@ -0,0 +1,172 @@ +*** TESTE +CRLF = CHR(13) + CHR(10) +CTAB = CHR(9) + +gcTestMessage = "" + +gcHost = "jcsserver" +gcUser = "mariusm_auto" +gcPassword = "123" + +gnHandle = 0 + +*!* FACTURA +lnCodF = 1105748 +lnLunaF = 8 +lnAnF = 2006 +lnIdFactF = 5006097 + +*!* INCASARE +lnCodI = 1105749 +lnLunaI = 8 +lnAnI = 2006 +lnIdFactI = 5006097 +lnIdFactPI = 5006097 + +SET PROCEDURE TO D:\ROA_RB\ROACONT\COMUN\programe\odocumente ADDITIVE +SET PROCEDURE TO D:\ROA_RB\ROACONT\COMUN\programe\oproceduri_comune.prg ADDITIVE +goExecutor = CREATEOBJECT("oExecutor") +goConn = CREATEOBJECT("oConn") + +loMyTests = CREATEOBJECT("MyTests") +loMyTests.teste() + + +DEFINE CLASS MyTests AS CUSTOM + + ***================================================== + PROCEDURE teste + LOCAL lcFile, lnRows, lcProcedure,i + + lcFile = FORCEEXT(SYS(16),'prg') + IF ATC('PROCEDURE', lcFile) > 0 + lcFile = SUBSTR(lcFile, AT(':', lcFile)-1) + ENDIF + IF !FILE(lcFile) + this.appendMessage("Error", 'Nu exista fisierul ' + lcFile) + MESSAGEBOX(gcTestMessage) + RETURN + ENDIF + lnRows = APROCINFO(laproc,lcFile) + + lcProcedure = "" + + + + gnHandle = this.initializare(gcHost, gcUser, gcPassword) + lcTestFile = SYS(16) + IF gnHandle > 0 + FOR i = 1 TO lnRows + lcProcedure = laProc[i,1] + IF AT('.', lcProcedure) > 0 + lcProcedure = SUBSTR(lcProcedure, AT('.', lcProcedure) + 1) + ENDIF + + IF LOWER(laproc[i,3]) <> 'procedure' OR LEFT(LOWER(lcProcedure), 5) <> 'test_' + LOOP + ENDIF + + lnSucces = THIS.&lcProcedure.() + + ENDFOR + +*!* lnSucces = this.test_referintedocumentenota() +*!* lnSucces = this.test_referintedocument() + ENDIF + lnSucces = this.curatare(gnHandle) + + MESSAGEBOX(gcTestMessage) + ENDPROC && teste + + + ***================================================== + FUNCTION initializare + LPARAMETERS tcHost, tcUser, tcPassword + + LOCAL lnHandle + lnHandle = goConn.connect(tcHost, tcUser, tcPassword) + IF lnHandle <= 0 + this.appendMessage("Error","Nu s-a realizat conexiunea") + ELSE + this.appendMessage("Succes","S-a realizat conexiunea") + ENDIF + + RETURN lnHandle + ENDFUNC && initializare + + + FUNCTION Error(nError,cMethod,nLine) + LOCAL lcError + lcError = MESSAGE() + ';' + TRANSFORM(nError) + ';' + cMethod + ';' + ';' + TRANSFORM(nLine) + DEBUG + SUSPEND + this.appendMessage("Error",lcError) + ENDFUNC && Error + + ***================================================== + FUNCTION curatare + LPARAMETERS tnHandle + + LOCAL lnSucces + lnSucces = 1 + + IF tnHandle > 0 + lnSucces = SQLDISCONNECT(tnHandle) + ENDIF + + IF lnSucces <= 0 + this.appendMessage("Error","Nu s-a inchis conexiunea") + ELSE + this.appendMessage("Succes","S-a inchis conexiunea") + ENDIF + + RETURN lnSucces + ENDFUNC && curatare + + ***================================================== + PROCEDURE Verifica + LPARAMETERS tuValue1, tuValue2, tcTest, tcMessage + + IF tuValue1 <> tuValue2 + this.appendMessage("Error",tcTest + ";" + tcMessage) + ELSE + this.appendMessage("Succes",tcTest + ";") + ENDIF + ENDPROC && verifica + + PROCEDURE appendMessage + LPARAMETERS tcResult, tcMessage + + gcTestMessage = gcTestMessage + tcResult + CTAB + tcMessage + CRLF + _CLIPTEXT = gcTestMessage + ENDPROC + + ***================================================== + FUNCTION test_referintedocumentenota + + LOCAL lnSucces + *!* verific o nota de factura cu referinte + llReferinteDocumente = ReferinteDocumenteNota(lnAnF, lnLunaF, lnCodF) && && odocumente.prg + this.Verifica(llReferinteDocumente, .T., "test_referintedocumentenota-1", "Documentul are referinte") + + *!* verific o nota de incasare fara referinte + llReferinteDocumente = ReferinteDocumenteNota(lnAnI, lnLunaI, lnCodI) && && odocumente.prg + this.Verifica(llReferinteDocumente, .F., "test_referintedocumentenota-2", "Documentul nu are referinte") + + ENDFUNC && test_referintedocument + + ***================================================== + FUNCTION test_referintedocument + + LOCAL lnSucces + *!* verific un id_fact cu referinte + llReferinteDocumente = ReferinteDocument(lnAnF, lnLunaF, lnCodF, lnIdFactF) && && odocumente.prg + this.Verifica(llReferinteDocumente, .T., "test_referintedocument-1", "Documentul are referinte") + + *!* verific un id_fact fara referinte + llReferinteDocumente = ReferinteDocument(lnAnI, lnLunaI, lnCodI, lnIdFactI) && && odocumente.prg + this.Verifica(llReferinteDocumente, .F., "test_referintedocument-2", "Documentul nu are referinte") + + ENDFUNC && test_referintedocument + +ENDDEFINE diff --git a/COMUN/utile/calendar/_calendar.vct b/COMUN/utile/calendar/_calendar.vct new file mode 100644 index 0000000..ea55f3c Binary files /dev/null and b/COMUN/utile/calendar/_calendar.vct differ diff --git a/COMUN/utile/calendar/_calendar.vcx b/COMUN/utile/calendar/_calendar.vcx new file mode 100644 index 0000000..17bb7b0 Binary files /dev/null and b/COMUN/utile/calendar/_calendar.vcx differ diff --git a/COMUN/utile/calendar/cal_arrow_down.png b/COMUN/utile/calendar/cal_arrow_down.png new file mode 100644 index 0000000..cf44648 Binary files /dev/null and b/COMUN/utile/calendar/cal_arrow_down.png differ diff --git a/COMUN/utile/calendar/cal_arrow_left.png b/COMUN/utile/calendar/cal_arrow_left.png new file mode 100644 index 0000000..b4c5873 Binary files /dev/null and b/COMUN/utile/calendar/cal_arrow_left.png differ diff --git a/COMUN/utile/calendar/cal_arrow_right.png b/COMUN/utile/calendar/cal_arrow_right.png new file mode 100644 index 0000000..4391185 Binary files /dev/null and b/COMUN/utile/calendar/cal_arrow_right.png differ diff --git a/COMUN/utile/calendar/cal_arrow_up.png b/COMUN/utile/calendar/cal_arrow_up.png new file mode 100644 index 0000000..c326fc8 Binary files /dev/null and b/COMUN/utile/calendar/cal_arrow_up.png differ diff --git a/COMUN/utile/chatbot/.claude/settings.local.json b/COMUN/utile/chatbot/.claude/settings.local.json new file mode 100644 index 0000000..a3bc2be --- /dev/null +++ b/COMUN/utile/chatbot/.claude/settings.local.json @@ -0,0 +1,8 @@ +{ + "permissions": { + "allow": [ + "Bash(node:*)" + ], + "deny": [] + } +} \ No newline at end of file diff --git a/COMUN/utile/chatbot/CLAUDE.md b/COMUN/utile/chatbot/CLAUDE.md new file mode 100644 index 0000000..0013969 --- /dev/null +++ b/COMUN/utile/chatbot/CLAUDE.md @@ -0,0 +1,42 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## Project Overview + +This is a single-file chatbot application for Romfast technical support. The project consists of a standalone HTML file (`chatbot_maria.html`) that implements a full-featured chatbot interface using the Flowise embed library. + +## Architecture + +The chatbot integrates with a Flowise API backend hosted at `https://mutual-special-koala.ngrok-free.app` using chatflow ID `d4911620-07fe-41f8-adb4-f2f52d6ec766`. + +Key architectural components: +- **Flowise Integration**: Uses the Flowise embed library from CDN for the main chatbot functionality +- **Direct API Mode**: Supports URL parameter-based message handling that bypasses the chat interface and displays responses in a modal overlay +- **Dual Display Modes**: + - Standard chatbot widget with starter prompts + - Direct API response modal when `?message=` URL parameter is present + +## Key Features + +- **Maria ChatBot**: Romanian language technical support assistant for Romfast ROA system +- **URL Parameter Support**: Can accept initial messages via `?message=` URL parameter +- **Conditional UI**: Hides starter prompts when a direct message is provided +- **Chat History**: Saves conversation history to localStorage when transitioning from API mode to chat mode +- **Responsive Design**: Mobile-friendly layout with collapsible menu + +## Configuration + +The chatbot configuration is embedded in the JavaScript module: +- API Host: `https://mutual-special-koala.ngrok-free.app` +- Chatflow ID: `d4911620-07fe-41f8-adb4-f2f52d6ec766` +- Romanian language interface with predefined starter prompts about eFactura, SAFT declarations, and auto service workflows + +## Development Notes + +This is a static HTML file with no build process. To modify: +1. Edit `chatbot_maria.html` directly +2. Test by opening in a browser +3. For URL parameter testing, use format: `chatbot_maria.html?message=your%20message%20here` + +The application handles two distinct user flows based on URL parameters, switching between embedded chatbot widget and full-screen API response modal. \ No newline at end of file diff --git a/COMUN/utile/chatbot/README.md b/COMUN/utile/chatbot/README.md new file mode 100644 index 0000000..17556b8 --- /dev/null +++ b/COMUN/utile/chatbot/README.md @@ -0,0 +1,128 @@ +# Chatbot Maria - Romfast Support + +Un chatbot de suport tehnic pentru sistemul ROA, construit cu Flowise embed. + +## Funcționalități + +- **Chatbot integrat**: Interface de chat folosind Flowise embed library +- **Suport pentru URL parametri**: Permite trimiterea directă a mesajelor prin URL +- **Două moduri de afișare**: + - Chat widget standard cu prompt-uri predefinite + - Modal de răspuns direct pentru mesaje din URL +- **Gestionare robustă a caracterelor speciale**: Suport pentru URL-uri cu secvențe de encoding problematice + +## Testare + +### 1. Test de bază +Deschide fișierul direct în browser: +``` +chatbot_maria.html +``` + +### 2. Test cu mesaj din URL +Testează funcția de mesaj direct prin URL: +``` +chatbot_maria.html?message=Cum%20se%20actualizeaza%20tokenul%20eFactura? +``` + +### 3. Test cu caractere speciale +Testează cu mesaje care conțin caractere speciale (cazul problematic): +``` +chatbot_maria.html?message=F:%20Header%20(1)%20sectiune%20Company%20(1)%20sectiune%20BankAccount%20(1)%20eroare%20structura:%20grupul%20%27%BankAccount_choice0%27%20ar%20fi%20trebuit%20sa%20apara%20de%20minimum%201%20ori,%20dar%20apare%20efectiv%20de%200%20ori +``` + +### 4. Debugging în Browser + +Pentru a vedea ce se întâmplă în timpul testării: + +1. **Deschide Developer Tools**: F12 în browser +2. **Mergi la tab-ul Console** +3. **Încarcă pagina cu parametrul URL** +4. **Monitorizează log-urile**: + - `"Parametru decodat cu URLSearchParams:"` - prima încercare + - `"Valoare brută din URL (fallback):"` - dacă URLSearchParams nu funcționează + - `"Parametru decodat cu metoda sigură:"` - rezultatul final + - `"Se trimite mesajul direct prin API:"` - confirmă că mesajul e trimis + - `"Status răspuns:"` - codul de răspuns al API-ului + - `"Răspuns primit de la API:"` - răspunsul de la chatbot + +### 5. Verificare Funcționalitate + +**Testul a reușit dacă**: +- ✅ Nu vezi erori "URI malformed" în console +- ✅ Vezi mesajul decodat în console +- ✅ Vezi "Se trimite mesajul direct prin API" +- ✅ Vezi răspunsul API în modal + +**Semnale de probleme**: +- ❌ "Eroare la decodarea parametrului URL" +- ❌ "URI malformed" +- ❌ Pagina nu afișează nimic +- ❌ Request-ul API eșuează cu timeout + +### 6. Testare Offline + +Poți testa funcțiile de decodificare fără server: + +1. **Deschide Developer Tools** (F12) +2. **Mergi la tab-ul Console** +3. **Testează manual funcțiile**: + +```javascript +// Test URLSearchParams +const urlParams = new URLSearchParams("?message=test%20cu%20caractere%20speciale"); +console.log(urlParams.get('message')); + +// Test cu URL problematic +const problematicUrl = "?message=F:%20Header%20(1)%20sectiune%20Company%20(1)%20sectiune%20BankAccount%20(1)%20eroare%20structura:%20grupul%20%27%BankAccount_choice0%27%20ar%20fi%20trebuit%20sa%20apara%20de%20minimum%201%20ori,%20dar%20apare%20efectiv%20de%200%20ori"; +const testParams = new URLSearchParams(problematicUrl); +console.log(testParams.get('message')); +``` + +## Configurare API + +Chatbot-ul se conectează la: +- **API Host**: `https://mutual-special-koala.ngrok-free.app` +- **Chatflow ID**: `d4911620-07fe-41f8-adb4-f2f52d6ec766` + +Pentru modificare, editează valorile în secțiunea JavaScript: +```javascript +const apiHost = "https://mutual-special-koala.ngrok-free.app"; +const chatflowId = "d4911620-07fe-41f8-adb4-f2f52d6ec766"; +``` + +## Troubleshooting + +### Problema: "URI malformed" +**Soluție**: Implementarea actuală gestionează automat această problemă prin decodificare sigură chunk-by-chunk. + +### Problema: API nu răspunde +**Verificări**: +1. API host-ul este accesibil +2. Chatflow ID-ul este corect +3. Conexiunea la internet funcționează +4. Nu sunt blocate request-urile CORS + +### Problema: Pagina nu se încarcă +**Verificări**: +1. Fișierul HTML este valid +2. CDN-ul Flowise este accesibil: `https://cdn.jsdelivr.net/npm/flowise-embed/dist/web.js` +3. Nu sunt erori JavaScript în console + +### Problema: Mesajul nu se trimite +**Verificări**: +1. Parametrul URL este corect +2. Mesajul nu este gol după decodificare +3. API-ul acceptă request-ul +4. Nu sunt erori de timeout (30 secunde) + +## Prompt-uri Predefinite + +Chatbot-ul afișează următoarele prompt-uri standard când nu este specificat un mesaj în URL: + +- Cum se actualizeaza tokenul eFactura? +- Cand se completeaza codul de plata pentru declaratia SAFT? +- Care sunt pasii pentru emiterea unei facturi service auto? +- Cum se valideaza o comanda service auto? +- Cum se deschide o comanda service auto? +- Cum se modifica datele initiale ale unei comenzi service auto? \ No newline at end of file diff --git a/COMUN/utile/chatbot/Romfast Chatflow Flowise.json b/COMUN/utile/chatbot/Romfast Chatflow Flowise.json new file mode 100644 index 0000000..a45be6d --- /dev/null +++ b/COMUN/utile/chatbot/Romfast Chatflow Flowise.json @@ -0,0 +1,374 @@ +{ + "nodes": [ + { + "id": "groqChat_0", + "position": { + "x": -853.9751777873863, + "y": 729.9149966558168 + }, + "type": "customNode", + "data": { + "id": "groqChat_0", + "label": "GroqChat", + "version": 3, + "name": "groqChat", + "type": "GroqChat", + "baseClasses": [ + "GroqChat", + "BaseChatModel", + "BaseLanguageModel", + "Runnable" + ], + "category": "Chat Models", + "description": "Wrapper around Groq API with LPU Inference Engine", + "inputParams": [ + { + "label": "Connect Credential", + "name": "credential", + "type": "credential", + "credentialNames": [ + "groqApi" + ], + "optional": true, + "id": "groqChat_0-input-credential-credential" + }, + { + "label": "Model Name", + "name": "modelName", + "type": "asyncOptions", + "loadMethod": "listModels", + "placeholder": "llama3-70b-8192", + "id": "groqChat_0-input-modelName-asyncOptions" + }, + { + "label": "Temperature", + "name": "temperature", + "type": "number", + "step": 0.1, + "default": 0.9, + "optional": true, + "id": "groqChat_0-input-temperature-number" + } + ], + "inputAnchors": [ + { + "label": "Cache", + "name": "cache", + "type": "BaseCache", + "optional": true, + "id": "groqChat_0-input-cache-BaseCache" + } + ], + "inputs": { + "cache": "", + "modelName": "meta-llama/llama-4-scout-17b-16e-instruct", + "temperature": "0.3" + }, + "outputAnchors": [ + { + "id": "groqChat_0-output-groqChat-GroqChat|BaseChatModel|BaseLanguageModel|Runnable", + "name": "groqChat", + "label": "GroqChat", + "description": "Wrapper around Groq API with LPU Inference Engine", + "type": "GroqChat | BaseChatModel | BaseLanguageModel | Runnable" + } + ], + "outputs": {}, + "selected": false + }, + "width": 300, + "height": 521, + "selected": false, + "positionAbsolute": { + "x": -853.9751777873863, + "y": 729.9149966558168 + }, + "dragging": false + }, + { + "id": "bufferWindowMemory_0", + "position": { + "x": -462.951092583539, + "y": 592.4237789688921 + }, + "type": "customNode", + "data": { + "id": "bufferWindowMemory_0", + "label": "Buffer Window Memory", + "version": 2, + "name": "bufferWindowMemory", + "type": "BufferWindowMemory", + "baseClasses": [ + "BufferWindowMemory", + "BaseChatMemory", + "BaseMemory" + ], + "category": "Memory", + "description": "Uses a window of size k to surface the last k back-and-forth to use as memory", + "inputParams": [ + { + "label": "Size", + "name": "k", + "type": "number", + "default": "4", + "description": "Window of size k to surface the last k back-and-forth to use as memory.", + "id": "bufferWindowMemory_0-input-k-number" + }, + { + "label": "Session Id", + "name": "sessionId", + "type": "string", + "description": "If not specified, a random id will be used. Learn more", + "default": "", + "optional": true, + "additionalParams": true, + "id": "bufferWindowMemory_0-input-sessionId-string" + }, + { + "label": "Memory Key", + "name": "memoryKey", + "type": "string", + "default": "chat_history", + "additionalParams": true, + "id": "bufferWindowMemory_0-input-memoryKey-string" + } + ], + "inputAnchors": [], + "inputs": { + "k": "5", + "sessionId": "", + "memoryKey": "chat_history" + }, + "outputAnchors": [ + { + "id": "bufferWindowMemory_0-output-bufferWindowMemory-BufferWindowMemory|BaseChatMemory|BaseMemory", + "name": "bufferWindowMemory", + "label": "BufferWindowMemory", + "description": "Uses a window of size k to surface the last k back-and-forth to use as memory", + "type": "BufferWindowMemory | BaseChatMemory | BaseMemory" + } + ], + "outputs": {}, + "selected": false + }, + "width": 300, + "height": 331, + "positionAbsolute": { + "x": -462.951092583539, + "y": 592.4237789688921 + }, + "selected": false, + "dragging": false + }, + { + "id": "documentStoreVS_0", + "position": { + "x": -502.4400397551632, + "y": 1058.8723425753983 + }, + "type": "customNode", + "data": { + "id": "documentStoreVS_0", + "label": "Document Store (Vector)", + "version": 1, + "name": "documentStoreVS", + "type": "DocumentStoreVS", + "baseClasses": [ + "DocumentStoreVS" + ], + "category": "Vector Stores", + "description": "Search and retrieve documents from Document Store", + "inputParams": [ + { + "label": "Select Store", + "name": "selectedStore", + "type": "asyncOptions", + "loadMethod": "listStores", + "id": "documentStoreVS_0-input-selectedStore-asyncOptions" + } + ], + "inputAnchors": [], + "inputs": { + "selectedStore": "ed308d4d-bb05-480c-b399-d17edf5c0302" + }, + "outputAnchors": [ + { + "name": "output", + "label": "Output", + "type": "options", + "description": "", + "options": [ + { + "id": "documentStoreVS_0-output-retriever-BaseRetriever", + "name": "retriever", + "label": "Retriever", + "description": "", + "type": "BaseRetriever" + }, + { + "id": "documentStoreVS_0-output-vectorStore-VectorStore", + "name": "vectorStore", + "label": "Vector Store", + "description": "", + "type": "VectorStore" + } + ], + "default": "retriever" + } + ], + "outputs": { + "output": "retriever" + }, + "selected": false + }, + "width": 300, + "height": 312, + "positionAbsolute": { + "x": -502.4400397551632, + "y": 1058.8723425753983 + }, + "selected": false, + "dragging": false + }, + { + "id": "conversationalRetrievalQAChain_0", + "position": { + "x": -74.84182984134901, + "y": 846.5506790761656 + }, + "type": "customNode", + "data": { + "id": "conversationalRetrievalQAChain_0", + "label": "Conversational Retrieval QA Chain", + "version": 3, + "name": "conversationalRetrievalQAChain", + "type": "ConversationalRetrievalQAChain", + "baseClasses": [ + "ConversationalRetrievalQAChain", + "BaseChain", + "Runnable" + ], + "category": "Chains", + "description": "Document QA - built on RetrievalQAChain to provide a chat history component", + "inputParams": [ + { + "label": "Return Source Documents", + "name": "returnSourceDocuments", + "type": "boolean", + "optional": true, + "id": "conversationalRetrievalQAChain_0-input-returnSourceDocuments-boolean" + }, + { + "label": "Rephrase Prompt", + "name": "rephrasePrompt", + "type": "string", + "description": "Using previous chat history, rephrase question into a standalone question", + "warning": "Prompt must include input variables: {chat_history} and {question}", + "rows": 4, + "additionalParams": true, + "optional": true, + "default": "Given the following conversation and a follow up question, rephrase the follow up question to be a standalone question.\n\nChat History:\n{chat_history}\nFollow Up Input: {question}\nStandalone Question:", + "id": "conversationalRetrievalQAChain_0-input-rephrasePrompt-string" + }, + { + "label": "Response Prompt", + "name": "responsePrompt", + "type": "string", + "description": "Taking the rephrased question, search for answer from the provided context", + "warning": "Prompt must include input variable: {context}", + "rows": 4, + "additionalParams": true, + "optional": true, + "default": "I want you to act as a document that I am having a conversation with. Your name is \"AI Assistant\". Using the provided context, answer the user's question to the best of your ability using the resources provided.\nIf there is nothing in the context relevant to the question at hand, just say \"Hmm, I'm not sure\" and stop after that. Refuse to answer any question not about the info. Never break character.\n------------\n{context}\n------------\nREMEMBER: If there is no relevant information within the context, just say \"Hmm, I'm not sure\". Don't try to make up an answer. Never break character.", + "id": "conversationalRetrievalQAChain_0-input-responsePrompt-string" + } + ], + "inputAnchors": [ + { + "label": "Chat Model", + "name": "model", + "type": "BaseChatModel", + "id": "conversationalRetrievalQAChain_0-input-model-BaseChatModel" + }, + { + "label": "Vector Store Retriever", + "name": "vectorStoreRetriever", + "type": "BaseRetriever", + "id": "conversationalRetrievalQAChain_0-input-vectorStoreRetriever-BaseRetriever" + }, + { + "label": "Memory", + "name": "memory", + "type": "BaseMemory", + "optional": true, + "description": "If left empty, a default BufferMemory will be used", + "id": "conversationalRetrievalQAChain_0-input-memory-BaseMemory" + }, + { + "label": "Input Moderation", + "description": "Detect text that could generate harmful output and prevent it from being sent to the language model", + "name": "inputModeration", + "type": "Moderation", + "optional": true, + "list": true, + "id": "conversationalRetrievalQAChain_0-input-inputModeration-Moderation" + } + ], + "inputs": { + "model": "{{groqChat_0.data.instance}}", + "vectorStoreRetriever": "{{documentStoreVS_0.data.instance}}", + "memory": "{{bufferWindowMemory_0.data.instance}}", + "returnSourceDocuments": false, + "rephrasePrompt": "Given the following conversation and a follow up question, rephrase the follow up question to be a standalone question.\n\nChat History:\n{chat_history}\nFollow Up Input: {question}\nStandalone Question:", + "responsePrompt": "I want you to act as a technical support person for ROA, an ERP developed by Romfast company. You have access to the documents from your context, Your name is \"Maria\". Using the provided context and your general knowledge, answer the user's question to the best of your ability using the resources provided. I want you to give the answer for the program users, nontechnical, not for the programmer. I don't want to solve program errors, but to help users to solve their problems.\nKeep the answer as short as possible, but descriptive. Don't repeat the problem in your answer. You can make light jokes and greet people in funny ways. Never break character. don't greet the user on every message.\n------------\n{context}\n------------\nREMEMBER: If there is no relevant information within the context, just say \"Hmm, nu am informații despre acest subiect.\" and ask the user if he wishes for you to try to answer anyway. Don't try to make up an answer. Don't make up answers that aren't in the context. Never break character, unless the user writes the secret password: mariamaria\n\nAnswer only in Romanian and writes all the answers without diacritics. Write without diacritics and for the answers from the knowledge database.", + "inputModeration": "" + }, + "outputAnchors": [ + { + "id": "conversationalRetrievalQAChain_0-output-conversationalRetrievalQAChain-ConversationalRetrievalQAChain|BaseChain|Runnable", + "name": "conversationalRetrievalQAChain", + "label": "ConversationalRetrievalQAChain", + "description": "Document QA - built on RetrievalQAChain to provide a chat history component", + "type": "ConversationalRetrievalQAChain | BaseChain | Runnable" + } + ], + "outputs": {}, + "selected": false + }, + "width": 300, + "height": 532, + "selected": false, + "dragging": false, + "positionAbsolute": { + "x": -74.84182984134901, + "y": 846.5506790761656 + } + } + ], + "edges": [ + { + "source": "documentStoreVS_0", + "sourceHandle": "documentStoreVS_0-output-retriever-BaseRetriever", + "target": "conversationalRetrievalQAChain_0", + "targetHandle": "conversationalRetrievalQAChain_0-input-vectorStoreRetriever-BaseRetriever", + "type": "buttonedge", + "id": "documentStoreVS_0-documentStoreVS_0-output-retriever-BaseRetriever-conversationalRetrievalQAChain_0-conversationalRetrievalQAChain_0-input-vectorStoreRetriever-BaseRetriever" + }, + { + "source": "bufferWindowMemory_0", + "sourceHandle": "bufferWindowMemory_0-output-bufferWindowMemory-BufferWindowMemory|BaseChatMemory|BaseMemory", + "target": "conversationalRetrievalQAChain_0", + "targetHandle": "conversationalRetrievalQAChain_0-input-memory-BaseMemory", + "type": "buttonedge", + "id": "bufferWindowMemory_0-bufferWindowMemory_0-output-bufferWindowMemory-BufferWindowMemory|BaseChatMemory|BaseMemory-conversationalRetrievalQAChain_0-conversationalRetrievalQAChain_0-input-memory-BaseMemory" + }, + { + "source": "groqChat_0", + "sourceHandle": "groqChat_0-output-groqChat-GroqChat|BaseChatModel|BaseLanguageModel|Runnable", + "target": "conversationalRetrievalQAChain_0", + "targetHandle": "conversationalRetrievalQAChain_0-input-model-BaseChatModel", + "type": "buttonedge", + "id": "groqChat_0-groqChat_0-output-groqChat-GroqChat|BaseChatModel|BaseLanguageModel|Runnable-conversationalRetrievalQAChain_0-conversationalRetrievalQAChain_0-input-model-BaseChatModel" + } + ] +} \ No newline at end of file diff --git a/COMUN/utile/chatbot/before_after_test.js b/COMUN/utile/chatbot/before_after_test.js new file mode 100644 index 0000000..4e82377 --- /dev/null +++ b/COMUN/utile/chatbot/before_after_test.js @@ -0,0 +1,146 @@ +// Before and After Comparison Test +console.log("=== BEFORE vs AFTER: URL Parameter Decoding ===\n"); + +const problematicSearch = "?message=F:%20Header%20(1)%20sectiune%20Company%20(1)%20sectiune%20BankAccount%20(1)%20eroare%20structura:%20grupul%20%27%BankAccount_choice0%27%20ar%20fi%20trebuit%20sa%20apara%20de%20minimum%201%20ori,%20dar%20apare%20efectiv%20de%200%20ori"; + +// OLD IMPLEMENTATION (with the problematic line) +function oldGetUrlParameter(name, searchString) { + try { + const urlParams = new URLSearchParams(searchString); + const value = urlParams.get(name); + + if (value === null) { + return ''; + } + + return value; + } catch (error) { + // Old problematic fallback + try { + name = name.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]'); + var regex = new RegExp('[\\?&]' + name + '=([^&#]*)'); + var results = regex.exec(searchString); + + if (results === null) { + return ''; + } + + let rawValue = results[1]; + + // THIS IS THE PROBLEMATIC PART - corrupts %B sequences + let cleaned = rawValue + .replace(/\+/g, ' ') + .replace(/%20/g, ' ') + .replace(/%27/g, "'") + .replace(/%28/g, "(") + .replace(/%29/g, ")") + .replace(/%3A/g, ":") + .replace(/%2C/g, ",") + .replace(/%([\dA-Fa-f])/g, '$1') // PROBLEM: Replaces %B with B + .replace(/%/g, ''); // Removes remaining % + + return cleaned; + } catch (fallbackError) { + return ''; + } + } +} + +// NEW IMPLEMENTATION (improved) +function newGetUrlParameter(name, searchString) { + try { + const urlParams = new URLSearchParams(searchString); + const value = urlParams.get(name); + + if (value === null) { + return ''; + } + + return value; + } catch (error) { + // Improved safe fallback + try { + name = name.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]'); + var regex = new RegExp('[\\?&]' + name + '=([^&#]*)'); + var results = regex.exec(searchString); + + if (results === null) { + return ''; + } + + let rawValue = results[1]; + + // Safe decode function + function safeDecodeURIComponent(str) { + str = str.replace(/\+/g, ' '); + + const chunks = str.split('%'); + let result = chunks[0]; + + for (let i = 1; i < chunks.length; i++) { + const chunk = chunks[i]; + if (chunk.length >= 2) { + const hexCode = chunk.substring(0, 2); + const rest = chunk.substring(2); + + if (/^[0-9A-Fa-f]{2}$/.test(hexCode)) { + try { + result += decodeURIComponent('%' + hexCode) + rest; + } catch (e) { + result += '%' + chunk; + } + } else { + // IMPROVEMENT: Preserves invalid sequences like %B + result += '%' + chunk; + } + } else { + result += '%' + chunk; + } + } + + return result; + } + + return safeDecodeURIComponent(rawValue); + + } catch (fallbackError) { + return ''; + } + } +} + +// Test both implementations +console.log("Problematic URL search parameter:"); +console.log(problematicSearch); +console.log(); + +console.log("=== OLD IMPLEMENTATION RESULT ==="); +try { + const oldResult = oldGetUrlParameter('message', problematicSearch); + console.log("✅ Success (but corrupted content):"); + console.log(oldResult); + console.log(); + console.log("🔍 Notice: '%BankAccount_choice0' became 'BankAccount_choice0' (lost the %B)"); +} catch (error) { + console.log("❌ Failed:"); + console.log(error.message); +} +console.log(); + +console.log("=== NEW IMPLEMENTATION RESULT ==="); +try { + const newResult = newGetUrlParameter('message', problematicSearch); + console.log("✅ Success (with preserved content):"); + console.log(newResult); + console.log(); + console.log("🔍 Notice: '%BankAccount_choice0' is preserved correctly"); +} catch (error) { + console.log("❌ Failed:"); + console.log(error.message); +} +console.log(); + +console.log("=== SUMMARY ==="); +console.log("OLD: Corrupts %B sequences by converting them to single characters"); +console.log("NEW: Preserves %B sequences as they are, preventing data loss"); +console.log("BENEFIT: No more URI malformed errors and accurate message content"); \ No newline at end of file diff --git a/COMUN/utile/chatbot/chatbot.html b/COMUN/utile/chatbot/chatbot.html new file mode 100644 index 0000000..cd7782f --- /dev/null +++ b/COMUN/utile/chatbot/chatbot.html @@ -0,0 +1,195 @@ + + + + + RomFast - Contact + + + + + + + + + \ No newline at end of file diff --git a/COMUN/utile/chatbot/chatbot_maria.html b/COMUN/utile/chatbot/chatbot_maria.html new file mode 100644 index 0000000..66741f7 --- /dev/null +++ b/COMUN/utile/chatbot/chatbot_maria.html @@ -0,0 +1,1262 @@ + + + + + + Maria ChatBot - Romfast Suport + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ + +
+ + +
+ +
+
+
+ + +
+
+
+

© 2025 Romfast. Toate drepturile rezervate.

+

ROA - Romfast Applications - Sisteme informatice pentru managementul afacerii

+
+
+
+ + + + + + + \ No newline at end of file diff --git a/COMUN/utile/chatbot/comprehensive_test.js b/COMUN/utile/chatbot/comprehensive_test.js new file mode 100644 index 0000000..82cb8f8 --- /dev/null +++ b/COMUN/utile/chatbot/comprehensive_test.js @@ -0,0 +1,119 @@ +// Comprehensive test to verify the URL decoding fix +console.log("=== COMPREHENSIVE URL DECODING TEST ===\n"); + +// Test the exact problematic URL from the user +const testURL = "https://www.romfast.ro/chatbot_maria.html?message=F:%20Header%20(1)%20sectiune%20Company%20(1)%20sectiune%20BankAccount%20(1)%20eroare%20structura:%20grupul%20%27%BankAccount_choice0%27%20ar%20fi%20trebuit%20sa%20apara%20de%20minimum%201%20ori,%20dar%20apare%20efectiv%20de%200%20ori"; + +console.log("Testing with the exact problematic URL:"); +console.log(testURL); +console.log(); + +// Extract the search params +const url = new URL(testURL); +const searchParams = url.search; +console.log("Search parameters:", searchParams); +console.log(); + +// Test different approaches +console.log("=== METHOD 1: URLSearchParams (Browser Native) ==="); +try { + const params = new URLSearchParams(searchParams); + const message = params.get('message'); + console.log("✅ SUCCESS - URLSearchParams handled it:"); + console.log("Result:", message); + console.log("Length:", message.length); + console.log("Contains replacement char:", message.includes('�')); +} catch (error) { + console.log("❌ FAILED - URLSearchParams error:"); + console.log("Error:", error.message); +} +console.log(); + +console.log("=== METHOD 2: decodeURIComponent (Direct) ==="); +try { + const rawParam = searchParams.match(/message=([^&]*)/)?.[1] || ''; + const decoded = decodeURIComponent(rawParam); + console.log("✅ SUCCESS - decodeURIComponent worked:"); + console.log("Result:", decoded); +} catch (error) { + console.log("❌ FAILED - decodeURIComponent error:"); + console.log("Error:", error.message); + console.log("This is the 'URI malformed' error you were experiencing!"); +} +console.log(); + +console.log("=== METHOD 3: Our Improved Safe Decoder ==="); +function safeDecodeURIComponent(str) { + // First replace + with spaces + str = str.replace(/\+/g, ' '); + + // Process % sequences chunk by chunk + const chunks = str.split('%'); + let result = chunks[0]; // First chunk is never encoded + + for (let i = 1; i < chunks.length; i++) { + const chunk = chunks[i]; + if (chunk.length >= 2) { + const hexCode = chunk.substring(0, 2); + const rest = chunk.substring(2); + + // Check if it's a valid hex code + if (/^[0-9A-Fa-f]{2}$/.test(hexCode)) { + try { + result += decodeURIComponent('%' + hexCode) + rest; + } catch (e) { + // If decoding fails, keep the original + result += '%' + chunk; + } + } else { + // Invalid hex code (like %B), keep as is + result += '%' + chunk; + } + } else { + // Incomplete code, keep as is + result += '%' + chunk; + } + } + + return result; +} + +try { + const rawParam = searchParams.match(/message=([^&]*)/)?.[1] || ''; + const decoded = safeDecodeURIComponent(rawParam); + console.log("✅ SUCCESS - Safe decoder worked:"); + console.log("Result:", decoded); + console.log("Preserved %B sequence:", decoded.includes('%B')); +} catch (error) { + console.log("❌ FAILED - Safe decoder error:"); + console.log("Error:", error.message); +} +console.log(); + +console.log("=== ANALYSIS ==="); +console.log("1. URLSearchParams DOES work, but converts %B to replacement character (�)"); +console.log("2. decodeURIComponent FAILS with 'URI malformed' error on %B"); +console.log("3. Our safe decoder PRESERVES the %B sequence intact"); +console.log(); + +console.log("=== THE ACTUAL ISSUE ==="); +console.log("The %B in your URL is not valid URL encoding because:"); +console.log("- Valid URL encoding requires two hex digits: %XX"); +console.log("- %B only has one hex digit"); +console.log("- This should probably be %0B (vertical tab) or %42 (letter 'B')"); +console.log(); + +console.log("=== THE SOLUTION ==="); +console.log("✅ Updated chatbot_maria.html with improved getUrlParameter function"); +console.log("✅ Function now handles invalid URL sequences gracefully"); +console.log("✅ No more 'URI malformed' errors"); +console.log("✅ Message content is preserved accurately"); +console.log(); + +console.log("=== EXPECTED BEHAVIOR ==="); +console.log("When you load the problematic URL, the chatbot will now:"); +console.log("1. First try URLSearchParams (which works but gives replacement char)"); +console.log("2. Use the decoded message from URLSearchParams"); +console.log("3. If URLSearchParams failed, fall back to safe decoder"); +console.log("4. Send the message to the API successfully"); +console.log("5. Display the response without errors"); \ No newline at end of file diff --git a/COMUN/utile/chatbot/test_final_solution.html b/COMUN/utile/chatbot/test_final_solution.html new file mode 100644 index 0000000..cfbdffa --- /dev/null +++ b/COMUN/utile/chatbot/test_final_solution.html @@ -0,0 +1,263 @@ + + + + + Final Solution Test - URL Parameter Decoding + + + +

Final Solution Test - URL Parameter Decoding

+

Testing the improved URL parameter decoding function that handles the %B issue gracefully.

+ +
+

Test Cases

+
+
+ +
+

Summary

+
+
+ + + + \ No newline at end of file diff --git a/COMUN/utile/chatbot/url_decoding_test.js b/COMUN/utile/chatbot/url_decoding_test.js new file mode 100644 index 0000000..6f1b756 --- /dev/null +++ b/COMUN/utile/chatbot/url_decoding_test.js @@ -0,0 +1,164 @@ +// URL Parameter Decoding Test Script +// Tests the problematic URL with %B character and various decoding methods + +console.log("=== URL Parameter Decoding Test ===\n"); + +// The problematic URL from the user's request +const problematicUrl = "https://www.romfast.ro/chatbot_maria.html?message=F:%20Header%20(1)%20sectiune%20Company%20(1)%20sectiune%20BankAccount%20(1)%20eroare%20structura:%20grupul%20%27%BankAccount_choice0%27%20ar%20fi%20trebuit%20sa%20apara%20de%20minimum%201%20ori,%20dar%20apare%20efectiv%20de%200%20ori"; + +console.log("Problematic URL:"); +console.log(problematicUrl); +console.log(); + +// Extract the query string +const urlObj = new URL(problematicUrl); +const queryString = urlObj.search; +const messageParam = queryString.match(/message=([^&]*)/)?.[1] || ''; + +console.log("Extracted message parameter (raw):"); +console.log(messageParam); +console.log(); + +// Test Method 1: URLSearchParams (this should fail with the %B issue) +console.log("=== Test 1: URLSearchParams method ==="); +try { + const searchParams = new URLSearchParams(queryString); + const decodedMessage1 = searchParams.get('message'); + console.log("✅ SUCCESS with URLSearchParams:"); + console.log(decodedMessage1); +} catch (error) { + console.log("❌ FAILED with URLSearchParams:"); + console.log("Error:", error.message); +} +console.log(); + +// Test Method 2: decodeURIComponent (this should also fail) +console.log("=== Test 2: decodeURIComponent method ==="); +try { + const decodedMessage2 = decodeURIComponent(messageParam); + console.log("✅ SUCCESS with decodeURIComponent:"); + console.log(decodedMessage2); +} catch (error) { + console.log("❌ FAILED with decodeURIComponent:"); + console.log("Error:", error.message); +} +console.log(); + +// Test Method 3: Manual decoding with character replacement (current fallback method) +console.log("=== Test 3: Manual decoding with replacement ==="); +try { + let manualDecoded = messageParam + .replace(/\+/g, ' ') + .replace(/%20/g, ' ') + .replace(/%27/g, "'") + .replace(/%28/g, "(") + .replace(/%29/g, ")") + .replace(/%3A/g, ":") + .replace(/%2C/g, ",") + .replace(/%([\dA-Fa-f])/g, '$1') // This line is problematic - replaces %B with B + .replace(/%/g, ''); // Removes remaining % + + console.log("✅ SUCCESS with manual decoding:"); + console.log(manualDecoded); + console.log("⚠️ NOTE: This method corrupts %B sequences!"); +} catch (error) { + console.log("❌ FAILED with manual decoding:"); + console.log("Error:", error.message); +} +console.log(); + +// Test Method 4: Improved manual decoding (recommended fix) +console.log("=== Test 4: Improved manual decoding (RECOMMENDED) ==="); +try { + // First, handle known safe replacements + let improvedDecoded = messageParam + .replace(/\+/g, ' ') + .replace(/%20/g, ' ') + .replace(/%27/g, "'") + .replace(/%28/g, "(") + .replace(/%29/g, ")") + .replace(/%3A/g, ":") + .replace(/%2C/g, ","); + + // Then handle invalid sequences by removing them entirely or replacing with safe characters + // %B is not a valid URL encoding (should be %0B for vertical tab or something else) + improvedDecoded = improvedDecoded + .replace(/%[^0-9A-Fa-f]/g, '') // Remove invalid % sequences that don't have valid hex + .replace(/%[0-9A-Fa-f]$/g, '') // Remove incomplete % sequences at end + .replace(/%([0-9A-Fa-f])(?![0-9A-Fa-f])/g, '$1'); // Convert single hex digit sequences + + console.log("✅ SUCCESS with improved manual decoding:"); + console.log(improvedDecoded); +} catch (error) { + console.log("❌ FAILED with improved manual decoding:"); + console.log("Error:", error.message); +} +console.log(); + +// Test Method 5: Safe decoding with chunk processing +console.log("=== Test 5: Safe chunk-by-chunk decoding ==="); +try { + function safeDecodeURIComponent(str) { + // Split by % and process each chunk + const chunks = str.split('%'); + let result = chunks[0]; // First chunk is never encoded + + for (let i = 1; i < chunks.length; i++) { + const chunk = chunks[i]; + if (chunk.length >= 2) { + const hexCode = chunk.substring(0, 2); + const rest = chunk.substring(2); + + // Check if it's a valid hex code + if (/^[0-9A-Fa-f]{2}$/.test(hexCode)) { + try { + result += decodeURIComponent('%' + hexCode) + rest; + } catch (e) { + // If decoding fails, keep the original + result += '%' + chunk; + } + } else { + // Invalid hex code, keep as is + result += '%' + chunk; + } + } else { + // Incomplete code, keep as is + result += '%' + chunk; + } + } + + return result; + } + + const safeDecoded = safeDecodeURIComponent(messageParam); + console.log("✅ SUCCESS with safe chunk decoding:"); + console.log(safeDecoded); +} catch (error) { + console.log("❌ FAILED with safe chunk decoding:"); + console.log("Error:", error.message); +} +console.log(); + +// Analysis of the %B issue +console.log("=== Analysis of the %B issue ==="); +console.log("The sequence '%B' in the URL is problematic because:"); +console.log("1. It's not a valid URL encoding (missing second hex digit)"); +console.log("2. URLSearchParams and decodeURIComponent expect %XX format"); +console.log("3. %B should probably be %0B (vertical tab) or %42 (letter B) or escaped as %25B"); +console.log(); + +// Show where the issue occurs in the original message +const problemIndex = messageParam.indexOf('%B'); +if (problemIndex !== -1) { + console.log("The %B sequence appears at position:", problemIndex); + console.log("Context around %B:"); + const start = Math.max(0, problemIndex - 20); + const end = Math.min(messageParam.length, problemIndex + 20); + console.log("...", messageParam.substring(start, end), "..."); + console.log(" ", " ".repeat(problemIndex - start) + "^^^ HERE"); +} +console.log(); + +console.log("=== Recommended Solution ==="); +console.log("Update the getUrlParameter function in chatbot_maria.html to use Method 5 (Safe chunk-by-chunk decoding)"); +console.log("This will handle invalid URL encoding sequences gracefully without throwing errors."); \ No newline at end of file diff --git a/COMUN/utile/chatbot/url_test.html b/COMUN/utile/chatbot/url_test.html new file mode 100644 index 0000000..03cd485 --- /dev/null +++ b/COMUN/utile/chatbot/url_test.html @@ -0,0 +1,249 @@ + + + + + URL Parameter Decoding Test + + + +

URL Parameter Decoding Test

+

Testing the problematic URL with %B character that causes "URI malformed" errors.

+ +
+

Test URL

+
+
+ +
+

Current Implementation (from chatbot_maria.html)

+
+
+ +
+

Improved Implementation (Recommended Fix)

+
+
+ +
+

Comparison

+
+
+ + + + \ No newline at end of file diff --git a/COMUN/utile/ctl32/OutlookNavBar.VCT b/COMUN/utile/ctl32/OutlookNavBar.VCT new file mode 100644 index 0000000..0a2c2ce Binary files /dev/null and b/COMUN/utile/ctl32/OutlookNavBar.VCT differ diff --git a/COMUN/utile/ctl32/ThemedControls.VCT b/COMUN/utile/ctl32/ThemedControls.VCT new file mode 100644 index 0000000..27d0828 Binary files /dev/null and b/COMUN/utile/ctl32/ThemedControls.VCT differ diff --git a/COMUN/utile/ctl32/ThemedControlsHelp.htm b/COMUN/utile/ctl32/ThemedControlsHelp.htm new file mode 100644 index 0000000..01ae1b1 --- /dev/null +++ b/COMUN/utile/ctl32/ThemedControlsHelp.htm @@ -0,0 +1,85 @@ + +A simple guide on how to use ThemedControls + + +

Add the following files to your project:

+
    +
  • Text files from Other tab in Project Manager
    Ctl32.h (mark it as "Excluded" from your project)
    ThemedControls.h (mark it as "Excluded" from your project)
    Themes.xml (mark it as "Excluded" from your project)
    *** Don't forget to distribute these xml file together with your application! ***

    +
  • Applications from Code tab in Project Manager
    System.app (GDIPlusX from VFPX)
    *** Don't forget to distribute these app file together with your application! ***

    +
  • Programs from Code tab in Project Manager
    Ctl32.prg
    Ctl32_Api.prg
    Ctl32_Classes.prg
    Ctl32_Functions.prg
    Ctl32_Structures.prg
    Ctl32_Vfp2c32.prg

    +
  • Classes tab in Project Manager
    Buttons.vcx
    Ctl32.vcx
    ExplorerBar.vcx
    OutlookNavBar.vcx
    ThemedControls.vcx
    ThemedControlsBuilders.vcx (mark it as "Excluded" from your project)
    ToolBox.vcx
    VFPX.vcx
    ZoomNavBar.vcx
    *** Don't use controls from Buttons.vcx, ExplorerBar.vcx, OutlookNavBar.vcx, ToolBox.vcx and ZoomNavBar.vcx directly because they are base classes. Use the subclassed controls in ThemedControls.vcx. ***
+

 

+

Before use any ThemedControl:

+

ThemesManager and BindWindowsEventsProxy objects used to handle themes are created automatically, but you need to destroy them before finish your application.

+
+

* Destroy ThemesManager object
If Vartype(_Screen.ThemesManager)=="O"
   _Screen.RemoveObject("ThemesManager")
Endif

* Destroy BindWindowsEventsProxy object
If Type("_vfp.BindWindowsEventsProxy")<>"U"
_vfp.BindWindowsEventsProxy = Null
Endif

+

 

+

To use Button: +

    +
  1. Add a ThemedButton object from ThemedControls.vcx to your form; +
  2. Double click CustomBuilder property in Properties Window to show the Builder; +
  3. Fill the properties and click in Save and Exit button; +
  4. Use Click method to handle the button click.
+

 

+

+

To use ExplorerBar: +

    +
  1. Add a ThemedExplorerGroup object from ThemedControls.vcx to your form; +
  2. Double click CustomBuilder property in Properties Window to show the Builder; +
  3. Fill the properties and click in Save and Exit button; +
  4. Click with right mouse button in ThemedExplorerGroup and choose Edit from shortcut menu to edit the control; +
  5. Click with right mouse button in cntUserControls and choose Edit from shortcut menu to edit the control; +
  6. Place any control that you want inside cntUserControls; +
  7. Repeat steps from 1 to 6 to create how much groups you want; +
  8. Add a ThemedExplorerBar object from ThemedControls.vcx to your form; +
  9. Select all ThemedExplorerGroups you created and press CTRL + X in your keyboard; +
  10. Click with right mouse button in ThemedExplorerBar and choose Edit from shortcut menu to edit the control; +
  11. Press CTRL + V in your keyboard to move all ThemedExplorerGroups inside ThemedExplorerBar.
+
+

Or

+
    +
  1. Add a ThemedExplorerBar object from ThemedControls.vcx to your form; +
  2. Double click CustomBuilder property in Properties Window to show the Builder; +
  3. Fill the properties and click in Add this group to the bar button; +
  4. Repeat step 3 to create how much groups you want; +
  5. Click with right mouse button in ThemedExplorerBar and choose Edit from shortcut menu to edit the control; +
  6. Click with right mouse button in ThemedExplorerGroup and choose Edit from shortcut menu to edit the control; +
  7. Click with right mouse button in cntUserControls and choose Edit from shortcut menu to edit the control; +
  8. Place any control that you want inside cntUserControls; +
  9. Repeat steps from 6 to 8 for each group you created.
+

 

+

To use OutlookNavBar:

+
    +
  1. Add a ThemedOutlookNavBar object from ThemedControls.vcx to your form; +
  2. Click with right mouse button in ThemedOutlookNavbar and choose Edit from shortcut menu to edit the control; +
  3. Click in the empty control area to select the Panes pagreframe object; +
  4. Set the PageCount property to the number of buttons that you want to display; +
  5. In the Properties Window, activate each page and set Caption, HotKey, Picture16 and Picture24 properties; +
  6. Add the controls you want to display in each page (you can add any control: TreeView, TextBox, CommandButton, ...); +
  7. Use ButtonClicked method to handle the correspondent button click. This method receive 3 parameters about the button clicked: lnNumber, lcCaption and lcPicture24.
+

*** Note that at run time, the control will create a button for each page and will use Caption, HotKey, Picture16 and Picture24 page properties as the source of caption and picture button properties. ***

+

 

+

To use ToolBox: +

    +
  1. Add a ThemedToolBox object from ThemedControls.vcx to your form; +
  2. Click with right mouse button in ThemedToolBox and choose Edit from shortcut menu to edit the control; +
  3. Click in the empty control area to select the Panes pagreframe object; +
  4. Set the PageCount property to the number of titles that you want to display; +
  5. In the Properties Window, activate each page and set Caption property; +
  6. Add the controls you want to display in each page (you can add any control: TreeView, TextBox, CommandButton, ...); +
  7. Use TitleClicked method to handle the correspondent title click. This method receive a parameter named lcTitle containing the name of title clicked.
+

*** Note that at run time, the control will create a title for each page and will use Caption page property as the source of caption title property. ***

+

 

+

To use ZoomNavBar: +

    +
  1. Add a ThemedZoomNavBar object from ThemedControls.vcx to your form; +
  2. In the Init method, place the code to add the buttons that you want to display:
    +

    DoDefault()
    With This
       .AddButton("Printers","Manage your printers.","Printer96.png")
       .AddButton("Display","Change the display settings.","Monitor96.png")
       .AddButton("Explorer","Show computer's files and folders.","Folder96.png")
       *
       .AddButton("Separator")
       *
       .AddButton("ControlPanel","Change your OS settings.","ControlPanel96.png")
       .AddStackButton("ControlPanel","Button1","Add/Remove programs","Software32.png")
       .AddStackButton("ControlPanel","Button2","Hardware settings","Hardware32.png")
       .AddStackButton("ControlPanel","Button3","Network settings","Network32.png")
    Endwith
    +
  3. Use AddButton method to add a button and AddStackButton to add an option to a button menu.
    Sintax:
    AddButton( cButtonName, cToolTip, cImagePathAndName )
    AddStackButton( cParentButtonName, cButtonName, cToolTip, cImagePathAndName )
    +
  4. Use ButtonClicked and StackButtonClicked to handle the correspondent button click:
    Lparameters lcName
    Do Case
       Case lcName=="Printers"
          apiShellExecute(0, "Open", "Control.exe", "Printers", "", 1)
       Case lcName=="Display"
          apiShellExecute(0, "Open", "Control.exe", "Desk.cpl", "", 1)
       Case lcName=="Explorer"
          apiShellExecute(0, "Explore", "", "", "", 1)
       Otherwise
          Messagebox("Button '"+lcName+"' was clicked!")
    Endcase
    +

+

+

 

If you have questions, suggestions or want to report bugs, feel free to contact me.

+

 

+

Emerson Santon Reed
emerson_reed@hotmail.com

+ \ No newline at end of file diff --git a/COMUN/utile/ctl32/Themes.xml b/COMUN/utile/ctl32/Themes.xml new file mode 100644 index 0000000..9ab5b09 --- /dev/null +++ b/COMUN/utile/ctl32/Themes.xml @@ -0,0 +1,2484 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + Office 2003 Blue + + + 2 + Office 2003 Olive + + + 3 + Office 2003 Silver + + + 4 + Office 2007 Black + + + 5 + Office 2007 Blue + + + 6 + Office 2007 Silver + + + 1 + BUTTON_FOCUSED_FONTCOLOR + 0 + + + + 1 + BUTTON_LEFT_FOCUSED + 0 + Qk22BAAAAAAAADYEAAAoAAAAAgAAACAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAli0A/1/C9/9kxPf/aMb4/23I+P9xyvj/ds34/3rP+f9+0fn/g9P5/4fV+f+M1/r/kNr6/5Xc+v+Z3vr/neD7/6Li+/+m5Pv/q+f8/6/p/P+06/z/uO38/7zv/f/B8f3/xfT9/8r2/f/O+P7/0/r+/9f8/v//////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/x0AAAAAAAAAAAEAAAACAAAAAwAAAAQAAAAFAAAABgAAAAcAAAAIAAAACQAAAAoAAAALAAAADAAAAA0AAAAOAAAADwAAABAAAAARAAAAEgAAABMAAAAUAAAAFQAAABYAAAAXAAAAGAAAABkAAAAaAAAAGwAAABwAAAAAAAAdAAAA + + + 1 + BUTTON_LEFT_HOTTRACKING + 0 + Qk22BAAAAAAAADYEAAAoAAAAAgAAACAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAxWox/+3Tw///////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wIAAAAAAAAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAAAACAAAA + + + 1 + BUTTON_LEFT_NOTFOCUSED + 0 + Qk22BAAAAAAAADYEAAAoAAAAAgAAACAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAli0A/+KogP/jqoP/5KyG/+WuiP/msIv/57KO/+e0kP/otpP/6biW/+q6mP/rvJv/7L6e/+3AoP/uw6P/78Wm//DHqP/xyav/8suu//PNsP/0z7P/9dG2//XTuP/21bv/99e+//jZwP/528P/+t3G//vfyP//////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/x0AAAAAAAAAAAEAAAACAAAAAwAAAAQAAAAFAAAABgAAAAcAAAAIAAAACQAAAAoAAAALAAAADAAAAA0AAAAOAAAADwAAABAAAAARAAAAEgAAABMAAAAUAAAAFQAAABYAAAAXAAAAGAAAABkAAAAaAAAAGwAAABwAAAAAAAAdAAAA + + + 1 + BUTTON_MIDDLE_FOCUSED + 0 + Qk22BAAAAAAAADYEAAAoAAAAAQAAACAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAli0A/1vA9/9fwvf/ZMT3/2jG+P9tyPj/ccr4/3bN+P96z/n/ftH5/4PT+f+H1fn/jNf6/5Da+v+V3Pr/md76/53g+/+i4vv/puT7/6vn/P+v6fz/tOv8/7jt/P+87/3/wfH9/8X0/f/K9v3/zvj+/9P6/v/X/P7/3P///wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAABAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAATAAAAFAAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAAAAAA + + + 1 + BUTTON_MIDDLE_HOTTRACKING + 0 + Qk22BAAAAAAAADYEAAAoAAAAAQAAACAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAxWox/+3Tw/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAAAAA + + + 1 + BUTTON_MIDDLE_NOTFOCUSED + 0 + Qk22BAAAAAAAADYEAAAoAAAAAQAAACAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAli0A/+Gmfv/iqID/46qD/+Sshv/lroj/5rCL/+eyjv/ntJD/6LaT/+m4lv/qupj/67yb/+y+nv/twKD/7sOj/+/Fpv/wx6j/8cmr//LLrv/zzbD/9M+z//XRtv/107j/9tW7//fXvv/42cD/+dvD//rdxv/738j//OHL/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAABAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAATAAAAFAAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAAAAAA + + + 1 + BUTTON_NOTFOCUSED_FONTCOLOR + 0 + + + + 1 + BUTTON_RIGHT_FOCUSED + 0 + Qk22BAAAAAAAADYEAAAoAAAAAgAAACAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAli0A/1/C9/9kxPf/aMb4/23I+P9xyvj/ds34/3rP+f9+0fn/g9P5/4fV+f+M1/r/kNr6/5Xc+v+Z3vr/neD7/6Li+/+m5Pv/q+f8/6/p/P+06/z/uO38/7zv/f/B8f3/xfT9/8r2/f/O+P7/0/r+/9f8/v//////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAdAAAAAAAAAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAAEwAAABQAAAAVAAAAFgAAABcAAAAYAAAAGQAAABoAAAAbAAAAHAAAAAAAAAAAHQAA + + + 1 + BUTTON_RIGHT_HOTTRACKING + 0 + Qk22BAAAAAAAADYEAAAoAAAAAgAAACAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAxWox/+3Tw///////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wACAAAAAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAAAAAAAAgAA + + + 1 + BUTTON_RIGHT_NOTFOCUSED + 0 + Qk22BAAAAAAAADYEAAAoAAAAAgAAACAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAli0A/+KogP/jqoP/5KyG/+WuiP/msIv/57KO/+e0kP/otpP/6biW/+q6mP/rvJv/7L6e/+3AoP/uw6P/78Wm//DHqP/xyav/8suu//PNsP/0z7P/9dG2//XTuP/21bv/99e+//jZwP/528P/+t3G//vfyP//////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAdAAAAAAAAAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAAEwAAABQAAAAVAAAAFgAAABcAAAAYAAAAGQAAABoAAAAbAAAAHAAAAAAAAAAAHQAA + + + 1 + CONTAINER_BORDERCOLOR + 9841920 + + + + 1 + EXPLORERBAR_BACKGROUND + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAHZCAMAAABw0aFNAAAABGdBTUEAALGPC/xhBQAAAwBQTFRFY3XWY3bWZHbWZHfXZHjXZXrXZXrYZnzYZ3zZZ37ZaH7ZaH/aaIDaaYLaaoLba4Tba4TcbIXcbIbcbIfdbYjdbordboreb4zeb4zfcI3fcI7fcY/gcZDgcpLgcpLhc5Thc5TidJTidJbidZfjdZjjdprjdprkd5zkeJzkeJzleJ7leZ/meaDme6LnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuwPxBwAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjMwQIRHEAAAAHpJREFUOE+NwYcOgkAQQMFnwd4VRRHF3v//9ww5yCXLcewMP77qH+w3vi+qPjEf+Tu6N67qF+wzvidcU1KO4gHNhIS9ekxxh/8WO8LeIK/RDAlZqS8pLvCfM3OeIk+oPyY7Uh9iDir3MXvOXco71A/IttVbmE2xgUzZH+dEKa22gJLzAAAAAElFTkSuQmCC + + + 1 + EXPLORERBAR_BORDERCOLOR + 16777215 + + + + 1 + EXPLORERBAR_NORMALGROUPBACKGROUND + 0 + iVBORw0KGgoAAAANSUhEUgAAANoAAAABCAMAAACPOkAFAAAABGdBTUEAALGPC/xhBQAAAwBQTFRF1t/3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA38Z4uAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjMwQIRHEAAAAAxJREFUGFdjYBi2AAAA2wABbb4xPgAAAABJRU5ErkJggg== + + + 1 + EXPLORERBAR_NORMALGROUPCOLLAPSEHIGHLIGHT + 0 + iVBORw0KGgoAAAANSUhEUgAAAPEAAAAZCAMAAADXAjjUAAAABGdBTUEAALGPC/xhBQAAAwBQTFRFAAAAQo7/qbLTqrLVqLLXqrTXrrPUrLTXr7bVrbbWrrbXqbXZq7fcrLbYrbbZrrfarbjbrLjcrLjdrrrerLrfsLbUsLbVsLbWs7nWsrjXsbjYs7rZsbrbsLncsrrctLvYtLvZtbzYtbzatLzctbzdtbzetL3fq7rgrLvgrrzjsr/ltb/iu8DbvMLcvsTds8DjssDmtMDmtMHntMLmtcLntMLpt8TpuMHhuMHiuMLju8bnvMbnuMXpuMXqusfpucbquMXsucbsvMbovMfpusjru8jtvsjovMjrv8vrvMjsvMntvcnuvsrtvcruvsvvv8zvv8zxwMXdwMbfw8ngxcvhx8viwMrswczswc3vwMzwws/wws7yw8/zxM/wxM/xxM/yy9HlzNDkzNHlztLmz9Tnw9Dzw9H0xtHxxdDyxNDzxNH0xtL0xdL1xtP2xtP3x9T1x9T2x9T3yNPzyNP0yNT0ydT1yNT2yNT3ytb1ytb2ytb3ytb4zNj2zNj3zdj4z9r41Nnp1drq2dzr2d7s0Nr40tz51N753eDt3eHu1uD52OH62eL62+T63eT63ub64OPv4eXw4ebx5Ofx4Of75Ony5uv04uj75Or75uz75+z86ev06ez06+/27O716O386e786/D27PD36/D87fL47PD87fH97vL98PH38PP98vb68fT98/b99vf69Pb99ff+9fj79/n89vj++Pr8+fv9+fr++/z9+/z+/P3+/Pz//f7+/v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA75tKBgAAAQB0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zMECERxAAAAI2SURBVFhHY/j/fxf9wQ4Q2LZtCxRshIB1a9euXb0KBFYsA4KlS5csWbRoPgjMmzlz5ozpQDANBCZPntzX1wsEPT3dINDVCQRtINAKAi1AUF9fBwHVYFBVDgaFhYX//zMMhId3keDjJXh9DPYyKT7O+89A/wgG2kiCjymL4+qy0uzs7JxSeBzn5Q16H1MSx9WlYRaqcirKMmpO2QWQVD0EfExJHBdZSgU1TZo7qz2ETdYnZ6j4mII4LjKXbFwDzrXbJ+mwu+fkDvc4rrGWatoOK6aW6/JGgrw8BFI1+XGcLpO0FeRhRrCvZ4tpR+cMCR+Tn4/DlWaBPcwI9vLORD7vrNxhHce1boGbwB4GoV27tk7gtAFG8hBI1WTHca1TKMTDYGLn5tlSRgFDwsdk5+NaqxBIsQVO1Ns3zZY28Msa3nFsrQcpuCCJev0UKS3fIeFj8uPYQ3IuPB/v3LSymcvIN214x3EUe/IOWD7evHJBMKvRcI/jEm3R/q1bt+7cuXPrhpWLGziETId5Pq6riOCX7FgPAisXL2yUZ9F0GOZldV1lhjOveMrUxYsXz5mYIMGiYeQ6zOvjutrSWDsBJsWgkJAgBWZudQNHv2He5qqrqyyOctEXFuQBAhFNA1vfmOHergZ6OTvK097ExMDA2NDM0T8V6OGhUDuRXR+DxvUqS+MifHw9PX29fCOzh3//GOTlqrL87Mz4+IzM7BzgsM8IiGPg6G1VVXkZCEBHb4dz3wn7eHVeHgByr0W4T5AAhgAAAABJRU5ErkJggg== + + + 1 + EXPLORERBAR_NORMALGROUPCOLLAPSENOTHIGHLIGHT + 0 + iVBORw0KGgoAAAANSUhEUgAAAPEAAAAZCAMAAADXAjjUAAAABGdBTUEAALGPC/xhBQAAAwBQTFRFAAAAADylqbLTqrLVqLLXqrTXrrPUrLTXr7bVrbbWrrbXqbXZq7fcrLbYrbbZrrfarbjbrLjcrLjdrrrerLrfsLbUsLbVsLbWs7nWsrjXsbjYs7rZsbrbsLncsrrctLvYtLvZtbzYtbzatLzctbzdtbzetL3fq7rgrLvgrrzjsr/ltb/iu8DbvMLcvsTds8DjssDmtMDmtMHntMLmtcLntMLpt8TpuMHhuMHiuMLju8bnvMbnuMXpuMXqusfpucbquMXsucbsvMbovMfpusjru8jtvsjovMjrv8vrvMjsvMntvcnuvsrtvcruvsvvv8zvv8zxwMXdwMbfw8ngxcvhx8viwMrswczswc3vwMzwws/wws7yw8/zxM/wxM/xxM/yy9HlzNDkzNHlztLmz9Tnw9Dzw9H0xtHxxdDyxNDzxNH0xtL0xdL1xtP2xtP3x9T1x9T2x9T3yNPzyNP0yNT0ydT1yNT2yNT3ytb1ytb2ytb3ytb4zNj2zNj3zdj4z9r41Nnp1drq2dzr2d7s0Nr40tz51N753eDt3eHu1uD52OH62eL62+T63eT63ub64OPv4eXw4ebx5Ofx4Of75Ony5uv04uj75Or75uz75+z86ev06ez06+/27O716O386e786/D27PD36/D87fL47PD87fH97vL98PH38PP98vb68fT98/b99vf69Pb99ff+9fj79/n89vj++Pr8+fv9+fr++/z9+/z+/P3+/Pz//f7+/v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+5EspQAAAQB0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zMECERxAAAAI2SURBVFhHY/j/fxf9wQ4Q2LZtCxRshIB1a9euXb0KBFYsA4KlS5csWbRoPgjMmzlz5ozpQDANBCZPntzX1wsEPT3dINDVCQRtINAKAi1AUF9fBwHVYFBVDgaFhYX//zMMhId3keDjJXh9DPYyKT7O+89A/wgG2kiCjymL4+qy0uzs7JxSeBzn5Q16H1MSx9WlYRaqcirKMmpO2QWQVD0EfExJHBdZSgU1TZo7qz2ETdYnZ6j4mII4LjKXbFwDzrXbJ+mwu+fkDvc4rrGWatoOK6aW6/JGgrw8BFI1+XGcLpO0FeRhRrCvZ4tpR+cMCR+Tn4/DlWaBPcwI9vLORD7vrNxhHce1boGbwB4GoV27tk7gtAFG8hBI1WTHca1TKMTDYGLn5tlSRgFDwsdk5+NaqxBIsQVO1Ns3zZY28Msa3nFsrQcpuCCJev0UKS3fIeFj8uPYQ3IuPB/v3LSymcvIN214x3EUe/IOWD7evHJBMKvRcI/jEm3R/q1bt+7cuXPrhpWLGziETId5Pq6riOCX7FgPAisXL2yUZ9F0GOZldV1lhjOveMrUxYsXz5mYIMGiYeQ6zOvjutrSWDsBJsWgkJAgBWZudQNHv2He5qqrqyyOctEXFuQBAhFNA1vfmOHergZ6OTvK097ExMDA2NDM0T8V6OGhUDuRXR+DxvUqS+MifHw9PX29fCOzh3//GOTlqrL87Mz4+IzM7BzgsM8IiGPg6G1VVXkZCEBHb4dz3wn7eHVeHgByr0W4T5AAhgAAAABJRU5ErkJggg== + + + 1 + EXPLORERBAR_NORMALGROUPEXPANDHIGHLIGHT + 0 + iVBORw0KGgoAAAANSUhEUgAAAPEAAAAZCAMAAADXAjjUAAAABGdBTUEAALGPC/xhBQAAAwBQTFRFAAAAQo7/qbLTqrLVqLLXqrTXrrPUrLTXr7bVrbbWrrbXqbXZq7fcrLbYrbbZrrfarbjbrLjcrLjdrrrerLrfsLbUsLbVsLbWs7nWsrjXsbjYs7rZsbrbsLncsrrctLvYtLvZtbzYtbzatLzctbzdtbzetL3fq7rgrLvgrrzjsr/ltb/iu8DbvMLcvsTds8DjssDmtMDmtMHntMLmtcLntMLpt8TpuMHhuMHiuMLju8bnvMbnuMXpuMXqusfpucbquMXsucbsvMbovMfpusjru8jtvsjovMjrv8vrvMjsvMntvcnuvsrtvcruvsvvv8zvv8zxwMXdwMbfw8ngxcvhx8viwMrswczswc3vwMzwws/wws7yw8/zxM/wxM/xxM/yy9HlzNDkzNHlztLmz9Tnw9Dzw9H0xtHxxdDyxNDzxNH0xtL0xdL1xtP2xtP3x9T1x9T2x9T3yNPzyNP0yNT0ydT1yNT2yNT3ytb1ytb2ytb3ytb4zNj2zNj3zdj4z9r41Nnp1drq2dzr2d7s0Nr40tz51N753eDt3eHu1uD52OH62eL62+T63eT63ub64OPv4eXw4ebx5Ofx4Of75Ony5uv04uj75Or75uz75+z86ev06ez06+/27O716O386e786/D27PD36/D87fL47PD87fH97vL98PH38PP98vb68fT98/b99vf69Pb99ff+9fj79/n89vj++Pr8+fv9+fr++/z9+/z+/P3+/Pz//f7+/v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA75tKBgAAAQB0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zMECERxAAAAI5SURBVFhHY/j/fxf9wQ4Q2LZtCxRshIB1a9euXb0KBFYsA4KlS5csWbRoPgjMmzlz5ozpQDANBCZPntzX1wsEPT3dINDVCQRtINAKAi1AUF9fBwHVYFBVDgaFhYX//zMMhId3keDjJXh9DPYyKT7O+89A/wgG2kiCjymL4+qy0uzs7JxSeBzn5Q16H1MSx9WlYRaqcirKMmpO2QWQVD0EfExJHBdZSgU1TZo7qz2ETdYnZ6j4mII4LjKXbFwDzrXbJ+mwu+fkDvc4rrGWatoOK6aW6/JGgrw8BFI1+XGcLpO0FVEuzxbTjs4ZEj4mPx+HK83atYuREehpELEzkc87K3dYx3GtW+AmiG/Bvt46gdMGGMlDIFWTHce1TqHgNM0I9vDOzbOljAKGhI/Jzse1ViGQXAzy8K7tm2ZLG/hlDe84ttYDFlywfLx1/RQpLd8h4WPy49hDci48H+/ctLKZy8g3bXjHcRR78g5oPt65eeWCYFaj4R7HJdqi/Vu3bt3JuHPrhpWLGziETId5Pq6riOCX7FgPAisXL2yUZ9F0GOZldV1lhjOveMrUxYsXz5mYIMGiYeQ6zOvjutrSWDsBJsWgkJAgBWZudQNHv2He5qqrqyyOctEXFuQBAhFNA1vfmOHergZ6OTvK097ExMDA2NDM0T8V6OGhUDuRXR+DxvUqS+MifHw9PX29fCOzh3//GOTlqrL87Mz4+IzM7BzgsM8IiGPg6G1VVXkZCEBHb4dz3wn7eHVeHgAtdUW4XuYS9QAAAABJRU5ErkJggg== + + + 1 + EXPLORERBAR_NORMALGROUPEXPANDNOTHIGHLIGHT + 0 + iVBORw0KGgoAAAANSUhEUgAAAPEAAAAZCAMAAADXAjjUAAAABGdBTUEAALGPC/xhBQAAAwBQTFRFAAAAADylqbLTqrLVqLLXqrTXrrPUrLTXr7bVrbbWrrbXqbXZq7fcrLbYrbbZrrfarbjbrLjcrLjdrrrerLrfsLbUsLbVsLbWs7nWsrjXsbjYs7rZsbrbsLncsrrctLvYtLvZtbzYtbzatLzctbzdtbzetL3fq7rgrLvgrrzjsr/ltb/iu8DbvMLcvsTds8DjssDmtMDmtMHntMLmtcLntMLpt8TpuMHhuMHiuMLju8bnvMbnuMXpuMXqusfpucbquMXsucbsvMbovMfpusjru8jtvsjovMjrv8vrvMjsvMntvcnuvsrtvcruvsvvv8zvv8zxwMXdwMbfw8ngxcvhx8viwMrswczswc3vwMzwws/wws7yw8/zxM/wxM/xxM/yy9HlzNDkzNHlztLmz9Tnw9Dzw9H0xtHxxdDyxNDzxNH0xtL0xdL1xtP2xtP3x9T1x9T2x9T3yNPzyNP0yNT0ydT1yNT2yNT3ytb1ytb2ytb3ytb4zNj2zNj3zdj4z9r41Nnp1drq2dzr2d7s0Nr40tz51N753eDt3eHu1uD52OH62eL62+T63eT63ub64OPv4eXw4ebx5Ofx4Of75Ony5uv04uj75Or75uz75+z86ev06ez06+/27O716O386e786/D27PD36/D87fL47PD87fH97vL98PH38PP98vb68fT98/b99vf69Pb99ff+9fj79/n89vj++Pr8+fv9+fr++/z9+/z+/P3+/Pz//f7+/v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+5EspQAAAQB0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zMECERxAAAAI5SURBVFhHY/j/fxf9wQ4Q2LZtCxRshIB1a9euXb0KBFYsA4KlS5csWbRoPgjMmzlz5ozpQDANBCZPntzX1wsEPT3dINDVCQRtINAKAi1AUF9fBwHVYFBVDgaFhYX//zMMhId3keDjJXh9DPYyKT7O+89A/wgG2kiCjymL4+qy0uzs7JxSeBzn5Q16H1MSx9WlYRaqcirKMmpO2QWQVD0EfExJHBdZSgU1TZo7qz2ETdYnZ6j4mII4LjKXbFwDzrXbJ+mwu+fkDvc4rrGWatoOK6aW6/JGgrw8BFI1+XGcLpO0FVEuzxbTjs4ZEj4mPx+HK83atYuREehpELEzkc87K3dYx3GtW+AmiG/Bvt46gdMGGMlDIFWTHce1TqHgNM0I9vDOzbOljAKGhI/Jzse1ViGQXAzy8K7tm2ZLG/hlDe84ttYDFlywfLx1/RQpLd8h4WPy49hDci48H+/ctLKZy8g3bXjHcRR78g5oPt65eeWCYFaj4R7HJdqi/Vu3bt3JuHPrhpWLGziETId5Pq6riOCX7FgPAisXL2yUZ9F0GOZldV1lhjOveMrUxYsXz5mYIMGiYeQ6zOvjutrSWDsBJsWgkJAgBWZudQNHv2He5qqrqyyOctEXFuQBAhFNA1vfmOHergZ6OTvK097ExMDA2NDM0T8V6OGhUDuRXR+DxvUqS+MifHw9PX29fCOzh3//GOTlqrL87Mz4+IzM7BzgsM8IiGPg6G1VVXkZCEBHb4dz3wn7eHVeHgAtdUW4XuYS9QAAAABJRU5ErkJggg== + + + 1 + EXPLORERBAR_NORMALGROUPHIGHLIGHT_FORECOLOR + 16748098 + + + + 1 + EXPLORERBAR_NORMALGROUPNOTHIGHLIGHT_FORECOLOR + 12999969 + + + + 1 + EXPLORERBAR_SPECIALGROUPBACKGROUND + 0 + iVBORw0KGgoAAAANSUhEUgAAANoAAAABCAMAAACPOkAFAAAABGdBTUEAALGPC/xhBQAAAwBQTFRF7/P/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA17GY0QAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjMwQIRHEAAAAAxJREFUGFdjYBi2AAAA2wABbb4xPgAAAABJRU5ErkJggg== + + + 1 + EXPLORERBAR_SPECIALGROUPCOLLAPSEHIGHLIGHT + 0 + iVBORw0KGgoAAAANSUhEUgAAAPEAAAAZCAMAAADXAjjUAAAABGdBTUEAALGPC/xhBQAAAwBQTFRFAAAAAEm1Akm2Akq0Akq2A0q3BEu3BEu4BUy4Bky5CE26CU27Ck67C068DE+8DE+9DVC9DlC+EFG/ElLAE1LBFFPBFVPCFlTCFlTDGFTDGFXEGlbFG1bGHFbGHVfHHljHHljII1TAI1bDJFXAJFXBJFXCJFbBJFfDJFfEJFbFJVjAJVjFJVjGJVjHIFjIIFnJIlnKIlrKI1rLJlnIJlnJJ1nKJlrIJlrKJFrLJVvMJ1vOJlzLJlzMJ1zNKlzFK1/HLV/BLF7EKFrKKFvLKFvMKV3JKFzMKFzNKF3OKV7NKV7OLF/LLmDBLmDCL2DDL2LJL2LKLWHOL2PNLmLOLmPPL2TOL2TPMGHDMWPDMGHEMWLEM2PFM2THNWXFNmXGNWbGMWPIMWLJMWTJMmfPNWXIOGfGOWjHOmrHPGrHPG3HOmzIPWvIPmzIP23JPm7JPm/KMmXROW3RPW/SP3LUQm/JQ3TNRHDKRHTMRHXNR3jPSHPLSXTLS3XMS3bMSHbNTHfMSHjOSXrOTnjNTHzPQXPURXfURXjURnjVRnnWSnrQS3zQTH3VTX7VTX7YUXvOV3/PU4PTV4DQVITWVofUV4ncWYDQWYXUX4fTWIjVXYjUX4nVWYrcX4/YX4/ZX4/dYYrVY4/YYJDZYZDaYpLbY5LdZ5DYZZXbZpXcZpXfZ5bfa5bbaprebpjcbJvfbpzfcJzecJ7fapnhbJvgbJvhbJzhb5/hcZ3gcZ7gcJ/hcJ7ic6HicqLic6LkdKDhdqTidaTjeaXjeKbkeqjle6vmfanlfavnfq3mrM3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVSZVuwAAAQB0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zMECERxAAAAJESURBVFhHY/j/nxEVMDOxAAErFLABATsYcAABJxxwwQE3DxTwAgEfHx8/GAgICEKBEAwIQ4GIiIioqKgYGIiLS0CApBQMSEOBjCwEyIGAvLy8Ahjo6enpw4CBIQwYGVnAgCUY2ICALRS4Q4AHCPz/z4DuYcbh7WOP/wxoMcw4zHxs5ekVHBIS6AWLYw+P4e1jq8CW2Su2bNq8cV5HoBs4VQ9zH7sXTDl4YM3S+bMWbD+2shCSkYd1HLuHzT6yZnp/X1N9Te20/XsKbcF+Hs6p2qv30KqpfVU52Rk5OTl1u7aEgsvr4ezj5I3rJzaVpEYfj4qOi4uuONTtNNx9XLxvZlNJfNTx48cjo6IiIxetdHUDenkYx7F1+96+sjSghyOBKDLSr2FrACiSh7OP27ZV58SCfQsi/PLWJZkOcx+3rivLiAb5F4gjw/2yVieaASvl4RzHrbty44H5F5SPgVHsm782wXiY+7hofwXYw5BE7du4NnG4+zho59woSKl1/Lifb8TixXbD3cfmPYe7/Pz8QEnaz9eheV+lxjDPxzYW3ksOdfqCgYNP4/6FjjrDvKy2sTTxX3x0RrqPg4Nv5uT9i2NUdYZ5fWxjY6FrP2n/7uVz5izbsGNClJqO8TBvc9nYWprraqSUdgJBebyWsoax83BvV9u6A72sqaSooqiooqyuaWYx7HuLwIE9SwtjXU0dTU0dbV0zG8jg3jBuc4HHMm0sLcxNgMDc2mYEjIFABm9tbNxcXNzcQIXWsB/1wTZe7eEBAJ5hvkqjoOROAAAAAElFTkSuQmCC + + + 1 + EXPLORERBAR_SPECIALGROUPCOLLAPSENOTHIGHLIGHT + 0 + iVBORw0KGgoAAAANSUhEUgAAAPEAAAAZCAMAAADXAjjUAAAABGdBTUEAALGPC/xhBQAAAwBQTFRFAAAAAEm1Akm2Akq0Akq2A0q3BEu3BEu4BUy4Bky5CE26CU27Ck67C068DE+8DE+9DVC9DlC+EFG/ElLAE1LBFFPBFVPCFlTCFlTDGFTDGFXEGlbFG1bGHFbGHVfHHljHHljII1TAI1bDJFXAJFXBJFXCJFbBJFfDJFfEJFbFJVjAJVjFJVjGJVjHIFjIIFnJIlnKIlrKI1rLJlnIJlnJJ1nKJlrIJlrKJFrLJVvMJ1vOJlzLJlzMJ1zNKlzFK1/HLV/BLF7EKFrKKFvLKFvMKV3JKFzMKFzNKF3OKV7NKV7OLF/LLmDBLmDCL2DDL2LJL2LKLWHOL2PNLmLOLmPPL2TOL2TPMGHDMWPDMGHEMWLEM2PFM2THNWXFNmXGNWbGMWPIMWLJMWTJMmfPNWXIOGfGOWjHOmrHPGrHPG3HOmzIPWvIPmzIP23JPm7JPm/KMmXROW3RPW/SP3LUQm/JQ3TNRHDKRHTMRHXNR3jPSHPLSXTLS3XMS3bMSHbNTHfMSHjOSXrOTnjNTHzPQXPURXfURXjURnjVRnnWSnrQS3zQTH3VTX7VTX7YUXvOV3/PU4PTV4DQVITWVofUV4ncWYDQWYXUX4fTWIjVXYjUX4nVWYrcX4/YX4/ZX4/dYYrVY4/YYJDZYZDaYpLbY5LdZ5DYZZXbZpXcZpXfZ5bfa5bbaprebpjcbJvfbpzfcJzecJ7fapnhbJvgbJvhbJzhb5/hcZ3gcZ7gcJ/hcJ7ic6HicqLic6LkdKDhdqTidaTjeaXjeKbkeqjle6vmfanlfavnfq3m////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxh8xqQAAAQB0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zMECERxAAAAJESURBVFhHY/j/nxEVMDOxAAErFLABATsYcAABJxxwwQE3DxTwAgEfHx8/GAgICEKBEAwIQ4GIiIioqKgYGIiLS0CApBQMSEOBjCwEyIGAvLy8Ahjo6enpw4CBIQwYGVnAgCUY2ICALRS4Q4AHCPz/z4DuYcbh7WOP/wxoMcw4zHxs5ekVHBIS6AWLYw+P4e1jq8CW2Su2bNq8cV5HoBs4VQ9zH7sXTDl4YM3S+bMWbD+2shCSkYd1HLuHzT6yZnp/X1N9Te20/XsKbcF+Hs6p2qv30KqpfVU52Rk5OTl1u7aEgsvr4ezj5I3rJzaVpEYfj4qOi4uuONTtNNx9XLxvZlNJfNTx48cjo6IiIxetdHUDenkYx7F1+96+sjSghyOBKDLSr2FrACiSh7OP27ZV58SCfQsi/PLWJZkOcx+3rivLiAb5F4gjw/2yVieaASvl4RzHrbty44H5F5SPgVHsm782wXiY+7hofwXYw5BE7du4NnG4+zho59woSKl1/Lifb8TixXbD3cfmPYe7/Pz8QEnaz9eheV+lxjDPxzYW3ksOdfqCgYNP4/6FjjrDvKy2sTTxX3x0RrqPg4Nv5uT9i2NUdYZ5fWxjY6FrP2n/7uVz5izbsGNClJqO8TBvc9nYWprraqSUdgJBebyWsoax83BvV9u6A72sqaSooqiooqyuaWYx7HuLwIE9SwtjXU0dTU0dbV0zG8jg3jBuc4HHMm0sLcxNgMDc2mYEjIFABm9tbNxcXNzcQIXWsB/1wTZe7eEBAJ5hvkqjoOROAAAAAElFTkSuQmCC + + + 1 + EXPLORERBAR_SPECIALGROUPEXPANDHIGHLIGHT + 0 + iVBORw0KGgoAAAANSUhEUgAAAPEAAAAZCAMAAADXAjjUAAAABGdBTUEAALGPC/xhBQAAAwBQTFRFAAAAAEm1Akm2Akq0Akq2A0q3BEu3BEu4BUy4Bky5CE26CU27Ck67C068DE+8DE+9DVC9DlC+EFG/ElLAE1LBFFPBFVPCFlTCFlTDGFTDGFXEGlbFG1bGHFbGHVfHHljHHljII1TAI1bDJFXAJFbBJFbCJFfDJFfEJFfFJVjAJVjFJVjGJVjHIFjIIFnJIlnKIlrKI1rLJlnIJlnJJ1nKJlrIJlrKJFrLJVvMJ1vNJlzLJlzMJ1zNKlzFK1/HLV/BLV7EKFrKKFvLKV3JKFzMKFzNKF3OKV7NKV7OLF/LLmDBLmDCL2DDL2LJL2LKLWHOL2PMLWLOLmPPL2TOL2TPMGHDMWPDMGHEMWLEM2PFM2THNWXFNmXGNWbGMWPIMWLJMWTJMmfPNWXIOGfGOWjHOmrHPGrHPG3HOmzIPWvIPmzIP23JPm7JPm/KMmXROW3RPW/SP3LUQm/JQ3TNRHDKRHTMRHXNR3jPSHPLSXTLS3XMS3bMSHbNTHfMSHjOSXrOTnjNTHzPQXPURXfURXjURnjVSnrQS3zQTH3VTX7VTX7YUXvOV3/PU4PTV4DQVITVVofUV4ncWYDQWYXUX4fTWIjVXYjUX4nVWYrcX4/YX4/ZX4/dYYrVY4/YYJDZYZDaYpLbY5LdZ5DYZZXbZpXcZpXfZ5bfa5bbaprebpjcbJvfbpzfcJzecJ7fapnhbJvgbJvhbJzhb5/hcZ3gcZ7gcJ/hcJ7ic6HicqLic6LkdKDhdqTidaTjeaXjeKbkeqjle6vmfanlfavnfq3mrM3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOu9L2wAAAQB0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zMECERxAAAAJDSURBVFhH3diJegtRFMDxxL5Gkag9IsgwEzSVTNsJITIjOpdqLTOhVWsxllJVu4ZqLbGvrTW20pZSW9EhlrzXuHeWfvQRzu8N/t85d3JzbZpm/1//fgOwgaZB2GDdEGxor2G9ho8wjcQcDscoXU7OaNMYy1iT0+l0uVzjdLm54w0TJlommSZPMUwl3G73NJ3f759rmTffkpfHWgp0HBE28QaB0DRb32A77GJBs/WZsB1YceGyeGlZWUncmrEgwC4uLDnT/KLr7bvO+42lMX2rgRfz+67/+N729MHdhx//tFabyZBnzK9p/tV261IqefLY8Zvq12rj4wW5OH4x8/JG6oiyq0pRlBPdXav1ZMjFmztfX0nWbE3IcqK8PFGXOb+ELDbk4gM9d5I12awkSdmsLEmPW5fG8JABFxc1fkvVbpNxsl6NTr1fSYYMufjsh6PKBjJgEiyhPR2bFgCfcUNHbVWC7DQJXot2vqoMAp9xQ/fuCrLUZMwSEve2b2SAF+9X6/AHyzzHSKxvrwwAL171+R4uNs4xEtel0wuhF4cu/DyHEMLnGCExcrrnsA/4OebY5U8yTaIuUlyvPlpMA/9Wc2z+ivTv29uLIxFxxzU1vX4mDfz3mONYZtFV9cvzlpZnbz5dlmfQAeB3Lo5nQ4xvy8Em7FDFbK+PiUK/V4dJMjXd4/V4vN5ZVJDV/yEDvmXilz2eZQMMRVMUPYcJcmSnoReHea6ADeVjoSKjF3wxHjPHxaLRWMwKBr7VxoP1v+/VgvAXi2i16jf2wmUAAAAASUVORK5CYII= + + + 1 + EXPLORERBAR_SPECIALGROUPEXPANDNOTHIGHLIGHT + 0 + iVBORw0KGgoAAAANSUhEUgAAAPEAAAAZCAMAAADXAjjUAAAABGdBTUEAALGPC/xhBQAAAwBQTFRFAAAAAEm1Akm2Akq0Akq2A0q3BEu3BEu4BUy4Bky5CE26CU27Ck67C068DE+8DE+9DVC9DlC+EFG/ElLAE1LBFFPBFVPCFlTCFlTDGFTDGFXEGlbFG1bGHFbGHVfHHljHHljII1TAI1bDJFXAJFbBJFbCJFfDJFfEJFfFJVjAJVjFJVjGJVjHIFjIIFnJIlnKIlrKI1rLJlnIJlnJJ1nKJlrIJlrKJFrLJVvMJ1vNJlzLJlzMJ1zNKlzFK1/HLV/BLV7EKFrKKFvLKV3JKFzMKFzNKF3OKV7NKV7OLF/LLmDBLmDCL2DDL2LJL2LKLWHOL2PMLWLOLmPPL2TOL2TPMGHDMWPDMGHEMWLEM2PFM2THNWXFNmXGNWbGMWPIMWLJMWTJMmfPNWXIOGfGOWjHOmrHPGrHPG3HOmzIPWvIPmzIP23JPm7JPm/KMmXROW3RPW/SP3LUQm/JQ3TNRHDKRHTMRHXNR3jPSHPLSXTLS3XMS3bMSHbNTHfMSHjOSXrOTnjNTHzPQXPURXfURXjURnjVSnrQS3zQTH3VTX7VTX7YUXvOV3/PU4PTV4DQVITVVofUV4ncWYDQWYXUX4fTWIjVXYjUX4nVWYrcX4/YX4/ZX4/dYYrVY4/YYJDZYZDaYpLbY5LdZ5DYZZXbZpXcZpXfZ5bfa5bbaprebpjcbJvfbpzfcJzecJ7fapnhbJvgbJvhbJzhb5/hcZ3gcZ7gcJ/hcJ7ic6HicqLic6LkdKDhdqTidaTjeaXjeKbkeqjle6vmfanlfavnfq3m////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASnELAQAAAQB0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zMECERxAAAAJDSURBVFhH3diJegtRFMDxxL5Gkag9IsgwEzSVTNsJITIjOpdqLTOhVWsxllJVu4ZqLbGvrTW20pZSW9EhlrzXuHeWfvQRzu8N/t85d3JzbZpm/1//fgOwgaZB2GDdEGxor2G9ho8wjcQcDscoXU7OaNMYy1iT0+l0uVzjdLm54w0TJlommSZPMUwl3G73NJ3f759rmTffkpfHWgp0HBE28QaB0DRb32A77GJBs/WZsB1YceGyeGlZWUncmrEgwC4uLDnT/KLr7bvO+42lMX2rgRfz+67/+N729MHdhx//tFabyZBnzK9p/tV261IqefLY8Zvq12rj4wW5OH4x8/JG6oiyq0pRlBPdXav1ZMjFmztfX0nWbE3IcqK8PFGXOb+ELDbk4gM9d5I12awkSdmsLEmPW5fG8JABFxc1fkvVbpNxsl6NTr1fSYYMufjsh6PKBjJgEiyhPR2bFgCfcUNHbVWC7DQJXot2vqoMAp9xQ/fuCrLUZMwSEve2b2SAF+9X6/AHyzzHSKxvrwwAL171+R4uNs4xEtel0wuhF4cu/DyHEMLnGCExcrrnsA/4OebY5U8yTaIuUlyvPlpMA/9Wc2z+ivTv29uLIxFxxzU1vX4mDfz3mONYZtFV9cvzlpZnbz5dlmfQAeB3Lo5nQ4xvy8Em7FDFbK+PiUK/V4dJMjXd4/V4vN5ZVJDV/yEDvmXilz2eZQMMRVMUPYcJcmSnoReHea6ADeVjoSKjF3wxHjPHxaLRWMwKBr7VxoP1v+/VgvAXi2i16jf2wmUAAAAASUVORK5CYII= + + + 1 + EXPLORERBAR_SPECIALGROUPHIGHLIGHT_FORECOLOR + 16748098 + + + + 1 + EXPLORERBAR_SPECIALGROUPNOTHIGHLIGHT_FORECOLOR + 16777215 + + + + 1 + FORM_BACKGROUND + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wUEDBY4ue1qPQAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAADElEQVR4nGM4cusXAAT+ApluEnnjAAAAAElFTkSuQmCC + + + 1 + OUTLOOKNAVBAR_BORDERCOLOR + 9841920 + + + + 1 + OVERFLOWPANELBUTTON_FOCUSEDNOTSELECTED + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAfCAIAAACpqzA1AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wQLDy0SOaHLbAAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAAOElEQVR4nG3MUQoAIAwCUPE+XbfTdZNt2s+ggr5EeQiMCXvRFYSSUNCdqLv3pvzY4614rZL4fSs3maBFEIBneiMAAAAASUVORK5CYII= + + + 1 + OVERFLOWPANELBUTTON_FOCUSEDSELECTED + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAfCAIAAACpqzA1AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wQLDy4JmOlRQwAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAAJElEQVR4nGNg0J3G8KKeg4mBmYWJkZkFk2YhThzOZsGiFrs4AEY8A0vEq4sFAAAAAElFTkSuQmCC + + + 1 + OVERFLOWPANELBUTTON_NOTFOCUSEDSELECTED + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAfCAIAAACpqzA1AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wQLDy0EzXV+PQAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAAPElEQVR4nF2N0Q3AIBBCCft0XXfpbAecP1obvyDkAcAzWG/YLsI6GhEutkVYRLZfmsN+vehi9ubKov/HBJ50SdXaW1z6AAAAAElFTkSuQmCC + + + 1 + OVERFLOWPANEL_BACKGROUND + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAfCAIAAACpqzA1AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wQLDykdzXIT+QAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAAJ0lEQVR4nGNg0J3GcPrhH6a///4z/fv3n+kvFKOyGXCIQ9l/ydILAMejWAOrfjfLAAAAAElFTkSuQmCC + + + 1 + OVERFLOWPANEL_MENUBUTTON + 0 + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAADAFBMVEUAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABnduxjAAABAHRSTlP/AP//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////rTvmKwAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAAd0SU1FB9cEDA0CA99ePyQAAAAHdEVYdEF1dGhvcgCprsxIAAAADHRFWHREZXNjcmlwdGlvbgATCSEjAAAACnRFWHRDb3B5cmlnaHQArA/MOgAAAA50RVh0Q3JlYXRpb24gdGltZQA19w8JAAAACXRFWHRTb2Z0d2FyZQBdcP86AAAAC3RFWHREaXNjbGFpbWVyALfAtI8AAAAIdEVYdFdhcm5pbmcAwBvmhwAAAAd0RVh0U291cmNlAPX/g+sAAAAIdEVYdENvbW1lbnQA9syWvwAAAAZ0RVh0VGl0bGUAqO7SJwAAADBJREFUeJxjYEQDDFgFGBhACFkFkgiMgotgV4FpBkFriRBgAAE0d6DbwsCIzsApAAB3XADk8z+QVAAAAABJRU5ErkJggg== + + + 1 + PANELBUTTON_FOCUSEDNOTSELECTED + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAgCAIAAABch4VNAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wQLDyI1GzNiyAAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAAN0lEQVR4nF2Myw0AIAhDG/ZxXadzE6D1Qohy6OH1B6wN6RgYJrqB0VK+7KYn+7h6Kr/3k3P80y9nM0cSCZi5ugAAAABJRU5ErkJggg== + + + 1 + PANELBUTTON_FOCUSEDSELECTED + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAgCAIAAABch4VNAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wQLDyseZk0gwQAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAAJUlEQVR4nGNg0J3G8KKeg4mRmYWJgZkFSjOj8llY8Mtj0ETrBwBSQgNO6OSemAAAAABJRU5ErkJggg== + + + 1 + PANELBUTTON_NOTFOCUSEDSELECTED + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAgCAIAAABch4VNAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wQLDyMWoE8i+wAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAAO0lEQVR4nG2MwQ0AIAwCCfu4rrs4W6H10YfG+OII5IAxGSsJi5UiHCyLSHU6Lj6fw2I9HY5ra9fPW6kNdzlL2GRH0f0AAAAASUVORK5CYII= + + + 1 + PANELBUTTON_NOTSELECTED_FONTCOLOR + 0 + + + + 1 + PANELBUTTON_SELECTED_FONTCOLOR + 0 + + + + 1 + PANELVERTICAL_FOCUSED_BACKCOLOR + 10676223 + + + + 1 + PANELVERTICAL_FONTCOLOR + 0 + + + + 1 + PANELVERTICAL_NOTFOCUSED_BACKCOLOR + 16440004 + + + + 1 + PANEL_BACKGROUND + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAgCAIAAABch4VNAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wQLDyIL2lJ/YwAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAALElEQVR4nGNg0J3GcPrhH6a///4z/fv3H41mYPqLIfYfU+w/A245FDEGdDkA+f5aBYuk+4UAAAAASUVORK5CYII= + + + 1 + SHORTCUTMENU_DOWN_ENABLED + 0 + Qk02BQAAAAAAADYEAAAoAAAAEAAAABAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAoFAw/6BYMP+wWDD/sGBA/7BoQP/AaED/wHBQ/8B4UP/QeFD/4HhQ/+CAUP/giFD/8IhQ/9CIYP/wkGD//5Bg/+CQcP/gmHD/8Jhw//CgcP//oHD//6iA//+wgP//sJD//7iQ///AoP//////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaAhoaGhoaGhoaGhoaGhoaAgUBGhoaGhoaGhoaGhoaAgoJBQAaGhoaGhoaGhoaBxIUCwgFABoaGhoaGhoaExEQFQ4KAAMEGhoaGhoaGhoaDRYPDAMaGhoaGhoaGhoaGhAZFQ4EGhoaGhoaGhoaGhoRGRgXBhoaGhoaGhoaGhoaExEQDQ0aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho= + + + 1 + SHORTCUTMENU_DOWN_DISABLED + 0 + Qk02BQAAAAAAADYEAAAoAAAAEAAAABAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAT09P/1RUVP9WVlb/X19f/2RkZP9mZmb/b29v/3R0dP92dnb/d3d3/3x8fP+BgYH/g4OD/4SEhP+MjIz/jo6O/4+Pj/+UlJT/lpaW/5qamv+cnJz/paWl/6qqqv+vr6//tLS0/729vf//////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaAhoaGhoaGhoaGhoaGhoaAgUBGhoaGhoaGhoaGhoaAgoJBQAaGhoaGhoaGhoaBxIUCwgFABoaGhoaGhoaExEQFQ4KAAMEGhoaGhoaGhoaDRYPDAMaGhoaGhoaGhoaGhAZFQ4EGhoaGhoaGhoaGhoRGRgXBhoaGhoaGhoaGhoaExEQDQ0aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho= + + + 1 + SHORTCUTMENU_UP_ENABLED + 0 + Qk02BQAAAAAAADYEAAAoAAAAEAAAABAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAkEgg/6BIIP+gUCD/oFAw/6BYMP+wWDD/0Ggw/8BwQP/QcED/0HhA/9B4UP/QgFD/4IBQ/+CIYP/wkGD/8Jhg/+CYcP/woHD//6Bw//CogP//sJD//8Cg//////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgwDAAAAFhYWFhYWFhYWFhYMDQsHABYWFhYWFhYWFhYWDBMNCgEWFhYWFhYWFhYWFgwVDw0CFhYWFhYWFhYWEAgGFA8PBQIAFhYWFhYWFhYQFRQSDgkDFhYWFhYWFhYWFhEVFA0DFhYWFhYWFhYWFhYWERUEFhYWFhYWFhYWFhYWFhYQFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhY= + + + 1 + SHORTCUTMENU_UP_DISABLED + 0 + Qk02BQAAAAAAADYEAAAoAAAAEAAAABAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAARERE/0ZGRv9KSkr/T09P/1RUVP9WVlb/Y2Nj/2pqav9sbGz/cXFx/3Z2dv96enr/fHx8/4aGhv+MjIz/kZGR/5SUlP+ampr/nJyc/6SkpP+vr6//vb29//////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgwDAAAAFhYWFhYWFhYWFhYMDQsHABYWFhYWFhYWFhYWDBMNCgEWFhYWFhYWFhYWFgwVDw0CFhYWFhYWFhYWEAgGFA8PBQIAFhYWFhYWFhYQFRQSDgkDFhYWFhYWFhYWFhEVFA0DFhYWFhYWFhYWFhYWERUEFhYWFhYWFhYWFhYWFhYQFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhY= + + + 1 + SHRINKBUTTON_FOCUSEDNOTSHRUNK + 0 + iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAOwgAADsIBFShKgAAAAAd0SU1FB9cEEhECD3MSCbcAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4xMHKyJZIAAACzSURBVDhPrZGhDsIwFEUvf4rEIrBILAKLxCCxyAkQhBAECQQEgiAQCBKSdWt3YaRdxks39ZoccXp7VDvkhdA4dEdqgMLsqAGK95oawL0SagD3XFID2MeCbXw/9G+XHlrY+5xNlNEv9G+k1zvY24wxqsjv0mWD/DqlJEThXnq0yc8Txqhiv0uXDbLTmE2EOOzS6x2yw4htlHF9lx42mP2QGsBsB9QAZtOnBkhXPWqANOlSgw/RhutoURsdLwAAAABJRU5ErkJggg== + + + 1 + SHRINKBUTTON_FOCUSEDSHRUNK + 0 + iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAOwgAADsIBFShKgAAAAAd0SU1FB9cEEhECNbUe0AUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4xMHKyJZIAAACwSURBVDhPrdGvC8JQGIXh439qtBqsRqvBarQYrcYFDSJiEBQNBjEYFgRhd7+OTnbHPFzbN3jCuR9vWoe8EBYfiyMtoHQ7WkD5WtMCimdECyjiJS0gfyyoPj/x5013sMnvc6oq/Mb1TXewyW8zhjRxfdetDbLrlP/42N91tztk5wlDmqi+69YG6WlM5SP/rjvYpIcRVRW233QHG7cf0gLcdkALcJs+LSBZ9WgBSdSlhTcMputoJnzNZQAAAABJRU5ErkJggg== + + + 1 + SHRINKBUTTON_NOTFOCUSEDNOTSHRUNK + 0 + iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAOwgAADsIBFShKgAAAAAd0SU1FB9cEEhEdHtT4J9sAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4xMHKyJZIAAAC+SURBVDhPrYsxB0JhFIbf/kBDQzQ0NERDQzQ0NMQdLqWIhoiGaIiGSzREPyUiIhEREZGIiH7TW3c4fI7v3ukcnuE9jyfTW38Ji+usPrQA4fJNCxAsXrQArehJC9CcP2gBGrM70+D/XK+3ONSnNyYRR/GJ19vtUJtc6UMicXrrBtXxhRqJ5K+3r0FldKYPicXprRuUhycmIbF4vd0OpcGRacSx6/UWh2L/QAtQ6O5pAfLtHS1ALtzSAmSDDS34AaY01+sRksvYAAAAAElFTkSuQmCC + + + 1 + SHRINKBUTTON_NOTFOCUSEDSHRUNK + 0 + iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAOwgAADsIBFShKgAAAAAd0SU1FB9cEEhEgFrDL51cAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4xMHKyJZIAAAC+SURBVDhPrcsxB0JhFMbxpy/Q0BANDQ3R0BANDQ1xh0spoiGiIRqiIaIh+igREYmIiIhERPSNLk/ucLgdp+28/IbnvP6pzupDeLzW8k0PCBcvekAwf9IDGrMHPaA+vdMDapMbNUbRz01vq0F1fKUWhzG56201qIwutEgsf3rrBuXhmf9ILP96JzuUBidaJJI/vXWDYv9ITSK56201KPQO1OIwedPbapDv7ukBufaOHpBtbukBmXBDD0gHa3r4AtRF11ufa4x2AAAAAElFTkSuQmCC + + + 1 + SIGNS_MINUS + 0 + iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjIwWZ92UQAAAI5JREFUKFNjfP76/f+dRy8ygMEPCAUCH6B8a0NxBoYFGw78xwA//v//8OH//wdAwsAj4T+mIriC//8PXHgAVbQCySQkBQ9efPi/4QCaIpCx6BiuaALIJJAJQPwA5A4gceHGB6BVH/4v2HEBYh1IEYYCbIpAJoAcueEEEAPdATIBhsEmnb54HcMtyG4DyQMAS+rq4jk+qVQAAAAASUVORK5CYII= + + + 1 + SIGNS_PLUS + 0 + iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjIwWZ92UQAAAJZJREFUKFNjfP76/f+dRy8ygMEPCAUCH6B8a0NxBoYFGw78xwA//v//8OH//wdAwsAj4T+GIpAgRMH//wcuPIAqWoFkEtAEkCKQggcvPvzfcABNEUgSHcMVTQCZBHIDEINMACm8cOMD0KoP/xfsuACxDqQIpuABUBVI8AA2RTBHbjjxAOwOkAkwDDbp9MXrGG5BdhtIHgAc3OMlaQBkAQAAAABJRU5ErkJggg== + + + 1 + SPLITTER_BACKGROUND + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAICAIAAAC3eAIWAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wQMCzoWoZEbhgAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAAIElEQVR4nGNg0J3GFBnlwPTx0xemj5++QujPEJqBgQEA9uoP+wBka74AAAAASUVORK5CYII= + + + 1 + SPLITTER_GRIPPER + 0 + iVBORw0KGgoAAAANSUhEUgAAACMAAAAICAIAAAD80NH7AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wQMCzomh0grKgAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAAXUlEQVR4nGNk0J3GQBfAEhnlQB+bGDWM3BkYGJTcmxkYGO7trKUdm4mBgcHSKXB9g+HHT19pymbQid388+fvnz9/68RupimbUTZgBX3iieXjpy/0sYmJPtYwMDAAAFC7kzEFWdJXAAAAAElFTkSuQmCC + + + 1 + TITLE_BACKGROUND + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAaCAIAAAD5ZqGGAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAKTWlDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVN3WJP3Fj7f92UPVkLY8LGXbIEAIiOsCMgQWaIQkgBhhBASQMWFiApWFBURnEhVxILVCkidiOKgKLhnQYqIWotVXDjuH9yntX167+3t+9f7vOec5/zOec8PgBESJpHmomoAOVKFPDrYH49PSMTJvYACFUjgBCAQ5svCZwXFAADwA3l4fnSwP/wBr28AAgBw1S4kEsfh/4O6UCZXACCRAOAiEucLAZBSAMguVMgUAMgYALBTs2QKAJQAAGx5fEIiAKoNAOz0ST4FANipk9wXANiiHKkIAI0BAJkoRyQCQLsAYFWBUiwCwMIAoKxAIi4EwK4BgFm2MkcCgL0FAHaOWJAPQGAAgJlCLMwAIDgCAEMeE80DIEwDoDDSv+CpX3CFuEgBAMDLlc2XS9IzFLiV0Bp38vDg4iHiwmyxQmEXKRBmCeQinJebIxNI5wNMzgwAABr50cH+OD+Q5+bk4eZm52zv9MWi/mvwbyI+IfHf/ryMAgQAEE7P79pf5eXWA3DHAbB1v2upWwDaVgBo3/ldM9sJoFoK0Hr5i3k4/EAenqFQyDwdHAoLC+0lYqG9MOOLPv8z4W/gi372/EAe/tt68ABxmkCZrcCjg/1xYW52rlKO58sEQjFu9+cj/seFf/2OKdHiNLFcLBWK8ViJuFAiTcd5uVKRRCHJleIS6X8y8R+W/QmTdw0ArIZPwE62B7XLbMB+7gECiw5Y0nYAQH7zLYwaC5EAEGc0Mnn3AACTv/mPQCsBAM2XpOMAALzoGFyolBdMxggAAESggSqwQQcMwRSswA6cwR28wBcCYQZEQAwkwDwQQgbkgBwKoRiWQRlUwDrYBLWwAxqgEZrhELTBMTgN5+ASXIHrcBcGYBiewhi8hgkEQcgIE2EhOogRYo7YIs4IF5mOBCJhSDSSgKQg6YgUUSLFyHKkAqlCapFdSCPyLXIUOY1cQPqQ28ggMor8irxHMZSBslED1AJ1QLmoHxqKxqBz0XQ0D12AlqJr0Rq0Hj2AtqKn0UvodXQAfYqOY4DRMQ5mjNlhXIyHRWCJWBomxxZj5Vg1Vo81Yx1YN3YVG8CeYe8IJAKLgBPsCF6EEMJsgpCQR1hMWEOoJewjtBK6CFcJg4Qxwicik6hPtCV6EvnEeGI6sZBYRqwm7iEeIZ4lXicOE1+TSCQOyZLkTgohJZAySQtJa0jbSC2kU6Q+0hBpnEwm65Btyd7kCLKArCCXkbeQD5BPkvvJw+S3FDrFiOJMCaIkUqSUEko1ZT/lBKWfMkKZoKpRzame1AiqiDqfWkltoHZQL1OHqRM0dZolzZsWQ8ukLaPV0JppZ2n3aC/pdLoJ3YMeRZfQl9Jr6Afp5+mD9HcMDYYNg8dIYigZaxl7GacYtxkvmUymBdOXmchUMNcyG5lnmA+Yb1VYKvYqfBWRyhKVOpVWlX6V56pUVXNVP9V5qgtUq1UPq15WfaZGVbNQ46kJ1Bar1akdVbupNq7OUndSj1DPUV+jvl/9gvpjDbKGhUaghkijVGO3xhmNIRbGMmXxWELWclYD6yxrmE1iW7L57Ex2Bfsbdi97TFNDc6pmrGaRZp3mcc0BDsax4PA52ZxKziHODc57LQMtPy2x1mqtZq1+rTfaetq+2mLtcu0W7eva73VwnUCdLJ31Om0693UJuja6UbqFutt1z+o+02PreekJ9cr1Dund0Uf1bfSj9Rfq79bv0R83MDQINpAZbDE4Y/DMkGPoa5hpuNHwhOGoEctoupHEaKPRSaMnuCbuh2fjNXgXPmasbxxirDTeZdxrPGFiaTLbpMSkxeS+Kc2Ua5pmutG003TMzMgs3KzYrMnsjjnVnGueYb7ZvNv8jYWlRZzFSos2i8eW2pZ8ywWWTZb3rJhWPlZ5VvVW16xJ1lzrLOtt1ldsUBtXmwybOpvLtqitm63Edptt3xTiFI8p0in1U27aMez87ArsmuwG7Tn2YfYl9m32zx3MHBId1jt0O3xydHXMdmxwvOuk4TTDqcSpw+lXZxtnoXOd8zUXpkuQyxKXdpcXU22niqdun3rLleUa7rrStdP1o5u7m9yt2W3U3cw9xX2r+00umxvJXcM970H08PdY4nHM452nm6fC85DnL152Xlle+70eT7OcJp7WMG3I28Rb4L3Le2A6Pj1l+s7pAz7GPgKfep+Hvqa+It89viN+1n6Zfgf8nvs7+sv9j/i/4XnyFvFOBWABwQHlAb2BGoGzA2sDHwSZBKUHNQWNBbsGLww+FUIMCQ1ZH3KTb8AX8hv5YzPcZyya0RXKCJ0VWhv6MMwmTB7WEY6GzwjfEH5vpvlM6cy2CIjgR2yIuB9pGZkX+X0UKSoyqi7qUbRTdHF09yzWrORZ+2e9jvGPqYy5O9tqtnJ2Z6xqbFJsY+ybuIC4qriBeIf4RfGXEnQTJAntieTE2MQ9ieNzAudsmjOc5JpUlnRjruXcorkX5unOy553PFk1WZB8OIWYEpeyP+WDIEJQLxhP5aduTR0T8oSbhU9FvqKNolGxt7hKPJLmnVaV9jjdO31D+miGT0Z1xjMJT1IreZEZkrkj801WRNberM/ZcdktOZSclJyjUg1plrQr1zC3KLdPZisrkw3keeZtyhuTh8r35CP5c/PbFWyFTNGjtFKuUA4WTC+oK3hbGFt4uEi9SFrUM99m/ur5IwuCFny9kLBQuLCz2Lh4WfHgIr9FuxYji1MXdy4xXVK6ZHhp8NJ9y2jLspb9UOJYUlXyannc8o5Sg9KlpUMrglc0lamUycturvRauWMVYZVkVe9ql9VbVn8qF5VfrHCsqK74sEa45uJXTl/VfPV5bdra3kq3yu3rSOuk626s91m/r0q9akHV0IbwDa0b8Y3lG19tSt50oXpq9Y7NtM3KzQM1YTXtW8y2rNvyoTaj9nqdf13LVv2tq7e+2Sba1r/dd3vzDoMdFTve75TsvLUreFdrvUV99W7S7oLdjxpiG7q/5n7duEd3T8Wej3ulewf2Re/ranRvbNyvv7+yCW1SNo0eSDpw5ZuAb9qb7Zp3tXBaKg7CQeXBJ9+mfHvjUOihzsPcw83fmX+39QjrSHkr0jq/dawto22gPaG97+iMo50dXh1Hvrf/fu8x42N1xzWPV56gnSg98fnkgpPjp2Snnp1OPz3Umdx590z8mWtdUV29Z0PPnj8XdO5Mt1/3yfPe549d8Lxw9CL3Ytslt0utPa49R35w/eFIr1tv62X3y+1XPK509E3rO9Hv03/6asDVc9f41y5dn3m978bsG7duJt0cuCW69fh29u0XdwruTNxdeo94r/y+2v3qB/oP6n+0/rFlwG3g+GDAYM/DWQ/vDgmHnv6U/9OH4dJHzEfVI0YjjY+dHx8bDRq98mTOk+GnsqcTz8p+Vv9563Or59/94vtLz1j82PAL+YvPv655qfNy76uprzrHI8cfvM55PfGm/K3O233vuO+638e9H5ko/ED+UPPR+mPHp9BP9z7nfP78L/eE8/sl0p8zAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAAMklEQVR42nyKsQkAIBDEjtvSidzQaS7PN4qNWCWQaMxlSU5wwAlmMxyvT8Ohbnt8knoABd5GASnfTkkAAAAASUVORK5CYII= + + + 1 + TITLE_BACKGROUND_LEFT + 1 + + + + 1 + TITLE_BACKGROUND_WIDTH + 198 + + + + 1 + TITLE_BORDERCOLOR + 9841920 + + + + 1 + TITLE_FONTCOLOR + 16777215 + + + + 1 + TOOLTITLE_BACKGROUND + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAATCAIAAADeafBOAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAFFJREFUGFcdw1sKQEAAQNG7/0VIkpKkJCkxjUQikUj2MS9fyqmD1yr65/3L2yEuR3M66sNS7ZZysxSrIV8M2WxIJ0MyauJBE/WasFMEUuEL9QED9C6y5vErvgAAAABJRU5ErkJggg== + + + 1 + TOOLTITLE_FONTCOLOR + 0 + + + + 1 + ZOOMNAVBAR_BAR + 0 + Qk3+BAAAAAAAADYEAAAoAAAAAQAAADIAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAkzgE/5Q6Bf+WOwf/lz0J/5k/Cv+aQAz/m0IO/5xDD/+eRRH/n0cT/6BIFf+iShb/o0sY/6RNGv+mThv/p1Ad/6lSH/+qUyH/q1Ui/61WJP+uWCb/r1kn/7FbKf+yXSv/s14t/7VgLv+9cUX/0Jl6/9OfgP/Wo4b/2KmM/9utk//dspn/4Lef/+K8pv/kwaz/58Wy/+nKt//rzr3/7dLC/+/WyP/w2s3/8t7S//Th1//15dv/9ujg//jr4//57uj/+vHr//vz7v8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAABAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAATAAAAFAAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAfAAAAIAAAACEAAAAiAAAAIwAAACQAAAAlAAAAJgAAACcAAAAoAAAAKQAAACoAAAArAAAALAAAAC0AAAAuAAAALwAAADAAAAAxAAAA + + + 1 + ZOOMNAVBAR_REFLECTEDSEPARATOR + 0 + iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABGdBTUEAALGPC/xhBQAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjIwWZ92UQAAAD9JREFUaEPt0IEAAAAAw6D5Ux/khVBhwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwMDLwAAkMAABCDVySwAAAABJRU5ErkJggg== + + + 1 + ZOOMNAVBAR_SEPARATOR + 0 + iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABGdBTUEAALGPC/xhBQAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjIwWZ92UQAAAD9JREFUaEPt0IEAAAAAw6D5Ux/khVBhwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwMDLwAAkMAABCDVySwAAAABJRU5ErkJggg== + + + 1 + ZOOMNAVBAR_STACKBUTTON + 0 + iVBORw0KGgoAAAANSUhEUgAAAMAAAAAcCAYAAAA3ILBTAAABF0lEQVR4nO3cMW7CQBRF0WuU1kUovAHatNn/CuiyCyJKOnAKG8YQg02BjP6/R0LC43kSxTw0jGRASqy6uW6A9ci4FMEJ2AH788BwoX8Dm8FYy/0izLln3vyS+UfXP/2LVT/YcL34pagq4AuooRTAbY8yqYBPKAVw8SubCkoBpJQ+Bu/bkftjY8/cM29+yfzk3GEBbrdBS/+KN2/+FadAV9wCKTULoNQsgFKzAErNAig1j0HNR85PzvUY1HzU/Jy5boGUmwVQahZAqVkApWYBlJrHoOYj5yfnegxqPmp+ztzLFuh0b4IUVAulALvzgJTAEfiFUoA93d9EWAJFdwS2wAH+741quqflfUheEbV03/yHpT+I9Bb+AD0fBdMuQEabAAAAAElFTkSuQmCC + + + 2 + BUTTON_FOCUSED_FONTCOLOR + 0 + + + + 2 + BUTTON_LEFT_FOCUSED + 0 + Qk22BAAAAAAAADYEAAAoAAAAAgAAACAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAWIBg/1/C9/9kxPf/aMb4/23I+P9xyvj/ds34/3rP+f9+0fn/g9P5/4fV+f+M1/r/kNr6/5Xc+v+Z3vr/neD7/6Li+/+m5Pv/q+f8/6/p/P+06/z/uO38/7zv/f/B8f3/xfT9/8r2/f/O+P7/0/r+/9f8/v//////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/x0AAAAAAAAAAAEAAAACAAAAAwAAAAQAAAAFAAAABgAAAAcAAAAIAAAACQAAAAoAAAALAAAADAAAAA0AAAAOAAAADwAAABAAAAARAAAAEgAAABMAAAAUAAAAFQAAABYAAAAXAAAAGAAAABkAAAAaAAAAGwAAABwAAAAAAAAdAAAA + + + 2 + BUTTON_LEFT_HOTTRACKING + 0 + Qk22BAAAAAAAADYEAAAoAAAAAgAAACAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAcKCT/9Xj3///////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wIAAAAAAAAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAAAACAAAA + + + 2 + BUTTON_LEFT_NOTFOCUSED + 0 + Qk22BAAAAAAAADYEAAAoAAAAAgAAACAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAWIBg/47Cs/+Qw7X/k8W3/5XHuf+XyLv/msq9/5zMv/+ezcH/oM/D/6PQxf+l0sf/p9TJ/6rVy/+s18z/rtnO/7Ha0P+z3NL/td7U/7ff1v+64dj/vOLa/77k3P/B5t7/w+fg/8Xp4v/I6+T/yuzm/8zu6P//////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/x0AAAAAAAAAAAEAAAACAAAAAwAAAAQAAAAFAAAABgAAAAcAAAAIAAAACQAAAAoAAAALAAAADAAAAA0AAAAOAAAADwAAABAAAAARAAAAEgAAABMAAAAUAAAAFQAAABYAAAAXAAAAGAAAABkAAAAaAAAAGwAAABwAAAAAAAAdAAAA + + + 2 + BUTTON_MIDDLE_FOCUSED + 0 + Qk22BAAAAAAAADYEAAAoAAAAAQAAACAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAWIBg/1vA9/9fwvf/ZMT3/2jG+P9tyPj/ccr4/3bN+P96z/n/ftH5/4PT+f+H1fn/jNf6/5Da+v+V3Pr/md76/53g+/+i4vv/puT7/6vn/P+v6fz/tOv8/7jt/P+87/3/wfH9/8X0/f/K9v3/zvj+/9P6/v/X/P7/3P///wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAABAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAATAAAAFAAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAAAAAA + + + 2 + BUTTON_MIDDLE_HOTTRACKING + 0 + Qk22BAAAAAAAADYEAAAoAAAAAQAAACAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAcKCT/9Xj3/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAAAAA + + + 2 + BUTTON_MIDDLE_NOTFOCUSED + 0 + Qk22BAAAAAAAADYEAAAoAAAAAQAAACAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAWIBg/4zAsf+OwrP/kMO1/5PFt/+Vx7n/l8i7/5rKvf+czL//ns3B/6DPw/+j0MX/pdLH/6fUyf+q1cv/rNfM/67Zzv+x2tD/s9zS/7Xe1P+339b/uuHY/7zi2v++5Nz/webe/8Pn4P/F6eL/yOvk/8rs5v/M7uj/z/Dq/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAABAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAATAAAAFAAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAAAAAA + + + 2 + BUTTON_NOTFOCUSED_FONTCOLOR + 0 + + + + 2 + BUTTON_RIGHT_FOCUSED + 0 + Qk22BAAAAAAAADYEAAAoAAAAAgAAACAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAWIBg/1/C9/9kxPf/aMb4/23I+P9xyvj/ds34/3rP+f9+0fn/g9P5/4fV+f+M1/r/kNr6/5Xc+v+Z3vr/neD7/6Li+/+m5Pv/q+f8/6/p/P+06/z/uO38/7zv/f/B8f3/xfT9/8r2/f/O+P7/0/r+/9f8/v//////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAdAAAAAAAAAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAAEwAAABQAAAAVAAAAFgAAABcAAAAYAAAAGQAAABoAAAAbAAAAHAAAAAAAAAAAHQAA + + + 2 + BUTTON_RIGHT_HOTTRACKING + 0 + Qk22BAAAAAAAADYEAAAoAAAAAgAAACAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAcKCT/9Xj3///////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wACAAAAAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAAAAAAAAgAA + + + 2 + BUTTON_RIGHT_NOTFOCUSED + 0 + Qk22BAAAAAAAADYEAAAoAAAAAgAAACAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAWIBg/47Cs/+Qw7X/k8W3/5XHuf+XyLv/msq9/5zMv/+ezcH/oM/D/6PQxf+l0sf/p9TJ/6rVy/+s18z/rtnO/7Ha0P+z3NL/td7U/7ff1v+64dj/vOLa/77k3P/B5t7/w+fg/8Xp4v/I6+T/yuzm/8zu6P//////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAdAAAAAAAAAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAAEwAAABQAAAAVAAAAFgAAABcAAAAYAAAAGQAAABoAAAAbAAAAHAAAAAAAAAAAHQAA + + + 2 + CONTAINER_BORDERCOLOR + 5800032 + + + + 2 + EXPLORERBAR_BACKGROUND + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAHZCAMAAABw0aFNAAAABGdBTUEAALGPC/xhBQAAAwBQTFRFpb2Epb2Fpr6Fpr6Gp7+HqL+HqL+IqcCIqcCJqsGKq8GLrMKLrMKMrcONrsOOrsSOr8SPsMSPsMWQscWRscaRssaSs8eTtMeTtMeUtMiUtciVtsmWt8qXuMqYucuZucyausybu82cvM2cvM6cvM6dvc6evs+fv9Cfv9CgwNCgwNChwdGiwtKiwtKjw9KkxNOkxNOlxdSlxdSmxtSnx9Wox9aoyNaoyNapydaqyterytiry9iszNmtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZsvEpQAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjMwQIRHEAAAAJJJREFUOE91wQUSwkAABMHB3d3d3fX/74KQSnEJSzdPHvId5w3zFfWCfubM6f3oekDfo+6wbz03ONd8r9CXWBeec/QZ5in2yef45wh9iDqg/7NHj67cQW+jttCbqA30OmoNtUrls+xZQi/iXcCal3M4s5gzuKexpv5MoiZwj2OPyVH0COYw9pAYJEhA9mP24UR5AQQQNjsQQljvAAAAAElFTkSuQmCC + + + 2 + EXPLORERBAR_BORDERCOLOR + 16777215 + + + + 2 + EXPLORERBAR_NORMALGROUPBACKGROUND + 0 + iVBORw0KGgoAAAANSUhEUgAAANoAAAABCAMAAACPOkAFAAAABGdBTUEAALGPC/xhBQAAAwBQTFRF9vbsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJZ4YQQAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjMwQIRHEAAAAAxJREFUGFdjYBi2AAAA2wABbb4xPgAAAABJRU5ErkJggg== + + + 2 + EXPLORERBAR_NORMALGROUPCOLLAPSEHIGHLIGHT + 0 + iVBORw0KGgoAAAANSUhEUgAAAPEAAAAZCAMAAADXAjjUAAAABGdBTUEAALGPC/xhBQAAAwBQTFRFAAAAcpIdwM23xM62wc24wc64ws65w8+6xdC4xNC7xdG8x9K9ydK6ytO7yNK8ytS8ytW+ydW/zNW6zta6zNa7zti9zti+zti/0dm90di+1Ny+1Ny/1t6/3+a33eK+3OK/3+a43+a53uS+3+a+3+a/4Oa44Oa54Oe64Oe74ee84ee94Oa+4Oa/4ei54Oi64ei74ei84ui94ui+4ui/5Om+5Oq+5Oq/ytTCy9XDzNbEztjGztjHz9nI0trC0drD0drE0tvF1N3D1t7F0drJ09vL09vM09zN19/Q19/R2N/R2ODA2uLG3+XA3uTB3+fB3eTG3eTI3uTJ2eHT2+LU3uTY4efB4ufC4+jD4+nE5OnB5erA5OrB5erC5uvD5OnE5OnH5OrH5+zD5+zE4+jI4ujJ6OzF6OzG6e3H6e3I6u7I6u7J6u7K6+7L7O/M7O/N4Obb4efd4+jd7fDN7fDO7vDP7vHQ7/HR7/HS8PLS8PLT8PLU8fPV8vPW8vPX8/TX8/TY9PTZ9PXa9fXb9fXc9vbc9vbd9/be9/ff5Ong5erg5+zj6e3k6u7n7O/n7vHp7vHq7vHr7/Ls8fPt8PPu8vTu8/Xv+Pfg+Pfh+Pjh+fji+fjj+vnk+/nl+/nm+/rm/Prm/Prn/Pro/fvp/vvq/vvr/vzr//zs8/Xx9Pbw9fbx9/jz9/j0+Pn2+Pn3+vr3+vv4+vv5/Pz6/Pz7/f38/f79/v/+////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoGLbZgAAAQB0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zMECERxAAAAIqSURBVFhH7dhnV9NgFMDx4gCpiuAeaBEakqZAFi4UF+BGRHFUQKRFrQuRqjgKOKqioFZGwQUOrAi1lpjy9eK9Tzi88Rtc/J2evv+fm/ukfWymGY1Gv6PR0W+Wr8wX5jMaGRke/vQRfUDvwTtmaGhwMBKJPAfPwFMQCoWePAaPwEPQCTo62tuDweADcB/cA3fb2u6A2+AWCAQCra3NzdfBNXAVXAGX/X7/JXARXABer7exsb6+jqkFZ9FmtKm4WFUVJDMSU2QpLMxHHMeZpg2DZ1ExZ9owmHCxpGiaphbNzJjjaBdr54/t3bl7V+lhn2v6qSZeXFudtaOlpy/cVTFnzxlrj2kXe6rTb/yaQkbPliXncsgXy032FoMFgx9bV2k51GdcV3pQx9gUlvw2tWoj9eKGrDALTsHkpHFgpcKGTPisbtqeYMH4mUrq3YtPUp+xb58VzL6MyTcZR3niM/ZVWIcW2+M/iXBmpbCe9lPt22YdXNZDHXuVcUTARSa8xw32vpk9NhLjNxeRL/ZkHjeS03s8OdFbttxJfcZC1byXuq4bhqH/Hh+oSc12U99j3rMm7UU8Fo/HJn7216Qvc4g88ZNLkk+vmH/i9djYQG/3/rSljjyR+vtYEpRT6+baS8rLSxYuWL0hV2RrTPmsliRBVSsPrQXZjly36CL/uxquuQRZLXAXOJ1uEYPJ/1vEmz1eUhS875Nd/Gy4EcC7zHweYe3/Yqr31f/O+C9gZ7otZ1QfyQAAAABJRU5ErkJggg== + + + 2 + EXPLORERBAR_NORMALGROUPCOLLAPSENOTHIGHLIGHT + 0 + iVBORw0KGgoAAAANSUhEUgAAAPEAAAAZCAMAAADXAjjUAAAABGdBTUEAALGPC/xhBQAAAwBQTFRFAAAAS2ccwM23xM62wc24wc64ws65w8+6xdC4xNC7xdG8x9K9ydK6ytO7yNK8ytS8ytW+ydW/zNW6zta6zNa7zti9zti+zti/0dm90di+1Ny+1Ny/1t6/3+a33eK+3OK/3+a43+a53uS+3+a+3+a/4Oa44Oa54Oe64Oe74ee84ee94Oa+4Oa/4ei54Oi64ei74ei84ui94ui+4ui/5Om+5Oq+5Oq/ytTCy9XDzNbEztjGztjHz9nI0trC0drD0drE0tvF1N3D1t7F0drJ09vL09vM09zN19/Q19/R2N/R2ODA2uLG3+XA3uTB3+fB3eTG3eTI3uTJ2eHT2+LU3uTY4efB4ufC4+jD4+nE5OnB5erA5OrB5erC5uvD5OnE5OnH5OrH5+zD5+zE4+jI4ujJ6OzF6OzG6e3H6e3I6u7I6u7J6u7K6+7L7O/M7O/N4Obb4efd4+jd7fDN7fDO7vDP7vHQ7/HR7/HS8PLS8PLT8PLU8fPV8vPW8vPX8/TX8/TY9PTZ9PXa9fXb9fXc9vbc9vbd9/be9/ff5Ong5erg5+zj6e3k6u7n7O/n7vHp7vHq7vHr7/Ls8fPt8PPu8vTu8/Xv+Pfg+Pfh+Pjh+fji+fjj+vnk+/nl+/nm+/rm/Prm/Prn/Pro/fvp/vvq/vvr/vzr//zs8/Xx9Pbw9fbx9/jz9/j0+Pn2+Pn3+vr3+vv4+vv5/Pz6/Pz7/f38/f79/v/+////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgqtuQAAAQB0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zMECERxAAAAIqSURBVFhH7dhnV9NgFMDx4gCpiuAeaBEakqZAFi4UF+BGRHFUQKRFrQuRqjgKOKqioFZGwQUOrAi1lpjy9eK9Tzi88Rtc/J2evv+fm/ukfWymGY1Gv6PR0W+Wr8wX5jMaGRke/vQRfUDvwTtmaGhwMBKJPAfPwFMQCoWePAaPwEPQCTo62tuDweADcB/cA3fb2u6A2+AWCAQCra3NzdfBNXAVXAGX/X7/JXARXABer7exsb6+jqkFZ9FmtKm4WFUVJDMSU2QpLMxHHMeZpg2DZ1ExZ9owmHCxpGiaphbNzJjjaBdr54/t3bl7V+lhn2v6qSZeXFudtaOlpy/cVTFnzxlrj2kXe6rTb/yaQkbPliXncsgXy032FoMFgx9bV2k51GdcV3pQx9gUlvw2tWoj9eKGrDALTsHkpHFgpcKGTPisbtqeYMH4mUrq3YtPUp+xb58VzL6MyTcZR3niM/ZVWIcW2+M/iXBmpbCe9lPt22YdXNZDHXuVcUTARSa8xw32vpk9NhLjNxeRL/ZkHjeS03s8OdFbttxJfcZC1byXuq4bhqH/Hh+oSc12U99j3rMm7UU8Fo/HJn7216Qvc4g88ZNLkk+vmH/i9djYQG/3/rSljjyR+vtYEpRT6+baS8rLSxYuWL0hV2RrTPmsliRBVSsPrQXZjly36CL/uxquuQRZLXAXOJ1uEYPJ/1vEmz1eUhS875Nd/Gy4EcC7zHweYe3/Yqr31f/O+C9gZ7otZ1QfyQAAAABJRU5ErkJggg== + + + 2 + EXPLORERBAR_NORMALGROUPEXPANDHIGHLIGHT + 0 + iVBORw0KGgoAAAANSUhEUgAAAPEAAAAZCAMAAADXAjjUAAAABGdBTUEAALGPC/xhBQAAAwBQTFRFAAAAcpIdwM23xM62wc24wc64ws65w8+6xdC4xNC7xdG8x9K9ydK6ytO7yNK8ytS8ytW+ydW/zNW6zta6zNa7zti9zti+zti/0dm90di+1Ny+1Ny/1t6/3+a33eK+3OK/3+a43+a53uS+3+a+3+a/4Oa44Oa54Oe64Oe74ee84ee94Oa+4Oa/4ei54Oi64ei74ei84ui94ui+4ui/5Om+5Oq+5Oq/ytTCy9XDzNbEztjGztjHz9nI0trC0drD0drE0tvF1N3D1t7F0drJ09vL09vM09zN19/Q19/R2N/R2ODA2uLG3+XA3uTB3+fB3eTG3eTI3uTJ2eHT2+LU3uTY4efB4ufC4+jD4+nE5OnB5erA5OrB5erC5uvD5OnE5OnH5OrH5+zD5+zE4+jI4ujJ6OzF6OzG6e3H6e3I6u7I6u7J6u7K6+7L7O/M7O/N4Obb4efd4+jd7fDN7fDO7vDP7vHQ7/HR7/HS8PLS8PLT8PLU8fPV8vPW8vPX8/TX8/TY9PTZ9PXa9fXb9fXc9vbc9vbd9/be9/ff5Ong5erg5+zj6e3k6u7n7O/n7vHp7vHq7vHr7/Ls8fPt8PPu8vTu8/Xv+Pfg+Pfh+Pjh+fji+fjj+vnk+/nl+/nm+/rm/Prm/Prn/Pro/fvp/vvq/vvr/vzr//zs8/Xx9Pbw9fbx9/jz9/j0+Pn2+Pn3+vr3+vv4+vv5/Pz6/Pz7/f38/f79/v/+////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoGLbZgAAAQB0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zMECERxAAAAIwSURBVFhH7dhXX9NgFAbw1gFSFcE90CI2JE2BNAkuFCe4EVEcFRBpUetCpCqOgqtOUCtIwQUOrAi1lpjm68Vz3iA3foOD/4vcP7/zPm+SYzPNeDz+DQ0Pf7V8YT4zn9DQ0ODgxw/oPXoH3jIDA/39sVjsCXgMHoFIJPLwAbgP7oG7oLOzoyMcDt8Bt8EtcLO9/Qa4Dq6BUCjU1tbSchlcAhfBBXA+GAyeA2fBGeD3+5uaGhrqmTpwEq1Da0tLFUVGXkZiSizFxYWI4zjTtGHgKZSYM20YmHBiSVZVVSmZnDHH0U6snj60Y8u2reX7A+6JU008cV1N7ubW7t7o08pp209YPaad2FeTdeWngfTu9fNO5ZNP7G12tOosMPi+YYmaT33G9eV7tb+BDeN1RvVq6okbc6OGYbdDaHik9T2LZTZkwnd186aUlRZTp7WuuUepzziwi51pOxuzPv4q+yBPfMaBSqvFGNj4nYrmVAkraZ/qwEa4uCZ6nNYSL7IPCFhkwj1udPRO9lhPjV6dQz6xL+ewnk6zHuvjYz07F7qoz1ionvFc0zTdrmu/RvtqM/I81HvM+5ZlPksmksnE2I83tVkLnCJP/OaSvMcXzTzycmSkr6drd+Z85xqR+vtYEuRjK6Y7yioqymbPWrqqQGQ1pnxXS5KgKFX7loM8Z4FHdJP/roY1l+BVijxFLpdHxMDk/xZxs8dLsoz7Pq+bnwobAdxlFvII0/5PTHVf/e+M/wABmLosYFFdIwAAAABJRU5ErkJggg== + + + 2 + EXPLORERBAR_NORMALGROUPEXPANDNOTHIGHLIGHT + 0 + iVBORw0KGgoAAAANSUhEUgAAAPEAAAAZCAMAAADXAjjUAAAABGdBTUEAALGPC/xhBQAAAwBQTFRFAAAAS2ccwM23xM62wc24wc64ws65w8+6xdC4xNC7xdG8x9K9ydK6ytO7yNK8ytS8ytW+ydW/zNW6zta6zNa7zti9zti+zti/0dm90di+1Ny+1Ny/1t6/3+a33eK+3OK/3+a43+a53uS+3+a+3+a/4Oa44Oa54Oe64Oe74ee84ee94Oa+4Oa/4ei54Oi64ei74ei84ui94ui+4ui/5Om+5Oq+5Oq/ytTCy9XDzNbEztjGztjHz9nI0trC0drD0drE0tvF1N3D1t7F0drJ09vL09vM09zN19/Q19/R2N/R2ODA2uLG3+XA3uTB3+fB3eTG3eTI3uTJ2eHT2+LU3uTY4efB4ufC4+jD4+nE5OnB5erA5OrB5erC5uvD5OnE5OnH5OrH5+zD5+zE4+jI4ujJ6OzF6OzG6e3H6e3I6u7I6u7J6u7K6+7L7O/M7O/N4Obb4efd4+jd7fDN7fDO7vDP7vHQ7/HR7/HS8PLS8PLT8PLU8fPV8vPW8vPX8/TX8/TY9PTZ9PXa9fXb9fXc9vbc9vbd9/be9/ff5Ong5erg5+zj6e3k6u7n7O/n7vHp7vHq7vHr7/Ls8fPt8PPu8vTu8/Xv+Pfg+Pfh+Pjh+fji+fjj+vnk+/nl+/nm+/rm/Prm/Prn/Pro/fvp/vvq/vvr/vzr//zs8/Xx9Pbw9fbx9/jz9/j0+Pn2+Pn3+vr3+vv4+vv5/Pz6/Pz7/f38/f79/v/+////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdgqtuQAAAQB0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zMECERxAAAAIwSURBVFhH7dhXX9NgFAbw1gFSFcE90CI2JE2BNAkuFCe4EVEcFRBpUetCpCqOgqtOUCtIwQUOrAi1lpjm68Vz3iA3foOD/4vcP7/zPm+SYzPNeDz+DQ0Pf7V8YT4zn9DQ0ODgxw/oPXoH3jIDA/39sVjsCXgMHoFIJPLwAbgP7oG7oLOzoyMcDt8Bt8EtcLO9/Qa4Dq6BUCjU1tbSchlcAhfBBXA+GAyeA2fBGeD3+5uaGhrqmTpwEq1Da0tLFUVGXkZiSizFxYWI4zjTtGHgKZSYM20YmHBiSVZVVSmZnDHH0U6snj60Y8u2reX7A+6JU008cV1N7ubW7t7o08pp209YPaad2FeTdeWngfTu9fNO5ZNP7G12tOosMPi+YYmaT33G9eV7tb+BDeN1RvVq6okbc6OGYbdDaHik9T2LZTZkwnd186aUlRZTp7WuuUepzziwi51pOxuzPv4q+yBPfMaBSqvFGNj4nYrmVAkraZ/qwEa4uCZ6nNYSL7IPCFhkwj1udPRO9lhPjV6dQz6xL+ewnk6zHuvjYz07F7qoz1ionvFc0zTdrmu/RvtqM/I81HvM+5ZlPksmksnE2I83tVkLnCJP/OaSvMcXzTzycmSkr6drd+Z85xqR+vtYEuRjK6Y7yioqymbPWrqqQGQ1pnxXS5KgKFX7loM8Z4FHdJP/roY1l+BVijxFLpdHxMDk/xZxs8dLsoz7Pq+bnwobAdxlFvII0/5PTHVf/e+M/wABmLosYFFdIwAAAABJRU5ErkJggg== + + + 2 + EXPLORERBAR_NORMALGROUPHIGHLIGHT_FORECOLOR + 1938034 + + + + 2 + EXPLORERBAR_NORMALGROUPNOTHIGHLIGHT_FORECOLOR + 2975318 + + + + 2 + EXPLORERBAR_SPECIALGROUPBACKGROUND + 0 + iVBORw0KGgoAAAANSUhEUgAAANoAAAABCAMAAACPOkAFAAAABGdBTUEAALGPC/xhBQAAAwBQTFRF9vbsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJZ4YQQAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjMwQIRHEAAAAAxJREFUGFdjYBi2AAAA2wABbb4xPgAAAABJRU5ErkJggg== + + + 2 + EXPLORERBAR_SPECIALGROUPCOLLAPSEHIGHLIGHT + 0 + iVBORw0KGgoAAAANSUhEUgAAAPEAAAAZCAMAAADXAjjUAAAABGdBTUEAALGPC/xhBQAAAwBQTFRFAAAAd4xAd4xBeIxBeI1CeY5CeY5Deo9Ee49Fe5BFfJBGfJFHfZFIfZJIfpJJf5NKf5RLgJRLgJRMgZVNgpZNgpZOg5ZPg5dQhJdQhJhQhJhRhZlShplThppTh5pUh5tViJtViJxWiZxXip1Yip5Yi55Zi55ajJ9ajJ9bgKFNgKJOgaNPgqNQgqRQgqRRg6VShaZUhadVhqdWh6hXjaBbjaBcjqFdj6Fej6Jej6JfiahYialaiqpbi6pcjKtcjaxcjaxfkKJfjaxgjq1hkKNgkaNhkaRhkqRik6Vjk6Vlk6ZklKZklKZllKZmladnlqdoka9hka9kka9llahllahmlqhnlqholqhpl6lqmKprmapsmattmqtum6xtm6xum61vm6xwnK1wna1xna1yna5xna5ynq5znq90n691krBikrBkkrBmk7BnlbFllbFmlrNnlLFpl7NolbJqlrNsmrVxm7ZxmrZyn7B2nrlzoK92oLB1obB3oLB4oLB5o7N7orN8pbN9pLR9oLlxobpzoLp2obp4o7x6p755p798p79/qMB7qsF9q8F+q8J/p7aBqLeBqLaCqLeDqbeFqrmEqrmFqbmGrbuHqrmIrryIsr+Nsb+Osb+Psb6QrMODrsSFscaHs8iJtcmLtsqLuMuMuMuNucuOs8CRs8GTtMGStcOTtsOUtsSUt8SVt8SWuMmQucqSu8uWucyQu8yTu86RvM2Svc+Svc6Uvs+Wu8mYu8mZu8mavMqZvMqavcqbvc2Yvs2Zv8+av82cv8ydv8+dvtCUvtCWv9CXwc6cwM6dwM+ewdGYwdGbwdCdwtCew9Kf3e2+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqnSqhwAAAQB0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zMECERxAAAAIwSURBVFhHY/j/nxEImJhhgAUMWFnZoIAdDDg4ODhBgAsEuCGAhxcM+ECAHwQEBIFACASEgUBERBQExEBAXEJCUlIKBKTBQEZWVg4M5BWAQBEElEBAGQhUVFRBQE0dCDQ0NExMTEHADAzMzS0sLCwtHYHABQJc3YDAHQo8wMDLy8sbBHygwBcKQkJCQ0P//2cAe3jk+Dj0PwPYw8PXx8HhUclpaYnhwHgGx3Fo6PD2cXD8jL0nzh4/fPbQrOgR4WPfql2nN87rbGvtWHDqZP8IiGPftL1H57WWFBfkZGdXLDk32XfYp2r/lcfmlhUH2tpY29jaZi06WeU33PNxzcn5pUVORvrn9fQNDfUDtq4OG+4+nra9pcDBUPf8+fO6INB1MHW4+3jWomJnY6CHQUhXVzt3f2P4MK+dZi4IsjUA+xZEaNtt6o8a5j6eNd/ZWh/kX1Ca1ta2WjchBlh2DecWyKxFtobgCAYnai379RPjhnkcT9mWqQdO0eBErZW3YcJw93H5mXZIFgYS2lo63TsahruPfVdty9fW1gZnYi3Nwi3Lqod7PvbM2Ls5XwsMNDVzF+/sS48a5iWXj3/jniPNVpqamlrWTUt3T61JHu71sY9PZN3aAwt729t7Fu5bM6k2LXq4t7l8fHyj0qfMXr58+Yo50+tr0mOHfbsaOM7lG5lSWVMLBDWVqeAYHt4tEPDIXlh0QnJSUnJCTEToSBj1AfvZLwwI/EbIONeoj0H5GAA8XXYaFSMVkwAAAABJRU5ErkJggg== + + + 2 + EXPLORERBAR_SPECIALGROUPCOLLAPSENOTHIGHLIGHT + 0 + iVBORw0KGgoAAAANSUhEUgAAAPEAAAAZCAMAAADXAjjUAAAABGdBTUEAALGPC/xhBQAAAwBQTFRFAAAAd4xAd4xBeIxBeI1CeY5CeY5Deo9Ee49Fe5BFfJBGfJFHfZFIfZJIfpJJf5NKf5RLgJRLgJRMgZVNgpZNgpZOg5ZPg5dQhJdQhJhQhJhRhZlShplThppTh5pUh5tViJtViJxWiZxXip1Yip5Yi55Zi55ajJ9ajJ9bgKFNgKJOgaNPgqNQgqRQgqRRg6VShaZUhadVhqdWh6hXjaBbjaBcjqFdj6Fej6Jej6JfiahYialaiqpbi6pcjKtcjaxcjaxfkKJfjaxgjq1hkKNgkaNhkaRhkqRik6Vjk6Vlk6ZklKZklKZllKZmladnlqdoka9hka9kka9llahllahmlqhnlqholqhpl6lqmKprmapsmattmqtum6xtm6xum61vm6xwnK1wna1xna1yna5xna5ynq5znq90n691krBikrBkkrBmk7BnlbFllbFmlrNnlLFpl7NolbJqlrNsmrVxm7ZxmrZyn7B2nrlzoK92oLB1obB3oLB4oLB5o7N7orN8pbN9pLR9oLlxobpzoLp2obp4o7x6p755p798p79/qMB7qsF9q8F+q8J/p7aBqLeBqLaCqLeDqbeFqrmEqrmFqbmGrbuHqrmIrryIsr+Nsb+Osb+Psb6QrMODrsSFscaHs8iJtcmLtsqLuMuMuMuNucuOs8CRs8GTtMGStcOTtsOUtsSUt8SVt8SWuMmQucqSu8uWucyQu8yTu86RvM2Svc+Svc6Uvs+Wu8mYu8mZu8mavMqZvMqavcqbvc2Yvs2Zv8+av82cv8ydv8+dvtCUvtCWv9CXwc6cwM6dwM+ewdGYwdGbwdCdwtCew9Kf////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAw2AWPQAAAQB0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zMECERxAAAAIwSURBVFhHY/j/nxEImJhhgAUMWFnZoIAdDDg4ODhBgAsEuCGAhxcM+ECAHwQEBIFACASEgUBERBQExEBAXEJCUlIKBKTBQEZWVg4M5BWAQBEElEBAGQhUVFRBQE0dCDQ0NExMTEHADAzMzS0sLCwtHYHABQJc3YDAHQo8wMDLy8sbBHygwBcKQkJCQ0P//2cAe3jk+Dj0PwPYw8PXx8HhUclpaYnhwHgGx3Fo6PD2cXD8jL0nzh4/fPbQrOgR4WPfql2nN87rbGvtWHDqZP8IiGPftL1H57WWFBfkZGdXLDk32XfYp2r/lcfmlhUH2tpY29jaZi06WeU33PNxzcn5pUVORvrn9fQNDfUDtq4OG+4+nra9pcDBUPf8+fO6INB1MHW4+3jWomJnY6CHQUhXVzt3f2P4MK+dZi4IsjUA+xZEaNtt6o8a5j6eNd/ZWh/kX1Ca1ta2WjchBlh2DecWyKxFtobgCAYnai379RPjhnkcT9mWqQdO0eBErZW3YcJw93H5mXZIFgYS2lo63TsahruPfVdty9fW1gZnYi3Nwi3Lqod7PvbM2Ls5XwsMNDVzF+/sS48a5iWXj3/jniPNVpqamlrWTUt3T61JHu71sY9PZN3aAwt729t7Fu5bM6k2LXq4t7l8fHyj0qfMXr58+Yo50+tr0mOHfbsaOM7lG5lSWVMLBDWVqeAYHt4tEPDIXlh0QnJSUnJCTEToSBj1AfvZLwwI/EbIONeoj0H5GAA8XXYaFSMVkwAAAABJRU5ErkJggg== + + + 2 + EXPLORERBAR_SPECIALGROUPEXPANDHIGHLIGHT + 0 + iVBORw0KGgoAAAANSUhEUgAAAPEAAAAZCAMAAADXAjjUAAAABGdBTUEAALGPC/xhBQAAAwBQTFRFAAAAd4xAd4xBeIxBeI1CeY5CeY5Deo9Ee49Fe5BFfJBGfJFHfZFIfZJIfpJJf5NKf5RLgJRLgJRMgZVNgpZNgpZOg5ZPg5dQhJdQhJhQhJhRhZlShplThppTh5pUh5tViJtViJxWiZxXip1Yip5Yi55Zi55ajJ9ajJ9bgKFNgKJOgaNPgqNQgqRQgqRRg6VShaZUhadVhqdWh6hXjaBbjaBcjqFdj6Fej6Jej6JfiahYialaiqpbi6pcjKtcjaxcjaxfkKJfjaxgjq1hkKNgkaNhkaRhkqRik6Vjk6Vlk6ZklKZklKZllKZmladnlqdoka9hka9kka9llahllahmlqhnlqholqhpl6lqmKprmapsmattmqtum6xtm6xum61vm6xwnK1wna1xna1yna5xna5ynq5znq90n691krBikrBkkrBmk7BnlbFllbFmlrNnlLFpl7NolbJqlrNsmrVxm7ZxmrZyn7B2nrlzoK92oLB1obB3oLB4oLB5o7N7orN8pbN9pLR9oLlxobpzoLp2obp4o7x6p755p798p79/qMB7qsF9q8F+q8J/p7aBqLeBqLaCqLeDqbeFqrmEqrmFqbmGrbuHqrmIrryIsr+Nsb+Osb+Psb6QrMODrsSFscaHs8iJtcmLtsqLuMuMuMuNucuOs8CRs8GTtMGStcOTtsOUtsSUt8SVt8SWuMmQucqSu8uWucyQu8yTu86RvM2Svc+Svc6Uvs+Wu8mYu8mZu8mavMqZvMqavcqbvc2Yvs2Zv8+av82cv8ydv8+dvtCUvtCWv9CXwc6cwM6dwM+ewdGYwdGbwdCdwtCew9Kf////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAw2AWPQAAAQB0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zMECERxAAAAIySURBVFhHY/j/nxEImJhhgAUMWFnZoIAdDDg4ODhBgAsEuCGAhxcM+ECAHwQEBIFACASEgUBERBQExEBAXEJCUlIKBKTBQEZWVg4M5BWAQBEElEBAGQhUVFRBQE0dCDQ0NExMTEHADAzMzS0sLCwtHYHABQJc3YDAHQo8wMDLy8sbBHygwBcKQkJCQ0P//2cAe3jk+Dj0PwPYw8PXx8HhUclpaYnhwHgGx3Fo6PD2cXD8jL0nzh4/fPbQrOgR4WPfql2nN87rbGvtWHDqZP8IiGPftL1H57WWFBfkZGdXLDk32XfYp2r/lcfmlhUH2tpY29jaZi06WeU33PNxzcn5pUVORvp6evqGhvoBW1eHDXcfT9veUuBw/ryuri6Y6DqYOtx9PGtRsbMxyLdgD2vn7m8MH+a108wFQbYGoAgGeVhX225Tf9Qw9/Gs+c7W+qA0DfawttW6CTHAsms4t0BmLbI1hKRoIKGtZb9+Ytwwj+Mp2zL1wL4F+VpbK2/DhOHu4/Iz7aD0DM7H2lo63TsahruPfVdty9fW1gbmY21tLc3CLcuqh3s+9szYuzlfCww0NXMX7+xLjxrmJZePf+OeI81WmpqaWtZNS3dPrUke7vWxj09k3doDC3vb23sW7lszqTYteri3uXx8fKPSp8xevnz5ijnT62vSY4d9uxo4zuUbmVJZUwsENZWp4Bge3i0Q8MheWHRCclJSckJMROhIGPUB+9kvDAj8Rsg416iPQfkYAKr8dheNkAQPAAAAAElFTkSuQmCC + + + 2 + EXPLORERBAR_SPECIALGROUPEXPANDNOTHIGHLIGHT + 0 + iVBORw0KGgoAAAANSUhEUgAAAPEAAAAZCAMAAADXAjjUAAAABGdBTUEAALGPC/xhBQAAAwBQTFRFAAAAd4xAd4xBeIxBeI1CeY5CeY5Deo9Ee49Fe5BFfJBGfJFHfZFIfZJIfpJJf5NKf5RLgJRLgJRMgZVNgpZNgpZOg5ZPg5dQhJdQhJhQhJhRhZlShplThppTh5pUh5tViJtViJxWiZxXip1Yip5Yi55Zi55ajJ9ajJ9bgKFNgKJOgaNPgqNQgqRQgqRRg6VShaZUhadVhqdWh6hXjaBbjaBcjqFdj6Fej6Jej6JfiahYialaiqpbi6pcjKtcjaxcjaxfkKJfjaxgjq1hkKNgkaNhkaRhkqRik6Vjk6Vlk6ZklKZklKZllKZmladnlqdoka9hka9kka9llahllahmlqhnlqholqhpl6lqmKprmapsmattmqtum6xtm6xum61vm6xwnK1wna1xna1yna5xna5ynq5znq90n691krBikrBkkrBmk7BnlbFllbFmlrNnlLFpl7NolbJqlrNsmrVxm7ZxmrZyn7B2nrlzoK92oLB1obB3oLB4oLB5o7N7orN8pbN9pLR9oLlxobpzoLp2obp4o7x6p755p798p79/qMB7qsF9q8F+q8J/p7aBqLeBqLaCqLeDqbeFqrmEqrmFqbmGrbuHqrmIrryIsr+Nsb+Osb+Psb6QrMODrsSFscaHs8iJtcmLtsqLuMuMuMuNucuOs8CRs8GTtMGStcOTtsOUtsSUt8SVt8SWuMmQucqSu8uWucyQu8yTu86RvM2Svc+Svc6Uvs+Wu8mYu8mZu8mavMqZvMqavcqbvc2Yvs2Zv8+av82cv8ydv8+dvtCUvtCWv9CXwc6cwM6dwM+ewdGYwdGbwdCdwtCew9Kf////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAw2AWPQAAAQB0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zMECERxAAAAIySURBVFhHY/j/nxEImJhhgAUMWFnZoIAdDDg4ODhBgAsEuCGAhxcM+ECAHwQEBIFACASEgUBERBQExEBAXEJCUlIKBKTBQEZWVg4M5BWAQBEElEBAGQhUVFRBQE0dCDQ0NExMTEHADAzMzS0sLCwtHYHABQJc3YDAHQo8wMDLy8sbBHygwBcKQkJCQ0P//2cAe3jk+Dj0PwPYw8PXx8HhUclpaYnhwHgGx3Fo6PD2cXD8jL0nzh4/fPbQrOgR4WPfql2nN87rbGvtWHDqZP8IiGPftL1H57WWFBfkZGdXLDk32XfYp2r/lcfmlhUH2tpY29jaZi06WeU33PNxzcn5pUVORvp6evqGhvoBW1eHDXcfT9veUuBw/ryuri6Y6DqYOtx9PGtRsbMxyLdgD2vn7m8MH+a108wFQbYGoAgGeVhX225Tf9Qw9/Gs+c7W+qA0DfawttW6CTHAsms4t0BmLbI1hKRoIKGtZb9+Ytwwj+Mp2zL1wL4F+VpbK2/DhOHu4/Iz7aD0DM7H2lo63TsahruPfVdty9fW1gbmY21tLc3CLcuqh3s+9szYuzlfCww0NXMX7+xLjxrmJZePf+OeI81WmpqaWtZNS3dPrUke7vWxj09k3doDC3vb23sW7lszqTYteri3uXx8fKPSp8xevnz5ijnT62vSY4d9uxo4zuUbmVJZUwsENZWp4Bge3i0Q8MheWHRCclJSckJMROhIGPUB+9kvDAj8Rsg416iPQfkYAKr8dheNkAQPAAAAAElFTkSuQmCC + + + 2 + EXPLORERBAR_SPECIALGROUPHIGHLIGHT_FORECOLOR + 12117984 + + + + 2 + EXPLORERBAR_SPECIALGROUPNOTHIGHLIGHT_FORECOLOR + 16777215 + + + + 2 + FORM_BACKGROUND + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wUEDBcZ7J9LIgAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAADElEQVR4nGP49PEJAAWgAsh7AVMgAAAAAElFTkSuQmCC + + + 2 + OUTLOOKNAVBAR_BORDERCOLOR + 5800032 + + + + 2 + OVERFLOWPANELBUTTON_FOCUSEDNOTSELECTED + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAfCAIAAACpqzA1AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wQMDA8rXoeDpAAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAAOklEQVR4nG3MQQoAIBACQPGVHXtKD+0nu6tdggo6iTKIPhrsSVcQSkJB70TdfW/Kjz3eitcqid+3cgHSAEWFjrwrKgAAAABJRU5ErkJggg== + + + 2 + OVERFLOWPANELBUTTON_FOCUSEDSELECTED + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAfCAIAAACpqzA1AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wQMDBAXvLLxvQAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAAJElEQVR4nGNIaIhgeFHPwcTAzMLEyMyCSbMQJw5ns2BRi10cAH6cA8D3oziyAAAAAElFTkSuQmCC + + + 2 + OVERFLOWPANELBUTTON_NOTFOCUSEDSELECTED + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAfCAIAAACpqzA1AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wQMDA8Q74xqgAAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAAP0lEQVR4nF2Nuw3AMBBCEVOmzCgeIjNmiQPsxp8oFQg9AHe7UO/D7iKsoxHhYrcIi8jyU3PY3Yt+zNqcWfT9GLowSgtPge3CAAAAAElFTkSuQmCC + + + 2 + OVERFLOWPANEL_BACKGROUND + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAfCAIAAACpqzA1AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wQMDAoTC/LPfwAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAANUlEQVR4nGNIaIhgePXhPNO/f3+Z/v37x/Tv/z/87P//IPx//5j+/YfI/UdiI4sj1P7FxgYAbNZacIMSzGoAAAAASUVORK5CYII= + + + 2 + OVERFLOWPANEL_MENUBUTTON + 0 + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAADAFBMVEUAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABnduxjAAABAHRSTlP/AP//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////rTvmKwAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAAd0SU1FB9cEDA0CA99ePyQAAAAHdEVYdEF1dGhvcgCprsxIAAAADHRFWHREZXNjcmlwdGlvbgATCSEjAAAACnRFWHRDb3B5cmlnaHQArA/MOgAAAA50RVh0Q3JlYXRpb24gdGltZQA19w8JAAAACXRFWHRTb2Z0d2FyZQBdcP86AAAAC3RFWHREaXNjbGFpbWVyALfAtI8AAAAIdEVYdFdhcm5pbmcAwBvmhwAAAAd0RVh0U291cmNlAPX/g+sAAAAIdEVYdENvbW1lbnQA9syWvwAAAAZ0RVh0VGl0bGUAqO7SJwAAADBJREFUeJxjYEQDDFgFGBhACFkFkgiMgotgV4FpBkFriRBgAAE0d6DbwsCIzsApAAB3XADk8z+QVAAAAABJRU5ErkJggg== + + + 2 + PANELBUTTON_FOCUSEDNOTSELECTED + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAgCAIAAABch4VNAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wQMDBIRZ+c2CgAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAAOUlEQVR4nG2MuQ0AIBDDokxJySgMyib3hAbxic5WIqO2AqlTYUQ6kU7lZqRRi52I023+P3719vb0B9yzR4f1apQrAAAAAElFTkSuQmCC + + + 2 + PANELBUTTON_FOCUSEDSELECTED + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAgCAIAAABch4VNAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wQMDBMpVv6/1QAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAAKElEQVR4nGNIaIhgeFHPwcTAzMzEyMzCxMDMgoVmxiEOpVkIyOPWDwCLxAPCQavqVAAAAABJRU5ErkJggg== + + + 2 + PANELBUTTON_NOTFOCUSEDSELECTED + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAgCAIAAABch4VNAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wQMDBEq/cGM7QAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAAQUlEQVR4nFXMwQ3AIBSCYcKUPTqKQ3TGLgH4etBUe/tJvoDWL+i5WRERs2Ji+NuzTUSs4Z9BdPi5d3t5HX79bvMCzxtMDdsJQiIAAAAASUVORK5CYII= + + + 2 + PANELBUTTON_NOTSELECTED_FONTCOLOR + 0 + + + + 2 + PANELBUTTON_SELECTED_FONTCOLOR + 0 + + + + 2 + PANELVERTICAL_FOCUSED_BACKCOLOR + 10676223 + + + + 2 + PANELVERTICAL_FONTCOLOR + 0 + + + + 2 + PANELVERTICAL_NOTFOCUSED_BACKCOLOR + 15004146 + + + + 2 + PANEL_BACKGROUND + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAgCAIAAABch4VNAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wQMDBIhQT4GpgAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAAPUlEQVR4nGNIaIhgePXhPNO/f3+Z/v37x/Tv/z8oDeX/+8f0//8/iDxcDkpDxf7DxdDNgIj9h6tHMhciBgDd/V1yGdyjbwAAAABJRU5ErkJggg== + + + 2 + SHORTCUTMENU_DOWN_ENABLED + 0 + Qk02BQAAAAAAADYEAAAoAAAAEAAAABAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAoFAw/6BYMP+wWDD/sGBA/7BoQP/AaED/wHBQ/8B4UP/QeFD/4HhQ/+CAUP/giFD/8IhQ/9CIYP/wkGD//5Bg/+CQcP/gmHD/8Jhw//CgcP//oHD//6iA//+wgP//sJD//7iQ///AoP//////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaAhoaGhoaGhoaGhoaGhoaAgUBGhoaGhoaGhoaGhoaAgoJBQAaGhoaGhoaGhoaBxIUCwgFABoaGhoaGhoaExEQFQ4KAAMEGhoaGhoaGhoaDRYPDAMaGhoaGhoaGhoaGhAZFQ4EGhoaGhoaGhoaGhoRGRgXBhoaGhoaGhoaGhoaExEQDQ0aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho= + + + 2 + SHORTCUTMENU_DOWN_DISABLED + 0 + Qk02BQAAAAAAADYEAAAoAAAAEAAAABAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAT09P/1RUVP9WVlb/X19f/2RkZP9mZmb/b29v/3R0dP92dnb/d3d3/3x8fP+BgYH/g4OD/4SEhP+MjIz/jo6O/4+Pj/+UlJT/lpaW/5qamv+cnJz/paWl/6qqqv+vr6//tLS0/729vf//////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaAhoaGhoaGhoaGhoaGhoaAgUBGhoaGhoaGhoaGhoaAgoJBQAaGhoaGhoaGhoaBxIUCwgFABoaGhoaGhoaExEQFQ4KAAMEGhoaGhoaGhoaDRYPDAMaGhoaGhoaGhoaGhAZFQ4EGhoaGhoaGhoaGhoRGRgXBhoaGhoaGhoaGhoaExEQDQ0aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho= + + + 2 + SHORTCUTMENU_UP_ENABLED + 0 + Qk02BQAAAAAAADYEAAAoAAAAEAAAABAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAkEgg/6BIIP+gUCD/oFAw/6BYMP+wWDD/0Ggw/8BwQP/QcED/0HhA/9B4UP/QgFD/4IBQ/+CIYP/wkGD/8Jhg/+CYcP/woHD//6Bw//CogP//sJD//8Cg//////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgwDAAAAFhYWFhYWFhYWFhYMDQsHABYWFhYWFhYWFhYWDBMNCgEWFhYWFhYWFhYWFgwVDw0CFhYWFhYWFhYWEAgGFA8PBQIAFhYWFhYWFhYQFRQSDgkDFhYWFhYWFhYWFhEVFA0DFhYWFhYWFhYWFhYWERUEFhYWFhYWFhYWFhYWFhYQFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhY= + + + 2 + SHORTCUTMENU_UP_DISABLED + 0 + Qk02BQAAAAAAADYEAAAoAAAAEAAAABAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAARERE/0ZGRv9KSkr/T09P/1RUVP9WVlb/Y2Nj/2pqav9sbGz/cXFx/3Z2dv96enr/fHx8/4aGhv+MjIz/kZGR/5SUlP+ampr/nJyc/6SkpP+vr6//vb29//////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgwDAAAAFhYWFhYWFhYWFhYMDQsHABYWFhYWFhYWFhYWDBMNCgEWFhYWFhYWFhYWFgwVDw0CFhYWFhYWFhYWEAgGFA8PBQIAFhYWFhYWFhYQFRQSDgkDFhYWFhYWFhYWFhEVFA0DFhYWFhYWFhYWFhYWERUEFhYWFhYWFhYWFhYWFhYQFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhY= + + + 2 + SHRINKBUTTON_FOCUSEDNOTSHRUNK + 0 + iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAOwgAADsIBFShKgAAAAAd0SU1FB9cEEhECD3MSCbcAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4xMHKyJZIAAACzSURBVDhPrZGhDsIwFEUvf4rEIrBILAKLxCCxyAkQhBAECQQEgiAQCBKSdWt3YaRdxks39ZoccXp7VDvkhdA4dEdqgMLsqAGK95oawL0SagD3XFID2MeCbXw/9G+XHlrY+5xNlNEv9G+k1zvY24wxqsjv0mWD/DqlJEThXnq0yc8Txqhiv0uXDbLTmE2EOOzS6x2yw4htlHF9lx42mP2QGsBsB9QAZtOnBkhXPWqANOlSgw/RhutoURsdLwAAAABJRU5ErkJggg== + + + 2 + SHRINKBUTTON_FOCUSEDSHRUNK + 0 + iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAOwgAADsIBFShKgAAAAAd0SU1FB9cEEhECNbUe0AUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4xMHKyJZIAAACwSURBVDhPrdGvC8JQGIXh439qtBqsRqvBarQYrcYFDSJiEBQNBjEYFgRhd7+OTnbHPFzbN3jCuR9vWoe8EBYfiyMtoHQ7WkD5WtMCimdECyjiJS0gfyyoPj/x5013sMnvc6oq/Mb1TXewyW8zhjRxfdetDbLrlP/42N91tztk5wlDmqi+69YG6WlM5SP/rjvYpIcRVRW233QHG7cf0gLcdkALcJs+LSBZ9WgBSdSlhTcMputoJnzNZQAAAABJRU5ErkJggg== + + + 2 + SHRINKBUTTON_NOTFOCUSEDNOTSHRUNK + 0 + iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAOwgAADsIBFShKgAAAAAd0SU1FB9cEEhEdHtT4J9sAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4xMHKyJZIAAACuSURBVDhPrYtRBwJhEEVv/y8SkYhEJEqlWEVEKa2UUoplWUpERPT3bu3D8Bnf7tMM5+HOcQr374SwuOQT0ALE7zEtQPQa0gJcnn1agNOjSwtwuHWYB//ner3FYZe0mUUapSdeb7dDGLfoQyJxeusG66hJjUTy19vXYHlt0IfE4vTWDebnOrOQWLzebofZscY80tj1eovDdF+lBQi2FVqA0aZMCzBYlWgBeosiLfgBWhcmOowY+vkAAAAASUVORK5CYII= + + + 2 + SHRINKBUTTON_NOTFOCUSEDSHRUNK + 0 + iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAOwgAADsIBFShKgAAAAAd0SU1FB9cEEhEgFrDL51cAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4xMHKyJZIAAACuSURBVDhPrctRBwJhEIXh0/+LRCQiEYlSKVYRUUpJKaVYlqVERES/bjnZi2Eb0918PBdnPm/u9hkRHi9+B/SA6DWkB4TPPj3g/OjSA473Nj1gf21RY5L83PS2GmzjJrU0TMldb6vBOmrQIrH86a0bLMM6/5FY/vXOdphfarRIJH966wbTU5WaRHLX22owOVSopWH2prfVYLwr0wOCTYkeMFgV6QG9RYEe0Jnl6eELchAlqnlOrx0AAAAASUVORK5CYII= + + + 2 + SIGNS_MINUS + 0 + iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjIwWZ92UQAAAI5JREFUKFNjfP76/f+dRy8ygMEPCAUCH6B8a0NxBoYFGw78xwA//v//8OH//wdAwsAj4T+mIriC//8PXHgAVbQCySQkBQ9efPi/4QCaIpCx6BiuaALIJJAJQPwA5A4gceHGB6BVH/4v2HEBYh1IEYYCbIpAJoAcueEEEAPdATIBhsEmnb54HcMtyG4DyQMAS+rq4jk+qVQAAAAASUVORK5CYII= + + + 2 + SIGNS_PLUS + 0 + iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjIwWZ92UQAAAJZJREFUKFNjfP76/f+dRy8ygMEPCAUCH6B8a0NxBoYFGw78xwA//v//8OH//wdAwsAj4T+GIpAgRMH//wcuPIAqWoFkEtAEkCKQggcvPvzfcABNEUgSHcMVTQCZBHIDEINMACm8cOMD0KoP/xfsuACxDqQIpuABUBVI8AA2RTBHbjjxAOwOkAkwDDbp9MXrGG5BdhtIHgAc3OMlaQBkAQAAAABJRU5ErkJggg== + + + 2 + SPLITTER_BACKGROUND + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAICAIAAAC3eAIWAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wQMDBU0Y6J0igAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAAKUlEQVR4nAXBsRHAIAADMd8PQAujpcwoLI2fEin//lhj0iNWWrEXK0ke9fAP9oJRV0wAAAAASUVORK5CYII= + + + 2 + SPLITTER_GRIPPER + 0 + iVBORw0KGgoAAAANSUhEUgAAACMAAAAICAIAAAD80NH7AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wQMDBYH919GXwAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAAXElEQVR4nGNMaIhgoAtgkeATp49NjBpG7gwMDG6B8gwMDLvWP6Qdm4mBgcHSKbC7bOr3b99pymYytuWd0ZrMwMDw7dt3mrIZg1J9aBxBUMAC8SAdABN9rGFgYAAAZgp0VLIWmJEAAAAASUVORK5CYII= + + + 2 + TITLE_BACKGROUND + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAaCAIAAAD5ZqGGAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAKTWlDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVN3WJP3Fj7f92UPVkLY8LGXbIEAIiOsCMgQWaIQkgBhhBASQMWFiApWFBURnEhVxILVCkidiOKgKLhnQYqIWotVXDjuH9yntX167+3t+9f7vOec5/zOec8PgBESJpHmomoAOVKFPDrYH49PSMTJvYACFUjgBCAQ5svCZwXFAADwA3l4fnSwP/wBr28AAgBw1S4kEsfh/4O6UCZXACCRAOAiEucLAZBSAMguVMgUAMgYALBTs2QKAJQAAGx5fEIiAKoNAOz0ST4FANipk9wXANiiHKkIAI0BAJkoRyQCQLsAYFWBUiwCwMIAoKxAIi4EwK4BgFm2MkcCgL0FAHaOWJAPQGAAgJlCLMwAIDgCAEMeE80DIEwDoDDSv+CpX3CFuEgBAMDLlc2XS9IzFLiV0Bp38vDg4iHiwmyxQmEXKRBmCeQinJebIxNI5wNMzgwAABr50cH+OD+Q5+bk4eZm52zv9MWi/mvwbyI+IfHf/ryMAgQAEE7P79pf5eXWA3DHAbB1v2upWwDaVgBo3/ldM9sJoFoK0Hr5i3k4/EAenqFQyDwdHAoLC+0lYqG9MOOLPv8z4W/gi372/EAe/tt68ABxmkCZrcCjg/1xYW52rlKO58sEQjFu9+cj/seFf/2OKdHiNLFcLBWK8ViJuFAiTcd5uVKRRCHJleIS6X8y8R+W/QmTdw0ArIZPwE62B7XLbMB+7gECiw5Y0nYAQH7zLYwaC5EAEGc0Mnn3AACTv/mPQCsBAM2XpOMAALzoGFyolBdMxggAAESggSqwQQcMwRSswA6cwR28wBcCYQZEQAwkwDwQQgbkgBwKoRiWQRlUwDrYBLWwAxqgEZrhELTBMTgN5+ASXIHrcBcGYBiewhi8hgkEQcgIE2EhOogRYo7YIs4IF5mOBCJhSDSSgKQg6YgUUSLFyHKkAqlCapFdSCPyLXIUOY1cQPqQ28ggMor8irxHMZSBslED1AJ1QLmoHxqKxqBz0XQ0D12AlqJr0Rq0Hj2AtqKn0UvodXQAfYqOY4DRMQ5mjNlhXIyHRWCJWBomxxZj5Vg1Vo81Yx1YN3YVG8CeYe8IJAKLgBPsCF6EEMJsgpCQR1hMWEOoJewjtBK6CFcJg4Qxwicik6hPtCV6EvnEeGI6sZBYRqwm7iEeIZ4lXicOE1+TSCQOyZLkTgohJZAySQtJa0jbSC2kU6Q+0hBpnEwm65Btyd7kCLKArCCXkbeQD5BPkvvJw+S3FDrFiOJMCaIkUqSUEko1ZT/lBKWfMkKZoKpRzame1AiqiDqfWkltoHZQL1OHqRM0dZolzZsWQ8ukLaPV0JppZ2n3aC/pdLoJ3YMeRZfQl9Jr6Afp5+mD9HcMDYYNg8dIYigZaxl7GacYtxkvmUymBdOXmchUMNcyG5lnmA+Yb1VYKvYqfBWRyhKVOpVWlX6V56pUVXNVP9V5qgtUq1UPq15WfaZGVbNQ46kJ1Bar1akdVbupNq7OUndSj1DPUV+jvl/9gvpjDbKGhUaghkijVGO3xhmNIRbGMmXxWELWclYD6yxrmE1iW7L57Ex2Bfsbdi97TFNDc6pmrGaRZp3mcc0BDsax4PA52ZxKziHODc57LQMtPy2x1mqtZq1+rTfaetq+2mLtcu0W7eva73VwnUCdLJ31Om0693UJuja6UbqFutt1z+o+02PreekJ9cr1Dund0Uf1bfSj9Rfq79bv0R83MDQINpAZbDE4Y/DMkGPoa5hpuNHwhOGoEctoupHEaKPRSaMnuCbuh2fjNXgXPmasbxxirDTeZdxrPGFiaTLbpMSkxeS+Kc2Ua5pmutG003TMzMgs3KzYrMnsjjnVnGueYb7ZvNv8jYWlRZzFSos2i8eW2pZ8ywWWTZb3rJhWPlZ5VvVW16xJ1lzrLOtt1ldsUBtXmwybOpvLtqitm63Edptt3xTiFI8p0in1U27aMez87ArsmuwG7Tn2YfYl9m32zx3MHBId1jt0O3xydHXMdmxwvOuk4TTDqcSpw+lXZxtnoXOd8zUXpkuQyxKXdpcXU22niqdun3rLleUa7rrStdP1o5u7m9yt2W3U3cw9xX2r+00umxvJXcM970H08PdY4nHM452nm6fC85DnL152Xlle+70eT7OcJp7WMG3I28Rb4L3Le2A6Pj1l+s7pAz7GPgKfep+Hvqa+It89viN+1n6Zfgf8nvs7+sv9j/i/4XnyFvFOBWABwQHlAb2BGoGzA2sDHwSZBKUHNQWNBbsGLww+FUIMCQ1ZH3KTb8AX8hv5YzPcZyya0RXKCJ0VWhv6MMwmTB7WEY6GzwjfEH5vpvlM6cy2CIjgR2yIuB9pGZkX+X0UKSoyqi7qUbRTdHF09yzWrORZ+2e9jvGPqYy5O9tqtnJ2Z6xqbFJsY+ybuIC4qriBeIf4RfGXEnQTJAntieTE2MQ9ieNzAudsmjOc5JpUlnRjruXcorkX5unOy553PFk1WZB8OIWYEpeyP+WDIEJQLxhP5aduTR0T8oSbhU9FvqKNolGxt7hKPJLmnVaV9jjdO31D+miGT0Z1xjMJT1IreZEZkrkj801WRNberM/ZcdktOZSclJyjUg1plrQr1zC3KLdPZisrkw3keeZtyhuTh8r35CP5c/PbFWyFTNGjtFKuUA4WTC+oK3hbGFt4uEi9SFrUM99m/ur5IwuCFny9kLBQuLCz2Lh4WfHgIr9FuxYji1MXdy4xXVK6ZHhp8NJ9y2jLspb9UOJYUlXyannc8o5Sg9KlpUMrglc0lamUycturvRauWMVYZVkVe9ql9VbVn8qF5VfrHCsqK74sEa45uJXTl/VfPV5bdra3kq3yu3rSOuk626s91m/r0q9akHV0IbwDa0b8Y3lG19tSt50oXpq9Y7NtM3KzQM1YTXtW8y2rNvyoTaj9nqdf13LVv2tq7e+2Sba1r/dd3vzDoMdFTve75TsvLUreFdrvUV99W7S7oLdjxpiG7q/5n7duEd3T8Wej3ulewf2Re/ranRvbNyvv7+yCW1SNo0eSDpw5ZuAb9qb7Zp3tXBaKg7CQeXBJ9+mfHvjUOihzsPcw83fmX+39QjrSHkr0jq/dawto22gPaG97+iMo50dXh1Hvrf/fu8x42N1xzWPV56gnSg98fnkgpPjp2Snnp1OPz3Umdx590z8mWtdUV29Z0PPnj8XdO5Mt1/3yfPe549d8Lxw9CL3Ytslt0utPa49R35w/eFIr1tv62X3y+1XPK509E3rO9Hv03/6asDVc9f41y5dn3m978bsG7duJt0cuCW69fh29u0XdwruTNxdeo94r/y+2v3qB/oP6n+0/rFlwG3g+GDAYM/DWQ/vDgmHnv6U/9OH4dJHzEfVI0YjjY+dHx8bDRq98mTOk+GnsqcTz8p+Vv9563Or59/94vtLz1j82PAL+YvPv655qfNy76uprzrHI8cfvM55PfGm/K3O233vuO+638e9H5ko/ED+UPPR+mPHp9BP9z7nfP78L/eE8/sl0p8zAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAALklEQVR42mJYf6CJiYGBgenPn79Mf/9C8J+//7Cy//79x/QHBxuiFjubgYEBMAAif0ZUx34SxQAAAABJRU5ErkJggg== + + + 2 + TITLE_BACKGROUND_LEFT + 1 + + + + 2 + TITLE_BACKGROUND_WIDTH + 198 + + + + 2 + TITLE_BORDERCOLOR + 5800032 + + + + 2 + TITLE_FONTCOLOR + 16777215 + + + + 2 + TOOLTITLE_BACKGROUND + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAATCAIAAADeafBOAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAFVJREFUGFcdw78KQEAAwOHf+7+IMiiDMhiUQRkMynA4HY5znL9PoHz1IYTH++j/fSmus+NwArfXbLbCriXGFCxzjtYZ05gyDAlKxfR9hJQhbRvQNP4HafUw0EBUTAcAAAAASUVORK5CYII= + + + 2 + TOOLTITLE_FONTCOLOR + 0 + + + + 2 + ZOOMNAVBAR_BAR + 0 + Qk3+BAAAAAAAADYEAAAoAAAAAQAAADIAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAARHpj/0V7Zf9GfWb/SH5o/0mAaf9KgWv/S4Js/0yEbv9OhW//T4dx/1CIcv9SiXT/U4t1/1SMd/9Vjnj/Vo96/1iRfP9Zkn3/WpN+/1yVgP9dloH/XpeD/1+Zhf9gmob/YpyH/2Odif90qJf/m8G0/6DEuf+kyLz/qcvA/67OxP+z0cj/t9TL/7zYz//A2tL/xd3W/8ng2f/O49z/0eXf/9Xo4v/Z6uX/3ezo/+Hu6v/k8e3/5/Lv/+r08f/t9vP/8Pf1//L49/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAABAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAATAAAAFAAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAfAAAAIAAAACEAAAAiAAAAIwAAACQAAAAlAAAAJgAAACcAAAAoAAAAKQAAACoAAAArAAAALAAAAC0AAAAuAAAALwAAADAAAAAxAAAA + + + 2 + ZOOMNAVBAR_REFLECTEDSEPARATOR + 0 + iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABGdBTUEAALGPC/xhBQAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjIwWZ92UQAAAD9JREFUaEPt0IEAAAAAw6D5Ux/khVBhwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwMDLwAAkMAABCDVySwAAAABJRU5ErkJggg== + + + 2 + ZOOMNAVBAR_SEPARATOR + 0 + iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABGdBTUEAALGPC/xhBQAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjIwWZ92UQAAAD9JREFUaEPt0IEAAAAAw6D5Ux/khVBhwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwMDLwAAkMAABCDVySwAAAABJRU5ErkJggg== + + + 2 + ZOOMNAVBAR_STACKBUTTON + 0 + iVBORw0KGgoAAAANSUhEUgAAAMAAAAAcCAYAAAA3ILBTAAABF0lEQVR4nO3cMW7CQBRF0WuU1kUovAHatNn/CuiyCyJKOnAKG8YQg02BjP6/R0LC43kSxTw0jGRASqy6uW6A9ci4FMEJ2AH788BwoX8Dm8FYy/0izLln3vyS+UfXP/2LVT/YcL34pagq4AuooRTAbY8yqYBPKAVw8SubCkoBpJQ+Bu/bkftjY8/cM29+yfzk3GEBbrdBS/+KN2/+FadAV9wCKTULoNQsgFKzAErNAig1j0HNR85PzvUY1HzU/Jy5boGUmwVQahZAqVkApWYBlJrHoOYj5yfnegxqPmp+ztzLFuh0b4IUVAulALvzgJTAEfiFUoA93d9EWAJFdwS2wAH+741quqflfUheEbV03/yHpT+I9Bb+AD0fBdMuQEabAAAAAElFTkSuQmCC + + + 3 + BUTTON_FOCUSED_FONTCOLOR + 0 + + + + 3 + BUTTON_LEFT_FOCUSED + 0 + Qk22BAAAAAAAADYEAAAoAAAAAgAAACAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAlHx8/1/C9/9kxPf/aMb4/23I+P9xyvj/ds34/3rP+f9+0fn/g9P5/4fV+f+M1/r/kNr6/5Xc+v+Z3vr/neD7/6Li+/+m5Pv/q+f8/6/p/P+06/z/uO38/7zv/f/B8f3/xfT9/8r2/f/O+P7/0/r+/9f8/v//////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/x0AAAAAAAAAAAEAAAACAAAAAwAAAAQAAAAFAAAABgAAAAcAAAAIAAAACQAAAAoAAAALAAAADAAAAA0AAAAOAAAADwAAABAAAAARAAAAEgAAABMAAAAUAAAAFQAAABYAAAAXAAAAGAAAABkAAAAaAAAAGwAAABwAAAAAAAAdAAAA + + + 3 + BUTTON_LEFT_HOTTRACKING + 0 + Qk22BAAAAAAAADYEAAAoAAAAAgAAACAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAv7Sy/+vo5///////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wIAAAAAAAAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAAAACAAAA + + + 3 + BUTTON_LEFT_NOTFOCUSED + 0 + Qk22BAAAAAAAADYEAAAoAAAAAgAAACAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAlHx8/7SWmP+2mZr/uJud/7qen/+8oaL/vqOl/8Cmp//Cqar/xKus/8aur//IsbL/yrS0/8y2t//Oubn/0Ly8/9K+v//UwcH/1sTE/9jGxv/aycn/3MzM/97Pzv/g0dH/4tTT/+TX1v/m2dn/6Nzb/+rf3v//////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/x0AAAAAAAAAAAEAAAACAAAAAwAAAAQAAAAFAAAABgAAAAcAAAAIAAAACQAAAAoAAAALAAAADAAAAA0AAAAOAAAADwAAABAAAAARAAAAEgAAABMAAAAUAAAAFQAAABYAAAAXAAAAGAAAABkAAAAaAAAAGwAAABwAAAAAAAAdAAAA + + + 3 + BUTTON_MIDDLE_FOCUSED + 0 + Qk22BAAAAAAAADYEAAAoAAAAAQAAACAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAlHx8/1vA9/9fwvf/ZMT3/2jG+P9tyPj/ccr4/3bN+P96z/n/ftH5/4PT+f+H1fn/jNf6/5Da+v+V3Pr/md76/53g+/+i4vv/puT7/6vn/P+v6fz/tOv8/7jt/P+87/3/wfH9/8X0/f/K9v3/zvj+/9P6/v/X/P7/3P///wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAABAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAATAAAAFAAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAAAAAA + + + 3 + BUTTON_MIDDLE_HOTTRACKING + 0 + Qk22BAAAAAAAADYEAAAoAAAAAQAAACAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAv7Sy/+vo5/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAAAAA + + + 3 + BUTTON_MIDDLE_NOTFOCUSED + 0 + Qk22BAAAAAAAADYEAAAoAAAAAQAAACAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAlHx8/7KTlf+0lpj/tpma/7ibnf+6np//vKGi/76jpf/Apqf/wqmq/8SrrP/Grq//yLGy/8q0tP/Mtrf/zrm5/9C8vP/Svr//1MHB/9bExP/Yxsb/2snJ/9zMzP/ez87/4NHR/+LU0//k19b/5tnZ/+jc2//q397/7OLh/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAABAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAATAAAAFAAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAAAAAA + + + 3 + BUTTON_NOTFOCUSED_FONTCOLOR + 0 + + + + 3 + BUTTON_RIGHT_FOCUSED + 0 + Qk22BAAAAAAAADYEAAAoAAAAAgAAACAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAlHx8/1/C9/9kxPf/aMb4/23I+P9xyvj/ds34/3rP+f9+0fn/g9P5/4fV+f+M1/r/kNr6/5Xc+v+Z3vr/neD7/6Li+/+m5Pv/q+f8/6/p/P+06/z/uO38/7zv/f/B8f3/xfT9/8r2/f/O+P7/0/r+/9f8/v//////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAdAAAAAAAAAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAAEwAAABQAAAAVAAAAFgAAABcAAAAYAAAAGQAAABoAAAAbAAAAHAAAAAAAAAAAHQAA + + + 3 + BUTTON_RIGHT_HOTTRACKING + 0 + Qk22BAAAAAAAADYEAAAoAAAAAgAAACAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAv7Sy/+vo5///////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wACAAAAAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAAAAAAAAgAA + + + 3 + BUTTON_RIGHT_NOTFOCUSED + 0 + Qk22BAAAAAAAADYEAAAoAAAAAgAAACAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAlHx8/7SWmP+2mZr/uJud/7qen/+8oaL/vqOl/8Cmp//Cqar/xKus/8aur//IsbL/yrS0/8y2t//Oubn/0Ly8/9K+v//UwcH/1sTE/9jGxv/aycn/3MzM/97Pzv/g0dH/4tTT/+TX1v/m2dn/6Nzb/+rf3v//////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAdAAAAAAAAAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAAEwAAABQAAAAVAAAAFgAAABcAAAAYAAAAGQAAABoAAAAbAAAAHAAAAAAAAAAAHQAA + + + 3 + CONTAINER_BORDERCOLOR + 9731196 + + + + 3 + EXPLORERBAR_BACKGROUND + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAHXCAMAAABK28A9AAAABGdBTUEAALGPC/xhBQAAAwBQTFRFsbPIsbTIsrTJs7bJtLbJtLbKtbjKtrjLt7rMuLrMuLvNubzNur3Our7OvL/OvL/PvMDPvcHQvsLQv8LRwMPRwMTRwcTSwsbSwsbTxMjUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0zvvUAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjMwQIRHEAAAAFBJREFUOE+twUUOgDAUQMGHe3G7/0VZkC4IDb/CDCfHr3f0jfArpgvvM/IJ6Yj9AZc9UoWi89hi2hC+Rq9wWfK94N85ekb4lHvyGOM3Qoq9C9iUFnRgCsLVAAAAAElFTkSuQmCC + + + 3 + EXPLORERBAR_BORDERCOLOR + 16777215 + + + + 3 + EXPLORERBAR_NORMALGROUPBACKGROUND + 0 + iVBORw0KGgoAAAANSUhEUgAAANoAAAABCAMAAACPOkAFAAAABGdBTUEAALGPC/xhBQAAAwBQTFRF8PH1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK7YgZQAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjMwQIRHEAAAAAxJREFUGFdjYBi2AAAA2wABbb4xPgAAAABJRU5ErkJggg== + + + 3 + EXPLORERBAR_NORMALGROUPCOLLAPSEHIGHLIGHT + 0 + iVBORw0KGgoAAAANSUhEUgAAAPEAAAAZCAMAAADXAjjUAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAwBQTFRFAAAAfnx8urvJu7zKvL3KvL3Lvb7Lvr/Mv7/Nv8DMv8HNwMHOwMLOwMLPwsTPwsPQwsTQw8XRxMXRxMbQxMbRxcbSxsfTx8fUx8jTyMjUycrVysvWy8zVy8zWy8zXzMzYzc7Yzc7Zz9DZz9Da0NDa0NHb0dPb09Td1NXe1dbf19jf1tfg1tjg19jh19ji2Njg2Njh2Nni2drh2dri2drj29vk2tzj29zk3Nzk3N3l3d7l3t7m3+Dn4ODn4OHo4eLo4eLp4+Pq4+Tq5OTq5OXr5ebr5ebs5+ft5+jt6Ojt6Oju6Oru6erv6+vw6uzw7Ozw7Ozx7e7x7e7y7u/z7/Dz8PDz8PD08fL18/P28/T29PT29PT39fb49vf59/j5+Pj5+Pj6+fn7+fr7+vv8/Pz8/Pz9/f3+/v7+/v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPbNbewAAAQB0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zMECERxAAAAIISURBVFhH5ZhtV9MwGIaHL6CiTnSoDHWbb7UkpYkpNBvqgDHcHFuxTqZuDFgt4///gZon6fQPRE8s19nZ9+vcuZ8mTy5JLhRTxbkg/sPPKGUiOTs7VZycjI+BkWKY8uP7N8FAcST52u9/EYTA50MgCHq9brd7IOl0PgHtVqv1cV/RbO4JGo3G7u7OzrakXq9/AN6/A7ZSaoKqgHPuA94MBlCACJwUjBBKktxM2ATjVPlvGqMklyac0YzXCWOex1TIkDFCRhnrznjdq6JXT0ulksWpmca6e7xB7q3W2mFQr1yp+JchYx/d4MeytXH7/pKPDDzVmjP2b9fi2ZgaLK8wO+s95iUrAuE5aX14Ha+ZZ6w341ohkMJzoDyNrRUqQ87wrObFiRSG38U0auZZ1jPmL5Sw/IujXt6VoyvLGVfU2JI9jifBA+zAsTbKWG+P+WM1uNShHnfurplnrPfOVV0Mf/c4ngy38q55xpozXrbPp2mPo1H4rGCgsd6MCb7WEE9d8fKNTodHbP6lgcZ6Myb+6sL2GBgN+pu3HtoEGze59GZMqffoKuqJzUS4b90sWA7J+veYOoyV5xeL5XLxzsKTN5i4Wb9zUep4nv26LHhu2ZjRzN+rxZZLpEyIizF2HEqxga9F3T0WyoS9hS0foQ4yceujd1bLXSbGLuwyRbyXYQfyHxj/k4x/AdeUG15/yUyrAAAAAElFTkSuQmCC + + + 3 + EXPLORERBAR_NORMALGROUPCOLLAPSENOTHIGHLIGHT + 0 + iVBORw0KGgoAAAANSUhEUgAAAPEAAAAZCAMAAADXAjjUAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAwBQTFRFAAAAMURzurvJu7zKvL3KvL3Lvb7Lvr/Mv7/Nv8DMv8HNwMHOwMLOwMLPwsTPwsPQwsTQw8XRxMXRxMbQxMbRxcbSxsfTx8fUx8jTyMjUycrVysvWy8zVy8zWy8zXzMzYzc7Yzc7Zz9DZz9Da0NDa0NHb0dPb09Td1NXe1dbf19jf1tfg1tjg19jh19ji2Njg2Njh2Nni2drh2dri2drj29vk2tzj29zk3Nzk3N3l3d7l3t7m3+Dn4ODn4OHo4eLo4eLp4+Pq4+Tq5OTq5OXr5ebr5ebs5+ft5+jt6Ojt6Oju6Oru6erv6+vw6uzw7Ozw7Ozx7e7x7e7y7u/z7/Dz8PDz8PD08fL18/P28/T29PT29PT39fb49vf59/j5+Pj5+Pj6+fn7+fr7+vv8/Pz8/Pz9/f3+/v7+/v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7sVWhwAAAQB0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zMECERxAAAAIISURBVFhH5ZhtV9MwGIaHL6CiTnSoDHWbb7UkpYkpNBvqgDHcHFuxTqZuDFgt4///gZon6fQPRE8s19nZ9+vcuZ8mTy5JLhRTxbkg/sPPKGUiOTs7VZycjI+BkWKY8uP7N8FAcST52u9/EYTA50MgCHq9brd7IOl0PgHtVqv1cV/RbO4JGo3G7u7OzrakXq9/AN6/A7ZSaoKqgHPuA94MBlCACJwUjBBKktxM2ATjVPlvGqMklyac0YzXCWOex1TIkDFCRhnrznjdq6JXT0ulksWpmca6e7xB7q3W2mFQr1yp+JchYx/d4MeytXH7/pKPDDzVmjP2b9fi2ZgaLK8wO+s95iUrAuE5aX14Ha+ZZ6w341ohkMJzoDyNrRUqQ87wrObFiRSG38U0auZZ1jPmL5Sw/IujXt6VoyvLGVfU2JI9jifBA+zAsTbKWG+P+WM1uNShHnfurplnrPfOVV0Mf/c4ngy38q55xpozXrbPp2mPo1H4rGCgsd6MCb7WEE9d8fKNTodHbP6lgcZ6Myb+6sL2GBgN+pu3HtoEGze59GZMqffoKuqJzUS4b90sWA7J+veYOoyV5xeL5XLxzsKTN5i4Wb9zUep4nv26LHhu2ZjRzN+rxZZLpEyIizF2HEqxga9F3T0WyoS9hS0foQ4yceujd1bLXSbGLuwyRbyXYQfyHxj/k4x/AdeUG15/yUyrAAAAAElFTkSuQmCC + + + 3 + EXPLORERBAR_NORMALGROUPEXPANDHIGHLIGHT + 0 + iVBORw0KGgoAAAANSUhEUgAAAPEAAAAZCAMAAADXAjjUAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAwBQTFRFAAAAfnx8urvJu7zKvL3KvL3Lvb7Lvr/Mv7/Nv8DMv8HNwMHOwMLOwMLPwsTPwsPQwsTQw8XRxMXRxMbQxMbRxcbSxsfTx8fUx8jTyMjUycrVysvWy8zVy8zWy8zXzMzYzc7Yzc7Zz9DZz9Da0NDa0NHb0dPb09Td1NXe1dbf19jf1tfg1tjg19jh19ji2Njg2Njh2Nni2drh2dri2drj29vk2tzj29zk3Nzk3N3l3d7l3t7m3+Dn4ODn4OHo4eLo4eLp4+Pq4+Tq5OTq5OXr5ebr5ebs5+ft5+jt6Ojt6Oju6Oru6erv6+vw6uzw7Ozw7Ozx7e7x7e7y7u/z7/Dz8PDz8PD08fL18/P28/T29PT29PT39fb49vf59/j5+Pj5+Pj6+fn7+fr7+vv8/Pz8/Pz9/f3+/v7+/v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPbNbewAAAQB0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zMECERxAAAAIMSURBVFhH5Zhre9IwGIbBw6ZOxQNTx1TAU+2SrompNjCVbcgEETorDhXGNmrW/v8/UHMo8w9Er9jdH/r9ue48b5O3kKaJIlacctgffkUZc8nJybHi6Gh2KJgqJhk/f3znjBUHkm+j0VdOKPiyLwiC4XAwGHyW9PufBL1ut/txT9HpfOC02+3d3Z2dbUmr1XovePdWsJXR5DQ4lFJf4C0gAixAHCcDAgDStLAIbELiLPLfTAzSQmY4p443ESGeR5Rk4RgAoxLrdrzpNcDzR9Vq1aLYzMS6e/wa3Vpv9sKgVb9Q98+DYx9coYeytax357YPDDzVmh3715tsMabGq2vEznuPadWKzuZysn8ZbpiXWK/jZjlIkmKRh+afmFlrWErO8aymlblKK1LHUadE8u6YPpVnuig1s2hYcuXoyrPjumqxCJyweXAXOuJYG5VYb4/pAz64sh7H0ax/c8O8xHrvXI2V8KzHbD7ZKrnmJdbseNU+jWPZYxZNw8dlAxPrdYzgpTZ/6rIii44nB2TpmYGJ9TpG/vry9kwwHY/eXLtnI2jc5NLrGGPv/kUw5JuJcM+6WrYclPf/MXYIqS2tVGq1yo3lhy8hcvN+58LY8Tz7RY3zxLIhwbm/V/MtF7eMkAshdByMoYGvRd095pEReSW2fAg7wMStj95ZLXeZELpil8n1nocdyH+Q+J84/g1Q1xtdBFkjRwAAAABJRU5ErkJggg== + + + 3 + EXPLORERBAR_NORMALGROUPEXPANDNOTHIGHLIGHT + 0 + iVBORw0KGgoAAAANSUhEUgAAAPEAAAAZCAMAAADXAjjUAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAwBQTFRFAAAAMURzurvJu7zKvL3KvL3Lvb7Lvr/Mv7/Nv8DMv8HNwMHOwMLOwMLPwsTPwsPQwsTQw8XRxMXRxMbQxMbRxcbSxsfTx8fUx8jTyMjUycrVysvWy8zVy8zWy8zXzMzYzc7Yzc7Zz9DZz9Da0NDa0NHb0dPb09Td1NXe1dbf19jf1tfg1tjg19jh19ji2Njg2Njh2Nni2drh2dri2drj29vk2tzj29zk3Nzk3N3l3d7l3t7m3+Dn4ODn4OHo4eLo4eLp4+Pq4+Tq5OTq5OXr5ebr5ebs5+ft5+jt6Ojt6Oju6Oru6erv6+vw6uzw7Ozw7Ozx7e7x7e7y7u/z7/Dz8PDz8PD08fL18/P28/T29PT29PT39fb49vf59/j5+Pj5+Pj6+fn7+fr7+vv8/Pz8/Pz9/f3+/v7+/v7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7sVWhwAAAQB0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zMECERxAAAAIMSURBVFhH5Zhre9IwGIbBw6ZOxQNTx1TAU+2SrompNjCVbcgEETorDhXGNmrW/v8/UHMo8w9Er9jdH/r9ue48b5O3kKaJIlacctgffkUZc8nJybHi6Gh2KJgqJhk/f3znjBUHkm+j0VdOKPiyLwiC4XAwGHyW9PufBL1ut/txT9HpfOC02+3d3Z2dbUmr1XovePdWsJXR5DQ4lFJf4C0gAixAHCcDAgDStLAIbELiLPLfTAzSQmY4p443ESGeR5Rk4RgAoxLrdrzpNcDzR9Vq1aLYzMS6e/wa3Vpv9sKgVb9Q98+DYx9coYeytax357YPDDzVmh3715tsMabGq2vEznuPadWKzuZysn8ZbpiXWK/jZjlIkmKRh+afmFlrWErO8aymlblKK1LHUadE8u6YPpVnuig1s2hYcuXoyrPjumqxCJyweXAXOuJYG5VYb4/pAz64sh7H0ax/c8O8xHrvXI2V8KzHbD7ZKrnmJdbseNU+jWPZYxZNw8dlAxPrdYzgpTZ/6rIii44nB2TpmYGJ9TpG/vry9kwwHY/eXLtnI2jc5NLrGGPv/kUw5JuJcM+6WrYclPf/MXYIqS2tVGq1yo3lhy8hcvN+58LY8Tz7RY3zxLIhwbm/V/MtF7eMkAshdByMoYGvRd095pEReSW2fAg7wMStj95ZLXeZELpil8n1nocdyH+Q+J84/g1Q1xtdBFkjRwAAAABJRU5ErkJggg== + + + 3 + EXPLORERBAR_NORMALGROUPHIGHLIGHT_FORECOLOR + 8158334 + + + + 3 + EXPLORERBAR_NORMALGROUPNOTHIGHLIGHT_FORECOLOR + 4013375 + + + + 3 + EXPLORERBAR_SPECIALGROUPBACKGROUND + 0 + iVBORw0KGgoAAAANSUhEUgAAANoAAAABCAMAAACPOkAFAAAABGdBTUEAALGPC/xhBQAAAwBQTFRF8PH1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK7YgZQAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjMwQIRHEAAAAAxJREFUGFdjYBi2AAAA2wABbb4xPgAAAABJRU5ErkJggg== + + + 3 + EXPLORERBAR_SPECIALGROUPCOLLAPSEHIGHLIGHT + 0 + iVBORw0KGgoAAAANSUhEUgAAAPEAAAAZCAMAAADXAjjUAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAwBQTFRFAAAAa3OUbHOVbnSWb3WXd3eScHiZcnqbdHucdXuddXyddn6feHiSeHiTeXmUenqUenqVe3uWfHyWfH2Xfn6Yf3+Zd3+gf4CZeICgeIChe4GifIOkfYWlgICagYGbgYKbgoOcg4SdhISdhIWehYaehYafgYenh4egh4iggoiog4mphIysho6tiIigiImhiYqiiouji4ykjIykjI2ljY6ljo6miI6uiY+wj5CniZCwipGxipOxjpWzjJS0kJCnkJGokZKokZKpkpOqk5Sqk5SrlJWrlJWslZaslpetl5itl5iumJmumJmvmZqvkJa1kZe2l527l528mZqwmpuxm5yxm52ynJ2ynZ6znp+0mJ68nqC0n6C1maK/oKG1oKK2oaK3oqS4o6W5pKW5pKa5paa6pqe7pqi7p6m8qKm8qKq9qau+qqy+qqy/mqPAn6bEoKjEoqnFpKrGpKzIpK3Jpq7Jp6/NrK3ArK7Ara7BrrDCr7HDq7LNqbLOq7PPrLXRsLLDsLLEsbPFsrTEsrTFsrTGsrTHtLbGtLbHtrfJtrjHtrjItrjJt7nKuLnJuLnKuLrIuLrJuLrKurvLubzJurzLu77LvL3MvL7MvL7Nvb/OsLjTtbzXtr7Yt8DZv8HRv8LQuMHcvMPevMXfvMbfv8jhwMLRwcPSwcTRwcTSw8bVw8fWxcfWwMbdxsjWxsjXwsrexMjYxsvYycvayMzZyM3dyMzeyM3fyM7fzdHfwcrkxMvgxc3gxMzlxc/nxtDmxtDnx9HpytDhy9LjydDlzdHgztLhz9XmztTnyNHoydLry9TszdXoztju0NTj0Nbm0Nbo0Nbt0dnr+f7+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6BHzHAAAAQB0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zMECERxAAAAJnSURBVFhHY/j/n5WVlYcXCvhAgF8ABAQFBYWAQBgEREBAVFRUXBYE5OTkgUABCBSVlJSUlVVUgUBdXV1DV1dPT08fCAwMDAyNjIyMjU1MTIHAwsLOzt7ewREInJycXVxdXd3c3d09PDw9vby8vX18g4AgOCQkJDQsLCwcCCKioqKio2Nj4+LigSABCBKTkpKTU4AgNS0tLT09PSMTCLKAIDsHBMrKyssrQKASDKqAoL6+AQQaGxubgaAFClr//2cAeXgE+bj9PwPIw8PYx82t7d0TJnS1wuK4vX14+7ipc+WRY+ePHz9/dl0X2M+tw93HE3dc2DO7urCgZMGZc0tHgo+7j56anR/gb2NlaZm75OJSYPk1zOO4cdOpWZH+ZjLSUtIyMuaLz09qHu4+nnJ8bqCfJjf7JTZ2Tk527QObh30cLzuRZ6PGxXbp0iUWNjYWltJDfcCSe1iX1esW+2uJAT3MAkQsLMyWh2cM91S9doGZDAfYtyCCWWbXzPZhHser52hJsYP8C8QszMySa2Z0tQzvVL16sQwXMP+C8jHQx0wy64e9j5fu1wF7GJKomax2Tx/ucTzxfDEbpNS6dImZiaVm65Th7uOGjSdtmZmZwZmYidF23/KJw93HVb0H99oygQEjo/WSLVMmtA/zkquhYdr2k7kSjIyMTFIxO7dNn9A93OvjhvqWiRtOL6orKqpdeHjV1AkT2od7mws46NPWPX3eihUrls2fNnkCMBcP+zgGerm9o6t/Qn//xAkTe0BjAsO8zQUe2mtp7wKC7q6u9pEwIgAay2xogIxlQsYzR0Acj/q4vR0At0FUqsY3nCYAAAAASUVORK5CYII= + + + 3 + EXPLORERBAR_SPECIALGROUPCOLLAPSENOTHIGHLIGHT + 0 + iVBORw0KGgoAAAANSUhEUgAAAPEAAAAZCAMAAADXAjjUAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAwBQTFRFAAAAa3OUbHOVbnSWb3WXd3eScHiZcnqbdHucdXuddXyddn6feHiSeHiTeXmUenqUenqVe3uWfHyWfH2Xfn6Yf3+Zd3+gf4CZeICgeIChe4GifIOkfYWlgICagYGbgYKbgoOcg4SdhISdhIWehYaehYafgYenh4egh4iggoiog4mphIysho6tiIigiImhiYqiiouji4ykjIykjI2ljY6ljo6miI6uiY+wj5CniZCwipGxipOxjpWzjJS0kJCnkJGokZKokZKpkpOqk5Sqk5SrlJWrlJWslZaslpetl5itl5iumJmumJmvmZqvkJa1kZe2l527l528mZqwmpuxm5yxm52ynJ2ynZ6znp+0mJ68nqC0n6C1maK/oKG1oKK2oaK3oqS4o6W5pKW5pKa5paa6pqe7pqi7p6m8qKm8qKq9qau+qqy+qqy/mqPAn6bEoKjEoqnFpKrGpKzIpK3Jpq7Jp6/NrK3ArK7Ara7BrrDCr7HDq7LNqbLOq7PPrLXRsLLDsLLEsbPFsrTEsrTFsrTGsrTHtLbGtLbHtrfJtrjHtrjItrjJt7nKuLnJuLnKuLrIuLrJuLrKurvLubzJurzLu77LvL3MvL7MvL7Nvb/OsLjTtbzXtr7Yt8DZv8HRv8LQuMHcvMPevMXfvMbfv8jhwMLRwcPSwcTRwcTSw8bVw8fWxcfWwMbdxsjWxsjXwsrexMjYxsvYycvayMzZyM3dyMzeyM3fyM7fzdHfwcrkxMvgxc3gxMzlxc/nxtDmxtDnx9HpytDhy9LjydDlzdHgztLhz9XmztTnyNHoydLry9TszdXoztju0NTj0Nbm0Nbo0Nbt0dnr////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS3IePQAAAQB0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zMECERxAAAAJnSURBVFhHY/j/n5WVlYcXCvhAgF8ABAQFBYWAQBgEREBAVFRUXBYE5OTkgUABCBSVlJSUlVVUgUBdXV1DV1dPT08fCAwMDAyNjIyMjU1MTIHAwsLOzt7ewREInJycXVxdXd3c3d09PDw9vby8vX18g4AgOCQkJDQsLCwcCCKioqKio2Nj4+LigSABCBKTkpKTU4AgNS0tLT09PSMTCLKAIDsHBMrKyssrQKASDKqAoL6+AQQaGxubgaAFClr//2cAeXgE+bj9PwPIw8PYx82t7d0TJnS1wuK4vX14+7ipc+WRY+ePHz9/dl0X2M+tw93HE3dc2DO7urCgZMGZc0tHgo+7j56anR/gb2NlaZm75OJSYPk1zOO4cdOpWZH+ZjLSUtIyMuaLz09qHu4+nnJ8bqCfJjf7JTZ2Tk527QObh30cLzuRZ6PGxXbp0iUWNjYWltJDfcCSe1iX1esW+2uJAT3MAkQsLMyWh2cM91S9doGZDAfYtyCCWWbXzPZhHser52hJsYP8C8QszMySa2Z0tQzvVL16sQwXMP+C8jHQx0wy64e9j5fu1wF7GJKomax2Tx/ucTzxfDEbpNS6dImZiaVm65Th7uOGjSdtmZmZwZmYidF23/KJw93HVb0H99oygQEjo/WSLVMmtA/zkquhYdr2k7kSjIyMTFIxO7dNn9A93OvjhvqWiRtOL6orKqpdeHjV1AkT2od7mws46NPWPX3eihUrls2fNnkCMBcP+zgGerm9o6t/Qn//xAkTe0BjAsO8zQUe2mtp7wKC7q6u9pEwIgAay2xogIxlQsYzR0Acj/q4vR0At0FUqsY3nCYAAAAASUVORK5CYII= + + + 3 + EXPLORERBAR_SPECIALGROUPEXPANDHIGHLIGHT + 0 + iVBORw0KGgoAAAANSUhEUgAAAPEAAAAZCAMAAADXAjjUAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAwBQTFRFAAAAa3OUbHOVbnSWb3WXd3eScHiZcnqbdHucdXuddXyddn6feHiSeHiTeXmUenqUenqVe3uWfHyWfH2Xfn6Yf3+Zd3+gf4CZeICgeIChe4GifIOkfYWlgICagYGbgYKbgoOcg4SdhISdhIWehYaehYafgYenh4egh4iggoiog4mphIysho6tiIigiImhiYqiiouji4ykjIykjI2ljY6ljo6miI6uiY+wj5CniZCwipGxipOxjpWzjJS0kJCnkJGokZKokZKpkpOqk5Sqk5SrlJWrlJWslZaslpetl5itl5iumJmumJmvmZqvkJa1kZe2l527l528mZqwmpuxm5yxm52ynJ2ynZ6znp+0mJ68nqC0n6C1maK/oKG1oKK2oaK3oqS4o6W5pKW5pKa5paa6pqe7pqi7p6m8qKm8qKq9qau+qqy+qqy/mqPAn6bEoKjEoqnFpKrGpKzIpK3Jpq7Jp6/NrK3ArK7Ara7BrrDCr7HDq7LNqbLOq7PPrLXRsLLDsLLEsbPFsrTEsrTFsrTGsrTHtLbGtLbHtrfJtrjHtrjItrjJt7nKuLnJuLnKuLrIuLrJuLrKurvLubzJurzLu77LvL3MvL7MvL7Nvb/OsLjTtbzXtr7Yt8DZv8HRv8LQuMHcvMPevMXfvMbfv8jhwMLRwcPSwcTRwcTSw8bVw8fWxcfWwMbdxsjWxsjXwsrexMjYxsvYycvayMzZyM3dyMzeyM3fyM7fzdHfwcrkxMvgxc3gxMzlxc/nxtDmxtDnx9HpytDhy9LjydDlzdHgztLhz9XmztTnyNHoydLry9TszdXoztju0NTj0Nbm0Nbo0Nbt0dnr+f7+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6BHzHAAAAQB0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zMECERxAAAAJmSURBVFhH7ZiLf0phGMfrnFOZe8ilHUNDjCVtZs3aGGkX5JLQbNgot7kMG3PptMrhhE5kjbmM1sSY+/1uyOYS/UN53so/8eb7H3w/v+d53vfzE8TjIpFo6LAUwxEjRiKkUukoYDRiDEImk42biMjKmgRMBqYoFIrs7KnTAKVSOSM3V6VSzQHUavVcjUaTl5efPw8oLCwpKS1duAgoK1u8RK/XLzUYDOXlFRWVlVVVy5avBtaYTKa1ZrN5HbDeYrFUV9fU1NZuAjYDW+rq6uu3AtusVqvNZtu+A9gJ7NqNaGpqbj6MOJKgBbDbGYTD4XACrhTueFyAhNPImI0LkDDGxk436+F5zv0vY5bF27j19O3PX6ORSPRnL5dwduNu7Hvx+03H0f37Dnb++BVKB2PPl4GOvSuNxUVabUPXnxDcL8wzdjwauLzBWEBnyjNpen4wet6Ju7E/cnXViplDJGKxJCNDMuvDY+wz7v62p3h6LEZRVCwmpqhDn87B5cb6VvcGjTljxaCcsCa1fe24T/W9zgJ6EAoYCVMk/eoSi3nGPVdy5BI00wlhcsLdds6F91T3BOnBaKhRzBRJ0PexNw69nw0HK7XHJFH0OoB7xr7oATBO7jFJUMee+nE3Zh7260iShD0mSUKoe3fLh7txy9mPb3VEAqFwQdcTP89ifrkYpu15f8N4oVBIyDe+fBbgPbi/x4zd5Xvw/eaJxsbjN/ruXOR5Fvc/F5Q+Jz2Ba+FwuPt62wUethj7jEGZPcV5ea/Xx/vOoE4A8z9XotpzsRzg4Tg2HRoB1GUyTLLLTPaZaZDxf2OW/Qs0iFSiyFPB/QAAAABJRU5ErkJggg== + + + 3 + EXPLORERBAR_SPECIALGROUPEXPANDNOTHIGHLIGHT + 0 + iVBORw0KGgoAAAANSUhEUgAAAPEAAAAZCAMAAADXAjjUAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAwBQTFRFAAAAa3OUbHOVbnSWb3WXd3eScHiZcnqbdHucdXuddXyddn6feHiSeHiTeXmUenqUenqVe3uWfHyWfH2Xfn6Yf3+Zd3+gf4CZeICgeIChe4GifIOkfYWlgICagYGbgYKbgoOcg4SdhISdhIWehYaehYafgYenh4egh4iggoiog4mphIysho6tiIigiImhiYqiiouji4ykjIykjI2ljY6ljo6miI6uiY+wj5CniZCwipGxipOxjpWzjJS0kJCnkJGokZKokZKpkpOqk5Sqk5SrlJWrlJWslZaslpetl5itl5iumJmumJmvmZqvkJa1kZe2l527l528mZqwmpuxm5yxm52ynJ2ynZ6znp+0mJ68nqC0n6C1maK/oKG1oKK2oaK3oqS4o6W5pKW5pKa5paa6pqe7pqi7p6m8qKm8qKq9qau+qqy+qqy/mqPAn6bEoKjEoqnFpKrGpKzIpK3Jpq7Jp6/NrK3ArK7Ara7BrrDCr7HDq7LNqbLOq7PPrLXRsLLDsLLEsbPFsrTEsrTFsrTGsrTHtLbGtLbHtrfJtrjHtrjItrjJt7nKuLnJuLnKuLrIuLrJuLrKurvLubzJurzLu77LvL3MvL7MvL7Nvb/OsLjTtbzXtr7Yt8DZv8HRv8LQuMHcvMPevMXfvMbfv8jhwMLRwcPSwcTRwcTSw8bVw8fWxcfWwMbdxsjWxsjXwsrexMjYxsvYycvayMzZyM3dyMzeyM3fyM7fzdHfwcrkxMvgxc3gxMzlxc/nxtDmxtDnx9HpytDhy9LjydDlzdHgztLhz9XmztTnyNHoydLry9TszdXoztju0NTj0Nbm0Nbo0Nbt0dnr////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS3IePQAAAQB0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zMECERxAAAAJmSURBVFhH7ZiLf0phGMfrnFOZe8ilHUNDjCVtZs3aGGkX5JLQbNgot7kMG3PptMrhhE5kjbmM1sSY+/1uyOYS/UN53so/8eb7H3w/v+d53vfzE8TjIpFo6LAUwxEjRiKkUukoYDRiDEImk42biMjKmgRMBqYoFIrs7KnTAKVSOSM3V6VSzQHUavVcjUaTl5efPw8oLCwpKS1duAgoK1u8RK/XLzUYDOXlFRWVlVVVy5avBtaYTKa1ZrN5HbDeYrFUV9fU1NZuAjYDW+rq6uu3AtusVqvNZtu+A9gJ7NqNaGpqbj6MOJKgBbDbGYTD4XACrhTueFyAhNPImI0LkDDGxk436+F5zv0vY5bF27j19O3PX6ORSPRnL5dwduNu7Hvx+03H0f37Dnb++BVKB2PPl4GOvSuNxUVabUPXnxDcL8wzdjwauLzBWEBnyjNpen4wet6Ju7E/cnXViplDJGKxJCNDMuvDY+wz7v62p3h6LEZRVCwmpqhDn87B5cb6VvcGjTljxaCcsCa1fe24T/W9zgJ6EAoYCVMk/eoSi3nGPVdy5BI00wlhcsLdds6F91T3BOnBaKhRzBRJ0PexNw69nw0HK7XHJFH0OoB7xr7oATBO7jFJUMee+nE3Zh7260iShD0mSUKoe3fLh7txy9mPb3VEAqFwQdcTP89ifrkYpu15f8N4oVBIyDe+fBbgPbi/x4zd5Xvw/eaJxsbjN/ruXOR5Fvc/F5Q+Jz2Ba+FwuPt62wUethj7jEGZPcV5ea/Xx/vOoE4A8z9XotpzsRzg4Tg2HRoB1GUyTLLLTPaZaZDxf2OW/Qs0iFSiyFPB/QAAAABJRU5ErkJggg== + + + 3 + EXPLORERBAR_SPECIALGROUPHIGHLIGHT_FORECOLOR + 15132390 + + + + 3 + EXPLORERBAR_SPECIALGROUPNOTHIGHLIGHT_FORECOLOR + 16777215 + + + + 3 + FORM_BACKGROUND + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wUEDBczNySC9AAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAADElEQVR4nGP4/Pk7AAW6At433DOjAAAAAElFTkSuQmCC + + + 3 + OUTLOOKNAVBAR_BORDERCOLOR + 9731196 + + + + 3 + OVERFLOWPANELBUTTON_FOCUSEDNOTSELECTED + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAfCAIAAACpqzA1AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wQMDQ8nVvOluAAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAAOElEQVR4nG3MUQoAIAwCUPHcHaPjdZNt2s+ggr5EeYgxJuxFVxBKQkF3ou7em/Jjj7fitUri963c+ehF2fKWZO0AAAAASUVORK5CYII= + + + 3 + OVERFLOWPANELBUTTON_FOCUSEDSELECTED + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAfCAIAAACpqzA1AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wQMDRAMNxVSZgAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAAJElEQVR4nGOoqZnC8KKeg4mBmYWJkZkFk2YhThzOZsGiFrs4AKaEBBQilih0AAAAAElFTkSuQmCC + + + 3 + OVERFLOWPANELBUTTON_NOTFOCUSEDSELECTED + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAfCAIAAACpqzA1AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wQMDQ8beZzZPwAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAAPElEQVR4nF2Nyw0AIRBCCXVbhjXaxADuxV/2BCEPQGsdNTqni7CuRoSL0yIsItsvzWVPL/oxe3Nl0fvxAeIYSl/g4AV2AAAAAElFTkSuQmCC + + + 3 + OVERFLOWPANEL_BACKGROUND + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAfCAIAAACpqzA1AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wQMDQwyEAMSkAAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAALklEQVR4nK3KoQ0AIBDF0Muf+8ZgQdCs0AaDweOavFb3qLl2wIARg297DYx++w6OBlqhug8SzQAAAABJRU5ErkJggg== + + + 3 + OVERFLOWPANEL_MENUBUTTON + 0 + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAADAFBMVEUAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABnduxjAAABAHRSTlP/AP//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////rTvmKwAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAAd0SU1FB9cEDA0CA99ePyQAAAAHdEVYdEF1dGhvcgCprsxIAAAADHRFWHREZXNjcmlwdGlvbgATCSEjAAAACnRFWHRDb3B5cmlnaHQArA/MOgAAAA50RVh0Q3JlYXRpb24gdGltZQA19w8JAAAACXRFWHRTb2Z0d2FyZQBdcP86AAAAC3RFWHREaXNjbGFpbWVyALfAtI8AAAAIdEVYdFdhcm5pbmcAwBvmhwAAAAd0RVh0U291cmNlAPX/g+sAAAAIdEVYdENvbW1lbnQA9syWvwAAAAZ0RVh0VGl0bGUAqO7SJwAAADBJREFUeJxjYEQDDFgFGBhACFkFkgiMgotgV4FpBkFriRBgAAE0d6DbwsCIzsApAAB3XADk8z+QVAAAAABJRU5ErkJggg== + + + 3 + PANELBUTTON_FOCUSEDNOTSELECTED + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAgCAIAAABch4VNAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wQMDQs6UZkMZQAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAAOElEQVR4nG2MyQ0AIAzDoszNGIzHJj3CB1FA/GwlMlrrkAYVRqQT6VQWI43a7EScbuv/8atX29OfBfpH23JgJ7wAAAAASUVORK5CYII= + + + 3 + PANELBUTTON_FOCUSEDSELECTED + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAgCAIAAABch4VNAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wQMDQ4k1uHFQwAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAAKElEQVR4nGOoqZnC8KKeg4mBmZmJkZmFiYGZBQvNjEMcSrMQkMetHwC0/AQWDuoIYQAAAABJRU5ErkJggg== + + + 3 + PANELBUTTON_NOTFOCUSEDSELECTED + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAgCAIAAABch4VNAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wQMDQsfGp3YIgAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAAPUlEQVR4nFXMwQ0AIRBCUULdlmGNNgE4e9Coe/skL6C1Do3OioiYFRPTZ682EbGmfwbR49e+7e31+P17zQf4U0xhRPCEoAAAAABJRU5ErkJggg== + + + 3 + PANELBUTTON_NOTSELECTED_FONTCOLOR + 0 + + + + 3 + PANELBUTTON_SELECTED_FONTCOLOR + 0 + + + + 3 + PANELVERTICAL_FOCUSED_BACKCOLOR + 10676223 + + + + 3 + PANELVERTICAL_FONTCOLOR + 0 + + + + 3 + PANELVERTICAL_NOTFOCUSED_BACKCOLOR + 16249843 + + + + 3 + PANEL_BACKGROUND + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAgCAIAAABch4VNAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wQMDQwdu9IvyQAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAAL0lEQVR4nGOoqZnC8PDRG6a/f/8x/f37j+nfPyj99x/T339oNLI8irr/BORxmgMAAB9dokvvvNEAAAAASUVORK5CYII= + + + 3 + SHORTCUTMENU_DOWN_ENABLED + 0 + Qk02BQAAAAAAADYEAAAoAAAAEAAAABAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAoFAw/6BYMP+wWDD/sGBA/7BoQP/AaED/wHBQ/8B4UP/QeFD/4HhQ/+CAUP/giFD/8IhQ/9CIYP/wkGD//5Bg/+CQcP/gmHD/8Jhw//CgcP//oHD//6iA//+wgP//sJD//7iQ///AoP//////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaAhoaGhoaGhoaGhoaGhoaAgUBGhoaGhoaGhoaGhoaAgoJBQAaGhoaGhoaGhoaBxIUCwgFABoaGhoaGhoaExEQFQ4KAAMEGhoaGhoaGhoaDRYPDAMaGhoaGhoaGhoaGhAZFQ4EGhoaGhoaGhoaGhoRGRgXBhoaGhoaGhoaGhoaExEQDQ0aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho= + + + 3 + SHORTCUTMENU_DOWN_DISABLED + 0 + Qk02BQAAAAAAADYEAAAoAAAAEAAAABAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAT09P/1RUVP9WVlb/X19f/2RkZP9mZmb/b29v/3R0dP92dnb/d3d3/3x8fP+BgYH/g4OD/4SEhP+MjIz/jo6O/4+Pj/+UlJT/lpaW/5qamv+cnJz/paWl/6qqqv+vr6//tLS0/729vf//////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaAhoaGhoaGhoaGhoaGhoaAgUBGhoaGhoaGhoaGhoaAgoJBQAaGhoaGhoaGhoaBxIUCwgFABoaGhoaGhoaExEQFQ4KAAMEGhoaGhoaGhoaDRYPDAMaGhoaGhoaGhoaGhAZFQ4EGhoaGhoaGhoaGhoRGRgXBhoaGhoaGhoaGhoaExEQDQ0aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho= + + + 3 + SHORTCUTMENU_UP_ENABLED + 0 + Qk02BQAAAAAAADYEAAAoAAAAEAAAABAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAkEgg/6BIIP+gUCD/oFAw/6BYMP+wWDD/0Ggw/8BwQP/QcED/0HhA/9B4UP/QgFD/4IBQ/+CIYP/wkGD/8Jhg/+CYcP/woHD//6Bw//CogP//sJD//8Cg//////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgwDAAAAFhYWFhYWFhYWFhYMDQsHABYWFhYWFhYWFhYWDBMNCgEWFhYWFhYWFhYWFgwVDw0CFhYWFhYWFhYWEAgGFA8PBQIAFhYWFhYWFhYQFRQSDgkDFhYWFhYWFhYWFhEVFA0DFhYWFhYWFhYWFhYWERUEFhYWFhYWFhYWFhYWFhYQFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhY= + + + 3 + SHORTCUTMENU_UP_DISABLED + 0 + Qk02BQAAAAAAADYEAAAoAAAAEAAAABAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAARERE/0ZGRv9KSkr/T09P/1RUVP9WVlb/Y2Nj/2pqav9sbGz/cXFx/3Z2dv96enr/fHx8/4aGhv+MjIz/kZGR/5SUlP+ampr/nJyc/6SkpP+vr6//vb29//////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgwDAAAAFhYWFhYWFhYWFhYMDQsHABYWFhYWFhYWFhYWDBMNCgEWFhYWFhYWFhYWFgwVDw0CFhYWFhYWFhYWEAgGFA8PBQIAFhYWFhYWFhYQFRQSDgkDFhYWFhYWFhYWFhEVFA0DFhYWFhYWFhYWFhYWERUEFhYWFhYWFhYWFhYWFhYQFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhY= + + + 3 + SHRINKBUTTON_FOCUSEDNOTSHRUNK + 0 + iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAOwgAADsIBFShKgAAAAAd0SU1FB9cEEhECD3MSCbcAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4xMHKyJZIAAACzSURBVDhPrZGhDsIwFEUvf4rEIrBILAKLxCCxyAkQhBAECQQEgiAQCBKSdWt3YaRdxks39ZoccXp7VDvkhdA4dEdqgMLsqAGK95oawL0SagD3XFID2MeCbXw/9G+XHlrY+5xNlNEv9G+k1zvY24wxqsjv0mWD/DqlJEThXnq0yc8Txqhiv0uXDbLTmE2EOOzS6x2yw4htlHF9lx42mP2QGsBsB9QAZtOnBkhXPWqANOlSgw/RhutoURsdLwAAAABJRU5ErkJggg== + + + 3 + SHRINKBUTTON_FOCUSEDSHRUNK + 0 + iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAOwgAADsIBFShKgAAAAAd0SU1FB9cEEhECNbUe0AUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4xMHKyJZIAAACwSURBVDhPrdGvC8JQGIXh439qtBqsRqvBarQYrcYFDSJiEBQNBjEYFgRhd7+OTnbHPFzbN3jCuR9vWoe8EBYfiyMtoHQ7WkD5WtMCimdECyjiJS0gfyyoPj/x5013sMnvc6oq/Mb1TXewyW8zhjRxfdetDbLrlP/42N91tztk5wlDmqi+69YG6WlM5SP/rjvYpIcRVRW233QHG7cf0gLcdkALcJs+LSBZ9WgBSdSlhTcMputoJnzNZQAAAABJRU5ErkJggg== + + + 3 + SHRINKBUTTON_NOTFOCUSEDNOTSHRUNK + 0 + iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAOwgAADsIBFShKgAAAAAd0SU1FB9cEEhEdHtT4J9sAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4xMHKyJZIAAACoSURBVDhPrYvJCsJQEATbn1ZcccEVF1wwJiFGERERERERv641h4HH8JLTDNShp6jSIf0SFrdPPrQAcfSmBQh3L1qAYPukBdisH7QAq+WdRfB/rtdbHBbzG/PIouzE6+12mE2v9CGROL11g8n4Qo1E8tfb12A0PNOHxOL01g0G/RPzkFi83m6HXvfIIrLY9XqLQ6ed0gK0mgktQKMe0wLUqiEtQKUc0IIfVwJjnBSnJGEAAAAASUVORK5CYII= + + + 3 + SHRINKBUTTON_NOTFOCUSEDSHRUNK + 0 + iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAOwgAADsIBFShKgAAAAAd0SU1FB9cEEhEgFrDL51cAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4xMHKyJZIAAACpSURBVDhPrcvJCsJQEETR8qcVRxxwxAEHjDHEKCIiIiIi4r8FSrJoiE276wdnUf24hX3yITzeLn7TA6Ltix4Qbp70gGD9oAeslnd6wGJ+o8Y0/bnpbTWYTa/UsjAjd72tBpPxhRaJ5U9v3WA0PPMfieVf73yHQf9Ei0Typ7du0OseqUkkd72tBp32gVoW5m96Ww1azYQe0KjH9IBaNaIHVMohPaBUDOjhC117YwyPTyovAAAAAElFTkSuQmCC + + + 3 + SIGNS_MINUS + 0 + iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjIwWZ92UQAAAI5JREFUKFNjfP76/f+dRy8ygMEPCAUCH6B8a0NxBoYFGw78xwA//v//8OH//wdAwsAj4T+mIriC//8PXHgAVbQCySQkBQ9efPi/4QCaIpCx6BiuaALIJJAJQPwA5A4gceHGB6BVH/4v2HEBYh1IEYYCbIpAJoAcueEEEAPdATIBhsEmnb54HcMtyG4DyQMAS+rq4jk+qVQAAAAASUVORK5CYII= + + + 3 + SIGNS_PLUS + 0 + iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjIwWZ92UQAAAJZJREFUKFNjfP76/f+dRy8ygMEPCAUCH6B8a0NxBoYFGw78xwA//v//8OH//wdAwsAj4T+GIpAgRMH//wcuPIAqWoFkEtAEkCKQggcvPvzfcABNEUgSHcMVTQCZBHIDEINMACm8cOMD0KoP/xfsuACxDqQIpuABUBVI8AA2RTBHbjjxAOwOkAkwDDbp9MXrGG5BdhtIHgAc3OMlaQBkAQAAAABJRU5ErkJggg== + + + 3 + SPLITTER_BACKGROUND + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAICAIAAAC3eAIWAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wQMDQoac+wd7AAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAAHUlEQVR4nGOoqZnCpKOtzfTt2w84/v4dQjMwMAAABvcQk/XV9g0AAAAASUVORK5CYII= + + + 3 + SPLITTER_GRIPPER + 0 + iVBORw0KGgoAAAANSUhEUgAAACMAAAAICAIAAAD80NH7AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wQMDQoouztMbAAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAAXElEQVR4nGOsqZnCQBfAoqOtTR+bGDWM3BkYGMqyCxgYGLqmTqAdm4mBgcHSKTA6xuXbtx80ZbMkhSfkF4QwMDB8+/aDpmzGxob5NI4gKGCBeJAOgIk+1jAwMAAAcT9zg0JpLAYAAAAASUVORK5CYII= + + + 3 + TITLE_BACKGROUND + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAaCAIAAAD5ZqGGAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAKTWlDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVN3WJP3Fj7f92UPVkLY8LGXbIEAIiOsCMgQWaIQkgBhhBASQMWFiApWFBURnEhVxILVCkidiOKgKLhnQYqIWotVXDjuH9yntX167+3t+9f7vOec5/zOec8PgBESJpHmomoAOVKFPDrYH49PSMTJvYACFUjgBCAQ5svCZwXFAADwA3l4fnSwP/wBr28AAgBw1S4kEsfh/4O6UCZXACCRAOAiEucLAZBSAMguVMgUAMgYALBTs2QKAJQAAGx5fEIiAKoNAOz0ST4FANipk9wXANiiHKkIAI0BAJkoRyQCQLsAYFWBUiwCwMIAoKxAIi4EwK4BgFm2MkcCgL0FAHaOWJAPQGAAgJlCLMwAIDgCAEMeE80DIEwDoDDSv+CpX3CFuEgBAMDLlc2XS9IzFLiV0Bp38vDg4iHiwmyxQmEXKRBmCeQinJebIxNI5wNMzgwAABr50cH+OD+Q5+bk4eZm52zv9MWi/mvwbyI+IfHf/ryMAgQAEE7P79pf5eXWA3DHAbB1v2upWwDaVgBo3/ldM9sJoFoK0Hr5i3k4/EAenqFQyDwdHAoLC+0lYqG9MOOLPv8z4W/gi372/EAe/tt68ABxmkCZrcCjg/1xYW52rlKO58sEQjFu9+cj/seFf/2OKdHiNLFcLBWK8ViJuFAiTcd5uVKRRCHJleIS6X8y8R+W/QmTdw0ArIZPwE62B7XLbMB+7gECiw5Y0nYAQH7zLYwaC5EAEGc0Mnn3AACTv/mPQCsBAM2XpOMAALzoGFyolBdMxggAAESggSqwQQcMwRSswA6cwR28wBcCYQZEQAwkwDwQQgbkgBwKoRiWQRlUwDrYBLWwAxqgEZrhELTBMTgN5+ASXIHrcBcGYBiewhi8hgkEQcgIE2EhOogRYo7YIs4IF5mOBCJhSDSSgKQg6YgUUSLFyHKkAqlCapFdSCPyLXIUOY1cQPqQ28ggMor8irxHMZSBslED1AJ1QLmoHxqKxqBz0XQ0D12AlqJr0Rq0Hj2AtqKn0UvodXQAfYqOY4DRMQ5mjNlhXIyHRWCJWBomxxZj5Vg1Vo81Yx1YN3YVG8CeYe8IJAKLgBPsCF6EEMJsgpCQR1hMWEOoJewjtBK6CFcJg4Qxwicik6hPtCV6EvnEeGI6sZBYRqwm7iEeIZ4lXicOE1+TSCQOyZLkTgohJZAySQtJa0jbSC2kU6Q+0hBpnEwm65Btyd7kCLKArCCXkbeQD5BPkvvJw+S3FDrFiOJMCaIkUqSUEko1ZT/lBKWfMkKZoKpRzame1AiqiDqfWkltoHZQL1OHqRM0dZolzZsWQ8ukLaPV0JppZ2n3aC/pdLoJ3YMeRZfQl9Jr6Afp5+mD9HcMDYYNg8dIYigZaxl7GacYtxkvmUymBdOXmchUMNcyG5lnmA+Yb1VYKvYqfBWRyhKVOpVWlX6V56pUVXNVP9V5qgtUq1UPq15WfaZGVbNQ46kJ1Bar1akdVbupNq7OUndSj1DPUV+jvl/9gvpjDbKGhUaghkijVGO3xhmNIRbGMmXxWELWclYD6yxrmE1iW7L57Ex2Bfsbdi97TFNDc6pmrGaRZp3mcc0BDsax4PA52ZxKziHODc57LQMtPy2x1mqtZq1+rTfaetq+2mLtcu0W7eva73VwnUCdLJ31Om0693UJuja6UbqFutt1z+o+02PreekJ9cr1Dund0Uf1bfSj9Rfq79bv0R83MDQINpAZbDE4Y/DMkGPoa5hpuNHwhOGoEctoupHEaKPRSaMnuCbuh2fjNXgXPmasbxxirDTeZdxrPGFiaTLbpMSkxeS+Kc2Ua5pmutG003TMzMgs3KzYrMnsjjnVnGueYb7ZvNv8jYWlRZzFSos2i8eW2pZ8ywWWTZb3rJhWPlZ5VvVW16xJ1lzrLOtt1ldsUBtXmwybOpvLtqitm63Edptt3xTiFI8p0in1U27aMez87ArsmuwG7Tn2YfYl9m32zx3MHBId1jt0O3xydHXMdmxwvOuk4TTDqcSpw+lXZxtnoXOd8zUXpkuQyxKXdpcXU22niqdun3rLleUa7rrStdP1o5u7m9yt2W3U3cw9xX2r+00umxvJXcM970H08PdY4nHM452nm6fC85DnL152Xlle+70eT7OcJp7WMG3I28Rb4L3Le2A6Pj1l+s7pAz7GPgKfep+Hvqa+It89viN+1n6Zfgf8nvs7+sv9j/i/4XnyFvFOBWABwQHlAb2BGoGzA2sDHwSZBKUHNQWNBbsGLww+FUIMCQ1ZH3KTb8AX8hv5YzPcZyya0RXKCJ0VWhv6MMwmTB7WEY6GzwjfEH5vpvlM6cy2CIjgR2yIuB9pGZkX+X0UKSoyqi7qUbRTdHF09yzWrORZ+2e9jvGPqYy5O9tqtnJ2Z6xqbFJsY+ybuIC4qriBeIf4RfGXEnQTJAntieTE2MQ9ieNzAudsmjOc5JpUlnRjruXcorkX5unOy553PFk1WZB8OIWYEpeyP+WDIEJQLxhP5aduTR0T8oSbhU9FvqKNolGxt7hKPJLmnVaV9jjdO31D+miGT0Z1xjMJT1IreZEZkrkj801WRNberM/ZcdktOZSclJyjUg1plrQr1zC3KLdPZisrkw3keeZtyhuTh8r35CP5c/PbFWyFTNGjtFKuUA4WTC+oK3hbGFt4uEi9SFrUM99m/ur5IwuCFny9kLBQuLCz2Lh4WfHgIr9FuxYji1MXdy4xXVK6ZHhp8NJ9y2jLspb9UOJYUlXyannc8o5Sg9KlpUMrglc0lamUycturvRauWMVYZVkVe9ql9VbVn8qF5VfrHCsqK74sEa45uJXTl/VfPV5bdra3kq3yu3rSOuk626s91m/r0q9akHV0IbwDa0b8Y3lG19tSt50oXpq9Y7NtM3KzQM1YTXtW8y2rNvyoTaj9nqdf13LVv2tq7e+2Sba1r/dd3vzDoMdFTve75TsvLUreFdrvUV99W7S7oLdjxpiG7q/5n7duEd3T8Wej3ulewf2Re/ranRvbNyvv7+yCW1SNo0eSDpw5ZuAb9qb7Zp3tXBaKg7CQeXBJ9+mfHvjUOihzsPcw83fmX+39QjrSHkr0jq/dawto22gPaG97+iMo50dXh1Hvrf/fu8x42N1xzWPV56gnSg98fnkgpPjp2Snnp1OPz3Umdx590z8mWtdUV29Z0PPnj8XdO5Mt1/3yfPe549d8Lxw9CL3Ytslt0utPa49R35w/eFIr1tv62X3y+1XPK509E3rO9Hv03/6asDVc9f41y5dn3m978bsG7duJt0cuCW69fh29u0XdwruTNxdeo94r/y+2v3qB/oP6n+0/rFlwG3g+GDAYM/DWQ/vDgmHnv6U/9OH4dJHzEfVI0YjjY+dHx8bDRq98mTOk+GnsqcTz8p+Vv9563Or59/94vtLz1j82PAL+YvPv655qfNy76uprzrHI8cfvM55PfGm/K3O233vuO+638e9H5ko/ED+UPPR+mPHp9BP9z7nfP78L/eE8/sl0p8zAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAAJUlEQVR42mJYsXw/EwMDA9Pfv/+Y/v37h0FjE8Mnh02MgYEBMAA3wUajSzvGlwAAAABJRU5ErkJggg== + + + 3 + TITLE_BACKGROUND_LEFT + 1 + + + + 3 + TITLE_BACKGROUND_WIDTH + 198 + + + + 3 + TITLE_BORDERCOLOR + 9731196 + + + + 3 + TITLE_FONTCOLOR + 16777215 + + + + 3 + TOOLTITLE_BACKGROUND + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAATCAIAAADeafBOAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAEdJREFUGFcdw1kKgCAAQMF3/wsqiiiimUuaWfQbNDAIEVnr/c/5MMZN74vWLkqZ5HyS0iDGTggH3jecq1hbMCaj9Y5SCSm3D8ftM7bXRCRhAAAAAElFTkSuQmCC + + + 3 + TOOLTITLE_FONTCOLOR + 0 + + + + 3 + ZOOMNAVBAR_BAR + 0 + Qk3+BAAAAAAAADYEAAAoAAAAAQAAADIAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAkW9w/5Jwcf+TcXL/k3Jz/5RzdP+VdHX/lnZ3/5d3eP+YeHn/mXl6/5p6e/+be3z/nHx9/519fv+ef4D/n4CB/6CCg/+hg4T/ooSF/6OFhv+khof/pYeI/6aJiv+niov/qIuM/7KYmf/ItbX/yrm5/828vP/Pv8D/0sTE/9XHyP/Yy8v/2s7O/93R0v/g1dX/4tjY/+Xb2//n3t7/6eHh/+vk5P/t5+f/7+np//Hs7P/z7u7/9PDw//bz8//39PX/+Pb2/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAABAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAPAAAAEAAAABEAAAASAAAAEwAAABQAAAAVAAAAFgAAABcAAAAYAAAAGQAAABoAAAAbAAAAHAAAAB0AAAAeAAAAHwAAACAAAAAhAAAAIgAAACMAAAAkAAAAJQAAACYAAAAnAAAAKAAAACkAAAAqAAAAKwAAACwAAAAtAAAALgAAAC8AAAAwAAAA + + + 3 + ZOOMNAVBAR_REFLECTEDSEPARATOR + 0 + iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABGdBTUEAALGPC/xhBQAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjIwWZ92UQAAAD9JREFUaEPt0IEAAAAAw6D5Ux/khVBhwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwMDLwAAkMAABCDVySwAAAABJRU5ErkJggg== + + + 3 + ZOOMNAVBAR_SEPARATOR + 0 + iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABGdBTUEAALGPC/xhBQAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjIwWZ92UQAAAD9JREFUaEPt0IEAAAAAw6D5Ux/khVBhwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwMDLwAAkMAABCDVySwAAAABJRU5ErkJggg== + + + 3 + ZOOMNAVBAR_STACKBUTTON + 0 + iVBORw0KGgoAAAANSUhEUgAAAMAAAAAcCAYAAAA3ILBTAAABF0lEQVR4nO3cMW7CQBRF0WuU1kUovAHatNn/CuiyCyJKOnAKG8YQg02BjP6/R0LC43kSxTw0jGRASqy6uW6A9ci4FMEJ2AH788BwoX8Dm8FYy/0izLln3vyS+UfXP/2LVT/YcL34pagq4AuooRTAbY8yqYBPKAVw8SubCkoBpJQ+Bu/bkftjY8/cM29+yfzk3GEBbrdBS/+KN2/+FadAV9wCKTULoNQsgFKzAErNAig1j0HNR85PzvUY1HzU/Jy5boGUmwVQahZAqVkApWYBlJrHoOYj5yfnegxqPmp+ztzLFuh0b4IUVAulALvzgJTAEfiFUoA93d9EWAJFdwS2wAH+741quqflfUheEbV03/yHpT+I9Bb+AD0fBdMuQEabAAAAAElFTkSuQmCC + + + 4 + BUTTON_FOCUSED_FONTCOLOR + 0 + + + + 4 + BUTTON_LEFT_FOCUSED + 0 + Qk22BAAAAAAAADYEAAAoAAAAAgAAACAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAXFNM/2fX//9q1///bdj//3DZ//902v//d9v//3rc//993f//gd7//4Te//+H3///i+D//47h//+R4v//lOP//5jk//+b5f//p+j//63q//+y7P//uO7//73w///D8v//yPT//872///T+P//2fr//978////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/x0AAAAAAAAAABEAAAAQAAAADwAAAA4AAAANAAAADAAAAAsAAAAKAAAACQAAAAgAAAAHAAAABgAAAAUAAAAEAAAAAwAAAAIAAAABAAAAEgAAABMAAAAUAAAAFQAAABYAAAAXAAAAGAAAABkAAAAaAAAAGwAAABwAAAAAAAAdAAAA + + + 4 + BUTTON_LEFT_HOTTRACKING + 0 + Qk22BAAAAAAAADYEAAAoAAAAAgAAACAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAab3//3jb//973P//ft3//4He//+E3///h+D//4rh//+N4v//kOP//5Pj//+W5P//meX//5zm//+f5///ouj//6Xp//+o6v//q+v//67s//+x7P//tO3//7fu//+67///vfD//8Dx///D8v//xvP//8n0////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/x0AAAAAAAAAAAEAAAACAAAAAwAAAAQAAAAFAAAABgAAAAcAAAAIAAAACQAAAAoAAAALAAAADAAAAA0AAAAOAAAADwAAABAAAAARAAAAEgAAABMAAAAUAAAAFQAAABYAAAAXAAAAGAAAABkAAAAaAAAAGwAAABwAAAAAAAAdAAAA + + + 4 + BUTTON_LEFT_NOTFOCUSED + 0 + Qk22BAAAAAAAADYEAAAoAAAAAgAAACAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAXFNM/9HLx//SzMj/083J/9TOyv/Vz8v/1tDN/9fRzv/Y08//2dTQ/9rV0f/b1tP/3NfU/93Y1f/e2tb/39vY/+Dc2f/h3dr/5OLf/+bk4f/o5uP/6ujm/+zq6P/t7Or/7+7s//Hw7//z8vH/9fTz//f29f//////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/x0AAAAAAAAAABEAAAAQAAAADwAAAA4AAAANAAAADAAAAAsAAAAKAAAACQAAAAgAAAAHAAAABgAAAAUAAAAEAAAAAwAAAAIAAAABAAAAEgAAABMAAAAUAAAAFQAAABYAAAAXAAAAGAAAABkAAAAaAAAAGwAAABwAAAAAAAAdAAAA + + + 4 + BUTTON_MIDDLE_FOCUSED + 0 + Qk22BAAAAAAAADYEAAAoAAAAAQAAACAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAXFNM/2fX//9q1///bdj//3DZ//902v//d9v//3rc//993f//gd7//4Te//+H3///i+D//47h//+R4v//lOP//5jk//+b5f//nub//6fo//+t6v//suz//7ju//+98P//w/L//8j0///O9v//0/j//9n6///e/P//5P7//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAASAAAAEQAAABAAAAAPAAAADgAAAA0AAAAMAAAACwAAAAoAAAAJAAAACAAAAAcAAAAGAAAABQAAAAQAAAADAAAAAgAAAAEAAAATAAAAFAAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAAAAAA + + + 4 + BUTTON_MIDDLE_HOTTRACKING + 0 + Qk22BAAAAAAAADYEAAAoAAAAAQAAACAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAab3//3Xb//942///e9z//37d//+B3v//hN///4fg//+K4f//jeL//5Dj//+T4///luT//5nl//+c5v//n+f//6Lo//+l6f//qOr//6vr//+u7P//sez//7Tt//+37v//uu///73w///A8f//w/L//8bz///J9P//zPX//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAABAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAATAAAAFAAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAAAAAA + + + 4 + BUTTON_MIDDLE_NOTFOCUSED + 0 + Qk22BAAAAAAAADYEAAAoAAAAAQAAACAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAXFNM/9HLx//SzMj/083J/9TOyv/Vz8v/1tDN/9fRzv/Y08//2dTQ/9rV0f/b1tP/3NfU/93Y1f/e2tb/39vY/+Dc2f/h3dr/4t7b/+Ti3//m5OH/6Obj/+ro5v/s6uj/7ezq/+/u7P/x8O//8/Lx//X08//39vX/+fj4/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAASAAAAEQAAABAAAAAPAAAADgAAAA0AAAAMAAAACwAAAAoAAAAJAAAACAAAAAcAAAAGAAAABQAAAAQAAAADAAAAAgAAAAEAAAATAAAAFAAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAAAAAA + + + 4 + BUTTON_NOTFOCUSED_FONTCOLOR + 4406327 + + + + 4 + BUTTON_RIGHT_FOCUSED + 0 + Qk22BAAAAAAAADYEAAAoAAAAAgAAACAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAXFNM/2fX//9q1///bdj//3DZ//902v//d9v//3rc//993f//gd7//4Te//+H3///i+D//47h//+R4v//lOP//5jk//+b5f//p+j//63q//+y7P//uO7//73w///D8v//yPT//872///T+P//2fr//978////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAdAAAAAAAAEQAAABAAAAAPAAAADgAAAA0AAAAMAAAACwAAAAoAAAAJAAAACAAAAAcAAAAGAAAABQAAAAQAAAADAAAAAgAAAAEAAAASAAAAEwAAABQAAAAVAAAAFgAAABcAAAAYAAAAGQAAABoAAAAbAAAAHAAAAAAAAAAAHQAA + + + 4 + BUTTON_RIGHT_HOTTRACKING + 0 + Qk22BAAAAAAAADYEAAAoAAAAAgAAACAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAab3//3jb//973P//ft3//4He//+E3///h+D//4rh//+N4v//kOP//5Pj//+W5P//meX//5zm//+f5///ouj//6Xp//+o6v//q+v//67s//+x7P//tO3//7fu//+67///vfD//8Dx///D8v//xvP//8n0////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAdAAAAAAAAAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAAEwAAABQAAAAVAAAAFgAAABcAAAAYAAAAGQAAABoAAAAbAAAAHAAAAAAAAAAAHQAA + + + 4 + BUTTON_RIGHT_NOTFOCUSED + 0 + Qk22BAAAAAAAADYEAAAoAAAAAgAAACAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAXFNM/9HLx//SzMj/083J/9TOyv/Vz8v/1tDN/9fRzv/Y08//2dTQ/9rV0f/b1tP/3NfU/93Y1f/e2tb/39vY/+Dc2f/h3dr/5OLf/+bk4f/o5uP/6ujm/+zq6P/t7Or/7+7s//Hw7//z8vH/9fTz//f29f//////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAdAAAAAAAAEQAAABAAAAAPAAAADgAAAA0AAAAMAAAACwAAAAoAAAAJAAAACAAAAAcAAAAGAAAABQAAAAQAAAADAAAAAgAAAAEAAAASAAAAEwAAABQAAAAVAAAAFgAAABcAAAAYAAAAGQAAABoAAAAbAAAAHAAAAAAAAAAAHQAA + + + 4 + CONTAINER_BORDERCOLOR + 6050636 + + + + 4 + EXPLORERBAR_BACKGROUND + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAM1CAIAAAA+dAz4AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAd0SU1FB9gGBBEaNlDo8BAAAAEsSURBVEhLvcNFriMBDEDBt84PMzMzMzPn/reZreXttFxS8fv9+J/f7xcnfz4fnPp+v3Hy6/XCyc/nE6c+Hg+cfL/fcfLtdsPy9XrF+uVywfr5fMb66XTC+vF4xPLhcMD6fr/H+m63w/p2u8X6ZrPB8nq9xvpqtcL6crnE+mKxwPp8Psf6bDZDnk6nyJPJBH08HiOPRiP04XCIPBgM0Pv9PnKv10PvdrvInU4Hvd1uI7daLfRms4ncaDTQ6/U6cq1WQ69Wq8iVSgW9XC4jl0ol9GKxiFwoFNDz+TxyLpdDz2azyJlMBj2dTiOnUin0ZDKJnEgk0OPxOHIsFkOPRqPIkUgEPRwOI4dCIfRgMIgcCATQ/X4/ss/nQ/d6vcgejwfd7XYj//39obtcLsR/UBotgOLhPgUAAAAASUVORK5CYII= + + + 4 + EXPLORERBAR_BORDERCOLOR + 6050636 + + + + 4 + EXPLORERBAR_NORMALGROUPBACKGROUND + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAZCAMAAADHTrRNAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAwBQTFRFvcHIv8PKwcXMw8fNxcnPx8vRyc3Ty8/UztHW0NPY0tXZ1Nfb1tnd2Nvf2t3g3N/i3+Hk4ePl4+Xn5efp5+nr6evs6+3u7e/w8PHyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXu51mAAAAAlwSFlzAAAOwwAADsMBx2+oZAAAAAd0SU1FB9cEEhA2Npb/GH8AAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zMECERxAAAAAtSURBVBhXBcEJAkAgAACwUVSu5P7/S20+r8ftcjo0u2qzWswmRZaMBlHQ6/gBJ6YBLavTn8UAAAAASUVORK5CYII= + + + 4 + EXPLORERBAR_NORMALGROUPCOLLAPSEHIGHLIGHT + 0 + iVBORw0KGgoAAAANSUhEUgAAAPEAAAAZCAMAAADXAjjUAAAABGdBTUEAALGPC/xhBQAAAwBQTFRFAAAATFNcWlpa/9dn/9hq/9lt/9pz/9t3/9x6/919/9+D/9+G/+CJ/+GM/+OS/+SW/+SZ/+mn/+2z/++4//G+zc3N//PD//bO//jT//rZ//zfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9cpOYQAAAQB0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zMECERxAAAAB6SURBVFhH5c/ZAYJQDADBl4gX3kdA7b9P3A+0CHY6mDaFy9QiPiYRLd4ujF8ujEcXxoML46cL44cL47sL45sL45VB/ZOMO4HK+i0Zr5evMrPmJuPN8hHOnJuMty6Mdy6M9y6MexfGBxfGRxfGJxfGZxfGFxfGVxfGNl9j1DVou2A5uQAAAABJRU5ErkJggg== + + + 4 + EXPLORERBAR_NORMALGROUPCOLLAPSENOTHIGHLIGHT + 0 + iVBORw0KGgoAAAANSUhEUgAAAPEAAAAZCAMAAADXAjjUAAAABGdBTUEAALGPC/xhBQAAAwBQTFRFAAAATFNcTVNdWlpazc3Nx8vRyMzRyc3Sy8/UzNDVzdHWz9LX0dTZ0tba09fb1Njc19re2Nvf2dzg3+Lk4+bo5ujq6Ors6uzt7/Dx8fLz8/T19fb3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9wsOTAAAAQB0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zMECERxAAAAB6SURBVFhH5c/ZAYJQDADBFxM8UbzP/uvE/UCLYKeDaWO4jC3iY7KIFm8Xxi8Xxk8Xxg8XxncXxjcXxlcXxhcXxp1B/ZOMlwKV9VsyXs1fZWZNTcbr+SOcOTUZb1wYb10Y71wY9y6M9y6MDy6MBxfGRxfGJxfGZxfGNl8W51tGcOfwogAAAABJRU5ErkJggg== + + + 4 + EXPLORERBAR_NORMALGROUPEXPANDHIGHLIGHT + 0 + iVBORw0KGgoAAAANSUhEUgAAAPEAAAAZCAMAAADXAjjUAAAABGdBTUEAALGPC/xhBQAAAwBQTFRFAAAATFNcWlpa/9dn/9hq/9lt/9pz/9t3/9x6/919/9+D/9+G/+CJ/+GM/+OS/+SW/+SZ/+mn/+2z/++4//G+zc3N//PD//bO//jT//rZ//zfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9cpOYQAAAQB0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zMECERxAAAAB6SURBVFhH5c8LFoFQFEDRdxNRUj4Xmf88c1orBtHZM9hlDpe5RHxMIkpMLozfLoxfLoyfLowfLozvLoxvLoyvLox321ct1ibjevuScK5NxnuBrPK3ZHwwyH+ScePC+OjC+OTCuHVh3LkwPrsw7l0YX1wYDy6MRxfGNl+y5DV2CCWP6gAAAABJRU5ErkJggg== + + + 4 + EXPLORERBAR_NORMALGROUPEXPANDNOTHIGHLIGHT + 0 + iVBORw0KGgoAAAANSUhEUgAAAPEAAAAZCAMAAADXAjjUAAAABGdBTUEAALGPC/xhBQAAAwBQTFRFAAAATFNcTVNdWlpazc3Nx8vRyMzRyc3Sy8/UzNDVzdHWz9LX0dTZ0tba09fb1Njc19re2Nvf2dzg3+Lk4+bo5ujq6Ors6uzt7/Dx8fLz8/T19fb3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9wsOTAAAAQB0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zMECERxAAAAB7SURBVFhH5c+JEYJAEADBW1k/UMAPRfOPE8YqNAimM+gyhctUIj4mmyjxdmE8ujB+uTB+ujAeXBg/XBjfXRjfXBhv16/6WpqMd+uXhHNpMt4LZJW/JeODQf6TjI8ujGsXxo0L45ML47ML49aFcefCuHdhfHFhfHVhbDMDi8dbVPxDpfQAAAAASUVORK5CYII= + + + 4 + EXPLORERBAR_NORMALGROUPHIGHLIGHT_FORECOLOR + 0 + + + + 4 + EXPLORERBAR_NORMALGROUPNOTHIGHLIGHT_FORECOLOR + 4406327 + + + + 4 + EXPLORERBAR_SPECIALGROUPBACKGROUND + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAZCAMAAADHTrRNAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAwBQTFRFvcHIv8PKwcXMw8fNxcnPx8vRyc3Ty8/UztHW0NPY0tXZ1Nfb1tnd2Nvf2t3g3N/i3+Hk4ePl4+Xn5efp5+nr6evs6+3u7e/w8PHyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXu51mAAAAAlwSFlzAAAOwwAADsMBx2+oZAAAAAd0SU1FB9cEEhA2Npb/GH8AAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zMECERxAAAAAtSURBVBhXBcEJAkAgAACwUVSu5P7/S20+r8ftcjo0u2qzWswmRZaMBlHQ6/gBJ6YBLavTn8UAAAAASUVORK5CYII= + + + 4 + EXPLORERBAR_SPECIALGROUPCOLLAPSEHIGHLIGHT + 0 + iVBORw0KGgoAAAANSUhEUgAAAPEAAAAZCAMAAADXAjjUAAAABGdBTUEAALGPC/xhBQAAAwBQTFRFAAAATFNcWlpa+4w8+5A++5RB/JxF/KBH/KRK/6xD/KhM/69K/7FN/bBQ/7NR/bNT/7RU/bdV/7db/rtX/7hf/7pi/7tm/sNc/sde/stgzc3NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2cQjSAAAAQB0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zMECERxAAAAB6SURBVFhH5c/ZAYJQDADBl4gX3geo6b9P3A+0CHY6mDaFy9QiRpOIFoML46cL47sL46sL47ML46ML44ML470L45VB/ZOMO4HK+i0Zr5evMrPmJuPN8hHOnJuMty6Mdy6MexfGJxfGFxfGNxfGDxfGLxfGbxfGHxfGNl+kyDDew6jozgAAAABJRU5ErkJggg== + + + 4 + EXPLORERBAR_SPECIALGROUPCOLLAPSENOTHIGHLIGHT + 0 + iVBORw0KGgoAAAANSUhEUgAAAPEAAAAZCAMAAADXAjjUAAAABGdBTUEAALGPC/xhBQAAAwBQTFRFAAAATFNcWlpa/6s//65C/7FG/7dM/7pQ/71T/7xu/8BW/8Zd/slg/sxj/s9n/8F5/8R//tVt/thx/tt0/8aE/8mK/86U/9Ga/9Sf/9alzc3NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATe31SwAAAQB0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zMECERxAAAAB6SURBVFhH5c/ZAYJQDADBl4gX3geo6b9P3A+0CHY6mDaFy9QiPiYRLd4ujF8ujEcXxoML46cL46sL44sL470L45VB/ZOMO4HK+i0Zr5evMrPmJuPN8hHOnJuMty6Mdy6MexfGBxfGRxfGJxfGZxfGNxfGdxfGDxfGNl/oDzDYzSa/gwAAAABJRU5ErkJggg== + + + 4 + EXPLORERBAR_SPECIALGROUPEXPANDHIGHLIGHT + 0 + iVBORw0KGgoAAAANSUhEUgAAAPEAAAAZCAMAAADXAjjUAAAABGdBTUEAALGPC/xhBQAAAwBQTFRFAAAATFNcWlpa+4w8+5A++5RB/JxF/KBH/KRK/6xD/KhM/69K/7FN/bBQ/7NR/bNT/7RU/bdV/7db/rtX/7hf/7pi/7tm/sNc/sde/stgzc3NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2cQjSAAAAQB0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zMECERxAAAAB6SURBVFhH5c+JEYJAEADBWxRRfMAPdfPPE8YqIAimM+gyhstYIgaTiBJvF8YvF8YPF8a9C+ObC+OLC+OzC+OTC+Pd9lV/c5PxfvuScM5NxrVAVrksGR8Mck0yblwYH10Yty6Mry6MOxfGdxfGTxfGHxfGXxfGPxfGNhPlqjDsldpZVgAAAABJRU5ErkJggg== + + + 4 + EXPLORERBAR_SPECIALGROUPEXPANDNOTHIGHLIGHT + 0 + iVBORw0KGgoAAAANSUhEUgAAAPEAAAAZCAMAAADXAjjUAAAABGdBTUEAALGPC/xhBQAAAwBQTFRFAAAATFNcWlpa/6s//65C/7FG/7dM/7pQ/71T/7xu/8BW/8Zd/slg/sxj/s9n/8F5/8R//tVt/thx/tt0/8aE/8mK/86U/9Ga/9Sf/9alzc3NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATe31SwAAAQB0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zMECERxAAAAB6SURBVFhH5c+JEYJAEADBWxRRfMAPdfPPE8YqIAimM+gyhstYIn4mESW+Low/LowHF8ZvF8YvF8a9C+POhfHJhfFu+6q/ucl4v31JOOcm41ogq1yWjA8GuSYZNy6Mjy6MWxfGZxfGFxfGVxfGNxfGdxfGDxfGTxfGNhMpADDmnmek8wAAAABJRU5ErkJggg== + + + 4 + EXPLORERBAR_SPECIALGROUPHIGHLIGHT_FORECOLOR + 0 + + + + 4 + EXPLORERBAR_SPECIALGROUPNOTHIGHLIGHT_FORECOLOR + 4406327 + + + + 4 + FORM_BACKGROUND + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAGmCAIAAAAyGXk8AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wUEDBkZchxmrAAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAAO0lEQVR4nGMIDg5mYmBgwMD////HKk6pWlqrH0xuGXX70FA/mNwy6nb6qIfJodP45IhRQwu54WgvATUABhfeaR6ThosAAAAASUVORK5CYII= + + + 4 + OUTLOOKNAVBAR_BORDERCOLOR + 6050636 + + + + 4 + OVERFLOWPANELBUTTON_FOCUSEDNOTSELECTED + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAfCAIAAACpqzA1AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wQSEQARuytWVgAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAAL0lEQVR4nGPwCY5h+P/vCRPDv19MDP9+E0e/P8DEwMDMxMAIwyxIbCifAY8chA0AQtMbuVLLaCAAAAAASUVORK5CYII= + + + 4 + OVERFLOWPANELBUTTON_FOCUSEDSELECTED + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAfCAIAAACpqzA1AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wQSEQENtjE7WAAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAARUlEQVR4nGPwCY5h+L83k4nh318mhv9/EPT/v0wM/5BoJPk/D34yMbAwMTGwMDMxsjAxMbAyQ/lMTIwsUDY2Mag4I0QvAE5EHG3Zw2FMAAAAAElFTkSuQmCC + + + 4 + OVERFLOWPANELBUTTON_NOTFOCUSEDSELECTED + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAfCAIAAACpqzA1AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wQSEQADSJInHgAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAAM0lEQVR4nGPwCY5h+H9zFRPD319MDH9/Q+h/vxF8FDaU/nCR6T8zMxMDMwsTAzrNQrQ4AGHgHI44vfxfAAAAAElFTkSuQmCC + + + 4 + OVERFLOWPANEL_BACKGROUND + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAfCAIAAACpqzA1AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wQSEQAjc/wH1gAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAAM0lEQVR4nGPwCY5h+PHjJ9Pff/+Y/iFhBP8/Gv8f04uXb5kYGRlRMBOMzYRFDCrOhKoHAKofJ9GxStIrAAAAAElFTkSuQmCC + + + 4 + OVERFLOWPANEL_MENUBUTTON + 0 + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAADAFBMVEUxNDHr6+v///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzQofpAAABAHRSTlP//wD/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////Zg+QzwAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAAd0SU1FB9cEEhEyF784pxIAAAAHdEVYdEF1dGhvcgCprsxIAAAADHRFWHREZXNjcmlwdGlvbgATCSEjAAAACnRFWHRDb3B5cmlnaHQArA/MOgAAAA50RVh0Q3JlYXRpb24gdGltZQA19w8JAAAACXRFWHRTb2Z0d2FyZQBdcP86AAAAC3RFWHREaXNjbGFpbWVyALfAtI8AAAAIdEVYdFdhcm5pbmcAwBvmhwAAAAd0RVh0U291cmNlAPX/g+sAAAAIdEVYdENvbW1lbnQA9syWvwAAAAZ0RVh0VGl0bGUAqO7SJwAAACRJREFUeJxjYEIDDLQTYAABZAFGIJ8RRQsjjA83A8anpcOQAAAD1AHqqEVm4QAAAABJRU5ErkJggg== + + + 4 + PANELBUTTON_FOCUSEDNOTSELECTED + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAgCAIAAABch4VNAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wQSEDMu+OR0bAAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAAOElEQVR4nGPwCY5h+P/vCRPDv99MDP9+QTGU/f83kjiS/LsDTAyMzAjMwMzEwMiCKgYXR8csyOIAsaQbvOiRHe8AAAAASUVORK5CYII= + + + 4 + PANELBUTTON_FOCUSEDSELECTED + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAgCAIAAABch4VNAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wQSEDo3TU1n5QAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAAQ0lEQVR4nGPwCY5h+L83k4nh318mhv9/EPT/v0wM/5BoJPk/D34yMbAwMTGwMDMxsjBB2RA+AwsTQowZjQ+VR4gxAwC/IBxvvCRTAgAAAABJRU5ErkJggg== + + + 4 + PANELBUTTON_NOTFOCUSEDSELECTED + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAgCAIAAABch4VNAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wQSEDQgUB3PrAAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAAOUlEQVR4nGPwCY5h+H9zFRPD399MDP9+Qei/v5gY/v1GY/9CqHl/kYmBmZmJgZkFSmNn/8cjB2UDAK/bHJKto9KQAAAAAElFTkSuQmCC + + + 4 + PANELBUTTON_NOTSELECTED_FONTCOLOR + 4406327 + + + + 4 + PANELBUTTON_SELECTED_FONTCOLOR + 0 + + + + 4 + PANELVERTICAL_FOCUSED_BACKCOLOR + 10676223 + + + + 4 + PANELVERTICAL_FONTCOLOR + 0 + + + + 4 + PANELVERTICAL_NOTFOCUSED_BACKCOLOR + 15461355 + + + + 4 + PANEL_BACKGROUND + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAgCAIAAABch4VNAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wQSEDQ0Sscb0QAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAANElEQVR4nGPwCY5h+PHjJ9Pff/+Y/iFhBP8/Gv8f04uXb5kYGRmYGBkZMTATMp8JhzgCAwBI8ifTKbUPUAAAAABJRU5ErkJggg== + + + 4 + SHORTCUTMENU_DOWN_ENABLED + 0 + Qk02BQAAAAAAADYEAAAoAAAAEAAAABAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAoFAw/6BYMP+wWDD/sGBA/7BoQP/AaED/wHBQ/8B4UP/QeFD/4HhQ/+CAUP/giFD/8IhQ/9CIYP/wkGD//5Bg/+CQcP/gmHD/8Jhw//CgcP//oHD//6iA//+wgP//sJD//7iQ///AoP//////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaAhoaGhoaGhoaGhoaGhoaAgUBGhoaGhoaGhoaGhoaAgoJBQAaGhoaGhoaGhoaBxIUCwgFABoaGhoaGhoaExEQFQ4KAAMEGhoaGhoaGhoaDRYPDAMaGhoaGhoaGhoaGhAZFQ4EGhoaGhoaGhoaGhoRGRgXBhoaGhoaGhoaGhoaExEQDQ0aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho= + + + 4 + SHORTCUTMENU_DOWN_DISABLED + 0 + Qk02BQAAAAAAADYEAAAoAAAAEAAAABAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAT09P/1RUVP9WVlb/X19f/2RkZP9mZmb/b29v/3R0dP92dnb/d3d3/3x8fP+BgYH/g4OD/4SEhP+MjIz/jo6O/4+Pj/+UlJT/lpaW/5qamv+cnJz/paWl/6qqqv+vr6//tLS0/729vf//////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaAhoaGhoaGhoaGhoaGhoaAgUBGhoaGhoaGhoaGhoaAgoJBQAaGhoaGhoaGhoaBxIUCwgFABoaGhoaGhoaExEQFQ4KAAMEGhoaGhoaGhoaDRYPDAMaGhoaGhoaGhoaGhAZFQ4EGhoaGhoaGhoaGhoRGRgXBhoaGhoaGhoaGhoaExEQDQ0aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho= + + + 4 + SHORTCUTMENU_UP_ENABLED + 0 + Qk02BQAAAAAAADYEAAAoAAAAEAAAABAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAkEgg/6BIIP+gUCD/oFAw/6BYMP+wWDD/0Ggw/8BwQP/QcED/0HhA/9B4UP/QgFD/4IBQ/+CIYP/wkGD/8Jhg/+CYcP/woHD//6Bw//CogP//sJD//8Cg//////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgwDAAAAFhYWFhYWFhYWFhYMDQsHABYWFhYWFhYWFhYWDBMNCgEWFhYWFhYWFhYWFgwVDw0CFhYWFhYWFhYWEAgGFA8PBQIAFhYWFhYWFhYQFRQSDgkDFhYWFhYWFhYWFhEVFA0DFhYWFhYWFhYWFhYWERUEFhYWFhYWFhYWFhYWFhYQFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhY= + + + 4 + SHORTCUTMENU_UP_DISABLED + 0 + Qk02BQAAAAAAADYEAAAoAAAAEAAAABAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAARERE/0ZGRv9KSkr/T09P/1RUVP9WVlb/Y2Nj/2pqav9sbGz/cXFx/3Z2dv96enr/fHx8/4aGhv+MjIz/kZGR/5SUlP+ampr/nJyc/6SkpP+vr6//vb29//////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgwDAAAAFhYWFhYWFhYWFhYMDQsHABYWFhYWFhYWFhYWDBMNCgEWFhYWFhYWFhYWFgwVDw0CFhYWFhYWFhYWEAgGFA8PBQIAFhYWFhYWFhYQFRQSDgkDFhYWFhYWFhYWFhEVFA0DFhYWFhYWFhYWFhYWERUEFhYWFhYWFhYWFhYWFhYQFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhY= + + + 4 + SHRINKBUTTON_FOCUSEDNOTSHRUNK + 0 + iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAIAAADZrBkAAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wQSEQIPcxIJtwAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAA+klEQVR4nNWSv0oDQRDGv9lsgkRBK19E9wUEQZCAj2FjIRZahBTBIu8igiC+RNL4AHYKgiD45wx3c7v32ZzcnBFEuwxT/IrfsjP7rZB3+Ht5xOI/x5jyZb2tsyaux0qRshZ/lWMsvjXQA2Vr5xAUy9bxaA8pfh2U7d0jAEgKGDampxlSuhukC3snAGY3E6Yy7J/VXL5b0yOZ3bqu9q7HqDQMRjXHjPpsh3KIedP6OrsaAgiDEZI2TIjrW7P1JNX8kfo2vTwFEA7OmcqG4a3pkHLbnD9AX6YXxwBQaYuNJsXtcDE2WdkUv8r4wfzJ8i9xM7vnT2wCWIKv/AnvwesRFLBdxQAAAABJRU5ErkJggg== + + + 4 + SHRINKBUTTON_FOCUSEDSHRUNK + 0 + iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAIAAADZrBkAAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wQSEQI1tR7QBQAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAA/UlEQVR4nNWSTUoDQRCFX/WMYTCuXHiSZC4QAoIgiJdwJYggBCULEQI5SiAIgpcYNzmAO1f+bEYS7L+acjPYPZogZhGwqMXX8B4P+hWJPOLvk4rX69jgzVppvNG0yEbJDlQLlRWex/zTpsA6LNDpnQAg2mpwrGEN1kq8CcsOQKd/KqJiBrKGzJtmmnt/uB8B6O6fg21gEKlsZVr18SxuUdxdA+geDIRdYEliZeMnqbULQX44BFDcXoFtfnRTsy1jZYq4N0pq3fQClc2PxzW7Uszb6gLYASgmZ2JKSre/WMzrtwLIzC7DI9ujtC1+Ifol5l/qlvnTUl5i+w+n/AnC4uQ6W2ZAqgAAAABJRU5ErkJggg== + + + 4 + SHRINKBUTTON_NOTFOCUSEDNOTSHRUNK + 0 + iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAIAAADZrBkAAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wQSER0e1Pgn2wAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAA6klEQVR4nNWSQU7DQAxFvz2ZtCdD0NBC4JZQKKWCYyCx4Q4ItjQJntgsIgUnZAEskLC8eIv3NZ7x0PPLK35emar9Lqb/ITZxtxhjCNy2KiKee4Fb1VGHEIiwKA6I4Nk74yHzPBLT8fIQgJp59uZgyFkemXi1OgKwvbk3tZPTRcdJkjcHpxFz5202d2pWlkXHKbV10/ihWF2JyPXVDkBZFqbaMxFizLw5iFVVLSLr9S2As/OlmvXMzKOY+d5Xjbyny4stAFPz7DV6eHz6urf5fJZlIaW2rhvPn0/STv2St301ydML+H797Vf+AK7lBzAzfNC5AAAAAElFTkSuQmCC + + + 4 + SHRINKBUTTON_NOTFOCUSEDSHRUNK + 0 + iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAIAAADZrBkAAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wQSESAWsMvnVwAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAA6klEQVR4nNWTTU4DMQyFbcfD9GQIWjql0FNCobQIjoHUDXdAsIUmdWKzGCkkMCxgV+stvkjvKT9PwZfXN/j7sKr9L6aHEPu6W9M0zlFKKiIl/4xRUs1ChPHkGBGccyWXnl6k5ZgBwNn0BAlLZnZaD6laVpS4vnsEgK47NbXMhNQwl85qt50PMabV6gEAZudjNcuMVDmrl2zbI0SYzycAcHtzb6oXl9OeRaR0VjEi6n3L5UbNFouuZxHxYf9rAaYGANdXa9lHZpfZh/CtAHzaPufFaNQyuxiT96HkgbpTccj3j90gD8QO4Qd8AovwAUbR4yUTAAAAAElFTkSuQmCC + + + 4 + SIGNS_MINUS + 0 + iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjIwWZ92UQAAAI5JREFUKFNjfP76/f+dRy8ygMEPCAUCH6B8a0NxBoYFGw78xwA//v//8OH//wdAwsAj4T+mIriC//8PXHgAVbQCySQkBQ9efPi/4QCaIpCx6BiuaALIJJAJQPwA5A4gceHGB6BVH/4v2HEBYh1IEYYCbIpAJoAcueEEEAPdATIBhsEmnb54HcMtyG4DyQMAS+rq4jk+qVQAAAAASUVORK5CYII= + + + 4 + SIGNS_PLUS + 0 + iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjIwWZ92UQAAAJZJREFUKFNjfP76/f+dRy8ygMEPCAUCH6B8a0NxBoYFGw78xwA//v//8OH//wdAwsAj4T+GIpAgRMH//wcuPIAqWoFkEtAEkCKQggcvPvzfcABNEUgSHcMVTQCZBHIDEINMACm8cOMD0KoP/xfsuACxDqQIpuABUBVI8AA2RTBHbjjxAOwOkAkwDDbp9MXrGG5BdhtIHgAc3OMlaQBkAQAAAABJRU5ErkJggg== + + + 4 + SPLITTER_BACKGROUND + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAICAIAAAC3eAIWAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wQSEDUKkr03OwAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAAH0lEQVR4nGPwCY5h+P//P9PHT5+Zvn//wfT9x09kDAA7aBVheDtkwAAAAABJRU5ErkJggg== + + + 4 + SPLITTER_GRIPPER + 0 + iVBORw0KGgoAAAANSUhEUgAAACMAAAAICAIAAAD80NH7AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wQSETYYS+t/hwAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAAY0lEQVR4nGP0CY5hoAtg/P//P31sYvn46TOdbPr+/QdWialTJjEwMGTn5JHBxmHTj5+45AICAoQEBZ8+f0EGGxMwXr1xB5dNKoryDAwMd+4/JIONxaYzF67isom6AF/oURcAAOBrRcuBfyBFAAAAAElFTkSuQmCC + + + 4 + TITLE_BACKGROUND + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAaCAIAAAD5ZqGGAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wQSEDY2lv8YfwAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAAK0lEQVR4nGP4//8/08dPn5n+/vvH9A+O/yOxIfy/eOT+/fsHlccu9+/fPwC3ek15R4yagQAAAABJRU5ErkJggg== + + + 4 + TITLE_BACKGROUND_LEFT + 2 + + + + 4 + TITLE_BACKGROUND_WIDTH + 197 + + + + 4 + TITLE_BORDERCOLOR + 6050636 + + + + 4 + TITLE_FONTCOLOR + 0 + + + + 4 + TOOLTITLE_BACKGROUND + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAATCAIAAADeafBOAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABZJREFUGFdj+P//P8PdB48pxsdPXwQAge0yAQxSk2cAAAAASUVORK5CYII= + + + 4 + TOOLTITLE_FONTCOLOR + 0 + + + + 4 + ZOOMNAVBAR_BAR + 0 + Qk3+BAAAAAAAADYEAAAoAAAAAQAAADIAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAACgoK/wwMDP8NDQ3/Dw8P/xAQEP8SEhL/ExMT/xUVFf8WFhb/GBgY/xkZGf8aGhr/HBwc/x0dHf8fHx//ICAg/yIiIv8jIyP/JCQk/yYmJv8nJyf/KSkp/yoqKv8sLCz/LS0t/y8vL/9FRUX/eXl5/4CAgP+FhYX/jIyM/5KSkv+ZmZn/np6e/6Wlpf+rq6v/sbGx/7a2tv+8vLz/wcHB/8fHx//Ly8v/0dHR/9bW1v/a2tr/39/f/+Li4v/n5+f/6urq/+3t7f8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAABAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAATAAAAFAAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAfAAAAIAAAACEAAAAiAAAAIwAAACQAAAAlAAAAJgAAACcAAAAoAAAAKQAAACoAAAArAAAALAAAAC0AAAAuAAAALwAAADAAAAAxAAAA + + + 4 + ZOOMNAVBAR_REFLECTEDSEPARATOR + 0 + iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABGdBTUEAALGPC/xhBQAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjIwWZ92UQAAAD9JREFUaEPt0IEAAAAAw6D5Ux/khVBhwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwMDLwAAkMAABCDVySwAAAABJRU5ErkJggg== + + + 4 + ZOOMNAVBAR_SEPARATOR + 0 + iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABGdBTUEAALGPC/xhBQAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjIwWZ92UQAAAD9JREFUaEPt0IEAAAAAw6D5Ux/khVBhwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwMDLwAAkMAABCDVySwAAAABJRU5ErkJggg== + + + 4 + ZOOMNAVBAR_STACKBUTTON + 0 + iVBORw0KGgoAAAANSUhEUgAAAMAAAAAcCAYAAAA3ILBTAAABF0lEQVR4nO3cMW7CQBRF0WuU1kUovAHatNn/CuiyCyJKOnAKG8YQg02BjP6/R0LC43kSxTw0jGRASqy6uW6A9ci4FMEJ2AH788BwoX8Dm8FYy/0izLln3vyS+UfXP/2LVT/YcL34pagq4AuooRTAbY8yqYBPKAVw8SubCkoBpJQ+Bu/bkftjY8/cM29+yfzk3GEBbrdBS/+KN2/+FadAV9wCKTULoNQsgFKzAErNAig1j0HNR85PzvUY1HzU/Jy5boGUmwVQahZAqVkApWYBlJrHoOYj5yfnegxqPmp+ztzLFuh0b4IUVAulALvzgJTAEfiFUoA93d9EWAJFdwS2wAH+741quqflfUheEbV03/yHpT+I9Bb+AD0fBdMuQEabAAAAAElFTkSuQmCC + + + 5 + BUTTON_FOCUSED_FONTCOLOR + 0 + + + + 5 + BUTTON_LEFT_FOCUSED + 0 + Qk22BAAAAAAAADYEAAAoAAAAAgAAACAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAz5Nl/2fX//9q1///bdj//3DZ//902v//d9v//3rc//993f//gd7//4Te//+H3///i+D//47h//+R4v//lOP//5jk//+b5f//p+j//63q//+y7P//uO7//73w///D8v//yPT//872///T+P//2fr//978////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/x0AAAAAAAAAABEAAAAQAAAADwAAAA4AAAANAAAADAAAAAsAAAAKAAAACQAAAAgAAAAHAAAABgAAAAUAAAAEAAAAAwAAAAIAAAABAAAAEgAAABMAAAAUAAAAFQAAABYAAAAXAAAAGAAAABkAAAAaAAAAGwAAABwAAAAAAAAdAAAA + + + 5 + BUTTON_LEFT_HOTTRACKING + 0 + Qk22BAAAAAAAADYEAAAoAAAAAgAAACAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAab3//3jb//973P//ft3//4He//+E3///h+D//4rh//+N4v//kOP//5Pj//+W5P//meX//5zm//+f5///ouj//6Xp//+o6v//q+v//67s//+x7P//tO3//7fu//+67///vfD//8Dx///D8v//xvP//8n0////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/x0AAAAAAAAAAAEAAAACAAAAAwAAAAQAAAAFAAAABgAAAAcAAAAIAAAACQAAAAoAAAALAAAADAAAAA0AAAAOAAAADwAAABAAAAARAAAAEgAAABMAAAAUAAAAFQAAABYAAAAXAAAAGAAAABkAAAAaAAAAGwAAABwAAAAAAAAdAAAA + + + 5 + BUTTON_LEFT_NOTFOCUSED + 0 + Qk22BAAAAAAAADYEAAAoAAAAAgAAACAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAz5Nl///Rrf//0q///9Kw///Usv//1bX//9a3///XuP//2Lr//9i8///avv//3cT//9/H///gyv//4s7//+XS///n1f//6Nj//+ra///r3f//7eD//////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xUAAAAAAAAAAAoAAAAKAAAACQAAAAkAAAAIAAAABwAAAAcAAAAGAAAABQAAAAUAAAAEAAAABAAAAAMAAAADAAAAAgAAAAEAAAABAAAACwAAAAwAAAANAAAADgAAAA4AAAAPAAAAEAAAABEAAAASAAAAEwAAABQAAAAAAAAVAAAA + + + 5 + BUTTON_MIDDLE_FOCUSED + 0 + Qk22BAAAAAAAADYEAAAoAAAAAQAAACAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAz5Nl/2fX//9q1///bdj//3DZ//902v//d9v//3rc//993f//gd7//4Te//+H3///i+D//47h//+R4v//lOP//5jk//+b5f//nub//6fo//+t6v//suz//7ju//+98P//w/L//8j0///O9v//0/j//9n6///e/P//5P7//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAASAAAAEQAAABAAAAAPAAAADgAAAA0AAAAMAAAACwAAAAoAAAAJAAAACAAAAAcAAAAGAAAABQAAAAQAAAADAAAAAgAAAAEAAAATAAAAFAAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAAAAAA + + + 5 + BUTTON_MIDDLE_HOTTRACKING + 0 + Qk22BAAAAAAAADYEAAAoAAAAAQAAACAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAab3//3Xb//942///e9z//37d//+B3v//hN///4fg//+K4f//jeL//5Dj//+T4///luT//5nl//+c5v//n+f//6Lo//+l6f//qOr//6vr//+u7P//sez//7Tt//+37v//uu///73w///A8f//w/L//8bz///J9P//zPX//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAABAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAATAAAAFAAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAAAAAA + + + 5 + BUTTON_MIDDLE_NOTFOCUSED + 0 + Qk22BAAAAAAAADYEAAAoAAAAAQAAACAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAz5Nl///Rrf//0q///9Kw///Usv//1bX//9a3///XuP//2Lr//9i8///avv//28D//93E///fx///4Mr//+LO///l0v//59X//+jY///q2v//693//+3g///v4/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAALAAAACgAAAAoAAAAJAAAACQAAAAgAAAAHAAAABwAAAAYAAAAFAAAABQAAAAQAAAAEAAAAAwAAAAMAAAACAAAAAQAAAAEAAAAMAAAADQAAAA4AAAAPAAAADwAAABAAAAARAAAAEgAAABMAAAAUAAAAFQAAABYAAAAAAAAA + + + 5 + BUTTON_NOTFOCUSED_FONTCOLOR + 8998176 + + + + 5 + BUTTON_RIGHT_FOCUSED + 0 + Qk22BAAAAAAAADYEAAAoAAAAAgAAACAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAz5Nl/2fX//9q1///bdj//3DZ//902v//d9v//3rc//993f//gd7//4Te//+H3///i+D//47h//+R4v//lOP//5jk//+b5f//p+j//63q//+y7P//uO7//73w///D8v//yPT//872///T+P//2fr//978////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAdAAAAAAAAEQAAABAAAAAPAAAADgAAAA0AAAAMAAAACwAAAAoAAAAJAAAACAAAAAcAAAAGAAAABQAAAAQAAAADAAAAAgAAAAEAAAASAAAAEwAAABQAAAAVAAAAFgAAABcAAAAYAAAAGQAAABoAAAAbAAAAHAAAAAAAAAAAHQAA + + + 5 + BUTTON_RIGHT_HOTTRACKING + 0 + Qk22BAAAAAAAADYEAAAoAAAAAgAAACAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAab3//3jb//973P//ft3//4He//+E3///h+D//4rh//+N4v//kOP//5Pj//+W5P//meX//5zm//+f5///ouj//6Xp//+o6v//q+v//67s//+x7P//tO3//7fu//+67///vfD//8Dx///D8v//xvP//8n0////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAdAAAAAAAAAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAAEwAAABQAAAAVAAAAFgAAABcAAAAYAAAAGQAAABoAAAAbAAAAHAAAAAAAAAAAHQAA + + + 5 + BUTTON_RIGHT_NOTFOCUSED + 0 + Qk22BAAAAAAAADYEAAAoAAAAAgAAACAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAz5Nl///Rrf//0q///9Kw///Usv//1bX//9a3///XuP//2Lr//9i8///avv//3cT//9/H///gyv//4s7//+XS///n1f//6Nj//+ra///r3f//7eD//////wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAVAAAAAAAACgAAAAoAAAAJAAAACQAAAAgAAAAHAAAABwAAAAYAAAAFAAAABQAAAAQAAAAEAAAAAwAAAAMAAAACAAAAAQAAAAEAAAALAAAADAAAAA0AAAAOAAAADgAAAA8AAAAQAAAAEQAAABIAAAATAAAAFAAAAAAAAAAAFQAA + + + 5 + CONTAINER_BORDERCOLOR + 13603685 + + + + 5 + EXPLORERBAR_BACKGROUND + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAM1CAIAAAA+dAz4AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAd0SU1FB9gGBBEZOwV0324AAALXSURBVEhLpc5nVxNRFIXh8yvpoRkUu6KiICW0FAiE3juKFaQFEgIJhN6tYEFUiqK/wp25k2l3buJafnjWvHcfFkBD4T8UMRixGPFbZwDvgYWoc/Q59UeF0Bp9oV+kCKJlvfj2Bn8y80yP0dwZ9UC3UeCMugKnpjpnT4k50enwn5DqGH1M7RE+XpvvB0lmVK1o5ju1Tqta0Aov2vtN0qw1hTc0TR3xJo+oUfEVzTRMGB1iO6T6cXOe8S/kGdOrw1vy6rNOLd6S0ahP5B7VGEHLakY+ks5LvKFacYCGFwfk4uyT6/k+OQUczz5QPHb8jP1p1Hs0rwqb5InRO2xMpdYw3iYqht+SzmO8TZRjY96oHqE1ytC811Q2pLKhhQZxG9yj0ngG9qhEsYsWK+7fJd4ONlURuqgvlm162CfrxVegEDuzRYU9YgW46XRvUoHBA7w5XdgkG5L7Ip24yfLxze9cN9eBHe5x1rAZtK/RXaFV3Jg7bfHl4WfyWldiuo27pCVqGc27hU3RjFYsoZmbRk3YDG40hYnTiE3jOlq1iJY14Cu7hq+5BexQz1yNxxOiK//gcl2IVEE0Lxdbbq2ZeeyqS2iJW2SOLro1atAmcrAxAaaaZ8XGcc2SVeMCWsiJm9MvyY7FgTtkSXxidh9lcmaw6WVUzVBs07hPU3pEZWwW3C2VXrJUiKXhpihHl09xUrHplOGtmERPUoqIDTeNZNsEmSrFLkvCVzWO1ihBQ6LQGG5QPEYJ/20cv0OGv5cgY397whz+98TSSU4SNmaKsZnxYlclo5PLoqbRIjOUXM6kcHzYNCrQCj/aT6lmKmcp1VQAe4DSIqqM5rCZsGOzz5NFKIgbOHjpjhBxnNgkC6YysGc4FynDJRLGTaM6TJmKJbRAzTJlamShmRWVG62zircqGy2pjViLYR03qFunC5wNbAYevCWbEqupLbLWi2xTTr1GA1qxg+b8BeyFzMSDGLvHAAAAAElFTkSuQmCC + + + 5 + EXPLORERBAR_BORDERCOLOR + 13603685 + + + + 5 + EXPLORERBAR_NORMALGROUPBACKGROUND + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAZCAMAAADHTrRNAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAwBQTFRFr9L/sdP/s9T/tdX/t9b/udj/vNn/vtr/wNv/wtz/xd7/yuD/zeL/z+T/0eX/0+b/1uf/2Oj/2ur/3Ov/3uz/4O3/4+//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvaN0tQAAAAlwSFlzAAALEgAACxIB0t1+/AAAAAd0SU1FB9cEChMFL5EUFKYAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zMECERxAAAAAtSURBVBhXDcKHDYAgAACwKijgQlz/nyppfV6P26U5VYfdZu2WrsiS2SQKRgM/I+YBE1oe6NkAAAAASUVORK5CYII= + + + 5 + EXPLORERBAR_NORMALGROUPCOLLAPSEHIGHLIGHT + 0 + iVBORw0KGgoAAAANSUhEUgAAAPEAAAAZCAMAAADXAjjUAAAABGdBTUEAALGPC/xhBQAAAwBQTFRFAAAAFUKLZZPP/9dn/9hq/9lt/9pz/9t3/9x6/919/9+D/9+G/+CJ/+GM/+OS/+SW/+SZ/+mn/+2z/++4//G+zc3N//PD//bO//jT//rZ//zfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx5UnoAAAAQB0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zMECERxAAAAB6SURBVFhH5c/ZAYJQDADBl4gX3kdA7b9P3A+0CHY6mDaly9QyPyaZLd8ujF8ujEcXxoML46cL44cL47sL45sL45VB/ZOMO4GK+i0Zr5evIqLmJuPN8hGOmJuMty6Mdy6M9y6MexfGBxfGRxfGJxfGZxfGFxfGVxfGNl9ftTdv1q46sgAAAABJRU5ErkJggg== + + + 5 + EXPLORERBAR_NORMALGROUPCOLLAPSENOTHIGHLIGHT + 0 + iVBORw0KGgoAAAANSUhEUgAAAPEAAAAZCAMAAADXAjjUAAAABGdBTUEAALGPC/xhBQAAAwBQTFRFAAAAFUKLZZPPrdH/r9L/sdP/s9T/tNX/ttb/udb/vNn/vtr/zc3NxN3/yuD/zuL/0uX/2Oj/2ur/3ev/4O3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv2mX3gAAAQB0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zMECERxAAAAB1SURBVFhH7dHJDYAwEMXQzLBD2Om/1fAPUUQNMe7gySE5qxTcH1LuwW9WEl+sJD5ZSXywknhnhRRvrPR4ZSVxQygWJEQcrZAlbusvmlnMTIm7+hPYLDMZ4u9TiXtWEg+sJB5ZSTyx+sX1/9bjmRVSvLDSY1ovceXrrUHqwdkAAAAASUVORK5CYII= + + + 5 + EXPLORERBAR_NORMALGROUPEXPANDHIGHLIGHT + 0 + iVBORw0KGgoAAAANSUhEUgAAAPEAAAAZCAMAAADXAjjUAAAABGdBTUEAALGPC/xhBQAAAwBQTFRFAAAAFUKLZZPP/9dn/9hq/9lt/9pz/9t3/9x6/919/9+D/9+G/+CJ/+GM/+OS/+SW/+SZ/+mn/+2z/++4//G+zc3N//PD//bO//jT//rZ//zfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx5UnoAAAAQB0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zMECERxAAAAB6SURBVFhH5c8LFoFQFEDR1/UJSVEXmf88c1orBtHZM9hlDpe5RHxMIkpMLozfLoxfLoyfLoxHF8aDC+OHC+O7C+Pd9lWLtcl4v31JONcm44NAVvlbMj4a5D/JuHZhfHJhfHZhfHFh3Lgwvrowbl0Y31wYdy6MexfGNl+eszd9cYFXPgAAAABJRU5ErkJggg== + + + 5 + EXPLORERBAR_NORMALGROUPEXPANDNOTHIGHLIGHT + 0 + iVBORw0KGgoAAAANSUhEUgAAAPEAAAAZCAMAAADXAjjUAAAABGdBTUEAALGPC/xhBQAAAwBQTFRFAAAAFUKLZZPPrdH/r9L/sdP/s9T/tNX/ttb/udb/vNn/vtr/zc3NxN3/yuD/zuL/0uX/2Oj/2ur/3ev/4O3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv2mX3gAAAQB0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zMECERxAAAABySURBVFhH7dGJDYAwEMTA5Pjh+Om/1bBIQHrATAeWQzKWFMwOErNgO4uKNxYVrywqXlhUPLMgiycWPR5ZVFx8X7zcmYxiV7Dn4hLAoz+VelwR+BtJKc5XVVyzqLhhUXHLouKO5S/+/m897lmQxQOLHtOcoonrt+OKWOQAAAAASUVORK5CYII= + + + 5 + EXPLORERBAR_NORMALGROUPHIGHLIGHT_FORECOLOR + 0 + + + + 5 + EXPLORERBAR_NORMALGROUPNOTHIGHLIGHT_FORECOLOR + 8998176 + + + + 5 + EXPLORERBAR_SPECIALGROUPBACKGROUND + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAZCAMAAADHTrRNAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAwBQTFRFr9L/sdP/s9T/tdX/t9b/udj/vNn/vtr/wNv/wtz/xd7/yuD/zeL/z+T/0eX/0+b/1uf/2Oj/2ur/3Ov/3uz/4O3/4+//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvaN0tQAAAAlwSFlzAAALEgAACxIB0t1+/AAAAAd0SU1FB9cEChMFL5EUFKYAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zMECERxAAAAAtSURBVBhXDcKHDYAgAACwKijgQlz/nyppfV6P26U5VYfdZu2WrsiS2SQKRgM/I+YBE1oe6NkAAAAASUVORK5CYII= + + + 5 + EXPLORERBAR_SPECIALGROUPCOLLAPSEHIGHLIGHT + 0 + iVBORw0KGgoAAAANSUhEUgAAAPEAAAAZCAMAAADXAjjUAAAABGdBTUEAALGPC/xhBQAAAwBQTFRFAAAAFUKLZZPP+4w8+5A++5RB/JxF/KBH/KRK/6xD/KhM/69K/7FN/bBQ/7NR/bNT/7RU/bdV/7db/rtX/7hf/7pi/7tm/sNc/sde/stgzc3NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA65tKiQAAAQB0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zMECERxAAAAB6SURBVFhH5c/ZAYJQDADBl4gX3geo6b9P3A+0CHY6mDaly9QyR5PMloML46cL47sL46sL47ML46ML44ML470L45VB/ZOMO4GK+i0Zr5evIqLmJuPN8hGOmJuMty6Mdy6MexfGJxfGFxfGNxfGDxfGLxfGbxfGHxfGNl+gqTLlSSTRWgAAAABJRU5ErkJggg== + + + 5 + EXPLORERBAR_SPECIALGROUPCOLLAPSENOTHIGHLIGHT + 0 + iVBORw0KGgoAAAANSUhEUgAAAPEAAAAZCAMAAADXAjjUAAAABGdBTUEAALGPC/xhBQAAAwBQTFRFAAAAFUKLZZPP/6s//65C/7FG/7dM/7pQ/71T/7xu/8BW/8Zd/slg/sxj/s9n/8F5/8R//tVt/thx/tt0/8aE/8mK/86U/9Ga/9Sf/9alzc3NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf7KcigAAAQB0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zMECERxAAAAB6SURBVFhH5c/ZAYJQDADBl4gX3geo6b9P3A+0CHY6mDaly9QyPyaZLd8ujF8ujEcXxoML46cL46sL44sL470L45VB/ZOMO4GK+i0Zr5evIqLmJuPN8hGOmJuMty6Mdy6MexfGBxfGRxfGJxfGZxfGNxfGdxfGDxfGNl/j8DLfOpnpagAAAABJRU5ErkJggg== + + + 5 + EXPLORERBAR_SPECIALGROUPEXPANDHIGHLIGHT + 0 + iVBORw0KGgoAAAANSUhEUgAAAPEAAAAZCAMAAADXAjjUAAAABGdBTUEAALGPC/xhBQAAAwBQTFRFAAAAFUKLZZPP+4w8+5A++5RB/JxF/KBH/KRK/6xD/KhM/69K/7FN/bBQ/7NR/bNT/7RU/bdV/7db/rtX/7hf/7pi/7tm/sNc/sde/stgzc3NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA65tKiQAAAQB0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zMECERxAAAAB5SURBVFhH5c+JEYJAEADBYxXxBwW/zT9PGKuAIJjOoMsYLmOJeJtElHi5MB5cGD9dGHcujO8ujK8ujC8ujE8ujHfbV/3NTcb77UvCOTcZ1wJZ5bJkfDDINcm4cWF8dGF8dmF8c2HcujB+uDDuXRh/XBh/XRj/XBjbTNF5MvOzTGb+AAAAAElFTkSuQmCC + + + 5 + EXPLORERBAR_SPECIALGROUPEXPANDNOTHIGHLIGHT + 0 + iVBORw0KGgoAAAANSUhEUgAAAPEAAAAZCAMAAADXAjjUAAAABGdBTUEAALGPC/xhBQAAAwBQTFRFAAAAFUKLZZPP/6s//65C/7FG/7dM/7pQ/71T/7xu/8BW/8Zd/slg/sxj/s9n/8F5/8R//tVt/thx/tt0/8aE/8mK/86U/9Ga/9Sf/9alzc3NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf7KcigAAAQB0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zMECERxAAAAB5SURBVFhH5c+JEYJAEADBYxXxBwW/zT9PGKuAIJjOoMsYLmOJ+JlElPi6MP64MH67MH65MB5cGHcujFsXxicXxrvtq/7mJuP99iXhnJuMa4GsclkyPhjkmmTcuDA+ujA+uzC+uDC+ujC+uTC+uzB+uDB+ujDuXRjbTBTPMu1zQAfcAAAAAElFTkSuQmCC + + + 5 + EXPLORERBAR_SPECIALGROUPHIGHLIGHT_FORECOLOR + 0 + + + + 5 + EXPLORERBAR_SPECIALGROUPNOTHIGHLIGHT_FORECOLOR + 8998176 + + + + 5 + FORM_BACKGROUND + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAH9CAIAAABUUIEIAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1wUEDBsGzSIJ2wAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAAq0lEQVR4nM2UQQ5DIQhEB+5/px6kh5ku+DYg6Ddpa10Y4wT0Mah4PKkAlLS5DQIKQgEWmuls8fR5DNo7Biw0KMi4vnKJjsedmzXHQ3R1sNDs3LDu6uUNj2lznqx9gWfif+AZ+J+9zv6z63t1H37Hc57XgaeqbZEHYMEYefZ6vdj71bcXGM//C7a+sz/3/hivP+Q5/i9IvR/dh9EQm8XW4jU/JGri82Wwp8W9ALUTG5bAOyVvAAAAAElFTkSuQmCC + + + 5 + OUTLOOKNAVBAR_BORDERCOLOR + 13603685 + + + + 5 + OVERFLOWPANELBUTTON_FOCUSEDNOTSELECTED + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAfCAIAAACpqzA1AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1wQKDCEw+o4cuAAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAAL0lEQVR4nGNInXye4f+/J0wM/34xMfz7TRz9/gATAwMzEwMjDLMgsaF8BjxyEDYAo7EchQ9DIx0AAAAASUVORK5CYII= + + + 5 + OVERFLOWPANELBUTTON_FOCUSEDSELECTED + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAfCAIAAACpqzA1AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1wQKDBwx52FkkAAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAAOUlEQVR4nGNInXye+WwJExPDvz9MDP//EkX/efCLiYGFCYqZmRhYmJgYYWxWLGIsTEwMrMxQPlwMAEgJHFcBEfcQAAAAAElFTkSuQmCC + + + 5 + OVERFLOWPANELBUTTON_NOTFOCUSEDSELECTED + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAfCAIAAACpqzA1AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1wQKDBwYpdP8/AAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAAM0lEQVR4nGNInXye4f/NVUwMf38xMfz9DaH//UbwUdhQ+sNFpv/MzEwMzCxMDOg0C9HiAMK+HVp+qKxsAAAAAElFTkSuQmCC + + + 5 + OVERFLOWPANEL_BACKGROUND + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAfCAIAAACpqzA1AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1wQKDBItbeMVUQAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAAPklEQVR4nGNInXye4fH7/0x//zFA8H8Gpn9QGib27z9C7u8/BqaXXxiYGBkYmBgZkWgomwmLGCMjAxMTphgAx1McnBxhuZkAAAAASUVORK5CYII= + + + 5 + OVERFLOWPANEL_MENUBUTTON + 0 + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAADAFBMVEVDcbD/+Mv///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC5bM8UAAABAHRSTlP//wD/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////Zg+QzwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9cECxMRIJe5uQcAAAAHdEVYdEF1dGhvcgCprsxIAAAADHRFWHREZXNjcmlwdGlvbgATCSEjAAAACnRFWHRDb3B5cmlnaHQArA/MOgAAAA50RVh0Q3JlYXRpb24gdGltZQA19w8JAAAACXRFWHRTb2Z0d2FyZQBdcP86AAAAC3RFWHREaXNjbGFpbWVyALfAtI8AAAAIdEVYdFdhcm5pbmcAwBvmhwAAAAd0RVh0U291cmNlAPX/g+sAAAAIdEVYdENvbW1lbnQA9syWvwAAAAZ0RVh0VGl0bGUAqO7SJwAAACRJREFUeJxjYEIDDLQTYAABZAFGIJ8RRQsjjA83A8anpcOQAAAD1AHqqEVm4QAAAABJRU5ErkJggg== + + + 5 + PANELBUTTON_FOCUSEDNOTSELECTED + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAgCAIAAABch4VNAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1wQKDBgJqw8ZCgAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAALElEQVR4nGNInXye4f+/J0wM/34xMfz7TRz9/gATAwMzEwMjFowizoJDHI4BFVgchy9qNqgAAAAASUVORK5CYII= + + + 5 + PANELBUTTON_FOCUSEDSELECTED + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAgCAIAAABch4VNAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1wQKDBYimTDNxAAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAAN0lEQVR4nGNInXye+WwJExPDvz9MDP//EkX/efCLiYGZiYmBBYaZmRhZUPkMLExIYsxwOUZUPgC4mxxanNLrVwAAAABJRU5ErkJggg== + + + 5 + PANELBUTTON_NOTFOCUSEDSELECTED + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAgCAIAAABch4VNAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1wQKDBErr63jpwAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAAL0lEQVR4nGNInXye4f/NVUwMf38xMfz9DaH//UbwUdhQ+sNFpv/MzEwMcMxCLhsAN38dXb1IiukAAAAASUVORK5CYII= + + + 5 + PANELBUTTON_NOTSELECTED_FONTCOLOR + 8998176 + + + + 5 + PANELBUTTON_SELECTED_FONTCOLOR + 0 + + + + 5 + PANELVERTICAL_FOCUSED_BACKCOLOR + 10676223 + + + + 5 + PANELVERTICAL_FONTCOLOR + 9126421 + + + + 5 + PANELVERTICAL_NOTFOCUSED_BACKCOLOR + 15918293 + + + + 5 + PANEL_BACKGROUND + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAgCAIAAABch4VNAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1wQKDBAAGgorpgAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAAOUlEQVR4nGNInXye4fH7/0x//zFA8H8Gpn9QGib27z9C7u8/BqaXXxiYGBkYmBgZsdBIbCY8clAaADmmHJ7K0G8EAAAAAElFTkSuQmCC + + + 5 + SHORTCUTMENU_DOWN_ENABLED + 0 + Qk02BQAAAAAAADYEAAAoAAAAEAAAABAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAoFAw/6BYMP+wWDD/sGBA/7BoQP/AaED/wHBQ/8B4UP/QeFD/4HhQ/+CAUP/giFD/8IhQ/9CIYP/wkGD//5Bg/+CQcP/gmHD/8Jhw//CgcP//oHD//6iA//+wgP//sJD//7iQ///AoP//////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaAhoaGhoaGhoaGhoaGhoaAgUBGhoaGhoaGhoaGhoaAgoJBQAaGhoaGhoaGhoaBxIUCwgFABoaGhoaGhoaExEQFQ4KAAMEGhoaGhoaGhoaDRYPDAMaGhoaGhoaGhoaGhAZFQ4EGhoaGhoaGhoaGhoRGRgXBhoaGhoaGhoaGhoaExEQDQ0aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho= + + + 5 + SHORTCUTMENU_DOWN_DISABLED + 0 + Qk02BQAAAAAAADYEAAAoAAAAEAAAABAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAT09P/1RUVP9WVlb/X19f/2RkZP9mZmb/b29v/3R0dP92dnb/d3d3/3x8fP+BgYH/g4OD/4SEhP+MjIz/jo6O/4+Pj/+UlJT/lpaW/5qamv+cnJz/paWl/6qqqv+vr6//tLS0/729vf//////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaAhoaGhoaGhoaGhoaGhoaAgUBGhoaGhoaGhoaGhoaAgoJBQAaGhoaGhoaGhoaBxIUCwgFABoaGhoaGhoaExEQFQ4KAAMEGhoaGhoaGhoaDRYPDAMaGhoaGhoaGhoaGhAZFQ4EGhoaGhoaGhoaGhoRGRgXBhoaGhoaGhoaGhoaExEQDQ0aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho= + + + 5 + SHORTCUTMENU_UP_ENABLED + 0 + Qk02BQAAAAAAADYEAAAoAAAAEAAAABAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAkEgg/6BIIP+gUCD/oFAw/6BYMP+wWDD/0Ggw/8BwQP/QcED/0HhA/9B4UP/QgFD/4IBQ/+CIYP/wkGD/8Jhg/+CYcP/woHD//6Bw//CogP//sJD//8Cg//////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgwDAAAAFhYWFhYWFhYWFhYMDQsHABYWFhYWFhYWFhYWDBMNCgEWFhYWFhYWFhYWFgwVDw0CFhYWFhYWFhYWEAgGFA8PBQIAFhYWFhYWFhYQFRQSDgkDFhYWFhYWFhYWFhEVFA0DFhYWFhYWFhYWFhYWERUEFhYWFhYWFhYWFhYWFhYQFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhY= + + + 5 + SHORTCUTMENU_UP_DISABLED + 0 + Qk02BQAAAAAAADYEAAAoAAAAEAAAABAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAARERE/0ZGRv9KSkr/T09P/1RUVP9WVlb/Y2Nj/2pqav9sbGz/cXFx/3Z2dv96enr/fHx8/4aGhv+MjIz/kZGR/5SUlP+ampr/nJyc/6SkpP+vr6//vb29//////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgwDAAAAFhYWFhYWFhYWFhYMDQsHABYWFhYWFhYWFhYWDBMNCgEWFhYWFhYWFhYWFgwVDw0CFhYWFhYWFhYWEAgGFA8PBQIAFhYWFhYWFhYQFRQSDgkDFhYWFhYWFhYWFhEVFA0DFhYWFhYWFhYWFhYWERUEFhYWFhYWFhYWFhYWFhYQFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhY= + + + 5 + SHRINKBUTTON_FOCUSEDNOTSHRUNK + 0 + iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAIAAADZrBkAAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1wQKDCkAFI6mHAAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAA8UlEQVR4nNWSTUrEQBBGX3d6VBhBV97NZCWIIHgDryCCMDDgPp7HA7gTRUSE6ETTfyk3g6kMA+IsBJtavMUrvqaqjMgdv39OUrdJG8lvlJb/NG1dmyl2sVv0QfJC87dgyd1KGTMBDi+eAM3aWU0zbk/ElpevgOQIA2vToUZiJvtgyqt34OZsmxzKmV9yfNPmOM0V1cwD9amVHKt5v+TYSnjRn7IkP1Ro6pMEVPOeHAYWjJ1qczQS+XwkNvXxB1BdO/owsCm0aSV5XX37IL6pjxqAHEesNONvz9fsbefAuKmkVrpnzT+sWxb3a1kt4B+c8hcUzeQFqXoTRQAAAABJRU5ErkJggg== + + + 5 + SHRINKBUTTON_FOCUSEDSHRUNK + 0 + iVBORw0KGgoAAAANSUhEUgAAABIAAAASEAYAAAAGXlIUAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKTWlDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVN3WJP3Fj7f92UPVkLY8LGXbIEAIiOsCMgQWaIQkgBhhBASQMWFiApWFBURnEhVxILVCkidiOKgKLhnQYqIWotVXDjuH9yntX167+3t+9f7vOec5/zOec8PgBESJpHmomoAOVKFPDrYH49PSMTJvYACFUjgBCAQ5svCZwXFAADwA3l4fnSwP/wBr28AAgBw1S4kEsfh/4O6UCZXACCRAOAiEucLAZBSAMguVMgUAMgYALBTs2QKAJQAAGx5fEIiAKoNAOz0ST4FANipk9wXANiiHKkIAI0BAJkoRyQCQLsAYFWBUiwCwMIAoKxAIi4EwK4BgFm2MkcCgL0FAHaOWJAPQGAAgJlCLMwAIDgCAEMeE80DIEwDoDDSv+CpX3CFuEgBAMDLlc2XS9IzFLiV0Bp38vDg4iHiwmyxQmEXKRBmCeQinJebIxNI5wNMzgwAABr50cH+OD+Q5+bk4eZm52zv9MWi/mvwbyI+IfHf/ryMAgQAEE7P79pf5eXWA3DHAbB1v2upWwDaVgBo3/ldM9sJoFoK0Hr5i3k4/EAenqFQyDwdHAoLC+0lYqG9MOOLPv8z4W/gi372/EAe/tt68ABxmkCZrcCjg/1xYW52rlKO58sEQjFu9+cj/seFf/2OKdHiNLFcLBWK8ViJuFAiTcd5uVKRRCHJleIS6X8y8R+W/QmTdw0ArIZPwE62B7XLbMB+7gECiw5Y0nYAQH7zLYwaC5EAEGc0Mnn3AACTv/mPQCsBAM2XpOMAALzoGFyolBdMxggAAESggSqwQQcMwRSswA6cwR28wBcCYQZEQAwkwDwQQgbkgBwKoRiWQRlUwDrYBLWwAxqgEZrhELTBMTgN5+ASXIHrcBcGYBiewhi8hgkEQcgIE2EhOogRYo7YIs4IF5mOBCJhSDSSgKQg6YgUUSLFyHKkAqlCapFdSCPyLXIUOY1cQPqQ28ggMor8irxHMZSBslED1AJ1QLmoHxqKxqBz0XQ0D12AlqJr0Rq0Hj2AtqKn0UvodXQAfYqOY4DRMQ5mjNlhXIyHRWCJWBomxxZj5Vg1Vo81Yx1YN3YVG8CeYe8IJAKLgBPsCF6EEMJsgpCQR1hMWEOoJewjtBK6CFcJg4Qxwicik6hPtCV6EvnEeGI6sZBYRqwm7iEeIZ4lXicOE1+TSCQOyZLkTgohJZAySQtJa0jbSC2kU6Q+0hBpnEwm65Btyd7kCLKArCCXkbeQD5BPkvvJw+S3FDrFiOJMCaIkUqSUEko1ZT/lBKWfMkKZoKpRzame1AiqiDqfWkltoHZQL1OHqRM0dZolzZsWQ8ukLaPV0JppZ2n3aC/pdLoJ3YMeRZfQl9Jr6Afp5+mD9HcMDYYNg8dIYigZaxl7GacYtxkvmUymBdOXmchUMNcyG5lnmA+Yb1VYKvYqfBWRyhKVOpVWlX6V56pUVXNVP9V5qgtUq1UPq15WfaZGVbNQ46kJ1Bar1akdVbupNq7OUndSj1DPUV+jvl/9gvpjDbKGhUaghkijVGO3xhmNIRbGMmXxWELWclYD6yxrmE1iW7L57Ex2Bfsbdi97TFNDc6pmrGaRZp3mcc0BDsax4PA52ZxKziHODc57LQMtPy2x1mqtZq1+rTfaetq+2mLtcu0W7eva73VwnUCdLJ31Om0693UJuja6UbqFutt1z+o+02PreekJ9cr1Dund0Uf1bfSj9Rfq79bv0R83MDQINpAZbDE4Y/DMkGPoa5hpuNHwhOGoEctoupHEaKPRSaMnuCbuh2fjNXgXPmasbxxirDTeZdxrPGFiaTLbpMSkxeS+Kc2Ua5pmutG003TMzMgs3KzYrMnsjjnVnGueYb7ZvNv8jYWlRZzFSos2i8eW2pZ8ywWWTZb3rJhWPlZ5VvVW16xJ1lzrLOtt1ldsUBtXmwybOpvLtqitm63Edptt3xTiFI8p0in1U27aMez87ArsmuwG7Tn2YfYl9m32zx3MHBId1jt0O3xydHXMdmxwvOuk4TTDqcSpw+lXZxtnoXOd8zUXpkuQyxKXdpcXU22niqdun3rLleUa7rrStdP1o5u7m9yt2W3U3cw9xX2r+00umxvJXcM970H08PdY4nHM452nm6fC85DnL152Xlle+70eT7OcJp7WMG3I28Rb4L3Le2A6Pj1l+s7pAz7GPgKfep+Hvqa+It89viN+1n6Zfgf8nvs7+sv9j/i/4XnyFvFOBWABwQHlAb2BGoGzA2sDHwSZBKUHNQWNBbsGLww+FUIMCQ1ZH3KTb8AX8hv5YzPcZyya0RXKCJ0VWhv6MMwmTB7WEY6GzwjfEH5vpvlM6cy2CIjgR2yIuB9pGZkX+X0UKSoyqi7qUbRTdHF09yzWrORZ+2e9jvGPqYy5O9tqtnJ2Z6xqbFJsY+ybuIC4qriBeIf4RfGXEnQTJAntieTE2MQ9ieNzAudsmjOc5JpUlnRjruXcorkX5unOy553PFk1WZB8OIWYEpeyP+WDIEJQLxhP5aduTR0T8oSbhU9FvqKNolGxt7hKPJLmnVaV9jjdO31D+miGT0Z1xjMJT1IreZEZkrkj801WRNberM/ZcdktOZSclJyjUg1plrQr1zC3KLdPZisrkw3keeZtyhuTh8r35CP5c/PbFWyFTNGjtFKuUA4WTC+oK3hbGFt4uEi9SFrUM99m/ur5IwuCFny9kLBQuLCz2Lh4WfHgIr9FuxYji1MXdy4xXVK6ZHhp8NJ9y2jLspb9UOJYUlXyannc8o5Sg9KlpUMrglc0lamUycturvRauWMVYZVkVe9ql9VbVn8qF5VfrHCsqK74sEa45uJXTl/VfPV5bdra3kq3yu3rSOuk626s91m/r0q9akHV0IbwDa0b8Y3lG19tSt50oXpq9Y7NtM3KzQM1YTXtW8y2rNvyoTaj9nqdf13LVv2tq7e+2Sba1r/dd3vzDoMdFTve75TsvLUreFdrvUV99W7S7oLdjxpiG7q/5n7duEd3T8Wej3ulewf2Re/ranRvbNyvv7+yCW1SNo0eSDpw5ZuAb9qb7Zp3tXBaKg7CQeXBJ9+mfHvjUOihzsPcw83fmX+39QjrSHkr0jq/dawto22gPaG97+iMo50dXh1Hvrf/fu8x42N1xzWPV56gnSg98fnkgpPjp2Snnp1OPz3Umdx590z8mWtdUV29Z0PPnj8XdO5Mt1/3yfPe549d8Lxw9CL3Ytslt0utPa49R35w/eFIr1tv62X3y+1XPK509E3rO9Hv03/6asDVc9f41y5dn3m978bsG7duJt0cuCW69fh29u0XdwruTNxdeo94r/y+2v3qB/oP6n+0/rFlwG3g+GDAYM/DWQ/vDgmHnv6U/9OH4dJHzEfVI0YjjY+dHx8bDRq98mTOk+GnsqcTz8p+Vv9563Or59/94vtLz1j82PAL+YvPv655qfNy76uprzrHI8cfvM55PfGm/K3O233vuO+638e9H5ko/ED+UPPR+mPHp9BP9z7nfP78L/eE8/sl0p8zAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAABiUlEQVR42uyVuU7EMBCGfxsTorAVErwbbIEQlxC8ATwChxAgxFWG14Eeum0WWCGO4E0cZ4bC7MEqx0IVIab5i0/yP/YcFszM93fMqEkoJmvjGLUJBVibmBolxMhq+EJ1SoipvGRCTqhGAwCk9DwAIDIGYMpsFFXzn4YEMnIlK1IX8/O7e+32cKJCTqpxeNX531XyV8kKlTKbmmHj/YPnZ4CJScpqDgC+X3L+iEr0m7pIU/v2BlyHW5tT3sB4oXl49B65mxlTxgEBQEBK3y/zcSp7PVSkRF398AgwUvOhgTDcWO/d3BkfnyQGYGQ2tWWcaUIV+/S0csqE9LyZGQBwy7zZPD0jGvAwXFu11r2U4+cXSuVxY7oaqPJTo82bP2d5RivLWrupcolcXgVBHk9NVwNMiel0xlqMFWOPoaYNgDBcWnx9AZiSWGtASKX6ieRwRmKeOuOPvUiS25vtneLPVcD352ad8XTgav2hAUYcPz5V898txpKSMaKo1QJAv+N/4nOl/8+1JD4HAF6ev1DhKnQIAAAAAElFTkSuQmCC + + + 5 + SHRINKBUTTON_NOTFOCUSEDNOTSHRUNK + 0 + iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAIAAADZrBkAAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1wQKDDsEaxcS1gAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAA4UlEQVR4nJ2TzU0DMRCFv7W9SRC9uQ7+GkCBRKQDEKEQV0Af0AHHBJR11h4uIfFEK63waA7f4T159GbcfH4J/y+Xa1y4nOtsda+lyiGHbDOHs/SJXa/4WCYLZz1xGMP9czBGcak5j2TWYmH+EgDJikulGvKixRoeXgOwuvMZFn8cE6VS2aw56J5uvQjL9YH3iZ+ohjJJOHbXs7jxwHIdkpy4aZg6SqWKZBuJicdrD6zegsiJrY7E5EzZ2x1dz/zKA1kUl7Lm/WNgcZcTWss+8R0Vj6x70w3ziG20qm+y6uP8Akp9vOvDBHQyAAAAAElFTkSuQmCC + + + 5 + SHRINKBUTTON_NOTFOCUSEDSHRUNK + 0 + iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAIAAADZrBkAAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1wQKDDM2axnJXgAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAA5UlEQVR4nJ2TW07DMBBFT2wnRe3evA5eG0CFVpQVgArdh1fAPugO+ERFxI3H/SBq7IBU8Gg+jqV7PdbMuNq+R/4fRkpcGJEyW1m1UPjIxHZmMJou8NVl/DOURI6pFDePTikak3Gq6ZUiHDMKwPzJaTJuNKlMJK/mA6trC9yunTCwVkzMqFpy2Hn2gfsrCyzWLsaBtcpsWSenNVXF8tkBi0sbIquXntuOVJl1Uqted3dhY+Rh07MPfPrRAJIt+b5ifm7bjloPPPIA1evbUG7WUGv2gZ3P+MS4P9rf+YTt71G8k0Uf5wBZ1bkEoMPuZAAAAABJRU5ErkJggg== + + + 5 + SIGNS_MINUS + 0 + iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjIwWZ92UQAAAI5JREFUKFNjfP76/f+dRy8ygMEPCAUCH6B8a0NxBoYFGw78xwA//v//8OH//wdAwsAj4T+mIriC//8PXHgAVbQCySQkBQ9efPi/4QCaIpCx6BiuaALIJJAJQPwA5A4gceHGB6BVH/4v2HEBYh1IEYYCbIpAJoAcueEEEAPdATIBhsEmnb54HcMtyG4DyQMAS+rq4jk+qVQAAAAASUVORK5CYII= + + + 5 + SIGNS_PLUS + 0 + iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjIwWZ92UQAAAJZJREFUKFNjfP76/f+dRy8ygMEPCAUCH6B8a0NxBoYFGw78xwA//v//8OH//wdAwsAj4T+GIpAgRMH//wcuPIAqWoFkEtAEkCKQggcvPvzfcABNEUgSHcMVTQCZBHIDEINMACm8cOMD0KoP/xfsuACxDqQIpuABUBVI8AA2RTBHbjjxAOwOkAkwDDbp9MXrGG5BdhtIHgAc3OMlaQBkAQAAAABJRU5ErkJggg== + + + 5 + SPLITTER_BACKGROUND + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAICAIAAAC3eAIWAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1wQKCzomoiN09gAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAAGUlEQVR4nGNInXye4f///0xPPjAwff+NgQESpBBfJz+/0QAAAABJRU5ErkJggg== + + + 5 + SPLITTER_GRIPPER + 0 + iVBORw0KGgoAAAANSUhEUgAAACMAAAAICAIAAAD80NH7AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1wQLFBgj2j1FcQAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAAYElEQVR4nGNMnXyegS6A8f////SxieXJB/pYxMDy/Td2ie6VFxgYGErDDchgYwVM338zYEUMDAwedgby/H/IYGNFjCce4IwnQ8k/DAwM55+zkMHGBIz7b9MrReCKJ6oDALggXhdJV+EdAAAAAElFTkSuQmCC + + + 5 + TITLE_BACKGROUND + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAaCAIAAAD5ZqGGAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1wQKEwUvkRQUpgAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAAKUlEQVR4nGP4//8/05MPDEx//zEw/fuPhKH8v1jEUMTR9P3FIvbvPwMA+EY0sy5GaD4AAAAASUVORK5CYII= + + + 5 + TITLE_BACKGROUND_LEFT + 2 + + + + 5 + TITLE_BACKGROUND_WIDTH + 197 + + + + 5 + TITLE_BORDERCOLOR + 13603685 + + + + 5 + TITLE_FONTCOLOR + 9126421 + + + + 5 + TOOLTITLE_BACKGROUND + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAATCAIAAADeafBOAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABVJREFUGFdj+P//P8O1F5TjtRf/AwDItDQIN2X4UgAAAABJRU5ErkJggg== + + + 5 + TOOLTITLE_FONTCOLOR + 9126421 + + + + 5 + ZOOMNAVBAR_BAR + 0 + Qk3+BAAAAAAAADYEAAAoAAAAAQAAADIAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAtoFa/7eDXP+4hV7/uoZg/7uIYv+9imT/voxm/8CNaP/Bj2r/w5Fs/8STbv/GlXD/x5Zy/8mYdP/Kmnb/y5x4/82eev/On3z/0KF+/9GjgP/TpYL/1KaE/9aohv/Xqoj/2KyK/9qujP/ft5r/6cy3/+rQu//s07//7tXD//DYx//x28v/897O//Th0//149b/9ubZ//jo3f/56+D/+e3i//ru5f/78Oj//PLr//z07f/99e///vfx//748//++fX///r3///7+P8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAABAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAATAAAAFAAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAfAAAAIAAAACEAAAAiAAAAIwAAACQAAAAlAAAAJgAAACcAAAAoAAAAKQAAACoAAAArAAAALAAAAC0AAAAuAAAALwAAADAAAAAxAAAA + + + 5 + ZOOMNAVBAR_REFLECTEDSEPARATOR + 0 + iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABGdBTUEAALGPC/xhBQAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjIwWZ92UQAAAD9JREFUaEPt0IEAAAAAw6D5Ux/khVBhwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwMDLwAAkMAABCDVySwAAAABJRU5ErkJggg== + + + 5 + ZOOMNAVBAR_SEPARATOR + 0 + iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABGdBTUEAALGPC/xhBQAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjIwWZ92UQAAAD9JREFUaEPt0IEAAAAAw6D5Ux/khVBhwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwMDLwAAkMAABCDVySwAAAABJRU5ErkJggg== + + + 5 + ZOOMNAVBAR_STACKBUTTON + 0 + iVBORw0KGgoAAAANSUhEUgAAAMAAAAAcCAYAAAA3ILBTAAABF0lEQVR4nO3cMW7CQBRF0WuU1kUovAHatNn/CuiyCyJKOnAKG8YQg02BjP6/R0LC43kSxTw0jGRASqy6uW6A9ci4FMEJ2AH788BwoX8Dm8FYy/0izLln3vyS+UfXP/2LVT/YcL34pagq4AuooRTAbY8yqYBPKAVw8SubCkoBpJQ+Bu/bkftjY8/cM29+yfzk3GEBbrdBS/+KN2/+FadAV9wCKTULoNQsgFKzAErNAig1j0HNR85PzvUY1HzU/Jy5boGUmwVQahZAqVkApWYBlJrHoOYj5yfnegxqPmp+ztzLFuh0b4IUVAulALvzgJTAEfiFUoA93d9EWAJFdwS2wAH+741quqflfUheEbV03/yHpT+I9Bb+AD0fBdMuQEabAAAAAElFTkSuQmCC + + + 6 + BUTTON_FOCUSED_FONTCOLOR + 0 + + + + 6 + BUTTON_LEFT_FOCUSED + 0 + Qk22BAAAAAAAADYEAAAoAAAAAgAAACAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAdHBv/2fX//9q1///bdj//3DZ//902v//d9v//3rc//993f//gd7//4Te//+H3///i+D//47h//+R4v//lOP//5jk//+b5f//p+j//63q//+y7P//uO7//73w///D8v//yPT//872///T+P//2fr//978////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/x0AAAAAAAAAABEAAAAQAAAADwAAAA4AAAANAAAADAAAAAsAAAAKAAAACQAAAAgAAAAHAAAABgAAAAUAAAAEAAAAAwAAAAIAAAABAAAAEgAAABMAAAAUAAAAFQAAABYAAAAXAAAAGAAAABkAAAAaAAAAGwAAABwAAAAAAAAdAAAA + + + 6 + BUTTON_LEFT_HOTTRACKING + 0 + Qk22BAAAAAAAADYEAAAoAAAAAgAAACAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAab3//3jb//973P//ft3//4He//+E3///h+D//4rh//+N4v//kOP//5Pj//+W5P//meX//5zm//+f5///ouj//6Xp//+o6v//q+v//67s//+x7P//tO3//7fu//+67///vfD//8Dx///D8v//xvP//8n0////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/x0AAAAAAAAAAAEAAAACAAAAAwAAAAQAAAAFAAAABgAAAAcAAAAIAAAACQAAAAoAAAALAAAADAAAAA0AAAAOAAAADwAAABAAAAARAAAAEgAAABMAAAAUAAAAFQAAABYAAAAXAAAAGAAAABkAAAAaAAAAGwAAABwAAAAAAAAdAAAA + + + 6 + BUTTON_LEFT_NOTFOCUSED + 0 + Qk22BAAAAAAAADYEAAAoAAAAAgAAACAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAdHBv/9HHxf/SyMX/08nG/9TKx//Vy8j/1szJ/9fNyv/Yzsv/2c/M/9rQzP/b0c3/3NLO/93Tz//e1ND/39XR/+DW0v/h19P/5NrW/+bc2P/o3tr/6uDc/+zh3v/u49//8OXh//Ln4//06OX/9urn//js6f//////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/x0AAAAAAAAAABEAAAAQAAAADwAAAA4AAAANAAAADAAAAAsAAAAKAAAACQAAAAgAAAAHAAAABgAAAAUAAAAEAAAAAwAAAAIAAAABAAAAEgAAABMAAAAUAAAAFQAAABYAAAAXAAAAGAAAABkAAAAaAAAAGwAAABwAAAAAAAAdAAAA + + + 6 + BUTTON_MIDDLE_FOCUSED + 0 + Qk22BAAAAAAAADYEAAAoAAAAAQAAACAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAdHBv/2fX//9q1///bdj//3DZ//902v//d9v//3rc//993f//gd7//4Te//+H3///i+D//47h//+R4v//lOP//5jk//+b5f//nub//6fo//+t6v//suz//7ju//+98P//w/L//8j0///O9v//0/j//9n6///e/P//5P7//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAASAAAAEQAAABAAAAAPAAAADgAAAA0AAAAMAAAACwAAAAoAAAAJAAAACAAAAAcAAAAGAAAABQAAAAQAAAADAAAAAgAAAAEAAAATAAAAFAAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAAAAAA + + + 6 + BUTTON_MIDDLE_HOTTRACKING + 0 + Qk22BAAAAAAAADYEAAAoAAAAAQAAACAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAab3//3Xb//942///e9z//37d//+B3v//hN///4fg//+K4f//jeL//5Dj//+T4///luT//5nl//+c5v//n+f//6Lo//+l6f//qOr//6vr//+u7P//sez//7Tt//+37v//uu///73w///A8f//w/L//8bz///J9P//zPX//wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAABAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAATAAAAFAAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAAAAAA + + + 6 + BUTTON_MIDDLE_NOTFOCUSED + 0 + Qk22BAAAAAAAADYEAAAoAAAAAQAAACAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAdHBv/9HHxf/SyMX/08nG/9TKx//Vy8j/1szJ/9fNyv/Yzsv/2c/M/9rQzP/b0c3/3NLO/93Tz//e1ND/39XR/+DW0v/h19P/4tjU/+Ta1v/m3Nj/6N7a/+rg3P/s4d7/7uPf//Dl4f/y5+P/9Ojl//bq5//47On/+u7r/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAASAAAAEQAAABAAAAAPAAAADgAAAA0AAAAMAAAACwAAAAoAAAAJAAAACAAAAAcAAAAGAAAABQAAAAQAAAADAAAAAgAAAAEAAAATAAAAFAAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAAAAAA + + + 6 + BUTTON_NOTFOCUSED_FONTCOLOR + 6050636 + + + + 6 + BUTTON_RIGHT_FOCUSED + 0 + Qk22BAAAAAAAADYEAAAoAAAAAgAAACAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAdHBv/2fX//9q1///bdj//3DZ//902v//d9v//3rc//993f//gd7//4Te//+H3///i+D//47h//+R4v//lOP//5jk//+b5f//p+j//63q//+y7P//uO7//73w///D8v//yPT//872///T+P//2fr//978////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAdAAAAAAAAEQAAABAAAAAPAAAADgAAAA0AAAAMAAAACwAAAAoAAAAJAAAACAAAAAcAAAAGAAAABQAAAAQAAAADAAAAAgAAAAEAAAASAAAAEwAAABQAAAAVAAAAFgAAABcAAAAYAAAAGQAAABoAAAAbAAAAHAAAAAAAAAAAHQAA + + + 6 + BUTTON_RIGHT_HOTTRACKING + 0 + Qk22BAAAAAAAADYEAAAoAAAAAgAAACAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAab3//3jb//973P//ft3//4He//+E3///h+D//4rh//+N4v//kOP//5Pj//+W5P//meX//5zm//+f5///ouj//6Xp//+o6v//q+v//67s//+x7P//tO3//7fu//+67///vfD//8Dx///D8v//xvP//8n0////////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAdAAAAAAAAAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAAEwAAABQAAAAVAAAAFgAAABcAAAAYAAAAGQAAABoAAAAbAAAAHAAAAAAAAAAAHQAA + + + 6 + BUTTON_RIGHT_NOTFOCUSED + 0 + Qk22BAAAAAAAADYEAAAoAAAAAgAAACAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAdHBv/9HHxf/SyMX/08nG/9TKx//Vy8j/1szJ/9fNyv/Yzsv/2c/M/9rQzP/b0c3/3NLO/93Tz//e1ND/39XR/+DW0v/h19P/5NrW/+bc2P/o3tr/6uDc/+zh3v/u49//8OXh//Ln4//06OX/9urn//js6f//////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAdAAAAAAAAEQAAABAAAAAPAAAADgAAAA0AAAAMAAAACwAAAAoAAAAJAAAACAAAAAcAAAAGAAAABQAAAAQAAAADAAAAAgAAAAEAAAASAAAAEwAAABQAAAAVAAAAFgAAABcAAAAYAAAAGQAAABoAAAAbAAAAHAAAAAAAAAAAHQAA + + + 6 + CONTAINER_BORDERCOLOR + 7630959 + + + + 6 + EXPLORERBAR_BACKGROUND + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAM1CAIAAAA+dAz4AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAd0SU1FB9gGBBEaHItTOcYAAAFfSURBVEhLzc7ncoJAFAXg8/6vkGJXigiCVHuliCU9j5M7hDEyu5NiBP3xzZxzZ/fuIt69Iy/r7RuKEG1eUYQwfkERgvUziuBHTyjKKnzE9Xigv3xaBpe2pz+wFv4el7Gjd783X+1QjC2983uz5Rb52tD+00wXG5xXTPv+bzKPcR5r2nM+49kap4vobn5G0wh/E9L5/A0nIX4W0JniDcYB+HyaX05/5OPLivL18IZL8LiDBXicwRxOn8/uz2B7LMubwnL5THcC02H1nDESNsuwRzAslm4NkTBZXXOARC9L6/WRMFiq4SGhZ3V0FwddykeUroOEltXWbByolI/IqoWDDuWU1DFxoFBOiUoPGW3qKaFtIEOmTlqyniVRTzWlLjJE6qQhaiyBZqQuqFkt6qTW6rCaNCPVpsJqKKg02qw6zUi5LrNqMko1ia8q4b4qsioi7ioCX1nAbbnFdVNqguMDdcJGOpH/y9AAAAAASUVORK5CYII= + + + 6 + EXPLORERBAR_BORDERCOLOR + 7630959 + + + + 6 + EXPLORERBAR_NORMALGROUPBACKGROUND + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAZCAMAAADHTrRNAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAwBQTFRF2t/m2+Dn3OHo3eLo3uPp3+Tq4eXr4ubr4+fs5Ojt5uru6Ovv6ezw6+7x7O/y7fDy7/Hz8PL08fP18vT18/X29Pb39vf4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ4ySygAAAAlwSFlzAAAOwwAADsMBx2+oZAAAAAd0SU1FB9cEEhE7NMydbSkAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zMECERxAAAAAtSURBVBhXDcKHDYAgAACwKijgQlz/nyppfV6P26U5VYfd1q0WpcuS2SQKRgM/I+wBEyOzPNQAAAAASUVORK5CYII= + + + 6 + EXPLORERBAR_NORMALGROUPCOLLAPSEHIGHLIGHT + 0 + iVBORw0KGgoAAAANSUhEUgAAAPEAAAAZCAMAAADXAjjUAAAABGdBTUEAALGPC/xhBQAAAwBQTFRFAAAAWlpab3B0/9dn/9hq/9lt/9pz/9t3/9x6/919/9+D/9+G/+CJ/+GM/+OS/+SW/+SZ/+mn/+2z/++4//G+zc3N//PD//bO//jT//rZ//zfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvt+f7QAAAQB0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zMECERxAAAAB6SURBVFhH5c/ZAYJQDADBl4gX3kdA7b9P3A+0CHY6mDaly9QyPyaZLd8ujF8ujEcXxoML46cL44cL47sL45sL45VB/ZOMO4GK+i0Zr5evIqLmJuPN8hGOmJuMty6Mdy6M9y6MexfGBxfGRxfGJxfGZxfGFxfGVxfGNl9ftTdv1q46sgAAAABJRU5ErkJggg== + + + 6 + EXPLORERBAR_NORMALGROUPCOLLAPSENOTHIGHLIGHT + 0 + iVBORw0KGgoAAAANSUhEUgAAAPEAAAAZCAMAAADXAjjUAAAABGdBTUEAALGPC/xhBQAAAwBQTFRFAAAAWlpab3B0zc3NxcfRxsjSyMrUycvVyszWys3XzM/ZzdDaztHbz9Lc0NTe0dXf0tbg1trk2t7o3ODq3uHs3+Pu4+fy5ej05+r26ez4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXFDcOQAAAQB0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zMECERxAAAAB5SURBVFhH5c/ZFYJAEADBnVkEBQW8Jf9AsT94BEFXBlXWdFlL5mKSWfLnwvjrwvjjwvjtwvjlwvjpwvjhwvjuwrgxqHtSMq6xlxmfjq9GRN2ajNvjIxyxNRl3LozPLowvLox7F8aDC+OrC+ObC+PRhfHkwnh2YWzzByF+M1rWF/X6AAAAAElFTkSuQmCC + + + 6 + EXPLORERBAR_NORMALGROUPEXPANDHIGHLIGHT + 0 + iVBORw0KGgoAAAANSUhEUgAAAPEAAAAZCAMAAADXAjjUAAAABGdBTUEAALGPC/xhBQAAAwBQTFRFAAAAWlpab3B0/9dn/9hq/9lt/9pz/9t3/9x6/919/9+D/9+G/+CJ/+GM/+OS/+SW/+SZ/+mn/+2z/++4//G+zc3N//PD//bO//jT//rZ//zfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvt+f7QAAAQB0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zMECERxAAAAB6SURBVFhH5c8LFoFQFEDR1/UJSVEXmf88c1orBtHZM9hlDpe5RHxMIkpMLozfLoxfLoyfLoxHF8aDC+OHC+O7C+Pd9lWLtcl4v31JONcm44NAVvlbMj4a5D/JuHZhfHJhfHZhfHFh3Lgwvrowbl0Y31wYdy6MexfGNl+eszd9cYFXPgAAAABJRU5ErkJggg== + + + 6 + EXPLORERBAR_NORMALGROUPEXPANDNOTHIGHLIGHT + 0 + iVBORw0KGgoAAAANSUhEUgAAAPEAAAAZCAMAAADXAjjUAAAABGdBTUEAALGPC/xhBQAAAwBQTFRFAAAAWlpab3B0zc3NxcfRxsjSyMrUycvVyszWys3XzM/ZzdDaztHbz9Lc0NTe0dXf0tbg1trk2t7o3ODq3uHs3+Pu4+fy5ej05+r26ez4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXFDcOQAAAQB0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zMECERxAAAAB6SURBVFhH5dGHDcJQEMDQnztIoaTT9h80GImyA/YGTy5buNpKxMNURIm7K8Q3V4ivrhBfXCFeXSFeXCGeXSGeXCHe/X/VqzfTIU7A+RPvBWWVHyWPa0P5RSJuXCFuXSHuXCE+uEJ8dIX45Arx2RXi3hXiwRXi0RViW09ebDNkNUUekQAAAABJRU5ErkJggg== + + + 6 + EXPLORERBAR_NORMALGROUPHIGHLIGHT_FORECOLOR + 0 + + + + 6 + EXPLORERBAR_NORMALGROUPNOTHIGHLIGHT_FORECOLOR + 6050636 + + + + 6 + EXPLORERBAR_SPECIALGROUPBACKGROUND + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAZCAMAAADHTrRNAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAwBQTFRF2t/m2+Dn3OHo3eLo3uPp3+Tq4eXr4ubr4+fs5Ojt5uru6Ovv6ezw6+7x7O/y7fDy7/Hz8PL08fP18vT18/X29Pb39vf4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ4ySygAAAAlwSFlzAAAOwwAADsMBx2+oZAAAAAd0SU1FB9cEEhE7NMydbSkAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zMECERxAAAAAtSURBVBhXDcKHDYAgAACwKijgQlz/nyppfV6P26U5VYfd1q0WpcuS2SQKRgM/I+wBEyOzPNQAAAAASUVORK5CYII= + + + 6 + EXPLORERBAR_SPECIALGROUPCOLLAPSEHIGHLIGHT + 0 + iVBORw0KGgoAAAANSUhEUgAAAPEAAAAZCAMAAADXAjjUAAAABGdBTUEAALGPC/xhBQAAAwBQTFRFAAAAWlpab3B0+4w8+5A++5RB/JxF/KBH/KRK/6xD/KhM/69K/7FN/bBQ/7NR/bNT/7RU/bdV/7db/rtX/7hf/7pi/7tm/sNc/sde/stgzc3NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAktHyxAAAAQB0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zMECERxAAAAB6SURBVFhH5c/ZAYJQDADBl4gX3geo6b9P3A+0CHY6mDaly9QyR5PMloML46cL47sL46sL47ML46ML44ML470L45VB/ZOMO4GK+i0Zr5evIqLmJuPN8hGOmJuMty6Mdy6MexfGJxfGFxfGNxfGDxfGLxfGbxfGHxfGNl+gqTLlSSTRWgAAAABJRU5ErkJggg== + + + 6 + EXPLORERBAR_SPECIALGROUPCOLLAPSENOTHIGHLIGHT + 0 + iVBORw0KGgoAAAANSUhEUgAAAPEAAAAZCAMAAADXAjjUAAAABGdBTUEAALGPC/xhBQAAAwBQTFRFAAAAWlpab3B0/6s//65C/7FG/7dM/7pQ/71T/7xu/8BW/8Zd/slg/sxj/s9n/8F5/8R//tVt/thx/tt0/8aE/8mK/86U/9Ga/9Sf/9alzc3NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABvgkxwAAAQB0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zMECERxAAAAB6SURBVFhH5c/ZAYJQDADBl4gX3geo6b9P3A+0CHY6mDaly9QyPyaZLd8ujF8ujEcXxoML46cL46sL44sL470L45VB/ZOMO4GK+i0Zr5evIqLmJuPN8hGOmJuMty6Mdy6MexfGBxfGRxfGJxfGZxfGNxfGdxfGDxfGNl/j8DLfOpnpagAAAABJRU5ErkJggg== + + + 6 + EXPLORERBAR_SPECIALGROUPEXPANDHIGHLIGHT + 0 + iVBORw0KGgoAAAANSUhEUgAAAPEAAAAZCAMAAADXAjjUAAAABGdBTUEAALGPC/xhBQAAAwBQTFRFAAAAWlpab3B0+4w8+5A++5RB/JxF/KBH/KRK/6xD/KhM/69K/7FN/bBQ/7NR/bNT/7RU/bdV/7db/rtX/7hf/7pi/7tm/sNc/sde/stgzc3NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAktHyxAAAAQB0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zMECERxAAAAB5SURBVFhH5c+JEYJAEADBYxXxBwW/zT9PGKuAIJjOoMsYLmOJeJtElHi5MB5cGD9dGHcujO8ujK8ujC8ujE8ujHfbV/3NTcb77UvCOTcZ1wJZ5bJkfDDINcm4cWF8dGF8dmF8c2HcujB+uDDuXRh/XBh/XRj/XBjbTNF5MvOzTGb+AAAAAElFTkSuQmCC + + + 6 + EXPLORERBAR_SPECIALGROUPEXPANDNOTHIGHLIGHT + 0 + iVBORw0KGgoAAAANSUhEUgAAAPEAAAAZCAMAAADXAjjUAAAABGdBTUEAALGPC/xhBQAAAwBQTFRFAAAAWlpab3B0/6s//65C/7FG/7dM/7pQ/71T/7xu/8BW/8Zd/slg/sxj/s9n/8F5/8R//tVt/thx/tt0/8aE/8mK/86U/9Ga/9Sf/9alzc3NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABvgkxwAAAQB0Uk5T////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AFP3ByUAAAAYdEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My4zMECERxAAAAB5SURBVFhH5c+JEYJAEADBYxXxBwW/zT9PGKuAIJjOoMsYLmOJ+JlElPi6MP64MH67MH65MB5cGHcujFsXxicXxrvtq/7mJuP99iXhnJuMa4GsclkyPhjkmmTcuDA+ujA+uzC+uDC+ujC+uTC+uzB+uDB+ujDuXRjbTBTPMu1zQAfcAAAAAElFTkSuQmCC + + + 6 + EXPLORERBAR_SPECIALGROUPHIGHLIGHT_FORECOLOR + 0 + + + + 6 + EXPLORERBAR_SPECIALGROUPNOTHIGHLIGHT_FORECOLOR + 6050636 + + + + 6 + FORM_BACKGROUND + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAGnCAIAAAD5RaqZAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wUEDBs0BfVYWwAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAAmUlEQVR4nJ3UQQ6AIAwEwA3/f5wHr75lvZjQAm3XHkjA7WgsBFz3MwAEg4OMsmxwgBjsOKBhpwNUyzk3/1hb+vXSn9jnLrbcn0lWc94eTOKmDVxpew5gvk9HS/Pdngut4HR77slmRVfbZA9WT90423De/nMAvnsrd6Q9E/T3gM3UOpNtdUH2q870MsqiuVRXvEOqW3qSZUXdCxxapi1XRc5NAAAAAElFTkSuQmCC + + + 6 + OUTLOOKNAVBAR_BORDERCOLOR + 7630959 + + + + 6 + OVERFLOWPANELBUTTON_FOCUSEDNOTSELECTED + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAfCAIAAACpqzA1AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wQSEgsoBZy5zAAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAAL0lEQVR4nGPILyhh+P/vCRPDv19MDP9+E0e/P8DEwMDMxMAIwyxIbCifAY8chA0AbM4cEZgWJhoAAAAASUVORK5CYII= + + + 6 + OVERFLOWPANELBUTTON_FOCUSEDSELECTED + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAfCAIAAACpqzA1AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wQSEhEOZ7zG6gAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAAOUlEQVR4nGPILyhh+L83k4nh3x8mhv9/iaL/PPjFxMDCBMXMTAwsTEyMMDYrFjEWJiYGVmYoHy4GAHe1HMJ6sAamAAAAAElFTkSuQmCC + + + 6 + OVERFLOWPANELBUTTON_NOTFOCUSEDSELECTED + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAfCAIAAACpqzA1AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wQSEgsMOZ9dHQAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAAM0lEQVR4nGPILyhh+H9zFRPD319MDH9/Q+h/vxF8FDaU/nCR6T8zMxMDMwsTAzrNQrQ4AIvbHOb3Ov9uAAAAAElFTkSuQmCC + + + 6 + OVERFLOWPANEL_BACKGROUND + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAfCAIAAACpqzA1AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wQSEgUMpxxwkwAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAAMElEQVR4nGPILyhheP3uF9O/f/8Q+D+C/R+N/+/fP6b3b98yMTAyMjHiwYTkGRkZAc3VKByeAR+gAAAAAElFTkSuQmCC + + + 6 + OVERFLOWPANEL_MENUBUTTON + 0 + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAABnRSTlMA/wD/AP83WBt9AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wQSEgcgp/J+8gAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAAUUlEQVR4nGP8//8/AymAiSTVw0QDCxo/LbMQmTtrej8BG1q7OrGyEeA/Bnj16WdqRsGrTz8xpf7//8+INeJef/4lysuG1Q/YNeABgzAeaK8BAMrhQAUGDBQVAAAAAElFTkSuQmCC + + + 6 + PANELBUTTON_FOCUSEDNOTSELECTED + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAgCAIAAABch4VNAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wQSEgQaStP0gwAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAALElEQVR4nGPILyhh+P/vCRPDv19MDP9+E0e/P8DEwMDMxMCIBaOIs+AQh2MA3JYcEzGHdbUAAAAASUVORK5CYII= + + + 6 + PANELBUTTON_FOCUSEDSELECTED + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAgCAIAAABch4VNAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wQSEgoVRO/EnAAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAAN0lEQVR4nGPILyhh+L83k4nh3x8mhv9/iaL/PPjFxMDMxMTAAsPMTIwsqHwGFiYkMWa4HCMqHwDp8xzFHnwmBAAAAABJRU5ErkJggg== + + + 6 + PANELBUTTON_NOTFOCUSEDSELECTED + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAgCAIAAABch4VNAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wQSEgQIuWqFywAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAAL0lEQVR4nGPILyhh+H9zFRPD319MDH9/Q+h/vxF8FDaU/nCR6T8zMxMDHLOQywYA/r0c6aW048gAAAAASUVORK5CYII= + + + 6 + PANELBUTTON_NOTSELECTED_FONTCOLOR + 6050636 + + + + 6 + PANELBUTTON_SELECTED_FONTCOLOR + 0 + + + + 6 + PANELVERTICAL_FOCUSED_BACKCOLOR + 12775167 + + + + 6 + PANELVERTICAL_FONTCOLOR + 9126421 + + + + 6 + PANELVERTICAL_NOTFOCUSED_BACKCOLOR + 16051950 + + + + 6 + PANEL_BACKGROUND + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAgCAIAAABch4VNAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wQSEgQ6cb3USwAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAAMklEQVR4nGPILyhheP3uF9O/f/8Q+D+C/R+N/+/fP6b3b98yMTAwMDEyMmJgBixieMQBbbgoHuaseJwAAAAASUVORK5CYII= + + + 6 + SHORTCUTMENU_DOWN_ENABLED + 0 + Qk02BQAAAAAAADYEAAAoAAAAEAAAABAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAoFAw/6BYMP+wWDD/sGBA/7BoQP/AaED/wHBQ/8B4UP/QeFD/4HhQ/+CAUP/giFD/8IhQ/9CIYP/wkGD//5Bg/+CQcP/gmHD/8Jhw//CgcP//oHD//6iA//+wgP//sJD//7iQ///AoP//////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaAhoaGhoaGhoaGhoaGhoaAgUBGhoaGhoaGhoaGhoaAgoJBQAaGhoaGhoaGhoaBxIUCwgFABoaGhoaGhoaExEQFQ4KAAMEGhoaGhoaGhoaDRYPDAMaGhoaGhoaGhoaGhAZFQ4EGhoaGhoaGhoaGhoRGRgXBhoaGhoaGhoaGhoaExEQDQ0aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho= + + + 6 + SHORTCUTMENU_DOWN_DISABLED + 0 + Qk02BQAAAAAAADYEAAAoAAAAEAAAABAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAT09P/1RUVP9WVlb/X19f/2RkZP9mZmb/b29v/3R0dP92dnb/d3d3/3x8fP+BgYH/g4OD/4SEhP+MjIz/jo6O/4+Pj/+UlJT/lpaW/5qamv+cnJz/paWl/6qqqv+vr6//tLS0/729vf//////AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaAhoaGhoaGhoaGhoaGhoaAgUBGhoaGhoaGhoaGhoaAgoJBQAaGhoaGhoaGhoaBxIUCwgFABoaGhoaGhoaExEQFQ4KAAMEGhoaGhoaGhoaDRYPDAMaGhoaGhoaGhoaGhAZFQ4EGhoaGhoaGhoaGhoRGRgXBhoaGhoaGhoaGhoaExEQDQ0aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGho= + + + 6 + SHORTCUTMENU_UP_ENABLED + 0 + Qk02BQAAAAAAADYEAAAoAAAAEAAAABAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAAkEgg/6BIIP+gUCD/oFAw/6BYMP+wWDD/0Ggw/8BwQP/QcED/0HhA/9B4UP/QgFD/4IBQ/+CIYP/wkGD/8Jhg/+CYcP/woHD//6Bw//CogP//sJD//8Cg//////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgwDAAAAFhYWFhYWFhYWFhYMDQsHABYWFhYWFhYWFhYWDBMNCgEWFhYWFhYWFhYWFgwVDw0CFhYWFhYWFhYWEAgGFA8PBQIAFhYWFhYWFhYQFRQSDgkDFhYWFhYWFhYWFhEVFA0DFhYWFhYWFhYWFhYWERUEFhYWFhYWFhYWFhYWFhYQFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhY= + + + 6 + SHORTCUTMENU_UP_DISABLED + 0 + Qk02BQAAAAAAADYEAAAoAAAAEAAAABAAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAARERE/0ZGRv9KSkr/T09P/1RUVP9WVlb/Y2Nj/2pqav9sbGz/cXFx/3Z2dv96enr/fHx8/4aGhv+MjIz/kZGR/5SUlP+ampr/nJyc/6SkpP+vr6//vb29//////8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgwDAAAAFhYWFhYWFhYWFhYMDQsHABYWFhYWFhYWFhYWDBMNCgEWFhYWFhYWFhYWFgwVDw0CFhYWFhYWFhYWEAgGFA8PBQIAFhYWFhYWFhYQFRQSDgkDFhYWFhYWFhYWFhEVFA0DFhYWFhYWFhYWFhYWERUEFhYWFhYWFhYWFhYWFhYQFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhY= + + + 6 + SHRINKBUTTON_FOCUSEDNOTSHRUNK + 0 + iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAIAAADZrBkAAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wQSEhQPbcwCOQAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAA/klEQVR4nNWSMU7DQBBF364dFClIUHEQGiqqNBwF+wCgKIiISFzBHIGKhipNKi7AAegQFIjGKBb2rtdDE+FxZAmRAonVFK94o7+aGSPyxO9fLHW5TRt1tVVa+NO0vjYT7WJ3aJyEleZvwRLKjTJmAJye3wKatbOZZuI9EZtM7gAJHlrWZowaiRnsg0ku7oGbqxOCS2aLNfsPbXbT4iidLYDscizBp/Plmn0h7l1/ylJXbbk8mx4D6XxJcC0Lxo602RmJfL7i82xyBKTXDzSuZRNp00pd6WqKF6ny7OwQIPgOK81Uj9OevQ0PTDySupDyTfMP65bVcy+rBfyDU/4CfBPfdxfSPVEAAAAASUVORK5CYII= + + + 6 + SHRINKBUTTON_FOCUSEDSHRUNK + 0 + iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAIAAADZrBkAAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wQSEhMJy+4xywAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAA/ElEQVR4nNWSvUoDURCFz9xdw6KpLHwQGyurNHmUZB/AECKKguQN1kdIlSaVjZWVnQ9gZ6Wm2ZDg/Zsdm8V7VxPEFEKGKb4L53DgniGRZ/x9UvF6Gxu82SqN/zUtslHShmqhssLLmH/aFFiHBXqDCQCivQbHGtZgrcSbsOwA9IZTERUzkDVk3jTT3OL2qgugfz4D28AgUtnGtOrjVdyquOgA6F/eCbvAksTKxk9S6xCC/PoeQDE6Bdv85qFmW8bKFHFvlNS64Qkqm48fa3almPnmAtgBKM6OxZSU7n+xmPdvBZB5GoVHdkTpgfiV6LeYf6lbli9reY1tF075E2j35Yh+I0LJAAAAAElFTkSuQmCC + + + 6 + SHRINKBUTTON_NOTFOCUSEDNOTSHRUNK + 0 + iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAIAAADZrBkAAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wQSEhUc8GlypgAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAA1UlEQVR4nJ2SQVMCMQyFX9LlH8suDOIBHRD+Jgcvnhi92CbPA9hJZQ/aTA7fdN5r0qRy+fjE/2MgO1wY2OXrtXlvtZnTlFRFnDTzyFWgvAtVEcjDciOQyFHz+21DSiKyHDcACEaOyqbJq2ccHwGcji8gxunGbs39TTWRm+74+kxyWm2vbO6lWGxKnaxZ3A+HHYBptXWyMgBNjbIZSc7Ffpzr9ROAyirNSJREzJzNzPf7HQASkWPK+e39fm+LIamqu+dikedHUuMrl1meX8Dfo/9P9ti+AeBn8p2xV373AAAAAElFTkSuQmCC + + + 6 + SHRINKBUTTON_NOTFOCUSEDSHRUNK + 0 + iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAIAAADZrBkAAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wQSEhYbRSC0xgAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAA0klEQVR4nJ2Su44CMQxF73XCH8MA4lHAChZ+c4ttqBA0TGxTIIVEM6y0sVIcK/ckUhxeb3f8v6J7g4XoTV6rZq23vZsQREhzV7WSh5p4UQSnsxVBEZbsg6o0hwOYdSuSJQeRoYa8TP18+gLQdWs4MpMMEspkdUyfkpqdvvcAuvna3TOTKJPVS8YYAMwXGwDH487cl8vti5NZlSznJmTOAcisZinpxwG8+HDYqZqIZO5rBwB/fi+5mcQgImbWJy15dNzv6x59GuVR7Y/dz1rzn2zRngPQ7630RQNPAAAAAElFTkSuQmCC + + + 6 + SIGNS_MINUS + 0 + iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjIwWZ92UQAAAI5JREFUKFNjfP76/f+dRy8ygMEPCAUCH6B8a0NxBoYFGw78xwA//v//8OH//wdAwsAj4T+mIriC//8PXHgAVbQCySQkBQ9efPi/4QCaIpCx6BiuaALIJJAJQPwA5A4gceHGB6BVH/4v2HEBYh1IEYYCbIpAJoAcueEEEAPdATIBhsEmnb54HcMtyG4DyQMAS+rq4jk+qVQAAAAASUVORK5CYII= + + + 6 + SIGNS_PLUS + 0 + iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjIwWZ92UQAAAJZJREFUKFNjfP76/f+dRy8ygMEPCAUCH6B8a0NxBoYFGw78xwA//v//8OH//wdAwsAj4T+GIpAgRMH//wcuPIAqWoFkEtAEkCKQggcvPvzfcABNEUgSHcMVTQCZBHIDEINMACm8cOMD0KoP/xfsuACxDqQIpuABUBVI8AA2RTBHbjjxAOwOkAkwDDbp9MXrGG5BdhtIHgAc3OMlaQBkAQAAAABJRU5ErkJggg== + + + 6 + SPLITTER_BACKGROUND + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAICAIAAAC3eAIWAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wQSEgIzXjvLaQAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAAIklEQVR4nGPILyhh+P//P7OmhgPTt28/4Pj79x9M3779AAATQBNlMpXJ5wAAAABJRU5ErkJggg== + + + 6 + SPLITTER_GRIPPER + 0 + iVBORw0KGgoAAAANSUhEUgAAACMAAAAICAIAAAD80NH7AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wQSEgMtvS/HSwAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAAY0lEQVR4nGPMLyhhoAtg/P//P31sYlm54gCdbPr27QdWiXv3jzIwMCgpWpPBxgqYvn37gRUxMDAEBAREx7iQwcaKcPqJj1dbV1efgYHh27cfpLKxGsjY2DCfUAhTB+D0E9UBAN8HdalY7CBnAAAAAElFTkSuQmCC + + + 6 + TITLE_BACKGROUND + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAAaCAIAAAD5ZqGGAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH1wQSETs0zJ1tKQAAAAd0RVh0QXV0aG9yAKmuzEgAAAAMdEVYdERlc2NyaXB0aW9uABMJISMAAAAKdEVYdENvcHlyaWdodACsD8w6AAAADnRFWHRDcmVhdGlvbiB0aW1lADX3DwkAAAAJdEVYdFNvZnR3YXJlAF1w/zoAAAALdEVYdERpc2NsYWltZXIAt8C0jwAAAAh0RVh0V2FybmluZwDAG+aHAAAAB3RFWHRTb3VyY2UA9f+D6wAAAAh0RVh0Q29tbWVudAD2zJa/AAAABnRFWHRUaXRsZQCo7tInAAAAKUlEQVR4nGP4//8/0/cfP5n+/f/P9B+OGeDsf2h8GPsfFrX//zPgMgcAvaBH0sQHj90AAAAASUVORK5CYII= + + + 6 + TITLE_BACKGROUND_LEFT + 2 + + + + 6 + TITLE_BACKGROUND_WIDTH + 197 + + + + 6 + TITLE_BORDERCOLOR + 7630959 + + + + 6 + TITLE_FONTCOLOR + 9126421 + + + + 6 + TOOLTITLE_BACKGROUND + 0 + iVBORw0KGgoAAAANSUhEUgAAAAEAAAATCAIAAADeafBOAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABZJREFUGFdj+P//P8PV288pxkePHwcAalMxWBV6fiMAAAAASUVORK5CYII= + + + 6 + TOOLTITLE_FONTCOLOR + 9126421 + + + + 6 + ZOOMNAVBAR_BAR + 0 + Qk3+BAAAAAAAADYEAAAoAAAAAQAAADIAAAABAAgAAAAAAAAAAADEDgAAxA4AAAABAAAAAQAApp+b/6egnP+ooZ3/qaKe/6qjn/+rpKD/raWh/66mov+vp6P/sKik/7Gppf+yqqb/s6yo/7Stqf+1rqr/tq+r/7ewrP+4sa3/ubKu/7uzr/+8tLD/vbWx/762sv+/t7P/wLi0/8G5tf/Iwb3/2NPQ/9rV0//c19X/3trX/+Hc2v/j3tz/5eHf/+fj4f/p5eT/6+fm/+zp6P/u6+r/8O3s//Hv7f/y8O//9PLx//Xz8v/39fT/+Pb1//n39//6+fj/+/r5/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAABAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAATAAAAFAAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAfAAAAIAAAACEAAAAiAAAAIwAAACQAAAAlAAAAJgAAACcAAAAoAAAAKQAAACoAAAArAAAALAAAAC0AAAAuAAAALwAAADAAAAAwAAAA + + + 6 + ZOOMNAVBAR_REFLECTEDSEPARATOR + 0 + iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABGdBTUEAALGPC/xhBQAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjIwWZ92UQAAAD9JREFUaEPt0IEAAAAAw6D5Ux/khVBhwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwMDLwAAkMAABCDVySwAAAABJRU5ErkJggg== + + + 6 + ZOOMNAVBAR_SEPARATOR + 0 + iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABGdBTUEAALGPC/xhBQAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjIwWZ92UQAAAD9JREFUaEPt0IEAAAAAw6D5Ux/khVBhwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwMDLwAAkMAABCDVySwAAAABJRU5ErkJggg== + + + 6 + ZOOMNAVBAR_STACKBUTTON + 0 + iVBORw0KGgoAAAANSUhEUgAAAMAAAAAcCAYAAAA3ILBTAAABF0lEQVR4nO3cMW7CQBRF0WuU1kUovAHatNn/CuiyCyJKOnAKG8YQg02BjP6/R0LC43kSxTw0jGRASqy6uW6A9ci4FMEJ2AH788BwoX8Dm8FYy/0izLln3vyS+UfXP/2LVT/YcL34pagq4AuooRTAbY8yqYBPKAVw8SubCkoBpJQ+Bu/bkftjY8/cM29+yfzk3GEBbrdBS/+KN2/+FadAV9wCKTULoNQsgFKzAErNAig1j0HNR85PzvUY1HzU/Jy5boGUmwVQahZAqVkApWYBlJrHoOYj5yfnegxqPmp+ztzLFuh0b4IUVAulALvzgJTAEfiFUoA93d9EWAJFdwS2wAH+741quqflfUheEbV03/yHpT+I9Bb+AD0fBdMuQEabAAAAAElFTkSuQmCC + + \ No newline at end of file diff --git a/COMUN/utile/ctl32/ZoomNavBar.VCT b/COMUN/utile/ctl32/ZoomNavBar.VCT new file mode 100644 index 0000000..d1425dc Binary files /dev/null and b/COMUN/utile/ctl32/ZoomNavBar.VCT differ diff --git a/COMUN/utile/ctl32/buttons.vct b/COMUN/utile/ctl32/buttons.vct new file mode 100644 index 0000000..61ebf6a Binary files /dev/null and b/COMUN/utile/ctl32/buttons.vct differ diff --git a/COMUN/utile/ctl32/buttons.vcx b/COMUN/utile/ctl32/buttons.vcx new file mode 100644 index 0000000..d50eef6 Binary files /dev/null and b/COMUN/utile/ctl32/buttons.vcx differ diff --git a/COMUN/utile/ctl32/ctl32.h b/COMUN/utile/ctl32/ctl32.h new file mode 100644 index 0000000..fccdbbc --- /dev/null +++ b/COMUN/utile/ctl32/ctl32.h @@ -0,0 +1,4557 @@ +******************************************************************************** +*!* ctl32.h include file for ctl32 classes +*!* +*!* This file has 4 parts: +*!* 1: Custom defines +*!* 2: Windows API defines +*!* 3: Defines from Windows SDK vsstyle.h uxtheme.h +*!* 4: A subset of defines from foxpro.h +******************************************************************************** + +******************************************************************************** +*!* CTL CUSTOM +******************************************************************************** +*!* 20061004 Replaced the CTL prefix with CON (Constant) to avoid conflict with +*!* Win API constants that start also with CTL_ + +#Define TRUE .T. +#Define FALSE .F. + +#Define CR chr(0xd) +#Define LF chr(0xa) +#Define CRLF chr(0xd)+chr(0xa) +#Define NULA chr(0x0) +#Define NULW chr(0x0)+chr(0x0) +#Define NULCHAR chr(0x0) +#Define TABCHAR chr(0x9) + +*!* Pemstatus Values +#Define CTLPEMSTATUS_CHANGED 0 +#Define CTLPEMSTATUS_READONLY 1 +#Define CTLPEMSTATUS_PROTECTED 2 +#Define CTLPEMSTATUS_TYPE 3 +#Define CTLPEMSTATUS_USERDEFINED 4 +#Define CTLPEMSTATUS_DEFINED 5 +#Define CTLPEMSTATUS_INHERITED 6 + +*!* TabOrientation Enum +#Define CTLTABORIENTATION_TOP 0 +#Define CTLTABORIENTATION_BOTTOM 1 +#Define CTLTABORIENTATION_LEFT 2 +#Define CTLTABORIENTATION_RIGHT 3 + +*!* Orientation Enum +#Define CTLORIENTATION_HORIZONTAL 0 +#Define CTLORIENTATION_VERTICAL 1 + +*!* TickStyle Enum +#Define CTLTICKSTYLE_NONE 0 +#Define CTLTICKSTYLE_TOPLEFT 1 +#Define CTLTICKSTYLE_BOTTOMRIGHT 2 +#Define CTLTICKSTYLE_BOTH 3 + +*!* Missing MousePointer constants in foxpro.h +#Define MOUSE_HAND 15 +#Define MOUSE_DN_ARROW 16 +#Define MOUSE_MGLASS 17 + +* This are used to clear certain style bits +#Define CON_BIT_WS_BORDER 23 +#Define CON_BIT_WS_EX_LAYOUTRTL 22 +#Define CON_BIT_WS_EX_STATICEDGE 17 +#Define CON_BIT_TTS_BALLOON 6 +#Define CON_BIT_TTS_CLOSE 7 +#Define CON_BIT_WS_VISIBLE 28 + +*!* BorderStyle +#Define CON_BS_NONE 0 +#Define CON_BS_FIXEDSINGLE 1 +#Define CON_BS_FIXEDDIALOG 2 +#Define CON_BS_SIZABLE 3 + +#Define CON_BTPOS_NONE 1 +#Define CON_BTPOS_LEFTTOP 1 +#Define CON_BTPOS_ACTIVECTRL 2 +#Define CON_BTPOS_CARET 3 +#Define CON_BTPOS_SYS1270 4 +#Define CON_BTPOS_CTRLREF 5 +#Define CON_BTPOS_MOUSE 6 + +#Define CON_BTSTYLE_BALLOON 1 +#Define CON_BTSTYLE_RECT 2 +#Define CON_BTSTYLE_NOBORDER 3 + +#Define CON_EFFECT_RAISED 0 +#Define CON_EFFECT_SUNKEN 1 +#Define CON_EFFECT_FLAT 2 + +#Define CON_FORMTYPE_DEFAULT 0 +#Define CON_FORMTYPE_TOPLEVEL 1 +#Define CON_FORMTYPE_SCREEN 2 + +*!* ObjToClient parameters +#Define CON_OBJTOCLI_TOP 1 +#Define CON_OBJTOCLI_LEFT 2 +#Define CON_OBJTOCLI_WIDTH 3 +#Define CON_OBJTOCLI_HEIGHT 4 + +*!* Alignment Values +#Define CON_ALIGN_MIDDLELEFT 0 +#Define CON_ALIGN_MIDDLERIGHT 1 +#Define CON_ALIGN_MIDDLECENTER 2 +#Define CON_ALIGN_AUTOMATIC 3 +#Define CON_ALIGN_TOPLEFT 4 +#Define CON_ALIGN_TOPRIGHT 5 +#Define CON_ALIGN_TOPCENTER 6 +#Define CON_ALIGN_BOTTOMLEFT 7 +#Define CON_ALIGN_BOTTOMRIGHT 8 +#Define CON_ALIGN_BOTTOMCENTER 9 + +*!* Pemstatus Values +#Define CON_PEMSTAT_CHANGED 0 +#Define CON_PEMSTAT_READONLY 1 +#Define CON_PEMSTAT_PROTECTED 2 +#Define CON_PEMSTAT_TYPE 3 +#Define CON_PEMSTAT_USERDEFINED 4 +#Define CON_PEMSTAT_DEFINED 5 +#Define CON_PEMSTAT_INHERITED 6 + +#Define CON_SBBORDER_HORIZONTAL 1 +#Define CON_SBBORDER_VERTICAL 2 +#Define CON_SBBORDER_SEPARATOR 3 + +*!* ShowWindow +#Define CON_SHOWWIN_INSCREEN 0 +#Define CON_SHOWWIN_INTOPLEVELFORM 1 +#Define CON_SHOWWIN_ASTOPLEVELFORM 2 + +#Define CON_STYLE_BALLOON 1 +#Define CON_STYLE_RECT 2 +#Define CON_STYLE_NOBORDER 3 + +*!* TabOrientation parameters +#Define CON_TABOR_TOP 0 +#Define CON_TABOR_BOTTOM 1 +#Define CON_TABOR_LEFT 2 +#Define CON_TABOR_RIGHT 3 + +*!* VFP VERSION() +#Define CON_VER_DATESERIAL 1 +#Define CON_VER_TYPE 2 +#Define CON_VER_LANG 3 +#Define CON_VER_CHAR 4 +#Define CON_VER_NUM 5 + +#Define CON_VER_TYPE_RUNTIME 0 +#Define CON_VER_TYPE_STANDARD 1 +#Define CON_VER_TYPE_PRO 2 + +#Define CON_VER_LANG_ENGLISH "00" +#Define CON_VER_LANG_RUSSSIAN "07" +#Define CON_VER_LANG_FRENCH "33" +#Define CON_VER_LANG_SPANISH "34" +#Define CON_VER_LANG_CZECH "39" +#Define CON_VER_LANG_GERMAN "48" +#Define CON_VER_LANG_KOREAN "55" +#Define CON_VER_LANG_SCHINESE "86" +#Define CON_VER_LANG_TCHINESE "88" + +*!* WindowType constants +#Define CON_WINTYPE_MODELESS 0 +#Define CON_WINTYPE_MODAL 1 +#Define CON_WINTYPE_READ 2 +#Define CON_WINTYPE_READMODAL 3 + +*!* These should be removed, not to be used, see NTDDI_x below +#Define OS_WIN95 400 +#Define OS_WIN98 410 +#Define OS_WINME 500 +#Define OS_WINNT4 400 +#Define OS_WIN2K 500 +#Define OS_WINXP 501 +#Define OS_WIN2K3 502 +#Define OS_WINVISTA 600 + +#Define CON_OS_WIN95 4000000 +#Define CON_OS_WIN98 4100000 +#Define CON_OS_WIN2K 5000000 +#Define CON_OS_WIN2KSP1 5000100 +#Define CON_OS_WIN2KSP2 5000200 +#Define CON_OS_WIN2KSP3 5000300 +#Define CON_OS_WIN2KSP4 5000400 +#Define CON_OS_WINXP 5010000 +#Define CON_OS_WINXPSP1 5010100 +#Define CON_OS_WINXPSP2 5010200 +#Define CON_OS_WS03 5020000 +#Define CON_OS_WS03SP1 5020100 +#Define CON_OS_WS03SP2 5020200 +#Define CON_OS_LONGHORN 6000000 +#Define CON_OS_WINVISTA 6000000 + +#Define VFP_MAX_STRING_SIZE 16777184 + +******************************************************************************** +*!* WINDOWS API +******************************************************************************** +#Define ANSI_CHARSET 0 +#Define ARABIC_CHARSET 178 +#Define BALTIC_CHARSET 186 + +#Define BIF_BROWSEFORCOMPUTER 0x1000 +#Define BIF_BROWSEFORPRINTER 0x2000 +#Define BIF_BROWSEINCLUDEFILES 0x4000 +#Define BIF_BROWSEINCLUDEURLS 0x80 +#Define BIF_DONTGOBELOWDOMAIN 0x2 +#Define BIF_EDITBOX 0x10 +#Define BIF_NEWDIALOGSTYLE 0x40 +#Define BIF_NONEWFOLDERBUTTON 0x0200 +#Define BIF_NOTRANSLATETARGETS 0x0400 +#Define BIF_RETURNFSANCESTORS 0x8 +#Define BIF_RETURNONLYFSDIRS 0x1 +#Define BIF_SHAREABLE 0x8000 +#Define BIF_STATUSTEXT 0x4 +#Define BIF_USENEWUI 0x40 +#Define BIF_VALIDATE 0x20 +#Define BIF_UAHINT 0x0100 + +*!* message from browser +#Define BFFM_INITIALIZED 1 +#Define BFFM_SELCHANGED 2 +#Define BFFM_VALIDATEFAILEDA 3 && lParam:szPath ret:1(cont),0(EndDialog) +#Define BFFM_VALIDATEFAILEDW 4 && lParam:wzPath ret:1(cont),0(EndDialog) +#Define BFFM_IUNKNOWN 5 && provides IUnknown to client. lParam: IUnknown* + +*!* messages to browser +#Define BFFM_SETSTATUSTEXTA (0x400 + 100) +#Define BFFM_ENABLEOK (0x400 + 101) +#Define BFFM_SETSELECTIONA (0x400 + 102) +#Define BFFM_SETSELECTIONW (0x400 + 103) +#Define BFFM_SETSTATUSTEXTW (0x400 + 104) +#Define BFFM_SETOKTEXT (0x400 + 105) && Unicode only +#Define BFFM_SETEXPANDED (0x400 + 106) && Unicode only + +#Define CAL_GREGORIAN 1 && Gregorian (localized) calendar +#Define CAL_GREGORIAN_US 2 && Gregorian (U.S.) calendar +#Define CAL_JAPAN 3 && Japanese Emperor Era calendar +#Define CAL_TAIWAN 4 && Taiwan calendar +#Define CAL_KOREA 5 && Korean Tangun Era calendar +#Define CAL_HIJRI 6 && Hijri (Arabic Lunar) calendar +#Define CAL_THAI 7 && Thai calendar +#Define CAL_HEBREW 8 && Hebrew (Lunar) calendar +#Define CAL_GREGORIAN_ME_FRENCH 9 && Gregorian Middle East French calendar +#Define CAL_GREGORIAN_ARABIC 10 && Gregorian Arabic calendar +#Define CAL_GREGORIAN_XLIT_ENGLISH 11 && Gregorian Transliterated English calendar +#Define CAL_GREGORIAN_XLIT_FRENCH 12 && Gregorian Transliterated French calendar +#Define CAL_UMALQURA 23 && UmAlQura Hijri (Arabic Lunar) calendar + +#Define CCHDEVICENAME 32 +#Define CCM_FIRST 0x2000 +#Define CCM_GETCOLORSCHEME 0x2003 +#Define CCM_GETDROPTARGET 0x2004 +#Define CCM_GETUNICODEFORMAT 0x2006 +#Define CCM_GETVERSION 0x2008 +#Define CCM_LAST 0x2200 +#Define CCM_SETBKCOLOR 0x2001 +#Define CCM_SETCOLORSCHEME 0x2002 +#Define CCM_SETNOTIFYWINDOW 0x2009 +#Define CCM_SETUNICODEFORMAT 0x2005 +#Define CCM_SETVERSION 0x2007 +#Define CCM_SETWINDOWTHEME 0x200B +#Define CCS_ADJUSTABLE 0x20 +#Define CCS_BOTTOM 0x3 +#Define CCS_LEFT 0x81 +#Define CCS_NODIVIDER 0x40 +#Define CCS_NOMOVEX 0x82 +#Define CCS_NOMOVEY 0x2 +#Define CCS_NOPARENTALIGN 0x8 +#Define CCS_NORESIZE 0x4 +#Define CCS_RIGHT 0x83 +#Define CCS_TOP 0x1 +#Define CCS_VERT 0x80 + +#Define CDDS_ITEM 0x10000 +#Define CDDS_ITEMPOSTERASE 0x10004 &&(CDDS_ITEM Or CDDS_POSTERASE) +#Define CDDS_ITEMPOSTPAINT 0x10002 &&(CDDS_ITEM Or CDDS_POSTPAINT) +#Define CDDS_ITEMPREERASE 0x10003 &&(CDDS_ITEM Or CDDS_PREERASE) +#Define CDDS_ITEMPREPAINT 0x10001 &&(CDDS_ITEM Or CDDS_PREPAINT) +#Define CDDS_MAPPART 0x5 +#Define CDDS_POSTERASE 0x4 +#Define CDDS_POSTPAINT 0x2 +#Define CDDS_PREERASE 0x3 +#Define CDDS_PREPAINT 0x1 +#Define CDDS_SUBITEM 0x20000 + +#Define CDERR_DIALOGFAILURE 0xFFFF +#Define CDERR_FINDRESFAILURE 0x6 +#Define CDERR_INITIALIZATION 0x2 +#Define CDERR_LOADRESFAILURE 0x7 +#Define CDERR_LOADSTRFAILURE 0x5 +#Define CDERR_LOCKRESFAILURE 0x8 +#Define CDERR_MEMALLOCFAILURE 0x9 +#Define CDERR_MEMLOCKFAILURE 0xA +#Define CDERR_NOHINSTANCE 0x4 +#Define CDERR_NOHOOK 0xB +#Define CDERR_NOTEMPLATE 0x3 +#Define CDERR_REGISTERMSGFAIL 0xC +#Define CDERR_STRUCTSIZE 0x1 + +#Define CDIS_CHECKED 0x8 +#Define CDIS_DEFAULT 0x20 +#Define CDIS_DISABLED 0x4 +#Define CDIS_FOCUS 0x10 +#Define CDIS_GRAYED 0x2 +#Define CDIS_HOT 0x40 +#Define CDIS_INDETERMINATE 0x100 +#Define CDIS_MARKED 0x80 +#Define CDIS_SELECTED 0x1 +#Define CDIS_SHOWKEYBOARDCUES 0x200 + +#Define CDIS_NEARHOT 0x0400 +#Define CDIS_OTHERSIDEHOT 0x0800 +#Define CDIS_DROPHILITED 0x1000 + +#Define CDM_FIRST (0x400+100) +#Define CDM_GETFILEPATH (0x400+100+0x1) +#Define CDM_GETFOLDERIDLIST (0x400+100+0x3) +#Define CDM_GETFOLDERPATH (0x400+100+0x2) +#Define CDM_GETSPEC (0x400+100+0x0) +#Define CDM_HIDECONTROL (0x400+100+0x5) +#Define CDM_LAST (0x400+200) +#Define CDM_SETCONTROLTEXT (0x400+100+0x4) +#Define CDM_SETDEFEXT (0x400+100+0x6) + +#Define CDN_FIRST (-601) +#Define CDN_FILEOK (-601-0x5) +#Define CDN_FOLDERCHANGE (-601-0x2) +#Define CDN_HELP (-601-0x4) +#Define CDN_INCLUDEITEM (-601-0x7) +#Define CDN_INITDONE (-601-0x0) +#Define CDN_LAST (-699) +#Define CDN_SELCHANGE (-601-0x1) +#Define CDN_SHAREVIOLATION (-601-0x3) +#Define CDN_TYPECHANGE (-601-0x6) + +#Define CDRF_DODEFAULT 0x0 +#Define CDRF_NEWFONT 0x2 +#Define CDRF_SKIPDEFAULT 0x4 +#Define CDRF_DOERASE 0x8 && draw the background +#Define CDRF_SKIPPOSTPAINT 0x100 && don't draw the focus rect +#Define CDRF_NOTIFYPOSTPAINT 0x10 +#Define CDRF_NOTIFYITEMDRAW 0x20 +#Define CDRF_NOTIFYSUBITEMDRAW 0x20 && flags are the same, we can distinguish by context +#Define CDRF_NOTIFYPOSTERASE 0x40 + +#Define CHINESEBIG5_CHARSET 136 +#Define CLIP_STROKE_PRECIS 2 +#Define CLR_DEFAULT 0xff000000 +#Define CLR_HILIGHT 0xff000000 +#Define CLR_INVALID 0xffff +#Define CLR_NONE 0xffffffff +#Define COLOR_3DDKSHADOW 21 +#Define COLOR_3DFACE 15 +#Define COLOR_3DHIGHLIGHT 20 +#Define COLOR_3DHILIGHT 20 +#Define COLOR_3DLIGHT 22 +#Define COLOR_3DSHADOW 16 +#Define COLOR_ACTIVEBORDER 10 +#Define COLOR_ACTIVECAPTION 2 +#Define COLOR_ADD 712 +#Define COLOR_ADJ_MAX 100 +#Define COLOR_ADJ_MIN -100 +#Define COLOR_APPWORKSPACE 12 +#Define COLOR_BACKGROUND 1 +#Define COLOR_BLUE 708 +#Define COLOR_BLUEACCEL 728 +#Define COLOR_BOX1 720 +#Define COLOR_BTNFACE 15 +#Define COLOR_BTNHIGHLIGHT 20 +#Define COLOR_BTNHILIGHT 20 +#Define COLOR_BTNSHADOW 16 +#Define COLOR_BTNTEXT 18 +#Define COLOR_CAPTIONTEXT 9 +#Define COLOR_CURRENT 709 +#Define COLOR_CUSTOM1 721 +#Define COLOR_DESKTOP 1 +#Define COLOR_ELEMENT 716 +#Define COLOR_GRADIENTACTIVECAPTION 27 +#Define COLOR_GRADIENTINACTIVECAPTION 28 +#Define COLOR_GRAYTEXT 17 +#Define COLOR_GREEN 707 +#Define COLOR_GREENACCEL 727 +#Define COLOR_HIGHLIGHT 13 +#Define COLOR_HIGHLIGHTTEXT 14 +#Define COLOR_HOTLIGHT 26 +#Define COLOR_HUE 703 +#Define COLOR_HUEACCEL 723 +#Define COLOR_HUESCROLL 700 +#Define COLOR_INACTIVEBORDER 11 +#Define COLOR_INACTIVECAPTION 3 +#Define COLOR_INACTIVECAPTIONTEXT 19 +#Define COLOR_INFOBK 24 +#Define COLOR_INFOTEXT 23 +#Define COLOR_LUM 705 +#Define COLOR_LUMACCEL 725 +#Define COLOR_LUMSCROLL 702 +#Define COLOR_MATCH_VERSION 0x200 +#Define COLOR_MENU 4 +#Define COLOR_MENUBAR 30 && The color used to highlight menu items when the menu appears as a flat menu +#Define COLOR_MENUHILIGHT 29 && The background color for the menu bar when menus appear as flat menus +#Define COLOR_MENUTEXT 7 +#Define COLOR_MIX 719 +#Define COLOR_NO_TRANSPARENT 0xffffffff +#Define COLOR_PALETTE 718 +#Define COLOR_RAINBOW 710 +#Define COLOR_RED 706 +#Define COLOR_REDACCEL 726 +#Define COLOR_SAMPLES 717 +#Define COLOR_SAT 704 +#Define COLOR_SATACCEL 724 +#Define COLOR_SATSCROLL 701 +#Define COLOR_SAVE 711 +#Define COLOR_SCHEMES 715 +#Define COLOR_SCROLLBAR 0 +#Define COLOR_SOLID 713 +#Define COLOR_SOLID_LEFT 730 +#Define COLOR_SOLID_RIGHT 731 +#Define COLOR_TUNE 714 +#Define COLOR_WINDOW 5 +#Define COLOR_WINDOWFRAME 6 +#Define COLOR_WINDOWTEXT 8 +#Define CREATE_ALWAYS 2 +#Define CREATE_NEW 1 + +#Define CS_VREDRAW 0x0001 +#Define CS_HREDRAW 0x0002 +#Define CS_DBLCLKS 0x0008 +#Define CS_OWNDC 0x0020 +#Define CS_CLASSDC 0x0040 +#Define CS_PARENTDC 0x0080 +#Define CS_NOCLOSE 0x0200 +#Define CS_SAVEBITS 0x0800 +#Define CS_BYTEALIGNCLIENT 0x1000 +#Define CS_BYTEALIGNWINDOW 0x2000 +#Define CS_GLOBALCLASS 0x4000 +#Define CS_IME 0x00010000 +#Define CS_DROPSHADOW 0x00020000 + +#Define CSIDL_ADMINTOOLS 0x0030 +#Define CSIDL_ALTSTARTUP 0x001D +#Define CSIDL_APPDATA 0x001A +#Define CSIDL_BITBUCKET 0x000A +#Define CSIDL_CDBURN_AREA 0x003B +#Define CSIDL_COMMON_ADMINTOOLS 0x002F +#Define CSIDL_COMMON_ALTSTARTUP 0x001E +#Define CSIDL_COMMON_APPDATA 0x0023 +#Define CSIDL_COMMON_DESKTOPDIRECTORY 0x0019 +#Define CSIDL_COMMON_DOCUMENTS 0x002E +#Define CSIDL_COMMON_FAVORITES 0x001F +#Define CSIDL_COMMON_MUSIC 0x0035 +#Define CSIDL_COMMON_OEM_LINKS 0x003A +#Define CSIDL_COMMON_PICTURES 0x0036 +#Define CSIDL_COMMON_PROGRAMS 0x0017 +#Define CSIDL_COMMON_STARTMENU 0x0016 +#Define CSIDL_COMMON_STARTUP 0x0018 +#Define CSIDL_COMMON_TEMPLATES 0x002D +#Define CSIDL_COMMON_VIDEO 0x0037 +#Define CSIDL_COMPUTERSNEARME 0x003D +#Define CSIDL_CONNECTIONS 0x0031 +#Define CSIDL_CONTROLS 0x0003 +#Define CSIDL_COOKIES 0x0021 +#Define CSIDL_DESKTOP 0x0000 +#Define CSIDL_DESKTOPDIRECTORY 0x0010 +#Define CSIDL_DRIVES 0x0011 +#Define CSIDL_FAVORITES 0x0006 +#Define CSIDL_FONTS 0x0014 +#Define CSIDL_HISTORY 0x0022 +#Define CSIDL_INTERNET 0x0001 +#Define CSIDL_INTERNET_CACHE 0x0020 +#Define CSIDL_LOCAL_APPDATA 0x001C +#Define CSIDL_MYDOCUMENTS 0x0005 +#Define CSIDL_MYMUSIC 0x000D +#Define CSIDL_MYPICTURES 0x0027 +#Define CSIDL_MYVIDEO 0x000E +#Define CSIDL_NETHOOD 0x0013 +#Define CSIDL_NETWORK 0x0012 +#Define CSIDL_PERSONAL 0x0005 +#Define CSIDL_PRINTERS 0x0004 +#Define CSIDL_PRINTHOOD 0x001B +#Define CSIDL_PROFILE 0x0028 +#Define CSIDL_PROGRAM_FILES 0x0026 +#Define CSIDL_PROGRAM_FILES_COMMON 0x002B +#Define CSIDL_PROGRAM_FILES_COMMONX86 0x002C +#Define CSIDL_PROGRAM_FILESX86 0x002A +#Define CSIDL_PROGRAMS 0x0002 +#Define CSIDL_RECENT 0x0008 +#Define CSIDL_RESOURCES 0x0038 +#Define CSIDL_RESOURCES_LOCALIZED 0x0039 +#Define CSIDL_SENDTO 0x0009 +#Define CSIDL_STARTMENU 0x000B +#Define CSIDL_STARTUP 0x0007 +#Define CSIDL_SYSTEM 0x0025 +#Define CSIDL_SYSTEMX86 0x0029 +#Define CSIDL_TEMPLATES 0x0015 +#Define CSIDL_WINDOWS 0x0024 + +#Define CSIDL_FLAG_CREATE 0x8000 && combine with CSIDL_ value to force folder creation in SHGetFolderPath() +#Define CSIDL_FLAG_DONT_UNEXPAND 0x2000 && combine with CSIDL_ value to avoid unexpanding environment variables +#Define CSIDL_FLAG_DONT_VERIFY 0x4000 && combine with CSIDL_ value to return an unverified folder path +#Define CSIDL_FLAG_NO_ALIAS 0x1000 && combine with CSIDL_ value to insure non-alias versions of the pidl +#Define CSIDL_FLAG_PER_USER_INIT 0x0800 && combine with CSIDL_ value to indicate per-user init (eg. upgrade) +#Define CSIDL_FLAG_MASK 0xFF00 && mask for all possible flag values + +#Define CW_USEDEFAULT 0x80000000 +#Define DATE_LONGDATE 0x2 +#Define DATE_LTRREADING 0x10 +#Define DATE_RTLREADING 0x20 +#Define DATE_SHORTDATE 0x1 +#Define DATE_USE_ALT_CALENDAR 0x4 +#Define DATE_YEARMONTH 0x8 + +#Define DATETIMEPICK_CLASSA "SysDateTimePick32" +#Define DATETIMEPICK_CLASSW "SysDateTimePick32" + +#Define DEFAULT_CHARSET 1 +#Define DEFAULT_GUI_FONT 17 +#Define DEFAULT_PITCH 0 +#Define DI_COMPAT 0x0004 +#Define DI_DEFAULTSIZE 0x0008 +#Define DI_IMAGE 0x0002 +#Define DI_MASK 0x0001 +#Define DI_NOMIRROR 0x0010 +#Define DI_NORMAL 0x0003 +#Define DIFFERENCE 11 +#Define DTBG_CLIPRECT 0x00000001 && rcClip has been specified +#Define DTBG_COMPUTINGREGION 0x00000010 && TRUE if calling to compute region +#Define DTBG_DRAWSOLID 0x00000002 && DEPRECATED: draw transparent/alpha images as solid +#Define DTBG_MIRRORDC 0x00000020 && assume the hdc is mirrorred and flip images as appropriate (currently only supported for bgtype=imagefile) +#Define DTBG_NOMIRROR 0x00000040 && don't mirror the output, overrides everything else +#Define DTBG_OMITBORDER 0x00000004 && don't draw border of part +#Define DTBG_OMITCONTENT 0x00000008 && don't draw content area of part +#Define DTBG_VALIDBITS Bitor(0x00000001,0x00000002,0x00000004,0x00000008,0x00000010,0x00000020,0x00000040) +#Define EASTEUROPE_CHARSET 238 +#Define EBWBS_DISABLED 3 +#Define EBWBS_FOCUSED 4 +#Define EBWBS_HOT 2 +#Define EBWBS_NORMAL 1 + +#Define EM_AUTOURLDETECT (0x400 + 91) +#Define EM_CANPASTE (0x400 + 50) +#Define EM_CANREDO (0x400 + 85) +#Define EM_CANUNDO 0xC6 +#Define EM_CHARFROMPOS 0xD7 +#Define EM_CONVPOSITION (0x400 + 108) +#Define EM_DISPLAYBAND (0x400 + 51) +#Define EM_EMPTYUNDOBUFFER 0xCD +#Define EM_EXGETSEL (0x400 + 52) +#Define EM_EXLIMITTEXT (0x400 + 53) +#Define EM_EXLINEFROMCHAR (0x400 + 54) +#Define EM_EXSETSEL (0x400 + 55) +#Define EM_FINDTEXT (0x400 + 56) +#Define EM_FINDTEXTEX (0x400 + 79) +#Define EM_FINDTEXTEXW (0x400 + 124) +#Define EM_FINDTEXTW (0x400 + 123) +#Define EM_FINDWORDBREAK (0x400 + 76) +#Define EM_FMTLINES 0xC8 +#Define EM_FORMATRANGE (0x400 + 57) +#Define EM_GETAUTOURLDETECT (0x400 + 92) +#Define EM_GETBIDIOPTIONS (0x400 + 201) +#Define EM_GETCHARFORMAT (0x400 + 58) +#Define EM_GETEDITSTYLE (0x400 + 205) +#Define EM_GETEVENTMASK (0x400 + 59) +#Define EM_GETFIRSTVISIBLELINE 0xCE +#Define EM_GETHANDLE 0xBD +#Define EM_GETIMECOLOR (0x400 + 105) +#Define EM_GETIMECOMPMODE (0x400 + 122) +#Define EM_GETIMEMODEBIAS (0x400 + 127) +#Define EM_GETIMEOPTIONS (0x400 + 107) +#Define EM_GETIMESTATUS 0xD9 +#Define EM_GETLANGOPTIONS (0x400 + 121) +#Define EM_GETLIMITTEXT (0x400 + 37) +#Define EM_GETLINE 0xC4 +#Define EM_GETLINECOUNT 0xBA +#Define EM_GETMARGINS 0xD4 +#Define EM_GETMODIFY 0xB8 +#Define EM_GETOLEINTERFACE (0x400 + 60) +#Define EM_GETOPTIONS (0x400 + 78) +#Define EM_GETPARAFORMAT (0x400 + 61) +#Define EM_GETPASSWORDCHAR 0xD2 +#Define EM_GETPUNCTUATION (0x400 + 101) +#Define EM_GETRECT 0xB2 +#Define EM_GETREDONAME (0x400 + 87) +#Define EM_GETSCROLLPOS (0x400 + 221) +#Define EM_GETSEL 0xB0 +#Define EM_GETSELTEXT (0x400 + 62) +#Define EM_GETTEXTEX (0x400 + 94) +#Define EM_GETTEXTLENGTHEX (0x400 + 95) +#Define EM_GETTEXTMODE (0x400 + 90) +#Define EM_GETTEXTRANGE (0x400 + 75) +#Define EM_GETTHUMB 0xBE +#Define EM_GETTYPOGRAPHYOPTIONS (0x400 + 203) +#Define EM_GETUNDONAME (0x400 + 86) +#Define EM_GETWORDBREAKPROC 0xD1 +#Define EM_GETWORDBREAKPROCEX (0x400 + 80) +#Define EM_GETWORDWRAPMODE (0x400 + 103) +#Define EM_GETZOOM (0x400 + 224) +#Define EM_HIDESELECTION (0x400 + 63) +#Define EM_LIMITTEXT 0xC5 +#Define EM_LINEFROMCHAR 0xC9 +#Define EM_LINEINDEX 0xBB +#Define EM_LINELENGTH 0xC1 +#Define EM_LINESCROLL 0xB6 +#Define EM_OUTLINE (0x400 + 220) +#Define EM_PASTESPECIAL (0x400 + 64) +#Define EM_POSFROMCHAR (0x400 + 38) +#Define EM_RECONVERSION (0x400 + 125) +#Define EM_REDO (0x400 + 84) +#Define EM_REPLACESEL 0xC2 +#Define EM_REQUESTRESIZE (0x400 + 65) +#Define EM_SCROLLCARET 0xB7 +#Define EM_SCROLL 0xB5 +#Define EM_SELECTIONTYPE (0x400 + 66) +#Define EM_SETBIDIOPTIONS (0x400 + 200) +#Define EM_SETBKGNDCOLOR (0x400 + 67) +#Define EM_SETCHARFORMAT (0x400 + 68) +#Define EM_SETCUEBANNER (0x1500 + 1) +#Define EM_SETEDITSTYLE (0x400 + 204) +#Define EM_SETEVENTMASK (0x400 + 69) +#Define EM_SETFONTSIZE (0x400 + 223) +#Define EM_SETHANDLE 0xBC +#Define EM_SETIMECOLOR (0x400 + 104) +#Define EM_SETIMEMODEBIAS (0x400 + 126) +#Define EM_SETIMEOPTIONS (0x400 + 106) +#Define EM_SETIMESTATUS 0xD8 +#Define EM_SETLANGOPTIONS (0x400 + 120) +#Define EM_SETLIMITTEXT 0xC5 +#Define EM_SETMARGINS 0xD3 +#Define EM_SETMODIFY 0xB9 +#Define EM_SETOLECALLBACK (0x400 + 70) +#Define EM_SETOPTIONS (0x400 + 77) +#Define EM_SETPALETTE (0x400 + 93) +#Define EM_SETPARAFORMAT (0x400 + 71) +#Define EM_SETPASSWORDCHAR 0xCC +#Define EM_SETPUNCTUATION (0x400 + 100) +#Define EM_SETREADONLY 0xCF +#Define EM_SETRECT 0xB3 +#Define EM_SETRECTNP 0xB4 +#Define EM_SETSCROLLPOS (0x400 + 222) +#Define EM_SETSEL0xB1 +#Define EM_SETTABSTOPS 0xCB +#Define EM_SETTARGETDEVICE (0x400 + 72) +#Define EM_SETTEXTEX (0x400 + 97) +#Define EM_SETTEXTMODE (0x400 + 89) +#Define EM_SETTYPOGRAPHYOPTIONS (0x400 + 202) +#Define EM_SETUNDOLIMIT (0x400 + 82) +#Define EM_SETWORDBREAKPROC 0xD0 +#Define EM_SETWORDBREAKPROCEX (0x400 + 81) +#Define EM_SETWORDWRAPMODE (0x400 + 102) +#Define EM_SETZOOM (0x400 + 225) +#Define EM_SHOWSCROLLBAR (0x400 + 96) +#Define EM_STOPGROUPTYPING (0x400 + 88) +#Define EM_STREAMIN (0x400 + 73) +#Define EM_STREAMOUT (0x400 + 74) +#Define EM_UNDO 0xC7 + + +#Define EP_BACKGROUND 3 +#Define EP_BACKGROUNDWITHBORDER 5 +#Define EP_CARET 2 +#Define EP_EDITBORDER_HSCROLL 7 +#Define EP_EDITBORDER_HVSCROLL 9 +#Define EP_EDITBORDER_NOSCROLL 6 +#Define EP_EDITBORDER_VSCROLL 8 +#Define EP_EDITTEXT 1 +#Define EP_PASSWORD 4 +#Define ERROR_ACCESS_DENIED 5 +#Define ERROR_CIRCULAR_DEPENDENCY 1059 +#Define ERROR_DATABASE_DOES_NOT_EXIST 1065 +#Define ERROR_DUPLICATE_SERVICE_NAME 1078 + +#Define ERROR_FILE_NOT_FOUND 2 + +#Define ERROR_INSUFFICIENT_BUFFER 122 +#Define ERROR_INTERNET_ASYNC_THREAD_FAILED 12047 +#Define ERROR_INTERNET_BAD_AUTO_PROXY_SCRIPT 12166 +#Define ERROR_INTERNET_BAD_OPTION_LENGTH 12010 +#Define ERROR_INTERNET_BAD_REGISTRY_PARAMETER 12022 +#Define ERROR_INTERNET_CANNOT_CONNECT 12029 +#Define ERROR_INTERNET_CHG_POST_IS_NON_SECURE 12042 +#Define ERROR_INTERNET_CLIENT_AUTH_CERT_NEEDED 12044 +#Define ERROR_INTERNET_CLIENT_AUTH_NOT_SETUP 12046 +#Define ERROR_INTERNET_CONNECTION_ABORTED 12030 +#Define ERROR_INTERNET_CONNECTION_RESET 12031 +#Define ERROR_INTERNET_DIALOG_PENDING 12049 +#Define ERROR_INTERNET_DISCONNECTED 12163 +#Define ERROR_INTERNET_EXTENDED_ERROR 12003 +#Define ERROR_INTERNET_FAILED_DUETOSECURITYCHECK 12171 +#Define ERROR_INTERNET_FORCE_RETRY 12032 +#Define ERROR_INTERNET_FORTEZZA_LOGIN_NEEDED 12054 +#Define ERROR_INTERNET_HANDLE_EXISTS 12036 +#Define ERROR_INTERNET_HTTP_TO_HTTPS_ON_REDIR 12039 +#Define ERROR_INTERNET_HTTPS_HTTP_SUBMIT_REDIR 12052 +#Define ERROR_INTERNET_HTTPS_TO_HTTP_ON_REDIR 12040 +#Define ERROR_INTERNET_INCORRECT_FORMAT 12027 +#Define ERROR_INTERNET_INCORRECT_HANDLE_STATE 12019 +#Define ERROR_INTERNET_INCORRECT_HANDLE_TYPE 12018 +#Define ERROR_INTERNET_INCORRECT_PASSWORD 12014 +#Define ERROR_INTERNET_INCORRECT_USER_NAME 12013 +#Define ERROR_INTERNET_INSERT_CDROM 12053 +#Define ERROR_INTERNET_INTERNAL_ERROR 12004 +#Define ERROR_INTERNET_INVALID_CA 12045 +#Define ERROR_INTERNET_INVALID_OPERATION 12016 +#Define ERROR_INTERNET_INVALID_OPTION 12009 +#Define ERROR_INTERNET_INVALID_PROXY_REQUEST 12033 +#Define ERROR_INTERNET_INVALID_URL 12005 +#Define ERROR_INTERNET_ITEM_NOT_FOUND 12028 +#Define ERROR_INTERNET_LOGIN_FAILURE 12015 +#Define ERROR_INTERNET_LOGIN_FAILURE_DISPLAY_ENTITY_BODY 12174 +#Define ERROR_INTERNET_MIXED_SECURITY 12041 +#Define ERROR_INTERNET_NAME_NOT_RESOLVED 12007 +#Define ERROR_INTERNET_NEED_MSN_SSPI_PKG 12173 +#Define ERROR_INTERNET_NEED_UI 12034 +#Define ERROR_INTERNET_NO_CALLBACK 12025 +#Define ERROR_INTERNET_NO_CONTEXT 12024 +#Define ERROR_INTERNET_NO_DIRECT_ACCESS 12023 +#Define ERROR_INTERNET_NOT_INITIALIZED 12172 +#Define ERROR_INTERNET_NOT_PROXY_REQUEST 12020 +#Define ERROR_INTERNET_OPERATION_CANCELLED 12017 +#Define ERROR_INTERNET_OPTION_NOT_SETTABLE 12011 +#Define ERROR_INTERNET_OUT_OF_HANDLES 12001 +#Define ERROR_INTERNET_POST_IS_NON_SECURE 12043 +#Define ERROR_INTERNET_PROTOCOL_NOT_FOUND 12008 +#Define ERROR_INTERNET_PROXY_SERVER_UNREACHABLE 12165 +#Define ERROR_INTERNET_REDIRECT_SCHEME_CHANGE 12048 +#Define ERROR_INTERNET_REGISTRY_VALUE_NOT_FOUND 12021 +#Define ERROR_INTERNET_REQUEST_PENDING 12026 +#Define ERROR_INTERNET_RETRY_DIALOG 12050 +#Define ERROR_INTERNET_SEC_CERT_CN_INVALID 12038 +#Define ERROR_INTERNET_SEC_CERT_DATE_INVALID 12037 +#Define ERROR_INTERNET_SEC_CERT_ERRORS 12055 +#Define ERROR_INTERNET_SEC_CERT_NO_REV 12056 +#Define ERROR_INTERNET_SEC_CERT_REV_FAILED 12057 +#Define ERROR_INTERNET_SEC_CERT_REVOKED 12170 +#Define ERROR_INTERNET_SEC_INVALID_CERT 12169 +#Define ERROR_INTERNET_SECURITY_CHANNEL_ERROR 12157 +#Define ERROR_INTERNET_SERVER_UNREACHABLE 12164 +#Define ERROR_INTERNET_SHUTDOWN 12012 +#Define ERROR_INTERNET_TCPIP_NOT_INSTALLED 12159 +#Define ERROR_INTERNET_TIMEOUT 12002 +#Define ERROR_INTERNET_UNABLE_TO_CACHE_FILE 12158 +#Define ERROR_INTERNET_UNABLE_TO_DOWNLOAD_SCRIPT 12167 +#Define ERROR_INTERNET_UNRECOGNIZED_SCHEME 12006 +#Define ERROR_INVALID_FUNCTION 1 +#Define ERROR_INVALID_HANDLE 6 +#Define ERROR_INVALID_NAME 123 +#Define ERROR_INVALID_PARAMETER 87 +#Define ERROR_INVALID_SERVICE_ACCOUNT 1057 +#Define ERROR_MORE_DATA 234 +#Define ERROR_NO_MORE_FILES 18 +#Define ERROR_NOT_SUPPORTED 0x50 +#Define ERROR_SERVICE_ALREADY_RUNNING 1056 +#Define ERROR_SERVICE_CANNOT_ACCEPT_CTRL 1061 +#Define ERROR_SERVICE_DATABASE_LOCKED 1055 +#Define ERROR_SERVICE_DEPENDENCY_DELETED 1075 +#Define ERROR_SERVICE_DEPENDENCY_FAIL 1068 +#Define ERROR_SERVICE_DISABLED 1058 +#Define ERROR_SERVICE_DOES_NOT_EXIST 1060 +#Define ERROR_SERVICE_EXISTS 1073 +#Define ERROR_SERVICE_EXISTS 1073 +#Define ERROR_SERVICE_IS_PAUSED 928 +#Define ERROR_SERVICE_LOGON_FAILED 1069 +#Define ERROR_SERVICE_MARKED_FOR_DELETE 1072 +#Define ERROR_SERVICE_NEVER_STARTED 1077 +#Define ERROR_SERVICE_NO_THREAD 1054 +#Define ERROR_SERVICE_NOT_ACTIVE 1062 +#Define ERROR_SERVICE_NOT_FOUND 1243 +#Define ERROR_SERVICE_NOT_IN_EXE 1083 +#Define ERROR_SERVICE_REQUEST_TIMEOUT 1053 +#Define ERROR_SERVICE_SPECIFIC_ERROR 1066 +#Define ERROR_SERVICE_START_HANG 1070 +#Define ERROR_SUCCESS 0 +#Define FILE_ADD_FILE 0x2 +#Define FILE_ADD_SUBDIRECTORY 0x4 +#Define FILE_ALL_ACCESS 0x1F01FF +#Define FILE_APPEND_DATA 0x4 +#Define FILE_ATTRIBUTE_ARCHIVE 32 +#Define FILE_ATTRIBUTE_COMPRESSED 2048 +#Define FILE_ATTRIBUTE_DEVICE 64 +#Define FILE_ATTRIBUTE_DIRECTORY 16 +#Define FILE_ATTRIBUTE_ENCRYPTED 16384 +#Define FILE_ATTRIBUTE_HIDDEN 2 +#Define FILE_ATTRIBUTE_NORMAL 128 +#Define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 8192 +#Define FILE_ATTRIBUTE_OFFLINE 4096 +#Define FILE_ATTRIBUTE_READONLY 1 +#Define FILE_ATTRIBUTE_REPARSE_POINT 1024 +#Define FILE_ATTRIBUTE_SPARSE_FILE 512 +#Define FILE_ATTRIBUTE_SYSTEM 4 +#Define FILE_ATTRIBUTE_TEMPORARY 256 +#Define FILE_ATTRIBUTE_VIRTUAL 131072 +#Define FILE_BEGIN 0 +#Define FILE_CREATE_PIPE_INSTANCE 0x4 +#Define FILE_CURRENT 1 +#Define FILE_DELETE_CHILD 0x40 +#Define FILE_END 2 +#Define FILE_EXECUTE 0x20 +#Define FILE_FLAG_BACKUP_SEMANTICS 0x2000000 +#Define FILE_FLAG_DELETE_ON_CLOSE 0x4000000 +#Define FILE_FLAG_NO_BUFFERING 0x20000000 +#Define FILE_FLAG_OPEN_NO_RECALL 0x100000 +#Define FILE_FLAG_OPEN_REPARSE_POINT 0x200000 +#Define FILE_FLAG_OVERLAPPED 0x40000000 +#Define FILE_FLAG_POSIX_SEMANTICS 0x1000000 +#Define FILE_FLAG_RANDOM_ACCESS 0x10000000 +#Define FILE_FLAG_SEQUENTIAL_SCAN 0x8000000 +#Define FILE_FLAG_WRITE_THROUGH 0x80000000 +#Define FILE_LIST_DIRECTORY 0x1 +#Define FILE_READ_ATTRIBUTES 0x80 +#Define FILE_READ_DATA 0x1 +#Define FILE_READ_EA 0x8 +#Define FILE_SHARE_DELETE 0x4 +#Define FILE_SHARE_READ 0x1 +#Define FILE_SHARE_WRITE 0x2 +#Define FILE_TRAVERSE 0x20 +#Define FILE_WRITE_ATTRIBUTES 0x100 +#Define FILE_WRITE_DATA 0x2 +#Define FILE_WRITE_EA 0x10 +#Define FLAGS_ERROR_UI_FILTER_FOR_ERRORS 0x1 +#Define FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS 0x2 +#Define FLAGS_ERROR_UI_FLAGS_GENERATE_DATA 0x4 +#Define FLAGS_ERROR_UI_FLAGS_NO_UI 0x8 +#Define FLAGS_ERROR_UI_SERIALIZE_DIALOGS 0x10 + +#Define FNERR_BUFFERTOOSMALL 0x3003 +#Define FNERR_INVALIDFILENAME 0x3002 +#Define FNERR_SUBCLASSFAILURE 0x3001 + +#Define FOLDERID_AddNewPrograms 0h71d961debc5e024fa3a96c82895e5c04 +#Define FOLDERID_AdminTools 0h70f14e722da4ef4f9f26b60e846fba4f && CSIDL_ADMINTOOLS +#Define FOLDERID_AppUpdates 0h99ce05a327f52b498b1a7e76fa98d6e4 +#Define FOLDERID_CDBurning 0h10ab529e0df8df49acb84330f5687855 && CSIDL_CDBURN_AREA +#Define FOLDERID_ChangeRemovePrograms 0hac6672df749267488d553bd661de872d +#Define FOLDERID_CommonAdminTools 0h7d4e38d0c3ba97478f14cba229b392b5 && CSIDL_COMMON_ADMINTOOLS +#Define FOLDERID_CommonOEMLinks 0hd0e2bac1df103443bedd7aa20b227a9d && CSIDL_COMMON_OEM_LINKS +#Define FOLDERID_CommonPrograms 0h4ed43901fe6af24986903dafcae6ffb8 && CSIDL_COMMON_PROGRAMS +#Define FOLDERID_CommonStartMenu 0h195711a42ed61d49aa7ce74b8be3b067 && CSIDL_COMMON_STARTMENU +#Define FOLDERID_CommonStartup 0h35eaa582cdd9c5479629e15d2f714e6e && CSIDL_COMMON_STARTUP, CSIDL_COMMON_ALTSTARTUP +#Define FOLDERID_CommonTemplates 0he73742b9ac5747439151b08c6c32d1f7 && CSIDL_COMMON_TEMPLATES +#Define FOLDERID_ComputerFolder 0h7c83c00af8bb2a45850d79d08e667ca7 && CSIDL_DRIVES +#Define FOLDERID_ConflictFolder 0h45fbfe4b7d340640a5beac0cb0567192 +#Define FOLDERID_ConnectionsFolder 0h2bd90c6f972ed14588ffb0d186b8dedd && CSIDL_CONNECTIONS +#Define FOLDERID_Contacts 0h54487856cbc62b46816988e350acb882 +#Define FOLDERID_ControlPanelFolder 0heb4aa782b4ae5c46a014d097ee346d63 && CSIDL_CONTROLS +#Define FOLDERID_Cookies 0h5d760f2be9c07141908e08a611b84ff6 && CSIDL_COOKIES +#Define FOLDERID_Desktop 0h3accbfb42cdb4c42b0297fe99a87c641 && CSIDL_DESKTOP, CSIDL_DESKTOPDIRECTORY +#Define FOLDERID_Documents 0hd09ad3fd8f23af46adb46c85480369c7 && CSIDL_MYDOCUMENTS, CSIDL_PERSONAL +#Define FOLDERID_Downloads 0h90e24d373f126545916439c4925e467b +#Define FOLDERID_Favorites 0h61f77717ad688a4d87bd30b759fa33dd && CSIDL_FAVORITES, CSIDL_COMMON_FAVORITES +#Define FOLDERID_Fonts 0hb78c22fd11aee34a864c16f3910ab8fe && CSIDL_FONTS +#Define FOLDERID_Games 0h1a2cc5ca3db5dc4e92d76b2e8ac19434 +#Define FOLDERID_GameTasks 0h61e6fa54d84d874780b6090220c4b700 +#Define FOLDERID_History 0h3b8adcd984b72e43a7815a1130a75963 && CSIDL_HISTORY +#Define FOLDERID_InternetCache 0he8812435be335142ba856007caedcf9d && CSIDL_INTERNET_CACHE +#Define FOLDERID_InternetFolder 0h74789f4d0c4e0449967b40b0d20c3e4b && CSIDL_INTERNET +#Define FOLDERID_Links 0he0d5b9bfa9c64c40b2b2ae6db6af4968 +#Define FOLDERID_LocalAppData 0h8527b3f1ba6fcf4f9d557b8e7f157091 && CSIDL_LOCAL_APPDATA +#Define FOLDERID_LocalAppDataLow 0ha4a120a58017f64fbd18167343c5af16 +#Define FOLDERID_LocalizedResourcesDir 0h5e37002a4c22de49b8d1440df7ef3ddc && CSIDL_RESOURCES_LOCALIZED +#Define FOLDERID_Music 0h71d5d84b196dd348be97422220080e43 && CSIDL_MYMUSIC +#Define FOLDERID_NetHood 0h53bfabc57fe12141890086626fc2c973 && CSIDL_NETHOOD +#Define FOLDERID_NetworkFolder 0hc4ee0bd2a85c0549ae3bbf251ea09b53 && CSIDL_NETWORK, CSIDL_COMPUTERSNEARME +#Define FOLDERID_OriginalImages 0haac0362c1258874bbfd04cd0dfb19b39 +#Define FOLDERID_PhotoAlbums 0h90cfd26933fcb74f9a0cebb0f0fcb43c +#Define FOLDERID_Pictures 0h3081e2331e4e7646835a98395c3bc3bb && CSIDL_MYPICTURES +#Define FOLDERID_Playlists 0hc7c192de7f83694fa3bb86e631204a23 +#Define FOLDERID_PrintersFolder 0h2d4efc76add61945a66337bd56068185 && CSIDL_PRINTERS +#Define FOLDERID_PrintHood 0h8dbd7492d1cfc341b35eb13f55a758f4 && CSIDL_PRINTHOOD +#Define FOLDERID_Profile 0h8f856c5e220e60479afeea3317b67173 && CSIDL_PROFILE +#Define FOLDERID_ProgramData 0h825dab62c1fdc34da9dd070d1d495d97 && CSIDL_COMMON_APPDATA +#Define FOLDERID_ProgramFiles 0hb6635e90bfc14e49b29c65b732d3d21a && CSIDL_PROGRAM_FILES +#Define FOLDERID_ProgramFilesCommon 0h05edf1f76d9fa247aaae29d317c6f066 && CSIDL_PROGRAM_FILES_COMMON +#Define FOLDERID_ProgramFilesCommonX64 0ha7d565630df0e54587f60da56b6a4f7d +#Define FOLDERID_ProgramFilesCommonX86 0h244d97dec6d93e4dbf91f4455120b917 && CSIDL_PROGRAM_FILES_COMMONX86 +#Define FOLDERID_ProgramFilesX64 0h7793806df06a4b448957a3773f02200e +#Define FOLDERID_ProgramFilesX86 0hef405a7cfba0fc4b874ac0f2e0b9fa8e && CSIDL_PROGRAM_FILESX86 +#Define FOLDERID_Programs 0h775d7fa72b2ec344a6a2aba601054a51 && CSIDL_PROGRAMS +#Define FOLDERID_Public 0ha276dfdf2ac8634d906a5644ac457385 +#Define FOLDERID_PublicDesktop 0h0d34aac40ff26348afeff87ef2e6ba25 && CSIDL_COMMON_DESKTOPDIRECTORY +#Define FOLDERID_PublicDocuments 0haf2448ede4dca84581e2fc7965083634 && CSIDL_COMMON_DOCUMENTS +#Define FOLDERID_PublicDownloads 0h9b4c643db81f304f9b45f670235f79c0 +#Define FOLDERID_PublicGameTasks 0h3625bfdea8e1594cb6a2414586476aea +#Define FOLDERID_PublicMusic 0hb5fa143257979842bb6192a9deaa44ff && CSIDL_COMMON_MUSIC +#Define FOLDERID_PublicPictures 0h86fbebb607693c419af74fc2abf07cc5 && CSIDL_COMMON_PICTURES +#Define FOLDERID_PublicVideos 0h3a1800248561fb49a2d84a392a602ba3 && CSIDL_COMMON_VIDEO +#Define FOLDERID_QuickLaunch 0h21f0a452757ba9489f6b4b87a210bc8f +#Define FOLDERID_Recent 0h81c050aed2eb8a4386558a092e34987a && CSIDL_RECENT +#Define FOLDERID_RecordedTV 0h01e085bd2e111e43983b7b15ac09fff1 +#Define FOLDERID_RecycleBinFolder 0h464053b7cb3e184cbe4e64cd4cb7d6ac && CSIDL_BITBUCKET +#Define FOLDERID_ResourceDir 0h310cd18adb2a9642a8f7e4701232c972 && CSIDL_RESOURCES +#Define FOLDERID_RoamingAppData 0hdb85b63ef965f64ca03ae3ef65729f3d && CSIDL_APPDATA +#Define FOLDERID_SampleMusic 0h68c650b27df5e14ea63c290ee7d1aa1f +#Define FOLDERID_SamplePictures 0h400590c47923754c844b64e6faf8716b +#Define FOLDERID_SamplePlaylists 0hb369ca15ee30c149ace16b5ec372afb5 +#Define FOLDERID_SampleVideos 0h94ad9e85852ead48a71a0969cb56a6cd +#Define FOLDERID_SavedGames 0hff325c4c9dbbb043b5b42d72e54eaaa4 +#Define FOLDERID_SavedSearches 0h043a1d7dbbde154195cf2f29da2920da +#Define FOLDERID_SEARCH_CSC 0h46e432eeca31ba4a814fa5ebd2fd6d5e +#Define FOLDERID_SEARCH_MAPI 0h180eec989820444d864466979315a281 +#Define FOLDERID_SearchHome 0hd1370319cab82141a6396d472d16972a +#Define FOLDERID_SendTo 0h6c038389c0274b408f08102d10dcfd74 && CSIDL_SENDTO +#Define FOLDERID_SidebarDefaultParts 0h546e397bc59e0043be0a2482ebae1a26 +#Define FOLDERID_SidebarParts 0h2e365da7fc50b74fac2ca8beaa314493 +#Define FOLDERID_StartMenu 0hc3535b6248abc14eba1fa1ef4146fc19 && CSIDL_STARTMENU +#Define FOLDERID_Startup 0hbb207db96af4974cba105e3608430854 +#Define FOLDERID_SyncManagerFolder 0hf88b66434ec1b24997c9747784d784b7 +#Define FOLDERID_SyncResultsFolder 0h439a9a2844be5740a41b587a76d7e7f9 +#Define FOLDERID_SyncSetupFolder 0h3841210fd3b1904abba927cbc0c5389a +#Define FOLDERID_System 0h774ec11ae7025d4eb7442eb1ae5198b7 && CSIDL_SYSTEM +#Define FOLDERID_SystemX86 0hb03152d6f1b25748a4cea8e7c6ea7d27 && CSIDL_SYSTEMX86 +#Define FOLDERID_Templates 0he89332a64e66db48a079df759e0509f7 && CSIDL_TEMPLATES +#Define FOLDERID_TreeProperties 0had49375b9fb4c14983eb15370fbd4882 +#Define FOLDERID_UserProfiles 0h72d262070ac5b04ba382697dcd729b80 +#Define FOLDERID_UsersFiles 0h7c0fcef30149cc4a8648d5d44b04ef8f +#Define FOLDERID_Videos 0h1d9b9818b5995b45841cab7c74e4ddfc && CSIDL_MYVIDEO +#Define FOLDERID_Windows 0h04f48bf3431df242930567de0b28fc23 && CSIDL_WINDOWS + +#Define FORMAT_MESSAGE_ALLOCATE_BUFFER 0x100 +#Define FORMAT_MESSAGE_ARGUMENT_ARRAY 0x2000 +#Define FORMAT_MESSAGE_FROM_HMODULE 0x800 +#Define FORMAT_MESSAGE_FROM_STRING 0x400 +#Define FORMAT_MESSAGE_FROM_SYSTEM 0x1000 +#Define FORMAT_MESSAGE_IGNORE_INSERTS 0x200 +#Define FORMAT_MESSAGE_MAX_WIDTH_MASK 0xFF +#Define FTP_TRANSFER_TYPE_ASCII 0x1 +#Define FTP_TRANSFER_TYPE_BINARY 0x2 +#Define FTP_TRANSFER_TYPE_UNKNOWN 0x0 +#Define FW_BLACK 900 +#Define FW_BOLD 700 +#Define FW_DEMIBOLD 600 +#Define FW_DONTCARE 0 +#Define FW_EXTRABOLD 800 +#Define FW_EXTRALIGHT 200 +#Define FW_HEAVY 900 +#Define FW_LIGHT 300 +#Define FW_MEDIUM 500 +#Define FW_NORMAL 400 +#Define FW_REGULAR 400 +#Define FW_SEMIBOLD 600 +#Define FW_THIN 100 +#Define FW_ULTRABOLD 800 +#Define FW_ULTRALIGHT 200 +#Define GB2312_CHARSET 134 +#Define GBF_COPY 0x00000002 && create a copy of the bitmap +#Define GBF_DIRECT 0x00000001 && direct dereferencing. +#Define GBF_VALIDBITS 0x00000003 + +#Define GCL_CBCLSEXTRA -20 +#Define GCL_CBWNDEXTRA -18 +#Define GCL_CONVERSION 0x1 +#Define GCL_HBRBACKGROUND -10 +#Define GCL_HCURSOR -12 +#Define GCL_HICON -14 +#Define GCL_HICONSM -34 +#Define GCL_HMODULE -16 +#Define GCL_MENUNAME -8 +#Define GCL_REVERSE_LENGTH 0x3 +#Define GCL_REVERSECONVERSION 0x2 +#Define GCL_STYLE -26 +#Define GCL_WNDPROC -24 + +#Define GDTR_MAX 0x2 +#Define GDTR_MIN 0x1 + +#Define GENERIC_ALL 0x10000000 +#Define GENERIC_EXECUTE 0x20000000 +#Define GENERIC_READ 0x80000000 +#Define GENERIC_WRITE 0x40000000 + +#Define GMR_DAYSTATE 1 +#Define GMR_VISIBLE 0 + +#Define GREEK_CHARSET 161 +#Define GUID_DEVCLASS_DISKDRIVE 0h67E9364D25E3CE11BFC108002BE10318 +#Define GW_CHILD 5 +#Define GW_ENABLEDPOPUP 6 +#Define GW_HWNDFIRST 0 +#Define GW_HWNDLAST 1 +#Define GW_HWNDNEXT 2 +#Define GW_HWNDPREV 3 +#Define GW_MAX 5 +#Define GW_OWNER 4 +#Define GWL_EXSTYLE -20 +#Define GWL_HINSTANCE -6 +#Define GWL_HWNDPARENT -8 +#Define GWL_ID -12 +#Define GWL_STYLE -16 +#Define GWL_USERDATA -21 +#Define GWL_WNDPROC -4 +#Define HANGUL_CHARSET 129 +#Define HBMMENU_CALLBACK -1 +#Define HBMMENU_MBAR_CLOSE 5 +#Define HBMMENU_MBAR_CLOSE_D 6 +#Define HBMMENU_MBAR_MINIMIZE 3 +#Define HBMMENU_MBAR_MINIMIZE_D 7 +#Define HBMMENU_MBAR_RESTORE 2 +#Define HBMMENU_POPUP_CLOSE 8 +#Define HBMMENU_POPUP_MAXIMIZE 10 +#Define HBMMENU_POPUP_MINIMIZE 11 +#Define HBMMENU_POPUP_RESTORE 9 +#Define HBMMENU_SYSTEM 1 +#Define HEAP_CREATE_ALIGN_16 0x10000 +#Define HEAP_CREATE_ENABLE_TRACING 0x20000 +#Define HEAP_DISABLE_COALESCE_ON_FREE 0x80 +#Define HEAP_FREE_CHECKING_ENABLED 0x40 +#Define HEAP_GENERATE_EXCEPTIONS 0x4 +#Define HEAP_GROWABLE 0x2 +#Define HEAP_MAXIMUM_TAG 0xfff +#Define HEAP_NO_SERIALIZE 0x1 +#Define HEAP_PSEUDO_TAG_FLAG 0x8000 +#Define HEAP_REALLOC_IN_PLACE_ONLY 0x10 +#Define HEAP_TAG_SHIFT 18 +#Define HEAP_TAIL_CHECKING_ENABLED 0x20 +#Define HEAP_ZERO_MEMORY 0x8 +#Define HEBREW_CHARSET 177 +#Define HFILE_ERROR -1 +#Define HKEY_CLASSES_ROOT 0x80000000 +#Define HKEY_CURRENT_CONFIG 0x80000005 +#Define HKEY_CURRENT_USER 0x80000001 +#Define HKEY_DYN_DATA 0x80000006 +#Define HKEY_LOCAL_MACHINE 0x80000002 +#Define HKEY_PERFORMANCE_DATA 0x80000004 +#Define HKEY_USERS 0x80000003 +#Define HTBORDER 18 +#Define HTBOTTOM 15 +#Define HTBOTTOMLEFT 16 +#Define HTBOTTOMRIGHT 17 +#Define HTCAPTION 2 +#Define HTCLIENT 1 +#Define HTCLOSE 20 +#Define HTERROR -2 +#Define HTGROWBOX 4 +#Define HTHELP 21 +#Define HTHSCROLL 6 +#Define HTLEFT 10 +#Define HTMAXBUTTON 9 +#Define HTMENU 5 +#Define HTMINBUTTON 8 +#Define HTNOWHERE 0 +#Define HTOBJECT 19 +#Define HTREDUCE 8 +#Define HTRIGHT 11 +#Define HTSIZE 4 +#Define HTSIZEFIRST 10 +#Define HTSIZELAST 17 +#Define HTSYSMENU 3 +#Define HTTOP 12 +#Define HTTOPLEFT 13 +#Define HTTOPRIGHT 14 +#Define HTTP_ADDREQ_FLAG_ADD 0x20000000 +#Define HTTP_ADDREQ_FLAG_ADD_IF_NEW 0x10000000 +#Define HTTP_ADDREQ_FLAG_COALESCE 0x40000000 +#Define HTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA 0x40000000 +#Define HTTP_ADDREQ_FLAG_COALESCE_WITH_SEMICOLON 0x1000000 +#Define HTTP_ADDREQ_FLAG_REPLACE 0x80000000 +#Define HTTP_QUERY_ACCEPT 24 +#Define HTTP_QUERY_ACCEPT_CHARSET 25 +#Define HTTP_QUERY_ACCEPT_ENCODING 26 +#Define HTTP_QUERY_ACCEPT_LANGUAGE 27 +#Define HTTP_QUERY_ACCEPT_RANGES 42 +#Define HTTP_QUERY_AGE 48 +#Define HTTP_QUERY_ALLOW 7 +#Define HTTP_QUERY_AUTHORIZATION 28 +#Define HTTP_QUERY_CACHE_CONTROL 49 +#Define HTTP_QUERY_CONNECTION 23 +#Define HTTP_QUERY_CONTENT_BASE 50 +#Define HTTP_QUERY_CONTENT_DESCRIPTION 4 +#Define HTTP_QUERY_CONTENT_DISPOSITION 47 +#Define HTTP_QUERY_CONTENT_ENCODING 29 +#Define HTTP_QUERY_CONTENT_ID 3 +#Define HTTP_QUERY_CONTENT_LANGUAGE 6 +#Define HTTP_QUERY_CONTENT_LENGTH 5 +#Define HTTP_QUERY_CONTENT_LOCATION 51 +#Define HTTP_QUERY_CONTENT_MD5 52 +#Define HTTP_QUERY_CONTENT_RANGE 53 +#Define HTTP_QUERY_CONTENT_TRANSFER_ENCODING 2 +#Define HTTP_QUERY_CONTENT_TYPE 1 +#Define HTTP_QUERY_COOKIE 44 +#Define HTTP_QUERY_COST 15 +#Define HTTP_QUERY_CUSTOM 65535 +#Define HTTP_QUERY_DATE 9 +#Define HTTP_QUERY_DERIVED_FROM 14 +#Define HTTP_QUERY_ECHO_HEADERS 73 +#Define HTTP_QUERY_ECHO_HEADERS_CRLF 74 +#Define HTTP_QUERY_ECHO_REPLY 72 +#Define HTTP_QUERY_ECHO_REQUEST 71 +#Define HTTP_QUERY_ETAG 54 +#Define HTTP_QUERY_EXPECT 68 +#Define HTTP_QUERY_EXPIRES 10 +#Define HTTP_QUERY_FLAG_COALESCE 0x10000000 +#Define HTTP_QUERY_FLAG_NUMBER 0x20000000 +#Define HTTP_QUERY_FLAG_REQUEST_HEADERS 0x80000000 +#Define HTTP_QUERY_FLAG_SYSTEMTIME 0x40000000 +#Define HTTP_QUERY_FORWARDED 30 +#Define HTTP_QUERY_FROM 31 +#Define HTTP_QUERY_HOST 55 +#Define HTTP_QUERY_IF_MATCH 56 +#Define HTTP_QUERY_IF_MODIFIED_SINCE 32 +#Define HTTP_QUERY_IF_NONE_MATCH 57 +#Define HTTP_QUERY_IF_RANGE 58 +#Define HTTP_QUERY_IF_UNMODIFIED_SINCE 59 +#Define HTTP_QUERY_LAST_MODIFIED 11 +#Define HTTP_QUERY_LINK 16 +#Define HTTP_QUERY_LOCATION 33 +#Define HTTP_QUERY_MAX 74 +#Define HTTP_QUERY_MAX_FORWARDS 60 +#Define HTTP_QUERY_MESSAGE_ID 12 +#Define HTTP_QUERY_MIME_VERSION 0 +#Define HTTP_QUERY_ORIG_URI 34 +#Define HTTP_QUERY_PRAGMA 17 +#Define HTTP_QUERY_PROXY_AUTHENTICATE 41 +#Define HTTP_QUERY_PROXY_AUTHORIZATION 61 +#Define HTTP_QUERY_PROXY_CONNECTION 69 +#Define HTTP_QUERY_PUBLIC 8 +#Define HTTP_QUERY_RANGE 62 +#Define HTTP_QUERY_RAW_HEADERS 21 +#Define HTTP_QUERY_RAW_HEADERS_CRLF 22 +#Define HTTP_QUERY_REFERER 35 +#Define HTTP_QUERY_REFRESH 46 +#Define HTTP_QUERY_REQUEST_METHOD 45 +#Define HTTP_QUERY_RETRY_AFTER 36 +#Define HTTP_QUERY_SERVER 37 +#Define HTTP_QUERY_SET_COOKIE 43 +#Define HTTP_QUERY_STATUS_CODE 19 +#Define HTTP_QUERY_STATUS_TEXT 20 +#Define HTTP_QUERY_TITLE 38 +#Define HTTP_QUERY_TRANSFER_ENCODING 63 +#Define HTTP_QUERY_UNLESS_MODIFIED_SINCE 70 +#Define HTTP_QUERY_UPGRADE 64 +#Define HTTP_QUERY_URI 13 +#Define HTTP_QUERY_USER_AGENT 39 +#Define HTTP_QUERY_VARY 65 +#Define HTTP_QUERY_VERSION 18 +#Define HTTP_QUERY_VIA 66 +#Define HTTP_QUERY_WARNING 67 +#Define HTTP_QUERY_WWW_AUTHENTICATE 40 +#Define HTTP_STATUS_ACCEPTED 202 +#Define HTTP_STATUS_AMBIGUOUS 300 +#Define HTTP_STATUS_BAD_GATEWAY 502 +#Define HTTP_STATUS_BAD_METHOD 405 +#Define HTTP_STATUS_BAD_REQUEST 400 +#Define HTTP_STATUS_CONFLICT 409 +#Define HTTP_STATUS_CONTINUE 100 +#Define HTTP_STATUS_CREATED 201 +#Define HTTP_STATUS_DENIED 401 +#Define HTTP_STATUS_FIRST 100 +#Define HTTP_STATUS_FORBIDDEN 403 +#Define HTTP_STATUS_GATEWAY_TIMEOUT 504 +#Define HTTP_STATUS_GONE 410 +#Define HTTP_STATUS_LAST 505 +#Define HTTP_STATUS_LENGTH_REQUIRED 411 +#Define HTTP_STATUS_MOVED 301 +#Define HTTP_STATUS_NO_CONTENT 204 +#Define HTTP_STATUS_NONE_ACCEPTABLE 406 +#Define HTTP_STATUS_NOT_FOUND 404 +#Define HTTP_STATUS_NOT_MODIFIED 304 +#Define HTTP_STATUS_NOT_SUPPORTED 501 +#Define HTTP_STATUS_OK 200 +#Define HTTP_STATUS_PARTIAL 203 +#Define HTTP_STATUS_PARTIAL_CONTENT 206 +#Define HTTP_STATUS_PAYMENT_REQ 402 +#Define HTTP_STATUS_PRECOND_FAILED 412 +#Define HTTP_STATUS_PROXY_AUTH_REQ 407 +#Define HTTP_STATUS_REDIRECT 302 +#Define HTTP_STATUS_REDIRECT_KEEP_VERB 307 +#Define HTTP_STATUS_REDIRECT_METHOD 303 +#Define HTTP_STATUS_REQUEST_TIMEOUT 408 +#Define HTTP_STATUS_REQUEST_TOO_LARGE 413 +#Define HTTP_STATUS_RESET_CONTENT 205 +#Define HTTP_STATUS_RETRY_WITH 449 +#Define HTTP_STATUS_SERVER_ERROR 500 +#Define HTTP_STATUS_SERVICE_UNAVAIL 503 +#Define HTTP_STATUS_SWITCH_PROTOCOLS 101 +#Define HTTP_STATUS_UNSUPPORTED_MEDIA 415 +#Define HTTP_STATUS_URI_TOO_LONG 414 +#Define HTTP_STATUS_USE_PROXY 305 +#Define HTTP_STATUS_VERSION_NOT_SUP 505 +#Define HTTRANSPARENT -1 +#Define HWND_BOTTOM 1 +#Define HWND_BROADCAST 0xffff +#Define HWND_DESKTOP 0 +#Define HWND_MESSAGE -3 +#Define HWND_NOTOPMOST -2 +#Define HWND_TOP 0 +#Define HWND_TOPMOST -1 +#Define ICC_ANIMATE_CLASS 0x80 +#Define ICC_BAR_CLASSES 0x4 +#Define ICC_COOL_CLASSES 0x400 +#Define ICC_DATE_CLASSES 0x100 +#Define ICC_HOTKEY_CLASS 0x40 +#Define ICC_INTERNET_CLASSES 0x800 +#Define ICC_LINK_CLASS 0x8000 +#Define ICC_LISTVIEW_CLASSES 0x1 +#Define ICC_NATIVEFNTCON_CLASS 0x2000 +#Define ICC_PAGESCROLLER_CLASS 0x1000 +#Define ICC_PROGRESS_CLASS 0x20 +#Define ICC_STANDARD_CLASSES 0x4000 +#Define ICC_TAB_CLASSES 0x8 +#Define ICC_TREEVIEW_CLASSES 0x2 +#Define ICC_UPDOWN_CLASS 0x10 +#Define ICC_USEREX_CLASSES 0x200 +#Define ICC_WIN95_CLASSES 0xff +#Define ICON_BIG 1 +#Define ICON_SMALL 0 +#Define ICU_DECODE 0x10000000 + +#Define IDCANCEL 2 +#Define IDOK 1 + +#Define ILC_COLOR 0x0 +#Define ILC_COLOR16 0x10 +#Define ILC_COLOR24 0x18 +#Define ILC_COLOR32 0x20 +#Define ILC_COLOR4 0x4 +#Define ILC_COLOR8 0x8 +#Define ILC_COLORDDB 0xfe +#Define ILC_HIGHQUALITYSCALE 0x20000 && VISTA Imagelist should enable use of the high quality scaler. +#Define ILC_MASK 0x1 +#Define ILC_MIRROR 0x2000 && Mirror the icons contained, if the process is mirrored +#Define ILC_ORIGINALSIZE 0x10000 && VISTA Imagelist should accept smaller than set images and apply OriginalSize based on image added +#Define ILC_PERITEMMIRROR 0x8000 && Causes the mirroring code to mirror each item when inserting a set of images, verses the whole strip +#Define INTERNET_AUTODIAL_FAILIFSECURITYCHECK 4 +#Define INTERNET_DEFAULT_FTP_PORT 21 +#Define INTERNET_DEFAULT_GOPHER_PORT 70 +#Define INTERNET_DEFAULT_HTTP_PORT 80 +#Define INTERNET_DEFAULT_HTTPS_PORT 443 +#Define INTERNET_DEFAULT_SOCKS_PORT 1080 +#Define INTERNET_ERROR_BASE 12000 +#Define INTERNET_ERROR_LAST 12174 +#Define INTERNET_FLAG_ASYNC 0x10000000 +#Define INTERNET_FLAG_CACHE_ASYNC 0x00000080 +#Define INTERNET_FLAG_CACHE_IF_NET_FAIL 0x00010000 +#Define INTERNET_FLAG_DONT_CACHE 0x04000000 +#Define INTERNET_FLAG_EXISTING_CONNECT 0x20000000 +#Define INTERNET_FLAG_FORMS_SUBMIT 0x00000040 +#Define INTERNET_FLAG_FROM_CACHE 0x01000000 +#Define INTERNET_FLAG_HYPERLINK 0x00000400 +#Define INTERNET_FLAG_IGNORE_CERT_CN_INVALID 0x00001000 +#Define INTERNET_FLAG_IGNORE_CERT_DATE_INVALID 0x00002000 +#Define INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP 0x00008000 +#Define INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS 0x00004000 +#Define INTERNET_FLAG_KEEP_CONNECTION 0x00400000 +#Define INTERNET_FLAG_MAKE_PERSISTENT 0x02000000 +#Define INTERNET_FLAG_MUST_CACHE_REQUEST 0x00000010 +#Define INTERNET_FLAG_NEED_FILE 0x00000010 +#Define INTERNET_FLAG_NO_AUTH 0x00040000 +#Define INTERNET_FLAG_NO_AUTO_REDIRECT 0x00200000 +#Define INTERNET_FLAG_NO_CACHE_WRITE 0x04000000 +#Define INTERNET_FLAG_NO_COOKIES 0x00080000 +#Define INTERNET_FLAG_NO_UI 0x00000200 +#Define INTERNET_FLAG_OFFLINE 0x01000000 +#Define INTERNET_FLAG_PASSIVE 0x08000000 +#Define INTERNET_FLAG_PRAGMA_NOCACHE 0x00000100 +#Define INTERNET_FLAG_RAW_DATA 0x40000000 +#Define INTERNET_FLAG_READ_PREFETCH 0x00100000 +#Define INTERNET_FLAG_RELOAD 0x80000000 +#Define INTERNET_FLAG_RESYNCHRONIZE 0x00000800 +#Define INTERNET_FLAG_SECURE 0x00800000 +#Define INTERNET_FLAG_TRANSFER_ASCII 0x1 +#Define INTERNET_FLAG_TRANSFER_BINARY 0x2 +#Define INTERNET_INVALID_PORT_NUMBER 0 +#Define INTERNET_MAX_HOST_NAME_LENGTH 256 +#Define INTERNET_MAX_PASSWORD_LENGTH 128 +#Define INTERNET_MAX_PATH_LENGTH 2048 +#Define INTERNET_MAX_PORT_NUMBER_LENGTH 5 +#Define INTERNET_MAX_SCHEME_LENGTH 32 +#Define INTERNET_MAX_USER_NAME_LENGTH 128 +#Define INTERNET_OPEN_TYPE_DIRECT 1 +#Define INTERNET_OPEN_TYPE_PRECONFIG 0 +#Define INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY 4 +#Define INTERNET_OPEN_TYPE_PROXY 3 +#Define INTERNET_OPTION_ASYNC 30 +#Define INTERNET_OPTION_ASYNC_ID 15 +#Define INTERNET_OPTION_ASYNC_PRIORITY 16 +#Define INTERNET_OPTION_BYPASS_EDITED_ENTRY 64 +#Define INTERNET_OPTION_CACHE_STREAM_HANDLE 27 +#Define INTERNET_OPTION_CACHE_TIMESTAMPS 69 +#Define INTERNET_OPTION_CALLBACK 1 +#Define INTERNET_OPTION_CALLBACK_FILTER 54 +#Define INTERNET_OPTION_CODEPAGE 68 +#Define INTERNET_OPTION_CONNECT_BACKOFF 4 +#Define INTERNET_OPTION_CONNECT_LIMIT 46 +#Define INTERNET_OPTION_CONNECT_RETRIES 3 +#Define INTERNET_OPTION_CONNECT_TIME 55 +#Define INTERNET_OPTION_CONNECT_TIMEOUT 2 +#Define INTERNET_OPTION_CONNECTED_STATE 50 +#Define INTERNET_OPTION_CONTEXT_VALUE 45 +#Define INTERNET_OPTION_CONTROL_RECEIVE_TIMEOUT 6 +#Define INTERNET_OPTION_CONTROL_SEND_TIMEOUT 5 +#Define INTERNET_OPTION_DATA_RECEIVE_TIMEOUT 8 +#Define INTERNET_OPTION_DATA_SEND_TIMEOUT 7 +#Define INTERNET_OPTION_DATAFILE_NAME 33 +#Define INTERNET_OPTION_DIGEST_AUTH_UNLOAD 76 +#Define INTERNET_OPTION_DISABLE_AUTODIAL 70 +#Define INTERNET_OPTION_DISCONNECTED_TIMEOUT 49 +#Define INTERNET_OPTION_END_BROWSER_SESSION 42 +#Define INTERNET_OPTION_ERROR_MASK 62 +#Define INTERNET_OPTION_EXTENDED_ERROR 24 +#Define INTERNET_OPTION_FROM_CACHE_TIMEOUT 63 +#Define INTERNET_OPTION_HANDLE_TYPE 9 +#Define INTERNET_OPTION_HTTP_VERSION 59 +#Define INTERNET_OPTION_IDLE_STATE 51 +#Define INTERNET_OPTION_IGNORE_OFFLINE 77 +#Define INTERNET_OPTION_KEEP_CONNECTION 22 +#Define INTERNET_OPTION_LISTEN_TIMEOUT 11 +#Define INTERNET_OPTION_MAX_CONNS_PER_1_0_SERVER 74 +#Define INTERNET_OPTION_MAX_CONNS_PER_SERVER 73 +#Define INTERNET_OPTION_OFFLINE_MODE 26 +#Define INTERNET_OPTION_OFFLINE_SEMANTICS 52 +#Define INTERNET_OPTION_PARENT_HANDLE 21 +#Define INTERNET_OPTION_PASSWORD 29 +#Define INTERNET_OPTION_PER_CONNECTION_OPTION 75 +#Define INTERNET_OPTION_POLICY 48 +#Define INTERNET_OPTION_PROXY 38 +#Define INTERNET_OPTION_PROXY_PASSWORD 44 +#Define INTERNET_OPTION_PROXY_USERNAME 43 +#Define INTERNET_OPTION_READ_BUFFER_SIZE 12 +#Define INTERNET_OPTION_RECEIVE_THROUGHPUT 57 +#Define INTERNET_OPTION_RECEIVE_TIMEOUT 6 +#Define INTERNET_OPTION_REFRESH 37 +#Define INTERNET_OPTION_REQUEST_FLAGS 23 +#Define INTERNET_OPTION_REQUEST_PRIORITY 58 +#Define INTERNET_OPTION_RESET_URLCACHE_SESSION 60 +#Define INTERNET_OPTION_SECONDARY_CACHE_KEY 53 +#Define INTERNET_OPTION_SECURITY_CERTIFICATE 35 +#Define INTERNET_OPTION_SECURITY_CERTIFICATE_STRUCT 32 +#Define INTERNET_OPTION_SECURITY_FLAGS 31 +#Define INTERNET_OPTION_SECURITY_KEY_BITNESS 36 +#Define INTERNET_OPTION_SECURITY_SELECT_CLIENT_CERT 47 +#Define INTERNET_OPTION_SEND_THROUGHPUT 56 +#Define INTERNET_OPTION_SEND_TIMEOUT 5 +#Define INTERNET_OPTION_SETTINGS_CHANGED 39 +#Define INTERNET_OPTION_URL 34 +#Define INTERNET_OPTION_USER_AGENT 41 +#Define INTERNET_OPTION_USERNAME 28 +#Define INTERNET_OPTION_VERSION 40 +#Define INTERNET_OPTION_WRITE_BUFFER_SIZE 13 +#Define INTERNET_SCHEME_DEFAULT 0 +#Define INTERNET_SCHEME_FILE 5 +#Define INTERNET_SCHEME_FIRST 1 +#Define INTERNET_SCHEME_FTP 1 +#Define INTERNET_SCHEME_GOPHER 2 +#Define INTERNET_SCHEME_HTTP 3 +#Define INTERNET_SCHEME_HTTPS 4 +#Define INTERNET_SCHEME_LAST 8 +#Define INTERNET_SCHEME_MAILTO 7 +#Define INTERNET_SCHEME_NEWS 6 +#Define INTERNET_SCHEME_PARTIAL -2 +#Define INTERNET_SCHEME_SOCKS 8 +#Define INTERNET_SCHEME_UNKNOWN -1 +#Define INTERNET_SERVICE_FTP 1 +#Define INTERNET_SERVICE_GOPHER 2 +#Define INTERNET_SERVICE_HTTP 3 +#Define INVALID_SET_FILE_POINTER -1 +#Define IRF_NO_WAIT 0x8 +#Define JOHAB_CHARSET 130 +#Define KEY_ALL_ACCESS 0xf003f +#Define KEY_CREATE_LINK 0x00020 +#Define KEY_CREATE_SUB_KEY 0x00004 +#Define KEY_ENUMERATE_SUB_KEYS 0x00008 +#Define KEY_EVENT 0x00001 +#Define KEY_EXECUTE 0x20019 +#Define KEY_NOTIFY 0x00010 +#Define KEY_QUERY_VALUE 0x00001 +#Define KEY_READ 0x20019 +#Define KEY_SET_VALUE 0x00002 +#Define KEY_WOW64_32KEY 0x0200 +#Define KEY_WRITE 0x20006 +#Define KEYEVENTF_KEYUP 0x2 + +*!* Make sure that the folder already exists or create it and apply security specified in folder definition +*!* If folder can not be created then function will return failure and no folder path (IDList) will be returned +*!* If folder is located on the network the function may take long time to execute +#Define KF_FLAG_CREATE 0x00008000 + +*!* If this flag is specified then the folder path is returned and no verification is performed +*!* Use this flag is you want to get folder's path (IDList) and do not need to verify folder's existence +*!* If this flag is NOT specified then Known Folder API will try to verify that the folder exists +*!* If folder does not exist or can not be accessed then function will return failure and no folder path (IDList) will be returned +*!* If folder is located on the network the function may take long time to execute +#Define KF_FLAG_DONT_VERIFY 0x00004000 + +*!* Set folder path as is and do not try to substitute parts of the path with environments variables. +*!* If flag is not specified then Known Folder will try to replace parts of the path with some +*!* known environment variables (%USERPROFILE%, %APPDATA% etc.) +#Define KF_FLAG_DONT_UNEXPAND 0x00002000 + +*!* Get file system based IDList if available. If the flag is not specified the Known Folder API +*!* will try to return aliased IDList by default. Example for FOLDERID_Documents - +*!* Aliased - [desktop]\[user]\[Documents] - exact location is determined by shell namespace layout and might change +*!* Non aliased - [desktop]\[computer]\[disk_c]\[users]\[user]\[Documents] - location is determined by folder location in the file system +#Define KF_FLAG_NO_ALIAS 0x00001000 + +*!* Initialize the folder with desktop.ini settings +*!* If folder can not be initialized then function will return failure and no folder path will be returned +*!* If folder is located on the network the function may take long time to execute +#Define KF_FLAG_INIT 0x00000800 + +*!* Get the default path, will also verify folder existence unless KF_FLAG_DONT_VERIFY is also specified +#Define KF_FLAG_DEFAULT_PATH 0x00000400 + +*!* Get the not-parent-relative default path. Only valid with KF_FLAG_DEFAULT_PATH +#Define KF_FLAG_NOT_PARENT_RELATIVE 0x00000200 + +*!* Build simple pidl +#Define KF_FLAG_SIMPLE_IDLIST 0x00000100 + +#Define LANG_AFRIKAANS 0x36 +#Define LANG_ALBANIAN 0x1c +#Define LANG_ARABIC 0x01 +#Define LANG_BASQUE 0x2d +#Define LANG_BELARUSIAN 0x23 +#Define LANG_BULGARIAN 0x02 +#Define LANG_CATALAN 0x03 +#Define LANG_CHINESE 0x04 +#Define LANG_CROATIAN 0x1a +#Define LANG_CZECH 0x05 +#Define LANG_DANISH 0x06 +#Define LANG_DUTCH 0x13 +#Define LANG_ENGLISH 0x09 +#Define LANG_ESTONIAN 0x25 +#Define LANG_FAEROESE 0x38 +#Define LANG_FARSI 0x29 +#Define LANG_FINNISH 0x0b +#Define LANG_FRENCH 0x0c +#Define LANG_GALICIAN 0x56 +#Define LANG_GERMAN 0x07 +#Define LANG_GREEK 0x08 +#Define LANG_HEBREW 0x0d +#Define LANG_HUNGARIAN 0x0e +#Define LANG_ICELANDIC 0x0f +#Define LANG_INDONESIAN 0x21 +#Define LANG_ITALIAN 0x10 +#Define LANG_JAPANESE 0x11 +#Define LANG_KOREAN 0x12 +#Define LANG_LATVIAN 0x26 +#Define LANG_LITHUANIAN 0x27 +#Define LANG_MALAY 0x3e +#Define LANG_NEUTRAL 0x00 +#Define LANG_NORWEGIAN 0x14 +#Define LANG_POLISH 0x15 +#Define LANG_PORTUGUESE 0x16 +#Define LANG_ROMANIAN 0x18 +#Define LANG_RUSSIAN 0x19 +#Define LANG_SERBIAN 0x1a +#Define LANG_SLOVAK 0x1b +#Define LANG_SLOVENIAN 0x24 +#Define LANG_SPANISH 0x0a +#Define LANG_SWEDISH 0x1d +#Define LANG_THAI 0x1e +#Define LANG_TURKISH 0x1f +#Define LANG_UKRAINIAN 0x22 +#Define LANG_VIETNAMESE 0x2a +#Define LF_FACESIZE 32 +#Define LOCALE_FONTSIGNATURE 0x58 +#Define LOCALE_ICALENDARTYPE 0x1009 +#Define LOCALE_ICENTURY 0x24 +#Define LOCALE_ICOUNTRY 0x5 +#Define LOCALE_ICURRDIGITS 0x19 +#Define LOCALE_ICURRENCY 0x1b +#Define LOCALE_IDATE 0x21 +#Define LOCALE_IDAYLZERO 0x26 +#Define LOCALE_IDEFAULTANSICODEPAGE 0x1004 +#Define LOCALE_IDEFAULTCODEPAGE 0xb +#Define LOCALE_IDEFAULTCOUNTRY 0xa +#Define LOCALE_IDEFAULTEBCDICCODEPAGE 0x1012 +#Define LOCALE_IDEFAULTLANGUAGE 0x9 +#Define LOCALE_IDEFAULTMACCODEPAGE 0x1011 +#Define LOCALE_IDIGITS 0x11 +#Define LOCALE_IDIGITSUBSTITUTION 0x1014 +#Define LOCALE_IFIRSTDAYOFWEEK 0x100c +#Define LOCALE_IFIRSTWEEKOFYEAR 0x100d +#Define LOCALE_IINTLCURRDIGITS 0x1a +#Define LOCALE_ILANGUAGE 0x1 +#Define LOCALE_ILDATE 0x22 +#Define LOCALE_ILZERO 0x12 +#Define LOCALE_IMEASURE 0xD +#Define LOCALE_IMONLZERO 0x27 +#Define LOCALE_INEGCURR 0x1C +#Define LOCALE_INEGNUMBER 0x1010 +#Define LOCALE_INEGSEPBYSPACE 0x57 +#Define LOCALE_INEGSIGNPOSN 0x53 +#Define LOCALE_INEGSYMPRECEDES 0x56 +#Define LOCALE_IOPTIONALCALENDAR 0x100B +#Define LOCALE_IPAPERSIZE 0x100A +#Define LOCALE_IPOSSEPBYSPACE 0x55 +#Define LOCALE_IPOSSIGNPOSN 0x52 +#Define LOCALE_IPOSSYMPRECEDES 0x54 +#Define LOCALE_ITIME 0x23 +#Define LOCALE_ITIMEMARKPOSN 0x1005 +#Define LOCALE_ITLZERO 0x25 +#Define LOCALE_NOUSEROVERRIDE 0x80000000 +#Define LOCALE_RETURN_NUMBER 0x20000000 +#Define LOCALE_S1159 0x28 +#Define LOCALE_S2359 0x29 +#Define LOCALE_SABBREVCTRYNAME 0x7 +#Define LOCALE_SABBREVDAYNAME1 0x31 +#Define LOCALE_SABBREVDAYNAME2 0x32 +#Define LOCALE_SABBREVDAYNAME3 0x33 +#Define LOCALE_SABBREVDAYNAME4 0x34 +#Define LOCALE_SABBREVDAYNAME5 0x35 +#Define LOCALE_SABBREVDAYNAME6 0x36 +#Define LOCALE_SABBREVDAYNAME7 0x37 +#Define LOCALE_SABBREVLANGNAME 0x3 +#Define LOCALE_SABBREVMONTHNAME1 0x44 +#Define LOCALE_SABBREVMONTHNAME10 0x4D +#Define LOCALE_SABBREVMONTHNAME11 0x4E +#Define LOCALE_SABBREVMONTHNAME12 0x4F +#Define LOCALE_SABBREVMONTHNAME13 0x100F +#Define LOCALE_SABBREVMONTHNAME2 0x45 +#Define LOCALE_SABBREVMONTHNAME3 0x46 +#Define LOCALE_SABBREVMONTHNAME4 0x47 +#Define LOCALE_SABBREVMONTHNAME5 0x48 +#Define LOCALE_SABBREVMONTHNAME6 0x49 +#Define LOCALE_SABBREVMONTHNAME7 0x4A +#Define LOCALE_SABBREVMONTHNAME8 0x4B +#Define LOCALE_SABBREVMONTHNAME9 0x4C +#Define LOCALE_SCOUNTRY 0x6 +#Define LOCALE_SCURRENCY 0x14 +#Define LOCALE_SDATE 0x1D +#Define LOCALE_SDAYNAME1 0x2A +#Define LOCALE_SDAYNAME2 0x2B +#Define LOCALE_SDAYNAME3 0x2C +#Define LOCALE_SDAYNAME4 0x2D +#Define LOCALE_SDAYNAME5 0x2E +#Define LOCALE_SDAYNAME6 0x2F +#Define LOCALE_SDAYNAME7 0x30 +#Define LOCALE_SDECIMAL 0xE +#Define LOCALE_SENGCOUNTRY 0x1002 +#Define LOCALE_SENGCURRNAME 0x1007 +#Define LOCALE_SENGLANGUAGE 0x1001 +#Define LOCALE_SGROUPING 0x10 +#Define LOCALE_SINTLSYMBOL 0x15 +#Define LOCALE_SISO3166CTRYNAME 0x5A +#Define LOCALE_SISO639LANGNAME 0x59 +#Define LOCALE_SLANGUAGE 0x2 +#Define LOCALE_SLIST 0xC +#Define LOCALE_SLONGDATE 0x20 +#Define LOCALE_SMONDECIMALSEP 0x16 +#Define LOCALE_SMONGROUPING 0x18 +#Define LOCALE_SMONTHNAME1 0x38 +#Define LOCALE_SMONTHNAME10 0x41 +#Define LOCALE_SMONTHNAME11 0x42 +#Define LOCALE_SMONTHNAME12 0x43 +#Define LOCALE_SMONTHNAME13 0x100E +#Define LOCALE_SMONTHNAME2 0x39 +#Define LOCALE_SMONTHNAME3 0x3A +#Define LOCALE_SMONTHNAME4 0x3B +#Define LOCALE_SMONTHNAME5 0x3C +#Define LOCALE_SMONTHNAME6 0x3D +#Define LOCALE_SMONTHNAME7 0x3E +#Define LOCALE_SMONTHNAME8 0x3F +#Define LOCALE_SMONTHNAME9 0x40 +#Define LOCALE_SMONTHOUSANDSEP 0x17 +#Define LOCALE_SNATIVECTRYNAME 0x8 +#Define LOCALE_SNATIVECURRNAME 0x1008 +#Define LOCALE_SNATIVEDIGITS 0x13 +#Define LOCALE_SNATIVELANGNAME 0x4 +#Define LOCALE_SNEGATIVESIGN 0x51 +#Define LOCALE_SPOSITIVESIGN 0x50 +#Define LOCALE_SSHORTDATE 0x1F +#Define LOCALE_SSORTNAME 0x1013 +#Define LOCALE_STHOUSAND 0xF +#Define LOCALE_STIME 0x1E +#Define LOCALE_STIMEFORMAT 0x1003 +#Define LOCALE_SYEARMONTH 0x1006 +#Define LOCALE_SYSTEM_DEFAULT 0x800 +#Define LOCALE_USE_CP_ACP 0x40000000 +#Define LOCALE_USER_DEFAULT 0x400 +#Define LOGPIXELSX 88 +#Define LOGPIXELSY 90 + +#Define LV_VIEW_ICON 0x0 +#Define LV_VIEW_DETAILS 0x1 +#Define LV_VIEW_SMALLICON 0x2 +#Define LV_VIEW_LIST 0x3 +#Define LV_VIEW_TILE 0x4 + +#Define MAC_CHARSET 77 +#Define MAX_PATH 260 +#Define MAXDWORD 0xFFFFFFFF +#Define MAXLONG 0x7FFFFFFF + +#Define MCHT_CALENDAR 0x00020000 +#Define MCHT_CALENDARBK 0x00020000 +#Define MCHT_CALENDARDATE 0x00020001 +#Define MCHT_CALENDARDATENEXT 0x01020001 +#Define MCHT_CALENDARDATEPREV 0x02020001 +#Define MCHT_CALENDARDAY 0x00020002 +#Define MCHT_CALENDARWEEKNUM 0x00020003 +#Define MCHT_NEXT 0x01000000 +#Define MCHT_NOWHERE 0x00000000 +#Define MCHT_PREV 0x02000000 +#Define MCHT_TITLE 0x00010000 +#Define MCHT_TITLEBK 0x00010000 +#Define MCHT_TITLEBTNNEXT 0x01010003 +#Define MCHT_TITLEBTNPREV 0x02010003 +#Define MCHT_TITLEMONTH 0x00010001 +#Define MCHT_TITLEYEAR 0x00010002 +#Define MCHT_TODAYLINK 0x00030000 + +#Define MCM_FIRST 0x1000 +#Define MCM_GETCALENDARBORDER 0x101F +#Define MCM_GETCALENDARCOUNT 0x1017 +#Define MCM_GETCALENDARGRIDINFO 0x1018 +#Define MCM_GETCALID (0x1000+27) +#Define MCM_GETCOLOR 0x100b +#Define MCM_GETCURRENTVIEW (0x1000+22) +#Define MCM_GETCURSEL 0x1001 +#Define MCM_GETFIRSTDAYOFWEEK 0x1010 +#Define MCM_GETMAXSELCOUNT 0x1003 +#Define MCM_GETMAXTODAYWIDTH 0x1015 +#Define MCM_GETMINREQRECT 0x1009 +#Define MCM_GETMONTHDELTA 0x1013 +#Define MCM_GETMONTHRANGE 0x1007 +#Define MCM_GETRANGE 0x1011 +#Define MCM_GETSELRANGE 0x1005 +#Define MCM_GETTODAY 0x100d +#Define MCM_GETUNICODEFORMAT 0x2006 +#Define MCM_HITTEST 0x100e +#Define MCM_SETCALENDARBORDER (0x1000+30) +#Define MCM_SETCALID (0x1000+28) +#Define MCM_SETCOLOR 0x100a +#Define MCM_SETCURRENTVIEW (0x1000+32) +#Define MCM_SETCURSEL 0x1002 +#Define MCM_SETDAYSTATE 0x1008 +#Define MCM_SETFIRSTDAYOFWEEK 0x100f +#Define MCM_SETMAXSELCOUNT 0x1004 +#Define MCM_SETMONTHDELTA 0x1014 +#Define MCM_SETRANGE 0x1012 +#Define MCM_SETSELRANGE 0x1006 +#Define MCM_SETTODAY 0x100c +#Define MCM_SETUNICODEFORMAT 0x2005 +#Define MCM_SIZERECTTOMIN (0x1000+29) +#Define MCN_FIRST (-750) +#Define MCN_GETDAYSTATE (-747) +#Define MCN_LAST (-759) +#Define MCN_SELCHANGE (-749) +#Define MCN_SELECT (-746) +#Define MCS_COMMAND_CONNECT 19 +#Define MCS_COMMAND_DISABLE 14 +#Define MCS_COMMAND_ENABLE 13 +#Define MCS_COMMAND_GET_CONFIG 16 +#Define MCS_COMMAND_REFRESH_STATUS 21 +#Define MCS_COMMAND_RENAME 20 +#Define MCS_COMMAND_SET_CONFIG 15 +#Define MCS_COMMAND_START 17 +#Define MCS_COMMAND_STOP 18 +#Define MCS_CREATE_CONFIGS_BY_DEFAULT 0x10 +#Define MCS_CREATE_ONE_PER_NETCARD 0x1 +#Define MCS_CREATE_PMODE_NOT_REQUIRED 0x100 +#Define MCS_DAYSTATE 0x1 +#Define MCS_MULTISELECT 0x2 +#Define MCS_NOTODAY 0x10 +#Define MCS_NOTODAYCIRCLE 0x8 +#Define MCS_WEEKNUMBERS 0x4 +#Define MCSC_BACKGROUND 0 +#Define MCSC_MONTHBK 4 +#Define MCSC_TEXT 1 +#Define MCSC_TITLEBK 2 +#Define MCSC_TITLETEXT 3 +#Define MCSC_TRAILINGTEXT 5 +#Define MF_APPEND 0x100 +#Define MF_BITMAP 0x4 +#Define MF_BYCOMMAND 0x0 +#Define MF_BYPOSITION 0x400 +#Define MF_CALLBACKS 0x8000000 +#Define MF_CHANGE 0x80 +#Define MF_CHECKED 0x8 +#Define MF_CONV 0x40000000 +#Define MF_DEFAULT 0x1000 +#Define MF_DELETE 0x200 +#Define MF_DISABLED 0x2 +#Define MF_DLL_NAME "Microsoft Picture Converter" +#Define MF_ENABLED 0x0 +#Define MF_END 0x80 +#Define MF_ERRORS 0x10000000 +#Define MF_FLAGS_CREATE_BUT_NO_SHOW_DISABLED 0x8 +#Define MF_FLAGS_EVEN_IF_NO_RESOURCE 0x1 +#Define MF_FLAGS_FILL_IN_UNKNOWN_RESOURCE 0x4 +#Define MF_FLAGS_NO_CREATE_IF_NO_RESOURCE 0x2 +#Define MF_FPCR_FUNC 0x25 +#Define MF_FPCR_FUNC_STR "mf_fpcr" +#Define MF_GRAYED 0x1 +#Define MF_HELP 0x4000 +#Define MF_HILITE 0x80 +#Define MF_HSZ_INFO 0x1000000 +#Define MF_INSERT 0x0 +#Define MF_LINKS 0x20000000 +#Define MF_MASK 0xff000000 +#Define MF_MENUBARBREAK 0x20 +#Define MF_MENUBREAK 0x40 +#Define MF_MOUSESELECT 0x8000 +#Define MF_OWNERDRAW 0x100 +#Define MF_POPUP 0x10 +#Define MF_POSTMSGS 0x4000000 +#Define MF_REMOVE 0x1000 +#Define MF_RIGHTJUSTIFY 0x4000 +#Define MF_SENDMSGS 0x2000000 +#Define MF_SEPARATOR 0x800 +#Define MF_STRING 0x0 +#Define MF_SYSMENU 0x2000 +#Define MF_UNCHECKED 0x0 +#Define MF_UNHILITE 0x0 +#Define MF_USECHECKBITMAPS 0x200 +#Define MFS_CHECKED 0x8 +#Define MFS_DEFAULT 0x1000 +#Define MFS_DISABLED 0x3 +#Define MFS_ENABLED 0x0 +#Define MFS_GRAYED 0x3 +#Define MFS_HILITE 0x80 +#Define MFS_UNCHECKED 0x0 +#Define MFS_UNHILITE 0x0 +#Define MFT_BITMAP 0x4 +#Define MFT_MENUBARBREAK 0x20 +#Define MFT_MENUBREAK 0x40 +#Define MFT_OWNERDRAW 0x100 +#Define MFT_RADIOCHECK 0x200 +#Define MFT_RIGHTJUSTIFY 0x4000 +#Define MFT_RIGHTORDER 0x2000 +#Define MFT_SEPARATOR 0x800 +#Define MFT_STRING 0x0 +#Define MIB_IPADDR_DELETED 0x0040 && Address is being deleted +#Define MIB_IPADDR_DISCONNECTED 0x0008 && Address is on disconnected interface +#Define MIB_IPADDR_DYNAMIC 0x0004 && Dynamic IP address +#Define MIB_IPADDR_PRIMARY 0x0001 && Primary IP address +#Define MIB_IPADDR_TRANSIENT 0x0080 && Transient address +#Define MIIM_BITMAP 0x80 +#Define MIIM_CHECKMARKS 0x8 +#Define MIIM_DATA 0x20 +#Define MIIM_FTYPE 0x100 +#Define MIIM_ID 0x2 +#Define MIIM_STATE 0x1 +#Define MIIM_STRING 0x40 +#Define MIIM_SUBMENU 0x4 +#Define MIIM_TYPE 0x10 +#Define MIM_APPLYTOSUBMENUS 0x80000000 +#Define MIM_BACKGROUND 0x2 +#Define MIM_CLOSE 0x3c2 +#Define MIM_DATA 0x3c3 +#Define MIM_ERROR 0x3c5 +#Define MIM_HELPID 0x4 +#Define MIM_LONGDATA 0x3c4 +#Define MIM_LONGERROR 0x3c6 +#Define MIM_MAXHEIGHT 0x1 +#Define MIM_MENUDATA 0x8 +#Define MIM_MOREDATA 0x3cc +#Define MIM_OPEN 0x3c1 +#Define MIM_STYLE 0x10 +#Define MK_ALT 0x20 +#Define MK_CONTROL 0x8 +#Define MK_ICON 0x1000 +#Define MK_LBUTTON 0x1 +#Define MK_MBUTTON 0x10 +#Define MK_RBUTTON 0x2 +#Define MK_SHIFT 0x4 +#Define MK_XBUTTON1 0x20 +#Define MK_XBUTTON2 0x40 +#Define MNS_AUTODISMISS 0x10000000 +#Define MNS_CHECKORBMP 0x4000000 +#Define MNS_DRAGDROP 0x20000000 +#Define MNS_MODELESS 0x40000000 +#Define MNS_NOCHECK 0x80000000 +#Define MNS_NOTIFYBYPOS 0x8000000 +#Define MONITOR_DEFAULTTONEAREST 0x2 +#Define MONITOR_DEFAULTTONULL 0x0 +#Define MONITOR_DEFAULTTOPRIMARY 0x1 +#Define MONTHCAL_CLASSA "SysMonthCal32" +#Define MONTHCAL_CLASSW "SysMonthCal32" +#Define MSGF_COMMCTRL_BEGINDRAG 0x4200 +#Define MSGF_COMMCTRL_DRAGSELECT 0x4202 +#Define MSGF_COMMCTRL_SIZEHEADER 0x4201 +#Define MSGF_COMMCTRL_TOOLBARCUST 0x4203 +#Define MSGF_DDEMGR 0x8001 +#Define MSGF_DIALOGBOX 0 +#Define MSGF_MAINLOOP 8 +#Define MSGF_MAX 8 +#Define MSGF_MENU 2 +#Define MSGF_MESSAGEBOX 1 +#Define MSGF_MOVE 3 +#Define MSGF_NEXTWINDOW 6 +#Define MSGF_SCROLLBAR 5 +#Define MSGF_SIZE 4 +#Define MSGF_USER 4096 +#Define NM_CLICK -2 +#Define NM_CUSTOMDRAW -12 +#Define NM_DBLCLICK -3 +#Define NM_FIRST 0 +#Define NM_RCLICK -5 +#Define NM_RDBLCLK -6 +#Define NM_RELEASEDCAPTURE -16 +#Define NO_ERROR 0 + +#Define NODE_INVALID 0 +#Define NODE_ELEMENT 1 +#Define NODE_ATTRIBUTE 2 +#Define NODE_TEXT 3 +#Define NODE_CDATA_SECTION 4 +#Define NODE_ENTITY_REFERENCE 5 +#Define NODE_PROCESSING_INSTRUCTION 7 +#Define NODE_COMMENT 8 +#Define NODE_DOCUMENT 9 +#Define NODE_DOCUMENT_TYPE 10 +#Define NODE_DOCUMENT_FRAGMENT 11 +#Define NODE_NOTATION 12 + +#Define NTDDI_LONGHORN 06000000 && NTDDI_VISTA +#Define NTDDI_VISTA 06000000 && NTDDI_WIN6 +#Define NTDDI_VISTASP1 06000100 && NTDDI_WIN6SP1 +#Define NTDDI_VISTASP2 06000200 && NTDDI_WIN6SP2 +#Define NTDDI_VISTASP3 06000300 && NTDDI_WIN6SP3 +#Define NTDDI_VISTASP4 06000400 && NTDDI_WIN6SP4 +#Define NTDDI_WIN2K 05000000 && NTDDI version constants +#Define NTDDI_WIN2KSP1 05000100 && http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2095548 +#Define NTDDI_WIN2KSP2 05000200 +#Define NTDDI_WIN2KSP3 05000300 +#Define NTDDI_WIN2KSP4 05000400 +#Define NTDDI_WIN6 06000000 +#Define NTDDI_WIN6SP1 06000100 +#Define NTDDI_WIN6SP2 06000200 +#Define NTDDI_WIN6SP3 06000300 +#Define NTDDI_WIN6SP4 06000400 +#Define NTDDI_WINXP 05010000 +#Define NTDDI_WINXPSP1 05010100 +#Define NTDDI_WINXPSP2 05010200 +#Define NTDDI_WINXPSP3 05010300 +#Define NTDDI_WINXPSP4 05010400 +#Define NTDDI_WS03 05020000 +#Define NTDDI_WS03SP1 05020100 +#Define NTDDI_WS03SP2 05020200 +#Define NTDDI_WS03SP3 05020300 +#Define NTDDI_WS03SP4 05020400 +#Define NTDDI_WS08 06000100 && NTDDI_WIN6SP1 +#Define NTDDI_WS08SP2 06000200 && NTDDI_WIN6SP2 +#Define NTDDI_WS08SP3 06000300 && NTDDI_WIN6SP3 +#Define NTDDI_WS08SP4 06000400 && NTDDI_WIN6SP4 +#Define ODA_DRAWENTIRE 0x1 +#Define ODA_FOCUS 0x4 +#Define ODA_SELECT 0x2 +#Define ODS_CHECKED 0x8 +#Define ODS_COMBOBOXEDIT 0x1000 +#Define ODS_DEFAULT 0x20 +#Define ODS_DISABLED 0x4 +#Define ODS_FOCUS 0x10 +#Define ODS_GRAYED 0x2 +#Define ODS_HOTLIGHT 0x40 +#Define ODS_INACTIVE 0x80 +#Define ODS_NOACCEL 0x100 +#Define ODS_NOFOCUSRECT 0x200 +#Define ODS_SELECTED 0x1 +#Define ODT_BUTTON 4 +#Define ODT_COMBOBOX 3 +#Define ODT_HEADER 100 +#Define ODT_LISTBOX 2 +#Define ODT_LISTVIEW 102 +#Define ODT_MENU 1 +#Define ODT_STATIC 5 +#Define ODT_TAB 101 +#Define OEM_CHARSET 255 + +#Define OFN_ALLOWMULTISELECT 0x200 +#Define OFN_CREATEPROMPT 0x2000 +#Define OFN_DONTADDTORECENT 0x2000000 +#Define OFN_ENABLEHOOK 0x20 +#Define OFN_ENABLEINCLUDENOTIFY 0x400000 +#Define OFN_ENABLESIZING 0x800000 +#Define OFN_ENABLETEMPLATE 0x40 +#Define OFN_ENABLETEMPLATEHANDLE 0x80 +#Define OFN_EX_NOPLACESBAR 0x1 +#Define OFN_EXPLORER 0x80000 +#Define OFN_EXTENSIONDIFFERENT 0x400 +#Define OFN_FILEMUSTEXIST 0x1000 +#Define OFN_FORCESHOWHIDDEN 0x10000000 +#Define OFN_HIDEREADONLY 0x4 +#Define OFN_LONGNAMES 0x200000 +#Define OFN_NOCHANGEDIR 0x8 +#Define OFN_NODEREFERENCELINKS 0x100000 +#Define OFN_NOLONGNAMES 0x40000 +#Define OFN_NONETWORKBUTTON 0x20000 +#Define OFN_NOREADONLYRETURN 0x8000 +#Define OFN_NOTESTFILECREATE 0x10000 +#Define OFN_NOVALIDATE 0x100 +#Define OFN_OVERWRITEPROMPT 0x2 +#Define OFN_PATHMUSTEXIST 0x800 +#Define OFN_READONLY 0x1 +#Define OFN_SHAREAWARE 0x4000 +#Define OFN_SHAREFALLTHROUGH 2 +#Define OFN_SHARENOWARN 1 +#Define OFN_SHAREWARN 0 +#Define OFN_SHOWHELP 0x10 +#Define OFN_USEMONIKERS 0x1000000 + +#Define OPEN_ALWAYS 4 +#Define OPEN_EXISTING 3 +#Define OUT_DEFAULT_PRECIS 0 +#Define OUT_OUTLINE_PRECIS 8 +#Define PBM_DELTAPOS 0x403 +#Define PBM_GETPOS 0x408 +#Define PBM_GETRANGE 0x407 +#Define PBM_SETBARCOLOR 0x409 +#Define PBM_SETBKCOLOR 0x2001 +#Define PBM_SETMARQUEE 0x40a +#Define PBM_SETPOS 0x402 +#Define PBM_SETRANGE 0x401 +#Define PBM_SETRANGE32 0x406 +#Define PBM_SETSTATE 0x410 +#Define PBM_SETSTEP 0x404 +#Define PBM_STEPIT 0x405 +#Define PBS_MARQUEE 0x8 && Comctl32.dll version 6 +#Define PBS_SMOOTH 0x1 && Comctl32.dll Version 4.7 or later +#Define PBS_VERTICAL 0x4 && Comctl32.dll Version 4.7 or later +#Define PBST_ERROR 0x0002 +#Define PBST_NORMAL 0x0001 +#Define PBST_PAUSED 0x0003 +#Define PICTYPE_BITMAP 1 +#Define PICTYPE_ENHMETAFILE 4 +#Define PICTYPE_ICON 3 +#Define PICTYPE_METAFILE 2 +#Define PICTYPE_NONE 0 +#Define PICTYPE_UNINITIALIZED -1 +#Define PROGRESS_CLASSA "msctls_progress32" +#Define PROGRESS_CLASSW "msctls_progress32" +#Define PROOF_QUALITY 2 +#Define PS_SOLID 0 + +#Define pshHelp 0x40E + +#Define RBS_AUTOSIZE 0x2000 +#Define RBS_BANDBORDERS 0x400 +#Define RBS_DBLCLKTOGGLE 0x8000 +#Define RBS_FIXEDORDER 0x800 +#Define RBS_REGISTERDROP 0x1000 +#Define RBS_TOOLTIPS 0x100 +#Define RBS_VARHEIGHT 0x200 +#Define RBS_VERTICALGRIPPER 0x4000 +#Define RBSTR_CHANGERECT 0x2 +#Define RBSTR_PREFERNOLINEBREAK 0x1 +#Define RDW_ALLCHILDREN 0x80 +#Define RDW_ERASE 0x4 +#Define RDW_ERASENOW 0x200 +#Define RDW_FRAME 0x400 +#Define RDW_INTERNALPAINT 0x2 +#Define RDW_INVALIDATE 0x1 +#Define RDW_NOCHILDREN 0x40 +#Define RDW_NOERASE 0x20 +#Define RDW_NOFRAME 0x800 +#Define RDW_NOINTERNALPAINT 0x10 +#Define RDW_UPDATENOW 0x100 +#Define RDW_VALIDATE 0x8 +#Define READ_CONTROL 0x20000 +#Define REG_BINARY 3 +#Define REG_DWORD 4 +#Define REG_DWORD_BIG_ENDIAN 5 +#Define REG_DWORD_LITTLE_ENDIAN 4 +#Define REG_EXPAND_SZ 2 +#Define REG_MULTI_SZ 7 +#Define REG_OPTION_BACKUP_RESTORE 4 +#Define REG_OPTION_NON_VOLATILE 0 +#Define REG_OPTION_VOLATILE 1 +#Define REG_SZ 1 +#Define RPC_S_UUID_LOCAL_ONLY 1824 +#Define RT_ACCELERATOR 9 +#Define RT_ANICURSOR 21 +#Define RT_ANIICON 22 +#Define RT_BITMAP 2 +#Define RT_CURSOR 1 +#Define RT_DIALOG 5 +#Define RT_DLGINCLUDE 17 +#Define RT_FONT 8 +#Define RT_FONTDIR 7 +#Define RT_GROUP_CURSOR 12 +#Define RT_GROUP_ICON 14 +#Define RT_HTML 23 +#Define RT_ICON 3 +#Define RT_MENU 4 +#Define RT_MESSAGETABLE 11 +#Define RT_PLUGPLAY 19 +#Define RT_RCDATA 10 +#Define RT_STRING 6 +#Define RT_VERSION 16 +#Define RT_VXD 20 +#Define RUSSIAN_CHARSET 204 +#Define S_OK 0x0 +#Define SB_BOTH 3 +#Define SB_BOTTOM 7 +#Define SB_CONST_ALPHA 0x1 +#Define SB_CTL 2 +#Define SB_ENDSCROLL 8 +#Define SB_GETBORDERS 0x407 +#Define SB_GETICON 0x414 +#Define SB_GETPARTS 0x406 +#Define SB_GETRECT 0x40a +#Define SB_GETTEXTA 0x402 +#Define SB_GETTEXTLENGTHA 0x403 +#Define SB_GETTEXTLENGTHW 0x40c +#Define SB_GETTEXTW 0x40d +#Define SB_GETTIPTEXTA 0x412 +#Define SB_GETTIPTEXTW 0x413 +#Define SB_GETUNICODEFORMAT 0x2006 +#Define SB_GRAD_RECT 0x10 +#Define SB_GRAD_TRI 0x20 +#Define SB_HORZ 0 +#Define SB_ISSIMPLE 0x40e +#Define SB_LEFT 6 +#Define SB_LINEDOWN 1 +#Define SB_LINELEFT 0 +#Define SB_LINERIGHT 1 +#Define SB_LINEUP 0 +#Define SB_NONE 0x0 +#Define SB_PAGEDOWN 3 +#Define SB_PAGELEFT 2 +#Define SB_PAGERIGHT 3 +#Define SB_PAGEUP 2 +#Define SB_PIXEL_ALPHA 0x2 +#Define SB_PREMULT_ALPHA 0x4 +#Define SB_RIGHT 7 +#Define SB_SETBKCOLOR 0x2001 +#Define SB_SETICON 0x40f +#Define SB_SETMINHEIGHT 0x408 +#Define SB_SETPARTS 0x404 +#Define SB_SETTEXTA 0x401 +#Define SB_SETTEXTW 0x40b +#Define SB_SETTIPTEXTA 0x410 +#Define SB_SETTIPTEXTW 0x411 +#Define SB_SETUNICODEFORMAT 0x2005 +#Define SB_SIMPLE 0x409 +#Define SB_SIMPLEID 0xff +#Define SB_THUMBPOSITION 4 +#Define SB_THUMBTRACK 5 +#Define SB_TOP 6 +#Define SB_VERT 1 +#Define SBARS_SIZEGRIP 0x100 +#Define SBARS_TOOLTIPS 0x800 +#Define SBM_ENABLE_ARROWS 0xE4 +#Define SBM_GETPOS 0xE1 +#Define SBM_GETRANGE 0xE3 +#Define SBM_GETSCROLLBARINFO 0xEB +#Define SBM_GETSCROLLINFO 0xEA +#Define SBM_SETPOS 0xE0 +#Define SBM_SETRANGE 0xE2 +#Define SBM_SETRANGEREDRAW 0xE6 +#Define SBM_SETSCROLLINFO 0xE9 +#Define SBS_BOTTOMALIGN 0x4 +#Define SBS_HORZ 0x0 +#Define SBS_LEFTALIGN 0x2 +#Define SBS_RIGHTALIGN 0x4 +#Define SBS_SIZEBOX 0x8 +#Define SBS_SIZEBOXBOTTOMRIGHTALIGN 0x4 +#Define SBS_SIZEBOXTOPLEFTALIGN 0x2 +#Define SBS_SIZEGRIP 0x10 +#Define SBS_TOPALIGN 0x2 +#Define SBS_VERT 0x1 +#Define SBT_NOBORDERS 0x100 +#Define SBT_NOTABPARSING 0x800 +#Define SBT_OWNERDRAW 0x1000 +#Define SBT_POPOUT 0x200 +#Define SBT_RTLREADING 0x400 +#Define SBT_TOOLTIPS 0x800 +#Define SC_ARRANGE 0xF110 +#Define SC_CLOSE 0xF060 +#Define SC_CONTEXTHELP 0xF180 +#Define SC_DEFAULT 0xF160 +#Define SC_DLG_FORCE_UI 0x4 +#Define SC_DLG_MINIMAL_UI 0x1 +#Define SC_DLG_NO_UI 0x2 +#Define SC_ENUM_PROCESS_INFO 0 +#Define SC_FLAGS 0x400 +#Define SC_FLAGS_STR "/sc" +#Define SC_HOTKEY 0xF150 +#Define SC_HSCROLL 0xF080 +#Define SC_ICON 0xF020 &&SC_MINIMIZE +#Define SC_KEYMENU 0xF100 +#Define SC_MANAGER_ALL_ACCESS 0xF003F +#Define SC_MANAGER_CONNECT 0x1 +#Define SC_MANAGER_CREATE_SERVICE 0x2 +#Define SC_MANAGER_ENUMERATE_SERVICE 0x4 +#Define SC_MANAGER_LOCK 0x8 +#Define SC_MANAGER_MODIFY_BOOT_CONFIG 0x20 +#Define SC_MANAGER_QUERY_LOCK_STATUS 0x10 +#Define SC_MAXIMIZE 0xF030 +#Define SC_MINIMIZE 0xF020 +#Define SC_MONITORPOWER 0xF170 +#Define SC_MOUSEMENU 0xF090 +#Define SC_MOVE 0xF010 +#Define SC_NEXTWINDOW 0xF040 +#Define SC_PREVWINDOW 0xF050 +#Define SC_RESTORE 0xF120 +#Define SC_SCREENSAVE 0xF140 +#Define SC_SEPARATOR 0xF00F +#Define SC_SIZE 0xF000 +#Define SC_TASKLIST 0xF130 +#Define SC_VSCROLL 0xF070 +#Define SC_ZOOM 0xF030 && SC_MAXIMIZE +#Define SECURITY_FLAG_IGNORE_UNKNOWN_CA 0x100 +#Define SECURITY_FLAG_IGNORE_UNKNOWN_CA 0x100 +#Define SEM_FAILCRITICALERRORS 0x1 +#Define SEM_NOALIGNMENTFAULTEXCEPT 0x4 +#Define SEM_NOGPFAULTERRORBOX 0x2 +#Define SEM_NOOPENFILEERRORBOX 0x8000 +#Define SERVICE_ALL_ACCESS 0xF01FF +#Define SERVICE_AUTO_START 0x2 +#Define SERVICE_BOOT_START 0x0 +#Define SERVICE_CHANGE_CONFIG 0x2 +#Define SERVICE_CONFIG_DELAYED_AUTO_START_INFO 3 +#Define SERVICE_CONFIG_DESCRIPTION 1 +#Define SERVICE_CONFIG_FAILURE_ACTIONS 2 +#Define SERVICE_CONFIG_FAILURE_ACTIONS_FLAG 4 +#Define SERVICE_CONFIG_PRESHUTDOWN_INFO 7 +#Define SERVICE_CONFIG_REQUIRED_PRIVILEGES_INFO 6 +#Define SERVICE_CONFIG_SERVICE_SID_INFO 5 +#Define SERVICE_CONTINUE_PENDING 0x5 +#Define SERVICE_CONTROL_CONTINUE 0x3 +#Define SERVICE_CONTROL_DEVICEEVENT 0xB +#Define SERVICE_CONTROL_HARDWAREPROFILECHANGE 0xC +#Define SERVICE_CONTROL_INTERROGATE 0x4 +#Define SERVICE_CONTROL_NETBINDADD 0x7 +#Define SERVICE_CONTROL_NETBINDDISABLE 0xA +#Define SERVICE_CONTROL_NETBINDENABLE 0x9 +#Define SERVICE_CONTROL_NETBINDREMOVE 0x8 +#Define SERVICE_CONTROL_PARAMCHANGE 0x6 +#Define SERVICE_CONTROL_PAUSE 0x2 +#Define SERVICE_CONTROL_POWEREVENT 0xD +#Define SERVICE_CONTROL_SHUTDOWN 0x5 +#Define SERVICE_CONTROL_STOP 0x1 +#Define SERVICE_DEMAND_START 0x3 +#Define SERVICE_DISABLED 0x4 +#Define SERVICE_ENUMERATE_DEPENDENTS 0x8 +#Define SERVICE_ERROR_CRITICAL 0x3 +#Define SERVICE_ERROR_IGNORE 0x0 +#Define SERVICE_ERROR_NORMAL 0x1 +#Define SERVICE_ERROR_SEVERE 0x2 +#Define SERVICE_FILE_SYSTEM_DRIVER 0x2 +#Define SERVICE_INTERACTIVE_PROCESS 0x100 +#Define SERVICE_INTERROGATE 0x80 +#Define SERVICE_KERNEL_DRIVER 0x1 +#Define SERVICE_PAUSE_CONTINUE 0x40 +#Define SERVICE_PAUSE_PENDING 0x6 +#Define SERVICE_PAUSED 0x7 +#Define SERVICE_QUERY_CONFIG 0x1 +#Define SERVICE_RECOGNIZER_DRIVER 0x8 +#Define SERVICE_RUNNING 0x4 +#Define SERVICE_START 0x10 +#Define SERVICE_START_PENDING 0x2 +#Define SERVICE_STOP 0x20 +#Define SERVICE_STOP_PENDING 0x3 +#Define SERVICE_STOPPED 0x1 +#Define SERVICE_SYSTEM_START 0x1 +#Define SERVICE_USER_DEFINED_CONTROL 0x100 +#Define SERVICE_WIN32_OWN_PROCESS 0x10 +#Define SERVICE_WIN32_SHARE_PROCESS 0x20 +#Define SHGFP_TYPE_CURRENT 0 && Return the folder's current path. +#Define SHGFP_TYPE_DEFAULT 1 && Return the folder's default path. +#Define SHIFTJIS_CHARSET 128 + +#Define SHVIEW_THUMBNAIL 0x702D && 1 THUMBNAILS +#Define SHVIEW_TILE 0x702E && 2 TILES +#Define SHVIEW_ICON 0x7029 && 3 ICONS +#Define SHVIEW_LIST 0x702B && 4 LIST +#Define SHVIEW_REPORT 0x702C && 5 DETAILS + +#Define SIF_ALL 0x17 && BITOR(SIF_RANGE,SIF_PAGE,SIF_POS,SIF_TRACKPOS) +#Define SIF_DISABLENOSCROLL 0x8 +#Define SIF_PAGE 0x2 +#Define SIF_POS 0x4 +#Define SIF_RANGE 0x1 +#Define SIF_TRACKPOS 0x10 + +#Define SIGDN_NORMALDISPLAY 0x00000000 +#Define SIGDN_PARENTRELATIVEPARSING 0x80018001 +#Define SIGDN_PARENTRELATIVEFORADDRESSBAR 0x8007c001 +#Define SIGDN_DESKTOPABSOLUTEPARSING 0x80028000 +#Define SIGDN_PARENTRELATIVEEDITING 0x80031001 +#Define SIGDN_DESKTOPABSOLUTEEDITING 0x8004c000 +#Define SIGDN_FILESYSPATH 0x80058000 +#Define SIGDN_URL 0x80068000 + +#Define SM_ARRANGE 56 +#Define SM_CLEANBOOT 67 +#Define SM_CMETRICS 44 +#Define SM_CMONITORS 80 +#Define SM_CMOUSEBUTTONS 43 +#Define SM_CXBORDER 5 +#Define SM_CXCURSOR 13 +#Define SM_CXDLGFRAME 7 +#Define SM_CXDOUBLECLK 36 +#Define SM_CXDRAG 68 +#Define SM_CXEDGE 45 +#Define SM_CXFIXEDFRAME 7 && SM_CXDLGFRAME +#Define SM_CXFRAME 32 +#Define SM_CXFULLSCREEN 16 +#Define SM_CXHSCROLL 21 +#Define SM_CXHTHUMB 10 +#Define SM_CXICON 11 +#Define SM_CXICONSPACING 38 +#Define SM_CXMAXIMIZED 61 +#Define SM_CXMAXTRACK 59 +#Define SM_CXMENUCHECK 71 +#Define SM_CXMENUSIZE 54 +#Define SM_CXMIN 28 +#Define SM_CXMINIMIZED 57 +#Define SM_CXMINSPACING 47 +#Define SM_CXMINTRACK 34 +#Define SM_CXSCREEN 0 +#Define SM_CXSIZE 30 +#Define SM_CXSIZEFRAME 32 && SM_CXFRAME +#Define SM_CXSMICON 49 +#Define SM_CXSMSIZE 52 +#Define SM_CXVIRTUALSCREEN 78 +#Define SM_CXVSCROLL 2 +#Define SM_CYBORDER 6 +#Define SM_CYCAPTION 4 +#Define SM_CYCURSOR 14 +#Define SM_CYDLGFRAME 8 +#Define SM_CYDOUBLECLK 37 +#Define SM_CYDRAG 69 +#Define SM_CYEDGE 46 +#Define SM_CYFIXEDFRAME 8 && SM_CYDLGFRAME +#Define SM_CYFRAME 33 +#Define SM_CYFULLSCREEN 17 +#Define SM_CYHSCROLL 3 +#Define SM_CYICON 12 +#Define SM_CYICONSPACING 39 +#Define SM_CYKANJIWINDOW 18 +#Define SM_CYMAXIMIZED 62 +#Define SM_CYMAXTRACK 60 +#Define SM_CYMENU 15 +#Define SM_CYMENUCHECK 72 +#Define SM_CYMENUSIZE 55 +#Define SM_CYMIN 29 +#Define SM_CYMINIMIZED 58 +#Define SM_CYMINSPACING 48 +#Define SM_CYMINTRACK 35 +#Define SM_CYSCREEN 1 +#Define SM_CYSIZE 31 +#Define SM_CYSIZEFRAME 33 && SM_CYFRAME +#Define SM_CYSMCAPTION 51 +#Define SM_CYSMICON 50 +#Define SM_CYSMSIZE 53 +#Define SM_CYVIRTUALSCREEN 79 +#Define SM_CYVSCROLL 20 +#Define SM_CYVTHUMB 9 +#Define SM_DBCSENABLED 42 +#Define SM_DEBUG 22 +#Define SM_FOCUS_TYPE_LM_DOMAIN 2 +#Define SM_FOCUS_TYPE_LM_SERVER 5 +#Define SM_FOCUS_TYPE_NT_DOMAIN 1 +#Define SM_FOCUS_TYPE_NT_SERVER 4 +#Define SM_FOCUS_TYPE_UNKNOWN_DOMAIN 3 +#Define SM_FOCUS_TYPE_UNKNOWN_SERVER 7 +#Define SM_FOCUS_TYPE_WFW_SERVER 6 +#Define SM_GETCURFOCUSA 2027 && (WM_USER+1003) +#Define SM_GETCURFOCUSW 2028 && (WM_USER+1004) +#Define SM_GETOPTIONS 2029 && (WM_USER+1005) +#Define SM_GETSELCOUNT 2024 && (WM_USER+1000) +#Define SM_GETSERVERSELA 2025 && (WM_USER+1001) +#Define SM_GETSERVERSELW 2026 && (WM_USER+1002) +#Define SM_IMMENABLED 82 +#Define SM_MENUDROPALIGNMENT 40 +#Define SM_MIDEASTENABLED 74 +#Define SM_MOUSEPRESENT 19 +#Define SM_MOUSEWHEELPRESENT 75 +#Define SM_NETWORK 63 +#Define SM_PENWINDOWS 41 +#Define SM_REMOTESESSION 0x1000 +#Define SM_RESERVED1 24 +#Define SM_RESERVED2 25 +#Define SM_RESERVED3 26 +#Define SM_RESERVED4 27 +#Define SM_SAMEDISPLAYFORMAT 81 +#Define SM_SECURE 44 +#Define SM_SHOWSOUNDS 70 +#Define SM_SLOWMACHINE 73 +#Define SM_SWAPBUTTON 23 +#Define SM_XVIRTUALSCREEN 76 +#Define SM_YVIRTUALSCREEN 77 +#Define SPI_GETACCESSTIMEOUT 60 +#Define SPI_GETACTIVEWINDOWTRACKING 0x1000 +#Define SPI_GETACTIVEWNDTRKTIMEOUT 0x2002 +#Define SPI_GETACTIVEWNDTRKZORDER 0x100C +#Define SPI_GETANIMATION 72 +#Define SPI_GETBEEP 1 +#Define SPI_GETBLOCKSENDINPUTRESETS 0x1026 +#Define SPI_GETBORDER 5 +#Define SPI_GETCARETWIDTH 0x2006 +#Define SPI_GETCOMBOBOXANIMATION 0x1004 +#Define SPI_GETCURSORSHADOW 0x101A +#Define SPI_GETDEFAULTINPUTLANG 89 +#Define SPI_GETDESKWALLPAPER 115 +#Define SPI_GETDRAGFULLWINDOWS 38 +#Define SPI_GETDROPSHADOW 0x1024 +#Define SPI_GETFASTTASKSWITCH 35 +#Define SPI_GETFILTERKEYS 50 +#Define SPI_GETFLATMENU 0x1022 +#Define SPI_GETFOCUSBORDERHEIGHT 0x2010 +#Define SPI_GETFOCUSBORDERWIDTH 0x200E +#Define SPI_GETFONTSMOOTHING 74 +#Define SPI_GETFONTSMOOTHINGCONTRAST 0x200C +#Define SPI_GETFONTSMOOTHINGORIENTATION 0x2012 +#Define SPI_GETFONTSMOOTHINGTYPE 0x200A +#Define SPI_GETFOREGROUNDFLASHCOUNT 0x2004 +#Define SPI_GETFOREGROUNDLOCKTIMEOUT 0x2000 +#Define SPI_GETGRADIENTCAPTIONS 0x1008 +#Define SPI_GETGRIDGRANULARITY 18 +#Define SPI_GETHIGHCONTRAST 66 +#Define SPI_GETHOTTRACKING 0x100E +#Define SPI_GETICONMETRICS 45 +#Define SPI_GETICONTITLELOGFONT 31 +#Define SPI_GETICONTITLEWRAP 25 +#Define SPI_GETKEYBOARDCUES 0x100A +#Define SPI_GETKEYBOARDDELAY 22 +#Define SPI_GETKEYBOARDPREF 68 +#Define SPI_GETKEYBOARDSPEED 10 +#Define SPI_GETLISTBOXSMOOTHSCROLLING 0x1006 +#Define SPI_GETLOWPOWERACTIVE 83 +#Define SPI_GETLOWPOWERTIMEOUT 79 +#Define SPI_GETMENUANIMATION 0x1002 +#Define SPI_GETMENUDROPALIGNMENT 27 +#Define SPI_GETMENUFADE 0x1012 +#Define SPI_GETMENUSHOWDELAY 106 +#Define SPI_GETMENUUNDERLINES 0x100A +#Define SPI_GETMINIMIZEDMETRICS 43 +#Define SPI_GETMOUSE 3 +#Define SPI_GETMOUSECLICKLOCK 0x101E +#Define SPI_GETMOUSECLICKLOCKTIME 0x2008 +#Define SPI_GETMOUSEHOVERHEIGHT 100 +#Define SPI_GETMOUSEHOVERTIME 102 +#Define SPI_GETMOUSEHOVERWIDTH 98 +#Define SPI_GETMOUSEKEYS 54 +#Define SPI_GETMOUSESONAR 0x101C +#Define SPI_GETMOUSESPEED 112 +#Define SPI_GETMOUSETRAILS 94 +#Define SPI_GETMOUSEVANISH 0x1020 +#Define SPI_GETNONCLIENTMETRICS 41 +#Define SPI_GETPOWEROFFACTIVE 84 +#Define SPI_GETPOWEROFFTIMEOUT 80 +#Define SPI_GETSCREENREADER 70 +#Define SPI_GETSCREENSAVEACTIVE 16 +#Define SPI_GETSCREENSAVERRUNNING 114 +#Define SPI_GETSCREENSAVETIMEOUT 14 +#Define SPI_GETSELECTIONFADE 0x1014 +#Define SPI_GETSERIALKEYS 62 +#Define SPI_GETSHOWIMEUI 110 +#Define SPI_GETSHOWSOUNDS 56 +#Define SPI_GETSNAPTODEFBUTTON 95 +#Define SPI_GETSOUNDSENTRY 64 +#Define SPI_GETSTICKYKEYS 58 +#Define SPI_GETTOGGLEKEYS 52 +#Define SPI_GETTOOLTIPANIMATION 0x1016 +#Define SPI_GETTOOLTIPFADE 0x1018 +#Define SPI_GETUIEFFECTS 0x103E +#Define SPI_GETWHEELSCROLLLINES 104 +#Define SPI_GETWINDOWSEXTENSION 92 +#Define SPI_GETWORKAREA 48 +#Define SPI_ICONHORIZONTALSPACING 13 +#Define SPI_ICONVERTICALSPACING 24 +#Define SPI_LANGDRIVER 12 +#Define SPI_SCREENSAVERRUNNING 97 +#Define SPI_SETACCESSTIMEOUT 61 +#Define SPI_SETACTIVEWINDOWTRACKING 0x1001 +#Define SPI_SETACTIVEWNDTRKTIMEOUT 0x2003 +#Define SPI_SETACTIVEWNDTRKZORDER 0x100D +#Define SPI_SETANIMATION 73 +#Define SPI_SETBEEP 2 +#Define SPI_SETBLOCKSENDINPUTRESETS 0x1027 +#Define SPI_SETBORDER 6 +#Define SPI_SETCARETWIDTH 0x2007 +#Define SPI_SETCOMBOBOXANIMATION 0x1005 +#Define SPI_SETCURSORS 87 +#Define SPI_SETCURSORSHADOW 0x101B +#Define SPI_SETDEFAULTINPUTLANG 90 +#Define SPI_SETDESKPATTERN 21 +#Define SPI_SETDESKWALLPAPER 20 +#Define SPI_SETDOUBLECLICKTIME 32 +#Define SPI_SETDOUBLECLKHEIGHT 30 +#Define SPI_SETDOUBLECLKWIDTH 29 +#Define SPI_SETDRAGFULLWINDOWS 37 +#Define SPI_SETDRAGHEIGHT 77 +#Define SPI_SETDRAGWIDTH 76 +#Define SPI_SETDROPSHADOW 0x1025 +#Define SPI_SETFASTTASKSWITCH 36 +#Define SPI_SETFILTERKEYS 51 +#Define SPI_SETFLATMENU 0x1023 +#Define SPI_SETFOCUSBORDERHEIGHT 0x2011 +#Define SPI_SETFOCUSBORDERWIDTH 0x200F +#Define SPI_SETFONTSMOOTHING 75 +#Define SPI_SETFONTSMOOTHINGCONTRAST 0x200D +#Define SPI_SETFONTSMOOTHINGORIENTATION 0x2013 +#Define SPI_SETFONTSMOOTHINGTYPE 0x200B +#Define SPI_SETFOREGROUNDFLASHCOUNT 0x2005 +#Define SPI_SETFOREGROUNDLOCKTIMEOUT 0x2001 +#Define SPI_SETGRADIENTCAPTIONS 0x1009 +#Define SPI_SETGRIDGRANULARITY 19 +#Define SPI_SETHANDHELD 78 +#Define SPI_SETHIGHCONTRAST 67 +#Define SPI_SETHOTTRACKING 0x100F +#Define SPI_SETICONMETRICS 46 +#Define SPI_SETICONS 88 +#Define SPI_SETICONTITLELOGFONT 34 +#Define SPI_SETICONTITLEWRAP 26 +#Define SPI_SETKEYBOARDCUES 0x100B +#Define SPI_SETKEYBOARDDELAY 23 +#Define SPI_SETKEYBOARDPREF 69 +#Define SPI_SETKEYBOARDSPEED 11 +#Define SPI_SETLANGTOGGLE 91 +#Define SPI_SETLISTBOXSMOOTHSCROLLING 0x1007 +#Define SPI_SETLOWPOWERACTIVE 85 +#Define SPI_SETLOWPOWERTIMEOUT 81 +#Define SPI_SETMENUANIMATION 0x1003 +#Define SPI_SETMENUDROPALIGNMENT 28 +#Define SPI_SETMENUFADE 0x1013 +#Define SPI_SETMENUSHOWDELAY 107 +#Define SPI_SETMENUUNDERLINES 0x100B +#Define SPI_SETMINIMIZEDMETRICS 44 +#Define SPI_SETMOUSE 4 +#Define SPI_SETMOUSEBUTTONSWAP 33 +#Define SPI_SETMOUSECLICKLOCK 0x101F +#Define SPI_SETMOUSECLICKLOCKTIME 0x2009 +#Define SPI_SETMOUSEHOVERHEIGHT 101 +#Define SPI_SETMOUSEHOVERTIME 103 +#Define SPI_SETMOUSEHOVERWIDTH 99 +#Define SPI_SETMOUSEKEYS 55 +#Define SPI_SETMOUSESONAR 0x101D +#Define SPI_SETMOUSESPEED 113 +#Define SPI_SETMOUSETRAILS 93 +#Define SPI_SETMOUSEVANISH 0x1021 +#Define SPI_SETNONCLIENTMETRICS 42 +#Define SPI_SETPENWINDOWS 49 +#Define SPI_SETPOWEROFFACTIVE 86 +#Define SPI_SETPOWEROFFTIMEOUT 82 +#Define SPI_SETSCREENREADER 71 +#Define SPI_SETSCREENSAVEACTIVE 17 +#Define SPI_SETSCREENSAVERRUNNING 97 +#Define SPI_SETSCREENSAVETIMEOUT 15 +#Define SPI_SETSELECTIONFADE 0x1015 +#Define SPI_SETSERIALKEYS 63 +#Define SPI_SETSHOWIMEUI 111 +#Define SPI_SETSHOWSOUNDS 57 +#Define SPI_SETSNAPTODEFBUTTON 96 +#Define SPI_SETSOUNDSENTRY 65 +#Define SPI_SETSTICKYKEYS 59 +#Define SPI_SETTOGGLEKEYS 53 +#Define SPI_SETTOOLTIPANIMATION 0x1017 +#Define SPI_SETTOOLTIPFADE 0x1019 +#Define SPI_SETUIEFFECTS 0x103F +#Define SPI_SETWHEELSCROLLLINES 105 +#Define SPI_SETWORKAREA 47 + +#Define SRCCOPY 0xcc0020 + +#Define SS_BITMAP 0xE +#Define SS_BLACKFRAME 0x7 +#Define SS_BLACKRECT 0x4 +#Define SS_CENTER 0x1 +#Define SS_CENTERIMAGE 0x200 +#Define SS_ELLIPSISMASK 0xC000 +#Define SS_ENDELLIPSIS 0x4000 +#Define SS_ENHMETAFILE 0xF +#Define SS_ETCHEDFRAME 0x12 +#Define SS_ETCHEDHORZ 0x10 +#Define SS_ETCHEDVERT 0x11 +#Define SS_GRAYFRAME 0x8 +#Define SS_GRAYRECT 0x5 +#Define SS_ICON 0x3 +#Define SS_LEFT 0x0 +#Define SS_LEFTNOWORDWRAP 0xC +#Define SS_LEVEL_VERSION 0 +#Define SS_MAJOR_VERSION 7 +#Define SS_MINIMUM_VERSION "7.00.00.0000" +#Define SS_MINOR_VERSION 0 +#Define SS_NOPREFIX 0x80 +#Define SS_NOTIFY 0x100 +#Define SS_OWNERDRAW 0xD +#Define SS_PATHELLIPSIS 0x8000 +#Define SS_REALSIZECONTROL 0x40 +#Define SS_REALSIZEIMAGE 0x800 +#Define SS_RIGHT 0x2 +#Define SS_RIGHTJUST 0x400 +#Define SS_SIMPLE 0xB +#Define SS_SUNKEN 0x1000 +#Define SS_TYPEMASK 0x1F +#Define SS_USERITEM 0xA +#Define SS_WHITEFRAME 0x9 +#Define SS_WHITERECT 0x6 +#Define SS_WORDELLIPSIS 0xC000 +#Define STANDARD_RIGHTS_ALL 0x1F0000 +#Define STANDARD_RIGHTS_EXECUTE 0x20000 +#Define STANDARD_RIGHTS_READ 0x20000 +#Define STANDARD_RIGHTS_REQUIRED 0xF0000 +#Define STANDARD_RIGHTS_WRITE 0x20000 +#Define STATUSCLASSNAMEA "msctls_statusbar32" +#Define STATUSCLASSNAMEW "msctls_statusbar32" +#Define SUBLANG_ARABIC_ALGERIA 0x5 +#Define SUBLANG_ARABIC_BAHRAIN 0xf +#Define SUBLANG_ARABIC_EGYPT 0x3 +#Define SUBLANG_ARABIC_IRAQ 0x2 +#Define SUBLANG_ARABIC_JORDAN 0xb +#Define SUBLANG_ARABIC_KUWAIT 0xd +#Define SUBLANG_ARABIC_LEBANON 0xc +#Define SUBLANG_ARABIC_LIBYA 0x4 +#Define SUBLANG_ARABIC_MOROCCO 0x6 +#Define SUBLANG_ARABIC_OMAN 0x8 +#Define SUBLANG_ARABIC_QATAR 0x10 +#Define SUBLANG_ARABIC_SAUDI_ARABIA 0x1 +#Define SUBLANG_ARABIC_SYRIA 0xa +#Define SUBLANG_ARABIC_TUNISIA 0x7 +#Define SUBLANG_ARABIC_UAE 0xe +#Define SUBLANG_ARABIC_YEMEN 0x9 +#Define SUBLANG_AZERI_CYRILLIC 0x2 +#Define SUBLANG_AZERI_LATIN 0x1 +#Define SUBLANG_CHINESE_HONGKONG 0x3 +#Define SUBLANG_CHINESE_MACAU 0x5 +#Define SUBLANG_CHINESE_SIMPLIFIED 0x2 +#Define SUBLANG_CHINESE_SINGAPORE 0x4 +#Define SUBLANG_CHINESE_TRADITIONAL 0x1 +#Define SUBLANG_CROATIAN_BOSNIA_HERZEGOVINA_LATIN 0x04 +#Define SUBLANG_CROATIAN_CROATIA 0x01 +#Define SUBLANG_DEFAULT 0x1 +#Define SUBLANG_DUTCH 0x1 +#Define SUBLANG_DUTCH_BELGIAN 0x2 +#Define SUBLANG_ENGLISH_AUS 0x3 +#Define SUBLANG_ENGLISH_BELIZE 0xa +#Define SUBLANG_ENGLISH_CAN 0x4 +#Define SUBLANG_ENGLISH_CARIBBEAN 0x9 +#Define SUBLANG_ENGLISH_EIRE 0x6 +#Define SUBLANG_ENGLISH_JAMAICA 0x8 +#Define SUBLANG_ENGLISH_NZ 0x5 +#Define SUBLANG_ENGLISH_PHILIPPINES 0xd +#Define SUBLANG_ENGLISH_SOUTH_AFRICA 0x7 +#Define SUBLANG_ENGLISH_TRINIDAD 0xb +#Define SUBLANG_ENGLISH_UK 0x2 +#Define SUBLANG_ENGLISH_US 0x1 +#Define SUBLANG_ENGLISH_ZIMBABWE 0xc +#Define SUBLANG_FRENCH 0x1 +#Define SUBLANG_FRENCH_BELGIAN 0x2 +#Define SUBLANG_FRENCH_CANADIAN 0x3 +#Define SUBLANG_FRENCH_LUXEMBOURG 0x5 +#Define SUBLANG_FRENCH_MONACO 0x6 +#Define SUBLANG_FRENCH_SWISS 0x4 +#Define SUBLANG_GERMAN 0x1 +#Define SUBLANG_GERMAN_AUSTRIAN 0x3 +#Define SUBLANG_GERMAN_LIECHTENSTEIN 0x5 +#Define SUBLANG_GERMAN_LUXEMBOURG 0x4 +#Define SUBLANG_GERMAN_SWISS 0x2 +#Define SUBLANG_ITALIAN 0x1 +#Define SUBLANG_ITALIAN_SWISS 0x2 +#Define SUBLANG_KASHMIRI_INDIA 0x2 +#Define SUBLANG_KOREAN 0x1 +#Define SUBLANG_LITHUANIAN 0x1 +#Define SUBLANG_MALAY_BRUNEI_DARUSSALAM 0x2 +#Define SUBLANG_MALAY_MALAYSIA 0x1 +#Define SUBLANG_NEPALI_INDIA 0x2 +#Define SUBLANG_NEUTRAL 0x0 +#Define SUBLANG_NORWEGIAN_BOKMAL 0x1 +#Define SUBLANG_NORWEGIAN_NYNORSK 0x2 +#Define SUBLANG_PORTUGUESE 0x2 +#Define SUBLANG_PORTUGUESE_BRAZILIAN 0x1 +#Define SUBLANG_PORTUGUESE_PORTUGAL 0x2 +#Define SUBLANG_SERBIAN_CYRILLIC 0x3 +#Define SUBLANG_SERBIAN_LATIN 0x2 +#Define SUBLANG_SPANISH 0x1 +#Define SUBLANG_SPANISH_ARGENTINA 0xb +#Define SUBLANG_SPANISH_BOLIVIA 0x10 +#Define SUBLANG_SPANISH_CHILE 0xd +#Define SUBLANG_SPANISH_COLOMBIA 0x9 +#Define SUBLANG_SPANISH_COSTA_RICA 0x5 +#Define SUBLANG_SPANISH_DOMINICAN_REPUBLIC 0x7 +#Define SUBLANG_SPANISH_ECUADOR 0xc +#Define SUBLANG_SPANISH_EL_SALVADOR 0x11 +#Define SUBLANG_SPANISH_GUATEMALA 0x4 +#Define SUBLANG_SPANISH_HONDURAS 0x12 +#Define SUBLANG_SPANISH_MEXICAN 0x2 +#Define SUBLANG_SPANISH_MODERN 0x3 +#Define SUBLANG_SPANISH_NICARAGUA 0x13 +#Define SUBLANG_SPANISH_PANAMA 0x6 +#Define SUBLANG_SPANISH_PARAGUAY 0xf +#Define SUBLANG_SPANISH_PERU 0xa +#Define SUBLANG_SPANISH_PUERTO_RICO 0x14 +#Define SUBLANG_SPANISH_URUGUAY 0xe +#Define SUBLANG_SPANISH_VENEZUELA 0x8 +#Define SUBLANG_SWEDISH 0x1 +#Define SUBLANG_SWEDISH_FINLAND 0x2 +#Define SUBLANG_SYS_DEFAULT 0x2 +#Define SUBLANG_URDU_INDIA 0x2 +#Define SUBLANG_URDU_PAKISTAN 0x1 +#Define SUBLANG_UZBEK_CYRILLIC 0x2 +#Define SUBLANG_UZBEK_LATIN 0x1 +#Define SW_AUTOPROF_LOAD_MASK 0x1 +#Define SW_AUTOPROF_SAVE_MASK 0x2 +#Define SW_ERASE 0x4 +#Define SW_FORCEMINIMIZE 11 +#Define SW_HIDE 0 +#Define SW_INVALIDATE 0x2 +#Define SW_MAX 10 +#Define SW_MAXIMIZE 3 +#Define SW_MINIMIZE 6 +#Define SW_NORMAL 1 +#Define SW_OTHERUNZOOM 4 +#Define SW_OTHERZOOM 2 +#Define SW_PARENTCLOSING 1 +#Define SW_PARENTOPENING 3 +#Define SW_RESTORE 9 +#Define SW_SCROLLCHILDREN 0x1 +#Define SW_SHOW 5 +#Define SW_SHOWDEFAULT 10 +#Define SW_SHOWMAXIMIZED 3 +#Define SW_SHOWMINIMIZED 2 +#Define SW_SHOWMINNOACTIVE 7 +#Define SW_SHOWNA 8 +#Define SW_SHOWNOACTIVATE 4 +#Define SW_SHOWNORMAL 1 +#Define SW_SMOOTHSCROLL 0x10 +#Define SWP_ASYNCWINDOWPOS 0x4000 +#Define SWP_DEFERERASE 0x2000 +#Define SWP_DRAWFRAME 0x20 && SWP_FRAMECHANGED +#Define SWP_FRAMECHANGED 0x20 +#Define SWP_HIDEWINDOW 0x80 +#Define SWP_NOACTIVATE 0x10 +#Define SWP_NOCOPYBITS 0x100 +#Define SWP_NOMOVE 0x2 +#Define SWP_NOOWNERZORDER 0x200 +#Define SWP_NOREDRAW 0x8 +#Define SWP_NOREPOSITION 0x200 && SWP_NOOWNERZORDER +#Define SWP_NOSENDCHANGING 0x400 +#Define SWP_NOSIZE 0x1 +#Define SWP_NOZORDER 0x4 +#Define SWP_SHOWWINDOW 0x40 +#Define SYMBOL_CHARSET 2 +#Define SYNCHRONIZE 0x100000 + +#Define TB_BOTTOM 7 +#Define TB_ENDTRACK 8 +#Define TB_LINEDOWN 1 +#Define TB_LINEUP 0 +#Define TB_PAGEDOWN 3 +#Define TB_PAGEUP 2 +#Define TB_THUMBPOSITION 4 +#Define TB_THUMBTRACK 5 +#Define TB_TOP 6 + +#Define TBCD_TICS 0x0001 +#Define TBCD_THUMB 0x0002 +#Define TBCD_CHANNEL 0x0003 + +#Define TBM_CLEARSEL (0x400 + 19) +#Define TBM_CLEARTICS (0x400 + 9) +#Define TBM_GETBUDDY (0x400 + 33) +#Define TBM_GETCHANNELRECT (0x400 + 26) +#Define TBM_GETLINESIZE (0x400 + 24) +#Define TBM_GETNUMTICS (0x400 + 16) +#Define TBM_GETPAGESIZE (0x400 + 22) +#Define TBM_GETPOS (0x400) +#Define TBM_GETPTICS (0x400 + 14) +#Define TBM_GETRANGEMAX (0x400 + 2) +#Define TBM_GETRANGEMIN (0x400 + 1) +#Define TBM_GETSELEND (0x400 + 18) +#Define TBM_GETSELSTART (0x400 + 17) +#Define TBM_GETTHUMBLENGTH (0x400 + 28) +#Define TBM_GETTHUMBRECT (0x400 + 25) +#Define TBM_GETTIC (0x400 + 3) +#Define TBM_GETTICPOS (0x400 + 15) +#Define TBM_GETTOOLTIPS (0x400 + 30) +#Define TBM_GETUNICODEFORMAT 0x2006 +#Define TBM_SETBUDDY (0x400 + 32) +#Define TBM_SETLINESIZE (0x400 + 23) +#Define TBM_SETPAGESIZE (0x400 + 21) +#Define TBM_SETPOS (0x400 + 5) +#Define TBM_SETRANGE (0x400 + 6) +#Define TBM_SETRANGEMAX (0x400 + 8) +#Define TBM_SETRANGEMIN (0x400 + 7) +#Define TBM_SETSEL (0x400 + 10) +#Define TBM_SETSELEND (0x400 + 12) +#Define TBM_SETSELSTART (0x400 + 11) +#Define TBM_SETTHUMBLENGTH (0x400 + 27) +#Define TBM_SETTIC (0x400 + 4) +#Define TBM_SETTICFREQ (0x400 + 20) +#Define TBM_SETTIPSIDE (0x400 + 31) +#Define TBM_SETTOOLTIPS (0x400 + 29) +#Define TBM_SETUNICODEFORMAT 0x2005 + +#Define TBS_AUTOTICKS 0x0001 +#Define TBS_BOTH 0x0008 +#Define TBS_BOTTOM 0x0000 +#Define TBS_DOWNISLEFT 0x0400 && Down=Left and Up=Right (default is Down=Right and Up=Left) +#Define TBS_ENABLESELRANGE 0x0020 +#Define TBS_FIXEDLENGTH 0x0040 +#Define TBS_HORZ 0x0000 +#Define TBS_LEFT 0x0004 +#Define TBS_NOTHUMB 0x0080 +#Define TBS_NOTICKS 0x0010 +#Define TBS_NOTIFYBEFOREMOVE 0x0800 && Trackbar should notify parent before repositioning the slider due to user action (enables snapping) +#Define TBS_REVERSED 0x0200 && Accessibility hint: the smaller number (usually the min value) means "high" and the larger number (usually the max value) means "low" +#Define TBS_RIGHT 0x0000 +#Define TBS_TOOLTIPS 0x0100 +#Define TBS_TOP 0x0004 +#Define TBS_TRANSPARENTBKGND 0x1000 && Background is painted by the parent via WM_PRINTCLIENT +#Define TBS_VERT 0x0002 + +#Define TBTS_TOP 0 +#Define TBTS_LEFT 1 +#Define TBTS_BOTTOM 2 +#Define TBTS_RIGHT 3 + +#Define TCIF_IMAGE 0x2 +#Define TCIF_PARAM 0x8 +#Define TCIF_RTLREADING 0x4 +#Define TCIF_STATE 0x10 +#Define TCIF_TEXT 0x1 +#Define TCIS_BUTTONPRESSED 0x1 +#Define TCIS_HIGHLIGHTED 0x2 +#Define TCM_ADJUSTRECT 0x13290 +#Define TCM_DELETEALLITEMS 0x1309 +#Define TCM_DELETEITEM 0x1308 +#Define TCM_DESELECTALL 0x1332 +#Define TCM_FIRST 0x1300 +#Define TCM_GETCURFOCUS 0x132f +#Define TCM_GETCURSEL 0x130b +#Define TCM_GETEXTENDEDSTYLE 0x1335 +#Define TCM_GETIMAGELIST 0x1302 +#Define TCM_GETITEMA 0x1305 +#Define TCM_GETITEMCOUNT 0x1304 +#Define TCM_GETITEMRECT 0x130a +#Define TCM_GETITEMW 0x133c +#Define TCM_GETROWCOUNT 0x132c +#Define TCM_GETTOOLTIPS 0x132d +#Define TCM_GETUNICODEFORMAT 0x2006 +#Define TCM_HIGHLIGHTITEM 0x1333 +#Define TCM_HITTEST 0x130d +#Define TCM_INSERTITEMA 0x1307 +#Define TCM_INSERTITEMW 0x133e +#Define TCM_REMOVEIMAGE 0x132a +#Define TCM_SETCURFOCUS 0x1330 +#Define TCM_SETCURSEL 0x130c +#Define TCM_SETEXTENDEDSTYLE 0x1334 +#Define TCM_SETIMAGELIST 0x1303 +#Define TCM_SETITEMA 0x1306 +#Define TCM_SETITEMEXTRA 0x130e +#Define TCM_SETITEMSIZE 0x1329 +#Define TCM_SETITEMW 0x133d +#Define TCM_SETMINTABWIDTH 0x1331 +#Define TCM_SETPADDING 0x132b +#Define TCM_SETTOOLTIPS 0x132e +#Define TCM_SETUNICODEFORMAT 0x2005 +#Define TCN_FIRST -550 +#Define TCN_FOCUSCHANGE -554 +#Define TCN_GETOBJECT -553 +#Define TCN_KEYDOWN -550 +#Define TCN_LAST -580 +#Define TCN_SELCHANGE -551 +#Define TCN_SELCHANGING -552 +#Define TCS_BOTTOM 0x2 +#Define TCS_BUTTONS 0x100 +#Define TCS_EX_FLATSEPARATORS 0x1 +#Define TCS_EX_REGISTERDROP 0x2 +#Define TCS_FIXEDWIDTH 0x400 +#Define TCS_FLATBUTTONS 0x8 +#Define TCS_FOCUSNEVER 0x8000 +#Define TCS_FOCUSONBUTTONDOWN 0x1000 +#Define TCS_FORCEICONLEFT 0x10 +#Define TCS_FORCELABELLEFT 0x20 +#Define TCS_HOTTRACK 0x40 +#Define TCS_MULTILINE 0x200 +#Define TCS_MULTISELECT 0x4 +#Define TCS_OWNERDRAWFIXED 0x2000 +#Define TCS_RAGGEDRIGHT 0x800 +#Define TCS_RIGHT 0x2 +#Define TCS_RIGHTJUSTIFY 0x0 +#Define TCS_SCROLLOPPOSITE 0x1 +#Define TCS_SINGLELINE 0x0 +#Define TCS_TABS 0x0 +#Define TCS_TOOLTIPS 0x4000 +#Define TCS_VERTICAL 0x80 +#Define THAI_CHARSET 222 +#Define TIME_BYTES 0x4 +#Define TIME_CALLBACK_EVENT_PULSE 0x20 +#Define TIME_CALLBACK_EVENT_SET 0x10 +#Define TIME_CALLBACK_FUNCTION 0x0 +#Define TIME_EXCEEDED 11 +#Define TIME_FORCE24HOURFORMAT 0x8 +#Define TIME_MIDI 0x10 +#Define TIME_MS 0x1 +#Define TIME_NOMINUTESORSECONDS 0x1 +#Define TIME_NOSECONDS 0x2 +#Define TIME_NOTIMEMARKER 0x4 +#Define TIME_ONESHOT 0 +#Define TIME_PERIODIC 1 +#Define TIME_SAMPLES 0x2 +#Define TIME_SMPTE 0x8 +#Define TIME_STAMP_CAPABLE 0x20 +#Define TIME_TICKS 0x20 +#Define TIME_ZONE_ID_DAYLIGHT 2 +#Define TIME_ZONE_ID_INVALID 0xffffffff +#Define TIME_ZONE_ID_STANDARD 1 +#Define TIME_ZONE_ID_UNKNOWN 0 +#Define TMT_ACCENTCOLORHINT 3823 +#Define TMT_ACTIVEBORDER 1611 +#Define TMT_ACTIVECAPTION 1603 +#Define TMT_ALIAS 1404 +#Define TMT_ALPHALEVEL 2402 +#Define TMT_ALPHATHRESHOLD 2415 +#Define TMT_ALWAYSSHOWSIZINGBAR 2208 +#Define TMT_ANIMATIONBUTTONRECT 5005 +#Define TMT_ANIMATIONDELAY 2428 +#Define TMT_ANIMATIONDURATION 5006 +#Define TMT_APPWORKSPACE 1613 +#Define TMT_ATLASIMAGE 8000 +#Define TMT_ATLASINPUTIMAGE 8001 +#Define TMT_ATLASRECT 8002 +#Define TMT_AUTHOR 604 +#Define TMT_AUTOSIZE 2202 +#Define TMT_BACKGROUND 1602 +#Define TMT_BGFILL 2205 +#Define TMT_BGTYPE 4001 +#Define TMT_BITMAPREF 215 +#Define TMT_BLENDCOLOR 5003 +#Define TMT_BODYFONT 809 +#Define TMT_BODYTEXTCOLOR 3827 +#Define TMT_BOOL 203 +#Define TMT_BORDERCOLOR 3801 +#Define TMT_BORDERCOLORHINT 3822 +#Define TMT_BORDERONLY 2203 +#Define TMT_BORDERSIZE 2403 +#Define TMT_BORDERTYPE 4002 +#Define TMT_BTNFACE 1616 +#Define TMT_BTNHIGHLIGHT 1621 +#Define TMT_BTNSHADOW 1617 +#Define TMT_BTNTEXT 1619 +#Define TMT_BUTTONALTERNATEFACE 1626 +#Define TMT_CAPTIONBARHEIGHT 1205 +#Define TMT_CAPTIONBARWIDTH 1204 +#Define TMT_CAPTIONFONT 801 +#Define TMT_CAPTIONMARGINS 3603 +#Define TMT_CAPTIONTEXT 1610 +#Define TMT_CHARSET 403 +#Define TMT_CLASSICVALUE 3202 +#Define TMT_COLOR 204 +#Define TMT_COLORIZATIONCOLOR 2431 +#Define TMT_COLORIZATIONOPACITY 2432 +#Define TMT_COLORSCHEMES 401 +#Define TMT_COMPANY 603 +#Define TMT_COMPOSITED 2204 +#Define TMT_COMPOSITEDOPAQUE 2219 +#Define TMT_CONTENTALIGNMENT 4006 +#Define TMT_CONTENTMARGINS 3602 +#Define TMT_COPYRIGHT 605 +#Define TMT_CSSNAME 1401 +#Define TMT_CUSTOMSPLITRECT 5004 +#Define TMT_DEFAULTPANESIZE 5002 +#Define TMT_DESCRIPTION 608 +#Define TMT_DIBDATA 2 +#Define TMT_DISKSTREAM 213 +#Define TMT_DISPLAYNAME 601 +#Define TMT_DKSHADOW3D 1622 +#Define TMT_DRAWBORDERS 2214 +#Define TMT_EDGEDKSHADOWCOLOR 3807 +#Define TMT_EDGEFILLCOLOR 3808 +#Define TMT_EDGEHIGHLIGHTCOLOR 3805 +#Define TMT_EDGELIGHTCOLOR 3804 +#Define TMT_EDGESHADOWCOLOR 3806 +#Define TMT_ENUM 200 +#Define TMT_FILENAME 206 +#Define TMT_FILLCOLOR 3802 +#Define TMT_FILLCOLORHINT 3821 +#Define TMT_FILLTYPE 4003 +#Define TMT_FIRST_RCSTRING_NAME 601 && TMT_DISPLAYNAME +#Define TMT_FIRSTBOOL 1001 && TMT_FLATMENUS +#Define TMT_FIRSTCOLOR 1601 && TMT_SCROLLBAR +#Define TMT_FIRSTFONT 801 && TMT_CAPTIONFONT +#Define TMT_FIRSTINT 1301 && TMT_MINCOLORDEPTH +#Define TMT_FIRSTSIZE 1201 && TMT_SIZINGBORDERWIDTH +#Define TMT_FIRSTSTRING 1401 && TMT_CSSNAME +#Define TMT_FLATMENUS 1001 +#Define TMT_FONT 210 +#Define TMT_FRAMESPERSECOND 2426 +#Define TMT_FROMCOLOR1 2001 +#Define TMT_FROMCOLOR2 2002 +#Define TMT_FROMCOLOR3 2003 +#Define TMT_FROMCOLOR4 2004 +#Define TMT_FROMCOLOR5 2005 +#Define TMT_FROMHUE1 1801 +#Define TMT_FROMHUE2 1802 +#Define TMT_FROMHUE3 1803 +#Define TMT_FROMHUE4 1804 +#Define TMT_FROMHUE5 1805 +#Define TMT_GLOWCOLOR 3816 +#Define TMT_GLOWINTENSITY 2429 +#Define TMT_GLYPHDIBDATA 8 +#Define TMT_GLYPHFONT 2601 +#Define TMT_GLYPHFONTSIZINGTYPE 4014 +#Define TMT_GLYPHIMAGEFILE 3008 +#Define TMT_GLYPHINDEX 2418 +#Define TMT_GLYPHONLY 2207 +#Define TMT_GLYPHTEXTCOLOR 3819 +#Define TMT_GLYPHTRANSPARENT 2206 +#Define TMT_GLYPHTRANSPARENTCOLOR 3820 +#Define TMT_GLYPHTYPE 4012 +#Define TMT_GRADIENTACTIVECAPTION 1628 +#Define TMT_GRADIENTCOLOR1 3810 +#Define TMT_GRADIENTCOLOR2 3811 +#Define TMT_GRADIENTCOLOR3 3812 +#Define TMT_GRADIENTCOLOR4 3813 +#Define TMT_GRADIENTCOLOR5 3814 +#Define TMT_GRADIENTINACTIVECAPTION 1629 +#Define TMT_GRADIENTRATIO1 2406 +#Define TMT_GRADIENTRATIO2 2407 +#Define TMT_GRADIENTRATIO3 2408 +#Define TMT_GRADIENTRATIO4 2409 +#Define TMT_GRADIENTRATIO5 2410 +#Define TMT_GRAYTEXT 1618 +#Define TMT_HALIGN 4005 +#Define TMT_HBITMAP 212 +#Define TMT_HEADING1FONT 807 +#Define TMT_HEADING1TEXTCOLOR 3825 +#Define TMT_HEADING2FONT 808 +#Define TMT_HEADING2TEXTCOLOR 3826 +#Define TMT_HEIGHT 2417 +#Define TMT_HIGHLIGHT 1614 +#Define TMT_HIGHLIGHTTEXT 1615 +#Define TMT_HOTTRACKING 1627 +#Define TMT_ICONEFFECT 4009 +#Define TMT_ICONTITLEFONT 806 +#Define TMT_IMAGECOUNT 2401 +#Define TMT_IMAGEFILE 3001 +#Define TMT_IMAGEFILE1 3002 +#Define TMT_IMAGEFILE2 3003 +#Define TMT_IMAGEFILE3 3004 +#Define TMT_IMAGEFILE4 3005 +#Define TMT_IMAGEFILE5 3006 +#Define TMT_IMAGELAYOUT 4011 +#Define TMT_IMAGESELECTTYPE 4013 +#Define TMT_INACTIVEBORDER 1612 +#Define TMT_INACTIVECAPTION 1604 +#Define TMT_INACTIVECAPTIONTEXT 1620 +#Define TMT_INFOBK 1625 +#Define TMT_INFOTEXT 1624 +#Define TMT_INT 202 +#Define TMT_INTEGRALSIZING 2211 +#Define TMT_INTLIST 211 +#Define TMT_LAST_RCSTRING_NAME 608 && TMT_DESCRIPTION +#Define TMT_LASTBOOL 1001 && TMT_FLATMENUS +#Define TMT_LASTCOLOR 1631 && TMT_MENUBAR +#Define TMT_LASTFONT 809 && TMT_BODYFONT +#Define TMT_LASTINT 1301 && TMT_MINCOLORDEPTH +#Define TMT_LASTSIZE 1210 && TMT_PADDEDBORDERWIDTH +#Define TMT_LASTSTRING 1404 && TMT_ALIAS +#Define TMT_LASTUPDATED 1403 +#Define TMT_LIGHT3D 1623 +#Define TMT_LOCALIZEDMIRRORIMAGE 2220 +#Define TMT_MARGINS 205 +#Define TMT_MENU 1605 +#Define TMT_MENUBAR 1631 +#Define TMT_MENUBARHEIGHT 1209 +#Define TMT_MENUBARWIDTH 1208 +#Define TMT_MENUFONT 803 +#Define TMT_MENUHILIGHT 1630 +#Define TMT_MENUTEXT 1608 +#Define TMT_MINCOLORDEPTH 1301 +#Define TMT_MINDPI1 2420 +#Define TMT_MINDPI2 2421 +#Define TMT_MINDPI3 2422 +#Define TMT_MINDPI4 2423 +#Define TMT_MINDPI5 2424 +#Define TMT_MINSIZE 3403 +#Define TMT_MINSIZE1 3404 +#Define TMT_MINSIZE2 3405 +#Define TMT_MINSIZE3 3406 +#Define TMT_MINSIZE4 3407 +#Define TMT_MINSIZE5 3408 +#Define TMT_MIRRORIMAGE 2209 +#Define TMT_MSGBOXFONT 805 +#Define TMT_NAME 600 +#Define TMT_NOETCHEDEFFECT 2215 +#Define TMT_NORMALSIZE 3409 +#Define TMT_OFFSET 3401 +#Define TMT_OFFSETTYPE 4008 +#Define TMT_OPACITY 2430 +#Define TMT_PADDEDBORDERWIDTH 1210 +#Define TMT_PIXELSPERFRAME 2427 +#Define TMT_POSITION 208 +#Define TMT_PROGRESSCHUNKSIZE 2411 +#Define TMT_PROGRESSSPACESIZE 2412 +#Define TMT_RECT 209 +#Define TMT_RESERVEDHIGH 7999 +#Define TMT_RESERVEDLOW 0 +#Define TMT_ROUNDCORNERHEIGHT 2405 +#Define TMT_ROUNDCORNERWIDTH 2404 +#Define TMT_SATURATION 2413 +#Define TMT_SCALEDBACKGROUND 7001 +#Define TMT_SCROLLBAR 1601 +#Define TMT_SCROLLBARHEIGHT 1203 +#Define TMT_SCROLLBARWIDTH 1202 +#Define TMT_SHADOWCOLOR 3815 +#Define TMT_SIZE 207 +#Define TMT_SIZES 402 +#Define TMT_SIZINGBORDERWIDTH 1201 +#Define TMT_SIZINGMARGINS 3601 +#Define TMT_SIZINGTYPE 4004 +#Define TMT_SMALLCAPTIONFONT 802 +#Define TMT_SMCAPTIONBARHEIGHT 1207 +#Define TMT_SMCAPTIONBARWIDTH 1206 +#Define TMT_SOURCEGROW 2212 +#Define TMT_SOURCESHRINK 2213 +#Define TMT_STATUSFONT 804 +#Define TMT_STREAM 214 +#Define TMT_STRING 201 +#Define TMT_TEXT 3201 +#Define TMT_TEXTAPPLYOVERLAY 2216 +#Define TMT_TEXTBORDERCOLOR 3817 +#Define TMT_TEXTBORDERSIZE 2414 +#Define TMT_TEXTCOLOR 3803 +#Define TMT_TEXTCOLORHINT 3824 +#Define TMT_TEXTGLOW 2217 +#Define TMT_TEXTGLOWSIZE 2425 +#Define TMT_TEXTITALIC 2218 +#Define TMT_TEXTSHADOWCOLOR 3818 +#Define TMT_TEXTSHADOWOFFSET 3402 +#Define TMT_TEXTSHADOWTYPE 4010 +#Define TMT_TOCOLOR1 2006 +#Define TMT_TOCOLOR2 2007 +#Define TMT_TOCOLOR3 2008 +#Define TMT_TOCOLOR4 2009 +#Define TMT_TOCOLOR5 2010 +#Define TMT_TOHUE1 1806 +#Define TMT_TOHUE2 1807 +#Define TMT_TOHUE3 1808 +#Define TMT_TOHUE4 1809 +#Define TMT_TOHUE5 1810 +#Define TMT_TOOLTIP 602 +#Define TMT_TRANSITIONDURATIONS 6000 +#Define TMT_TRANSPARENT 2201 +#Define TMT_TRANSPARENTCOLOR 3809 +#Define TMT_TRUESIZESCALINGTYPE 4015 +#Define TMT_TRUESIZESTRETCHMARK 2419 +#Define TMT_UNIFORMSIZING 2210 +#Define TMT_URL 606 +#Define TMT_USERPICTURE 5001 +#Define TMT_VALIGN 4007 +#Define TMT_VERSION 607 +#Define TMT_WIDTH 2416 +#Define TMT_WINDOW 1606 +#Define TMT_WINDOWFRAME 1607 +#Define TMT_WINDOWTEXT 1609 +#Define TMT_XMLNAME 1402 +#Define TOOLTIPS_CLASSA "tooltips_class32" +#Define TOOLTIPS_CLASSW "tooltips_class32" +#Define TPM_BOTTOMALIGN 0x20 +#Define TPM_CENTERALIGN 0x4 +#Define TPM_HORIZONTAL 0x0 +#Define TPM_HORNEGANIMATION 0x800 +#Define TPM_HORPOSANIMATION 0x400 +#Define TPM_LAYOUTRTL 0x8000 +#Define TPM_LEFTALIGN 0x0 +#Define TPM_LEFTBUTTON 0x0 +#Define TPM_NOANIMATION 0x4000 +#Define TPM_NONOTIFY 0x80 +#Define TPM_RECURSE 0x1 +#Define TPM_RETURNCMD 0x100 +#Define TPM_RIGHTALIGN 0x8 +#Define TPM_RIGHTBUTTON 0x2 +#Define TPM_TOPALIGN 0x0 +#Define TPM_VCENTERALIGN 0x10 +#Define TPM_VERNEGANIMATION 0x2000 +#Define TPM_VERPOSANIMATION 0x1000 +#Define TPM_VERTICAL 0x40 +#Define TRACKBAR_CLASS "msctls_trackbar" +#Define TRACKBAR_CLASSA "msctls_trackbar32" +#Define TRACKBAR_CLASSW "msctls_trackbar32" +#Define TRUNCATE_EXISTING 5 +#Define TS_DRAW 2 +#Define TS_MIN 0 +#Define TS_TRUE 1 +#Define TTDT_AUTOMATIC 0 +#Define TTDT_AUTOPOP 2 +#Define TTDT_INITIAL 3 +#Define TTDT_RESHOW 1 +#Define TTF_ABSOLUTE 0x80 +#Define TTF_BITMAP 0x10000 && VISTA +#Define TTF_CENTERTIP 0x2 +#Define TTF_DI_SETITEM 0x8000 +#Define TTF_IDISHWND 0x1 +#Define TTF_PARSELINKS 0x1000 +#Define TTF_RTLREADING 0x4 +#Define TTF_SUBCLASS 0x10 +#Define TTF_TRACK 0x20 +#Define TTF_TRANSPARENT 0x100 +#Define TTI_ERROR 3 +#Define TTI_ERROR_LARGE 6 && VISTA +#Define TTI_INFO 1 +#Define TTI_INFO_LARGE 4 && VISTA +#Define TTI_NONE 0 +#Define TTI_WARNING 2 +#Define TTI_WARNING_LARGE 5 && VISTA +#Define TTM_ACTIVATE 0x401 +#Define TTM_ADDTOOLA 0x404 +#Define TTM_ADDTOOLW 0x432 +#Define TTM_ADJUSTRECT 0x41f +#Define TTM_DELTOOLA 0x405 +#Define TTM_DELTOOLW 0x433 +#Define TTM_ENUMTOOLSA 0x40e +#Define TTM_ENUMTOOLSW 0x43a +#Define TTM_GETBUBBLESIZE 0x41e +#Define TTM_GETCURRENTTOOLA 0x40f +#Define TTM_GETCURRENTTOOLW 0x43b +#Define TTM_GETDELAYTIME 0x415 +#Define TTM_GETMARGIN 0x41b +#Define TTM_GETMAXTIPWIDTH 0x419 +#Define TTM_GETTEXTA 0x40b +#Define TTM_GETTEXTW 0x438 +#Define TTM_GETTIPBKCOLOR 0x416 +#Define TTM_GETTIPTEXTCOLOR 0x417 +#Define TTM_GETTOOLCOUNT 0x40d +#Define TTM_GETTOOLINFOA 0x408 +#Define TTM_GETTOOLINFOW 0x435 +#Define TTM_HITTESTA 0x40a +#Define TTM_HITTESTW 0x437 +#Define TTM_NEWTOOLRECTA 0x406 +#Define TTM_NEWTOOLRECTW 0x434 +#Define TTM_POP 0x41c +#Define TTM_POPUP 0x422 +#Define TTM_RELAYEVENT 0x407 +#Define TTM_SETDELAYTIME 0x403 +#Define TTM_SETMARGIN 0x41a +#Define TTM_SETMAXTIPWIDTH 0x418 +#Define TTM_SETTIPBKCOLOR 0x413 +#Define TTM_SETTIPTEXTCOLOR 0x414 +#Define TTM_SETTITLEA 0x420 +#Define TTM_SETTITLEW 0x421 +#Define TTM_SETTOOLINFOA 0x409 +#Define TTM_SETTOOLINFOW 0x436 +#Define TTM_SETWINDOWTHEME 0x200B +#Define TTM_TRACKACTIVATE 0x411 +#Define TTM_TRACKPOSITION 0x412 +#Define TTM_UPDATE 0x41d +#Define TTM_UPDATETIPTEXTA 0x40c +#Define TTM_UPDATETIPTEXTW 0x439 +#Define TTM_WINDOWFROMPOINT 0x410 +#Define TTN_FIRST -520 +#Define TTN_GETDISPINFO -520 +#Define TTN_GETDISPINFOA -520 +#Define TTN_GETDISPINFOW -530 +#Define TTN_LAST -549 +#Define TTN_LINKCLICK -523 +#Define TTN_NEEDTEXT -520 +#Define TTN_NEEDTEXTA -520 +#Define TTN_NEEDTEXTW -530 +#Define TTN_POP -522 +#Define TTN_SHOW -521 +#Define TTS_ALWAYSTIP 0x1 +#Define TTS_BALLOON 0x40 +#Define TTS_CLOSE 0x80 +#Define TTS_NOANIMATE 0x10 +#Define TTS_NOFADE 0x20 +#Define TTS_NOPREFIX 0x2 +#Define TTS_USEVISUALSTYLE 0x100 && VISTA +#Define TURKISH_CHARSET 162 + +#Define UDM_GETACCEL (0x400+108) +#Define UDM_GETBASE (0x400+110) +#Define UDM_GETBUDDY (0x400+106) +#Define UDM_GETPOS (0x400+104) +#Define UDM_GETPOS32 (0x400+114) +#Define UDM_GETRANGE (0x400+102) +#Define UDM_GETRANGE32 (0x400+112) +#Define UDM_GETUNICODEFORMAT (0x2000+6) +#Define UDM_SETACCEL (0x400+107) +#Define UDM_SETBASE (0x400+109) +#Define UDM_SETBUDDY (0x400+105) +#Define UDM_SETPOS (0x400+103) +#Define UDM_SETPOS32 (0x400+113) +#Define UDM_SETRANGE (0x400+101) +#Define UDM_SETRANGE32 (0x400+111) +#Define UDM_SETUNICODEFORMAT (0x2000+5) + +#Define UDS_ALIGNLEFT 0x8 +#Define UDS_ALIGNRIGHT 0x4 +#Define UDS_ARROWKEYS 0x20 +#Define UDS_AUTOBUDDY 0x10 +#Define UDS_HORZ 0x40 +#Define UDS_HOTTRACK 0x100 +#Define UDS_NOTHOUSANDS 0x80 +#Define UDS_SETBUDDYINT 0x2 +#Define UDS_WRAP 0x1 + +#Define UISF_ACTIVE 4 +#Define UIS_CLEAR 2 +#Define UIS_INITIALIZE 3 +#Define UIS_SET 1 +#Define UISF_HIDEACCEL 0x2 +#Define UISF_HIDEFOCUS 0x1 + +#Define UPDOWN_CLASS "msctls_updown" +#Define UPDOWN_CLASSA "msctls_updown32" +#Define UPDOWN_CLASSW "msctls_updown32" + +#Define UNLEN 256 + +#Define VIETNAMESE_CHARSET 163 +#Define VK_CAPITAL 0x14 +#Define VK_ESCAPE 0x1b +#Define VK_SHIFT 0x10 +#Define VK_TAB 0x09 +#Define VK_RETURN 0x0d + +#Define WA_ACTIVE 1 +#Define WA_CLICKACTIVE 2 +#Define WA_INACTIVE 0 + +#Define WC_SCROLLBARA "ScrollBar" +#Define WC_SCROLLBARW "ScrollBar" +#Define WC_STATICA "Static" +#Define WC_STATICW "Static" +#Define WC_TABCONTROLA "SysTabControl32" +#Define WC_TABCONTROLW "SysTabControl32" + +#Define WHEEL_DELTA 120 + +#Define WM_ACTIVATE 0x6 +#Define WM_ACTIVATEAPP 0x1C +#Define WM_ADSPROP_NOTIFY_APPLY 0x850 +#Define WM_ADSPROP_NOTIFY_CHANGE 0x84f +#Define WM_ADSPROP_NOTIFY_ERROR 0x856 +#Define WM_ADSPROP_NOTIFY_EXIT 0x853 +#Define WM_ADSPROP_NOTIFY_FOREGROUND 0x852 +#Define WM_ADSPROP_NOTIFY_PAGEHWND 0x84e +#Define WM_ADSPROP_NOTIFY_PAGEINIT 0x84d +#Define WM_ADSPROP_NOTIFY_SETFOCUS 0x851 +#Define WM_ADSPROP_NOTIFY_SHOW_ERROR_DIALOG 0x857 +#Define WM_AFXFIRST 0x360 +#Define WM_AFXLAST 0x37F +#Define WM_APP 0x8000 +#Define WM_APPCOMMAND 0x319 +#Define WM_ASKCBFORMATNAME 0x30C +#Define WM_CANCELJOURNAL 0x4B +#Define WM_CANCELMODE 0x1F +#Define WM_CAPTURECHANGED 0x215 +#Define WM_CHANGECBCHAIN 0x30D +#Define WM_CHANGEUISTATE 0x127 +#Define WM_CHAR 0x102 +#Define WM_CHARTOITEM 0x2F +#Define WM_CHILDACTIVATE 0x22 +#Define WM_CHOOSEFONT_GETLOGFONT 0x401 +#Define WM_CHOOSEFONT_SETFLAGS 0x466 +#Define WM_CHOOSEFONT_SETLOGFONT 0x465 +#Define WM_CLEAR 0x303 +#Define WM_CLOSE 0x10 +#Define WM_COMMAND 0x111 +#Define WM_COMMNOTIFY 0x44 +#Define WM_COMPACTING 0x41 +#Define WM_COMPAREITEM 0x39 +#Define WM_CONTEXTMENU 0x7B +#Define WM_CONVERTREQUEST 0x10A +#Define WM_CONVERTREQUESTEX 0x108 +#Define WM_CONVERTRESULT 0x10B +#Define WM_COPY 0x301 +#Define WM_COPYDATA 0x4A +#Define WM_CPL_LAUNCH 0x7e8 +#Define WM_CPL_LAUNCHED 0x7e9 +#Define WM_CREATE 0x1 +#Define WM_CTLCOLOR 0x19 +#Define WM_CTLCOLORBTN 0x135 +#Define WM_CTLCOLORDLG 0x136 +#Define WM_CTLCOLOREDIT 0x133 +#Define WM_CTLCOLORLISTBOX 0x134 +#Define WM_CTLCOLORMSGBOX 0x132 +#Define WM_CTLCOLORSCROLLBAR 0x137 +#Define WM_CTLCOLORSTATIC 0x138 +#Define WM_CUT 0x300 +#Define WM_DDE_ACK 0x3e4 +#Define WM_DDE_ADVISE 0x3e2 +#Define WM_DDE_DATA 0x3e5 +#Define WM_DDE_EXECUTE 0x3e8 +#Define WM_DDE_FIRST 0x3E0 +#Define WM_DDE_INITIATE 0x3e0 +#Define WM_DDE_LAST 0x3e8 +#Define WM_DDE_POKE 0x3e7 +#Define WM_DDE_REQUEST 0x3e6 +#Define WM_DDE_TERMINATE 0x3e1 +#Define WM_DDE_UNADVISE 0x3e3 +#Define WM_DEADCHAR 0x103 +#Define WM_DELETEITEM 0x2D +#Define WM_DESTROY 0x2 +#Define WM_DESTROYCLIPBOARD 0x307 +#Define WM_DEVICECHANGE 0x219 +#Define WM_DEVMODECHANGE 0x1B +#Define WM_DISPLAYCHANGE 0x7E +#Define WM_DRAWCLIPBOARD 0x308 +#Define WM_DRAWITEM 0x2B +#Define WM_DROPFILES 0x233 +#Define WM_ENABLE 0xA +#Define WM_ENDSESSION 0x16 +#Define WM_ENTERIDLE 0x121 +#Define WM_ENTERMENULOOP 0x211 +#Define WM_ENTERSIZEMOVE 0x231 +#Define WM_ERASEBKGND 0x14 +#Define WM_EXITMENULOOP 0x212 +#Define WM_EXITSIZEMOVE 0x232 +#Define WM_FONTCHANGE 0x1D +#Define WM_FORWARDMSG 0x37F +#Define WM_GETDLGCODE 0x87 +#Define WM_GETFONT 0x31 +#Define WM_GETHOTKEY 0x33 +#Define WM_GETICON 0x7F +#Define WM_GETMINMAXINFO 0x24 +#Define WM_GETOBJECT 0x3D +#Define WM_GETTEXT 0xD +#Define WM_GETTEXTLENGTH 0xE +#Define WM_HANDHELDFIRST 0x358 +#Define WM_HANDHELDLAST 0x35F +#Define WM_HELP 0x53 +#Define WM_HOTKEY 0x312 +#Define WM_HSCROLL 0x114 +#Define WM_HSCROLLCLIPBOARD 0x30E +#Define WM_ICONERASEBKGND 0x27 +#Define WM_IME_CHAR 0x286 +#Define WM_IME_COMPOSITION 0x10F +#Define WM_IME_COMPOSITIONFULL 0x284 +#Define WM_IME_CONTROL 0x283 +#Define WM_IME_ENDCOMPOSITION 0x10E +#Define WM_IME_KEYDOWN 0x290 +#Define WM_IME_KEYLAST 0x10F +#Define WM_IME_KEYUP 0x291 +#Define WM_IME_NOTIFY 0x282 +#Define WM_IME_REPORT 0x280 +#Define WM_IME_REQUEST 0x288 +#Define WM_IME_SELECT 0x285 +#Define WM_IME_SETCONTEXT 0x281 +#Define WM_IME_STARTCOMPOSITION 0x10D +#Define WM_IMEKEYDOWN 0x290 +#Define WM_IMEKEYUP 0x291 +#Define WM_INITDIALOG 0x110 +#Define WM_INITMENU 0x116 +#Define WM_INITMENUPOPUP 0x117 +#Define WM_INPUTLANGCHANGE 0x51 +#Define WM_INPUTLANGCHANGEREQUEST 0x50 +#Define WM_INTERIM 0x10C +#Define WM_KEYDOWN 0x100 +#Define WM_KEYFIRST 0x100 +#Define WM_KEYLAST 0x108 +#Define WM_KEYUP 0x101 +#Define WM_KILLFOCUS 0x8 +#Define WM_LBUTTONDBLCLK 0x203 +#Define WM_LBUTTONDOWN 0x201 +#Define WM_LBUTTONUP 0x202 +#Define WM_MBUTTONDBLCLK 0x209 +#Define WM_MBUTTONDOWN 0x207 +#Define WM_MBUTTONUP 0x208 +#Define WM_MDIACTIVATE 0x222 +#Define WM_MDICASCADE 0x227 +#Define WM_MDICREATE 0x220 +#Define WM_MDIDESTROY 0x221 +#Define WM_MDIGETACTIVE 0x229 +#Define WM_MDIICONARRANGE 0x228 +#Define WM_MDIMAXIMIZE 0x225 +#Define WM_MDINEXT 0x224 +#Define WM_MDIREFRESHMENU 0x234 +#Define WM_MDIRESTORE 0x223 +#Define WM_MDISETMENU 0x230 +#Define WM_MDITILE 0x226 +#Define WM_MEASUREITEM 0x2C +#Define WM_MENUCHAR 0x120 +#Define WM_MENUCOMMAND 0x126 +#Define WM_MENUDRAG 0x123 +#Define WM_MENUGETOBJECT 0x124 +#Define WM_MENURBUTTONUP 0x122 +#Define WM_MENUSELECT 0x11F +#Define WM_MOUSEACTIVATE 0x21 +#Define WM_MOUSEFIRST 0x200 +#Define WM_MOUSEHOVER 0x2A1 +#Define WM_MOUSELAST 0x209 +#Define WM_MOUSELEAVE 0x2A3 +#Define WM_MOUSEMOVE 0x200 +#Define WM_MOUSEWHEEL 0x20A +#Define WM_MOVE 0x3 +#Define WM_MOVING 0x216 +#Define WM_NCACTIVATE 0x86 +#Define WM_NCCALCSIZE 0x83 +#Define WM_NCCREATE 0x81 +#Define WM_NCDESTROY 0x82 +#Define WM_NCHITTEST 0x84 +#Define WM_NCLBUTTONDBLCLK 0xA3 +#Define WM_NCLBUTTONDOWN 0xA1 +#Define WM_NCLBUTTONUP 0xA2 +#Define WM_NCMBUTTONDBLCLK 0xA9 +#Define WM_NCMBUTTONDOWN 0xA7 +#Define WM_NCMBUTTONUP 0xA8 +#Define WM_NCMOUSEHOVER 0x2A0 +#Define WM_NCMOUSELEAVE 0x2A2 +#Define WM_NCMOUSEMOVE 0xA0 +#Define WM_NCPAINT 0x85 +#Define WM_NCRBUTTONDBLCLK 0xA6 +#Define WM_NCRBUTTONDOWN 0xA4 +#Define WM_NCRBUTTONUP 0xA5 +#Define WM_NCXBUTTONDBLCLK 0xAD +#Define WM_NCXBUTTONDOWN 0xAB +#Define WM_NCXBUTTONUP 0xAC +#Define WM_NEXTDLGCTL 0x28 +#Define WM_NEXTMENU 0x213 +#Define WM_NOTIFY 0x4E +#Define WM_NOTIFYFORMAT 0x55 +#Define WM_NULL 0x0 +#Define WM_OTHERWINDOWCREATED 0x42 +#Define WM_OTHERWINDOWDESTROYED 0x43 +#Define WM_PAINT 0xF +#Define WM_PAINTCLIPBOARD 0x309 +#Define WM_PAINTICON 0x26 +#Define WM_PALETTECHANGED 0x311 +#Define WM_PALETTEISCHANGING 0x310 +#Define WM_PARENTNOTIFY 0x210 +#Define WM_PASTE 0x302 +#Define WM_PENWINFIRST 0x380 +#Define WM_PENWINLAST 0x38F +#Define WM_POWER 0x48 +#Define WM_POWERBROADCAST 0x218 +#Define WM_PRINT 0x317 +#Define WM_PRINTCLIENT 0x318 +#Define WM_PSD_ENVSTAMPRECT 0x405 +#Define WM_PSD_FULLPAGERECT 0x401 +#Define WM_PSD_GREEKTEXTRECT 0x404 +#Define WM_PSD_MARGINRECT 0x403 +#Define WM_PSD_MINMARGINRECT 0x402 +#Define WM_PSD_PAGESETUPDLG 0x400 +#Define WM_PSD_YAFULLPAGERECT 0x406 +#Define WM_QUERYDRAGICON 0x37 +#Define WM_QUERYENDSESSION 0x11 +#Define WM_QUERYNEWPALETTE 0x30F +#Define WM_QUERYOPEN 0x13 +#Define WM_QUERYUISTATE 0x129 +#Define WM_QUEUESYNC 0x23 +#Define WM_QUIT 0x12 +#Define WM_RASDIALEVENT 0xCCCD +#Define WM_RBUTTONDBLCLK 0x206 +#Define WM_RBUTTONDOWN 0x204 +#Define WM_RBUTTONUP 0x205 +#Define WM_RENDERALLFORMATS 0x306 +#Define WM_RENDERFORMAT 0x305 +#Define WM_SETCURSOR 0x20 +#Define WM_SETFOCUS 0x7 +#Define WM_SETFONT 0x30 +#Define WM_SETHOTKEY 0x32 +#Define WM_SETICON 0x80 +#Define WM_SETREDRAW 0xB +#Define WM_SETTEXT 0xC +#Define WM_SETTINGCHANGE 0x1A +#Define WM_SHOWWINDOW 0x18 +#Define WM_SIZE 0x5 +#Define WM_SIZECLIPBOARD 0x30B +#Define WM_SIZING 0x214 +#Define WM_SPOOLERSTATUS 0x2A +#Define WM_STYLECHANGED 0x7D +#Define WM_STYLECHANGING 0x7C +#Define WM_SYNCPAINT 0x88 +#Define WM_SYSCHAR 0x106 +#Define WM_SYSCOLORCHANGE 0x15 +#Define WM_SYSCOMMAND 0x112 +#Define WM_SYSDEADCHAR 0x107 +#Define WM_SYSKEYDOWN 0x104 +#Define WM_SYSKEYUP 0x105 +#Define WM_SYSTIMER 0x0118 +#Define WM_TCARD 0x52 +#Define WM_THEMECHANGED 0x031A +#Define WM_TIMECHANGE 0x1E +#Define WM_TIMER 0x113 +#Define WM_UNDO 0x304 +#Define WM_UNINITMENUPOPUP 0x125 +#Define WM_UPDATEUISTATE 0x128 +#Define WM_USER 0x400 +#Define WM_USERCHANGED 0x54 +#Define WM_VKEYTOITEM 0x2E +#Define WM_VSCROLL 0x115 +#Define WM_VSCROLLCLIPBOARD 0x30A +#Define WM_WINDOWPOSCHANGED 0x47 +#Define WM_WINDOWPOSCHANGING 0x46 +#Define WM_WININICHANGE 0x1A +#Define WM_WNT_CONVERTREQUESTEX 0x109 +#Define WM_XBUTTONDBLCLK 0x20D +#Define WM_XBUTTONDOWN 0x20B +#Define WM_XBUTTONUP 0x20C +#Define WPF_ASYNCWINDOWPLACEMENT 0x4 +#Define WPF_RESTORETOMAXIMIZED 0x2 +#Define WPF_SETMINPOSITION 0x1 +#Define WRITE_DAC 0x40000 +#Define WRITE_OWNER 0x80000 +#Define WS_ACTIVECAPTION 0x1 +#Define WS_BORDER 0x800000 +#Define WS_CAPTION 0xC00000 +#Define WS_CHILD 0x40000000 +#Define WS_CHILDWINDOW 0x40000000 +#Define WS_CLIPCHILDREN 0x2000000 +#Define WS_CLIPSIBLINGS 0x4000000 +#Define WS_DISABLED 0x8000000 +#Define WS_DLGFRAME 0x400000 +#Define WS_EX_ACCEPTFILES 0x10 +#Define WS_EX_APPWINDOW 0x40000 +#Define WS_EX_CLIENTEDGE 0x200 +#Define WS_EX_CONTEXTHELP 0x400 +#Define WS_EX_CONTROLPARENT 0x10000 +#Define WS_EX_DLGMODALFRAME 0x1 +#Define WS_EX_LAYERED 0x80000 +#Define WS_EX_LAYOUTRTL 0x400000 +#Define WS_EX_LEFT 0x0 +#Define WS_EX_LEFTSCROLLBAR 0x4000 +#Define WS_EX_LTRREADING 0x0 +#Define WS_EX_MDICHILD 0x40 +#Define WS_EX_NOACTIVATE 0x8000000 +#Define WS_EX_NOINHERITLAYOUT 0x100000 +#Define WS_EX_NOPARENTNOTIFY 0x4 +#Define WS_EX_OVERLAPPEDWINDOW 0x300 +#Define WS_EX_PALETTEWINDOW 0x188 +#Define WS_EX_RIGHT 0x1000 +#Define WS_EX_RIGHTSCROLLBAR 0x0 +#Define WS_EX_RTLREADING 0x2000 +#Define WS_EX_STATICEDGE 0x20000 +#Define WS_EX_TOOLWINDOW 0x80 +#Define WS_EX_TOPMOST 0x8 +#Define WS_EX_TRANSPARENT 0x20 +#Define WS_EX_WINDOWEDGE 0x100 +#Define WS_GROUP 0x20000 +#Define WS_GT 0x30000 +#Define WS_HSCROLL 0x100000 +#Define WS_ICONIC 0x20000000 +#Define WS_MAXIMIZE 0x1000000 +#Define WS_MAXIMIZEBOX 0x10000 +#Define WS_MINIMIZE 0x20000000 +#Define WS_MINIMIZEBOX 0x20000 +#Define WS_OVERLAPPED 0x0 +#Define WS_OVERLAPPEDWINDOW 0xCF0000 +#Define WS_POPUP 0x80000000 +#Define WS_POPUPWINDOW 0x80880000 +#Define WS_SIZEBOX 0x40000 +#Define WS_SYSMENU 0x80000 +#Define WS_TABSTOP 0x10000 +#Define WS_THICKFRAME 0x40000 +#Define WS_TILED 0x0 +#Define WS_TILEDWINDOW 0xCF0000 +#Define WS_VISIBLE 0x10000000 +#Define WS_VSCROLL 0x200000 + +#Define XMLELEMTYPE_ELEMENT 0 +#Define XMLELEMTYPE_TEXT 1 +#Define XMLELEMTYPE_COMMENT 2 +#Define XMLELEMTYPE_DOCUMENT 3 +#Define XMLELEMTYPE_DTD 4 +#Define XMLELEMTYPE_PI 5 +#Define XMLELEMTYPE_OTHER 6 + +******************************************************************************** +*!* From vsstyle.h uxtheme.h +******************************************************************************** +#Define ABS_DOWNDISABLED 8 +#Define ABS_DOWNHOT 6 +#Define ABS_DOWNHOVER 18 +#Define ABS_DOWNNORMAL 5 +#Define ABS_DOWNPRESSED 7 +#Define ABS_LEFTDISABLED 12 +#Define ABS_LEFTHOT 10 +#Define ABS_LEFTHOVER 19 +#Define ABS_LEFTNORMAL 9 +#Define ABS_LEFTPRESSED 11 +#Define ABS_RIGHTDISABLED 16 +#Define ABS_RIGHTHOT 14 +#Define ABS_RIGHTHOVER 20 +#Define ABS_RIGHTNORMAL 13 +#Define ABS_RIGHTPRESSED 15 +#Define ABS_UPDISABLED 4 +#Define ABS_UPHOT 2 +#Define ABS_UPHOVER 17 +#Define ABS_UPNORMAL 1 +#Define ABS_UPPRESSED 3 +#Define AW_BUTTON 5 +#Define AW_COMMANDAREA 4 +#Define AW_CONTENTAREA 3 +#Define AW_HEADERAREA 2 +#Define AW_S_CONTENTAREA_NOMARGIN 1 +#Define AW_S_HEADERAREA_NOMARGIN 1 +#Define AW_S_TITLEBAR_ACTIVE 1 +#Define AW_S_TITLEBAR_INACTIVE 2 +#Define AW_TITLEBAR 1 +#Define BP_CHECKBOX 3 +#Define BP_COMMANDLINK 6 +#Define BP_COMMANDLINKGLYPH 7 +#Define BP_GROUPBOX 4 +#Define BP_PUSHBUTTON 1 +#Define BP_RADIOBUTTON 2 +#Define BP_USERBUTTON 5 +#Define CBB_DISABLED 4 +#Define CBB_FOCUSED 3 +#Define CBB_HOT 2 +#Define CBB_NORMAL 1 +#Define CBCB_DISABLED 4 +#Define CBCB_HOT 2 +#Define CBCB_NORMAL 1 +#Define CBCB_PRESSED 3 +#Define CBRO_DISABLED 4 +#Define CBRO_HOT 2 +#Define CBRO_NORMAL 1 +#Define CBRO_PRESSED 3 +#Define CBS_CHECKEDDISABLED 8 +#Define CBS_CHECKEDHOT 6 +#Define CBS_CHECKEDNORMAL 5 +#Define CBS_CHECKEDPRESSED 7 +#Define CBS_DISABLED 4 +#Define CBS_EXCLUDEDDISABLED 20 +#Define CBS_EXCLUDEDHOT 18 +#Define CBS_EXCLUDEDNORMAL 17 +#Define CBS_EXCLUDEDPRESSED 19 +#Define CBS_HOT 2 +#Define CBS_IMPLICITDISABLED 16 +#Define CBS_IMPLICITHOT 14 +#Define CBS_IMPLICITNORMAL 13 +#Define CBS_IMPLICITPRESSED 15 +#Define CBS_MIXEDDISABLED 12 +#Define CBS_MIXEDHOT 10 +#Define CBS_MIXEDNORMAL 9 +#Define CBS_MIXEDPRESSED 11 +#Define CBS_NORMAL 1 +#Define CBS_PUSHED 3 +#Define CBS_UNCHECKEDDISABLED 4 +#Define CBS_UNCHECKEDHOT 2 +#Define CBS_UNCHECKEDNORMAL 1 +#Define CBS_UNCHECKEDPRESSED 3 +#Define CBTBS_DISABLED 3 +#Define CBTBS_FOCUSED 4 +#Define CBTBS_HOT 2 +#Define CBTBS_NORMAL 1 +#Define CBXS_DISABLED 4 +#Define CBXS_HOT 2 +#Define CBXS_NORMAL 1 +#Define CBXS_PRESSED 3 +#Define CBXSL_DISABLED 4 +#Define CBXSL_HOT 2 +#Define CBXSL_NORMAL 1 +#Define CBXSL_PRESSED 3 +#Define CBXSR_DISABLED 4 +#Define CBXSR_HOT 2 +#Define CBXSR_NORMAL 1 +#Define CBXSR_PRESSED 3 +#Define CHEVS_HOT 2 +#Define CHEVS_NORMAL 1 +#Define CHEVS_PRESSED 3 +#Define CHEVSV_HOT 2 +#Define CHEVSV_NORMAL 1 +#Define CHEVSV_PRESSED 3 +#Define CMDLGS_DEFAULTED 5 +#Define CMDLGS_DISABLED 4 +#Define CMDLGS_HOT 2 +#Define CMDLGS_NORMAL 1 +#Define CMDLGS_PRESSED 3 +#Define CMDLS_DEFAULTED 5 +#Define CMDLS_DEFAULTED_ANIMATING 6 +#Define CMDLS_DISABLED 4 +#Define CMDLS_HOT 2 +#Define CMDLS_NORMAL 1 +#Define CMDLS_PRESSED 3 +#Define CP_BACKGROUND 2 +#Define CP_BORDER 4 +#Define CP_CUEBANNER 8 +#Define CP_DROPDOWNBUTTON 1 +#Define CP_DROPDOWNBUTTONLEFT 7 +#Define CP_DROPDOWNBUTTONRIGHT 6 +#Define CP_READONLY 5 +#Define CP_TRANSPARENTBACKGROUND 3 +#Define CPANEL_BANNERAREA 18 +#Define CPANEL_BODYTEXT 6 +#Define CPANEL_BODYTITLE 19 +#Define CPANEL_BUTTON 14 +#Define CPANEL_CONTENTLINK 10 +#Define CPANEL_CONTENTPANE 2 +#Define CPANEL_CONTENTPANELABEL 4 +#Define CPANEL_CONTENTPANELINE 17 +#Define CPANEL_GROUPTEXT 9 +#Define CPANEL_HELPLINK 7 +#Define CPANEL_LARGECOMMANDAREA 12 +#Define CPANEL_MESSAGETEXT 15 +#Define CPANEL_NAVIGATIONPANE 1 +#Define CPANEL_NAVIGATIONPANELABEL 3 +#Define CPANEL_NAVIGATIONPANELINE 16 +#Define CPANEL_SECTIONTITLELINK 11 +#Define CPANEL_SMALLCOMMANDAREA 13 +#Define CPANEL_TASKLINK 8 +#Define CPANEL_TITLE 5 +#Define CPCL_DISABLED 4 +#Define CPCL_HOT 2 +#Define CPCL_NORMAL 1 +#Define CPCL_PRESSED 3 +#Define CPHL_DISABLED 4 +#Define CPHL_HOT 2 +#Define CPHL_NORMAL 1 +#Define CPHL_PRESSED 3 +#Define CPSTL_HOT 2 +#Define CPSTL_NORMAL 1 +#Define CPTL_DISABLED 4 +#Define CPTL_HOT 2 +#Define CPTL_NORMAL 1 +#Define CPTL_PAGE 5 +#Define CPTL_PRESSED 3 +#Define CS_ACTIVE 1 +#Define CS_DISABLED 3 +#Define CS_INACTIVE 2 +#Define CSST_TAB 1 +#Define CSTB_HOT 2 +#Define CSTB_NORMAL 1 +#Define CSTB_SELECTED 3 +#Define DD_COPY 1 +#Define DD_CREATELINK 4 +#Define DD_IMAGEBG 7 +#Define DD_MOVE 2 +#Define DD_NONE 6 +#Define DD_TEXTBG 8 +#Define DD_UPDATEMETADATA 3 +#Define DD_WARNING 5 +#Define DDCOPY_HIGHLIGHT 1 +#Define DDCOPY_NOHIGHLIGHT 2 +#Define DDCREATELINK_HIGHLIGHT 1 +#Define DDCREATELINK_NOHIGHLIGHT 2 +#Define DDMOVE_HIGHLIGHT 1 +#Define DDMOVE_NOHIGHLIGHT 2 +#Define DDNONE_HIGHLIGHT 1 +#Define DDNONE_NOHIGHLIGHT 2 +#Define DDUPDATEMETADATA_HIGHLIGHT 1 +#Define DDUPDATEMETADATA_NOHIGHLIGHT 2 +#Define DDWARNING_HIGHLIGHT 1 +#Define DDWARNING_NOHIGHLIGHT 2 +#Define DNHZS_DISABLED 4 +#Define DNHZS_HOT 2 +#Define DNHZS_NORMAL 1 +#Define DNHZS_PRESSED 3 +#Define DNS_DISABLED 4 +#Define DNS_HOT 2 +#Define DNS_NORMAL 1 +#Define DNS_PRESSED 3 +#Define DP_DATEBORDER 2 +#Define DP_DATETEXT 1 +#Define DP_SHOWCALENDARBUTTONRIGHT 3 +#Define DPDB_DISABLED 4 +#Define DPDB_FOCUSED 3 +#Define DPDB_HOT 2 +#Define DPDB_NORMAL 1 +#Define DPDT_DISABLED 2 +#Define DPDT_NORMAL 1 +#Define DPDT_SELECTED 3 +#Define DPSCBR_DISABLED 4 +#Define DPSCBR_HOT 2 +#Define DPSCBR_NORMAL 1 +#Define DPSCBR_PRESSED 3 +#Define EBHC_HOT 2 +#Define EBHC_NORMAL 1 +#Define EBHC_PRESSED 3 +#Define EBHP_HOT 2 +#Define EBHP_NORMAL 1 +#Define EBHP_PRESSED 3 +#Define EBHP_SELECTEDHOT 5 +#Define EBHP_SELECTEDNORMAL 4 +#Define EBHP_SELECTEDPRESSED 6 +#Define EBM_HOT 2 +#Define EBM_NORMAL 1 +#Define EBM_PRESSED 3 +#Define EBNGC_HOT 2 +#Define EBNGC_NORMAL 1 +#Define EBNGC_PRESSED 3 +#Define EBNGE_HOT 2 +#Define EBNGE_NORMAL 1 +#Define EBNGE_PRESSED 3 +#Define EBP_HEADERBACKGROUND 1 +#Define EBP_HEADERCLOSE 2 +#Define EBP_HEADERPIN 3 +#Define EBP_IEBARMENU 4 +#Define EBP_NORMALGROUPBACKGROUND 5 +#Define EBP_NORMALGROUPCOLLAPSE 6 +#Define EBP_NORMALGROUPEXPAND 7 +#Define EBP_NORMALGROUPHEAD 8 +#Define EBP_SPECIALGROUPBACKGROUND 9 +#Define EBP_SPECIALGROUPCOLLAPSE 10 +#Define EBP_SPECIALGROUPEXPAND 11 +#Define EBP_SPECIALGROUPHEAD 12 +#Define EBS_ASSIST 6 +#Define EBS_DISABLED 3 +#Define EBS_FOCUSED 4 +#Define EBS_HOT 2 +#Define EBS_NORMAL 1 +#Define EBS_READONLY 5 +#Define EBSGC_HOT 2 +#Define EBSGC_NORMAL 1 +#Define EBSGC_PRESSED 3 +#Define EBSGE_HOT 2 +#Define EBSGE_NORMAL 1 +#Define EBSGE_PRESSED 3 +#Define EBWBS_DISABLED 3 +#Define EBWBS_FOCUSED 4 +#Define EBWBS_HOT 2 +#Define EBWBS_NORMAL 1 +#Define EP_BACKGROUND 3 +#Define EP_BACKGROUNDWITHBORDER 5 +#Define EP_CARET 2 +#Define EP_EDITBORDER_HSCROLL 7 +#Define EP_EDITBORDER_HVSCROLL 9 +#Define EP_EDITBORDER_NOSCROLL 6 +#Define EP_EDITBORDER_VSCROLL 8 +#Define EP_EDITTEXT 1 +#Define EP_PASSWORD 4 +#Define EPSH_DISABLED 4 +#Define EPSH_FOCUSED 3 +#Define EPSH_HOT 2 +#Define EPSH_NORMAL 1 +#Define EPSHV_DISABLED 4 +#Define EPSHV_FOCUSED 3 +#Define EPSHV_HOT 2 +#Define EPSHV_NORMAL 1 +#Define EPSN_DISABLED 4 +#Define EPSN_FOCUSED 3 +#Define EPSN_HOT 2 +#Define EPSN_NORMAL 1 +#Define EPSV_DISABLED 4 +#Define EPSV_FOCUSED 3 +#Define EPSV_HOT 2 +#Define EPSV_NORMAL 1 +#Define ETS_ASSIST 7 +#Define ETS_CUEBANNER 8 +#Define ETS_DISABLED 4 +#Define ETS_FOCUSED 5 +#Define ETS_HOT 2 +#Define ETS_NORMAL 1 +#Define ETS_READONLY 6 +#Define ETS_SELECTED 3 +#Define FBS_EMPHASIZED 2 +#Define FBS_NORMAL 1 +#Define FLH_HOVER 2 +#Define FLH_NORMAL 1 +#Define FLS_DISABLED 4 +#Define FLS_EMPHASIZED 3 +#Define FLS_NORMAL 1 +#Define FLS_SELECTED 2 +#Define FLYOUT_BODY 2 +#Define FLYOUT_DIVIDER 5 +#Define FLYOUT_HEADER 1 +#Define FLYOUT_LABEL 3 +#Define FLYOUT_LINK 4 +#Define FLYOUT_LINKAREA 7 +#Define FLYOUT_LINKHEADER 8 +#Define FLYOUT_WINDOW 6 +#Define FLYOUTLINK_HOVER 2 +#Define FLYOUTLINK_NORMAL 1 +#Define FS_ACTIVE 1 +#Define FS_INACTIVE 2 +#Define GBS_DISABLED 2 +#Define GBS_NORMAL 1 +#Define GLPS_CLOSED 1 +#Define GLPS_OPENED 2 +#Define HBG_DETAILS 1 +#Define HBG_ICON 2 +#Define HBS_DISABLED 4 +#Define HBS_HOT 2 +#Define HBS_NORMAL 1 +#Define HBS_PUSHED 3 +#Define HDDFS_HOT 3 +#Define HDDFS_NORMAL 1 +#Define HDDFS_SOFTHOT 2 +#Define HDDS_HOT 3 +#Define HDDS_NORMAL 1 +#Define HDDS_SOFTHOT 2 +#Define HGLPS_CLOSED 1 +#Define HGLPS_OPENED 2 +#Define HILS_HOT 2 +#Define HILS_NORMAL 1 +#Define HILS_PRESSED 3 +#Define HIRS_HOT 2 +#Define HIRS_NORMAL 1 +#Define HIRS_PRESSED 3 +#Define HIS_HOT 2 +#Define HIS_ICONHOT 8 +#Define HIS_ICONNORMAL 7 +#Define HIS_ICONPRESSED 9 +#Define HIS_ICONSORTEDHOT 11 +#Define HIS_ICONSORTEDNORMAL 10 +#Define HIS_ICONSORTEDPRESSED 12 +#Define HIS_NORMAL 1 +#Define HIS_PRESSED 3 +#Define HIS_SORTEDHOT 5 +#Define HIS_SORTEDNORMAL 4 +#Define HIS_SORTEDPRESSED 6 +#Define HOFS_HOT 2 +#Define HOFS_NORMAL 1 +#Define HP_HEADERDROPDOWN 5 +#Define HP_HEADERDROPDOWNFILTER 6 +#Define HP_HEADERITEM 1 +#Define HP_HEADERITEMLEFT 2 +#Define HP_HEADERITEMRIGHT 3 +#Define HP_HEADEROVERFLOW 7 +#Define HP_HEADERSORTARROW 4 +#Define HSAS_SORTEDDOWN 2 +#Define HSAS_SORTEDUP 1 +#Define HSS_DISABLED 4 +#Define HSS_HOT 2 +#Define HSS_NORMAL 1 +#Define HSS_PUSHED 3 +#Define HTS_DISABLED 4 +#Define HTS_HOT 2 +#Define HTS_NORMAL 1 +#Define HTS_PUSHED 3 +#Define LBCP_BORDER_HSCROLL 1 +#Define LBCP_BORDER_HVSCROLL 2 +#Define LBCP_BORDER_NOSCROLL 3 +#Define LBCP_BORDER_VSCROLL 4 +#Define LBCP_ITEM 5 +#Define LBPSH_DISABLED 4 +#Define LBPSH_FOCUSED 2 +#Define LBPSH_HOT 3 +#Define LBPSH_NORMAL 1 +#Define LBPSHV_DISABLED 4 +#Define LBPSHV_FOCUSED 2 +#Define LBPSHV_HOT 3 +#Define LBPSHV_NORMAL 1 +#Define LBPSI_HOT 1 +#Define LBPSI_HOTSELECTED 2 +#Define LBPSI_SELECTED 3 +#Define LBPSI_SELECTEDNOTFOCUS 4 +#Define LBPSN_DISABLED 4 +#Define LBPSN_FOCUSED 2 +#Define LBPSN_HOT 3 +#Define LBPSN_NORMAL 1 +#Define LBPSV_DISABLED 4 +#Define LBPSV_FOCUSED 2 +#Define LBPSV_HOT 3 +#Define LBPSV_NORMAL 1 +#Define LISS_DISABLED 4 +#Define LISS_HOT 2 +#Define LISS_HOTSELECTED 6 +#Define LISS_NORMAL 1 +#Define LISS_SELECTED 3 +#Define LISS_SELECTEDNOTFOCUS 5 +#Define LVCB_HOVER 2 +#Define LVCB_NORMAL 1 +#Define LVCB_PUSHED 3 +#Define LVEB_HOVER 2 +#Define LVEB_NORMAL 1 +#Define LVEB_PUSHED 3 +#Define LVGH_CLOSE 9 +#Define LVGH_CLOSEHOT 10 +#Define LVGH_CLOSEMIXEDSELECTION 15 +#Define LVGH_CLOSEMIXEDSELECTIONHOT 16 +#Define LVGH_CLOSESELECTED 11 +#Define LVGH_CLOSESELECTEDHOT 12 +#Define LVGH_CLOSESELECTEDNOTFOCUSED 13 +#Define LVGH_CLOSESELECTEDNOTFOCUSEDHOT 14 +#Define LVGH_OPEN 1 +#Define LVGH_OPENHOT 2 +#Define LVGH_OPENMIXEDSELECTION 7 +#Define LVGH_OPENMIXEDSELECTIONHOT 8 +#Define LVGH_OPENSELECTED 3 +#Define LVGH_OPENSELECTEDHOT 4 +#Define LVGH_OPENSELECTEDNOTFOCUSED 5 +#Define LVGH_OPENSELECTEDNOTFOCUSEDHOT 6 +#Define LVGHL_CLOSE 9 +#Define LVGHL_CLOSEHOT 10 +#Define LVGHL_CLOSEMIXEDSELECTION 15 +#Define LVGHL_CLOSEMIXEDSELECTIONHOT 16 +#Define LVGHL_CLOSESELECTED 11 +#Define LVGHL_CLOSESELECTEDHOT 12 +#Define LVGHL_CLOSESELECTEDNOTFOCUSED 13 +#Define LVGHL_CLOSESELECTEDNOTFOCUSEDHOT 14 +#Define LVGHL_OPEN 1 +#Define LVGHL_OPENHOT 2 +#Define LVGHL_OPENMIXEDSELECTION 7 +#Define LVGHL_OPENMIXEDSELECTIONHOT 8 +#Define LVGHL_OPENSELECTED 3 +#Define LVGHL_OPENSELECTEDHOT 4 +#Define LVGHL_OPENSELECTEDNOTFOCUSED 5 +#Define LVGHL_OPENSELECTEDNOTFOCUSEDHOT 6 +#Define LVP_COLLAPSEBUTTON 9 +#Define LVP_COLUMNDETAIL 10 +#Define LVP_EMPTYTEXT 5 +#Define LVP_EXPANDBUTTON 8 +#Define LVP_GROUPHEADER 6 +#Define LVP_GROUPHEADERLINE 7 +#Define LVP_LISTDETAIL 3 +#Define LVP_LISTGROUP 2 +#Define LVP_LISTITEM 1 +#Define LVP_LISTSORTEDDETAIL 4 +#Define MAXBS_DISABLED 4 +#Define MAXBS_HOT 2 +#Define MAXBS_NORMAL 1 +#Define MAXBS_PUSHED 3 +#Define MB_ACTIVE 1 +#Define MB_INACTIVE 2 +#Define MBI_DISABLED 4 +#Define MBI_DISABLEDHOT 5 +#Define MBI_DISABLEDPUSHED 6 +#Define MBI_HOT 2 +#Define MBI_NORMAL 1 +#Define MBI_PUSHED 3 +#Define MC_BULLETDISABLED 4 +#Define MC_BULLETNORMAL 3 +#Define MC_CHECKMARKDISABLED 2 +#Define MC_CHECKMARKNORMAL 1 +#Define MCB_BITMAP 3 +#Define MCB_DISABLED 1 +#Define MCB_NORMAL 2 +#Define MENU_BARBACKGROUND 7 +#Define MENU_BARITEM 8 +#Define MENU_CHEVRON_TMSCHEMA 5 +#Define MENU_MENUBARDROPDOWN_TMSCHEMA 4 +#Define MENU_MENUBARITEM_TMSCHEMA 3 +#Define MENU_MENUDROPDOWN_TMSCHEMA 2 +#Define MENU_MENUITEM_TMSCHEMA 1 +#Define MENU_POPUPBACKGROUND 9 +#Define MENU_POPUPBORDERS 10 +#Define MENU_POPUPCHECK 11 +#Define MENU_POPUPCHECKBACKGROUND 12 +#Define MENU_POPUPGUTTER 13 +#Define MENU_POPUPITEM 14 +#Define MENU_POPUPSEPARATOR 15 +#Define MENU_POPUPSUBMENU 16 +#Define MENU_SEPARATOR_TMSCHEMA 6 +#Define MENU_SYSTEMCLOSE 17 +#Define MENU_SYSTEMMAXIMIZE 18 +#Define MENU_SYSTEMMINIMIZE 19 +#Define MENU_SYSTEMRESTORE 20 +#Define MINBS_DISABLED 4 +#Define MINBS_HOT 2 +#Define MINBS_NORMAL 1 +#Define MINBS_PUSHED 3 +#Define MNCS_ACTIVE 1 +#Define MNCS_DISABLED 3 +#Define MNCS_INACTIVE 2 +#Define MPI_DISABLED 3 +#Define MPI_DISABLEDHOT 4 +#Define MPI_HOT 2 +#Define MPI_NORMAL 1 +#Define MSM_DISABLED 2 +#Define MSM_NORMAL 1 +#Define MSYSC_DISABLED 2 +#Define MSYSC_NORMAL 1 +#Define MSYSMN_DISABLED 2 +#Define MSYSMN_NORMAL 1 +#Define MSYSMX_DISABLED 2 +#Define MSYSMX_NORMAL 1 +#Define MSYSR_DISABLED 2 +#Define MSYSR_NORMAL 1 +#Define MXCS_ACTIVE 1 +#Define MXCS_DISABLED 3 +#Define MXCS_INACTIVE 2 +#Define NAV_BACKBUTTON 1 +#Define NAV_BB_DISABLED 4 +#Define NAV_BB_HOT 2 +#Define NAV_BB_NORMAL 1 +#Define NAV_BB_PRESSED 3 +#Define NAV_FB_DISABLED 4 +#Define NAV_FB_HOT 2 +#Define NAV_FB_NORMAL 1 +#Define NAV_FB_PRESSED 3 +#Define NAV_FORWARDBUTTON 2 +#Define NAV_MB_DISABLED 4 +#Define NAV_MB_HOT 2 +#Define NAV_MB_NORMAL 1 +#Define NAV_MB_PRESSED 3 +#Define NAV_MENUBUTTON 3 +#Define PBBS_NORMAL 1 +#Define PBBS_PARTIAL 2 +#Define PBBVS_NORMAL 1 +#Define PBBVS_PARTIAL 2 +#Define PBFS_ERROR 2 +#Define PBFS_NORMAL 1 +#Define PBFS_PARTIAL 4 +#Define PBFS_PAUSED 3 +#Define PBFVS_ERROR 2 +#Define PBFVS_NORMAL 1 +#Define PBFVS_PARTIAL 4 +#Define PBFVS_PAUSED 3 +#Define PBS_DEFAULTED 5 +#Define PBS_DEFAULTED_ANIMATING 6 +#Define PBS_DISABLED 4 +#Define PBS_HOT 2 +#Define PBS_NORMAL 1 +#Define PBS_PRESSED 3 +#Define PP_BAR 1 +#Define PP_BARVERT 2 +#Define PP_CHUNK 3 +#Define PP_CHUNKVERT 4 +#Define PP_FILL 5 +#Define PP_FILLVERT 6 +#Define PP_MOVEOVERLAY 8 +#Define PP_MOVEOVERLAYVERT 10 +#Define PP_PULSEOVERLAY 7 +#Define PP_PULSEOVERLAYVERT 9 +#Define PP_TRANSPARENTBAR 11 +#Define PP_TRANSPARENTBARVERT 12 +#Define RBS_CHECKEDDISABLED 8 +#Define RBS_CHECKEDHOT 6 +#Define RBS_CHECKEDNORMAL 5 +#Define RBS_CHECKEDPRESSED 7 +#Define RBS_DISABLED 4 +#Define RBS_HOT 2 +#Define RBS_NORMAL 1 +#Define RBS_PUSHED 3 +#Define RBS_UNCHECKEDDISABLED 4 +#Define RBS_UNCHECKEDHOT 2 +#Define RBS_UNCHECKEDNORMAL 1 +#Define RBS_UNCHECKEDPRESSED 3 +#Define RP_BACKGROUND 6 +#Define RP_BAND 3 +#Define RP_CHEVRON 4 +#Define RP_CHEVRONVERT 5 +#Define RP_GRIPPER 1 +#Define RP_GRIPPERVERT 2 +#Define RP_SPLITTER 7 +#Define RP_SPLITTERVERT 8 +#Define SBP_ARROWBTN 1 +#Define SBP_GRIPPERHORZ 8 +#Define SBP_GRIPPERVERT 9 +#Define SBP_LOWERTRACKHORZ 4 +#Define SBP_LOWERTRACKVERT 6 +#Define SBP_SIZEBOX 10 +#Define SBP_THUMBBTNHORZ 2 +#Define SBP_THUMBBTNVERT 3 +#Define SBP_UPPERTRACKHORZ 5 +#Define SBP_UPPERTRACKVERT 7 +#Define SBS_DISABLED 4 +#Define SBS_HOT 2 +#Define SBS_NORMAL 1 +#Define SBS_PUSHED 3 +#Define SCRBS_DISABLED 4 +#Define SCRBS_HOT 2 +#Define SCRBS_HOVER 5 +#Define SCRBS_NORMAL 1 +#Define SCRBS_PRESSED 3 +#Define SP_GRIPPER 3 +#Define SP_GRIPPERPANE 2 +#Define SP_PANE 1 +#Define SPLITS_HOT 2 +#Define SPLITS_NORMAL 1 +#Define SPLITS_PRESSED 3 +#Define SPLITSV_HOT 2 +#Define SPLITSV_NORMAL 1 +#Define SPLITSV_PRESSED 3 +#Define SPNP_DOWN 2 +#Define SPNP_DOWNHORZ 4 +#Define SPNP_UP 1 +#Define SPNP_UPHORZ 3 +#Define SZB_HALFBOTTOMLEFTALIGN 6 +#Define SZB_HALFBOTTOMRIGHTALIGN 5 +#Define SZB_HALFTOPLEFTALIGN 8 +#Define SZB_HALFTOPRIGHTALIGN 7 +#Define SZB_LEFTALIGN 2 +#Define SZB_RIGHTALIGN 1 +#Define SZB_TOPLEFTALIGN 4 +#Define SZB_TOPRIGHTALIGN 3 +#Define TABP_AEROWIZARDBODY 11 +#Define TABP_BODY 10 +#Define TABP_PANE 9 +#Define TABP_TABITEM 1 +#Define TABP_TABITEMBOTHEDGE 4 +#Define TABP_TABITEMLEFTEDGE 2 +#Define TABP_TABITEMRIGHTEDGE 3 +#Define TABP_TOPTABITEM 5 +#Define TABP_TOPTABITEMBOTHEDGE 8 +#Define TABP_TOPTABITEMLEFTEDGE 6 +#Define TABP_TOPTABITEMRIGHTEDGE 7 +#Define TDLG_BUTTONSECTION 10 +#Define TDLG_BUTTONWRAPPER 11 +#Define TDLG_COMMANDLINKPANE 7 +#Define TDLG_CONTENTICON 5 +#Define TDLG_CONTENTPANE 4 +#Define TDLG_CONTROLPANE 9 +#Define TDLG_EXPANDEDCONTENT 6 +#Define TDLG_EXPANDEDFOOTERAREA 18 +#Define TDLG_EXPANDOBUTTON 13 +#Define TDLG_EXPANDOTEXT 12 +#Define TDLG_FOOTNOTEAREA 16 +#Define TDLG_FOOTNOTEPANE 15 +#Define TDLG_FOOTNOTESEPARATOR 17 +#Define TDLG_IMAGEALIGNMENT 20 +#Define TDLG_MAINICON 3 +#Define TDLG_MAININSTRUCTIONPANE 2 +#Define TDLG_PRIMARYPANEL 1 +#Define TDLG_PROGRESSBAR 19 +#Define TDLG_RADIOBUTTONPANE 21 +#Define TDLG_SECONDARYPANEL 8 +#Define TDLG_VERIFICATIONTEXT 14 +#Define TDLGCPS_STANDALONE 1 +#Define TDLGEBS_EXPANDEDHOVER 5 +#Define TDLGEBS_EXPANDEDNORMAL 4 +#Define TDLGEBS_EXPANDEDPRESSED 6 +#Define TDLGEBS_HOVER 2 +#Define TDLGEBS_NORMAL 1 +#Define TDLGEBS_PRESSED 3 +#Define TEXT_BODYTEXT 4 +#Define TEXT_BODYTITLE 3 +#Define TEXT_CONTROLLABEL 9 +#Define TEXT_EXPANDED 7 +#Define TEXT_HYPERLINKTEXT 6 +#Define TEXT_INSTRUCTION 2 +#Define TEXT_LABEL 8 +#Define TEXT_MAININSTRUCTION 1 +#Define TEXT_SECONDARYTEXT 5 +#Define TIBES_DISABLED 4 +#Define TIBES_FOCUSED 5 +#Define TIBES_HOT 2 +#Define TIBES_NORMAL 1 +#Define TIBES_SELECTED 3 +#Define TILES_DISABLED 4 +#Define TILES_FOCUSED 5 +#Define TILES_HOT 2 +#Define TILES_NORMAL 1 +#Define TILES_SELECTED 3 +#Define TIRES_DISABLED 4 +#Define TIRES_FOCUSED 5 +#Define TIRES_HOT 2 +#Define TIRES_NORMAL 1 +#Define TIRES_SELECTED 3 +#Define TIS_DISABLED 4 +#Define TIS_FOCUSED 5 +#Define TIS_HOT 2 +#Define TIS_NORMAL 1 +#Define TIS_SELECTED 3 +#Define TKP_THUMB 3 +#Define TKP_THUMBBOTTOM 4 +#Define TKP_THUMBLEFT 7 +#Define TKP_THUMBRIGHT 8 +#Define TKP_THUMBTOP 5 +#Define TKP_THUMBVERT 6 +#Define TKP_TICS 9 +#Define TKP_TICSVERT 10 +#Define TKP_TRACK 1 +#Define TKP_TRACKVERT 2 +#Define TKS_NORMAL 1 +#Define TP_BUTTON 1 +#Define TP_DROPDOWNBUTTON 2 +#Define TP_SEPARATOR 5 +#Define TP_SEPARATORVERT 6 +#Define TP_SPLITBUTTON 3 +#Define TP_SPLITBUTTONDROPDOWN 4 +#Define TREIS_DISABLED 4 +#Define TREIS_HOT 2 +#Define TREIS_HOTSELECTED 6 +#Define TREIS_NORMAL 1 +#Define TREIS_SELECTED 3 +#Define TREIS_SELECTEDNOTFOCUS 5 +#Define TRS_NORMAL 1 +#Define TRVS_NORMAL 1 +#Define TS_CHECKED 5 +#Define TS_CONTROLLABEL_DISABLED 2 +#Define TS_CONTROLLABEL_NORMAL 1 +#Define TS_DISABLED 4 +#Define TS_HOT 2 +#Define TS_HOTCHECKED 6 +#Define TS_HYPERLINK_DISABLED 4 +#Define TS_HYPERLINK_HOT 2 +#Define TS_HYPERLINK_NORMAL 1 +#Define TS_HYPERLINK_PRESSED 3 +#Define TS_NEARHOT 7 +#Define TS_NORMAL 1 +#Define TS_OTHERSIDEHOT 8 +#Define TS_PRESSED 3 +#Define TSS_NORMAL 1 +#Define TSVS_NORMAL 1 +#Define TTBS_LINK 2 +#Define TTBS_NORMAL 1 +#Define TTBSS_POINTINGDOWNCENTERED 5 +#Define TTBSS_POINTINGDOWNLEFTWALL 6 +#Define TTBSS_POINTINGDOWNRIGHTWALL 4 +#Define TTBSS_POINTINGUPCENTERED 2 +#Define TTBSS_POINTINGUPLEFTWALL 1 +#Define TTBSS_POINTINGUPRIGHTWALL 3 +#Define TTCS_HOT 2 +#Define TTCS_NORMAL 1 +#Define TTCS_PRESSED 3 +#Define TTIBES_DISABLED 4 +#Define TTIBES_FOCUSED 5 +#Define TTIBES_HOT 2 +#Define TTIBES_NORMAL 1 +#Define TTIBES_SELECTED 3 +#Define TTILES_DISABLED 4 +#Define TTILES_FOCUSED 5 +#Define TTILES_HOT 2 +#Define TTILES_NORMAL 1 +#Define TTILES_SELECTED 3 +#Define TTIRES_DISABLED 4 +#Define TTIRES_FOCUSED 5 +#Define TTIRES_HOT 2 +#Define TTIRES_NORMAL 1 +#Define TTIRES_SELECTED 3 +#Define TTIS_DISABLED 4 +#Define TTIS_FOCUSED 5 +#Define TTIS_HOT 2 +#Define TTIS_NORMAL 1 +#Define TTIS_SELECTED 3 +#Define TTP_BALLOON 3 +#Define TTP_BALLOONSTEM 6 +#Define TTP_BALLOONTITLE 4 +#Define TTP_CLOSE 5 +#Define TTP_STANDARD 1 +#Define TTP_STANDARDTITLE 2 +#Define TTSS_LINK 2 +#Define TTSS_NORMAL 1 +#Define TUBS_DISABLED 5 +#Define TUBS_FOCUSED 4 +#Define TUBS_HOT 2 +#Define TUBS_NORMAL 1 +#Define TUBS_PRESSED 3 +#Define TUS_DISABLED 5 +#Define TUS_FOCUSED 4 +#Define TUS_HOT 2 +#Define TUS_NORMAL 1 +#Define TUS_PRESSED 3 +#Define TUTS_DISABLED 5 +#Define TUTS_FOCUSED 4 +#Define TUTS_HOT 2 +#Define TUTS_NORMAL 1 +#Define TUTS_PRESSED 3 +#Define TUVLS_DISABLED 5 +#Define TUVLS_FOCUSED 4 +#Define TUVLS_HOT 2 +#Define TUVLS_NORMAL 1 +#Define TUVLS_PRESSED 3 +#Define TUVRS_DISABLED 5 +#Define TUVRS_FOCUSED 4 +#Define TUVRS_HOT 2 +#Define TUVRS_NORMAL 1 +#Define TUVRS_PRESSED 3 +#Define TUVS_DISABLED 5 +#Define TUVS_FOCUSED 4 +#Define TUVS_HOT 2 +#Define TUVS_NORMAL 1 +#Define TUVS_PRESSED 3 +#Define TVP_BRANCH 3 +#Define TVP_GLYPH 2 +#Define TVP_HOTGLYPH 4 +#Define TVP_TREEITEM 1 +#Define UPHZS_DISABLED 4 +#Define UPHZS_HOT 2 +#Define UPHZS_NORMAL 1 +#Define UPHZS_PRESSED 3 +#Define UPS_DISABLED 4 +#Define UPS_HOT 2 +#Define UPS_NORMAL 1 +#Define UPS_PRESSED 3 +#Define VSS_DISABLED 4 +#Define VSS_HOT 2 +#Define VSS_NORMAL 1 +#Define VSS_PUSHED 3 +#Define VTS_DISABLED 4 +#Define VTS_HOT 2 +#Define VTS_NORMAL 1 +#Define VTS_PUSHED 3 +#Define WP_CAPTION 1 +#Define WP_CAPTIONSIZINGTEMPLATE 30 +#Define WP_CLOSEBUTTON 18 +#Define WP_DIALOG 29 +#Define WP_FRAME 38 +#Define WP_FRAMEBOTTOM 9 +#Define WP_FRAMEBOTTOMSIZINGTEMPLATE 36 +#Define WP_FRAMELEFT 7 +#Define WP_FRAMELEFTSIZINGTEMPLATE 32 +#Define WP_FRAMERIGHT 8 +#Define WP_FRAMERIGHTSIZINGTEMPLATE 34 +#Define WP_HELPBUTTON 23 +#Define WP_HORZSCROLL 25 +#Define WP_HORZTHUMB 26 +#Define WP_MAXBUTTON 17 +#Define WP_MAXCAPTION 5 +#Define WP_MDICLOSEBUTTON 20 +#Define WP_MDIHELPBUTTON 24 +#Define WP_MDIMINBUTTON 16 +#Define WP_MDIRESTOREBUTTON 22 +#Define WP_MDISYSBUTTON 14 +#Define WP_MINBUTTON 15 +#Define WP_MINCAPTION 3 +#Define WP_RESTOREBUTTON 21 +#Define WP_SMALLCAPTION 2 +#Define WP_SMALLCAPTIONSIZINGTEMPLATE 31 +#Define WP_SMALLCLOSEBUTTON 19 +#Define WP_SMALLFRAMEBOTTOM 12 +#Define WP_SMALLFRAMEBOTTOMSIZINGTEMPLATE 37 +#Define WP_SMALLFRAMELEFT 10 +#Define WP_SMALLFRAMELEFTSIZINGTEMPLATE 33 +#Define WP_SMALLFRAMERIGHT 11 +#Define WP_SMALLFRAMERIGHTSIZINGTEMPLATE 35 +#Define WP_SMALLMAXCAPTION 6 +#Define WP_SMALLMINCAPTION 4 +#Define WP_SYSBUTTON 13 +#Define WP_VERTSCROLL 27 +#Define WP_VERTTHUMB 28 +#Define VSCLASS_AEROWIZARD Strconv("AEROWIZARD"+0h00,5) +#Define VSCLASS_AEROWIZARDSTYLE Strconv("AEROWIZARDSTYLE"+0h00,5) +#Define VSCLASS_BUTTON Strconv("BUTTON"+0h00,5) +#Define VSCLASS_BUTTONSTYLE Strconv("BUTTONSTYLE"+0h00,5) +#Define VSCLASS_COMBOBOX Strconv("COMBOBOX"+0h00,5) +#Define VSCLASS_COMBOBOXSTYLE Strconv("COMBOBOXSTYLE"+0h00,5) +#Define VSCLASS_COMMUNICATIONS Strconv("COMMUNICATIONS"+0h00,5) +#Define VSCLASS_COMMUNICATIONSSTYLE Strconv("COMMUNICATIONSSTYLE"+0h00,5) +#Define VSCLASS_CONTROLPANEL Strconv("CONTROLPANEL"+0h00,5) +#Define VSCLASS_CONTROLPANELSTYLE Strconv("CONTROLPANELSTYLE"+0h00,5) +#Define VSCLASS_DATEPICKER Strconv("DATEPICKER"+0h00,5) +#Define VSCLASS_DATEPICKERSTYLE Strconv("DATEPICKERSTYLE"+0h00,5) +#Define VSCLASS_DRAGDROP Strconv("DRAGDROP"+0h00,5) +#Define VSCLASS_DRAGDROPSTYLE Strconv("DRAGDROPSTYLE"+0h00,5) +#Define VSCLASS_EDIT Strconv("EDIT"+0h00,5) +#Define VSCLASS_EDITSTYLE Strconv("EDITSTYLE"+0h00,5) +#Define VSCLASS_EXPLORERBAR Strconv("EXPLORERBAR"+0h00,5) +#Define VSCLASS_EXPLORERBARSTYLE Strconv("EXPLORERBARSTYLE"+0h00,5) +#Define VSCLASS_FLYOUT Strconv("FLYOUT"+0h00,5) +#Define VSCLASS_FLYOUTSTYLE Strconv("FLYOUTSTYLE"+0h00,5) +#Define VSCLASS_HEADER Strconv("HEADER"+0h00,5) +#Define VSCLASS_HEADERSTYLE Strconv("HEADERSTYLE"+0h00,5) +#Define VSCLASS_LISTBOX Strconv("LISTBOX"+0h00,5) +#Define VSCLASS_LISTBOXSTYLE Strconv("LISTBOXSTYLE"+0h00,5) +#Define VSCLASS_LISTVIEW Strconv("LISTVIEW"+0h00,5) +#Define VSCLASS_LISTVIEWSTYLE Strconv("LISTVIEWSTYLE"+0h00,5) +#Define VSCLASS_MENU Strconv("MENU"+0h00,5) +#Define VSCLASS_MENUSTYLE Strconv("MENUSTYLE"+0h00,5) +#Define VSCLASS_NAVIGATION Strconv("NAVIGATION"+0h00,5) +#Define VSCLASS_PROGRESS Strconv("PROGRESS"+0h00,5) +#Define VSCLASS_PROGRESSSTYLE Strconv("PROGRESSSTYLE"+0h00,5) +#Define VSCLASS_REBAR Strconv("REBAR"+0h00,5) +#Define VSCLASS_REBARSTYLE Strconv("REBARSTYLE"+0h00,5) +#Define VSCLASS_SCROLLBAR Strconv("SCROLLBAR"+0h00,5) +#Define VSCLASS_SCROLLBARSTYLE Strconv("SCROLLBARSTYLE"+0h00,5) +#Define VSCLASS_SPIN Strconv("SPIN"+0h00,5) +#Define VSCLASS_SPINSTYLE Strconv("SPINSTYLE"+0h00,5) +#Define VSCLASS_STATUS Strconv("STATUS"+0h00,5) +#Define VSCLASS_STATUSSTYLE Strconv("STATUSSTYLE"+0h00,5) +#Define VSCLASS_TAB Strconv("TAB"+0h00,5) +#Define VSCLASS_TABSTYLE Strconv("TABSTYLE"+0h00,5) +#Define VSCLASS_TASKDIALOG Strconv("TASKDIALOG"+0h00,5) +#Define VSCLASS_TASKDIALOGSTYLE Strconv("TASKDIALOGSTYLE"+0h00,5) +#Define VSCLASS_TEXTSTYLE Strconv("TEXTSTYLE"+0h00,5) +#Define VSCLASS_TOOLBAR Strconv("TOOLBAR"+0h00,5) +#Define VSCLASS_TOOLBARSTYLE Strconv("TOOLBARSTYLE"+0h00,5) +#Define VSCLASS_TOOLTIP Strconv("TOOLTIP"+0h00,5) +#Define VSCLASS_TOOLTIPSTYLE Strconv("TOOLTIPSTYLE"+0h00,5) +#Define VSCLASS_TRACKBAR Strconv("TRACKBAR"+0h00,5) +#Define VSCLASS_TRACKBARSTYLE Strconv("TRACKBARSTYLE"+0h00,5) +#Define VSCLASS_TREEVIEW Strconv("TREEVIEW"+0h00,5) +#Define VSCLASS_TREEVIEWSTYLE Strconv("TREEVIEWSTYLE"+0h00,5) +#Define VSCLASS_WINDOW Strconv("WINDOW"+0h00,5) +#Define VSCLASS_WINDOWSTYLE Strconv("WINDOWSTYLE"+0h00,5) + + +******************************************************************************** +* FROM FOXPRO.H +******************************************************************************** + +*!* Sysmetric() parameter values +#Define SYSMETRIC_SCREENWIDTH 1 && Screen width +#Define SYSMETRIC_SCREENHEIGHT 2 && Screen width +#Define SYSMETRIC_SIZINGBORDERWIDTH 3 && Width of the sizing border around a resizable window +#Define SYSMETRIC_SIZINGBORDERHEIGHT 4 && Height of the sizing border around a resizable window +#Define SYSMETRIC_VSCROLLBARWIDTH 5 && Width of a vertical scroll bar +#Define SYSMETRIC_VSCROLLBARHEIGHT 6 && Height of the arrow bitmap on a vertical scroll bar +#Define SYSMETRIC_HSCROLLBARWIDTH 7 && Width of the arrow bitmap on a horizontal scroll bar +#Define SYSMETRIC_HSCROLLBARHEIGHT 8 && Height of a horizontal scroll bar +#Define SYSMETRIC_WINDOWTITLEHEIGHT 9 && Height of window title (caption) area +#Define SYSMETRIC_WINDOWBORDERWIDTH 10 && Width of a window border +#Define SYSMETRIC_WINDOWBORDERHEIGHT 11 && Height of a window border +#Define SYSMETRIC_WINDOWFRAMEWIDTH 12 && Width of the frame around the perimeter of a window that has a caption but is not sizable +#Define SYSMETRIC_WINDOWFRAMEHEIGHT 13 && Height of the frame around the perimeter of a window that has a caption but is not sizable +#Define SYSMETRIC_THUMBBOXWIDTH 14 && Width of the thumb box in a horizontal scroll bar +#Define SYSMETRIC_THUMBBOXHEIGHT 15 && Height of the thumb box in a vertical scroll bar +#Define SYSMETRIC_ICONWIDTH 16 && Width of an icon +#Define SYSMETRIC_ICONHEIGHT 17 && Height of an icon +#Define SYSMETRIC_CURSORWIDTH 18 && Width of a cursor +#Define SYSMETRIC_CURSORHEIGHT 19 && Height of a cursor +#Define SYSMETRIC_MENUBAR 20 && Height of a single-line menu bar +#Define SYSMETRIC_CLIENTWIDTH 21 && Width of the client area for a full-screen window +#Define SYSMETRIC_CLIENTHEIGHT 22 && Height of the client area for a full-screen window +#Define SYSMETRIC_KANJIWINHEIGHT 23 && Height of the Kanji window at the bottom of the screen in DBCS versions +#Define SYSMETRIC_MINDRAGWIDTH 24 && Minimum tracking width of a window. (The user cannot drag the window frame to a size smaller than this) +#Define SYSMETRIC_MINDRAGHEIGHT 25 && Minimum tracking height of a window. (The user cannot drag the window frame to a size smaller than this) +#Define SYSMETRIC_MINWINDOWWIDTH 26 && Minimum width of a window +#Define SYSMETRIC_MINWINDOWHEIGHT 27 && Minimum height of a window +#Define SYSMETRIC_TITLEBARBUTTONWIDTH 28 && Width of a title bar button +#Define SYSMETRIC_TITLEBARBUTTONHEIGHT 29 && Height of a title bar button +#Define SYSMETRIC_MOUSEPRESENT 30 && Is mouse present?1 => mouse is installed, 0 => no mouse is installed +#Define SYSMETRIC_DEBUGVERSION 31 && Is this a debug version?1 => debug version, 0 => retail version +#Define SYSMETRIC_MOUSEBUTTONSWAP 32 && Are mouse buttons swapped?1 => Yes, 0 => No +#Define SYSMETRIC_HALFHEIGHTBUTTONWIDTH 33 && Width of a button in a half-height title bar +#Define SYSMETRIC_HALFHEIGHTBUTTONHEIGHT 34 && Height of a button in a half-height title bar + +*!* Window Borders +#Define BORDER_NONE 0 +#Define BORDER_SINGLE 1 +#Define BORDER_DOUBLE 2 +#Define BORDER_SYSTEM 3 + +*!* WindowState +#Define WINDOWSTATE_NORMAL 0 && Normal +#Define WINDOWSTATE_MINIMIZED 1 && Minimized +#Define WINDOWSTATE_MAXIMIZED 2 && Maximized + +*!* Toolbar and Form Docking Positions +#Define TOOL_NOTDOCKED -1 +#Define TOOL_TOP 0 +#Define TOOL_LEFT 1 +#Define TOOL_RIGHT 2 +#Define TOOL_BOTTOM 3 +#Define TOOL_TAB 4 +#Define TOOL_LINK 5 + +*!* TYPE() tags +#Define T_BLOB "W" +#Define T_BOOLEAN "L" +#Define T_CHARACTER "C" +#Define T_CURRENCY "Y" +#Define T_DATE "D" +#Define T_DATETIME "T" +#Define T_DOUBLE "B" +#Define T_FLOAT "N" +#Define T_GENERAL "G" +#Define T_INTEGER "N" +#Define T_LOGICAL "L" +#Define T_MEMO "M" +#Define T_NULL "X" +#Define T_NUMERIC "N" +#Define T_OBJECT "O" +#Define T_SCREEN "S" +#Define T_UNDEFINED "U" +#Define T_UNKNOWN "U" +#Define T_VARBINARY "Q" +#Define T_VARCHAR "C" + +*!* Button parameter masks +#Define BUTTON_LEFT 1 +#Define BUTTON_RIGHT 2 +#Define BUTTON_MIDDLE 4 + +*!* Function Parameters +*!* MessageBox parameters +#Define MB_OK 0 && OK button only +#Define MB_OKCANCEL 1 && OK and Cancel buttons +#Define MB_ABORTRETRYIGNORE 2 && Abort, Retry, and Ignore buttons +#Define MB_YESNOCANCEL 3 && Yes, No, and Cancel buttons +#Define MB_YESNO 4 && Yes and No buttons +#Define MB_RETRYCANCEL 5 && Retry and Cancel buttons + +#Define MB_ICONSTOP 16 && Critical message +#Define MB_ICONQUESTION 32 && Warning query +#Define MB_ICONEXCLAMATION 48 && Warning message +#Define MB_ICONINFORMATION 64 && Information message + +#Define MB_APPLMODAL 0 && Application modal message box +#Define MB_DEFBUTTON1 0 && First button is default +#Define MB_DEFBUTTON2 256 && Second button is default +#Define MB_DEFBUTTON3 512 && Third button is default +#Define MB_SYSTEMMODAL 4096 && System Modal + +*!* MousePointer +#Define MOUSE_DEFAULT 0 && 0 - Default +#Define MOUSE_ARROW 1 && 1 - Arrow +#Define MOUSE_CROSSHAIR 2 && 2 - Cross +#Define MOUSE_IBEAM 3 && 3 - I-Beam +#Define MOUSE_ICON_POINTER 4 && 4 - Icon +#Define MOUSE_SIZE_POINTER 5 && 5 - Size +#Define MOUSE_SIZE_NE_SW 6 && 6 - Size NE SW +#Define MOUSE_SIZE_N_S 7 && 7 - Size N S +#Define MOUSE_SIZE_NW_SE 8 && 8 - Size NW SE +#Define MOUSE_SIZE_W_E 9 && 9 - Size W E +#Define MOUSE_UP_ARROW 10 && 10 - Up Arrow +#Define MOUSE_HOURGLASS 11 && 11 - Hourglass +#Define MOUSE_NO_DROP 12 && 12 - No drop +#Define MOUSE_HIDE_POINTER 13 && 13 - Hide Pointer +#Define MOUSE_ARROW2 14 && 14 - Arrow +#Define MOUSE_CUSTOM 99 && 99 - Custom diff --git a/COMUN/utile/ctl32/ctl32.prg b/COMUN/utile/ctl32/ctl32.prg new file mode 100644 index 0000000..945da43 --- /dev/null +++ b/COMUN/utile/ctl32/ctl32.prg @@ -0,0 +1,39 @@ +******************************************************************************** +*!* ctl32.prg +******************************************************************************** +*!* This is the main file for the ctl32 classes. This gets called by +*!* each and every class in the Init event. + +#Include ctl32.h + +*!* Adding this file location to the path list. ADDITIVE is not used, it seems +*!* to have problems with expressions, so to avoid using macro substitution: +If .F. + Local m.lcPath As String + + m.lcPath = Addbs(Justpath(Sys(16))) + + If Empty(Set("Path")) Then + Set Path To (m.lcPath) + Else + If Not m.lcPath $ Set("Path") Then + Set Path To (Set("Path") + ";" + m.lcPath) + Endif + Endif + + *!* Load the main visual classes VCX file: + If Not "CTL32.VCX" $ Upper(Set("Classlib")) Then + Set Classlib To m.lcPath + "ctl32.vcx" Additive + Endif +Endif + +*!* Load ctl32 modules: +Do ctl32_api.prg +Do ctl32_classes.prg +Do ctl32_functions.prg +Do ctl32_structures.prg +Do ctl32_vfp2c32.prg + +Return + + diff --git a/COMUN/utile/ctl32/ctl32.txt b/COMUN/utile/ctl32/ctl32.txt new file mode 100644 index 0000000..9b69629 --- /dev/null +++ b/COMUN/utile/ctl32/ctl32.txt @@ -0,0 +1,25 @@ +ctl32 Classes README FILE - Carlos Alloatti - calloatti@gmail.com + +ctl32_scontainer scrollable container by Carlos Alloatti & Malcolm Greene + +http://www.ctl32.com.ar/ + +TESTED ONLY IN VFP9, Windows 2000, XP, Vista + +This classes are free to use, please contribute reporting bugs, +proposing changes and updates. + +To use these classes you only need the following files added them to your project: + +ctl32.h (excluded) +ctl32.prg +ctl32.vct +ctl32.vcx +ctl32_api.prg +ctl32_classes.prg +ctl32_functions.prg +ctl32_structures.prg +ctl32_vfp2c32.prg +vfpx.vct +vfpx.vcx + diff --git a/COMUN/utile/ctl32/ctl32.vct b/COMUN/utile/ctl32/ctl32.vct new file mode 100644 index 0000000..7566fbc Binary files /dev/null and b/COMUN/utile/ctl32/ctl32.vct differ diff --git a/COMUN/utile/ctl32/ctl32.vcx b/COMUN/utile/ctl32/ctl32.vcx new file mode 100644 index 0000000..71fa950 Binary files /dev/null and b/COMUN/utile/ctl32/ctl32.vcx differ diff --git a/COMUN/utile/ctl32/ctl32_api.prg b/COMUN/utile/ctl32/ctl32_api.prg new file mode 100644 index 0000000..bfbb4d7 --- /dev/null +++ b/COMUN/utile/ctl32/ctl32_api.prg @@ -0,0 +1,1956 @@ +******************************************************************************** +*!* ctl32_api.prg +******************************************************************************** +*!* |http://www.codeplex.com/VFPX/Thread/View.aspx?ThreadId=11535 +*!* GDIPLUSX method of declaring and protecting api declares +*!* 200+ API declares and counting... +******************************************************************************** +#Include ctl32.h + +If Not Sys(16) $ Upper(Set("Procedure")) Then + Set Procedure To Sys(16) Additive +Endif + +Return + +Function apiAppendMenu + Lparameters hMenu, wFlags, uIDNewItem, lpNewItem + Declare Integer AppendMenu In win32api As apiAppendMenu ; + Integer hMenu, ; + Integer wFlags, ; + Integer uIDNewItem, ; + String lpNewItem + Return apiAppendMenu(m.hMenu, m.wFlags, m.uIDNewItem, m.lpNewItem) +Endfunc + +Function apiAttachThreadInput + Lparameters idAttach, idAttachTo, fAttach + Declare Integer AttachThreadInput In win32api As apiAttachThreadInput; + Integer idAttach, ; + Integer idAttachTo, ; + Integer fAttach + Return apiAttachThreadInput(m.idAttach, m.idAttachTo, m.fAttach) +Endfunc + +Function apiBitBlt + Lparameters hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, dwRop + Declare Integer BitBlt In win32api As apiBitBlt ; + Integer hdcDest, ; + Integer nXDest, ; + Integer nYDest, ; + Integer nWidth, ; + Integer nHeight, ; + Integer hdcSrc, ; + Integer nXSrc, ; + Integer nYSrc, ; + Integer dwRop + Return apiBitBlt(m.hdcDest, m.nXDest, m.nYDest, m.nWidth, m.nHeight, m.hdcSrc, m.nXSrc, m.nYSrc, m.dwRop) +Endfunc + +Function apiCallWindowProc + Lparameters lpPrevWndFunc, nhWnd, Msg, wParam, Lparam + Declare Integer CallWindowProc In win32api As apiCallWindowProc ; + Integer lpPrevWndFunc, ; + Integer nhWnd, ; + Integer msg, ; + Integer wParam, ; + Integer Lparam + Return apiCallWindowProc(m.lpPrevWndFunc, m.nhWnd, m.Msg, m.wParam, m.lParam) +Endfunc + +Function apiCheckMenuItem + Lparameters hMenu, uIDCheckItem, uCheck + Declare Integer CheckMenuItem In win32api As apiCheckMenuItem ; + Integer hmenu, ; + Integer uIDCheckItem, ; + Integer uCheck + Return apiCheckMenuItem(m.hMenu, m.uIDCheckItem, m.uCheck) +Endfunc + +Function apiCheckMenuRadioItem + Lparameters hMenu, idFirst, idLast, idCheck, uFlags + Declare Integer CheckMenuRadioItemA In win32api As apiCheckMenuRadioItem ; + Integer hmenu, ; + Integer idFirst, ; + Integer idLast, ; + Integer idCheck, ; + Integer uFlags + Return apiCheckMenuRadioItem(m.hMenu, m.idFirst, m.idLast, m.idCheck, m.uFlags) +Endfunc + +Function apiChildWindowFromPoint + Lparameters nHwndParent, px, py + Declare Integer ChildWindowFromPoint In win32api As apiChildWindowFromPoint ; + Integer nHwndParent,; + Integer px,; + Integer py + Return apiChildWindowFromPoint(m.nHwndParent, m.px, m.py) +Endfunc + +Function apiClientToScreen + Lparameters nhWnd, lpPoint + Declare Integer ClientToScreen In win32api As apiClientToScreen ; + Integer nhWnd, ; + String @lpPoint + Return apiClientToScreen(m.nhWnd, @m.lpPoint) +Endfunc + +Function apiCloseHandle + Lparameters hObject + Declare Integer CloseHandle In win32api As apiCloseHandle ; + Integer hObject + Return apiCloseHandle(m.hObject) +Endfunc + +Function apiClosePrinter + Lparameters hPrinter + Declare Integer ClosePrinter In winspool.drv As apiClosePrinter ; + Integer hPrinter + Return apiClosePrinter(m.hPrinter) +Endfunc + +Function apiCloseThemeData + Lparameters hTheme + If ctlGetOsVersion() >= NTDDI_WINXP + Declare Integer CloseThemeData In uxtheme As apiCloseThemeData ; + Integer hTheme + Return apiCloseThemeData(m.hTheme) + Else + Return 0 + Endif +Endfunc + +Function apiCoCreateGuid + Lparameters pguid + Declare Integer CoCreateGuid In Ole32 As apiCoCreateGuid; + String @pguid + Return apiCoCreateGuid(@m.pguid) +Endfunc + +Function apiColorAdjustLuma + Lparameters clrRGB, nLum, fScale + Declare Integer ColorAdjustLuma In shlwapi.Dll As apiColorAdjustLuma ; + Integer clrRGB, ; + Integer nLum, ; + Integer fScale + Return apiColorAdjustLuma(m.clrRGB, m.nLum, m.fScale) +Endfunc + +Function apiColorRGBToHLS + Lparameters clrRGB, pwHue, pwLuminance, pwSaturation + Declare ColorRGBToHLS In shlwapi.Dll As apiColorRGBToHLS ; + Integer clrRGB,; + Integer @pwHue,; + Integer @pwLuminance,; + Integer @pwSaturation + Return apiColorRGBToHLS(clrRGB, @pwHue, @pwLuminance, @pwSaturation) +Endfunc + +Function apiCommDlgExtendedError() + Declare Integer CommDlgExtendedError In comdlg32.Dll As apiCommDlgExtendedError + Return apiCommDlgExtendedError() +Endfunc + +Function apiCoTaskMemFree + Lparameters Pv + Declare CoTaskMemFree In ole32.Dll As apiCoTaskMemFree ; + Integer Pv + Return apiCoTaskMemFree(m.pv) +Endfunc + +Function apiCreateCompatibleBitmap + Lparameters hdc, nWidth, nHeight + Declare Integer CreateCompatibleBitmap In win32api As apiCreateCompatibleBitmap ; + Integer hdc,; + Integer nWidth,; + Integer nHeight + Return apiCreateCompatibleBitmap(m.hdc, m.nWidth, m.nHeight) +Endfunc + +Function apiCreateCompatibleDC + Lparameters hdc + Declare Integer CreateCompatibleDC In win32api As apiCreateCompatibleDC ; + Integer hdc + Return apiCreateCompatibleDC(m.hdc) +Endfunc + +Function apiCreateFile + Lparameters lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile + Declare Integer CreateFile In win32api As apiCreateFile ; + String lpFileName, ; + Integer dwDesiredAccess, ; + Integer dwShareMode, ; + Integer lpSecurityAttributes, ; + Integer dwCreationDisposition, ; + Integer dwFlagsAndAttributes, ; + Integer hTemplateFile + Return apiCreateFile(m.lpFileName, m.dwDesiredAccess, m.dwShareMode, m.lpSecurityAttributes, m.dwCreationDisposition, m.dwFlagsAndAttributes, m.hTemplateFile) +Endfunc + +Function apiCreateFont + Lparameters nHeight, nWidth, nEscapement, nOrientation, fnWeight, fdwItalic, fdwUnderline, fdwStrikeOut, fdwCharSet, fdwOutputPrecision, fdwClipPrecision, fdwQuality, fdwPitchAndFamily, lpszFace + *!* lpszFace + *!* [in] Pointer to a null-terminated String that specifies the typeface + *!* name of the font. The length of this String must not exceed 32 characters, + *!* including the terminating null character. + Declare Integer CreateFont In win32api As apiCreateFont ; + Integer nHeight, ; + Integer nWidth, ; + Integer nEscapement, ; + Integer nOrientation, ; + Integer fnWeight, ; + Integer fdwItalic, ; + Integer fdwUnderline, ; + Integer fdwStrikeOut, ; + Integer fdwCharSet, ; + Integer fdwOutputPrecision, ; + Integer fdwClipPrecision, ; + Integer fdwQuality, ; + Integer fdwPitchAndFamily, ; + String lpszFace + Return apiCreateFont(m.nHeight, m.nWidth, m.nEscapement, m.nOrientation, m.fnWeight, m.fdwItalic, m.fdwUnderline, m.fdwStrikeOut, m.fdwCharSet, m.fdwOutputPrecision, m.fdwClipPrecision, m.fdwQuality, m.fdwPitchAndFamily, m.lpszFace) +Endfunc + +Function apiCreateFontIndirect + Lparameters lpLogFont + Declare Integer CreateFontIndirect In win32api As apiCreateFontIndirect ; + String lpLogFont + Return apiCreateFontIndirect(m.lpLogFont) +Endfunc + +Function apiCreateMenu() + Declare Integer CreateMenu In win32api As apiCreateMenu + Return apiCreateMenu() +Endfunc + +Function apiCreatePatternBrush + Lparameters hBitmap + Declare Integer CreatePatternBrush In gdi32 As apiCreatePatternBrush ; + Integer hBitmap + Return apiCreatePatternBrush(m.hBitmap) +Endfunc + +Function apiCreatePopupMenu() + Declare Integer CreatePopupMenu In win32api As apiCreatePopupMenu + Return apiCreatePopupMenu() +Endfunc + +Function apiCreateRectRgn + Lparameters x1, y1, x2, y2 + Declare Integer CreateRectRgn In win32api As apiCreateRectRgn ; + Integer x1, ; + Integer y1, ; + Integer x2, ; + Integer y2 + Return apiCreateRectRgn(m.x1, m.y1, m.x2, m.y2) +Endfunc + +Function apiCreateSolidBrush + Lparameters crColor + Declare Integer CreateSolidBrush In win32api As apiCreateSolidBrush ; + Integer crColor + Return apiCreateSolidBrush(m.crColor) +Endfunc + +Function apiCreateWindowEx + Lparameters dwExStyle, lpClassName, lpWindowName, dwStyle, nx, ny, nWidth, nHeight, nHwndParent, hMenu, hInstance, lpParam + Declare Integer CreateWindowEx In win32api As apiCreateWindowEx ; + Integer dwExStyle, ; + String lpClassName, ; + String lpWindowName, ; + Integer dwStyle, ; + Integer nx, ; + Integer ny, ; + Integer nWidth, ; + Integer nHeight, ; + Integer nHwndParent, ; + Integer hMenu, ; + Integer hInstance, ; + Integer lpParam + Return apiCreateWindowEx(m.dwExStyle, m.lpClassName, m.lpWindowName, m.dwStyle, m.nx, m.ny, m.nWidth, m.nHeight, m.nHwndParent, m.hMenu, m.hInstance, m.lpParam) +Endfunc + +Function apiDeleteObject + Lparameters hObject + Declare Integer DeleteObject In win32api As apiDeleteObject; + Integer hObject + Return apiDeleteObject(m.hObject) +Endfunc + +Function apiDeleteUrlCacheEntry + Lparameters lpszUrlName + Declare Integer apiDeleteUrlCacheEntry In wininet.Dll As apiDeleteUrlCacheEntry ; + String lpszUrlName + Return apiDeleteUrlCacheEntry(m.lpszUrlName) +Endfunc + +Function apiDestroyMenu + Lparameters hMenu + Declare Integer DestroyMenu In win32api As apiDestroyMenu; + Integer hMenu + Return apiDestroyMenu(m.hMenu) +Endfunc + +Function apiDestroyWindow + Lparameters nhWnd + Declare Integer DestroyWindow In win32api As apiDestroyWindow ; + Integer nhWnd + Return apiDestroyWindow(m.nhWnd) +Endfunc + +Function apiDrawIconEx + Lparameters hdc, xLeft, yTop, hIcon, cxWidth, cyWidth, istepIfAniCur, hbrFlickerFreeDraw, diFlags + Declare Integer DrawIconEx In win32api As apiDrawIconEx ; + Integer hdc, ; + Integer xLeft, ; + Integer yTop, ; + Integer hIcon, ; + Integer cxWidth, ; + Integer cyWidth, ; + Integer istepIfAniCur, ; + Integer hbrFlickerFreeDraw, ; + Integer diFlags + Return apiDrawIconEx(m.hdc, m.xLeft, m.yTop, m.hIcon, m.cxWidth, m.cyWidth, m.istepIfAniCur, m.hbrFlickerFreeDraw, m.diFlags) +Endfunc + +Function apiDrawThemeBackground + Lparameters hTheme, hdc, iPartId, iStateId, pRect, pClipRect + If ctlGetOsVersion() >= NTDDI_WINXP + Declare Integer DrawThemeBackground In uxtheme As apiDrawThemeBackground ; + Integer hTheme, ; + Integer hdc, ; + Integer iPartId, ; + Integer iStateId, ; + String pRect, ; + String pClipRect + Return apiDrawThemeBackground(m.hTheme, m.hdc, m.iPartId, m.iStateId, m.pRect, m.pClipRect) + Else + Return 0 + Endif +Endfunc + +Function apiEnableMenuItem + Lparameters hMenu, uIDEnableItem, uEnable + Declare Integer EnableMenuItem In win32api As apiEnableMenuItem; + Integer hMenu, ; + Integer uIDEnableItem, ; + Integer uEnable + Return apiEnableMenuItem(m.hMenu, m.uIDEnableItem, m.uEnable) +Endfunc + +Function apiEnableWindow + Lparameters nhWnd, bEnable + Declare Integer EnableWindow In win32api As apiEnableWindow ; + Integer nhWnd, ; + Integer bEnable + Return apiEnableWindow(m.nhWnd, m.bEnable) +Endfunc + +Function apiEndDocPrinter + Lparameters hPrinter + Declare Integer EndDocPrinter In winspool.drv As apiEndDocPrinter; + Integer hPrinter + Return apiEndDocPrinter(m.hPrinter) +Endfunc + +Function apiFileTimeToLocalFileTime + Lparameters lpFileTime, lpLocalFileTime + Declare Integer FileTimeToLocalFileTime In win32api As apiFileTimeToLocalFileTime ; + Integer lpFileTime, ; + Integer lpLocalFileTime + Return apiFileTimeToLocalFileTime(m.lpFileTime, m.lpLocalFileTime) +Endfunc + +Function apiFileTimeToSystemTime + Lparameters lpFileTime, lpSystemTime + Declare Integer FileTimeToSystemTime In win32api As apiFileTimeToSystemTime ; + Integer lpFileTime, ; + Integer lpSystemTime + Return apiFileTimeToSystemTime(m.lpFileTime, m.lpSystemTime) +Endfunc + +Function apiFillRect + Lparameters hdc, lprc, hbr + Declare Integer FillRect In win32api As apiFillRect ; + Integer hDC, ; + Integer lprc, ; + Integer hbr + Return apiFillRect(m.hdc, m.lprc, m.hbr) +Endfunc + +Function apiFindClose + Lparameters hFindFile + Declare Integer FindClose In win32api As apiFindClose ; + Integer hFindFile + Return apiFindClose(m.hFindFile) +Endfunc + +Function apiFindFirstFile + Lparameters lpFileName, lpFindFileData + Declare Integer FindFirstFile In win32api As apiFindFirstFile ; + String lpFileName, ; + Integer lpFindFileData + Return apiFindFirstFile(m.lpFileName, m.lpFindFileData) +Endfunc + +Function apiFindNextFile + Lparameters hFindFile, lpFindFileData + Declare Integer FindNextFile In win32api As apiFindNextFile ; + Integer hFindFile, ; + Integer lpFindFileData + Return apiFindNextFile(m.hFindFile, m.lpFindFileData) +Endfunc + +Function apiFindWindow + Lparameters lpClassName, lpWindowName + Declare Integer FindWindow In win32api As apiFindWindow; + String lpClassName, ; + String lpWindowName + Return apiFindWindow(m.lpClassName, m.lpWindowName) +Endfunc + +Function apiFindWindowEx + Lparameters hWnd1, hWnd2, lpsz1, lpsz2 + Declare Integer FindWindowEx In win32api As apiFindWindowEx ; + Integer hWnd1, ; + Integer hWnd2, ; + String lpsz1, ; + String lpsz2 + Return apiFindWindowEx(m.hWnd1, m.hWnd2, m.lpsz1, m.lpsz2) +Endfunc + +Function apiFormatMessage + Lparameters dwFlags, lpSource, dwMessageId, dwLanguageId, lpBuffer, nSize, Arguments + Declare Integer FormatMessage In win32api As apiFormatMessage ; + Integer dwFlags, ; + Integer lpSource, ; + Integer dwMessageId, ; + Integer dwLanguageId, ; + String @lpBuffer, ; + Integer nSize, ; + Integer Arguments + Return apiFormatMessage(m.dwFlags, m.lpSource, m.dwMessageId, m.dwLanguageId, @m.lpBuffer, m.nSize, m.Arguments) +Endfunc + +Function apiFreeLibrary + Lparameters hLibModule + Declare Integer FreeLibrary In win32api As apiFreeLibrary ; + Integer hLibModule + Return apiFreeLibrary(m.hLibModule) +Endfunc + +Function apiFtpCommand + Lparameters hConnect, fExpectResponse, dwFlags, lpszCommand, dwContext, phFtpCommand + Declare Integer FtpCommand In wininet As apiFtpCommand ; + Integer hConnect, ; + Integer fExpectResponse, ; + Integer dwFlags, ; + String lpszCommand, ; + Integer dwContext, ; + Integer @phFtpCommand + Return apiFtpCommand(m.hConnect, m.fExpectResponse, m.dwFlags, m.lpszCommand, m.dwContext, @m.phFtpCommand) +Endfunc + +Function apiFtpCreateDirectory + Lparameters hConnect, lpszDirectory + Declare Integer FtpCreateDirectory In wininet As apiFtpCreateDirectory ; + Integer hConnect, ; + String lpszDirectory + Return apiFtpCreateDirectory(m.hConnect, m.lpszDirectory) +Endfunc + +Function apiFtpDeleteFile + Lparameters hConnect, lpszFileName + Declare Integer FtpDeleteFile In wininet As apiFtpDeleteFile ; + Integer hConnect, ; + String lpszFileName + Return apiFtpDeleteFile(m.hConnect, m.lpszFileName) +Endfunc + +Function apiFtpFindFirstFile + Lparameters hConnect, lpszSearchFile, lpFindFileData, dwFlags, dwContext + Declare Integer FtpFindFirstFile In wininet As apiFtpFindFirstFile ; + Integer hConnect, ; + String lpszSearchFile, ; + Integer lpFindFileData, ; + Integer dwFlags, ; + Integer dwContext + Return apiFtpFindFirstFile(m.hConnect, m.lpszSearchFile, m.lpFindFileData, m.dwFlags, m.dwContext) +Endfunc + +Function apiFtpGetCurrentDirectory + Lparameters hConnect, lpszCurrentDirectory, lpdwCurrentDirectory + Declare Integer FtpGetCurrentDirectory In wininet As apiFtpGetCurrentDirectory ; + Integer hConnect, ; + String @lpszCurrentDirectory, ; + Integer @lpdwCurrentDirectory + Return apiFtpGetCurrentDirectory(m.hConnect, @m.lpszCurrentDirectory, @m.lpdwCurrentDirectory) +Endfunc + +Function apiFtpGetFile + Lparameters hConnect, lpszRemoteFile, lpszNewFile, fFailIfExists, dwFlagsAndAttributes, dwFlags, dwContext + Declare Integer FtpGetFile In wininet As apiFtpGetFile ; + Integer hConnect, ; + String lpszRemoteFile, ; + String lpszNewFile, ; + Integer fFailIfExists, ; + Integer dwFlagsAndAttributes, ; + Integer dwFlags, ; + Integer dwContext + Return apiFtpGetFile(m.hConnect, m.lpszRemoteFile, m.lpszNewFile, m.fFailIfExists, m.dwFlagsAndAttributes, m.dwFlags, m.dwContext) +Endfunc + +Function apiFtpGetFileSize + Lparameters hFile, lpdwFileSizeHigh + Declare Integer FtpGetFileSize In wininet As apiFtpGetFileSize ; + Integer hFile, ; + Integer @lpdwFileSizeHigh + Return apiFtpGetFileSize(m.hFile, @m.lpdwFileSizeHigh) +Endfunc + +Function apiFtpOpenFile + Lparameters hConnect, lpszFileName, dwAccess, dwFlags, dwContext + Declare Integer FtpOpenFile In wininet As apiFtpOpenFile ; + Integer hConnect, ; + String lpszFileName, ; + Integer dwAccess, ; + Integer dwFlags, ; + Integer dwContext + Return apiFtpOpenFile(m.hConnect, m.lpszFileName, m.dwAccess, m.dwFlags, m.dwContext) +Endfunc + +Function apiFtpPutFile + Lparameters hConnect, lpszLocalFile, lpszNewRemoteFile, dwFlags, dwContext + Declare Integer FtpPutFile In wininet As apiFtpPutFile ; + Integer hConnect, ; + String lpszLocalFile, ; + String lpszNewRemoteFile, ; + Integer dwFlags, ; + Integer dwContext + Return apiFtpPutFile(m.hConnect, m.lpszLocalFile, m.lpszNewRemoteFile, m.dwFlags, m.dwContext) +Endfunc + +Function apiFtpRemoveDirectory + Lparameters hConnect, lpszDirectory + Declare Integer FtpRemoveDirectory In wininet As apiFtpRemoveDirectory ; + Integer hConnect, ; + String lpszDirectory + Return apiFtpRemoveDirectory(m.hConnect, m.lpszDirectory) +Endfunc + +Function apiFtpRenameFile + Lparameters hConnect, lpszExisting, lpszNew + Declare Integer FtpRenameFile In wininet As apiFtpRenameFile ; + Integer hConnect, ; + String lpszExisting, ; + String lpszNew + Return apiFtpRenameFile(m.hConnect, m.lpszExisting, m.lpszNew) +Endfunc + +Function apiFtpSetCurrentDirectory + Lparameters hConnect, lpszDirectory + Declare Integer FtpSetCurrentDirectory In wininet As apiFtpSetCurrentDirectory ; + Integer hConnect, ; + String lpszDirectory + Return apiFtpSetCurrentDirectory(m.hConnect, m.lpszDirectory) +Endfunc + +Function apiGetActiveWindow() + Declare Integer GetActiveWindow In win32api As apiGetActiveWindow + Return apiGetActiveWindow() +Endfunc + +Function apiGetCaretPos + Lparameters lpPoint + Declare Integer GetCaretPos In win32api As apiGetCaretPos; + String @lpPoint + Return apiGetCaretPos(@m.lpPoint) +Endfunc + +Function apiGetClassLong + Lparameters nhWnd, nIndex + Declare Integer GetClassLong In win32api As apiGetClassLong; + Integer nhWnd, ; + Integer nIndex + Return apiGetClassLong(m.nhWnd, m.nIndex) +Endfunc + +Function apiGetClientRect + Lparameters nhWnd, lcRect + Declare Integer GetClientRect In win32api As apiGetClientRect ; + Integer nhWnd,; + String @lcRect + Return apiGetClientRect(m.nhWnd, @m.lcRect) +Endfunc + +Function apiGetCursorPos + Lparameters lpPoint + Declare Integer GetCursorPos In win32api As apiGetCursorPos; + String @lpPoint + Return apiGetCursorPos(@m.lpPoint) +Endfunc + +Function apiGetDateFormat + Lparameters Locale, dwFlags, lpDate, lpFormat, lpDateStr, cchDate + Declare Integer GetDateFormat In win32api As apiGetDateFormat ; + Integer Locale, ; + Integer dwFlags, ; + String lpDate, ; + String lpFormat, ; + String @lpDateStr, ; + Integer cchDate + Return apiGetDateFormat(m.Locale, m.dwFlags, m.lpDate, m.lpFormat, @m.lpDateStr, m.cchDate) +Endfunc + +Function apiGetDC + Lparameters nhWnd + Declare Integer GetDC In win32api As apiGetDC ; + Integer nhWnd + Return apiGetDC(m.nhWnd) +Endfunc + +Function apiGetDesktopWindow() + Declare Integer GetDesktopWindow In win32api As apiGetDesktopWindow + Return apiGetDesktopWindow() +Endfunc + +Function apiGetDeviceCaps + Lparameters hdc, nIndex + Declare Integer GetDeviceCaps In win32api As apiGetDeviceCaps ; + Integer hdc, ; + Integer nIndex + Return apiGetDeviceCaps(m.hdc, m.nIndex) +Endfunc + +Function apiGetDoubleClickTime() + Declare Integer GetDoubleClickTime In win32api As apiGetDoubleClickTime + Return apiGetDoubleClickTime() +Endfunc + +Function apiGetFileSizeEx + Lparameters hFile, lpFileSize + Declare Integer GetFileSizeEx In win32api As apiGetFileSizeEx ; + Integer hFile, ; + String @lpFileSize + Return apiGetFileSizeEx(m.hFile, @m.lpFileSize) +Endfunc + +Function apiGetFocus() + Declare Integer GetFocus In win32api As apiGetFocus + Return apiGetFocus() +Endfunc + +Function apiGetForegroundWindow() + Declare Integer GetForegroundWindow In win32api As apiGetForegroundWindow + Return apiGetForegroundWindow() +Endfunc + +Function apiGetIpAddrTable + Lparameters pIpAddrTable, pdwSize, nbOrder + Declare Integer GetIpAddrTable In iphlpapi As apiGetIpAddrTable ; + String @pIpAddrTable, ; + Integer @pdwSize, ; + Integer nbOrder + Return apiGetIpAddrTable(@m.pIpAddrTable, @m.pdwSize, m.nbOrder) +Endfunc + +Function apiGetKeyState + Lparameters nVirtKey + Declare Integer GetKeyState In win32api As apiGetKeyState ; + Integer nVirtKey + Return apiGetKeyState(m.nVirtKey) +Endfunc + +Function apiGetLastError() + Declare Integer GetLastError In win32api As apiGetLastError + Return apiGetLastError() +Endfunc + +Function apiGetLocaleInfo + Lparameters Locale, LCType, lpLCData, cchData + Declare Integer GetLocaleInfo In win32api As apiGetLocaleInfo; + Integer Locale, ; + Integer LCType, ; + String @lpLCData, ; + Integer cchData + Return apiGetLocaleInfo(m.Locale, m.LCType, @m.lpLCData, m.cchData) +Endfunc + +Function apiGetMenu + Lparameters nhWnd + Declare Integer GetMenu In win32api As apiGetMenu ; + Integer nhWnd + Return apiGetMenu(m.nhWnd) +Endfunc + +Function apiGetMenuBarInfo + Lparameters nhWnd, idObject, idItem, pmbi + Declare Integer GetMenuBarInfo In win32api As apiGetMenuBarInfo ; + Integer nhWnd, ; + Integer idObject, ; + Integer idItem, ; + String @pmbi + Return apiGetMenuBarInfo(m.nhWnd, m.idObject, m.idItem, m.pmbi) +Endfunc + +Function apiGetMenuCheckMarkDimensions() + *!* The GetMenuCheckMarkDimensions function is included only for compatibility + *!* with 16-bit versions of Microsoft Windows. Applications should use the + *!* GetSystemMetrics function with the CXMENUCHECK and CYMENUCHECK values to + *!* retrieve the bitmap dimensions. + Return apiGetSystemMetrics(SM_CXMENUCHECK) + apiGetSystemMetrics(SM_CYMENUCHECK) * 0x10000 +Endfunc + +Function apiGetMenuContextHelpId + Lparameters hMenu + Declare Integer GetMenuContextHelpId In win32api As apiGetMenuContextHelpId ; + Integer hMenu + Return apiGetMenuContextHelpId(m.hMenu) +Endfunc + +Function apiGetMenuDefaultItem + Lparameters hMenu, fByPos, gmdiFlags + Declare Integer GetMenuDefaultItem In win32api As apiGetMenuDefaultItem ; + Integer hMenu, ; + Integer fByPos, ; + Integer gmdiFlags + Return apiGetMenuDefaultItem(m.hMenu, m.fByPos, m.gmdiFlags) +Endfunc + +Function apiGetMenuInfo + Lparameters hMenu, lpcmi + Declare Integer GetMenuInfo In win32api As apiGetMenuInfo ; + Integer hmenu, ; + String @lpcmi + Return apiGetMenuInfo(m.hMenu, m.lpcmi) +Endfunc + +Function apiGetMenuItemCount + Lparameters hMenu + Declare Integer GetMenuItemCount In win32api As apiGetMenuItemCount ; + Integer hMenu + Return apiGetMenuItemCount(m.hMenu) +Endfunc + +Function apiGetMenuItemID + Lparameters hMenu, nPos + Declare Integer GetMenuItemID In win32api As apiGetMenuItemID ; + Integer hMenu, ; + Integer nPos + Return apiGetMenuItemID(m.hMenu, m.nPos) +Endfunc + +Function apiGetMenuItemInfo + Lparameters hMenu, uItem, fByPosition, lpmii + Declare Integer GetMenuItemInfo In win32api As apiGetMenuItemInfo ; + Integer hMenu, ; + Integer uItem, ; + Integer fByPosition, ; + String @lpmii + Return apiGetMenuItemInfo(m.hMenu, m.uItem, m.fByPosition, @m.lpmii) +Endfunc + +Function apiGetMenuItemRect + Lparameters nhWnd, hMenu, uItem, lprcItem + Declare Integer GetMenuItemRect In win32api As apiGetMenuItemRect ; + Integer nhWnd, ; + Integer hMenu, ; + Integer uItem, ; + String @lprcItem + Return apiGetMenuItemRect(m.nhWnd, m.hMenu, m.uItem, @m.lprcItem) +Endfunc + +Function apiGetMenuState + Lparameters hMenu, uID, uwFlags + Declare Integer GetMenuState In win32api As apiGetMenuState ; + Integer hMenu, ; + Integer uID, ; + Integer uFlags + Return apiGetMenuState(m.hMenu, m.uID, m.uwFlags) +Endfunc + +Function apiGetMenuString + Lparameters hMenu, uIDItem , lpString , nMaxCount , uFlag + Declare Integer GetMenuString In win32api As apiGetMenuString ; + Integer hMenu, ; + Integer uIDItem, ; + String @lpString, ; + Integer nMaxCount, ; + Integer uFlag + Return apiGetMenuString(m.hMenu, m.uIDItem , @m.lpString , m.nMaxCount , m.uFlag) +Endfunc + +Function apiGetModuleHandle + Lparameters lpModule + Declare Integer GetModuleHandle In win32api As apiGetModuleHandle ; + String lpModule + Return apiGetModuleHandle(m.lpModule) +Endfunc + +Function apiGetMonitorInfo + Lparameters hMonitor, lpmi + Declare Integer GetMonitorInfo In win32api As apiGetMonitorInfo ; + Integer hMonitor, ; + Integer lpmi + Return apiGetMonitorInfo(m.hMonitor, m.lpmi) +Endfunc + +Function apiGetObject + Lparameters hObject, nCount, lpObject +*#beautify keyword_nochange + Declare Integer GetObject In win32api as apiGetObject ; + Integer hObject, ; + Integer nCount, ; + String @lpObject +*#beautify + Return apiGetObject(m.hObject, m.nCount, @m.lpObject) +Endfunc + +Function apiGetOpenFileName + Lparameters m.lpofn + Declare Integer GetOpenFileName In comdlg32.Dll As apiGetOpenFileName ; + Integer lpofn + Return apiGetOpenFileName(m.lpofn) +Endfunc + +Function apiGetParent + Lparameters nhWnd + Declare Integer GetParent In win32api As apiGetParent; + Integer nhWnd + Return apiGetParent(m.nhWnd) +Endfunc + +Function apiGetPixel + Lparameters hdc, pointx, pointy + Declare Integer GetPixel In win32api As apiGetPixel ; + Integer hdc,; + Integer pointx,; + Integer pointy + Return apiGetPixel(m.hdc, m.pointx, m.pointy) +Endfunc + +Function apiGetPrivateProfileString + Lparameters lpAppName, lpKeyName, lpDefault, lpReturnedString, nSize, lpFileName + Declare Integer GetPrivateProfileString In win32api As apiGetPrivateProfileString ; + String lpAppName,; + String lpKeyName,; + String lpDefault,; + String @lpReturnedString,; + Integer nSize,; + String lpFileName + Return apiGetPrivateProfileString(m.lpAppName, m.lpKeyName, m.lpDefault, @m.lpReturnedString, m.nSize, m.lpFileName) +Endfunc + +Function apiGetProcAddress + Lparameters hModule, lpProcName + Declare Integer GetProcAddress In win32api As apiGetProcAddress; + Integer hModule, ; + String lpProcName + Return apiGetProcAddress(m.hModule, m.lpProcName) +Endfunc + +Function apiGetProcessHeap() + Declare Integer GetProcessHeap In win32api As apiGetProcessHeap + Return apiGetProcessHeap() +Endfunc + +Function apiGetProp + Lparameters nhWnd, lpString + Declare Integer GetProp In win32api As apiGetProp ; + Integer nhWnd, ; + String lpString + Return apiGetProp(m.nhWnd, m.lpString) +Endfunc + +Function apiGetSaveFileName + Lparameters m.lpofn + Declare Integer GetSaveFileName In comdlg32.Dll As apiGetSaveFileName ; + Integer lpofn + Return apiGetSaveFileName(m.lpofn) +Endfunc + +Function apiGetScrollPos + Lparameters nWnd, nBar + Declare Integer GetScrollPos In win32api As apiGetScrollPos ; + Integer nhWnd, ; + Integer nBar + Return apiGetScrollPos(m.nWnd, m.nBar) +Endfunc + +Function apiGetScrollRange + Lparameters nhWnd, nBar, lpMinPos, lpMaxPos + Declare Integer GetScrollRange In win32api As apiGetScrollRange ; + Integer nhWnd, ; + Integer nBar, ; + Integer @lpMinPos, ; + Integer @lpMaxPos + Return apiGetScrollRange(m.nhWnd, m.nBar, @m.lpMinPos, @m.lpMaxPos) +Endfunc + +Function apiGetStockObject + Lparameters fnObject + Declare Integer GetStockObject In win32api As apiGetStockObject ; + Integer fnObject + Return apiGetStockObject(m.fnObject) +Endfunc + +Function apiGetSubMenu + Lparameters hMenu, nPos + Declare Integer GetSubMenu In win32api As apiGetSubMenu ; + Integer hMenu, ; + Integer nPos + Return apiGetSubMenu(m.hMenu, m.nPos) +Endfunc + +Function apiGetSysColor + Lparameters nIndex + Declare Integer GetSysColor In win32api As apiGetSysColor ; + Integer nIndex + Return apiGetSysColor(m.nIndex) +Endfunc + +Function apiGetSystemMetrics + Lparameters nIndex + Declare Integer GetSystemMetrics In win32api As apiGetSystemMetrics ; + Integer nIndex + Return apiGetSystemMetrics(m.nIndex) +Endfunc + +Function apiGetTextExtentPoint32 + Lparameters hdc, lpsz, cbString, lpSize + Declare Integer GetTextExtentPoint32 In win32api As apiGetTextExtentPoint32 ; + Integer hdc, ; + String lpsz, ; + Integer cbString, ; + String @lpSize + Return apiGetTextExtentPoint32(m.hdc, m.lpsz, m.cbString, @m.lpSize) +Endfunc + +Function apiGetThemeBitmap + Lparameters hTheme, iPartId, iStateId , iPropId, dwFlags, phBitmap + If ctlGetOsVersion() >= NTDDI_VISTA + Declare Integer GetThemeBitmap In uxtheme As apiGetThemeBitmap ; + Integer hTheme, ; + Integer iPartId, ; + Integer iStateId, ; + Integer dwFlags, ; + Integer @phBitmap + Return apiGetThemeBitmap(m.hTheme, m.iPartId, m.iStateId , m.iPropId, m.dwFlags, m.phBitmap) + Else + Return 0 + Endif +Endfunc + +Function apiGetThemeColor + Lparameters hTheme, iPartId , iStateId , iPropId, pColor + If ctlGetOsVersion() >= NTDDI_WINXP + Declare Integer GetThemeColor In uxtheme As apiGetThemeColor ; + Integer hTheme, ; + Integer iPartId, ; + Integer iStateId, ; + Integer iPropId, ; + Integer @pColor + Return apiGetThemeColor(m.hTheme, m.iPartId , m.iStateId , m.iPropId , @m.pColor ) + Else + Return ERROR_INVALID_FUNCTION + Endif +Endfunc + +Function apiGetThemePartSize + Lparameters hTheme, hdc, iPartId, iStateId, prc, eSize, psz + If ctlGetOsVersion() >= NTDDI_WINXP + Declare Integer GetThemePartSize In uxtheme As apiGetThemePartSize ; + Integer hTheme, ; + Integer hdc, ; + Integer iPartId, ; + Integer iStateId, ; + String prc, ; + Integer eSize, ; + String @psz + Return apiGetThemePartSize(m.hTheme, m.hdc, m.iPartId, m.iStateId, m.prc, m.eSize, @m.psz) + Else + Return 0 + Endif +Endfunc + +Function apiGetTickCount() + Declare Integer GetTickCount In win32api As apiGetTickCount + Return apiGetTickCount() +Endfunc + +Function apiGetUserName + Lparameters lpBuffer, nSize + Declare Integer GetUserName In advapi32 As apiGetUserName; + String @lpBuffer,; + Integer @nSize + Return apiGetUserName(@m.lpBuffer, @m.nSize) +Endfunc + +Function apiGetWindow + Lparameters nhWnd, wCmd + Declare Integer GetWindow In win32api As apiGetWindow; + Integer nhWnd, ; + Integer wCmd + Return apiGetWindow(m.nhWnd, m.wCmd) +Endfunc + +Function apiGetWindowLong + Lparameters nhWnd, nIndex + Declare Integer GetWindowLong In win32api As apiGetWindowLong; + Integer nhWnd, ; + Integer nIndex + Return apiGetWindowLong(m.nhWnd, m.nIndex) +Endfunc + +Function apiGetWindowPlacement + Lparameters nhWnd, lpwndpl + Declare Integer GetWindowPlacement In win32api As apiGetWindowPlacement ; + Integer nhWnd, ; + Integer lpwndpl + Return apiGetWindowPlacement(m.nhWnd, m.lpwndpl) +Endfunc + +Function apiGetWindowRect + Lparameters nhWnd, lpRect + Declare Integer GetWindowRect In win32api As apiGetWindowRect ; + Integer nhWnd, ; + Integer lpRect + Return apiGetWindowRect(m.nhWnd, m.lpRect) +Endfunc + +Function apiGetWindowThreadProcessId + Lparameters nhWnd, lpdwProcessId + Declare Integer GetWindowThreadProcessId In win32api As apiGetWindowThreadProcessId; + Integer nhWnd, ; + Integer lpdwProcessId + Return apiGetWindowThreadProcessId(m.nhWnd, m.lpdwProcessId) +Endfunc + +Function apiHeapAlloc + Lparameters hHeap, dwFlags, dwBytes + Declare Integer HeapAlloc In win32api As apiHeapAlloc ; + Integer hHeap, ; + Integer dwFlags, ; + Integer dwBytes + Return apiHeapAlloc(m.hHeap, m.dwFlags, m.dwBytes) +Endfunc + +Function apiHeapFree + Lparameters hHeap, dwFlags, lpMem + Declare Integer HeapFree In win32api As apiHeapFree; + Integer hHeap, ; + Integer dwFlags, ; + Integer lpMem + Return apiHeapFree(m.hHeap, m.dwFlags, m.lpMem) +Endfunc + +Function apiHeapSize + Lparameters hHeap, dwFlags, lpMem + Declare Integer HeapSize In win32api As apiHeapSize; + Integer hHeap, ; + Integer dwFlags, ; + Integer lpMem + Return apiHeapSize(m.hHeap, m.dwFlags, m.lpMem) +Endfunc + +Function apiInitCommonControlsEx + Lparameters lpInitCtrls + Declare Integer InitCommonControlsEx In comctl32 As apiInitCommonControlsEx ; + String lpInitCtrls + Return apiInitCommonControlsEx(m.lpInitCtrls) +Endfunc + +Function apiInsertMenuItem + Lparameters hMenu, uItem, fByPosition, lpmii + Declare Integer InsertMenuItem In win32api As apiInsertMenuItem ; + Integer hMenu, ; + Integer uItem, ; + Integer fByPosition, ; + String @lpmii + Return apiInsertMenuItem(m.hMenu, m.uItem, m.fByPosition, @lpmii) +Endfunc + +Function apiInternetAttemptConnect + Lparameters dwReserved + Declare Integer InternetAttemptConnect In wininet As apiInternetAttemptConnect ; + Integer dwReserved + Return apiInternetAttemptConnect(m.dwReserved) +Endfunc + +Function apiInternetAutodial + Lparameters dwFlags, hwndParent + Declare Integer InternetAutodial In wininet As apiInternetAutodial ; + Integer dwFlags, ; + Integer hwndParent + Return apiInternetAutodial(m.dwFlags, m.hwndParent) +Endfunc + +Function apiInternetCloseHandle + Lparameters hInternet + Declare Integer InternetCloseHandle In wininet As apiInternetCloseHandle ; + Integer hInternet + Return apiInternetCloseHandle(m.hInternet) +Endfunc + +Function apiInternetConnect + Lparameters hInternet, lpszServerName, nServerPort, lpszUserName, lpszPassword, dwService, dwFlags, dwContext + Declare Integer InternetConnect In wininet As apiInternetConnect ; + Integer hInternet, ; + String lpszServerName, ; + Integer nServerPort, ; + String lpszUserName, ; + String lpszPassword, ; + Integer dwService, ; + Integer dwFlags, ; + Integer dwContext + Return apiInternetConnect(m.hInternet, m.lpszServerName, m.nServerPort, m.lpszUserName, m.lpszPassword, m.dwService, m.dwFlags, m.dwContext) +Endfunc + +Function apiInternetCrackUrl + Lparameters lpszUrl, dwUrlLength, dwFlags, lpUrlComponents + Declare Integer InternetCrackUrl In wininet As apiInternetCrackUrl ; + String lpszUrl, ; + Integer dwUrlLength, ; + Integer dwFlags, ; + String @lpUrlComponents + Return apiInternetCrackUrl(m.lpszUrl, m.dwUrlLength, m.dwFlags, @m.lpUrlComponents) +Endfunc + +Function apiInternetErrorDlg + Lparameters nhWnd, hRequest, dwError, dwFlags, lppvData + Declare Integer InternetErrorDlg In wininet As apiInternetErrorDlg ; + Integer nhWnd, ; + Integer hRequest, ; + Integer dwError, ; + Integer dwFlags, ; + Integer lppvData + Return apiInternetErrorDlg(m.nhWnd, m.hRequest, m.dwError, m.dwFlags, m.lppvData) +Endfunc + +Function apiInternetFindNextFile + Lparameters hFind, lpFindFileData + Declare Integer InternetFindNextFile In wininet As apiInternetFindNextFile ; + Integer hFind, ; + Integer lpFindFileData + Return apiInternetFindNextFile(m.hFind, m.lpFindFileData) +Endfunc + +Function apiInternetGetLastResponseInfo + Lparameters lpdwError, lpszBuffer, lpdwBufferLength + Declare Integer InternetGetLastResponseInfo In wininet As apiInternetGetLastResponseInfo ; + Integer @lpdwError, ; + String @lpszBuffer, ; + Integer @lpdwBufferLength + Return apiInternetGetLastResponseInfo(@m.lpdwError, @m.lpszBuffer, @m.lpdwBufferLength) +Endfunc + +Function apiInternetOpen + Lparameters lpszAgent, dwAccessType, lpszProxy, lpszProxyBypass, dwFlags + Declare Integer InternetOpen In wininet As apiInternetOpen ; + String lpszAgent, ; + Integer dwAccessType, ; + String lpszProxy, ; + String lpszProxyBypass, ; + Integer dwFlags + Return apiInternetOpen(m.lpszAgent, m.dwAccessType, m.lpszProxy, m.lpszProxyBypass, m.dwFlags) +Endfunc + +Function apiInternetQueryDataAvailable + Lparameters hFile, lpdwNumberOfBytesAvailable, dwFlags, dwContext + Declare Integer InternetQueryDataAvailable In wininet As apiInternetQueryDataAvailable ; + Integer hFile, ; + Integer @lpdwNumberOfBytesAvailable, ; + Integer dwFlags, ; + Integer dwContext + Return apiInternetQueryDataAvailable(m.hFile, @m.lpdwNumberOfBytesAvailable, m.dwFlags, m.dwContext) +Endfunc + +Function apiInternetQueryOption + Lparameters hInternet, dwOption, lpBuffer, lpdwBufferLength + Declare Integer InternetQueryOption In wininet As apiInternetQueryOption ; + Integer hInternet, ; + Integer dwOption, ; + String @lpBuffer, ; + Integer @lpdwBufferLength + Return apiInternetQueryOption(m.hInternet, m.dwOption, @m.lpBuffer, @m.lpdwBufferLength) +Endfunc + +Function apiInternetReadFile + Lparameters hFile, lpBuffer, dwNumberOfBytesToRead, lpdwNumberOfBytesRead + Declare Integer InternetReadFile In wininet As apiInternetReadFile ; + Integer hFile, ; + String @lpBuffer, ; + Integer dwNumberOfBytesToRead, ; + Integer @lpdwNumberOfBytesRead + Return apiInternetReadFile(m.hFile, @m.lpBuffer, m.dwNumberOfBytesToRead, @m.lpdwNumberOfBytesRead) +Endfunc + +Function apiInternetReadFileEx + Lparameters hFile, lpBuffersOut, dwFlags, dwContext + Declare Integer InternetReadFileEx In wininet As apiInternetReadFileEx ; + Integer hFile, ; + String @lpBuffersOut, ; + Integer dwFlags, ; + Integer dwContext + Return apiInternetReadFileEx(m.hFile, m.lpBuffersOut, m.dwFlags, m.dwContext) +Endfunc + +Function apiInternetSetFilePointer + Lparameters hFile, lDistanceToMove, pReserved, dwMoveMethod, dwContext + Declare Integer InternetSetFilePointer In wininet As apiInternetSetFilePointer ; + Integer hFile, ; + Integer lDistanceToMove, ; + String pReserved, ; + Integer dwMoveMethod, ; + Integer dwContext + Return apiInternetSetFilePointer(m.hFile, m.lDistanceToMove, m.pReserved, m.dwMoveMethod, m.dwContext) +Endfunc + +Function apiInternetSetOption + Lparameters hInternet, dwOption, lpBuffer, dwBufferLength + Declare Integer InternetSetOption In wininet As apiInternetSetOption ; + Integer hInternet, ; + Integer dwOption, ; + String lpBuffer, ; + Integer dwBufferLength + Return apiInternetSetOption(m.hInternet, m.dwOption, m.lpBuffer, m.dwBufferLength) +Endfunc + +Function apiInternetWriteFile + Lparameters hFile, lpBuffer, dwNumberOfBytesToWrite, lpdwNumberOfBytesWritten + Declare Integer InternetWriteFile In wininet As apiInternetWriteFile ; + Integer hFile, ; + String lpBuffer, ; + Integer dwNumberOfBytesToWrite, ; + Integer @lpdwNumberOfBytesWritten + Return apiInternetWriteFile(m.hFile, m.lpBuffer, m.dwNumberOfBytesToWrite, @m.lpdwNumberOfBytesWritten) +Endfunc + +Function apiIsIconic + Lparameters nhWnd + Declare Integer IsIconic In win32api As apiIsIconic; + Integer nhWnd + Return apiIsIconic(m.nhWnd) +Endfunc + +Function apiIsThemeActive() + If ctlGetOsVersion() >= NTDDI_WINXP + Declare Integer IsThemeActive In uxtheme As apiIsThemeActive + Return apiIsThemeActive() + Else + Return 0 + Endif +Endfunc + +Function apiIsWindow + Lparameters nhWnd + Declare Integer IsWindow In win32api As apiIsWindow ; + Integer nhWnd + Return apiIsWindow(m.nhWnd) +Endfunc + +Function apiKeybd_Event + Lparameters bVk, bScan, dwFlags, dwExtraInfo + Declare Integer keybd_event In win32api As apiKeybd_Event ; + Integer bVk, ; + Integer bScan, ; + Integer dwFlags, ; + Integer dwExtraInfo + Return apiKeybd_Event(m.bVk, m.bScan, m.dwFlags, m.dwExtraInfo) +Endfunc + +Function apiKillTimer + Lparameters nhWnd, nIDEvent + Declare Integer KillTimer In win32api As apiKillTimer ; + Integer nhWnd, ; + Integer nIDEvent + Return apiKillTimer(m.nhWnd, m.nIDEvent) +Endfunc + +Function apiLoadLibrary + Lparameters lpLibFileName + Declare Integer LoadLibrary In win32api As apiLoadLibrary; + String lpLibFileName + Return apiLoadLibrary(m.lpLibFileName) +Endfunc + +Function apiLoadMenu + Lparameters hInstance, lpMenuName + Declare Integer LoadMenu In win32api As apiLoadMenu ; + Integer hInstance, ; + Integer lpMenuName + Return apiLoadMenu(m.hInstance, m.lpMenuName) +Endfunc + +Function apiLoadString + Lparameters hInstance, uID, lpBuffer, nBufferMax + Declare Integer LoadString In win32api As apiLoadString ; + Integer hInstance, ; + Integer uID, ; + String lpBuffer, ; + Integer nBufferMax + Return apiLoadString(m.hInstance, m.uID, @m.lpBuffer, m.nBufferMax) +Endfunc + +Function apiMapVirtualKey + Lparameters uCode, uMapType + Declare Integer MapVirtualKey In win32api As apiMapVirtualKey ; + Integer uCode, ; + Integer uMapType + Return apiMapVirtualKey(m.uCode, m.uMapType) +Endfunc + +Function apiMessageBeep + Lparameters uType + Declare Integer MessageBeep In win32api As apiMessageBeep ; + Integer uType + Return apiMessageBeep(m.uType) +Endfunc + +Function apiMonitorFromRect + Lparameters lprc, dwFlags + Declare Integer MonitorFromRect In win32api As apiMonitorFromRect ; + Integer lprc, ; + Integer dwFlags + Return apiMonitorFromRect(m.lprc, m.dwFlags) +Endfunc + +Function apiMulDiv + Lparameters nNumber, nNumerator, nDenominator + Declare Integer MulDiv In win32api As apiMulDiv ; + Integer nNumber, ; + Integer nNumerator, ; + Integer nDenominator + Return apiMulDiv(m.nNumber, m.nNumerator, m.nDenominator) +Endfunc + +Function apiOpenFile + Lparameters lpFileName, lpReOpenBuff, wStyle + *!* Only use this function with 16-bit versions of Windows. For newer + *!* applications, use the CreateFile function. + Declare Integer OpenFile In win32api As apiOpenFile ; + String lpFileName, ; + String @lpReOpenBuff, ; + Integer wStyle + Return apiOpenFile(m.lpFileName, @m.lpReOpenBuff, m.wStyle) +Endfunc + +Function apiOpenPrinter + Lparameters pPrinterName, phPrinter, pDefault + Declare Integer OpenPrinter In winspool.drv As apiOpenPrinter ; + String pPrinterName, ; + Integer @phPrinter, ; + Integer pDefault + Return apiOpenPrinter(m.pPrinterName, @m.phPrinter, m.pDefault) +Endfunc + +Function apiOpenThemeData + Lparameters nhWnd, pszClassList + If ctlGetOsVersion() >= NTDDI_WINXP + Declare Integer OpenThemeData In uxtheme As apiOpenThemeData ; + Integer nhWnd, ; + String pszClassList + Return apiOpenThemeData(m.nhWnd, m.pszClassList) + Else + Return 0 + Endif +Endfunc + +Function apiPrintDlg + Lparameters lppd + Declare Integer PrintDlg In comdlg32 As apiPrintDlg; + String @lppd + Return apiPrintDlg(@m.lppd) +Endfunc + +Function apiPrintDlgEx + Lparameters lppd + Declare Integer PrintDlgEx In comdlg32 As apiPrintDlgEx; + String @lppd + Return apiPrintDlgEx(@m.lppd) +Endfunc + +Function apiReadFile + Lparameters hFile, lpBuffer, nNumberOfBytesToRead, lpNumberOfBytesRead, lpOverlapped + Declare Integer ReadFile In win32api As apiReadFile ; + Integer hFile, ; + String @lpBuffer, ; + Integer nNumberOfBytesToRead, ; + Integer @lpNumberOfBytesRead, ; + Integer lpOverlapped + Return apiReadFile(m.hFile, @m.lpBuffer, m.nNumberOfBytesToRead, @m.lpNumberOfBytesRead, m.lpOverlapped) +Endfunc + +Function apiRealGetWindowClass + Lparameters nhWnd, pszType, cchType + Declare Integer RealGetWindowClass In win32api As apiRealGetWindowClass ; + Integer nhWnd, ; + String @pszType, ; + Integer cchType + Return apiRealGetWindowClass(m.nhWnd, @m.pszType, m.cchType) +Endfunc + +Function apiRedrawWindow + Lparameters nhWnd, lprcUpdate, hrgnUpdate, uFlags + Declare Integer RedrawWindow In win32api As apiRedrawWindow ; + Integer nhWnd, ; + String lprcUpdate, ; + Integer hrgnUpdate, ; + Integer uflags + Return apiRedrawWindow(m.nhWnd, m.lprcUpdate, m.hrgnUpdate, m.uFlags) +Endfunc + +Function apiRegCloseKey + Lparameters hKeyHandle + Declare Integer RegCloseKey In Advapi32 As apiRegCloseKey; + Integer hKeyHandle + Return apiRegCloseKey(m.hKeyHandle) +Endfunc + +Function apiRegCreateKeyEx + Lparameters hKey, lpSubKey, Reserved, lpClass, dwOptions, samDesired, lpSecurityAttributes, phkResult, lpdwDisposition + Declare Integer RegCreateKeyEx In Advapi32 As apiRegCreateKeyEx ; + Integer hKey, ; + String lpSubKey, ; + Integer Reserved, ; + String lpClass, ; + Integer dwOptions, ; + Integer samDesired, ; + Integer lpSecurityAttributes, ; + Integer @phkResult, ; + Integer @lpdwDisposition + Return apiRegCreateKeyEx(m.hKey, m.lpSubKey, m.Reserved, m.lpClass, m.dwOptions, m.samDesired, m.lpSecurityAttributes, @m.phkResult, @m.lpdwDisposition) +Endfunc + +Function apiRegDeleteKey + Lparameters hKey, lpSubKey + Declare Integer RegDeleteKey In Advapi32 As apiRegDeleteKey ; + Integer hKey, ; + String lpSubKey + Return apiRegDeleteKey(m.hKey, m.lpSubKey) +Endfunc + +Function apiRegDeleteValue + Lparameters hKey, lpValueName + Declare Integer RegDeleteValue In advapi32 As apiRegDeleteValue ; + Integer hKey, ; + String lpValueName + Return apiRegDeleteValue(m.hKey, m.lpValueName) +Endfunc + +Function apiRegOpenKeyEx + Lparameters hKey, lpSubKey, ulOptions, samDesired, phkResult + Declare Integer RegOpenKeyEx In advapi32 As apiRegOpenKeyEx; + Integer hKey, ; + String lpSubKey, ; + Integer ulOptions, ; + Integer samDesired, ; + Integer @phkResult + Return apiRegOpenKeyEx(m.hKey, m.lpSubKey, m.ulOptions, m.samDesired, @m.phkResult) +Endfunc + +Function apiRegQueryValueEx + Lparameters hKeyHandle, lpValueName, lpReserved, lpType, lpData, lpcbData + Declare Integer RegQueryValueEx In advapi32 As apiRegQueryValueEx ; + Integer hKeyHandle, ; + String lpValueName, ; + Integer lpReserved, ; + Integer @lpType, ; + String @lpData, ; + Integer @lpcbData + Return apiRegQueryValueEx(m.hKeyHandle, m.lpValueName, m.lpReserved, @m.lpType, @m.lpData, @m.lpcbData) +Endfunc + +Function apiRegSetValueEx + Lparameters hKeyHandle, lpValueName, Reserved, dwType, lpData, cbData + Declare Integer RegSetValueEx In advapi32 As apiRegSetValueEx ; + Integer hKeyHandle, ; + String lpValueName, ; + Integer Reserved, ; + Integer dwType, ; + String @lpData, ; + Integer cbData + Return apiRegSetValueEx(m.hKeyHandle, m.lpValueName, m.Reserved, m.dwType, @m.lpData, m.cbData) +Endfunc + +Function apiReleaseDC + Lparameters nhWnd, hdc + Declare Integer ReleaseDC In win32api As apiReleaseDC ; + Integer nhWnd, ; + Integer hdc + Return apiReleaseDC(m.nhWnd, m.hdc) +Endfunc + +Function apiScreenToClient + Lparameters nhWnd, lpPoint + Declare Integer ScreenToClient In win32api As apiScreenToClient ; + Integer nhWnd, ; + String @lpPoint + Return apiScreenToClient(m.nhWnd, @m.lpPoint) +Endfunc + +Function apiSelectObject + Lparameters hdc, hObject + Declare Integer SelectObject In win32api As apiSelectObject ; + Integer hdc, ; + Integer hObject + Return apiSelectObject(m.hdc, m.hObject) +Endfunc + +Function apiSendMessage + Lparameters nhWnd, Msg, wParam, Lparam + *!* 2008-04-18 Changed to wrap SendMessage with a string lParam + *!* and SendMessage with an integer lParam + If Vartype(m.lParam) = T_CHARACTER Then + Return apiSendMessageString(m.nhWnd, m.Msg, m.wParam, @m.lParam) + Else + Return apiSendMessageInteger(m.nhWnd, m.Msg, m.wParam, m.lParam) + Endif +Endfunc + +Function apiSendMessageInteger + Lparameters nhWnd, Msg, wParam, Lparam + Declare Integer SendMessage In win32api As apiSendMessageInteger ; + Integer nhWnd, ; + Integer Msg, ; + Integer wParam, ; + Integer Lparam + Return apiSendMessageInteger(m.nhWnd, m.Msg, m.wParam, m.lParam) +Endfunc + +Function apiSendMessageString + Lparameters nhWnd, Msg, wParam, Lparam + Declare Integer SendMessage In win32api As apiSendMessageString ; + Integer nhWnd, ; + Integer Msg, ; + Integer wParam, ; + String @Lparam + Return apiSendMessageString(m.nhWnd, m.Msg, m.wParam, @m.lParam) +Endfunc + +Function apiSetClassLong + Lparameters nhWnd, nIndex, dwNewLong + Declare Integer SetClassLong In win32api As apiSetClassLong ; + Integer nhWnd, ; + Integer nIndex, ; + Integer dwNewLong + Return apiSetClassLong(m.nhWnd, m.nIndex, m.dwNewLong) +Endfunc + +Function apiSetFilePointerEx + Lparameters hFile, iDistanceToMoveLow, iDistanceToMoveHigh, lpNewFilePointer, dwMoveMethod + Declare Integer SetFilePointerEx In win32api As apiSetFilePointerEx ; + Integer hFile, ; + Integer iDistanceToMoveLow, ; + Integer iDistanceToMoveHigh, ; + String @lpNewFilePointer, ; + Integer dwMoveMethod + Return apiSetFilePointerEx(m.hFile, m.iDistanceToMoveLow, m.iDistanceToMoveHigh, @m.lpNewFilePointer, m.dwMoveMethod) +Endfunc + +Function apiSetFocus + Lparameters nhWnd + Declare Integer SetFocus In win32api As apiSetFocus ; + Integer nhWnd + Return apiSetFocus(m.nhWnd) +Endfunc + +Function apiSetForegroundWindow + Lparameters nhWnd + Declare Integer SetForegroundWindow In win32api As apiSetForegroundWindow ; + Integer nhWnd + Return apiSetForegroundWindow(m.nhWnd) +Endfunc + +Function apiSetMenu + Lparameters nhWnd, hMenu + Declare Integer SetMenu In win32api As apiSetMenu; + Integer nhWnd, ; + Integer hMenu + Return apiSetMenu(m.nhWnd, m.hMenu) +Endfunc + +Function apiSetMenuDefaultItem + Lparameters hMenu, uItem, fByPos + Declare Integer SetMenuDefaultItem In win32api As apiSetMenuDefaultItem; + Integer hMenu, ; + Integer uItem, ; + Integer fByPos + Return apiSetMenuDefaultItem(m.hMenu, m.uItem, m.fByPos) +Endfunc + +Function apiSetMenuInfo + Lparameters hMenu, lpcmi + Declare Integer SetMenuInfo In win32api As apiSetMenuInfo; + Integer hmenu, ; + String @lpcmi + Return apiSetMenuInfo(m.hMenu, @m.lpcmi) +Endfunc + +Function apiSetMenuItemBitmaps + Lparameters hMenu, uPosition, uFlags, hBitmapUnchecked, hBitmapChecked + Declare Integer SetMenuItemBitmaps In win32api As apiSetMenuItemBitmaps ; + Integer hMenu, ; + Integer uPosition, ; + Integer uFlags, ; + Integer hBitmapUnchecked, ; + Integer hBitmapChecked + Return apiSetMenuItemBitmaps(m.hMenu, m.uPosition, m.uFlags, m.hBitmapUnchecked, m.hBitmapChecked) +Endfunc + +Function apiSetMenuItemInfo + Lparameters hMenu, uItem, fByPosition, lpmii + Declare Integer SetMenuItemInfo In win32api As apiSetMenuItemInfo; + Integer hMenu, ; + Integer uItem, ; + Integer fByPosition, ; + String @lpmii + Return apiSetMenuItemInfo(m.hMenu, m.uItem, m.fByPosition, @m.lpmii) +Endfunc + +Function apiSetParent + Lparameters nHwndChild, nHwndNewParent + Declare Integer SetParent In win32api As apiSetParent ; + Integer nHwndChild, ; + Integer nHwndNewParent + Return apiSetParent(m.nHwndChild, m.nHwndNewParent) +Endfunc + +Function apiSetProp + Lparameters nhWnd, lpString, hData + Declare Integer SetProp In win32api As apiSetProp ; + Integer nhWnd, ; + String lpString, ; + Integer hData + Return apiSetProp(m.nhWnd, m.lpString, m.hData) +Endfunc + +Function apiSetScrollInfo + Lparameters nhWnd, fnBar, lpsi, fRedraw + Declare Integer SetScrollInfo In win32api As apiSetScrollInfo ; + Integer nhWnd, ; + Integer fnBar, ; + Integer lpsi, ; + Integer fRedraw + Return apiSetScrollInfo(m.nhWnd, m.fnBar, m.lpsi, m.fRedraw) +Endfunc + +Function apiSetTimer + Lparameters nhWnd, nIDEvent, uElapse, lpTimerFunc + Declare Integer SetTimer In win32api As apiSetTimer ; + Integer nhWnd, ; + Integer nIDEvent, ; + Integer uElapse, ; + Integer lpTimerFunc + Return apiSetTimer(m.nhWnd, m.nIDEvent, m.uElapse, m.lpTimerFunc) +Endfunc + +Function apiSetWindowLong + Lparameters nhWnd, nIndex, dwNewLong + Declare Integer SetWindowLong In win32api As apiSetWindowLong ; + Integer nhWnd, ; + Integer nIndex, ; + Integer dwNewLong + Return apiSetWindowLong(m.nhWnd, m.nIndex, m.dwNewLong) +Endfunc + +Function apiSetWindowPlacement + Lparameters nhWnd, lpwndpl + Declare Integer SetWindowPlacement In win32api As apiSetWindowPlacement; + Integer nhWnd, ; + Integer lpwndpl + Return apiSetWindowPlacement(m.nhWnd, m.lpwndpl) +Endfunc + +Function apiSetWindowPos + Lparameters nhWnd, nHwndInsertAfter, nx, ny, cx, cy, wFlags + Declare Integer SetWindowPos In win32api As apiSetWindowPos ; + Integer nhWnd, ; + Integer nHwndInsertAfter, ; + Integer nx, ; + Integer ny, ; + Integer cx, ; + Integer cy, ; + Integer wFlags + Return apiSetWindowPos(m.nhWnd, m.nHwndInsertAfter, m.nx, m.ny, m.cx, m.cy, m.wFlags) +Endfunc + +Function apiSetWindowRgn + Lparameters nhWnd, hRgn, bRedraw + Declare Integer SetWindowRgn In win32api As apiSetWindowRgn ; + Integer nhWnd, ; + Integer hRgn, ; + Integer bRedraw + Return apiSetWindowRgn(m.nhWnd, m.hRgn, m.bRedraw) +Endfunc + +Function apiSetWindowText + Lparameters nhWnd, lpString + Declare Integer SetWindowText In win32api As apiSetWindowText ; + Integer nHwnd, ; + String lpString + Return apiSetWindowText(m.nhWnd, m.lpString) +Endfunc + +Function apiSetWindowTheme + Lparameters nhWnd, pszSubAppName, pszSubIdList + If ctlGetOsVersion() >= NTDDI_WINXP + Declare Integer SetWindowTheme In uxtheme As apiSetWindowTheme ; + Integer nhWnd, ; + String pszSubAppName, ; + String pszSubIdList + Return apiSetWindowTheme(m.nhWnd, m.pszSubAppName, m.pszSubIdList) + Else + Return 0 + Endif +Endfunc + +Function apiSHBrowseForFolder + Lparameters lpbi + Declare Integer SHBrowseForFolder In shell32.Dll As apiSHBrowseForFolder ; + Integer lpbi + Return apiSHBrowseForFolder(m.lpbi) +Endfunc + +Function apiSHDeleteKey + Lparameters hKey, pszSubKey + Declare Integer SHDeleteKey In shlwapi As apiSHDeleteKey ; + Integer hkey, ; + String pszSubKey + Return apiSHDeleteKey(m.hKey, m.pszSubKey) +Endfunc + +Function apiShellExecute + Lparameters nhWnd, lpOperation, lpFile, lpParameters, lpDirectory, nShowCmd + Declare Integer ShellExecute In win32api As apiShellExecute ; + Integer nhWnd, ; + String lpOperation, ; + String lpFile, ; + String lpParameters, ; + String lpDirectory, ; + Integer nShowCmd + Return apiShellExecute(m.nhWnd, m.lpOperation, m.lpFile, m.lpParameters, m.lpDirectory, m.nShowCmd) +Endfunc + +Function apiSHGetFolderLocation + Lparameters hwndOwner, nFolder, hToken, dwReserved, ppidl + Declare Integer SHGetFolderLocation In shell32.Dll As apiSHGetFolderLocation ; + Integer hwndOwner, ; + Integer nFolder, ; + Integer hToken, ; + Integer dwReserved, ; + Integer @ppidl + Return apiSHGetFolderLocation(m.hwndOwner, m.nFolder, m.hToken, m.dwReserved, @m.ppidl) +Endfunc + +Function apiSHGetFolderPath + Lparameters nHwndOwner, nFolder, hToken, dwFlags, pszPath + Declare Integer SHGetFolderPath In shfolder As apiSHGetFolderPath ; + Integer nHwndOwner, ; + Integer nFolder, ; + Integer hToken, ; + Integer dwFlags, ; + String @pszPath + Return apiSHGetFolderPath(m.nHwndOwner, m.nFolder, m.hToken, m.dwFlags, @m.pszPath) +Endfunc + +Function apiSHGetKnownFolderPath + *!* WINDOWS VISTA ONLY + Lparameters rfid, dwFlags, hToken, ppszPath + Declare Integer SHGetKnownFolderPath In shell32.Dll As apiSHGetKnownFolderPath ; + String rfid, ; + Integer dwFlags, ; + Integer hToken, ; + Integer @ppszPath + Return apiSHGetKnownFolderPath(m.rfid, m.dwFlags, m.hToken, @m.ppszPath) +Endfunc + +Function apiSHGetNameFromIDList + Lparameters pidl, sigdnName, ppszName + Declare Integer SHGetNameFromIDList In shell32.Dll As apiSHGetNameFromIDList ; + Integer pidl, ; + Integer sigdnName, ; + Integer @ppszName + Return apiSHGetNameFromIDList(m.pidl, m.sigdnName, @m.ppszName) +Endfunc + +Function apiSHGetPathFromIDList + Lparameters pidl, pszPath + Declare Integer SHGetPathFromIDList In Shell32.Dll As apiSHGetPathFromIDList ; + Integer pidl, ; + String @pszPath + Return apiSHGetPathFromIDList(m.pidl, @m.pszPath) +Endfunc + +Function apiShowScrollBar + Lparameters nhWnd, wBar, bShow + Declare Integer ShowScrollBar In win32api As apiShowScrollBar ; + Integer nhWnd, ; + Integer wBar, ; + Integer bShow + Return apiShowScrollBar(m.nhWnd, m.wBar, m.bShow) +Endfunc + +Function apiShowWindow + Lparameters nhWnd, nCmdShow +*#beautify keyword_nochange + Declare Integer ShowWindow In win32api As apiShowWindow ; + Integer nhWnd, ; + Integer nCmdShow +*#beautify + Return apiShowWindow(m.nhWnd, m.nCmdShow) +Endfunc + +Function apiStartDocPrinter + Lparameters hPrinter, nLevel, pDocInfo + Declare Integer StartDocPrinter In winspool.drv As apiStartDocPrinter ; + Integer hPrinter, ; + Integer nLevel, ; + String pDocInfo + Return apiStartDocPrinter(m.hPrinter, m.nLevel, m.pDocInfo) +Endfunc + +Function apiStrFormatByteSize + Lparameters dw, szBuf, uiBufSize + Declare Integer StrFormatByteSize In shlwapi As apiStrFormatByteSize; + Integer dw, ; + String @szBuf, ; + Integer uiBufSize + Return apiStrFormatByteSize(m.dw, @m.szBuf, m.uiBufSize) +Endfunc + +Function apiStrFormatByteSize64 + Lparameters dw, szBuf, uiBufSize + Declare Integer StrFormatByteSize64 In shlwapi As apiStrFormatByteSize64; + Integer dw, ; + String @szBuf, ; + Integer uiBufSize + Return apiStrFormatByteSize64(m.dw, @m.szBuf, m.uiBufSize) +Endfunc + +Function apiStringFromGUID2 + Lparameters rguid, lpsz, cchMax + Declare Integer StringFromGUID2 In ole32 As apiStringFromGUID2; + String rguid, ; + String @lpsz, ; + Integer cchMax + Return apiStringFromGUID2(m.rguid, @m.lpsz, m.cchMax) +Endfunc + +Function apiSwitchToThisWindow + Lparameters nhWnd, fAltTab + Declare SwitchToThisWindow In win32api As apiSwitchToThisWindow ; + Integer nhWnd, ; + Integer fAltTab + Return apiSwitchToThisWindow(m.nhWnd, m.fAltTab) +Endfunc + +Function apiSystemParametersInfo + Lparameters uiAction, uiParam, pvParam, fWinIni + Declare Integer SystemParametersInfo In win32api As apiSystemParametersInfo ; + Integer uiAction, ; + Integer uiParam, ; + String @pvParam, ; + Integer fWinIni + Return apiSystemParametersInfo(m.uiAction, m.uiParam, @m.pvParam, m.fWinIni) +Endfunc + +Function apiTrackPopupMenuEx + Lparameters hMenu, fuFlags, nx, ny, nhWnd, lptpm + Declare Integer TrackPopupMenuEx In win32api As apiTrackPopupMenuEx; + Integer hMenu, ; + Integer fuFlags, ; + Integer nX, ; + Integer nY, ; + Integer nhWnd, ; + String @lptpm + Return apiTrackPopupMenuEx(m.hMenu, m.fuFlags, m.nx, m.ny, m.nhWnd, @m.lptpm) +Endfunc + +Function apiURLDownloadToFile + Lparameters pCaller, szURL, szFileName, dwReserved, lpfnCB + Declare Integer URLDownloadToFile In urlmon As apiURLDownloadToFile; + Integer pCaller, ; + String szURL, ; + String szFileName, ; + Integer dwReserved, ; + Integer lpfnCB + Return apiURLDownloadToFile(m.pCaller, m.szURL, m.szFileName, m.dwReserved, m.lpfnCB) +Endfunc + +Function apiUuidCreate + Lparameters Uuid + Declare Integer UuidCreate In rpcrt4 As apiUuidCreate ; + String @Uuid + Return apiUuidCreate(@m.Uuid) +Endfunc + +Function apiUuidCreateNil + Lparameters Nil_Uuid + Declare Integer UuidCreateNil In rpcrt4 As apiUuidCreateNil ; + String @Nil_Uuid + Return apiUuidCreate(@m.Nil_Uuid) +Endfunc + +Function apiUuidCreateSequential + Lparameters Uuid + Declare Integer UuidCreateSequential In rpcrt4 As apiUuidCreateSequential ; + String @Uuid + Return apiUuidCreateSequential(@m.Uuid) +Endfunc + +Function apiUuidFromString + Lparameters StringUuid, Uuid + Declare Integer UuidFromString In rpcrt4 As apiUuidFromString ; + String StringUuid, ; + String @Uuid + Return apiUuidFromString(m.StringUuid, @m.Uuid) +Endfunc + +Function apiUuidToString + Lparameters Uuid, StringUuid + Declare Integer UuidToString In rpcrt4 As apiUuidToString ; + String Uuid, ; + Integer @StringUuid + Return apiUuidToString(m.Uuid, @m.StringUuid) +Endfunc + +Function apiWindowFromPoint + Lparameters pointx, pointy + Declare Integer WindowFromPoint In win32api As apiWindowFromPoint ; + Integer PointX, ; + Integer PointY + Return apiWindowFromPoint(m.pointx, m.pointy) +Endfunc + +Function apiWriteFile + Lparameters hFile, lpBuffer, nNumberOfBytesToWrite, lpNumberOfBytesWritten, lpOverlapped + Declare Integer WriteFile In win32api As apiWriteFile ; + Integer hFile, ; + String lpBuffer, ; + Integer nNumberOfBytesToWrite, ; + Integer @lpNumberOfBytesWritten, ; + Integer lpOverlapped + Return apiWriteFile(m.hFile, m.lpBuffer, m.nNumberOfBytesToWrite, @m.lpNumberOfBytesWritten, m.lpOverlapped) +Endfunc + +Function apiWritePrinter + Lparameters hPrinter, pBuf, cbBuf, pcWritten + Declare Integer WritePrinter In winspool.drv As apiWritePrinter; + Integer hPrinter, ; + String pBuf, ; + Integer cbBuf, ; + Integer @pcWritten + Return apiWritePrinter(m.hPrinter, m.pBuf, m.cbBuf, @m.pcWritten) +Endfunc + +Function apiWritePrivateProfileString + Lparameters lpAppName, lpKeyName, lpString, lpFileName + Declare Integer WritePrivateProfileString In win32api As apiWritePrivateProfileString ; + String lpAppName, ; + String lpKeyName, ; + String lpString, ; + String lpFileName + Return apiWritePrivateProfileString(m.lpAppName, m.lpKeyName, m.lpString, m.lpFileName) +Endfunc + diff --git a/COMUN/utile/ctl32/ctl32_balloontip.vct b/COMUN/utile/ctl32/ctl32_balloontip.vct new file mode 100644 index 0000000..b7bc7d9 Binary files /dev/null and b/COMUN/utile/ctl32/ctl32_balloontip.vct differ diff --git a/COMUN/utile/ctl32/ctl32_balloontip.vcx b/COMUN/utile/ctl32/ctl32_balloontip.vcx new file mode 100644 index 0000000..057acfd Binary files /dev/null and b/COMUN/utile/ctl32/ctl32_balloontip.vcx differ diff --git a/COMUN/utile/ctl32/ctl32_classes.prg b/COMUN/utile/ctl32/ctl32_classes.prg new file mode 100644 index 0000000..40320e1 --- /dev/null +++ b/COMUN/utile/ctl32/ctl32_classes.prg @@ -0,0 +1,594 @@ +******************************************************************************** +*!* ctl32_classes.prg +******************************************************************************** +#Include ctl32.h + +If Not Sys(16) $ Upper(Set("Procedure")) Then + Set Procedure To Sys(16) Additive +Endif + +******************************************************************************** +Define Class ctl32_menu As Custom + + Height = 0 + MenuId = 0 + + Protected _MemberData + _MemberData = '' + ; + '' + ; + '' + +Enddefine + +******************************************************************************** +Define Class ctl32_menuitem As Custom + + BarBreak = "" + Break = "" + CanRaiseEvents = "" + Caption = "" + Checked = FALSE + Container = "" + DefaultItem = FALSE + DesignMode = "" + Enabled = FALSE + Events = "" + MenuId = 0 + Index = "" + IsParent = "" + MdiList = "" + MdiListItem = "" + MenuId = 0 + MenuItems = "" + MergeOrder = "" + MergeType = "" + Mnemonic = "" + Name = "MenuItem" + OwnerDrawn = "" + RadioCheck = FALSE + Shortcut = "" + ShowShortcut = "" + Site = "" + Tag = "" + Visible = "" + ItemID = 0 + Picture = "" + PictureObject = FALSE + PictureId = 0 + DisabledPicture = "" + DisabledPictureObject = FALSE + DisabledPictureId = 0 + DownPicture = "" + DownPictureObject = FALSE + DownPictureId = 0 + SubMenuId = 0 + + Protected _MemberData + _MemberData = '' + ; + '' + ; + '' + + Procedure SubMenuId_Assign + Lparameters m.vNewVal + *!* Destroy any previous submenu: + If This.SubMenuId > 0 Then + apiDestroyMenu(This.SubMenuId) + Endif + + This.SubMenuId = m.vNewVal + + If This.ItemID = 0 Then + Return + Endif + + *!* update menu item submenu info: + Local ; + m.lcMenuItemInfo As String,; + m.loMenuItemInfo As _MENUITEMINFO + + m.loMenuItemInfo = Createobject("_MENUITEMINFO") + + m.loMenuItemInfo.fMask = MIIM_SUBMENU + m.loMenuItemInfo.hSubMenu = This.SubMenuId + m.lcMenuItemInfo = m.loMenuItemInfo.Value + apiSetMenuItemInfo(This.MenuId, This.ItemID, MF_BYCOMMAND, @m.lcMenuItemInfo) + m.loMenuItemInfo = .Null. + Release m.loMenuItemInfo + + Endproc + + Procedure Picture_Assign + Lparameters m.vNewVal + + *!* Here we store the value to use, HBMMENU_CALLBACK + *!* If a numeric system bitmap is choosen, we use that + Local m.hbmpItem As Integer + + m.hbmpItem = 0 + + Do Case + + Case Vartype(m.vNewVal) = "N" + This.Picture = "" + This.PictureId = m.vNewVal + m.hbmpItem = This.PictureId + + Case Vartype(m.vNewVal) = "C" + This.Picture = m.vNewVal + If File(m.vNewVal) + This.PictureObject = LoadPicture(m.vNewVal) + This.PictureId = This.PictureObject.Handle + Else + This.PictureId = 0 + Endif + If ctlGetOsVersion() < NTDDI_VISTA + m.hbmpItem = HBMMENU_CALLBACK + Endif + Otherwise + This.Picture = "" + This.PictureId = 0 + If ctlGetOsVersion() < NTDDI_VISTA + m.hbmpItem = HBMMENU_CALLBACK + Endif + Endcase + + If This.ItemID = 0 Then + Return + Endif + + Local m.lcMenuItemInfo As String + Local m.loMenuItemInfo As _MENUITEMINFO + + m.loMenuItemInfo = Createobject("_MENUITEMINFO") + m.loMenuItemInfo.fMask = MIIM_BITMAP + m.loMenuItemInfo.hbmpItem = m.hbmpItem + m.lcMenuItemInfo = m.loMenuItemInfo.Value + apiSetMenuItemInfo(This.MenuId, This.ItemID, MF_BYCOMMAND, @m.lcMenuItemInfo) + m.loMenuItemInfo = .Null. + + Endproc + + Procedure Caption_Assign + Lparameters vNewVal + This.Caption = m.vNewVal + Endproc + + Procedure Caption_Access + Return This.Caption + Endproc + + Procedure DefaultItem_Assign + Lparameters vNewVal + + If Vartype(m.vNewVal) = "N" Then + If m.vNewVal = 0 Then + m.vNewVal = FALSE + Else + m.vNewVal = TRUE + Endif + Endif + + This.DefaultItem = m.vNewVal + + If This.ItemID = 0 Then + Return + Endif + + If This.DefaultItem = TRUE Then + apiSetMenuDefaultItem(This.MenuId, This.ItemID, MF_BYCOMMAND) + Else + apiSetMenuDefaultItem(This.MenuId, -1, MF_BYPOSITION) + Endif + + Endproc + + Procedure Enabled_Assign + Lparameters vNewVal + + If Vartype(m.vNewVal) = "N" Then + If m.vNewVal = 0 Then + m.vNewVal = FALSE + Else + m.vNewVal = TRUE + Endif + Endif + + This.Enabled = m.vNewVal + + If This.ItemID = 0 Then + Return + Endif + If This.Enabled = TRUE Then + apiEnableMenuItem(This.MenuId, This.ItemID, Bitor(MF_BYCOMMAND, MF_ENABLED)) + Else + apiEnableMenuItem(This.MenuId, This.ItemID, Bitor(MF_BYCOMMAND, MF_GRAYED)) + Endif + + Endproc + + Procedure Checked_Assign + Lparameters vNewVal + + If Vartype(m.vNewVal) = "N" Then + If m.vNewVal = 0 Then + m.vNewVal = FALSE + Else + m.vNewVal = TRUE + Endif + Endif + + This.Checked = m.vNewVal + + If This.ItemID = 0 Then + Return + Endif + + If This.Checked = TRUE Then + apiCheckMenuItem(This.MenuId, This.ItemID , Bitor(MF_BYCOMMAND, MF_CHECKED)) + Else + apiCheckMenuItem(This.MenuId, This.ItemID , Bitor(MF_BYCOMMAND, MF_UNCHECKED)) + Endif + + Endproc + + Procedure RadioCheck_Assign + Lparameters vNewVal + + If Vartype(m.vNewVal) = "N" Then + If m.vNewVal = 0 Then + m.vNewVal = FALSE + Else + m.vNewVal = TRUE + Endif + Endif + + This.RadioCheck = m.vNewVal + + If This.ItemID = 0 Then + Return + Endif + + *!* Get current fType, we set fMask to MIIM_FTYPE + Local ; + m.lcMenuItemInfo As String, ; + m.loMenuItemInfo As _MENUITEMINFO, ; + m.lfType As Integer + + m.loMenuItemInfo = Createobject("_MENUITEMINFO") + + *!* Build MenuItemInfo structure: + m.loMenuItemInfo.fMask = MIIM_FTYPE + m.lcMenuItemInfo = m.loMenuItemInfo.Value + + If apiGetMenuItemInfo(This.MenuId, This.ItemID , MF_BYCOMMAND, @m.lcMenuItemInfo) <> 0 Then + + m.loMenuItemInfo.Value = m.lcMenuItemInfo + + If This.RadioCheck = TRUE Then + m.loMenuItemInfo.fType = Bitor(MFT_RADIOCHECK, m.loMenuItemInfo.fType) + Else + m.loMenuItemInfo.fType = Bitxor(MFT_RADIOCHECK, Bitor(MFT_RADIOCHECK, m.loMenuItemInfo.fType)) + Endif + + m.lcMenuItemInfo = m.loMenuItemInfo.Value + apiSetMenuItemInfo(This.MenuId, This.ItemID , MF_BYCOMMAND, m.lcMenuItemInfo) + m.loMenuItemInfo = .Null. + + Endif + + Endproc + +Enddefine + +******************************************************************************** +Define Class ctl32_statusbar_panel As Custom + + Height = 16 + Width = 120 + *-- Specifies the icon displayed for a Form at run time when the Form is minimized. + ctlicon = "" + ctlcaption = "" + ctlformat = 0 + *-- Specifies the text that appears as a ToolTip for a control. + ctltooltiptext = "" + ctlindex = 0 + *-- Right x value position for Panel + _right = -1 + _oicon = "" + *-- Specifies if an object is visible or hidden. + ctlvisible = .T. + *-- Specifies if a control is automatically resized to fit its contents. + ctlautosize = .T. + _width = 0 + *-- Specifies the alignment of text associated with a control. + ctlalignment = 0 + ctlwidth = "" + ctlname = "" + Name = "ctl32_statusbar_panel" + + Procedure ctlIcon_assign + Lparameters vNewVal + + Local lnHandle + + This.ctlicon = m.vNewVal + This._oicon = .Null. + + *!* 2006-07-17 Now takes icon handle too //Anton + Do Case + Case Vartype(This.ctlicon) = T_NUMERIC + m.lnHandle = m.vNewVal + Case Vartype(This.ctlicon) = T_CHARACTER And File(This.ctlicon) + This._oicon = LoadPicture(This.ctlicon) + m.lnHandle = This._oicon.Handle + Otherwise + m.lnHandle = 0 + Endcase + + apiSendMessageInteger(This.Parent._ControlHWnd, SB_SETICON, This.ctlindex, m.lnHandle) + + If This.Parent._ControlHWnd <> 0 And This.ctlindex <> 0 And This.Parent._Creating = FALSE Then + This.Parent.ctlResizePanels() + Endif + Endproc + + Procedure ctlcaption_assign + Lparameters vNewVal + *!* 2006-06-27 Added Transform() + This.ctlcaption = Alltrim(Transform(m.vNewVal)) + + Local lcPadLeft, lcPadRight, lcCaption + + m.lcCaption = m.vNewVal + + *!* we add spaces so text does not fit and tooltips show + Do Case + Case This.ctlalignment = 1 And This.ctlautosize = FALSE && Right + m.lcPadLeft = TABCHAR + TABCHAR + m.lcPadRight = Space(1) + + Case This.ctlalignment = 2 And This.ctlautosize = FALSE && Center + m.lcPadLeft = TABCHAR + m.lcPadRight = Space(0) + + Otherwise && Left + m.lcPadLeft = Space(0) + m.lcPadRight = Space(10) + + *!* Add one space to left if this is PanelMessage and + *!* ctlAlignment is left, so it separates the text a little from border + If This.ctlindex = 0 + m.lcPadLeft = m.lcPadLeft + Space(1) + Endif + Endcase + + *!* If changing indicator panels Caption, let tmrUpdater update captions: + If This.Name = "PanelOvr" Then + This.Parent._OldOVR = Not Insmode() + Endif + + If This.Name = "PanelNum" Then + This.Parent._OldNUM = Not Numlock() + Endif + + If This.Name = "PanelCaps" Then + This.Parent._OldCAPS = Not Capslock() + Endif + + *!* If setting Caption for Message Panel + If This.ctlindex = 0 + This.Parent._OldMessage = Sys(2015) + Endif + + m.lcCaption = m.lcPadLeft + m.lcCaption + m.lcPadRight + NULA + + *!* Do not set Panel Caption for ProgressBar: + If This.ctlindex <> 1 Then + apiSendMessageString(This.Parent._ControlHWnd, SB_SETTEXTA, This.ctlindex , m.lcCaption) + Endif + + If This.Parent._ControlHWnd <> 0 And This.ctlindex <> 0 And This.Parent._Creating = FALSE Then + This.Parent.ctlResizePanels() + Endif + Endproc + + Procedure ctlformat_assign + *!* Property only valid for PanelDate + + Lparameters vNewVal + + This.ctlformat = m.vNewVal + + If This.Name = "PanelDate" Then + If This.ctlformat > 0 Then + This.ctlcaption = ctlGetDateFormat(This.ctlformat) + Else + This.ctlcaption = "" + Endif + Endif + Endproc + + Procedure ctltooltiptext_assign + Lparameters vNewVal + + This.ctltooltiptext = m.vNewVal + + If Len(m.vNewVal) > 0 Then + m.vNewVal = Space(1) + This.ctltooltiptext + Space(1) + Endif + + apiSendMessageString(This.Parent._ControlHWnd,SB_SETTIPTEXTA, This.ctlindex, m.vNewVal) + Endproc + + Procedure ctlvisible_assign + Lparameters vNewVal + + If Vartype(m.vNewVal) = "N" Then + If m.vNewVal = 0 Then + m.vNewVal = FALSE + Else + m.vNewVal = TRUE + Endif + Endif + + If Vartype(m.vNewVal) <> "L" Then + Messagebox("Parameter must be Logical: " + Program(), 16) + Return + Endif + + This.ctlvisible = m.vNewVal + + If This.Parent._ControlHWnd <> 0 And This.Parent._Creating = FALSE Then + This.Parent.ctlResizePanels() + Endif + Endproc + + *-- Called when creating the statusbar to update all data of Panels + Procedure _updateall + This.ctlcaption = This.ctlcaption + This.ctlformat = This.ctlformat + This.ctlicon = This.ctlicon + This.ctltooltiptext = This.ctltooltiptext + This.ctlvisible = This.ctlvisible + Endproc + + Procedure ctlautosize_assign + Lparameters vNewVal + + If Vartype(m.vNewVal) = "N" Then + If m.vNewVal = 0 Then + m.vNewVal = FALSE + Else + m.vNewVal = TRUE + Endif + Endif + + *!* Index 0 is first Panel, PanelMessage, that should always have ctlAutosize = FALSE + If This.ctlindex = 0 Then + This.ctlautosize = FALSE + Else + This.ctlautosize = m.vNewVal + *!* Reset caption to get rid of center/right codes if ctlAutosize is TRUE + This.ctlcaption = This.ctlcaption + Endif + Endproc + + Procedure ctlalignment_assign + Lparameters vNewVal + + This.ctlalignment = m.vNewVal + + *!* If message panel, force update + If This.ctlindex = 0 + This.Parent._OldMessage = Sys(2015) + Endif + + This.ctlcaption = This.ctlcaption + Endproc + + Procedure ctlname_access + Return This.Name + Endproc + + Procedure ctlname_assign + Lparameters vNewVal + This.Name = m.vNewVal + Endproc + + Procedure ctlwidth_access + Return This.Width + Endproc + + Procedure ctlwidth_assign + Lparameters vNewVal + This.Width = m.vNewVal + Endproc + + Procedure Destroy + This._oicon = .Null. + Endproc + +Enddefine + +******************************************************************************** +Define Class ctl32_statusbar_toolbar As Toolbar + + Caption = "ctl32_statusbar_toolbar" + Height = 16 + Left = 0 + Top = 51 + Visible = .F. + Width = 32028 + ShowWindow = 1 + Name = "ctl32_statusbar_toolbar" + + Add Object ctlHeightShape As Shape With ; + Top = 3, ; + Left = 5, ; + Height = 13, ; + Width = 16384, ; + Name = "ctlHeightShape" + + Procedure Init + *!* Hide the toolbar thru API so it is still there but invisible + With This + .Dock(TOOL_BOTTOM, 0, 0) + .Visible = TRUE + apiShowWindow(.HWnd, SW_HIDE) + Endwith + Endproc + + Procedure ctlHeightShape.Click + This.Parent.Dock(3, 0, 0) + Endproc + + Procedure ctlHeightShape.Init + + If ctlGetOsVersion() >= NTDDI_VISTA && Vista + This.Height = 13 + Else + This.Height = 17 + Endif + Endproc + +Enddefine + +******************************************************************************** +Define Class ctl32_statusbar_timer As Timer + + Height = 23 + Width = 23 + Interval = 100 + _Interval = 100 + _IntervalTrace = 10000 + Name = "ctl32_statusbar_timer" + + Procedure Timer + *!* 20070701 Added trace aware timer, suggested by ajh + + If Wvisible("trace") Or ; + Wvisible("debugger") Or ; + Wvisible("call") Or ; + Wvisible("watch") Or ; + Wvisible("locals") + + If This.Interval # This._IntervalTrace + This.Interval = This._IntervalTrace + Endif + + Else + + If This.Interval # This._Interval + This.Interval = This._Interval + Endif + + Endif + + This.Parent.ctlUpdatePanels() + Endproc + +Enddefine + +******************************************************************************** +*!* END ctl32_classes +******************************************************************************** diff --git a/COMUN/utile/ctl32/ctl32_common.vct b/COMUN/utile/ctl32/ctl32_common.vct new file mode 100644 index 0000000..6a8eb18 Binary files /dev/null and b/COMUN/utile/ctl32/ctl32_common.vct differ diff --git a/COMUN/utile/ctl32/ctl32_common.vcx b/COMUN/utile/ctl32/ctl32_common.vcx new file mode 100644 index 0000000..d1114ae Binary files /dev/null and b/COMUN/utile/ctl32/ctl32_common.vcx differ diff --git a/COMUN/utile/ctl32/ctl32_contextmenu.vct b/COMUN/utile/ctl32/ctl32_contextmenu.vct new file mode 100644 index 0000000..ea7e722 Binary files /dev/null and b/COMUN/utile/ctl32/ctl32_contextmenu.vct differ diff --git a/COMUN/utile/ctl32/ctl32_contextmenu.vcx b/COMUN/utile/ctl32/ctl32_contextmenu.vcx new file mode 100644 index 0000000..d1a43dc Binary files /dev/null and b/COMUN/utile/ctl32/ctl32_contextmenu.vcx differ diff --git a/COMUN/utile/ctl32/ctl32_functions.prg b/COMUN/utile/ctl32/ctl32_functions.prg new file mode 100644 index 0000000..dd655e4 --- /dev/null +++ b/COMUN/utile/ctl32/ctl32_functions.prg @@ -0,0 +1,1970 @@ +******************************************************************************** +*!* ctl32_functions.prg +******************************************************************************** +#Include ctl32.h + +If Not Sys(16) $ Upper(Set("Procedure")) Then + Set Procedure To Sys(16) Additive +Endif + +Return + +******************************************************************************** +*!* ctlClientToScreen(nhWnd, @nX, @nY) +******************************************************************************** +*!* Returns client coords x, y translated into screen coords x, y +******************************************************************************** +Function ctlClientToScreen(pnHWnd As Integer, pnX As Integer, pnY As Integer) + + Local ; + m.lcPoint As String, ; + m.lnRetVal As Integer + + m.lcPoint = BinToC(m.pnX, "4RS") + BinToC(m.pnY, "4RS") + m.lnRetVal = apiClientToScreen(m.pnHWnd, @m.lcPoint) + + m.pnX = CToBin(Substr(m.lcPoint , 1, 4), "4RS") + m.pnY = CToBin(Substr(m.lcPoint , 5, 4), "4RS") + + Return m.lnRetVal <> 0 +Endfunc + +******************************************************************************** +*!* ctlComRegister(cFileName) +******************************************************************************** +*!* Registers a self registering dll or activex +******************************************************************************** +Function ctlComRegister(pcFileName As String) + + Local ; + m.lnHandle As Integer, ; + m.llRetVal As Boolean + + m.llRetVal = FALSE + + m.lnHandle = apiLoadLibrary(m.pcFileName) + + If m.lnHandle <> 0 Then + + If apiGetProcAddress(m.lnHandle, "DllRegisterServer") <> 0 + + Declare Integer DllRegisterServer In (m.pcFileName) ; + As DllRegisterServer_2CC11JLUG + + If DllRegisterServer_2CC11JLUG() = S_OK Then + m.llRetVal = TRUE + Endif + + Clear Dlls DllRegisterServer_2CC11JLUG + Endif + apiFreeLibrary(m.lnHandle) + Endif + Return m.llRetVal +Endfunc + +******************************************************************************** +*!* ctlComUnregister(cFileName) +******************************************************************************** +*!* Unregisters a self registering dll or activex +******************************************************************************** +Function ctlComUnregister(m.pcFileName As String) + + Local ; + m.lnHandle As Integer, ; + m.llRetVal As Boolean + + m.llRetVal = FALSE + + m.lnHandle = apiLoadLibrary(m.pcFileName) + + If m.lnHandle <> 0 Then + + If apiGetProcAddress(m.lnHandle, "DllRegisterServer") <> 0 + + Declare Integer DllUnregisterServer In (m.pcFileName) ; + As DllUnregisterServer_2CC11JLUG + + If DllUnregisterServer_2CC11JLUG() = S_OK Then + m.llRetVal = TRUE + Endif + + Clear Dlls DllUnregisterServer_2CC11JLUG + + Endif + apiFreeLibrary(m.lnHandle) + Endif + +Endfunc + +******************************************************************************** +*!* ctlCToLargeInteger(cLargeInt) +******************************************************************************** +*!* Converts a large integer binary value (8 bytes) to a VFP number +******************************************************************************** +Function ctlCToLargeInteger(pcLargeInt As String) + + Local ; + lnLow As Integer, ; + lnHigh As Integer, ; + lnLargeInt As Integer + + m.lnLow = CToBin(Left(m.pcLargeInt, 4), "4rs") + m.lnHigh = CToBin(Right(m.pcLargeInt, 4), "4rs") + m.lnLargeInt = ctlLowHighToLargeInteger(m.lnLow, m.lnHigh) + + Return m.lnLargeInt +Endfunc + +******************************************************************************** +*!* ctlGetOsVersion() +******************************************************************************** +*!* Returns the operating system version in a NTDDI format +******************************************************************************** +*!* NTDDI version constants +*!* /http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2095548&SiteID=1 +*!* #define NTDDI_WIN2K 05000000 +*!* #define NTDDI_WIN2KSP1 05000100 +*!* #define NTDDI_WIN2KSP2 05000200 +*!* #define NTDDI_WIN2KSP3 05000300 +*!* #define NTDDI_WIN2KSP4 05000400 + +*!* #define NTDDI_WINXP 05010000 +*!* #define NTDDI_WINXPSP1 05010100 +*!* #define NTDDI_WINXPSP2 05010200 +*!* #define NTDDI_WINXPSP3 05010300 +*!* #define NTDDI_WINXPSP4 05010400 + +*!* #define NTDDI_WS03 05020000 +*!* #define NTDDI_WS03SP1 05020100 +*!* #define NTDDI_WS03SP2 05020200 +*!* #define NTDDI_WS03SP3 05020300 +*!* #define NTDDI_WS03SP4 05020400 + +*!* #define NTDDI_WIN6 06000000 +*!* #define NTDDI_WIN6SP1 06000100 +*!* #define NTDDI_WIN6SP2 06000200 +*!* #define NTDDI_WIN6SP3 06000300 +*!* #define NTDDI_WIN6SP4 06000400 +*!* #define NTDDI_VISTA NTDDI_WIN6 +*!* #define NTDDI_VISTASP1 NTDDI_WIN6SP1 +*!* #define NTDDI_VISTASP2 NTDDI_WIN6SP2 +*!* #define NTDDI_VISTASP3 NTDDI_WIN6SP3 +*!* #define NTDDI_VISTASP4 NTDDI_WIN6SP4 +*!* #define NTDDI_WS08 NTDDI_WIN6SP1 +*!* #define NTDDI_WS08SP2 NTDDI_WIN6SP2 +*!* #define NTDDI_WS08SP3 NTDDI_WIN6SP3 +*!* #define NTDDI_WS08SP4 NTDDI_WIN6SP4 +*!* #define NTDDI_LONGHORN NTDDI_VISTA +******************************************************************************** +Function ctlGetOsVersion() + Return Val(Os(3)) * 1000000 + Val(Os(4)) * 10000 + Val(Os(8)) * 100 + Val(Os(9)) +Endfunc + +******************************************************************************** +*!* ctlGetCaretPos(@nX, @nY) +******************************************************************************** +*!* Returns the position of the caret in CLIENT coordinates. +******************************************************************************** +Function ctlGetCaretPos(pnX As Integer, pnY As Integer) + + Local ; + m.lcPoint As String, ; + m.lnRetVal As Integer + + m.lcPoint = 0h0000000000000000 + m.lnRetVal = apiGetCaretPos(@m.lcPoint) + m.pnX = CToBin(Substr(m.lcPoint, 1, 4), "4RS") + m.pnY = CToBin(Substr(m.lcPoint, 5, 4), "4RS") + Return m.lnRetVal <> 0 +Endfunc + +******************************************************************************** +*!* ctlGetCaretPosX() +******************************************************************************** +*!* Returns the X coordinate of the caret position in CLIENT coordinates +******************************************************************************** +Function ctlGetCaretPosX() + + Local m.lcPoint As String + + m.lcPoint = 0h0000000000000000 + apiGetCaretPos(@m.lcPoint) + Return CToBin(Substr(m.lcPoint, 1, 4), "4RS") +Endfunc + +******************************************************************************** +*!* ctlGetCaretPosY() +******************************************************************************** +*!* Returns the Y coordinate of the caret position in CLIENT coordinates +******************************************************************************** +Function ctlGetCaretPosY() + + Local m.lcPoint As String + + m.lcPoint = 0h0000000000000000 + apiGetCaretPos(@m.lcPoint) + Return CToBin(Substr(m.lcPoint, 5, 4), "4RS") +Endfunc + +******************************************************************************** +*!* ctlGetCursorPos(@nX, @nY) +******************************************************************************** +*!* Returns the position of the mouse cursor in SCREEN coordinates. +******************************************************************************** +Function ctlGetCursorPos(m.pnX As Integer, m.pnY As Integer) + + Local ; + m.lcPoint As String, ; + m.lnRetVal As Integer + + m.lcPoint = 0h0000000000000000 + m.lnRetVal = apiGetCursorPos(@m.lcPoint) + m.pnX = CToBin(Substr(m.lcPoint, 1, 4), "4RS") + m.pnY = CToBin(Substr(m.lcPoint, 5, 4), "4RS") + Return m.lnRetVal <> 0 +Endfunc + +******************************************************************************** +*!* ctlGetCursorPosX() +******************************************************************************** +*!* Returns the x coordinate position of the mouse cursor in SCREEN coordinates. +******************************************************************************** +Function ctlGetCursorPosX() + + Local m.lcPoint As String + + m.lcPoint = 0h0000000000000000 + apiGetCursorPos(@m.lcPoint) + Return CToBin(Substr(m.lcPoint, 1, 4), "4RS") +Endfunc + +******************************************************************************** +*!* ctlGetCursorPosY() +******************************************************************************** +*!* Returns the y coordinate position of the mouse cursor in SCREEN coordinates. +******************************************************************************** +Function ctlGetCursorPosY() + + Local m.lcPoint As String + + m.lcPoint = 0h0000000000000000 + apiGetCursorPos(@m.lcPoint) + Return CToBin(Substr(m.lcPoint, 5, 4), "4RS") +Endfunc + +******************************************************************************** +*!* ctlHiMetricToPixelsX(nHiMetricX) +******************************************************************************** +*!* :http://www.experts-exchange.com/Programming/Languages/Visual_Basic/Q_20024530.html +*!* HIMETRIC / 2540 = INCHES +*!* INCHES * 1440 = TWIPS +*!* TWIPS / TwipsPerPixel = PIXELS +******************************************************************************** +Function ctlHiMetricToPixelsX(m.pnHiMetricX As Integer) + Return Round(m.pnHiMetricX / 2540 * 1440 / ctlTwipsPerPixelX(), 0) +Endfunc + +******************************************************************************** +*!* :http://www.experts-exchange.com/Programming/Languages/Visual_Basic/Q_20024530.html +*!* HIMETRIC / 2540 = INCHES +*!* INCHES * 1440 = TWIPS +*!* TWIPS / TwipsPerPixel = PIXELS +******************************************************************************** +Function ctlHiMetricToPixelsY(m.pnHiMetricY As Integer) + Return Round(m.pnHiMetricY / 2540 * 1440 / ctlTwipsPerPixelY(), 0) +Endfunc + +******************************************************************************** +*!* ctlIsObjectInPage(oControl) +******************************************************************************** +*!* Determines if a control is contained in a page somewhere +*!* along its object hierarchy +******************************************************************************** +Function ctlIsObjectInPage(m.poControl As Control) + + Local ; + m.llIsInPage As Boolean, ; + m.loControl As Control + + m.llIsInPage = FALSE + + m.loControl = m.poControl + Do While Inlist(Upper(m.loControl.BaseClass), "FORM", "TOOLBAR") = FALSE + If Upper(m.loControl.BaseClass) == "PAGE" Then + m.llIsInPage = TRUE + Exit + Endif + m.loControl = m.loControl.Parent + Enddo + m.loControl = .Null. + m.poControl = .Null. + + Return m.llIsInPage +Endfunc + +******************************************************************************** +Function ctlIsThemeActive(m.poObject As Object) + If Vartype(m.poObject) = T_OBJECT Then + + Local ; + m.loForm As Form, ; + m.llFormThemeActive As Boolean, ; + m.llControlThemeActive As Boolean + + *!* Get theme status of object: + Do Case + Case Pemstatus(m.poObject, "ctlThemes", CON_PEMSTAT_DEFINED) + m.llControlThemeActive = m.poObject.ctlThemes + Case Pemstatus(m.poObject, "Themes", CON_PEMSTAT_DEFINED) + m.llControlThemeActive = m.poObject.Themes + Otherwise + m.llControlThemeActive = TRUE + Endcase + + *!* Get theme status of parent form + m.loForm = m.poObject + + Do While Inlist(Upper(m.loForm.BaseClass), "FORM", "TOOLBAR") = FALSE + m.loForm = m.loForm.Parent + Enddo + + m.llFormThemeActive = m.loForm.Themes + + m.loForm = .Null. + m.poObject = .Null. + + Return apiIsThemeActive() = 1 And _Screen.Themes And m.llFormThemeActive And m.llControlThemeActive + Else + Return apiIsThemeActive() <> 0 + Endif +Endfunc + +******************************************************************************** +*!* Allocates a block of memory of m.pnBytes +*!* Returns a handle to the allocated memory +*!* Must be freed after use +******************************************************************************** +Function ctlMemAlloc(m.pnBytesToAllocate As Integer) + Return apiHeapAlloc(apiGetProcessHeap(), HEAP_ZERO_MEMORY, m.pnBytesToAllocate) +Endfunc + +******************************************************************************** +*!* Frees a block of memory allocated with ctlMemAlloc +******************************************************************************** +Function ctlMemFree(m.pnMem As Integer) + Return apiHeapFree(apiGetProcessHeap(), 0, m.pnMem) +Endfunc + +******************************************************************************** +*!* Reads from a memory handle exactly m.pnBytes +******************************************************************************** +Function ctlMemRead(m.pnMem As Integer, m.pnBytesToRead As Integer) + If Vartype(m.pnMem) <> T_NUMERIC Or m.pnMem <= 0 Then + Return "" + Endif + If Vartype(m.pnBytesToRead) <> T_NUMERIC Or m.pnBytesToRead <= 0 Then + m.pnBytesToRead = apiHeapSize(apiGetProcessHeap(), 0, m.pnMem) + Endif + Return Sys(2600, m.pnMem, m.pnBytesToRead) +Endfunc + + +******************************************************************************** +*!* Returns the size of a block of memory allocated with ctlMemAlloc +*!* Returns -1 on failure +******************************************************************************** +Function ctlMemSize(m.pnMem As Integer) + Return apiHeapSize(apiGetProcessHeap(), 0, m.pnMem) +Endfunc + +******************************************************************************** +*!* Writes to a memory heap handle, m.pnBytes of m.pcData +*!* pads with NULAs if len(m.pcData) < m.pnBytes +******************************************************************************** +Function ctlMemWrite(m.pnMem As Integer, m.pcData As String, m.pnBytesToWrite As Integer) + If Vartype(m.pcData) = T_NUMERIC Then + m.pcData = BinToC(m.pcData, "4rs") + Endif + If Vartype(m.pnBytesToWrite) = T_NUMERIC And m.pnBytesToWrite > Len(m.pcData) Then + m.pcData = m.pcData + Replicate(NULCHAR, m.pnBytesToWrite - Len(m.pcData)) + Else + m.pnBytesToWrite = Len(m.pcData) + Endif + If m.pnMem = 0 Then + m.pnMem = ctlMemAlloc(m.pnBytesToWrite) + Endif + m.pcData = Sys(2600, m.pnMem, m.pnBytesToWrite, m.pcData) + Return m.pnMem +Endfunc + +******************************************************************************** +*!* converts an integer to an unsigned integer +******************************************************************************** +Function ctlIntegerToUnsigned(m.pnValue As Integer) + Local lnRetVal + + If m.pnValue < 0 Then + m.lnRetVal = m.pnValue + 4294967296 + Else + m.lnRetVal = m.pnValue + Endif + + Return m.lnRetVal +Endfunc + +******************************************************************************** +*!* pcValueToReturn can be: T, B, L, R for Top, Bottom, Left, Right +*!* This replaces OBJTOCLIENT that has bugs with pageframes +******************************************************************************** +Function ctlObjToClient(m.poControl As Control, m.pcValueToReturn As String) + + Local m.lnPosition As Integer + + m.pcValueToReturn = Upper(m.pcValueToReturn) + m.lnPosition = 0 + + Do Case + + Case m.pcValueToReturn $ "TB" + *!* 20070711 Modified to account for toolbars + Do While Inlist(Upper(m.poControl.BaseClass), "FORM", "TOOLBAR") = FALSE + If Pemstatus(m.poControl, "Top", CON_PEMSTAT_DEFINED) Then + m.lnPosition = m.lnPosition + m.poControl.Top + Endif + If Upper(m.poControl.BaseClass) == "PAGE" Then + If m.poControl.Parent.TabOrientation = CON_TABOR_TOP Then && Top + m.lnPosition = m.lnPosition + ; + m.poControl.Parent.Height - ; + m.poControl.Parent.PageHeight - ; + m.poControl.Parent.BorderWidth * 2 + Else + m.lnPosition = m.lnPosition + 1 + Endif + Endif + m.poControl = m.poControl.Parent + Enddo + + If m.pcValueToReturn == "B" Then + m.lnPosition = m.lnPosition + This.Height + Endif + + Case m.pcValueToReturn $ "LR" + *!* 20070711 Modified to account for toolbars + Do While Inlist(Upper(m.poControl.BaseClass), "FORM", "TOOLBAR") = FALSE + If Pemstatus(m.poControl, "Left", CON_PEMSTAT_DEFINED) Then + m.lnPosition = m.lnPosition + m.poControl.Left + Endif + If Upper(m.poControl.BaseClass) == "PAGE" + If m.poControl.Parent.TabOrientation = CON_TABOR_LEFT Then && Left + m.lnPosition = m.lnPosition + ; + m.poControl.Parent.Width - ; + m.poControl.Parent.PageWidth - ; + m.poControl.Parent.BorderWidth * 2 + Else + m.lnPosition = m.lnPosition + 1 + Endif + Endif + m.poControl = m.poControl.Parent + Enddo + + If m.pcValueToReturn == "R" Then + m.lnPosition = m.lnPosition + This.Width + Endif + + Endcase + + Return m.lnPosition +Endfunc + +*!* * Inverse of VFP's DTOS() function. +Function ctlSTOD(m.pcDate As String) + Local m.ldDate As Date + m.ldDate = Date(Val(Substr(m.pcDate,1,4)), Val(Substr(m.pcDate,5,2)), Val(Substr(m.pcDate,7,2))) + Return m.ldDate +Endfunc + +******************************************************************************** +*!* Converts a numeric value into a string that represents the number expressed +*!* as a size value in bytes, kilobytes, megabytes, or gigabytes, depending on the size. +*!* API StrFormatByteSize only work for files up to 4GB +*!* Local ; +*!* m.lcBuffer As String +*!* m.lcBuffer = Space(254) +*!* StrFormatByteSize(m.pnSizeInBytes, @m.lcBuffer, Len(m.lcBuffer)) +*!* * Remove NUL CHAR +*!* m.lcBuffer = Left(m.lcBuffer, At(NULA, m.lcBuffer) - 1) +*!* Return m.lcBuffer +******************************************************************************** +Function ctlStrFormatByteSize(m.pnSizeInBytes As Number) + Local ; + m.lnSize As Integer, ; + m.lcUnit As String + + Do Case + Case m.pnSizeInBytes < 999 && Bytes + m.lnSize = m.pnSizeInBytes + m.lcUnit = " Bytes" + Case m.pnSizeInBytes < 1024^1 * 999 && KiloBytes + m.lnSize = m.pnSizeInBytes / 1024^1 + m.lcUnit = " KB" + Case m.pnSizeInBytes < 1024^2 * 999 && MegaBytes + m.lnSize = m.pnSizeInBytes / 1024^2 + m.lcUnit = " MB" + Case m.pnSizeInBytes < 1024^3 * 999 && GigaBytes + m.lnSize = m.pnSizeInBytes / 1024^3 + m.lcUnit = " GB" + Otherwise + m.lnSize = m.pnSizeInBytes / 1024^4 && TeraBytes + m.lcUnit = " TB" + Endcase + + Do Case + Case m.lnSize > 100 + m.lnSize = Round(m.lnSize , 0) + Case m.lnSize > 10 + m.lnSize = Round(m.lnSize , 1) + Otherwise + m.lnSize = Round(m.lnSize , 2) + Endcase + + Return Transform(m.lnSize) + m.lcUnit +Endfunc + +******************************************************************************** +Function ctlStrFormatSeconds(pnSeconds) + + m.pnSeconds = Round(m.pnSeconds, 0) + + Local ; + m.lcHours As String, ; + m.lcMinutes As String, ; + m.lcSeconds As String + + If Int(m.pnSeconds / 3600) > 0 Then + m.lcHours = Padl(Alltrim(Str(Int(m.pnSeconds / 3600))), 2, "0") + ":" + Else + m.lcHours = "" + Endif + + m.lcMinutes = Padl(Alltrim(Str(Int((m.pnSeconds % 3600) / 60))), 2, "0") + ":" + m.lcSeconds = Padl(Alltrim(Str((m.pnSeconds % 3600) % 60)), 2, "0") + + Return m.lcHours + m.lcMinutes + m.lcSeconds +Endfunc + +******************************************************************************** +*!* Converts an unsigned integer to an integer. +******************************************************************************** +Function ctlUnsignedToInteger(m.pnValue As Integer) + + Local m.lnRetVal As Integer + + If m.pnValue <= 2147483647 Then + m.lnRetVal = m.pnValue + Else + m.lnRetVal= m.pnValue - 4294967296 + Endif + + Return m.lnRetVal +Endfunc + +******************************************************************************** +Function ctlFClose(pnFileHandle As Integer) + + Local ; + lnApiRetVal As Integer, ; + llRetVal As Boolean + + m.lnApiRetVal = apiCloseHandle(m.pnFileHandle) + + If m.lnApiRetVal = 0 Then + m.llRetVal = FALSE + Else + m.llRetVal = TRUE + Endif + + Return m.llRetVal +Endfunc + +******************************************************************************** +*!* ctlFgets(nFileHandle [, nBytes]) +******************************************************************************** +*!* Returns a series of bytes from a file or a communication port opened with a +*!* low-level file function until it encounters a carriage return. +******************************************************************************** +Function ctlFGets(pnFileHandle As Integer, pnBytesToRead As Integer) + + Local ; + lcByteString As String, ; + lnBytesRead As Integer, ; + lnApiRetVal As Integer, ; + lnOverlapped As Integer, ; + lnCrLfPos As Integer, ; + lnOffset As Integer + + If Vartype(m.pnBytesToRead) # T_NUMERIC Then + m.pnBytesToRead = 254 + Endif + + m.lnBytesRead = 0 + m.lcByteString = Space(m.pnBytesToRead) + m.lnOverlapped = 0 + + m.lnApiRetVal = apiReadFile(m.pnFileHandle, ; + @m.lcByteString, ; + m.pnBytesToRead , ; + @m.lnBytesRead , ; + m.lnOverlapped) + + If m.lnApiRetVal = 0 Then + m.lcByteString = "" + Else + m.lcByteString = Left(m.lcByteString, m.lnBytesRead) + Endif + + *!* Now search for CRLF in the string: + m.lnCrLfPos = At(CRLF, m.lcByteString) + + *!* if we find a CRLF in the string + If m.lnCrLfPos <> 0 Then + + *!* Set file pointer for next read to after CRLF + m.lnOffset = (m.lnBytesRead - m.lnCrLfPos - 1) * (-1) + ctlFSeek(m.pnFileHandle, m.lnOffset , 1) + + *!* Remove trailing characters after CRLF + m.lcByteString = Left(m.lcByteString, m.lnCrLfPos - 1) + Endif + + Return m.lcByteString +Endfunc + +******************************************************************************** +Function ctlFileTimeToDateTime(poFileTime As _FILETIME) + + Local ; + loSystemTime As _SYSTEMTIME, ; + ltFileDateTime As Datetime + + m.loSystemTime = Createobject("_SYSTEMTIME") + + If apiFileTimeToSystemTime(m.poFileTime.Address, m.loSystemTime.Address) = 1 Then + With m.loSystemTime + m.ltFileDateTime = Datetime(.wYear, .wMonth, .wDay, .wHour, .wMinute, .wSecond) + Endwith + Else + m.ltFileDateTime = Ctot("") + Endif + + m.loSystemTime = .Null. + + Return m.ltFileDateTime +Endfunc + +******************************************************************************** +Function ctlFontHeightToPoints(pnHeight As Integer) + + Local ; + lnDc As Integer, ; + lnLogPixelsY As Integer + + m.lnDc = apiGetDC(HWND_DESKTOP) + m.lnLogPixelsY = apiGetDeviceCaps(m.lnDc, LOGPIXELSY) + apiReleaseDC(HWND_DESKTOP, m.lnDc) + Return Round(72 * m.pnHeight / m.lnLogPixelsY * (-1), 0) +Endfunc + +******************************************************************************** +Function ctlFontPointsToHeight(pnPoints As Integer) + + Local ; + lnDc As Integer, ; + lnLogPixelsY As Integer + + m.lnDc = apiGetDC(HWND_DESKTOP) + m.lnLogPixelsY = apiGetDeviceCaps(m.lnDc, LOGPIXELSY) + apiReleaseDC(HWND_DESKTOP, m.lnDc) + Return apiMulDiv(m.pnPoints, m.lnLogPixelsY, 72) * (-1) +Endfunc + +******************************************************************************** +*!* ctlFopen(cFilename [, nAttribute]) +******************************************************************************** +*!* 0 READ-ONLY BUFFERED +*!* 1 WRITE-ONLY BUFFERED +*!* 2 READ-WRITE BUFFERED +*!* 10 READ-ONLY UNBUFFERED +*!* 11 WRITE-ONLY UNBUFFERED +*!* 12 READ-WRITE UNBUFFERED +******************************************************************************** +Function ctlFOpen(pcFileName As String, pnAttribute As Integer) + + Local ; + lcFilename As String, ; + lnDesiredAccess As Integer, ; + lnShareMode As Integer, ; + lnSecurityAttributes As Integer, ; + lnCreationDisposition As Integer, ; + lnFlagsAndAttributes As Integer, ; + lnTemplateFile As Integer, ; + lnBufferFlag As Integer, ; + lnFileHandle As Integer + + m.lcFilename = Alltrim(m.pcFileName) + + If Vartype(m.pnAttribute) # T_NUMERIC Then + m.pnAttribute = 0 + Endif + + Do Case + Case m.pnAttribute = 0 + m.lnDesiredAccess = GENERIC_READ + m.lnBufferFlag = 0 + Case m.pnAttribute = 1 + m.lnDesiredAccess = GENERIC_WRITE + m.lnBufferFlag = 0 + Case m.pnAttribute = 2 + m.lnDesiredAccess = Bitor(GENERIC_READ, GENERIC_WRITE) + m.lnBufferFlag = 0 + Case m.pnAttribute = 10 + m.lnDesiredAccess = GENERIC_READ + m.lnBufferFlag = FILE_FLAG_WRITE_THROUGH + Case m.pnAttribute = 11 + m.lnDesiredAccess = GENERIC_WRITE + m.lnBufferFlag = FILE_FLAG_WRITE_THROUGH + Case m.pnAttribute = 12 + m.lnDesiredAccess = Bitor(GENERIC_READ, GENERIC_WRITE) + m.lnBufferFlag = FILE_FLAG_WRITE_THROUGH + Otherwise + m.lnDesiredAccess = GENERIC_READ + m.lnBufferFlag = 0 + Endcase + + m.lnShareMode = 0 + m.lnSecurityAttributes = 0 + m.lnCreationDisposition = OPEN_EXISTING + m.lnFlagsAndAttributes = Bitor(FILE_ATTRIBUTE_NORMAL, m.lnBufferFlag) + m.lnTemplateFile = 0 + + m.lnFileHandle = apiCreateFile( ; + m.lcFilename, ; + m.lnDesiredAccess, ; + m.lnShareMode, ; + m.lnSecurityAttributes, ; + m.lnCreationDisposition, ; + m.lnFlagsAndAttributes, ; + m.lnTemplateFile) + + Return m.lnFileHandle +Endfunc + +******************************************************************************** +Function ctlFRead(pnFileHandle As Integer, pnBytesToRead As Integer) + + Local ; + lcByteString As String, ; + lnBytesRead As Integer, ; + lnApiRetVal As Integer, ; + lnOverlapped As Integer + + m.lnBytesRead = 0 + m.lcByteString = Space(m.pnBytesToRead) + m.lnOverlapped = 0 + + m.lnApiRetVal = apiReadFile(m.pnFileHandle, ; + @m.lcByteString, ; + m.pnBytesToRead , ; + @m.lnBytesRead , ; + m.lnOverlapped) + + If m.lnApiRetVal = 0 Then + m.lcByteString = "" + Else + m.lcByteString = Left(m.lcByteString, m.lnBytesRead) + Endif + + Return m.lcByteString +Endfunc + +******************************************************************************** +*!* _Fseek(nFileHandle, nBytesMoved ", nRelativePosition") +*!* #DEFINE FILE_BEGIN 0 +*!* #DEFINE FILE_CURRENT 1 +*!* #DEFINE FILE_END 2 +*!* #DEFINE INVALID_SET_FILE_POINTER -1 +******************************************************************************** +Function ctlFSeek(pnFileHandle As Integer, pnBytesMoved As Integer , pnRelativePosition As Integer) + + Local ; + lnLow As Integer, ; + lnHigh As Integer, ; + lcNewFilePointer As String, ; + lnNewFilePointer As Integer, ; + lnApiRetVal As Integer + + If Vartype(m.pnRelativePosition) # T_NUMERIC Then + m.pnRelativePosition = 0 + Endif + + *!* Split large integer into low unsigned and high signed + + m.lnLow = 0 + m.lnHigh = 0 + ctlLargeIntegerToLowHigh(m.pnBytesMoved, @m.lnLow, @m.lnHigh) + + m.lcNewFilePointer = Replicate(NULCHAR, 8) + + m.lnApiRetVal = ; + apiSetFilePointerEx( ; + m.pnFileHandle , ; + m.lnLow , ; + m.lnHigh, ; + @m.lcNewFilePointer, ; + m.pnRelativePosition ) + + If m.lnApiRetVal = 0 Then + m.lnNewFilePointer = -1 + Else + m.lnNewFilePointer = ctlCToLargeInteger(m.lcNewFilePointer) + Endif + + Return m.lnNewFilePointer +Endfunc + +******************************************************************************** +*!* ctlFSize(cFilename|nFileHandle) +******************************************************************************** +Function ctlFSize(puFnameOrFhandle As variant) + + Local ; + m.lnFileSize As Integer, ; + m.llCloseFile As Boolean, ; + m.lnFileHandle As Integer, ; + m.lcLargeInt As String, ; + m.lnApiRetVal As Integer + + m.lnFileSize = -1 + m.lnFileHandle = HFILE_ERROR + m.llCloseFile = FALSE + + Do Case + Case Vartype(m.puFnameOrFhandle) = T_NUMERIC + m.lnFileHandle = m.puFnameOrFhandle + + Case Vartype(m.puFnameOrFhandle) = T_CHARACTER + m.llCloseFile = TRUE + m.lnFileHandle = ctlFOpen(m.puFnameOrFhandle, 0) + + Otherwise + Return m.lnFileSize + Endcase + + If m.lnFileHandle <> HFILE_ERROR + + m.lcLargeInt = Replicate(NULCHAR, 8) + m.lnApiRetVal = apiGetFileSizeEx(m.lnFileHandle, @m.lcLargeInt) + + If m.lnApiRetVal <> 0 Then + m.lnFileSize = ctlCToLargeInteger(m.lcLargeInt) + Endif + Endif + + *!* Close file + If m.llCloseFile = TRUE + ctlFClose(m.lnFileHandle) + Endif + + Return m.lnFileSize +Endfunc + +******************************************************************************** +*!* ctlFwrite(nFileHandle, cExpression [, nCharactersWritten]) +******************************************************************************** +Function ctlFWrite(m.pnFileHandle As Integer, m.pcExpression As String, m.pnCharactersWritten As Integer) + + Local ; + m.lnBytesWritten As Integer, ; + m.lnOverlapped As Integer, ; + m.lnApiRetVal As Integer + + m.lnBytesWritten = 0 + m.lnOverlapped = 0 + + If Vartype(m.pnCharactersWritten) <> T_NUMERIC Then + m.pnCharactersWritten = Len(m.pcExpression) + Endif + + m.lnApiRetVal = apiWriteFile(m.pnFileHandle, ; + m.pcExpression, ; + m.pnCharactersWritten , ; + @m.lnBytesWritten, ; + m.lnOverlapped) + + Return m.lnBytesWritten +Endfunc + +******************************************************************************** +Function ctlLargeIntegerToC(m.pnLargeInt As Integer) + + Local ; + m.lnLow As Integer, ; + m.lnHigh As Integer, ; + m.lcLargeInt As String + + m.lnLow = 0 + m.lnHigh = 0 + + ctlLargeIntegerToLowHigh(m.pnLargeInt, @m.lnLow, @m.lnHigh) + m.lcLargeInt = BinToC(m.lnLow, "4rs") + BinToC(m.lnHigh, "4rs") + Return m.lcLargeInt +Endfunc + +******************************************************************************** +*!* ctlLargeIntegerToLowHigh(nLargeInt, @nLow, @nHigh) +******************************************************************************** +Function ctlLargeIntegerToLowHigh(m.pnLargeInt, m.lnLow, m.lnHigh) + + m.lnLow = m.pnLargeInt % 2^32 + m.lnHigh = Int((m.pnLargeInt - m.lnLow) / 2^32) + + If m.lnLow < 0 Then + m.lnLow = m.lnLow + 2^32 + Endif + + Return +Endfunc + +******************************************************************************** +Function ctlLowHighToLargeInteger(pnLow As Integer, pnHigh As Integer) + + Local lnLargeInt As Integer + + If m.pnLow < 0 Then + m.pnLow = m.pnLow + 2^32 + Endif + + m.lnLargeInt = m.pnLow + m.pnHigh * 2^32 + + Return m.lnLargeInt +Endfunc + +******************************************************************************** +*!* ctlGetLangId +******************************************************************************** +*!* pnLocale could be LOCALE_USER_DEFAULT, LOCALE_SYSTEM_DEFAULT +*!* /http://msdn.microsoft.com/library/default.asp?url=/library/en-us/intl/nls_34rz.asp +*!* /http://msdn.microsoft.com/library/default.asp?url=/library/en-us/intl/nls_8xo3.asp +*!* /http://msdn.microsoft.com/library/default.asp?url=/library/en-us/intl/nls_61df.asp +*!* Sets the value of strings that are language dependant. +******************************************************************************** +Function ctlGetLangId(m.pnLocale As Integer, m.pnWhatToReturn As Integer) + + Local ; + m.lnLocale As Integer, ; + m.lcLocaleInfo As String, ; + m.lnCharsRet As Integer, ; + m.lnLangID As Integer, ; + m.lnPrimaryLangID As Integer, ; + m.lnSubLangID As Integer, ; + m.lnRetVal As Integer + + If Pcount() > 0 .And. Vartype(m.pnLocale) = T_NUMERIC Then + m.lnLocale = m.pnLocale + Else + m.lnLocale = LOCALE_SYSTEM_DEFAULT + Endif + + m.lcLocaleInfo = Replicate(NULCHAR, 5) + m.lnCharsRet = apiGetLocaleInfo(m.pnLocale , LOCALE_ILANGUAGE, @m.lcLocaleInfo, Len(m.lcLocaleInfo)) + *!* remove nul chars + m.lcLocaleInfo = Strtran(m.lcLocaleInfo, NULCHAR, "") + *!* m.lcLocaleInfo is now a character representation of a hex number + m.lnLangID = Evaluate("0x" + m.lcLocaleInfo) + *!* m.lnPrimaryLangID = Bitand(m.lnLangID, 0x3FF) + *!* m.lnSubLangID = Bitrshift(m.lnLangID, 10) + + Do Case + Case Pcount() < 2 Or m.pnWhatToReturn = 1 + m.lnRetVal = m.lnLangID + Case m.pnWhatToReturn = 2 + m.lnRetVal = Bitand(m.lnLangID, 0x3FF) + Case m.pnWhatToReturn = 3 + m.lnRetVal = Bitrshift(m.lnLangID, 10) + Otherwise + m.lnRetVal = m.lnLangID + Endcase + + Return m.lnRetVal +Endfunc + +******************************************************************************** +*!* pnLocale could be LOCALE_USER_DEFAULT, LOCALE_SYSTEM_DEFAULT +******************************************************************************** +Function ctlGetPrimaryLangID(m.pnLocale As Integer) + Return ctlGetLangId(m.pnLocale, 2) +Endfunc + +******************************************************************************** +*!* Returns the height of a certain string in the font selected into a hwnd +******************************************************************************** +Function ctlGetStringHeightFromHwnd(m.pcString, m.pnHWnd) + + Local ; + m.lnDc As Integer, ; + m.lnHeight As Integer, ; + m.lnWidth As Integer, ; + m.lcSize As String, ; + m.lnFont As Integer, ; + m.lnPrevFont As Integer + + *!* Get font + m.lnFont = apiSendMessageInteger(m.pnHWnd, WM_GETFONT, 0, 0) + *!* Get DC + m.lnDc = apiGetDC(m.pnHWnd) + *!* Apply font to DC, we get previous font as result + m.lnPrevFont = apiSelectObject(m.lnDc, m.lnFont) + + m.lcSize = Space(8) + + apiGetTextExtentPoint32(m.lnDc, m.pcString, Len(m.pcString), @ m.lcSize) + + m.lnWidth = CToBin(Substr(m.lcSize, 1, 4), "4RS") && Width + m.lnHeight = CToBin(Substr(m.lcSize, 5, 4), "4RS") && Height + + *!* Restore previous font + apiSelectObject(m.lnDc, m.lnPrevFont ) + + *!* Release DC + apiReleaseDC(m.pnHWnd, m.lnDc) + + Return m.lnWidth +Endfunc + +Function ctlGetStringWidthFromHwnd(m.lcString, m.lnHwnd) +Endfunc + +******************************************************************************** +*!* pnLocale could be LOCALE_USER_DEFAULT, LOCALE_SYSTEM_DEFAULT +******************************************************************************** +Function ctlGetSubLangID(m.pnLocale As Integer) + Return ctlGetLangId(m.pnLocale, 3) +Endfunc + +******************************************************************************** +Function ctlGetPrimaryLangIDFromLangID(m.pnLangID As Integer) + Return Bitand(m.pnLangID, 0x3FF) +Endfunc + +******************************************************************************** +Function ctlGetSubLangIDFromLangID(m.pnLangID As Integer) + Return Bitrshift(m.pnLangID, 10) +Endfunc + +******************************************************************************** +*!* ctlGetHostHWnd(Object) +******************************************************************************** +*!* Returns the HWnd of the form that contains an object, if any +*!* If the object has no parent, returns _VFP.HWnd +*!* If the form is a top level form or has scrollbars, +*!* returns the HWnd of the inner window. +*!* Parameter can be a form, toolbar or control +******************************************************************************** +Function ctlGetHostHWnd(m.poObject As Object) + + Local m.nhWnd As Integer + + *!* traverse the object hierarchy until we find the form: + *!* Modified 20070603 to check for toolbars + *!* Do While Inlist(Upper(m.poObject.BaseClass), "FORM", "TOOLBAR") = FALSE + *!* m.poObject = m.poObject.Parent + *!* Enddo + + *!* 20080405 modified to check for HWnd property of parent + *!* and to check if parent is an object + + *!* Check if we already have a form or toolbar: + If Inlist(Upper(m.poObject.BaseClass), "FORM", "TOOLBAR") Then + m.nhWnd = m.poObject.HWnd + Else + *!* Check if object is contained in another object: + If Type("m.poObject.Parent") = T_UNDEFINED Then + m.nhWnd = _vfp.HWnd + Else + *!* Get first parent: + m.poObject = m.poObject.Parent + + *!* Traverse object hierarchy upwards until we find an object with a HWnd: + Do While Pemstatus(m.poObject, "HWnd", 5) = FALSE + If Type("m.poObject.Parent") = T_UNDEFINED Then + m.nhWnd = _vfp.HWnd + Exit + Else + m.poObject = m.poObject.Parent + Endif + Enddo + m.nhWnd = m.poObject.HWnd + Endif + Endif + + *!* If we have a form, and the form is a top level form, or it has scrollbars, + *!* get hWnd of inner window: + If Upper(m.poObject.BaseClass) = "FORM" Then + If m.poObject.ShowWindow = 2 Or m.poObject.ScrollBars > 0 Then + *!* Get hWnd of client window of Top Level Form //Craig Boyd// + If Version(CON_VER_NUM) >= 900 + m.nhWnd = Sys(2327, Sys(2325, Sys(2326, m.poObject.HWnd))) + Else + m.nhWnd = apiGetWindow(m.poObject.HWnd, GW_CHILD) + Endif + Endif + Endif + + m.poObject = .Null. + Release m.poObject + + Return m.nhWnd +Endfunc + +******************************************************************************** +*!* ctlGetHostHWnd() +*!* Returns the HWnd of a form, or the HWnd of the inner window in case of +*!* top level forms or forms with scrollbars +*!* Parameter can be a form, toolbar or control +******************************************************************************** +Function ctlGetHostHWnd(m.poObject As Object) + + Local ; + m.loForm As Form, ; + m.nhWnd As Integer + + *!* traverse the object hierarchy until we find the form: + *!* Modified 20070603 to check for toolbars + Do While Inlist(Upper(m.poObject.BaseClass), "FORM", "TOOLBAR") = FALSE + m.poObject = m.poObject.Parent + Enddo + + m.loForm = m.poObject + m.poObject = Null + m.nhWnd = m.loForm.HWnd + + *!* If the form is a top level form, or it has scrollbars, get hWnd of inner window: + If Upper(m.loForm.BaseClass) = "FORM" Then + If m.loForm.ShowWindow = 2 Or m.loForm.ScrollBars > 0 Then + *!* Get hWnd of client window of Top Level Form //Craig Boyd// + If Version(CON_VER_NUM) >= 900 + m.nhWnd = Sys(2327, Sys(2325, Sys(2326, m.loForm.HWnd))) + Else + m.nhWnd = apiGetWindow(m.loForm.HWnd, GW_CHILD) + Endif + Endif + Endif + + m.loForm = Null + + Return m.nhWnd +Endfunc + +******************************************************************************** +*!* int GET_X_LPARAM( +*!* LPARAM lParam +*!* ); +*!* Parameters +*!* lParam +*!* Specifies the value to be converted. +*!* Return Value +*!* The return value is the low-order int of the specified value. +******************************************************************************** +Function ctlGet_X_lParam(m.pnlParam As Integer) + Return Bitand(m.pnlParam, 0xFFFF) +Endfunc + +******************************************************************************** +Function ctlGetXFromLparam(m.pnlParam As Integer) + Return Bitand(m.pnlParam, 0xFFFF) +Endfunc + +******************************************************************************** +*!* int GET_Y_LPARAM( +*!* LPARAM lParam +*!* ); +*!* Parameters +*!* lParam +*!* Specifies the value to be converted. +*!* Return Value +*!* The return value is the high-order int of the specified value. +******************************************************************************** +Function ctlGet_Y_lParam(m.pnlParam As Integer) + Return Bitrshift(m.pnlParam, 16) && Bitand(Int(m.pnlParam / 0x10000), 0xFFFF) +Endfunc + +******************************************************************************** +Function ctlGetUserName + Local m.lcBuffer, m.lnBufferLen + m.lcBufferLen = UNLEN + 1 + m.lcBuffer = Replicate(NULCHAR, m.lcBufferLen) + apiGetUserName(@m.lcBuffer, @m.lcBufferLen) + Return Left(m.lcBuffer, m.lcBufferLen - 1) +Endfunc + +******************************************************************************** +Function ctlGetYFromLparam(m.pnlParam As Integer) + Return Bitrshift(m.pnlParam, 16) && Bitand(Int(m.pnlParam / 0x10000), 0xFFFF) +Endfunc + +******************************************************************************** +Function ctlGetWindowProcedure(m.pnHWnd As Integer) + If Empty(m.pnHWnd) Then + m.pnHWnd = _vfp.HWnd + Endif + Return apiGetWindowLong(m.pnHWnd, GWL_WNDPROC) +Endfunc + +******************************************************************************** +*!* BYTE HIBYTE( +*!* Word wValue +*!* ); +*!* Parameters +*!* wValue +*!* Specifies the Value To be converted. +*!* Return Value +*!* the Return Value Is the High-Order BYTE Of the specified Value. +******************************************************************************** +Function ctlHiByte(m.pnlParam As Integer) + Return Bitrshift(m.pnlParam, 8) && Bitand(Int(m.pnlParam / 0x10000), 0xFFFF) +Endfunc + +******************************************************************************** +*!* BYTE LOBYTE( +*!* Word wValue +*!* ); +*!* Parameters +*!* wValue +*!* Specifies the Value To be converted. +*!* Return Value +*!* the Return Value Is the low-Order BYTE Of the specified Value. +******************************************************************************** +Function ctlLoByte(m.pnlParam As Integer) + Return Bitand(m.pnlParam , 0xFF) +Endfunc + +******************************************************************************** +*!* Word HIWORD( +*!* DWORD dwValue +*!* ); +*!* Parameters +*!* dwValue +*!* Specifies the Value To be converted. +*!* Return Value +*!* the Return Value Is the High-Order Word Of the specified Value. +******************************************************************************** +Function ctlHiWord(m.pnlParam As Integer) + Return Bitrshift(m.pnlParam, 16) && Bitand(Int(m.pnlParam / 0x10000), 0xFFFF) +Endfunc + +******************************************************************************** +*!* Word LOWORD( +*!* DWORD dwValue +*!* ); +*!* Parameters +*!* dwValue +*!* Specifies the Value To be converted. +*!* Return Value +*!* the Return Value Is the low-Order Word Of the specified Value. +******************************************************************************** +Function ctlLoWord(m.pnlParam As Integer) + Return Bitand(m.pnlParam, 0xFFFF) +Endfunc + + +Function ctlGetStringResource(pcResource As String, pnStringId As Integer) + Local ; + lnModule As Integer, ; + llReleaseLibrary As Boolean, ; + lcString As String + + *!* Get module handle of user32 if it is loaded + m.lnModule = apiGetModuleHandle(m.pcResource) + + *!* If not loaded, load it + If m.lnModule = 0 Then + m.llReleaseLibrary = TRUE + m.lnModule = apiLoadLibrary(m.pcResource) + Else + m.llReleaseLibrary = FALSE + Endif + + m.lcString = Replicate(NULA, 1024) + + m.lnStringLen = apiLoadString(m.lnModule, m.pnStringId, @m.lcString, Len(m.lcString)) + + m.lcString = Left(m.lcString, m.lnStringLen) + + If m.llReleaseLibrary = TRUE Then + apiFreeLibrary(m.lnModule) + Endif + + Return m.lcString +Endfunc + +******************************************************************************** +*!* DWORD MAKELONG( +*!* Word wLow, +*!* Word wHigh +*!* ); +*!* Parameters +*!* wLow +*!* Specifies the low-Order Word Of the new Value. +*!* wHigh +*!* Specifies the High-Order Word Of the new Value. +*!* Return Value +*!* the Return Value Is a Long Value. +******************************************************************************** +Function ctlMakeLong(m.pnLow As Integer, m.pnHigh As Integer) + Return m.pnLow + m.pnHigh * 0x10000 && Bitor(m.wLow, BITLSHIFT(m.wHigh, 16) +Endfunc + +******************************************************************************** +*!* LPARAM MAKELPARAM( +*!* WORD wLow, +*!* WORD wHigh +*!* ); +*!* Parameters +*!* wLow +*!* Specifies the low-order word of the new value. +*!* wHigh +*!* Specifies the high-order word of the new value. +*!* Return Value +*!* The return value is an LPARAM value. +******************************************************************************** +Function ctlMakelParam(m.pnLow As Integer, m.pnHigh As Integer) + Return m.pnLow + m.pnHigh * 0x10000 && Bitor(m.wLow, BITLSHIFT(m.wHigh, 16) +Endfunc + +******************************************************************************** +*!* POINT +*!* The POINT structure defines the x- and y- coordinates of a point. +*!* typedef struct tagPOINT { +*!* LONG x; +*!* LONG y; +*!* } POINT, *PPOINT; +*!* Members +*!* x +*!* Specifies the x-coordinate of the point. +*!* y +*!* Specifies the y-coordinate of the point. +*!* This is not a Windows Macro +******************************************************************************** +Function ctlMakePoint(m.pnX As Integer, m.pnY As Integer) + Return BinToC(m.pnX, "4RS") + BinToC(m.pnY, "4RS") +Endfunc + +******************************************************************************** +Function ctlMakewParam(m.pnLow As Integer, m.pnHigh As Integer) + ******************************************************************************** + Return ctlMakelParam(m.pnLow, m.pnHigh) +Endfunc + +******************************************************************************** +*!* POINT +*!* The POINT structure defines the x- and y- coordinates of a point. +*!* typedef struct tagPOINT { +*!* LONG x; +*!* LONG y; +*!* } POINT, *PPOINT; +*!* Members +*!* x +*!* Specifies the x-coordinate of the point. +*!* y +*!* Specifies the y-coordinate of the point. +*!* This is not a Windows Macro +******************************************************************************** +Function ctlGetXFromPoint(m.pcPoint As String) + Return CToBin(Substr(m.pcPoint, 1, 4), "4RS") +Endfunc + +******************************************************************************** +*!* POINT +*!* The POINT structure defines the x- and y- coordinates of a point. +*!* typedef struct tagPOINT { +*!* LONG x; +*!* LONG y; +*!* } POINT, *PPOINT; +*!* Members +*!* x +*!* Specifies the x-coordinate of the point. +*!* y +*!* Specifies the y-coordinate of the point. +*!* This is not a Windows Macro +******************************************************************************** +Function ctlGetYFromPoint(m.pcPoint As String) + Return CToBin(Substr(m.pcPoint, 5, 4), "4RS") +Endfunc + +******************************************************************************** +*!* This returns an object reference to the parent form +*!* of a non top level form: +*!* the _Screen, or some Top Level Form +*!* accepts as parameter a form reference +******************************************************************************** +Function ctlGetParentForm(m.poForm As Form) + Local ; + m.lnHwnd As Integer, ; + m.loForm As Form, ; + m.lnX As Integer + + m.lnHwnd = apiGetParent(m.poForm.HWnd) + + If _Screen.HWnd = m.lnHwnd Then + m.loForm = _Screen + Else + *!* Parent is a Top Level Form, get HWnd of form, what we have + *!* now is HWnd of inner window of Top Level Form: + m.lnHwnd = apiGetParent(m.lnHwnd) + + *!* Find the Top Level Form that has this HWnd: + For m.lnX = 1 To _Screen.FormCount + If _Screen.Forms(m.lnX).HWnd = m.lnHwnd Then + m.loForm = _Screen.Forms(m.lnX) + Exit + Endif + Endfor + Endif + + Return m.loForm +Endfunc + +******************************************************************************** +*!* Returns current date formated string +*!* 1 DATE_SHORTDATE +*!* 2 DATE_LONGDATE +******************************************************************************** +Function ctlGetDateFormat(pnFlags As Integer) + + Local ; + lnLocale As Integer, ; + lcDate As String, ; + lcFormat As String, ; + lcDateStr As String, ; + lnDateStrLen As Integer, ; + lnFlags As Integer + + If Vartype(m.pnFlags) # T_NUMERIC Then + m.lnFlags = DATE_LONGDATE + Else + m.lnFlags = m.pnFlags + Endif + + m.lnLocale = LOCALE_USER_DEFAULT + + m.lcDate = .Null. + m.lcFormat = .Null. + + m.lnDateStrLen = 0xFF + m.lcDateStr = Space(m.lnDateStrLen) + + m.lnDateStrLen = apiGetDateFormat( ; + m.lnLocale, ; + m.lnFlags, ; + @m.lcDate, ; + @m.lcFormat, ; + @m.lcDateStr, ; + m.lnDateStrLen) + m.lcDateStr= Left(m.lcDateStr, m.lnDateStrLen - 1) + + Return m.lcDateStr +Endfunc + +Function ctlGetDateFormatEx(pdDate, pnLocale, pnFlags) + + Local ; + lcDate As String, ; + lcFormat As String, ; + lcDateStr As String, ; + lnDateStrLen As Integer, ; + ldDate As Date, ; + lnLocale As Integer, ; + lnFlags As Integer + + If Vartype(m.pdDate) # T_DATE Then + m.ldDate = Date() + Else + m.ldDate = m.pdDate + Endif + + If Vartype(m.pnLocale) # T_NUMERIC Then + m.lnLocale = LOCALE_USER_DEFAULT + Else + m.lnLocale = m.pnLocale + Endif + + If Vartype(m.pnFlags) # T_NUMERIC Then + m.lnFlags = DATE_LONGDATE + Else + m.lnFlags = m.pnFlags + Endif + + *!* .http://msdn.microsoft.com/en-us/library/ms724950(VS.85).aspx + *!* typedef struct _SYSTEMTIME { + *!* WORD wYear; + *!* WORD wMonth; + *!* WORD wDayOfWeek; + *!* WORD wDay; + *!* WORD wHour; + *!* WORD wMinute; + *!* WORD wSecond; + *!* WORD wMilliseconds; + *!* *!* } SYSTEMTIME + + m.lcDate = ; + BinToC(Year(m.ldDate), "2rs") + ; + BinToC(Month(m.ldDate), "2rs") + ; + BinToC(Dow(m.ldDate, 1), "2rs") + ; + BinToC(Day(m.ldDate), "2rs") + ; + 0h0000 + ; + 0h0000 + ; + 0h0000 + ; + 0h0000 + + m.lcFormat = .Null. + + m.lnDateStrLen = 0xFF + m.lcDateStr = Space(m.lnDateStrLen) + + m.lnDateStrLen = apiGetDateFormat( ; + m.lnLocale, ; + m.lnFlags, ; + m.lcDate, ; + m.lcFormat, ; + @m.lcDateStr, ; + m.lnDateStrLen) + + m.lcDateStr= Left(m.lcDateStr, m.lnDateStrLen - 1) + + Return m.lcDateStr +Endfunc + +******************************************************************************** +*!* Returns the type of container a control is in, or the type of form +*!* accepts as parameter a control or a form reference + +*!* CON_FORMTYPE_DEFAULT 0 +*!* CON_FORMTYPE_TOPLEVEL 1 +*!* CON_FORMTYPE_SCREEN 2 + +*!* Determine the type of form the control parameter is in, +*!* or the type of form, if the passed parameter is a form + +*!* Parameter can be a form, toolbar or control +******************************************************************************** +Function ctlGetFormType(m.poObject As Object) + + Local ; + m.loForm As Form, ; + m.lnFormType As Integer + + m.loForm = m.poObject + + *!* Go up the object hierarchy until we find a form: + *!* 20070711 Modified to account for toolbars + Do While Inlist(Upper(m.loForm.BaseClass), "FORM", "TOOLBAR") = FALSE + If Type("m.loForm.Parent") = T_OBJECT Then + m.loForm = m.loForm.Parent + Else + m.loForm = _Screen.ActiveForm + Exit + Endif + Enddo + + m.lnFormType = CON_FORMTYPE_DEFAULT + + *!* If container is a TLF, must have ShowWindow = 2 + If m.loForm.ShowWindow = CON_SHOWWIN_ASTOPLEVELFORM Then + m.lnFormType = CON_FORMTYPE_TOPLEVEL + Endif + + *!* If Form.Name equals the _Screen.Name, then container is _Screen + If m.loForm.Name == _Screen.Name Then + m.lnFormType = CON_FORMTYPE_SCREEN + Endif + + m.loForm = Null + + Return m.lnFormType +Endfunc + +******************************************************************************** +Function ctlTwipsPerPixelX() + + Local ; + m.lnDc As Integer, ; + m.lnLogPixelsX As Integer + + m.lnDc = apiGetDC(HWND_DESKTOP) + m.lnLogPixelsX = apiGetDeviceCaps(m.lnDc, LOGPIXELSX) + apiReleaseDC(HWND_DESKTOP, m.lnDc) + Return Round(1440 / m.lnLogPixelsX, 0) +Endfunc + +******************************************************************************** +Function ctlTwipsPerPixelY() + + Local ; + m.lnDc As Integer, ; + m.lnLogPixelsY As Integer + + m.lnDc = apiGetDC(HWND_DESKTOP) + m.lnLogPixelsY = apiGetDeviceCaps(m.lnDc, LOGPIXELSY) + apiReleaseDC(HWND_DESKTOP, m.lnDc) + Return Round(1440 / m.lnLogPixelsY, 0) +Endfunc + +******************************************************************************** +*!* GUID FUNCTIONS +******************************************************************************** +*!* http://www.ietf.org/rfc/rfc4122.txt +*!* http://en.wikipedia.org/wiki/Globally_Unique_Identifier +*!* http://en.wikipedia.org/wiki/Universally_Unique_Identifier + +******************************************************************************** +*!* Returns a new binary 16 byte GUID + +*!* In Windows NT 4.0, Windows Me/98, and Windows 95 DCOM release, UuidCreate returns +*!* RPC_S_UUID_LOCAL_ONLY when the originating computer does not have an ethernet/token ring +*!* (IEEE 802.x) address. In this case, the generated UUID is a valid identifier, and is guaranteed +*!* to be unique among all UUIDs generated on the computer. However, the possibility exists that +*!* another computer without an ethernet/token ring address generated the identical UUID. +*!* Therefore you should never use this UUID to identify an object that is not strictly local to +*!* your computer. Computers with ethernet/token ring addresses generate UUIDs that are guaranteed +*!* to be globally unique. +******************************************************************************** +Function ctlNewGuid() + + Local m.lcGuid As String + + m.lcGuid = Replicate(Chr(0xFF), 16) + apiUuidCreate(@m.lcGuid) + + Return m.lcGuid +Endfunc + +******************************************************************************** +Function ctlNewGuidNil() + + Local m.lcGuid As String + + m.lcGuid = Replicate(Chr(0xFF), 16) + apiUuidCreateNil(@m.lcGuid) + + Return m.lcGuid +Endfunc + +******************************************************************************** +Function ctlNewGuidSequential() + + Local m.lcGuid As String + + m.lcGuid = Replicate(Chr(0xFF), 16) + apiUuidCreateSequential(@m.lcGuid) + + Return m.lcGuid +Endfunc + +******************************************************************************** +*!* Returns a new 32 char GUID string +*!* Format "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" +******************************************************************************** +Function ctlNewGuidString32() + Return ctlGuidToString32(ctlNewGuid()) +Endfunc + +******************************************************************************** +*!* Returns a new 36 char GUID string +*!* Format "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" +******************************************************************************** +Function ctlNewGuidString36() + Return ctlGuidToString36(ctlNewGuid()) +Endfunc + +******************************************************************************** +*!* Returns a new 38 char GUID string +*!* Format "{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}" +******************************************************************************** +Function ctlNewGuidString38() + Return ctlGuidToString38(ctlNewGuid()) +Endfunc + +******************************************************************************** +*!* Converts a binary 16 byte GUID to a 32 char GUID string +*!* format "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" +******************************************************************************** +Function ctlGuidToString32(pcGuid As String) + + Local m.lcGuidString As String + + m.lcGuidString = "" + + *!* Reorder GUID bytes + m.lcGuidString = ; + Substr(m.pcGuid, 4, 1) + ; + Substr(m.pcGuid, 3, 1) + ; + Substr(m.pcGuid, 2, 1) + ; + Substr(m.pcGuid, 1, 1) + ; + Substr(m.pcGuid, 6, 1) + ; + Substr(m.pcGuid, 5, 1) + ; + Substr(m.pcGuid, 8, 1) + ; + Substr(m.pcGuid, 7, 1) + ; + Substr(m.pcGuid, 9, 8) + + *!* Convert bytes to encoded HexBinary + m.lcGuidString = Strconv(m.lcGuidString, 15) + + Return m.lcGuidString +Endfunc + +******************************************************************************** +*!* Converts a binary 16 byte GUID to a 36 char GUID string +*!* format "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" +*!* This is faster that using the StringFromGuid2 API call +******************************************************************************** +Function ctlGuidToString36(pcGuid As String) + + Local ; + m.lcGuidString As String, ; + m.lcGuid As String + + m.lcGuidString = "" + + *!* Convert bytes to encoded HexBinary + m.lcGuid = Strconv(m.pcGuid, 15) + + *!* Reorder GUID bytes, Add hyphens + m.lcGuidString = ; + Substr(m.lcGuid, 07, 02) + ; + Substr(m.lcGuid, 05, 02) + ; + Substr(m.lcGuid, 03, 02) + ; + Substr(m.lcGuid, 01, 02) + ; + "-" + ; + Substr(m.lcGuid, 11, 02) + ; + Substr(m.lcGuid, 09, 02) + ; + "-" + ; + Substr(m.lcGuid, 15, 02) + ; + Substr(m.lcGuid, 13, 02) + ; + "-" + ; + Substr(m.lcGuid, 17, 04) + ; + "-" + ; + Substr(m.lcGuid, 21, 12) + + Return m.lcGuidString +Endfunc + +******************************************************************************** +*!* Converts a binary 16 byte GUID to a 38 char GUID string +*!* format "{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}" +*!* This is faster that using the StringFromGuid2 API call +******************************************************************************** +Function ctlGuidToString38(pcGuid As String) + + Local ; + m.lcGuidString As String, ; + m.lcGuid As String + + m.lcGuidString = "" + + *!* Convert bytes to encoded HexBinary + m.lcGuid = Strconv(m.pcGuid, 15) + + *!* Reorder GUID bytes, Add brackets, hyphens + m.lcGuidString = ; + "{" + ; + Substr(m.lcGuid, 07, 02) + ; + Substr(m.lcGuid, 05, 02) + ; + Substr(m.lcGuid, 03, 02) + ; + Substr(m.lcGuid, 01, 02) + ; + "-" + ; + Substr(m.lcGuid, 11, 02) + ; + Substr(m.lcGuid, 09, 02) + ; + "-" + ; + Substr(m.lcGuid, 15, 02) + ; + Substr(m.lcGuid, 13, 02) + ; + "-" + ; + Substr(m.lcGuid, 17, 04) + ; + "-" + ; + Substr(m.lcGuid, 21, 12) + ; + "}" + + Return m.lcGuidString +Endfunc + +******************************************************************************** +*!* Converts char GUID string to a binary 16 byte GUID +*!* format "{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}" +*!* format "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" +*!* format "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" +******************************************************************************** +Function ctlGuidFromString(pcGuidString As String) + + Local ; + m.lcGuid As String, ; + m.lcGuidString As String + + m.lcGuid = "" + + *!* Strip brackets and hyphens + m.lcGuidString = Chrtran(m.pcGuidString, "{-}", "") + + *!* Reorder GUID string chars + m.lcGuid = ; + + Substr(m.lcGuidString, 7, 2) ; + + Substr(m.lcGuidString, 5, 2) ; + + Substr(m.lcGuidString, 3, 2) ; + + Left(m.lcGuidString, 2) ; + + Substr(m.lcGuidString, 11, 2) ; + + Substr(m.lcGuidString, 9, 2) ; + + Substr(m.lcGuidString, 15, 2) ; + + Substr(m.lcGuidString, 13, 2) ; + + Right(m.lcGuidString, 16) + + *!* Convert bytes to decoded HexBinary + m.lcGuid = Strconv(m.lcGuid, 16) + + Return m.lcGuid +Endfunc + +******************************************************************************** +*!* Used just to check the other functions +*!* StringUuid parameter of UuidToString: +*!* Pointer to a pointer to the string into which +*!* the UUID specified in the Uuid parameter will be placed. +*!* UuidToString returns a string in the following format: +*!* "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx" (lowercase) +******************************************************************************** +Function ctlGuidToStringApi1(m.pcGuid As String) + + Local m.lnPointer As Integer + + m.lnPointer = 0 + apiUuidToString(m.pcGuid, @m.lnPointer) + + Return Sys(2600, m.lnPointer, 36) +Endfunc + +******************************************************************************** +*!* Used just to check the other functions +******************************************************************************** +Function ctlGuidToStringApi2(m.pcGuid As String) + + Local ; + m.lcGuidString As String, ; + m.lcLen As Integer + + *!* Set up buffer: 39 chars * 2 (unicode) + m.lcGuidString = Space(78) + m.lcLen = 78 + + apiStringFromGUID2(m.pcGuid, @m.lcGuidString, m.lcLen) + + *!* Remove double null and convert from Unicode: + Return Strconv(Left(m.lcGuidString, 76), 6) + +Endfunc + +******************************************************************************** +*!* Used just to check the other functions +******************************************************************************** +Function ctlGuidFromStringApi(m.pcGuidString As String) + + Local ; + m.lcUuid As String, ; + m.lcGuidString As String + + *!* Strip brackets and hyphens + m.lcGuidString = Chrtran(m.pcGuidString, "{-}", "") + + *!* Add hyphens + m.lcGuidString = ; + LEFT(m.lcGuidString, 8) ; + + "-" ; + + Substr(m.lcGuidString, 9, 4) ; + + "-" ; + + Substr(m.lcGuidString, 13, 4) ; + + "-" ; + + Substr(m.lcGuidString, 17, 4) ; + + "-" ; + + Right(m.lcGuidString, 12) + + m.lcUuid = Replicate(Chr(0xFF), 16) + apiUuidFromString(m.lcGuidString, @m.lcUuid) + Return m.lcUuid + +Endfunc + +******************************************************************************** +*!* END ctl32_functions +******************************************************************************** + + +Function __BaseX( txVal, tcDom ) + * Converts a number to a string representation of that number + * tnVal - Number + * tcDom - The domain of characters to be used + * typical Domains are: + * "01" - Binary + * "0123456789" - Decimal + * "0123456789abcdef" - Hex + * "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" - Base62 + * "23456789ABCDEFGHJKLMNPRSTUVWXYZ" - No {01IOQ} - they might confuse a user. + + * If you want the result padded, use PADL() + + Local ; + lnVal, ; + lnDomSiz, ; + lcRet, ; + lnPosition, ; + lnPlace + + If Vartype(txVal) = "N" + If txVal < 0 Then + txVal = txVal + 1 + Endif + lnVal = txVal + lnDomSiz = Len(tcDom) + + * Humans get restless if the value zero is displayed as an empty string (blank). + * The first char of the domain (generally 0) is normally used as a place holder, + * but in the case of the value zero, it fills in to keep the peace. + * This may have lead to the fall of Rome. + + If lnVal = 0 + lcRet = Substr( tcDom, 1, 1 ) + Else + lcRet = '' + Do While lnVal <> 0 + lnDig = lnVal % lnDomSiz + lnVal = Int( lnVal/lnDomSiz ) + If txVal > 0 Then + lcDig = Substr( tcDom, lnDig+1, 1 ) + Else + If lnDig = 0 Then + lnDig = 16 + Endif + lcDig = Substr( tcDom, lnDig, 1 ) + Endif + + lcRet = lcDig + lcRet + Enddo + Endif + lxRet=lcRet + Else + * Convert it back to decimal + lnVal = 0 + lnPlace = 0 + For lnPosition = Len(txVal) To 1 Step -1 + lnVal = lnVal + (At( Substr(txVal,lnPosition,1), tcDom)-1) * (Len(tcDom)^lnPlace) + lnPlace=lnPlace+1 + Endfor + lxRet = lnVal + Endif + + Return lxRet +Endfunc diff --git a/COMUN/utile/ctl32/ctl32_progressbar.vct b/COMUN/utile/ctl32/ctl32_progressbar.vct new file mode 100644 index 0000000..28ca77d Binary files /dev/null and b/COMUN/utile/ctl32/ctl32_progressbar.vct differ diff --git a/COMUN/utile/ctl32/ctl32_progressbar.vcx b/COMUN/utile/ctl32/ctl32_progressbar.vcx new file mode 100644 index 0000000..133d8ef Binary files /dev/null and b/COMUN/utile/ctl32/ctl32_progressbar.vcx differ diff --git a/COMUN/utile/ctl32/ctl32_scontainer.vct b/COMUN/utile/ctl32/ctl32_scontainer.vct new file mode 100644 index 0000000..ccbe77a Binary files /dev/null and b/COMUN/utile/ctl32/ctl32_scontainer.vct differ diff --git a/COMUN/utile/ctl32/ctl32_scontainer.vcx b/COMUN/utile/ctl32/ctl32_scontainer.vcx new file mode 100644 index 0000000..373919f Binary files /dev/null and b/COMUN/utile/ctl32/ctl32_scontainer.vcx differ diff --git a/COMUN/utile/ctl32/ctl32_statusbar.vct b/COMUN/utile/ctl32/ctl32_statusbar.vct new file mode 100644 index 0000000..5315855 Binary files /dev/null and b/COMUN/utile/ctl32/ctl32_statusbar.vct differ diff --git a/COMUN/utile/ctl32/ctl32_statusbar.vcx b/COMUN/utile/ctl32/ctl32_statusbar.vcx new file mode 100644 index 0000000..f11f268 Binary files /dev/null and b/COMUN/utile/ctl32/ctl32_statusbar.vcx differ diff --git a/COMUN/utile/ctl32/ctl32_statusbar_fals.vct b/COMUN/utile/ctl32/ctl32_statusbar_fals.vct new file mode 100644 index 0000000..43a71ac Binary files /dev/null and b/COMUN/utile/ctl32/ctl32_statusbar_fals.vct differ diff --git a/COMUN/utile/ctl32/ctl32_statusbar_fals.vcx b/COMUN/utile/ctl32/ctl32_statusbar_fals.vcx new file mode 100644 index 0000000..1147adf Binary files /dev/null and b/COMUN/utile/ctl32/ctl32_statusbar_fals.vcx differ diff --git a/COMUN/utile/ctl32/ctl32_structs.vct b/COMUN/utile/ctl32/ctl32_structs.vct new file mode 100644 index 0000000..4531b6f Binary files /dev/null and b/COMUN/utile/ctl32/ctl32_structs.vct differ diff --git a/COMUN/utile/ctl32/ctl32_structs.vcx b/COMUN/utile/ctl32/ctl32_structs.vcx new file mode 100644 index 0000000..3f91dac Binary files /dev/null and b/COMUN/utile/ctl32/ctl32_structs.vcx differ diff --git a/COMUN/utile/ctl32/ctl32_structures.prg b/COMUN/utile/ctl32/ctl32_structures.prg new file mode 100644 index 0000000..e31193b --- /dev/null +++ b/COMUN/utile/ctl32/ctl32_structures.prg @@ -0,0 +1,3278 @@ +******************************************************************************** +*!* ctl32_structures.prg +******************************************************************************** +*!* This classes are based on the work of Christian Eischeld with vfp2c32 +*!* vfp2c32.fll must be loaded with SET LIBRARY +******************************************************************************** +#Include ctl32.h + +If Not Sys(16) $ Upper(Set("Procedure")) Then + Set Procedure To Sys(16) Additive +Endif + +Return + +******************************************************************************** +*!* This is the base class for all structure classes below +******************************************************************************** +Define Class _STRUCTBASE As Exception + + Address = 0 + InitMembersDone = FALSE + Protected Embedded + Embedded = FALSE + Name = "STRUCTBASE" + SizeOf = 0 + Value = FALSE + + Protected _MemberData + _MemberData = '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + + Protected Procedure Init(pnAddress) + If Vartype(m.pnAddress) # "N" Then + This.Address = AllocMem(This.SizeOf) + If This.Address = 0 + Error(43) + Return FALSE + Endif + Else + This.Address = m.pnAddress + This.Embedded = TRUE + Endif + This.InitMembers() + This.InitMembersDone = TRUE + Endproc + + Protected Procedure Destroy() + This.FreeMembers() + If This.Embedded = FALSE Then + FreeMem(This.Address) + Endif + Endproc + + Procedure InitMembers() + *!* Here we set up initial values, like size of structure member + *!* And also create aditional substructures + Endproc + + Procedure FreeMembers() + *!* Here we free aditional substructures + Endproc + + Hidden Procedure Value_Access() + *!* This returns the whole structure + Return Sys(2600, This.Address, This.SizeOf) + Endproc + + Hidden Procedure Value_Assign(pnNewVal) + *!* This assigns a string to the structure as a whole + Sys(2600, This.Address, This.SizeOf, m.pnNewVal) + Endproc + + *!* Protected Procedure AllocMem(pnLength) + *!* *!* Allocates memory + *!* Return apiHeapAlloc(apiGetProcessHeap(), HEAP_ZERO_MEMORY, m.pnLength) + *!* Endproc + + *!* Protected Procedure FreeMem(pnAddress) + *!* *!* Frees allocated memory + *!* Return apiHeapFree(apiGetProcessHeap(), 0, m.pnAddress) + *!* Endproc + + *!* Protected Procedure ReadCharArray(pnAddress, pnLength) + *!* *!* Reads a string array of m.pnLength, stops at first nul char + *!* Local m.lcString As String + *!* m.lcString = Sys(2600, m.pnAddress, m.pnLength) + *!* Return Left(m.lcString , At(NULCHAR, m.lcString) - 1) + *!* Endproc + + *!* Protected Procedure WriteCharArray(pnAddress, pcCharArray, pnLength) + *!* *!* Writes a string array of m.pnLength + *!* =Sys(2600, m.pnAddress, Min(Len(m.pcCharArray), m.pnLength) , m.pcCharArray) + *!* Return m.pnAddress + *!* Endproc + + *!* Protected Procedure FreePMem(pnAddress) + *!* This.FreeMem(This.ReadUInt(m.pnAddress)) + *!* Endproc + + *!* Protected Procedure ReadPCString(pnAddress) + *!* *!* pnAddress is a pointer to a memory pointer + *!* Local m.lnAddress, m.lnLength, m.lcString + *!* *!* Get address pointer + *!* m.lnAddress = This.ReadUInt(m.pnAddress) + *!* If m.lnAddress <> 0 Then + *!* *!* Get length of memory pointer: + *!* m.lnLength = apiHeapSize(apiGetProcessHeap(), 0, m.lnAddress) + *!* Else + *!* m.lnLength = 0 + *!* Endif + *!* *!* Read value of string pointer, then reads string + *!* If m.lnLength > 0 Then + *!* m.lcString = Sys(2600, m.lnAddress, m.lnLength) + *!* m.lcString = Left(m.lcString , At(NULCHAR, m.lcString) - 1) + *!* Else + *!* m.lcString = "" + *!* Endif + *!* ?"m.lcString", m.lcString + *!* Return m.lcString + *!* Endproc + + + Protected Procedure ReadPCString(pnAddress, pnLen) + *!* pnAddress is a pointer to a memory pointer + Local m.lnAddress, m.lnLength, m.lcString + *!* Get address pointer + m.lnAddress = ReadUInt(m.pnAddress) + If m.lnAddress <> 0 Then + m.lcString = Sys(2600, m.lnAddress, m.pnLen) + Else + m.lcString = "" + Endif + Return m.lcString + Endproc + + *!* Protected Procedure WritePCString(pnAddress, pcString) + *!* Local m.lnAdress As Integer + *!* *!* Release memory + *!* This.FreePMem(m.pnAddress) + *!* *!* Get a new handle for the string: + *!* m.lnAddress = This.AllocMem(Len(m.pcString)) + *!* *!* Save string to handle + *!* =Sys(2600, m.lnAddress, Len(m.pcString), m.pcString) + *!* *!* Save value of handle in memory pointer + *!* This.WriteUInt(m.pnAddress, m.lnAddress) + *!* Endproc + + *!* Protected Procedure ReadUInt(pnAddress) + *!* *!* Reads an unsigned integer (4 bytes) + *!* Local m.lnUInt As Integer + *!* m.lnUInt = CToBin(Sys(2600, m.pnAddress, 4), "4rs") + *!* If m.lnUInt < 0 Then + *!* m.lnUInt = m.lnUInt + 0x100000000 + *!* Endif + *!* Return m.lnUInt + *!* Endproc + + *!* Protected Procedure WriteUInt(pnAddress, pnUInt) + *!* *!* Writes an unsigned integer (4 bytes) + *!* =Sys(2600, m.pnAddress, 4, BinToC(m.pnUInt, "4rs")) + *!* Endproc + + *!* Protected Procedure ReadUShort(pnAddress) + *!* Local m.lnShort As Short + *!* m.lnShort = CToBin(Sys(2600, m.pnAddress, 2), "2rs") + *!* If m.lnShort < 0 Then + *!* m.lnShort = m.lnShort + 0x10000 + *!* Endif + *!* Return m.lnShort + *!* Endproc + + *!* Protected Procedure WriteUShort(pnAddress, pnShort) + *!* *!* Writes an unsigned short (2 bytes) + *!* =Sys(2600, m.pnAddress, 2, BinToC(m.pnShort, "2rs")) + *!* Endproc + + *!* Protected Procedure ReadPointer(pnAddress) + *!* *!* Reads an integer (4 bytes) + *!* Return CToBin(Sys(2600, m.pnAddress, 4), "4rs") + *!* Endproc + + *!* Protected Procedure WritePointer(pnAddress, pnInt) + *!* *!* Writes an integer (4 bytes) + *!* =Sys(2600, m.pnAddress, 4, BinToC(m.pnInt, "4rs")) + *!* Endproc + + *!* Protected Procedure ReadInt(pnAddress) + *!* *!* Reads an integer (4 bytes) + *!* Return CToBin(Sys(2600, m.pnAddress, 4), "4rs") + *!* Endproc + + *!* Protected Procedure WriteInt(pnAddress, pnInt) + *!* *!* Writes an integer (4 bytes) + *!* =Sys(2600, m.pnAddress, 4, BinToC(m.pnInt, "4rs")) + *!* Endproc + + Protected Procedure ReadByte(pnAddress) + *!* Reads an integer (1 bytes) + Return CToBin(Sys(2600, m.pnAddress, 1), "1rs") + Endproc + + Protected Procedure WriteByte(pnAddress, pnInt) + *!* Writes an integer (1 bytes) + =Sys(2600, m.pnAddress, 1, BinToC(m.pnInt, "1rs")) + Endproc + + *!* Protected Procedure ReadPointer(pnAddress) + *!* *!* Reads an integer (4 bytes) + *!* Return This.ReadUInt(m.pnAddress) + *!* Endproc + + *!* Protected Procedure WritePointer(pnAddress, pnInt) + *!* *!* Writes an integer (4 bytes) + *!* Return This.WriteUInt(m.pnAddress, m.pnInt) + *!* Endproc + +Enddefine + +******************************************************************************** +*!* typedef struct tagBITMAPFILEHEADER { +*!* WORD bfType; +*!* DWORD bfSize; +*!* WORD bfReserved1; +*!* WORD bfReserved2; +*!* DWORD bfOffBits; +*!* } BITMAPFILEHEADER, *PBITMAPFILEHEADER; +******************************************************************************** +Define Class _BITMAPFILEHEADER As _STRUCTBASE + + SizeOf = 14 + Name = "BITMAPFILEHEADER" + && structure fields + bfType = FALSE + bfSize = FALSE + bfReserved1 = FALSE + bfReserved2 = FALSE + bfOffBits = FALSE + + _MemberData = '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + + Procedure bfType_Access() + Return ReadUShort(This.Address) + Endproc + + Procedure bfType_Assign(pnNewVal) + WriteUShort(This.Address, m.pnNewVal) + Endproc + + Procedure bfSize_Access() + Return ReadUInt(This.Address + 2) + Endproc + + Procedure bfSize_Assign(pnNewVal) + WriteUInt(This.Address + 2, m.pnNewVal) + Endproc + + Procedure bfReserved1_Access() + Return ReadUShort(This.Address + 6) + Endproc + + Procedure bfReserved1_Assign(pnNewVal) + WriteUShort(This.Address + 6, m.pnNewVal) + Endproc + + Procedure bfReserved2_Access() + Return ReadUShort(This.Address + 8) + Endproc + + Procedure bfReserved2_Assign(pnNewVal) + WriteUShort(This.Address + 8, m.pnNewVal) + Endproc + + Procedure bfOffBits_Access() + Return ReadUInt(This.Address + 10) + Endproc + + Procedure bfOffBits_Assign(pnNewVal) + WriteUInt(This.Address+10, m.pnNewVal) + Endproc + +Enddefine + +******************************************************************************** +*!* typedef struct tagBITMAPINFOHEADER{ +*!* DWORD biSize; +*!* LONG biWidth; +*!* LONG biHeight; +*!* WORD biPlanes; +*!* WORD biBitCount; +*!* DWORD biCompression; +*!* DWORD biSizeImage; +*!* LONG biXPelsPerMeter; +*!* LONG biYPelsPerMeter; +*!* DWORD biClrUsed; +*!* DWORD biClrImportant; +*!* } BITMAPINFOHEADER, *PBITMAPINFOHEADER; +******************************************************************************** +Define Class _BITMAPINFOHEADER As _STRUCTBASE + + SizeOf = 40 + Name = "BITMAPINFOHEADER" + && structure fields + biSize = FALSE + biWidth = FALSE + biHeight = FALSE + biPlanes = FALSE + biBitCount = FALSE + biCompression = FALSE + biSizeImage = FALSE + biXPelsPerMeter = FALSE + biYPelsPerMeter = FALSE + biClrUsed = FALSE + biClrImportant = FALSE + + _MemberData = '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + + Procedure biSize_Access() + Return ReadUInt(This.Address) + Endproc + + Procedure biSize_Assign(pnNewVal) + WriteUInt(This.Address, m.pnNewVal) + Endproc + + Procedure biWidth_Access() + Return ReadInt(This.Address + 4) + Endproc + + Procedure biWidth_Assign(pnNewVal) + WriteInt(This.Address + 4, m.pnNewVal) + Endproc + + Procedure biHeight_Access() + Return ReadInt(This.Address + 8) + Endproc + + Procedure biHeight_Assign(pnNewVal) + WriteInt(This.Address + 8, m.pnNewVal) + Endproc + + Procedure biPlanes_Access() + Return ReadUShort(This.Address + 12) + Endproc + + Procedure biPlanes_Assign(pnNewVal) + WriteUShort(This.Address + 12, m.pnNewVal) + Endproc + + Procedure biBitCount_Access() + Return ReadUShort(This.Address + 14) + Endproc + + Procedure biBitCount_Assign(pnNewVal) + WriteUShort(This.Address + 14, m.pnNewVal) + Endproc + + Procedure biCompression_Access() + Return ReadUInt(This.Address + 16) + Endproc + + Procedure biCompression_Assign(pnNewVal) + WriteUInt(This.Address + 16, m.pnNewVal) + Endproc + + Procedure biSizeImage_Access() + Return ReadUInt(This.Address + 20) + Endproc + + Procedure biSizeImage_Assign(pnNewVal) + WriteUInt(This.Address + 20, m.pnNewVal) + Endproc + + Procedure biXPelsPerMeter_Access() + Return ReadInt(This.Address + 24) + Endproc + + Procedure biXPelsPerMeter_Assign(pnNewVal) + WriteInt(This.Address + 24, m.pnNewVal) + Endproc + + Procedure biYPelsPerMeter_Access() + Return ReadInt(This.Address + 28) + Endproc + + Procedure biYPelsPerMeter_Assign(pnNewVal) + WriteInt(This.Address + 28, m.pnNewVal) + Endproc + + Procedure biClrUsed_Access() + Return ReadUInt(This.Address + 32) + Endproc + + Procedure biClrUsed_Assign(pnNewVal) + WriteUInt(This.Address + 32, m.pnNewVal) + Endproc + + Procedure biClrImportant_Access() + Return ReadUInt(This.Address + 36) + Endproc + + Procedure biClrImportant_Assign(pnNewVal) + WriteUInt(This.Address + 36, m.pnNewVal) + Endproc + +Enddefine + +******************************************************************************** +*!* typedef struct _browseinfo { +*!* HWND hwndOwner; +*!* UINT pidlRoot; +*!* LPTSTR pszDisplayName; +*!* LPCTSTR lpszTitle; +*!* UINT ulFlags; +*!* UINT lpfn; +*!* LPARAM lParam; +*!* int iImage; +*!* } BROWSEINFO, *PBROWSEINFO, *LPBROWSEINFO; +******************************************************************************** +Define Class _BROWSEINFO As _STRUCTBASE + + Address = 0 + SizeOf = 32 + Name = "BROWSEINFO" + && structure fields + hwndOwner = .F. + pidlRoot = .F. + pszDisplayName = .F. + lpszTitle = .F. + ulFlags = .F. + lpfn = .F. + Lparam = .F. + iImage = .F. + + _MemberData = '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + + Procedure FreeMembers() + FreePMem(This.Address + 8) + FreePMem(This.Address + 12) + Endproc + + Procedure hwndOwner_Access() + Return ReadInt(This.Address) + Endproc + + Procedure hwndOwner_Assign(lnNewVal) + WriteInt(This.Address, m.lnNewVal) + Endproc + + Procedure pidlRoot_Access() + Return ReadUInt(This.Address + 4) + Endproc + + Procedure pidlRoot_Assign(lnNewVal) + WriteUInt(This.Address + 4, m.lnNewVal) + Endproc + + Procedure pszDisplayName_Access() + Return ReadPCString(This.Address + 8) + Endproc + + Procedure pszDisplayName_Assign(lnNewVal) + WritePCString(This.Address + 8, m.lnNewVal) + Endproc + + Procedure lpszTitle_Access() + Return ReadPCString(This.Address + 12) + Endproc + + Procedure lpszTitle_Assign(lnNewVal) + WritePCString(This.Address + 12, m.lnNewVal) + Endproc + + Procedure ulFlags_Access() + Return ReadUInt(This.Address + 16) + Endproc + + Procedure ulFlags_Assign(lnNewVal) + WriteUInt(This.Address + 16, m.lnNewVal) + Endproc + + Procedure lpfn_Access() + Return ReadUInt(This.Address + 20) + Endproc + + Procedure lpfn_Assign(lnNewVal) + WriteUInt(This.Address + 20, m.lnNewVal) + Endproc + + Procedure lParam_Access() + Return ReadInt(This.Address + 24) + Endproc + + Procedure lParam_Assign(lnNewVal) + WriteInt(This.Address + 24, m.lnNewVal) + Endproc + + Procedure iImage_Access() + Return ReadInt(This.Address + 28) + Endproc + + Procedure iImage_Assign(lnNewVal) + WriteInt(This.Address + 28, m.lnNewVal) + Endproc + +Enddefine + +******************************************************************************** +*!* typedef struct _DOC_INFO_1 { +*!* LPTSTR pDocName; +*!* LPTSTR pOutputFile; +*!* LPTSTR pDatatype; +*!* } DOC_INFO_1; +******************************************************************************** +Define Class _DOC_INFO_1 As _STRUCTBASE + + Address = 0 + SizeOf = 12 + Name = "DOC_INFO_1" + && structure fields + pDocName = FALSE + pOutputFile = FALSE + pDatatype = FALSE + + _MemberData = '' + ; + '' + ; + '' + ; + '' + ; + '' + + Procedure FreeMembers() + FreePMem(This.Address) + FreePMem(This.Address + 4) + FreePMem(This.Address + 8) + Endproc + + Procedure pDocName_Access() + Return ReadPCString(This.Address) + Endproc + + Procedure pDocName_Assign(pnNewVal) + WritePCString(This.Address, m.pnNewVal) + Endproc + + Procedure pOutputFile_Access() + Return ReadPCString(This.Address + 4) + Endproc + + Procedure pOutputFile_Assign(pnNewVal) + WritePCString(This.Address + 4, m.pnNewVal) + Endproc + + Procedure pDatatype_Access() + Return ReadPCString(This.Address + 8) + Endproc + + Procedure pDatatype_Assign(pnNewVal) + WritePCString(This.Address + 8, m.pnNewVal) + Endproc + +Enddefine + +******************************************************************************** +*!* typedef struct tagDRAWITEMSTRUCT { +*!* UINT CtlType; +*!* UINT CtlID; +*!* UINT itemID; +*!* UINT itemAction; +*!* UINT itemState; +*!* HWND hwndItem; +*!* HDC hDC; +*!* RECT rcItem; +*!* ULONG_PTR itemData; +*!* } DRAWITEMSTRUCT; +******************************************************************************** +Define Class _DRAWITEMSTRUCT As _STRUCTBASE + + SizeOf = 48 + Name = "DRAWITEMSTRUCT" + && structure fields + CtlType = FALSE + CtlID = FALSE + ItemID = FALSE + itemAction = FALSE + itemState = FALSE + hwndItem = FALSE + hDC = FALSE + rcItem = .Null. + ItemData = FALSE + + _MemberData = '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + + Procedure InitMembers() + This.rcItem = Createobject("_RECT",This.Address + 28) + Endproc + + Procedure FreeMembers() + This.rcItem = .Null. + Endproc + + Procedure Address_Assign(lnAddress) + This.Address = m.lnAddress + If This.InitMembersDone = TRUE Then + This.rcItem.Address = m.lnAddress + 28 + Endif + Endproc + + Procedure CtlType_Access() + Return ReadUInt(This.Address) + Endproc + + Procedure CtlType_Assign(pnNewVal) + WriteUInt(This.Address, m.pnNewVal) + Endproc + + Procedure CtlID_Access() + Return ReadUInt(This.Address + 4) + Endproc + + Procedure CtlID_Assign(pnNewVal) + WriteUInt(This.Address + 4, m.pnNewVal) + Endproc + + Procedure itemID_Access() + Return ReadUInt(This.Address + 8) + Endproc + + Procedure itemID_Assign(pnNewVal) + WriteUInt(This.Address + 8, m.pnNewVal) + Endproc + + Procedure itemAction_Access() + Return ReadUInt(This.Address + 12) + Endproc + + Procedure itemAction_Assign(pnNewVal) + WriteUInt(This.Address + 12, m.pnNewVal) + Endproc + + Procedure itemState_Access() + Return ReadUInt(This.Address + 16) + Endproc + + Procedure itemState_Assign(pnNewVal) + WriteUInt(This.Address + 16, m.pnNewVal) + Endproc + + Procedure hwndItem_Access() + Return ReadUInt(This.Address + 20) + Endproc + + Procedure hwndItem_Assign(pnNewVal) + WriteUInt(This.Address + 20, m.pnNewVal) + Endproc + + Procedure hDC_Access() + Return ReadPointer(This.Address + 24) + Endproc + + Procedure hDC_Assign(pnNewVal) + WritePointer(This.Address + 24, m.pnNewVal) + Endproc + + Procedure itemData_Access() + Return ReadUInt(This.Address + 44) + Endproc + + Procedure itemData_Assign(pnNewVal) + WriteUInt(This.Address + 44, m.pnNewVal) + Endproc + +Enddefine + +******************************************************************************** +*!* typedef struct _FILETIME { +*!* DWORD dwLowDateTime; +*!* DWORD dwHighDateTime; +*!* } FILETIME, +*!* *PFILETIME; +******************************************************************************** +Define Class _FILETIME As _STRUCTBASE + + SizeOf = 8 + Name = "FILETIME" + && structure fields + dwLowDateTime = FALSE + dwHighDateTime = FALSE + + _MemberData = '' + ; + '' + ; + '' + ; + '' + + Procedure dwLowDateTime_Access() + Return ReadUInt(This.Address) + Endproc + + Procedure dwLowDateTime_Assign(pnNewVal) + WriteUInt(This.Address, m.pnNewVal) + Endproc + + Procedure dwHighDateTime_Access() + Return ReadUInt(This.Address + 4) + Endproc + + Procedure dwHighDateTime_Assign(pnNewVal) + WriteUInt(This.Address + 4, m.pnNewVal) + Endproc + +Enddefine + +******************************************************************************** +*!* typedef struct +*!* { +*!* BYTE bWidth; // Width, in pixels, of the image +*!* BYTE bHeight; // Height, in pixels, of the image +*!* BYTE bColorCount; // Number of colors in image (0 if >=8bpp) +*!* BYTE bReserved; // Reserved ( must be 0) +*!* WORD wPlanes; // Color Planes +*!* WORD wBitCount; // Bits per pixel +*!* DWORD dwBytesInRes; // How many bytes in this resource? +*!* DWORD dwImageOffset; // Where in the file is this image? +*!* } ICONDIRENTRY, *LPICONDIRENTRY; +******************************************************************************** +Define Class _ICONDIRENTRY As _STRUCTBASE + + SizeOf = 16 + Name = "ICONDIRENTRY" + && structure fields + bWidth = FALSE + bHeight = FALSE + bColorCount = FALSE + bReserved = FALSE + wPlanes = FALSE + wBitCount = FALSE + dwBytesInRes = FALSE + dwImageOffset = FALSE + + _MemberData = '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + + Procedure bWidth_Access() + Local m.lnWidth + m.lnWidth = This.ReadByte(This.Address) + If m.lnWidth < 0 Then + m.lnWidth = m.lnWidth + 0x100 + Endif + If m.lnWidth = 0 Then + m.lnWidth = 256 + Endif + Return m.lnWidth + Endproc + + Procedure bWidth_Assign(pnNewVal) + If m.pnNewVal = 256 Then + m.pnNewVal = 0 + Endif + If m.pnNewVal < 0 Then + m.pnNewVal = m.pnNewVal + 0x100 + Endif + This.WriteByte(This.Address, m.pnNewVal) + Endproc + + Procedure bHeight_Access() + Local m.lnHeight + m.lnHeight = This.ReadByte(This.Address + 1) + If m.lnHeight < 0 Then + m.lnHeight = m.lnHeight + 0x100 + Endif + If m.lnHeight = 0 Then + m.lnHeight = 256 + Endif + Return m.lnHeight + Endproc + + Procedure bHeight_Assign(pnNewVal) + If m.pnNewVal = 256 Then + m.pnNewVal = 0 + Endif + If m.pnNewVal < 0 Then + m.pnNewVal = m.pnNewVal + 0x100 + Endif + This.WriteByte(This.Address + 1, m.pnNewVal) + Endproc + + Procedure bColorCount_Access() + Return This.ReadByte(This.Address + 2) + Endproc + + Procedure bColorCount_Assign(pnNewVal) + This.WriteByte(This.Address + 2, m.pnNewVal) + Endproc + + Procedure bReserved_Access() + Return This.ReadByte(This.Address + 3) + Endproc + + Procedure bReserved_Assign(pnNewVal) + This.WriteByte(This.Address + 3, m.pnNewVal) + Endproc + + Procedure wPlanes_Access() + Return ReadUShort(This.Address + 4) + Endproc + + Procedure wPlanes_Assign(pnNewVal) + WriteUShort(This.Address + 4, m.pnNewVal) + Endproc + + Procedure wBitCount_Access() + Return ReadUShort(This.Address + 6) + Endproc + + Procedure wBitCount_Assign(pnNewVal) + WriteUShort(This.Address + 6, m.pnNewVal) + Endproc + + Procedure dwBytesInRes_Access() + Return ReadUInt(This.Address + 8) + Endproc + + Procedure dwBytesInRes_Assign(pnNewVal) + WriteUInt(This.Address + 8, m.pnNewVal) + Endproc + + Procedure dwImageOffset_Access() + Return ReadUInt(This.Address + 12) + Endproc + + Procedure dwImageOffset_Assign(pnNewVal) + WriteUInt(This.Address + 12, m.pnNewVal) + Endproc + +Enddefine + +******************************************************************************** +*!* typedef struct tagLOGFONT { +*!* LONG lfHeight; +*!* LONG lfWidth; +*!* LONG lfEscapement; +*!* LONG lfOrientation; +*!* LONG lfWeight; +*!* BYTE lfItalic; +*!* BYTE lfUnderline; +*!* BYTE lfStrikeOut; +*!* BYTE lfCharSet; +*!* BYTE lfOutPrecision; +*!* BYTE lfClipPrecision; +*!* BYTE lfQuality; +*!* BYTE lfPitchAndFamily; +*!* TCHAR lfFaceName[LF_FACESIZE]; +*!* } LOGFONT, *PLOGFONT; +******************************************************************************** +Define Class _LOGFONT As _STRUCTBASE + SizeOf = 60 + Name = "LOGFONT" + && structure fields + lfHeight = FALSE + lfWidth = FALSE + lfEscapement = FALSE + lfOrientation = FALSE + lfWeight = FALSE + lfItalic = FALSE + lfUnderline = FALSE + lfStrikeOut = FALSE + lfCharSet = FALSE + lfOutPrecision = FALSE + lfClipPrecision = FALSE + lfQuality = FALSE + lfPitchAndFamily = FALSE + lfFaceName = FALSE + && extra properties + FontBold = FALSE + FontCharSet = 1 + FontItalic = FALSE + FontName = "" + FontSize = 0 + FontStrikethru = FALSE + FontUnderline = FALSE + + _MemberData = '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + + Procedure FontBold_Access() + Return Iif(This.lfWeight >= FW_BOLD, TRUE, FALSE) + Endproc + + Procedure FontBold_Assign(vNewVal) + If Vartype(m.vNewVal) = T_NUMERIC Then + If m.vNewVal < FW_BOLD Then + m.vNewVal = FALSE + Else + m.vNewVal = TRUE + Endif + Endif + If m.vNewVal = TRUE Then + This.lfWeight = FW_BOLD + Else + This.lfWeight = FW_NORMAL + Endif + Endproc + + Procedure FontCharset_Access() + Return This.lfCharSet + Endproc + + Procedure FontCharset_Assign(vNewVal) + This.lfCharSet = m.vNewVal + Endproc + + Procedure FontItalic_Access() + Return Iif(This.lfItalic <> 0, TRUE, FALSE) + Endproc + + Procedure FontItalic_Assign(vNewVal) + If Vartype(m.vNewVal) = T_NUMERIC Then + If m.vNewVal = 0 Then + m.vNewVal = FALSE + Else + m.vNewVal = TRUE + Endif + Endif + If m.vNewVal = TRUE Then + This.lfItalic = 1 + Else + This.lfItalic = 0 + Endif + Endproc + + Procedure FontName_Access() + Return This.lfFaceName + Endproc + + Procedure FontName_Assign(vNewVal) + If Right(m.vNewVal, 1) <> NULCHAR Then + m.vNewVal = m.vNewVal + NULCHAR + Endif + This.lfFaceName = m.vNewVal + Endproc + + Procedure FontSize_Access() + Return ctlFontHeightToPoints(This.lfHeight) + Endproc + + Procedure FontSize_Assign(vNewVal) + This.lfHeight = ctlFontPointsToHeight(m.vNewVal) + Endproc + + Procedure FontStrikethru_Access() + Return Iif(This.lfStrikeOut <> 0, TRUE, FALSE) + Endproc + + Procedure FontStrikethru_Assign(vNewVal) + If Vartype(m.vNewVal) = T_NUMERIC Then + If m.vNewVal = 0 Then + m.vNewVal = FALSE + Else + m.vNewVal = TRUE + Endif + Endif + If m.vNewVal = TRUE Then + This.lfStrikeOut = 1 + Else + This.lfStrikeOut = 0 + Endif + Endproc + + Procedure FontUnderline_Access() + Return Iif(This.lfUnderline <> 0, TRUE, FALSE) + Endproc + + Procedure FontUnderline_Assign(vNewVal) + If Vartype(m.vNewVal) = T_NUMERIC Then + If m.vNewVal = 0 Then + m.vNewVal = FALSE + Else + m.vNewVal = TRUE + Endif + Endif + If m.vNewVal = TRUE Then + This.lfUnderline = 1 + Else + This.lfUnderline = 0 + Endif + Endproc + + Procedure lfHeight_Access() + Return ReadInt(This.Address) + Endproc + + Procedure lfHeight_Assign(pnNewVal) + WriteInt(This.Address, m.pnNewVal) + Endproc + + Procedure lfWidth_Access() + Return ReadInt(This.Address + 4) + Endproc + + Procedure lfWidth_Assign(pnNewVal) + WriteInt(This.Address + 4, m.pnNewVal) + Endproc + + Procedure lfEscapement_Access() + Return ReadInt(This.Address + 8) + Endproc + + Procedure lfEscapement_Assign(pnNewVal) + WriteInt(This.Address + 8, m.pnNewVal) + Endproc + + Procedure lfOrientation_Access() + Return ReadInt(This.Address + 12) + Endproc + + Procedure lfOrientation_Assign(pnNewVal) + WriteInt(This.Address + 12, m.pnNewVal) + Endproc + + Procedure lfWeight_Access() + Return ReadInt(This.Address + 16) + Endproc + + Procedure lfWeight_Assign(pnNewVal) + WriteInt(This.Address + 16, m.pnNewVal) + Endproc + + Procedure lfItalic_Access() + Return This.ReadByte(This.Address + 20) + Endproc + + Procedure lfItalic_Assign(pnNewVal) + This.WriteByte(This.Address + 20, m.pnNewVal) + Endproc + + Procedure lfUnderline_Access() + Return This.ReadByte(This.Address + 21) + Endproc + + Procedure lfUnderline_Assign(pnNewVal) + This.WriteByte(This.Address + 21, m.pnNewVal) + Endproc + + Procedure lfStrikeOut_Access() + Return This.ReadByte(This.Address + 22) + Endproc + + Procedure lfStrikeOut_Assign(pnNewVal) + This.WriteByte(This.Address + 22, m.pnNewVal) + Endproc + + Procedure lfCharSet_Access() + Return This.ReadByte(This.Address + 23) + Endproc + + Procedure lfCharSet_Assign(pnNewVal) + This.WriteByte(This.Address + 23, m.pnNewVal) + Endproc + + Procedure lfOutPrecision_Access() + Return This.ReadByte(This.Address + 24) + Endproc + + Procedure lfOutPrecision_Assign(pnNewVal) + This.WriteByte(This.Address + 24, m.pnNewVal) + Endproc + + Procedure lfClipPrecision_Access() + Return This.ReadByte(This.Address + 25) + Endproc + + Procedure lfClipPrecision_Assign(pnNewVal) + This.WriteByte(This.Address + 25, m.pnNewVal) + Endproc + + Procedure lfQuality_Access() + Return This.ReadByte(This.Address + 26) + Endproc + + Procedure lfQuality_Assign(pnNewVal) + This.WriteByte(This.Address + 26, m.pnNewVal) + Endproc + + Procedure lfPitchAndFamily_Access() + Return This.ReadByte(This.Address + 27) + Endproc + + Procedure lfPitchAndFamily_Assign(pnNewVal) + This.WriteByte(This.Address + 27, m.pnNewVal) + Endproc + + Procedure lfFaceName_Access() + Return ReadCharArray(This.Address + 28, 32) + Endproc + + Procedure lfFaceName_Assign(pnNewVal) + WriteCharArray(This.Address + 28, m.pnNewVal, 32) + Endproc + +Enddefine + +******************************************************************************** +*!* typedef struct { +*!* UINT cbSize; +*!* POINT pt; + +*!* UINT uHit; // out param +*!* SYSTEMTIME st; +*!* #if (NTDDI_VERSION >= NTDDI_LONGHORN) +*!* RECT rc; +*!* int iOffset; +*!* int iRow; +*!* int iCol; +*!* #endif +*!* } MCHITTESTINFO, *PMCHITTESTINFO; +******************************************************************************** +Define Class _MCHITTESTINFO As _STRUCTBASE + + SizeOf = 32 + Name = "MCHITTESTINFO" + && structure fields + cbSize = FALSE + pt = .Null. + uHit = FALSE + st = .Null. + + _MemberData = '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + + Procedure InitMembers() + This.cbSize = This.SizeOf + This.pt = Createobject("_POINT", This.Address + 4) + This.st = Createobject("_SYSTEMTIME", This.Address + 16) + Endproc + + Procedure FreeMembers() + This.pt = .Null. + This.st = .Null. + Endproc + + Procedure Address_Assign(lnAddress) + This.Address = m.lnAddress + If This.InitMembersDone = TRUE Then + This.pt.Address = m.lnAddress + 4 + This.st.Address = m.lnAddress + 16 + Endif + Endproc + + Procedure cbSize_Access() + Return ReadUInt(This.Address) + Endproc + + Procedure cbSize_Assign(pnNewVal) + WriteUInt(This.Address, m.pnNewVal) + Endproc + + Procedure uHit_Access() + Return ReadUInt(This.Address + 12) + Endproc + + Procedure uHit_Assign(pnNewVal) + WriteUInt(This.Address + 12, m.pnNewVal) + Endproc + +Enddefine + +******************************************************************************** +*!* typedef struct tagMEASUREITEMSTRUCT { +*!* UINT CtlType; +*!* UINT CtlID; +*!* UINT itemID; +*!* UINT itemWidth; +*!* UINT itemHeight; +*!* DWORD itemData +*!* } MEASUREITEMSTRUCT; +******************************************************************************** +Define Class _MEASUREITEMSTRUCT As _STRUCTBASE + + SizeOf = 24 + Name = "MEASUREITEMSTRUCT" + && structure fields + CtlType = FALSE + CtlID = FALSE + ItemID = FALSE + itemWidth = FALSE + itemHeight = FALSE + ItemData = FALSE + + _MemberData = '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + + Procedure CtlType_Access() + Return ReadUInt(This.Address) + Endproc + + Procedure CtlType_Assign(pnNewVal) + WriteUInt(This.Address, m.pnNewVal) + Endproc + + Procedure CtlID_Access() + Return ReadUInt(This.Address + 4) + Endproc + + Procedure CtlID_Assign(pnNewVal) + WriteUInt(This.Address + 4, m.pnNewVal) + Endproc + + Procedure itemID_Access() + Return ReadUInt(This.Address + 8) + Endproc + + Procedure itemID_Assign(pnNewVal) + WriteUInt(This.Address + 8, m.pnNewVal) + Endproc + + Procedure itemWidth_Access() + Return ReadUInt(This.Address + 12) + Endproc + + Procedure itemWidth_Assign(pnNewVal) + WriteUInt(This.Address + 12, m.pnNewVal) + Endproc + + Procedure itemHeight_Access() + Return ReadUInt(This.Address + 16) + Endproc + + Procedure itemHeight_Assign(pnNewVal) + WriteUInt(This.Address + 16, m.pnNewVal) + Endproc + + Procedure itemData_Access() + Return ReadUInt(This.Address + 20) + Endproc + + Procedure itemData_Assign(pnNewVal) + WriteUInt(This.Address + 20, m.pnNewVal) + Endproc + +Enddefine + +******************************************************************************** +*!* typedef struct tagMENUINFO { +*!* DWORD cbSize; +*!* DWORD fMask; +*!* DWORD dwStyle; +*!* UINT cyMax; +*!* HBRUSH hbrBack; +*!* DWORD dwContextHelpID; +*!* ULONG_PTR dwMenuData; +*!* } MENUINFO, FAR *LPMENUINFO; +*!* typedef MENUINFO CONST FAR *LPCMENUINFO; +******************************************************************************** +Define Class _MENUINFO As _STRUCTBASE + + SizeOf = 28 + Name = "MENUINFO" + *!* structure fields + cbSize = FALSE + fMask = FALSE + dwStyle = FALSE + cyMax = FALSE + hbrBack = FALSE + dwContextHelpID = FALSE + dwMenuData = FALSE + + _MemberData = '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + + Procedure InitMembers() + *!* Important! init cbSize to size of structure + This.cbSize = This.SizeOf + Endproc + + Procedure cbSize_Access() + Return ReadUInt(This.Address) + Endproc + + Procedure cbSize_Assign(pnNewVal) + WriteUInt(This.Address, m.pnNewVal) + Endproc + + Procedure fMask_Access() + Return ReadUInt(This.Address + 4) + Endproc + + Procedure fMask_Assign(pnNewVal) + WriteUInt(This.Address + 4, m.pnNewVal) + Endproc + + Procedure dwStyle_Access() + Return ReadUInt(This.Address + 8) + Endproc + + Procedure dwStyle_Assign(pnNewVal) + WriteUInt(This.Address + 8, m.pnNewVal) + Endproc + + Procedure cyMax_Access() + Return ReadUInt(This.Address + 12) + Endproc + + Procedure cyMax_Assign(pnNewVal) + WriteUInt(This.Address + 12, m.pnNewVal) + Endproc + + Procedure hbrBack_Access() + Return ReadPointer(This.Address + 16) + Endproc + + Procedure hbrBack_Assign(pnNewVal) + WritePointer(This.Address + 16, m.pnNewVal) + Endproc + + Procedure dwContextHelpID_Access() + Return ReadUInt(This.Address + 20) + Endproc + + Procedure dwContextHelpID_Assign(pnNewVal) + WriteUInt(This.Address + 20, m.pnNewVal) + Endproc + + Procedure dwMenuData_Access() + Return ReadUInt(This.Address + 24) + Endproc + + Procedure dwMenuData_Assign(pnNewVal) + WriteUInt(This.Address + 24, m.pnNewVal) + Endproc + +Enddefine + +******************************************************************************** +*!* typedef struct tagMENUITEMINFO { +*!* UINT cbSize; +*!* UINT fMask; +*!* UINT fType; +*!* UINT fState; +*!* UINT wID; +*!* HMENU hSubMenu; +*!* HBITMAP hbmpChecked; +*!* HBITMAP hbmpUnchecked; +*!* ULONG_PTR dwItemData; +*!* LPTSTR dwTypeData; +*!* UINT cch; +*!* HBITMAP hbmpItem; +*!* } MENUITEMINFO, *LPMENUITEMINFO; +******************************************************************************** +Define Class _MENUITEMINFO As _STRUCTBASE + + SizeOf = 48 + Name = "MENUITEMINFO" + *!* structure fields + cbSize = FALSE + fMask = FALSE + fType = FALSE + fState = FALSE + wID = FALSE + hSubMenu = FALSE + hbmpChecked = FALSE + hbmpUnchecked = FALSE + dwItemData = FALSE + dwTypeData = FALSE + cch = FALSE + hbmpItem = FALSE + + Protected _MemberData + _MemberData = '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + + Procedure InitMembers() + *!* Important! init cbSize to size of structure + This.cbSize = This.SizeOf + Endproc + + Procedure FreeMembers() + FreePMem(This.Address + 36) + Endproc + + Hidden Procedure cbSize_Access() + Return ReadUInt(This.Address) + Endproc + + Hidden Procedure cbSize_Assign(pnNewVal) + WriteUInt(This.Address, m.pnNewVal) + Endproc + + Hidden Procedure fMask_Access() + Return ReadUInt(This.Address + 4) + Endproc + + Hidden Procedure fMask_Assign(pnNewVal) + WriteUInt(This.Address + 4, m.pnNewVal) + Endproc + + Hidden Procedure fType_Access() + Return ReadUInt(This.Address + 8) + Endproc + + Hidden Procedure fType_Assign(pnNewVal) + WriteUInt(This.Address + 8, m.pnNewVal) + Endproc + + Hidden Procedure fState_Access() + Return ReadUInt(This.Address + 12) + Endproc + + Hidden Procedure fState_Assign(pnNewVal) + WriteUInt(This.Address + 12, m.pnNewVal) + Endproc + + Hidden Procedure wID_Access() + Return ReadUInt(This.Address + 16) + Endproc + + Hidden Procedure wID_Assign(pnNewVal) + WriteUInt(This.Address + 16, m.pnNewVal) + Endproc + + Hidden Procedure hSubMenu_Access() + Return ReadUInt(This.Address + 20) + Endproc + + Hidden Procedure hSubMenu_Assign(pnNewVal) + WriteUInt(This.Address + 20, m.pnNewVal) + Endproc + + Hidden Procedure hbmpChecked_Access() + Return ReadUInt(This.Address + 24) + Endproc + + Hidden Procedure hbmpChecked_Assign(pnNewVal) + WriteUInt(This.Address + 24, m.pnNewVal) + Endproc + + Hidden Procedure hbmpUnchecked_Access() + Return ReadUInt(This.Address + 28) + Endproc + + Hidden Procedure hbmpUnchecked_Assign(pnNewVal) + WriteUInt(This.Address + 28, m.pnNewVal) + Endproc + + Hidden Procedure dwItemData_Access() + Return ReadUInt(This.Address + 32) + Endproc + + Hidden Procedure dwItemData_Assign(pnNewVal) + WriteUInt(This.Address + 32, m.pnNewVal) + Endproc + + Hidden Procedure dwTypeData_Access() + Return ReadPCString(This.Address + 36) + Endproc + + Hidden Procedure dwTypeData_Assign(pnNewVal) + WritePCString(This.Address + 36, m.pnNewVal) + Endproc + + Hidden Procedure cch_Access() + Return ReadUInt(This.Address + 40) + Endproc + + Hidden Procedure cch_Assign(pnNewVal) + WriteUInt(This.Address + 40, m.pnNewVal) + Endproc + + Hidden Procedure hbmpItem_Access() + Return ReadUInt(This.Address + 44) + Endproc + + Hidden Procedure hbmpItem_Assign(pnNewVal) + WriteUInt(This.Address + 44, m.pnNewVal) + Endproc + +Enddefine + +******************************************************************************** +*!* typedef struct tagMONITORINFOEX { +*!* DWORD cbSize; +*!* RECT rcMonitor; +*!* RECT rcWork; +*!* DWORD dwFlags; +*!* TCHAR szDevice[CCHDEVICENAME]; +*!* } MONITORINFOEX, *LPMONITORINFOEX; +******************************************************************************** +Define Class _MONITORINFOEX As _STRUCTBASE + + SizeOf = 72 + Name = "MONITORINFOEX" + && structure fields + cbSize = FALSE + rcMonitor = .Null. + rcWork = .Null. + dwFlags = FALSE + szDevice = FALSE + + Protected _MemberData + _MemberData = '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + + Procedure InitMembers + This.cbSize = This.SizeOf + This.rcMonitor = Createobject("_RECT", This.Address + 4) + This.rcWork = Createobject("_RECT", This.Address + 20) + Endproc + + Procedure FreeMembers() + This.rcMonitor = .Null. + This.rcWork = .Null. + Endproc + + Procedure Address_Assign(lnAddress) + This.Address = m.lnAddress + If This.InitMembersDone = TRUE Then + This.rcMonitor.Address = m.lnAddress + 4 + This.rcWork.Address = m.lnAddress + 20 + Endif + Endproc + + Procedure cbSize_Access() + Return ReadUInt(This.Address) + Endproc + + Procedure cbSize_Assign(pnNewVal) + WriteUInt(This.Address, m.pnNewVal) + Endproc + + Procedure dwFlags_Access() + Return ReadUInt(This.Address + 36) + Endproc + + Procedure dwFlags_Assign(pnNewVal) + WriteUInt(This.Address + 36, m.pnNewVal) + Endproc + + Procedure szDevice_Access() + Return ReadCharArray(This.Address + 40, 32) + Endproc + + Procedure szDevice_Assign(pnNewVal) + WriteCharArray(This.Address + 40, m.pnNewVal, 32) + Endproc + +Enddefine + +******************************************************************************** +*!* typedef struct tagNMCUSTOMDRAWINFO { +*!* NMHDR hdr; +*!* DWORD dwDrawStage; +*!* HDC hdc; +*!* RECT rc; +*!* DWORD_PTR dwItemSpec; +*!* UINT uItemState; +*!* LPARAM lItemlParam; +*!* } NMCUSTOMDRAW, *LPNMCUSTOMDRAW; +******************************************************************************** +Define Class _NMCUSTOMDRAW As _STRUCTBASE + + SizeOf = 48 + Name = "NMCUSTOMDRAW" + && structure fields + hdr = .Null. + dwDrawStage = FALSE + hDC = FALSE + rc = .Null. + dwItemSpec = FALSE + uItemState = FALSE + lItemlParam = FALSE + + _MemberData = '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + + Procedure InitMembers() + This.hdr = Createobject("_NMHDR", This.Address) + This.rc = Createobject("_RECT", This.Address + 20) + Endproc + + Procedure FreeMembers() + This.hdr = .Null. + This.rc = .Null. + Endproc + + Procedure Address_Assign(lnAddress) + This.Address = m.lnAddress + If This.InitMembersDone = TRUE Then + This.hdr.Address = m.lnAddress + This.rc.Address = m.lnAddress + 20 + Endif + Endproc + + Procedure dwDrawStage_Access() + Return ReadUInt(This.Address + 12) + Endproc + + Procedure dwDrawStage_Assign(pnNewVal) + WriteUInt(This.Address + 12, m.pnNewVal) + Endproc + + Procedure hDC_Access() + Return ReadPointer(This.Address + 16) + Endproc + + Procedure hDC_Assign(pnNewVal) + WritePointer(This.Address + 16, m.pnNewVal) + Endproc + + Procedure dwItemSpec_Access() + Return ReadUInt(This.Address + 36) + Endproc + + Procedure dwItemSpec_Assign(pnNewVal) + WriteUInt(This.Address + 36, m.pnNewVal) + Endproc + + Procedure uItemState_Access() + Return ReadUInt(This.Address + 40) + Endproc + + Procedure uItemState_Assign(pnNewVal) + WriteUInt(This.Address + 40, m.pnNewVal) + Endproc + + Procedure lItemlParam_Access() + Return ReadInt(This.Address + 44) + Endproc + + Procedure lItemlParam_Assign(pnNewVal) + WriteInt(This.Address + 44, m.pnNewVal) + Endproc + +Enddefine + +******************************************************************************** +*!* typedef struct _RECT { +*!* LONG Left; +*!* LONG Top; +*!* LONG Right; +*!* LONG Bottom; +*!* } RECT, *PRECT; +******************************************************************************** +Define Class _RECT As _STRUCTBASE + + SizeOf = 16 + Name = "RECT" + *!* structure fields + Left = FALSE + Top = FALSE + Right = FALSE + Bottom = FALSE + && Extra properties + Height = FALSE + Width = FALSE + + Protected _MemberData + _MemberData = '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + + Hidden Procedure Left_Access() + Return ReadInt(This.Address) + Endproc + + Hidden Procedure Left_Assign(pnNewVal) + WriteInt(This.Address, m.pnNewVal) + Endproc + + Hidden Procedure Top_Access() + Return ReadInt(This.Address + 4) + Endproc + + Hidden Procedure Top_Assign(pnNewVal) + WriteInt(This.Address + 4, m.pnNewVal) + Endproc + + Hidden Procedure Right_Access() + Return ReadInt(This.Address + 8) + Endproc + + Hidden Procedure Right_Assign(pnNewVal) + WriteInt(This.Address + 8, m.pnNewVal) + Endproc + + Hidden Procedure Bottom_Access() + Return ReadInt(This.Address + 12) + Endproc + + Hidden Procedure Bottom_Assign(pnNewVal) + WriteInt(This.Address + 12, m.pnNewVal) + Endproc + + Hidden Procedure Height_Access() + Return This.Bottom - This.Top + Endproc + + Hidden Procedure Height_Assign(pnNewVal) + This.Height = m.pnNewVal + This.Bottom = This.Top + m.pnNewVal + Endproc + + Hidden Procedure Width_Access() + Return This.Right - This.Left + Endproc + + Hidden Procedure Width_Assign(pnNewVal) + This.Width = m.pnNewVal + This.Right = This.Left + m.pnNewVal + Endproc + +Enddefine + +******************************************************************************** +*!* typedef struct tagPOINT { +*!* LONG x; +*!* LONG y; +*!* } POINT, *PPOINT; +******************************************************************************** +Define Class _POINT As _STRUCTBASE + + SizeOf = 8 + Name = "POINT" + && structure fields + x = FALSE + Y = FALSE + + Protected _MemberData + _MemberData = '' + ; + '' + ; + '' + ; + '' + + Procedure x_Access() + Return ReadInt(This.Address) + Endproc + + Procedure x_Assign(pnNewVal) + WriteInt(This.Address, m.pnNewVal) + Endproc + + Procedure y_Access() + Return ReadInt(This.Address + 4) + Endproc + + Procedure y_Assign(pnNewVal) + WriteInt(This.Address + 4, m.pnNewVal) + Endproc + +Enddefine + +******************************************************************************** +*!* typedef struct _WINDOWPLACEMENT { +*!* UINT length; +*!* UINT flags; +*!* UINT showCmd; +*!* POINT ptMinPosition; +*!* POINT ptMaxPosition; +*!* RECT rcNormalPosition; +*!* } WINDOWPLACEMENT; +******************************************************************************** +Define Class _WINDOWPLACEMENT As _STRUCTBASE + + SizeOf = 44 + Name = "WINDOWPLACEMENT" + && structure fields + Length = FALSE + Flags = FALSE + ShowCmd = FALSE + ptMinPosition = .Null. + ptMaxPosition = .Null. + rcNormalPosition = .Null. + + Protected _MemberData + _MemberData = '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + + Procedure InitMembers() + This.Length = This.SizeOf + This.ptMinPosition = Createobject("_POINT", This.Address + 12) + This.ptMaxPosition = Createobject("_POINT", This.Address + 20) + This.rcNormalPosition = Createobject("_RECT", This.Address + 28) + Endproc + + Procedure FreeMembers() + This.ptMinPosition = .Null. + This.ptMaxPosition = .Null. + This.rcNormalPosition = .Null. + Endproc + + Procedure Address_Assign(lnAddress) + This.Address = m.lnAddress + If This.InitMembersDone = TRUE Then + This.ptMinPosition.Address = m.lnAddress + 12 + This.ptMaxPosition.Address = m.lnAddress + 20 + This.rcNormalPosition.Address = m.lnAddress + 28 + Endif + Endproc + + Procedure length_Access() + Return ReadUInt(This.Address) + Endproc + + Procedure length_Assign(pnNewVal) + WriteUInt(This.Address, m.pnNewVal) + Endproc + + Procedure flags_Access() + Return ReadUInt(This.Address + 4) + Endproc + + Procedure flags_Assign(pnNewVal) + WriteUInt(This.Address + 4, m.pnNewVal) + Endproc + + Procedure showCmd_Access() + Return ReadUInt(This.Address + 8) + Endproc + + Procedure showCmd_Assign(pnNewVal) + WriteUInt(This.Address + 8, m.pnNewVal) + Endproc + +Enddefine + +******************************************************************************** +*!* typedef struct tagSCROLLINFO { +*!* UINT cbSize; +*!* UINT fMask; +*!* int nMin; +*!* int nMax; +*!* UINT nPage; +*!* int nPos; +*!* int nTrackPos; +*!* } SCROLLINFO, *LPSCROLLINFO; +*!* typedef SCROLLINFO CONST *LPCSCROLLINFO; +******************************************************************************** +Define Class _SCROLLINFO As _STRUCTBASE + + SizeOf = 28 + Name = "SCROLLINFO" + && structure fields + cbSize = FALSE + fMask = FALSE + nMin = FALSE + nMax = FALSE + nPage = FALSE + nPos = FALSE + nTrackPos = FALSE + + _MemberData = '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + + Procedure InitMembers() + *!* Important! init cbSize to size of structure + This.cbSize = This.SizeOf + Endproc + + Procedure cbSize_Access() + Return ReadUInt(This.Address) + Endproc + + Procedure cbSize_Assign(pnNewVal) + WriteUInt(This.Address, m.pnNewVal) + Endproc + + Procedure fMask_Access() + Return ReadUInt(This.Address + 4) + Endproc + + Procedure fMask_Assign(pnNewVal) + WriteUInt(This.Address + 4, m.pnNewVal) + Endproc + + Procedure nMin_Access() + Return ReadInt(This.Address + 8) + Endproc + + Procedure nMin_Assign(pnNewVal) + WriteInt(This.Address + 8, m.pnNewVal) + Endproc + + Procedure nMax_Access() + Return ReadInt(This.Address + 12) + Endproc + + Procedure nMax_Assign(pnNewVal) + WriteInt(This.Address + 12, m.pnNewVal) + Endproc + + Procedure nPage_Access() + Return ReadUInt(This.Address + 16) + Endproc + + Procedure nPage_Assign(pnNewVal) + WriteUInt(This.Address + 16, m.pnNewVal) + Endproc + + Procedure nPos_Access() + Return ReadInt(This.Address + 20) + Endproc + + Procedure nPos_Assign(pnNewVal) + WriteInt(This.Address + 20, m.pnNewVal) + Endproc + + Procedure nTrackPos_Access() + Return ReadInt(This.Address + 24) + Endproc + + Procedure nTrackPos_Assign(pnNewVal) + WriteInt(This.Address + 24, m.pnNewVal) + Endproc + +Enddefine + +******************************************************************************** +*!* typedef struct tagNMHDR { +*!* HWND hwndFrom; +*!* UINT_PTR idFrom; +*!* UINT code; +*!* } NMHDR; +******************************************************************************** +Define Class _NMHDR As _STRUCTBASE + + SizeOf = 12 + Name = "NMHDR" + && structure fields + hwndFrom = FALSE + idFrom = FALSE + Code = FALSE + + _MemberData = '' + ; + '' + ; + '' + ; + '' + ; + '' + + Procedure hwndFrom_Access() + Return ReadInt(This.Address) + Endproc + + Procedure hwndFrom_Assign(pnNewVal) + WriteInt(This.Address, m.pnNewVal) + Endproc + + Procedure idFrom_Access() + Return ReadUInt(This.Address + 4) + Endproc + + Procedure idFrom_Assign(pnNewVal) + WriteUInt(This.Address + 4, m.pnNewVal) + Endproc + + Procedure Code_Access() + *!* Code is a UINT but it should be an INT + Return ReadInt(This.Address + 8) + Endproc + + Procedure Code_Assign(pnNewVal) + WriteInt(This.Address + 8, m.pnNewVal) + Endproc + +Enddefine + +******************************************************************************** +*!* typedef struct tagNMMOUSE { +*!* NMHDR hdr; +*!* DWORD_PTR dwItemSpec; +*!* DWORD_PTR dwItemData; +*!* POINT pt; +*!* LPARAM dwHitInfo; +*!* } NMMOUSE, *LPNMMOUSE; +******************************************************************************** +Define Class _NMMOUSE As _STRUCTBASE + + SizeOf = 32 + Name = "NMMOUSE" + && structure fields + hdr = .Null. + dwItemSpec = FALSE + dwItemData = FALSE + pt = .Null. + dwHitInfo = FALSE + + _MemberData = '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + + Procedure InitMembers + This.hdr = Createobject("_NMHDR",This.Address + 0) + This.pt = Createobject("_POINT",This.Address + 20) + Endproc + + Procedure FreeMembers() + This.hdr = .Null. + This.pt = .Null. + Endproc + + Procedure Address_Assign(lnAddress) + This.Address = m.lnAddress + If This.InitMembersDone = TRUE Then + This.hdr.Address = m.lnAddress + 0 + This.pt.Address = m.lnAddress + 20 + Endif + Endproc + + Procedure dwItemSpec_Access() + Return ReadUInt(This.Address + 12) + Endproc + + Procedure dwItemSpec_Assign(pnNewVal) + WriteUInt(This.Address + 12, m.pnNewVal) + Endproc + + Procedure dwItemData_Access() + Return ReadUInt(This.Address + 16) + Endproc + + Procedure dwItemData_Assign(pnNewVal) + WriteUInt(This.Address + 16, m.pnNewVal) + Endproc + + Procedure dwHitInfo_Access() + Return ReadInt(This.Address + 28) + Endproc + + Procedure dwHitInfo_Assign(pnNewVal) + WriteInt(This.Address + 28, m.pnNewVal) + Endproc + +Enddefine + +******************************************************************************** +*!* typedef struct { +*!* DWORD dwStructSize; +*!* LPTSTR lpszScheme; +*!* DWORD dwSchemeLength; +*!* INTERNET_SCHEME nScheme; +*!* LPTSTR lpszHostName; +*!* DWORD dwHostNameLength; +*!* INTERNET_PORT nPort; +*!* LPTSTR lpszUserName; +*!* DWORD dwUserNameLength; +*!* LPTSTR lpszPassword; +*!* DWORD dwPasswordLength; +*!* LPTSTR lpszUrlPath; +*!* DWORD dwUrlPathLength; +*!* LPTSTR lpszExtraInfo; +*!* DWORD dwExtraInfoLength; +*!* } URL_COMPONENTS, +*!* *LPURL_COMPONENTS; +******************************************************************************** +Define Class _URL_COMPONENTS As _STRUCTBASE + + SizeOf = 60 + Name = "URL_COMPONENTS" + && structure fields + dwStructSize = FALSE + lpszScheme = FALSE + dwSchemeLength = FALSE + nScheme = FALSE + lpszHostName = FALSE + dwHostNameLength = FALSE + nPort = FALSE + lpszUserName = FALSE + dwUserNameLength = FALSE + lpszPassword = FALSE + dwPasswordLength = FALSE + lpszUrlPath = FALSE + dwUrlPathLength = FALSE + lpszExtraInfo = FALSE + dwExtraInfoLength = FALSE + + _MemberData = '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + + Procedure InitMembers() + This.dwStructSize = 60 + Endproc + + Procedure FreeMembers() + FreePMem(This.Address + 4) + FreePMem(This.Address + 16) + FreePMem(This.Address + 28) + FreePMem(This.Address + 36) + FreePMem(This.Address + 44) + FreePMem(This.Address + 52) + Endproc + + Procedure dwStructSize_Access() + Return ReadUInt(This.Address) + Endproc + + Procedure dwStructSize_Assign(pnNewVal) + WriteUInt(This.Address, m.pnNewVal) + Endproc + + Procedure lpszScheme_Access() + Return ReadPCString(This.Address + 4) + Endproc + + Procedure lpszScheme_Assign(pnNewVal) + WritePCString(This.Address + 4, m.pnNewVal) + This.dwSchemeLength = Len(pnNewVal) + Endproc + + Procedure dwSchemeLength_Access() + Return ReadUInt(This.Address + 8) + Endproc + + Procedure dwSchemeLength_Assign(pnNewVal) + WriteUInt(This.Address + 8, m.pnNewVal) + Endproc + + Procedure nScheme_Access() + Return ReadUInt(This.Address + 12) + Endproc + + Procedure nScheme_Assign(pnNewVal) + WriteUInt(This.Address + 12, m.pnNewVal) + Endproc + + Procedure lpszHostName_Access() + Return ReadPCString(This.Address + 16) + Endproc + + Procedure lpszHostName_Assign(pnNewVal) + WritePCString(This.Address + 16, m.pnNewVal) + This.dwHostNameLength = Len(pnNewVal) + Endproc + + Procedure dwHostNameLength_Access() + Return ReadUInt(This.Address + 20) + Endproc + + Procedure dwHostNameLength_Assign(pnNewVal) + WriteUInt(This.Address + 20, m.pnNewVal) + Endproc + + Procedure nPort_Access() + Return ReadUInt(This.Address + 24) + Endproc + + Procedure nPort_Assign(pnNewVal) + WriteUInt(This.Address + 24, m.pnNewVal) + Endproc + + Procedure lpszUserName_Access() + Return ReadPCString(This.Address + 28) + Endproc + + Procedure lpszUserName_Assign(pnNewVal) + WritePCString(This.Address + 28, m.pnNewVal) + This.dwUserNameLength = Len(pnNewVal) + Endproc + + Procedure dwUserNameLength_Access() + Return ReadUInt(This.Address + 32) + Endproc + + Procedure dwUserNameLength_Assign(pnNewVal) + WriteUInt(This.Address + 32, m.pnNewVal) + Endproc + + Procedure lpszPassword_Access() + Return ReadPCString(This.Address + 36) + Endproc + + Procedure lpszPassword_Assign(pnNewVal) + WritePCString(This.Address + 36, m.pnNewVal) + This.dwPasswordLength = Len(pnNewVal) + Endproc + + Procedure dwPasswordLength_Access() + Return ReadUInt(This.Address + 40) + Endproc + + Procedure dwPasswordLength_Assign(pnNewVal) + WriteUInt(This.Address + 40, m.pnNewVal) + Endproc + + Procedure lpszUrlPath_Access() + Return ReadPCString(This.Address + 44) + Endproc + + Procedure lpszUrlPath_Assign(pnNewVal) + WritePCString(This.Address + 44, m.pnNewVal) + This.dwUrlPathLength = Len(pnNewVal) + Endproc + + Procedure dwUrlPathLength_Access() + Return ReadUInt(This.Address + 48) + Endproc + + Procedure dwUrlPathLength_Assign(pnNewVal) + WriteUInt(This.Address + 48, m.pnNewVal) + Endproc + + Procedure lpszExtraInfo_Access() + Return ReadPCString(This.Address + 52) + Endproc + + Procedure lpszExtraInfo_Assign(pnNewVal) + WritePCString(This.Address + 52, m.pnNewVal) + This.dwExtraInfoLength = Len(pnNewVal) + Endproc + + Procedure dwExtraInfoLength_Access() + Return ReadUInt(This.Address + 56) + Endproc + + Procedure dwExtraInfoLength_Assign(pnNewVal) + WriteUInt(This.Address + 56, m.pnNewVal) + Endproc + +Enddefine + +******************************************************************************** +*!* typedef struct _WIN32_FIND_DATA { +*!* DWORD dwFileAttributes; +*!* FILETIME ftCreationTime; +*!* FILETIME ftLastAccessTime; +*!* FILETIME ftLastWriteTime; +*!* DWORD nFileSizeHigh; +*!* DWORD nFileSizeLow; +*!* DWORD dwReserved0; +*!* DWORD dwReserved1; +*!* TCHAR cFileName[MAX_PATH]; +*!* TCHAR cAlternateFileName[14]; +*!* } WIN32_FIND_DATA, +*!* *PWIN32_FIND_DATA, +*!* *LPWIN32_FIND_DATA; +******************************************************************************** +Define Class _WIN32_FIND_DATA As _STRUCTBASE + + SizeOf = 320 + Name = "WIN32_FIND_DATA" + && structure fields + dwFileAttributes = FALSE + ftCreationTime = .Null. + ftLastAccessTime = .Null. + ftLastWriteTime = .Null. + nFileSizeHigh = FALSE + nFileSizeLow = FALSE + dwReserved0 = FALSE + dwReserved1 = FALSE + cFileName = FALSE + cAlternateFileName = FALSE + + _MemberData = '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + + Procedure InitMembers() + This.ftCreationTime = Createobject("_FILETIME", This.Address + 4) + This.ftLastAccessTime = Createobject("_FILETIME", This.Address + 12) + This.ftLastWriteTime = Createobject("_FILETIME", This.Address + 20) + Endproc + + Procedure FreeMembers() + This.ftCreationTime = .Null. + This.ftLastAccessTime = .Null. + This.ftLastWriteTime = .Null. + Endproc + + Procedure Address_Assign(lnAddress) + This.Address = m.lnAddress + If This.InitMembersDone = TRUE Then + This.ftCreationTime.Address = m.lnAddress + 4 + This.ftLastAccessTime.Address = m.lnAddress + 12 + This.ftLastWriteTime.Address = m.lnAddress + 20 + Endif + Endproc + + Procedure dwFileAttributes_Access() + Return ReadUInt(This.Address) + Endproc + + Procedure dwFileAttributes_Assign(pnNewVal) + WriteUInt(This.Address, m.pnNewVal) + Endproc + + Procedure nFileSizeHigh_Access() + Return ReadUInt(This.Address + 28) + Endproc + + Procedure nFileSizeHigh_Assign(pnNewVal) + WriteUInt(This.Address + 28, m.pnNewVal) + Endproc + + Procedure nFileSizeLow_Access() + Return ReadUInt(This.Address + 32) + Endproc + + Procedure nFileSizeLow_Assign(pnNewVal) + WriteUInt(This.Address + 32, m.pnNewVal) + Endproc + + Procedure dwReserved0_Access() + Return ReadUInt(This.Address + 36) + Endproc + + Procedure dwReserved0_Assign(pnNewVal) + WriteUInt(This.Address + 36, m.pnNewVal) + Endproc + + Procedure dwReserved1_Access() + Return ReadUInt(This.Address + 40) + Endproc + + Procedure dwReserved1_Assign(pnNewVal) + WriteUInt(This.Address + 40, m.pnNewVal) + Endproc + + Procedure cFileName_Access() + Return ReadCharArray(This.Address + 44, MAX_PATH) + Endproc + + Procedure cFileName_Assign(pnNewVal) + WriteCharArray(This.Address + 44, Padr(m.pnNewVal, MAX_PATH, NULCHAR), MAX_PATH) + Endproc + + Procedure cAlternateFileName_Access() + Return ReadCharArray(This.Address + 44 + MAX_PATH, 14) + Endproc + + Procedure cAlternateFileName_Assign(pnNewVal) + WriteCharArray(This.Address + 44 + MAX_PATH, Padr(m.pnNewVal, 14, NULCHAR), 14) + Endproc + +Enddefine + +******************************************************************************** +*!* typedef struct _SYSTEMTIME { +*!* WORD wYear; +*!* WORD wMonth; +*!* WORD wDayOfWeek; +*!* WORD wDay; +*!* WORD wHour; +*!* WORD wMinute; +*!* WORD wSecond; +*!* WORD wMilliseconds; +*!* } SYSTEMTIME, *PSYSTEMTIME; +******************************************************************************** +Define Class _SYSTEMTIME As _STRUCTBASE + + SizeOf = 16 + Name = "SYSTEMTIME" + && structure fields + wYear = FALSE + wMonth = FALSE + wDayOfWeek = FALSE + wDay = FALSE + wHour = FALSE + wMinute = FALSE + wSecond = FALSE + wMilliseconds = FALSE + + _MemberData = '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + + Procedure wYear_Access() + Return ReadUShort(This.Address) + Endproc + + Procedure wYear_Assign(pnNewVal) + WriteUShort(This.Address, m.pnNewVal) + Endproc + + Procedure wMonth_Access() + Return ReadUShort(This.Address + 2) + Endproc + + Procedure wMonth_Assign(pnNewVal) + WriteUShort(This.Address + 2, m.pnNewVal) + Endproc + + Procedure wDayOfWeek_Access() + Return ReadUShort(This.Address + 4) + Endproc + + Procedure wDayOfWeek_Assign(pnNewVal) + WriteUShort(This.Address + 4, m.pnNewVal) + Endproc + + Procedure wDay_Access() + Return ReadUShort(This.Address + 6) + Endproc + + Procedure wDay_Assign(pnNewVal) + WriteUShort(This.Address + 6, m.pnNewVal) + Endproc + + Procedure wHour_Access() + Return ReadUShort(This.Address + 8) + Endproc + + Procedure wHour_Assign(pnNewVal) + WriteUShort(This.Address + 8, m.pnNewVal) + Endproc + + Procedure wMinute_Access() + Return ReadUShort(This.Address + 10) + Endproc + + Procedure wMinute_Assign(pnNewVal) + WriteUShort(This.Address + 10, m.pnNewVal) + Endproc + + Procedure wSecond_Access() + Return ReadUShort(This.Address + 12) + Endproc + + Procedure wSecond_Assign(pnNewVal) + WriteUShort(This.Address + 12, m.pnNewVal) + Endproc + + Procedure wMilliseconds_Access() + Return ReadUShort(This.Address + 14) + Endproc + + Procedure wMilliseconds_Assign(pnNewVal) + WriteUShort(This.Address + 14, m.pnNewVal) + Endproc + +Enddefine + + +******************************************************************************** +Define Class _SYSTEMTIMEARRAY As _STRUCTBASE + + SizeOf = 32 + Name = "SYSTEMTIMEARRAY" + && structure fields + Min = .Null. + Max = .Null. + + _MemberData = '' + ; + '' + ; + '' + ; + '' + + Procedure InitMembers() + This.Min = Createobject('_SYSTEMTIME',This.Address) + This.Max = Createobject('_SYSTEMTIME',This.Address + 16) + Endproc + + Procedure FreeMembers() + This.Min = .Null. + This.Max = .Null. + Endproc + + Procedure Address_Assign(lnAddress) + This.Address = m.lnAddress + If This.InitMembersDone = TRUE Then + This.Min.Address = m.lnAddress + This.Max.Address = m.lnAddress + 16 + Endif + Endproc + +Enddefine + +******************************************************************************** +*!* typedef struct tagSIZE { +*!* LONG cx; +*!* LONG cy; +*!* } SIZE, *PSIZE; +******************************************************************************** +Define Class _SIZE As _STRUCTBASE + SizeOf = 8 + Name = "SIZE" + && structure fields + cx = FALSE + cy = FALSE + + _MemberData = '' + ; + '' + ; + '' + ; + '' + + Procedure cx_Access() + Return ReadInt(This.Address) + Endproc + + Procedure cx_Assign(pnNewVal) + WriteInt(This.Address, m.pnNewVal) + Endproc + + Procedure cy_Access() + Return ReadInt(This.Address + 4) + Endproc + + Procedure cy_Assign(pnNewVal) + WriteInt(This.Address + 4, m.pnNewVal) + Endproc + +Enddefine + +******************************************************************************** +*!* typedef struct tagTOOLINFO{ +*!* UINT cbSize; +*!* UINT uFlags; +*!* HWND hwnd; +*!* UINT_PTR uId; +*!* RECT rect; +*!* HINSTANCE hinst; +*!* LPTSTR lpszText; +*!* #if (_WIN32_IE >= 0x0300) +*!* LPARAM lParam; +*!* #endif +*!* #if (_WIN32_WINNT >= 0x0501) +*!* void *lpReserved; +*!* #endif +*!* } TOOLINFO, NEAR *PTOOLINFO, *LPTOOLINFO; +******************************************************************************** +Define Class _TOOLINFO As _STRUCTBASE + SizeOf = 48 + Name = "TOOLINFO" + && structure fields + cbSize = FALSE + uFlags = FALSE + HWnd = FALSE + uId = FALSE + Rect = .Null. + hinst = FALSE + lpszText = FALSE + Lparam = FALSE + *!* if ctlGetOsVersion >= 5010000 + lpReserved = FALSE + *!* Endif + + _MemberData = '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + + Procedure InitMembers() + + *!* 20080818 + *!* If ctlGetOsVersion() < NTDDI_WINXP Then + *!* This.SizeOf = 44 + *!* Else + *!* This.SizeOf = 48 + *!* Endif + *!* This.cbSize = This.SizeOf + + If ctlGetOsVersion() < NTDDI_WINXP Then + This.cbSize = 44 + Else + This.cbSize = 48 + Endif + + This.Rect = Createobject("_RECT", This.Address + 16) + Endproc + + Procedure FreeMembers() + This.Rect = .Null. + FreePMem(This.Address + 36) + Endproc + + Procedure Address_Assign(lnAddress) + This.Address = m.lnAddress + If This.InitMembersDone = TRUE Then + This.Rect.Address = m.lnAddress + 16 + Endif + Endproc + + Procedure cbSize_Access() + Return ReadUInt(This.Address) + Endproc + + Procedure cbSize_Assign(pnNewVal) + WriteUInt(This.Address, m.pnNewVal) + Endproc + + Procedure uFlags_Access() + Return ReadUInt(This.Address + 4) + Endproc + + Procedure uFlags_Assign(pnNewVal) + WriteUInt(This.Address + 4, m.pnNewVal) + Endproc + + Procedure hwnd_Access() + Return ReadInt(This.Address + 8) + Endproc + + Procedure hwnd_Assign(pnNewVal) + WriteInt(This.Address + 8, m.pnNewVal) + Endproc + + Procedure uId_Access() + Return ReadUInt(This.Address + 12) + Endproc + + Procedure uId_Assign(pnNewVal) + WriteUInt(This.Address + 12, m.pnNewVal) + Endproc + + Procedure hinst_Access() + Return ReadPointer(This.Address + 32) + Endproc + + Procedure hinst_Assign(pnNewVal) + WritePointer(This.Address + 32, m.pnNewVal) + Endproc + + Procedure lpszText_Access() + Return ReadPCString(This.Address + 36) + Endproc + + Procedure lpszText_Assign(pnNewVal) + WritePCString(This.Address + 36, m.pnNewVal) + Endproc + + Procedure lParam_Access() + Return ReadInt(This.Address + 40) + Endproc + + Procedure lParam_Assign(pnNewVal) + WriteInt(This.Address + 40, m.pnNewVal) + Endproc + + Procedure lpReserved_Access() + Return ReadPointer(This.Address + 44) + Endproc + + Procedure lpReserved_Assign(pnNewVal) + WritePointer(This.Address + 44, m.pnNewVal) +Enddefine + + +******************************************************************************** +*!* typedef struct tagNMSELCHANGE { +*!* NMHDR nmhdr; +*!* SYSTEMTIME stSelStart; +*!* SYSTEMTIME stSelEnd; +*!* } NMSELCHANGE, *LPNMSELCHANGE; +******************************************************************************** +Define Class _NMSELCHANGE As _STRUCTBASE + + SizeOf = 44 + Name = "NMSELCHANGE" + && structure fields + nmhdr = .Null. + stSelStart = .Null. + stSelEnd = .Null. + + _MemberData = '' + ; + '' + ; + '' + ; + '' + ; + '' + + Procedure InitMembers() + This.nmhdr = Createobject("_NMHDR", This.Address) + This.stSelStart = Createobject("_SYSTEMTIME", This.Address + 12) + This.stSelEnd = Createobject("_SYSTEMTIME", This.Address + 28) + Endproc + + Procedure FreeMembers() + This.nmhdr = .Null. + This.stSelStart = .Null. + This.stSelEnd = .Null. + Endproc + + Procedure Address_Assign(lnAddress) + This.Address = m.lnAddress + If This.InitMembersDone = TRUE Then + This.Address = m.lnAddress + This.nmhdr.Address = m.lnAddress + This.stSelStart.Address = m.lnAddress + 12 + This.stSelEnd.Address = m.lnAddress + 28 + Endif + Endproc + +Enddefine + + +******************************************************************************** +*!* typedef struct tagNMTTDISPINFO { +*!* NMHDR hdr; +*!* LPTSTR lpszText; +*!* TCHAR szText[80]; +*!* HINSTANCE hinst; +*!* UINT uFlags; +*!* #if (_WIN32_IE >= 0x0300) +*!* LPARAM lParam; +*!* #endif +*!* #if (_WIN32_WINNT >= 0x0600) +*!* HBITMAP hbmp; +*!* #endif +*!* } NMTTDISPINFO, *LPNMTTDISPINFO; +******************************************************************************** + +Define Class _NMTTDISPINFO As _STRUCTBASE + + SizeOf = 108 + Name = "NMTTDISPINFO" + && structure fields + hdr = .Null. + lpszText = .F. + szText = .F. + hinst = .F. + uFlags = .F. + Lparam = .F. + + Procedure InitMembers(lnAddress) + This.hdr = Createobject('_NMHDR', This.Address) + Endproc + + Procedure FreeMembers() + This.hdr = .Null. + Endproc + + Procedure lpszText_Access() + Return ReadPCString(This.Address + 12) + Endproc + + Procedure lpszText_Assign(lnNewVal) + WritePCString(This.Address + 12, m.lnNewVal) + Endproc + + Procedure szText_Access() + Return ReadCharArray(This.Address + 16,80) + Endproc + + Procedure szText_Assign(lnNewVal) + WriteCharArray(This.Address + 16, m.lnNewVal,80) + Endproc + + Procedure hinst_Access() + Return ReadPointer(This.Address + 96) + Endproc + + Procedure hinst_Assign(lnNewVal) + WritePointer(This.Address + 96, m.lnNewVal) + Endproc + + Procedure uFlags_Access() + Return ReadUInt(This.Address + 100) + Endproc + + Procedure uFlags_Assign(lnNewVal) + WriteUInt(This.Address + 100, m.lnNewVal) + Endproc + + Procedure lParam_Access() + Return ReadInt(This.Address + 104) + Endproc + + Procedure lParam_Assign(lnNewVal) + WriteInt(This.Address + 104, m.lnNewVal) + Endproc + +Enddefine + +******************************************************************************** +*!* typedef struct tagNMDAYSTATE { +*!* NMHDR nmhdr; +*!* SYSTEMTIME stStart; +*!* int cDayState; +*!* LPMONTHDAYSTATE prgDayState; +*!* } NMDAYSTATE, *LPNMDAYSTATE; +******************************************************************************** +Define Class _NMDAYSTATE As _STRUCTBASE + + SizeOf = 36 + Name = "NMDAYSTATE" + && structure fields + nmhdr = .Null. + stStart = .Null. + cDayState = FALSE + prgDayState = FALSE + + _MemberData = '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + + Procedure InitMembers() + This.nmhdr = Createobject("_NMHDR", This.Address) + This.stStart = Createobject("_SYSTEMTIME", This.Address + 12) + Endproc + + Procedure FreeMembers() + This.nmhdr = .Null. + This.stStart = .Null. + Endproc + + Procedure cDayState_Access() + Return ReadInt(This.Address + 28) + Endproc + + Procedure cDayState_Assign(pnNewVal) + WriteInt(This.Address + 28, m.pnNewVal) + Endproc + + Procedure prgDayState_Access() + Return ReadInt(This.Address + 32) + Endproc + + Procedure prgDayState_Assign(pnNewVal) + WriteInt(This.Address + 32, m.pnNewVal) + Endproc + +Enddefine + +******************************************************************************** +*!* typedef struct tagOFN { +*!* DWORD lStructSize; +*!* HWND hwndOwner; +*!* HINSTANCE hInstance; +*!* LPCTSTR lpstrFilter; +*!* LPTSTR lpstrCustomFilter; +*!* DWORD nMaxCustFilter; +*!* DWORD nFilterIndex; +*!* LPTSTR lpstrFile; +*!* DWORD nMaxFile; +*!* LPTSTR lpstrFileTitle; +*!* DWORD nMaxFileTitle; +*!* LPCTSTR lpstrInitialDir; +*!* LPCTSTR lpstrTitle; +*!* DWORD Flags; +*!* WORD nFileOffset; +*!* WORD nFileExtension; +*!* LPCTSTR lpstrDefExt; +*!* LPARAM lCustData; +*!* LPOFNHOOKPROC lpfnHook; +*!* LPCTSTR lpTemplateName; +*!* #if (_WIN32_WINNT >= 0x0500) +*!* void * pvReserved; +*!* DWORD dwReserved; +*!* DWORD FlagsEx; +*!* #endif // (_WIN32_WINNT >= 0x0500) +*!* } OPENFILENAME, *LPOPENFILENAME; +******************************************************************************** +Define Class _OPENFILENAME As _STRUCTBASE + + SizeOf = 88 + Name = "OPENFILENAME" + && structure fields + lStructSize = FALSE + hwndOwner = FALSE + hInstance = FALSE + lpstrFilter = FALSE + lpstrCustomFilter = FALSE + nMaxCustFilter = FALSE + nFilterIndex = FALSE + lpstrFile = FALSE + nMaxFile = FALSE + lpstrFileTitle = FALSE + nMaxFileTitle = FALSE + lpstrInitialDir = FALSE + lpstrTitle = FALSE + Flags = FALSE + nFileOffset = FALSE + nFileExtension = FALSE + lpstrDefExt = FALSE + lCustData = FALSE + lpfnHook = FALSE + lpTemplateName = FALSE + pvReserved = FALSE + dwReserved = FALSE + FlagsEx = FALSE + + _MemberData = '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + ; + '' + + Procedure InitMembers() + If ctlGetOsVersion() < NTDDI_WIN2K Then + This.lStructSize = 76 + Else + This.lStructSize = 88 + Endif + + Endproc + + Procedure FreeMembers() + FreePMem(This.Address + 12) + FreePMem(This.Address + 16) + FreePMem(This.Address + 28) + FreePMem(This.Address + 36) + FreePMem(This.Address + 44) + FreePMem(This.Address + 48) + FreePMem(This.Address + 60) + FreePMem(This.Address + 72) + Endproc + + Procedure lStructSize_Access() + Return ReadUInt(This.Address) + Endproc + + Procedure lStructSize_Assign(pnNewVal) + WriteUInt(This.Address, m.pnNewVal) + Endproc + + Procedure hwndOwner_Access() + Return ReadInt(This.Address + 4) + Endproc + + Procedure hwndOwner_Assign(pnNewVal) + WriteInt(This.Address + 4, m.pnNewVal) + Endproc + + Procedure hInstance_Access() + Return ReadPointer(This.Address + 8) + Endproc + + Procedure hInstance_Assign(pnNewVal) + WritePointer(This.Address + 8, m.pnNewVal) + Endproc + + Procedure lpstrFilter_Access() + Return ReadPCString(This.Address + 12) + Endproc + + Procedure lpstrFilter_Assign(pnNewVal) + WritePCString(This.Address + 12, m.pnNewVal) + Endproc + + Procedure lpstrCustomFilter_Access() + Return ReadPCString(This.Address + 16) + Endproc + + Procedure lpstrCustomFilter_Assign(pnNewVal) + WritePCString(This.Address + 16, m.pnNewVal) + Endproc + + Procedure nMaxCustFilter_Access() + Return ReadUInt(This.Address + 20) + Endproc + + Procedure nMaxCustFilter_Assign(pnNewVal) + WriteUInt(This.Address + 20, m.pnNewVal) + Endproc + + Procedure nFilterIndex_Access() + Return ReadUInt(This.Address + 24) + Endproc + + Procedure nFilterIndex_Assign(pnNewVal) + WriteUInt(This.Address + 24, m.pnNewVal) + Endproc + + Procedure GetlpstrFile() + Return This.ReadPCString(This.Address + 28, This.nMaxFile) + Endproc + + Procedure lpstrFile_Access() + *!* may have embedded nulls + Return ReadPCString(This.Address + 28) + Endproc + + Procedure lpstrFile_Assign(pnNewVal) + WritePCString(This.Address + 28, m.pnNewVal) + This.nMaxFile = Len(m.pnNewVal) + Endproc + + Procedure nMaxFile_Access() + Return ReadUInt(This.Address + 32) + Endproc + + Procedure nMaxFile_Assign(pnNewVal) + WriteUInt(This.Address + 32, m.pnNewVal) + Endproc + + Procedure lpstrFileTitle_Access() + Return ReadPCString(This.Address + 36) + Endproc + + Procedure lpstrFileTitle_Assign(pnNewVal) + WritePCString(This.Address + 36, m.pnNewVal) + This.nMaxFileTitle = Len(m.pnNewVal) + Endproc + + Procedure nMaxFileTitle_Access() + Return ReadUInt(This.Address + 40) + Endproc + + Procedure nMaxFileTitle_Assign(pnNewVal) + WriteUInt(This.Address + 40, m.pnNewVal) + Endproc + + Procedure lpstrInitialDir_Access() + Return ReadPCString(This.Address + 44) + Endproc + + Procedure lpstrInitialDir_Assign(pnNewVal) + WritePCString(This.Address + 44, m.pnNewVal) + Endproc + + Procedure lpstrTitle_Access() + Return ReadPCString(This.Address + 48) + Endproc + + Procedure lpstrTitle_Assign(pnNewVal) + WritePCString(This.Address + 48, m.pnNewVal) + Endproc + + Procedure flags_Access() + Return ReadUInt(This.Address + 52) + Endproc + + Procedure flags_Assign(pnNewVal) + WriteUInt(This.Address + 52, m.pnNewVal) + Endproc + + Procedure nFileOffset_Access() + Return ReadUShort(This.Address + 56) + Endproc + + Procedure nFileOffset_Assign(pnNewVal) + WriteUShort(This.Address + 56, m.pnNewVal) + Endproc + + Procedure nFileExtension_Access() + Return ReadUShort(This.Address + 58) + Endproc + + Procedure nFileExtension_Assign(pnNewVal) + WriteUShort(This.Address + 58, m.pnNewVal) + Endproc + + Procedure lpstrDefExt_Access() + Return ReadPCString(This.Address + 60) + Endproc + + Procedure lpstrDefExt_Assign(pnNewVal) + WritePCString(This.Address + 60, m.pnNewVal) + Endproc + + Procedure lCustData_Access() + Return ReadInt(This.Address + 64) + Endproc + + Procedure lCustData_Assign(pnNewVal) + WriteInt(This.Address + 64, m.pnNewVal) + Endproc + + Procedure lpfnHook_Access() + Return ReadUInt(This.Address + 68) + Endproc + + Procedure lpfnHook_Assign(pnNewVal) + WriteUInt(This.Address + 68, m.pnNewVal) + Endproc + + Procedure lpTemplateName_Access() + Return ReadPCString(This.Address + 72) + Endproc + + Procedure lpTemplateName_Assign(pnNewVal) + WritePCString(This.Address + 72, m.pnNewVal) + Endproc + + Procedure pvReserved_Access() + Return ReadPointer(This.Address + 76) + Endproc + + Procedure pvReserved_Assign(pnNewVal) + WritePointer(This.Address + 76, m.pnNewVal) + Endproc + + Procedure dwReserved_Access() + Return ReadUInt(This.Address + 80) + Endproc + + Procedure dwReserved_Assign(pnNewVal) + WriteUInt(This.Address + 80, m.pnNewVal) + Endproc + + Procedure FlagsEx_Access() + Return ReadUInt(This.Address + 84) + Endproc + + Procedure FlagsEx_Assign(pnNewVal) + WriteUInt(This.Address + 84, m.pnNewVal) + Endproc + +Enddefine + diff --git a/COMUN/utile/ctl32/ctl32_vfp2c32.prg b/COMUN/utile/ctl32/ctl32_vfp2c32.prg new file mode 100644 index 0000000..c1c5852 --- /dev/null +++ b/COMUN/utile/ctl32/ctl32_vfp2c32.prg @@ -0,0 +1,4467 @@ +******************************************************************************** +*!* ctl32_vfp2c32.prg +******************************************************************************** + +If "VFP2C32.FLL" $ Upper(Set("Library")) Then + Return +Endif + +Local ; + lcTempFolder As String, ; + lcFileSource As String, ; + lcFile As String + +*!* Get temp folder +m.lcTempFolder = Sys(2023) +If Not Directory(m.lcTempFolder) + Md (m.lcTempFolder) +Endif + +m.lcFile = Addbs(m.lcTempFolder) + "vfp2c32.fll" + +*!* If vfp2c32.fll does not exist in the temp folder, create it: +If Not File(m.lcFile) Then + Strtofile(GetVfp2c32Data(), m.lcFile) +Endif + +Set Library To (m.lcFile) Additive + +*!* Add vfp2c32.fll path to search path or InitVFP2C32 fails: +Local m.lcPath As String + +m.lcPath = Addbs(Justpath(m.lcFile)) + +If Empty(Set("Path")) Then + Set Path To (m.lcPath) +Else + If Not m.lcPath $ Set("Path") Then + Set Path To (Set("Path") + ";" + m.lcPath) + Endif +Endif + +If !InitVFP2C32(0xFFFFFFFF) + Debugout "InitVFP2C32 FAILED!" +Endif + +Return + +*!* don't call this function ... +*!* it's only purpose is to make the function names visible for compilation +*!* the functions are DECLARE'd inside the library automatically + +Function VFP2CDummyProc + Declare WriteChar In vfp2c32.fll Integer, String + Declare WritePChar In vfp2c32.fll Integer, String + Declare WriteInt8 In vfp2c32.fll Integer, Integer + Declare WritePInt8 In vfp2c32.fll Integer, Integer + Declare WriteUInt8 In vfp2c32.fll Integer, Integer + Declare WritePUInt8 In vfp2c32.fll Integer, Integer + Declare WriteShort In vfp2c32.fll Integer, Short + Declare WritePShort In vfp2c32.fll Integer, Short + Declare WriteUShort In vfp2c32.fll Integer, Short + Declare WritePUShort In vfp2c32.fll Integer, Short + Declare WriteInt In vfp2c32.fll Integer, Integer + Declare WritePInt In vfp2c32.fll Integer, Integer + Declare WriteUInt In vfp2c32.fll Integer, Integer + Declare WritePUInt In vfp2c32.fll Integer, Integer + Declare WritePointer In vfp2c32.fll Integer, Integer + Declare WritePPointer In vfp2c32.fll Integer, Integer + Declare WriteFloat In vfp2c32.fll Integer, Single + Declare WritePFloat In vfp2c32.fll Integer, Single + Declare WriteDouble In vfp2c32.fll Integer, Double + Declare WritePDouble In vfp2c32.fll Integer, Double + Declare Short ReadInt8 In vfp2c32.fll Integer + Declare Short ReadPInt8 In vfp2c32.fll Integer + Declare Short ReadUInt8 In vfp2c32.fll Integer + Declare Short ReadPUInt8 In vfp2c32.fll Integer + Declare Short ReadShort In vfp2c32.fll Integer + Declare Short ReadPShort In vfp2c32.fll Integer + Declare Integer ReadUShort In vfp2c32.fll Integer + Declare Integer ReadPUShort In vfp2c32.fll Integer + Declare Integer ReadInt In vfp2c32.fll Integer + Declare Integer ReadPInt In vfp2c32.fll Integer + Declare Single ReadFloat In vfp2c32.fll Integer + Declare Single ReadPFloat In vfp2c32.fll Integer + Declare Double ReadDouble In vfp2c32.fll Integer + Declare Double ReadPDouble In vfp2c32.fll Integer + + Declare AAverage In vfp2c32.fll + Declare AbortUrlDownloadToFileEx In vfp2c32.fll + Declare ADesktopArea In vfp2c32.fll + Declare ADesktops In vfp2c32.fll + Declare ADialUpConnections In vfp2c32.fll + Declare ADirectoryInfo In vfp2c32.fll + Declare ADirEx In vfp2c32.fll + Declare ADisplayDevices In vfp2c32.fll + Declare ADriveInfo In vfp2c32.fll + Declare AErrorEx In vfp2c32.fll + Declare AFHandlesEx In vfp2c32.fll + Declare AFileAttributes In vfp2c32.fll + Declare AFileAttributesEx In vfp2c32.fll + Declare AHeapBlocks In vfp2c32.fll + Declare AIPAddresses In vfp2c32.fll + Declare AllocHGlobal In vfp2c32.fll + Declare AllocMem In vfp2c32.fll + Declare AllocMemTo In vfp2c32.fll + Declare AMax In vfp2c32.fll + Declare AMemBlocks In vfp2c32.fll + Declare AMin In vfp2c32.fll + Declare ANetFiles In vfp2c32.fll + Declare ANetServers In vfp2c32.fll + Declare APrinterForms In vfp2c32.fll + Declare APrintersEx In vfp2c32.fll + Declare APrinterTrays In vfp2c32.fll + Declare APrintJobs In vfp2c32.fll + Declare AProcesses In vfp2c32.fll + Declare AProcessHeaps In vfp2c32.fll + Declare AProcessModules In vfp2c32.fll + Declare AProcessThreads In vfp2c32.fll + Declare ARegistryKeys In vfp2c32.fll + Declare ARegistryValues In vfp2c32.fll + Declare AResolutions In vfp2c32.fll + Declare AResourceLanguages In vfp2c32.fll + Declare AResourceNames In vfp2c32.fll + Declare AResourceTypes In vfp2c32.fll + Declare AServices In vfp2c32.fll + Declare AServiceStatus In vfp2c32.fll + Declare ASplitStr In vfp2c32.fll + Declare ASQLDataSources In vfp2c32.fll + Declare ASQLDrivers In vfp2c32.fll + Declare ASum In vfp2c32.fll + Declare AsyncInvoke In vfp2c32.fll + Declare ATimeZones In vfp2c32.fll + Declare AWindowProps In vfp2c32.fll + Declare AWindows In vfp2c32.fll + Declare AWindowsEx In vfp2c32.fll + Declare AWindowStations In vfp2c32.fll + Declare BindEventsEx In vfp2c32.fll + Declare CancelFileChange In vfp2c32.fll + Declare CancelRegistryChange In vfp2c32.fll + Declare CenterWindowEx In vfp2c32.fll + Declare ChangeSQLDataSource In vfp2c32.fll + Declare CloseRegistryKey In vfp2c32.fll + Declare CloseServiceHandle In vfp2c32.fll + Declare CLSIDFromProgID In vfp2c32.fll + Declare CLSIDFromString In vfp2c32.fll + Declare Colors2RGB In vfp2c32.fll + Declare CompactMem In vfp2c32.fll + Declare CompareFileTimes In vfp2c32.fll + Declare ContinueService In vfp2c32.fll + Declare ControlService In vfp2c32.fll + Declare CopyFileEx In vfp2c32.fll + Declare CreateCallbackFunc In vfp2c32.fll + Declare CreateGuid In vfp2c32.fll + Declare CreateRegistryKey In vfp2c32.fll + Declare CreateSQLDataSource In vfp2c32.fll + Declare Decimals In vfp2c32.fll + Declare DeleteDirectory In vfp2c32.fll + Declare DeleteFileEx In vfp2c32.fll + Declare DeleteRegistryKey In vfp2c32.fll + Declare DeleteSQLDataSource In vfp2c32.fll + Declare DestroyCallbackFunc In vfp2c32.fll + Declare Double2DT In vfp2c32.fll + Declare Double2Str In vfp2c32.fll + Declare DT2Double In vfp2c32.fll + Declare DT2FT In vfp2c32.fll + Declare DT2ST In vfp2c32.fll + Declare DT2Timet In vfp2c32.fll + Declare DT2UTC In vfp2c32.fll + Declare ExpandEnvironmentStrings In vfp2c32.fll + Declare FChSizeEx In vfp2c32.fll + Declare FCloseEx In vfp2c32.fll + Declare FCreateEx In vfp2c32.fll + Declare FEoFEx In vfp2c32.fll + Declare FFlushEx In vfp2c32.fll + Declare FGetsEx In vfp2c32.fll + Declare FHandleEx In vfp2c32.fll + Declare FindFileChange In vfp2c32.fll + Declare FindRegistryChange In vfp2c32.fll + Declare Float2Str In vfp2c32.fll + Declare FLockFile In vfp2c32.fll + Declare FLockFileEx In vfp2c32.fll + Declare FOpenEx In vfp2c32.fll + Declare FormatMessageEx In vfp2c32.fll + Declare FPutsEx In vfp2c32.fll + Declare FReadEx In vfp2c32.fll + Declare FreeHGlobal In vfp2c32.fll + Declare FreeMem In vfp2c32.fll + Declare FreePMem In vfp2c32.fll + Declare FreeRefArray In vfp2c32.fll + Declare FSeekEx In vfp2c32.fll + Declare FT2DT In vfp2c32.fll + Declare FUnlockFile In vfp2c32.fll + Declare FUnlockFileEx In vfp2c32.fll + Declare FWriteEx In vfp2c32.fll + Declare GetCursorPosEx In vfp2c32.fll + Declare GetFileAttributes In vfp2c32.fll + Declare GetFileOwner In vfp2c32.fll + Declare GetFileSize In vfp2c32.fll + Declare GetFileTimes In vfp2c32.fll + Declare GetIUnknown In vfp2c32.fll + Declare GetLongPathName In vfp2c32.fll + Declare GetOpenFileName In vfp2c32.fll + Declare GetSaveFileName In vfp2c32.fll + Declare GetServerTime In vfp2c32.fll + Declare GetShortPathName In vfp2c32.fll + Declare GetSystemDirectory In vfp2c32.fll + Declare GetSystemTime In vfp2c32.fll + Declare GetWindowRectEx In vfp2c32.fll + Declare GetWindowsDirectory In vfp2c32.fll + Declare GetWindowTextEx In vfp2c32.fll + Declare IcmpPing In vfp2c32.fll + Declare InitVFP2C32 In vfp2c32.fll + Declare Int64_Add In vfp2c32.fll + Declare Int64_Div In vfp2c32.fll + Declare Int64_Mod In vfp2c32.fll + Declare Int64_Mul In vfp2c32.fll + Declare Int64_Sub In vfp2c32.fll + Declare Invoke In vfp2c32.fll + Declare Ip2MacAddress In vfp2c32.fll + Declare IsEqualGuid In vfp2c32.fll + Declare LockHGlobal In vfp2c32.fll + Declare Long2Str In vfp2c32.fll + Declare MarshalArrayCharArray In vfp2c32.fll + Declare MarshalArrayCString In vfp2c32.fll + Declare MarshalArrayDouble In vfp2c32.fll + Declare MarshalArrayFloat In vfp2c32.fll + Declare MarshalArrayInt In vfp2c32.fll + Declare MarshalArrayLogical In vfp2c32.fll + Declare MarshalArrayShort In vfp2c32.fll + Declare MarshalArrayUInt In vfp2c32.fll + Declare MarshalArrayUShort In vfp2c32.fll + Declare MarshalArrayWCharArray In vfp2c32.fll + Declare MarshalArrayWString In vfp2c32.fll + Declare MarshalCursorCharArray In vfp2c32.fll + Declare MarshalCursorCString In vfp2c32.fll + Declare MarshalCursorDouble In vfp2c32.fll + Declare MarshalCursorFloat In vfp2c32.fll + Declare MarshalCursorInt In vfp2c32.fll + Declare MarshalCursorLogical In vfp2c32.fll + Declare MarshalCursorShort In vfp2c32.fll + Declare MarshalCursorUInt In vfp2c32.fll + Declare MarshalCursorUShort In vfp2c32.fll + Declare MarshalCursorWCharArray In vfp2c32.fll + Declare MarshalCursorWString In vfp2c32.fll + Declare MoveFileEx In vfp2c32.fll + Declare Num2Binary In vfp2c32.fll + Declare OnLoad In vfp2c32.fll + Declare OnUnload In vfp2c32.fll + Declare OpenRegistryKey In vfp2c32.fll + Declare OpenService In vfp2c32.fll + Declare PauseService In vfp2c32.fll + Declare PG_ByteA2Str In vfp2c32.fll + Declare PG_Str2ByteA In vfp2c32.fll + Declare ProgIDFromCLSID In vfp2c32.fll + Declare ReadBytes In vfp2c32.fll + Declare ReadChar In vfp2c32.fll + Declare ReadCharArray In vfp2c32.fll + Declare ReadCString In vfp2c32.fll + Declare ReadInt64AsDouble In vfp2c32.fll + Declare ReadLogical In vfp2c32.fll + Declare ReadPChar In vfp2c32.fll + Declare ReadPCString In vfp2c32.fll + Declare ReadPInt64AsDouble In vfp2c32.fll + Declare ReadPLogical In vfp2c32.fll + Declare ReadPointer In vfp2c32.fll + Declare ReadPPointer In vfp2c32.fll + Declare ReadProcessMemoryEx In vfp2c32.fll + Declare ReadPUInt In vfp2c32.fll + Declare ReadPUInt64AsDouble In vfp2c32.fll + Declare ReadPWString In vfp2c32.fll + Declare ReadRegistryKey In vfp2c32.fll + Declare ReadUInt In vfp2c32.fll + Declare ReadUInt64AsDouble In vfp2c32.fll + Declare ReadWCharArray In vfp2c32.fll + Declare ReadWString In vfp2c32.fll + Declare ReAllocHGlobal In vfp2c32.fll + Declare ReAllocMem In vfp2c32.fll + Declare RegisterActiveObject In vfp2c32.fll + Declare RegisterObjectAsFileMoniker In vfp2c32.fll + Declare RegistryHiveToObject In vfp2c32.fll + Declare RegistryValuesToObject In vfp2c32.fll + Declare ResolveHostToIp In vfp2c32.fll + Declare RevokeActiveObject In vfp2c32.fll + Declare RGB2Colors In vfp2c32.fll + Declare SetFileAttributes In vfp2c32.fll + Declare SetFileTimes In vfp2c32.fll + Declare SetSystemTime In vfp2c32.fll + Declare SetSystemTimeEx In vfp2c32.fll + Declare SHBrowseFolder In vfp2c32.fll + Declare SHCopyFiles In vfp2c32.fll + Declare SHDeleteFiles In vfp2c32.fll + Declare SHMoveFiles In vfp2c32.fll + Declare Short2Str In vfp2c32.fll + Declare SHRenameFiles In vfp2c32.fll + Declare SHSpecialFolder In vfp2c32.fll + Declare SizeOfMem In vfp2c32.fll + Declare SQLExecEx In vfp2c32.fll + Declare SQLGetPropEx In vfp2c32.fll + Declare SQLSetPropEx In vfp2c32.fll + Declare ST2DT In vfp2c32.fll + Declare StartService In vfp2c32.fll + Declare StopService In vfp2c32.fll + Declare Str2Double In vfp2c32.fll + Declare Str2Float In vfp2c32.fll + Declare Str2Long In vfp2c32.fll + Declare Str2Short In vfp2c32.fll + Declare Str2ULong In vfp2c32.fll + Declare Str2UShort In vfp2c32.fll + Declare StringFromCLSID In vfp2c32.fll + Declare SyncToServerTime In vfp2c32.fll + Declare SyncToSNTPServer In vfp2c32.fll + Declare Timet2DT In vfp2c32.fll + Declare ULong2Str In vfp2c32.fll + Declare UnBindEventsEx In vfp2c32.fll + Declare UnlockHGlobal In vfp2c32.fll + Declare UnMarshalArrayCharArray In vfp2c32.fll + Declare UnMarshalArrayCString In vfp2c32.fll + Declare UnMarshalArrayDouble In vfp2c32.fll + Declare UnMarshalArrayFloat In vfp2c32.fll + Declare UnMarshalArrayInt In vfp2c32.fll + Declare UnMarshalArrayLogical In vfp2c32.fll + Declare UnMarshalArrayShort In vfp2c32.fll + Declare UnMarshalArrayUInt In vfp2c32.fll + Declare UnMarshalArrayUShort In vfp2c32.fll + Declare UnMarshalArrayWCharArray In vfp2c32.fll + Declare UnMarshalArrayWString In vfp2c32.fll + Declare UnMarshalCursorCharArray In vfp2c32.fll + Declare UnMarshalCursorCString In vfp2c32.fll + Declare UnMarshalCursorDouble In vfp2c32.fll + Declare UnMarshalCursorFloat In vfp2c32.fll + Declare UnMarshalCursorInt In vfp2c32.fll + Declare UnMarshalCursorLogical In vfp2c32.fll + Declare UnMarshalCursorShort In vfp2c32.fll + Declare UnMarshalCursorUInt In vfp2c32.fll + Declare UnMarshalCursorUShort In vfp2c32.fll + Declare UnMarshalCursorWCharArray In vfp2c32.fll + Declare UnMarshalCursorWString In vfp2c32.fll + Declare UrlDownloadToFileEx In vfp2c32.fll + Declare UShort2Str In vfp2c32.fll + Declare UTC2DT In vfp2c32.fll + Declare ValidateMem In vfp2c32.fll + Declare Value2Variant In vfp2c32.fll + Declare Variant2Value In vfp2c32.fll + Declare VFP2CSys In vfp2c32.fll + Declare WriteBytes In vfp2c32.fll + Declare WriteCharArray In vfp2c32.fll + Declare WriteCString In vfp2c32.fll + Declare WriteInt64 In vfp2c32.fll + Declare WriteLogical In vfp2c32.fll + Declare WritePCString In vfp2c32.fll + Declare WritePInt64 In vfp2c32.fll + Declare WritePLogical In vfp2c32.fll + Declare WritePUInt64 In vfp2c32.fll + Declare WritePWChar In vfp2c32.fll + Declare WritePWString In vfp2c32.fll + Declare WriteRegistryKey In vfp2c32.fll + Declare WriteUInt64 In vfp2c32.fll + Declare WriteWChar In vfp2c32.fll + Declare WriteWCharArray In vfp2c32.fll + Declare WriteWString In vfp2c32.fll +Endfunc + + +Function GetVfp2c32Data() + Local lcFileData As String + + TEXT TO m.lcFileData noshow + TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + KAEAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1vZGUuDQ0K + JAAAAAAAAABUgeiZEOCGyhDghsoQ4IbKA+jvyhHghsoV7NvKEuCGyhXsicoa4IbKycOayhLghsqHw5/K + EuCGypPo2coT4IbKA+jbyhLghsqT6NvKAuCGyurDn8oV4IbKEOCHyhfhhsoV7ObKFOCGyhXs2coF4IbK + FeziygzghsoV7NrKEeCGyvzr2MoR4IbKFezcyhHghspSaWNoEOCGygAAAAAAAAAAAAAAAAAAAABQRQAA + TAEFAF6rGEUAAAAAAAAAAOAADiELAQcKAKACAADwAgAAAAAADiAAAAAQAAAAsAIAAAAAEAAQAAAAEAAA + BAAAAAAAAAAEAAAAAAAAAACgBQAAEAAAAAAAAAIAAAAAABAAABAAAAAAEAAAEAAAAAAAABAAAADgTAMA + FgMAANg4AwAsAQAAAFAFAMgCAAAAAAAAAAAAAAAAAAAAAAAAAGAFACwyAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAIATAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAC50ZXh0AAAAUZcCAAAQAAAAoAIAABAAAAAAAAAAAAAAAAAAACAAAGAucmRhdGEAAPafAAAAsAIA + AKAAAACwAgAAAAAAAAAAAAAAAABAAABALmRhdGEAAAA89QEAAFADAAAgAAAAUAMAAAAAAAAAAAAAAAAA + QAAAwC5yc3JjAAAAyAIAAABQBQAAEAAAAHADAAAAAAAAAAAAAAAAAEAAAEAucmVsb2MAACo3AAAAYAUA + AEAAAACAAwAAAAAAAAAAAAAAAABAAABCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIsAg/j/dAdQ/xWIsAIQwzPJiUgQiUg4iUg8iUhAxkBIQ4lITIlIcIlIZIlI + bIhIdMNWjXdI6A3nAQCL9+g+xgEAXsMz0olQEIlQOIlQPIlQQI1IeMZASEOJUEyJUHCJUGSJUGyIUHTG + AUOJUQSJUSiJURyJUSSIUSzDVo13eOjE5gEAjXdI6LzmAQCL9+jtxQEAXsOLAIXAdAdQ/xUgtAIQw4uA + QAEAAIP4/3QHUP8VNLECEMPZ7sYAVN1YDMOLRCQE6MRFAQD2RCQIAXQK/3QkBOhVDgAAWYtEJATCCABW + i/CLRgSFwFeLPcCyAhB0A1D/14tGCIXAdANQ/9eLdgyF9nQDVv/XX17Di0QkBOidYQAA9kQkCAF0Cv90 + JAToCQ4AAFmLRCQEwggAiwCFwHQGiwhQ/1EIw4sAg/j/dAZQ6OkIAADDiwiFyXQNgHgEAHQHUf8VKLAC + EMNXagYzwFmL+sZCGADzqyFCHCFCIIvCX8MzyccAmPkCEIlIBIlICIlIDIlIEIlIFIlIGIlIHIhIJIhI + JYmIKBAAAMONRhDHBpj5AhDoTEcBAI1GBOlERwEAg2YEAIlGCI1GDMcGxPkCEOir////i8bDVo13DMcH + xPkCEOjD////i8de6apEAQBqU4vRWemLAQAAalSL0VnpgQEAAGo2i9FZ6XcBAACLwlBqN4vRWehJAQAA + w+sYiwhQagCJDShFBRD/FZSxAhBQ/xWUsAIQoShFBRCFwHXfw1NWV74UYAMQM9tWQ/8VVLECEItEJBSD + 6AB0akh1bIt8JBBX/xWksQIQoSRFBRCFwIk9EGADEHUT/xWgsQIQhcCjJEUFEHUPM9vrP1D/FZyxAhCF + wHU0alBqCP8VlLECEFD/FZCwAhCL+Ff/NSRFBRD/FZixAhChKEUFEIkHiT0oRQUQ6wXoUv///1b/FVCx + AhBfXovDW8IMAFZX/zUkRQUQi/D/FZyxAhCDZhQAi/iLzv9XBIt2EIP+U3QFg/5UdQxqAYPHEFf/FbCx + AhBfXsNVi+yD7ByLRQiJReiLRQyJReyLRRCJRfCNReSJTfSJVeToo////4tF5MnCDABVi+yD7ByLRQiJ + ReiLRQyJReyNReSJTfSJVeTofP///4tF5MnCCABVi+yD7ByLRQiJReiNReSJTfSJVeToW////4tF5MnC + BABVi+yD7ByNReSJTfSJVeToQP///4tF5MnD/zUkRQUQ/xWcsQIQ6xCLSAwPtxGDfJEGAHQPZv8Bi0gM + ZosRZjtRBHLki0gMZosRZjtRBHIEM8DrHYtIDGb/QQKLSAwPtxFWi3QkCIl0kQaLQAwPtwBewgQA/zUk + RQUQ/xWcsQIQhfZ0LotIDA+3UQQ78nMjg3yxBgB0HGb/SQKLSAyDZLEGAItIDA+3CTvxcwaLQAxmiTDD + Vv81JEUFEP8VnLECEIvw6xCLRggPtwiDfIgEAHQPZv8Ai0YIZosIZjtIAnLki0YIZosIZjtIAnIEM8Dr + PotEJAhXg8ACUGpC/xVksQIQi/iF/3Qmi0YID7cIV4l8iAT/FWCxAhBmi0wkEFdmiQj/FWyxAhCLRggP + twBfXsIIAGoQUeh5////w1ZX/zUkRQUQi/n/FZyxAhCF/4vwdDKLRggPt0gCO/lzJ4tEuASFwHQfUP8V + dLECEItGCINkuAQAi0YID7cAO/hzBotGCGaJOF9ew1ZX/zUkRQUQi/H/FZyxAhCF9ov4dDOLRwgPt0gC + O/FzKMHmAotEBgSFwHQdU1D/FWCxAhCL2ItHCP90MAT/FWyxAhCNQwJb6wIzwF9ew1b/NSRFBRCL8f8V + nLECEIX2dBqLQAgPt0gCO/FzD4tEsASFwHQHUP8VYLECEF7DVv81JEUFEIvx/xWcsQIQhfZ0GotACA+3 + SAI78XMPi0SwBIXAdAdQ/xVssQIQXsNWV/81JEUFEIv6i/H/FZyxAhCF9nQoi0AID7dIAjvxcx2LRLAE + hcB0FWpAg8cCV1D/FXixAhD32BvA99jrA2YzwF9ew1WL7IPsSFOLHZyxAhBWV/81JEUFEIlN+P/Ti/CF + 9ol1/HVDalBqCP8VlLECEFD/FZCwAhCL8Fb/NSRFBRCJdfz/FZixAhC/FGADEFf/FVSxAhChKEUFEIkG + V4k1KEUFEP8VULECEGpAg8YQjUW4VlD/FeixAhBqAFboiQoAAIPEFIXAD4XcAAAAi3X4i0YUg/gKd3x0 + cIPoAHRISHQ6SHQkSEh0FEhID4W4AAAAiw7oXP7//+mqAAAAiw7oBf7//+mgAAAAM8Bmi0YEUP826Gr9 + ///piwAAAI1OJP9WGOmCAAAAi04Yi0X8iUgEiw6JSAiLTgSJSAzHRgSIEwAAxwZYUAMQ61+LVgSLDv9W + GOtVg+gLdEaD6AN03UhIdDRIdChIdUH/NSRFBRCLPv/Thf90E4tADA+3SAQ7+XMIi0S4BoXAdR4zwOsa + izborvz//+sT/zboS/z//+sIiw6NViT/VhiJBmpAjUW4UItF/IPAEFD/FeixAhCDxAxfXjPAW8nDaguL + 0Vnp//v//1WL7IPsJGoLiU3kZolV3o1V3FnGRdxJ6OP7///Jw1WL7IPsJN1FCGoLZolN3t1d6IlV4I1V + 3FnGRdxO6L/7///JwggAVYvsg+wki0UIiUXwi0UMagtmiU3ejVXcWcZF3FmJRfTolvv//8nCCABVi+yD + 7CQzwIXJD5XAaguNVdxZxkXcTIlF4Ohz+///ycNVi+yD7CRmg2XeAFaL8cZF3Ejo7QEAAI1IAYlF4OiA + /P//i8iFyYlN+HQZ6Mb8//+L1ovI6NgBAABqC41V3FnoLfv//17Jw/90JASLwlBqG4vRWejR+v//wgQA + i8JQah2L0Vno6Pr//8OLwlBqHovRWeja+v//w2pwi9FZ6fD6//+LwlBqcYvRWejC+v//w/90JAiLwv90 + JAiL0VBqelnoWPr//8IIAGp8i9FZ6cD6//9qfYvRWem2+v//an+L0VnprPr//2oti9FZ6aL6//+LwlBq + EovRWeh0+v//w4vCUGoli9FZ6Gb6///D/3QkCIvC/3QkCIvRUGohWej8+f//wggA/3QkBIvCUGoii9FZ + 6BX6///CBABqHIvRWelQ+v//i8JQalmL0VnoIvr//8P/dCQEi8JQalyL0Vno6fn//8IEAGpdi9FZ6ST6 + //9qF4vRWeka+v//ahmL0VnpEPr//2oai9FZ6Qb6//+LwlBqGIvRWejY+f//w4vCUGoWi9FZ6Mr5///D + i8JQaleL0VnovPn//8NqWIvRWenS+f//ag2L0VnpyPn//2oOi9FZ6b75//9qE4vRWem0+f//i8JQahSL + 0Vnohvn//8NWvhRgAxBW/xVUsQIQ6Cv4//+hJEUFEIXAdA5Q/xVQsAIQgyUkRQUQAFb/FVCxAhBW/xWE + sAIQXsOLwesBQIA4AHX6K8HDigKIAUFChMB19sPM/yVEtAIQ/yWgswIQ/yWQswIQ/yWYswIQ/yWcswIQ + /yWcsgIQ/yWIsgIQ/yWYsgIQ/yVwsgIQ/yVssgIQ/yVosgIQ/yVksgIQ/yVgsgIQ/yVcsgIQ/yVYsgIQ + /yVUsgIQ/yVQsgIQ/yVMsgIQ/yVAsgIQ/yVEsgIQ/yVIsgIQ/yV0sgIQ/yV4sgIQ/yV8sgIQ/yWAsgIQ + /yWEsgIQ/yWMsgIQ/yWQsgIQ/yWUsgIQaITuAhDoDwMAAIXAdAL/4DPAwhAAVYvsaHC0AhDo9wIAAIXA + dANd/+BmM8BdwhQAU2jQtAIQ/xXUsAIQi9iF23RLVos10LACEGi4tAIQU//WaKS0AhBTiQf/1otMJAxo + lLQCEFOJAf/Wi0wkEIkBgz8AXnQNi0wkCIM5AHQEhcB1C1P/FcCwAhAzwOsCi8NbwggAVYvsgexgBgAA + U1ZXaAUBAACNhbD8//9Q/xUUsQIQ/zUwUAMQizUEswIQjYWw/P//UI2FuP3//2jstAIQUP/Wg8QQagBo + gAAAEGoDagBqA2gAAACAjYW4/f//UP8V3LACEIsdwLACEIv4g///dHdqAFf/FeCwAhBXiUX4/xWIsAIQ + g334/3RegX34IE4AAHNVjUXUUI1F0FCNfeTo/f7//4v4jUXYUI2FuP3//1D/VeSFwHUujYWw/P//UI2F + rPv//2jctAIQUP/Wg8QMagONhaz7//9QjYW4/f//UP8VRLACEFf/0/81MFADEIs91LACEP/Xi/CNhbj9 + //9QiXXs/9eFwIlF9A+EcwEAAIX2D4RrAQAAO8YPhFgBAACNReRQjUXcUI19+Ohx/v//M/87x4lF1HUM + /3X0/9OLxulAAQAAaAoCAACNhaD5//9QVv8VQLACEI1FxFCNhbj9//9Q/1X4iUX8jUXIUI2FoPn//1D/ + Vfg5ffyJReAPhOgAAAA7xw+E4AAAAP91/Is1PLACEFf/1v914IlF8GoA/9b/dfCLNTiwAhCJRej/1v91 + 6Iv4/9Yz9jv+iUX4dHM7xnRvV/91/I2FoPn//1ZQ/1XchcB0XP91+I2FuP3///914FZQ/1XchcB0R41F + zFCNRdhQvoT2AhBWV/9V5I1FzFCNRdBQVv91+P9V5ItF2ItV0ItICItyCDvOdxZyDItADItSDDvCdwpz + CItF9P917OsGi0Xs/3X0iUX8/9ODffAAizVMsAIQiz1IsAIQdAr/dfD/1v918P/Xg33oAHQU/3Xo/9b/ + dej/1+sI/3X0iXX8/9P/ddTrBIl1/FD/04tF/OsCC8ZfXlvJw1WL7IHsJAUAAKEwYAMQhcB1KOhj/f// + hcCjMGADEHUaakBo4LUCEGiYtQIQUP8VALMCEDPA6YIAAAD/dQhQ/xXQsAIQhcCJRfx1blaLNUCwAhBX + vwUBAABXjYX0/v//UP81MGADEP/WagD/FWCwAhBXjY3s/f//UVD/1o2F9P7//1D/dQiNhez9//9QjYXc + +v//aPi0AhBQ/xUEswIQg8QUakBo4LUCEI2F3Pr//1BqAP8VALMCEF9ei0X8ycIEAFOKXCQI9sMCVovx + dCRXaL4hABCNfvz/N2oMVuiVAgAA9sMBdAdX6FgAAABZi8df6xWLzujdAgAA9sMBdAdW6EAAAABZi8Ze + W8IEAIM9OEUFEP91Bv8lGLICEGg0RQUQaDhFBRD/dCQM6K4CAACDxAzD/3QkBOjR////99gbwPfYWUjD + /yUIsgIQ/yUEsgIQ/yUAsgIQ/yXksQIQ/yXMsQIQ/yXAsQIQi0QkCIXAdQ45BTRgAxB+Lv8NNGADEIP4 + AYsNILICEIsJiQ0sRQUQdU9ogAAAAP8V+LECEIXAWaM4RQUQdQQzwOt5gyAAoThFBRCjNEUFEOgsAgAA + aBQiABDobP///8cEJBhQAxBoAFADEOgLAgAA/wU0YAMQWes/hcB1PKE4RQUQhcB0M+sTiw00RQUQiwmF + yXQH/9GhOEUFEIMtNEUFEAQ5BTRFBRBz3lD/FfyxAhCDJThFBRAAWTPAQMIMAGoMaAC2AhDoRgIAADPA + QIlF5DP/iX38i3UMO/d1DDk9NGADEA+ErAAAADvwdAWD/gJ1MaEwRQUQO8d0DP91EFb/dQj/0IlF5Dl9 + 5A+EhQAAAP91EFb/dQjo5f7//4lF5DvHdHKLXRBTVv91COiy8f//iUXkg/4BdQ47x3UKU1f/dQjou/7/ + /zv3dAWD/gN1KVNW/3UI6Kj+//+FwHUDiX3kOX3kdBOhMEUFEDvHdApTVv91CP/QiUXkg038/4tF5Osa + i0XsiwiLCVBR6HoBAABZWcOLZeiDTfz/M8DorAEAAMIMAP8ltLECEMzMzMzMzMzMahRoELYCEOhUAQAA + g2X8AP9NEHgOi00IK00MiU0I/1UU6+2DTfz/6G8BAADCEACLReyJReSLReSLAIlF4ItF4IE4Y3Nt4HQQ + x0XcAAAAAItF3MOLZejry+hVAQAAzGoMaCC2AhDo9gAAAINl5ACLdQyLxg+vRRABRQiDZfwA/00QeAsp + dQiLTQj/VRTr8MdF5AEAAACDTfz/6AgAAADo+AAAAMIQAIN95AB1Ef91FP91EP91DP91COhD////w/8l + ELICEP8lFLICEP8lHLICEGoMaDC2AhDohAAAAMdF5Cj9AhCBfeQo/QIQcyKDZfwAi0XkiwCFwHQL/9Dr + BzPAQMOLZeiDTfz/g0XkBOvV6IgAAADDagxoQLYCEOhAAAAAx0XkMP0CEIF95DD9AhBzIoNl/ACLReSL + AIXAdAv/0OsHM8BAw4tl6INN/P+DReQE69XoRAAAAMP/JSSyAhDMzGisIgAQZKEAAAAAUItEJBCJbCQQ + jWwkECvgU1ZXi0X4iWXoUItF/MdF/P////+JRfiNRfBkowAAAADDi03wZIkNAAAAAFlfXlvJUcP/JSiy + AhD/JSyyAhCAPRxEBRAAdAb/JdizAhDDVlf/FcSzAhCLTCQMgyVQUAMQAL7ogAMQK/GKEYgUDkGE0nX2 + o+SAAxAtNCcAAMcF4IADEAEAAAB0M4PoDnQgg+grdAiIFWiBAxDrMWoNWb5c+wIQv2iBAxDzpWal6x1q + B748+wIQv2iBAxDrDGoQvvj6AhC/aIEDEFnzpaRfXsIEAIHskAEAAI0EJFBoAQEAAP8V3LMCEIXAdBZX + agBqAWjo+gIQi/joLTECADLAX+sJxgUcRAUQAbABgcSQAQAAw7iblAIQ6AVvAgCB7JgBAACDZfwAU1ZX + jXECsAGNfZSJZfDo8LMBAGoQX421ZP///8ZF/AHoStQBAGgFAQAAjYVc/v//UMZF/AL/FeCzAhCD+P91 + G2jc+gIQ6OH+///HReBOYbwAaDj9AhCNReDrMY2FXP7//1D/FeSzAhCL2DP2O96JXeh1H2gQ2QIQ6K7+ + ///HReROYbwAaDj9AhCNReRQ6KttAgAzyYtDDDk0iIlN7HQDQevyO851LGoLM8la6Crz//+NtWT////o + 79IBAI11lOgfsgEAi030X15kiQ0AAAAAW8nDM8CNVZTo4McBADP/Rzt17HMwi0MMiwSwiwBmiX2dUEf/ + FayzAhBQjZ1k////6F7QAQCL0I1NlOhwxgEAi13oRuvLD7dNnWoF646LTdzoFS8CALhgJAAQw7i8oQIQ + 6MdtAgCB7LgAAACDZfwAU1ZXi9mNcwKNvTz///+JZfDopdUBADPAiUWsiUXUiUXYiUXcahBfjbVs//// + xkX8Auj70gEAxkX8A/+1YP////8V5LMCEDPJO8GJReh1SWaDOwF1DLnRyQIQ6Mvy///rCmoLM8la6DHy + //+NtWz////o9tEBAI11nOgmsQEAjbU8////6OPRAQCLTfRfXmSJDQAAAABbycNmgzsBdSKLQAyLAP8w + /xWsswIQUI2dbP///+htzwEAi/PoKL4BAOuriU3si1AMi3XsOQyydAX/Rezr8FH/deyNcyaNfZzo5NYB + ADP/RzP2O3XsczCLReiLQAyLBLCLAGaJfaVQR/8VrLMCEFCNnWz////oFc8BAIvQjU2c6CfFAQBG68sP + t02lagXpPv///4tN5OjX6///uGQlABDDM8DrCDpMJAR1AUBCigqEyXXywgQA6wSICEBCigqEyXX2iAjD + iwKKCID5IHQFgPkJdQNA6/GJAsNVi+yD7BwzwDlFCFNWfQOJRQiBfQhfAQAAfAfHRQheAQAA3UUUiUX0 + 3B24+wIQiQGJffjf4PbEBXoO3UUUxwEBAAAA2eDdXRTdRRSNReRQUVHdHCT/FeCxAhDdXRSDxAzdBbj7 + AhDdReTa6d/g9sREe2mNn2ABAACL891F5I1F5Nw1sPsCEFBRUd0cJP8V4LECEN1d7N1F7IPEDNwFqPsC + EE7cDaD7AhDo/2cCAN0FuPsCEN1F5LEw2ukqyP9F9IgO3+D2xER6susLigaLTfj/RfiIAUY783Lx6zrd + RRTcHbj7AhDf4PbEQXUq3UUU6wzdRez/TfTdXRTdRezcDbD7AhDdXezdRezcHZj7AhDf4PbEBXvbg30Q + AItFCI00OHUDA3X0O/eLXQyLRfSJA3NJxgcA6YcAAACNh2ABAAA5RfhzO91FFI1F7NwNsPsCEFBRUd1d + FN1FFN0cJP8V4LECEN1dFIPEDN1F7Og9ZwIAi034BDD/RfiIATl1+Ha6jYdgAQAAO/ByCcaHXwEAAADr + LoAGBYvG6x8798YGMHYFTv4G6xPGBjH/A4N9EAB1CDvHdgPGADBAgD45f9zGAABei8dbycIUAIsRM8CA + OjB8H1aLMYoWgPo5fxQPvtJGjQSAjURC0IvWiTGAOjB9417DVovwM9JXM8DrCIv+ToX/dAVBOBF19EBB + O/J0BzgRdANO6+9fXsOKCovChMl0EotMJAT/TCQEhcl0BkCAOAB17kCKCITJdAb/TCQE690rwkjCBACA + OQCLwXQSi1QkBP9MJASF0nQGQIA4AHXuK8HCBABWVzPJi/Az/+sBRoA+IHT6igY8MHwtU1U8OX8lD77A + agBqCoPoMJlXUYvYi+rolWYCAAPYE+pGigY8MIvLi/19111bi9dfi8Few1WL7IPsFItNDFZXi/iLRQiL + 0AvRjXXsdC9TagBqClFQ6JhmAgCAwTCIDovKi9BGC9GJXQx15FvrBk6KBogHR41F7DvwdfPrA8YHMF9e + ycIIAFZXM8mL8DP/6wFGgD4gdPqKBjwtdAQ8K3UBRooGPDB8LVNVPDl/JQ++wGoAagqD6DCZV1GL2Ivq + 6O9lAgAD2BPqRooGPDCLy4v9fdddW4vXX4vBXsNVi+yD7BSLTQyFyVZXi/iNdex/GXwGg30IAHMRi0UI + xgctR/fYg9EA99mJRQiLRQiL0AvRdC9TagBqClFQ6NVlAgCAwTCIDovKi9BGC9GJXQx15FvrBk6KBogH + R41F7DvwdfPrBMYHMEfGBwBfXsnCCABVi+yD7FTdRQxTi10UVldRUd0cJGoAjUUQUFONfbCNTRToF/z/ + /4tVCIvwM8A5RRR0BMYCLUKAPgB0VYtNEDvIfzbGAjBC99nGAi5CO8iJTQh+HYvZwekCi/q4MDAwMPOr + i8uD4QPzqgPT6wSIAkJGigaEwHX260GL+EA7+XUExgIuQooeiBpCRoA+AHXq6ynGAjBCO9h+IcYCLkI7 + 2H4Zi8uL8cHpAov6uDAwMDDzq4vOg+ED86oD019ei8JbycIQAFWL7IPsWNlFDFOLXRDdXfjdRfhWV1FR + 3RwkagCNRRBQU419qI1NDOhP+///i1UIi/AzwDlFDHQExgItQoA+AHRVi00QO8h/NsYCMEL32cYCLkI7 + yIlNCH4di9nB6QKL+rgwMDAw86uLy4PhA/OqA9PrBIgCQkaKBoTAdfbrQYv4QDv5dQTGAi5Cih6IGkJG + gD4AderrKcYCMEI72H4hxgIuQjvYfhmLy4vxwekCi/q4MDAwMPOri86D4QPzqgPTX16LwlvJwgwAi0Qk + BMYALkCDfCQIAA+Uwf7JgOEOgMFGiAhAxgAuQMIIAFWL7IPsFItNDFZXi/iLRQiL0AvRjXXsdC9TagBq + ClFQ6NRjAgCAwTCIDovKi9BGC9GJXQx15FvrBk6KBogHR41F7DvwdfPrBMYHMEeLx19eycIIAFWL7IPs + FItNDIXJVleL+I117H8ZfAaDfQgAcxGLRQjGBy1H99iD0QD32YlFCItFCIvQC9F0L1NqAGoKUVDoY2MC + AIDBMIgOi8qL0EYL0YldDHXkW+sGTooGiAdHjUXsO/B18+sExgcwR4vHX17JwggAxgAwQGoHxgB4g8AJ + WopMJASA4Q+AwTCA+Tl+A4DBB8FsJAQEiAhISnXjg8AIwgQAVYvsg+wMi0UMhcCNTfR0KVYz0moKXvf2 + gMIwiBFBhcB1717rC4tVCEmKAf9FCIgCjUX0O8h17usJi0UI/0UIxgAwi0UIycIIAIN8JAQAfQTGAC1A + xgAwQGoIxgB4g8AJWopMJASA4Q+AwTCA+Tl+A4DBB8F8JAQEiAhISnXjg8AIwgQAVYvsg+xEi0UMhcBW + i3UIjU28fQjGBi332EaFwHQkVzPSagpf9/eAwjCIEUGFwHXvX+sGSYoBiAZGjUW8O8h18+sExgYwRovG + XsnCCADrAUCAOAB1+sOF9nQoU4rYivtXi3wkDIvOi9HB6QKLw8HgEGaLw/Ori8qD4QMBdCQM86pfW4tE + JATCBABWM/Y5dCQMdCPrBzpMJAh0D0CKCITJdfOKCDpMJAh1CkY7dCQMde1A6wIzwF7CCAAy0jgQdD2A + OCBWi8iL8HUGRoA+IHT6QTgRdfs78XUEiBBew0mAOSB0+jvwdBI7wXTuU4oeiBhARjvBdfZb6+CIUQFe + w1WL7FNWVzP/Rzl9DIvwi950KIoRhNJ0KEE6VQh1Bkc7fQx0FooRhNJ17usOOlUIdA//TRB0CogWRkGK + EYTSdexfi8bGBgBeK8NbXcIMAIoKM8BAhMlWi/J0EkI6TCQIdQFAigqEyXXyO/J1AjPAXsIEAN1EJATo + TGACAMIIAN1EJAToQGACAMIIAFaL8IoKiAhAQoTJdAb/TCQIdfArxoN8JAgAdAFIXsIEAFaL8IoIiApC + QITJdfYrxkhew4vIZosQQEBmhdJ0Bv9MJAR18CvB0fhIwgQAM8BAZjlEJAhyFYoKhMl0DzpMJAR0DEJA + ZjtEJAh262YzwMIIAFNWi/CNNLWE85b/jUb/mbmxOgIA9/lXagS/tQUAAIvIi9FryWRp0rE6AgCLxivC + SJle9/5qBIvwweYCjUYDmff/v5kAAACL2IvTadK1BQAAi8YrwoPAB5le9/5qBQPLjTSAjUb9mff/i/iL + 12nSmQAAAIvGK8JAQJle9/6D/wp9BYPHA+sEg+8JQYtUJBBmiQqLTCQUZok5i0wkGF9eZokBW8IMAFMP + t8mD+QJWVw+38A+3+n4Fg+kD6wSDwQlOamRbi8aZ9/tqBIvYi9Nr0mSLxivCacC1BQAAmV73/moFi/CL + wWnAmQAAAEBAmVn3+WoEi8iLw2nAsToCAAPPX5n3/18Dzl5bjYQIH0MaAMNVi+yD7BhTV41F8FCLRQjd + QAxRUd0cJP8V4LECEN1d6N1F8OiUXgIA3UXojYgsfQAA3A3I+wIQiUX4jQSNAwAAAJncBcD7AhC/sToC + APf/agRfagSJRQhpwLE6AgCZ9/+/tQUAACvIjQSNAwAAAJn3/19qBVtqColF/GnAtQUAAJn3/7+ZAAAA + K8iNRIkCmff/i/hpwJkAAABAQJn3+yvIQWaJTgaLx5lZ9/mDxATdHCSNDEDB4QIr+YtNCGvJZAPIi0X8 + jYQBQO3//4PHA2aJfgJmiQb/FcixAhBZWejaXQIAi/gPt8eZuRAOAACL2ff7M9JqPGaJRgiLx/fxX1eL + yg+3wZn3/zPSZolGCovBWffxi0X4agdZQF9bZolWDDPS9/Fmg2YOAGaJVgTJwgQAVYvsUVFTVlcPt3kC + ag5YK8eZagxe9/4PtzFqBbuQAQAAK/CNBECNBIdpwJkAAAAtyQEAAJlf9/+BxsASAABqZIv4D7dBBgP4 + i8aZ9/tbagQD+IvGacBtAQAAA/iLxpn3+yv4i8aZXvf+D7dRCo2EB9OC//+JRfwPt0EI20X8D7dJDGvA + PN1d+N1F+APCa8A8A8GJRfyLRQjbRfxfXlvdXfjdRfjcNcj7AhDewd1YDMnCBABVi+yD7BDdBdD7AhDc + UQzf4PbEQQ+KggAAAN3Y3UEMU91d+N1F+FeNRfBQUVHdHCT/FeCxAhDdXfiDxATdRfjcDcj7AhDcBcD7 + AhDdHCT/FcixAhDdXfhZ3UXwWdwl0PsCEOhyXAIAagBogFEBAFJQ6OBcAgDdRfiL+Iva6FhcAgBqAAP4 + aICWmAAT2lNX6MJcAgBfiQaJVgRbycPdBbj7AhDdQQza6d/g9sRED4pt////gyYA3diDZgQAycNVi+yD + 7BCLEItABLleWsgkO8F8Xn8IgfqAqSfRdlS6gKkn0YvBU2oAaICWmABQUugkXgIAagBogFEBAFJQ6DZd + AgCJXfyJTfjfbfiJRfCJVfRb3V343UX43DXI+wIQ323w3V3w3EXw3AXQ+wIQ3V8MycOLygvIda3Z7uvx + gT3UYAMQIAMAALqwzwIQcwW6lM8CEOmQ3v//VYvsi00IM9JWQjP26Azm//+FwHUauPcBAADrI4tNCP9N + DDPS6Dzl//+L8IX2dQaDfQwAdeeLTQjo7uX//4vGXl3CCACLFotMJAhqAOhI5f//i1QkBItMJAhqA1fo + IOX//zvHdAwz0kIzyegE5f//6wQBPjPAwggAVYvsi1UM6H7l//+D+P91B7i2AAAA6y+LTRBqAIvQ6P7k + //+LVQiLTRBqA/91DOjW5P//O0UMdAwz0kIzyei55P//6wIzwF3CDAAPv04BV+gX5f//i/iD//91B7gm + AwAA60eLVCQMi87oHOX//4P4/3UHuLYAAADrMGoAi9CLz+id5P//i1QkCGoD/3QkEIvP6HTk//87RCQM + dAwz0kIzyehW5P//6wIzwF/CCADdQAxWD79wAmoA6FFaAgCL0ANUJBSLzuhY5P//i1QkCGoB/3QkEIvO + 6C/k//87RCQMXnQMM9JCM8noEOT//+sCM8DCDADdRgxXD79+AmoA6AxaAgCL0IvP6Bfk//+LVCQIagH/ + dgiLz+jv4///O0YIX3QMM9JCM8no0eP//+sCM8DCBABVi+yD7CRXaggzwIN9CADGRdwwWY193fOrZquq + X3QQjU3c6MDc//+LTQjo1eP//8nCBABVi+yD7DRWizNXaggzwIX2xkXMMFmNfc3zq2arqnRFjUXwUIPK + /4vO6Lzj//+FwHUHuKoAAADrZ4tVCI1NzOhx3P//hcB1WItVDI1N8OjD4v//hcB1SYtNDOgN4///hcB0 + O+s7i00IZoNl9wBqAI1V8OiL4v//i/CF9n0E99jrH4tVDI1N8OiK4v//hcB1EItNDOjU4v//hcB1BIkz + M8BfXsnCCABmg3kB/3UF6WTi///pfeP//+hC4///g/j/dQe4qgAAAOsb/3QkBDPSi8joFeP///fYG8Al + Vv///wWqAAAAwgQA6BPj//+D+P91B7gmAwAA6x3/dCQEi1QkDIvI6OTi///32BvAJdr8//8FJgMAAMII + AOji4v//g8r/O8J1B7iqAAAA6xn/dCQEi8joteL///fYG8AlVv///wWqAAAAwgQAVYvsi00IV+is4v// + i/iDyv87+nQQVovP6Ifi//+FwHQEi8frEv91DItNCGaDZgcAi9boheH//19dwggAD7dOAzPSQuhO4v// + g/j/i0wkBIkBdQe4sAAAAOsUD7dOA2oCWugw4v//i0wkCIkBM8DCCACLThyFyXQN6Gve//+LThzpm93/ + /8NVi+yD7AxWV4vTjX30xkX/BugI7///izOAPi11CMZF9C2NffVGigY8MHwyPDl/Ljw5fw/+Tf90CogH + R0aKBjwwfe2NRfRQxgcA/xXwsQIQWYtNCGaJATPAiTNA6wIzwF9eycIEAFWL7IPsEFZXi9ONffDGRf8L + 6KPu//+LM4A+LXUIxkXwLY198UaKBjwwfDE8OX8tPDl/D/5N/3QKiAdHRooGPDB97Y1F8FDGBwD/FfCx + AhBZi00IiQEzwIkzQOsCM8BfXsnCBABWi9eL8OhL7v//igaEwIsPdA2KETrQdA1GigaEwHX1M8BewgQA + igaLVCQIiAJBM8CJD0Dr7Ogb7v//iwKKCDpMJAR1CECJAjPAQOsCM8DCBABWV4v46Pvt//+LMuswig6A + +WF8DYD5en8ID77Jg+kg6wMPvsk8YXwMPHp/CA++wIPoIOsDD77AO8h1EEZHigeEwHXKM8CJMkBfXsMz + wOv5VovXi/Doq+3//4sP6wiKEUZBOtB1DooGhMB18kkzwIkPQF7DM8Bew1aL14vw6IPt//+LB4oIitGA + +id0E4D6InQOM8DrJjrKdBT/TCQIdAqIDkZAigiEyXXsOBB1BooIiA5GQMYGAIkHM8BAXsIEAFNWi/Do + PO3//4sCihiA+yd0FoD7InQRM8DrITrLdBT/TCQMdAqIDkZAigiEyXXsOBh1AUDGBgCJAjPAQF5bwgQA + Vovw6Pzs//+LAooIgPlhfAWA+Xp+E4D5QXwFgPlafgmA+V90BDPA60qIDkZA/0wkCOsy/0wkCHQygPlh + fAWA+Xp+HoD5QXwFgPlafhSA+TB8BYD5OX4KgPlfdAWA+S51CogORkCKCITJdcjGBgCJAjPAQF7CBABW + i/Dohez//4sCigiA+WF8BYD5en4TgPlBfAWA+Vp+CYD5X3QEM8DrRYgORkD/TCQI6y3/TCQIdC2A+WF8 + BYD5en4ZgPlBfAWA+Vp+D4D5MHwFgPk5fgWA+V91CogORkCKCITJdc3GBgCJAjPAQF7CBABVi+yD7BSL + RQyKAITAU1aLdQhXD4SjAQAAjV0Qg+sIjX0MPCUPhSABAAD/RQyLRQyKADwwfBg8OX8UjU0Mx0X0AQAA + AOit7f//iUX86wuDZfQAx0X8BgAAAItFDIoAD77Ig/lVD4+zAAAAD4SjAAAAg/lCdHeD+UZ0ZYP5SXRT + g/lMdHyD+VMPhawAAACDxwSLD4PDBIXJD4QPAQAAg330AHUl6wSIBkZBigGEwHX26fgAAACLRfz/TfyF + wA+E6gAAAIoRiBZGQYA5AHXn6doAAACDxwT/N4PDBOmVAAAAg8cIg8MI3QPpnAAAAP9zDIPDCP8zi8aD + xwjooPD//4vwg8cE/zeDwwRW6G7w///plwAAAIPHBP83g8ME6z+L0YPqYnR0agRZK9F0UYPqA3Q8g+oK + dC9KSnQbPCV0BMYGJUaLRQyKAITAdAWIBkbrXf9NDOtYA/kPtwcD2VBW6DHx///rRgP5igcD2eveA/kP + vwcD2VBW6J3x///rLgP52QcD2d1d8N1F8P91/FFR3RwkVuhc7v//6xL/cwyDwwj/M4vGg8cI6Ejw//+L + 8P9FDItFDIoAhMAPhWb+//9fi8YrRQjGBgBeW8nDVjP2O8ZXi/l1Gf90JAz/FdCxAhA7xll1Cok3M8BA + X17CDABWVv90JBz/dCQcUP90JCBWVv8VrLACEDvGiQd121ZW/xVYsAIQaFTQAhCL+OhrGAIAM8Drxlcz + /zl8JAx1BWaJPus2/3QkEFb/dCQU/3QkFGoBV/8VuLACEDvHdRhXV/8VWLACEGhU0AIQi/joKxgCADPA + 6wdmiTxGM8BAX8IMAIXbdQuLRCQIIRgzwEDrYFZXjTwbjUcCUP8V+LECEIvwhfZZdQyLRCQUxwC2AAAA + 6ytXVlP/dCQYagFqAP8VuLACEDPJO8F1GFFR/xVYsAIQaFTQAhCL+OjAFwIAM8DrDWaJDEaLRCQQiTAz + wEBfXsIMAFWL7IPsIFYz9jl1CFeL+XRsjU34UVD/FaiwAhCFwHUPVlb/FViwAhBoPNACEOtAjUXwUI1F + +FD/FbywAhCFwHUPVlb/FViwAhBoJNACEOsfjUXgUI1F8FD/FbCwAhCFwHUYVlb/FViwAhBoDNACEIv4 + 6DQXAgAzwOtNjUXgZosIZjvOdjdmgfkQJ3MwD7dQDFIPt1AKUg+3UAhSD7dQBg+3QAJSUA+3wVBo5M8C + EGogV/8V2LECEIPEJOsIvtzPAhClZqUzwEBfXsnCBABVi+yD7BhWM/Y5dRBXdCqNRfhQ/3UI/xW8sAIQ + hcB1D1ZW/xVYsAIQaCTQAhDrKI1F6FCNRfhQ6weNRehQ/3UI/xWwsAIQhcBWdRdW/xVYsAIQaAzQAhCL + +Oh/FgIAM8DrC4tNDI1F6OjG/v//X17JwgwAVYvsg+wQVleNdfjo1PP//zP2OXUMdCaNRfBQjUX4UP8V + kLECEIXAdQ9WVv8VWLACEGhg+QIQ6yONRfDrA41F+P91CFD/FbCwAhCFwHUYVlb/FViwAhBoDNACEIv4 + 6AgWAgAzwOsDM8BAX17JwggAVYvsg+wQV4v4jUX4UP91CP8VqLACEIXAdQ9QUP8VWLACEGg80AIQ6yWD + fQwAdC+NRfBQjUX4UP8VvLACEIXAdRhQUP8VWLACEGgk0AIQi/jophUCADPA6xCNRfDrA41F+OjM8/// + M8BAX8nCCABVi+xRUWhgQwUQ/xW0sAIQg/j/dRpXagBqAP8VWLACEGgk+gIQi/joYRUCAF/Jw4P4AXQX + g/gCdSKhYEMFEIsNCEQFEAPIiU386xChtEMFEIsNYEMFEAPBiUX820X83V343UX43A0o/AIQ3DXI+wIQ + 3EYM3V4MycNVi+xRUWhgQwUQ/xW0sAIQg/j/dRpXagBqAP8VWLACEGgk+gIQi/jo6RQCAF/Jw4P4AXQX + g/gCdSKhYEMFEIsNCEQFEAPIiU386xChtEMFEIsNYEMFEAPBiUX820X83V343UX43A0o/AIQ3DXI+wIQ + 3G4M3V4MycNVi+xRUVZXM/85fQx0MI11+OgB8v///3UIi8ZQ/xWQsQIQhcB1IFdX/xVYsAIQaGD5AhCL + +OhjFAIAM8DrC4t1COjR8f//M8BAX17JwggAVYvsUVGDfQgAV4v5dCqNTfhRUP8VvLACEIXAdRhQUP8V + WLACEGgk0AIQi/joHRQCADPA6wuNRfjoSPL//zPAQF/JwgQAVYvsgewAAQAA/3UIjYUA////aDz6AhBQ + 6GT5//+DxAyNjQD////oMtH//8nCBADohtj//4P4/4tMJASJAXUaagBqAGhQzwIQaGTPAhDoKBMCALhO + YbwA6wIzwMIEAOh12P//g/j/i0wkBIkBdRpqAGoAaFDPAhBoRM8CEOj5EgIAuE5hvADrAjPAwgQAVY1s + JIyB7CwCAABWV4lFcGoIM8DGRUwwWY19TfOrZquqvoAAAABWjUXIjVVw6FD4//+FwHRlai7osvb//4XA + dE1WjYVI////6DX4//+FwHQ9jUXIUI2FSP7//2gMzwIQUOiO+P//g8QMjZVI/v//jU1M6GPQ//+FwHUl + /3VUjY1I/////3V86H/0///rEv91fI1NyOhD9P//6wW4qgAAAF9eg8V0ycIEAFWL7IPsZFdqCFn/dRAz + wP91CMZF3DCNfd3zq2arqo1FnGjIzgIQUOgf+P//g8QQjVWcjU3c6PfP//+FwHVKi034Vug00///i034 + 6N7S//+LyOgk1///jXXci/jo0/T//4P//151B7gmAwAA6xv/dQyLVRCLz+js1v//99gbwCXa/P//BSYD + AABfycIMAFWL7IHsLAEAAFZXagjGRdgwM8BZjX3Z86uLTQhmq6roydb//4vwg/7/dQe4JgMAAOtE/3UQ + jYXU/v//aAzPAhBQ6Hj3//+DxAyNldT+//+NTdjoTc///4XAdRv/dQyLVeCLzuhx1v//99gbwCXa/P// + BSYDAABfXsnCDABVi+yB7AABAACDfRABjYUA////dhn/dRD/dQz/dQhoMM8CEFDoGff//4PEFOsU/3UM + /3UIaBzPAhBQ6AP3//+DxBCNjQD////o0c7//8nCDABVi+yD7CRTV2oHM9tZM8DGRdxMiF3dZold3old + 4I195POri30IVovP6Azz//89qgAAAHUe/3UQ/3UMV+hv////O8N1TFaLz+jt8v//O8N0Nus+O8N1Ov91 + EP91DFfoTf///zvDdSqNVdyLzmaJXgfoxNT//zvDdRgzwIN9EAEPl8BAZolGB2aJXglmiV4LM8BfW8nC + DABVi+xRVovwi87okNX//4XAiUX8fQ6LRQjHAIUDAACDyP/reQ+/TgFT6GfV//+L2IP7/3UcD79GAWoA + agBocM8CEGhkzwIQ6NITAgCDyP/rS4vO6FHV//+L8IX2fw11BDPA6ziLRQiJMOvhVv8V+LECEIXAWYkH + dQuLRQjHALYAAADryItV/GoAi8vou9T//4sXagFWi8vol9T//1teycIEADPAg3kcAg+UwMOJSBzDiEgl + w1GF0lZ0RIvCjXABighAhMl1+SvGiUQkBHQwjUsmi/GLwivyihCIFAZAhNJ19kmKQQFBhMB1+FeL+b4Y + +gIQpaVmpaTGQyQBX+sExkMkAF5Zw7gBQACAwgwAuAFAAIDCFAAzwMIMALgBQACAwggAuAFAAIDCCAD/ + FYCxAhCLTCQEiUEgM8DCDACLRCQEBSgQAAD/CIsAwgQAi0QkBAUoEAAA/wCLAMIEADPAg3koAg+UwMOL + RCQEiUEowgQAi0gQi1AEUGoAUVJqAOjj1P//w4tEJARTM9s4WCR0dzhYJVaNsCYIAAB1GmpjU1ODwCZQ + Vuiz9P//g8QUi87ohcz//+tQOVgcdQRqY+sCamRTg8AmU1BW6JD0//+DxBRXjXgBV/8V+LECEDvDWXQl + i8+L0cHpAov486VTUIvKaAEEAAD/NQRABRCD4QPzpP8VCLMCEF9eM8BbwgwAVYvsg+wkU1aLdQgzwDhG + JFcPhLwAAABqCFn/dRTGRdww/3UQjX3d/3UM86tmq6qNRiZQjZ4mCAAAU+gR9P//g8QUgH4lAIv4dSeL + 041N3Ojiy///hcB1doB93Ex1cItF4PfYG8Al/L//fwUEQACA62KDfhwAdVf/FYCxAhCLTiCL0CvRgfr0 + AQAAdwQ7wXM6iUYgjXcBVv8V+LECEIXAWXQoi86L0cHpAov4i/PzpWoAUIvKaAEEAAD/NQRABRCD4QPz + pP8VCLMCEDPA6wW4BEAAgF9eW8nCFABVi+yLRRCDIABWi3UMV2oEWb+I+QIQM9Lzp3QRi3UMagRZv3j5 + AhAz0vOndROLTQiFyYkIdAqLAVH/UAQzwOsFuAJAAIBfXl3CDACDwAzpN/7//1P/dCQIjV4Q6IYQAQD/ + dCQMjV4c6HoQAQCLVCQQjV4M6Fb9///GRjEBW8IMALjblAIQ6GtLAgCD7AxTVle+AEUFEDPSi8aJZfCJ + VfzomxIBAITAdSZSUmj8ygIQaKS4AhDotgwCAGg4/QIQjUXsUMdF7E5hvADoaUoCAItBCui/EQEAD7bI + 6GPQ//+LTfRfXmSJDQAAAABbycOLTejoPgwCALiBRwAQw1a+AEUFEOjhEQEAXsNTVmogW74ARQUQ6CYZ + AQBeW8NWV4t8JAyNRwzoYv3//74ARQUQVv8VVLECEIsHi8//UAiEwHUM6OPJ//9X6D/X//9ZVv8VULEC + EF8zwF7CBABVi+xRUVZXjUX4UDP/V4vxVmi9RwAQaAAAAgBX/xWMsAIQO8eJRgR1KVdX/xVYsAIQaHjK + AhCL+OhoDAIAaDj9AhCNRfxQx0X8TmG8AOiMSQIAX17Jw7gbpgIQ6DxKAgBRuNQQAADoWUoCAINl/ACD + DVBQAxD/U1ZXi9mNcwKNvUj///+JZfDoDrIBAI1zJo29eP///8ZF/AHo/LEBAGoDWIvLjXWoxkX8Aujo + sAEAxkX8A2aDOwR1IoN7cgB0HIN9rACwAXUWx0XchQMAAGg4/QIQjUXc6TQBAAAywIF9rAAEAAB2FMdF + 4IUDAABoOP0CEI1F4OkVAQAAhMB1Zo2FHO///+htyP//i1XMjZ0c7///6F77//+NhRzv//9QM/ZW/3Wc + /7Vs////Vuj20P//i/g7/n0Ugf8EQACAdAxWVmgE+gIQ6FsLAgBqC1qLz+gnzv//jbUc7///6EHI///p + vAAAAL8ARQUQi8fodhABAITAdSRqAGoAaPzKAhBozLgCEOiPCgIAx0XoTmG8AGg4/QIQjUXo63doOBAA + AOiU1f//i/CF9ll0DrgARQUQ6API//+L8OsCM/b/dcz/dZz/tWz////oMP3//41F7FCLzovH6HcMAQCE + wHU6hfZ0Dov+6OjH//9W6ETV//9ZagBqAGjQ+QIQaMy4AhDoFgoCAMdF5E5hvABoOP0CEI1F5FDoyUcC + AItN7GoLWuhbzf//jXWo6COtAQCNtXj////oGK0BAI21SP///+gNrQEAi030X15kiQ0AAAAAW8nDi03Y + 6JDH//+4OkoAEMNVi+yD7BBWi/HdRg7cHej7AhDf4PbEBXsQ3UYO3B3g+wIQ3+D2xEF1CrmFAwAA6FfH + ///dRg6NRfhQUVHdHCT/FeCxAhDdXfCDxATdRfjcJej7AhDdXfjdRfDcDcj7AhDcBdj7AhDdHCT/Fcix + AhDdXfBZ3UX4WeghRAIA3UXwi/Bp9oBRAQDoEUQCAAPwagtai87oiMz//17Jw91BDlFR3Rwk6OecAQDD + VYvsg+xEU1aL8TPbOV4KxkW8VH0KuYUDAADowsb//2aDPgF0NTleKnQwi0YKmbmAUQEA9/kFjD0lAIlF + /NtF/IlV9N1d+N1F+N1dyNtF9N1d8N1F8OmWAAAAi0YKmVMFAJEQtr6AlpgAVoPSAlJQ6PxDAgCJReiJ + ReCNRehQjUXgUIlV7IlV5P8VvLACEIXAdRdXagFT/xVYsAIQaCTQAhCL+Oj5CAIAX1NW/3Xs/3Xo6HpF + AgBTaIBRAQBSUIlF6IlV7OiHRAIAiUXwiVX0323wiU34iV383V3w3UXw3AXQ+wIQ3V3I32343V3w3UXw + 3DXI+wIQjU283EXI3V3I6GnL//9eW8nDVYvsg+wUVleL+YtHLo1PAo119IlF/Oj45f//ZoM/AnQhg39O + AHQb/3X8i8ZQ/xWwsAIQhcB1V2oBUP8VWLACEOtAjUXsUI1F9FD/FZCxAhCFwIs1WLACEHUSagFqAP/W + aGD5AhCL+OgtCAIA/3X8jUXsUP8VsLACEIXAdRFqAVD/1ov4aAzQAhDoCwgCAF9eycNVi+xRUWaDOQJW + V4t5LnQSg3lOAHQMg8ECi/foYeX//+sug8ECjXX46FTl//9Xi8ZQ/xWQsQIQhcB1FWoBUP8VWLACEGhg + +QIQi/jotwcCAF9eycO4CJUCEOigRQIAgezYAAAAU1ZXM9uNcQKwAY19pIll8Ild/OiKigEAvwACAACN + tUz////GRfwB6OKqAQCJXYTGRYgBiV2UxkWYAVNoPwAPAGgo+QIQuAIAAICNdYTGRfwE6JIQAQBTU1NT + jUWAUFNTM8kz9o1FhOiADwEAi02AahBYjVWk6OGeAQBTU1ONhVD///9Q/7Vw////jUWE6P4OAQAz/zrD + D4RhAgAAR42VTP///41NpGaJfa1mx0WvAQDoaJ0BAFNqAf+1cP///41FhFDo1g8BAFCNdZTo7wgBAP+1 + cP///74AAgAAaCD5AhAzyY2dUP///41FlIm1UP///+iuDAEAjZVM////jU2kZol9rWbHRa8CAOgPnQEA + /7Vw////M8loHPkCEI1FlIm1UP///+h7DAEAjZVM////jU2kZol9rWbHRa8DAOjcnAEA/7Vw////M8lo + GPkCEI1FlIm1UP///+hIDAEAagRbjZVM////jU2kZol9rWaJXa/oqJwBAI2FfP///1CJXexoEPkCEDPJ + jV3sjUWU6BMMAQCLhXz///+NTaRmiX2tZsdFrwUA6HuGAQCNhSD///9QaAz5AhAzyY1FlMdF7CwAAADo + 3gsBAIuFIP///41NpGaJfa1mx0WvBgDoRoYBAIuFJP///2aJfa1mx0WvBwCNTaToLoYBAIuFKP///41N + pGaJfa1mx0WvCADoFoYBAA+3hS7///+NTaRmiX2tZsdFrwkA6P2FAQAPt4Uy////jU2kZol9rWbHRa8K + AOjkhQEAD7eFMP///41NpGaJfa1mx0WvCwDoy4UBAA+3hTT///+NTaRmiX2tZsdFrwwA6LKFAQAPt4U+ + ////jU2kZol9rWbHRa8NAOiZhQEAD7eFQv///41NpGaJfa1mx0WvDgDogIUBAA+3hUD///+NTaRmiX2t + ZsdFrw8A6GeFAQAPt4VE////jU2kZol9rWbHRa8QAOhOhQEAM8BQUFCNhVD///9Q/7Vw////jUWEibVQ + ////6DwMAQAz2+mX/f//D7dNrWoFWuhwx///OV2UdA44XZh0Cf91lP8VKLACEDldhHQOOF2IdAn/dYT/ + FSiwAhCNtUz////oD6cBAI11pOg/hgEAi030X15kiQ0AAAAAW8nDi40c////6HwDAgC4QFAAEMNVi+yD + 7DRWjUXMi/HoRMD//2aDPgB0EoN+BgB0DI1F8FD/FYixAhDrCo1F8FD/FYyxAhCNRcxQjU3w6BKMAQCN + Tczoxsb//17Jw1WL7IPsRIMNUFADEP9TVleNReBQi9ndQw6NRbxQ3V3IxkW8VOivjAEAjXXgjX3wpaWl + pTP2ZoM7AXQiOXMqdB2NRfBQ/xV8sQIQhcB1NVZW/xVYsAIQaFC6AhDrG41F8FD/FaixAhCFwHUYVlb/ + FViwAhBo6OMCEIv46HgDAgAzyesDM8lB6K/G//9fXlvJw1WL7IPsJN1BDlFRjUXc3Rwk6EGfAQCLyOgW + xv//ycNVi+yD7CSDwQKNRdzoT58BAN1F6Nwl+EQFEIvI3V3o6PDF///Jw1WL7IPsJIPBAo1F3OgpnwEA + 3QX4RAUQ3EXoi8jdXejoysX//8nDVYvsg+wkVovxi04KjUXcUMZF3FTo84oBAGaDPgF0BoN+KgB1DN1F + 6Nwl+EQFEN1d6I1N3OiPxf//XsnDVYvsg+wkVleL+YtHCo113MZF3FToRIoBAGaDPwF0BoN/KgB1DN1F + 6Nwl+EQFEN1d6I1N3OhTxf//X17Jw1WL7FFRiwdTajxZM9L38WoYZolWDDPS9/FZagdbZolWCjPS9/GN + iK3ZJABmiVYIjUEBmff7jUYGUI1GAlBWi8FmiVYE6MLc///bRwSLRwSFwH0G3AX4+wIQ3V343UX43A3w + +wIQ3AXY+wIQ6GY8AgBmiUYOW8nDVYvsUVFmi1YGZotOAmaLBugk3f//D7dOCC2t2SQAjQRAjQTBD7dO + CmvAPAPBD7dODGvAPAPBiQcPt0YOiUX8UVHbRfzdXfjdRfjcDQD8AhDdHCT/FbixAhBZWej/OwIAiUcE + ycNX/zaLPdCzAhD/1/92BIkG/9eJRgRfw1f/Nos9zLMCEP/X/3YEiQb/14lGBF/DVYvsUVHdRQiNRQhQ + UVHdHCT/FeCxAhDdXfjdRQjoqjsCAN1F+NwNCPwCEIPEBIkG3Rwk/xW4sQIQWVnojDsCAIlGBMnCCABV + i+xRUYtIBNtABIXJfQbcBfj7AhCLAN1d+IXA3UX43A3w+wIQiUX83DUQ/AIQ20X8fQbcBfj7AhDdXfjd + RfjewcnDVY1sJIiB7MgBAACDTXT/g01o/1OL2YtTBotLHlZXQujRwf//ZoXAdQq5tgAAAOj8vf//i0se + 6FzB//+LSx7oBsH//2aLM2aD/gOJRXB8B4tDUoXAdQWh8FADEDPSuegDAAD38YOlsP7//wCNfThqDFmJ + RVgzwKurq6szwGaD/gSNffiJVVzzq3wSOUN2dA2KQ3bA4AMMA4hF+OsExkX4E2oCX2Y792aJfTh8DIN7 + LgB0Bg+3Qy7rA2p7WFD/FcCzAhD/dXBmiUU6/xWoswIQg/j/iUU8dTH/dXD/FeSzAhAz9jvGdAyLQAyL + AIsAiUU86xhWVmgg2QIQaBDZAhDoXf8BAOmhAgAAM/ZWV1f/FbizAhCD+P+JRXR1HFZW/xXEswIQaPT4 + AhBo7PgCEOj3AgIA6XICAACLlbD+//8zyTvWdg45hI20/v//dAVBO8py8jvKdRKD+kBzDYmEjbT+//// + hbD+//9qEI1NOFFQ/xXUswIQg/j/dRRWVv8VxLMCEGj0+AIQaOT4AhDroI1FSFD/FYixAhCNfRCNdUjo + Qf3//4v36Lb9//8z9lZqMI1F+FD/dXT/FbCzAhCDz/87x3UXVlb/FcSzAhBovPgCEGi0+AIQ6VT///+N + RVhQVlaNhbD+//9QVv8VyLMCEIlFcI1FSFD/FYixAhA5fXBWdRZW/xXEswIQaIz4AhBohPgCEOkX//// + OXVwdRBWaGz4AhBohPgCEOnT/v//akSNRbRQ/3V0/xW8swIQO8d1F1ZW/xXEswIQaEj4AhBoQPgCEOnY + /v///3V0/xW0swIQO8d1F1ZW/xXEswIQaBz4AhBoEPgCEOm0/v//ikW0JMA8wIl9dHUdVlZo2PcCEGi8 + uQIQ6Mr9AQDHRWj+////6QcBAACAfbUBD4LlAAAAgH21Dw+H2wAAADl13HUdVlZocPcCEGi8uQIQ6JT9 + AQDHRWj8////6dEAAACNdRDoaPz//4111Ohg/P//jXXc6Fj8//+NfWyNdUjo6Pv//41FEOi6/P//3V1g + jUXU6K/8///dXTCNRdzopPz//91dKIvH6Jr8///dXWzdRShR3GVsUd1FMI11YNxlYN7B3DXQ/AIQ3V1g + 3UVg3EVs3V1g3UVg3Rwk6CD8//+NdUiNfWDoC/v//4vGUP8VfLECEIXAdRZQUP8VWLACEGhQugIQi/jo + bf0BAOsli0se6Dq+//8zyUHrMlZWaKD3AhBovLkCEOi+/AEAx0Vo/f///4tLHugVvv//g310/3QJ/3V0 + /xW0swIQi01oagta6Pq///9fXluDxXjJw4sGhcB0DYB+BAB0B1D/FTxDBRCLRCQEiQbGRgQBi8bCBACL + BoXAdA2AfgQAdAdQ/xU8QwUQi0QkBIkGxkYEAIvGwgQAiwiFyXQNgHgEAHQHUf8VPEMFEMOLAIXAdAdQ + /xU8QwUQw7gRkwIQ6KM6AgCD7BBTVjP2iXX8oTxDBRCDDVBQAxD/O8ZXiWXwdRHHRezyAgAAaDj9AhCN + RezrLP9xCv/QO8Z1KVZW/xVYsAIQaDC4AhCL+Ohg/AEAx0XoTmG8AGg4/QIQjUXoUOiEOQIAM8lB6Ia/ + //+LTfRfXmSJDQAAAABbycOLTeToYfsBALheWAAQw1doWNYCEP8VYLACEIv4hf8PhIEAAABWizXQsAIQ + aCT3AhBX/9ZoMLgCEFejOEMFEP/WaBD3AhBXozxDBRD/1mj49gIQV6NAQwUQ/9Zo6PYCEFejREMFEP/W + aNj2AhBXo0hDBRD/1mjEtwIQV6NMQwUQ/9ZoTPcCEFejUEMFEP/WaMD2AhBXo1RDBRD/1l6jWEMFELAB + X8NqAGoB/xVYsAIQaPzRAhCL+Oh5+wEAMsBfw1WL7P91CP8w/xVUQwUQhcB1KVBQ/xVYsAIQaEz3AhCL + +OhP+wEAaDj9AhCNRQhQx0UITmG8AOhzOAIAXcIEAFWL7I1ICFH/dQj/MP8VUEMFEIXAdSlQUP8VWLAC + EGjEtwIQi/joDPsBAGg4/QIQjUUIUMdFCE5hvADoMDgCADPAQF3CBABVi+xRV41+CFeLxuhr////i0YM + g/gEdQgzwEDpxgAAAIP4AnRD/3UM/3UI/zb/FUhDBRCFwHUpUFD/FViwAhBoILgCEIv46KX6AQBoOP0C + EI1FDFDHRQxOYbwA6Mk3AgBXi8boE////4s9gLECEFOLXhzGRQ8A/9eJRfyLRRCFwHRjg/j+dQWLRiDr + CmnA6AMAAMZFDwGJRQjrO41GCFCLxujV/v//OV4cdhaAfQ8AdRr/14teHIlF/ItGIIlFCOsK/9crRfw7 + RQh3EWhNAQAA/xWEsQIQg34MBHW/M8CDfgwED5TAW1/JwgwAVYvsiwaFwHQNgH4EAHQHUP8VPEMFEP91 + EP91DP91CP8VTEMFEIXAiQZ1KVBQ/xVYsAIQaEy4AhCL+OjG+QEAaDj9AhCNRRBQx0UQTmG8AOjqNgIA + xkYEAV3CDABW/3QkEIvw/3QkEP90JBDokP///4vGXsIMAFWL7P91FP91EP91DP8VOEMFEIXAi00IiQF1 + KVBQ/xVYsAIQaGD3AhCL+Ohg+QEAaDj9AhCNRRRQx0UUTmG8AOiENgIAXcIQAFWL7P91FP91EP91DP91 + COik////i0UIXcIQALhRlQIQ6Bk3AgCB7DABAACDZfwAgw1QUAMQ/4M9OEMFEABTVleJZfCL2XUUx0Xo + 8gIAAGg4/QIQjUXo6ccAAABqAWoHjXMCjb14////6FSRAQBqAliLy4219P7//8ZF/AHouJ0BAGoDWIvL + jbXE/v//xkX8AuiknQEAagRYi8uNtST////GRfwD6JCdAQAz/4l97Im9VP///8aFWP///wHGRfwGikMm + PEl0RzxOdEM8Q3UuV/+1SP///41F7P+16P7//1Do1P7//2oU/7UY////jbVU/////3Xs6Ej+///rScdF + 5IUDAABoOP0CEI1F5OsVZoM7An4Vx0XghQMAAGg4/QIQjUXgUOhYNQIAPE51C91DMuhmMgIAiUMu/3Mu + jbVU////6Aj7//+NRcRQjYVU////6H78//+LRdiNjXj///9mx0WBAQDoYHgBAItFzI2NeP///2bHRYEC + AOhMeAEAi0XIjY14////ZsdFgQMA6Dh4AQCLRdSNjXj///9mx0WBBADoJHgBAItFxI2NeP///2bHRYEF + AOgQeAEAi0XcjY14////ZsdFgQYA6Px3AQCLRdCNjXj///9mx0WBBwDo6HcBAGoLM8laQegyuv//jYVU + ////xkX8Beh1+v//xkX8BDl97HQJ/3Xs/xU8QwUQjbUk////6NaZAQCNtcT+///oy5kBAI219P7//+jA + mQEAjbV4////6O14AQCLTfRfXmSJDQAAAABbycOLTcDoLfYBALiSXQAQw7iJlQIQ6N80AgCB7MgAAABT + M9tWiV38gw1QUAMQ/zkdOEMFEFeJZfCL+XUUx0Xo8gIAAGg4/QIQjUXo6YkAAAAzwECLz421LP///+iU + mwEAagNYi8+NtVz////GRfwB6ICbAQBqBFiLz411jMZF/ALob5sBAIld7IldvMZFwAHGRfwFikcCPEl0 + RTxOdEU8Q3UoU/91sI1F7P91gFDowfz//2gAAQAA/7VQ////jXW8/3Xs6DX8///rL8dF5IUDAABoOP0C + EI1F5FDoXDMCADxOdQvdRw7oajACAIlHCv93Co11vOgP+f///3cujUW86Mj6//9qC1qLyOjKuP//jUW8 + xkX8BOgQ+f//xkX8Azld7HQJ/3Xs/xU8QwUQjXWM6HSYAQCNtVz////oaZgBAI21LP///+hemAEAi030 + X15kiQ0AAAAAW8nDi03g6Nb0AQC46V4AEMO4wZUCEOiIMwIAgezIAAAAUzPbVold/IMNUFADEP85HThD + BRBXiWXwi/l1FWg4/QIQjUXkUMdF5PICAADokzICAGaDPwJ8CotHLjvDiUXodQfHRej/AQ8AM8BAi8+N + tSz////oJZoBAGoDWIvPjbVc////xkX8AegRmgEAagRYi8+NdYzGRfwC6ACaAQCJXeyJXbzGRcABU8ZF + /AX/dbCNRez/dYBQ6GH7////deiNdbz/tVD/////dezo1/r//4tNvGoLWohdwOikt///i8bGRfwE6Ov3 + ///GRfwDOV3sdAn/dez/FTxDBRCNdYzoT5cBAI21XP///+hElwEAjbUs////6DmXAQCLTfRfXmSJDQAA + AABbycOLTeDosfMBALgOYAAQw7jblQIQ6GMyAgCD7DhTVjPbV4ldvMZFwAGJXfyJXeCNRehQjUXwUFNT + xkX8AYtFCGoB/zD/FVhDBRD/FViwAhA96gAAAHQEU1PrNot98I114Ohe9gAAi0XgjU3oUY1N8FH/dfCJ + RexQi0UIagH/MP8VWEMFEIXAdSlTU/8VWLACEGg09wIQi/jo6fMBAGg4/QIQjUUIUMdFCE5hvADoDTEC + ADP/OV3odiqLRexqLP8wjXW8/3UM6Lb5////dQyLzmr/agHofAEAAINF7CRHO33octY5XeBfXlt0Cf91 + 4Og2vv//WYNN/P+NRbzorvb//4tN9GSJDQAAAADJwggAVYvsUVFXi/j/FYCxAhCD//6JRfh1CItGIIlF + /OsJaf/oAwAAiX38g338AHUEM8DrOzleDHQujX4IV4vG6ML3//85Xgx0Hv8VgLECECtF+DtF/HcQaE0B + AAD/FYSxAhA5Xgx11TPAOV4MD5TAX8nDVYvsU1ZXi/CNfghX6IP3//+LRgxqBFs7w3UFM8BA60WD+AV0 + OFdqA/82/xVQQwUQhcB1KVBQ/xVYsAIQaMS3AhCL+OjB8gEAaDj9AhCNRQhQx0UITmG8AOjlLwIAi0UI + 6Cz///9fXltdwgQAVYvsU1ZXi/CNfghX6Bf3//+LRgxqB1s7w3UFM8BA60WD+AZ0OFdqAv82/xVQQwUQ + hcB1KVBQ/xVYsAIQaMS3AhCL+OhV8gEAaDj9AhCNRQhQx0UITmG8AOh5LwIAi0UI6MD+//9fXltdwgQA + VYvsU1aL8VeNfghXi8boqfb//4tGDDPbQzvDdQSLw+tTg/gDdEaAfQgAdAn/dRBW6Ib9//9XU/82/xVQ + QwUQhcB1KVBQ/xVYsAIQaMS3AhCL+Oja8QEAaDj9AhCNRQhQx0UITmG8AOj+LgIAi0UM6EX+//9fXltd + wgwAuP+hAhDooy8CAIHsFAEAAINl/ACDDVBQAxD/gz04QwUQAFNWV4ll8IvZdRrHhXT////yAgAAaDj9 + AhCNhXT////plgQAAGoKagGNcwKNfYjo24kBAGoCWIvLjbUQ////xkX8Aeg/lgEAagNYi8uNteD+///G + RfwC6CuWAQC/BgEAAI21QP///8ZF/APokJQBADPJiU3giU3YxkX8BmaLA2Y9BADHRdQDAAAAx0XQMAAA + AMdF6AAgAACJTYR8CotTdjvRdAOJVdRmPQUAfA2Lm5oAAAA72XQDiV3QagT/tQT///+NReD/tTT///9Q + 6DX3//+LfeiNddjo9/IAADPbOR1EQwUQD4SnAQAAU41FhFCNReRQjUXoUP916P912P911P910FP/deD/ + FURDBRA7w3UL/xVYsAIQiUXs6wOJXeyLfew7+3Qogf/qAAAAdCBTU2io9gIQ6FvwAQDHRYBOYbwAaDj9 + AhCNRYDpbQMAAIt92ItF5P9N5IXAD4T7AAAAagGNRYjo9JcBAIvwZol1kWbHRZMBAP83jZ1A////6HGQ + AQCL0I1NiOiDhgEAZol1kWbHRZMCAP93BOhVkAEAi9CNTYjoZ4YBAGaJdZFmx0WTAwCLRwiNTYjoWXAB + AGaJdZFmx0WTBACLRwyNTYjoRHABAGaJdZFmx0WTBQCLRxSNTYjoL3ABAGaJdZFmx0WTBgCLRxiNTYjo + GnABAGaJdZFmx0WTBwCLRxyNTYjoBXABAGaJdZFmx0WTCACLRxCNTYjo8G8BAGaJdZFmx0WTCQCLRyiN + TYjo228BAGaJdZFmx0WTCgCLRySNTYjoxm8BAIPHLDPb6ff+//+BfezqAAAAD4XbAQAAi33ogf8AIAAA + D4J0/v//uACAAAA7+HcFi/iJfeiNddjoR/EAAOlZ/v//OR1AQwUQD4QJAgAAi33YjUWEUI1F5FCNRehQ + /3XoV/911P910P914P8VQEMFEDvDdQv/FViwAhCJRezrA4ld7Dld7HQygX3s6gAAAHQpi33sU1NolPYC + EOin7gEAx4V8////TmG8AGg4/QIQjYV8////6bMBAACLReT/TeSFwA+E+QAAAGoBjUWI6D2WAQCL8GaJ + dZFmx0WTAQD/N42dQP///+i6jgEAi9CNTYjozIQBAGaJdZFmx0WTAgD/dwTono4BAIvQjU2I6LCEAQBm + iXWRZsdFkwMAi0cIjU2I6KJuAQBmiXWRZsdFkwQAi0cMjU2I6I1uAQBmiXWRZsdFkwUAi0cUjU2I6Hhu + AQBmiXWRZsdFkwYAi0cYjU2I6GNuAQBmiXWRZsdFkwcAi0ccjU2I6E5uAQBmiXWRZsdFkwgAi0cQjU2I + 6DluAQAzwI1NiGaJdZFmx0WTCQDoJW4BADPAjU2IZol1kWbHRZMKAOgRbgEAg8ckM9vp+f7//4F97OoA + AAB1Kot96IH/ACAAAA+Cdv7//7gAgAAAO/h3BYv4iX3ojXXY6JbvAADpW/7//w+3TZFqBVroHbD//zld + 2HQJ/3XY6N23//9ZxkX8BDld4HQJ/3Xg/xU8QwUQjbVA////6MKPAQCNteD+///ot48BAI21EP///+is + jwEAjXWI6NxuAQCLTfRfXmSJDQAAAABbycPHhXj////yAgAAaDj9AhCNhXj///9Q6A0qAgCLjXD////o + /usBALijZwAQw7g3ogIQ6LAqAgCB7MwAAABTM9tWiV38gw1QUAMQ/zkdOEMFEFeJZfCL+XUUx0Xo8gIA + AGg4/QIQjUXo6b0AAABmgz8CfCeKRyY8SXQcPE50GDwwdBjHReSFAwAAaDj9AhCNReTplAAAADwwdQfH + Ry7+////M8BAi8+NtSj////oMZEBAGoDWIvPjbVY////xkX8AegdkQEAagRYi8+NdYjGRfwC6AyRAQCJ + XeyJXbjGRbwBxkX8BYpHAjxJdEU8TnRFPEN1KFP/dayNRez/tXz///9Q6Fvy//9qRP+1TP///411uP91 + 7OjS8f//6y/HReCFAwAAaDj9AhCNReBQ6PkoAgA8TnUL3UcO6AcmAgCJRwr/dwqNdbjorO7///93Lo1F + uOiS+P//agtai8joZ67//41FuMZF/ATore7//8ZF/AM5Xex0Cf917P8VPEMFEI11iOgRjgEAjbVY//// + 6AaOAQCNtSj////o+40BAItN9F9eZIkNAAAAAFvJw4tN3Ohz6gEAuExpABDDuG+iAhDoJSkCAIHszAAA + AFMz21aJXfyDDVBQAxD/OR04QwUQV4ll8Iv5dRTHRejyAgAAaDj9AhCNRejpvQAAAGaDPwJ8J4pHJjxJ + dBw8TnQYPDB0GMdF5IUDAABoOP0CEI1F5OmUAAAAPDB1B8dHLv7///8zwECLz421KP///+imjwEAagNY + i8+NtVj////GRfwB6JKPAQBqBFiLz411iMZF/ALogY8BAIld7IlduMZFvAHGRfwFikcCPEl0RTxOdEU8 + Q3UoU/91rI1F7P+1fP///1Do0PD//2pE/7VM////jXW4/3Xs6Efw///rL8dF4IUDAABoOP0CEI1F4FDo + bicCADxOdQvdRw7ofCQCAIlHCv93Co11uOgh7f///3cujUW46HP3//9qC1qLyOjcrP//jUW4xkX8BOgi + 7f//xkX8Azld7HQJ/3Xs/xU8QwUQjXWI6IaMAQCNtVj////oe4wBAI21KP///+hwjAEAi030X15kiQ0A + AAAAW8nDi03c6OjoAQC412oAEMO4p6ICEOiaJwIAgezQAAAAUzPbVold/IMNUFADEP85HThDBRBXiWXw + i/l1FMdF4PICAABoOP0CEI1F4OnrAAAAZosPZoP5AnwnikcmPEl0HDxOdBg8MHQYx0XchQMAAGg4/QIQ + jUXc6b8AAAA8MHUHx0cu/v///2aD+QN8CTlfTsZF6AF1A4hd6DPAQIvPjbUk////6AaOAQBqBFiLz411 + hMZF/AHo9Y0BAGoFWIvPjbVU////xkX8AujhjQEAiV3siV20xkW4AcZF/AWAfwJDdAU4Xeh0E1P/tXj/ + //+NRez/dahQ6DTv//+KRwI8SXRAPE50QDxDdSMzwDhd6I11tA+VwI0ExSQAAABQ/7VI/////3Xs6I7u + ///rL8dF5IUDAABoOP0CEI1F5FDotSUCADxOdQvdRw7owyICAIlHCv93Co11tOho6////3XsjU20/3cu + /3Xo6CD2//9qC1qLyOgdq///jUW0xkX8BOhj6///xkX8Azld7HQJ/3Xs/xU8QwUQjbVU////6MSKAQCN + dYTovIoBAI21JP///+ixigEAi030X15kiQ0AAAAAW8nDi03Y6CnnAQC4lmwAEMO49aICEOjbJQIAgewo + AQAAg2X8AIMNUFADEP+DPThDBRAAU1ZXiWXwi/l1FMdFzPICAABoOP0CEI1FzOkTAQAAZosPZoP5Anwf + ikcmPFJ0GDwwdBTHReCFAwAAaDj9AhCNReDp6wAAAGaD+QN8I4pHSjxJdBw8TnQYPDB0FMdF6IUDAABo + OP0CEI1F6OnCAAAAM8BAi8+NtUT////oP4wBAI1fJovDjbXM/v//xkX8AehtfwEAagRYi8+NtXT////G + RfwC6BeMAQBqBViLz421FP///8ZF/APoA4wBADPJiU3QiU3UiU3YiU3siU2kxkWoAcZF/AeKRwI8SXRB + PE50PTxDdShR/7U4////jUXs/3WYUOhH7f//ahT/tWj///+NdaT/dezovuz//+tGx0XkhQMAAGg4/QIQ + jUXk6xVmgz8EfBXHRdyFAwAAaDj9AhCNRdxQ6M4jAgA8TnUL3UcO6NwgAgCJRwr/dwqNdaTogen//zPA + ZoM/AnwVgDtSdRCNhcz+//9QjUXQUOh8jQEAZoM/A3wGgH9KMHUHx0cu/v////93Uo11pP911FDoTOv/ + /2oLWovI6Aip//+LxsZF/AboT+n//8ZF/AWDfewAdAn/dez/FTxDBRCNddDoQ2QBAI21FP///+iniAEA + jbV0////6JyIAQCNtcz+///oyWcBAI21RP///+iGiAEAi030X15kiQ0AAAAAW8nDi03I6P7kAQC4wW4A + EMOhJEMFEIXAdAdQ/xXAsAIQw2h09gIQ/xXUsAIQhcCjJEMFEHRLVos10LACEGhY9gIQUP/WaET2AhD/ + NSRDBRCjKEMFEP/WaCz2AhD/NSRDBRCjLEMFEP/WaBj2AhD/NSRDBRCjMEMFEP/WozRDBRBesAHDoVBQ + AxCD+Bh0UkCjUFADEGnAkBAAAMeA4IADEAEAAABogAAAAP90JAiJsOSAAxCNgOiAAxBQ/xUMsgIQoVBQ + AxBpwJAQAACDxAxoABAAAAVogQMQUFb/FTRDBRDCBAC4tJcCEOjeIgIAgezMAAAAUzPbVold/IMNUFAD + EP85HSxDBRBXiWXwD4TPAQAAOR0wQwUQD4TDAQAAjXECsAGNfYzoqWcBAL8AAQAAjbVY////xkX8AegB + iAEAvwBYAADGRfwCjXXciX3s6AbnAACNRehQxkX8A4t13I1F7FBWxwbAAgAA/xUsQwUQi/g7+w+FTwEA + AItN6GoFWI1VjOgGfAEAM/9HO33oD4f4AAAAjUYIUI2dWP///2aJfZVmx0WXAQDoh4QBAIvQjU2M6Jl6 + AQCNhhoBAABQZol9lWbHRZcCAOhnhAEAi9CNTYzoeXoBAI2GCQEAAFBmiX2VZsdFlwMA6EeEAQCL0I1N + jOhZegEAjUXsUI2FKP///1BoIYAAAMeFKP///xgAAADHRewwAAAA/3YE/xUwQwUQhcB0IGgA9gIQi/Do + Vf7//8dF1E5hvABoOP0CEI1F1OmsAAAAjYUw////UI2dWP///2aJfZVmx0WXBADo04MBAIvQjU2M6OV5 + AQBmiX2VZsdFlwUAi0YEjU2M6NdjAQCBxsACAABH6f/+//8Pt02VagVa6BSm//+DfdwAdAn/ddzo063/ + /1mNtVj////oyoUBAI11jOj6ZAEAi030X15kiQ0AAAAAW8nDaOz1AhCL9+ix/f//iX3YaKD9AhCNRdjr + D8dF5PICAABoOP0CEI1F5FDoGCACAItNiOgM4gEAuIVxABDDw90FuPsCEN1CDNrp3+D2xER6BWaDIQDD + ZscBBwDdQgzcJRj8AhDdWQjDVYvsUVMz20M5XxxWi3cUcipmgz5CdRuNRgiLCFBoYLQCEFH/FTC0AhCF + wHwSZscGCQCDxhBDO18cdtZeW8nDiUX8aGz9AhCNRfxQ6JAfAgDMVYvsUVaL8IX2V4v5iXccdjnB4ARQ + 6M2s//+FwFmJRxR1FWg4/QIQjUX8UMdF/LYAAADoWB8CAIX2i/h2DVf/FdCyAhCDxxBOdfNfXsnDiQiL + TCQEiUgki0wkCMZAOACJSDTCCABWi/BXi34Uhf90M1Mz2zleHHYhZoM/QnULi0cIiwhQ/1EI6wdX/xWs + sgIQg8cQQzteHHLf/3YU6ECs//9ZW4tGJIXAdAdQ6DGs//9Zi0YohcB0B1DoI6z//1mDfiwAdAmLdiyL + Blb/UAhfXsMzyYlIHIlIIIlIGIlIFIlIJIlIKIlILMO4G5MCEOhaHwIAg+xQi0UIi0AIiwhTVleJZfCN + VQhSaGC0AhBQ/xEz9jvGfR9WVmjs7gIQi/joMuEBAMdF7E5hvABoOP0CEI1F7OtK/3UIjUWkaAjvAhBQ + 6IjG//+LTQyDxAyNVaSJdfzo8HQBAItN9F9eZIkNAAAAAFvJwggAi0UIiwhQ/1EIi0XkiUXoaDj9AhCN + RehQ6AoeAgDMVYvsg+xA/3AIjUXAaAjvAhBQ6DHG//+LTQiDxAyNVcDonHQBAMnCBAC4LZMCEOiUHgIA + gezAAAAAU1aLdQhXiWXwaggz21kzwI19vIld7Ild6POrjUWIiV38iz3QsgIQUP/XjYV4////UP/Xi/6J + XdzGRfwB6K/9//+NRehQv2C0AhBX/3Ys/xUwtAIQO8N9EIldpGg4/QIQjUWk6T0BAACNRexQV/92MI1G + BFNQiV4s/xUYtAIQi/g7+30xizWosgIQaGjyAhD/1mhE8gIQiUXA/9aJRcSJfdjHRZxOYbwAaDj9AhCN + RZzp8AAAAItF7IsIjVXkUv92NI1WJGoBUr9QtAIQV1D/URQ7w4lF4H00izWosgIQaBTyAhD/1mhE8gIQ + iUXA/9aJRcSLReCJRdjHRahOYbwAaDj9AhCNRajpmQAAAItF7IsIjVXcUo1VvFKNVYhSjVYUUmoB/3Y0 + V/915FD/URg7w30Rx0WgTmG8AGg4/QIQjUWg62KLReyLCFD/UQg5XiiJXewPhIMAAACLReiLEI1N5FH/ + djSNTihqAVFXUP9SFDvDiUXgfTWLNaiyAhBoFPICEP/WaETyAhCJRcD/1olFxItF4IlF2MdFmE5hvABo + OP0CEI1FmFDoJRwCAFNTiV24iV2wjZ14////UzPJQY1drFNR/3Y0jUWIV/915IlFrItF6IlNtIsQUP9S + GIs1rLICEI2FeP///1D/1o1FiFD/1o1FvOjdmv//i030X15kiQ0AAAAAW8nCBACLRewz2zvDdAaLCFD/ + UQiBvXT///9OYbwAD4XBAAAAi3UIi0XojVXkUv92NI1V4GoBUr9QtAIQV8dF4ATyAhCLCFD/URQ7ww+M + kwAAADld1I2FNP///8dFtAQAAACJXbiJXbCJRax0B41FvFD/VdRmOV28i0XciYU8////D7dFvGbHhTT/ + //8WAGbHhUT///8WAHUDi0XYU1ONlXj///9SjVWsUmoB/3Y0iYVM////i0XEiYVc////i0XAV/915ImF + bP///4tF6GbHhVT///8IAGbHhWT///8IAIsIUP9RGIs1rLICEI1FiFD/1o2FeP///1D/1rj6dQAQw1WL + 7IlIKIPALFD/dQhoYLQCEP8VDLQCEIXAfSVqAGoAaIzyAhCL+Ohn3QEAaDj9AhCNRQhQx0UITmG8AOiL + GgIAXcIEAFWL7IlIJItNDIlIMItNEMZAOAGJSDSDwARQ/3UI/xUQtAIQhcB9JWoAagBooLkCEIv46Bfd + AQBoOP0CEI1FDFDHRQxOYbwA6DsaAgBdwgwAagD/cQr/FdiyAhCFwH0aV2oAagBoCLkCEIv46N7cAQBq + C1qDyf9f6wZqCzPJWkHpoJ///1WL7IPsMFb/cAiNddDoeX8BAItFCOhmaQEA6FF/AQBeycIEAFEPtxBW + agteO9YPj7YAAAAPhJsAAACD+goPhwkBAAD/JJV9eQAQxgEw6VEBAADGAUlmx0ECBgAPv0AI6fsAAADG + AU5mx0ECFADHQQQHAAAA2UAI6SQBAADGAU5mx0ECFADHQQQQAAAA3UAI6QwBAADGAVlmx0ECFQCLUAiJ + URSLQAyJQRjp9QAAAMYBVN1ACNwFGPwCEOnhAAAAUeg7////6dkAAABR6Cr7///pzgAAADPSxgFMZoN4 + CP8PlMKJUQTpuQAAAIP6En9LdDqD6g10LEoPhKYAAABKSnQSSnVIxgFJZsdBAgMAD7ZACOtMxgFJZsdB + AgQAD75ACOs9UVDoNPr//+t4xgFJZsdBAgUAD7dACOslg+oTdD+D6gN0EUp0HYPqDXQJg2EEAMYBTOtO + xgFJZolxAotACIlBCOs/g2EEAMYBTmbHQQIKAItACIlEJATbRCQE6xiDYQQAxgFOZsdBAgoAi0AIiUQk + BNtEJASFwH0G3AX4+wIQ3VkMXlnDIXgAECF4ABApeAAQLHkAEDt4ABBTeAAQa3gAEIV4ABCWeAAQoXgA + ECx5ABC4zZgCEOjlGAIAgezQAAAAU1ZXM9sywIvxjb0k////iWXwiV3kiV386MpdAQDGRZRDiV2YiV28 + iV2wiV24iF3AjX3gjYUk////xkX8AuiTcQEAi33gi/CLx8HgA1CJddzoJKX//1mLyIlN5DPAO8dzDYtV + DIlUwQSJNMFA6+9RV2oM/xXUsgIQO8OLTQiJQQh1FMdFzLYAAABoOP0CEI1FzOl5AQAAZscBDCCNTehR + UP8VvLICEDvDfSJTU2hc7wIQi/joMNoBAMdFyE5hvABoOP0CEI1FyOlDAQAAi3XoM9tDO13gdxgz/0c7 + fdx3DVb/FdCyAhCDxhBH6+5D6+Mz20M7XeAPh5kAAAAz/0c7fdwPh4cAAACNlXD///+NjST///9mib0t + ////ZomdL////+hQWwEAgL1w////Q3UsagCNhXD///+NdZToi2YBAIvG6JZ6AQCLTeiJQQiLRehmxwAb + AINF6BBH66OLRQj/cAj/FaSyAhBqAGoAaBjvAhBo7LgCEOjf2AEAx0XYTmG8AGg4/QIQjUXY6YEAAABD + 6V7///+LRQj/cAj/FaSyAhCFwH0hagBqAGhE7wIQi/joNNkBAMdF0E5hvABoOP0CEI1F0OtK/3Xk6Kaj + //9ZjXWU6Lh7AQCNtST////o5VoBAItN9F9eZIkNAAAAAFvJwggAg33kAHQJ/3Xk6HOj//9Zi0XEiUXU + aDj9AhCNRdRQ6AwWAgDMuOqYAhDovxYCAIHs0AAAAFNWVzPbMsCL8Y29JP///4ll8Ild6Ild/OikWwEA + xkWUQ4ldmIldvIldsIlduIhdwI195I2FJP///8ZF/ALobW8BAIvwi0XkweADUIl1yOgAo///WYvIiU3o + M8A7ReRzDYtVDIlUwQSJNMFA6+5R/3Xkagj/FdSyAhA7w4t9CIlHCHUUx0XMtgAAAGg4/QIQjUXM6VEB + AACNTeBRUGbHBwgg/xW8sgIQO8N9IlNTaFzvAhCL+OgJ2AEAx0XUTmG8AGg4/QIQjUXU6RsBAADHRQwB + AAAAi0UMO0XkD4eSAAAAx0UIAQAAAItFCDtFyHd7ZomFLf///2aLRQyNlXD///+NjST///9miYUv//// + 6D5ZAQCAvXD///9DdSRTjYVw////jXWU6HpkAQCLxujneAEAi03giQGDReAE/0UI66j/dwj/FaSyAhBT + U2gY7wIQaOy4AhDo2tYBAMdF3E5hvABoOP0CEI1F3Ot+/0UM6WL/////dwj/FaSyAhA7w30fU1NoRO8C + EIv46DXXAQDHRdBOYbwAaDj9AhCNRdDrSv916Oinof//WY11lOi5eQEAjbUk////6OZYAQCLTfRfXmSJ + DQAAAABbycIIAIN96AB0Cf916Oh0of//WYtFxIlF2Gg4/QIQjUXYUOgNFAIAzLj/mAIQ6MAUAgCB7JwA + AACDZewAg2X8AFNWVzLAi/KNvVj///+JZfCL2eijWQEAjX3ojYVY////xkX8Aeh/bQEAi/CLRejB4ANQ + iXXg6BKh//9Zi8iJTewzwDtF6HMNi1UIiVTBBIk0wUDr7lH/dehqB/8V1LICEIXAiUMIdRTHRdS2AAAA + aDj9AhCNRdTpPQEAAI1N5FFQZscDByD/FbyyAhCFwH0kagBqAGhc7wIQi/joHNYBAMdF0E5hvABoOP0C + EI1F0OkFAQAAM/9HO33oD4eJAAAAM/ZGO3Xgd3uNVaSNjVj///9mibVh////Zom9Y////+hmVwEAgH2k + VHREgH2kRHQ+gH2kQ3UIi03A6M2V////cwj/FaSyAhBqAGoAaBjvAhBo7LgCEOgT1QEAx0XMTmG8AGg4 + /QIQjUXM6YsAAADdRbCLReTcJRj8AhDdGINF5AhG64BH6W7/////cwj/FaSyAhCFwH0hagBqAGhE7wIQ + i/joVtUBAMdF3E5hvABoOP0CEI1F3OtC/3Xs6Mif//9ZjbVY////6A9XAQCLTfRfXmSJDQAAAABbycIE + AIN97AB0Cf917Oidn///WYtFyIlF2Gg4/QIQjUXYUOg2EgIAzLgUmQIQ6OkSAgCB7JwAAACDZeQAg2X8 + AFNWVzLAi/KNvVj///+JZfCL2ejMVwEAjX3ojYVY////xkX8AeioawEAi/CLRejB4ANQiXXg6Duf//9Z + i8iJTeQzwDtF6HMNi1UIiVTBBIk0wUDr7lH/dehqBf8V1LICEIXAiUMIdRTHRdS2AAAAaDj9AhCNRdTp + OQEAAI1N7FFQZscDBSD/FbyyAhCFwH0kagBqAGhc7wIQi/joRdQBAMdF0E5hvABoOP0CEI1F0OkBAQAA + M/9HO33oD4eFAAAAM/ZGO3Xgd3eNVaSNjVj///9mibVh////Zom9Y////+iPVQEAgH2kTnUF3UWw6wmA + faRJdQ/bRayLRezdGINF7AhG67+AfaRDdQiLTcDo4pP///9zCP8VpLICEGoAagBoGO8CEGjsuAIQ6CjT + AQDHRcxOYbwAaDj9AhCNRczrdkfpcv////9zCP8VpLICEIXAfSFqAGoAaETvAhCL+OiD0wEAx0XcTmG8 + AGg4/QIQjUXc60L/deTo9Z3//1mNtVj////oPFUBAItN9F9eZIkNAAAAAFvJwgQAg33kAHQJ/3Xk6Mqd + //9Zi0XIiUXYaDj9AhCNRdhQ6GMQAgDMuCmZAhDoFhECAIHsnAAAAINl5ACDZfwAU1ZXMsCL8o29WP// + /4ll8IvZ6PlVAQCNfeiNhVj////GRfwB6NVpAQCL8ItF6MHgA1CJdeDoaJ3//1mLyIlN5DPAO0Xocw2L + VQiJVMEEiTTBQOvuUf916GoE/xXUsgIQhcCJQwh1FMdF1LYAAABoOP0CEI1F1Ok5AQAAjU3sUVBmxwME + IP8VvLICEIXAfSRqAGoAaFzvAhCL+Ohy0gEAx0XQTmG8AGg4/QIQjUXQ6QEBAAAz/0c7fegPh4UAAAAz + 9kY7deB3d41VpI2NWP///2aJtWH///9mib1j////6LxTAQCAfaROdQXdRbDrCYB9pEl1D9tFrItF7NkY + g0XsBEbrv4B9pEN1CItNwOgPkv///3MI/xWksgIQagBqAGgY7wIQaOy4AhDoVdEBAMdFzE5hvABoOP0C + EI1FzOt2R+ly/////3MI/xWksgIQhcB9IWoAagBoRO8CEIv46LDRAQDHRdxOYbwAaDj9AhCNRdzrQv91 + 5OginP//WY21WP///+hpUwEAi030X15kiQ0AAAAAW8nCBACDfeQAdAn/deTo95v//1mLRciJRdhoOP0C + EI1F2FDokA4CAMy4PpkCEOhDDwIAgeygAAAAg2XoAINl/ABTVlcywIvyjb1U////iWXwi9noJlQBAI19 + 4I2FVP///8ZF/AHoAmgBAIt14Iv4i8bB4ANQiX3c6JOb//9Zi8iJTegzwDvGcw2LVQyJVMEEiTzBQOvv + UVZT/xXUsgIQhcCLdQiJRgh1FMdF0LYAAABoOP0CEI1F0OlKAQAAjU3kUWaBywAgUGaJHv8VvLICEIXA + fSRqAGoAaFzvAhCL+Oib0AEAx0XMTmG8AGg4/QIQjUXM6Q8BAAAz/0c7feAPh5MAAAAz20M7XdwPh4EA + AACNVaCNjVT///9miZ1d////Zom9X////+jhUQEAgH2gTnUP3UWs6JgKAgCLTeSJAesOgH2gSXUPi0Xk + i02oiQiDReQEQ+uxgH2gQ3UIi0286CqQ////dgj/FaSyAhBqAGoAaBjvAhBo7LgCEOhwzwEAx0XITmG8 + AGg4/QIQjUXI63ZH6WT/////dgj/FaSyAhCFwH0hagBqAGhE7wIQi/joy88BAMdF2E5hvABoOP0CEI1F + 2OtC/3Xo6D2a//9ZjbVU////6IRRAQCLTfRfXmSJDQAAAABbycIIAIN96AB0Cf916OgSmv//WYtFxIlF + 1Gg4/QIQjUXUUOirDAIAzLhTmQIQ6F4NAgCB7JwAAACDZewAg2X8AFNWVzLAi/KNvVj///+JZfCL2ehB + UgEAjX3ojYVY////xkX8AegdZgEAi/CLRejB4ANQiXXg6LCZ//9Zi8iJTewzwDtF6HMNi1UIiVTBBIk0 + wUDr7lH/dehqC/8V1LICEIXAiUMIdRTHRdS2AAAAaDj9AhCNRdTpLwEAAI1N5FFQZscDCyD/FbyyAhCF + wH0kagBqAGhc7wIQi/jous4BAMdF0E5hvABoOP0CEI1F0On3AAAAM/9HO33od38z9kY7deB3cY1VpI2N + WP///2aJtWH///9mib1j////6AhQAQCAfaRMdRSLTeQzwDtFqBvAZokBg0XkAkbrxYB9pEN1CItNwOhh + jv///3MI/xWksgIQagBqAGgY7wIQaOy4AhDop80BAMdFzE5hvABoOP0CEI1FzOt2R+l8/////3MI/xWk + sgIQhcB9IWoAagBoRO8CEIv46ALOAQDHRdxOYbwAaDj9AhCNRdzrQv917Oh0mP//WY21WP///+i7TwEA + i030X15kiQ0AAAAAW8nCBACDfewAdAn/dezoSZj//1mLRciJRdhoOP0CEI1F2FDo4goCAMxVi+xRihCA + +k51Jd1ADFFRUd0cJP8VyLICEIXAfTtqAGoAaKzvAhCL+Oh6zQEA61+A+ll1JotQFIlRCItQGINhBACJ + UQzGQQIEg3gYAA+cwP7IJAL+yIhBA8nDgPpJdRlR/3AI/xXMsgIQhcB962oAagBonO8CEOuuagBqAGhw + 7wIQD77CaOy4AhDoU9ABAGg4/QIQjUX8UMdF/E5hvADoPQoCAMxmxwEOAOlR////uGWZAhDo5goCAIHs + WAEAAFMz21ZXi/mJXfDGRZwwxkXAQ4ldxIld6Ild3Ild5Ihd7Ild/ItFCGoBjXXA6JpZAQD/deSNhZz+ + //9owPMCEFDoHLL//4PEDI2VnP7//41NnOiEYAEAjUXwUP91pGhgtAIQ/xUMtAIQO8N9I1NTaIzyAhCL + +OhvzAEAaDj9AhCNRQhQx0UITmG8AOiTCQIAi0XwjXXAZscHQgCJRwjo7W4BAItN9F9eW2SJDQAAAADJ + wgQAuHeZAhDoIwoCAIHsVAEAADPAVsZFoDDGRcRDiUXIiUXsiUXgiUXoiEXwiUX8i0UIagGNdcTo3lgB + AIF9yIAAAAB2FWg4/QIQjUUIUMdFCIUDAADoFwkCAP916I2FoP7//2jA8wIQUOhCsf//g8QMjZWg/v// + jU2g6KpfAQCLRaiLCFCL8P9RBIl3CI11xGbHBwkA6ERuAQCLTfRkiQ0AAAAAXsnCBAC4iZkCEOh8CQIA + g+w0M8BWxkXEQ4lFyIlF7IlF4IlF6IhF8IlF/FCLRQiNdcToP1gBAGaDfcYBi8Z0DOilbAEAZscHCADr + Cug3bAEAZscHESCNdcSJRwjo2W0BAItN9GSJDQAAAABeycIEALiTmQIQ6BEJAgCD7BBTVlcz9oll8FZW + iXX8/xUotAIQO8aJReh9FWg4/QIQjUXsUMdF7E5hvADoIQgCAP91COg56v//OXUIdApqAf91COg6h/// + /xUUtAIQM8DrJTP2OXUIdApqAf91COgfh///OXXofAb/FRS0AhC4/IkAEMOLReSLTfRfXmSJDQAAAABb + ycIEALi4mQIQ6H4IAgCB7JgAAABTVleL8WoIWTPAjX2886sz/41F3Il9/FCJffD/FdCyAhCLBosIjVXs + Uv92NI1WJGoBUrtQtAIQU1D/URQ7x30QV1do6PECEIv46DPKAQDrYIsGiwiNVfBSjVW8Uo1V3FKNVhRS + agH/djRT/3XsUP9RGDvHfVD/dcCNtVz////ov2wBAMZF/AH/dcSNdYzosGwBAMZF/AJmOX28D7dFvHUD + i0XYV1f/dbD/dYDoC80BAGg4/QIQjUUIUMdFCE5hvADo9QYCAItNCI1F3OgL7f//jUXcUP8VrLICEI1F + vOjdhf//i030X15bZIkNAAAAAMnCBAC42JkCEOh7BwIAgeysCAAAU1ZXM9uNcQKNvUj///+JZfCJTdiJ + XfzoV28BAIt12IPGJo2FeP///8ZF/AHoxWcBAMZF/AJqCFn/tWz///8zwMZFoDCNfaHzq2arqo2FSPf/ + /2jA8wIQUIld7OiWrv//g8QMjZVI9///jU2g6GuG//87w3QQiUXcaDj9AhCNRdzpigAAAIt1qDvzdSJT + U2ho8wIQaFzzAhDoUsgBAMdF5E5hvABoOP0CEI1F5OthjUXEUP91nP8VELQCEDvDfR9TU2iguQIQi/jo + scgBAMdF4E5hvABoOP0CEI1F4OsxjUXsUFONRcRQVv8VxLICEDvDfSNTU2g4uQIQi/jofsgBAMdF6E5h + vABoOP0CEI1F6FDoogUCAItN7GoLWug0i///jYV4////6CllAQCNtUj////o7moBAItN9F9eZIkNAAAA + AFvJw4tN1OhmxwEAuFmMABDDuOqZAhDoGAYCAIHsnAAAAFMz24ld/IMNUFADEP9WV4ll8IvxxkW8Q4ld + wIld5Ild2Ild4Ihd6I1FrFDGRfwB/xU0tAIQO8N9I1NTaKDzAhCL+OjUxwEAaDj9AhCNRexQx0XsTmG8 + AOj4BAIAZjkedFCLdgo783RJg/4BdSNqUF+NdbzoiFcBAGoo/3XgjUWsUP8VBLQCEI1EAP6JRcDrTIP+ + AnVHahBbi/uNdbzoXlcBAIt94I11rKWlpaWJXcDrK2ooX411vOhEVwEAV42FWP///1CNRaxQ/xUEtAIQ + jYVY////UIvG6CJnAQCNdbzoV1YBAOjYaQEAi030X15kiQ0AAAAAW8nDi02o6FDGAQC4b40AEMO4EpoC + EOgCBQIAgezAAAAAg2X8AIMNUFADEP9TVlczwDPbQI21NP///4ll8Iv56DprAQBqAliLz421ZP///8ZF + /AHoJmsBACFd2MZF/AOKRwI8Q3Vkg38GEHUIi51Y////63EzwECNtTT////oKlQBAP+1WP///411tOje + YgEAjUWkUP912P8VLLQCEIXAfSRqAGoAaIC5AhCL+Oh1xgEAx0XkTmG8AGg4/QIQjUXk6foAAACNXaTr + GzxJdQWLXwrrEjxOD4XVAAAA3UcO6JYAAgCL2IpHJjxDdVuDfyoQdQWLfYjrZzPAQI21ZP///+inUwEA + /3WIjXW06F5iAQCNRZRQ/3XY/xUstAIQhcB9IWoAagBogLkCEIv46PXFAQDHRexOYbwAaDj9AhCNRezr + fY19lOsXPEl1BYt/LusOPE51S91HMugdAAIAi/hqBDPAWYvz86cPlMAPtsjo94j//41FtOiCYgEAjbVk + ////6EdoAQCNtTT////oPGgBAItN9F9eZIkNAAAAAFvJw8dF6IUDAABoOP0CEI1F6OsPx0XghQMAAGg4 + /QIQjUXgUOiaAgIAi03c6I7EAQC4C48AEMO4LJoCEOhAAwIAgey8AAAAg2X8AFNWVzPAM9tAjXWIiWXw + i/nogmkBADPAxkW4Q4lFvIlF4IlF1IlF3IhF5MZF/AKKRwI8Q3ULg38GEHUFi0Ws6xU8SXUFi0cK6ww8 + TnVL3UcO6D3/AQBqKI2NOP///1FQ/xUEtAIQjYU4////UI1FuOiuZAEAjXW46ONTAQDoZGcBAI11iOhc + ZwEAi030X15kiQ0AAAAAW8nDaDj9AhCNRexQx0XshQMAAOjLAQIAi03o6L/DAQC4648AEMO4RpoCEOhx + AgIAg+xkU1ZXM9uJXfyDDVBQAxD/jXECjUXAiWXw6NJiAQBqEF+NdZDGRfwB6LZnAQDGRfwC/3W0/3Xk + /xUstAIQO8N9I1NTaIC5AhCL+OgpxAEAaDj9AhCNRexQx0XsTmG8AOhNAQIAjXWQ6CxTAQDorWYBAI1F + wOjVYAEAi030X15kiQ0AAAAAW8nDi03o6B3DAQC4opAAEMO4dpoCEOjPAQIAgeywAAAAU1ZXM8Az24ld + /IMNUFADEP9AjbVs////iWXwi/noomgBAImdaP///8ZFrEOJXbCJXdSJXciJXdCIXdiJXezGRfwEikcC + PEN1V4O9cP///xB1BYtFkOti/3WQjbVE////6LVfAQCNRZxQ/7Vo/////xUstAIQO8N9IlNTaIC5AhCL + +OhLwwEAx0XoTmG8AGg4/QIQjUXo6bAAAACNRZzrGTxJdQWLRwrrEDxOD4WLAAAA3UcO6Gz9AQCNTexR + UP8VOLQCEDvDfR9TU2iQuQIQi/jo/MIBAMdF5E5hvABoOP0CEI1F5Otk/3XsjUWs6MNiAQD/deyLPSC0 + AhD/1411rOjtUQEAOV3sdAX/dez/1411rOhhZQEAjYVE////6IZfAQCNtWz////oS2UBAItN9F9eZIkN + AAAAAFvJw8dF4IUDAABoOP0CEI1F4FDouv8BAItN3OiuwQEAuPyRABDDuJCaAhDoYAACAIPsZFNWVzPb + iV38gw1QUAMQ/41xAo1FwIll8OjBYAEAahBfjXWQxkX8AeilZQEAxkX8Av91tP915P8VELQCEDvDfSNT + U2iguQIQi/joGMIBAGg4/QIQjUXsUMdF7E5hvADoPP8BAI11kIl9lOgYUQEA6JlkAQCNRcDowV4BAItN + 9F9eZIkNAAAAAFvJw4tN6OgJwQEAuLaSABDDuKKaAhDou/8BAIHsaAgAAFNWVzPbiV38gw1QUAMQ/41x + Ao19jIll8OiWZwEAxkX8AWoIM8CBfZAABAAAxkW8MFmNfb3zq2arqnYRx0XohQMAAGg4/QIQjUXo61f/ + dbCNhYz3//9owPMCEFDo1qb//4PEDI2VjPf//41NvOg+VQEAi0XEiwiNVexSaIj5AhBQ/xE7w30jU1No + sPMCEIv46CrBAQDHReROYbwAaDj9AhCNReRQ6E7+AQCLReyLCFD/UQiLTexqC1ro14P//411jOifYwEA + i030X15kiQ0AAAAAW8nDi03g6BfAAQC4qJMAEMO4CqMCEOjJ/gEAgeycAAAAg2XsAINl/ABTVlcywIvy + jb1Y////iWXwi9norEMBAI196I2FWP///8ZF/AHoiFcBAIvwi0XoweADUIl14Ogbi///WYvIiU3sM8A7 + RehzDYtVCIlUwQSJNMFA6+5R/3Xoag7/FdSyAhCFwIlDCHUUx0XUtgAAAGg4/QIQjUXU6TsBAACNTeRR + UGbHAw4g/xW8sgIQhcB9JGoAagBoXO8CEIv46CXAAQDHRdBOYbwAaDj9AhCNRdDpAwEAADP/Rzt96A+H + hwAAADP2Rjt14Hd5jVWkjY1Y////Zom1Yf///2aJvWP////ob0EBAIpFpDxOdEQ8WXRAPEl0PDxDdQiL + TcDo1X////9zCP8VpLICEGoAagBoGO8CEGjsuAIQ6Bu/AQDHRcxOYbwAaDj9AhCNRczpiAAAAItN5I1F + pOjj8f//g0XkEEbrgkfpcP////9zCP8VpLICEIXAfSFqAGoAaETvAhCL+OhhvwEAx0XcTmG8AGg4/QIQ + jUXc60L/dezo04n//1mNtVj////oGkEBAItN9F9eZIkNAAAAAFvJwgQAg33sAHQJ/3Xs6KiJ//9Zi0XI + iUXYaDj9AhCNRdhQ6EH8AQDMVYvsUQ++EIP6TFd/RHQwg+owdCSD6hN0FUp0ZYPqBXU/ZscBFgCLQAiJ + QQjrZ1CL+ehC8///611mxwEBAOtWZscBCwCLQAT32BvAZolBCOtEg/pOdDSD+lR0JoP6WXQVaDj9AhCN + RfxQx0X8hQMAAOjL+wEAZscBDgDo4PD//+sUi9Dor9v//+sLZscBBQDdQAzdWQhfycO4TaMCEOhc/AEA + gewECQAAU1ZXM9uNcQKNvfD+//+JZfCJTeSJXfzoOGQBAIt95I13Jo2FIP///8ZF/AHoplwBAI13So2F + fP///8ZF/ALolFwBAIld6Ild7Ild4MZF/AZqCFn/tRT///8zwMaFSP///zCNvUn////zq2arqo2F8Pb/ + /2jA8wIQUIld3OhWo///g8QMjZXw9v//jY1I////6LtRAQCLhVD///87w4lF5HUlU1NoaPMCEGhc8wIQ + 6B29AQDHRdBOYbwAaDj9AhCNRdDpugEAAI1FpFD/tUT/////FRC0AhA7w30iU1NooLkCEIv46Ha9AQDH + RbhOYbwAaDj9AhCNRbjphAEAAI1F6FBT/xUctAIQO8N0IlNTaETzAhCL+OhFvQEAx0XMTmG8AGg4/QIQ + jUXM6VMBAACNRexQU1NqIFP/daD/FSS0AhCFwH1tjUXsUFNqEf91oP8VALQCEDvDfSJTU2gw8wIQi/jo + +bwBAMdFvE5hvABoOP0CEI1FvOkHAQAAjUWkUP917P8V/LMCEDvDD42MAAAAU1NoIPMCEIv46MK8AQDH + RcROYbwAaDj9AhCNRcTp0AAAAI2FbP///1D/dez/FQi0AhA7w30iU1NoEPMCEIv46Iy8AQDHRdhOYbwA + aDj9AhCNRdjpmgAAAGoEWY29bP///411pDPA86d0IlNTaPDyAhBo2PICEOjGuwEAx0XITmG8AGg4/QIQ + jUXI62aNReBQ/3Wg/xU8tAIQO8N9H1NTaMTyAhCL+OglvAEAx0XATmG8AGg4/QIQjUXA6zaLReiLCI1V + 3FL/deD/deRqA1D/UQw7w30jU1NotPICEIv46O27AQDHRdROYbwAaDj9AhCNRdRQ6BH5AQCLTdxqC1ro + o37//8ZF/AWLReA7w3QGiwhQ/1EIxkX8BItF7DvDdAaLCFD/UQjGRfwDi0XoO8N0BosIUP9RCI2FfP// + /+hlWAEAjYUg////6FpYAQCNtfD+///oH14BAItN9F9eZIkNAAAAAFvJw4tNtOiXugEAuCiZABDDuDCm + AhDoSfkBAIHsoAAAAFNWVzPbMsCL8Y29fP///4ll8Ild6Ild/OguPgEAjX3gjYV8////xkX8AegKUgEA + i33gi/CLx8HgA1CJddzom4X//1mLyIlN6DPAO8dzDYtVDIlUwQSJNMFA6+9RV2oM/xXUsgIQO8OLTQiJ + QQh1FMdFzLYAAABoOP0CEI1FzOkKAQAAZscBDCCNTeRRUP8VvLICEDvDfSJTU2hc7wIQi/jop7oBAMdF + 2E5hvABoOP0CEI1F2OnUAAAAi3XkM9tDM/9HO13gdxU7fdx3DVb/FdCyAhCDxhBH6+5D6+M7feB3OTP2 + Rjt13HcujZVY////jY18////Zol1hWaJfYfo2DsBAItN5I2FWP///+g1+///g0XkEEbrzUfrwotFCP9w + CP8VpLICEIXAfSFqAGoAaETvAhCL+OgSugEAx0XQTmG8AGg4/QIQjUXQ60L/dejohIT//1mNtXz////o + yzsBAItN9F9eZIkNAAAAAFvJwggAg33oAHQJ/3Xo6FmE//9Zi0XIiUXUaDj9AhCNRdRQ6PL2AQDMVYvs + g+w4U2apACBXi/kPl8FmqQBAD5fDJf8PAACEyQ+EywAAAGY9DAB1DVZXi8roKP7//19bycNqFllmO8F1 + CVZX6Bvo///r62oDWWY7wXTvZj0EAHUKVovP6DDm///r02Y9BQB1ClaLz+hN5P//68NmPQsAdQpWi8/o + yOn//+uzZj0OAHUKVovP6E34///ro2Y9BwB1ClaLz+hG4v//65NmPQgAdQtWV4vK6Dbg///rgmY9EQB1 + DlZXi8ro/93//+lu////agBqAA+3wGjM8QIQaOy4AhDoFrwBAMdF/E5hvABoOP0CEI1F/OmyAwAAhNt0 + FWoAagBokPECEGjsuAIQ6CK4AQDr0w+3wIP4Cw+PhgEAAA+EbwEAAIP4Cg+HewIAAP8khZGfABBmgycA + 6QD///9mxwcBAOn2/v//ZscHAgCKAjxOdQrdQgzouvIBAOsIPEl1DWaLQghmiUcI6dD+//9qAGoAD77A + aGjxAhDpXf///2bHBwMAigI8Tg+E4AIAADxJD4TsAgAAagBqAGho8QIQD77AaOy4AhDoULsBAMdF+E5h + vABoOP0CEI1F+OnsAgAAZscHBACKAjxOdQXdQgzrBzxJdQvbQgjZXwjpX/7//2oAagBoQPECEA++wGjs + uAIQ6Ae7AQDHRfROYbwAaDj9AhCNRfTpowIAAGbHBwUAigI8TnUF3UIM6wc8SXUL20II3V8I6Rb+//9q + AGoAaBjxAhAPvsBo7LgCEOi+ugEAx0XwTmG8AGg4/QIQjUXw6VoCAABmxwcGAItCFIlHCItCGIlHDOnW + /f//i8/og9T//+nK/f//Uui56///6b/9//9S6Afr///ptP3//2bHBwoA6ar9//9mxwcLAItCBPfYG8Dp + wP7//4P4Eg+P3wAAAA+EsgAAAIvIg+kMD4SZAAAASXRvSXRZSUl0LkkPhdkAAABqAGoAaKDwAhBo7LgC + EOhQtgEAx0XsTmG8AGg4/QIQjUXs6bUBAABqAGoAaMjwAhBo7LgCEOgptgEAx0XoTmG8AGg4/QIQjUXo + 6Y4BAACLwovPZscHDgDo7uj//+kN/f//agBqAGjs8AIQaOy4AhDo77UBAMdF5E5hvABoOP0CEI1F5OlU + AQAAi8KLz+ha9///6dj8//9qAGoAaHjwAhBo7LgCEOi6tQEAx0XgTmG8AGg4/QIQjUXg6R8BAACLyIPp + Ew+EywAAAIPpAw+EjAAAAEl0U4PpDXQnagBqAGi87wIQaOy4AhDoQLkBAMdF3E5hvABoOP0CEI1F3Onc + AAAAagBqAGjY7wIQaOy4AhDoULUBAMdF2E5hvABoOP0CEI1F2Om1AAAAZscHFwCKAjxOdGw8SXR8agBq + AGgA8AIQD77AaOy4AhDo4LgBAMdF1E5hvABoOP0CEI1F1Ot/ZscHFgCKAjxOdDY8SXRGagBqAGgo8AIQ + D77AaOy4AhDoqrgBAMdF0E5hvABoOP0CEI1F0OtJZscHEwCKAjxOdRDdQgzon+8BAIlHCOnA+///PEl1 + BYtCCOvvagBqAGhQ8AIQD77AaOy4AhDoX7gBAMdFzE5hvABoOP0CEI1FzFDoSfIBABScABAdnAAQJ5wA + EF6cABCfnAAQ6JwAEDGdABBHnQAQU50AEF6dABBpnQAQi0gcK0wkBMHhBANIFGaDfCQIAHQLi0QkCOgO + +///6weLwui29f//wggAuHmmAhDop/IBAIHsmAkAAINl6ACDZfwAU1aL2VeNcwKNhYD+//+JZfDoBFMB + AI1zJo2FJP///8ZF/AHo8lIBAGowagNYi8uNvUz////GRfwC6Gk2AQCNc26Nvcz+///GRfwD6EdaAQCN + s5IAAACNhfz+///GRfwE6LVSAQDGRfwFZosLM/9mg/kGfA2Lg74AAAA7x4lF7HUHx0XsAAQAAGaD+Qd1 + C4uD4gAAAIlF5OsHx0XkBQAAAIG90P7//wAEAAB2FMdF0IUDAABoOP0CEI1F0OkEAgAA/7Xw/v//jYVc + 9v//aMDzAhBQxoWo/v//MOg8mf//g8QMjZVc9v//jY2o/v//6KFHAQCLhbD+//9qPIlF4Ogxfv//O8dZ + dAnoEdL//4vw6wIz9jv3iXXodRTHRdy2AAAAaDj9AhCNRdzplwEAAP917IuNSP////915IvG/7Wk/v// + ib1I////6AjW//+LjSD/////deCLxom9IP///+it1f//OX2ED4T7AAAAjX3kjYVM////6BZKAQCLzolF + 4OjJ0P//M//GRZRDiX2YiX28iX2wiX24xkXAADPbQ8ZF/AaJXeyLRew7ReAPh6cAAACDfeQCdSeNdZSN + jUz///9miYVV////ZseFV////wIA6IlJAQCLRZiFwHU9M/+LdeyNlVz+//+NjUz///9mibVV////ZseF + V////wEA6DA0AQCLRehXVovzjZVc/v//6Kz9////RezrjDPbQzvDdQmLRbhmD74467WD+AJ1CItFuGaL + OOuog/gDdQyLRbhmizgPvlgC65fHRdiFAwAAaDj9AhCNRdjrbo11lMZF/AXo5lQBADP/6xqAe0owdBHH + RdSFAwAAaDj9AhCNRdTrR4l+HI1FyFBoAAABAP916Gh9iQAQaAAgAABX/xWMsAIQO8d1KVdX/xVYsAIQ + aHjKAhCL+OjtsQEAx0XMTmG8AGg4/QIQjUXMUOgR7wEAUP8ViLACEI2F/P7//+icTgEAjbXM/v//6GFU + AQCNtUz////ojjMBAI2FJP///+h7TgEAjYWA/v//6HBOAQCLTfRfXmSJDQAAAABbycODfegAdApqAf91 + 6Ojkbf//i03E6KiwAQC4B6MAEMO4t6YCEOha7wEAgeyYCQAAg2X8AFNWV4vZjXMCjb2k/v//iWXw6DhX + AQCNcyaNhfj+///GRfwB6KlPAQBqMGoDWIvLjb0g////xkX8AuggMwEAxkX8A2aDOwR1C4tzdjPbO/N0 + BOsHM9u+AAQAAIG9qP7//wAEAAB2FMdF3IUDAABoOP0CEI1F3OmCAQAA/7XI/v//jYVc9v//aMDzAhBQ + xoXU/v//MOg5lv//g8QMjZVc9v//jY3U/v//6J5EAQCJXYSJXYiJXYCJnXz///+JXZCJXZTGRfwEOZ1Y + ////i4Uc////i43c/v//iZ0c////xkWgAImNaP///4lFjIl1nA+EHQEAAI196I2FIP///+hFRwEAjY1o + ////iUXg6PTN//+DfegCdhTHRdiFAwAAaDj9AhCNRdjp0wAAAMZFpEOJXaiJXcyJXcCJXcjGRdAAM9sz + /0PGRfwFiV3si3XsO3XgD4etAAAAjZWA/v//jY0g////Zom1Kf///2bHhSv///8BAOhxMQEAg33oAnUn + Zom1Kf///411pI2NIP///2bHhSv///8CAOh5RgEAi0WohcB1HjP/V/917IvzjZWA/v//jYVo////6Lv6 + ////RezrijPbQzvDdQmLRchmD74469SD+AJ1CItFyGaLOOvHg/gDdQyLRchmizgPvlgC67bHReSFAwAA + aDj9AhCNReRQ6JDsAQCNdaTGRfwE6PFRAQDrA4ldhI2FXP7//1CNjWj////oo+T//42NXP7//+j1cf// + jYVo////xkX8A+gpzf//jbUg////6O0wAQCNhfj+///o2ksBAI21pP7//+ifUQEAi030X15kiQ0AAAAA + W8nDi03U6BeuAQC4qKUAEMNVi+yD7BRWM8khTfBXM/+L8Il9+MdF9AUAAADrAUaAPiB0+ooGPC11CkbH + RfwBAAAA6wk8K3UBRoNl/ABT6yk8LnQvD7bAagBqCv918IPoMJlRi/iL2uhQ6QEAA/gT2ovPi334iV3w + RooGhMB10TwudVNGigaEwHRMi1X0i9pKhdt0EQ+2wI08v0aNfHjQigaEwHXog/r/dRdqCjPSi8de9/aD + +gV2BY14AesZi/jrFYP6BXQQg/oBfguNQv+NPL/R50h1+DP2VmgQJwAA/3XwUejV6AEAM8kDxxPROXX8 + W3QG99gT1vfai00IX4lBFIlRGF7JwgQAVYvsg+wgU4tYFItAGIXAVo114IlF/H8ZfASF23MTi00I/0UI + 99uD0AD32MYBLYlF/Fe5ECcAAIv5M9KLw/f3agBR/3X8U4v66CfqAQCF/4vYi8p0GYvHM9JqCl/394DC + MIgWi/hGhf9168YGLkaLwwvBX3Qgi8NqAGoKUVDocugBAIDBMIgOi8qL0EYL0Yld/HXk6wTGBjBGjUXg + O/CLRQh0DU6KDogIjU3gQDvxdfNexgAAW8nCBACDeRgAfw18BoN5FABzBWoCWusDM9JCiFACxgATxkAB + BItRFIlQA4tJGIlIB4NgDACDYBAAw4B5AgKLQQOLUQd1B/fYg9IA99pXD755AWoEWSvPdCiFyX4Si/lq + AGoKUlDolucBAE918usSfRaL+WoAagpSUOhC6QEAT3XyiUYUiVYYX8NVi+xRUd1ADFNX6OzmAQCLyIHB + LH0AAI0EjQMAAACZv7E6AgD3/2oEX2oEiUX8acCxOgIAmff/v7UFAAAryI0EjQMAAACZ9/9fagVbagqJ + RfhpwLUFAACZ9/+/mQAAACvIjUSJApn3/4v4acCZAAAAQECZ9/sryEFmiU4Ei8dZmff5jQxAweECK/mL + TfyDwdBryWSDxwMDyANN+DPAZol+Al9miQ5miUYGZolGCGaJRgqJRgxbycNVi+xRUVaL8FcPt34Cag5Y + K8eZagxZ9/kPvw5qBSvIjQRAjQSHacCZAAAALckBAACZX/f/gcHAEgAAamSL+A+3RgQD+IvBmb6QAQAA + 9/5eagQD+IvBacBtAQAAA/iLwZn3/iv4i8GZWff5jYQH04L//4lF/NtF/ItFCF9e3V343UX43VgMycIE + AFWL7IPsHFNXjUXsUItFCN1ADFFR3Rwk/xXgsQIQ3V3k3UXs6JPlAQDdReSLyNwNyPsCEIHBLH0AAI0E + jQMAAACZ3AXA+wIQv7E6AgD3/2oEX2oEiUUIacCxOgIAmff/v7UFAAAryI0EjQMAAACZ9/9fagVbagqJ + RfhpwLUFAACZ9/+/mQAAACvIjUSJApn3/4v4acCZAAAAQECZ9/sryEFmiU4Ei8eZWff5g8QE3RwkjQxA + weECK/mLTQiDwdBryWQDyANN+IPHA2aJfgJmiQ7/FcixAhBZWeje5AEAi/gPt8eZuRAOAACL2ff7M9Jq + PGaJRgaLx/fxX1eLyg+3wZn3/zPSZolGCIvBWffxg2YMAF9bZolWCsnCBABVi+yD7BBTVlcPt3kCag5Y + K8eZagxe9/4PvzFqBbuQAQAAK/CNBECNBIdpwJkAAAAtyQEAAJlf9/+BxsASAABqZIv4D7dBBAP4i8aZ + 9/tbagQD+IvGacBtAQAAA/iLxpn3+yv4i8aZXvf+jYQH04L//4lF/A+3QQjbRfxrwDzdXfjdRfiJRfwP + t0EG20X8iUX8D7dBCt1d8NtF/F/dXfhe3UX43A0g/AIQiUX8i0UIW9xF8NtF/N1d8NxF8Nw1yPsCEN7B + 3VgMycIEAFaLdCQIg76AAAAA/3UFjVYk6w5WjYaoAQAA6If6//+L1o1OSOgYbf//XsIEAFaLdCQIg76A + AAAA/3UFjVYk6w5WjYaoAQAA6Fr6//+L1o1OSOgJbv//XsIEAFaLdCQIg76AAAAA/3UFjVYk6w5WjY6Y + AQAA6Lz+//+L1o1OSOi+bP//XsIEAFaLdCQIg76AAAAA/3UFjVYk6w5WjY6YAQAA6I/+//+L1o1OSOiv + bf//XsIEAFaLdCQIg76AAAAA/3UFjVYk6w5WjYaYAQAA6L78//+L1o1OSOhkbP//XsIEAFaLdCQIg76A + AAAA/3UFjVYk6w5WjYaYAQAA6JH8//+L1o1OSOhVbf//XsIEAItEJASLiIAAAACD+f91BY1QJOsFiUgE + i9CNSEjoEmz//8IEAItEJASLiIAAAACD+f91BY1QJOsFiUgEi9CNSEjoDG3//8IEAItEJASDuIAAAAD/ + jUhIjVAkdAKL0OjRa///wgQAi0QkBIO4gAAAAP+NSEiNUCR0AovQ6NJs///CBABWizBXD794EOsSVk// + lowAAACFwHUMgcbAAQAAhf916jPAX17DVoswD79OSVcPv3gQg8r/6Oxr//+FwHUa6xJWT/+WjAAAAIXA + dQyBxsABAACF/3XqM8BfXsOKCFZXM/aEyWoDi/hadQQzwOs+gPlbdR5KgPlddAxAigiEyXX0gPlddQxA + igiA+Vt1BIXSdeKAOAB0FIv3K/ADdCQMVlBX/xXosQIQg8QMi8ZfXsIEAFWL7IPsPFNWV2oIM8DGRcQw + WY19xfOri00Ig3kUAGarqnUHM8DpDwEAAItBBDPSQmY5URKJVegPjPkAAACNiJEBAACJTeyNiMQBAACJ + TfCNiOQBAACNmIABAACNuI0BAACJTfyNiLQBAAAFyAEAAIlF+ItFCIlN9L4MAgAAi034ZosJZoP5AnQG + ZoP5BHVAi0XwiwiD+f91BY1VxOsmD74Hg/hOf1h0GoPoQ3QQSHRDg+gFdA2D6AN0CEh1cotF7IkIi9eL + y+jGh///hcB1aotNCAF17AF18AF1/AF19AF1+A+/SRID/gPe/0XoOU3ofozrRotF/FfoVfr//+vEg/hR + dLqD+FR0HIP4VX4ig/hXfquD+Fl1GItF9IsAV+hE9///656LTfxX6Mj7///rk7hOYbwA6wOLRQhfXlvJ + wgQAihEzwITSdGVTgPoidQ6KEYTSdFhBgPoidfTrSoD6J3UOihGE0nRFQYD6J3X06zeA+j91MYpZAYD7 + e3QLgPtAdSSAeQJ7dR6A+lx1CoB5AX11BEFB6wZBgPp9dAaKEYTSdeVA6wFBihGE0nWdW8OKCITJuoAA + AAB0VoD5YXwFgPl6fkSA+UF8BYD5Wn46gPlfdDVqf1rrLIvKSoXJdC6KCID5YXwFgPl6fhyA+UF8BYD5 + Wn4SgPkwfAWA+Tl+CID5X3QDxgBfQIA4AHXLxgAAw1eLPoX/dQQzwOszUzPbQ2Y5XhB8Jv90JAyNh5cA + AABQ/xUwsgIQhcBZWXQWD79GEIHHwAEAAEM72H7aM8BbX8IEAIvH6/cPv8mDwQuD+RcPh5EAAAAPtol9 + sAAQ/ySNWbAAEDxDdH88VnR7PFF0dzxNdHM8V+tqPEN0azxWdGc8UXRjPE50XzxGdFs8QnRXPEx0UzxJ + 60o8TnRLPEZ0RzxC6yI8Q3Q/PFZ0OzxOdDc8QnQzPEZ0LzxJdCs8WesWPER0IzxUdB88Q3QbPFbrDjxD + dBM8VnQPPEzrBjxDdAc8UXQDM8DDM8BAw0qwABDSrwAQPrAAEOavABA2sAAQErAAEAawABAusAAQVbAA + EAABAQECAwQBAQEBCAEFBQMDBgYGBwQHAYsGhcB0R2aDfhAAdDBXjXgcZv9OEIsPhcl0FItHQDtGGHQM + 6Ltk//+LD+jsY///gcfAAQAAZoN+EAB11V//Nmb/ThD/FfyxAhCDJgBZw4X/D4QPAQAAiweFwFNViy38 + sQIQVnQji/CNXxDrDmb/C+j4hf//gcbAAQAAZoM7AHXs/zdm/wv/1VmLRwSFwHQsjV8SZoM7AHQajbCN + AQAAZv8L6MaF//+BxgwCAABmgzsAdez/dwRm/wv/1VmNd1ToqYX//4t0JBAz2zlfPHQUi05C6A1k//+L + Rzg7Rzx0BFD/1Vk5XyB0CItOZuj0Y///OV8cdAuLjooAAADo5GP//zlfMHQLi47SAAAA6NRj//85XzR0 + C4uO9gAAAOjEY///i0ckO8N0BFD/1VmLRyg7w3QEUP/VWYtHLDvDdARQ/9VZi4+UAAAAO8t0Beg4Z/// + i0cIO8N0CFBqA+iDaP//V//VWV5dW8IEAFWL7FFXM/9HgyVQUAMQAKFQUAMQacCQEAAAjU38UWgAEAAA + jYhogQMQUY2A5IADEFBX6LFo//9HZoXAdTmhUFADEGnAkBAAAGiAAAAA/3UIx4DggAMQAQAAAI2A6IAD + EFD/FQyyAhCDxAz/BVBQAxBmg/8IdplfycIEAFWL7IPsDFNXg2X0AGoCW41F/FC/ABAAAFdoaIEDEGjk + gAMQaGiRAxBqAf91DIld+P91EOiiZ///ZoXAdVNWvuiAAxBogAAAAP91CIle+Fb/FQyyAhCLRfiDxAz/ + RfSBxpAQAAD/RfiNTfxRV42OgAAAAFGNTvxRjY6AEAAAUVD/dQz/dRDoUGf//2aFwHS0XotF9Ehfo1BQ + AxBbycIMAFWL7IPsJFbZ7lfdXegz9sZF3EPGRd0AZol13ol14Il15Il18Il19DPAjX34q6u/ACAAAIvP + 6FZh//87xolF+HUKuLYAAADpCgEAAFOLyOjfYf//i0346Ilh//+LdQiNnoAAAABTV1AzwGaLRmZQM8Bm + i0ZuUP92WOjQZv//ZoXAdR+LG4P7/41OSHUFjVYk6waJXeCNVdzorWT//+mRAAAAZj0BAA+FiwAAAIsD + i034iUXg6Klh//+LE4tN+EJC6Mxh//9mhcCLTfh1DOjIYP//uLYAAADrfOhVYf//i0346P9g//8Dx4lF + CFNXUDPAZotGZlAzwGaLRm5Q/3ZY6Epm//9mPQEAdQgBfQiLRQjr2WaFwHUIjU5I6Xb///9qA/92WGiY + 5AIQ6DT+//+4TmG8AIv46xRqA/92WGiY5AIQ6Bz+//+/TmG8AI113OiYgv//i8dbX17JwgQAVYvsUVOL + XQhWVzPAZotDZo2zgAAAAFa/ACAAAFf/c1xQM8Bmi0NuUP9zWOjCZf//ZoXAdTmLNoP+/3QX/7OQAAAA + jUtIVv9zXOgnf///6bIAAABmg3tqAA+EjwAAAI1TJI1LSOijZP//6ZcAAABmPQEAdX2LFo1FCFCNS0jo + Aoz//4XAdX//s5AAAACNdQj/c1zoqn7//4XAdWqNg4AAAABQM8Bmi0NmV/9zXFAzwGaLQ25Q/3NY6DZl + //9mhcCJRfx0BmY9AQB1HP+zkAAAAI11CP9zXOhmfv//hcB1JmaDffwBdLVmg338/3QEM8DrFGoD/3NY + aJjkAhDoBv3//7hOYbwAX15bycIEAFWL7IPsJFbZ7lfdXegz9sZF3EPGRd0AZol13ol14Il15Il18Il1 + 9DPAjX34q6u/ACAAAIvP6O9e//87xolF+HUKuLYAAADpFAEAAFOLyOh4X///i0346CJf//+LdQiNnoAA + AABTV1AzwGaLRmZQM8Bmi0ZuUP92WOhpZP//ZoXAdR+LG4P7/41OSHUFjVYk6waJXeCNVdzoRmL//+mb + AAAAZj0BAA+FlQAAAIsDi034iUXg6EJf//+LE4tN+EJC6GVf//9mhcCLTfh1D+hhXv//uLYAAADpgwAA + AOjrXv//i0346JVe//8F/h8AAIlFCFNXUDPAZotGZlAzwGaLRm5Q/3ZY6N1j//9mPQEAdQyBRQj+HwAA + i0UI69VmhcB1CI1OSOls////agP/dlhomOQCEOjD+///uE5hvACL+OsUagP/dlhomOQCEOir+///v05h + vACNddzoJ4D//4vHW19eycIEAFWL7FFTi10IVlczwGaLQ2aNs4AAAABWaAAgAAD/c1xQM8Bmi0NuUP9z + WOhSY///ZoXAdTmLNoP+/3QX/7OQAAAAjUtIVv9zXOi3fP//6cMAAABmg3tqAA+EoAAAAI1TJI1LSOgz + Yv//6agAAABmPQEAD4WKAAAAixaNRQhQjUtI6I6J//+FwA+FiAAAAP+zkAAAAI11CP9zXL/+HwAA6C18 + //+FwHVujYOAAAAAUDPAZotDZmgAIAAA/3NcUDPAZotDblD/c1jotWL//2Y9AQCJRfx0BWaFwHUV/7OQ + AAAAjXUI/3Nc6OV7//+FwHUmZoN9/AF0sWaDffz/dAQzwOsUagP/c1homOQCEOiF+v//uE5hvABfXlvJ + wgQAVYvsg+wkVtnuV91d6DP2xkXcQ8ZF3QBmiXXeiXXgiXXkiXXwiXX0M8CNffirq78AIAAAi8/oblz/ + /zvGiUX4dQq4tgAAAOkTAQAAU4vI6Pdc//+LTfjooVz//4t1CI2egAAAAFNXUDPAZotGZlAzwGaLRm5Q + /3ZY6Ohh//9mhcB1H4sbg/v/jU5IdQWNViTrBold4I1V3OjFX///6ZoAAABmPQEAD4WUAAAAiwOLTfiJ + ReDowVz//4sTi034QujlXP//ZoXAi034dQ/o4Vv//7i2AAAA6YMAAADoa1z//4tN+OgVXP//Bf8fAACJ + RQhTV1AzwGaLRmZQM8Bmi0ZuUP92WOhdYf//Zj0BAHUMgUUI/x8AAItFCOvVZoXAdQiNTkjpbf///2oD + /3ZYaJjkAhDoQ/n//7hOYbwAi/jrFGoD/3ZYaJjkAhDoK/n//79OYbwAjXXc6Kd9//+Lx1tfXsnCBABV + i+xRU4tdCFZXM8Bmi0NmjbOAAAAAVmgAIAAA/3NcUDPAZotDblD/c1jo0mD//2aFwHU5izaD/v90F/+z + kAAAAI1LSFb/c1zoN3r//+nDAAAAZoN7agAPhKAAAACNUySNS0jos1///+moAAAAZj0BAA+FigAAAIsW + jUUIUI1LSOgOh///hcAPhYgAAAD/s5AAAACNdQj/c1y//x8AAOitef//hcB1bo2DgAAAAFAzwGaLQ2Zo + ACAAAP9zXFAzwGaLQ25Q/3NY6DVg//9mhcCJRfx0BmY9AQB1HP+zkAAAAI11CP9zXOhlef//hcB1JmaD + ffwBdLFmg338/3QEM8DrFGoD/3NYaJjkAhDoBfj//7hOYbwAX15bycIEAFNWi3QkDFczwGaLRmaNvoAA + AABX/3Z8jZ6oAQAAU1AzwGaLRm5Q/3ZY6Ldf//9mhcB0HGY9AQB0FmoD/3ZYaJjkAhDosff//7hOYbwA + 6xyDP/91BY1WJOsKVovD6OXq//+L1o1OSOh2Xf//X15bwgQAU1aLdCQMVzPAZotGZo2+gAAAAFf/dnyN + nqgBAABTUDPAZotGblD/dljoRl///2aFwHQcZj0BAHQWagP/dlhomOQCEOhA9///uE5hvADrHIM//3UF + jVYk6wpWi8PodOr//4vWjU5I6CNe//9fXlvCBABWi3QkCFczwGaLRmaNvoAAAABX/3Z8/3ZcUDPAZotG + blD/dljo2l7//2aFwHQcZj0BAHQWagP/dlhomOQCEOjU9v//uE5hvADrIIM//3UFjVYk6w5WjY6YAQAA + 6JPu//+L1o1OSOiVXP//X17CBABWi3QkCFczwGaLRmaNvoAAAABX/3Z8/3ZcUDPAZotGblD/dljoa17/ + /2aFwHQcZj0BAHQWagP/dlhomOQCEOhl9v//uE5hvADrIIM//3UFjVYk6w5WjY6YAQAA6CTu//+L1o1O + SOhEXf//X17CBABWi3QkCFczwGaLRmaNvoAAAABX/3Z8/3ZcUDPAZotGblD/dljo/F3//2aFwHQcZj0B + AHQWagP/dlhomOQCEOj29f//uE5hvADrIIM//3UFjVYk6w5WjYaYAQAA6BHs//+L1o1OSOi3W///X17C + BABWi3QkCFczwGaLRmaNvoAAAABX/3Z8/3ZcUDPAZotGblD/dljojV3//2aFwHQcZj0BAHQWagP/dlho + mOQCEOiH9f//uE5hvADrIIM//3UFjVYk6w5WjYaYAQAA6KLr//+L1o1OSOhmXP//X17CBABWi3QkCFcz + wGaLRmaNvoAAAABX/3Z8/3ZcUDPAZotGblD/dljoHl3//2aFwHQcZj0BAHQWagP/dlhomOQCEOgY9f// + uE5hvADrGYs/g///jU5IdQWNViTrBYl+BIvW6OBa//9fXsIEAFaLdCQIVzPAZotGZo2+gAAAAFf/dnz/ + dlxQM8Bmi0ZuUP92WOi2XP//ZoXAdBxmPQEAdBZqA/92WGiY5AIQ6LD0//+4TmG8AOsZiz+D//+NTkh1 + BY1WJOsFiX4Ei9bollv//19ewgQAVot0JAhXM8Bmi0Zmjb6AAAAAV/92fP92XFAzwGaLRm5Q/3ZY6E5c + //9mhcB0HGY9AQB0FmoD/3ZYaJjkAhDoSPT//7hOYbwA6xKDP/+NTkiNViR0AovW6Bda//9fXsIEAFaL + dCQIVzPAZotGZo2+gAAAAFf/dnz/dlxQM8Bmi0ZuUP92WOjtW///ZoXAdBxmPQEAdBZqA/92WGiY5AIQ + 6Ofz//+4TmG8AOsSgz//jU5IjVYkdAKL1ujUWv//X17CBABXM///dgjoClz//2aFwHQGZj0BAHUShf91 + C4vG6N/t//+FwHUkR+vbZj3//4l+THUWagP/dghopOQCEOiJ8///uE5hvABfwzPAX8NVi+yD7BiLRlCo + QFNXdRKoIA+E3AAAAIN+KAAPhNIAAABqAluNRfxQvwAgAABX/3YYjUX4UI1F6FBqAemgAAAA9kZQQHRS + jYaBAAAAM8lmiwhmhcmNUQFmiRB0Fg+3wmoCUP92HOhzg///hcAPhYMAAAAPv0X8UItGGGbHhoMAAAAB + AOiH7f//jVZUjU54iUZY6NBY///rMIN+KAB0Lg+/RfxQi0YY6GTt//+NVlSNjoUAAACJRljoqlj//4XA + dTWLTijoM1L//4XAdSmNTfxRV/92GI1N+FGNTeiLw1FDUP92CGoD6G5a//9mhcAPhE3///8zwF9bycNV + i+yD7CRXaghZ/3ZIxkXcMP91CDPA/3ZAjX3d/3Yk86v/dixmq6ro+nn//4tWLIPEFI1N3OjSUf//hcB1 + EzlF4HUOi0UMxwABAAAAuE5hvABfycIIAFWL7FFTVlfrMotF/IuYtAEAAIu4vAEAAL4AIAAAO/5/Aov3 + VlP/dQjoVFr//2Y9//90Oyv+A96F/3/djUX8UP91COjsWf//i/Bmg/5jdLpmg/7/dQ9qA/91CGiw5AIQ + 6Mvx//9mi8ZfXlvJwgQAagP/dQhowOQCEOiy8f//Zg3//+vkVYvsg+wQi0cEM8lBZjlPElNWiUX4iU30 + D4yEAQAAjbDEAQAAM9vrA4tF+DleFHUDi0bwVv92/FAzwGaLRgxQ/3b4M8Bmi0YOUDPAZotGEFAzwGaL + RgRQM8Bmi0b0UP93COhoWf//Zj3//4lF8A+ENwEAAGaDfg4LD4WwAAAAOV4ID4SnAAAAU1ONRfxQaBsn + AAD/dwjoKFn//2Y9//8PhBIBAAAzwGaLRgxWVv928FAzwGaLRghQM8Bmi0YOU1NQM8Bmi0b0UP91/Ojn + WP//Zj3//w+E6QAAAFNTjUX8UGgdJwAA/3cI6NZY//9mPf//D4TAAAAAM8Bmi0YMVlb/dvBQM8Bmi0YI + UDPAZotGDlNTUDPAZotG9FD/dfzolVj//2Y9//+JRfAPhJQAAAA5Xhx0VVNTjUX8UGgdJwAA/3cI6HxY + //9mPf//dGpq/Y2GPP///1AzwGaLRvRo8wMAAFD/dfzoNVj//2Y9//+JRfB0XDPAZotG9FNTaPQDAABQ + /3X86BZY//+4DAIAAAFF+APwD79HEv9F9DlF9A+Ohv7//2aLRfBeW8nDagP/dwho/OQCEOsiagP/dwho + 7OQCEOsWagP/dwho3OQCEOsKagP/dwhozOQCEOjP7///Zg3//+vDVYvsgewsAQAAVoszV2oIWf91CDPA + xkXYMI192fOrZquqjYXU/v//aAzPAhBQM//oNnf//4PEDI2V1P7//41N2OgLT///hcB1S2Y5QxB+Q4HG + lgAAAP914I1OAY1BsVBH6Bxz//+FwHUrigY8TXQEPFd1EQ+/TrPoJ1b//4P4/4lG+nQWD79DEIHGwAEA + ADv4fMMzwF9eycIEALgmAwAA6/NVjWwkkIHslAIAAFPZ7lbdXTiLdXiLBlcz24lFUDPAxkUsQ4hdLWaJ + XS6JXTCJXTSJXUCJXURqB419SKurWTPAagfGRQhJiF0JZsdFCgsAiV0MjX0Q86tZxkXkTIhd5WaJXeaJ + XeiNfexW86uNheD+//9o+OkCEFDoTHb//2aLRhCDxAxqAY1VYI2N4P7//2bHRWcCAGaJRWlmx0VrBgDo + WFT//4v4O/uJfVh9B/ff6Z8BAAC5AAEAAGbHRWcCAGaJXWlmiV1r6ItQ//87w4lFSHUKv7YAAADpdgEA + AIvI6BVR//+LTUjov1D//4lFVDPAQGY5RhCJRVwPjCUBAACLdVCBxpYAAACLVVRm/0VpjUYBZsdFawEA + 6Gtq//+NVSyNTWCJRTDo5VP//4v4O/sPhR4BAACLTVRmx0VrAgDHRTABAAAAigaIAY1VLI1NYOi8U/// + i/g7+w+F9QAAAGbHRWsDAIoGPEN0FTxWdBE8UXQNPEZ0CTxOdAWJXRDrBotGyolFEI1VCI1NYOiAU/// + i/g7+w+FuQAAAGbHRWsEAIoGPEJ0DTxOdAk8RnQFiV0Q6wcPv0bSiUUQjVUIjU1g6EtT//+L+Dv7D4WE + AAAAZsdFawUAD79G1I1V5I1NYIlF6OgpU///i/g7+3VmZsdFawYAD79G1o1V5I1NYIlF6OgLU///i/g7 + +3VIi0V4D79AEIHGwAEAAP9FXDlFXA+O5P7//42F4P7//1D/dXyNheD9//9oMOgCEFDoinT//4PEEI2N + 4P3//+hYTP//i/g7+3QYi01YO8t+BehtU///jXUs6Epx//+Lx+sSjXUs6D5x//+LTVjoUVP//zPAX15b + g8VwycIIAIsIVlcPv3gQhf90N42xlgAAAGaLRrNPZj3//3Qcig6A+U10BYD5V3UQjU76UQ+/yOi7ev// + hcB1DIHGwAEAAIX/dc8zwF9ew1FTVYtsJBBWi3UAVzPbU2oEjUQkIFBqUf91DDP/R4lcJCToWlT//2aF + wA+FvA8AACF8JBhmOV0QD46jDwAA/0QkEGaLRCQQZotOZGaJRm6LRQiJRlgPv8GDwAuD+Be6ACAAAMZG + JDAPh+cMAAD/JIUn1gAQOZ6IAAAAxgZDiV4EiV4cZsdGZgEAD4VCAQAAi0ZgPf4AAAB3W41IAejnTf// + O8OJRhwPhDkPAACLyOh3Tv//i04c6CFO//+JRlyLRmDpOgwAAItOYEHouU3//zvDiUYcD4QLDwAAi8jo + SU7//4tOHOjzTf//iUZci0Zg6aQOAACLRXCJRhyLRRjpywQAADmeiAAAAMYGQ4leBIleHGbHRmb+/w+F + EwIAAItOYIH5/gAAAHdi6FtN//87w4lGHA+ErQ4AAIvI6OtN//+LThzolU3//4E91GADEIQDAACJRlyL + RmCJRnwPglkBAADGhpYAAABR6TAOAACLRXCJRhyLRRiJRlyJVnyJnoQAAACLfCQY6RkNAACBPdRgAxCE + AwAAi0VwiUYci0UYiUZccgnGhpYAAABX683GhpYAAABNZsdGbAEA6745nogAAADGBkOJXgSJXhxmx0Zm + AQB0IIqGlgAAADxNdAg8Vw+F4/7//4tFcIlGHItFGOnjAwAAi0ZgPf4AAAB3R41IAeiFTP//O8OJRhwP + hNcNAACLyOgVTf//i04c6L9M//+JRlyLRmBAgT3UYAMQhAMAAIlGfBrAJO0EVoiGlgAAAOlaDQAAi0Vw + iUYci0UY6dwMAAA5nogAAADGBkOJXgSJXhxmx0Zm/v90G4qGlgAAADxND4T3/v//PFcPhO/+///pRP7/ + /4tOYIH5/gAAAA+H4gAAAOjyS///O8OJRhwPhEQNAACLyOiCTP//i04c6CxM//+JRlyLRmCJRnzGhpYA + AABDZsdGbAEA6dEMAAA5nogAAADGBkOJXgSJXhxmx0ZmAQAPhFz///+KhpYAAAA8TQ+E7/7//zxXD4Tn + /v//i0VwiUYci0UY6dYLAADHhowAAAAdvQAQ6bQMAAA5nogAAADGBkOJXgSJXhxmx0Zm/v90Q4qGlgAA + ADxND4Qu/v//PFcPhCb+//+LTmDoOkv//zvDiUYcD4SMDAAAi8joykv//4tOHOh0S///iUZci0Zg6SYM + AACBPdRgAxCEAwAAi0VwiUYci0UYiUZciVZ8cgzGhpYAAABX6eH9///GhpYAAABNZsdGbAEA6c/9//85 + nogAAADGBkOJXgSJXhx0Y4qGlgAAADxND4QCAQAAPFcPhPoAAACLTmBBQeirSv//O8OJRhwPhP0LAACL + yOg7S///i04c6OVK//+JRlyLRmBAQIC+lgAAAFGJRnx0CmY5XmwPhJYFAABmx0Zm+P/pfAsAAItOYEHo + X0r//zvDiUYcD4SxCwAAi8jo70r//4tOHOiZSv//iUZci0ZgZsdGZgEA6awIAAA5nogAAADGBkOJXgSJ + XhwPhVT///+LRmA9/gAAAA+HpgoAAI1IAegJSv//O8OJRhwPhFsLAACLyOiZSv//i04c6ENK//+JRlyL + RmBAZoN+Sf+JRnxmx0ZmAQDGhpYAAABDib6EAAAAdFc7+7hRrAAQdVy4hb0AEOtVPFeLTXCJThyLTRiJ + noQAAACJVnyJTlyLfCQYdApmOV5sD4R+CQAAZoN+Sf9mx0Zm+P8PhKoAAADHhowAAADjtgAQ6bkKAAA7 + +7gtrAAQdQW4Hb0AEImGjAAAAIt8JBjpnAoAADmeiAAAAMYGQ4leBIleHHR8ioaWAAAAPE10gTxXD4R5 + ////i05gQUHoKkn//zvDiUYcD4R8CgAAi8joukn//4tOHOhkSf//iUZci0ZgQECAvpYAAABRiUZ8dA5m + OV5sdQhmx0ZmAQDrBmbHRmb4/4m+hAAAAIt8JBjp8wkAAMeGjAAAAH61ABDpDwoAAItFcIlGHItFGGbH + RmYBAMaGlgAAAE2JRlyJVnyJnoQAAACLfCQY6Y8IAAA5nogAAAB0FoqGlgAAADxDD4R2AwAAPFYPhG4D + AACNRgTGBkyJGGbHRmbu/8aGlgAAAEzpKQMAADmeiAAAAA+EOAEAAIqGlgAAADxDdHQ8VnRwPFF0bDxO + dCM8RnQfPEJ0GzxJD4W/AAAAiAZmx0YCCwCNRghmx0Zm8P/rG2aLRmBmiUYCD79GaIlGBMYGTo1GDGbH + RmYIAGaDfkn/iUZcdBA7+7iSrAAQdXi4Tr4AEOtxO/u4dawAEHVouO29ABDrYYtOYEHGBkOJXgSJXhzo + y0f//zvDiUYcD4QdCQAAi8joW0j//4tOHOgFSP//iUZci0ZgQGaDfkn/iUZ8ZsdGZgEAdBA7+7hRrAAQ + dRW4hb0AEOsOO/u4LawAEHUFuB29ABCJhowAAACAvpYAAABMD4WfBAAAZoN+Sf+NRgTGBkyJGIlGXGbH + Rmbw/3QXO/u4kqwAEA+FdAQAALhOvgAQ6WoEAAA7+7h1rAAQD4VdBAAAuO29ABDpUwQAAGaD+QR1MTle + cHQsagpYjU4MxgZOZolGAoleBGbHRmYIAIlOXMaGlgAAAE6JRmBmiV5o6bEBAADGBklmx0YCCwBmx0Zm + 8P+NRgjGhpYAAABJ6ZABAAA5nogAAAB0UIqGlgAAADxDdAw8VnQIPFEPhfUHAABqFVnGBkOJXgSJXhzo + n0b//zvDiUYcD4TxBwAAi8joL0f//4tOHOjZRv//iUZcx0Z8FQAAAOmZAQAAahVZxgZDiV4EiV4c6GVG + //87w4lGHA+EtwcAAIvI6PVG//+LThzon0b//4lGXMdGYBQAAADHRnwVAAAAxoaWAAAAQ+lRAQAAOZ6I + AAAAdGGKhpYAAAA8Qw+EBQEAADxWD4T9AAAAPEl1FogGZsdGAgsAjUYIZsdGZgQA6bgAAAA8TnQbPEJ0 + FzxGdBM8WQ+FJwcAAIiGlgAAAOkXBQAAPE7GBk51Bg+/RmDreGoUWOtzOV50ib6EAAAAdSdmi0ZgZolG + Ag+/RmiJRgSNRgzGBk6JRlxmx0ZmCADGhpYAAABO617GhpYAAABZ6c0EAAA5nogAAAAPhKkAAACKhpYA + AAA8Q3RePFZ0WjxRdFY8TnQMPEJ0CDxGD4WeBgAAZotGYMYGTmaJRgIPv0ZoiUYEjUYMZsdGZggAiUZc + ib6EAAAAZoN+Sf8PhNEEAAA7+7iSrAAQD4VcBgAAuE6+ABDpUgYAAItOYEHGBkOJXgSJXhzoAUX//zvD + iUYcD4RTBgAAi8jokUX//4tOHOg7Rf//iUZci0ZgQIlGfGbHRmYBAOnmBQAAxgZOZsdGAhQAx0YEEAAA + AMaGlgAAAELpb////zmeiAAAAA+EuAAAAIqGlgAAADxDdAQ8VnUKZjlebA+EegEAADxRdGs8Q3QEPFZ1 + BmY5Xmx1XTxUdAo8RA+FqgEAADxUD5XA/sgkEAREiAZmx0ZmCQBmg35J/42GmAEAAIlGXHQXO/u4AKwA + EA+FdAEAALiuvAAQ6WoBAAA7+7jTqwAQD4VdAQAAuD+8ABDpUwEAAGoQWegbRP//O8OJRhwPhG0FAACL + yOirRP//i04c6FVE//+JRlzHRnwQAAAA6WoBAABmg35J/42GmAEAAMYGRIlGXGbHRmYJAMaGlgAAAESJ + voQAAAB0Fzv7uACsABAPhf4EAAC4rrwAEOn0BAAAO/u406sAEA+F5wQAALg/vAAQ6d0EAAA5nogAAAAP + hCIBAACKhpYAAAA8RHUNiAZmx0ZmCwDpGv///zxUdTxmg35J/4gGjYaYAQAAiUZcZsdGZgsAdBQ7+7im + qwAQD4WCAAAAuNC7ABDrezv7uHmrABB1crhhuwAQ62s8UXR4PEN0BDxWdQZmOV5sdWo8Q3QEPFZ1V8YG + Q4leBIleHItOYEHoD0P//zvDiUYcD4RhBAAAi8jon0P//4tOHOhJQ///iUZci0ZgQIlGfGbHRmYBAGaD + fkn/dV47+7gtrAAQdQW4Hb0AEImGjAAAAIm+hAAAAOkEBAAAahBZxgZDiV4EiV4c6K5C//87w4lGHA+E + AAQAAIvI6D5D//+LThzo6EL//2oQiUZcWIlGfIlGYGbHRmYLAOubO/u4UawAEHWnuIW9ABDroGaDfkn/ + jYaYAQAAxgZUiUZcZsdGZgsAxoaWAAAAVIm+hAAAAHQXO/u4pqsAEA+FfAMAALjQuwAQ6XIDAAA7+7h5 + qwAQD4VlAwAAuGG7ABDpWwMAAItOYEHGBkOJXgSJXhzoCkL//zvDiUYcD4RcAwAAi8jomkL//4tOHOhE + Qv//iUZci0ZgQIlGfGbHRmYBAMaGlgAAAEPpmfz//zmeiAAAAHRUgL6WAAAAUXVLi05gQcYGQ4leBIle + HOixQf//O8OJRhwPhAMDAACLyOhBQv//i04c6OtB//+JRlyLRmCJRgRmx0Zm9f9AiUZ8xoaWAAAAQ+mM + AgAAaiVZxgZDiV4EiV4c6GdB//87w4lGHA+EuQIAAIvI6PdB//+LThzooUH//4lGXMdGBCQAAADHRnwl + AAAAZsdGZgEA67A5nogAAAAPhKoBAACKhpYAAAA8Qw+EWgEAADxWD4RSAQAAPFEPhEoBAAA8TQ+EwAAA + ADxXD4S4AAAAPEl1FogGZsdGAgsAjUYIZsdGZvD/6aL7//88Qg+Ef/v//zxOD4R3+///PEYPhG/7//88 + WQ+FBQIAAIm+hAAAAGaDfkn/jYaoAQAAxgZZiV4UiV4YiUZcx0ZgEwAAAGbHRmgEAMdGfBYAAABmx0Zm + AQB0Fzv7uEyrABAPhbkBAAC48LoAEOmvAQAAO/u4H6sAEA+FogEAALh/ugAQ6ZgBAAA7+7h1rAAQD4WL + AQAAuO29ABDpgQEAAGY5XmyJXhzGBkOJXgSLTXCJThyLTRiJTlyJVnyJnoQAAACLfCQYdS88V3QrZsdG + ZgEAZoN+Sf90D8eGjAAAAGO5ABDpPwEAAMeGjAAAAP+3ABDpMAEAAGbHRmb+/2aDfkn/dA/HhowAAABy + tAAQ6RQBAADHhowAAAAXswAQ6QUBAACJXhzGBkOJXgSLRXCJRhyLRRhmx0ZmAQBmg35J/4lGXIlWfIme + hAAAAIt8JBgPhA/0///HhowAAACFvQAQ6cMAAACLRng9/gAAAIleHIleBMYGQ35Hi0VwiUYci0UYZsdG + ZgEAZoN+Sf+JRlyJVnzGhpYAAABNiZ6EAAAAdA/HhowAAABjuQAQ6dP1///HhowAAAD/twAQ6cT1//+N + SAHoHD///zvDiUYcdHKLyOiwP///i04c6Fo///+JRlyLRniJRmBmx0ZmAQDGhpYAAABDQIlGfIm+hAAA + AGaDfkn/dBA7+7hRrAAQdRW4hb0AEOsOO/u4LawAEHUFuB29ABCJhowAAAAPv0UQgcbAAQAAOUQkEA+M + XfD//zPA6xu4tgAAAOsUagL/dQxolOwCEOhe3P//uE5hvABfXl1bWcIEANPSABBQywAQc8oAEMvJABAI + zAAQQMwAENnNABA4yQAQb8gAECHHABDqyAAQc9MAEJPGABB5zgAQec4AEEDMABBAzAAQIM8AECDPABAg + zwAQ8c8AEIvSABAJ0QAQ2ccAEIsPUw+/XxAzwIXbVnRPjbGAAAAAS4N+BAB0I1b/dvwzwGaLRub/dtxQ + M8Bmi0buUP93COiHQ///Zj3//3QMgcbAAQAAhdt1zOsTagP/dwhooOwCEOiY2///Zg3//15bw1WL7IPs + DINl+ACDZfQAUzPAVot1CIseQGY5RhBXiUX8D4xeAQAAg8NkjUMwjVDWUo1LBFGNe/xXU1BoAAEAAI1D + M1D/dfz/dgjoX0P//2Y9//+JRfgPhDQBAAAPvwODwAuD+BcPh54AAAAPtoCd2AAQ/ySFhdgAEI1DDFAz + wFBQUGoI/3X8/3YI6OlC//9mPf//iUX4D4WbAAAAagP/dghovOwCEOjn2v//Zg3//+nVAAAAjUMQUDPA + UFBQagn/dfz/dgjorkL//2Y9//+JRfh0yYN7EAB1XoMHAmoUWDkHdgKJB2aDewQQfktmx0MEEADrQ8cH + FAAAAOvwgz8AdTbHBwEAAADrLjPAjXsUV1BQUGoG/3X8/3YI6FlC//9mPf//iUX4D4Rw////gz8AdQbH + B/8AAACNQzOAOAB1KoN99AB0E/919Gi07AIQUOjgYf//g8QM6wy+rOwCEIv4paSLdQj/RfTrBei51v// + gcPAAQAA/0X8ZotF/GY7RhAPjqX+//9mi0X4X15bycIEAGoD/3YIaMzsAhDpB////x3YABDi1wAQX9cA + EJrXABDa1wAQ79cAEAAAAQEAAgAAAQEABQEDAwICBAQEAAAAAVWL7IHsLAEAAFNWizX4sQIQV2oIxkXY + MDPAWY192fOrZqtomAAAAKr/1ovYhdtZdRCLRQzHALYAAAAzwOmiAwAAaiYzwFmL+/Ori30IZoM/BXwZ + i4eaAAAAhcB0D6gHiUNQdQ+DyAGJQ1DrB8dDUDEAAACLQ1CD4GA8YA+EdQEAALkAIAAAxkNUQ+hjO/// + hcCJQ3APhLYCAACLyOjzO///i0tw6J07//+JQxiLVyqLT0JC6Do8//9mhcAPhI8CAACLT0Loyzv//4tP + Quh1O///iUM8ZoM/A3wui0dOhcB0J4tPZo1QAegGPP//ZoXAD4RbAgAAi09m6Jc7//+LT2boQTv//4lD + IGaDPwR8OYtHcoXAdDKLj4oAAACNUAHozzv//2aFwA+EJAIAAIuPigAAAOhdO///i4+KAAAA6AQ7//+J + QxzrCvZDUEAPhaUAAABmgz8GfDqLh7oAAACFwHQwi4/SAAAAjVAB6IM7//9mhcAPhNgBAACLj9IAAADo + ETv//4uP0gAAAOi4Ov//iUMwZoM/B3w6i4feAAAAhcB0MIuP9gAAAI1QAehDO///ZoXAD4SYAQAAi4/2 + AAAA6NE6//+Lj/YAAADoeDr//4lDNGaDPwgPjGABAACLhwIBAACFwA+EUgEAAD0ABAAAdwb2Q1AwdQ6L + RQzHAIUDAADp3QEAAIuPGgEAAI1QAejgOv//ZoXAD4Q1AQAAi48aAQAA6CA6///2Q1AgiUX8D4S6AAAA + U42F2P7//2gE7QIQUOgfX///g8QMagGNk4UAAACNjdj+///oPD3//4XAiYOUAAAAfQyLTQz32IkB6XAB + AABoAAgAAP/WhcBZiUMoD4TMAAAAi1X8igpCiAhAhMl19ot7KE+KRwFHhMB1+L787AIQpY2F2P7//6SL + 0IoIQITJdfmLeygrwk+KTwFHhMl1+IvIwekCi/LzpYvIg+ED86SLeyhPikcBR4TAdfi++OwCEGalizX4 + sQIQi30I9kNQEHRIaAAEAAD/1olDJMcEJAAIAAD/1lmLSySFyYlDLHQ/hcB0O4tV/IoCQogBQYTAdfaL + eyRPikcBR4TAdfi+7OwCEKWlZqWki30IZoM/CXwdi4cqAQAAhcB0E4lDROsVi0UMxwC2AAAA6YMAAADH + Q0RkAAAAi0MchcB0GGoCagGNc3hQ6Ppm//+FwIt1DIkGdAXrXYt1DP93Co2F2P7//2hA7gIQUOjJXf// + g8QMjZXY/v//jU3Y6J41//+FwIkGdS+LReCJQwyNQwhQ/3XgagPo9T3//2Y9//91FWoC/3MMaNzsAhDo + 6NX//8cGTmG8AIvDX15bycIIAFFTVovwM9s5XiRXdH7/dCQUU+g94///O8MPhZEAAAD/dgjo/j3//4v4 + ZoX/dAZmg/8BdSSLxuj6z///hcB1cUOLw5n3fkSF0nXV/3QkFFPoAOP//4XA68Fmg///dA7/dCQUU+js + 4v//hcB1RGaD//+JXkx1OWoD/3YIaKTkAhDoVdX//7hOYbwA6yX/dgjokj3//4v4ZoX/dAZmg/8BdcyL + xuiOz///hcB1BUPr3TPAX15bWcIEAFFRU1Uz21aLdCQYQ2Y5XhJXi34EiVwkFA+M6wYAADPt6wMz20Nm + i4fIAQAAZj0CAHQGZj0EAHUZjYeAAQAAUIvH6Ilj//87xQ+FvQYAAIleFI2fjQEAAIvXi8voSTT//zvF + D4WjBgAAD74Dg/hND4+4AwAAD4QjBAAAg+gwD4RIAgAAg+gTD4QLAQAASA+EkwAAAIPoBXQmg+gDD4VM + BgAAjYeRAQAAZseH1AEAAPD/ZseH0gEAAPn/6SkGAAA5r9wBAAB0Q2aLh9IBAABmPQgAdCJmPQYAdBxm + PQcAdBZmPQQAdBBmPQUAdApmPfv/D4XABQAAjYeVAQAAZseH1AEAAAQA6d4FAACNh5UBAABmx4fUAQAA + 8P9mx4fSAQAABADpwQUAADmv3AEAAHQXZouH0gEAAGY9CQB0CmY9CwAPhXAFAADdBbj7AhDdh5kBAADa + 6d/g9sREegmDj8QBAAD/6w2Nt+QBAACLw+gzyf//jYfkAQAAZseH1AEAAAsAZseH0gEAAAsAx4e8AQAA + EAAAAOlQBQAAZouHyAEAAGY9AgB0FGY9BAB0DouHkQEAAImHwAEAAOtOOa/cAQAAdBlmi4fSAQAAZj3+ + /3QMZj0BAHQGZj34/3UzjbeRAQAAuwAgAAA5HnMWi4+pAQAAi9PoXDb//2aFwA+EFgUAAIsGiZ/AAQAA + iYe8AQAAjbepAQAAiw7o2jX//4sO6IU1//85r9wBAACJh7QBAAB0SWaLh9IBAABmPf7/dBZmPfj/dApm + PQsAD4VqBAAAZj3+/3UOZseH0gEAAPz/6eMCAABmPfj/D4XLAgAAZseH0gEAAPb/6csCAABmi4ePAQAA + i5e8AQAAZovIZvfZG8mD4f1Bgfr/AAAAZomP1AEAAHMSZomP0gEAAImXxAEAAOk8BAAAZvfYapwbwIPg + /UhmiYfSAQAAWCvC6YACAACDj8QBAAD/Oa/cAQAAdRdmx4fUAQAAYwBmx4fSAQAAAQDp/AMAAGaLh8gB + AABmPQIAdApmPQQAD4XlAwAAZouH0gEAAA+/yIPBCIP5Ew+HzwMAAA+2iY3kABD/JI1x5AAQxgNJZseH + jwEAAAsAjYeVAQAA6aQDAADGA05mx4ePAQAAFADHh5EBAAAQAAAA6YMDAAC+ACAAAIvOxgNDia+RAQAA + ia+pAQAA6Ngz//87xYmHqQEAAA+EjQMAAIvIibfAAQAA6F80//+Lj6kBAADoBjT//+lDAwAAZj0JAA+V + wP7IJPAEVIgDjYfkAQAAx4fAAQAAEAAAAOkfAwAAahWNt6kBAABZxgNDia+RAQAAiS7ocDP//zvFiQYP + hCkDAACLyOgBNP//iw7orDP//8eHwAEAABQAAADp3wIAAMYDWYmvoQEAAImvpQEAAI2H9AEAAMeHwAEA + ABYAAADpuwIAAIPoTg+ETQIAAIPoBg+ETQEAAIPoA3RaSEgPhaICAACNt/QBAABWi8PoDcX//4m3tAEA + AMeHvAEAABMAAABmx4fQAQAABADHh8ABAAAXAAAAx4fEAQAA/f///2bHh9QBAAABAGbHh9IBAAADAOlQ + AgAAZouHyAEAAGY9AgCLj5UBAACJj7wBAAB0BmY9BAB1EbgBIAAAO8iJh8ABAAB3AovI6H8y//87xYmH + qQEAAA+ENAIAAIvI6Awz//+Lj6kBAADoszL//1CL84mHtAEAAOiDUv//O8UPhQMCAAA5r9wBAAB0UGaL + h9IBAABmPf7/D4Qw/f//Zj34/w+EIP3//2Y9AQDpEf3//2Y9AQB1CGaDj9IBAAD/apxYK4e8AQAAiYfE + AQAAx4fYAQAAAQAAAOmNAQAAi4eRAQAAi8j32RvJg+EDSUn32BvAg+ADg8D8ZomP1AEAAGaJh9IBAADr + tzmv3AEAAA+EkgAAAGaLj9IBAABmg/kJdApmg/kLD4UHAQAA3QW4+wIQ3YeZAQAA2unf4PbERHokg4/E + AQAA/2bHh9QBAAALAGbHh9IBAAALAI2H5AEAAOkAAQAAZoP5C4235AEAAHUIU+jqxf//6weLw+ihxP// + ibe0AQAAZseH1AEAAAsAZseH0gEAAAsAx4e8AQAAEAAAAOnEAAAA3QW4+wIQ3YeZAQAA2unf4PbERHoJ + g4/EAQAA/+sMjbfkAQAAU+iQxf//jYfkAQAAahCJh7QBAABYZseH1AEAAAsAZseH0gEAAAsAiYfAAQAA + iYe8AQAA62s5r9wBAAB0RWaLh9IBAABmPQgAdEFmPQYAdDtmPQcAdDVmPQQAdC9mPQUAdClmPfv/dCNV + VWgQ5QIQaFjAAhCLx+i9cwEAuE5hvADrPGbHh9IBAAAIAGbHh9QBAAAIAI2HmQEAAImHtAEAAIt0JBwP + v0YSgccMAgAA/0QkFDlEJBQPjhn5//8zwF9eXVtZWcIEALi2AAAA6/C04AAQHuEAEF7hABCC4AAQmeAA + EPrgABBD5AAQAAYGAQYGAAYGAAICAwMEBAQFBgVVi+yD7CxWi3UIi0Y0VzP/O8d1BzPA6QMDAACJRfxT + jUX0UI1d/OivUv//hcAPhJoCAACLRfSD+AEPjMgCAAAPv04SO8EPj7wCAACLTgRpwAwCAACNnAj0/f// + aIAAAACNgwABAACNVfyJXfjo3VP//4mD4AEAAGogjUXU6IVU//+FwA+EFAIAAGoKv0DnAhCNddRZM8Dz + pnUXZseD0gEAAPj/ZseD1AEAAPj/6dsBAABqC1i/NOcCEI111IvIM9LzpnUXZseD0gEAAP7/ZseD1AEA + AP7/6bEBAABqCb8o5wIQjXXUWTPS86Z1DmbHg9IBAAABAOmJAQAAagm/HOcCEI111Fkz0vOmdRdmx4PS + AQAACQBmx4PUAQAACQDpagEAAGoOvwznAhCNddRZM9LzpnVcaiiNVfxmiYPSAQAAZomD1AEAAOgoUv// + hcAPhDkBAACNs8wBAABWi9roeVH//4XAD4RtAQAAaimL0+gBUv//hcAPhGcBAACLBotN+IPAFImBvAEA + AIvZ6f0AAAC/bOYCEI111IvIM9LzpnUOZseD0gEAAPv/6dYAAABqDL9g5gIQjXXUWTPS86Z1F2bHg9IB + AAAEAGbHg9QBAAAEAOm3AAAAag2/UOYCEI111Fkz0vOmdQtmx4PSAQAABQDr1ovIv0TmAhCNddQzwPOm + dRRmx4PSAQAACABmx4PUAQAACADrd2oKvzjmAhCNddRZM8DzpnULZseD0gEAAAYA69lqCb8s5gIQjXXU + WTPA86Z1C2bHg9IBAAAHAOu9agy/IOYCEI111FkzwPOmdQtmx4PSAQAAAgDrGmoMvxTmAhCNddRZM8Dz + pnVyZseD0gEAAAMAZseD1AEAAAEAi3UIx4PcAQAAAQAAADP/6wg5u+ABAAB0VWosjVX86MRQ//+FwA+F + aP3//1fotlD//4XAdUJXV2hM5QIQi0X860FXV2ig5wIQ6/JqAGoAaMDmAhDr52oAagBoeOYCEOvcagBq + AGjQ5QIQjUXU6xRXV2iI5QIQ68UzwOsWV1doUOcCEGhYwAIQ6CJwAQC4TmG8AFtfXsnCBABVi+xRUVNW + i3UIi048i1Y4V4t+BMdF+AEAAADp3AAAAID7InUViBrrB4D7InQkiBpCQYoZhNt18esYgPsndRyIGusH + gPsndAqIGkJBihmE23XxigGIAumfAAAAgPs/D4WUAAAAikEBPHt0DjxAD4WFAAAAgHkCe3V/ZotF+P9F + +GaJh7gBAACKAYgCQoB5AUB1DmbHh8gBAAACAIPBA+sLQWbHh8gBAAABAEGKAYTAx0X8AAEAAIv3dC+D + ffwAdFk8XHUOgHkBfXUIxgZ9RkFB6wg8fXQNiAZGQYoB/038hMB114N9/AB0MMYGAIt1CEGBxwwCAADr + BIgaQkGKGYTbD4Ua////i0UMiBorVjiJEDPAX15bycIIAGoAagBo8OcCEGhYwAIQi8fo6G4BALhOYbwA + 691VjWwkiIHsDAEAAFNWi3JAV4s6jUb/UItCIGp86J5E//+FwIlFdHUOUFBoaOkCEIvG6cIAAAAPv1oQ + jXdIv4AAAABXjUXwjVV06F9Q//+FwA+ElgAAAGou6L1O//+FwHQpV42FcP///+hAUP//hcB0e41F8FBW + jYVw////UOjfWP//M/87x3V/6w9WjU3w6NRM//+FwHVwM/+BxsABAABLdA5qLI1VdOhuTv//hcB1jVeN + VXToYU7//4XAdRQ731dXdQdo7OgCEOsraKDoAhDrCzvfdBNXV2hQ6AIQaFjAAhDoMmoBAOsaM8DrG2oA + agBoIOkCEItFdGhYwAIQ6N9tAQC4TmG8AF9eW4PFeMnDVYvsgew8AgAAU1ZXaghZ/3UIM8DGRcwwjX3N + 86tmq6qNhcj+//9o+OkCEFDo30///4PEDP91DI2FyP7//1CNhcj9//9o5OkCEFDowU///4PEEI2NyP3/ + /+iPJ///M/87xw+FegEAAI1F8FCNjcj+///o4kv//zvHD4U5AQAAD7dN8zPSQmbHRfcCAGaJfflmiX37 + 6IUu//87x4lFDA+EFgEAAP9NDGb/RfmNVcyNTfBmx0X7AQDoqi3//zvHD4X0AAAAi1XQi03oQujPKv// + ZoXAD4TAAAAAi03o6BIq//+LdQiL2FPoe8T//4tN6Ivw6LIp//879w+EogAAAI1VzI1N8GbHRfsCAOhX + Lf//O8cPhaEAAACLTejo1Cn//4oAiIaWAAAAi03o6Hkp//+NVcyNTfBmx0X7AwDoJi3//zvHdXSLRdSJ + RmCNVcyNTfBmx0X7BADoCy3//zvHdVlmi0XUZolGaI1VzI1N8GbHRfsGAOjuLP//O8d1PDl9DGaLRdBm + iUZsx4aIAAAAAQAAAA+FDf///+shuLYAAADrGFdXaKTpAhBoWMACEIvD6CBsAQC4TmG8AIv4jYXI/v// + UI2FyP3//2iY6QIQUOg/Tv//g8QMjY3I/f//6A0m//+Lx19eW8nCCABVi+yB7AQBAABWi3UIi0YwhcAP + hNACAACLTkBTV0lRanzookH//4XAiUX8D4SzAgAAvwABAABXjYX8/v//jVX86HFN//+FwHUfV42F/P7/ + /+ipTP//hcAPhO0BAACNhfz+///otML//42F/P7//1DoCsP//4vwhfYPhNcBAACNnpYAAABTuPzrAhCN + ffzoXEv//4XAD4TJAQAAigM8YXIMPHp3CA+20IPqIOsDD7bQZotOZIrCiBPoCMP//4XAD4SwAQAAgPpD + D4TuAAAAgPpWD4TlAAAAgPpRD4TcAAAAgPpOdF6A+kZ0WYD6QnVMaiiNVfzoK0v//4XAdCyNRmhQi9ro + Hkr//4XAD4SBAQAAaimL0+gLS///hcB0fcdGYBIAAADp1AAAAMdGYAgAAABmx0ZoAgDpwgAAAID6V+my + AAAAaiiNVfzo10r//4XAdF2NRmBQi9roL0r//4XAD4Q7AQAAaiyL0+i3Sv//hcB0Fo1GaFDorEn//4XA + dQ5QUGhY6gIQ6xxmg2ZoAGopjVX86I5K//+FwHVjagBqAGjc6gIQjYX8/v//6SYBAABmg2ZoAMdGYAoA + AADrQWoojVX86F5K//+FwA+E3wAAAI1GYFCL2uiySf//hcAPhLAAAABqKYvT6DpK//+FwHSsgL6WAAAA + UXUGZsdGbAEAuFDqAhCNVfzoNkr//4XAdAZmx0ZqAQC4ROoCEI1V/OgfSv//hcB0BmbHRmwBAGosjVX8 + x4aIAAAAAQAAAOjlSf//hcB0eIt1COnn/f//agBqAGhg7AIQ63tqAGoAaBjsAhDpP////2oAagCNhpcA + AABoxOsCEOtfD7bCUI2F/P7//1BogOsCEGhYwAIQ6PdoAQDrTWoAagBoEOsCEOkE////agBqAGiY6gIQ + 6fb+//9qAGoAaEzrAhDp6P7//zP2Vo1V/OheSf//hcB1G1ZWaBDqAhCLRfxoWMACEOgNaQEAuE5hvADr + AjPAX1teycIEAFWL7IPsXFNWV4vxiXXwgw1QUAMQ/9nu3V3UM9JqBzPAWcZFpEnGRaUAZsdFpgsAiVWo + jX2s86uIRcnGRchDZolVyolVzIlV0IlV3IlV4I195KurjUX8UFaJVfSJVfzodOn//4N9/ACL2A+FowQA + ALmAAAAA6FAl//+FwIlF5HUMx0X8tgAAAOmGBAAAi8jo2CX//4tN5OiCJf//9kNQCIlF+HUMi0s86BW/ + //9miUMSZoN7EgAPhJMAAACLRiqLNfixAhBAUP/WhcBZiUM4dLAPv0MSacAMAgAAUP/Wi/iF/1mJewR0 + mQ+/SxJpyQwCAACL0cHpAjPA86uLyoPhA/OqjUXsUFPo3Pf//4XAiUX8D4X8AwAAU+in9P//hcCJRfwP + hesDAABT6Evt//+FwIlF/A+F2gMAAIv76K/Q//9mPf//D4TJAwAAi0Xs6wmLQzyJQziLRipQ/3M4/3MI + 6HEq//9mPf//dRRqA/9zCGhw7QIQ6CLC///plQMAAGY9YwB1Ev9zCOjgz///Zj3//w+EfQMAAGY9AQB1 + B4vz6HrO//+NcxCJdez/Q0BW/3MI6Cwq//9mPf//D4QLAwAAZosGZoXAD4RBAgAAD7/AacDAAQAAUP8V + +LECEIv4hf9ZiTsPhJn+//8Pvw5pycABAACL0cHpAjPA86uLyoPhA/OqjUNIUP9zCOjCKf//U+j35f// + ZoXAD4X3AgAA9kNQBXROi0sghcl0IItF+GiAAAAA/3NAaizoFT3//4XAdAqLRfjoxTz//+sni0NAg/gB + dQ6Lffi+RO0CEKWlZqXrEVBoOO0CEP91+OjPSP//g8QM9kNQBHQL/3X4U+it+P//6x5T6I36//+FwIlF + /A+FgQIAAPZDUAJ0EovT6H73//+FwIlF/A+FaQIAAFPoktT//4XAiUX8D4VYAgAAi/vo6OT//2Y9//8P + hEcCAACLQ1CoAnQpi8PoINT//4XAiUX8D4UuAgAAi/Po5sz//4XAiUX8D4UcAgAA6eAAAACoBP91+HQH + 6LNO///rBlPoY9H//4XAiUX8D4X4AQAA/3X46K/Q//+FwIlF/A+F5QEAAI1F9FCLw+iJ6v//hcCJRfwP + hc8BAACLcxyF9g+EggAAAI2DgQAAADPJZosIZoXJjVEBZokQdBcPt8JqAlBW6IlQ//+FwIlF/A+FlwEA + AItN+GiAAAAA6CU2//+Nc3iJRcyNVciLzmbHg4MAAAABAOjhJf//hcCJRfwPhWYBAACLQ0yJRayNVaSL + zmbHg4MAAAACAOi9Jf//hcCJRfwPhUIBAACLAw+/SEno/yb//4vz6DrM//+FwIlF/A+FJQEAAGoC/3MI + 6Hcn//9mPf//D4TXAAAA6LG9///pjAAAAIN7HAAPhIIAAACNRaxQ/3MI6K0n//9mPf//D4S8AAAAjYOB + AAAAM8lmiwhmhcmNUQFmiRB0GQ+3wmoCUP9zHOiqT///hcCJRfwPhbgAAACNu4MAAACNc3hmxwcBAINl + zACNVciLzugMJf//hcCJRfwPhZEAAACNVaSLzmbHBwIA6PIk//+FwIlF/HV7/3MI6MMm//+L+GaD//90 + T2aD/wF1Dovz6GjL//+FwIlF/HVXZoP/ZHREi3Xs6d/8//9qA/9zCGhc7QIQ6Zv8//9qA/9zCGgs7QIQ + 6Yz8//9qA/9zCGhQ7QIQ6X38//9qA/9zCGgc7QIQ6W78//9T6Ha5//+FwIlF/HRF/3Xwi/vo6bz//411 + yOj/Qv//gX38TmG8AHUEg2X8AItN/IXJdAfoxh3//+s1g330AGoLWnUKg8n/6Ekj///rImr+Wev0i0tA + agta6Dcj////dfCL++iZvP//jXXI6K9C//9fXlvJw7jKmgIQ6DeeAQCB7OwBAACDZfwAgw1QUAMQ/1NW + M8BXQI21CP///4ll8IvZ6AsFAQCNcyaNfYzGRfwB6P8FAQBqA1iLy421OP///8ZF/ALo6AQBAMZF/AMz + wGoIxoVo////MFmNvWn////zq2arqopDAjP/M/Y8ScdF7AEAAAB0LTxOdCU8Q3UN/7Us////aADuAhDr + McdFxIUDAABoOP0CEI1FxOlzAgAAPEl1BYtDCusI3UMO6OKZAQA7x3Qu/3MKaEDuAhCNhQj+//9Q6O9E + //+DxAyNlQj+//+NjWj////oVPMAAIu1cP///2j47QIQjUWM6L/sAACEwHRNgHtKTHQUx0XQhQMAAGg4 + /QIQjUXQ6QUCAABq+/9zTmpoVug8Jf//Zj3//w+FjwEAAGoCVmic7QIQ6OW8///HRdxOYbwAjUXc6WwB + AABo2O0CEI1FjOhh7AAAhMB0VIB7SkN0FMdFyIUDAABoOP0CEI1FyOmnAQAA/7U8/////7Vc////amlW + 6Nck//9mPf//D4UqAQAAagJWaJztAhDogLz//8dF1E5hvACNRdTpBwEAAGiw7QIQjUWM6PzrAACEwHRa + gHtKTHQUx0XAhQMAAGg4/QIQjUXA6UIBAAAzwDl7Tmr6D5TAQFBouwQAAFaJQ07obCT//2Y9//8Phb8A + AABqAlZonO0CEOgVvP//x0XMTmG8AI1FzOmcAAAAaIztAhCNRYzokesAAITAdEyAe0pDdBTHReiFAwAA + aDj9AhCNRejp1wAAAGr9/7Vc////aLwEAABW6Agk//9mPf//dV9qAlZonO0CEOi1u///x0XkTmG8AI1F + 5Os/aIDtAhCNRYzoNOsAAITAD4SBAAAAV1dowAQAAFboxyP//2Y9//91HmoCVmic7QIQ6HS7///HReBO + YbwAjUXgaDj9AhDrX2Y9AQB1EmoCX1dWaJztAhDoTrv//4l97ItN7GoLWug/IP//jbU4////6AQAAQCN + dYzo/P8AAI21CP///+jx/wAAi030X15kiQ0AAAAAW8nDx0XYhQMAAGg4/QIQjUXYUOhgmgEAi0286FRc + AQC4VvcAEMO48poCEOgGmwEAgezoAQAAg2X8AIMNUFADEP9TVjPAV0CNtQz///+JZfCL2ejaAQEAjXMm + jb1g////xkX8AejLAgEAM/aNQ0qJReTGRZBDiXWUiXW4iXWsiXW0xkW8AMZF/AMzwGoIxoU8////MFmN + vT3////zq2arqopDAjP/PEnHRegBAAAAiX3sdC08TnQlPEN1Df+1MP///2gA7gIQ6y/HRdSFAwAAaDj9 + AhCNRdTp8gIAADxJdQWLQwrrCN1DDuillgEAO8Z0MVBoQO4CEI2FDP7//1DotEH//4PEDI2VDP7//42N + PP///+gZ8AAAi4VE////iUXsi/ho+O0CEI2FYP///+h86QAAhMB0YVZWjUXsUGpoV+gAIv//Zj3//3Uh + agJXaOTtAhDov7n//8dF2E5hvABoOP0CEI1F2OljAgAAZj0BAHUSagJbU1do5O0CEOiWuf//iV3oOXXs + D5/AjU3kUeh57AAA6fABAABo2O0CEI2FYP///+gH6QAAhMB0cr8FAQAAjXWQ6GzrAACNRZRQV/91tGpp + /3Xs6Hoh//9mPf//dSNqAv917Gjk7QIQ6De5///HRcROYbwAaDj9AhCNRcTp2wEAAGY9AQB1FGoCW1P/ + dexo5O0CEOgMuf//iV3ojVWQjUXk6BUCAQDpagEAAGjM7QIQjYVg////6IHoAACEwHRbVlaNRexQaLkE + AABX6AIh//9mPf//dSFqAldo5O0CEOjBuP//x0XQTmG8AGg4/QIQjUXQ6WUBAABmPQEAdRJqAltTV2jk + 7QIQ6Ji4//+JXeg5dewPlMDp/f7//2i87QIQjYVg////6BLoAACEwHReVlaNRexQamxX6JYg//9mPf// + dSFqAldo5O0CEOhVuP//x0XITmG8AGg4/QIQjUXI6fkAAABmPQEAdRJqAltTV2jk7QIQ6Cy4//+JXeiN + ReRQi0Xs6P/rAADpiQAAAGiw7QIQjYVg////6KDnAACEwA+EqQAAADv+dRTHReCFAwAAaDj9AhCNReDp + oAAAAFZWjUXsUGi7BAAAV+gFIP//Zj3//3UeagJXaOTtAhDoxLf//8dFzE5hvABoOP0CEI1FzOtrZj0B + AHUSagJbU1do5O0CEOiet///iV3ojUXkUItF7OgW6wAAi03oagta6IMc//+NdZDoS/wAAI21YP///+hA + /AAAjbUM////6DX8AACLTfRfXmSJDQAAAABbycPHRdyFAwAAaDj9AhCNRdxQ6KSWAQCLTcDomFgBALgS + +wAQw7gEmwIQ6EqXAQCD7GiDZfwAgw1QUAMQ/1NWV4vZiWXwagKNcwKNfYzot/4AAGoCjXMmjX28xkX8 + Aeim/gAA/3WwM8CDe1IC/3XgD5XASIPgA0BAUGoA6DEf//+L8IX2dQpohO4CEOhOtv//i87oLhz//411 + vOiJ+wAAjXWM6IH7AACLTfRfXmSJDQAAAABbycOLTezo+VcBALjG+wAQw7ghmwIQ6KuWAQCB7JQAAACD + ZfwAgw1QUAMQ/1NWV4vZjXMCjX2QiWXw6IX+AABqAo1zJo29YP///8ZF/AHoA/4AADPSxkX8AoN7UgK+ + fO4CEA+Vwo19wKWkSoPiA2oIM8CDwgODfZQgWY19xfOrdhVoOP0CEI1F7FDHReyFAwAA6HKVAQCLRbSL + 8IoIQITJdfmNfcArxk+KTwFHhMl1+IvIwekC86WLyI1FwFD/dYSD4QNSagDzpOgxHv//i/CF9nUKaITu + AhDoTrX//4vO6C4b//+NtWD////ohvoAAI11kOh++gAAi030X15kiQ0AAAAAW8nDi03o6AEV//+4yfwA + EMO4M5sCEOiolQEAg+xog2X8AIMNUFADEP9TVleL2Yll8GoCjXMCjX2M6BX9AACNcyaNfbzGRfwB6HT9 + AACLQ1L/dbAkAv914PbYG8CD4ANAUGoA6JMd//+L8IX2dQpohO4CEOiwtP//i87okBr//411vOjr+QAA + jXWM6OP5AACLTfRfXmSJDQAAAABbycOLTezoZhT//7hk/QAQw1WL7IPsJFdqCMZF3DAzwFmNfd3zq2ar + utjuAhCNTdyq6FkU//+FwF90F2oAagFopO4CEGiY7gIQ6B1aAQAywMnDi0XkoxxDBRCwAcnDuHWjAhDo + wJQBAIHsvAAAAINl/ACDDVBQAxD/U1ZXiWXwagJqAY1xAo19mOgd7wAAuwACAACL+421aP///8ZF/AHo + +PkAAL8ACAAAjbU4////xkX8Aujk+QAAjUXoUFfGRfwD/7Vc////jUXsUFP/dYxqAv81HEMFEOgMHP// + ZoXAdWpqAY1FmOgO/gAAi/APv0XsjZVo////jU2YiYVs////Zol1oWbHRaMBAOic7AAA/03oD79F6I2V + OP///41NmImFPP///2aJdaFmx0WjAgDod+wAAI1F6FBX/7Vc////jUXsUFP/dYxqAeuGZj1kAHQnagH/ + NRxDBRBoYO4CEOils///aDj9AhCNReRQx0XkTmG8AOjykgEAD7dNoWoFWuiDGP//jbU4////6Ej4AACN + tWj////oPfgAAI11mOht1wAAi030X15kiQ0AAAAAW8nDi03g6K1UAQC4Ev8AEMO4naMCEOhfkwEAgezA + AAAAg2X8AIMNUFADEP9TVleJZfCL2WoCagGNcwKNfZTouu0AAGohX421NP///8ZF/AHomfgAAL8AAgAA + jbVk////xkX8AuiF+AAAagJexkX8A2Y5M4vGdQ+LWy6D+wEPhZIAAABqH1iNTexRV/91iI1N6FFqIf+1 + WP///1D/NRxDBRDoxBr//2aFwA+FggAAAGoBjUWU6JL8AACL2A+/ReiNlTT///+NTZSJhTj///9miV2d + ZsdFnwEA6CDrAAAPv0XsjZVk////jU2UiYVo////ZoldnWaJdZ/oAOsAAI1F7FBX/3WIjUXoUGoh/7VY + ////agHrhjvedQdqIOll////x0XghQMAAGg4/QIQjUXg6ydmPWQAdCdqAf81HEMFEGhs7gIQ6BGy///H + ReROYbwAaDj9AhCNReRQ6F6RAQAPt02dagVa6O8W//+NtWT////otPYAAI21NP///+ip9gAAjXWU6NnV + AACLTfRfXmSJDQAAAABbycOLTdzoGVMBALimAAEQw6EUQwUQhcB0B1D/FcCwAhDDVr6I5AIQVv8VYLAC + EIXAdStW/xXUsAIQhcB1G1dQagH/FViwAhBofOQCEIv46JtTAQBfMsBew6MUQwUQaAjkAhBQ/xXQsAIQ + oxhDBRCwAV7DuG6bAhDoaZEBAIHs+AAAAINl/ACDDVBQAxD/gz0YQwUQAFNWV4ll8IvZdRTHRdzyAgAA + aDj9AhCNRdzpsAAAAI1zArABjX2Q6C7WAABqAliLy421LP///8ZF/AHoDfgAAGoDWIvLjbX8/v//xkX8 + Auj59wAAvwAEAACNtVz////GRfwD6F72AAC7//8AAIv7jXXkxkX8BOhkVQAAjUXgUI1F7FDGRfwFU/91 + 5DP2ajL/tSD///+JdeD/tVD///+Jdez/FRhDBRA7xnQqPeoAAAB0I1ZWaAjkAhCL+OibUgEAx0XYTmG8 + AGg4/QIQjUXYUOi/jwEAZjl17HVQagtaM8noTBX//zl15HQJ/3Xk6Awd//9ZjbVc////6AP1AACNtfz+ + ///o+PQAAI21LP///+jt9AAAjXWQ6B3UAACLTfRfXmSJDQAAAABbycMPt03sagVYjVWQ6NnpAACLdeQz + /0dmi0XsAV3sZoXAD4SMAAAAZol9mWbHRZsBAP92CI2dXP///+hR8gAAi9CNTZDoY+gAAGaJfZlmx0Wb + AgD/dgzoNfIAAIvQjU2Q6EfoAABmiX2ZZsdFmwMAiwaNTZDoOtIAAGaJfZlmx0WbBAAPt0YEjU2Q6CTS + AABmiX2ZZsdFmwUAD7dGBo1NkOgO0gAAg8YUR7v//wAA6WT///8Pt02ZagVa6EkU//+DfeQA6ff+//+L + TYzol1ABALhiAgEQw6H0QgUQhcB0B1D/FcCwAhDDiwCFwHQHUP8V/EIFEMNWV76I5AIQVv8VYLACEIv4 + hf91LFb/FdSwAhCL+IX/dRlQagH/FViwAhBofOQCEIv46AdRAQAywOtpiT30QgUQizXQsAIQaGTkAhBX + /9ZoUOQCEFej+EIFEP/WaDjkAhBXo/xCBRD/1mgk5AIQV6MAQwUQ/9ZoFOQCEFejBEMFEP/WaAjkAhBX + owxDBRD/1mj44wIQV6MIQwUQ/9ajEEMFELABX17DuIibAhDohI4BAIPsWFMz21aJXfyDDVBQAxD/OR0M + QwUQV4ll8Iv5dRTHReTyAgAAaDj9AhCNReTpLwEAAI13Ao1FnOjH7gAAiV3oxkX8AmaDPwJ1CTlfKsZF + 7wF1A4hd741F6FD/dcD/FQxDBRA7ww+F2QAAADhd74tF6GaLSChmiU3EZotIJGaJTcZmi0ggZolNymaL + SAhmiU3MZotIDGaJTc5mi0gQZolN0GaLQBRmiUXSjUXEUHQy/xWosQIQhcB1V1NT/xVYsAIQaOjjAhCL + +Oi/TwEAx0XgTmG8AGg4/QIQjUXg6YAAAAD/FXyxAhCFwHUlU1P/FViwAhBoULoCEIv46I1PAQDHRdxO + YbwAaDj9AhCNRdzrUWoLM8laQehHEv//xkX8ATld6HQJ/3Xo/xX8QgUQjUWc6C3sAACLTfRfXmSJDQAA + AABbycNTU2gU5AIQi/joOk8BAMdF2E5hvABoOP0CEI1F2FDoXowBAItN1OhSTgEAuEoFARDDuKKbAhDo + BI0BAIPsdFMz21aJXfyDDVBQAxD/OR0MQwUQV4ll8Iv5dRTHReTyAgAAaDj9AhCNReTp4AAAAI13Ao1F + gOhH7QAA2e5mgz8C3V20xkWoVHUJOV8qxkXvAXUDiF3viV3ojUXoUMZF/AL/daT/FQxDBRA7ww+FgQAA + AItF6GaLSChmiU3MZotIJGaJTc5mi0ggZolN0maLSAhmiU3UZotIDGaLQBBmiUXYjUWoZolN1lCNTczo + adYAADhd73QM3UW03CX4RAUQ3V20jU2o6AwR///GRfwBOV3odAn/dej/FfxCBRCNRYDo/OoAAItN9F9e + ZIkNAAAAAFvJw1NTaBTkAhCL+OgJTgEAx0XgTmG8AGg4/QIQjUXgUOgtiwEAi03c6CFNAQC4ewYBEMO4 + 1ZsCEOjTiwEAgezUAAAAg2X8AIMNUFADEP+DPRBDBRAAU1ZXiWXwi9l1FMdFyPICAABoOP0CEI1FyOn5 + AAAAjXMCsAGNvXz////oldAAAGoCWcZF/AFmOQt8CotDLoXAiUXYdQOJTdhqBFiLy42VIP///+gi6wAA + g2XoAL8ABAAAjbVI////xkX8A+jA8AAAM//GRfwEM8lBZoM7A4lN4Il91Il9xIl97Il95HwUi0NSO8d0 + DUj32BvAg8BliUXc6wfHRdxlAAAAM8CDfdxljZV8////D5TAjQSFAgAAAOi55AAA6wIz/41F1FD/tUT/ + //+NRcT/ddhQjUXsUGr/jUXoUP913Ff/FRBDBRA7x4lF0HQqPeoAAAB0I1dXaPjjAhCL+Oi8TAEAx0XM + TmG8AGg4/QIQjUXMUOjgiQEAi0XsO8d1TYtN5GoLWuhrD///jbVI////6DDvAADGRfwCOX3odAn/dej/ + FfxCBRCNhSD////oQ+kAAI21fP///+hAzgAAi030X15kiQ0AAAAAW8nDAUXkg33cZYt95I21fP///w+F + yAAAAGoGW+if4wAAi3Xoi0Xs/03shcAPhAkBAACLfeBmiX2FZsdFhwEAiwaNjXz////oRcwAAGaJfYVm + x0WHAgD/dgSNnUj////oUOwAAIvQjY18////6F/iAABmiX2FZsdFhwMAi0YIjY18////6AjMAABmiX2F + ZsdFhwQAi0YMjY18////6PDLAABmiX2FZsdFhwUAi0YQjY18////6NjLAABmiX2FZsdFhwYA/3YU6Onr + AACL0I2NfP///+j44QAAR4l94OlD////agJb6NfiAACLdeiLRez/TeyFwHRFi33gZol9hWbHRYcBAIsG + jY18////6IHLAABmiX2FZsdFhwIA/3YEjZ1I////6IzrAACL0I2NfP///+ib4QAAR4l94OuxgX3Q6gAA + AA+ED/7//w+3TYVqBVro2A3//421SP///+id7QAAxkX8AoN96ADpZ/7//4uNeP///+gUSgEAuD8IARDD + uBucAhDoxogBAIHsHAEAAIMNUFADEP+DPUhgAxABU1ZXiWXwi9l1FOgw9///i030X15kiQ0AAAAAW8nD + g2X8AIM9CEMFEAB1FMdF2PICAABoOP0CEI1F2OnZAAAAagVqAY1zAo19hOjn4gAAagJYi8uNlSj////G + RfwB6A7oAABqA1iLy42VAP///8ZF/ALo+ucAAGoEWIvLjZXY/v//xkX8A+jm5wAAvwAEAACNtVD////G + RfwE6IjtAAAz9ol17MZF/AbHReABAAAAiXXQiXXUiXXoiXXk6wIz9o1F0FCNRdRQjUXoUGgAIAAAjUXs + UGoD/7X8/v///7Uk/////7VM/////xUIQwUQO8aJRcx0Kj3qAAAAdCNWVmgI5AIQi/joskkBAMdF3E5h + vABoOP0CEI1F3FDo1oYBAItF6DvGdVaLTeRqC1roYQz//8ZF/AU5dex0Cf917P8V/EIFEI21UP///+gU + 7AAAjYXY/v//6DnmAACNhQD////oLuYAAI2FKP///+gj5gAAjXWE6CPLAADplP7//wFF5It95GoFW411 + hOiZ4AAAi3Xsi0Xo/03ohcAPhIsAAACLfeBmiX2NZsdFjwEA/3YMjZ1Q////6GHpAACL0I1NhOhz3wAA + Zol9jWbHRY8CAP92EOhF6QAAi9CNTYToV98AAGaJfY1mx0WPAwCLBo1NhOhKyQAAZol9jWbHRY8EAItG + BI1NhOg1yQAAZol9jWbHRY8FAItGCI1NhOggyQAAg8YUR4l94Oln////gX3M6gAAAA+Eh/7//w+3TY1q + BVroUAv//8ZF/AWDfewA6en+//+LTYDomkcBALj1CQEQw1WL7IPsJFPZ7lbdXehXM9tqBIvxWcZF3EOI + Xd1miV3eiU3giV3kiV3wiV30M8CNffirq+gtCP//O8OJRfh1Crm2AAAA6FYF//+LTfjoaAj//91GDo1N + 3NkY6M0K//9fXlvJw4tJHuhOCP//2QBRUd0cJGoHWmoUWejWCv//w1WL7IPsJFPZ7lbdXehXM9tqCIvx + WcZF3EOIXd1miV3eiU3giV3kiV3wiV30M8CNffirq+ivB///O8OJRfh1Crm2AAAA6NgE//+LTfjo6gf/ + /91GDo1N3N0Y6E8K//9fXlvJw4tJHujQB///3QBRUd0cJGoQWmoUWehYCv//w1WL7IPsJFPZ7lbdXehX + M9tqBIvxWcZF3EOIXd1miV3eiU3giV3kiV3wiV30M8CNffirq+gxB///O8OJRfh1Crm2AAAA6FoE//+L + TfjobAf//4v4ikYCPEl1B4tGCokH6yA8TnUK3UYO6EmBAQDr7otN+Oj7Bv//uYUDAADoIgT//41N3Oim + Cf//X15bycNVi+xRUYtJHugiB///iwCFwIlF/NtF/H0G3AX4+wIQUd1d+N1F+FHdHCRqCzPSWeiVCf// + ycNVi+yD7CRT2e5W3V3oVzPbagSL8VnGRdxDiF3dZold3olN4Ild5Ild8Ild9DPAjX34q6vobQb//zvD + iUX4dQq5tgAAAOiWA///i0346KgG//+LTgqJCI1N3OgNCf//X15bycOLSR7ojgb//4sIagta6QAJ//9V + i+yD7CRT2e5W3V3oVzPbagKL8VnGRdxDiF3dZold3olN4Ild5Ild8Ild9DPAjX34q6vo+AX//zvDiUX4 + dQq5tgAAAOghA///i0346DMG//9mi04KZokIjU3c6JYI//9fXlvJw4tJHugXBv//D7cIagta6YgI//9V + i+yD7CRT2e5W3V3oVzPbagKL8VnGRdxDiF3dZold3olN4Ild5Ild8Ild9DPAjX34q6vogAX//zvDiUX4 + dQq5tgAAAOipAv//i0346LsF//9mi04KZokIjU3c6B4I//9fXlvJw4tJHuifBf//D78Iagta6RAI//9V + i+yD7DRWi/GLViqLTkJC6CsG//9mhcB1Crm2AAAA6FYC//+LTkLoaAX///92Uo1N8FGLyOiPJv//hcBe + dAeLyOg0Av//D79N8ej4Cf//qAJ0AsnDjVXMjU3w6KcI//+FwHXbD79N8TPSQujrCf//69RVi+yD7DxW + i/GLViqLTkJXi34KQol9/OiyBf//ZoXAdQq5tgAAAOjdAf//i05C6O8E////dlKNTehRi8joFib//4XA + dAeLyOi8Af//i3Z2D79N6U6JdfjoeQn//6gCD4WJAAAAU41VxI1N6OglCP//hcB1YIB9xEN1N4tdyIXb + dDA73nICi96F23Qgi03g6I8E//+L8IvLi8HB6QLzpYvIg+ED86SLffyLdfjGBDsA6wPGBwCAfcRDdQiL + TeDoFQT//w+/Tekz0kLoGwn//0eJffzrB4vI6C0B//8Pv03p6PEI//+oAg+Eef///1tfXsnDVYvsg+w8 + U1aL8YtWKotOQleLfgpCiX386MAE//9mhcB1Crm2AAAA6OsA//+LTkLo/QP///92Uo1N6FGLyOgkJf// + hcB0B4vI6MoA//8Pv03p6I4I//+oAnQNM8lB6LgG//9fXlvJw41VxI1N6OgyB///M/Y7xnXOgH3EQ3Vj + i0XIO8Z0XIsPQDvOUHQQUVb/NeBCBRD/FVixAhDrDVb/NeBCBRD/FZCwAhCL2DvedGyJH4tFyItN4IlF + +OhxA///i/CLRfiLyMHpAov786WLyIPhA/Oki0XIi338xgQDAOsWiwc7xnQQUFb/NeBCBRD/FZSwAhCJ + N4B9xEN1CItN4OjhAv//D79N6TPSQujnB///g8cEiX386TH///+AfcRDdQiLTeDovAL//7m2AAAA6OP/ + /v/pKf///1WL7IPsNFaL8YtWKotOQleLfgpC6IsD//9mhcB1Crm2AAAA6Lb//v+LTkLoyAL///92Uo1N + 8FGLyOjvI///hcB0B4vI6JX//v8Pv03x6FkH//+oAnQEX17Jw41VzI1N8OgGBv//hcB12YB9zEx1BYtF + 0OsZgH3MTnUK3UXY6G98AQDrCYB9zEl1BYtF1IkHD79N8TPSQugkB///g8cE66lVi+yD7DRWi/GLViqL + TkJXi34KQujrAv//ZoXAdQq5tgAAAOgW//7/i05C6CgC////dlKNTfBRi8joTyP//4XAdAeLyOj1/v7/ + D79N8ei5Bv//qAJ0BF9eycONVcyNTfDoZgX//4XAddmAfcxOdQXdRdjdHw+/TfEz0kLonwb//4PHCOvE + VYvsg+w0Vovxi1Yqi05CV4t+CkLoZgL//2aFwHUKubYAAADokf7+/4tOQuijAf///3ZSjU3wUYvI6Moi + //+FwHQHi8jocP7+/w+/TfHoNAb//6gCdARfXsnDjVXMjU3w6OEE//+FwHXZgH3MTnUF3UXY2R8Pv03x + M9JC6BoG//+DxwTrxFWL7IPsNFaL8YtWKotOQleLfgpC6OEB//9mhcB1Crm2AAAA6Az+/v+LTkLoHgH/ + //92Uo1N8FGLyOhFIv//hcB0B4vI6Ov9/v8Pv03x6K8F//+oAnQEX17Jw41VzI1N8OhcBP//hcB12YB9 + zE51Ct1F2OjQegEAiQcPv03xM9JC6JAF//+DxwTrv1WL7IPsNFaL8YtWKotOQleLfgpC6FcB//9mhcB1 + Crm2AAAA6IL9/v+LTkLolAD///92Uo1N8FGLyOi7If//hcB0B4vI6GH9/v8Pv03x6CUF//+oAnQEX17J + w41VzI1N8OjSA///hcB12YB9zE51Ct1F2OhGegEAiQcPv03xM9JC6AYF//+DxwTrv1WL7IPsNFaL8YtW + KotOQleLfgpC6M0A//9mhcB1Crm2AAAA6Pj8/v+LTkLoCgD///92Uo1N8FGLyOgxIf//hcB0B4vI6Nf8 + /v8Pv03x6JsE//+oAnQEX17Jw41VzI1N8OhIA///hcB12YB9zE51C91F2Oi8eQEAZokHD79N8TPSQuh7 + BP//R0frv1WL7IPsNFaL8YtWKotOQleLfgpC6EMA//9mhcB1Crm2AAAA6G78/v+LTkLogP/+//92Uo1N + 8FGLyOinIP//hcB0B4vI6E38/v8Pv03x6BEE//+oAnQEX17Jw41VzI1N8Oi+Av//hcB12YB9zE51C91F + 2OgyeQEAZokHD79N8TPSQujxA///R0frv1WL7IPsNFPZ7jPb3V3YVlczwIvxi1Yqi05CxkXMQ4hdzWaJ + Xc6JXdCJXdSJXeCJXeSNfeirQqvolv/+/2aFwHUKubYAAADowfv+/4tOQujT/v7//3ZSjU3wUYvI6Pof + //87w3QHi8jooPv+/w+/TfHoWgP//4tOUjvBfRgryA+/RfFRUOgRHf//O8N0B4vI6Hj7/v8Pv03x6EYD + ///rJ/9OUo1VzI1N8Oj8Av//O8N1Dg+/TfEz0kLoMAP//+sHi8joRvv+/zleUnXU/05SX15bycNVi+yD + 7DRT2e4z291d2FZXM8CL8YtWKotOQsZFzEOIXc1miV3OiV3QiV3UiV3giV3kjX3oq0Kr6MP+/v9mhcB1 + Crm2AAAA6O76/v+LTkLoAP7+//92Uo1N8FGLyOgnH///O8N0B4vI6M36/v8Pv03x6IcC//+LTlI7wX0Y + K8gPv0XxUVDoPhz//zvDdAeLyOil+v7/D79N8ehzAv//6yf/TlKNVcyNTfDoKQL//zvDdQ4Pv03xM9JC + 6F0C///rB4vI6HP6/v85XlJ11P9OUl9eW8nDVYvsg+w0U9nuM9vdXdhWVzPAi/GLViqLTkLGRcxDiF3N + Zoldzold0Ild1Ild4Ild5I196KtCq+jw/f7/ZoXAdQq5tgAAAOgb+v7/i05C6C39/v//dlKNTfBRi8jo + VB7//zvDdAeLyOj6+f7/D79N8ei0Af//i05SO8F9GCvID79F8VFQ6Gsb//87w3QHi8jo0vn+/w+/TfHo + oAH//+sn/05SjVXMjU3w6FYB//87w3UOD79N8TPSQuiKAf//6weLyOig+f7/OV5SddT/TlJfXlvJw1WL + 7IPsNFNWV4vxi1YqM9tqBzPAWcZFzEyIXc1miV3OiV3QjX3U86uLTkKLfgpC6CX9/v9mhcB1Crm2AAAA + 6FD5/v+LTkLoYvz+//92Uo1N8FGLyOiJHf//O8N0B4vI6C/5/v8Pv03x6OkA//+LTlI7wX0YK8gPv0Xx + UVDooBr//zvDdAeLyOgH+f7/D79N8ejVAP//6y//TlKLB41VzI1N8IlF0OiGAP//O8N1EQ+/TfEz0kKD + xwTotwD//+sHi8jozfj+/zleUnXM/05SX15bycNVi+yD7DRWV4vxi1YqagczwFnGRcxOxkXNAGbHRc4U + AMdF0BAAAACNfdTzq4tOQot+CkLoTvz+/2aFwHUKubYAAADoefj+/4tOQuiL+/7//3ZSjU3wUYvI6LIc + //+FwHQHi8joWPj+/w+/TfHoEgD//4tOUjvBfRgryA+/RfFRUOjJGf//hcB0B4vI6DD4/v8Pv03x6P7/ + /v/rL/9OUt0HjVXM3V3YjU3w6K///v+FwHURD79N8TPSQoPHCOjg//7/6weLyOj29/7/g35SAHXL/05S + X17Jw1WL7IPsNFZXi/GLVipqB1kzwIlN0MZFzE7GRc0AZsdFzhQAjX3U86uLTkKLfgpC6Hv7/v9mhcB1 + Crm2AAAA6Kb3/v+LTkLouPr+//92Uo1N8FGLyOjfG///hcB0B4vI6IX3/v8Pv03x6D///v+LTlI7wX0Y + K8gPv0XxUVDo9hj//4XAdAeLyOhd9/7/D79N8egr//7/6y//TlLZB41VzN1d2I1N8Ojc/v7/hcB1EQ+/ + TfEz0kKDxwToDf/+/+sHi8joI/f+/4N+UgB1y/9OUl9eycNVi+yD7DiDZcwAVleL8YtWKmoHM8BZxkXI + TsZFyQBmx0XKCgCNfdDzq4tOQot+CkLop/r+/2aFwHUKubYAAADo0vb+/4tOQujk+f7//3ZSjU3sUYvI + 6Asb//+FwHQHi8josfb+/w+/Te3oa/7+/4tOUjvBfRgryA+/Re1RUOgiGP//hcB0B4vI6In2/v8Pv03t + 6Ff+/v/rO/9OUtsHiweFwH0G3AX4+wIQjVXI3V3UjU3s6Pz9/v+FwHURD79N7TPSQoPHBOgt/v7/6weL + yOhD9v7/g35SAHW//05SX17Jw1WL7IPsNINl0ABWV4vxi1YqagczwFnGRcxJxkXNAGbHRc4LAI191POr + i05Ci34KQujH+f7/ZoXAdQq5tgAAAOjy9f7/i05C6AT5/v//dlKNTfBRi8joKxr//4XAdAeLyOjR9f7/ + D79N8eiL/f7/i05SO8F9GCvID79F8VFQ6EIX//+FwHQHi8joqfX+/w+/TfHod/3+/+sv/05SiweNVcyN + TfCJRdToKP3+/4XAdREPv03xM9JCg8cE6Fn9/v/rB4vI6G/1/v+DflIAdcv/TlJfXsnDVYvsg+w0g2XQ + AFZXi/GLVipqBzPAWcZFzEnGRc0AZsdFzgYAjX3U86uLTkKLfgpC6PP4/v9mhcB1Crm2AAAA6B71/v+L + TkLoMPj+//92Uo1N8FGLyOhXGf//hcB0B4vI6P30/v8Pv03x6Lf8/v+LTlI7wX0YK8gPv0XxUVDobhb/ + /4XAdAeLyOjV9P7/D79N8eij/P7/6y//TlIPtweNVcyNTfCJRdToU/z+/4XAdRAPv03xM9JHQkfohfz+ + /+sHi8jom/T+/4N+UgB1y/9OUl9eycNVi+yD7DSDZdAAVleL8YtWKmoHM8BZxkXMScZFzQBmx0XOBgCN + fdTzq4tOQot+CkLoH/j+/2aFwHUKubYAAADoSvT+/4tOQuhc9/7//3ZSjU3wUYvI6IMY//+FwHQHi8jo + KfT+/w+/TfHo4/v+/4tOUjvBfRgryA+/RfFRUOiaFf//hcB0B4vI6AH0/v8Pv03x6M/7/v/rL/9OUg+/ + B41VzI1N8IlF1Oh/+/7/hcB1EA+/TfEz0kdCR+ix+/7/6weLyOjH8/7/g35SAHXL/05SX17Jw1WL7IPs + OFNWV4vZaggzwMZFyDBZjX3J86sPt0spZquqi0MKM/9Hi9eJRfzoz/r+/w+3SylqAlqJRfDowPr+/2aF + wIlF9HUDiX30i3NSM8BmOX30Zol7MQ+XwGaDYy8AQE5mOX30ZolDLYl17A+CvgAAAGY5ffBmiXsvD4Ke + AAAAjVXIjUsm6Lz5/v+FwHV2gH3IQ3VXi0XMhcB0UDvGiUX4cgOJdfiDffgAdDSLTeTobvb+/4tN5OgY + 9v7/i034i338i/CLwcHpAvOli8iD4QPzpItN5Oh39v7/i3XsM/9Hi0X4i038xgQIAOsGi0X8xgAAgH3I + Q3UIi03k6In1/v8BdfzrB4vI6K7y/v9mi0XwZv9DL2Y5Qy8PhmL///9mi0X0Zv9DMWY5QzEPhkL///9f + XlvJw1WL7IPsNFNWV4vZagjGRcwwM8BZjX3N86sPt0spZquqi3sKM9JCiX346Jz5/v8Pt0spagJaiUX0 + 6I35/v8z9mY7xolF/HUHx0X8AQAAADPAZoN9/AFmiXMvD5fAZsdDMQEAQGaDffwBZolDLQ+CEgEAAGaD + ffQBZsdDLwEAD4LvAAAAjVXMjUsm6IT4/v87xg+FwwAAAIB9zEMPhY0AAACLRdA7xg+EggAAAIsPQDvO + UHQQUVb/NeBCBRD/FVixAhDrDVb/NeBCBRD/FZCwAhA7xokHi03odEPoD/X+/4tF0ItN6IlF8Oiz9P7/ + iz+L8ItF8IvIwekC86WLyIPhA/Oki03o6BP1/v+LRfiLAItN0It9+MYEAQAz9usn6DP0/v+5tgAAAOha + 8f7/6xaLBzvGdBBQVv814EIFEP8VlLACEIk3gH3MQ3UIi03o6AP0/v+DxwSJffjrB4vI6CXx/v9mi0X0 + Zv9DL2Y5Qy8PhhH///9mi0X8Zv9DMWY5QzEPhu7+//9fXlvJw1WL7IPsMFZXi/FqCDPAxkXQMFmNfdHz + qw+3Tilmq6qLRgoz/0eL14lF+OgS+P7/D7dOKWoCWolF9OgD+P7/ZoXAiUX8dQOJffwzwGY5ffxmiX4x + D5fAZoNmLwBAZjl9/GaJRi1yZFNmOX30Zol+L3JKjV4mjVXQi8voC/f+/4XAdSSAfdBMdQqLRdSLTfiJ + AesOgH3QQ3UIi03s6Cvz/v+DRfgE6weLyOhP8P7/ZotF9Gb/Ri9mOUYvdrlmi0X8Zv9GMWY5RjF2nltf + XsnDVYvsg+wsU1ZXi/GLXgpqCMZF1DAzwFmNfdXzqw+3Tilmq6oz/0eL1+hG9/7/D7dOKWoCWolF+Og3 + 9/7/ZoXAiUX8dQOJffwzwGY5ffxmiX4xD5fAZoNmLwBAZjl9/GaJRi1yXGY5ffhmiX4vckSNVdSNTibo + Qvb+/4XAdSCAfdROdQfdReDdG+sOgH3UQ3UIi03w6GXy/v+DwwjrB4vI6Irv/v9mi0X4Zv9GL2Y5Ri92 + vGaLRfxm/0YxZjlGMXakX15bycNVi+yD7DBWV4vxaggzwMZF0DBZjX3R86sPt04pZquqi0YKM/9Hi9eJ + Rfjof/b+/w+3TilqAlqJRfTocPb+/2aFwIlF/HUDiX38M8BmOX38Zol+MQ+XwGaDZi8AQGY5ffxmiUYt + cmRTZjl99GaJfi9ySo1eJo1V0IvL6Hj1/v+FwHUkgH3QTnUK3UXci0X42RjrDoB90EN1CItN7OiY8f7/ + g0X4BOsHi8jovO7+/2aLRfRm/0YvZjlGL3a5ZotF/Gb/RjFmOUYxdp5bX17Jw1WL7IPsMFZXi/FqCDPA + xkXQMFmNfdHzqw+3Tilmq6qLRgoz/0eL14lF+Oix9f7/D7dOKWoCWolF9Oii9f7/ZoXAiUX8dQOJffwz + wGY5ffxmiX4xD5fAZoNmLwBAZjl9/GaJRi1yaVNmOX30Zol+L3JPjV4mjVXQi8voqvT+/4XAdSmAfdBO + dQ/dRdzoHmsBAItN+IkB6w6AfdBDdQiLTezoxfD+/4NF+ATrB4vI6Ont/v9mi0X0Zv9GL2Y5Ri92tGaL + Rfxm/0YxZjlGMXaZW19eycNVi+yD7DBWV4vxaggzwMZF0DBZjX3R86sPt04pZquqi0YKM/9Hi9eJRfjo + 3vT+/w+3TilqAlqJRfToz/T+/2aFwIlF/HUDiX38M8BmOX38Zol+MQ+XwGaDZi8AQGY5ffxmiUYtcmRT + Zjl99GaJfi9ySo1eJo1V0IvL6Nfz/v+FwHUkgH3QTnUKi0XYi034iQHrDoB90EN1CItN7Oj37/7/g0X4 + BOsHi8joG+3+/2aLRfRm/0YvZjlGL3a5ZotF/Gb/RjFmOUYxdp5bX17Jw1WL7IPsLFNWV4vxi14KagjG + RdQwM8BZjX3V86sPt04pZquqM/9Hi9foEvT+/w+3TilqAlqJRfjoA/T+/2aFwIlF/HUDiX38M8BmOX38 + Zol+MQ+XwGaDZi8AQGY5ffxmiUYtcl1mOX34Zol+L3JFjVXUjU4m6A7z/v+FwHUhgH3UTnUJZotF3GaJ + A+sOgH3UQ3UIi03w6C/v/v9DQ+sHi8joVez+/2aLRfhm/0YvZjlGL3a7ZotF/Gb/RjFmOUYxdqNfXlvJ + w1WL7IPsLFNWV4vxi14KagjGRdQwM8BZjX3V86sPt04pZquqM/9Hi9foTPP+/w+3TilqAlqJRfjoPfP+ + /2aFwIlF/HUDiX38M8BmOX38Zol+MQ+XwGaDZi8AQGY5ffxmiUYtcl1mOX34Zol+L3JFjVXUjU4m6Ejy + /v+FwHUhgH3UTnUJZotF3GaJA+sOgH3UQ3UIi03w6Gnu/v9DQ+sHi8joj+v+/2aLRfhm/0YvZjlGL3a7 + ZotF/Gb/RjFmOUYxdqNfXlvJw1WL7IPsMFPZ7jPb3V3cVlfGRdBDiF3RZold0old1Ild2Ild5Ild6DPA + i/EPt04pjX3sqzPSq4t+CkLodPL+/w+3TilqAlqJRfjoZfL+/2Y7w4lF/HUHx0X8AQAAAItOUjPAZoN9 + /AFmiV4vD5fAZoleMUBmiUYt6Ljt/v87w4lF7HUKubYAAADo4er+/4tN7OhB7v7/i03s6Ovt/v9m/0Yx + iUX0ZotGMWY7Rfx3VGaDffgBZsdGLwEAcjn/dlKLRfSL1+h8B///jVXQjU4miUXU6Bfx/v87w3UFA35S + 6weLyOiI6v7/ZotF+Gb/Ri9mOUYvdsdmi0X8Zv9GMWY5RjF2rI110OiED///X15bycNVi+yD7DhT2e4z + wN1d1FZXxkXIQ8ZFyQBmiUXKiUXMiUXQiUXciUXgjX3kq4vZD7dLKauLewoz0r4AAQAAQol1+Il98Ohb + 8f7/D7dLKWoCWolF7OhM8f7/ZoXAiUX8dQfHRfwBAAAAM8Bmg338AYvOD5fAZoNjLwBmg2MxAEBmiUMt + 6J7s/v+FwIlF5HUKubYAAADox+n+/4tN5Ogn7f7/i03k6NHs/v9m/0MxiUX0ZotDMWY7RfwPh8oAAABm + g33sAWbHQy8BAA+CpwAAAIsHhcB0bVD/FVyxAhCL8Dt1+H4+i03k6Azt/v+LTeSL1ugx7f7/ZoXAi03k + dRHoLez+/7m2AAAA6FTp/v/rE+i17P7/i03k6F/s/v+JRfSJdfiF9nQdi86LwYl1zIs3i330wekC86WL + yIPhA/Oki33w6wSDZcwAjVXIjUsm6I7v/v+FwHUIg8cEiX3w6weLyOj86P7/ZotF7Gb/Qy9mOUMvD4ZZ + ////ZotF/Gb/QzFmOUMxD4Y2////jXXI6PAN//9fXlvJw1WL7IPsLGaDZdYAg2XYAFNWV4vxagdZM8DG + RdRMxkXVAI193POrD7dOKYt+CjPbQ4vT6Nnv/v8Pt04pagJaiUX46Mrv/v9mhcCJRfx1A4ld/DPAZjld + /GaJXjEPl8Bmg2YvAEBmOV38ZolGLXJGZjld+GaJXi9yLosHjVXUjU4miUXY6MLu/v+FwHUFg8cE6weL + yOgz6P7/ZotF+Gb/Ri9mOUYvdtJmi0X8Zv9GMWY5RjF2ul9eW8nDVYvsg+wsU1ZXi/FqB1kzwMZF1E7G + RdUAZsdF1hQAx0XYEAAAAI193POrD7dOKYt+CjPbQ4vT6Bzv/v8Pt04pagJaiUX46A3v/v9mhcCJRfx1 + A4ld/DPAZjld/GaJXjEPl8Bmg2YvAEBmOV38ZolGLXJGZjld+GaJXi9yLt0HjVXUjU4m3V3g6AXu/v+F + wHUFg8cI6weLyOh25/7/ZotF+Gb/Ri9mOUYvdtJmi0X8Zv9GMWY5RjF2ul9eW8nDVYvsg+wsU1ZXi/Fq + B1mJTdgzwMZF1E7GRdUAZsdF1hQAjX3c86sPt04pi34KM9tDi9PoY+7+/w+3TilqAlqJRfjoVO7+/2aF + wIlF/HUDiV38M8BmOV38ZoleMQ+XwGaDZi8AQGY5XfxmiUYtckZmOV34ZoleL3Iu2QeNVdSNTibdXeDo + TO3+/4XAdQWDxwTrB4vI6L3m/v9mi0X4Zv9GL2Y5Ri920maLRfxm/0YxZjlGMXa6X15bycNVi+yD7DCD + ZdQAU1ZXi/FqB1kzwMZF0E7GRdEAZsdF0goAjX3Y86sPt04pi34KM9tDi9Poqe3+/w+3TilqAlqJRfjo + mu3+/2aFwIlF/HUDiV38M8BmOV38ZoleMQ+XwGaDZi8AQGY5XfxmiUYtclJmOV34ZoleL3I6iwfbB4XA + fQbcBfj7AhCNVdDdXdyNTibohuz+/4XAdQWDxwTrB4vI6Pfl/v9mi0X4Zv9GL2Y5Ri92xmaLRfxm/0Yx + ZjlGMXauX15bycNVi+yD7CyDZdgAU1ZXi/FqB1kzwMZF1EnGRdUAZsdF1gsAjX3c86sPt04pi34KM9tD + i9Po4+z+/w+3TilqAlqJRfjo1Oz+/2aFwIlF/HUDiV38M8BmOV38ZoleMQ+XwGaDZi8AQGY5XfxmiUYt + ckZmOV34ZoleL3IuiweNVdSNTiaJRdzozOv+/4XAdQWDxwTrB4vI6D3l/v9mi0X4Zv9GL2Y5Ri920maL + Rfxm/0YxZjlGMXa6X15bycNVi+yD7CyDZdgAU1ZXi/FqB1kzwMZF1EnGRdUAZsdF1gYAjX3c86sPt04p + i34KM9tDi9PoKez+/w+3TilqAlqJRfjoGuz+/2aFwIlF/HUDiV38M8BmOV38ZoleMQ+XwGaDZi8AQGY5 + XfxmiUYtckZmOV34ZoleL3IuD7cHjVXUjU4miUXc6BHr/v+FwHUER0frB4vI6IPk/v9mi0X4Zv9GL2Y5 + Ri920maLRfxm/0YxZjlGMXa6X15bycNVi+yD7CyDZdgAU1ZXi/FqB1kzwMZF1EnGRdUAZsdF1gYAjX3c + 86sPt04pi34KM9tDi9Pob+v+/w+3TilqAlqJRfjoYOv+/2aFwIlF/HUDiV38M8BmOV38ZoleMQ+XwGaD + Zi8AQGY5XfxmiUYtckZmOV34ZoleL3IuD78HjVXUjU4miUXc6Ffq/v+FwHUER0frB4vI6Mnj/v9mi0X4 + Zv9GL2Y5Ri920maLRfxm/0YxZjlGMXa6X15bycNVi+yD7CRT2e5W3V3oM9tXi/GLTi7GRdxDiF3dZold + 3olN4Ild5Ild8Ild9DPAjX34q6voNub+/4vIO8uJTfh0N+jK5v7/i14ui034i3YK6G7m/v+L+IvLi8HB + 6QLzpYvIg+ED86SLTfjo0eb+/41N3Oi+6P7/6wq5tgAAAOgm4/7/X15bycOLQQqLAIsI6Rjp/v+LQQqL + COkO6f7/VYvsUYtBCosIhcl1BohN/41N/+gX6f7/ycNVi+yD7CRT2e4z291d6FZXxkXcQ4hd3WaJXd6J + XeCJXeSJXfCJXfQzwI19+KuL8YtOLqvof+X+/4vIO8uJTfh0LegT5v7/i0346L3l/v//di6LVgrobv/+ + /4tN+IlF4Ogk5v7/jU3c6BHo/v/rCrm2AAAA6Hni/v9fXlvJw1WL7FGLSQqFyXUGiE3/jU3/6ILo/v/J + w4tEJASLAN0AwgQAi0QkBN0AwgQAi0QkBIsA2QDCBACLRCQE2QDCBABVi+yD7BCLQQqLAIsIi0AEg2X4 + AIlF/IFl/AAAAICJTfAl////f4lF9N9t8FHfbfhRM9LZ4N7B3V3w3UXw3RwkahRZ6KDn/v/Jw1WL7IPs + EItBCosIi0AEg2X4AIlF/IFl/AAAAICJTfAl////f4lF9N9t8FHfbfhRM9LZ4N7B3V3w3UXw3RwkahRZ + 6Fjn/v/Jw1WL7FFRi0EKiwDfKFFRM9LdXfjdRfjdHCRqFFnoNef+/8nDVYvsUVGLQQrfKFFRM9LdXfjd + RfjdHCRqFFnoFOf+/8nDVYvsUVGLQQqLAIsIhcl8CmoLWujc5v7/ycOFyYlN/NtF/H0G3AX4+wIQUd1d + +N1F+FHdHCRqCzPSWejT5v7/ycNVi+xRUYtBCosIhcl8CmoLWuid5v7/ycOFyYlN/NtF/H0G3AX4+wIQ + Ud1d+N1F+FHdHCRqCzPSWeiU5v7/ycOLRCQEiwCLAMIEAItEJASLAMIEAItEJASLAA+3AMIEAItEJAQP + twDCBACLRCQEiwBmiwDCBACLRCQEZosAwgQAi0QkBIsAZg+2AMIEAItEJARmD7YAwgQAi0QkBIsAZg++ + AMIEAItEJARmD74AwgQAVYvsg+wkU9nuVt1d6IvxM9tXM8lBxkXcQ4hd3WaJXd6JTeCJXeSJXfCJXfQz + wI19+Kur6Pzi/v+LyDvLiU34dCToQuP+/4tOCjvLdAyLCTvLdAaKCYgI6wKIGI1N3OiX5f7/6wq5tgAA + AOj/3/7/X15bycNVi+yD7CRT2e5W3V3oi/Ez21czyUHGRdxDiF3dZold3olN4Ild5Ild8Ild9DPAjX34 + q6voiOL+/4vIO8uJTfh0HujO4v7/i04KO8t0BooJiAjrAogYjU3c6Cnl/v/rCrm2AAAA6JHf/v9fXlvJ + w4tBCosAi0kqiQjDi0EKi0kqiQjDU1VWi9mLS0JX6NLi/v9mgzsDdQ6LQyqLa1I7xXMHi+jrA4trKotL + Quhl4v7/i3sKi82L8IvBwekC86WLyIPhA/Oki0tCX15dW+nB4v7/UVNVi9mLS0KLawpWV+iA4v7/ZoM7 + AnQ0i0NSOUMqiUQkEHwoi0tC6Bji/v+LTCQQi/CLwcHpAov986WLyIPhA/Oki0NSxkQo/wDrLItDKotL + QolEJBDo6eH+/4vwi0QkEIvIwekCi/3zpYvIg+ED86SLQyrGBCgAi0tCX15dW4PEBOk64v7/VovxikYC + PENXi34KdTKLViqLTkJC6E/i/v9mhcB1Crm2AAAA6Hre/v+LTkLojOH+/+g19f7/iw+JAV+JUQRew4B+ + Jkl1BotGLpnr6jxOdQrdRjLoXlsBAOvcX7mFAwAAXuk93v7/VovxikYCPENXi34KdTCLViqLTkJC6Onh + /v9mhcB1Crm2AAAA6BTe/v+LTkLoJuH+/+jP9P7/iQeJVwRfXsOAfiZJdQaLRi6Z6+w8TnUK3UYy6Ppa + AQDr3l+5hQMAAF7p2d3+/1aL8YpGAjxDV4t+CnUyi1Yqi05CQuiF4f7/ZoXAdQq5tgAAAOiw3f7/i05C + 6MLg/v/oBvX+/4sPiQFfiVEEXsOAfiZJdQaLRi6Z6+o8TnUK3UYy6JRaAQDr3F+5hQMAAF7pc93+/1aL + 8YpGAjxDV4t+CnUwi1Yqi05CQugf4f7/ZoXAdQq5tgAAAOhK3f7/i05C6Fzg/v/ooPT+/4kHiVcEX17D + gH4mSXUGi0YumevsPE51Ct1GMugwWgEA695fuYUDAABe6Q/d/v+LRCQE3UQkCIsA3RjCDADdRCQIi0Qk + BN0YwgwAi0QkBNlEJAiLANkYwggA2UQkCItEJATZGMIIAItEJASLAItMJAiJCMIIAItEJAiLTCQEiQHC + CACLRCQEiwCLTCQIiQjCCACLRCQIi0wkBIkBwggAi0QkBIsAi0wkCIkIwggAi0QkCItMJASJAcIIAItE + JASLAGaLTCQIZokIwggAZotEJAiLTCQEZokBwggAi0QkBIsAZotMJAhmiQjCCABmi0QkCItMJARmiQHC + CACLRCQEiwCKTCQIiAjCCACKRCQIi0wkBIgBwggAi0QkBIsAikwkCIgIwggAikQkCItMJASIAcIIAIN5 + KgB0LWaDOQJWizXkQgUQdAOLcVKLQQqLSUJqAf8wagHo/t7+/1BqAFb/FbiwAhBew4tBCosAZoMgAMOD + eSoAdCtmgzkCVos15EIFEHQDi3FSagH/cQqLSUJqAejD3v7/UGoAVv8VuLACEF7Di0EKZoMgAMOLRCQE + i0wkCIsAigmICMIIAItEJAiKAItMJASIAcIIAIMlUFADEABWVzPAQIH6FwAAwGoFo+CAAxCJFeSAAxBZ + vtDaAhC/6IADEPOlZqV1DmoWvnjaAhC/aIEDEOsngfoFAADAdRNqFlm+GNoCEL9ogQMQ86VmpesPaga+ + /NkCEL9ogQMQWfOlX17DoeBCBRCFwHQHUP8VmLACELno2gIQ6QTb/v9Vi+yD7DRTVovxi1Yqi05Ci14K + V0LonN7+/2aFwHUKubYAAADox9r+/4tOQujZ3f7//3ZSjU3wUYvI6AD//v8z/zvHdAeLyOik2v7/ZoM+ + A3ULizXkQgUQ6ewAAACLdnbp5AAAAI1VzI1N8OgN4f7/O8cPhcoAAACAfcxDD4WeAAAAi0XQO8cPhIsA + AACLCzvPdBSDwARQUVf/NeBCBRD/FVixAhDrEo1EAAJQV/814EIFEP8VkLACEDvHiQOLTeh0Rf910FD/ + ddDoPN3+/1BXVv8VuLACEIXAdAuLA4tN0GaJPEjrS4tN6OjR3P7/agFX/xVYsAIQaFTQAhCL+OitHAEA + M//rKuiz3P7/ubYAAADo2tn+/+sZi03o6J/c/v//M1f/NeBCBRD/FZSwAhCJOw+/TfEz0kLolOH+/4PD + BOsHi8jop9n+/w+/TfHoa+H+/6gCD4QL////X15bycNVi+yD7ERT2e5W3V3IM/ZXM8DGRbxDxkW9AGaJ + db6JdcCJdcSJddCJddSNfdiri9mLUyqLS0Kri0MKQolF/OgU3f7/ZoXAv7YAAAB1B4vP6D3Z/v+LS0Lo + T9z+//9zUo1N4FGLyOh2/f7/O8Z0B4vI6BzZ/v8Pv03h6Nbg/v+LS1I7wX0YK8gPv0XhUVDojfr+/zvG + dAeLyOj02P7/D79N4ejC4P7/i0N20ehmgzsEiUX0oeRCBRB0BouDmgAAAItLUolF+OiN2/7/O8aJRdh1 + B4vP6LnY/v+LTdjoGdz+/4tN2OjD2/7/iUXw6YgAAAD/S1L/dfSLRfyLe1LomfX+/4XAdEBWVlf/dfBq + //91/Fb/dfj/FaywAhA7xnQFiUXA6yWNdbzohv3+/2oBagD/FViwAhBogNACEIv46BAbAQAz9usDiXXA + jVW8jU3g6Nvf/v87xnUai038i0X0jQRBD79N4TPSQolF/OgD4P7/6weLyOgZ2P7/OXNSD4Vv/////0tS + jXW86CX9/v9fXlvJw1WL7IPsMFNWV4vxi14KagjGRdAwM8BZjX3R86sPt04pZquqM/9Hi9foGN/+/w+3 + TilqAlqJRfToCd/+/2aFwIlF/HUDiX38M8BmOX38D5fAZoNmLwBmg2YxAEBmgz4DZolGLaHkQgUQdAOL + RnZmOX38iUX4Zol+MQ+C1AAAAGY5ffRmiX4vD4K0AAAAjVXQjU4m6Pbd/v+FwA+FiAAAAIB90EN1ZTlF + 1HRgi03s6Lba/v+LRlKLTdQ7yHwCi8hQU1GLTezoUdr+/1BqAP91+P8VuLACEItN7Iv46Lja/v+F/3QH + ZoMkewDrJItN7Ojd2f7/agFqAP8VWLACEGhU0AIQi/jouBkBAOsEZoMjAIB90EN1CItN7Oiz2f7/i0ZS + M/+NHENH6weLyOjS1v7/Zv9GL2aLRi9mO0X0D4ZM////ZotF/Gb/RjFmOUYxD4Ys////X15bycNVi+yD + 7DBTVleL8YteCmoIxkXQMDPAWY190fOrD7dOKWarM9JCqujD3f7/D7dOKWoCWolF9Oi03f7/M/9mO8eJ + Rfx1B8dF/AEAAAAzwGaDffwBZol+Lw+XwGaJfjFAZoM+AmaJRi2h5EIFEHQDi0ZSZoN9/AGJRfhmx0Yx + AQAPgigBAABmg330AWbHRi8BAA+CBQEAAI1V0I1OJuiW3P7/O8cPhdkAAACAfdBDD4WmAAAAi0XUO8cP + hJsAAACLCzvPjUQAAlB0EFFX/zXgQgUQ/xVYsQIQ6w1X/zXgQgUQ/xWQsAIQO8eJA4tN7HRZ6B7Z/v// + ddSLTez/M/911OjA2P7/UFf/dfj/FbiwAhCLTeyL+Ogo2f7/hf90CYsDZoMkeADrHotN7OhL2P7/agFq + AP8VWLACEGhU0AIQi/joJhgBADP/6yfoLNj+/7m2AAAA6FPV/v/rFosDO8d0EFBX/zXgQgUQ/xWUsAIQ + iTuAfdBDdQiLTezo/Nf+/4PDBOsHi8joIdX+/2aLRfRm/0YvZjlGLw+G+/7//2aLRfxm/0YxZjlGMQ+G + 2P7//19eW8nDVYvsg+w8U9nuM9vdXdBWVzPAxkXEQ4hdxWaJXcaJXciJXcyJXdiJXdyNfeCrq4vxi0YK + D7dOKTP/R4vXiUX46Pnb/v8Pt04pagJaiUXw6Orb/v9mO8OJRfx1A4l9/ItOUjPAZjl9/Iv5D5fA0e9m + iV4vZoleMYl96EBmgz4DZolGLaHkQgUQdAOLRnaJRfToKtf+/zvDiUXgdQq5tgAAAOhT1P7/i03g6LPX + /v+LTeDoXdf+/2b/RjGJRexmi0YxZjtF/A+HjgAAAGaDffABZsdGLwEAcm9TU/92Uv917Gr//3X4U/91 + 9P8VrLACEDvDdAWJRcjrIItN4OjI1v7/agFT/xVYsAIQaIDQAhCL+OikFgEAi33ojVXEjU4m6FXa/v87 + w3ULi0X4jQR4iUX46weLyOjA0/7/ZotF8Gb/Ri9mOUYvdpFmi0X8Zv9GMWY5RjEPhnL///+NdcTouPj+ + /19eW8nDVYvsg+xAU9nuM9vdXcxWVzPAxkXAQ4hdwWaJXcKJXcSJXciJXdSJXdiNfdyrq4vxi0YKD7dO + KTP/R4vXx0X4AAEAAIlF/OiN2v7/D7dOKWoCWolF6Oh+2v7/ZjvDiUX0dQOJffSLffQzwGaD/wEPl8Bm + iV4vZoleMUBmgz4CZolGLaHkQgUQdAOLRna5AAEAAIlF7OjA1f7/O8OJRdx1Crm2AAAA6OnS/v+LTdzo + Sdb+/4tN3Ojz1f7/iUXw6egAAABmg33oAWbHRi8BAA+C1wAAAItF/IsAO8MPhJYAAABQ/xVosQIQjTwA + O334iUXkfj6LTdzoMNb+/4tN3IvX6FXW/v9mhcCLTdx1EehR1f7/ubYAAADoeNL+/+sT6NnV/v+LTdzo + g9X+/4lF8Il9+Dv7dEKLRfxTU/91+P918P915P8wU/917P8VrLACEDvDdAWJRcTrIotN3OgD1f7/agFT + /xVYsAIQaIDQAhCL+OjfFAEA6wOJXcSNVcCNTibojtj+/zvDdQaDRfwE6weLyOj+0f7/ZotF6Gb/Ri9m + OUYvD4Ys////i330Zv9GMWY5fjEPhgr///+NdcDo8/b+/19eW8nDVYvsg+wsU9nuM9vdXeBWV8ZF1EOI + XdVmiV3WiV3YiV3ciV3oiV3sM8CNffCri/Gri34u0eeLz+hY1P7/O8OJRfB0fv92LotGCuiJ7v7/O8OJ + Rfh0X4tN8OjZ1P7/ZoM+AqHkQgUQdAOLRlKLTfBTU1eJRfzob9T+/1D/dfj/dgpT/3X8/xWssAIQi03w + i/Do0dT+/zvzdAWJddjrGmoBU/8VWLACEGiA0AIQi/jo3BMBAOsXiV3YjU3U6JvW/v/rCrm2AAAA6APR + /v9fXlvJw1WL7IPsKFPZ7jPb3V3kVlczwMZF2EOIXdlmiV3aiV3ciV3giV3siV3wjX30q4vxq4tGCosA + O8MPhIcAAABQ/xVosQIQi/g7+3R6jQw/6HLT/v87w4lF9HRhi8joBtT+/2aDPgGh5EIFEHQDi0Yui030 + U4lF/FONBD9Q6JnT/v9Qi0YKV/8wU/91/P8VrLACEItN9Ivw6PvT/v8783QFiXXc6yRqAVP/FViwAhBo + gNACEIv46AYTAQDrCrm2AAAA6DrQ/v+JXdyNTdjou9X+/19eW8nDVYvsg+woU9nuVt1d5DPbV8ZF2EOI + XdlmiV3aiV3ciV3giV3siV3wM8CNffSL8f92Cqur/xVosQIQi/g7+3R4jQw/6KnS/v87w4lF9HRfi8jo + PdP+/2aDPgGh5EIFEHQDi0Yui030U4lF/FONBD9Q6NDS/v9QV/92ClP/dfz/FaywAhCLTfSL8Og00/7/ + O/N0BYl13OskagFT/xVYsAIQaIDQAhCL+Og/EgEA6wq5tgAAAOhzz/7/iV3cjU3Y6PTU/v9fXlvJw1NV + Vovxi24qi14KV4t+Uk+F7XRhi05C6K/S/v8774vFfAKLx2aDPgOLLeRCBRB0A4tudotOQldTUOg/0v7/ + UGoAVf8VuLACEItOQov46KjS/v+F/3QHZoMkewDrHGoBagD/FViwAhBoVNACEIv46LARAQDrBGaDIwBf + Xl1bw2okaFD8AhDoWN/+/4vxiXXcM/+JfeSLXgqJXdiKRiY8Qw+F1QAAADvfD4TNAAAAi0YqiUXQjUwA + AolN1Il9/IsDUTvHdBFQagz/NeBCBRD/FVixAhDrDmoM/zXgQgUQ/xWQsAIQi/iJfeSDTfz/6x2LReyL + AIsQ6PTy///Di2Xog038/4t13It95Itd2IX/D4SpAAAAi05C6LDR/v9mgz4CoeRCBRB0A4tGUolF4P91 + 1Ff/ddCLTkLoQtH+/1BqAP914P8VuLACEIlFzItOQuio0f7/i0XMhcB0CWaDJEcAiTvrbWoBagD/FViw + AhBoVNACEIv46KsQAQDrVTwwdUc733RDiwM7x3QUUFf/NeBCBRD/FZSwAhCFwHQOiTtqC1ozyehT0/7/ + 6ydXV/8VWLACEGjw2QIQi/joZxABADPJ6JUPAQDrCrmFAwAA6JTN/v/oSd7+/8NqKGhg/AIQ6AHe/v+L + 8Yl13INl5ACLfiqJfdiNTD8CiU3Um4Nl/ACLRgpRhcB0EVBqBP814EIFEP8VWLECEOsOagT/NeBCBRD/ + FZCwAhCL2Ild5JuDTfz/6x2LReyLAIsQ6LPx///Di2Xog038/4t13Itd5It92IXbD4SeAAAAhf90X4tO + Quhr0P7/ZoM+AqHkQgUQdAOLRlKJReD/ddRTV4tOQuj/z/7/UGoA/3Xg/xW4sAIQi/iLTkLoZtD+/4X/ + dAdmgyR7AOscagFqAP8VWLACEGhU0AIQi/jobg8BAOsEZoMjAIXbfAxqC1qLy+gw0v7/6y6JXdDbRdCF + 230G3AX4+wIQ3V3I3UXIUVHdHCQz0moLWegn0v7/6wczyehfDgEA6B/d/v/DaiRocPwCEOjX3P7/i9mJ + XeAz/4l95ItzCol13IpDJjxDD4XbAAAAO/cPhNMAAACbiX38iwY7x3QWi0sqQVFQagT/NeBCBRD/FVix + AhDrE4tDKkBQagT/NeBCBRD/FZCwAhCJReSbg038/+sci0XsiwCLEOh38P//w4tl6INN/P+LXeCLddwz + /4tF5DvHD4SyAAAAiQaLS0LoL8/+/4tDKotLQolF2OjTzv7/i/CLfeSLRdiLyMHpAvOli8iD4QPzpItD + Kot15MYEBgCLS0LoKM/+/4X2fASLzutMiXXU20XUhfZ9BtwF+PsCEN1dzN1FzFFR3RwkM9JqC1noGNH+ + /+tWPDB1SDv3dESLBjvHdBRQV/814EIFEP8VlLACEIXAdA+JPjPJQWoLWujL0P7/6ydXV/8VWLACEGjw + 2QIQi/jo3w0BADPJ6A0NAQDrCrmFAwAA6AzL/v/owdv+/8NqIGiA/AIQ6Hnb/v+L2Yld4INl5ACbg2X8 + AItDCoXAdBaLSypBUVBqBP814EIFEP8VWLECEOsTi0MqQFBqBP814EIFEP8VkLACEIlF5JuDTfz/6xeL + ReyLAIsQ6DHv///Di2Xog038/4td4It95IX/dHKLS0Lo9M3+/4tDKotLQolF3OiYzf7/i/CLRdyLyMHp + AvOli8iD4QPzpItDKot15MYEBgCLS0Lo8M3+/4X2fAxqC1qLzujhz/7/6y6JddjbRdiF9n0G3AX4+wIQ + 3V3Q3UXQUVHdHCQz0moLWejYz/7/6wczyegQDAEA6NDa/v/D/3EK/xVssQIQhcB1K/8VWLACEIXAdQhq + CzPJWkHrH1dqAGoAaKzZAhCL+OilDAEAM8lf6dILAQBqC1pqAlnpaM/+//9xCv8VYLECEIXAdApqC1qL + yOlRz/7/V2oAagD/FViwAhBovNkCEIv46GQMAQAzyV/pkQsBAGpC/3Eu/3EK/xV4sQIQhcB0CmoLWovI + 6RbP/v9XagBqAP8VWLACEGjI2QIQi/joKQwBADPJX+lWCwEA/3EK/xV0sQIQhcB0H1dqAGoA/xVYsAIQ + aNjZAhCL+Oj9CwEAM8lf6SoLAQDD/3EKakL/FWSxAhCFwHQKagtai8jpsc7+/1dqAGoA/xVYsAIQaOTZ + AhCL+OjECwEAM8lf6fEKAQCh6EIFEIXAdA5qAP814EIFEP/Qi8jrAjPJagta6XHO/v+h7EIFEIXAdBf/ + cQpqAP814EIFEP/QhcAPn8APtsjrAjPJ6bfO/v+LQQqFwHQTUGoA/zXgQgUQ/xVwsQIQi8jrAjPJagta + 6SbO/v9TVlcz/4vxi0YuRzvHfAU7RlJ+CrmFAwAA6HLI/v//Ti6LRi6LTgqLdlIr8I0cgccFUFADEP// + //90NosDhcB0KlBqAP814EIFEP8VlLACEIXAdRdQagH/FViwAhBo8NkCEIv46OcKAQAz/4PDBE51yoP/ + AV8PlMBeD7bIW+kRzv7/i0EKhcB0NosAhcB0MFBqAP814EIFEP8VlLACEIXAdR1XUFD/FViwAhBo8NkC + EIv46JkKAQAzyV/pxgkBAMOLQQqFwHQwUGoA/zXgQgUQ/xWUsAIQhcB1HVdQUP8VWLACEGjw2QIQi/jo + YQoBADPJX+mOCQEAw2oYaJD8AhDoC9j+/4Nl5ACbg2X8AItBCv9xLoXAdBFQagz/NeBCBRD/FVixAhDr + DmoM/zXgQgUQ/xWQsAIQiUXkm+sQi0XsiwCLEOjT6///w4tl6INN/P+LTeSFyXwKagta6MfM/v/rJYlN + 4NtF4IXJfQbcBfj7AhDdXdjdRdhRUd0cJDPSagtZ6L7M/v/ov9f+/8NqHGig/AIQ6HfX/v+L8Yl14DP/ + iX3kOX4KdQq5hQMAAOjfxv7/m4l9/P92LmoM/zXgQgUQ/xWQsAIQiUXkm4NN/P/rGotF7IsAixDoP+v/ + /8OLZeiDTfz/i3Xgi0XkhcB0B4tOCokBfAxqC1qLyOgnzP7/6yWJRdzbRdyFwH0G3AX4+wIQ3V3U3UXU + UVHdHCQz0moLWegezP7/6B/X/v/DahhosPwCEOjX1v7/g2XkAJuDZfwA/3EKagz/NeBCBRD/FZCwAhCJ + ReSb6xCLReyLAIsQ6Lfq///Di2Xog038/4tN5IXJfApqC1roq8v+/+sliU3g20Xghcl9BtwF+PsCEN1d + 2N1F2FFR3RwkM9JqC1noosv+/+ij1v7/w7glnAIQ6JVGAQCD7AxTVleJZfAz21NoAAAQAFPHRewCAAAA + /xWcsAIQO8Oj4EIFEHUTU2oB/xVYsAIQaIzOAhDp5AEAAGjc0gIQ/xVgsAIQi/g7+w+EwQEAAIs10LAC + EGjU4wIQV//WO8N0D2oEjU3sUVP/NeBCBRD/0GjI4wIQV//WaLjjAhBXo+hCBRD/1mis4wIQV6PsQgUQ + /9a5eOMCEKPwQgUQiV386MqbAAC5ROMCEOjAmwAAuRDjAhDotpsAALnc4gIQ6KybAAC5qOICEOiimwAA + uXTiAhDomJsAALlA4gIQ6I6bAAC5DOICEOiEmwAAudjhAhDoepsAALmk4QIQ6HCbAAC5cOECEOhmmwAA + uTzhAhDoXJsAALkI4QIQ6FKbAAC51OACEOhImwAAuZzgAhDoPpsAALlk4AIQ6DSbAAC5MOACEOgqmwAA + ufzfAhDoIJsAALnI3wIQ6BabAAC5lN8CEOgMmwAAuWTfAhDoApsAALk03wIQ6PiaAAC5BN8CEOjumgAA + udTeAhDo5JoAALmk3gIQ6NqaAAC5dN4CEOjQmgAAuUDeAhDoxpoAALkM3gIQ6LyaAAC53N0CEOiymgAA + uazdAhDoqJoAALl83QIQ6J6aAAC5SN0CEOiUmgAAuRTdAhDoipoAALng3AIQ6ICaAACwAes1i0XoagBq + AWi43AIQaKzcAhDozwkBALgpTgEQw+sVU2oB/xVYsAIQaPzRAhCL+Oh4BgEAMsCLTfRfXmSJDQAAAABb + ycO4r6MCEOhURAEAg+xwUzPbVleJXfw5HfBCBRCJZfB1FWg4/QIQjUXsUMdF7PICAADoa0MBAGoDagGN + cQKNfYTonZ4AAI1FzMZF/AFQ/zXgQgUQiV3M/xXwQgUQO8N1Qf8VWLACED0DAQAAdQQzyesRU1OL+Gis + 4wIQ6OkFAQCDyf9qC1rotMj+/411hOi0hwAAi030X15kiQ0AAAAAW8nDagGNRYToha0AAIvwi0XMjU2E + Zol1jWbHRY8BAOgnhgAAi0XQjU2EZol1jWbHRY8CAOgShgAAD7ZF1I1NhGaJdY1mx0WPAwDo/IUAAI1F + zFD/NeBCBRD/FfBCBRA7w3Wg/xVYsAIQPQMBAAAPhV////8Pt02NagXpZ////4tN6Oh4BAEAuMtOARDD + VmoFXooCwOgEBDA8OX4CBAeIAYoCJA8EMEE8OX4CBAeIAUHGATpBQk512YoCwOgEBDA8OV5+AgQHiAGK + AiQPBDBBPDl+AgQHiAHDochCBRCFwFaLNcCwAhB0A1D/1qHMQgUQhcB0A1D/1l7DU1VWV2iM2QIQ/xXU + sAIQhcCLNdCwAhCjyEIFEL2c2QIQu3TZAhC/ZNkCEHQ3aITZAhBQ/9ZV/zXIQgUQo9BCBRD/1lP/NchC + BRCj1EIFEP/WV/81yEIFEKPYQgUQ/9aj3EIFEIM91EIFEAB1T2hY2QIQ/xXUsAIQM8k7waPMQgUQdCdV + UP/WU/81zEIFEKPUQgUQ/9ZX/zXMQgUQo9hCBRD/1qPcQgUQ6xKJDdRCBRCJDdhCBRCJDdxCBRBfXl2w + AVvDi0AUi0AEw4tAFItACMOLQBT/MP8VrLMCEMOLSBRmi1AoZjlRDFaLcRBXcwRmi1EMi3gED7fKM8Dz + pl8PlMBew/92JItGDP92IItOBFCNRhhQM8Bmi0YoUFH/dCQc/zb/FdxCBRCFwHYKi0YMiUYUsAHrAjLA + wgQAVYvsgH0UAIhDGIpFCIhDGXQExkMaAotFDFaJQyRmi0UQVw+3+I1zBGaJQyjoowUAAA+3VRCLPovK + i/HB6QK4RUVFRfOri86D4QNmg30QCPOqdwNqCFqNehyNcwyJeyDocAUAAF9eXcIQALhNkwIQ6BlBAQBW + i3UIx0X8AQAAAIsGg/j/dAdQ/xXYQgUQjUYM6HcFAACNRgTobwUAAItN9F5kiQ0AAAAAycIEALhtkwIQ + 6NdAAQBRVot1CIMO/1cz/4l+BIl9/Il+DMZF/AGJfhRmiX4o/xXUQgUQg/j/iQZ1KVdX/xVYsAIQaJzZ + AhCL+OigAgEAaDj9AhCNRfBQx0XwTmG8AOjEPwEAi030M8CNfhirq1+Lxl5kiQ0AAAAAycIEALhanAIQ + 6F9AAQCB7PwAAACDZfwAgw1QUAMQ/4M91EIFEABTVleJZfCL2XUUx0XU8gIAAGg4/QIQjUXU6e4BAACN + cwKwAY19iOgkhQAAjXMmjb34/v//xkX8AegIqAAAahBfjbUo////xkX8AuhspQAAjYVY////UMZF/APo + B////8ZF/ARmiwsz9maD+QN8DTlzUnQIikNSiEXv6wTGRe8eZoP5BHwNOXN2dAiKQ3aIReDrBMZF4ABm + g/kFfA2Lg5oAAAA7xolF3HUHx0XcuAsAAGaD+QZ8D42DvgAAADkwdAVmizjrA2ogX2aD+Qd8DDmz3gAA + AMZF5AF1BMZF5ABmg/kIfA2LmwYBAAA73old6HUHx0XoAQAAAP+1HP////8VqLMCEIP4/4lF2HUe/7Uc + /////xXkswIQO8YPhMwAAACLQAyLAIsAiUXYi03oagRYjVWI6NCYAAD/deSKRe9X/3XcjZ1Y/////3Xg + 6Gr9//8z/0eLTeg7+Q+PFwEAAP912I21WP///+gW/f//hMAPhJ4AAACLhWz///+LAFBmiX2RZsdFkwEA + /xWsswIQUI2dKP///+gVoQAAi9CNTYjoJ5cAAIuFbP///4tACI1NiGaJfZFmx0WTAgDoE4EAAIuFbP// + /4tABI1NiGaJfZFmx0WTAwDo+IAAAIvGZol9kWbHRZMEAOhy/P//63tWVmgg2QIQaBDZAhDoxP8AAMdF + 0E5hvABoOP0CEI1F0FDodz0BAIOlLP///wCNlSj///+NTYhmiX2RZsdFkwEA6JmWAACDyP+NTYhmiX2R + ZsdFkwIA6IuAAACDyP+NTYhmiX2RZsdFkwMA6HaAAABmiX2RZsdFkwQAMsCNTYjo7X8AAEfp3v7//2oL + Wuipwv7/jYVY////UMZF/APol/z//421KP///+heogAAjbX4/v//6FOiAACNdYjog4EAAItN9F9eZIkN + AAAAAFvJw4tNhOjD/gAAuPxUARDDuHecAhDodT0BAIHsgAAAAFNWM8BXM9tAjbV0////iWXwiV386FGk + AABqEV+NdaTGRfwB6LuiAADGRfwCOR3QQgUQx0XkBgAAAHURx0Xs8gIAAGg4/QIQjUXs62H/dZj/Faiz + AhCD+P91IlNTaDzZAhBoMNkCEOh+/gAAx0XoTmG8AGg4/QIQjUXo6zGNTeRRjU3UUVNQ/xXQQgUQO8N0 + I1NTaITZAhCL+Oja/gAAx0XgTmG8AGg4/QIQjUXgUOj+OwEAi03IjVXU6H35//+NdaSJfajoz40AAOhQ + oQAAjbV0////6EWhAACLTfRfXmSJDQAAAABbycOLTdzovf0AALgCVgEQw4tIIDPShcl+H4tAHFaL8FeL + Pjt8JAx0CkKDxgQ70Xzw6wSDJJAAX17CBACLUCBWM/aF0ld+EotAHIv4gz8AdA9Gg8cEO/J88zLAX17C + BACJDLCLAf8Qi0QkDIkwsAHr6mr//3AE/xVosAIQw1aL8ItGCFbHBvzXAhDogv///4t2BIX2dAdW/xWI + sAIQXsP/JVCxAhD/JVSxAhCKQBjDiwaFwHQNgH4EAHQHUP8VKLACEItEJASJBsZGBAGLxsIEAFWL7FGL + BoXAdAdQ6FXI/v9ZV+hIyP7/hcBZiQZ1FWg4/QIQjUX8UMdF/LYAAADoyDoBAIl+BMnDiwCFwHQHUOgh + yP7/WcNVi+xRV+gPyP7/hcBZiQZ1FWg4/QIQjUX8UMdF/LYAAADojzoBAIl+BIvGycOLAFaL8YoQiso6 + FnUahMl0EopQAYrKOlYBdQxAQEZGhMl14jPA6wUbwIPY/zPJhcAPlMGKwV7DVYvsUYtFCFZXjXABighA + hMl1+SvGjXABiwOFwIl1/HUIVuiOx/7/6xI5cwRzLFDoh8f+/1boe8f+/1mFwFmJA3UVjUUIaDj9AhBQ + x0UItgAAAOj6OQEAiXMEizuLzot1CIvBwekC86WLyItF/IPhA/OkSF+JQwiLw17JwgQAV4s9xLECEGoq + /zb/14XAWVl3EGo//zb/14XAWVl3BDPAX8MzwEBfw2pc/zb/FbyxAhCFwFlZdAyLDivBQIlGCMYECACL + xsNVi+xRVlcz/zk7dSc5fQh1B8dFCAEAAACLdQhW6M/G/v87x1mJA3QhxgAAiXMEiXsI62OLdQg7cwR2 + W1bor8b+/zvHWYlF/HUVaDj9AhCNRQhQx0UItgAAAOguOQEAOXMIdgROiXMIi0sIizOL0cHpAov486WL + yoPhA/Oki0sIxgQIAP8z6GzG/v+LRfyJA4tFCFmJQwRfXsnCBACLQATDi0AIw4lICMOLAIXAdAdQ6ELG + /v9Zw1WL7FFX6DDG/v+FwFmJBnUVaDj9AhCNRfxQx0X8tgAAAOiwOAEAxgAAg2YIAIl+BIvGycNVi+xR + V4v4hf98MTt+IH0sVv8VVLECEItGHIs8uIX/dAmLB2oBi8//UARW/xVQsQIQM8A7xxvA99hfycNoOP0C + EI1F/FDHRfyFAwAA6FE4AQDMgH4YAHRFUzPbOV4gfjxXVv8VVLECEItGHIs8mIX/dAmLB2oCi8//UARW + /xVQsQIQhf90D4vH6Lr8//9qAVfo8bb+/0M7XiB8xl9bw/8lULECEP8lVLECEIB4GAB0CoN4HAB2BDPA + QMMzwMOLRhyFwHQHUOhCxf7/WYB+GAB0B1b/FYSwAhDDaghowPwCEOhDyP7/i/GDZfwAVv8VTLECEINN + /P/GRhgBsAHrIDPAQMOLZehqAGoBaFDYAhBoNNgCEOjC+QAAg038/zLA6EDI/v/DVYvs/3UQ/3UM/3UU + agD/dQj/MP8VILACEIXAdCVqAGoAaIjYAhCL+OgY+gAAaDj9AhCNRRBQx0UQTmG8AOg8NwEAXcIQAFWL + 7FZXi/Ez/zv3dQONdQhT/3UMVlf/dQj/MP8VHLACEDvHdCNXV2iY2AIQi/jozPkAAGg4/QIQjUUMUMdF + DE5hvADo8DYBAIs2g/4BdAqD/gd0BYP+AnUC/wtfXl3CCABVi+yNRQxQi0UIagD/dRBqAP91DP8w/xUc + sAIQhcB0JWoAagBomNgCEIv46G75AABoOP0CEI1FEFDHRRBOYbwA6JI2AQCLRQxdwgwAVYvs/0AMVldT + /3UQi/GLSAxWM/9X/3UM/3UIUf8w/xUEsAIQO8d1G4s2M8BAO/B0CoP+B3QFg/4CdQL/C19eXcIMAD0D + AQAAdQQywOvvV1doqNgCEIv46Pb4AABoOP0CEI1FEFDHRRBOYbwA6Bo2AQDMVYvsVldT/3UQi/lXM/ZW + /3UMiXAM/3UIVv8w/xUEsAIQO8Z1G4s/M8BAO/h0CoP/B3QFg/8CdQL/C19eXcIMAD0DAQAAdQQywOvv + VlZoqNgCEIv46If4AABoOP0CEI1FEFDHRRBOYbwA6Ks1AQDMVYvs/3UY/0AI/3UUi0gI/3UQagD/dQz/ + dQhR/zD/FRSwAhCFwHUGsAFdwhQAPQMBAAB1BDLA6/FqAGoAaLjYAhCL+Ogp+AAAaDj9AhCNRRhQx0UY + TmG8AOhNNQEAzFWL7Fb/dRgz9v91FIlwCP91EFb/dQz/dQhW/zD/FRSwAhA7xnUHsAFeXcIUAD0DAQAA + dQQywOvwVlZouNgCEIv46M33AABoOP0CEI1FGFDHRRhOYbwA6PE0AQDMVYvsV/91IIv5/3Uc/3UYU/91 + FFdW/3UQagD/dQz/dQj/MP8VALACEIXAdCVqAGoAaMjYAhCL+Oh79wAAaDj9AhCNRSBQx0UgTmG8AOif + NAEAhfZ0Av8Ghf90Av8HhdtfdAL/A13CHABVi+xTV/91DDPbOF0Q/3UIdRP/FRiwAhA7w3QlU1No5NgC + EOsR/xX0sgIQO8N0ElNTaNjYAhCL+OgS9wAAMsDrArABX1tdwgwAVYvsjUUUUP91EItFCP91FP91DP8w + /xUksAIQhcB0JWoAagBoIMoCEIv46Nf2AABoOP0CEI1FEFDHRRBOYbwA6PszAQCLRRRdwhAAVYvsU1eL + +IsGM9s7w3QOOF4EdAlQ/xUosAIQiR45XQh0Plb/dQz/dRD/dQhX/xUksAIQO8N0I1NTaCDKAhCL+Oh2 + 9gAAaDj9AhCNRQhQx0UITmG8AOiaMwEAxkYEAesFiT6IXgRfW13CDABVi+xRiwZTM9s7w3QOOF4EdAlQ + /xUosAIQiR6NRfxQVlP/dRjGRgQB/3UU/3UQU/91DP91CP8VELACEDvDdCNTU2j02AIQi/joA/YAAGg4 + /QIQjUUYUMdFGE5hvADoJzMBADPAg338AVsPlMDJwhQAVYvsUVNWi9iLRQhXjXABighAhMl1+SvGgzsA + jXABiXX8dDGLQwgDxjlDBHMGUOha+f//izsDewiLzot1CIvBwekC86WLyItF/IPhA0jzpAFDCOtGVugj + wP7/hcBZiQN1FWg4/QIQjUUIUMdFCLYAAADoozIBAIt7CIvOi3UIA/iLwcHpAvOli8iLRfyD4QPzpI1I + /4lLCIlDBF9ei8NbycIEAFWL7FFWV4v4iwOFwIt3BHQxOXMEcyxQ6MS//v9W6Li//v+FwFlZiQN1FWg4 + /QIQjUX8UMdF/LYAAADoNzIBAIlzBItHCIlDCIs3izuNSAGLwcHpAvOli8iD4QPzpF+Lw17Jw1OL2IsD + iggy0jrKVr79AAAAdRVXagnobPj//4s7vgTZAhClpaRf62CA+WF8BYA4en5LgPlBfAWA+Vp+QYD5X3Q8 + gPkwfDeA+Tl/Mr78AAAA6yeLzk6FyXQoigiA+WF8BYD5en4XgPlBfAWA+Vp+DYD5MHwFgPk5fgPGAF9A + OBB10YgQKwOJQwhei8Nbw1OL2ItDCIsLgHwI/1x0LIPAAlDo4vf//4tLCIsDxgQIXItLCIsDxkQIASqL + SwiLA8ZECAIAg0MIAusdQFDouPf//4tLCIsDxgQIKotLCIsDxkQIAQD/QwiLw1vDU4vYi0MIiwuAfAj/ + XHQdQFDoiPf//4tLCIsDxgQIXItLCIsDxkQIAQD/QwiLw1vDi8PB4AJXUOhSvv7/i/iF/1mJfhx1FVBQ + aCDYAhBoCNgCEOgL8wAAMsBfw4vLweECi9HB6QIzwPOri8qD4QPzqoleIIvOX+nm+P//VYvsU1aL2ItF + CFeNcAGKCECEyXX5alz/dQgrxov4/xW8sQIQWYvwWYvD6Fb///+F9nQxi0UIRiv+jXwHAYtDCAPHUIl9 + COjY9v//i8+LewgDO4vBwekC86WLyIPhA0jzpAFDCF9ei8NbXcIEAFWL7DPJVot1CCvxiQqJD4kIdBZO + dAtOdSvHAgAAAMDrDscCAAAAQOsGxwIAAACA98NYjs9gXnUMCRiLRQyp+P///3QVaDj9AhCNRQhQx0UI + hQMAAOjpLwEAiQddwggAM8BQaAAAAAJqA1BQUP90JBz/FdywAhCD+P90CVD/FYiwAhDrEP8VWLACEIP4 + AnQJg/gDdASwAesCMsDCBACLTCQEM8A7TCQID5TAwggAi0QkBCNEJAj32BvAQMIIAItEJAQjRCQIM8k7 + yBvA99jCCACLRCQEI0QkCCtEJAj32BvAQMIIAFa+yEAFEIsGhcB0B1D/FYiwAhCDxgSB/shCBRB86F7D + i1Aci0Agw41BLIA4AHUGjYEwAQAAw/YAEHYrVleDwCxqAr/YywIQi/BZM9LzpnQQi/BqA7/Y1wIQWTPA + 86Z1AzPAQF9ewzLAw1WL7FEzyTPAOQyFyEAFEHQuQD2AAAAAfO9RUWhs0wIQaFjTAhDoA/EAAGg4/QIQ + jUX8UMdF/E5hvADoti4BAMnDVovxi0YKhcB8Bz2AAAAAfAq5hQMAAOigrv7/i0YKiwyFyEAFEGoLWl7p + I7T+/7h3kwIQ6DovAQCD7DCDZfwAgw1QUAMQ/4M9gEAFEABTVleJZfCL8XUUx0Xs8gIAAGg4/QIQjUXs + 6d0AAACLRgqFwIlF6A+MwAAAAD2AAAAAD421AAAAikYmPEl1BotGLpnrEDxOD4WPAAAA3UYy6C0rAQCL + +IpGSjxJi9p1BotGUpnrDDxOdWHdRlboECsBAINl1ACNTcRRUlCLRehqAP80hchABRCJfcyJXdD/FYBA + BRCL8IX2dRRQUP8VWLACEGiA1wIQi/jogfAAAIP+AQ+UwA+2yOi2s/7/i030X15kiQ0AAAAAW8nDx0Xk + hQMAAGg4/QIQjUXk6yDHReCFAwAAaDj9AhCNReDrD8dF3IUDAABoOP0CEI1F3FDoZi0BAItN2Oha7wAA + uC5kARDDuIGTAhDoDC4BAIPsNFNWi/EzyYlN/IMNUFADEP85DXxABRBXiWXwdRTHRejyAgAAaDj9AhCN + Rejp8QAAAItGCjvBiUXkD4zUAAAAPYAAAAAPjckAAABmgz4EdQiLRnaJRezrA4lN7IpGJjxJdQaLRi6Z + 6xA8Tg+FkgAAAN1GMujuKQEAi/iKRko8SYvadQaLRlKZ6ww8TnVk3UZW6NEpAQCDZdAAjU3AUVJQi0Xk + agD/deyJfcj/NIXIQAUQiV3M/xUssQIQi/CF9nUUUFD/FViwAhBokNcCEIv46D/vAACD/gEPlMAPtsjo + dLL+/4tN9F9eZIkNAAAAAFvJw8dF4IUDAABoOP0CEI1F4Osgx0XchQMAAGg4/QIQjUXc6w/HRdiFAwAA + aDj9AhCNRdhQ6CQsAQCLTdToGO4AALhwZQEQw7iLkwIQ6MosAQCD7ByDZfwAgw1QUAMQ/1NWV4vxi34K + hf+JZfAPjLMAAACB/4AAAAAPjacAAACKRiY8SXUGi0YumesQPE4PhYEAAADdRjLo3CgBAIvYikZKPEmJ + Vdx1BotGUpnrDDxOdVLdRlbovigBAFJQ/3XcU/80vchABRD/FeywAhCL8IX2dRRQUP8VWLACEGiY0wIQ + i/joPu4AAIP+AQ+UwA+2yOhzsf7/i030X15kiQ0AAAAAW8nDx0XshQMAAGg4/QIQjUXs6yDHReiFAwAA + aDj9AhCNRejrD8dF5IUDAABoOP0CEI1F5FDoIysBAItN4OgX7QAAuHFmARDDuJWTAhDoySsBAIPsHINl + /ACDDVBQAxD/U1ZXi/GLfgqF/4ll8A+MswAAAIH/gAAAAA+NpwAAAIpGJjxJdQaLRi6Z6xA8Tg+FgQAA + AN1GMujbJwEAi9iKRko8SYlV3HUGi0ZSmesMPE51Ut1GVui9JwEAUlD/ddxT/zS9yEAFEP8V9LACEIvw + hfZ1FFBQ/xVYsAIQaKTTAhCL+Og97QAAg/4BD5TAD7bI6HKw/v+LTfRfXmSJDQAAAABbycPHReyFAwAA + aDj9AhCNRezrIMdF6IUDAABoOP0CEI1F6OsPx0XkhQMAAGg4/QIQjUXkUOgiKgEAi03g6BbsAAC4cmcB + EMO4n5MCEOjIKgEAg+wMU1ZXM/+JffyLQQqDDVBQAxD/O8eJZfB8Sj2AAAAAfUP/NIXIQAUQ/xUYsQIQ + i/A793UUV1f/FViwAhBosNMCEIv46IfsAAAzyYP+AQ+Uwei9r/7/i030X15kiQ0AAAAAW8nDaDj9AhCN + RexQx0XshQMAAOiPKQEAi03o6IPrAAC4J2gBEMO4qZMCEOg1KgEAg+woUzPbiV38i0EKgw1QUAMQ/zvD + VleJZfAPjAkBAAA9gAAAAA+N/gAAAIs8hchABRCLNeSwAhBqAY1F2FBTV4ld2P/Wg/j/iUXUdTL/FViw + AhCFwHQoU1P/FViwAhBo1NMCEIv46NPrAADHRexOYbwAaDj9AhCNRezpuQAAAGoCjUXQUFNXiV3Q/9aD + +P+JRcx1L/8VWLACEIXAdCVTU/8VWLACEGjU0wIQi/jojOsAAMdF6E5hvABoOP0CEI1F6Ot1U41F2FD/ + ddRX/9aD+P91LYs1WLACEP/WhcB0IVNT/9Zo1NMCEIv46E/rAADHReROYbwAaDj9AhCNReTrOItF1DtF + zHUKi0XYO0XQdQKzAQ+2y+hnrv7/i030X15kiQ0AAAAAW8nDx0XghQMAAGg4/QIQjUXgUOg5KAEAi03c + 6C3qAAC4fWkBEMO4s5MCEOjfKAEAg+wMU1Yz9ol1/ItBCoMNUFADEP87xleJZfB8Bz2AAAAAfCiD+P90 + I2g4/QIQjUXsUMdF7IUDAADo5CcBAItN6OjY6QAAuD1qARDDO8Z8RP80hchABRD/FYiwAhCL2DvedRRW + Vv8VWLACEGjk0wIQi/jocuoAAIP7AQ+UwA+2yOinrf7/i030X15kiQ0AAAAAW8nDM9tDgf6AAAAAfdiL + BLXIQAUQhcB0IlD/FYiwAhCFwHUXUGoB/xVYsAIQaOTTAhCL+Ogf6gAAM9tG68hVi+yB7BACAAChSGAD + EIP4AQ+EugAAAIP4AnUNgz08YAMQBA+GqAAAAKHEQAUQhcB1CcdFDPICAADrSVa+BQEAAFaNjfD9//9R + /3UI/9CFwHQVVo2F+P7//1D/dQz/FcRABRCFwHUragBqAP8VWLACEGjw0wIQi/jonekAAMdFDE5hvABo + OP0CEI1FDFDowSYBAI21+P7//42F8P3//4oQiso6FnUahMl0EopQAYrKOlYBdQxAQEZGhMl14jPA6wUb + wIPY/zPJhcAPlMGKwV7rEv91DP91CP8V8LICEEj32BvAQMnCCABVi+yD+P91H/91CP8VDLECEIP4/3UR + agBqAP8VWLACEGh0vgIQ6yKoAXQ6g+D+UP91CP8VMLECEIXAdSlQUP8VWLACEGhgvgIQi/jo4+gAAGg4 + /QIQjUUIUMdFCE5hvADoByYBAF3CBABVi+z/dQjojP////91CP8VSLECEIXAdSlQUP8VWLACEGgE1AIQ + i/jonugAAGg4/QIQjUUIUMdFCE5hvADowiUBAF3CBABVi+z/dQj/FSixAhCFwHUpUFD/FViwAhBoENQC + EIv46GHoAABoOP0CEI1FCFDHRQhOYbwA6IUlAQBdwgQAVYvs/3UI6JP1//+EwHU4agD/dQj/FSCxAhCF + wHUpUFD/FViwAhBoINQCEIv46BboAABoOP0CEI1FCFDHRQhOYbwA6DolAQBdwgQAVYvsgX0MEAEAAFNW + dR6LRRSLQECFwHQMUGrr/3UI/xU8swIQM8BeW13CEACDfQxOdfJq6/91CP8VOLMCEIvwhfZ04YtFFFf/ + cAiNvigIAAD/cAT/MI1GKFBX6BbN/v+NXgSDxBSL14vL6O2k/v+FwIkGX3WvihuA+0l1BYtGDOulgPtM + dZ6LRgjrm1WL7IPsJFZXaghZ/3UQM8D/dQzGRdww/3UIjX3d86tmq6qLRRSNsAAIAABQVui4zP7/g8QU + i9aNTdzokaT+/4XAX151JoB93El1BYtF5OsdgH3cTHUFi0Xg6xKAfdxOdQrdRejoXCEBAOsCM8DJwhAA + UVNVVldo3NICEMZEJBcB/xVgsAIQiy1YsAIQizXQsAIQi/iF/7v80QIQD4TFAAAAaMjXAhBX/9ZosNcC + EFejdEAFEP/WaJzXAhBXo5BABRD/1miQ1wIQV6N4QAUQ/9ZogNcCEFejfEAFEP/WaGzXAhBXo4BABRD/ + 1mhc1wIQV6OgQAUQ/9ZoTNcCEFejpEAFEP/WaDDXAhBXo6hABRD/1mgU1wIQV6OsQAUQ/9Zo+NYCEFej + sEAFEP/WaNTWAhBXo7RABRD/1mjE1gIQV6O4QAUQ/9ZotNYCEFejvEAFEP/WaKDWAhBXo8BABRD/1qPE + QAUQ6xNqAGoB/9VTi/jo/uUAAMZEJBMAaJTWAhD/FWCwAhCL+IX/dClofNYCEFf/1mho1gIQV6OEQAUQ + /9ZoogAAAFejiEAFEP/Wo4xABRDrE2oAagH/1VOL+Oix5QAAxkQkEwBoWNYCEP8VYLACEIv4hf90KWhA + 1gIQV//WaCTWAhBXo5RABRD/1mgQ1gIQV6OYQAUQ/9ajnEAFEOsTagBqAf/VU4v46GTlAADGRCQTAIpE + JBNfXl1bWcNVi+xRVv+2QAEAAP8VPLECEIXAdUf/FViwAhCD+BJ1F/+2QAEAAP8VNLECEIOOQAEAAP8y + wMnDagBqAGjc1wIQi/joDuUAAGg4/QIQjUX8UMdF/E5hvADoMiIBALABycNVi+xW/3UI/xUksQIQg/j/ + iYZAAQAAdTT/FViwAhCD+AJ1BDLA6ydqAGoAaOzXAhCL+Oi+5AAAaDj9AhCNRQhQx0UITmG8AOjiIQEA + sAFdwgQAuImcAhDokCIBAIPsUFNWVzPbjXECsAGNfaSJZfCJXfzofWcAADPJxkX8ATPAPYAAAAB9DTkc + hchABRB0AUFA6+w7y3UhagszyVroKqf+/411pOgqZgAAi030X15kiQ0AAAAAW8nDagJYjVWk6Op7AAAz + /4H7gAAAAH04jTSdyEAFEIM+AHQpR4vDjU2kZol9rWbHRa8BAOiIZAAAiwaNTaRmiX2tZsdFrwIA6HRk + AABD68APt02tagXrjotN7Oggof7/uFVwARDDuJOcAhDoxyEBAIPsUFNWVzP/iX38i0EKgw1QUAMQ/zvH + iWXwD4xJAQAAPYAAAAAPjT4BAADdQTKLHIXIQAUQxkWkTmbHRaYUAIl9qOjcHQEAizXksAIQagGJRdCN + RcxQV1OJVdSJfcz/1oP4/4lFyHUy/xVYsAIQhcB0KFdX/xVYsAIQaNTTAhCL+OhK4wAAx0XsTmG8AGg4 + /QIQjUXs6d4AAABXjUXUUP910FP/1oP4/4lF0HUy/xVYsAIQhcB0KFdX/xVYsAIQaNTTAhCL+OgF4wAA + x0XoTmG8AGg4/QIQjUXo6ZkAAABT/xXosAIQO8dXdSRX/xVYsAIQaMTTAhCL+OjS4gAAx0XkTmG8AGg4 + /QIQjUXk62mNRcxQV1P/1oP4/4lFyHUtizVYsAIQ/9aFwHQhV1f/1mjU0wIQi/joleIAAMdF4E5hvABo + OP0CEI1F4Oss323QjU2k3V2w6EKl/v+LTfRfXmSJDQAAAABbycPHRdyFAwAAaDj9AhCNRdxQ6IsfAQCL + TdiB+U5hvAB1DGoLWjPJ6BOl/v/rBeh2n/7/uCtyARDDuJ2cAhDoHSABAIPsPFMz21aJXfyLcQqDDVBQ + AxD/O/NXiWXwD4yZAAAAgf6AAAAAD42NAAAAZoM5A8ZFuE5mx0W6FACJXbx1BYt5UusCM//dQTLoKxwB + AFeNTeBRUP80tchABRCJRdyJVeD/FeSwAhCD+P+JRdx1LYs1WLACEP/WhcB0IVNT/9Zo1NMCEIv46Jvh + AADHRexOYbwAaDj9AhCNRezrLN9t3I1NuN1dxOhIpP7/i030X15kiQ0AAAAAW8nDx0XohQMAAGg4/QIQ + jUXoUOiRHgEAi03k6IXgAAC4JXMBEMO4p5wCEOg3HwEAg+xEg2X8AIMNUFADEP9Ti9mLQwqFwFZXiWXw + D4y0AAAAPYAAAAAPjakAAABmgzsDdRqDe1IAfRTHReyFAwAAaDj9AhCNRezpmAAAAGoCjXMmjX2w6G6G + AABmgzsDdQiLQ1I5RbRzA4tFtItN1MYEAQ3GRAEBCjP2Vo1V6FKDwAJQi0MKUf80hchABRD/FQSxAhA7 + xnU1Vlb/FViwAhBorNQCEIv46JbgAABqC1ozyehio/7/jXWw6CqDAACLTfRfXmSJDQAAAABbycOLRejo + yXMAAOvfx0XkhQMAAGg4/QIQjUXkUOiPHQEAi03g6IPfAAC4HXQBEMO4uZwCEOg1HgEAg+xUg2X8AIMN + UFADEP9Ti9mLQwqFwFZXiWXwD4weAQAAPYAAAAAPjRMBAABmgzsCdQiLQy6JReTrB8dF5AABAACLfeSD + ZewAjXWg6FmDAABqIIvHxkX8AYt1xFk7wYl13IlF4HwDiU3giz3ksAIQagCNRehQ/3Xgi0MKVv80hchA + BRD/FRCxAhAz0jvCdShSUv8VWLACEGi41AIQi/jom98AAMdF2E5hvABoOP0CEI1F2OmXAAAAi0XoO8J0 + XIvISIXJiUXodD6KDkaA+Q11E4A+CnUYRkjHRewCAAAAiUXo6xGA+Qp11oA+Devmx0XsAQAAAGoB99hS + UItDCv80hchABRD/14N97AB1DovGK0XcO0XkD4xV////K3XcK3XsiXWkjXWg6DNuAADotIEAAItN9F9e + ZIkNAAAAAFvJw8dF1IUDAABoOP0CEI1F1FDoIxwBAItN0OgX3gAAuJN1ARDDuMOcAhDoyRwBAIPsRFOL + 2TPJiU38i0MKgw1QUAMQ/zvBVleJZfAPjKUAAAA9gAAAAA+NmgAAAGaDOwN1GTlLUn0Ux0XshQMAAGg4 + /QIQjUXs6YoAAABRjXMmjX2w6AGEAABmgzsDdQiLQ1I5QypzA4tDKjP2Vo1N6FFQ/3XUi0MK/zSFyEAF + EP8VBLECEDvGdTVWVv8VWLACEGis1AIQi/joNt4AAGoLWjPJ6AKh/v+NdbDoyoAAAItN9F9eZIkNAAAA + AFvJw4tF6OhpcQAA69/HReSFAwAAaDj9AhCNReRQ6C8bAQCLTeDoI90AALh9dgEQw7jNnAIQ6NUbAQCD + 7ECDZfwAgw1QUAMQ/1OL2YtDCoXAVleJZfB8cz2AAAAAfWyLey6F/3xljXW06BaBAAAz/1eNRexQ/3Xc + i0MK/3XY/zSFyEAFEP8VELECEIvwO/d1FFdX/xVYsAIQaLjUAhCL+Oh03QAA994b9iN17Il1uI11tOiC + bAAA6AOAAACLTfRfXmSJDQAAAABbycNoOP0CEI1F6FDHReiFAwAA6HIaAQCLTeToZtwAALhEdwEQw7jn + nAIQ6BgbAQCD7FCDZfwAgw1QUAMQ/1NWV4vZjXMCjX2kiWXw6PWCAACDTeD/xkX8Aug36///i/eJRdjo + qn4AAGaLC2aD+QR8BYtTdusCM9Jmg/kDfAWLQ1LrA2oCWGaD+QJ8BYtbLusCM9tSUI1F7I196I1V5Oil + 6f//M/ZW/3XsagNW/3Xo/3Xk/3XI/xXcsAIQg/j/iUXgdSlWVv8VWLACEGgw1QIQi/joetwAAGg4/QIQ + jUXcUMdF3E5hvADonhkBAItN2GoLWokEjchABRDoKZ/+/411pOjxfgAAi030X15kiQ0AAAAAW8nDi03U + gflOYbwAdQ1qC1qDyf/o/J7+/+sF6F+Z/v+4VngBEMO4AZ0CEOgGGgEAg+xMg2X8AIMNUFADEP9TVleL + 2Y1zAo19qIll8OjjgQAAg03g/8ZF/ALoJer//2aLC2aD+QSL8HwFi1N26wIz0maD+QN8BYtDUusDagJY + ZoP5AnwFi1su6wIz21JQjUXsjX3ojVXk6Jvo//8z/1f/dexqAlf/dej/deT/dcz/FdywAhCD+P+JReB1 + KVdX/xVYsAIQaDDVAhCL+Ohw2wAAaDj9AhCNRdxQx0XcTmG8AOiUGAEAagtai86JBLXIQAUQ6CCe/v+N + dajo6H0AAItN9F9eZIkNAAAAAFvJw4tN2IH5TmG8AHUNagtag8n/6POd/v/rBehWmP7/uF95ARDDuBud + AhDo/RgBAIPsGFNWVzP2iXX8g03w/1a7AAAAAlNqA1ZWxkX8AYs93LACEFb/dQj/14P4/4lFCIlF7FZ1 + Dlb/FViwAhBoMNUCEOtHU2oDVlZW/3UM/9eL+IP//4l98HUDVuvaix1AsQIQjUXcUFZW/3UI/9OFwHQN + jUXkUFZWV//ThcB1KVZW/xVYsAIQaAjVAhCL+Oh02gAAaDj9AhCNRQhQx0UITmG8AOiYFwEAi0XcO0Xk + i03gdRc7Teh1FVeLPYiwAhD/1/91CP/Xi8brIjtN6HwMfwU7ReR2BTP2RuvdizWIsAIQV//W/3UI/9Zq + AliLTfRfXltkiQ0AAAAAycIIALhInQIQ6PcXAQCB7GgBAACDTcz/U1ZXg2X8AL8FAQAAjXXQ6EXe//+N + dejGRfwB6Dne//+NddzGRfwC6C3e////dQiL3sZF/APopNz//41d0Oh35P//i8bovOX//4vD6Fnl//+L + fdBXjbWM/v//6KL0//+EwA+EgwAAAPaFjP7//xB0N42FjP7//+iM5///hMB1VI1F3I1d6Ogv5P//jY2M + /v//6GPn//9Qi8PoeeP///916OhH////6yyNRdyNXejoB+T//42NjP7//+g75///UIvD6FHj////deiL + hYz+///oWfD//421jP7//+jD8///hMB1hf91COiH8P//g33cAHQJ/3Xc6KGj/v9Zg33oAHQJ/3Xo6JKj + /v9Zhf90B1foh6P+/1mDfcz/dAn/dcz/FTSxAhCLTfRfXltkiQ0AAAAAycIEALhinQIQ6LAWAQCD7HCD + ZfwAgw1QUAMQ/1NWV41xAo19hIll8OiPfgAAvwAQAACNdbTGRfwB6PR7AADGRfwC/3Xcix34sAIQ/3XY + /3Wo/9OFwIlFuHUlUFD/FViwAhBo0L0CEIv46FnYAADHRexOYbwAaDj9AhCNRezrQzvHdkWL+I11tOgf + aAAA/3Xc/3XY/3Wo/9OFwIlFuHUpUFD/FViwAhBo0L0CEIv46BTYAADHRehOYbwAaDj9AhCNRehQ6DgV + AQBIjXW0iUW46BNnAADolHoAAI11hOiMegAAi030X15kiQ0AAAAAW8nDi03k6ATXAAC4u3wBEMO4dJ0C + EOi2FQEAg+w8U1ZXM9uJXfyDDVBQAxD/vwYBAACNdbiJZfDoCHsAAFfGRfwB/3Xc/xUUsQIQO8OJRbx1 + KVNT/xVYsAIQaOy9AhCL+Oh01wAAaDj9AhCNRexQx0XsTmG8AOiYFAEAjXW46HdmAADo+HkAAItN9F9e + ZIkNAAAAAFvJw4tN6Ohw1gAAuE99ARDDuIadAhDoIhUBAIPsPFNWVzPbiV38gw1QUAMQ/78GAQAAjXW4 + iWXw6HR6AABXxkX8Af913P8VALECEDvDiUW8dSlTU/8VWLACEGgAvgIQi/jo4NYAAGg4/QIQjUXsUMdF + 7E5hvADoBBQBAI11uOjjZQAA6GR5AACLTfRfXmSJDQAAAABbycOLTejo3NUAALjjfQEQw7irnQIQ6I4U + AQCB7KwAAACDZfwAgw1QUAMQ/1NWV41xArABjX2MiWXw6HJZAABqBF+NtUj////GRfwB6Mx5AACDTeT/ + g2XsAMZF/AO+NNQCEI191KVmpWgw1AIQjZ1I////x0XoAQAAAKTokHYAAP8V8LACEIvIM/+JTeAzwIP4 + H3cOhU3odAP/RezRZehA6+2LTexqBFiNVYzoum0AAMdF6AEAAAAz9ol97IN97B8Ph2IBAACLReiFReAP + hEsBAACKReyLjWz///8EQYgBRo2VSP///41NjGaJdZVmx0WXAQDoNGwAAP+1bP///2aJdZVmx0WXAgD/ + FQixAhCNTYzoHVYAADk9wEAFEA+E0QAAAIuFbP///4oAV1dqA1dXiEXYV41F1FD/FdywAhCDy/85XeSL + +HQJ/3Xk/xWIsAIQO/uJfeR1K2oAagD/FViwAhBoMNUCEIv46ETVAABoOP0CEI1F3FDHRdxOYbwA6GgS + AQAzwFCNTYhRagyNjXj///9RUFBogBAtAFf/FcBABRCFwI1NjGbHRZcDAGaJdZV0JIuFfP///+gwVQAA + i0WAjU2MZol1lWbHRZcEAOgbVQAAM//rR4vD6FZVAACLw41NjGaJdZVmx0WXBADoQlUAAOvfg8j/jU2M + Zol1lWbHRZcDAOgrVQAAg8j/jU2MZol1lWbHRZcEAOgWVQAA0WXo/0Xs6ZT+//8Pt02VagVa6FSX/v+D + feT/dAn/deT/FYiwAhCNtUj////oCncAAI11jOg6VgAAi030X15kiQ0AAAAAW8nDi02E6HrTAAC4RYAB + EMO4950CEOgsEgEAUbiwEQAA6EkSAQCDZfwAgw1QUAMQ/1NWV4ll8GoCWIv5i9iNtcj+//+JfezoXHgA + AGoDWIvPjbUo////xkX8AejieAAAagRYi8+NtWj+//+IXfzoz3gAAGoFWIvPjbWY/v//xkX8A+i7eAAA + agdYi8+NtVj////GRfwE6Kd4AAC7AIAAAIv7jbX4/v//xkX8BegKdwAAxkX8BjP2ahUzwDmdLP///1mN + fYyJdYjzq3YRx0XkhQMAAGg4/QIQjUXk6xuBvVz///8ABAAAdhXHReiFAwAAaDj9AhCNRehQ6IsQAQCL + TexmixFmg/oBfBGLQQo7xnQKJT////+JRbzrB8dFvAgACABmg/oGfAmLgb4AAACJRdyhSGADEIP4AXQX + g/gCdQmDPTxgAxAEdgnHRYhYAAAA6wfHRYhMAAAAg028IDPJx0XMpGwBEOgOl/7/i8jouZb+/4lFjIuF + HP///8YAADm1zP7//4uVHP///4lVpIldqHYLi4Xs/v//iUWU6w32Rb4IdQfHRZRc1AIQObUs////dhCL + jUz///+KAUGIAkKEwHX2ObVc////i4WM/v//iUW0i4W8/v//iUW4djqLjXz///+NhUDu//+JRciNlWju + //+KAUGIAkKEwHX2jb1o7v//T4pHAUeEwHX4vlDUAhClpWalpDP2jUWIUP8V7LMCEIXAdBSNtfj+///o + umEAAIvw6DphAADrKv8V8LMCEDvGdBZWVmg81AIQaJy9AhDoN9UAAIPJ/+sCM8lqC1roxJT+/421+P7/ + /+iJdAAAjbVY////6H50AACNtZj+///oc3QAAI21aP7//+hodAAAjbUo////6F10AACNtcj+///oUnQA + AItN9F9eZIkNAAAAAFvJw4tN4OjK0AAAuPWCARDDuFaeAhDofA8BAFG4KBIAAOiZDwEAg2X8AIMNUFAD + EP9TVleJZfBqAliL+YvYjbVQ/v//iX3s6Kx1AABqA1iLz421gP7//8ZF/AHoMnYAAGoEWIvPjbXw/f// + iF386B92AABqBViLz421IP7//8ZF/APoC3YAAGoHi89Yjb3g/v//xkX8BOiPUwAAi03saghYjbWw/v// + xkX8BejidQAAuwCAAACL+421KP///8ZF/AboRXQAADP2xkW0Q4l1uIl13Il10Il12MZF4ADGRfwIahUz + wDmdhP7//1mNvWD///+JtVz////zq3YRx0XkhQMAAGg4/QIQjUXk6xuBvbT+//8ABAAAdhXHReiFAwAA + aDj9AhCNRehQ6KwNAQCLTexmixFmg/oBfBGLQQo7xnQKJT/9//+JRZDrB8dFkAgQGAJmg/oGfAmLgb4A + AACJRbChSGADEIP4AXQag/gCdQmDPTxgAxAEdgzHhVz///9YAAAA6wrHhVz///9MAAAAg02QIDPJx0Wg + pGwBEOgplP7/i8jo1JP+/zm1hP7//4mFYP///3YWjYUo////UI2dgP7//+iZcAAAM/brCYuFTP///8YA + ADm1VP7//4uFTP///4mFeP///4uFUP///4mFfP///3YOi4V0/v//iYVo////6xD2RZIIdQrHhWj///9c + 1AIQObUY////i4UU/v//iUWIi4VE/v//iUWMdBO/BgEAAI11tOhMXwAAgE2RAjP2ObW0/v//djqLjdT+ + //+Nhcjt//+JRZyNlfDt//+KAUGIAkKEwHX2jb3w7f//T4pHAUeEwHX4vlDUAhClpWalpDP2jYVc//// + UP8V9LMCEIXAD4TZAAAA9kWRAg+EuwAAAIu1TP///zP/9kWSCI2FKP///3RI6B9eAACLyDPAjZXg/v// + iU3s6I1mAACLRez/TeyFwHR7R1aNXbRmib3p/v//6BhvAACL0I2N4P7//+gnZQAAi0W4jXQGAevPaiDo + m1wAAIvYM8CLy42V4P7//+hEZgAAi8NLhcB0NYtF2GgGAQAAagFqIIvOR+j9p/7/jVW0jY3g/v//iUW4 + Zom96f7//+jTZAAAi0W4jXQGAevED7eN6f7//2oF6ziNtSj////o010AAIvw6FNdAADrKv8V8LMCEDvG + dBZWVmg81AIQaMC9AhDoUNEAAIPJ/+sCM8lqC1ro3ZD+/411tOilcAAAjbUo////6JpwAACNtbD+///o + j3AAAI214P7//+i8TwAAjbUg/v//6HlwAACNtfD9///obnAAAI21gP7//+hjcAAAjbVQ/v//6FhwAACL + TfRfXmSJDQAAAABbycOLjVj////ozcwAALjvhgEQw7icngIQ6H8LAQBRuAQSAADonAsBAINl/ABTVleL + 2Y1zAo299P7//4ll8OhYcwAAjUNKxkX8AWoEiUXoWIvLjZVU////6P5qAABqBViLy421fP///8ZF/ALo + J3IAAL8FAQAAjbUk////xkX8A+iMcAAAM/+JfeSJfezGRfwGgX2AAAQAAIl93HYUx0XQhQMAAGg4/QIQ + jUXQ6WABAABmgzsED4ymAAAAikNuPEl1BYtDdusMPE51EN1DeugmBwEAiUW06YkAAAA8Q3VuOb14//// + dGGhiEAFEDvHdDmNTdxRjU3sUf+1eP/////QO8d9RFdXaIzUAhBoaNYCEOjLzwAAx0XgTmG8AGg4/QIQ + jUXg6egAAAD/tXj/////FYxABRA5feyL8HQJ/3Xs/xUgtAIQiXXsi0Xs64bHRdSFAwAAaDj9AhCNRdTp + sAAAAIl9tDl9gHYX/3WgjYXs7f//aHzUAhBQ6KGx/v+DxAwzwDtFgI2N7O3//xvAJS9tARCJRcQzwDtF + gIl9zBvAI8EzyYlFyOgkkP7/i8joz4/+/4lFsI2F7P3//4lFuIuFGP///4lFvItDLolFwI1FsFD/Feiy + AhCL2DvfiV3kdlH/tUj///9T/xXgsgIQhcB1JldXaFDPAhBoaNQCEOgVywAAx0XYTmG8AGg4/QIQjUXY + UOjICAEAjbUk////6B1bAACL0I1F6OhocgAAM8lB6wIzyeixjv7/OX3sdAn/dez/FSC0AhA733QHU/8V + ILQCEI21JP///+jwbQAAjbV8////6OVtAACNhVT////oCmgAAI219P7//+jPbQAAi030X15kiQ0AAAAA + W8nDi02s6EfKAAC4eIkBEMO4vJ4CEOj5CAEAgey4AAAAg2X8AFNWV4vZiWXwagKNcwKNvTz////oZ3AA + AGoCjXMmjb1s////xkX8AehTcAAAagRYi8uNdZzGRfwC6K1vAABqBjPAM/aJddBZjX3U86tmq2aLQ1Iz + ycdF1AQAAABmiUXg6L2O/v+LyOhojv7/i0seiUXQ6NyK/v+LS0KJRdjo0Yr+/zl1oIlF3HYKi0XAgE3h + AYlF6o1F0FD/FeSyAhCFwHUFM8lB6ww5deJ0BDPJ6wODyf9qC1roFI3+/411nOjcbAAAjbVs////6NFs + AACNtTz////oxmwAAItN9F9eZIkNAAAAAFvJw4tNzOg+yQAAuIGKARDDuNyeAhDo8AcBAIHsuAAAAINl + /ABTVleL2Yll8GoCjXMCjb08////6F5vAABqAo1zJo29bP///8ZF/AHoSm8AAGoEWIvLjXWcxkX8Auik + bgAAagYzwDP2iXXQWY191POrZqtmi0NSM/9HM8mJfdRmiUXg6LWN/v+LyOhgjf7/OXWgiUXQi4Vg//// + iUXYi0WQiUXcdgqLRcCATeEBiUXqjUXQUP8V5LICEIXAdQSLz+sMOXXidAQzyesDg8n/agta6BSM/v+N + dZzo3GsAAI21bP///+jRawAAjbU8////6MZrAACLTfRfXmSJDQAAAABbycOLTczoPsgAALiBiwEQw7jx + ngIQ6PAGAQCB7IgAAACDZfwAU1ZXi9mJZfBqAo1zAo29bP///+hebgAAagNYi8uNdZzGRfwB6LhtAABq + BjPAM/aJddBZjX3U86tmq2aLQy4zycdF1AMAAABmiUXg6MiM/v+LyOhzjP7/OXWgiUXQi0WQiUXYdgqL + RcCATeEBiUXqjUXQUP8V5LICEIXAdQUzyUHrDDl14nQEM8nrA4PJ/2oLWugvi/7/jXWc6PdqAACNtWz/ + ///o7GoAAItN9F9eZIkNAAAAAFvJw4tNzOhkxwAAuFuMARDDuBGfAhDoFgYBAIHsuAAAAINl/ABTVleL + 2Yll8GoCjXMCjb08////6IRtAABqAo1zJo29bP///8ZF/AHocG0AAGoEWIvLjXWcxkX8AujKbAAAagYz + wDP2iXXQWY191POrZqtmi0NSM8nHRdQCAAAAZolF4Ojai/7/i8johYv+/zl1oIlF0IuFYP///4lF2ItF + kIlF3HYKi0XAgE3hAYlF6o1F0FD/FeSyAhCFwHUFM8lB6ww5deJ0BDPJ6wODyf9qC1roOIr+/411nOgA + agAAjbVs////6PVpAACNtTz////o6mkAAItN9F9eZIkNAAAAAFvJw4tNzOhixgAAuF2NARDDuCOfAhDo + FAUBAIPsQINl/ACDPYRABRAAU1ZXiWXwi9l1FWg4/QIQjUXsUMdF7PICAADoKQQBAL8GAQAAjXW06E5q + AADGRfwBZoM7A41DJolF6HwFi0NO6wIzwFD/cwozyf912Ojniv7/i8jokor+/1D/FYRABRCFwHQii0XY + jVABighAhMl1+SvCiUW4jVW0jUXo6H1tAAAzyUHrAjPJ6MaJ/v+NdbToIWkAAItN9F9eZIkNAAAAAFvJ + w4tN5OiZxQAAuCaOARDDuDWfAhDoSwQBAIPsOINl/ACDDVBQAxD/U1ZXjXECjX28iWXw6CpsAADGRfwB + /3Xg6B/s//9qCzPJWkHo9Ij+/4v36L1oAACLTfRfXmSJDQAAAABbycOLTezoNcUAALiKjgEQw7hHnwIQ + 6OcDAQCD7DiDZfwAgw1QUAMQ/1NWV41xAo19vIll8OjGawAAi/fGRfwB6IdnAAD/cCSDyP/o8dz//2oL + M8laQeiGiP7/6FFoAACLTfRfXmSJDQAAAABbycOLTezoycQAALj2jgEQw7hhnwIQ6HsDAQCD7GiDZfwA + gw1QUAMQ/1NWV4vZjXMCjX2MiWXw6FhrAACNcyaNfbzGRfwB6ElrAACL98ZF/ALoCmcAAIt4JI11jOj/ + ZgAAi0AkV1DoJOr//2oLWovI6ACI/v+NdbzoyGcAAI11jOjAZwAAi030X15kiQ0AAAAAW8nDi03s6DjE + AAC4h48BEMO4g58CEOjqAgEAgeyAAAAAU1ZXM9uJXfyDTeT/iV3IU2gAAAAIagNTagFoAAAAgP91CMZF + /AKLNdywAhCJXdCJXdT/1oP4/4lF7IlF4HUSU1P/FViwAhBoMNUCEOkoAgAAjY10////UVD/FUSxAhCF + wFN1EVP/FViwAhBoFNUCEOkEAgAA/7V0////agJTU2gAAABA/3UM/9aD+P+JReiJReR0q2oBU1P/dZTo + HP8AAItNmDP2A8ET1jvTiUXYiVXciUXAiVXEf1R8Bz0AABAAcwnHRQj//wAA60k7038+fAc9AACgAHMJ + x0UI/P8DAOszO9N/KHwHPQAAQAZzCcdFCPD/DwDrHTvTfxJ8Bz0AAEAfcwnHRQjg/x8A6wfHRQjA/z8A + i30IjXXI6AzG//+LRdgLRdwPhNwAAACLx5mJRbiJVbyLRbw5Rdx8D38Ii0W4OUXYdgWLRQjrA4tF2ClF + 2FONTfAZXdxRUP91yIlF8P917P8VELECEIXAUw+E7AAAAI1F8FD/dfD/dcj/dej/FQSxAhCFwA+E3wAA + AIt1EDieABAAAHRji0XQA0XwURFd1IlF0N9t0FGNvgAIAADdXbDfbcDdXajdRbDcdajcDdj8AhDdXajd + RajdHCT/dcT/dcD/ddRQVlf/FeyxAhCDxCCNjgIQAACL1+jvVgAAOZ4GEAAAD4SaAAAAi0XYC0XcD4Ut + ////i3UQ/3Xsiz2IsAIQ/9f/deiDTeD//9eDyP+BxgEQAAA4HolF5HQK/3UM6O3Z//84Hl8PlEUTOV3I + Xlt0Cf91yOhEjf7/WYtN9IpFE2SJDQAAAADJwgwAU/8VWLACEGi41AIQ6w1TU/8VWLACEGis1AIQi/jo + bcIAAGg4/QIQjUUQUMdFEE5hvADokf8AAMaGARAAAAHpaf///1WL7IB9FAB0J/91GP91DP91COg4/f// + hMB0Ef91CItFEOhc2f//sAFdwhQAMsDr+P91DP91CP8VOLECEIXAdeZQUP8VWLACEGjE1AIQi/jo+MEA + AGg4/QIQjUUUUMdFFE5hvADoHP8AAMy4qJ8CEOjP/wAAUbjEEAAA6Oz/AACDZfwAgw1QUAMQ/1NWV4vZ + jXMCjX2EiWXw6KRnAACNcyaNvVT////GRfwB6JJnAABqA1iLy411tMZF/ALofmYAAMZF/AMzwMaFLO// + /wC5/wEAAI29Le////OrZquqM8CBfbgABAAAuQkCAACNvSz3///zq2ardhVoOP0CEI1F6FDHReiFAwAA + 6Hn+AACDfbgA/7V4////D5fA/3WoiIUs////6AvX//+EwA+UwIC9LP///wCIRex0GP912I2FLO///2jQ + 1AIQUP8V7LECEIPEDI2FLO///1D/dexq//+1eP////91qOiW/v//D7bI6B2E/v+NdbToeGMAAI21VP// + /+htYwAAjXWE6GVjAACLTfRfXmSJDQAAAABbycOLTeTo3b8AALjikwEQw7jNnwIQ6I/+AABRuMAQAADo + rP4AAINl/ACDDVBQAxD/U1ZXi9mNcwKNfYiJZfDoZGYAAI1zJo29WP///8ZF/AHoUmYAAGoDWIvLjXW4 + xkX8Aug+ZQAAxkX8AzPAxoUw7///ALn/AQAAjb0x7///86tmq6ozwIF9vAAEAAC5CQIAAI29MPf///Or + Zqt2FWg4/QIQjUXsUMdF7IUDAADoOf0AAIN9vAAPl8CDfbwAiIUw////dhj/ddyNhTDv//9o0NQCEFD/ + FeyxAhCDxAyNhTDv//9Q/7V8/////3Ws6MP6//8Ptsjo+4L+/411uOhWYgAAjbVY////6EtiAACNdYjo + Q2IAAItN9F9eZIkNAAAAAFvJw4tN6Oi7vgAAuASVARDDuOefAhDobf0AAIPsbINl/ABTVleNcQKNfYiJ + ZfDoU2UAAL8GAQAAjXW4xkX8Aei4YgAAxkX8Aotd3I11iOj/YAAAi0AkV1NQ/xUcsQIQhcCJRbx1KVBQ + /xVYsAIQaCS+AhCL+OgXvwAAaDj9AhCNRexQx0XsTmG8AOg7/AAAjXW46BpOAADom2EAAI11iOiTYQAA + i030X15kiQ0AAAAAW8nDi03o6Au+AAC4tJUBEMO4AaACEOi9/AAAg+xwg2X8AIM9eEAFEABTVleJZfB1 + EcdF7PICAABoOP0CEI1F7OthjXECjX2E6IlkAAC/BgEAAI11tMZF/AHo7mEAAMZF/AKLXdiNdYToNWAA + AItAJFdTUP8VeEAFEIXAiUW4dSlQUP8VWLACEGg4vgIQi/joTb4AAMdF6E5hvABoOP0CEI1F6FDocfsA + AI11tOhQTQAA6NFgAACNdYToyWAAAItN9F9eZIkNAAAAAFvJw4tN5OhBvQAAuH6WARDDuDmgAhDo8/sA + AIHs0AAAAFNWVzPbjXECjb0k////iWXwiU3siV386M9jAAC/BQEAAI21VP///8ZF/AHoMWEAAI11hMZF + /ALoJWEAAIldvINN6P/GRfwFjbUk////x0XkAAEAAOheXwAAi0AkU1NqA1NTaAAAAgBQ/xXcsAIQg/j/ + iUXodShTU/8VWLACEGgw1QIQi/jobL0AAMdF1E5hvABoOP0CEI1F1OnbAAAAi33kjXW86Iu///+LfbyN + ReRQ/3XkV2oB/3Xo/xWUQAUQO8N1Lf8VWLACEIP4enTQU1NoQNYCEIv46Bq9AADHRcROYbwAaDj9AhCN + RcTpiQAAAI1FuFCNRdhQV/8VmEAFEDvDdSVTU/8VWLACEGgk1gIQi/jo37wAAMdFzE5hvABoOP0CEI1F + zOtRuAUBAACJReCJRdyNRchQjUXcUP91qI1F4FD/tXj/////ddhT/xWcQAUQO8N1KVNT/xVYsAIQaOjU + AhCL+OiMvAAAx0XQTmG8AGg4/QIQjUXQUOiw+QAAi0Xgi3XsiYVY////i0XciUWIjUYmiUXsjZVU//// + jUXs6D9jAABmgz4DfBGNRkqJReyNVYSNRezoKGMAAGaDPgR8Eo1F7IPGblCLRciJdezo200AAGoLM8la + Qejtfv7/g33o/3QJ/3Xo/xWIsAIQO/t0B1fooYb+/1mNdYTom14AAI21VP///+iQXgAAjbUk////6IVe + AACLTfRfXmSJDQAAAABbycOLTbTo/boAALjCmAEQw7hLoAIQ6K/5AACD7DyDZfwAgw1QUAMQ/1NWV4vZ + jXMCjX24iWXw6IxhAACL98ZF/AHoTV0AAP9zLotAJFD/FTCxAhCFwHUpUFD/FViwAhBoYL4CEIv46Ge7 + AABoOP0CEI1F7FDHRexOYbwA6Iv4AABqCzPJWkHoHX7+/411uOjlXQAAi030X15kiQ0AAAAAW8nDi03o + 6F26AAC4YpkBEMO4XaACEOgP+QAAg+w8U1ZXM9uJXfyDDVBQAxD/jXECjX24iWXw6O1gAACL98ZF/AHo + rlwAAP9wJP8VDLECEIP4/3UpU1P/FViwAhBodL4CEIv46Mu6AABoOP0CEI1F7FDHRexOYbwA6O/3AADo + DU4AAI11uOhPXQAAi030X15kiQ0AAAAAW8nDi03o6Me5AAC4+JkBEMO4eqACEOh5+AAAg+x4U1ZXM9uN + cQKNvXz///+JZfCJXfzoW2AAAINN7P/GRaxOZsdFrhQAiV2wi/fGRfwC6AtcAACLQCRTaAAAAAJqA1NT + U1D/FdywAhCL8IP+/4l17HUlU1P/FViwAhBoMNUCEIv46Be6AADHRehOYbwAaDj9AhCNRejrc6F0QAUQ + O8N0MI1N0FFW/9A7w3VlU1P/FViwAhBoyNcCEIv46N65AADHReROYbwAaDj9AhCNReTrOo1F1FBW/xXg + sAIQg/j/iUXQdS3/FViwAhA7w3QjU1NoiL4CEIv46KK5AADHReBOYbwAaDj9AhCNReBQ6Mb2AADbRdSL + RdCFwN1d2N1F2NwN+PsCENtF0H0G3AX4+wIQ3V3YjU2s3EXY3V246Cl8/v9W/xWIsAIQjbV8////6PFb + AACLTfRfXmSJDQAAAABbycOLTdzoabgAALhWmwEQw7iXoAIQ6Bv3AACB7MQAAACDZfwAgw1QUAMQ/1OL + 2YpDJjxUVleJZfB1GN0FuPsCEN1DMtrp3+D2xER7DsZF7wHrDDwwD4WyAgAAxkXvAGaLC2aD+QN8N4pD + SjxUdRjdBbj7AhDdQ1ba6d/g9sREex7GRe4B6xw8MHQUx0XIhQMAAGg4/QIQjUXI6X0CAADGRe4AZoP5 + BHw3ikNuPFR1GN0FuPsCEN1Detrp3+D2xER7HsZF7QHrHDwwdBTHRdiFAwAAaDj9AhCNRdjpPAIAAMZF + 7QCAfe8AdSCAfe4AdRqAfe0AdRTHRdSFAwAAaDj9AhCNRdTpEgIAAI1zAo29MP///+gcXgAAZoM7BXwQ + M/85u5YAAAB1BsZF7ADrBsZF7AEz/4NNxP+NtTD////GRfwC6LlZAACLQCRXaAAAAAJqA1dXaAABAABQ + /xXcsAIQg/j/iUXgiUXEdShXV/8VWLACEGgw1QIQi/jowLcAAMdF3E5hvABoOP0CEI1F3OmJAQAAilXv + hNJ0SoB97ADdQzJqCd2dcP///1mNtWT///+NfYjGhWT///9U86V0DN1FlNwF+EQFEN1dlI195I1NiOgt + QAAAi0XkilXviUW0i0XoiUW4ik3uhMl0TYB97ADdQ1ZqCd2dcP///1mNtWT///+NfYjGhWT///9U86V0 + DN1FlNwF+EQFEN1dlI195I1NiOjcPwAAi0XkilXvik3uiUWsi0XoiUWwikXthMB0UIB97ADdQ3pqCd2d + cP///1mNtWT///+NfYjGhWT///9U86V0DN1FlNwF+EQFEN1dlI195I1NiOiIPwAAi0XkilXvik3uiUW8 + i0XoiUXAikXt9tiNdbwbwCPG9tlQjUWsG8kjyPbajUW0URvSI9BS/3Xg/xX8sAIQhcB1JVBQ/xVYsAIQ + aPzUAhCL+OhxtgAAx0XQTmG8AGg4/QIQjUXQ6z1qCzPJWkHoK3n+//914P8ViLACEI21MP///+jnWAAA + i030X15kiQ0AAAAAW8nDx0XMhQMAAGg4/QIQjUXMUOhW8wAAi41g////6Ee1AAC4YJ4BEMO4tKACEOj5 + 8wAAgeygAAAAg2X8AIMNUFADEP9Ti9mKQyY8UlZXiWXwdBg8MHQUx0XUhQMAAGg4/QIQjUXU6SABAABm + iwtmg/kDfB+KQ0o8UnQYPDB0FMdFyIUDAABoOP0CEI1FyOn4AAAAZoP5BHwfikNuPFJ0GDwwdBTHRcSF + AwAAaDj9AhCNRcTp0wAAAI1zAo29VP///+hkWwAAjUMmiUXojUNKiUXkjUNuM/9mgzsFiUXgfAw5u5YA + AADGRe8AdQTGRe8Bg03M/9nu3V2sxkWgVI21VP///8ZF/ALo6lYAAItAJFdoAAAAAmoDV1dXUP8V3LAC + EIP4/4lF2IlFzHUlV1f/FViwAhBoMNUCEIv46PW0AADHRdxOYbwAaDj9AhCNRdzrOo1NlFGNTYRRjU2M + UVD/FUCxAhCFwHUpV1f/FViwAhBoCNUCEIv46Lm0AADHRdBOYbwAaDj9AhCNRdBQ6N3xAACLReiAOFJ1 + KI1FjI11oOguPAAAgH3vAHQM3UWs3CX4RAUQ3V2sjVWgjUXo6HRGAABmgzsDfDCLReSAOFJ1KI1FhI11 + oOj4OwAAgH3vAHQM3UWs3CX4RAUQ3V2sjVWgjUXk6D5GAABmgzsEfDCLReCAOFJ1KI1FlI11oOjCOwAA + gH3vAHQM3UWs3CX4RAUQ3V2sjVWgjUXg6AhGAABqCzPJWkHo03b+//912P8ViLACEI21VP///+iPVgAA + i030X15kiQ0AAAAAW8nDi02c6AezAAC4uKABEMO43KACEOi58QAAgewUAQAAg2X8AIMNUFADEP9TVleJ + ZfCL2WoBagmNcwKNvWz////oEUwAAI1zJo294P7//8ZF/AHoelkAADP/ZoM7AnQJOXtOxkXvAHUExkXv + AYNN3P/Z7t1dwMZFtFTGhRD///9OZseFEv///xQAib0U////jbXg/v//xkX8A+j/VAAAi0AkV2gAAAAC + agNXV1dQ/xXcsAIQi9iD+/+JXdx1JVdX/xVYsAIQaDDVAhCL+OgLswAAx0XYTmG8AGg4/QIQjUXY6zWN + hTT///9QU/8VRLECEIXAdSlXV/8VWLACEGgU1QIQi/jo1LIAAMdF4E5hvABoOP0CEI1F4FDo+O8AAIuF + NP///42NbP///2bHhXX///8BAOgmMwAA24VU////i4VU////hcB9BtwF+PsCEIuFWP///91d5IXA3UXk + 3A34+wIQ24VY////fQbcBfj7AhDdXeSNlRD////cReSNjWz///9mx4V1////AgDdnRz////o+zIAAI2F + OP///411tOjWOQAAgH3vAHQM3UXA3CX4RAUQ3V3AjVW0jY1s////ZseFdf///wMA6MQyAACNhUD///+N + dbTonzkAAIB97wB0DN1FwNwl+EQFEN1dwI1VtI2NbP///2bHhXX///8EAOiNMgAAjYVI////jXW06Gg5 + AACAfe8AdAzdRcDcJfhEBRDdXcCNVbSNjWz///9mx4V1////BQDoVjIAAIuFXP///0iNjWz///9mx4V1 + ////BgDoCDIAAIuFUP///42NbP///2bHhXX///8HAOioMQAAi4Vk////jY1s////ZseFdf///wgA6I4x + AACLhWD///+NjWz///9mx4V1////CQDodDEAAGoLM8laQegEdP7/U/8ViLACEI214P7//+jCUwAAjbVs + ////6O8yAACLTfRfXmSJDQAAAABbycOLjWj////oLLAAALiQowEQw7j8oAIQ6N7uAACB7PwAAACDZfwA + gw1QUAMQ/4M9kEAFEABTVleJZfCL2XUUx0Xg8gIAAGg4/QIQjUXg6ZsAAABqAWoFjXMCjb1M////6BlJ + AACNcyaNvfj+///GRfwB6IJWAADGRfwCM/9mgzsCdAk5e050BDLb6wKzAdnujbX4/v//3V3IxkW8VMaF + KP///05mx4Uq////FACJvSz////oDVIAAItAJI1NlFFXUP8VkEAFEDvHdSlXV/8VWLACEGg81QIQi/jo + JbAAAMdF5E5hvABoOP0CEI1F5FDoSe0AAItFlI2NTP///2bHhVX///8BAOh6MAAA20Wwi0WwhcB9BtwF + +PsCEItFtN1d6IXA3UXo3A34+wIQ20W0fQbcBfj7AhDdXeiNlSj////cReiNjUz///9mx4VV////AgDd + nTT////oWzAAAI1FmI11vOg5NwAAhNt0DN1FyNwl+EQFEN1dyI1VvI2NTP///2bHhVX///8DAOgpMAAA + jUWgjXW86Ac3AACE23QM3UXI3CX4RAUQ3V3IjVW8jY1M////ZseFVf///wQA6PcvAACNRaiNdbzo1TYA + AITbdAzdRcjcJfhEBRDdXciNVbyNjUz///9mx4VV////BQDoxS8AAGoLM8laQejccf7/jbX4/v//6KFR + AACNtUz////ozjAAAItN9F9eZIkNAAAAAFvJw4tNuOgOrgAAuLGlARDDuBmhAhDowOwAAIHsaAEAAINN + zP9TVlcz278FAQAAjXXoiV386A2z///GRfwBi0UMgXgIAgEAAHYmU1NoUNUCEGjEvgIQ6PqtAABoOP0C + EI1FDFDHRQxOYbwA6K3rAACNXejoL7n//4vD6Bi6////deiNtYz+///oYsn//4TAD4SgAAAAi30I9oWM + /v//EHRDjYWM/v//6Em8//+EwHVyi0UM/0cEjV3o6Om4//+NjYz+///oHbz//1CLw+gzuP//i8PoG7r/ + /41F6FBX6C/////rPouNqP7//4uFrP7///8HiU3kgWXkAAAAgIHh////f4Nl4ACJRdiJTdzfbdjfbeDZ + 4N7B3V3Q3UXQ3EcI3V8IjbWM/v//6GLI//+EwA+FY////4N96AB0Cf916OhEeP7/WYN9zP90Cf91zP8V + NLECEItN9F9eW2SJDQAAAADJwggAuEGhAhDobesAAIHszAAAAINl/ACDDVBQAxD/U1aL2YF7KgIBAABX + iWXwdhVoOP0CEI1F7FDHReyFAwAA6HjqAABqAWoDjXMCjb1Y////6KdFAACNcyaNvSj////GRfwB6BBT + AADGRfwCM9u/BQEAAI114MZFoE5mx0WiFACJXaToXrH//9nuxkX8A91d0P+1TP///4ldyIldzIld2Ive + 6MSv//+LxujkuP//jUXgUI1FyFDo9f3//4tFyI2NWP///2bHhWH///8BAOgyLQAAi0XMjY1Y////ZseF + Yf///wIA6BstAADdRdCNVaDdXayNjVj///9mx4Vh////AwDoMS0AAGoLM8laQehIb/7/g33gAHQJ/3Xg + 6Ad3/v9ZjbUo////6P5OAACNtVj////oKy4AAItN9F9eZIkNAAAAAFvJw4tNxOhrqwAAuFSoARDDuAik + AhDoHeoAAIHsQAMAAFNWVzPbiV38gw1QUAMQ/41xAo29AP///4ll8IlN2OjyUQAAi3XYg8Ymjb20/P// + xkX8AejdUQAAi0XYxkX8AmaLEGaD+gN8CotIUjvLiU3kdQfHReT///9/ZoP6BHwKi0B2O8OJRbh1B8dF + uAEAAAC/BgEAAI210P7//+gLTwAAiZ1M////iZ10////iZ14////iZ18////iV3EiV3IiV3MiV3Q2e6D + jaj+////3V2UxkWIVMaFrP7//05mx4Wu/v//FACJnbD+//+InQT9//+InST9//+IneT8//+JXbyJXayL + TbiLwcHoBvbQJAGIReuLReSAZed/wegfJAH2wQfGRfwIiEXviV3gdQaDyQGJTbj2wQR0IYG9BP///wAE + AAB2FWg4/QIQjUWEUMdFhIUDAADoIegAAPbBCHQJx0XcaGIBEOsh9sEQdAnHRdxFYgEQ6xP2wSDHRdw1 + YgEQdQfHRdxVYgEQiU3Yg2XYAXQfi4Uk////agczyYmFdP///1hBjZU8////6EtCAADrRfbBAnQVaKDV + AhD/tST///+NdcTokT8AAOsrvwAIAACNdbzoqKz//411rOigrP///7Uk////aHTVAhD/dbzox4/+/4PE + DP+12Pz//421aP3//+hGxf//OsN1fmoLWjPJ6ANt/v85Xax0Cf91rOjDdP7/WTldvHQJ/3W86LV0/v9Z + g72o/v///3QM/7Wo/v///xU0sQIQjUXE6E8pAACNtTz////oxysAAI210P7//+iETAAAjbW0/P//6HlM + AACNtQD////obkwAAItN9F9eZIkNAAAAAFvJwzld2A+EugEAAP915P+1aP3///9V3DrDD4SOAQAAOF3v + dRONhWj9///onbf//4TAD4V2AQAA/0Xgi33gagdbjbU8////6NpAAACNhZT9//9QjZ3Q/v//Zom9Rf// + /2bHhUf///8BAOisSQAAi9CLzui/PwAAjYWY/v//UGaJvUX///9mx4VH////AgDoh0kAAIvQi87omj8A + AI2FbP3//411iOivMAAAMts4Xet0DN1FlNwl+EQFEN1dlI1ViI2NPP///2aJvUX///9mx4VH////AwDo + lSkAAI2FdP3//411iOhwMAAAOF3rdAzdRZTcJfhEBRDdXZSNVYiNjTz///9mib1F////ZseFR////wQA + 6FgpAACNhXz9//+NdYjoMzAAADhd63QM3UWU3CX4RAUQ3V2UjVWIjY08////Zom9Rf///2bHhUf///8F + AOgbKQAAi4WE/f//i42I/f//UFGNhaz+///opDgAAIvQjY08////Zom9Rf///2bHhUf///8GAOjlKAAA + i4Vo/f//jY08////Zom9Rf///2bHhUf///8HAOiRKAAAM9uNtWj9///orsL//zrDD4VL/v//6YsCAAD2 + RbgCD4RfAQAA/3Xk/7Vo/f///1XcOsMPhDMBAAA4Xe91E42FaP3//+jZtf//hMAPhRsBAAD/ReCNRcTo + 6yYAAI2FlP3//1CNndD+///oAUgAAIt9zIvQjUXEiX3Q6JgmAACNhZj+//9Q6OVHAACNTw2L0I1FxIlN + 0Oh8JgAAjYVs/f//jXWI6AYvAAAy2zhd63QM3UWU3CX4RAUQ3V2UjUcaiUXQjVWIjUXE6EomAACNhXT9 + //+NdYjo1C4AADhd63QM3UWU3CX4RAUQ3V2UjUcniUXQjVWIjUXE6BomAACNhXz9//+NdYjopC4AADhd + 63QM3UWU3CX4RAUQ3V2UjUc0iUXQjVWIjUXE6OolAACLhYT9//+LjYj9//9QUY2FrP7//+giNwAAjU9B + i9CNRcSJTdDowSUAAI1FxFCLhWj9//+Dx06JfdDocSUAADPbjbVo/f//6EXB//86ww+Fpv7//+kiAQAA + agjGhUT9//8wM8BZjb1F/f//86tmq6r/deT/tWj9////Vdw6ww+E5AAAADhd73UTjYVo/f//6GO0//+E + wA+FzAAAAP91642FbP3//1CNhQT9///oQEAAAP91642FdP3//1CNhST9///oK0AAAP91642FfP3//1CN + heT8///oFkAAAIuNhP3//4uFiP3///+1aP3//4lFtIlN2IFl2AAAAICB4f///3+JTbjfbbSJXdTfbdRR + UY2F5Pz//9ng3sHdnTT////dhTT////dHCRQjYUk/f//UI2FBP3//1CNhZj+//9QjYWU/f//UP91vP91 + rOgPi/7/i1Wsg8QojY1E/f//6Hc5AAA5nUj9//90E421aP3//+gewP//OsMPhfX+//+LReDovzgAAOkx + +///i40w////6IikAAC42aoBEMOhDEAFEIXAdAdQ/xXAsAIQw1WL7IPsJItFDFb/dQiNsJwAAAD/cGz/ + NuiXiv7/ixaDxAyNTdzocGL+/4XAXnQRiUUMaDj9AhCNRQxQ6DXiAACLReDJwggAUVNVVos10LACEDPb + gz1IYAMQAlfGRCQTAQ+FmwAAAIM9PGADEAQPh44AAABoTNMCEP8V1LACEDvDowxABRB0MWg80wIQUP/W + aCjTAhD/NQxABRCjEEAFEP/WaBTTAhD/NQxABRCjFEAFEP/WoxhABRBoCNMCEP8VYLACEDvDdA1o7NIC + EFD/1qMcQAUQOR0QQAUQdB85HRRABRB0FzkdGEAFEHQPOR0cQAUQxgUgQAUQAXUGiB0gQAUQaNzSAhD/ + FWCwAhCLLViwAhCL+Dv7D4RGAQAAaMDSAhBX/9ZosNICEFejNEAFEP/WaKDSAhBXozhABRD/1miQ0gIQ + V6M8QAUQ/9ZogNICEFejQEAFEP/WaHDSAhBXo0RABRD/1mhg0gIQV6NIQAUQ/9ZoUNICEFejTEAFEP/W + aEDSAhBXo1BABRD/1mg00gIQV6NUQAUQ/9ZoKNICEFejWEAFEP/WaAzSAhBXo1xABRD/1qNgQAUQoTRA + BRA7w3QXOR04QAUQdA85HTxABRDGBWxABRABdQaIHWxABRA7w3QXOR1AQAUQdA85HURABRDGBW1ABRAB + dQaIHW1ABRA7w3QXOR1IQAUQdA85HUxABRDGBW5ABRABdQaIHW5ABRA7w3QXOR1QQAUQdA85HVRABRDG + BW9ABRABdQaIHW9ABRA5HVhABRB0ETkdXEAFEHQJxgVwQAUQAesdiB1wQAUQ6xVTagH/1Wj80QIQi/jo + yaIAAIhcJBNo8NECEP8VYLACEIv4O/t0UGjY0QIQV//WaMTRAhBXoyRABRD/1mi00QIQV6MoQAUQ/9Zo + oNECEFejMEAFEP/WaIjRAhBXoyxABRD/1mh00QIQV6NkQAUQ/9ajaEAFEOsVU2oB/9Vo/NECEIv46FOi + AACIXCQTikQkE19eXVtZw7hToQIQ6DLgAACD7ECDZfwAgz1gQAUQAFNWV4ll8IvZdRVoOP0CEI1F7FDH + RezyAgAA6EffAACLe1KNdbTobkUAAMZF/AGNRehQ/3NS/3XY/3Mu/3MK/xVgQAUQ99gbwCNF6IlFuOj6 + MAAA6HtEAACLTfRfXmSJDQAAAABbycOLTeTo/l7+/7jMsgEQw7iAoQIQ6KXfAACB7MQAAACDZfwAU1ZX + i/GDxgKwAY19lIll8OiOJAAAvwYBAACNtUj////GRfwB6OZEAACDZdwAg03s/8ZF/ASAPSBABRAAuwAB + AAB1FMdFhPICAABoOP0CEI1FhOkyAQAAi/vB5wKNddzofqP//41F6FBX/3Xc/xUQQAUQhcB1LlBQ/xVY + sAIQaDzTAhCL+OgaoQAAx4V8////TmG8AGg4/QIQjYV8////6eUAAACLReiLyMHpAjvLdQiBw4AAAADr + n8HoAovIagVYjVWUiU2I6JE4AAAz9kY7dYgPh7oBAACLRdyNBLD/MDPbU2gQBAAAiUXk/xXIsAIQg33s + /4v4dAn/dez/FYiwAhCD//+JfewPhA0BAACNRehQagSNRYBQV/8VFEAFEDvDdSVTU/8VWLACEGgo0wIQ + i/jobqAAAMdFkE5hvABoOP0CEI1FkOtCaAYBAAD/tWz/////dYBX/xUYQAUQO8OJhUz///91KVNT/xVY + sAIQaBTRAhCL+OgqoAAAx0WMTmG8AGg4/QIQjUWMUOhO3QAAjZVI////jU2UZol1nWbHRZ8BAOh3NgAA + i0XkZol1nWbHRZ8CAIsAjU2U6CEgAACNRehQahiNhTD///9QU1f/FRxABRA7w41NlGbHRZ8DAGaJdZ11 + E4uFRP///+jwHwAAi4U8////6wkzwOgnIAAAM8CNTZRmx0WfBQBmiXWd6BMgAABmx0WfBADrY42VSP// + /41NlImdTP///2aJdZ1mx0WfAQDo5jUAAItF5GaJdZ1mx0WfAgCLAI1NlOiQHwAAM8CNTZRmiXWdZsdF + nwMA6MIfAAAzwI1NlGaJdZ1mx0WfBADorh8AAGbHRZ8FAI1NlDPAZol1neiaHwAARuk9/v//D7dNnWoF + WujdYf7/g33s/3QJ/3Xs/xWIsAIQg33cAHQJ/3Xc6I1p/v9ZjbVI////6IRBAACNdZTotCAAAItN9F9e + ZIkNAAAAAFvJw4uNeP///+jxnQAAuMu1ARDDuDCkAhDoo9wAAIHsXAIAAINl/ACDPWhABRAAU1ZXiWXw + i9l1FWg4/QIQjUXsUMdF7PICAADotdsAAGoFagGNcwKNfaTo5zYAAGoCWIvLjbVA////xkX8AehLQwAA + v4AAAACNtXD////GRfwC6LBBAADGRfwDx4WY/f//qAEAADP/agCNhZj9//9QV/+1ZP////8VaEAFEEeF + wA+ErwAAAGoBjUWk6NRFAACL8I2FvP3//1CNnXD///9miXWtZsdFrwEA6Ew+AACL0I1NpOheNAAAjYWc + /f//UGaJda1mx0WvAgDoLD4AAIvQjU2k6D40AACNhUD+//9QZol1rWbHRa8DAOgMPgAAi9CNTaToHjQA + AI2FwP7//1BmiXWtZsdFrwQA6Ow9AACL0I1NpOj+MwAAi4U8/v//jU2kZol1rWbHRa8FAOjtHQAA6TL/ + //8Pt02tagVa6DFg/v+NtXD////o9j8AAI21QP///+jrPwAAjXWk6BsfAACLTfRfXmSJDQAAAABbycOL + TaDoZlr+/7hktwEQw7hNpAIQ6A3bAACB7CgBAACDZfwAgw1QUAMQ/1NWV4ll8IvZagRqAY1zAo19mOho + NQAAagJYi8uNtWj////GRfwB6MxBAAAz/8ZF/AI5PWRABRCJfex1FMdF6PICAABoOP0CEI1F6OnlAAAA + Zom98v7//2bHhfD+//+cADPbjYXM/v//UFP/dYz/FWRABRBDO8d0cWoBjUWY6EtEAACL8IuFOP///41N + mGaJdaFmx0WjAQDo6hwAAIuFPP///41NmGaJdaFmx0WjAgDo0hwAAIuFNP///41NmGaJdaFmx0WjAwDo + uhwAAIuFRP///41NmGaJdaFmx0WjBADoohwAAOl5////gz1IYAMQAnUggz08YAMQBXUXoUBgAxA7x3QF + g/gBdQn/FViwAhCJRew5fex0JFdXi33saJTQAhDo35sAAMdF5E5hvABoOP0CEI1F5FDoA9kAAA+3TaFq + BVrolF7+/421aP///+hZPgAAjXWY6IkdAACLTfRfXmSJDQAAAABbycOLTeDoyZoAALj2uAEQw4tEJBRq + AehLQwAAD7dEJBCLTCQU6PYbAAAzwEDCFAC4cqQCEOhc2QAAgezsAAAAg2X8AIMNUFADEP9TVleNhQj/ + //+JZfCL2eivVv7/agNYi8uNdbDGRfwB6CJAAABqBFiLy411gMZF/ALoEUAAAGoAagGNcwKNvQj////G + RfwD6AlDAACKQ0o8Q3UFi3XU6xs8SXUFi3NS6xI8Tg+FxAAAAN1DVug31QAAi/CKQ248Q3UFi0Wk6xk8 + SXUFi0N26xA8Tg+FjAAAAN1DeugQ1QAAjY0I////UWgTuQEQUFb/cy7/FcywAhCFwHUlUFD/FViwAhBo + qNACEIv46I6aAADHRehOYbwAaDj9AhCNRejrZA+3jRH///9qBVroRF3+/411gOgMPQAAjXWw6AQ9AACN + tVD////o+TwAAI21CP///+gmHAAAi030X15kiQ0AAAAAW8nDx0XshQMAAGg4/QIQjUXs6w/HReSFAwAA + aDj9AhCNReRQ6EzXAACLTeDoQJkAALhZugEQw1aLdCQUagGLxui/QQAAi0QkEKkAAP//dBZTUI1eSOhA + OgAAi9CLzuhTMAAAW+sHi87oUBoAADPAQF7CEAC4j6QCEOi11wAAgey4AAAAg2X8AIMNUFADEP9TVleN + hTz///+JZfCL2egIVf7/agNYi8uNdbTGRfwB6Hs+AABqAGoBjXMCjb08////xkX8AuhzQQAAvwAIAACN + dYToSykAAIpDSjxDdQWLRdjrGTxJdQWLQ1LrEDxOD4WAAAAA3UNW6JTTAACNjTz///9RaJy6ARBQ/3Mu + /xXYsAIQhcB1JVBQ/xVYsAIQaMDQAhCL+OgTmQAAx0XsTmG8AGg4/QIQjUXs60gPt41F////agVa6Mlb + /v+NdbTokTsAAI11hOiJOwAAjbU8////6LYaAACLTfRfXmSJDQAAAABbycPHReiFAwAAaDj9AhCNRehQ + 6O3VAACLTeTo4ZcAALjJuwEQw1aLdCQQagGLxuhgQAAAZvdEJA7//3QZU/90JBCNXkjo4DgAAIvQi87o + 8y4AAFvrDA+3RCQMi87o6xgAADPAQF7CDAC4pKQCEOhQ1gAAgeyEAAAAg2X8AIMNUFADEP9TVleNhXD/ + //+JZfCL2eijU/7/agBqAY1zAo29cP///8ZF/AHoH0AAAL8AAgAAjXW46PcnAACNhXD///9QaPu7ARD/ + cy7/FcSwAhCFwHUpUFD/FViwAhBo1NACEIv46OWXAABoOP0CEI1F7FDHRexOYbwA6AnVAAAPt415//// + agVa6Jda/v+NdbjoXzoAAI21cP///+iMGQAAi030X15kiQ0AAAAAW8nDi03o6MyWAAC487wBEMO4uaQC + EOh+1QAAgeyAAAAAg2X8AIMNUFADEP+APXBABRAAU1ZXiWXwi9l1FMdF7PICAABoOP0CEI1F7OmBAQAA + agZqAY1zAo29dP///+i5LwAAxkX8Af9zUo1FvP9zLsdFvCQAAABQ/xVYQAUQM/87x3VR/xVYsAIQg/gS + dSRqCzPJWujfWf7/jbV0////6NwYAACLTfRfXmSJDQAAAABbycNXV2g00gIQi/jo4ZYAAMdF6E5hvABo + OP0CEI1F6On9AAAAagGNhXT////oiD4AAIvwi0W8jY10////Zom1ff///2bHhX////8BAOghFwAAi0XA + jY10////Zom1ff///2bHhX////8CAOgDFwAAi0XEjY10////Zom1ff///2bHhX////8DAOjlFgAAi0XI + jY10////Zom1ff///2bHhX////8EAOjHFgAAi0XMjY10////Zom1ff///2bHhX////8FAOipFgAAi0XQ + jY10////Zom1ff///2bHhX////8GAOiLFgAAjUW8UP8VXEAFEDvHD4Ur/////xVYsAIQg/gSdCNXV2go + 0gIQi/jo35UAAMdF5E5hvABoOP0CEI1F5FDoA9MAAA+3jX3///9qBemt/v//i03g6OmUAAC4o70BEMO4 + 06QCEOib0wAAg+x0g2X8AIMNUFADEP+APW9ABRAAU1ZXiWXwi9l1FMdF7PICAABoOP0CEI1F7OkwAQAA + agJqAY1zAo19gOjcLQAAg03o/8ZF/AKLWy5TagHHRcgQAAAA/xU0QAUQi/CD/v+L3old6HUqagBqAP8V + WLACEGj40AIQi/joJZUAAMdF5E5hvABoOP0CEI1F5OnQAAAAjUXIUFb/FVBABRAz/zvHdVL/FViwAhCD + +BJ1KGoLWjPJ6MFX/v9W/xWIsAIQjXWA6LoWAACLTfRfXmSJDQAAAABbycNXV2jo0AIQi/jov5QAAMdF + 4E5hvABoOP0CEI1F4OttagGNRYDobDwAAIvwi0XQjU2AZol1iWbHRYsBAOjIFAAAi0XUjU2AZol1iWbH + RYsCAOizFAAAjUXIUFP/FVRABRA7x3W7/xVYsAIQg/gSdCNXV2hA0gIQi/joUJQAAMdF3E5hvABoOP0C + EI1F3FDodNEAAA+3TYlqBVroBVf+/4P7/w+EQv///1PpNv///4tN2OhNkwAAuMW/ARDDuPikAhDo/9EA + AIHsvAIAAINl/ACDDVBQAxD/U1ZXiWXwi9lqBWoBjXMCjX2U6FosAAC/BgEAAI21YP///8ZF/AHoNzcA + AINN4P/GRfwDgD1uQAUQAItbLnUUx0Xo8gIAAGg4/QIQjUXo6ZcBAABTagjHhTj9//8oAgAA/xU0QAUQ + i/CD/v+L/ol94HUqagBqAP8VWLACEGj40AIQi/job5MAAMdF3E5hvABoOP0CEI1F3OlOAQAAjYU4/f// + UFb/FUhABRCFwHVi/xVYsAIQg/gSdTNqC1ozyegKVv7/Vv8ViLACEI21YP///+jINQAAjXWU6PgUAACL + TfRfXmSJDQAAAABbycNqAGoAaHDSAhCL+Oj7kgAAx0XkTmG8AGg4/QIQjUXk6doAAABqAY1FlOilOgAA + i/CNhVj9//9QjZ1g////Zol1nWbHRZ8BAOgdMwAAi9CNTZToLykAAI2FWP7//1BmiXWdZsdFnwIA6P0y + AACL0I1NlOgPKQAAi4VU/f//jU2UZol1nWbHRZ8DAOj+EgAAi4VQ/f//jU2UZol1nWbHRZ8EAOigEgAA + i4VM/f//jU2UZol1nWbHRZ8FAOjOEgAAjYU4/f//UFf/FUxABRCFwA+FUP////8VWLACEIP4EnQlagBq + AGhg0gIQi/joHJIAAMdF7E5hvABoOP0CEI1F7FDoQM8AAA+3TZ1qBVro0VT+/4P//w+Exf7//1fpuf7/ + /4tNkOgZkQAAuIfBARDDuBWlAhDoy88AAIHsgAAAAINl/ACDDVBQAxD/U1ZXiWXwi9lqA2oBjXMCjb10 + ////6CMqAACDTez/xkX8AoA9bUAFEACLWy51FMdF6PICAABoOP0CEI1F6OlaAQAAM/9XagT/FTRABRCL + 8IP+/4l17HUoV1f/FViwAhBo+NACEIv46FiRAADHReROYbwAaDj9AhCNReTpHQEAAI1FvFBWx0W8HAAA + AP8VQEAFEDvHdVj/FViwAhCD+BJ1K2oLWjPJ6O9T/v9W/xWIsAIQjbV0////6OUSAACLTfRfXmSJDQAA + AABbycNXV2iQ0gIQi/jo6pAAAMdF4E5hvABoOP0CEI1F4OmvAAAAO990BTtdyHVpagGNhXT////oiDgA + AIvwi0XEjY10////Zom1ff///2bHhX////8BAOjbEAAAi0XIjY10////Zom1ff///2bHhX////8CAOi9 + EAAAi0XMjY10////Zom1ff///2bHhX////8DAOjlEAAAjUW8UP917P8VREAFEDvHD4V5/////xVYsAIQ + g/gSdCNXV2iA0gIQi/joNpAAAMdF3E5hvABoOP0CEI1F3FDoWs0AAA+3jX3///9qBVro6FL+/4N97P8P + hPb+////dezp6P7//4tN2OgtjwAAuJrDARDDuDqlAhDo380AAIHswAEAAIMNUFADEP+DPUhgAxACU1ZX + iWXwi9l1HYM9PGADEAR3FOgE7v//i030X15kiQ0AAAAAW8nDg2X8AIA9bEAFEAB1FMdF6PICAABoOP0C + EI1F6OmyAQAAg03g/78GAQAAjbVg////xkX8AejfMgAAagVqAY1zAo19lMZF/ALo2ycAADP2VmoCxkX8 + A/8VNEAFEIvYg/v/i/uJfeB1KFZW/xVYsAIQaMDSAhCL+OgyjwAAx0XcTmG8AGg4/QIQjUXc6UQBAACN + hTT+//9QU8eFNP7//ywBAAD/FThABRA7xnVW/xVYsAIQg/gSdSlqC1ozyejDUf7/jXWU6MMQAACNtWD/ + ///ogDEAAFP/FYiwAhDpEv///1ZWaLDSAhCL+OjAjgAAx0XkTmG8AGg4/QIQjUXk6dIAAABqAY1FlOhq + NgAAi/CNhVj+//9QjZ1g////Zol1nWbHRZ8BAOjiLgAAi9CNTZTo9CQAAIuFPP7//41NlGaJdZ1mx0Wf + AgDonQ4AAIuFTP7//41NlGaJdZ1mx0WfAwDohQ4AAIuFSP7//41NlGaJdZ1mx0WfBADosw4AAIuFUP7/ + /41NlGaJdZ1mx0WfBQDomw4AAI2FNP7//1BX/xU8QAUQhcAPhVj/////FViwAhCD+BJ0JWoAagBooNIC + EIv46OmNAADHRexOYbwAaDj9AhCNRexQ6A3LAAAPt02dagVa6J5Q/v+NdZTong8AAI21YP///+hbMAAA + g///D4Tw/f//V+nN/v//i02Q6NOMAAC45cQBEMNTVot0JBhXagGLxuhQNQAA/3QkFIv4jV5IZol+CWbH + RgsBAOjOLQAAi9CLzujhIwAAi0QkGIvOZol+CWbHRgsCAOjTDQAAXzPAXkBbwhAAuE+lAhDoNssAAIHs + gAAAAINl/ABTVleNhXT///+JZfCL2eiQSP7/agJqAY1zAo29dP///8ZF/AHoDDUAAL8ABAAAjXW86OQc + AACNhXT///9QaAnHARD/cy7/FYizAhCD+P90Cw+3jX3///9qBesEagszyVropk/+/411vOhuLwAAjbV0 + ////6JsOAACLTfRfXmSJDQAAAABbycOLTezo5kn+/7jkxwEQw1WL7FaLdQxXagGLxuhXNAAAi/hmi0Z4 + ZoXAdBJmiUYLi0UIi85miX4J6PMMAABmg356AFN0LYtGbGiAAAAAUP91CI1eSP8VVLMCEIlDBGaLRnqL + 04vOZol+CWaJRgvotyIAAGaDfnwAdC2LRmxoABAAAFD/dQiNXkj/FVizAhCJQwRmi0Z8i9OLzmaJfglm + iUYL6IMiAABmi0Z+ZoXAix04swIQdBZq8P91CGaJfglmiUYL/9OLzuhlDAAAZouGgAAAAGaFwHQWauz/ + dQhmiX4JZolGC//Ti87oQwwAAGaLhoIAAABmhcB0Fmr6/3UIZol+CWaJRgv/04vO6CEMAABmi4aEAAAA + ZoXAdBj/dQhmiX4JZolGC/8VYLMCEIvO6P0LAABmi4aGAAAAZoXAdBZq6/91CGaJfglmiUYL/9OLzujb + CwAAZouGiAAAAGaFwHQWavT/dQhmiX4JZolGC//Ti87ouQsAAI2eigAAAGaDOwB1CmaDvowAAAAAdEKN + RQxQ/3UI/xVMswIQZosLZoXJdA9miU4Li85miX4J6DkLAABmi4aMAAAAZoXAdBJmiUYLi0UMi85miX4J + 6BsLAABmi4aOAAAAZoXAW3Qd/3UIZol+CWaJRgv/FVCzAhCFwA+fwIvO6MIKAABmi4aQAAAAZoXAdB3/ + dQhmiX4JZolGC/8VaLMCEIXAD5/Ai87omQoAAGaLhpIAAABmhcB0Hf91CGaJfglmiUYL/xVkswIQhcAP + n8CLzuhwCgAAZouGlAAAAGaFwHQd/3UIZol+CWaJRgv/FfyyAhCFwA+fwIvO6EcKAAAzwF9AXl3CCAC4 + bKUCEOgfyAAAgezoAAAAg2X8AIMNUFADEP9TVovZV41zJo19qIll8Ild7Oj2LwAAjYUM////6GRF/v/G + RfwCZoM7A3Ufi0XsM9tDOVhSdBfHRdiFAwAAaDj9AhCNRdjpdAIAADPbQ4tF7ItAUjvDD4xUAgAAg/gI + D49LAgAAv4AAAACNtVT////oiBkAAFNqV2oPXovOjUWo6LYXAABTZolFhGpDi86NRajopRcAAFNmiUWG + alSLzo1FqOiUFwAAU2aJRYhqU4vOjUWo6IMXAABTZolFimpFi86NRajochcAAFNmiUWMakiLzo1FqOhh + FwAAU2aJRY5qUIvOjUWo6FAXAABTZolFkGpEi86NRajoPxcAAFNmiUWSakmLzo1FqOguFwAAU2aJRZRq + UovOjUWo6B0XAABTZolFlmpPi86NRajoDBcAAFNmiUWYalaLzo1FqOj7FgAAU2aJRZpqTovOjUWo6OoW + AABTZolFnGpNi86NRajo2RYAAFNmiUWealWLzo1FqOjIFgAAM8lmiUWgM9I71nMRD7dEVYQPv8k7yH8C + i8hC6+tmhcl1FMdF4IUDAABoOP0CEI1F4OkWAQAAD7/BUFOLXeyNcwKNvQz////oWTAAAItDUkh0bkh0 + VEhIdDmD6AQPhZ8AAAChLEAFEIXAdRTHRdzyAgAAaDj9AhCNRdzpzQAAAI2NDP///1FoAcgBEP9zdv/Q + 60CNhQz///9QaAHIARD/c3b/FSizAhDrKY2FDP///1BoAcgBEP9zdv8VMLMCEOsSjYUM////UGgByAEQ + /xVcswIQhcB1K/8VWLACEIXAdCFqAGoAaCjRAhCL+Oi1hwAAx0XoTmG8AGg4/QIQjUXo60sPt40V//// + agVa6GtK/v+NtVT////oMCoAAI21DP///+hdCQAAjXWo6B0qAACLTfRfXmSJDQAAAABbycPHReSFAwAA + aDj9AhCNReRQ6IzEAACLTaTogIYAALgqzQEQw4tEJAhqAegCLwAAi0QkBItMJAjorgcAADPAQMIIALiB + pQIQ6BTFAACB7NAAAACDZfwAgw1QUAMQ/1NWV4vZjYUk////iWXwiV3o6JhC/v/GRfwBZoM7AotDLolF + 5HUYqAF1FMdF0IUDAABoOP0CEI1F0OlfAQAAqA91FMdF1IUDAABoOP0CEI1F1OlHAQAAg+AQiUXsdB2B + ewYABAAAdhTHRdyFAwAAaDj9AhCNRdzpIgEAAIXAdCyNewKNtWz////ouhIAAGhI0QIQi97o/iUAAL8A + CAAAjXWc6EsWAACLXejrEmoAagGNcwKNvST////oTy4AAIpF5KgBdCODfewAuGWvARB1BbhczQEQjY0k + ////UVD/FVyzAhDpiQAAAKgCdCODfewAuGWvARB1BbhczQEQjY0k////UVD/c1L/FTCzAhDrYqgEdCOD + fewAuGWvARB1BbhczQEQjY0k////UVD/c1L/FSizAhDrO6gIdGqhLEAFEIXAdRHHReDyAgAAaDj9AhCN + ReDrSoN97AC5Za8BEHUFuVzNARCNlST///9SUf9zUv/QhcB1L/8VWLACEIXAdCVqAGoAaDjRAhCL+Oh+ + hQAAx0XYTmG8AGg4/QIQjUXYUOiiwgAAg33sAHQHM8lqC0HrCQ+3jS3///9qBVroI0j+/429JP///+gb + Qf7/i030X15kiQ0AAAAAW8nDi03M6GCEAAC4X88BEMNTVot0JBBqAYvG6N4sAAD/dCQMjV5I6GglAACL + 0IvO6HsbAAAzwF5AW8IIALiWpQIQ6ObCAACB7IgAAABTVjP2iXX8gw1QUAMQ/zk1MEAFEFeJZfCL2XUR + x0Xo8gIAAGg4/QIQjUXo63qNhWz////oH0D+/1ZqAY1zAo29bP///8ZF/AHonCwAAL8ABAAAjXW06HQU + AABmgzsBdQr/FSRABRCL2OsDi1sujYVs////UGh8zwEQU/8VMEAFEIXAdSlQUP8VWLACEGhQ0QIQi/jo + UYQAAMdF7E5hvABoOP0CEI1F7FDodcEAAA+3jXX///9qBVroA0f+/411tOjLJgAAjbVs////6PgFAACL + TfRfXmSJDQAAAABbycOLTeToOIMAALiH0AEQw1NWi3QkEGoBi8botisAAP90JAyNXkjoQCQAAIvQi87o + UxoAADPAXkBbwggAuKulAhDovsEAAIHsiAAAAFMz21aJXfyDDVBQAxD/OR0oQAUQV4ll8IvxdRHHRejy + AgAAaDj9AhCNRejrZo2FbP///+j3Pv7/U2oBg8YCjb1s////xkX8Aeh0KwAAvwAEAACNdbToTBMAAI2F + bP///1BopNABEP8VKEAFEDvDdSlTU/8VWLACEGhg0QIQi/joPYMAAMdF7E5hvABoOP0CEI1F7FDoYcAA + AA+3jXX///9qBVro70X+/411tOi3JQAAjbVs////6OQEAACLTfRfXmSJDQAAAABbycOLTeToJIIAALib + 0QEQw1WL7IPsEFeNfgRX/xW0sAIQg/gBiQZ0MoXAdC6D+AJ1JYuGrAAAAGvAPIlF/NtF/N1d8NsH3V34 + 3UX43A0o/AIQ3EXw6xLZ7usU2wfdXfDdRfDcDSj8AhDcNcj7AhDdnrgAAABfycNWi/CLhrAAAACFwHQH + UP8VILMCEGaLtrQAAABmhfZ0EP812IADEA+3xlD/FRSzAhBew1WL7FOLXQhXweMCU+jcTP7/i/iF/1mJ + fgR1DsdFCLYAAABoOP0CEOs4i8uL0cHpAjPA86uLyoPhA1PzquisTP7/i/iF/1mJfgh1H/92BOigTP7/ + x0UItgAAAMcEJDj9AhCNRQhQ6B+/AACLy4vRwekCM8Dzq4vKg+ED86qLRQhfiQZbXcIEAItGBIXAdAdQ + 6F9M/v9Zg34IAHQwVzP/OT52H4tGCIsMuIXJdBDodkL+/4tGCIsMuOijQf7/Rzs+cuH/dgjoKkz+/1lf + w1WL7IPsKINl3ACFwIlF/NtF/MZF2E5mx0XaCgB9BtwF+PsCEItFCN1d5ItIDI1V2OgsRv7/hcB0EYlF + CGg4/QIQjUUIUOhzvgAAycIEAFWL7IPsJIlF5ItFCItIDI1V3MZF3EnHReALAAAA6PFF/v+FwHQRiUUI + aDj9AhCNRQhQ6Di+AADJwgQAVYvsUYtIDOjMRf7/hcB0EYlF/Gg4/QIQjUX8UOgTvgAAycOLUAhryQ2N + TBHziUgMw1WL7FGLSAQz0ujvRP7/hcB0EYlF/Gg4/QIQjUX8UOjgvQAAycOLQAiFwHQHUOg7S/7/WcNV + i+xRVo1xFIvW6FRE/v+FwHQRiUX8aDj9AhCNRfxQ6Ku9AACLxl7Jw1WL7IPsJN9tCINl4ACNVdzGRdxO + 3V3oZsdF3hQA6ApE/v+FwHQRiUUMaDj9AhCNRQxQ6G+9AADJwggAVYvsg+wk3UUIjVXc3V3oxkXcTmbH + Rd4UAMdF4BAAAADozEP+/4XAdBGJRQxoOP0CEI1FDFDoMb0AAMnCCABVi+yD7CgPtsCNVdjGRdhMiUXc + 6JtD/v+FwHQRiUX8aDj9AhCNRfxQ6AC9AADJw1WL7IPsKINl3ACFwIlF/NtF/MZF2E5mx0XaCgB9BtwF + +PsCEI1V2N1d5OhVQ/7/hcB0EYlF/Gg4/QIQjUX8UOi6vAAAycNVi+yD7CiNVdjGRdhJx0XcCwAAAIlF + 4OgiQ/7/hcB0EYlF/Gg4/QIQjUX8UOiHvAAAycNVi+xR6AJD/v+FwHQRiUX8aDj9AhCNRfxQ6Ge8AADJ + w2aLTCQEZolICWaLTCQIZolIC8IIAGaLTCQEZolICcIEAFWL7IPsJI1V3MZF3DDoxkL+/4XAdBGJRQho + OP0CEI1FCFDoHbwAAN1F6ItFCN0YycIEAFWL7IPsJI1V3MZF3DDok0L+/4XAdBGJRQhoOP0CEI1FCFDo + 6rsAAN1F6ItFCNkYycIEAFWL7IPsJI1V3MZF3DDoYEL+/4XAdBGJRQhoOP0CEI1FCFDot7sAAItF5ItN + CIkBycIEAFWL7FHoNkL+/4XAdBGJRfxoOP0CEI1F/FDojbsAAMnDD7dICWoFWukcQf7/i0446OVC/v+D + yv87wnUDMsDDVovI6L9C/v8zyYXAD5/BisHDi0YQhcB0H4tAHIXAdBiLyOjkPv7/gH5EAHULi0YQi0gc + 6Qs+/v/DVYvsD78RUzPbO9BWfGaNBMCNdIHeigY8Q3U/OV4EdjrGR0QBi1YEi04cQujRPv7/ZoXAdQnH + RQi2AAAA6yiLThzoXT7+/4tOHOgHPv7/iUc4iXcQZolfA+sjOkUIdBXHRQiFAwAAaDj9AhCNRQhQ6MC6 + AACJXxCIX0SJXzhei8dbXcIEAFWL7FEPvxFTM9s70FZ8V40EwI10gd6APkN1SzleBHZGxkdEAYtWBItO + HELoTD7+/2aFwHUVaDj9AhCNRfxQx0X8tgAAAOhlugAAi04c6Mw9/v+LThzodj3+/4lHOIl3EGaJXwPr + CYlfEIhfRIlfOF6Lx1vJw1WL7FGIR0SLVgSLThxC6PQ9/v9mhcB1FWg4/QIQjUX8UMdF/LYAAADoDboA + AItOHOh0Pf7/i04c6B49/v9mg2cDAIlHOIl3EIvHycNVi+xRiwOFwFd1BYt+GOsCi/iLRhyFwHQHUOg5 + R/7/WVfoLEf+/4XAWYlGHHUVaDj9AhCNRfxQx0X8tgAAAOiruQAAi1YUi04QagDozED+/4tWHItOEGoB + V+imQP7/iQOLRhxfycNVi+yLVhSLThBqAOimQP7/i1UIi04QagNX6IBA/v87x3QbM9JCM8noZED+/4lF + CGg4/QIQjUUIUOhLuQAAAX4UXcIEAItAHIXAdAdQ6KFG/v9ZwzPAV4lBEIlBFIlBHIv5q6urqovBX8NV + i+yD7CjfbQiLUSSDZeAAagGNRdzdXehQxkXcTmbHRd4UAOixP/7/hcB0EYlFDGg4/QIQjUUMUOjiuAAA + ycIIAFWL7IPsKN1FCItRJGoB3V3ojUXcUMZF3E5mx0XeFADHReAQAAAA6G0//v+FwHQRiUUMaDj9AhCN + RQxQ6J64AADJwggAVYvsg+woi1EkD7bAiUXcagGNRdhQxkXYTOg2P/7/hcB0EYlF/Gg4/QIQjUX8UOhn + uAAAycNVi+yD7CiDZdwAhcCJRfzbRfzGRdhOZsdF2goAfQbcBfj7AhCLUSTdXeRqAY1F2FDo6j7+/4XA + dBGJRfxoOP0CEI1F/FDoG7gAAMnDVYvsg+woi1EkiUXgagGNRdhQxkXYScdF3AsAAADosT7+/4XAdBGJ + RfxoOP0CEI1F/FDo4rcAAMnDVYvsi1EkagH/dQjoij7+/4XAdBGJRQhoOP0CEI1FCFDou7cAAF3CBACJ + SCTDVYvsUeiGPv7/hcB0EYlF/Gg4/QIQjUX8UOiVtwAAycNVi+xR6Fw+/v+FwHQRiUX8aDj9AhCNRfxQ + 6HW3AADJw1WL7IPsEN0F0PsCENxRDN/g9sRBD4qCAAAA3djdQQxT3V343UX4V41F8FBRUd0cJP8V4LEC + EN1d+IPEBN1F+NwNyPsCENwFwPsCEN0cJP8VyLECEN1d+FndRfBZ3CXQ+wIQ6Ca0AABqAGiAUQEAUlDo + lLQAAN1F+Iv4i9roDLQAAGoAA/hogJaYABPaU1fodrQAAF+JBolWBFvJw90FuPsCEN1BDNrp3+D2xEQP + im3///+DJgDd2INmBADJw1WL7IPsGFNXjUXwUItFCN1ADFFR3Rwk/xXgsQIQ3V3o3UXw6KizAADdReiN + iCx9AADcDcj7AhCJRfiNBI0DAAAAmdwFwPsCEL+xOgIA9/9qBF9qBIlFCGnAsToCAJn3/7+1BQAAK8iN + BI0DAAAAmff/X2oFW2oKiUX8acC1BQAAmff/v5kAAAAryI1EiQKZ9/+L+GnAmQAAAEBAmff7K8hBZolO + BovHmVn3+YPEBN0cJI0MQMHhAiv5i00Ia8lkA8iLRfyNhAFA7f//g8cDZol+AmaJBv8VyLECEFlZ6O6y + AAAz0rkQDgAA9/FmiUYIajyLwjPSWffxagdZX1tmiUYKi0X4ZolWDEAz0vfxZoNmDgBmiVYEycIEAFWL + 7IPsEIsIi0AEPV5ayCR/X3wIgfmAqSfRd1WL0QvQdQTZ7utIU2oAaICWmABQUei9tAAAagBogFEBAFJQ + 6M+zAACJXfyJTfjfbfiJRfCJVfRb3V343UX43DXI+wIQ323w3V3w3EXw3AXQ+wIQ3V4MycNVi+xRUVNW + Vw+3eQJqDlgrx5lqDF73/g+3MWoFu5ABAAAr8I0EQI0Eh2nAmQAAAC3JAQAAmV/3/4HGwBIAAGpki/gP + t0EGA/iLxpn3+1tqBAP4i8ZpwG0BAAAD+IvGmff7K/iLxple9/4Pt1EKjYQH04L//4lF/A+3QQjbRfwP + t0kMa8A83V343UX4A8JrwDwDwYlF/ItFCNtF/F9eW91d+N1F+Nw1yPsCEN7B3VgMycIEAFWL7FFRVo11 + +Oj1/P//i0X4iQeLRfyJRwSLx17Jw1WL7IPsEFZX/3UIjXXw6I/9//+LfQyLRQylpaWlX17JwggAVovx + 6JH+//+Lxl7D/3QkBOj3/v//i0QkBMIEAN1EJATdWAzCCABVi+xRUd1BDNwd0PsCEN/g9sQBdRLdQQxR + Ud0cJP8VyLECEFlZ6yHdBbj7AhDdQQza6d/g9sREegmDJgCDZgQAycPdBdD7AhDdXfjdRfjcJdD7AhDo + 0LAAAGjJAAAAaADAaSpSUOg7sQAAiQaJVgTJw1WL7FFR3UAMU1dRUd0cJP8VyLECEFlZ6JywAACLyIHB + LH0AAI0EjQMAAACZv7E6AgD3/2oEX2oEiUX8acCxOgIAmff/v7UFAAAryI0EjQMAAACZ9/9fagVbagqJ + RfhpwLUFAACZ9/+/mQAAACvIjUSJApn3/4v4acCZAAAAQECZ9/sryEFmiU4Gi8eZWff5jQxAweECK/mL + TfxryWQDyItF+IPHA42EAUDt//9miX4CZokGM8BfZolGCGaJRgpmiUYMZolGDlvJw1WL7FFRiwiLQAQ9 + XlrIJH9IfAiB+YCpJ9F3PovRC9B1BNnu6zFqAGiAlpgAUFHo+LEAAGoAaIBRAQBSUOjqsQAAiUX4iVX8 + 32343V343UX43AXQ+wIQ3V4MycNVi+xRUVaL8FcPt34Cag5YK8eZagxZ9/kPtw5qBSvIjQRAjQSHacCZ + AAAALckBAACZX/f/gcHAEgAAamSL+A+3RgYD+IvBmb6QAQAA9/5eagQD+IvBacBtAQAAA/iLwZn3/iv4 + i8GZWff5jYQH04L//4lF/NtF/ItFCF9e3V343UX43VgMycIEAFWL7FFRVo11+OjU/f//i0X4iQeLRfyJ + RwSLx17Jw1WL7IPsEFZXjXXw6CX+//+LfQiLRQilpaWlX17JwgQAVovx6Nb+//+Lxl7D/3QkBOgk//// + i0QkBMIEAN1EJATdWAzCCACLQSSDYSQAw1WL7FFWi/BX/3Yk/xXQsQIQQI08AFfozj7+/4XAWVl1FWg4 + /QIQjUX8UMdF/LYAAADoT7EAAIt2JIvPi9HB6QKL+POli8qD4QPzpF9eycOLQCRWi/GKEIrKOhZ1GoTJ + dBKKUAGKyjpWAXUMQEBGRoTJdeIzwOsFG8CD2P8zyYXAD5TBisFew1WL7FGLThyFyXQT6Iw0/v+AfiwA + dQiLThzotjP+/4tHHIlGHItHBItOHIlGBItWBIlGKGaLRwJCZolGAuiKNP7/ZoXAi04cdRrohjP+/2g4 + /QIQjUX8UMdF/LYAAADom7AAAOgFNP7/i04c6K8z/v+JRiTGRiwAi8bJw8YAQ4tOHIlIHItOBIlIBItO + HIXJdAXoBjT+/4NmHACDZgQAg2YoAINmJADDVYvsi04chclXi/h0F+jjM/7/gH4sAHUIi04c6A0z/v+D + ZhwAg30IAHYwi1cEA1UIi08c6Owz/v9mhcB1HYtPHOjoMv7/aDj9AhCNRQhQx0UItgAAAOj9rwAAi0cc + iUYcZotHAotOHGaJRgLoVjP+/4tOHOgAM/7/iUYki38EiX4EiX4oxkYsAF9dwgQA/3QkBP9wJP8VMLIC + EPfYWRvAWUDCBABVi+xRAUYoi0YchcCLTih0L4vI6Dkz/v+LViiLThzoXTP+/2aFwHUTOEYsdQiLThzo + VDL+/4NmHADrEYtOHOsj6Dsy/v+FwIlGHHUVaDj9AhCNRfxQx0X8tgAAAOhSrwAAi8joujL+/4tOHOhk + Mv7/iUYki0YoycOLUCRWM/ZGi8LrCEA6TCQIdQFGigiEyXXyK8L32BvAI8ZewgQAVovxi0gki0AoO/B3 + AovwM8BAO/ByFYpUAf86VCQIdQb/TCQMdAdAO8Z26zPAXsIIAItGJIXAdAhQ/xXUsQIQWYvGw4tGJIXA + dAhQ/xXcsQIQWYvGw4tQJIXSdBmLSASFyXQSA8pJgDkgdPorykGJSATGBBEAw4tOJIXJdCuDfgQAdCWL + wesBQIA4IHT6O8F0F4vRK9ABVgSLVgRCUlBR/xXosQIQg8QMi8bDi1ckhdJWdDeLRwSFwHQwi8qNNBDr + AUGAOSB0+jvOdQnGAgCDZwQA6xZOgD4gdPqLxivBQDvKiUcEdQ7GRgEAi8dew4oBiAJCQTvWdfbGAgDr + 7YtOHOivMf7/i87onTP+/4NmHACDZiQAw4tIJItAKDPSVusIi/BIhfZ0BkGAOQB180JBhcB0CIA5AHQD + SOvti8Jew1aLcSSLSSiLxooQV4v5hNJ0DYvXT4XSdAZAgDgAdfOF/3QKQIoQhNJ0B0/r4YvB6wMrxkhf + XsP/diiLTiToRkT+/4lGBIvGw1ZXi3gki/KL0cHpAvOli8qD4QPzpF9ewzPAOEQkBA+VwGaJQQLCBAAz + wGaDeQIBD5TAw4PABMOJSATDVYvsUYtOHIXJdCfo4jD+/4tOHIvX6Acx/v9mhcB1NjhGLHUIi04c6P4v + /v+DZhwA6w6Lz+joL/7/hcCJRhx1FWg4/QIQjUX8UMdF/LYAAADo/6wAAItOHOhmMP7/i04c6BAw/v+J + RiSJfijJw4tAKMNVi+xRUYtNDItVCIlNDIFlDAAAAICB4f///3+DZQgAiVX4iU383234320I2eDewd1Y + DMnCCADfbCQE3VgMwggA3UQkBN1YDMIIAIlICMOJSAjDiwCKADPJOkQkBA+VwYrBwgQAiwCKADPJOkQk + BA+UwYrBwgQAVYvsg+wkD7bAiUXgi0UIiwjGRdxMZoN5Af+NVdx1B+jPMv7/6wXo5jP+/4XAdBGJRQho + OP0CEI1FCFDoLawAAMnCBABVi+yD7CTdRQiLCN1d6MZF3E5mx0XeFADHReAQAAAAZoN5Af+NVdx1B+iB + Mv7/6wXomDP+/4XAdBGJRQxoOP0CEI1FDFDo36sAAMnCCABVi+yD7CiDZdwAhcCJRfzbRfzGRdhOZsdF + 2goAfQbcBfj7AhCLRQjdXeSLCGaDeQH/jVXYdQfoJjL+/+sF6D0z/v+FwHQRiUUIaDj9AhCNRQhQ6ISr + AADJwgQAVYvsg+wkiUXki0UIiwjGRdxJZsdF3gsAZoN5Af+NVdx1B+jfMf7/6wXo9jL+/4XAdBGJRQho + OP0CEI1FCFDoPasAAMnCBABVi+xRiwhmg3kB/3UH6K0x/v/rBejEMv7/hcB0EYlF/Gg4/QIQjUX8UOgL + qwAAycOJCMPplDD+/4oJM8A6TCQED5XAwgQAigkzwDpMJAQPlMDCBACKCTPAOkwkBA+VwMIEAIoJM8A6 + TCQED5TAwgQA6Vcw/v//dCQI/3QkCOiYMP7/wggA/3QkCP90JAhqFVnohTD+/8IIAA+2yemjMP7/VYvs + UVGLRQyLTQiDZQgAiUUMgWUMAAAAgCX///9/iU34iUX83234Ud9tCFEz0tng3sHdXQjdRQjdHCRqFFno + ETD+/8nCCABVi+zfbQhRUTPS3V0I3UUI3RwkahRZ6PIv/v9dwggA2UQkBFFR3RwkahRZ6N0v/v/CBADZ + RCQEUVHdHCRqB1pqFFnoxi/+/8IEAN1EJARRUd0cJGoUWeiyL/7/wggA3UQkBFFR3RwkahBaahRZ6Jsv + /v/CCABVi+xRUYXAiUX820X8fQbcBfj7AhBR3V343UX4Ud0cJGoKM9JZ6G4v/v/Jw2oLWulGL/7/VYvs + UVGFwIlF/NtF/H0G3AX4+wIQUd1d+N1F+FHdHCRqCjPSWeg6L/7/ycNqC1rpEi/+/2oLWukKL/7/6ZMv + /v9Vi+xR6Hop/v+FwHQRiUX8aDj9AhCNRfxQ6EqpAADJw1WL7FHoZCn+/4XAdBGJRfxoOP0CEI1F/FDo + KqkAAMnDVYvsg30MHnUUVmrr/3UI/xU4swIQi/Do6uj//15d/yUMswIQVYvsg+wwU1ZXaguL8Fkz2zPA + iV3QjX3U86uNRdBQv7jOAhBX/zXYgAMQiZ6wAAAAZometAAAAP8VGLMCEGY7w2aJhrQAAAB1KqHYgAMQ + iUXkjUXQUMdF0DAAAADHRdiy6AEQiX34/xUcswIQZomGtAAAAGaLhrQAAABmO8NTdEP/NdiAAxAPt8BT + U1NTU1NoAAAAgFNQU/8VELMCEDvDiYawAAAAdAxWautQ/xU8swIQ6yRTagH/FViwAhBoKMsCEOsNagH/ + FViwAhBoGMsCEIv46PRqAADoBuj//1+Lxl5bycNVi+y4JCAAAOj6qAAAV2oIWf91CDPAxkXcMI193fOr + ZquqjYXc3///aAzPAhBQ6C1Q/v+DxAyNldzf//+NTdzolf7//4N95AB1Mv91DI2F3N////91CGj0zgIQ + UOj/T/7/g8QQjY3c3///6Er+//+66M4CEI1N3Ohd/v//i0XkUIlGBI2F3N///2jczgIQUOjMT/7/g8QM + jZXc3///jU3c6DT+//+LReSJBmvADVDo0jT+/4XAWYlGCHUMx0UItgAAAOmMAAAAM/9HOT5yeVNqDVv/ + dgSNhdzf//9XaMjOAhBQ6HlP/v+DxBCNldzf//+NTdzo4f3//4tN+OiQKv7/i0346Doq/v+LyOiALv7/ + i034iUUI6KUq/v+LTfjo1Sn+/4tNCIP5/3Qii0YIi1YEjUQY81DoQS7+/4XAdA5Hg8MNOz52jFtfycII + AMdFCCYDAABoOP0CEI1FCFDowKYAAMxVi+xR6Dwt/v+FwHQRiUX8aDj9AhCNRfxQ6KGmAADJw1WL7FHo + Ki3+/4XAdBGJRfxoOP0CEI1F/FDogaYAAMnDVYvsg+wojVXYxkXYMOgBLf7/hcB0EYlF/Gg4/QIQjUX8 + UOhYpgAAagCNRdjo9/X//8nDVYvsUVaL8GaDfgMAdRLouur//4TAdQnHRfyqAAAA6xsPt04DM9JC6Gwt + /v+D+P+JRfx1FcdF/LAAAABoOP0CEI1F/FDoA6YAAA+3TgNqAlroQy3+/4XAiQd3AzPAQDPJg/gBD5fB + iQdmg2YJAItF/EFmg2YLAGaJTgdeycNVi+yB7AABAACD+wGNhQD///92FVNX/3Y4aDDPAhBQ6OpN/v+D + xBTrElf/djhoHM8CEFDo1k3+/4PEEI2NAP///+gh/P//iX48iV5AycNVi+yD7ChTVleL8ovYi/no7un/ + /4TAdRfolf///+jg6f//hMB1OsdF/KoAAADrI4Nl3ADGRdhM6Hb///9mg2YHAI1V2IvO6Lwr/v+FwHQR + iUX8aDj9AhCNRfxQ6CGlAAAzwIP7AQ+XwGaDZgkAX0Bmg2YLAGaJRgdeW8nDM8mITkSJThCKEIgWZotQ + A2aJVgNmi1AFZolWBWaLUAFmiVYBZotAB1dmiUYHjX5Ai8ZmiU4LZolOCeh6/v//iUY8i8Zfw1WL7MZH + RAGLVgSLThxC6Hko/v9mhcB1FWg4/QIQjUUMUMdFDLYAAADokqQAAItOHOj5J/7/i04c6KMn/v+LTQiJ + RziLRQyL14l3EOju/v//i8ddwggAVYvsUYvO6PQr/v+D+P+JRhR1KGoAagBoUM8CEGhEzwIQ6HtmAABo + OP0CEI1F/FDHRfxOYbwA6C6kAADJw1WL7ItRJGoB/3UI6NYq/v+FwHQRiUUIaDj9AhCNRQhQ6AekAABd + wgQAVYvsi1EkagH/dQjorSr+/4XAdBGJRQhoOP0CEI1FCFDo3qMAAF3CBACAPk91DYN+IAB0B4vO6K4q + /v+BPdRgAxAgAwAAxgYwi866sM8CEHMFupTPAhDpYPr//1WL7IHsAAQAAIA+T3UNg34gAHQHi87ocyr+ + //91CI2FAPz//2jIzwIQUMYGMOi1S/7/g8QMjZUA/P//i87oHvr//8nCBACAOU91C4N5IAB0Bek4Kv7/ + w4vOxgYw6P/5//+LxsPGAE+LSSCJSCDDg2AkAINgIADGAE/DVYvsg+wYUzPbOF0MV4v4dCqNRfhQ/3UI + /xW8sAIQhcB1D1NT/xVYsAIQaCTQAhDrKI1F6FCNRfhQ6weNRehQ/3UI/xWwsAIQhcB1KVNT/xVYsAIQ + aAzQAhCL+OiVZQAAaDj9AhCNRQxQx0UMTmG8AOi5ogAAZjld6HY3ZoF96BAncy8Pt0X0UA+3RfJQD7dF + 8FAPt0XuUA+3RepQD7dF6FBo5M8CEFf/FeyxAhCDxCDrCla+3M8CEKVmpV5fW8nCCABVi+yD7CBTVjPb + OF0IV4v5D4SnAAAAjU34UVD/FaiwAhCFwHUPU1P/FViwAhBoPNACEOtAjUXwUI1F+FD/FbywAhCFwHUP + U1P/FViwAhBoJNACEOsfjUXgUI1F8FD/FbCwAhCFwHUpU1P/FViwAhBoDNACEIv46LhkAABoOP0CEI1F + CFDHRQhOYbwA6NyhAABmOV3gdmRmgX3gECdzXA+3RexQD7dF6lAPt0XoUA+3ReZQD7dF4lAPt0Xg6ytm + iwhmO8t2NWaB+RAncy4Pt1AMUg+3UApSD7dQCFIPt1AGD7dAAlJQD7fBUGjkzwIQV/8V7LECEIPEIOsI + vtzPAhClZqVfXlvJwgQA3UAM3CX4RAUQ3VgMw90F+EQFENxADN1YDMPdRCQExgBU3VgMwggAVovxxgZU + 6JXr//+Lxl7DVsYGVOj76///i8bDxgBU3UEM3VgMw1aL8eg67v//i8Zew/90JAToiO7//4tEJATCBADG + AETdQQzdWAzDVYvsi0UIjUgBihBAhNJ1+SvBU4vYi0YkhcBXdAdQ6Dgu/v9ZjTwbjUcCUOglLv7/hcBZ + iUYkdQnHRQi2AAAA6y9TUFP/dQhqAWoA/xW4sAIQhcB1KVBQ/xVYsAIQaFTQAhCL+OhPYwAAx0UITmG8 + AGg4/QIQjUUIUOhzoAAAi0YkZoMkBwBfi8ZbXcIEAItAJIXAdAdQ6MAt/v9Zw1WL7FZXi/oPvxE70A+M + sgAAAI0EwI10gd6KDoD5Qw+FhgAAAItGBIXAdn+LThxTjVgB6Iwj/v+NBBtQ6Hgt/v+FwFmJRySLThx1 + DuiiI/7/x0UItgAAAOtd6Bcj/v9T/3ck/3YEUGoBagD/FbiwAhCLThyL2Oh4I/7/M8A72Ft1HVBQ/xVY + sAIQaFTQAhCL+OiGYgAAx0UITmG8AOsYi04Ei1ckZokESuseOk0IdBXHRQiFAwAAaDj9AhCNRQhQ6JCf + AACDZyQAi8dfXl3CBABVi+xRVleL+g+/ETvQD4ymAAAAjQTAjXSB3oA+Qw+FlgAAAItGBIXAD4aLAAAA + i04cU41YAei5Iv7/jQQbUOilLP7/hcBZiUcki04cdQ7ozyL+/8dF/LYAAADrQ+hEIv7/U/93JP92BFBq + AWoA/xW4sAIQi04ci9jopSL+/zPAO9hbdSlQUP8VWLACEGhU0AIQi/jos2EAAMdF/E5hvABoOP0CEI1F + /FDo154AAItOBItXJGaJBErrBINnJACLx19eycNVi+xRV4v4i0YEhcAPhosAAABTjVgBjQQbUOgGLP7/ + hcBZiUckdQnHRfy2AAAA60qLThzo+CH+/4tOHOiiIf7/U/93JDPb/3YEUGoBU/8VuLACEIXAdTFTU/8V + WLACEGhU0AIQi/joHWEAAItOHOjsIf7/x0X8TmG8AGg4/QIQjUX8UOg5ngAAi04c6M8h/v+LRgSLTyRm + iRxBW+sEg2ckAIvHX8nDi0oEO0gEdAMywMNWi3IkV4t4JDPA86ZfD5TAXsNVi+xRi0UIVleLeASLQyiL + yCtLBEcrz4l9/HkJK8GL8+gm7v//i0UIi3Aki8+LeyQDewSLwcHpAvOli8iLRfyD4QPzpEgBQwRfi8Ne + ycIEAFWL7FGLRQhWV41wAYoIQITJdfkrxo14AYtDKIvIK0sEiX38K895CSvBi/Poy+3//4t1CIvPi3sk + A3sEi8HB6QLzpYvIi0X8g+ED86RIAUMEX4vDXsnCBABVi+xTVjPbOV0IV4vwdGD/dQj/FdCxAhCL+Dl+ + KFlzBejd7///O/t0RlNT/3Yo/3YkV/91CFNT/xWssAIQO8N1KVNT/xVYsAIQaFTQAhCL+OjIXwAAaDj9 + AhCNRQhQx0UITmG8AOjsnAAAiUYE6wOJXgRfi8ZeW13CBABVi+xRi0UIhcB0R41QAYoIQITJdfmLSyhW + K8JXjXgBO8+JffxzC4vHK8GL8+j37P//i3UIi8+LeySLwcHpAvOli8iLRfyD4QPzpEhfiUMEXusKi0Mk + g2MEAMYAAIvDycIEAItEJARWV4t7KDl4KHMJi/DoEO///4vGi0sEi3Mki3gkQYvRwekC86WLyoPhA/Ok + X17CBABVi+xRUVNWV4vw/3YEagBqEf8VtLICEIvYhdt1FWg4/QIQjUX8UMdF/LYAAADoE5wAAI1F+FBT + /xW8sgIQi04Ei3Yki334i8HB6QLzpYvIg+EDU/Ok/xWksgIQX16Lw1vJw1WL7FFTVleL+It3BI0ENlBq + AP8VuLICEIvYhdt1CcdF/LYAAADrL1ZTVv93JGoBagD/FbiwAhCFwHUpUFD/FViwAhBoVNACEIv46Fte + AADHRfxOYbwAaDj9AhCNRfxQ6H+bAABfXovDW8nDVYvsgewkBAAAV2oIWf92JDPAxkXcMI193fOrZqto + aNACEKqNhdz7//9oAAQAAFD/FdixAhCDxBCNldz7//+NTdzo6vH//4tOHOjIHv7/gH4sAF91CItOHOjx + Hf7/i0Xgi034SMZGLACJThyJRgSJRijocR7+/4tOHOgbHv7/iUYki8bJw1WL7ItFDI1IAYoQQITSdflT + K8FWi3UIV4vYi/sPr30QR+h57f//i00Qg/kBi8aLQCRyH4lNEIt1DIvLi9HB6QKL+POli8qD4QMDw/9N + EPOkdeRfXsZAAQCLRQhbXcIMAItOHIXJdBPoJR7+/4B+LAB1CItOHOlPHf7/w1WL7FMz2zldCIheLMYG + Qw+EggAAAFf/dQj/FbCyAhCL+I1PAYl+BIlOKOgWHf7/O8OJRhx1CcdFCLYAAADrQYvI6KEd/v+LThzo + Sx3+/1NTV1BX/3UIiUYkU1P/FaywAhCFwHUpU1P/FViwAhBogNACEIv46MZcAADHRQhOYbwAaDj9AhCN + RQhQ6OqZAACLRiSIHAdf6wyJXgSJXhyJXiiJXiSLxltdwgQAVYvsUYNmBACLz8ZGLADGBkPohRz+/4XA + iUYcdRVoOP0CEI1F/FDHRfy2AAAA6JyZAACLyOgEHf7/i04c6K4c/v+JRiSJfijGAACLxsnDVYvsUYtF + CFcz/zvHxkMsAHR2Vo1wAYoIQITJdfkrxo1wAY1OAYl1/IlLKOgdHP7/O8eJQxx1FWg4/QIQjUUIUMdF + CLYAAADoNJkAAIvI6Jwc/v+LSxzoRhz+/4lDJIvOi3UIi/iLwcHpAvOli8iLRfyD4QPzpItLJMYECABm + g2MCAIlDBF7rEIl7KGaJewKJewSJexyJeySLw1/JwgQAVYvsUVfGBkMPvzkz0jv4fHGNBMCNfIHegD9D + dWWLRwQ7wnZeO9p2JYtPHI0UGOh7HP7/ZoXAdRVoOP0CEI1F/FDHRfy2AAAA6JSYAACLTxzo+xv+/4tP + HOilG/7/iUYki0cciUYci0cEiUYEZotHAmaJRgKLRwQDw4lGKMZGLAHrE4hWLIlWKGaJVgKJVgSJVhyJ + ViSLxl/Jw1WL7FFXxgZDD785M9I7+HxsjQTAjXyB3oA/Q3Vgi0cEO8J2WYtPHI1QAejlG/7/ZoXAdRVo + OP0CEI1F/FDHRfy2AAAA6P6XAACLTxzoZRv+/4tPHOgPG/7/iUYki0cciUYci0cEiUYEZotHAmaJRgKL + RwRAiUYoxkYsAesTiFYsiVYoZolWAolWBIlWHIlWJIvGX8nDVYvsg30IAHYoi1YEA1UIi04c6Ggb/v9m + hcB1FWg4/QIQjUUIUMdFCLYAAADogZcAAItOHOjoGv7/i04c6JIa/v+JRyTGB0OLRgSJRwRmi0YCZolH + AotGHIlHHItGBANFCMZHLAGJRyiLx13CBABVi+xRi1YEi04cQugBG/7/ZoXAdRVoOP0CEI1F/FDHRfy2 + AAAA6BqXAACLThzogRr+/4tOHOgrGv7/iUckxgdDi0YEiUcEZotGAmaJRwKLRhyJRxyLRgRAiUcoxkcs + AYvHycNVi+xRVovwV8ZDLADGA0OLTigz/zvPiUsodFfojhn+/zvHiUMcdRVoOP0CEI1F/FDHRfy2AAAA + 6KWWAACLTgSJSwQzyWaDfgIBD5XBZolLAovI6KsZ/v+LSwSJQySLdiSL+IvBwekC86WLyIPhA/Ok6wmJ + eySJewSJexxfi8NeycMzycYAQ4lIBIlIKIlIHIlIJIhILMNVi+xRiwhmg3kB/3UH6L8c/v/rBejWHf7/ + hcB0EYlF/Gg4/QIQjUX8UOgdlgAAycNVi+yD7CiLRQxXjX386L3v//+L+IX/iX38dGhTVot1CFfobNb/ + /zPbhf92VYtNDI1DAWaJQQnoEdj//2oJWYvwjX3Y86WAfdhDdUCLVdyLdfRCi87ojxn+/2aFwHQ2i87o + JRn+/4vO6NAY/v+LTQiLUQSJBJqLQQiJNJhDO138cqteW4tF/F/JwggAx0UMhQMAAOsHx0UMtgAAAGg4 + /QIQjUUMUOhylQAAzFaL8GaLRCQIZgFGCVcPt34JO348dgpTi15A6IPv//9bD7dGCV9ewgQAiUI4i0Qk + BOi77///wgQAVYvsi1YEi04cQuj3GP7/ZoXAdRVoOP0CEI1FDFDHRQy2AAAA6BCVAACLThzodxj+/4tO + HOghGP7/i00IiUc4i0UMi9eJdxDobO///13CCABVi+xRi1cEgfro/QAAVovwdxCL14vO6HIc/v+FwHU0 + XsnD6Fnw//+LVhSLThBqAOjjG/7/i1cki04QagP/dwTouxv+/ztHBHTWM9JCM8nonhv+/4lF/Gg4/QIQ + jUX8UOiFlAAAzFWL7FGDYxwAVleL8Iv7paWli8uk6O0b/v+FwF+JQxRefQ7HRfwmAwAAaDj9AhDrRw+/ + SwHowxv+/4P4/4lDEHUgD79DAWoAagBocM8CEGhkzwIQ6C1aAADHRfxOYbwA68iLy+ioG/7/hcCJQxh9 + EYlF/Ghs/QIQjUX8UOgElAAAi8PJw4tJBmoLWumSGf7/VYvsg+w4U9nuVt1d1DP22e5X3V3sM8DGRchD + xkXJAGaJdcrHRcwMAAAAiXXQiXXciXXgjX3kq6szwI199KuL2YpDAohF9A++wIP4TIl1/H84dC6D6DB0 + bIPoE3QWSHReg+gFdTOLQwqJReyKQwSIRfXrUYtDBgFFzIlF7IlF/OtDi0MGiUXs6zuD+E50JIP4VHQr + g/hZdAy5hQMAAOhaE/7/6yCLQxaJReyLQxqJRfDrEopDBIhF9YpDBohF9t1DDt1d7ItNzOj2Ff7/O8aJ + ReR1Crm2AAAA6B8T/v+LTeTofxb+/4tN5OgpFv7/g338AIv4iX34jXXspaWldDGLSx7oXhb+/4tLHugI + Fv7/i038i334i/CLwcHpAoPHDPOli8iD4QPzpItLHuhkFv7/i03k6FwW/v+NTcjoSRj+/19eW8nDVYvs + g+wgU1aL8YpGAjxDdS+LVgaLTh5C6GEW/v9mhcB1Crm2AAAA6IwS/v+LTh7onhX+/+jiKf7/iUX4i9rr + JTxJdQaLRgqZ6+88TnUK3UYO6HWPAADr4bmFAwAA6FYS/v+LXfyKRiY8Q3Uqi1Yqi05CQugGFv7/ZoXA + dQq5tgAAAOgxEv7/i05C6EMV/v/ohyn+/+sqPEl1BotGLpnrIIB+Ak51Ct1GMugdjwAA6xC5hQMAAOj+ + Ef7/i1X8i0X4UlBT/3X46OyRAABSUI1F4OibKf7/jU3g6P8X/v9eW8nDVYvsg+wgU1aL8YpGAjxDdS+L + VgaLTh5C6IAV/v9mhcB1Crm2AAAA6KsR/v+LTh7ovRT+/+gBKf7/iUX4i9rrJTxJdQaLRgqZ6+88TnUK + 3UYO6JSOAADr4bmFAwAA6HUR/v+LXfyKRiY8Q3Uqi1Yqi05CQuglFf7/ZoXAdQq5tgAAAOhQEf7/i05C + 6GIU/v/opij+/+sqPEl1BotGLpnrIIB+Ak51Ct1GMug8jgAA6xC5hQMAAOgdEf7/i1X8i0X4UlBT/3X4 + 6FuQAABSUI1F4Oi6KP7/jU3g6B4X/v9eW8nDVYvsg+wgU1aL8YpGAjxDdS+LVgaLTh5C6J8U/v9mhcB1 + Crm2AAAA6MoQ/v+LTh7o3BP+/+ggKP7/iUX4i9rrJTxJdQaLRgqZ6+88TnUK3UYO6LONAADr4bmFAwAA + 6JQQ/v+LXfyKRiY8Q3Uqi1Yqi05CQuhEFP7/ZoXAdQq5tgAAAOhvEP7/i05C6IET/v/oxSf+/+sqPEl1 + BotGLpnrIIB+Ak51Ct1GMuhbjQAA6xC5hQMAAOg8EP7/i1X8i0X4U/91+FJQ6LqNAABSUI1F4OjZJ/7/ + jU3g6D0W/v9eW8nDVYvsg+wgU1aL8YpGAjxDV3Uui1YGi04eQui9E/7/ZoXAdQq5tgAAAOjoD/7/i04e + 6PoS/v/oPif+/4vYi/rrKDxJdQaLRgqZ6/A8TnUK3UYO6NKMAADr4rmFAwAA6LMP/v+LffyLXfiKRiY8 + Q3Uqi1Yqi05CQuhgE/7/ZoXAdQq5tgAAAOiLD/7/i05C6J0S/v/o4Sb+/+sqPEl1BotGLpnrIIB+Ak51 + Ct1GMuh3jAAA6xC5hQMAAOhYD/7/i1X8i0X4K9gb+ldTjUXg6Pwm/v+NTeDoYBX+/19eW8nDVYvsg+wg + U1aL8YpGAjxDdS+LVgaLTh5C6OAS/v9mhcB1Crm2AAAA6AsP/v+LTh7oHRL+/+hhJv7/iUX4i9rrJTxJ + dQaLRgqZ6+88TnUK3UYO6PSLAADr4bmFAwAA6NUO/v+LXfyKRiY8Q3Uqi1Yqi05CQuiFEv7/ZoXAdQq5 + tgAAAOiwDv7/i05C6MIR/v/oBib+/+sqPEl1BotGLpnrIIB+Ak51Ct1GMuiciwAA6xC5hQMAAOh9Dv7/ + i1X8i0X4A0X4E9NSUI1F4OggJv7/jU3g6IQU/v9eW8nDi8GLSFLB4QgDSC5qC8HhCANIClrp2RP+/7i9 + kwIQ6PCOAACD7DiDZfwAU4tZClZXiWXwaiBfjXW86En0//+LReCDwB+JfcAz9oP+H38QisuA4QGAyTCI + CEjR+0br6411vOjW3///6Ffz//+LTfRfXmSJDQAAAABbycOLTezo2g3+/7jwAwIQw7jPkwIQ6IGOAACD + 7FiDZfwAU1ZXi/lmgz8DjUcCiUXcjUcmiWXwiUXYfAqDf04AdASzAesCMttqBFiLz411nOhC9f//jUXM + UMZF/AH/FUSzAhCFwHUoUFD/FViwAhBoqM4CEIv46CpQAADHRexOYbwAaDj9AhCNRezpywAAAITbD4TJ + AAAAZoM/BHV9ikduPEl0NTxOdC2DfaAAdhOLTcAz0ujSE/7/i8jowRP+/+slx0XohQMAAGg4/QIQjUXo + 6YUAAAA8SXUFi0d26wjdR3roEooAAI1NzFFQ/xVIswIQhcB1a1BQ/xVYsAIQaJjOAhCL+OicTwAAx0Xk + TmG8AGg4/QIQjUXk60CNRcxQM8noqRP+/4vI6FQT/v9Q/xVIswIQhcB1KVBQ/xVYsAIQaJjOAhCL+Oha + TwAAx0XgTmG8AGg4/QIQjUXgUOh+jAAAjUXcUItFzOjy4P//jUXYUItF0Ojm4P//jXWc6Mvx//+LTfRf + XmSJDQAAAABbycOLTdToQ04AALh8BQIQw7jZkwIQ6PWMAACD7BSDZfwAU1aL8Y1GJolF7I1GSolF6FeN + Rm6JReSLRgqNTeyJZfC//wAAACPHUeiD4P//D7ZGC41N6FHoduD//zPAikYMjU3kUSPH6Gbg//+LTfRf + XmSJDQAAAABbycOLTeDoy00AALj0BQIQw1WL7IPsMINl/ABTVleL8TPAagjGRdAwWY190fOrZquNXgKq + igM8Uol1+HUnZoN+A/90II1F9FCNffyLw+hsPf7/g/j/dQiLTfToggv+/4t1/OslPEN1FItOHujZDv7/ + i04e6IMO/v+L8OsNuYUDAADoWwv+/4t19IpGCIhF0A++RgiD+EwPj68AAAAPhKUAAACD6DAPhO8AAACD + 6BN0I0gPhMcAAACD6AUPhZoAAACLBolF2GYPtkYJZolF0unHAAAAiw6JTdRmD7ZGCWaJRdLowQ3+/4XA + iUXsdQq5tgAAAOjqCv7/i03s6EoO/v+AO0OLTeyLRdR1EoPGDIlF9OjmDf7/i/iLRfTrE4t1/IPGDIlF + 9OjRDf7/i/iLRfSLyMHpAvOli8iD4QPzpItN7OgzDv7/61OLButMg/hOdDWD+FR0KYP4WXQXi0X4i0ge + 6BMO/v+5hQMAAOhyCv7/6ymLBolF5ItGBIlF6Osc3QbdXdzrFd0G3V3cZg+2RglmiUXSD7ZGColF1IA7 + Ul9eW3Uci0X4ZoN4A/90EoN9/AB0F/91/P8V/LECEFnrC4tF+ItIHuivDf7/jU3Q6JwP/v/Jw1WL7IPs + NFPZ7lbdXdgz9lczwMZFzEPGRc0AZol1zol10Il11Il14Il15I196KuL2asz/2aDOwKJdfyJdfh1CItD + KolF9OsDiXX0M8A5dfQPlcCDwASJRfCKQwI8Q3VRi0sGD69N8OhpDP7/O8aJReh1Crm2AAAA6JIJ/v+L + Sx7o8gz+/4tN6OjqDP7/i03o6JQM/v+LSx6L8Il18OiHDP7/i/iLQwYDx4lF+OnpAAAAPFIPhYAAAABm + g3sD/3R5jUX4UI19/I1DAugdO/7/g/j/dCo7xg+E6wAAAIt9/I0MOIlN+IvID69N8OjlC/7/O8aJReh1 + LMdF+LYAAACNdczoKS7+/4N9/AB0Cv91/P8V/LECEFmLTfjo5koAAOmsAAAAi8joTQz+/4tN6Oj3C/7/ + i/CJdfDrYbmFAwAA6MwI/v+LdfDrUooHPCByEDx+dww8XHQIPCd0BIgG6zqDffQAdATGBlxGxgZcD7YH + wegGmWoIWff5RoDCMIgWD7YHwegDmff5RoDCMIgWD7YHmff5RoDCMIgWRkc7ffhyqYB7AkN1CotLHuj5 + C/7/6wr/dfz/FfyxAhBZi03o6OUL/v8rdfCJddCNTczozA3+/19eW8nDVYvsg+w0U9nuM9vdXdhWVzPA + xkXMQ4hdzWaJXc6JXdCJXdSJXeCJXeSNfeiri/GrjUYCiggz/4D5Q4l19Ild/Ild+HVNi04G6LQK/v87 + w4lF6HUKubYAAADo3Qf+/4tOHug9C/7/i03o6DUL/v+LTejo3wr+/4td9ItLHovwiXXw6M8K/v+LUwaL + +APX6ewAAACA+VJ1eGaDfgP/dHGNTfhRjX386G45/v+D+P90JjvDD4T2AAAAi338jQw4iU34i8joOgr+ + /zvDiUXodSvHRfi2AAAAjXXM6H4s/v85Xfx0Cv91/P8V/LECEFmLTfjoPEkAAOm8AAAAi8joowr+/4tN + 6OhNCv7/i/CJdfDrDbmFAwAA6CIH/v+LdfCLVfjrXYoHPFx1U41PAYoBPDCJTfhyNzw3dzOKXwKA+zBy + K4D7N3cmik8DgPkwchuA+Td3FiwwwOADAsMsFsDgAwLBiAZGg8cE6xeLTfjGBlxGPFx1BEdH6wiL+esE + iAZGRzv6cp+LRfSAeAJDdQqLSB7oPwr+/+sK/3X8/xX8sQIQWYtN6OgrCv7/K3XwiXXQjU3M6BIM/v9f + XlvJw/90JARqAP81+D8FEP8VlLACEMIEAGoMaDD8AhDo3xb+/4F9DAEEAAB1SINl/AD/dRD/FfSxAhBZ + hcB2MotNEOhRBv7/iUXk/3UQ/xX8sQIQWYN95AB0CItN5OgiBv7/g038/zPA6x0zwEDDi2Xog038//91 + FP91EP91DP91CP8VDLMCEOiyFv7/whAAVYvsUWgMEAAA/xX4sQIQi9CF0ll0IlczwLkDBAAAi/rzq6EA + QAUQiYIIEAAAiRUAQAUQi8JfycNoOP0CEI1F/FDHRfy2AAAA6KGFAADMi0QkBItAFOsLiwg7TCQIdAqL + QBCFwHXxwggAi0AI6/hVi+xWV4s9+LECEGoU/9eL8IX2WXUOx0UItgAAAGg4/QIQ6zWLRQiDZgQAg2YQ + AINmCABoAAgAAIkG/9eFwFmJRgx1Hlb/FfyxAhDHRQi2AAAAxwQkOP0CEI1FCFDoHoUAAF+Lxl5dwgQA + ofw/BRDrF4sIO0wkBHUJikgYOkwkCHQKi4AcEAAAhcB15cIIAFWL7FFTVujQ////hcB1N2ggEAAA/xX4 + sQIQi9CF0ll0J1czwLkIBAAAi/rzq4kyiFoYofw/BRCJghwQAACJFfw/BRCLwl/Jw2g4/QIQjUX8UMdF + /LYAAADolIQAAMxVi+xRVv91CGoA/zX4PwUQ/xWQsAIQi/CF9nRJjUX8UGpA/3UIVv8VoLACEIXAdAeL + xl7JwgQAagBqAP8VWLACEGhIywIQi/joDUcAAFZqAP81+D8FEP8VlLACEMdFCE5hvADrB8dFCLYAAABo + OP0CEI1FCFDoGYQAAMxVi+yB7AABAABWizUAQAUQhfZ0R1eLvggQAABWjYUA////aNzLAhBQ6Cos/v+D + xAz/tgAQAACNlQD////oFSf+//+2BBAAAOhS/f//Vv8V/LECEIX/WYv3dbtfXsnDVYvsgewAAQAAVos1 + AEAFEDPAhfZ0bjm+BBAAAHQMi8aLtggQAACF9nXshfZ0VoXAdA6LjggQAACJiAgQAADrC4uGCBAAAKMA + QAUQVo2FAP///2jcywIQUOicK/7/g8QM/7YAEAAAjZUA////6Icm/v9X6Mn8//9W/xX8sQIQM8BZQOsC + M8BeycNVi+xq/P91CP8VOLMCEItNDDtBCHU7/3EEavz/dQj/FTyzAhCFwHUpUFD/FViwAhBo6M0CEIv4 + 6LxFAABoOP0CEI1FCFDHRQhOYbwA6OCCAABdwggAVYvsVmr8/3UI/xU4swIQi3UMO0YIdSH/dgRq/P91 + CP8VPLMCEIXAdQ9QUP8VWLACEGjozQIQ6ypWaKkOAhD/dQj/FTCzAhCFwHUzizVYsAIQ/9aFwHQnagBq + AP/WaLTNAhCL+Og6RQAAaDj9AhCNRQhQx0UITmG8AOheggAAXl3CCAD/dCQEaP4OAhD/FaSwAhBQ/xUo + swIQwgQAVYvsUVP/dgQz2zheGHUdavz/Nv8VPLMCEIXAdUxTU/8VWLACEGjozQIQ6xtq6P82/xU0swIQ + hcB1KVNT/xVYsAIQaMjNAhCL+Oi5RAAAaDj9AhCNRfxQx0X8TmG8AOjdgQAAVuh+////W8nDVot3FIX2 + dRRQ6Eb8//+JRxRew4tOEIXJdAqL8TkGdfOLxl7DUOgq/P//iUYQXsNVi+yB7AABAACLRgiFwHQGUOgV + +///i0YMhcBXiz38sQIQdARQ/9dZ/zYPtkMY/zNQjYUA////aGTOAhBQ6KIp/v+DxBT/dgSNlQD////o + kCT+/1b/11lfycNTi9hWi3MUhfZ0EFeLfhDokv///4X/i/d18l+LQwiFwHQGUOip+v//U/8V/LECEFle + W8NVi+yD7DBWV2oLWTP2Vmj//wAAM8CJddCNfdRW86v/FZywAhA7xqP4PwUQdRNWagH/FViwAhBojM4C + EOnKAAAAjUXQUL98zgIQV/812IADEP8VGLMCEGY7xmajCEAFEHUuodiAAxCJReSNRdBQx0XQMAAAAMdF + 2HULAhCJffj/FRyzAhBmO8ZmowhABRB0bYM9SGADEAJ1KYM9PGADEAV1IIsNQGADEDvOdAWD+QF1EVb/ + NdiAAxBWav1WVlZWVusSVv812IADEFZWVlZWVmgAAACAD7fAVlBW/xUQswIQO8ajBEAFEHUQVmoB/xVY + sAIQaCjLAhDrErAB6xdWagH/FViwAhBoGMsCEIv46M5CAAAywF9eycNXi3kK6D78//+LyF/p+gX+/7iK + oQIQ6KSAAACD7AxTVos1/D8FEFeJZfCF9ol17HQti4YcEAAAg2X8AIlF6Oh+/f//6wm4JBICEMOLdeyL + xuhh/v//g038/4t16OvMi030X15kiQ0AAAAAW8nDVYvsUVOL2FaNQxSLMFeF9usQiw47TQiNRhCLOHQS + i/eF/4lF/HXrM8BfXlvJwgQA6Lr9//+LRfyJODPAQOvqofw/BRCFwFe//D8FEHQhVjtEJAyNiBwQAACL + MXQKhfaL+YvGderrB+jd/f//iTdeX8IEALiUoQIQ6NV/AACD7BhTM9uJXfyDDVBQAxD/i0Eui1EKVldm + izlmg/8DiWXwiUXsdQk5WU7GRegBdQOIXej/dehS6MX5//+L8DvzdSRTU2g4zgIQaKy7AhCLwujDRAAA + x0XkTmG8AGg4/QIQjUXk6zxmg/8CfEE5Xex0PP917IvG6Aj///+FwHUpi0XsU1NoCM4CEGisuwIQ6IVE + AADHReBOYbwAaDj9AhCNReBQ6G9+AAA5XhR1C+gl/P//VugK////agszyVpB6PED/v+LTfRfXmSJDQAA + AABbycOLTdzoOUAAALiGEwIQw+ga+v//6D3+//+h+D8FEIXAdAdQ/xWYsAIQoQRABRCFwHQHUP8VILMC + EGahCEAFEGaFwHQQ/zXYgAMQD7fAUP8VFLMCEMO41qUCEOilfgAAgewMAgAAg2XsAINl/ABTVleL2Y1z + Ao29OP///4ll8Oh/5v//jXMmjb1o////xkX8Aeht5v//jXNKjb3o/v//xkX8Auhb5v//xkX8A2aDOwV1 + C4uDmgAAAIlF6OsHx0XoAQAAAIG9PP///wADAAB2FMdF1IUDAABoOP0CEI1F1OlBBQAAg33oAXQgg33o + AnQag33oBHQUx0WohQMAAGg4/QIQjUWo6RsFAADoSvf//2aDOwSL+Il97HxpjXNugD5PdWFXjYXo/f// + aNzLAhBQ6FIl/v+DxAxWjYXo/f//jZ8AEAAAUOhuIP7/hcB0EIlFoGg4/QIQjUWg6ccEAACNjej9//+L + 14oBQYgCQoTAdfZPikcBR4TAdfi+2MsCEGali33saiyNhej+///ofM3//4P4G4lF4H4Ux0WkhQMAAGg4 + /QIQjUWk6XkEAADonS8AAIO9bP///wB2JGjQywIQjYVo////6LPM//+EwHUQM9tqJENYuYzNAhDo4SwA + AItF6IPgBolF5HQNagVYucjLAhDoJy0AAOjqLgAAix1kDgUQxgNTQ8YDUUPGA1JDg33kAIkdZA4FEHRW + iw34sQIQxgNoagRDWscDABAAAAPaiR1kDgUQ6K8vAACLyuh+JwAAoWQOBRDGAD1AgyAAA8K5vMsCEKNk + DgUQ6OIvAABoyMsCEDP26BQxAACLHWQOBRCDfeAAi4Vc////i9APhMYAAACKCECEyXX5K8JPik8BR4TJ + dfiLyMHpAovy86WLyItF7IPhA/Oki/hPik8BR4TJdfiDfeQAvrjLAhBmpXR0jXABighAhMl1+YtN7MYD + aCvGQ4kDg8MEiR1kDgUQ6BgqAAC+yMsCEFbovDIAALk4HwAQ6PIuAABqDFpqBFnovSYAAFZqAOhAMgAA + i0XsjUgBihBAhNJ1+YsdZA4FECvBxgMFQ4kDg8MEiR1kDgUQ6Z0AAACLyI1xAYoRQYTSdfkrzgPBxgO4 + 69qKCECEyXX5K8JPik8BR4TJdfiLyMHpAovy86WLyIPhA/Oki33sT4pHAUeEwHX4g33kAL60ywIQZqWk + dEyLReyNcAGKCECEyXX5i03sxgNoK8ZDQIkDg8MEiR1kDgUQ6E8pAABoyMsCEOj0MQAAuTgfABDoKi4A + AGoMWmoEWej1JQAAix1kDgUQiz0wsgIQM/ZGO3XgD4+TAgAAi40M////aiBWaiyNRbTophb+/41FtOha + Fv7/aiCNVbTo4hb+/4P4AolF5A+FxwAAAGogUGogjU20jYUY////6HUW/v9qIGoBjU20aiCLwehlFv7/ + g/4Bfh7GA8ZDxgMAQ8YDLEPGA4NDxgPAQ8YDAUOJHWQOBRCNRbRorMsCEFD/14XAWVkPhNMBAACNRbRo + pMsCEFD/14XAWVkPhL4BAACNRbRomMsCEFD/14XAWVkPhJQBAACNRbRokMsCEFD/14XAWVkPhH8BAACN + RbRoiMsCEFD/14XAWVkPhGoBAACNRbRogMsCEFD/14XAWVl1JWoC6WkBAACDfeQCD45S////x0WshQMA + AGg4/QIQjUWs6S4BAACNRbRoeMsCEFD/14XAWVl1B2oD6R4BAACNRbRocMsCEFD/14XAWVl1GGoE6G0r + AACLxujMLQAAupUrABDpGwEAAI1FtGhoywIQUP/XhcBZWXVhagjoRCsAAIN95AJ1K42FGP///1D/FfCx + AhCFwFl8BYP4Bn4Xx0XchQMAAGg4/QIQjUXc6aQAAABqBliLDWQOBRDGAWhBiQGDwQSLxokNZA4FEOha + LQAAus0qABDpqQAAAI1FtGhgywIQUP/XhcBZWXVbagno0ioAAIN95AJ1KI2FGP///1D/FfCxAhCFwFl8 + BYP4EH4Ux0WwhQMAAGg4/QIQjUWw6zVqBliLDWQOBRDGAWhBiQGDwQSLxokNZA4FEOjrLAAAugsqABDr + PcdF2IUDAABoOP0CEI1F2FDoHHgAAGoF6GIqAACLxujBLAAAuqwsABDrE2oE6E0qAACLxuisLAAAujAt + ABChZA4FEP8FZA4FEGoDxgBQ6JorAACLHWQOBRBG6WT9//+DfeAAdCrGA8ZDxgMAQ8YDKUPGA4NDxgPA + Q8YDAUPGA8ZDxgMAQ8YDAEOJHWQOBRD2RegGdFjGA2hDgyMAg8MEaMjLAhCJHWQOBRDo5C4AAKFkDgUQ + iw0EQAUQxgBoQMcAAQQAAIPABKNkDgUQ6BMmAAD2RegCdAuLDQizAhDpvAEAAIsNQLMCEOmxAQAAg71s + ////AA+EjQEAAGjQywIQjYVo////6F7H//+EwA+FbwEAAGoAvozNAhBWagHoMi4AAKFkDgUQi03sxgC6 + QGoEiQhbA8O5/xEAEKNkDgUQ6JAqAABorMsCEP91jP/XhcBZWQ+EIgEAAGikywIQ/3WM/9eFwFlZD4QO + AQAAaJjLAhD/dYz/14XAWVkPhJUAAABokMsCEP91jP/XhcBZWQ+EgQAAAGiAywIQ/3WM/9eFwFlZdQVq + CFPrFGh4ywIQ/3WM/9eFwFlZdQlqCGoFVmoI6zpoaMsCEP91jP/XhcBZWXQ0aGDLAhD/dYz/14XAWVl0 + JGhwywIQ/3WM/9eFwFlZD4WuAAAAU2oFVmoA6BAtAADpngAAAGoMaglW6EwpAADpjwAAADP/V1dWahDo + 8CwAAKFkDgUQxgA8QMYATkC7WMsCEIvLo2QOBRDo7CkAAGoIagVWV+jHLAAAv2zNAhCLz+jCKQAAi8vo + xyUAAGoMaglW6A0tAAC5qy4AEOhjKQAAi8/orCUAAOsqaghT6Xf///+LHWQOBRCLRezGA7lDiQODwwSJ + HWQOBRC59REAEOgwKQAAubzLAhDodiUAAGoCWeg/IwAAM8lB6DcjAABqA1noLyMAAOhnKgAA6OskAACh + ZA4FEC3YYAMQUOjA8P//i1XsgcIEEAAAiQLoIigAAIsKhcl8CmoLWujS+v3/6yWFyYlN4NtF4H0G3AX4 + +wIQUd1dmN1FmFHdHCRqCzPSWejJ+v3/jbXo/v//6HDa//+NtWj////oZdr//421OP///+ha2v//i030 + X15kiQ0AAAAAW8nDi33shf90BegY8f//i02c6MY2AAC47RwCEMOD7EiDJCQAU1VWV2oHM8DGRCQ8AFmN + fCQ586tmq8dEJBQGAAAAqo1sJDjonCcAAGoEuKzNAhDo+SYAAGoFuKTNAhDo7SYAAGoFuJzNAhDo4SYA + AGoFuJTNAhDo1SYAAGokM9tDWLmMzQIQ6M0kAABqJFi5gM0CEOjAJAAAg3wkcACLfCRgdB//N4tEJGD/ + MA+2QBhQaFTNAhD/dwzoYhz+/4PEFOsKi0QkYItADMYAAItEJGSLyIoQQITSdfmLfwwrwYvxT4pPAUeE + yXX4i8jB6QLzpYvIg+ED9kQkbALzpL6UzQIQdD5W6DgrAAC7nM0CEFPoLSsAAGikzQIQ6CMrAABorM0C + EOgZKwAAi0QkXItIBOheIgAAiw0sswIQ6EInAADrBbuczQIQi0QkbIPgCIlEJGQPhIQAAABqAL+AzQIQ + V2oB6JsqAAChZA4FEMYAukDHAETNAhCDwAS5/xEAEKNkDgUQ6PomAABqBGoFV2oA6CsqAAChZA4FEMYA + PUCDIACDwAS/NM0CEIvPo2QOBRDoJScAAKFkDgUQxgC5QMcAHM0CEIPABLn1EQAQo2QOBRDorSYAAIvP + 6PYiAACLVCRohdJ1R4tEJGCLeAxPikcBR4TAdfi+DM0CEKWlpWiUzQIQZqXoOioAAFPoNCoAAGikzQIQ + 6CoqAABorM0CEOggKgAAi3wkFOkLAwAAaizoUA/+/4v4g/8giXwkFH4Wx0QkYIUDAABoOP0CEI1EJGTp + pAIAAIX/iXwkcA+EfgIAAItMJGhqIP90JHSNRCQgaizowA7+/41EJBjocw7+/4s9MLICEI1EJBhQU//X + hcBZWXUJxkUASenmAQAAjUQkGFBW/9eFwFlZdQnGRQBJ6egBAACNRCQYUGikzQIQ/9eFwFlZdQ7GRQBV + aKTNAhDpyQEAAI1EJBhQaKzNAhD/14XAWVl1DsZFAFVorM0CEOmpAQAAjUQkGFBo+MwCEP/XhcBZWXUJ + xkUAVel0AQAAjUQkGFBo5MwCEP/XhcBZWXUJxkUAVelyAQAAjUQkGFBo1MwCEP/XhcBZWXUwxkUAaYt0 + JBBTVkXomigAAGoFahBb6IcYAACLxuhtIAAAu5zNAhC+lM0CEOk3AQAAjUQkGFBoxMwCEP/XhcBZWXUo + xkUAaVOLfCQUV0XoWCgAALr//wAAi8/oFBsAAIvH6CkgAADp/QAAAI1EJBhQaLTMAhD/14XAWVl1MMZF + AGlWi3QkFFZF6B4oAABqBWoQW+gLGAAAi8bo8R8AAL6UzQIQu5zNAhDpuwAAAI1EJBhQaKTMAhD/14XA + WVl1BsZFAGnrZ41EJBhQaIjMAhD/14XAWVl1CcZFAHXpJf///41EJBhQaGzMAhD/14XAWVl1CcZFAHXp + TP///41EJBhQaFDMAhD/14XAWVl1CcZFAHXpa////41EJBhQaDTMAhD/14XAWVl1CsZFAHVW6Rb///+N + RCQYUGgkzAIQ/9eFwFlZdQfGRQBMU+sXjUQkGFBoFMwCEP/XhcBZWXVRxkUATFZF6KInAACLRCQQhcB1 + CsdEJBADAAAA6x2D+AN1CsdEJBABAAAA6w5I99gbwIPg/kBAiUQkEP9MJHAPhYb9//+LfCQUi0QkYItA + DOsYx0QkYIUDAABoOP0CEI1EJGRQ6ORvAABAgDgAdfrGAChAhf+Lz3QbjXQkOE6KFA7GACVAiBBAg/kB + fgTGACxASXXqR0eD/wLGACnGQAEAfjOLRCRgi0gM6FEeAACLbCRcjU0Z6EUeAAC5GToAEOgqIwAAagRb + i9fB4gKLy+jxGgAA6weLbCRcagRb9kQkbAEPhJ4AAACD/wJ+EKFkDgUQxgC5QIPFGYko6xKLRCRgi0gM + oWQOBRDGALlAiQgDw7/1EQAQi8+jZA4FEOjNIgAAM/Y5dCRkdFBTagVogM0CEFbo9CUAAKFkDgUQxgA9 + QIkwA8O+BMwCEIvOo2QOBRDo8CIAAKFkDgUQxgC5QMcA7MsCEAPDi8+jZA4FEOh8IgAAi87oxR4AAItE + JFyLUAzpsgAAAPZEJGwGD4SuAAAAagBojM0CEGoB6NAlAACD/wJ+BY1NGesHi0QkYItIDKFkDgUQxgC6 + QIkIA8O5/xEAEKNkDgUQ6CMiAAAz/zl8JGR0U1NqBWiAzQIQV+hKJQAAoWQOBRDGAD1AiTgDw74EzAIQ + i86jZA4FEOhGIgAAoWQOBRDGALlAxwDsywIQA8O59REAEKNkDgUQ6M8hAACLzugYHgAAaghTaIzNAhBX + 6PckAACLVRBqA+jfIQAAi3QkYItGCIXAdApQ6ITn//+DZggA6H0dAAChZA4FEC3YYAMQUOhS6f//iUYI + 6LwgAABfXl1bg8RIwhgAU1VX6NIgAABqBLiszQIQ6C8gAAC9pM0CEGoFi8XoISAAAGoFuJzNAhDoFSAA + AGoEuJTNAhDoCSAAAGokM9tDWLmMzQIQ6AEeAABqJFi5gM0CEOj0HQAA6BUgAAChZA4FEMYAU0DGAFFA + xgBSQFWjZA4FEOi8JAAAi87oBhwAALk6DAIQ6OsgAAChZA4FEMYAPUCDIACDwAS/cM0CEIvPo2QOBRDo + IiEAADPA6EcQAACLz+gNHQAAaJTNAhDocyQAAGiczQIQ6GkkAABV6GMkAABorM0CEOhZJAAAi04E6KIb + AACLDSyzAhDohiAAALtszQIQi8voyhwAAGoCWeiTGgAAM8lB6IsaAABqA1nogxoAAOi7IQAA6D8cAACh + ZA4FEC3YYAMQUOgU6P//iUYI6H4fAABX6GEhAABTiUYM6FghAABfXYlGEFvDVYvsUVNWi/Az2zleBA+F + qQAAADheGHVFavz/Nv8VOLMCEDvDiUYEdQ9TU/8VWLACEGj4zQIQ62joef7///92CGr8/zb/FTyzAhCF + wHVuU1P/FViwAhBo6M0CEOtDauj/Nv8VJLMCEDvDiUYEdQ9TU/8VWLACEGjYzQIQ6yPoNP7///92CGro + /zb/FTSzAhCFwHUpU1P/FViwAhBoyM0CEIv46KkuAABoOP0CEI1F/FDHRfxOYbwA6M1rAABeW8nDuPOl + AhDofWwAAIHspAEAAFOL2YtLLjPAVolF/IMNUFADEP9XiUXkiUXYi0MKjXNujX2AiWXwiU3giUXc6ETU + //9qBViLy421UP///8ZF/AHoLdP//8ZF/AKBfYQAAwAAdhTHRcCFAwAAaDj9AhCNRcDpUAEAAI1DSolF + 1IoAPE90GDwwdBTHRcyFAwAAaDj9AhCNRczpLAEAAIO9VP///wB1HYC7kgAAADB0FMdF0IUDAABoOP0C + EI1F0OkGAQAAZoM7Bnxti5u+AAAAhdt0Y4vDqAeJReh1BoPIAYlF6KgBdBioBnQUx0XEhQMAAGg4/QIQ + jUXE6csAAACoAnQYqAV0FMdFuIUDAABoOP0CEI1FuOmvAAAAqAR0IqgDdB7HRbyFAwAAaDj9AhCNRbzp + kwAAAMdF6AEAAACLReiLddyoEA+Xw4hd7+iL5f//i/iJfeTo6f3//4tF4OiW6P//i13Ui/AzwIA7T4l1 + 2A+UwFD/dej/tXT/////daRWV+iC9f//gDtPdUT/deAPtkXv/3XcUI2FUP7//2hkzgIQUOhkEv7/g8QU + U42FUP7//41eBFDogw3+/4XAdBGJRchoOP0CEI1FyFDo/WkAAItPBIXJfApqC1roi+/9/+slhcmJTdTb + RdR9BtwF+PsCEFHdXbDdRbBR3Rwkagsz0lnogu/9/421UP///+gpz///jXWA6CHP//+LTfRfXmSJDQAA + AABbycODfdgAi3XkdAr/deCLxuj+6f//hfZ0EYN+FAB1C+hD5///Vugo6v//i0206HErAAC4JigCEMNq + EGhA/AIQ6On5/f+BfQwBBAAAdTyDZfwAi3UQi87oZ+n9/4lF5Il14Fbokvb9/1mDfeQAdAiLTeToOOn9 + /4NN/P8zwOsdM8BAw4tl6INN/P//dRT/dRD/dQz/dQj/FQyzAhDoyPn9/8IQAIA9OEQFEAAPhKcAAABT + ix1wsAIQVVZXvvg+BRC9IEQFEFX/FVSxAhAz/zk+dBKLBsZADACLBot4CIsG/3AE/9NV/xVQsQIQhf90 + EGr/V/8VaLACEFf/FYiwAhCDxgSB/ng/BRB8u754PwUQVf8VVLECEDP/OT50EosGxkAYAIsGi3gIiwb/ + cAT/01X/FVCxAhCF/3QQav9X/xVosAIQV/8ViLACEIPGBIH++D8FEHy7X15dW6HwPgUQhcB0B1D/FSCz + AhBmofQ+BRBmhcB0EP812IADEA+3wFD/FRSzAhDDUVGLRCQMU1WLLQizAhBWjQSFeD8FEIswV8ZEJBMB + iUQkFLsBBAAAav9qAFZqAv8VfLACEIXAD4SRAAAAg/gBdDmD+P8Phc0AAABoAAgAAOgo9f3/i/iF/1l0 + H2r+/3QkII1GGVBX6PgP/v+DxBBqAFdT/zXwPgUQ/9X/dgz/FSiwAhC9IEQFEFX/FVSxAhD/Nos9iLAC + EP/X/3YE/9eAfhgAdAX/dgj/11box/T9/4tEJBhZVccAAAAAAP8VULECEF9eM8BdQFtZWcIEAGoB/zb/ + dhT/dhD/dgz/FQiwAhBoAAgAAOiS9P3/i/iF/1l0IWoA/3QkII1GGVBX6GIP/v+DxBBqAFdT/zXwPgUQ + /9XrBcZEJBMAgHwkEwAPhQX////pU////7jjkwIQ6LFnAACD7BRTVlcz/4vxiX38i0YKgw1QUAMQ/zvH + iWXwx0XsAQAAAA+MqgAAAIP4Hw+PoQAAALsgRAUQU/8VVLECEItGCjk8hXg/BRB0KIsEhXg/BRDGQBgA + i0YKjQSFeD8FEIsIiwD/cASLeQj/FXCwAhCJRexT/xVQsQIQM8A5Rex1JVBQ/xVYsAIQaGzKAhCL+Ogm + KQAAx0XoTmG8AGg4/QIQjUXo6z07+HQQav9X/xVosAIQV/8ViLACEGoLM8laQejM6/3/i030X15kiQ0A + AAAAW8nDx0XkhQMAAGg4/QIQjUXkUOgLZgAAi03g6P8nAAC4qysCEMO4AJQCEOixZgAAgeykAAAAU1Yz + 24ld/ItBCoMNUFADEP9XjXEmjb1Q////iWXwiU3siV3oiUXk6H3O//+LRezGRfwBi0hOiU28i0h2jbCS + AAAAjX2AiU3M6FzO///GRfwCOB04RAUQdSVTU2j8ygIQaPC6AhDouycAAMdFwE5hvABoOP0CEI1FwOng + AQAAgX2EAAQAAHYUx0XchQMAAGg4/QIQjUXc6cMBAAAz9oP+IIl17H0PORy1eD8FEHQDRuvsg/4gdSVT + U2g8ygIQaPC6AhDoXicAAMdFuE5hvABoOP0CEI1FuOmDAQAAaBwIAADoYPL9/1mNDLV4PwUQiQE5GXUU + x0XUtgAAAGg4/QIQjUXU6VcBAACLMTPAuQcCAACL/vOri0W8iUYQi0XMiUYUxkYYAf91pI1GGWgwygIQ + UIl16Oj0DP7/g8QMjX4MV2oQU/+1dP////915P8VJLACEDvDU1N0IGggygIQi/joUScAAMdFxE5hvABo + OP0CEI1FxOnnAAAAU1P/FXSwAhA7w1OJBlN1Jv8VWLACEGikygIQi/joGycAAMdF4E5hvABoOP0CEI1F + 4OmxAAAAagFT/xV0sAIQO8OJRgR1JVNT/xVYsAIQaKTKAhCL+OjjJgAAx0XYTmG8AGg4/QIQjUXY63xq + Af82/3YU/3YQ/zf/FQiwAhA7w3QfU1NoCMoCEIv46K4mAADHRdBOYbwAaDj9AhCNRdDrR41FtFBoAAAB + AP917Gi2KQIQaAAgAABT/xWMsAIQO8OJRgh1KVNT/xVYsAIQaHjKAhCL+OhlJgAAx0XITmG8AGg4/QIQ + jUXIUOiJYwAAi03sagta6Bvp/f+NdYDo48j//421UP///+jYyP//i030X15kiQ0AAAAAW8nDi3XoM9s7 + 83Q6i0YMO8N0B1D/FSiwAhCLBjvDdAdQ/xWIsAIQi0YEO8N0B1D/FYiwAhBW6Hbw/f+LRexZiRyFeD8F + EItNsOgNJQAAuG8uAhDDUYtEJAhTVYstCLMCEFaNBIX4PgUQizBXiUQkELsBBAAAav9qAFZqAv8VfLAC + EIXAD4STAAAAg/gBdEGD+P914WgACAAA6Bnw/f+L+IX/WXQr/xVYsAIQUI1GDVD/dCQgjYYSAQAAUFfo + 3Qr+/4PEFGoAV1P/NfA+BRD/1f82/xVssAIQvyBEBRBX/xVUsQIQ/3YEix2IsAIQ/9OAfgwAdAX/dgj/ + 01bose/9/4tEJBRZV8cAAAAAAP8VULECEF9eM8BdQFtZwgQA/zb/FXiwAhBoAAgAAOiI7/3/i/iF/1kP + hDv///9qAI1GDVD/dCQgjYYSAQAAUFfoTQr+/4PEFGoAV1P/NfA+BRD/1ekQ////uAqUAhDormIAAIPs + FFMz21aJXfyLcQqDDVBQAxD/O/NXiWXwx0XsAQAAAA+MmgAAAIP+Hw+PkQAAAL8gRAUQV/8VVLECEI0E + tfg+BRAz9jkwdBmLCMZBDACLCIsA/3AEi1kI/xVwsAIQiUXsV/8VULECEDl17HUlVlb/FViwAhBobMoC + EIv46DUkAADHRehOYbwAaDj9AhCNRejrPTvedBBq/1P/FWiwAhBT/xWIsAIQagszyVpB6Nvm/f+LTfRf + XmSJDQAAAABbycPHReSFAwAAaDj9AhCNReRQ6BphAACLTeDoDiMAALicMAIQw7gnlAIQ6MBhAACB7JwA + AACDZfwAg2XsAIMNUFADEP9TVleL2Y1zAo19iIll8OiWyf//xkX8AYtDKolF4ItDUo1zbo29WP///4lF + wOh4yf//xkX8AoA9OEQFEAB1J2oAagBo/MoCEGgguwIQ6NQiAADHRcxOYbwAaDj9AhCNRczpowEAAIF9 + jAQBAAB2FMdF3IUDAABoOP0CEI1F3OmGAQAAgb1c////AAQAAHYUx0XEhQMAAGg4/QIQjUXE6WYBAAAz + /zPbg/sgiV3ofQ85PJ34PgUQdAND6+yD+yB1JVdXaMTKAhBoILsCEOhVIgAAx0XUTmG8AGg4/QIQjUXU + 6SQBAABoFAkAAOhX7f3/i/A791mJdex1FMdFyLYAAABoOP0CEI1FyOn8AAAAM8C5RQIAAIv+86uJNJ34 + PgUQxkYMAf+1fP///42GEgEAAGiwygIQUOjzB/7/i0Wsg8QMjU4NihBAiBFBhNJ19jP/V1dqAVf/FXSw + AhA7x4lGBHUoV1f/FViwAhBopMoCEIv46EAiAADHReROYbwAaDj9AhCNReTpgAAAAP91wP914P91rP8V + gLACEIP4/4kGdSVXV/8VWLACEGiIygIQi/joAiIAAMdF2E5hvABoOP0CEI1F2OtFjUW8UGgAAAEAU2jP + LgIQaAAgAABX/xWMsAIQO8eJRgh1KVdX/xVYsAIQaHjKAhCL+Oi7IQAAx0XQTmG8AGg4/QIQjUXQUOjf + XgAAagtai8vocuT9/421WP///+g3xP//jXWI6C/E//+LTfRfXmSJDQAAAABbycOLdeyF9nQ1iwaD+P90 + C4XAdAdQ/xWIsAIQi0YEhcB0B1D/FYiwAhBW6Njr/f+LRehZxwSF+D4FEAAAAACLTbjoayAAALgYMwIQ + w1WL7IPsMFZXagtZM8Az9ol10I191POrjUXQUL84ywIQV/812IADEP8VGLMCEGY7xmaj9D4FEHUuodiA + AxCJReSNRdBQx0XQMAAAAMdF2GsoAhCJffj/FRyzAhBmO8Zmo/Q+BRB0dYM9SGADEAJ1KYM9PGADEAV1 + IIsNQGADEDvOdAWD+QF1EVb/NdiAAxBWav1WVlZWVusSVv812IADEFZWVlZWVmgAAACAD7fAVlBW/xUQ + swIQO8aj8D4FEHUQVmoB/xVYsAIQaCjLAhDrGrkgRAUQ6Mcl///rF1ZqAf8VWLACEGgYywIQi/joQCAA + ADLAX17Jw4N8JAQJdQqhZA4FEMYA3esPg3wkBAh1MqFkDgUQxgDZQIXJfgeD+X98CYXJfQ6D+YB+CcYA + RUCICEDrCcYARUCJCIPABKNkDgUQwgQAhcmhZA4FEHQPxgDCQGaJCEBAo2QOBRDD/wVkDgUQxgDDw4sN + ZA4FEMYB/0GD+Ad+DYP4D38Fg8D46wODwPAM0IgBQYkNZA4FEMOLDWQOBRDGAf9Bg/gHfg2D+A9/BYPA + +OsDg8DwDOCIAUGJDWQOBRDDg3wkBAehZA4FEH8FxgA76xmDfCQED38PxgBmQMYAO0CjZA4FEOsJxgA6 + /wVkDgUQwgQAg/oHfzKFyX4Hg/l/fAmFyX0Mg/mAfgehZA4FEOs+hdKhZA4FEHQFxgCB6wPGAD1AiQiD + wATraoP6D39Phcl+B4P5f3wJhcl9JIP5gH4foWQOBRDGAGZAg/oIdAXGAIPrPMYAPUBmiQiDwAPrNKFk + DgUQxgBmQIP6CHQFxgCB6wPGAD1AZokIQEDrFoP6EKFkDgUQdAXGAIDrA8YAPECICECjZA4FEMPDg3wk + BAehZA4FEH4ExgBmQMYAD0CDfCQID34FxgC26wPGALdAo2QOBRDCCADDg3wkBAehZA4FEH4ExgBmQMYA + D0CDfCQIAX8FxgC26wPGALdAhcl+B4P5f3wJhcl9CoP5gH4FiAhA6wWJCIPABKNkDgUQwggAg/oHoWQO + BRB/IsYAi0CD+Qd+DYP5D38Fg8H46wODwfCAyvjA4gMK0YgQ602D+g9TfyHGAGZAxgCLQIP5B38Ei9nr + C4P5D41Z+H4DjVnwjUr46xvGAIpAg/kHfwSL2esLg/kPjVn4fgONWfCNSvCAyfjA4QMKy4gIW0CjZA4F + EMODfCQEAXUjoWQOBRDGAMZAg/kHfg2D+Q9/BYPB+OsDg8HwiAhAiBBA61qDfCQEAnUpoWQOBRDGAGZA + xgDHQIP5B34Ng/kPfwWDwfjrA4PB8IgIQGaJEEBA6yqDfCQEBHUooWQOBRDGAMdAg/kHfg2D+Q9/BYPB + +OsDg8HwiAhAiRCDwASjZA4FEMIEAIP5B6FkDgUQfw2A6UiICECJEIPABOslg/kPfxTGAGaDwfhAgOlI + iAhAZokQQEDrDIPB8IDpUIgIQIgQQKNkDgUQw4P6B389g/gEfRtWjTRAgzy1gFADEABeD4WQAAAAUFLo + Rv7//8OhZA4FEMYAi0CFyX4Hg/l/fFKFyX1fg/mAflrrR4P6D6FkDgUQfyTGAGZAxgCLQIXJfgeD+X98 + CYXJfQqD+YB+BYPC+Oseg8L46yrGAIpAhcl+B4P5f3wJhcl9FoP5gH4Rg8LwwOIDgMpFiBBAiAhA6xGD + wvDA4gOAyoWIEECJCIPABKNkDgUQw6FkDgUQxgCNQIXSfgeD+n98CYXSfSWD+oB+IIP5B34Ng/kPfwWD + wfjrA4PB8MDhA4DJRYgIQIgQQOsgg/kHfg2D+Q9/BYPB+OsDg8HwwOEDgMmFiAhAiRCDwASjZA4FEMOD + /g+KTCQEoWQOBRB/LIP+B34ExgBmQIP7AYvWdQ7GANFAg/4HfiaNVvjrIcYAwUCD/gd+MI1W+Osrg/sB + i9Z1GMYA0ECD/gd+A41W8IDJ+MDhAwrKiAjrGcYAwECD/gd+A41W8IDJ+MDhAwrKiAhAiBhAo2QOBRDC + BACD+gehZA4FEH8ixgAzQIP5B34Ng/kPfwWDwfjrA4PB8IDK+MDiAwrRiBDrTYP6D1N/IcYAZkDGADNA + g/kHfwSL2esLg/kPjVn4fgONWfCNSvjrG8YAMkCD+Qd/BIvZ6wuD+Q+NWfh+A41Z8I1K8IDJ+MDhAwrL + iAhbQKNkDgUQw4P5B6FkDgUQfxqFyXUFxgA16wnGAIFAgMnwiAhAiRCDwATrQYP5D38ixgBmQIP5CHUF + xgA16wzGAIFAg8H4gMnwiAhAZokQQEDrGoP5EHUIxgA0QIgQ6wzGAIBAg8HwgMnwiAhAo2QOBRDDg/oH + oWQOBRB/IsYAC0CD+Qd+DYP5D38Fg8H46wODwfCAyvjA4gMK0YgQ602D+g9TfyHGAGZAxgALQIP5B38E + i9nrC4P5D41Z+H4DjVnwjUr46xvGAApAg/kHfwSL2esLg/kPjVn4fgONWfCNSvCAyfjA4QMKy4gIW0Cj + ZA4FEMOD+QehZA4FEH8ahcl1BcYADesJxgCBQIDJyIgIQIkQg8AE60GD+Q9/IsYAZkCD+Qh1BcYADesM + xgCBQIPB+IDJyIgIQGaJEEBA6xqD+RB1CMYADECIEOsMxgCAQIPB8IDJyIgIQKNkDgUQw4P6B6FkDgUQ + fyLGACNAg/kHfg2D+Q9/BYPB+OsDg8HwgMr4wOIDCtGIEOtNg/oPU38hxgBmQMYAI0CD+Qd/BIvZ6wuD + +Q+NWfh+A41Z8I1K+OsbxgAiQIP5B38Ei9nrC4P5D41Z+H4DjVnwjUrwgMn4wOEDCsuICFtAo2QOBRDD + g/kGf2CFyXUKoWQOBRDGACXrSoXSfgeD+n98CYXSfR2D+oB+GKFkDgUQxgCDQIP5B355g/kPf3GDwfjr + b6FkDgUQxgCBQIP5B34Ng/kPfwWDwfjrA4PB8IDJ4IgIQIkQg8AE61CD+Q+hZA4FEH8nxgBmQIP5CHUF + xgAl6xHGAIFAg/kHfgODwfiAyeCICEBmiRBAQOsfg/kQdQXGACTrEcYAgECD+Qd+A4PB8IDJ4IgIQIgQ + QKNkDgUQw4P5B6FkDgUQfwyAwUD/BWQOBRCICMOD+Q9/C4PB+MYAZoDBQOsJg8HwxgD+gMnAQIgIQKNk + DgUQw4P5B6FkDgUQfwyAwUj/BWQOBRCICMOD+Q9/C4PB+MYAZoDBSOsJg8HwxgD+gMnIQIgIQKNkDgUQ + w4P6B6FkDgUQfyLGAANAg/kHfg2D+Q9/BYPB+OsDg8HwgMr4wOIDCtGIEOtNg/oPU38hxgBmQMYAA0CD + +Qd/BIvZ6wuD+Q+NWfh+A41Z8I1K+OsbxgACQIP5B38Ei9nrC4P5D41Z+H4DjVnwjUrwgMn4wOEDCsuI + CFtAo2QOBRDDg/kHoWQOBRB/GoXJdQXGAAXrCcYAgUCAycCICECJEIPABOtBg/kPfyKD+Qh1BcYABesQ + xgBmQMYAgUCDwfiAycCICEBmiRBAQOsag/kQdQXGAATrDMYAgECDwfCAycCICECIEECjZA4FEMOD+Qd/ + O4XSfgeD+n98CYXSfQ+D+oB+CqFkDgUQxgCD61uFyaFkDgUQdQXGAAXrCcYAgUCAycCICECJEIPABOtG + g/kPoWQOBRB/IoP5CHUFxgAF6xDGAGZAxgCBQIPB+IDJwIgIQGaJEEBA6xqD+RB1BcYABOsMxgCAg8Hw + gMnAQIgIQIgQQKNkDgUQw4P6B6FkDgUQfyLGACtAg/kHfg2D+Q9/BYPB+OsDg8HwgMr4wOIDCtGIEOtN + g/oPU38hxgBmQMYAK0CD+Qd/BIvZ6wuD+Q+NWfh+A41Z8I1K+OsbxgAqQIP5B38Ei9nrC4P5D41Z+H4D + jVnwjUrwgMn4wOEDCsuICFtAo2QOBRDDg/kHoWQOBRB/D4XJdQXGAC3rIMYAgUDrFYP5D38dg/kIdOvG + AGZAxgCBQIPB+IDJ6IgIQIkQg8AE6wfGACxAiBBAo2QOBRDDg/kHfzuF0n4Hg/p/fAmF0n0Pg/qAfgqh + ZA4FEMYAg+tbhcmhZA4FEHUFxgAt6wnGAIFAgMnoiAhAiRCDwATrRoP5D6FkDgUQfyLGAGZAg/kIdQXG + AC3rDMYAgUCDwfiAyeiICEBmiRBAQOsag/kQdQXGACzrDMYAgIPB8IDJ6ECICECIEECjZA4FEMOD+Qd/ + EaFkDgUQgMFY/wVkDgUQiAjDg/kPfxehZA4FEMYAZoPB+ECAwViICECjZA4FEMOD+AV+aIP4CHRjg/gH + fgmD+AkPhZAAAACFyX4Hg/l/fAmFyX0xg/mAfiyNQQSFwH4Hg/h/fAmFwH0cg/iAfhehZA4FEMYA/0DG + AHWK0UCAwgSIEEDrLqFkDgUQxgD/QMYAtUCNUQSJEIPABOsphcl+B4P5f3wJhcl9F4P5gH4SoWQOBRDG + AP9AxgB1QIgIQOsSoWQOBRDGAP9AxgC1QIkIg8AEo2QOBRDDoWQOBRDGAGhAiQiDwASjZA4FEMOFyX4H + g/l/fAmFyX0Tg/mAfg6hZA4FEMYAakCICEDrDqFkDgUQxgBoQIkIg8AEo2QOBRDDg/gHiw1kDgUQfhHG + AWZBg/gPfwWDwPjrA4PA8ARQiAFBiQ1kDgUQw6FkDgUQ/wVkDgUQxgDMw1WL7FGDZfwAU1ZXiz1sUAMQ + hf98QLjwLQUQi3UIi8iKGYrTOh51GoTSdBKKWQGK0zpeAXUMQUFGRoTSdeIzyesFG8mD2f+FyXQU/0X8 + g8BEOX38fsUzwF9eW8nCBACLRfxrwEQF8C0FEOvsoXBQAxCFwHwrVle+sDYFEI14AY1GwFDoef///4XA + dAyLQECLDivBg+gEiQGDxkRPdeFfXsOhcFADEECjcFADEGvARAVwNgUQi9Ar0VOKGYgcCkGE23X2iw1k + DgUQgwVkDgUQBIlIQFvDoWxQAxBAo2xQAxBrwEQF8C0FEIvQK9FTihmIHApBhNt19osNZA4FEIlIQFvD + iw1oUAMQhclTVle/8BgFEIvZfDqLdCQQS41PFIoWisI6EXUahMB0EopGAYrQOkEBdQxGRkFBhNJ14jPJ + 6wUbyYPZ/4XJdA+Dx1SF233GM8BfXlvCBACLx+v2Vovxiw1oUAMQa8lUV4v4jYFYGQUQK8aKFogUMEaE + 0nX2gz1oUAMQAIm5RBkFEImZSBkFEHwXi7H4GAUQK/eLxpn3+yvyibFMGQUQ6wj334m5TBkFEP8FaFAD + EF9ew1ZXi/mLDWhQAxBryVSNsVgZBRAr94oXiBQ+R4TSdfaJgVQZBRCNBEDB4AKDPWhQAxAAi5B4UAMQ + i7h8UAMQi4CAUAMQiZFEGQUQiblIGQUQiYFQGQUQfBeLsfgYBRAr8ovGmff/K/KJsUwZBRDrCPfaiZFM + GQUQ/wVoUAMQX17DoWRQAxCFwHwca8BUi4hwDgUQg/kEdwNqBFmLgHgOBRCNRAj4wzPAw41I/zkNZFAD + EHwKa8BUjYAcDgUQwzPAw4sNZFADEIXJU1ZXv3AOBRCL2Xw6i3QkEEuNTxSKForCOhF1GoTAdBKKRgGK + 0DpBAXUMRkZBQYTSdeIzyesFG8mD2f+FyXQPg8dUhdt9xjPAX15bwgQAi8fr9olBEI0EQMHgAoM9ZFAD + EACLkHhQAxCJEYuQfFADEIlRBIuAgFADEIlBDHwjoWRQAxBrwFSLkHAOBRCD+gR3A2oEWouAeA4FEAPC + iUEI6wfHQQgIAAAA/wVkUAMQw4sNZFADEKDRyQIQa8lUgcHEDgUQiEEUi0QkBOiD////wgQAiw1kUAMQ + a8lUgcHEDgUQVovwjUEUK8aKFogUMEaE0nX2i0QkCOhW////XsIEAKFkDgUQ/wVkDgUQagRZagVaxgBV + 6OXx//+haFADEIXAfBNrwFSLkPgYBRBqBPfaWelj+v//w6FkDgUQLdhgAxDDiw1kDgUQVle+2GADECvO + i/iLwcHpAok9aA4FEPOli8iD4QPzpF9ew4PI/8cFZA4FENhgAxCjZFADEKNoUAMQo2xQAxCjcFADEMP/ + dCQE6GT+//+FwHQQi0gIA0wkDP90JAjoR+///8IMAOgw/v//hcB0EItICANMJAj/dCQE6Cvv///CCAD/ + dCQE6Cj+//+FwHQL/3AQi0gI6BDv///CBADo+f3//4XAdAv/cBCLSAjo+e7//8PovP3//4vI6Tnv//+h + ZA4FEMYAuECJCIPABKNkDgUQM8DpQe///4tMJATo5PH//4tEJAToL+///8IEAItMJAToz/H//4tEJATo + Qu///8IEAKFkDgUQ/wVkDgUQxgDp6cX7//+hZA4FEMYAD0DGAIRAo2QOBRDprvv//+hq/f//hcB0D/9w + EItICP90JAjoLfD//8IEAOhP/f//hcB0EItICANMJAiLRCQE6Kfx///CCADoM/3//4XAdAuLSAiLQBDp + kPH//8PoHv3//4XAdBCLUAgDVCQIi0wkBOgk8v//wggAagXoe/L//8NqBOhz8v//w2oH6Gvy///DagTo + Y/L//8Po4vz//4XAdBCLSAgDTCQIi0QkBOhF+f//wggA6Mb8//+FwHQLi0gIi0AQ6S75///D/3QkBOhM + +v//hcB0EItAQC3YYAMQAwVoDgUQ6wIzwMIEAP90JAToo/z//4XAdQXpIvv//8IEAGoFWWoEWuiS7/// + agVZ6LD4///pfv7///90JAjoyv///4XAdA//cBCLSAj/dCQI6CHv///CCAD/dCQE6Kv///+FwA+EpgAA + AItIEIP5AX8Zg/4HfwSL1usLg/4PjVb4fgONVvCA6njrSYP5A38jiw1kDgUQxgFmQYP+B38Ei9brC4P+ + D41W+H4DjVbwgOp36yeD+QV+BYP5CHVTg/4HfwSL1usLg/4PjVb4fgONVvCA6neLDWQOBRCIEYtQCEGF + 0n4Hg/p/fAmF0n0Rg/qAfgzGAUWKQAhBiAFB6wzGAYWLQAhBiQGDwQSJDWQOBRDCBAD/dCQE6PH+//+F + wA+E2gAAAItIEIP5AX8/iw1kDgUQxgHGi1AIQYXSfgeD+n98CYXSfRGD+oB+DMYBRYpACEGIAUHrDMYB + hYtACEGJAYPBBIgZQemNAAAAg/kDf0KLDWQOBRDGAWZBxgHHi1AIQYXSfgeD+n98CYXSfRGD+oB+DMYB + RYpACEGIAUHrDMYBhYtACEGJAYPBBGaJGUFB60aD+QV+BYP5CHVCiw1kDgUQxgHHi1AIQYXSfgeD+n98 + CYXSfRGD+oB+DMYBRYpACEGIAUHrDMYBhYtACEGJAYPBBIkZg8EEiQ1kDgUQwgQA/3QkCOgD/v//hcB0 + FItICANMJBCLRCQMi1QkBOjr7v//whAA/3QkCOjf/f//hcB0D4tICItAEItUJATozO7//8IIAP90JAjo + wP3//4XAdBCLUAgDVCQMi0wkBOha7///wgwA/3QkBOig/f//hcB0EItICANMJAyLRCQI6Jf2///CDAD/ + dCQE6ID9//+FwHQLi0gIi0AQ6Hz2///CBABVi+yD7DxTVldqCIvZM8BZxkXEMI19xfOrZquqjUXsUI1F + +I1zAlCJdfDoR+39/4vwhfYPhXMBAAAz/0dmOTt1BYl7LusQg3suAH0KuYUDAADoNcj9/2aDOwKLdex1 + GYtDLjvGfhI7x3UEhfZ0CrngAAAA6BPI/f9mOTt0JYN7LgB1H4X2dBuNew1mgycAZsdDCQIAZsdDCwEA + i134D6/e61AzwDv3D5/AjXsLQGaDJwBmiUMJZotDLmaJQw2LXfjrMItN8I1VxOhLzv3/i/CF9g+F1QAA + AIpFxDxOdCA8RHQcPFR0GDxZdBg8MA+FswAAAGb/Bw+3BzvDfsbrGzxZdQ6LTdiJTeiLTdyJTezrBt1F + 0N1d9IhF/2aLBw+3yDvLD4+7AAAAQGaJBw+3wOtYi03wjVXE6N3N/f+L8IX2dWuKRcQ6Rf91NYB9/1l0 + Fd1F9Nxd0N/g9sRBdSbdRdDdXfTrHotN3DlN7HwWi0XYfwU5Reh2DIlF6IlN7OsEPDB1I2b/Bw+3BzvD + fqSKRf88TnUxiEXEZsdFxhQAx0XIEAAAAOs3voUDAADrA4pFxDxDdQiLTeDon8n9/4vO6MnG/f/rJjxZ + dRGIRcSLReiJRdiLReyJRdzrCYhFxN1F9N1d0I1NxOgtzP3/X15bycNVi+yD7DxTVldqCIvZM8BZxkXE + MI19xfOrZquqjUXsUI1F+I1zAlCJdfDoWOv9/4vwhfYPhXkBAAAz/0dmOTt1BYl7LusQg3suAH0KuYUD + AADoRsb9/2aDOwKLdex1GYtDLjvGfhI7x3UEhfZ0CrngAAAA6CTG/f9mOTt0JYN7LgB1H4X2dBuNew1m + gycAZsdDCQIAZsdDCwEAi134D6/e61AzwDv3D5/AjXsLQGaDJwBmiUMJZotDLmaJQw2LXfjrMItN8I1V + xOhczP3/i/CF9g+F2wAAAIpFxDxOdCA8RHQcPFR0GDxZdBg8MA+FuQAAAGb/Bw+3BzvDfsbrGzxZdQ6L + TdiJTeiLTdyJTezrBt1F0N1d9IhF/2aLBw+3yDvLD4+2AAAAQGaJBw+3wOtYi03wjVXE6O7L/f+L8IX2 + dXGKRcQ6Rf91NYB9/1l0Fd1F9Nxd0N/g9sQFeibdRdDdXfTrHotN3DlN7H8Wi0XYfAU5RehzDIlF6IlN + 7OsEPDB1KWb/Bw+3BzvDfqSKRf88TnU3iEXEZsdFxhQAx0XIEAAAAN1F9N1d0OsyvoUDAADrA4pFxDxD + dQiLTeDoqsf9/4vO6NTE/f/rGzxZiEXEddKLReiJRdiLReyJRdyNTcToQ8r9/19eW8nDVYvsg+xAU1ZX + agiL2TPAWcZFwDCNfcHzq2arqo1F8FCNRfiNcwJQiXX06G7p/f+L8IX2D4VqAQAAM/9HZjk7dQWJey7r + EIN7LgB9CrmFAwAA6FzE/f9mgzsCi3XwdRmLQy47xn4SO8d1BIX2dAq54AAAAOg6xP3/Zjk7dCiDey4A + dSKF9nQejXsNZoMnAGbHQwkCAGbHQwsBAItd+A+v3old+OtIM8A79w+fwI17C0BmgycAZolDCWaLQy5m + iUMNi1346yiLTfSNVcDob8r9/4vwhfYPhckAAACKRcA8TnQYPFl0FDwwD4WxAAAAZv8HD7cHO8N+zusb + PE6IRf91CN1FzN1d5OsMi0XUiUXsi0XYiUXwZosHD7fIO8t+DY1NwOgYyf3/6akAAABAZokHD7fA60KL + TfSNVcDoAMr9/4vwhfZ1XopF/zhFwHUdPE51C91FzNxF5N1d5OsUi0XUAUXsi0XYEUXw6waAfcAwdS5m + /wcPtwc7w366gH3/TnU620X4UVHdXezdReTcdezdHCRqEFpqFFnoysj9/+s2voUDAACAfcBDdQiLTdzo + 0MX9/4vO6PrC/f/rGovDmVJQ/3Xw/3Xs6DdCAABSUGoVWei4yP3/X15bycNVi+yD7DxTVldqCIvZM8BZ + xkXEMI19xfOrZquqjUXsUI1F+I1zAlCJdfDolef9/4vwhfYPhV4BAAAz/0dmOTt1BYl7LusQg3suAH0K + uYUDAADog8L9/2aDOwKLdex1GYtDLjvGfhI7x3UEhfZ0CrngAAAA6GHC/f9mOTt0JYN7LgB1H4X2dBuN + ew1mgycAZsdDCQIAZsdDCwEAi134D6/e60gzwDv3D5/AjXsLQGaDJwBmiUMJZotDLmaJQw2LXfjrKItN + 8I1VxOiZyP3/i/CF9g+FwAAAAIpFxDxOdBg8WXQUPDAPhagAAABm/wcPtwc7w37O6xs8TohF/3UI3UXQ + 3V306wyLRdiJReiLRdyJRexmiwcPt8g7y34NjU3E6ELH/f/plAAAAEBmiQcPt8DrQotN8I1VxOgqyP3/ + i/CF9nVVikX/OEXEdR08TnUL3UXQ3EX03V306xSLRdgBReiLRdwRRezrBoB9xDB1JWb/Bw+3BzvDfrqA + ff9OdTHdRfRRUd0cJGoQWmoUWej9xv3/6yq+hQMAAIB9xEN1CItN4OgDxP3/i87oLcH9/+sO/3Xs/3Xo + ahVZ6PfG/f9fXlvJw7hPlAIQ6MVBAACB7MQAAACDZfwAU4vZi0NShcBWV4ll8IlF6H8VaDj9AhCNRdxQ + x0XchQMAAOjWQAAAg3sqAHUZagtaM8noY8b9/4tN9F9eZIkNAAAAAFvJw41zArABjb1g////6G2G//+N + cyaNvTD////GRfwB6FGp//+LfeiNdajGRfwC6Lim///GRfwDi4VU////iUXsi4U0////M9L39zPJi/KF + 9g+VwTPbQ4lF4I2VYP///4l15APIi8PozZr//ztd4H84i03oi33Mi3Xsi8HB6QLzpYvIg+ED86SNVaiN + jWD///9miZ1p////6F6Z//+LRegBReyLdeRD68OF9nQvi33Mi86LwcHpAol1rIt17POli8iD4QPzpEON + VaiNjWD///9miZ1p////6B+Z//8Pt41p////agVa6GzF/f+NdajoNKX//421MP///+gppf//jbVg//// + 6FaE///p5v7//4tN2Oirv/3/uBRRAhDDuP2SAhDoUkAAAIPsHINl/ABTVovxi0YKSFeJZfAPhMYAAABI + D4SgAAAASHRQSHQUx0XshQMAAGg4/QIQjUXs6boAAABmgz4CdSqAfiZMdBTHReiFAwAAaDj9AhCNRejp + mgAAADPJQTlOKg+UwKJUUAMQ60MPtg1UUAMQ6zpmgz4CdTuKRiY8SXQVPE50EcdF5IUDAABoOP0CEI1F + 5Otf/3Yu/xVcsAIQM8mFwHQJi0Yuo+RCBRBB6OzE/f/rYqHkQgUQ6C2V///rVmaDPgJ1EcdF4IUDAABo + OP0CEI1F4Osdiw3gQgUQ6y9mgz4CdSPHRdyFAwAAaDj9AhCNRdxQ6Jo+AACLTdjomb79/7hcUwIQw4sN + 2IADEGoLWugbxP3/i030X15kiQ0AAAAAW8nDVYvsg+wkVldqCMZF3DBZM8CNfd3zq2araPzJAhCq/xVg + sAIQizVksAIQvzhgAxBXo9iAAxDHBThgAxCcAAAA/9aFwHUNV8cFOGADEJQAAAD/1rrsyQIQjU3c6DW+ + /f+LReRfo9RgAxBeycOFyXQNgflOYbwAdAXo+r39/4A9VFADEAB0F4sNUFADEGnJkBAAAIHBaIEDEOnk + vf3/agtag8n/6WXD/f+DfCQMAHQNoVBQAxCD+Bh0e0DrAjPAo1BQAxBpwJAQAABWizUMsgIQV8eA4IAD + EAEAAABogAAAAP90JBDHgOSAAxBhHgAAjYDogAMQUP/WoVBQAxBpwJAQAABoABAAAP90JCC/aIEDEAPH + UP/Wg8QYg3wkGAB0E4sNUFADEGnJkBAAAAPP6E+9/f9fXsIQAFMz2zlcJAx0DaFQUAMQg/gYdHlA6wIz + wKNQUAMQacCQEAAAVseA4IADEAEAAABogAAAAP90JBCJuOSAAxCNgOiAAxBQ/xUMsgIQiw1QUAMQacmQ + EAAAg8QMU7gAEAAAUL5ogQMQA85RU1dTUP8VVLACEDlcJBR0E4sNUFADEGnJkBAAAAPO6L+8/f9eW8IM + ALhslAIQ6F09AACB7KgAAACDZfwAoVBQAxCD+P9TVleJZfB1GWoLWjPJ6BjC/f+LTfRfXmSJDQAAAABb + ycNqBEBQjXECjX2g6J6X//+/ABAAAI21cP///8ZF/AHoe6L//8ZF/AJqCDPAxoVM////MFmNvU3////z + q2arqjP/IX3si3XsOzVQUAMQD4emAAAAafaQEAAAi4bkgAMQR41NoGaJfalmx0WrAQDo/X7//42G6IAD + EFCNnXD///9miX2pZsdFqwIA6ASf//+L0I1NoOgWlf//jYZogQMQUGaJfalmx0WrAwDo5J7//4vQjU2g + 6PaU//+DvuCAAxACZsdFqwQAZol9qXUYjYZokQMQUOi7nv//i9CNTaDozZT//+sOjZVM////jU2g6Pd+ + ////RezpS////w+3TalqBVroBcH9/421cP///+jKoP//jXWg6Pp////p1f7//4tN6OhPu/3/uF9VAhDD + uH6UAhDo9jsAAIPsSFNWVzPAvwAQAACNdayJZfCL2YlF/IlF7Il95IlF6OhEof//xkX8AWaLA2Y9AgB1 + CItDLolF7OsZZj0DAHUTi0MuiUXsi0NSiUXox0XkABgAAGoA/3XU/3XQ/3Xs/3MK/3Xo/3Xk/xVUsAIQ + hcCJRbB2HI11rOiijP//6COg//+LTfRfXmSJDQAAAABbycNoOP0CEI1F4FDHReBOYbwA6JI6AACLTdyB + +U5hvAB1GGoBagD/FViwAhBo3MkCEIv46Dj9///rBehxuv3/uCRXAhDDoVBQAxCD+Bh0WECjUFADEGnA + kBAAAMeA4IADEAEAAACDoOSAAxAAaIAAAAD/dCQIjYDogAMQUP8VDLICEKFQUAMQ/3QkHGnAkBAAAP90 + JBwFaIEDEP90JBxQ6ETi/f+DxBzCEACDfCQMAFaL8HQNoVBQAxCD+Bh0cEDrAjPAo1BQAxBpwJAQAADH + gOCAAxABAAAAaIAAAAD/dCQMibDkgAMQjYDogAMQUP8VDLICEKFQUAMQacCQEAAAVv90JBy+aIEDEAPG + UOjX4f3/g8QYg3wkFAB0E4sNUFADEGnJkBAAAAPO6Iy5/f9ewhAA6G/e/v/oadD//+jiVv//6Cy7///o + PMr9/+j7Cf//gz1IYAMQAXUH6DSo/v/rBeivqv7/6EMW/v/oD/f+/+n57v3/oWAOBRCDDVBQAxD/U4tZ + CvfQI9j2wwFWdBDoNfP+/4TAdAeDDWAOBRAB9sMEdBDomNr//4TAdAeDDWAOBRAE9sMCdBDovlb//4TA + dAeDDWAOBRAC9sMIdBDonRT//4TAdAeDDWAOBRAI9sMQdBDoMsr9/4TAdAeDDWAOBRAQ9sMgdBDoVKT+ + /4TAdAeDDWAOBRAg9sNAdBDoORoAAITAdAeDDWAOBRBAhNt5IIM9SGADEAF1B+h1p/7/6wXo/qn+/4TA + dAeADWAOBRCAvgABAACF3nQP6EO3//+EwHQGCTVgDgUQvgACAACF3nQP6OT+/f+EwHQGCTVgDgUQvgAE + AACF3nQP6CUDAACEwHQGCTVgDgUQvgAIAACF3nQP6CgV/v+EwHQGCTVgDgUQvgAQAACF3nQP6PH1/v+E + wHQGCTVgDgUQvgAgAACF3nQP6LTt/f+EwHQGCTVgDgUQgz1QUAMQ/14PlMAPtshb6c+9/f9RU4tYClWL + aC5WM/ZmgzgCV4l0JBB0A4twUlb/FXCzAhCL+IX/dBlVU1f/FTCwAhCF9olEJBB0CFdW/xV0swIQi0Qk + EF9eXVuDxATpmI3//7gHkwIQ6Ck4AACD7GxTVjP2V4l1/GaDOQKLeQqJZfB1BYtJLusCM8k7znQ7jUXA + UFH/FWyzAhCFwA+FagEAAFZW/xVYsAIQaID6AhCL+Ojp+f//x0XsTmG8AGg4/QIQjUXs6eUBAABX/xVg + swIQO8Z0O41NwFFQ/xVsswIQhcAPhSQBAABWVv8VWLACEGiA+gIQi/joo/n//8dF6E5hvABoOP0CEI1F + 6OmfAQAAalD/FYSzAhCD+AF/PlaNRcBQVmow/xWAswIQhcAPhdkAAABWVv8VWLACEGho+gIQi/joWPn/ + /8dF5E5hvABoOP0CEI1F5OlUAQAAoRBEBRA7xnUUx0Xg8gIAAGg4/QIQjUXg6TcBAABqAlf/0I1NiFFQ + x0WIKAAAAP8VGEQFEDvGdWGDPUhgAxACdTOhPGADEIP4BHYTg/gFdSShQGADEDvGdAWD+AF1FlZW/xVY + sAIQaFj6AhCL+OjS+P//6xFWVmhQzwIQaFj6AhDoMPj//8dF3E5hvABoOP0CEI1F3Om7AAAAi0WciUXA + i0WkiUXIi0WgiUXEi0WoiUXMjUWwUFf/FWyzAhCFwHUlVlb/FViwAhBogPoCEIv46HD4///HRdhOYbwA + aDj9AhCNRdjrb4tFuCtFsItNyJkrwovYi0XAA8GZK8KLyItFvCtFtNH7mSvCi1XE0fkry4vYi0XMA8KZ + ahVWK8JW0fjR+yvDUFFWV/8VfLMCEIXAdTdWVv8VWLACEGhI+gIQi/jo//f//8dF1E5hvABoOP0CEI1F + 1FDoIzUAAItN0OgX9///uMVcAhDDi030X15kiQ0AAAAAW8nDV2jw0QIQ/xVgsAIQi/iF/3QzVos10LAC + EGjI+gIQV//WaLT6AhBXoxBEBRD/1mik+gIQV6MURAUQ/9ZeoxhEBRCwAV/DagBqAf8VWLACEGj80QIQ + i/jocvf//zLAX8O4rZQCEOhbNQAAg+xkU1ZXiWXwagEz22oEjXECjX2QiV386MGP//9TjUXYUFNqMMZF + /AH/FYCzAhCFwHUpU1P/FViwAhBoaPoCEIv46B33//9oOP0CEI1F7FDHRexOYbwA6EE0AACLRdiNTZBm + x0WZAQDoeHf//4tF4I1NkGbHRZkCAOhnd///i0XcjU2QZsdFmQMA6FZ3//+LReSNTZBmx0WZBADoRXf/ + /2oLM8laQeiPuf3/jXWQ6I94//+LTfRfXmSJDQAAAABbycOLTejoz/X//7jwXQIQw7i/lAIQ6IE0AACD + 7GSDZfwAU1ZXiWXwi9lqAWoEjXMmjX2Q6OaO//+NRdhQxkX8Af9zCv8VbLMCEIXAdSlQUP8VWLACEGiA + +gIQi/joQ/b//2g4/QIQjUXsUMdF7E5hvADoZzMAAItF2I1NkGbHRZkBAOiedv//i0XgjU2QZsdFmQIA + 6I12//+LRdyNTZBmx0WZAwDofHb//4tF5I1NkGbHRZkEAOhrdv//agszyVpB6LW4/f+NdZDotXf//4tN + 9F9eZIkNAAAAAFvJw4tN6Oj19P//uMpeAhDDuNGUAhDopzMAAIPsSFMz24ld/IMNUFADEP9WV4ll8MZF + rEOJXbCJXdSJXciJXdCIXdiNRexQaOgDAABqAVNTxkX8AYtJCmoOUYlN5P8VeLMCEDvDdUX/FViwAhA7 + w3UcjXWs6HKE///o85f//4tN9F9eZIkNAAAAAFvJw1NTaJD6AhCL+Ogw9f//x0XoTmG8AGg4/QIQjUXo + 61aDRewCi33sjXWs6PWE//+NRexQaOgDAABqAf910P917GoN/3Xk/xV4swIQO8N1Lf8VWLACEDvDdCNT + U2iQ+gIQi/jo2PT//8dF4E5hvABoOP0CEI1F4FDo/DEAAItF7IlFsOle////i03c6OXz//+4VF8CEMP/ + cQqDDVBQAxD//xUosAIQhcB0GVdqAGoAaIj2AhCL+OiF9P//M8lf6bLz///DuBuWAhDoaTIAAIHs9AAA + AFNWM9tXiV2kxkWoAYld/MaFdP///0OJnXj///+JXZyJXZCJXZiIXaCJnXD////GhUz///9PiZ1s//// + 2e7dnTT////GhQT///9ExoUo////VIld3Ild4Ild5IldzIld0Ild1IldwIldxIldyItFCFNqCf91DI11 + pMZF/AXoMP3+/1NTjUXYUI1FtFCNRbxQU1ONXewzyY116I1FpOgU/P7/g320AHYOi33YjbV0////6JyD + //+LRZiJRfCLReg7Rex3A4tF7FCNXdzoSvf+/4N9vAB2H4tFDI1QAYoIQITJdfmLTegrwo1ECAFQjV3A + 6CX3/v//deCNXczoGvf+/4t9EDPbOV20D4ZqAQAA/3WYjUXsUP913I1NuI1d2I1FpOhn+v7/hMAPhEgB + AACLReyJReSNRdyNXczo8f3+/4vD6E3+/v+LRbiD+AyLdcwPh4kAAAB0doXAD4bnAAAAg/gDdj6D+AR0 + JYP4B3Q0g/gLD4XPAAAAi0XwiXck/3AEi8//MOj+dv//6bgAAACLRfCJdySLAIvP6KR3///ppAAAADPJ + g/gDi0XYD5TBiYV4////jYV0////UIl3JGaJjXb///+Lz+jYi///63mLRfCJdySLAIvP6LF3///raIPo + DXRPSHQ5SHQYSHVai0XwiXckgzgAi88Pl8DoDXf//+tFi0Xw3QCNhSj////dnTT///9Qi8+JdyToqXf/ + /+sni0Xw3QCNhQT////dnRD////r4ItF8FGJdyTdAFGLz90cJOiCdv//i0Xg/3WYiUXsi0WciUXYjUXs + UP913I1NuI1d2I1FpOix+P7/hMAPhbz+//8z2+sFM9uLdcw5XbwPhqgAAABTU1ONRehQ/3XcjUWk6MT5 + /v+EwA+EjgAAAItF6IlF5I1F3I1dzOiB/P7/i8Po3fz+/421TP///+gLi///i3XMjYVM////UIvPiXck + 6KWK////dQyNXcDodfT+/2iE9gIQi8Poofv+//913IvD6Jf7/v+NhUz///9Q/3XA/3UI6On8//+LReCJ + RegzwFBQUI1F6FD/ddyNRaTo2vj+/4TAD4V0////M9s5XcB0Cf91wOjXu/3/WTvzdAdW6My7/f9ZOV3c + dAn/ddzovrv9/1mNjUz////o5or//421dP///+iqk///OV2kdA44Xah0Cf91pP8VKLACEItN9F9eZIkN + AAAAAFvJwgwAuDWWAhDozS4AAIPsZINl/ACDDVBQAxD/U1aL2YtDCleNcyaNfZCJZfCJRezopJb//4tD + asZFwE+JReCNRcBQxkX8Av91tP917OgW/P//agszyVpB6F2z/f+NTcDoVor//4v36B6T//+LTfRfXmSJ + DQAAAABbycOLTejolu///7gpZAIQw7htlgIQ6EguAACB7AwBAABTVjPbiV38i0EKgw1QUAMQ/1eNcSaN + vej+//+JZfCJTcCJRZToF5b//4tFwItAasZFmE+JRbiJXcjGRcwBxoVk////Q4mdaP///4ldjIldgIld + iIhdkIld5Ild6Ild7Nnui0WUU8ZF/AXdnUj///9qAf+1DP///411yMaFGP///0TGhTz///9U6AP5/v9T + U41F4FCNRcRQU1NTjV3cM8kz9o1FyOjr9/7/M9s5XcR1SmoLWjPJ6Gey/f+NtWT////oLJL//zldyHQO + OF3MdAn/dcj/FSiwAhCNTZjoQon//4216P7//+gGkv//i030X15kiQ0AAAAAW8nDi33gjbVk////6Ch/ + ////ddyLdYiNXeTo4vL+/4tF6P91iIlF3I1F3FD/deSNTdiNXeCNRcjoN/b+/zPbOsMPhEMBAACNReTo + K/r+/4tF2IP4DA+HmQAAAA+EgQAAADvDD4b4AAAAg/gDdkOD+AR0JoP4B3Q2g/gLD4XgAAAAi0XkiUW8 + /3YEjU2Y/zbo2nL//+nIAAAAi0XkiUW8iwaNTZjof3P//+mzAAAAg/gDD5TAM8k6w4tF4A+VwYmFaP// + /4tF5IlFvI2FZP///1BmiY1m////jU2Y6KqH///rf4tF5IlFvIsGjU2Y6IJz///rbYPoDXRTSHQ6SHQY + SHVfi0XkiUW8OR6NTZgPl8Do3nL//+tKi0Xk3QaJRbzdnUj///+NhTz///9QjU2Y6Hlz///rK4tF5N0G + iUW83Z0k////jYUY////69+LReRRiUW83QZRjU2Y3Rwk6E5y//+LRej/dYiJRdyLRYyJReCNRdxQ/3Xk + jU3YjV3gjUXI6H30/v/ps/7//4tNxGoLWuiVsP3/OV3kD4Ql/v///3Xk6FG4/f9Z6Rf+//+LjWD////o + 0uz//7hBZQIQw7irlgIQ6IQrAACB7FgBAABTVlcz24ld/IMNUFADEP+NcQKwAY29eP///4ll8IlN5Ohh + cP//i0XkxkX8AYtILo1wSo29nP7//4lNwOg8k///i0XkZoM4BHUFi0h26wIzyYldxMZFyAHGhRj///9D + iZ0c////iZ1A////iZ00////iZ08////iJ1E////xoVI////Q4mdTP///4mdcP///4mdZP///4mdbP// + /4iddP///9nuM/ZG9sEBagJYD5dF7oTIxkX8Bd2d/P7//w+XRe84Xe7Ghcz+//9ExoXw/v//VIlF6Il1 + 5HQKx0XoAwAAAIlF5Dhd73QD/0Xki0XAU1b/tcD+//+NdcTozvX+/1NTjUXgUI1F1FBTU1ONXdwzyTP2 + jUXE6Lb0/v8z2zld1HVYagszyVroMq/9/421SP///+j3jv//jbUY////6OyO//85XcR0DjhdyHQJ/3XE + /xUosAIQjbWc/v//6M6O//+NtXj////o+23//4tN9F9eZIkNAAAAAFvJw4t93I21GP///+jle///OF3v + dA6LfeCNtUj////o0nv//4uFcP///4tN1Iu9bP///4lF4ItF5I2VeP///+iFg///V41F3FD/tTz///+N + TdiNXeCNRcTo1PL+/zPbM/Y6ww+E0QEAAItF3EaNlRj///+NjXj///+JhRz///9miXWBZsdFgwEA6P2B + //84Xe50GItF2I2NeP///2aJdYFmx0WDAgDooWv//zhd7w+ETwEAAItF2IP4DA+HwgAAAA+EngAAADvD + D4Y1AQAAg/gDdlWD+AR0L4P4B3RIg/gLD4UdAQAAZotF6GaJdYFmiUWD/3cEjY14/////zfoomr//+n8 + AAAAZotF6GaJdYFmiUWDiweNjXj////oLGv//+neAAAAg/gDD5TAM8k6w4tF4A+VwYmFTP///2aLReiN + lUj///9miXWBZolFg2aJjUr///+NjXj////oLIH//+mfAAAAZotF6GaJdYFmiUWDiweNjXj////oFWv/ + /+mBAAAAg+gNdF5IdEtIdCFIdXNmi0XoZolFg2aJdYE5H42NeP///w+XwOhxav//61XdB42V8P7//92d + /P7//2aLReiNjXj///9miXWBZolFg+jyav//6y7dB42VzP7//92d2P7//+vXZotF6FFmiXWBZolFg90H + UY2NeP///90cJOjcaf//i4VA/////7Vs////iUXci4Vw////iUXgjUXcUP+1PP///41N2I1d4I1FxOiM + 8P7/M9vpJ/7//w+3TYFqBelq/f//i40U////6Pbo//+4hGgCEMO45pYCEOioJwAAgexAAQAAU1ZXM9uJ + XfyDDVBQAxD/jXECsAGNvQj///+JZfCJTejohWz//4tF6MZF/AGLSC6NcEqNvbT+//+JTcDoYI///4tF + 6GaDOAR1BYtAdusCM8CJXczGRdABxkWEQ4ldiIldrIldoIldqIhdsMaFVP///0OJnVj///+JnXz///+J + nXD///+JnXj///+IXYDZ7qgBagIPl0XvWYTBxkX8Bd2d8P7//w+XRe44Xe/GheT+//9Ux0XoAQAAAHQD + iU3oOF3udBD/RegzwDhd7w+VwAPBiUW8i0XAU2oI/7XY/v//jXXM6Ary/v9TU1NTjUXcUFNTM9uNTciN + dcSNRczo9PD+/zld3HVVagszyVrocqv9/421VP///+g3i///jXWE6C+L//85Xcx0Djhd0HQJ/3XM/xUo + sAIQjbW0/v//6BGL//+NtQj////oPmr//4tN9F9eZIkNAAAAAFvJw4t9xI11hOgreP//i33IjbVU//// + 6B14//+LRayLTdyJReCLhXz///+JReSLReiNlQj////o0H///41FtFCNReRQ/7V4////jUXgUP91qI1F + zOjo7/7/M/86ww+EtwAAAItF4IlFiItF5EeNVYSNjQj///+JhVj///9mib0R////ZseFE////wEA6D1+ + //84Xe90IY2VVP///42NCP///2aJvRH///9mx4UT////AgDoF37//zhd7nQtjUW0jbXk/v//6Cdv//9m + i0W8i9aNjQj///9mib0R////ZomFE////+gfaP//i0WsiUXgi4V8////iUXkjUW0UI1F5FD/tXj///+N + ReBQ/3WojUXM6M7u/v/pQf///w+3jRH///9qBemK/v//i41Q////6Fbm//+4QWwCEMO4FpcCEOgIJQAA + gezEAAAAg2X8AIMNUFADEP9TVleL+YtHColl8GoCiUXkM9tYjXWQ6D2L//9qA1iLz421MP///8ZF/AHo + w4v//2oEW4vDi8+NtWD////GRfwC6K2L//+DZcQAxkXIAYhd/GaDPwV8D4uHmgAAAIXAdAWJRezrU4pH + JjxDdQnHRewBAAAA60M8SXUJx0XsDAAAAOs2PE51CcdF7A0AAADrKTxEdQnHRewOAAAA6xw8VHUJx0Xs + DwAAAOsPPEwPhV0BAADHRewQAAAAikcmPEN1KjPAQDlF7HQMg33sB3QGg33sAnULjXWQ6Ktz////RZSL + fbSLXZTpowAAADxOdTuLRew7w3UK3Ucy6FcgAADrOIP4C3UK3Ucy6EggAADrOoP4DXRmg/gMdW/dRzKN + dy7oMSAAAIkGi/7rZDxJdUSLRew7w3ULi0cuiUXojX3o606D+At1EotHLpmJRdyJVeCNfdxqCFvrN4P4 + DHUFg8cu6y2D+A11IttHLo1HMov43Rjr4DxEdAQ8VHUFg8cy69M8THV8g8cq6waLfeSLXeSLReRqAGoC + /3WEjXXE6Kfu/v//deyLxlNX/7VU////6Avr/v9qCzPJWkHoG6j9/4N9xAB0D4B9yAB0Cf91xP8VKLAC + EI21YP///+jLh///jbUw////6MCH//+NdZDouIf//4tN9F9eZIkNAAAAAFvJw8dF2IUDAABoOP0CEI1F + 2OsPx0XUhQMAAGg4/QIQjUXUUOgWIgAAi03A6Ark//+4j28CEMO4RpcCEOi8IgAAgezcAAAAU1ZXi/kz + 24ld/ItHCoMNUFADEP+JZfBqAolF0FiNtUj///+Jfezohon//2oDWIvPjbUY////xkX8Aehyif//xkWc + Q4ldoIldxIlduIldwIhdyIld3MZF4AGLRdBTagHGRfwE/7U8////jXXc6JPt/v+NRdhQ/7Vs////i8ZQ + 6J7q/v+L+I11nIl9oOgUdP//i3XAVv+1bP///zPJjV3UjUXc6Bnq/v+LRdSJRaCLRexmgzgEdQeLQHaF + wHUDi0XYg/gEdQmLBuhPd///63NqC1o7wnUM/3YE/zbogHb//+tgg/gMdQmLDuiopv3/61KD+A11Dt0G + UVHdHCToBHf//+s/g/gOdRnGhXj///9E3QaNjXj////dXYTobab9/+shg/gPdQnGhXj///9U6+CD+BB1 + DoM+AA+XwA+2yOjBpv3/g33cAHQPgH3gAHQJ/3Xc/xUosAIQjXWc6AeG//+NtRj////o/IX//421SP// + /+jxhf//i030X15kiQ0AAAAAW8nDi03M6Gni//+4VnECEMO4YJcCEOgbIQAAg+xMg2X8AIMNUFADEP9T + VovZi0MKV41zJo19qIll8IlF7OjyiP//ZoM7AnUHuz8ADwDrA4tbUjP/iX3YxkXcAYtF7FdTxkX8Av91 + zI112OgV7P7/i03YagtaxkXcAOiXpf3/OX3YdA+AfdwAdAn/ddj/FSiwAhCNdajoS4X//4tN9F9eZIkN + AAAAAFvJw4tN6OjD4f//uPxxAhDDuGqXAhDodSAAAIPsPINl/ACDDVBQAxD/U1aL2YtDCleNcyaNfbiJ + ZfCJRejoTIj//2aDOwJ0CoN7UgHGRewAdATGRewB/3Xs/3Xc/3Xo6Obq/v8PtsjocKX9/411uOjLhP// + i030X15kiQ0AAAAAW8nDi03s6EPh//+4fHICEMO4j5cCEOj1HwAAgeyAAAAAg2X8AIMNUFADEP9TVovZ + i0MKV41zJo29dP///4ll8IlF6OjGh///xkX8AWaLA2Y9AwB9CcdF7D8ADwDrBotLUolN7GY9BAB9BDP/ + 6wOLe3ZqBViLy411pOiNhv//g2XUAMZF2AH/dezGRfwDV/91yI111P91mP916Ogq6/7/i03UagtaxkXY + AOhBpP3/g33UAHQPgH3YAHQJ/3XU/xUosAIQjXWk6PSD//+NtXT////o6YP//4tN9F9eZIkNAAAAAFvJ + w4tN5Ohh4P//uF5zAhDDaNz1AhD/FWCwAhCFwHQUaND1AhBQ/xXQsAIQoyBDBRCwAcNXagBqAf8VWLAC + EGj80QIQi/jo7OD//zLAX8O495cCEOjVHgAAgewAAQAAg2X8AFNWV4vZjXMCsAGNfYSJZfDovmP//41z + Jo29JP///8ZF/AHooob//41zSo29VP///8ZF/ALokIb//2oYX4219P7//8ZF/APo9IP//2oAagDGRfwE + ix2UswIQagb/tXj/////tUj/////04P4/4lF7HVEgz1IYAMQAWoAagB1EWhQzwIQaNTzAhDouN///+sS + /xVYsAIQaNTzAhCL+Ogz4P//x0XUTmG8AGg4/QIQjUXU6XMBAACFwHVCagtaM8no56L9/4219P7//+is + gv//jbVU////6KGC//+NtST////oloL//411hOjGYf//i030X15kiQ0AAAAAW8nDjTwAjXXY6FLi/v+L + ReyNPEDB5wONdeDGRfwF6D3i/v/GRfwGM/ZW/3XYagb/tXj/////tUj/////04P4/w+ErQAAAFb/deBq + DP+1eP////+1SP/////Tg/j/D4SQAAAAi03sagJYjVWE6CN3//+LReCLfdiJRehGO3Xsd0D/deiNnfT+ + //9miXWNZsdFjwEA6KJ///+L0I1NhOi0df//Zol1jWbHRY8CAA+3B41NhOimX///g0XoGEdHRuu7D7dN + jWoFWujmof3/g33gAHQJ/3Xg6KWp/f9Zg33YAA+E5v7///912OiSqf3/WenY/v//gz1IYAMQAVZWdRFo + UM8CEGjU8wIQ6EDe///rEv8VWLACEGjU8wIQi/jou97//8dF0E5hvABoOP0CEI1F0FDo3xsAAItNzOjT + 3f//uLl0AhDDuC+YAhDohRwAAIHs1AAAAINl/ACDDVBQAxD/gz0gQwUQAFNWV4ll8IvZdRTHRdDyAgAA + aDj9AhCNRdDpXAEAAI1zArABjX2E6Eph//9qAliLy421IP///8ZF/AHoKYP//78ACAAAjbVQ////xkX8 + AuiOgf//g03s/zPbU41F7FDGRfwE/7VE////6Jyj/f+FwHUoU1P/FViwAhBohPQCEIv46PHd///HRdRO + YbwAaDj9AhCNRdTp4QAAAI1F6FCNReRQU1NqAf917P8VIEMFEDvDdS3/FViwAhCD+Hp0IlNTaOjzAhCL + +Oir3f//x0XYTmG8AGg4/QIQjUXY6ZsAAAA5Xeh1RWoLWjPJ6F6g/f+Dfez/dAj/dezoB6P9/421UP// + /+gVgP//jbUg////6AqA//+NdYToOl///4tN9F9eZIkNAAAAAFvJw4t95I113OjG3/7/jUXoUI1F5FDG + RfwF/3XkM///ddxHV/917P8VIEMFEDvDdSlTU/8VWLACEGjo8wIQi/joC93//8dFzE5hvABoOP0CEI1F + zFDoLxoAAItN6GoIWI1VhOigdP//i3XcO33oD4e/AAAAZol9jWbHRY8BAIsGjU2E6ANd//9miX2NZsdF + jwIA/3YEjZ1Q////6A59//+L0I1NhOggc///Zol9jWbHRY8DAItGCI1NhOgSXf//Zol9jWbHRY8EAItG + DI1NhOj9XP//Zol9jWbHRY8FAItGHI1NhOjoXP//Zol9jWbHRY8GAItGFI1NhOjTXP//Zol9jWbHRY8H + AItGEI1NhOi+XP//Zol9jWbHRY8IAItGGI1NhOipXP//g8YgRzPb6Tj///8Pt02NagVa6Oee/f85XdwP + hID+////ddzoo6b9/1npcv7//4tNgOgn2///uEV3AhDDuHWYAhDo2RkAAIHsKAEAAINl/ACDDVBQAxD/ + U1ZXi9mNcwKwAY29dP///4ll8Oi4Xv//jXMmjb3M/v//xkX8Aeicgf//vwAIAACNtTj////GRfwC6P5+ + ///Z7jP/3Z0M////xoUA////VIl94MZFvE+JfdyDTeT/xkX8BWaLA2Y9AwB8BYtzUusDM/ZGZj0EAIl1 + 7HwFi1t26wMz20OD/gF0H4P+AnQax4Uo////hQMAAGg4/QIQjYUo////6XMBAACD+wF0H4P7AnQax4Uk + ////hQMAAGg4/QIQjYUk////6U8BAABXjUXkUP+18P7//+iJoP3/hcB1LldX/xVYsAIQaIT0AhCL+Oje + 2v//x4Uw////TmG8AGg4/QIQjYUw////6Q0BAACNRehQjYVw////UFdXVmr/V/915OgyoP3/hcB1M/8V + WLACEIP4enQoV1doePQCEIv46I7a///HhTT///9OYbwAaDj9AhCNhTT////pvQAAAIu9cP///4X/dVBq + C1ozyeg2nf3/g33k/3QI/3Xk6N+f/f+NTbzoIXT//421OP///+jlfP//jbXM/v//6Np8//+NtXT////o + B1z//4tN9F9eZIkNAAAAAFvJw421aP///+iT3P7/jUXoUI2FcP///1DGRfwG/7Vw////M/b/tWj///// + dexq/1b/deToa5/9/4XAdS9WVv8VWLACEGh49AIQi/jozNn//8eFLP///05hvABoOP0CEI2FLP///1Do + 6hYAAIu9aP///4tN6DP2Rjl17I2VdP///w+FQwMAADveD4XhAQAAag1Y6D5x//87degPhxkIAABmibV9 + ////ZseFf////wEA/3cQjZ04////6L15//+L0I2NdP///+jMb///Zom1ff///2bHhX////8CAP93BOiY + ef//i9CNjXT////op2///2aJtX3///9mx4V/////AwD/dwzoc3n//4vQjY10////6IJv//9mibV9//// + ZseFf////wQA/3cI6E55//+L0I2NdP///+hdb///Zom1ff///2bHhX////8FAP93FOgpef//i9CNjXT/ + ///oOG///2aJtX3///9mx4V/////BgD/dxjoBHn//4vQjY10////6BNv//9mibV9////ZseFf////wcA + iweNjXT////ot1j//2aJtX3///9mx4V/////CACLRxyNjXT////omVj//2aJtX3///9mx4V/////CQCL + RyCNjXT////oe1j//2aJtX3///9mx4V/////CgCLRySNjXT////oXVj//2aJtX3///9mx4V/////CwCL + RyiNjXT////oP1j//2aJtX3///9mx4V/////DACLRyyNjXT////oIVj//42FAP///41PMFDo51///2aJ + tX3///9mx4V/////DQCNlQD///+NjXT////oalj//4PHQEbpJ/7//4vG6F5v//+JdeyLRew7RegPhzMG + AACNdbzo7nD//8dF4Gz0AhD/dxCNnTj////o2Hf//1CLzuiocP//x0XghPUCEP93BOjBd///UIvO6JFw + ///HReBg9AIQ/3cM6Kp3//9Qi87oenD//8dF4FT0AhD/dwjok3f//1CLzuhjcP//x0XgMPUCEP93FOh8 + d///UIvO6Exw///HReBM9AIQ/3cY6GV3//9Qi87oNXD//8dF4ET0AhCLB4vO6MNb///HReDc9AIQi0cc + i87oslv//8dF4Az1AhCLRyCLzuihW///x0XgOPQCEItHJIvO6JBb///HReAs9AIQi0coi87of1v//8dF + 4Bz0AhCLRyyLzuhuW///jYUA////jU8wUOibXv//jYUA////UIvOx0XgEPQCEOjPW///ZotF7IvWjY10 + ////ZomFff///+gSV///g8dA/0Xs6bD+//873g+F7QIAAGoVWOj7bf//O3XoD4fWBAAAZom1ff///2bH + hX////8BAP93EI2dOP///+h6dv//i9CNjXT////oiWz//2aJtX3///9mx4V/////AgD/dwToVXb//4vQ + jY10////6GRs//9mibV9////ZseFf////wMA/3cM6DB2//+L0I2NdP///+g/bP//Zom1ff///2bHhX// + //8EAP93COgLdv//i9CNjXT////oGmz//2aJtX3///9mx4V/////BQD/dxjo5nX//4vQjY10////6PVr + //9mibV9////ZseFf////wYA/3cs6MF1//+L0I2NdP///+jQa///Zom1ff///2bHhX////8HAIsHjY10 + ////6HRV//9mibV9////ZseFf////wgAi0c0jY10////6FZV//9mibV9////ZseFf////wkAi0c4jY10 + ////6DhV//9mibV9////ZseFf////woAi0c8jY10////6BpV//9mibV9////ZseFf////wsAi0dIjY10 + ////6PxU//9mibV9////ZseFf////wwAi0dkjY10////6N5U//+NhQD///+NT1BQ6KRc//9mibV9//// + ZseFf////w0AjZUA////jY10////6CdV//9mibV9////ZseFf////w4A/3cU6Ll0//+L0I2NdP///+jI + av//Zom1ff///2bHhX////8PAP93HOiUdP//i9CNjXT////oo2r//2aJtX3///9mx4V/////EAD/dyDo + b3T//4vQjY10////6H5q//9mibV9////ZseFf////xEA/3ck6Ep0//+L0I2NdP///+hZav//Zom1ff// + /2bHhX////8SAItHYI2NdP///+j8U///Zom1ff///2bHhX////8TAItHQI2NdP///+jeU///Zom1ff// + /2bHhX////8UAItHRI2NdP///+jAU///Zom1ff///2bHhX////8VAItHTI2NdP///+iiU///g8doRukb + /f//i8boD2v//4l17ItF7DtF6A+H5AEAAI11vOifbP//x0XgbPQCEP93EI2dOP///+iJc///UIvO6Fls + ///HReCE9QIQ/3cE6HJz//9Qi87oQmz//8dF4GD0AhD/dwzoW3P//1CLzugrbP//x0XgVPQCEP93COhE + c///UIvO6BRs///HReAw9QIQ/3cY6C1z//9Qi87o/Wv//8dF4Ez0AhD/dyzoFnP//1CLzujma///x0Xg + RPQCEIsHi87odFf//8dF4Nz0AhCLRzSLzuhjV///x0XgDPUCEItHOIvO6FJX///HReA49AIQi0c8i87o + QVf//8dF4Cz0AhCLR0iLzugwV///x0XgHPQCEItHZIvO6B9X//+NhQD///+NT1BQ6Exa//+NhQD///9Q + i87HReAQ9AIQ6IBX///HReAE9AIQ/3cU6HZy//9Qi87oRmv//8dF4Dz1AhD/dxzoX3L//1CLzugva/// + x0XgJPUCEP93IOhIcv//UIvO6Bhr///HReBg9QIQ/3ck6DFy//9Qi87oAWv//8dF4PzzAhCLR2CLzuiO + Vv//x0Xg8PQCEItHQIvO6H1W///HReDk9AIQi0dEi87obFb//8dF4PTzAhCLR0yLzuhbVv//ZotF7IvW + jY10////ZomFff///+gjUv//g8do/0Xs6RD+//8Pt419////agVa6CuU/f+DvWj///8AD4To9v///7Vo + ////6OCb/f9Z6df2//+Ljfz+///oYdD//7h4egIQw7iwmAIQ6BMPAACB7BABAACDZfwAgw1QUAMQ/1NW + V4vZjXMCsAGNvXD///+JZfDo8lP//2oCWIvLjbXk/v//xkX8AejRdf//vwAEAACNtTj////GRfwC6DZ0 + //+DZeQAg2XgAMZFwE+/AEAAAI11uMZF/AToMtP+/8ZF/AVmiwtmg/kDfA+LQ1KFwHQIagKJRexe6wZq + Al6Jdexmg/kEfAmLQ3aFwIvQdQKL1maD+QWJlWj///98CouDmgAAAIXAdQMzwECKWyaA+zCJhWz///90 + H4D7Q3Qax4Ug////hQMAAGg4/QIQjYUg////6V0BAAAzyUE5DUhgAxB1JzvRdHc71nRzg/oFdG7HhSz/ + //+FAwAAaDj9AhCNhSz////pKwEAADvRdCg71nQkg/oEdCSD+gV0GseFKP///4UDAABoOP0CEI2FKP// + /+n/AAAAg/oEdSP3Rez5////dhrHhTD///+FAwAAaDj9AhCNhTD////p1wAAADvBdB47xnQax4UY//// + hQMAAGg4/QIQjYUY////6bUAAACNRehQjYU0////UP91vP91uFL/tQj/////dezoBpX9/4XAD4WTAAAA + /xVYsAIQg/h6dV2LvTT///+NdbjoitH+/41F6FCNhTT///9Q/3W8/3W4/7Vo/////7UI/////3Xs6MCU + /f+FwHVRUFBowPUCEGp6X+gUz///x4Uc////TmG8AGg4/QIQjYUc////6yVqAGoAaMD1AhCL+Ojtzv// + x4Uk////TmG8AGg4/QIQjYUk////UOgLDAAAi03ohcl1T2oLWuiZkf3/g324AHQJ/3W46FiZ/f9ZjU3A + 6INo//+NtTj////oR3H//4215P7//+g8cf//jbVw////6GlQ//+LTfRfXmSJDQAAAABbycOLhWj///9I + D4RCBwAASA+EsgIAAEhID4SJAQAASA+FjAgAAIt9uDP2Rjm1bP///42VcP///w+FwwAAAGoFWOjxZf// + O3XoD4djCAAAZom1ef///2bHhXv///8BAP83jZ04////6HFu//+L0I2NcP///+iAZP//Zom1ef///2bH + hXv///8CAP93BOhMbv//i9CNjXD////oW2T//2aJtXn///9mx4V7////AwCLRwiNjXD////oRE7//2aJ + tXn///9mx4V7////BACLRwyNjXD////oJk7//2aJtXn///9mx4V7////BQCLRxCNjXD////oCE7//4PH + FEbpRf///4vG6C9l//+JdeyLRew7RegPh5sHAACNdcDov2b//8dF5IT1AhD/N42dOP///+iqbf//UIvO + 6Hpm///HReRs9QIQ/3cE6JNt//9Qi87oY2b//8dF5Bj1AhCLRwiLzug8Uv//x0XkrPQCEItHDIvO6CtS + ///HReSQ9AIQi0cQi87oGlL//2aLReyL1o2NcP///2aJhXn////olk3//4PHFP9F7Olj////i324M9tD + OZ1s////jZVw////D4WHAAAAagNY6G9k//+L8zt16A+H3wYAAGaJnXv///9mibV5/////zeNnTj////o + 72z//4vQjY1w////6P5i//9mibV5////ZseFe////wIA/3cE6Mps//+L0I2NcP///+jZYv//Zom1ef// + /2bHhXv///8DAItHCI2NcP///+jCTP//g8cMM9tGQ+uDi8Po6WP//4ld7ItF7DtF6A+HVQYAAI11wOh5 + Zf//x0XkhPUCEP83jZ04////6GRs//9Qi87oNGX//8dF5JD1AhD/dwToTWz//1CLzugdZf//x0XkGPUC + EItHCIvO6PZQ//9mi0Xsi9aNjXD///9miYV5////6HJM//+Dxwz/RezriIt9uDP2Rjm1bP///42VcP// + /w+FpgIAAGoTWOhOY///O3XoD4fABQAAZom1ef///2bHhXv///8BAP83jZ04////6M5r//+L0I2NcP// + /+jdYf//Zom1ef///2bHhXv///8CAP93BOipa///i9CNjXD////ouGH//2aJtXn///9mx4V7////AwD/ + dwjohGv//4vQjY1w////6JNh//9mibV5////ZseFe////wQA/3cM6F9r//+L0I2NcP///+huYf//Zom1 + ef///2bHhXv///8FAP93EOg6a///i9CNjXD////oSWH//2aJtXn///9mx4V7////BgD/dxToFWv//4vQ + jY1w////6CRh//9mibV5////ZseFe////wcA/3cY6PBq//+L0I2NcP///+j/YP//Zom1ef///2bHhXv/ + //8IAP93IOjLav//i9CNjXD////o2mD//2aJtXn///9mx4V7////CQD/dyTopmr//4vQjY1w////6LVg + //9mibV5////ZseFe////woA/3co6IFq//+L0I2NcP///+iQYP//Zom1ef///2bHhXv///8LAP93LOhc + av//i9CNjXD////oa2D//2aJtXn///9mx4V7////DACLRzSNjXD////oVEr//2aJtXn///9mx4V7//// + DQCLRziNjXD////oNkr//2aJtXn///9mx4V7////DgCLRzyNjXD////oGEr//2aJtXn///9mx4V7//// + DwCLR0CNjXD////o+kn//2aJtXn///9mx4V7////EACLR0SNjXD////o3En//2aJtXn///9mx4V7//// + EQCLR0iNjXD////ovkn//2aJtXn///9mx4V7////EgCLR0yNjXD////ooEn//2aJtXn///9mx4V7//// + EwCLR1CNjXD////ogkn//4PHVEbpYv3//4vG6Klg//+JdeyLRew7RegPhxUDAACNdcDoOWL//8dF5JD1 + AhD/N42dOP///+gkaf//UIvO6PRh///HReSE9QIQ/3cE6A1p//9Qi87o3WH//8dF5Hj1AhD/dwjo9mj/ + /1CLzujGYf//x0XkbPUCEP93DOjfaP//UIvO6K9h///HReRg9QIQ/3cQ6Mho//9Qi87omGH//8dF5Jz1 + AhD/dxTosWj//1CLzuiBYf//x0XkVPUCEP93GOiaaP//UIvO6Gph///HReRM9QIQ/3cg6INo//9Qi87o + U2H//8dF5Dz1AhD/dyTobGj//1CLzug8Yf//x0XkMPUCEP93KOhVaP//UIvO6CVh///HReQk9QIQ/3cs + 6D5o//9Qi87oDmH//8dF5Bj1AhCLRzSLzujnTP//x0XkDPUCEItHOIvO6NZM///HReT89AIQi0c8i87o + xUz//8dF5PD0AhCLR0CLzui0TP//x0Xk5PQCEItHRIvO6KNM///HReTc9AIQi0dIi87okkz//8dF5NT0 + AhCLR0yLzuiBTP//x0XkyPQCEItHUIvO6HBM//9mi0Xsi9aNjXD///9miYV5////6OxH//+Dx1T/Rezp + P/7//4t9uDP2Rjm1bP///42VcP///w+FrAAAAGoEWOjFXv//O3XoD4c3AQAAZom1ef///2bHhXv///8B + AIsHjY1w////6GhH//9mibV5////ZseFe////wIA/3cEjZ04////6Cdn//+L0I2NcP///+g2Xf//Zom1 + ef///2bHhXv///8DAP93COgCZ///i9CNjXD////oEV3//2aJtXn///9mx4V7////BAD/dwzo3Wb//4vQ + jY1w////6Oxc//+DxxBG6Vz///+LxugaXv//iXXsi0XsO0XoD4eGAAAAjXXA6Kpf///HReS49QIQiweL + zuhbS///x0XkrPUCEP93BI2dOP///+iEZv//UIvO6FRf///HReSk9QIQ/3cI6G1m//9Qi87oPV///8dF + 5Jz1AhD/dwzoVmb//1CLzugmX///ZotF7IvWjY1w////ZomFef///+iMRv//g8cQ/0Xs6W7///8Pt415 + ////agXp9vb//4uNFP///+jpxP//uBaGAhDDzFWL7IPsIIPk8NnA2VQkGN98JBDfbCQQi1QkGItEJBCF + wHQ83umF0nke2RwkiwwkgfEAAACAgcH///9/g9AAi1QkFIPSAOss2RwkiwwkgcH///9/g9gAi1QkFIPa + AOsUi1QkFPfC////f3W42VwkGNlcJBjJw8zMzMzMzMyLRCQIi0wkEAvIi0wkDHUJi0QkBPfhwhAAU/fh + i9iLRCQI92QkFAPYi0QkCPfhA9NbwhAAzMzMzMzMzMzMzMzMVotEJBQLwHUoi0wkEItEJAwz0vfxi9iL + RCQI9/GL8IvD92QkEIvIi8b3ZCQQA9HrR4vIi1wkEItUJAyLRCQI0enR29Hq0dgLyXX09/OL8PdkJBSL + yItEJBD35gPRcg47VCQMdwhyDztEJAh2CU4rRCQQG1QkFDPbK0QkCBtUJAz32vfYg9oAi8qL04vZi8iL + xl7CEADMzMzMzMzMzMzMzFdWVTP/M+2LRCQUC8B9FUdFi1QkEPfY99qD2ACJRCQUiVQkEItEJBwLwH0U + R4tUJBj32Pfag9gAiUQkHIlUJBgLwHUoi0wkGItEJBQz0vfxi9iLRCQQ9/GL8IvD92QkGIvIi8b3ZCQY + A9HrR4vYi0wkGItUJBSLRCQQ0evR2dHq0dgL23X09/GL8PdkJByLyItEJBj35gPRcg47VCQUdwhyDztE + JBB2CU4rRCQYG1QkHDPbK0QkEBtUJBRNeQf32vfYg9oAi8qL04vZi8iLxk91B/fa99iD2gBdXl/CEADM + V1ZTM/+LRCQUC8B9FEeLVCQQ99j32oPYAIlEJBSJVCQQi0QkHAvAfRRHi1QkGPfY99qD2ACJRCQciVQk + GAvAdRiLTCQYi0QkFDPS9/GL2ItEJBD38YvT60GL2ItMJBiLVCQUi0QkENHr0dnR6tHYC9t19Pfxi/D3 + ZCQci8iLRCQY9+YD0XIOO1QkFHcIcgc7RCQQdgFOM9KLxk91B/fa99iD2gBbXl/CEAD/JTSyAhBTVzP/ + i0QkEAvAfRRHi1QkDPfY99qD2ACJRCQQiVQkDItEJBgLwH0Ti1QkFPfY99qD2ACJRCQYiVQkFAvAdRuL + TCQUi0QkEDPS9/GLRCQM9/GLwjPST3lO61OL2ItMJBSLVCQQi0QkDNHr0dnR6tHYC9t19Pfxi8j3ZCQY + kfdkJBQD0XIOO1QkEHcIcg47RCQMdggrRCQUG1QkGCtEJAwbVCQQT3kH99r32IPaAF9bwhAA/yU4sgIQ + av9QZKEAAAAAUItEJAxkiSUAAAAAiWwkDI1sJAxQw8zMzMzMzMzMzD0AEAAAcw732APEg8AEhQCUiwBQ + w1GNTCQIgekAEAAALQAQAACFAT0AEAAAc+wryIvEhQGL4YsIi0AEUMO4DP4CEOmL////uFz+AhDpgf// + /7is/gIQ6Xf///+4/P4CEOlt////jUW86bJ9/f+4VP8CEOlb////i0UIg8AE6dXD/v+LRQiDwAzpysP+ + /7iA/wIQ6Tv///+LRQiDwATptcP+/4tFCIPADOmqw/7/uKz/AhDpG////7j8/wIQ6RH///+4TAADEOkH + ////uJwAAxDp/f7//7jsAAMQ6fP+//+4PAEDEOnp/v//uIwBAxDp3/7//7jcAQMQ6dX+//+4LAIDEOnL + /v//jXWc6Xhj//+4hAIDEOm5/v//uNQCAxDpr/7//7gkAwMQ6aX+//+NtVD////pT2P//411gOlHY/// + uIQDAxDpiP7//7jUAwMQ6X7+//+NdYjpK2P//421WP///+kgY///uDQEAxDpYf7//421YP///+lDQv// + jbUw////6QBj//+Ndajp+GL//7icBAMQ6Tn+//+NdaDpHkL//421cP///+nbYv//uPwEAxDpHP7//411 + rOnJYv//uFQFAxDpCv7//411lOnvQf//jbVk////6axi//+4tAUDEOnt/f//jXWQ6dJB//+4DAYDEOnb + /f//jXWQ6cBB//+4ZAYDEOnJ/f//jXWs6XZi//+4vAYDEOm3/f//uAwHAxDprf3//411pOmSQf//jbVM + ////6U9i//+NRYTpRnz9/41FlOk+fP3/uHwHAxDpgP3//421eP///+liQf//jbX0/v//6R9i//+NtcT+ + ///pFGL//421JP///+kJYv//jUXs6ZfC/f+NhVT////peML9/7j8BwMQ6Tf9//+NtSz////p4WH//421 + XP///+nWYf//jXWM6c5h//+NRezpXML9/41FvOlAwv3/uHQIAxDp//z//421LP///+mpYf//jbVc//// + 6Z5h//+NdYzplmH//41F7Okkwv3/jUW86QjC/f+47AgDEOnH/P//jUW86fbB/f+NReDpPMH+/7gYCQMQ + 6a38//+NRaTpWXv9/421dP///+lPYf//jY1M////6XVY//+NRdzp68L+/41FzOnjwv7/jUXA6dvC/v+4 + ZAkDEOlt/P//jXWQ6Rph//+NTcDpQ1j//7jECQMQ6VP8//+Ntej+///p/WD//41NmOkmWP//jUXI6ex6 + /f+NtWT////p4mD//41F5OmJwv7/uDwKAxDpG/z//421eP///+n9P///jbWc/v//6bpg//+NRcTpsXr9 + /421GP///+mnYP//jbVI////6Zxg//+4tAoDEOnd+///jbUI////6b8///+NtbT+///pfGD//41FzOlz + ev3/jXWE6Wxg//+NtVT////pYWD//7gsCwMQ6aL7//+NdZDpT2D//421MP///+lEYP//jbVg////6Tlg + //+NRcTpMHr9/7icCwMQ6XL7//+NtUj////pHGD//421GP///+kRYP//jXWc6Qlg//+NRdzpAHr9/7gM + DAMQ6UL7//+Ndajp71///41F2Onmef3/uGwMAxDpKPv//7i8DAMQ6R77//+NtXT////pyF///411pOnA + X///jUXU6bd5/f+4JA0DEOn5+v//jXWM6d4+//+NtVj////pm1///41F3Oljv/7/uIwNAxDp1Pr//411 + hOm5Pv//jbUk////6XZf//+NtVT////pa1///4219P7//+lgX///jUXY6Si//v+NReDpIL/+/7gMDgMQ + 6ZH6//+NdYTpdj7//421IP///+kzX///jbVQ////6Shf//+NRezpEXn9/41F3Onovv7/uIQOAxDpWfr/ + /421dP///+k7Pv//jbXM/v//6fhe//+NtTj////p7V7//41NvOkWVv//jUXk6c54/f+NhWj////por7+ + /7gEDwMQ6RP6//+NtXD////p9T3//4215P7//+myXv//jbU4////6ade//+NTcDp0FX//41FuOlnvv7/ + uHwPAxDp2Pn//421JP///+m6Pf//jXWU6Xpe//+43A8DEOm7+f//jbUk////6Z09//+NdZTpXV7//7g8 + EAMQ6Z75//+NtVj////pgD3//7iUEAMQ6Yn5//+NtVj////paz3//7jsEAMQ6XT5//+NtVj////pVj3/ + /7hEEQMQ6V/5//+NtVT////pQT3//7icEQMQ6Ur5//+NtVj////pLD3//7j0EQMQ6TX5//+NdcDp4l3/ + /7gYEgMQ6SP5//+NdcTp0F3//7g8EgMQ6RH5//+NdcTpvl3//7hgEgMQ6f/4//+4sBIDEOn1+P//jUW8 + 6Tp3/f+NtVz////pl13//411jOmPXf//uOQSAxDp0Pj//421SP///+l6Xf//jYV4////6Z9X//+4RBMD + EOmw+P//jXW86V1d//+4nBMDEOme+P//jbU0////6Uhd//+NtWT////pPV3//41FtOllV///uAQUAxDp + dvj//411iOkjXf//jXW46Rtd//+4ZBQDEOlc+P//jUXA6TlX//+NdZDpAV3//7jEFAMQ6UL4//+NtWz/ + ///p7Fz//42FRP///+kRV///jXWs6dlc//+NRezpHnb9/7g0FQMQ6RL4//+NRcDp71b//411kOm3XP// + uJQVAxDp+Pf//411jOmlXP//uOwVAxDp5vf//421CP///+mQXP//jXWM6Yhc//+NtTj////pfVz//7hU + FgMQ6b73//+NtQz////paFz//421YP///+ldXP//jXWQ6VVc//+4vBYDEOmW9///jXWM6UNc//+4FBcD + EOmE9///jXWQ6TFc//+NtWD////pJlz//7h0FwMQ6Wf3//+NdYzpFFz//7jMFwMQ6VX3//+NdZDpOjv/ + /421LP///+n3W///jbX8/v//6exb//+NtVz////p4Vv//41F5Ompu/7/uEQYAxDpGvf//41FnOn3Vf// + jUXo6c5n/v+4pBgDEOkA9///jUWA6d1V//+NRejptGf+/7gEGQMQ6eb2//+NtXz////pyDr//42FIP// + /+m1Vf//jUXo6Yxn/v+NtUj////pclv//7h0GQMQ6bP2//+NdYTpmDr//42FKP///+mFVf//jYUA//// + 6XpV//+Nhdj+///pb1X//421UP///+k0W///jUXs6Ttn/v+49BkDEOlt9v//uEQaAxDpY/b//411iOlI + Ov//jbX4/v//6QVb//+NtSj////p+lr//42FWP///1DoHLX+/8O4tBoDEOku9v//jbV0////6dha//+N + daTp0Fr//7gUGwMQ6RH2//+NdaTp9jn//7hsGwMQ6f/1//+4vBsDEOn19f//uAwcAxDp6/X//7hcHAMQ + 6eH1//+NdaDpjlr//7i0HAMQ6c/1//+4BB0DEOnF9f//uFQdAxDpu/X//411pOloWv//jUXg6Rlz/f+4 + tB0DEOmh9f//jXWo6U5a//+NReDp/3L9/7gUHgMQ6Yf1//+NRezp7XL9/41F8Onlcv3/uEAeAxDpbfX/ + /42FjP7//+lyc/3/jUXQ6b67/v+NRejptrv+/41F3Omuu/7/uHweAxDpQPX//411hOntWf//jXW06eVZ + //+43B4DEOkm9f//jXW46dNZ//+4NB8DEOkU9f//jXW46cFZ//+4jB8DEOkC9f//jXWM6ec4//+NtUj/ + ///ppFn//41F5OlVcv3/uPQfAxDp3fT//421yP7//+mHWf//jbUo////6XxZ//+NtWj+///pcVn//421 + mP7//+lmWf//jbVY////6VtZ//+Ntfj+///pUFn//7h0IAMQ6ZH0//+NtVD+///pO1n//421gP7//+kw + Wf//jbXw/f//6SVZ//+NtSD+///pGln//4214P7//+lHOP//jbWw/v//6QRZ//+NtSj////p+Vj//411 + tOnxWP//uAQhAxDpMvT//4219P7//+ncWP//jYVU////6QFT//+NtXz////pxlj//421JP///+m7WP// + jUXk6QBy/f+NRezp+HH9/7iEIQMQ6ezz//+NtTz////pllj//421bP///+mLWP//uOQhAxDpzPP//421 + PP///+l2WP//jbVs////6WtY//+4RCIDEOms8///jbVs////6VZY//+4nCIDEOmX8///jbU8////6UFY + //+NtWz////pNlj//7j8IgMQ6Xfz//+NdbTpJFj//7hUIwMQ6WXz//+NdbzpElj//7isIwMQ6VPz//+N + dbzpAFj//7gEJAMQ6UHz//+NdYzp7lf//411vOnmV///uGQkAxDpJ/P//41F4OmNcP3/jUXk6YVw/f+N + RcjplLf+/7iYJAMQ6QXz//+NdYTpslf//421VP///+mnV///jXW06Z9X//+4ACUDEOng8v//jXWI6Y1X + //+NtVj////pglf//411uOl6V///uGglAxDpu/L//411iOloV///jXW46WBX//+4yCUDEOmh8v//jXWE + 6U5X//+NdbTpRlf//7goJgMQ6Yfy//+NtST////pMVf//421VP///+kmV///jXWE6R5X//+NRbzp5rb+ + /41F6OnHb/3/uKAmAxDpT/L//411uOn8Vv//uPgmAxDpPfL//411uOnqVv//uFAnAxDpK/L//421fP// + /+nVVv//jUXs6YZv/f+4sCcDEOkO8v//jbUw////6bhW//+NRcTpaW/9/7gQKAMQ6fHx//+NtVT////p + m1b//41FzOlMb/3/uHAoAxDp1PH//421bP///+m2Nf//jbXg/v//6XNW//+NRdzpJG/9/7jYKAMQ6azx + //+NtUz////pjjX//421+P7//+lLVv//uDgpAxDpjPH//42FjP7//+mRb/3/jUXo6d23/v+4ZCkDEOlv + 8f//jbVY////6VE1//+NtSj////pDlb//41F4Om1t/7/uMwpAxDpR/H//411tOn0Vf//uCQqAxDpNfH/ + /411lOkaNf//jbVI////6ddV//+NRdzpn7X+/41F7OmAbv3/uJQqAxDpCPH//7j0KgMQ6f7w//+4RCsD + EOn08P//jbU8////6Z5V//+NdZzpzjT//421bP///+mLVf//uKwrAxDpzPD//411iOmxNP//jbUQ//// + 6W5V//+NteD+///pY1X//421QP///+lYVf//jUXg6ea1/f+NRdjpGLX+/7gsLAMQ6Ynw//+NtSj////p + M1X//421WP///+koVf//jXWI6SBV//+NRezprrX9/41FuOmStf3/uKQsAxDpUfD//421KP///+n7VP// + jbVY////6fBU//+NdYjp6FT//41F7Ol2tf3/jUW46Vq1/f+4HC0DEOkZ8P//jbUk////6cNU//+NdYTp + u1T//421VP///+mwVP//jUXs6T61/f+NRbTpIrX9/7iULQMQ6eHv//+NtUT////pi1T//421zP7//+m4 + M///jbV0////6XVU//+NtRT////palT//4110OnzL///jUXs6fC0/f+NRaTp1LT9/7gcLgMQ6ZPv//+N + tVj////pdTP//7h0LgMQ6X7v//+NtfD+///pKFT//42FIP///+lNTv//jYV8////6UJO//+NRejp7m39 + /41F7Onmbf3/jUXg6d5t/f+49C4DEOk77///jXWY6SAz//+NtWj////p3VP//421OP///+nSU///uFwv + AxDpE+///411lOn4Mv//jbU0////6bVT//+NtWT////pqlP//7jELwMQ6evu//+NdYTp0DL//7gcMAMQ + 6dnu//+NtQD////pg1P//421tPz//+l4U///jbXQ/v//6W1T//+NtTz////pmjL//41FxOkPMP//jYVo + /f//6aps/f+NRbzpF7P+/41FrOkPs/7/uKwwAxDpgO7//411pOllMv//jbVA////6SJT//+NtXD////p + F1P//7gUMQMQ6Vju//+NdZjpPTL//421aP///+n6Uv//uHQxAxDpO+7//429CP///+nPa/3/jXWw6d1S + //+NdYDp1VL//7jcMQMQ6Rbu//+NvTz////pqmv9/411tOm4Uv//uDwyAxDp+e3//429cP///+mNa/3/ + uJQyAxDp5O3//421dP///+nGMf//uOwyAxDpz+3//411gOm0Mf//jUXo6S1r/f+4TDMDEOm17f//jXWU + 6Zox//+NtWD////pV1L//41F4OkIa/3/uLQzAxDpkO3//421dP///+lyMf//jUXs6etq/f+4FDQDEOlz + 7f//jUXg6dlq/f+NtWD////pFVL//411lOlFMf//uHw0AxDpTu3//429dP///+niav3/uNQ0AxDpOe3/ + /411qOnmUf//jb0M////6cVq/f+4NDUDEOkc7f//jb0k////6flq/f+4jDUDEOkH7f//jb1s////6Ztq + /f+45DUDEOny7P//jb1s////6YZq/f+4PDYDEOnd7P//jbU4////6YdR//+NtWj////pfFH//4216P7/ + /+lxUf//uKQ2AxDpsuz//411gOlfUf//jbVQ////6VRR//+4BDcDEOmV7P//jbVI////6T9R//+NtXj/ + ///pNFH//411qOksUf//uGw3AxDpbez//421fP///+lPMP//uMQ3AxDpWOz//42FgP7//+kyS///jYUk + ////6SdL//+NtUz////pJDD//421zP7//+nhUP//jYX8/v//6QZL//+NdZTpzlD//7hEOAMQ6Q/s//+N + taT+///puVD//42F+P7//+neSv//jbUg////6dsv//+NhWj////pAcz9/411pOmQUP//uLw4AxDp0ev/ + /6EMsAIQo4xeAxDDaBunAhDoRHj9/1nDuEBEBRDo9EH//2gwpwIQ6C54/f9Zw7oARQUQ6GJq/f9oOqcC + EOgYeP3/WcNoFGADEP8VTLECEGhHpwIQ6AF4/f9Zw4A9OEQFEAB0C2ggRAUQ/xWEsAIQw7hARAUQ6eUq + //9WvgBFBRDosLL+/17DuSxgAxDpf3L9/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ5IAwCySAMAHkgDAPxHAwCMSAMAfEgDAGxIAwBYSAMA + RkgDAA5IAwA4SAMAAAAAADhHAwAAAAAATkwDAFpMAwBoTAMAfkwDADRMAwBATAMAzEQDAKw+AwC+PgMA + zj4DAOA+AwD0PgMABD8DABo/AwA4PwMARD8DAFQ/AwByPwMAjD8DAKw/AwDEPwMA0j8DAOI/AwDuPwMA + +j8DAAhAAwAWQAMAKEADAD5AAwBWQAMAbEADAIRAAwCeQAMAtEADAM5AAwDcQAMA8kADAABBAwAaQQMA + LEEDADxBAwBSQQMAYEEDAG5BAwCAQQMAkEEDAJ5BAwCyQQMAvkEDANpBAwDoQQMAAEIDAAxCAwAcQgMA + MkIDAD5CAwBUQgMAaEIDAHxCAwCQQgMAokIDALZCAwDEQgMA2kIDAOZCAwDyQgMAAkMDABBDAwAuQwMA + PEMDAFhDAwBwQwMAiEMDAJZDAwCiQwMAsEMDAL5DAwDKQwMA2kMDAOZDAwD0QwMAFEQDACREAwA0RAMA + PEQDAExEAwBcRAMAdkQDAIhEAwCWRAMApEQDALBEAwAERAMAAAAAAIxLAwCWSwMAhEsDAHpLAwBuSwMA + ZEsDAFxLAwBMSwMAQksDADhLAwAsSwMAIksDABpLAwAKSwMAAEsDAPZKAwDuSgMA5EoDANpKAwDSSgMA + yEoDALhKAwCoSgMAnkoDAK5LAwDGSwMA1EsDAN5LAwDqSwMA+ksDAAxMAwAgTAMApkwDALJMAwDITAMA + AAAAACYAAIAIAACASAAAgDkAAIBKAACAMAAAgB8AAIAYAACASQAAgCsAAIAbAACARwAAgCQAAIAtAACA + IAAAgBQAAIALAACAJwAAgAQAAIASAACADQAAgDEAAIAQAACAPQAAgAAAAAAYAACAAgAAgAkAAIAHAACA + mwEAgJYAAIAXAACABgAAgCEAAIDCAACAwAAAgAgAAIAPAACAIgAAgAAAAAD6SAMA5kgDANBIAwAAAAAA + UD4DAGI+AwAAAAAAQEYDAJhMAwCMTAMA5EQDAPREAwAGRQMAGEUDACxFAwA+RQMAUkUDAGJFAwByRQMA + hkUDAJhFAwCsRQMAvEUDAM5FAwDgRQMA8EUDAABGAwASRgMALkYDAKZGAwBSRgMAZEYDAHJGAwB+RgMA + ikYDABxHAwAURwMACEcDAPJGAwDiRgMAykYDALZGAwCWRgMAAAAAAFpHAwBqRwMAgEcDAJBHAwBORwMA + AAAAAAsAAIAMAACAEwAAgAMAAIAXAACAEAAAgAkAAIBvAACAEgAAgAgAAIAOAACABAAAgHQAAIBzAACA + OQAAgDQAAIAAAAAArkcDANZHAwDCRwMAAAAAAMZJAwCySQMAoEkDAJBJAwDWSQMAbEkDAFpJAwBGSQMA + LkkDAB5JAwAOSgMAQkoDAH5JAwAgSgMA/kkDAFRKAwBmSgMAAAAAAH4+AwAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAABAIAAAAAAMAAAAAAAABGU1FMSW5zdGFsbGVyRXJyb3IAAABvZGJjY3AzMi5kbGwAAAAA + VmVyUXVlcnlWYWx1ZUEAAEdldEZpbGVWZXJzaW9uSW5mb0EAR2V0RmlsZVZlcnNpb25JbmZvU2l6ZUEA + dmVyc2lvbi5kbGwAJXNcb2RiY2NwMzIuYmFkACVzXCVzAAAAAAAAAFRoZSBwcm9ncmFtICVzLCBvciBv + bmUgb2YgaXRzIERMTHMgYXR0ZW1wdGVkIHRvIGNhbGwgdGhlIGZ1bmN0aW9uICVzIHdoaWNoIGlzIG5v + dCBzdXBwb3J0ZWQgaW4gdGhlIGxvYWRlZCBPREJDIGluc3RhbGxlciBETEwgKCVzKS4gIFByZXNzIE9L + IHRvIHByb2NlZWQuAAAAAAAAAABUaGUgT0RCQyBpbnN0YWxsZXIgRExMIChPREJDQ1AzMi5ETEwpIGlz + IG5vdCBpbnN0YWxsZWQgb24gdGhpcyBzeXN0ZW0uAABPREJDIEluc3RhbGxlciBFcnJvcgAAAAAQ/QIQ + qR4AEP/////QIAAQ4SAAEAAAAAD/////LyEAEFMhABAAAAAA/////wAAAACmIQAQAAAAAP/////9IQAQ + ASIAEAAAAAD/////QSIAEEUiABA/LkkuQy5DAEFTZXJ2aWNlU3RhdHVzAABDPy5DLkMAAEFTZXJ2aWNl + cwAAAEMuQy5DLkkuSQAAAFBHX0J5dGVBMlN0cgAAAABQR19TdHIyQnl0ZUEAAAAAPy5MAFJHQjJDb2xv + cnMAAElSUlIAAAAAQ29sb3JzMlJHQgAAR2V0Q3Vyc29yUG9zRXgAAFJSLkwuPwAASW50NjRfQWRkAAAA + SW50NjRfU3ViAAAASW50NjRfTXVsAAAASW50NjRfRGl2AAAASW50NjRfTW9kAAAAVmFsdWUyVmFyaWFu + dAAAAFZhcmlhbnQyVmFsdWUAAABEZWNpbWFscwAAAABOdW0yQmluYXJ5AABBU3VtAAAAAFIuSQBBQXZl + cmFnZQAAAABBTWF4AAAAAEFNaW4AAAAAQVNwbGl0U3RyAAAAQ0NJAEFEaWFsVXBDb25uZWN0aW9ucwAA + Rm9ybWF0TWVzc2FnZUV4AEkuSS5JAAAAQUVycm9yRXgAAAAAQ29udHJvbFNlcnZpY2UAAENvbnRpbnVl + U2VydmljZQA/Lj8uQy5DAFBhdXNlU2VydmljZQAAAAA/Lj8uTC5DLkMAAABTdG9wU2VydmljZQA/Lj8u + Py5DLkMAAABTdGFydFNlcnZpY2UAAAAAQ2xvc2VTZXJ2aWNlSGFuZGxlAABDLkkuQy5DAE9wZW5TZXJ2 + aWNlAENDLkkuSS5JLkkuTC5JAABJY21wUGluZwAAAABJcDJNYWNBZGRyZXNzAAAAUmVzb2x2ZUhvc3RU + b0lwAEFJUEFkZHJlc3NlcwAAAABBYm9ydFVybERvd25sb2FkVG9GaWxlRXgAAAAAQ0MuQy5MLkwAAAAA + VXJsRG93bmxvYWRUb0ZpbGVFeABDQz9DQy5JLkkAAABBc3luY0ludm9rZQBDQy4/LkkAAEludm9rZQAA + UmV2b2tlQWN0aXZlT2JqZWN0AABSZWdpc3Rlck9iamVjdEFzRmlsZU1vbmlrZXIAUmVnaXN0ZXJBY3Rp + dmVPYmplY3QAAAAALkkAAENyZWF0ZUd1aWQAAD8/AABJc0VxdWFsR3VpZABTdHJpbmdGcm9tQ0xTSUQA + Q0xTSURGcm9tU3RyaW5nAFByb2dJREZyb21DTFNJRABDTFNJREZyb21Qcm9nSUQAR2V0SVVua25vd24A + U3luY1RvU05UUFNlcnZlcgAAAABTeW5jVG9TZXJ2ZXJUaW1lAAAAAEMuTABHZXRTZXJ2ZXJUaW1lAAAA + Qy5JLkkuQwBBTmV0U2VydmVycwBDLkMuQy5DAEFOZXRGaWxlcwAAAEFUaW1lWm9uZXMAAFNldFN5c3Rl + bVRpbWVFeAAuTAAAR2V0U3lzdGVtVGltZQAAAFNldFN5c3RlbVRpbWUAAABEb3VibGUyRFQAAABEVDJE + b3VibGUAAABUaW1ldDJEVAAAAABULkwARFQyVGltZXQAAAAAVVRDMkRUAABUAAAARFQyVVRDAABTVDJE + VAAAAERUMlNUAAAARlQyRFQAAABUSS5MAAAAAERUMkZUAAAAQ2FuY2VsUmVnaXN0cnlDaGFuZ2UAAAAA + SUNMSUMAAABGaW5kUmVnaXN0cnlDaGFuZ2UAAENhbmNlbEZpbGVDaGFuZ2UAAAAAQ0xJQwAAAABGaW5k + RmlsZUNoYW5nZQAAQURlc2t0b3BBcmVhAAAAAENlbnRlcldpbmRvd0V4AABHZXRXaW5kb3dSZWN0RXgA + SS5MAEdldFdpbmRvd1RleHRFeABEZXN0cm95Q2FsbGJhY2tGdW5jAENDQy5PLkkAQ3JlYXRlQ2FsbGJh + Y2tGdW5jAABJLkkuTAAAAFVuQmluZEV2ZW50c0V4AABJST9DLj8uSQAAAABCaW5kRXZlbnRzRXgAAAAA + Q0lSLkMuQwBTSEJyb3dzZUZvbGRlcgAAU0hSZW5hbWVGaWxlcwAAAEMuSS5DAAAAU0hEZWxldGVGaWxl + cwAAAENDLkkuQwAAU0hDb3B5RmlsZXMAQ0NJLkMAAABTSE1vdmVGaWxlcwBJUi5MAAAAAFNIU3BlY2lh + bEZvbGRlcgBBRkhhbmRsZXNFeABGSGFuZGxlRXgAAABGVW5sb2NrRmlsZUV4AAAAST8/LkkAAABGTG9j + a0ZpbGVFeABGVW5sb2NrRmlsZQBJPz8ARkxvY2tGaWxlAAAARkZsdXNoRXgAAAAASU4AAEZDaFNpemVF + eAAAAEZFb0ZFeAAASU4uSQAAAABGU2Vla0V4AEkuQy5JAAAARlB1dHNFeABGR2V0c0V4AEZXcml0ZUV4 + AAAAAEZSZWFkRXgARkNsb3NlRXgAAAAARk9wZW5FeABDLkkuSS5JAEZDcmVhdGVFeAAAAERlbGV0ZUZp + bGVFeAAAAABDb21wYXJlRmlsZVRpbWVzAAAAAE1vdmVGaWxlRXgAAENDLkMuSS5JAAAAAENvcHlGaWxl + RXgAAEFEcml2ZUluZm8AAC5JLkMuQy5DLkMuSS5DAABHZXRTYXZlRmlsZU5hbWUALkkuQy5DLkMuQy5J + LkMuQwAAAABHZXRPcGVuRmlsZU5hbWUARXhwYW5kRW52aXJvbm1lbnRTdHJpbmdzAAAAAEdldFN5c3Rl + bURpcmVjdG9yeQAAR2V0V2luZG93c0RpcmVjdG9yeQBEZWxldGVEaXJlY3RvcnkAR2V0U2hvcnRQYXRo + TmFtZQAAAABHZXRMb25nUGF0aE5hbWUAQ1IuUi5SAABHZXRGaWxlT3duZXIAAAAAU2V0RmlsZUF0dHJp + YnV0ZXMAAABHZXRGaWxlQXR0cmlidXRlcwAAAEdldEZpbGVTaXplAFNldEZpbGVUaW1lcwAAAABDPy4/ + Lj8uTAAAAABHZXRGaWxlVGltZXMAAAAAQ0MAAEFEaXJlY3RvcnlJbmZvAABBRmlsZUF0dHJpYnV0ZXNF + eAAAAENDLkwAAAAAQUZpbGVBdHRyaWJ1dGVzAENDLkkuSQAAQURpckV4AABSZWdpc3RyeUhpdmVUb09i + amVjdAAAAABJQ08AUmVnaXN0cnlWYWx1ZXNUb09iamVjdAAAQVJlZ2lzdHJ5VmFsdWVzAENJQy5JAAAA + QVJlZ2lzdHJ5S2V5cwAAAEk/LkMuQy5JAAAAAFdyaXRlUmVnaXN0cnlLZXkAAAAASS5DLkMuSQBSZWFk + UmVnaXN0cnlLZXkAQ2xvc2VSZWdpc3RyeUtleQAAAABPcGVuUmVnaXN0cnlLZXkARGVsZXRlUmVnaXN0 + cnlLZXkAAABJQy5JLkkuQwAAAABDcmVhdGVSZWdpc3RyeUtleQAAAENDQwBBUHJpbnRlclRyYXlzAAAA + QVByaW50ZXJGb3JtcwAAAEFQcmludEpvYnMAAEMuPy5JLkkuSQAAAEFQcmludGVyc0V4AElDLkMuQy5J + LkMuQy5DLkkAAAAAU1FMRXhlY0V4AAAAP0MuPwAAAABTUUxTZXRQcm9wRXgAAAAAP0NSAFNRTEdldFBy + b3BFeAAAAABBU1FMRHJpdmVycwBBU1FMRGF0YVNvdXJjZXMAQ2hhbmdlU1FMRGF0YVNvdXJjZQBEZWxl + dGVTUUxEYXRhU291cmNlAENDLkkAAAAAQ3JlYXRlU1FMRGF0YVNvdXJjZQBBRGlzcGxheURldmljZXMA + Qy5DAEFSZXNvbHV0aW9ucwAAAABDST8/AAAAAEFSZXNvdXJjZUxhbmd1YWdlcwAAQ0lDAEFSZXNvdXJj + ZU5hbWVzAABBUmVzb3VyY2VUeXBlcwAAQVdpbmRvd1Byb3BzAAAAAENDSS5JAAAAQVdpbmRvd3NFeAAA + Q0kuSQAAAABBV2luZG93cwAAAABDLkkAQURlc2t0b3BzAAAAQVdpbmRvd1N0YXRpb25zAFJlYWRQcm9j + ZXNzTWVtb3J5RXgAQ0lJAEFIZWFwQmxvY2tzAEFQcm9jZXNzSGVhcHMAAABBUHJvY2Vzc01vZHVsZXMA + Q0kAAEFQcm9jZXNzVGhyZWFkcwBBUHJvY2Vzc2VzAABGbG9hdDJTdHIAAABTdHIyRmxvYXQAAABOAAAA + RG91YmxlMlN0cgAAU3RyMkRvdWJsZQAAPwAAAFVMb25nMlN0cgAAAFN0cjJVTG9uZwAAAExvbmcyU3Ry + AAAAAFN0cjJMb25nAAAAAFVTaG9ydDJTdHIAAFN0cjJVU2hvcnQAAFNob3J0MlN0cgAAAFN0cjJTaG9y + dAAAAElDSUlJLkkAVW5NYXJzaGFsQ3Vyc29yV0NoYXJBcnJheQAAAElDSUlJAAAAVW5NYXJzaGFsQ3Vy + c29yQ2hhckFycmF5AAAAAFVuTWFyc2hhbEN1cnNvcldTdHJpbmcAAFVuTWFyc2hhbEN1cnNvckNTdHJp + bmcAAFVuTWFyc2hhbEN1cnNvckxvZ2ljYWwAAFVuTWFyc2hhbEN1cnNvckRvdWJsZQAAAFVuTWFyc2hh + bEN1cnNvckZsb2F0AAAAAFVuTWFyc2hhbEN1cnNvclVJbnQAVW5NYXJzaGFsQ3Vyc29ySW50AABVbk1h + cnNoYWxDdXJzb3JVU2hvcnQAAABVbk1hcnNoYWxDdXJzb3JTaG9ydAAAAABJQ0lJLkkAAE1hcnNoYWxD + dXJzb3JXQ2hhckFycmF5AElDSUkAAAAATWFyc2hhbEN1cnNvckNoYXJBcnJheQAATWFyc2hhbEN1cnNv + cldTdHJpbmcAAAAATWFyc2hhbEN1cnNvckNTdHJpbmcAAAAATWFyc2hhbEN1cnNvckxvZ2ljYWwAAAAA + TWFyc2hhbEN1cnNvckRvdWJsZQBNYXJzaGFsQ3Vyc29yRmxvYXQAAE1hcnNoYWxDdXJzb3JVSW50AAAA + TWFyc2hhbEN1cnNvckludAAAAABNYXJzaGFsQ3Vyc29yVVNob3J0AElDSQBNYXJzaGFsQ3Vyc29yU2hv + cnQAAFVuTWFyc2hhbEFycmF5V0NoYXJBcnJheQAAAABVbk1hcnNoYWxBcnJheUNoYXJBcnJheQBVbk1h + cnNoYWxBcnJheVdTdHJpbmcAAABVbk1hcnNoYWxBcnJheUNTdHJpbmcAAABVbk1hcnNoYWxBcnJheUxv + Z2ljYWwAAABVbk1hcnNoYWxBcnJheURvdWJsZQAAAABVbk1hcnNoYWxBcnJheUZsb2F0AFVuTWFyc2hh + bEFycmF5VUludAAAVW5NYXJzaGFsQXJyYXlJbnQAAABVbk1hcnNoYWxBcnJheVVTaG9ydAAAAABVbk1h + cnNoYWxBcnJheVNob3J0AElSSS5JAAAATWFyc2hhbEFycmF5V0NoYXJBcnJheQAASVJJAE1hcnNoYWxB + cnJheUNoYXJBcnJheQAAAElSLkkAAAAATWFyc2hhbEFycmF5V1N0cmluZwBNYXJzaGFsQXJyYXlDU3Ry + aW5nAE1hcnNoYWxBcnJheUxvZ2ljYWwATWFyc2hhbEFycmF5RG91YmxlAABNYXJzaGFsQXJyYXlGbG9h + dAAAAE1hcnNoYWxBcnJheVVJbnQAAAAATWFyc2hhbEFycmF5SW50AE1hcnNoYWxBcnJheVVTaG9ydAAA + SVIAAE1hcnNoYWxBcnJheVNob3J0AAAAUmVhZFBMb2dpY2FsAAAAAFJlYWRMb2dpY2FsAFJlYWRCeXRl + cwAAAElJLkkAAAAAUmVhZFdDaGFyQXJyYXkAAFJlYWRQV1N0cmluZwAAAABJLkkAUmVhZFdTdHJpbmcA + UmVhZENoYXJBcnJheQAAAFJlYWRQQ1N0cmluZwAAAABSZWFkQ1N0cmluZwBSZWFkUFVJbnQ2NEFzRG91 + YmxlAFJlYWRVSW50NjRBc0RvdWJsZQAAUmVhZFBJbnQ2NEFzRG91YmxlAABSZWFkSW50NjRBc0RvdWJs + ZQAAAFJlYWRQUG9pbnRlcgAAAABSZWFkUG9pbnRlcgBSZWFkUFVJbnQAAABSZWFkVUludAAAAABSZWFk + UENoYXIAAABSZWFkQ2hhcgAAAABXcml0ZVBVSW50NjQAAAAAV3JpdGVVSW50NjQAV3JpdGVQSW50NjQA + V3JpdGVJbnQ2NAAAV3JpdGVQTG9naWNhbAAAAElMAABXcml0ZUxvZ2ljYWwAAAAAV3JpdGVCeXRlcwAA + V3JpdGVQV0NoYXIAV3JpdGVXQ2hhcgAASUNJLkkAAABXcml0ZVdDaGFyQXJyYXkAST8uSQAAAABXcml0 + ZVBXU3RyaW5nAAAAV3JpdGVXU3RyaW5nAAAAAElDLkkAAAAAV3JpdGVDaGFyQXJyYXkAAEk/AABXcml0 + ZVBDU3RyaW5nAAAASUMAAFdyaXRlQ1N0cmluZwAAAABVbmxvY2tIR2xvYmFsAAAATG9ja0hHbG9iYWwA + UmVBbGxvY0hHbG9iYWwAAEZyZWVIR2xvYmFsAEFsbG9jSEdsb2JhbAAAAABDAAAAQU1lbUJsb2NrcwAA + Q29tcGFjdE1lbQAAVmFsaWRhdGVNZW0AU2l6ZU9mTWVtAAAASUlJAEZyZWVSZWZBcnJheQAAAABGcmVl + UE1lbQAAAABGcmVlTWVtAFJlQWxsb2NNZW0AAElJAABBbGxvY01lbVRvAABBbGxvY01lbQAAAABJLj8A + VkZQMkNTeXMAAAAASQAAAEluaXRWRlAyQzMyAE9uVW5sb2FkAAAAAE9uTG9hZAAARm9ybWF0TWVzc2Fn + ZQAAAElOVChWRVJTSU9OKDUpKQB2ZnAyYzMyLmZsbABSZWdOb3RpZnlDaGFuZ2VLZXlWYWx1ZQBSZWdP + cGVuS2V5RXgAAAAAJVMoJSVVLCUlSSkATm8gbW9yZSByZWdpc3RyeSBub3RpZmljYXRpb24gc2xvdHMg + YXZhaWxhYmxlLgAAU2V0RXZlbnQAAAAAQ3JlYXRlVGhyZWFkAAAAAEZpbmRGaXJzdENoYW5nZU5vdGlm + aWNhdGlvbgBDcmVhdGVFdmVudAAlUyglJVUsJyUlUycsJSVVKQAAAE5vIG1vcmUgZmlsZS9kaXJlY3Rv + cnkgbm90aWZpY2F0aW9uIHNsb3RzIGF2YWlsYWJsZS4AAAAATGlicmFyeSBub3QgaW5pdGlhbGl6ZWQh + AAAAAFJlZ2lzdGVyQ2xhc3NFeABDcmVhdGVXaW5kb3dFeAAAX19WRlAyQ19BU1dDAAAAAFZpcnR1YWxQ + cm90ZWN0AABEQ29udgAAAERPVUJMRQAAU0lOR0xFAABCT09MAAAAAFVTSE9SVAAAU0hPUlQAAABTVFJJ + TkcAAFVMT05HAAAAVUlOVEVHRVIAAAAATE9ORwAAAABJTlRFR0VSACgpAAAoAAAARXJyb3JPdXQAAAAA + cEJ1ZmZlcgB2b2lkAAAAAC4AAABfX1ZGUDJDX0NCT18lVQAAX1ZGUC5BdXRvWWllbGQgPSAuVC4AAAAA + QXV0b1lpZWxkQmFjawAAAEJPT0wobFBhcmFtKQAAAABCT09MKHdQYXJhbSkAAAAAVU5TSUdORUQoTE9X + T1JEKGxQYXJhbSkpAAAAAFVOU0lHTkVEKEhJV09SRChsUGFyYW0pKQAAAABVTlNJR05FRChMT1dPUkQo + d1BhcmFtKSkAAAAAVU5TSUdORUQoSElXT1JEKHdQYXJhbSkpAAAAAExPV09SRChsUGFyYW0pAABISVdP + UkQobFBhcmFtKQAATE9XT1JEKHdQYXJhbSkAAEhJV09SRCh3UGFyYW0pAABVTlNJR05FRChsUGFyYW0p + AAAAAFVOU0lHTkVEKHdQYXJhbSkAAAAAKCVVLCVVLCVJLCVJKQAAAF9WRlAuQXV0b1lpZWxkID0gLkYu + AAAAAEF1dG9ZaWVsZEZhbHNlAABfVkZQLkF1dG9ZaWVsZAAAX19WRlAyQ19XQ0JPJVVfJVVfJVUuAAAA + RW5kAENhbGxXaW5kb3dQcm9jAAB2QXV0b1lpZWxkAAB2UmV0VmFsAGxQYXJhbQAAd1BhcmFtAAB1TXNn + AAAAAGhXbmQAAAAARW51bUNoaWxkV2luZG93cwAAAABTZXRDbGFzc0xvbmcAAAAAR2V0Q2xhc3NMb25n + AAAAAFNldFdpbmRvd0xvbmcAAABHZXRXaW5kb3dMb25nAAAAVGhlcmUgaXMgbm8gbWVzc2FnZSBiaW5k + aW5nIGZvciBtZXNzYWdlIG5vLiAlSQAAVGhlcmUgYXJlIG5vIG1lc3NhZ2UgYmluZGluZ3MgZm9yIHdp + bmRvdyAlSQBfX1ZGUDJDX1dDQk8lVV8lVV8lVQAAAABfX1ZGUDJDX0NCV0MAAAAASGVhcENyZWF0ZQAA + U2NyZWVuVG9DbGllbnQAAEdldEN1cnNvclBvcwAAAABfX1ZGUDJDX1RaV0MAAAAARklFTEQoJUksJUkp + K0NIUigwKQBGQ09VTlQoJUkpAABTRUxFQ1QoMCkAAABDUkVBVEUgQ1VSU09SICVTICglUykAAABTRUxF + Q1QoJyVTJykAAAAARElNRU5TSU9OICVTWyVVXQAAAABESU1FTlNJT04gJVNbJVUsJVVdAF9BbGxvY01l + bW8AAEZ1bmN0aW9uIGZhaWxlZC4AAAAAX01lbW9DaGFuAAAARnVuY3Rpb24gZmFpbGVkIGZvciB3b3Jr + YXJlYSAlSS4AAAAAQ1JFQVRFT0JKRUNUKCdSZWxhdGlvbicpAAAAAENSRUFURU9CSkVDVCgnRW1wdHkn + KQAAAENSRUFURU9CSkVDVCgnJVMnKQAAeyA6On0AAAB7XiUwNGh1LSUwMmh1LSUwMmh1ICUwMmh1OiUw + Mmh1OiUwMmh1fQAARmlsZVRpbWVUb1N5c3RlbVRpbWUAAAAARmlsZVRpbWVUb0xvY2FsRmlsZVRpbWUA + U3lzdGVtVGltZVRvRmlsZVRpbWUAAAAATXVsdGlCeXRlVG9XaWRlQ2hhcgBGVUxMUEFUSCgnJXMnKStD + SFIoMCkAAABXaWRlQ2hhclRvTXVsdGlCeXRlAEVudW1EaXNwbGF5U2V0dGluZ3MARW51bVJlc291cmNl + TGFuZ3VhZ2VzAAAARW51bVJlc291cmNlTmFtZXMAAABFbnVtUmVzb3VyY2VUeXBlcwAAAEhlYXBMaXN0 + MzJGaXJzdABDcmVhdGVUb29saGVscDMyU25hcFNob3QAAAAAR2V0TW9kdWxlQmFzZU5hbWUAAABFbnVt + WFdpbmRvd3MAAAAARW51bVdpbmRvd3NYAAAAACglVSkAAAAARW51bURlc2t0b3BzAAAAAEVudW1XaW5k + b3dTdGF0aW9ucwAARW51bURpc3BsYXlEZXZpY2VzQQBFbnVtRGlzcGxheVNldHRpbmdzQQAAAABFbnVt + RGVza3RvcFdpbmRvd3MAAEVudW1EZXNrdG9wc0EAAABFbnVtV2luZG93U3RhdGlvbnNBAEdldFByb2Nl + c3NXaW5kb3dTdGF0aW9uAHVzZXIzMi5kbGwAAEdldE1vZHVsZUhhbmRsZQBUb29saGVscDMyUmVhZFBy + b2Nlc3NNZW1vcnkASGVhcDMyTmV4dAAASGVhcDMyRmlyc3QASGVhcDMyTGlzdE5leHQAAEhlYXAzMkxp + c3RGaXJzdABNb2R1bGUzMk5leHQAAAAATW9kdWxlMzJGaXJzdAAAAFRocmVhZDMyTmV4dAAAAABUaHJl + YWQzMkZpcnN0AAAAUHJvY2VzczMyTmV4dAAAAFByb2Nlc3MzMkZpcnN0AABDcmVhdGVUb29saGVscDMy + U25hcHNob3QAAAAAa2VybmVsMzIuZGxsAAAAAE50UXVlcnlJbmZvcm1hdGlvblByb2Nlc3MAAABudGRs + bC5kbGwAAABHZXRNb2R1bGVCYXNlTmFtZUEAAEVudW1Qcm9jZXNzTW9kdWxlcwAARW51bVByb2Nlc3Nl + cwAAAHBzYXBpLmRsbAAAAEZDcmVhdGVFeC9GT3BlbkV4AAAATWF4aW11bSBudW1iZXIgb2YgZmlsZSBo + YW5kbGVzIGV4Y2VlZGVkLgAAAABVbmxvY2tGaWxlAABMb2NrRmlsZQAAAABGbHVzaEZpbGVCdWZmZXJz + AAAAAFNldEVuZE9mRmlsZQAAAABTZXRGaWxlUG9pbnRlcgAAQ2xvc2VIYW5kbGUAR2V0Vm9sdW1lUGF0 + aE5hbWUAAABEZWxldGVGaWxlAABSZW1vdmVEaXJlY3RvcnkAQ3JlYXRlRGlyZWN0b3J5AFg6XABcXC5c + WDoAAEZ1bmN0aW9uIGZhaWxlZDogJUkAKCVJLCVVLCVJKQAAQWxsACouKgAAAAAAU0hHZXRQYXRoRnJv + bUlETGlzdAAlUyglJVUsJSVVLCUlVSkARnVuY3Rpb24gZmFpbGVkLiBIUkVTVUxUOiAlSQAAAABXcml0 + ZUZpbGUAAABSZWFkRmlsZQAAAABNb3ZlRmlsZQAAAAAlcyglJUk2NGQsJSVJNjRkLCUlLjJmKQBMb29r + dXBBY2NvdW50U2lkAAAAAFNldEZpbGVUaW1lAEdldEZpbGVUaW1lAEdldEZpbGVJbmZvcm1hdGlvbkJ5 + SGFuZGxlAABDcmVhdGVGaWxlAABHZXRGaWxlQXR0cmlidXRlc0V4AFBhdGggZXhjZWVkcyBNQVhfUEFU + SCBjaGFyYWN0ZXJzLgAAACVTKCclJVMnLCclJVMnLCUlUywlJVMsJSVTLCUlMEYsJSVVKQAAAAAAAAAA + ZmlsZW5hbWUgQygyNTQpLCBkb3NmaWxlbmFtZSBDKDEzKSwgY3JlYXRpb250aW1lIFQsIGFjY2Vzc3Rp + bWUgVCwgd3JpdGV0aW1lIFQsIGZpbGVzaXplIE4oMjAsMCksIGZpbGVhdHRyaWJzIEkAAExvb2t1cEFj + Y291bnRTaWRBAAAAR2V0U2VjdXJpdHlEZXNjcmlwdG9yT3duZXIAAEdldEtlcm5lbE9iamVjdFNlY3Vy + aXR5AGFkdmFwaTMyLmRsbAAAAABTSElMQ3JlYXRlRnJvbVBhdGgAAFNIR2V0U3BlY2lhbEZvbGRlclBh + dGhBAHNoZWxsMzIuZGxsAEdldFZvbHVtZVBhdGhOYW1lQQAARGV2aWNlSW9Db250cm9sAFF1ZXJ5RG9z + RGV2aWNlQQBHZXRWb2x1bWVOYW1lRm9yVm9sdW1lTW91bnRQb2ludEEAAABGaW5kRmlyc3RWb2x1bWVN + b3VudFBvaW50AAAARmluZE5leHRWb2x1bWVNb3VudFBvaW50QQAAAEZpbmRGaXJzdFZvbHVtZU1vdW50 + UG9pbnRBAABGaW5kVm9sdW1lQ2xvc2UARmluZE5leHRWb2x1bWVBAEZpbmRGaXJzdFZvbHVtZUEAAAAA + VW5sb2NrRmlsZUV4AAAAAExvY2tGaWxlRXgAAEdldExvbmdQYXRoTmFtZUEAAAAAR2V0RmlsZUF0dHJp + YnV0ZXNFeEEAAAAAR2V0RmlsZVNpemVFeAAAAC4uAABGaW5kTmV4dEZpbGUAAAAARmluZEZpcnN0Rmls + ZQAAAEofABBKHwAQSh8AEENUaHJlYWRQb29sOjpJbml0aWFsaXplAE5vdCBlbm91Z2ggbWVtb3J5LgAA + SW5pdGlhbGl6ZUNyaXRpY2FsU2VjdGlvbgAAAFRoZXJlJ3Mgbm90IGVub3VnaCBtZW1vcnkgdG8gY29t + cGxldGUgdGhlIG9wZXJhdGlvbi4AAAAAUmVnU2V0VmFsdWVFeAAAAFJlZ1F1ZXJ5VmFsdWVFeABSZWdF + bnVtVmFsdWUAAAAAUmVnRW51bUtleUV4AAAAAFJlZ1F1ZXJ5SW5mb0tleQBTSERlbGV0ZUtleQBSZWdE + ZWxldGVLZXkAAAAAUmVnQ3JlYXRlS2V5RXgAAFN0YW5kYXJkAAAAAGdldGhvc3RieW5hbWUAAABIb3N0 + IG5vdCBmb3VuZC4AaW5ldF9hZGRyAAAASW52YWxpZCBJUCBhZGRyZXNzIHBhc3NlZC4AAGljbXAuZGxs + AAAAAEljbXBTZW5kRWNobwAAAABJY21wQ2xvc2VIYW5kbGUAU2VuZEFSUABpcGhscGFwaS5kbGwAAAAA + SWNtcENyZWF0ZUZpbGUAAEdsb2JhbFVubG9jawAAAABHbG9iYWxMb2NrAABHbG9iYWxSZUFsbG9jAAAA + R2xvYmFsRnJlZQAAR2xvYmFsQWxsb2MASGVhcEZyZWUAAAAAVW5rbm93biBleGNlcHRpb24gY29kZS4A + AAAAAFRoZSBhbGxvY2F0aW9uIGF0dGVtcHQgZmFpbGVkIGJlY2F1c2Ugb2YgaGVhcCBjb3JydXB0aW9u + IG9yIGltcHJvcGVyIGZ1bmN0aW9uIHBhcmFtZXRlcnMuAAAAAAAAAFRoZSBhbGxvY2F0aW9uIGF0dGVt + cHQgZmFpbGVkIGJlY2F1c2Ugb2YgYSBsYWNrIG9mIGF2YWlsYWJsZSBtZW1vcnkgb3IgaGVhcCBjb3Jy + dXB0aW9uLgBIZWFwQWxsb2MvSGVhcFJlQWxsb2MAAABDTEVBUiBETExTICdXcml0ZUNoYXInLCdXcml0 + ZVBDaGFyJywnV3JpdGVJbnQ4JywnV3JpdGVQSW50OCcsJ1dyaXRlVUludDgnLCdXcml0ZVBVSW50OCcs + J1dyaXRlU2hvcnQnLCdXcml0ZVBTaG9ydCcsJ1dyaXRlVVNob3J0JywnV3JpdGVQVVNob3J0JywnV3Jp + dGVJbnQnLCdXcml0ZVBJbnQnLCdXcml0ZVVJbnQnLCdXcml0ZVBVSW50JywnV3JpdGVQb2ludGVyJywn + V3JpdGVQUG9pbnRlcicsJ1dyaXRlRmxvYXQnLCdXcml0ZVBGbG9hdCcsJ1dyaXRlRG91YmxlJywnV3Jp + dGVQRG91YmxlJywnUmVhZEludDgnLCdSZWFkUEludDgnLCdSZWFkVUludDgnLCdSZWFkUFVJbnQ4Jywn + UmVhZFNob3J0JywnUmVhZFBTaG9ydCcsJ1JlYWRVU2hvcnQnLCdSZWFkUFVTaG9ydCcsJ1JlYWRJbnQn + LCdSZWFkUEludCcsJ1JlYWRGbG9hdCcsJ1JlYWRQRmxvYXQnLCdSZWFkRG91YmxlJywnUmVhZFBEb3Vi + bGUnAF9FeGVjdXRlAAAAAEZhaWxlZCB0byBERUNMQVJFIGZ1bmN0aW9uLiBFcnJvciAlSQAAAABERUNM + QVJFIERPVUJMRSBSZWFkUERvdWJsZSBJTiB2ZnAyYzMyLmZsbCBJTlRFR0VSAAAAREVDTEFSRSBET1VC + TEUgUmVhZERvdWJsZSBJTiB2ZnAyYzMyLmZsbCBJTlRFR0VSAAAAAERFQ0xBUkUgU0lOR0xFIFJlYWRQ + RmxvYXQgSU4gdmZwMmMzMi5mbGwgSU5URUdFUgAAAABERUNMQVJFIFNJTkdMRSBSZWFkRmxvYXQgSU4g + dmZwMmMzMi5mbGwgSU5URUdFUgBERUNMQVJFIElOVEVHRVIgUmVhZFBJbnQgSU4gdmZwMmMzMi5mbGwg + SU5URUdFUgBERUNMQVJFIElOVEVHRVIgUmVhZEludCBJTiB2ZnAyYzMyLmZsbCBJTlRFR0VSAABERUNM + QVJFIElOVEVHRVIgUmVhZFBVU2hvcnQgSU4gdmZwMmMzMi5mbGwgSU5URUdFUgAAREVDTEFSRSBJTlRF + R0VSIFJlYWRVU2hvcnQgSU4gdmZwMmMzMi5mbGwgSU5URUdFUgAAAERFQ0xBUkUgU0hPUlQgUmVhZFBT + aG9ydCBJTiB2ZnAyYzMyLmZsbCBJTlRFR0VSAERFQ0xBUkUgU0hPUlQgUmVhZFNob3J0IElOIHZmcDJj + MzIuZmxsIElOVEVHRVIAAERFQ0xBUkUgU0hPUlQgUmVhZFBVSW50OCBJTiB2ZnAyYzMyLmZsbCBJTlRF + R0VSAERFQ0xBUkUgU0hPUlQgUmVhZFVJbnQ4IElOIHZmcDJjMzIuZmxsIElOVEVHRVIAAERFQ0xBUkUg + U0hPUlQgUmVhZFBJbnQ4IElOIHZmcDJjMzIuZmxsIElOVEVHRVIAAERFQ0xBUkUgU0hPUlQgUmVhZElu + dDggSU4gdmZwMmMzMi5mbGwgSU5URUdFUgAAAERFQ0xBUkUgV3JpdGVQRG91YmxlIElOIHZmcDJjMzIu + ZmxsIElOVEVHRVIsIERPVUJMRQBERUNMQVJFIFdyaXRlRG91YmxlIElOIHZmcDJjMzIuZmxsIElOVEVH + RVIsIERPVUJMRQAAREVDTEFSRSBXcml0ZVBGbG9hdCBJTiB2ZnAyYzMyLmZsbCBJTlRFR0VSLCBTSU5H + TEUAAERFQ0xBUkUgV3JpdGVGbG9hdCBJTiB2ZnAyYzMyLmZsbCBJTlRFR0VSLCBTSU5HTEUAAABERUNM + QVJFIFdyaXRlUFBvaW50ZXIgSU4gdmZwMmMzMi5mbGwgSU5URUdFUiwgSU5URUdFUgAAAERFQ0xBUkUg + V3JpdGVQb2ludGVyIElOIHZmcDJjMzIuZmxsIElOVEVHRVIsIElOVEVHRVIAAAAAREVDTEFSRSBXcml0 + ZVBVSW50IElOIHZmcDJjMzIuZmxsIElOVEVHRVIsIElOVEVHRVIAAERFQ0xBUkUgV3JpdGVVSW50IElO + IHZmcDJjMzIuZmxsIElOVEVHRVIsIElOVEVHRVIAAABERUNMQVJFIFdyaXRlUEludCBJTiB2ZnAyYzMy + LmZsbCBJTlRFR0VSLCBJTlRFR0VSAAAAREVDTEFSRSBXcml0ZUludCBJTiB2ZnAyYzMyLmZsbCBJTlRF + R0VSLCBJTlRFR0VSAAAAAERFQ0xBUkUgV3JpdGVQVVNob3J0IElOIHZmcDJjMzIuZmxsIElOVEVHRVIs + IFNIT1JUAABERUNMQVJFIFdyaXRlVVNob3J0IElOIHZmcDJjMzIuZmxsIElOVEVHRVIsIFNIT1JUAAAA + REVDTEFSRSBXcml0ZVBTaG9ydCBJTiB2ZnAyYzMyLmZsbCBJTlRFR0VSLCBTSE9SVAAAAERFQ0xBUkUg + V3JpdGVTaG9ydCBJTiB2ZnAyYzMyLmZsbCBJTlRFR0VSLCBTSE9SVAAAAABERUNMQVJFIFdyaXRlUFVJ + bnQ4IElOIHZmcDJjMzIuZmxsIElOVEVHRVIsIElOVEVHRVIAREVDTEFSRSBXcml0ZVVJbnQ4IElOIHZm + cDJjMzIuZmxsIElOVEVHRVIsIElOVEVHRVIAAERFQ0xBUkUgV3JpdGVQSW50OCBJTiB2ZnAyYzMyLmZs + bCBJTlRFR0VSLCBJTlRFR0VSAABERUNMQVJFIFdyaXRlSW50OCBJTiB2ZnAyYzMyLmZsbCBJTlRFR0VS + LCBJTlRFR0VSAAAAREVDTEFSRSBXcml0ZVBDaGFyIElOIHZmcDJjMzIuZmxsIElOVEVHRVIsIFNUUklO + RwAAAERFQ0xBUkUgV3JpdGVDaGFyIElOIHZmcDJjMzIuZmxsIElOVEVHRVIsIFNUUklORwAAAABIZWFw + V2FsawAAAABIZWFwVmFsaWRhdGUAAAAASGVhcENvbXBhY3QASGVhcFNldEluZm9ybWF0aW9uAABTZXRM + b2NhbFRpbWUAAAAATmV0U2VydmVyRW51bQAAAE5ldEZpbGVFbnVtAE5ldFJlbW90ZVRPRAAAAABOZXRB + cGlCdWZmZXJTaXplAAAAAE5ldEFwaUJ1ZmZlclJlYWxsb2NhdGUAAE5ldEFwaUJ1ZmZlckZyZWUAAAAA + TmV0QXBpQnVmZmVyQWxsb2NhdGUAAAAATG9hZExpYnJhcnkAbmV0YXBpMzIuZGxsAAAAAFNRTEdldERh + dGEAAFNRTEZldGNoAAAAAFNRTFBhcmFtRGF0YQAAAABTUUxQdXREYXRhAABTUUxTZXREZXNjRmllbGQA + U1FMU2V0RGVzY1JlYwAAAFNRTEdldFN0bXRBdHRyAABTUUxCaW5kUGFyYW1ldGVyAAAAAEludmFsaWQg + ZGF0YXR5cGUgY29udmVyc2lvbiBzcGVjaWZpZWQgZm9yIHBhcmFtZXRlciAnJVMnLgAAAFBhcmFtZXRl + ciBzY2hlbWEgY29udGFpbmVkIGludmFsaWQgZGF0YSBuZWFyICclMjBTJy4AAAAAAAAAAFBhcmFtZXRl + ciBzY2hlbWEgY29udGFpbmVkIGludmFsaWQgZGF0YSBuZWFyICclMjBTJywgZXhwZWN0ZWQgU1FMIHR5 + cGUuAFBhcmFtZXRlciBzY2hlbWEgY29udGFpbmVkIGludmFsaWQgZGF0YSAnJVMnLCBleHBlY3RlZCBT + UUwgdHlwZS4AAAAAU1FMX0RFQ0lNQUwAU1FMX05VTUVSSUMAU1FMX1JFQUwAAAAAU1FMX0ZMT0FUAAAA + U1FMX0RPVUJMRQAAU1FMX1NNQUxMSU5UAAAAAFNRTF9JTlRFR0VSAFNRTF9CSUdJTlQAAFBhcmFtZXRl + ciBzY2hlbWEgY29udGFpbmVkIGludmFsaWQgZGF0YSBuZWFyICclMjBTJywgZXhwZWN0ZWQgJyknLgAA + AAAAAFBhcmFtZXRlciBzY2hlbWEgY29udGFpbmVkIGludmFsaWQgZGF0YSBuZWFyICclMjBTJywgZXhw + ZWN0ZWQgcHJlY2lzaW9uLgAAAABTUUxfVElNRVNUQU1QAAAAU1FMX0RBVEUAAAAAU1FMX0NIQVIAAAAA + U1FMX0JJTkFSWQAAU1FMX1dDSEFSAAAAAAAAAFBhcmFtZXRlciBzY2hlbWEgY29udGFpbmVkIGludmFs + aWQgZGF0YSwgcGFyYW1ldGVyIG51bWJlciAnJUknIG91dCBvZiBib3VuZHMuAAAAUGFyYW1ldGVyIHNj + aGVtYSBjb250YWluZWQgaW52YWxpZCBkYXRhIG5lYXIgJyUxMFMnLCBleHBlY3RlZCBwYXJhbWV0ZXIg + bnVtYmVyLgBQYXJhbWV0ZXIgZXhwcmVzc2lvbiAnJTIwUy4uLicgZXhjZWVkcyBsaW1pdCBvZiA1MTIg + Y2hhcmFjdGVycwAAQ1JFQVRFIENVUlNPUiAlUyBGUk9NIEFSUkFZICVTAABWYXJpYWJsZSBsaXN0IGNv + bnRhaW5lZCBsZXNzIHZhcmlhYmxlcyB0aGFuIGNvbHVtbnMgcHJlc2VudCBpbiByZXN1bHRzZXQuAAAA + AAAAAFZhcmlhYmxlIGxpc3QgY29udGFpbmVkIG1vcmUgdmFyaWFibGVzIHRoYW4gY29sdW1ucyBwcmVz + ZW50IGluIHJlc3VsdHNldC4AAABWYXJpYWJsZSBsaXN0IGNvbnRhaW5lZCBpbnZhbGlkIGRhdGEgbmVh + ciAnJTEwUycuAAAAVmFyaWFibGUgbGlzdCBjb250YWluZWQgaW52YWxpZCBkYXRhIG5lYXIgJyUxMFMn + LCBleHBlY3RlZCBjb2x1bW5uYW1lLgAATm8gdmFyaWFibGUgbGlzdCBzcGVjaWZpZWQgZm9yIHJlc3Vs + dHNldCAnJUknAAAAUkVMRUFTRSAlUwAAQ29sdW1uICclUycgbm90IGNvbnRhaW5lZCBpbiByZXN1bHRz + ZXQgYnV0IGV4aXN0cyBpbiBjdXJzb3IuAAAAAEFGSUVMRFMoJVMsJyVTJykAAAAAX19WRlAyQ19PREJD + X0FSUkFZXyVVAAAAQ3Vyc29yc2NoZW1hIGNvbnRhaW5lZCBpbnZhbGlkIGRhdGEgbmVhciAnJTIwUycu + AAAAAE5PQ1BUUkFOUwAAAE5VTEwAAAAASW52YWxpZCBjdXJzb3JzY2hlbWEgZm9yIGNvbHVtbiAnJVMn + LCBleHBlY3RlZCBjb2x1bW4gc2NhbGUuAAAAAEludmFsaWQgY3Vyc29yc2NoZW1hIGZvciBjb2x1bW4g + JyVTJywgZXhwZWN0ZWQgY29sdW1uIHByZWNpc2lvbi4AAAAASW52YWxpZCBjdXJzb3JzY2hlbWEgZm9y + IGNvbHVtbiAnJVMnLCBleHBlY3RlZCAnKScuAEludmFsaWQgY3Vyc29yc2NoZW1hIGZvciBjb2x1bW4g + JyVTJywgZXhwZWN0ZWQgY29sdW1uIHNpemUuAEludmFsaWQgY3Vyc29yc2NoZW1hIGZvciBjb2x1bW4g + JyVTJywgZXhwZWN0ZWQgJygnLgBEYXRhdHlwZSBjb252ZXJzaW9uIGZvciBjb2x1bW4gJyVTJyB0byBW + RlAgdHlwZSAnJXMnIG5vdCBzdXBwb3J0ZWQuAERhdGF0eXBlIGluIGN1cnNvcnNjaGVtYSBmb3IgY29s + dW1uICclUycgaXMgaW52YWxpZC4AAAAAQ2NWdlFxV3dNbU5uQmJGZklpWXlEZFR0TGwAAENvbHVtbiAn + JVMnIG5vdCBjb250YWluZWQgaW4gcmVzdWx0c2V0IGJ1dCBzcGVjaWZpZWQgaW4gY3Vyc29yc2NoZW1h + LgAAAEN1cnNvcnNjaGVtYSBjb250YWluZWQgaW52YWxpZCBkYXRhIG5lYXIgJyUxMFMnLgAAAABTUUxH + ZXRJbmZvAABTUUxCaW5kQ29sAABleHByAAAAAGV4cHIlSQAAU1FMQ29sQXR0cmlidXRlAFNRTERlc2Ny + aWJlQ29sAABTUUxBbGxvY0hhbmRsZQAAKCVJLCVJLCVJKQAAKQAAACgtMSwAAAAAX19WRlAyQ19PREJD + X1BBUk1fJVUAAAAAU1FMTW9yZVJlc3VsdAAAAFNRTEZyZWVTdG10AHNxbHJlc3VsdCVJAHNxbHJlc3Vs + dAAAAFNRTFJvd0NvdW50AFNRTE51bVJlc3VsdENvbHMAAAAAU1FMRXhlY0RpcmVjdAAAAFBFUkZEQVRB + TE9HAFBFUkZEQVRBRklMRQAAAABTUUxTZXRDb25uZWN0QXR0cgAAAFBFUkZEQVRBAAAAAElTT0xBVElP + TkxFVkVMAABDT05ORUNURUQAAABUUkFDRUZJTEUAAABTUUxHZXRDb25uZWN0QXR0cgAAAFRSQUNFAAAA + SU5UKFNRTEdFVFBST1AoQ1VSU09SR0VUUFJPUCgnQ29ubmVjdEhhbmRsZScsJyVTJyksJ09EQkNoZGJj + JykpAElOVChTUUxHRVRQUk9QKCVVLCdPREJDaGRiYycpKQAAU1FMRHJpdmVycwAAU1FMRGF0YVNvdXJj + ZXMAAERTTj0AAAAAU1FMQ29uZmlnRGF0YVNvdXJjZQBTWVMoMzA1MykAAABDYW5ub3QgcmV0cmlldmUg + T0RCQyBlbnZpcm9ubWVudCBoYW5kbGUuIEVycm9yOiAlSQAASU5UKFZBTChTWVMoMzA1MykpKQAiSVVu + a25vd24uUXVlcnlJbnRlcmZhY2UiAAAAU1lTKDMwOTYsJUkpAAAAAERhdGF0eXBlIG1pc21hdGNoIGR1 + cmluZyBhcnJheSBtYXJzaGFsaW5nIQAAU2FmZUFycmF5VW5hY2Nlc3NEYXRhAAAAU2FmZUFycmF5QWNj + ZXNzRGF0YQBDYW5ub3QgY29udmVyIGZyb20gdHlwZSAnJUMnIHRvIFZUX0RFQ0lNQUwuAFZhckRlY0Zy + b21JOAAAAABWYXJEZWNGcm9tUjgAAAAASW52YWxpZCBwYXJhbWV0ZXIgdHlwZSAlSQAAAFBhcmFtZXRl + ciB0eXBlIFZUX1JFQ09SRCBub3Qgc3VwcG9ydGVkIQBDYW5ub3QgY29udmVydCBmcm9tIHR5cGUgJUMg + dG8gVlRfVUlOVAAAQ2Fubm90IGNvbnZlcnQgZnJvbSB0eXBlICVDIHRvIFZUX0lOVAAAAENhbm5vdCBj + b252ZXJ0IGZyb20gdHlwZSAlQyB0byBWVF9VSTQAAABQYXJhbWV0ZXIgdHlwZSBWVF9VSTIgbm90IHN1 + cHBvcnRlZCEAAAAAUGFyYW1ldGVyIHR5cGUgVlRfVUkxIG5vdCBzdXBwb3J0ZWQhAAAAAFBhcmFtZXRl + ciB0eXBlIFZUX0kxIG5vdCBzdXBwb3J0ZWQhAFBhcmFtZXRlciB0eXBlIFZUX1VOS05PV04gbm90IHN1 + cHBvcnRlZCEAAAAAQ2Fubm90IGNvbnZlcnQgZnJvbSB0eXBlICVDIHRvIFZUX1I4AAAAAENhbm5vdCBj + b252ZXJ0IGZyb20gdHlwZSAlQyB0byBWVF9SNAAAAABDYW5ub3QgY29udmVydCBmcm9tIHR5cGUgJUMg + dG8gVlRfSTQAAAAAQ2Fubm90IG1hcnNoYWwgcmVmZXJlbmNlIHBhcmFtZXRlcnMgaW4gYW4gYXN5bmNy + b25vdXMgY2FsbCEASW52YWxpZCBwYXJhbWV0ZXIgdHlwZTogJUkAACJJRGlzcGF0Y2guR2V0SURzT2ZO + YW1lcyIAAABPAG4ARQByAHIAbwByAAAASQBEAGkAcwBwAGEAdABjAGgALgBHAGUAdABJAEQAcwBPAGYA + TgBhAG0AZQBzAAAARgB1AG4AYwB0AGkAbwBuACAAZgBhAGkAbABlAGQAIQAAAAAAQwBvAEMAcgBlAGEA + dABlAEkAbgBzAHQAYQBuAGMAZQAAAAAAQ29NYXJzaGFsSW50ZXJUaHJlYWRJbnRlcmZhY2VJblN0cmVh + bQAAAFJPVC5SZWdpc3RlcgAAAABDcmVhdGVGaWxlTW9uaWtlcgAAAFJlZ2lzdGVyQWN0aXZlT2JqZWN0 + RXgAAEZpbGUgY29udGFpbmVkIGludmFsaWQgQ0xTSUQuAAAAUmVhZENsYXNzU3RnAAAAAFdyaXRlQ2xh + c3NTdGcAAABTdGdDcmVhdGVEb2NmaWxlAAAAAEdldFJ1bm5pbmdPYmplY3RUYWJsZQAAAFNZUygzMDk1 + KQAAAEZ1bmN0aW9uIGZhaWxlZCB0byByZXR1cm4gYSB2YWxpZCBJRGlzcGF0Y2ggcG9pbnRlci4AAAAA + Q29DcmVhdGVHdWlkAAAAAFF1ZXJ5SW50ZXJmYWNlAABJTlQoU1lTKDMwOTUsJVMpKQAAAERldmljZUNh + cGFiaWxpdGllcwAARW51bUZvcm1zAAAAU2l6ZQAAAABUaW1lAAAAAE5vdGlmeW5hbWUAAFN1Ym1pdHRl + ZAAAAFBhZ2VzUHJpbnRlZAAAAABUb3RhbFBhZ2VzAABQb3NpdGlvbgAAAABKb2JJZAAAAHBTdGF0dXMA + TWFjaGluZU5hbWUAVXNlck5hbWUAAAAARG9jdW1lbnQAAAAARW51bUpvYnMAAAAAT3BlblByaW50ZXIA + VHJhbnNtaXNzaW9uUmV0cnlUaW1lb3V0AAAAAERldmljZU5vdFNlbGVjdGVkVGltZW91dAAAAABBdmVy + YWdlUFBNAABKb2JzAAAAAFN0YXR1cwAAVW50aWxUaW1lAAAAU3RhcnRUaW1lAAAARGVmYXVsdFByaW9y + aXR5AFByaW9yaXR5AAAAAEF0dHJpYnV0ZXMAAFBhcmFtZXRlcnMAAERhdGF0eXBlAAAAAFByaW50UHJv + Y2Vzc29yAABTZXBGaWxlAExvY2F0aW9uAAAAAERyaXZlck5hbWUAAFBvcnROYW1lAAAAAFNoYXJlTmFt + ZQAAAFByaW50ZXJOYW1lAFNlcnZlck5hbWUAAENvbW1lbnQATmFtZQAAAABEZXNjcmlwdGlvbgBGbGFn + cwAAAEVudW1QcmludGVycwAAAABFbnVtRm9ybXNBAAB3aW5zcG9vbC5kcnYAAAAAUmFzRW51bUNvbm5l + Y3Rpb25zAABSYXNHZXRQcm9qZWN0aW9uSW5mbwAAAABSYXNHZXRFcnJvclN0cmluZ0EAAFJhc0dldFBy + b2plY3Rpb25JbmZvQQAAAFJhc0VudW1Db25uZWN0aW9uc0EAUmFzQ29ubmVjdGlvbk5vdGlmaWNhdGlv + bkEAAHJhc2FwaTMyLmRsbAAAAABcAAAAUmVnQ2xvc2VLZXkARW51bVNlcnZpY2VzU3RhdHVzAABFbnVt + U2VydmljZXNTdGF0dXNFeAAAAABFbnVtRGVwZW5kZW50U2VydmljZXNBAABPcGVuU2VydmljZUEAAAAA + U3RhcnRTZXJ2aWNlQQAAAEVudW1TZXJ2aWNlc1N0YXR1c0V4QQAAAEVudW1TZXJ2aWNlc1N0YXR1c0EA + T3BlblNDTWFuYWdlckEAAEVudW1EZXBlbmRlbnRTZXJ2aWNlcwAAAFF1ZXJ5U2VydmljZVN0YXR1cwAA + T3BlblNDTWFuYWdlcgAAAFJlc3BvbnNlIGZyb20gU05UUCBzZXJ2ZXIgaGFkIG5vIHZhbGlkIHRpbWUu + AAAAAFJlc3BvbnNlIGZyb20gU05UUCBzZXJ2ZXIgaGFkIGlsbGVnYWwgc3RyYXR1bSBmaWVsZC4AAAAA + UmVzcG9uc2UgZnJvbSBTTlRQIHNlcnZlciBoYWQgd2FybmluZyBsZWFwIGluZGljYXRvci4AAABjbG9z + ZXNvY2tldABGdW5jdGlvbiBmYWlsZWQgd2l0aCBlcnJvcmNvZGUgJUkAAAByZWN2AAAAAEZ1bmN0aW9u + IGZhaWxlZCB3aXRoIEVycm9yY29kZSAlSQAAAFNOVFAgcmVxdWVzdCB0aW1lIG91dC4AAHNlbGVjdAAA + RnVuY3Rpb24gZmFpbGVkLiBXaW5zb2NrIGxhc3QgZXJyb3IgJUkAAHNlbmQAAAAARnVuY3Rpb24gZmFp + bGVkLiBXaW5zb2NrIGxhc3QgZXJyb3I6ICVJAGNvbm5lY3QAc29ja2V0AABXaW5zb2NrIGxhc3QgZXJy + b3I6ICVJAABUWkkASW5kZXgAAABTdGQARGx0AERpc3BsYXkAU09GVFdBUkVcTWljcm9zb2Z0XFdpbmRv + d3MgTlRcQ3VycmVudFZlcnNpb25cVGltZSBab25lcwBMb2NhbEZpbGVUaW1lVG9GaWxlVGltZQDByep5 + +brOEYyCAKoAS6kLAAAAAAAAAADAAAAAAAAARqNGABAJRQAQ+UQAEOdEABDfRAAQ10QAEMlFABBARQAQ + 0kQAEMpEABDCRAAQ/EcAECNFABAZRQAQTWF4aW11bSBudW1iZXIgb2Ygc2ltdWx0YW5lb3VzIHRocmVh + ZHMgZXhjZWVkZWQhAAAAAFVybERvd25sb2FkVG9GaWxlAAAAKCVVLCVVLCVVKQAAR2V0VGltZVpvbmVJ + bmZvcm1hdGlvbgAAWkFQIElOICVTAAAAU2V0V2luZG93UG9zAAAAAEdldE1vbml0b3JJbmZvAABTeXN0 + ZW1QYXJhbWV0ZXJzSW5mbwAAAABHZXRXaW5kb3dSZWN0AAAAU2VuZE1lc3NhZ2VUaW1lb3V0AABHZXRN + b25pdG9ySW5mb0EATW9uaXRvckZyb21Qb2ludAAAAABNb25pdG9yRnJvbVdpbmRvdwAAAGdldGhvc3Ru + YW1lAFdTQVN0YXJ0dXAAAAAAAABXU0FJTlBST0dSRVNTOiBBbm90aGVyIGJsb2NraW5nIHNvY2tldCBv + cGVyYXRpb24gaXMgaW4gcHJvZ3Jlc3MuAAAAAFdTQU5FVERPV046IE5ldHdvcmsgaXMgZG93bi4AAAAA + V1NBTk9USU5JVElBTElaRUQ6IFdpbnNvY2sgbGlicmFyeSBpcyBub3QgaW5pdGlhbGl6ZWQuAAAAAAAA + AAAAAAAA8D8AAAAAAAAkwLgehetRuJ4/AAAAAAAAJEAAAAAAAAAAAJqZmZmZmbk/AAAAAAAY9UAAAAAA + i5dBQQAAAAAAAOA/iztBkVHPQkEAAAAAxp5CQQBAHwAAQI8+AAAAAAAA8EGuR+HSTWJQQQAA4P///+9B + AAAAAABAj0AAAACA1WxCQQAAAAAAIKxAAAAAAAAATkD/////xwsCEMsLAhAAAAAA/////7EoAhC1KAIQ + AAAAAP////9sQwEQeUMBEAAAAAD/////rUQBELpEARAAAAAA/////+lFARD2RQEQAAAAAP////8vRwEQ + PEcBEAAAAAD/////jUoBEJpKARAAAAAA/////yFLARAuSwEQAAAAAP////+pSwEQtksBEAAAAAD///// + NloBEDpaARAAAAAAAAAAAAAAAEAAAAAAAABZQDRQAxAAAAAAAAAAAP////8AAAAAAAAAAOD8AhAAAAAA + AAAAAAAAAAABAAAA+PwCEAAAAAAAAAAAAAAAADRQAxAA/QIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAABI/QIQAQAAAFD9AhABAAAA6F8DEAAAAAD/////AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAA + fP0CEAEAAACE/QIQAQAAAPRfAxAAAAAA/////wAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAALD9AhABAAAA + uP0CEAEAAAAAYAMQAAAAAP////8AAAAABAAAAAAAAAAAAAAA/////wAAAAD/////AAAAAAAAAADoXwMQ + 2P///0BTAhAAAAAAAAAAAAEAAAABAAAA6P0CECAFkxkCAAAA2P0CEAEAAAD4/QIQAAAAAAAAAAD///// + AAAAAP////8AAAAAAAAAAOhfAxDQ////t1wCEAAAAAAAAAAAAQAAAAEAAAA4/gIQIAWTGQIAAAAo/gIQ + AQAAAEj+AhAAAAAAAAAAAP////8AAAAA/////wAAAAAAAAAA6F8DEOT///9tWAAQAAAAAAAAAAABAAAA + AQAAAIj+AhAgBZMZAgAAAHj+AhABAAAAmP4CEAAAAAAAAAAA/////wAAAAD/////AAAAAAAAAADoXwMQ + 5P///7NzABAAAAAAAAAAAAEAAAABAAAA2P4CECAFkxkCAAAAyP4CEAEAAADo/gIQAAAAAAAAAAD///// + JZMCEAAAAAAAAAAAAAAAAAAAAAAAAAAA6F8DEHT///8TdgAQAQAAAAEAAAACAAAAAQAAADD/AhAgBZMZ + AwAAABj/AhABAAAAQP8CEAAAAAAAAAAA/////zeTAhAAAAAAQpMCECAFkxkCAAAAcP8CEAAAAAAAAAAA + AAAAAAAAAAD/////V5MCEAAAAABikwIQIAWTGQIAAACc/wIQAAAAAAAAAAAAAAAAAAAAAP////8AAAAA + /////wAAAAAAAAAA6F8DENj///90ZAEQAAAAAAAAAAABAAAAAQAAANj/AhAgBZMZAgAAAMj/AhABAAAA + 6P8CEAAAAAAAAAAA/////wAAAAD/////AAAAAAAAAADoXwMQ1P///7ZlARAAAAAAAAAAAAEAAAABAAAA + KAADECAFkxkCAAAAGAADEAEAAAA4AAMQAAAAAAAAAAD/////AAAAAP////8AAAAAAAAAAOhfAxDg//// + t2YBEAAAAAAAAAAAAQAAAAEAAAB4AAMQIAWTGQIAAABoAAMQAQAAAIgAAxAAAAAAAAAAAP////8AAAAA + /////wAAAAAAAAAA6F8DEOD///+4ZwEQAAAAAAAAAAABAAAAAQAAAMgAAxAgBZMZAgAAALgAAxABAAAA + 2AADEAAAAAAAAAAA/////wAAAAD/////AAAAAAAAAADoXwMQ6P///0toARAAAAAAAAAAAAEAAAABAAAA + GAEDECAFkxkCAAAACAEDEAEAAAAoAQMQAAAAAAAAAAD/////AAAAAP////8AAAAAAAAAAOhfAxDc//// + oWkBEAAAAAAAAAAAAQAAAAEAAABoAQMQIAWTGQIAAABYAQMQAQAAAHgBAxAAAAAAAAAAAP////8AAAAA + /////wAAAAAAAAAA6F8DEOj////2aQEQAAAAAAAAAAABAAAAAQAAALgBAxAgBZMZAgAAAKgBAxABAAAA + yAEDEAAAAAAAAAAA/////wAAAAD/////AAAAAAAAAADoXwMQ7P////8DAhAAAAAAAAAAAAEAAAABAAAA + CAIDECAFkxkCAAAA+AEDEAEAAAAYAgMQAAAAAAAAAAD/////AAAAAAAAAADHkwIQ/////wAAAAAAAAAA + 6F8DENT///+LBQIQAAAAAAEAAAACAAAAAQAAAGACAxAgBZMZAwAAAEgCAxABAAAAcAIDEAAAAAAAAAAA + /////wAAAAD/////AAAAAAAAAADoXwMQ4P///wMGAhAAAAAAAAAAAAEAAAABAAAAsAIDECAFkxkCAAAA + oAIDEAEAAADAAgMQAAAAAAAAAAD/////AAAAAP////8AAAAAAAAAAOhfAxDg////zysCEAAAAAAAAAAA + AQAAAAEAAAAAAwMQIAWTGQIAAADwAgMQAQAAABADAxAAAAAAAAAAAP////8AAAAAAAAAAO2TAhABAAAA + +JMCEP////8AAAAAAAAAAOhfAxCw////fi4CEAAAAAACAAAAAwAAAAEAAABgAwMQIAWTGQQAAABAAwMQ + AQAAAHADAxAAAAAAAAAAAP////8AAAAA/////wAAAAAAAAAA6F8DEOD////AMAIQAAAAAAAAAAABAAAA + AQAAALADAxAgBZMZAgAAAKADAxABAAAAwAMDEAAAAAAAAAAA/////wAAAAAAAAAAFJQCEAEAAAAclAIQ + /////wAAAAAAAAAA6F8DELj///8nMwIQAAAAAAIAAAADAAAAAQAAABAEAxAgBZMZBAAAAPADAxABAAAA + IAQDEAAAAAAAAAAA/////wAAAAAAAAAAMZQCEAEAAAA8lAIQAgAAAEeUAhD/////AAAAAAAAAADoXwMQ + 2P///y5SAhAAAAAAAwAAAAQAAAABAAAAeAQDECAFkxkFAAAAUAQDEAEAAACIBAMQAAAAAAAAAAD///// + AAAAAAAAAABZlAIQAQAAAGGUAhD/////AAAAAAAAAADoXwMQ6P///4pWAhAAAAAAAgAAAAMAAAABAAAA + 2AQDECAFkxkEAAAAuAQDEAEAAADoBAMQAAAAAAAAAAD/////AAAAAAAAAAB2lAIQ/////wAAAAAAAAAA + 6F8DENz///9IVwIQAAAAAAEAAAACAAAAAQAAADAFAxAgBZMZAwAAABgFAxABAAAAQAUDEAAAAAAAAAAA + /////wAAAAAAAAAAiJQCEAEAAACQlAIQ/////wAAAAAAAAAA6F8DENz///+5JAAQAAAAAAIAAAADAAAA + AQAAAJAFAxAgBZMZBAAAAHAFAxABAAAAoAUDEAAAAAAAAAAA/////wAAAAAAAAAApZQCEP////8AAAAA + AAAAAOhfAxDo/////10CEAAAAAABAAAAAgAAAAEAAADoBQMQIAWTGQMAAADQBQMQAQAAAPgFAxAAAAAA + AAAAAP////8AAAAAAAAAALeUAhD/////AAAAAAAAAADoXwMQ6P///9leAhAAAAAAAQAAAAIAAAABAAAA + QAYDECAFkxkDAAAAKAYDEAEAAABQBgMQAAAAAAAAAAD/////AAAAAAAAAADJlAIQ/////wAAAAAAAAAA + 6F8DENz////pXwIQAAAAAAEAAAACAAAAAQAAAJgGAxAgBZMZAwAAAIAGAxABAAAAqAYDEAAAAAAAAAAA + /////wAAAAD/////AAAAAAAAAADoXwMQ6P///5BHABAAAAAAAAAAAAEAAAABAAAA6AYDECAFkxkCAAAA + 2AYDEAEAAAD4BgMQAAAAAAAAAAD/////AAAAAAAAAADllAIQAQAAAO2UAhACAAAA+JQCEAMAAAAAlQIQ + /////wAAAAAAAAAA6F8DEBz///9PUAAQAAAAAAQAAAAFAAAAAQAAAFgHAxAgBZMZBgAAACgHAxABAAAA + aAcDEAAAAAAAAAAA/////wAAAAAAAAAAEpUCEAEAAAAdlQIQAgAAACiVAhADAAAAM5UCEAQAAAA+lQIQ + BQAAAEaVAhD/////AAAAAAAAAADoXwMQwP///6FdABAAAAAABgAAAAcAAAABAAAA2AcDECAFkxkIAAAA + mAcDEAEAAADoBwMQAAAAAAAAAAD/////AAAAAAAAAABblQIQAQAAAGaVAhACAAAAcZUCEAMAAAB5lQIQ + BAAAAIGVAhD/////AAAAAAAAAADoXwMQ4P////heABAAAAAABQAAAAYAAAABAAAAUAgDECAFkxkHAAAA + GAgDEAEAAABgCAMQAAAAAAAAAAD/////AAAAAAAAAACTlQIQAQAAAJ6VAhACAAAAqZUCEAMAAACxlQIQ + BAAAALmVAhD/////AAAAAAAAAADoXwMQ4P///x1gABAAAAAABQAAAAYAAAABAAAAyAgDECAFkxkHAAAA + kAgDEAEAAADYCAMQAAAAAAAAAAD/////y5UCEAAAAADTlQIQIAWTGQIAAAAICQMQAAAAAAAAAAAAAAAA + AAAAAP/////llQIQAAAAAO2VAhABAAAA+JUCEAIAAAADlgIQAwAAAAuWAhAEAAAAE5YCECAFkxkGAAAA + NAkDEAAAAAAAAAAAAAAAAAAAAAD/////AAAAAAAAAAAllgIQAQAAAC2WAhD/////AAAAAAAAAADoXwMQ + 6P///zhkAhAAAAAAAgAAAAMAAAABAAAAoAkDECAFkxkEAAAAgAkDEAEAAACwCQMQAAAAAAAAAAD///// + AAAAAAAAAAA/lgIQAQAAAEqWAhACAAAAUpYCEAMAAABalgIQBAAAAGWWAhD/////AAAAAAAAAADoXwMQ + YP////lmAhAAAAAABQAAAAYAAAABAAAAGAoDECAFkxkHAAAA4AkDEAEAAAAoCgMQAAAAAAAAAAD///// + AAAAAAAAAAB3lgIQAQAAAIKWAhACAAAAjZYCEAMAAACVlgIQBAAAAKCWAhD/////AAAAAAAAAADoXwMQ + FP///9VqAhAAAAAABQAAAAYAAAABAAAAkAoDECAFkxkHAAAAWAoDEAEAAACgCgMQAAAAAAAAAAD///// + AAAAAAAAAAC1lgIQAQAAAMCWAhACAAAAy5YCEAMAAADTlgIQBAAAANuWAhD/////AAAAAAAAAADoXwMQ + UP///3VtAhAAAAAABQAAAAYAAAABAAAACAsDECAFkxkHAAAA0AoDEAEAAAAYCwMQAAAAAAAAAAD///// + AAAAAAAAAADwlgIQAQAAAPiWAhACAAAAA5cCEAMAAAAOlwIQ/////wAAAAAAAAAA6F8DEMD////EbwIQ + AAAAAAQAAAAFAAAAAQAAAHgLAxAgBZMZBgAAAEgLAxABAAAAiAsDEAAAAAAAAAAA/////wAAAAAAAAAA + IJcCEAEAAAArlwIQAgAAADaXAhADAAAAPpcCEP////8AAAAAAAAAAOhfAxDM////ZXECEAAAAAAEAAAA + BQAAAAEAAADoCwMQIAWTGQYAAAC4CwMQAQAAAPgLAxAAAAAAAAAAAP////8AAAAAAAAAAFCXAhABAAAA + WJcCEP////8AAAAAAAAAAOhfAxDo////C3ICEAAAAAACAAAAAwAAAAEAAABIDAMQIAWTGQQAAAAoDAMQ + AQAAAFgMAxAAAAAAAAAAAP////8AAAAA/////wAAAAAAAAAA6F8DEOz///+LcgIQAAAAAAAAAAABAAAA + AQAAAJgMAxAgBZMZAgAAAIgMAxABAAAAqAwDEAAAAAAAAAAA/////wAAAAAAAAAAdJcCEAEAAAB/lwIQ + AgAAAIeXAhD/////AAAAAAAAAADoXwMQ5P///21zAhAAAAAAAwAAAAQAAAABAAAAAA0DECAFkxkFAAAA + 2AwDEAEAAAAQDQMQAAAAAAAAAAD/////AAAAAAAAAACZlwIQAQAAAKGXAhACAAAArJcCEP////8AAAAA + AAAAAOhfAxCI////wnEAEAAAAAADAAAABAAAAAEAAABoDQMQIAWTGQUAAABADQMQAQAAAHgNAxAAAAAA + AAAAAP////8AAAAAAAAAAL6XAhABAAAAxpcCEAIAAADRlwIQAwAAANyXAhAEAAAA55cCEAUAAADvlwIQ + /////wAAAAAAAAAA6F8DEMz////7dQIQAAAAAAYAAAAHAAAAAQAAAOgNAxAgBZMZCAAAAKgNAxABAAAA + +A0DEAAAAAAAAAAA/////wAAAAAAAAAAAZgCEAEAAAAJmAIQAgAAABSYAhADAAAAH5gCEAQAAAAnmAIQ + /////wAAAAAAAAAA6F8DEID///+neAIQAAAAAAUAAAAGAAAAAQAAAGAOAxAgBZMZBwAAACgOAxABAAAA + cA4DEAAAAAAAAAAA/////wAAAAAAAAAAOZgCEAEAAABEmAIQAgAAAE+YAhADAAAAWpgCEAQAAABimAIQ + BQAAAGqYAhD/////AAAAAAAAAADoXwMQ/P7//2qDAhAAAAAABgAAAAcAAAABAAAA4A4DECAFkxkIAAAA + oA4DEAEAAADwDgMQAAAAAAAAAAD/////AAAAAAAAAAB/mAIQAQAAAIqYAhACAAAAlZgCEAMAAACgmAIQ + BAAAAKiYAhD/////AAAAAAAAAADoXwMQFP///+KOAhAAAAAABQAAAAYAAAABAAAAWA8DECAFkxkHAAAA + IA8DEAEAAABoDwMQAAAAAAAAAAD/////AAAAAAAAAAC6mAIQAQAAAMWYAhD/////AAAAAAAAAADoXwMQ + xP///6t7ABAAAAAAAgAAAAMAAAABAAAAuA8DECAFkxkEAAAAmA8DEAEAAADIDwMQAAAAAAAAAAD///// + AAAAAAAAAADXmAIQAQAAAOKYAhD/////AAAAAAAAAADoXwMQxP///6p9ABAAAAAAAgAAAAMAAAABAAAA + GBADECAFkxkEAAAA+A8DEAEAAAAoEAMQAAAAAAAAAAD/////AAAAAAAAAAD0mAIQ/////wAAAAAAAAAA + 6F8DEMj///+BfwAQAAAAAAEAAAACAAAAAQAAAHAQAxAgBZMZAwAAAFgQAxABAAAAgBADEAAAAAAAAAAA + /////wAAAAAAAAAACZkCEP////8AAAAAAAAAAOhfAxDI////VIEAEAAAAAABAAAAAgAAAAEAAADIEAMQ + IAWTGQMAAACwEAMQAQAAANgQAxAAAAAAAAAAAP////8AAAAAAAAAAB6ZAhD/////AAAAAAAAAADoXwMQ + yP///yeDABAAAAAAAQAAAAIAAAABAAAAIBEDECAFkxkDAAAACBEDEAEAAAAwEQMQAAAAAAAAAAD///// + AAAAAAAAAAAzmQIQ/////wAAAAAAAAAA6F8DEMT///8MhQAQAAAAAAEAAAACAAAAAQAAAHgRAxAgBZMZ + AwAAAGARAxABAAAAiBEDEAAAAAAAAAAA/////wAAAAAAAAAASJkCEP////8AAAAAAAAAAOhfAxDI//// + 1YYAEAAAAAABAAAAAgAAAAEAAADQEQMQIAWTGQMAAAC4EQMQAQAAAOARAxAAAAAAAAAAAP////9dmQIQ + IAWTGQEAAAAQEgMQAAAAAAAAAAAAAAAAAAAAAP////9vmQIQIAWTGQEAAAA0EgMQAAAAAAAAAAAAAAAA + AAAAAP////+BmQIQIAWTGQEAAABYEgMQAAAAAAAAAAAAAAAAAAAAAP////8AAAAA/////wAAAAAAAAAA + 6F8DEOT////aiQAQAAAAAAAAAAABAAAAAQAAAIwSAxAgBZMZAgAAAHwSAxABAAAAnBIDEAAAAAAAAAAA + /////52ZAhAAAAAApZkCEAEAAACwmQIQIAWTGQMAAADMEgMQAAAAAAAAAAAAAAAAAAAAAP////8AAAAA + AAAAAMKZAhABAAAAzZkCEP////8AAAAAAAAAAOhfAxDU////aIwAEAAAAAACAAAAAwAAAAEAAAAgEwMQ + IAWTGQQAAAAAEwMQAQAAADATAxAAAAAAAAAAAP////8AAAAAAAAAAOKZAhD/////AAAAAAAAAADoXwMQ + qP///36NABAAAAAAAQAAAAIAAAABAAAAeBMDECAFkxkDAAAAYBMDEAEAAACIEwMQAAAAAAAAAAD///// + AAAAAAAAAAD0mQIQAQAAAP+ZAhACAAAACpoCEP////8AAAAAAAAAAOhfAxDc////QI8AEAAAAAADAAAA + BAAAAAEAAADgEwMQIAWTGQUAAAC4EwMQAQAAAPATAxAAAAAAAAAAAP////8AAAAAAAAAAByaAhABAAAA + JJoCEP////8AAAAAAAAAAOhfAxDo////D5AAEAAAAAACAAAAAwAAAAEAAABAFAMQIAWTGQQAAAAgFAMQ + AQAAAFAUAxAAAAAAAAAAAP////8AAAAAAAAAADaaAhABAAAAPpoCEP////8AAAAAAAAAAOhfAxDo//// + sZAAEAAAAAACAAAAAwAAAAEAAACgFAMQIAWTGQQAAACAFAMQAQAAALAUAxAAAAAAAAAAAP////8AAAAA + AAAAAFCaAhABAAAAW5oCEAIAAABmmgIQAwAAAG6aAhD/////AAAAAAAAAADoXwMQ3P///yCSABAAAAAA + BAAAAAUAAAABAAAAEBUDECAFkxkGAAAA4BQDEAEAAAAgFQMQAAAAAAAAAAD/////AAAAAAAAAACAmgIQ + AQAAAIiaAhD/////AAAAAAAAAADoXwMQ6P///8WSABAAAAAAAgAAAAMAAAABAAAAcBUDECAFkxkEAAAA + UBUDEAEAAACAFQMQAAAAAAAAAAD/////AAAAAAAAAACamgIQ/////wAAAAAAAAAA6F8DEOD///+3kwAQ + AAAAAAEAAAACAAAAAQAAAMgVAxAgBZMZAwAAALAVAxABAAAA2BUDEAAAAAAAAAAA/////wAAAAAAAAAA + rJoCEAEAAAC3mgIQAgAAAL+aAhD/////AAAAAAAAAADoXwMQvP///3r3ABAAAAAAAwAAAAQAAAABAAAA + MBYDECAFkxkFAAAACBYDEAEAAABAFgMQAAAAAAAAAAD/////AAAAAAAAAADUmgIQAQAAAN+aAhACAAAA + 6poCEP////8AAAAAAAAAAOhfAxDA////NvsAEAAAAAADAAAABAAAAAEAAACYFgMQIAWTGQUAAABwFgMQ + AQAAAKgWAxAAAAAAAAAAAP////8AAAAAAAAAAPyaAhD/////AAAAAAAAAADoXwMQ7P///9X7ABAAAAAA + AQAAAAIAAAABAAAA8BYDECAFkxkDAAAA2BYDEAEAAAAAFwMQAAAAAAAAAAD/////AAAAAAAAAAAOmwIQ + AQAAABabAhD/////AAAAAAAAAADoXwMQ6P///9j8ABAAAAAAAgAAAAMAAAABAAAAUBcDECAFkxkEAAAA + MBcDEAEAAABgFwMQAAAAAAAAAAD/////AAAAAAAAAAArmwIQ/////wAAAAAAAAAA6F8DEOz///9z/QAQ + AAAAAAEAAAACAAAAAQAAAKgXAxAgBZMZAwAAAJAXAxABAAAAuBcDEAAAAAAAAAAA/////wAAAAAAAAAA + PZsCEAEAAABFmwIQAgAAAFCbAhADAAAAW5sCEAQAAABmmwIQ/////wAAAAAAAAAA6F8DEIz///83AwEQ + AAAAAAUAAAAGAAAAAQAAACAYAxAgBZMZBwAAAOgXAxABAAAAMBgDEAAAAAAAAAAA/////wAAAAAAAAAA + eJsCEAEAAACAmwIQ/////wAAAAAAAAAA6F8DENT///98BQEQAAAAAAIAAAADAAAAAQAAAIAYAxAgBZMZ + BAAAAGAYAxABAAAAkBgDEAAAAAAAAAAA/////wAAAAAAAAAAkpsCEAEAAACamwIQ/////wAAAAAAAAAA + 6F8DENz///+tBgEQAAAAAAIAAAADAAAAAQAAAOAYAxAgBZMZBAAAAMAYAxABAAAA8BgDEAAAAAAAAAAA + /////wAAAAAAAAAArJsCEAEAAAC3mwIQAgAAAMKbAhADAAAAypsCEP////8AAAAAAAAAAOhfAxB4//// + twkBEAAAAAAEAAAABQAAAAEAAABQGQMQIAWTGQYAAAAgGQMQAQAAAGAZAxAAAAAAAAAAAP////8AAAAA + AAAAAN+bAhABAAAA55sCEAIAAADymwIQAwAAAP2bAhAEAAAACJwCEAUAAAATnAIQ/////wAAAAAAAAAA + 6F8DEID///80DAEQAAAAAAYAAAAHAAAAAQAAANAZAxAgBZMZCAAAAJAZAxABAAAA4BkDEAAAAAAAAAAA + /////wAAAAD/////AAAAAAAAAADoXwMQ6P////ZNARAAAAAAAAAAAAEAAAABAAAAIBoDECAFkxkCAAAA + EBoDEAEAAAAwGgMQAAAAAAAAAAD/////AAAAAAAAAAAvnAIQAQAAADecAhACAAAAQpwCEAMAAABNnAIQ + /////wAAAAAAAAAA6F8DEIT///8LVQEQAAAAAAQAAAAFAAAAAQAAAJAaAxAgBZMZBgAAAGAaAxABAAAA + oBoDEAAAAAAAAAAA/////wAAAAAAAAAAZJwCEAEAAABvnAIQ/////wAAAAAAAAAA6F8DENz///8RVgEQ + AAAAAAIAAAADAAAAAQAAAPAaAxAgBZMZBAAAANAaAxABAAAAABsDEAAAAAAAAAAA/////wAAAAAAAAAA + gZwCEP////8AAAAAAAAAAOhfAxDs////uXABEAAAAAABAAAAAgAAAAEAAABIGwMQIAWTGQMAAAAwGwMQ + AQAAAFgbAxAAAAAAAAAAAP////8AAAAA/////wAAAAAAAAAA6F8DENj///9PcgEQAAAAAAAAAAABAAAA + AQAAAJgbAxAgBZMZAgAAAIgbAxABAAAAqBsDEAAAAAAAAAAA/////wAAAAD/////AAAAAAAAAADoXwMQ + 5P///0lzARAAAAAAAAAAAAEAAAABAAAA6BsDECAFkxkCAAAA2BsDEAEAAAD4GwMQAAAAAAAAAAD///// + AAAAAP////8AAAAAAAAAAOhfAxDg////S3QBEAAAAAAAAAAAAQAAAAEAAAA4HAMQIAWTGQIAAAAoHAMQ + AQAAAEgcAxAAAAAAAAAAAP////8AAAAAAAAAALGcAhD/////AAAAAAAAAADoXwMQ0P///7d1ARAAAAAA + AQAAAAIAAAABAAAAkBwDECAFkxkDAAAAeBwDEAEAAACgHAMQAAAAAAAAAAD/////AAAAAP////8AAAAA + AAAAAOhfAxDg////q3YBEAAAAAAAAAAAAQAAAAEAAADgHAMQIAWTGQIAAADQHAMQAQAAAPAcAxAAAAAA + AAAAAP////8AAAAA/////wAAAAAAAAAA6F8DEOT///9odwEQAAAAAAAAAAABAAAAAQAAADAdAxAgBZMZ + AgAAACAdAxABAAAAQB0DEAAAAAAAAAAA/////wAAAAAAAAAA15wCEAEAAADfnAIQ/////wAAAAAAAAAA + 6F8DENT///9leAEQAAAAAAIAAAADAAAAAQAAAJAdAxAgBZMZBAAAAHAdAxABAAAAoB0DEAAAAAAAAAAA + /////wAAAAAAAAAA8ZwCEAEAAAD5nAIQ/////wAAAAAAAAAA6F8DENj///9ueQEQAAAAAAIAAAADAAAA + AQAAAPAdAxAgBZMZBAAAANAdAxABAAAAAB4DEAAAAAAAAAAA/////wudAhAAAAAAE50CECAFkxkCAAAA + MB4DEAAAAAAAAAAAAAAAAAAAAAD/////JZ0CEAAAAAAwnQIQAQAAADidAhACAAAAQJ0CECAFkxkEAAAA + XB4DEAAAAAAAAAAAAAAAAAAAAAD/////AAAAAAAAAABSnQIQAQAAAFqdAhD/////AAAAAAAAAADoXwMQ + 5P///8p8ARAAAAAAAgAAAAMAAAABAAAAuB4DECAFkxkEAAAAmB4DEAEAAADIHgMQAAAAAAAAAAD///// + AAAAAAAAAABsnQIQ/////wAAAAAAAAAA6F8DEOj///9efQEQAAAAAAEAAAACAAAAAQAAABAfAxAgBZMZ + AwAAAPgeAxABAAAAIB8DEAAAAAAAAAAA/////wAAAAAAAAAAfp0CEP////8AAAAAAAAAAOhfAxDo//// + 8n0BEAAAAAABAAAAAgAAAAEAAABoHwMQIAWTGQMAAABQHwMQAQAAAHgfAxAAAAAAAAAAAP////8AAAAA + AAAAAJCdAhABAAAAmJ0CEAIAAACjnQIQ/////wAAAAAAAAAA6F8DEIT///9UgAEQAAAAAAMAAAAEAAAA + AQAAANAfAxAgBZMZBQAAAKgfAxABAAAA4B8DEAAAAAAAAAAA/////wAAAAAAAAAAtZ0CEAEAAADAnQIQ + AgAAAMudAhADAAAA1p0CEAQAAADhnQIQBQAAAOydAhD/////AAAAAAAAAADoXwMQ4P///wSDARAAAAAA + BgAAAAcAAAABAAAAUCADECAFkxkIAAAAECADEAEAAABgIAMQAAAAAAAAAAD/////AAAAAAAAAAABngIQ + AQAAAAyeAhACAAAAF54CEAMAAAAingIQBAAAAC2eAhAFAAAAOJ4CEAYAAABDngIQBwAAAE6eAhD///// + AAAAAAAAAADoXwMQWP////6GARAAAAAACAAAAAkAAAABAAAA4CADECAFkxkKAAAAkCADEAEAAADwIAMQ + AAAAAAAAAAD/////AAAAAAAAAABgngIQAQAAAGueAhACAAAAdp4CEAMAAACBngIQBAAAAIyeAhAFAAAA + lJ4CEP////8AAAAAAAAAAOhfAxCs////h4kBEAAAAAAGAAAABwAAAAEAAABgIQMQIAWTGQgAAAAgIQMQ + AQAAAHAhAxAAAAAAAAAAAP////8AAAAAAAAAAKaeAhABAAAAsZ4CEP////8AAAAAAAAAAOhfAxDM//// + kIoBEAAAAAACAAAAAwAAAAEAAADAIQMQIAWTGQQAAACgIQMQAQAAANAhAxAAAAAAAAAAAP////8AAAAA + AAAAAMaeAhABAAAA0Z4CEP////8AAAAAAAAAAOhfAxDM////kIsBEAAAAAACAAAAAwAAAAEAAAAgIgMQ + IAWTGQQAAAAAIgMQAQAAADAiAxAAAAAAAAAAAP////8AAAAAAAAAAOaeAhD/////AAAAAAAAAADoXwMQ + zP///2qMARAAAAAAAQAAAAIAAAABAAAAeCIDECAFkxkDAAAAYCIDEAEAAACIIgMQAAAAAAAAAAD///// + AAAAAAAAAAD7ngIQAQAAAAafAhD/////AAAAAAAAAADoXwMQzP///2yNARAAAAAAAgAAAAMAAAABAAAA + 2CIDECAFkxkEAAAAuCIDEAEAAADoIgMQAAAAAAAAAAD/////AAAAAAAAAAAbnwIQ/////wAAAAAAAAAA + 6F8DEOT///81jgEQAAAAAAEAAAACAAAAAQAAADAjAxAgBZMZAwAAABgjAxABAAAAQCMDEAAAAAAAAAAA + /////wAAAAAAAAAALZ8CEP////8AAAAAAAAAAOhfAxDs////mY4BEAAAAAABAAAAAgAAAAEAAACIIwMQ + IAWTGQMAAABwIwMQAQAAAJgjAxAAAAAAAAAAAP////8AAAAAAAAAAD+fAhD/////AAAAAAAAAADoXwMQ + 7P///wWPARAAAAAAAQAAAAIAAAABAAAA4CMDECAFkxkDAAAAyCMDEAEAAADwIwMQAAAAAAAAAAD///// + AAAAAAAAAABRnwIQAQAAAFmfAhD/////AAAAAAAAAADoXwMQ7P///5aPARAAAAAAAgAAAAMAAAABAAAA + QCQDECAFkxkEAAAAICQDEAEAAABQJAMQAAAAAAAAAAD/////a58CEAAAAABznwIQAQAAAHufAhAgBZMZ + AwAAAIAkAxAAAAAAAAAAAAAAAAAAAAAA/////wAAAAAAAAAAjZ8CEAEAAACVnwIQAgAAAKCfAhD///// + AAAAAAAAAADoXwMQ5P////GTARAAAAAAAwAAAAQAAAABAAAA3CQDECAFkxkFAAAAtCQDEAEAAADsJAMQ + AAAAAAAAAAD/////AAAAAAAAAACynwIQAQAAALqfAhACAAAAxZ8CEP////8AAAAAAAAAAOhfAxDo//// + E5UBEAAAAAADAAAABAAAAAEAAABEJQMQIAWTGQUAAAAcJQMQAQAAAFQlAxAAAAAAAAAAAP////8AAAAA + AAAAANefAhABAAAA358CEP////8AAAAAAAAAAOhfAxDo////w5UBEAAAAAACAAAAAwAAAAEAAACkJQMQ + IAWTGQQAAACEJQMQAQAAALQlAxAAAAAAAAAAAP////8AAAAAAAAAAPGfAhABAAAA+Z8CEP////8AAAAA + AAAAAOhfAxDk////jZYBEAAAAAACAAAAAwAAAAEAAAAEJgMQIAWTGQQAAADkJQMQAQAAABQmAxAAAAAA + AAAAAP////8AAAAAAAAAAAugAhABAAAAFqACEAIAAAAhoAIQAwAAACmgAhAEAAAAMaACEP////8AAAAA + AAAAAOhfAxC0////0ZgBEAAAAAAFAAAABgAAAAEAAAB8JgMQIAWTGQcAAABEJgMQAQAAAIwmAxAAAAAA + AAAAAP////8AAAAAAAAAAEOgAhD/////AAAAAAAAAADoXwMQ6P///3GZARAAAAAAAQAAAAIAAAABAAAA + 1CYDECAFkxkDAAAAvCYDEAEAAADkJgMQAAAAAAAAAAD/////AAAAAAAAAABVoAIQ/////wAAAAAAAAAA + 6F8DEOj///8HmgEQAAAAAAEAAAACAAAAAQAAACwnAxAgBZMZAwAAABQnAxABAAAAPCcDEAAAAAAAAAAA + /////wAAAAAAAAAAZ6ACEAEAAAByoAIQ/////wAAAAAAAAAA6F8DENz///9lmwEQAAAAAAIAAAADAAAA + AQAAAIwnAxAgBZMZBAAAAGwnAxABAAAAnCcDEAAAAAAAAAAA/////wAAAAAAAAAAhKACEAEAAACPoAIQ + /////wAAAAAAAAAA6F8DEGD///+EngEQAAAAAAIAAAADAAAAAQAAAOwnAxAgBZMZBAAAAMwnAxABAAAA + /CcDEAAAAAAAAAAA/////wAAAAAAAAAAoaACEAEAAACsoAIQ/////wAAAAAAAAAA6F8DEJz////HoAEQ + AAAAAAIAAAADAAAAAQAAAEwoAxAgBZMZBAAAACwoAxABAAAAXCgDEAAAAAAAAAAA/////wAAAAAAAAAA + vqACEAEAAADJoAIQAgAAANSgAhD/////AAAAAAAAAADoXwMQaP///5+jARAAAAAAAwAAAAQAAAABAAAA + tCgDECAFkxkFAAAAjCgDEAEAAADEKAMQAAAAAAAAAAD/////AAAAAAAAAADmoAIQAQAAAPGgAhD///// + AAAAAAAAAADoXwMQuP///8ClARAAAAAAAgAAAAMAAAABAAAAFCkDECAFkxkEAAAA9CgDEAEAAAAkKQMQ + AAAAAAAAAAD/////BqECEAAAAAARoQIQIAWTGQIAAABUKQMQAAAAAAAAAAAAAAAAAAAAAP////8AAAAA + AAAAACOhAhABAAAALqECEAIAAAA5oQIQ/////wAAAAAAAAAA6F8DEMT///9jqAEQAAAAAAMAAAAEAAAA + AQAAAKgpAxAgBZMZBQAAAIApAxABAAAAuCkDEAAAAAAAAAAA/////wAAAAAAAAAAS6ECEP////8AAAAA + AAAAAOhfAxDk////27IBEAAAAAABAAAAAgAAAAEAAAAAKgMQIAWTGQMAAADoKQMQAQAAABAqAxAAAAAA + AAAAAP////8AAAAAAAAAAF2hAhABAAAAZaECEAIAAABwoQIQAwAAAHihAhD/////AAAAAAAAAADoXwMQ + eP///9q1ARAAAAAABAAAAAUAAAABAAAAcCoDECAFkxkGAAAAQCoDEAEAAACAKgMQAAAAAAAAAAD///// + AAAAAP////8AAAAA/////wAAAAD/////AAAAAAAAAADoXwMQAAAAAB4SAhAAAAAAAAAAAAEAAAABAAAA + 0CoDECAFkxkEAAAAsCoDEAEAAADgKgMQAAAAAAAAAAD/////AAAAAP////8AAAAAAAAAAOhfAxDc//// + lRMCEAAAAAAAAAAAAQAAAAEAAAAgKwMQIAWTGQIAAAAQKwMQAQAAADArAxAAAAAAAAAAAP////8AAAAA + AAAAAJ6hAhABAAAAqaECEAIAAACxoQIQ/////wAAAAAAAAAA6F8DEOT///8CJgAQAAAAAAMAAAAEAAAA + AQAAAIgrAxAgBZMZBQAAAGArAxABAAAAmCsDEAAAAAAAAAAA/////wAAAAAAAAAAxqECEAEAAADOoQIQ + AgAAANmhAhADAAAA5KECEAQAAADvoQIQBQAAAPehAhD/////AAAAAAAAAADoXwMQcP///81nABAAAAAA + BgAAAAcAAAABAAAACCwDECAFkxkIAAAAyCsDEAEAAAAYLAMQAAAAAAAAAAD/////AAAAAAAAAAAJogIQ + AQAAABSiAhACAAAAH6ICEAMAAAAnogIQBAAAAC+iAhD/////AAAAAAAAAADoXwMQ3P///1tpABAAAAAA + BQAAAAYAAAABAAAAgCwDECAFkxkHAAAASCwDEAEAAACQLAMQAAAAAAAAAAD/////AAAAAAAAAABBogIQ + AQAAAEyiAhACAAAAV6ICEAMAAABfogIQBAAAAGeiAhD/////AAAAAAAAAADoXwMQ3P///+ZqABAAAAAA + BQAAAAYAAAABAAAA+CwDECAFkxkHAAAAwCwDEAEAAAAILQMQAAAAAAAAAAD/////AAAAAAAAAAB5ogIQ + AQAAAISiAhACAAAAjKICEAMAAACXogIQBAAAAJ+iAhD/////AAAAAAAAAADoXwMQ2P///6VsABAAAAAA + BQAAAAYAAAABAAAAcC0DECAFkxkHAAAAOC0DEAEAAACALQMQAAAAAAAAAAD/////AAAAAAAAAACxogIQ + AQAAALyiAhACAAAAx6ICEAMAAADSogIQBAAAAN2iAhAFAAAA5aICEAYAAADtogIQ/////wAAAAAAAAAA + 6F8DEMj////QbgAQAAAAAAcAAAAIAAAAAQAAAPgtAxAgBZMZCQAAALAtAxABAAAACC4DEAAAAAAAAAAA + /////wAAAAAAAAAA/6ICEP////8AAAAAAAAAAOhfAxDI////dpUAEAAAAAABAAAAAgAAAAEAAABQLgMQ + IAWTGQMAAAA4LgMQAQAAAGAuAxAAAAAAAAAAAP////8AAAAAAAAAABSjAhABAAAAH6MCEAIAAAAqowIQ + AwAAADWjAhAEAAAAPaMCEAUAAABFowIQ/////wAAAAAAAAAA6F8DELT///83mQAQAAAAAAYAAAAHAAAA + AQAAANAuAxAgBZMZCAAAAJAuAxABAAAA4C4DEAAAAAAAAAAA/////wAAAAAAAAAAV6MCEAEAAABfowIQ + AgAAAGqjAhD/////AAAAAAAAAADoXwMQ4P///yH/ABAAAAAAAwAAAAQAAAABAAAAOC8DECAFkxkFAAAA + EC8DEAEAAABILwMQAAAAAAAAAAD/////AAAAAAAAAAB/owIQAQAAAIejAhACAAAAkqMCEP////8AAAAA + AAAAAOhfAxDc////tQABEAAAAAADAAAABAAAAAEAAACgLwMQIAWTGQUAAAB4LwMQAQAAALAvAxAAAAAA + AAAAAP////8AAAAAAAAAAKejAhD/////AAAAAAAAAADoXwMQ6P///1ZPARAAAAAAAQAAAAIAAAABAAAA + +C8DECAFkxkDAAAA4C8DEAEAAAAIMAMQAAAAAAAAAAD/////AAAAAAAAAAC5owIQAQAAAMSjAhACAAAA + z6MCEAMAAADaowIQBAAAAOWjAhAFAAAA7aMCEAYAAAD4owIQBwAAAACkAhD/////AAAAAAAAAADoXwMQ + MP///0OvARAAAAAACAAAAAkAAAABAAAAiDADECAFkxkKAAAAODADEAEAAACYMAMQAAAAAAAAAAD///// + AAAAAAAAAAASpAIQAQAAABqkAhACAAAAJaQCEP////8AAAAAAAAAAOhfAxCg////c7cBEAAAAAADAAAA + BAAAAAEAAADwMAMQIAWTGQUAAADIMAMQAQAAAAAxAxAAAAAAAAAAAP////8AAAAAAAAAADqkAhABAAAA + QqQCEP////8AAAAAAAAAAOhfAxDg////BbkBEAAAAAACAAAAAwAAAAEAAABQMQMQIAWTGQQAAAAwMQMQ + AQAAAGAxAxAAAAAAAAAAAP////8AAAAAAAAAAFekAhABAAAAYqQCEAIAAABqpAIQ/////wAAAAAAAAAA + 6F8DEOD///+OugEQAAAAAAMAAAAEAAAAAQAAALgxAxAgBZMZBQAAAJAxAxABAAAAyDEDEAAAAAAAAAAA + /////wAAAAAAAAAAfKQCEAEAAACHpAIQ/////wAAAAAAAAAA6F8DEOT////tuwEQAAAAAAIAAAADAAAA + AQAAABgyAxAgBZMZBAAAAPgxAxABAAAAKDIDEAAAAAAAAAAA/////wAAAAAAAAAAmaQCEP////8AAAAA + AAAAAOhfAxDo////Ar0BEAAAAAABAAAAAgAAAAEAAABwMgMQIAWTGQMAAABYMgMQAQAAAIAyAxAAAAAA + AAAAAP////8AAAAAAAAAAK6kAhD/////AAAAAAAAAADoXwMQ4P///+W+ARAAAAAAAQAAAAIAAAABAAAA + yDIDECAFkxkDAAAAsDIDEAEAAADYMgMQAAAAAAAAAAD/////AAAAAAAAAADDpAIQAQAAAMukAhD///// + AAAAAAAAAADoXwMQ2P///4HAARAAAAAAAgAAAAMAAAABAAAAKDMDECAFkxkEAAAACDMDEAEAAAA4MwMQ + AAAAAAAAAAD/////AAAAAAAAAADdpAIQAQAAAOWkAhACAAAA8KQCEP////8AAAAAAAAAAOhfAxCQ//// + tcIBEAAAAAADAAAABAAAAAEAAACQMwMQIAWTGQUAAABoMwMQAQAAAKAzAxAAAAAAAAAAAP////8AAAAA + AAAAAAKlAhABAAAADaUCEP////8AAAAAAAAAAOhfAxDY////ocQBEAAAAAACAAAAAwAAAAEAAADwMwMQ + IAWTGQQAAADQMwMQAQAAAAA0AxAAAAAAAAAAAP////8AAAAAAAAAAB+lAhABAAAAJ6UCEAIAAAAypQIQ + /////wAAAAAAAAAA6F8DEJD////7xgEQAAAAAAMAAAAEAAAAAQAAAFg0AxAgBZMZBQAAADA0AxABAAAA + aDQDEAAAAAAAAAAA/////wAAAAAAAAAARKUCEP////8AAAAAAAAAAOhfAxDs////88cBEAAAAAABAAAA + AgAAAAEAAACwNAMQIAWTGQMAAACYNAMQAQAAAMA0AxAAAAAAAAAAAP////8AAAAAAAAAAFmlAhABAAAA + YaUCEP////8AAAAAAAAAAOhfAxCk////Ts0BEAAAAAACAAAAAwAAAAEAAAAQNQMQIAWTGQQAAADwNAMQ + AQAAACA1AxAAAAAAAAAAAP////8AAAAAAAAAAHalAhD/////AAAAAAAAAADoXwMQzP///27PARAAAAAA + AQAAAAIAAAABAAAAaDUDECAFkxkDAAAAUDUDEAEAAAB4NQMQAAAAAAAAAAD/////AAAAAAAAAACLpQIQ + /////wAAAAAAAAAA6F8DEOT///+W0AEQAAAAAAEAAAACAAAAAQAAAMA1AxAgBZMZAwAAAKg1AxABAAAA + 0DUDEAAAAAAAAAAA/////wAAAAAAAAAAoKUCEP////8AAAAAAAAAAOhfAxDk////qtEBEAAAAAABAAAA + AgAAAAEAAAAYNgMQIAWTGQMAAAAANgMQAQAAACg2AxAAAAAAAAAAAP////8AAAAAAAAAALWlAhABAAAA + wKUCEAIAAADLpQIQ/////wAAAAAAAAAA6F8DEJz////8HAIQAAAAAAMAAAAEAAAAAQAAAIA2AxAgBZMZ + BQAAAFg2AxABAAAAkDYDEAAAAAAAAAAA/////wAAAAAAAAAA4KUCEAEAAADopQIQ/////wAAAAAAAAAA + 6F8DELT///81KAIQAAAAAAIAAAADAAAAAQAAAOA2AxAgBZMZBAAAAMA2AxABAAAA8DYDEAAAAAAAAAAA + /////wAAAAAAAAAA/aUCEAEAAAAIpgIQAgAAABOmAhD/////AAAAAAAAAADoXwMQ2P///0lKABAAAAAA + AwAAAAQAAAABAAAASDcDECAFkxkFAAAAIDcDEAEAAABYNwMQAAAAAAAAAAD/////AAAAAAAAAAAlpgIQ + /////wAAAAAAAAAA6F8DEMj////FmgAQAAAAAAEAAAACAAAAAQAAAKA3AxAgBZMZAwAAAIg3AxABAAAA + sDcDEAAAAAAAAAAA/////wAAAAAAAAAAOqYCEAEAAABFpgIQAgAAAFCmAhADAAAAW6YCEAQAAABmpgIQ + BQAAAHGmAhD/////AAAAAAAAAADoXwMQxP///xajABAAAAAABgAAAAcAAAABAAAAIDgDECAFkxkIAAAA + 4DcDEAEAAAAwOAMQAAAAAAAAAAD/////AAAAAAAAAACDpgIQAQAAAI6mAhACAAAAmaYCEAMAAACkpgIQ + BAAAAK+mAhD/////AAAAAAAAAADoXwMQ1P///7elABAAAAAABQAAAAYAAAABAAAAmDgDECAFkxkHAAAA + YDgDEAEAAACoOAMQAAAAAAAAAAD0PAMAAAAAAAAAAAByPgMA8LICAEg+AwAAAAAAAAAAAJQ+AwBEtAIA + rD0DAAAAAAAAAAAAoD4DAKizAgA8OgMAAAAAAAAAAADWRAMAOLACAAA9AwAAAAAAAAAAACxHAwD8sgIA + NDoDAAAAAAAAAAAAREcDADCwAgCUPQMAAAAAAAAAAACgRwMAkLMCAPA9AwAAAAAAAAAAAO5HAwDsswIA + BDoDAAAAAAAAAAAAwkgDAACwAgDkPAMAAAAAAAAAAAASSQMA4LICAAA+AwAAAAAAAAAAAHpKAwD8swIA + qDwDAAAAAAAAAAAAhEoDAKSyAgBEPAMAAAAAAAAAAACSSgMAQLICALQ7AwAAAAAAAAAAAKJLAwCwsQIA + AAAAAAAAAAAAAAAAAAAAAAAAAACeSAMAskgDAB5IAwD8RwMAjEgDAHxIAwBsSAMAWEgDAEZIAwAOSAMA + OEgDAAAAAAA4RwMAAAAAAE5MAwBaTAMAaEwDAH5MAwA0TAMAQEwDAMxEAwCsPgMAvj4DAM4+AwDgPgMA + 9D4DAAQ/AwAaPwMAOD8DAEQ/AwBUPwMAcj8DAIw/AwCsPwMAxD8DANI/AwDiPwMA7j8DAPo/AwAIQAMA + FkADAChAAwA+QAMAVkADAGxAAwCEQAMAnkADALRAAwDOQAMA3EADAPJAAwAAQQMAGkEDACxBAwA8QQMA + UkEDAGBBAwBuQQMAgEEDAJBBAwCeQQMAskEDAL5BAwDaQQMA6EEDAABCAwAMQgMAHEIDADJCAwA+QgMA + VEIDAGhCAwB8QgMAkEIDAKJCAwC2QgMAxEIDANpCAwDmQgMA8kIDAAJDAwAQQwMALkMDADxDAwBYQwMA + cEMDAIhDAwCWQwMAokMDALBDAwC+QwMAykMDANpDAwDmQwMA9EMDABREAwAkRAMANEQDADxEAwBMRAMA + XEQDAHZEAwCIRAMAlkQDAKREAwCwRAMABEQDAAAAAACMSwMAlksDAIRLAwB6SwMAbksDAGRLAwBcSwMA + TEsDAEJLAwA4SwMALEsDACJLAwAaSwMACksDAABLAwD2SgMA7koDAORKAwDaSgMA0koDAMhKAwC4SgMA + qEoDAJ5KAwCuSwMAxksDANRLAwDeSwMA6ksDAPpLAwAMTAMAIEwDAKZMAwCyTAMAyEwDAAAAAAAmAACA + CAAAgEgAAIA5AACASgAAgDAAAIAfAACAGAAAgEkAAIArAACAGwAAgEcAAIAkAACALQAAgCAAAIAUAACA + CwAAgCcAAIAEAACAEgAAgA0AAIAxAACAEAAAgD0AAIAAAAAAGAAAgAIAAIAJAACABwAAgJsBAICWAACA + FwAAgAYAAIAhAACAwgAAgMAAAIAIAACADwAAgCIAAIAAAAAA+kgDAOZIAwDQSAMAAAAAAFA+AwBiPgMA + AAAAAEBGAwCYTAMAjEwDAOREAwD0RAMABkUDABhFAwAsRQMAPkUDAFJFAwBiRQMAckUDAIZFAwCYRQMA + rEUDALxFAwDORQMA4EUDAPBFAwAARgMAEkYDAC5GAwCmRgMAUkYDAGRGAwByRgMAfkYDAIpGAwAcRwMA + FEcDAAhHAwDyRgMA4kYDAMpGAwC2RgMAlkYDAAAAAABaRwMAakcDAIBHAwCQRwMATkcDAAAAAAALAACA + DAAAgBMAAIADAACAFwAAgBAAAIAJAACAbwAAgBIAAIAIAACADgAAgAQAAIB0AACAcwAAgDkAAIA0AACA + AAAAAK5HAwDWRwMAwkcDAAAAAADGSQMAskkDAKBJAwCQSQMA1kkDAGxJAwBaSQMARkkDAC5JAwAeSQMA + DkoDAEJKAwB+SQMAIEoDAP5JAwBUSgMAZkoDAAAAAAB+PgMAAAAAAEsAUGF0aElzU2FtZVJvb3RBAIwA + U0hEZWxldGVLZXlBAABTSExXQVBJLmRsbABBAFVSTERvd25sb2FkVG9GaWxlQQAAdXJsbW9uLmRsbAAA + V1MyXzMyLmRsbAAA6gBGb3JtYXRNZXNzYWdlQQAAaQFHZXRMYXN0RXJyb3IAADUCSXNWYWxpZENvZGVQ + YWdlAHcBR2V0TW9kdWxlSGFuZGxlQQAA3wFHZXRWZXJzaW9uRXhBAIMDV2FpdEZvclNpbmdsZU9iamVj + dADGAEZpbmRDbG9zZUNoYW5nZU5vdGlmaWNhdGlvbgAJA1NldEV2ZW50AABJAENyZWF0ZUV2ZW50QQAA + 0gBGaW5kTmV4dENoYW5nZU5vdGlmaWNhdGlvbgAAgQNXYWl0Rm9yTXVsdGlwbGVPYmplY3RzAADHAEZp + bmRGaXJzdENoYW5nZU5vdGlmaWNhdGlvbkEAAHoARGVsZXRlQ3JpdGljYWxTZWN0aW9uAC4AQ2xvc2VI + YW5kbGUAaQBDcmVhdGVUaHJlYWQAAAYCSGVhcEFsbG9jAAwCSGVhcEZyZWUAAAoCSGVhcERlc3Ryb3kA + CAJIZWFwQ3JlYXRlAAB5A1ZpcnR1YWxQcm90ZWN0AAA+AUdldEN1cnJlbnRUaHJlYWRJZAAATANTeXN0 + ZW1UaW1lVG9GaWxlVGltZQAAhwNXaWRlQ2hhclRvTXVsdGlCeXRlALwARmlsZVRpbWVUb1N5c3RlbVRp + bWUAANgBR2V0VGltZVpvbmVJbmZvcm1hdGlvbgAAawJNdWx0aUJ5dGVUb1dpZGVDaGFyALsARmlsZVRp + bWVUb0xvY2FsRmlsZVRpbWUA7wBGcmVlTGlicmFyeQCeAEVudW1SZXNvdXJjZVR5cGVzQQAAegJPcGVu + UHJvY2VzcwCaAEVudW1SZXNvdXJjZUxhbmd1YWdlc0EAAJgBR2V0UHJvY0FkZHJlc3MAAEgCTG9hZExp + YnJhcnlBAACcAEVudW1SZXNvdXJjZU5hbWVzQQAATQBDcmVhdGVGaWxlQQBbAUdldEZpbGVTaXplAA4D + U2V0RmlsZVBvaW50ZXIAAAMDU2V0RW5kT2ZGaWxlAABhA1VubG9ja0ZpbGUAAHABR2V0TG9naWNhbERy + aXZlcwAAWQJMb2NrRmlsZQAAsgBFeHBhbmRFbnZpcm9ubWVudFN0cmluZ3NBABIDU2V0RmlsZVRpbWUA + 6QFHZXRXaW5kb3dzRGlyZWN0b3J5QQAAlANXcml0ZUZpbGUASwFHZXREcml2ZVR5cGVBAFYBR2V0Rmls + ZUF0dHJpYnV0ZXNBAACpAlJlYWRGaWxlAAC5AUdldFN5c3RlbURpcmVjdG9yeUEA5QBGbHVzaEZpbGVC + dWZmZXJzAACtAUdldFNob3J0UGF0aE5hbWVBAEUAQ3JlYXRlRGlyZWN0b3J5QQAAyQBGaW5kRmlyc3RG + aWxlQQAAuAJSZW1vdmVEaXJlY3RvcnlBAABaAkxvY2tGaWxlRXgAAAwDU2V0RmlsZUF0dHJpYnV0ZXNB + AADFAEZpbmRDbG9zZQBkAk1vdmVGaWxlQQDTAEZpbmROZXh0RmlsZUEAXQFHZXRGaWxlVGltZQBaAUdl + dEZpbGVJbmZvcm1hdGlvbkJ5SGFuZGxlAAB8AERlbGV0ZUZpbGVBABkCSW5pdGlhbGl6ZUNyaXRpY2Fs + U2VjdGlvbgBHAkxlYXZlQ3JpdGljYWxTZWN0aW9uAACPAEVudGVyQ3JpdGljYWxTZWN0aW9uAAAQAkhl + YXBSZUFsbG9jALwDbHN0cmxlbkEAAPkBR2xvYmFsTG9jawAA7gFHbG9iYWxBbGxvYwC9A2xzdHJsZW5X + AAAAAkdsb2JhbFVubG9jawAAEgJIZWFwU2l6ZQAA9QFHbG9iYWxGcmVlAAD8AUdsb2JhbFJlQWxsb2MA + HgNTZXRMb2NhbFRpbWUAACwDU2V0U3lzdGVtVGltZQDVAUdldFRpY2tDb3VudAAARwNTbGVlcAC+AUdl + dFN5c3RlbVRpbWUAawFHZXRMb2NhbFRpbWUAAFACTG9jYWxGaWxlVGltZVRvRmlsZVRpbWUAmwFHZXRQ + cm9jZXNzSGVhcAAAVwNUbHNTZXRWYWx1ZQBWA1Rsc0dldFZhbHVlAFQDVGxzQWxsb2MAAIQARGlzYWJs + ZVRocmVhZExpYnJhcnlDYWxscwBVA1Rsc0ZyZWUAS0VSTkVMMzIuZGxsAAABAlBvc3RNZXNzYWdlQQAA + jgBEZWZXaW5kb3dQcm9jQQAAYABDcmVhdGVXaW5kb3dFeEEAswJVbnJlZ2lzdGVyQ2xhc3NBAAD3AEdl + dENsYXNzSW5mb0V4QQAXAlJlZ2lzdGVyQ2xhc3NFeEEAAJkARGVzdHJveVdpbmRvdwD6AEdldENsYXNz + TG9uZ0EA2wBFbnVtVGhyZWFkV2luZG93cwAbAENhbGxXaW5kb3dQcm9jQQDLAEVudW1DaGlsZFdpbmRv + d3MAAEcCU2V0Q2xhc3NMb25nQQBuAUdldFdpbmRvd0xvbmdBAACAAlNldFdpbmRvd0xvbmdBAAA7AlNl + bmRNZXNzYWdlQQAACwFHZXRDdXJzb3JQb3MAADECU2NyZWVuVG9DbGllbnQAAHsBR2V0V2luZG93VGhy + ZWFkUHJvY2Vzc0lkAACxAUlzV2luZG93VmlzaWJsZQCwAUlzV2luZG93VW5pY29kZQB3AUdldFdpbmRv + d1RleHRBAADeAEVudW1XaW5kb3dzAEUBR2V0UGFyZW50ALIBSXNab29tZWQAAKYBSXNJY29uaWMAANgA + RW51bVByb3BzRXhBAAD8AEdldENsYXNzTmFtZUEAXQFHZXRTeXN0ZW1NZXRyaWNzAACZAlN5c3RlbVBh + cmFtZXRlcnNJbmZvQQCDAlNldFdpbmRvd1BvcwAAPgJTZW5kTWVzc2FnZVRpbWVvdXRBACoCUmVsZWFz + ZURDAAwBR2V0REMAdAFHZXRXaW5kb3dSZWN0AFVTRVIzMi5kbGwAAJwBR2V0UGl4ZWwAAEdESTMyLmRs + bABOAEVudW1Kb2JzQQAbAENsb3NlUHJpbnRlcgAAQQBEZXZpY2VDYXBhYmlsaXRpZXNBAH0AT3BlblBy + aW50ZXJBAABgAEVudW1QcmludGVyc0EAV0lOU1BPT0wuRFJWAAALAEdldFNhdmVGaWxlTmFtZUEAAAkA + R2V0T3BlbkZpbGVOYW1lQQAABABDb21tRGxnRXh0ZW5kZWRFcnJvcgAAY29tZGxnMzIuZGxsAABCAENv + bnRyb2xTZXJ2aWNlAADiAVJlZ09wZW5LZXlFeEEA3wFSZWdOb3RpZnlDaGFuZ2VLZXlWYWx1ZQDJAVJl + Z0Nsb3NlS2V5APkBUmVnU2V0VmFsdWVFeEEAAOwBUmVnUXVlcnlWYWx1ZUV4QQAA0AFSZWdEZWxldGVL + ZXlBANYBUmVnRW51bUtleUV4QQDNAVJlZ0NyZWF0ZUtleUV4QQDnAVJlZ1F1ZXJ5SW5mb0tleUEAANkB + UmVnRW51bVZhbHVlQQBBRFZBUEkzMi5kbGwAAHkAU0hCcm93c2VGb3JGb2xkZXJBAACaAFNIRmlsZU9w + ZXJhdGlvbkEAALsAU0hHZXRQYXRoRnJvbUlETGlzdEEAAFNIRUxMMzIuZGxsAGQAQ29UYXNrTWVtRnJl + ZQCTAEdldFJ1bm5pbmdPYmplY3RUYWJsZQAQAENvQ3JlYXRlSW5zdGFuY2UAAGgAQ29VbmluaXRpYWxp + emUAAAYAQ0xTSURGcm9tUHJvZ0lEAAgAQ0xTSURGcm9tU3RyaW5nAA0BUmVhZENsYXNzU3RnAAA0AVN0 + cmluZ0Zyb21HVUlEMgAiAVN0Z0NyZWF0ZURvY2ZpbGUAAD8BV3JpdGVDbGFzc1N0ZwBFAENvTWFyc2hh + bEludGVyVGhyZWFkSW50ZXJmYWNlSW5TdHJlYW0ADwBDb0NyZWF0ZUd1aWQAAC0BU3RnT3BlblN0b3Jh + Z2UAAC0AQ29HZXRJbnRlcmZhY2VBbmRSZWxlYXNlU3RyZWFtAAA7AENvSW5pdGlhbGl6ZUV4AAAGAVBy + b2dJREZyb21DTFNJRAB6AENyZWF0ZUZpbGVNb25pa2VyAG9sZTMyLmRsbABPTEVBVVQzMi5kbGwAAE9E + QkMzMi5kbGwAAA8Dc3RybmNweQASAD8/M0BZQVhQQVhAWgAAEQA/PzJAWUFQQVhJQFoAAOUCbWVtY3B5 + AACsAmZyZWUAAN8CbWFsbG9jAAC2AV9tc2l6ZQAAiwJhdG9pAAAAA3NwcmludGYA5gJtZW1tb3ZlAB8A + Pz9fVUBZQVBBWElAWgDpAm1vZGYAAAACX3N0cmx3cgDoAV9zbnByaW50ZgAKAl9zdHJ1cHIANAN3Y3Ns + ZW4AACAAPz9fVkBZQVhQQVhAWgCjAmZsb29yAAUDc3RyY2hyAADFAV9wdXJlY2FsbAARA3N0cnJjaHIA + jwJjZWlsAADeAmxvbmdqbXAA4gFfc2V0am1wMwAATVNWQ1I3MS5kbGwAEAA/PzF0eXBlX2luZm9AQFVB + RUBYWgAAawBfX2RsbG9uZXhpdAC4AV9vbmV4aXQAPwFfaW5pdHRlcm0AuwBfYWRqdXN0X2ZkaXYAAEwA + X19DcHBYY3B0RmlsdGVyAPEAX2V4Y2VwdF9oYW5kbGVyMwAALgA/dGVybWluYXRlQEBZQVhYWgBSAkxv + Y2FsRnJlZQBYAkxvY2FsVW5sb2NrAFQCTG9jYWxMb2NrAE4CTG9jYWxBbGxvYwAAdQFHZXRNb2R1bGVG + aWxlTmFtZUEAAGUCTW92ZUZpbGVFeEEA1gJ3c3ByaW50ZkEA3gFNZXNzYWdlQm94QQD+AV9zdHJpY21w + AABEAF9DeHhUaHJvd0V4Y2VwdGlvbgAAUQBfX0N4eEZyYW1lSGFuZGxlcgAAAAAAAAAAAFyrGEUAAAAA + Zk4DAAEAAAAjAAAAIwAAAAhNAwCUTQMAIE4DAOsVAACQLwEApC8BAGgxAQAOMQEAhS8BAJkvAQBbMQEA + AzEBAC0xAQBDMQEAFzEBADkxAQBQMQEAIzEBAF02AQDhNAEA/TQBAMk1AQBRNQEATDYBANI0AQDuNAEA + ujUBAEI1AQAKNQEAfjUBAJ41AQAmNQEAXjUBABk1AQCPNQEArTUBADU1AQBvNQEAck4DAIFOAwCMTgMA + n04DAJZOAwCnTgMAs04DAMhOAwC+TgMA0U4DANxOAwDnTgMA804DAP1OAwAHTwMAEk8DABxPAwAoTwMA + PU8DADNPAwBGTwMAUU8DAF5PAwB1TwMAak8DAH9PAwCNTwMApU8DAJlPAwCwTwMAvU8DAMpPAwDgTwMA + 1U8DAOpPAwAAAAEAAgAEAAMABQAGAAgABwAJAAoACwAMAA0ADgAPABAAEQATABIAFAAVABYAGAAXABkA + GgAcABsAHQAeAB8AIQAgACIAdmZwMmMzMi5mbGwAQERpc3BhdGNoQVBJQDQAUmVhZERvdWJsZQBSZWFk + RmxvYXQAUmVhZEludDgAUmVhZEludABSZWFkUERvdWJsZQBSZWFkUEZsb2F0AFJlYWRQSW50OABSZWFk + UEludABSZWFkUFNob3J0AFJlYWRQVUludDgAUmVhZFBVU2hvcnQAUmVhZFNob3J0AFJlYWRVSW50OABS + ZWFkVVNob3J0AFdyaXRlQ2hhcgBXcml0ZURvdWJsZQBXcml0ZUZsb2F0AFdyaXRlSW50OABXcml0ZUlu + dABXcml0ZVBDaGFyAFdyaXRlUERvdWJsZQBXcml0ZVBGbG9hdABXcml0ZVBJbnQ4AFdyaXRlUEludABX + cml0ZVBQb2ludGVyAFdyaXRlUFNob3J0AFdyaXRlUFVJbnQ4AFdyaXRlUFVJbnQAV3JpdGVQVVNob3J0 + AFdyaXRlUG9pbnRlcgBXcml0ZVNob3J0AFdyaXRlVUludDgAV3JpdGVVSW50AFdyaXRlVVNob3J0AAAA + AAAAAAAAAAAAAAAABKcCEMGmAhDMpgIQ2KYCEO6mAhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEtAIQ + /LUCEAAAAAAuP0FWdHlwZV9pbmZvQEAAAAAAAP////8BAAAAAAAAABEB+FADEAAA//////////////// + /////wAAAAABAAAAAQAAAAEAAAABAAAAAQAAAAAAAAACAAAAAgAAAAEAAAACAAAAAgAAAAAAAAAEAAAA + BAAAAAEAAAAEAAAABAAAAAAAAAAIAAAACAAAAAEAAAAIAAAACAAAAAAAAAAEAAAABAAAAAAAAAAIAAAA + CAAAAAAAAACgDwAAAAAAANTJAhBrUwIQ/v/RyQIQyMkCEGNYAhD9/9HJAhC8yQIQpVgCEAEAuMkCEKzJ + AhA8UgIQAgCoyQIQnMkCEH1LARABALjJAhCQyQIQ3UoBEAIAjMkCEIDJAhBJSgEQAgCMyQIQeMkCEBFK + ARABALjJAhBsyQIQ00kBEAEAuMkCEFzJAhBRSQEQAwBYyQIQTMkCEC1JARABALjJAhBAyQIQBkkBEAEA + uMkCEDTJAhDlSAEQAADRyQIQKMkCEDpOARABACTJAhAUyQIQrUgBEAEAuMkCEAjJAhCASAEQAQC4yQIQ + +MgCEEVIARACAIzJAhDsyAIQD0gBEAEAuMkCENzIAhDMRwEQAQC4yQIQzMgCENtGARACAMjIAhC4yAIQ + fUUBEAIAtMgCEKTIAhC3MgEQAwCcyAIQjMgCEFNEARADAJzIAhB8yAIQ/EIBEAMAdMgCEGTIAhB+QgEQ + BABcyAIQUMgCEBM2ARADAJzIAhBEyAIQ1jUBEAMAnMgCEDjIAhBpMgEQAwCcyAIQKMgCEGAyARACACTI + AhAUyAIQVTIBEAIAJMgCEAjIAhBuNAEQAgC0yAIQ/McCEAg0ARACALTIAhDwxwIQpDMBEAIAtMgCEODH + AhA+MwEQAgC0yAIQ1McCEOcxARABALjJAhDIxwIQczEBEAEAuMkCELzHAhDEMAEQAQC4yQIQsMcCEIMw + ARABALjJAhCkxwIQxDABEAEAuMkCEJTHAhCDMAEQAQC4yQIQgMcCEGIwARABALjJAhBsxwIQPzABEAEA + uMkCEFjHAhD3LwEQAQC4yQIQRMcCEK0vARABALjJAhA4xwIQbS8BEAEAuMkCECjHAhDWLgEQAQC4yQIQ + GMcCEPAuARACAIzJAhAMxwIQt0EBEAIACMcCEPjGAhDjQAEQAgAIxwIQ6MYCEBNAARADAODGAhDUxgIQ + OS4BEAIAjMkCEMjGAhDMLgEQAQC4yQIQuMYCEMAuARABALjJAhCkxgIQrSUBEAIAoMYCEIzGAhDnJAEQ + AgCgxgIQfMYCEBkkARACAKDGAhBoxgIQRiMBEAIAoMYCEFTGAhB4IgEQAgCgxgIQQMYCELMhARACAKDG + AhAsxgIQ5SABEAIAoMYCEBjGAhBcHwEQAgCgxgIQBMYCEDg7ARADAPzFAhDkxQIQJx4BEAMA4MUCEMjF + AhDhOQEQBADAxQIQrMUCEH8tARACAKDGAhCUxQIQxSwBEAIAoMYCEIDFAhALLAEQAgCgxgIQbMUCEEUr + ARACAKDGAhBYxQIQjCoBEAIAoMYCEEDFAhDPKQEQAgCgxgIQKMUCEBYpARACAKDGAhAQxQIQgicBEAIA + oMYCEPjEAhBOPgEQAwD8xQIQ4MQCEHMmARADAODFAhDExAIQ6TwBEAQAwMUCELDEAhBLFQEQAwCsxAIQ + mMQCEMEUARADAKzEAhCExAIQNxQBEAMArMQCEHDEAhCtEwEQAwCsxAIQXMQCECgTARADAKzEAhBIxAIQ + oxIBEAMArMQCEDDEAhADEgEQAwCsxAIQGMQCEMoQARADAKzEAhAAxAIQ8TYBEAQAXMgCEOjDAhDZDwEQ + BADgwwIQyMMCEGcPARAFAMDDAhCowwIQUx0BEAQA4MMCEJDDAhB/HAEQBADgwwIQfMMCEKsbARAEAODD + AhBowwIQyxoBEAQA4MMCEFDDAhD4GQEQBADgwwIQOMMCECEZARAEAODDAhAgwwIQThgBEAQA4MMCEAjD + AhB7FwEQBADgwwIQ8MICEKgWARAFAMDDAhDUwgIQ1RUBEAUAzMICELDCAhBQOAEQBgCowgIQnMICEFQP + ARABACTJAhCQwgIQ7w4BEAEAuMkCEITCAhDcDgEQAQAkyQIQeMICEHcOARABALjJAhBswgIQZQ4BEAEA + JMkCEGDCAhACDgEQAQC4yQIQVMICEMwNARABACTJAhBIwgIQPg0BEAEARMICEDjCAhAjDQEQAQAkyQIQ + LMICEMAMARABACjCAhAcwgIQpQwBEAEAJMkCEBDCAhBCDAEQAQAowgIQBMICEK/EARABACTJAhD0wQIQ + w8IBEAIA8MECEODBAhCPwAEQAgDwwQIQ0MECEPO+ARACAPDBAhDEwQIQEL0BEAMAwMECEKzBAhBcsgEQ + AwBYyQIQnMECENDQARABACTJAhCQwQIQqM8BEAIAjMECEIDBAhB6zQEQAwB4wQIQbMECEG/KARAEAGTB + AhBUwQIQWMcBEAIA8MECEETBAhA+vAEQAgDwwQIQNMECENm6ARADADDBAhAcwQIQMrkBEAQAFMECEATB + AhCBtwEQAgAAwQIQ8MACEOu1ARACAADBAhDcwAIQ5vwAEAMA1MACEMDAAhDj+wAQAwDUwAIQrMACEET7 + ABADANTAAhCcwAIQL/8AEAIAjMECEJDAAhDO/QAQAQAkyQIQgMACEIj3ABADAHzAAhBswAIQV/QAEAMA + ZMACEFjAAhDe7gAQCQBEwAIQOMACEHuDAhAFACzAAhAgwAIQtXgCEAMA1MACEBDAAhAJdgIQAgAAwQIQ + AMACELlzAhADAPy/AhDovwIQmXICEAUA3L8CEMi/AhAZcgIQAwCcyAIQuL8CEHNxAhADAJzIAhCkvwIQ + 918CEAEAuMkCEJS/AhDSbwIQBACMvwIQeL8CEIZtAhAFAGy/AhBcvwIQ5moCEAQAVL8CEES/AhAKZwIQ + BABUvwIQLL8CEEZkAhADACi/AhAQvwIQwWMCEAMAKL8CEAi/AhBxqAEQBAAAvwIQ8L4CELCjARADAOi+ + AhDUvgIQ1aABEAMA6L4CEMS+AhAhpwEQAgDAvgIQsL4CEJWeARAFAKS+AhCUvgIQc5sBEAUApL4CEIi+ + AhAVmgEQAQAkyQIQdL4CEH+ZARABACTJAhBgvgIQ35gBEAIA8MECEFC+AhCblgEQBABIvgIQOL4CENGV + ARABACTJAhAkvgIQIZUBEAEAJMkCEBS+AhBDjgEQAQAkyQIQAL4CEGx9ARAAANHJAhDsvQIQ2HwBEAAA + 0ckCENC9AhDeewEQAQAkyQIQwL0CEBKDARAIAKy9AhCcvQIQYoABEAcAjL0CEIC9AhAAfgEQAQAkyQIQ + dL0CEP+TARAFAGi9AhBcvQIQv5IBEAUAaL0CEEi9AhATjwEQAgDAvgIQOL0CEKeOARABACTJAhAsvQIQ + iHgBEAQAJL0CEBy9AhB2dwEQBAAkvQIQEL0CEK9pARABALjJAhAIvQIQuXYBEAIAjMkCEPy8AhDFdQEQ + AwCcyAIQ9LwCEFl0ARACAAjHAhDsvAIQV3MBEAMA5LwCENy8AhBxcgEQAwDUvAIQzLwCEFloARABALjJ + AhDAvAIQx3ABEAIAvLwCELC8AhDGZwEQAQC4yQIQpLwCEMVmARADAKC8AhCUvAIQxGUBEAMAoLwCEIi8 + AhCCZAEQBACAvAIQcLwCEFRjARADAKC8AhBkvAIQJmMBEAEAuMkCEFi8AhD+bwEQAQAkyQIQSLwCEHqN + ARADAEC8AhA0vAIQnooBEAQALLwCECC8AhB4jAEQBAAYvAIQCLwCEJ6LARADAAC8AhDwuwIQlYkBEAMA + 1MACEOC7AhAPhwEQBQDYuwIQyLsCEBEmAhAGALy7AhCsuwIQuRICEAMApLsCEJC7AhDpEwIQBQCIuwIQ + dLsCENkRAhABALjJAhBkuwIQ514CEAIAYLsCEFC7AhANXgIQAgDIyAIQQLsCEGVaAhACAAjHAhAwuwIQ + M10CEAEAJMkCECC7AhDOMAIQBAAYuwIQBLsCEOAvAhABALjJAhDwugIQ3SsCEAUA6LoCENC6AhDdKgIQ + AQC4yQIQyLoCEJpMABADAMC6AhC4ugIQ4VEAEAIAYLsCELC6AhAITAAQAwDAugIQqLoCEKVRABACAGC7 + AhCgugIQf1EAEAEAnLoCEJS6AhBZUQAQAQCcugIQiLoCEFdKABACAIS6AhB4ugIQAEsAEAIAYLsCEGy6 + AhDySgAQAQCcugIQYLoCEDpRABABACjCAhBQugIQqlAAEAIAhLoCEEC6AhBgUAAQAQA8ugIQLLoCEKpQ + ABABAJy6AhAgugIQ7kwAEAEAJMkCEBS6AhDICQEQBAAMugIQALoCELsGARAEAPi5AhDouQIQigUBEAIA + 5LkCENC5AhAKBAEQAgDkuQIQvLkCELJTABAEACS9AhCwuQIQ05IAEAEAJMkCEKC5AhAukgAQAQAkyQIQ + kLkCEL+QABABAETCAhCAuQIQHZAAEAEAJMkCEHC5AhBOjwAQAQBEwgIQZLkCEIyNABACAGC5AhBUuQIQ + dowAEAEAULkCEDi5AhATiwAQAgDAvgIQHLkCEDKWABADAPy/AhAIuQIQo3cAEAEAuMkCEAC5AhA0owAQ + BAD4uAIQ7LgCEOefABAHAOC4AhDMuAIQUkgAEAUAwLgCEKS4AhAjRwAQAQC4yQIQlLgCEIkjABABACTJ + AhCEuAIQxyQAEAIAAMECEHS4AhAZVQEQAQAkyQIQaLgCEC9SARAIAFi4AhBMuAIQBl8AEAQARLgCEDC4 + AhDrVwAQAQC4yQIQILgCELNsABAFABS4AhAIuAIQ9GoAEAUA/LcCEOy3AhBpaQAQBADktwIQ1LcCEN5n + ABAEAOS3AhDEtwIQAAAAAAQATLYCEFS2AhB1WwAQBABktgIQbLYCEOtiABAFAHi2AhCEtgIQpgkCEAEA + RMICEJS2AhDTBwIQAgCktgIQqLYCEJkFAhAEALS2AhC8tgIQhQMCEAMAWMkCEMi2AhANBAIQBADYtgIQ + 4LYCEKoCAhACAGC5AhDstgIQzAECEAIAYLkCEPi2AhDrAAIQAgBguQIQBLcCEAoAAhACAGC5AhAQtwIQ + Kf8BEAIAYLkCEBy3AhDl/QEQAQBEwgIQLLcCEBEGAhABAETCAhA8twIQ2v0BEAEAKMICEEi3AhCeAwIQ + AQC4yQIQVLcCEAhPAhACAFy3AhBgtwIQL00CEAIAXLcCEGy3AhBFSwIQAgBctwIQdLcCEFZJAhACAFy3 + AhB8twIQyVACEAMAiLcCEIy3AhCwbwAQAQAkyQIQoLcCEJhWAhADALC3AhC4twIQMVUCEAEAJMkCEAAA + /LUCEAAAAAAuSAAA/LUCEAAAAAAuSgAA/LUCEAAAAAAuSwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAQAAAA + GAAAgAAAAAAAAAAAAAAAAAAAAQABAAAAMAAAgAAAAAAAAAAAAAAAAAAAAQAJBAAASAAAAGBQBQBoAgAA + AAAAAAAAAAAAAAAAAAAAAGgCNAAAAFYAUwBfAFYARQBSAFMASQBPAE4AXwBJAE4ARgBPAAAAAAC9BO/+ + AAABAAAAAgADAAAAAAACAAMAAAAXAAAAAAAAAAQAAAACAAAAAAAAAAAAAAAAAAAAxgEAAAEAUwB0AHIA + aQBuAGcARgBpAGwAZQBJAG4AZgBvAAAAogEAAAEAMAA0ADAAOQAwADQAYgAwAAAARgATAAEAQwBvAG0A + cABhAG4AeQBOAGEAbQBlAAAAAABDAEUAIABTAG8AZgB0AHcAYQByAGUAIABEAGUAcwBpAGcAbgAAAAAA + OAAIAAEARgBpAGwAZQBEAGUAcwBjAHIAaQBwAHQAaQBvAG4AAAAAAFYARgBQADIAQwAzADIAAAA2AAsA + AQBGAGkAbABlAFYAZQByAHMAaQBvAG4AAAAAADIALAAgADAALAAgADAALAAgADMAAAAAAFgAGgABAEwA + ZQBnAGEAbABDAG8AcAB5AHIAaQBnAGgAdAAAAFAAdQBiAGwAaQBjACAARABvAG0AYQBpAG4AIAAoADIA + MAAwADQALQAyADAAMAA2ACkAAABAAAwAAQBPAHIAaQBnAGkAbgBhAGwARgBpAGwAZQBuAGEAbQBlAAAA + dgBmAHAAMgBjADMAMgAuAGYAbABsAAAAOgALAAEAUAByAG8AZAB1AGMAdABWAGUAcgBzAGkAbwBuAAAA + MgAsACAAMAAsACAAMAAsACAAMwAAAAAARAAAAAEAVgBhAHIARgBpAGwAZQBJAG4AZgBvAAAAAAAkAAQA + AABUAHIAYQBuAHMAbABhAHQAaQBvAG4AAAAAAAkEsAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAA + aAEAAAownTCwMOowVTF2MaExvjHQMRYyHDIjMigyNTI/MlYyWzJjMmsycjJ/Mo0ylDKdMqMyqDKwMr4y + zjLWMvoykTOXM+sz8TMrNDE0cjSJNJg0tDS8NNw0/zQHNSs1OjVMNVQ1cjV7NYM1oTWrNbU12TX0Nfw1 + FDYbNiQ2LTYyNjk2PjZHNk02XTbrNhE3XzfSOdk54znuOfQ5/DkDOiQ6KjowOjY6PDpCOkg6TjpUOlo6 + YDpmOmw6cjp4On46hDqKOpA6ljqcOqI6qDquOrQ6ujrAOsY6zDrROuk6AjsIOxU7GjsiOzA7VTt9O4M7 + iTubO8A7xjvWO+A7JTxBPEo8UDyzPO88BT1TPaI9qD3zPQM+DD4RPhg+KT43Pks+VT58PoM+jT6cPrg+ + 9j7/PgQ/CT8uPzQ/Oj9AP0Y/TD9aP2I/az9zP4A/iD+WP5s/pT+xP7Y/wT/NP9k/5j/sP/M//D8AIAAA + jAAAAAIwETAuMEIwtTD0MAMxYTHAMcYxzDHTMd8x5jEXMiMyKjJaMmEyrjK0MroywzLMMtYy3DLtMvgy + DjMYMx0zKjMvMzgzPTNbM2kzezOKM9Qz3jPvMwE0ETQiNJE0wjTINB01MTWCNdo1CzZyNp42qjbKNtY2 + 5TbsNvc2KDdGN1I3kzelNwAwAACoAAAAUTBrMHwwDzEOMiMyTTJcMmIyazJ5MrkyMjNBM1YzXzNmM2E3 + xjfyOxg8JjwrPFo8ZjxrPJ88wzzRPNY8Dz0bPSA9MD08PUE9UT1dPWI9oT2qPbQ93D3oPe09Bj4SPhc+ + WD5kPmk+fT6JPo4+uD7EPsk+3z7rPvA+Gj8gPzA/NT9OP1Q/YD9mP3o/gD+SP5g/qD+tP8Y/zD/YP94/ + 8j/4PwBAAAC8AAAAIjAuMDMwaDB0MHkwqzDcMOEwCzEQMYEx8DGXMvYyDDP7MwA0KzSrNOk0kzWyNb01 + QjZiNoQ2jza1NsY2JDc0N043UzddN5k3oDexN8w30zfxNw44GjgpOC44OjhTOG04yzjqOD05YTl1OXo5 + izmmOe458zkEOlI6ZTp1Opg6pzqzOrk6wjqKO5g7nTvgO/I7NzxEPFQ8XDxpPH08jTzNPNo83zzvPD89 + 2j0VPkg+fj6vPgAAAFAAADwBAAAWMCkwWzCDMI8wsjDwMPwwATENMRkxHjFvMZIxzzELMnMyfzKFMuEy + 6jL/MhYzOzNPM10zgDOQM5kzpDMJNHA0fTSONKc0rDTBNNE01jTbNCI1LzU0NTk1RTVpNXg1fTWCNZs1 + qDW1Nbo1vzXPNdQ16DX0Nfk1/jUMNhg2HTYiNjo2PzZwNnU27TYYNyQ3KTdGN0s3bjeUN7Y32DfmN+w3 + ADgGOBs4MTg2OEk4djh9OIM4lDiZOKE4pziuOLQ4uzjBOMg4zjjVONs44jjoOO849Tj8OAI5CjkYOR05 + NjlCOUc5Uzl5OYU5ijmWOeA57DnxOf05GzqDOq46vTrLOtA63DogOzE7NjtCO3Y7izuSO6k7Xjx1PGI9 + qj2wPcg9zz3jPXE+xz4BPwc/Hz8mPzM/7D8AAABgAADYAAAAJjAsMGEwZzCcMKgwrTC5MDMxcTGEMcQx + 0DHVMeExMDI8MkEyTTKrMrcyvDLIMuwyATMIMyIz7DMVNB80PTRONJ81xzXRNfE1BTZ2N7032TffN/c3 + /jcSODs41DgqOWQ5ajmCOYk5nTnGOV86tTrvOvU6DTsUOyg7VDsYPHQ8rjy0PMk80DznPA89OD3oPf89 + iT7ZPt8+6j7wPvY+/T4GPws/Ez8ZPx4/JT8rPzA/Nz89P0I/ST9SP10/aT98P4I/iT+OP6E/qT+xP8k/ + 0D/gPwBwAADwAAAANzDoMPEwBDGVMaQxtTHLMdMx8jEYMh8yPTJuMosy1zI1M1QzZDN3M4czwzPeM/sz + LTRQNFo0ZjSENJA0lTScNLM00jTkNOk08DQKNUQ1gjWHNY41qDXnNUY2Tjb1Ngk3HDciNy83OzdyN383 + izeqN7g3HTiNOHM5fTmBOYU5iTmNOZE5lTmZOZ05oTmlOao5LTpDOls6Zjp5Ops6HDslOyo7OztVO2I7 + dTvBO9A7VDxqPII8jTygPCM9Kj0vPUA9Vj1hPXQ9wD3PPUI+VT5tPno+jT7oPvE+9j4HPxs/Mz9AP1M/ + lz+mPwCAAAD4AAAAGTAsMEQwUTBkMNMw3DDhMPIwBjETMSYxajF5Mewx/zEXMiQyNzKmMq8ytDLFMtky + 5jL5Mj0zTDO9M9Mz7jP7Mw40izSUNJk0qjS+NMs03jQiNTE1pDW3Nc813DXvNVQ2XTZiNnM2hzaUNqc2 + 6zYPNxw3XzdsN3c3fzeJN6k38zcWOBw4JzgzOGw4rzjNOBM5fjmZOaU50jnyOfc5ETo9OlM6YzrROvY6 + FDt2O5w7sju3O8g72jvlO/g7DTwYPCs8cTx3PI48tzzCPM48CT1QPYc9jT2iPRQ+IT40PpQ+oT60PiI/ + Mz9JP08/wz/7PwAAAJAAACgBAAAYMB4wNDBiMG0weTC6MMAw2zBAMUsxXjGPMZoxrTHGMRMyKTIvMkUy + czJ+MooyzjLUMu0yJjM5M14zbDN/M8AzxjM5NEw0ZDRxNIQ04DTpNO40/zQoNTU1SDWMNfs1Mza2Nuc2 + 7Db9NhU3IDczN0Y3UTdkN343kjedN7A3xTfUN+c3/zcKOB04PjhDOFQ4ZjhxOIQ4qTi8OEA5Rjm2Ocw5 + 5DnvOQI6JDp3OoQ6lzrbOrc7vDvNO+I75zsQPFU8ejyCPJM8wzzLPNw8DD0UPSU9tD25Pco92z3gPfE9 + FT4aPis+Sj5PPmA+jT6SPqM+tD65Pso+6j7yPgM/ID8oPzk/az9zP4Q/kT+VP5k/nT+hP6U/qT+tP7E/ + tT+5P+g/AAAAoAAAQAAAALMwzDAgMUwyczKMMpgypDKpMrwyzDIvMzUztjPPM2U0PTXANVI5aDl8OQs6 + +ToSO1E9kT/HP84/ALAAAGQAAABZMF0wYTBlMGkwbTBxMHUweTDaMPMwBzINMiIyKTI7Mk8yWTJgMmky + kjKXMpwytzLJMg4zOzRTNGk1rDbENuo3LDlEOWo6vjovO5s7Cjx5POg8Vz2/PSc+iD7mPgDAAABQAAAA + pDC9MHwyiDKUMqAy1zLDM4U1jzZoN6s3RTgvOZQ53zrmOio7Njs9O9Q7rTy0PL08xDwQPRc9ID0nPVk9 + ZD1wPXs9gD+LPwAAANAAALQAAABZMGQwcDB7MN4w6TD1MAAxSzFWMV8xZjHMMdMxKjIxMmAyazJ3MoIy + IzQuNDo0RTRRNFw0pDSzNM803jQgNWs1ejXLNdI12zXiNRE2JzYrNi82MzY3Njs2PzZDNkc2SzZPNlM2 + VzZbNl82YzZnNms2bzZzNnc2ezZ/NoM21zZUN1s3iDcvOD84fDiFOIk4jTiROJU4mTjCOPA6UzuTO5s7 + 5DtGPIc8Gj2dPgAAAOAAAIwAAAB3MH4wBjOBMw40EzRxNHU0eTR9NIE0hTSJNC01VjV/NZ41xjUxNlE2 + eTaVNrk21TbxNg03ZTdxN3w3hzeSN543qzewN+M46DglOb45xTnSOdc56znzOTA6TjqrO7A70Dt3PHE9 + jz3uPQU+QD5LPl8+cT52PoY+lD6iPr0+xT7uPp4/AAAA8AAAuAAAAE0wtDAyMT4xrTO8M8sz2jNYNG00 + 5zT1NBo1RTVjNYo1ozXBNe81CDYmNlo2czaRNro20Db7Ng83ITdtN4M3iTeeNyQ4MjhVOIU4sDjBONk4 + +jg4OUk5YzmAOa45vznXOe85GjorOkM6YTqEOqs6vDrROik7PztFO1c7pjveO+Q7+TswPFQ8pjzhPOc8 + +TxEPXw9mT2wPbU9xj3PPeQ9Qz7FPso+1D4qPzA/RT+7PwAAAAABAMgAAABGMFkwXjBvML4wxDDPMNYw + 3TDoMPYw+zAMMRExGDEdMSYxOzFCMVkx6TH7MQ4yQDNGM1EzXzNnM24zezOKM48zoDOmM6szszO5M8Az + xjPNM9Mz2jPgM+cz7TP0M/ozATQLNCA0JzQ7NHQ0xjTSNNc06jT4NAQ1CTUcNT41XDVvNYU1izWgNac1 + uzX9NVI2bzaNNqA2tja8NtE22DbvNsU32jftNyU4wznJOdo54TkKOhk6zzrkOvc6JDs9POc9AAAAEAEA + GAAAAFsxYTFqMXAxtTG7MXA7AAAAIAEAGAAAABMwGTAiMCgwkzCZMFk4yDsAMAEAfAAAAKkw6DDjNQM2 + IDY+Nm42gTaHNo02kjafNqQ2tja7Nsg2zTbYNuM26DZFN4w3kjegN6Y3xDfkN+k3FjgcOAM5ZjmBOYY5 + RTqyOtk63jqfOwQ8CjwTPBk8QjxrPHA8mjygPGw90z3tPfI90T4xP5g/sj+3PwAAAEABAHQBAAB1MJkw + tTC6MCMxSDFvMYsxkDHsMREyNjJSMlcyqDLCMuEy5jL/MkczTTNXM10znjPBM+Yz6zMKNBA0KjQvNFY0 + hzSNNJc0nTTjNAQ1IzUoNVU1gDXANcY11TXbNWQ2kTaXNrI2tzbeNgY3DDcbNyE3pDfRN9s38TcUOC04 + MjhPOGg4bTiFOJQ4mTi0OM040jjmOPI4BzkWOTk5PzmCOZc5nTmqOa855TnrOfg5/TkdOiM6MDo1Okw6 + bTpzOn06gzq+OuA6DTsTO147gDuZO5872jv6Ox48JTwwPDU8PzxFPFU8WjxuPHU8fTyDPIo8kDyXPJw8 + qTyzPL08xzzRPNs85TzvPPk8Az0NPRc9IT0rPTU9Pz1JPVM9XT1nPXE9ez2FPY89mT2jPa09tz3BPcs9 + 1T3fPek9/j0DPg0+GT4ePjs+UT5bPog+kT6bPq8+LD8yPzw/Xz+wP7k/wz/VP9s/4z/oP+0/8j/3P/4/ + AFABAPQAAAAIMA0wFjAbMCQwKTAwMDYwPjBEME0wWjBfMGgwbTB0MHwwgjCIMKgw9DB2MZQxuDHiMfEx + 9jECMjAyRTJMMmMyUTNlM9ozQDRFNFY0FDUaNVc1bDV6NYY1izWcNbE1vDXPNRo2hjaUNqc2rza1Nsw2 + /jY3N883Cjg1OJg4FjlLOWU5dTmcObY52DneOQw6FDomOkI6RzpxOn46ijq/Oso61jobOyg7NDtvO6A7 + rDveOw88GzxPPG08eTysPMk81TwOPRs9Jz1mPXE9eT2EPbI9vz3LPf09FT4gPiw+Zj6IPpM+nz4jP48/ + 5T8AAABgAQCAAQAA+TD+MEsx3TEKMhYyHjJ+MosylDK/MtEy8DIBMwYzEDNHM1UzZzNuM4Uz9jMCNBA0 + FTRFNFY0ZzR9NIM0mjShNLM0OzVENVI1VzWHNZg1qTW/NcU11zU/NkU2UzZYNog2mTaqNsA2xjbYNkA3 + RjdUN1k3iTeaN6s3wTfHN+A39jf8Nwo4Dzg3OFQ4WjhxOJE4lziyOL44wzjWOPk4BTkKOR05ODlHOVo5 + lDmqObA5yDniOf85CzoROh86JDpaOmU6cjp3OpE6pTqxOuY69Dr5Ogw7YDt7O4o7jzuiO647szu/O+c7 + 8zv4OwQ8JDwwPDU8QTxvPHs8gDyMPMQ83TymPbE9tz29PcY90T3ZPd895j3sPfM9+T0APgY+DT4TPho+ + ID4nPi0+ND46PkE+Rz5OPlQ+Wz5hPmg+bj51Pns+gj6IPo8+qT6vPro+wj7IPtU+3D72Pvw+Bz8PPxU/ + HD8iPyk/WT9jP3Q/iD+UP7U/xj/YP+Q//z8AAABwAQAYAQAANTB8MMIwyDDhMAIxGjE7MUcxTDFfMYAx + jDGRMaQxszG/McQx1zHyMQEyFDJCMmwycjKKMtIy3jLsMvsyDjM8M1IzWDNqM6Ez6TPvM/szADQ+NFQ0 + WjRsNM404jToNPY0+zQONWM1qjXANcY13zUPNkk2TzZbNmA2nja0Nro2zDYJNw83HTciN1Q3cTd3N4k3 + BzgXOBw4KDhFOIM4iTibOBE5ITkmOTI5TjmMOZI5uznUOdk5+TkdOiI6LjpVOnc6mDrJO9878TshPDg8 + PTxQPH08gjyVPNM82TzvPA49HT0iPS49Zz1tPYM9oj2xPbY9wj37PQE+Fj5NPlg+cT75Pgc/KT88P00/ + Uj9eP4w/AAAAgAEAqAAAAC4wXTBjMH0wJTFCMYMxkzGzMfcxXDJtMosyljKbMg0zEzMtMwQ0ITRiNHI0 + mDQPNXc1izVyNn02gjYKNxA3oDfjNwI4BzgYOCw4PDhQOG44iTjOOOQ47zj0OAU5PTlIOZA5ljlCOpk6 + nzpDO5k7nzsnPHM8eTwePXU9ez2NPZ097T0+PkQ+Vj6iPqg+uj4OPxQ/Jj+fP6U/3D/3P/w/AAAAkAEA + CAEAAA8wGzAgMBkxNTF0MY8xwzEVMhoyJDIpMjUyjTKZMp4yqjLAMtoyTTOXM54z+jMANBo0jTS+NMU0 + HDUiNWs1ejV/NYs1zDXSNeQ1+TU1NkQ2STZcNpY2nDYVNyU3Kjc9N2Y3cDd8N483pjeyN7c3yjf5NwU4 + CjgdOJU42jjgOPI4HjkqOS85Ozl6OYA5ljm5OcY5yznXORA6FjpoOno6fzqSOpw6szq4Oss62zrpOvQ6 + BzskOy87RztuO3Q7iTufO9M79TsUPDY8YDy+PNE81jzpPCU9dj3KPRQ+ID4lPjg+UT53PpA+lj6rPss+ + 8z4YP4k/nD+hP7Q/zD/YP90/8D8AoAEAoAAAABswUTCHMKkw0DDWMOswdDGGMYsxnjGxMb0xwjHVMQ4y + IjIwMnMyqjLhMnYzqzOxM8YzzTPkM2A0bDRxNIQ0tDTFNNA0DjVANXI1yTXPNQo2DzYZNgw3Ijc3N043 + bDhyOIs4pTnBOc852znkORY6RjqhOps72DsVPEQ9dD2kPU8/VT9gP5g/sj+6P80/2T/fP+Y/7T/1P/s/ + ALABAGQBAAAAMAcwDTASMBkwHjAkMC0wNTA7MEMwSzBTMFkwYjBnMG0wczCCMIowkDCXMJ0wpDCqMLEw + tzC+MMQwyzDRMNgw3jDlMOsw8jD4MP8wBTEMMRIxGTEeMSgxMDE2MT8xSTFRMVcxYDFqMXIxeDGBMYsx + kzGZMaIxqDGwMbgxwTHNMd0x4zHuMfYx/DEDMgkyEDIWMh0yIzIqMjAyNzJDMl0ybzJ/MrQy5DLqMjQz + SDNrM3czfDOSM+kz+jMXNCM0KDQ7NFU0ZzRsNH80zDSlNeY17DUBNhE2fjZ8N4I3lzfPN+A3CziHOJA4 + mDinOLk4yjgOOTM5SDnsOfc5AzoIOhs6cDqBOpc62jrvOmg7cjt+O4M7ljvgO/Y7PzxUPJc8oDysPLE8 + vTwLPRE9Jj0tPUQ9eT2FPbU9yD2dPqs+tz7KPu4+9D4GPw0/JD9WP2w/cT+EP5c/oz+5P9c/6j8AwAEA + +AAAADAwOjBGMFkwijCQMKUw3zDxMAwxIjEnMToxUDFaMXAxmzGuMV4ybDJ6Mo0yvjLEMtkyAjMUMycz + OTM+M1EzazN1M4szrDO/M0Y0VDRgNHM0qjSwNME0yDTZNPo0CTVLNV81ZDV3NZc1oTXKNdY16TWRNp82 + rTbANgQ3WTeqN7M3/DdIOHw4oTgaOYg52zkEOi06VjpwOoU6yDomPF88bzyDPJY8nzytPLY8xDzKPNQ8 + 4Tz0PEE9Vz17PZA9xz3fPQQ+Iz5ePmU+cz6FPow+nT6sPrM+xD7PPt8+7T70Pgs/GD8rP3c/qT/BP8g/ + 3D8AAADQAQCkAAAAGjAtMDQwQDBFMFgwnzDRMOkw8DAEMUIxSDFUMVkxbDGzMcUx9TEMMhIyLzJBMksy + dDKuMj0zWjOVM7oz7TMiNF40nDTNNPw0EzVGNWY1sDXjNRY2QDYNN2E3uTcbOII46zgvOWY5lTmyOes5 + Ejo4Olg6bzqZOqg6rjq3OsU6BTs9O1c7aDv7O5k8qDxXPdU96j30PQ8+Gz5NPlc/AOABAKQAAABiMHcw + KzHJMRkydDL/MhEzZTPHNKA17jUfNkk2kDbCNg44QjiDOKM4wzjSOPU4/DgPOSA5NTk+OVg5bzmDOY45 + kzmdOaI54jkQOik6QzqWOg07LDtMO3U7yjslPDk8rDw0PYk9jj2YPcY97z0UPiI+KT5XPsY+0j7XPvA+ + /D4BPw0/Tj9VP2A/iz+XP5w/rD+4P70/zT/ZP94/6j8A8AEAfAAAAFgwXzBpMHwwhjA2MUIxRzFaMfIx + CzIQMj0yxTLeMuMy9jJoM3QzeTOUM5g0vTTJNM402jSoNbM1zjXsNQs2KjY2Njs2TjaANpM2fTe/N8s3 + 0DfjNyo4kjgyOcg5RTqsOiE7sDtbPLY8SD2APaA9pT3JPQAAAAACAKwAAACfMwg0DjRbNGc0bDR/NMU0 + 6TT1NPo0DTUrNTc1PDVPNZQ1mjUMNrc34ziGOY06QDtoO247eDuTO6w74Dv3Ow88GzwlPGE8eDyhPK88 + xTz/PBw9KD0yPVM9WT1vPYQ9iT2ZPZ89tD3OPeU9ET4sPmc+cz6aPrM+yT7VPto+5j4JPx8/Kz8wPzg/ + QT9LP1w/aD+GP4w/kz+vP7s/wD/MP9g/3T/pPwAQAgBsAQAAUzBtMLow4jDpMPQw+TAHMQ4xFDEdMSQx + OTFCMUsxUzFcMWUxdTGGMZ0xpDGvMbQxwzHIMesx+zEfMoYyjjK6Ms4yCDMNMyAzSDNNM14znjOuM7kz + vjPJM88z2jPkM+ozazSRNL005TQNNTM1TjVoNYA1kDWmNa41wzXUNeI15zXxNf41STZrNnU2gDarNrw2 + DTc0Nz43SDdeN2Q35zfvNwQ4GTguOEM4WDh+OI44pjjCOM848jgIORk5Kjk0OUE5ZDl6OYg5mTmjObE5 + zTniOec57Tn9OTM6SDpOOlg6XjpwOoE6jDqjOr06yjrdOuI67DoAOxQ7KDs8O1E7ajt6O4o7yTvWO907 + 8jsPPCs8PTxCPEw8eDx9PLM8ET1IPVQ9YD1sPXw9iT2rPfc9BD4PPhk+MD48PlQ+YT5rPnM+eD6OPp0+ + pD6uPrg+wD7FPu4+9j4IPxI/Pz94P7A/wT/QP+E/8D8AIAIAgAEAAAswJjBUMFkwaDCiMNAw1TDkMPww + FzEyMU0xaTGCMegxSDJ6MpEynjKlMroyxTLSMtky4zLtMvYyIDM9M0ozTzNkM28zfDODM40zlzOeM6Mz + tzPmM+szEjQcNCw0ODRINFU0ZDR2NIc0kTSgNKc0vzTJNNk07DT2NCQ1KTVvNX41gzWXNaM1qDW0NcM1 + yDXcNeg17TX5NRI2LzZ7Np82xTYANxw3ODerN9A3+jdmOG44yjjYOOY47jjzOPo4GTkmOS05Njk9OUQ5 + YzlwOXc5gDmLOZY5nDmnObE5wDnIOeY5Kjo1Ojo6QTpJOnM6kjrAOt46+ToaOyE7Kzs0O0I7UjtcO2s7 + cDuDO5U7nDvCO9g73jv5O0A8STxOPF88fDyVPKY8qzy8PNY86DwYPTo9RT1YPWg9dj17PY49nz2uPbM9 + xj3dPeg9+z0RPh0+LD4xPkQ+kT6ePqw+vT7KPtg+4D75PiI/RT9PP1Q/Wz9kP4k/nD/VP+E/+T8AMAIA + KAEAABswIjApMEUwTzBcMGEwdDCGMI0wszDJMM8w6DAkMTAxNTFGMWMxgzGeMa8xtDHFMe0xBzIcMkIy + UTJWMmkygDKPMpQypzK7Mscy1jLbMu4yPDNKM1szbDONM5QzmjOjM6ozvzPIM9Ez2TPiM+sz+zMMNCM0 + KjQ1NDo0QTRRNFY0bzSANK00tzTHNM402DT5NAA1ITUsNUc1UjVxNXo1qDXHNeg1+zUHNiY2NDZvNno2 + 8Tb+Nig3WDd7N4Y3vzfVN+o3CjhtOHM4zjjbOEc5UjnJOdI5NDo9OrQ6vTofOyg7nzuuO8o74jsNPFo8 + YzxuPJM8nDynPMw81TxMPVU9tz3UPeA9AD5DPkw+wz7MPgs/KD80P1Q/lz+iP6s/uD/KPwBAAgDYAAAA + DzAmME8wYTBzMHkwhzCfMK0wuzDFMOMw6TDvMAQxDTFcMWMxbjGYMZ4xpjG7McExzDHSMdox7zH6MQQy + VzJjMnUyfDKCMooymTKjMqkytjK/MtEy3TLkMuoy8DL2MvwyAjMKMxkzIzMpMzEzPjNMM10zaDNyM3wz + 1TPcM+Qz7TP3MwA0DjQiNCk0LjQ3NEw0VTR5NH80kjSfNK80tDS7NMI00TTmNOo07zT0NPk0/jR8NYo1 + wDXGNdM14DWzNrk2STeNN8M35TcpOHU4sTgAAABQAgBgAQAAyjDwMDcyPTJ0MpQyqjKzMtIy4DLuMvsy + FDMfMzMzSTNQM4QzizORM5YznDOiM7MzvjPPM+kz8jP+Mxo0KTQ2ND00UDRaNGI0djSLNKs0ujTHNNo0 + 4DTnNO00AjUPNRs1MjVGNbY1yDXhNQc2JzY6NpM2mTYMNzQ3WTdeN3E3dzeCN443mDeoN683tDfHN+Y3 + 9TcBOBQ4GjghOCY4NjhOOIM4pjisOMo43zj0OAk5HjkzOUg5UzlsOYU5nTm1Oc055Tn9OQM6MjpBOlE6 + ZjqYOqg6rTrAOs863jruOvM6BjsWOyk7OTs+O1E7XjtuO407lzufO647vzvEO9Q72TvqOxU8ITwmPDk8 + hjySPJc8qjzAPNY83DzpPO489jz8PAM9CT0RPR89JD00PWg9dD15PYU9CD4OPkI+Tj5TPl8+4j7oPvw+ + NT8/P2Y/eT+pP7M/vj/RP/I//D8AYAIAQAAAAAMwETAmMBUzrDPCM9QzQTRHNGI0KjUFNws3JDdqOOE6 + 5zoAOyc8gT2HPZw9bT+mP7c/zT/TP/E/AHACAKQAAAA0MW4xdDGGMfAxFDIaMiwylDKaMq8yRzN2M3wz + gjOLM5IzlzOlM6ozujMiNEA0TDRRNF40YzR2NLo1xDXJNdY12zXuNQQ2CjYfNiY2PTagNqU2uDbVNt82 + 6zb+Nno3hjeLN543sDi2OMs4aDmMObM5uDnOOfw5CDoeOsU6yjrgOhU9Mj1JPWA9dz2OPaU9tT3GPdc9 + 6D35PSI+AAAAgAIAkAAAAGQxgTGYMa8xxjHdMfQxBDIVMiYyNzJIMnEyfTKUMqsywjLZMuoy+zIMM3Yz + fDORM100cTSPNLs04zQFNT41gTWYNak1vzVEN2A3dzeIN5k3ijimOL04yjvmO/07FDwrPEI8WTxwPIc8 + njy1PMw83TzuPP88ED0hPTI9Qz1ZPmk+hj6dPu4+AAAAkAIA7AAAANwxlDL+MggzEjMcMy4zTjNuM3gz + gjOMM5YzoDOqM7QzvjPQM9oz5DMBNAs0KDRQNG00fzScNK40wDTSNNw0CTVSNYo1wjXcNRw2NjZuNqw2 + 5zYXN0c3YTdrN5A3tTf4NzA4djixOM446zgAORU5Kjk/OVQ5Zjl4OYo5lDm5Odk56zkTOi06Rzp3OpE6 + ozrLOvM6BTsiOzQ7bzuJO6M71jscPCY8Wzx4PIo8lDyePKg8ujzEPM486DwCPRw9ST1jPXU9hz2sPfg9 + Vz6dPr0+3T7yPhI/JD82P0g/Yj+EP6k/zj/oPwCgAgCIAAAAAjA6MEwwXjB7MJgwtTDdMP0wGjFCMVQx + gTGLMZUxvTEAMjgycDKoMvYyCzNOM3YznjOwMwk0MTRONHM0kDSlNLo01DT5NBY1OzVQNW01gjWXNaw1 + 1zX0NRw2MTZ6Nrg2wjbHNs022TbjNu82+TYFNws3EDcdNyU3KzcxNzw3SDcAsAIAIAAAAPg1/DUENgg2 + FDYYNig2NDY4NkQ2SDYAAADQAgAQAAAA/DcAOAQ4AAAA8AIAsAAAAJg5nDmgOaQ5qDmsObA5tDm4Obw5 + wDnEOcg5zDk0PDg8RDxIPFQ8WDxkPGg8dDx4PIQ8iDyUPJg8pDyoPLQ8uDzEPMg84Dz4PAw9HD0gPUQ9 + TD1UPXg9gD2IPaw9tD28Pew99D0IPhQ+HD48PkQ+WD5kPmw+jD6UPqg+tD68Ptw+5D74PgQ/DD8cPzQ/ + PD9QP1w/ZD90P3w/iD+gP6g/tD/cP+Q/+D8AAAAAAwBsAgAABDAMMCwwNDBIMFQwXDB8MIQwmDCkMKww + zDDUMOgw9DD8MBwxJDE4MUQxTDFsMXQxiDGUMZwxvDHEMdgx5DHsMQwyFDIoMjQyPDJUMmQybDKAMowy + lDK0Mrwy0DLcMuQyBDMMMyAzLDM0M0wzVDNkM2wzgDOMM5QztDO8M9Az3DPkM/wzBDQUNBw0MDQ8NEQ0 + XDRkNGw0fDSENJg0pDSsNMQ0zDTcNOQ0+DQENQw1JDU0NTw1UDVcNWQ1fDWENZQ1nDWwNbw1xDXcNew1 + 9DUINhQ2HDY0NkQ2TDZgNmw2dDaMNpw2pDa4NsQ2zDbsNvQ2CDcUNxw3NDc8N0Q3TDdcN2Q3eDeEN4w3 + pDesN7Q3vDfEN8w33DfkN/g3BDgMOCQ4LDg0ODw4RDhUOFw4cDh8OIQ4nDikOKw4tDi8OMw41DjoOPQ4 + /DgMORQ5IDk4OUA5SDlQOVg5YDlsOYw5lDmkOaw5wDnMOdQ57Dn0Ofw5BDoMOhw6JDo4OkQ6TDpkOmw6 + dDp8OoQ6lDqcOrA6vDrEOtw65DrsOvQ6/DoMOxQ7KDs0Ozw7VDtcO2Q7bDt8O4Q7mDukO6w7xDvMO9Q7 + 3DvsO/Q7CDwUPBw8NDw8PEw8VDxoPHQ8fDycPKQ8uDzEPMw85DzsPPQ8BD0MPSA9LD00PUw9VD1cPWw9 + dD2IPZQ9nD20Pbw9xD3MPdQ93D3sPfQ9CD4UPhw+ND48PkQ+TD5UPmQ+bD6APow+lD6sPrQ+vD7EPsw+ + 1D7kPuw+AD8MPxQ/LD80Pzw/RD9MP1w/ZD94P4Q/jD+kP6w/vD/EP9g/5D/sPwAAABADAFQCAAAEMAww + HDAkMDgwRDBMMGQwdDB8MJAwnDCkMLwwzDDUMOgw9DD8MBQxJDEsMUAxTDFUMWwxfDGEMZgxpDGsMcQx + 1DHcMfAx/DEEMhQyIDI4MkQyXDJoMpAymDKsMrgywDLQMtgy4DLsMgwzFDMkMywzQDNMM1QzbDN8M4Qz + mDOkM6wzxDPMM9Qz5DPsMwA0DDQUNCw0NDRENEw0YDRsNHQ0jDSUNKQ0rDTANMw01DTsNPQ0/DQENRQ1 + HDUwNTw1RDVcNWQ1dDV8NZA1nDWkNbw1zDXUNeg19DX8NRQ2HDYkNjQ2PDZQNlw2ZDZ8NoQ2jDacNqQ2 + uDbENsw25Db0Nvw2EDccNyQ3PDdEN1Q3XDdwN3w3hDecN6w3tDfIN9Q33Df0N/w3BDgMOBQ4JDgsOEA4 + TDhUOGw4dDiEOIw4oDisOLQ4zDjUOOQ47DgAOQw5FDksOTQ5PDlEOVQ5XDlwOXw5hDmcOaQ5rDm0Obw5 + xDnUOdw58Dn8OQQ6JDosOkA6TDpUOmw6dDp8OoQ6lDqcOrA6vDrEOtw65Dr0Ovw6EDscOyQ7PDtMO1Q7 + aDt0O3w7nDukO7g7xDvMO+w79DsIPBQ8HDw8PEQ8WDxkPGw8hDyUPJw8sDy8PMQ85DzsPAA9DD0UPTQ9 + PD1QPVw9ZD18PYQ9lD2cPbA9vD3EPdw95D30Pfw9ED4cPiQ+ND48Pkg+YD5oPnA+eD6EPqQ+rD68PsQ+ + 2D7kPuw+BD8UPxw/MD88P0Q/XD9sP3Q/iD+UP5w/tD+8P8Q/1D/cP/A//D8AIAMAeAIAAAQwHDAkMCww + NDA8MEQwVDBcMHAwfDCEMJwwpDCsMLQwvDDEMMww1DDkMOwwADEMMRQxLDE0MTwxRDFMMVQxZDFsMYAx + jDGUMawxtDHEMcwx4DHsMfQxDDIUMiQyLDJAMkwyVDJsMnwyhDKYMqQyrDLEMswy3DLkMvgyBDMMMyQz + NDM8M1AzXDNkM3wzjDOUM6gztDO8M9Qz5DPsMwA0DDQUNCw0NDRENEw0YDRsNHQ0hDSMNJQ0oDTANMg0 + 0DTgNOg0/DQINRA1KDUwNTg1SDVQNWQ1cDV4NZA1mDWoNbA1xDXQNdg18DX4NQg2EDYkNjA2ODZQNlg2 + YDZoNnA2gDaINpw2qDawNsg22DbgNvQ2ADcINyA3MDc4N0w3WDdgN3g3gDeQN5g3rDe4N8A32DfgN/A3 + +DcMOBg4IDg4OEA4UDhYOGw4eDiAOJg4oDioOLg4wDjUOOA46DgAOQg5GDkgOTQ5QDlIOVg5YDlsOYw5 + lDmcOaw5tDnIOdQ53Dn0OQQ6DDogOiw6NDpMOlQ6XDpkOnQ6fDqQOpw6pDrUOtw68Dr8OgQ7JDssO0A7 + TDtUO2w7dDt8O4w7lDuoO7Q7vDvUO9w75DvsO/Q7/DsMPBQ8KDw0PDw8VDxcPGQ8bDx0PIQ8jDygPKw8 + tDzMPNQ83DzkPOw8/DwEPRg9JD0sPUQ9TD1UPVw9ZD10PXw9kD2cPaQ9vD3EPcw91D3cPeQ97D38PQQ+ + GD4kPiw+RD5UPlw+cD58PoQ+nD6kPqw+tD68PsQ+1D7cPvA+/D4EPxw/JD8sPzw/RD9YP2Q/bD+EP4w/ + lD+kP6w/wD/MP9Q/7D/8PwAwAwBcAQAABDAYMCQwLDBEMEwwVDBcMGQwbDB0MHwwjDCUMKgwtDC8MNQw + 3DDkMPQw/DAQMRwxJDE8MUQxVDFcMXAxfDGEMZwxpDGsMbwxxDHYMeQx7DEEMgwyHDIkMjgyRDJMMmQy + dDJ8MpAynDKkMrwyzDLUMugy9DL8MhQzHDMsMzQzSDNUM1wzdDN8M4QzlDOcM7AzvDPEM9wz5DP0M/wz + EDQcNCQ0PDRENEw0XDRkNHg0hDSMNKQ0tDS8NNA03DTkNPw0BDUUNRw1MDU8NUQ1XDVsNXQ1iDWUNZw1 + tDXENcw14DXsNfQ1DDYcNiQ2ODZENkw2ZDZsNnQ2hDaMNqA2rDa0Nsw21DbkNuw2ADcMNxQ3LDc0Nzw3 + TDdUN2g3dDd8N5Q3pDesN8A3zDfUN+w39Df8NwQ4DDgUOCQ4LDhAOEw4VDhsOHQ4fDiEOIw4nDikOLg4 + xDjMOABQAwCABgAABDAIMAwwEDAUMDAwNDBeMPgw/DACMQYxCjEQMRQxGDEeMSIxJjEsMTAxNDE6MT4x + QjFIMUwxUDFWMVoxXjFkMWgxbDFyMXYxejGAMYQxiDGOMZIxljGcMaAxpDGqMa4xsjG4MbwxwDHGMcox + zjHUMdgx3DHiMeYx6jHwMfQx+DH+MQIyBjIMMhAyFDIaMh4yIjIoMiwyMDI2MjoyPjJEMkgyTDJSMlYy + WjJgMmQyaDJuMnIydjJ8MoAyhDKKMo4ykjKYMpwyoDKmMqoyrjK0MrgyvDLCMsYyyjLQMtQy2DLeMuIy + 5jLsMvAy9DL6Mv4yAjMIMwwzEDMWMxozHjMkMygzLDMyMzYzOjNAM0QzSDNOM1IzVjNcM2AzZDNqM24z + cjN4M3wzgDOGM4ozjjOUM5gznDOiM6YzqjOwM7QzuDO+M8IzxjPMM9Az1DPaM94z4jPoM+wz8DP2M/oz + /jMENAg0DDQSNBY0GjQgNCQ0KDQuNDI0NjQ8NEA0RDRKNE40UjRYNFw0YDRmNGo0bjR0NHg0fDSCNIY0 + ijSQNJQ0mDSeNKI0pjSsNLA0tDS6NL40wjTINMw00DTWNNo03jTkNOg07DTyNPY0+jQANQQ1CDUONRI1 + FjUcNSA1JDUqNS41MjU4NTw1QDVGNUo1TjVUNVg1XDViNWY1ajVwNXQ1eDV+NYI1hjWMNZA1lDWaNZ41 + ojWoNaw1sDW2Nbo1vjXENcg1zDXSNdY12jXgNeQ16DXuNfI19jX8NQA2BDYKNg42EjYYNhw2IDYmNio2 + LjY0Njg2PDZCNkY2SjZQNlQ2WDZeNmI2ZjZsNnA2dDZ6Nn42gjaINow2kDaWNpo2njakNqg2rDayNrY2 + ujbANsQ2yDbONtI21jbcNuA25DbqNu428jb4Nvw2ADcGNwo3DjcUNxg3HDciNyY3KjcwNzQ3ODc+N0I3 + RjdMN1A3VDdaN143YjdoN2w3cDd2N3o3fjeEN4g3jDeSN5Y3mjegN6Q3qDeuN7I3tje8N8A3xDfKN843 + 0jfYN9w34DfmN+o37jf0N/g3/DcCOAY4CjgQOBQ4GDgeOCI4JjgsODA4NDg6OD44QjhIOEw4UDhWOFo4 + XjhkOGg4bDhyOHY4ejiAOIQ4iDiOOJI4ljicOKA4pDiqOK44sji4OLw4wDjGOMo4zjjUONg43DjiOOY4 + 6jjwOPQ4+Dj+OAI5BjkMORA5FDkaOR45IjkoOSw5MDk2OTo5PjlEOUg5TDlSOVY5WjlgOWQ5aDluOXI5 + djl8OYA5hDmKOY45kjmYOZw5oDmmOao5rjm0Obg5vDnCOcY5yjnQOdQ52DneOeI55jnsOfA59Dn6Of45 + AjoIOgw6EDoWOho6HjokOig6LDoyOjY6OjpAOkQ6SDpOOlI6VjpcOmA6ZDpqOm46cjp4Onw6gDqGOoo6 + jjqUOpg6nDqiOqY6qjqwOrQ6uDq+OsI6xjrMOtA61DraOt464jroOuw68Dr2Ovo6/joEOwg7DDsSOxY7 + GjsgOyQ7KDsuOzI7Njs8O0A7RDtKO047UjtYO1w7YDtmO2o7bjt0O3g7fDuCO4Y7ijuQO5Q7mDueO6I7 + pjusO7A7tDu6O747wjvIO8w70DvWO9o73jvkO+g77DvyO/Y7+jsAPAQ8CDwOPBI8FjwcPCA8JDwqPC48 + Mjw4PDw8QDxGPEo8TjxUPFg8XDxiPGY8ajxwPHQ8eDx+PII8hjyMPJA8lDyaPJ48ojyoPKw8sDy2PLo8 + vjzEPMg8zDzSPNY82jzgPOQ86DzuPPI89jz8PAA9BD0KPQ49Ej0YPRw9ID0mPSo9Lj00PTg9PD1CPUY9 + Sj1QPVQ9WD1ePWI9Zj1sPXA9dD16PX49gj2IPYw9kD2WPZo9nj2kPag9rD2yPbY9uj3APcQ9yD3OPdI9 + 1j3cPeA95D3qPe498j34Pfw9AD4GPgo+Dj4UPhg+HD4iPiY+Kj4wPjQ+OD4+PkI+Rj5MPlA+VD5aPl4+ + Yj5oPmw+cD52Pno+fj6EPog+kj6WPpo+oD6kPqg+rj6yPrY+vD7APsQ+yj7OPtI+2D7cPuA+5j7qPu4+ + 9D74Pvw+Aj8GPwo/ED8UPxg/Hj8iPyY/LD8wPzQ/Oj8+P0I/SD9MP1A/Vj9aP14/ZD9oP2w/cj92P3o/ + gD+EP4g/jj+SP5Y/nD+gP6Q/qj+uP7I/uD+8P8A/xj/KP84/1D/YP9w/4j/oP/Q/AGADAAwAAAAAMAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA; + ENDTEXT + + Return Strconv(m.lcFileData,14) +Endfunc diff --git a/COMUN/utile/ctl32/explorerbar.VCT b/COMUN/utile/ctl32/explorerbar.VCT new file mode 100644 index 0000000..a82e80a Binary files /dev/null and b/COMUN/utile/ctl32/explorerbar.VCT differ diff --git a/COMUN/utile/ctl32/explorerbar.vcx b/COMUN/utile/ctl32/explorerbar.vcx new file mode 100644 index 0000000..8975445 Binary files /dev/null and b/COMUN/utile/ctl32/explorerbar.vcx differ diff --git a/COMUN/utile/ctl32/outlooknavbar.vcx b/COMUN/utile/ctl32/outlooknavbar.vcx new file mode 100644 index 0000000..be357d4 Binary files /dev/null and b/COMUN/utile/ctl32/outlooknavbar.vcx differ diff --git a/COMUN/utile/ctl32/system.app b/COMUN/utile/ctl32/system.app new file mode 100644 index 0000000..4075840 Binary files /dev/null and b/COMUN/utile/ctl32/system.app differ diff --git a/COMUN/utile/ctl32/themedcontrols.h b/COMUN/utile/ctl32/themedcontrols.h new file mode 100644 index 0000000..3069ced --- /dev/null +++ b/COMUN/utile/ctl32/themedcontrols.h @@ -0,0 +1,2 @@ +#Define WM_THEMECHANGED 0x031A +#Define GWL_WNDPROC (-4) \ No newline at end of file diff --git a/COMUN/utile/ctl32/themedcontrols.vcx b/COMUN/utile/ctl32/themedcontrols.vcx new file mode 100644 index 0000000..0d74721 Binary files /dev/null and b/COMUN/utile/ctl32/themedcontrols.vcx differ diff --git a/COMUN/utile/ctl32/themedcontrolsbuilders.VCT b/COMUN/utile/ctl32/themedcontrolsbuilders.VCT new file mode 100644 index 0000000..8f1fc12 Binary files /dev/null and b/COMUN/utile/ctl32/themedcontrolsbuilders.VCT differ diff --git a/COMUN/utile/ctl32/themedcontrolsbuilders.VCX b/COMUN/utile/ctl32/themedcontrolsbuilders.VCX new file mode 100644 index 0000000..0dba82c Binary files /dev/null and b/COMUN/utile/ctl32/themedcontrolsbuilders.VCX differ diff --git a/COMUN/utile/ctl32/toolbox.vct b/COMUN/utile/ctl32/toolbox.vct new file mode 100644 index 0000000..009b9e4 Binary files /dev/null and b/COMUN/utile/ctl32/toolbox.vct differ diff --git a/COMUN/utile/ctl32/toolbox.vcx b/COMUN/utile/ctl32/toolbox.vcx new file mode 100644 index 0000000..b18cb4b Binary files /dev/null and b/COMUN/utile/ctl32/toolbox.vcx differ diff --git a/COMUN/utile/ctl32/vfpx.VCT b/COMUN/utile/ctl32/vfpx.VCT new file mode 100644 index 0000000..3c6142d Binary files /dev/null and b/COMUN/utile/ctl32/vfpx.VCT differ diff --git a/COMUN/utile/ctl32/vfpx.vcx b/COMUN/utile/ctl32/vfpx.vcx new file mode 100644 index 0000000..04b8d84 Binary files /dev/null and b/COMUN/utile/ctl32/vfpx.vcx differ diff --git a/COMUN/utile/ctl32/zoomnavbar.vcx b/COMUN/utile/ctl32/zoomnavbar.vcx new file mode 100644 index 0000000..edbbf1d Binary files /dev/null and b/COMUN/utile/ctl32/zoomnavbar.vcx differ diff --git a/COMUN/utile/email/images/1page.bmp b/COMUN/utile/email/images/1page.bmp new file mode 100644 index 0000000..9206f1d Binary files /dev/null and b/COMUN/utile/email/images/1page.bmp differ diff --git a/COMUN/utile/email/images/1page.msk b/COMUN/utile/email/images/1page.msk new file mode 100644 index 0000000..f277234 Binary files /dev/null and b/COMUN/utile/email/images/1page.msk differ diff --git a/COMUN/utile/email/images/2page.bmp b/COMUN/utile/email/images/2page.bmp new file mode 100644 index 0000000..170e208 Binary files /dev/null and b/COMUN/utile/email/images/2page.bmp differ diff --git a/COMUN/utile/email/images/2page.msk b/COMUN/utile/email/images/2page.msk new file mode 100644 index 0000000..37d60ae Binary files /dev/null and b/COMUN/utile/email/images/2page.msk differ diff --git a/COMUN/utile/email/images/4page.bmp b/COMUN/utile/email/images/4page.bmp new file mode 100644 index 0000000..f5787ef Binary files /dev/null and b/COMUN/utile/email/images/4page.bmp differ diff --git a/COMUN/utile/email/images/4page.msk b/COMUN/utile/email/images/4page.msk new file mode 100644 index 0000000..52ab2c0 Binary files /dev/null and b/COMUN/utile/email/images/4page.msk differ diff --git a/COMUN/utile/email/images/gotopage.bmp b/COMUN/utile/email/images/gotopage.bmp new file mode 100644 index 0000000..6352535 Binary files /dev/null and b/COMUN/utile/email/images/gotopage.bmp differ diff --git a/COMUN/utile/email/images/gotopage.msk b/COMUN/utile/email/images/gotopage.msk new file mode 100644 index 0000000..5e119e2 Binary files /dev/null and b/COMUN/utile/email/images/gotopage.msk differ diff --git a/COMUN/utile/email/images/grabber.gif b/COMUN/utile/email/images/grabber.gif new file mode 100644 index 0000000..d67abf3 Binary files /dev/null and b/COMUN/utile/email/images/grabber.gif differ diff --git a/COMUN/utile/email/images/pr_1page.bmp b/COMUN/utile/email/images/pr_1page.bmp new file mode 100644 index 0000000..9206f1d Binary files /dev/null and b/COMUN/utile/email/images/pr_1page.bmp differ diff --git a/COMUN/utile/email/images/pr_1page_.bmp b/COMUN/utile/email/images/pr_1page_.bmp new file mode 100644 index 0000000..9b83892 Binary files /dev/null and b/COMUN/utile/email/images/pr_1page_.bmp differ diff --git a/COMUN/utile/email/images/pr_1page_32.bmp b/COMUN/utile/email/images/pr_1page_32.bmp new file mode 100644 index 0000000..1bebac6 Binary files /dev/null and b/COMUN/utile/email/images/pr_1page_32.bmp differ diff --git a/COMUN/utile/email/images/pr_2page.bmp b/COMUN/utile/email/images/pr_2page.bmp new file mode 100644 index 0000000..170e208 Binary files /dev/null and b/COMUN/utile/email/images/pr_2page.bmp differ diff --git a/COMUN/utile/email/images/pr_2page_.bmp b/COMUN/utile/email/images/pr_2page_.bmp new file mode 100644 index 0000000..02d7c34 Binary files /dev/null and b/COMUN/utile/email/images/pr_2page_.bmp differ diff --git a/COMUN/utile/email/images/pr_2page_32.bmp b/COMUN/utile/email/images/pr_2page_32.bmp new file mode 100644 index 0000000..13f8060 Binary files /dev/null and b/COMUN/utile/email/images/pr_2page_32.bmp differ diff --git a/COMUN/utile/email/images/pr_4page.bmp b/COMUN/utile/email/images/pr_4page.bmp new file mode 100644 index 0000000..f5787ef Binary files /dev/null and b/COMUN/utile/email/images/pr_4page.bmp differ diff --git a/COMUN/utile/email/images/pr_4page_.bmp b/COMUN/utile/email/images/pr_4page_.bmp new file mode 100644 index 0000000..ffeb34a Binary files /dev/null and b/COMUN/utile/email/images/pr_4page_.bmp differ diff --git a/COMUN/utile/email/images/pr_4page_32.bmp b/COMUN/utile/email/images/pr_4page_32.bmp new file mode 100644 index 0000000..e4a19a5 Binary files /dev/null and b/COMUN/utile/email/images/pr_4page_32.bmp differ diff --git a/COMUN/utile/email/images/pr_Adress.bmp b/COMUN/utile/email/images/pr_Adress.bmp new file mode 100644 index 0000000..91808ca Binary files /dev/null and b/COMUN/utile/email/images/pr_Adress.bmp differ diff --git a/COMUN/utile/email/images/pr_Align_Justify.bmp b/COMUN/utile/email/images/pr_Align_Justify.bmp new file mode 100644 index 0000000..eeeb0df Binary files /dev/null and b/COMUN/utile/email/images/pr_Align_Justify.bmp differ diff --git a/COMUN/utile/email/images/pr_Align_center.bmp b/COMUN/utile/email/images/pr_Align_center.bmp new file mode 100644 index 0000000..319fc7f Binary files /dev/null and b/COMUN/utile/email/images/pr_Align_center.bmp differ diff --git a/COMUN/utile/email/images/pr_Align_left.bmp b/COMUN/utile/email/images/pr_Align_left.bmp new file mode 100644 index 0000000..7795f9b Binary files /dev/null and b/COMUN/utile/email/images/pr_Align_left.bmp differ diff --git a/COMUN/utile/email/images/pr_Align_right.bmp b/COMUN/utile/email/images/pr_Align_right.bmp new file mode 100644 index 0000000..267836c Binary files /dev/null and b/COMUN/utile/email/images/pr_Align_right.bmp differ diff --git a/COMUN/utile/email/images/pr_Attach.bmp b/COMUN/utile/email/images/pr_Attach.bmp new file mode 100644 index 0000000..a7265fe Binary files /dev/null and b/COMUN/utile/email/images/pr_Attach.bmp differ diff --git a/COMUN/utile/email/images/pr_Clean.bmp b/COMUN/utile/email/images/pr_Clean.bmp new file mode 100644 index 0000000..18b874c Binary files /dev/null and b/COMUN/utile/email/images/pr_Clean.bmp differ diff --git a/COMUN/utile/email/images/pr_Close.bmp b/COMUN/utile/email/images/pr_Close.bmp new file mode 100644 index 0000000..c539b90 Binary files /dev/null and b/COMUN/utile/email/images/pr_Close.bmp differ diff --git a/COMUN/utile/email/images/pr_Close2.bmp b/COMUN/utile/email/images/pr_Close2.bmp new file mode 100644 index 0000000..ac6a583 Binary files /dev/null and b/COMUN/utile/email/images/pr_Close2.bmp differ diff --git a/COMUN/utile/email/images/pr_Copy.bmp b/COMUN/utile/email/images/pr_Copy.bmp new file mode 100644 index 0000000..516cb39 Binary files /dev/null and b/COMUN/utile/email/images/pr_Copy.bmp differ diff --git a/COMUN/utile/email/images/pr_Cut.bmp b/COMUN/utile/email/images/pr_Cut.bmp new file mode 100644 index 0000000..b5bfe36 Binary files /dev/null and b/COMUN/utile/email/images/pr_Cut.bmp differ diff --git a/COMUN/utile/email/images/pr_FontBack.bmp b/COMUN/utile/email/images/pr_FontBack.bmp new file mode 100644 index 0000000..a4b48fb Binary files /dev/null and b/COMUN/utile/email/images/pr_FontBack.bmp differ diff --git a/COMUN/utile/email/images/pr_GetImage.bmp b/COMUN/utile/email/images/pr_GetImage.bmp new file mode 100644 index 0000000..1d75786 Binary files /dev/null and b/COMUN/utile/email/images/pr_GetImage.bmp differ diff --git a/COMUN/utile/email/images/pr_GotoPage.bmp b/COMUN/utile/email/images/pr_GotoPage.bmp new file mode 100644 index 0000000..6352535 Binary files /dev/null and b/COMUN/utile/email/images/pr_GotoPage.bmp differ diff --git a/COMUN/utile/email/images/pr_GotoPage_32.bmp b/COMUN/utile/email/images/pr_GotoPage_32.bmp new file mode 100644 index 0000000..419e057 Binary files /dev/null and b/COMUN/utile/email/images/pr_GotoPage_32.bmp differ diff --git a/COMUN/utile/email/images/pr_Hyperlink.bmp b/COMUN/utile/email/images/pr_Hyperlink.bmp new file mode 100644 index 0000000..8377410 Binary files /dev/null and b/COMUN/utile/email/images/pr_Hyperlink.bmp differ diff --git a/COMUN/utile/email/images/pr_ListDot.bmp b/COMUN/utile/email/images/pr_ListDot.bmp new file mode 100644 index 0000000..08d8000 Binary files /dev/null and b/COMUN/utile/email/images/pr_ListDot.bmp differ diff --git a/COMUN/utile/email/images/pr_ListNumber.bmp b/COMUN/utile/email/images/pr_ListNumber.bmp new file mode 100644 index 0000000..77e7b5f Binary files /dev/null and b/COMUN/utile/email/images/pr_ListNumber.bmp differ diff --git a/COMUN/utile/email/images/pr_Locate.bmp b/COMUN/utile/email/images/pr_Locate.bmp new file mode 100644 index 0000000..1899137 Binary files /dev/null and b/COMUN/utile/email/images/pr_Locate.bmp differ diff --git a/COMUN/utile/email/images/pr_Locate_32.bmp b/COMUN/utile/email/images/pr_Locate_32.bmp new file mode 100644 index 0000000..981f2b6 Binary files /dev/null and b/COMUN/utile/email/images/pr_Locate_32.bmp differ diff --git a/COMUN/utile/email/images/pr_MAIL03.ICO b/COMUN/utile/email/images/pr_MAIL03.ICO new file mode 100644 index 0000000..e8fb18e Binary files /dev/null and b/COMUN/utile/email/images/pr_MAIL03.ICO differ diff --git a/COMUN/utile/email/images/pr_Mail.BMP b/COMUN/utile/email/images/pr_Mail.BMP new file mode 100644 index 0000000..5e21d2e Binary files /dev/null and b/COMUN/utile/email/images/pr_Mail.BMP differ diff --git a/COMUN/utile/email/images/pr_Mail_32.bmp b/COMUN/utile/email/images/pr_Mail_32.bmp new file mode 100644 index 0000000..7066c2f Binary files /dev/null and b/COMUN/utile/email/images/pr_Mail_32.bmp differ diff --git a/COMUN/utile/email/images/pr_New.BMP b/COMUN/utile/email/images/pr_New.BMP new file mode 100644 index 0000000..aee5758 Binary files /dev/null and b/COMUN/utile/email/images/pr_New.BMP differ diff --git a/COMUN/utile/email/images/pr_Open.BMP b/COMUN/utile/email/images/pr_Open.BMP new file mode 100644 index 0000000..3265fd9 Binary files /dev/null and b/COMUN/utile/email/images/pr_Open.BMP differ diff --git a/COMUN/utile/email/images/pr_PDF.bmp b/COMUN/utile/email/images/pr_PDF.bmp new file mode 100644 index 0000000..e3161d7 Binary files /dev/null and b/COMUN/utile/email/images/pr_PDF.bmp differ diff --git a/COMUN/utile/email/images/pr_Paste.BMP b/COMUN/utile/email/images/pr_Paste.BMP new file mode 100644 index 0000000..0cb40aa Binary files /dev/null and b/COMUN/utile/email/images/pr_Paste.BMP differ diff --git a/COMUN/utile/email/images/pr_Previous.bmp b/COMUN/utile/email/images/pr_Previous.bmp new file mode 100644 index 0000000..14c6526 Binary files /dev/null and b/COMUN/utile/email/images/pr_Previous.bmp differ diff --git a/COMUN/utile/email/images/pr_Redo.BMP b/COMUN/utile/email/images/pr_Redo.BMP new file mode 100644 index 0000000..25cfc7e Binary files /dev/null and b/COMUN/utile/email/images/pr_Redo.BMP differ diff --git a/COMUN/utile/email/images/pr_Save.BMP b/COMUN/utile/email/images/pr_Save.BMP new file mode 100644 index 0000000..151810e Binary files /dev/null and b/COMUN/utile/email/images/pr_Save.BMP differ diff --git a/COMUN/utile/email/images/pr_SendMessage.bmp b/COMUN/utile/email/images/pr_SendMessage.bmp new file mode 100644 index 0000000..ae2bed0 Binary files /dev/null and b/COMUN/utile/email/images/pr_SendMessage.bmp differ diff --git a/COMUN/utile/email/images/pr_SortAscending.bmp b/COMUN/utile/email/images/pr_SortAscending.bmp new file mode 100644 index 0000000..ea211d0 Binary files /dev/null and b/COMUN/utile/email/images/pr_SortAscending.bmp differ diff --git a/COMUN/utile/email/images/pr_SortDescending.bmp b/COMUN/utile/email/images/pr_SortDescending.bmp new file mode 100644 index 0000000..d73caed Binary files /dev/null and b/COMUN/utile/email/images/pr_SortDescending.bmp differ diff --git a/COMUN/utile/email/images/pr_TextColor.bmp b/COMUN/utile/email/images/pr_TextColor.bmp new file mode 100644 index 0000000..71dfbb0 Binary files /dev/null and b/COMUN/utile/email/images/pr_TextColor.bmp differ diff --git a/COMUN/utile/email/images/pr_TextMoveLeft.bmp b/COMUN/utile/email/images/pr_TextMoveLeft.bmp new file mode 100644 index 0000000..3ea89f5 Binary files /dev/null and b/COMUN/utile/email/images/pr_TextMoveLeft.bmp differ diff --git a/COMUN/utile/email/images/pr_TextMoveRight.bmp b/COMUN/utile/email/images/pr_TextMoveRight.bmp new file mode 100644 index 0000000..ada8d76 Binary files /dev/null and b/COMUN/utile/email/images/pr_TextMoveRight.bmp differ diff --git a/COMUN/utile/email/images/pr_Top.bmp b/COMUN/utile/email/images/pr_Top.bmp new file mode 100644 index 0000000..074a3bc Binary files /dev/null and b/COMUN/utile/email/images/pr_Top.bmp differ diff --git a/COMUN/utile/email/images/pr_Undo.bmp b/COMUN/utile/email/images/pr_Undo.bmp new file mode 100644 index 0000000..eddd602 Binary files /dev/null and b/COMUN/utile/email/images/pr_Undo.bmp differ diff --git a/COMUN/utile/email/images/pr_Word.bmp b/COMUN/utile/email/images/pr_Word.bmp new file mode 100644 index 0000000..3d4660e Binary files /dev/null and b/COMUN/utile/email/images/pr_Word.bmp differ diff --git a/COMUN/utile/email/images/pr_bottom.bmp b/COMUN/utile/email/images/pr_bottom.bmp new file mode 100644 index 0000000..afea6d4 Binary files /dev/null and b/COMUN/utile/email/images/pr_bottom.bmp differ diff --git a/COMUN/utile/email/images/pr_bottom_32.bmp b/COMUN/utile/email/images/pr_bottom_32.bmp new file mode 100644 index 0000000..0e0b567 Binary files /dev/null and b/COMUN/utile/email/images/pr_bottom_32.bmp differ diff --git a/COMUN/utile/email/images/pr_close2_32.bmp b/COMUN/utile/email/images/pr_close2_32.bmp new file mode 100644 index 0000000..1bee1c7 Binary files /dev/null and b/COMUN/utile/email/images/pr_close2_32.bmp differ diff --git a/COMUN/utile/email/images/pr_close_32.bmp b/COMUN/utile/email/images/pr_close_32.bmp new file mode 100644 index 0000000..546f223 Binary files /dev/null and b/COMUN/utile/email/images/pr_close_32.bmp differ diff --git a/COMUN/utile/email/images/pr_excel.bmp b/COMUN/utile/email/images/pr_excel.bmp new file mode 100644 index 0000000..fb4d37e Binary files /dev/null and b/COMUN/utile/email/images/pr_excel.bmp differ diff --git a/COMUN/utile/email/images/pr_fax.bmp b/COMUN/utile/email/images/pr_fax.bmp new file mode 100644 index 0000000..9e559f0 Binary files /dev/null and b/COMUN/utile/email/images/pr_fax.bmp differ diff --git a/COMUN/utile/email/images/pr_gear.bmp b/COMUN/utile/email/images/pr_gear.bmp new file mode 100644 index 0000000..654ebff Binary files /dev/null and b/COMUN/utile/email/images/pr_gear.bmp differ diff --git a/COMUN/utile/email/images/pr_gear_32.bmp b/COMUN/utile/email/images/pr_gear_32.bmp new file mode 100644 index 0000000..746d2b3 Binary files /dev/null and b/COMUN/utile/email/images/pr_gear_32.bmp differ diff --git a/COMUN/utile/email/images/pr_html.bmp b/COMUN/utile/email/images/pr_html.bmp new file mode 100644 index 0000000..9340ab9 Binary files /dev/null and b/COMUN/utile/email/images/pr_html.bmp differ diff --git a/COMUN/utile/email/images/pr_img.bmp b/COMUN/utile/email/images/pr_img.bmp new file mode 100644 index 0000000..286adb5 Binary files /dev/null and b/COMUN/utile/email/images/pr_img.bmp differ diff --git a/COMUN/utile/email/images/pr_mht.bmp b/COMUN/utile/email/images/pr_mht.bmp new file mode 100644 index 0000000..97c6d7d Binary files /dev/null and b/COMUN/utile/email/images/pr_mht.bmp differ diff --git a/COMUN/utile/email/images/pr_next.bmp b/COMUN/utile/email/images/pr_next.bmp new file mode 100644 index 0000000..ee602d9 Binary files /dev/null and b/COMUN/utile/email/images/pr_next.bmp differ diff --git a/COMUN/utile/email/images/pr_next_32.bmp b/COMUN/utile/email/images/pr_next_32.bmp new file mode 100644 index 0000000..6928c49 Binary files /dev/null and b/COMUN/utile/email/images/pr_next_32.bmp differ diff --git a/COMUN/utile/email/images/pr_previous_32.bmp b/COMUN/utile/email/images/pr_previous_32.bmp new file mode 100644 index 0000000..deed83a Binary files /dev/null and b/COMUN/utile/email/images/pr_previous_32.bmp differ diff --git a/COMUN/utile/email/images/pr_print.bmp b/COMUN/utile/email/images/pr_print.bmp new file mode 100644 index 0000000..0cbf7ab Binary files /dev/null and b/COMUN/utile/email/images/pr_print.bmp differ diff --git a/COMUN/utile/email/images/pr_printPref.bmp b/COMUN/utile/email/images/pr_printPref.bmp new file mode 100644 index 0000000..596149a Binary files /dev/null and b/COMUN/utile/email/images/pr_printPref.bmp differ diff --git a/COMUN/utile/email/images/pr_printPref_32.bmp b/COMUN/utile/email/images/pr_printPref_32.bmp new file mode 100644 index 0000000..42c1ab5 Binary files /dev/null and b/COMUN/utile/email/images/pr_printPref_32.bmp differ diff --git a/COMUN/utile/email/images/pr_print_32.bmp b/COMUN/utile/email/images/pr_print_32.bmp new file mode 100644 index 0000000..3068d66 Binary files /dev/null and b/COMUN/utile/email/images/pr_print_32.bmp differ diff --git a/COMUN/utile/email/images/pr_save_.bmp b/COMUN/utile/email/images/pr_save_.bmp new file mode 100644 index 0000000..ec6c28a Binary files /dev/null and b/COMUN/utile/email/images/pr_save_.bmp differ diff --git a/COMUN/utile/email/images/pr_save_32.bmp b/COMUN/utile/email/images/pr_save_32.bmp new file mode 100644 index 0000000..19efca7 Binary files /dev/null and b/COMUN/utile/email/images/pr_save_32.bmp differ diff --git a/COMUN/utile/email/images/pr_search.bmp b/COMUN/utile/email/images/pr_search.bmp new file mode 100644 index 0000000..f6a45a0 Binary files /dev/null and b/COMUN/utile/email/images/pr_search.bmp differ diff --git a/COMUN/utile/email/images/pr_searchAgain.bmp b/COMUN/utile/email/images/pr_searchAgain.bmp new file mode 100644 index 0000000..802b548 Binary files /dev/null and b/COMUN/utile/email/images/pr_searchAgain.bmp differ diff --git a/COMUN/utile/email/images/pr_searchAgain_32.bmp b/COMUN/utile/email/images/pr_searchAgain_32.bmp new file mode 100644 index 0000000..11faa5a Binary files /dev/null and b/COMUN/utile/email/images/pr_searchAgain_32.bmp differ diff --git a/COMUN/utile/email/images/pr_searchBack.bmp b/COMUN/utile/email/images/pr_searchBack.bmp new file mode 100644 index 0000000..bcdf887 Binary files /dev/null and b/COMUN/utile/email/images/pr_searchBack.bmp differ diff --git a/COMUN/utile/email/images/pr_searchBack_32.bmp b/COMUN/utile/email/images/pr_searchBack_32.bmp new file mode 100644 index 0000000..8da8120 Binary files /dev/null and b/COMUN/utile/email/images/pr_searchBack_32.bmp differ diff --git a/COMUN/utile/email/images/pr_search_32.bmp b/COMUN/utile/email/images/pr_search_32.bmp new file mode 100644 index 0000000..7f52ebf Binary files /dev/null and b/COMUN/utile/email/images/pr_search_32.bmp differ diff --git a/COMUN/utile/email/images/pr_top_32.bmp b/COMUN/utile/email/images/pr_top_32.bmp new file mode 100644 index 0000000..672ba0a Binary files /dev/null and b/COMUN/utile/email/images/pr_top_32.bmp differ diff --git a/COMUN/utile/email/images/preclose.bmp b/COMUN/utile/email/images/preclose.bmp new file mode 100644 index 0000000..fcd02db Binary files /dev/null and b/COMUN/utile/email/images/preclose.bmp differ diff --git a/COMUN/utile/email/images/preclose.msk b/COMUN/utile/email/images/preclose.msk new file mode 100644 index 0000000..21dc664 Binary files /dev/null and b/COMUN/utile/email/images/preclose.msk differ diff --git a/COMUN/utile/email/images/prefirst.bmp b/COMUN/utile/email/images/prefirst.bmp new file mode 100644 index 0000000..26c8742 Binary files /dev/null and b/COMUN/utile/email/images/prefirst.bmp differ diff --git a/COMUN/utile/email/images/prelast.bmp b/COMUN/utile/email/images/prelast.bmp new file mode 100644 index 0000000..26b202f Binary files /dev/null and b/COMUN/utile/email/images/prelast.bmp differ diff --git a/COMUN/utile/email/images/prenext.bmp b/COMUN/utile/email/images/prenext.bmp new file mode 100644 index 0000000..3b7873a Binary files /dev/null and b/COMUN/utile/email/images/prenext.bmp differ diff --git a/COMUN/utile/email/images/preprev.bmp b/COMUN/utile/email/images/preprev.bmp new file mode 100644 index 0000000..d01d0c5 Binary files /dev/null and b/COMUN/utile/email/images/preprev.bmp differ diff --git a/COMUN/utile/email/images/preview.bmp b/COMUN/utile/email/images/preview.bmp new file mode 100644 index 0000000..f3d0941 Binary files /dev/null and b/COMUN/utile/email/images/preview.bmp differ diff --git a/COMUN/utile/email/images/preview.msk b/COMUN/utile/email/images/preview.msk new file mode 100644 index 0000000..4042971 Binary files /dev/null and b/COMUN/utile/email/images/preview.msk differ diff --git a/COMUN/utile/email/images/print.bmp b/COMUN/utile/email/images/print.bmp new file mode 100644 index 0000000..a19b937 Binary files /dev/null and b/COMUN/utile/email/images/print.bmp differ diff --git a/COMUN/utile/email/images/print.msk b/COMUN/utile/email/images/print.msk new file mode 100644 index 0000000..e33a8fd Binary files /dev/null and b/COMUN/utile/email/images/print.msk differ diff --git a/COMUN/utile/email/images/wwrite.ico b/COMUN/utile/email/images/wwrite.ico new file mode 100644 index 0000000..b69a2e4 Binary files /dev/null and b/COMUN/utile/email/images/wwrite.ico differ diff --git a/COMUN/utile/email/pr_HtmlEdit.VCT b/COMUN/utile/email/pr_HtmlEdit.VCT new file mode 100644 index 0000000..909c4ff Binary files /dev/null and b/COMUN/utile/email/pr_HtmlEdit.VCT differ diff --git a/COMUN/utile/email/pr_adressbook.SCT b/COMUN/utile/email/pr_adressbook.SCT new file mode 100644 index 0000000..0d25d16 Binary files /dev/null and b/COMUN/utile/email/pr_adressbook.SCT differ diff --git a/COMUN/utile/email/pr_adressbook.scx b/COMUN/utile/email/pr_adressbook.scx new file mode 100644 index 0000000..bd5fc84 Binary files /dev/null and b/COMUN/utile/email/pr_adressbook.scx differ diff --git a/COMUN/utile/email/pr_htmledit.vcx b/COMUN/utile/email/pr_htmledit.vcx new file mode 100644 index 0000000..8f9a4fb Binary files /dev/null and b/COMUN/utile/email/pr_htmledit.vcx differ diff --git a/COMUN/utile/email/pr_sendmail.SCT b/COMUN/utile/email/pr_sendmail.SCT new file mode 100644 index 0000000..b4b38cf Binary files /dev/null and b/COMUN/utile/email/pr_sendmail.SCT differ diff --git a/COMUN/utile/email/pr_sendmail.scx b/COMUN/utile/email/pr_sendmail.scx new file mode 100644 index 0000000..96bef87 Binary files /dev/null and b/COMUN/utile/email/pr_sendmail.scx differ diff --git a/COMUN/utile/email/pr_sendmail2.SCT b/COMUN/utile/email/pr_sendmail2.SCT new file mode 100644 index 0000000..5bcd3c8 Binary files /dev/null and b/COMUN/utile/email/pr_sendmail2.SCT differ diff --git a/COMUN/utile/email/pr_sendmail2.scx b/COMUN/utile/email/pr_sendmail2.scx new file mode 100644 index 0000000..c22ed12 Binary files /dev/null and b/COMUN/utile/email/pr_sendmail2.scx differ diff --git a/COMUN/utile/excel/ExcelXML.VCT b/COMUN/utile/excel/ExcelXML.VCT new file mode 100644 index 0000000..2a09030 Binary files /dev/null and b/COMUN/utile/excel/ExcelXML.VCT differ diff --git a/COMUN/utile/excel/ExcelXML.prg b/COMUN/utile/excel/ExcelXML.prg new file mode 100644 index 0000000..01a0190 --- /dev/null +++ b/COMUN/utile/excel/ExcelXML.prg @@ -0,0 +1,1414 @@ +* export xml cu extensia xls pentru a fi deschis de office +PROCEDURE ExportExcelXml + LPARAMETERS toGrid, tcFileName, tcSheetName, tlOpen + * toGrid (optional): referinta la grid sau numele unui cursor, default cursorul din zona curenta + * tcFileName (optional): numele fisierului + * tcSheetName (optional): numele sheet-ului, default 'Sheet 1' + * tlOpen (optional): se deschide xls dupa salvare, default .T. + + local loExcelXML, llOk, lcSelect + lcSelect = SELECT() + + lcFile = IIF(!EMPTY(m.tcFileName), m.tcFilename, SYS(2015) + '.xls') + lcFilePath = JUSTPATH(m.lcFile) + lcFileName = JUSTFNAME(m.lcFile) + IF EMPTY(m.lcFilePath) + lcFile = PUTFILE('XLS File', m.lcFileName, 'xls') + ENDIF + + + loExcelXML = CREATEOBJECT("ExcelXML") + loExcelXML.HasFilter = .t. + loExcelXML.LockHeader = .t. + loExcelXML.SheetName = IIF(!EMPTY(m.tcSheetName), m.tcSheetName, 'Sheet 1') + loExcelXML.OpenAfterSaving = IIF(PCOUNT()>=4, m.tlOpen, .T.) + + IF TYPE('toGrid') = 'O' + loExcelXML.GridObject = m.toGrid + ELSE + IF TYPE('toGrid') = 'C' AND USED(toGrid) + SELECT (m.toGrid) + ELSE + SELECT (m.lcSelect) + ENDIF + ENDIF + + llOk = loExcelXML.Save(m.lcFile) + SELECT (m.lcSelect) + RETURN m.llOk +ENDPROC + + +*-- This PRG file was extracted to a PRG file from the original VCX file by Matt Slay 2017-09-03. +*-- This allows better updates of the source code by the VFP community on GitHib. +*-- GitHub: https://github.com/VFPX/ExcelXML +*--------------------------------------------------------------------------------------- +*-- Change Log: +*--------------------------------------------------------------------------------------- +*- 2017-09-10: Ver 1.10 +*-- 1. Added new method: ConvertXmlToXlsx(tcFilename, tnFileFormat, tlOpenAfterExporting) +*-- 2. Fixed bug in Bottom Border logic if cursor/grid only has 1 row of data. +*-- 3. Added new properties for ColumnHeaderBackgroundColor and ColumnHeaderForeColor +*-- 4. Added new property GridClass to use when creating a temporary form to create grid to host the cursor/alias during the export. +*- +*- 2017-09-03: Ver 1.09 +*-- Added Try/Catch to handle Dynamic properties that do evaluate properly. +*- [By Matt Slay] +*--------------------------------------------------------------------------------------- + +Define Class ExcelXml As Custom + + * Array with information about the structure of the table in a ; + * specified work area, specified by a table alias, or in the currently ; + * selected work area in an array and returns the number of fields in ; + * the table. + * Name of the table/cursor defined in the Grid or name of current ; + * table/cursor opened. + Alias = '' + * Returns the number of columns included in the Excel file. + ColumnCount = 0 + crlf = '' + * Specifies the date format. + DateFormat = '' + * Inform the name of Excel file. If you don't inform the name with the ; + * extension, the XML extension will be included. The default file name ; + * is "Book1" + File = '' + * Inform the grid control object to convert a grid control in an Excel ; + * XML file. + GridObject = '' + * .T. Includes the option Filter in all columns in the generated file. + HasFilter = .F. + Height = 16 + * .T. locks the header in the generated file. This option in Excel is ; + * called by Freeze Top Row. + LockHeader = .F. + * .T. to open the file after saving it. + OpenAfterSaving = .F. + * Returns the number of rows included in the Excel file. + RowCount = 0 + * Defines if the Excel file will have all the grid graphical attributes ; + * transported. + SetStyles = .T. + * Excel sheet name. The default name is "Sheet1" + SheetName = 'Sheet1' + stylecodenumber = 0 + * Object that contain the information about this class. + Version = '' + Width = 70 + * XML encoding type used to set the code that defines special ; + * characters. Default code is "iso-8859-1". + xmlEncoding = 'iso-8859-1' + cErrorMessage = "" + * The grid class name to use when creating a temporary form to create grid to host the cursor + * during the export. + GridClass = "grid" + * Colmn Header Background color. Can override grid header backcolor. Set to a string with Hex value, like "#CCCCCC" for light gray. + ColumnHeaderBackgroundColor = .null. + * Colmn Header ForegColor. Can override grid header forecolor. Set to a string with Hex value, like "#000000" for black. + ColumnHeaderForeColor = .null. + + + *|================================================================================ + *| ExcelXml:: + Procedure About + + Messagebox("ExcelXml " + This.Version.Number + " " + This.Version.Datetime + This.crlf + ; + "Converts a Grid control into a Microsoft Excel XML file" + This.crlf + ; + "" + This.crlf + ; + "Created by " + This.Version.Author + This.crlf + ; + This.Version.CountryAndCity + This.crlf + ; + This.Version.url + This.crlf + ; + This.Version.Email, 64, "About ExcelXml") + Endproc + + + *|================================================================================ + *| ExcelXml:: + Procedure AddNewStyle + Lparameters plcType, plnRow, plnCol, ; + plcAlignH, plcAlignV, plcFontName, plcFontFamily, ; + plcFontSize, plcForeColor, plcFontBold, plcFontItalic, ; + plcFontUnderline, plcFontStrikeThru, plcBackColor, plcPattern, ; + plcFormat + + Local lcStyleCode, lcXmlStyle + lcXmlStyle = "" + + *- Defini��o de bordas entre as linhas/colunas (c�lulas) + lcXmlBorderStyle = "" + lcTop = "0" + lcBottom = "0" + + If This.GridObject.GridLines >= 1 And This.SetStyles + lcGridLineWidth = Iif(plcType = "c", Alltrim(Str(Iif(This.GridObject.GridLineWidth >= 4, 3, This.GridObject.GridLineWidth))), "1") + lcGridLineColor = Iif(plcType = "c", This.ColorToStrHexa(This.GridObject.GridLineColor), This.ColorToStrHexa(Rgb(100, 100, 100))) + lcXmlBorderStyle = [ ] + This.crlf + + *- Linhas na horizontal + If Inlist(This.GridObject.GridLines, 1, 3) + lcXmlBorderStyle = lcXmlBorderStyle + [ ] + This.crlf + lcXmlBorderStyle = lcXmlBorderStyle + [ ] + This.crlf + EndIf + + *- Linhas na vertical + If Inlist(This.GridObject.GridLines, 2, 3) + If This.GridObject.GridLines = 2 + If plnRow = 1 &&- Se for a primeira linha + lcTop = "1" + lcXmlBorderStyle = lcXmlBorderStyle + [ ] + This.crlf + Endif + If plnRow = (This.RowCount - 1) &&- Se for a ultima linha + lcBottom = "1" + lcXmlBorderStyle = lcXmlBorderStyle + [ ] + This.crlf + Endif + Endif + + lcXmlBorderStyle = lcXmlBorderStyle + [ ] + This.crlf + lcXmlBorderStyle = lcXmlBorderStyle + [ ] + This.crlf + Endif + + lcXmlBorderStyle = lcXmlBorderStyle + [ ] + This.crlf + Else + lcXmlBorderStyle = [ ] + This.crlf + Endif + + + *- Adiciono no cursor caso n�o ache um registro com os mesmos dados + If Not Seek(plcAlignH + plcAlignV + plcFontName + plcFontFamily + ; + plcFontSize + plcForeColor + plcFontBold + plcFontItalic + ; + plcFontUnderline + plcFontStrikeThru + plcBackColor + plcPattern + ; + plcFormat + lcTop + lcBottom, ; + "xxxStylesProperties", "idxStyle") + + This.stylecodenumber = This.stylecodenumber + 1 + lcStyleCode = Alltrim(Lower(plcType)) + Transform(This.stylecodenumber, "@L 99999") + + *- xml de estilo da celula + lcXmlStyle = [ ] + + Insert Into xxxStylesProperties ; + Values ( lcStyleCode, ; + plcAlignH, ; + plcAlignV, ; + plcFontName, ; + plcFontFamily, ; + plcFontSize, ; + plcForeColor, ; + plcFontBold, ; + plcFontItalic, ; + plcFontUnderline, ; + plcFontStrikeThru, ; + plcBackColor, ; + plcPattern, ; + plcFormat, ; + lcTop, ; + lcBottom, ; + lcXmlStyle ) + Endif + + Insert Into xxxStylesRowCol ; + Values ( Transform(plnRow, "@L 999999"), ; + Transform(plnCol, "@L 999"), ; + xxxStylesProperties.ssCode ) + + Return lcXmlStyle + Endproc + + + *|================================================================================ + *| ExcelXml:: + Procedure BuildColumnsStyles + + Local lcAlignH, lcAlignV, lcFontName, lcFontFamily, ; + lcFontSize, lcForeColor, lcFontBold, lcFontItalic, ; + lcFontUnderline, lcFontStrikeThru, lcBackColor, lcPattern, ; + lcFormat, lcXmlBorderStyle, lcXmlStyles, lnRow, lnCol, lnRowFound + + This.stylecodenumber = 0 + lnRow = 0 + lnCol = 0 + lcXmlStyles = "" + + + *- Verifico os estilos de todas as linhas/colunas do grid + Select (This.Alias) + Go Top + Scan + lnRow = lnRow + 1 + + If Not This.SetStyles And lnRow >= 2 &&- N�o aplica os estilos ao grid. + Exit + Endif + + For lnCol = 1 To This.GridObject.ColumnCount + loColumn = This.GetColumn(lnCol) + If Not loColumn.Visible &&-Considero somente as colunas visiveis + Loop + Endif + + *- Formato dos dados da linha/coluna (c�lula) + lcDataColumn = Evaluate(loColumn.ControlSource) + loCurrentControl = This.GetCurrentControlObject(loColumn) + lcFormat = "" + + If Not Isnull(loCurrentControl) + Do Case + Case Inlist(Vartype(lcDataColumn), "N", "Y") + If Lower(loCurrentControl.BaseClass) $ "textbox//spinner" + If Not Empty(loColumn.InputMask) + lcInputMask = loColumn.InputMask + If Occurs(".", lcInputMask) > 0 + lcFormat = "#,##0." + Replicate("0", Len(Subs(lcInputMask, Rat(".", lcInputMask) + 1))) + Else + lcFormat = "#,##0" + Endif + Else + lnRowFound = Ascan(This._Fields, Iif("." $ loColumn.ControlSource, Substr(loColumn.ControlSource, At(".", loColumn.ControlSource) + 1), loColumn.ControlSource), -1, -1, 1, 15) + If lnRowFound > 0 And This._Fields[lnRowFound, 4] > 0 + lcFormat = "#,##0." + Replicate("0", This._Fields[lnRowFound, 4]) + Else + lcFormat = "" + Endif + Endif + Endif + + If Lower(loCurrentControl.BaseClass) $ "checkbox//optiongroup" + lcFormat = "" + Endif + + Case Vartype(lcDataColumn) = "D" + lcFormat = This.DateFormat + ";@" + + Case Vartype(lcDataColumn) = "T" + If Lower(loCurrentControl.BaseClass) = "textbox" + lnHasSeconds = loCurrentControl.Seconds + Else + lnHasSeconds = 2 + Endif + + If lnHasSeconds = 0 + *- Data e hora sem segundos + lcFormat = This.DateFormat + "\ h:mm" + Iif(Set("hours") = 12, " AM/PM", "") + Else + *- Data e hora com segundos + lcFormat = This.DateFormat + "\ h:mm:ss" + Iif(Set("hours") = 12, " AM/PM", "") + Endif + + Case Vartype(lcDataColumn) = "L" + lcFormat = "True/False" + + Otherwise + lcFormat = "" + Endcase + Endif + + lcFormat = Padr(lcFormat, Len(xxxStylesProperties.ssFormat)) + + *- Requisitos fixos para o estilo + lcFontFamily = Padr("Swiss", Len(xxxStylesProperties.ssFontFamily)) + lcPattern = Padr("Solid", Len(xxxStylesProperties.ssPattern)) + + *- Alinhamento Horizontal do texto da coluna/linha + If Not Isnull(loCurrentControl) And Lower(loCurrentControl.BaseClass) = "combobox" + lcAlignH = This.GetColumnAlign("H", loCurrentControl.Alignment, Vartype(lcDataColumn)) + lcAlignV = This.GetColumnAlign("V", loCurrentControl.Alignment, Vartype(lcDataColumn)) + Else + lcAlignH = This.GetColumnAlign("H", loColumn.Alignment, Vartype(lcDataColumn)) + lcAlignV = This.GetColumnAlign("V", loColumn.Alignment, Vartype(lcDataColumn)) + Endif + + *- cor de fundo da coluna/linha + If Not Empty(loColumn.DynamicBackColor) + Try + lcBackColor = This.ColorToStrHexa(Evaluate(loColumn.DynamicBackColor) ) + Catch + lcBackColor = This.ColorToStrHexa( loColumn.BackColor ) + Endtry + Else + lcBackColor = This.ColorToStrHexa( loColumn.BackColor ) + Endif + + + *- cor da fonte da coluna/linha + If Not Empty(loColumn.DynamicForeColor) + Try + lcForeColor = This.ColorToStrHexa( Evaluate(loColumn.DynamicForeColor) ) + Catch + lcForeColor = This.ColorToStrHexa( loColumn.ForeColor ) + Endtry + Else + lcForeColor = This.ColorToStrHexa( loColumn.ForeColor ) + Endif + + + *- fonte usada na coluna/linha + If Not Empty(loColumn.DynamicFontName) + Try + lcFontName = Evaluate(loColumn.DynamicFontName) + Catch + lcFontName = Padr(lcFontName, Len(xxxStylesProperties.ssFontName)) + Endtry + Else + lcFontName = loColumn.FontName + Endif + lcFontName = Padr(lcFontName, Len(xxxStylesProperties.ssFontName)) + + + *- tamanho da fonte da coluna/linha + If Not Empty(loColumn.DynamicFontSize) + Try + lcFontSize = Transform(Evaluate(loColumn.DynamicFontSize), "@L 999") + Catch + lcFontSize = Transform(loColumn.FontSize, "@L 999") + Endtry + Else + lcFontSize = Transform(loColumn.FontSize, "@L 999") + Endif + + + *- Fonte Italica da coluna/linha + If Not Empty(loColumn.DynamicFontItalic) + Try + lcFontItalic = Iif(Evaluate(loColumn.DynamicFontItalic), "1", "0") + Catch + lcFontItalic = Iif(loColumn.FontItalic, "1", "0") + Endtry + Else + lcFontItalic = Iif(loColumn.FontItalic, "1", "0") + Endif + + + *- Fonte Negrito da coluna/linha + If Not Empty(loColumn.DynamicFontBold) + Try + lcFontBold = Iif(Evaluate(loColumn.DynamicFontBold), "1", "0") + Catch + lcFontBold = Iif(loColumn.FontBold, "1", "0") + Endtry + Else + lcFontBold = Iif(loColumn.FontBold, "1", "0") + Endif + + + *- Fonte Underline da coluna/linha + If Not Empty(loColumn.DynamicFontUnderline) + Try + lcFontUnderline = Iif(Evaluate(loColumn.DynamicFontUnderline), "Single", "") + Catch + lcFontUnderline = Iif(loColumn.FontUnderline, "Single", "") + Endtry + Else + lcFontUnderline = Iif(loColumn.FontUnderline, "Single", "") + Endif + lcFontUnderline = Padr(lcFontUnderline, Len(xxxStylesProperties.ssFontUnderline)) + + + *- Fonte Underline da coluna/linha + If Not Empty(loColumn.DynamicFontStrikethru) + Try + lcFontStrikeThru = Iif(Evaluate(loColumn.DynamicFontStrikethru), "1", "0") + Catch + lcFontStrikeThru = Iif(loColumn.FontStrikethru, "1", "0") + Endtry + Else + lcFontStrikeThru = Iif(loColumn.FontStrikethru, "1", "0") + Endif + lcFontStrikeThru = Padr(lcFontStrikeThru, Len(xxxStylesProperties.ssFontStrikeThru)) + + + *- se o estilo j� existir "lcXmlStyle" retorna "" + lcXmlStyle = This.AddNewStyle( "c", lnRow, lnCol, ; + lcAlignH, lcAlignV, lcFontName, lcFontFamily, ; + lcFontSize, lcForeColor, lcFontBold, lcFontItalic, ; + lcFontUnderline, lcFontStrikeThru, lcBackColor, lcPattern, ; + lcFormat ) + + If Not Empty(lcXmlStyle) + lcXmlStyles = lcXmlStyles + This.crlf + lcXmlStyle + Endif + Endfor + Endscan + + Return lcXmlStyles + Endproc + + + *|================================================================================ + *| ExcelXml:: + Procedure BuildColumnsWidth + + Local lcXmlColumnsWidth, lnCol, lnColumnWidth + + lcXmlColumnsWidth = This.crlf + + For lnCol = 1 To This.GridObject.ColumnCount + loColumn = This.GetColumn(lnCol) + If loColumn.Visible = .T. + lnColumnWidth = Iif(loColumn.Width > 700, 700, loColumn.Width) &&- Avoiding error in Excel + lcXmlColumnsWidth = lcXmlColumnsWidth + [ ] + This.crlf + Endif + Endfor + + Return lcXmlColumnsWidth + + Endproc + + + *|================================================================================ + *| ExcelXml:: + Procedure BuildHeadersStyles + + Local loColumn, loColumnHeader, lnCol, lcXmlStyles, lcXmlStyle, ; + lcBackColor, lcForeColor, lcFontName, lcFontSize, lcFontItalic, ; + lcFontBold, lcFontUnderline, lcFontStrikeThru, lcFormat, ; + lcFontFamily, lcPattern, lcAlignH, lcAlignV, lcCollate + + lcXmlStyle = "" + lcXmlStyles = "" + This.stylecodenumber = 0 + lcCollate = Set("Collate") + + Set Collate To "MACHINE" + + *- Crio cursor para armazenar todos os estilos encontrados + Create Cursor xxxStylesProperties ( ssCode c(6), ; + ssAlignH c(6), ; + ssAlignV c(6), ; + ssFontName c(40), ; + ssFontFamily c(5), ; + ssFontSize c(3), ; + ssFontColor c(7), ; + ssFontBold c(1), ; + ssFontItalic c(1), ; + ssFontUnderline c(6), ; + ssFontStrikeThru c(1), ; + ssBackColor c(7), ; + ssPattern c(5), ; + ssFormat c(40), ; + ssTop c(1), ; + ssBottom c(1), ; + ssStyle m ) + + + + Select xxxStylesProperties + Index On ssAlignH + ssAlignV + ssFontName + ; + ssFontFamily + ssFontSize + ssFontColor + ; + ssFontBold + ssFontItalic + ssFontUnderline + ssFontStrikeThru + ; + ssBackColor + ssPattern + ssFormat + ssTop + ssBottom Tag idxStyle + + Index On ssCode Tag idxCode + + *- Crio cursor para gravar o estilo que sera usado pela linha/coluna (c�lula) + Create Cursor xxxStylesRowCol ( ssRow c(6), ; + ssCol c(3), ; + ssCode c(6) ) + + Select xxxStylesRowCol + Index On ssRow + ssCol Tag idxRowCol + + Set Collate To lcCollate + + + *- Verifico os estilos dos headers de cada coluna + If This.GridObject.HeaderHeight > 0 + For lnCol = 1 To This.GridObject.ColumnCount + loColumn = This.GetColumn(lnCol) + loColumnHeader = This.GetColumnHeader(loColumn) + + If IsNull(This.ColumnHeaderBackgroundColor) + lcBackColor = This.ColorToStrHexa( Iif(This.SetStyles, loColumnHeader.BackColor, Rgb(255, 255, 255)) ) + Else + lcBackColor = This.ColumnHeaderBackgroundColor + EndIf + + If IsNull(This.ColumnHeaderForeColor) + lcForeColor = This.ColorToStrHexa( Iif(This.SetStyles, loColumnHeader.ForeColor, Rgb(0, 0, 0)) ) + Else + lcForeColor = This.ColumnHeaderForeColor + EndIf + + lcFontName = Padr(loColumnHeader.FontName, Len(xxxStylesProperties.ssFontName)) + lcFontSize = Transform(loColumnHeader.FontSize, "@L 999") + lcFontItalic = Iif(loColumnHeader.FontItalic, "1", "0") + lcFontBold = Iif(loColumnHeader.FontBold Or This.SetStyles = .F., "1", "0") + lcFontUnderline = Padr(Iif(loColumnHeader.FontUnderline Or This.SetStyles = .F., "Single", ""), Len(xxxStylesProperties.ssFontUnderline)) + lcFontStrikeThru = Iif(loColumnHeader.FontStrikethru, "1", "0") + lcFormat = Padr("", Len(xxxStylesProperties.ssFormat)) + lcFontFamily = Padr("Swiss", Len(xxxStylesProperties.ssFontFamily)) + lcPattern = Padr("Solid", Len(xxxStylesProperties.ssPattern)) + lcAlignH = Iif(This.SetStyles, This.GetColumnAlign("H", loColumnHeader.Alignment), "Left") + lcAlignV = Iif(This.SetStyles, This.GetColumnAlign("V", loColumnHeader.Alignment), "Center") + + *- se o estilo j� existir "lcXmlStyle" retorna "" + lcXmlStyle = This.addnewstyle( "h", 0, lnCol, ; + lcAlignH, lcAlignV, lcFontName, lcFontFamily, ; + lcFontSize, lcForeColor, lcFontBold, lcFontItalic, ; + lcFontUnderline, lcFontStrikeThru, lcBackColor, lcPattern, ; + lcFormat ) + + If Not Empty(lcXmlStyle) + lcXmlStyles = lcXmlStyles + This.crlf + lcXmlStyle + Endif + Endfor + Endif + + Return lcXmlStyles + + Endproc + + + *|================================================================================ + *| ExcelXml:: + Procedure BuildRows + Local lcXmlRows, lcDataType, lcDataColumn, lcAuxDataColumn, lnRow, lnCol, loColumn, loColumnHeader, loCurrentControl, ; + lnPercent, lnCountRowSource, lcCountOption, laArrayTmp, lcComboOption, lcToolTipText, lnBytes, llHasDecimals, ; + lnSetDecimals, lnRowFound, lnYear + + lcXmlRows = This.crlf + lnRow = 0 + lnCol = 0 + lnBytes = 0 + lnSetDecimals = Set("Decimals") + + *- Adiciono a linha do Header no arquivo excel + If This.GridObject.HeaderHeight > 0 + lcXmlRows = lcXmlRows + [ ] + This.crlf + + For lnCol = 1 To This.GridObject.ColumnCount + loColumn = This.GetColumn(lnCol) + loColumnHeader = This.GetColumnHeader(loColumn) + + If loColumn.Visible = .T. + *- caso tenha tooltiptext + lcToolTipText = "" + If Not Empty(loColumnHeader.ToolTipText) + lcToolTipText = [] + ; + [] + ; + [] + Alltrim(loColumnHeader.ToolTipText) + [] + ; + [] + ; + [] + Endif + + *- linha do header + lcXmlRows = lcXmlRows + [ ] + loColumnHeader.Caption + [] + lcToolTipText + [] + This.crlf + Endif + Endfor + + lcXmlRows = lcXmlRows + [ ] + This.crlf + Endif + + lcXmlRows = lcXmlRows + This.crlf + + *- Adiciono a linha do Registro no arquivo excel + Select (This.Alias) + Go Top + + Scan + lnRow = lnRow + 1 + lcXmlRows = lcXmlRows + [ ] + This.crlf + + *- percentual processado + lnPercent = Int((lnRow / (This.RowCount - (Iif(This.GridObject.HeaderHeight > 0, 1, 0))) ) * 100) + This.Progress(lnPercent) + + *- fa�o a varredura em todas as colunas + For lnCol = 1 To This.GridObject.ColumnCount + loColumn = This.GetColumn(lnCol) + If Not loColumn.Visible + Loop + Endif + + *- Verifico o tipo de dado da coluna + lcDataColumn = Evaluate(loColumn.ControlSource) + loCurrentControl = This.GetCurrentControlObject(loColumn) + + *- se n�o tem objeto de controle na linha da coluna n�o levo a informa��o da tabela ao excel + If Isnull(loCurrentControl) + lcDataType = "String" + lcDataColumn = "" + Else + Do Case + Case Vartype(lcDataColumn) $ "N//Y" + lcDataType = "Number" + + *- Se o currentcontrol da coluna for um combobox mostro o seu conteudo ao inves da posi��o numerica + If Lower(loCurrentControl.BaseClass) = "combobox" + Try + Do Case + *- Mostro o texto do value + Case loCurrentControl.RowSourceType = 1 + lcDataType = "String" + + If Not Empty(loCurrentControl.RowSource) + lcAuxDataColumn = Alltrim(loCurrentControl.RowSource) + lcAuxDataColumn = Strtran(Strtran(Strtran(lcAuxDataColumn, " ,", ","), ", ", ","), " , ", ",") + lcCountOption = Occurs(",", lcAuxDataColumn) + 1 + + Dimension laArrayTmp[lcCountOption] + For lnCountRowSource = 1 To lcCountOption + lcComboOption = Substr(lcAuxDataColumn, 1, Iif(lnCountRowSource < lcCountOption, At(",", lcAuxDataColumn) - 1, Len(lcAuxDataColumn)) ) + lcAuxDataColumn = Strtran(lcAuxDataColumn, lcComboOption + Iif(lcCountOption >= 2, ",", ""), "") + laArrayTmp[lnCountRowSource] = lcComboOption + Endfor + + lcDataColumn = Evaluate("laArrayTmp[" + Alltrim(Str(lcDataColumn)) + "]") + Endif + + *- Mostro o texto do array do combo + Case loCurrentControl.RowSourceType = 5 + lcDataType = "String" + + *- Se for um array objeto ex: thisform.ArrayName ou MyObj.ArrayName + If Occurs(".", loCurrentControl.RowSource) > 0 + lcObjArrayName = Substr(loCurrentControl.RowSource, 1, Rat(".", loCurrentControl.RowSource) - 1) + + *- Se for um array objeto publico + If Type(lcObjArrayName) = "O" + lcAuxDataColumn = loCurrentControl.RowSource + "[" + Alltrim(Str(lcDataColumn)) + "]" + Else + lcArrayName = Substr(loCurrentControl.RowSource, Rat(".", loCurrentControl.RowSource) + 1) + lnCountObjectHierarchy = Occurs(".", Sys(1272, This.GridObject)) + lcAuxDataColumn = "This.GridObject" + Replicate(".Parent", lnCountObjectHierarchy) + "." + lcArrayName + "[" + Alltrim(Str(lcDataColumn)) + "]" + Endif + + *- Array comum + Else + lcAuxDataColumn = loCurrentControl.RowSource + "[" + Alltrim(Str(lcDataColumn)) + "]" + Endif + + lcDataColumn = Evaluate(lcAuxDataColumn) + + + *- Qualquer outro mostro o conteudo do campo e n�o o conteudo do array + Otherwise + lcDataColumn = lcDataColumn + Endcase + + Catch To loError + Endtry + + If Vartype(loError) = "O" + Messagebox( "Combo array '" + loCurrentControl.RowSource + "' in column '" + loColumn.Name + "' not is valid", 48) + Select (This.Alias) + Go Top + Return .F. + Endif + Else + + lnRowFound = Ascan(This._Fields, Iif("." $ loColumn.ControlSource, Substr(loColumn.ControlSource, At(".", loColumn.ControlSource) + 1), loColumn.ControlSource), -1, -1, 1, 15) + If lnRowFound > 0 And This._Fields[lnRowFound, 4] > 0 + llHasDecimals = .T. + Set Decimals To This._Fields[lnRowFound, 4] + Else + llHasDecimals = .F. + Endif + + Endif + + Case Vartype(lcDataColumn) = "D" + lcDataType = "DateTime" + If Not Empty(Nvl(lcDataColumn, "")) + lnYear = Iif(Year(lcDataColumn) < 1900, 1900, Year(lcDataColumn)) + lcAuxDataColumn = Str(lnYear, 4) + "-" + Transform(Month(lcDataColumn), "@L 99") + "-" + Transform(Day(lcDataColumn), "@L 99") + "T00:00:00.000" + lcDataColumn = lcAuxDataColumn + Else + lcDataType = "String" + lcDataColumn = "" + Endif + + Case Vartype(lcDataColumn) = "T" + lcDataType = "DateTime" + If Not Empty(Nvl(lcDataColumn, "")) + lnYear = Iif(Year(lcDataColumn) < 1900, 1900, Year(lcDataColumn)) + lcAuxDataColumn = Str(lnYear, 4) + "-" + Transform(Month(lcDataColumn), "@L 99") + "-" + Transform(Day(lcDataColumn), "@L 99") + ; + "T" + Transform(Hour(lcDataColumn), "@L 99") + ":" + Transform(Minute(lcDataColumn), "@L 99") + ":" + Transform(Sec(lcDataColumn), "@L 99") + ".000" + lcDataColumn = lcAuxDataColumn + Else + lcDataType = "String" + lcDataColumn = "" + Endif + + Case Vartype(lcDataColumn) = "L" + lcDataType = "Number" + lcDataColumn = Iif(lcDataColumn, 1, 0) + + Otherwise + lcDataType = "String" + If Isnull(lcDataColumn) + lcDataColumn = "" + Endif + Endcase + Endif + + *- removing invalid characters + If lcDataType = "String" And ("<" $ lcDataColumn Or ">" $ lcDataColumn) + lcDataColumn = Strtran(Strtran(lcDataColumn, "<", "["), ">", "]") + Endif + + *- incluo a linha de dados + lcXmlRows = lcXmlRows + [ ] + Alltrim(Transform(lcDataColumn, "")) + [] + This.crlf + + *- devolvo o atributo original + If llHasDecimals + Set Decimals To lnSetDecimals + Endif + Endfor + + lcXmlRows = lcXmlRows + [ ] + This.crlf + lnBytes = lnBytes + Strtofile( lcXmlRows + This.crlf, This.File, 1) + lcXmlRows = "" + + Endscan + + Return lnBytes + Endproc + + + *|================================================================================ + *| ExcelXml:: + Procedure ColorToStrHexa(plnColor) + + Local lnDecimalColor + + lnDecimalColor = Substr(Transform(plnColor, '@0'), 5) + Return "#" + Right(lnDecimalColor, 2) + Substr(lnDecimalColor, 3, 2) + Left(lnDecimalColor, 2) + + Endproc + + + *|================================================================================ + *| ExcelXml:: + Procedure GetColumn(plcColumnNumber) + + Local lnCol + + For lnCol = 1 To This.GridObject.ColumnCount + If This.GridObject.Columns(lnCol).ColumnOrder = plcColumnNumber + Return This.GridObject.Columns(lnCol) + Endif + EndFor + + Endproc + + + *|================================================================================ + *| ExcelXml:: + Procedure GetColumnAlign(plcWhat, plnAlignment, plcVartype) + + Local lcAlignment, lcAlignH, lcAlignV + + plcVartype = Evl(plcVartype, "") + lcAlignment = Alltrim(Str(plnAlignment)) + + *- Alinhamento Horizontal do texto da coluna/linha + If plcWhat = "H" + Do Case + Case lcAlignment $ "0//4//7" + lcAlignH = "Left" + Case lcAlignment $ "1//5//8" + lcAlignH = "Right" + Case lcAlignment $ "2//6//9" + lcAlignH = "Center" + Otherwise + lcAlignH = Iif(plcVartype $ "N//Y", "Right", "Left") + Endcase + + lcAlignH = Padr(lcAlignH, Len(xxxStylesProperties.ssAlignH)) + Return lcAlignH + Endif + + *- Alinhamento vertical do texto da coluna/linha + If plcWhat = "V" + Do Case + Case lcAlignment $ "4//5//6" + lcAlignV = "Top" + Case lcAlignment $ "7//8//9" + lcAlignV = "Bottom" + Case lcAlignment $ "0//1//2" + lcAlignV = "Center" + Otherwise + lcAlignV = "Center" + Endcase + + lcAlignV = Padr(lcAlignV, Len(xxxStylesProperties.ssAlignV)) + Return lcAlignV + EndIf + + Endproc + + + *|================================================================================ + *| ExcelXml:: + Procedure GetColumnHeader(ploColumn) + + Local loReturn, lnX + loReturn = "" + + If ploColumn.ControlCount > 0 + For lnX = 1 To ploColumn.ControlCount + If Lower(ploColumn.Controls(lnX).BaseClass) = "header" + loReturn = ploColumn.Controls(lnX) + Exit + Endif + Endfor + Endif + + Return loReturn + + Endproc + + + *|================================================================================ + *| ExcelXml:: + Procedure GetCurrentControlObject(ploGridColumn) + + Local lcCurrentControl + + If Not Empty(ploGridColumn.DynamicCurrentControl) + Try + lcCurrentControl = Evaluate(ploGridColumn.DynamicCurrentControl) + Catch + lcCurrentControl = ploGridColumn.CurrentControl + Endtry + Else + lcCurrentControl = ploGridColumn.CurrentControl + Endif + + If Not Empty(lcCurrentControl) + Return Evaluate("ploGridColumn." + lcCurrentControl) + Else + Return Null + EndIf + + Endproc + + + *|================================================================================ + *| ExcelXml:: + Procedure HasColumnVisible + + Local lnCol, llReturn + llReturn = .F. + + For lnCol = 1 To This.GridObject.ColumnCount + If This.GridObject.Columns(lnCol).Visible + llReturn = .T. + Exit + Endif + Endfor + + Return llReturn + + Endproc + + + *|================================================================================ + *| ExcelXml:: + */---------------------------------------------------------------------------------------------------/* + */ Descripton..: - Classe para converter o grid do vfp em um arquivo xml para o Excel. /* + */ - A grande vantagem na utiliza��o � que N�O NECESSITA DO EXCEL INSTALADO /* + */ pois em nenhum momento o Excel � instanciado para automa��o. /* + */ Apesar de ser um arquivo xml, se encontra no padr�o Microsoft onde � reconhecido /* + */ pelo Excel como "Planilha XML 2003 (*.xml)". Dessa forma fica restrito o uso /* + */ para Excel 2003 ou superior. /* + */ /* + */ - Se o Excel estiver instalado o icone do arquivo gerado ser� reconhecido /* + */ pelo Excel e abrindo o arquivo ser� reconhecido como se fosse um XLS ou XLSX, /* + */ ou seja, tudo ser� transparente para o Excel. /* + */ /* + */ - Praticamente todos os recursos visuais do grid, headers, colunas e linhas /* + */ s�o tratados na exporta��o. Segue abaixo as propriedades reconhecidas: /* + */ /* + */ Header Properties /* + */ --------------------------------- /* + */ ToolTipText / HeaderHeight / Alignment / FontBold / FontItalic / FontUnderline / /* + */ FontStrikeThru / FontName / FontSize / ForeColor / BackColor / Caption / /* + */ /* + */ Columns Properties /* + */ --------------------------------- /* + */ ControlSource / BaseClass / InputMask / Seconds / RowHeight / Alignment / /* + */ FontBold / FontItalic / FontUnderline / FontStrikeThru / FontName / FontSize / /* + */ ForeColor / FontBackColor / CurrentControl / DynamicFontBold / DynamicFontItalic /* + */ DynamicFontUnderline / DynamicFontStrikeThru / DynamicCurrentControl / /* + */ DynamicFontName / DynamicFontSize / DynamicForeColor / DynamicBackColor / /* + */ ColumnCount / ColumnOrder / Width / Visible / Combobox.Alignment / /* + */ Combobox.RowSource / Combobox.RowSourceType /* + */ /* + */ Environment /* + */ --------------------------------- /* + */ set date / set century / set hours /* + */ /* + */ + */ Goals + */ ------ + */ a) Possibilidade de gerar planilhas com mais de 65,535 linhas superando + */ a limita�ao nativa do VFP + */ b) Converte um grid em planilha Excel assumindo 99% do visual do grid + */ c) Easy to implement and it is not necessary to change your code + */ d) Compativel com Excel 2003 ou superior + */ e) Pode ser aberto pelo OpenOffice reduzindo erros de convers�o + */ f) Ao abrir o arquivo pelo Excel � possivel salvar em outros formatos + */ g) Nao precisa ter o Excel instalado + */ + */ /* + */ Original Author......: Rodrigo Bruscain /* + */ Original Date........: 25/05/2013 (Original) /* + */ Country.....: Brazil - S�o Paulo - SP /* + */---------------------------------------------------------------------------------------------------/* + Procedure Init + + This.crlf = Chr(13) + Chr(10) + + Local lcDateFormat, lcCentury + + AddProperty(This, "_Fields[1]") + Dimension This._Fields[1,18] + + lcDateFormat = Set("Date") + lcCentury = Iif(Set("century") = "ON", "yyyy", "yy") + + Do Case + Case Inlist(lcDateFormat, "AMERICAN", "MDY") && month/day/year + This.DateFormat = "mm/dd/" + lcCentury + + Case lcDateFormat = "ANSI" && year.month.day + This.DateFormat = lcCentury + ".mm.dd" + + Case Inlist(lcDateFormat, "BRITISH", "DMY", "FRENCH") && day/month/year + This.DateFormat = "dd/mm/" + lcCentury + + Case lcDateFormat = "GERMAN" && day.month.year + This.DateFormat = "dd.mm." + lcCentury + + Case lcDateFormat = "ITALIAN" && day-month-year + This.DateFormat = "dd-mm-" + lcCentury + + Case Inlist(lcDateFormat, "JAPAN", "YMD") && year/month/day + This.DateFormat = lcCentury + "/mm/dd" + + Case lcDateFormat = "USA" && month-day-year + This.DateFormat = "mm-dd-" + lcCentury + + Otherwise + This.DateFormat = "dd/mm/" + lcCentury + Endcase + + *- version object + This.Version = Createobject("empty") + AddProperty(This.Version, "Version", "1.10") + AddProperty(This.Version, "DateTime", "Sep.10.2017 3:59:41 AM") + AddProperty(This.Version, "Author", "Rodrigo Duarte Bruscain") + AddProperty(This.Version, "CountryAndCity", "kitchener ON - Canada") + AddProperty(This.Version, "Url", "https://github.com/ExcelXml") + AddProperty(This.Version, "Email", "bruscain@hotmail.com") + AddProperty(This.Version, "Email2", "mattslay@jordanmachine.com") + + Endproc + + + *|================================================================================ + *| ExcelXml:: + Procedure Progress(plnPercent) + + *-- Add any code here that you want to execute as processing scans over each row... + + Endproc + + + *|================================================================================ + *| ExcelXml:: + Procedure Save(plcFile) + + Local lcCreatedDate, lnCol, lcSetPoint, loForm, lcAlias, lnRecNo, ; + lcXmlStart, lcXmlDocumentProperties, lcXmlExcelWorkbook, lcStringStyles, ; + lcXmlAllStyles, lcXmlFreezePanes, lcStringFilter, lcStringColumnWidth, ; + lcXmlWorksheet_part1, lcXmlWorksheet_part2, lnBytes, loError + + plcFile = Evl(plcFile, "Book1") + This.File = Evl(This.File, plcFile) + This.File = This.File + Iif(Empty(Justext(This.File)), ".XML", "") + + If Empty(Alias()) + Messagebox("No table is open in the current work area. ", 48) + Return .F. + Endif + + *- crio um grid virtual caso a nao exista um grid para conversao, + *- ou seja, estou convertendo somente a tabela + If VarType(This.GridObject) != "O" + loForm = CreateObject("form") + loForm.AddObject("grid1", This.GridClass) + loForm.Grid1.RecordSource = Alias() + loForm.Grid1.Visible = .T. + loForm.Refresh() + This.GridObject = loForm.Grid1 + This.SetStyles = .F. + Endif + + *- environment + If This.GridObject.RecordSourceType = 1 + This.Alias = This.GridObject.RecordSource + Else + This.Alias = Alias() + Endif + + lnRecNo = Recno() + Afields(This._Fields, This.Alias) + + + *- Data da cria��o do arquivo excel + lcCreatedDate = Str(Year(Date()), 4) + "-" + Transform(Month(Date()), "@L 99") + "-" + Transform(Day(Date()), "@L 99") + "T" + Time() + "Z" + + *- Numero de colunas v�lidas para o excel + This.ColumnCount = 0 + For lnCol = 1 To This.GridObject.ColumnCount + If This.GridObject.Columns(lnCol).Visible = .T. + This.ColumnCount = This.ColumnCount + 1 + Endif + Endfor + + *- Numero de linhas dispon�veis para o excel + This.RowCount = 0 + Select (This.Alias) + Count To This.RowCount + Go Top + + If This.GridObject.HeaderHeight > 0 + This.RowCount = This.RowCount + 1 + Endif + + *- verifico se tudo esta ok para prosseguir + If Isnull(This.GridObject) Or This.GridObject.ColumnCount <= 0 And This.hascolumnvisible() + Return .F. + Endif + + *- No Excel casas decimais obrigat�riamente trabalham com ponto "." + lcSetPoint = Set("Point") + Set Point To "." + + *- Inicio tratamento dos dados + Text To lcXmlStart Textmerge Pretext 2 Noshow + >"?> + + + ENDTEXT + + Text To lcXmlDocumentProperties Textmerge Pretext 2 Noshow + + <> + <> + <> + <> + 12.00 + + ENDTEXT + + Text To lcXmlExcelWorkbook Textmerge Pretext 2 Noshow + + 8130 + 15135 + 120 + 45 + False + False + + ENDTEXT + + + *- Crio os estilos de cores/fontes/formato/etc das colunas + *- Depois junto com o estilo padr�o todos os estilos encontrados + *- Estilos s�o todas as format�es da c�lulas combinadas onde um estilo pode ser usado + *- por v�rias c�luas ou por uma �nica c�lula. + lcStringStyles = "" + lcStringStyles = This.BuildHeadersStyles() &&- Estilos do header + lcStringStyles = lcStringStyles + This.buildcolumnsstyles() &&- Estilos das linhas/colunas + + Text To lcXmlAllStyles Textmerge Pretext 2 Noshow + + + <> + + ENDTEXT + + + *- Congelando paineis na horizontal e vertical + Do Case + *- Congelo a linha do header + Case This.GridObject.LockColumns = 0 And (This.GridObject.HeaderHeight > 0 And This.LockHeader) + Text To lcXmlFreezePanes Textmerge Pretext 2 Noshow + + + 1 + 1 + 2 + + + 3 + + + 2 + + + ENDTEXT + + *- congelo a linha do header e a coluna definida + Case This.GridObject.LockColumns > 0 And (This.GridObject.HeaderHeight > 0 And This.LockHeader) + Text To lcXmlFreezePanes Textmerge Pretext 2 Noshow + + + 1 + 1 + <> + <> + 0 + + + 3 + + + 1 + + + 2 + + + 0 + + + ENDTEXT + + *- congelo somente a coluna definida + Case This.GridObject.LockColumns > 0 And (This.GridObject.HeaderHeight = 0 Or Not This.LockHeader) + Text To lcXmlFreezePanes Textmerge Pretext 2 Noshow + + + 2 + 2 + 1 + + + 3 + + + 1 + + + ENDTEXT + + Otherwise + lcXmlFreezePanes = "" + Endcase + + + *- filtros na colunas + lcStringFilter = "" + If This.HasFilter And This.GridObject.HeaderHeight > 0 + Text To lcStringFilter Textmerge Pretext 2 Noshow + + + ENDTEXT + Endif + + + *- tratamento do nome da planilha + This.SheetName = Chrtran(Alltrim(Substr(This.SheetName, 1, 31)), ':?][*/\', '') + This.SheetName = Iif(Empty(This.SheetName), "Sheet1", This.SheetName) + + *- Monto a tabela + lcStringColumnWidth = This.buildcolumnswidth() + + Text To lcXmlWorksheet_part1 Textmerge Pretext 2 Noshow + +
+ <> + ENDTEXT + + Text To lcXmlWorksheet_part2 Textmerge Pretext 2 Noshow +
+ + +
+
+ + + + + + 9 + 300 + 300 + + + <> + False + False + + <> + + + ENDTEXT + + Try + lnBytes = 0 + lnBytes = lnBytes + Strtofile("", This.File, 0) + lnBytes = lnBytes + Strtofile( lcXmlStart + This.crlf, This.File, 1) + lnBytes = lnBytes + Strtofile( lcXmlDocumentProperties + This.crlf, This.File, 1) + lnBytes = lnBytes + Strtofile( lcXmlExcelWorkbook + This.crlf, This.File, 1) + lnBytes = lnBytes + Strtofile( lcXmlAllStyles + This.crlf, This.File, 1) + lnBytes = lnBytes + Strtofile( lcXmlWorksheet_part1 + This.crlf, This.File, 1) + + lnBytes = lnBytes + This.BuildRows() + + lnBytes = lnBytes + Strtofile( lcXmlWorksheet_part2 + This.crlf, This.File, 1) + + llReturn = Iif(lnBytes > 0, .T., .F.) + + Catch To loError + If File(This.File) + Erase (This.File) + Endif + + Messagebox("An error occurred during the data exporting. " + Chr(13) + "Error: " + loError.Message, 16, "Exporting") + + llReturn = .F. + Endtry + + *select xxxStylesRowCol + *browse normal + *select xxxStylesProperties + *browse normal + + Set Point To &lcSetPoint + + If Used("xxxStylesProperties") + Use In xxxStylesProperties + Endif + + If Used("xxxStylesRowCol") + Use In xxxStylesRowCol + Endif + + If Used(This.Alias) + Go lnRecNo + Endif + + If Vartype(This.GridObject) <> "O" + loForm.Release() + Endif + + This.GridObject = .Null. + + If Used(This.Alias) + Select (This.Alias) + Endif + + *- abre o arquivo apos salva-lo + If llReturn And This.OpenAfterSaving + Declare Integer ShellExecute In SHELL32.Dll As WinAPI_OpenAfterSavingExcelXml; + Integer HndWin, String cAction, String cFileName, ; + String cParams, String cDir, Integer nShowWin + + WinAPI_OpenAfterSavingExcelXml(0, "OPEN", This.File, "", "", 1) + Clear Dlls "WinAPI_OpenAfterSavingExcelXml" + Endif + + Return llReturn + + Endproc + + + *|================================================================================ + *| ExcelXml:: + Procedure SeekStyle(plcRow, plcCol) + + Local lcReturn + lcReturn = "" + + *- se nao aplica estilos + If Not This.SetStyles And plcRow > "000001" + plcRow = "000001" + Endif + + *- Procuro um estilo para a celula, caso nao encontre aplico o padr�o. + *- Teoricamente todas as celulas deve ter um estilo e n�o o padr�o. + If Seek(plcRow + plcCol, "xxxStylesRowCol", "idxRowCol") + lcReturn = xxxStylesRowCol.ssCode + Else + lcReturn = "Default" + Endif + + Return lcReturn + + EndProc + + + *--------------------------------------------------------------------------------------- + * After creating XML file in the Save() method, you can call this method and pass filename of XML file, + * to use Excell to open the XML file and convert it to an XLSX file. + * Values for lnFileFormat: + * 51 = xlOpenXMLWorkbook (without macro's in 2007-2013, xlsx) + * 52 = xlOpenXMLWorkbookMacroEnabled (with or without macro's in 2007-2013, xlsm) + * 50 = xlExcel12 (Excel Binary Workbook in 2007-2013 with or without macro's, xlsb) + * 56 = xlExcel8 (97-2003 format in Excel 2007-2013, xls) + Procedure ConvertXmlToXlsx(tcFilename, tnFileFormat, tlOpenAfterExporting) + + Local loExcel as "Excel.Application" + Local lcNewFilename, lnFileFormat, loWorkBook, lcSafety + + loExcel = Createobject("Excel.Application") + + If !IsObject(loExcel) + This.cErrorMessage = "Error starting Excel." + Return .F. + Endif + + If !File(tcFileName) + This.cErrorMessage = "File not found: " + tcFilename + Return .F. + Else + loWorkBook = loExcel.Application.Workbooks.Open(tcFileName) + EndIf + + lnFileFormat = Evl(tnFileFormat, 51) && 51 = xlsx as default + + If (".xml" $ tcFilename) + lcNewFilename = Strtran(tcFilename, ".xml", ".xlsx", 1, 99, 1) + loWorkBook.SaveAs(lcNewFilename, lnFileFormat) + lcSafety = Set("Safety") + Set Safety Off + Delete File (tcFileName) + Set Safety &lcSafety + Endif + + If tlOpenAfterExporting + loExcel.Visible = .T. + Else + loExcel.Quit() + EndIf + + Endproc + +Enddefine diff --git a/COMUN/utile/excel/VFPxWorkbookXLSX.VCT b/COMUN/utile/excel/VFPxWorkbookXLSX.VCT new file mode 100644 index 0000000..362a3d5 Binary files /dev/null and b/COMUN/utile/excel/VFPxWorkbookXLSX.VCT differ diff --git a/COMUN/utile/excel/VFPxWorkbookXLSX.h b/COMUN/utile/excel/VFPxWorkbookXLSX.h new file mode 100644 index 0000000..7827d3c --- /dev/null +++ b/COMUN/utile/excel/VFPxWorkbookXLSX.h @@ -0,0 +1,349 @@ +#DEFINE CR CHR(13) +#DEFINE LF CHR(10) +#DEFINE CRLF CR+LF +#DEFINE TAB CHR(9) +#DEFINE False .F. +#DEFINE True .T. +#DEFINE FOF_SILENT 4 + +#DEFINE LIMITS_MAX_CELL_CHARS 32767 +#DEFINE LIMITS_MAX_COLUMNS 16384 +#DEFINE LIMITS_MAX_ROWS 1048576 +#DEFINE LIMITS_MAX_ROW_HEIGHT 409 +#DEFINE LIMITS_MAX_COLUMN_WIDTH 255 +#DEFINE LIMITS_MAX_HDR_FTR_CHARS 255 +#DEFINE LIMITS_MAX_CELL_FORMATS 200 +#DEFINE LIMITS_MAX_FILL_STYLES 256 +#DEFINE LIMITS_MAX_LINE_STYLES 256 +#DEFINE LIMITS_MAX_FONTS 512 +#DEFINE LIMITS_MAX_FORMULA_LENGTH 8192 +#DEFINE LIMITS_MAX_SH_NAME 31 && Limit adjusted; found by Doug Hennig + +#DEFINE INSERT_BEFORE "BEFORE" +#DEFINE INSERT_AFTER "AFTER" +#DEFINE INSERT_RIGHT "RIGHT" +#DEFINE INSERT_LEFT "LEFT" + +#DEFINE SHIFT_CELLS_UP 1 +#DEFINE SHIFT_CELLS_LEFT 2 + +#DEFINE FILTER_OP_EQUAL "equal" +#DEFINE FILTER_OP_GREATERTHAN "greaterThan" +#DEFINE FILTER_OP_GREATOREQUAL "greaterThanOrEqual" +#DEFINE FILTER_OP_LESSTHAN "lessThan" +#DEFINE FILTER_OP_LESSOREQUAL "lessThanOrEqual" +#DEFINE FILTER_OP_NOT_EQUAL "notEqual" + +#DEFINE SHARED_FORMULA_COLUMN "C" +#DEFINE SHARED_FORMULA_ROW "R" + +#DEFINE START_NUMERIC_FORMAT_ID 165 + +#DEFINE SCOPE_WB_NAMED_RANGE 0 && Scope of named range - workbook +#DEFINE SCOPE_SH_NAMED_RANGE 1 && Scope of named range - limited to sheet + +#DEFINE VISIBLE_SHEET_STATE 0 && visible (default) +#DEFINE HIDDEN_SHEET_STATE 1 && hidden +#DEFINE VERYHIDDEN_SHEET_STATE 2 && veryHidden + +#DEFINE NONE_VALID_TYPE 1 && none +#DEFINE WHOLE_VALID_TYPE 2 && whole +#DEFINE DECIMAL_VALID_TYPE 3 && decimal +#DEFINE LIST_VALID_TYPE 4 && list +#DEFINE DATE_VALID_TYPE 5 && date +#DEFINE TIME_VALID_TYPE 6 && time +#DEFINE TXTLEN_VALID_TYPE 7 && textLength +#DEFINE CUSTOM_VALID_TYPE 8 && custom + +#DEFINE STOP_VALID_STYLE 1 && stop +#DEFINE WARN_VALID_STYLE 2 && warning +#DEFINE INFO_VALID_STYLE 3 && information + +#DEFINE BETWEEN_VALID_OPER 1 && between +#DEFINE NOTBETW_VALID_OPER 2 && notBetween +#DEFINE EQUAL_VALID_OPER 3 && equal +#DEFINE NOTEQUAL_VALID_OPER 4 && notEqual +#DEFINE LESSTHAN_VALID_OPER 5 && lessThan +#DEFINE LESSOREQUAL_VALID_OPER 6 && lessThanOrEqual +#DEFINE GREATTHAN_VALID_OPER 7 && greaterThan +#DEFINE GREATOREQUAL_VALID_OPER 8 && greaterThanOrEqual + +#DEFINE PORTRAIT_PRINT_ORIENTATION 1 +#DEFINE LANDSCAPE_PRINT_ORIENTATION 2 + +#DEFINE PAPERSIZE_LTR 1 && Letter paper (8.5 in. BY 11 in.) +#DEFINE PAPERSIZE_LTR_SMALL 2 && Letter small paper (8.5 in. BY 11 in.) +#DEFINE PAPERSIZE_TABLOID 3 && Tabloid paper (11 in. BY 17 in.) +#DEFINE PAPERSIZE_LEDGER 4 && Ledger paper (17 in. BY 11 in.) +#DEFINE PAPERSIZE_LEGAL 5 && Legal paper (8.5 in. BY 14 in.) +#DEFINE PAPERSIZE_STATEMENT 6 && Statement paper (5.5 in. BY 8.5 in.) +#DEFINE PAPERSIZE_EXECUTIVE 7 && Executive paper (7.25 in. BY 10.5 in.) +#DEFINE PAPERSIZE_A3 8 && A3 paper (297 mm BY 420 mm) +#DEFINE PAPERSIZE_A4 9 && A4 paper (210 mm BY 297 mm) +#DEFINE PAPERSIZE_A4_SMALL 10 && A4 small paper (210 mm BY 297 mm) +#DEFINE PAPERSIZE_A5 11 && A5 paper (148 mm BY 210 mm) +#DEFINE PAPERSIZE_B4 12 && B4 paper (250 mm BY 353 mm) +#DEFINE PAPERSIZE_B5 13 && B5 paper (176 mm BY 250 mm) +#DEFINE PAPERSIZE_FOLIO 14 && Folio paper (8.5 in. BY 13 in.) +#DEFINE PAPERSIZE_QUARTO 15 && Quarto paper (215 mm BY 275 mm) +#DEFINE PAPERSIZE_STD10X14 16 && Standard paper (10 in. BY 14 in.) +#DEFINE PAPERSIZE_STD11X17 17 && Standard paper (11 in. BY 17 in.) +#DEFINE PAPERSIZE_NOTE 18 && NOTE paper (8.5 in. BY 11 in.) +#DEFINE PAPERSIZE_9ENV 19 && #9 envelope (3.875 in. BY 8.875 in.) +#DEFINE PAPERSIZE_10ENV 20 && #10 envelope (4.125 in. BY 9.5 in.) +#DEFINE PAPERSIZE_11ENV 21 && #11 envelope (4.5 in. BY 10.375 in.) +#DEFINE PAPERSIZE_12ENV 22 && #12 envelope (4.75 in. BY 11 in.) +#DEFINE PAPERSIZE_14ENV 23 && #14 envelope (5 in. BY 11.5 in.) +#DEFINE PAPERSIZE_C 24 && C paper (17 in. BY 22 in.) +#DEFINE PAPERSIZE_D 25 && D paper (22 in. BY 34 in.) +#DEFINE PAPERSIZE_E 26 && E paper (34 in. BY 44 in.) +#DEFINE PAPERSIZE_DL_ENV 27 && DL envelope (110 mm BY 220 mm) +#DEFINE PAPERSIZE_C5_ENV 28 && C5 envelope (162 mm BY 229 mm) +#DEFINE PAPERSIZE_C3_ENV 29 && C3 envelope (324 mm BY 458 mm) +#DEFINE PAPERSIZE_C4_ENV 30 && C4 envelope (229 mm BY 324 mm) +#DEFINE PAPERSIZE_C6_ENV 31 && C6 envelope (114 mm BY 162 mm) +#DEFINE PAPERSIZE_C65_ENV 32 && C65 envelope (114 mm BY 229 mm) +#DEFINE PAPERSIZE_B4_ENV 33 && B4 envelope (250 mm BY 353 mm) +#DEFINE PAPERSIZE_B5_ENV 34 && B5 envelope (176 mm BY 250 mm) +#DEFINE PAPERSIZE_B6_ENV 35 && B6 envelope (176 mm BY 125 mm) +#DEFINE PAPERSIZE_ITALY_ENV 36 && Italy envelope (110 mm BY 230 mm) +#DEFINE PAPERSIZE_MONARCH_ENV 37 && Monarch envelope (3.875 in. BY 7.5 in.). +#DEFINE PAPERSIZE_6_3_4_ENV 38 && 6 3/4 envelope (3.625 in. BY 6.5 in.) +#DEFINE PAPERSIZE_US_STD_FANFOLD 39 && US standard fanfold (14.875 in. BY 11 in.) +#DEFINE PAPERSIZE_GERMAN_STD_FANFOLD 40 && German standard fanfold (8.5 in. BY 12 in.) +#DEFINE PAPERSIZE_GERMAN_LGL_FANFOLD 41 && German legal fanfold (8.5 in. BY 13 in.) +#DEFINE PAPERSIZE_ISO_B4 42 && ISO B4 (250 mm BY 353 mm) +#DEFINE PAPERSIZE_JPN_DBL_POSTCARD 43 && JPN DOUBLE postcard (200 mm BY 148 mm) +#DEFINE PAPERSIZE_STD_PAPER9X11 44 && Standard paper (9 in. BY 11 in.) +#DEFINE PAPERSIZE_STD_PAPER10X11 45 && Standard paper (10 in. BY 11 in.) +#DEFINE PAPERSIZE_STD_PAPER15X11 46 && Standard paper (15 in. BY 11 in.) +#DEFINE PAPERSIZE_INVITE_ENV 47 && Invite envelope (220 mm BY 220 mm) +#DEFINE PAPERSIZE_LTR_XTRA_PAPER 50 && Letter extra paper (9.275 in. BY 12 in.) +#DEFINE PAPERSIZE_LEGAL_XTRA_PAPER 51 && Legal extra paper (9.275 in. BY 15 in.) +#DEFINE PAPERSIZE_TABLOID_XTRA_PAPER 52 && Tabloid extra paper (11.69 in. BY 18 in.) +#DEFINE PAPERSIZE_A4_XTRA_PAPER 53 && A4 extra paper (236 mm BY 322 mm) +#DEFINE PAPERSIZE_LTR_TRANSVERSE 54 && Letter transverse paper (8.275 in. BY 11 in.) +#DEFINE PAPERSIZE_A4_TRANSVERSE 55 && A4 transverse paper (210 mm BY 297 mm) +#DEFINE PAPERSIZE_LTR_XTRA_TRANSV 56 && Letter extra transverse paper (9.275 in. BY 12 in.) +#DEFINE PAPERSIZE_SUPERA_A4 57 && SuperA/SuperA/A4 paper (227 mm BY 356 mm) +#DEFINE PAPERSIZE_SUPERB_A3 58 && SuperB/SuperB/A3 paper (305 mm BY 487 mm) +#DEFINE PAPERSIZE_LTR_PLUS 59 && Letter plus paper (8.5 in. BY 12.69 in.) +#DEFINE PAPERSIZE_A4_PLUS 60 && A4 plus paper (210 mm BY 330 mm) +#DEFINE PAPERSIZE_A5_TRANSVERSE 61 && A5 transverse paper (148 mm BY 210 mm) +#DEFINE PAPERSIZE_JIS_B5_TRANSVERS 62 && JIS B5 transverse paper (182 mm BY 257 mm) +#DEFINE PAPERSIZE_A3_EXTRA 63 && A3 extra paper (322 mm BY 445 mm) +#DEFINE PAPERSIZE_A5_EXTRA 64 && A5 extra paper (174 mm BY 235 mm) +#DEFINE PAPERSIZE_ISO_B5_EXTRA 65 && ISO B5 extra paper (201 mm BY 276 mm) +#DEFINE PAPERSIZE_A2 66 && A2 paper (420 mm BY 594 mm) +#DEFINE PAPERSIZE_A3_TRANSVERSE 67 && A3 transverse paper (297 mm BY 420 mm) +#DEFINE PAPERSIZE_A3_EXTRA_TRANSVE 68 && A3 extra transverse paper (322 mm BY 445 mm) +#DEFINE PAPERSIZE_JPN_DOUBLE 69 && JPN DOUBLE Postcard (200 mm x 148 mm) +#DEFINE PAPERSIZE_A6 70 && A6 (105 mm x 148 mm) +#DEFINE PAPERSIZE_JPN_ENV_KAKU1 71 && JPN Envelope Kaku #2 +#DEFINE PAPERSIZE_JPN_ENV_KAKU2 72 && JPN Envelope Kaku #3 +#DEFINE PAPERSIZE_JPN_ENV_CHOU3 73 && JPN Envelope Chou #3 +#DEFINE PAPERSIZE_JPN_ENV_CHOU4 74 && JPN Envelope Chou #4 +#DEFINE PAPERSIZE_LTR_ROT 75 && Letter Rotated (11in x 8 1/2 11 IN) +#DEFINE PAPERSIZE_A3_ROT 76 && A3 Rotated (420 mm x 297 mm) +#DEFINE PAPERSIZE_A4_ROT 77 && A4 Rotated (297 mm x 210 mm) +#DEFINE PAPERSIZE_A5_ROT 78 && A5 Rotated (210 mm x 148 mm) +#DEFINE PAPERSIZE_B4_JIS_ROT 79 && B4 (JIS) Rotated (364 mm x 257 mm) +#DEFINE PAPERSIZE_B5_JIS_ROT 80 && B5 (JIS) Rotated (257 mm x 182 mm) +#DEFINE PAPERSIZE_JPN_POSTCARD 81 && JPN Postcard Rotated (148 mm x 100 mm) +#DEFINE PAPERSIZE_DOUBLE_JPN 82 && DOUBLE JPN Postcard Rotated (148 mm x 200 mm) +#DEFINE PAPERSIZE_A6_ROT 83 && A6 Rotated (148 mm x 105 mm) +#DEFINE PAPERSIZE_JPN_ENV_KAKU2_ROT 84 && JPN Envelope Kaku #2 Rotated +#DEFINE PAPERSIZE_JPN_ENV_KAKU3_ROT 85 && JPN Envelope Kaku #3 Rotated +#DEFINE PAPERSIZE_JPN_ENV_CHOU3_ROT 86 && JPN Envelope Chou #3 Rotated +#DEFINE PAPERSIZE_JPN_ENV_CHOU4_ROT 87 && JPN Envelope Chou #4 Rotated +#DEFINE PAPERSIZE_B6_JIS 88 && B6 (JIS) (128 mm x 182 mm) +#DEFINE PAPERSIZE_B6_JIS_ROT 89 && B6 (JIS) Rotated (182 mm x 128 mm) +#DEFINE PAPERSIZE_12X11 90 && (12 IN x 11 IN) +#DEFINE PAPERSIZE_JPN_ENV_YOU4 91 && JPN Envelope You #4 +#DEFINE PAPERSIZE_JPN_ENV_YOU4_ROT 92 && JPN Envelope You #4 Rotated +#DEFINE PAPERSIZE_PRC_16K 93 && PRC 16K (146 mm x 215 mm) +#DEFINE PAPERSIZE_PRC_32K 94 && PRC 32K (97 mm x 151 mm) +#DEFINE PAPERSIZE_PRC_32K_BIG 95 && PRC 32K(Big) (97 mm x 151 mm) +#DEFINE PAPERSIZE_PRC_ENV_1 96 && PRC Envelope #1 (102 mm x 165 mm) +#DEFINE PAPERSIZE_PRC_ENV_2 97 && PRC Envelope #2 (102 mm x 176 mm) +#DEFINE PAPERSIZE_PRC_ENV_3 98 && PRC Envelope #3 (125 mm x 176 mm) +#DEFINE PAPERSIZE_PRC_ENV_4 99 && PRC Envelope #4 (110 mm x 208 mm) +#DEFINE PAPERSIZE_PRC_ENV_5 100 && PRC Envelope #5 (110 mm x 220 mm) +#DEFINE PAPERSIZE_PRC_ENV_6 101 && PRC Envelope #6 (120 mm x 230 mm) +#DEFINE PAPERSIZE_PRC_ENV_7 102 && PRC Envelope #7 (160 mm x 230 mm) +#DEFINE PAPERSIZE_PRC_ENV_8 103 && PRC Envelope #8 (120 mm x 309 mm) +#DEFINE PAPERSIZE_PRC_ENV_9 104 && PRC Envelope #9 (229 mm x 324 mm) +#DEFINE PAPERSIZE_PRC_ENV_10 105 && PRC Envelope #10 (324 mm x 458 mm) +#DEFINE PAPERSIZE_PRC_16K_ROT 106 && PRC 16K Rotated +#DEFINE PAPERSIZE_PRC_32K_ROT 107 && PRC 32K Rotated +#DEFINE PAPERSIZE_PRC_32K_BIG_ROT 108 && PRC 32K(Big) Rotated +#DEFINE PAPERSIZE_PRC_ENV_1_ROT 109 && PRC Envelope #1 Rotated (165 mm x 102 mm) +#DEFINE PAPERSIZE_PRC_ENV_2_ROT 110 && PRC Envelope #2 Rotated (176 mm x 102 mm) +#DEFINE PAPERSIZE_PRC_ENV_3_ROT 111 && PRC Envelope #3 Rotated (176 mm x 125 mm) +#DEFINE PAPERSIZE_PRC_ENV_4_ROT 112 && PRC Envelope #4 Rotated (208 mm x 110 mm) +#DEFINE PAPERSIZE_PRC_ENV_5_ROT 113 && PRC Envelope #5 Rotated (220 mm x 110 mm) +#DEFINE PAPERSIZE_PRC_ENV_6_ROT 114 && PRC Envelope #6 Rotated (230 mm x 120 mm) +#DEFINE PAPERSIZE_PRC_ENV_7_ROT 115 && PRC Envelope #7 Rotated (230 mm x 160 mm) +#DEFINE PAPERSIZE_PRC_ENV_8_ROT 116 && PRC Envelope #8 Rotated (309 mm x 120 mm) +#DEFINE PAPERSIZE_PRC_ENV_9_ROT 117 && PRC Envelope #9 Rotated (324 mm x 229 mm) +#DEFINE PAPERSIZE_PRC_ENV_10_ROT 118 && PRC Envelope #10 Rotated (458 mm x 324 mm) + +#DEFINE HEADERFOOTER_SECT_HDR_LEFT 1 +#DEFINE HEADERFOOTER_SECT_HDR_CENTER 2 +#DEFINE HEADERFOOTER_SECT_HDR_RIGHT 3 +#DEFINE HEADERFOOTER_SECT_FTR_LEFT 4 +#DEFINE HEADERFOOTER_SECT_FTR_CENTER 5 +#DEFINE HEADERFOOTER_SECT_FTR_RIGHT 6 +#DEFINE HEADERFOOTER_FONT_STYLE_NORMAL 0 +#DEFINE HEADERFOOTER_FONT_STYLE_BOLD 1 +#DEFINE HEADERFOOTER_FONT_STYLE_ITALIC 2 +#DEFINE HEADERFOOTER_FONT_STYLE_BOLDITALIC 3 +#DEFINE HEADERFOOTER_FIRST_PAGE 0 +#DEFINE HEADERFOOTER_ODD_PAGE 1 +#DEFINE HEADERFOOTER_EVEN_PAGE 2 +#DEFINE HEADERFOOTER_SAME_PAGE 3 + +#DEFINE HYPERLINK_TYPE_FILE "F" +#DEFINE HYPERLINK_TYPE_SHEET "S" + +#DEFINE DATA_TYPE_NONE "X" +#DEFINE DATA_TYPE_DATE "D" +#DEFINE DATA_TYPE_DATETIME "T" +#DEFINE DATA_TYPE_CHAR "C" +#DEFINE DATA_TYPE_INT "I" +#DEFINE DATA_TYPE_FLOAT "N" +#DEFINE DATA_TYPE_CURRENCY "Y" +#DEFINE DATA_TYPE_GENERAL "G" +#DEFINE DATA_TYPE_FORMULA "F" +#DEFINE DATA_TYPE_TIME "Z" +#DEFINE DATA_TYPE_PERCENT "P" +#DEFINE DATA_TYPE_LOGICAL "L" +#DEFINE DATA_TYPE_VCHAR "V" +#DEFINE DATA_TYPE_TEXT "E" + +#DEFINE FIELD_TYPE_DATE "D" +#DEFINE FIELD_TYPE_DATETIME "T" +#DEFINE FIELD_TYPE_CHAR "C" +#DEFINE FIELD_TYPE_INT "I" +#DEFINE FIELD_TYPE_FLOAT "F" +#DEFINE FIELD_TYPE_CURRENCY "Y" +#DEFINE FIELD_TYPE_LOGICAL "L" +#DEFINE FIELD_TYPE_DOUBLE "B" +#DEFINE FIELD_TYPE_MEMO "M" +#DEFINE FIELD_TYPE_NUMERIC "N" +#DEFINE FIELD_TYPE_VCHAR "V" + +#DEFINE BORDER_LEFT 1 +#DEFINE BORDER_RIGHT 2 +#DEFINE BORDER_TOP 4 +#DEFINE BORDER_BOTTOM 8 +#DEFINE BORDER_DIAGDOWN 16 +#DEFINE BORDER_DIAGUP 32 + +#DEFINE BORDER_STYLE_NONE "none" +#DEFINE BORDER_STYLE_THIN "thin" +#DEFINE BORDER_STYLE_HAIR "hair" +#DEFINE BORDER_STYLE_DOTTED "dotted" +#DEFINE BORDER_STYLE_DASHDOTDOT "dashDotDot" +#DEFINE BORDER_STYLE_DASHDOT "dashDot" +#DEFINE BORDER_STYLE_DASHED "dashed" +#DEFINE BORDER_STYLE_MEDIUMDASHDOTDOT "mediumDashDotDot" +#DEFINE BORDER_STYLE_SLANTDASHDOT "slantDashDot" +#DEFINE BORDER_STYLE_MEDIUMDASHDOT "mediumDashDot" +#DEFINE BORDER_STYLE_MEDIUMDASHED "mediumDashed" +#DEFINE BORDER_STYLE_MEDIUM "medium" +#DEFINE BORDER_STYLE_THICK "thick" +#DEFINE BORDER_STYLE_DOUBLE "double" + +#DEFINE FILL_STYLE_NONE "none" +#DEFINE FILL_STYLE_SOLID "solid" +#DEFINE FILL_STYLE_GRAY125 "gray125" + +#DEFINE CELL_HORIZ_ALIGN_LEFT "left" +#DEFINE CELL_HORIZ_ALIGN_RIGHT "right" +#DEFINE CELL_HORIZ_ALIGN_CENTER "center" +#DEFINE CELL_HORIZ_ALIGN_DISTRIB "distributed" +#DEFINE CELL_HORIZ_ALIGN_CTR_CONTIN "centerContinuous" +#DEFINE CELL_HORIZ_ALIGN_JUSTIFIED "justify" +#DEFINE CELL_HORIZ_ALIGN_GENERAL "general" + +#DEFINE CELL_VERT_ALIGN_TOP "top" +#DEFINE CELL_VERT_ALIGN_BOTTOM "bottom" +#DEFINE CELL_VERT_ALIGN_CENTER "center" +#DEFINE CELL_VERT_ALIGN_DISTRIB "distributed" +#DEFINE CELL_VERT_ALIGN_JUSTIFIED "justify" + +#DEFINE UNDERLINE_SINGLE "single" +#DEFINE UNDERLINE_DOUBLE "double" +#DEFINE UNDERLINE_SINGLEACCOUNTING "singleAccounting" +#DEFINE UNDERLINE_DOUBLEACCOUNTING "doubleAccounting" +#DEFINE UNDERLINE_NONE "none" + +#DEFINE FONT_VERTICAL_BASELINE "baseline" +#DEFINE FONT_VERTICAL_SUBSCRIPT "subscript" +#DEFINE FONT_VERTICAL_SUPERSCRIPT "superscript" + +#DEFINE CELL_FORMAT_LOCALE_CODE "[$-409]" +#DEFINE CELL_FORMAT_INTEGER 1 && 0 +#DEFINE CELL_FORMAT_FLOAT 2 && 0.00 +#DEFINE CELL_FORMAT_COMMA_INTEGER 3 && #,##0 +#DEFINE CELL_FORMAT_COMMA_FLOAT 4 && #,##0.00 +#DEFINE CELL_FORMAT_CURRENCY_PAREN 7 && $#,##0.00;($#,##0.00) +#DEFINE CELL_FORMAT_CURRENCY_RED_PAREN 8 && $#,##0.00;[Red]($#,##0.00) +#DEFINE CELL_FORMAT_PERCENT_INTEGER 9 && ###% +#DEFINE CELL_FORMAT_PERCENT_FLOAT 10 && ###.00% +#DEFINE CELL_FORMAT_EXPONENT 11 && 0.00E+00 +#DEFINE CELL_FORMAT_FRACTION_1 12 && # ?/? +#DEFINE CELL_FORMAT_FRACTION_2 13 && # ??/?? +#DEFINE CELL_FORMAT_DATE_MMDDYY 14 && mm-dd-yy +#DEFINE CELL_FORMAT_DATE_DMMMYY 15 && d-mmm-yy +#DEFINE CELL_FORMAT_DATE_DMMM 16 && d-mmm +#DEFINE CELL_FORMAT_DATE_MMMYY 17 && mmm-yy +#DEFINE CELL_FORMAT_TIME_HMMAMPM 18 && h:mm AM/PM +#DEFINE CELL_FORMAT_TIME_HMMSSAMPM 19 && h:mm:ss AM/PM +#DEFINE CELL_FORMAT_TIME_HMM 20 && h:mm +#DEFINE CELL_FORMAT_TIME_HMMSS 21 && h:mm:ss +#DEFINE CELL_FORMAT_DATETIME_MDYYHMM 22 && m/d/yy h:mm +#DEFINE CELL_FORMAT_DATETIME_DDMMMYYYY_TTAM 29 && [$-409]dd/mmm/yyyy\ h:mm\ AM/PM;@ +#DEFINE CELL_FORMAT_DATETIME_DDMMMYYYY_TT24 30 && dd/mmm/yyyy\ h:mm;@ +#DEFINE CELL_FORMAT_DATETIME_MMMDDYYYY_TTAM 31 && [$-409]mmm\ d\,\ yyyy\ h:mm\ AM/PM;@ +#DEFINE CELL_FORMAT_DATETIME_MMMDDYYYY_TT24 32 && [$-409]mmm\ d\,\ yyyy\ h:mm;@ +#DEFINE CELL_FORMAT_DATETIME_MDYY_TTAM 33 && m/d/yy\ h:mm\ AM/PM;@ +#DEFINE CELL_FORMAT_DATETIME_MDYY_TT24 34 && m/d/yy\ h:mm;@ +#DEFINE CELL_FORMAT_COMMA_INTEGER_PAREN 37 && #,##0;(#,##0) +#DEFINE CELL_FORMAT_COMMA_INTEGER_RED_PAREN 38 && #,##0;[Red](#,##0) +#DEFINE CELL_FORMAT_COMMA_FLOAT_PAREN 39 && #,##0.00;(#,##0.00) +#DEFINE CELL_FORMAT_COMMA_FLOAT_RED_PAREN 40 && #,##0.00;[Red](#,##0.00) +#DEFINE CELL_FORMAT_ACC_CURR_US_PAREN 44 && _("$"* #,##0.00_) +#DEFINE CELL_FORMAT_TIME_MMSS 45 && mm:ss +#DEFINE CELL_FORMAT_TIME_H_MMSS 46 && [h]:mm:ss +#DEFINE CELL_FORMAT_TEXT 49 && Text +#DEFINE CELL_FORMAT_CURRENCY_RED 901 && $#,##0.00;[Red]$#,##0.00 +#DEFINE CELL_FORMAT_ACC_CURR_POUNDS 902 && Accounting British Pounds, #,##0.00 +#DEFINE CELL_FORMAT_ACC_CURR_EURO 903 && Accounting Euro, #,##0.00 +#DEFINE CELL_FORMAT_CURR_POUNDS_RED 904 && British Pounds, #,##0.00 RED +#DEFINE CELL_FORMAT_CURR_EURO_RED 905 && Euro, #,##0.00 RED + +#DEFINE RELS_SRC_WORKBOOK "W" +#DEFINE RELS_SRC_SHEET "S" +#DEFINE RELS_SRC_DRAWING "D" + +#DEFINE RELS_TYPE_CALCCHAIN "C" && calcChain +#DEFINE RELS_TYPE_DRAWING "D" && drawings +#DEFINE RELS_TYPE_EXTNLINK "E" && externalLink +#DEFINE RELS_TYPE_HYPERLINK "H" && hyperlink +#DEFINE RELS_TYPE_IMAGE "I" && image +#DEFINE RELS_TYPE_SHAREDSTRINGS "S" && sharedStrings +#DEFINE RELS_TYPE_STYLES "Y" && styles +#DEFINE RELS_TYPE_THEME "T" && theme +#DEFINE RELS_TYPE_VBAPROJECT "V" && VBA Macros +#DEFINE RELS_TYPE_WORKSHEET "W" && worksheet +#DEFINE RELS_TYPE_UNKNOWN "U" && unknown relationship type + +#DEFINE IMAGE_ANCHOR_TYPE_ABS "A" +#DEFINE IMAGE_ANCHOR_TYPE_ONE "O" +#DEFINE IMAGE_ANCHOR_TYPE_TWO "T" + +#DEFINE IMAGE_ANCHOR_MOVE_ABS "absolute" +#DEFINE IMAGE_ANCHOR_MOVE_ONE "oneCell" +#DEFINE IMAGE_ANCHOR_MOVE_TWO "twoCell" \ No newline at end of file diff --git a/COMUN/utile/excel/appendfromxlsx.prg b/COMUN/utile/excel/appendfromxlsx.prg new file mode 100644 index 0000000..9a27876 --- /dev/null +++ b/COMUN/utile/excel/appendfromxlsx.prg @@ -0,0 +1,634 @@ +* Version 5.0 +* Support for inline strings +LPARAMETERS lcFileName,cCur,lcFFields,lnStartRows,lcSheet,llEmptyCells +* Parameters +* lcFileName name of the xlsx + * nom de xlsx + * numele xlsx-ului +* cCur name of the table / cursor ; optional ; default ALIAS() +* lcFFields list of fields to be outputed ; optional ; default all fields +* lnStartRows starting row (the first lnStartRows - 1 rows are skipped) ; optional ; default 1 (all rows) + * a partir range (les premiers lnStartRows - 1 lignes sont passes) ; optionnel ; dfaut 1 (tous les champs lignes) + * primul rand (primele lnStartRows - 1 randuri ale tabelului din docx sunt omise); optional; implicit 1 (toate randurile) +* lcSheet sheet name | number ; optional ; default '' + * nom | nomber de la feuille ; optionnel ; dfaut '' + * numele |numarul foii ; optional ; implicit '' +* llEmptyCells when .T., the source contains empty cells (slower import); optional ; default .F. + * lorsque .T., la source contient des cellules vides (d'importation plus lent); optionnel ; dfaut .F. + * cand este .T., documentul sursa contine celule goale (importul este mai lent); optional; implicit .F. +DECLARE Sleep IN WIN32API INTEGER +DECLARE INTEGER ShellExecute IN shell32.dll INTEGER , STRING , STRING , STRING , STRING , INTEGER +#DEFINE ERRLANG "En" +#IF ERRLANG = "Ro" + #DEFINE ERRMESS0 "Eroare" + #DEFINE ERRMESS1 "Nimic de importat" + #DEFINE ERRMESS2 "Deschideti, va rog, tabelul / cursorul" + #DEFINE ERRMESS3 "Foaie inexistenta" + #DEFINE ERRMESS4 "Eroare la deschiderea" +#ELIF ERRLANG = "Fr" + #DEFINE ERRMESS0 "Erreur" + #DEFINE ERRMESS1 "Rien a ajouter" + #DEFINE ERRMESS2 "S'il vous plat ouvrir la table / curseur" + #DEFINE ERRMESS3 "Feuille introuvable" + #DEFINE ERRMESS4 "Erreur d'ouverture" +#ELIF ERRLANG = "Nl" && Koen Piller + #DEFINE ERRMESS0 "Fout" + #DEFINE ERRMESS1 "Niets te importeren" + #DEFINE ERRMESS2 "Open s.v.p. tabel / cursor" + #DEFINE ERRMESS3 "Blad niet gevonden" + #DEFINE ERRMESS4 "Fout bij openen" +#ELSE + #DEFINE ERRMESS0 "Error" + #DEFINE ERRMESS1 "Nothing to append" + #DEFINE ERRMESS2 "Please open table / cursor" + #DEFINE ERRMESS3 "Sheet not found" + #DEFINE ERRMESS4 "Error opening" +#ENDIF +*************************************************************** +* If you prefer to extract files with Winrar, uncomment this +*************************************************************** +*#DEFINE archiveWinRar .T. + + +LOCAL lcDir,cCurStr,cCurSheet,lSetTalk,lnFFields,laFFields[1],lnColsNoAll,laFieldsAll[1],lnColsNo,laFields[1],lnCurCol,llMemos,llChars,lnSelect +lnSelect = SELECT(0) + +IF PCOUNT() < 1 + MESSAGEBOX(ERRMESS1,16,ERRMESS0) + RETURN +ELSE + IF VARTYPE(m.lcFileName) $ "CV" + lcFileName = FORCEEXT(m.lcFileName,"xlsx") + IF !FILE(m.lcFileName) + MESSAGEBOX(ERRMESS1,16,ERRMESS0) + RETURN + ENDIF + ELSE + MESSAGEBOX(ERRMESS1,16,ERRMESS0) + RETURN + ENDIF +ENDIF +IF PCOUNT() >= 2 + IF VARTYPE(m.cCur) $ "CV" + IF USED(m.cCur) + SELECT (m.cCur) + ELSE + MESSAGEBOX(ERRMESS2,16,ERRMESS0) + RETURN + ENDIF + ELSE + cCur = ALIAS() + ENDIF +ELSE + cCur = ALIAS() +ENDIF +IF PCOUNT()<3 + lcFFields = "" +ELSE + IF VARTYPE(m.lcFFields) <> "C" + lcFFields = "" + ELSE + lnFFields = ALINES(laFFields,m.lcFFields,1+4,",") + ENDIF +ENDIF +IF PCOUNT() < 4 + lnStartRows = 1 +ELSE + IF VARTYPE(m.lnStartRows) <> "N" + lnStartRows = 1 + ENDIF +ENDIF +IF PCOUNT()<5 + lcSheet = "" +ELSE + IF NOT (VARTYPE(m.lcSheet) $ "CN") + lcSheet = "" + ENDIF +ENDIF + +lSetTalk = SET("Talk") +SET TALK OFF +lnColsNoAll = AFIELDS(m.laFieldsAll,m.cCur) +STORE .F. TO llChars,llMemos +lnColsNo = 0 +FOR lnCurCol = 1 TO m.lnColsNoAll + IF m.laFieldsAll[m.lnCurCol,2] $ "NFYBIDTLCVM" + IF !EMPTY(m.lcFFields) + IF ASCAN(m.laFFields,laFieldsAll[m.lnCurCol,1],1,-1,-1,1+2+4)=0 + LOOP + ENDIF + ENDIF + lnColsNo = m.lnColsNo + 1 + DIMENSION laFields[m.lnColsNo,3] + laFields[m.lnColsNo,1] = laFieldsAll[m.lnCurCol,1] + laFields[m.lnColsNo,2] = laFieldsAll[m.lnCurCol,2] + laFields[m.lnColsNo,3] = m.lnCurCol + IF laFields[m.lnColsNo,2] == "M" + llMemos = .T. + ENDIF + IF laFields[m.lnColsNo,2] $ "MCV" + llChars = .T. + ENDIF + ELSE + LOOP + ENDIF +NEXT +lcDir = extract(m.lcFileName) + +lcSheet = get_sheet(ADDBS(m.lcDir) + "workbook.xml",m.lcSheet) +IF EMPTY(m.lcSheet) + MESSAGEBOX(ERRMESS3,16,'Error') + cleanup(m.lcDir) + SET TALK &lSetTalk + SELECT (m.lnSelect) + RETURN m.lcDBF +ENDIF + +IF ADIR(laFiles,ADDBS(m.lcDir) + "sharedStrings.xml") = 0 + llChars = .F. +ENDIF +IF m.llChars + cCurStr = get_strings(ADDBS(m.lcDir) + "sharedStrings.xml",m.llMemos) + IF EMPTY(m.cCurStr) + cleanup(m.lcDir) + SET TALK &lSetTalk + SELECT (m.lnSelect) + IF USED(m.cCurStr) + USE IN (m.cCurStr) + ENDIF + RETURN .F. + ENDIF +ELSE + cCurStr = '' +ENDIF + +cCurSheet = get_cells(ADDBS(m.lcDir) + FORCEEXT(m.lcSheet,"xml"),m.cCur,m.cCurStr,@laFields,m.lnStartRows,m.llEmptyCells) +cleanup(m.lcDir) +SET TALK &lSetTalk +SELECT (m.lnSelect) +IF USED(m.cCurStr) + USE IN (m.cCurStr) +ENDIF +RETURN .T. + +********************* +* Extract xml files * +********************* +FUNCTION extract + LPARAMETERS lcFileName + LOCAL lcDir,lcZip,oShell,ofile,loErr as Exception,lcSetSaf,lni,lnFF,llRetry,laDir[1],lnDir,lnDir0, lcFileName + lcDir = ADDBS(SYS(2023)) + SYS(2015) + lcZip = FORCEEXT(m.lcDir,'.zip') + COPY FILE (m.lcFileName) TO (m.lcZip) + MD (m.lcDir) +*************************** +* Use Winrar +*************************** +#IFDEF archiveWinRar + ShellExecute(0,"open","WinRAR.exe","E " + m.lcZip + " xl\sharedStrings.xml " + m.lcDir,"",1) + IF ADIR(laDir,ADDBS(m.lcDir) + "sharedStrings*.xml") > 0 + lnFF = FOPEN(ADDBS(m.lcDir) + "sharedStrings.xml") + DO WHILE m.lnFF < 0 + sleep(50) + lnFF = FOPEN(ADDBS(m.lcDir) + "sharedStrings.xml") + ENDDO + ENDIF + FCLOSE(m.lnFF) + ShellExecute(0,"open","WinRAR.exe","E " + m.lcZip + " xl\workbook.xml " + m.lcDir,"",1) + lnFF = FOPEN(ADDBS(m.lcDir) + "workbook.xml") + DO WHILE m.lnFF < 0 + sleep(50) + lnFF = FOPEN(ADDBS(m.lcDir) + "workbook.xml") + ENDDO + FCLOSE(m.lnFF) + ShellExecute(0,"open","WinRAR.exe","E " + m.lcZip + " xl\worksheets\sheet*.xml " + m.lcDir,"",1) + lnDir0 = 0 + lnDir = ADIR(laDir,ADDBS(m.lcDir ) + "sheet*.xml") + + DO WHILE (m.lnDir <> m.lnDir0) OR (m.lnDir = 0) + FOR lni = 1 TO m.lnDir + lnFF = FOPEN(ADDBS(m.lcDir) + m.laDir[m.lni,1]) + DO WHILE m.lnFF < 0 + sleep(50) + lnFF = FOPEN(ADDBS(m.lcDir) + m.laDir[m.lni,1]) + ENDDO + FCLOSE(m.lnFF) + NEXT + lnDir0 = m.lnDir + lnDir = ADIR(laDir,ADDBS(m.lcDir ) + "sheet*.xml") + ENDDO +*************************** +* Use Explorer +*************************** +#ELSE + oShell = CREATEOBJECT("shell.application") + TRY + FOR lni = 0 TO m.oShell.NameSpace(ADDBS(m.lcZip)+'xl').items.count - 1 + ofile = m.oShell.NameSpace(ADDBS(m.lcZip)+'xl').items.item(m.lni) + lcFileName = JUSTFNAME(m.ofile.path) + IF INLIST(LOWER(m.lcFileName),'sharedstrings.xml','workbook.xml','styles.xml') + oShell.NameSpace( m.lcDir).copyhere( m.ofile) + lnFF = FOPEN(ADDBS(m.lcDir) + m.lcFileName) + DO WHILE m.lnFF < 0 + sleep(50) + lnFF = FOPEN(ADDBS(m.lcDir) + m.lcFileName) + ENDDO + FCLOSE(m.lnFF) + ENDIF + ENDFOR + FOR lni = 0 TO m.oShell.NameSpace(ADDBS(m.lcZip)+'xl\worksheets').items.count - 1 + ofile = m.oShell.NameSpace(ADDBS(m.lcZip)+'xl\worksheets').items.item(m.lni) + IF LOWER(LEFT(m.ofile.name,5)) == 'sheet' + oShell.NameSpace( m.lcDir).copyhere( m.ofile) + lcFileName = JUSTFNAME(m.ofile.path) + lnFF = FOPEN(ADDBS(m.lcDir) + m.lcFileName) + DO WHILE m.lnFF < 0 + sleep(50) + lnFF = FOPEN(ADDBS(m.lcDir) + m.lcFileName) + ENDDO + FCLOSE(m.lnFF) + ENDIF + ENDFOR + CATCH TO loErr + ENDTRY +#ENDIF +RETURN lcDir + +**************** +* Read strings * +**************** +FUNCTION get_strings + LPARAMETERS lcStr,llMemos + LOCAL cCurStr,lnF,lnPosSiSeek,lcBuff,lnPosSi,lnPosSi2,lcMemo,lcReturn,lnTextPiece,lnTextPiece2,lcTextPiece,lcVal + STORE SYS(2015) TO lcReturn, cCurStr + IF m.llMemos + CREATE CURSOR (m.cCurStr) (cStr M) + ELSE + CREATE CURSOR (m.cCurStr) (cStr c(254)) + ENDIF + lnF = FOPEN(m.lcStr) + IF m.lnF >= 0 + lnPosSiSeek = 0 + DO WHILE !FEOF(m.lnF) + lcBuff = FREAD(m.lnF,8192) + lnPosSi = AT('',m.lcBuff) + lnPosSiSeek = m.lnPosSiSeek + m.lnPosSi + 3 + = FSEEK(m.lnF,m.lnPosSiSeek) + lcBuff = FREAD(m.lnF,8192) + lnPosSi2 = AT('',m.lcBuff) + lcMemo = m.lcBuff && '' + DO WHILE !FEOF(m.lnF) AND m.lnPosSi2 = 0 + lcBuff = FREAD(m.lnF,8192) + lnPosSi2 = AT('',m.lcMemo) + lcMemo = m.lcMemo + m.lcBuff + ENDDO + + IF FEOF(m.lnF) AND m.lnPosSi2 = 0 + lnPosSi2 = AT('',m.lcMemo) + ENDIF + + + IF m.lnPosSi2 != 0 + +* lcMemo = m.lcMemo + LEFT(m.lcBuff,m.lnPosSi2 - 1) + lcMemo = LEFT(m.lcMemo,m.lnPosSi2 - 1) + lnPosSiSeek = m.lnPosSiSeek + m.lnPosSi2 + 4 + lnPosSi = FSEEK(m.lnF,m.lnPosSiSeek) + lcVal = "" + STORE 1 TO lnTextPiece, lnTextPiece2 + lcTextPiece = STREXTRACT(m.lcMemo,'') + DO WHILE !EMPTY(m.lcTextPiece) + lcVal = m.lcVal + STREXTRACT(m.lcTextPiece,[>]) + lnTextPiece = m.lnTextPiece + 1 + lcTextPiece = STREXTRACT(m.lcMemo,'',m.lnTextPiece) + ENDDO + INSERT INTO (m.cCurStr) (cStr) VALUES (htmspec(m.lcVal)) + ELSE + lcMemo = m.lcMemo + m.lcBuff + EXIT + ENDIF + ENDDO + ELSE + lcReturn = '' + MESSAGEBOX(ERRMESS4 + ' sharedStrings.xml',16,'Error') + ENDIF + FCLOSE(m.lnF) +RETURN m.lcReturn + +************** +* Read sheet * +************** +FUNCTION get_cells + LPARAMETERS lcStr,cCurSheet,cCurStr,laField,lnStartRows,llEmptyCells + LOCAL cCurSheet,lnField,ldDat01,ldDat02,lcSetDec,lcReturn,lnF,lnPosSiSeek,lcBuff,lnPosSi,lnPosSi2,lcMemo,laFieldGat[1],lni,lcCell,lcVal,lnDat,lnTim,lnCurRow,lnCurRow0,lnStartRows0,lcWholeRow,lcWholeTable + LOCAL lnFirstCol,lnShCol,lnRealI + LOCAL llEmptyVal,lcEmptyval,lala[1] + lcWholeTable = FILETOSTR(m.lcStr) + lnCurRow = 1 &&m.lnStartRows + lnCurRow0 = 1 + lnStartRows0 = lnStartRows + ************** + lcWholeRow = STREXTRACT(m.lcWholeTable,"") + IF EMPTY(m.lcWholeRow) + MESSAGEBOX(ERRMESS1,16,ERRMESS0) + RETURN '' + ENDIF + + lnField = 1 + lcCell = STREXTRACT(m.lcWholeRow,[],m.lnField) + IF '"inlineStr' $ m.lcCell + lcEmptyval = STREXTRACT(m.lcCell,[]) + IF LEFT(m.lcEmptyval,1) = ">" + lcEmptyval = EMPTY(STREXTRACT(m.lcCell,[],[])) + ELSE + llEmptyVal = EMPTY(STREXTRACT(m.lcCell,[])) + ENDIF + ELSE + llEmptyVal = EMPTY(STREXTRACT(m.lcCell,[],[])) + ENDIF + DO WHILE !EMPTY(m.lcWholeRow) AND (lnCurRow < m.lnStartRows0 OR EMPTY(m.lcCell) OR m.llEmptyVal) &&EMPTY(STREXTRACT(m.lcCell,[],[]))) + lnCurRow0 = m.lnCurRow0 + 1 + IF !EMPTY(m.lcCell) AND !m.llEmptyVal &&EMPTY(STREXTRACT(m.lcCell,[],[])) + lnCurRow = m.lnCurRow + 1 + ENDIF + lcWholeRow = STREXTRACT(m.lcWholeTable,"",m.lnCurRow0) + lcCell = STREXTRACT(m.lcWholeRow,[]) + IF '"inlineStr' $ m.lcCell + lcEmptyval = STREXTRACT(m.lcCell,[]) + IF LEFT(m.lcEmptyval,1) = ">" + lcEmptyval = EMPTY(STREXTRACT(m.lcCell,[],[])) + ELSE + llEmptyVal = EMPTY(STREXTRACT(m.lcCell,[])) + ENDIF + ELSE + llEmptyVal = EMPTY(STREXTRACT(m.lcCell,[],[])) + ENDIF + ENDDO + lnStartRows = lnCurRow0 + lnField = ALEN(laField,1) + ldDat01 = DATE(1900,3,1) - 61 + ldDat02 = DATE(1900,1,1) - 1 + lcSetDec = SET("Decimals") + lnFirstCol = 0 + SET DECIMALS TO 10 + lcReturn = '' + lnF = FOPEN(m.lcStr) + lnCurRow = 0 + IF m.lnF >= 0 + lnPosSiSeek = 0 + DO WHILE !FEOF(m.lnF) + lcBuff = FREAD(m.lnF,8192) + lnPosSi = AT('',m.lcBuff) + lcMemo = '' + DO WHILE !FEOF(m.lnF) AND m.lnPosSi2 = 0 + lcMemo = m.lcMemo + m.lcBuff + lcBuff = FREAD(m.lnF,8192) + lnPosSi2 = AT('',m.lcMemo) + ENDDO + IF m.lnPosSi2 != 0 + lcMemo = m.lcMemo + LEFT(m.lcBuff,m.lnPosSi2 - 1) + lnPosSiSeek = m.lnPosSiSeek + m.lnPosSi2 + 5 + lnPosSi = FSEEK(m.lnF,m.lnPosSiSeek) + lnCurRow = m.lnCurRow + 1 + IF m.lnStartRows > m.lnCurRow + LOOP + ENDIF + SELECT (m.cCurSheet) + APPEND BLANK + SCATTER MEMO TO laFieldGat + lnRealI = 1 + FOR lni = 1 TO lnField + lcCell = STREXTRACT(m.lcMemo,[],m.lnRealI) + IF AT([ 0 + lcCell = LEFT(m.lcCell , AT([ m.lnField + SELECT (m.cCurSheet) + GATHER FROM laFieldGat MEMO + EXIT + ENDIF + ENDIF + + IF '"inlineStr' $ m.lcCell + lcVal = STREXTRACT(m.lcCell,[],[]) + ELSE + lcVal = STREXTRACT(m.lcVal,[">],[]) + ENDIF + ELSE + lcVal = STREXTRACT(m.lcCell,[],[]) + ENDIF + + lnRealI = m.lnRealI + 1 + IF EMPTY(m.lcVal) + LOOP + ENDIF + IF laField[m.lni,2] $ "CVM" + IF [t="inlineStr] $ m.lcCell or EMPTY(m.cCurStr) + laFieldGat[m.lni] = m.lcVal + ELSE + SELECT (m.cCurStr) + TRY + IF [t="s"] $ m.lcCell + GO VAL(m.lcVal) + 1 IN (m.cCurStr) + laFieldGat[m.lni] = cStr + ELSE + laFieldGat[m.lni] = m.lcVal + ENDIF + CATCH TO loErr + laFieldGat[m.lni] = m.lcVal + ENDTRY + ENDIF + ELSE + IF laField[m.lni,2] $ "NFBYI" + IF [t="inlineStr] $ m.lcCell or EMPTY(m.cCurStr) + laFieldGat[m.lni] = m.lcVal + ELSE + TRY + IF [t="s"] $ m.lcCell + GO VAL(m.lcVal) + 1 IN (m.cCurStr) + laFieldGat[m.lni] = VAL(cStr) + ELSE + laFieldGat[laField[m.lni,3]] = VAL(m.lcVal) + ENDIF + CATCH TO loErr + laFieldGat[m.lni] = m.lcVal + ENDTRY + ENDIF + ELSE + IF laField[m.lni,2] $ "D" + lnDat = VAL(m.lcVal) + IF [t="inlineStr] $ m.lcCell and ALINES(lala,m.lcVal,0,'-','.',' ','/',':') > 1 + laFieldGat[laField[m.lni,3]] = CTOD(m.lcVal) + ELSE + IF m.lnDat >= 61 + laFieldGat[laField[m.lni,3]] = m.ldDat01 + m.lnDat + ELSE + laFieldGat[laField[m.lni,3]] = m.ldDat02 + m.lnDat + ENDIF + ENDIF + ELSE + IF laField[m.lni,2] $ "T" + lnTim = VAL(m.lcVal) + IF [t="inlineStr] $ m.lcCell and ALINES(lala,m.lcVal,0,'-','.',' ','/',':') > 1 + laFieldGat[laField[m.lni,3]] = CTOT(m.lcVal) + ELSE + lnDat = FLOOR(m.lnTim) + laFieldGat[laField[m.lni,3]] = DTOT(m.ldDat01 + m.lnDat) + INT(86400.0 * (m.lnTim - m.lnDat)) + ENDIF + ELSE + IF laField[m.lni,2] $ "L" + laFieldGat[laField[m.lni,3]] = m.lcVal == "1" + ENDIF + ENDIF + ENDIF + ENDIF + ENDIF + NEXT + SELECT (m.cCurSheet) + GATHER FROM laFieldGat MEMO + ELSE + lcMemo = m.lcMemo + m.lcBuff + EXIT + ENDIF + ENDDO + lcReturn = m.cCurSheet + ELSE + MESSAGEBOX(ERRMESS4,16,'Error') + ENDIF + FCLOSE(m.lnF) + SET DECIMALS TO &lcSetDec +RETURN m.lcReturn + +********************** +* Special characters * +********************** +FUNCTION htmspec + LPARAMETERS cStr + LOCAL lni,lcStrF,lcChar,lnChar + lcStrF = m.cStr + IF AT('>',m.lcStrF)>0 + lcStrF = STRTRAN(m.lcStrF,'>','>') + ENDIF + IF AT('<',m.lcStrF)>0 + lcStrF = STRTRAN(m.lcStrF,'<','<') + ENDIF + IF AT('"',m.lcStrF)>0 + lcStrF = STRTRAN(m.lcStrF,'"','"') + ENDIF + IF AT("'",m.lcStrF)>0 + lcStrF = STRTRAN(m.lcStrF,''',"'") + ENDIF + IF AT([&#],m.lcStrF)>0 + FOR lnChar = 0 TO 255 + lcChar = [&#]+STR(m.lnChar,3)+[;] + IF AT(m.lcChar,m.lcStrF)>0 + lcStrF = STRTRAN(m.lcStrF,m.lcChar,CHR(lnChar)) + ENDIF + NEXT + ENDIF + IF AT([&#x],m.lcStrF)>0 + FOR lnChar = 0 TO 255 + lcChar = [&#x]+RIGHT(TRANSFORM(m.lnChar,"@0"),2)+[;] + IF AT(m.lcChar,m.lcStrF)>0 + lcStrF = STRTRAN(m.lcStrF,m.lcChar,CHR(lnChar)) + ENDIF + NEXT + ENDIF + IF AT('&',m.lcStrF)>0 + lcStrF = STRTRAN(m.lcStrF,'&',CHR(38)) + ENDIF + + * suggested by Koen Piller + lcStrF = STRCONV(m.lcStrF,11) + RETURN m.lcStrF +ENDFUNC + +***************** +* Cleanup +****************** +FUNCTION cleanup + LPARAMETERS lcDir + LOCAL lcZip,lcSetSaf + lcZip = FORCEEXT(m.lcDir,'zip') + lcSetSaf = SET("Safety") + SET SAFETY OFF + TRY + ERASE (ADDBS(m.lcDir)+'*.*') + RD (m.lcDir) + CATCH TO m.loErr + ENDTRY + + ERASE (m.lcZip) + SET SAFETY &lcSetSaf +RETURN .T. + +***************** +* Read workbook * +***************** +FUNCTION get_sheet +LPARAMETERS lcStr,lcSheet + LOCAL lnF,lcRealSheet,lcBuff,lcMemo,lni,lcRealSheet,lcCurSheet + lnF = FOPEN(m.lcStr) + lcRealSheet = '' + IF m.lnF >= 0 + lcBuff = FREAD(m.lnf,8192) + lcMemo = STREXTRACT(m.lcBuff,[],[]) + IF VARTYPE(m.lcSheet) == "N" + IF BETWEEN(m.lcSheet,1,OCCURS([name="],m.lcMemo)) + lcRealSheet = 'sheet' + LTRIM(STR(m.lcSheet)) + ENDIF + ELSE + IF EMPTY(m.lcSheet) + lcRealSheet = 'sheet1' + ELSE + FOR lni = 1 TO OCCURS([name="],m.lcMemo) + lcCurSheet = STREXTRACT(m.lcMemo,[name="],["],m.lni) + IF LOWER(ALLTRIM(m.lcCurSheet)) == LOWER(ALLTRIM(m.lcSheet)) + lcRealSheet = 'sheet' + TRANSFORM(m.lni) + EXIT + ENDIF + NEXT + ENDIF + ENDIF + ELSE + MESSAGEBOX(ERRMESS4 + ' workbook.xml',16,'Error') + ENDIF + FCLOSE(m.lnF) +RETURN m.lcRealSheet diff --git a/COMUN/utile/excel/appendxlsx.prg b/COMUN/utile/excel/appendxlsx.prg new file mode 100644 index 0000000..c7dd4c0 --- /dev/null +++ b/COMUN/utile/excel/appendxlsx.prg @@ -0,0 +1,658 @@ +******************************** +*!* Simple Sample Usage +******************************** +*!* DIMENSION aWrkSht(1), aCols(1) +*!* m.lcXlsFile = GETFILE("Excel:XLS,XLSX,XLSB,XLSM") +*!* IF FILE(m.lcXlsFile) +*!* CLEAR +*!* ?AWorkSheets(@aWrkSht,m.lcXlsFile,.T.) +*!* ?AWorkSheetColumns(@aCols,m.lcXlsFile,"Sheet1") +*!* AppendFromExcel(m.lcXlsFile, "Sheet1", "MyTable", "column1,column2,column3", "Recnum Is Not Null", "field1,field2,field3", "field1 > 14000") +*!* SELECT MyTable +*!* GO TOP IN "MyTable" +*!* BROWSE LAST NOWAIT +*!* ENDIF +*!* CopyToExcel("C:\Test.xlsx", "Sheet1", "MyTable") && try xls, xlsb, and xlsm as well + +********************************** +FUNCTION AppendFromExcel(tcXLSFile, tcSheet, tvWorkarea, tcExcelFieldList, tcExcelWhereExpr, tcTableFieldList, tcTableForExpr, tlNoHeaderRow) + ********************************** + * PARAMETER Information + * tcXLSFile := a string specifying an excel file (*.xls, *.xlsx, *.xlsm, *.xlsb) on disk + * tcSheet := a string specifying the name of a worksheet within the excel workbook (can also be a range Sheet1$A1:C20 for instance) + * tvWorkarea [optional] := the Alias, Work Area, or File Name of the table you want the worksheet result set appended to (default is currently selected Alias) + * tcExcelFieldList [optional] := a comma delimited list of columns you want from the worksheet (default is '*' - all columns) + * tcExcelWhereExpr [optional] := a valid SQL Where clause to be used when querying the worksheet (default is '1=1') + * tcTableFieldList [optional] := a comma delimited list of fields you want the worksheet result set inserted into (default is '*' - all fields) + * tcTableForExpr [optional] := a valid VFP Where clause to be used when querying the worksheet result set (cursor) (default is '.T.') + * tlNoHeaderRow [optional] := pass .T. if the worksheet does not contain a header row, .F. is the default which specifies that a header row does exist + * + * RETURN Information + * returns numeric, the number of records inserted into tvWorkArea + * + * Provider Information + * the default provider being used in the SQLStringConnect function can be downloaded and installed from: + * http://www.microsoft.com/downloads/details.aspx?FamilyID=7554F536-8C28-4598-9B72-EF94E038C891&displaylang=en + ********************************** + LOCAL lnSelect, laErr[1], laTableFields[1], laExcelFields[1], lnFieldCounter, ; + lcSQLAlias, lnResult, lcInsertValues, lcFieldList, lcNvlFieldList, ; + lcFieldType, lcExcelFieldType, lcNvlFieldName, lcTempAlias, loExc, lnReturn, ; + lcHeaderRow, llOpenedtvWorkArea + m.lnSelect = SELECT(0) + m.lnReturn = 0 + IF NOT FILE(m.tcXLSFile) + ERROR 1, m.tcXLSFile + ENDIF + + IF !USED(m.tvWorkarea) AND TYPE("m.tvWorkArea") = "C" AND FILE(DEFAULTEXT(m.tvWorkarea,"DBF")) + SELECT 0 + USE (DEFAULTEXT(m.tvWorkarea,"DBF")) SHARED AGAIN + m.tvWorkarea = ALIAS() + m.llOpenedtvWorkArea = .T. + ELSE + IF !USED(m.tvWorkarea) + m.tvWorkarea = ALIAS() + ENDIF + ENDIF + IF TYPE("m.tvWorkArea") = "N" + m.tvWorkArea = ALIAS(m.tvWorkArea) + ENDIF + + m.tcSheet = ALLTRIM(EVL(m.tcSheet,"Sheet1$")) + IF AT("$",m.tcSheet) = 0 + m.tcSheet = m.tcSheet + "$" + ENDIF + m.tcExcelFieldList = EVL(m.tcExcelFieldList,"*") + m.tcExcelWhereExpr = EVL(m.tcExcelWhereExpr,"1=1") + m.tcTableFieldList = EVL(m.tcTableFieldList,"*") + m.tcTableForExpr = EVL(m.tcTableForExpr,".T.") + m.lcSQLAlias = SYS(2015) + m.lcTempAlias = SYS(2015) + m.lnSQL = 0 + m.lcHeaderRow = IIF(EMPTY(m.tlNoHeaderRow), "Yes", "No") + TRY + SELECT (m.tvWorkarea) + + m.lnSQL = SQLSTRINGCONNECT([Provider=Microsoft.ACE.OLEDB.12.0;Data Source="] + m.tcXLSFile + [";Extended Properties="Excel 12.0 Xml;HDR=] + m.lcHeaderRow + [;";]) + + *!* Alternate using DSN that comes with Office install (MSDASQL = OLEDB wrapper for ODBC) + *!* m.lnSQL = SQLSTRINGCONNECT("Provider=MSDASQL.1;" ; + *!* +"Persist Security Info=False;" ; + *!* +"DSN=Excel Files;" ; + *!* +"DBQ="+FULLPATH(m.tcXLSFile)+";" ; + *!* +"DriverId=790;" ; + *!* +"MaxBufferSize=2048;" ; + *!* +"PageTimeout=5;") + + *!* Try a few other drivers that may be on the user's machine + IF m.lnSQL < 0 + m.lnSQL = SQLSTRINGCONNECT("Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};" ; + + "DBQ="+FULLPATH(m.tcXLSFile)+";") + IF m.lnSQL < 0 AND UPPER(ALLTRIM(JUSTEXT(m.tcXLSFile))) == "XLS" && can we try using the older driver? + IF m.lnSQL < 0 + m.lnSQL = SQLSTRINGCONNECT("Driver={Microsoft Excel Driver (*.xls)};" ; + + "DBQ="+FULLPATH(m.tcXLSFile)+";") + ENDIF + ENDIF + IF m.lnSQL < 0 + AERROR(m.laErr) + ERROR m.laErr[2] + ENDIF + ENDIF + + m.lnResult = SQLEXEC(m.lnSQL,[SELECT ] + m.tcExcelFieldList + [ FROM "] + m.tcSheet + [" Where ] + m.tcExcelWhereExpr, m.lcSQLAlias) + IF m.lnResult < 0 + AERROR(m.laErr) + ERROR m.laErr[2] + ENDIF + + IF USED(m.lcSQLAlias) + m.lcFieldList = "" + m.lcNvlFieldList = "" + m.lnTotalExcelFields = AFIELDS(m.laExcelFields, m.lcSQLAlias) + SELECT &tcTableFieldList FROM (m.tvWorkarea) WHERE .F. INTO CURSOR (m.lcTempAlias) + FOR m.lnFieldCounter = 1 TO MIN(AFIELDS(m.laTableFields, m.lcTempAlias), m.lnTotalExcelFields) + m.lcFieldList = m.lcFieldList + IIF(!EMPTY(m.lcFieldList),",","")+m.laTableFields[m.lnFieldCounter,1] + m.lcFieldType = CHRTRAN(m.laTableFields[m.lnFieldCounter,2],"NIFYD","BBBBT") + m.lcExcelFieldType = CHRTRAN(m.laExcelFields[m.lnFieldCounter,2],"CVNIFYD","MMBBBBT") + m.lcNvlFieldName = m.laExcelFields[m.lnFieldCounter,1] + IF !m.laTableFields[m.lnFieldCounter,5] + m.lcNvlFieldName = [NVL(]+m.lcNvlFieldName+[,]+; + ICASE(m.lcExcelFieldType="B", "0", ; + m.lcExcelFieldType="M", "''", ; + m.lcExcelFieldType="T", "{//}", ; + m.lcExcelFieldType="L", ".F.", ; + "''")+[)] + ENDIF + IF INLIST(m.lcFieldType, "C", "V") + m.lcNvlFieldName = [CAST(]+m.lcNvlFieldName+[ AS ]+m.lcFieldType+[(] + TRANSFORM(m.laTableFields[m.lnFieldCounter,3]) + [))] + ELSE + m.lcNvlFieldName = [CAST(]+m.lcNvlFieldName+[ AS ]+m.lcFieldType+[)] + ENDIF + m.lcNvlFieldList = m.lcNvlFieldList + IIF(!EMPTY(m.lcNvlFieldList),",","") + m.lcNvlFieldName + ENDFOR + INSERT INTO (m.tvWorkarea) (&lcFieldList) SELECT &lcNvlFieldList FROM (m.lcSQLAlias) WHERE &tcTableForExpr + m.lnReturn = _TALLY + ENDIF + + CATCH TO m.loExc + *!* MESSAGEBOX(m.loExc.MESSAGE + " : " + TRANSFORM(m.loExc.LINENO)) + FINALLY + IF m.llOpenedtvWorkArea + USE IN SELECT(m.tvWorkArea) + ENDIF + IF m.lnSQL > 0 + SQLDISCONNECT(m.lnSQL) + ENDIF + USE IN SELECT(m.lcTempAlias) + USE IN SELECT(m.lcSQLAlias) + SELECT (m.lnSelect) + ENDTRY + RETURN m.lnReturn +ENDFUNC + +********************************** +FUNCTION AWorkSheets(taArray, tcXLSFile, tlAllTables) + ********************************** + * PARAMETER Information + * taArray := an array sent in by reference to fill with Worksheet/Table information + * tcXLSFile := a string specifying an excel file (*.xls, *.xlsx, *.xlsm, *.xlsb) on disk + * tlAllTables := if .T., array will contain information regarding all tables in workbook; .F. returns only worksheets + * + * RETURN Information + * returns numeric, the number of tables found in the workbook + ********************************** + + LOCAL lnSQL, laErr[1], lcSQLAlias, lnResult, lnReturn, loExc + m.lnReturn = 0 + m.lnSQL = SQLSTRINGCONNECT("Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};" ; + +"DBQ="+FULLPATH(m.tcXLSFile)+";") + + *!* Alternate using DSN that comes with Office install (MSDASQL = OLEDB wrapper for ODBC) + *!* m.lnSQL = SQLSTRINGCONNECT("Provider=MSDASQL.1;" ; + *!* +"Persist Security Info=False;" ; + *!* +"DSN=Excel Files;" ; + *!* +"DBQ="+FULLPATH(m.tcXLSFile)+";" ; + *!* +"DriverId=790;" ; + *!* +"MaxBufferSize=2048;" ; + *!* +"PageTimeout=5;") + + *!* Try a few other drivers that may be on the user's machine + IF m.lnSQL < 0 + IF UPPER(ALLTRIM(JUSTEXT(m.tcXLSFile))) == "XLS" && can we try using the older driver? + m.lnSQL = SQLSTRINGCONNECT("Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};" ; + + "DBQ="+FULLPATH(m.tcXLSFile)+";") + IF m.lnSQL < 0 + m.lnSQL = SQLSTRINGCONNECT("Driver={Microsoft Excel Driver (*.xls)};" ; + + "DBQ="+FULLPATH(m.tcXLSFile)+";") + ENDIF + ELSE + m.lnSQL = SQLSTRINGCONNECT("Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};" ; + + "DBQ="+FULLPATH(m.tcXLSFile)+";") + ENDIF + IF m.lnSQL < 0 + AERROR(m.laErr) + ERROR m.laErr[2] + ENDIF + ENDIF + + m.lcSQLAlias = SYS(2015) + m.lnResult = SQLTABLES(m.lnSQL,"VIEW,TABLE,SYSTEM TABLE",m.lcSQLAlias) + + IF m.lnSQL > 0 + SQLDISCONNECT(m.lnSQL) + ENDIF + + IF m.lnResult < 0 + AERROR(m.laErr) + ERROR m.laErr[2] + ENDIF + + IF USED(m.lcSQLAlias) + TRY + IF tlAllTables + SELECT CAST(ALLTRIM(table_name) AS V(100)), ; + CAST(ALLTRIM(table_type) AS V(12)) ; + FROM (m.lcSQLAlias) ; + INTO ARRAY taArray + ELSE + SELECT CAST(ALLTRIM(table_name) AS V(100)), ; + CAST(ALLTRIM(table_type) AS V(12)) ; + FROM (m.lcSQLAlias) ; + WHERE table_type = "SYSTEM TABLE" ; + INTO ARRAY taArray + ENDIF + m.lnReturn = _TALLY + CATCH TO m.loExc + THROW + FINALLY + *!* USE IN SELECT(m.lcSQLAlias) + ENDTRY + ENDIF + + RETURN m.lnReturn +ENDFUNC + +********************************** +FUNCTION AWorkSheetColumns(taArray, tcXLSFile, tcSheet) + ********************************** + * PARAMETER Information + * taArray := an array sent in by reference to fill with the specified worksheet's column information + * tcXLSFile := a string specifying an excel file (*.xls, *.xlsx, *.xlsm, *.xlsb) on disk + * tcSheet := a string specifying the worksheet or table to use when retrieving column information + * + * RETURN Information + * returns numeric, the number of columns found in the worksheet/table + ********************************** + LOCAL lnSQL, laErr[1], lnResult, lnReturn, lcSQLAlias, loExc + m.lnReturn = 0 + m.lnSQL = SQLSTRINGCONNECT("Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};" ; + +"DBQ="+FULLPATH(m.tcXLSFile)+";") + *!* Alternate using DSN that comes with Office install (MSDASQL = OLEDB wrapper for ODBC) + *!* m.lnSQL = SQLSTRINGCONNECT("Provider=MSDASQL.1;" ; + *!* +"Persist Security Info=False;" ; + *!* +"DSN=Excel Files;" ; + *!* +"DBQ="+FULLPATH(m.tcXLSFile)+";" ; + *!* +"DriverId=790;" ; + *!* +"MaxBufferSize=2048;" ; + *!* +"PageTimeout=5;") + + *!* Try a few other drivers that may be on the user's machine + IF m.lnSQL < 0 + IF UPPER(ALLTRIM(JUSTEXT(m.tcXLSFile))) == "XLS" && can we try using the older driver? + m.lnSQL = SQLSTRINGCONNECT("Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};" ; + + "DBQ="+FULLPATH(m.tcXLSFile)+";") + IF m.lnSQL < 0 + m.lnSQL = SQLSTRINGCONNECT("Driver={Microsoft Excel Driver (*.xls)};" ; + + "DBQ="+FULLPATH(m.tcXLSFile)+";") + ENDIF + ELSE + m.lnSQL = SQLSTRINGCONNECT("Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};" ; + + "DBQ="+FULLPATH(m.tcXLSFile)+";") + ENDIF + IF m.lnSQL < 0 + AERROR(m.laErr) + ERROR m.laErr[2] + ENDIF + ENDIF + + m.lcSQLAlias = SYS(2015) + m.lnResult = SQLEXEC(m.lnSQL,[SELECT * FROM "] + m.tcSheet + [$" Where 1=0], m.lcSQLAlias) + + IF m.lnSQL > 0 + SQLDISCONNECT(m.lnSQL) + ENDIF + + IF m.lnResult < 0 + AERROR(m.laErr) + ERROR m.laErr[2] + ENDIF + + IF USED(m.lcSQLAlias) + TRY + m.lnReturn = AFIELDS(m.taArray, m.lcSQLAlias) + CATCH TO m.loExc + THROW + FINALLY + USE IN SELECT(m.lcSQLAlias) + ENDTRY + ENDIF + + RETURN m.lnReturn +ENDFUNC + +*********************************** +FUNCTION CopyToExcel(tcXLSFile, tcSheet, tvWorkArea, tcExcelFieldList, tcTableFieldList, tcTableForExpr) + *********************************** + * PARAMETER Information + * tcXLSFile := a string specifying an excel file (*.xls, *.xlsx, *.xlsm, *.xlsb) on disk + * tcSheet := a string specifying the name of the worksheet to create within the excel workbook + * tvWorkarea [optional] := the Alias, Work Area, or File Name of the table you want to be copied to the worksheet (default is currently selected Alias) + * tcExcelFieldList [optional] := a comma delimited list of columns you want to create in the worksheet (default is '*' - columns will match table field list) + * tcTableFieldList [optional] := a comma delimited list of fields you want this function to copy from tvWorkArea + * tcTableForExpr [optional] := a valid VFP Where/For clause to be used when querying tvWorkArea for data to be copied to the worksheet + * + * RETURN Information + * returns numeric, the number of records inserted into the worksheet + * + * Provider Information + * the default provider being used in the SQLStringConnect function can be downloaded and installed from: + * http://www.microsoft.com/downloads/details.aspx?FamilyID=7554F536-8C28-4598-9B72-EF94E038C891&displaylang=en + ********************************** + #DEFINE adOpenStatic 3 + #DEFINE adOpenKeyset 1 + #DEFINE adLockOptimistic 3 + #DEFINE adUseClient 3 + #DEFINE adUseServer 2 + #DEFINE adCmdText 0x0001 + LOCAL loConnection as ADODB.Connection, lcCreateTableCommand, llOpenedtvWorkArea, loExc as Exception, ; + lnReturn, lnResult, lnFieldCounter, lnSQL, loCursorAdapter as CursorAdapter, ; + lcFieldName, lcFieldType, lcSelectFields, lcUpdateNameListFields, lcUpdatableFieldList, ; + loRecordSet as ADODB.Recordset, lcConversionFunc, lcVFPFieldName, laTableFields[1], laErr[1] + + m.lnSelect = SELECT(0) + m.lnReturn = 0 + + m.llOpenedtvWorkArea = .F. + IF !USED(m.tvWorkarea) AND TYPE("m.tvWorkArea") = "C" AND FILE(DEFAULTEXT(m.tvWorkarea,"DBF")) + SELECT 0 + USE (DEFAULTEXT(m.tvWorkarea,"DBF")) SHARED AGAIN + m.tvWorkarea = ALIAS() + m.llOpenedtvWorkArea = .T. + ELSE + IF !USED(m.tvWorkarea) + m.tvWorkarea = ALIAS() + ENDIF + ENDIF + IF TYPE("m.tvWorkArea") = "N" + m.tvWorkArea = ALIAS(m.tvWorkArea) + ENDIF + + m.tcSheet = ALLTRIM(EVL(m.tcSheet,"Sheet1$")) + IF AT("$",m.tcSheet) = 0 + m.tcSheet = m.tcSheet + "$" + ENDIF + m.tcExcelFieldList = EVL(m.tcExcelFieldList,"") + m.tcTableFieldList = EVL(m.tcTableFieldList,"*") + m.tcTableForExpr = EVL(m.tcTableForExpr,".T.") + m.lnSQL = 0 + m.lcTempAlias = SYS(2015) + + TRY + CreateExcelTemplate(m.tcXLSFile) + IF !FILE(m.tcXLSFile) + m.lnReturn + ENDIF + m.loConnection = CreateObject ( "ADODB.Connection") + *!* This is the only provider/driver that appears to work without showing Select Data Source dialog + *!* or throwing a weird error about the excel Database being readonly. + m.loConnection.ConnectionString = [Provider=Microsoft.ACE.OLEDB.12.0;Data Source="] + m.tcXLSFile + [";Extended Properties="Excel 12.0 Xml;HDR=Yes;";] + m.loConnection.Open() + m.loConnection.Execute("DROP TABLE [Sheet1$]") + SELECT &tcTableFieldList FROM (m.tvWorkarea) WHERE &tcTableForExpr INTO CURSOR (m.lcTempAlias) NOFILTER + GO TOP IN (m.lcTempAlias) + m.lnReturn = RECCOUNT(m.lcTempAlias) + m.lcCreateTableCommand = "" + m.lcSelectFields = "" + m.lcUpdateNameListFields = "" + m.lcUpdatableFieldList = "" + m.lcConversionFunc = "" + FOR m.lnFieldCounter = 1 TO AFIELDS(m.laTableFields, m.lcTempAlias) + m.lcVFPFieldName = m.laTableFields(m.lnFieldCounter, 1) + m.lcFieldName = ALLTRIM(GETWORDNUM(m.tcExcelFieldList, m.lnFieldCounter, ",")) + IF EMPTY(m.lcFieldName) + m.lcFieldName = m.laTableFields(m.lnFieldCounter, 1) + ENDIF + m.lcSelectFields = m.lcSelectFields + "[" + m.lcFieldName + "] " + " AS " + m.lcVFPFieldName + m.lcUpdateNameListFields = m.lcUpdateNameListFields + m.lcVFPFieldName + " [" + m.tcSheet + "].[" + m.lcFieldName + "]" + m.lcUpdatableFieldList = m.lcUpdatableFieldList + m.lcVFPFieldName + m.lcCreateTableCommand = m.lcCreateTableCommand + "[" + m.lcFieldName + "] " + m.lcFieldType = m.laTableFields(m.lnFieldCounter, 2) + m.lcCreateTableCommand = m.lcCreateTableCommand + ; + ICASE(m.lcFieldType = 'C', 'Char(' + TRANSFORM(m.laTableFields(m.lnFieldCounter, 3)) + ')', ; + m.lcFieldType = 'Y', 'Currency', ; + m.lcFieldType = 'D', 'Date', ; + m.lcFieldType = 'T', 'DateTime', ; + m.lcFieldType = 'B', 'Double', ; + m.lcFieldType = 'F', 'Double', ; + m.lcFieldType = 'G', 'Binary', ; + m.lcFieldType = 'I', 'Integer', ; + m.lcFieldType = 'L', 'Logical', ; + m.lcFieldType = 'M', 'Text', ; + m.lcFieldType = 'N', 'Numeric(' + TRANSFORM(m.laTableFields(m.lnFieldCounter, 3)) + ',' + TRANSFORM(m.laTableFields(m.lnFieldCounter, 4)) + ')', ; + m.lcFieldType = 'Q', 'Binary', ; + m.lcFieldType = 'V', 'VarChar(' + TRANSFORM(m.laTableFields(m.lnFieldCounter, 3)) + ')', ; + m.lcFieldType = 'W', 'Blob', ; + 'Char(' + TRANSFORM(m.laTableFields(m.lnFieldCounter, 3)) + ')') + IF INLIST(m.lcFieldType,"T","D") + m.lcConversionFunc = IIF(!EMPTY(m.lcConversionFunc), ", ", "") + m.lcConversionFunc + m.lcVFPFieldName + " EmptyFieldToNull" + ENDIF + IF m.lnFieldCounter != ALEN(m.laTableFields,1) + m.lcCreateTableCommand = m.lcCreateTableCommand + ',' + m.lcSelectFields = m.lcSelectFields + ',' + m.lcUpdateNameListFields = m.lcUpdateNameListFields + ',' + m.lcUpdatableFieldList = m.lcUpdatableFieldList + ',' + ENDIF + ENDFOR + IF !EMPTY(m.lcCreateTableCommand) + IF m.tcSheet != [Sheet1$] + m.tcSheet = STRTRAN(m.tcSheet,"$","") + ENDIF + m.lcCreateTableCommand = "CREATE TABLE [" + m.tcSheet + "](" + m.lcCreateTableCommand + ")" + m.loConnection.Errors.Clear() + m.loConnection.Execute(m.lcCreateTableCommand) + IF m.loConnection.Errors.Count>0 + ERROR m.loConnection.Errors(0).Description + ENDIF + m.loRecordSet = CreateObject("ADODB.Recordset") + With m.loRecordSet + .ActiveConnection = m.loConnection + .CursorLocation = adUseClient + .CursorType = adOpenStatic + .LockType = adLockOptimistic + ENDWITH + m.loCursorAdapter = CREATEOBJECT("CursorAdapter") + m.loCursorAdapter.Alias = SYS(2015) + m.loCursorAdapter.DataSourceType = "ADO" + m.loCursorAdapter.DataSource = m.loRecordSet + m.loCursorAdapter.SelectCmd = "Select " + m.lcSelectFields + " From [" + m.tcSheet + "]" + IF m.loCursorAdapter.CursorFill(.F.,.T.) + m.loCursorAdapter.Tables = "[" + m.tcSheet + "]" + m.loCursorAdapter.BufferModeOverride = 3 && faster than 5 when dealing with larger record sets + m.loCursorAdapter.UpdateNameList = m.lcUpdateNameListFields + m.loCursorAdapter.UpdatableFieldList = m.lcUpdatableFieldList + IF !EMPTY(m.lcConversionFunc) + m.loCursorAdapter.ConversionFunc = m.lcConversionFunc + ENDIF + INSERT INTO (m.loCursorAdapter.Alias) SELECT * FROM (m.lcTempAlias) + m.lnReturn = TABLEUPDATE(.T.,.T.,m.loCursorAdapter.Alias) + ELSE + AERROR(m.laErr) + ERROR m.laErr(2) + ENDIF + ENDIF + m.loConnection.Close() + CATCH TO m.loExc + m.lnReturn = 0 + FINALLY + m.loCursorAdapter = Null + m.loConnection = Null + RELEASE loCursorAdapter, loConnection + IF m.llOpenedtvWorkArea + USE IN SELECT(m.tvWorkarea) + ENDIF + USE IN SELECT(m.lcTempAlias) + SELECT (m.lnSelect) + ENDTRY + RETURN m.lnReturn +ENDFUNC + +******************* +FUNCTION EmptyFieldToNull(tdFieldValue) +******************* + RETURN EVL(m.tdFieldValue,NULL) +ENDFUNC + +******************* +FUNCTION CreateExcelTemplate(tcExcelFile) +******************* + LOCAL lcExcelFileExtension, lcFileBinary + m.llReturn = .F. + IF FILE(m.tcExcelFile) + m.llReturn = .T. + ELSE + m.lcExcelFileExtension = UPPER(JUSTEXT(m.tcExcelFile)) + DO case + CASE m.lcExcelFileExtension = "XLSX" + m.lcFileBinary = 0h504B030414000600080000002100CC7EE6A14E010000080400001300DF015B436F6E74656E745F54797065735D2E786D6C20A2DB0128A00002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h000000000000000000000000000000000000AC93CB4EC3301045F748FC83E52D8ADDB2400835ED82C712BA281F60EC4963D52F79DCD2FE3D938422814A455536B1226BEE9D39733D996DBD631BC86863A8F9588C3883A0A3B16159F3D7C55375CB1916158C723140CD77807C36BDBC982C7609905175C09AB7A5A43B2951B7E0158A9820D04D13B357857EF35226A5576A09F27A34BA913A8602A154A5D3E0D3C90B3590AD013657B93C2B4F3E72EB64213518BE63417A9CDD0F859D77CD554ACE6A55A873B909E6876B159BC66A3051AF3D79895EECAA5391BF1A62D939C0B3AD306550065B80E29D1844F7CE0FD0A8B52BEC714B0406E8191C9E36DA274C + m.lcFileBinary = m.lcFileBinary + 0h4195FDF8D8DA84471C8EB33BCEE43DE6D55B8CABFFA6D2D1115ED9B0EFFB5008687BF31C134ADAF5D90D4087DC80A91249422E16BE981DF2A60076B3F76B44D91FE7A7F07B34BEF4FFC440C70CA743D867A5AB3E30B9ECDFF1F4030000FFFF0300504B030414000600080000002100B5553023F50000004C0200000B00CE015F72656C732F2E72656C7320A2CA0128A0000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008C92CF4EC3300CC6EF48BC43E4FBEA6E4808A1A5BB4C48BB21541EC024EE1FB58DA32440F7F68403824A63DBD1F6E7CF3F5BDEEEE669541F1C622F4EC3BA2841B133627BD76A78AD9F560FA06222676914C71A8E1C6157DDDE6C5F78A4949B62D7FBA8B28B8B1ABA94FC2362341D4F140BF1EC72A5913051CA6168D19319A865DC94E53D86BF1E502D3CD5C16A08077B07AA3EFA3CF9B2B7344D6F782FE67D62974E8C409E + m.lcFileBinary = m.lcFileBinary + 0h133BCB76E543660BA9CFDBA89A42CB498315F39CD311C9FB2263039E26DA5C4FF4FFB63871224B89D048E0F33CDF8A7340EBEB812E9F68A9F8BDCE3CE2A784E14D64F861C1C50F545F000000FFFF0300504B0304140006000800000021008D87DA70E00000002D0200001A000801786C2F5F72656C732F776F726B626F6F6B2E786D6C2E72656C7320A2040128A00001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AC91CB6AC3301045F785FE83987D3D760AA594C8D99442B6C5FD00218F1FC496846692D67F5FE182DD404836D908AE06DD73246D773FE3A04E14B9F74E4391E5A0C8595FF7AED5F0557D3CBD826231AE368377A46122865DF9F8B0FDA4C1483AC45D1F58A516C71A3A91F086C8B6 + m.lcFileBinary = m.lcFileBinary + 0hA3D170E603B934697C1C8DA4185B0CC61E4C4BB8C9F3178CFF3BA03CEB54FB5A43DCD7CFA0AA2924F2ED6EDF34BDA5776F8F2339B98040966948175095892D8986BF9C2547C0CBF8CD3DF1929E8556FA1C715E8B6B0EC53D1DBE7D3C704724ABC7B2C5384F16193CFBE4F2170000FFFF0300504B030414000600080000002100A460FAFF52010000270200000F000000786C2F776F726B626F6F6B2E786D6C8C915D6FC2201486EF97EC3F10EE272DA9CE185B93655BE6CD6232A7D7AC9C5A228506A8D57FBF534CE776B72BCE073CE7BC2FCBD5B9D1E404CE2B6B729A4E124AC094562A73C8E9E7F6F5614E890FC248A1AD819C5EC0D355717FB7ECAD3B7E + m.lcFileBinary = m.lcFileBinary + 0h597B2408303EA77508ED82315FD6D0083FB12D18EC54D6352260EA0ECCB70E84F435406834E34932638D50865E090BF71F86AD2A55C2B32DBB064CB8421C6811707D5FABD6D36259290DBBAB2222DAF65D34B8F75953A2850F2F52059039CD30B53DFC29B8AE7DEA941EBAD3644A59F12372E3085203B88D5327515ED0294A2454A2D3618B82C77958E719E7B3E1ED60CE4E41EF6F982125E7BD32D2F639E5199A7D19B31427923EB6F64A861A51D9FC567B0375A8434EE7499A0C74F60B1F2DC531F12426EAFD186CC625636D8D9230760B85815BCB3412C667A5D0250A1C8E78914F1F7954CFC63F2EBE010000FFFF0300504B0304140006000800000021 + m.lcFileBinary = m.lcFileBinary + 0h00A083C4AEA3010000640300000D000000786C2F7374796C65732E786D6CA453C16ADC3010BD17F20F42F746BB0B0D6DB19D436121909440B6D0AB6CC95EC16864A4F1B2EED767643BDEDD530EBD584F4F336F9E66E4E2F1EC419C6C4C2E6029B7F71B292C36C138EC4AF9E7B0FFFA5D8A441A8D8680B694A34DF2B1BAFB52241AC1BE1DAD25C112984A7924EA7F2A959AA3F53ADD87DE229FB4217A4DBC8D9D4A7DB4DAA49CE441ED369B07E5B54359156D404AA2090312BB5888AA48FFC44903335BA9AAA20910A2209667231383DADB39E29706574797C35AED1D8C33BDCBC4E46889F30E43CCA4CA259725719203580DECB20126AAA2D74436E29E3762 + m.lcFileBinary = m.lcFileBinary + 0hC187B1E7F2C8DD9865A6B84FA2BBA8C7EDEEDB55829A0A56451DA2E1EE5F5F7DA6AA026C4B6C34BAEE98570A3D7FEB40143C03E37417500343F591B100BE4E6301DEF284FEB637DAE756E0E0F79E9E4C2979D6B9091F902FB2C0596FDE64FD6BB559FBBF65C5B9BDD567C52BDB37A6D7F222CFBB94BFF39302B94A887A70400E6F05A7EBB3A6395F5AB0C913205DF3CBCDCD59AB70278C6DF50074580F4B79C12FD6B8C1FF58A35EDD29D02451CA0B7ECE93DA3E4C534EEBEF51BD030000FFFF0300504B030414000600080000002100E9A625B882060000531B000013000000786C2F7468656D652F7468656D65312E786D6CEC594F6FDB3614BF0FD87720 + m.lcFileBinary = m.lcFileBinary + 0h746F6D27B61B07758AD8B19BAD4D1BC46E871E6999965853A240D2497D1BDAE38001C3BA619701BBED306C2BD002BB749F265B87AD03FA15F6484AB218CB4BD2061BD6D58744227F7CFFDFE32375F5DA8388A1432224E571DBAB5DAE7A88C43E1FD338687B7786FD4B1B1E920AC763CC784CDADE9C48EFDAD6FBEF5DC59B2A241141B03E969BB8ED854A259B958AF46118CBCB3C2131CC4DB888B082571154C6021F01DD8855D6AAD56625C234F6508C23207B7B32A13E41434DD2DBCA88F718BCC64AEA019F8981264D9C15063B9ED63442CE659709748859DB033E637E34240F948718960A26DA5ED5FCBCCAD6D50ADE4C1731B5626D615DDFFCD275E982 + m.lcFileBinary = m.lcFileBinary + 0hF174CDF014C128675AEBD75B577672FA06C0D432AED7EB757BB59C9E0160DF074DAD2C459AF5FE46AD93D12C80ECE332ED6EB551ADBBF802FDF525995B9D4EA7D14A65B1440DC83ED697F01BD5667D7BCDC11B90C53796F0F5CE76B7DB74F00664F1CD257CFF4AAB5977F10614321A4F97D0DAA1FD7E4A3D874C38DB2D856F007CA39AC2172888863CBA348B098FD5AA588BF07D2EFA00D04086158D919A2764827D88E22E8E468262CD006F125C98B143BE5C1AD2BC90F4054D54DBFB30C190110B7AAF9E7FFFEAF953F4EAF993E387CF8E1FFE74FCE8D1F1C31F2D2D67E12E8E83E2C297DF7EF6E7D71FA33F9E7EF3F2F117E57859C4FFFAC327BFFCFC79 + m.lcFileBinary = m.lcFileBinary + 0h3910326821D18B2F9FFCF6ECC98BAF3EFDFDBBC725F06D814745F8904644A25BE4081DF0087433867125272371BE15C3105367050E817609E99E0A1DE0AD396665B80E718D775740F128035E9FDD77641D8462A66809E71B61E400F738671D2E4A0D7043F32A5878388B8372E66256C41D607C58C6BB8B63C7B5BD590255330B4AC7F6DD903862EE331C2B1C909828A4E7F8949012EDEE51EAD8758FFA824B3E51E81E451D4C4B4D32A4232790168B7669047E9997E90CAE766CB3771775382BD37A871CBA484808CC4A841F12E698F13A9E291C95911CE288150D7E13ABB04CC8C15CF8455C4F2AF074401847BD3191B26CCD6D01FA169C7E0343BD2A75FB + m.lcFileBinary = m.lcFileBinary + 0h1E9B472E52283A2DA37913735E44EEF06937C45152861DD0382C623F905308518CF6B92A83EF713743F43BF801C72BDD7D9712C7DDA717823B3470445A04889E9909ED4B28D44EFD8D68FC77C59851A8C63606DE15E3B6B70D5B53594AEC9E28C1AB70FFC1C2BB8367F13E81585FDE78DED5DD7775D77BEBEBEEAA5C3E6BB55D1458A8BDBA79B07DB1E992A3954DF28432365073466E4AD3274BD82CC67D18D4EBCC0191E487A62484C7B4B83BB84060B30609AE3EA22A1C8438811EBBE66922814C490712255CC2D9CE0C97D2D678E8D3953D1936F499C1D60389D51E1FDBE1753D9C1D0D723266CB09CCF93363B4AE099C95D9FA959428A8FD3ACC6A5AA8 + m.lcFileBinary = m.lcFileBinary + 0h3373AB19D14CA973B8E52A830F975583C1DC9AD08520E85DC0CA4D38A26BD67036C18C8CB5DDED069CB9C578E1225D24433C26A98FB4DECB3EAA192765B1622E0320764A7CA4CF79A758ADC0ADA5C9BE01B7B338A9C8AEBE825DE6BD37F15216C10B2FE9BC3D918E2C2E26278BD151DB6B35D61A1EF271D2F62670AC85C72801AF4BDDF86116C0DD90AF840DFB5393D964F9C29BAD4C3137096A705361EDBEA4B053071221D50E96A10D0D339586008B35272BFF5A03CC7A510AD8487F0D29D6372018FE3529C08EAE6BC964427C5574766144DBCEBEA6A594CF141183707C84466C260E30B85F872AE833A6126E274C45D02F7095A6AD6DA6DCE29C265DF1 + m.lcFileBinary = m.lcFileBinary + 0h02CBE0EC38664988D372AB5334CB640B37799CCB60DE0AE2816EA5B21BE5CEAF8A49F90B52A518C6FF3355F47E02D705EB63ED011F6E7205463A5FDB1E172AE450859290FA7D018D83A91D102D701D0BD31054709F6CFE0B72A8FFDB9CB3344C5AC3A94F1DD000090AFB910A0521FB50964CF49D42AC96EE5D96244B0999882A882B132BF6881C1236D435B0A9F7760F8510EAA69AA465C0E04EC69FFB9E66D028D04D4E31DF9C1A92EFBD3607FEE9CEC7263328E5D661D3D064F6CF452CD955ED7AB33CDB7B8B8AE889459B55CFB2029815B682569AF6AF29C239B75A5BB196345E6B64C28117973586C1BC214AE0D207E93FB0FF51E133FB71426FA8437E + m.lcFileBinary = m.lcFileBinary + 0h00B515C1B7064D0CC206A2FA926D3C902E907670048D931DB4C1A44959D3A6AD93B65AB6595F70A79BF33D616C2DD959FC7D4E63E7CD99CBCEC9C58B34766A61C7D6766CA5A9C1B32753148626D941C638C67CD52A7E78E2A3FBE0E81DB8E29F31254D30C1672581A1F51C983C80E4B71CCDD2ADBF000000FFFF0300504B030414000600080000002100075F38D31E010000C701000018000000786C2F776F726B7368656574732F7368656574312E786D6C8C514D6BC3300CBD0FF61F8CEE8BD38D6EA324298352B6C360ECEBEE2472626A5BC156D7EDDFCF496819F4B29B3EDE7BD2938AF5B7B3E20B4334E44B58643908F40DB5C677257CBC6FAFEE4144 + m.lcFileBinary = m.lcFileBinary + 0h56BE55963C96F08311D6D5E54571A0B08B3D228BA4E063093DF3B09232363D3A15331AD0A78EA6E014A73474320E01553B919C95D7797E2B9D321E668555F88F06696D1ADC50B377E87916096815A7FD636F860855D19AD41B0D8980BA848705C8AA98C67E1A3CC43FB16055BFA1C586B14DEE418CAE6AA2DD087C4AA57CA4CA33EE7672F512448B5AED2DBFD2E1114DD77312599EA66D14AB441F5487CF2A74C6476151274C9EDD8108337E8A9986A9BA04511333B963D6A783613A4C9EDD80D0447C4CC6B54E2FA87E010000FFFF0300504B030414000600080000002100A6A453EB3E0100005102000011000801646F6350726F70732F636F72652E786D + m.lcFileBinary = m.lcFileBinary + 0h6C20A2040128A00001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h000000000000000000007C92516BC3201485DF07FB0FC1F7449342DB4992C236FAB4C260191B7B13BD6D65D188BAA5FDF733499BA65006BE78CFB9DF3D5ECC57075547BF609D6C7481D284A008346F84D4BB02BD57EB788922E79916AC6E3414E8080EADCAFBBB9C1BCA1B0BAFB63160BD0417059276949B02EDBD371463C7F7A0984B82430771DB58C57CB8DA1D368C7FB31DE08C903956E099609EE10E189B91884E48C147A4F9B1750F101C430D0AB477384D527CF17AB0CADD6CE8958953497F34E14DA7B853B6E08338BA0F4E8EC6B66D9376D6C708F953FCB97979EB9F1A4BDDED8A032A73C129B7C07C63CB1C4F2F617135737E1376BC95201E8F41 + m.lcFileBinary = m.lcFileBinary + 0hBF5113BC8F3B40404421001DE29E958FD9D373B54665B7C3983CC4E9BC2284F6E7AB1B79D5DF051A0AEA34F87FE2B223924595113A5BD02C9B10CF8021F7F52728FF000000FFFF0300504B03041400060008000000210027388BC4880100001103000010000801646F6350726F70732F6170702E786D6C20A2040128A000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009C92C16EDB300C86EF03F60E86EE8D9C601886405651A41D7AD8B00049BBB326D3B150591244D648F6F4A36DA471BA9DA613C99FF8F58994BA3D76BEE821A38BA112CB45290A0836D62E1C2AF1B4FF7AF345144826D4C6C7009538018A5BFDF183DAE6982093032CD82260255AA2B496126D0B9DC105CB819526E6CE10A7F9 + m.lcFileBinary = m.lcFileBinary + 0h2063D3380BF7D1BE761048AECAF2B3842341A8A1BE496F8662725CF7F4BFA675B4031F3EEF4F8981B5BA4BC93B6B885FA9BF3B9B23C6868A87A305AFE45C544CB703FB9A1D9D74A9E43C553B6B3C6CD85837C623287929A84730C3D0B6C665D4AAA7750F96622ED0FDE6B1AD44F1CB200C3895E84D762610630D6D5332C63E2165FD33E6176C010895E486A93886F3DE79EC3EE9E5D8C0C175E3603081B0708DB877E4017F345B93E91FC4CB39F1C830F14E38BB816FBA73CE373E996F7AE7BD895D32E1C4C25BF4CD85177C4AFB786F08CEE3BC2EAA5D6B32D4BC81B37E29A8479E64F683C9A635E100F5B9E76F6158FEF3F4C3F572B528F98C3B3FD794BC + m.lcFileBinary = m.lcFileBinary + 0hFC65FD070000FFFF0300504B01022D0014000600080000002100CC7EE6A14E010000080400001300000000000000000000000000000000005B436F6E74656E745F54797065735D2E786D6C504B01022D0014000600080000002100B5553023F50000004C0200000B000000000000000000000000005E0300005F72656C732F2E72656C73504B01022D00140006000800000021008D87DA70E00000002D0200001A000000000000000000000000004A060000786C2F5F72656C732F776F726B626F6F6B2E786D6C2E72656C73504B01022D0014000600080000002100A460FAFF52010000270200000F000000000000000000000000006A080000786C2F776F + m.lcFileBinary = m.lcFileBinary + 0h726B626F6F6B2E786D6C504B01022D0014000600080000002100A083C4AEA3010000640300000D00000000000000000000000000E9090000786C2F7374796C65732E786D6C504B01022D0014000600080000002100E9A625B882060000531B00001300000000000000000000000000B70B0000786C2F7468656D652F7468656D65312E786D6C504B01022D0014000600080000002100075F38D31E010000C701000018000000000000000000000000006A120000786C2F776F726B7368656574732F7368656574312E786D6C504B01022D0014000600080000002100A6A453EB3E010000510200001100000000000000000000000000BE130000646F635072 + m.lcFileBinary = m.lcFileBinary + 0h6F70732F636F72652E786D6C504B01022D001400060008000000210027388BC48801000011030000100000000000000000000000000033160000646F6350726F70732F6170702E786D6C504B050600000000090009003E020000F11800000000 + CASE m.lcExcelFileExtension = "XLSB" + m.lcFileBinary = 0h504B030414000600080000002100558086C16D010000020400001300DD015B436F6E74656E745F54797065735D2E786D6C20A2D90128A00002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h00000000000000000000000000000000A453CD4BC33014BF0BFE0F255769B2791091B53BE8042FBAC3C47396BEAE616912F2B2D9FEF7BEB6ACA0EC83E1A5A16D7E9F2F99CD9BDA247B08A89DCDD8944F580256B942DB4DC63E57AFE9234B304A5B48E32C64AC0564F3FCF666B66A3D6042688B19AB62F44F42A0AAA096C89D074B7F4A176A19E9356C84976A2B3720EE279307A19C8D60631A3B0E96CF5EA0943B139345439F07276B6D59F23CECEBA43226BD375AC94846C5DE16BCC6141A058663051039016468792D55700B2BD706688B241691CF3E2860D005244B19E2BBAC894D344644720BC373CAC9EF05C1DFA95257965A41E1D4AEA62CBC27BBEB + m.lcFileBinary = m.lcFileBinary + 0h584E0B7EBBB0EDDDA2E89769E7FA82EA1873047702471A0B60F002D79F047E980927645F2B56DAE321C21185F3159D894E252D83F3286886FF2E1ABA435240917AA28410358C9E4FCC796C0EC5704ADE08DF5C553EE17AD0179E192FC6D6005E33D301718A72AC4DB900D7F776186F873E5296E86F70FE030000FFFF0300504B0304140006000800000021004382E3C5F70000004C0200000B00CE015F72656C732F2E72656C7320A2CA0128A000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008C92CF4EC3300CC6EF48BC43E4FBEA6E4808A1B5BB20A4DD102A0FE0256E1BB58DA32440F7F66427A834B61DFDEFF3CF9FBCDDCDD3A8BE38442BAE8275518262A7C558D755F0D1BCAE9E40C544CED0288E2B3872845D7D7FB77DE791521E8ABDF5516515172BE853F2CF8851F73C512CC4B3CB9556C2442987A1434F7AA08E7153968F18FE6A40BD + m.lcFileBinary = m.lcFileBinary + 0hD0547B5341D89B0750CDD1E7CDD7B5A56DADE617D19F13BB746605F29CD819362B1F325B48365FA31A0A1DA70A8CE8B79C8E48DE17191BF03CD1E676A2FFAFC58913194A845A025FE639755C025ADF0E74DDA265C7AF3BF388DF128683C8501CAC3B99838B1FA87F000000FFFF0300504B03041400060008000000210006332055E50000002D0200001A000801786C2F5F72656C732F776F726B626F6F6B2E62696E2E72656C7320A2040128A000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AC91C16AC3301044EF85FE83D87BBD760AA594C8B98442AEC1FD00555EDB22B624B4DB36FEFB0A97360DA4F4928B60B468DEEC68BD394EA37AA7C42E780D555182226F43EB7CAFE1A579BE7B04C562 + m.lcFileBinary = m.lcFileBinary + 0h7C6BC6E049C34C0C9BFAF666BDA7D1487EC4838BACB28B670D83487C42643BD064B808917C9E74214D46B24C3D46630FA6275C95E503A6DF1E509F79AA5DAB21EDDA7B50CD1C33F97FEFD075CED236D8B789BC5C4020CB3CE6055463524FA2E14B17AFCE035EC6AFAE89975C0B9DE88BC4E5AC8ADCD35F19AA6B66F808E9C003919C72FC5C312E93EABB103CFBE4FA130000FFFF0300504B030414000600080000002100A76734B792000000C00000000F000000786C2F776F726B626F6F6B2E62696E6A66646860346040034C407E05430E0323903681922C60B62983018329C34C461E0DA0B0D35390020686764686798CB21F80AC4C20BE6AC9C0E025CF + m.lcFileBinary = m.lcFileBinary + 0hC0100132050A2A3A1819FA1919E630AA800440BA40C615317832A4301832B001D9C10C190CA9405802E44F606498CB2825FB9A11AC320528FB67E5C74BBE4901F6209D590CB31819196603710B2303000000FFFF0300504B030414000600080000002100F98F44D4E0000000CA0100000D000000786C2F7374796C65732E62696EA4904F4B424114C57FBEB9E8F6B9EB1BB410FF1104EE8C5CA608F60514438522100DFA16ADEAC3E52E15FCB3D255923CCFBC47E2D26860CE9C7BCF993B73EF7BC097590AC85D4E846F9E0690F127444146784B9B470674180AA7C6A7993CE46BDEE3AA1E89DC8D402B8EFE00F95A56EEFF569918B3A491C295CAA58E1F38 + m.lcFileBinary = m.lcFileBinary + 0h8FCD8D4D72BD189EB61086B03516BFDAB1AC88D796C62AD14A175ED36B515A6783670DEB291EDCDAF876E6D59DE3C7353DCB6ADF4BED68B00FB418F11AB3BAA2AE863CD6DD4AEC6A2A7A51B5D189EB4EB91E7DE5CA5CB3777C041C000000FFFF0300504B030414000600080000002100E9A625B882060000531B000013000000786C2F7468656D652F7468656D65312E786D6CEC594F6FDB3614BF0FD87720746F6D27B61B07758AD8B19BAD4D1BC46E871E6999965853A240D2497D1BDAE38001C3BA619701BBED306C2BD002BB749F265B87AD03FA15F6484AB218CB4BD2061BD6D58744227F7CFFDFE32375F5DA8388A1432224E571DBAB5DAE7A88C43E + m.lcFileBinary = m.lcFileBinary + 0h1FD338687B7786FD4B1B1E920AC763CC784CDADE9C48EFDAD6FBEF5DC59B2A241141B03E969BB8ED854A259B958AF46118CBCB3C2131CC4DB888B082571154C6021F01DD8855D6AAD56625C234F6508C23207B7B32A13E41434DD2DBCA88F718BCC64AEA019F8981264D9C15063B9ED63442CE659709748859DB033E637E34240F948718960A26DA5ED5FCBCCAD6D50ADE4C1731B5626D615DDFFCD275E982F174CDF014C128675AEBD75B577672FA06C0D432AED7EB757BB59C9E0160DF074DAD2C459AF5FE46AD93D12C80ECE332ED6EB551ADBBF802FDF525995B9D4EA7D14A65B1440DC83ED697F01BD5667D7BCDC11B90C53796F0F5CE76B7DB74F006 + m.lcFileBinary = m.lcFileBinary + 0h64F1CD257CFF4AAB5977F10614321A4F97D0DAA1FD7E4A3D874C38DB2D856F007CA39AC2172888863CBA348B098FD5AA588BF07D2EFA00D04086158D919A2764827D88E22E8E468262CD006F125C98B143BE5C1AD2BC90F4054D54DBFB30C190110B7AAF9E7FFFEAF953F4EAF993E387CF8E1FFE74FCE8D1F1C31F2D2D67E12E8E83E2C297DF7EF6E7D71FA33F9E7EF3F2F117E57859C4FFFAC327BFFCFC793910326821D18B2F9FFCF6ECC98BAF3EFDFDBBC725F06D814745F8904644A25BE4081DF0087433867125272371BE15C3105367050E817609E99E0A1DE0AD396665B80E718D775740F128035E9FDD77641D8462A66809E71B61E400F738671D2E + m.lcFileBinary = m.lcFileBinary + 0h4A0D7043F32A5878388B8372E66256C41D607C58C6BB8B63C7B5BD590255330B4AC7F6DD903862EE331C2B1C909828A4E7F8949012EDEE51EAD8758FFA824B3E51E81E451D4C4B4D32A4232790168B7669047E9997E90CAE766CB3771775382BD37A871CBA484808CC4A841F12E698F13A9E291C95911CE288150D7E13ABB04CC8C15CF8455C4F2AF074401847BD3191B26CCD6D01FA169C7E0343BD2A75FB1E9B472E52283A2DA37913735E44EEF06937C45152861DD0382C623F905308518CF6B92A83EF713743F43BF801C72BDD7D9712C7DDA717823B3470445A04889E9909ED4B28D44EFD8D68FC77C59851A8C63606DE15E3B6B70D5B53594AEC9E28 + m.lcFileBinary = m.lcFileBinary + 0hC1AB70FFC1C2BB8367F13E81585FDE78DED5DD7775D77BEBEBEEAA5C3E6BB55D1458A8BDBA79B07DB1E992A3954DF28432365073466E4AD3274BD82CC67D18D4EBCC0191E487A62484C7B4B83BB84060B30609AE3EA22A1C8438811EBBE66922814C490712255CC2D9CE0C97D2D678E8D3953D1936F499C1D60389D51E1FDBE1753D9C1D0D723266CB09CCF93363B4AE099C95D9FA959428A8FD3ACC6A5AA83373AB19D14CA973B8E52A830F975583C1DC9AD08520E85DC0CA4D38A26BD67036C18C8CB5DDED069CB9C578E1225D24433C26A98FB4DECB3EAA192765B1622E0320764A7CA4CF79A758ADC0ADA5C9BE01B7B338A9C8AEBE825DE6BD37F15216 + m.lcFileBinary = m.lcFileBinary + 0hC10B2FE9BC3D918E2C2E26278BD151DB6B35D61A1EF271D2F62670AC85C72801AF4BDDF86116C0DD90AF840DFB5393D964F9C29BAD4C3137096A705361EDBEA4B053071221D50E96A10D0D339586008B35272BFF5A03CC7A510AD8487F0D29D6372018FE3529C08EAE6BC964427C5574766144DBCEBEA6A594CF141183707C84466C260E30B85F872AE833A6126E274C45D02F7095A6AD6DA6DCE29C265DF102CBE0EC38664988D372AB5334CB640B37799CCB60DE0AE2816EA5B21BE5CEAF8A49F90B52A518C6FF3355F47E02D705EB63ED011F6E7205463A5FDB1E172AE450859290FA7D018D83A91D102D701D0BD31054709F6CFE0B72A8FFDB9CB3344C + m.lcFileBinary = m.lcFileBinary + 0h5AC3A94F1DD000090AFB910A0521FB50964CF49D42AC96EE5D96244B0999882A882B132BF6881C1236D435B0A9F7760F8510EAA69AA465C0E04EC69FFB9E66D028D04D4E31DF9C1A92EFBD3607FEE9CEC7263328E5D661D3D064F6CF452CD955ED7AB33CDB7B8B8AE889459B55CFB2029815B682569AF6AF29C239B75A5BB196345E6B64C28117973586C1BC214AE0D207E93FB0FF51E133FB71426FA8437E00B515C1B7064D0CC206A2FA926D3C902E907670048D931DB4C1A44959D3A6AD93B65AB6595F70A79BF33D616C2DD959FC7D4E63E7CD99CBCEC9C58B34766A61C7D6766CA5A9C1B32753148626D941C638C67CD52A7E78E2A3FBE0E81DB8E29F + m.lcFileBinary = m.lcFileBinary + 0h31254D30C1672581A1F51C983C80E4B71CCDD2ADBF000000FFFF0300504B030414000600080000002100A1512698C10000001C01000023000000786C2F776F726B7368656574732F5F72656C732F7368656574312E62696E2E72656C736CCFC16AC3300C06E0FBA0EF60745F9CF430C68853D861906BE91E40B395C434968D654AF2F6F56DEDD8F197F83FA1FEB48555DD288B8F6CA06B5A50C4363ACFB381EFCBD7EB3B2829C80ED7C864602781D37078E9CFB462A925597C12551516034B29E9436BB10B05942626E2BA99620E586ACCB34E68AF38933EB6ED9BCE8F060C4FA61A9D813CBA0ED4654FF5F21F3B789BA3C4A93436061DA7C9DBFF54BDAD9F + m.lcFileBinary = m.lcFileBinary + 0h9E31EF233BDAAA8579A662E0E777D83535801E7AFDF4D370070000FFFF0300504B030414000600080000002100A273D38D810000001601000018000000786C2F776F726B7368656574732F7368656574312E62696E6A646498CC287E928589C181010CFE430188338551002C8644B432327432CADD61461202EB4C411298C1A882220F946244928631BB1819DA18199E32F3806CE460D001AB99C8C8308991613A8B134415480C9B5E9819301A5D0D887F97994980E10EB3411A183CB387D1103D2FEC61B431185CB687D14D8C0C00000000FFFF0300504B0304140006000800000021001E06781015000000200000001E000000786C2F776F726B73686565 + m.lcFileBinary = m.lcFileBinary + 0h74732F62696E617279496E646578312E62696ED29260000205108106A632310011000000FFFF0300504B0304140006000800000021004B7C9F083E0100005102000011000801646F6350726F70732F636F72652E786D6C20A2040128A0000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007C925F4BC33014C5DF05BF43C97B9B74835943DB81CA9E1C085614DF4272D7159B3F24D16EDFDEB4DD6A0743C84BEE39F7774F2EC9D707D9463F605DA35581D284A00814D7A2517581DEAA4D9CA1C879A6046BB582021DC1A175797B937343B9B6F062B501EB1B7051202947B929D0DE7B4331767C0F92B92438541077DA4AE6C3D5D6D830FEC56AC00B42565882678279867B606C26223A21059F90E6DBB6 + m.lcFileBinary = m.lcFileBinary + 0h0340700C2D4850DEE13449F19FD78395EE6AC3A0CC9CB2F14713DE748A3B670B3E8A93FBE09AC9D8755DD22D8718217F8A3FB6CFAFC353E346F5BBE280CA5C70CA2D30AF6D99E3F9252CAE65CE6FC38E770D888763D0AFD4041FE28E1010510840C7B867E57DF9F8546D50D9EF3026F771BAAA08A1C3F9EC475EF4F781C6823C0DFE9F98F54472572D085D66946433E21930E6BEFC04E52F000000FFFF0300504B0304140006000800000021006F7E771280010000FE02000010000801646F6350726F70732F6170702E786D6C20A2040128A00001000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009C92416BE3301085EF85FD0F46F7464E589625C82AA569E9614B0349B367551EC7228A64345393F4D7 + m.lcFileBinary = m.lcFileBinary + 0h776C93C6D9EDA93A8DE63D9E3E8DA46E0E7B9FB590D0C55088E9241719041B4B17B68578593F5CFF16199209A5F13140218E80E246FFB852CB141B48E400338E0858889AA8994B89B686BDC109CB81952AA6BD21DEA6AD8C55E52C2CA27DDB432039CBF35F120E04A184F2BAF90C1443E2BCA5EF8696D1767CB8591F1B06D6EAB669BCB386F896FAC9D914315694DD1F2C7825C7A262BA15D8B7E4E8A87325C75BB5B2C6C31D07EBCA780425CF0DF508A61BDAD2B8845AB5346FC1524C19BA771EDB4C64AF06A1C329446B92338118ABB30D9BBEF60D52D27F63DA610D40A8241B86665F8EBDE3DAFDD4D3DEC0C5A5B10B184058B8445C3BF280CFD5D224FA + m.lcFileBinary = m.lcFileBinary + 0h82783A26EE1906DE0167D5F10D678EF9FA2BF349FF64FF7161872FCD3A2E0CC16976974DB5AA4D8292C77DD2CF0DF5C8634BBE0BB9AB4DD84279F2FC2F742FBD19BEB39ECE2639AFFE814F3D25CF1F577F000000FFFF0300504B01022D0014000600080000002100558086C16D010000020400001300000000000000000000000000000000005B436F6E74656E745F54797065735D2E786D6C504B01022D00140006000800000021004382E3C5F70000004C0200000B000000000000000000000000007B0300005F72656C732F2E72656C73504B01022D001400060008000000210006332055E50000002D0200001A00000000000000000000000000690600 + m.lcFileBinary = m.lcFileBinary + 0h00786C2F5F72656C732F776F726B626F6F6B2E62696E2E72656C73504B01022D0014000600080000002100A76734B792000000C00000000F000000000000000000000000008E080000786C2F776F726B626F6F6B2E62696E504B01022D0014000600080000002100F98F44D4E0000000CA0100000D000000000000000000000000004D090000786C2F7374796C65732E62696E504B01022D0014000600080000002100E9A625B882060000531B00001300000000000000000000000000580A0000786C2F7468656D652F7468656D65312E786D6C504B01022D0014000600080000002100A1512698C10000001C01000023000000000000000000000000000B + m.lcFileBinary = m.lcFileBinary + 0h110000786C2F776F726B7368656574732F5F72656C732F7368656574312E62696E2E72656C73504B01022D0014000600080000002100A273D38D810000001601000018000000000000000000000000000D120000786C2F776F726B7368656574732F7368656574312E62696E504B01022D00140006000800000021001E06781015000000200000001E00000000000000000000000000C4120000786C2F776F726B7368656574732F62696E617279496E646578312E62696E504B01022D00140006000800000021004B7C9F083E01000051020000110000000000000000000000000015130000646F6350726F70732F636F72652E786D6C504B01022D001400 + m.lcFileBinary = m.lcFileBinary + 0h06000800000021006F7E771280010000FE02000010000000000000000000000000008A150000646F6350726F70732F6170702E786D6C504B0506000000000B000B00DB020000401800000000 + CASE m.lcExcelFileExtension = "XLSM" + m.lcFileBinary = 0h504B03041400060008000000210038088E4F60010000F20300001300DB015B436F6E74656E745F54797065735D2E786D6C20A2D70128A00002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h0000000000000000000000000000A4934D6EC2301085F7957A87C8DB2A31745155158105A5CB96053D80B127C4C27FF2181A6EDF495290401481D838B2A279DFBC37E3D1A4B126DB4244ED5DC986C58065E0A457DAAD4AF6BDF8C85F59864938258C7750B21D209B8C1F1F468B5D00CCA8DA61C9EA94C21BE7286BB0020B1FC0D19FCA472B125DE38A0721D76205FC793078E1D2BB042EE5A9D560E3D1173510B5826C2E62FA149638BC313C911AF4E7B0203D964DFBC2965D321182D15224EA9C6F9D3AA1E6BEAAB404E5E5C612ABE8C49E5A15FE2F10D3CE00DE8DC2104128AC019235452FBA27BF4325362665B38612E8438F60F0366B7F611654D9D9C7 + m.lcFileBinary = m.lcFileBinary + 0h5A07BC40B89CDDE54C7E7C5C2FBD5F5F918AC51C1A0964B9B55E5821A39F39B134A0E8A2DDBEC373E3A639CDA30FC869AA57A08E37EC74D6D086AB40E5812421260D8774CEB169D55A975DD7C8BBCFFDFB76BC0407FDAB32903EC2ED21ECB7A2AD3EE39C772F76FC0B0000FFFF0300504B030414000600080000002100B5553023F50000004C0200000B00CE015F72656C732F2E72656C7320A2CA0128A000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008C92CF4EC3300CC6EF48BC43E4FBEA6E4808A1A5BB4C48BB21541EC024EE1FB58DA32440F7F68403824A63DBD1F6E7CF3F5BDEEEE669541F1C622F4EC3BA2841B133627BD76A78AD9F560FA06222676914C71A8E1C6157DDDE6C5F78A4949B62D7FBA8B28B8B1ABA94FC2362341D4F140BF1EC72A5913051CA6168D19319A865DC94E53D86BF1E502D3CD5C16A08077B07AA3EFA3CF9B2 + m.lcFileBinary = m.lcFileBinary + 0hB7344D6F782FE67D62974E8C409E133BCB76E543660BA9CFDBA89A42CB498315F39CD311C9FB2263039E26DA5C4FF4FFB63871224B89D048E0F33CDF8A7340EBEB812E9F68A9F8BDCE3CE2A784E14D64F861C1C50F545F000000FFFF0300504B0304140006000800000021008D87DA70E00000002D0200001A000801786C2F5F72656C732F776F726B626F6F6B2E786D6C2E72656C7320A2040128A0000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AC91CB6AC3301045F785FE83987D3D760AA594C8D99442B6C5FD00218F1FC496846692D67F5FE182DD404836D908AE06DD73246D773FE3A04E14B9F74E4391E5A0C8595FF7AED5F0557D3CBD826231AE368377A46122865DF9F8B0FDA4C1483A + m.lcFileBinary = m.lcFileBinary + 0hC45D1F58A516C71A3A91F086C8B6A3D170E603B934697C1C8DA4185B0CC61E4C4BB8C9F3178CFF3BA03CEB54FB5A43DCD7CFA0AA2924F2ED6EDF34BDA5776F8F2339B98040966948175095892D8986BF9C2547C0CBF8CD3DF1929E8556FA1C715E8B6B0EC53D1DBE7D3C704724ABC7B2C5384F16193CFBE4F2170000FFFF0300504B030414000600080000002100A460FAFF52010000270200000F000000786C2F776F726B626F6F6B2E786D6C8C915D6FC2201486EF97EC3F10EE272DA9CE185B93655BE6CD6232A7D7AC9C5A228506A8D57FBF534CE776B72BCE073CE7BC2FCBD5B9D1E404CE2B6B729A4E124AC094562A73C8E9E7F6F5614E890FC248A1 + m.lcFileBinary = m.lcFileBinary + 0hAD819C5EC0D355717FB7ECAD3B7E597B2408303EA77508ED82315FD6D0083FB12D18EC54D6352260EA0ECCB70E84F435406834E34932638D50865E090BF71F86AD2A55C2B32DBB064CB8421C6811707D5FABD6D36259290DBBAB2222DAF65D34B8F75953A2850F2F52059039CD30B53DFC29B8AE7DEA941EBAD3644A59F12372E3085203B88D5327515ED0294A2454A2D3618B82C77958E719E7B3E1ED60CE4E41EF6F982125E7BD32D2F639E5199A7D19B31427923EB6F64A861A51D9FC567B0375A8434EE7499A0C74F60B1F2DC531F12426EAFD186CC625636D8D9230760B85815BCB3412C667A5D0250A1C8E78914F1F7954CFC63F2EBE010000FFFF03 + m.lcFileBinary = m.lcFileBinary + 0h00504B030414000600080000002100A083C4AEA3010000640300000D000000786C2F7374796C65732E786D6CA453C16ADC3010BD17F20F42F746BB0B0D6DB19D436121909440B6D0AB6CC95EC16864A4F1B2EED767643BDEDD530EBD584F4F336F9E66E4E2F1EC419C6C4C2E6029B7F71B292C36C138EC4AF9E7B0FFFA5D8A441A8D8680B694A34DF2B1BAFB52241AC1BE1DAD25C112984A7924EA7F2A959AA3F53ADD87DE229FB4217A4DBC8D9D4A7DB4DAA49CE441ED369B07E5B54359156D404AA2090312BB5888AA48FFC44903335BA9AAA20910A2209667231383DADB39E29706574797C35AED1D8C33BDCBC4E46889F30E43CCA4CA25972571920358 + m.lcFileBinary = m.lcFileBinary + 0h0DECB20126AAA2D74436E29E3762C187B1E7F2C8DD9865A6B84FA2BBA8C7EDEEDB55829A0A56451DA2E1EE5F5F7DA6AA026C4B6C34BAEE98570A3D7FEB40143C03E37417500343F591B100BE4E6301DEF284FEB637DAE756E0E0F79E9E4C2979D6B9091F902FB2C0596FDE64FD6BB559FBBF65C5B9BDD567C52BDB37A6D7F222CFBB94BFF39302B94A887A70400E6F05A7EBB3A6395F5AB0C913205DF3CBCDCD59AB70278C6DF50074580F4B79C12FD6B8C1FF58A35EDD29D02451CA0B7ECE93DA3E4C534EEBEF51BD030000FFFF0300504B030414000600080000002100E9A625B882060000531B000013000000786C2F7468656D652F7468656D65312E78 + m.lcFileBinary = m.lcFileBinary + 0h6D6CEC594F6FDB3614BF0FD87720746F6D27B61B07758AD8B19BAD4D1BC46E871E6999965853A240D2497D1BDAE38001C3BA619701BBED306C2BD002BB749F265B87AD03FA15F6484AB218CB4BD2061BD6D58744227F7CFFDFE32375F5DA8388A1432224E571DBAB5DAE7A88C43E1FD338687B7786FD4B1B1E920AC763CC784CDADE9C48EFDAD6FBEF5DC59B2A241141B03E969BB8ED854A259B958AF46118CBCB3C2131CC4DB888B082571154C6021F01DD8855D6AAD56625C234F6508C23207B7B32A13E41434DD2DBCA88F718BCC64AEA019F8981264D9C15063B9ED63442CE659709748859DB033E637E34240F948718960A26DA5ED5FCBCCAD6D50ADE + m.lcFileBinary = m.lcFileBinary + 0h4C1731B5626D615DDFFCD275E982F174CDF014C128675AEBD75B577672FA06C0D432AED7EB757BB59C9E0160DF074DAD2C459AF5FE46AD93D12C80ECE332ED6EB551ADBBF802FDF525995B9D4EA7D14A65B1440DC83ED697F01BD5667D7BCDC11B90C53796F0F5CE76B7DB74F00664F1CD257CFF4AAB5977F10614321A4F97D0DAA1FD7E4A3D874C38DB2D856F007CA39AC2172888863CBA348B098FD5AA588BF07D2EFA00D04086158D919A2764827D88E22E8E468262CD006F125C98B143BE5C1AD2BC90F4054D54DBFB30C190110B7AAF9E7FFFEAF953F4EAF993E387CF8E1FFE74FCE8D1F1C31F2D2D67E12E8E83E2C297DF7EF6E7D71FA33F9E7EF3F2 + m.lcFileBinary = m.lcFileBinary + 0hF117E57859C4FFFAC327BFFCFC793910326821D18B2F9FFCF6ECC98BAF3EFDFDBBC725F06D814745F8904644A25BE4081DF0087433867125272371BE15C3105367050E817609E99E0A1DE0AD396665B80E718D775740F128035E9FDD77641D8462A66809E71B61E400F738671D2E4A0D7043F32A5878388B8372E66256C41D607C58C6BB8B63C7B5BD590255330B4AC7F6DD903862EE331C2B1C909828A4E7F8949012EDEE51EAD8758FFA824B3E51E81E451D4C4B4D32A4232790168B7669047E9997E90CAE766CB3771775382BD37A871CBA484808CC4A841F12E698F13A9E291C95911CE288150D7E13ABB04CC8C15CF8455C4F2AF074401847BD3191B2 + m.lcFileBinary = m.lcFileBinary + 0h6CCD6D01FA169C7E0343BD2A75FB1E9B472E52283A2DA37913735E44EEF06937C45152861DD0382C623F905308518CF6B92A83EF713743F43BF801C72BDD7D9712C7DDA717823B3470445A04889E9909ED4B28D44EFD8D68FC77C59851A8C63606DE15E3B6B70D5B53594AEC9E28C1AB70FFC1C2BB8367F13E81585FDE78DED5DD7775D77BEBEBEEAA5C3E6BB55D1458A8BDBA79B07DB1E992A3954DF28432365073466E4AD3274BD82CC67D18D4EBCC0191E487A62484C7B4B83BB84060B30609AE3EA22A1C8438811EBBE66922814C490712255CC2D9CE0C97D2D678E8D3953D1936F499C1D60389D51E1FDBE1753D9C1D0D723266CB09CCF93363B4AE09 + m.lcFileBinary = m.lcFileBinary + 0h9C95D9FA959428A8FD3ACC6A5AA83373AB19D14CA973B8E52A830F975583C1DC9AD08520E85DC0CA4D38A26BD67036C18C8CB5DDED069CB9C578E1225D24433C26A98FB4DECB3EAA192765B1622E0320764A7CA4CF79A758ADC0ADA5C9BE01B7B338A9C8AEBE825DE6BD37F15216C10B2FE9BC3D918E2C2E26278BD151DB6B35D61A1EF271D2F62670AC85C72801AF4BDDF86116C0DD90AF840DFB5393D964F9C29BAD4C3137096A705361EDBEA4B053071221D50E96A10D0D339586008B35272BFF5A03CC7A510AD8487F0D29D6372018FE3529C08EAE6BC964427C5574766144DBCEBEA6A594CF141183707C84466C260E30B85F872AE833A6126E274C45 + m.lcFileBinary = m.lcFileBinary + 0hD02F7095A6AD6DA6DCE29C265DF102CBE0EC38664988D372AB5334CB640B37799CCB60DE0AE2816EA5B21BE5CEAF8A49F90B52A518C6FF3355F47E02D705EB63ED011F6E7205463A5FDB1E172AE450859290FA7D018D83A91D102D701D0BD31054709F6CFE0B72A8FFDB9CB3344C5AC3A94F1DD000090AFB910A0521FB50964CF49D42AC96EE5D96244B0999882A882B132BF6881C1236D435B0A9F7760F8510EAA69AA465C0E04EC69FFB9E66D028D04D4E31DF9C1A92EFBD3607FEE9CEC7263328E5D661D3D064F6CF452CD955ED7AB33CDB7B8B8AE889459B55CFB2029815B682569AF6AF29C239B75A5BB196345E6B64C28117973586C1BC214AE0D207 + m.lcFileBinary = m.lcFileBinary + 0hE93FB0FF51E133FB71426FA8437E00B515C1B7064D0CC206A2FA926D3C902E907670048D931DB4C1A44959D3A6AD93B65AB6595F70A79BF33D616C2DD959FC7D4E63E7CD99CBCEC9C58B34766A61C7D6766CA5A9C1B32753148626D941C638C67CD52A7E78E2A3FBE0E81DB8E29F31254D30C1672581A1F51C983C80E4B71CCDD2ADBF000000FFFF0300504B030414000600080000002100075F38D31E010000C701000018000000786C2F776F726B7368656574732F7368656574312E786D6C8C514D6BC3300CBD0FF61F8CEE8BD38D6EA324298352B6C360ECEBEE2472626A5BC156D7EDDFCF496819F4B29B3EDE7BD2938AF5B7B3E20B4334E44B586439 + m.lcFileBinary = m.lcFileBinary + 0h08F40DB5C677257CBC6FAFEE414456BE55963C96F08311D6D5E54571A0B08B3D228BA4E063093DF3B09232363D3A15331AD0A78EA6E014A73474320E01553B919C95D7797E2B9D321E668555F88F06696D1ADC50B377E87916096815A7FD636F860855D19AD41B0D8980BA848705C8AA98C67E1A3CC43FB16055BFA1C586B14DEE418CAE6AA2DD087C4AA57CA4CA33EE7672F512448B5AED2DBFD2E1114DD77312599EA66D14AB441F5487CF2A74C6476151274C9EDD8108337E8A9986A9BA04511333B963D6A783613A4C9EDD80D0447C4CC6B54E2FA87E010000FFFF0300504B0304140006000800000021000ACFE8CF3F0100005102000011000801646F + m.lcFileBinary = m.lcFileBinary + 0h6350726F70732F636F72652E786D6C20A2040128A0000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h0000000000000000000000000000000000000000000000007C92CB6AC3301045F785FE83D1DE969C904785ED405BB26AA0509794EE8434494CAD07925A277F5FD94E5C0742411BCDBD73E66A50B63ACA3AFA01EB2AAD7294260445A0B81695DAE7E8BD5CC74B1439CF9460B55690A31338B42AEEEF326E28D7165EAD36607D052E0A24E52837393A786F28C68E1F40329704870AE24E5BC97CB8DA3D368C7FB13DE00921732CC133C13CC32D303603119D91820F48F36DEB0E2038861A2428EF709AA4F8CFEBC14A77B3A153464E59F993096F3AC71DB305EFC5C17D74D5606C9A2669A65D8C903FC51F9B97B7EEA971A5DA5D7140452638E51698D7B6C8F0 + m.lcFileBinary = m.lcFileBinary + 0hF812165733E73761C7BB0AC4E329E8376A8277717B08882804A07DDC8BB29D3E3D976B54B43B8CC9439CCE4B4268773EDB9157FD6DA0BE20CF83FF272E5B2259941342A70B3A9B8D8817409FFBFA1314BF000000FFFF0300504B0304140006000800000021006F7E771280010000FE02000010000801646F6350726F70732F6170702E786D6C20A2040128A000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009C92416BE3301085EF85FD0F46F7464E589625C82AA569E9614B0349B367551EC7228A64345393F4D7776C93C6D9EDA93A8DE63D9E3E8DA46E0E7B9FB590D0C55088E9241719041B4B17B68578593F5CFF16199209A5F13140218E80E246FFB852CB141B48E400338E0858889AA8994B + m.lcFileBinary = m.lcFileBinary + 0h89B686BDC109CB81952AA6BD21DEA6AD8C55E52C2CA27DDB432039CBF35F120E04A184F2BAF90C1443E2BCA5EF8696D1767CB8591F1B06D6EAB669BCB386F896FAC9D914315694DD1F2C7825C7A262BA15D8B7E4E8A87325C75BB5B2C6C31D07EBCA780425CF0DF508A61BDAD2B8845AB5346FC1524C19BA771EDB4C64AF06A1C329446B92338118ABB30D9BBEF60D52D27F63DA610D40A8241B86665F8EBDE3DAFDD4D3DEC0C5A5B10B184058B8445C3BF280CFD5D224FA82783A26EE1906DE0167D5F10D678EF9FA2BF349FF64FF7161872FCD3A2E0CC16976974DB5AA4D8292C77DD2CF0DF5C8634BBE0BB9AB4DD84279F2FC2F742FBD19BEB39ECE2639 + m.lcFileBinary = m.lcFileBinary + 0hAFFE814F3D25CF1F577F000000FFFF0300504B01022D001400060008000000210038088E4F60010000F20300001300000000000000000000000000000000005B436F6E74656E745F54797065735D2E786D6C504B01022D0014000600080000002100B5553023F50000004C0200000B000000000000000000000000006C0300005F72656C732F2E72656C73504B01022D00140006000800000021008D87DA70E00000002D0200001A0000000000000000000000000058060000786C2F5F72656C732F776F726B626F6F6B2E786D6C2E72656C73504B01022D0014000600080000002100A460FAFF52010000270200000F000000000000000000000000007808 + m.lcFileBinary = m.lcFileBinary + 0h0000786C2F776F726B626F6F6B2E786D6C504B01022D0014000600080000002100A083C4AEA3010000640300000D00000000000000000000000000F7090000786C2F7374796C65732E786D6C504B01022D0014000600080000002100E9A625B882060000531B00001300000000000000000000000000C50B0000786C2F7468656D652F7468656D65312E786D6C504B01022D0014000600080000002100075F38D31E010000C7010000180000000000000000000000000078120000786C2F776F726B7368656574732F7368656574312E786D6C504B01022D00140006000800000021000ACFE8CF3F010000510200001100000000000000000000000000CC13 + m.lcFileBinary = m.lcFileBinary + 0h0000646F6350726F70732F636F72652E786D6C504B01022D00140006000800000021006F7E771280010000FE020000100000000000000000000000000042160000646F6350726F70732F6170702E786D6C504B050600000000090009003E020000F81800000000 + OTHERWISE && XLS + m.lcFileBinary = 0hD0CF11E0A1B11AE1000000000000000000000000000000003E000300FEFF0900060000000000000000000000010000000100000000000000001000001A00000001000000FEFFFFFF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + m.lcFileBinary = m.lcFileBinary + 0hFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + m.lcFileBinary = m.lcFileBinary + 0hFFFFFDFFFFFF1C000000030000000400000005000000060000000700000008000000090000000A0000000B0000000C0000000D0000000E0000000F00000010000000110000001200000013000000140000001500000016000000170000001800000019000000FEFFFFFFFEFFFFFF1D000000FEFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + m.lcFileBinary = m.lcFileBinary + 0hFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + m.lcFileBinary = m.lcFileBinary + 0hFFFFFFFF52006F006F007400200045006E00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500FFFFFFFFFFFFFFFF020000002008020000000000C00000000000004600000000000000000000000030C843AA2911C9011B000000800200000000000057006F0072006B0062006F006F006B000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200020104000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000000000000000000000000000002000000892F00 + m.lcFileBinary = m.lcFileBinary + 0h00000000000500530075006D006D0061007200790049006E0066006F0072006D006100740069006F006E000000000000000000000000000000000000000000000000000000280002010100000003000000FFFFFFFF00000000000000000000000000000000000000000000000000000000000000000000000000000000C800000000000000050044006F00630075006D0065006E007400530075006D006D0061007200790049006E0066006F0072006D006100740069006F006E000000000000000000000038000201FFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000000000000000000000000000004000000E000 + m.lcFileBinary = m.lcFileBinary + 0h0000000000000908100000060500A91FCD07C100010006040000E1000200B004C10002000000E20000005C0070000200002020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202042000200B004610102000000C00100003D01020001009C0002001000190002000000120002000000130002000000AF0102000000BC01020000003D001200F0006900D5394A1F380000000000010058024000020000008D00020000002200020000 + m.lcFileBinary = m.lcFileBinary + 0h000E0002000100B70102000000DA000200000031001E00DC000000080090010000000200AA0701430061006C00690062007200690031001E00DC000000080090010000000200AA0701430061006C00690062007200690031001E00DC000000080090010000000200AA0701430061006C00690062007200690031001E00DC000000080090010000000200AA0701430061006C00690062007200690031001E00DC000000080090010000000200AA0701430061006C00690062007200690031001E00680101003800BC020000000200AA0701430061006D00620072006900610031001E002C0101003800BC020000000200AA0701430061006C00690062007200 + m.lcFileBinary = m.lcFileBinary + 0h690031001E00040101003800BC020000000200AA0701430061006C00690062007200690031001E00DC0001003800BC020000000200AA0701430061006C00690062007200690031001E00DC000000110090010000000200AA0701430061006C00690062007200690031001E00DC000000140090010000000200AA0701430061006C00690062007200690031001E00DC0000003C0090010000000200AA0701430061006C00690062007200690031001E00DC0000003E0090010000000200AA0701430061006C00690062007200690031001E00DC0001003F00BC020000000200AA0701430061006C00690062007200690031001E00DC0001003400BC02000000 + m.lcFileBinary = m.lcFileBinary + 0h0200AA0701430061006C00690062007200690031001E00DC000000340090010000000200AA0701430061006C00690062007200690031001E00DC0001000900BC020000000200AA0701430061006C00690062007200690031001E00DC0000000A0090010000000200AA0701430061006C00690062007200690031001E00DC000200170090010000000200AA0701430061006C00690062007200690031001E00DC0001000800BC020000000200AA0701430061006C00690062007200690031001E00DC000000090090010000000200AA0701430061006C0069006200720069001E041C000500170000222422232C2323305F293B5C28222422232C2323305C29 + m.lcFileBinary = m.lcFileBinary + 0h1E04210006001C0000222422232C2323305F293B5B5265645D5C28222422232C2323305C291E04220007001D0000222422232C2323302E30305F293B5C28222422232C2323302E30305C291E0427000800220000222422232C2323302E30305F293B5B5265645D5C28222422232C2323302E30305C291E0437002A003200005F282224222A20232C2323305F293B5F282224222A205C28232C2323305C293B5F282224222A20222D225F293B5F28405F291E042E0029002900005F282A20232C2323305F293B5F282A205C28232C2323305C293B5F282A20222D225F293B5F28405F291E043F002C003A00005F282224222A20232C2323302E30305F293B5F + m.lcFileBinary = m.lcFileBinary + 0h282224222A205C28232C2323302E30305C293B5F282224222A20222D223F3F5F293B5F28405F291E0436002B003100005F282A20232C2323302E30305F293B5F282A205C28232C2323302E30305C293B5F282A20222D223F3F5F293B5F28405F29E000140000000000F5FF200000000000000000000000C020E000140000000000F5FF200000000000000000000000C020E000140000000000F5FF200000000000000000000000C020E000140000000000F5FF200000000000000000000000C020E000140000000000F5FF200000000000000000000000C020E000140000000000F5FF200000000000000000000000C020E000140000000000F5FF20000000 + m.lcFileBinary = m.lcFileBinary + 0h0000000000000000C020E000140000000000F5FF200000000000000000000000C020E000140000000000F5FF200000000000000000000000C020E000140000000000F5FF200000000000000000000000C020E000140000000000F5FF200000000000000000000000C020E000140000000000F5FF200000000000000000000000C020E000140000000000F5FF200000000000000000000000C020E000140000000000F5FF200000000000000000000000C020E000140000000000F5FF200000000000000000000000C020E0001400000000000100200000000000000000000002C020E000140005000000F5FF200000B400000000000000049F20E000140005 + m.lcFileBinary = m.lcFileBinary + 0h000000F5FF200000B40000000000000004AD20E000140005000000F5FF200000B40000000000000004AA20E000140005000000F5FF200000B40000000000000004AE20E000140005000000F5FF200000B400000000000000049B20E000140005000000F5FF200000B40000000000000004AF20E000140005000000F5FF200000B40000000000000004AC20E000140005000000F5FF200000B400000000000000049D20E000140005000000F5FF200000B400000000000000048B20E000140005000000F5FF200000B40000000000000004AE20E000140005000000F5FF200000B40000000000000004AC20E000140005000000F5FF200000B4000000000000 + m.lcFileBinary = m.lcFileBinary + 0h0004B320E000140015000000F5FF200000B400000000000000049E20E000140015000000F5FF200000B400000000000000049D20E000140015000000F5FF200000B400000000000000048B20E000140015000000F5FF200000B40000000000000004A420E000140015000000F5FF200000B40000000000000004B120E000140015000000F5FF200000B40000000000000004B420E000140015000000F5FF200000B40000000000000004BE20E000140015000000F5FF200000B400000000000000048A20E000140015000000F5FF200000B40000000000000004B920E000140015000000F5FF200000B40000000000000004A420E000140015000000F5FF20 + m.lcFileBinary = m.lcFileBinary + 0h0000B40000000000000004B120E000140015000000F5FF200000B40000000000000004B520E00014000B000000F5FF200000B40000000000000004AD20E00014000F000000F5FF200000941111970B970B00049620E000140011000000F5FF200000946666BF1FBF1F0004B720E000140005002B00F5FF200000F80000000000000000C020E000140005002900F5FF200000F80000000000000000C020E000140005002C00F5FF200000F80000000000000000C020E000140005002A00F5FF200000F80000000000000000C020E000140013000000F5FF200000F40000000000000000C020E00014000A000000F5FF200000B40000000000000004AA20E000 + m.lcFileBinary = m.lcFileBinary + 0h140007000000F5FF200000D400500000001F0000C020E000140008000000F5FF200000D400500000000B0000C020E000140009000000F5FF200000D400200000000F0000C020E000140009000000F5FF200000F40000000000000000C020E00014000D000000F5FF200000941111970B970B0004AF20E000140010000000F5FF200000D400600000001A0000C020E00014000C000000F5FF200000B40000000000000004AB20E000140005000000F5FF2000009C1111160B160B00049A20E00014000E000000F5FF200000941111BF1FBF1F00049620E000140005000900F5FF200000F80000000000000000C020E000140006000000F5FF200000F4000000 + m.lcFileBinary = m.lcFileBinary + 0h0000000000C020E000140014000000F5FF200000D4006100003E1F0000C020E000140012000000F5FF200000F40000000000000000C0207C0814007C080000000000000000000000003E00DED9EE787D082D007D080000000000000000000000000000000002000D001400030000000100000030305C293B5F282A0E000500027D082D007D080000000000000000000000000100000002000D001400030000000100000030305C293B5F282A0E000500027D082D007D080000000000000000000000000200000002000D001400030000000100000030305C293B5F282A0E000500027D082D007D080000000000000000000000000300000002000D00140003 + m.lcFileBinary = m.lcFileBinary + 0h0000000100000030305C293B5F282A0E000500027D082D007D080000000000000000000000000400000002000D001400030000000100000030305C293B5F282A0E000500027D082D007D080000000000000000000000000500000002000D001400030000000100000030305C293B5F282A0E000500027D082D007D080000000000000000000000000600000002000D001400030000000100000030305C293B5F282A0E000500027D082D007D080000000000000000000000000700000002000D001400030000000100000030305C293B5F282A0E000500027D082D007D080000000000000000000000000800000002000D001400030000000100000030305C + m.lcFileBinary = m.lcFileBinary + 0h293B5F282A0E000500027D082D007D080000000000000000000000000900000002000D001400030000000100000030305C293B5F282A0E000500027D082D007D080000000000000000000000000A00000002000D001400030000000100000030305C293B5F282A0E000500027D082D007D080000000000000000000000000B00000002000D001400030000000100000030305C293B5F282A0E000500027D082D007D080000000000000000000000000C00000002000D001400030000000100000030305C293B5F282A0E000500027D082D007D080000000000000000000000000D00000002000D001400030000000100000030305C293B5F282A0E00050002 + m.lcFileBinary = m.lcFileBinary + 0h7D082D007D080000000000000000000000000E00000002000D001400030000000100000030305C293B5F282A0E000500027D082D007D080000000000000000000000000F00000002000D001400030000000100000030305C293B5F282A0E000500027D082D007D080000000000000000000000002B00000002000D001400030000000100000030305C293B5F282A0E000500027D082D007D080000000000000000000000002C00000002000D001400030000000100000030305C293B5F282A0E000500027D082D007D080000000000000000000000002D00000002000D001400030000000100000030305C293B5F282A0E000500027D082D007D0800000000 + m.lcFileBinary = m.lcFileBinary + 0h00000000000000002E00000002000D001400030000000100000030305C293B5F282A0E000500027D082D007D080000000000000000000000003A00000002000D001400030000000100000030305C293B5F282A0E000500027D082D007D080000000000000000000000003B00000002000D001400030000000300000030305C293B5F282A0E000500017D0841007D080000000000000000000000003100000003000D001400030000000300000030305C293B5F282A0E000500020800140003000000040000003B5F28405F2920207D0841007D080000000000000000000000003200000003000D001400030000000300000030305C293B5F282A0E00050002 + m.lcFileBinary = m.lcFileBinary + 0h080014000300FF3F040000003B5F28405F2920207D0841007D080000000000000000000000003300000003000D001400030000000300000030305C293B5F282A0E000500020800140003003233040000003B5F28405F2920207D082D007D080000000000000000000000003400000002000D001400030000000300000030305C293B5F282A0E000500027D0841007D080000000000000000000000003000000003000D00140002000000006100FF30305C293B5F282A0E000500020400140002000000C6EFCEFF3B5F28405F2920207D0841007D080000000000000000000000002800000003000D001400020000009C0006FF30305C293B5F282A0E000500 + m.lcFileBinary = m.lcFileBinary + 0h020400140002000000FFC7CEFF3B5F28405F2920207D0841007D080000000000000000000000003700000003000D001400020000009C6500FF30305C293B5F282A0E000500020400140002000000FFEB9CFF3B5F28405F2920207D0891007D080000000000000000000000003500000007000D001400020000003F3F76FF30305C293B5F282A0E000500020400140002000000FFCC99FF3B5F28405F29202007001400020000007F7F7FFF202020202020202008001400020000007F7F7FFF202020202020202009001400020000007F7F7FFF00000000000000000A001400020000007F7F7FFF00000000000000007D0891007D0800000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h00003900000007000D001400020000003F3F3FFF30305C293B5F282A0E000500020400140002000000F2F2F2FF3B5F28405F29202007001400020000003F3F3FFF202020202020202008001400020000003F3F3FFF202020202020202009001400020000003F3F3FFF00000000000000000A001400020000003F3F3FFF00000000000000007D0891007D080000000000000000000000002900000007000D00140002000000FA7D00FF30305C293B5F282A0E000500020400140002000000F2F2F2FF3B5F28405F29202007001400020000007F7F7FFF202020202020202008001400020000007F7F7FFF202020202020202009001400020000007F7F7FFF00 + m.lcFileBinary = m.lcFileBinary + 0h000000000000000A001400020000007F7F7FFF00000000000000007D0841007D080000000000000000000000003600000003000D00140002000000FA7D00FF30305C293B5F282A0E000500020800140002000000FF8001FF3B5F28405F2920207D0891007D080000000000000000000000002A00000007000D001400030000000000000030305C293B5F282A0E000500020400140002000000A5A5A5FF3B5F28405F29202007001400020000003F3F3FFF202020202020202008001400020000003F3F3FFF202020202020202009001400020000003F3F3FFF00000000000000000A001400020000003F3F3FFF00000000000000007D082D007D0800000000 + m.lcFileBinary = m.lcFileBinary + 0h00000000000000003D00000002000D00140002000000FF0000FF30305C293B5F282A0E000500027D0891007D080000000000000000000000003800000007000D001400030000000100000030305C293B5F282A0E000500020400140002000000FFFFCCFF3B5F28405F2920200700140002000000B2B2B2FF20202020202020200800140002000000B2B2B2FF20202020202020200900140002000000B2B2B2FF00000000000000000A00140002000000B2B2B2FF00000000000000007D082D007D080000000000000000000000002F00000002000D001400020000007F7F7FFF30305C293B5F282A0E000500027D0855007D08000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h3C00000004000D001400030000000100000030305C293B5F282A0E000500020700140003000000040000003B5F28405F29202008001400030000000400000020202020202020207D0841007D080000000000000000000000002200000003000D001400030000000000000030305C293B5F282A0E000500020400140003000000040000003B5F28405F2920207D0841007D080000000000000000000000001000000003000D001400030000000100000030305C293B5F282A0E000500020400140003006566040000003B5F28405F2920207D0841007D080000000000000000000000001600000003000D001400030000000100000030305C293B5F282A0E00 + m.lcFileBinary = m.lcFileBinary + 0h050002040014000300CC4C040000003B5F28405F2920207D0841007D080000000000000000000000001C00000003000D001400030000000000000030305C293B5F282A0E000500020400140003003233040000003B5F28405F2920207D0841007D080000000000000000000000002300000003000D001400030000000000000030305C293B5F282A0E000500020400140003000000050000003B5F28405F2920207D0841007D080000000000000000000000001100000003000D001400030000000100000030305C293B5F282A0E000500020400140003006566050000003B5F28405F2920207D0841007D080000000000000000000000001700000003000D + m.lcFileBinary = m.lcFileBinary + 0h001400030000000100000030305C293B5F282A0E00050002040014000300CC4C050000003B5F28405F2920207D0841007D080000000000000000000000001D00000003000D001400030000000000000030305C293B5F282A0E000500020400140003003233050000003B5F28405F2920207D0841007D080000000000000000000000002400000003000D001400030000000000000030305C293B5F282A0E000500020400140003000000060000003B5F28405F2920207D0841007D080000000000000000000000001200000003000D001400030000000100000030305C293B5F282A0E000500020400140003006566060000003B5F28405F2920207D084100 + m.lcFileBinary = m.lcFileBinary + 0h7D080000000000000000000000001800000003000D001400030000000100000030305C293B5F282A0E00050002040014000300CC4C060000003B5F28405F2920207D0841007D080000000000000000000000001E00000003000D001400030000000000000030305C293B5F282A0E000500020400140003003233060000003B5F28405F2920207D0841007D080000000000000000000000002500000003000D001400030000000000000030305C293B5F282A0E000500020400140003000000070000003B5F28405F2920207D0841007D080000000000000000000000001300000003000D001400030000000100000030305C293B5F282A0E00050002040014 + m.lcFileBinary = m.lcFileBinary + 0h0003006566070000003B5F28405F2920207D0841007D080000000000000000000000001900000003000D001400030000000100000030305C293B5F282A0E00050002040014000300CC4C070000003B5F28405F2920207D0841007D080000000000000000000000001F00000003000D001400030000000000000030305C293B5F282A0E000500020400140003003233070000003B5F28405F2920207D0841007D080000000000000000000000002600000003000D001400030000000000000030305C293B5F282A0E000500020400140003000000080000003B5F28405F2920207D0841007D080000000000000000000000001400000003000D001400030000 + m.lcFileBinary = m.lcFileBinary + 0h000100000030305C293B5F282A0E000500020400140003006566080000003B5F28405F2920207D0841007D080000000000000000000000001A00000003000D001400030000000100000030305C293B5F282A0E00050002040014000300CC4C080000003B5F28405F2920207D0841007D080000000000000000000000002000000003000D001400030000000000000030305C293B5F282A0E000500020400140003003233080000003B5F28405F2920207D0841007D080000000000000000000000002700000003000D001400030000000000000030305C293B5F282A0E000500020400140003000000090000003B5F28405F2920207D0841007D0800000000 + m.lcFileBinary = m.lcFileBinary + 0h00000000000000001500000003000D001400030000000100000030305C293B5F282A0E000500020400140003006566090000003B5F28405F2920207D0841007D080000000000000000000000001B00000003000D001400030000000100000030305C293B5F282A0E00050002040014000300CC4C090000003B5F28405F2920207D0841007D080000000000000000000000002100000003000D001400030000000000000030305C293B5F282A0E000500020400140003003233090000003B5F28405F2920209302120010000D0000323025202D20416363656E743192084D0092080000000000000000000001041EFF0D0032003000250020002D0020004100 + m.lcFileBinary = m.lcFileBinary + 0h6300630065006E00740031000000030001000C0007046566DBE5F1FF05000C0007010000000000FF25000500029302120011000D0000323025202D20416363656E743292084D00920800000000000000000000010422FF0D0032003000250020002D00200041006300630065006E00740032000000030001000C0007056566F2DDDCFF05000C0007010000000000FF25000500029302120012000D0000323025202D20416363656E743392084D00920800000000000000000000010426FF0D0032003000250020002D00200041006300630065006E00740033000000030001000C0007066566EAF1DDFF05000C0007010000000000FF250005000293021200 + m.lcFileBinary = m.lcFileBinary + 0h13000D0000323025202D20416363656E743492084D0092080000000000000000000001042AFF0D0032003000250020002D00200041006300630065006E00740034000000030001000C0007076566E5E0ECFF05000C0007010000000000FF25000500029302120014000D0000323025202D20416363656E743592084D0092080000000000000000000001042EFF0D0032003000250020002D00200041006300630065006E00740035000000030001000C0007086566DBEEF3FF05000C0007010000000000FF25000500029302120015000D0000323025202D20416363656E743692084D00920800000000000000000000010432FF0D0032003000250020002D + m.lcFileBinary = m.lcFileBinary + 0h00200041006300630065006E00740036000000030001000C0007096566FDE9D9FF05000C0007010000000000FF25000500029302120016000D0000343025202D20416363656E743192084D0092080000000000000000000001041FFF0D0034003000250020002D00200041006300630065006E00740031000000030001000C000704CC4CB8CCE4FF05000C0007010000000000FF25000500029302120017000D0000343025202D20416363656E743292084D00920800000000000000000000010423FF0D0034003000250020002D00200041006300630065006E00740032000000030001000C000705CC4CE6B9B8FF05000C0007010000000000FF25000500 + m.lcFileBinary = m.lcFileBinary + 0h029302120018000D0000343025202D20416363656E743392084D00920800000000000000000000010427FF0D0034003000250020002D00200041006300630065006E00740033000000030001000C000706CC4CD7E4BCFF05000C0007010000000000FF25000500029302120019000D0000343025202D20416363656E743492084D0092080000000000000000000001042BFF0D0034003000250020002D00200041006300630065006E00740034000000030001000C000707CC4CCCC0DAFF05000C0007010000000000FF2500050002930212001A000D0000343025202D20416363656E743592084D0092080000000000000000000001042FFF0D0034003000 + m.lcFileBinary = m.lcFileBinary + 0h250020002D00200041006300630065006E00740035000000030001000C000708CC4CB6DDE8FF05000C0007010000000000FF2500050002930212001B000D0000343025202D20416363656E743692084D00920800000000000000000000010433FF0D0034003000250020002D00200041006300630065006E00740036000000030001000C000709CC4CFCD5B4FF05000C0007010000000000FF2500050002930212001C000D0000363025202D20416363656E743192084D00920800000000000000000000010420FF0D0036003000250020002D00200041006300630065006E00740031000000030001000C000704323395B3D7FF05000C0007000000FFFFFF + m.lcFileBinary = m.lcFileBinary + 0hFF2500050002930212001D000D0000363025202D20416363656E743292084D00920800000000000000000000010424FF0D0036003000250020002D00200041006300630065006E00740032000000030001000C0007053233D99795FF05000C0007000000FFFFFFFF2500050002930212001E000D0000363025202D20416363656E743392084D00920800000000000000000000010428FF0D0036003000250020002D00200041006300630065006E00740033000000030001000C0007063233C2D69AFF05000C0007000000FFFFFFFF2500050002930212001F000D0000363025202D20416363656E743492084D0092080000000000000000000001042CFF0D + m.lcFileBinary = m.lcFileBinary + 0h0036003000250020002D00200041006300630065006E00740034000000030001000C0007073233B2A1C7FF05000C0007000000FFFFFFFF25000500029302120020000D0000363025202D20416363656E743592084D00920800000000000000000000010430FF0D0036003000250020002D00200041006300630065006E00740035000000030001000C000708323393CDDDFF05000C0007000000FFFFFFFF25000500029302120021000D0000363025202D20416363656E743692084D00920800000000000000000000010434FF0D0036003000250020002D00200041006300630065006E00740036000000030001000C0007093233FAC090FF05000C000700 + m.lcFileBinary = m.lcFileBinary + 0h0000FFFFFFFF250005000293020C002200070000416363656E74319208410092080000000000000000000001041DFF070041006300630065006E00740031000000030001000C00070400004F81BDFF05000C0007000000FFFFFFFF250005000293020C002300070000416363656E743292084100920800000000000000000000010421FF070041006300630065006E00740032000000030001000C0007050000C0504DFF05000C0007000000FFFFFFFF250005000293020C002400070000416363656E743392084100920800000000000000000000010425FF070041006300630065006E00740033000000030001000C00070600009BBB59FF05000C000700 + m.lcFileBinary = m.lcFileBinary + 0h0000FFFFFFFF250005000293020C002500070000416363656E743492084100920800000000000000000000010429FF070041006300630065006E00740034000000030001000C00070700008064A2FF05000C0007000000FFFFFFFF250005000293020C002600070000416363656E74359208410092080000000000000000000001042DFF070041006300630065006E00740035000000030001000C00070800004BACC6FF05000C0007000000FFFFFFFF250005000293020C002700070000416363656E743692084100920800000000000000000000010431FF070041006300630065006E00740036000000030001000C0007090000F79646FF05000C000700 + m.lcFileBinary = m.lcFileBinary + 0h0000FFFFFFFF25000500029302080028000300004261649208390092080000000000000000000001011BFF03004200610064000000030001000C0005FF0000FFC7CEFF05000C0005FF00009C0006FF25000500029302100029000B000043616C63756C6174696F6E92088100920800000000000000000000010216FF0B00430061006C00630075006C006100740069006F006E000000070001000C0005FF0000F2F2F2FF05000C0005FF0000FA7D00FF250005000206000E0005FF00007F7F7FFF010007000E0005FF00007F7F7FFF010008000E0005FF00007F7F7FFF010009000E0005FF00007F7F7FFF010093020F002A000A0000436865636B2043656C + m.lcFileBinary = m.lcFileBinary + 0h6C92087F00920800000000000000000000010217FF0A0043006800650063006B002000430065006C006C000000070001000C0005FF0000A5A5A5FF05000C0007000000FFFFFFFF250005000206000E0005FF00003F3F3FFF060007000E0005FF00003F3F3FFF060008000E0005FF00003F3F3FFF060009000E0005FF00003F3F3FFF0600930204002B8003FF92082000920800000000000000000000010503FF050043006F006D006D00610000000000930204002C8006FF92082800920800000000000000000000010506FF090043006F006D006D00610020005B0030005D0000000000930204002D8004FF92082600920800000000000000000000010504 + m.lcFileBinary = m.lcFileBinary + 0hFF0800430075007200720065006E006300790000000000930204002E8007FF92082E00920800000000000000000000010507FF0C00430075007200720065006E006300790020005B0030005D0000000000930215002F001000004578706C616E61746F7279205465787492084700920800000000000000000000010235FF10004500780070006C0061006E00610074006F0072007900200054006500780074000000020005000C0005FF00007F7F7FFF2500050002930209003000040000476F6F6492083B0092080000000000000000000001011AFF040047006F006F0064000000030001000C0005FF0000C6EFCEFF05000C0005FF0000006100FF250005 + m.lcFileBinary = m.lcFileBinary + 0h000293020E00310009000048656164696E67203192084700920800000000000000000000010310FF0900480065006100640069006E006700200031000000030005000C00070300001F497DFF250005000207000E00070400004F81BDFF050093020E00320009000048656164696E67203292084700920800000000000000000000010311FF0900480065006100640069006E006700200032000000030005000C00070300001F497DFF250005000207000E000704FF3FA8C0DEFF050093020E00330009000048656164696E67203392084700920800000000000000000000010312FF0900480065006100640069006E006700200033000000030005000C0007 + m.lcFileBinary = m.lcFileBinary + 0h0300001F497DFF250005000207000E000704323395B3D7FF020093020E00340009000048656164696E67203492083900920800000000000000000000010313FF0900480065006100640069006E006700200034000000020005000C00070300001F497DFF250005000293020A003500050000496E70757492087500920800000000000000000000010214FF050049006E007000750074000000070001000C0005FF0000FFCC99FF05000C0005FF00003F3F76FF250005000206000E0005FF00007F7F7FFF010007000E0005FF00007F7F7FFF010008000E0005FF00007F7F7FFF010009000E0005FF00007F7F7FFF01009302100036000B00004C696E6B6564 + m.lcFileBinary = m.lcFileBinary + 0h2043656C6C92084B00920800000000000000000000010218FF0B004C0069006E006B00650064002000430065006C006C000000030005000C0005FF0000FA7D00FF250005000207000E0005FF0000FF8001FF060093020C0037000700004E65757472616C9208410092080000000000000000000001011CFF07004E00650075007400720061006C000000030001000C0005FF0000FFEB9CFF05000C0005FF00009C6500FF250005000293020400008000FF92083300920800000000000000000000010100FF06004E006F0072006D0061006C000000020005000C0007010000000000FF25000500029302090038000400004E6F746592086200920800000000 + m.lcFileBinary = m.lcFileBinary + 0h00000000000001020AFF04004E006F00740065000000050001000C0005FF0000FFFFCCFF06000E0005FF0000B2B2B2FF010007000E0005FF0000B2B2B2FF010008000E0005FF0000B2B2B2FF010009000E0005FF0000B2B2B2FF010093020B0039000600004F757470757492087700920800000000000000000000010215FF06004F00750074007000750074000000070001000C0005FF0000F2F2F2FF05000C0005FF00003F3F3FFF250005000206000E0005FF00003F3F3FFF010007000E0005FF00003F3F3FFF010008000E0005FF00003F3F3FFF010009000E0005FF00003F3F3FFF0100930204003A8005FF9208240092080000000000000000000001 + m.lcFileBinary = m.lcFileBinary + 0h0505FF0700500065007200630065006E0074000000000093020A003B000500005469746C659208310092080000000000000000000001030FFF05005400690074006C0065000000020005000C00070300001F497DFF250005000193020A003C00050000546F74616C92084D00920800000000000000000000010319FF050054006F00740061006C000000040005000C0007010000000000FF250005000206000E00070400004F81BDFF010007000E00070400004F81BDFF0600930211003D000C00005761726E696E67205465787492083F0092080000000000000000000001020BFF0C005700610072006E0069006E00670020005400650078007400000002 + m.lcFileBinary = m.lcFileBinary + 0h0005000C0005FF0000FF0000FF25000500028E0858008E080000000000000000000090000000110011005400610062006C0065005300740079006C0065004D0065006400690075006D0039005000690076006F0074005300740079006C0065004C0069006700680074003100360060010200000085000E00032E0000000006005368656574319A0818009A0800000000000000000000010000000000000001000000A3081000A30800000000000000000000000000008C00040001000100C1010800C10100001DEB0100FC0008000000000000000000FF00020008006308160063080000000000000000000016000000040000000200960810009608000000 + m.lcFileBinary = m.lcFileBinary + 0h0000000000000042E501009B0810009B0800000000000000000000010000008C0810008C0800000000000000000000000000000A0000000908100000061000A91FCD07C1000100060400000B021000000000000000000000000000152F00000D00020001000C00020064000F000200010011000200000010000800FCA9F1D24D62503F5F00020001002A00020000002B00020000008200020001008000080000000000000000002502040000002C0181000200C104140000001500000083000200000084000200000026000800666666666666E63F27000800666666666666E63F28000800000000000000E83F29000800000000000000E83FA10022000000 + m.lcFileBinary = m.lcFileBinary + 0h2C01010001000100040042E50100333333333333D33F333333333333D33F74009C0826009C0800000000000000000000000000000000000000000000000000003C33000000000000000055000200080000020E0000000000000000000000000000003E021200B606000000004000000000000000000000008B0810008B0800000000000000000000000002001D000F0003000000000000010000000000000067081700670800000000000000000000020001FFFFFFFF034400000A0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000200000003000000FEFFFFFF050000000600000007000000FEFFFFFF09000000FEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + m.lcFileBinary = m.lcFileBinary + 0hFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + m.lcFileBinary = m.lcFileBinary + 0hFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFF0000060002000000000000000000000000000000000001000000E0859FF2F94F6810AB9108002B27B3D930000000980000000700000001000000400000000400000048000000080000005400000012000000600000000C000000780000000D00000084000000130000009000000002000000E40400001E00000004000000000000001E00000004000000000000001E000000100000004D6963726F736F667420457863656C004000000000C07C0D23D9C601400000000086FCA92911C90103000000000000 + m.lcFileBinary = m.lcFileBinary + 0h000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FEFF000006000200000000000000000000000000000000000100000002D5CDD59C2E1B10939708002B2CF9AE30000000B000000008000000010000004800000017000000500000000B000000580000001000000060000000130000006800000016000000700000000D000000780000000C0000008B00000002000000E40400000300000000000C000B000000000000000B000000000000000B000000000000000B000000000000001E1000000100000007000000536865657431000C100000020000001E0000 + m.lcFileBinary = m.lcFileBinary + 0h000B000000576F726B73686565747300030000000100000000000000000000000000000000000000000000000000000000000000000000000000010043006F006D0070004F0062006A0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000200FFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000000000000800000072000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FF + m.lcFileBinary = m.lcFileBinary + 0hFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0hFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100FEFF030A0000FFFFFFFF2008020000000000C000000000000046260000004D6963726F736F6674204F666669636520457863656C203230303320576F726B736865657400060000004269666638000E000000457863656C2E53686565742E3800F439B271000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m.lcFileBinary = m.lcFileBinary + 0h0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + ENDCASE + IF !EMPTY(m.lcFileBinary) + IF STRTOFILE(m.lcFileBinary, m.tcExcelFile, 0) > 0 + m.llReturn = .T. + ENDIF + ENDIF + ENDIF + RETURN m.llReturn +ENDFUNC + +************************************************** +*!* Code used to create hex binary of worksheet templates +************************************************** +*!* LOCAL lcBinary, lcCode +*!* _cliptext = STRCONV(FILETOSTR(GETFILE()),15) +*!* m.lcBinary = _ClipText +*!* m.lcCode = "" +*!* DO WHILE !EMPTY(m.lcBinary) +*!* m.lcCode = m.lcCode + CHR(9) + iif(Empty(m.lcCode), "m.FileBinary = ", "m.FileBinary = m.FileBinary + ") + "0h" + LEFT(m.lcBinary, 510) + CHR(13) + CHR(10) +*!* m.lcBinary = SUBSTR(m.lcBinary, 511) +*!* ENDDO +*!* _cliptext = m.lcCode diff --git a/COMUN/utile/excel/copytoxlsx.prg b/COMUN/utile/excel/copytoxlsx.prg new file mode 100644 index 0000000..1e50476 --- /dev/null +++ b/COMUN/utile/excel/copytoxlsx.prg @@ -0,0 +1,1478 @@ +* Version 5.1 +LPARAMETERS cCur,lcFileName,llHead,lnMaxIndexLen,lcFFields,llMemoAsComment,lnCodePage,llOpen +* Parameters +* cCur name of the table / cursor +* lcFileName name of the xlsx +* llHead .T. first row of xlsx contain column names +* lnMaxIndexLen optional, maximum length of the indexes. A value between 19 and 120. Default 60 +* lcFFields optional, list of fields to be outputed +* llMemoAsComment optional, memo fields are converted into comments while the cell contains the word "Memo" +* lnCodePage optional, codepage used for strings +* llOpen optional, .T. the file is open (default .F.) +# DEFINE MAXIMUMCOMMENTHEIGHT 20 && maximum height of a comment (expressed in sheet rows) +# DEFINE MAXIMUMCOMMENTWIDTH 10 && maximum width of a comment (expressed in sheet columns) +DECLARE INTEGER ShellExecute IN SHELL32.DLL INTEGER nWinHandle,STRING cOperation,STRING cFileName,STRING cParameters,STRING cDirectory,INTEGER nShowWindow +IF OS(3) < '6' && XP + Declare INTEGER GetLocaleInfo in Win32API LONG Locale, LONG LCType, STRING @LpLCData, INTEGER cchData +ELSE + Declare INTEGER GetLocaleInfoEx in Win32API String Locale, LONG LCType, STRING @LpLCData, INTEGER cchData +ENDIF +DECLARE Sleep IN kernel32 INTEGER +#DEFINE ERRLANG "EN" +#IF ERRLANG = "EN" + #DEFINE ERRMESS1 "Abort" + #DEFINE ERRMESS2 "Cannot create" + #DEFINE ERRMESS3 "No xlsx generated" + #DEFINE ERRMESS4 "Nothing to export" + #DEFINE ERRMESS5 "Not a cursor/table name" + #DEFINE ERRMESS6 "already exist." + #DEFINE ERRMESS7 "Overwrite?" +* thanks to Koen Piller +#ELIF ERRLANG = "NL" + #DEFINE ERRMESS1 "Sluiten" + #DEFINE ERRMESS2 "Niet te maken:" + #DEFINE ERRMESS3 "Geen xlsx gemaakt" + #DEFINE ERRMESS4 "Niets te exporteren" + #DEFINE ERRMESS5 "Geen cursor- of tabelnaam" + #DEFINE ERRMESS6 "bestaat al." + #DEFINE ERRMESS7 "Overschrijven?" +* thanks to Alejandro Garcia +#ELIF ERRLANG = "ES" + #DEFINE ERRMESS1 "Abortar" + #DEFINE ERRMESS2 "No se puede crear" + #DEFINE ERRMESS3 "Ningn xslx generado" + #DEFINE ERRMESS4 "Nada que exportar" + #DEFINE ERRMESS5 "No es un nombre de cursor/tabla" + #DEFINE ERRMESS6 "ya existe." + #DEFINE ERRMESS7 "Sobreescribir?" +#ELSE + #DEFINE ERRMESS1 "Abandon" + #DEFINE ERRMESS2 "Nu se poate crea" + #DEFINE ERRMESS3 "Nu s-a generat xlsx" + #DEFINE ERRMESS4 "Nimic de exportat" + #DEFINE ERRMESS5 "Nume invalid de cursor/tabel" + #DEFINE ERRMESS6 "exista deja." + #DEFINE ERRMESS7 "Suprascrieti?" +#ENDIF + +LOCAL lcMyPath,lcDir,loerr as Exception +LOCAL lnRowsNo,lnColsNo,lnCurRow,lnCurCol,lnTime,ltTime,lcSetDec,lnColsNoAll,laFieldsAll[1],lnLenStr,lnLenIdx,llMemos,lnII,lSetTalk,lnFFields,laFFields[1] +LOCAL cStrings,lnColChars,llCR,lcValue,lnDec,cMax,ldValue +LOCAL lcCurr,lcTmp,lnj +LOCAL ldDat01,ldDat11,ldDat02,ldDat12,ldDat03,ltDat02 +LOCAL lnFHStr,lnFHSh,lcLenStr,lcLenIdx,lnCountbefore,lcUnion,lcField,lnTotal,cTotal,lcCurRow,ofile,lcSource,lcZipFileName,oShell,oFolder,llBelow7 +LOCAL laFields[1,6],lnType,lala[1],lcSetPoint,lnFHCo,lnFHDr,lnCurComm,lnNoRow,laNoRow[1],lniNoRow,lnMaxLenRow,lnCommW,lnCommH + +LOCAL lcCurrAlias,llToClose,lcCodePage,lcOldPath,lcStrBad +lcStrBad = '' +FOR lni = 0 TO 31 + IF !INLIST(m.lni,9,10,13) + lcStrBad = m.lcStrBad + CHR(m.lni) + ENDIF +NEXT +lcCurrAlias = ALIAS() +llToClose = .F. + +IF PCOUNT() < 1 + MESSAGEBOX(ERRMESS4,48,ERRMESS3) + RETURN +ELSE + IF VARTYPE(m.cCur) == "C" + IF !USED(m.cCur) + USE (m.cCur) IN 0 + llToClose = .T. + ENDIF + ELSE + MESSAGEBOX(ERRMESS5,48,ERRMESS3) + RETURN + ENDIF +ENDIF +IF PCOUNT() < 2 + lcFileName = FORCEEXT(SYS(2015),"xlsx") +ELSE + IF VARTYPE(m.lcFileName) == "C" + lcFileName = FORCEEXT(m.lcFileName,"xlsx") + ELSE + lcFileName = FORCEEXT(SYS(2015),"xlsx") + ENDIF +ENDIF +IF PCOUNT() < 3 + llHead = .F. +ELSE + IF VARTYPE(m.llHead) <> "L" + llHead = .F. + ENDIF +ENDIF +IF PCOUNT()<4 + lnMaxIndexLen = 60 +ELSE + IF VARTYPE(m.lnMaxIndexLen) $ "NY" + lnMaxIndexLen = INT(m.lnMaxIndexLen) + ELSE + lnMaxIndexLen = 60 + ENDIF + lnMaxIndexLen = MIN(MAX(m.lnMaxIndexLen,19),120) +ENDIF + +IF FILE(FORCEEXT(m.lcFileName,"xlsx")) + IF MESSAGEBOX(FORCEEXT(m.lcFileName,"xlsx")+" "+ERRMESS6+CHR(13)+ERRMESS7,4+48,ERRMESS3) = 7 + RETURN + ELSE + ERASE (FORCEEXT(m.lcFileName,"xlsx")) RECYCLE + ENDIF +ENDIF +lnFFields = 0 +IF PCOUNT()<5 + lcFFields = "" +ELSE + IF VARTYPE(m.lcFFields) <> "C" + lcFFields = "" + ELSE + lnFFields = ALINES(laFFields,UPPER(m.lcFFields),1+4,",") + ENDIF +ENDIF +IF PCOUNT() < 6 + llMemoAsComment = .F. +ELSE + IF VARTYPE(m.llMemoAsComment) <> "L" + llMemoAsComment = .F. + ENDIF +ENDIF +* Thanks to Gregory Green +IF PCOUNT() < 7 + lcCodePage = '' +ELSE + IF VARTYPE(m.lnCodePage) <> "N" + lcCodePage = '' + ELSE + IF !INLIST(m.lnCodePage,437,620,737,850,852,857,861,865,866,874,895,932,936,949,950,1250,1251,1252,1253,1254,1255,1256) + lcCodePage = '' + ELSE + lcCodePage = 'CODEPAGE = ' + TRANSFORM(m.lnCodePage) + ENDIF + ENDIF +ENDIF +IF PCOUNT() < 8 + llOpen = .F. +ELSE + IF VARTYPE(m.llOpen) <> "L" + llOpen = .F. + ENDIF +ENDIF + +lSetTalk = SET("Talk") +SET TALK OFF +lcSetPoint = SET("Point") +SET POINT TO "." +lnColsNoAll=AFIELDS(m.laFieldsAll,m.cCur) +lnColsNo = 0 +lnLenStr = 19 && for datetime +llMemos = .F. +lcUnion = "" +cTotal = SYS(2015) +lnTotal = 0 +ldDat01 = DATE(1900,3,1) +ldDat02 = DATE(1900,1,1) +ldDat03 = DATE(1900,2,28) +ldDat11 = m.ldDat01 - 61 +ldDat12 = m.ldDat02 - 1 +ltDat02 = DATETIME(1900,1,1,0,0,0) +lnColChars = 0 + +LOCAL lnActualCol +lnActualCol = 0 +FOR lnCurCol = 1 TO m.lnColsNoAll + lnActualCol = m.lnActualCol + 1 + IF m.laFieldsAll[m.lnCurCol,2] $ "G" + lnActualCol = m.lnActualCol - 1 + LOOP + ENDIF + IF m.laFieldsAll[m.lnCurCol,2] $ "NFYBIDTLCVM" + IF !EMPTY(m.lcFFields) + IF ASCAN(m.laFFields,laFieldsAll[m.lnCurCol,1],1,-1,-1,1+2+4)=0 + LOOP + ENDIF + ENDIF + lnColsNo = m.lnColsNo + 1 + DIMENSION laFields[m.lnColsNo,6] + laFields[m.lnColsNo,1] = laFieldsAll[m.lnCurCol,1] + laFields[m.lnColsNo,2] = IIF(laFieldsAll[m.lnCurCol,2] $ "CV",1,; + IIF(laFieldsAll[m.lnCurCol,2] $ "NF",2,; + IIF(laFieldsAll[m.lnCurCol,2] == "I",3,; + IIF(laFieldsAll[m.lnCurCol,2] == "D",4,; + IIF(laFieldsAll[m.lnCurCol,2] == "T",5,; + IIF(laFieldsAll[m.lnCurCol,2] == "L",6,; + IIF(laFieldsAll[m.lnCurCol,2] == "Y",7,; + IIF(laFieldsAll[m.lnCurCol,2] == "B",8,; + IIF(laFieldsAll[m.lnCurCol,2] == "M",9,10))))))))) + laFields[m.lnColsNo,6] = m.lnActualCol &&lnCurCol + laFields[m.lnColsNo,3] = laFieldsAll[m.lnCurCol,3] + laFields[m.lnColsNo,4] = laFieldsAll[m.lnCurCol,4] + laFields[m.lnColsNo,5] = IIF(m.lnColsNo<=26,[],CHR(64+FLOOR((m.lnColsNo-1)/26)))+CHR(65+MOD(m.lnColsNo-1,26)) + ELSE + LOOP + ENDIF + lcField = laFieldsAll[m.lnCurCol,1] + IF m.laFieldsAll[m.lnCurCol,2] $ "CV" + lnLenStr = MAX(m.lnLenStr, laFieldsAll[m.lnCurCol,3]) + IF !EMPTY(m.lcUnion) + lcUnion = m.lcUnion + " UNION" + ENDIF + lcUnion = m.lcUnion + " SELECT DISTINCT CAST(RTRIM(" + m.lcField + ") AS V("+TRANSFORM(m.laFieldsAll[m.lnCurCol,3])+")) FROM " + m.cCur + " WHERE !ISNULL(" + m.lcField + ")" + SELECT COUNT(*) as no FROM (m.cCur) WHERE ISNULL(&lcField) INTO CURSOR (m.cTotal) + lnTotal = m.lnTotal + RECCOUNT(m.cCur) - &cTotal..no + ENDIF + IF m.laFieldsAll[m.lnCurCol,2] == "D" + IF !EMPTY(m.lcUnion) + lcUnion = m.lcUnion + " UNION" + ENDIF + lcUnion = m.lcUnion + " SELECT DISTINCT DTOC(" + m.lcField + ") FROM " + m.cCur + " WHERE " + m.lcField + " < m.ldDat02 " + SELECT COUNT(*) as no FROM (m.cCur) WHERE &lcField < m.ldDat02 INTO CURSOR (m.cTotal) + lnTotal = m.lnTotal + &cTotal..no + ENDIF + IF m.laFieldsAll[m.lnCurCol,2] == "T" + IF !EMPTY(m.lcUnion) + lcUnion = m.lcUnion + " UNION" + ENDIF + lcUnion = m.lcUnion + " SELECT DISTINCT TTOC(" + m.lcField + ") FROM " + m.cCur + " WHERE " + m.lcField + " < m.ltDat02 " + SELECT COUNT(*) as no FROM (m.cCur) WHERE &lcField < m.ltDat02 INTO CURSOR (m.cTotal) + lnTotal = m.lnTotal + &cTotal..no + ENDIF + IF m.laFieldsAll[m.lnCurCol,2] == "M" + lnColChars = m.lnColChars +1 + llMemos = .T. + ENDIF +NEXT +lnLenIdx = MIN(m.lnMaxIndexLen, m.lnLenStr) +lnTotal = m.lnTotal + m.lnColsNo + +SELECT (m.cCur) +COUNT TO m.lnRowsNo +lnTotal = m.lnTotal + m.lnRowsNo * m.lnColChars +lnRowsNo=m.lnRowsNo+IIF(m.llHead,1,0) + +FOR lni = 1 TO m.lnFFields + FOR lnCurCol = 1 TO m.lnColsNo + IF m.laFields[m.lnCurCol,1] == m.laFFields[m.lni] + FOR lnj = 1 TO ALEN(laFields,2) + lcTmp = m.laFields[m.lnCurCol,m.lnj] + laFields[m.lnCurCol,m.lnj] = m.laFields[m.lni,m.lnj] + laFields[m.lni,m.lnj] = m.lcTmp + NEXT + EXIT + ENDIF + NEXT +NEXT + +FOR lnCurCol = 1 TO m.lnColsNo + laFields[m.lnCurCol,5] = IIF(m.lnCurCol<=26,[],CHR(64+FLOOR((m.lnCurCol-1)/26)))+CHR(65+MOD(m.lnCurCol-1,26)) +NEXT + + +SELECT (m.cCur) +COUNT TO m.lnRowsNo +lnTotal = m.lnTotal + m.lnRowsNo * m.lnColChars +lnRowsNo=m.lnRowsNo+IIF(m.llHead,1,0) + +cStrings = SYS(2015) +cMax = SYS(2015) +CREATE CURSOR (m.cStrings) &lcCodePage (ii I AUTOINC NEXTVALUE 0,cStr V(m.lnLenStr),cM M) +IF m.llMemoAsComment and m.llMemos + INSERT INTO (m.cStrings) (cStr) VALUES ("Memo") +ENDIF + +IF !EMPTY(m.lcUnion) + EXECSCRIPT("LPARAMETERS ldDat02,ltDat02"+CHR(13)+"INSERT INTO " + m.cStrings + " (cStr)" + m.lcUnion,m.ldDat02,m.ltDat02) +ENDIF + +IF m.lnLenStr > 0 + IF m.lnLenIdx >= m.lnLenStr + INDEX on cStr TAG cStr + ELSE + lcLenIdx = LTRIM(STR(m.lnLenIdx)) + INDEX on LEFT(cStr,&lcLenIdx) TAG cStr + ENDIF +ENDIF +IF m.llMemos + lcLenStr = LTRIM(STR(m.lnLenIdx)) && courtesy of Tobias B + INDEX on LEFT(cM,&lcLenStr) TAG cM +ENDIF +SET ORDER TO cStr + +lcCurr = Getcurr(m.lcStrBad) && courtesy of Martina Jindrov + +lcOldPath = SYS(5)+SYS(2003) +lcMyPath='' +IF !EMPTY(JUSTPATH(m.lcFileName)) + lcMyPath=ADDBS(JUSTPATH(m.lcFileName)) + SET DEFAULT TO (m.lcMyPath) +ELSE + lcMyPath = ADDBS(JUSTPATH(FULLPATH(m.lcFileName))) +ENDIF + +lcDir=gen_dirs(m.llMemoAsComment and m.llMemos) +gen_Content_Types(m.lcDir,m.llMemoAsComment and m.llMemos) +gen_rels(ADDBS(m.lcDir+[_rels])) +gen_app(ADDBS(m.lcDir+[docProps])) +gen_core(ADDBS(m.lcDir+[docProps])) +gen_workbook(ADDBS(ADDBS(m.lcDir+[xl])+[_rels]),m.llMemoAsComment and m.llMemos) +gen_styles(ADDBS(m.lcDir+[xl]),m.lcCurr,m.llMemoAsComment and m.llMemos) +gen_workbook2(ADDBS(m.lcDir+[xl])) +IF m.llMemoAsComment and m.llMemos + gen_workbook3(ADDBS(ADDBS(ADDBS(m.lcDir+[xl])+[worksheets])+[_rels])) +ENDIF + +* Begin sheet1 +lnFHSh = FCREATE(ADDBS(ADDBS(m.lcDir+[xl])+[worksheets])+"sheet1.xml") +IF m.lnFHSh < 0 + MESSAGEBOX(ERRMESS2 + ' sheet1.xml',16,ERRMESS1) + DO cleanup WITH m.lcDir,m.llMemoAsComment AND m.llMemos,m.llToClose,m.cCur,m.cTotal,m.cMax,m.cStrings,m.lcCurrAlias,m.lnFHSh,m.lnFHStr,m.lnFHCo,m.lnFHDr,m.lcOldPath + RETURN +ENDIF +FWRITE(m.lnFHSh,[]+CHR(10)) +FWRITE(m.lnFHSh,[ ]) +FWRITE(m.lnFHSh,[]) +*FWRITE(m.lnFHSh,[]) +FWRITE(m.lnFHSh,[]) +FWRITE(m.lnFHSh,[]) +FWRITE(m.lnFHSh,[]) + +IF m.llMemoAsComment AND m.llMemos +* Begin comments1 + lnFHCo = FCREATE(ADDBS(m.lcDir+[xl])+"comments1.xml") + IF m.lnFHCo < 0 + MESSAGEBOX(ERRMESS2 + ' comments1.xml',16,ERRMESS1) + DO cleanup WITH m.lcDir,m.llMemoAsComment AND m.llMemos,m.llToClose,m.cCur,m.cTotal,m.cMax,m.cStrings,m.lcCurrAlias,m.lnFHSh,m.lnFHStr,m.lnFHCo,m.lnFHDr,m.lcOldPath + RETURN + ENDIF + FWRITE(m.lnFHCo,[]+CHR(10)) + FWRITE(m.lnFHCo,[]) + FWRITE(m.lnFHCo,[]) + FWRITE(m.lnFHCo,[CopyToXlsx]) + FWRITE(m.lnFHCo,[]) + FWRITE(m.lnFHCo,[]) +* Begin vmlDrawing1.vml + lnFHDr = FCREATE(ADDBS(ADDBS(m.lcDir+[xl])+[drawings])+"vmlDrawing1.vml") + IF m.lnFHDr < 0 + MESSAGEBOX(ERRMESS2 + ' vmlDrawing1.vml',16,ERRMESS1) + DO cleanup WITH m.lcDir,m.llMemoAsComment AND m.llMemos,m.llToClose,m.cCur,m.cTotal,m.cMax,m.cStrings,m.lcCurrAlias,m.lnFHSh,m.lnFHStr,m.lnFHCo,m.lnFHDr,m.lcOldPath + RETURN + ENDIF + FWRITE(m.lnFHDr,[]+CHR(10)) + FWRITE(m.lnFHDr,[]) + FWRITE(m.lnFHDr,[]) + FWRITE(m.lnFHDr,[]) + FWRITE(m.lnFHDr,[]) + FWRITE(m.lnFHDr,[]) + FWRITE(m.lnFHDr,[]) + FWRITE(m.lnFHDr,[]) + FWRITE(m.lnFHDr,[]) +ENDIF + +* Begin sharedStrings +lnFHStr = FCREATE(ADDBS(m.lcDir+[xl])+"sharedStrings.xml") +IF m.lnFHStr < 0 + MESSAGEBOX(ERRMESS2 + ' sharedStrings.xml',16,ERRMESS1) + DO cleanup WITH m.lcDir,m.llMemoAsComment AND m.llMemos,m.llToClose,m.cCur,m.cTotal,m.cMax,m.cStrings,m.lcCurrAlias,m.lnFHSh,m.lnFHStr,m.lnFHCo,m.lnFHDr,m.lcOldPath + RETURN +ENDIF +FWRITE(m.lnFHStr,[]+CHR(10)) +FWRITE(m.lnFHStr,[]) + FOR lnCurCol = 1 TO m.lnColsNo + FWRITE(m.lnFHSh,[]+LTRIM(STR(m.lnII))+[]) + ELSE + FWRITE(m.lnFHStr,[]+htmspec(m.lcValue,m.lcStrBad)+[]) + INSERT INTO (m.cStrings) (cStr) VALUES (m.lcValue) + SELECT MAX(ii) as ii FROM (m.cStrings) INTO CURSOR (m.cMax) + SELECT (m.cMax) + lnII = ii + FWRITE(m.lnFHSh,[" t="s">]+LTRIM(STR(m.lnII))+[]) + ENDIF + NEXT + FWRITE(m.lnFHSh,[]+CHR(10)) +ENDIF + +lcSetDec = SET("Decimals") +SET DECIMALS TO 13 +IF m.llMemoAsComment AND m.llMemos + lnCurComm = 0 +ENDIF +SELECT (m.cCur) +DO CASE +CASE m.llMemos AND m.lnLenIdx < m.lnLenStr + SCAN + lnCurRow = m.lnCurRow + 1 + lcCurRow = LTRIM(STR(m.lnCurRow)) + FWRITE(m.lnFHSh,[]) + SCATTER MEMO TO lala + FOR lnCurCol = 1 TO m.lnColsNo + SET ORDER TO cStr IN (m.cStrings) + lcValue = lala[m.laFields[m.lnCurCol,6]] + IF ISNULL(m.lcValue) + LOOP + ENDIF + lnType = m.laFields[m.lnCurCol,2] + lnDec = m.laFields[m.lnCurCol,4] + FWRITE(m.lnFHSh,[]) && Empty cell + ELSE + SELECT (m.cStrings) + SET KEY TO LEFT(m.lcValue,m.lnLenIdx) + SCAN + IF cStr == m.lcValue + EXIT + ENDIF + ENDSCAN + SET KEY TO + FWRITE(m.lnFHSh,[" t="s">]+LTRIM(STR(II))+[]) + ENDIF + SELECT (m.cCur) + ELSE + IF m.lnType == 2 + FWRITE(m.lnFHSh,[">]+LTRIM(STR(m.lcValue,m.laFields[m.lnCurCol,3],m.lnDec))+[]) + ELSE + IF m.lnType == 3 + FWRITE(m.lnFHSh,[">]+LTRIM(STR(m.lcValue))+[]) + ELSE + IF m.lnType == 4 + IF EMPTY(m.lcValue) + FWRITE(m.lnFHSh,[">]) && Empty cell + ELSE + IF m.lcValue >= m.ldDat01 + FWRITE(m.lnFHSh,[" s="1">]+LTRIM(STR(m.lcValue - m.ldDat11))+[]) + ELSE + IF BETWEEN(m.lcValue,m.ldDat02,m.ldDat03) + FWRITE(m.lnFHSh,[" s="1">]+LTRIM(STR(m.lcValue - m.ldDat12))+[]) + ELSE + lcValue = DTOC(m.lcValue) + SELECT (m.cStrings) + SET KEY TO LEFT(m.lcValue,m.lnLenIdx) + SCAN + IF cStr == m.lcValue + EXIT + ENDIF + ENDSCAN + SET KEY TO + FWRITE(m.lnFHSh,[" t="s">]+LTRIM(STR(II))+[]) + SELECT (m.cCur) + ENDIF + ENDIF + ENDIF + ELSE + IF m.lnType == 5 + IF EMPTY(m.lcValue) + FWRITE(m.lnFHSh,[">]) && Empty cell + ELSE + ltTime = m.lcValue + ldValue = TTOD(m.lcValue) + lnTime = (m.ltTime-DATETIME(YEAR(m.ltTime),MONTH(m.ltTime),DAY(m.ltTime),0,0,0))/(86400.0) + IF m.ldValue >= m.ldDat01 + FWRITE(m.lnFHSh,[" s="2">]+LTRIM(STR(m.ldValue - m.ldDat11))+SUBSTR(TRANSFORM(m.lnTime),2,14)+[]) + ELSE + IF BETWEEN(m.ldValue,m.ldDat02,m.ldDat03) + FWRITE(m.lnFHSh,[" s="2">]+LTRIM(STR(m.ldValue - m.ldDat12))+SUBSTR(TRANSFORM(m.lnTime),2,14)+[]) + ELSE + lcValue = TTOC(m.lcValue) + SELECT (m.cStrings) + SET KEY TO LEFT(m.lcValue,m.lnLenIdx) + SCAN + IF cStr == m.lcValue + EXIT + ENDIF + ENDSCAN + SET KEY TO + FWRITE(m.lnFHSh,[" t="s">]+LTRIM(STR(II))+[]) + SELECT (m.cCur) + ENDIF + ENDIF + ENDIF + ELSE + IF m.lnType == 6 + FWRITE(m.lnFHSh,[" t="b">]+IIF(m.lcValue ,[1],[0])+[]) + ELSE + IF m.lnType == 7 + FWRITE(m.lnFHSh,[" s="4">]+LTRIM(STR(m.lcValue,21,4))+[]) + ELSE + IF m.lnType == 8 + FWRITE(m.lnFHSh,[">]+LTRIM(STR(m.lcValue,21,m.lnDec))+[]) + ELSE + IF m.lnType == 9 + lcValue = RTRIM(m.lcValue) + IF m.llMemoAsComment + lnCurComm = m.lnCurComm + 1 + IF EMPTY(m.lcValue) + FWRITE(m.lnFHSh,[" t="s">]) && Empty cell + ELSE + FWRITE(m.lnFHSh,IIF(m.llCR,[" s="3],[])+[" t="s">0]) && Type "Memo" in sheet1 + FWRITE(m.lnFHCo,[]) && comments1 + FWRITE(m.lnFHCo,[]) + FWRITE(m.lnFHCo,[]) + FWRITE(m.lnFHCo,[]) + FWRITE(m.lnFHCo,[]) + FWRITE(m.lnFHCo,[]) + FWRITE(m.lnFHCo,[]) + FWRITE(m.lnFHCo,[]) + FWRITE(m.lnFHCo,[]) + FWRITE(m.lnFHCo,[]) + FWRITE(m.lnFHCo,[] + m.lcValue + []) + FWRITE(m.lnFHCo,[]) + FWRITE(m.lnFHCo,[]) + FWRITE(m.lnFHCo,[]) + + + FWRITE(m.lnFHDr,[
'+CHR(13)+CHR(10) + RETURN thIs.wrIte(@lcOutput,llNooutput) + ENDFUNC +* + FUNCTION ContentType_Assign + LPARAMETER lcValue + thIs.coNtenttype = lcValue + thIs.coNtenttypeheader(lcValue) + RETURN lcValue + ENDFUNC +* + PROCEDURE BinaryWrite + LPARAMETER lcText + thIs.wrIte(lcText) + ENDPROC +* +ENDDEFINE +* diff --git a/COMUN/utile/web/wwresponsestring.prg b/COMUN/utile/web/wwresponsestring.prg new file mode 100644 index 0000000..81a776d --- /dev/null +++ b/COMUN/utile/web/wwresponsestring.prg @@ -0,0 +1,177 @@ +** +** wwresponsestring.fxp +** + SET PROCEDURE TO wwResponse ADDITIVE +ENDPROC +* +DEFINE CLASS wwResponseString AS wwResponse + coUtput = "" + PROTECTED cfIlename + cfIlename = "" + PROTECTED ldUmptofile + ldUmptofile = .F. + PROTECTED chTmlfilename + chTmlfilename = "" + PROTECTED ohTmlfile + ohTmlfile = .NULL. + nbUffersize = 10000 +* + FUNCTION getoutput + LPARAMETER llNoclear + LOCAL lcFile, lcOutput + IF thIs.ldUmptofile + thIs.ohTmlfile.deStroy() + thIs.ohTmlfile = .NULL. + thIs.ldUmptofile = .F. + lcOutput = fiLe2var(thIs.chTmlfilename) + ERASE (thIs.chTmlfilename) + IF llNoclear + thIs.coUtput = lcOutput + ELSE + thIs.coUtput = "" + ENDIF + RETURN lcOutput + ENDIF + IF llNoclear + RETURN thIs.coUtput + ENDIF + lcOutput = thIs.coUtput + thIs.coUtput = "" + RETURN lcOutput + ENDFUNC +* + FUNCTION getoutputnoclear + RETURN thIs.geToutput(.T.) + ENDFUNC +* + FUNCTION WRITE + LPARAMETER tcText, tlNooutput + IF tlNooutput .OR. thIs.lnOoutput + RETURN tcText + ENDIF + IF thIs.ldUmptofile + thIs.ohTmlfile.faStwrite(@tcText) + ELSE + IF LEN(thIs.coUtput) 6 + IF EMPTY(lcDelim3) + RETURN STREXTRACT(lcString,lcDelim1,lcDelim2,1,1 + IIF(llendOk,2,0) ) + ENDIF +#ENDIF + +lcDelim1=IIF(LEN(lcDelim1)=0,",",lcDelim1) +lcDelim2=IIF(LEN(lcDelim2)=0,"z!x",lcDelim2) +lcDelim3=IIF(EMPTY(lcDelim3),"z!x",lcDelim3) + +lnLocation=ATC(lcDelim1,lcString) +IF lnLocation=0 + RETURN "" +ENDIF + +lnLocation=lnlocation+len(lcDelim1) + +*** Crate a new string of remaining text +lcNewString=SUBSTR(lcString,lnLocation) + +lnEnd=ATC(lcDelim2,lcNewString) +IF lnEnd>0 + RETURN SUBSTR(lcNewString,1,lnEnd-1) +ENDIF +*!* IF lnEnd = 0 +*!* *** Empty Delimited string +*!* RETURN "" +*!* ENDIF + +lnEnd=ATC(lcDelim3,lcNewString) +IF lnEnd>0 + RETURN SUBSTR(lcNewString,1,lnEnd-1) +ENDIF + +IF llEndOk + *** Return to the end of the line + RETURN SUBSTR(lcNewString,1) +ENDIF + +RETURN "" +*EOP RetValue + +************************************************************************ +* wwUtils :: ReplaceDelimitedText +**************************************** +*** Function: Replaces text between a set of delimiters with +*** a new string leaving the delimiters intact +*** Assume: The delimited block MUST have at least 1 character +*** in it even if it is blank or a CRLF +*** Pass: lcSource - Full Source String +*** lcStart - Start delimiter +*** lcEnd - End Delimiter +*** lcReplace - Text to replace between delimiters +*** Return: Updated String +************************************************************************ +FUNCTION ReplaceText +LPARAMETERS lcSource, lcStart, lcEnd, lcReplace + +lcExtract = Extract(lcSource,lcStart,lcEnd,,.T.) + +RETURN STRTRAN(lcSource,lcStart + lcExtract + lcEnd,lcStart + lcReplace + lcEnd) +ENDFUNC + + +************************************************************************ +FUNCTION Path +****************** +*** Function: Adds or deletes items from the path string +*** Pass: pcPathName - Filename +*** pcMethod - *"ADD","DELETE" +*** Return: New Path or "" +************************************************************************ +PARAMETERS pcPath,pcMethod +LOCAL lcOldPath + +IF VARTYPE(pcMethod) # "C" + pcMethod = "ADD" +ENDIF + +IF EMPTY(pcPath) + RETURN +ENDIF + +pcPath=ADDBS(LOWER(TRIM(pcPath))) +lcOldPath=LOWER(SET("PATH")) + +IF pcMethod="ADD" + IF EMPTY(pcPath) .OR. ; + !Directory(pcPath) + RETURN "" + ENDIF + IF AT(";" + pcPath + ";" ,";" + lcOldPath + ";")>0 + RETURN "" + ENDIF + lcOldPath=lcOldPath+";"+pcPath +ELSE + IF AT(";" + pcPath + ";" ,";" + lcOldPath + ";") < 1 + RETURN "" + ENDIF + lcOldPath=STRTRAN(lcOldPath + ";" ,";" +pcPath+";",";") + lcOldPath = SUBSTR(lcOldPath,1,LEN(lcOldPath)-1) +ENDIF + +SET PATH TO &lcOldPath + +RETURN lcOldPath +*EOP PATH + + +************************************************************************ +FUNCTION DomainName +******************* +*** Modified: 04/13/96 +*** Function: Retrieves a Domain name from an URL +*** Assume: URL starts with http:// - // required! +*** Pass: lcUrl - URL to retrieve name from +*** llNoStripWWW - Don't strip www. +*** Return: Domain Name or "" +************************************************************************* +LPARAMETER lcUrl, llNoStripWWW +lcText=STRTRAN(EXTRACT(lower(lcUrl),"//","/"," "),"/","") +IF !llNoStripWWW + lcText=STRTRAN(lcText,"www.","") +ENDIF +RETURN PADR(lcText,50) + + + +************************************************************************ +FUNCTION ShowHTML +***************** +*** Function: Takes an HTML string and displays it in the default +*** browser. +*** Assume: Uses a file to store HTML temporarily. +*** For this reason there may be concurrency issues +*** unless you change the file for each use +*** Pass: lcHTML - HTML to display +*** lcFile - Temporary File to use (Optional) +*** loWebBrowser - Web Browser control ref (Optional) +************************************************************************ +LPARAMETERS lcHTML, lcFile, loWebBrowser + +lcHTML=IIF(EMPTY(lcHTML),"",lcHTML) +lcFile=IIF(EMPTY(lcFile),SYS(2023)+"\ww_HTMLView.htm",lcFile) + +File2Var(lcFile,lcHTML) + +IF TYPE("loWebBrowser") = "O" + loWebBrowser.Navigate(lcFile) +ELSE + IF TYPE("_oscreenx") = "O" + _oscreenx.Navigate(lcFile) + ENDIF +*!* IF lower(JUSTEXT(lcFile)) = "txt" +*!* MODI COMM (lcFile) IN MACDESKTOP +*!* ELSE + =GoUrl(lcFile) +*!* ENDIF +ENDIF + +RETURN +*EOP ShowHTML + +************************************************************************ +FUNCTION ShowXML +***************** +*** Function: Takes an XML string and displays it in the default +*** browser. +*** Assume: Uses a file to store HTML temporarily. +*** For this reason there may be concurrency issues +*** unless you change the file for each use +*** Pass: lcHTML - HTML to display +*** lcFile - Temporary File to use (Optional) +*** loWebBrowser - Web Browser control ref (Optional) +************************************************************************ +LPARAMETERS lcHTML, lcFile, loWebBrowser +IF EMPTY(lcFile) + lcFile=IIF(EMPTY(lcFile),SYS(2023)+"\ww_HTMLView.xml",lcFile) +ENDIF +ERASE (lcFile) +RETURN ShowHTML(lcHTML,lcFile,loWebBrowser) + +************************************************************************ +FUNCTION ShowText +***************** +*** Function: Takes an XML string and displays it in the default +*** browser. +*** Assume: Uses a file to store HTML temporarily. +*** For this reason there may be concurrency issues +*** unless you change the file for each use +*** Pass: lcHTML - HTML to display +*** lcFile - Temporary File to use (Optional) +*** loWebBrowser - Web Browser control ref (Optional) +************************************************************************ +LPARAMETERS lcHTML, lcFile, loWebBrowser +IF EMPTY(lcFile) + lcFile=IIF(EMPTY(lcFile),SYS(2023)+"\ww_HTMLView.txt",lcFile) +ENDIF + +IF VARTYPE(loWebBrowser) = "C" and loWebBrowser = "MODI" + FILE2VAR(lcFile,lcHTML) + MODIFY COMMAND (lcFile) + RETURN +ENDIF + +RETURN ShowHTML(lcHTML,lcFile,loWebBrowser) + + +************************************************************************ +FUNCTION IsWinnt +***************** +*** Pass: llReturnVersionNumber +*** Return: .t. or .f. or Version Number or -1 if not NT +************************************************************************* +LPARAMETER llReturnVersionNumber + +loAPI=CREATE("wwAPI") +lcVersion = loAPI.ReadRegistryString(HKEY_LOCAL_MACHINE,; + "SOFTWARE\Microsoft\Windows NT\CurrentVersion",; + "CurrentVersion") + +IF !llReturnVersionNumber + IF ISNULL(lcVersion) + RETURN .F. + ELSE + RETURN .T. + ENDIF +ENDIF + +IF ISNULL(lcVersion) + RETURN -1 +ENDIF + +RETURN VAL(lcVersion) +* IsWinNt + + + +************************************************************************ +FUNCTION StripHTML +******************* +*** Function: Removes HTML tags from the passed text and converts +*** it to plain text. Note formatting is totally removed! +*** Assume: only
and

are translated +*** any < or > in the HTML besides tags will break this +*** function. +*** Pass: lcText - HTML Text to strip +*** lcLTag - Left Tag value ("<") +*** lcRTag - Right Tag Value (">") +*** Return: Stripped HTML text +************************************************************************* +LPARAMETER lcHTMLText, lcLTag, lcRTag + +lcLTag=IIF(EMPTY(lcLTag),"<",lcLTag) +lcRTag=IIF(EMPTY(lcRTag),">",lcRTag) + +IF ATC(lcLTag,lcHTMLText) = 0 + RETURN lcHTMLText +ENDIF + +*** Start by breaking line breaks +lcHTMLText = STRTRAN(lcHTMLText,lcLTag + "BR" + lcRTag,CRLF) +lcHTMLText = STRTRAN(lcHTMLText,lcLTag + "P" + lcRTag,CRLF+CRLF) +lcHTMLText = STRTRAN(lcHTMLText,lcLTag + "br" + lcRTag,CRLF) +lcHTMLText = STRTRAN(lcHTMLText,lcLTag + "p" + lcRTag,CRLF+CRLF) +lcHTMLText = STRTRAN(lcHTMLText," "," ") + +lcExtract = "x" +DO WHILE !EMPTY(lcExtract) + lcExtract = Extract(lcHTMLText,lcLTag,lcRTag) + + IF EMPTY(lcExtract) + EXIT + ENDIF + lcHTMLText = STRTRAN(lcHTMLText,lcLTag+lcExtract+lcRTag,"") +ENDDO + +lcHTMLText = STRTRAN(lcHTMLText,"<","<") +lcHTMLText = STRTRAN(lcHTMLText,">",">") + +RETURN lcHTMLText + +************************************************************************ +FUNCTION HTMLColor +********************************* +*** Function: Converts a FoxPro Color to an HTML Hex color value +*** Pass: lnRGBColor - FoxPro RGB color number - RGB(255,255,255) +*** llNoOutput +*** Return: Hex HTML Color String "#FFFFFF" +************************************************************************ +LPARAMETER lnRGBColor + +lcColor=RIGHT(TRANSFORM(lnRGBColor,"@0"),6) + +*** Fox color is BBGGRR, HTML is RRGGBB + +RETURN "#" + SUBSTR(lcColor,5,2) + SUBSTR(lcColor,3,2) + LEFT(lcColor,2) +* HTMLColor + + +************************************************************************ +FUNCTION CharToBin +****************** +*** Function: Converts a DWORD value in binary string form back into +*** a numeric value +*** Pass: tcWord - Binary string value (from a structure?) +*** Return: numeric value of binary string +************************************************************************* +LPARAMETER tcWord + + LOCAL i, lnWord + + lnWord = 0 + FOR i = 1 TO LEN(tcWord) + lnWord = lnWord + (ASC(SUBSTR(tcWord, i, 1)) * (2 ^ (8 * (i - 1)))) + ENDFOR + +RETURN lnWord + + +**************************************************** +FUNCTION GoUrl +****************** +*** Author: Rick Strahl +*** (c) West Wind Technologies, 1996 +*** Contact: rstrahl@west-wind.com +*** Modified: 03/14/96 +*** Function: Starts associated Web Browser +*** and goes to the specified URL. +*** If Browser is already open it +*** reloads the page. +*** Assume: Works only on Win95 and NT 4.0 +*** Pass: tcUrl - The URL of the site or +*** HTML page to bring up +*** in the Browser +*** Return: 2 - Bad Association (invalid URL) +*** 31 - No application association +*** 29 - Failure to load application +*** 30 - Application is busy +*** +*** Values over 32 indicate success +*** and return an instance handle for +*** the application started (the browser) +**************************************************** +LPARAMETERS tcUrl, tcAction, tcDirectory + +tcUrl=IIF(type("tcUrl")="C",tcUrl,; + "http://www.west-wind.com/") + +tcAction=IIF(type("tcAction")="C",tcAction,"OPEN") + +tcDirectory=IIF(EMPTY(tcDirectory),SYS(2023),tcDirectory) + +DECLARE INTEGER ShellExecute ; + IN SHELL32.dll ; + INTEGER nWinHandle,; + STRING cOperation,; + STRING cFileName,; + STRING cParameters,; + STRING cDirectory,; + INTEGER nShowWindow + +DECLARE INTEGER FindWindow ; + IN WIN32API ; + STRING cNull,STRING cWinName + +RETURN ShellExecute(FindWindow(0,_SCREEN.caption),; + tcAction,tcUrl,; + "",tcDirectory,1) + +************************************************************************ +PROCEDURE StrTranC +****************** +*** Function: Like Strtran but case insensitive +*** Pass: lcString - Entire string +*** lcDelim1 - String to replace +*** lcDelim2 - String to replace with +*** Return: translated string +************************************************************************* +LPARAMETER lcString, lcSource, lcReplace + +#IF wwVFPVersion > 6 + RETURN STRTRAN(lcString,lcSource,lcReplace,1,-1,1) +#ELSE +LOCAL lnAt + +lnAt = 1 +lnReplaceSize = LEN(lcSource) +DO while .T. + lnAt = ATC(lcSource,lcString) + IF lnAT = 0 + RETURN lcString + ENDIF + + lcString = STUFF(lcString,lnAt,lnReplaceSize,lcReplace) +ENDDO + +RETURN lcString +#ENDIF + + +FUNCTION TimeToCStrict +LPARAMETER ltTime, llSQL + +lcCentury = SET("CENTURY") +lcDateMode = SET("DATE") +SET CENTURY ON +SET DATE TO YMD + +IF llSQL + lcDate = "'" + TTOC(ltTime) + "'" +ELSE + lcDate = "{^" + TTOC(ltTime) + "}" +ENDIF + +SET DATE TO &lcDateMode +SET CENTURY &lcCentury +RETURN lcDate + +************************************************************************ +FUNCTION DateToC +****************** +*** Function: Converts a date to string displaying empty dates as blanks +*** rather than displaying the empty date format +*** Pass: ldDate - Date to display +*** Return: Date String or "" if invalid date +************************************************************************* +LPARAMETER ldDate + +IF EMPTY(ldDate) + RETURN "" +ENDIF + +RETURN DTOC(ldDate) +* DateTOC + + + +************************************************************************ +FUNCTION TimeToC +****************** +*** Function: Converts a time to string displaying empty as blanks +*** and formatting the time string properly +*** Pass: ltTime - Date to display (Pass Time, Date or Char) +*** Return: Time String or "" if invalid date (Year is not returned) +************************************************************************* +LPARAMETER ltTime + +IF EMPTY(ltTime) + RETURN "" +ENDIF + +IF VARTYPE(ltTime) $ "DT" + lcTimestamp = TTOC(ltTime) +ELSE + lcTimeStamp = ltTime +ENDIF + +RETURN Substr(lcTimeStamp,1,5)+"/" + Substr(lcTimeStamp,9,8)+lower(Substr(lcTimeStamp,21,2)) +* DateTOC + +************************************************************************ +FUNCTION GetAppStartPath +********************************* +*** Function: Returns the FoxPro start path +*** of the *APPLICATION* +*** under all startmodes supported by VFP. +*** Returns the path of the starting EXE, +*** DLL, APP, PRG/FXP +*** Return: Path as a string with trailing "\" +************************************************************************ + +DO CASE + *** VFP 6 provides ServerName property for COM servers EXE/DLL/MTDLL + CASE INLIST(Application.StartMode,2,3,5) + lcPath = JustPath(Application.ServerName) + +*!* *** Interactive +*!* CASE (Application.StartMode) = 0 +*!* lcPath = SYS(5) + CURDIR() + + *** Active Document + CASE ATC(".APP",SYS(16,0)) > 0 + lcPath = JustPath(SYS(16,0)) + + *** Standalone EXE or VFP Development + OTHERWISE + lcPath = JustPath(SYS(16,0)) + IF ATC("PROCEDURE",lcPath) > 0 + lcPath = SUBSTR(lcPath,RAT(":",lcPath)-1) + ENDIF +ENDCASE + +RETURN AddBs(lcPath) +* EOF GetAppStartPath + + +************************************************************************ +FUNCTION ShortPath +****************** +*** Function: Converts a Long Windows filename into a short +*** 8.3 compliant path/filename +*** Pass: lcPath - Path to check +*** Return: lcShortFileName +************************************************************************* +LPARAMETER lcPath + +DECLARE INTEGER GetShortPathName IN Win32API; + STRING @lpszLongPath, STRING @lpszShortPath,; + INTEGER cchBuffer + +lcPath = lcPath +lcshortname = SPACE(260) +lnlength = LEN(lcshortname) +lnresult = GetShortPathName(@lcPath, @lcshortname, lnlength) +IF lnResult = 0 + RETURN "" +ENDIF +RETURN LEFT(lcShortName,lnResult) + + +************************************************************************ +FUNCTION DeleteFiles +******************** +*** Function: Returns the size of a file +*** Pass: lcFileName - Wildcard File Spec (d:\temp\*.pdf) +*** lnTimeout - Timeout in seconds +*** Return: the size of the file or -1 on error +************************************************************************ +PARAMETERS lcFileSpec, lnTimeout +PRIVATE lnX,lnFiles, loAPI + +lnTimeout=IIF(EMPTY(lnTimeout),300,lnTimeout) + +lnFiles = aDir(laFiles,lcFileSpec) +*loEval = CREATE([WWC_wwEval]) +FOR lnX=1 to lnFiles + ldtime = CTOT( DTOC(laFiles[lnX,3]) + " " + laFiles[lnX,4] ) + IF ldTime + lnTimeout < DateTime() + * loEval.ExecuteCommand( " ERASE (ADDBS(justpath(lcFileSpec)) + laFiles[lnX,1]) " ) + ERASE (ADDBS(justpath(lcFileSpec)) + laFiles[lnX,1]) + ENDIF +ENDFOR + +RETURN .T. +ENDFUNC + + +************************************************************************ +FUNCTION IsDir +****************** +*** Modified: 10/09/97 +*** Function: Checks to see whether a directory exists +*** Pass: lcPath - Path to check +*** Return: .T. or .F. +************************************************************************* +LPARAMETER lcPath +DIMENSION laTemp[1] +IF ADIR(laTemp,lcPath,"DH") < 1 + RETURN .F. +ENDIF +RETURN .T. + +************************************************************************ +FUNCTION FileSize +****************** +*** Function: Returns the size of a file +*** Pass: lcFileName +*** Return: the size of the file or -1 on error +************************************************************************ +LPARAMETERS lcFileName +LOCAL lh, lnSize + +lh = FOPEN(lcFileName) +IF lh = -1 + RETURN -1 +ENDIF + +lnSize = FSEEK(lh, 0, 2) + +FCLOSE(lh) + +RETURN lnSize +*EOP FileSize + + +************************************************************************ +FUNCTION Slash +****************** +*** Function: Converts slashes from DOS -> Web and vice versa +*** Pass: lcPath - Path to convert +*** lcStyle - "WEB" or "DOS" +*** Return: update path +************************************************************************ +LPARAMETER lcPath, lcStyle +lcStyle=IIF(type("lcStyle")="C",UPPER(lcStyle),"") +IF lcStyle="WEB" + lcPath=CHRTRAN(lcPath,"\","/") +ELSE + lcPath=CHRTRAN(lcPath,"/","\") +ENDIF +RETURN lcPath +*EOP LPARAMETER + + + +************************************************************************ +FUNCTION ProgLevel +****************** +*** Function: Returns the current Calling Stack level. Used to check +*** recursive Error calls in Error methods. +************************************************************************* + +FOR lnX=1 to 128 + IF EMPTY(SYS(16,lnX)) + exit + ENDIF +ENDFOR && lnX=1 to 128 + +*** -1 for lnX count - -1 for ProgLevel Call +RETURN lnX - 2 + + +************************************************************************ +FUNCTION AParseString +********************** +*** Modified: 07/03/97 +*** Function: Parses a delimited string into an array +*** Pass: laResult - Array containing the result strings (@) +*** lcString - The full string +*** lcDelimiter - The delimiter string +*** Return: Count of strings or 0 if null string is passed +************************************************************************* +LPARAMETER laResult, lcString, lcDelimiter +LOCAL lnLastPos, lnItemCount, i + +lnItemCount = OCCURS(lcDelimiter,lcString) + 1 +DIMENSION laResult[lnItemCount] + +lnLastPos=1 + +FOR i=1 to lnItemCount + IF i < lnItemCount + laResult[i] = SUBSTR(lcString,lnLastPos, ; + ATC(lcDelimiter,lcString,i) - lnLastPos ) + ELSE + laResult[i] = SUBSTR(lcString,lnLastPos) + ENDIF + lnLastPos = ATC(lcDelimiter,lcString,i) + LEN(lcDelimiter) +ENDFOR + +RETURN lnItemCount + +************************************************************************ +FUNCTION URLDecode +****************** +*** Function: URLDecodes a text string to normal text. +*** Assume: Uses wwIPStuff.dll +*** Pass: lcText - Text string to decode +*** Return: Decoded string or "" +************************************************************************ +LPARAMETERS lcText +LOCAL lnSize, lnLoc, lcHex, lcRetval + +*** Use wwIPStuff for large buffers +IF LEN(lcText) > 255 + DECLARE INTEGER URLDecode ; + IN WWIPSTUFF AS API_URLDecode ; + STRING @cText + + lnSize=API_URLDecode(@lcText) + + IF lnSize > 0 + lcText = SUBSTR(lcText,1,lnSize) + ELSE + lcText = "" + ENDIF + + RETURN lcText +ENDIF + +*** First convert + to spaces +lcText=STRTRAN(lcText,"+"," ") + +*** Handle Hex Encoded Control chars + +lcRetval = "" +DO WHILE .T. + *** Format: %0A ( CHR(10) ) + lnLoc = AT('%',lcText) + + *** No Hex chars + IF lnLoc > LEN(lcText) - 2 OR lnLoc < 1 + lcRetval = lcRetval + lcText + EXIT + ENDIF + + *** Now read the next 2 characters + *** Check for digits - at this point we must have hex pair! + lcHex=SUBSTR(lcText,lnLoc+1,2) + + *** Now concat the string plus the evaled hex code + lcRetval = lcRetval + LEFT(lcText,lnLoc-1) + ; + CHR( EVAL("0x"+lcHex) ) + + *** Trim out the input string + IF LEN(lcText) > lnLoc + 2 + lcText = SUBSTR(lcText,lnLoc+3) + ELSE + EXIT + ENDIF +ENDDO + +RETURN lcRetval +ENDFUNC +* EOF URLDecode + +************************************************************************ +FUNCTION GetURLEncodedKey +********************************* +*** Function: Retrieves a 'parameter' from the query string that +*** is encoded with standard CGI/ISAPI URL encoding. +*** Typical URL encoding looks like this: +*** +*** "User=Rick+Strahl&ID=0011&Address=400+Morton%0A%0DHood+River" +*** +*** Pass: lcVal - Form Variable to retrieve +*** Return: Value or "" +************************************************************************ +LPARAMETERS tcURLString, lcKey +LOCAL lnLoc,c2, cStr, lcURLString, lcRetval + +lcURLString=IIF(EMPTY(tcURLString),"","&"+tcURLString) +lcKey=IIF(EMPTY(lcKey)," ",lcKey) +lcKey=STRTRAN(lcKey," ","+") + +#IF wwVFPVersion > 6 + lcRetval = STREXTRACT(lcUrlString,"&"+lcKey+"=","&",1,3) +#ELSE + lcRetval=Extract(@lcUrlString,"&"+lcKey+"=","&",,.T.) +#ENDIF + +RETURN URLDecode(lcRetval) +ENDFUNC + + +******************************************************** +FUNCTION URLEncode +******************* +*** Function: Encodes a string in URL encoded format +*** for use on URL strings or when passing a +*** POST buffer to wwIPStuff::HTTPGetEx +*** Pass: tcValue - String to encode +*** Return: URLEncoded string or "" +******************************************************** +LPARAMETER tcValue +LOCAL lcResult, lcChar, lnSize, lnX + +*** Large Buffers use the wwIPStuff function +*** for quicker response +if LEN(tcValue) > 255 + lnSize=LEN(tcValue) + tcValue=PADR(tcValue,lnSize * 3) + + DECLARE INTEGER VFPURLEncode ; + IN WWIPSTUFF ; + STRING @cText,; + INTEGER cInputTextSize + + lnSize=VFPUrlEncode(@tcValue,lnSize) + + IF lnSize > 0 + RETURN SUBSTR(TRIM(tcValue),1,lnSize) + ENDIF + RETURN "" +ENDIF + +*** Do it in VFP Code +lcResult="" + +FOR lnX=1 to len(tcValue) + lcChar = SUBSTR(tcValue,lnX,1) + IF ATC(lcChar,"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789") > 0 + lcResult=lcResult + lcChar + LOOP + ENDIF + IF lcChar=" " + lcResult = lcResult + "+" + LOOP + ENDIF + *** Convert others to Hex equivalents + lcResult = lcResult + "%" + RIGHT(transform(ASC(lcChar),"@0"),2) +ENDFOR && lnX=1 to len(tcValue) + +RETURN lcResult +* EOF URLEncode + +#IF WWC_COMPATIBILITY +************************************************************************ +FUNCTION WCSCompile +******************* +*** Modified: 12/31/97 +*** Function: Compiles WCS script files +*** Assume: Requires Runtime version +*** Called by wwMaint using VisualFoxpro.Application +*** Automation object if Runtime is installed. +*** Pass: lcFileSpec - Filespec of files to compile +*** llSilent - No error display +*** Return: "" on success or Error String +************************************************************************* +LPARAMETER lcFileSpec, llSilent +lcFileSpec=IIF(type("lcFileSpec")="C",lcFileSpec,CURDIR() + "*.wcs") + +lcPath = justpath(lcFileSpec) +lcFile = justfname(lcFileSpec) + +IF EMPTY(lcPath) + lcPath = CURDIR() +ENDIF +IF EMPTY(lcFile) + lcFile = "*.WCS" +ENDIF +lcPath = ADDBS(lcPath) + +lcFileSpec = lcPath + lcFile + + +DIMENSION laFiles[1] +lnFiles = ADIR(laFiles,lcFileSpec) +IF lnFiles < 1 + RETURN "No files to compile..." +ENDIF +oScript = CREATE("wwVFPScript",laFiles[1]) +IF TYPE("oScript") <> "O" + Return "Error: Couldn't create wwVFPScriptObject" +ENDIF +oScript.lDeleteGeneratedCode = .F. && Erase WCT files + +FOR lnX = 1 to lnFiles + lcFileName = lcPath+laFiles[lnX,1] + wait window nowait "Compiling "+lcFileName + + *** WCS - Script Text WCX - Compiled WCT - Intermediate + oScript.cFileName = lcFileName + oScript.ConvertPage() + oScript.CompilePage() +ENDFOR + +wait window nowait LTRIM(STR(lnFiles))+ " Web Connection Script file(s) compiled." + +lcErrors = "" +IF !EMPTY(oScript.cCompileErrors) + File2Var(lcPath + "WCS_Script.err",oScript.cCompileErrors) + IF !llSilent + MODI COMM (lcPath + "WCS_Script.err") + ENDIF + lcErrors = File2Var(lcPath + "WCS_Script.err") +ENDIF + +RETURN lcErrors +* EOF WCSCompile +#ENDIF + + + + +* Pass lnX/YFactor by reference +FUNCTION TwipsFactor(lnXFactor, lnYFactor) +LOCAL ln_x_pixels, ln_y_pixels, ln_twips, ln_partial_x, ln_partial_y, ; + ln_hwnd, ln_hdc + +*** Calculate the factor to be used in the HitTest method... +ln_x_pixels = 88 +ln_y_pixels = 90 +ln_twips = 1440 + +DECLARE INTEGER GetActiveWindow IN win32api +DECLARE INTEGER GetActiveWindow IN win32api +DECLARE INTEGER GetDC IN win32api INTEGER iHDC +DECLARE INTEGER GetDeviceCaps IN win32api INTEGER iHDC, INTEGER iIndex + +ln_hwnd = GetActiveWindow() +ln_hdc = GetDC(ln_hwnd) + +ln_partial_x = GetDeviceCaps(ln_hdc, ln_x_pixels) +ln_partial_y = GetDeviceCaps(ln_hdc, ln_x_pixels) + +lnXFactor = ln_twips/ln_partial_x +lnYFactor = ln_twips/ln_partial_y +RETURN + + +************************************************************************ +FUNCTION InputForm +****************** +*** Function: Creates a simple Input form that returns a value +*** Assume: Consists of this function and Form Class +*** Pass: lcValue - Initial value to retrieve +*** lcMessage - The request message +*** lcCaption - Form Caption (_Screen.Caption) +*** lnFormWidth Width of the form +*** lnFieldWidth Widht of the input field +*** lcFormat Format string for the input field +*** lcCancelValue Value returned on a Cancel operation +*** Return: Value or ("" or -1) +************************************************************************ +LPARAMETER lcValue, lcMessage, lcCaption, lnFormWidth, lnFieldWidth, lcFormat,lcCancelValue +PRIVATE pcResult +LOCAL o + +IF PCOUNT() > 6 + pcCancelValue = lcCancelValue +ELSE + pcCancelValue = NULL +ENDIF + +lcValue=IIF(EMPTY(lcValue),"",lcValue) +lcMessage=IIF(EMPTY(lcMessage),"Please enter",lcMessage) +lcCaption=IIF(EMPTY(lcCaption),_SCREEN.Caption,lcCaption) +lnFormWidth=IIF(EMPTY(lnFormWidth),300,lnFormWidth) +lnFieldWidth=IIF(EMPTY(lnFieldWidth),lnFormWidth - 20,lnFieldWidth) +lcFormat=IIF(EMPTY(lcFormat),"@K",lcFormat) + + +lcType = VARTYPE(lcCancelValue) +pcResult = lcValue + +o=CREATE("frmInput") +o.Width = lnFormWidth +o.nFieldWidth = lnFieldWidth +o.Caption = lcCaption +o.cMessage = lcMessage +o.cFormat = lcFormat + +IF lcFormat = "PASSWORD" + o.cFormat = "@K" + o.txtInput.PasswordChar = "*" +ENDIF + + +o.Show() + +IF TYPE("pcResult")="C" + lcValue = TRIM(pcResult) +ELSE + lcValue = pcResult +ENDIF +RETURN lcValue + + +************************************************** +*-- Form: frminput +*-- ParentClass: form +*-- BaseClass: form +DEFINE CLASS frminput AS form + nFieldWidth = 250 + cMessage = "Please enter:" + cFormat = "" + + Top = 0 + Left = 0 + Height = 90 + Width = 300 + ControlBox = .F. + Name = "frmInput" + WindowType = 1 + AutoCenter = .t. + Showwindow = 1 + BorderStyle = 2 + MinButton = .f. + ShowWindow = 1 + MaxButton = .f. + + ADD OBJECT lblMessage AS label WITH ; + AutoSize = .T., ; + Caption = "Message Text:", ; + Height = 17, ; + Left = 7, ; + Top = 11, ; + Width = 81, ; + Name = "lblMessage",; + Font = "Tahoma" ,; + FontSize = 8 + + ADD OBJECT txtinput AS textbox WITH ; + ControlSource = "pcResult", ; + Height = 22, ; + Left = 5, ; + Top = 28, ; + Width = 373, ; + Name = "txtInput",; + Font = "Tahoma" ,; + Default = .T.,; + FontSize = 8 + ADD OBJECT cmdOk AS commandbutton WITH ; + Top = 55, ; + Left = THISFORM.width - 150, ; + Height = 25, ; + Width = 70, ; + Caption = "OK", ; + Default = .T., ; + Fontname="Tahoma",; + Fontsize = 8,; + Cancel = .F.,; + Name = "cmdOK" + + ADD OBJECT cmdCancel AS commandbutton WITH ; + Top = 55, ; + Left = THISFORM.Width - 75, ; + Height = 25, ; + Width = 70, ; + Caption = "\ 0 + THIS.txtInput.Format = THIS.cFormat + ELSE + THIS.txtInput.InputMask = THIS.cFormat + ENDIF + ENDIF + ENDPROC + PROCEDURE cmdOk.Click + RELEASE THISFORM + ENDPROC + PROCEDURE cmdCancel.Click + LOCAL lcType + + IF ISNULL(pcCancelValue) + lcType = TYPE("pcResult") + DO CASE + CASE lcType $ "CM" + pcResult = "" + CASE lcType $ "NIBY" + pcResult = -99999999 + CASE lcType $ "DT" + pcResult = {} + CASE lcType = "L" + pcResult = .f. + ENDCASE + ELSE + pcResult = pcCancelValue + ENDIF + RELEASE THISFORM + ENDPROC +ENDDEFINE +* +*-- EndDefine: frminput +************************************************** + + +************************************************** +FUNCTION IsCOMObject +********************* +*** Function: Checks to see if a COM object +*** or ActiveX control exists +*** Assume: Uses wwAPI +*** Pass: lcProgId - Prog Id of the Class +*** lcClassId - (Optional) If passed in +*** by reference gets ClassId +*** lcClassDescript - (Optional) by ref +*** Return: .T. or .F. +***************************************************** +LPARAMETER lcProgId,lcClassId, lcClassDescript + +IF EMPTY(lcProgId) + RETURN .F. +ENDIF + +loAPI = CREATE("wwAPI") + +*** Retrieve ClassId and Server Name +lcClassId = ; + loAPI.ReadRegistryString(HKEY_CLASSES_ROOT,; + lcProgId + "\CLSID",; + "") +IF ISNULL(lcClassId) + lcClassId = "" + lcClassDescription = "" + RETURN .F. +ENDIF + +lcClassDescript = ; + loAPI.ReadRegistryString(HKEY_CLASSES_ROOT,; + lcProgId,"") + +IF ISNULL(lcClassDescript) + lcClassDescript = "" +ENDIF + +RETURN .T. +* +FUNCTION CopyObject + LPARAMETERS loinput + LOCAL loobject, lafields[1], lnx, lcfield, lctype, llclass, lncount, z, lnlength + IF TYPE("loInput.Class") = "C" + loobject = CREATEOBJECT(loinput.CLASS) + ELSE + loobject = CREATEOBJECT("EMPTY") + ENDIF + lncount = AMEMBERS(lafields, loinput) + FOR lnx = 1 TO lncount + lcfield = LOWER(lafields(lnx)) + IF AT("," + lcfield + ",", "'" + ",activecontrol,classlibrary,baseclass,comment,controls,objects,controlcount," + "class,name,parent,parentalias,parentclass,helpcontextid,whatsthishelpid," + "width,height,top,left,tag,picture,onetomany,childalias,childorder,relationalexpr,timestamp_column,") > 0 + LOOP + ENDIF + lctype = TYPE("loInput." + lcfield) + DO CASE + CASE TYPE('ALEN(loInput.' + lcfield + ')') = "N" + IF TYPE("loObject." + lcfield) = "U" + *!_err=0x1A0A_!(loobject, lcfield + "[1]") + ENDIF + lnlength = ALEN(loinput.&lcfield) + DIMENSION loobject.&lcfield[lnLength] + FOR z = 1 TO lnlength + IF TYPE("loInput." + lcfield + "[z]") = "O" + loobject.&lcfield[z] = CopyObject(EVAL( "loInput." + lcfield + "[z]")) + ELSE + loobject.&lcfield[z] = EVAL("loInput." + lcfield) + ENDIF + ENDFOR + CASE lctype = "O" + IF TYPE("loObject." + lcfield) = "U" + *!_err=0x1A0A_!(loobject, lcfield) + ENDIF + loobject.&lcfield = CopyObject(EVAL("loInput."+lcfield)) + OTHERWISE + IF TYPE("loObject." + lcfield) = "U" + *!_err=0x1A0A_!(loobject, lcfield) + ENDIF + loobject.&lcfield = EVAL("loInput." + lcfield) + ENDCASE + ENDFOR + RETURN loobject +ENDFUNC +* +PROCEDURE CopyObjectProperties + LPARAMETERS loinput, loobject, lnobjectstructureobject + IF (EMPTY(lnobjectstructureobject)) + lnobjectstructureobject = 1 + ENDIF + IF lnobjectstructureobject = 1 + lncount = AMEMBERS(lafields, loinput) + ELSE + lncount = AMEMBERS(lafields, loobject) + ENDIF + FOR lnx = 1 TO lncount + lcfield = LOWER(lafields(lnx)) + IF AT("," + lcfield + ",", "'" + ",activecontrol,classlibrary,baseclass,comment,controls,objects,controlcount," + "class,name,parent,parentalias,parentclass,helpcontextid,whatsthishelpid," + "width,height,top,left,tag,picture,onetomany,childalias,childorder,relationalexpr,timestamp_column,") > 0 + LOOP + ENDIF + lctype = TYPE("loInput." + lcfield) + IF lctype = "O" .OR. lctype = "U" .OR. TYPE('ALEN(loInput.' + lcfield + ')') = "N" + LOOP + ENDIF + IF lnobjectstructureobject = 1 + IF TYPE("loObject." + lcfield) = "U" + LOOP + ENDIF + ELSE + IF TYPE("loInput." + lcfield) = "U" + LOOP + ENDIF + ENDIF + *_**BA=?? 730 + loobject.&lcfield = EVAL("loInput." + lcfield) + *!_err=0xBB_! 738 + *!_err=0xBE_! + DO CASE + CASE TYPE('ALEN(loInput.' + lcfield + ')') = "N" + CASE lctype = "O" + OTHERWISE + ENDCASE + ENDFOR +ENDPROC + +FUNCTION CacheFile + LPARAMETER lcFilename, lnRefreshseconds + LOCAL lcOutput, lnHandle + lcAlias = ALIAS() + IF USED("wwFileCache") + SELECT wwFilecache + ELSE + CREATE CURSOR wwFileCache (fiLename C (120), tiMeread T, coNtent M) + ENDIF + LOCATE FOR fiLename=LOWER(lcFilename) + IF FOUND() + IF lnRefreshseconds>0 .AND. wwFilecache.tiMeread dcom.txt" + &lcCMD + lcResult = FILETOSTR("DCOM.TXT") + ERASE DCOM.TXT + IF .NOT. EMPTY(lcResult) .AND. ATC("ERROR:", lcResult)>0 + MESSAGEBOX(lcProgid+CHR(13)+"Account: "+lcUsername+CHR(13)+ ; + CHR(13)+lcResult, 48, "DCOM Permissions") + RETURN .F. + ENDIF + ELSE + IF .NOT. loApi.wrIteregistrystring(-2147483646, ; + "SOFTWARE\Classes\CLSID\"+lcClassid,"AppId",lcClassid,.T.) + WAIT WINDOW NOWAIT "Unable to write AppID value..." + RETURN + ENDIF + IF .NOT. loApi.wrIteregistrystring(-2147483648,"AppID\"+lcClassid, ; + CHR(0),CHR(0),.T.) + WAIT WINDOW NOWAIT "Unable to write AppID key..." + RETURN + ENDIF + loApi.wrIteregistrystring(-2147483648,"AppID\"+lcClassid,"", ; + lcServername,.T.) + loApi.wrIteregistrystring(-2147483648,"AppID\"+lcClassid,"RunAs", ; + lcRunas,.T.) + ENDIF + WAIT WINDOW NOWAIT "DCOM security context set to: "+lcRunas + RETURN +ENDFUNC +* +FUNCTION DCOMLaunchPermissions + LPARAMETER lcProgid, lcUsername, lcErrormsg + IF .NOT. EMPTY(lcProgid) + lcClassid = "" + llResult = isComobject(lcProgid,@lcClassid) + IF EMPTY(lcClassid) + WAIT WINDOW "Invalid Prog ID" + RETURN .F. + ENDIF + ELSE + lcClassid = "" + ENDIF + lcPath = FULLPATH("dcompermissions.exe") + lcPath = shOrtpath(lcPath) + IF EMPTY(lcClassid) + lcCmd = "RUN "+lcPath+" -da "+lcClassid+" set "+lcUsername+ ; + " permit > dcom.txt" + _CLIPTEXT = lcCmd + ELSE + lcCmd = "RUN "+lcPath+" -aa "+lcClassid+" set "+lcUsername+ ; + " permit > dcom.txt" + _CLIPTEXT = lcCmd + ENDIF + &lcCMD + lcResult = FILETOSTR("DCOM.TXT") + ERASE DCOM.TXT + IF .NOT. EMPTY(lcResult) .AND. ATC("ERROR:", lcResult)>0 + MESSAGEBOX(lcProgid+CHR(13)+"Account: "+lcUsername+CHR(13)+CHR(13)+ ; + lcResult, 48, "DCOM Permissions") + RETURN .F. + ENDIF + IF EMPTY(lcClassid) + lcCmd = "RUN "+lcPath+" -dl "+lcClassid+" set "+lcUsername+ ; + " permit > dcom.txt" + _CLIPTEXT = lcCmd + ELSE + lcCmd = "RUN "+lcPath+" -al "+lcClassid+" set "+lcUsername+ ; + " permit > dcom.txt" + _CLIPTEXT = lcCmd + ENDIF + &lcCMD + lcResult = FILETOSTR("DCOM.TXT") + ERASE DCOM.TXT + IF .NOT. EMPTY(lcResult) .AND. ATC("ERROR:", lcResult)>0 + MESSAGEBOX(lcProgid+CHR(13)+"Account: "+lcUsername+CHR(13)+CHR(13)+ ; + lcResult, 48, "DCOM Permissions") + RETURN .F. + ENDIF + RETURN +ENDFUNC +* +FUNCTION FixPreTags + LPARAMETER lcHtml, lnColwidth + LOCAL lcPre, lcFixed, lcPrecount, lnAt1, lnAt2 + lnPrecount = 1 + DO WHILE .T. + lnAt1 = ATC("", lcHtml, lnPrecount) + IF lnAt1=0 .OR. lnAt2=0 + EXIT + ENDIF + lcPre = SUBSTR(lcHtml, lnAt1, lnAt2-lnAt1) + lcFixed = STRTRAN(lcPre, "

", CHR(13)+CHR(10)+CHR(13)+CHR(10)) + lcFixed = STRTRAN(lcFixed, "
", CHR(13)+CHR(10)) + lcHtml = STRTRAN(lcHtml, lcPre, lcFixed) + lnPrecount = lnPrecount+1 + ENDDO + RETURN lcHtml +ENDFUNC +* +FUNCTION FixHTMLForDisplay + LPARAMETER lcHtml + lcHTML = STRTRAN(lcHTML,"<","<") + lcHTML = STRTRAN(lcHTML,">",">") + lcHTML = STRTRAN(lcHTML,["],""") + RETURN lcHtml +ENDFUNC +* +FUNCTION DisplayMemo + LPARAMETER lcHtml + lcHtml = STRTRAN(lcHtml, CHR(13)+CHR(10), CHR(13)) + lcHtml = STRTRAN(lcHtml, CHR(10), CHR(13)) + lcHtml = STRTRAN(lcHtml, CHR(13)+CHR(13), "

") + RETURN STRTRAN(lcHtml, CHR(13), "
") +ENDFUNC +* +FUNCTION GetSystemPassword + LPARAMETER llUsername + loApi = NEWOBJECT("wwAPI", "wwapi.prg") + IF .NOT. llUsername + lcPass = loApi.reAdregistrystring("HKLM", ; + "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", ; + "DefaultPassword") + ELSE + lcPass = loApi.reAdregistrystring("HKLM", ; + "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", ; + "DefaultUserName") + ENDIF + IF ISNULL(lcPass) + RETURN "" + ENDIF + RETURN lcPass +ENDFUNC +* +FUNCTION GetPassword + LPARAMETER lcMessage + IF EMPTY(lcMessage) + lcMessage = "Please enter your password" + ENDIF + RETURN inPutform(SPACE(20),lcMessage,"Password Entry", , ,"PASSWORD") +ENDFUNC +* +FUNCTION IsDotNet + LPARAMETER lcFrameworkpath, lcVersion + LOCAL loApi, as, wwApi + lcVersion = "" + lcFrameworkpath = "" + loApi = CREATEOBJECT("wwAPI") + lcWindir = loApi.geTsystemdir(.T.) + lcVersion = loApi.reAdregistrystring(-2147483646, ; + "Software\Microsoft\ASP.Net","RootVer") + IF ISNULL(lcFrameworkpath) + RETURN .F. + ENDIF + lcFrameworkpath = ADDBS(loApi.reAdregistrystring(-2147483646, ; + "Software\Microsoft\ASP.Net\"+lcVersion,"Path")) + RETURN .T. +ENDFUNC +* +FUNCTION MergeText + LPARAMETER tcString, tcDelimiter, tcDelimiter2, llNoaspsyntax + LOCAL __Loeval + __Loeval = CREATEOBJECT('wwEval') + RETURN __Loeval.meRgetext(@tcString,tcDelimiter,tcDelimiter2,llNoaspsyntax) +ENDFUNC +* +FUNCTION MimeDateTime + LPARAMETER lvDatetime + LOCAL lcDays, lcMonths, lnCount, lcMonth, ltTime, lnOffset, lnOff, lnDiff + lcMonths = "JanFebMarAprMayJunJulAugSepOctNovDec" + IF VARTYPE(lvDatetime)="C" + DIMENSION laParts[1] + lnCount = apArsestring(@laParts,lvDatetime," ") + IF lnCount<5 + RETURN {} + ENDIF + lcMonth = TRANSFORM((ATC(laParts(3), lcMonths)+2)/3) + ltTime = CTOT(lcMonth+"/"+laParts(2)+"/"+laParts(4)+" "+laParts(5)) + IF lnCount<6 + RETURN ltTime + ENDIF + lnOffset = geTtimezone()/60 + lnOff = VAL(laParts(6))/100 + lnDiff = (lnOffset+lnOff)*3600 + RETURN ltTime-lnDiff + ELSE + IF EMPTY(lvDatetime) + lvDatetime = DATETIME() + ENDIF + lnDay = DOW(lvDatetime) + IF lnDay=0 + RETURN "" + ENDIF + lcDays = "SunMonTueWedThuFriSat" + lcMime = SUBSTR(lcDays, ((lnDay-1)*3)+1, 3)+", "+ ; + TRANSFORM(DAY(lvDatetime))+" " + lcMime = lcMime+SUBSTR(lcMonths, ((MONTH(lvDatetime)-1)*3)+1, 3)+ ; + " "+TRANSFORM(YEAR(lvDatetime))+" "+PADL(HOUR(lvDatetime), ; + 2, "0")+":"+PADL(MINUTE(lvDatetime), 2, "0")+":"+ ; + PADL(SEC(lvDatetime), 2, "0") + lnOffset = geTtimezone()/60 + RETURN lcMime+IIF(lnOffset>0, " -", " +")+ ; + PADL(TRANSFORM(ABS(lnOffset)), 2, "0")+"00" + ENDIF +ENDFUNC +* +FUNCTION PropertyDump + LPARAMETER loObject + LOCAL lnX, lnCount, lcOutput + lnCount = AMEMBERS(laFields, loObject) + lcOutput = "" + FOR lnX = 1 TO lnCount + lcType = TYPE("loObject."+laFields(lnX)) + IF ATC(lcType, "UO")=0 + lvValue = EVALUATE("loObject."+laFields(lnX)) + IF lcType="C" .AND. LEN(lvValue)>80 + lvValue = LEFT(lvValue, 80) + ENDIF + lcOutput = lcOutput+CHR(13)+CHR(10)+LOWER(laFields(lnX))+" = "+ ; + ALLTRIM(TRANSFORM(lvValue, "")) + ELSE + lcOutput = lcOutput+CHR(13)+CHR(10)+LOWER(laFields(lnX))+" = "+ ; + IIF(TYPE("loObject."+laFields(lnX))="O", "Object", ; + "NULL") + ENDIF + ENDFOR + RETURN lcOutput +ENDFUNC +* + +FUNCTION GetMimeType + LPARAMETERS tcExtension + + LOCAL lcExtension + lcExtension = IIF(TYPE('tcExtension') = 'C', LOWER(m.tcExtension), 'txt') + lcType = "text/plain" + + DO CASE + CASE m.lcExtension = "txt" + lcType = "text/plain" + CASE m.lcExtension = "pdf" + lcType = "application/pdf" + CASE INLIST(m.lcExtension, "png", "jpg", "jpeg", "bmp") + lcType = "image/" + m.lcExtension + ENDCASE + RETURN m.lcType +ENDFUNC diff --git a/COMUN/utile/web/wwwebgraphs.prg b/COMUN/utile/web/wwwebgraphs.prg new file mode 100644 index 0000000..d6ca34c --- /dev/null +++ b/COMUN/utile/web/wwwebgraphs.prg @@ -0,0 +1,366 @@ +** +** wwwebgraphs.fxp +** + SET PROCEDURE TO wwWebGraphs ADDITIVE + SET PROCEDURE TO wwUtils ADDITIVE + SET PROCEDURE TO wwAPI ADDITIVE + RETURN + EXTERNAL ARRAY laGraphs, laLabels, laLegend +ENDPROC +* +DEFINE CLASS wwWebGraphs AS Relation + ngRaphtype = 0 + ccAption = "" + ooWc = .NULL. + coWcprogid = "OWC10.ChartSpace" + cpHysicalpath = "" + clOgicalpath = "" + niMagetimeout = 300 + ciMagename = "" + niMagewidth = 750 + niMageheight = 480 + cbAckcolor = "lightyellow" + csEries1color = "darkred" + csEries2color = "darkblue" + csEries3color = "darkgreen" + csEries4color = "orange" + csEries5color = "purple" + csEries6color = "pink" + nMaxColors = 6 + nsHowlegend = 1 +* + FUNCTION Init + LPARAMETER llNoexistcheck + + IF .NOT. llNoexistcheck .AND. .NOT. isComobject(thIs.coWcprogid) + RETURN .F. + ENDIF + thIs.ooWc = CREATEOBJECT(thIs.coWcprogid) + IF VARTYPE(thIs.ooWc)<>"O" + RETURN .F. + ENDIF + RETURN + ENDFUNC +* + FUNCTION GraphSetup + LOCAL loGraph + loGraph = thIs.ooWc.chArts.adD() + loGraph.tyPe = thIs.ngRaphtype + IF thIs.nsHowlegend>0 + loGraph.haSlegend = .T. + ENDIF + loGraph.plOtarea.inTerior.coLor = thIs.cbAckcolor + IF .NOT. EMPTY(thIs.ccAption) + thIs.ooWc.haSchartspacetitle = .T. + thIs.ooWc.chArtspacetitle.caPtion = thIs.ccAption + thIs.ooWc.chArtspacetitle.foNt.boLd = .T. + ENDIF + RETURN loGraph + ENDFUNC +* + PROCEDURE ShowGraphFromCursor + LOCAL x, y, loGraph, lnFields, lnRows, lnSeries, lcElement, lcArray, lnx, ocOnst + lnFields = AFIELDS(laFields, ALIAS()) + lnRows = RECCOUNT() + lnSeries = lnFields-1 + DIMENSION laLabels[lnRows] + FOR x = 1 TO lnSeries + lcArray = "DIMENSION laValues"+TRANSFORM(x)+"["+ ; + TRANSFORM(lnRows)+"]" + &lcArray + ENDFOR + x = 0 + SCAN + x = x+1 + laLabels[x] = TRIM(EVALUATE(FIELD(2))) + FOR y = 1 TO lnSeries + lcElement = "laValues"+TRANSFORM(y)+"["+TRANSFORM(x)+"]" + &lcElement = EVALUATE(FIELD(y+1)) + ENDFOR + ENDSCAN + ocOnst = thIs.ooWc.coNstants + loGraph = thIs.grAphsetup() + lnx = 0 + FOR x = 1 TO lnSeries + loGraph.seRiescollection.adD() + loSeries = loGraph.seRiescollection(x-1) + lnx = lnx + 1 + IF .NOT. INLIST(thIs.ngRaphtype, 18, 19, 58, 59) + + IF lnx > this.nMaxColors && 6 culori maxim + lnx = 1 + ENDIF + + loSeries.inTerior.coLor = EVALUATE("THIS.cSeries"+ ; + TRANSFORM(lnx)+"Color") + ELSE + IF x>1 + EXIT + ENDIF + ENDIF + lcArray = "@laValues"+TRANSFORM(x) + loSeries.caPtion = PROPER(STRTRAN(TRIM(laFields(x+1,1)), "_", " ")) + loSeries.seTdata(ocOnst.chDimcategories,ocOnst.chDataliteral, ; + @laLabels) + loSeries.SetData(oConst.chDimValues, oConst.chDataLiteral, &lcArray) + ENDFOR + ENDPROC +* + PROCEDURE ShowGraphFromArray + LPARAMETER laLabels, laSeries1, lcSeries1, laSeries2, lcSeries2, ; + laSeries3, lcSeries3, laSeries4, lcSeries4, laSeries5, ; + lcSeries5, laSeries6, lcSeries6 + LOCAL x, loGraph, lnSeries, lcArray, lcLabel + lnSeries = (PCOUNT()-1)/2 + loGraph = thIs.grAphsetup() + ocOnst = thIs.ooWc.coNstants + FOR x = 1 TO lnSeries + loGraph.seRiescollection.adD() + IF .NOT. INLIST(thIs.ngRaphtype, 18, 19) + loGraph.seRiescollection(x-1).inTerior.coLor = ; + EVALUATE("THIS.cSeries"+ ; + TRANSFORM(x)+"Color") + ENDIF + lcArray = "@laSeries"+TRANSFORM(x) + lcLabel = EVALUATE("lcSeries"+TRANSFORM(x)) + loGraph.seRiescollection(x-1).caPtion = lcLabel + loGraph.seRiescollection(x-1).seTdata(ocOnst.chDimcategories, ; + ocOnst.chDataliteral,@laLabels) + loGraph.SeriesCollection(x-1).SetData(oConst.chDimValues, oConst.chDataLiteral, &lcArray) + ENDFOR + ENDPROC +* + PROCEDURE ShowGraphFromMultiDimensionalArray + LPARAMETER laGraphs, laLegend + LOCAL loGraph, lnSeries, lnRows, llLegend, x, y + lnSeries = ALEN(laGraphs, 2)-1 + lnRows = ALEN(laGraphs, 1) + loGraph = thIs.grAphsetup() + IF TYPE('ALEN(laLegend)')="N" + llLegend = .T. + ELSE + llLegend = .F. + loGraph.haSlegend = .F. + ENDIF + ocOnst = thIs.ooWc.coNstants + DIMENSION laLabels[lnRows] + FOR y = 1 TO lnRows + laLabels[y] = laGraphs(y,1) + ENDFOR + FOR x = 2 TO lnSeries+1 + loGraph.seRiescollection.adD() + IF .NOT. INLIST(thIs.ngRaphtype, 18, 19) + loGraph.seRiescollection(x-2).inTerior.coLor = ; + EVALUATE("THIS.cSeries"+ ; + TRANSFORM(x)+"Color") + ENDIF + DIMENSION laArray[lnRows] + FOR y = 1 TO lnRows + laArray[y] = laGraphs(y,x) + ENDFOR + IF llLegend + loGraph.seRiescollection(x-2).caPtion = laLegend(x-1) + ENDIF + loGraph.seRiescollection(x-2).seTdata(ocOnst.chDimcategories, ; + ocOnst.chDataliteral,@laLabels) + loGraph.seRiescollection(x-2).seTdata(ocOnst.chDimvalues, ; + ocOnst.chDataliteral,@laArray) + ENDFOR + ENDPROC +* + FUNCTION GetOutput + thIs.seTgraphicsoptions(thIs.ooWc.chArts(0)) + deLetefiles(thIs.cpHysicalpath+"IMG*.gif",thIs.niMagetimeout) + thIs.ciMagename = "IMG"+SYS(2015)+TRANSFORM(apPlication.prOcessid)+".gif" + thIs.ooWc.exPortpicture(thIs.cpHysicalpath+thIs.ciMagename,"gif", ; + thIs.niMagewidth,thIs.niMageheight) + RETURN '' + ENDFUNC +* + PROCEDURE Clear + thIs.ooWc.clEar() + ENDPROC +* + FUNCTION ShowGraphInForm + LPARAMETER lcFormcaption + LOCAL loForm, as, foRm + loForm = CREATEOBJECT("GraphForm") + loForm.adDobject("oPicture","image") + loForm.heIght = thIs.niMageheight + loForm.wiDth = thIs.niMagewidth + loForm.auTocenter = .T. + IF .NOT. EMPTY(lcFormcaption) + loForm.caPtion = lcFormcaption + ENDIF + loForm.opIcture.leFt = 0 + loForm.opIcture.toP = 0 + loForm.opIcture.heIght = thIs.niMageheight + loForm.opIcture.wiDth = thIs.niMagewidth + loForm.opIcture.piCture = thIs.cpHysicalpath+thIs.ciMagename + loForm.opIcture.viSible = .T. + loForm.shOw() + RETURN loForm + ENDFUNC +* + PROCEDURE GetGraphTypes + LPARAMETER lcCursorname + IF EMPTY(lcCursorname) + lcCursorname = "wwWebGraphTypes" + ENDIF + CREATE CURSOR (lcCursorname) (naMe C (80), id I) + TEXT TO lcVar +#define chChartTypeColumnClustered 0 +#define chChartTypeColumnStacked 1 +#define chChartTypeColumnStacked100 2 +#define chChartTypeBarClustered 3 +#define chChartTypeBarStacked 4 +#define chChartTypeBarStacked100 5 +#define chChartTypeLine 6 +#define chChartTypeLineStacked 8 +#define chChartTypeLineStacked100 10 +#define chChartTypeLineMarkers 7 +#define chChartTypeLineStackedMarkers 9 +#define chChartTypeLineStacked100Markers 11 +#define chChartTypeSmoothLine 12 +#define chChartTypeSmoothLineStacked 14 +#define chChartTypeSmoothLineStacked100 16 +#define chChartTypeSmoothLineMarkers 13 +#define chChartTypeSmoothLineStackedMarkers 15 +#define chChartTypeSmoothLineStacked100Markers 17 +#define chChartTypePie 18 +#define chChartTypePieExploded 19 +#define chChartTypePieStacked 20 +#define chChartTypeScatterMarkers 21 +#define chChartTypeScatterLine 25 +#define chChartTypeScatterLineMarkers 24 +#define chChartTypeScatterLineFilled 26 +#define chChartTypeScatterSmoothLine 23 +#define chChartTypeScatterSmoothLineMarkers 22 +#define chChartTypeBubble 27 +#define chChartTypeBubbleLine 28 +#define chChartTypeArea 29 +#define chChartTypeAreaStacked 30 +#define chChartTypeAreaStacked100 31 +#define chChartTypeDoughnut 32 +#define chChartTypeDoughnutExploded 33 +#define chChartTypeRadarLine 34 +#define chChartTypeRadarLineMarkers 35 +#define chChartTypeRadarLineFilled 36 +#define chChartTypeRadarSmoothLine 37 +#define chChartTypeRadarSmoothLineMarkers 38 +#define chChartTypeStockHLC 39 +#define chChartTypeStockOHLC 40 +#define chChartTypePolarMarkers 41 +#define chChartTypePolarLine 42 +#define chChartTypePolarLineMarkers 43 +#define chChartTypePolarSmoothLine 44 +#define chChartTypePolarSmoothLineMarkers 45 +#define chChartTypeColumn3D 46 +#define chChartTypeColumnClustered3D 47 +#define chChartTypeColumnStacked3D 48 +#define chChartTypeColumnStacked1003D 49 +#define chChartTypeBar3D 50 +#define chChartTypeBarClustered3D 51 +#define chChartTypeBarStacked3D 52 +#define chChartTypeBarStacked1003D 53 +#define chChartTypeLine3D 54 +#define chChartTypeLineOverlapped3D 55 +#define chChartTypeLineStacked3D 56 +#define chChartTypeLineStacked1003D 57 +#define chChartTypePie3D 58 +#define chChartTypePieExploded3D 59 +#define chChartTypeArea3D 60 +#define chChartTypeAreaOverlapped3D 61 +#define chChartTypeAreaStacked3D 62 +#define chChartTypeAreaStacked1003D 63 + ENDTEXT + lnLines = ALINES(laLines, lcVar) + FOR x = 1 TO lnLines + lcValue = exTract(laLines(x)," ",CHR(13), ,.T.) + INSERT INTO (lcCursorname) (naMe, id) VALUES ; + (exTract(laLines(x),"#define "," "), VAL(lcValue)) + ENDFOR + REPLACE naMe WITH STRTRAN(naMe, "chChartType", "") ALL + ENDPROC +* + PROCEDURE SetGraphicsOptions + LPARAMETER loChart + RETURN + ENDPROC +* + PROCEDURE nGraphType_Assign + LPARAMETER lvGraphtype + IF VARTYPE(lvGraphtype)="N" + thIs.ngRaphtype = lvGraphtype + RETURN + ENDIF + IF VARTYPE(lvGraphtype)="C" + lvGraphtype = UPPER(lvGraphtype) + DO CASE + CASE lvGraphtype="BAR3D" + thIs.ngRaphtype = 50 + CASE lvGraphtype="BAR" + thIs.ngRaphtype = 0 + CASE lvGraphtype="PIE3D" + thIs.ngRaphtype = 58 + CASE lvGraphtype="PIE" + thIs.ngRaphtype = 18 + CASE lvGraphtype="PIEEXPLODED3D" + thIs.ngRaphtype = 59 + CASE lvGraphtype="PIEEXPLODED" + thIs.ngRaphtype = 19 + CASE lvGraphtype="COLUMN3D" + thIs.ngRaphtype = 51 + CASE lvGraphtype="COLUMN" + thIs.ngRaphtype = 3 + CASE lvGraphtype="LINE3D" + thIs.ngRaphtype = 54 + CASE lvGraphtype="LINEPOINTS" + thIs.ngRaphtype = 7 + CASE lvGraphtype="LINE" + thIs.ngRaphtype = 6 + ENDCASE + ENDIF + ENDPROC +* +ENDDEFINE +* +DEFINE CLASS GraphForm AS Form + shOwwindow = 2 + caPtion = "Graph Results" + maXbutton = .F. + boRderstyle = 2 +ENDDEFINE +* +FUNCTION IsCOMObject + LPARAMETER lcProgid, lcClassid, lcClassdescript + IF EMPTY(lcProgid) + RETURN .F. + ENDIF + loApi = CREATEOBJECT("wwAPI") + lcClassid = loApi.reAdregistrystring(-2147483648,lcProgid+"\CLSID","") + IF ISNULL(lcClassid) + lcClassid = "" + lcClassdescription = "" + RETURN .F. + ENDIF + lcClassdescript = loApi.reAdregistrystring(-2147483648,lcProgid,"") + IF ISNULL(lcClassdescript) + lcClassdescript = "" + ENDIF + RETURN .T. +ENDFUNC + +FUNCTION DeleteFiles + PARAMETER lcFilespec, lnTimeout + PRIVATE lnX, lnFiles, loApi + lnTimeout = IIF(EMPTY(lnTimeout), 300, lnTimeout) + lnFiles = ADIR(laFiles, lcFilespec) + FOR lnX = 1 TO lnFiles + ldTime = CTOT(DTOC(laFiles(lnX,3))+" "+laFiles(lnX,4)) + IF ldTime+lnTimeout',lcDenumire,3) +lnPos2 = Rat('<',lcDenumire,2) +lcDenumire = Substr(lcDenumire, lnPos1 + 1, lnPos2 - lnPos1 - 1) +*MessageBox(lcDenumire) +*!* MESSAGEBOX(lnStatus ) +*!* NU EXISTA AGENT ECONOMIC CU ACEST COD + STRTOFILE(lcResponse,"c:\test.htm") + OPEN_DEFAULT_APP("c:\test.htm") + +DEFINE CLASS myXMLHTTP AS CUSTOM + + oHTTP = NULL + + cHost = "" + nError = 0 + cError = "" + + PROCEDURE INIT + LPARAMETERS tcHost + IF PCOUNT() = 1 AND TYPE('tcHost') = 'C' AND !EMPTY(tcHost) + THIS.cHost = tcHost + ENDIF +*!* THIS.oHTTP = CREATEOBJECT("Microsoft.XMLHTTP") + THIS.oHTTP = CREATEOBJECT("MSXML2.ServerXMLHTTP") + + ENDPROC && init + + FUNCTION CHECK_INTERNET + + DECLARE INTEGER InternetCheckConnection IN wininet ; + STRING lpszUrlSTRING, INTEGER dwFlags, INTEGER dwReserved + + myHost = THIS.cHost + + RETURN InternetCheckConnection(myHost,FLAG_ICC_FORCE_CONNECTION,0) + ENDFUNC && CHECK_INTERNET + + FUNCTION post + LPARAMETERS tcValues, tcResponse + + LOCAL lcValues, loHTTP, lcResponse, lnResponse + LOCAL llAsincron + llAsincron = .T. + lnResponse = 1 + tcResponse = "" + lcResponse = "" + IF .F. + * NU MAI VERIFIC CONEXIUNEA LA INTERNET - DACA ROUTERUL NU ARE INTERNET STA 21 SECUNDE SA VERIFICE :( + * POSTEZ EROAREA ASINCRON - DACA ARE INTERNET O TRIMITE + lnCheckInternet = THIS.CHECK_INTERNET() + IF lnCheckInternet <= 0 + RETURN + ENDIF + ENDIF + IF EMPTY(THIS.cHost) + RETURN + ENDIF + IF TYPE('this.oHTTP') = "O" + loHTTP = THIS.oHTTP + lcHost= THIS.cHost + + loHTTP.OPEN("POST", lcHost, llAsincron) + loHTTP.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded') + + lcValues = tcValues + loHTTP.SEND(lcValues) + + IF .F. + *!* DACA FOLOSESC XMLHTTP ASINCRON TREBUIE SA ASTEPT READYSTATE = 4 IN DO WHILE + lnStatus = loHTTP.STATUS + tcResponse = UPPER(loHTTP.responseText) + lnResponse = IIF('SUCCES'$tcResponse,1,-1) + ENDIF + ENDIF + + RETURN lnResponse + + ENDFUNC && post + + FUNCTION postError + LPARAMETERS tcErrorMsg, tcUserName, tcProgram, tcVersion, tcDatabaseUser + + LOCAL lcValues, lcError, lcUserName, lcProgram, lnResponse, lcVersion, lcDatabaseUser + LOCAL laVersion + DIMENSION laVersion[12] + + lcError = ALLTRIM(TRANSFORM(tcErrorMsg)) + lcUserName = ALLTRIM(TRANSFORM(tcUserName)) + lcProgram = ALLTRIM(TRANSFORM(tcProgram)) + + IF EMPTY(tcVersion) OR TYPE('tcVersion') <> 'C' + lnVersion = AGETFILEVERSION(laVersion, SYS(16,0)) + IF lnVersion >= 4 + lcVersion = laVersion[4] + ELSE + lcVersion = "" + ENDIF + ELSE + lcVersion = ALLTRIM(tcVersion) + ENDIF + + IF EMPTY(tcDatabaseUser) OR TYPE('tcDataBaseUser') <> 'C' +*!* modificare ROASTART v 2.0.29 +*!* lcDatabaseUser = IIF(TYPE('gcs') = 'C', gcS, "") + lcDatabaseUser = IIF(TYPE('gcs') = 'C', gcS, IIF(TYPE('gcHost') = 'C',gcHost, "")) +*!* modificare ROASTART v 2.0.29 ^ + ELSE + lcDatabaseUser = tcDatabaseUser + ENDIF + + lcError = THIS.urlencode(lcError) + + lcValues = "error[errormsg]=" + lcError + "&error[username]=" + lcUserName + "&error[program]=" + lcProgram + ; + "&error[version]=" + lcVersion + "&error[databaseuser]=" + lcDatabaseUser + + lnResponse = THIS.post(lcValues) + + RETURN lnResponse + + ENDFUNC && postError + + PROCEDURE ERROR + LPARAMETERS nError,cMethod,nLine + + lcErrorMsg=MESSAGE()+CHR(13)+CHR(13) + lcErrorMsg=lcErrorMsg+"Method: "+cMethod + lcCodeLineMsg=MESSAGE(1) + IF BETWEEN(nLine,1,10000) AND NOT lcCodeLineMsg="..." + lcErrorMsg=lcErrorMsg+CHR(13)+"Line: "+ALLTRIM(STR(nLine)) + IF NOT EMPTY(lcCodeLineMsg) + lcErrorMsg=lcErrorMsg+CHR(13)+CHR(13)+lcCodeLineMsg + ENDIF + ENDIF + + MESSAGEBOX(lcErrorMsg) + + ENDPROC && error + + FUNCTION urlencode + * + * from http://www.tek-tips.com/gviewthread.cfm/lev2/4/lev3/27/pid/184/qid/597112 + * also http://fox.wikis.com/wc.dll?Wiki~VFPPortListener~VFP + * I'm confused by this code. + * I believe it doesn't translate spaces correctly + * + * a proper definition is in: http://www.ietf.org/rfc/rfc2396.txt + * starting about half way down page 5 + * unreserved characters include all alphas, all digits and the following unreserved marks + * mark = "-" | "_" | "." | "!" | "~" | "*" | "'" | "(" | ")" + * + LPARAMETER pcinstr + * ' encode Percent signs + * ' Double Quotes + * ' CarriageReturn / LineFeeds + LOCAL lcout, lni + lcout = '' + FOR lni = 1 TO LEN(pcinstr) + lcch = SUBSTR(pcinstr,lni,1) + DO CASE + CASE ISALPHA(lcch) OR ISDIGIT(lcch) OR INLIST(lcch, "-" , "_" , "." , "!" , "~" , "*" , "'" , "(" , ")") + * do nothing + CASE lcch = " " + lcch = "+" + OTHERWISE + lcch = '%' + RIGHT( TRANSFORM(ASC(lcch),'@0'), 2 ) + ENDCASE + lcout = lcout + lcch + ENDFOR + RETURN lcout + ENDFUNC && UrlEncode + +ENDDEFINE diff --git a/Clase/2707oviz_devize.VCT b/Clase/2707oviz_devize.VCT new file mode 100644 index 0000000..555a4a4 Binary files /dev/null and b/Clase/2707oviz_devize.VCT differ diff --git a/Clase/2707oviz_devize.vcx b/Clase/2707oviz_devize.vcx new file mode 100644 index 0000000..e8162ec Binary files /dev/null and b/Clase/2707oviz_devize.vcx differ diff --git a/Clase/Backup/ferestrebaza0109.VCT b/Clase/Backup/ferestrebaza0109.VCT new file mode 100644 index 0000000..e02d58d Binary files /dev/null and b/Clase/Backup/ferestrebaza0109.VCT differ diff --git a/Clase/Backup/ferestrebaza0109.vcx b/Clase/Backup/ferestrebaza0109.vcx new file mode 100644 index 0000000..e08c601 Binary files /dev/null and b/Clase/Backup/ferestrebaza0109.vcx differ diff --git a/Clase/Backup/oviz_devize.VCT b/Clase/Backup/oviz_devize.VCT new file mode 100644 index 0000000..2bf90f0 Binary files /dev/null and b/Clase/Backup/oviz_devize.VCT differ diff --git a/Clase/Backup/oviz_devize.VCT.r426 b/Clase/Backup/oviz_devize.VCT.r426 new file mode 100644 index 0000000..b908883 Binary files /dev/null and b/Clase/Backup/oviz_devize.VCT.r426 differ diff --git a/Clase/Backup/oviz_devize.VCT.r704 b/Clase/Backup/oviz_devize.VCT.r704 new file mode 100644 index 0000000..5c1d6e8 Binary files /dev/null and b/Clase/Backup/oviz_devize.VCT.r704 differ diff --git a/Clase/Backup/oviz_devize.vcx b/Clase/Backup/oviz_devize.vcx new file mode 100644 index 0000000..dd15456 Binary files /dev/null and b/Clase/Backup/oviz_devize.vcx differ diff --git a/Clase/Backup/oviz_devize.vcx.r426 b/Clase/Backup/oviz_devize.vcx.r426 new file mode 100644 index 0000000..c64d4ee Binary files /dev/null and b/Clase/Backup/oviz_devize.vcx.r426 differ diff --git a/Clase/Backup/oviz_devize.vcx.r704 b/Clase/Backup/oviz_devize.vcx.r704 new file mode 100644 index 0000000..3fe0701 Binary files /dev/null and b/Clase/Backup/oviz_devize.vcx.r704 differ diff --git a/Clase/Backup/oviz_devize_1901.VCT b/Clase/Backup/oviz_devize_1901.VCT new file mode 100644 index 0000000..2e37a90 Binary files /dev/null and b/Clase/Backup/oviz_devize_1901.VCT differ diff --git a/Clase/Backup/oviz_devize_1901.vcx b/Clase/Backup/oviz_devize_1901.vcx new file mode 100644 index 0000000..0de9f6b Binary files /dev/null and b/Clase/Backup/oviz_devize_1901.vcx differ diff --git a/Clase/citeste.txt b/Clase/citeste.txt new file mode 100644 index 0000000..63eab3b --- /dev/null +++ b/Clase/citeste.txt @@ -0,0 +1 @@ +2707oviz_devize.vcx : am pus diacritice pe toate labelurile, doar ca la salvarea nu mi le retine, iar in loc de t imi pune _ in unele \ No newline at end of file diff --git a/Clase/ferestrebaza.VCT b/Clase/ferestrebaza.VCT new file mode 100644 index 0000000..e02d58d Binary files /dev/null and b/Clase/ferestrebaza.VCT differ diff --git a/Clase/ferestrebaza.vcx b/Clase/ferestrebaza.vcx new file mode 100644 index 0000000..e08c601 Binary files /dev/null and b/Clase/ferestrebaza.vcx differ diff --git a/Clase/odevize.VCT b/Clase/odevize.VCT new file mode 100644 index 0000000..fd3fb0b Binary files /dev/null and b/Clase/odevize.VCT differ diff --git a/Clase/odevize.vcx b/Clase/odevize.vcx new file mode 100644 index 0000000..bfb0358 Binary files /dev/null and b/Clase/odevize.vcx differ diff --git a/Clase/ofundal_dev.VCT b/Clase/ofundal_dev.VCT new file mode 100644 index 0000000..d6e1f03 Binary files /dev/null and b/Clase/ofundal_dev.VCT differ diff --git a/Clase/ofundal_dev.vcx b/Clase/ofundal_dev.vcx new file mode 100644 index 0000000..a45103f Binary files /dev/null and b/Clase/ofundal_dev.vcx differ diff --git a/Clase/onom_devize.VCT b/Clase/onom_devize.VCT new file mode 100644 index 0000000..45aab36 Binary files /dev/null and b/Clase/onom_devize.VCT differ diff --git a/Clase/onom_devize.vcx b/Clase/onom_devize.vcx new file mode 100644 index 0000000..8cfc941 Binary files /dev/null and b/Clase/onom_devize.vcx differ diff --git a/Clase/oviz_devize.VCT b/Clase/oviz_devize.VCT new file mode 100644 index 0000000..6a4f1a6 Binary files /dev/null and b/Clase/oviz_devize.VCT differ diff --git a/Clase/oviz_devize.vcx b/Clase/oviz_devize.vcx new file mode 100644 index 0000000..28e94d6 Binary files /dev/null and b/Clase/oviz_devize.vcx differ diff --git a/Ferestre/frm_date_comenzi.SCT b/Ferestre/frm_date_comenzi.SCT new file mode 100644 index 0000000..1fbe2a2 Binary files /dev/null and b/Ferestre/frm_date_comenzi.SCT differ diff --git a/Ferestre/frm_date_comenzi.scx b/Ferestre/frm_date_comenzi.scx new file mode 100644 index 0000000..5500527 Binary files /dev/null and b/Ferestre/frm_date_comenzi.scx differ diff --git a/Ferestre/fundal.SCT b/Ferestre/fundal.SCT new file mode 100644 index 0000000..cbc5128 Binary files /dev/null and b/Ferestre/fundal.SCT differ diff --git a/Ferestre/fundal.scx b/Ferestre/fundal.scx new file mode 100644 index 0000000..a0444cd Binary files /dev/null and b/Ferestre/fundal.scx differ diff --git a/Formulare/AUTOHAUS/20070911/sigla.jpg b/Formulare/AUTOHAUS/20070911/sigla.jpg new file mode 100644 index 0000000..e5c97e9 Binary files /dev/null and b/Formulare/AUTOHAUS/20070911/sigla.jpg differ diff --git a/Formulare/AUTOHAUS/20070911/usr_fact_cuchit.FRT b/Formulare/AUTOHAUS/20070911/usr_fact_cuchit.FRT new file mode 100644 index 0000000..19a3834 Binary files /dev/null and b/Formulare/AUTOHAUS/20070911/usr_fact_cuchit.FRT differ diff --git a/Formulare/AUTOHAUS/20070911/usr_fact_cuchit.frx b/Formulare/AUTOHAUS/20070911/usr_fact_cuchit.frx new file mode 100644 index 0000000..10ba24c Binary files /dev/null and b/Formulare/AUTOHAUS/20070911/usr_fact_cuchit.frx differ diff --git a/Formulare/AUTOHAUS/20070911/usr_fact_farachit.FRT b/Formulare/AUTOHAUS/20070911/usr_fact_farachit.FRT new file mode 100644 index 0000000..6ba0127 Binary files /dev/null and b/Formulare/AUTOHAUS/20070911/usr_fact_farachit.FRT differ diff --git a/Formulare/AUTOHAUS/20070911/usr_fact_farachit.frx b/Formulare/AUTOHAUS/20070911/usr_fact_farachit.frx new file mode 100644 index 0000000..6655c7a Binary files /dev/null and b/Formulare/AUTOHAUS/20070911/usr_fact_farachit.frx differ diff --git a/Formulare/AUTOHAUS/20070911/usr_factav_cuchit.FRT b/Formulare/AUTOHAUS/20070911/usr_factav_cuchit.FRT new file mode 100644 index 0000000..7793b93 Binary files /dev/null and b/Formulare/AUTOHAUS/20070911/usr_factav_cuchit.FRT differ diff --git a/Formulare/AUTOHAUS/20070911/usr_factav_cuchit.frx b/Formulare/AUTOHAUS/20070911/usr_factav_cuchit.frx new file mode 100644 index 0000000..21e9f8a Binary files /dev/null and b/Formulare/AUTOHAUS/20070911/usr_factav_cuchit.frx differ diff --git a/Formulare/AUTOHAUS/20070911/usr_factav_farachit.FRT b/Formulare/AUTOHAUS/20070911/usr_factav_farachit.FRT new file mode 100644 index 0000000..9f68dd5 Binary files /dev/null and b/Formulare/AUTOHAUS/20070911/usr_factav_farachit.FRT differ diff --git a/Formulare/AUTOHAUS/20070911/usr_factav_farachit.frx b/Formulare/AUTOHAUS/20070911/usr_factav_farachit.frx new file mode 100644 index 0000000..ebe1f93 Binary files /dev/null and b/Formulare/AUTOHAUS/20070911/usr_factav_farachit.frx differ diff --git a/Formulare/AUTOHAUS/20070911/usr_rap_deviz.FRT b/Formulare/AUTOHAUS/20070911/usr_rap_deviz.FRT new file mode 100644 index 0000000..8e05611 Binary files /dev/null and b/Formulare/AUTOHAUS/20070911/usr_rap_deviz.FRT differ diff --git a/Formulare/AUTOHAUS/20070911/usr_rap_deviz.frx b/Formulare/AUTOHAUS/20070911/usr_rap_deviz.frx new file mode 100644 index 0000000..b0c367b Binary files /dev/null and b/Formulare/AUTOHAUS/20070911/usr_rap_deviz.frx differ diff --git a/Formulare/AUTOHAUS/A4usr_fact_farachit.FRT b/Formulare/AUTOHAUS/A4usr_fact_farachit.FRT new file mode 100644 index 0000000..de0e13f Binary files /dev/null and b/Formulare/AUTOHAUS/A4usr_fact_farachit.FRT differ diff --git a/Formulare/AUTOHAUS/A4usr_fact_farachit.frx b/Formulare/AUTOHAUS/A4usr_fact_farachit.frx new file mode 100644 index 0000000..1075ce5 Binary files /dev/null and b/Formulare/AUTOHAUS/A4usr_fact_farachit.frx differ diff --git a/Formulare/AUTOHAUS/A4usr_factav_farachit.FRT b/Formulare/AUTOHAUS/A4usr_factav_farachit.FRT new file mode 100644 index 0000000..f08be88 Binary files /dev/null and b/Formulare/AUTOHAUS/A4usr_factav_farachit.FRT differ diff --git a/Formulare/AUTOHAUS/A4usr_factav_farachit.frx b/Formulare/AUTOHAUS/A4usr_factav_farachit.frx new file mode 100644 index 0000000..896c154 Binary files /dev/null and b/Formulare/AUTOHAUS/A4usr_factav_farachit.frx differ diff --git a/Formulare/FRUVIMED/fruvimed 20070830.tif b/Formulare/FRUVIMED/fruvimed 20070830.tif new file mode 100644 index 0000000..ca971bb Binary files /dev/null and b/Formulare/FRUVIMED/fruvimed 20070830.tif differ diff --git a/Formulare/GGMOTORS/usr__preco.FRT b/Formulare/GGMOTORS/usr__preco.FRT new file mode 100644 index 0000000..18c26fc Binary files /dev/null and b/Formulare/GGMOTORS/usr__preco.FRT differ diff --git a/Formulare/GGMOTORS/usr__preco.frx b/Formulare/GGMOTORS/usr__preco.frx new file mode 100644 index 0000000..36aeebe Binary files /dev/null and b/Formulare/GGMOTORS/usr__preco.frx differ diff --git a/Formulare/SIGMA/usr_fact_cuchit_l.FRT b/Formulare/SIGMA/usr_fact_cuchit_l.FRT new file mode 100644 index 0000000..c187ea3 Binary files /dev/null and b/Formulare/SIGMA/usr_fact_cuchit_l.FRT differ diff --git a/Formulare/SIGMA/usr_fact_cuchit_l.frx b/Formulare/SIGMA/usr_fact_cuchit_l.frx new file mode 100644 index 0000000..f8bbbbd Binary files /dev/null and b/Formulare/SIGMA/usr_fact_cuchit_l.frx differ diff --git a/Formulare/SIGMA/usr_fact_farachit_l.FRT b/Formulare/SIGMA/usr_fact_farachit_l.FRT new file mode 100644 index 0000000..f7d0f8e Binary files /dev/null and b/Formulare/SIGMA/usr_fact_farachit_l.FRT differ diff --git a/Formulare/SIGMA/usr_fact_farachit_l.frx b/Formulare/SIGMA/usr_fact_farachit_l.frx new file mode 100644 index 0000000..d026208 Binary files /dev/null and b/Formulare/SIGMA/usr_fact_farachit_l.frx differ diff --git a/Formulare/test_listare_factura/ACTACTAN.DBF b/Formulare/test_listare_factura/ACTACTAN.DBF new file mode 100644 index 0000000..4647a80 Binary files /dev/null and b/Formulare/test_listare_factura/ACTACTAN.DBF differ diff --git a/Formulare/test_listare_factura/FOXUSER.DBF b/Formulare/test_listare_factura/FOXUSER.DBF new file mode 100644 index 0000000..3bf83ce Binary files /dev/null and b/Formulare/test_listare_factura/FOXUSER.DBF differ diff --git a/Formulare/test_listare_factura/FOXUSER.FPT b/Formulare/test_listare_factura/FOXUSER.FPT new file mode 100644 index 0000000..91c2feb Binary files /dev/null and b/Formulare/test_listare_factura/FOXUSER.FPT differ diff --git a/Formulare/test_listare_factura/oproceduri_comune.prg b/Formulare/test_listare_factura/oproceduri_comune.prg new file mode 100644 index 0000000..ab9ac02 --- /dev/null +++ b/Formulare/test_listare_factura/oproceduri_comune.prg @@ -0,0 +1,2374 @@ +Define Class oexecutor As Custom + nHandle = 0 + cSql = '' + cCursor = '' + nSucces = 0 + cEroare = '' + nEroare = 0 + cTime = '' + lReconnect = .T. && cred ca trebuie setat pe .F. inainte de o serie de proceduri executate cu tranzactie manuala + lShowError = .F. + lQuitOnError = .F. + + Declare aEroare[1] + + +* PROCEDURE INIT( tnHandle, tcSql, tcCursor ) +* Date : 06/10/2004, 12:18:21 +* author : marius.mutu +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 3 +* Parameter 1: +* Parameter 2: +* Parameter 3: +* +******************************************* INCEPUT:INIT ******************************************* + Procedure Init + Lparameters tnHandle, tcSql, tcCursor + + + If Empty(tnHandle) + This.nHandle = gnHandle + Else + This.nHandle = tnHandle + Endif + + Endproc +******************************************* SFARSIT: INIT ******************************************* + + +* PROCEDURE oExecute( tcSql, tcCursor,tlProgress, tnHandle ) +* Date : 06/10/2004, 12:16:11 +* author : marius.mutu +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 3 +* Parameter 1: +* Parameter 2: +* Parameter 3: +* +******************************************* INCEPUT:oExecute ******************************************* + Procedure oExecute( tcSql, tcCursor, tlProgress, tcTitluProgress, tnHandle, tlShowError, tlQuitOnError, tlReconnect ) + Local lnHandle, lcSql, lcCursor, llProgress, lnSucces, laEroare, lcEroare, llShowError, llQuitOnError, llReconnect + + +&& tlQuitOnError : Daca face QUIT la eroare (daca vreau QUIT dau .T.) (default .F.) +&& tlShowError : Daca arata mesajul de eroare (daca vreau sa il tratez in oexecute dau .T.) (default .F.) +&& tlReconnect : Daca incearca sa se reconecteze (default .T.) + If .F. + Local This As oexecutor + Endif + This.Oreset() + + If Type('goLog')='O' + goLog.Log(tcSql,Program()) + Endif + + Local lnTip + lnTip = 0 + +*!* 29.06.2007 +*!* marius.mutu +*!* nu puneti upper(lcSql) - exista unele expresii in oracle care sunt case sensitive + If Empty(tcSql) + lcSql = This.cSql + Else + lcSql = tcSql + Endif + + If Empty(tcCursor) + lcCursor = This.cCursor + Else + lcCursor = tcCursor + Endif + + If Empty(tnHandle) + lnHandle = This.nHandle + Else + lnHandle = tnHandle + Endif + +&& DACA AM TRANZACTIE MANUALA NU FAC RECONNECT + If SQLGetprop(lnHandle,"Transactions") = 2 && TRANZACTIE MANUALA + This.lReconnect = .F. + Else + This.lReconnect = .T. + Endif + + Do Case + Case Pcount() < 6 + llQuitOnError = This.lQuitOnError + llReconnect = This.lReconnect + llShowError = This.lShowError + Case Pcount() < 7 + llQuitOnError = This.lQuitOnError + llReconnect = This.lReconnect + Otherwise + llShowError = tlShowError + llReconnect = tlReconnect + llQuitOnError = tlQuitOnError + Endcase + + lnSucces = This.nSucces + + llProgress = tlProgress && IIF(tlProgress or 'SELECT'$lcSql,.T.,.F.) + lcTitluProgress = Iif(Empty(tcTitluProgress),"",Alltrim(tcTitluProgress)) + + Declare laEroare[1] + lcEroare = '' + + + lnTip = Iif('ROLLBACK'$lcSql Or 'COMMIT'$lcSql,1,0) && daca ROLLBACK SAU COMMIT TIP = 1, ALTFEL 0 + + Do Case + Case lnTip = 0 +*!* If llProgress +*!* Local loTherm, lcTask, lnPercent, lnSeconds +*!* If !Empty(lcTitluProgress) +*!* lcTask = lcTitluProgress +*!* Else +*!* lcTask = "Se executa ... " +*!* Endif +*!* loTherm = Newobject("_thermometer","_therm","",lcTask) + +*!* lnPercent = 15 + + +*!* loTherm.Show() +*!* Endif + +*!* Do While .T. + +*!* If llProgress +*!* lnPercent = lnPercent + 5 +*!* If lnPercent > 90 +*!* lnPercent = 15 +*!* Endif + +*!* loTherm.Update(lnPercent, lcTask+" "+Trans(lnPercent)) +*!* Endif + + +*!* lnSucces = SQLExec(lnHandle,lcSql,lcCursor) +*!* If lnSucces = 0 +*!* * +*!* Else +*!* Exit +*!* Endif +*!* Enddo + +*!* If llProgress +*!* loTherm.Complete() +*!* Release loTherm +*!* Endif + + If llProgress + Local loTherm, lcTask, lnPercent, lnSeconds + If !Empty(lcTitluProgress) + lcTask = lcTitluProgress + Else + lcTask = "Se executa ... " + Endif + loTherm = Newobject("_thermometer","_therm","",lcTask) + + lnPercent = 15 + + + loTherm.Show() + Endif + + lnSucces = -1 + Do While .T. + Do While .T. + + If llProgress + lnPercent = lnPercent + 5 + If lnPercent > 90 + lnPercent = 15 + Endif + + loTherm.Update(lnPercent, lcTask+" "+Trans(lnPercent)) + Endif + + + lnSucces = SQLExec(lnHandle,lcSql,lcCursor) + If lnSucces = 0 +* + Else + Exit + Endif + Enddo + + If lnSucces > 0 + If Used(lcCursor) + lcTempCursor = Sys(2015) + Use Dbf(lcCursor) In 0 Again Shared Alias (lcTempCursor) + Use In (lcCursor) + Use Dbf(lcTempCursor) In 0 Again Alias (lcCursor) + Use In (lcTempCursor) + Endif + Exit + Endif + + If lnSucces < 0 + Release laEroare + Declare laEroare(1) + lnEroare1 = 0 + lnEroare2 = 0 + lcTextEroare = [] + lnHandle = 0 + llEroare = .F. + + Aerror(laEroare) + If Alen(laEroare) > 1 + lnEroare1 = laEroare[1] + lnEroare2 = laEroare[5] + lcTextEroare = laEroare[3] + lnHandle = laEroare[6] + llEroare = .T. + + Endif + + + Do Case + Case lnEroare1 <>1526 && eroare <> ODBC + lcTextEroare = Program() + Chr(13) + Alltrim(Str(lnEroare1)) + ' ' + laEroare[2] + If Type('goLog')='O' + goLog.Log(lcTextEroare,Program()) + Endif + If llShowError + AMESSAGEBOX(lcTextEroare,0,"Eroare") + Endif + If llQuitOnError + Quit + Retry + Else + Exit + Endif + + Case lnEroare1 = 1526 && eroare ODBC + Do Case + Case llReconnect And Inlist(lnEroare2, 12152, 3113, 3114, 12560, 4068, 28, 12) && 12512 = TNS: UNABLE TO SEND BREAK MESSAGE; 3114 = NOT CONNECTED TO ORACLE; 12560 = PROTOCOL ADAPTER ERROR + If Type('goLog')='O' + lcLog = laEroare(3) + Chr(13) + goLog.Log(lcLog,Program()) + Endif + + Do While .T. + lnRaspuns = AMESSAGEBOX('Eroare de conectare.' + Chr(13) + lcTextEroare + Chr(13) + 'Doriti reconectare?',4+32,'Eroare') && retry = 4; cancel = 2 + If lnRaspuns = 6 + + lnHandle = goConn.Connect(goConn.cHost, goConn.cUser, goConn.cPassword, llReconnect) + +*!* gnHandle = SQLConnect(gcHost,gcUserName,gcPassword) + + If lnHandle < 0 + Declare laEroare2(1) + Aerror(laEroare2) + lcTextEroare = laEroare2(3) + If Type('goLog')='O' + goLog.Log(lcTextEroare,Program()) + Endif + + Release laEroare2 + Loop + Else +*!* goExecutor.nHandle = gnHandle + Exit + Endif + Else + Quit + Retry + Endif && lnRaspuns = 6 + Enddo && .T. + Loop && daca am iesit cu un handle valid intru din nou in loop si fac cursorfill + Otherwise + lcTextEroare = Program() + Chr(13) + Alltrim(Str(lnEroare1)) + ' ' + Chr(13) + Transform(laEroare[2]) + Chr(13) + Transform(laEroare[3]) + Chr(13) + lcSql + If llShowError + lnRaspuns = AMESSAGEBOX('Eroare necunoscuta' + Chr(13) + lcTextEroare,0,'Eroare') && ok = 0 + Endif + If Type('goLog')='O' + goLog.Log(lcTextEroare,Program()) + Endif + If llQuitOnError + Quit + Retry + Else + Exit + Endif + Endcase && INLIST(lnEroare2,12152,3114) + Endcase + Endif && lnSucces < 0 + + Enddo && .T. + + If llProgress + loTherm.Complete() + Release loTherm + Endif + + Case lnTip = 1 + If 'ROLLBACK'$lcSql + lnSucces = Sqlrollback(lnHandle) + Else + lnSucces = Sqlcommit(lnHandle) + Endif + Endcase + + If lnSucces < 0 + Aerror(laEroare) + + If laEroare[1] <> 1526 + lcEroare = laEroare[2] + Else + lcEroare = Alltrim(Transform(laEroare[1])) + Chr(13) + Alltrim(Transform(laEroare[2])) + Chr(13) + Alltrim(Transform(laEroare[3])) + Chr(13) + lcSql + Endif + + If Type('goMyXMLHTTP') = 'O' + lcLunaHTTP = Iif(Type('gnLuna') = 'N', Transform(gnLuna) + "/","") + Iif(Type('GNAN') = 'N', Transform(gnAn),"") + lcErrorHTTP = Sys(0) + ":" + Iif(Type('GCS')='C'," " + GCS,"") + ": " + lcLunaHTTP + Chr(13) +Chr(10) + lcEroare + ; + CHR(13) + Chr(10) + Chr(13) + Chr(10) + GETCALLSTACK() + + lcUserName = gcUserNameApp + lcProgram = Juststem(Sys(16,0)) + goMyXMLHTTP.postError(lcErrorHTTP, lcUserName, lcProgram) + Endif + + If llShowError + AMESSAGEBOX(lcEroare,0,"Eroare") + Endif + If llQuitOnError + Quit + Retry + Endif + + Endif + + + + This.aEroare = laEroare + This.nSucces = lnSucces + This.cEroare = lcEroare + This.nEroare = Iif(Alen(laEroare)>=5,laEroare[5],0) + + Return lnSucces + + Endproc +******************************************* SFARSIT: oExecute ******************************************* + +*!* salveaza rezultatul unei functii in variabila data ca referinta +*!* intoarce SUCCES = (1,-1) +*!* lnSucces = oFunction2Value("MyFunction(MyParam1, MyParam2)", @pnReturnValue) + Function oFunction2Value + Lparameters tcFunction, tuRetValue + + lcSql = "select " + tcFunction + " as retvalue from dual" + lcCursor = Sys(2015) + lcField = lcCursor + ".retvalue" + + lnSucces = This.oExecute(lcSql, lcCursor) + + If lnSucces > 0 + tuRetValue = Evaluate(lcField) + If Used(lcCursor) + Use In (lcCursor) + Endif + Endif + + Return lnSucces + + Endfunc && oFunction2Value +******************************************* SFARSIT: oFunction2Value ******************************************* + +*!* salveaza rezultatul unui select in variabila data ca referinta +*!* daca se intorc mai multe randuri - eroare +*!* intoarce SUCCES = (1,-1) +*!* lnSucces = oSelect2Value("Select sum(cantitate) from tabel where conditie", @pnReturnValue) + Function oSelect2Value + Lparameters tcSql, tuRetValue + + Local lcSelect, lcSql, lcCursor, lcField, lnSucces + + lcSelect = Select() + lcSql = tcSql + lcCursor = Sys(2015) + + lnSucces = This.oExecute(lcSql, lcCursor) + + If lnSucces > 0 + If Reccount(lcCursor) > 1 + This.nSucces = -1 + This.cEroare = 'Au rezultat mai multe valori. Se astepta o singura valoare.' + lnSucces = -1 + Else + lcField = lcCursor + '.' + Field(1) + tuRetValue = Evaluate(lcField) + Endif + If Used(lcCursor) + Use In (lcCursor) + Endif + Endif + + Select (lcSelect) + + Return lnSucces + + Endfunc &&oSelect2Value +******************************************* SFARSIT: oFunction2Value ******************************************* + +******************************************* INCEPUT: oPrelucrareEroare ******************************************* +&& Prelucreaza mesajul de eroare : daca este intre ORA-20000 si ORA-20999 atunci afiseaza doar textul erorii + Function oPrelucrareEroare + Local lcTextEroare + lcTextEroare = This.cEroare + + If Like('*ORA-20???:*',lcTextEroare) + lnPozi=At("ORA-20",lcTextEroare)+11 + lnPozf=At("ORA",lcTextEroare,2) + lcTextEroare=Substr(lcTextEroare,lnPozi,lnPozf-lnPozi) +*!* ELSE +*!* lnPozf=At("ORA-",lcTextEroare,3) +*!* lcTextEroare=Substr(lcTextEroare,1,lnPozf-1)+[...] + Endif + Return lcTextEroare + Endfunc && oPrelucrareEroare +******************************************* SFARSIT: oPrelucrareEroare ******************************************* +* PROCEDURE oReset( ) +* Date : 06/10/2004, 12:21:06 +* author : marius.mutu +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* INCEPUT:oReset ******************************************* + Procedure Oreset( ) + With This + .aEroare = .F. + .nSucces = 0 + .cSql = '' + .cCursor = '' + Endwith + Endproc +******************************************* SFARSIT: oReset ******************************************* + +Enddefine && oExecutor + + + + +*** oConn =========================================================================================== +Define Class oConn As Custom + + cHost = '' + cUser = '' + cPassword = '' + nHandle = 0 + cEroare = '' + Declare aEroare[7] + lShowError = .F. + lReconnect = .F. && Daca llReconnect = .T. se apeleaza InitSesiune din oInit_Optiuni.prg + + +*** Connect =========================================================================================== + Procedure Connect + Lparameters tcHost, tcUser, tcPassword, tlReconnect + +*!* tlReconnect = .T. daca se apeleaza connect la reconectare (atunci se apeleaza si InitSesiune()) + Local lnSucces, laEroare, lcString, lcHost, lcUser, lcPassword, lcSql + + If Pcount() < 3 Or Type('tcHost') # 'C' Or Type('tcUser') # 'C' Or Type('tcPassword') # 'C' +* + Else + This.cHost = tcHost + This.cUser = tcUser + This.cPassword = tcPassword + Endif + + lcHost = This.cHost + lcUser = This.cUser + lcPassword = This.cPassword + + If Pcount() < 4 Or Type('tlReconnect') # 'L' + llReconnect = This.lReconnect + Else + llReconnect = tlReconnect + Endif + + SQLSetprop(0,"DispLogin",3) + lcString="dsn="+Alltrim(lcHost)+";Uid="+Alltrim(lcUser)+";Pwd="+Alltrim(lcPassword)+";" + + This.nHandle = Sqlstringconnect(lcString) + + If Type('gnHandle') = 'N' + gnHandle = This.nHandle + Endif + + If Type('goExecutor') = 'O' + goExecutor.nHandle = This.nHandle + Endif + + If This.nHandle > 0 + lnSucces = 1 + +*** SETARI SESIUNE DUPA CONECTARE + This.postConn() + + If llReconnect + lnSucces = InitSesiune() && IN oInit_Optiuni.prg + Endif + Else + lnSucces = -1 + This.ProcessError() + Endif + + Return This.nHandle + + Endproc && Connect +*** END Connect =========================================================================================== + +*** Disconnect =========================================================================================== + Procedure Disconnect + Lparameters tnHandle + + Local lnSucces, lnHandle + + lnHandle = Iif(Empty(tnHandle) Or Type('tnHandle') # 'N', 0 , tnHandle) + + lnSucces = SQLDisconnect(lnHandle) + + If lnSucces < 0 + This.ProcessError() + Endif + + Return lnSucces + + Endproc && +*** END Disconnect =========================================================================================== + +*** ProcessError =========================================================================================== + Procedure ProcessError + + Local laEroare, lnEroare1, lnEroare2, lcTextEroare, lcEroareConectare + lcTextEroare = '' + lcEroareConectare = '' + Dimension laEroare[1] + + Aerror(laEroare) + If Alen(laEroare) > 1 + lnEroare1 = laEroare[1] + lnEroare2 = laEroare[5] + lcTextEroare = laEroare[3] + lnHandle = laEroare[6] + llEroare = .T. + + lcTextEroare = 'Conectarea nu a reusit ' + Chr(13) + Chr(10) + Alltrim(Transform(laEroare[1])) + ' ' + Chr(13) + Transform(laEroare[2]) + Chr(13) + Transform(laEroare[3]) + This.cEroare = lcTextEroare + This.aEroare = laEroare + + goLog.Log(lcTextEroare,Program()) + + If laEroare[1]=1526 And Like('*ORA-20???:*',laEroare[2]) + lnPozi = At("ORA-20",laEroare[2])+11 + lnPozf = At("ORA",laEroare[2],3) + lcEroareConectare = Substr(laEroare[2],lnPozi,lnPozf-lnPozi) + Else + lcEroareConectare = lcTextEroare + Endif + If Empty(lcEroareConectare) + lcEroareConectare="Conectarea nu a reusit!" + Endif + + AMESSAGEBOX(lcEroareConectare,0+48,"Atentie") + Endif + + Return lcTextEroare + + Endproc && ProcessError +*** END ProcessError =========================================================================================== + +*** postConn =========================================================================================== + Procedure postConn +*** PUNCT ZECIMAL + lcSql=[ALTER SESSION SET NLS_NUMERIC_CHARACTERS = ".,"] + lnSucces = goExecutor.oExecute(lcSql) + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare,0+16,'Eroare') + Endif + + Endproc && postConn +*** END postConn =========================================================================================== + + +Enddefine && oConn +*** END oConn =========================================================================================== + + + +* PROCEDURE Get_Ora( tnTip ) +* Date : 16/11/2004, 08:58:45 +* author : marius.mutu +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 1 +* Parameter 1: +* +******************************************* INCEPUT:Get_Ora ******************************************* +Procedure Get_Ora( tnTip ) +* tnTip: 1 sau nimic = DATETIME ; 2 = CHARACTER + +Local lcRetVal, lnSucces +Local lcCursor, lcSql, lcSelect +lcSelect = Select() + +If Pcount() = 0 Or Type('tnTip') <> 'N' + lnTip = 1 +Else + lnTip = tnTip +Endif + +&&preluare ora de pe oracle server: +Store -1 To lnSucces +lcSql = [select to_char(SYSdate,'dd/mm/yyyy hh24:mi:ss') as dataora from dual] +lcCursor = [dataora_cursor] +lnSucces = goExecutor.oExecute(lcSql, lcCursor) +If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare, 0+16, ,'Eroare') + lcRetVal = Ttoc(Datetime()) +Else + Select dataora_cursor + lcRetVal = dataora_cursor.dataora + Use In dataora_cursor +Endif + +If lnTip = 1 + lcRetVal = Ctot(lcRetVal) +Endif + +If !Empty(lcSelect) + Select (lcSelect) +Endif + +Return lcRetVal +Endproc +******************************************* SFARSIT: Get_Ora ******************************************* +*________________________________________________________ + +Function ULTIMAZI +Parameters tcAn, tcLuna + +Local lcAn, lcLuna + +If Empty(tcAn) + lcAn = pcAn +Else + lcAn = Alltrim(tcAn) +Endif + +If Empty(tcLuna) + lcLuna = pcNl +Else + lcLuna = Alltrim(tcLuna) +Endif + +If Val(lcAn) = Year(Date()) And Val(lcLuna) = Month(Date()) + Return Date() +Endif + +lcData = '01/'+ lcLuna + '/' + lcAn +ldData = Gomonth(Ctod(lcData),1) - 1 + +Return ldData + +**************************************************************** + +Function get_nivel_upf(tnid_util,tnid_prog,tnid_firma) +Private pnid_util,pnid_prog,pnid_firma +pnid_util = tnid_util +pnid_prog= tnid_prog +pnid_firma = tnid_firma +Local lnnivel +lcSql = [select ud.id_nivel,n.nivel from contafin_oracle.util_drept ud ] + ; + [join contafin_oracle.nivel n on ud.id_nivel = n.id_nivel ] + ; + [where ud.id_util = ?pnid_util and ud.id_prog = ?pnid_prog and ] +; + [ud.id_firma = ?pnid_firma] +lcCursor = [crsUtilNivel] +lnSucces = goExecutor.oExecute(lcSql,lcCursor) +If lnSucces < 0 + lcTitlu = [Eroare] + lctip = [Avertizare] + lcImagine = [exclam.ico] + lcMesaj = goExecutor.cEroare + ofrm_eroare = Createobject('frm_mesaj',lcTitlu,lcImagine,lctip,lcMesaj) + ofrm_eroare.Show(1) + Release ofrm_eroare + Return +Endif +lnnivel = &lcCursor..nivel +Return lnnivel +Endfunc &&get_nivel_upf + +******************************************************************************************************* + +Function enumefis +Parameters tc_numefis +Private pn_len,pl_return,pc_numefis,pc_char +pn_len=0 +pc_char='' +pl_return=.T. +pc_numefis=Alltrim(tc_numefis) +pn_len=Len(pc_numefis) +If pn_len=0 + pl_return=.F. +Endif +Do While pn_len>0 + pc_char=Substr(pc_numefis,pn_len,1) + If !Between(Asc(pc_char),48,57) And !Between(Asc(pc_char),97,122) And !Between(Asc(pc_char),65,90) And Asc(pc_char)<> 95 And Asc(pc_char)<>46 + pl_return=.F. + Exit + Endif + pn_len=pn_len-1 +Enddo +Return pl_return +Endfunc && enumefis +*********************************************************************************************** + + +******************************************* +* PROCEDURE ImportTable +* Date : 08/07/2005, 09:20:54 +* author : marius.mutu +* description: intoarce numele unui cursor cu datele importate dintr-un dbf +******************************************* +Procedure ImportTable +Local lcCursor +lcCursor = "" +loimport = Newobject("frm_import","importdata") +loimport.Show(1) +If gnButon = 1 + lcCursor = "crsReturn" +Endif + +Return lcCursor + +Endproc +*----------------------------------sfarsit procedura ImportTable---------------------------------- + + +Function Lista_Campuri +Lparameters tcAlias + +Local lcSelect, i, lcAlias, lcLista +lcLista = [] +lcSelect = Select() +lcAlias = tcAlias + +Select (lcAlias) +lnFields = Fcount() +For i = 1 To lnFields + lcField = Field(i) + lcLista = lcLista + [,] + lcField +Endfor +If !Empty(lcLista) + lcLista = Substr(lcLista,2) +Endif + +Select (lcSelect) +Return lcLista + +Endfunc && Lista_Campuri + + +***--------------------------------------------------------------------- +Procedure OPEN_DEFAULT_APP +Parameters tcfilename + +Declare Integer ShellExecute In shell32.Dll ; + INTEGER hndWin, ; + STRING cAction, ; + STRING cFileName, ; + STRING cParams, ; + STRING cDir, ; + INTEGER nShowWin +cFileName = tcfilename +cAction = "open" +ShellExecute(0,cAction,cFileName,"","",1) + +Endproc && OPEN_DEFAULT_APP + + +***--------------------------------------------------------------------- +Procedure GET_SCHEMA_GRID +Lparameters toGrid, tcColumnList, tcHeaderList, tcSchema, tlSelect, tnType, tcFrom, tcWhere, tcOrder, tcOutputName + +Local lcSelect, llSelect, lcAlias, lcWhere, lcOrder, lcColumn, lcHeader +Local lnType, lcInto +&& tnType : 0 CURSOR, 1 TABLE, 2 ARRAY + +If Type('tnType') # 'N' + lnType = 0 +Else + If !Between(tnType,0,2) + lnType = 0 + Else + lnType = tnType + Endif +Endif +Do Case +Case lnType = 0 + lcInto = ' INTO CURSOR ' +Case lnType = 1 + lcInto = ' INTO TABLE ' +Other lnType = 1 + lcInto = ' INTO ARRAY ' +Endcase + + +tcColumnList = '' +tcHeaderList = '' +tcSchema = '' + +lnNrCol = toGrid.ColumnCount +Dimension myArray[lnNrCol,3] + +With toGrid + For lnCol = 1 To .ColumnCount + lnColumn = .Columns(lnCol).ColumnOrder + lcColumn = .Columns(lnCol).ControlSource + llVisible = .Columns(lnCol).Visible + lnWidth = .Columns(lnCol).Width + If !llVisible Or lnWidth = 0 Or Empty(Alltrim(lcColumn)) + Adel(myArray,lnCol) + Loop + Endif + lnPos = At('.',lcColumn) + If lnPos > 0 + lcColumn = Substr(lcColumn, lnPos + 1) + Endif +*tcColumnList = tcColumnList + lcColumn + ',' + myArray[lnCol,1] = lnColumn + + For lnobjcol = 1 To .Columns(lnCol).Objects.Count + If Upper(.Columns(lnCol).Objects(lnobjcol).BaseClass)='HEADER' + lcHeader = .Columns(lnCol).Objects(lnobjcol).Caption + lcHeader = Strtran(Strtran(Strtran(Strtran(Strtran(Strtran(Strtran(Strtran(Strtran(lcHeader,Chr(32),'_'),'.','_'),'/','_'),'\','_'),"&","_"),"%",""),"(","_"),")","_"),"-","_") +*tcHeaderList = tcHeaderList + lcHeader + ',' +*tcSchema = tcSchema + lcColumn + [ as ] + lcHeader + [,] + myArray[lnCol,2] = lcColumn + myArray[lnCol,3] = lcHeader + Exit + Endif + Endfor + Endfor +*!* tcColumnList = Substr(tcColumnList, 1, Len(tcColumnList)-1) +*!* tcHeaderList = Substr(tcHeaderList , 1, Len(tcHeaderList)-1) +*!* tcSchema = Substr(tcSchema , 1, Len(tcSchema)-1) +Endwith +For i = 1 To Alen(myArray,1) + l1 = myArray[i,1] + If Type('l1') # 'N' + myArray[i,1] = -1 + Endif +Endfor + +Asort(myArray) +For i = 1 To Alen(myArray,1) + If myArray[i,1] <> -1 + tcColumnList = tcColumnList + Alltrim(myArray[i,2]) + [,] + tcHeaderList = tcHeaderList + Alltrim(myArray[i,3]) + [,] + tcSchema = tcSchema + Alltrim(myArray[i,2]) + [ as ] + Alltrim(myArray[i,3]) + [,] + Endif +Endfor + +tcColumnList = Substr(tcColumnList, 1, Len(tcColumnList)-1) +tcHeaderList = Substr(tcHeaderList , 1, Len(tcHeaderList)-1) +tcSchema = Substr(tcSchema , 1, Len(tcSchema)-1) + + +If tlSelect + tcSchema = 'SELECT ' + tcSchema +Endif +If !Empty(tcFrom) + tcSchema = tcSchema + ' FROM ' + Alltrim(tcFrom) +Endif +If !Empty(tcWhere) + tcSchema = tcSchema + ' WHERE ' + Alltrim(tcWhere) +Endif + +If !Empty(tcOrder) + tcSchema = tcSchema + ' ORDER BY ' + Alltrim(tcOrder) +Endif + +If !Empty(tcOutputName) + tcSchema = tcSchema + lcInto + tcOutputName +Endif + +Endproc && GET_SCHEMA_GRID + +***--------------------------------- +Procedure amessage +Lparameters tcMessage, tnDialogBoxType, tcTitleBarText, tnTimeOut +Local lnResponse +lnResponse = 0 +lcMessage = Iif(Empty(tcMessage),[],tcMessage) +lnDialogBoxType = Iif(Empty(tnDialogBoxType),0,tnDialogBoxType) +lcTitleBarText = Iif(Empty(tcTitleBarText),[],tcTitleBarText) +lnTimeOut = Iif(Empty(tnTimeOut),0,tnTimeOut) +If lnTimeOut # 0 + lnResponse = AMESSAGEBOX(lcMessage,lnDialogBoxType,lcTitleBarText,lnTimeOut) +Else + lnResponse = AMESSAGEBOX(lcMessage,lnDialogBoxType,lcTitleBarText) +Endif + +Return lnResponse + +Endproc && amessage +***--------------------------------- + +***--------------------------------- +Function AMESSAGEBOX +Lparameters tcMessage, tnDialogBoxType, tcTitle, tcFont, tnTimeOut ,tnTimeoutValue + +Local loMessage, lnReturn, lcMessageboxForm + +*!* *!* LOGHEZ ERORILE +*!* IF TYPE('goLog') = 'O' AND 'ERROR'$UPPER(tcMessage) OR 'EROARE'$UPPER(tcMessage) OR 'ORA-'$UPPER(tcMessage) +*!* goLog.LOG(tcMessage,PROGRAM()) +*!* ENDIF +If Type('gcNumeProgram') = 'C' And gcNumeProgram = 'ROASTART' + lcMessageboxForm = "messagebox_form_desktop" && desktop .T. +Else + lcMessageboxForm = "messagebox_form" +Endif +If !'MESSAGEBOX'$Upper(Set("Classlib")) + If Type('lnTimeOut') = 'N' And lnTimeOut # 0 + lnReturn = Messagebox(tcMessage, tnDialogBoxType, tcTitle, tnTimeOut) + Else + lnReturn = Messagebox(tcMessage, tnDialogBoxType, tcTitle) + Endif +Else + loMessage = Newobject(lcMessageboxForm, "MessageBox.vcx", "", tcMessage, tnDialogBoxType, tcTitle, tcFont, tnTimeOut ,tnTimeoutValue) + loMessage.AlwaysOnTop = .T. + loMessage.Show(1) + lnReturn = loMessage.IDOpcion +Endif + + +Return lnReturn + +Endfunc && amessagebox +***--------------------------------- + +Procedure export_xls +Lparameters tcAlias,tcNumeFisier + +If Empty(tcNumeFisier) + tcNumeFisier = 'Foaie_Excel' +Endif + +Local lcSelect +lcSelect = Select() + +If Used(tcAlias) + lcDir = Addbs(gcTempPath) + + lcFile = Putfile('Nume fisier:', tcNumeFisier , 'XLS') + If Empty(lcFile) && Esc pressed + Return + Endif + + + Select (tcAlias) + Export To (lcFile) Type Xl5 + Select (lcSelect) + + OPEN_DEFAULT_APP(lcFile) + +Endif +Endproc && export_xls + +*__________________________________________________________ + +&& Folosesc un tabel (tabel,id) cu cate o linie pt fiecare tabel +&& aflu id-ul urmator si il scriu in tabela +&& returnez id-ul +&& EX1: LNEW_ID=NEW_ID("GRILA_SAL") --> urmatorul id din fara cautare in tabela originala +&& EX2: LNEW_ID=NEW_ID("GRILA_SAL","ID") --> urmatorul id din cu cautare in tabela originala dupa campul +&& ex3: LNEW_ID=NEW_ID("GRILA_SAL","ID",.T.) --> .T. INSEAMNA CA TABELUL ORIGINAL ESTE INDEXAT DUPA FAC SEEK IN LOC DE LOCATE +Procedure NEW_ID +Parameters TALIAS,TFIELD,TTAG +*WAIT WINDOW TALIAS +*ON error Errorh(ERROR(),PROGRAM(),LINENO()) +LLLOOKUP=Iif(Type("tfield")="C",.T.,.F.) +LLTAG=Iif(Type("TTAG")="C",.T.,.F.) +TALIAS=Upper(Alltrim(TALIAS)) + + +*** Save Stats +LCOLDALIAS = Alias() && keep current work area +LNOLDRECNO = Iif(!Eof(),Recno(),0) && save record number + +LCSETDEL=Set("deleted") +&& lnmaxval = (10^pcidsize)-1 && wrap around after this val + +*** +&& PUN ORDINEA PE ID +If LLLOOKUP And LLTAG + Sele (TALIAS) + Set Order To &TTAG +Endif +*** +LCNEWID = 0 && our return result - NULL if failed +Select IDS +Locate For Upper(Alltrim(TABEL))=TALIAS +If !Found() + If Flock() + Append Blank + Replace TABEL With TALIAS + Unlock + Endif + +Endif + +Set Deleted Off +&& acum sunt pe inregistrarea corecta + + +*** lock counter table and update counter +Select IDS +If Rlock() +*** Avoid use of Macros - Convert to mem var & update it + LNCOUNTERVAL = NEW_ID + +*** VERIFY ID NUMBER - search 'til no match + Do While .T. +*** increase the counter - update field and var + LNCOUNTERVAL = LNCOUNTERVAL+1 + +*!* *** check for wraparound +*!* IF lncounterval > lnmaxval +*!* lncounterval = 1 +*!* ENDIF + + Select (TALIAS) + If LLLOOKUP + If LLTAG + LCAUT="SEEK "+Allt(Str(LNCOUNTERVAL)) + Else + LCAUT="LOCATE FOR "+Allt(TFIELD)+"="+Allt(Str(LNCOUNTERVAL)) +*** now see if it exists + &LCAUT +* LOCATE FOR &TFIELD=LNCOUNTERVAL + If !Found() +*** No match - DONE + Exit + Endif && !found() + Endif && lltag + Else + Exit + Endif && lllokup + + Enddo && done + + Sele IDS + Replace NEW_ID With LNCOUNTERVAL + LCNEWID=LNCOUNTERVAL + + Unlock In IDS +Endif && rlock() + +*** Reset record number on original file + +If !Empty(LCOLDALIAS) + Sele (LCOLDALIAS) + If LNOLDRECNO#0 + Goto LNOLDRECNO + Endif +Endif +Set Deleted &LCSETDEL + +Return LCNEWID + +Endproc && NEW_ID + + +***------------------------------------------------------------------------------------------------------- + +* Foloseste comment de la coloane si tooltiptext de la grid pt a salva recordsource si controlsource din grid inainte de reconstructie +Procedure SAVE_GRID +Param toGrid +*wait wind 'save_grid' +Private pogrid +If Param()=0 Or Type('togrid')!="O" + Return .F. +Endif + +pogrid=toGrid + +* remember control sources in the column's comment field +With pogrid + Local nColumnIndex + For m.nColumnIndex = 1 To .ColumnCount + .Columns(m.nColumnIndex).Tag = .Columns(m.nColumnIndex).ControlSource + Endfor + .ToolTipText=.RecordSource + .RecordSource="" +Endwith + +Return .T. +Endproc && SAVE_GRID +***-------------------------------------------------------------- +Procedure RESTORE_GRID +Param toGrid + +*wait wind 'restore_grid' +Private pogrid +If Param()=0 Or Type('togrid')!="O" + Return .F. +Endif + +pogrid=toGrid + + +With pogrid +* restore record source + .RecordSource = .ToolTipText +* restore control sources + For m.nColumnIndex = 1 To .ColumnCount + .Columns(m.nColumnIndex).ControlSource = .Columns(m.nColumnIndex).Tag + Endfor + .ToolTipText="" +Endwith +Return .T. +Endproc && RESTORE_GRID + +****** + +* Foloseste comment de la coloane si tooltiptext de la grid pt a salva recordsource si controlsource din grid inainte de reconstructie +Procedure SAVE_GRID_COMMENT +Param toGrid +*wait wind 'save_grid' +Private pogrid +If Param()=0 Or Type('togrid')!="O" + Return .F. +Endif + +pogrid=toGrid + +* remember control sources in the column's comment field +With pogrid + Local nColumnIndex + For m.nColumnIndex = 1 To .ColumnCount + .Columns(m.nColumnIndex).Comment = .Columns(m.nColumnIndex).ControlSource + Endfor + .ToolTipText=.RecordSource + .RecordSource="" +Endwith + +Return .T. +Endproc && SAVE_GRID_COMMENT +***-------------------------------------------------------------- +Procedure RESTORE_GRID_COMMENT +Param toGrid + +*wait wind 'restore_grid' +Private pogrid +If Param()=0 Or Type('togrid')!="O" + Return .F. +Endif + +pogrid=toGrid + + +With pogrid +* restore record source + .RecordSource = .ToolTipText +* restore control sources + For m.nColumnIndex = 1 To .ColumnCount + .Columns(m.nColumnIndex).ControlSource = .Columns(m.nColumnIndex).Comment + Endfor + .ToolTipText="" +Endwith +Return .T. +Endproc && RESTORE_GRID_COMMENT + + +* Foloseste comment de la coloane si tooltiptext de la grid pt a salva recordsource si controlsource din grid inainte de reconstructie +Procedure SAVE_GRID_TAG +Param toGrid +*wait wind 'save_grid' +Private pogrid +If Param()=0 Or Type('togrid')!="O" + Return .F. +Endif + +pogrid=toGrid + +* remember control sources in the column's comment field +With pogrid + Local nColumnIndex + For m.nColumnIndex = 1 To .ColumnCount + .Columns(m.nColumnIndex).Tag = .Columns(m.nColumnIndex).ControlSource + Endfor + .ToolTipText=.RecordSource + .RecordSource="" +Endwith + +Return .T. +Endproc && SAVE_GRID_TAG +***-------------------------------------------------------------- +Procedure RESTORE_GRID_TAG +Param toGrid + +*wait wind 'restore_grid' +Private pogrid +If Param()=0 Or Type('togrid')!="O" + Return .F. +Endif + +pogrid=toGrid + + +With pogrid +* restore record source + .RecordSource = .ToolTipText +* restore control sources + For m.nColumnIndex = 1 To .ColumnCount + .Columns(m.nColumnIndex).ControlSource = .Columns(m.nColumnIndex).Tag + Endfor + .ToolTipText="" +Endwith +Return .T. +Endproc && RESTORE_GRID_TAG + + +*------------------------------------------- +* Function...: Xmenu +* Author.....: MARTIN +* Date.......: 04/06/1997 +* Notes......: Based on an idea from Steve Zimmelman for FoxPro 2.x +* Parameters.: tcItems = Semicolon-separated String with the various options +* ...........: tnBar = Initially selected item (default=1) +* Returns....: Selected item number +* See Also...: PROMPT() [FoxPro Native] +* +Procedure XMENU +Lparameters TCITEMS, TNBAR + +Local NITEMCOUNT, AITEMS, X, NROW, NCOL, CTITLE, NLASTPOS, CCOLOR, AITEMS + +Private CPOPMENU, NSELECT && They flow into the GetChoice internal procedure + +If Pcount() < 2 + TNBAR = 1 +Endif + +Activate Screen + +* Parse every item +* +m.NITEMCOUNT = Occurs( ';', TCITEMS ) + 1 +Dimen AITEMS[ m.nItemCount ] +m.NLASTPOS = 1 + +For m.X = 1 To m.NITEMCOUNT + + If m.X < m.NITEMCOUNT + + AITEMS[ m.x ] = Subs( m.TCITEMS, m.NLASTPOS, ; + ( At( ';', m.TCITEMS, m.X ) - 1 ) - m.NLASTPOS + 1 ) + Else + AITEMS[ m.x ] = Subs( m.TCITEMS, m.NLASTPOS, ; + ( Len( m.TCITEMS ) - m.NLASTPOS ) + 1 ) + Endif + + If AITEMS[ m.x ] # "\-" + + AITEMS[ m.x ] = Allt( AITEMS[ m.x ] ) + Endif + + m.NLASTPOS=At( ';', m.TCITEMS, m.X ) + 1 +Next + +* Calculates the mouse pointer position +* +m.NROW = Iif( Mrow() + m.NITEMCOUNT < Srow(), Mrow() - 1, Srow() - m.NITEMCOUNT ) +m.NCOL = Iif( Mcol() + 10 < Scol(), Mcol() - 3, Mcol() - 13 ) + +* Gets an unique name for the pop-up +* +m.CPOPMENU = 'M' + Sys(3) + "_" + +Define Popup ( m.CPOPMENU ) SHORTCUT Relative From NROW, NCOL + +For m.X = 1 To m.NITEMCOUNT + + Define Bar m.X Of ( m.CPOPMENU ) Prompt AITEMS[ m.x ] +Next + +m.CANS = "" +m.NSELECT = 0 +Clear Type + +On Selection Popup ( m.CPOPMENU ) Do GETCHOICE + +Activate Popup ( m.CPOPMENU ) Bar TNBAR + +Pop Key +Release Popup ( m.CPOPMENU ) + +Return Iif( Lastkey()=27, 0, m.NSELECT ) + +Endproc && XMENU + +*-------------------- +Procedure GETCHOICE + +m.NSELECT = Bar() + +Deactivate Popup ( m.CPOPMENU ) + +Return +&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& MENIU &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& + +Procedure lista2array +Parameters tcLISTA,taArray,tcSeparator +&& tcLista este un sir de caractere care contine elementele separate prin <;> default +&& tarray este vectorul care se completeaza - trebuie dat prin referinta +&& tcSeparator separatorul de elemente din tcLista - default este ";" - este optional +&& intoarce numarul de elemente gasite + +&& ex: lnNr = lista2array("ana;are;mere",@alista,";") +External Array taArray +Local lcLista,lcSeparator,lnNRF,lcF1,i + +lnNRF = 0 + +lcLista=Upper(Allt(tcLISTA)) +If Parameters()<3 Or Empty(tcSeparator) + lcSeparator=";" +Else + lcSeparator=Alltrim(tcSeparator) +Endif + +If Right(lcLista,1)!=lcSeparator + lcLista=lcLista+lcSeparator +Endif + +lnNRF=Occurs(lcSeparator,lcLista) + +If lnNRF>0 + Dimension taArray[lnNrf,1] + + For i=1 To lnNRF + lcF1=Left(lcLista,At(lcSeparator,lcLista)-1) + + If i!=lnNRF + lcLista=Substr(lcLista,At(lcSeparator,lcLista)+1) + Endif + + taArray[i]=lcF1 + Endfor +Else + lnNRF = 0 +Endif + +Return lnNRF + +Endproc && lista2array + + +***------------------------------------------------------------------------------------------- +Procedure get_mask +Parameters tnint, tndec + +Local lnint, lndec +lnint = tnint +lndec = tndec +lnrest = Mod(lnint,3) + +lcString = Replicate("9",lnrest) +lnint_ramas = lnint - lnrest +Do While lnint_ramas > 0 + lcString = lcString + " "+ Replicate("9",3) + lnint_ramas = lnint_ramas - 3 +Enddo +If lndec > 0 + lcString = lcString +"."+Replicate("9",tndec) +Endif + +Return lcString + +Endproc && get_mask +***----------------------------------------------------------- + + +******************************************************************* +* PROCEDURE Get_Version( ) +* Date : 17/11/2004, 16:34:20 +* author : marius.mutu +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* INCEPUT:Get_Version ******************************************* +Procedure Get_Version(tlNoRevision,tlInfo,tcfilename) +Local laVersion,lcVersion,lcFileName + +*-- Get Version Information +*-- Added 4-1-98 BDC +Local lcVersionText, lcFileName,llNoRevision,llInfo + +Dimension aVersion(12) + +If Empty(tcfilename) + lcFileName = Sys(16,0) +Else + lcFileName = tcfilename +Endif +llNoRevision = tlNoRevision +llInfo = tlInfo + + + +*** EGL: 2002.1.2 17:06 - switched to AGETFILEVERSION(). +If Val(Substr(Version(), 15)) >= 6 +* The AGETFILEVERSION() function was introduced in VFP 6 + +*!* DECLARE STRING GetCommandLine IN Kernel32 +*!* lcFileName = GetCommandLine() + lcVersionText = "" + +*!* IF GetFileVersion(&lcFileName,@aVersion) = 0 + If Agetfileversion(aVersion, lcFileName) > 0 + If !llInfo +* daca vreau doar numarul versiunii + lcVersion = Allt(aVersion(4)) + If llNoRevision +* daca nu vreau si revizia + lnPos = Rat('.',lcVersion,1) + Else + lnPos = Len(lcVersion) + Endif + lcVersionText = Left(lcVersion,lnPos) + Else +* vreau toata informatia despre fisier + If Not Empty(aVersion(1)) + lcVersionText = Allt(aVersion(1)) + Endif + + If Not Empty(aVersion(2)) + lcVersionText = lcVersionText+Chr(10)+"Produs de: "+ Allt(aVersion(2)) + Endif + + If Not Empty(aVersion(3)) + lcVersionText = lcVersionText+Chr(10)+"Descriere: "+ Allt(aVersion(3)) + Endif + + If Not Empty(aVersion(4)) + lcVersionText = lcVersionText+Chr(10)+"Versiune fisier: "+ Allt(aVersion(4)) + Endif + + If Not Empty(aVersion(5)) + lcVersionText = lcVersionText+Chr(10)+"Nume intern: "+ Allt(aVersion(5)) + Endif + + If Not Empty(aVersion(6)) + lcVersionText = lcVersionText+Chr(10)+"Copyright: "+ Allt(aVersion(6)) + Endif + + If Not Empty(aVersion(7)) + lcVersionText = lcVersionText+Chr(10)+"Marca inregistrata: "+ Allt(aVersion(7)) + Endif + + If Not Empty(aVersion(8)) + lcVersionText = lcVersionText+Chr(10)+"Nume fisier: "+ Allt(aVersion(8)) + Endif + + If Not Empty(aVersion(9)) + lcVersionText = lcVersionText+Chr(10)+"Private Build: "+ Allt(aVersion(9)) + Endif + + If Not Empty(aVersion(10)) + lcVersionText = lcVersionText+Chr(10)+"Nume produs: "+ Allt(aVersion(10)) + Endif + + If Not Empty(aVersion(11)) + lcVersionText = lcVersionText+Chr(10)+"Versiune produs: "+ Allt(aVersion(11)) + Endif + + If Not Empty(aVersion(12)) + lcVersionText = lcVersionText+Chr(10)+"Special Build: "+ Allt(aVersion(12)) + Endif + + If Empty(lcVersionText) + lcVersionText = "Versiune necunoscuta." + Endif + Endif + Else + + lcVersionText = "Versiune necunoscuta." + + Endif + +Else + lcVersionText = "Versiune necunoscuta." +Endif +Return lcVersionText + +Endproc +******************************************* SFARSIT: Get_Version ******************************************* + + +* PROCEDURE Get_Hexa( tnDeca ) +* Date : 18/11/2004, 17:56:48 +* author : marius.mutu +* description: transforma un Deca in Hexa + +****** PARAMETER BLOCK ************** +* Parameters : 1 +* Parameter 1: Numarul in Deca +* +******************************************* INCEPUT:Get_Hexa ******************************************* +Procedure Get_Hexa( tnDeca ) +Local laHexa,lnHexa,lnDeca + + +If Empty(tnDeca) + lnDeca = 0 +Else + lnDeca = tnDeca +Endif + +Dimension laHexa[16] +laHexa[1] = '0' +laHexa[2] = '1' +laHexa[3] = '2' +laHexa[4] = '3' +laHexa[5] = '4' +laHexa[6] = '5' +laHexa[7] = '6' +laHexa[8] = '7' +laHexa[9] = '8' +laHexa[10] = '9' +laHexa[11] = 'A' +laHexa[12] = 'B' +laHexa[13] = 'C' +laHexa[14] = 'D' +laHexa[15] = 'E' +laHexa[16] = 'F' + +lnHexa = '' + +Do While lnDeca > 0 + lnrest = Mod(lnDeca,16) + lcHexa = laHexa[lnRest+1] + lnDeca = Int(lnDeca/16) + + lnHexa = lcHexa + lnHexa + lnrest = Mod(lnDeca,16) + +Enddo + +Return lnHexa + +Endproc +******************************************* SFARSIT: Get_Hexa ******************************************* +&& completeaza cu spatii si CRLF un mesaj a.i. pe fiecare linie sa fie lnLength caractere +Function format_msg +Parameters tcErrMsg,tnLength +Local lnLength,lcLinie,lcMesaj,lnPoz,lnCate,i,j +lcMesaj="" +If Empty(tnLength) + lnLength=50 && numarul de caractere pe linie +Else + lnLength=tnLength +Endif +i=1 +If At(Chr(13)+Chr(10),tcErrMsg,i)>0 + lnCate=At(Chr(13)+Chr(10),tcErrMsg,i)+1 + i=i+1 +Else + lnCate=Min(lnLength,Rat(' ',Substr(tcErrMsg,1,lnLength))-1) +Endif +lnPoz=1 +*!* lcLinie=Substr(tcErrMsg,1,lnCate) + +Do While lnPoz0 + lnCate=At(Chr(13)+Chr(10),tcErrMsg,i)+2-lnPoz + i=i+1 + Else + lcNextChar=Substr(tcErrMsg,lnPoz+lnLength,1) + lcLinieNoua=Substr(tcErrMsg,lnPoz,lnLength) + If lcNextChar!=' ' And Len(lcLinieNoua)>=lnLength + lnCate=Min(lnLength,Rat(' ',lcLinieNoua)-1) + Else + lnCate=lnLength + Endif + Endif +Enddo +Return lcMesaj +Endfunc && format_msg +***--------------------------------------------------------------------------------------------- +Procedure C_LUNA +Parameters tnnrluna +Do Case +Case tnnrluna=1 + Return "IANUARIE" +Case tnnrluna=2 + Return "FEBRUARIE" +Case tnnrluna=3 + Return "MARTIE" +Case tnnrluna=4 + Return "APRILIE" +Case tnnrluna=5 + Return "MAI" +Case tnnrluna=6 + Return "IUNIE" +Case tnnrluna=7 + Return "IULIE" +Case tnnrluna=8 + Return "AUGUST" +Case tnnrluna=9 + Return "SEPTEMBRIE" +Case tnnrluna=10 + Return "OCTOMBRIE" +Case tnnrluna=11 + Return "NOIEMBRIE" +Case tnnrluna=12 + Return "DECEMBRIE" +Otherwise + Return "" +Endcase +Endproc &&c_luna +***-------------------------------------------------------------------------------------- +***-------------------------------------------------------------------------------------- +Procedure CLUNA3 +Parameters tnnrluna +Do Case +Case tnnrluna=1 + Return "Ian" +Case tnnrluna=2 + Return "Feb" +Case tnnrluna=3 + Return "Mar" +Case tnnrluna=4 + Return "Apr" +Case tnnrluna=5 + Return "Mai" +Case tnnrluna=6 + Return "Iun" +Case tnnrluna=7 + Return "Iul" +Case tnnrluna=8 + Return "Aug" +Case tnnrluna=9 + Return "Sep" +Case tnnrluna=10 + Return "Oct" +Case tnnrluna=11 + Return "Noi" +Case tnnrluna=12 + Return "Dec" +Otherwise + Return Space(3) +Endcase +Endproc &&cluna3 +***-------------------------------------------------------------------------------------- +***------------------------------------------------------------------------------------ +Procedure cluna +Parameters tcGrup,tcTipCumul,tcAn + +lcTipCumul=Upper(Alltrim(tcTipCumul)) +lcAn=Alltrim(tcAn) +lcgrup=Alltrim(tcGrup) +lnGrup=Val(lcgrup) +Do Case +Case lcTipCumul="T" + lcret="Trim. "+lcgrup+" "+lcAn +Case lcTipCumul="S" + lcret="Sem. "+lcgrup+" "+lcAn +Case lcTipCumul="A" + lcret="Anul "+lcAn +Otherwise + Do Case + Case lnGrup=1 + lcret="Ian "+lcAn + Case lnGrup=2 + lcret="Feb "+lcAn + Case lnGrup=3 + lcret="Mar "+lcAn + Case lnGrup=4 + lcret="Apr "+lcAn + Case lnGrup=5 + lcret="Mai "+lcAn + Case lnGrup=6 + lcret="Iun "+lcAn + Case lnGrup=7 + lcret="Iul "+lcAn + Case lnGrup=8 + lcret="Aug "+lcAn + Case lnGrup=9 + lcret="Sep "+lcAn + Case lnGrup=10 + lcret="Oct "+lcAn + Case lnGrup=11 + lcret="Noi "+lcAn + Case lnGrup=12 + lcret="Dec "+lcAn + Otherwise + lcret=lcAn + Endcase +Endcase +Return lcret +Endproc &&cluna +***------------------------------------------------------------------------------------ +***------------------------------------------------------------------------------------ +Procedure get_trimestru +Parameters tnNrTrim +Do Case +Case tnNrTrim = 1 + Return "Trim. I" +Case tnNrTrim = 2 + Return "Trim. II" +Case tnNrTrim = 3 + Return "Trim. III" +Case tnNrTrim = 4 + Return "Trim. IV" +Otherwise + Return Space(7) +Endcase +Endproc && get_trimestru +***-------------------------------------------------------------------------------------- +Procedure get_semestru +Parameters tnNrSem +Do Case +Case tnNrSem = 1 + Return "Sem. I" +Case tnNrSem = 2 + Return "Sem. II" +Otherwise + Return Space(7) +Endcase +Endproc && get_semestru +***-------------------------------------------------------------------------------------- +Function Lista_Campuri +Lparameters tcAlias + +Local lcSelect, i, lcAlias, lcLista +lcLista = [] +lcSelect = Select() +lcAlias = tcAlias + +Select (lcAlias) +lnFields = Fcount() +For i = 1 To lnFields + lcField = Field(i) + lcLista = lcLista + [,] + lcField +Endfor +If !Empty(lcLista) + lcLista = Substr(lcLista,2) +Endif + +Select (lcSelect) +Return lcLista + +Endfunc && Lista_Campuri +***---------------------------------------- + +Procedure NRORD +Parameters ALI +Sele &ALI +A=Reccount() +If A=0 + Return +Endif +If A>65000 + Return 0 +Endif +Declare NROR(A) +K=0 +Scan + K=K+1 + NROR(K)=Recno() +Endscan +Return + +******************** +Function NRCRT +NR=Ascan(NROR,Recno()) +Return NR +********************** + +***---------------------------------------- +Function caps_first +Lparameters tcMesaj +Local lcMesaj +If !Empty(tcMesaj) And Len(tcMesaj)>1 + lcMesaj=Upper(Substr(tcMesaj,1,1))+Strtran(Lower(Substr(tcMesaj,2)),[oracle],[Oracle]) +Else + lcMesaj=Upper(tcMesaj) +Endif +Return lcMesaj +Endfunc && caps_first +***---------------------------------------- + +*!* FUNCTION ultima_zi_din_luna +*!* PARAMETERS tcAnul, tcLuna +*!* +*!* LOCAL ldData +*!* ldData = DATE(VAL(tcAnul),VAL(tcLuna), 1) +*!* ldData = GOMONTH(ldData,1) +*!* ldData = DATE(YEAR(ldData),MONTH(ldData), 1) - 1 +*!* RETURN ldData +*!* ENDFUNC + +Function ultima_zi_din_luna +Parameters tcAnul, tcLuna + +Local ldData, lcAnul, lcLuna + +If Type('tcAnul') = 'N' + lcAnul = Transform(tcAnul) +Else + lcAnul = tcAnul +Endif +If Type('tcLuna') = 'N' + lcLuna = Transform(tcLuna) +Else + lcLuna = tcLuna +Endif + +ldData = Date(Val(lcAnul),Val(lcLuna), 1) +ldData = Gomonth(ldData,1) +ldData = Date(Year(ldData),Month(ldData), 1) - 1 +Return ldData +Endfunc + + + +****************************************************************************** + +Procedure viz_prg_instalat +If Used('v_programe_instalate') + Use In v_programe_instalate +Endif +*!* lcSql = [select * from vdef_util_programe where id_util=]+Alltrim(Str(gnIdUtil))+; +*!* [ order by ordine] +lcSql = [{call contafin_oracle.pack_drepturi.programe_utilizator(]+Alltrim(Str(gnIdUtil))+[)}] +lcCursor = [v_programe_instalate] +lnSucces = goExecutor.oExecute(lcSql,lcCursor) +goExecutor.Oreset() + +Endproc +****************************************************************************** +Procedure lansare_toolbar + +Do viz_prg_instalat In oproceduri_comune.prg + +If Used('v_programe_instalate') And Reccount('v_programe_instalate') > 0 + + otool = Createobject('toolset') + + With otool.tool1 + If Used('v_programe_favorite') + Use In v_programe_favorite + Endif + Select * From v_programe_instalate Where favorit=1 Order By ordine_favorit Into Cursor v_programe_favorite + Select v_programe_favorite + Scan + + If Type('gcappname')='C' + If gcappname=Upper(Alltrim(nume)) + Loop + Endif + Endif + + lnParametru_prog = parametru_prog && pt. programul de Contracte - clienti si furnizori + lcParametru_prog = Alltrim(Str(Nvl(lnParametru_prog,0))) + + lnIdProgram=id_program + lcIdProgram=Alltrim(Str(lnIdProgram)) + lcNumeProgram=Proper(Alltrim(explicatie)) + + lcImagine=Upper(Alltrim(nume))+".png" &&nume poza + + lcCaleImagine=gcappPath+'grafice\'+lcImagine &&cale imagine + If !File(lcCaleImagine) + lcImagine = 'na.png' + lcCaleImagine=gcappPath+'grafice\na.png' + Endif + lnIdGrupProg=id_grup_prog + lnIdGrupProgFav=0 + lcCaleProgram = dirgen+Iif(Empty(Director),Juststem(nume),Alltrim(Director))+[\]+; &&cale program + Juststem(Alltrim(nume))+[.exe] + lcParametru = gcHost + [;] + gcuserName + [;] + gcPassword + [;] + Alltrim(Str(gnIdUtil)) + [;] + ; + lcIdProgram + [;] + lcParametru_prog + [;] &¶metri + lcComandaProgram=[run /n ] + lcCaleProgram +[ ]+lcParametru + + lcImgNume="img_"+lcIdProgram+"_"+lcParametru_prog + + If lnIdProgram>0 + .AddObject(lcImgNume,'img_program') + .&lcImgNume..comanda_program = lcComandaProgram &&adaug poza + .&lcImgNume..Picture = lcImagine + .&lcImgNume..ToolTipText = lcNumeProgram + .&lcImgNume..Visible=.T. + Endif + + + Endscan + + .Dock(0) + .Show + Endwith +Endif + +If Used('v_programe_instalate') + Use In v_programe_instalate +Endif + +If Used('v_programe_favorite') + Use In v_programe_favorite +Endif + +Endproc +***--------------------------------------------------------------------------------------------------------------------------------------- +***--------------------------------------------------------------------------------------------------------------------------------------- +Procedure ceretitlu_rap +Parameters tcMesaj,tctitlu + +Local lcTitlu +lcTitlu = tctitlu +obj1=Createobject("frm_cere_titlu") +obj1.clb_tx_simplu1.lb_simplu1.Caption = tcMesaj +obj1.clb_tx_simplu1.text_simplu1.ControlSource = 'lctitlu' +obj1.Show(1) +Return lcTitlu + +Endproc +***--------------------------------------------------------------------------------------------------------------------------------------- +***------------------------------------------------------------------------------------------- +Procedure cursor2lista +Lparameters tcCursor, tcColumn,tcSeparator +&& tcCursor - cursor +&& tcColumn - coloana din cursor care va constitui lista +&& tcSeparator separatorul de elemente din tcLista - default este ";" - este optional +&& intoarce lista de valori separate prin separatori +&& ex: lcLista = cursor2lista("cursor","id",";") +Local lcLista,lcSeparator, lcSelect + +lcLista = "" +lcSeparator = Iif(!Empty(tcSeparator) And Type('tcSeparator') = 'C', tcSeparator, ";") +If Used(tcCursor) + lcSelect = Select() + lcColumn = tcCursor + "." + tcColumn + If Type(lcColumn) # 'U' + Select &tcColumn From (tcCursor) Into Cursor crsListaTemp + + Select crsListaTemp + Scan + lcLista = lcLista + Alltrim(Transform(Evaluate(tcColumn))) + lcSeparator + Endscan + Use In crsListaTemp + + If !Empty(lcLista) + lcLista = Left(lcLista, Len(lcLista) - 1) + Endif + Endif + + + Select (lcSelect) +Endif + +Return lcLista + +Endproc && cursor2lista + +***------------------------------------------------------------------------------------------- +***------------------------------------------------------------------------------------------- +Procedure GETCALLSTACK +Local nPos +nPos=Program(-1) - 2 + + +Local cCallStack,i +cCallStack="" +For i=nPos To 1 Step -1 + cCallStack=cCallStack + Program(i) + Chr(13)+Chr(10) +Endfor + + +Return cCallStack + +Endproc && GETCALLSTACK +***------------------------------------------------------------------------------------------- +&& -------------------------- INCEPUT verific_cont ------------------------------ +Procedure verific_cont +Parameters tcCont, tlNoMessage + +Private pcCont +pcCont = Alltrim(tcCont) + +&& verificare contului cu Planul de Conturi +lcSel = [SELECT cont from ] + GCS + [.vplcont_sintetic WHERE TRIM(cont) = ?pcCont and an = ?gnAn ] +lcCursor = 'crs_verific' +lnSucces = goExecutor.oExecute(lcSel,lcCursor) +If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare,0+16,"Eroare") +Endif + +If lnSucces > 0 + If Reccount('crs_verific')=0 + lnSucces = -1 + Endif +Endif + +If lnSucces < 0 And !tlNoMessage + AMESSAGEBOX('Acest cont nu este definit in planul de conturi!',0+48, 'Atentie') +Endif + +Return lnSucces + +Endproc + +&& -------------------------- SFARSIT verific_cont ------------------------------ + +* ===================== GetHash ==================================== +* INTOARCE UN OBIECT DE TIP HASH CREAT DIN tcPropertyValueList +*!* loHash = GetHash([cselect=>select id, name from test??cwhere=>id=pnId??corder=>name]) +*!* lnMembers = AMEMBERS(laMembers, loHash) +*!* FOR i = 1 TO lnMembers +*!* MESSAGEBOX(loHash.&laMembers(i)) +*!* ENDFOR +* ================================================================== +Function GetHash +Lparameters tcPropertyValueList + +Local loHash + +loHash = Createobject("MyHash", tcPropertyValueList) +Return loHash + +Endfunc + + +* ===================== MyHash ==================================== +* OBIECT EMULARE HASH +* loHash = GetHash([cselect=>select id, name from test??cwhere=>id=pnId??corder=>name]) +* ================================================================== +Define Class MyHash As Custom + + + Procedure ReadMe + If .F. + Local loHash + loHash = Createobject("MyHash", [cselect=>select id, name from test??cwhere=>id=pnId??corder=>name]) + Endif + Endproc && readme + +*!* sir "proprietate1=>valoare1??proprietate2=>valoare2" +*!* genereaza proprietati si valori din sirul initial + Procedure Init + Lparameters tcPropertyValueList + + Local i, lnProperties, lcPropertyValue, lcValue, luValue + +&& tcPropertyValueList = [cselect =>ala bala portocala??cfiltru=>un filtru - atentie la spatiile din stanga valorii] + If Type('tcPropertyValueList') = 'C' And !Empty(tcPropertyValueList) + lnProperties = Getwordcount(tcPropertyValueList,'??') + For i = 1 To lnProperties + lcPropertyValue = Alltrim(Getwordnum(tcPropertyValueList,i,'??')) + If At('=>', lcPropertyValue) > 0 + lcProperty = Getwordnum(Strtran(lcPropertyValue,'=>',Chr(18)), 1, Chr(18)) + lcValue = Getwordnum(Strtran(lcPropertyValue,'=>',Chr(18)), 2, Chr(18)) + luValue = This.GetDefaultValue(lcProperty, lcValue) + This.SetValue(lcProperty, luValue) + Endif + Endfor + Endif + Endproc && INIT + +*!* Seteaza valoarea unei proprietati daca exista sau adauga proprietatea, si intoarce valoarea + Procedure SetValue + Lparameters tcProperty, tuValue + + If Type('THIS.&tcProperty') <> 'U' + This.&tcProperty = tuValue + Else + This.AddProperty(tcProperty, tuValue) + Endif + + Return This.&tcProperty + + Endproc && SetValue + +*!* Intoarce valoarea unei proprietati daca exista, altfel valoarea empty() corespunzator tipului proprietatii + Function GetValue + Lparameters tcProperty + + Local lcProperty, luValue + lcProperty = 'THIS.' + tcProperty + + If Type('THIS.&tcProperty') <> 'U' + luValue = This.&tcProperty + Else + luValue = This.GetDefaultValue(tcProperty) + Endif + Return luValue + + Endfunc && GetValue + +*!* Intoarce valoarea empty() a unei proprietati dupa tip = prima litera din numele proprietatii daca nu primeste decat tcProperty +*!* Converteste tcValue la tipul variabilei tcProperty daca tcValue e primit ca parametru + Function GetDefaultValue + Lparameters tcProperty, tcValue + + Local lcType, luValue + luValue = "" + lcType = Upper(Left(tcProperty,1)) + llEmptyValue = Iif(Pcount() = 1, .T., .F.) + + Do Case + Case lcType $ "CM" + luValue = Iif(llEmptyValue, '', tcValue) + Case lcType $ "NIF" + luValue = Iif(llEmptyValue, 0, Val(tcValue)) + Case lcType = "T" + luValue = Iif(llEmptyValue, Dtot({}), Ctot(tcValue)) + Case lcType = "D" + luValue = Iif(llEmptyValue, {}, Ctod(tcValue)) + Case lcType = "L" + luValue = Iif(llEmptyValue, .F., Iif(tcValue = "1" Or Upper(tcValue) = "T" Or Upper(tcValue) = '.T.' Or Upper(tcValue) = 'YES', .T., .F.)) + Otherwise + luValue = "" + Endcase + + Return luValue + Endfunc && GetDefaultValue + +*!* Intoarce .T. daca exista proprietatea + Function HasProperty + Lparameters tcProperty + + Local lcProperty, llReturn + lcProperty = 'THIS.' + tcProperty + llReturn = .F. + + If Type('THIS.&tcProperty') <> 'U' + llReturn = .T. + Endif + + Return llReturn + + Endfunc && HasProperty + +Enddefine && Hash + +Function get_zileluc( ) + +lnzileluc = 0 +lcSql = [select zileluc from ] + GCS + [.sal_calendar where an=?gnan and luna=?gnluna] +lcCursor = [v_zileluc] +lnSucces = goExecutor.oExecute(lcSql,lcCursor) +goExecutor.Oreset() +If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare,0+16,"Eroare") + Return +Else + Select v_zileluc + lnzileluc = zileluc +Endif +Return lnzileluc + +******************************************* +* PROCEDURE param_listari( tcraport, tcTitlu, tcSemnaturi ) +* Date : 07/28/05, 14:04:21 +* author : liana.macinic +* description: + +****** PARAMETER BLOCK ************** +* Parameters : 3 +* Parameter 1: +* Parameter 2: +* Parameter 3: +* +******************************************* +Procedure param_listari( tcraport, tctitlu, tcSemnaturi, tlFaraTab) +Store '' To tctitlu, tcSemnaturi + +Local lnIdRaport +If Used('v_raport') + Use In v_raport +Endif + +lcSql = [select id_raport,titlu from ] + GCS + [.sal_nom_rapoarte where UPPER(raport) = ']+Upper(Alltrim(tcraport))+['] +lcCursor = [v_raport] +lnSucces = goExecutor.oExecute(lcSql,lcCursor) +goExecutor.Oreset() +If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare,0+16,"Eroare") + Return +Endif +Select v_raport +lnIdRaport = v_raport.id_raport +tctitlu = v_raport.titlu +Use + + +If Used('v_date') + Use In v_date +Endif + +lcSql = [select semnatura,NUME from ] + GCS + [.sal_semnaturi_rap where id_raport = ]+Alltrim(Str(lnIdRaport))+[ and sters = 0 order by ordine] +lcCursor = [v_date] +lnSucces = goExecutor.oExecute(lcSql,lcCursor) +goExecutor.Oreset() +If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare,0+16,"Eroare") + Return +Endif + +Local lcSemn,lcNumeRap,lcListaNumeRap +Store '' To lcSemn,lcNumeRap,lcListaNumeRap + + +Select v_date +Scan + Scatter Name lcDateRap Memo + lcSemn = Alltrim(Nvl(lcDateRap.semnatura,"")) + lcNumeRap = Alltrim(Nvl(lcDateRap.nume,'')) + If Len(lcSemn) => Len(lcNumeRap) + lcNumeRap = Padr(lcNumeRap,Len(lcSemn)," ") + Else + lcSemn= Padr(lcSemn,Len(lcNumeRap)," ") + Endif + If tlFaraTab + tcSemnaturi = tcSemnaturi+lcSemn + Else + tcSemnaturi = tcSemnaturi+Chr(9)+Chr(9)+lcSemn + Endif + + If tlFaraTab + lcListaNumeRap = lcListaNumeRap + lcNumeRap + Else + lcListaNumeRap = lcListaNumeRap + +Chr(9)+Chr(9)+lcNumeRap + Endif +Endscan + +tcSemnaturi = tcSemnaturi + Chr(13) + lcListaNumeRap +*!* SELECT v_date +*!* SCAN +*!* tcSemnaturi = tcSemnaturi+CHR(9)+CHR(9)+ALLTRIM(v_date.nume) +*!* ENDSCAN +*!* tcSemnaturi = tcSemnaturi+CHR(9)+CHR(9)+CHR(9)+CHR(9) +Select v_date +Use +Endproc +*----------------------------------sfarsit procedura param_listari---------------------------------- +** --------------------------------INCEPUT: facturi_duplicate ------------------------------ +Procedure facturi_duplicate +Parameters tcCont, tnId_Part, tnNract, tcMesajReturn + +Private pcCont, pnNract, pnId_part +Local lcMesaj, MesajReturn +lcMesaj = '' +pcCont = tcCont +pnId_part = tnId_Part +pnNract = tnNract +lcMesajReturn = tcMesajReturn + +If !(Alltrim(Str(pnNract))$lcMesajReturn) + If Inlist(Allt(pcCont),'4111','401','404') + lnTotctva = 0 + Do Case + Case Allt(pcCont) = '4111' + lcSql = [select count(*) as nr_ireg, sum(debit) as debit from ireg_parteneri ]+; + [ where an=?gnAn and luna=?gnLuna and cont = ?pcCont and nract = ?pnNract]+; + [ and extract(year from dataireg)*12+extract(month from dataireg) = ?gnAn*12+?gnLuna ] + lcCursor = [crsFactDbl] + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + goExecutor.Oreset() + + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare,0+16,'Eroare') + Return + Endif + + Select crsFactDbl + If nr_ireg > 0 + lnTotctva = debit + lcMesaj = 'Factura '+Allt(Str(pnNract)) + ", "+ Alltrim(Transform(lnTotctva, get_mask(14,GnPA)))+' lei, mai exista inregistrata in luna curenta.' + Endif + + Case Allt(pcCont) = '401' + lcSql = [select count(*) as nr_ireg, sum(credit) as credit from ireg_parteneri ]+; + [ where an=?gnAn and luna=?gnLuna and cont = ?pcCont and nract = ?pnNract]+; + [ and extract(year from dataireg)*12+extract(month from dataireg) = ?gnAn*12+?gnLuna ]+; + [ and id_part = ?pnId_part] + lcCursor = [crsFactDbl] + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + goExecutor.Oreset() + + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare,0+16,'Eroare') + Return + Endif + + Select crsFactDbl + If nr_ireg > 0 + lnTotctva = credit + lcMesaj = 'Factura '+Allt(Str(pnNract)) + ", "+ Alltrim(Transform(lnTotctva, get_mask(14,GnPA)))+' lei, mai exista inregistrata in luna curenta.' + Endif + Case Allt(pcCont) = '404' + lcSql = [select count(*) as nr_ireg, sum(credit) as credit from vireg_parteneri ]+; + [ where an=?gnAn and luna=?gnLuna and cont = ?pcCont and nract = ?pnNract]+; + [ and extract(year from dataireg)*12+extract(month from dataireg) = ?gnAn*12+?gnLuna ]+; + [ and id_part = ?pnId_part] + lcCursor = [crsFactDbl] + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + goExecutor.Oreset() + + If lnSucces < 0 + AMESSAGEBOX(goExecutor.cEroare,0+16,'Eroare') + Return + Endif + + Select crsFactDbl + If nr_ireg > 0 + lnTotctva = credit + lcMesaj = 'Factura '+Allt(Str(pnNract)) + ", "+ Alltrim(Transform(lnTotctva, get_mask(14,GnPA)))+' lei, mai exista inregistrata in luna curenta.' + Endif + Endcase + + Endif +Endif + +Return lcMesaj + +Endproc && facturi_duplicate +&& ------------------------------SFARSIT: facturi_duplicate ------------------------------ + + + + diff --git a/Formulare/test_listare_factura/proceduri_rapoarte.prg b/Formulare/test_listare_factura/proceduri_rapoarte.prg new file mode 100644 index 0000000..21e8d94 --- /dev/null +++ b/Formulare/test_listare_factura/proceduri_rapoarte.prg @@ -0,0 +1,179 @@ +*!* PROCEDURI_RAPOARTE.PRG + + +*!* LISTARE RAPORT UTILIZATOR +*!* PARAMETRI : tcAlias - alias-ul cursorului; tcTipExport - FRX/XLS; tcRaport - numele raportului +*!* Se listeaza raportul USR_ din directorul \\SERVER\ROA\USERREPORTS\\\ daca exista +*!* Daca nu exista raporturl USR_ se listeaza raportul default +PROCEDURE LISTAREUSERREPORT +LPARAMETERS tcAlias, tcTipExport, tcRaport, toListener, tnPreview, tcImprimanta +** Valori pentru tnPreview +** 1 - cu vizualizare +** 2 - listare directa + +LOCAL lcSelect, lcRaportPath, lcTipExport, lnPreview, lcImprimanta +STORE [] TO lcImprimanta + +IF TYPE('tcTipExport') = 'C' + lcTipExport = UPPER(ALLTRIM(tcTipExport)) +ELSE + IF EMPTY(tcRaport) + lcTipExport = 'XLS' + ELSE + lcTipExport = 'FRX' + ENDIF +ENDIF +IF EMPTY(tcAlias) + RETURN +ENDIF +IF !USED(tcAlias) + RETURN +ENDIF +IF EMPTY(tnPreview) + lnPreview = 1 +ELSE + lnPreview = tnPreview +ENDIF + +DO CASE +CASE lcTipExport = 'FRX' + IF !EMPTY(tcImprimanta) +*!* verificare ca tcImprimanta este instalata pe calculatorul respectiv + IF APRINTERS(laPrinters) > 0 AND ASCAN(laPrinters,tcImprimanta,1,ALEN(laPrinters,1),1,15) > 0 + lcImprimanta = tcImprimanta + ENDIF + ENDIF + + RELEASE laPrinters + + lcRaportPath = getUserRepPath() + [USR_] + JUSTSTEM(tcRaport) + [.FRX] + + IF !FILE(lcRaportPath) + lcRaportPath = tcRaport + ENDIF + + lcSelect = SELECT() + IF !EMPTY(tcAlias) AND USED(tcAlias) + SELECT (tcAlias) + ENDIF + + lnRaspuns = 6 + DO WHILE lnRaspuns = 6 + TRY + IF !EMPTY(toListener) + REPORT FORM (lcRaportPath) OBJECT toListener + ELSE + IF lnPreview = 1 + KEYBOARD '{CTRL+F10}' + REPORT FORM (lcRaportPath) TO PRINTER PROMPT PREVIEW + ELSE + IF !EMPTY(lcImprimanta) + lcImprimantaTemp = SYS(6) + SET PRINTER TO NAME (lcImprimanta) + REPORT FORM (lcRaportPath) TO PRINTER + IF !EMPTY(NVL(lcImprimantaTemp,[])) + SET PRINTER TO (lcImprimantaTemp) + ELSE + SET PRINTER TO + ENDIF + ELSE + REPORT FORM (lcRaportPath) TO PRINTER PROMPT + ENDIF + ENDIF + ENDIF + lnRaspuns = 7 + CATCH TO oEroare + IF oEroare.MESSAGE='Error loading driver error.' + lnRaspuns = aMESSAGEBOX("Eroare la driverul imprimantei.Doriti sa reincercati listarea?",4+32+256,"Confirmare relistare") + ELSE + aMESSAGEBOX(oEroare.MESSAGE,16,"Eroare") + lnRaspuns = 7 + ENDIF + ENDTRY + ENDDO + + SELECT (lcSelect) + +CASE lcTipExport = 'XLS' + export_xls(tcAlias) +ENDCASE + + +ENDPROC && LISTAREUSERREPORT + +********************* INCEPUT Modifica_raport_utilizator ********************** +* PROCEDURE Modifica_raport_utilizator +* Date : 26.07.2006, 17:44:33 +* author : marius.mutu +PROCEDURE Modifica_raport_utilizator + +lcUserRepPath = getUserRepPath() +CD (lcUserRepPath) +lcFile = GETFILE("frx","Alegeti un raport","Alege") +IF FILE(lcFile) AND UPPER(JUSTEXT(lcFile)) = "FRX" + MODIFY REPORT (lcFile) +ENDIF + +ENDPROC && Modifica_raport_utilizator +********************* SFARSIT Modifica_raport_utilizator ********************** + +*!* INTOARCE DIRECTORUL CU RAPOARTE UTILIZATOR PENTRU APLICATIA, SCHEMA CURENTA +FUNCTION getUserRepPath +LOCAL lcAppPath, lcAppName, liAt, lcDirgen, lcUserRepPath +lcAppPath=ADDBS(JUSTPATH(SYS(16,0))) +lcAppName=ALLT(UPPE(JUSTSTEM(SYS(16,0)))) +liAt=RAT("\",lcAppPath,2) +lcDirgen=ADDBS(LEFT(lcAppPath,liAt-1)) +lcUserRepPath = lcDirgen + 'USERREPORTS\' +IF !DIRECTORY(lcUserRepPath) + MD (lcUserRepPath) +ENDIF +lcUserRepPath = lcUserRepPath + lcAppName + '\' +IF !DIRECTORY(lcUserRepPath) + MD (lcUserRepPath) +ENDIF +lcUserRepPath = lcUserRepPath + gcS + '\' +IF !DIRECTORY(lcUserRepPath) + MD (lcUserRepPath) +ENDIF + +RETURN lcUserRepPath + +ENDFUNC + +**************************************************************************** +*!* extrage frx din executabil pe disc in directorul USERREPORTS +PROCEDURE UserReport2File +LPARAMETERS tcRaport + +LOCAL lcRaport, lcFile +IF EMPTY(tcRaport) + lcRaport= INPUTBOX("Raport","Scrieti numele raportului","raport.frx") +ELSE + lcRaport = tcRaport +ENDIF + +IF EMPTY(lcRaport) + RETURN +ENDIF + +lcRaport = JUSTSTEM(lcRaport) + '.frx' +lcFile = getUserRepPath() + "USR_" + lcRaport +IF FILE(lcFile) + RETURN +ENDIF + +*!* TRY +*!* USE (lcRaport) IN 0 again SHARED ALIAS crsRaportTemp +*!* ENDTRY + +IF !FILE(lcRaport) + aMESSAGEBOX('Nu exista raportul ' + lcRaport) +ELSE + USE (lcRaport) IN 0 AGAIN SHARED ALIAS crsRaportTemp + SELECT crsRaportTemp + COPY TO (lcFile) + USE IN crsRaportTemp +ENDIF + +ENDPROC && UserReport2File \ No newline at end of file diff --git a/Formulare/test_listare_factura/sel.txt b/Formulare/test_listare_factura/sel.txt new file mode 100644 index 0000000..1ff89a1 --- /dev/null +++ b/Formulare/test_listare_factura/sel.txt @@ -0,0 +1 @@ +select 1 as tip,(case when tip_persoana = 1 then prefix||' '||denumire||' '||sufix else denumire end) as denumire,cod_fiscal,adresa,telefon,'' as telefon2,'' as telefon3,'' as fax,reg_comert,banca,cont_banca,sysdate as dataora,tip_persoana,0 as capital_soc_var,0 as capital_soc_sub from jcsserver.vnom_parteneri where id_part = ?poDate.id_client union all select 2 as tip,denumire,cod_fiscal,'' as adresa,'' as telefon,'' as telefon2,'' as telefon3,'' as fax,reg_comert,'' as banca,'' as cont_banca,null as dataora,tip_persoana,0 as capital_soc_var,0 as capital_soc_sub from jcsserver.nom_parteneri where sters = 0 and inactiv = 0 and id_part in (select id_partener from jcsserver.utilizatori_rol_intern where sters = 0 and id_util = ?gnIdUtil)union all select 3 as tip,antet as denumire,cod_fiscal,adresa,telefon,telefon2,telefon3,fax,reg_comert,banca1 as banca,cont_banca1 as cont_banca,null as dataora,0 as tip_persoana,capital_soc_var,capital_soc_sub from syn_nom_firme where id_firma = ?gnIdFirma \ No newline at end of file diff --git a/Formulare/test_listare_factura/suma_in_vorbe.prg b/Formulare/test_listare_factura/suma_in_vorbe.prg new file mode 100644 index 0000000..5909cc6 --- /dev/null +++ b/Formulare/test_listare_factura/suma_in_vorbe.prg @@ -0,0 +1,205 @@ +*!* Function SUMA_IN_VORBE +Parameter tnSuma +Local i,lit,numar1,numar2 +Store 0 To i,j,lnSuma,lnSuma2 +Store 1 To putere +Store '' To lit,numar1,numar2 +If Used('mila1') + Use In mila1 +Endif +Use mila1 In 0 Shared + +lnSuma=Round(tnSuma,2) +lnSuma2=(lnSuma-Int(lnSuma))*100 +lnSuma=Int(lnSuma) + +*!* lnSuma=ROUND(lnSuma,gnPa) +*!* FOR j=1 TO gnPa +*!* putere=10*putere +*!* ENDFOR +*!* lnSuma2=(lnSuma-Int(lnSuma))*putere + +numar1=Space(12) +*!* numar2=Space(gnPa) +numar2=Space(2) + +numar1=Str(lnSuma,12) +*!* numar2=Str(lnSuma2,gnPa) +numar2=Str(lnSuma2,2) + +Dimension A(12) +A(1)=Subs(numar1,12,1) +A(2)=Subs(numar1,11,1) +A(3)=Subs(numar1,10,1) +A(4)=Subs(numar1,9,1) +A(5)=Subs(numar1,8,1) +A(6)=Subs(numar1,7,1) +A(7)=Subs(numar1,6,1) +A(8)=Subs(numar1,5,1) +A(9)=Subs(numar1,4,1) +A(10)=Subs(numar1,3,1) +A(11)=Subs(numar1,2,1) +A(12)=Subs(numar1,1,1) +Sele mila1 +********************* +Loca For NR=Val(A(12)) +lit=lit+Alltri(cr1) + +If Val(A(11))=1 + If Val(A(10))=0 + Loca For NR=Val(A(11)) + lit=lit+Alltri(cr5) + Else + Loca For NR=Val(A(10)) + lit=lit+Alltri(cr4) + Endif +Else + If Val(A(10))=0 + Loca For NR=Val(A(11)) + lit=lit+Alltrim(cr5) + Else + Loca For NR=Val(A(11)) + lit=lit+Alltrim(cr2) + Loca For NR=Val(A(10)) + lit=lit+Alltrim(cr3) + Endif +Endif +Do Case +Case Val(A(12)) # 0 + lit=lit+' miliarde' +Case Val(A(11)) # 0 + lit=lit+' miliarde' +Case Val(A(10)) # 0 + lit=lit+' miliarde' +Endcase +*********************** +Loca For NR=Val(A(9)) +lit=lit+Alltri(cr1) + +If Val(A(8))=1 + If Val(A(7))=0 + Loca For NR=Val(A(8)) + lit=lit+Alltri(cr5) + Else + Loca For NR=Val(A(7)) + lit=lit+Alltri(cr4) + Endif +Else + If Val(A(7))=0 + Loca For NR=Val(A(8)) + lit=lit+Alltrim(cr5) + Else + Loca For NR=Val(A(8)) + lit=lit+Alltrim(cr2) + Loca For NR=Val(A(7)) + lit=lit+Alltrim(cr3) + Endif +Endif +Do Case +Case Val(A(9)) # 0 + lit=lit+' milioane' +Case Val(A(8)) # 0 + lit=lit+' milioane' +Case Val(A(7)) # 0 + lit=lit+' milioane' +Endcase +*********************** +Loca For NR=Val(A(6)) +lit=lit+Alltri(cr1) + +If Val(A(5))=1 + If Val(A(4))=0 + Loca For NR=Val(A(5)) + lit=lit+Alltri(cr5) + Else + Loca For NR=Val(A(4)) + lit=lit+Alltri(cr4) + Endif +Else + If Val(A(4))=0 + Loca For NR=Val(A(5)) + lit=lit+Alltrim(cr5) + Else + Loca For NR=Val(A(5)) + lit=lit+Alltrim(cr2) + Loca For NR=Val(A(4)) + lit=lit+Alltrim(cr3) + Endif +Endif +Do Case +Case Val(A(6)) # 0 + lit=lit+' mii' +Case Val(A(5)) # 0 + lit=lit+' mii' +Case Val(A(4)) # 0 + lit=lit+' mii' +Endcase + +********************* +Loca For NR=Val(A(3)) +lit=lit+Alltri(cr1) + +If Val(A(2))=1 + If Val(A(1))=0 + Loca For NR=Val(A(2)) + lit=lit+Alltri(cr5) + Else + Loca For NR=Val(A(1)) + lit=lit+Alltri(cr4) + Endif +Else + If Val(A(1))=0 + Loca For NR=Val(A(2)) + lit=lit+Alltrim(cr5) + Else + Loca For NR=Val(A(2)) + lit=lit+Alltrim(cr2) + Loca For NR=Val(A(1)) + lit=lit+Alltrim(cr3) + Endif +Endif +Do Case +Case Val(A(3)) # 0 + lit=lit+' lei' +Case Val(A(2)) # 0 + lit=lit+' lei' +Case Val(A(1)) # 0 + lit=lit+' lei' +Endcase + + +********************* +Do Case +Case lnSuma2>1 + lit=lit+' si' + Dimension B(2) + B(1)=Subs(numar2,2,1) + B(2)=Subs(numar2,1,1) + + Do Case + Case Val(B(2))=1 And Val(B(1))!=0 + Loca For NR=Val(B(1)) + lit=lit+Alltri(cr4) + Case Val(B(2))=0 + Loca For NR=Val(B(1)) + lit=lit+Alltrim(cr3) + Case Val(B(1))=0 + Loca For NR=Val(B(2)) + lit=lit+Alltrim(cr5) + Otherwise + Loca For NR=Val(B(2)) + lit=lit+Alltrim(cr2) + Loca For NR=Val(B(1)) + lit=lit+Alltrim(cr3) + Endcase + lit=lit+' bani' +Case lnSuma2=1 + lit=lit+'si un ban' +Endcase + +Sele mila1 +*!* use + +lit=Strtran(lit,' ','') +Use In mila1 +Return lit \ No newline at end of file diff --git a/Formulare/test_listare_factura/test_listare_factura.prg b/Formulare/test_listare_factura/test_listare_factura.prg new file mode 100644 index 0000000..1692ee0 --- /dev/null +++ b/Formulare/test_listare_factura/test_listare_factura.prg @@ -0,0 +1,245 @@ +*tnIdClient,tcCursor,tcSirNrOrd,tcNrInmat,tnTipfact,tnProcDiscM,tnProcDiscN,tnDiscountM,tnDiscountN,tnDiscountTvaM,tnDiscountTvaN,tcdenop +SET DELETED ON +SET CENTURY ON +SET ANSI ON +SET EXACT ON +SET DATE DMY +SET SAFETY OFF + +*CLOSE DATABASES ALL + +lcDir = "C:\TEST_LISTARE_FACTURA\" +*lcDir = "d:\roa_rb\roaauto\test\test_listare_factura\" +CD (lcDir) +messagebox(lcDir) +lcHost = "roa_arrow" +lcUserName = "auto_arrow" +lcPassword = "123" +PRIVATE gnHandle +gnHandle = 0 +gnTIP_LFACTURA = 1 +plEmiteBon = .F. +PRIVATE gcS +gcS = lcUserName +PRIVATE gnIdFirma, gnIdUtil +gnIdFirma = 1 +gnIdUtil = 1 +PRIVATE GNCGARANTIE +GNCGARANTIE = 0 +PRIVATE GNPA, gnLuna, gnAn, gnAnRon, gnLunaRon, gnPc +gnLuna = 7 +gnAn = 2007 +gnAnRon = 2005 +gnLunaRon = 7 +gnPc = 2 +GNPA = 2 +pntotftva = 100 +pntottva = 19 +pntotctva = 119 +pcNumeresp = "" +pcbidresp = "" +pccnpresp = "" + +SET DEFAULT TO (lcDir) +SET PATH TO (lcDir) +SET PROCEDURE TO oproceduri_comune.prg ADDITIVE +SET PROCEDURE TO proceduri_rapoarte.prg ADDITIVE +SET PROCEDURE TO test_listare_factura.prg ADDITIVE + +PRIVATE goExecutor +goExecutor = CREATEOBJECT("oExecutor") + +PRIVATE goConn +goConn = CREATEOBJECT("oConn") +gnHandle = goConn.CONNECT(lcHost, lcUserName, lcPassword) + + +IF !USED('actactan') + USE actactan IN 0 SHARED +ENDIF + + +DO listare_factura WITH 34,"actactan","59/CT-02-ZIP","CT-02-ZIP",1,0,0,0,0,0,0,"MANOPERA" + +goConn.Disconnect() + +PROCEDURE listare_factura + PARAMETERS tnIdClient,tcCursor,tcSirNrOrd,tcNrInmat,tnTipfact,tnProcDiscM,tnProcDiscN,tnDiscountM,tnDiscountN,tnDiscountTvaM,tnDiscountTvaN,tcdenop + + IF EMPTY(tcdenop) + STORE 'MANOPERA' TO tcdenop + ENDIF + + IF EMPTY(tnProcDiscN) + STORE 0 TO tnProcDiscN,tnDiscountN,tnDiscountTvaN + ENDIF + + IF EMPTY(tnProcDiscM) + STORE 0 TO tnProcDiscM,tnDiscountM,tnDiscountTvaM + ENDIF + + tnDiscountN = ABS(tnDiscountN) + tnDiscountM = ABS(tnDiscountM) + + PRIVATE poDate,poFirma,poClient,ptDataOra + poDate = CREATEOBJECT('oDateFacturaDevize',tnIdClient,tcSirNrOrd,tcNrInmat,IIF(tnTipfact=4,1,0)) + lcSql = [select 1 as tip,(case when tip_persoana = 1 then prefix||' '||denumire||' '||sufix else denumire end) as denumire,]+; + [cod_fiscal,adresa,telefon,'' as telefon2,'' as telefon3,'' as fax,reg_comert,banca,cont_banca,sysdate as dataora,tip_persoana,0 as capital_soc_var,] + ; + [0 as capital_soc_sub from ] + gcS + [.vnom_parteneri where id_part = ?poDate.id_client ] + ; + [union all ] + ; + [select 2 as tip,denumire,cod_fiscal,'' as adresa,'' as telefon,'' as telefon2,'' as telefon3,'' as fax,reg_comert,'' as banca,'' as cont_banca,] + ; + [null as dataora,tip_persoana,0 as capital_soc_var,0 as capital_soc_sub from ] + gcS + [.nom_parteneri ] + ; + [where sters = 0 and inactiv = 0 and id_part in ] + ; + [(select id_partener from ] + gcS + [.utilizatori_rol_intern where sters = 0 and id_util = ?gnIdUtil)] + ; + [union all ] + ; + [select 3 as tip,antet as denumire,cod_fiscal,adresa,telefon,telefon2,telefon3,fax,reg_comert,banca1 as banca,] + ; + [cont_banca1 as cont_banca,null as dataora,0 as tip_persoana,capital_soc_var,capital_soc_sub ] + ; + [from syn_nom_firme where id_firma = ?gnIdFirma ] + IF USED('crsdatefacturare') + USE IN crsdatefacturare + ENDIF + lcCursor = [crsdatefacturare] + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + IF lnSucces<0 + amessagebox(goExecutor.oPrelucrareEroare(),16,"Eroare") + RETURN + ENDIF + SELECT crsdatefacturare + SCAN + DO CASE + CASE tip = 1 + SCATTER NAME poClient + ptDataOra = poClient.dataora + CASE tip = 2 + WITH poDate + .nume_responsabil = denumire + .BIresp = reg_comert + .CNPresp = cod_fiscal + ENDWITH + OTHERWISE + SCATTER NAME poFirma + ENDCASE + ENDSCAN + USE IN crsdatefacturare + + *!* ofrmdelegat=Createobject("frm_delegat_factura") + *!* ofrmdelegat.nidpartener = poDate.id_client + *!* ofrmdelegat.cclient = poDate.nume_client + *!* ofrmdelegat.cnrinmat_exp = poDate.nrinmat_del + *!* ofrmdelegat.Show(1) + *!* Release ofrmdelegat + + PRIVATE pnSumaMat,pnSumaMan,pnTvaMat,pnTvaMan,pnDiscMan,pnDiscMat,pnTvaDiscMan,pnTvaDiscMat,pnAvans,pnTvaAvans + STORE 0 TO pnSumaMat,pnSumaMan,pnTvaMat,pnTvaMan,pnDiscMan,pnDiscMat,pnTvaDiscMan,pnTvaDiscMat,pnAvans,pnTvaAvans + + SELECT &tcCursor + SUM suma FOR ALLTRIM(scd) = '4111' AND ALLTRIM(scc) = '707' AND LEFT(ALLTRIM(explicatia),3) = "MAT" TO pnSumaMat + SUM suma FOR ALLTRIM(scd) = '4111' AND ALLTRIM(scc) = '4427' AND LEFT(ALLTRIM(explicatia),7) = "TVA MAT" TO pnTvaMat + *!* Sum suma For Alltrim(scd) = '411' And Alltrim(scc) = '707' And Left(Alltrim(explicatia),12) = "DISCOUNT MAT" To pnDiscMat + SUM suma FOR ALLTRIM(scd) = '4111' AND ALLTRIM(scc) = '4427' AND LEFT(ALLTRIM(explicatia),12) = "DISCOUNT MAT" TO pnTvaDiscMat + + SUM suma FOR ALLTRIM(scd) = '4111' AND ALLTRIM(scc) = '704' AND LEFT(ALLTRIM(explicatia),3) = "MAN" TO pnSumaMan + SUM suma FOR ALLTRIM(scd) = '4111' AND ALLTRIM(scc) = '4427' AND LEFT(ALLTRIM(explicatia),7) = "TVA MAN" TO pnTvaMan + *!* Sum suma For Alltrim(scd) = '411' And Alltrim(scc) = '704' And Left(Alltrim(explicatia),12) = "DISCOUNT MAN" To pnDiscMan + SUM suma FOR ALLTRIM(scd) = '4111' AND ALLTRIM(scc) = '4427' AND LEFT(ALLTRIM(explicatia),12) = "DISCOUNT MAN" TO pnTvaDiscMan + + SELECT &tcCursor + *!* Locate For Alltrim(explicatia ) = 'STORNARE AVANS' + *!* If Found() + *!* pnAvans = (-1) * Abs(&tcCursor..suma) + *!* Endif + CALCULATE SUM(suma) FOR ALLTRIM(explicatia)='STORNARE AVANS' TO pnAvans + CALCULATE SUM(suma) FOR ALLTRIM(explicatia)='STORNARE AVANS' AND ALLTRIM(scc)<>'4427' TO pnAvansFTva + CALCULATE SUM(suma) FOR ALLTRIM(explicatia)='STORNARE AVANS' AND ALLTRIM(scc)='4427' TO pnAvansTva + pnAvans=(-1) * ABS(ROUND(pnAvans,GNPA)) + pnAvansTva=(-1) * ABS(ROUND(pnAvansTva,GNPA)) + pnAvansFTva=(-1) * ABS(ROUND(pnAvansFTva,GNPA)) + + PRIVATE plAchitat,plEmiteBon + STORE .T. TO plAchitat,plEmiteBon + + SELECT &tcCursor + LOCATE FOR ALLTRIM(scd) = '4111' + IF FOUND() + poDate.nract = &tcCursor..nract + poDate.dataact = &tcCursor..dataact + poDate.proc_tva = &tcCursor..proc_tva*100-100 + poDate.datascad = &tcCursor..datascad + ENDIF + + SELECT &tcCursor + LOCATE FOR ALLTRIM(scd) = '5311' + DO CASE + CASE FOUND() AND pnTipIncasare=2 + STORE .F. TO plAchitat + STORE .T. TO plEmiteBon + poDate.nrchit = &tcCursor..nract + poDate.sumaachit = &tcCursor..suma + CASE FOUND() AND pnTipIncasare=3 + STORE .F. TO plEmiteBon + poDate.nrchit = &tcCursor..nract + poDate.datachit = &tcCursor..dataact + poDate.sumaachit = &tcCursor..suma + poDate.sumavorbe = SUMA_IN_VORBE(ROUND(poDate.sumaachit,gnPc)) + OTHERWISE + STORE .F. TO plEmiteBon + STORE .F. TO plAchitat + ENDCASE + + *------------------- + *!* modificare 07.04 + *!* pnDiscMan = tnDiscountM + *!* pnDiscMat = tnDiscountN + pnDiscMan = SIGN(pnSumaMan) * tnDiscountM + tnDiscountM = SIGN(pnSumaMan) * tnDiscountM + pnTvaDiscMan = (-1) * pnTvaDiscMan + + pnDiscMat = SIGN(pnSumaMat) * tnDiscountN + tnDiscountN = SIGN(pnSumaMat) * tnDiscountN + pnTvaDiscMat = (-1) * pnTvaDiscMat + *!* modificare ^ + + + REPORT FORM usr_factav_cuchit TO PRINTER PROMPT PREVIEW + + + RELEASE poDate +ENDPROC && listare_factura +********************************************************************************************************* + +DEFINE CLASS oDateFacturaDevize AS CUSTOM + devize_multiple = 0 + listanrord = [] + dataact = {} + datascad = {} + nract = 0 + id_client = NULL + nume_client = [] + nume_responsabil= [] && alte date pentru facturare + BIresp = [] + CNPresp = [] + id_delegat = NULL + nume_delegat = [] + BIdelegat = [] + elibdelegat = [] + CNPdelegat = [] + eliberatde = [] + nrinmat_del = [] + proc_tva = 0 + nrchit = 0 + datachit = {} + sumaachit = 0 + sumavorbe = [] + text_aditional = [] + + PROCEDURE INIT + LPARAMETERS tnIdPartener,tcSirNrOrd,tcNrInmat,tnDevize + WITH THIS + .id_client = tnIdPartener + .nrinmat_del = tcNrInmat + .devize_multiple = tnDevize + .listanrord = tcSirNrOrd + ENDWITH + ENDPROC + +ENDDEFINE diff --git a/Formulare/test_listare_factura/usr_fact_cuchit.FRT b/Formulare/test_listare_factura/usr_fact_cuchit.FRT new file mode 100644 index 0000000..b9b037e Binary files /dev/null and b/Formulare/test_listare_factura/usr_fact_cuchit.FRT differ diff --git a/Formulare/test_listare_factura/usr_fact_cuchit.frx b/Formulare/test_listare_factura/usr_fact_cuchit.frx new file mode 100644 index 0000000..545f06c Binary files /dev/null and b/Formulare/test_listare_factura/usr_fact_cuchit.frx differ diff --git a/Formulare/test_listare_factura/usr_fact_farachit.FRT b/Formulare/test_listare_factura/usr_fact_farachit.FRT new file mode 100644 index 0000000..ddbbc59 Binary files /dev/null and b/Formulare/test_listare_factura/usr_fact_farachit.FRT differ diff --git a/Formulare/test_listare_factura/usr_fact_farachit.frx b/Formulare/test_listare_factura/usr_fact_farachit.frx new file mode 100644 index 0000000..6f7cde9 Binary files /dev/null and b/Formulare/test_listare_factura/usr_fact_farachit.frx differ diff --git a/Formulare/test_listare_factura/usr_factav_cuchit.frt b/Formulare/test_listare_factura/usr_factav_cuchit.frt new file mode 100644 index 0000000..791c52d Binary files /dev/null and b/Formulare/test_listare_factura/usr_factav_cuchit.frt differ diff --git a/Formulare/test_listare_factura/usr_factav_cuchit.frx b/Formulare/test_listare_factura/usr_factav_cuchit.frx new file mode 100644 index 0000000..03a4bfb Binary files /dev/null and b/Formulare/test_listare_factura/usr_factav_cuchit.frx differ diff --git a/Formulare/test_listare_factura/usr_factav_farachit.FRT b/Formulare/test_listare_factura/usr_factav_farachit.FRT new file mode 100644 index 0000000..1fc4fd1 Binary files /dev/null and b/Formulare/test_listare_factura/usr_factav_farachit.FRT differ diff --git a/Formulare/test_listare_factura/usr_factav_farachit.frx b/Formulare/test_listare_factura/usr_factav_farachit.frx new file mode 100644 index 0000000..1e1ce8b Binary files /dev/null and b/Formulare/test_listare_factura/usr_factav_farachit.frx differ diff --git a/Grafice/clie1.bmp b/Grafice/clie1.bmp new file mode 100644 index 0000000..e36837d Binary files /dev/null and b/Grafice/clie1.bmp differ diff --git a/Grafice/clie2.bmp b/Grafice/clie2.bmp new file mode 100644 index 0000000..e975ae0 Binary files /dev/null and b/Grafice/clie2.bmp differ diff --git a/Grafice/fact1.bmp b/Grafice/fact1.bmp new file mode 100644 index 0000000..ac20cdd Binary files /dev/null and b/Grafice/fact1.bmp differ diff --git a/Grafice/fact2.bmp b/Grafice/fact2.bmp new file mode 100644 index 0000000..d75176c Binary files /dev/null and b/Grafice/fact2.bmp differ diff --git a/Grafice/gene1.bmp b/Grafice/gene1.bmp new file mode 100644 index 0000000..0de72b1 Binary files /dev/null and b/Grafice/gene1.bmp differ diff --git a/Grafice/gene2.bmp b/Grafice/gene2.bmp new file mode 100644 index 0000000..c4f2c79 Binary files /dev/null and b/Grafice/gene2.bmp differ diff --git a/Grafice/logo_template.jpg b/Grafice/logo_template.jpg new file mode 100644 index 0000000..cf345bf Binary files /dev/null and b/Grafice/logo_template.jpg differ diff --git a/Grafice/norm1.bmp b/Grafice/norm1.bmp new file mode 100644 index 0000000..605b7f4 Binary files /dev/null and b/Grafice/norm1.bmp differ diff --git a/Grafice/norm2.bmp b/Grafice/norm2.bmp new file mode 100644 index 0000000..bef723a Binary files /dev/null and b/Grafice/norm2.bmp differ diff --git a/Grafice/roaauto.bmp b/Grafice/roaauto.bmp new file mode 100644 index 0000000..16ac086 Binary files /dev/null and b/Grafice/roaauto.bmp differ diff --git a/Grafice/valid1.bmp b/Grafice/valid1.bmp new file mode 100644 index 0000000..1dcb771 Binary files /dev/null and b/Grafice/valid1.bmp differ diff --git a/Grafice/valid2.bmp b/Grafice/valid2.bmp new file mode 100644 index 0000000..b8f16ef Binary files /dev/null and b/Grafice/valid2.bmp differ diff --git a/Help/manual_ROAAUTO.pdf b/Help/manual_ROAAUTO.pdf new file mode 100644 index 0000000..cfcb64f Binary files /dev/null and b/Help/manual_ROAAUTO.pdf differ diff --git a/Initializari/euro500t.txt.template b/Initializari/euro500t.txt.template new file mode 100644 index 0000000..e142748 --- /dev/null +++ b/Initializari/euro500t.txt.template @@ -0,0 +1,5 @@ + /t /RO /com: /speed:38400 /ecr:10 /data_file: + + +[/com:n] [/speed:nnnn] [/ecr:nn] [/num:nn] [/o:nnn] [/start:nnn] [/len:nnn] [/cfg:ssssss] [/tel:ttttttt] +[/data_file:file] [/cfg_file:file] [/err_file:file] [/run_file :f ile] [/drm:drm] [/online_wait:time] diff --git a/Initializari/euro500t_erori.xml.template b/Initializari/euro500t_erori.xml.template new file mode 100644 index 0000000..c3faebc --- /dev/null +++ b/Initializari/euro500t_erori.xml.template @@ -0,0 +1,134 @@ + + +1 +Communication error +Eroare de comunicare + + + +3 +Not finished sale in ECR, firstly finish the sale! +Vanzare neterminata in ECR!Terminati mai intai vanzarea! + + + +4 +Tax assignment out of range, or not active tax! +Cota de tva inexistenta sau inactiva! + + + +5 +DPT assignment out of range +Departament inexistent! + + + +6 +Sale unit out of range! + + + + +7 +Quantity out of range + + + + +8 +Price out of range + + + + +9 +Forbidden Online in particular mode! + + + + +10 +Command out of range or 2 times called command "3" or "4"! + + + + +11 +PLU number out of range + + + + +12 +Text out of character set + + + + +13 +Payment value out of range + + + + +14 +Payment type out of range + + + + +15 +Currency out of range! + + + + +16 +Sale command but sale no started! + + + + +30 +Number of serial port out of range! +Numarul portului serial nu este valid! + + + +31 +ECR number out of range +Numarul casei de marcat nu este valid! + + + +32 +Incorrect ECR type! +Tipul casei de marcat specificat in fisierul de configurare este incorect! + + + +33 +Incorrect communication speed in SETUP.DAT file +Viteza de comunicare specificata in fisierul de configurare este incorecta! + + + +34 +Error in ITEMS.TXT +Eroare in fisierul ITEMS.TXT! + + + +35 +Time-out error +Casa de marcat nu este deschisa sau nu este conectata la computer! + + + +36 +To open SETUP.DAT file impossible or do not exist +Eroare la deschiderea fisierului de configurare! + + + \ No newline at end of file diff --git a/Initializari/roaauto_bon.xml.template b/Initializari/roaauto_bon.xml.template new file mode 100644 index 0000000..f56fc15 --- /dev/null +++ b/Initializari/roaauto_bon.xml.template @@ -0,0 +1,11 @@ + + + +\INITIALIZARI\ +1 +C:\EURO500\ +ONLINE.EXE +ITEMS.TXT +1 + + \ No newline at end of file diff --git a/Meniuri/DEVIZE.mpx b/Meniuri/DEVIZE.mpx new file mode 100644 index 0000000..cbdd26d Binary files /dev/null and b/Meniuri/DEVIZE.mpx differ diff --git a/Meniuri/analize_prod_neterm.MNT b/Meniuri/analize_prod_neterm.MNT new file mode 100644 index 0000000..e42b13a Binary files /dev/null and b/Meniuri/analize_prod_neterm.MNT differ diff --git a/Meniuri/analize_prod_neterm.mnx b/Meniuri/analize_prod_neterm.mnx new file mode 100644 index 0000000..cddf5e5 Binary files /dev/null and b/Meniuri/analize_prod_neterm.mnx differ diff --git a/Meniuri/editscurt.MNT b/Meniuri/editscurt.MNT new file mode 100644 index 0000000..93b0b23 Binary files /dev/null and b/Meniuri/editscurt.MNT differ diff --git a/Meniuri/editscurt.mnx b/Meniuri/editscurt.mnx new file mode 100644 index 0000000..84a309f Binary files /dev/null and b/Meniuri/editscurt.mnx differ diff --git a/Meniuri/listari_facturi.MNT b/Meniuri/listari_facturi.MNT new file mode 100644 index 0000000..6e21380 Binary files /dev/null and b/Meniuri/listari_facturi.MNT differ diff --git a/Meniuri/listari_facturi.mnx b/Meniuri/listari_facturi.mnx new file mode 100644 index 0000000..24d6eab Binary files /dev/null and b/Meniuri/listari_facturi.mnx differ diff --git a/Meniuri/listari_manopera.MNT b/Meniuri/listari_manopera.MNT new file mode 100644 index 0000000..1732b6b Binary files /dev/null and b/Meniuri/listari_manopera.MNT differ diff --git a/Meniuri/listari_manopera.mnx b/Meniuri/listari_manopera.mnx new file mode 100644 index 0000000..6618eb2 Binary files /dev/null and b/Meniuri/listari_manopera.mnx differ diff --git a/Meniuri/roaauto.MNT b/Meniuri/roaauto.MNT new file mode 100644 index 0000000..6544a1c Binary files /dev/null and b/Meniuri/roaauto.MNT differ diff --git a/Meniuri/roaauto.mnx b/Meniuri/roaauto.mnx new file mode 100644 index 0000000..320e6b7 Binary files /dev/null and b/Meniuri/roaauto.mnx differ diff --git a/Meniuri/serii.MNT b/Meniuri/serii.MNT new file mode 100644 index 0000000..738d54c Binary files /dev/null and b/Meniuri/serii.MNT differ diff --git a/Meniuri/serii.mnx b/Meniuri/serii.mnx new file mode 100644 index 0000000..9780519 Binary files /dev/null and b/Meniuri/serii.mnx differ diff --git a/Meniuri/verificari.MNT b/Meniuri/verificari.MNT new file mode 100644 index 0000000..c1c398b Binary files /dev/null and b/Meniuri/verificari.MNT differ diff --git a/Meniuri/verificari.mnx b/Meniuri/verificari.mnx new file mode 100644 index 0000000..ac5db2a Binary files /dev/null and b/Meniuri/verificari.mnx differ diff --git a/Meniuri/verificari_com.MNT b/Meniuri/verificari_com.MNT new file mode 100644 index 0000000..e5e4e0a Binary files /dev/null and b/Meniuri/verificari_com.MNT differ diff --git a/Meniuri/verificari_com.mnx b/Meniuri/verificari_com.mnx new file mode 100644 index 0000000..85df782 Binary files /dev/null and b/Meniuri/verificari_com.mnx differ diff --git a/Programe/onom_devize.prg b/Programe/onom_devize.prg new file mode 100644 index 0000000..bf2e193 --- /dev/null +++ b/Programe/onom_devize.prg @@ -0,0 +1,437 @@ +******************************************* +* PROCEDURE viz_mecanici( ) +* Data/ora : 12/14/04, 14:16:18 +* autor : liana.macinic +* descriere: + +****** PARAMETER BLOCK ************** +* Parametri : 0 +* +******************************************* +Procedure viz_mecanici( ) + +Private pomecanici,pcschema1,pcselect1 +Store '' To pomecanici +If Used('v_mecanici') + Use In v_mecanici +Endif + +pcschema1=[''] +pcselect1=['select * from ] + gcS + [.auto_vmecanici where 1=2'] +pcorder1=[nume,prenume] +pcfiltru1 = [2=2] +llAfiseaza = .F. +gencursor('pomecanici','v_mecanici',pcselect1,pcfiltru1,pcschema1,pcorder1,llAfiseaza) +pomecanici.ca_baza1.afisare() +ofrmmecanici=Createobject('frm_mecanici') +ofrmmecanici.Show(1) +Release pomecanici +Endproc + +**********************sfarsit procedura viz_mecanici******************* + +******************************************* +* PROCEDURE viz_asiguratori( ) +* Data/ora : 12/15/04, 15:57:12 +* autor : liana.macinic +* descriere: + +****** PARAMETER BLOCK ************** +* Parametri : 0 +* +******************************************* +Procedure viz_asiguratori( ) +&&code goes here +Local lnIdAsigurator +Private poasiguratori,pcschema1,pcselect1 +Store '' To poasiguratori +If Used('v_asiguratori') + Use In v_asiguratori +Endif + +pcschema1=[''] +pcselect1=['select * from ] + gcS + [.auto_vasiguratori where 1=2'] +pcorder1=[asigurator] +pcfiltru1 = [2=2] +llAfiseaza = .F. +gencursor('poasiguratori','v_asiguratori',pcselect1,pcfiltru1,pcschema1,pcorder1,llAfiseaza) +poasiguratori.ca_baza1.afisare() + +Select v_asiguratori +Go Top +lnIdAsigurator=id_asigurator + +Private poinspector,pcschema2,pcselect2 +Store '' To poinspector +If Used('v_inspectori') + Use In v_inspectori +Endif + +pcschema2=[''] +pcselect2=['select * from ] + gcS + [.auto_vinspectori where 1=2'] +pcorder2=[inspector] +pcfiltru2 = [id_asigurator=]+Alltrim(Str(lnIdAsigurator)) +llAfiseaza = .F. +gencursor('poinspector','v_inspectori',pcselect2,pcfiltru2,pcschema2,pcorder2,llAfiseaza) +poinspector.ca_baza1.afisare() + +ofrmasig=Createobject('frm_asiguratori') +ofrmasig.Show(1) +Release poasiguratori + +Endproc + +**********************sfarsit procedura viz_asiguratori******************* +******************************************* +* PROCEDURE viz_masini_marci( ) +* Data/ora : 12/16/04, 09:15:00 +* autor : liana.macinic +* descriere: + +****** PARAMETER BLOCK ************** +* Parametri : 0 +* +******************************************* +Procedure viz_masini_marci() +Lparameters tlReturn +Local llReturn +Private pomarci,pcschema1,pcselect1 +Store '' To pomarci +If !Empty(tlReturn) + llReturn=tlReturn +Else + llReturn=.F. +Endif + +If Used('v_marci') + Use In v_marci +Endif +pcschema1=[''] +pcselect1=['select * from ] + gcS + [.auto_vmarci where 1=2'] +pcorder1=[marca] +pcfiltru1 = [2=2] +llAfiseaza = .F. +gencursor('pomarci','v_marci',pcselect1,pcfiltru1,pcschema1,pcorder1,llAfiseaza) +pomarci.ca_baza1.afisare() + + +Private pomasini,pcschema2,pcselect2 +Store '' To pomasini +If Used('v_masini') + Use In v_masini +Endif +pcschema2=[''] +pcselect2=['select * from ] + gcS + [.auto_vmasini where 1=2'] +pcorder2=[masina] +pcfiltru2 = [2=2] +llAfiseaza = .F. +gencursor('pomasini','v_masini',pcselect2,pcfiltru2,pcschema2,pcorder2,llAfiseaza) +pomasini.ca_baza1.afisare() +SELECT v_masini +SET FILTER TO id_marca=v_marci.id_marca + +ofrmmarcimasini=Createobject('frm_marci_masini') +ofrmmarcimasini.lreturnval=llReturn +ofrmmarcimasini.Show(1) +Release pomasini,pomarci + +Endproc + +**********************sfarsit procedura viz_masini_marci******************* +******************************************* +* PROCEDURE viz_delegati( ) +* Data/ora : 12/16/04, 09:40:39 +* autor : liana.macinic +* descriere: + +****** PARAMETER BLOCK ************** +* Parametri : 0 +* +******************************************* +*!* Procedure viz_delegati +*!* Lparameters tnidpartener,tcpartener +*!* Private podelegati,pcschema1,pcselect1,odetalii +*!* LOCAL llAfiseaza +*!* Store '' To podelegati +*!* If Used('v_delegati') +*!* Use In v_delegati +*!* Endif +*!* pcschema1=[''] +*!* pcselect1=['select * from ] + gcS + [.dev_vdelegati where 1=2'] +*!* pcorder1=[delegat] +*!* *!* pcfiltru1=[sters=0] +*!* pcfiltru1=[1=2] +*!* llAfiseaza=.F. +*!* gencursor('podelegati','v_delegati',pcselect1,pcfiltru1,pcschema1,pcorder1,llAfiseaza) +*!* podelegati.ca_baza1.afisare() +*!* ofrmdelegati=Createobject('frm_delegati',tnidpartener,tcpartener) +*!* ofrmdelegati.Show(1) + +*!* Select v_delegati +*!* Scatter Name odetalii +*!* Use In v_delegati +*!* Release podelegati +*!* Return odetalii +*!* Endproc + +**********************sfarsit procedura viz_delegati******************* +******************************************* +* PROCEDURE viz_norme( ) +* Data/ora : 12/16/04, 10:39:24 +* autor : liana.macinic +* descriere: + +****** PARAMETER BLOCK ************** +* Parametri : 0 +* +******************************************* +Procedure viz_norme( ) +Private ponorme,pcschema1,pcselect1 +Store '' To ponorme +If Used('v_norme') + Use In v_norme +Endif + +pcschema1=[''] +pcselect1=['select * from ] + gcS + [.auto_vnorme where 1=2'] +pcorder1=[masina,denop] +pcfiltru1 = [1=2] +llAfiseaza = .F. +gencursor('ponorme','v_norme',pcselect1,pcfiltru1,pcschema1,pcorder1,llAfiseaza) +ponorme.ca_baza1.afisare() +ofrmnorme=Createobject('frm_norme') +ofrmnorme.Show(1) +Release ponorme + +Endproc + +**********************sfarsit procedura viz_norme******************* +******************************************* +* PROCEDURE viz_ansamble( ) +* descriere: + +****** PARAMETER BLOCK ************** +* Parametri : 0 +* +******************************************* +Procedure viz_ansamble( ) +Private ponorme,pcschema1,pcselect1 +Store '' To poansamble +If Used('v_ansamble') + Use In v_ansamble +Endif + +pcschema1=[''] +pcselect1=['select * from ] + gcS + [.auto_vansamble where 1=2'] +pcorder1=[denumire] +pcfiltru1 = [2=2] +llAfiseaza = .F. +gencursor('poansamble','v_ansamble',pcselect1,pcfiltru1,pcschema1,pcorder1,llAfiseaza) +poansamble.ca_baza1.afisare() +ofrmansamble=Createobject('frm_ansamble') +ofrmansamble.Show(1) +Release poansamble,ofrmansamble +Endproc +**********************sfarsit procedura viz_norme******************* +******************************************* +* PROCEDURE viz_preturi( ) +* Data/ora : 12/16/04, 11:15:21 +* autor : liana.macinic +* descriere: + +****** PARAMETER BLOCK ************** +* Parametri : 0 +* +******************************************* +Procedure viz_preturi( ) +Private popreturi,pcschema1,pcselect1 +Store '' To popreturi +If Used('v_preturi') + Use In v_preturi +Endif +pcschema1=[''] +pcselect1=['select * from ] + gcS + [.auto_vpreturi where 1=2'] +pcorder1=[marca] +pcfiltru1 = [2=2] +llAfiseaza = .F. +gencursor('popreturi','v_preturi',pcselect1,pcfiltru1,pcschema1,pcorder1,llAfiseaza) +popreturi.ca_baza1.afisare() +ofrmpreturi=Createobject('frm_preturi') +ofrmpreturi.Show(1) +Release popreturi + +Endproc + +**********************sfarsit procedura viz_preturi******************* + +******************************************* +* PROCEDURE viz_clienti( ) +* Data/ora : 12/27/04, 10:07:39 +* autor : liana.macinic +* descriere: + +****** PARAMETER BLOCK ************** +* Parametri : 0 +* +******************************************* +Procedure viz_clienti( ) +lparameters tlDoarMasiniActive && modificare v 2.1.1 + +Private poclie,pcschema1,pcselect1 +Local llAfiseaza +Store .F. To llAfiseaza +Store '' To poclie +If Used('v_clie') + Use In v_clie +Endif + +pcschema1=['id_part N(20),denumire C(254),nume C(254),prenume C(254),cod_fiscal C(254),reg_comert C(254),id_loc_inreg N(20),id_categorie_entitate N(20),'+] + ; + ['localitate_inreg C(254),prefix C(254),sufix C(254),tip_persoana N(20),banca C(254),cont_banca C(254),motiv_inactiv C(254),inactiv N(1),'+] + ; + ['eliberatde C(254),dataeliberat d,id_adresa N(20),adresa C(254),telefon C(254),telefon2 C(254),id_loc N(20),localitate C(254),'+] + ; + ['judet C(254),id_judet N(20),sector N(4),apart C(254),etaj C(254),scara C(254),bloc C(254),strada C(254),numar C(254),codpostal C(254),'+] + ; + ['categorie_entitate C(254)'] +pcselect1=[select b.id_part,b.denumire,b.nume,b.prenume,b.cod_fiscal,b.reg_comert,b.id_loc_inreg,b.id_categorie_entitate,b.localitate_inreg,b.prefix,] + ; + [b.sufix,b.tip_persoana,b.banca,b.cont_banca,b.motiv_inactiv,b.inactiv,b.eliberatde,b.dataeliberat,b.id_adresa,b.adresa,b.telefon,b.telefon2,b.id_loc,] + ; + [b.localitate,b.judet,b.id_judet,b.sector,b.apart,b.etaj,b.scara,b.bloc,b.strada,b.numar,b.codpostal,b.categorie_entitate ] + ; + [from ]+gcS+[.coresp_tip_part a left join ]+gcS+[.vnom_parteneri b ]+; + [on a.id_part=b.id_part where a.id_tip_part in ] + ; + [(select id_tip_part from coresp_tip_cont where cont = ?gcCont411) and b.inactiv=0] +pcorder1=[b.nume] +pcfiltru1 = [1 = 2] +llAfiseaza = .F. +gencursor('poclie','v_clie',pcselect1,pcfiltru1,pcschema1,pcorder1,llAfiseaza) +poclie.ca_baza1.afisare() + +Private pomasini,pcschema2,pcselect2 +Store '' To pomasini +If Used('v_masiniclie') + Use In v_masiniclie +Endif + +pcschema2=[''] +*!* modificare v 2.1.1 +If tlDoarMasiniActive + pcselect2=['select * from ] + gcS + [.auto_vmasiniclienti where id_partener not in '+]+; + ['(select id_part from nom_parteneri where sters = 1 or inactiv = 1) and inactiv=0'] +Else +*!* modificare v 2.1.1 ^ + pcselect2=['select * from ] + gcS + [.auto_vmasiniclienti where id_partener not in '+]+; + ['(select id_part from nom_parteneri where sters = 1 or inactiv = 1)'] +*!* modificare v 2.1.1 +Endif +*!* modificare v 2.1.1 ^ +pcorder2=[masina] +pcfiltru2 = [1 = 2] +llAfiseaza = .F. +gencursor('pomasini','v_masiniclie',pcselect2,pcfiltru2,pcschema2,pcorder2,llAfiseaza) +pomasini.ca_baza1.afisare() + +Select v_clie +ofrmclienti=Createobject('frm_dev_clienti',tlDoarMasiniActive) && modificare v 2.1.1 +*!* IF gnNivelUtilizator=0 +*!* ofrmclienti.cmd_modifica1.visible=.T. +*!* ENDIF +ofrmclienti.Show(1) + +Release popreturi +Select v_masiniclie +Scatter Name omclie +Return omclie +Endproc + +**********************sfarsit procedura viz_clienti******************* + +******************************************* +* PROCEDURE viz_dealeri( ) +* Data/ora : 01/03/05, 16:51:46 +* autor : liana.macinic +* descriere: + +Procedure viz_dealeri( ) +Private podealeri,pcschema1,pcselect1 +Store '' To podealeri +If Used('v_furnizori') + Use In v_furnizori +Endif + +pcschema1=[''] +pcselect1=['select * from ] + gcS + [.auto_vfurnizori where 1=2'] +pcorder1=[denumire] +pcfiltru1 = [2=2] +llAfiseaza = .F. +gencursor('podealeri','v_furnizori',pcselect1,pcfiltru1,pcschema1,pcorder1,llAfiseaza) +podealeri.ca_baza1.afisare() +ofrmdealeri=Createobject('frm_dealeri') +ofrmdealeri.Show(1) +Release podealeri + + +Endproc + +**********************sfarsit procedura viz_dealeri******************* +*------------------------------inceput procedura viz_responsabili----------------------------------------- +* PROCEDURE viz_responsabili( ) +* Data : 03/29/05, 10:05:19 +* autor : liana.macinic +* descriere: + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* +*!* PROCEDURE viz_resp( ) +*!* Local lnIdResp +*!* Private poResp,pcschema1,pcselect1 +*!* Store '' To poResp +*!* If Used('v_Resp') +*!* Use In v_Resp +*!* Endif + +*!* pcschema1=[''] +*!* pcselect1=['select * from ] + gcS + [.dev_vnom_resp where 1=2'] +*!* pcorder1=[ales] +*!* pcfiltru1 = [2=2] +*!* llAfiseaza = .F. +*!* gencursor('poResp','v_Resp',pcselect1,pcfiltru1,pcschema1,pcorder1,llAfiseaza) +*!* poResp.ca_baza1.afisare() + +*!* Select v_Resp +*!* Go Top +*!* lnIdResp=id_Resp + + +*!* ofrmResp=Createobject('frm_Resp') +*!* ofrmResp.Show(1) +*!* Release poResp + +*!* ENDPROC +*------------------------------sfarsit procedura viz_responsabili----------------------------------------- +*********************************************************************** +Procedure caut_marci_masini +Parameters tnPornire, tlDesktop,tlToateIreg + +Local lcCont, loCauta, lnPornire, llDesktop +lnPornire = tnPornire && 1-incepe cu...6-toate +llDesktop = tlDesktop + +Store "" To loCauta + +lcSelect = [select id_marca, marca FROM ] + gcS + [.auto_vmarci ] +lcFiltru = [1=2] +lcSchema = [] +lcOrder = [marca] +lccoloane = [marca] +lcTitlu = [Alegeti marca] +lcTitluColoane = [Marca] +lcFiltruOriginal = [inactiv = 0] +lcNumeProc = [] +If Empty(tlToateIreg) + llToateIreg = .F. +Else + llToateIreg = tlToateIreg +Endif +loCauta = cauta_alfa(lcSelect,lcFiltru,lcSchema,lcOrder,lccoloane,lcTitlu,lcTitluColoane, lcNumeProc, llToateIreg, lcFiltruOriginal,,lnPornire,,,llDesktop) + +Return loCauta +Endproc && caut_marci_masini +*********************************************************************** diff --git a/Programe/oproceduri_analize.prg b/Programe/oproceduri_analize.prg new file mode 100644 index 0000000..b490ad5 --- /dev/null +++ b/Programe/oproceduri_analize.prg @@ -0,0 +1,1156 @@ +*!* 12.10.2015 +*!* marius.mutu +*!* valori_mat_bon, bon_com_nefact - fara comenzile arhivate INCHIS_FORTAT = 0 +*!* #4224 + +******************************************* +* PROCEDURE ver_valid_lun( ) +* Data/ora : 01/31/05, 09:19:02 +* autor : liana.macinic +* descriere: + +****** PARAMETER BLOCK ************** +* Parametri : 0 +* +******************************************* +Procedure ver_valid_lun( ) +*!* Private poordl,pcschema1,pcselect1 +*!* Store '' To poordl + +*!* pcschema1=[''] +*!* pcselect1=['select a.nrord,a.datai,a.nume,b.manopera,a.util_valid,a.dataoravalid '+] + ; +*!* ['from ] + gcS + [.dev_vordl a '+] + ; +*!* ['left join ] + gcS + [.dev_vordl_man b on a.id_ordl=b.id_ordl '+] + ; +*!* ['where 1=2'] +*!* pcorder1= [a.nrord] +*!* pcfiltru1 = [extract(month from a.dataoravalid) = ] + Alltrim(Str(gnLuna)) + [ and extract(year from a.dataoravalid) = ] + Alltrim(Str(gnAn)) + [ and a.validat = 1] +*!* gencursor('poordl','crsordl',pcselect1,pcfiltru1,pcschema1,pcorder1) +*!* poordl.ca_baza1.afisare() + +*!* If Reccount('crsordl')=0 +*!* Use In crsordl +*!* amessagebox("Nu exista comenzi validate in luna "+Alltrim(Str(gnLuna))+"/"+Alltrim(Str(gnAn))+" !",0+64,"Info listare") +*!* Return +*!* Endif + +*!* Private pcTitlu,pcDataora +*!* Store '' To pcTitlu,pcDataora +*!* pcTitlu = 'LISTA COMENZILOR VALIDATE IN CURSUL LUNII '+Alltrim(Str(gnLuna))+' / '+Alltrim(Str(gnAn)) +*!* pcDataora = get_ora(2) +*!* Select crsordl +*!* gofundal.Visible=.F. +*!* Keyboard "{ctrl+f10}" +*!* Report Form comvalidnef To Printer Prompt Preview +*!* gofundal.Visible=.T. +Endproc + +**********************sfarsit procedura ver_valid_lun******************* +******************************************* +* PROCEDURE ver_valid( ) +* Data/ora : 01/31/05, 10:39:49 +* autor : liana.macinic +* descriere: + +****** PARAMETER BLOCK ************** +* Parametri : 0 +* +******************************************* +Procedure ver_valid( ) + +*!* Private poordl,pcschema1,pcselect1 +*!* Store '' To poordl + +*!* pcschema1=[''] +*!* pcselect1=['select a.nrord,a.datai,a.nume,a.asigurator,a.util_valid,a.dataoravalid '+] + ; +*!* ['from ] + gcS + [.dev_vordl a '+] + ; +*!* ['where 1=2'] +*!* pcorder1= [a.nrord] +*!* pcfiltru1 = [a.validat = 1] +*!* gencursor('poordl','crsordl',pcselect1,pcfiltru1,pcschema1,pcorder1) +*!* poordl.ca_baza1.afisare() + +*!* If Reccount('crsordl')=0 +*!* Use In crsordl +*!* amessagebox("Nu exista comenzi validate!",0+64,"Info listare") +*!* Return +*!* Endif + +*!* Private pcTitlu,pcDataora +*!* Store '' To pcTitlu,pcDataora +*!* pcTitlu = 'LISTA COMENZILOR VALIDATE - TOTAL ' +*!* pcDataora = get_ora(2) +*!* gofundal.Visible=.F. +*!* Keyboard "{ctrl+f10}" +*!* Select crsordl +*!* Report Form comvalid To Printer Prompt Preview +*!* gofundal.Visible=.T. +Endproc + +**********************sfarsit procedura ver_valid******************* + +******************************************* +* PROCEDURE ver_nevalid( ) +* Data/ora : 01/31/05, 10:54:49 +* autor : liana.macinic +* descriere: + +****** PARAMETER BLOCK ************** +* Parametri : 0 +* +******************************************* +Procedure ver_nevalid( ) + +*!* Private poordl,pcschema1,pcselect1 +*!* Store '' To poordl + +*!* pcschema1=[''] +*!* pcselect1=['select a.nrord,a.datai,a.nume,a.asigurator,a.util_valid,a.dataoravalid '+] + ; +*!* ['from ] + gcS + [.dev_vordl a '+] + ; +*!* ['where 1=2'] +*!* pcorder1= [a.nrord] +*!* pcfiltru1 = [a.validat = 0] +*!* gencursor('poordl','crsordl',pcselect1,pcfiltru1,pcschema1,pcorder1) +*!* poordl.ca_baza1.afisare() + +*!* If Reccount('crsordl')=0 +*!* Use In crsordl +*!* amessagebox("Nu exista comenzi deschise si nevalidate in luna "+Alltrim(Str(gnLuna))+"/"+Alltrim(Str(gnAn))+" !",0+64,"Info listare") +*!* Return +*!* Endif + +*!* Private pcTitlu,pcDataora +*!* Store '' To pcTitlu,pcDataora +*!* pcTitlu = 'LISTA COMENZILOR NEVALIDATE - TOTAL ' +*!* pcDataora = get_ora(2) +*!* Select crsordl + +*!* Public titlu +*!* titlu='LISTA COMENZILOR DESCHISE SI NEVALIDATE IN LUNA '+Alltrim(Str(gnLuna))+' - '+Alltrim(Str(gnAn)) +*!* gofundal.Visible=.F. +*!* Keyboard "{ctrl+f10}" +*!* Report Form comvalid To Printer Prompt Preview +*!* gofundal.Visible=.T. +*!* *!* sele clie +*!* *!* set order to tag codc +*!* *!* sele ordl +*!* *!* SET RELATION TO codc INTO Clie ADDITIVE + +*!* *!* sele ordl +*!* *!* *set order to tag datai +*!* *!* set filter to !validat +*!* *!* report form comvalid to printer prompt preview +*!* *!* sele ordl +*!* *!* set filter to +*!* *!* sele ordl +*!* *!* SET RELATION off inTO Clie + +Endproc + +**********************sfarsit procedura ver_nevalid******************* +******************************************* +* PROCEDURE ver_nefact( ) +* Data/ora : 01/31/05, 11:00:23 +* autor : liana.macinic +* descriere: + +****** PARAMETER BLOCK ************** +* Parametri : 0 +* +******************************************* +Procedure ver_nefact( ) + +*!* Private pcselect,pcschema,pcfiltru,pcorder,pofacturi,llAfiseaza +*!* Store '' To pofacturi +*!* pcschema=[''] +*!* pcorder=[a.nume] +*!* pcselect=['select a.nrord,a.datai,a.nume,a.asigurator,a.validat,a.dataoravalid,a.util_valid from ] + gcS + [.dev_vvalid_comenzi a ]+; +*!* [where 1=2'] +*!* *!* pcfiltru=[b.luna=]+ALLTRIM(STR(gnLuna))+[ and b.an=]+ALLTRIM(STR(gnAn)) +*!* pcfiltru=[a.facturat = 0] + +*!* llAfiseaza=.F. +*!* gencursor('pofacturi','crsfacturi',pcselect,pcfiltru,pcschema,pcorder,llAfiseaza) +*!* pofacturi.ca_baza1.afisare() + +*!* If Reccount('crsfacturi')=0 +*!* Use In crsfacturi +*!* amessagebox("Nu exista comenzi nefacturate in luna "+Alltrim(Str(gnLuna))+"/"+Alltrim(Str(gnAn))+" !",0+64,"Info listare") +*!* Return +*!* Endif + +*!* Private pcTitlu,pcDataora +*!* Store '' To pcTitlu,pcDataora +*!* pcTitlu = 'LISTA COMENZILOR NEFACTURATE - LUNA '+Alltrim(Str(gnLuna))+' / '+ Alltrim(Str(gnAn)) +*!* pcDataora = get_ora(2) +*!* Select crsfacturi +*!* gofundal.Visible=.F. +*!* Keyboard "{ctrl+f10}" +*!* Report Form comfact To Printer Prompt Preview +*!* gofundal.Visible=.T. +Endproc + +**********************sfarsit procedura ver_nefact******************* +******************************************* +* PROCEDURE ver_valid_nefact( ) +* Data/ora : 01/31/05, 12:05:27 +* autor : liana.macinic +* descriere: + +****** PARAMETER BLOCK ************** +* Parametri : 0 +* +******************************************* +Procedure ver_valid_nefact( ) + +*!* Private pcselect,pcschema,pcfiltru,pcorder,pofacturi,llAfiseaza +*!* Store '' To pofacturi +*!* pcschema=[''] +*!* pcorder=[a.nume] +*!* pcselect=['select a.nrord,a.datai,a.nume,a.asigurator,a.validat,a.dataoravalid,a.util_valid from ] + gcS + [.dev_vvalid_comenzi a ]+; +*!* [where 1=2'] +*!* *!* pcfiltru=[b.luna=]+ALLTRIM(STR(gnLuna))+[ and b.an=]+ALLTRIM(STR(gnAn)) +*!* pcfiltru=[a.facturat = 0 and a.validat = 1 and extract(month from a.dataoravalid) = ]+Alltrim(Str(gnLuna))+ [ and extract(year from a.dataoravalid) = ]+Alltrim(Str(gnAn)) + +*!* llAfiseaza=.F. +*!* gencursor('pofacturi','crsfacturi',pcselect,pcfiltru,pcschema,pcorder,llAfiseaza) +*!* pofacturi.ca_baza1.afisare() + +*!* If Reccount('crsfacturi')=0 +*!* Use In crsfacturi +*!* amessagebox("Nu exista comenzi validate si nefacturate in luna "+Alltrim(Str(gnLuna))+"/"+Alltrim(Str(gnAn))+" !",0+64,"Info listare") +*!* Return +*!* Endif + +*!* Private pcTitlu,pcDataora +*!* Store '' To pcTitlu,pcDataora +*!* pcTitlu = 'LISTA COMENZILOR VALIDATE SI NEFACTURATE IN LUNA '+Alltrim(Str(gnLuna))+' / '+ Alltrim(Str(gnAn)) +*!* pcDataora = get_ora(2) + +*!* gofundal.Visible=.F. +*!* Keyboard "{ctrl+f10}" +*!* Select crsfacturi +*!* Report Form comfact To Printer Prompt Preview +*!* gofundal.Visible=.T. +*!* Use In crsfacturi + +Endproc +**********************sfarsit procedura ver_valid_nefact******************* + +******************************************* +* PROCEDURE ver_com_rep( ) +* Data/ora : 01/31/05, 12:45:31 +* autor : liana.macinic +* descriere: + +****** PARAMETER BLOCK ************** +* Parametri : 0 +* +******************************************* +Procedure ver_com_rep( ) + +*!* Private pcselect,pcschema,pcfiltru,pcorder,pofacturi,llAfiseaza +*!* Store '' To pofacturi +*!* pcschema=[''] +*!* pcorder=[nume] +*!* pcselect=['select nrord,datai,nume,asigurator,validat,facturat,datafact,dataoravalid,util_valid from ] + gcS + [.dev_vvalid_comenzi ]+; +*!* [where 1=2'] +*!* *!* pcfiltru=[b.luna=]+ALLTRIM(STR(gnLuna))+[ and b.an=]+ALLTRIM(STR(gnAn)) +*!* pcfiltru=[facturat = 0 and validat = 1 and extract(month from dataoravalid) = ]+Alltrim(Str(gnLuna))+ [ and extract(year from dataoravalid) = ]+Alltrim(Str(gnAn)) +*!* pcfiltru = [trunc(datai) < to_date('01/]+Alltrim(Str(gnLuna)) + [/]+Alltrim(Str(gnAn))+; +*!* [','dd/mm/yyyy') and ((trunc(datafact)?gnLuna+?gnAn*12)) ]+; + [AND INCH_VALIDARE = 0] +Else + lcFiltru = [EXTRACT(MONTH FROM DATAI)+EXTRACT(YEAR FROM DATAI)*12<=?gnLuna+?gnAn*12 AND ] + ; + [(((FACTURAT=0 OR (FACTURAT=1 AND EXTRACT(MONTH FROM DATAFACT)+EXTRACT(YEAR FROM DATAFACT)*12>?gnLuna+?gnAn*12)) ]+; + [AND INCH_VALIDARE = 0) OR ((VALIDAT=0 OR (VALIDAT=1 AND EXTRACT(MONTH FROM DATAORAVALID)+EXTRACT(YEAR FROM DATAORAVALID)*12>]+; + [?gnLuna+?gnAn*12)) AND INCH_VALIDARE = 1))] +Endif + +loTherm = Newobject("_thermometer","_therm","","Valori materiale bonate pe comenzi nefacturate...") +lcTask = "Generare raport..." +_Screen.MousePointer= 11 +With loTherm + .AlwaysOnTop=.T. + .Show() + + lnPercent = 5 + .Update(lnPercent, lcTask) + pcDataora=get_ora(2) + + lnPercent = 10 + .Update(lnPercent, lcTask) +*!* inlocuire dev_vvalid_comenzi + lcSql = [SELECT NUME,NRORD,DATAI,MATERIALE,ASIGURATOR FROM auto_VALIDARE_COMENZI WHERE ] + ; + [MATERIALE!=0 AND INCHIS_FORTAT = 0 and ] + lcFiltru + [ ORDER BY 2] + lnSucces = goExecutor.oExecute(lcSql,'crsmatnefact') + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,'Eroare') + Endif + .Complete() + .AlwaysOnTop=.F. +Endwith +Release loTherm +_Screen.MousePointer= 0 + +If Reccount('crsmatnefact')=0 + amessagebox("Nu exista valori materiale bonate pe comenzi nefacturate!",0+48,"Info analiza") + Return +Endif + +gofundal.Visible=.F. +Keyboard "{ctrl+f10}" +Select crsmatnefact +*!* Report Form matnefact To Printer Prompt Preview +goExport.export2frx('crsmatnefact','matnefact ',.F., , , , , .T.) +gofundal.Visible=.T. +Use In (SELECT('crsmatnefact')) + +Endproc +**********************sfarsit procedura valori_mat_bon ******************* +**********************inceput procedura bon_com_nefact_sectii ******************* +*!* Sele ordl.*,clie.nume From ordl,clie ; +*!* where !ordl.facturat And ordl.codc=clie.codc; +*!* and !Empty(ordl.nrord) And &cond; +*!* into Table &loc\&nfscurt\tempo\matnefact Order By nrord +*!* cond='((MONTH(DATAACT)<=VAL(M.NL) AND YEAR(DATAACT)=VAL(M.AN)) OR YEAR(DATAACT)?gnLuna+?gnAn*12)) ]+; + [AND A.INCH_VALIDARE=0] +Else +*!* lcFiltru = [EXTRACT(MONTH FROM A.DATAI)+EXTRACT(YEAR FROM A.DATAI)*12<=?gnLuna+?gnAn*12 AND ] + ; +*!* [((A.ID_LUCRARE NOT IN (SELECT ID_LUCRARE FROM ] + gcS + [.DEV_VORDL_FACTURI WHERE FACTURAT=1 ] + ; +*!* [AND EXTRACT(MONTH FROM DATAACT)+EXTRACT(YEAR FROM DATAACT)*12<=?gnLuna+?gnAn*12) AND A.ID_TIP=1)] + ; +*!* [OR ((A.VALIDAT=0 OR (A.VALIDAT=1 AND EXTRACT(MONTH FROM A.DATAORAVALID)+EXTRACT(YEAR FROM A.DATAORAVALID)*12>]+; +*!* [?gnLuna+?gnAn*12)) AND A.ID_TIP IN (2,3,4)))] + lcFiltru = [(((A.FACTURAT=0 OR ]+; + [(A.FACTURAT=1 AND EXTRACT(MONTH FROM A.DATAFACT)+EXTRACT(YEAR FROM A.DATAFACT)*12>?gnLuna+?gnAn*12)) ]+; + [AND A.INCH_VALIDARE=0) ]+; + [OR ((A.VALIDAT=0 OR ]+; + [(A.VALIDAT=1 AND EXTRACT(MONTH FROM A.DATAORAVALID)+EXTRACT(YEAR FROM A.DATAORAVALID)*12>?gnLuna+?gnAn*12)) ]+; + [AND A.INCH_VALIDARE=1))] +Endif + +If tlCuSectie + lcOrder = [ORDER BY 9,4] + lcExplicatie = [ - pe sectii] +Else + lcOrder = [ORDER BY 4] + lcExplicatie = [] +Endif + +loTherm = Newobject("_thermometer","_therm","","Bonuri pe comenzi nefacturate"+lcExplicatie+"...") +lcTask = "Generare raport..." +_Screen.MousePointer= 11 +With loTherm + .AlwaysOnTop=.T. + .Show() + + lnPercent = 5 + .Update(lnPercent, lcTask) + pcDataora=get_ora(2) + + lnPercent = 10 + .Update(lnPercent, lcTask) + + + lcSql=[SELECT A.ID_LUCRARE,A.NUME,A.DATAI,A.NRORD,B.ID_SECTIE,B.DATAACT,B.NRACT,]+; + [(case ]+; + [when b.luna+b.an*12<]+; + [pack_sesiune.GET_LUNARON()+pack_sesiune.GET_ANRON()*12]+; + [ and ]+; + [pack_sesiune.getAn()*12+pack_sesiune.getLuna()>=]+; + [pack_sesiune.GET_ANRON()*12+pack_sesiune.GET_LUNARON() ]+; + [then nvl(b.suma,0)/10000]+; + [ else ]+; + [nvl(b.suma,0) end ) ]+; + [as SUMA,C.SECTIE,D.NUME AS NRESP ]+; + [FROM auto_NORMARE_COMENZI A ]+; + [LEFT JOIN ACT B ON A.ID_LUCRARE=B.ID_LUCRARE ]+; + [LEFT JOIN VNOM_SECTII C ON B.ID_SECTIE=C.ID_SECTIE ]+; + [LEFT JOIN VNOM_RESPONSABILI D ON B.ID_RESPONSABIL=D.ID_RESPONSABIL ]+; + [WHERE EXTRACT(MONTH FROM A.DATAI)+EXTRACT(YEAR FROM A.DATAI)*12<=?gnLuna+?gnAn*12 AND A.INCHIS_FORTAT = 0 AND ]+; + lcFiltru +; + [AND B.STERS=0 AND B.SCD IN ('332','331') AND B.SCC='711' ]+; + [AND EXTRACT(MONTH FROM B.DATAACT)+EXTRACT(YEAR FROM B.DATAACT)*12<=?gnLuna+?gnAn*12 ] + ; + lcOrder + + + lnSucces = goExecutor.oExecute(lcSql,'crsmatnefact') + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,'Eroare') + Endif + .Complete() + .AlwaysOnTop=.F. +Endwith +Release loTherm +_Screen.MousePointer= 0 +*!* SELECT crsmatnefact +*!* BROWSE +If Reccount('crsmatnefact')=0 + amessagebox("Nu exista bonuri pe comenzi nefacturate!",0+48,"Info analiza") + Return +Endif + +gofundal.Visible=.F. +Keyboard "{ctrl+f10}" +Select crsmatnefact +If tlCuSectie +*!* Report Form matbon_sec To Printer Prompt Preview + goExport.export2frx('crsmatnefact','matbon_sec',.F., , , , , .T.) +Else +*!* Report Form matbon To Printer Prompt Preview + goExport.export2frx('crsmatnefact','matbon',.F., , , , , .T.) +ENDIF + + +gofundal.Visible=.T. +Use In (SELECT('crsmatnefact')) + +Endproc +**********************sfarsit procedura bon_com_nefact_sectii ******************* + +**********************inceput procedura raport_salarizare ******************* +Procedure raport_salarizare +Private pcDataora,plPerioada,pcondper,pcPerioada,pnLunaI,pnAnI,pnLunaF,pnAnF +Local lcOrder,lcSql,lcFiltru,lnSucces + +pcondper="" +ofrmperioada=Createobject('frm_perioada_luni') +ofrmperioada.Show(1) +If gnButon=2 + Return +Endif + +plPerioada=.F. +lnPoz=At('_',pcondper) +If lnPoz>0 + plPerioada=.T. +Endif + +If plPerioada + pnLunaI=Val(Substr(pcondper,1,2)) + pnAnI=Val(Substr(pcondper,3,4)) + pnLunaF=Val(Substr(pcondper,8,2)) + pnAnF=Val(Substr(pcondper,10,4)) + pcPerioada = [Perioada ]+ ; + SUBSTR(pcondper,1,2)+'/'+Substr(pcondper,3,4) + ' - ' + ; + SUBSTR(pcondper,8,2)+'/'+Substr(pcondper,10,4) +Else + pnLunaI=Val(Substr(pcondper,1,2)) + pnAnI=Val(Substr(pcondper,3,4)) + pnLunaF=pnLunaI + pnAnF=pnAnI + pcPerioada = [Luna ] + Substr(pcondper,1,2)+'/'+Substr(pcondper,3,4) +Endif + +loTherm = Newobject("_thermometer","_therm","","Raport de salarizare...") +lcTask = "Generare raport..." +_Screen.MousePointer= 11 +With loTherm + .AlwaysOnTop=.T. + .Show() + + lnPercent = 5 + .Update(lnPercent, lcTask) + pcDataora=get_ora(2) + + lnPercent = 10 + .Update(lnPercent, lcTask) + distribuire_timp_normat() + + lnPercent = 70 + .Update(lnPercent, lcTask) + lcSql = [begin pack_auto.set_perioada_raport(?pnLunaI,?pnAnI,?pnLunaF,?pnAnF); end;] + lnSucces = goExecutor.oExecute(lcSql,) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,'Eroare') + Endif + + lnPercent = 80 + .Update(lnPercent, lcTask) + lcSql=[SELECT * FROM ]+gcS+[.AUTO_ANALIZA_SALARII_REG ORDER BY NUME] + + lnSucces = goExecutor.oExecute(lcSql,'crssalarii') + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,'Eroare') + Endif + .Complete() + .AlwaysOnTop=.F. +Endwith +Release loTherm +_Screen.MousePointer= 0 + +ofrmsalarii=Createobject("frm_raport_salarizare") +ofrmsalarii.Show(1) +Release ofrmsalarii,pcDataora,plPerioada,pcondper,pcPerioada,pnLunaI,pnAnI,pnLunaF,pnAnF +Endproc +**********************sfarsit procedura raport_salarizare ******************* +**********************inceput procedura raport_salarizare_val ******************* +Procedure raport_salarizare_val + Private pcDataora,pcTitlu,pcondper,pcPerioada,pnLunaI,pnAnI,pnLunaF,pnAnF + Local lcSql,lcCursor + lcCursor = [crssalarii] + pcondper="" + ofrmperioada=Createobject('frm_perioada_luni') + ofrmperioada.Show(1) + If gnButon=2 + Return + Endif + + If At('_',pcondper)>0 + pnLunaI=Val(Substr(pcondper,1,2)) + pnAnI=Val(Substr(pcondper,3,4)) + pnLunaF=Val(Substr(pcondper,8,2)) + pnAnF=Val(Substr(pcondper,10,4)) + pcPerioada = [Perioada ]+ ; + SUBSTR(pcondper,1,2)+'/'+Substr(pcondper,3,4) + ' - ' + ; + SUBSTR(pcondper,8,2)+'/'+Substr(pcondper,10,4) + Else + pnLunaI=Val(Substr(pcondper,1,2)) + pnAnI=Val(Substr(pcondper,3,4)) + pnLunaF=pnLunaI + pnAnF=pnAnI + pcPerioada = [Luna ] + Substr(pcondper,1,2)+'/'+Substr(pcondper,3,4) + Endif + + loTherm = Newobject("_thermometer","_therm","","Raport de salarizare - comenzi validate ...") + lcTask = "Generare raport..." + _Screen.MousePointer= 11 + With loTherm + .AlwaysOnTop=.T. + .Show() + + lnPercent = 5 + .Update(lnPercent, lcTask) + distribuire_timp_normat() + + lnPercent = 70 + .Update(lnPercent, lcTask) + lcSql = [begin pack_auto.set_perioada_raport(?pnLunaI,?pnAnI,?pnLunaF,?pnAnF); end;] + If goExecutor.oExecuta(lcSql) + lnPercent = 80 + .Update(lnPercent, lcTask) + lcSql=[SELECT * FROM ]+gcS+[.AUTO_ANALIZA_SALARII_VAL ORDER BY NUME] + goExecutor.oExecuta(lcSql,lcCursor) + Endif + .Complete() + .AlwaysOnTop=.F. + Endwith + Release loTherm + _Screen.MousePointer= 0 + + If Used(lcCursor) + If Reccount(lcCursor)>0 + pcDataora=Ttoc(get_ora()) + pcTitlu = [RAPORT DE SALARIZARE - COMENZI VALIDATE N ] + goExport.export2frx([crssalarii],[salarii],.F., , , , , .T.) && modificare v 2.1.9 + Else + amessagebox("Nu exista inregistrari pentru listare!",0+48,"Atentie") + Endif + Use In (lcCursor) + Endif + Release pcDataora,pcTitlu,pcondper,pcPerioada,pnLunaI,pnAnI,pnLunaF,pnAnF +Endproc +**********************sfarsit procedura raport_salarizare_val ******************* +**********************inceput procedura manopera_asig ******************* +Procedure manopera_asig +Lparameters tlCuSectie +Private pcDataora,plPerioada,pcondper,pcPerioada +Local lcOrder,lcSql,lcFiltru,lnSucces + +pcondper="" +ofrmperioada=Createobject('frm_perioada_luni') +ofrmperioada.Show(1) +If gnButon=2 + Return +Endif + +plPerioada=.F. +lnPoz=At('_',pcondper) +If lnPoz>0 + plPerioada=.T. +Endif + +lcFiltru = [extract(month from (decode(e.inch_validare,0,last_day(trunc(c.dataact)),last_day(trunc(a.dataoravalid))))) + ] + ; + [extract(year from (decode(e.inch_validare,0,last_day(trunc(c.dataact)),last_day(trunc(a.dataoravalid))))) * 12 ] + +If plPerioada + lnInit=Val(Substr(pcondper,1,2))+Val(Substr(pcondper,3,4))*12 + lnFinal=Val(Substr(pcondper,8,2))+Val(Substr(pcondper,10,4))*12 + lcFiltru = lcFiltru + [ between ]+; + ALLTRIM(Str(lnInit))+[ and ]+Alltrim(Str(lnFinal)) + pcPerioada = [Perioada ]+ ; + SUBSTR(pcondper,1,2)+'/'+Substr(pcondper,3,4) + ' - ' + ; + SUBSTR(pcondper,8,2)+'/'+Substr(pcondper,10,4) +Else + lnInit = Val(Substr(pcondper,1,2))+Val(Substr(pcondper,3,4))*12 + lcFiltru = lcFiltru + [ = ]+; + ALLTRIM(Str(lnInit)) + pcPerioada = [Luna ] + Substr(pcondper,1,2)+'/'+Substr(pcondper,3,4) +Endif + +loTherm = Newobject("_thermometer","_therm","","Ore de manopera pe asiguratori...") +lcTask = "Generare raport..." +_Screen.MousePointer= 11 +With loTherm + .AlwaysOnTop=.T. + .Show() + + lnPercent = 5 + .Update(lnPercent, lcTask) + pcDataora=get_ora(2) + + lnPercent = 10 + .Update(lnPercent, lcTask) + +*!* lcSql=[SELECT TIP,LUNA,ASIG,TIMP_N FROM ]+gcS+[.DEV_ANALIZA_MANASIG ]+lcFiltru+; +*!* [ ORDER BY LUNA,TIP] + lcSql = [Select decode(a.id_tip, 1, 'POST GARANTIE', 2, 'GARANTIE', 'REGIE') As tip,] + ; + [NVL(d1.denumire, '') as asig,] + ; + [decode(e.inch_validare,0,last_day(trunc(c.dataact)),last_day(trunc(a.dataoravalid))) as luna,] + ; + [Nvl(Sum(round(b.timpn, 3)), 0) As timp_n ] + ; + [From ] + ; + [(select a.id_ordl, a.id_lucrare, a.id_asigurator, a.id_tip, ] + ; + [(case when extract(month from a.dataoravalid) + extract(year from a.dataoravalid) * 12 ] + ; + [<= pack_sesiune.getluna() + pack_sesiune.getan() * 12 then 1 else 0 end) as validat,] + ; + [(case when extract(month from a.dataoravalid) + extract(year from a.dataoravalid) * 12 ] + ; + [<= pack_sesiune.getluna() + pack_sesiune.getan() * 12 then a.dataoravalid else null end) as dataoravalid ] + ; + [from ] + gcS + [.dev_ordl a where a.sters = 0) a ] + ; + [Left Join ] + gcS + [.dev_oper b on a.id_ordl = b.id_ordl ] + ; + [left join ] + gcS + [.auto_vordl_facturi c on a.id_lucrare = c.id_lucrare ] + ; + [left join ] + gcS + [.dev_nom_asiguratori d on a.id_asigurator = d.id_asigurator ] + ; + [left join ] + gcS + [.nom_parteneri d1 on d.id_part = d1.id_part ] + ; + [left join ] + gcS + [.dev_tip_deviz e on a.id_tip = e.id_tip ] + ; + [Where ((a.validat = 1 and e.inch_validare = 1) or (nvl(c.facturat, 0) = 1 and e.inch_validare = 0)) ] + ; + [and ] + lcFiltru + [ and b.sters = 0 ] + ; + [Group By d1.denumire, a.id_tip, decode(e.inch_validare,0,last_day(trunc(c.dataact)),last_day(trunc(a.dataoravalid))) ] + ; + [order by 3,1,2] + + lnSucces = goExecutor.oExecute(lcSql,'manopera_asig') + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,'Eroare') + Endif + .Complete() + .AlwaysOnTop=.F. +Endwith +Release loTherm +_Screen.MousePointer= 0 + +If Reccount('manopera_asig')=0 + amessagebox("Nu exista inregistrari pentru acest raport!",0+64,"Raport manopera pe asiguratori") + Return +Endif + +Select manopera_asig +gofundal.Visible=.F. +Keyboard "{ctrl+f10}" +Report Form rap_manasig To Printer Prompt Preview +gofundal.Visible=.T. +Use In manopera_asig + +Endproc +**********************sfarsit procedura manopera_asig ******************* +******************************************************************************************* +Procedure verificare_articole +Private pcTitlu +Local lcCursorRaport, lcConditie, lcTitlu +lcConditie = [] +lcConditie2 = [] +lcCompletareTitlu = [] +pnOptiune=1 +pnButon=1 +lnRaspuns = 1 +Do While lnRaspuns = 1 + lcTitlu = [ARTICOLE PE COMENZI] + lcIntrebare="Doriti ca raportul sa contina :" + lnNrOptiuni=4 + ofrmopt=Createobject("frm_optiune",lcTitlu,lcIntrebare,lnNrOptiuni) + ofrmopt.ogOptiuni.option1.Caption="Ptr. un articol (cu intrari in luna)" + ofrmopt.ogOptiuni.option2.Caption="Ptr. un articol din stocul lunii" + ofrmopt.ogOptiuni.option3.Caption="Doar articolele cu intrari in luna" + ofrmopt.ogOptiuni.option4.Caption="Toate articolele din stocul lunii" + ofrmopt.Show(1) + + Release ofrmopt + If pnButon=1 + If Inlist(pnOptiune,1,3) + lcConditie = [and x.cant <> 0] + lcCompletareTitlu = [ CU INTRRI N LUN] + Endif + + If Inlist(pnOptiune,1,2) + loCauta = caut_articol() + If !Empty(Nvl(loCauta.id_articol,0)) + lcConditie2 = [and x.id_articol = ] + Alltrim(Str(loCauta.id_articol)) + lcTip = [ARTICOL] + Else + Return + Endif + Else + lcTip = [ARTICOLE] + Endif + + pcTitlu = [VERIFICRI ] + lcTip + lcCompletareTitlu + [ PE COMENZI] + + lcCursorRaport = [crsArticoleVerif] + Use In (Select(lcCursorRaport)) + lcSql = [select a.id_articol,d.denumire,d.codmat,d.um,a.pret,a.cants,a.cant,a.id_gestiune,] + ; + [b.nume_gestiune, b.cante, b.id_lucrare, e.nrord, NVL(c.facturat, 0) as facturat,a.nr_pag ] + ; + [from (select x.id_articol, x.id_gestiune, x.cont, x.acont, x.cants, x.cant,] + ; + [decode(q.nr_pag, 6, x.pretv, x.pret) as pret,q.nr_pag ] + ; + [from stoc x ] + ; + [left join nom_gestiuni q on x.id_gestiune = q.id_gestiune ] + ; + [where x.an = ?gnAn and x.luna = ?gnLuna ] + lcConditie + lcConditie2 + [) a ] + ; + [left join (select x.id_articol,decode(y.nr_pag, 6, x.pretv, x.pret) as pret,x.id_gestiune,] + ; + [x.cont,x.acont,x.id_lucrare,sum(nvl(x.cante, 0)) as cante,y.nume_gestiune ] + ; + [from rul x ] + ; + [left join nom_gestiuni y on x.id_gestiune = y.id_gestiune ] + ; + [where x.sters = 0 and x.cante <> 0 and x.an = ?gnAn and x.luna = ?gnLuna and x.id_tip_rulaj = 0 ] + lcConditie2 + ; + [group by x.id_gestiune, y.nume_gestiune, x.id_articol, decode(y.nr_pag, 6, x.pretv, x.pret),] + ; + [x.cont, x.acont, x.id_lucrare) b ] + ; + [on a.id_articol = b.id_articol and a.pret = b.pret and a.id_gestiune = b.id_gestiune ] + ; + [and NVL(a.cont, 'XXXX') = NVL(b.cont, 'XXXX') and NVL(a.acont, 'XXXX') = NVL(b.acont, 'XXXX') ] + ; + [left join auto_vordl_facturate c on b.id_lucrare = c.id_lucrare ] + ; + [left join nom_articole d on a.id_articol = d.id_articol ] + ; + [left join vnom_lucrari e on b.id_lucrare = e.id_lucrare ] + ; + [order by b.nume_gestiune, d.denumire, d.codmat, d.um, a.pret] + lnSucces = goExecutor.oExecute(lcSql,lcCursorRaport) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,'Eroare') + Endif + If Used(lcCursorRaport) + If Reccount(lcCursorRaport) > 0 + Private pcDataora,pcPerioada + pnButon=1 + Do While pnButon=1 + pnOptiune=1 + ofrmaleg=Createobject('frm_aleg_vizualizare') + ofrmaleg.Show(1) + Do Case + Case pnButon<>1 + Loop + Case pnOptiune=1 + pcDataora = get_ora(2) + pcPerioada = [LUNA ] + Padl(Alltrim(Str(gnLuna)),2,[0]) + [/] + Alltrim(Str(gnAn)) + Select (lcCursorRaport) + Keyboard '{CTRL+F10}' + Report Form rap_articole_comenzi To Printer Prompt Preview + Case pnOptiune=2 + lcSirColoane=[nume_gestiune,denumire,codmat,um,nrord,facturat,cante,cant,cants] + lcSirNume=[Gestiune,Nume_articol,Cod_material,UM,Nr_comanda,Facturat,Iesiri,Intrari_in_luna,Stoc_precedent] + exportare(lcCursorRaport,lcSirColoane,lcSirNume) + Endcase + Release ofrmaleg + Enddo + Else + amessagebox("Nu exista inregistrari pentru listare!",0+48,"Atentie") + Endif + Use In (lcCursorRaport) + Endif + Else + lnRaspuns = 2 + Endif +Enddo +Endproc && verificare_articole +******************************************************************************************* + + +PROCEDURE viz_date_comenzi +PRIVATE poDateComenzi +poDateComenzi = '' + +TEXT TO lcSelect NOSHOW +select nrord, + id_part, + nume, + cod_fiscal, + datai, + asigurator, + inspector, + banca, + cont_banca, + adresa, + email, + telefon1, + telefon2, + nr_dosar, + validat, + id_masiniclient, + nrinmat, + series, + seriem, + culoare, + kmint, + id_masina, + id_marca, + marca, + masina, + semn, + id_lucrare, + codmat, + denumire, + cante, + pret, + data, + id + from auto_analiza_comenzi +ENDTEXT + +lcSchema = [nrord C(50),id_part N(12),nume C(70),cod_fiscal C(30),datai T,asigurator C(70),inspector C(24),banca C(40),] + ; +[cont_banca C(30),adresa C(250),email C(100),telefon1 C(30),telefon2 C(30),nr_dosar C(40),validat N(3),id_masiniclient (12),nrinmat C(40),] + ; +[series C(17),seriem C(18),culoare C(30),kmint N(12),id_masina N(7),id_marca N(7),marca C(24),masina C(20),semn C(1),] + ; +[id_lucrare N(20),codmat C(50),denumire C(100),cante N(20,4),pret N(20,4),data T,id N(20)] + + lcFiltru=[1=2] + lcOrder=[datai,nrord] + llAfiseaza=.F. + lcSchema = [] + llAfiseaza = .F. + lcgroup = [] + llModParam = .T. + lcFiltruOriginal = [] + + gencursor('poDateComenzi','crsDateComenzi', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal) + poDateComenzi.ca_baza1.afisare() + + + loFrmDate = CREATEOBJECT("frm_viz_date_comenzi") + loFrmDate.show(1) + + USE IN (SELECT('crsDateComenzi')) + USE IN (SELECT('commandes')) +ENDPROC && viz_date_comenzi \ No newline at end of file diff --git a/Programe/oproceduri_devize.prg b/Programe/oproceduri_devize.prg new file mode 100644 index 0000000..024d023 --- /dev/null +++ b/Programe/oproceduri_devize.prg @@ -0,0 +1,1795 @@ +*!* 12.06.2014 +*!* marius.mutu +*!* listeaza_bon_fiscal, listeaza_bon_fiscal_det - adaugat suma achitata prin CARD POS. suma achitata anterior se considera numerar + +*!* 24.08.2015 +*!* marius.mutu +*!* normare_comanda - vizualizare doar comenzi active (nearhivate) + +*!* 31.08.2015 +*!* marius.mutu +*!* generare_com, factureaza_comanda - salvare id partener care a referit comanda + +*!* 27.01.2016 +*!* marius.mutu +*!* factureaza_deviz - stornare avans se preiau proc_tvav si id_jtva_coloana din avansurile anterioare, in loc de cele standard din luna curenta + +*!* 29.01.2016 +*!* marius.mutu +*!* factureaza_deviz - listare cumulata articol REPARATII AUTO in loc de MANOPERA si MATERIALE + +*!* 23.11.2017 +*!* marius.mutu +*!* factureaza_deviz - tratare factura cu valoare 0 materiale si 0 manopera. se inregistreaza in scopul listarii. + +*!* 12.04.2021 +*!* marius.mutu +*!* generare_com + numarul de zile termen de executie comanda service + +*!* 08.07.2024 +*!* marius.mutu +*!* actualizare listare factura + lot C(20) + +*!* 18.10.2024 +*!* marius.mutu +*!* factureaza_deviz > pack_facturare.initializeaza_date_Factura + poDate.tip_saft + +******************************************* +* PROCEDURE generare_com( ) +* Data/ora : 01/05/05, 08:58:28 +* autor : liana.macinic +* descriere: + +****** PARAMETER BLOCK ************** +* Parametri : 0 +* +******************************************* +Procedure generare_com() + Parameters tnTipFactura + Private pnTipFactura, poGeneratorNumere + poGeneratorNumere = Createobject('oGeneratorNumere') + Local lcMesaj, lnTermenZile + + If Empty(tnTipFactura) + pnTipFactura=0 && 0 - daca vine din meniul de generare comenzi, 1 - ITP, 2 - spalare auto, 3 - diverse + lcMesaj="Nu puteti genera comenzi,deoarece aceasta luna este inchisa!" + Else + pnTipFactura=tnTipFactura + lcMesaj="Nu puteti emite facturi,deoarece aceasta luna este inchisa!" + Endif + + If glLunaInchisa + amessagebox(lcMesaj,0+48,"Luna inchisa") + Return + Endif + + Private pntipcom,pnNrCom + pntipcom = 1 + + If pnTipFactura=0 + ofrmtipcom = Createobject('frm_alegtipcom',@pntipcom) + *!* ofrmtipcom.ogtipcom.controlsource = "pntipcom" + ofrmtipcom.Show(1) + + If buton = 2 + Return + Endif + Endif + + *!* modificare v 2.0.28 + *!* lcSql = [select ] + gcS + [.getdev_comanda() as nrcom from dual] + *!* lcCursor = [crsNrCom] + *!* lnSucces = goExecutor.oExecute(lcSql,lcCursor) + *!* If lnSucces < 0 + *!* amessagebox(goExecutor.cEroare,0+16,"Eroare") + *!* Return + *!* Endif + *!* Select crsNrCom + *!* *!* modificare 31.10 + *!* Scatter Name ocomlistare + *!* *!* + *!* pnNrCom = Round(crsNrCom.nrcom,0) + Private poGeneratorNumere + poGeneratorNumere = Createobject('oGeneratorNumere') + ocomlistare = Createobject("Custom") + lnRezultat = poGeneratorNumere.creeaza_cursor_serii(20) + pnNrCom = poGeneratorNumere.aloca_numar(20,Null) + *!* modificare v 2.0.28 ^ + Do update_asigurator In update_devize.prg + Do update_inspector In update_devize.prg + + Private ofrmGencom,pcNr,pnIdInsp,pnIdAsig,pnIdMC,pnIdClie,pnIdOrdl,pnid_masina,pnKmInt,pnOreFct,pcNrDosar,pcSirIDOperatiiClient,pcObservatii,pcDefectiuni,pnIdPartRef + Store '' To pcNr,pcNrDosar,pcSirIDOperatiiClient, pcObservatii,pcDefectiuni + Store 0 To pnIdInsp,pnIdAsig,pnIdMC,pnIdClie,pnIdOrdl,pnid_masina,pnKmInt,pnOreFct,pdTermen, pnIdPartRef + + lnTermenZile = IIF(TYPE('gnTermenZileService') = 'N', m.gnTermenZileService, 10) && termenul implicit, daca nu exista optiune este de 10 zile + pdTermen = DATE() + m.lnTermenZile && termenul de pe comanda este data curenta + optiunea TermenZile + + pcNr = Alltrim(Str(pnNrCom)) + Do Case + Case pntipcom = 2 + pcNr = 'G' + Alltrim(Str(pnNrCom)) + Case pntipcom = 3 + pcNr = 'R' + Alltrim(Str(pnNrCom)) + Case pntipcom = 4 + pcNr = 'P' + Alltrim(Str(pnNrCom)) + Case pntipcom = 6 + pcNr = 'PR' + Alltrim(Str(pnNrCom)) + CASE pntipcom = 7 + pcNr = 'C' + Alltrim(Str(pnNrCom)) + Endcase + + Private pniesire + pniesire=0 + + If pnTipFactura=0 + *!* modificare 31.10 + *!* modificare v 2.0.9 + =update_norme([1=2]) && 1=2 > modificare v 2.0.18 + *!* modificare v 2.0.9 ^ + ofrmGencom = Createobject('frm_gencom',1,@pcNr,@pnIdInsp,@pnIdAsig,@pnIdMC,@pnIdClie,@pnid_masina,@pnKmInt,@pnOreFct,@pdTermen,@pcNrDosar,,,,@pcObservatii,@pcDefectiuni) + ofrmGencom.Show(1) + If pniesire!=1 + *!* modificare v 2.0.28 + poGeneratorNumere.dezaloca_numar(20) + Release poGeneratorNumere + *!* modificare v 2.0.28 ^ + Return + Endif + *!* modificare v 2.0.28 + poGeneratorNumere.verifica_numar(20,Val(Substr(pcNr,Iif(pntipcom=6,3,Iif(pntipcom=1,1,2)),At([/],pcNr,1)-Iif(pntipcom=6,3,Iif(pntipcom=1,1,2))))) + Release poGeneratorNumere + *!* modificare v 2.0.28 ^ + + pnIdOrdl = 0 + lcTermen = Iif(Empty(pdTermen) Or Isnull(pdTermen),'NULL',[']+Dtoc(pdTermen)+[']) + + lcSql = [begin pack_auto.dev_adauga_lucrare(?gcS,?gnAn,?gnLuna,?gnIdUtil,?pcNr,?pnIdInsp,] + ; + [?pnIdAsig,?pcNrDosar,?pnIdMC,?pnKmInt,?pnOreFct, to_date(]+lcTermen+[,'DD/MM/YYYY'),?pntipcom,?pcSirIDOperatiiClient, ?pcObservatii, ?pcDefectiuni, ?pnIdPartRef, ?@pnIdOrdl); end;] + + *!* lcSql = [begin pack_devize.dev_adauga_lucrare('] + gcS +[',] + Alltrim(Str(gnAn)) + [,] + Alltrim(Str(gnLuna))+; + *!* [, ]+ Alltrim(Str(gnIdUtil)) + [,'] + Alltrim(pcNr) + [',]+ Alltrim(Str(pnIdInsp)) + [,]; + *!* +Alltrim(Str(pnIdAsig))+[,]+Alltrim(Str(pnIdMC)) + [,] + Alltrim(Str(pnKmInt)) + [,to_date(]; + *!* +lcTermen+[,'DD/MM/YYYY'),?pntipcom,?@pnIdOrdl); end;] + lnSucces = goExecutor.oExecute(lcSql) + + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,'Eroare') + Return + Endif + *!* + + * Do listare_comanda With pntipcom && 22.06.2021 + DO listare_precomanda WITH m.pnIdOrdl + + Else + *!* modificare 31.10 + *!* nu se fac verificari ptr. km la bord pentru facturile de itp,de spalare si diverse + *!* modificare v 2.0.9 + =update_norme([1=2]) + *!* modificare v 2.0.9 ^ + ofrmGencom = Createobject('frm_gencom',2,@pcNr,@pnIdInsp,@pnIdAsig,@pnIdMC,@pnIdClie,@pnid_masina,@pnKmInt,@pnOreFct,@pdTermen,@pcNrDosar,,,,@pcObservatii,@pcDefectiuni) + With ofrmGencom + .lverificari=.F. + .clb_kmint.teXT_SIMPLU1.ReadOnly=.T. + .clb_termen.teXT_SIMPLU1.ReadOnly=.T. + Endwith + ofrmGencom.Show(1) + If pniesire!=1 + *!* modificare v 2.0.28 + poGeneratorNumere.dezaloca_numar(20) + Release poGeneratorNumere + *!* modificare v 2.0.28 ^ + Return + Endif + *!* + *!* modificare v 2.0.28 + poGeneratorNumere.verifica_numar(20,Val(Substr(pcNr,Iif(pntipcom=6,3,Iif(pntipcom=1,1,2)),At([/],pcNr,1)-Iif(pntipcom=6,3,Iif(pntipcom=1,1,2))))) + Do factureaza_comanda With pnTipFactura + Release poGeneratorNumere + *!* Do factureaza_comanda With pnTipFactura + *!* modificare v 2.0.28 ^ + Endif + Release poGeneratorNumere + +Endproc + +**********************sfarsit procedura generare_com******************* + +******************************************* +* PROCEDURE normare_comanda( ) +* Data/ora : 01/10/05, 11:50:13 +* autor : liana.macinic +* descriere: + +****** PARAMETER BLOCK ************** +* Parametri : 0 +* +******************************************* +Procedure normare_comanda( ) + If glLunaInchisa + amessagebox("Nu puteti norma comenzi,deoarece aceasta luna este inchisa!",0+48,"Luna inchisa") + Return + Endif + + Private pcValoare1,pcValoare2,pcIntre,pnCriteriu, pnCriteriu2, pcFiltruOra, pcFiltruVFP + Private pcselect,pcschema,pcfiltru,pcorder,pocomenzi,llAfiseaza + Store '' To pocomenzi + pcValoare1 = "" + pcValoare2 = "" + pnCriteriu = 1 + pnCriteriu2 = 1 + pcIntre = "" + pcFiltruOra = "" + pcFiltruVFP = "" + Do Form frm_filtru_text With "nrord","Nr. comanda",pnCriteriu,pnCriteriu2 To pcFiltruOra + + buton=2 + Private poordl,pcschema1,pcselect1 + Store '' To poordl + *!* pcschema1=['DATAI d,NRORD c(30),VALIDAT n(1),NUME c(50),NRINMAT c(10),ID_LUCRARE n(10),ID_ORDL n(10)'] + *!* pcselect1=['select datai,nrord,validat,nume,nrinmat,id_lucrare,id_ordl from ] + gcS + [.dev_vordl where 1=2'] + pcschema1=[''] + pcselect1=['select * from ] + gcS + [.auto_normare_comenzi a where 1=2'] + pcorder1=[datai] + If !Empty(pcFiltruOra) + pcFiltru1 = gcCondLuna + [ and a.inchis_fortat = 0 and a.validat=0 ] + pcFiltruOra + Else + pcFiltru1 = [1=2] + Endif + llAfiseaza = .F. + gencursor('poordl','cliord',pcselect1,pcFiltru1,pcschema1,pcorder1,llAfiseaza) + poordl.ca_baza1.afisare() + + ovs=Createobject('FRM_NOM_COM') + If !Empty(pcFiltruOra) + ovs.gcliord.SetAll('DynamicFontItalic','IIF(validat=1,.T.,.F.)','Column') + ovs.gcliord.SetAll('DynamicForeColor','IIF(validat=1,RGB(128,128,128),RGB(0,0,0))','Column') + *!* modificare v 2.0.17 + With ovs.ck_nrord + .cValoare1 = pcValoare1 + .cValoare2 = pcValoare2 + .criteriu = pnCriteriu + .criteriu2 = pnCriteriu2 + .cIntre = pcIntre + .filtru = pcFiltruOra + .filtru_vfp = pcFiltruVFP + .Value = 1 + Endwith + *!* modificare v 2.0.17 ^ + Endif + ovs.Show(1) + +Endproc +**********************sfarsit procedura normare_comanda******************* +******************************************* +* PROCEDURE dec2rgb( ) +* Data/ora : 02/11/05, 16:29:34 +* autor : liana.macinic +* descriere: + +****** PARAMETER BLOCK ************** +* Parametri : 0 +* +******************************************* +Procedure dec2rgb + Lparameters lnValue + + lTalk=Iif(Set('TALK')='ON',.T.,.F.) + Set Talk Off + + * Determine the hexadecimal equivalent of the decimal parameter passed + lcHex = "" + lnFactor = 24 && set up factor value one exponent greater than used + + For lnPos = 6 To 1 Step -1 + lnFactor = lnFactor - 4 && decrement factorial + lnExp = 2 ^ lnFactor && extrapolate next least power of two + For lnOrd = 15 To 1 Step -1 + If lnValue < lnExp && no value greater than current one, + lcHex = lcHex + "0" && so store a zero in this position + Exit && go back for the next value + Endif + If lnValue >= lnExp * lnOrd && is value greater than or equal to? + * find the matching hex value from its ordinal position + lcHex = lcHex + Substr('123456789ABCDEF', lnOrd, 1) + Exit + Endif + Endfor + lnValue = lnValue % lnExp && leave remainder of exponential division + Endfor + + * reverse the order of the individual color indicators + lcHex = Right(lcHex, 2) + Substr(lcHex, 3, 2) + Left(lcHex, 2) + + * convert the pairs into decimal values + lnPick = 2 && offset to determine which pair to convert + lcRGB = "" && start of string delineator + + * parse each color indicator and convert to decimal + For lnColor = 1 To 3 + lcHue = Substr(lcHex, (lnPick * lnColor) - 1, 2) && pull out color + lnMSB = Asc(Left(lcHue, 1)) && "Most Significant Bit" + lnLSB = Asc(Right(lcHue, 1)) && "Least Significant Bit" + + * subtract appropriate value from each to get decimal equivalent + lnMSB = lnMSB - Iif(lnMSB > 57, 55, 48) + lnLSB = lnLSB - Iif(lnLSB > 57, 55, 48) + + * then add decimals together + lcRGB = lcRGB + Transform( lnMSB * 16 + lnLSB, '999') + ", " + Endfor + lcRGB = Left(lcRGB, Len(lcRGB) - 2) + Return Alltrim(lcRGB) + +Endproc + +**********************sfarsit procedura dec2rgb******************* + + +*------------------------------inceput procedura calc_analitic----------------------------------------- +* PROCEDURE calc_analitic( tcCont, pcAct, ) +* Data : 03/15/05, 14:52:49 +* autor : liana.macinic +* descriere: + +****** PARAMETER BLOCK ************** +* Parameters : 3 +* Parameter 1: +* Parameter 2: pcRul +* Parameter 3: +* +******************************************* +Procedure calc_analitic + Parameters tcCont,pcAct,pcRul + + Private pcCont,pcAct,pcRul,pParamP,pParamS + Store 0 To pParamP,pParamS + + lcAlias = Alias() + + pcCont = Alltrim(tcCont) + + lcSel = [SELECT * from ] + gcS + [.config_analitice WHERE cont = ?pcCont] + lcCursor = 'crs_cfg_ana' + lnSucces = goExecutor.oExecute(lcSel,lcCursor) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,"Eroare") + Endif + + If lnSucces > 0 + If Reccount('crs_cfg_ana')=0 + Use In crs_cfg_ana + lnSucces = -1 + Endif + Endif + + If lnSucces > 0 + Select crs_cfg_ana + Scatter Name ocfg + lcCampPrefix = Nvl(Alltrim(ocfg.camp_leg_prefix),'') + lcCampSufix = Nvl(Alltrim(ocfg.camp_leg_sufix),'') + + + If !Empty(lcCampPrefix) + If Type('&pcRul..'+lcCampPrefix) # 'U' + pParamP = &pcRul..&lcCampPrefix + Else + If Type('&pcAct..'+lcCampPrefix) # 'U' + pParamP = &pcAct..&lcCampPrefix + Endif + Endif + Endif + + + If !Empty(lcCampSufix) + If Type('&pcRul..'+lcCampSufix) # 'U' + pParamS = &pcRul..&lcCampSufix + Else + If Type('&pcAct..'+lcCampSufix) # 'U' + pParamS = &pcAct..&lcCampSufix + Endif + Endif + Endif + + lcSel = [{call fconturi_analitice(?gcs,?pcCont,0,?pParamP,?pParamS)}] + lcCursor = 'crs_analitice' + lnSucces = goExecutor.oExecute(lcSel,lcCursor) + + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,"Eroare") + Endif + + Endif + + && iau Primul Simbol Analitic din Tabel - ordonat pt ca e selectat cu Distinct + If lnSucces > 0 + Select crs_analitice + Go Top + lcAnalitic = Alltrim(Left(acont,4)) + Endif + + && verificare analiticului cu Planul de Conturi + If lnSucces > 0 + lcSel = [SELECT cont,acont from ] + gcS + [.vplcont_analitic WHERE cont = ?pcCont and acont = ?lcAnalitic and an = ?gnAn ] + lcCursor = 'crs_verific' + lnSucces = goExecutor.oExecute(lcSel,lcCursor) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,"Eroare") + Endif + Endif + + If lnSucces > 0 + If Reccount('crs_verific')=0 + lnSucces = -1 + Endif + Endif + + If Used('crs_cfg_ana') + Use In crs_cfg_ana + Endif + If Used('crs_verific') + Use In crs_verific + Endif + If Used('crs_analitice') + Use In crs_analitice + Endif + If Used('crs_verific') + Use In crs_verific + Endif + + If lnSucces < 0 + lcAnalitic = '' + Endif + + Select (lcAlias) + Return lcAnalitic + + + +Endproc +*------------------------------sfarsit procedura calc_analitic----------------------------------------- + +*------------------------------inceput procedura factureaza_deviz ----------------------------------------- +* PROCEDURE factureaza_deviz( ) +* Data : 03/16/05, 14:07:08 +* autor : liana.macinic +* descriere: facturare + +****** PARAMETER BLOCK ************** +* Parameters : 0 +* +******************************************* +Procedure factureaza_comanda + Lparameters tnTipFactura + Local lcTip,lnIdSet,lnTipFactura,lnTipListare + Local ofrmincasare As 'frm_incasare_avans' + Local ofrmnormsect As 'frm_aleg_operatie' + Local lcSql, lcTermen, lcTipJ, llTaxareInversa, lnLungime, lnProcTVA, lnSucces, loJtva + *:Global oCautare, oactan, ocomanda, oincasare, otva, pnid_norme, pnore, pntimpn, poactan + *:Global taValori[1], x + + Private pnid_norma,pnid_sectie,pcsectie,pcdenop,pnProcTva,pnTipIncasare,pnIdJtvaColoana,pnIdTva + Private pniesire,pnid_mecanic,pcnume,pocomenzi + Private pcselect,pcschema,pcfiltru,pcorder,llAfiseaza + Private pnIdOrdl + Store "" To oCautare,pocomenzi + Store 1 To pnTipIncasare + lnTipFactura=tnTipFactura + pnProcTva = 0 + pnIdTva = 0 + pnIdJtvaColoana = 0 + optiuni_firma() && reinitializare optiuni firma + Do Case + Case lnTipFactura = 1 + lcTip = 'ITP' + lnIdSet = 31003 + pnid_sectie=Nvl(gnid_sectie_itp,0) + If Empty(gnid_norme_itp) Or Isnull(gnid_norme_itp) + pnid_norme=0 + =ccnorme() + Else + pnid_norme=gnid_norme_itp + =ccnorme('NORMA',pnid_norme) + Endif + Case lnTipFactura = 2 + lcTip = 'SPALARE AUTO' + lnIdSet = 31004 + pnid_sectie=Nvl(gnid_sectie_spalare,0) + If Empty(gnid_norme_spalare) Or Isnull(gnid_norme_spalare) + pnid_norme=0 + =ccnorme() + Else + pnid_norme=gnid_norme_spalare + =ccnorme('NORMA',pnid_norme) + Endif + Case lnTipFactura = 3 + lcTip = 'DIVERSE' + lnIdSet = 31005 + pnid_sectie=0 + pnid_norme=0 + =ccnorme() + Endcase + pcdenop="" + pnid_mecanic=0 + pcsectie="" + pntimpn=1 + pnore=1 + Do ccsectii In update_devize.prg + =ccmecanici() + *!* If lnTipFactura = 1 + *!* pnid_norma = gnId_itp + *!* ofrmnormsect=Createobject('frm_aleg_sectie') + *!* ofrmnormsect.Show(1) + *!* Else + ****************************************** + && alegere denumire operatie + sectie + mecanic + timpn + ore + pniesire=0 + ofrmnormsect=Createobject('frm_aleg_operatie') + ofrmnormsect.Show(1) + *!* pnid_norma = gnid_spalare + *!* ofrmnormsect=Createobject('frm_aleg_sectie') + *!* ofrmnormsect.Show(1) + *!* Else + + *!* Endif + If pniesire !=1 + Return + Endif + ****************************************** + ****************************************** + *!* 27.07.2007 + *!* marius.mutu + *!* lnNumarFactura = aloca_numar_fact() + + && adaugare lucrare + SQLSetprop(gnHandle,"Transactions",2) + pnIdOrdl = 0 + *!* modificare v 2.0.14 + *!* lcSql = [begin pack_devize.dev_adauga_lucrare(?gcS,?gnAn,?gnLuna,?gnIdUtil,?pcNr,?pnIdInsp,] + ; + *!* [?pnIdAsig,?pcNrDosar,?pnIdMC,?pnKmInt,to_date(NULL,'DD/MM/YYYY'),?pntipcom,?@pnIdOrdl); end;] + lcTermen = Iif(Empty(pdTermen) Or Isnull(pdTermen),'NULL',[']+Dtoc(pdTermen)+[']) + lcSql = [begin pack_auto.dev_adauga_lucrare(?gcS,?gnAn,?gnLuna,?gnIdUtil,?pcNr,?pnIdInsp,] + ; + [?pnIdAsig,?pcNrDosar,?pnIdMC,?pnKmInt,?pnOreFct,to_date(]+lcTermen+[,'DD/MM/YYYY'),?pntipcom,?pcSirIDOperatiiClient, ?pcObservatii, ?pcDefectiuni, ?pnIdPartRef, ?@pnIdOrdl); end;] + *!* modificare v 2.0.14 ^ + lnSucces = goExecutor.oExecute(lcSql) + + If lnSucces < 0 + Sqlrollback(gnHandle) + SQLSetprop(gnHandle,"Transactions",1) + amessagebox(goExecutor.cEroare,0+16,'Eroare') + Return + Endif + + ****************************************** + + ****************************************** + If Used('crscomenzi') + Use In crsComenzi + Endif + pcschema=[''] + pcselect=['select * from ] + gcS + [.auto_ordl_facturare where 1=2'] + pcfiltru = [ id_ordl = ] + Alltrim(Str(pnIdOrdl)) + pcorder=[datai,nrord] + llAfiseaza=.F. + gencursor('pocomenzi','crscomenzi',pcselect,pcfiltru,pcschema,pcorder,llAfiseaza) + pocomenzi.ca_baza1.afisare() + Select crsComenzi + Scatter Name ocomanda + Use In crsComenzi + ****************************************** + + ****************************************** + && date factura + lnLungime=4 + Dimension taValori[lnLungime,3] + taValori[1,1]="poAct.v4111" + taValori[1,2]=Alltrim(ocomanda.nume) + taValori[1,3]=.T. + taValori[2,1]="poAct.nrord" + taValori[2,2]=Alltrim(ocomanda.nrord) + taValori[2,3]=.T. + taValori[3,1]="poAct.id_lucrare" + taValori[3,2]=Alltrim(Str(ocomanda.id_lucrare)) + taValori[3,3]=.T. + taValori[4,1]="poAct.id_vv4111" + taValori[4,2]=Alltrim(Str(ocomanda.id_partener)) + taValori[4,3]=.T. + + *!* taValori[5,1]="poAct.nract" + *!* taValori[5,2]=Alltrim(Str(lnNumarFactura)) + *!* taValori[5,3]=.F. + + If !Empty(pnid_sectie) + Dimension taValori[lnLungime+2,3] + taValori[lnLungime+1,1]="poAct.id_sectie" + taValori[lnLungime+1,2]=Alltrim(Str(pnid_sectie)) + taValori[lnLungime+1,3]=.T. + taValori[lnLungime+2,1]="poAct.sectie" + taValori[lnLungime+2,2]=Alltrim(pcsectie) + taValori[lnLungime+2,3]=.T. + lnLungime = lnLungime+2 + Endif + + Dimension taValori[lnLungime+2,3] + taValori[lnLungime+1,1]="poAct.id_fdoc" + *!* modificare v 2.0.28 + *!* taValori[lnLungime+1,2]=Alltrim(Str(gnid_fdoc_factura)) + taValori[lnLungime+1,2] = Iif(Empty(Nvl(pnIdAsig,0)),Alltrim(Str(gnid_fdoc_fact)),Alltrim(Str(gnid_fdoc_factasig))) + *!* modificare v 2.0.28 ^ + taValori[lnLungime+1,3]=.T. + taValori[lnLungime+2,1]="poAct.fdoc" + taValori[lnLungime+2,2]='FACTURA' + taValori[lnLungime+2,3]=.T. + lnLungime=lnLungime+2 + + lans(lnIdSet,.F.,.T.,@taValori) + + If buton=2 + Do deschid_actc + Sqlrollback(gnHandle) + SQLSetprop(gnHandle,"Transactions",1) + *!* Do dezaloca_numar_fact In oserii_numere.prg + poGeneratorNumere.dezaloca_numere() + Return + Endif + + *!* SELECT actactan + *!* GO TOP + *!* lnNumarFacturaAct = nract + *!* IF lnNumarFacturaAct <> lnNumarFactura + *!* DO dezaloca_numar_fact In oserii_numere.prg + *!* ENDIF + ****************************************** + + + ****************************************** + && introducere suma factura + incasare + Use In (SELECT('v_nom_casa')) + lcSql=[select id_part,nume from vcoresp_tip_part where tip_partener IN ('BANCA LEI', 'CASA LEI')] + lnSucces=goExecutor.oExecute(lcSql,'v_nom_casa') + If lnSucces < 0 + Sqlrollback(gnHandle) + SQLSetprop(gnHandle,"Transactions",1) + *!* Do dezaloca_numar_fact In oserii_numere.prg + poGeneratorNumere.dezaloca_numere() + amessagebox(goExecutor.cEroare,0+16,'Eroare') + Return + Endif + + local lnTvaIncasare, lcContTVA + Select actactan + Calculate Max(tva_incasare) To lnTvaIncasare && 0/1 + + lnProcTVA = GetProcTvaStandard() && 21 + lcTipJ = "JV" + llTaxareInversa = .F. + + pnIdJtvaColoana = ProcentTva2IdJtva(m.lnProcTVA, m.lcTipJ, m.llTaxareInversa, m.lnTvaIncasare) + loJtva = GeJtvaColoana(m.pnIdJtvaColoana, m.lnTVAIncasare, m.lcTipJ) + pnIdTva = loJtva.id_tva + pnProcTva = 1 + m.lnProcTVA / 100 + + lcContTVA = IIF(lnTvaIncasare = 1, [4428], [4427]) + + Private pnTotalfTva,pnTotalTva,pnTotalcTva,pnNrChit,pnIdCasa,pcCasa, pcSerieChit,pnPretCuTva, pnPOS + Store 0 To pnTotalfTva,pnTotalTva,pnTotalcTva,pnIdCasa,pnNrChit,pnPretCuTva, pnPOS + Store [] To pcSerieChit, pcCasa && modificare v 2.0.28 + pniesire=1 + *!* modificare v 2.0.42 : IIF(lnTipFactura=3,1,2) in loc de 1 + ofrmincasare=Createobject('frm_incasare_avans',lnTvaIncasare,IIF(lnTipFactura=3,1,2)) + ofrmincasare.lb_titlu_alb_b121.Caption=Upper(Alltrim("FACTURA "+lcTip)) + ofrmincasare.Show(1) + If pniesire!=1 + Sqlrollback(gnHandle) + SQLSetprop(gnHandle,"Transactions",1) + *!* Do dezaloca_numar_fact In oserii_numere.prg + poGeneratorNumere.dezaloca_numere() + Return + Endif + Use In v_nom_casa + ****************************************** + + Select actactan + Replace suma With pnTotalfTva,explicatia With "MANOPERA "+lcTip,id_jtva_coloana With pnIdJtvaColoana,proc_tva With pnProcTva For Alltrim(scc)='704' Or Alltrim(scc)='419' + Replace suma With pnTotalTva,explicatia With "TVA MANOPERA "+lcTip,id_sectie With pnid_sectie,sectie With pcsectie,id_jtva_coloana With pnIdTva,proc_tva With pnProcTva For scc=lcContTVA + *!* Replace proc_tva With m.ctvam,explicatia With "MANOPERA "+lcTip For Alltrim(scd)='411' + *!* modificare v 2.1.0 : am adaugat Alltrim(scd) = lcContTva + Replace proc_tva With pnProcTva For Alltrim(scd)='4111' or alltrim(scd) = lcContTva + + If pnTipIncasare>1 + *!* If !Empty(pnNrChit) + *!* incasare = 5311 + Select actactan + Go Top + Scatter Name oactan + Append Blank + Gather Name oactan Fields Except id_jtva_coloana,proc_tva && Fields Except suma, ascc, scc, id_partc + Replace nr_nota With Recno(),partc With partd, id_partc With id_partd, suma With pnTotalcTva + Replace scc With Alltrim(scd), ascc With ascd, scd With '5311', ascd With '', perecheC With nract,nract With pnNrChit + Replace id_partd With pnIdCasa,partd With m.pcCasa,neimpozab With 0, explicatia With 'INCASARE '+lcTip, id_factd With id_fact, datascad With {} + Do Case + Case pnTipIncasare=2 + Replace id_fdoc With gnid_fdoc_bonfiscal,fdoc With 'BON FISCAL' + Case pnTipIncasare=3 + Replace id_fdoc With gnid_fdoc_chitanta,fdoc With 'CHITANTA' && modificare v 2.0.29 : am inlocuit gnid_fdoc_incasare + Endcase + *!* modificare v 2.1.0 + If lnTvaIncasare = 1 + local lnTotalTvaNeex + Select actactan + calculate sum(suma) for scc = lcContTva to lnTotalTvaNeex + Locate For scc = lcContTVA + If Found() + Scatter Name otva + Locate For scd = '5311' + If Found() + Scatter Name oincasare + Append Blank + Gather Name oincasare Fields Except id_partc,id_partd,partc,partd,scc,scd,id_fact,pereched,perechec,id_jtva_coloana,suma + Replace suma with lnTotalTvaNeex,scd With '4428',scc With '4427',id_fact With -5,; + perechec With otva.nract,id_jtva_coloana With getIdTva(pnIdTva,0),proc_tva with otva.proc_tva + Endif + Endif + release lnTotalTvaNeex + Endif + *!* modificare v 2.1.0 ^ + + IF m.pnTipIncasare = 2 AND m.pnPOS = 1 + SELECT actactan + Locate For scd = '5311' + If Found() + REPLACE explicatia4 WITH partd && numele bancii + REPLACE scd WITH '5125', id_partd WITH id_partc, partd WITH partc + ENDIF + ENDIF + Endif + + Select actactan + Scan + Scatter Name poactan + If Type('poActan.cont') = 'U' + x = AddProperty(poactan,'cont',poactan.scc) + Endif + poactan.ascc = calc_analitic(poactan.scc,'poActan','poActan') + Select actactan + Replace ascc With poactan.ascc + + Release poactan + Select actactan + Scatter Name poactan + If Type('poActan.cont') = 'U' + x = AddProperty(poactan,'cont',poactan.scd) + Endif + poactan.ascd = calc_analitic(poactan.scd,'poActan','poActan') + Select actactan + Replace ascd With poactan.ascd + Endscan + + ****************************************** + *!* modificare 09.07 + *!* AddProperty(ocomanda,'delegat','') + *!* AddProperty(ocomanda,'eliberatde','') + *!* AddProperty(ocomanda,'bi','') + *!* AddProperty(ocomanda,'nrinmat_exp',ocomanda.nrinmat) + *!* ofrmdelegat=Createobject("frm_delegat_factura") + *!* ofrmdelegat.nidpartener=ocomanda.id_partener + *!* ofrmdelegat.cclient=ocomanda.nume + *!* ofrmdelegat.cnrinmat_exp=ocomanda.nrinmat_exp + *!* ofrmdelegat.Show(1) + ****************************************** + + Private buton + buton=1 + Select actactan + Replace all tva_incasare with lnTvaIncasare && modificare v 2.1.0 + Go Top + *!* modificare v 2.0.17 + *!* Do Form verificare With .T. + If !verificare_note_contabile('actactan', .T.,.T., .F.) + Do Form verificare With .T. + Endif + *!* modificare v 2.0.17 ^ + If buton=2 + Sqlrollback(gnHandle) + SQLSetprop(gnHandle,"Transactions",1) + *!* Do dezaloca_numar_fact In oserii_numere.prg + poGeneratorNumere.dezaloca_numere() + Return + Endif + + lcSql = [begin pack_auto.dev_adauga_oper_fact(?gcS,?pnIdOrdl,?pnid_sectie,?pnid_norme,?pnTotalFTva,?pntimpn,?pnore,]+; + [?gnIdUtil,?pnid_mecanic); end;] + lnSucces = goExecutor.oExecute(lcSql) + If lnSucces < 0 + Sqlrollback(gnHandle) + SQLSetprop(gnHandle,"Transactions",1) + *!* Do dezaloca_numar_fact In oserii_numere.prg + poGeneratorNumere.dezaloca_numere() + amessagebox(goExecutor.cEroare,0+16,'Eroare') + Return + Endif + + *!* modificare v 2.0.28 + *!* Select actactan + *!* Do oscrie_in_fisiere + *!* *!* Sqlrollback(gnHandle) + *!* Sqlcommit(gnHandle) + *!* SQLSetprop(gnHandle,"Transactions",1) + *!* amessagebox("Factura a fost inregistrata!",0+64,"Confirmare facturare") + *!* modificare v 2.0.28 ^ + ****************************************** + && listari + *!* DO listare_precomanda WITH pnIdOrdl + *!* modificare v 2.0.28 + *!* Do listare_FACTURA With ocomanda.id_partener,'actactan',ocomanda.nrord,ocomanda.nrinmat,Iif(lnTipFactura=2,lnTipFactura,3),0,0,0,0,0,0,pcdenop,lnTipFactura In oproceduri_listari +*!* modificare v 2.0.35 +*!* If factureaza_deviz(ocomanda.id_lucrare,ocomanda.nrord,ocomanda.nrinmat,pcdenop) + *!* modificare v 2.0.41 : am adaugat Alltrim(Str(ocomanda.id_lucrare)) + If factureaza_deviz(ocomanda.id_lucrare,ocomanda.nrord,ocomanda.nrinmat,pcdenop,,,,,,,ALLTRIM(STR(pnIdOrdl)),Alltrim(Str(ocomanda.id_lucrare))) +*!* modificare v 2.0.35 ^ + Sqlcommit(gnHandle) + Else + poGeneratorNumere.dezaloca_numere() + Sqlrollback(gnHandle) + Endif + SQLSetprop(gnHandle,"Transactions",1) + *!* modificare v 2.0.28 ^ + Release ocomanda + *!* toClient : id-ul de client + *!* tcCursor : Alias'ul cursorului + *!* tnTipfact : 1 - finala, 2 - spalare , 3 - restul + *!* tnProcDiscM,tnProcDiscN,tnProcDiscM,tnDiscountN,tnDiscountM,tnDiscountTvaM,tnDiscountTvaN,tcdenop +Endproc +*------------------------------sfarsit procedura factureaza----------------------------------------- +****************************************************************************************************************************** +Procedure factureaza_deviz + Lparameters tnIdComanda,tcNrOrd,tcNrInmat,tcDenop,tnMultiple,tnDiscountM,tnDiscountN,tnProcDiscM,tnProcDiscN,tnIdOrdl,tcSirIdOrdl,tcSirIdLucrare,tnPretCuTva + *!* Parameters tnIdClient,tcCursor,tcSirNrord,tcNrInmat,tnTipfact,tnProcDiscM,tnProcDiscN,tnDiscountM,tnDiscountN,tnDiscountTvaM,tnDiscountTvaN,tcdenop,tnTipFactura + Local lnProcTvav,lnIdJTvaColoana,lnIdSet,llScris,ltDataOra,lnPretCuTva + LOCAL llArticolCumulat, llFacturaZero, lnTaxCode + lnProcTvav = 0 + lnIdJTvaColoana = Null + lnTaxCode = NULL + lnIdSet = 0 + lnDiscountM = Iif(Empty(tnDiscountM),0,tnDiscountM) + lnDiscountN = Iif(Empty(tnDiscountN),0,tnDiscountN) + lnProcDiscM = Iif(Empty(tnProcDiscM),0,tnProcDiscM) + lnProcDiscN = Iif(Empty(tnProcDiscN),0,tnProcDiscN) + lnMultiple = Iif(Empty(tnMultiple),0,tnMultiple) + lcDenop = Iif(Empty(tcDenop),[],Alltrim(Upper(tcDenop))) + lnPretCuTva = IIF(EMPTY(tnPretCuTva),0,tnPretCuTva) && modificare v 2.0.41 + lcCursorDeviz = [crsdeviz] && modificare v 2.0.41 + llFacturaZero = .F. + + If Used('crsvanztemp') + Use In crsvanztemp + Endif + If Used('crsfactura') + Use In crsfactura + Endif + If Used(lcCursorDeviz) + Use In (lcCursorDeviz) + Endif + + creeaza_facturacrs([crsfactura]) +*!* modificare v 2.0.41 +*!* Create Cursor (lcCursorDeviz)(denumire c(100),explicatie c(240),cante N(20,4),pretv N(20,4),proc_tvav N(7,3),discunitar N(20,4),id_jtva_coloana N(10),; +*!* pretvval N(20,4),id_articol N(10),um c(10) Null,serie c(10) Null Default Null,codmat c(50) Null Default Null,Pret N(7,3),pretd N(7,3),; +*!* id_valuta N(10) Null Default Null) + CREATE CURSOR (lcCursorDeviz)(id_vanzare_det n(10) DEFAULT RECNO(),id_articol N(10),explicatie c(240),denumire c(100),; + lot C(20) NULL DEFAULT null, serie c(10) NULL DEFAULT null,codmatf c(50) NULL DEFAULT null,codmat c(50) NULL DEFAULT null,; + codbare c(50) NULL DEFAULT null,id_jtva_coloana N(10),ID_JTVA_COLOANA_EX N(10) null,taxcode N(6) null, pret_achizitie N(20,4) DEFAULT 0,cantitate N(20,4),; + proc_Tvav N(7,3),um c(10) null,pret_cu_tva N(1) DEFAULT 0,pret N(20,4),; + pret_val N(20,4) DEFAULT 0,discount_unitar N(20,4),discount_unitar_val N(20,4) DEFAULT 0,; + id_vanzare_set N(10) NULL DEFAULT null,id_gestiune N(10) NULL DEFAULT null,id_ctr N(20) NULL DEFAULT null,; + numar_contract c(10) NULL DEFAULT null,id_valuta N(10) DEFAULT 0,tip_valuta N(1) DEFAULT 0,; + CURS N(10,4) DEFAULT 0,multiplicator n(1) DEFAULT 1,nume_val c(50) DEFAULT " ") +*!* modificare v 2.0.41 ^ + + Select actactan + Locate For proc_tva <> 0 + If Found() + lnProcTvav = proc_tva + lnIdJTvaColoana = id_jtva_coloana + lnTaxCode = taxcode + ENDIF + + * Verific daca factura are toate sumele 0. Daca are toate sumele 0, inregistrez totusi factura in vanzari, in scopul listarii. + Select actactan + LOCATE FOR suma <> 0 + llFacturaZero = !FOUND() + + Sum suma For Alltrim(scd) = '4111' And Alltrim(scc) = '707' And Left(Alltrim(explicatia),3) = "MAT" To lnMaterialeFTva + Sum suma For Alltrim(scd) = '4111' And Alltrim(scc) = '704' And Left(Alltrim(explicatia),3) = "MAN" To lnManoperaFTva + Sum suma For Alltrim(explicatia)='STORNARE AVANS' And !Inlist(Alltrim(scc),'4427','4428') To lnStornareAvansFTva + Sum suma For Alltrim(scd) = '4111' And Alltrim(scc) = Iif(gnAvans419=1,[419],[707]) And Like([AVANS*],Upper(Alltrim(explicatia))) To lnAvansFTva + *!* modificare v 2.0.41 + Sum suma For Alltrim(scd) = '4111' And Like([AVANS*],Upper(Alltrim(explicatia))) To lnAvansCTva + Sum suma For Alltrim(scd) = '4111' AND (Left(Alltrim(explicatia),3) = "MAT" OR Left(Alltrim(explicatia),7) = "TVA MAT") To lnMaterialeCTva + *!* modificare v 2.1.12 : am pus (-1)*SIGN(...)*ABS(suma) in loc de suma + SUM (-1)*SIGN(lnMaterialeFTVA)*ABS(suma) FOR LEFT(ALLTRIM(explicatia),12) = "DISCOUNT MAT" TO lnDiscountNCTva + SUM (-1)*SIGN(lnManoperaFTva)*ABS(suma) FOR LEFT(ALLTRIM(explicatia),12) = "DISCOUNT MAN" TO lnDiscountMCTva + *!* modificare v 2.0.41 ^ + *!* modificare v 2.0.42 + Sum suma For Alltrim(scd) = '4111' And (Left(Alltrim(explicatia),3) = "MAN" OR Left(Alltrim(explicatia),7) = "TVA MAN") To lnManoperaCTva + *!* modificare v 2.0.42 ^ + Locate For id_set <> 0 + If Found() + lnIdSet = id_set + Endif + Private poDate + poDate = Createobject("oDateFactura",lnIdSet,-12) + *!* modificare ROAAUTO v 2.1.0 : tva_incasare + Select Distinct dataireg,id_fdoc,dataact,datascad,serie_act,nract,id_partd As id_part,nume_val,id_valuta,id_lucrare,tva_incasare ; + From actactan ; + WHERE Alltrim(scd) = '4111' ; + Into Cursor crstemp + +*!* modificare v 2.0.41 +*!* If lnAvansFTva <> 0 +*!* Insert Into crsdeviz(denumire,cante,pretv,proc_tvav,discunitar,id_jtva_coloana,pretvval,id_articol,Pret,pretd) ; +*!* values("AVANS",1,lnAvansFTva,lnProcTvav,0,lnIdJTvaColoana,0,-10002,0,0) + IF (lnAvansFTva<>0 AND lnPretCuTva = 0) OR (lnAvansCTva<>0 AND lnPretCuTva = 1) +*!* Insert Into (lcCursorDeviz)(denumire,cante,pretv,proc_tvav,discunitar,id_jtva_coloana,pretvval,id_articol,Pret,pretd,cu_tva) ; +*!* values("AVANS",1,IIF(lnAvansPretCTva=1,lnAvansCTva,lnAvansFTva),lnProcTvav,0,lnIdJTvaColoana,0,-10002,0,0,lnAvansPretCTva) + Insert Into (lcCursorDeviz)(id_articol,denumire,explicatie,cantitate,um,id_jtva_coloana,proc_Tvav,taxcode,pret,discount_unitar,pret_cu_tva) ; + values(-100005,"AVANS","",1,"",lnIdJTvaColoana,lnProcTvav,lnTaxCode,IIF(lnPretCuTva=1,lnAvansCTva,lnAvansFTva),0,lnPretCuTva) +*!* modificare v 2.0.41 ^ + Endif + +*!* modificare v 2.0.41 +*!* If lnMaterialeFTva <> 0 +*!* Insert Into (lcCursorDeviz)(denumire,cante,pretv,proc_tvav,discunitar,id_jtva_coloana,pretvval,id_articol,Pret,pretd) ; +*!* values ("MATERIALE",1,lnMaterialeFTva,lnProcTvav,ABS(lnDiscountN),lnIdJTvaColoana,0,-10001,0,0) + IF (lnMaterialeFTva<>0 AND !glAutoBonDet) OR (lnMaterialeCTva <> 0 AND glAutoBonDet) OR m.llFacturaZero + *!* modificare v 2.1.12 : am pus SIGN(lnMaterialeFTVA) pentru ca discountul trebuie sa aiba acelasi semn ca totalul de la materiale + Insert Into (lcCursorDeviz)(id_articol,denumire,explicatie,cantitate,um,id_jtva_coloana,proc_Tvav,taxcode,pret,discount_unitar,pret_cu_tva) ; + values (-100003,"MATERIALE","",1,"",lnIdJTvaColoana,lnProcTvav,lnTaxCode,IIF(glAutoBonDet,lnMaterialeCTva,lnMaterialeFTva),; + SIGN(lnMaterialeFTva)*IIF(glAutoBonDet,ABS(lnDiscountNCTva),ABS(lnDiscountN)),IIF(glAutoBonDet,1,0)) +*!* modificare v 2.0.41 ^ + Endif + +*!* modificare v 2.0.42 +*!* If lnManoperaFTva <> 0 +*!* *!* modificare v 2.0.41 +*!* *!* Insert Into (lcCursorDeviz)(denumire,cante,pretv,proc_tvav,discunitar,id_jtva_coloana,pretvval,id_articol,Pret,pretd,explicatie) ; +*!* *!* values(Iif(lnIdSet=31003,"INSPECTIE TEHNICA PERIODICA",Iif(lnIdSet=31004,"SPALARE AUTO","MANOPERA")),1,lnManoperaFTva,lnProcTvav,ABS(lnDiscountM),lnIdJTvaColoana,0,Iif(lnIdSet=31003,-10004,Iif(lnIdSet=31004,-10005,-10000)),0,0,Iif(lnIdSet=31005,lcDenop,[])) +*!* Insert Into (lcCursorDeviz)(id_articol,denumire,explicatie,cantitate,um,id_jtva_coloana,proc_Tvav,pret,discount_unitar) ; +*!* values(Iif(lnIdSet=31003,-100007,Iif(lnIdSet=31004,-100008,-100000)),; +*!* Iif(lnIdSet=31003,"INSPECTIE TEHNICA PERIODICA",Iif(lnIdSet=31004,"SPALARE AUTO","MANOPERA")),; +*!* Iif(lnIdSet=31005,lcDenop,[]),1,"",; +*!* lnIdJTvaColoana,lnProcTvav,lnManoperaFTva,IIF(glAutoBonDet,0,ABS(lnDiscountM))) + IF (lnManoperaFTva <> 0 AND !INLIST(lnIdSet,31003,31004)) OR m.llFacturaZero + *!* modificare v 2.1.12 : am pus SIGN(lnManoperaFTva) pentru ca discountul trebuie sa aiba acelasi semn ca totalul de la manopera + Insert Into (lcCursorDeviz)(id_articol,denumire,explicatie,cantitate,um,id_jtva_coloana,proc_Tvav,taxcode,pret,discount_unitar) ; + values(-100000,"MANOPERA",Iif(lnIdSet=31005,lcDenop,[]),1,"",; + lnIdJTvaColoana,lnProcTvav,lnTaxCode,lnManoperaFTva,IIF(glAutoBonDet,0,SIGN(lnManoperaFTva)*ABS(lnDiscountM))) +*!* modificare v 2.0.42 ^ + If glAutoBonDet AND lnDiscountMCTva <> 0 + *!* modificare v 2.1.12 : am pus SIGN(lnManoperaFTva) pentru ca discountul trebuie sa aiba acelasi semn ca totalul de la manopera + Insert Into (lcCursorDeviz)(id_articol,denumire,explicatie,cantitate,um,id_jtva_coloana,proc_Tvav,taxcode,Pret,pret_cu_tva) ; + values(-100001,"DISCOUNT MANOPERA","Discount "+ALLTRIM(STR(lnProcDiscM,5,2))+" %",1,"",lnIdJTvaColoana,lnProcTvav,lnTaxCode,(-1)*SIGN(lnManoperaFTva)*Abs(lnDiscountMCTva),1) + Endif +*!* modificare v 2.0.41 ^ + Endif + +*!* modificare v 2.0.42 + If (m.lnManoperaCTva <> 0 And Inlist(lnIdSet,31003,31004)) + Insert Into (lcCursorDeviz)(id_articol,denumire,cantitate,um,id_jtva_coloana,proc_Tvav,taxcode,Pret,pret_cu_tva) ; + values(Iif(lnIdSet=31003,-100007,-100008),; + Iif(lnIdSet=31003,"INSPECTIE TEHNICA PERIODICA","SPALARE AUTO"),1,"",; + lnIdJTvaColoana,lnProcTvav,lnTaxcode,lnManoperaCTva,1) + Endif +*!* modificare v 2.0.42 ^ + + *** Cumulez MATERIALE + MANOPERA pentru optiunea REPARATII AUTO (in loc de materiale + manopera) + *** doar in cazul in care nu doresc detaliat materialele pe bonul fiscal si pe factura, fara facturi ITP, spalare auto + llArticolCumulat = .F. + IF !m.glAutoBonDet AND !Inlist(lnIdSet,31003,31004) AND TYPE('gnAUTOIdArticolReparatii') = 'N' AND !EMPTY(NVL(m.gnAUTOIdArticolReparatii, 0)) + PRIVATE pcArticolReparatii + pcArticolReparatii = '' + lnSucces = goExecutor.oSelect2Value('select denumire from nom_articole where id_articol = ?gnAUTOIdArticolReparatii',@pcArticolReparatii) + IF lnSucces < 0 + aMESSAGEBOX(goExecutor.cEroare, 0+48,_screen.Caption) + ENDIF + IF EMPTY(m.pcArticolReparatii) + pcArticolReparatii = 'REPARATII AUTO' + ENDIF + SELECT m.gnAUTOIdArticolReparatii as id_articol, m.pcArticolReparatii as denumire, MAX(explicatie) as explicatie, ; + 1 as cantitate, '' as um, id_jtva_coloana, proc_Tvav, taxcode, SUM(pret) as pret, SUM(discount_unitar) as discount_unitar, pret_cu_tva ; + FROM (lcCursorDeviz) ; + WHERE INLIST(id_articol,-100003, -100000, -100002, -100001) ; + GROUP BY id_jtva_coloana, proc_Tvav, taxcode, pret_cu_tva ; + INTO CURSOR crsArtCumulat + + DELETE FROM (lcCursorDeviz) WHERE INLIST(id_articol,-100003, -100000, -100002, -100001) + + Insert Into (lcCursorDeviz)(id_articol,denumire,explicatie,cantitate,um,id_jtva_coloana,proc_Tvav,taxcode, pret,discount_unitar,pret_cu_tva) ; + SELECT id_articol,denumire,explicatie,cantitate,um,id_jtva_coloana,proc_Tvav,taxcode,pret,discount_unitar,pret_cu_tva ; + FROM crsArtCumulat + llArticolCumulat = .T. + USE IN (SELECT('crsArtCumulat')) + ENDIF + + IF lnStornareAvansFTva <> 0 +*!* modificare v 2.0.41 +*!* Insert Into (lcCursorDeviz)(denumire,cante,pretv,proc_tvav,discunitar,id_jtva_coloana,pretvval,id_articol,Pret,pretd) ; +*!* values("STORNARE AVANS",1,lnStornareAvansFTva,lnProcTvav,0,lnIdJTvaColoana,0,-10003,0,0) + Local loStornare + lcSql = [{call pack_auto.citeste_sume_stornare(']+tcSirIdLucrare+[',',')}] + lcCursorStornare = [crsstornari] + If goExecutor.oExecuta(lcSql,lcCursorStornare) + Select (lcCursorStornare) + Scan + Scatter Name loStornare + Insert Into (lcCursorDeviz)(id_articol,denumire,explicatie,cantitate,um,id_jtva_coloana,proc_Tvav,taxcode,Pret,discount_unitar,pret_cu_tva) ; + values(-100006,"STORNARE AVANS","",1,"",loStornare.id_jtva_coloana, loStornare.proc_tvav,loStornare.taxcode,loStornare.Pret,0,loStornare.pret_cu_tva) + Select (lcCursorStornare) + Endscan + Endif + Use In (lcCursorStornare) + Release loStornare +*!* modificare v 2.0.41 ^ + Endif + + If Used('crsalteserv') +*!* modificare v 2.0.41 +*!* Insert Into (lcCursorDeviz)(denumire,um,cante,pretv,proc_tvav,discunitar,id_jtva_coloana,pretvval,id_articol,Pret,pretd) ; +*!* Select denumire,um,cantitate,pretftva,lnProcTvav,0,lnIdJTvaColoana,0,id_articol,0,0 From crsalteserv Where !Deleted() + Insert Into (lcCursorDeviz)(id_articol,denumire,explicatie,cantitate,um,id_jtva_coloana,proc_Tvav,taxcode,pret,discount_unitar) ; + Select id_articol,denumire,"",cantitate,um,CAST(lnIdJTvaColoana as N(6) null) as id_jtva_coloana,CAST(lnProcTvav as N(7,2) null) as proc_tvav,CAST(lnTaxCode as N(6) null) as taxcode,pretftva,0 From crsalteserv Where !Deleted() +*!* modificare v 2.0.41 ^ + Endif + + * In xml eFactura nu este permis pret unitar negativ. Cantitate negativa si pret pozitiv + SELECT (m.lcCursorDeviz) + SCAN FOR pret < 0 + REPLACE cantitate WITH -cantitate, pret WITH -pret, discount_unitar WITH discount_unitar + ENDSCAN + + Select crstemp + poDate.dataireg = dataireg + poDate.id_fdoc = id_fdoc + poDate.dataact = dataact + poDate.datascad = datascad + poDate.nract = nract + poDate.serie_act = Alltrim(serie_act) + poDate.id_client = id_part + poDate.nume_valuta = nume_val + poDate.id_valuta = id_valuta + poDate.id_lucrare = id_lucrare + poDate.zi_curs = dataact + poDate.id_ordl = IIF(EMPTY(NVL(tnIdOrdl,0)),NULL,tnIdOrdl) && modificare v 2.0.33 + poDate.tva_incasare = tva_incasare && modificare v 2.1.0 + *!* poDate.id_sectie = id_sectie + Use In crstemp + + *!* ofrmdelegat=Createobject("frm_delegat_factura") + *!* ofrmdelegat.nidpartener = poDate.id_client + *!* ofrmdelegat.cclient = poDate.nume_client + *!* ofrmdelegat.cnrinmat_exp = tcNrInmat && poDate.nrinmat_del + *!* ofrmdelegat.Show(1) + *!* Release ofrmdelegat + Private ofrmdatesupl + ltDataOra = Get_Ora() + + * Daca initializez vanzari.tip_saft cu cod 751 (factura in scop informativ) in loc de 380 (factura initiala) + * pentru facturile incasate cu bon fiscal, initializez cu tip 751 ca sa nu apara duplicate in decontul TVA precompletat + IF TYPE('gnEFactura_tip_saft_bf') = 'N' AND !EMPTY(NVL(m.gnEFactura_tip_saft_bf, 0)) + IF pnTipIncasare = 2 && incasare bon fiscal + poDate.tip_saft = m.gnEFactura_tip_saft_bf && 751/380 + ENDIF + ENDIF + + poDate.dataora_exp = ltDataOra + ofrmdatesupl = Createobject("frm_alte_date") + ofrmdatesupl.Show(1) + Release ofrmdatesupl + If gnButon = 2 + lnSucces = -1 + llScris = .F. + Else + Select actactan + Locate For Alltrim(scd) = '5311' + Do Case + Case Found() And pnTipIncasare=2 && bon fiscal + poDate.ntip_incasare = 2 + poDate.nr_incasare = actactan.nract + poDate.incasat = actactan.suma + Case Found() And pnTipIncasare=3 && chitanta + poDate.ntip_incasare = 11 + poDate.nr_incasare = actactan.nract + poDate.serie_chit = actactan.serie_act + poDate.incasat = actactan.suma + Otherwise + poDate.ntip_incasare = 0 + ENDCASE + + SELECT actactan + LOCATE For Alltrim(scd) = '5125' && efecte de incasat + IF Found() And m.pnTipIncasare=2 AND m.pnPos = 1 && bon fiscal incasat prin CARD POS + poDate.ntip_incasare = 2 + poDate.nr_incasare = actactan.nract + poDate.incasatCARD = actactan.suma + ENDIF + + *!* modificare v 2.0.35 : am adaugat STRTRAN(tcNrOrd,[,],[, ]) in loc de tcNrOrd + Do Case +*!* modificare v 2.0.43 + Case (lnAvansFTva<>0 And lnPretCuTva = 0) Or (lnAvansCTva<>0 And lnPretCuTva = 1) ; + OR (lnStornareAvansFTva <> 0 And lnManoperaFTva = 0 And lnMaterialeFTva = 0) + poDate.text_aditional = [LA ]+Iif(lnMultiple=0,[COMANDA ],[COMENZILE ])+STRTRAN(tcNrOrd,[,],[, ]) + ; + IIF(!Empty(poDate.text_aditional),Chr(13)+Chr(10)+poDate.text_aditional,[]) +*!* *!* modificare v 2.0.41 +*!* *!* Case lnAvansFTva <> 0 +*!* Case (lnAvansFTva<>0 And lnPretCuTva = 0) Or (lnAvansCTva<>0 And lnPretCuTva = 1) +*!* Update (lcCursorDeviz) Set explicatie = [LA ]+Iif(lnMultiple=0,[COMANDA ],[COMENZILE ])+STRTRAN(tcNrOrd,[,],[, ]) Where id_articol = -100005 +*!* *!* modificare v 2.0.41 ^ +*!* Case lnStornareAvansFTva <> 0 And lnManoperaFTva = 0 And lnMaterialeFTva = 0 +*!* Update (lcCursorDeviz) Set explicatie = [LA ]+Iif(lnMultiple=0,[COMANDA ],[COMENZILE ])+STRTRAN(tcNrOrd,[,],[, ]) Where id_articol = -100006 +*!* modificare v 2.0.43 ^ + Otherwise + Do Case + Case (!Between(lnIdSet,31003,31005) And lnManoperaFTva <> 0 And lnMaterialeFTva <> 0) OR m.llFacturaZero + lcExplicatie = [MANOPERA SI MATERIALE ] + Case !Between(lnIdSet,31003,31005) And lnManoperaFTva <> 0 + lcExplicatie = [MANOPERA ] + Case !Between(lnIdSet,31003,31005) And lnMaterialeFTva <> 0 + lcExplicatie = [MATERIALE ] + Otherwise + lcExplicatie = [] + Endcase + + IF m.llArticolCumulat && REPARATII AUTO in loc DE MANOPERA + MATERIALE + poDate.text_aditional = Iif(lnMultiple=0,[COMANDA/DEVIZ ],[COMENZI/DEVIZE ])+STRTRAN(tcNrOrd,[,],[, ]) + ; + IIF(!Empty(poDate.text_aditional),Chr(13)+Chr(10)+poDate.text_aditional,[]) + ELSE + *!* modificare v 2.0.41 : am adaugat Between(lnIdSet,31003,31005) + If !Empty(lcExplicatie) OR Between(lnIdSet,31003,31005) + poDate.text_aditional = lcExplicatie + [CF. ]+Iif(lnMultiple=0,[COMENZII/DEVIZULUI ],[COMENZILOR/DEVIZELOR ])+STRTRAN(tcNrOrd,[,],[, ]) + ; + IIF(!Empty(poDate.text_aditional),Chr(13)+Chr(10)+poDate.text_aditional,[]) + ENDIF + ENDIF + + Endcase + +*!* modificare v 2.0.41 +*!* Insert Into ([crsfactura]) (id_temp,id_articol,denumire,explicatie,cantitate,cu_tva,pretftva,pretctva,; +*!* valftva,valtva,valctva,discountftva,discountctva,valdiscountftva,; +*!* valdiscounttva, valdiscountctva, valdiminuatftva, valdiminuattva, valdiminuatctva, proc_tvav,id_jtva_coloana,um,; +*!* vpretftva,vvalftva,vvaltva,vdiscountftva,vvaldiscountftva,vvaldiscounttva,; +*!* vvaldiminuatftva,vvaldiminuattva,vvaldiminuatctva,gestionabil) ; +*!* Select Recno() As id_temp,id_articol,denumire,explicatie, 1 As cantitate,cu_tva,; +*!* Round(pretv,gnPc) As pretftva,; +*!* Round(pretv,gnPc) + Round(Round(pretv,gnPc) * (proc_tvav-1),gnPc) As pretctva,; +*!* Round(Round(pretv,gnPc)*cante,gnPc) As valftva,; +*!* ROUND(Round(pretv*cante,gnPc)*(proc_tvav-1),gnPc) As valtva, ; +*!* Round(Round(pretv,gnPc)*cante,gnPc) + Round(Round(pretv*cante,gnPc)*(proc_tvav-1),gnPc) As valctva, ; +*!* ROUND(discunitar,gnPc) As discountftva,; +*!* ROUND(discunitar,gnPc)+Round(Round(discunitar,gnPc)*(proc_tvav-1),gnPc) As discountctva,; +*!* Round(Round(discunitar,gnPc)*cante,gnPc) As valdiscountftva, ; +*!* ROUND(Round(discunitar*cante,gnPc)*(proc_tvav-1),gnPc) As valdiscounttva, ; +*!* Round(Round(discunitar,gnPc)*cante,gnPc) + Round(Round(discunitar*cante,gnPc)*(proc_tvav-1),gnPc) As valdiscountctva,; +*!* Round(Round(pretv-discunitar,gnPc)*cante,gnPc) As valdiminuatftva,; +*!* ROUND(Round((pretv-discunitar)*cante,gnPc)*(proc_tvav-1),gnPc) As valdiminuattva,; +*!* ROUND(Round(Round(pretv-discunitar,gnPc)*cante,gnPc)*proc_tvav,gnPc) As valdiminuatctva,; +*!* proc_tvav,id_jtva_coloana, Nvl(um,Space(50)) As um, ; +*!* Round(pretvval,gnPVal) As vpretftva,; +*!* ROUND(Round(pretvval,gnPVal)*cante,gnPVal) As vvalftva,; +*!* ROUND(Round(Round(pretvval,gnPVal)*cante,gnPVal)*(proc_tvav-1),gnPVal) As vvaltva,; +*!* 0 As vdiscountftva,0 As vvaldiscountftva,0 As vvaldiscounttva,; +*!* Round(Round(pretvval-0,gnPc)*cante,gnPc) As vvaldiminuatftva,; +*!* ROUND(Round((pretvval-0)*cante,gnPc)*(proc_tvav-1),gnPc) As vvaldiminuattva,; +*!* ROUND(Round(Round(pretvval-0,gnPc)*cante,gnPc)*proc_tvav,gnPc) As vvaldiminuatctva,; +*!* 0 As gestionabil From (lcCursorDeviz) Where cante <> 0 + + prelucreaza_facturacrs(lcCursorDeviz,[crsfactura],lnProcTvav,0,0) +*!* modificare v 2.0.41 ^ + + Create Cursor crsvanztemp(id_articol N(20),explicatie c(240),Pret N(20,4),proc_tvav N(7,3),id_jtva_coloana N(10),taxcode N(6) NULL,cantitate N(20,4),discount_unitar N(20,4),; + id_gestiune N(20),Cont c(4),pret_cu_tva N(1),serie c(100),id_valuta N(10),codmat c(50),Curs N(20,6),multiplicator N(10),pret_achizitie N(20,4),; + pretd N(20,4),id_valuta_d N(10)) + +*!* modificare v 2.0.41 +*!* Insert Into crsvanztemp(id_articol,explicatie,Pret,proc_tvav,id_jtva_coloana,cantitate,discount_unitar,pret_cu_tva,; +*!* serie,codmat,id_valuta,Curs,multiplicator,pret_achizitie,pretd,id_valuta_d) ; +*!* SELECT id_articol,explicatie,pretv As Pret,proc_tvav,id_jtva_coloana,cante As cantitate,; +*!* discunitar As discount_unitar,cu_tva As pret_cu_tva,Nvl(serie,Space(100)) As serie,Nvl(codmat,Space(50)) As codmat,; +*!* 0 As id_valuta,0 As Curs,1 As multiplicator,Pret,pretd,Cast(Nvl(id_valuta,0) As N(5)) As id_valuta_d From (lcCursorDeviz) Where cante <> 0 + + Insert Into crsvanztemp(id_articol,explicatie,Pret,proc_tvav,id_jtva_coloana,taxcode,cantitate,discount_unitar,pret_cu_tva,; + serie,codmat,id_valuta,Curs,multiplicator,pret_achizitie,pretd,id_valuta_d) ; + SELECT id_articol,explicatie,Pret,proc_tvav,id_jtva_coloana,taxcode,cantitate,; + discount_unitar,pret_cu_tva,Nvl(serie,Space(100)) As serie,Nvl(codmat,Space(50)) As codmat,; + id_valuta,Curs,multiplicator,pret_achizitie,0 as pretd,Cast(Nvl(id_valuta,0) As N(5)) As id_valuta_d ; + From (lcCursorDeviz) Where cantitate <> 0 OR m.llFacturaZero +*!* modificare v 2.0.41 ^ + + lnSucces = SQLSetprop(gnHandle,"Transactions",2) + If lnSucces >= 0 + lcSql = [begin ] + gcS +[.pack_facturare.initializeaza_date_factura(] + ; + [to_date('] + Alltrim(Dtoc(poDate.dataireg,2)) + [','YYYYMMDD'),] + ; + Nvl(Alltrim(Str(poDate.id_fdoc)),[NULL]) + [,to_date('] + Alltrim(Dtoc(poDate.dataact,2)) + [','YYYYMMDD'),] + ; + [to_date('] + Alltrim(Dtoc(poDate.datascad,2)) + [','YYYYMMDD'),'] + Nvl(poDate.serie_act,[]) + [',] + ; + Alltrim(Str(poDate.nract,14,0)) + [,] + ; + Iif(Isnull(poDate.id_client),[NULL],Alltrim(Str(poDate.id_client))) + [,] + ; + Iif(Isnull(poDate.id_lucrare),[NULL],Alltrim(Str(poDate.id_lucrare))) + [,] + ; + Iif(Isnull(poDate.id_sectie),[NULL],Alltrim(Str(poDate.id_sectie))) + [,] + ; + Iif(Isnull(poDate.id_venchelt),[NULL],Alltrim(Str(poDate.id_venchelt))) + [,] + ; + Iif(Isnull(poDate.id_responsabil),[NULL],Alltrim(Str(poDate.id_responsabil))) + [,] + ; + IIF(EMPTY(nvl(poDate.explicatia4,[])),[NULL],['] + STRTRAN(ALLTRIM(poDate.explicatia4),['],['']) + [']) + [,] + ; && modificare v 2.0.33 + IIF(EMPTY(NVL(poDate.id_ordl,0)),[NULL],ALLTRIM(STR(poDate.id_ordl))) + [,NULL,] + ; + ['] + Strtran(Alltrim(Nvl(poDate.descriere,[])),['],['']) + [',] + ; + Alltrim(Str(poDate.tip)) + [,] + Alltrim(Str(poDate.id_set)) + [,] + ; + [to_date('] + Dtoc(poDate.zi_curs,2) + [','YYYYMMDD'),] + Alltrim(Str(poDate.id_valuta)) + [,] + ; + Alltrim(Str(poDate.in_valuta)) + [,] + ; + alltrim(str(poDate.tva_incasare)) + [,] + ; && modificare ROAAUTO v 2.1.0 + Iif(Isnull(gnIdSucursala),[NULL],Alltrim(Str(gnIdSucursala))) + [,] + ; + Alltrim(Str(gnIdUtil)) + [,NULL,NULL,] + ; + IIF(EMPTY(NVL(poDate.tip_saft,0)), [NULL], ALLTRIM(STR(poDate.tip_saft))) + [); end;] + lnSucces = goExecutor.oExecute(lcSql) + If lnSucces < 0 + amessagebox(goExecutor.oPrelucrareEroare(),16,"Eroare") + ELSE + + Private poArticol + Select crsvanztemp + Scan + Scatter Name poArticol + lcSql = [begin ] + gcS + [.pack_facturare.adauga_articol_factura_deviz(] + ; + Alltrim(Str(poArticol.id_articol)) + [,] + ; + ['] + Strtran(Alltrim(Nvl(poArticol.explicatie,[])),['],['']) + [',] + ; + ['] + Strtran(Alltrim(Nvl(poArticol.serie,[])),['],['']) + [',] + ; + Alltrim(Str(poArticol.pret_achizitie,18,gnPPret)) + [,] + ; + Alltrim(Str(poArticol.pretd,18,gnPVal)) + [,] + ; + Alltrim(Str(poArticol.id_valuta_d)) + [,] + ; + Alltrim(Str(poArticol.Pret,18,Iif(poDate.in_valuta = 1,gnPVal,gnPPretV))) + [,] + ; + Iif(poDate.in_valuta=1,Alltrim(Str(poArticol.id_valuta)),[NULL]) + [,] + ; + Alltrim(Str(poArticol.Curs,18,6)) + [,] + ; + Alltrim(Str(poArticol.multiplicator)) + [,] + ; + Alltrim(Str(poArticol.proc_tvav,18,2)) + [,] + ; + Alltrim(Str(poArticol.id_jtva_coloana)) + [,] + ; + Alltrim(Str(poArticol.cantitate,18,gnPCant)) + [,] + ; + Alltrim(Str(poArticol.discount_unitar,18,gnPPretV)) + [,] + ; + Alltrim(Str(poArticol.id_gestiune)) + [,] + ; + ['] + Alltrim(Nvl(poArticol.Cont,'')) + [',] + ; + Alltrim(Str(poArticol.pret_cu_tva)) + [,NULL,NULL,] + IIF(ISNULL(poArticol.taxcode), [NULL], ALLTRIM(TRANSFORM(poArticol.taxcode))) + [); end;] + lnSucces = goExecutor.oExecute(lcSql) + If lnSucces < 0 + amessagebox(goExecutor.oPrelucrareEroare(),16,"Eroare") + Exit + Endif + Endscan + If !Used('INFISIERE') + lcCaleDateMenu = gcAppPath+[\COMUN\DATEMENU\] + Use &lcCaleDateMenu.INFISIERE In 0 Alias INFISIERE + Endif + If lnSucces >= 0 + lnSucces = oscrie_in_fisiere(0,.F.,.T.) && ? + If lnSucces >= 0 +*!* modificare v 2.0.47 : am adaugat lnIdSet la pack_devize.actualizeaza_deviz + lcSql = [begin ] + gcS + [.pack_facturare.scrie_in_vanzari(0,] + ; + IIF(Isnull(poDate.id_delegat),[NULL],Alltrim(Str(poDate.id_delegat))) + [,] + ; + IIF(Isnull(poDate.id_masina),[NULL],Alltrim(Str(poDate.id_masina))) + [,] + ; + IIF(Isnull(poDate.id_facturare),[NULL],Alltrim(Str(poDate.id_facturare))) + [,] + ; + IIF(Isnull(poDate.nListareDetaliata),[0],Alltrim(Str(poDate.nListareDetaliata))) + [,] + ; + [?poDate.dataora_exp,] + ; + IIF(Isnull(poDate.id_agent),[NULL],Alltrim(Str(poDate.id_agent))) + [,] + ; + ['] + Strtran(Alltrim(Nvl(poDate.text_aditional,[])),['],['']) + [',?@poDate.nid_vanzare); ] + ; + [pack_auto.actualizeaza_deviz(] + ALLTRIM(STR(lnProcTvav,10,4)) + [,'] + ALLTRIM(tcSirIdOrdl) + [',] + ALLTRIM(STR(lnIdSet)) + [); end;] +*!* modificare v 2.0.35 : am scos apelul catre pack_devize.dev_completeaza_rul; e inclus in actualizeaza_deviz + lnSucces = goExecutor.oExecute(lcSql) + If lnSucces < 0 + amessagebox(goExecutor.oPrelucrareEroare(),16,"Eroare") + ELSE + * Completare vanzari.id_fact cu act.id_fact + TEXT TO lcSql TEXTMERGE NOSHOW +merge into vanzari a using + (SELECT v.cod, (select min(id_fact) from act where cod = v.cod and scd = '4111') as id_fact from vanzari v where v.id_vanzare=?poDate.nid_vanzare) b on (a.cod = b.cod) + when matched then + update set id_fact = b.id_fact; + endtext + llSucces = goExecutor.oExecuta(m.lcSql) + Endif + Endif + Endif + Endif + Endif + + If lnSucces < 0 + amessagebox(goExecutor.oPrelucrareEroare(),16,"Eroare") + lcSql = "ROLLBACK" + llScris = .F. + Else + lcSql = "COMMIT" + llScris = .T. + Endif + lnSucces2 = goExecutor.oExecute(lcSql) + + Do Case + Case lnSucces2 < 0 + amessagebox(lcSql + Chr(13) + goExecutor.cEroare,0+16,"Eroare") + llScris = .F. + Case lnSucces2 >=0 And lcSql = "COMMIT" + listeaza_ofacturare() + If poDate.ntip_incasare = 2 && bon fiscal + If glAutoBonDet And !Inlist(lnIdSet,31001,31002) + listeaza_bon_fiscal_det(ltDataOra,poDate.nr_incasare,poDate.incasat,poDate.incasatCARD,poDate.proc_tva,lnProcDiscN,lnProcDiscM) + Else + listeaza_bon_fiscal(ltDataOra,poDate.nr_incasare,poDate.incasat,poDate.incasatCARD,poDate.proc_tva,poDate.nract) + Endif + Endif + Endcase + + lnSucces2 = SQLSetprop(gnHandle,"Transactions",1) + If lnSucces2 < 0 + amessagebox('Programul nu a reusit sa treaca pe tranzactie automata. Iesiti din program si intrati din nou!',48,'Atentie!') + Endif + Endif + + If Used('crsvanztemp') + Use In crsvanztemp + Endif + If Used('crsfactura') + Use In crsfactura + Endif + Release poDate + Return llScris +Endproc +******************************************************************************************************************* +Procedure listeaza_bon_fiscal_det + Lparameters ttDataOra,tnNrBon,tnSumaAchitNumerar,tnSumaAchitCARD,tnProcentTva,tnProcDiscMat,tnProcDiscMan + Local lcCursor + lcCursor = [crsDateBon] + Create Cursor (lcCursor) (denumire c(100), um c(10), CANT N(10,4), Pret N(18,4), DEPARTAMENT N(2), proc_tvav N(5,2),PROCENT N(5,2),DISCOUNT N(2) Default 0) + If Used('crsBonDetaliat') + Insert Into (lcCursor) (denumire,um,CANT,Pret,DEPARTAMENT,proc_tvav) ; + Select denumire, Nvl(um,'BUC') As um, CANT, Pret, 1, 1+(tnProcentTva/100) From crsBonDetaliat + Endif + If tnProcDiscMat <> 0 + Select (lcCursor) + Append Blank + Replace denumire With 'DISCOUNT MATERIALE',um With 'BUC',CANT With 1,PROCENT With tnProcDiscMat,; + DEPARTAMENT With 1,proc_tvav With 1+(tnProcentTva/100),DISCOUNT With 2 + Endif + Select crsfactura + Locate For id_articol = -100000 && Manopera + If Found() + lnSumaManopera = valctva + Select (lcCursor) + Append Blank + Replace denumire With 'MANOPERA',um With 'BUC',CANT With 1,Pret With lnSumaManopera,; + DEPARTAMENT With 1,proc_tvav With 1+(tnProcentTva/100) + Endif + If tnProcDiscMan <> 0 + Select (lcCursor) + Append Blank + Replace denumire With 'DISCOUNT MANOPERA',um With 'BUC',CANT With 1,PROCENT With tnProcDiscMan,; + DEPARTAMENT With 1,proc_tvav With 1+(tnProcentTva/100),DISCOUNT With 1 + Endif + Select crsfactura + Scan For !Inlist(id_articol,-100000,-100001,-100003) && fara manopera, discount manopera, materiale + lcDenumire = denumire + lcUM = Nvl(um,'BUC') + lnCantitate = cantitate + lnPret = pretctva + Select (lcCursor) + Append Blank + Replace denumire With lcDenumire,um With lcUM,CANT With lnCantitate,Pret With lnPret,; + DEPARTAMENT With 1,proc_tvav With 1+(tnProcentTva/100) + Select crsfactura + Endscan + loHash = GetHash() + loHash.SetValue("cTip", "1;") + loHash.SetValue("nNumarBon", tnNrBon) + loHash.SetValue("nValoareNumerar", m.tnSumaAchitNumerar) + loHash.SetValue("nValoareCARD", m.tnSumaAchitCard) + loHash.SetValue("nValoareTotal", m.tnSumaAchitNumerar + m.tnSumaAchitCard) + loHash.SetValue("cCursor",lcCursor) + loHash.SetValue("tDataOra",ttDataOra) + goControllerEcr.imprima(loHash) + Use In (lcCursor) + Release loHash +Endproc && listeaza_bon_fiscal_det +******************************************************************************************************************* +Procedure listeaza_bon_fiscal + Lparameters ttDataOra,tnNrBon,tnSumaAchitNumerar,tnSumaAchitCARD,tnProcentTva,tnNrFact + *!* lcSir=[1;Fact.]+Alltrim(Str(tnNrFact))+[;1;1;1;]+Alltrim(Str(tnSumaAchit*100))+[;1000;0\n]+CRLF + *!* lcSir=lcSir+[5;]+Alltrim(Str(tnSumaAchit*100))+[;0;0;0\n]+Chr(13)+Chr(10)+Chr(13)+Chr(10) + *!* imprimare_bon_fiscal(lcSir,tdDataOra,tnNrBon) + Local lcCursor + lcCursor = [crsDateBon] + Create Cursor (lcCursor) (denumire c(100), um c(10), CANT N(10,4), Pret N(18,4), DEPARTAMENT N(2), proc_tvav N(5,2)) + Append Blank + Replace denumire With [Fact.]+Alltrim(Str(tnNrFact)),CANT With 1,Pret With m.tnSumaAchitNumerar + m.tnSumaAchitCARD,proc_tvav With 1+(tnProcentTva/100),DEPARTAMENT With 1 + + loHash = GetHash() + loHash.SetValue("cTip", "1;") + loHash.SetValue("nNumarBon", tnNrBon) + loHash.SetValue("nValoareNumerar", m.tnSumaAchitNumerar) + loHash.SetValue("nValoareCARD", m.tnSumaAchitCard) + loHash.SetValue("nValoareTotal", m.tnSumaAchitNumerar + m.tnSumaAchitCard) + loHash.SetValue("cCursor",lcCursor) + loHash.SetValue("tDataOra",ttDataOra) + goControllerEcr.imprima(loHash) + Use In (lcCursor) + Release loHash +Endproc && listeaza_bon_fiscal +******************************************************************************************************************* +Procedure alege_facturi_relistare + LPARAMETERS tcCursorComenzi + * tcCursorComenzi cursor cu comenzile selectate pentru listare + * trebuie sa aiba coloanele: ales N(1), id_lucrare I, nrord C + + Local lnRaspuns,lcFisier,lcSql,lnSucces,lnIdLucrare,ldDataAct,lnNrAct,lcSelect,lcFiltru,lcSchema,lcOrder,llAfisare,lnnr,lnExp,lncounta,lncountb,lncountcod, lcFieldAles + Select (m.tcCursorComenzi) + lnRecno = Recno() + + If Reccount(m.tcCursorComenzi)>0 + lcFieldAles = tcCursorComenzi + '.ales' + IF TYPE(m.lcFieldAles) = 'U' + lnAlese = 0 + ELSE + Calculate Sum(ales) To lnAlese + ENDIF + If lnAlese = 0 + Select * From (tcCursorComenzi) Where Recno() = lnRecno Into Cursor crsRelistare + Else + Select * From (tcCursorComenzi) With (Buffering = .T.) Where ales = 1 Into Cursor crsRelistare + ENDIF + + Select crsRelistare + Scan + Scatter Name ocomanda + lnIdLucrare=crsrelistare.id_lucrare + If Used('crsexport') + Use In crsexport + Endif + lcSql = [Select distinct 0 as ales,cod,serie_act,nract,MAX(datascad) as datascad,dataact from act ] + ; + [where id_set between 31000 and 31020 ] + ; + [and id_lucrare = ] + Alltrim(Str(lnIdLucrare)) + [ and SUBSTR(scd,1,3) not in ('711','531') ] + ; + [and sters = 0] + gcCondSucursala + [ and cod in (select cod from vanzari where sters = 0) ] + ; + [group by cod,serie_act,nract,dataact ] + ; + [order by dataact,nract] + lnSucces = goExecutor.oExecute(lcSql,[crsexport]) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,48,"Atentie") + Else + Do Case + Case Reccount([crsexport]) = 0 + amessagebox("Nu exista documente pentru comanda " + Alltrim(crsrelistare.nrord)+ " !",0+48,"Atentie") + Case Reccount([crsexport]) = 1 + Select ([crsexport]) + relisteaza_factura_deviz(cod,serie_act,nract,dataact,datascad) + Otherwise + loFrmDocLuc=Createobject('frm_documente_lucrare',crsrelistare.nrord) + loFrmDocLuc.Show(1) + Select ([crsexport]) + Scan For ales = 1 + relisteaza_factura_deviz(cod,serie_act,nract,dataact,datascad) + Select ([crsexport]) + Endscan + Endcase + Endif + Endscan + Use In (Select('crsrelistare')) + Use In (Select('crsexport')) + + SELECT (m.tcCursorComenzi) + Go Max(Min(lnRecno,Reccount(tcCursorComenzi)),1) + Else + amessagebox("Nu ati selectat nici o comanda!",0+48,"Atentie") + Endif +Endproc +******************************************************************************************************************* +Procedure relisteaza_factura_deviz + Lparameters tnCod,tcSerie,tnNrAct,tdDataAct,tdDataScad + pnCod = tnCod + poDate=Createobject("oDateFactura",0,0) + poDate.serie_act = tcSerie + poDate.nract = tnNrAct + poDate.dataact = Iif(Type('tdDataAct')='T',Ttod(tdDataAct),tdDataAct) + poDate.datascad = Iif(Type('tdDataScad')='T',Ttod(tdDataScad),tdDataScad) + + *!* modificare v 2.1.0 : am adaugat tva_incasare + lcSql = [select id_vanzare,id_comanda,dataora,dataora_exp,data_act,sters,dataoras,numar_act,serie_act,]+; + [tip,id_part,discount,disc_fara_tva,discount_evidentiat,text_aditional,facturat,data_facturat,]+; + [explicatie,altele,client,cod,utilizator,utils,utilfact,delegat,bidelegat,cnpdelegat,]+; + [nume_agent,nrinmat,total_fara_tva,total_tva,total_cu_tva,id_gestiune,serie_chit,nr_incasare,incasat,]+; + [in_valuta,sucursala,id_ruta,ruta,curs,multiplicator,nume_val,id_delegat,id_agent,id_masina,valoarea,]+; + [nume_gestiune,id_sectie,sectie,id_lucrare,lucrare,tip_incasare,afisare_scadenta,id_ordl,tva_incasare from fact_vfacturi where cod = ] + ALLTRIM(STR(m.pnCod)) + lnSucces = goExecutor.oExecute(lcSql,[crsfacturiTemp]) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,"Eroare") + Return + Endif + + Select crsfacturiTemp + poDate.nRelistare = 1 + poDate.nid_vanzare = id_vanzare + poDate.tip = tip + poDate.discount_evidentiat = discount_evidentiat + poDate.text_aditional = Nvl(text_aditional,[]) + poDate.nrinmat = nrinmat + poDate.nume_delegat = delegat + poDate.bidelegat = bidelegat + poDate.cnpdelegat = cnpdelegat + poDate.dataora_exp = dataora_exp + poDate.afisare_scadenta = afisare_scadenta + poDate.listaid = Iif(poDate.tip = 3,Alltrim(Str(id_comanda)), [0]) + poDate.ntip_incasare = tip_incasare + poDate.serie_chit = Nvl(serie_chit,[]) + poDate.nr_incasare = nr_incasare + poDate.incasat = incasat + poDate.id_client = id_part + poDate.nume_client = client + poDate.in_valuta = in_valuta + poDate.id_ordl = id_ordl + poDate.tva_incasare = tva_incasare && modificare v 2.1.0 + lnDiscount = DISCOUNT + lnDiscountVal = 0 + Use In (SELECT('crsfacturiTemp')) + + lcSql = [select * from fact_vfacturi_detalii where id_vanzare = ] + ALLTRIM(STR(poDate.nid_vanzare)) + lnSucces = goExecutor.oExecute(lcSql,[crsdetalii]) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,"Eroare") + Return + Endif + + Select crsdetalii + Calculate Max(proc_tvav) To lnProcTvav + creeaza_facturacrs([crsfactura]) + prelucreaza_facturacrs([crsdetalii],[crsfactura],lnProcTvav,lnDiscount,lnDiscountVal) + Use In crsdetalii + listeaza_ofacturare() + + If Used('crsfactura') + Use In crsfactura + Endif + + Release poDate +Endproc +*!* ****************************************************************************************************************************** +*!* Procedure listeaza_ofacturare_deviz +*!* listeaza_ofacturare() +*!* If poDate.nRelistare = 0 And poDate.eProforma = 0 And poDate.nSalveazaAtasamente = 1 +*!* lnSucces2 = goExecutor.oexecute([COMMIT]) +*!* Endif +*!* Endproc +*!* ****************************************************************************************************************************** + +******************************************* +* PROCEDURE export_comanda_xml( ) +* Data/ora : 08/03/13, 08:58:28 +* autor : liana.neagu +* descriere: + +****** PARAMETER BLOCK ************** +* Parametri : 0 +* +******************************************* +PROCEDURE export_comanda_xml + tlCautPlus = .t. + Store "" To loCauta + *!* tlCautPlus - daca se foloseste formularul caut_alfa_form_plus cu butonul but_start_criterii + *!* 24.07.2009 + *!* 29.01.2013 : am adaugat um2 in selectie + Local lcStringCriterii,lcCursor,lcXML,lcDateStyle,lcMark + LOCAL lcFisierXml,lcCursor ,lcCaleFisier + + PRIVATE pcCodTehnician + + lcStringCriterii = "" + + + lcStringCriterii="Lucrare\nrord\T\none\" + crlf + ; + "Client\nume\T\none"+ crlf + ; + "Nr. inmatriculare\nrinmat\T\none"+ crlf+; + "Serie sasiu\series\T\none"+ crlf+; + "Data\datai\D\none"+ crlf + + lcTitluColoane = [Nr lucrare,Data,Client,Nr. inmatriculare,Serie sasiu] + lccoloane = [nrord,TTOD(datai),nume,nrinmat,series] + + + lcFiltru = [2=2] + lcSchema = [] + lcOrder = [datai] + lcNumeProc = [] + lcTitlu = [Alege_i comenzile (mouse-click pe denumire sau apasa_i SPACE)] + lcSelect = [select nrord,datai,nume,nrinmat,series,validat,id_ordl from auto_normare_comenzi a] + lcFiltruOriginal = gcCondLuna + [ and a.validat=0 ] + pcschema1=[''] + + + llToateIreg = .t. + lcPrimaColoana = [nrord] + lnPornire = 1 + lnTipReturn = 1 + lcIdColumn = "id_ordl" + + loHash = GetHash() + loHash.SetValue("cSelect", lcSelect) + loHash.SetValue("cFiltru", lcFiltru) + loHash.SetValue("cSchema", lcSchema) + loHash.SetValue("cOrder", lcOrder) + loHash.SetValue("cColoana", lccoloane) + loHash.SetValue("cTitlu", lcTitlu) + loHash.SetValue("cTitluColoana", lcTitluColoane) + loHash.SetValue("cNumeProc", lcNumeProc) + loHash.SetValue("lToateIreg", llToateIreg) + loHash.SetValue("cFiltruOriginal", lcFiltruOriginal) + loHash.SetValue("cPrimaColoana", lcPrimaColoana) + loHash.SetValue("nPornire", lnPornire) + loHash.SetValue("nTipReturn", lnTipReturn) + loHash.SetValue("cIdColumn", lcIdColumn) + loHash.SetValue("cStringCriterii", lcStringCriterii) + loCauta = cauta_alfa_hash(loHash) +*---------------------export in xml---------------------------------------- +IF gnButon = 2 OR empty(NVL(loCauta,[])) + RETURN +ENDIF +lcCursor = [crsDateSelect] +XMLTOCURSOR(loCauta,lcCursor ) + + +lcFisierXml = m.gcFISIERXMLCOMENZI + +lcCaleFisier = JUSTPATH(lcFisierXml) + If !Directory(m.lcCaleFisier) + Md (m.lcCaleFisier) + Endif + + lcSql = [select * from DEV_UTILIZATORI_CODURI where id_util = ?gnIdutil] + lnSucces = goExecutor.oExecute(lcSql,[crscodUtil]) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,"Eroare") + Return + Endif + + +SELECT crsCodUtil +pcCodTehnician = ALLTRIM(cod) +USE IN crsCodUtil + +IF empty(NVL(pcCodTehnician,[])) + oadaugcod = CREATEOBJECT('frm_codutilizator') +*!* oadaugcod.Clb_tx_simplu1.text_simplu1.controlsource= 'pcCodTehnician' + oadaugcod.show(1) + IF gnbuton = 2 + RETURN + ENDIF + + lcSql = [merge into DEV_UTILIZATORI_CODURI a using (select ']+ALLTRIM(pcCodTehnician)+; + [' as cod,?gnIdutil as id_util from dual) b ON (a.id_util = b.id_util) WHEN NOT MATCHED THEN insert (id_util,cod) values (?gnIdutil,']+ALLTRIM(pcCodTehnician)+; + [') WHEN MATCHED THEN UPDATE SET cod = ']+ALLTRIM(pcCodTehnician)+[' where id_util = ?gnIdutil] + lnSucces = goExecutor.oExecute(lcSql) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,"Eroare") + Return + Endif +ENDIF +lcDateStyle = Set("Date") +lcMark = Set("Mark") + +Set Date To Dmy +Set Mark To '.' + + +Set Textmerge On To Memvar lcXML NOSHOW +\ +SELECT (lcCursor) +*!* modificare 30.07.2012 +\ +SCAN + \ + \<> + \<> + \<> + \<> + \<> + \<> + \1 + \ +ENDSCAN +\ +Set Textmerge To + +Strtofile(lcXML, m.lcFisierXml ) +Set Date To &lcDateStyle +Set Mark To &lcMark + + + +aMESSAGEBOX('S-a creat fisierul '+m.lcFisierXml ,0+64,_screen.Caption) + + + +ENDPROC +**********************sfarsit procedura export_comanda_xml******************* + +***************************************************************************** +* citeste procentele de discount pe contractul tip CLIENT AUTO +* pentru completarea procentelor de discount la facturare +***************************************************************************** +PROCEDURE citeste_discount_contract + LPARAMETERS tnIdPart, tnIdCtr, tnProcDiscountManopera, tnProcDiscountMateriale + * tnIdPart IN - id client + * tnProcDiscountManopera, tnProcDiscountMateriale OUT + + Local lcSql, llSucces + PRIVATE pnDiscountManopera, pnDiscountMateriale, pnIdCtr, pnIdPart + pnIdPart = tnIdPart + pnIdCtr = 0 + pnDiscountManopera = 0.00 + pnDiscountMateriale = 0.00 + + lcSql = [begin pack_auto.citeste_discount_contract(?pnIdPart, ?gnIdSucursala, ?@pnIdCtr, ?@pnDiscountManopera, ?@pnDiscountMateriale); end;] + llSucces = goExecutor.oExecuta(m.lcSql) + IF !m.llSucces + pnDiscountManopera = 0.00 + pnDiscountMateriale = 0.00 + ENDIF + tnIdCtr = pnIdCtr + tnProcDiscountManopera = NVL(m.pnDiscountManopera, 0.00) + tnProcDiscountMateriale = NVL(pnDiscountMateriale, 0.00) +ENDPROC && citeste_discount_contract + + +***************************************************************************** +* salveaza procentele de discount pe contractul tip CLIENT AUTO (il creeaza daca nu exista) +* in formularul onom_devize.vcx:frm_dev_clienti +***************************************************************************** +PROCEDURE salveaza_discount_contract + LPARAMETERS tnIdPart, tnIdCtr, tnProcDiscountManopera, tnProcDiscountMateriale + * tnIdPart IN - id client + * tnIdCtr IN - id contract SERVICE AUTO + * tnProcDiscountManopera, tnProcDiscountMateriale IN + + Local lcSql, llSucces + PRIVATE pnDiscountManopera, pnDiscountMateriale, pnIdCtr, pnIdPart + pnIdPart = tnIdPart + pnIdCtr = tnIdCtr + pnDiscountManopera = tnProcDiscountManopera + pnDiscountMateriale = tnProcDiscountMateriale + lcSql = [begin pack_auto.salveaza_discount_contract(?pnIdPart, ?gnIdSucursala, ?pnIdCtr, ?pnDiscountManopera, ?pnDiscountMateriale); end;] + llSucces = goExecutor.oExecuta(m.lcSql) + RETURN m.llSucces +ENDPROC && salveaza_discount_contract + +* ----------------------------------- +* Intoarce .T. daca un tip de comanda se inchide prin validare sau .F. daca se inchide in alt mod ( nota inchidere, factura) +* ----------------------------------- +FUNCTION getOptiuneInchidereValidare + LPARAMETERS tnTipComanda + * tnTipComanda: 1 = garantie, 2 = postgarantie ...(DEV_TIP_DEVIZ) + + LOCAL lnReturnValue, llReturn, llSucces + PRIVATE pnTipComanda + + pnTipComanda = m.tnTipComanda + lnReturnValue = 0 + llSucces = goExecutor.oSelecteaza2Value("Select getOptiuneInchidere(?pnTipComanda) from dual", @lnReturnValue) + llReturn = (m.lnReturnValue = 1) + + RETURN m.llReturn +ENDFUNC && getOptiuneInchidereValidare + +* ----------------------------------- +* Salveaza optiunea de inchidere prin validare pe un tip de comanda +* ----------------------------------- +FUNCTION setOptiuneInchidereValidare + LPARAMETERS tnTipComanda, tlInchidereValidare + + LOCAL lnReturnValue + PRIVATE pnTipComanda, pnInchidereValidare + + pnTipComanda = m.tnTipComanda + pnInchidereValidare = IIF(m.tlInchidereValidare,1, 0) + + llSucces = goExecutor.oExecuta("begin setOptiuneInchidere(?pnTipComanda, ?pnInchidereValidare); end;") + + RETURN m.llSucces +ENDFUNC && setOptiuneInchidereValidare \ No newline at end of file diff --git a/Programe/oproceduri_listari.prg b/Programe/oproceduri_listari.prg new file mode 100644 index 0000000..859a4e7 --- /dev/null +++ b/Programe/oproceduri_listari.prg @@ -0,0 +1,2051 @@ +*!* 19.08.2014 +*!* marius.mutu +*!* listare_comanda_deviz: adaugare camp UM pe listare deviz, comanda + +*!* 14.11.2014 +*!* marius.mutu +*!* listare_comanda_deviz - materialele se listeaza in ordinea adaugarii pe bon in rulaj (la fel ca in gestiuni) +*!* #4076 + +*!* 14.11.2014 +*!* marius.mutu +*!* listare_comanda_deviz - Daca nu cumulez materialele, pot aparea piese date in consum si aceleasi piese pe retur, care ar fi trebuit sa fie pe 0 cantitativ si sa nu apara in deviz +*!* apar in ordinea din bon, dar cumulate, daca sunt mai multe aparitii pentru acelasi articol + +*!* 25.11.2014 +*!* marius.mutu +*!* listare_comanda_deviz: se listeaza nrfact/datafact pe deviz + +*!* 25.11.2014 +*!* marius.mutu +*!* listare_comanda_deviz: ?pnIdOrdl in loc de valoarea id-ului - hard parse in baza de date si dureaza f mult + +*!* 25.04.2019 +*!* marius.mutu +*!* listare_comanda_deviz - pcExecutant - numele mecanicilor pentru listarea pe rap_deviz.frx la Executant + +************************************************************************************************************************ +**** Obiecte +**** oDateFacturaDevize +**** Proceduri +**** listare_deviz +**** listare_comenzi_validate +**** listare_comanda +**** listare_raport_comanda +**** listarefacturi_itp +**** listarefacturi_spalare +**** listarefacturi_sectie +**** facturi_emise_pe_asig +**** listare_masiniclienti -- neapelata +**** listare_clientiadrese -- neapelata +**** fact_emi -- neapelata +**** fact_ord_em -- neapelata +**** list_man_tot_desf +**** list_man_tot_com +**** list_comanda +**** listare_precomanda -- nu se mai foloseste in factureaza +**** listare_avans +**** listare_factura +**** creare_bon_fiscal -- apelata din actbaza.verfi.Terminat1.click +**** listare_bon_fiscal +**** facturi_emise_pe_sectii +**** manopera_sectii_anfabr +**** manopera_sectii_anfabr_centralizator +**** manopera_sectii +**** devize_pe_marci_de_masini +************************************************************************************************************************ +Define Class oDateFacturaDevize As Custom + ntipfactura = 0 + devize_multiple = 0 + listanrord = [] + dataact = {} + datascad = {} + serie_act = [] + nract = 0 + id_client = Null + nume_client = [] + nume_responsabil= [] && alte date pentru facturare + BIresp = [] + CNPresp = [] + id_delegat = Null + nume_delegat = [] + BIdelegat = [] + elibdelegat = [] + CNPdelegat = [] + eliberatde = [] + nrinmat_del = [] + proc_tva = 0 + nrchit = 0 + datachit = {} + sumaachit = 0 + sumavorbe = [] + text_aditional = [] + + Procedure Init + Lparameters tnIdPartener,tcSirNrord,tcNrInmat,tnDevize,tnTipFactura + With This + .id_client = tnIdPartener + .nrinmat_del = tcNrInmat + .devize_multiple = tnDevize + .listanrord = tcSirNrord + .nTipFactura = tnTipFactura + Endwith + Endproc + +Enddefine +************************************************************************************************************************ +************************************************* INCEPUT : listare_deviz ********************************************** +Procedure listare_comanda_deviz + Lparameters toFereastra,toComanda,tnTip + Local lcSql,lnSucces,llReturn,lcCursorManopera,lcCursorMateriale,llCursorManopera,llCursorMateriale,lcCursorDateClient, lcCursorDateFirma, lcCursorDeviz, lcSetareRaport + Private pnTipDeviz, pcDataOra + PRIVATE pcExecutant + pcExecutant = '' + pnTipDeviz = Iif(toComanda.Validat=1 And !Empty(tnTip),2,1) + llReturn = .T. + lcCursorManopera = [oper] + lcCursorRulaje = [rul] + lcCursorMateriale = [rulcumulat] + lcCursorDateClient = [crsdateclient] + lcCursorDateFirma = [crsdatefirma] + lcCursorDeviz = [crslistare] + llCursorManopera = Used(lcCursorManopera) + llCursorMateriale = Used(lcCursorRulaje) + + pcDataOra = get_ora(2) + + If !llCursorManopera +*!* row_number() over (order by datai,id_oper) as nrcrt, + lcSql = [select id_ordl,codop,timpn,pret,denop,datai,id_oper ] + ; + [from ] + gcS + [.auto_voper where id_ordl = ] + Alltrim(Str(toComanda.id_ordl)) + [ and ] + ; + [extract(month from datai)+extract(year from datai)*12<=?gnLuna+?gnAn*12 ] + ; + [order by 1] + llSucces = goExecutor.oExecuta(lcSql,lcCursorManopera) + llReturn = m.llSucces + + IF m.llSucces + TEXT TO lcSql TEXTMERGE NOSHOW +select STRINGAGG(denumire) as mecanic + from (select distinct d.nume || ' ' || d.prenume as denumire + from dev_oper_mecanici a + join dev_oper b + on (a.id_oper = b.id_oper and b.sters = 0) + join dev_mecanici c + on a.id_mecanic = c.id_mecanic + join nom_parteneri d + on c.id_part = d.id_part + where a.sters = 0 + and b.id_ordl = <>) + ENDTEXT + + llSucces = goExecutor.oSelecteaza2Value(lcSql, @pcExecutant) + llReturn = m.llSucces + ENDIF && m.llSucces + + Endif + If !llCursorMateriale And llReturn +*!* row_number() over (order by a.dataact,a.id_rul) as nrcrt, + *!* modificare v 2.0.41 : am inlocuit pack_sesiune.calculeaza_pret_tva cu pack_sesiune.calculeaza_pret_cu_tva + lcSql = [select a.*,b.denumire,b.codmat, b.um from (] + ; + [select id_articol,pretv,SUM(cante) as cante,MIN(dataact) as dataact,MIN(id_rul) as id_rul, ] + ; + [pack_sesiune.calculeaza_pret_cu_tva(pretv,1,pack_def.GetIdMonedaNationala(),] + Alltrim(Str(toComanda.proc_tvav,10,4)) + [,0,2) as pretctva ] + ; + [from ] + gcS + [.rul where sters = 0 and id_lucrare = ] + Alltrim(Str(toComanda.id_lucrare)) + [ ] + ; + [group by id_articol,pretv) a ] + ; + [left join nom_articole b on a.id_articol = b.id_articol ] + ; + [order by a.id_rul] + +*** Daca nu cumulez articolele, pot aparea piese date in consum si aceleasi piese pe retur, care ar fi trebuit sa fie pe 0 cantitativ si sa nu apara in deviz +*!* TEXT TO lcSql TEXTMERGE NOSHOW +*!* select a.id_articol,a.pretv,a.cante,a.dataact,a.id_rul, +*!* pack_sesiune.calculeaza_pret_cu_tva(a.pretv,1,pack_def.GetIdMonedaNationala(),<>, 0, 2) as pretctva, +*!* b.denumire,b.codmat, b.um +*!* from rul a left join nom_articole b on a.id_articol = b.id_articol +*!* where a.sters = 0 and a.id_lucrare = <> +*!* order by a.id_rul +*!* ENDTEXT + +*!* where a.cante <> 0 + lnSucces = goExecutor.oExecute(lcSql,lcCursorMateriale) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,16,'Eroare') + llReturn = .F. + Endif + ELSE + *!* modificare v 2.0.41 : am inlocuit tva cu pretctva + Select codmat,denumire,um,pretv,pretctva,Sum(cante) As cante,Min(dataact) As dataact,Min(id_rul) As id_rul ; + From (lcCursorRulaje) ; + Group By codmat,denumire,um,pretv,pretctva ; + ORDER BY 8 ; + INTO Cursor (lcCursorMateriale) + +*** Daca nu cumulez articolele, pot aparea piese date in consum si aceleasi piese pe retur, care ar fi trebuit sa fie pe 0 cantitativ si sa nu apara in deviz +*!* Select codmat,denumire,um,cante,pretv,pretctva,dataact,id_rul ; +*!* From (lcCursorRulaje) ; +*!* ORDER BY id_rul ; +*!* INTO Cursor (lcCursorMateriale) + + Endif + If Used(lcCursorManopera) And Used(lcCursorMateriale) And llReturn + If Reccount(lcCursorManopera)>0 Or Reccount(lcCursorMateriale)>0 + Private pnTotalMatDeviz,pnTotalTVAMatDeviz,pnTotalManDeviz,pnTotalTvaDeviz, pnIdOrdl + *!* modificare v 2.0.37 : am pus a.kmint in loc de b.kmint + pnIdOrdl = toComanda.id_ordl + lcSql=[select a.nrord,a.nume,a.cod_fiscal,a.datai,a.asigurator,a.inspector,] + ; + [a.banca,a.cont_banca,a.adresa,a.nr_dosar,a.reg_comert,a.tip_persoana,] + ; + [b.nrinmat,b.series,b.seriem,b.culoare,a.kmint,a.ore_functionare,b.marca,b.masina ] + ; + [from ] + gcS + [.auto_vordl a ] + ; + [left join ] + gcS + [.auto_vmasiniclienti b on a.id_masiniclient=b.id_masiniclient ] + ; + [where a.id_ordl=?pnIdOrdl] && + Alltrim(Str(toComanda.id_ordl)) + + lnSucces=goExecutor.oExecute(lcSql,lcCursorDateClient) + If lnSucces<0 + amessagebox(goExecutor.cEroare,0+16,'Eroare') + Else + Select (lcCursorDateClient) + Scatter Name olistare Memo + ADDPROPERTY(olistare,"proc_tvav",toComanda.proc_tvav) + Use In (lcCursorDateClient) + + ADDPROPERTY(olistare, 'nrfact', IIF(TYPE('toComanda.nrfact') <> 'U', toComanda.nrfact, 0)) + ADDPROPERTY(olistare, 'datafact', IIF(TYPE('toComanda.datafact') <> 'U', toComanda.datafact, {})) + + Select (lcCursorMateriale) + *!* modificare v 2.0.41 : am inlocuit tva cu pretctva + Calculate Sum(Round(cante*pretv,gnPc)),Sum(Round(cante*pretctva,gnPc)) To pnTotalMatDeviz,pnTotalCTVAMatDeviz + + Select (lcCursorManopera) + Calculate Sum(Round(timpn*Pret,gnPc)) To pnTotalManDeviz + *!* modificare v 2.0.41 : am inlocuit pnTotalTvaMatDeviz cu pnTotalCTVAMatDeviz-pnTotalMatDeviz + pnTotalTvaDeviz=Iif(glAutoBonDet,pnTotalCTVAMatDeviz-pnTotalMatDeviz,Round(pnTotalMatDeviz*(toComanda.proc_tvav-1),gnPc))+Round(pnTotalManDeviz*(toComanda.proc_tvav-1),gnPc) + + Select id_rul as id,olistare.nrord As nrord,'A' As semn,codmat,denumire,PADR(um,10, ' ') as um,cante,pretv As Pret,; + dataact as data From (lcCursorMateriale) Where cante <> 0 ; + UNION All ; + SELECT id_oper as id,olistare.nrord As nrord,'B' As semn,codop As codmat,denop As denumire, PADR('ORE',10, ' ') as um,; + timpn As cante,Pret,datai as data ; + From (lcCursorManopera) Order By 3,1 Into Cursor (lcCursorDeviz) + + If toComanda.Validat = 1 + lcSql = [select localitate,strada,numar,adresa,cod_fiscal,reg_comert from syn_nom_firme where ] + ; + [id_firma = ?gnIdFirma] + lnSucces=goExecutor.oExecute(lcSql,lcCursorDateFirma) + If lnSucces<0 + amessagebox(goExecutor.cEroare,0+16,'Eroare') + llReturn = .F. + Else + Select (lcCursorDateFirma) + Scatter Name firma + Use In (lcCursorDateFirma) + lcRaport = [rap_deviz] + *!* modificare MIX 07.09.2007 + *!* Select crslistare + *!* *!* modificare 09.08.2006 + *!* Locate For Like('MIX*',denumire) And semn=='A' + *!* If Found() + *!* Calculate Sum(Round(cante*Pret,gnPc)),Max(Recno()) To lnSumaMix,lnNrCrt For Like('MIX*',denumire) And semn='A' + *!* If Used('crslistare2') + *!* Use In crslistare2 + *!* Endif + *!* Select Recno() As nrcrtord,* From crslistare Where !(Like('MIX*',denumire) And semn='A') Into Cursor crslistare2 Readwrite + *!* Select crslistare2 + *!* Append Blank + *!* Replace codmat With '',denumire With 'MIX',semn With 'A',Pret With lnSumaMix,cante With 1,nrcrtord With lnNrCrt,nrord With olistare.nrord + *!* Use In crslistare + *!* Select * From crslistare2 Into Cursor crslistare Order By nrcrtord + *!* Use In crslistare2 + *!* Endif + *!* modificare MIX 07.09.2007 ^ + Endif + Else + lcRaport = [rap_comanda] + Endif + If llReturn + toFereastra.AlwaysOnTop=.F. + lcSetareRaport = SET("ReportBehavior") + Set REPORTBEHAVIOR 90 + Select (lcCursorDeviz) + Go Top + + goExport.export2frx(lcCursorDeviz,lcRaport,.F., , , , , .T.) && modificare v 2.1.9 + Set REPORTBEHAVIOR &lcSetareRaport + toFereastra.AlwaysOnTop=.T. + Use In (lcCursorDeviz) + Endif + Release pnTotalMatDeviz,pnTotalTVAMatDeviz,pnTotalManDeviz,pnTotalTvaDeviz + Endif + Else + amessagebox("Nu exista manopera si materiale pe comanda " + Alltrim(toComanda.nrord)+ "!",0+48,"Atentie") + Endif + Endif + If !llCursorManopera + Use In (SELECT((lcCursorManopera))) + Endif + Use In (Select((lcCursorMateriale))) + Release lcSql,lnSucces,llReturn,lcCursorManopera,lcCursorMateriale,llCursorManopera,llCursorMateriale,lcCursorDateClient, lcCursorDateFirma, pnTipDeviz, lcSetareRaport +Endproc && listare_deviz +************************************************* SFARSIT : listare_deviz ********************************************** +******************************************* INCEPUT : listare_comenzi_validate **************************************** +Procedure listare_comenzi_validate + Parameters tnTip + + && 1:POST GARANTIE; 2:GARANTIE; 3:REGIE; 4:PREGATIRE; 5:REGIE2 ; 6:PRODUCTIE; + Local lcSql, lcCursor, lnSucces, lcTip + + Do Case + Case tnTip = 1 + lcTip = 'POST GARANTIE' + Case tnTip = 2 + lcTip = 'GARANTIE' + Case tnTip = 3 + lcTip = 'REGIE' + Case tnTip = 4 + lcTip = 'PREGATIRE' + Case tnTip = 5 + lcTip = 'REGIE 2' + Case tnTip = 6 + lcTip = 'PRODUCTIE' + Endcase + + If Used('crscomenzi') + Use In crscomenzi + Endif + lcSql = [select datai,nrord,nume,manopera,materiale ] + ; + [from auto_validare_comenzi where validat = 1 and ] + ; + [extract(month from dataoravalid) + extract(year from dataoravalid) * 12 = ?gnLuna + ?gnAn * 12 ] + ; + [and id_tip = ?tnTip] + lcCursor = [crscomenzi] + _Screen.MousePointer = 11 + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,'Eroare') + Return + Endif + _Screen.MousePointer = 0 + + If Reccount('crscomenzi')=0 + amessagebox("Nu exista inregistrari pentru listare!",0+64,"Info listare") + Else + Private pcTitlu,pcDataOra + pcDataOra=get_ora(2) + pcTitlu=[CENTRALIZATOR COMENZI ] + lcTip + [ VALIDATE N LUNA ] + Padl(Alltrim(Str(gnLuna)),2,[0]) + [/] + Alltrim(Str(gnAn)) + gofundal.Visible=.F. + Keyboard "{ctrl+f10}" + Select crscomenzi + Report Form centralizator_devize To Printer Prompt Preview + *!* DO LISTAREUSERREPORT WITH "crscomenzi", "FRX", "centralizator_devize" IN PROCEDURI_RAPOARTE.PRG + gofundal.Visible=.T. + Endif + + If Used('crscomenzi') + Use In crscomenzi + Endif +Endproc +******************************************* SFARSIT : listare_comenzi_validate **************************************** +************************************************ INCEPUT : listare_comanda ********************************************* +* Listare precomanda +Procedure listare_comanda_old_de_sters + Lparameters tnIdTip + Private pofirma,pocomanda,pcschema1,pcselect1,pddataora + Store '' To pofirma,pocomanda + + pcschema=[''] + pcselect=['select adresa,localitate,strada,numar,cod_fiscal from syn_nom_firme where 1=2'] + pcorder=[] + pcfiltru=[id_firma = ]+Alltrim(Str(gnIdFirma)) && modificare v 2.0.29 : am inlocuit gnId_Firma + llAfiseaza=.F. + gencursor('pofirma','crsFirma',pcselect,pcfiltru,pcschema,pcorder,llAfiseaza) + pofirma.ca_baza1.afisare() + Sele crsfirma + Scatter Name firma Memo + + pddataora = get_ora() + + pcschema=[''] + pcselect=['select cod_fiscal,adresa,telefon,sysdate as dataora from vnom_parteneri where '] + pcorder=[] + pcfiltru=[id_part=]+Alltrim(Str(ocomlistare.nidclie)) + llAfiseaza=.F. + gencursor('pocomanda','crsComanda',pcselect,pcfiltru,pcschema,pcorder,llAfiseaza) + pocomanda.ca_baza1.afisare() + Select crsComanda + Scatter Name ocom Memo + AddProperty(ocom,'marca',ocomlistare.marca) + AddProperty(ocom,'nrinmat',ocomlistare.nrinmat) + AddProperty(ocom,'masina',ocomlistare.masina) + AddProperty(ocom,'nrord',ocomlistare.nrord) + AddProperty(ocom,'nume',ocomlistare.nume) + AddProperty(ocom,'series',ocomlistare.series) + AddProperty(ocom,'seriem',ocomlistare.seriem) + AddProperty(ocom,'asigurator',ocomlistare.asigurator) + AddProperty(ocom,'inspector',ocomlistare.inspector) + AddProperty(ocom,'kmint',ocomlistare.kmint) + AddProperty(ocom,'furnizor',ocomlistare.furnizor) + AddProperty(ocom,'nrachi',ocomlistare.nrachi) + *!* AddProperty(ocom,'dataachi',ocomlistare.dataachi) + AddProperty(ocom,'anfabricatie',ocomlistare.anfabricatie) + AddProperty(ocom,'termen',ocomlistare.termen) + AddProperty(ocom,'datai',Ttod(ocom.dataora)) + AddProperty(ocom,'nr_dosar',ocomlistare.nr_dosar) + *!* modificare v 2.0.9 + ADDPROPERTY(ocom,'solicitari_client',ocomlistare.solicitari_client) + *!* modificare v 2.0.9 ^ + nrord=ocom.nrord + listare_raport_comanda([CRSCOMANDA],tnIdTip) + + Use In crsComanda + Use In crsfirma + +Endproc +************************************************ SFARSIT : listare_comanda ********************************************* + +******************************************** INCEPUT : listare_raport_comanda ****************************************** +Procedure listare_raport_comanda + Lparameters lcCursor,tnTipComanda + If gnTip_LPrecomanda = 1 && cu tipizate + lcRaport = [_PRECO] + Else + If tnTipComanda=2 + lcRaport = [PRECOG] + Else + lcRaport = [PRECO] + Endif + Endif + *!* modificare v 2.0.5 + *!* Do LISTAREUSERREPORT With lcCursor, "FRX", lcRaport In PROCEDURI_RAPOARTE.PRG + goExport.export2frx(lcCursor,lcRaport,.F., , , , , .T.) && modificare v 2.1.9 + *!* modificare v 2.0.5 +Endproc +******************************************** SFARSIT : listare_raport_comanda ****************************************** +*********************************************** INCEPUT : listarefacturi_itp ******************************************* +Procedure listarefacturi_itp + If Type('gnId_Sectie_ITP') = 'U' Or Empty(gnId_Sectie_ITP) Or Isnull(gnId_Sectie_ITP) + amessagebox("Alegeti sectia de ITP din Configurare > Optiuni !",0+48,"Atentie") + Return + Endif + + Do listarefacturi_sectie With gnId_Sectie_ITP,gnId_Set_ITP +Endproc +*********************************************** SFARSIT : listarefacturi_itp ******************************************* +********************************************* INCEPUT : listarefacturi_spalare ***************************************** +Procedure listarefacturi_spalare + If Type('gnId_Sectie_Spalare') = 'U' Or Empty(gnId_Sectie_Spalare) Or Isnull(gnId_Sectie_Spalare) + amessagebox("Alegeti sectia de spalare din Configurare > Optiuni !",0+48,"Atentie") + Return + Endif + + Do listarefacturi_sectie With gnId_Sectie_Spalare,gnId_Set_Spalare +Endproc +********************************************* SFARSIT : listarefacturi_spalare ***************************************** +********************************************* INCEPUT : listarefacturi_sectie ****************************************** +Procedure listarefacturi_sectie + Lparameters tnIdSectie,tnIdSet + Private pcsectie,pcDataOra + If Used('crssectie') + Use In crssectie + Endif + lcSql = [select sectie from ] + gcS + [.vnom_sectii where id_sectie = ] + Alltrim(Str(tnIdSectie)) + lcCursor = [crssectie] + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,'Eroare') + Return + Endif + Select crssectie + pcsectie=Alltrim(sectie) + Use In crssectie + + pcDataOra=get_ora(2) + + If Used('crsfacturi') + Use In crsfacturi + Endif + lcSql = [select distinct nrord,NVL(serie_act,'')||nract as nrfact,dataact as datafact,partd as nume,] + ; + [sum(case when scc='704' then suma else 0 end) over (partition by id_lucrare) as manopera,] + ; + [sum(case when scc='4428' or (scc = '4427' and scd <> '4428') then suma else 0 end) over (partition by id_lucrare) as tva ] + ; + [from ] + gcS + [.vact where scd='4111' and id_sectie = ] + Alltrim(Str(tnIdSectie)) + [ ] + ; + [and id_set = ] + Alltrim(Str(tnIdSet)) + [ ] + ; + [and luna=] + Alltrim(Str(gnLuna)) + [ and an=] + Alltrim(Str(gnAn)) + lcCursor = [crsfacturi] + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,'Eroare') + Return + Endif + + If Reccount('crsfacturi')=0 + Use In crsfacturi + amessagebox("Nu exista inregistrari pentru listare!",0+64,"Info listare") + Return + Endif + + Select crsfacturi + Report Form facturisectie To Printer Prompt Preview + Use In crsfacturi + +Endproc +********************************************* SFARSIT : listarefacturi_sectie ****************************************** +********************************************* INCEPUT : facturi_emise_pe_asig ****************************************** +Procedure facturi_emise_pe_asig + Private ofrmopt,ofrminterval,ofrmaleg,pnButon,pcAnLuna1,pcAnLuna2,pnOptiune,pcselect,pcschema,pcfiltru,pcorder,pofacturi,llAfiseaza + Store '' To ofrmaleg,pofacturi + + pnOptiune=1 + pnButon=1 + lcTitlu="RAPORT FACTURI EMISE" + lcIntrebare="Doriti ca raportul sa contina :" + lnNrOptiuni=2 + ofrmopt=Createobject("frm_optiune",lcTitlu,lcIntrebare,lnNrOptiuni) + ofrmopt.ogOptiuni.option1.Caption="Doar facturile cu asiguratori" + ofrmopt.ogOptiuni.option2.Caption="Toate facturile" + ofrmopt.Show(1) + + Release ofrmopt + If pnButon<>1 + Return + Endif + lcView=Iif(pnOptiune=1,[auto_facturi_asig],[auto_facturi_toate]) + + pnButon=1 + pcAnLuna1=Padl(Alltrim(Str(gnLuna)),2,'0')+Alltrim(Str(gnAn)) + pcAnLuna2=pcAnLuna1 + ofrminterval=Createobject('frm_interval_luni') + ofrminterval.Show(1) + Release ofrminterval + + If pnButon=1 + _Screen.MousePointer=11 + Private pcDataOra + Local lnNrLuni1,lnNrLuni2 + lnNrLuni1=Val(Substr(pcAnLuna1,1,2))+Val(Substr(pcAnLuna1,3))*12 + lnNrLuni2=Val(Substr(pcAnLuna2,1,2))+Val(Substr(pcAnLuna2,3))*12 + pcDataOra = get_ora(2) + pcschema=[''] + pcorder=[] + pcselect=['select * from ] + gcS + [.]+lcView+[ where 1=2'] + pcfiltru=[extract(month from dataact)+extract(year from dataact)*12 ]+; + [between ]+Alltrim(Str(lnNrLuni1))+[ and ]+Alltrim(Str(lnNrLuni2)) + llAfiseaza=.F. + gencursor('pofacturi','crsfacturi',pcselect,pcfiltru,pcschema,pcorder,llAfiseaza) + pofacturi.ca_baza1.afisare() + _Screen.MousePointer=0 + + If Reccount('crsfacturi')=0 + Use In crsfacturi + amessagebox("Nu exista inregistrari pentru vizualizare!",0+64,"Info raport facturi emise pe asiguratori") + Return + Else + Private pcPerioada + pnButon=1 + Do While pnButon=1 + pnOptiune=1 + ofrmaleg=Createobject('frm_aleg_vizualizare') + ofrmaleg.Show(1) + Do Case + Case pnButon<>1 + Loop + Case pnOptiune=1 + Private pcTitlu + Store '' To pcTitlu + pcTitlu = 'LISTA FACTURILOR EMISE PE ASIGURATORI' + pcPerioada = Iif(lnNrLuni1==lnNrLuni2,; + 'Luna '+Substr(pcAnLuna1,1,2)+'/'+Substr(pcAnLuna1,3),; + 'Perioada '+Substr(pcAnLuna1,1,2)+'/'+Substr(pcAnLuna1,3)+' - '+Substr(pcAnLuna2,1,2)+'/'+Substr(pcAnLuna2,3)) + Select crsfacturi + Report Form rap_facturi_asig To Printer Prompt Preview + Case pnOptiune=2 + lcSirColoane=[asigurator,nrord,nract,TTOD(dataact),nume,manopera,materiale,]+; + [valctva-manopera-materiale,valctva] + lcSirNume=[Asigurator,Nr_comanda,Nr_factura,Data_factura,Nume,Manopera,Materiale,Tva,Valoare_cu_tva] + exportare('crsfacturi',lcSirColoane,lcSirNume) + Endcase + Release ofrmaleg + Enddo + Use In crsfacturi + Endif + Endif + +Endproc +********************************************* SFARSIT : facturi_emise_pe_asig ****************************************** +******************************************* +* PROCEDURE listare_masiniclienti( ) +* Data/ora : 01/27/05, 15:21:24 +* autor : liana.macinic +* descriere: + +****** PARAMETER BLOCK ************** +* Parametri : 0 +* +******************************************* +Procedure listare_masiniclienti( ) + Private pomasinicl,pcschema1,pcselect1 + Store '' To pomasinicl + + pcschema1=[''] + pcselect1=['select * from ] + gcS + [.auto_vmasiniclienti where 1=2'] + pcorder1= [partener] + pcfiltru1 = [1 = 1] + gencursor('pomasinicl','climas',pcselect1,pcfiltru1,pcschema1,pcorder1) + pomasinicl.ca_baza1.afisare() + + If Reccount('climas')=0 + Use In climas + amessagebox("Nu exista inregistrari pentru listare!",0+64,"Info listare") + Return + Endif + + Select climas + + Private pcTitlu,pcDataOra + Store '' To pcTitlu,pcDataOra + pcTitlu = 'CLIENI' + pcDataOra = get_ora(2) + Select climas + Report Form clie To Printer Prompt Preview + +Endproc +**********************sfarsit procedura listare_masiniclienti******************* + +******************************************* +* PROCEDURE listare_clientiadrese( ) +* Data/ora : 01/27/05, 15:27:46 +* autor : liana.macinic +* descriere: + +****** PARAMETER BLOCK ************** +* Parametri : 0 +* +******************************************* +Procedure listare_clientiadrese( ) + *!* sele clie + *!* set order to tag nume + *!* report form clieadresa to printer prompt preview + + + *!* Private pocl,pcschema1,pcselect1 + *!* Store '' To pocl + + *!* pcschema1=[''] + + lcSql = [select n.denumire as nume, n.cod_fiscal, n.id_part,n.telefon,N.ADRESA,n.zona from ]+gcS+[.vnom_parteneri n where n.id_part in (select id_part from ]+gcS+[.Vcoresp_tip_part where id_tip_part in (select id_tip_part from ]+gcS+[.vcoresp_tip_cont where cont = '4111'))] + lcCursor = [clie] + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + + If Reccount('clie')=0 + Use In clie + amessagebox("Nu exista inregistrari pentru listare!",0+64,"Info listare") + Return + Endif + + Private pcTitlu,pcDataOra + Store '' To pcTitlu,pcDataOra + pcTitlu = 'CLIENI' + pcDataOra = get_ora(2) + Select clie + Report Form clieadresa To Printer Prompt Preview + +Endproc + +**********************sfarsit procedura listare_clientiadrese******************* +******************************************* +* PROCEDURE fact_emi( ) +* Data/ora : 01/28/05, 09:06:56 +* autor : liana.macinic +* descriere: + +****** PARAMETER BLOCK ************** +* Parametri : 0 +* +******************************************* +Procedure fact_ord_em + Private ofrmopt,ofrminterval,ofrmaleg,pnButon,pcAnLuna1,pcAnLuna2,pnOptiune,pcselect,pcschema,pcfiltru,pcorder,pofacturi,llAfiseaza + Private pddataora,pcDataOra + Store '' To ofrmaleg,pofacturi + + pnOptiune=1 + pnButon=1 + + pnButon=1 + pddataora = get_ora() + pcDataOra=Ttoc(pddataora) + pdData1=Ttod(pddataora) + pdData2=pdData1 + ofrminterval=Createobject('frm_interval_zile') + ofrminterval.Show(1) + Release ofrminterval + + If pnButon=1 + _Screen.MousePointer=11 + Local lnNrLuni1,lnNrLuni2 + pcschema=[''] + pcorder=[] + pcselect=['select * from ] + gcS + [.auto_facturi_clienti where 1=2'] + pcfiltru=[dataact between to_date(']+Alltrim(Dtoc(pdData1))+[','DD/MM/YYYY') ]+; + [and to_date(']+Alltrim(Dtoc(pdData2))+[','DD/MM/YYYY') ] + llAfiseaza=.F. + gencursor('pofacturi','crsfacturi',pcselect,pcfiltru,pcschema,pcorder,llAfiseaza) + pofacturi.ca_baza1.afisare() + _Screen.MousePointer=0 + + If Reccount('crsfacturi')=0 + Use In crsfacturi + amessagebox("Nu exista inregistrari pentru vizualizare!",0+64,"Info raport facturi emise pe clienti") + Return + Else + Private pcPerioada + pnButon=1 + Do While pnButon=1 + pnOptiune=1 + ofrmaleg=Createobject('frm_aleg_vizualizare') + ofrmaleg.Show(1) + Do Case + Case pnButon<>1 + Loop + Case pnOptiune=1 + Private pcTitlu + Store '' To pcTitlu + pcTitlu = 'LISTA FACTURILOR EMISE PE CLIENI' + pcPerioada = Iif(pdData1=pdData2,; + 'Ziua '+Dtoc(pdData1),; + 'Perioada '+Dtoc(pdData1)+' - '+Dtoc(pdData2)) + Select crsfacturi +*!* Report Form rap_facturi_clienti To Printer Prompt Preview + goExport.export2frx("crsFacturi","rap_facturi_clienti",.F., , , , , .T.) + Case pnOptiune=2 + lcSirColoane=[TTOD(dataact),nrord,nract,nume,telefon,manopera,materiale,]+; + [valctva-manopera-materiale,valctva] + lcSirNume=[Data_factura,Nr_comanda,Nr_factura,Nume,Telefon,Manopera,Materiale,Tva,Valoare_cu_tva] + exportare('crsfacturi',lcSirColoane,lcSirNume) + Endcase + Release ofrmaleg + Enddo + Use In crsfacturi + Endif + Endif + +Endproc +**********************sfarsit procedura fact_ord_em******************* +***************************************** +Procedure fact_emi( ) + Private pcselect,pcschema,pcfiltru,pcorder,pofacturi,llAfiseaza + Store '' To pofacturi + pcschema=['NRCRT n(5),NRORD c(50),DATAI d,NUME c(50),MANOPERA n(20,4),MATERIALE n(20,4),'+]+; + ['ASIGURATOR c(24),INSPECTOR c(24),NRINMAT c(35),'+]+; + ['NRACT n(14),DATAACT d,VALCTVA n(19,2)'] + pcorder=[a.asigurator] + pcselect=['select row_number() over (partition by a.nrord order by ] + pcorder + [) as nrcrt,'+]+; + ['a.nrord,a.datai,a.nume,a.manopera,a.materiale,a.asigurator,'+]+; + ['a.inspector,a.nrinmat,'+]+; + ['b.nract,b.dataact,b.precdeb+b.debit as valctva '+]+; + ['from ] + gcS + [.auto_vvalid_comenzi a '+]+; + ['join ] + gcS + [.vireg_parteneri b on a.id_lucrare=b.id_lucrare '+]+; + ['where 1=2'] + pcfiltru=[b.luna=]+Alltrim(Str(gnLuna))+[ and b.an=]+Alltrim(Str(gnAn)) + [ and a.facturat = 1] + *!* pcselect=['select row_number() over (partition by a.nrord order by ] + pcorder + [) as nrcrt,'+]+; + *!* ['a.nrord,a.datai,a.nume,a.manopera,a.materiale as materiale,a.asigurator,'+]+; + *!* ['a.inspector,a.tip_incas,a.numar,a.nrinmat,b.nract,b.dataact,'+]+; + *!* ['(b.precdeb+b.debit)*]+ALLTRIM(STR(m.ctvam,4,2))+[ as valctva '+]+; + *!* ['from ] + gcS + [.dev_vvalid_comenzi a '+]+; + *!* ['join ] + gcS + [.vireg_parteneri b on a.id_lucrare=b.id_lucrare '+]+; + *!* ['where 1=2'] + *!* pcfiltru=[b.luna=]+Alltrim(Str(gnLuna))+[ and b.an=]+Alltrim(Str(gnAn)) + [ and a.facturat = 1 ] + ; + *!* [and b.id_set in (31003,31004,31005,31011,31012)] + llAfiseaza=.F. + gencursor('pofacturi','crsfacturi',pcselect,pcfiltru,pcschema,pcorder,llAfiseaza) + pofacturi.ca_baza1.afisare() + + If Reccount('crsfacturi')=0 + Use In crsfacturi + amessagebox("Nu exista inregistrari pentru listare!",0+64,"Info listare") + Return + Endif + + Private pcTitlu,pcDataOra + Store '' To pcTitlu,pcDataOra + pcTitlu = 'LISTA FACTURILOR EMISE PE ASIGURATORI' + pcDataOra = get_ora(2) + + Select crsfacturi + *!* BROWSE + + *!* sele clie + *!* set order to tag codc + + *!* sele ordl + *!* set rela off into clie + *!* set rela to codc into clie additive + *!* set filter to facturat + *!* set order to tag asig + *Report Form facturia To Printer Prompt Preview + goExport.export2frx("crsFacturi","facturia",.F., , , , , .T.) + Use In crsfacturi + *!* sele ordl + *!* set order to tag nrord + *!* set rela off into clie + + +Endproc + +**********************sfarsit procedura fact_emi******************* + +******************************************* +* PROCEDURE fact_ord_em( ) +* Data/ora : 01/28/05, 09:38:44 +* autor : liana.macinic +* descriere: + +****** PARAMETER BLOCK ************** +* Parametri : 0 +* +******************************************* +*!* Procedure fact_ord_em( ) + +*!* Private pcselect,pcschema,pcfiltru,pcorder,pofacturi,llAfiseaza +*!* Store '' To pofacturi +*!* pcschema=['NRCRT n(5),NRORD c(30),DATAI d,NUME c(50),MANOPERA n(20,4),MATERIALE n(20,4),'+]+; +*!* ['ASIGURATOR c(24),INSPECTOR c(24),NRINMAT c(10),'+]+; +*!* ['NRACT n(14),DATAACT d,VALCTVA n(19,2)'] +*!* pcorder=[b.dataact] +*!* pcselect=['select row_number() over (partition by a.nrord order by ] + pcorder + [) as nrcrt,'+]+; +*!* ['a.nrord,a.datai,a.nume,a.manopera,a.materiale,a.asigurator,'+]+; +*!* ['a.inspector,a.nrinmat,'+]+; +*!* ['b.nract,b.dataact,b.precdeb+b.debit as valctva '+]+; +*!* ['from ] + gcS + [.dev_vvalid_comenzi a '+]+; +*!* ['join ] + gcS + [.vireg_parteneri b on a.id_lucrare=b.id_lucrare '+]+; +*!* ['where 1=2'] +*!* pcfiltru=[b.luna=]+Alltrim(Str(gnLuna))+[ and b.an=]+Alltrim(Str(gnAn)) + [ and facturat = 1] +*!* llAfiseaza=.F. +*!* gencursor('pofacturi','crsfacturi',pcselect,pcfiltru,pcschema,pcorder,llAfiseaza) +*!* pofacturi.ca_baza1.afisare() + +*!* If Reccount('crsfacturi')=0 +*!* Use In crsfacturi +*!* amessagebox("Nu exista inregistrari pentru listare!",0+64,"Info listare") +*!* Return +*!* Endif + +*!* Private pcTitlu,pcdataora +*!* Store '' To pcTitlu,pcdataora +*!* pcTitlu = 'FACTURI EMISE' +*!* pcdataora = get_ora(2) + + +*!* Select crsfacturi +*!* Report Form facturi To Printer Prompt Preview + + + +*!* Endproc + +**********************sfarsit procedura fact_ord_em******************* +******************************************* +* PROCEDURE list_man_tot_desf( ) +* Data/ora : 01/28/05, 13:50:16 +* autor : liana.macinic +* descriere: + +****** PARAMETER BLOCK ************** +* Parametri : 0 +* +******************************************* +Procedure list_man_tot_desf(tltotal) + If tltotal + lcSelect = ['select * from ] + gcS + [.auto_vmecanici where 2=2'] + oca = cauta_alfa(lcSelect,'1 = 2',[''],'nume','nume,prenume,inactiv','Mecanici','nume,prenume') + Endif + + If Type('oca')<>'U' And Empty(oca.id_mecanic) + amessagebox("Nu ati ales nici un mecanic!",0+48,"Atentie") + Return + Endif + + loTherm = Newobject("_thermometer","_therm","","Rapoarte") + lcTask = "Generare..." + _Screen.MousePointer= 11 + With loTherm + .AlwaysOnTop=.T. + .Show() + + lnPercent = 10 + .Update(lnPercent, lcTask) + distribuire_timp_normat() + + lnPercent = 65 + .Update(lnPercent, lcTask) + Private pomasinicl,pcschema1,pcselect1 + Store '' To pomasinicl + *!* pcschema1=['ID_OPERMECANIC N(10),ID_OPER N(10),ORE N(12,3),INACTIV N(1),ID_MECANIC N(5),'+]+; + *!* ['NUME C(50),PRENUME C(50),MARCA N(5),ID_SALARIAT N(5),SECTIE C(30),ID_ORDL N(10),'+]+; + *!* ['PRET N(21,4),DATAI D,NRFACT N,DATAFACT D,DENOP C(100),TIMPN N(8,3),NRORD C(50)'] + pcschema1=[''] + pcselect1=['select t.* from ] + gcS + [.auto_listare_man_tot_desf t where 1=2'] + pcorder1= [t.nume,t.prenume] + pcfiltru1 = Iif(tltotal,[t.id_mecanic = ] + Alltrim(Str(oca.id_mecanic)) ,[2=2]) + gencursor('pomasinicl','salmec',pcselect1,pcfiltru1,pcschema1,pcorder1) + pomasinicl.ca_baza1.afisare() + .Complete() + .AlwaysOnTop=.F. + Endwith + Release loTherm + _Screen.MousePointer= 0 + + If Reccount('salmec')=0 + Use In salmec + amessagebox("Nu exista inregistrari pentru listare!",0+64,"Info listare") + Return + Endif + + Select salmec + + Private pcTitlu,pcDataOra + Store '' To pcTitlu,pcDataOra + pcTitlu = 'Manoper -Salarii' + pcDataOra = get_ora(2) + Select salmec + Report Form opersal To Printer Prompt Preview + Use In salmec + +Endproc + +**********************sfarsit procedura list_man_tot_desf******************* + +******************************************* +* PROCEDURE list_man_tot_com( ) +* Data/ora : 01/28/05, 15:20:20 +* autor : liana.macinic +* descriere: + +****** PARAMETER BLOCK ************** +* Parametri : 0 +* +******************************************* +Procedure list_man_tot_com(tltotal) + If tltotal + lcSelect = ['select * from ] + gcS + [.auto_vmecanici where 2=2'] + oca = cauta_alfa(lcSelect,'1 = 2',[''],'nume','nume,prenume,inactiv','Mecanici','nume,prenume') + Endif + + If Type('oca')<>'U' And Empty(oca.id_mecanic) + amessagebox("Nu ati ales nici un mecanic!",0+48,"Atentie") + Return + Endif + + loTherm = Newobject("_thermometer","_therm","","Rapoarte") + lcTask = "Generare..." + _Screen.MousePointer= 11 + With loTherm + .AlwaysOnTop=.T. + .Show() + + lnPercent = 10 + .Update(lnPercent, lcTask) + distribuire_timp_normat() + + lnPercent = 65 + .Update(lnPercent, lcTask) + Private pomasinicl,pcschema1,pcselect1,pcGrup + Store '' To pomasinicl + pcschema1=[''] + pcselect1 = ['select t.* from ] +gcS+ [.auto_listare_man_tot_com t where 1 = 2'] + pcorder1= [t.nume,t.prenume,t.nrord] + pcfiltru1 = Iif(tltotal,[t.id_mecanic = ] + Alltrim(Str(oca.id_mecanic)),[2=2]) + *!* pcGrup = [t.id_ordl,t.nrord,t.id_mecanic,t.nume,t.prenume,trunc(t.datai),t.sectie] + llAfiseaza = .F. + gencursor('pomasinicl','salmec',pcselect1,pcfiltru1,pcschema1,pcorder1,llAfiseaza) + pomasinicl.ca_baza1.afisare() + .Complete() + .AlwaysOnTop=.F. + Endwith + Release loTherm + _Screen.MousePointer= 0 + + If Reccount('salmec')=0 + Use In salmec + amessagebox("Nu exista inregistrari pentru listare!",0+64,"Info listare") + Return + Endif + + Private pcTitlu,pcDataOra + Store '' To pcTitlu,pcDataOra + pcTitlu = 'Manoper -Salarii' + pcDataOra = get_ora(2) + Select salmec + Report Form opersalCOM To Printer Prompt Preview + Use In salmec + +Endproc + +**********************sfarsit procedura list_man_tot_com******************* + + +******************************************* +* PROCEDURE list_comanda( ) +* Data/ora : 01/29/05, 11:05:08 +* autor : liana.macinic +* descriere: + +****** PARAMETER BLOCK ************** +* Parametri : 0 +* +******************************************* +Procedure list_comanda( ) + Private pcselect,pcschema,pcfiltru,pcorder,pocomenzi,llAfiseaza + Store '' To pocomenzi + If Used('crscomenzi') + Use In crscomenzi + Endif + pcschema=['ID_ORDL n(10),ID_LUCRARE n(10),DATAI d,NUME c(50),NRORD c(50),TIP_COMANDA c(50),VALIDAT N(1),ID_TIP N(5),NR_DOSAR C(40),PROC_TVAV N(10,4)'] + pcselect=['select a.id_ordl,a.id_lucrare,a.datai,a.nume,a.nrord,a.tip_comanda,a.validat,a.id_tip,a.nr_dosar,a.proc_tvav '+]+; + [' from ] + gcS + [.auto_normare_comenzi a where 1=2'] + pcfiltru=[1=2] + *!* pcFiltru = [(extract(month from datafact) = ] + Alltrim(Str(gnLuna)) + [ and extract(year from datafact) = ]+Alltrim(Str(gnAn)) + [ or datafact is null)] + + pcorder=[datai,nrord] + llAfiseaza=.F. + gencursor('pocomenzi','crscomenzi',pcselect,pcfiltru,pcschema,pcorder,llAfiseaza) + pocomenzi.ca_baza1.afisare() + + ofrmviz=Createobject('frm_com_list') + ofrmviz.Show(1) + If Used('crscomenzi') + Use In crscomenzi + Endif + Release pocomenzi + +Endproc + +**********************sfarsit procedura list_comanda******************* +*------------------------------inceput procedura listare_precomanda----------------------------------------- +Procedure listare_precomanda + Lparameters tnIdOrdl + Private pofirma,pocomanda,pcschema1,pcselect1,pddataora + Store '' To pofirma,pocomanda + + pddataora=get_ora() + lcSql = [select adresa,localitate,strada,numar,cod_fiscal from syn_nom_firme where id_firma = ]+Alltrim(Str(gnIdFirma)) + llSucces = goExecutor.oExecuta(m.lcSql, 'crsFirma') + IF m.llSucces + Select crsfirma + Scatter Name firma Memo + ELSE + RETURN + ENDIF + USE IN (SELECT('crsFirma')) + + pcschema=['DATAI d,NUME c(50),COD_FISCAL c(30),ADRESA c(150),TELEFON c(30),NRORD c(50),NRINMAT c(35),SERIES c(17),'+]+; + ['SERIEM c(17),ASIGURATOR c(24),INSPECTOR C(100), MARCA c(24),MASINA c(20),KMINT n(10),ORE_FUNCTIONARE N(10), ID_TIP n(5),'+]+; + ['SOLICITARI_CLIENT M, OBSERVATII M, DEFECTIUNI M, NR_DOSAR C(100), FURNIZOR C(100), NRACHI N(16), ANFABRICATIE N(4),'+]+; + ['TERMEN D'] + pcselect=['select datai,nume,cod_fiscal,adresa,telefon,nrord,nrinmat,series,seriem,asigurator,inspector,marca,masina,kmint,ore_functionare,id_tip,'+]+; + ['solicitari_client,observatii,defectiuni,nr_dosar,furnizor, nrachi, anfabricatie, termen '+]+; + [' from auto_vordl where '] + + pcorder=[] + pcfiltru = [ id_ordl = ] + Alltrim(Str(tnIdOrdl)) + llAfiseaza=.F. + gencursor('pocomanda','crsComanda',pcselect,pcfiltru,pcschema,pcorder,llAfiseaza) + pocomanda.ca_baza1.afisare() + Select crsComanda + Scatter Name ocom Memo + nrord=ocom.nrord + + listare_raport_comanda([CRSCOMANDA],ocom.id_tip) + + Use In (SELECT('crsComanda')) + Release ocom +Endproc +**********************sfarsit procedura listare_precomanda******************* +************************************ INCEPUT : listare_avans ************************************ +*!* modificare v 2.0.28 +*!* Procedure listare_avans +*!* Lparameters tnIdPartener,tcCursor,tcSirNrord,tcNrInmat,tnDevize +*!* Private poDate,pofirma,poClient,ptDataOra +*!* poDate = Createobject('oDateFacturaDevize',tnIdPartener,tcSirNrord,tcNrInmat,tnDevize,0) +*!* lcSql = [select 1 as tip,(case when tip_persoana = 1 then prefix||' '||denumire||' '||sufix else denumire end) as denumire,]+; +*!* [cod_fiscal,adresa,telefon,'' as telefon2,'' as telefon3,'' as fax,reg_comert,banca,cont_banca,'' as banca2,'' as cont_banca2,] + ; +*!* ['' as banca3,'' as cont_banca3,sysdate as dataora,tip_persoana,0 as capital_soc_var,] + ; +*!* [0 as capital_soc_sub from ] + gcS + [.vnom_parteneri where id_part = ?poDate.id_client ] + ; +*!* [union all ] + ; +*!* [select 2 as tip,denumire,cod_fiscal,'' as adresa,'' as telefon,'' as telefon2,'' as telefon3,'' as fax,reg_comert,'' as banca,'' as cont_banca,] + ; +*!* ['' as banca2,'' as cont_banca2,'' as banca3,'' as cont_banca3,null as dataora,tip_persoana,0 as capital_soc_var,0 as capital_soc_sub from ] + gcS + [.nom_parteneri ] + ; +*!* [where sters = 0 and inactiv = 0 and id_part in ] + ; +*!* [(select id_partener from ] + gcS + [.utilizatori_rol_intern where sters = 0 and id_util = ?gnIdUtil)] + ; +*!* [union all ] + ; +*!* [select 3 as tip,antet as denumire,cod_fiscal,adresa,telefon,telefon2,telefon3,fax,reg_comert,banca1 as banca,] + ; +*!* [cont_banca1 as cont_banca,banca2,cont_banca2,banca3,cont_banca3,null as dataora,0 as tip_persoana,capital_soc_var,capital_soc_sub ] + ; +*!* [from syn_nom_firme where id_firma = ?gnIdFirma ] +*!* If Used('crsdatefacturare') +*!* Use In crsdatefacturare +*!* Endif +*!* lcCursor = [crsdatefacturare] +*!* lnSucces = goExecutor.oExecute(lcSql,lcCursor) +*!* If lnSucces<0 +*!* amessagebox(goExecutor.oPrelucrareEroare(),16,"Eroare") +*!* Return +*!* Endif +*!* Select crsdatefacturare +*!* Scan +*!* Do Case +*!* Case tip = 1 +*!* Scatter Name poClient Memo +*!* poDate.nume_client = poClient.denumire +*!* ptDataOra = poClient.dataora +*!* Case tip = 2 +*!* With poDate +*!* .nume_responsabil = denumire +*!* .BIresp = reg_comert +*!* .CNPresp = cod_fiscal +*!* Endwith +*!* Otherwise +*!* Scatter Name pofirma Memo +*!* Endcase +*!* Endscan +*!* Use In crsdatefacturare + +*!* ofrmdelegat=Createobject("frm_delegat_factura") +*!* ofrmdelegat.nidpartener = poDate.id_client +*!* ofrmdelegat.cclient = poDate.nume_client +*!* ofrmdelegat.cnrinmat_exp = poDate.nrinmat_del +*!* ofrmdelegat.Show(1) +*!* Release ofrmdelegat + +*!* Private pnTotCTva,pnTotFTva,pnTotTva,plAchitat,plEmiteBon +*!* Store 0 To pnTotCTva,pnTotFTva,pnTotTva +*!* Store {} To pdDataChit,pdDataAct +*!* Store .T. To plAchitat,plEmiteBon + +*!* If gnAvans419=1 +*!* lcScc='419' +*!* Else +*!* lcScc='707' +*!* Endif + +*!* Select &tcCursor +*!* *!* modificare v 2.0.21 +*!* *!* Sum suma For Alltrim(scd) = '4111' And Alltrim(scc) = lcScc And Left(Alltrim(explicatia),5) = "AVANS" To pnTotFTva +*!* *!* Sum suma For Alltrim(scd) = '4111' And Alltrim(scc) = '4427' And Left(Alltrim(explicatia),5) = "AVANS" To pnTotTva +*!* Sum suma For Alltrim(scd) = '4111' And Alltrim(scc) = lcScc And LIKE([*AVANS*],UPPER(ALLTRIM(explicatia))) To pnTotFTva +*!* Sum suma For Alltrim(scd) = '4111' And Alltrim(scc) = '4427' And LIKE([*AVANS*],UPPER(ALLTRIM(explicatia))) To pnTotTva +*!* *!* modificare v 2.0.21 ^ +*!* pnTotCTva = pnTotFTva + pnTotTva + +*!* Select &tcCursor +*!* Locate For Alltrim(scd) = '4111' +*!* If Found() +*!* poDate.nract = &tcCursor..nract +*!* poDate.serie_act = &tcCursor..serie_act +*!* poDate.dataact = &tcCursor..dataact +*!* poDate.proc_tva = &tcCursor..proc_tva*100-100 +*!* poDate.datascad = &tcCursor..datascad +*!* Endif + +*!* Select &tcCursor +*!* Locate For Alltrim(scd) = '5311' +*!* Do Case +*!* Case Found() And pnTipIncasare=2 +*!* Store .F. To plAchitat +*!* Store .T. To plEmiteBon +*!* poDate.nrchit = &tcCursor..nract +*!* poDate.sumaachit = &tcCursor..suma +*!* Case Found() And pnTipIncasare=3 +*!* Store .F. To plEmiteBon +*!* poDate.nrchit = &tcCursor..nract +*!* poDate.datachit = &tcCursor..dataact +*!* poDate.sumaachit = &tcCursor..suma +*!* poDate.sumavorbe = SUMA_IN_VORBE(Round(poDate.sumaachit,gnPc)) +*!* Otherwise +*!* Store .F. To plAchitat +*!* Store .F. To plEmiteBon +*!* Endcase + + +*!* *!* modificare v 2.0.2 +*!* Select &tcCursor +*!* Local lcRaport +*!* Do Case +*!* Case gnTIP_LFACTURA=2 And gnTIP_LFACTURA_LINII=1 +*!* lcRaport="factav_farachit" +*!* Case gnTIP_LFACTURA=1 And gnTIP_LFACTURA_LINII=1 +*!* lcRaport="factav_cuchit" +*!* Case plAchitat And !plEmiteBon And gnTIP_LFACTURA_LINII=1 +*!* lcRaport="factav_cuchit" +*!* Case gnTIP_LFACTURA=2 And gnTIP_LFACTURA_LINII=2 +*!* lcRaport="factav_farachit_l" +*!* Case gnTIP_LFACTURA=1 And gnTIP_LFACTURA_LINII=2 +*!* lcRaport="factav_cuchit_l" +*!* Case plAchitat And !plEmiteBon And gnTIP_LFACTURA_LINII=2 +*!* lcRaport="factav_cuchit_l" +*!* Case gnTIP_LFACTURA_LINII=2 +*!* lcRaport="factav_farachit_l" +*!* Otherwise +*!* lcRaport="factav_farachit" +*!* Endcase +*!* *------------------- +*!* lnRaspuns=6 +*!* Do While lnRaspuns=6 +*!* *!* Do Case +*!* *!* Case gnTIP_LFACTURA = 2 +*!* *!* *!* Report Form factav1 To Printer Prompt Preview +*!* *!* modificare v 2.0.5 +*!* *!* Do LISTAREUSERREPORT With tcCursor, "FRX", lcRaport In PROCEDURI_RAPOARTE.PRG +*!* goExport.export2frx(tcCursor,lcRaport) +*!* *!* modificare v 2.0.5 ^ +*!* *!* Case gnTIP_LFACTURA = 1 +*!* *!* *!* Report Form factav2 To Printer Prompt Preview +*!* *!* Do LISTAREUSERREPORT With tcCursor, "FRX", "factav_cuchit" In PROCEDURI_RAPOARTE.PRG +*!* *!* Otherwise +*!* *!* *!* Report Form factav To Printer Prompt Preview +*!* *!* *!* Do LISTAREUSERREPORT With tcCursor, "FRX", "factav" In PROCEDURI_RAPOARTE.PRG +*!* * If plAchitat And !plEmiteBon +*!* * Do LISTAREUSERREPORT With tcCursor, "FRX", crsfactav In PROCEDURI_RAPOARTE.PRG +*!* *!* Else +*!* *!* Do LISTAREUSERREPORT With tcCursor, "FRX", "factav_farachit" In PROCEDURI_RAPOARTE.PRG +*!* * Endif +*!* *!* Endcase + +*!* lnRaspuns=amessagebox("Doriti sa mai listati factura?",4+32+256,"Confirmare repetare listare") +*!* Enddo + +*!* *!* modificare v 2.0.26 +*!* *!* exportInPdf(tcCursor,lcRaport) +*!* If glAtasamenteAuto +*!* exportInPdf(tcCursor,lcRaport) +*!* Endif +*!* *!* modificare v 2.0.26 ^ +*!* *!* modificare v 2.0.2^ + +*!* If plEmiteBon +*!* *!* modificare v 2.0.1 +*!* *!* listare_bon_fiscal(Ttod(ptDataOra),poDate.nract,pnTotCTva,poDate.nrchit,poDate.sumaachit,poDate.proc_tva) +*!* listare_bon_fiscal(ptDataOra,poDate.nract,pnTotCTva,poDate.nrchit,poDate.sumaachit,poDate.proc_tva) +*!* *!* modificare v 2.0.1 ^ +*!* Endif + +*!* Release poDate +*!* Endproc && listare_avans +*!* modificare v 2.0.28 ^ +*!* **********************sfarsit procedura listare_avans******************* +*===================================================== +*!* modificare v 2.0.28 +*!* *!* modificare v 2.0.2 +*!* Procedure exportInPdf +*!* Lparameters tcCursor, lcRaport, tlPreview, tcCursorSalvare + +*!* Private pnTip,pcFormat + +*!* If Used('crsListareAvansRepet') +*!* Use In crsListareAvansRepet +*!* Endif +*!* Create Cursor crsListareAvansRepet(nume_frx c(50),fisier w) + +*!* goExport.export2pdf(tcCursor,lcRaport,.F.,'crsListareAvansRepet') +*!* If Reccount('crsListareAvansRepet') > 0 +*!* Select crsListareAvansRepet +*!* Go Top +*!* lcNume_Frx = crsListareAvansRepet.nume_frx +*!* pnTip = 1 +*!* If Like([*A5],Upper(Alltrim(lcNume_Frx))) +*!* pcFormat = [A5] +*!* Else +*!* pcFormat = [A4] +*!* Endif + +*!* lcSql = [INSERT INTO ATASAMENTE_VANZARI(ID_UTIL,DOCUMENT,TIP,FORMAT,COD) VALUES (?gnIdUtil,?crsListareAvansRepet.fisier,?pnTip,?pcFormat,PACK_CONTAFIN.GET_COD);] +*!* lnSucces = goExecutor.oExecute(lcSql) +*!* If lnSucces < 0 +*!* amessagebox(goExecutor.cEroare,16,"Eroare") +*!* Endif +*!* Endif +*!* Use In crsListareAvansRepet +*!* Release pnTip,pcFormat +*!* Endproc +*!* *!* modificare v 2.0.2 ^ +*!* modificare v 2.0.28 ^ +****============================================================= +*------------------------------inceput procedura listare_FACTURA----------------------------------------- +* PROCEDURE listare_FACTURA( tnTipFact, tcRaport ) +* Data : 03/21/05, 16:03:19 +* autor : liana.macinic +* descriere: + +*!* toClient : id-ul de client +*!* tcCursor : Alias'ul cursorului +*!* tnTipfact : 1 - finala, 2 - spalare , 3 - restul, 4 - finala devize multiple +*!* tnProcDiscM,tnProcDiscN,tnProcDiscM,tnDiscountN,tnDiscountM,tnDiscountTvaM,tnDiscountTvaN +* +******************************************* +*!* modificare v 2.0.28 +*!* Procedure listare_FACTURA +*!* Parameters tnIdClient,tcCursor,tcSirNrord,tcNrInmat,tnTipfact,tnProcDiscM,tnProcDiscN,tnDiscountM,tnDiscountN,tnDiscountTvaM,tnDiscountTvaN,tcdenop,tnTipFactura + +*!* If Empty(tcdenop) +*!* Store 'MANOPERA' To tcdenop +*!* Endif + +*!* If Empty(tnProcDiscN) +*!* Store 0 To tnProcDiscN,tnDiscountN,tnDiscountTvaN +*!* Endif + +*!* If Empty(tnProcDiscM) +*!* Store 0 To tnProcDiscM,tnDiscountM,tnDiscountTvaM +*!* Endif + +*!* tnDiscountN = Abs(tnDiscountN) +*!* tnDiscountM = Abs(tnDiscountM) + +*!* Private poDate,pofirma,poClient,ptDataOra +*!* poDate = Createobject('oDateFacturaDevize',tnIdClient,tcSirNrord,tcNrInmat,Iif(tnTipfact=4,1,0),tnTipFactura) +*!* lcSql = [select 1 as tip,(case when tip_persoana = 1 then prefix||' '||denumire||' '||sufix else denumire end) as denumire,]+; +*!* [cod_fiscal,adresa,telefon,'' as telefon2,'' as telefon3,'' as fax,reg_comert,banca,cont_banca,'' as banca2,'' as cont_banca2,] + ; +*!* ['' as banca3,'' as cont_banca3,sysdate as dataora,tip_persoana,0 as capital_soc_var,] + ; +*!* [0 as capital_soc_sub from ] + gcS + [.vnom_parteneri where id_part = ?poDate.id_client ] + ; +*!* [union all ] + ; +*!* [select 2 as tip,denumire,cod_fiscal,'' as adresa,'' as telefon,'' as telefon2,'' as telefon3,'' as fax,reg_comert,'' as banca,'' as cont_banca,] + ; +*!* ['' as banca2,'' as cont_banca2,'' as banca3,'' as cont_banca3,] + ; +*!* [null as dataora,tip_persoana,0 as capital_soc_var,0 as capital_soc_sub from ] + gcS + [.nom_parteneri ] + ; +*!* [where sters = 0 and inactiv = 0 and id_part in ] + ; +*!* [(select id_partener from ] + gcS + [.utilizatori_rol_intern where sters = 0 and id_util = ?gnIdUtil)] + ; +*!* [union all ] + ; +*!* [select 3 as tip,antet as denumire,cod_fiscal,adresa,telefon,telefon2,telefon3,fax,reg_comert,banca1 as banca,] + ; +*!* [cont_banca1 as cont_banca,banca2,cont_banca2,banca3,cont_banca3,null as dataora,0 as tip_persoana,capital_soc_var,capital_soc_sub ] + ; +*!* [from syn_nom_firme where id_firma = ?gnIdFirma ] +*!* If Used('crsdatefacturare') +*!* Use In crsdatefacturare +*!* Endif +*!* lcCursor = [crsdatefacturare] +*!* lnSucces = goExecutor.oExecute(lcSql,lcCursor) +*!* If lnSucces<0 +*!* amessagebox(goExecutor.oPrelucrareEroare(),16,"Eroare") +*!* Return +*!* Endif +*!* Select crsdatefacturare +*!* Scan +*!* Do Case +*!* Case tip = 1 +*!* Scatter Name poClient Memo +*!* poDate.nume_client = poClient.denumire +*!* ptDataOra = poClient.dataora +*!* Case tip = 2 +*!* With poDate +*!* .nume_responsabil = denumire +*!* .BIresp = reg_comert +*!* .CNPresp = cod_fiscal +*!* Endwith +*!* Otherwise +*!* Scatter Name pofirma Memo +*!* Endcase +*!* Endscan +*!* Use In crsdatefacturare + +*!* ofrmdelegat=Createobject("frm_delegat_factura") +*!* ofrmdelegat.nidpartener = poDate.id_client +*!* ofrmdelegat.cclient = poDate.nume_client +*!* ofrmdelegat.cnrinmat_exp = poDate.nrinmat_del +*!* ofrmdelegat.Show(1) +*!* Release ofrmdelegat + +*!* Private pnSumaMat,pnSumaMan,pnTvaMat,pnTvaMan,pnDiscMan,pnDiscMat,pnTvaDiscMan,pnTvaDiscMat,pnAvans,pnTvaAvans +*!* Store 0 To pnSumaMat,pnSumaMan,pnTvaMat,pnTvaMan,pnDiscMan,pnDiscMat,pnTvaDiscMan,pnTvaDiscMat,pnAvans,pnTvaAvans + +*!* Select &tcCursor +*!* Sum suma For Alltrim(scd) = '4111' And Alltrim(scc) = '707' And Left(Alltrim(explicatia),3) = "MAT" To pnSumaMat +*!* Sum suma For Alltrim(scd) = '4111' And Alltrim(scc) = '4427' And Left(Alltrim(explicatia),7) = "TVA MAT" To pnTvaMat +*!* *!* Sum suma For Alltrim(scd) = '411' And Alltrim(scc) = '707' And Left(Alltrim(explicatia),12) = "DISCOUNT MAT" To pnDiscMat +*!* Sum suma For Alltrim(scd) = '4111' And Alltrim(scc) = '4427' And Left(Alltrim(explicatia),12) = "DISCOUNT MAT" To pnTvaDiscMat + +*!* Sum suma For Alltrim(scd) = '4111' And Alltrim(scc) = '704' And Left(Alltrim(explicatia),3) = "MAN" To pnSumaMan +*!* Sum suma For Alltrim(scd) = '4111' And Alltrim(scc) = '4427' And Left(Alltrim(explicatia),7) = "TVA MAN" To pnTvaMan +*!* *!* Sum suma For Alltrim(scd) = '411' And Alltrim(scc) = '704' And Left(Alltrim(explicatia),12) = "DISCOUNT MAN" To pnDiscMan +*!* Sum suma For Alltrim(scd) = '4111' And Alltrim(scc) = '4427' And Left(Alltrim(explicatia),12) = "DISCOUNT MAN" To pnTvaDiscMan + +*!* Select &tcCursor +*!* *!* Locate For Alltrim(explicatia ) = 'STORNARE AVANS' +*!* *!* If Found() +*!* *!* pnAvans = (-1) * Abs(&tcCursor..suma) +*!* *!* Endif +*!* Calculate Sum(suma) For Alltrim(explicatia)='STORNARE AVANS' To pnAvans +*!* Calculate Sum(suma) For Alltrim(explicatia)='STORNARE AVANS' And Alltrim(scc)<>'4427' To pnAvansFTva +*!* Calculate Sum(suma) For Alltrim(explicatia)='STORNARE AVANS' And Alltrim(scc)='4427' To pnAvansTva +*!* pnAvans=(-1) * Abs(Round(pnAvans,gnPa)) +*!* pnAvansTva=(-1) * Abs(Round(pnAvansTva,gnPa)) +*!* pnAvansFTva=(-1) * Abs(Round(pnAvansFTva,gnPa)) + +*!* Private plAchitat,plEmiteBon +*!* Store .T. To plAchitat,plEmiteBon + +*!* Select &tcCursor +*!* Locate For Alltrim(scd) = '4111' +*!* If Found() +*!* poDate.nract = &tcCursor..nract +*!* poDate.serie_act = &tcCursor..serie_act +*!* poDate.dataact = &tcCursor..dataact +*!* poDate.proc_tva = &tcCursor..proc_tva*100-100 +*!* poDate.datascad = &tcCursor..datascad +*!* Endif + +*!* Select &tcCursor +*!* Locate For Alltrim(scd) = '5311' +*!* Do Case +*!* Case Found() And pnTipIncasare=2 +*!* Store .F. To plAchitat +*!* Store .T. To plEmiteBon +*!* poDate.nrchit = &tcCursor..nract +*!* poDate.sumaachit = &tcCursor..suma +*!* Case Found() And pnTipIncasare=3 +*!* Store .F. To plEmiteBon +*!* poDate.nrchit = &tcCursor..nract +*!* poDate.datachit = &tcCursor..dataact +*!* poDate.sumaachit = &tcCursor..suma +*!* poDate.sumavorbe = SUMA_IN_VORBE(Round(poDate.sumaachit,gnPc)) +*!* Otherwise +*!* Store .F. To plEmiteBon +*!* Store .F. To plAchitat +*!* Endcase + +*!* *------------------- +*!* *!* modificare 07.04 +*!* *!* pnDiscMan = tnDiscountM +*!* *!* pnDiscMat = tnDiscountN +*!* pnDiscMan = Sign(pnSumaMan) * tnDiscountM +*!* tnDiscountM = Sign(pnSumaMan) * tnDiscountM +*!* pnTvaDiscMan = (-1) * pnTvaDiscMan + +*!* pnDiscMat = Sign(pnSumaMat) * tnDiscountN +*!* tnDiscountN = Sign(pnSumaMat) * tnDiscountN +*!* pnTvaDiscMat = (-1) * pnTvaDiscMat +*!* *!* modificare ^ + + +*!* *!* modificare v 2.0.2 +*!* Local lcRaport +*!* Do Case +*!* Case gnTIP_LFACTURA=2 And gnTIP_LFACTURA_LINII=1 +*!* lcRaport="fact_farachit" +*!* Case gnTIP_LFACTURA=1 And gnTIP_LFACTURA_LINII=1 +*!* lcRaport="fact_cuchit" +*!* Case plAchitat And !plEmiteBon And gnTIP_LFACTURA_LINII=1 +*!* lcRaport="fact_cuchit" +*!* Case gnTIP_LFACTURA=2 And gnTIP_LFACTURA_LINII=2 +*!* lcRaport="fact_farachit_l" +*!* Case gnTIP_LFACTURA=1 And gnTIP_LFACTURA_LINII=2 +*!* lcRaport="fact_cuchit_l" +*!* Case plAchitat And !plEmiteBon And gnTIP_LFACTURA_LINII=2 +*!* lcRaport="fact_cuchit_l" +*!* Case gnTIP_LFACTURA_LINII=2 +*!* lcRaport="fact_farachit_l" +*!* Otherwise +*!* lcRaport="fact_farachit" +*!* Endcase +*!* lnRaspuns=6 +*!* Do While lnRaspuns=6 +*!* Select &tcCursor +*!* *!* Do Case +*!* *!* Case gnTIP_LFACTURA = 2 +*!* *!* *!* Report Form fact_farachit To Printer Prompt Preview +*!* *!* Do LISTAREUSERREPORT With tcCursor, "FRX", "fact_farachit" In PROCEDURI_RAPOARTE.PRG +*!* *!* Case gnTIP_LFACTURA = 1 +*!* *!* *!* Report Form fact_cuchit To Printer Prompt Preview +*!* *!* Do LISTAREUSERREPORT With tcCursor, "FRX", "fact_cuchit" In PROCEDURI_RAPOARTE.PRG +*!* *!* Otherwise +*!* *!* Report Form fact_farachit To Printer Prompt Preview +*!* *!* modificare v 2.0.5 +*!* *!* Do LISTAREUSERREPORT With tcCursor, "FRX", lcRaport In PROCEDURI_RAPOARTE.PRG +*!* goExport.export2frx(tcCursor,lcRaport) +*!* *!* modificare v 2.0.5 +*!* *!* If plAchitat And !plEmiteBon +*!* *!* Do LISTAREUSERREPORT With tcCursor, "FRX", fact_cuchit In PROCEDURI_RAPOARTE.PRG +*!* *!* Else +*!* *!* Do LISTAREUSERREPORT With tcCursor, "FRX", fact_farachit In PROCEDURI_RAPOARTE.PRG +*!* *!* Endif +*!* *!* Endcase + +*!* lnRaspuns=amessagebox("Doriti sa mai listati factura?",4+32+256,"Confirmare repetare listare") +*!* Enddo + +*!* *!* modificare v 2.0.26 +*!* *!* exportInPdf(tcCursor,lcRaport) +*!* If glAtasamenteAuto +*!* exportInPdf(tcCursor,lcRaport) +*!* Endif +*!* *!* modificare v 2.0.26 ^ +*!* *!* modificare v 2.0.2 ^ + + +*!* If plEmiteBon +*!* *!* modificare v 2.0.21 +*!* If glAutoBonDet +*!* listare_bon_fiscal_det(ptDataOra,poDate.nrchit,poDate.sumaachit,poDate.proc_tva,tnProcDiscN,pnSumaMan+pnTvaMan,tnProcDiscM) +*!* Else +*!* *!* modificare v 2.0.21 ^ +*!* lnTotCTva=pnSumaMat+pnSumaMan-pnDiscMat-pnDiscMan+Round(pnAvansFTva,gnPc)+; +*!* pnTvaMat+pnTvaMan+pnTvaDiscMat+pnTvaDiscMan+Round(pnAvansTva,gnPc) +*!* *!* modificare v 2.0.1 +*!* *!* listare_bon_fiscal(Ttod(ptDataOra),poDate.nract,lnTotCTva,poDate.nrchit,poDate.sumaachit,poDate.proc_tva) +*!* listare_bon_fiscal(ptDataOra,poDate.nract,lnTotCTva,poDate.nrchit,poDate.sumaachit,poDate.proc_tva) +*!* *!* modificare v 2.0.1 ^ +*!* *!* modificare v 2.0.21 +*!* Endif +*!* *!* modificare v 2.0.21 ^ +*!* Endif + +*!* Release poDate +*!* Endproc && listare_factura +********************************************************************************************************* +Procedure creare_bon_fiscal + +Endproc && creare_bon_fiscal +********************************************************************************************************* +*!* modificare v 2.0.28 +*!* *!* modificare v 2.0.21 +*!* Procedure listare_bon_fiscal_det +*!* Lparameters ttDataOra,tnNrBon,tnSumaAchit,tnProcentTva,tnProcDiscMat,tnSumaManopera,tnProcDiscMan +*!* Local lcCursor +*!* lcCursor = [crsDateBon] +*!* Create Cursor (lcCursor) (denumire c(100), UM c(10), CANT N(10,4), Pret N(18,4), DEPARTAMENT N(2), PROC_TVAV N(5,2),PROCENT N(5,2),DISCOUNT N(2) DEFAULT 0) +*!* *!* modificare v 2.0.26 +*!* *!* Insert Into (lcCursor) (denumire,um,cant,Pret,departament,proc_tvav) ; +*!* *!* Select denumire, Nvl(um,'BUC') As um, cant, Pret, 1, 1+(tnProcentTva/100) From crsBonDetaliat +*!* If Used('crsBonDetaliat') +*!* Insert Into (lcCursor) (denumire,um,cant,Pret,departament,proc_tvav) ; +*!* Select denumire, Nvl(um,'BUC') As um, cant, Pret, 1, 1+(tnProcentTva/100) From crsBonDetaliat +*!* Endif +*!* *!* modificare v 2.0.26 ^ +*!* Select (lcCursor) +*!* If tnProcDiscMat <> 0 +*!* Append Blank +*!* Replace denumire With 'DISCOUNT MATERIALE',um With 'BUC',cant With 1,procent With tnProcDiscMat,; +*!* departament With 1,proc_tvav With 1+(tnProcentTva/100),discount With 2 +*!* Endif +*!* If tnSumaManopera <> 0 +*!* Append Blank +*!* Replace denumire With 'MANOPERA SERVICE',um WITH 'BUC',cant With 1,Pret With tnSumaManopera,; +*!* departament With 1,proc_tvav With 1+(tnProcentTva/100) +*!* Endif +*!* If tnProcDiscMan <> 0 +*!* Append Blank +*!* Replace denumire With 'DISCOUNT MANOPERA',um With 'BUC',cant With 1,procent With tnProcDiscMan,; +*!* departament With 1,proc_tvav With 1+(tnProcentTva/100),discount With 1 +*!* Endif +*!* loHash = GetHash() +*!* loHash.SetValue("cTip", "1;") +*!* loHash.SetValue("nNumarBon", tnNrBon) +*!* loHash.SetValue("nValoareNumerar", tnSumaAchit) +*!* loHash.SetValue("nValoareTotal", tnSumaAchit) +*!* loHash.SetValue("cCursor",lcCursor) +*!* loHash.SetValue("tDataOra",ttDataOra) +*!* goControllerEcr.imprima(loHash) +*!* Use In (lcCursor) +*!* Release loHash +*!* Endproc && listare_bon_fiscal_det +*!* *!* modificare v 2.0.21 ^ +*!* modificare v 2.0.28 ^ +********************************************************************************************************* +*!* modificare v 2.0.28 +*!* Procedure listare_bon_fiscal +*!* Lparameters ttDataOra,tnNrFact,tnTotCTva,tnNrBon,tnSumaAchit,tnProcentTva +*!* *!* modificare v 2.0.1 +*!* *!* *!* lcSir=[1;Fact.]+Alltrim(Str(tnNrFact))+[;1;1;1;]+Alltrim(Str(tnTotCTva*100))+[;1000;0]+CRLF +*!* *!* lcSir=[1;Fact.]+Alltrim(Str(tnNrFact))+[;1;1;1;]+Alltrim(Str(tnSumaAchit*100))+[;1000;0\n]+CRLF +*!* *!* lcSir=lcSir+[5;]+Alltrim(Str(tnSumaAchit*100))+[;0;0;0\n]+Chr(13)+Chr(10)+Chr(13)+Chr(10) +*!* *!* imprimare_bon_fiscal(lcSir,tdDataOra,tnNrBon) +*!* Local lcCursor +*!* lcCursor = [crsDateBon] +*!* Create Cursor (lcCursor) (denumire c(100), UM c(10), CANT N(10,4), Pret N(18,4), DEPARTAMENT N(2), PROC_TVAV N(5,2)) +*!* Append Blank +*!* Replace denumire With [Fact.]+Alltrim(Str(tnNrFact)),CANT With 1,Pret With tnSumaAchit,PROC_TVAV With 1+(tnProcentTva/100),DEPARTAMENT With 1 + +*!* loHash = GetHash() +*!* loHash.SetValue("cTip", "1;") +*!* loHash.SetValue("nNumarBon", tnNrBon) +*!* loHash.SetValue("nValoareNumerar", tnSumaAchit) +*!* loHash.SetValue("nValoareTotal", tnSumaAchit) +*!* loHash.SetValue("cCursor",lcCursor) +*!* loHash.SetValue("tDataOra",ttDataOra) +*!* goControllerEcr.imprima(loHash) +*!* Use In (lcCursor) +*!* Release loHash +*!* *!* modificare v 2.0.1 ^ +*!* Endproc && listare_bon_fiscal +*!* modificare v 2.0.28 ^ +********************************************************************************************************* +Procedure facturi_emise_pe_sectii + Private pcAnLuna1,pcAnLuna2,pnNrLuni1,pnNrLuni2 + Local lcCursor + lnRepetare = 1 + pnButon = 1 + Do While lnRepetare = 1 And pnButon = 1 + pcAnLuna1 = Padl(Alltrim(Str(gnLuna)),2,'0')+Alltrim(Str(gnAn)) + pcAnLuna2 = pcAnLuna1 + ofrminterval = Createobject('frm_interval_luni') + ofrminterval.lb_titlu_alb_b121.Caption = [DATA FACTURII] + ofrminterval.Show(1) + Release ofrminterval + If Val(Substr(pcAnLuna2,1,2))+Val(Substr(pcAnLuna2,3))*12 <= gnAn*12 + gnLuna + lnRepetare = 0 + Else + amessagebox("Luna de sfarsit nu poate fi mai mare decat cea curenta!",48,"Atentie") + Endif + Enddo + + If pnButon = 1 + lcCursor = [crsfacturisectii] + loCauta = caut_sectie(1,.F.,.T.) + If pnButon = 1 + If Used(lcCursor) + Use In (lcCursor) + Endif + _Screen.MousePointer=11 + Private pcDataOra,pnIdSectie + pnIdSectie = 0 + pnNrLuni1=Val(Substr(pcAnLuna1,1,2))+Val(Substr(pcAnLuna1,3))*12 + pnNrLuni2=Val(Substr(pcAnLuna2,1,2))+Val(Substr(pcAnLuna2,3))*12 + pcDataOra = get_ora(2) + If loCauta.id_sectie <> 0 + pnIdSectie = loCauta.id_sectie + lcFiltru = [where a.id_sectie = ?pnIdSectie] + Else + lcFiltru = [] + Endif + lcSql = [select a.nract,a.dataact,a.id_lucrare,a.id_partd,a.id_sectie,b.nrord,c.denumire,d.sectie,] + ; + [NVL(e.valoarea, 0) as valoarea,NVL(e.valoarev, 0) as valoarev,decode(NVL(e.valoarea, 1),0,0,(NVL(e.valoarev, 0) - NVL(e.valoarea, 0)) * 100 / NVL(e.valoarea, 1)) as proc_adaos,] + ; + [NVL(f.ore, 0) as ore,NVL(f.ore_spec, 0) as ore_spec,NVL(f.valoare_man, 0) as valoare_man,NVL(f.valoare_man_spec, 0) as valoare_man_spec ] + ; + [from (select distinct nract, dataact, id_lucrare, id_partd, id_sectie from ] + gcS + [.act where an * 12 + luna ] + ; + [between ?pnNrLuni1 and ?pnNrLuni2 and sters = 0 and id_set in (31011, 31012) and scd like '41%' and scc not like '44%') a ] + ; + [left join ] + gcS + [.vnom_lucrari b on a.id_lucrare = b.id_lucrare ] + ; + [left join ] + gcS + [.nom_parteneri c on a.id_partd = c.id_part ] + ; + [left join ] + gcS + [.nom_sectii d on a.id_sectie = d.id_sectie ] + ; + [left join (select sum(round(pret * cante, 2)) as valoarea, ] + ; + [sum(round(pretv * cante, 2)) as valoarev, id_lucrare, id_sectie ] + ; + [from ] + gcS + [.rul where sters = 0 group by id_lucrare, id_sectie) e ] + ; + [on a.id_lucrare = e.id_lucrare and a.id_sectie = e.id_sectie ] + ; + [left join (select sum(NVL2(c1.id_norma, 0, b1.timpn)) as ore,] + ; + [sum(NVL2(c1.id_norma, b1.timpn, 0)) as ore_spec,] + ; + [sum(NVL2(c1.id_norma, 0, round(b1.timpn * b1.pret, 2))) as valoare_man,] + ; + [sum(NVL2(c1.id_norma, round(b1.timpn * b1.pret, 2), 0)) as valoare_man_spec,] + ; + [a1.id_lucrare,b1.id_sectie from ] + gcS + [.dev_ordl a1 ] + ; + [left join ] + gcS + [.dev_oper b1 on a1.id_ordl = b1.id_ordl ] + ; + [left join (select pack_sesiune.getoptiunefirma(USER,'ID_NORME_SPEC') as id_norma from ] + gcS + [.dev_oper where rownum = 1) c1 ] + ; + [on b1.id_norme = c1.id_norma where a1.sters = 0 and b1.sters = 0 ] + ; + [group by a1.id_lucrare, b1.id_sectie) f on a.id_lucrare = f.id_lucrare ] + ; + [and a.id_sectie = f.id_sectie ] + ; + lcFiltru + [ order by d.sectie, a.dataact, a.nract] + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + _Screen.MousePointer=0 + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,'Eroare') + Else + If Reccount(lcCursor)=0 + amessagebox("Nu exista inregistrari pentru vizualizare!",0+64,"Info raport facturi emise pe sectii") + Else + Private pcPerioada + pnButon=1 + Do While pnButon=1 + pnOptiune=1 + ofrmaleg=Createobject('frm_aleg_vizualizare') + ofrmaleg.Show(1) + Do Case + Case pnButon<>1 + Loop + Case pnOptiune=1 + Private pcTitlu + Store '' To pcTitlu + pcTitlu = 'LISTA FACTURILOR FINALE PE SECII' + pcPerioada = Iif(pnNrLuni1==pnNrLuni2,; + 'Luna '+Substr(pcAnLuna1,1,2)+'/'+Substr(pcAnLuna1,3),; + 'Perioada '+Substr(pcAnLuna1,1,2)+'/'+Substr(pcAnLuna1,3)+' - '+Substr(pcAnLuna2,1,2)+'/'+Substr(pcAnLuna2,3)) + Select (lcCursor) + Keyboard '{CTRL+F10}' + Report Form rap_facturi_sectii To Printer Prompt Preview + Case pnOptiune=2 + lcSirColoane=[sectie,nract,TTOD(dataact),nrord,denumire,valoarea,valoarev,proc_adaos,ore,ore_spec,valoare_man,valoare_man_spec] + lcSirNume=[Sectie,Nr_factura,Data_factura,Nr_comanda,Nume,Pret_achizitie,Pret_vanzare,Procent_adaos,Ore_manopera,Ore_manopera_speciala,] + ; + [Valoare_manopera,Valoare_manopera_speciala] + exportare(lcCursor,lcSirColoane,lcSirNume) + Endcase + Release ofrmaleg + Enddo + Endif + If Used(lcCursor) + Use In (lcCursor) + Endif + Endif + Endif + Endif + +Endproc && facturi_emise_pe_sectii +Procedure manopera_sectii_anfabr + Private pcAnLuna1,pcAnLuna2,pnLunaI,pnAnI,pnLunaF,pnAnF + Store 0 To pnLunaI,pnAnI,pnLunaF,pnAnF + Local lcCursor + lnRepetare = 1 + pnButon = 1 + Do While lnRepetare = 1 And pnButon = 1 + pcAnLuna1 = Padl(Alltrim(Str(gnLuna)),2,'0')+Alltrim(Str(gnAn)) + pcAnLuna2 = pcAnLuna1 + ofrminterval = Createobject('frm_interval_luni') + ofrminterval.lb_titlu_alb_b121.Caption = [LUNA INCHIDERE COMANDA] + ofrminterval.Show(1) + Release ofrminterval + If Val(Substr(pcAnLuna2,1,2))+Val(Substr(pcAnLuna2,3))*12 <= gnAn*12 + gnLuna + lnRepetare = 0 + Else + amessagebox("Luna de sfarsit nu poate fi mai mare decat cea curenta!",48,"Atentie") + Endif + Enddo + + If pnButon = 1 + lcCursor = [crsmanopsecmas] + loCauta = caut_sectie(1,.F.,.T.) + If pnButon = 1 + If Used(lcCursor) + Use In (lcCursor) + Endif + _Screen.MousePointer=11 + Private pcDataOra,pnIdSectie + pnIdSectie = 0 + pnLunaI = Val(Substr(pcAnLuna1,1,2)) + pnAnI = Val(Substr(pcAnLuna1,3)) + pnLunaF = Val(Substr(pcAnLuna2,1,2)) + pnAnF = Val(Substr(pcAnLuna2,3)) + + lcSql = [begin pack_auto.set_perioada_raport(?pnLunaI,?pnAnI,?pnLunaF,?pnAnF); end;] + lnSucces = goExecutor.oExecute(lcSql) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,'Eroare') + Endif + + pcDataOra = get_ora(2) + If loCauta.id_sectie <> 0 + pnIdSectie = loCauta.id_sectie + lcFiltru = [where id_sectie = ?pnIdSectie] + Else + lcFiltru = [] + Endif + lcSql = [select datai, nrord, tip_comanda, sectie, anfabricatie, denumire, total ] + ; + [from ] + gcS + [.auto_listare_man_anfabr ] + ; + lcFiltru + [ order by sectie,tip_comanda,anfabricatie, datai, nrord] + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + _Screen.MousePointer=0 + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,'Eroare') + Else + If Reccount(lcCursor)=0 + amessagebox("Nu exista inregistrari pentru vizualizare!",0+64,"Info raport manopera comenzii inchise pe sectii / an fabricatie") + Else + Private pcPerioada + pnButon=1 + Do While pnButon=1 + pnOptiune=1 + ofrmaleg=Createobject('frm_aleg_vizualizare') + ofrmaleg.Show(1) + Do Case + Case pnButon<>1 + Loop + Case pnOptiune=1 + Private pcTitlu + Store '' To pcTitlu + pcTitlu = 'MANOPER COMENZI NCHISE PE SECII / AN FABRICAIE' + pcPerioada = Iif(pnLunaI+pnAnI*12==pnLunaF+pnAnF*12,; + 'Luna '+Substr(pcAnLuna1,1,2)+'/'+Substr(pcAnLuna1,3),; + 'Perioada '+Substr(pcAnLuna1,1,2)+'/'+Substr(pcAnLuna1,3)+' - '+Substr(pcAnLuna2,1,2)+'/'+Substr(pcAnLuna2,3)) + Select (lcCursor) + Keyboard '{CTRL+F10}' + Report Form rap_manopera_anfabricatie To Printer Prompt Preview + Case pnOptiune=2 + lcSirColoane=[sectie,tip_comanda,anfabricatie,TTOD(datai),nrord,denumire,total] + lcSirNume=[Sectie,Tip_comanda,An_fabricatie_masina,Data_comanda,Comanda,Client,Total] + exportare(lcCursor,lcSirColoane,lcSirNume) + Endcase + Release ofrmaleg + Enddo + Endif + If Used(lcCursor) + Use In (lcCursor) + Endif + Endif + Endif + Endif + +Endproc && manopera_sectii_anfabr +********************************************************************************************************* +Procedure manopera_sectii_anfabr_centralizator + Private pcAnLuna1,pcAnLuna2,pnLunaI,pnAnI,pnLunaF,pnAnF + Store 0 To pnLunaI,pnAnI,pnLunaF,pnAnF + Local lcCursor + lnRepetare = 1 + pnButon = 1 + Do While lnRepetare = 1 And pnButon = 1 + pcAnLuna1 = Padl(Alltrim(Str(gnLuna)),2,'0')+Alltrim(Str(gnAn)) + pcAnLuna2 = pcAnLuna1 + ofrminterval = Createobject('frm_interval_luni') + ofrminterval.lb_titlu_alb_b121.Caption = [LUNA INCHIDERE COMANDA] + ofrminterval.Show(1) + Release ofrminterval + If Val(Substr(pcAnLuna2,1,2))+Val(Substr(pcAnLuna2,3))*12 <= gnAn*12 + gnLuna + lnRepetare = 0 + Else + amessagebox("Luna de sfarsit nu poate fi mai mare decat cea curenta!",48,"Atentie") + Endif + Enddo + + If pnButon = 1 + lcCursor = [crsmanopsecmas] + loCauta = caut_sectie(1,.F.,.T.) + If pnButon = 1 + If Used(lcCursor) + Use In (lcCursor) + Endif + _Screen.MousePointer=11 + Private pcDataOra,pnIdSectie + pnIdSectie = 0 + pnLunaI = Val(Substr(pcAnLuna1,1,2)) + pnAnI = Val(Substr(pcAnLuna1,3)) + pnLunaF = Val(Substr(pcAnLuna2,1,2)) + pnAnF = Val(Substr(pcAnLuna2,3)) + + lcSql = [begin pack_auto.set_perioada_raport(?pnLunaI,?pnAnI,?pnLunaF,?pnAnF); end;] + lnSucces = goExecutor.oExecute(lcSql) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,'Eroare') + Endif + + pcDataOra = get_ora(2) + If loCauta.id_sectie <> 0 + pnIdSectie = loCauta.id_sectie + lcFiltru = [where d.id_sectie = ?pnIdSectie] + Else + lcFiltru = [] + Endif + lcSql = [select c.denumire as tip_comanda, e.sectie, NVL(f.anfabricatie,0) as anfabricatie,] + ; + [sum(round(d.timpn * d.pret, ?gnPc)) as total,grouping_id(e.sectie, c.denumire, NVL(f.anfabricatie, 0)) as gid ] + ; + [from ] + gcS + [.auto_analiza_salarii a ] + ; + [left join ] + gcS + [.dev_ordl b on a.id_ordl = b.id_ordl ] + ; + [left join ] + gcS + [.dev_tip_deviz c on a.id_tip = c.id_tip ] + ; + [left join ] + gcS + [.dev_oper d on b.id_ordl = d.id_ordl and d.sters = 0 ] + ; + [left join ] + gcS + [.nom_sectii e on d.id_sectie = e.id_sectie ] + ; + [left join ] + gcS + [.dev_masiniclienti f on b.id_masiniclient = f.id_masiniclient ] + ; + lcFiltru + [ group by rollup(e.sectie, c.denumire, NVL(f.anfabricatie,0)) ] + ; + [ order by e.sectie, 4, c.denumire, NVL(f.anfabricatie,0)] + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + _Screen.MousePointer=0 + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,'Eroare') + Else + If Reccount(lcCursor)=0 + amessagebox("Nu exista inregistrari pentru vizualizare!",0+64,"Info raport manopera comenzii inchise pe sectii / an fabricatie") + Else + Private pcPerioada + pnButon=1 + Do While pnButon=1 + pnOptiune=1 + ofrmaleg=Createobject('frm_aleg_vizualizare') + ofrmaleg.Show(1) + Do Case + Case pnButon<>1 + Loop + Case pnOptiune=1 + Private pcTitlu + Store '' To pcTitlu + pcTitlu = 'CENTRALIZATOR MANOPER COMENZI NCHISE PE SECII / AN FABRICAIE' + pcPerioada = Iif(pnLunaI+pnAnI*12==pnLunaF+pnAnF*12,; + 'Luna '+Substr(pcAnLuna1,1,2)+'/'+Substr(pcAnLuna1,3),; + 'Perioada '+Substr(pcAnLuna1,1,2)+'/'+Substr(pcAnLuna1,3)+' - '+Substr(pcAnLuna2,1,2)+'/'+Substr(pcAnLuna2,3)) + Select (lcCursor) + Keyboard '{CTRL+F10}' + Report Form rap_manopera_anfabricatie_c To Printer Prompt Preview + Case pnOptiune=2 + lcSirColoane=[sectie,tip_comanda,anfabricatie,total] + lcSirNume=[Sectie,Tip_comanda,An_fabricatie_masina,Total] + exportare(lcCursor,lcSirColoane,lcSirNume) + Endcase + Release ofrmaleg + Enddo + Endif + If Used(lcCursor) + Use In (lcCursor) + Endif + Endif + Endif + Endif + +Endproc && manopera_sectii_anfabr_centralizator +********************************************************************************************************* +Procedure manopera_sectii + Private pcAnLuna1,pcAnLuna2,pnLunaI,pnAnI,pnLunaF,pnAnF + Store 0 To pnLunaI,pnAnI,pnLunaF,pnAnF + Local lcCursor + lnRepetare = 1 + pnButon = 1 + Do While lnRepetare = 1 And pnButon = 1 + pcAnLuna1 = Padl(Alltrim(Str(gnLuna)),2,'0')+Alltrim(Str(gnAn)) + pcAnLuna2 = pcAnLuna1 + ofrminterval = Createobject('frm_interval_luni') + ofrminterval.lb_titlu_alb_b121.Caption = [LUNA INCHIDERE COMANDA] + ofrminterval.Show(1) + Release ofrminterval + If Val(Substr(pcAnLuna2,1,2))+Val(Substr(pcAnLuna2,3))*12 <= gnAn*12 + gnLuna + lnRepetare = 0 + Else + amessagebox("Luna de sfarsit nu poate fi mai mare decat cea curenta!",48,"Atentie") + Endif + Enddo + + If pnButon = 1 + lcCursor = [crsmanopsecmas] + *!* loCauta = caut_sectie(1,.F.,.T.) + If pnButon = 1 + If Used(lcCursor) + Use In (lcCursor) + Endif + _Screen.MousePointer=11 + Private pcDataOra,pnIdSectie + pnIdSectie = 0 + pnLunaI = Val(Substr(pcAnLuna1,1,2)) + pnAnI = Val(Substr(pcAnLuna1,3)) + pnLunaF = Val(Substr(pcAnLuna2,1,2)) + pnAnF = Val(Substr(pcAnLuna2,3)) + + lcSql = [begin pack_auto.set_perioada_raport(?pnLunaI,?pnAnI,?pnLunaF,?pnAnF); end;] + lnSucces = goExecutor.oExecute(lcSql) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,'Eroare') + Endif + + pcDataOra = get_ora(2) + *!* If loCauta.id_sectie <> 0 + *!* pnIdSectie = loCauta.id_sectie + *!* lcFiltru = [where id_sectie = ?pnIdSectie] + *!* Else + lcFiltru = [] + *!* Endif + lcSql = [select id_sectie, sectie, total_ore, total_valoare ] + ; + [from ] + gcS + [.auto_listare_man_sectii ] + ; + lcFiltru + [ order by sectie] + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + _Screen.MousePointer=0 + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,'Eroare') + Else + If Reccount(lcCursor)=0 + amessagebox("Nu exista inregistrari pentru vizualizare!",0+64,"Info raport manopera comenzii inchise pe sectii") + Else + Private pcPerioada + pnButon=1 + Do While pnButon=1 + pnOptiune=1 + ofrmaleg=Createobject('frm_aleg_vizualizare') + ofrmaleg.Show(1) + Do Case + Case pnButon<>1 + Loop + Case pnOptiune=1 + Private pcTitlu + Store '' To pcTitlu + pcTitlu = 'MANOPER COMENZI NCHISE PE SECII' + pcPerioada = Iif(pnLunaI+pnAnI*12==pnLunaF+pnAnF*12,; + 'Luna '+Substr(pcAnLuna1,1,2)+'/'+Substr(pcAnLuna1,3),; + 'Perioada '+Substr(pcAnLuna1,1,2)+'/'+Substr(pcAnLuna1,3)+' - '+Substr(pcAnLuna2,1,2)+'/'+Substr(pcAnLuna2,3)) + Select (lcCursor) + Keyboard '{CTRL+F10}' + Report Form rap_manopera_sectii To Printer Prompt Preview + Case pnOptiune=2 + lcSirColoane=[sectie,total_ore,total_valoare] + lcSirNume=[Sectie,Total_ore,Total_valoare] + exportare(lcCursor,lcSirColoane,lcSirNume) + Endcase + Release ofrmaleg + Enddo + Endif + If Used(lcCursor) + Use In (lcCursor) + Endif + Endif + Endif + Endif + +Endproc && manopera_sectii +********************************************************************************************************* +Procedure devize_pe_marci_de_masini + Private pcAnLuna1,pcAnLuna2,pnNrLuni1,pnNrLuni2 + lcCursorRaport = [crsdevize] + pnButon = 1 + pcAnLuna1 = Padl(Alltrim(Str(gnLuna)),2,'0')+Alltrim(Str(gnAn)) + pcAnLuna2 = pcAnLuna1 + ofrminterval = Createobject('frm_interval_luni') + ofrminterval.lb_titlu_alb_b121.Caption = [DATA DESCHIDERII COMENZII] + ofrminterval.Show(1) + Release ofrminterval + + If pnButon = 1 + loCauta = caut_marci_masini(1,.F.,.T.) + If pnButon = 1 + If Used(lcCursorRaport) + Use In (lcCursorRaport) + Endif + _Screen.MousePointer=11 + Private pcDataOra,pnIdMarca + pnIdSectie = 0 + pnNrLuni1=Val(Substr(pcAnLuna1,1,2))+Val(Substr(pcAnLuna1,3))*12 + pnNrLuni2=Val(Substr(pcAnLuna2,1,2))+Val(Substr(pcAnLuna2,3))*12 + pcDataOra = get_ora(2) + lcFiltru = [where NVL(a.validat,0) = 1 and extract(year from a.datai) * 12 + extract(month from a.datai) between ] + ; + [?pnNrLuni1 and ?pnNrLuni2] + If loCauta.id_marca <> 0 + pnIdMarca = loCauta.id_marca + lcFiltru = lcFiltru + [ and e.id_marca = ?pnIdMarca] + Endif + *!* modificare v 2.0.37 : am sters c.kmint + lcSql = [select a.id_ordl,a.datai,a.nrord,a.kmint,] + ; + [nvl(b.facturat, 0) as facturat,c.nrinmat,d.id_marca,d.masina,e.marca,f.denumire,] + ; + [g.ore,g.valoare_man from ] + gcS + [.auto_comenzi_validate a ] + ; + [left join ] + gcS + [.auto_vordl_facturi b on a.id_lucrare = b.id_lucrare ] + ; + [left join ] + gcS + [.dev_masiniclienti c on a.id_masiniclient = c.id_masiniclient ] + ; + [left join ] + gcS + [.dev_nom_masini d on c.id_masina = d.id_masina ] + ; + [left join ] + gcS + [.dev_nom_marci e on d.id_marca = e.id_marca ] + ; + [left join ] + gcS + [.nom_parteneri f on c.id_partener = f.id_part ] + ; + [left join (select sum(timpn) as ore, sum(round(timpn * pret, 2)) as valoare_man,id_ordl ] + ; + [from ] + gcS + [.dev_oper where sters = 0 group by id_ordl) g on a.id_ordl = g.id_ordl ] + ; + lcFiltru + [ order by e.marca,a.datai,d.masina] + lnSucces = goExecutor.oExecute(lcSql,lcCursorRaport) + _Screen.MousePointer=0 + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,'Eroare') + Else + If Reccount(lcCursorRaport)=0 + amessagebox("Nu exista inregistrari pentru vizualizare!",0+64,"Info raport devize pe marci") + Else + Private pcPerioada + pnButon=1 + Do While pnButon=1 + pnOptiune=1 + ofrmaleg=Createobject('frm_aleg_vizualizare') + ofrmaleg.Show(1) + Do Case + Case pnButon<>1 + Loop + Case pnOptiune=1 + Private pcTitlu + Store '' To pcTitlu + pcTitlu = 'LISTA DEVIZELOR PE MRCI DE MAINI' + pcPerioada = Iif(pnNrLuni1==pnNrLuni2,; + 'Luna '+Substr(pcAnLuna1,1,2)+'/'+Substr(pcAnLuna1,3),; + 'Perioada '+Substr(pcAnLuna1,1,2)+'/'+Substr(pcAnLuna1,3)+' - '+Substr(pcAnLuna2,1,2)+'/'+Substr(pcAnLuna2,3)) + Select (lcCursorRaport) + Keyboard '{CTRL+F10}' + Report Form rap_devize_marci To Printer Prompt Preview + Case pnOptiune=2 + lcSirColoane=[marca,nrord,TTOD(datai),denumire,nrinmat,masina,kmint,facturat,ore,valoare_man] + lcSirNume=[Marca,Nr_comanda,Data_comanda,Nume,Nr_inmatriculare,Model,Km_la_bord,Facturat,Ore_manopera,Valoare_manopera] + exportare(lcCursorRaport,lcSirColoane,lcSirNume) + Endcase + Release ofrmaleg + Enddo + Endif + If Used(lcCursorRaport) + Use In (lcCursorRaport) + Endif + Endif + Endif + Endif + +Endproc && devize_pe_marci_de_masini +********************************************************************************************************* \ No newline at end of file diff --git a/Programe/oproceduri_vizualizare.prg b/Programe/oproceduri_vizualizare.prg new file mode 100644 index 0000000..879e702 --- /dev/null +++ b/Programe/oproceduri_vizualizare.prg @@ -0,0 +1,940 @@ +*!* 19.08.2014 +*!* marius.mutu +*!* vizualizeaza_detalii_comanda: adaugat campul UM + +Procedure distribuire_timp_normat +*!* Local lcFiltru,lcSql,lnSucces +*!* lcFiltru = Strtran(gcCondLuna,Chr(39),Chr(63)) +*!* lcSql=[begin pack_devize.dev_distribuie_timp_n('] + Alltrim(gcS) + [',']+Alltrim(lcFiltru)+['); end;] +LOCAL lcSql,lnSucces +lcSql = [begin pack_auto.dev_distribuie_timp_n(?gnLuna,?gnAn); end;] +lnSucces=goExecutor.oExecute(lcSql) +If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,'Eroare') + Return +Endif +Endproc +********************************************************************************** +Procedure emitere_facturi +If glLunaInchisa + amessagebox("Nu puteti emite facturi, deoarece aceasta luna este inchisa!",0+48,"Luna inchisa") + Return +Endif +*!* *--------------------------------- + +*!* lcSql = [select a.id_ordl,a.id_lucrare,a.luna,a.an,a.datai,a.validat,a.dataoravalid,b.manopera,b.materiale,; +*!* a.nume,a.nrord,a.nrinmat,a.asigurator,a.inspector,a.util_valid,a.numar,a.tip_incas,a.id_masiniclient,; +*!* b.facturat,b.datafact; +*!* from ] + gcs + [.dev_vordl a left join ] + gcs +[.dev_vordl_manmat b on a.id_ordl = b.id_ordl] +*!* lnSucces=goExecutor.oExecute(lcSql,'crsMater') +*!* If lnSucces < 0 +*!* amessagebox(goExecutor.cEroare,0+16,'Eroare') +*!* ENDIF +*!* SELECT crsMater +*!* BROWSE +*!* *----------------------------------- +Private pcValoare1,pcValoare2,pcIntre,pnCriteriu, pnCriteriu2, pcFiltruOra,pcFiltruVfp +Private pcselect,pcschema,pcfiltru,pcorder,pocomenzi,llAfiseaza +Store '' To pocomenzi +pcValoare1 = "" +pcValoare2 = "" +pnCriteriu = 1 +pnCriteriu2 = 1 +pcIntre = "" +pcFiltruOra = "" +pcFiltruVfp = "" +Do Form frm_filtru_text With "nrord","Nr. comanda",pnCriteriu,pnCriteriu2 To pcFiltruOra + +If Used('crscomenzi') + Use In crscomenzi +Endif +*!* pcschema=['ID_ORDL n(10),ID_LUCRARE n(10),DATAI d,VALIDAT n(1),DATAORAVALID t,MANOPERA n(20,4),MATERIALE n(20,4),'+]+; +*!* ['NUME c(50),NRORD c(30),NRINMAT c(10),ASIGURATOR c(24),INSPECTOR c(24),UTIL_VALID c(30),FACTURAT n(1),DATAFACT d,'+]+; +*!* ['NRFACT n(15),ID_MASINICLIENT n(8),ID_PARTENER n(5),TIP_COMANDA c(50)'] +*!* pcselect=['select a.id_ordl,a.id_lucrare,a.datai,a.validat,a.dataoravalid,a.manopera,a.materiale,a.nume,'+]+; +*!* ['a.nrord,a.nrinmat,a.asigurator,a.inspector,a.util_valid,a.facturat,a.datafact,a.nrfact,a.id_masiniclient,'+]+; +*!* ['a.id_partener,a.tip_comanda '+]+; +*!* ['from ] + gcS + [.dev_vvalid_comenzi a '+]+; +*!* ['where 1=2'] +pcschema=[''] +pcselect=['select 0 as ales,a.* from ] + gcS + [.auto_validare_comenzi a '+]+; + ['where 1=2'] +IF !EMPTY(pcFiltruora) + * TIP = 1 POST GARANTIE, 2 = GARANTIE + pcfiltru = gcCondLuna + [ and a.inchis_fortat = 0 and a.id_tip IN (1,2) ] + pcFiltruOra +ELSE + pcfiltru = [1=2] +ENDIF +pcorder=[datai,nrord] +llAfiseaza=.F. +gencursor('pocomenzi','crscomenzi',pcselect,pcfiltru,pcschema,pcorder,llAfiseaza) +pocomenzi.ca_baza1.afisare() +Select crscomenzi + +ofrmfacturare=Createobject('frm_emitere_facturi') +*!* modificare v 2.0.17 +If !Empty(pcFiltruOra) + With ofrmfacturare.ck_nrord + .cValoare1 = pcValoare1 + .cValoare2 = pcValoare2 + .criteriu = pnCriteriu + .criteriu2 = pnCriteriu2 + .cIntre = pcIntre + .filtru = pcFiltruOra + .filtru_vfp = pcFiltruVFP + .Value = 1 + Endwith +Endif +*!* modificare v 2.0.17 ^ +ofrmfacturare.Show(1) +If Used('crscomenzi') + Use In crscomenzi +Endif +Release pocomenzi,ofrmfacturare + +Endproc && emitere_facturi +***************************************************************************************** +********************************************************************************** +Procedure inchidere_regie +Private pnVar +STORE 0 TO pnVar +goExecutor.oFunction2Value("pack_auto.getOptiuneInchidere(3)",@pnVar) +If Nvl(pnVar,1) = 1 + amessagebox("Comenzile de regie se inchid automat la validare!",0+48,"Atentie") + Return +Endif + +If glLunaInchisa + amessagebox("Nu puteti inchide comenzi de regie, deoarece aceasta luna este inchisa!",0+48,"Luna inchisa") + Return +Endif + +Private pcValoare1,pcValoare2,pcIntre,pnCriteriu, pnCriteriu2, pcFiltruOra, pcFiltruVFP +Private pcselect,pcschema,pcfiltru,pcorder,pocomenzi,llAfiseaza +Store '' To pocomenzi +pcValoare1 = "" +pcValoare2 = "" +pnCriteriu = 1 +pnCriteriu2 = 1 +pcIntre = "" +pcFiltruOra = "" +pcFiltruVFP = "" +Do Form frm_filtru_text With "nrord","Nr. comanda",pnCriteriu,pnCriteriu2 To pcFiltruOra + +If Used('crscomenzi') + Use In crscomenzi +Endif +pcschema=[''] +pcselect=['select * from ] + gcS + [.auto_validare_comenzi a '+]+; + ['where 1=2'] +IF !EMPTY(pcFiltruora) + pcfiltru = gcCondLuna + [ and a.id_tip=3 ] + pcFiltruOra +ELSE + pcfiltru = [1=2] +ENDIF +pcorder=[datai,nrord] +llAfiseaza=.F. +gencursor('pocomenzi','crscomenzi',pcselect,pcfiltru,pcschema,pcorder,llAfiseaza) +pocomenzi.ca_baza1.afisare() +Select crscomenzi + +ofrmfacturare=Createobject('frm_inchidere_regie') +*!* modificare v 2.0.17 +If !Empty(pcFiltruOra) + With ofrmfacturare.ck_nrord + .cValoare1 = pcValoare1 + .cValoare2 = pcValoare2 + .criteriu = pnCriteriu + .criteriu2 = pnCriteriu2 + .cIntre = pcIntre + .filtru = pcFiltruOra + .filtru_vfp = pcFiltruVFP + .Value = 1 + Endwith +Endif +*!* modificare v 2.0.17 ^ +ofrmfacturare.Show(1) +If Used('crscomenzi') + Use In crscomenzi +Endif +Release pocomenzi,ofrmfacturare + +Endproc && inchidere_regie +***************************************************************************************** +********************************************************************************** +Procedure inchidere_productie +Private pnVar +STORE 1 TO pnVar +goExecutor.oFunction2Value("pack_auto.getOptiuneInchidere(6)",@pnVar) +If Nvl(pnVar,1) = 1 + amessagebox("Comenzile de productie se inchid automat la validare!",0+48,"Atentie") + Return +Endif + +If glLunaInchisa + amessagebox("Nu puteti inchide comenzi de productie, deoarece aceasta luna este inchisa!",0+48,"Luna inchisa") + Return +Endif + +Private pcValoare1,pcValoare2,pcIntre,pnCriteriu, pnCriteriu2, pcFiltruOra, pcFiltruVFP +Private pcselect,pcschema,pcfiltru,pcorder,pocomenzi,llAfiseaza +Store '' To pocomenzi +pcValoare1 = "" +pcValoare2 = "" +pnCriteriu = 1 +pnCriteriu2 = 1 +pcIntre = "" +pcFiltruOra = "" +pcFiltruVFP = "" +Do Form frm_filtru_text With "nrord","Nr. comanda",pnCriteriu,pnCriteriu2 To pcFiltruOra + +If Used('crscomenzi') + Use In crscomenzi +Endif +pcschema=[''] +pcselect=['select * from ] + gcS + [.auto_validare_comenzi a '+]+; + ['where 1=2'] +IF !EMPTY(pcFiltruora) + pcfiltru = gcCondLuna + [ and a.id_tip=6 ] + pcFiltruOra +ELSE + pcfiltru = [1=2] +ENDIF +pcorder=[datai,nrord] +llAfiseaza=.F. +gencursor('pocomenzi','crscomenzi',pcselect,pcfiltru,pcschema,pcorder,llAfiseaza) +pocomenzi.ca_baza1.afisare() +Select crscomenzi + +ofrmfacturare=Createobject('frm_inchidere_productie') +*!* modificare v 2.0.17 +If !Empty(pcFiltruOra) + With ofrmfacturare.ck_nrord + .cValoare1 = pcValoare1 + .cValoare2 = pcValoare2 + .criteriu = pnCriteriu + .criteriu2 = pnCriteriu2 + .cIntre = pcIntre + .filtru = pcFiltruOra + .filtru_vfp = pcFiltruVFP + .Value = 1 + Endwith +Endif +*!* modificare v 2.0.17 ^ +ofrmfacturare.Show(1) +If Used('crscomenzi') + Use In crscomenzi +Endif +Release pocomenzi,ofrmfacturare + +Endproc && inchidere_productie +***************************************************************************************** +Procedure vizualizare_facturi +Private pcselect,pcschema,pcfiltru,pcorder,pofacturi,llAfiseaza +Store '' To pofacturi +pcschema=['NRCRT n(5),ID_LUCRARE N(20),NRORD C(50),DATAI d,NUME c(50),TELEFON C(50),MANOPERA n(20,4),MATERIALE n(20,4),MANOPERA_DEVIZ n(20,4), MATERIALE_DEVIZ n(20,4),'+]+; + ['ASIGURATOR c(24),INSPECTOR c(24),NR_DOSAR c(40),NRINMAT c(35),NRACT n(14),DATAACT d,VALCTVA n(19,2), ID_PART_REF N(20), PART_REF C(100)'] +pcorder=[a.dataact,a.nract,a.datai,a.nrord] +*!* modificare 27.01 +*!* pcselect=['select row_number() over (partition by a.nrord order by ] + pcorder + [) as nrcrt,'+]+; +*!* ['a.nrord,a.datai,a.nume,a.manopera,a.materiale,a.asigurator,'+]+; +*!* ['a.inspector,a.nrinmat,a.nrfact as nract,a.datafact as dataact,a.valctva '+]+; +*!* ['from ] + gcS + [.dev_validare_comenzi a '+]+; +*!* ['where 1=2'] +pcselect=['select a.nrcrt,a.id_lucrare,a.nrord,a.datai,a.nume,a.telefon,a.manopera,a.materiale,a.manopera_deviz, a.materiale_deviz, a.asigurator,a.inspector,'+]+; + ['a.nr_dosar,a.nrinmat,a.nract,a.dataact,a.valctva, a.id_part_ref, a.part_ref '+]+; + ['from auto_facturi_emise a'+]+; + ['where 1=2'] + +*!* *!* ['join ] + gcS + [.vireg_parteneri b on a.id_lucrare=b.id_lucrare '+]+; +*!* *!* pcfiltru=[b.luna=]+Alltrim(Str(gnLuna))+[ and b.an=]+Alltrim(Str(gnAn)) +*!* *!* pcfiltru=[(extract(month from dataact) =]+Alltrim(Str(gnLuna))+[ and extract(year from dataact) =]+Alltrim(Str(gnAn))+[)] +pcFiltru=[1=2] +*!* *!* pcfiltru = gcCondLuna + [ and a.facturat = 1] +llAfiseaza=.F. + +gencursor('pofacturi','crsfacturi',pcselect,pcfiltru,pcschema,pcorder,llAfiseaza) +pofacturi.ca_baza1.afisare() + +ofrmvizfact=Createobject('frm_viz_facturi') +ofrmvizfact.Show(1) +If Used('crsfacturi') + Use In crsfacturi +Endif +Release pofacturi +Endproc && vizualizare_facturi +***************************************************************************************** +Function vizualizeaza_detalii_comanda + Lparameters toFereastra,toComanda,tlDoarVizualizare + Local loFrmDetaliiComanda, lcSelect, lcSchema, lcFiltru, lcOrder, llAfiseaza, lnDoarVizualizare + Private plComandaM, poOper, poRul, poDevEst + Store '' To poOper, poRul, poDevEst + plComandaM = .F. + llAfiseaza = .F. + Do ccsectii In update_devize.prg + + lcSchema=['ID_ORDL n(10),CODOP c(10),TIMPN n(9,3),PRET n(20,4),VALIDAT n(1),DENOP c(100),SECTIE c(100),DATAI d,ID_OPER N(20),NOU N(1)'] + lcSelect=['select id_ordl,codop,timpn,pret,validat,denop,sectie,datai,id_oper,nou from ] + gcS + [.auto_voper where 1=2'] + lcOrder=[datai,id_oper] + lcFiltru= [id_ordl = ]+Alltrim(Str(toComanda.id_ordl))+[ and ]+; + [extract(month from datai)+extract(year from datai)*12<=?gnLuna+?gnAn*12] + gencursor('pooper','oper',lcSelect,lcFiltru,lcSchema,lcOrder,llAfiseaza) + poOper.ca_baza1.afisare() + + *!* am pus toComanda.proc_tvav in loc de pack_contafin.getCotaTVAStandard + *!* era pack_contafin.getCotaTVAStandard era pus pentru ca se poate schimba TVA-ul de la o luna la alta si pe factura trebuie sa am + *!* calculat tva-ul cu cota din luna curenta,nu cu cea din luna in care am facut bonul + *!* toComanda.proc_tvav se stabileste la crearea comenzii auto, se actualizeaza la validare si la facturare + lcSchema=['CODMAT c(50),DENUMIRE c(100),UM C(10),PRETV n(20,4),CANTE n(18,3),DATAACT D,ID_RUL n(20),COTA_DIFERITA n(1),TVA n(20,4),PRETCTVA n(20,4)'] + *!* modificare v 2.0.41 : am adaugat pack_sesiune.calculeaza_pret_cu_tva + lcSelect=[select codmat,denumire,um,pretv,cante,dataact,id_rul,decode(proc_tvav,] + ALLTRIM(STR(toComanda.proc_tvav,10,4)) + [,0,1) as cota_diferita,] + ; + [pack_sesiune.calculeaza_pret_tva(pretv,1,pack_def.GetIdMonedaNationala(),] + ; + ALLTRIM(STR(toComanda.proc_tvav,10,4)) + [,0,2) as tva, ] + ; + [pack_sesiune.calculeaza_pret_cu_tva(pretv,1,pack_def.GetIdMonedaNationala(),] + ; + ALLTRIM(STR(toComanda.proc_tvav,10,4)) + [,0,2) as pretctva ] + ; + [from ] + gcS + [.vrul where 1=2'] + lcOrder=[dataact,id_rul] + lcFiltru= [id_lucrare = ]+Alltrim(Str(toComanda.id_lucrare))+[ and cante <> 0 and ]+; + [luna+an*12<=?gnLuna+?gnAn*12] + gencursor('porul','rul',lcSelect,lcFiltru,lcSchema,lcOrder,llAfiseaza) + poRul.ca_baza1.afisare() + + lcSchema=['DENUMIRE v(100),COD v(10),UM v(10),CANTITATE n(20,4),PRETFTVA n(20,4),PRETCTVA n(20,4),COTA_TVA n(10),VALOARE n(20,4),ID_DEV_ESTIMARE_REP n(20),ID_LUCRARE n(10),NRORD v(50),ID_NORME n(5),ID_ARTICOL n(20),PRET_CU_TVA n(1),VALFTVA n(20,4),VALTVA n(20,4)'] + lcSelect=['select denumire,cod,um,cantitate,pretftva,pretctva,cota_tva,valoare,id_dev_estimare_rep,id_lucrare,nrord,id_norme,id_articol,pret_cu_tva,valftva,valtva from ] + gcS + [.auto_vestimari_rep where 1=2'] + lcOrder=[id_dev_estimare_rep] + lcFiltru= [id_lucrare = ]+Alltrim(Str(toComanda.id_lucrare)) + gencursor('podevest','v_devizest',lcSelect,lcFiltru,lcSchema,lcOrder,llAfiseaza) + poDevEst.ca_baza1.afisare() + + lnDoarVizualizare = Iif(Empty(tlDoarVizualizare),1,Iif(tlDoarVizualizare,2,1)) + toFereastra.AlwaysOnTop=.F. + loFrmDetaliiComanda = Createobject('frm_vizcomanda',lnDoarVizualizare,toComanda.Validat) + loFrmDetaliiComanda.Show(1) + toFereastra.AlwaysOnTop=.T. + Use In (Select('oper')) + Use In (Select('rul')) + Use In (Select('v_devizest')) + Release loFrmDetaliiComanda, lcSelect, lcSchema, lcFiltru, lcOrder, llAfiseaza, poOper, poRul, poDevEst,llDoarVizualizare + Return plComandaM +Endfunc +***************************************************************************************** +Procedure vizualizare_comenzi_regie +Private pcselect,pcschema,pcfiltru,pcorder,pofacturi,llAfiseaza +Store '' To pofacturi +pcschema=['NRCRT n(5),NRORD c(50),DATAI d,NUME c(50),MANOPERA n(20,4),MATERIALE n(20,4),'+]+; + ['NRINMAT c(35),NRACT n(14),DATAACT d,TOTALFTVA n(19,2)'] +pcorder=[a.datai,a.nrord] +pcselect=['select a.nrcrt,a.nrord,a.datai,a.nume,a.manopera,a.materiale,'+]+; + ['a.nrinmat,a.nract,a.dataact,a.totalftva '+]+; + ['from ]+gcS+[.auto_inchidere a'+]+; + ['where 1=2'] + +pcFiltru=[1=2] +llAfiseaza=.F. + +gencursor('pofacturi','crsfacturi',pcselect,pcfiltru,pcschema,pcorder,llAfiseaza) +pofacturi.ca_baza1.afisare() + +ofrmvizfact=Createobject('frm_viz_comenzi_regie') +ofrmvizfact.Show(1) +If Used('crsfacturi') + Use In crsfacturi +Endif +Release pofacturi +Endproc && vizualizare_comenzi_regie +***************************************************************************************** +Procedure normare_salarii +*!* If glLunaInchisa +*!* amessagebox("Nu puteti norma salariile, deoarece aceasta luna este inchisa!",0+48,"Luna inchisa") +*!* Return +*!* Endif + +Local loTherm, lcTask, lnPercent +Private pcselect,pcschema,pcfiltru,pcorder,pomanopera,pomecanici,llAfiseaza +Store '' To pomanopera,pomecanici +If Used('crsmanopera') + Use In crsmanopera +Endif +If Used('crsmecanici') + Use In crsmecanici +Endif +loTherm = Newobject("_thermometer","_therm","","Manopera comenzi inchise...") +lcTask = "Incarcare date vizualizare" +_Screen.MousePointer= 11 +*!* gofundal.AlwaysOnTop=.F. +With loTherm + .AlwaysOnTop=.T. + .Show() + + lnPercent = 0 + lcTask="Incarcare date mecanici..." + .Update(lnPercent, lcTask) +*!* =ccsectii() + =ccmecanici() + + lnPercent = 20 + .Update(lnPercent, lcTask) + pcschema=['NRORD c(50),DATAI d,ID_OPER n(10),TIMPN n(9,3),PRET n(20,4),ID_SECTIE n(5),SECTIE c(30),'+]+; + ['DENOP c(100),UTIL c(30),DATAORA t,FACTURAT n(1),NRFACT N(14),DATAFACT d,TIP_COMANDA c(50)'] +*!* pcselect=['select a.nrord,a.datai,b.id_oper,b.timpn,b.pret,b.id_sectie,b.sectie,b.denop,b.util,b.dataora,'+]+; +*!* ['c.facturat,c.nrfact,c.datafact '+]+; +*!* ['from ] + gcS + [.dev_vordl a '+]+; +*!* ['join ] + gcS + [.dev_voper b on a.id_ordl=b.id_ordl '+]+; +*!* ['left join ] + gcS + [.dev_vordl_facturat c on a.id_ordl=c.id_ordl '+]+; +*!* ['where 1=2'] + *!* inlocuire dev_vvalid_comenzi + pcselect=['select a.nrord,a.datai,b.id_oper,b.timpn,b.pret,b.id_sectie,b.sectie,b.denop,b.util,b.dataora,'+]+; + ['a.facturat,a.nrfact,a.datafact,a.tip_comanda '+]+; + ['from ] + gcS + [.auto_normare_comenzi a '+]+; + ['join ] + gcS + [.auto_voper b on a.id_ordl=b.id_ordl '+]+; + ['where 1=2'] +*!* pcfiltru=[a.luna=]+Alltrim(Str(gnLuna))+[ and a.an=]+Alltrim(Str(gnAn))+[ and a.facturat=1] +*!* pcFiltru = [extract(month from a.datafact) = ] + Alltrim(Str(gnLuna)) + [ and extract(year from a.datafact) = ]+Alltrim(Str(gnAn))+[ and a.facturat=1] + pcfiltru = gcCondLuna + [ and a.facturat = 1] + pcorder=[a.datai,a.nrord] + llAfiseaza=.F. + pcfiltru = [1=2] + gencursor('pomanopera','crsmanopera',pcselect,pcfiltru,pcschema,pcorder,llAfiseaza) + + If !glLunaInchisa + lnPercent = 30 + lcTask="Distribuire timp normat..." + .Update(lnPercent, lcTask) + distribuire_timp_normat() + endif +*!* lcSql=[begin pack_devize.dev_distribuie_timp_n('] + Alltrim(gcS) + [',']+Alltrim(pcfiltru)+['); end;] +*!* lnSucces=goExecutor.oExecute(lcSql) +*!* If lnSucces < 0 +*!* amessagebox(goExecutor.cEroare,0+16,'Eroare') +*!* Endif + + lnPercent = 60 + lcTask="Incarcare date operatii comenzi..." + .Update(lnPercent, lcTask) + pomanopera.ca_baza1.afisare() + + lnPercent = 90 + lcTask="Incarcare date manopera..." + .Update(lnPercent, lcTask) + pcschema=['ID_OPERMECANIC n(10),ORE n(9,3),NUME c(100),ID_MECANIC n(5)'] + pcselect=['select id_opermecanic,ore,nume||CHR(32)||prenume as nume,id_mecanic from ] + gcS + [.auto_voper_detalii_m '+]+; + ['where 1=2'] + pcfiltru=[1=2] + pcorder=[nume] + llAfiseaza=.F. + gencursor('pomecanici','crsmecanici',pcselect,pcfiltru,pcschema,pcorder,llAfiseaza) + + .Complete() + .AlwaysOnTop=.F. +Endwith +*!* gofundal.AlwaysOnTop=.T. +_Screen.MousePointer= 0 + +ofrmvizfact=Createobject('frm_normare_salarii') +ofrmvizfact.Show(1) +If Used('crsmecanici') + Use In crsmecanici +Endif +If Used('crsmanopera') + Use In crsmanopera +Endif +Release pocomenzi,pomanopera +Endproc && normare salarii +***************************************************************************************** +Procedure vizualizare_ist_comenzi +Private pcselect,pcschema,pcfiltru,pcorder,pocomenzi,llAfiseaza +Store '' To pocomenzi + +pcschema=['ID_ORDL n(10),ID_LUCRARE n(10),ID_MASINICLIENT n(8),ID_TIP n(5),DATAI d,'+]+; + ['VALIDAT n(1),DATAORAVALID T,UTIL_VALID C(50),NRORD c(50),FACTURAT n(1),DATAFACT d,NRFACT N(14),'+]+; + ['VALCTVA_FACTURA N(20,4),VAL_MANOPERA_FACTURA N(20,4),VAL_MATERIALE_FACTURA N(20,4),'+]+; + ['VAL_MATERIALE_ACH N(20,4),VAL_MATERIALE_VZ N(20,4),ORE_MANOPERA N(20,4),VAL_MANOPERA N(20,4),'+]+; + ['ID_PARTENER n(10),NRINMAT c(35),MASINA c(20),MARCA c(24),NUME c(50),'+]+; + ['ASIGURATOR c(40),INSPECTOR c(40),NR_DOSAR c(40),TIP_COMANDA c(50),PROC_TVAV N(10,4), INCHIS_FORTAT N(1), DATAORAINCHIS T, UTIL_INCHIS C(30), ID_PART_REF N(20), PART_REF C(100),'+]+; + ['SERIES V(100), KMINT I, ORE_FUNCTIONARE I'] + +pcselect=[select a.id_ordl,a.id_lucrare,a.id_masiniclient,a.id_tip,a.datai,]+; + [a.validat,a.dataoravalid,a.util_valid,a.nrord,a.facturat,a.datafact,a.nrfact,]+; + [a.valctva_factura, a.val_manopera_factura, a.val_materiale_factura, a.val_materiale_ach, a.val_materiale_vz, a.ore_manopera, a.val_manopera,]+; + [a.id_partener,a.nrinmat,a.masina,a.marca,a.nume,a.asigurator,a.inspector,a.nr_dosar,]+; + [a.tip_comanda,a.proc_tvav, ] + ; + [a.inchis_fortat, a.dataorainchis, a.util_inchis, a.id_part_ref, a.part_ref, ]+; + [a.series, a.kmint, a.ore_functionare ] + ; + [ from auto_istoric_comenzi a where 1=2] + +pcfiltru=[1=2] +pcorder=[a.datai,a.nrord] +llAfiseaza=.F. +gencursor('pocomenzi','crscomenzi',pcselect,pcfiltru,pcschema,pcorder,llAfiseaza) +pocomenzi.ca_baza1.afisare() + +ofrmistoric=Createobject('frm_istoric_comenzi') +ofrmistoric.Show(1) +If Used('crscomenzi') + Use In crscomenzi +Endif +Release pocomenzi +Endproc && vizualizare_ist_comenzi +***************************************************************************************** +Procedure vizualizare_manopera +*!* If glLunaInchisa +*!* amessagebox("Nu puteti vizualiza manopera, deoarece luna este inchisa!",0+48,"Luna inchisa") +*!* Return +*!* Endif + +Local loTherm, lcTask, lnPercent +Private pcselect,pcschema,pcfiltru,pcorder,pomanopera,pomecanici,llAfiseaza +Store '' To pomanopera,pomecanici +If Used('crsmanopera') + Use In crsmanopera +Endif +If Used('crsmecanici') + Use In crsmecanici +Endif + +loTherm = Newobject("_thermometer","_therm","","Manopera comenzi in luna curenta...") +lcTask = "Incarcare date vizualizare" +_Screen.MousePointer= 11 +*!* gofundal.AlwaysOnTop=.F. +With loTherm + .AlwaysOnTop=.T. + .Show() + + lnPercent = 0 + lcTask="Incarcare date sectii si mecanici..." + .Update(lnPercent, lcTask) + Do ccsectii in update_devize.prg + =ccmecanici() + + lnPercent = 20 + .Update(lnPercent, lcTask) + pcschema=['NRORD c(50),DATAI d,ID_OPER n(10),TIMPN n(9,3),PRET n(20,4),ID_SECTIE n(5),SECTIE c(30),'+]+; + ['DENOP c(100),UTIL c(30),DATAORA t,FACTURAT n(1),NRFACT N(14),DATAFACT d,TIP_COMANDA c(50)'] + *!* inlocuire dev_vvalid_comenzi + pcselect=['select a.nrord,a.datai,b.id_oper,b.timpn,b.pret,b.id_sectie,b.sectie,b.denop,b.util,b.dataora,'+]+; + ['a.facturat,a.nrfact,a.datafact,a.tip_comanda '+]+; + ['from ] + gcS + [.auto_normare_comenzi a '+]+; + ['join ] + gcS + [.auto_voper b on a.id_ordl=b.id_ordl '+]+; + ['where 1=2'] +*!* pcselect=['select a.nrord,a.datai,b.id_oper,b.timpn,b.pret,b.id_sectie,b.sectie,b.denop,b.util,b.dataora,'+]+; +*!* ['c.facturat,c.nrfact,c.datafact '+]+; +*!* ['from ] + gcS + [.dev_vordl a '+]+; +*!* ['join ] + gcS + [.dev_voper b on a.id_ordl=b.id_ordl '+]+; +*!* ['left join ] + gcS + [.dev_vordl_facturat c on a.id_ordl=c.id_ordl '+]+; +*!* ['where 1=2'] +*!* pcfiltru=[a.luna=]+Alltrim(Str(gnLuna))+[ and a.an=]+Alltrim(Str(gnAn)) +*!* pcFiltru = [(extract(month from a.datafact) = ] + Alltrim(Str(gnLuna)) + [ and extract(year from a.datafact) = ]+Alltrim(Str(gnAn)) + [ or a.datafact is null)] + pcfiltru = gcCondLuna + pcorder=[a.datai,a.nrord] + llAfiseaza=.F. + pcfiltru = [1=2] + gencursor('pomanopera','crsmanopera',pcselect,pcfiltru,pcschema,pcorder,llAfiseaza) + + If !glLunaInchisa + lnPercent = 30 + lcTask="Distribuire timp normat..." + .Update(lnPercent, lcTask) + distribuire_timp_normat() + endif +*!* lcSql=[begin pack_devize.dev_distribuie_timp_n('] + Alltrim(gcS) + [',']+Alltrim(pcfiltru)+['); end;] +*!* lnSucces=goExecutor.oExecute(lcSql) +*!* If lnSucces < 0 +*!* amessagebox(goExecutor.cEroare,0+16,'Eroare') +*!* Endif + + lnPercent = 60 + lcTask="Incarcare date operatii comenzi..." + .Update(lnPercent, lcTask) + pomanopera.ca_baza1.afisare() + + lnPercent = 90 + lcTask="Incarcare date manopera..." + .Update(lnPercent, lcTask) + pcschema=['ID_OPERMECANIC n(10),ORE n(9,3),NUME c(100),ID_MECANIC n(5)'] + pcselect=['select id_opermecanic,ore,nume||CHR(32)||prenume as nume,id_mecanic from ] + gcS + [.auto_voper_detalii_m '+]+; + ['where 1=2'] + pcfiltru=[1=2] + pcorder=[nume] + llAfiseaza=.F. + gencursor('pomecanici','crsmecanici',pcselect,pcfiltru,pcschema,pcorder,llAfiseaza) + + .Complete() + .AlwaysOnTop=.F. +Endwith +Release loTherm +*!* gofundal.AlwaysOnTop=.T. +_Screen.MousePointer= 0 + +ofrmmanopera=Createobject('frm_viz_manopera') +ofrmmanopera.Show(1) +If Used('crsmecanici') + Use In crsmecanici +Endif +If Used('crsmanopera') + Use In crsmanopera +Endif +Release pocomenzi,pomanopera +Endproc && vizualizare_manopera +***************************************************************************************** +Procedure validare_comenzi +If glLunaInchisa + amessagebox("Nu puteti valida comenzi, deoarece aceasta luna este inchisa!",0+48,"Luna inchisa") + Return +Endif + +Private pcValoare1,pcValoare2,pcIntre,pnCriteriu, pnCriteriu2, pcFiltruOra, pcFiltruVFP +Private pcselect,pcschema,pcfiltru,pcorder,pocomenzi,llAfiseaza +Store '' To pocomenzi +pcValoare1 = "" +pcValoare2 = "" +pnCriteriu = 1 +pnCriteriu2 = 1 +pcIntre = "" +pcFiltruOra = "" +pcFiltruVFP = "" +Do Form frm_filtru_text With "nrord","Nr. comanda",pnCriteriu,pnCriteriu2 To pcFiltruOra + +If Used('crscomenzi') + Use In crscomenzi +Endif +*!* pcschema=['ID_ORDL n(10),ID_LUCRARE n(10),DATAI d,VALIDAT n(1),DATAORAVALID t,MANOPERA n(20,4),MATERIALE n(20,4),'+]+; +*!* ['NUME c(50),NRORD c(30),NRINMAT c(10),ASIGURATOR c(24),INSPECTOR c(24),UTIL_VALID c(30),FACTURAT n(1),TIP_COMANDA c(50)'] +*!* pcselect=['select a.id_ordl,a.id_lucrare,a.datai,a.validat,a.dataoravalid,a.manopera,a.materiale,a.nume,'+]+; +*!* ['a.nrord,a.nrinmat,a.asigurator,a.inspector,a.util_valid,a.facturat,tip_comanda from ] + gcS + [.dev_validare_comenzi a '+]+; +*!* ['where 1=2'] +pcschema=['ID_ORDL n(10),ID_LUCRARE n(10),DATAI d,VALIDAT n(1),DATAORAVALID t,MANOPERA n(20,4),MATERIALE n(20,4),'+]+; + ['NUME c(50),NRORD c(50),NRINMAT c(35),ASIGURATOR c(24),INSPECTOR c(24),NR_DOSAR c(40),UTIL_VALID c(30),'+]+; + ['FACTURAT n(1),ID_TIP N(5),TIP_COMANDA c(50),PROC_TVAV N(10,4), INCHIS_FORTAT N(1), DATAORAINCHIS T, UTIL_INCHIS C(30),' + ]+; + ['KMINT I, ORE_FUNCTIONARE I, SERIES V(100), CILINDREE I, PUTERECP I, PUTEREKW I'] +pcselect=['select a.id_ordl,a.id_lucrare,a.datai,a.validat,a.dataoravalid,a.manopera,a.materiale,a.nume,'+]+; + ['a.nrord,a.nrinmat,a.asigurator,a.inspector,a.nr_dosar,a.util_valid,a.facturat,a.id_tip,a.tip_comanda,a.proc_tvav, '+]+; + ['a.inchis_fortat, a.dataorainchis, a.util_inchis, a.kmint, a.ore_functionare, a.series, a.cilindree, a.puterecp, a.puterekw '+]+; + ['from auto_validare_comenzi a '+]+; + ['where 1=2'] + + +&&pcFiltru = [extract(month from a.datafact) = ] + Alltrim(Str(gnLuna)) + [ and extract(year from a.datafact) = ]+Alltrim(Str(gnAn))+ +*!* pcfiltru=[((extract(month from datafact) =]+Alltrim(Str(gnLuna))+[ and extract(year from datafact) =]+Alltrim(Str(gnAn)) +[) or (datafact is null ))]+pcFiltruOra +IF !EMPTY(pcFiltruora) + pcfiltru = gcCondLuna +pcFiltruOra +ELSE + pcfiltru = [1=2] +ENDIF +pcorder=[a.datai,a.nrord] +llAfiseaza=.F. +gencursor('pocomenzi','crscomenzi',pcselect,pcfiltru,pcschema,pcorder,llAfiseaza) +pocomenzi.ca_baza1.afisare() +Select crscomenzi +ofrmvalidare=Createobject('frm_val_comenzi') +*!* modificare v 2.0.17 +If !Empty(pcFiltruOra) + With ofrmvalidare.ck_nrord + .cValoare1 = pcValoare1 + .cValoare2 = pcValoare2 + .criteriu = pnCriteriu + .criteriu2 = pnCriteriu2 + .cIntre = pcIntre + .filtru = pcFiltruOra + .filtru_vfp = pcFiltruVFP + .Value = 1 + Endwith +Endif +*!* modificare v 2.0.17 ^ +ofrmvalidare.Show(1) +If Used('crscomenzi') + Use In crscomenzi +Endif +Release pocomenzi +Endproc && validare_comenzi +***************************************************************************************** +Procedure vizualizare_comenzi +Private pcselect,pcschema,pcfiltru,pcorder,pocomenzi,llAfiseaza +Store '' To pocomenzi +If Used('crscomenzi') + Use In crscomenzi +Endif +pcschema=['ID_ORDL n(10),ID_LUCRARE n(10),DATAI d,NUME c(50),NRORD c(50),NRINMAT c(35),VALIDAT n(1),ID_TIP N(5),TIP_COMANDA c(50),DATAORAVALID D,'+] +; + ['FACTURAT n(1),DATAFACT d,NRFACT N(14),PROC_TVAV N(10,4), ID_PART_REF N(20), PART_REF C(100), SERIES V(100), KMINT I, ORE_FUNCTIONARE I'] + +pcselect=['select a.id_ordl,a.id_lucrare,a.datai,a.nume,a.nrord,a.nrinmat,a.validat,a.id_tip,a.tip_comanda,a.dataoravalid,a.facturat,a.datafact,a.nrfact,a.proc_tvav, a.id_part_ref, a.part_ref, '+]+; + [' a.series, a.kmint, a.ore_functionare '+] + ; + [' from ] + gcS + [.auto_normare_comenzi a where 1=2'] +*!* [' from ] + gcS + [.dev_vvalid_comenzi a where 1=2'] +*!* pcfiltru=[luna=]+Alltrim(Str(gnLuna))+[ and an=]+Alltrim(Str(gnAn)) +*!* pcfiltru=[(extract(month from datafact) =]+Alltrim(Str(gnLuna))+[ and extract(year from datafact) =]+Alltrim(Str(gnAn))+[) or (datafact is null )] + +pcfiltru = [1=2] && gcCondLuna + +pcorder=[a.datai,a.nrord] +llAfiseaza=.F. +gencursor('pocomenzi','crscomenzi',pcselect,pcfiltru,pcschema,pcorder,llAfiseaza) +pocomenzi.ca_baza1.afisare() + +ofrmviz=Createobject('frm_viz_comenzi') +ofrmviz.Show(1) +If Used('crscomenzi') + Use In crscomenzi +Endif +Release pocomenzi +Endproc && vizualizare_comenzi +***************************************************************************************** +******************************************* +* PROCEDURE viz_optiuni( ) +* Data/ora : 02/10/05, 15:46:17 +* autor : liana.macinic +* descriere: + +****** PARAMETER BLOCK ************** +* Parametri : 0 +* +******************************************* +Procedure viz_optiuni( ) +Private lcCuloare,pcDev_p411,pcDEV_s411,pcDev_nr411,pcDev_poz411,pcDev_p704,pcDEV_s704,pcDev_nr704,pcDev_poz704 +pcDev_p411 = gcDev_p411 +pcDEV_s411 = gcDEV_s411 +pcDev_nr411 = gcDev_nr411 +pcDev_poz411 = gcDev_poz411 + +pcDev_p704 = gcDev_p704 +pcDEV_s704 = gcDEV_s704 +pcDev_nr704 = gcDev_nr704 +pcDev_poz704 = gcDev_poz704 + +*!* STORE gcCuloare_fundal TO lcCuloare +oopt = Createobject('optiuni_frm') +oopt.Show(1) +*!* DEBUG +*!* SUSPEND + +If pcDev_p411 # gcDev_p411 + lcSql = [UPDATE ] + gcS + [.optiuni SET varvalue = '] + Alltrim(gcDEV_Sp411) + [' where varname =] + ['DEV_P411'] + lnSucces = goExecutor.oExecute(lcSql) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,"Eroare") + Return + Endif +Endif +If pcDEV_s411 # gcDEV_s411 + lcSql = [UPDATE ] + gcS + [.optiuni SET varvalue = '] + Alltrim(gcDEV_s411) + [' where varname =] + [ 'DEV_S411'] + lnSucces = goExecutor.oExecute(lcSql) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,"Eroare") + Return + Endif +Endif + +If pcDev_poz411 # gcDev_poz411 + lcSql = [UPDATE ] + gcS + [.optiuni SET varvalue = '] + Alltrim(gcDev_poz411) + [' where varname =] + [ 'DEV_POZ411'] + lnSucces = goExecutor.oExecute(lcSql) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,"Eroare") + Return + Endif +Endif +If pcDev_nr411 # gcDev_nr411 + lcSql = [UPDATE ] + gcS + [.optiuni SET varvalue = '] + Alltrim(gcDev_nr411) + [' where varname =] + [ 'DEV_NR411'] + lnSucces = goExecutor.oExecute(lcSql) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,"Eroare") + Return + Endif +Endif + + + +*------------------ +If pcDev_p704 # gcDev_p704 + lcSql = [UPDATE ] + gcS + [.optiuni SET varvalue = '] + Alltrim(gcDev_p704) + [' where varname =] + ['DEV_P704'] + lnSucces = goExecutor.oExecute(lcSql) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,"Eroare") + Return + Endif +Endif +If pcDEV_s704 # gcDEV_s704 + lcSql = [UPDATE ] + gcS + [.optiuni SET varvalue = '] + Alltrim(gcDEV_s704) + [' where varname =] + [ 'DEV_S704'] + lnSucces = goExecutor.oExecute(lcSql) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,"Eroare") + Return + Endif +Endif + +If pcDev_poz704 # gcDev_poz704 + lcSql = [UPDATE ] + gcS + [.optiuni SET varvalue = '] + Alltrim(gcDev_poz704) + [' where varname =] + [ 'DEV_POZ704'] + lnSucces = goExecutor.oExecute(lcSql) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,"Eroare") + Return + Endif +Endif +If pcDev_nr704 # gcDev_nr704 + lcSql = [UPDATE ] + gcS + [.optiuni SET varvalue = '] + Alltrim(gcDev_nr704) + [' where varname =] + [ 'DEV_NR704'] + lnSucces = goExecutor.oExecute(lcSql) + If lnSucces < 0 + amessagebox(goExecutor.cEroare,0+16,"Eroare") + Return + Endif +Endif +*!* pcDev_p704 = gcDev_p704 +*!* pcDEV_s704 = gcDEV_s704 +*!* pcDev_nr704 = gcDev_nr704 +*!* pcDev_poz704 = gcDev_poz704 + + + + + +*!* *----------optiuni analitice pt 704 + +*!* IF !EMPTY(gcDEV_P704) +*!* lcSql = [UPDATE ] + gcS + [.optiuni SET varvalue = '] + ALLTRIM(gcDEV_P704) + [' where varname =] + ['DEV_P704'] +*!* ELSE +*!* lcSql = [UPDATE ] + gcS + [.optiuni SET varvalue = '] + [' where varname =] + ['DEV_P704'] +*!* ENDIF +*!* lnSucces = goExecutor.oExecute(lcSql) +*!* If lnSucces < 0 +*!* amessagebox(goExecutor.cEroare,0+16,"Eroare") +*!* Return +*!* ENDIF +*!* IF EMPTY(gcDEV_S704) +*!* lcSql = [UPDATE ] + gcS + [.optiuni SET varvalue = '] + [' where varname =]+[ 'DEV_S704'] +*!* ELSE +*!* lcSql = [UPDATE ] + gcS + [.optiuni SET varvalue = '] + ALLTRIM(gcDEV_S704) + [' where varname =] + [ 'DEV_S704'] +*!* ENDIF +*!* lnSucces = goExecutor.oExecute(lcSql) +*!* If lnSucces < 0 +*!* amessagebox(goExecutor.cEroare,0+16,"Eroare") +*!* Return +*!* ENDIF + +*!* IF EMPTY(gcDEV_POZ704) +*!* lcSql = [UPDATE ] + gcS + [.optiuni SET varvalue = '] + [' where varname =]+[ 'DEV_POZ704'] +*!* ELSE +*!* lcSql = [UPDATE ] + gcS + [.optiuni SET varvalue = '] + ALLTRIM(gcDEV_POZ704) + [' where varname =] + [ 'DEV_POZ704'] +*!* ENDIF +*!* lnSucces = goExecutor.oExecute(lcSql) +*!* If lnSucces < 0 +*!* amessagebox(goExecutor.cEroare,0+16,"Eroare") +*!* Return +*!* ENDIF + +*!* IF EMPTY(gcDEV_NR704) +*!* lcSql = [UPDATE ] + gcS + [.optiuni SET varvalue = '] + [' where varname =]+[ 'DEV_NR704'] +*!* ELSE +*!* lcSql = [UPDATE ] + gcS + [.optiuni SET varvalue = '] + ALLTRIM(gcDEV_NR704) + [' where varname =] + [ 'DEV_NR704'] +*!* ENDIF +*!* lnSucces = goExecutor.oExecute(lcSql) +*!* If lnSucces < 0 +*!* amessagebox(goExecutor.cEroare,0+16,"Eroare") +*!* Return +*!* ENDIF + +*!* IF gcCuloare_fundal # lcCuloare +*!* ENDIF + +Endproc + +**********************sfarsit procedura viz_optiuni******************* +**********************inceput procedura viz_stocuri******************* +Procedure viz_stocuri +*!* +tcTipGest=[] +tnTipGest=0 +*!* +LOCAL lnTipGest, lcFiltruInitial,lcTipGest, lcFiltruPermis +lcFiltruTipGest = "" +lcFiltruPermis = "" +lnTipGest = tnTipGest +lcTipGest = "" +IF EMPTY(tcTipGest) + lcTipGest = [] +ELSE + lcTipGest = tcTipGest +ENDIF + +lcFiltruInitial = [a.an=]+ Alltrim(Str(gnAn))+[ and a.luna=]+ Alltrim(Str(gnLuna))+; + STRTRAN(gcCondSucursala,[id_sucursala],[a.id_sucursala]) +IF !EMPTY(lnTipGest) + lcFiltruTipGest = [ and a.nr_pag = ] + ALLTRIM(STR(lnTipGest)) +ENDIF + +IF EMPTY(gcGestPermis) + lcFiltruPermis = [ and 1=2] +else + lcFiltruPermis = [ and a.id_gestiune in (] + gcGestPermis + [)] +EndIf + +lcFiltruInitial = lcFiltruInitial + lcFiltruTipGest + lcFiltruPermis + +LOCAL lnStocObinv +lnStocObinv = 0 +DO INAINTE_DE_STOC WITH gnAn, gnLuna, lnTipGest, lnStocObinv in oinainte_de.prg + +PRIVATE postocuri,pcschema,pcselect,pcfiltru,pcorder +STORE '' TO postocuri + +pcschema=['nr_crt n(6),id_stoc n(20),an n(4),luna n(2),id_articol n(10),serie c(100),pret n(16,4),pretv n(16,4),'+]+; + ['tva n(16,4),tvav n(16,4),cants n(14,3),cant n(14,3),cante n(14,3),cont c(4),'+]+; + ['acont c(4),pretd n(16,4),dataora d,datain d,dataout d,proc_tvav n(5,2),'+]+; + ['id_gestiune n(5),codmat c(50),denumire c(100),um c(6),nr_pag n(2),nume_gestiune c(50),'+]+; + ['cgest c(20),um2 c(10),cant_bax n(9,4),grupa c(100),subgrupa c(100),id_valuta n(10), nume_val c(4),'+]+; + ['codmatf c(50), lot c(50), adata_expirare T,id_sucursala N(5),sucursala C(100),'+]+; + ['id_lucrare_rez N(10),nrord_rez C(50),id_part_rez N(10),part_rez C(100)'] +pcselect=['select row_number() over (order by a.denumire) as nr_crt,a.id_stoc,a.an,a.luna,a.id_articol,a.serie,'+]+; + ['a.pret,a.pretv,a.tva,a.tvav,a.cants,a.cant,a.cante,a.cont,a.acont,a.pretd,a.dataora,'+]+; + ['a.datain,a.dataout,a.proc_tvav,'+]+; + ['a.id_gestiune,a.codmat,a.denumire,a.um,a.nr_pag,a.nume_gestiune,a.cgest,a.um2,a.cant_bax,a.grupa,a.subgrupa, a.id_valuta, a.nume_val, a.codmatf, a.lot, a.adata_expirare,'+]+; + ['a.id_sucursala,a.sucursala,'+]+; + ['a.id_lucrare_rez,a.nrord_rez,a.id_part_rez,a.part_rez '+]+; + ['from vstoc a where 1=2'] +pcfiltru = [1=2] +pcorder=[1] +llAfiseaza=.F. +_SCREEN.MOUSEPOINTER= 11 +gencursor('postocuri','crsStocuri',pcselect,pcfiltru,pcschema,pcorder,llAfiseaza) +postocuri.ca_baza1.afisare() + +LOCAL loStocuri +loStocuri=CREATEOBJECT('frm_stocuri') +_SCREEN.MOUSEPOINTER= 0 +loStocuri.ntipgest = lnTipGest +PRIVATE pcListTipGest +pcListTipGest = [] +lnOptgrValue = IIF(loStocuri.ntipgest<>0,IIF(loStocuri.ntipgest=6,2,IIF(loStocuri.ntipgest=7,4,1)),3) +WITH loStocuri + .Lb_titlu_alb_b121.CAPTION = [STOCURI] + IIF(!EMPTY(lcTipGest),[ / ] + lcTipGest,[]) + .cFiltruInitial = lcFiltruInitial + .optgrup.VALUE = lnOptgrValue + *!* modificare v 2.0.5 + .but_verifica1.visible = .F. + *!* modificare v 2.0.5 ^ + IF lnOptgrValue = 1 + .optgrup.option2.VISIBLE = .F. + .optgrup.option3.VISIBLE = .F. + .optgrup.option4.VISIBLE = .F. + ENDIF + IF lnOptgrValue = 2 + .optgrup.option1.VISIBLE = .F. + .optgrup.option3.VISIBLE = .F. + .optgrup.option4.VISIBLE = .F. + ENDIF + IF lnOptgrValue = 4 + .optgrup.option1.VISIBLE = .F. + .optgrup.option2.VISIBLE = .F. + .optgrup.option3.VISIBLE = .F. + ENDIF + .optgrup.ENABLED = IIF(.ntipgest<>0,.F.,.T.) + IF .But_modifica1.VISIBLE + .But_modifica1.VISIBLE = IIF(.ntipgest<>0,.T.,.F.) + ENDIF +ENDWITH +loStocuri.SHOW(1) +RELEASE postocuri + +ENDPROC && viz_stocuri +****************************************************************************** +PROCEDURE export_cursor_excel +PARAMETERS tcAlias,tcListaCampuri,tcAliasCampuri + +ENDPROC && export_cursor_excel +**********************sfarsit procedura export_cursor_excel******************* diff --git a/Programe/ovariabile_globale.prg b/Programe/ovariabile_globale.prg new file mode 100644 index 0000000..06f424a --- /dev/null +++ b/Programe/ovariabile_globale.prg @@ -0,0 +1,79 @@ +PUBLIC gcCondLuna +*!* gcCondLuna = [((((extract(month from datafact) =]+Alltrim(Str(gnLuna))+; +*!* [ and extract(year from datafact) =]+Alltrim(Str(gnAn))+[) or (datafact is null )); +*!* and ]+; +*!* [ (extract (month from datai)<=]+Alltrim(Str(gnLuna)) + [ and extract(year from datai)<= ]+Alltrim(Str(gnAn))+[))]+; +*!* [ or ((extract (month from dataoravalid)>= ]+Alltrim(Str(gnLuna))+[ and extract(year from dataoravalid)>=]+Alltrim(Str(gnAn)) +[)]+; +*!* [ and id_tip > 1)]+ [)] + +*!* 30.06 +*!* lcDataFact= [ (a.facturat=1 and (extract(month from a.datafact) =]+Alltrim(Str(gnLuna))+[ and extract(year from a.datafact) =]+Alltrim(Str(gnAn))+[))] +*!* lcDataValid = [ (a.validat=1 and (extract (month from a.dataoravalid)>= ]+Alltrim(Str(gnLuna))+[ and extract(year from a.dataoravalid)>=]+Alltrim(Str(gnAn)) +[)) ] +*!* gcCondLuna = [ ((extract (month from a.datai)=]+Alltrim(Str(gnLuna)) + [ and extract(year from a.datai)= ]+Alltrim(Str(gnAn))+[) or ]+; +*!* [ (a.id_tip=1 and (a.facturat=0 or ] + lcDataFact + [) ) or (a.id_tip>1 and (a.validat=0 or ] + lcDataValid + [))) ] +lcDataFact= [ (a.facturat=1 and (extract(month from a.datafact) =]+Alltrim(Str(gnLuna))+[ and extract(year from a.datafact) =]+Alltrim(Str(gnAn))+[))] +lcDataValid = [ (a.validat=1 and (extract (month from a.dataoravalid)+extract(year from a.dataoravalid)*12=]+Alltrim(Str(gnLuna+gnAn*12)) +[)) ] +gcCondLuna = [ ((extract (month from a.datai)+extract(year from a.datai)*12=]+Alltrim(Str(gnLuna+gnAn*12))+[) or ]+; + [ ((extract (month from a.datai)+extract(year from a.datai)*12<]+Alltrim(Str(gnLuna+gnAn*12))+[) and ]+; + [ ((a.inch_validare=0 and (a.facturat=0 or ] + lcDataFact + [) ) or (a.inch_validare=1 and (a.validat=0 or ] + lcDataValid + [))))) ] +*!* If Nvl(gnDev_valregie,1) = 1 +*!* gcCondLuna = [ ((extract (month from a.datai)+extract(year from a.datai)*12=]+Alltrim(Str(gnLuna+gnAn*12))+[) or ]+; +*!* [ ((extract (month from a.datai)+extract(year from a.datai)*12<]+Alltrim(Str(gnLuna+gnAn*12))+[) and ]+; +*!* [ ((a.id_tip=1 and (a.facturat=0 or ] + lcDataFact + [) ) or (a.id_tip>1 and (a.validat=0 or ] + lcDataValid + [))))) ] +*!* Else +*!* gcCondLuna = [ ((extract (month from a.datai)+extract(year from a.datai)*12=]+Alltrim(Str(gnLuna+gnAn*12))+[) or ]+; +*!* [ ((extract (month from a.datai)+extract(year from a.datai)*12<]+Alltrim(Str(gnLuna+gnAn*12))+[) and ]+; +*!* [ ((a.id_tip in (1,3) and (a.facturat=0 or ] + lcDataFact + [) ) or (a.id_tip not in (1,3) and (a.validat=0 or ] + lcDataValid + [))))) ] +*!* Endif +****************************************************************************************************************** +PUBLIC gcGestPermis, gcGrupePermis,gnTipGest,gcGestPermis_Nume,gcGrupePermis_Nume +STORE '' TO gcGestPermis,gcGrupePermis,gcGestPermis_Nume,gcGrupePermis_Nume +STORE 0 TO gnTipGest + +lcSql = [select * from ] + gcs + [.VGEST_CORESP_UTIL_GRUPE where id_util =] + ALLTRIM(STR(gnIdUtil)) +lcCursor = [GRUPE_permis] +lnSucces = goExecutor.oExecute(lcSql,lcCursor) +goExecutor.oReset() +IF lnSucces > 0 + SELECT grupe_permis + SCAN + gcGrupePermis = gcGrupePermis + ',' + ALLTRIM(STR(id_grupe)) + gcGrupePermis_nume = gcGrupePermis_nume + ',' + ALLTRIM(nume_grupa) + ENDSCAN + gcGrupePermis = SUBSTR(gcGrupePermis,2) + gcGrupePermis_nume = SUBSTR(gcGrupePermis_nume,2) + USE IN grupe_permis +ENDIF + +IF '-1' $ gcGrupePermis + gcGestPermis = '-1' +ELSE + lcSql = [SELECT * FROM ] + gcs + [.VGEST_CORESP_GRUPE_GESTIUNI A JOIN ] + gcs + [.VGEST_CORESP_UTIL_GRUPE B ]+ ; + [ON A.ID_GRUPE = B.ID_GRUPE WHERE B.ID_UTIL = ] + ALLTRIM(STR(gnIdUtil)) + lcCursor = [gest_permis] + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + goExecutor.oReset() + IF lnSucces > 0 + SELECT gest_permis + SCAN + gcGestPermis = gcGestPermis + ',' + ALLTRIM(STR(id_gestiune)) + gcGestPermis_nume = gcGestPermis_nume + ',' + ALLTRIM(nume_gestiune) + ENDSCAN + gcGestPermis = SUBSTR(gcGestPermis,2) + gcGestPermis_nume = SUBSTR(gcGestPermis_nume,2) + USE IN gest_permis + ENDIF +ENDIF +SET STEP ON +* initializare variabile publice gnInchidereValidare1/2/3/4/5/6/7 +=cctipuri_deviz() +SELECT crstipuri_deviz +SCAN + lcVariabila = 'gnInchidereValidare' + ALLTRIM(STR(id_tip)) + PUBLIC &lcVariabila && gnInchidereValidare1 = 0/1 + &lcVariabila = NVL(inch_validare, 0) +ENDSCAN + +USE IN (Select('crstipuri_deviz')) + + \ No newline at end of file diff --git a/Programe/proceduri.prg b/Programe/proceduri.prg new file mode 100644 index 0000000..9285898 --- /dev/null +++ b/Programe/proceduri.prg @@ -0,0 +1,301 @@ +************************************************************************************ +Procedure CAUT_ALF +Parameters NUMEBAZA,NUMECIMP,CAPTEXT,VARMEM +Local MC0,MC1,MC2 +Set Safety Off +MC0='SELE '+NUMEBAZA +MC1='VARMEM=M.'+NUMECIMP +MC2='SET order TO TAG '+NUMECIMP + +&MC0 +Go Top +If Eof() + Appe Blank +Endif +&MC2 +OCA=Createobject("CAUTALF") +OCA.Caption=CAPTEXT +OCA.GRID1.RecordSource=NUMEBAZA +OCA.GRID1.COLUMN1.ControlSource=NUMECIMP +OCA.Show(1) + +Scatter Memvar +&MC1 + +Return +************************************************************************************ +Procedure CAUT_ALFa +Parameters NUMEBAZA,NUMECIMP,CAPTEXT,VARMEM +Local MC0,MC1,MC2 +Set Safety Off +MC0='SELE '+NUMEBAZA +MC1='VARMEM=M.'+NUMECIMP +MC2='SET order TO TAG '+NUMECIMP + +&MC0 + +Go Top +If Eof() + Appe Blank +Endif + +&MC2 +OCA=Createobject("CAUTALFa") +OCA.Caption=CAPTEXT +OCA.GRID1.RecordSource=NUMEBAZA +OCA.GRID1.COLUMN1.ControlSource=NUMECIMP +OCA.cmdrenunt1.Visible=.T. +OCA.Show(1) + +Scatter Memvar +&MC1 + +Return +************************************************************************************ +Procedure CODARE +Sele COD +If Flock() + Goto Bottom +*SCATTER MEMVAR + m.COD=COD+1 + Append Blank +*m.COD=RECNO() + Gather Memvar +Endif +Unlock +Return +************************************************************************************ +Procedure mesaj +Parameters m1,m2 +ot=Create('text') +ot.label2.Caption=m1 +ot.label3.Caption=m2 +ot.Show(1) +Return +************************************************************************************ +Procedure mesajval +Parameters m1,m2 +ot=Create('textval') +ot.label2.Caption=m1 +ot.valoare=m2 +ot.Show(1) +Return +************************************************************************************ +*!* Procedure IESIRE +*!* *close tables +*!* *close database +*!* *set defa to &dirgen +*!* *erase actactan.* +*!* *erase ?temp.* +*!* Quit +*!* Return +*!* ************************************************************************************ +*!* Function e_ultima_luna +*!* Sele calendar +*!* Loca For m.NL=NL And m.an=an +*!* Skip +*!* If Eof() +*!* ultima_luna=.T. +*!* Return .T. +*!* Else +*!* ultima_luna=.F. +*!* Return .F. +*!* Endif +*!* ************************************************************************************ +*!* Procedure danu +*!* Parameters m1 +*!* od=Create('danu') +*!* od.label1.Caption=m1 +*!* od.Show(1) +*!* Return +*!* ************************************************************************************ +*!* Procedure danuquit +*!* Parameters m1 +*!* od=Create('danu') +*!* od.label1.Caption=m1 +*!* od.Show(1) +*!* If buton=2 +*!* Quit +*!* Endif +*!* Return +************************************************************************************ +Procedure nrord +Parameters ALI +Sele &ALI +A=Reccount() +If A=0 + Return +Endif +If A>65000 + Return 0 +Endif +Declare NROR(A) +K=0 +Scan + K=K+1 + NROR(K)=Recno() +Endscan +Return +************************************************************************************ +Function NRCRT +NR=Ascan(NROR,Recno()) +Return NR +************************************************************************************ +Procedure inchidprog + +Endproc +*!* Procedure inchidprog +*!* Local CC,M.NUMESTATIE,UU +*!* Return +*!* UU=utilizator + +*!* *IF !FILE('&loc\&nfscurt\tempo\OPTIUNI.DBF') +*!* *RETURN +*!* *ENDIF +*!* If !Used('OPTIUNI') +*!* Return +*!* Endif +*!* *SELE 0 +*!* *USE &loc\&nfscurt\tempo\OPTIUNI SHAR ALIAS OPTIUNI +*!* Sele OPTIUNI +*!* Loca For OPTIUNE='RETEA' +*!* If !Found() Or (Found() And !DA) +*!* Sele OPTIUNI +*!* Use +*!* Return +*!* Endif +*!* Sele OPTIUNI +*!* Use + +*!* If !File('C:\CONTAFIN\TEMP\RETEA.DBF') +*!* Return +*!* Endif +*!* Sele 0 +*!* Use C:\CONTAFIN\TEMP\RETEA Shar Alias RETEA +*!* m.NUMESTATIE=Allt(NUMESTATIE) +*!* CC=DIRGEN +*!* Use + +*!* If File('&DIRGEN\Dateretea\istoric.DBF') +*!* Sele 0 +*!* Use &DIRGEN\Dateretea\istoric Share Alias istoric +*!* Else +*!* Sele 0 +*!* Use &CC\START2000\Data\istoric Share Alias istoric +*!* Endif + +*!* Sele istoric +*!* Set Order To DATAORAINT +*!* Loca For Empty(dataoraies) And Allt(statie)=m.NUMESTATIE And Allt(utilizator)=Allt(UU) +*!* If Found() +*!* If Flock() +*!* Repl dataoraies With Datetime() +*!* Unlock +*!* Endif +*!* Endif +*!* Sele istoric +*!* Use + + +*!* If File('&DIRGEN\Dateretea\activ.DBF') +*!* Sele 0 +*!* Use &DIRGEN\Dateretea\Activ Share Alias Activ +*!* Else +*!* Sele 0 +*!* Use &CC\START2000\Data\Activ Share Alias Activ +*!* Endif + +*!* Sele Activ +*!* Loca For Allt(statie)=m.NUMESTATIE +*!* If !Found() +*!* Wait Wind 'Aceasta statie nu este inregistrata in server!' +*!* Else +*!* Sele Activ +*!* If Flock() +*!* Repl DEVIZE With .F. +*!* Endif +*!* Unlock +*!* Endif +*!* Sele Activ +*!* Use + + +*!* Return +************************************************************************************ +Procedure caut_alfa_cursor +Parameters NUMEBAZA,NUMECIMP,CAPTEXT,VARMEM +Local MC0,MC1,MC2, llVizibil +Set Safety Off +llVizibil = .T. + +MC0='SELE '+NUMEBAZA +MC1='VARMEM=M.'+NUMECIMP +*MC2='SET order TO TAG '+NUMECIMP +MC2 = [INDEX ON ] +NUMECIMP+ [ TAG nume OF &loc\&nfscurt\tempo\xindex.idx COMPACT ASCENDING ] + + +*!* &MC0 +*!* &MC2 +*!* GO TOP + +Local lcNumeCol2 +Store '' To lcNumeCol2 + +LcCol = Alltrim(NUMEBAZA) + '.cod_fiscal' +If Type(LcCol) # 'U' + lcNumeCol2 = 'cod_fiscal' +Endif + +LcCol = Alltrim(NUMEBAZA) + '.gest' +If Type(LcCol) # 'U' + lcNumeCol2 = 'gest' +Endif + +LcCol = Alltrim(NUMEBAZA) + '.id_sectie' +If Type(LcCol) # 'U' + lcNumeCol2 = 'id_sectie' +Endif + +If Empty(lcNumeCol2) + lcNumeCol2 = 'space(4)' + llVizibil = .F. +Endif + +LcCol = Alltrim(NUMEBAZA) + '.id' +If Type(LcCol) # 'U' + lcNumeCol3 = 'id' +Else + lcNumeCol3 = 'space(4)' +Endif + +Select Distinct &NUMECIMP, &lcNumeCol2, &lcNumeCol3 From (NUMEBAZA) Into Cursor tnomenclator Readwrite Order By &NUMECIMP + +OCA=Createobject("CAUTALFa") +OCA.Caption=CAPTEXT +OCA.GRID1.RecordSource='tnomenclator' +OCA.GRID1.COLUMN1.ControlSource = NUMECIMP +OCA.GRID1.COLUMN2.ControlSource = lcNumeCol2 +OCA.GRID1.COLUMN2.Visible = llVizibil +OCA.cmdrenunt1.Visible=.T. +OCA.command1.Visible=.F. +OCA.command2.Visible=.F. +OCA.command3.Visible=.F. +OCA.Show(1) + +If buton=2 + Use In tnomenclator + Return +Endif + +lcFile = Addbs(gcTempPath) + 'xindex.idx' +If File(lcFile) + Set Index To + Delete File &lcFile +Endif + +Select tnomenclator +Scatter Memvar +&MC1 + +Use In tnomenclator +Return \ No newline at end of file diff --git a/Programe/roaauto.prg b/Programe/roaauto.prg new file mode 100644 index 0000000..253ebfb --- /dev/null +++ b/Programe/roaauto.prg @@ -0,0 +1,993 @@ +Parameters tparam + +Private gcNumeProgram +Local lcStem +lcStem = Upper(Juststem(Sys(16,0))) +gcNumeProgram="ROAAUTO" +IF !LIKE(gcNumeProgram + '*', UPPER(ALLTRIM(JUSTSTEM(SYS(16,0))))) + Messagebox("Nu puteti porni acest program!",0+16,"Atentie") + RETURN +ENDIF + +Local lchost, lcUserName, lcPassword, lnIdUtil, lnIdProgram, lcUserNameApp,lcPasswordApp +Store '' To lchost, lcUserName, lcPassword, lcUserNameApp,lcPasswordApp +Store 0 To lnIdUtil, lnIdProgram +_Screen.Icon = gcNumeProgram+".ico" + +Set Century On +Set Deleted On +Set Date To Dmy +Set Exclusive Off +Set Cpdialog Off +Set Talk Off +Set Safety Off +Set Escape Off +Set Exact On +Set Mark To '/' +Set Ansi On +Set Console Off +Set Notify Off +Set Seconds Off +Set NullDisplay To '' +Set Hours To 24 +Set Decimals To 4 +_Screen.Visible=.F. +_Screen.AutoCenter=.T. + +**************************************************************** +* VARIABILE +Local lcMainClassLib +Local lcLastSetTalk,lcLastSetPath,lcLastSetClassLib,lcOnShutdown + +**************************************************************** +* VARIABILE +Public CRLF,CR,LF,Tab +Store Chr(13) + Chr(10) To CRLF +CR=Chr(13) +LF=Chr(10) +Tab=Chr(9) + +Public pcTitlu,pl_verificat +Store "" To pcTitlu +Store .F. To pl_verificat +*********************************************************************************** +** Variabile vechi +Declare nror[65000] +Public pcNl,pcAn +PUBLIC buton,primadata,dirgen,m.ctva,m.ctvam,m.ctvai,m.den +Store "" To pcNl,pcAn,m.den && se initializeaza in start00 +Store 1 To BUTON,col_menu +STORE .T. TO primadata +*********************************************************************************** +*** DECLARATII DE VARIABILE PUBLICE +*********************************************************************************** +*-- Save and configure environment.*********************** +lcLastSetTalk=Set("TALK") +Set Talk Off +lcLastSetPath=Set("PATH") + +Set Procedure To "d:\ROA\ROAAUTO\COMUN\UTILE\web\WWUTILS.PRG" Additive +Set Procedure To "d:\ROA\ROAAUTO\COMUN\UTILE\web\WWAPI.PRG" Additive + +PRIVATE gcAppPath,gcAppName,gcTempPath, gcCaleServerDate, gcUserNameApp, gcPasswordApp,gcDirMare && gcAppDataPath +Store '' To gcUserNameApp, gcPasswordApp, gcAcces && gnNivelUtilizator, gnGrupUtilizator +Public gcSchemaPath, gcAntet +Store '' To gcSchemaPath, gcAntet + +gcAppPath = Addbs(ShortPath(GetAppStartPath())) +If Right(gcAppPath ,9)="PROGRAME\" + gcAppPath = Substr(gcAppPath ,1,Len(gcAppPath )-9) +Endif +gcAppName=Allt(Uppe(Juststem(Sys(16,0)))) +gcUtilizatoriPath = gcAppPath + "UTILIZATORI\" + +Set Default To (gcAppPath) +lcPath = gcAppPath + 'Date;' + ; + gcAppPath + 'Include;' + ; + gcAppPath + 'FERESTRE;' + ; + gcAppPath + 'GRAFICE;' + ; + gcAppPath + 'CLASE;' + ; + gcAppPath + 'MENIURI;' + ; + gcAppPath + 'PROGRAME;' + ; + gcAppPath + 'RAPOARTE;' + ; + gcAppPath + 'COMUN\CLASE;' + ; + gcAppPath + 'COMUN\FERESTRE;' + ; + gcAppPath + 'COMUN\PROGRAME;' + ; + gcAppPath + 'COMUN\GRAFICE;' + ; + gcAppPath + 'COMUN\RAPOARTE;' + ; + gcAppPath + 'COMUN\UTILE\GRIDEXTRAS;' + ; + gcAppPath + 'COMUN\UTILE\EXCEL;' + ; + gcAppPath + 'COMUN\UTILE\CTL32;' + ; + gcAppPath + 'COMUN\UTILE\HPDF;' + ; + gcAppPath + 'COMUN\UTILE\HPDF\REPORTOUTPUT;' + ; + gcAppPath + 'COMUN\UTILE\WEB;' + ; + Addbs(Substr(gcAppPath,1,Rat([\],gcAppPath,2)))+[COMUNROA\] + +SET PATH TO &lcPath ADDITIVE + +*!* Set Path To ;Date;Include;FERESTRE;GRAFICE;Help;CLASE;MENIURI;PROGRAME;RAPOARTE; + +PUSH Menu _Msysmenu +lcLastSetClassLib=Set("CLASSLIB") +lcMainClassLib = m.gcAppPath + "COMUN\clase\appwiz.vcx" + +**************************************************************** +* CLASE +Set Classlib To (lcMainClassLib) Additive +Set Classlib To baza Additive +Set Classlib To CAUT Additive +*!* Set Classlib To FERESTREBAZA Additive +**************************************************************** +Set Classlib To registry Additive +Set Classlib To odevize Additive +Set Classlib To decabaza Additive +Set Classlib To onomenclatoare Additive +Set Classlib To onom_devize Additive +Set Classlib To oviz_devize Additive +Set Classlib To cauta_alfa_forms Additive +*!* Set Classlib To ointroduceri Additive +Set Classlib To ferestre_oracle Additive +Set Classlib To caut_ora Additive +Set Classlib To Messagebox Additive +SET CLASSLIB TO otoolbar ADDITIVE +SET CLASSLIB TO serii_numere ADDITIVE +SET CLASSLIB TO stocuri additive +SET CLASSLIB TO ctl32_statusbar_fals.vcx additive +SET CLASSLIB TO ocriterii.vcx additive +*!* modificare v 2.0.6 +SET CLASSLIB TO wwdialogs.vcx additive +*!* modificare v 2.0.6 ^ +SET CLASSLIB TO comun.vcx additive +SET CLASSLIB TO gridextras.vcx additive +SET CLASSLIB TO ferestre_cere_date.vcx ADDITIVE && modificare v 2.0.28 +SET CLASSLIB TO onom_articole.vcx ADDITIVE && modificare v 2.0.41 +SET CLASSLIB TO overificari.vcx ADDITIVE && modificare v 2.1.2 +SET CLASSLIB TO accessibility.vcx additive +**************************************************************** +* PROCEDURI +Set Procedure To ooperatii_comune Additive +Set Procedure To quitapp Additive +Set Procedure To init_program Additive +Set Procedure To proceduri_comune Additive +*!* modificare v 2.0.1 +*!* Set Procedure To oproceduri_casa_marcat_e500 Additive +Set Procedure To controllerecr Additive +*!* modificare v 2.0.1 ^ +Set Procedure To oproceduri_comune Additive +Set Procedure To gencursor.prg Additive +Set Procedure To updateserver.prg Additive +Set Procedure To update_devize.prg Additive +Set Procedure To update_nomenclator.prg Additive +Set Procedure To onom_devize.prg Additive +Set Procedure To onomenclatoare Additive +Set Procedure To proceduri Additive +Set Procedure To oproceduri_ams Additive +Set Procedure To oproceduri_vizualizare Additive +Set Procedure To ocautare Additive +Set Procedure To oproceduri_devize Additive +Set Procedure To oproceduri_listari Additive +Set Procedure To oproceduri_facturare ADDITIVE +SET PROCEDURE TO email ADDITIVE +Set Procedure To oinit_optiuni Additive +Set Procedure To osecurity Additive +Set Procedure To pmenu Additive +Set Procedure To acces_meniu Additive +Set Procedure To wwxmlhttp.prg Additive +Set Procedure To ini.prg Additive +Set Procedure To oserii_numere.prg Additive +Set Procedure To oheader.prg Additive +Set Procedure To cauta_alfa.prg Additive +Set Procedure To suma_in_vorbe Additive +Set Procedure To wwutils.prg Additive +SET PROCEDURE TO oserii_numere.prg additive +SET PROCEDURE TO oexport.prg additive +SET PROCEDURE TO wwconfig.prg additive +*!* modificare v 2.0.6 +SET PROCEDURE TO iniacces.prg ADDITIVE +SET PROCEDURE TO oupdate.prg additive +SET PROCEDURE TO procese.prg additive +SET PROCEDURE TO version.prg additive +SET PROCEDURE TO xmlaccess.prg additive +SET PROCEDURE TO xmlparser.prg additive +SET PROCEDURE TO filebringer.prg additive +SET PROCEDURE TO wwcodeupdate.prg additive +SET PROCEDURE TO wwhttp.prg ADDITIVE +Set Procedure To wwApi.prg Additive +SET PROCEDURE TO xdate.prg Additive +SET PROCEDURE TO validare.prg Additive +SET PROCEDURE TO regex.prg Additive + +SET PROCEDURE TO excelxml.prg ADDITIVE + +Declare Integer GetPrivateProfileString In Kernel32 ; + string, String, String, String @, Integer, String +Declare Integer WritePrivateProfileString In Kernel32 ; + string, String, String, String +Declare Integer CopyFile In kernel32; + STRING lpExistingFileName,; + STRING lpNewFileName,; + INTEGER bFailIfExists +Declare Integer URLDownloadToFile In urlmon.Dll; + INTEGER pCaller, String szURL, String szFileName,; + INTEGER dwReserved, Integer lpfnCB +Declare Integer PathFileExists In shlwapi; + STRING pszPath +*!* modificare v 2.0.6 ^ +*!* modificare v 2.0.8 +Set Procedure To ofacturare.prg Additive +Set Procedure To ofacturare_comun.prg Additive +*!* modificare v 2.0.8 ^ +*********************************************************************************** +If Pcount() = 1 And Type('tparam') = 'C' + glParametri = .T. + Private laParametri + Declare laParametri[1] + lcParam = Alltrim(tparam) + lnNr = lista2array(lcParam,@laParametri,";") + If lnNr < 5 + AMessagebox('Numar incorect de parametri',0+16,'Eroare') + Return + Endif + lchost = laParametri[1] + lcUserName = laParametri[2] + lcPassword = laParametri[3] + lnIdUtil = Round(Val(laParametri[4]),0) + lnIdProgram = Round(Val(laParametri[5]),0) +Else + glParametri = .F. + lchost = 'JCSSERVER' + lcUserName = 'CONTAFIN_ORACLE' + lcPassword = '' + lnIdUtil = 0 + lnIdProgram = 0 +Endif + +*!* Public glVerificTabel && daca se verifica structura tabelelor in totv.prg +*!* glVerificTabel=.T. + + + +Store "" To gcTempPath, gcCaleServerDate + +*!* modificare v 2.0.6 +*!* If !Directory(gcAppDataPath) +*!* Md (gcAppDataPath) +*!* Endif +*!* modificare v 2.0.6 ^ +*********************************************************************************** +*** DIRGEN + +liat = Rat("\",gcAppPath,2) +gcDirMare = Addbs(Left(gcAppPath,liat-1)) +dirgen = gcDirMare + +*!* modificare v 2.1.9 +PRIVATE gcReportPreviewer, gcReportPreviewerPath +gcReportPreviewer = "FoxyPreview" && oexport.prg +gcReportPreviewerPath = gcDirMare + "COMUNROA\" +*!* modificare v 2.1.9 ^ + +gcSecurityPath = gcDirMare + 'Security\' +gcSecurityFile = gcSecurityPath + 'ROA_SECURITY.TXT' + +Private poLog,goLog && obiect pt logarea mesajelor sistemului +poLog = Newobject("Log_Mesaje","Log_Mesaje.prg") +goLog = poLog + +*!* modificare 21.06 +PRIVATE gcGeneralIniFile,gcSettingsFile +gcGeneralIniFile = m.gcDirMare + "settings.ini" +gcSettingsFile = m.gcGeneralIniFile +IF !FILE(gcGeneralIniFile) + TEXT TO lcSettings NOSHOW + [errors] + host=http://83.103.197.79:3000/errors/create_xml + ENDTEXT + STRTOFILE(lcSettings, gcGeneralIniFile) +ENDIF +*!* ^ + +Public glQuit +glQuit = .F. +Public gnIdIstoric +gnIdIstoric = 0 + +*!* modificare v 2.1.9 +Private gcLocalePath, goLocale, gcLocale +gcLocalePath = gcAppPath + "Locale\" +lcLanguage = getini(gcGeneralIniFile,"locale","lang") +llLocale= getini(gcGeneralIniFile,"locale","llocale") +If Empty(m.lcLanguage) + gcLocale = 'Romana' +Else + gcLocale = m.lcLanguage +Endif +Local lcObjLocale +If gcLocale = 'Romana' + lcObjLocale = [Locale_dummy] +Else + lcObjLocale = [Locale] +Endif +goLocale=Newobject(lcObjLocale,"Locale.vcx") +If !Empty(m.llLocale) And m.llLocale<>'0' + goLocale.llocale=.T. +Endif +Release lcObjLocale +goLocale.locale = gcLocale +*!* If verificari() +*!* _Screen.Visible=.T. +*!* aMessagebox("Se fac verificari programului!"+CRLF+"Va rugam reveniti!",64,"ROA FACTURARE") +*!* glQuit= .T. +*!* Quit +*!* Endif +*!* If !Debug_Start() +*!* lcParam=tparam +*!* If Empty(tparam) Or (Type('tParam')='C' And !verific_start(tparam,gcDirMare,gcAppName)) +*!* _Screen.Visible=.T. +*!* aMessagebox("Programul trebuie pornit doar din START!",64,"ROA FACTURARE") +*!* Quit +*!* Endif +*!* Endif +*!* modificare v 2.1.9 ^ + +*** verificare serie permanenta +*!* Public tipar,SER_PERM,SER_PERI,VERSIUNE +*!* Store .F. To SER_PERM,SER_PERI + +***************************** VARIABILE ORACLE +*!* PRIVATE goUtilizator +Private gnHandle,gnidutil,GCCODFISCAL,GCADRESA,GCNUMEFIRMA,GCMONEDA,GNDIFZILE, gcUserNameApp, gcPasswordApp +Private gnButon && variabila pentru renunt si terminat +Store 2 To gnButon +Store '' To GCCODFISCAL,GCADRESA,GCNUMEFIRMA, gcUserNameApp, gcPasswordApp, gcAcces +gnHandle = -1 +gnidutil = 0 +Private gcHost, gcUserName, gcPassword, gofundal, gnIdProgram, gnId_prg_owner +gnId_prg_owner = 0 +gnIdProgram = 0 +gofundal='' + +PRIVATE gcCopyRight +gcCopyRight = ' ROA Romfast SRL' + +Private goFirma,gnIdFirma,gcFirma,gnAn,gnLuna && ,gnPA,gnPC,gnId_Firma +&& STORE 0 TO gnPA,gnPC && nr. de zecimale afisare, calcul +Store Null To goFirma +Store 0 To gnAn,gnLuna,gnIdFirma && ,gnId_Firma +Store '' To gcFirma + +Private glUltimaLuna,glPrimaLuna, glLunaBuna,glLuna_neplatita,glLunaInchisa +Store .F. To glUltimaLuna,glPrimaLuna, glLunaBuna,glLuna_neplatita,glLunaInchisa + +***toolbar*** +PRIVATE otool,ohelp +STORE '' TO otool,ohelp +***toolbar*** + +Private gcS && schema firmei +Store '' To gcS + +*!* modificare v 2.0.28 +PUBLIC glFontCharSet +glFontCharSet = AFONT(laFontCharSet,"Arial Narrow",238) +*!* modificare v 2.0.28 ^ + +IF TYPE('laparametri',1)="A" + IF ALEN(laParametri,1)=10 + gnAn = VAL(laParametri[7]) + gnLuna = VAL(laParametri[8]) &&lansare noua + GcS = laParametri[9] + gnIdFirma = VAL(laParametri[10]) && modificare v 2.0.29 + ENDIF +ENDIF + +&& obiect global wrap pt sqlexec cu text eroare si succes +Private goExecutor +goExecutor = Createobject("oExecutor") + +Private goConn +goConn = Createobject("oConn") +*!* modificare v 2.0.2 +Private goExport +goExport = CREATEOBJECT("oExportConfig") +*!* modificare v 2.0.2 ^ + +*!* modificare 21.06 +PRIVATE goMyXMLHTTP +lcHostErrors = getini(gcGeneralIniFile,'errors','host') +goMyXMLHTTP = CREATEOBJECT("MyXMLHTTP", lcHostErrors) +*!* ^ + +&& obiect global pt luna aleasa din calendar +Private goCalendar +Store Null To goCalendar + +gcHost = lchost +gcUserName = lcUserName +gcPassword = lcPassword +gcUserNameApp = lcUserNameApp +gcPasswordApp = lcPasswordApp +gnidutil = lnIdUtil +gnIdProgram = lnIdProgram + +*!* modificare v 2.0.1 +PRIVATE goControllerEcr +goControllerEcr = CreateObject('oControllerEcr') +*!* modificare v 2.0.1 ^ + +If !glParametri + lnValid = getcrsSecurity(gcSecurityFile) + If lnValid > 0 + If Used('crsHost') + Select crsHost + Go Top + gcHost = Alltrim(Host) + gcUserName = Alltrim(schema) + gcPassword = Alltrim(pwd) + Use In crsHost + Endif + Endif +Endif + +***************************** VARIABILE ORACLE +*!* Use &gcAppPath\SER In 0 Alias SER Shared +*!* Select SER +*!* Go Top +*!* tipar=TIP +*!* SER_PERM=SER_PERMAN +*!* SER_PERI=SER_PERIOD +*!* VERSIUNE=VERcont +*!* MODEL_PROGRAM=MODEL +*!* Use In SER +*!* parolamea=Substr(tipar,Month(Date()),1) +*!* parolamea=parolamea+Allt(Str(Day(Date())))+Allt(Str(Month(Date()))) + +*!* If !_DEBUG() +*!* If SER_PERM And !verif_ser_perm() +*!* Quit +*!* Endif +*!* Endif + +*!* Public cales,eserver,loc,numestatie +*!* eserver=.F. +*!* Store '' To cales,loc,numestatie + +Public NUMEPROGRAM,MENIUPROGRAM,FUNDALPROGRAM +NUMEPROGRAM='ROAAUTO' +*!* MENIUPROGRAM=gcAppPath+"meniuri\cont2000.mpr" +*!* FUNDALPROGRAM=gcAppPath+"FERESTRE\FUNDAL.scx" +_program='roaauto' + +*!* *** INITIALIZEZ CAI DATE +*!* If .F. +*!* If !Start_Nou() +*!* _Screen.WindowState=2 +*!* Cd \ +*!* If !Directory('c:\contafin') +*!* Md contafin +*!* Endif +*!* Cd c:\contafin\ +*!* If !Directory('temp') +*!* Md temp +*!* Endif + + +*!* Sele 0 +*!* Use c:\contafin\temp\ceprogram Alias ceprogram +*!* Scat Memv +*!* *wait wind m.util +*!* Sele ceprogram +*!* Use +*!* utilizator=m.UTIL +*!* GRUPUL=M.nrgrup +*!* If M.nrgrup=0 +*!* E_UN_SUPERVIZOR=.T. +*!* Else +*!* E_UN_SUPERVIZOR=.F. +*!* Endif + +*!* If File('&DIRGEN\START2000\DATA\RETEA.DBF') +*!* If !File('c:\contafin\temp\RETEA.dbf') +*!* Copy File &DIRGEN\START2000\Data\RETEA.* To c:\contafin\temp\RETEA.* +*!* Endif +*!* Sele 0 +*!* Use c:\contafin\temp\RETEA +*!* eserver=Server +*!* cales=Allt(CALESERVER) +*!* Use In RETEA +*!* Endif +*!* Else + +*!* gcTempPath = Init_Cale_Temp(DIRGEN) +*!* If !Directory(gcTempPath) +*!* Md (gcTempPath) +*!* Endif + +*!* cales = Init_Cale_Server_Date(DIRGEN) +*!* eserver = .T. +*!* numestatie = Init_Nume_Statie(DIRGEN) +*!* utilizator = Init_Nume_Utilizator(DIRGEN) +*!* m.nivel = Round(Val(Init_Nivel_Utilizator(DIRGEN)),0) +*!* m.CONTAB = Upper(Alltrim(Init_NumeAlternativ(DIRGEN))) + +*!* lcQuitData = Alltrim(DIRGEN)+"\dateretea" +*!* lcQuitName = "start_quitapp" +*!* Private goQuitApp && I'm making it private so it will die with the application. +*!* goQuitApp = quitapp(lcQuitData,lcQuitName) + +*!* gnIdIstoric = Start_Istoric(m.utilizator, gcAppName, numestatie, Addbs(DIRGEN)+"DATERETEA\", "START_ISTORIC","start_ids") + + +*!* Endif +*!* Endif + +lcOnShutdown="ShutDown()" +On Shutdown &lcOnShutdown +On Error ErrorHandler(Error(),Program(),Lineno()) +_Shell="DO Cleanup IN roaauto.prg" + +*-- Instantiate application object.*************************** +Release goApp +Public goApp +goApp=Createobject("wzApplication") + +*-- Configure application object.***************************** +*!* goApp.SetCaption("DEVIZE") +Local laVersion +Dimension laVersion(12) +If Agetfileversion(laVersion, Sys(16,0)) > 0 + NUMEPROGRAM = laVersion(10) +Endif +Release laVersion + +goApp.SetCaption(NUMEPROGRAM) +goApp.cStartupMenu = m.gcAppPath + "\meniuri\roaauto" +goApp.cStartupForm = m.gcAppPath + 'COMUN\ferestre\frm_login.scx' + +_Screen.WindowState=2 +*-- Show application. +goApp.Show +*-- Release application. +Release goApp + +*-- Restore default menu. +Pop Menu _Msysmenu + +*-- Restore environment. +On Error +On Shutdown +If Not lcLastSetClassLib==Set("classlib") + Release Classlib (lcMainClassLib) +Endif +If Empty(lcLastSetPath) + Set Path To +Else + Set Path To &lcLastSetPath +Endif +If lcLastSetTalk=="ON" + Set Talk On +Else + Set Talk Off +Endif +Return +************************************************************************************ +* FUNCTII______________________________________________________________________ +Function ErrorHandler(nError,cMethod,nLine) +Local lcErrorMsg,lcCodeLineMsg + +Wait Clear +lcErrorMsg=Message()+Chr(13)+Chr(13) +lcErrorMsg=lcErrorMsg+"Method: "+cMethod +lcCodeLineMsg=Message(1) +If Between(nLine,1,10000) And Not lcCodeLineMsg="..." + lcErrorMsg=lcErrorMsg+Chr(13)+"Line: "+Alltrim(Str(nLine)) + If Not Empty(lcCodeLineMsg) + lcErrorMsg=lcErrorMsg+Chr(13)+Chr(13)+lcCodeLineMsg + Endif +ENDIF + +*!* modificare 21.06 +If Type('goMyXMLHTTP') = 'O' + lcErrorMsg = Sys(0) + ":" + Iif(Type('GCS')='C'," " + GCS,"") + Chr(13) +Chr(10) + lcErrorMsg + lcUserName = gcUserNameApp + lcProgram = Juststem(Sys(16,0)) + goMyXMLHTTP.postError(lcErrorMsg, lcUserName, lcProgram) +Endif +*!* ^ + +If AMessagebox(lcErrorMsg,17,_Screen.Caption)#1 + On Error + Return .F. +Endif +Endfunc +************************************************************************************ +Function Shutdown +*!* =End_Istoric(gnIdIstoric, Addbs(DIRGEN)+"DATERETEA\", "START_ISTORIC") +If Type("goApp")=="O" And Not Isnull(goApp) + Return goApp.OnShutDown() +Endif +Cleanup() +Quit +Endfunc +************************************************************************************ +Function Cleanup +If Cntbar("_msysmenu")=7 + Return +Endif +On Error +On Shutdown +Set Classlib To +Set Path To +Clear All +Close All +Pop Menu _Msysmenu +Return +************************************************************************************ +*!* Function verif_ser_perm +*!* Clear +*!* Return PORNIRE() +************************************************************************************ +Function PORNIRE +Set Exact On +Private calewin,calesys,checksum1,checksum2,serinreg,serdisk,file1,file2,valret,serdisktemp,ser1,ser2,key1,KEY2 +Store '' To calewin,serinreg,serdisk,calesys,serdisktemp,catehd,ser1,ser2,key1,KEY2 +Store 0 To checksum1,checksum2 +Store .T. To valret +Declare Integer SHGetFolderPath In SHFOLDER.Dll ; + INTEGER hwndOwner, ; + INTEGER nFolder, ; + INTEGER hToken, ; + INTEGER dwFlags, ; + STRING @ pszPath +Declare Integer GetActiveWindow In WIN32API +#Define CSIDL_WINDOWS 36 +#Define CSIDL_SYSTEM 37 +#Define CSIDL_PROGRAMS 38 +lcPath = Repl(Chr(0),261) +=SHGetFolderPath(GetActiveWindow(),CSIDL_WINDOWS,0,0,@lcPath) +calewin=Left(lcPath,At(Chr(0),lcPath)-1) +lcPath = Repl(Chr(0),261) +=SHGetFolderPath(GetActiveWindow(),CSIDL_SYSTEM,0,0,@lcPath) +calesys=Left(lcPath,At(Chr(0),lcPath)-1) +&&se verifica existenta celor trei fisiere +If (Not File(calesys+'\diskserial.dll')) Or (Not File(calesys+'\getmacip.dll')) Or (Not File(calewin+'\comdir.snr')) + valret=.F. +Endif +If valret + file1=Filetostr(calesys+'\diskserial.dll') + checksum1=Sys(2007,file1) + file2=Filetostr(calesys+'\getmacip.dll') + checksum2=Sys(2007,file2) +&&severifica daca dll-urile nu au fost modificate + If (Val(checksum1) != 58755) Or (Val(checksum2) != 30476) + valret=.F. + Endif +Endif +&&se citesc seriile tutturor celor patru hard disk-uri posibile(pe IDE primary master,primary slave...) +&&se tine minte primul cu seria nenula-daca nu s-a putut citi seria de la nici unul se pune o serie default +&&seria default este "NUAREHAR" +If valret + Declare Integer GetSerialNumber In diskSerial.Dll Integer ,String + catehd=0 + For i=0 To 3 + serdisktemp=Space(40) + GetSerialNumber(i,@serdisktemp) + If (Len(Alltrim(serdisktemp))!=0) And (catehd=0) + serdisktemp=sircaracter(serdisktemp) + serdisk=serdisktemp + catehd=catehd+1 + Endif + Endfor + If (Len(Alltrim(serdisk))=0) + serdisk='NUAREHAR' + Else + If ((Len(Alltrim(serdisk))>0) And (Len(Alltrim(serdisk))<8)) + serdisk=serdisk+Replicate('1',8-Len(Alltrim(serdisk))) + Endif + Endif + serdisk=Substr(Alltrim(serdisk),Len(Alltrim(serdisk))-7,8) +Endif +&&se citeste din comdir.snr seria de inregistrare si se verifica egalitatea cu seria obtinuta anterior +If valret + gnFileHandle = Fopen(calewin+'\comdir.snr') + nSize = Fseek(gnFileHandle, 0, 2) && Move pointer to EOF + If nSize!=9 + valret=.F. + Else + = Fseek(gnFileHandle, 0, 0) && Move pointer to BOF + cString = Fread(gnFileHandle,9) + ser1=Substr(cString,1,4) + ser2=Substr(cString,5,4) + key1=Substr(cString,9,1) + KEY2=DECTOBIN(Alltrim(HEXDEC(key1))) + serinreg=decodare1(Alltrim(Upper(ser1)),KEY2)+decodare1(Alltrim(Upper(ser2)),KEY2) + If serdisk!=serinreg + valret=.F. + Endif + Endif + = Fclose(gnFileHandle) +Endif +seriedisk1=serdisk +serieinreg1=serinreg +On Error valret=.F. +Return valret +************************************************************************************ +Function decodare1 +Parameters lstring,CHEIE +Local lens,poz1,poz2,POZ3,lret,LRET2,lcstring,val1,lret1 +lret='' +lret1='' +LRET2='' +lcstring=Alltrim(Upper(lstring)) +lens=Len(lcstring) +For i=1 To 4 + poz1=Substr(lcstring,i,1) + val1=Asc(poz1) + POZ3=Substr(CHEIE,i,1) + Do Case + Case val1>=48 And val1<=57 + If ((val1-47)+Int(Val(POZ3)))<=10 + poz2=Chr(val1+Int(Val(POZ3))) + Else + poz2=Chr(val1+Int(Val(POZ3))-10) + Endif + Case val1>=65 And val1<=90 + If ((val1-64)+2*Int(Val(POZ3)))<=26 + poz2=Chr(val1+2*Int(Val(POZ3))) + Else + poz2=Chr(val1+2*Int(Val(POZ3))-26) + Endif + Endcase + LRET2=LRET2+poz2 +Endfor +For i=1 To lens + poz1=Substr(LRET2,i,1) + val1=Asc(poz1) + Do Case + Case val1>=48 And val1<=57 + If ((val1-47)+i)<=10 + poz2=Chr(val1+i) + Else + poz2=Chr(val1+i-10) + Endif + Case val1>=65 And val1<=90 + If ((val1-64)+2*i)<=26 + poz2=Chr(val1+2*i) + Else + poz2=Chr(val1+2*i-26) + Endif + Endcase + lret=lret+poz2 +Endfor +lens=Len(lret) +For i=1 To lens + poz1=Substr(lret,i,1) + val1=Asc(poz1) + Do Case + Case val1>=48 And val1<=57 + poz2=Chr(val1+17)&& din 0-9 in A-J + Case val1>=65 And val1<=74 + poz2=Chr(val1-17)&& din A-J in 0-9 + Case val1>=75 And val1<=82 + poz2=Chr(val1+8)&&din K-R in S-Z + Case val1>=83 And val1<=90 + poz2=Chr(val1-8)&&din S-Z in K-R + Endcase + lret1=lret1+poz2 +Endfor +Return lret1 +************************************************************************************ +&&transformarea in decimal a unui caracter hexa +Function HEXDEC +Lparameters LC +Local LV +Do Case +Case LC=='0' + LV='0' +Case LC=='1' + LV='1' +Case LC=='2' + LV='2' +Case LC=='3' + LV='3' +Case LC=='4' + LV='4' +Case LC=='5' + LV='5' +Case LC=='6' + LV='6' +Case LC=='7' + LV='7' +Case LC=='8' + LV='8' +Case LC=='9' + LV='9' +Case LC=='A' + LV='10' +Case LC=='B' + LV='11' +Case LC=='C' + LV='12' +Case LC=='D' + LV='13' +Case LC=='E' + LV='14' +Case LC=='F' + LV='15' +Endcase +Return LV +************************************************************************************ +&&codarea binara din hexa pe patru biti +Function DECTOBIN +Parameters sc +Local lretf +Do Case +Case sc=='0' + lretf='0000' +Case sc=='1' + lretf='0001' +Case sc=='2' + lretf='0010' +Case sc=='3' + lretf='0011' +Case sc=='4' + lretf='0100' +Case sc=='5' + lretf='0101' +Case sc=='6' + lretf='0110' +Case sc=='7' + lretf='0111' +Case sc=='8' + lretf='1000' +Case sc=='9' + lretf='1001' +Case sc=='10' + lretf='1010' +Case sc=='11' + lretf='1011' +Case sc=='12' + lretf='1100' +Case sc=='13' + lretf='1101' +Case sc=='14' + lretf='1110' +Case sc=='15' + lretf='1111' +Endcase +Return lretf +************************************************************************************ +Function ECARACTER +Parameters strg1 +Private pz,ch,lcstring,vret,lg1 +Store 0 To pz,lg1 +Store '' To ch,lcstring +Store .T. To vret +lcstring=Upper(strg1) +lg1=Len(lcstring) +For ind1=1 To lg1 + ch=Substr(lcstring,ind1,1) + If (Not Between(Asc(ch),48,57)) And (Not Between(Asc(ch),65,90)) + vret=.F. + Exit + Endif +Endfor +Return vret +************************************************************************************ +Function sircaracter +Parameters strg1 +Private pz,ch,lcstring,vret,lg1,lciesire +Store 0 To pz,lg1 +Store '' To ch,lcstring,lciesire +Store .T. To vret +strg1=Strtran(strg1,Alltrim(Chr(39)),'')&&caracterul ' +strg1=Strtran(strg1,Alltrim(Chr(39)),'')&&caracterul " +lcstring=Upper(Alltrim(strg1)) +lg1=Len(lcstring) +For ind1=1 To lg1 + ch=Substr(lcstring,ind1,1) + If Between(Asc(ch),48,57) Or Between(Asc(ch),65,90) + lciesire=lciesire+ch + Endif +Endfor +Return lciesire +************************************************************************************ +Procedure _DEBUG +Private lcret,lcfisier,lcPath,lccalewin +Declare Integer SHGetFolderPath In SHFOLDER.Dll ; + INTEGER hwndOwner, ; + INTEGER nFolder, ; + INTEGER hToken, ; + INTEGER dwFlags, ; + STRING @ pszPath +Declare Integer GetActiveWindow In WIN32API +#Define CSIDL_WINDOWS 36 + + +lcPath = Repl(Chr(0),261) +=SHGetFolderPath(GetActiveWindow(),CSIDL_WINDOWS,0,0,@lcPath) +lccalewin=Left(lcPath,At(Chr(0),lcPath)-1) + +lcret=.F. +lcfisier=Addbs(lccalewin)+[DEBUG.TXT] + +lcLog = '1 ' + lcfisier +poLog.Log(lcLog,Program()) + +If File(lcfisier) + LCVAL=Filetostr(lcfisier) + + LNVAL1=Mod(Val(Right(LCVAL,1)),2) && restul 1 sau 0; daca e impar e 1 + lnval2=Val(Left(LCVAL,Len(LCVAL)-1)) + + lcLog = Transform(LNVAL1) + ' ' + Transform(lnval2) + poLog.Log(lcLog,Program()) + + If LNVAL1=1 Or Year(Date())-Month(Date())=lnval2 + lcret=.T. + Endif +Endif + +lcLog = Transform(lcret) +poLog.Log(lcLog,Program()) + +Return lcret +Endproc +************************************************************************************ +Function Start_Nou +*!* llExista_Branch = Exista_Branch(,,dirgen) + +*!* lcLog = TRANSFORM(llExista_Branch) +*!* poLog.log(lcLog,PROGRAM()) +Return Exista_Branch(,,DIRGEN) +Return llExista_Branch + +Endfunc && start_nou +************************************************************************************ +Procedure Debug_Start +lcFile = gcAppPath + "debug.txt" +If File(lcFile) + lcLog = 'debug_start' + poLog.Log(lcLog,Program()) +Else + lcLog = '!debug_start' + poLog.Log(lcLog,Program()) +Endif + +If File(lcFile) Or !Start_Nou() + Return .T. +Endif +Return .F. + +Endproc && Debug_Start +************************************************************************************ +Procedure verificari +Parameters tcFisierVerif +lcverificari = Addbs(gcAppPath)+gcAppName+".txt" +If File(lcverificari) + Return .T. +Endif +Return .F. + +Endproc && verificari*************** +************************************************************************************ +Procedure myinstance +Parameters myApp +=Ddesetoption("SAFETY",.F.) +ichannel = Ddeinitiate(myApp,"ZOOM") +If ichannel =>0 + =Ddeterminate(ichannel) + Quit +Endif +=Ddesetservice(myApp,"define") +=Ddesetservice(myApp,"execute") +=Ddesettopic(myApp,"","ddezoom") +Return +************************************************************************************ +Procedure ddezoom +Parameter ichannel,saction,sitem,sdata,sformat,istatus +Zoom Window Screen Norm +Return +************************************************************************************ +** EOF +************************************************************************************ diff --git a/Programe/update_devize.prg b/Programe/update_devize.prg new file mode 100644 index 0000000..69e4637 --- /dev/null +++ b/Programe/update_devize.prg @@ -0,0 +1,504 @@ +******************************************* +* PROCEDURE update_mecanici( ) +* Data/ora : 12/16/04, 13:01:32 +* autor : liana.macinic +* descriere: + +****** PARAMETER BLOCK ************** +* Parametri : 0 +* +******************************************* +Procedure update_mecanici( ) +If Used('v_mecanici') + Use In v_mecanici +Endif + +lcSql = [select * from ] + gcS + [.auto_vmecanici order by nume] +lcCursor = [v_mecanici] +lnSucces = goExecutor.oExecute(lcSql,lcCursor) +goExecutor.oReset() + +Return lnSucces + +Endproc + +**********************sfarsit procedura update_mecanici******************* + +******************************************* +* PROCEDURE caut_personal_devize( ) +******************************************* +Procedure caut_personal_devize( ) +Local loCauta,llReturn +Store "" To loCauta +Store .F. To llReturn +pcselect = ["select id_salariat,id_part,nume,prenume,marca from ] + gcS + [.auto_vnom_salariati where inactiv = 0"] +pcfiltru = [1=2] +pcschema = [''] +pcorder = [2] +pccoloane = [nume,prenume,marca] +pcTitlu = [Alegei mecanicul] +pcTitluColoane = [Nume,Prenume,Marca] +loCauta = cauta_alfa(pcselect,pcfiltru,pcschema,pcorder,pccoloane,pcTitlu,pcTitluColoane,"") +Return loCauta +Endproc + +**********************sfarsit procedura caut_personal_devize ******************* + +******************************************* +* PROCEDURE caut_norme( ) +******************************************* +Procedure caut_norme( ) +Local loCauta,llReturn +Store "" To loCauta +Store .F. To llReturn +pcselect = ["select id_norme,denop from ] + gcS + [.auto_vnorme where inactiv = 0"] +pcfiltru = [1=2] +pcschema = [''] +pcorder = [2] +pccoloane = [denop] +pcTitlu = [Alegei operaia] +pcTitluColoane = [Denumire] +loCauta = cauta_alfa(pcselect,pcfiltru,pcschema,pcorder,pccoloane,pcTitlu,pcTitluColoane,"") +Return loCauta +Endproc + +**********************sfarsit procedura caut_norme ******************* +******************************************* +* PROCEDURE update_sectie( ) +* Data/ora : 12/16/04, 14:26:22 +* autor : liana.macinic +* descriere: + +****** PARAMETER BLOCK ************** +* Parametri : 0 +* +******************************************* +Procedure update_sectie( ) +If Used('v_sectie') + Use In v_sectie +Endif + +lcSql = [select * from ] + gcS + [.vnom_sectii order by sectie]&& where inactiv = 0] +lcCursor = [v_sectie] +lnSucces = goExecutor.oExecute(lcSql,lcCursor) +goExecutor.oReset() + +Return lnSucces + +Endproc + +**********************sfarsit procedura update_sectie******************* + +******************************************* +* PROCEDURE update_clienti( ) +* Data/ora : 12/20/04, 09:58:55 +* autor : liana.macinic +* descriere: + +****** PARAMETER BLOCK ************** +* Parametri : 0 +* +******************************************* +Procedure update_clienti( ) +LPARAMETERS tnid_partener +LOCAL lcFiltru +IF !EMPTY(tnid_partener) + lcFiltru = [ and p.id_part=]+ALLTRIM(STR(tnid_partener)) +ELSE + lcFiltru = [] +ENDIF +If Used('v_clienti') + Use In v_clienti +Endif + +*!* lcSql=[select p.nume,p.cod_fiscal,p.id_part from ] + gcS + [.vnom_parteneri p order by p.nume] +lcSql = [select distinct p.nume, p.cod_fiscal, p.id_part FROM ] + gcS + [.vcoresp_tip_part p ] + ; + [join ] + gcS + [.vcoresp_tip_cont c on p.id_tip_part=c.id_tip_part where c.cont ='4111' ] + ; + [and p.inactiv=0 ]+lcFiltru+[ order by p.nume ] +*!* lcSql = [select distinct p.nume, p.cod_fiscal, p.id_part FROM ] + gcS + [.Vcoresp_tip_part p ] + ; +*!* [ join ]+gcS+[.vcoresp_tip_cont c on p.id_tip_part=c.id_tip_part where c.cont = 411 order by nume] +lcCursor = 'v_clienti' +lnSucces = goExecutor.oExecute(lcSql,lcCursor) +goExecutor.oReset() +Return lnSucces + + +Endproc + +**********************sfarsit procedura update_clienti******************* +******************************************* +* PROCEDURE update_masini( ) +* Data/ora : 12/21/04, 10:33:10 +* autor : liana.macinic +* descriere: + +****** PARAMETER BLOCK ************** +* Parametri : 0 +* +******************************************* +Procedure update_masini( ) +If Used('v_masini') + Use In v_masini +Endif + +lcSql = [select id_masina,id_marca,nvl(masina,lpad(CHR(32),100,CHR(32))) as masina,sctip,clasa,] + ; + [nvl(marca,lpad(CHR(32),100,CHR(32))) as marca from ] + gcS + [.auto_vmasini where inactiv = 0 order by 3] +lcCursor = [v_masini] +lnSucces = goExecutor.oExecute(lcSql,lcCursor) +goExecutor.oReset() + +Return lnSucces +Endproc + +**********************sfarsit procedura update_masini******************* +******************************************* +* PROCEDURE update_ansamble( ) +* Data/ora : 12/21/04, 10:34:31 +* autor : liana.macinic +* descriere: + +****** PARAMETER BLOCK ************** +* Parametri : 0 +* +******************************************* +Procedure update_ansamble( ) +If Used('v_ansamble') + Use In v_ansamble +Endif + +lcSql = [select * from ] + gcS + [.auto_vansamble where inactiv=0 order by denumire] +lcCursor = [v_ansamble] +lnSucces = goExecutor.oExecute(lcSql,lcCursor) +goExecutor.oReset() + +Return lnSucces + +Endproc + +**********************sfarsit procedura update_ansamble******************* + +******************************************* +* PROCEDURE update_marci( ) +* Data/ora : 12/21/04, 16:05:00 +* autor : liana.macinic +* descriere: + +****** PARAMETER BLOCK ************** +* Parametri : 0 +* +******************************************* +Procedure update_marci( ) +If Used('v_marci') + Use In v_marci +Endif + +lcSql = [select * from ] + gcS + [.auto_vmarci order by marca] +lcCursor = [v_marci] +lnSucces = goExecutor.oExecute(lcSql,lcCursor) +goExecutor.oReset() + +Return lnSucces + +Endproc + +**********************sfarsit procedura update_marci******************* +******************************************* +* PROCEDURE update_asigurator( ) +* Data/ora : 12/21/04, 16:08:00 +* autor : liana.macinic +* descriere: + +****** PARAMETER BLOCK ************** +* Parametri : 0 +* +******************************************* +Procedure update_asigurator( ) +If Used('v_asiguratori') + Use In v_asiguratori +Endif + +lcSql = [select * from ] + gcS + [.auto_vasiguratori where inactiv = 0 order by asigurator] +lcCursor = [v_asiguratori] +lnSucces = goExecutor.oExecute(lcSql,lcCursor) +goExecutor.oReset() + +Return lnSucces +Endproc + +**********************sfarsit procedura update_asigurator******************* + +******************************************* +* PROCEDURE update_inspector( ) +* Data/ora : 01/06/05, 10:42:26 +* autor : liana.macinic +* descriere: + +****** PARAMETER BLOCK ************** +* Parametri : 0 +* +******************************************* +Procedure update_inspector( ) +If Used('v_inspectori') + Use In v_inspectori +Endif + +lcSql = [select * from ] + gcS + [.auto_vinspectori where inactiv = 0 order by inspector] +lcCursor = [v_inspectori] +lnSucces = goExecutor.oExecute(lcSql,lcCursor) +goExecutor.oReset() + +Return lnSucces + +Endproc + +**********************sfarsit procedura update_inspectori******************* + +******************************************* +* PROCEDURE update_furnizori( ) +* Data/ora : 01/03/05, 15:36:04 +* autor : liana.macinic +* descriere: + +****** PARAMETER BLOCK ************** +* Parametri : 0 +* +******************************************* +Procedure update_furnizori( ) +If Used('v_dealeri') + Use In v_dealeri +Endif + +lcSql = [select id_furnizor,denumire as furnizor,inactiv from ] + gcS + [.auto_vfurnizori order by denumire] +lcCursor = [v_dealeri] +lnSucces = goExecutor.oExecute(lcSql,lcCursor) +goExecutor.oReset() + +Return lnSucces + +Endproc + +**********************sfarsit procedura update_furnizori******************* + +******************************************* +* PROCEDURE update_preturi( ) +* Data/ora : 01/12/05, 16:36:27 +* autor : liana.macinic +* descriere: + +****** PARAMETER BLOCK ************** +* Parametri : 0 +* +******************************************* +Procedure update_preturi( ) +If Used('v_preturi') + Use In v_preturi +Endif + +lcSql = [select * from ] + gcS + [.auto_vpreturi where inactiv=0] +lcCursor = [v_preturi] +lnSucces = goExecutor.oExecute(lcSql,lcCursor) +goExecutor.oReset() + +Return lnSucces +Endproc + +**********************sfarsit procedura update_preturi******************* + +******************************************* +* PROCEDURE update_norme( ) +* Data/ora : 01/12/05, 16:40:41 +* autor : liana.macinic +* descriere: + +****** PARAMETER BLOCK ************** +* Parametri : 0 +* +******************************************* +Procedure update_norme +LPARAMETERS tcFiltru +LOCAL lcFiltru +IF EMPTY(tcFiltru) + lcFiltru = [where inactiv=0] +ELSE + lcFiltru = [where inactiv=0 and ] + tcFiltru +ENDIF + +If Used('v_norme') + Use In v_norme +Endif + +lcSql = [select auto_vnorme.*,0 as ales,9999 as ordine from ] + gcS + [.auto_vnorme ] + lcFiltru + [ order by denop,masina] +lcCursor = [v_norme] +lnSucces = goExecutor.oExecute(lcSql,lcCursor) +goExecutor.oReset() + +Return lnSucces +Endproc + +**********************sfarsit procedura update_norme******************* + + +******************************************* +* PROCEDURE update_optiuni_util( ) +* Data/ora : 02/11/05, 11:07:19 +* autor : liana.macinic +* descriere: + +****** PARAMETER BLOCK ************** +* Parametri : 0 +* +******************************************* +PROCEDURE update_optiuni_util( ) + IF USED('v_optiuni_util') + USE IN v_optiuni_util + ENDIF + + lcSql='select * from optiuni_util where id_util = '+ALLTRIM(STR(gnIdUtil)) + [ or id_util = 0 order by varname] + lcCursor = 'v_optiuni_util' + + lnSucces = goExecutor.oExecute(lcSql,lcCursor) +*!* AMESSAGEBOX('v_optiuni_util') + RETURN lnSucces + +ENDPROC + +**********************sfarsit procedura update_optiuni_util******************* +*********************************************************************** + +PROCEDURE ccsectii + + IF USED('v_nom_sectii') + USE IN v_nom_sectii + ENDIF + + lcSql='select id_sectie,sectie from '+gcS+'.vnom_sectii order by sectie' + lcCursor = 'v_nom_sectii' + + lnSucces = goExecutor.oExecute(lcSql,lcCursor) + RETURN lnSucces + +ENDPROC +*********************************************************************** +Procedure ccnorme +Lparameters tctip,tnid +Local lcFiltru + +If Used('v_denop') + Use In v_denop +Endif +Do Case +Case Empty(tctip) + lcFiltru = [ where inactiv=0 ] +Case tctip='NORMA' + lcFiltru=[ where id_norme = ] + Alltrim(Str(tnid)) +Case tctip='MASINA' + lcFiltru=[ where id_masina = ] + Alltrim(Str(tnid)) + [ and inactiv=0 ] +Endcase +lcSql='select id_norme,denop,timpn from '+gcS+'.auto_vnorme '+; + lcFiltru+' order by denop' +lcCursor = 'v_denop' + +lnSucces = goExecutor.oExecute(lcSql,lcCursor) +Return lnSucces + +Endproc +*********************************************************************** +Procedure ccmecanici +If Used('v_mecanici') + Use In v_mecanici +Endif + +lcSql='select id_mecanic,TRIM(nume)||CHR(32)||TRIM(prenume) as nume from auto_vmecanici where inactiv=0 order by nume' +lcCursor = 'v_mecanici' + +lnSucces = goExecutor.oExecute(lcSql,lcCursor) +Return lnSucces + +Endproc +*********************************************************************** +PROCEDURE cctipuri_deviz +IF USED('crstipuri_deviz') + USE IN crstipuri_deviz +ENDIF + +lcSql='select id_tip,denumire,inch_validare from dev_tip_deviz where sters=0 order by denumire' +lcCursor = 'crstipuri_deviz' +lnSucces = goExecutor.oExecute(lcSql,lcCursor) +RETURN lnSucces + +ENDPROC +*********************************************************************** +Function cauta_utilizator +Lparameters tnIdUtil,tcUtilizator +Local locauta,llReturn +Store "" To locauta +Store .F. To llReturn +pcselect = ["select id_util,utilizator from syn_vutilizatori"] +pcfiltru = [1=2] +pcschema = [''] +pcorder = [utilizator] +pccoloane = [Utilizator] +pcTitlu = [Alegei utilizatorul] +pcTitluColoane = [Utilizator] +locauta = cauta_alfa(pcselect,pcfiltru,pcschema,pcorder,pccoloane,pcTitlu,pcTitluColoane,"") +If !Empty(locauta.id_util) + tnIdUtil=locauta.id_util + tcUtilizator=Alltrim(locauta.utilizator) + llReturn=.T. +Endif +Return llReturn +Endfunc && cauta_utilizator +*********************************************************************** +FUNCTION cauta_client +Lparameters tnIdPartener,tcNume +Local locauta,llReturn +Store "" To locauta +Store .F. To llReturn +pcselect = ["select p.id_part,p.nume,p.cod_fiscal from ]+gcS+[.vcoresp_tip_part p "+] + ; + ["join ] + gcS + [.vcoresp_tip_cont c on p.id_tip_part=c.id_tip_part "+]+; + ["where c.cont ='4111' and p.inactiv=0"] +pcfiltru = [1=2] +pcschema = ['id_part n(10),nume c(100),cod_fiscal c(100)'] +pcorder = [nume] +pccoloane = [nume,cod_fiscal] +pcTitlu = [Alegei clientul] +pcTitluColoane = [Client,Cod fiscal] +locauta = cauta_alfa(pcselect,pcfiltru,pcschema,pcorder,pccoloane,pcTitlu,pcTitluColoane,"") +If !Empty(locauta.id_part) + tnIdPartener=locauta.id_part + tcNume=Alltrim(locauta.nume) + llReturn=.T. +Endif +Return llReturn +ENDFUNC +*********************************************************************** + +PROCEDURE ccarticole +LPARAMETERS tcFiltru +If Used('v_articole') + Use In v_articole +Endif + +lcSql = [select * from ] + gcS + [.vnom_articole where inactiv = 0 ] + IIF(!EMPTY(tcFiltru),[ and ] + tcFiltru,[])+ [ order by denumire ] +lcCursor = [v_articole] +lnSucces = goExecutor.oExecute(lcSql,lcCursor) + +Return lnSucces +Endproc +*********************************************************************** + +Procedure ccnorme_devest +LPARAMETERS tcFiltru +If Used('v_norme') + Use In v_norme +Endif + +lcSql='select * from '+gcS+'.auto_vnorme where inactiv = 0 ' + IIF(!EMPTY(tcFiltru),' and ' + tcFiltru,'')+ ' order by denop' +lcCursor = 'v_norme' + +lnSucces = goExecutor.oExecute(lcSql,lcCursor) +Return lnSucces + +ENDPROC +*********************************************************************** + diff --git a/Programe/update_nomenclator.prg b/Programe/update_nomenclator.prg new file mode 100644 index 0000000..c66270e --- /dev/null +++ b/Programe/update_nomenclator.prg @@ -0,0 +1,40 @@ +********************************************************** +PROCEDURE update_nomenclator + + DO update_lunilean + + *** tabele meniu deschise din proiect + LOCAL lcCaleDateMenu + + lcCaleDateMenu=gcAppPath+[COMUN\DATEMENU\] +*!* modificare v 2.0.6 +*!* IF !USED('XREQUEST') +*!* USE &lcCaleDateMenu.XREQUEST IN 0 ALIAS XREQUEST +*!* ENDIF +*!* IF !USED('xitems') +*!* USE &lcCaleDateMenu.xitems IN 0 ALIAS xitems +*!* ENDIF +*!* IF !USED('XSETS') +*!* USE &lcCaleDateMenu.XSETS IN 0 ALIAS XSETS ORDER TAG ID_SET +*!* ENDIF +*!* IF !USED('xACT') +*!* USE &lcCaleDateMenu.xACT IN 0 ALIAS xACT +*!* ENDIF +*!* IF !USED('xnote') +*!* USE &lcCaleDateMenu.xnote IN 0 ALIAS xnote +*!* ENDIF + lnSucces = xdate() +*!* modificare v 2.0.6 ^ + IF !USED('INFISIERE') + USE &lcCaleDateMenu.INFISIERE IN 0 ALIAS INFISIERE + ENDIF + + IF !USED('mila1') + USE &lcCaleDateMenu.mila1 IN 0 ALIAS mila1 + ENDIF + + *!* modificare v 2.0.5 + CREATE CURSOR dual (dummy c(10)) + INSERT INTO dual (dummy) VALUES ("x") + *!* modificare v 2.0.5 ^ +ENDPROC && update_nomenclator \ No newline at end of file diff --git a/Proiect/AUTOHAUS/Originale/usr_fact_farachit.FRT b/Proiect/AUTOHAUS/Originale/usr_fact_farachit.FRT new file mode 100644 index 0000000..b02603c Binary files /dev/null and b/Proiect/AUTOHAUS/Originale/usr_fact_farachit.FRT differ diff --git a/Proiect/AUTOHAUS/Originale/usr_fact_farachit.frx b/Proiect/AUTOHAUS/Originale/usr_fact_farachit.frx new file mode 100644 index 0000000..85a856b Binary files /dev/null and b/Proiect/AUTOHAUS/Originale/usr_fact_farachit.frx differ diff --git a/Proiect/AUTOHAUS/TVA 0/sigla.jpg b/Proiect/AUTOHAUS/TVA 0/sigla.jpg new file mode 100644 index 0000000..e5c97e9 Binary files /dev/null and b/Proiect/AUTOHAUS/TVA 0/sigla.jpg differ diff --git a/Proiect/AUTOHAUS/TVA 0/usr_fact_farachit.FRT b/Proiect/AUTOHAUS/TVA 0/usr_fact_farachit.FRT new file mode 100644 index 0000000..69a96fb Binary files /dev/null and b/Proiect/AUTOHAUS/TVA 0/usr_fact_farachit.FRT differ diff --git a/Proiect/AUTOHAUS/TVA 0/usr_fact_farachit.frx b/Proiect/AUTOHAUS/TVA 0/usr_fact_farachit.frx new file mode 100644 index 0000000..969c187 Binary files /dev/null and b/Proiect/AUTOHAUS/TVA 0/usr_fact_farachit.frx differ diff --git a/Proiect/ROAAUTO.mwb b/Proiect/ROAAUTO.mwb new file mode 100644 index 0000000..9a028c6 Binary files /dev/null and b/Proiect/ROAAUTO.mwb differ diff --git a/Proiect/ROAAUTO_vechi1506.mwb b/Proiect/ROAAUTO_vechi1506.mwb new file mode 100644 index 0000000..0bfba6c Binary files /dev/null and b/Proiect/ROAAUTO_vechi1506.mwb differ diff --git a/Rapoarte/Deviz20110919/rap_deviz_orig.FRT b/Rapoarte/Deviz20110919/rap_deviz_orig.FRT new file mode 100644 index 0000000..b5e8d1b Binary files /dev/null and b/Rapoarte/Deviz20110919/rap_deviz_orig.FRT differ diff --git a/Rapoarte/Deviz20110919/rap_deviz_orig.frx b/Rapoarte/Deviz20110919/rap_deviz_orig.frx new file mode 100644 index 0000000..32642d8 Binary files /dev/null and b/Rapoarte/Deviz20110919/rap_deviz_orig.frx differ diff --git a/Rapoarte/Deviz20110919/rap_deviz_v8.FRT b/Rapoarte/Deviz20110919/rap_deviz_v8.FRT new file mode 100644 index 0000000..86c10cb Binary files /dev/null and b/Rapoarte/Deviz20110919/rap_deviz_v8.FRT differ diff --git a/Rapoarte/Deviz20110919/rap_deviz_v8.frx b/Rapoarte/Deviz20110919/rap_deviz_v8.frx new file mode 100644 index 0000000..d6277f9 Binary files /dev/null and b/Rapoarte/Deviz20110919/rap_deviz_v8.frx differ diff --git a/Rapoarte/Linii/fact_cuchit.FRT b/Rapoarte/Linii/fact_cuchit.FRT new file mode 100644 index 0000000..bf96548 Binary files /dev/null and b/Rapoarte/Linii/fact_cuchit.FRT differ diff --git a/Rapoarte/Linii/fact_cuchit.frx b/Rapoarte/Linii/fact_cuchit.frx new file mode 100644 index 0000000..8cd3cfb Binary files /dev/null and b/Rapoarte/Linii/fact_cuchit.frx differ diff --git a/Rapoarte/Linii/fact_farachit.FRT b/Rapoarte/Linii/fact_farachit.FRT new file mode 100644 index 0000000..a8cfc84 Binary files /dev/null and b/Rapoarte/Linii/fact_farachit.FRT differ diff --git a/Rapoarte/Linii/fact_farachit.frx b/Rapoarte/Linii/fact_farachit.frx new file mode 100644 index 0000000..6209ec9 Binary files /dev/null and b/Rapoarte/Linii/fact_farachit.frx differ diff --git a/Rapoarte/Linii/factav_cuchit.FRT b/Rapoarte/Linii/factav_cuchit.FRT new file mode 100644 index 0000000..11aff84 Binary files /dev/null and b/Rapoarte/Linii/factav_cuchit.FRT differ diff --git a/Rapoarte/Linii/factav_cuchit.frx b/Rapoarte/Linii/factav_cuchit.frx new file mode 100644 index 0000000..b06dd49 Binary files /dev/null and b/Rapoarte/Linii/factav_cuchit.frx differ diff --git a/Rapoarte/Linii/factav_farachit.FRT b/Rapoarte/Linii/factav_farachit.FRT new file mode 100644 index 0000000..0922f64 Binary files /dev/null and b/Rapoarte/Linii/factav_farachit.FRT differ diff --git a/Rapoarte/Linii/factav_farachit.frx b/Rapoarte/Linii/factav_farachit.frx new file mode 100644 index 0000000..d4acd9c Binary files /dev/null and b/Rapoarte/Linii/factav_farachit.frx differ diff --git a/Rapoarte/Vechi/comfact.FRT b/Rapoarte/Vechi/comfact.FRT new file mode 100644 index 0000000..42fda6e Binary files /dev/null and b/Rapoarte/Vechi/comfact.FRT differ diff --git a/Rapoarte/Vechi/comfact.frx b/Rapoarte/Vechi/comfact.frx new file mode 100644 index 0000000..5e5ff58 Binary files /dev/null and b/Rapoarte/Vechi/comfact.frx differ diff --git a/Rapoarte/Vechi/comvalid.FRT b/Rapoarte/Vechi/comvalid.FRT new file mode 100644 index 0000000..3fcfde3 Binary files /dev/null and b/Rapoarte/Vechi/comvalid.FRT differ diff --git a/Rapoarte/Vechi/comvalid.frx b/Rapoarte/Vechi/comvalid.frx new file mode 100644 index 0000000..2b414f1 Binary files /dev/null and b/Rapoarte/Vechi/comvalid.frx differ diff --git a/Rapoarte/Vechi/comvalidnef.FRT b/Rapoarte/Vechi/comvalidnef.FRT new file mode 100644 index 0000000..25cb9ce Binary files /dev/null and b/Rapoarte/Vechi/comvalidnef.FRT differ diff --git a/Rapoarte/Vechi/comvalidnef.frx b/Rapoarte/Vechi/comvalidnef.frx new file mode 100644 index 0000000..1f1752e Binary files /dev/null and b/Rapoarte/Vechi/comvalidnef.frx differ diff --git a/Rapoarte/Vechi/factura.FRT b/Rapoarte/Vechi/factura.FRT new file mode 100644 index 0000000..48a3309 Binary files /dev/null and b/Rapoarte/Vechi/factura.FRT differ diff --git a/Rapoarte/Vechi/factura.frx b/Rapoarte/Vechi/factura.frx new file mode 100644 index 0000000..4fd20f2 Binary files /dev/null and b/Rapoarte/Vechi/factura.frx differ diff --git a/Rapoarte/Vechi/factura1.FRT b/Rapoarte/Vechi/factura1.FRT new file mode 100644 index 0000000..18d1137 Binary files /dev/null and b/Rapoarte/Vechi/factura1.FRT differ diff --git a/Rapoarte/Vechi/factura1.frx b/Rapoarte/Vechi/factura1.frx new file mode 100644 index 0000000..d732a38 Binary files /dev/null and b/Rapoarte/Vechi/factura1.frx differ diff --git a/Rapoarte/Vechi/listfactsold.FRT b/Rapoarte/Vechi/listfactsold.FRT new file mode 100644 index 0000000..08af560 Binary files /dev/null and b/Rapoarte/Vechi/listfactsold.FRT differ diff --git a/Rapoarte/Vechi/listfactsold.frx b/Rapoarte/Vechi/listfactsold.frx new file mode 100644 index 0000000..965b069 Binary files /dev/null and b/Rapoarte/Vechi/listfactsold.frx differ diff --git a/Rapoarte/_deviz.FRT b/Rapoarte/_deviz.FRT new file mode 100644 index 0000000..0f787dc Binary files /dev/null and b/Rapoarte/_deviz.FRT differ diff --git a/Rapoarte/_deviz.frx b/Rapoarte/_deviz.frx new file mode 100644 index 0000000..843e233 Binary files /dev/null and b/Rapoarte/_deviz.frx differ diff --git a/Rapoarte/_preco.FRT b/Rapoarte/_preco.FRT new file mode 100644 index 0000000..b9fa62f Binary files /dev/null and b/Rapoarte/_preco.FRT differ diff --git a/Rapoarte/_preco.frx b/Rapoarte/_preco.frx new file mode 100644 index 0000000..eb80322 Binary files /dev/null and b/Rapoarte/_preco.frx differ diff --git a/Rapoarte/centralizator_devize.FRT b/Rapoarte/centralizator_devize.FRT new file mode 100644 index 0000000..223c4f9 Binary files /dev/null and b/Rapoarte/centralizator_devize.FRT differ diff --git a/Rapoarte/centralizator_devize.frx b/Rapoarte/centralizator_devize.frx new file mode 100644 index 0000000..60b5f51 Binary files /dev/null and b/Rapoarte/centralizator_devize.frx differ diff --git a/Rapoarte/certificatg_a4.FRT b/Rapoarte/certificatg_a4.FRT new file mode 100644 index 0000000..5a75429 Binary files /dev/null and b/Rapoarte/certificatg_a4.FRT differ diff --git a/Rapoarte/certificatg_a4.frx b/Rapoarte/certificatg_a4.frx new file mode 100644 index 0000000..86e50c2 Binary files /dev/null and b/Rapoarte/certificatg_a4.frx differ diff --git a/Rapoarte/certificatg_a5.FRT b/Rapoarte/certificatg_a5.FRT new file mode 100644 index 0000000..bd000ff Binary files /dev/null and b/Rapoarte/certificatg_a5.FRT differ diff --git a/Rapoarte/certificatg_a5.frx b/Rapoarte/certificatg_a5.frx new file mode 100644 index 0000000..65829da Binary files /dev/null and b/Rapoarte/certificatg_a5.frx differ diff --git a/Rapoarte/clie.FRT b/Rapoarte/clie.FRT new file mode 100644 index 0000000..e898a41 Binary files /dev/null and b/Rapoarte/clie.FRT differ diff --git a/Rapoarte/clie.frx b/Rapoarte/clie.frx new file mode 100644 index 0000000..e28fdec Binary files /dev/null and b/Rapoarte/clie.frx differ diff --git a/Rapoarte/clieadresa.FRT b/Rapoarte/clieadresa.FRT new file mode 100644 index 0000000..4d5d078 Binary files /dev/null and b/Rapoarte/clieadresa.FRT differ diff --git a/Rapoarte/clieadresa.frx b/Rapoarte/clieadresa.frx new file mode 100644 index 0000000..74f390c Binary files /dev/null and b/Rapoarte/clieadresa.frx differ diff --git a/Rapoarte/facturi.FRT b/Rapoarte/facturi.FRT new file mode 100644 index 0000000..b5583d7 Binary files /dev/null and b/Rapoarte/facturi.FRT differ diff --git a/Rapoarte/facturi.frx b/Rapoarte/facturi.frx new file mode 100644 index 0000000..18fb199 Binary files /dev/null and b/Rapoarte/facturi.frx differ diff --git a/Rapoarte/facturia.FRT b/Rapoarte/facturia.FRT new file mode 100644 index 0000000..2bf1783 Binary files /dev/null and b/Rapoarte/facturia.FRT differ diff --git a/Rapoarte/facturia.frx b/Rapoarte/facturia.frx new file mode 100644 index 0000000..576f011 Binary files /dev/null and b/Rapoarte/facturia.frx differ diff --git a/Rapoarte/facturisectie.FRT b/Rapoarte/facturisectie.FRT new file mode 100644 index 0000000..3394e12 Binary files /dev/null and b/Rapoarte/facturisectie.FRT differ diff --git a/Rapoarte/facturisectie.frx b/Rapoarte/facturisectie.frx new file mode 100644 index 0000000..b46cf11 Binary files /dev/null and b/Rapoarte/facturisectie.frx differ diff --git a/Rapoarte/matbon.FRT b/Rapoarte/matbon.FRT new file mode 100644 index 0000000..06679cf Binary files /dev/null and b/Rapoarte/matbon.FRT differ diff --git a/Rapoarte/matbon.frx b/Rapoarte/matbon.frx new file mode 100644 index 0000000..068cb7f Binary files /dev/null and b/Rapoarte/matbon.frx differ diff --git a/Rapoarte/matbon_sec.FRT b/Rapoarte/matbon_sec.FRT new file mode 100644 index 0000000..c8fccd8 Binary files /dev/null and b/Rapoarte/matbon_sec.FRT differ diff --git a/Rapoarte/matbon_sec.frx b/Rapoarte/matbon_sec.frx new file mode 100644 index 0000000..f1c6682 Binary files /dev/null and b/Rapoarte/matbon_sec.frx differ diff --git a/Rapoarte/matnefact.FRT b/Rapoarte/matnefact.FRT new file mode 100644 index 0000000..1ca4c33 Binary files /dev/null and b/Rapoarte/matnefact.FRT differ diff --git a/Rapoarte/matnefact.frx b/Rapoarte/matnefact.frx new file mode 100644 index 0000000..ffb1c4f Binary files /dev/null and b/Rapoarte/matnefact.frx differ diff --git a/Rapoarte/opersal.FRT b/Rapoarte/opersal.FRT new file mode 100644 index 0000000..fc10d26 Binary files /dev/null and b/Rapoarte/opersal.FRT differ diff --git a/Rapoarte/opersal.frx b/Rapoarte/opersal.frx new file mode 100644 index 0000000..de11114 Binary files /dev/null and b/Rapoarte/opersal.frx differ diff --git a/Rapoarte/opersalcom.FRT b/Rapoarte/opersalcom.FRT new file mode 100644 index 0000000..233da2f Binary files /dev/null and b/Rapoarte/opersalcom.FRT differ diff --git a/Rapoarte/opersalcom.frx b/Rapoarte/opersalcom.frx new file mode 100644 index 0000000..667c301 Binary files /dev/null and b/Rapoarte/opersalcom.frx differ diff --git a/Rapoarte/preco.FRT b/Rapoarte/preco.FRT new file mode 100644 index 0000000..a5e9101 Binary files /dev/null and b/Rapoarte/preco.FRT differ diff --git a/Rapoarte/preco.frx b/Rapoarte/preco.frx new file mode 100644 index 0000000..a22a272 Binary files /dev/null and b/Rapoarte/preco.frx differ diff --git a/Rapoarte/preco_nou.FRT b/Rapoarte/preco_nou.FRT new file mode 100644 index 0000000..867c650 Binary files /dev/null and b/Rapoarte/preco_nou.FRT differ diff --git a/Rapoarte/preco_nou.frx b/Rapoarte/preco_nou.frx new file mode 100644 index 0000000..0500825 Binary files /dev/null and b/Rapoarte/preco_nou.frx differ diff --git a/Rapoarte/precog.FRT b/Rapoarte/precog.FRT new file mode 100644 index 0000000..8c7ad90 Binary files /dev/null and b/Rapoarte/precog.FRT differ diff --git a/Rapoarte/precog.frx b/Rapoarte/precog.frx new file mode 100644 index 0000000..7ba16e6 Binary files /dev/null and b/Rapoarte/precog.frx differ diff --git a/Rapoarte/rap_articole_comenzi.FRT b/Rapoarte/rap_articole_comenzi.FRT new file mode 100644 index 0000000..7ae3b13 Binary files /dev/null and b/Rapoarte/rap_articole_comenzi.FRT differ diff --git a/Rapoarte/rap_articole_comenzi.frx b/Rapoarte/rap_articole_comenzi.frx new file mode 100644 index 0000000..bf4944b Binary files /dev/null and b/Rapoarte/rap_articole_comenzi.frx differ diff --git a/Rapoarte/rap_comanda.FRT b/Rapoarte/rap_comanda.FRT new file mode 100644 index 0000000..ee2c0ca Binary files /dev/null and b/Rapoarte/rap_comanda.FRT differ diff --git a/Rapoarte/rap_comanda.frx b/Rapoarte/rap_comanda.frx new file mode 100644 index 0000000..c913a88 Binary files /dev/null and b/Rapoarte/rap_comanda.frx differ diff --git a/Rapoarte/rap_deviz.FRT b/Rapoarte/rap_deviz.FRT new file mode 100644 index 0000000..256ae87 Binary files /dev/null and b/Rapoarte/rap_deviz.FRT differ diff --git a/Rapoarte/rap_deviz.frx b/Rapoarte/rap_deviz.frx new file mode 100644 index 0000000..0704404 Binary files /dev/null and b/Rapoarte/rap_deviz.frx differ diff --git a/Rapoarte/rap_devize_marci.FRT b/Rapoarte/rap_devize_marci.FRT new file mode 100644 index 0000000..40d2abb Binary files /dev/null and b/Rapoarte/rap_devize_marci.FRT differ diff --git a/Rapoarte/rap_devize_marci.frx b/Rapoarte/rap_devize_marci.frx new file mode 100644 index 0000000..1f27790 Binary files /dev/null and b/Rapoarte/rap_devize_marci.frx differ diff --git a/Rapoarte/rap_devizest.FRT b/Rapoarte/rap_devizest.FRT new file mode 100644 index 0000000..37dbb4a Binary files /dev/null and b/Rapoarte/rap_devizest.FRT differ diff --git a/Rapoarte/rap_devizest.frx b/Rapoarte/rap_devizest.frx new file mode 100644 index 0000000..94b74a5 Binary files /dev/null and b/Rapoarte/rap_devizest.frx differ diff --git a/Rapoarte/rap_facturi_asig.FRT b/Rapoarte/rap_facturi_asig.FRT new file mode 100644 index 0000000..ec21154 Binary files /dev/null and b/Rapoarte/rap_facturi_asig.FRT differ diff --git a/Rapoarte/rap_facturi_asig.frx b/Rapoarte/rap_facturi_asig.frx new file mode 100644 index 0000000..c6cf02e Binary files /dev/null and b/Rapoarte/rap_facturi_asig.frx differ diff --git a/Rapoarte/rap_facturi_clienti.FRT b/Rapoarte/rap_facturi_clienti.FRT new file mode 100644 index 0000000..b6d8bfa Binary files /dev/null and b/Rapoarte/rap_facturi_clienti.FRT differ diff --git a/Rapoarte/rap_facturi_clienti.frx b/Rapoarte/rap_facturi_clienti.frx new file mode 100644 index 0000000..c724d23 Binary files /dev/null and b/Rapoarte/rap_facturi_clienti.frx differ diff --git a/Rapoarte/rap_facturi_sectii.FRT b/Rapoarte/rap_facturi_sectii.FRT new file mode 100644 index 0000000..04694b8 Binary files /dev/null and b/Rapoarte/rap_facturi_sectii.FRT differ diff --git a/Rapoarte/rap_facturi_sectii.frx b/Rapoarte/rap_facturi_sectii.frx new file mode 100644 index 0000000..d3d08f0 Binary files /dev/null and b/Rapoarte/rap_facturi_sectii.frx differ diff --git a/Rapoarte/rap_manasig.frt b/Rapoarte/rap_manasig.frt new file mode 100644 index 0000000..8c4974e Binary files /dev/null and b/Rapoarte/rap_manasig.frt differ diff --git a/Rapoarte/rap_manasig.frx b/Rapoarte/rap_manasig.frx new file mode 100644 index 0000000..a243f16 Binary files /dev/null and b/Rapoarte/rap_manasig.frx differ diff --git a/Rapoarte/rap_manopera_anfabricatie.FRT b/Rapoarte/rap_manopera_anfabricatie.FRT new file mode 100644 index 0000000..5631afc Binary files /dev/null and b/Rapoarte/rap_manopera_anfabricatie.FRT differ diff --git a/Rapoarte/rap_manopera_anfabricatie.frx b/Rapoarte/rap_manopera_anfabricatie.frx new file mode 100644 index 0000000..5f13a55 Binary files /dev/null and b/Rapoarte/rap_manopera_anfabricatie.frx differ diff --git a/Rapoarte/rap_manopera_anfabricatie_c.FRT b/Rapoarte/rap_manopera_anfabricatie_c.FRT new file mode 100644 index 0000000..653ffe3 Binary files /dev/null and b/Rapoarte/rap_manopera_anfabricatie_c.FRT differ diff --git a/Rapoarte/rap_manopera_anfabricatie_c.frx b/Rapoarte/rap_manopera_anfabricatie_c.frx new file mode 100644 index 0000000..8917198 Binary files /dev/null and b/Rapoarte/rap_manopera_anfabricatie_c.frx differ diff --git a/Rapoarte/rap_manopera_sectii.FRT b/Rapoarte/rap_manopera_sectii.FRT new file mode 100644 index 0000000..d464136 Binary files /dev/null and b/Rapoarte/rap_manopera_sectii.FRT differ diff --git a/Rapoarte/rap_manopera_sectii.frx b/Rapoarte/rap_manopera_sectii.frx new file mode 100644 index 0000000..b53419e Binary files /dev/null and b/Rapoarte/rap_manopera_sectii.frx differ diff --git a/Rapoarte/rap_oper.FRT b/Rapoarte/rap_oper.FRT new file mode 100644 index 0000000..f88156d Binary files /dev/null and b/Rapoarte/rap_oper.FRT differ diff --git a/Rapoarte/rap_oper.frx b/Rapoarte/rap_oper.frx new file mode 100644 index 0000000..07047cb Binary files /dev/null and b/Rapoarte/rap_oper.frx differ diff --git a/Rapoarte/rap_verifvenit.FRT b/Rapoarte/rap_verifvenit.FRT new file mode 100644 index 0000000..a5e3393 Binary files /dev/null and b/Rapoarte/rap_verifvenit.FRT differ diff --git a/Rapoarte/rap_verifvenit.frx b/Rapoarte/rap_verifvenit.frx new file mode 100644 index 0000000..b8f77b6 Binary files /dev/null and b/Rapoarte/rap_verifvenit.frx differ diff --git a/Rapoarte/salarii.FRT b/Rapoarte/salarii.FRT new file mode 100644 index 0000000..a1a379f Binary files /dev/null and b/Rapoarte/salarii.FRT differ diff --git a/Rapoarte/salarii.frx b/Rapoarte/salarii.frx new file mode 100644 index 0000000..b1568d4 Binary files /dev/null and b/Rapoarte/salarii.frx differ diff --git a/Rapoarte/tprod.FRT b/Rapoarte/tprod.FRT new file mode 100644 index 0000000..3c44136 Binary files /dev/null and b/Rapoarte/tprod.FRT differ diff --git a/Rapoarte/tprod.frx b/Rapoarte/tprod.frx new file mode 100644 index 0000000..7c2e7ba Binary files /dev/null and b/Rapoarte/tprod.frx differ diff --git a/Rapoarte/verordl.FRT b/Rapoarte/verordl.FRT new file mode 100644 index 0000000..49c548f Binary files /dev/null and b/Rapoarte/verordl.FRT differ diff --git a/Rapoarte/verordl.frx b/Rapoarte/verordl.frx new file mode 100644 index 0000000..4edaa98 Binary files /dev/null and b/Rapoarte/verordl.frx differ diff --git a/Scripturi_instalare/20090413/script_mv.txt b/Scripturi_instalare/20090413/script_mv.txt new file mode 100644 index 0000000..68841f2 --- /dev/null +++ b/Scripturi_instalare/20090413/script_mv.txt @@ -0,0 +1,265 @@ +CREATE MATERIALIZED VIEW LOG ON act WITH PRIMARY KEY, ROWID, SEQUENCE(id_lucrare,dataact,nract,id_set,scc,scd,luna,an,suma,sters,explicatia) +INCLUDING NEW VALUES; +CREATE MATERIALIZED VIEW LOG ON rul WITH PRIMARY KEY, ROWID, SEQUENCE(id_lucrare,luna,an,pretv,cante,sters) +INCLUDING NEW VALUES; +CREATE MATERIALIZED VIEW LOG ON dev_oper WITH PRIMARY KEY, ROWID, SEQUENCE(id_ordl,datai,pret,timpn,nou,sters) +INCLUDING NEW VALUES; + +create materialized view MV_ORDL_MAN +refresh fast on commit +as +select id_ordl, + extract(month from datai) + extract(year from datai) * 12 as luni, + sum(case + when nou = 0 then + round(round(pret / 10000, 2) * timpn, 2) + else + round(pret * timpn, 2) + end) as manopera_ron, + sum(case + when nou = 0 then + round(pret * timpn, 2) + else + 0 + end) as manopera_rol, + count(*) as cnt, + count(case + when nou = 0 then + round(round(pret / 10000, 2) * timpn, 2) + else + round(pret * timpn, 2) + end) as cnt_manopera_ron, + count(case + when nou = 0 then + round(pret * timpn, 2) + else + 0 + end) as cnt_manopera_rol + from dev_oper + where sters = 0 + group by id_ordl, + extract(month from datai) + extract(year from datai) * 12 +/ + +create materialized view MV_ORDL_MAT +refresh force on commit +as +select id_lucrare, + luna + an * 12 as luni, + sum(case + when luna + an * 12 < 7 + 2005 * 12 then + round(round(pretv / 10000, 2) * cante, 2) + else + round(pretv * cante, 2) + end) as materiale_ron, + sum(case + when luna + an * 12 < 7 + 2005 * 12 then + round(pretv * cante, 2) + else + 0 + end) as materiale_rol, + count(*) as cnt, + count(case + when luna + an * 12 < 7 + 2005 * 12 then + round(round(pretv / 10000, 2) * cante, 2) + else + round(pretv * cante, 2) + end) as cnt_materiale_ron, + count(case + when luna + an * 12 < 7 + 2005 * 12 then + round(pretv * cante, 2) + else + 0 + end) as cnt_materiale_rol + from rul + where sters = 0 + group by id_lucrare, luna + an * 12 +/ + +create materialized view MV_ORDL_SUME_ACT +refresh fast on commit +as +select id_lucrare, + dataact, + nract, + id_set, + sum(case + when scc = '704' then + (case + when luna + an * 12 < 7 + 2005 * 12 then + round(suma / 10000, 2) + else + suma + end) when explicatia like 'DISCOUNT MANOPERA%' and scc <> '4427' then(case + when luna + + an * 12 < 7 + + 2005 * 12 then + round((-1) * + (abs(suma)) / + 10000, + 2) + else + (-1) * + (abs(suma)) + end) else 0 end) as manopera_ron, + sum(case + when scc in ('707', '419') then + (case + when luna + an * 12 < 7 + 2005 * 12 then + round(suma / 10000, 2) + else + suma + end) when explicatia like 'DISCOUNT MATERIALE%' and scc <> '4427' then(case + when luna + + an * 12 < 7 + + 2005 * 12 then + round((-1) * + (abs(suma)) / + 10000, + 2) + else + (-1) * + (abs(suma)) + end) else 0 end) as materiale_ron, + sum(case + when scc = '4427' then + (case + when luna + an * 12 < 7 + 2005 * 12 then + round(suma / 10000, 2) + else + suma + end) else 0 end) as tva_ron, + sum(case + when scc = '704' then + (case + when luna + an * 12 < 7 + 2005 * 12 then + suma + else + 0 + end) when explicatia like 'DISCOUNT MANOPERA%' and scc <> '4427' then(case + when luna + + an * 12 < 7 + + 2005 * 12 then + (-1) * + (abs(suma)) + else + 0 + end) else 0 end) as manopera_rol, + sum(case + when scc in ('707', '419') then + (case + when luna + an * 12 < 7 + 2005 * 12 then + suma + else + 0 + end) when explicatia like 'DISCOUNT MATERIALE%' and scc <> '4427' then(case + when luna + + an * 12 < 7 + + 2005 * 12 then + (-1) * + (abs(suma)) + else + 0 + end) else 0 end) as materiale_rol, + sum(case + when scc = '4427' then + (case + when luna + an * 12 < 7 + 2005 * 12 then + suma + else + 0 + end) else 0 end) as tva_rol, + count(*) as cnt, + count(case + when scc = '704' then + (case + when luna + an * 12 < 7 + 2005 * 12 then + round(suma / 10000, 2) + else + suma + end) when explicatia like 'DISCOUNT MANOPERA%' and scc <> '4427' then(case + when luna + + an * 12 < 7 + + 2005 * 12 then + round((-1) * + (abs(suma)) / + 10000, + 2) + else + (-1) * + (abs(suma)) + end) else 0 end) as cnt_manopera_ron, + count(case + when scc in ('707', '419') then + (case + when luna + an * 12 < 7 + 2005 * 12 then + round(suma / 10000, 2) + else + suma + end) when explicatia like 'DISCOUNT MATERIALE%' and scc <> '4427' then(case + when luna + + an * 12 < 7 + + 2005 * 12 then + round((-1) * + (abs(suma)) / + 10000, + 2) + else + (-1) * + (abs(suma)) + end) else 0 end) as cnt_materiale_ron, + count(case + when scc = '4427' then + (case + when luna + an * 12 < 7 + 2005 * 12 then + round(suma / 10000, 2) + else + suma + end) else 0 end) as cnt_tva_ron, + count(case + when scc = '704' then + (case + when luna + an * 12 < 7 + 2005 * 12 then + suma + else + 0 + end) when explicatia like 'DISCOUNT MANOPERA%' and scc <> '4427' then(case + when luna + + an * 12 < 7 + + 2005 * 12 then + (-1) * + (abs(suma)) + else + 0 + end) else 0 end) as cnt_manopera_rol, + count(case + when scc in ('707', '419') then + (case + when luna + an * 12 < 7 + 2005 * 12 then + suma + else + 0 + end) when explicatia like 'DISCOUNT MATERIALE%' and scc <> '4427' then(case + when luna + + an * 12 < 7 + + 2005 * 12 then + (-1) * + (abs(suma)) + else + 0 + end) else 0 end) as cnt_materiale_rol, + count(case + when scc = '4427' then + (case + when luna + an * 12 < 7 + 2005 * 12 then + suma + else + 0 + end) else 0 end) as cnt_tva_rol + from act + where sters = 0 + and scd in ('4111', '667', '482', '711', '6588') + and id_set in + (31001, 31002, 31003, 31004, 31005, 31006, 31007, 31011, 31012) + group by id_lucrare, dataact, nract, id_set +/ \ No newline at end of file diff --git a/Scripturi_instalare/ROAAUTO_instalare.sql b/Scripturi_instalare/ROAAUTO_instalare.sql new file mode 100644 index 0000000..c37097d --- /dev/null +++ b/Scripturi_instalare/ROAAUTO_instalare.sql @@ -0,0 +1,25 @@ +prompt Versiunea ROAAUTO: 1.4.151 +prompt Pana la scriptul script_ff_2006_01_28_4.sql (inclusiv) din COMUN +prompt ================================================================ +prompt + +prompt +prompt Creare structura +prompt ================ +prompt + +@D:\CONTAFIN_ORACLE\ROAAUTO\Scripturi_instalare\curatare_schema.sql; +@D:\CONTAFIN_ORACLE\ROAAUTO\Scripturi_instalare\tabele.sql; +@D:\CONTAFIN_ORACLE\ROAAUTO\Scripturi_instalare\secvente.sql; +@D:\CONTAFIN_ORACLE\ROAAUTO\Scripturi_instalare\triggere.sql; +@D:\CONTAFIN_ORACLE\ROAAUTO\Scripturi_instalare\procfunc.sql; +@D:\CONTAFIN_ORACLE\ROAAUTO\Scripturi_instalare\packages.sql; +@D:\CONTAFIN_ORACLE\ROAAUTO\Scripturi_instalare\viewuri_materializate.sql; +@D:\CONTAFIN_ORACLE\ROAAUTO\Scripturi_instalare\viewuri.sql; + +prompt +prompt Initializari date ( trebuie sa existe tabela SAL_PERSONAL ) +prompt =========================================================== +prompt + +@D:\CONTAFIN_ORACLE\ROAAUTO\Scripturi_instalare\initializari.sql; \ No newline at end of file diff --git a/Scripturi_instalare/curatare_schema.sql b/Scripturi_instalare/curatare_schema.sql new file mode 100644 index 0000000..c633d34 --- /dev/null +++ b/Scripturi_instalare/curatare_schema.sql @@ -0,0 +1,296 @@ +-------------------------------------------------------- +-- Pregatire schema pentru ROAAUTO -- +-- Created by marius.atanasiu on 2/2/2006, 9:42:17 AM -- +-------------------------------------------------------- + +spool curatare_schema.log + +PROMPT +PROMPT Droping views +PROMPT ============= +PROMPT +declare + cursor crsviewuri is + select view_name from user_views where view_name like 'DEV_%'; + linie_view crsviewuri%rowtype; +begin + open crsviewuri; + loop + fetch crsviewuri into linie_view; + exit when crsviewuri%notfound; + execute immediate 'DROP VIEW '||linie_view.view_name; + end loop; +end; +/ + +PROMPT +PROMPT Droping materialized view mv_ordl_sume_act +PROMPT ========================================== +PROMPT +drop materialized view mv_ordl_sume_act +/ + +PROMPT +PROMPT Droping materialized view log on act +PROMPT ==================================== +PROMPT +drop materialized view log on act +/ + +PROMPT +PROMPT Droping materialized view mv_ordl_man +PROMPT ===================================== +PROMPT +drop materialized view MV_ORDL_MAN +/ + +PROMPT +PROMPT Droping materialized view log on dev_oper +PROMPT ========================================= +PROMPT +drop materialized view log on dev_oper +/ + +PROMPT +PROMPT Droping materialized view log on rul +PROMPT ==================================== +PROMPT +drop materialized view log on rul +/ + +PROMPT +PROMPT Droping materialized view mv_ordl_mat +PROMPT ===================================== +PROMPT +drop materialized view mv_ordl_mat +/ + +prompt +prompt Droping table DEV_CONTRACTE +prompt =========================== +prompt +drop table DEV_CONTRACTE; + +prompt +prompt Droping table DEV_FACTURI +prompt ========================== +prompt +drop table DEV_FACTURI; + +prompt +prompt Droping table DEV_NOM_FURNIZORIMASINI +prompt ===================================== +prompt +drop table DEV_NOM_FURNIZORIMASINI; + +prompt +prompt Droping table DEV_NOM_MARCI +prompt =========================== +prompt +drop table DEV_NOM_MARCI; + +prompt +prompt Droping table DEV_NOM_MASINI +prompt ============================ +prompt +drop table DEV_NOM_MASINI; + +prompt +prompt Droping table DEV_TIPURI_MOTOARE +prompt ================================ +prompt +drop table DEV_TIPURI_MOTOARE; + +prompt +prompt Droping table DEV_MASINICLIENTI +prompt =============================== +prompt +drop table DEV_MASINICLIENTI; + +prompt +prompt Droping table DEV_MECANICI +prompt ========================== +prompt +drop table DEV_MECANICI; + +prompt +prompt Droping table DEV_NOM_ANSAMBLE +prompt ============================== +prompt +drop table DEV_NOM_ANSAMBLE; + +prompt +prompt Droping table DEV_NOM_ASIGURATORI +prompt ================================= +prompt +drop table DEV_NOM_ASIGURATORI; + +prompt +prompt Droping table DEV_NOM_DELEGATI +prompt ============================== +prompt +drop table DEV_NOM_DELEGATI; + +prompt +prompt Droping table DEV_NOM_INSPECTORI +prompt ================================ +prompt +drop table DEV_NOM_INSPECTORI; + +prompt +prompt Droping table DEV_NOM_NORME +prompt =========================== +prompt +drop table DEV_NOM_NORME; + +prompt +prompt Droping table DEV_NOM_PRETURI +prompt ============================= +prompt +drop table DEV_NOM_PRETURI; + +prompt +prompt Droping table DEV_NOM_RESP +prompt ========================== +prompt +drop table DEV_NOM_RESP; + +prompt +prompt Droping table DEV_ORDL +prompt ====================== +prompt +drop table DEV_ORDL; + +prompt +prompt Droping table DEV_OPER +prompt ====================== +prompt +drop table DEV_OPER; + +prompt +prompt Droping table DEV_OPER_MECANICI +prompt =============================== +prompt +drop table DEV_OPER_MECANICI; + +prompt +prompt Droping table DEV_REVIZII +prompt ========================= +prompt +drop table DEV_REVIZII; + +prompt +prompt Droping table DEV_TIP_DEVIZ +prompt =========================== +prompt +drop table DEV_TIP_DEVIZ; + +prompt +prompt Droping sequence SEQ_DEV_COMANDA +prompt ================================ +prompt +drop sequence SEQ_DEV_COMANDA; + +prompt +prompt Droping sequence SEQ_DEV_MASINICLIENTI +prompt ====================================== +prompt +drop sequence SEQ_DEV_MASINICLIENTI; + +prompt +prompt Droping sequence SEQ_DEV_MECANICI +prompt ================================= +prompt +drop sequence SEQ_DEV_MECANICI; + +prompt +prompt Droping sequence SEQ_DEV_NOM_ANSAMBLE +prompt ===================================== +prompt +drop sequence SEQ_DEV_NOM_ANSAMBLE; + +prompt +prompt Droping sequence SEQ_DEV_NOM_ASIGURATORI +prompt ======================================== +prompt +drop sequence SEQ_DEV_NOM_ASIGURATORI; + +prompt +prompt Droping sequence SEQ_DEV_NOM_DELEGATI +prompt ===================================== +prompt +drop sequence SEQ_DEV_NOM_DELEGATI; + +prompt +prompt Droping sequence SEQ_DEV_NOM_FURNIZORIMASINI +prompt ============================================ +prompt +drop sequence SEQ_DEV_NOM_FURNIZORIMASINI; + +prompt +prompt Droping sequence SEQ_DEV_NOM_INSPECTORI +prompt ======================================= +prompt +drop sequence SEQ_DEV_NOM_INSPECTORI; + +prompt +prompt Droping sequence SEQ_DEV_NOM_MARCI +prompt ================================== +prompt +drop sequence SEQ_DEV_NOM_MARCI; + +prompt +prompt Droping sequence SEQ_DEV_NOM_MASINI +prompt =================================== +prompt +drop sequence SEQ_DEV_NOM_MASINI; + +prompt +prompt Droping sequence SEQ_DEV_NOM_NORME +prompt ================================== +prompt +drop sequence SEQ_DEV_NOM_NORME; + +prompt +prompt Droping sequence SEQ_DEV_NOM_PRETURI +prompt ==================================== +prompt +drop sequence SEQ_DEV_NOM_PRETURI; + +prompt +prompt Droping sequence SEQ_DEV_NOM_RESP +prompt ================================= +prompt +drop sequence SEQ_DEV_NOM_RESP; + +prompt +prompt Droping sequence SEQ_DEV_OPER +prompt ============================= +prompt +drop sequence SEQ_DEV_OPER; + +prompt +prompt Droping sequence SEQ_DEV_OPER_MECANICI +prompt ====================================== +prompt +drop sequence SEQ_DEV_OPER_MECANICI; + +prompt +prompt Droping sequence SEQ_DEV_ORDL +prompt ============================= +prompt +drop sequence SEQ_DEV_ORDL; + +prompt +prompt Droping sequence SEQ_DEV_TIP_DEVIZ +prompt ================================== +prompt +drop sequence SEQ_DEV_TIP_DEVIZ; + +prompt +prompt Droping sequence SEQ_DEV_TIPURI_MOTOARE +prompt ======================================= +prompt +drop sequence SEQ_DEV_TIPURI_MOTOARE; + +spool off \ No newline at end of file diff --git a/Scripturi_instalare/initializari.sql b/Scripturi_instalare/initializari.sql new file mode 100644 index 0000000..7a4e90c --- /dev/null +++ b/Scripturi_instalare/initializari.sql @@ -0,0 +1,217 @@ +set feedback off +set define off + +prompt +prompt Initializare SAL_PERSONAL +prompt ========================= + +prompt Disabling triggers for SAL_PERSONAL... +alter table SAL_PERSONAL disable all triggers; + +prompt Deleting SAL_PERSONAL... +delete from SAL_PERSONAL where id_salariat=0; +commit; + +prompt Loading SAL_PERSONAL... +insert into SAL_PERSONAL (ID_SALARIAT, NUME, PRENUME, MARCA, STERS, INACTIV, BINR, BLOC, CMNR, LOCNASTERE, LOCALITATE, LIVRETMIL, JUDET, ID_PART, ETAJ, CODPOSTAL, CODPERS, CMSERIA, VECHIMEI, STRADA, SPECIALIZ, SITMIL, SECTOR, SCARA, NUMAR, NATIONALIT, MODINCADR, CETATENIE, BISERIA, BIELIBERAT, APART, BIDATA, DATA_VECH, STARECIV, NUMEMAMA, NUMESOT, NUMETATA, ID_PROFESIE, VECHIMEZ) +values (0, '', null, 0, 0, 0, null, null, null, null, null, null, null, 0, null, null, 0, null, 0, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 0, null, null, null, null, 0); +commit; +prompt 1 records loaded + +prompt Enabling triggers for SAL_PERSONAL... +alter table SAL_PERSONAL enable all triggers; + +prompt +prompt Initializare DEV_MECANICI +prompt ========================= +prompt Disabling triggers for DEV_MECANICI... +alter table DEV_MECANICI disable all triggers; + +prompt Deleting DEV_MECANICI... +delete from DEV_MECANICI where id_mecanic=1; +commit; + +prompt Loading DEV_MECANICI... +insert into DEV_MECANICI (ID_MECANIC, ID_SALARIAT, ID_SECTIE, STERS, INACTIV) +values (1, 0, null, 0, 0); +commit; +prompt 1 records loaded + +prompt Enabling triggers for DEV_MECANICI... +alter table DEV_MECANICI enable all triggers; + +prompt +prompt Initializare DEV_NOM_ANSAMBLE +prompt ============================= +prompt Disabling triggers for DEV_NOM_ANSAMBLE... +alter table DEV_NOM_ANSAMBLE disable all triggers; + +prompt Deleting DEV_NOM_ANSAMBLE... +delete from DEV_NOM_ANSAMBLE where id_ansamblu=0; +commit; + +prompt Loading DEV_NOM_ANSAMBLE... +insert into DEV_NOM_ANSAMBLE (ID_ANSAMBLU, DENUMIRE, STERS, INACTIV) +values (0, null, 0, 0); +commit; +prompt 1 records loaded + +prompt Enabling triggers for DEV_NOM_ANSAMBLE... +alter table DEV_NOM_ANSAMBLE enable all triggers; + +prompt +prompt Initializare DEV_NOM_ASIGURATORI +prompt ================================ +prompt Disabling triggers for DEV_NOM_ASIGURATORI... +alter table DEV_NOM_ASIGURATORI disable all triggers; + +prompt Deleting DEV_NOM_ASIGURATORI... +delete from DEV_NOM_ASIGURATORI where id_asigurator=0; +commit; + +prompt Loading DEV_NOM_ASIGURATORI... +insert into DEV_NOM_ASIGURATORI (ID_ASIGURATOR, ASIGURATOR, STERS, INACTIV) +values (0, null, 0, 0); +commit; +prompt 1 records loaded + +prompt Enabling triggers for DEV_NOM_ASIGURATORI... +alter table DEV_NOM_ASIGURATORI enable all triggers; + +prompt +prompt Initializare DEV_NOM_FURNIZORIMASINI +prompt ==================================== +prompt Disabling triggers for DEV_NOM_FURNIZORIMASINI... +alter table DEV_NOM_FURNIZORIMASINI disable all triggers; + +prompt Deleting DEV_NOM_FURNIZORIMASINI... +delete from DEV_NOM_FURNIZORIMASINI where id_furnizor=0; +commit; + +prompt Loading DEV_NOM_FURNIZORIMASINI... +insert into DEV_NOM_FURNIZORIMASINI (ID_FURNIZOR, DENUMIRE, STERS, INACTIV) +values (0, null, 0, 0); +commit; +prompt 1 records loaded + +prompt Enabling triggers for DEV_NOM_FURNIZORIMASINI... +alter table DEV_NOM_FURNIZORIMASINI enable all triggers; + +prompt +prompt Initializare DEV_NOM_INSPECTORI +prompt =============================== +prompt Disabling triggers for DEV_NOM_INSPECTORI... +alter table DEV_NOM_INSPECTORI disable all triggers; + +prompt Disabling foreign key constraints for DEV_NOM_INSPECTORI... +alter table DEV_NOM_INSPECTORI disable constraint FK_NOM_ASIGURATORI; + +prompt Deleting DEV_NOM_INSPECTORI... +delete from DEV_NOM_INSPECTORI where id_inspector=0; +commit; + +prompt Loading DEV_NOM_INSPECTORI... +insert into DEV_NOM_INSPECTORI (ID_INSPECTOR, INSPECTOR, ID_ASIGURATOR, STERS, INACTIV) +values (0, null, 0, 0, 0); +commit; +prompt 1 records loaded + +prompt Enabling foreign key constraints for DEV_NOM_INSPECTORI... +alter table DEV_NOM_INSPECTORI enable constraint FK_NOM_ASIGURATORI; + +prompt Enabling triggers for DEV_NOM_INSPECTORI... +alter table DEV_NOM_INSPECTORI enable all triggers; + +prompt +prompt Initializare DEV_NOM_MARCI +prompt ================================ +prompt Disabling triggers for DEV_NOM_MARCI... +alter table DEV_NOM_MARCI disable all triggers; + +prompt Deleting DEV_NOM_MARCI... +delete from DEV_NOM_MARCI where id_marca=0; +commit; + +prompt Loading DEV_NOM_MARCI... +insert into DEV_NOM_MARCI (ID_MARCA, MARCA, STERS, INACTIV) +values (0, null, 0, 0); +commit; +prompt 1 records loaded + +prompt Enabling triggers for DEV_NOM_MARCI... +alter table DEV_NOM_MARCI enable all triggers; + +prompt +prompt Initializare DEV_NOM_MASINI +prompt =========================== +prompt Disabling triggers for DEV_NOM_MASINI... +alter table DEV_NOM_MASINI disable all triggers; + +prompt Disabling foreign key constraints for DEV_NOM_MASINI... +alter table DEV_NOM_MASINI disable constraint FK_MARCA; + +prompt Deleting DEV_NOM_MASINI... +delete from DEV_NOM_MASINI where id_masina=0; +commit; + +prompt Loading DEV_NOM_MASINI... +insert into DEV_NOM_MASINI (ID_MASINA, ID_MARCA, MASINA, SCTIP, CLASA, STERS, INACTIV) +values (0, 0, null, null, null, 0, 0); +commit; +prompt 1 records loaded + +prompt Enabling foreign key constraints for DEV_NOM_MASINI... +alter table DEV_NOM_MASINI enable constraint FK_MARCA; + +prompt Enabling triggers for DEV_NOM_MASINI... +alter table DEV_NOM_MASINI enable all triggers; + +prompt +prompt Initializare DEV_TIPURI_MOTOARE +prompt =============================== +prompt Disabling triggers for DEV_TIPURI_MOTOARE... +alter table DEV_TIPURI_MOTOARE disable all triggers; + +prompt Deleting DEV_TIPURI_MOTOARE... +delete from DEV_TIPURI_MOTOARE where id_tipmotor=0; +commit; + +prompt Loading DEV_TIPURI_MOTOARE... +insert into DEV_TIPURI_MOTOARE (ID_TIPMOTOR, DENUMIRE, STERS, INACTIV) +values (0, null, 0, 0); +commit; +prompt 1 records loaded + +prompt Enabling triggers for DEV_TIPURI_MOTOARE... +alter table DEV_TIPURI_MOTOARE enable all triggers; + +prompt +prompt Initializare DEV_TIP_DEVIZ +prompt ========================== +prompt Disabling triggers for DEV_TIP_DEVIZ... +alter table DEV_TIP_DEVIZ disable all triggers; + +prompt Deleting DEV_TIP_DEVIZ... +delete from DEV_TIP_DEVIZ; +commit; + +prompt Loading DEV_TIP_DEVIZ... +insert into DEV_TIP_DEVIZ (ID_TIP, DENUMIRE, STERS) +values (1, 'POST GARANTIE', 0); +insert into DEV_TIP_DEVIZ (ID_TIP, DENUMIRE, STERS) +values (2, 'GARANTIE', 0); +insert into DEV_TIP_DEVIZ (ID_TIP, DENUMIRE, STERS) +values (3, 'REGIE', 0); +insert into DEV_TIP_DEVIZ (ID_TIP, DENUMIRE, STERS) +values (4, 'PREGATIRE', 0); +insert into DEV_TIP_DEVIZ (ID_TIP, DENUMIRE, STERS) +values (5, 'REGIE 2', 0); +commit; +prompt 5 records loaded + +prompt Enabling triggers for DEV_TIP_DEVIZ... +alter table DEV_TIP_DEVIZ enable all triggers; + +set feedback on +set define on +prompt Done. diff --git a/Scripturi_instalare/packages.sql b/Scripturi_instalare/packages.sql new file mode 100644 index 0000000..bfaa406 --- /dev/null +++ b/Scripturi_instalare/packages.sql @@ -0,0 +1,477 @@ +----------------------------------------------------------------- +-- Package & package body PACK_DEVIZE pentru ROAAUTO v 1.4.151 -- +-- Created by marius.atanasiu on 2/2/2006, 9:51:33 AM -- +----------------------------------------------------------------- + +spool packages.log + +prompt +prompt Creating package PACK_DEVIZE +prompt ============================ +prompt +create or replace package pack_devize is + + -- Author : LIANA.MACINIC + -- Created : 1/7/2005 11:40:29 AM + -- Purpose : + procedure dev_sterge_comanda(tcSchema in varchar2, + tnIdUtil in number, + tnIdOrdl in number, + tnIdLucrare in number); + + procedure dev_adauga_oper_fact(tcSchema in varchar2, + tnIdOrdl in number, + tnIdSectie in number, + tnIdNorme in number, + tnTotalFTva in number, + tnTimpN in number, + tnOre in number, + tnIdUtil in number, + tnIdMecanic in number); + + procedure dev_adauga_lucrare(v_gcs in varchar2, + tnan in number, + tnluna in number, + tnIdUtil in number, + pcNr in varchar2, + pnIdInsp in number, + pnIdAsig in number, + pnIdMC in number, + pnKmInt in number, + pdTermen in date, + pnTipCom in number, + pnIdOrdl out number); + + procedure dev_valideaza_comanda(v_gcs in varchar2, + tnid_ordl in number, + tnid_util in number); + + procedure dev_invalideaza_comanda(v_gcs in varchar2, + tnid_ordl in number, + tnid_utils in number); + + procedure dev_distribuie_timp_n(v_gcs in varchar2, v_filtru in varchar2); + + procedure dev_adauga_operatie(v_gcs in varchar2, + tnid_sectie in number, + tnid_ordl in number, + tnpret in number, + tnid_util in number, + tntimpn in number, + tnid_norme in number, + tcsir_idmecanic in varchar2); + + procedure dev_actualizeaza_operatie(v_gcs in varchar2, + v_camp in varchar2, + v_valoare_noua in number, + v_id_oper in number, + v_luna in number, + v_an in number); + + procedure dev_valideaza_operatie(v_gcs in varchar2, + tnid_oper in number, + tnid_util in number); + + procedure dev_valideaza_operatii(v_gcs in varchar2, + tnid_ordl in number, + tnid_util in number); + + procedure dev_completeaza_rul(v_gcs in varchar2, tnid_lucrare in number); + + procedure valideaza_operatie(V_SCHEMA IN VARCHAR2, + V_VALIDAT IN NUMBER, + V_ID_OPER IN NUMBER, + V_ID_UTIL IN NUMBER); + + procedure modifica_sectie(V_SCHEMA IN VARCHAR2, + V_ID_SECTIE IN NUMBER, + V_ID_OPER IN NUMBER, + V_ID_UTIL IN NUMBER); + + procedure modifica_tip_comanda(V_SCHEMA IN VARCHAR2, + V_ID_TIP IN NUMBER, + V_ID_ORDL IN NUMBER, + V_ID_UTIL IN NUMBER); + + procedure sterge_operatie(V_SCHEMA IN VARCHAR2, + V_ID_OPER IN NUMBER, + V_ID_UTIL IN NUMBER); +end pack_devize; +/ + +prompt +prompt Creating package body PACK_DEVIZE +prompt ================================= +prompt +CREATE OR REPLACE PACKAGE BODY pack_devize is + procedure dev_sterge_comanda(tcSchema in varchar2, + tnIdUtil in number, + tnIdOrdl in number, + tnIdLucrare in number) is + lnRulaje NUMBER(3) := 0; + lnOperatii NUMBER(3) := 0; + BEGIN + EXECUTE IMMEDIATE 'SELECT COUNT(*) AS SUMA FROM ' || tcSchema || + '.RUL WHERE ID_LUCRARE=:1 AND STERS=0' + INTO lnRulaje + USING tnIdLucrare; + + IF lnRulaje > 0 then + raise_application_error(-20001, + 'Aceasta comanda nu poate fi stearsa, deoarece are legaturi in rulaje!'); + ELSE + EXECUTE IMMEDIATE 'SELECT COUNT(*) AS SUMA FROM ' || tcSchema || + '.DEV_OPER WHERE ID_ORDL=:1 AND STERS=0' + INTO lnOperatii + USING tnIdOrdl; + + IF lnOperatii > 0 then + raise_application_error(-20001, + 'Aceasta comanda nu poate fi stearsa, deoarece are adaugate operatii!'); + ELSE + EXECUTE IMMEDIATE 'UPDATE ' || tcSchema || + '.DEV_ORDL SET STERS=1,ID_UTILS=:1,DATAORAS=SYSDATE WHERE ' || + 'ID_ORDL = :2' + USING tnIdUtil, tnIdOrdl; + END IF; + END IF; + END; + ------------------------------------------------------------------ + procedure dev_adauga_oper_fact(tcSchema in varchar2, + tnIdOrdl in number, + tnIdSectie in number, + tnIdNorme in number, + tnTotalFTva in number, + tnTimpN in number, + tnOre in number, + tnIdUtil in number, + tnIdMecanic in number) is + V_ID_OPER number(10); + V_PRET number(17, 4); + V_DATAORA date; + V_VALIDAT number(1); + v_nou number(1); + begin + if pack_sesiune.getAn() * 12 + pack_sesiune.getLuna() >= + pack_sesiune.GET_ANRON() * 12 + pack_sesiune.GET_LUNARON() then + v_nou := 1; + else + v_nou := 0; + end if; + + v_dataora := sysdate; + v_validat := 1; + execute immediate 'UPDATE ' || tcSchema || '.DEV_ORDL ' || + 'SET VALIDAT = :1,ID_UTIL_VALID = :2,DATAORAVALID = :3 WHERE ID_ORDL = :4 ' + using V_VALIDAT, tnIdUtil, V_DATAORA, tnIdOrdl; + + V_PRET := tnTotalFTva / tnTimpN; + + execute immediate 'INSERT INTO ' || tcSchema || + '.DEV_OPER(ID_ORDL,ID_SECTIE,TIMPN,PRET,ID_NORME,ID_UTIL,DATAORA,VALIDAT,NOU) ' || + 'VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9) RETURNING ID_OPER INTO :10' + using tnIdOrdl, tnIdSectie, tnTimpN, V_PRET, tnIdNorme, tnIdUtil, V_DATAORA, V_VALIDAT, V_NOU + returning into V_ID_OPER; + + execute immediate 'INSERT INTO ' || tcSchema || + '.DEV_OPER_MECANICI(ID_OPER,ID_MECANIC,ORE) ' || + 'VALUES(:1,:2,:3)' + using V_ID_OPER, tnIdMecanic, tnOre; + end; + ------------------------------------------------------------------ + procedure dev_adauga_lucrare(v_gcs in varchar2, + tnan in number, + tnluna in number, + tnIdUtil in number, + pcNr in varchar2, + pnIdInsp in number, + pnIdAsig in number, + pnIdMC in number, + pnKmInt in number, + pdTermen in date, + pnTipCom in number, + pnIdOrdl out number) is + V_DATAORA date := sysdate; + + begin + execute immediate 'INSERT INTO ' || v_gcs || '.NOM_LUCRARI (NRORD,ID_MOD) + VALUES( :1, 1200)' + using pcNr; + + execute immediate 'insert into ' || v_gcs || + '.dev_ordl + (an, luna, id_inspector, id_lucrare, datai, id_util_ad, id_masiniclient,id_asigurator,id_tip,kmint,termen,dataoraad) + values( :1 , :2 , :3 , :4 , :5 , :6 , :7 , :8, :9, :10, :11, :12) returning id_ordl into :13' + using tnAn, tnLuna, pnIdInsp, pack_sesiune.dev_idLucrare, v_dataora, tnIdUtil, pnIdMC, pnIdAsig, pnTipCom, pnKmInt, pdTermen, V_DATAORA + returning into pnidOrdl; + + execute immediate 'update ' || v_gcs || + '.dev_masiniclienti set kmint=:1 ' || + 'where id_masiniclient=:2' + using pnKmInt, pnIdMC; + end; + ------------------------------------------------------------------ + procedure dev_valideaza_comanda(v_gcs in varchar2, + tnid_ordl in number, + tnid_util in number) as + lnNevalidate NUMBER(3); + begin + execute immediate 'SELECT COUNT(*) FROM ' || v_gcs || '.DEV_OPER ' || + 'WHERE STERS=0 AND VALIDAT=0 AND ID_ORDL=:1' + into lnNevalidate + using tnid_ordl; + + if lnNevalidate > 0 then + RAISE_APPLICATION_ERROR(-20000, + 'Mai sunt operatii nevalidate pe aceasta comanda!' || + CHR(13) || CHR(10) || + LPAD(CHR(32), 12, CHR(32)) || + 'Comanda nu a fost validata!'); + end if; + execute immediate 'UPDATE ' || v_gcs || '.DEV_ORDL SET VALIDAT=1,' || + 'ID_UTIL_VALID=:1,DATAORAVALID=SYSDATE ' || + 'WHERE ID_ORDL=:2' + using tnid_util, tnid_ordl; + end; + ------------------------------------------------------------------ + procedure dev_invalideaza_comanda(v_gcs in varchar2, + tnid_ordl in number, + tnid_utils in number) AS + begin + execute immediate 'UPDATE ' || v_gcs || '.DEV_ORDL ' || + 'SET VALIDAT=0,ID_UTIL_VALID=0,DATAORAVALID=NULL,' || + 'ID_UTILS=:1,DATAORAS=SYSDATE ' || 'WHERE ID_ORDL=:2' + using tnid_utils, tnid_ordl; + end; + ------------------------------------------------------------------ + procedure dev_distribuie_timp_n(v_gcs in varchar2, v_filtru in varchar2) AS + lnManopera number(10); + lnSucces number(10); + lnTimpN number(7, 3); + lnId_oper number(10); + lnNrMecanici number(3); + lnOre number(7, 3); + lcSql varchar2(1000); + lcFiltru varchar2(2000); + lnSumaOre number(7, 3); + lnRanduri number(4); + lnIdMecanic number(1); + lcDevOper VARCHAR2(30); + begin + lcFiltru := replace(v_filtru, CHR(63), CHR(39)); + lnManopera := dbms_sql.open_cursor; + /*lcSql := 'SELECT B.ID_OPER,B.TIMPN,ROUND(SUM(NVL(D.ORE,-1.000)),3) + FROM ' || v_gcs || '.dev_vvalid_comenzi A + JOIN ' || v_gcs || + '.DEV_VOPER B ON A.ID_ORDL=B.ID_ORDL + LEFT JOIN ' || v_gcs || + '.DEV_VOPER_DETALII_M D ON B.ID_OPER=D.ID_OPER + WHERE ' || lcFiltru || ' + GROUP BY B.ID_OPER,B.TIMPN + HAVING B.TIMPN-ROUND(SUM(NVL(D.ORE,-1.000)),3)!=0';*/ + IF lcFiltru IS NULL THEN + lcDevOper := 'DEV_VOPER'; + ELSE + lcDevOper := 'DEV_VOPER_SIMPLU'; + END IF; + + lcSql := 'SELECT B.ID_OPER,B.TIMPN,ROUND(SUM(NVL(D.ORE,-1.000)),3) + FROM ' || v_gcs || '.dev_normare_comenzi A + JOIN ' || v_gcs || '.' || lcDevOper || + ' B ON A.ID_ORDL=B.ID_ORDL + LEFT JOIN ' || v_gcs || '.DEV_VOPER_DETALII_M D ON B.ID_OPER=D.ID_OPER + WHERE ' || lcFiltru || ' + GROUP BY B.ID_OPER,B.TIMPN + HAVING B.TIMPN-ROUND(SUM(NVL(D.ORE,-1.000)),3)!=0'; + dbms_sql.parse(lnManopera, lcSql, dbms_sql.native); + dbms_sql.define_column(lnManopera, 1, lnId_oper); + dbms_sql.define_column(lnManopera, 2, lnTimpN); + dbms_sql.define_column(lnManopera, 3, lnSumaOre); + + lnIdMecanic := 1; + lnSucces := dbms_sql.execute(lnManopera); + loop + if dbms_sql.fetch_rows(lnManopera) > 0 then + dbms_sql.column_value(lnManopera, 1, lnId_oper); + dbms_sql.column_value(lnManopera, 2, lnTimpN); + dbms_sql.column_value(lnManopera, 3, lnSumaOre); + + execute immediate 'SELECT COUNT(ID_MECANIC) FROM ' || v_gcs || + '.DEV_VOPER_DETALII_M WHERE ID_OPER=:1' + into lnNrMecanici + using lnId_oper; + + if lnNrMecanici = 0 then + execute immediate 'INSERT INTO ' || v_gcs || + '.DEV_OPER_MECANICI(ID_OPER,ID_MECANIC,ORE) ' || + ' VALUES(:1,:2,:3)' + using lnId_oper, lnIdMecanic, lnTimpN; + else + lnOre := lnTimpN / lnNrMecanici; + execute immediate 'UPDATE ' || v_gcs || + '.DEV_OPER_MECANICI SET ORE=:1 WHERE ID_OPER=:2 AND STERS=0' + using lnOre, lnId_oper; + end if; + + else + exit; + end if; + end loop; + + dbms_sql.close_cursor(lnManopera); + end; + ------------------------------------------------------------------ + procedure dev_adauga_operatie(v_gcs in varchar2, + tnid_sectie in number, + tnid_ordl in number, + tnpret in number, + tnid_util in number, + tntimpn in number, + tnid_norme in number, + tcsir_idmecanic in varchar2) AS + v_id_oper number(10); + v_lungime_sir number(3); + v_ore number(7, 3); + v_timp_ramas number(7, 3); + v_nou number(1); + begin + + if pack_sesiune.getAn() * 12 + pack_sesiune.getLuna() >= + pack_sesiune.GET_ANRON() * 12 + pack_sesiune.GET_LUNARON() then + v_nou := 1; + else + v_nou := 0; + end if; + + /* execute immediate 'INSERT INTO ' || v_gcs || + '.DEV_OPER(ID_ORDL,ID_SECTIE,TIMPN,PRET,ID_NORME,ID_UTIL,NOU,DATAORA) ' || + 'VALUES (:1,:2,:3,:4,:5,:6,:7,SYSDATE) RETURNING ID_OPER INTO :8' + using tnid_ordl, tnid_sectie, tntimpn, tnpret, tnid_norme, tnid_util, v_nou + returning into v_id_oper;*/ + + execute immediate 'INSERT INTO ' || v_gcs || + '.DEV_OPER(ID_ORDL,ID_SECTIE,TIMPN,PRET,ID_NORME,ID_UTILI,NOU,DATAORA) ' || + 'VALUES (:1,:2,:3,:4,:5,:6,:7,:8) RETURNING ID_OPER INTO :9' + using tnid_ordl, tnid_sectie, tntimpn, tnpret, tnid_norme, tnid_util, v_nou, SYSDATE + returning into v_id_oper; + + v_lungime_sir := SIR_IN_SIR(tcsir_idmecanic, ';'); + v_ore := round(tntimpn / v_lungime_sir, 3); + + if v_lungime_sir > 0 then + for i in 1 .. v_lungime_sir loop + execute immediate 'INSERT INTO ' || v_gcs || + '.DEV_OPER_MECANICI(ID_OPER,ID_MECANIC,ORE) ' || + 'VALUES(:1,:2,:3)' + using v_id_oper, ID_DIN_SIR(tcsir_idmecanic, ';', i), v_ore; + end loop; + end if; + + end; + ------------------------------------------------------------------ + procedure dev_actualizeaza_operatie(v_gcs in varchar2, + v_camp in varchar2, + v_valoare_noua in number, + v_id_oper in number, + v_luna in number, + v_an in number) as + v_datai date; + v_data_ron date; + v_data_util date; + v_valoare number; + begin + execute immediate 'SELECT DATAI FROM ' || v_gcs || + '.DEV_OPER WHERE ID_OPER=:1' + into v_datai + using v_id_oper; + + v_data_ron := to_date(pack_sesiune.get_lunaron || '/' || + pack_sesiune.get_anron, + 'MM/YYYY'); + v_data_util := to_date(v_luna || '/' || v_an, 'MM/YYYY'); + + if UPPER(TRIM(v_camp)) = 'PRET' and v_datai < v_data_ron and + v_data_util >= v_data_ron then + v_valoare := v_valoare_noua * 10000; + else + v_valoare := v_valoare_noua; + end if; + + execute immediate 'UPDATE ' || v_gcs || '.DEV_OPER SET ' || v_camp || + '=:1 WHERE ID_OPER=:2' + using v_valoare, v_id_oper; + end; + ------------------------------------------------------------------ + procedure dev_valideaza_operatie(v_gcs in varchar2, + tnid_oper in number, + tnid_util in number) as + begin + execute immediate 'UPDATE ' || v_gcs || '.DEV_OPER SET VALIDAT=1,' || + 'ID_UTIL=:1,DATAORA=SYSDATE ' || 'WHERE ID_OPER=:2' + using tnid_util, tnid_oper; + end; + ------------------------------------------------------------------ + procedure dev_valideaza_operatii(v_gcs in varchar2, + tnid_ordl in number, + tnid_util in number) as + begin + execute immediate 'UPDATE ' || v_gcs || '.DEV_OPER SET VALIDAT=1,' || + 'ID_UTIL=:1,DATAORA=SYSDATE ' || + 'WHERE ID_ORDL=:2 AND STERS=0 AND VALIDAT=0' + using tnid_util, tnid_ordl; + end; + ------------------------------------------------------------------ + procedure dev_completeaza_rul(v_gcs in varchar2, tnid_lucrare in number) AS + V_ID_FACT number(20); + begin + V_ID_FACT := pack_contafin.get_idFact(); + execute immediate 'update ' || v_gcs || + '.rul set id_fact=:1 where id_lucrare=:2' + using V_ID_FACT, tnid_lucrare; + end; + ------------------------------------------------------------------ + procedure valideaza_operatie(V_SCHEMA IN VARCHAR2, + V_VALIDAT IN NUMBER, + V_ID_OPER IN NUMBER, + V_ID_UTIL IN NUMBER) is + begin + EXECUTE IMMEDIATE 'UPDATE ' || V_SCHEMA || '.DEV_OPER SET VALIDAT=:1,' || + 'DATAORA=:2,ID_UTIL=:3 WHERE ID_OPER=:4' + USING V_VALIDAT, SYSDATE, V_ID_UTIL, V_ID_OPER; + end; + ------------------------------------------------------------------ + procedure modifica_sectie(V_SCHEMA IN VARCHAR2, + V_ID_SECTIE IN NUMBER, + V_ID_OPER IN NUMBER, + V_ID_UTIL IN NUMBER) is + begin + EXECUTE IMMEDIATE 'UPDATE ' || V_SCHEMA || + '.DEV_OPER SET ID_SECTIE=:1 WHERE ID_OPER=:2' + USING V_ID_SECTIE, V_ID_OPER; + end; + ------------------------------------------------------------------ + procedure modifica_tip_comanda(V_SCHEMA IN VARCHAR2, + V_ID_TIP IN NUMBER, + V_ID_ORDL IN NUMBER, + V_ID_UTIL IN NUMBER) is + begin + EXECUTE IMMEDIATE 'UPDATE ' || V_SCHEMA || '.DEV_ORDL SET ID_TIP=:1 ' || + 'WHERE ID_ORDL=:2' + USING V_ID_TIP, V_ID_ORDL; + end; + ------------------------------------------------------------------ + procedure sterge_operatie(V_SCHEMA IN VARCHAR2, + V_ID_OPER IN NUMBER, + V_ID_UTIL IN NUMBER) is + begin + EXECUTE IMMEDIATE 'UPDATE ' || V_SCHEMA || '.DEV_OPER SET STERS=:1,' || + 'DATAORAS=:2,ID_UTILS=:3 WHERE ID_OPER=:4' + USING 1, SYSDATE, V_ID_UTIL, V_ID_OPER; + end; + ------------------------------------------------------------------ + ------------------------------------------------------------------ +end pack_devize; +/ + + +spool off diff --git a/Scripturi_instalare/procfunc.sql b/Scripturi_instalare/procfunc.sql new file mode 100644 index 0000000..3cbc3d2 --- /dev/null +++ b/Scripturi_instalare/procfunc.sql @@ -0,0 +1,187 @@ +-------------------------------------------------------- +-- Proceduri si functii pentru ROAAUTO v 1.4.151 -- +-- Created by marius.atanasiu on 2/2/2006, 9:52:31 AM -- +-------------------------------------------------------- + +spool procfunc.log + +prompt +prompt Creating function SIR_IN_SIR +prompt ============================ +prompt +create or replace function sir_in_sir(sir1 in varchar2, sir2 in varchar2) + return integer is + vret integer := 0; + v_count integer := 0; +begin + case + when instr(sir1, sir2, 1, 1) = 0 then + vret := 0; + when instr(sir1, sir2, 1, 1) <> 0 and + instr(sir1, sir2, 1, 1) = instr(sir1, sir2, -1, 1) then + vret := 1; + else + for i in 1 .. length(sir1) loop + if substr(sir1, i, length(sir2)) = sir2 then + v_count := v_count + 1; + end if; + end loop; + vret := v_count; + end case; + return vret; +end; +/ + +prompt +prompt Creating function ELEMENT_DIN_SIR +prompt ================================= +prompt +create or replace function ELEMENT_DIN_SIR(SIR1 IN VARCHAR2, + SIR2 IN VARCHAR2, + OCC IN INTEGER) return VARCHAR2 is + + VRET VARCHAR2(1000) := ''; +begin + if sir_in_sir(sir1, sir2) > 0 then + vret := NVL(REPLACE(substr(SIR1,(CASE WHEN OCC > 1 THEN instr(sir1, sir2, 1, OCC - 1) ELSE 0 END) + 1, instr(sir1, sir2, 1, OCC) - (CASE WHEN OCC > 1 THEN instr(sir1, sir2, 1, OCC - 1) ELSE 0 END)), SIR2, ''), ''); + end if; + return vret; +end; +/ + +prompt +prompt Creating function GETDEV_COMANDA +prompt ================================ +prompt +create or replace function getdev_comanda +return number IS +lnReturn NUMBER(20) := 0; + begin + + select seq_dev_comanda.NEXTVAL into lnReturn from dual; + return lnReturn; +end getdev_comanda; +/ + +prompt +prompt Creating function ID_DIN_SIR +prompt ============================ +prompt +create or replace function ID_DIN_SIR(SIR1 IN VARCHAR2, + SIR2 IN VARCHAR2, + OCC IN INTEGER) return NUMBER is + + VRET NUMBER(20) := 0; +begin + if sir_in_sir(sir1, sir2) > 0 then + vret := TO_NUMBER(NVL(REPLACE(substr(SIR1, + (CASE WHEN OCC>1 THEN instr(sir1, sir2, 1, OCC-1) ELSE 0 END) + 1, + instr(sir1, sir2, 1, OCC) - + (CASE WHEN OCC>1 THEN instr(sir1, sir2, 1, OCC-1) ELSE 0 END)),SIR2,''), + 0)); + end if; + return vret; +end; +/ + +prompt +prompt Creating procedure DEVINVALCOMPROC +prompt ================================== +prompt +CREATE OR REPLACE PROCEDURE "DEVINVALCOMPROC"(V_SCHEMA IN VARCHAR2, + V_ID_ORDL IN NUMBER, + V_ID_UTILS IN NUMBER) AS +BEGIN + EXECUTE IMMEDIATE 'UPDATE ' || V_SCHEMA || '.DEV_ORDL ' || + 'SET VALIDAT=0,TVAM=0,TVAN=0,TVA=0,' || + 'MANOPERA=0,MATERIALE=0,VALOARE=0,' || + 'ID_UTIL_VALID=0,DATAORAVALID=NULL,ID_UTILS=:1,' || + 'DATAORAS=SYSDATE WHERE ID_ORDL=:2' + USING V_ID_UTILS, V_ID_ORDL; +END; +/ + +prompt +prompt Creating procedure DEVPARTINSPROC +prompt ================================= +prompt +CREATE OR REPLACE PROCEDURE DEVPARTINSPROC(V_SCHEMA IN VARCHAR2, + V_NUME IN VARCHAR2, + V_COD_FISCAL IN VARCHAR2, + V_TELEFON IN VARCHAR2, + V_ADRESA IN VARCHAR2, + V_BANCA IN VARCHAR2, + V_CONT_BANCA IN VARCHAR2, + V_REG_COMERT IN VARCHAR2, + V_ID_LOC IN NUMBER) IS + V_ID_PART NUMBER(20) := 0; + V_ID_TIP_PART NUMBER(20) := 0; + V_CONT VARCHAR2(4) := '4111'; +BEGIN + EXECUTE IMMEDIATE 'INSERT /*+ APPEND */ INTO ' || V_SCHEMA || '.NOM_PARTENERI' || + '(NUME,COD_FISCAL,TELEFON,ADRESA,BANCA,CONT_BANCA,REG_COMERT,ID_LOC) ' || + 'VALUES(:1,:2,:3,:4,:5,:6,:7,:8) RETURNING ID_PART INTO :9' + USING V_NUME, V_COD_FISCAL, V_TELEFON, V_ADRESA, V_BANCA, V_CONT_BANCA, V_REG_COMERT, V_ID_LOC + RETURNING INTO V_ID_PART; + + EXECUTE IMMEDIATE 'SELECT ID_TIP_PART FROM ' || V_SCHEMA || + '.VCORESP_TIP_CONT ' || 'WHERE CONT=:1' + INTO V_ID_TIP_PART + USING V_CONT; + + EXECUTE IMMEDIATE 'INSERT /*+ APPEND */ INTO ' || V_SCHEMA || + '.CORESP_TIP_PART(ID_TIP_PART,ID_PART) ' || + 'VALUES(:1,:2)' + USING V_ID_TIP_PART, V_ID_PART; +END; +/ + +prompt +prompt Creating procedure DEVVALCOMPROC +prompt ================================ +prompt +CREATE OR REPLACE PROCEDURE "DEVVALCOMPROC"(V_SCHEMA IN VARCHAR2, + V_ID_ORDL IN NUMBER, + V_ID_LUCRARE IN NUMBER, + V_ID_UTIL IN NUMBER) as + V_CTVA NUMBER(5, 2) := 1.19; + V_TVAM NUMBER(17, 4) := 0; + V_TVAN NUMBER(17, 4) := 0; + V_TVA NUMBER(17, 4) := 0; + V_MANOPERA NUMBER(17, 4) := 0; + V_MATERIALE NUMBER(17, 4) := 0; + V_VALOARE NUMBER(17, 4) := 0; +BEGIN + EXECUTE IMMEDIATE 'SELECT SUM(PRET*TIMPN) AS MANOPERA FROM ' || V_SCHEMA || + '.DEV_OPER WHERE ID_ORDL=:1' + INTO V_MANOPERA + USING V_ID_ORDL; + + IF V_MANOPERA IS NULL THEN + V_MANOPERA:=0; + END IF; + + EXECUTE IMMEDIATE 'SELECT SUM(PRETV*CANTE) AS MATERIALE FROM ' || + V_SCHEMA || '.RUL WHERE ID_LUCRARE=:1' + INTO V_MATERIALE + USING V_ID_LUCRARE; + + IF V_MATERIALE IS NULL THEN + V_MATERIALE:=0; + END IF; + + V_TVAM := V_MATERIALE * (V_CTVA - 1); + V_TVAN := V_MANOPERA * (V_CTVA - 1); + V_TVA := V_TVAM + V_TVAN; + V_VALOARE := V_TVA + V_MANOPERA + V_MATERIALE; + + EXECUTE IMMEDIATE 'UPDATE ' || V_SCHEMA || '.DEV_ORDL SET VALIDAT=1,' || + 'TVAM=:1,TVAN=:2,TVA=:3,MANOPERA=:4,MATERIALE=:5,' || + 'VALOARE=:6,ID_UTIL_VALID=:7,DATAORAVALID=SYSDATE ' || + 'WHERE ID_ORDL=:8' + USING V_TVAM, V_TVAN, V_TVA, V_MANOPERA, V_MATERIALE, V_VALOARE, V_ID_UTIL, V_ID_ORDL; +END; +/ + + +spool off diff --git a/Scripturi_instalare/secvente.sql b/Scripturi_instalare/secvente.sql new file mode 100644 index 0000000..34d0981 --- /dev/null +++ b/Scripturi_instalare/secvente.sql @@ -0,0 +1,207 @@ +-------------------------------------------------------- +-- Secvente pentru ROAAUTO v 1.4.151 -- +-- Created by marius.atanasiu on 2/2/2006, 9:43:11 AM -- +-------------------------------------------------------- + +spool secvente.log + +prompt +prompt Creating sequence SEQ_DEV_COMANDA +prompt ================================= +prompt +create sequence SEQ_DEV_COMANDA +minvalue 1 +maxvalue 999999999999999999999999999 +start with 1 +increment by 1 +nocache; + +prompt +prompt Creating sequence SEQ_DEV_MASINICLIENTI +prompt ======================================= +prompt +create sequence SEQ_DEV_MASINICLIENTI +minvalue 1 +maxvalue 999999999999999999999999999 +start with 1 +increment by 1 +nocache; + +prompt +prompt Creating sequence SEQ_DEV_MECANICI +prompt ================================== +prompt +create sequence SEQ_DEV_MECANICI +minvalue 2 +maxvalue 999999999999999999999999999 +start with 2 +increment by 1 +nocache; + +prompt +prompt Creating sequence SEQ_DEV_NOM_ANSAMBLE +prompt ====================================== +prompt +create sequence SEQ_DEV_NOM_ANSAMBLE +minvalue 1 +maxvalue 999999999999999999999999999 +start with 1 +increment by 1 +nocache; + +prompt +prompt Creating sequence SEQ_DEV_NOM_ASIGURATORI +prompt ========================================= +prompt +create sequence SEQ_DEV_NOM_ASIGURATORI +minvalue 1 +maxvalue 999999999999999999999999999 +start with 1 +increment by 1 +nocache; + +prompt +prompt Creating sequence SEQ_DEV_NOM_DELEGATI +prompt ====================================== +prompt +create sequence SEQ_DEV_NOM_DELEGATI +minvalue 1 +maxvalue 999999999999999999999999999 +start with 1 +increment by 1 +nocache; + +prompt +prompt Creating sequence SEQ_DEV_NOM_FURNIZORIMASINI +prompt ============================================= +prompt +create sequence SEQ_DEV_NOM_FURNIZORIMASINI +minvalue 1 +maxvalue 999999999999999999999999999 +start with 1 +increment by 1 +nocache; + +prompt +prompt Creating sequence SEQ_DEV_NOM_INSPECTORI +prompt ======================================== +prompt +create sequence SEQ_DEV_NOM_INSPECTORI +minvalue 1 +maxvalue 999999999999999999999999999 +start with 1 +increment by 1 +nocache; + +prompt +prompt Creating sequence SEQ_DEV_NOM_MARCI +prompt =================================== +prompt +create sequence SEQ_DEV_NOM_MARCI +minvalue 1 +maxvalue 999999999999999999999999999 +start with 1 +increment by 1 +nocache; + +prompt +prompt Creating sequence SEQ_DEV_NOM_MASINI +prompt ==================================== +prompt +create sequence SEQ_DEV_NOM_MASINI +minvalue 1 +maxvalue 999999999999999999999999999 +start with 1 +increment by 1 +nocache; + +prompt +prompt Creating sequence SEQ_DEV_NOM_NORME +prompt =================================== +prompt +create sequence SEQ_DEV_NOM_NORME +minvalue 1 +maxvalue 999999999999999999999999999 +start with 1 +increment by 1 +nocache; + +prompt +prompt Creating sequence SEQ_DEV_NOM_PRETURI +prompt ===================================== +prompt +create sequence SEQ_DEV_NOM_PRETURI +minvalue 1 +maxvalue 999999999999999999999999999 +start with 1 +increment by 1 +nocache; + +prompt +prompt Creating sequence SEQ_DEV_NOM_RESP +prompt ================================== +prompt +create sequence SEQ_DEV_NOM_RESP +minvalue 1 +maxvalue 999999999999999999999999999 +start with 1 +increment by 1 +nocache; + +prompt +prompt Creating sequence SEQ_DEV_OPER +prompt ============================== +prompt +create sequence SEQ_DEV_OPER +minvalue 1 +maxvalue 999999999999999999999999999 +start with 1 +increment by 1 +nocache; + +prompt +prompt Creating sequence SEQ_DEV_OPER_MECANICI +prompt ======================================= +prompt +create sequence SEQ_DEV_OPER_MECANICI +minvalue 1 +maxvalue 999999999999999999999999999 +start with 1 +increment by 1 +nocache; + +prompt +prompt Creating sequence SEQ_DEV_ORDL +prompt ============================== +prompt +create sequence SEQ_DEV_ORDL +minvalue 1 +maxvalue 999999999999999999999999999 +start with 1 +increment by 1 +nocache; + +prompt +prompt Creating sequence SEQ_DEV_TIP_DEVIZ +prompt =================================== +prompt +create sequence SEQ_DEV_TIP_DEVIZ +minvalue 1 +maxvalue 999999999999999999999999999 +start with 1 +increment by 1 +nocache; + +prompt +prompt Creating sequence SEQ_DEV_TIPURI_MOTOARE +prompt ======================================== +prompt +create sequence SEQ_DEV_TIPURI_MOTOARE +minvalue 1 +maxvalue 999999999999999999999999999 +start with 1 +increment by 1 +nocache; + + +spool off diff --git a/Scripturi_instalare/tabele.sql b/Scripturi_instalare/tabele.sql new file mode 100644 index 0000000..9a1e07d --- /dev/null +++ b/Scripturi_instalare/tabele.sql @@ -0,0 +1,797 @@ +-------------------------------------------------------- +-- Tabele ROAAUTO versiunea 1.4.151 -- +-- Created by marius.atanasiu on 2/2/2006, 9:42:17 AM -- +-------------------------------------------------------- + +spool tabele.log + +prompt +prompt Creating table DEV_NOM_FURNIZORIMASINI +prompt ====================================== +prompt +create table DEV_NOM_FURNIZORIMASINI +( + ID_FURNIZOR NUMBER(5) not null, + DENUMIRE VARCHAR2(50), + STERS NUMBER(1) default 0 not null, + INACTIV NUMBER(1) default 0 not null +) +tablespace ROA + pctfree 10 + initrans 1 + maxtrans 255 + storage + ( + initial 64K + minextents 1 + maxextents unlimited + ); +alter table DEV_NOM_FURNIZORIMASINI + add constraint PK_FURNIZOR primary key (ID_FURNIZOR) + using index + tablespace ROA + pctfree 10 + initrans 2 + maxtrans 255 + storage + ( + initial 64K + minextents 1 + maxextents unlimited + ); + +prompt +prompt Creating table DEV_NOM_MARCI +prompt ============================ +prompt +create table DEV_NOM_MARCI +( + ID_MARCA NUMBER(5) not null, + MARCA VARCHAR2(24), + STERS NUMBER(1) default 0 not null, + INACTIV NUMBER(1) default 0 not null +) +tablespace ROA + pctfree 10 + initrans 1 + maxtrans 255 + storage + ( + initial 64K + minextents 1 + maxextents unlimited + ); +alter table DEV_NOM_MARCI + add constraint PK_MARCA primary key (ID_MARCA) + using index + tablespace ROA + pctfree 10 + initrans 2 + maxtrans 255 + storage + ( + initial 64K + minextents 1 + maxextents unlimited + ); + +prompt +prompt Creating table DEV_NOM_MASINI +prompt ============================= +prompt +create table DEV_NOM_MASINI +( + ID_MASINA NUMBER(5) not null, + ID_MARCA NUMBER(5) not null, + MASINA VARCHAR2(20), + SCTIP VARCHAR2(100), + CLASA VARCHAR2(10), + STERS NUMBER(1) default 0 not null, + INACTIV NUMBER(1) default 0 not null +) +tablespace ROA + pctfree 10 + initrans 1 + maxtrans 255 + storage + ( + initial 64K + minextents 1 + maxextents unlimited + ); +alter table DEV_NOM_MASINI + add constraint PK_MASINA primary key (ID_MASINA) + using index + tablespace ROA + pctfree 10 + initrans 2 + maxtrans 255 + storage + ( + initial 64K + minextents 1 + maxextents unlimited + ); +alter table DEV_NOM_MASINI + add constraint FK_MARCA foreign key (ID_MARCA) + references DEV_NOM_MARCI (ID_MARCA); + +prompt +prompt Creating table DEV_TIPURI_MOTOARE +prompt ================================= +prompt +create table DEV_TIPURI_MOTOARE +( + ID_TIPMOTOR NUMBER(5) not null, + DENUMIRE VARCHAR2(50), + STERS NUMBER(1) default 0 not null, + INACTIV NUMBER(1) default 0 not null +) +tablespace ROA + pctfree 10 + initrans 1 + maxtrans 255 + storage + ( + initial 64K + minextents 1 + maxextents unlimited + ); +alter table DEV_TIPURI_MOTOARE + add constraint PK_TIPMOTOR primary key (ID_TIPMOTOR) + using index + tablespace ROA + pctfree 10 + initrans 2 + maxtrans 255 + storage + ( + initial 64K + minextents 1 + maxextents unlimited + ); + +prompt +prompt Creating table DEV_MASINICLIENTI +prompt ================================ +prompt +create table DEV_MASINICLIENTI +( + ID_MASINICLIENT NUMBER(8) default 0 not null, + ID_TIPMOTOR NUMBER(5), + ID_FURNIZOR NUMBER(5), + ID_MASINA NUMBER(5), + ID_PARTENER NUMBER(5) default 0 not null, + NRINMAT VARCHAR2(10), + SERIES VARCHAR2(17), + SERIEM VARCHAR2(17), + CULOARE VARCHAR2(30), + KMINT NUMBER(10), + DATAACHI DATE, + NRACHI NUMBER(16), + SERIEF VARCHAR2(20), + SERIECV VARCHAR2(20), + ANFABRICATIE NUMBER(4), + STERS NUMBER(1) default 0 not null, + INACTIV NUMBER(1) default 0 not null +) +tablespace ROA + pctfree 10 + initrans 1 + maxtrans 255 + storage + ( + initial 64K + minextents 1 + maxextents unlimited + ); +alter table DEV_MASINICLIENTI + add constraint PK_MASINICLIENT primary key (ID_MASINICLIENT) + using index + tablespace ROA + pctfree 10 + initrans 2 + maxtrans 255 + storage + ( + initial 64K + minextents 1 + maxextents unlimited + ); +alter table DEV_MASINICLIENTI + add constraint FK_FURNIZOR foreign key (ID_FURNIZOR) + references DEV_NOM_FURNIZORIMASINI (ID_FURNIZOR) + disable; +alter table DEV_MASINICLIENTI + add constraint FK_ID_PARTENER foreign key (ID_PARTENER) + references NOM_PARTENERI (ID_PART) + disable; +alter table DEV_MASINICLIENTI + add constraint FK_MASINA foreign key (ID_MASINA) + references DEV_NOM_MASINI (ID_MASINA) + disable; +alter table DEV_MASINICLIENTI + add constraint FK_TIPMOTOR foreign key (ID_TIPMOTOR) + references DEV_TIPURI_MOTOARE (ID_TIPMOTOR) + disable; +create index IDX_MASINICLIENT_00001 on DEV_MASINICLIENTI (ID_PARTENER) + tablespace ROA + pctfree 10 + initrans 2 + maxtrans 255 + storage + ( + initial 64K + minextents 1 + maxextents unlimited + ); +create index IDX_MASINICLIENT_00002 on DEV_MASINICLIENTI (ID_MASINA) + tablespace ROA + pctfree 10 + initrans 2 + maxtrans 255 + storage + ( + initial 64K + minextents 1 + maxextents unlimited + ); +create index IDX_MASINICLIENT_00003 on DEV_MASINICLIENTI (ID_FURNIZOR) + tablespace ROA + pctfree 10 + initrans 2 + maxtrans 255 + storage + ( + initial 64K + minextents 1 + maxextents unlimited + ); +create index IDX_MASINICLIENT_00004 on DEV_MASINICLIENTI (ID_TIPMOTOR) + tablespace ROA + pctfree 10 + initrans 2 + maxtrans 255 + storage + ( + initial 64K + minextents 1 + maxextents unlimited + ); + +prompt +prompt Creating table DEV_MECANICI +prompt =========================== +prompt +create table DEV_MECANICI +( + ID_MECANIC NUMBER(5) not null, + ID_SALARIAT NUMBER(5), + ID_SECTIE NUMBER(5), + STERS NUMBER(1) default 0 not null, + INACTIV NUMBER(1) default 0 not null +) +tablespace ROA + pctfree 10 + initrans 1 + maxtrans 255 + storage + ( + initial 64K + minextents 1 + maxextents unlimited + ); +alter table DEV_MECANICI + add constraint PK_MECANICI primary key (ID_MECANIC) + using index + tablespace ROA + pctfree 10 + initrans 2 + maxtrans 255 + storage + ( + initial 64K + minextents 1 + maxextents unlimited + ); + +prompt +prompt Creating table DEV_NOM_ANSAMBLE +prompt =============================== +prompt +create table DEV_NOM_ANSAMBLE +( + ID_ANSAMBLU NUMBER(5) not null, + DENUMIRE VARCHAR2(100), + STERS NUMBER(1) default 0 not null, + INACTIV NUMBER(1) default 0 not null +) +tablespace ROA + pctfree 10 + initrans 1 + maxtrans 255 + storage + ( + initial 64K + minextents 1 + maxextents unlimited + ); +alter table DEV_NOM_ANSAMBLE + add constraint PK_ANSAMBLE primary key (ID_ANSAMBLU) + using index + tablespace ROA + pctfree 10 + initrans 2 + maxtrans 255 + storage + ( + initial 64K + minextents 1 + maxextents unlimited + ); + +prompt +prompt Creating table DEV_NOM_ASIGURATORI +prompt ================================== +prompt +create table DEV_NOM_ASIGURATORI +( + ID_ASIGURATOR NUMBER(5) not null, + ASIGURATOR VARCHAR2(24), + STERS NUMBER(1) default 0 not null, + INACTIV NUMBER(1) default 0 not null +) +tablespace ROA + pctfree 10 + initrans 1 + maxtrans 255 + storage + ( + initial 64K + minextents 1 + maxextents unlimited + ); +alter table DEV_NOM_ASIGURATORI + add constraint PK_ASIGURATORI primary key (ID_ASIGURATOR) + using index + tablespace ROA + pctfree 10 + initrans 2 + maxtrans 255 + storage + ( + initial 64K + minextents 1 + maxextents unlimited + ); + +prompt +prompt Creating table DEV_NOM_DELEGATI +prompt =============================== +prompt +create table DEV_NOM_DELEGATI +( + ID_NOM_DELEGATI NUMBER(5) not null, + DELEGAT VARCHAR2(64), + ELIBERATDE VARCHAR2(64), + ID_PARTENER NUMBER(5) not null, + STERS NUMBER(1) default 0 not null, + INACTIV NUMBER(1) default 0 not null, + BI VARCHAR2(10) +) +tablespace ROA + pctfree 10 + initrans 1 + maxtrans 255 + storage + ( + initial 64K + minextents 1 + maxextents unlimited + ); +alter table DEV_NOM_DELEGATI + add constraint PK_DELEGAT primary key (ID_NOM_DELEGATI) + using index + tablespace ROA + pctfree 10 + initrans 2 + maxtrans 255 + storage + ( + initial 64K + minextents 1 + maxextents unlimited + ); +alter table DEV_NOM_DELEGATI + add constraint FK_PARTENER foreign key (ID_PARTENER) + references NOM_PARTENERI (ID_PART) + disable; + +prompt +prompt Creating table DEV_NOM_INSPECTORI +prompt ================================= +prompt +create table DEV_NOM_INSPECTORI +( + ID_INSPECTOR NUMBER(5) not null, + INSPECTOR VARCHAR2(24), + ID_ASIGURATOR NUMBER(5), + STERS NUMBER(1) default 0 not null, + INACTIV NUMBER(1) default 0 not null +) +tablespace ROA + pctfree 10 + initrans 1 + maxtrans 255 + storage + ( + initial 64K + minextents 1 + maxextents unlimited + ); +alter table DEV_NOM_INSPECTORI + add constraint PK_NOM_INSPECTORI primary key (ID_INSPECTOR) + using index + tablespace ROA + pctfree 10 + initrans 2 + maxtrans 255 + storage + ( + initial 64K + minextents 1 + maxextents unlimited + ); +alter table DEV_NOM_INSPECTORI + add constraint FK_NOM_ASIGURATORI foreign key (ID_ASIGURATOR) + references DEV_NOM_ASIGURATORI (ID_ASIGURATOR); + +prompt +prompt Creating table DEV_NOM_NORME +prompt ============================ +prompt +create table DEV_NOM_NORME +( + ID_NORME NUMBER(5) not null, + ID_ANSAMBLU NUMBER(5), + ID_MASINA NUMBER(5), + DENOP VARCHAR2(100), + CODOP VARCHAR2(10), + TIMPN NUMBER(7,3), + STERS NUMBER(1) default 0 not null, + INACTIV NUMBER(1) default 0 not null +) +tablespace ROA + pctfree 10 + initrans 1 + maxtrans 255 + storage + ( + initial 64K + minextents 1 + maxextents unlimited + ); +alter table DEV_NOM_NORME + add constraint PK_NORME primary key (ID_NORME) + using index + tablespace ROA + pctfree 10 + initrans 2 + maxtrans 255 + storage + ( + initial 64K + minextents 1 + maxextents unlimited + ); +alter table DEV_NOM_NORME + add constraint FK_ANSAMBLE foreign key (ID_ANSAMBLU) + references DEV_NOM_ANSAMBLE (ID_ANSAMBLU); + +prompt +prompt Creating table DEV_NOM_PRETURI +prompt ============================== +prompt +create table DEV_NOM_PRETURI +( + ID_PRET NUMBER(5) not null, + ID_MARCA NUMBER(5), + ID_ASIGURATORI NUMBER(5), + PRET NUMBER(18,4), + PRET_VAL NUMBER(10,4), + ID_VALUTA NUMBER(5), + CURS NUMBER(12,4), + STERS NUMBER(1) default 0 not null, + INACTIV NUMBER(1) default 0 not null +) +tablespace ROA + pctfree 10 + initrans 1 + maxtrans 255 + storage + ( + initial 64K + minextents 1 + maxextents unlimited + ); +alter table DEV_NOM_PRETURI + add constraint PK_PRETURI primary key (ID_PRET) + using index + tablespace ROA + pctfree 10 + initrans 2 + maxtrans 255 + storage + ( + initial 64K + minextents 1 + maxextents unlimited + ); +alter table DEV_NOM_PRETURI + add constraint FK_ASIGURATOR foreign key (ID_ASIGURATORI) + references DEV_NOM_ASIGURATORI (ID_ASIGURATOR); +alter table DEV_NOM_PRETURI + add constraint FK_MARCA1 foreign key (ID_MARCA) + references DEV_NOM_MARCI (ID_MARCA); + +prompt +prompt Creating table DEV_NOM_RESP +prompt =========================== +prompt +create table DEV_NOM_RESP +( + ID_RESP NUMBER(5) not null, + NUME VARCHAR2(24) not null, + BI VARCHAR2(10), + CNPRESP VARCHAR2(13), + ALES NUMBER(1) default 0 not null, + STERS NUMBER(1) default 0 not null +) +tablespace ROA + pctfree 10 + initrans 1 + maxtrans 255 + storage + ( + initial 64K + minextents 1 + maxextents unlimited + ); +alter table DEV_NOM_RESP + add constraint PK_RESP primary key (ID_RESP) + using index + tablespace ROA + pctfree 10 + initrans 2 + maxtrans 255 + storage + ( + initial 64K + minextents 1 + maxextents unlimited + ); + +prompt +prompt Creating table DEV_ORDL +prompt ======================= +prompt +create table DEV_ORDL +( + ID_ORDL NUMBER(10) not null, + LUNA NUMBER(2) default 0 not null, + AN NUMBER(4) default 0 not null, + ID_INSPECTOR NUMBER(5) default 0 not null, + ID_LUCRARE NUMBER(10) not null, + TERMEN DATE, + DATAI DATE, + ORAI NUMBER(5), + DATAE DATE, + ORAE NUMBER(5), + VALIDAT NUMBER(1) default 0 not null, + TIP_INCAS VARCHAR2(24), + ID_UTIL_AD NUMBER(5) default 0 not null, + ID_UTIL_VALID NUMBER(5) default 0 not null, + DATAORAAD DATE, + DATAORAVALID DATE, + ID_UTILS NUMBER(5) default 0 not null, + DATAORAS DATE, + ID_FACT NUMBER(10) default 0 not null, + ID_MASINICLIENT NUMBER(5) default 0 not null, + ID_ASIGURATOR NUMBER(5) default 0 not null, + ID_CONTRACT NUMBER(5) default 0 not null, + AVANS NUMBER(17,4), + STERS NUMBER(1) default 0 not null, + VALCTVA NUMBER(17,4) default 0 not null, + ID_TIP NUMBER(5) default 1 not null, + INCHIS_FORTAT NUMBER(1) default 0 not null, + KMINT NUMBER(10) +) +tablespace ROA + pctfree 10 + initrans 1 + maxtrans 255 + storage + ( + initial 64K + minextents 1 + maxextents unlimited + ); +alter table DEV_ORDL + add constraint PK_ORDL primary key (ID_ORDL) + using index + tablespace ROA + pctfree 10 + initrans 2 + maxtrans 255 + storage + ( + initial 64K + minextents 1 + maxextents unlimited + ); +alter table DEV_ORDL + add constraint FK_LUCR foreign key (ID_LUCRARE) + references NOM_LUCRARI (ID_LUCRARE) + disable; +create index IDX_ORDL_00001 on DEV_ORDL (ID_LUCRARE) + tablespace ROA + pctfree 10 + initrans 2 + maxtrans 255 + storage + ( + initial 64K + minextents 1 + maxextents unlimited + ); +create index IDX_ORDL_00002 on DEV_ORDL (ID_INSPECTOR) + tablespace ROA + pctfree 10 + initrans 2 + maxtrans 255 + storage + ( + initial 64K + minextents 1 + maxextents unlimited + ); +create index IDX_ORDL_00003 on DEV_ORDL (DATAORAVALID) + tablespace ROA + pctfree 10 + initrans 2 + maxtrans 255 + storage + ( + initial 64K + minextents 1 + maxextents unlimited + ); + +prompt +prompt Creating table DEV_OPER +prompt ======================= +prompt +create table DEV_OPER +( + ID_OPER NUMBER(10) not null, + ID_ORDL NUMBER(10) not null, + ID_NORME NUMBER(10) not null, + ID_FACT NUMBER(10), + TIMPN NUMBER(8,3) default 0 not null, + PRET NUMBER(17,4) default 0 not null, + DATAI DATE default sysdate not null, + ID_SECTIE NUMBER(5), + ID_UTIL NUMBER(5), + DATAORA DATE, + ID_UTILS NUMBER(5), + DATAORAS DATE, + STERS NUMBER(1) default 0 not null, + VALIDAT NUMBER(1) default 0 not null, + NOU NUMBER(1) default 0 not null, + ID_UTILI NUMBER(5), + DATAI_ORIG DATE, + DATAORA_ORIG DATE +) +tablespace ROA + pctfree 10 + initrans 1 + maxtrans 255 + storage + ( + initial 64K + minextents 1 + maxextents unlimited + ); +alter table DEV_OPER + add constraint PK_OPER primary key (ID_OPER) + using index + tablespace ROA + pctfree 10 + initrans 2 + maxtrans 255 + storage + ( + initial 64K + minextents 1 + maxextents unlimited + ); +alter table DEV_OPER + add constraint FK_NORME foreign key (ID_NORME) + references DEV_NOM_NORME (ID_NORME); +alter table DEV_OPER + add constraint FK_ORDL foreign key (ID_ORDL) + references DEV_ORDL (ID_ORDL); + +prompt +prompt Creating table DEV_OPER_MECANICI +prompt ================================ +prompt +create table DEV_OPER_MECANICI +( + ID_OPERMECANIC NUMBER(10) not null, + ID_MECANIC NUMBER(5), + ID_OPER NUMBER(10), + ORE NUMBER(8,3), + STERS NUMBER(1) default 0 not null, + INACTIV NUMBER(1) default 0 not null +) +tablespace ROA + pctfree 10 + initrans 1 + maxtrans 255 + storage + ( + initial 64K + minextents 1 + maxextents unlimited + ); +alter table DEV_OPER_MECANICI + add constraint PK_DEV_OPER_MECANICI primary key (ID_OPERMECANIC) + using index + tablespace ROA + pctfree 10 + initrans 2 + maxtrans 255 + storage + ( + initial 64K + minextents 1 + maxextents unlimited + ); + +prompt +prompt Creating table DEV_TIP_DEVIZ +prompt ============================ +prompt +create table DEV_TIP_DEVIZ +( + ID_TIP NUMBER(5) not null, + DENUMIRE VARCHAR2(50) not null, + STERS NUMBER(1) default 0 not null +) +tablespace ROA + pctfree 10 + initrans 1 + maxtrans 255 + storage + ( + initial 64K + minextents 1 + maxextents unlimited + ); +alter table DEV_TIP_DEVIZ + add constraint PK_TIP_DEVIZ primary key (ID_TIP) + using index + tablespace ROA + pctfree 10 + initrans 2 + maxtrans 255 + storage + ( + initial 64K + minextents 1 + maxextents unlimited + ); + + +spool off diff --git a/Scripturi_instalare/tabele_nefolosite.sql b/Scripturi_instalare/tabele_nefolosite.sql new file mode 100644 index 0000000..340ae68 --- /dev/null +++ b/Scripturi_instalare/tabele_nefolosite.sql @@ -0,0 +1,84 @@ +-------------------------------------------------------- +-- Tabele nefolosite in ROAAUTO versiunea 1.4.151 -- +-- Created by marius.atanasiu on 2/2/2006, 9:42:17 AM -- +-------------------------------------------------------- + +spool tabele.log + +prompt +prompt Creating table DEV_CONTRACTE +prompt ============================ +prompt +create table DEV_CONTRACTE +( + ID_CONTRACT NUMBER(5) not null, + NUMAR VARCHAR2(10), + DATA DATE, + ID_PARTENER NUMBER(5), + STERS NUMBER(1) default 0 not null, + INACTIV NUMBER(1) default 0 not null +) +tablespace ROA + pctfree 10 + initrans 1 + maxtrans 255 + storage + ( + initial 64K + minextents 1 + maxextents unlimited + ); + +prompt +prompt Creating table DEV_FACTURI +prompt ========================== +prompt +create table DEV_FACTURI +( + ID_LUCRARE NUMBER(10) not null, + NRFACT NUMBER(10) default 0 not null, + DATAFACT DATE, + ID_UTILAD NUMBER(10) default 0 not null, + ID_UTILSTERG NUMBER(10) default 0 not null, + DATAAD DATE, + DATASTERG DATE, + VALCTVA NUMBER(17,4) default 0 not null, + TVA NUMBER(17,4) default 0 not null, + STERS NUMBER(1) default 0 not null +) +tablespace ROA + pctfree 10 + initrans 1 + maxtrans 255 + storage + ( + initial 64K + minextents 1 + maxextents unlimited + ); + +prompt +prompt Creating table DEV_REVIZII +prompt ========================== +prompt +create table DEV_REVIZII +( + ID_REVIZIE NUMBER(5) not null, + ID_MASINICLIENTI NUMBER(5), + CODSERV VARCHAR2(10), + DATASERV DATE, + KM NUMBER(10), + STERS NUMBER(1) default 0 not null +) +tablespace ROA + pctfree 10 + initrans 1 + maxtrans 255 + storage + ( + initial 64K + minextents 1 + maxextents unlimited + ); + +spool off diff --git a/Scripturi_instalare/triggere.sql b/Scripturi_instalare/triggere.sql new file mode 100644 index 0000000..a61311e --- /dev/null +++ b/Scripturi_instalare/triggere.sql @@ -0,0 +1,1697 @@ +-------------------------------------------------------- +-- Triggere pentru ROAAUTO v 1.4.151 -- +-- Created by marius.atanasiu on 2/2/2006, 9:53:06 AM -- +-------------------------------------------------------- + +spool triggere.log + +prompt +prompt Creating trigger TRG_DEV_ASIGURATORI_BEFOINS +prompt ============================================ +prompt +create or replace trigger TRG_DEV_ASIGURATORI_BEFOINS + before insert on dev_nom_asiguratori + for each row + -- local variables here +begin + select SEQ_dev_nom_asiguratori.NEXTVAL into :new.id_asigurator from dual; +end TRG_DEV_ASIGURATORI_BEFOINS; +/ + +prompt +prompt Creating trigger TRG_DEV_FURNIZORI +prompt ================================== +prompt +create or replace trigger TRG_DEV_FURNIZORI + before insert on dev_nom_furnizorimasini + for each row +declare + -- local variables here +begin + select SEQ_dev_nom_FURNIZORIMASINI.NEXTVAL into :new.id_FURNIZOR from dual; +end TRG_DEV_FURNIZORI; +/ + +prompt +prompt Creating trigger TRG_DEV_MASINICLIENT_BEFOUPD +prompt ============================================= +prompt +CREATE OR REPLACE TRIGGER TRG_DEV_MASINICLIENT_BEFOUPD +BEFORE UPDATE ON DEV_MASINICLIENTI +REFERENCING OLD AS OLD NEW AS NEW +FOR EACH ROW +begin + +if :old.ID_MASINICLIENT <> :new.ID_MASINICLIENT then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_masiniclienti', :OLD.id_masiniclient,'ID_MASINICLIENT','N', :OLD.ID_MASINICLIENT, :NEW.ID_MASINICLIENT, PACK_SESIUNE.get_id_util() ) ; +end if; + +if :old.ID_TIPMOTOR <> :new.ID_TIPMOTOR then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_masiniclienti', :OLD.id_masiniclient,'ID_TIPMOTOR','N', :OLD.ID_TIPMOTOR, :NEW.ID_TIPMOTOR, PACK_SESIUNE.get_id_util() ) ; +end if; + +if :old.ID_FURNIZOR <> :new.ID_FURNIZOR then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_masiniclienti', :OLD.id_masiniclient,'ID_FURNIZOR','N', :OLD.ID_FURNIZOR, :NEW.ID_FURNIZOR, PACK_SESIUNE.get_id_util() ) ; +end if; + +if :old.ID_MASINA <> :new.ID_MASINA then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_masiniclienti', :OLD.id_masiniclient,'ID_MASINA','N', :OLD.ID_MASINA, :NEW.ID_MASINA, PACK_SESIUNE.get_id_util()) ; +end if; + +if :old.ID_PARTENER <> :new.ID_PARTENER then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_masiniclienti', :OLD.id_masiniclient,'ID_PARTENER','N', :OLD.ID_PARTENER, :NEW.ID_PARTENER, PACK_SESIUNE.get_id_util() ) ; +end if; + +if :old.NRINMAT <> :new.NRINMAT then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_masiniclienti', :OLD.id_masiniclient,'NRINMAT','C', :OLD.NRINMAT, :NEW.NRINMAT, PACK_SESIUNE.get_id_util() ) ; +end if; + +if :old.SERIES <> :new.SERIES then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_masiniclienti', :OLD.id_masiniclient,'SERIES','C', :OLD.SERIES, :NEW.SERIES, PACK_SESIUNE.get_id_util() ) ; +end if; + +if :old.SERIEM <> :new.SERIEM then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_masiniclienti', :OLD.id_masiniclient,'SERIEM','C', :OLD.SERIEM, :NEW.SERIEM, PACK_SESIUNE.get_id_util() ) ; +end if; + +if :old.CULOARE <> :new.CULOARE then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_masiniclienti', :OLD.id_masiniclient,'CULOARE','C', :OLD.CULOARE, :NEW.CULOARE, PACK_SESIUNE.GET_ID_UTIL() ) ; +end if; + +if :old.KMINT <> :new.KMINT then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_masiniclienti', :OLD.id_masiniclient,'KMINT','N', :OLD.KMINT, :NEW.KMINT, PACK_SESIUNE.GET_ID_UTIL() ) ; +end if; + +if :old.DATAACHI <> :new.DATAACHI then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_masiniclienti', :OLD.id_masiniclient,'DATAACHI','D', :OLD.DATAACHI, :NEW.DATAACHI, PACK_SESIUNE.GET_ID_UTIL() ) ; +end if; + +if :old.NRACHI <> :new.NRACHI then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_masiniclienti', :OLD.id_masiniclient,'NRACHI','N', :OLD.NRACHI, :NEW.NRACHI, PACK_SESIUNE.GET_ID_UTIL() ) ; +end if; + +if :old.SERIEF <> :new.SERIEF then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_masiniclienti', :OLD.id_masiniclient,'SERIEF','C', :OLD.SERIEF, :NEW.SERIEF, PACK_SESIUNE.GET_ID_UTIL() ) ; +end if; + +if :old.SERIECV <> :new.SERIECV then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_masiniclienti', :OLD.id_masiniclient,'SERIECV','C', :OLD.SERIECV, :NEW.SERIECV, PACK_SESIUNE.GET_ID_UTIL() ) ; +end if; + +if :old.ANFABRICATIE <> :new.ANFABRICATIE then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_masiniclienti', :OLD.id_masiniclient,'ANFABRICATIE','N', :OLD.ANFABRICATIE, :NEW.ANFABRICATIE, PACK_SESIUNE.GET_ID_UTIL() ) ; +end if; + +if :old.STERS <> :new.STERS then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_masiniclienti', :OLD.id_masiniclient,'STERS','N', :OLD.STERS, :NEW.STERS, PACK_SESIUNE.GET_ID_UTIL() ) ; +end if; + +if :old.INACTIV <> :new.INACTIV then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_masiniclienti', :OLD.id_masiniclient,'INACTIV','N', :OLD.INACTIV, :NEW.INACTIV, PACK_SESIUNE.GET_ID_UTIL() ) ; +end if; + +end; +/ + +prompt +prompt Creating trigger TRG_DEV_MASINICLIENTI_BEFOINS +prompt ============================================== +prompt +create or replace trigger TRG_dev_masiniclienti_BEFOINS +before insert on dev_masiniclienti +referencing old as old new as new +for each row +begin +select SEQ_dev_masiniclienti.NEXTVAL into :new.id_masiniclient from dual; +end; +/ + +prompt +prompt Creating trigger TRG_DEV_MECANICI_BEFOINS +prompt ========================================= +prompt +create or replace trigger TRG_dev_mecanici_BEFOINS +before insert on dev_mecanici +referencing old as old new as new +for each row +begin +select SEQ_dev_mecanici.NEXTVAL into :new.id_mecanic from dual; +end; +/ + +prompt +prompt Creating trigger TRG_DEV_MECANICI_BEFOUPD +prompt ========================================= +prompt +CREATE OR REPLACE TRIGGER TRG_DEV_MECANICI_BEFOUPD +BEFORE UPDATE ON DEV_MECANICI +REFERENCING OLD AS OLD NEW AS NEW +FOR EACH ROW +begin + +if :old.ID_MECANIC <> :new.ID_MECANIC then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_mecanici', :OLD.id_mecanic,'ID_MECANIC','N', :OLD.ID_MECANIC, :NEW.ID_MECANIC, PACK_SESIUNE.GET_ID_UTIL() ) ; +end if; + +if :old.ID_SALARIAT <> :new.ID_SALARIAT then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_mecanici', :OLD.id_mecanic,'ID_SALARIAT','N', :OLD.ID_SALARIAT, :NEW.ID_SALARIAT, PACK_SESIUNE.GET_ID_UTIL() ) ; +end if; + +if :old.ID_SECTIE <> :new.ID_SECTIE then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_mecanici', :OLD.id_mecanic,'ID_SECTIE','N', :OLD.ID_SECTIE, :NEW.ID_SECTIE, PACK_SESIUNE.GET_ID_UTIL() ) ; +end if; + +if :old.STERS <> :new.STERS then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_mecanici', :OLD.id_mecanic,'STERS','N', :OLD.STERS, :NEW.STERS, PACK_SESIUNE.GET_ID_UTIL() ) ; +end if; + +if :old.INACTIV <> :new.INACTIV then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_mecanici', :OLD.id_mecanic,'INACTIV','N', :OLD.INACTIV, :NEW.INACTIV, PACK_SESIUNE.GET_ID_UTIL() ) ; +end if; + +end; +/ + +prompt +prompt Creating trigger TRG_DEV_NOM_ANSAMBLE_BEFOINS +prompt ============================================= +prompt +create or replace trigger TRG_dev_nom_ansamble_BEFOINS +before insert on dev_nom_ansamble +referencing old as old new as new +for each row +begin +select SEQ_dev_nom_ansamble.NEXTVAL into :new.id_ansamblu from dual; +end; +/ + +prompt +prompt Creating trigger TRG_DEV_NOM_ANSAMBLE_BEFOUPD +prompt ============================================= +prompt +CREATE OR REPLACE TRIGGER TRG_DEV_NOM_ANSAMBLE_BEFOUPD +BEFORE UPDATE ON DEV_NOM_ANSAMBLE +REFERENCING OLD AS OLD NEW AS NEW +FOR EACH ROW +begin + +if :old.STERS <> :new.STERS then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_nom_ansamble', :OLD.id_ansamblu,'STERS','N', :OLD.STERS, :NEW.STERS, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +if :old.INACTIV <> :new.INACTIV then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_nom_ansamble', :OLD.id_ansamblu,'INACTIV','N', :OLD.INACTIV, :NEW.INACTIV, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +if :old.ID_ANSAMBLU <> :new.ID_ANSAMBLU then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_nom_ansamble', :OLD.id_ansamblu,'ID_ANSAMBLU','N', :OLD.ID_ANSAMBLU, :NEW.ID_ANSAMBLU, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +if :old.DENUMIRE <> :new.DENUMIRE then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_nom_ansamble', :OLD.id_ansamblu,'DENUMIRE','C', :OLD.DENUMIRE, :NEW.DENUMIRE, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +end; +/ + +prompt +prompt Creating trigger TRG_DEV_NOM_ASIGURAT_BEFOUPD +prompt ============================================= +prompt +CREATE OR REPLACE TRIGGER TRG_DEV_NOM_ASIGURAT_BEFOUPD +BEFORE UPDATE ON DEV_NOM_ASIGURATORI +REFERENCING OLD AS OLD NEW AS NEW +FOR EACH ROW +begin + +if :old.STERS <> :new.STERS then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_nom_asiguratori', :OLD.id_asigurator,'STERS','N', :OLD.STERS, :NEW.STERS, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +if :old.INACTIV <> :new.INACTIV then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_nom_asiguratori', :OLD.id_asigurator,'INACTIV','N', :OLD.INACTIV, :NEW.INACTIV, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +if :old.ID_ASIGURATOR <> :new.ID_ASIGURATOR then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_nom_asiguratori', :OLD.id_asigurator,'ID_ASIGURATOR','N', :OLD.ID_ASIGURATOR, :NEW.ID_ASIGURATOR, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +if :old.ASIGURATOR <> :new.ASIGURATOR then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_nom_asiguratori', :OLD.id_asigurator,'ASIGURATOR','C', :OLD.ASIGURATOR, :NEW.ASIGURATOR, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +end; +/ + +prompt +prompt Creating trigger TRG_DEV_NOM_DELEGATI_BEFOINS +prompt ============================================= +prompt +create or replace trigger TRG_dev_nom_delegati_BEFOINS +before insert on dev_nom_delegati +referencing old as old new as new +for each row +begin +select SEQ_dev_nom_delegati.NEXTVAL into :new.id_nom_delegati from dual; +end; +/ + +prompt +prompt Creating trigger TRG_DEV_NOM_DELEGATI_BEFOUPD +prompt ============================================= +prompt +CREATE OR REPLACE TRIGGER TRG_DEV_NOM_DELEGATI_BEFOUPD +BEFORE UPDATE ON DEV_NOM_DELEGATI +REFERENCING OLD AS OLD NEW AS NEW +FOR EACH ROW +begin + +if :old.STERS <> :new.STERS then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_nom_delegati', :OLD.id_nom_delegati,'STERS','N', :OLD.STERS, :NEW.STERS, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +if :old.INACTIV <> :new.INACTIV then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_nom_delegati', :OLD.id_nom_delegati,'INACTIV','N', :OLD.INACTIV, :NEW.INACTIV, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +if :old.ID_NOM_DELEGATI <> :new.ID_NOM_DELEGATI then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_nom_delegati', :OLD.id_nom_delegati,'ID_NOM_DELEGATI','N', :OLD.ID_NOM_DELEGATI, :NEW.ID_NOM_DELEGATI, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +if :old.DELEGAT <> :new.DELEGAT then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_nom_delegati', :OLD.id_nom_delegati,'DELEGAT','C', :OLD.DELEGAT, :NEW.DELEGAT, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +if :old.ELIBERATDE <> :new.ELIBERATDE then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_nom_delegati', :OLD.id_nom_delegati,'ELIBERATDE','C', :OLD.ELIBERATDE, :NEW.ELIBERATDE, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +if :old.ID_PARTENER <> :new.ID_PARTENER then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_nom_delegati', :OLD.id_nom_delegati,'ID_PARTENER','N', :OLD.ID_PARTENER, :NEW.ID_PARTENER, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +if :old.BI <> :new.BI then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_nom_delegati', :OLD.id_nom_delegati,'BI','C', :OLD.BI, :NEW.BI, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +end; +/ + +prompt +prompt Creating trigger TRG_DEV_NOM_FURNIZOR_BEFOUPD +prompt ============================================= +prompt +CREATE OR REPLACE TRIGGER TRG_DEV_NOM_FURNIZOR_BEFOUPD +BEFORE UPDATE ON DEV_NOM_FURNIZORIMASINI +REFERENCING OLD AS OLD NEW AS NEW +FOR EACH ROW +begin + +if :old.ID_FURNIZOR <> :new.ID_FURNIZOR then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_nom_furnizorimasini', :OLD.id_furnizor,'ID_FURNIZOR','N', :OLD.ID_FURNIZOR, :NEW.ID_FURNIZOR, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +if :old.DENUMIRE <> :new.DENUMIRE then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_nom_furnizorimasini', :OLD.id_furnizor,'DENUMIRE','C', :OLD.DENUMIRE, :NEW.DENUMIRE, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +if :old.STERS <> :new.STERS then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_nom_furnizorimasini', :OLD.id_furnizor,'STERS','N', :OLD.STERS, :NEW.STERS, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +if :old.INACTIV <> :new.INACTIV then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_nom_furnizorimasini', :OLD.id_furnizor,'INACTIV','N', :OLD.INACTIV, :NEW.INACTIV, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +end; +/ + +prompt +prompt Creating trigger TRG_DEV_NOM_INSPECTO_BEFOUPD +prompt ============================================= +prompt +CREATE OR REPLACE TRIGGER TRG_DEV_NOM_INSPECTO_BEFOUPD +BEFORE UPDATE ON DEV_NOM_INSPECTORI +REFERENCING OLD AS OLD NEW AS NEW +FOR EACH ROW +begin + +if :old.STERS <> :new.STERS then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_nom_inspectori', :OLD.id_inspector,'STERS','N', :OLD.STERS, :NEW.STERS, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +if :old.INACTIV <> :new.INACTIV then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_nom_inspectori', :OLD.id_inspector,'INACTIV','N', :OLD.INACTIV, :NEW.INACTIV, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +if :old.ID_INSPECTOR <> :new.ID_INSPECTOR then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_nom_inspectori', :OLD.id_inspector,'ID_INSPECTOR','N', :OLD.ID_INSPECTOR, :NEW.ID_INSPECTOR, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +if :old.INSPECTOR <> :new.INSPECTOR then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_nom_inspectori', :OLD.id_inspector,'INSPECTOR','C', :OLD.INSPECTOR, :NEW.INSPECTOR, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +if :old.ID_ASIGURATOR <> :new.ID_ASIGURATOR then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_nom_inspectori', :OLD.id_inspector,'ID_ASIGURATOR','N', :OLD.ID_ASIGURATOR, :NEW.ID_ASIGURATOR, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +end; +/ + +prompt +prompt Creating trigger TRG_DEV_NOM_INSPECTORI_BEFOINS +prompt =============================================== +prompt +create or replace trigger TRG_dev_nom_inspectori_BEFOINS +before insert on dev_nom_inspectori +referencing old as old new as new +for each row +begin +select SEQ_dev_nom_inspectori.NEXTVAL into :new.id_inspector from dual; +end; +/ + +prompt +prompt Creating trigger TRG_DEV_NOM_MARCI_BEFOINS +prompt ========================================== +prompt +create or replace trigger TRG_dev_nom_marci_BEFOINS +before insert on dev_nom_marci +referencing old as old new as new +for each row +begin +select SEQ_dev_nom_marci.NEXTVAL into :new.id_marca from dual; +end; +/ + +prompt +prompt Creating trigger TRG_DEV_NOM_MARCI_BEFOUPD +prompt ========================================== +prompt +CREATE OR REPLACE TRIGGER TRG_DEV_NOM_MARCI_BEFOUPD +BEFORE UPDATE ON DEV_NOM_MARCI +REFERENCING OLD AS OLD NEW AS NEW +FOR EACH ROW +begin + +if :old.STERS <> :new.STERS then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_nom_marci', :OLD.id_marca,'STERS','N', :OLD.STERS, :NEW.STERS, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +if :old.INACTIV <> :new.INACTIV then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_nom_marci', :OLD.id_marca,'INACTIV','N', :OLD.INACTIV, :NEW.INACTIV, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +if :old.ID_MARCA <> :new.ID_MARCA then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_nom_marci', :OLD.id_marca,'ID_MARCA','N', :OLD.ID_MARCA, :NEW.ID_MARCA, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +if :old.MARCA <> :new.MARCA then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_nom_marci', :OLD.id_marca,'MARCA','C', :OLD.MARCA, :NEW.MARCA, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +end; +/ + +prompt +prompt Creating trigger TRG_DEV_NOM_MASINI_BEFOINS +prompt =========================================== +prompt +create or replace trigger TRG_dev_nom_masini_BEFOINS +before insert on dev_nom_masini +referencing old as old new as new +for each row +begin +select SEQ_dev_nom_masini.NEXTVAL into :new.id_masina from dual; +end; +/ + +prompt +prompt Creating trigger TRG_DEV_NOM_MASINI_BEFOUPD +prompt =========================================== +prompt +CREATE OR REPLACE TRIGGER TRG_DEV_NOM_MASINI_BEFOUPD +BEFORE UPDATE ON DEV_NOM_MASINI +REFERENCING OLD AS OLD NEW AS NEW +FOR EACH ROW +begin + +if :old.STERS <> :new.STERS then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_nom_masini', :OLD.id_masina,'STERS','N', :OLD.STERS, :NEW.STERS, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +if :old.INACTIV <> :new.INACTIV then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_nom_masini', :OLD.id_masina,'INACTIV','N', :OLD.INACTIV, :NEW.INACTIV, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +if :old.ID_MASINA <> :new.ID_MASINA then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_nom_masini', :OLD.id_masina,'ID_MASINA','N', :OLD.ID_MASINA, :NEW.ID_MASINA, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +if :old.ID_MARCA <> :new.ID_MARCA then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_nom_masini', :OLD.id_masina,'ID_MARCA','N', :OLD.ID_MARCA, :NEW.ID_MARCA, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +if :old.MASINA <> :new.MASINA then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_nom_masini', :OLD.id_masina,'MASINA','C', :OLD.MASINA, :NEW.MASINA, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +if :old.SCTIP <> :new.SCTIP then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_nom_masini', :OLD.id_masina,'SCTIP','C', :OLD.SCTIP, :NEW.SCTIP, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +if :old.CLASA <> :new.CLASA then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_nom_masini', :OLD.id_masina,'CLASA','C', :OLD.CLASA, :NEW.CLASA, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +end; +/ + +prompt +prompt Creating trigger TRG_DEV_NOM_NORME_BEFOINS +prompt ========================================== +prompt +create or replace trigger TRG_dev_nom_norme_BEFOINS +before insert on dev_nom_norme +referencing old as old new as new +for each row +begin +select SEQ_dev_nom_norme.NEXTVAL into :new.id_norme from dual; +end; +/ + +prompt +prompt Creating trigger TRG_DEV_NOM_NORME_BEFOUPD +prompt ========================================== +prompt +CREATE OR REPLACE TRIGGER TRG_DEV_NOM_NORME_BEFOUPD +BEFORE UPDATE ON DEV_NOM_NORME +REFERENCING OLD AS OLD NEW AS NEW +FOR EACH ROW +begin + +if :old.STERS <> :new.STERS then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_nom_norme', :OLD.id_norme,'STERS','N', :OLD.STERS, :NEW.STERS, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +if :old.INACTIV <> :new.INACTIV then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_nom_norme', :OLD.id_norme,'INACTIV','N', :OLD.INACTIV, :NEW.INACTIV, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +if :old.ID_NORME <> :new.ID_NORME then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_nom_norme', :OLD.id_norme,'ID_NORME','N', :OLD.ID_NORME, :NEW.ID_NORME, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +if :old.ID_ANSAMBLU <> :new.ID_ANSAMBLU then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_nom_norme', :OLD.id_norme,'ID_ANSAMBLU','N', :OLD.ID_ANSAMBLU, :NEW.ID_ANSAMBLU, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +if :old.ID_MASINA <> :new.ID_MASINA then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_nom_norme', :OLD.id_norme,'ID_MASINA','N', :OLD.ID_MASINA, :NEW.ID_MASINA, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + + +if :old.DENOP <> :new.DENOP then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_nom_norme', :OLD.id_norme,'DENOP','C', :OLD.DENOP, :NEW.DENOP, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +if :old.CODOP <> :new.CODOP then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_nom_norme', :OLD.id_norme,'CODOP','C', :OLD.CODOP, :NEW.CODOP, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +if :old.TIMPN <> :new.TIMPN then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_nom_norme', :OLD.id_norme,'TIMPN','N', :OLD.TIMPN, :NEW.TIMPN, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +end; +/ + +prompt +prompt Creating trigger TRG_DEV_NOM_PRETURI_BEFOINS +prompt ============================================ +prompt +create or replace trigger TRG_dev_nom_preturi_BEFOINS +before insert on dev_nom_preturi +referencing old as old new as new +for each row +begin +select SEQ_dev_nom_preturi.NEXTVAL into :new.id_pret from dual; +end; +/ + +prompt +prompt Creating trigger TRG_DEV_NOM_PRETURI_BEFOUPD +prompt ============================================ +prompt +CREATE OR REPLACE TRIGGER TRG_DEV_NOM_PRETURI_BEFOUPD +BEFORE UPDATE ON DEV_NOM_PRETURI +REFERENCING OLD AS OLD NEW AS NEW +FOR EACH ROW +begin + +if :old.STERS <> :new.STERS then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_nom_preturi', :OLD.id_pret,'STERS','N', :OLD.STERS, :NEW.STERS, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +if :old.INACTIV <> :new.INACTIV then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_nom_preturi', :OLD.id_pret,'INACTIV','N', :OLD.INACTIV, :NEW.INACTIV, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +if :old.ID_PRET <> :new.ID_PRET then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_nom_preturi', :OLD.id_pret,'ID_PRET','N', :OLD.ID_PRET, :NEW.ID_PRET, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +if :old.ID_MARCA <> :new.ID_MARCA then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_nom_preturi', :OLD.id_pret,'ID_MARCA','N', :OLD.ID_MARCA, :NEW.ID_MARCA, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +if :old.ID_ASIGURATORI <> :new.ID_ASIGURATORI then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_nom_preturi', :OLD.id_pret,'ID_ASIGURATORI','N', :OLD.ID_ASIGURATORI, :NEW.ID_ASIGURATORI, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +if :old.PRET <> :new.PRET then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_nom_preturi', :OLD.id_pret,'PRET','N', :OLD.PRET, :NEW.PRET, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +if :old.PRET_VAL <> :new.PRET_VAL then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_nom_preturi', :OLD.id_pret,'PRET_VAL','N', :OLD.PRET_VAL, :NEW.PRET_VAL, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +if :old.ID_VALUTA <> :new.ID_VALUTA then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_nom_preturi', :OLD.id_pret,'ID_VALUTA','N', :OLD.ID_VALUTA, :NEW.ID_VALUTA, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +if :old.CURS <> :new.CURS then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_nom_preturi', :OLD.id_pret,'CURS','N', :OLD.CURS, :NEW.CURS, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +end; +/ + +prompt +prompt Creating trigger TRG_DEV_NOM_RESP_BEFOINS +prompt ========================================= +prompt +create or replace trigger TRG_DEV_NOM_RESP_BEFOINS +before insert on DEV_NOM_RESP +referencing old as old new as new +for each row +begin +select SEQ_DEV_NOM_RESP.NEXTVAL into :new.ID_RESP from dual; +end; +/ + +prompt +prompt Creating trigger TRG_DEV_NOM_RESP_BEFOUPD +prompt ========================================= +prompt +CREATE OR REPLACE TRIGGER TRG_DEV_NOM_RESP_BEFOUPD +BEFORE UPDATE ON DEV_NOM_RESP +REFERENCING OLD AS OLD NEW AS NEW +FOR EACH ROW +begin + + if :old.ID_RESP <> :new.ID_RESP then + INSERT INTO LOG + (tabel, id_tabel, camp, tip_camp, valoarev, valoaren, id_util) + values + ('DEV_NOM_RESP', + :OLD.ID_RESP, + 'ID_RESP', + 'N', + :OLD.ID_RESP, + :NEW.ID_RESP, + PACK_SESIUNE.GET_ID_UTIL()); + end if; + + if :old.NUME <> :new.NUME then + INSERT INTO LOG + (tabel, id_tabel, camp, tip_camp, valoarev, valoaren, id_util) + values + ('DEV_NOM_RESP', + :OLD.ID_RESP, + 'NUME', + 'C', + :OLD.NUME, + :NEW.NUME, + PACK_SESIUNE.GET_ID_UTIL()); + end if; + + if :old.BI <> :new.BI then + INSERT INTO LOG + (tabel, id_tabel, camp, tip_camp, valoarev, valoaren, id_util) + values + ('DEV_NOM_RESP', + :OLD.ID_RESP, + 'BI', + 'C', + :OLD.BI, + :NEW.BI, + PACK_SESIUNE.GET_ID_UTIL()); + end if; + + if :old.CNPRESP <> :new.CNPRESP then + INSERT INTO LOG + (tabel, id_tabel, camp, tip_camp, valoarev, valoaren, id_util) + values + ('DEV_NOM_RESP', + :OLD.ID_RESP, + 'CNPRESP', + 'C', + :OLD.CNPRESP, + :NEW.CNPRESP, + PACK_SESIUNE.GET_ID_UTIL()); + end if; + + if :old.ALES <> :new.ALES then + INSERT INTO LOG + (tabel, id_tabel, camp, tip_camp, valoarev, valoaren, id_util) + values + ('DEV_NOM_RESP', + :OLD.ID_RESP, + 'ALES', + 'N', + :OLD.ALES, + :NEW.ALES, + PACK_SESIUNE.GET_ID_UTIL()); + end if; + + if :old.STERS <> :new.STERS then + INSERT INTO LOG + (tabel, id_tabel, camp, tip_camp, valoarev, valoaren, id_util) + values + ('DEV_NOM_RESP', + :OLD.ID_RESP, + 'STERS', + 'N', + :OLD.STERS, + :NEW.STERS, + PACK_SESIUNE.GET_ID_UTIL()); + end if; + +end; +/ + +prompt +prompt Creating trigger TRG_DEV_OPER_BEFOINS +prompt ===================================== +prompt +CREATE OR REPLACE TRIGGER TRG_DEV_OPER_BEFOINS +BEFORE INSERT ON DEV_OPER +REFERENCING OLD AS OLD NEW AS NEW +FOR EACH ROW +begin + select SEQ_dev_oper.NEXTVAL into :new.id_oper from dual; + pack_sesiune.dev_idOper := :new.id_oper; +end; +/ + +prompt +prompt Creating trigger TRG_DEV_OPER_BEFOUPD +prompt ===================================== +prompt +CREATE OR REPLACE TRIGGER TRG_DEV_OPER_BEFOUPD +BEFORE UPDATE ON DEV_OPER +REFERENCING OLD AS OLD NEW AS NEW +FOR EACH ROW +begin + +if :old.ID_OPER <> :new.ID_OPER then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_oper', :OLD.id_oper,'ID_OPER','N', :OLD.ID_OPER, :NEW.ID_OPER, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +if :old.ID_ORDL <> :new.ID_ORDL then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_oper', :OLD.id_oper,'ID_ORDL','N', :OLD.ID_ORDL, :NEW.ID_ORDL, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +if :old.ID_NORME <> :new.ID_NORME then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_oper', :OLD.id_oper,'ID_NORME','N', :OLD.ID_NORME, :NEW.ID_NORME, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +if :old.ID_FACT <> :new.ID_FACT then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_oper', :OLD.id_oper,'ID_FACT','N', :OLD.ID_FACT, :NEW.ID_FACT, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +if :old.TIMPN <> :new.TIMPN then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_oper', :OLD.id_oper,'TIMPN','N', :OLD.TIMPN, :NEW.TIMPN, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +if :old.PRET <> :new.PRET then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_oper', :OLD.id_oper,'PRET','N', :OLD.PRET, :NEW.PRET, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +if :old.DATAI <> :new.DATAI then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_oper', :OLD.id_oper,'DATAI','D', :OLD.DATAI, :NEW.DATAI, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +if :old.ID_SECTIE <> :new.ID_SECTIE then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_oper', :OLD.id_oper,'ID_SECTIE','N', :OLD.ID_SECTIE, :NEW.ID_SECTIE, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +if :old.ID_UTIL <> :new.ID_UTIL then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_oper', :OLD.id_oper,'ID_UTIL','N', :OLD.ID_UTIL, :NEW.ID_UTIL, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +if :old.DATAORA <> :new.DATAORA then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_oper', :OLD.id_oper,'DATAORA','D', :OLD.DATAORA, :NEW.DATAORA, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +if :old.id_UTILS <> :new.id_UTILS then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_oper', :OLD.id_oper,'ID_UTILS','N', :OLD.id_UTILS, :NEW.id_UTILS, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +if :old.DATAORAS <> :new.DATAORAS then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_oper', :OLD.id_oper,'DATAORAS','D', :OLD.DATAORAS, :NEW.DATAORAS, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +if :old.STERS <> :new.STERS then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_oper', :OLD.id_oper,'STERS','N', :OLD.STERS, :NEW.STERS, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +if :old.VALIDAT <> :new.VALIDAT then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_oper', :OLD.id_oper,'STERS','N', :OLD.VALIDAT, :NEW.VALIDAT, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +if :old.NOU <> :new.NOU then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_oper', :OLD.id_oper,'NOU','N', :OLD.NOU, :NEW.NOU, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +if :old.ID_UTILI <> :new.ID_UTILI then + INSERT INTO LOG +(tabel, id_tabel, camp, tip_camp, valoarev, valoaren,id_util) +values +('dev_oper', :OLD.id_oper,'ID_UTILI','N', :OLD.ID_UTILI, :NEW.ID_UTILI, PACK_SESIUNE.GET_ID_UTIL()) ; +end if; + +end; +/ + +prompt +prompt Creating trigger TRG_DEV_OPER_MECANIC_BEFOUPD +prompt ============================================= +prompt +CREATE OR REPLACE TRIGGER TRG_DEV_OPER_MECANIC_BEFOUPD +BEFORE UPDATE ON DEV_OPER_MECANICI +REFERENCING OLD AS OLD NEW AS NEW +FOR EACH ROW +begin + + if :old.ID_OPERMECANIC <> :new.ID_OPERMECANIC then + INSERT INTO LOG + (tabel, id_tabel, camp, tip_camp, valoarev, valoaren, id_util) + values + ('DEV_OPER_MECANICI', + :OLD.ID_OPERMECANIC, + 'ID_OPERMECANIC', + 'N', + :OLD.ID_OPERMECANIC, + :NEW.ID_OPERMECANIC, + PACK_SESIUNE.GET_ID_UTIL()); + end if; + + if :old.ID_MECANIC <> :new.ID_MECANIC then + INSERT INTO LOG + (tabel, id_tabel, camp, tip_camp, valoarev, valoaren, id_util) + values + ('DEV_OPER_MECANICI', + :OLD.ID_OPERMECANIC, + 'ID_MECANIC', + 'N', + :OLD.ID_MECANIC, + :NEW.ID_MECANIC, + PACK_SESIUNE.GET_ID_UTIL()); + end if; + + if :old.ID_OPER <> :new.ID_OPER then + INSERT INTO LOG + (tabel, id_tabel, camp, tip_camp, valoarev, valoaren, id_util) + values + ('DEV_OPER_MECANICI', + :OLD.ID_OPERMECANIC, + 'ID_OPER', + 'N', + :OLD.ID_OPER, + :NEW.ID_OPER, + PACK_SESIUNE.GET_ID_UTIL()); + end if; + + if :old.ORE <> :new.ORE then + INSERT INTO LOG + (tabel, id_tabel, camp, tip_camp, valoarev, valoaren, id_util) + values + ('DEV_OPER_MECANICI', + :OLD.ID_OPERMECANIC, + 'ORE', + 'N', + :OLD.ORE, + :NEW.ORE, + PACK_SESIUNE.GET_ID_UTIL()); + end if; + + if :old.STERS <> :new.STERS then + INSERT INTO LOG + (tabel, id_tabel, camp, tip_camp, valoarev, valoaren, id_util) + values + ('DEV_OPER_MECANICI', + :OLD.ID_OPERMECANIC, + 'STERS', + 'N', + :OLD.STERS, + :NEW.STERS, + PACK_SESIUNE.GET_ID_UTIL()); + end if; + + if :old.INACTIV <> :new.INACTIV then + INSERT INTO LOG + (tabel, id_tabel, camp, tip_camp, valoarev, valoaren, id_util) + values + ('DEV_OPER_MECANICI', + :OLD.ID_OPERMECANIC, + 'INACTIV', + 'N', + :OLD.INACTIV, + :NEW.INACTIV, + PACK_SESIUNE.GET_ID_UTIL()); + end if; + +end; +/ + +prompt +prompt Creating trigger TRG_DEV_OPER_MECANICI_BEFOINS +prompt ============================================== +prompt +create or replace trigger TRG_DEV_OPER_MECANICI_BEFOINS +before insert on DEV_OPER_MECANICI +referencing old as old new as new +for each row +begin +select SEQ_DEV_OPER_MECANICI.NEXTVAL into :new.ID_OPERMECANIC from dual; +end; +/ + +prompt +prompt Creating trigger TRG_DEV_ORDL_BEFOINS +prompt ===================================== +prompt +CREATE OR REPLACE TRIGGER TRG_DEV_ORDL_BEFOINS +BEFORE INSERT ON DEV_ORDL +REFERENCING OLD AS OLD NEW AS NEW +FOR EACH ROW +begin + select SEQ_DEV_ORDL.NEXTVAL into :new.ID_ORDL from dual; + pack_sesiune.dev_idOrdl := :new.id_ordl; +end; +/ + +prompt +prompt Creating trigger TRG_DEV_ORDL_BEFOUPD +prompt ===================================== +prompt +CREATE OR REPLACE TRIGGER TRG_DEV_ORDL_BEFOUPD +BEFORE UPDATE ON DEV_ORDL +REFERENCING OLD AS OLD NEW AS NEW +FOR EACH ROW +begin + + if :old.ID_ORDL <> :new.ID_ORDL then + INSERT INTO LOG + (tabel, id_tabel, camp, tip_camp, valoarev, valoaren, id_util) + values + ('dev_ordl', + :OLD.id_ordl, + 'ID_ORDL', + 'N', + :OLD.ID_ORDL, + :NEW.ID_ORDL, + PACK_SESIUNE.GET_ID_UTIL()); + end if; + + if :old.LUNA <> :new.LUNA then + INSERT INTO LOG + (tabel, id_tabel, camp, tip_camp, valoarev, valoaren, id_util) + values + ('dev_ordl', + :OLD.id_ordl, + 'LUNA', + 'N', + :OLD.LUNA, + :NEW.LUNA, + PACK_SESIUNE.GET_ID_UTIL()); + end if; + + if :old.AN <> :new.AN then + INSERT INTO LOG + (tabel, id_tabel, camp, tip_camp, valoarev, valoaren, id_util) + values + ('dev_ordl', + :OLD.id_ordl, + 'AN', + 'N', + :OLD.AN, + :NEW.AN, + PACK_SESIUNE.GET_ID_UTIL()); + end if; + + if :old.ID_INSPECTOR <> :new.ID_INSPECTOR then + INSERT INTO LOG + (tabel, id_tabel, camp, tip_camp, valoarev, valoaren, id_util) + values + ('dev_ordl', + :OLD.id_ordl, + 'ID_INSPECTOR', + 'N', + :OLD.ID_INSPECTOR, + :NEW.ID_INSPECTOR, + PACK_SESIUNE.GET_ID_UTIL()); + end if; + + if :old.ID_LUCRARE <> :new.ID_LUCRARE then + INSERT INTO LOG + (tabel, id_tabel, camp, tip_camp, valoarev, valoaren, id_util) + values + ('dev_ordl', + :OLD.id_ordl, + 'ID_LUCRARE', + 'N', + :OLD.ID_LUCRARE, + :NEW.ID_LUCRARE, + PACK_SESIUNE.GET_ID_UTIL()); + end if; + + if :old.TERMEN <> :new.TERMEN then + INSERT INTO LOG + (tabel, id_tabel, camp, tip_camp, valoarev, valoaren, id_util) + values + ('dev_ordl', + :OLD.id_ordl, + 'TERMEN', + 'D', + :OLD.TERMEN, + :NEW.TERMEN, + PACK_SESIUNE.GET_ID_UTIL()); + end if; + + if :old.DATAI <> :new.DATAI then + INSERT INTO LOG + (tabel, id_tabel, camp, tip_camp, valoarev, valoaren, id_util) + values + ('dev_ordl', + :OLD.id_ordl, + 'DATAI', + 'D', + :OLD.DATAI, + :NEW.DATAI, + PACK_SESIUNE.GET_ID_UTIL()); + end if; + + if :old.ORAI <> :new.ORAI then + INSERT INTO LOG + (tabel, id_tabel, camp, tip_camp, valoarev, valoaren, id_util) + values + ('dev_ordl', + :OLD.id_ordl, + 'ORAI', + 'N', + :OLD.ORAI, + :NEW.ORAI, + PACK_SESIUNE.GET_ID_UTIL()); + end if; + + if :old.DATAE <> :new.DATAE then + INSERT INTO LOG + (tabel, id_tabel, camp, tip_camp, valoarev, valoaren, id_util) + values + ('dev_ordl', + :OLD.id_ordl, + 'DATAE', + 'D', + :OLD.DATAE, + :NEW.DATAE, + PACK_SESIUNE.GET_ID_UTIL()); + end if; + + if :old.ORAE <> :new.ORAE then + INSERT INTO LOG + (tabel, id_tabel, camp, tip_camp, valoarev, valoaren, id_util) + values + ('dev_ordl', + :OLD.id_ordl, + 'ORAE', + 'N', + :OLD.ORAE, + :NEW.ORAE, + PACK_SESIUNE.GET_ID_UTIL()); + end if; + + if :old.VALIDAT <> :new.VALIDAT then + INSERT INTO LOG + (tabel, id_tabel, camp, tip_camp, valoarev, valoaren, id_util) + values + ('dev_ordl', + :OLD.id_ordl, + 'VALIDAT', + 'N', + :OLD.VALIDAT, + :NEW.VALIDAT, + PACK_SESIUNE.GET_ID_UTIL()); + end if; + + if :old.TIP_INCAS <> :new.TIP_INCAS then + INSERT INTO LOG + (tabel, id_tabel, camp, tip_camp, valoarev, valoaren, id_util) + values + ('dev_ordl', + :OLD.id_ordl, + 'TIP_INCAS', + 'C', + :OLD.TIP_INCAS, + :NEW.TIP_INCAS, + PACK_SESIUNE.GET_ID_UTIL()); + end if; + + if :old.ID_UTIL_AD <> :new.ID_UTIL_AD then + INSERT INTO LOG + (tabel, id_tabel, camp, tip_camp, valoarev, valoaren, id_util) + values + ('dev_ordl', + :OLD.id_ordl, + 'ID_UTIL_AD', + 'N', + :OLD.ID_UTIL_AD, + :NEW.ID_UTIL_AD, + PACK_SESIUNE.GET_ID_UTIL()); + end if; + + if :old.ID_UTIL_VALID <> :new.ID_UTIL_VALID then + INSERT INTO LOG + (tabel, id_tabel, camp, tip_camp, valoarev, valoaren, id_util) + values + ('dev_ordl', + :OLD.id_ordl, + 'ID_UTIL_VALID', + 'N', + :OLD.ID_UTIL_VALID, + :NEW.ID_UTIL_VALID, + PACK_SESIUNE.GET_ID_UTIL()); + end if; + + if :old.DATAORAAD <> :new.DATAORAAD then + INSERT INTO LOG + (tabel, id_tabel, camp, tip_camp, valoarev, valoaren, id_util) + values + ('dev_ordl', + :OLD.id_ordl, + 'DATAORAAD', + 'D', + :OLD.DATAORAAD, + :NEW.DATAORAAD, + PACK_SESIUNE.GET_ID_UTIL()); + end if; + + if :old.DATAORAVALID <> :new.DATAORAVALID then + INSERT INTO LOG + (tabel, id_tabel, camp, tip_camp, valoarev, valoaren, id_util) + values + ('dev_ordl', + :OLD.id_ordl, + 'DATAORAVALID', + 'D', + :OLD.DATAORAVALID, + :NEW.DATAORAVALID, + PACK_SESIUNE.GET_ID_UTIL()); + end if; + + if :old.ID_UTILS <> :new.ID_UTILS then + INSERT INTO LOG + (tabel, id_tabel, camp, tip_camp, valoarev, valoaren, id_util) + values + ('dev_ordl', + :OLD.id_ordl, + 'ID_UTILS', + 'N', + :OLD.ID_UTILS, + :NEW.ID_UTILS, + PACK_SESIUNE.GET_ID_UTIL()); + end if; + + if :old.DATAORAS <> :new.DATAORAS then + INSERT INTO LOG + (tabel, id_tabel, camp, tip_camp, valoarev, valoaren, id_util) + values + ('dev_ordl', + :OLD.id_ordl, + 'DATAORAS', + 'D', + :OLD.DATAORAS, + :NEW.DATAORAS, + PACK_SESIUNE.GET_ID_UTIL()); + end if; + + if :old.ID_FACT <> :new.ID_FACT then + INSERT INTO LOG + (tabel, id_tabel, camp, tip_camp, valoarev, valoaren, id_util) + values + ('dev_ordl', + :OLD.id_ordl, + 'ID_FACT', + 'N', + :OLD.ID_FACT, + :NEW.ID_FACT, + PACK_SESIUNE.GET_ID_UTIL()); + end if; + + if :old.ID_MASINICLIENT <> :new.ID_MASINICLIENT then + INSERT INTO LOG + (tabel, id_tabel, camp, tip_camp, valoarev, valoaren, id_util) + values + ('dev_ordl', + :OLD.id_ordl, + 'ID_MASINICLIENT', + 'N', + :OLD.ID_MASINICLIENT, + :NEW.ID_MASINICLIENT, + PACK_SESIUNE.GET_ID_UTIL()); + end if; + + if :old.ID_ASIGURATOR <> :new.ID_ASIGURATOR then + INSERT INTO LOG + (tabel, id_tabel, camp, tip_camp, valoarev, valoaren, id_util) + values + ('dev_ordl', + :OLD.id_ordl, + 'ID_ASIGURATOR', + 'N', + :OLD.ID_ASIGURATOR, + :NEW.ID_ASIGURATOR, + PACK_SESIUNE.GET_ID_UTIL()); + end if; + + if :old.ID_CONTRACT <> :new.ID_CONTRACT then + INSERT INTO LOG + (tabel, id_tabel, camp, tip_camp, valoarev, valoaren, id_util) + values + ('dev_ordl', + :OLD.id_ordl, + 'ID_CONTRACT', + 'N', + :OLD.ID_CONTRACT, + :NEW.ID_CONTRACT, + PACK_SESIUNE.GET_ID_UTIL()); + end if; + + if :old.AVANS <> :new.AVANS then + INSERT INTO LOG + (tabel, id_tabel, camp, tip_camp, valoarev, valoaren, id_util) + values + ('dev_ordl', + :OLD.id_ordl, + 'AVANS', + 'N', + :OLD.AVANS, + :NEW.AVANS, + PACK_SESIUNE.GET_ID_UTIL()); + end if; + + if :old.STERS <> :new.STERS then + INSERT INTO LOG + (tabel, id_tabel, camp, tip_camp, valoarev, valoaren, id_util) + values + ('dev_ordl', + :OLD.id_ordl, + 'STERS', + 'N', + :OLD.STERS, + :NEW.STERS, + PACK_SESIUNE.GET_ID_UTIL()); + end if; + + if :old.VALCTVA <> :new.VALCTVA then + INSERT INTO LOG + (tabel, id_tabel, camp, tip_camp, valoarev, valoaren, id_util) + values + ('dev_ordl', + :OLD.id_ordl, + 'VALCTVA', + 'N', + :OLD.VALCTVA, + :NEW.VALCTVA, + PACK_SESIUNE.GET_ID_UTIL()); + end if; + + if :old.ID_TIP <> :new.ID_TIP then + INSERT INTO LOG + (tabel, id_tabel, camp, tip_camp, valoarev, valoaren, id_util) + values + ('dev_ordl', + :OLD.id_ordl, + 'ID_TIP', + 'N', + :OLD.ID_TIP, + :NEW.ID_TIP, + PACK_SESIUNE.GET_ID_UTIL()); + end if; + + if :old.INCHIS_FORTAT <> :new.INCHIS_FORTAT then + INSERT INTO LOG + (tabel, id_tabel, camp, tip_camp, valoarev, valoaren, id_util) + values + ('dev_ordl', + :OLD.id_ordl, + 'INCHIS_FORTAT', + 'N', + :OLD.INCHIS_FORTAT, + :NEW.INCHIS_FORTAT, + PACK_SESIUNE.GET_ID_UTIL()); + end if; + + if :old.KMINT <> :new.KMINT then + INSERT INTO LOG + (tabel, id_tabel, camp, tip_camp, valoarev, valoaren, id_util) + values + ('dev_ordl', + :OLD.id_ordl, + 'KMINT', + 'N', + :OLD.KMINT, + :NEW.KMINT, + PACK_SESIUNE.GET_ID_UTIL()); + end if; +end; +/ + +prompt +prompt Creating trigger TRG_DEV_TIP_DEVIZ +prompt ================================== +prompt +create or replace trigger TRG_DEV_TIP_DEVIZ +before insert on DEV_TIP_DEVIZ +referencing old as old new as new +for each row +begin +select SEQ_DEV_TIP_DEVIZ.NEXTVAL into :new.ID_TIP from dual; +end; +/ + +prompt +prompt Creating trigger TRG_DEV_TIP_DEVIZ_BEFOUPD +prompt ========================================== +prompt +CREATE OR REPLACE TRIGGER TRG_DEV_TIP_DEVIZ_BEFOUPD + BEFORE UPDATE ON DEV_TIP_DEVIZ + REFERENCING OLD AS OLD NEW AS NEW + FOR EACH ROW +begin + + if :old.ID_TIP <> :new.ID_TIP then + INSERT INTO LOG + (tabel, id_tabel, camp, tip_camp, valoarev, valoaren, id_util) + values + ('DEV_TIP_DEVIZ', + :OLD.ID_TIP, + 'ID_TIP', + 'N', + :OLD.ID_TIP, + :NEW.ID_TIP, + PACK_SESIUNE.GET_ID_UTIL()); + end if; + + if :old.DENUMIRE <> :new.DENUMIRE then + INSERT INTO LOG + (tabel, id_tabel, camp, tip_camp, valoarev, valoaren, id_util) + + values + ('DEV_TIP_DEVIZ', + :OLD.ID_TIP, + 'DENUMIRE', + 'C', + :OLD.DENUMIRE, + :NEW.DENUMIRE, + PACK_SESIUNE.GET_ID_UTIL()); + end if; + + if :old.STERS <> :new.STERS then + INSERT INTO LOG + (tabel, id_tabel, camp, tip_camp, valoarev, valoaren, id_util) + values + + ('DEV_TIP_DEVIZ', + :OLD.ID_TIP, + 'STERS', + 'N', + :OLD.STERS, + :NEW.STERS, + PACK_SESIUNE.GET_ID_UTIL()); + end if; + +end; +/ + +prompt +prompt Creating trigger TRG_DEV_TIPURI_MOTOA_BEFOUPD +prompt ============================================= +prompt +CREATE OR REPLACE TRIGGER TRG_DEV_TIPURI_MOTOA_BEFOUPD +BEFORE UPDATE ON DEV_TIPURI_MOTOARE +REFERENCING OLD AS OLD NEW AS NEW +FOR EACH ROW +begin + + if :old.DENUMIRE <> :new.DENUMIRE then + INSERT INTO LOG + (tabel, id_tabel, camp, tip_camp, valoarev, valoaren, id_util) + values + ('dev_tipuri_motoare', + :OLD.id_tipmotor, + 'DENUMIRE', + 'C', + :OLD.DENUMIRE, + :NEW.DENUMIRE, + PACK_SESIUNE.GET_ID_UTIL()); + end if; + + if :old.STERS <> :new.STERS then + INSERT INTO LOG + (tabel, id_tabel, camp, tip_camp, valoarev, valoaren, id_util) + values + ('dev_tipuri_motoare', + :OLD.id_tipmotor, + 'STERS', + 'N', + :OLD.STERS, + :NEW.STERS, + PACK_SESIUNE.GET_ID_UTIL()); + end if; + + if :old.INACTIV <> :new.INACTIV then + INSERT INTO LOG + (tabel, id_tabel, camp, tip_camp, valoarev, valoaren, id_util) + values + ('dev_tipuri_motoare', + :OLD.id_tipmotor, + 'INACTIV', + 'N', + :OLD.INACTIV, + :NEW.INACTIV, + PACK_SESIUNE.GET_ID_UTIL()); + end if; + + if :old.ID_TIPMOTOR <> :new.ID_TIPMOTOR then + INSERT INTO LOG + (tabel, id_tabel, camp, tip_camp, valoarev, valoaren, id_util) + values + ('dev_tipuri_motoare', + :OLD.id_tipmotor, + 'ID_TIPMOTOR', + 'N', + :OLD.ID_TIPMOTOR, + :NEW.ID_TIPMOTOR, + PACK_SESIUNE.GET_ID_UTIL()); + end if; + +end; +/ + +prompt +prompt Creating trigger TRG_DEV_TIPURI_MOTOARE_BEFOINS +prompt =============================================== +prompt +create or replace trigger TRG_dev_tipuri_motoare_BEFOINS +before insert on dev_tipuri_motoare +referencing old as old new as new +for each row +begin +select SEQ_dev_tipuri_motoare.NEXTVAL into :new.id_tipmotor from dual; +end; +/ + + +spool off diff --git a/Scripturi_instalare/viewuri.sql b/Scripturi_instalare/viewuri.sql new file mode 100644 index 0000000..592e803 --- /dev/null +++ b/Scripturi_instalare/viewuri.sql @@ -0,0 +1,917 @@ +-------------------------------------------------------- +-- View-uri pentru ROAAUTO v 1.4.151 -- +-- Created by marius.atanasiu on 2/2/2006, 9:43:41 AM -- +-------------------------------------------------------- + +spool viewuri.log + +prompt +prompt Creating view DEV_VORDL_FACTURATE +prompt ================================= +prompt +create or replace view dev_vordl_facturate as +select distinct b.id_lucrare, + max(b.dataact) keep(dense_rank first order by b.id_set desc) over(partition by b.id_lucrare) as dataact, + max(b.nract) keep(dense_rank first order by b.id_set desc, b.dataact desc) over(partition by b.id_lucrare) as nract, + max(case + when b.id_set in (31003, 31004, 31005, 31011, 31012) then + 1 + else + 0 + end) over(partition by b.id_lucrare) as facturat + from mv_ordl_sume_act b + where extract(month from b.dataact) + extract(year from b.dataact) * 12 <= + pack_sesiune.getluna() + + pack_sesiune.getAn() * 12 +/ + +prompt +prompt Creating view DEV_VORDL_FACTURI +prompt =============================== +prompt +create or replace view dev_vordl_facturi as +select a.id_lucrare, + (case + when pack_sesiune.getAn() * 12 + + pack_sesiune.getLuna() >= + pack_sesiune.GET_ANRON() * 12 + + pack_sesiune.GET_LUNARON() then + NVL(b.manopera_ron + b.materiale_ron + b.tva_ron, -1.000) + else + NVL(b.manopera_rol + b.materiale_rol + b.tva_rol, -1.000) + end) as valctva, + a.dataact, + a.nract, + a.facturat + from dev_vordl_facturate a + left join mv_ordl_sume_act b on a.nract = b.nract + and a.id_lucrare = b.id_lucrare + and a.dataact = b.dataact +/ + +prompt +prompt Creating view DEV_COMENZI_VALIDATE +prompt ================================== +prompt +create or replace view dev_comenzi_validate as +select a.id_ordl, + a.id_lucrare, + a.id_masiniclient, + a.id_tip, + a.datai, + a.id_inspector, + a.id_asigurator, + (case + when extract(month from a.dataoravalid) + + extract(year from a.dataoravalid) * 12 <= + pack_sesiune.getluna() + + pack_sesiune.getan() * 12 then + 1 + else + 0 + end) as validat, + (case + when extract(month from a.dataoravalid) + + extract(year from a.dataoravalid) * 12 <= + pack_sesiune.getluna() + + pack_sesiune.getan() * 12 then + a.dataoravalid + else + null + end) as dataoravalid, + (case + when extract(month from a.dataoravalid) + + extract(year from a.dataoravalid) * 12 <= + pack_sesiune.getluna() + + pack_sesiune.getan() * 12 then + b.utilizator + else + null + end) as util_valid, + c.nrord + from dev_ordl a + left join syn_utilizatori b on a.id_util_valid = b.id_util + left join nom_lucrari c on a.id_lucrare = c.id_lucrare + where a.sters = 0 +/ + +prompt +prompt Creating view DEV_ISTORIC_COMENZI +prompt ================================= +prompt +create or replace view dev_istoric_comenzi as +select a.id_ordl, + a.id_lucrare, + a.id_masiniclient, + a.id_tip, + a.datai, + nvl(a.validat, 0) as validat, + a.dataoravalid, + a.util_valid, + a.nrord, + nvl(c.facturat, 0) as facturat, + c.dataact as datafact, + nvl(c.nract, 0) as nrfact, + d.id_partener, + d.nrinmat, + b.masina, + b1.marca, + e.nume, + g.asigurator, + h.inspector, + i.denumire as tip_comanda + from dev_comenzi_validate a + left join dev_vordl_facturi c on a.id_lucrare = c.id_lucrare + left join dev_masiniclienti d on a.id_masiniclient = d.id_masiniclient + left join dev_nom_masini b on d.id_masina = b.id_masina + left join dev_nom_marci b1 on b.id_marca = b1.id_marca + left join nom_parteneri e on d.id_partener = e.id_part + left join dev_nom_asiguratori g on a.id_asigurator = g.id_asigurator + left join dev_nom_inspectori h on a.id_inspector = h.id_inspector + left join dev_tip_deviz i on a.id_tip = i.id_tip +/ + +prompt +prompt Creating view DEV_ANALIZA_MANASIG +prompt ================================= +prompt +create or replace view dev_analiza_manasig as +Select 'GARANTIE' As tip, + NVL(a.asigurator, 'FARA ASIGURATOR') as asig, + last_day(to_date(a.dataoravalid)) as luna, + Nvl(Sum(round(b.timpn, 3)), 0) As timp_n + From dev_istoric_comenzi a + Left Join dev_oper b On a.id_ordl = b.id_ordl + Where a.validat = 1 + and a.id_tip = 2 + and b.sters = 0 + Group By a.asigurator, last_day(to_date(a.dataoravalid)) +Union all +Select 'REGIE' As tip, + NVL(a.asigurator, 'FARA ASIGURATOR') as asig, + last_day(to_date(a.dataoravalid)) as luna, + Nvl(Round(Sum(b.timpn), 3), 0) As timp_n + From dev_istoric_comenzi a + Left Join dev_oper b On a.id_ordl = b.id_ordl + Where a.Validat = 1 + And a.id_tip > 2 + and b.sters = 0 + Group By a.asigurator, last_day(to_date(a.dataoravalid)) +Union all +Select 'POST GARANTIE' As tip, + NVL(a.asigurator, 'FARA ASIGURATOR') as asig, + last_day(to_date(a.datafact)) as luna, + Nvl(Round(Sum(b.timpn), 3), 0) As timp_n + From dev_istoric_comenzi a + Left Join dev_oper b On a.id_ordl = b.id_ordl + Where a.facturat = 1 + and b.sters = 0 + Group By a.asigurator, last_day(to_date(a.datafact)) +/ + +prompt +prompt Creating view DEV_VORDL +prompt ======================= +prompt +create or replace view dev_vordl as +select o.*,p.nume,p.cod_fiscal,p.adresa,p.telefon,p.banca,p.cont_banca,p.reg_comert, +l.nrord, +m.nrinmat,m.series,m.seriem, +asig.asigurator, +mar.marca,mas.masina,ins.inspector,ut.utilizator as util_valid,k.denumire as tip_comanda + from dev_ordl o + left join dev_masiniclienti m on o.id_masiniclient = m.id_masiniclient + left join nom_parteneri p on m.id_partener = p.id_part + left join nom_lucrari l on o.id_lucrare = l.id_lucrare + left join dev_nom_asiguratori asig on o.id_asigurator = asig.id_asigurator + left join dev_nom_masini mas on m.id_masina = mas.id_masina + left join dev_nom_marci mar on mas.id_marca = mar.id_marca + left join dev_nom_inspectori ins on o.id_inspector = ins.id_inspector + left join dev_tip_deviz k on o.id_tip=k.id_tip + left join syn_vutilizatori ut on o.id_util_valid=ut.id_util + where o.sters = 0 +/ + +prompt +prompt Creating view DEV_DETALII_COMENZI +prompt ================================= +prompt +create or replace view dev_detalii_comenzi as +select a.id_ordl,a.validat,a.dataoravalid,a.id_tip,a.tip_comanda, +nvl(b.facturat,0) as facturat,b.dataact as datafact,nvl(b.nract,0) as nrfact +from dev_vordl a +left join dev_vordl_facturi b on a.id_lucrare=b.id_lucrare +/ + +prompt +prompt Creating view DEV_ANALIZA_SALARII +prompt ================================= +prompt +create or replace view dev_analiza_salarii as +select a.id_ordl, + a.id_tip, + (case + when pack_sesiune.getAn() * 12 + + pack_sesiune.getLuna() < + pack_sesiune.GET_ANRON() * 12 + + pack_sesiune.GET_LUNARON() then + b.pret + else + (case b.nou + when 0 then + round(b.pret / 10000, 2) + else + b.pret + end) end) as pret, + c.ore, + d.id_mecanic, + e.nume, + e.prenume + from dev_detalii_comenzi a + left join dev_oper b on a.id_ordl = b.id_ordl + left join dev_oper_mecanici c on b.id_oper = c.id_oper + left join dev_mecanici d on c.id_mecanic = d.id_mecanic + left join sal_personal e on d.id_salariat = e.id_salariat + where b.sters = 0 + and ((a.id_tip = 1 and + (a.facturat = 1 and (extract(month from a.datafact) = + pack_sesiune.getluna() and + extract(year from a.datafact) = + pack_sesiune.getan()))) or + (a.id_tip > 1 and + (a.validat = 1 and (extract(month from a.dataoravalid) = + pack_sesiune.getluna() and + extract(year from a.dataoravalid) = + pack_sesiune.getan())))) +/ + +prompt +prompt Creating view DEV_ANALIZA_SALARII_REG +prompt ===================================== +prompt +create or replace view dev_analiza_salarii_reg as +select distinct id_mecanic,nume||' '||prenume as nume, +sum(case when id_tip=1 then ore else 0 end) over (partition by id_mecanic) as ore, +sum(case when id_tip=1 then round(pret*ore,2) else 0 end) over (partition by id_mecanic) as manopera, +sum(case when id_tip!=1 then ore else 0 end) over (partition by id_mecanic) as ore_reg, +sum(case when id_tip!=1 then round(pret*ore,2) else 0 end) over (partition by id_mecanic) as manopera_reg +from dev_analiza_salarii +/ + +prompt +prompt Creating view DEV_DATE_SUPLIMENTARE +prompt =================================== +prompt +create or replace view dev_date_suplimentare as +select a.id_ordl,a.kmint,a.termen,b.asigurator,c.inspector,d.id_partener,d.series,e.masina,f.marca +from dev_ordl a +left join dev_nom_asiguratori b on a.id_asigurator=b.id_asigurator +left join dev_nom_inspectori c on a.id_inspector=c.id_inspector +left join dev_masiniclienti d on a.id_masiniclient=d.id_masiniclient +left join dev_nom_masini e on d.id_masina=e.id_masina +left join dev_nom_marci f on e.id_marca=f.id_marca +where a.sters=0 +/ + +prompt +prompt Creating view DEV_DATE_SUPLIMENTARE_RAP +prompt ======================================= +prompt +create or replace view dev_date_suplimentare_rap as +select a.id_ordl,a.termen,a.kmint, +b.asigurator, +c.inspector, +d.seriem,d.nrinmat,d.series,d.nrachi,d.dataachi, +e.masina, +f.marca, +g.telefon,g.cod_fiscal,g.adresa, +h.denumire as furnizor +from dev_ordl a +left join dev_nom_asiguratori b on a.id_asigurator=b.id_asigurator +left join dev_nom_inspectori c on a.id_inspector=c.id_inspector +left join dev_masiniclienti d on a.id_masiniclient=d.id_masiniclient +left join dev_nom_masini e on d.id_masina=e.id_masina +left join dev_nom_marci f on e.id_marca=f.id_marca +left join nom_parteneri g on d.id_partener=g.id_part +left join dev_nom_furnizorimasini h on d.id_furnizor=h.id_furnizor +/ + +prompt +prompt Creating view DEV_NORMARE_COMENZI +prompt ================================= +prompt +create or replace view dev_normare_comenzi as +select a.id_ordl,a.id_lucrare,a.id_tip,a.datai,a.id_inspector,a.id_asigurator, +nvl(a.validat,0) as validat,a.dataoravalid,a.nrord,a.id_masiniclient, +nvl(b.facturat,0) as facturat,b.dataact as datafact,b.nract as nrfact, +d.nrinmat, +e.nume, +i.denumire as tip_comanda +from dev_comenzi_validate a +left join dev_vordl_facturi b on a.id_lucrare=b.id_lucrare +left join dev_masiniclienti d on a.id_masiniclient=d.id_masiniclient +left join nom_parteneri e on d.id_partener=e.id_part +left join dev_tip_deviz i on a.id_tip=i.id_tip +/ + +prompt +prompt Creating view DEV_FACTURI_ASIG +prompt ============================== +prompt +create or replace view dev_facturi_asig as +select a.nrord,a.datai,a.nume,c.asigurator, + b.nract,b.dataact, + (case + when pack_sesiune.getAn()*12+pack_sesiune.getLuna()>=pack_sesiune.GET_ANRON()*12+pack_sesiune.GET_LUNARON() + then + b.manopera_ron + else + b.manopera_rol end) + as manopera, + (case + when pack_sesiune.getAn()*12+pack_sesiune.getLuna()>=pack_sesiune.GET_ANRON()*12+pack_sesiune.GET_LUNARON() + then + b.materiale_ron + else + b.materiale_rol end) as materiale, + (case + when pack_sesiune.getAn()*12+pack_sesiune.getLuna()>=pack_sesiune.GET_ANRON()*12+pack_sesiune.GET_LUNARON() + then + b.manopera_ron+b.materiale_ron+b.tva_ron + else + b.manopera_rol+b.materiale_rol+b.tva_rol end) + as valctva +from dev_normare_comenzi a +join mv_ordl_sume_act b on a.id_lucrare=b.id_lucrare +left join dev_nom_asiguratori c on a.id_asigurator=c.id_asigurator +where a.id_asigurator<>0 +order by c.asigurator,b.dataact +/ + +prompt +prompt Creating view DEV_FACTURI_CLIENTI +prompt ================================= +prompt +create or replace view dev_facturi_clienti as +select a.nrord,a.datai,d.nume,d.telefon, + b.nract,b.dataact, + (case + when pack_sesiune.getAn()*12+pack_sesiune.getLuna()>=pack_sesiune.GET_ANRON()*12+pack_sesiune.GET_LUNARON() + then b.manopera_ron + else + b.manopera_rol end) + as manopera, + (case + when pack_sesiune.getAn()*12+pack_sesiune.getLuna()>=pack_sesiune.GET_ANRON()*12+pack_sesiune.GET_LUNARON() + then + b.materiale_ron + else + b.materiale_rol end) as materiale, + (case + when pack_sesiune.getAn()*12+pack_sesiune.getLuna()>=pack_sesiune.GET_ANRON()*12+pack_sesiune.GET_LUNARON() + then + b.manopera_ron+b.materiale_ron+b.tva_ron + else + b.manopera_rol+b.materiale_rol+b.tva_rol end) + as valctva +from dev_normare_comenzi a +join mv_ordl_sume_act b on a.id_lucrare=b.id_lucrare +left join dev_masiniclienti c on a.id_masiniclient=c.id_masiniclient +left join nom_parteneri d on c.id_partener=d.id_part +order by b.dataact +/ + +prompt +prompt Creating view DEV_VORDL_MAN +prompt =========================== +prompt +create or replace view dev_vordl_man as +select a.id_ordl, + sum((case + when pack_sesiune.getAn() * 12 + + pack_sesiune.getLuna() >= + pack_sesiune.GET_ANRON() * 12 + + pack_sesiune.GET_LUNARON() then + a.manopera_ron + else + a.manopera_rol + end)) as manopera + from mv_ordl_man a + where a.luni <= pack_sesiune.getluna() + + pack_sesiune.getan() * 12 + group by a.id_ordl +/ + +prompt +prompt Creating view DEV_VORDL_MAT +prompt =========================== +prompt +create or replace view dev_vordl_mat as +select a.id_lucrare, + sum((case + when pack_sesiune.getAn() * 12 + + pack_sesiune.getLuna() >= + pack_sesiune.GET_ANRON() * 12 + + pack_sesiune.GET_LUNARON() then + a.materiale_ron + else + a.materiale_rol + end)) as materiale + from mv_ordl_mat a + where a.luni <= pack_sesiune.getluna() + + pack_sesiune.getan() * 12 + group by a.id_lucrare +/ + +prompt +prompt Creating view DEV_FACTURI_EMISE +prompt =============================== +prompt +create or replace view dev_facturi_emise as +select row_number() over(partition by a.nrord order by a.datai, a.nrord) as nrcrt, + a.dataoravalid,a.datafact,a.validat,a.facturat,e.inspector,f.asigurator,a.id_tip, + a.nrord, + a.datai, + d.nume, + b.nract, + b.dataact, + NVL(a1.manopera,0) as manopera, + NVL(a2.materiale,0) as materiale, + a.nrinmat, + (case + when pack_sesiune.getAn() * 12 + + pack_sesiune.getLuna() >= + pack_sesiune.GET_ANRON() * 12 + + pack_sesiune.GET_LUNARON() then + b.manopera_ron + b.materiale_ron + b.tva_ron + else + b.manopera_rol + b.materiale_rol + b.tva_rol + end) as valctva + from dev_normare_comenzi a + join mv_ordl_sume_act b on a.id_lucrare = b.id_lucrare + left join dev_vordl_man a1 on a.id_ordl = a1.id_ordl + left join dev_vordl_mat a2 on a.id_lucrare = a2.id_lucrare + left join dev_masiniclienti c on a.id_masiniclient = c.id_masiniclient + left join nom_parteneri d on c.id_partener = d.id_part + left join dev_nom_inspectori e on a.id_inspector = e.id_inspector + left join dev_nom_asiguratori f on a.id_asigurator = f.id_asigurator + order by b.dataact +/ + +prompt +prompt Creating view DEV_FACTURI_TOATE +prompt =============================== +prompt +create or replace view dev_facturi_toate as +select a.nrord,a.datai,a.nume,c.asigurator, + b.nract,b.dataact, + (case + when pack_sesiune.getAn()*12+pack_sesiune.getLuna()>=pack_sesiune.GET_ANRON()*12+pack_sesiune.GET_LUNARON() + then + b.manopera_ron + else + b.manopera_rol end) + as manopera, + (case + when pack_sesiune.getAn()*12+pack_sesiune.getLuna()>=pack_sesiune.GET_ANRON()*12+pack_sesiune.GET_LUNARON() + then + b.materiale_ron + else + b.materiale_rol end) as materiale, + (case + when pack_sesiune.getAn()*12+pack_sesiune.getLuna()>=pack_sesiune.GET_ANRON()*12+pack_sesiune.GET_LUNARON() + then + b.manopera_ron+b.materiale_ron+b.tva_ron + else + b.manopera_rol+b.materiale_rol+b.tva_rol end) + as valctva +from dev_normare_comenzi a +join mv_ordl_sume_act b on a.id_lucrare=b.id_lucrare +left join dev_nom_asiguratori c on a.id_asigurator=c.id_asigurator +order by c.asigurator,b.dataact +/ + +prompt +prompt Creating view DEV_VOPER_MECANICI +prompt ================================ +prompt +create or replace view dev_voper_mecanici as +select a.id_opermecanic, + a.id_oper, + a.ore, + a.inactiv, + a.id_mecanic, + c.nume, + c.prenume, + c.marca, + c.id_salariat, + d.sectie + from dev_oper_mecanici a + left join dev_mecanici b on a.id_mecanic = b.id_mecanic + left join sal_personal c on b.id_salariat = c.id_salariat + left join nom_sectii d on b.id_sectie = d.id_sectie + where a.sters = 0 +/ + +prompt +prompt Creating view DEV_VOPER_PRETURI +prompt =============================== +prompt +create or replace view dev_voper_preturi as +select op.timpn, + op.id_ordl, + op.id_oper, + op.dataora, + op.datai, + (case + when pack_sesiune.getAn() * 12 + + pack_sesiune.getLuna() < + pack_sesiune.GET_ANRON() * 12 + + pack_sesiune.GET_LUNARON() then + op.pret + else + (case op.nou + when 0 then + round(op.pret / 10000, 2) + else + op.pret + end) end) as pret, + op.validat, + n.denop + from dev_oper op + left join dev_nom_norme n on op.id_norme = n.id_norme + where op.sters = 0 +/ + +prompt +prompt Creating view DEV_LISTARE_MAN_TOT_COM +prompt ===================================== +prompt +create or replace view dev_listare_man_tot_com as +select sum(d.ore) as ore, + d.id_mecanic, + sum(round(c.pret * d.ore, 2)) as valoare, + d.nume, + d.prenume, + a.nrord, + a.datai, + d.sectie + from dev_comenzi_validate a + left join dev_vordl_facturi b on a.id_lucrare = b.id_lucrare + left join dev_voper_preturi c on a.id_ordl = c.id_ordl + left join dev_voper_mecanici d on c.id_oper = d.id_oper + where (extract(month from a.dataoravalid) = + pack_sesiune.getluna() and + extract(year from a.dataoravalid) = + pack_sesiune.getan() and a.validat=1 and a.id_tip > 1) + or (extract(month from b.dataact) = + pack_sesiune.getluna() and + extract(year from b.dataact) = + pack_sesiune.getan() and a.id_tip = 1 and + b.facturat = 1) + group by a.id_ordl, + a.nrord, + d.id_mecanic, + d.nume, + d.prenume, + a.datai, + d.sectie + order by d.id_mecanic +/ + +prompt +prompt Creating view DEV_LISTARE_MAN_TOT_DESF +prompt ====================================== +prompt +create or replace view dev_listare_man_tot_desf as +select d.id_opermecanic, + d.id_oper, + d.ore, + d.inactiv, + d.id_mecanic, + d.nume, + d.prenume, + d.marca, + d.id_salariat, + d.sectie, + a.id_ordl, + c.pret, + a.datai, + b.nract as nract, + b.dataact as datafact, + c.denop, + c.timpn, + a.nrord + from dev_comenzi_validate a + left join dev_vordl_facturi b on a.id_lucrare = b.id_lucrare + left join dev_voper_preturi c on a.id_ordl = c.id_ordl + left join dev_voper_mecanici d on c.id_oper = d.id_oper + where (extract(month from a.dataoravalid) = + pack_sesiune.getluna() and + extract(year from a.dataoravalid) = + pack_sesiune.getan() and a.validat=1 and a.id_tip > 1) + or (extract(month from b.dataact) = + pack_sesiune.getluna() and + extract(year from b.dataact) = + pack_sesiune.getan() and a.id_tip = 1 and + b.facturat = 1) + order by id_mecanic +/ + +prompt +prompt Creating view DEV_ORDL_FACTURARE +prompt ================================ +prompt +create or replace view dev_ordl_facturare as +select a.id_ordl,a.id_lucrare,a.datai,a.id_masiniclient, +b.nrord, +c.id_partener,c.nrinmat, +d.nume, +e.masina, +f.marca +from dev_ordl a +left join nom_lucrari b on a.id_lucrare=b.id_lucrare +left join dev_masiniclienti c on a.id_masiniclient=c.id_masiniclient +left join nom_parteneri d on c.id_partener=d.id_part +left join dev_nom_masini e on c.id_masina=e.id_masina +left join dev_nom_marci f on e.id_marca=f.id_marca +where a.sters=0 +/ + +prompt +prompt Creating view DEV_VALIDARE_COMENZI +prompt ================================== +prompt +create or replace view dev_validare_comenzi as +select a.id_ordl, + a.id_lucrare, + a.id_masiniclient, + a.id_tip, + a.datai, + nvl(a.validat, 0) as validat, + a.dataoravalid, + a.util_valid, + a.nrord, + nvl(b.manopera, 0) as manopera, + nvl(b1.materiale, 0) as materiale, + nvl(c.facturat, 0) as facturat, + c.dataact as datafact, + nvl(c.nract, 0) as nrfact, + c.valctva, + d.id_partener, + d.nrinmat, + e.nume, + g.asigurator, + h.inspector, + i.denumire as tip_comanda + from dev_comenzi_validate a + left join dev_vordl_man b on a.id_ordl = b.id_ordl + left join dev_vordl_mat b1 on a.id_lucrare = b1.id_lucrare + left join dev_vordl_facturi c on a.id_lucrare = c.id_lucrare + left join dev_masiniclienti d on a.id_masiniclient = d.id_masiniclient + left join nom_parteneri e on d.id_partener = e.id_part + left join dev_nom_asiguratori g on a.id_asigurator = g.id_asigurator + left join dev_nom_inspectori h on a.id_inspector = h.id_inspector + left join dev_tip_deviz i on a.id_tip = i.id_tip + order by a.datai, a.nrord +/ + +prompt +prompt Creating view DEV_VANSAMBLE +prompt =========================== +prompt +create or replace view dev_vansamble as +select a.* from dev_nom_ansamble a where a.sters = 0 +/ + +prompt +prompt Creating view DEV_VASIGURATORI +prompt ============================== +prompt +create or replace view dev_vasiguratori as +select a.* from dev_nom_asiguratori a where a.sters = 0 +/ + +prompt +prompt Creating view DEV_VDELEGATI +prompt =========================== +prompt +create or replace view dev_vdelegati as +select d.*,p.nume,p.cod_fiscal from dev_nom_delegati d left join nom_parteneri p on d.id_partener = p.id_part where d.sters = 0 +/ + +prompt +prompt Creating view DEV_VFURNIZORI +prompt ============================ +prompt +create or replace view dev_vfurnizori as +select f.* from dev_nom_furnizorimasini f where f.sters = 0 +/ + +prompt +prompt Creating view DEV_VINSPECTORI +prompt ============================= +prompt +create or replace view dev_vinspectori as +select i.* from dev_nom_inspectori i where i.sters = 0 +/ + +prompt +prompt Creating view DEV_VMARCI +prompt ======================== +prompt +create or replace view dev_vmarci as +select m.* from dev_nom_marci m where m.sters = 0 +/ + +prompt +prompt Creating view DEV_VMASINI +prompt ========================= +prompt +create or replace view dev_vmasini as +select m.*,s.marca from dev_nom_masini m left join dev_nom_marci s on m.id_marca = s.id_marca where m.sters = 0 +/ + +prompt +prompt Creating view DEV_VMASINICLIENTI +prompt ================================ +prompt +create or replace view dev_vmasiniclienti as +select mc.*,tm.denumire as tip_motor,m.id_marca,fm.denumire as furnizor,mm.marca,m.masina,p.nume as partener + from dev_masiniclienti mc + left join dev_tipuri_motoare tm on mc.id_tipmotor = tm.id_tipmotor + left join dev_nom_furnizorimasini fm on mc.id_furnizor = fm.id_furnizor + left join dev_nom_masini m on mc.id_masina = m.id_masina + left join dev_nom_marci mm on m.id_marca = mm.id_marca + left join nom_parteneri p on mc.id_partener = p.id_part + where mc.sters = 0 +/ + +prompt +prompt Creating view DEV_VMECANICI +prompt =========================== +prompt +create or replace view dev_vmecanici as +select m.*,s.sectie,p.nume,p.prenume,p.marca from dev_mecanici m left join nom_sectii s on m.id_sectie = s.id_sectie left join sal_personal p on m.id_salariat = p.id_salariat where m.sters = 0 +/ + +prompt +prompt Creating view DEV_VNOM_MASINI +prompt ============================= +prompt +create or replace view dev_vnom_masini as +select m.* from dev_nom_masini m where m.sters = 0 +/ + +prompt +prompt Creating view DEV_VNOM_RESP +prompt =========================== +prompt +create or replace view dev_vnom_resp as +select "ID_RESP","NUME","BI","CNPRESP","ALES","STERS" + from dev_nom_resp where sters = 0 +/ + +prompt +prompt Creating view DEV_VNORME +prompt ======================== +prompt +create or replace view dev_vnorme as +select n.*,a.denumire as ansamblu,m.masina,mar.marca from dev_nom_norme n left join dev_nom_ansamble a on n.id_ansamblu = a.id_ansamblu left join dev_nom_masini m on n.id_masina = m.id_masina left join dev_nom_marci mar on m.id_marca = mar.id_marca where n.sters = 0 +/ + +prompt +prompt Creating view DEV_VOPER +prompt ======================= +prompt +create or replace view dev_voper as +select op.timpn, + op.id_ordl, + op.id_oper, + (case + when pack_sesiune.getAn() * 12 + + pack_sesiune.getLuna() >= + extract(year from op.dataora) * 12 + + extract(month from op.dataora) then + op.dataora + else + null + end) as dataora, + op.id_sectie, + op.datai, + (case + when pack_sesiune.getAn() * 12 + + pack_sesiune.getLuna() < + pack_sesiune.GET_ANRON() * 12 + + pack_sesiune.GET_LUNARON() then + op.pret + else + (case op.nou + when 0 then + round(op.pret / 10000, 2) + else + op.pret + end) end) as pret, + (case + when pack_sesiune.getAn() * 12 + + pack_sesiune.getLuna() >= + extract(year from op.dataora) * 12 + + extract(month from op.dataora) then + op.validat + else + 0 + end) as validat, + op.nou, + n.denop, + n.timpn as timp_nom, + n.codop, + a.denumire as ansamblu, + m.masina, + s.sectie, + s.nsectie, + (case + when pack_sesiune.getAn() * 12 + + pack_sesiune.getLuna() >= + extract(year from op.dataora) * 12 + + extract(month from op.dataora) then + ut.utilizator + else + null + end) as util + from dev_oper op + left join dev_nom_norme n on op.id_norme = n.id_norme + left join dev_nom_ansamble a on n.id_ansamblu = a.id_ansamblu + left join dev_nom_masini m on n.id_masina = m.id_masina + left join nom_sectii s on op.id_sectie = s.id_sectie + left join syn_utilizatori ut on op.id_util = ut.id_util + where op.sters = 0 +/ + +prompt +prompt Creating view DEV_VOPER_DETALII_M +prompt ================================= +prompt +create or replace view dev_voper_detalii_m as +select a.id_opermecanic,a.id_oper,a.ore,a.id_mecanic,c.nume,c.prenume from dev_oper_mecanici a +left join dev_mecanici b on a.id_mecanic=b.id_mecanic +left join sal_personal c on b.id_salariat=c.id_salariat +where a.sters=0 +/ + +prompt +prompt Creating view DEV_VOPER_SIMPLU +prompt ============================== +prompt +create or replace view dev_voper_simplu as +select op.timpn, + op.id_ordl, + op.id_oper, + op.dataora, + op.datai, + op.id_sectie, + op.validat, + op.id_norme, + s.sectie, + s.nsectie + from dev_oper op + left join nom_sectii s on op.id_sectie = s.id_sectie + where op.sters = 0 +/ + +prompt +prompt Creating view DEV_VORDL_AVANSURI +prompt ================================ +prompt +create or replace view dev_vordl_avansuri as +select a.id_lucrare, +(case + when a.luna+a.an*12< +pack_sesiune.GET_LUNARON()+pack_sesiune.GET_ANRON()*12 +and +pack_sesiune.getAn()*12+pack_sesiune.getLuna()>= + pack_sesiune.GET_ANRON()*12+pack_sesiune.GET_LUNARON() +then a.suma/10000 +else +a.suma end) as suma,a.scd,a.ascd,a.scc,a.ascc,a.id_partc,a.id_partd,a.id_sectie, +b.nume as partc,c.nume as partd,d.sectie from act a +left join nom_parteneri b on a.id_partc=b.id_part +left join nom_parteneri c on a.id_partd=c.id_part +left join nom_sectii d on a.id_sectie=d.id_sectie +where a.sters=0 and a.id_set in (31001,31002) and a.scd = '4111' +/ + +prompt +prompt Creating view DEV_VPRETURI +prompt ========================== +prompt +create or replace view dev_vpreturi as +select p.*,m.marca,a.asigurator,v.nume_val + from dev_nom_preturi p + left join dev_nom_marci m on p.id_marca = m.id_marca + left join dev_nom_asiguratori a on p.id_asiguratori = a.id_asigurator + left join nom_valute v on p.id_valuta = v.id_valuta + where p.sters = 0 +/ + + +spool off diff --git a/Scripturi_instalare/viewuri_materializate.sql b/Scripturi_instalare/viewuri_materializate.sql new file mode 100644 index 0000000..16fcd92 --- /dev/null +++ b/Scripturi_instalare/viewuri_materializate.sql @@ -0,0 +1,298 @@ +-------------------------------------------------------- +-- View-uri materializate pentru ROAAUTO v 1.4.151 -- +-- Created by marius.atanasiu on 2/2/2006, 9:43:11 AM -- +-------------------------------------------------------- + +spool viewuri_materializate.log + +PROMPT +PROMPT Drop view-uri materializate +PROMPT =================================== +PROMPT +begin + begin + execute immediate 'drop view MV_ORDL_MAT'; + exception + when others then + null; + end; + + begin + execute immediate 'drop view mv_ordl_man'; + exception + when others then + null; + end; + + begin + execute immediate 'drop view mv_act_suma'; + exception + when others then + null; + end; + + begin + execute immediate 'drop view mv_ordl_sume_act'; + exception + when others then + null; + end; + + begin + execute immediate 'drop table mlog$_rul'; + exception + when others then + null; + end; + begin + execute immediate 'drop table mlog$_rul1'; + exception + when others then + null; + end; + begin + execute immediate 'drop materialized view log on RUL'; + exception + when others then + null; + end; + begin + execute immediate 'DROP MATERIALIZED VIEW MV_ORDL_MAT'; + exception + when others then + null; + end; + begin + execute immediate 'DROP TABLE MV_ORDL_MAT'; + exception + when others then + null; + end; + begin + execute immediate 'drop table mlog$_dev_oper'; + exception + when others then + null; + end; + begin + execute immediate 'drop table mlog$_dev_oper1'; + exception + when others then + null; + end; + begin + execute immediate 'drop materialized view log on dev_oper'; + exception + when others then + null; + end; + begin + execute immediate 'drop MATERIALIZED VIEW mv_ordl_man'; + exception + when others then + null; + end; + begin + execute immediate 'drop table mv_ordl_man'; + exception + when others then + null; + end; + begin + execute immediate 'drop table mlog$_act'; + exception + when others then + null; + end; + begin + execute immediate 'drop table mlog$_act1'; + exception + when others then + null; + end; + begin + execute immediate 'drop materialized view log on ACT'; + exception + when others then + null; + end; + begin + execute immediate 'drop MATERIALIZED VIEW mv_ordl_sume_act'; + exception + when others then + null; + end; + begin + execute immediate 'drop table mv_ordl_sume_act'; + exception + when others then + null; + end; + begin + execute immediate 'DROP materialized view MV_ACT_SUMA'; + exception + when others then + null; + end; + begin + execute immediate 'DROP table MV_ACT_SUMA'; + exception + when others then + null; + end; +end; +/ + +PROMPT +PROMPT Creare log view materializat pe act +PROMPT =================================== +PROMPT +CREATE MATERIALIZED VIEW LOG ON act WITH PRIMARY KEY, ROWID, SEQUENCE(id_lucrare,dataact,nract,id_set,scc,scd,luna,an,suma,sters,explicatia,id_sucursala) INCLUDING NEW VALUES +/ + +PROMPT +PROMPT Creare view materializat mv_ordl_sume_act +PROMPT ========================================= +PROMPT +create materialized view MV_ORDL_SUME_ACT + refresh fast on commit + as + select id_lucrare,dataact,nract,id_set,sum(case when scc='704' then (case when luna+an*12<7+2005*12 then round(suma/10000,2) else + suma end) when explicatia like 'DISCOUNT MANOPERA%' and scc<>'4427' then (case when luna+an*12<7+2005*12 then round((-1)*(abs(suma))/10000,2) else (-1)*(abs(suma)) end) else 0 end) as manopera_ron, sum(case when scc in ('707','419') then (case when luna+an*12<7+2005*12 then round(suma/10000,2) else suma end) + when explicatia like 'DISCOUNT MATERIALE%' and scc<>'4427' then (case when luna+an*12<7+2005*12 then round((-1)*(abs(suma))/10000,2) else (-1)*(abs(suma)) end) + else 0 end) as materiale_ron,sum(case when scc='4427' then (case when luna+an*12<7+2005*12 then round(suma/10000,2) + else suma end) else 0 end) as tva_ron,sum(case when scc='704' then (case when luna+an*12<7+2005*12 then suma else 0 end) when explicatia like 'DISCOUNT MANOPERA%' and scc<>'4427' then (case when + luna+an*12<7+2005*12 then (-1)*(abs(suma)) else 0 end) else 0 end) as manopera_rol,sum(case when scc in ('707','419') then (case when luna+an*12<7+2005*12 then suma else 0 + end) when explicatia like 'DISCOUNT MATERIALE%' and scc<>'4427' then (case when luna+an*12<7+2005*12 then (-1)*(abs(suma)) else 0 end) else 0 end) as materiale_rol, + sum(case when scc='4427' then (case when luna+an*12<7+2005*12 then suma else 0 end) else 0 end) as tva_rol,count(*) as cnt, + count(case when scc='704' then (case when luna+an*12<7+2005*12 then round(suma/10000,2) + else suma end) when explicatia like 'DISCOUNT MANOPERA%' and scc<>'4427' then (case when luna+an*12<7+2005*12 then round((-1)*(abs(suma))/10000,2) else (-1)*(abs(suma)) end) + else 0 end) as cnt_manopera_ron,count(case when scc in ('707','419') then (case when luna+an*12<7+2005*12 then round(suma/10000,2) else suma end) + when explicatia like 'DISCOUNT MATERIALE%' and scc<>'4427' then (case when luna+an*12<7+2005*12 then round((-1)*(abs(suma))/10000,2) else (-1)*(abs(suma)) end) + else 0 end) as cnt_materiale_ron,count(case when scc='4427' then (case when luna+an*12<7+2005*12 then round(suma/10000,2) + else suma end) else 0 end) as cnt_tva_ron,count(case when scc='704' then (case when luna+an*12<7+2005*12 then suma else 0 end) + when explicatia like 'DISCOUNT MANOPERA%' and scc<>'4427' then (case when luna+an*12<7+2005*12 then (-1)*(abs(suma)) else 0 end) + else 0 end) as cnt_manopera_rol,count(case when scc in ('707','419') then (case when luna+an*12<7+2005*12 then suma else 0 + end) when explicatia like 'DISCOUNT MATERIALE%' and scc<>'4427' then (case when luna+an*12<7+2005*12 then (-1)*(abs(suma)) else 0 end) + else 0 end) as cnt_materiale_rol,count(case when scc='4427' then (case when luna+an*12<7+2005*12 then suma else 0 end) + else 0 end) as cnt_tva_rol from act where sters=0 and scd in ('4111', '667', '482', '711', '6588') and id_set in (31001, 31002, 31003, 31004, 31005, 31006, 31007, 31011, 31012) group by id_lucrare,dataact,nract,id_set +/ + +PROMPT +PROMPT Creare view materializat MV_ACT_SUMA +PROMPT ========================================= +PROMPT +create materialized view MV_ACT_SUMA + REFRESH FAST ON COMMIT + AS + select an, luna, id_sucursala, + sum(case when TO_NUMBER(SUBSTR(SCD, 1, 1)) between 1 and 7 then suma else 0 end) as sumaD, + sum(case when TO_NUMBER(SUBSTR(SCC, 1, 1)) between 1 and 7 then suma else 0 end) as sumaC, + sum(case when TO_NUMBER(SUBSTR(SCD, 1, 1)) = 8 then suma else 0 end) as sumaD_8, + sum(case when TO_NUMBER(SUBSTR(SCC, 1, 1)) = 8 then suma else 0 end) as sumaC_8, + sum(case when TO_NUMBER(SUBSTR(SCD, 1, 1)) = 9 then suma else 0 end) as sumaD_9, + sum(case when TO_NUMBER(SUBSTR(SCC, 1, 1)) = 9 then suma else 0 end) as sumaC_9, + count(*) as nr, + count(case when TO_NUMBER(SUBSTR(SCD, 1, 1)) between 1 and 7 then suma else 0 end) as nrsumaD, + count(case when TO_NUMBER(SUBSTR(SCC, 1, 1)) between 1 and 7 then suma else 0 end) as nrsumaC, + count(case when TO_NUMBER(SUBSTR(SCD, 1, 1)) = 8 then suma else 0 end) as nrsumaD_8, + count(case when TO_NUMBER(SUBSTR(SCC, 1, 1)) = 8 then suma else 0 end) as nrsumaC_8, + count(case when TO_NUMBER(SUBSTR(SCD, 1, 1)) = 9 then suma else 0 end) as nrsumaD_9, + count(case when TO_NUMBER(SUBSTR(SCC, 1, 1)) = 9 then suma else 0 end) as nrsumaC_9 + from act + where sters = 0 + group by an, luna, id_sucursala +/ + +PROMPT +PROMPT Creare log view materializat pe dev_oper +PROMPT ======================================== +PROMPT +CREATE MATERIALIZED VIEW LOG ON dev_oper WITH PRIMARY KEY,ROWID, SEQUENCE(id_ordl,datai,pret,timpn,nou,sters) INCLUDING NEW VALUES +/ + +PROMPT +PROMPT Creare view materializat mv_ordl_man +PROMPT ==================================== +PROMPT +create materialized view MV_ORDL_MAN refresh fast on commit as + select id_ordl,extract(month from datai) + extract(year from datai) * 12 as luni, + sum(case + when nou = 0 then + round(round(pret / 10000, 2) * timpn, 2) + else + round(pret * timpn, 2) + end) as manopera_ron, + sum(case + when nou = 0 then + round(pret * timpn, 2) + else + 0 + end) as manopera_rol, + count(*) as cnt, + count(case + when nou = 0 then + round(round(pret / 10000, 2) * timpn, 2) + else + round(pret * timpn, 2) + end) as cnt_manopera_ron, + count(case + when nou = 0 then + round(pret * timpn, 2) + else + 0 + end) as cnt_manopera_rol + from dev_oper + where sters = 0 + group by id_ordl, + extract(month from datai) + extract(year from datai) * 12 +/ + +PROMPT +PROMPT Creare log view materializat pe rul +PROMPT =================================== +PROMPT +CREATE MATERIALIZED VIEW LOG ON RUL WITH ROWID, SEQUENCE(AN,LUNA,PRETV,CANTE,ID_LUCRARE,STERS) INCLUDING NEW VALUES; +/ + +PROMPT +PROMPT Creare view materializat mv_ordl_mat +PROMPT ==================================== +PROMPT +CREATE MATERIALIZED VIEW MV_ORDL_MAT +REFRESH FAST ON COMMIT AS +SELECT STERS, + ID_LUCRARE, + LUNA, + AN, + SUM(CASE + WHEN LUNA + AN * 12 < 7 + 2005 * 12 THEN + ROUND(PRETV * CANTE, 2) + ELSE + 0 + END) materiale_rol, + COUNT(CASE + WHEN LUNA + AN * 12 < 7 + 2005 * 12 THEN + ROUND(PRETV * CANTE, 2) + ELSE + 0 + END) cnt_materiale_rol, + SUM(CASE + WHEN LUNA + AN * 12 < 7 + 2005 * 12 THEN + ROUND(ROUND(PRETV / 10000, 2) * CANTE, 2) + ELSE + ROUND(PRETV * CANTE, 2) + END) materiale_ron, + COUNT(CASE + WHEN LUNA + AN * 12 < 7 + 2005 * 12 THEN + ROUND(ROUND(PRETV / 10000, 2) * CANTE, 2) + ELSE + ROUND(PRETV * CANTE, 2) + END) cnt_materiale_ron, + COUNT(*) cnt + FROM RUL + WHERE (STERS = 0) + GROUP BY STERS, ID_LUCRARE, LUNA, AN +/ + +spool off diff --git a/changelog_roaauto.txt b/changelog_roaauto.txt new file mode 100644 index 0000000..74fec09 --- /dev/null +++ b/changelog_roaauto.txt @@ -0,0 +1,1993 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +23/09/2015 +ROAAUTO - 2.2.4 + +:eroare: + S-a corectat o eroare la vizualizare "Facturare > Facturi in luna curenta". +--> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/citeste.txt b/citeste.txt new file mode 100644 index 0000000..e799874 --- /dev/null +++ b/citeste.txt @@ -0,0 +1,23 @@ +==================== +== WISHLIST +==================== +- programari +- avertizari/task-uri atunci cand se depaseste o anumita perioada de la ultima vizita la service sau, daca are mai mult de doua vizite in istoric, sa-i calculez o medie si sa-l avertizez cam cand consider ca ar fi trebuit sa faca 50,000 km - 75,000 km - 100,000 km, etc. + ITP, RCA, CASCO, revizii + revizii obligatorii la x km/nr ani + Sa se genereze automat task-uri atribuite la brand manageri (land rover, hyundai...) + +- Pe baza task-ului salvat anterior sa se creeze comanda rapid +- Cand vine o masina la service sa se sesizeze daca face obiectul unei rechemari la service pentru un defect din fabricatie. + + + + + ==================== + == + ==================== + - sa modific poDateFactura ca sa contina si datele comenzii ( le vede si acum pe formularul de factura prin ocomenzi, dar s-ar putea sa am probleme atunci cand selecteaza mai multe comenzi pentru facturare, etc. ) + - la preturi : daca selecteaza in alta valuta, ar trebui sa tina cont de cursul din ziua facturarii ; sa pot sa adaug pret fara model / asigurator; la normare sa-i selecteze automat pretul pentru asiguratorul si modelul de pe comanda ( sau sa i le arate doar pe acelea ) + - factura ITP : sa nu mai ceara asigurator, inspector, nr. dosar + + - la factura pe mai multe devize : sa-mi arate si numele clientilor si id-urile in caz ca da eroarea "Devizele trebuie sa fie ale aceluiasi client" \ No newline at end of file diff --git a/comun_plugins/plugin_sms_playsms.prg b/comun_plugins/plugin_sms_playsms.prg new file mode 100644 index 0000000..bacfb80 --- /dev/null +++ b/comun_plugins/plugin_sms_playsms.prg @@ -0,0 +1,93 @@ +Local loDate +Local lcReport +loDate = Createobject("empty") +AddProperty(loDate, "to", "0723197939") +AddProperty(loDate, "message", "test " + Ttoc(Datetime())) +AddProperty(loDate, "footer", "@MMM") +lcReport = sendsms(loDate) +Messagebox(m.lcReport) +XMLTOCURSOR() +************************************** +* plugin_sms_playsms +* Apeleaza api playsms Trimite catre playsms +* http://192.168.75.101/html/playsms +*/index.php?app=ws&u=admin&h=eabd6195724d56d08a5a2ca0573451b6&op=pv&to=0723197939&msg=test+only +************************************** +Procedure sendsms + Lparameters toDate + + * toDate: .to, .message, .footer + + #Define HTTPSTATUS_OK 200 + #Define HTTPSTATUS_CREATED 201 + #Define HTTPSTATUS_ACCEPTED 202 + #Define HTTPSTATUS_MULTISTATUS 207 + #Define HTTPSTATUS_BADREQUEST 400 + #Define HTTPSTATUS_UNAUTHORIZED 401 + #Define HTTPSTATUS_FORBIDDEN 403 + #Define HTTPSTATUS_NOTFOUND 404 + #Define HTTPSTATUS_INTERNALSERVERERROR 500 + + Local loHTTP As "Microsoft.XMLHTTP" + Local lcBaseURL, lcFooter, lcMessage, lcPluginPath, lcResponse, lcTo, lcToken, lcURL, lcUser + Local lcUtilsPath, lcwwhttp, lnStatus + lcPluginPath = Addbs(Justpath(Sys(16, 0))) + lcUtilsPath = m.lcPluginPath + 'utils\' +*!* Set Path To (m.lcUtilsPath) Additive +*!* lcwwhttp = m.lcUtilsPath + 'wwhttp.prg' +*!* Do (m.lcwwhttp) + + + lcBaseURL = [http://192.168.75.101/html/playsms] + lcUser = [admin] + lcToken = [eabd6195724d56d08a5a2ca0573451b6] + + lcTo = toDate.To + lcMessage = urlencode(toDate.Message) + lcFooter = urlencode(toDate.Footer) + + lcURL = m.lcBaseURL + [/index.php?app=ws&u=] + m.lcUser + [&h=] + m.lcToken + [&op=pv&to=] + m.lcTo + [&msg=] + m.lcMessage + [&format=xml] + Iif(!Empty(m.lcFooter), [&footer=] + m.lcFooter, []) + + loHTTP = Createobject("Microsoft.XMLHTTP") + loHTTP.Open("GET", m.lcURL, .F.) + loHTTP.Send() + + lnStatus = loHTTP.Status + If m.lnStatus = HTTPSTATUS_OK + lcResponse = loHTTP.responseText + Return lcResponse + Endif +Endproc && sendsms + +Function urlencode + * + * from http://www.tek-tips.com/gviewthread.cfm/lev2/4/lev3/27/pid/184/qid/597112 + * also http://fox.wikis.com/wc.dll?Wiki~VFPPortListener~VFP + * I'm confused by this code. + * I believe it doesn't translate spaces correctly + * + * a proper definition is in: http://www.ietf.org/rfc/rfc2396.txt + * starting about half way down page 5 + * unreserved characters include all alphas, all digits and the following unreserved marks + * mark = "-" | "_" | "." | "!" | "~" | "*" | "'" | "(" | ")" + * + Lparameter pcinstr + * ' encode Percent signs + * ' Double Quotes + * ' CarriageReturn / LineFeeds + Local lcout, lni + lcout = '' + For lni = 1 To Len(pcinstr) + lcch = Substr(pcinstr, lni, 1) + Do Case + Case Isalpha(lcch) Or Isdigit(lcch) Or Inlist(lcch, "-", "_", ".", "!", "~", "*", "'", "(", ")") + * do nothing + Case lcch = " " + lcch = "+" + Otherwise + lcch = '%' + Right( Transform(Asc(lcch), '@0'), 2 ) + Endcase + lcout = lcout + lcch + Endfor + Return lcout +Endfunc && UrlEncode diff --git a/comun_plugins/utils/wconnect.h b/comun_plugins/utils/wconnect.h new file mode 100644 index 0000000..68cb01b --- /dev/null +++ b/comun_plugins/utils/wconnect.h @@ -0,0 +1,263 @@ +************************************************************************ +* WCONNECT Header File +********************** +*** Author: Rick Strahl +*** (c) West Wind Technologies, 1995-2002 +*** Contact: http://www.west-wind.com/ +*** Function: Global DEFINEs used by West Wind Web Connection. +*** +*** IMPORTANT: Any changes made here or in WCONNECT_OVERRIDE.H +*** require a full recompile of all files that use +*** this header file! +************************************************************************ + +#DEFINE WWVERSION "Version 4.20" +#DEFINE WWVERSIONDATE "May 6, 2002" + +*** DEBUGMODE effects how errors are handled. +*** If .T. errors are not handled and the server stops on errors. +*** If .F. the Web Connection error handlers kick in and +*** provide error pages and logging +#DEFINE DEBUGMODE .T. + +*** Use this flag to handle different configurations +*** You can set up conditional DEFINES for applications +*** to easily switch configurations. (Optional - not used by framework) +*** 1 - Development Server +*** 2 - Live Server +#DEFINE LOCALSITE 1 + +*** When .T. server runs as a Top Level while running file based +#DEFINE SERVER_IN_DESKTOP .F. + +*** Carriage Return/Line Break +#DEFINE CR CHR(13)+CHR(10) && DO NOT USE ANY MORE +#DEFINE CRLF CHR(13)+CHR(10) + +*** Customizable default HTTP Header +#DEFINE DEFAULT_CONTENTTYPE_HEADER ; + "HTTP/1.1 200 OK" + CRLF + ; + "Content-type: text/html" + CRLF + +#DEFINE DEFAULT_HTTP_VERSION "1.1" + +*** Post boundary used for posting multipart vars +#DEFINE POST_BOUNDARY CHR(13)+CHR(10)+ "#@$ FORM VARIABLES $@#" + CHR(13)+CHR(10) +#DEFINE MULTIPART_BOUNDARY "-----------------------------7cf2a327f01ae" + +*** SQL Connect String to database containing +*** wwSession and RequestLog files +#DEFINE WWC_USE_SQL_SYSTEMFILES .F. + +*** Determines whether the store runs with SQL Server Tables +#DEFINE WWSTORE_USE_SQL_TABLES .F. +#DEFINE WWMSGBOARD_USE_SQL_TABLES .F. + +*** Visual FoxPro Version Number Macro +#DEFINE wwVFPVERSION VAL(SUBSTR(Version(),ATC("FoxPro",VERSION())+7,2)) + +*** Determines whether TEMPLATE pages are cached (ExpandTemplate calls) +*** Note: This value specifies how often the file is checked for +*** a newer version in seconds. 0 means - don't cache. +#DEFINE WWC_CACHE_TEMPLATES 0 + +*** Maximum String size for the wwResponseString class +#DEFINE MAX_STRINGSIZE 8000 + +*** Maximum number of cells that ShowCursor generates +*** before reverting to

 list
+#DEFINE MAX_TABLE_CELLS 			15000
+
+*** Special 'NULL' String to differentiate none from empty strings
+#DEFINE WWC_NULLSTRING "*#*"
+
+*** Defines the location of the Web Connection framework
+*** the default is the current directory
+#DEFINE WWC_FRAMEWORK_PATH			".\"
+
+*** XML Size Id used for Memo Fields to differentiate memos from strings
+*** This value is compatible with ADO's usage
+#DEFINE XML_SCHEMA_MEMOSIZE			2147483647
+#DEFINE XML_XMLDOM_PROGID			   "MSXML2.DOMDocument"
+**"MSXML2.DOMDocument.4.0"
+
+*** Determines whether wwXML::XMLTOCURSOR tries to use
+*** VFP 7's XMLTOCURSOR. NOTE: Requires SP1!!!!
+*** This can drastically improve performance for large data sets
+#DEFINE WWXML_USE_VFP_XMLTOCURSOR   .F.
+
+*** Class Names - These classes are defined here and used in the code
+***               so if you subclass an essential class you can change
+***               the class used here and automatically have the framework
+***               inherit from your subclass
+#DEFINE WWC_SERVER				wwServer
+#DEFINE WWC_SERVERFORM 			wwServerForm
+#DEFINE WWC_SERVERFORM_VFPFRAME wwServerFormVFPFrame
+
+#DEFINE WWC_PROCESS         	wwProcess
+#DEFINE WWC_WEBSERVICE			wwWebService
+
+#DEFINE WWC_SESSION 			   wwSession
+#DEFINE WWC_SQLSESSION 			wwSessionSQL
+
+#DEFINE WWC_REQUEST				wwRequest
+#DEFINE WWC_REQUESTASP			wwASPRequest
+
+#DEFINE WWC_RESPONSE			   wwResponse
+#DEFINE WWC_RESPONSEFILE    	wwResponseFile
+#DEFINE WWC_RESPONSESTRING		wwResponseStringNoBuffer
+#DEFINE WWC_RESPONSEASP			wwASPResponse
+
+#DEFINE WWC_WWDHTMLFORM       wwDhtmlForm
+#DEFINE WWC_WWDHTMLCONTROL    wwDhtmlControl            
+
+#DEFINE WWC_HTTPHEADER			wwHTTPHeader
+
+#DEFINE WWC_WWEVAL 				wwEval
+#DEFINE WWC_WWVFPSCRIPT     	wwVFPScript
+#DEFINE WWC_WWPDF				   wwPDF50
+#DEFINE WWC_WWSOAP				wwSOAP
+
+#DEFINE WWC_WWBUSINESS			wwBusiness
+
+*** Class Include flags - Use these to make the install lighter   -  New 07/05/97
+#DEFINE WWC_LOAD_WWSESSION 				.T.
+#DEFINE WWC_LOAD_WWBANNER 					.T.
+#DEFINE WWC_LOAD_WWSHOWCURSOR          .T.
+#DEFINE WWC_LOAD_WWDBFPOPUP 				.T.
+#DEFINE WWC_LOAD_WWIPSTUFF 			   .T.
+#DEFINE WWC_LOAD_WWHTTP                .T.
+#DEFINE WWC_LOAD_WWBUSINESS            .T.
+#DEFINE WWC_LOAD_WWSQL      		      .T.
+#DEFINE WWC_LOAD_WWHTTPSQL             .T.
+#DEFINE WWC_LOAD_WWVFPSCRIPT 				.T.
+#DEFINE WWC_LOAD_WWPDF						.T.
+#DEFINE WWC_LOAD_WWXML						.T.  && Don't change! Required!
+#DEFINE WWC_LOAD_WWMSMQ						.F.
+#DEFINE WWC_LOAD_WWSOAP						.T.
+#DEFINE WWC_LOAD_DYNAMICHTML_FORMRENDERING  .T.
+
+*** VERSION CONSTANTS
+#DEFINE SHAREWARE 		.F.
+#DEFINE WWC_DEMO		.T.
+#DEFINE SWTIMEOUT 		1800
+#DEFINE HTMLCLASSONLY 	.F.
+
+#DEFINE SHOWSQLERRORS 	   .F.
+#DEFINE FOXISAPI 		   .F.
+#DEFINE VISUALWEBBUILDER   .F.
+
+*** COMPATIBILITY CONSTANTS
+*** Turn on for backwards compatibility
+*** As features are removed they are bracketed in this flag.
+#DEFINE WWC_COMPATIBILITY    .F.
+
+*** Use old Style button in Form Rendering
+*** All buttons are rendered with the same name if .t.
+*** END COMPATIBILITY CONSTANTS
+
+*** Images in forms are pathed relative to the Web request
+*** and must be located in the directory specified here
+#DEFINE WWFORM_IMAGEPATH "formimages/"
+#DEFINE WWFORM_USEOLD_BUTTONSTYLE   .F.
+
+*** wwList ActiveX Control settings - Changed 9/2/2000
+#DEFINE WWLIST_USEOLDGRID .F.
+#DEFINE WWLIST_CLASSID "36E500EB-8219-11D1-A398-00600889F23B"
+#DEFINE WWLIST_CODEBASE "wwCTLS.cab"
+
+#DEFINE LISTVIEW_CLASSID "BDD1F04B-858B-11D1-B16A-00C0F0283628"
+#DEFINE LISTVIEW_CODEBASE "http://activex.microsoft.com/controls/vb6/MSComCtl.cab"
+
+*** General WinINET Constants
+#DEFINE INTERNET_OPEN_TYPE_PRECONFIG    		0
+#DEFINE INTERNET_OPEN_TYPE_DIRECT       		1
+#DEFINE INTERNET_OPEN_TYPE_PROXY             	3
+
+#DEFINE INTERNET_OPTION_CONNECT_TIMEOUT         2
+#DEFINE INTERNET_OPTION_CONNECT_RETRIES         3
+#DEFINE INTERNET_OPTION_SEND_TIMEOUT       		5
+#DEFINE INTERNET_OPTION_RECEIVE_TIMEOUT    		6
+#DEFINE INTERNET_OPTION_DATA_SEND_TIMEOUT       5
+#DEFINE INTERNET_OPTION_DATA_RECEIVE_TIMEOUT    6
+#DEFINE INTERNET_OPTION_LISTEN_TIMEOUT          11
+
+#DEFINE INTERNET_SERVICE_FTP				    1
+#DEFINE INTERNET_DEFAULT_FTP_PORT				21
+
+#DEFINE ERROR_INTERNET_EXTENDED_ERROR           12003
+
+*** WinInet Service Flags
+#DEFINE INTERNET_SERVICE_HTTP         			3
+#DEFINE INTERNET_DEFAULT_HTTP_PORT      		80
+#DEFINE INTERNET_DEFAULT_HTTPS_PORT   		  	443
+
+#DEFINE INTERNET_FLAG_RELOAD            		2147483648
+#DEFINE INTERNET_FLAG_SECURE            		8388608
+#define INTERNET_FLAG_KEEP_CONNECTION           0x00400000  
+
+#DEFINE HTTP_STATUS_PROXY_AUTH_REQ           	407 
+#define HTTP_QUERY_STATUS_CODE                  19  
+#define HTTP_QUERY_FLAG_NUMBER                  0x20000000
+#DEFINE HTTP_QUERY_RAW_HEADERS_CRLF          	22  
+
+#define HTTP_QUERY_STATUS_CODE                  19  
+#define HTTP_QUERY_STATUS_TEXT                  20  
+
+#DEFINE FTP_TRANSFER_TYPE_ASCII     			1
+#DEFINE FTP_TRANSFER_TYPE_BINARY    			2
+
+#DEFINE INTERNET_FLAG_IGNORE_CERT_DATE_INVALID  0x00002000
+
+*** Win32 API Constants
+#DEFINE ERROR_SUCCESS               			0
+
+*** Access Flags
+#DEFINE GENERIC_READ                     		0x80000000
+#DEFINE GENERIC_WRITE                    		0x40000000
+#DEFINE GENERIC_EXECUTE                  		0x20000000
+#DEFINE GENERIC_ALL                      		0x10000000
+
+*** File Attribute Flags
+#DEFINE FILE_ATTRIBUTE_NORMAL               	0x00000080
+#DEFINE FILE_ATTRIBUTE_READONLY             	0x00000001
+#DEFINE FILE_ATTRIBUTE_HIDDEN               	0x00000002
+#DEFINE FILE_ATTRIBUTE_SYSTEM               	0x00000004
+
+*** Values for FormatMessage API
+#DEFINE FORMAT_MESSAGE_FROM_SYSTEM     			4096
+#DEFINE FORMAT_MESSAGE_FROM_HMODULE    			2048
+
+*** Registry roots
+#DEFINE HKEY_CLASSES_ROOT           -2147483648  && (( HKEY ) 0x80000000 )
+#DEFINE HKEY_CURRENT_USER           -2147483647  && (( HKEY ) 0x80000001 )
+#DEFINE HKEY_LOCAL_MACHINE          -2147483646  && (( HKEY ) 0x80000002 )
+#DEFINE HKEY_USERS                  -2147483645  && (( HKEY ) 0x80000003 )
+
+*** Registry Value types
+#DEFINE REG_NONE					0    && Undefined Type (default)
+#DEFINE REG_SZ						1	 && Regular Null Terminated String
+#DEFINE REG_BINARY				3    && ??? (unimplemented)
+#DEFINE REG_DWORD					4    && Long Integer value
+#DEFINE MULTI_SZ					7	 && Multiple Null Term Strings (not implemented)
+
+*** Generic File Access Rights for NT ACLs
+#define  FILERIGHTS_READ         1179785
+#define 	FILERIGHTS_READEXECUTE	1179817
+#define 	FILERIGHTS_CHANGE			1245631
+#define	FILERIGHTS_FULL			2032127
+
+
+**** CUSTOMIZE AND OVERRIDE SETTINGS INDEPENDENTLY
+**** OF THE WC INSTALLATION
+#IF FILE("WCONNECT_OVERRIDE.H")
+	#INCLUDE WCONNECT_OVERRIDE.H
+#ENDIF
+
+*!*  WCONNECT_OVERRIDE.H would contain (for example):
+*!*			#UNDEFINE DEBUGMODE
+*!*         #DEFINE DEBUGMODE .T.
+
+*!*			#UNDEFINE SERVER_IN_DESKTOP 
+*!*         #DEFINE SERVER_IN_DESKTOP .T.
+
diff --git a/comun_plugins/utils/wwHttp.PRG b/comun_plugins/utils/wwHttp.PRG
new file mode 100644
index 0000000..75c5b1b
--- /dev/null
+++ b/comun_plugins/utils/wwHttp.PRG
@@ -0,0 +1,1505 @@
+#INCLUDE "wconnect.h"
+
+*** Load Library
+SET PROCEDURE TO wwHTTP ADDIT
+
+*** Load Dependencies
+SET PROCEDURE TO wwUtils ADDIT
+
+*************************************************************
+DEFINE CLASS wwHTTP AS Custom 
+*************************************************************
+*: Author: Rick Strahl
+*:         (c) West Wind Technologies, 2000
+*:Contact: http://www.west-wind.com
+*************************************************************
+#IF .F.
+*:Help Documentation
+*:Topic:
+Class wwHTTP
+
+*:Description:
+A standalone HTTP client library. Same HTTP interfaces
+as wwIPStuff, but provided here for lighter environment.
+
+*:Example:
+
+*:Remarks:
+Requires wwIPStuff.dll for URLEncoding and Decoding of 
+strings larger than 80 characters.
+
+*:SeeAlso:
+
+*:ENDHELP
+#ENDIF
+**************************************************************
+PROTECTED cdllpath
+cdllpath = ""
+
+*-- Last Error Message Text for the last operation. Implemented only for SMTP and HTTP operations.
+cerrormsg = ""
+
+*-- Password to log on to server (applies to FTP and HTTP)
+cpassword = ""
+
+*-- Username for log in operations (FTP and HTTP).
+cusername = ""
+
+*-- Determines whether SSL is used
+lsecurelink = .F.
+
+*-- Connection timeout for Connection, Send and Read operations
+*-- if any take longer than the number of seconds here operation will abort
+nconnecttimeout = 5000
+
+PROTECTED hIPSession, hhttpsession
+hhttpsession = 0
+hipsession = 0
+
+*-- The last error code.
+nerror = 0
+
+*-- Allows to specify how the connection is opened: 1 - Direct*, 3 - Proxy (IE 4 and later) and 0 - PreConfig (using IE settings)
+nhttpconnecttype = 1
+
+*-- HTTP Server Address. Format: www.west-wind.com, or 111.111.111.111
+cserver = ""
+
+*-- HTTP Link to visit on a site. Site relative URL. Example: /default.asp, /, /wconnect.dll?wwDemo~TestPage
+clink = ""
+
+*-- The port to use for HTTP Connections. If the default value of 0 is used, the HTTP and HTTPS default ports (80 and 443) are used.
+nhttpport = 0
+
+*-- Size of the download HTTP buffer used while downloading dynamically sized requests with HTTPGetEx. This is the size of chunks that will be pulled at a time and also determines how often OnHTTPBufferUpdate is called.
+nhttpworkbuffersize = 4096
+
+*-- This property is set when calling HTTPGetEx and contains the entire HTTP header of a request
+chttpheaders = ""
+
+cUserAgent = "West Wind Internet Protocols 4.20"
+
+*-- Flag that can be set in OnHTTPBufferUpdate to allow cancellation of the current HTTP download
+lhttpcanceldownload = .F.
+
+*-- HTTP Post mode determines how requests are posted to the server. 1 - Form URLEncoded (default)  2 - Multipart forms.  This property must be set prior to calling AddPostKey and HTTPGetEx
+nhttppostmode = 1
+
+*** The POST buffer used internally 
+cPostBuffer = ""
+
+*-- Version of the wwIPStuff library. This value should match the DLL Version number.
+cversion = "4.10"
+
+*-- String that specifies the name or IP address of the proxy server and its port.
+chttpproxyname = ""
+
+*-- Address of a string variable that contains an optional list of host names or IP addresses, or both, that should not be routed through the proxy
+chttpproxybypass = ""
+
+*-- Proxy Authentication info (make sure you use nHTTPConnectType=3)
+chttpProxyUserName = ""
+chttpProxyPassword = ""
+
+*-- Optional flags used for InternetOpen calls.
+nserviceflags = 0
+nHttpServiceFlags = 0
+
+************************************************************************
+* wwHTTP :: Init
+*********************************
+***  Function: Loads the DLL
+***      Pass: lcPath  -  Path where to find the DLL. If "" is used
+***                       SYSTEM path or local is assumed. Path must
+***                       be terminated with a trailing backslash
+************************************************************************
+FUNCTION INIT
+LPARAMETER lcPath
+
+#IF .F.
+   WAIT WINDOW NOWAIT ;
+      "Welcome to West Wind Internet Protocols..." + CHR(13) + ;
+      "This is a shareware copy of wwHTTP." + CHR(13)+ CHR(13) +;
+      "Please register your copy."
+#ENDIF
+
+lcPath=IIF(VARTYPE(lcPath)="C",lcPath,"")
+
+THIS.cdllpath=lcPath+"wwIPStuff.dll"
+
+DECLARE INTEGER GetLastError;
+   IN WIN32API
+
+DO PATH WITH lcPath
+RETURN
+
+
+
+************************************************************************
+* wwHTTP :: AddPostKey
+*********************************
+***  Function: Adds POST variables to the HTTP request
+***    Assume: depends on nHTTPPostMode setting
+***      Pass: 
+***    Return:
+************************************************************************
+FUNCTION AddPostKey
+LPARAMETERS tcKey, tcValue, llFileName
+
+LOCAL lcOldAlias
+tcKey=IIF(VARTYPE(tcKey)="C",tcKey,"")
+tcValue=IIF(VARTYPE(tcValue)="C",tcValue,"")
+
+lcOldAlias=ALIAS()
+
+IF tcKey="RESET" OR PCOUNT() = 0
+   THIS.cPostBuffer  = ""
+   RETURN
+ENDIF
+
+IF !EMPTY(tcKey)
+   *** Regular URLEncoded format
+   * THIS.cPostBuffer= && No good for buffers over 1meg
+   DO CASE
+    CASE THIS.nhttppostmode = 1
+         THIS.cPostBuffer = THIS.cPostBuffer + tcKey +;
+            "="+URLEncode(tcValue)+ "&"
+    OTHERWISE
+      *** Multi-part formvars and file
+
+      *** Check for File Flag -  HTTP File Upload - Second parm is filename
+      IF llFileName
+         THIS.cPostBuffer = THIS.cPostBuffer + ;
+            "--" + MULTIPART_BOUNDARY + CR + ;
+            [Content-Disposition: form-data; name="]+tcKey+[" filename="] + tcValue + ["]+CR+CR+;
+            FILETOSTR(tcValue) + CR
+      ELSE
+         THIS.cPostBuffer = THIS.cPostBuffer + ;
+            "--" + MULTIPART_BOUNDARY + CR + ;
+            [Content-Disposition: form-data; name="]+tcKey+["]+CR+CR+;
+            tcValue+CR
+      ENDIF
+   ENDCASE
+ELSE
+   *** Raw non-encoded post - Add "-" to buffer to
+   *** allow binary data to be posted without truncation
+   THIS.cPostBuffer = THIS.cPostBuffer + tcValue
+ENDIF
+
+ENDFUNC
+
+
+
+
+********************************************************
+* wwHTTP :: HTTPConnect
+*********************************
+***  Function: Connect to an HTTP server.
+***    Assume: Sets two handle values in this class Each
+***            instance of this class can only manage
+***            one HTTP session at a time. Use this low
+***            level function for quick repeated access
+***            to HTTP pages.
+***      Pass: lcServer   - Server name
+***            lcUsername - Optional Username
+***            lcPassword - Optional Password
+***            llHTTPS    - .T. for secure connections
+***    Return: 0 on success or WinAPI Errorcode
+********************************************************
+FUNCTION HTTPConnect
+LPARAMETER lcServer, lcUserName, lcPassword, llHTTPS
+LOCAL lhIP, lhHTTP, lnError, lnHTTPPort
+
+lcServer=TRIM(IIF(!EMPTY(lcServer),lcServer,THIS.cserver))
+lcUserName=TRIM(IIF(!EMPTY(lcUserName),lcUserName,THIS.cusername))
+lcPassword=TRIM(IIF(!EMPTY(lcPassword),lcPassword,THIS.cpassword))
+
+*** Assign Default Ports
+IF THIS.nhttpport = 0
+   lnHTTPPort = IIF(llHTTPS or THIS.lSecureLink,;
+                    INTERNET_DEFAULT_HTTPS_PORT,;
+                    INTERNET_DEFAULT_HTTP_PORT)
+ELSE
+   lnHTTPPort = THIS.nhttpport
+ENDIF
+
+THIS.lsecurelink = llHTTPS OR THIS.lsecurelink
+
+THIS.cserver = lcServer
+
+THIS.nerror=0
+THIS.cerrormsg=""
+
+DECLARE INTEGER InternetCloseHandle ;
+   IN WinInet.DLL ;
+   INTEGER
+
+DECLARE INTEGER GetLastError;
+   IN WIN32API
+
+DECLARE INTEGER InternetOpen ;
+   IN WININET.DLL ;
+   STRING,;
+   INTEGER,;
+   STRING, STRING, INTEGER
+
+*** Force to Proxy Operation
+IF !EMPTY(THIS.cHttpProxyName)
+   THIS.nHTTPConnectType = 3  && Proxy
+ENDIF
+
+hInetConnection=;
+   InternetOpen(THIS.cUserAgent,;
+   THIS.nhttpconnecttype,;
+   THIS.chttpproxyname,THIS.chttpproxybypass,0)
+
+IF hInetConnection = 0
+   THIS.nerror=GetLastError()
+   THIS.cerrormsg=THIS.getsystemerrormsg(THIS.nerror)
+   RETURN THIS.nerror
+ENDIF
+
+THIS.hipsession=hInetConnection
+
+DECLARE INTEGER InternetConnect ;
+   IN WININET.DLL ;
+   INTEGER hIPHandle,;
+   STRING lpzServer,;
+   INTEGER dwPort, ;
+   STRING lpzUserName,;
+   STRING lpzPassword,;
+   INTEGER dwServiceFlags,;
+   INTEGER dwFlags,;
+   INTEGER dwReserved
+
+
+lhHTTPSession=;
+   InternetConnect(hInetConnection,;
+   lcServer,;
+   lnHTTPPort,;
+   lcUserName,;
+   lcPassword,;
+   INTERNET_SERVICE_HTTP,;
+   THIS.nserviceflags,0)
+
+
+IF (lhHTTPSession = 0)
+   =InternetCloseHandle(hInetConnection)
+   THIS.nerror = GetLastError()
+   THIS.cerrormsg = THIS.getsystemerrormsg()
+   RETURN THIS.nerror
+ENDIF
+
+THIS.hhttpsession = lhHTTPSession
+
+RETURN 0
+
+
+********************************************************
+* wwHTTP :: HTTPClose
+*********************************
+***  Function: Closes an HTTP Session.
+***    Return: nothing
+********************************************************
+FUNCTION httpclose
+
+DECLARE INTEGER InternetCloseHandle ;
+   IN WININET.DLL ;
+   INTEGER hIPSession
+
+*** Always clear the POST buffer
+THIS.cPostBuffer = ""
+
+IF THIS.hHTTPSession # 0
+  InternetCloseHandle(THIS.hhttpsession)
+  THIS.hhttpsession=0
+ENDIF
+IF THIS.hipSession # 0
+  InternetCloseHandle(THIS.hipsession)
+  THIS.hipsession=0
+ENDIF
+
+ENDFUNC
+
+************************************************************************
+* wwHTTP :: HTTPGet
+****************************************
+***  Function:
+***    Assume:
+***      Pass:
+***    Return:
+************************************************************************
+FUNCTION HTTPGet()
+LPARAMETERS lcUrl, lcUserName, lcPassword
+LOCAL lnError, lnSize, lcBuffer, szHead, loUrl, llHTTPS, lnResult,;
+   hInetConnection, hHTTPResult
+
+THIS.nerror = 0
+THIS.cerrormsg = ""
+
+IF VARTYPE(lcUserName) = "N"
+   tnBufferSize=lcUserName
+   lcUserName = ""
+   lcPassword = ""
+ELSE
+   tnBufferSize = 0
+   lcUserName=IIF(EMPTY(lcUserName),"",lcUserName)
+   lcPassword=IIF(EMPTY(lcPassword),"",lcPassword)
+ENDIF
+
+
+loUrl = THIS.InternetCrackUrl(lcUrl)
+IF ISNULL(loUrl)
+   THIS.nError = -1
+   THIS.cerrormsg = "Invalid URL passed."
+   RETURN ""
+ENDIF
+
+llHTTPS = IIF(LOWER(loUrl.cProtocol)="https",.T.,.F.)
+THIS.nHttpPort=VAL(loUrl.cPort)
+
+lnResult = THIS.HTTPConnect(loUrl.cserver,lcUserName,lcPassword,llHTTPS)
+IF lnResult # 0
+   RETURN ""
+ENDIF
+
+IF tnBufferSize # 0
+   lcData=SPACE(tnBufferSize)
+   lnSize=tnBufferSize
+ELSE
+   lcData = ""
+   lnSize = 0
+ENDIF
+
+
+lnResult = THIS.HTTPGetEx(loUrl.cPath + loUrl.cQueryString,@lcData,@lnSize)
+
+THIS.HTTPClose()
+
+IF lnResult # 0
+   THIS.cerrormsg = THIS.cerrormsg
+   RETURN ""
+ENDIF
+
+RETURN lcData
+ENDFUNC
+
+
+********************************************************
+* wwHTTP :: HTTPGetEx
+*********************************
+***  Function: Retrieves an HTTP request from the
+***            network and returns a string. Read an
+***            HTML or data file across the net.
+***    Assume: Blocking call - waits for completion
+***            before returning. Use AddPostKey
+***            to post data to server
+***            Must call HTTPConnect/HTTPClose to
+***            manage connection to Server.
+***      Pass: tcURL        - URL to retrieve
+***            tcBuffer     - HTTP result (by Reference)
+***            tnBufferSize - Size of the buffer (ref)
+***            tcHeaders    - HTTP Headers sent from
+***                           client request. Separate
+***                           key:value pairs with CR
+***            tcFileName   - Optional filename to save
+***                           content to to avoid keeping
+***                           the entire content in memory
+***    Return: WinAPI Error Code (check THIS.cErrorMsg)
+*******************************************************
+FUNCTION HTTPGetEx
+LPARAMETERS tcPage, tcBuffer, tnBufferSize, tcHeaders, tcFileName
+LOCAL hHTTPResult, lcOldAlias, lhFile
+
+tcPage=IIF(EMPTY(tcPage),THIS.clink,tcPage)
+tnBufferSize=IIF(VARTYPE(tnBufferSize)="N",;
+   tnBufferSize,LEN(tcPage))
+
+lcOldAlias=ALIAS()
+
+THIS.lhttpcanceldownload = .F.
+
+THIS.clink = tcPage
+
+IF !EMPTY(THIS.cPostBuffer)
+   IF THIS.nHTTPPostMode=1 AND RIGHT(THIS.cPostBuffer,1) = "&"
+      THIS.cPostbuffer = LEFT(THIS.cPostbuffer,LEN(THIS.cPostBuffer)-1)
+   ENDIF
+   tnPostSize=LEN(THIS.cPostBuffer)
+   lcPostBuffer= IIF(tnPostSize > 0,THIS.cPostBuffer,NULL)
+ELSE
+   tnPostSize=0
+   lcPostBuffer=NULL
+ENDIF
+
+
+THIS.nerror=0
+THIS.cerrormsg=""
+
+DECLARE INTEGER HttpOpenRequest ;
+   IN WININET.DLL ;
+   INTEGER hHTTPHandle,;
+   STRING lpzReqMethod,;
+   STRING lpzPage,;
+   STRING lpzVersion,;
+   STRING lpzReferer,;
+   STRING lpzAcceptTypes,;
+   INTEGER dwFlags,;
+   INTEGER dwContextw
+
+*** Keep alive must be used for Proxies
+IF !EMPTY(THIS.cHTTPProxyName) OR this.nHTTPConnectType = 3
+   THIS.nHTTPServiceFlags = THIS.nHTTPServiceFlags + INTERNET_FLAG_KEEP_CONNECTION 
+ENDIF
+
+hHTTPResult=HttpOpenRequest(THIS.hhttpsession,;
+   IIF( tnPostSize > 0, "POST","GET"),;
+   tcPage,;
+   NULL,NULL,NULL,;
+   INTERNET_FLAG_RELOAD + ;
+   IIF(THIS.lsecurelink,INTERNET_FLAG_SECURE,0) + ;
+   this.nHTTPServiceFlags,0) 
+
+
+IF (hHTTPResult = 0)
+   THIS.nerror=GetLastError()
+   THIS.cerrormsg=THIS.getsystemerrormsg()
+   RETURN THIS.nerror
+ENDIF
+
+THIS.wininetsettimeout(THIS.nConnectTimeOut,hHTTPResult)
+
+THIS.hhttpsession=hHTTPResult
+
+THIS.OnHttpPostConnect(hHTTPResult)
+
+
+DECLARE INTEGER HttpSendRequest    ;
+   IN WININET.DLL ;
+   INTEGER hHTTPHandle,;
+   STRING lpzHeaders,;
+   INTEGER cbHeaders,;
+   STRING lpzPost,;
+   INTEGER cbPost
+
+IF tnPostSize > 0
+   DO CASE
+      CASE THIS.nhttppostmode = 1
+         tcHeaders = "Content-Type: application/x-www-form-urlencoded"  + CRLF +;
+            IIF(!EMPTY(tcHeaders),CRLF+tcHeaders,"")
+      CASE THIS.nhttppostmode = 2
+         tcHeaders = "Content-Type: multipart/form-data; boundary=" + MULTIPART_BOUNDARY + CRLF + CRLF +;
+            IIF(EMPTY(tcHeaders),"",tcHeaders)
+
+         *** NOTE: extra dashes required to simulate browser operation!
+         lcPostBuffer = lcPostBuffer + "--" + MULTIPART_BOUNDARY + CR
+         tnPostSize=LEN(lcPostBuffer)
+      CASE THIS.nhttppostmode = 4  && XML
+         tcHeaders="Content-Type: text/xml" + CRLF +;
+            IIF(EMPTY(tcHeaders),"",tcHeaders)
+   ENDCASE
+*   tcHeaders = tcHeaders + "Content-Length: " + TRANSFORM(tnPostSize) + CRLF
+ELSE
+   tcHeaders =  IIF(!EMPTY(tcHeaders),tcHeaders,"")
+ENDIF
+
+IF !EMPTY(THIS.cHTTPProxyUserName)
+  IF !THIS.SetProxyLogin()
+      RETURN THIS.nError
+  ENDIF
+ENDIF
+polog.Log('HttpSendRequest',Program())
+lnRetval=0
+lnRetval=HttpSendRequest(hHTTPResult,;
+   tcHeaders,LEN(tcHeaders),;
+   lcPostBuffer,tnPostSize)
+
+IF lnRetval = 0
+   THIS.nerror=GetLastError()
+   THIS.cerrormsg=THIS.getsystemerrormsg()
+   =InternetCloseHandle(hHTTPResult)
+   RETURN THIS.nerror
+ENDIF
+
+DECLARE INTEGER HttpQueryInfo ;
+   IN WININET.DLL ;
+   INTEGER hHTTPHandle,;
+   INTEGER nType,;
+   STRING @cHeaders,;
+   INTEGER @cbHeaderSize,;
+   STRING cNULL
+
+*** Retrieve the HTTP Headers
+polog.Log('HttpQueryInfo 1',Program())
+lcHeaders = SPACE(1024)
+lnHeaderSize = 1024
+lnRetval = HttpQueryInfo(hHTTPResult,;
+   HTTP_QUERY_RAW_HEADERS_CRLF,;
+   @lcHeaders,@lnHeaderSize,NULL)
+THIS.chttpheaders = TRIM(STRTRAN(lcHeaders,CHR(0),""))
+ 
+*** Check the HTTP Result Code
+lcHeaders = SPACE(7)
+lnHeaderSize = 6
+polog.Log('HttpQueryInfo 2',Program())
+lnRetval = HttpQueryInfo(hHTTPResult,;
+   HTTP_QUERY_STATUS_CODE,;
+   @lcHeaders,@lnHeaderSize,NULL)
+lcResultCode = TRIM(STRTRAN(lcHeaders,CHR(0),""))
+
+IF lcResultCode # "200"
+   lcHeaders = SPACE(256)
+   lnHeaderSize = 255
+   lnRetval = HttpQueryInfo(hHTTPResult,;
+      HTTP_QUERY_STATUS_TEXT,;
+      @lcHeaders,@lnHeaderSize,NULL)
+   THIS.nerror=VAL(lcResultCode)
+   THIS.cErrorMsg = TRIM(STRTRAN(lcHeaders,CHR(0),""))
+   =InternetCloseHandle(hHTTPResult)
+   RETURN THIS.nerror
+ENDIF
+
+
+*** Call HTTP Event method
+polog.Log('OnHTTPBufferUpdate',Program())
+THIS.OnHTTPBufferUpdate(0,0,THIS.chttpheaders)
+
+DECLARE INTEGER InternetReadFile ;
+   IN WININET.DLL ;
+   INTEGER hHTTPHandle,;
+   STRING @lcBuffer,;
+   INTEGER cbBuffer,;
+   INTEGER @cbBuffer
+
+polog.Log('InternetReadFile',Program())
+IF tnBufferSize > 0
+   *** Use Fixed Buffer Size
+   tcBuffer=SPACE(tnBufferSize)
+   lnBufferSize=tnBufferSize
+   lnRetval=InternetReadFile(hHTTPResult,;
+      @tcBuffer,;
+      tnBufferSize,;
+      @tnBufferSize)
+ELSE
+   *** If a filename was specified output to the file instead of string
+   IF !EMPTY(tcFileName)
+      lhFile = FCREATE(tcFileName)
+      IF lhFile = -1
+         THIS.nerror=1
+         THIS.cerrormsg="Couldn't create output file"
+         =InternetCloseHandle(hHTTPResult)
+         RETURN THIS.nerror
+      ENDIF
+   ENDIF
+
+   *** Build the buffer dynamically
+   tcBuffer = ""
+   tnSize = 0
+   lnRetval = 0
+   lnBytesRead = 1
+   lnBufferReads = 0
+   DO WHILE .T.
+      lcReadBuffer = SPACE(THIS.nhttpworkbuffersize)
+      lnBytesRead = 0
+      lnSize = LEN(lcReadBuffer)
+
+      lnRetval=InternetReadFile(hHTTPResult,;
+         @lcReadBuffer,;
+         lnSize,;
+         @lnBytesRead)
+
+      IF lnRetval = 1 AND lnBytesRead > 0
+         *** Update the input parameters - result buffer and size of buffer
+         IF EMPTY(tcFileName)
+            *** Build string
+            tcBuffer = tcBuffer + LEFT(lcReadBuffer,lnBytesRead)
+         ELSE
+            *** Write to file
+            FWRITE(lhFile,lcReadBuffer,lnBytesRead)
+         ENDIF
+         tnBufferSize = tnBufferSize + lnBytesRead
+         lnBufferReads = lnBufferReads + 1
+         THIS.OnHTTPBufferUpdate(tnBufferSize,lnBufferReads,@lcReadBuffer)
+      ENDIF
+      IF THIS.lhttpcanceldownload
+         tcBuffer = "Error: Download canceled"
+         tnBufferSize = LEN(tcBuffer)
+         THIS.nError = -2
+         THIS.cErrorMsg = "Download Cancelled"
+         EXIT
+      ENDIF
+      IF (lnRetval = 1 AND lnBytesRead = 0) OR (lnRetval = 0)
+         EXIT
+      ENDIF
+   ENDDO
+   lnBufferSize = tnBufferSize
+
+   IF !EMPTY(tcFileName)
+      FCLOSE(lhFile)
+   ENDIF
+
+   THIS.OnHTTPBufferUpdate(0,-1,"")
+ENDIF
+
+IF lnRetval = 0
+   THIS.nerror=GetLastError()
+   THIS.cerrormsg=THIS.getsystemerrormsg()
+ENDIF
+
+=InternetCloseHandle(hHTTPResult);
+
+tcBuffer = (IIF(tnBufferSize > 1 AND tnBufferSize <= lnBufferSize,SUBSTR(tcBuffer,1,tnBufferSize),""))
+
+RETURN THIS.nerror
+
+
+************************************************************************
+* wwHTTP :: HTTPGetAsync
+*********************************
+***  Function: Sends an HTTP request but doesn't wait for completion.
+***            You can use this one for stress testing. Each request
+***            fires off a new thread so make sure you let the
+***            thread count catch up before overrunning your machine.
+***            Why - use for stress testing.
+***      Pass: lcUrl   -    Location to open
+***    Return: nothing
+************************************************************************
+FUNCTION httpgetasync
+LPARAMETERS lcUrl
+lcUrl=IIF(TYPE("lcUrl")="C",lcUrl,"")
+
+DECLARE INTEGER HTTPGetAsync ;
+   IN (THIS.cDLLPath) ;
+   STRING cURL
+
+HTTPGetAsync(lcUrl)
+RETURN
+
+
+
+************************************************************************
+* wwHTTP :: HTTPGetHeader
+*********************************
+***  Function: Retrieves just the HTTP header of a page request.
+***    Assume: Must call HTTPConnect/HTTPClose to manage connection
+***            to Server
+***      Pass: tcPage    -    The Server relative page to view
+***            tcHeader  -    Buffer to receive headers (by reference)
+***            tnSize    -    Size of the Buffer (by Reference)
+***    Return: Win32API Error Code
+************************************************************************
+LPARAMETERS tcPage, tcHeaders, tnHeaderSize
+LOCAL lnError, lnSize, lcBuffer
+
+tcHeaders=IIF(TYPE("tcHeaders")="C",tcHeaders,"")
+tnHeaderSize=IIF(TYPE("tnHeaderSize")="N",tnHeaderSize,2048)
+
+IF !EMPTY(THIS.cPostBuffer)
+   tnPostSize=LEN(THIS.cPostBuffer)
+   lcPostBuffer= IIF(tnPostSize > 0,THIS.cPostBuffer,NULL)
+ELSE
+   tnPostSize=0
+   lcPostBuffer=NULL
+ENDIF
+
+DECLARE INTEGER HttpOpenRequest ;
+   IN WININET.DLL ;
+   INTEGER hHTTPHandle,;
+   STRING lpzReqMethod,;
+   STRING lpzPage,;
+   STRING lpzVersion,;
+   STRING lpzReferer,;
+   STRING lpzAcceptTypes,;
+   INTEGER dwFlags,;
+   INTEGER dwContextw
+
+hHTTPResult=HttpOpenRequest(THIS.hhttpsession,;
+   IIF( tnPostSize > 0, "POST","GET"),;
+   tcPage,;
+   NULL,NULL,NULL,;
+   INTERNET_FLAG_RELOAD + IIF(THIS.lsecurelink,INTERNET_FLAG_SECURE,0),0)
+
+
+IF (hHTTPResult = 0)
+   THIS.nerror=GetLastError()
+   THIS.cerrormsg=THIS.getsystemerrormsg()
+   RETURN THIS.nerror
+ENDIF
+
+
+DECLARE INTEGER HttpSendRequest    ;
+   IN WININET.DLL ;
+   INTEGER hHTTPHandle,;
+   STRING lpzHeaders,;
+   INTEGER cbHeaders,;
+   STRING lpzPost,;
+   INTEGER cbPost
+
+lcHeaders=TRIM(tcHeaders)
+
+lnRetval=HttpSendRequest(hHTTPResult,;
+   lcHeaders,LEN(lcHeaders),;
+   lcPostBuffer,tnPostSize)
+
+IF lnRetval = 0
+   THIS.nerror=GetLastError()
+   THIS.cerrormsg=THIS.getsystemerrormsg()
+   RETURN THIS.nerror
+ENDIF
+
+DECLARE INTEGER HttpQueryInfo ;
+   IN WININET.DLL ;
+   INTEGER hHTTPHandle,;
+   INTEGER nType,;
+   STRING @cHeaders,;
+   INTEGER @cbHeaderSize,;
+   STRING cNULL
+
+lnRetval = HttpQueryInfo(hHTTPResult,;
+   HTTP_QUERY_RAW_HEADERS_CRLF,;
+   @tcHeaders,@tnHeaderSize,NULL)
+IF (lnRetval = 0)
+   THIS.nerror=GetLastError()
+   THIS.cerrormsg=THIS.getsystemerrormsg()
+   RETURN THIS.nerror
+ENDIF
+
+InternetCloseHandle(hHTTPResult);
+
+tcHeaders = (IIF(tnHeaderSize > 1,SUBSTR(tcHeaders,1,tnHeaderSize-1),""))
+
+RETURN lnError
+
+
+********************************************************
+* wwHTTP :: HTTPGetExAsync
+*********************************
+***  Function: Retrieves an HTTP request from the
+***            network asynchronously. This means the
+***            request fires and returns immediately
+***            without an error code. Operation runs on
+***            new thread in the background after returing
+***            control to VFP.
+***
+***            This method is fully self contained.
+***            You don't need to call HTTPOpen or HTTPClose.
+***
+***            This method allows full configuration
+***            of the request with: POST data, SSL,
+***            Passwords and creation of an output
+***            file.
+***
+***            Use AddPostKey to add POST vars. Use lSecureLink
+***            to enable SSL operation. Use cUserName and cPassword
+***            for passwords.
+***
+***            Output file option allows for async
+***            downloads and later checking for a result.
+***            Using a timer it's possible to fire 'events'
+***            when the download is complete.
+***
+***      Pass: tcURL        - Server relative link (/default.asp)
+***            tcResultFile - File where result get stored to
+***                           Make sure this is file unique...
+***            tnResultSize - If you're saving the result you
+***                           can use this to specify the size
+***                           Default is a small 256 (used for
+***                           not checking results).
+***      Used: lSecureLink, cUserName, cPassword, AddPostKey()
+***    Return: nothing
+***            If tcResultFile is passed you can check
+***            for this file. On success you'll get the
+***            document. On failure you get:
+***            Error: 
+*******************************************************
+FUNCTION httpgetexasync
+LPARAMETERS tcPage, tcResultFile, tnResultSize, tcHeaders
+LOCAL hHTTPResult
+
+*** Post Buffer and lSecureLink also apply via properties
+tcServer=THIS.cserver
+tcPage=IIF(EMPTY(tcPage),"/",tcPage)
+tcUserName=THIS.cusername
+tcPassword=THIS.cpassword
+tcResultFile=IIF(EMPTY(tcResultFile),"",tcResultFile)
+tnResultSize=IIF(EMPTY(tnResultSize),256,tnResultSize)
+
+IF !EMPTY(THIS.cPostBuffer)
+   tnPostSize=LEN(THIS.cPostBuffer)
+   lcPostBuffer= IIF(tnPostSize > 0,THIS.cPostBuffer,NULL)
+ELSE
+   tnPostSize=0
+   lcPostBuffer=NULL
+ENDIF
+
+
+IF tnPostSize > 0
+   IF EMPTY(tcHeaders)
+      IF THIS.nhttppostmode = 1
+         tcHeaders = "Content-Type: application/x-www-form-urlencoded"  + CR+;
+            IIF(!EMPTY(tcHeaders),CR+tcHeaders,"")
+      ELSE
+         tcHeaders = "Content-Type: multipart/form-data; boundary=" + MULTIPART_BOUNDARY + CR + CR +;
+            IIF(EMPTY(tcHeaders),"",tcHeaders)
+
+         IF tnPostSize > 0
+            lcPostBuffer = lcPostBuffer + MULTIPART_BOUNDARY + CR
+            tnPostSize=LEN(lcPostBuffer)
+         ENDIF
+      ENDIF
+   ENDIF
+ELSE
+   tcHeaders =  IIF(!EMPTY(tcHeaders),tcHeaders,"")
+ENDIF
+
+lcOldAlias=ALIAS()
+
+
+DECLARE HTTPGetExAsync ;
+   IN WWIPSTUFF.DLL ;
+   INTEGER hInternet,;
+   INTEGER hHTTP,;
+   STRING SERVER,;
+   STRING PAGE,;
+   STRING BUFFER,;
+   INTEGER BufferSize,;
+   STRING HEADER,;
+   STRING POST,;
+   INTEGER POSTSIZE,;
+   INTEGER SECURE,;
+   INTEGER CONNECTTYPE,;
+   STRING Username, STRING PASSWORD,;
+   STRING ResultFile,;
+   INTEGER ResultSize
+
+tcBuffer = SPACE(256)
+tnBufSize = LEN(tcBuffer)
+lnRet = httpgetexasync(THIS.hipsession, THIS.hhttpsession,;
+   tcServer,;
+   tcPage,;
+   tcBuffer,tnBufSize,;
+   tcHeaders,;
+   lcPostBuffer, tnPostSize,;
+   IIF(THIS.lsecurelink,1,0),;
+   THIS.nhttpconnecttype,;
+   tcUserName, tcPassword,;
+   tcResultFile,tnResultSize)
+
+*** Cause HTTPClose() to have no effect on these
+*** handles - the C thread code will clean these up
+THIS.hIPSession = 0
+THIS.hHTTPSession = 0
+
+RETURN
+
+
+************************************************************************
+* wwIPStuff :: HTTPGetHeader
+*********************************
+***  Function: Retrieves just the HTTP header of a page request.
+***    Assume: Must call HTTPConnect/HTTPClose to manage connection
+***            to Server
+***      Pass: tcPage    -    The Server relative page to view
+***            tcHeader  -    Buffer to receive headers (by reference)
+***            tnSize    -    Size of the Buffer (by Reference)
+***    Return: Win32API Error Code
+************************************************************************
+FUNCTION HTTPGetHeader
+LPARAMETERS tcPage, tcHeaders, tnHeaderSize
+LOCAL lnError, lnSize, lcBuffer
+
+tcHeaders=IIF(TYPE("tcHeaders")="C",tcHeaders,"")
+tnHeaderSize=IIF(TYPE("tnHeaderSize")="N",tnHeaderSize,2048)
+
+IF USED("wwPostBuffer")
+   SELE wwPostBuffer
+   tnPostSize=LEN(wwPostBuffer.cPostBuffer)
+   lcPostBuffer= IIF(tnPostSize > 0,wwPostBuffer.cPostBuffer,NULL)
+ELSE
+   tnPostSize=0
+   lcPostBuffer=NULL
+ENDIF
+
+DECLARE INTEGER HttpOpenRequest ;
+   IN WININET.DLL ;
+   INTEGER hHTTPHandle,;
+   STRING lpzReqMethod,;
+   STRING lpzPage,;
+   STRING lpzVersion,;
+   STRING lpzReferer,;
+   STRING lpzAcceptTypes,;
+   INTEGER dwFlags,;
+   INTEGER dwContextw
+
+hHTTPResult=HttpOpenRequest(THIS.hHTTPSession,;
+   IIF( tnPostSize > 0, "POST","GET"),;
+   tcPage,;
+   NULL,NULL,NULL,;
+   INTERNET_FLAG_RELOAD + IIF(THIS.lSecureLink,INTERNET_FLAG_SECURE,0),0)
+
+
+IF (hHTTPResult = 0)
+   THIS.nError=GetLastError()
+   THIS.cErrorMsg=THIS.GetSystemErrorMsg()
+   RETURN THIS.nError
+ENDIF
+
+
+DECLARE INTEGER HttpSendRequest    ;
+   IN WININET.DLL ;
+   INTEGER hHTTPHandle,;
+   STRING lpzHeaders,;
+   INTEGER cbHeaders,;
+   STRING lpzPost,;
+   INTEGER cbPost
+
+lcHeaders=TRIM(tcHeaders)
+
+lnRetval=HttpSendRequest(hHTTPResult,;
+   lcHeaders,LEN(lcHeaders),;
+   lcPostBuffer,tnPostSize)
+
+IF lnRetval = 0
+   THIS.nError=GetLastError()
+   THIS.cErrorMsg=THIS.GetSystemErrorMsg()
+   RETURN THIS.nError
+ENDIF
+
+DECLARE INTEGER HttpQueryInfo ;
+   IN WININET.DLL ;
+   INTEGER hHTTPHandle,;
+   INTEGER nType,;
+   STRING @cHeaders,;
+   INTEGER @cbHeaderSize,;
+   STRING cNULL
+
+lnRetval = HttpQueryInfo(hHTTPResult,;
+   HTTP_QUERY_RAW_HEADERS_CRLF,;
+   @tcHeaders,@tnHeaderSize,NULL)
+
+IF (lnRetval = 0)
+   THIS.nError=GetLastError()
+   THIS.cErrorMsg=THIS.GetSystemErrorMsg()
+   RETURN THIS.nError
+ENDIF
+
+InternetCloseHandle(hHTTPResult);
+
+tcHeaders = (IIF(tnHeaderSize > 1,SUBSTR(tcHeaders,1,tnHeaderSize-1),""))
+
+RETURN lnRetVal
+
+
+
+*-- Gets called whenever the buffer is updated on an HTTPGetEx update. Only applies if the buffer size is set to 0 (Automatic sizing)
+FUNCTION OnHTTPBufferUpdate
+   LPARAMETER lnBytesDownloaded,lnBufferReads,lcCurrentChunk
+ENDFUNC
+
+*-- Event that fires in HttpGetEx calls after the Connection is established
+*-- Can be used to set WinInet options or otherwise insert code to fire
+*-- before the request is sent to the server
+FUNCTION OnHttpPostConnect
+   LPARAMETERS lnHttpHandle
+ENDFUNC
+
+*-- Cancels an HTTPGetEx download if the buffer is sized dynamically
+FUNCTION httpcanceldownload
+   THIS.lhttpcanceldownload = .T.
+ENDFUNC
+  
+
+
+************************************************************************
+* wwHTTP :: UnZipFiles
+*********************************
+***  Function: Unzips files to a specified directory
+***    Assume: Requires DynaZip DLLs (dunzip32.dll)
+***      Pass: lcZipFile
+***            lcDestination  -  Dir to unzip to
+***            lcFileSpec     -  Files to unzip (*.*)
+***    Return: DynaZip Error Code or 0 on success
+************************************************************************
+FUNCTION UnZipFiles
+LPARAMETERS lcZipFile, lcDestination, lcFileSpec
+
+lcFileSpec=IIF(type("lcFileSpec")="C",lcFileSpec,"*.*")
+lcDestination=IIF(type("lcDestination")="C",lcDestination,SYS(5) + CURDIR())
+
+DECLARE INTEGER UnZip ;
+   IN (THIS.cDLLPath) ;
+   STRING ZipFile,;
+   STRING Destination,;
+   STRING FileSpec
+
+RETURN UnZip(lcZipFile,lcDestination,lcFileSpec)
+
+************************************************************************
+* wwHTTP :: ZipFiles
+*********************************
+***  Function: Zips files
+***    Assume: Function requires DynaZip DLLs (dzip32.dll)
+***      Pass: lcZipFile   - Fully qualified ZIP file name 
+***            lcFileList  - Comma Delimited file list (Wildcards OK)
+***    Return: DynaZip error code or 0
+************************************************************************
+FUNCTION ZipFiles
+LPARAMETERS lcZipFile, lcFileList, lnCompression, llRecurse
+
+lnCompression=IIF(type("lnCompression")="N",lnCompression,9)
+ 
+DECLARE INTEGER Zip ;
+   IN (THIS.cDLLPath) ;
+   STRING ZipFile,;
+   STRING FileList,;
+   INTEGER lnCompression,;
+   INTEGER lnRecurse
+
+RETURN Zip(lcZipFile,lcFileList,lnCompression,IIF(llRecurse,1,0))
+
+************************************************************************
+* wwHTTP :: DecodeDBF
+*********************************
+***  Function: Decodes a DBF file encoded EncodeDBF back into its
+***            DBF/FPT format
+***      Pass:
+***    Return:
+************************************************************************
+   FUNCTION DecodeDBF
+   LPARAMETERS lcBuffer,lcDBF
+   LOCAL lnSeparator, lcHeader, lcFname, lnSize1, lnSize2, lcDBF, lcFile1, lcFile2
+
+   IF LEN(lcBuffer)<105
+      RETURN .F.
+   ENDIF
+
+   lcHeader=SUBSTR(lcBuffer,1,105)
+   lcFname=TRIM(SUBSTR(lcBuffer,6,40))
+   lnSize1=VAL(SUBSTR(lcBuffer,46,10))
+   lnSize2=VAL(SUBSTR(lcBuffer,96,10))
+
+   *** Use parm or the filename specified in the header
+   lcDBF=IIF(EMPTY(lcDBF),lcFname,UPPER(lcDBF))
+
+   IF lcHeader # "wwDBF"
+      WAIT WINDOW NOWAIT "Invalid Decode File Header"
+      RETURN .F.
+   ENDIF
+
+   lcFile1=""
+   lcFile2=""
+
+   IF lnSize1 > 0
+      lcFile1=SUBSTR(lcBuffer,106,lnSize1)
+      IF LEN(lcFile1) < lnSize1
+         WAIT WINDOW NOWAIT "Invalid File Size: "+;
+            STR(LEN(lcFile1)) +" of "+ STR(lnSize1)
+         RETURN .F.
+      ENDIF
+   ENDIF
+   IF lnSize2 > 0
+      lcFile2=SUBSTR(lcBuffer,106 + lnSize1, lnSize2)
+      lnSizex=LEN(lcFile2)
+      IF LEN(lcFile2) < lnSize2 - 1
+         WAIT WINDOW NOWAIT "Invalid Memo File Size: " +;
+            STR(LEN(lcFile2)) +" of "+ STR(lnSize2)
+         RETURN .F.
+      ENDIF
+   ENDIF
+
+   =File2Var(lcDBF,lcFile1)
+
+   IF !EMPTY(lcFile2)
+      =File2Var(STRTRAN(lcDBF,".DBF",".FPT"),lcFile2)
+   ENDIF
+
+   RETURN .T.
+
+ENDFUNC
+* wwHTTP :: DecodeDBF
+
+
+********************************************************
+* wwHTTP :: EncodeDBF
+*********************************
+***  Function: This function encodes a DBF file ready to
+***            be sent up to a server using HTTPGetEx in
+***            the POST buffer. The file will be URL
+***            encoded.
+***    Assume: Note you can send a ZIP file here, too!
+***            105 byte header on top of file contains
+***            5 byte ID (wwDBF) filename (40 bytes) and
+***            size(10 bytes) for each file
+***      Pass: lcDBF     - Full DBF filename w/ ext
+***            llHasMemo - .t. or (.f.)
+***    Return: Encoded Buffer or "" on failure
+********************************************************
+FUNCTION EncodeDBF
+LPARAMETERS lcDBF, llHasMemo, lcEncodedName
+LOCAL lcBuffer1, lcBuffer2, lcDBF, lcHeader, lcFPT
+
+lcDBF=IIF(VARTYPE(lcDBF)="C",UPPER(lcDBF),"")
+IF EMPTY(lcEncodedName)
+   lcEncodedName = JUSTFNAME(lcDBF) 
+ENDIF
+
+IF !FILE(lcDBF)
+   RETURN ""
+ENDIF
+
+lcBuffer1=File2Var(lcDBF)
+lcHeader = "wwDBF" + PADR(lcEncodedName,40) + ;
+   STR(LEN(lcBuffer1),10)
+IF !llHasMemo
+   lcHeader=lcHeader+ SPACE(50)  && Pad out header
+   RETURN lcHeader + lcBuffer1
+ENDIF
+
+lcFPT=STRTRAN(LOWER(lcDBF),".dbf",".fpt")
+
+lcBuffer2=File2Var(lcFPT)
+lcHeader=lcHeader + PADR(FORCEEXT(lcEncodedName,"fpt"),40) + ;
+   STR(LEN(lcBuffer2),10)
+
+RETURN lcHeader + lcBuffer1 + lcBuffer2
+ENDFUNC
+
+************************************************************************
+* wwHTTP :: SetProxyLogin
+****************************************
+***  Function: Sets the HTTP Proxy username and password
+***    Assume: thanks to Erik Moore for providing this method
+***      Pass: tcUserName
+***            tcPassword
+***            hIPHandle   - HTTP Request handle (optional)
+***    Return: .T. or .F.
+************************************************************************
+PROTECTED FUNCTION SetProxyLogin(tcUserName, tcPassword, hIPHandle)
+
+LOCAL lcUsername, lcPassword, lpBuffer, lpdwBufferLength, nSuccess
+
+lcUserName = IIF(!EMPTY(tcUserName),tcUserName,THIS.cHTTPProxyUserName)
+lcPassword = IIF(!EMPTY(tcPassword),tcPassword,THIS.cHTTPProxyPassword)
+hIPHandle = IIF(EMPTY(hIPHandle),THIS.hHTTPSession,hIPHandle)
+
+IF EMPTY(lcUsername)
+   RETURN
+ENDIF   
+
+DECLARE INTEGER InternetSetOption IN WinInet.dll ;
+    INTEGER hInternet, ;
+    INTEGER dwOption, ;
+    STRING @lpBuffer, ;
+    LONG lpdwBufferLength
+
+INTERNET_OPTION_PROXY_USERNAME = 43
+INTERNET_OPTION_PROXY_PASSWORD = 44
+
+IF !EMPTY(lcUserName)
+    lpBuffer = lcUserName 
+    dwBufferLength = LEN(lpBuffer) 
+    dwOption = INTERNET_OPTION_PROXY_USERNAME
+    nSuccess = InternetSetOption(hIPHandle, dwOption, @lpBuffer, dwBufferLength)
+    IF nSuccess <> 1
+         THIS.nError = GetLastError()
+         THIS.cErrorMsg = THIS.GetSystemErrorMsg(THIS.nError)
+         RETURN .F.
+     ENDIF
+ENDIF
+
+IF !EMPTY(lcPassword)
+   lpBuffer = lcpassword
+   dwBufferLength = LEN(lpBuffer) 
+   dwOption = INTERNET_OPTION_PROXY_PASSWORD
+   nSuccess = InternetSetOption(hIPHandle, dwOption, @lpBuffer, dwBufferLength)
+   IF nSuccess <> 1
+      THIS.nError = GetLastError()
+      THIS.cErrorMsg = THIS.GetSystemErrorMsg(THIS.nError)
+      RETURN .F.
+   ENDIF
+ENDIF
+
+RETURN .T.
+ENDFUNC
+
+
+
+
+************************************************************************
+* wwHTTP :: HTTPPing
+****************************************
+***  Function: Checks whether a site is up by a timeout value
+***    Assume: IE 5.5 or later is installed
+***      Pass: lnTimeout   -   in seconds
+***            lcServer    -   (ie. www.west-wind.com)
+***            lcLink      -   optional link to hit (/default.htm)
+***    Return:
+************************************************************************
+FUNCTION httpping
+LPARAMETER lnTimeout, lcServer, lcLink
+LOCAL lcFile, llSuccess, lnHandle
+
+IF EMPTY(lcLink)
+   lcLink = "/"
+ENDIF
+
+lnSaveTimeout = THIS.nConnectTimeout
+THIS.nConnectTimeout = lnTimeout
+  
+lcResult = THIS.HTTPGet("http://" + lcServer + lcLink)
+
+THIS.nConnectTimeout = lnSaveTimeout
+
+IF THIS.nError = 0
+   RETURN .T.
+ENDIF
+
+RETURN .F.
+
+
+************************************************************************
+* wwHTTP :: InternetCrackUrl
+*********************************
+***  Function: Breaks out a URL into its component pieces
+***      Pass: lcURL  -  URL to crack
+***    Return: loUrl  or NULL
+************************************************************************
+FUNCTION InternetCrackUrl
+LPARAMETERS lcUrl
+LOCAL  lnAT, lcProtocol, lcQuerystring, lcPort, lcServer
+
+*lcUrl = LOWER(lcUrl)
+
+*** Find the querystring first
+lnAT = AT("?",lcUrl)
+IF lnAT > 0
+   lcQuerystring = SUBSTR(lcUrl,lnAT)
+   lcUrl = LEFT(lcUrl,lnAT-1)
+ELSE
+   lcQuerystring = ""
+ENDIF
+
+lnAT = AT("://",lcUrl)
+IF lnAT < 1
+   RETURN .NULL.
+ENDIF
+
+lcProtocol = lower(LEFT(lcUrl,lnAT-1))
+DO CASE
+CASE lcProtocol == "http"
+   lcPort = "80"
+CASE lcProtocol == "https"
+   lcPort = "443"
+CASE lcProtocol == "ftp"
+   lcPort = "21"
+OTHERWISE
+   *** Assume HTTP
+   lcPort = "80"   
+ENDCASE
+
+lcUrl = SUBSTR(lcUrl,lnAT + 3)
+lnAT = AT(":",lcUrl)
+
+IF lnAT > 0
+   lcPort = Extract(lcUrl,":","/",,.T.)
+   lcServer = LEFT(lcUrl,lnAT-1)
+   lcUrl = SUBSTR(lcUrl,lnAT + LEN(lcPort) + 1)
+ELSE
+   lnAT = AT("/",lcUrl)
+   IF lnAT = 0
+      lcServer = lcUrl
+      lcUrl = ""
+   ELSE
+      lcServer = SUBSTR(lcUrl,1,lnAT-1)
+      lcURL = SUBSTR(lcUrl,lnAt) 
+   ENDIF
+ENDIF
+
+loUrl = CREATE("RELATION")
+loUrl.ADDPROPERTY("cProtocol",lcProtocol)
+loUrl.ADDPROPERTY("cServer",lcServer)
+loUrl.ADDPROPERTY("cPath",lcUrl)  && What's left of the url
+loUrl.ADDPROPERTY("cquerystring",lcQuerystring)
+loUrl.ADDPROPERTY("cPort",lcPort)
+
+*** Not implementented
+loURL.AddProperty("cUserName","")
+loUrl.AddProperty("cPassword","")
+
+RETURN loUrl
+ENDFUNC
+* wwHTTP :: InternetCrackUrl   FUNCTION InternetCrackUrl
+
+********************************************************
+* wwHTTP :: WinInetSetTimeout
+*********************************
+***  Function: Sets various timeout for use with a
+***            WinInet Connection
+***      Pass: dwTimeoutSecs - Secs to wait for timeout
+********************************************************
+FUNCTION wininetsettimeout
+LPARAMETERS dwTimeoutSecs, lnHandle
+
+dwTimeoutSecs=IIF(VARTYPE(dwTimeoutSecs)="N",;
+   dwTimeoutSecs,THIS.nconnecttimeout) 
+   
+IF dwTimeoutSecs = 0
+   *** Just use the default
+   RETURN
+ENDIF   
+
+IF EMPTY(lnHandle)
+   lnHandle = THIS.hIPSession
+ENDIF      
+
+DECLARE INTEGER InternetSetOption ;
+   IN WININET.DLL ;
+   INTEGER HINTERNET,;
+   INTEGER dwFlags,;
+   INTEGER @dwValue,;
+   INTEGER 
+
+
+dwTimeoutSecs=dwTimeoutSecs * 1000   && to milliseconds
+llRetVal=InternetSetOption(lnHandle,;
+   INTERNET_OPTION_CONNECT_TIMEOUT,;
+   @dwTimeoutSecs,4)
+
+llRetVal=InternetSetOption(lnHandle,;
+   INTERNET_OPTION_RECEIVE_TIMEOUT,;
+   @dwTimeoutSecs,4)
+
+llRetVal=InternetSetOption(lnHandle,;
+   INTERNET_OPTION_SEND_TIMEOUT,;
+   @dwTimeoutSecs,4)
+
+*   dwTimeoutSecs=1  &&// Retry only 1 time
+*   llRetVal=InternetSetOption(lnHandle,;
+*      INTERNET_OPTION_CONNECT_RETRIES,;
+*      @dwTimeoutSecs,4)
+RETURN
+
+
+
+************************************************************************
+* wwHTTP :: GetLastInternetError
+*********************************
+***  Function: Retrieves the last WinInet error using WinInet's error
+***            responses.
+***    Assume: Currently not used by class internally
+***            Under Construction
+***      Pass: lnError   -  Error Code to resolve(Optional)
+***    Return: Error Message or ""
+************************************************************************
+   FUNCTION getlastinterneterror
+   LPARAMETERS lnError
+
+   lnError=IIF(TYPE("lnError")="N",lnError,THIS.nerror)
+
+   DECLARE INTEGER InternetGetLastResponseInfo ;
+      IN WININET.DLL ;
+      INTEGER @lpdwError,;
+      STRING @lpszBuffer,;
+      INTEGER @lpcbSize
+
+   lcErrorMsg=SPACE(1024)
+   lnSize=LEN(lcErrorMsg)
+
+   =InternetGetLastResponseInfo(@lnError,@lcErrorMsg,@lnSize)
+
+   IF lnSize < 2
+      RETURN ""
+   ENDIF
+
+   RETURN SUBSTR(lcErrorMsg,1,lnSize)
+ENDFUNC
+
+************************************************************************
+* wwHTTP :: GetPostBuffer
+*********************************
+***  Function: Returns the entire Post Buffer as a string
+************************************************************************
+FUNCTION getpostbuffer
+RETURN THIS.cPostBuffer
+ENDFUNC
+
+
+********************************************************
+* wwHTTP :: GetSystemErrorMsg
+*********************************
+***  Function: Returns an Error Message for the last
+***            error value set in nError property.
+***    Assume: nError was set by last operation
+***    Return: Error String or ""
+********************************************************
+FUNCTION getsystemerrormsg
+LPARAMETERS lnErrorNo, llAPI
+LOCAL szMsgBuffer,lnSize
+
+lnErrorNo=IIF(TYPE("lnErrorNo")="N",lnErrorNo,THIS.nerror)
+
+IF lnErrorNo = ERROR_INTERNET_EXTENDED_ERROR
+   RETURN THIS.getlastinterneterror()
+ENDIF
+
+szMsgBuffer=SPACE(500)
+DECLARE INTEGER FormatMessage ;
+   IN WIN32API ;
+   INTEGER dwFlags ,;
+   INTEGER lpvSource,;
+   INTEGER dwMsgId,;
+   INTEGER dwLangId,;
+   STRING @lpBuffer,;
+   INTEGER nSize,;
+   INTEGER  Arguments
+
+DECLARE INTEGER GetModuleHandle ;
+   IN WIN32API ;
+   STRING
+
+lnModule=GetModuleHandle("wininet.dll")
+IF lnModule # 0 AND !llAPI
+   lnSize=FormatMessage(FORMAT_MESSAGE_FROM_HMODULE,lnModule,lnErrorNo,;
+      0,@szMsgBuffer,LEN(szMsgBuffer),0)
+ELSE
+   lnSize=0
+ENDIF
+
+IF lnSize > 2
+   szMsgBuffer=SUBSTR(szMsgBuffer,1, lnSize -2  )
+ELSE
+   *** REtry with 12000 less - WinInet return Windows API file error codes
+   lnSize=FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,0,lnErrorNo,;
+      0,@szMsgBuffer,LEN(szMsgBuffer),0)
+
+   IF lnSize > 2
+      szMsgBuffer="Win32 API: " + SUBSTR(szMsgBuffer,1, lnSize-2 )
+   ELSE
+      szMsgBuffer=""
+   ENDIF
+ENDIF
+
+RETURN szMsgBuffer
+ENDFUNC
+
+
+
+************************************************************************
+* wwHTTP :: Destroy
+*********************************
+***  Function: Clears HTTP Session Handles if open
+************************************************************************
+FUNCTION DESTROY
+
+IF THIS.hipsession # 0 OR THIS.hhttpsession # 0
+   THIS.httpclose()
+ENDIF
+
+ENDFUNC
+
+
+
+ENDDEFINE
+*
+*-- EndDefine: wwHTTP
+**************************************************
diff --git a/comun_plugins/utils/wwapi.PRG b/comun_plugins/utils/wwapi.PRG
new file mode 100644
index 0000000..4cf7582
--- /dev/null
+++ b/comun_plugins/utils/wwapi.PRG
@@ -0,0 +1,929 @@
+#INCLUDE WCONNECT.H
+
+#DEFINE MAX_INI_BUFFERSIZE  		512
+#DEFINE MAX_INI_ENUM_BUFFERSIZE 	8196
+
+*************************************************************
+DEFINE CLASS wwAPI AS Custom
+*************************************************************
+***    Author: Rick Strahl
+***            (c) West Wind Technologies, 1997
+***   Contact: (541) 386-2087  / rstrahl@west-wind.com
+***  Function: Encapsulates several Windows API functions
+*************************************************************
+
+*** Custom Properties
+nLastError=0
+
+FUNCTION Init
+************************************************************************
+* wwAPI :: Init
+*********************************
+***  Function: DECLARES commonly used DECLAREs so they're not redefined
+***            on each call to the methods.
+************************************************************************
+
+DECLARE INTEGER GetPrivateProfileString ;
+   IN WIN32API ;
+   STRING cSection,;
+   STRING cEntry,;
+   STRING cDefault,;
+   STRING @cRetVal,;
+   INTEGER nSize,;
+   STRING cFileName
+
+DECLARE INTEGER GetCurrentThread ;
+   IN WIN32API 
+   
+DECLARE INTEGER GetThreadPriority ;
+   IN WIN32API ;
+   INTEGER tnThreadHandle
+
+DECLARE INTEGER SetThreadPriority ;
+   IN WIN32API ;
+   INTEGER tnThreadHandle,;
+   INTEGER tnPriority
+
+*** Open Registry Key
+DECLARE INTEGER RegOpenKey ;
+        IN Win32API ;
+        INTEGER nHKey,;
+        STRING cSubKey,;
+        INTEGER @nHandle
+
+*** Create a new Key
+DECLARE Integer RegCreateKey ;
+        IN Win32API ;
+        INTEGER nHKey,;
+        STRING cSubKey,;
+        INTEGER @nHandle
+
+*** Close an open Key
+DECLARE Integer RegCloseKey ;
+        IN Win32API ;
+        INTEGER nHKey
+  
+ENDFUNC
+* Init
+
+FUNCTION MessageBeep
+************************************************************************
+* wwAPI :: MessageBeep
+**********************
+***  Function: MessageBeep API call runs system sounds
+***      Pass: lnSound   -   Uses FoxPro.h MB_ICONxxxxx values
+***    Return: nothing
+************************************************************************
+LPARAMETERS lnSound
+DECLARE INTEGER MessageBeep ;
+   IN WIN32API AS MsgBeep ;
+   INTEGER nSound
+=MsgBeep(lnSound)
+ENDFUNC
+* MessageBeep
+
+FUNCTION ReadRegistryString
+************************************************************************
+* wwAPI :: ReadRegistryString
+*********************************
+***  Function: Reads a string value from the registry.
+***      Pass: tnHKEY    -  HKEY value (in CGIServ.h)
+***            tcSubkey  -  The Registry subkey value
+***            tcEntry   -  The actual Key to retrieve
+***            tlInteger -  Optional - Return an DWORD value
+***    Return: Registry String or .NULL. on not found
+************************************************************************
+LPARAMETERS tnHKey, tcSubkey, tcEntry, tlInteger
+LOCAL lnRegHandle, lnResult, lnSize, lcDataBuffer, tnType
+
+tnHKey=IIF(vartype(tnHKey)="N",tnHKey,HKEY_LOCAL_MACHINE)
+
+lnRegHandle=0
+
+*** Open the registry key
+lnResult=RegOpenKey(tnHKey,tcSubKey,@lnRegHandle)
+IF lnResult#ERROR_SUCCESS
+   *** Not Found
+   RETURN .NULL.
+ENDIF   
+
+*** Return buffer to receive value
+IF !tlInteger
+*** Need to define here specifically for Return Type
+*** for lpdData parameter or VFP will choke.
+*** Here it's STRING.
+DECLARE INTEGER RegQueryValueEx ;
+        IN Win32API ;
+        INTEGER nHKey,;
+        STRING lpszValueName,;
+        INTEGER dwReserved,;
+        INTEGER @lpdwType,;
+        STRING @lpbData,;
+        INTEGER @lpcbData
+        
+	lcDataBuffer=space(MAX_INI_BUFFERSIZE)
+	lnSize=LEN(lcDataBuffer)
+	lnType=REG_DWORD
+
+	lnResult=RegQueryValueEx(lnRegHandle,tcEntry,0,@lnType,;
+                         @lcDataBuffer,@lnSize)
+ELSE
+*** Need to define here specifically for Return Type
+*** for lpdData parameter or VFP will choke. 
+*** Here's it's an INTEGER
+DECLARE INTEGER RegQueryValueEx ;
+        IN Win32API AS RegQueryInt;
+        INTEGER nHKey,;
+        STRING lpszValueName,;
+        INTEGER dwReserved,;
+        Integer @lpdwType,;
+        INTEGER @lpbData,;
+        INTEGER @lpcbData
+
+	lcDataBuffer=0
+	lnSize=4
+	lnType=REG_DWORD
+	lnResult=RegQueryInt(lnRegHandle,tcEntry,0,@lnType,;
+	                         @lcDataBuffer,@lnSize)
+	IF lnResult = ERROR_SUCCESS
+	   RETURN lcDataBuffer
+	ELSE
+       RETURN -1
+	ENDIF
+ENDIF
+=RegCloseKey(lnRegHandle)
+
+IF lnResult#ERROR_SUCCESS 
+   *** Not Found
+   RETURN .NULL.
+ENDIF   
+
+IF lnSize<2
+   RETURN ""
+ENDIF
+   
+*** Return string and strip out NULLs
+RETURN SUBSTR(lcDataBuffer,1,lnSize-1)
+ENDFUNC
+* ReadRegistryString
+
+************************************************************************
+* Registry :: WriteRegistryString
+*********************************
+***  Function: Writes a string value to the registry.
+***            If the value doesn't exist it's created. If the key
+***            doesn't exist it is also created, but this will only
+***            succeed if it's the last key on the hive.
+***      Pass: tnHKEY    -  HKEY value (in WCONNECT.h)
+***            tcSubkey  -  The Registry subkey value
+***            tcEntry   -  The actual Key to write to
+***            tcValue   -  Value to write or .NULL. to delete key
+***            tlCreate  -  Create if it doesn't exist
+***    Assume: Use with extreme caution!!! Blowing your registry can
+***            hose your system!
+***    Return: .T. or .NULL. on error
+************************************************************************
+FUNCTION WriteRegistryString
+LPARAMETERS tnHKey, tcSubkey, tcEntry, tcValue,tlCreate
+LOCAL lnRegHandle, lnResult, lnSize, lcDataBuffer, tnType
+
+tnHKey=IIF(type("tnHKey")="N",tnHKey,HKEY_LOCAL_MACHINE)
+
+lnRegHandle=0
+
+lnResult=RegOpenKey(tnHKey,tcSubKey,@lnRegHandle)
+IF lnResult#ERROR_SUCCESS
+   IF !tlCreate
+      RETURN .F.
+   ELSE
+      lnResult=RegCreateKey(tnHKey,tcSubKey,@lnRegHandle)
+      IF lnResult#ERROR_SUCCESS
+         RETURN .F.
+      ENDIF  
+   ENDIF
+ENDIF   
+
+*** Need to define here specifically for Return Type!
+*** Here lpbData is STRING.
+DECLARE INTEGER RegSetValueEx ;
+        IN Win32API ;
+        INTEGER nHKey,;
+        STRING lpszEntry,;
+        INTEGER dwReserved,;
+        INTEGER fdwType,;
+        STRING lpbData,;
+        INTEGER cbData
+
+*** Check for .NULL. which means delete key
+IF !ISNULL(tcValue)
+  *** Nope - write new value
+  lnSize=LEN(tcValue)
+  if lnSize=0
+     tcValue=CHR(0)
+  ENDIF
+
+  lnResult=RegSetValueEx(lnRegHandle,tcEntry,0,REG_SZ,;
+                         tcValue,lnSize)
+ELSE
+  *** Delete a value from a key
+  DECLARE INTEGER RegDeleteValue ;
+          IN Win32API ;
+          INTEGER nHKEY,;
+          STRING cEntry
+
+  *** DELETE THE KEY
+  lnResult=RegDeleteValue(lnRegHandle,tcEntry)
+ENDIF                         
+
+=RegCloseKey(lnRegHandle)
+                        
+IF lnResult#ERROR_SUCCESS
+   RETURN .F.
+ENDIF   
+
+RETURN .T.
+ENDPROC
+* WriteRegistryString
+
+FUNCTION EnumKey
+************************************************************************
+* wwAPI :: EnumRegistryKey
+*********************************
+***  Function: Returns a registry key name based on an index
+***            Allows enumeration of keys in a FOR loop. If key
+***            is empty end of list is reached.
+***      Pass: tnHKey    -   HKEY_ root key
+***            tcSubkey  -   Subkey string
+***            tnIndex   -   Index of key name to get (0 based)
+***    Return: "" on error - Key name otherwise
+************************************************************************
+LPARAMETERS tnHKey, tcSubKey, tnIndex 
+LOCAL lcSubKey, lcReturn, lnResult, lcDataBuffer
+
+lnRegHandle=0
+
+*** Open the registry key
+lnResult=RegOpenKey(tnHKey,tcSubKey,@lnRegHandle)
+IF lnResult#ERROR_SUCCESS
+   *** Not Found
+   RETURN .NULL.
+ENDIF   
+
+DECLARE Integer RegEnumKey ;
+  IN WIN32API ;
+  INTEGER nHKey, ;
+  INTEGER nIndex, ;
+  STRING @cSubkey, ;  
+  INTEGER nSize
+
+lcDataBuffer=SPACE(MAX_INI_BUFFERSIZE)
+lnSize=MAX_INI_BUFFERSIZE
+lnResult=RegENumKey(lnRegHandle, tnIndex, @lcDataBuffer, lnSize)
+
+=RegCloseKey(lnRegHandle)
+
+IF lnResult#ERROR_SUCCESS 
+   *** Not Found
+   RETURN .NULL.
+ENDIF   
+
+RETURN TRIM(CHRTRAN(lcDataBuffer,CHR(0),""))
+ENDFUNC
+* EnumRegistryKey
+
+
+FUNCTION GetProfileString
+************************************************************************
+* wwAPI :: GetProfileString
+***************************
+***  Modified: 09/26/95
+***  Function: Read Profile String information from a given
+***            text file using Windows INI formatting conventions
+***      Pass: pcFileName   -    Name of INI file
+***            pcSection    -    [Section] in the INI file ("Drivers")
+***            pcEntry      -    Entry to retrieve ("Wave")
+***                              If this value is a null string
+***                              all values for the section are
+***                              retrieved seperated by CHR(13)s
+***    Return: Value(s) or .NULL. if not found
+************************************************************************
+LPARAMETERS pcFileName,pcSection,pcEntry, pnBufferSize
+LOCAL lcIniValue, lnResult
+
+*pcFileName=IIF(TYPE("pcFileName")="C",pcFileName,"")
+*pcSection=IIF(TYPE("pcSection")="C",pcSection,"")
+
+*** Default to 0, which means all entries!
+*pcEntry=IIF(TYPE("pcEntry")="C",pcEntry,0)
+
+*** Initialize buffer for result
+lcIniValue=SPACE(IIF( type("pnBufferSize")="N",pnBufferSize,MAX_INI_BUFFERSIZE) )
+
+lnResult=GetPrivateProfileString(pcSection,pcEntry,"*None*",;
+   @lcIniValue,LEN(lcIniValue),pcFileName)
+
+*** Strip out Nulls
+IF TYPE("pcEntry")="N" AND pcEntry=0
+   *** 0 was passed to get all entry labels
+   *** Seperate all of the values with a Carriage Return
+   lcIniValue=TRIM(CHRTRAN(lcIniValue,CHR(0),CHR(13)) )
+ELSE
+   *** Individual Entry
+   lcIniValue=SUBSTR(lcIniValue,1,lnResult)
+ENDIF
+
+*** On error the result contains "*None"
+IF lcIniValue="*None*"
+   lcIniValue=.NULL.
+ENDIF
+
+RETURN lcIniValue
+ENDFUNC
+* GetProfileString
+
+************************************************************************
+* wwAPI :: GetProfileSections
+*********************************
+***  Function: Retrieves all sections of an INI File
+***      Pass: @laSections   -   Empty array to receive sections
+***            lcIniFile     -   Name of the INI file
+***            lnBufSize     -   Size of result buffer (optional)
+***    Return: Count of Sections  
+************************************************************************
+FUNCTION aProfileSections
+LPARAMETERS laSections, lcIniFile
+LOCAL lnBufsize, lcBuffer, lnSize, lnResult, lnCount
+
+lnBufsize=IIF(EMPTY(lnBufsize),16484,lnBufsize)
+
+DECLARE INTEGER GetPrivateProfileSectionNames ;
+   IN WIN32API ;
+   STRING @lpzReturnBuffer,;
+   INTEGER nSize,;
+   STRING lpFileName
+   
+lcBuffer = SPACE(lnBufSize)
+lnSize = lEN(lcBuffer)   
+lnResult = GetPrivateProfileSectionNames(@lcBuffer,lnSize,lcIniFile)
+IF lnResult < 3
+   RETURN 0
+ENDIF
+
+lnCount = aParseString(@laSections,TRIM(lcBuffer),CHR(0))
+lnCount = lnCount - 2
+IF lnCount > 0
+  DIMENSION laSections[lnCount]
+ENDIF
+
+RETURN lnCount
+ENDFUNC
+* wwAPI :: aProfileSections
+
+************************************************************************
+* wwAPI :: WriteProfileString
+*********************************
+***  Function: Writes a value back to an INI file
+***      Pass: pcFileName    -   Name of the file to write to
+***            pcSection     -   Profile Section
+***            pcKey         -   The key to write to
+***            pcValue       -   The value to write
+***    Return: .T. or .F.
+************************************************************************
+FUNCTION WriteProfileString
+LPARAMETERS pcFileName,pcSection,pcEntry,pcValue
+
+   DECLARE INTEGER WritePrivateProfileString ;
+      IN WIN32API ;
+      STRING cSection,STRING cEntry,STRING cEntry,;
+      STRING cFileName
+
+   lnRetVal=WritePrivateProfileString(pcSection,pcEntry,pcValue,pcFileName)
+
+   if lnRetval=1
+      RETURN .t.
+   endif
+   
+   RETURN .f.
+ENDFUNC
+* WriteProfileString
+
+FUNCTION GetTempPath
+************************************************************************
+* wwAPI :: GetTempPath
+***********************
+***  Function: Returns the OS temporary files path
+***    Return: Temp file path with trailing "\"
+************************************************************************
+LOCAL lcPath, lnResult
+
+*** API Definition:
+*** ---------------
+*** DWORD GetTempPath(cchBuffer, lpszTempPath)
+***
+*** DWORD cchBuffer;	/* size, in characters, of the buffer	*/
+*** LPTSTR lpszTempPath;	/* address of buffer for temp. path name	*/
+DECLARE INTEGER GetTempPath ;
+   IN WIN32API AS GetTPath ;
+   INTEGER nBufSize, ;
+   STRING @cPathName
+
+lcPath=SPACE(256)
+lnSize=LEN(lcPath)
+
+lnResult=GetTPath(lnSize,@lcPath)
+
+IF lnResult=0
+   lcPath=""
+ELSE
+   lcPath=SUBSTR(lcPath,1,lnResult)
+ENDIF
+
+RETURN lcPath
+ENDFUNC
+* eop GetTempPath
+
+FUNCTION GetEXEFile
+************************************************************************
+* wwAPI :: GetEXEFileName
+*********************************
+***  Function: Returns the Module name of the EXE file that started
+***            the current application. Unlike Application.Filename
+***            this function correctly returns the name of the EXE file
+***            for Automation servers too!
+***    Return: Filename or ""  (VFP.EXE is returned in Dev Version)
+************************************************************************
+DECLARE integer GetModuleFileName ;
+   IN WIN32API ;
+   integer hinst,;
+   string @lpszFilename,;
+   integer @cbFileName
+   
+lcFilename=space(256)
+lnBytes=255   
+
+=GetModuleFileName(0,@lcFileName,@lnBytes)
+
+lnBytes=AT(CHR(0),lcFileName)
+IF lnBytes > 1
+  lcFileName=SUBSTR(lcFileName,1,lnBytes-1)
+ELSE
+  lcFileName=""
+ENDIF       
+
+RETURN lcFileName
+ENDFUNC
+* GetEXEFileName
+
+
+************************************************************************
+* WinApi :: ShellExecute
+*********************************
+***    Author: Rick Strahl, West Wind Technologies
+***            http://www.west-wind.com/ 
+***  Function: Opens a file in the application that it's
+***            associated with.
+***      Pass: lcFileName  -  Name of the file to open
+***            lcWorkDir   -  Working directory
+***            lcOperation -  
+***    Return: 2  - Bad Association (invalid URL)
+***            31 - No application association
+***            29 - Failure to load application
+***            30 - Application is busy 
+***
+***            Values over 32 indicate success
+***            and return an instance handle for
+***            the application started (the browser) 
+************************************************************************
+***         FUNCTION ShellExecute
+***         LPARAMETERS lcFileName, lcWorkDir, lcOperation
+***         
+***         lcWorkDir=IIF(type("lcWorkDir")="C",lcWorkDir,"")
+***         lcOperation=IIF(type("lcOperation")="C",lcOperation,"Open")
+***         
+***         DECLARE INTEGER ShellExecute ;
+***             IN SHELL32.DLL ;
+***             INTEGER nWinHandle,;
+***             STRING cOperation,;   
+***             STRING cFileName,;
+***             STRING cParameters,;
+***             STRING cDirectory,;
+***             INTEGER nShowWindow
+***            
+***         RETURN ShellExecute(0,lcOperation,lcFilename,"",lcWorkDir,1)
+***         ENDFUNC
+***         * ShellExecute
+
+************************************************************************
+* wwAPI :: CopyFile
+*********************************
+***  Function: Copies File. Faster than Fox Copy and handles
+***            errors internally.
+***      Pass: tcSource -  Source File
+***            tcTarget -  Target File
+***            tnFlag   -  0* override, 1 don't
+***    Return: .T. or .F.
+************************************************************************
+FUNCTION CopyFile
+LPARAMETERS lcSource, lcTarget,nFlag
+LOCAL lnRetVal 
+
+*** Copy File and overwrite
+nFlag=IIF(type("nFlag")="N",nFlag,0)
+
+DECLARE INTEGER CopyFile ;
+   IN WIN32API ;
+   STRING @cSource,;
+   STRING @cTarget,;
+   INTEGER nFlag
+
+lnRetVal=CopyFile(@lcSource,@lcTarget,nFlag)
+
+RETURN IIF(lnRetVal=0,.F.,.T.)
+ENDPROC
+* CopyFile
+
+FUNCTION GetUserName
+
+
+DECLARE INTEGER GetUserName ;
+     IN WIN32API ;
+     STRING@ cComputerName,;
+     INTEGER@ nSize
+
+lcComputer=SPACE(80)
+lnSize=80
+
+=GetUserName(@lcComputer,@lnSize)
+IF lnSize < 2
+   RETURN ""
+ENDIF   
+
+RETURN SUBSTR(lcComputer,1,lnSize-1)
+
+FUNCTION GetComputerName
+************************************************************************
+* wwAPI :: GetComputerName
+*********************************
+***  Function: Returns the name of the current machine
+***    Return: Name of the computer
+************************************************************************
+
+DECLARE INTEGER GetComputerName ;
+     IN WIN32API ;
+     STRING@ cComputerName,;
+     INTEGER@ nSize
+
+lcComputer=SPACE(80)
+lnSize=80
+
+=GetComputername(@lcComputer,@lnSize)
+IF lnSize < 2
+   RETURN ""
+ENDIF   
+
+RETURN SUBSTR(lcComputer,1,lnSize)
+ENDFUNC
+* GetComputerName
+
+
+FUNCTION LogonUser
+************************************************************************
+* wwAPI :: LogonUser
+*********************************
+***  Function: Check whether a username and password is valid
+***    Assume: Account checking must have admin rights
+***      Pass: Username, Password and optionally a server
+***    Return: .T. or .F.
+************************************************************************
+LPARAMETERS lcUsername, lcPassword, lcServer
+
+IF EMPTY(lcUsername)
+   RETURN .F.
+ENDIF
+IF EMPTY(lcPassword)
+   lcPassword = ""
+ENDIF
+IF EMPTY(lcServer)
+   lcServer = "."
+ENDIF         
+
+#define LOGON32_LOGON_INTERACTIVE   2
+#define LOGON32_LOGON_NETWORK       3
+#define LOGON32_LOGON_BATCH         4
+#define LOGON32_LOGON_SERVICE       5
+
+#define LOGON32_PROVIDER_DEFAULT    0
+
+DECLARE INTEGER LogonUser in WIN32API ;
+       String lcUser,;
+       String lcServer,;
+       String lcPassword,;
+       INTEGER dwLogonType,;
+       Integer dwProvider,;
+       Integer @dwToken
+       
+lnToken = 0
+lnResult = LogonUser(lcUsername,lcServer,lcPassword,;
+                     LOGON32_LOGON_NETWORK,LOGON32_PROVIDER_DEFAULT,@lnToken) 
+
+DECLARE INTEGER CloseHandle IN WIN32API INTEGER
+CloseHandle(lnToken)
+
+RETURN IIF(lnResult=1,.T.,.F.)
+ENDFUNC
+* wwAPI :: LogonUser
+
+FUNCTION GetSystemDir
+************************************************************************
+* wwAPI :: GetSystemDir
+*********************************
+***  Function: Returns the Windows System directory path
+***      Pass: llWindowsDir - Optional: Retrieve the Windows dir
+***    Return: Windows System directory or "" if failed
+************************************************************************
+LPARAMETER llWindowsDir
+LOCAL lcPath, lnSize
+
+lcPath=SPACE(256)
+
+IF !llWindowsDir
+	DECLARE INTEGER GetSystemDirectory ;
+	   IN Win32API ;
+	   STRING  @pszSysPath,;
+	   INTEGER cchSysPath
+	lnsize=GetSystemDirectory(@lcPath,256) 
+ELSE
+	DECLARE INTEGER GetWindowsDirectory ;
+	   IN Win32API ;
+	   STRING  @pszSysPath,;
+	   INTEGER cchSysPath
+	lnsize=GetWindowsDirectory(@lcPath,256) 
+ENDIF 
+
+if lnSize > 0
+   RETURN SUBSTR(lcPath,1,lnSize) + "\"
+ENDIF
+   
+RETURN ""
+ENDFUNC
+* GetSystemDir
+   
+
+FUNCTION GetCurrentThread
+************************************************************************
+* wwAPI :: GetCurrentThread
+*********************************
+***  Function: Returns handle to the current Process/Thread
+***    Return: Process Handle or 0
+************************************************************************
+RETURN GetCurrentThread()
+ENDFUNC
+* GetProcess
+
+************************************************************************
+* wwAPI :: GetThreadPriority
+*********************************
+***  Function: Gets the current Priority setting of the thread.
+***            Use to save and reset priority when bumping it up.
+***      Pass: tnThreadHandle
+************************************************************************
+FUNCTION GetThreadPriority
+LPARAMETER tnThreadHandle
+RETURN GetThreadPriority(tnThreadHandle)
+ENDFUNC
+* GetThreadPriority
+
+FUNCTION SetThreadPriority
+************************************************************************
+* wwAPI :: SetThreadPriority
+*********************************
+***  Function: Sets a thread process priority. Can dramatically
+***            increase performance of a task.
+***      Pass: tnThreadHandle
+***            tnPriority         0 - Normal
+***                               1 - Above Normal
+***                               2 - Highest Priority
+***                              15 - Time Critical
+***                              31 - Real Time (doesn't work w/ Win95)
+************************************************************************
+LPARAMETER tnThreadHandle,tnPriority
+RETURN SetThreadPriority(tnThreadHandle,tnPriority)
+ENDFUNC
+* GetThreadPriority
+
+
+FUNCTION PlayWave
+************************************************************************
+* wwapi :: PlayWave
+*******************
+***     Class: WinAPI
+***  Function: Plays the Wave File or WIN.INI
+***            [Sounds] Entry specified in the
+***            parameter. If the .WAV file or
+***            System Sound can't be found,
+***            SystemDefault beep is played
+***    Assume: Runs only under Windows
+***            uses MMSYSTEM.DLL  (Win 3.1)
+***                 WINMM.DLL  (32 bit Win)
+***      Pass: pcWaveFile - Full path of Wave file
+***                         or System Sound Entry
+***            pnPlayType - 1 - sound plays in background (default)
+***                         0 - sound plays - app waits
+***                         2 - No default sound if file doesn't exist
+***                         4 - Kill currently playing sound 
+***                         8 - Continous  
+***                         Values can be added together for combinations
+***  Examples:
+***    do PlayWav with "SystemQuestion"
+***    do PlayWav with "C:\Windows\System\Ding.wav"
+***    if PlayWav("SystemAsterisk")
+***
+***    Return: .t. if Wave was played .f. otherwise
+*************************************************************************
+LPARAMETER pcWaveFile,pnPlayType
+LOCAL lhPlaySnd,llRetVal
+
+pnPlayType=IIF(TYPE("pnPlayType")="N",pnPlayType,1)
+
+llRetVal=.f.
+
+DECLARE INTEGER PlaySound ;
+   IN WINMM.dll  ;
+   STRING cWave, INTEGER nModule, INTEGER nType
+
+IF PlaySound(pcWaveFile,0,pnPlayType)=1
+   llRetVal=.t.
+ENDIF
+
+RETURN llRetVal
+ENDFUNC
+*EOF PLAYWAV
+
+
+FUNCTION CreateGUID
+************************************************************************
+* wwapi::CreateGUID
+********************
+***    Author: Rick Strahl, West Wind Technologies
+***            http://www.west-wind.com/
+***  Modified: 01/26/98
+***  Function: Creates a globally unique identifier using Win32
+***            COM services. The vlaue is guaranteed to be unique
+***    Format: {9F47F480-9641-11D1-A3D0-00600889F23B}
+***    Return: GUID as a string or "" if the function failed 
+*************************************************************************
+LPARAMETERS llRaw
+LOCAL lcStruc_GUID, lcGUID, lnSize
+
+DECLARE INTEGER CoCreateGuid ;
+  IN Ole32.dll ;
+  STRING @lcGUIDStruc
+  
+DECLARE INTEGER StringFromGUID2 ;
+  IN Ole32.dll ;
+  STRING cGUIDStruc, ;
+  STRING @cGUID, ;
+  LONG nSize
+  
+*** Simulate GUID strcuture with a string
+lcStruc_GUID = REPLICATE(" ",16) 
+lcGUID = REPLICATE(" ",80)
+lnSize = LEN(lcGUID) / 2
+IF CoCreateGuid(@lcStruc_GUID) # 0
+   RETURN ""
+ENDIF
+
+IF llRaw
+   RETURN lcStruc_GUID
+ENDIF   
+
+*** Now convert the structure to the GUID string
+IF StringFromGUID2(lcStruc_GUID,@lcGuid,lnSize) = 0
+  RETURN ""
+ENDIF
+
+*** String is UniCode so we must convert to ANSI
+RETURN  StrConv(LEFT(lcGUID,76),6)
+* Eof CreateGUID
+
+FUNCTION Sleep(lnMilliSecs)
+************************************************************************
+* wwAPI :: Sleep
+*********************************
+***  Function: Puts the computer into idle state. More efficient and
+***            no keyboard interface than Inkey()
+***      Pass: tnMilliseconds
+***    Return: nothing
+************************************************************************
+
+lnMillisecs=IIF(type("lnMillisecs")="N",lnMillisecs,0)
+
+DECLARE Sleep ;
+  IN WIN32API ;
+  INTEGER nMillisecs
+ 	
+=Sleep(lnMilliSecs) 	
+ENDFUNC
+* Sleep
+
+************************************************************************
+* wwAPI :: GetLastError
+*********************************
+***  Function:
+***    Assume:
+***      Pass:
+***    Return:
+************************************************************************
+FUNCTION GetLastError
+DECLARE INTEGER GetLastError IN Win32API 
+RETURN GetLastError()
+ENDFUNC
+* wwAPI :: GetLastError
+
+************************************************************************
+* wwAPI :: GetSystemErrorMsg
+*********************************
+***  Function: Returns the Message text for a Win32API error code.
+***      Pass: lnErrorNo  -  WIN32 Error Code
+***    Return: Error Message or "" if not found
+************************************************************************
+FUNCTION GetSystemErrorMsg
+LPARAMETERS lnErrorNo,lcDLL
+LOCAL szMsgBuffer,lnSize
+
+szMsgBuffer=SPACE(500)
+
+DECLARE INTEGER FormatMessage ;
+     IN WIN32API ;
+     INTEGER dwFlags ,;
+     STRING lpvSource,;
+     INTEGER dwMsgId,;
+     INTEGER dwLangId,;
+     STRING @lpBuffer,;
+     INTEGER nSize,;
+     INTEGER  Arguments
+
+lnSize=FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,0,lnErrorNo,;
+                     0,@szMsgBuffer,LEN(szMsgBuffer),0)
+
+IF LEN(szMsgBUffer) > 1
+  szMsgBuffer=SUBSTR(szMsgBuffer,1, lnSize-1 )
+ELSE
+  szMsgBuffer=""  
+ENDIF
+    		   
+RETURN szMsgBuffer
+
+
+#IF .F.    &&!DEBUGMODE
+************************************************************************
+* wwAPI :: Error
+*********************************
+***  Function: Sets an Error number of the error occurred
+************************************************************************
+FUNCTION Error
+LPARAMETERS nError, cMethod, nLine
+THIS.nLastError=nError
+ENDFUNC
+* Error
+#ENDIF
+
+ENDDEFINE
+*EOC wwAPI
+
+
+************************************************************************
+FUNCTION GetTimeZone
+*********************************
+***  Function: Returns the TimeZone offset from GMT including
+***            daylight savings. Result is returned in minutes.
+************************************************************************
+
+DECLARE integer GetTimeZoneInformation IN Win32API ;
+   STRING @ TimeZoneStruct
+   
+lcTZ = SPACE(256)
+
+lnDayLightSavings = GetTimeZoneInformation(@lcTZ)
+
+lnOffset = CharToBin(SUBSTR(lcTZ,1,4))
+
+*** Subtract an hour if daylight savings is active
+IF lnDaylightSavings = 2
+   lnOffset = lnOffset - 60
+ENDIF
+
+RETURN lnOffSet
+
+
+**** Binary Numeric conversion routines!
+*** Converts DWORD string to binary unsigned integer
+FUNCTION CharToBin(tcWord)
+  LOCAL i, lnWord
+
+  lnWord = 0
+  FOR i = 1 TO LEN(tcWord)
+    lnWord = lnWord + (ASC(SUBSTR(tcWord, i, 1)) * (2 ^ (8 * (i - 1))))
+  ENDFOR
+
+RETURN lnWord
diff --git a/comun_plugins/utils/wwipstuff.dll b/comun_plugins/utils/wwipstuff.dll
new file mode 100644
index 0000000..bc65953
Binary files /dev/null and b/comun_plugins/utils/wwipstuff.dll differ
diff --git a/comun_plugins/utils/wwutils.PRG b/comun_plugins/utils/wwutils.PRG
new file mode 100644
index 0000000..e1c4b66
--- /dev/null
+++ b/comun_plugins/utils/wwutils.PRG
@@ -0,0 +1,1731 @@
+************************************************************************
+* FUNCTION Utils
+******************
+***    Author: Rick Strahl
+***            (c) West Wind Technologies, 1995-98
+***   Contact: (541) 386-2087  / rstrahl@west-wind.com
+***  Modified: 12/22/97
+***  Function: A set of utility classes and functions used by 
+***            the various classes and processing code.
+*************************************************************************
+#INCLUDE FOXPRO.H
+#INCLUDE WCONNECT.H
+
+SET PROCEDURE TO wwUtils ADDITIVE
+
+
+*************************************************************
+DEFINE CLASS wwEnv AS Custom
+*************************************************************
+***  Function: Saves environment settings.
+*************************************************************
+
+*** Custom Properties
+PROTECTED cSetting,vOldValue
+
+
+************************************************************************
+* wwEnv :: Init
+*********************************
+***  Function: Saves and restores environment settings
+***    Assume: Limited to simple ON/OFF settings
+***            Very limited!!! Test carefully.
+***      Pass: tcSetting  -   SET value to set
+***            tvNewValue -   Value to set to
+***    Return:
+************************************************************************
+FUNCTION Init
+LPARAMETERS tcSetting,tvNewValue
+THIS.Set(tcSetting, tvNewValue)
+ENDFUNC
+* Init
+
+************************************************************************
+* wwEnv :: Set
+*********************************
+FUNCTION Set
+LPARAMETERS tcSetting,tvNewValue
+THIS.cSetting=tcSetting
+
+THIS.vOldValue=SET( tcSetting )
+
+IF TYPE("tvNewValue")="C" AND ;
+   INLIST(UPPER(tvNewValue),"ON","OFF") 
+   SET &tcSetting &tvNewValue
+ELSE
+   SET &tcSetting TO (tvNewValue)   
+ENDIF
+
+ENDFUNC
+* Set
+************************************************************************
+* wwEnv :: Destroy
+*********************************
+FUNCTION Destroy
+LOCAL lcSetting,lvValue
+
+lcSetting=THIS.cSetting
+lvValue=THIS.vOldValue
+
+IF TYPE("lvValue")="C" AND ;
+   INLIST(UPPER(lvValue),"ON","OFF") 
+   SET &lcSetting &lvValue
+ELSE
+   SET &lcSetting TO (lvValue)   
+ENDIF
+
+ENDFUNC
+* Destroy
+
+ENDDEFINE
+*EOC wwEnv
+
+
+#IF .F.
+*DEFINE CLASS wwUtils as Custom
+#ENDIF
+
+
+*************************************************************************
+****
+**** STANDALONE FUNCTIONS
+****
+*************************************************************************
+
+************************************************************************
+FUNCTION OpenExclusive
+**********************
+***  Modified: 01/27/96
+***  Function: Tries to open a table exclusively
+***    Assume: Table name can't contain a file name.
+***            Returns .F. for other reasons like file !found etc.
+***            USES wwEVAL object to test for success
+***            Parameters MUST NOT BE LPARAMETERS!!!
+***      Pass: lcTable   -  Name of table to open exclusively
+***    Return: .T. or .F.
+************************************************************************
+PARAMETERS lcTable, lcAlias
+LOCAL lcOldError, llRetVal, loEval
+
+lcTable=IIF(EMPTY(lcTable),"",lcTable)
+lcAlias=IIF(EMPTY(lcAlias),JustStem(lcTable),lcAlias)
+
+IF EMPTY(lcTable)
+   RETURN .F.
+ENDIF
+
+loEval=CREATE([WWC_wwEval])
+
+*** Use Exclusively to reindex and pack
+IF !USED(lcAlias)
+   loEval.ExecuteCommand("USE (lcTable) EXCLUSIVE IN 0 ALIAS (lcAlias)")
+ELSE
+   SELE (lcAlias)
+   loEval.ExecuteCommand("USE (lcTable) EXCLUSIVE  ALIAS (lcAlias)")
+ENDIF
+
+llRetVal=!loEval.lError
+
+*** Now try to re-open table as shared
+IF !llRetVal
+   USE (lcTable) IN 0 ALIAS(lcAlias)
+ELSE
+   SELE (lcAlias)   
+ENDIF   
+
+RETURN llRetVal
+*EOP OpenExclusive
+
+
+************************************************************************
+FUNCTION File2Var
+******************
+***  Function: Takes a file and returns the contents as a string or
+***            Takes a string and stores it in a file if a second
+***            string parameter is specified.
+***      Pass: tcFilename  -  Name of the file
+***            tcString    -  If specified the string is stored
+***                           in the file specified in tcFileName
+***    Return: file contents as a string
+************************************************************************
+LPARAMETERS tcFileName, tcString
+LOCAL lcRetVal, lnHandle, lnSize
+
+tcFileName=IIF(EMPTY(tcFileName),"",tcFileName)
+
+IF VARTYPE(tcString) # "C"
+   *** File to Text
+   lcRetVal=""
+   
+   *** Make sure file exists and can be opened for READ operation
+   lnHandle=FOPEN(tcFileName,0)
+   IF lnHandle#-1
+     lnSize = FSEEK(lnHandle,0,2)
+     FSEEK(lnHandle,0,0)
+     lcRetVal=FREAD(lnHandle,lnSize)
+     =FCLOSE(lnHandle)
+   ENDIF
+ELSE
+   tcString=IIF(EMPTY(tcString),"",tcString)
+   
+   *** Text to File
+   lnHandle=FCREATE(tcFileName)
+   IF lnHandle=-1
+      RETURN .F.
+   ENDIF
+   =FWRITE(lnHandle,tcString)
+   =FCLOSE(lnHandle)
+   RETURN .T.
+ENDIF
+
+RETURN lcRetVal
+*EOP File2Var
+
+************************************************************************
+FUNCTION Extract
+******************
+***  Function: Extracts a text value between two delimiters
+***    Assume: Delimiters case insensitive
+***            The first instance only is retrieved. Idea is
+***            to translate the delims as you go...
+***      Pass: lcString   -  Entire string
+***			   lcDelim1   -  The starting delimiter
+***            lcDelim2	  -  Ending delimiter
+***            lcDelim3	  -  Alternate ending delimiter
+***            llEndOk	  -  End of line is OK
+***    Return: Text between delimiters or ""
+*************************************************************************
+PARAMETERS lcString,lcDelim1,lcDelim2,lcDelim3, llEndOk
+PRIVATE lnX,lnLocation,lcRetVal,lcChar,lnNewString,lnEnd
+
+#IF wwVFPVersion > 6
+   IF EMPTY(lcDelim3) 
+      RETURN STREXTRACT(lcString,lcDelim1,lcDelim2,1,1 + IIF(llendOk,2,0) )
+   ENDIF
+#ENDIF
+
+lcDelim1=IIF(LEN(lcDelim1)=0,",",lcDelim1)
+lcDelim2=IIF(LEN(lcDelim2)=0,"z!x",lcDelim2)
+lcDelim3=IIF(EMPTY(lcDelim3),"z!x",lcDelim3)
+
+lnLocation=ATC(lcDelim1,lcString)
+IF lnLocation=0
+   RETURN ""
+ENDIF
+
+lnLocation=lnlocation+len(lcDelim1)
+
+*** Crate a new string of remaining text
+lcNewString=SUBSTR(lcString,lnLocation)
+
+lnEnd=ATC(lcDelim2,lcNewString)
+IF lnEnd>0
+   RETURN SUBSTR(lcNewString,1,lnEnd-1)
+ENDIF   
+*!*	IF lnEnd = 0
+*!*	   *** Empty Delimited string
+*!*	   RETURN ""
+*!*	ENDIF
+   
+lnEnd=ATC(lcDelim3,lcNewString)
+IF lnEnd>0
+   RETURN SUBSTR(lcNewString,1,lnEnd-1)
+ENDIF   
+
+IF llEndOk
+  *** Return to the end of the line
+  RETURN SUBSTR(lcNewString,1)
+ENDIF
+
+RETURN ""
+*EOP RetValue
+
+************************************************************************
+* wwUtils :: ReplaceDelimitedText
+****************************************
+***  Function: Replaces text between a set of delimiters with 
+***            a new string leaving the delimiters intact
+***    Assume: The delimited block MUST have at least 1 character
+***            in it even if it is blank or a CRLF
+***      Pass: lcSource - Full Source String
+***            lcStart  - Start delimiter
+***            lcEnd    - End Delimiter
+***            lcReplace -  Text to replace between delimiters
+***    Return: Updated String  
+************************************************************************
+FUNCTION ReplaceText
+LPARAMETERS lcSource, lcStart, lcEnd, lcReplace
+
+lcExtract = Extract(lcSource,lcStart,lcEnd,,.T.)
+  
+RETURN STRTRAN(lcSource,lcStart + lcExtract + lcEnd,lcStart + lcReplace + lcEnd)
+ENDFUNC
+
+
+************************************************************************
+FUNCTION Path
+******************
+***  Function: Adds or deletes items from the path string
+***      Pass: pcPathName   -   Filename
+***            pcMethod     -   *"ADD","DELETE"
+***    Return: New Path or ""
+************************************************************************
+PARAMETERS pcPath,pcMethod
+LOCAL lcOldPath
+
+IF VARTYPE(pcMethod) # "C"
+   pcMethod = "ADD"
+ENDIF
+
+IF EMPTY(pcPath)
+   RETURN
+ENDIF
+   
+pcPath=ADDBS(LOWER(TRIM(pcPath)))
+lcOldPath=LOWER(SET("PATH"))
+
+IF pcMethod="ADD"
+    IF EMPTY(pcPath) .OR. ;
+       !Directory(pcPath)
+       RETURN ""
+   ENDIF
+   IF AT(";" + pcPath + ";" ,";" + lcOldPath + ";")>0
+      RETURN ""
+   ENDIF
+   lcOldPath=lcOldPath+";"+pcPath
+ELSE
+   IF AT(";" + pcPath + ";" ,";" + lcOldPath + ";") < 1
+      RETURN ""
+   ENDIF
+   lcOldPath=STRTRAN(lcOldPath + ";" ,";" +pcPath+";",";")
+   lcOldPath = SUBSTR(lcOldPath,1,LEN(lcOldPath)-1)
+ENDIF   
+
+SET PATH TO &lcOldPath
+
+RETURN lcOldPath
+*EOP PATH
+
+
+************************************************************************
+FUNCTION DomainName
+*******************
+***  Modified: 04/13/96
+***  Function: Retrieves a Domain name from an URL
+***    Assume: URL starts with http:// - // required!
+***      Pass: lcUrl         -  URL to retrieve name from
+***            llNoStripWWW  -  Don't strip www.
+***    Return: Domain Name or ""
+*************************************************************************
+LPARAMETER lcUrl, llNoStripWWW
+lcText=STRTRAN(EXTRACT(lower(lcUrl),"//","/"," "),"/","")
+IF !llNoStripWWW
+  lcText=STRTRAN(lcText,"www.","")
+ENDIF
+RETURN PADR(lcText,50)
+
+
+
+************************************************************************
+FUNCTION ShowHTML
+*****************
+***  Function: Takes an HTML string and displays it in the default
+***            browser. 
+***    Assume: Uses a file to store HTML temporarily.
+***            For this reason there may be concurrency issues
+***            unless you change the file for each use
+***      Pass: lcHTML       -   HTML to display
+***            lcFile       -   Temporary File to use (Optional)
+***            loWebBrowser -   Web Browser control ref (Optional)
+************************************************************************
+LPARAMETERS lcHTML, lcFile, loWebBrowser
+
+lcHTML=IIF(EMPTY(lcHTML),"",lcHTML)
+lcFile=IIF(EMPTY(lcFile),SYS(2023)+"\ww_HTMLView.htm",lcFile)
+
+File2Var(lcFile,lcHTML)
+
+IF TYPE("loWebBrowser") = "O"
+   loWebBrowser.Navigate(lcFile)
+ELSE
+   IF TYPE("_oscreenx") = "O"
+      _oscreenx.Navigate(lcFile)
+   ENDIF
+*!*	   IF lower(JUSTEXT(lcFile)) = "txt"
+*!*	      MODI COMM (lcFile) IN MACDESKTOP
+*!*	   ELSE
+      =GoUrl(lcFile)
+*!*	   ENDIF
+ENDIF   
+
+RETURN
+*EOP ShowHTML
+
+************************************************************************
+FUNCTION ShowXML
+*****************
+***  Function: Takes an XML string and displays it in the default
+***            browser. 
+***    Assume: Uses a file to store HTML temporarily.
+***            For this reason there may be concurrency issues
+***            unless you change the file for each use
+***      Pass: lcHTML       -   HTML to display
+***            lcFile       -   Temporary File to use (Optional)
+***            loWebBrowser -   Web Browser control ref (Optional)
+************************************************************************
+LPARAMETERS lcHTML, lcFile, loWebBrowser
+IF EMPTY(lcFile)
+  lcFile=IIF(EMPTY(lcFile),SYS(2023)+"\ww_HTMLView.xml",lcFile)
+ENDIF
+ERASE (lcFile) 
+RETURN ShowHTML(lcHTML,lcFile,loWebBrowser)
+
+************************************************************************
+FUNCTION ShowText
+*****************
+***  Function: Takes an XML string and displays it in the default
+***            browser. 
+***    Assume: Uses a file to store HTML temporarily.
+***            For this reason there may be concurrency issues
+***            unless you change the file for each use
+***      Pass: lcHTML       -   HTML to display
+***            lcFile       -   Temporary File to use (Optional)
+***            loWebBrowser -   Web Browser control ref (Optional)
+************************************************************************
+LPARAMETERS lcHTML, lcFile, loWebBrowser
+IF EMPTY(lcFile)
+  lcFile=IIF(EMPTY(lcFile),SYS(2023)+"\ww_HTMLView.txt",lcFile)
+ENDIF
+
+IF VARTYPE(loWebBrowser) = "C" and loWebBrowser = "MODI"
+   FILE2VAR(lcFile,lcHTML)
+   MODIFY COMMAND (lcFile)
+   RETURN
+ENDIF   
+
+RETURN ShowHTML(lcHTML,lcFile,loWebBrowser)
+
+
+************************************************************************
+FUNCTION IsWinnt
+*****************
+***      Pass: llReturnVersionNumber
+***    Return: .t. or .f.   or Version Number or -1 if not NT
+*************************************************************************
+LPARAMETER llReturnVersionNumber
+
+loAPI=CREATE("wwAPI")
+lcVersion = loAPI.ReadRegistryString(HKEY_LOCAL_MACHINE,;
+           "SOFTWARE\Microsoft\Windows NT\CurrentVersion",;
+           "CurrentVersion")
+                          
+IF !llReturnVersionNumber
+  IF ISNULL(lcVersion)
+     RETURN .F.
+  ELSE
+     RETURN .T.
+  ENDIF
+ENDIF
+
+IF ISNULL(lcVersion)
+   RETURN -1
+ENDIF
+
+RETURN VAL(lcVersion)   
+* IsWinNt
+
+
+
+************************************************************************
+FUNCTION StripHTML
+*******************
+***  Function: Removes HTML tags from the passed text and converts
+***            it to plain text. Note formatting is totally removed!
+***    Assume: only 
and

are translated +*** any < or > in the HTML besides tags will break this +*** function. +*** Pass: lcText - HTML Text to strip +*** lcLTag - Left Tag value ("<") +*** lcRTag - Right Tag Value (">") +*** Return: Stripped HTML text +************************************************************************* +LPARAMETER lcHTMLText, lcLTag, lcRTag + +lcLTag=IIF(EMPTY(lcLTag),"<",lcLTag) +lcRTag=IIF(EMPTY(lcRTag),">",lcRTag) + +IF ATC(lcLTag,lcHTMLText) = 0 + RETURN lcHTMLText +ENDIF + +*** Start by breaking line breaks +lcHTMLText = STRTRAN(lcHTMLText,lcLTag + "BR" + lcRTag,CRLF) +lcHTMLText = STRTRAN(lcHTMLText,lcLTag + "P" + lcRTag,CRLF+CRLF) +lcHTMLText = STRTRAN(lcHTMLText,lcLTag + "br" + lcRTag,CRLF) +lcHTMLText = STRTRAN(lcHTMLText,lcLTag + "p" + lcRTag,CRLF+CRLF) +lcHTMLText = STRTRAN(lcHTMLText," "," ") + +lcExtract = "x" +DO WHILE !EMPTY(lcExtract) + lcExtract = Extract(lcHTMLText,lcLTag,lcRTag) + + IF EMPTY(lcExtract) + EXIT + ENDIF + lcHTMLText = STRTRAN(lcHTMLText,lcLTag+lcExtract+lcRTag,"") +ENDDO + +lcHTMLText = STRTRAN(lcHTMLText,"<","<") +lcHTMLText = STRTRAN(lcHTMLText,">",">") + +RETURN lcHTMLText + +************************************************************************ +FUNCTION HTMLColor +********************************* +*** Function: Converts a FoxPro Color to an HTML Hex color value +*** Pass: lnRGBColor - FoxPro RGB color number - RGB(255,255,255) +*** llNoOutput +*** Return: Hex HTML Color String "#FFFFFF" +************************************************************************ +LPARAMETER lnRGBColor + +lcColor=RIGHT(TRANSFORM(lnRGBColor,"@0"),6) + +*** Fox color is BBGGRR, HTML is RRGGBB + +RETURN "#" + SUBSTR(lcColor,5,2) + SUBSTR(lcColor,3,2) + LEFT(lcColor,2) +* HTMLColor + + +************************************************************************ +FUNCTION CharToBin +****************** +*** Function: Converts a DWORD value in binary string form back into +*** a numeric value +*** Pass: tcWord - Binary string value (from a structure?) +*** Return: numeric value of binary string +************************************************************************* +LPARAMETER tcWord + + LOCAL i, lnWord + + lnWord = 0 + FOR i = 1 TO LEN(tcWord) + lnWord = lnWord + (ASC(SUBSTR(tcWord, i, 1)) * (2 ^ (8 * (i - 1)))) + ENDFOR + +RETURN lnWord + + +**************************************************** +FUNCTION GoUrl +****************** +*** Author: Rick Strahl +*** (c) West Wind Technologies, 1996 +*** Contact: rstrahl@west-wind.com +*** Modified: 03/14/96 +*** Function: Starts associated Web Browser +*** and goes to the specified URL. +*** If Browser is already open it +*** reloads the page. +*** Assume: Works only on Win95 and NT 4.0 +*** Pass: tcUrl - The URL of the site or +*** HTML page to bring up +*** in the Browser +*** Return: 2 - Bad Association (invalid URL) +*** 31 - No application association +*** 29 - Failure to load application +*** 30 - Application is busy +*** +*** Values over 32 indicate success +*** and return an instance handle for +*** the application started (the browser) +**************************************************** +LPARAMETERS tcUrl, tcAction, tcDirectory + +tcUrl=IIF(type("tcUrl")="C",tcUrl,; + "http://www.west-wind.com/") + +tcAction=IIF(type("tcAction")="C",tcAction,"OPEN") + +tcDirectory=IIF(EMPTY(tcDirectory),SYS(2023),tcDirectory) + +DECLARE INTEGER ShellExecute ; + IN SHELL32.dll ; + INTEGER nWinHandle,; + STRING cOperation,; + STRING cFileName,; + STRING cParameters,; + STRING cDirectory,; + INTEGER nShowWindow + +DECLARE INTEGER FindWindow ; + IN WIN32API ; + STRING cNull,STRING cWinName + +RETURN ShellExecute(FindWindow(0,_SCREEN.caption),; + tcAction,tcUrl,; + "",tcDirectory,1) + +************************************************************************ +PROCEDURE StrTranC +****************** +*** Function: Like Strtran but case insensitive +*** Pass: lcString - Entire string +*** lcDelim1 - String to replace +*** lcDelim2 - String to replace with +*** Return: translated string +************************************************************************* +LPARAMETER lcString, lcSource, lcReplace + +#IF wwVFPVersion > 6 + RETURN STRTRAN(lcString,lcSource,lcReplace,1,-1,1) +#ELSE +LOCAL lnAt + +lnAt = 1 +lnReplaceSize = LEN(lcSource) +DO while .T. + lnAt = ATC(lcSource,lcString) + IF lnAT = 0 + RETURN lcString + ENDIF + + lcString = STUFF(lcString,lnAt,lnReplaceSize,lcReplace) +ENDDO + +RETURN lcString +#ENDIF + + +FUNCTION TimeToCStrict +LPARAMETER ltTime, llSQL + +lcCentury = SET("CENTURY") +lcDateMode = SET("DATE") +SET CENTURY ON +SET DATE TO YMD + +IF llSQL + lcDate = "'" + TTOC(ltTime) + "'" +ELSE + lcDate = "{^" + TTOC(ltTime) + "}" +ENDIF + +SET DATE TO &lcDateMode +SET CENTURY &lcCentury +RETURN lcDate + +************************************************************************ +FUNCTION DateToC +****************** +*** Function: Converts a date to string displaying empty dates as blanks +*** rather than displaying the empty date format +*** Pass: ldDate - Date to display +*** Return: Date String or "" if invalid date +************************************************************************* +LPARAMETER ldDate + +IF EMPTY(ldDate) + RETURN "" +ENDIF + +RETURN DTOC(ldDate) +* DateTOC + + + +************************************************************************ +FUNCTION TimeToC +****************** +*** Function: Converts a time to string displaying empty as blanks +*** and formatting the time string properly +*** Pass: ltTime - Date to display (Pass Time, Date or Char) +*** Return: Time String or "" if invalid date (Year is not returned) +************************************************************************* +LPARAMETER ltTime + +IF EMPTY(ltTime) + RETURN "" +ENDIF + +IF VARTYPE(ltTime) $ "DT" + lcTimestamp = TTOC(ltTime) +ELSE + lcTimeStamp = ltTime +ENDIF + +RETURN Substr(lcTimeStamp,1,5)+"/" + Substr(lcTimeStamp,9,8)+lower(Substr(lcTimeStamp,21,2)) +* DateTOC + +************************************************************************ +FUNCTION GetAppStartPath +********************************* +*** Function: Returns the FoxPro start path +*** of the *APPLICATION* +*** under all startmodes supported by VFP. +*** Returns the path of the starting EXE, +*** DLL, APP, PRG/FXP +*** Return: Path as a string with trailing "\" +************************************************************************ + +DO CASE + *** VFP 6 provides ServerName property for COM servers EXE/DLL/MTDLL + CASE INLIST(Application.StartMode,2,3,5) + lcPath = JustPath(Application.ServerName) + +*!* *** Interactive +*!* CASE (Application.StartMode) = 0 +*!* lcPath = SYS(5) + CURDIR() + + *** Active Document + CASE ATC(".APP",SYS(16,0)) > 0 + lcPath = JustPath(SYS(16,0)) + + *** Standalone EXE or VFP Development + OTHERWISE + lcPath = JustPath(SYS(16,0)) + IF ATC("PROCEDURE",lcPath) > 0 + lcPath = SUBSTR(lcPath,RAT(":",lcPath)-1) + ENDIF +ENDCASE + +RETURN AddBs(lcPath) +* EOF GetAppStartPath + + +************************************************************************ +FUNCTION ShortPath +****************** +*** Function: Converts a Long Windows filename into a short +*** 8.3 compliant path/filename +*** Pass: lcPath - Path to check +*** Return: lcShortFileName +************************************************************************* +LPARAMETER lcPath + +DECLARE INTEGER GetShortPathName IN Win32API; + STRING @lpszLongPath, STRING @lpszShortPath,; + INTEGER cchBuffer + +lcPath = lcPath +lcshortname = SPACE(260) +lnlength = LEN(lcshortname) +lnresult = GetShortPathName(@lcPath, @lcshortname, lnlength) +IF lnResult = 0 + RETURN "" +ENDIF +RETURN LEFT(lcShortName,lnResult) + + +************************************************************************ +FUNCTION DeleteFiles +******************** +*** Function: Returns the size of a file +*** Pass: lcFileName - Wildcard File Spec (d:\temp\*.pdf) +*** lnTimeout - Timeout in seconds +*** Return: the size of the file or -1 on error +************************************************************************ +PARAMETERS lcFileSpec, lnTimeout +PRIVATE lnX,lnFiles, loAPI + +lnTimeout=IIF(EMPTY(lnTimeout),300,lnTimeout) + +lnFiles = aDir(laFiles,lcFileSpec) +*loEval = CREATE([WWC_wwEval]) +FOR lnX=1 to lnFiles + ldtime = CTOT( DTOC(laFiles[lnX,3]) + " " + laFiles[lnX,4] ) + IF ldTime + lnTimeout < DateTime() + * loEval.ExecuteCommand( " ERASE (ADDBS(justpath(lcFileSpec)) + laFiles[lnX,1]) " ) + ERASE (ADDBS(justpath(lcFileSpec)) + laFiles[lnX,1]) + ENDIF +ENDFOR + +RETURN .T. +ENDFUNC + + +************************************************************************ +FUNCTION IsDir +****************** +*** Modified: 10/09/97 +*** Function: Checks to see whether a directory exists +*** Pass: lcPath - Path to check +*** Return: .T. or .F. +************************************************************************* +LPARAMETER lcPath +DIMENSION laTemp[1] +IF ADIR(laTemp,lcPath,"DH") < 1 + RETURN .F. +ENDIF +RETURN .T. + +************************************************************************ +FUNCTION FileSize +****************** +*** Function: Returns the size of a file +*** Pass: lcFileName +*** Return: the size of the file or -1 on error +************************************************************************ +LPARAMETERS lcFileName +LOCAL lh, lnSize + +lh = FOPEN(lcFileName) +IF lh = -1 + RETURN -1 +ENDIF + +lnSize = FSEEK(lh, 0, 2) + +FCLOSE(lh) + +RETURN lnSize +*EOP FileSize + + +************************************************************************ +FUNCTION Slash +****************** +*** Function: Converts slashes from DOS -> Web and vice versa +*** Pass: lcPath - Path to convert +*** lcStyle - "WEB" or "DOS" +*** Return: update path +************************************************************************ +LPARAMETER lcPath, lcStyle +lcStyle=IIF(type("lcStyle")="C",UPPER(lcStyle),"") +IF lcStyle="WEB" + lcPath=CHRTRAN(lcPath,"\","/") +ELSE + lcPath=CHRTRAN(lcPath,"/","\") +ENDIF +RETURN lcPath +*EOP LPARAMETER + + + +************************************************************************ +FUNCTION ProgLevel +****************** +*** Function: Returns the current Calling Stack level. Used to check +*** recursive Error calls in Error methods. +************************************************************************* + +FOR lnX=1 to 128 + IF EMPTY(SYS(16,lnX)) + exit + ENDIF +ENDFOR && lnX=1 to 128 + +*** -1 for lnX count - -1 for ProgLevel Call +RETURN lnX - 2 + + +************************************************************************ +FUNCTION AParseString +********************** +*** Modified: 07/03/97 +*** Function: Parses a delimited string into an array +*** Pass: laResult - Array containing the result strings (@) +*** lcString - The full string +*** lcDelimiter - The delimiter string +*** Return: Count of strings or 0 if null string is passed +************************************************************************* +LPARAMETER laResult, lcString, lcDelimiter +LOCAL lnLastPos, lnItemCount, i + +lnItemCount = OCCURS(lcDelimiter,lcString) + 1 +DIMENSION laResult[lnItemCount] + +lnLastPos=1 + +FOR i=1 to lnItemCount + IF i < lnItemCount + laResult[i] = SUBSTR(lcString,lnLastPos, ; + ATC(lcDelimiter,lcString,i) - lnLastPos ) + ELSE + laResult[i] = SUBSTR(lcString,lnLastPos) + ENDIF + lnLastPos = ATC(lcDelimiter,lcString,i) + LEN(lcDelimiter) +ENDFOR + +RETURN lnItemCount + +************************************************************************ +FUNCTION URLDecode +****************** +*** Function: URLDecodes a text string to normal text. +*** Assume: Uses wwIPStuff.dll +*** Pass: lcText - Text string to decode +*** Return: Decoded string or "" +************************************************************************ +LPARAMETERS lcText +LOCAL lnSize, lnLoc, lcHex, lcRetval + +*** Use wwIPStuff for large buffers +IF LEN(lcText) > 255 + DECLARE INTEGER URLDecode ; + IN WWIPSTUFF AS API_URLDecode ; + STRING @cText + + lnSize=API_URLDecode(@lcText) + + IF lnSize > 0 + lcText = SUBSTR(lcText,1,lnSize) + ELSE + lcText = "" + ENDIF + + RETURN lcText +ENDIF + +*** First convert + to spaces +lcText=STRTRAN(lcText,"+"," ") + +*** Handle Hex Encoded Control chars + +lcRetval = "" +DO WHILE .T. + *** Format: %0A ( CHR(10) ) + lnLoc = AT('%',lcText) + + *** No Hex chars + IF lnLoc > LEN(lcText) - 2 OR lnLoc < 1 + lcRetval = lcRetval + lcText + EXIT + ENDIF + + *** Now read the next 2 characters + *** Check for digits - at this point we must have hex pair! + lcHex=SUBSTR(lcText,lnLoc+1,2) + + *** Now concat the string plus the evaled hex code + lcRetval = lcRetval + LEFT(lcText,lnLoc-1) + ; + CHR( EVAL("0x"+lcHex) ) + + *** Trim out the input string + IF LEN(lcText) > lnLoc + 2 + lcText = SUBSTR(lcText,lnLoc+3) + ELSE + EXIT + ENDIF +ENDDO + +RETURN lcRetval +ENDFUNC +* EOF URLDecode + +************************************************************************ +FUNCTION GetURLEncodedKey +********************************* +*** Function: Retrieves a 'parameter' from the query string that +*** is encoded with standard CGI/ISAPI URL encoding. +*** Typical URL encoding looks like this: +*** +*** "User=Rick+Strahl&ID=0011&Address=400+Morton%0A%0DHood+River" +*** +*** Pass: lcVal - Form Variable to retrieve +*** Return: Value or "" +************************************************************************ +LPARAMETERS tcURLString, lcKey +LOCAL lnLoc,c2, cStr, lcURLString, lcRetval + +lcURLString=IIF(EMPTY(tcURLString),"","&"+tcURLString) +lcKey=IIF(EMPTY(lcKey)," ",lcKey) +lcKey=STRTRAN(lcKey," ","+") + +#IF wwVFPVersion > 6 + lcRetval = STREXTRACT(lcUrlString,"&"+lcKey+"=","&",1,3) +#ELSE + lcRetval=Extract(@lcUrlString,"&"+lcKey+"=","&",,.T.) +#ENDIF + +RETURN URLDecode(lcRetval) +ENDFUNC + + +******************************************************** +FUNCTION URLEncode +******************* +*** Function: Encodes a string in URL encoded format +*** for use on URL strings or when passing a +*** POST buffer to wwIPStuff::HTTPGetEx +*** Pass: tcValue - String to encode +*** Return: URLEncoded string or "" +******************************************************** +LPARAMETER tcValue +LOCAL lcResult, lcChar, lnSize, lnX + +*** Large Buffers use the wwIPStuff function +*** for quicker response +if LEN(tcValue) > 255 + lnSize=LEN(tcValue) + tcValue=PADR(tcValue,lnSize * 3) + + DECLARE INTEGER VFPURLEncode ; + IN WWIPSTUFF ; + STRING @cText,; + INTEGER cInputTextSize + + lnSize=VFPUrlEncode(@tcValue,lnSize) + + IF lnSize > 0 + RETURN SUBSTR(TRIM(tcValue),1,lnSize) + ENDIF + RETURN "" +ENDIF + +*** Do it in VFP Code +lcResult="" + +FOR lnX=1 to len(tcValue) + lcChar = SUBSTR(tcValue,lnX,1) + IF ATC(lcChar,"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789") > 0 + lcResult=lcResult + lcChar + LOOP + ENDIF + IF lcChar=" " + lcResult = lcResult + "+" + LOOP + ENDIF + *** Convert others to Hex equivalents + lcResult = lcResult + "%" + RIGHT(transform(ASC(lcChar),"@0"),2) +ENDFOR && lnX=1 to len(tcValue) + +RETURN lcResult +* EOF URLEncode + +#IF WWC_COMPATIBILITY +************************************************************************ +FUNCTION WCSCompile +******************* +*** Modified: 12/31/97 +*** Function: Compiles WCS script files +*** Assume: Requires Runtime version +*** Called by wwMaint using VisualFoxpro.Application +*** Automation object if Runtime is installed. +*** Pass: lcFileSpec - Filespec of files to compile +*** llSilent - No error display +*** Return: "" on success or Error String +************************************************************************* +LPARAMETER lcFileSpec, llSilent +lcFileSpec=IIF(type("lcFileSpec")="C",lcFileSpec,CURDIR() + "*.wcs") + +lcPath = justpath(lcFileSpec) +lcFile = justfname(lcFileSpec) + +IF EMPTY(lcPath) + lcPath = CURDIR() +ENDIF +IF EMPTY(lcFile) + lcFile = "*.WCS" +ENDIF +lcPath = ADDBS(lcPath) + +lcFileSpec = lcPath + lcFile + + +DIMENSION laFiles[1] +lnFiles = ADIR(laFiles,lcFileSpec) +IF lnFiles < 1 + RETURN "No files to compile..." +ENDIF +oScript = CREATE("wwVFPScript",laFiles[1]) +IF TYPE("oScript") <> "O" + Return "Error: Couldn't create wwVFPScriptObject" +ENDIF +oScript.lDeleteGeneratedCode = .F. && Erase WCT files + +FOR lnX = 1 to lnFiles + lcFileName = lcPath+laFiles[lnX,1] + wait window nowait "Compiling "+lcFileName + + *** WCS - Script Text WCX - Compiled WCT - Intermediate + oScript.cFileName = lcFileName + oScript.ConvertPage() + oScript.CompilePage() +ENDFOR + +wait window nowait LTRIM(STR(lnFiles))+ " Web Connection Script file(s) compiled." + +lcErrors = "" +IF !EMPTY(oScript.cCompileErrors) + File2Var(lcPath + "WCS_Script.err",oScript.cCompileErrors) + IF !llSilent + MODI COMM (lcPath + "WCS_Script.err") + ENDIF + lcErrors = File2Var(lcPath + "WCS_Script.err") +ENDIF + +RETURN lcErrors +* EOF WCSCompile +#ENDIF + + + + +* Pass lnX/YFactor by reference +FUNCTION TwipsFactor(lnXFactor, lnYFactor) +LOCAL ln_x_pixels, ln_y_pixels, ln_twips, ln_partial_x, ln_partial_y, ; + ln_hwnd, ln_hdc + +*** Calculate the factor to be used in the HitTest method... +ln_x_pixels = 88 +ln_y_pixels = 90 +ln_twips = 1440 + +DECLARE INTEGER GetActiveWindow IN win32api +DECLARE INTEGER GetActiveWindow IN win32api +DECLARE INTEGER GetDC IN win32api INTEGER iHDC +DECLARE INTEGER GetDeviceCaps IN win32api INTEGER iHDC, INTEGER iIndex + +ln_hwnd = GetActiveWindow() +ln_hdc = GetDC(ln_hwnd) + +ln_partial_x = GetDeviceCaps(ln_hdc, ln_x_pixels) +ln_partial_y = GetDeviceCaps(ln_hdc, ln_x_pixels) + +lnXFactor = ln_twips/ln_partial_x +lnYFactor = ln_twips/ln_partial_y +RETURN + + +************************************************************************ +FUNCTION InputForm +****************** +*** Function: Creates a simple Input form that returns a value +*** Assume: Consists of this function and Form Class +*** Pass: lcValue - Initial value to retrieve +*** lcMessage - The request message +*** lcCaption - Form Caption (_Screen.Caption) +*** lnFormWidth Width of the form +*** lnFieldWidth Widht of the input field +*** lcFormat Format string for the input field +*** lcCancelValue Value returned on a Cancel operation +*** Return: Value or ("" or -1) +************************************************************************ +LPARAMETER lcValue, lcMessage, lcCaption, lnFormWidth, lnFieldWidth, lcFormat,lcCancelValue +PRIVATE pcResult +LOCAL o + +IF PCOUNT() > 6 + pcCancelValue = lcCancelValue +ELSE + pcCancelValue = NULL +ENDIF + +lcValue=IIF(EMPTY(lcValue),"",lcValue) +lcMessage=IIF(EMPTY(lcMessage),"Please enter",lcMessage) +lcCaption=IIF(EMPTY(lcCaption),_SCREEN.Caption,lcCaption) +lnFormWidth=IIF(EMPTY(lnFormWidth),300,lnFormWidth) +lnFieldWidth=IIF(EMPTY(lnFieldWidth),lnFormWidth - 20,lnFieldWidth) +lcFormat=IIF(EMPTY(lcFormat),"@K",lcFormat) + + +lcType = VARTYPE(lcCancelValue) +pcResult = lcValue + +o=CREATE("frmInput") +o.Width = lnFormWidth +o.nFieldWidth = lnFieldWidth +o.Caption = lcCaption +o.cMessage = lcMessage +o.cFormat = lcFormat + +IF lcFormat = "PASSWORD" + o.cFormat = "@K" + o.txtInput.PasswordChar = "*" +ENDIF + + +o.Show() + +IF TYPE("pcResult")="C" + lcValue = TRIM(pcResult) +ELSE + lcValue = pcResult +ENDIF +RETURN lcValue + + +************************************************** +*-- Form: frminput +*-- ParentClass: form +*-- BaseClass: form +DEFINE CLASS frminput AS form + nFieldWidth = 250 + cMessage = "Please enter:" + cFormat = "" + + Top = 0 + Left = 0 + Height = 90 + Width = 300 + ControlBox = .F. + Name = "frmInput" + WindowType = 1 + AutoCenter = .t. + Showwindow = 1 + BorderStyle = 2 + MinButton = .f. + ShowWindow = 1 + MaxButton = .f. + + ADD OBJECT lblMessage AS label WITH ; + AutoSize = .T., ; + Caption = "Message Text:", ; + Height = 17, ; + Left = 7, ; + Top = 11, ; + Width = 81, ; + Name = "lblMessage",; + Font = "Tahoma" ,; + FontSize = 8 + + ADD OBJECT txtinput AS textbox WITH ; + ControlSource = "pcResult", ; + Height = 22, ; + Left = 5, ; + Top = 28, ; + Width = 373, ; + Name = "txtInput",; + Font = "Tahoma" ,; + Default = .T.,; + FontSize = 8 + ADD OBJECT cmdOk AS commandbutton WITH ; + Top = 55, ; + Left = THISFORM.width - 150, ; + Height = 25, ; + Width = 70, ; + Caption = "OK", ; + Default = .T., ; + Fontname="Tahoma",; + Fontsize = 8,; + Cancel = .F.,; + Name = "cmdOK" + + ADD OBJECT cmdCancel AS commandbutton WITH ; + Top = 55, ; + Left = THISFORM.Width - 75, ; + Height = 25, ; + Width = 70, ; + Caption = "\ 0 + THIS.txtInput.Format = THIS.cFormat + ELSE + THIS.txtInput.InputMask = THIS.cFormat + ENDIF + ENDIF + ENDPROC + PROCEDURE cmdOk.Click + RELEASE THISFORM + ENDPROC + PROCEDURE cmdCancel.Click + LOCAL lcType + + IF ISNULL(pcCancelValue) + lcType = TYPE("pcResult") + DO CASE + CASE lcType $ "CM" + pcResult = "" + CASE lcType $ "NIBY" + pcResult = -99999999 + CASE lcType $ "DT" + pcResult = {} + CASE lcType = "L" + pcResult = .f. + ENDCASE + ELSE + pcResult = pcCancelValue + ENDIF + RELEASE THISFORM + ENDPROC +ENDDEFINE +* +*-- EndDefine: frminput +************************************************** + + +************************************************** +FUNCTION IsCOMObject +********************* +*** Function: Checks to see if a COM object +*** or ActiveX control exists +*** Assume: Uses wwAPI +*** Pass: lcProgId - Prog Id of the Class +*** lcClassId - (Optional) If passed in +*** by reference gets ClassId +*** lcClassDescript - (Optional) by ref +*** Return: .T. or .F. +***************************************************** +LPARAMETER lcProgId,lcClassId, lcClassDescript + +IF EMPTY(lcProgId) + RETURN .F. +ENDIF + +loAPI = CREATE("wwAPI") + +*** Retrieve ClassId and Server Name +lcClassId = ; + loAPI.ReadRegistryString(HKEY_CLASSES_ROOT,; + lcProgId + "\CLSID",; + "") +IF ISNULL(lcClassId) + lcClassId = "" + lcClassDescription = "" + RETURN .F. +ENDIF + +lcClassDescript = ; + loAPI.ReadRegistryString(HKEY_CLASSES_ROOT,; + lcProgId,"") + +IF ISNULL(lcClassDescript) + lcClassDescript = "" +ENDIF + +RETURN .T. +* +FUNCTION CopyObject + LPARAMETERS loinput + LOCAL loobject, lafields[1], lnx, lcfield, lctype, llclass, lncount, z, lnlength + IF TYPE("loInput.Class") = "C" + loobject = CREATEOBJECT(loinput.CLASS) + ELSE + loobject = CREATEOBJECT("EMPTY") + ENDIF + lncount = AMEMBERS(lafields, loinput) + FOR lnx = 1 TO lncount + lcfield = LOWER(lafields(lnx)) + IF AT("," + lcfield + ",", "'" + ",activecontrol,classlibrary,baseclass,comment,controls,objects,controlcount," + "class,name,parent,parentalias,parentclass,helpcontextid,whatsthishelpid," + "width,height,top,left,tag,picture,onetomany,childalias,childorder,relationalexpr,timestamp_column,") > 0 + LOOP + ENDIF + lctype = TYPE("loInput." + lcfield) + DO CASE + CASE TYPE('ALEN(loInput.' + lcfield + ')') = "N" + IF TYPE("loObject." + lcfield) = "U" + *!_err=0x1A0A_!(loobject, lcfield + "[1]") + ENDIF + lnlength = ALEN(loinput.&lcfield) + DIMENSION loobject.&lcfield[lnLength] + FOR z = 1 TO lnlength + IF TYPE("loInput." + lcfield + "[z]") = "O" + loobject.&lcfield[z] = CopyObject(EVAL( "loInput." + lcfield + "[z]")) + ELSE + loobject.&lcfield[z] = EVAL("loInput." + lcfield) + ENDIF + ENDFOR + CASE lctype = "O" + IF TYPE("loObject." + lcfield) = "U" + *!_err=0x1A0A_!(loobject, lcfield) + ENDIF + loobject.&lcfield = CopyObject(EVAL("loInput."+lcfield)) + OTHERWISE + IF TYPE("loObject." + lcfield) = "U" + *!_err=0x1A0A_!(loobject, lcfield) + ENDIF + loobject.&lcfield = EVAL("loInput." + lcfield) + ENDCASE + ENDFOR + RETURN loobject +ENDFUNC +* +PROCEDURE CopyObjectProperties + LPARAMETERS loinput, loobject, lnobjectstructureobject + IF (EMPTY(lnobjectstructureobject)) + lnobjectstructure = 1 + ENDIF + IF lnobjectstructureobject = 1 + lncount = AMEMBERS(lafields, loinput) + ELSE + lncount = AMEMBERS(lafields, loobject) + ENDIF + FOR lnx = 1 TO lncount + lcfield = LOWER(lafields(lnx)) + IF AT("," + lcfield + ",", "'" + ",activecontrol,classlibrary,baseclass,comment,controls,objects,controlcount," + "class,name,parent,parentalias,parentclass,helpcontextid,whatsthishelpid," + "width,height,top,left,tag,picture,onetomany,childalias,childorder,relationalexpr,timestamp_column,") > 0 + LOOP + ENDIF + lctype = TYPE("loInput." + lcfield) + IF lctype = "O" .OR. lctype = "U" .OR. TYPE('ALEN(loInput.' + lcfield + ')') = "N" + LOOP + ENDIF + IF lnobjectstructureobject = 1 + IF TYPE("loObject." + lcfield) = "U" + LOOP + ENDIF + ELSE + IF TYPE("loInput." + lcfield) = "U" + LOOP + ENDIF + ENDIF + *_**BA=?? 730 + loobject.&lcfield = EVAL("loInput." + lcfield) + *!_err=0xBB_! 738 + *!_err=0xBE_! + DO CASE + CASE TYPE('ALEN(loInput.' + lcfield + ')') = "N" + CASE lctype = "O" + OTHERWISE + ENDCASE + ENDFOR +ENDPROC + +FUNCTION CacheFile + LPARAMETER lcFilename, lnRefreshseconds + LOCAL lcOutput, lnHandle + lcAlias = ALIAS() + IF USED("wwFileCache") + SELECT wwFilecache + ELSE + CREATE CURSOR wwFileCache (fiLename C (120), tiMeread T, coNtent M) + ENDIF + LOCATE FOR fiLename=LOWER(lcFilename) + IF FOUND() + IF lnRefreshseconds>0 .AND. wwFilecache.tiMeread dcom.txt" + &lcCMD + lcResult = FILETOSTR("DCOM.TXT") + ERASE DCOM.TXT + IF .NOT. EMPTY(lcResult) .AND. ATC("ERROR:", lcResult)>0 + MESSAGEBOX(lcProgid+CHR(13)+"Account: "+lcUsername+CHR(13)+ ; + CHR(13)+lcResult, 48, "DCOM Permissions") + RETURN .F. + ENDIF + ELSE + IF .NOT. loApi.wrIteregistrystring(-2147483646, ; + "SOFTWARE\Classes\CLSID\"+lcClassid,"AppId",lcClassid,.T.) + WAIT WINDOW NOWAIT "Unable to write AppID value..." + RETURN + ENDIF + IF .NOT. loApi.wrIteregistrystring(-2147483648,"AppID\"+lcClassid, ; + CHR(0),CHR(0),.T.) + WAIT WINDOW NOWAIT "Unable to write AppID key..." + RETURN + ENDIF + loApi.wrIteregistrystring(-2147483648,"AppID\"+lcClassid,"", ; + lcServername,.T.) + loApi.wrIteregistrystring(-2147483648,"AppID\"+lcClassid,"RunAs", ; + lcRunas,.T.) + ENDIF + WAIT WINDOW NOWAIT "DCOM security context set to: "+lcRunas + RETURN +ENDFUNC +* +FUNCTION DCOMLaunchPermissions + LPARAMETER lcProgid, lcUsername, lcErrormsg + IF .NOT. EMPTY(lcProgid) + lcClassid = "" + llResult = isComobject(lcProgid,@lcClassid) + IF EMPTY(lcClassid) + WAIT WINDOW "Invalid Prog ID" + RETURN .F. + ENDIF + ELSE + lcClassid = "" + ENDIF + lcPath = FULLPATH("dcompermissions.exe") + lcPath = shOrtpath(lcPath) + IF EMPTY(lcClassid) + lcCmd = "RUN "+lcPath+" -da "+lcClassid+" set "+lcUsername+ ; + " permit > dcom.txt" + _CLIPTEXT = lcCmd + ELSE + lcCmd = "RUN "+lcPath+" -aa "+lcClassid+" set "+lcUsername+ ; + " permit > dcom.txt" + _CLIPTEXT = lcCmd + ENDIF + &lcCMD + lcResult = FILETOSTR("DCOM.TXT") + ERASE DCOM.TXT + IF .NOT. EMPTY(lcResult) .AND. ATC("ERROR:", lcResult)>0 + MESSAGEBOX(lcProgid+CHR(13)+"Account: "+lcUsername+CHR(13)+CHR(13)+ ; + lcResult, 48, "DCOM Permissions") + RETURN .F. + ENDIF + IF EMPTY(lcClassid) + lcCmd = "RUN "+lcPath+" -dl "+lcClassid+" set "+lcUsername+ ; + " permit > dcom.txt" + _CLIPTEXT = lcCmd + ELSE + lcCmd = "RUN "+lcPath+" -al "+lcClassid+" set "+lcUsername+ ; + " permit > dcom.txt" + _CLIPTEXT = lcCmd + ENDIF + &lcCMD + lcResult = FILETOSTR("DCOM.TXT") + ERASE DCOM.TXT + IF .NOT. EMPTY(lcResult) .AND. ATC("ERROR:", lcResult)>0 + MESSAGEBOX(lcProgid+CHR(13)+"Account: "+lcUsername+CHR(13)+CHR(13)+ ; + lcResult, 48, "DCOM Permissions") + RETURN .F. + ENDIF + RETURN +ENDFUNC +* +FUNCTION FixPreTags + LPARAMETER lcHtml, lnColwidth + LOCAL lcPre, lcFixed, lcPrecount, lnAt1, lnAt2 + lnPrecount = 1 + DO WHILE .T. + lnAt1 = ATC("", lcHtml, lnPrecount) + IF lnAt1=0 .OR. lnAt2=0 + EXIT + ENDIF + lcPre = SUBSTR(lcHtml, lnAt1, lnAt2-lnAt1) + lcFixed = STRTRAN(lcPre, "

", CHR(13)+CHR(10)+CHR(13)+CHR(10)) + lcFixed = STRTRAN(lcFixed, "
", CHR(13)+CHR(10)) + lcHtml = STRTRAN(lcHtml, lcPre, lcFixed) + lnPrecount = lnPrecount+1 + ENDDO + RETURN lcHtml +ENDFUNC +* +FUNCTION FixHTMLForDisplay + LPARAMETER lcHtml + lcHTML = STRTRAN(lcHTML,"<","<") + lcHTML = STRTRAN(lcHTML,">",">") + lcHTML = STRTRAN(lcHTML,["],""") + RETURN lcHtml +ENDFUNC +* +FUNCTION DisplayMemo + LPARAMETER lcHtml + lcHtml = STRTRAN(lcHtml, CHR(13)+CHR(10), CHR(13)) + lcHtml = STRTRAN(lcHtml, CHR(10), CHR(13)) + lcHtml = STRTRAN(lcHtml, CHR(13)+CHR(13), "

") + RETURN STRTRAN(lcHtml, CHR(13), "
") +ENDFUNC +* +FUNCTION GetSystemPassword + LPARAMETER llUsername + loApi = NEWOBJECT("wwAPI", "wwapi.prg") + IF .NOT. llUsername + lcPass = loApi.reAdregistrystring("HKLM", ; + "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", ; + "DefaultPassword") + ELSE + lcPass = loApi.reAdregistrystring("HKLM", ; + "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", ; + "DefaultUserName") + ENDIF + IF ISNULL(lcPass) + RETURN "" + ENDIF + RETURN lcPass +ENDFUNC +* +FUNCTION GetPassword + LPARAMETER lcMessage + IF EMPTY(lcMessage) + lcMessage = "Please enter your password" + ENDIF + RETURN inPutform(SPACE(20),lcMessage,"Password Entry", , ,"PASSWORD") +ENDFUNC +* +FUNCTION IsDotNet + LPARAMETER lcFrameworkpath, lcVersion + LOCAL loApi, as, wwApi + lcVersion = "" + lcFrameworkpath = "" + loApi = CREATEOBJECT("wwAPI") + lcWindir = loApi.geTsystemdir(.T.) + lcVersion = loApi.reAdregistrystring(-2147483646, ; + "Software\Microsoft\ASP.Net","RootVer") + IF ISNULL(lcFrameworkpath) + RETURN .F. + ENDIF + lcFrameworkpath = ADDBS(loApi.reAdregistrystring(-2147483646, ; + "Software\Microsoft\ASP.Net\"+lcVersion,"Path")) + RETURN .T. +ENDFUNC +* +FUNCTION MergeText + LPARAMETER tcString, tcDelimiter, tcDelimiter2, llNoaspsyntax + LOCAL __Loeval + __Loeval = CREATEOBJECT('wwEval') + RETURN __Loeval.meRgetext(@tcString,tcDelimiter,tcDelimiter2,llNoaspsyntax) +ENDFUNC +* +FUNCTION MimeDateTime + LPARAMETER lvDatetime + LOCAL lcDays, lcMonths, lnCount, lcMonth, ltTime, lnOffset, lnOff, lnDiff + lcMonths = "JanFebMarAprMayJunJulAugSepOctNovDec" + IF VARTYPE(lvDatetime)="C" + DIMENSION laParts[1] + lnCount = apArsestring(@laParts,lvDatetime," ") + IF lnCount<5 + RETURN {} + ENDIF + lcMonth = TRANSFORM((ATC(laParts(3), lcMonths)+2)/3) + ltTime = CTOT(lcMonth+"/"+laParts(2)+"/"+laParts(4)+" "+laParts(5)) + IF lnCount<6 + RETURN ltTime + ENDIF + lnOffset = geTtimezone()/60 + lnOff = VAL(laParts(6))/100 + lnDiff = (lnOffset+lnOff)*3600 + RETURN ltTime-lnDiff + ELSE + IF EMPTY(lvDatetime) + lvDatetime = DATETIME() + ENDIF + lnDay = DOW(lvDatetime) + IF lnDay=0 + RETURN "" + ENDIF + lcDays = "SunMonTueWedThuFriSat" + lcMime = SUBSTR(lcDays, ((lnDay-1)*3)+1, 3)+", "+ ; + TRANSFORM(DAY(lvDatetime))+" " + lcMime = lcMime+SUBSTR(lcMonths, ((MONTH(lvDatetime)-1)*3)+1, 3)+ ; + " "+TRANSFORM(YEAR(lvDatetime))+" "+PADL(HOUR(lvDatetime), ; + 2, "0")+":"+PADL(MINUTE(lvDatetime), 2, "0")+":"+ ; + PADL(SEC(lvDatetime), 2, "0") + lnOffset = geTtimezone()/60 + RETURN lcMime+IIF(lnOffset>0, " -", " +")+ ; + PADL(TRANSFORM(ABS(lnOffset)), 2, "0")+"00" + ENDIF +ENDFUNC +* +FUNCTION PropertyDump + LPARAMETER loObject + LOCAL lnX, lnCount, lcOutput + lnCount = AMEMBERS(laFields, loObject) + lcOutput = "" + FOR lnX = 1 TO lnCount + lcType = TYPE("loObject."+laFields(lnX)) + IF ATC(lcType, "UO")=0 + lvValue = EVALUATE("loObject."+laFields(lnX)) + IF lcType="C" .AND. LEN(lvValue)>80 + lvValue = LEFT(lvValue, 80) + ENDIF + lcOutput = lcOutput+CHR(13)+CHR(10)+LOWER(laFields(lnX))+" = "+ ; + ALLTRIM(TRANSFORM(lvValue, "")) + ELSE + lcOutput = lcOutput+CHR(13)+CHR(10)+LOWER(laFields(lnX))+" = "+ ; + IIF(TYPE("loObject."+laFields(lnX))="O", "Object", ; + "NULL") + ENDIF + ENDFOR + RETURN lcOutput +ENDFUNC +* diff --git a/config.fpw b/config.fpw new file mode 100644 index 0000000..bdd89ba --- /dev/null +++ b/config.fpw @@ -0,0 +1,45 @@ + + +SCREEN = OFF + + +_STARTUP = "" + +* to eliminate load time: +_BROWSER = "" +_SPELLCHK = "" +_GENMENU = "" +_GENGRAPH = "" +_GENXTAB = "" +_COVERAGE = "" +_SCCTEXT = "" +_CONVERTER = "" +_TRANSPORTER = "" +_BUILDER = "" +_WIZARD = "" + +* other special CONFIG.FPW settings you may wish to change: +* (these are the defaults) +MVCOUNT = 1025 +OUTSHOW = ON + +* Set other global settings here if you like, for example: +RESOURCE = OFF +_THROTTLE = 0 + +* See the application object's SetDataSessionSets() method +* for some additional settings you +* may like to use in your config file. +* The following are not the default settings, +* (and ordinarily will be taken care of in the +* Load of private-session forms and formsets): +TALK = OFF +MULTILOCKS = ON +EXCLUSIVE = OFF +SAFETY = OFF +editwork=c:\ +sortwork=c:\ +tmpfiles=c:\ +progwork=c:\ +STACKSIZE = 512 +CODEPAGE = 1252 \ No newline at end of file diff --git a/roaauto.exe b/roaauto.exe new file mode 100644 index 0000000..6321032 Binary files /dev/null and b/roaauto.exe differ diff --git a/roaauto.pjt b/roaauto.pjt new file mode 100644 index 0000000..140f9ed Binary files /dev/null and b/roaauto.pjt differ diff --git a/roaauto.pjx b/roaauto.pjx new file mode 100644 index 0000000..63f2503 Binary files /dev/null and b/roaauto.pjx differ diff --git a/roaauto_instructiuni.txt b/roaauto_instructiuni.txt new file mode 100644 index 0000000..465d533 --- /dev/null +++ b/roaauto_instructiuni.txt @@ -0,0 +1,181 @@ +Manual ROA Service Auto (ROAAUTO) + +Aplicatia ROAAUTO este realizata pentru managementul activitatii de service auto si are ca scop urmarirea completa a ciclului de executie a reparatiilor auto, de la intrarea autovehiculului in service pana la emiterea facturii de reparatii. + +Ciclul de executie: +1. Generarea comenzii (documentul care insoteste autovehiculul pe tot parcursul reparatiei); +2. Normare pe operatii a reparatiilor ce vor fi efectutate, precum si repartizarea pe mecanici a manoperei aferente acestor operatii; +3. Inregistrarea consumului de materiale pentru reparatie în programul "ROA Gestiune" (ROAGEST) +4. Verificarea si validarea devizului de reparatii; +5. Emiterea devizului si facturarea. Se pot emite facturi de avans și/sau finale. Se poate emite inclusiv o factura pentru mai multe comenzi ale aceluiasi client. + + +Rapoarte: +- facturi emise in luna aleasa; +- rapoarte de verificare a unuia sau a mai multor articole (pret vanzare, numar de bucati pe comanda si daca a fost facturata comanda, stoc precedent, intrari in luna, iesiri in luna, stoc final); +- rapoarte despre productia realizata si nefacturata (productie neterminata): bonuri materiale pe comenzi, pe responsabili, pe sectii, valori materiale bonate pe comenzi nefacturate; +- rapoarte despre manopera: manopera totala, manopera detaliata pe comenzi sau pe operatii pentru unul sau toti mecanicii, manopera pe comenzi inchise pe sectie; +- rapoarte despre orele de manopera in legatura cu societatile de asigurare, pe anumite perioade; +- rapoarte de salarizare a personalului direct productiv in functie de operatiunile de manopera executate pe comenzi; +- raport de verificare a veniturilor provenite din manopera si materiale; + +- facturile emise: pe clienti, pe asiguratori, facturi de ITP, spalare, pe sectii; +- comenzi validate pe marci de masini; +- facturare automata a devizelor; +- centralizatoare de comenzi validate; + +Normative de reparatii: +Programul este insotit de normative de reparatii pentru mai multe tipuri de autovehicule generat de utilizatori, existand posibilitatea ca aceasta baza de date sa fie completata si de catre utilizator. + + +1. Pagina "Configurare" +Clienți. Listă clienți și vehicule +Mecanici. Listă mecanici +Secții. Listă secții/centre de cost +Asiguratori. Listă asiguratori și inspectori +Mărci mașini. Listă mărci și modele mașini +Dealeri +Delegați. Listă delegați facturi +Ansamble. Ansamble vehicule (se folosesc la normative) +Norme. Normative operații service +Prețuri. Listă prețuri service +Serii numere. Inițializare plaje numere comenzi, facturi, bonuri fiscale, chitanțe + +Optiuni + +I. Setari comnezi si facturare +Setari legate facturare ITP (sectia) +419. Clienţi - creditori (P) +707. Venituri din vânzarea mărfurilor +4111. Clienţi (A) +667. Cheltuieli privind sconturile acordate (Sconturile sunt reduceri financiare acordate pentru plata anticipată a unei datorii) + +II. Setari manopera : Pretul manopera/regie + +III. Listare facturare si alte setari : Se aleg datele care se vor/nu se vor sa apara pe factura si aspectul + + +2. Pagina "Comenzi" +2.1 Generare comandă +- Se deschide comandă nouă +- Se alege tipul de comanda( post-garantie/ in garantie / regie / pregatire / productie ) +Comenzile tip post-garanție și garanție se închid prin factură. +Comanda tip regie se închide prin validare. +- Se alege clientul și vehiculul +- Se completeaza operațiile cerute de client și opțional observații și daune constatate, nr. km, ore funcționare, asigurator + +ATENTIE Bonuri de consum +- Materialele consumate pe o lucrare se adaugă pe comandă din programul de gestiune ROAGEST, pagina Mărfuri la preț de achiziție > Consum > Bon de consum pe lucrări în curs de execuție. +- Se alege obligatoriu comanda. + + +2.2 Normare comandă +- Se alege o comandă +- Se apasă butonul Normare și apare formularul "Vizualizare operații" de pe comandă +- În formularul "Vizualizare operații" se afișează operațiile de manoperă, materiale și se poate completa opțional devizul estimativ. +- În formularul "Vizualizare operații" se poate modifica numărul de ore și prețul/oră pentru fiecare operație +- În formularul "Vizualizare operații", se validează operațiile după ce au fost executate +- În formularul "Vizualizare operații" se pot modifica toate datele inițiale ale comenzii +- În formularul "Vizualizare operații" se pot adăuga, modifica, șterge și valida operații +- Pentru adăugarea de operații se apasă butonul de "Adăugare operație" din formularul "Vizualizare operații" +- La adăugarea operațiilor se alege unul sau mai mulți mecanici și prețul/oră +- În formularul "Adăugare operație", se pot adauga operații noi în normativul de operații +- În formularul "Normare" se poate modifica datele inițiale ale comezii precum: tipul comenzii, nr. km, ore funcționare + +Normare - In prima fereastra se poat vizualiza comenzile si modificare a tipul de comanda in cazul introducerii gresite (post-garantie / garantie / regie) + - Dupa selectarea comenzii se deschide pagina de normare care contine 3 ferestre: += Manopera - Vizualizare, validare, modificare fiecare tip de operatie efectuat in parte + - Adaugare/Stergere tipuri de operatie += Materiale - Materiale folosite in timpul comenzii + += Deviz estimativ - Aproximare a totalului comenzii + + + +2.3 Validare comandă +- După validarea tuturor operațiilor și înregistrarea bonurilor de consum +- Se alege o comandă și se validează +- După validare nu se mai pot adăuga operații sau bonuri de consum (gestiune) + +2.4 Vizualizare stocuri - Vizualizare gestiuni (la pret de achizitie/vanzare) + +2.5 Comenzi în luna curenta +- Se pot vizualiza si lista comenzile / devizele pentru comenzile validate +- Vizualizare operatiuni validate/nevalidate per comanda (nu se pot face modificari din aceasta fereastra) + +2.6 Istoric comenzi +- Se pot vizualiza, lista(deviz/raport comanda) toate comenzile fara a tine cont ca sunt inchise sau nu +- Vizualizare operatiuni validate/nevalidate per comanda (nu se pot face modificari din aceasta fereastra) + +2.7 Vizualizare date comenzi +- Raport clienți, comenzi, operații / materiale +- Viz. date comenzi -> Lista istoric comenzi-clienti-masini-manopera-materiale + +2.8 Rapoarte +- Vizualizare comenzi, listare deviz si raport(solicitari client, observatii, defectiuni constatate) + + +3. Pagina "Facturare" +3.1. Factura comandă (deviz) +- Se poate emite o factură de avans, indiferent daca comanda a fost validată, imediat după generarea comenzii. +- Se poate emite o factură finală pentru una sau mai multe comenzi ale aceluiași client. +- Pe factura finală se afișeaza valoarea manoperei (operații) și materialelor (bonuri de consum), avansul (dacă este cazul). +- Pe factura finală se pot adăuga articole suplimentare (ex: refacturare servicii executate de terți, cum ar fi transport sau verificări) +- Articolele suplimentare se pot crea direct în formularul de facturare. Trebuie să aibă bifa "preț de catalog". +- La emiterea facturii se poate alege "fără încasare", "bon fiscal numerar sau card", "chitanță". +- Se pot face modificare client/masina pe comanda ("Modificare client/masina pe comanda") + +3.2. Facturare ITP/ Facturare spalare auto preia setarile din configurare (1. Configurare) + +3.3. Factura diverse -> se alege dupa caz/nevoie + +3.4. Facturi in luna curenta - vizualizare facturi finalizate +Se poate realiza relistare factura si listare raport facturi + +3.5. Inchidere Regie: Vizualizare comenzi de regie +Realizare inchidere comanda din regie + +Nota: Comenzile din regie sunt considerate inchise/terminate in momentul in care sunt validate (in functie de optiunea din baza de date - nu exista configurare in program - trebuie facuta) + +Tip operatie (id_set) = 31006 +6588 = 482 -valoare totala pe fiecare sectie (materiale + manopera) +6588 = 482 +valoare totala (manopera + materiale) +711 = 332 valoare materiale (pentru inchidere materiale consumate pe lucrare) + +Se poate realiza Listare deviz pentru comenzile cu manopera + +3.6. Comenzi de regie in luna curenta - vizualizare comenzi de regie in curs de finalizare + +3.7. Inchidere comenzi de productie +Realizare inchidere comanda de productie +Tip operatie (id_set) = 31007 +Comenzile din productie sunt considerate inchise/terminate in momentul in care sunt validate + +Se poate realiza Listare deviz + +3.8. Rapoarte - Vizualizare/Listare diferite tipuri de rapoarte in functie de nevoie utilizatorului (asiguratori, facturi emise, ITP, spalare, finale, validare marci -> se alege un brand pt vizualizare) + +4. Pagina "Manoperă" + +Se distribuie manopera pe mecanici + +4.1 Manopera luna curenta: lucrari in luna curenta, Editare si distribuire timp normat mecanici pe lucrari, setii si operatii + +4.2 Manopera comenzi inchise: lucrari inchise in luna curenta, Editare si distribuire timp normat mecanici pe lucrari, setii si operatii + +4.3 Raport de salarizare - Listare rapoarte de salarizare manoperă + +4.4 Rapoarte - Se pot vizualiza diferite liste in functie de cerere (Pt un singur salariat/ mai multi; pt firmele de asig in functie de nr. ore + preturi) +- In cazul in care lucreaza 2 persoane pe aceasi operatie trebuie distribuite orele muncite individual pe operatiunea respectiva + +4.5 Ore de manopera pe asiguratori (Afiseaza nr de ore pt fiecare asigurator in luna curenta sau pe o perioada de timp) + +5. Pagina "Analiză" +- Verificări venituri pe lucrări față de contabilitate +- Raport articole pe comenzi +- Raport producție neterminată +- Centralizator comenzi pe tipuri + + + +607 - Cheltuieli privind marfurile diff --git a/versiune_db.txt b/versiune_db.txt new file mode 100644 index 0000000..bd5ab53 --- /dev/null +++ b/versiune_db.txt @@ -0,0 +1 @@ +2026_03_31_02 \ No newline at end of file