From 028a37ab42c691a9d679e27c46081a7bec3af2e4 Mon Sep 17 00:00:00 2001 From: guy Date: Mon, 2 Feb 2004 13:49:53 +0000 Subject: [PATCH] Patch level : 2.0 678 Files correlati : 772.exe Ricompilazione Demo : [ ] Commento : MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CM20091 Immettendo in questo caso specifico di Medicasa da Persona fisica F/60014 a Persona fisica F/60460 e controllando il percipiente Porta Gianluigi i si accorge che per lo steso percipiente vengono stampate 3 certificazioni per valori diversi (la n° 1,la 10, la 12). Se al contrario richiedo la sola persona fisica F/60316 la certificazione è correttamente una sola, di cui il totale è la somma delle tre stampate in precedenza. git-svn-id: svn://10.65.10.50/trunk@11736 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- m770/772200.cpp | 173 ++++++++++++++++++++++-------------------------- 1 file changed, 79 insertions(+), 94 deletions(-) diff --git a/m770/772200.cpp b/m770/772200.cpp index 5698fef6d..c559c5a61 100755 --- a/m770/772200.cpp +++ b/m770/772200.cpp @@ -1,11 +1,9 @@ // 772200.cpp - Stampa certificazioni -#include -#include + #include #include -#include +#include #include -#include #include #include @@ -44,10 +42,8 @@ class TSt_certif : public TPrintapp real netto; real inps; }; - righe_pag* _rig; TRelation* _rel; TCursor* _cur; - TProgind* _prog; TSort* _sort; const char* _buf; TLocalisamfile* _nditte; @@ -55,7 +51,6 @@ class TSt_certif : public TPrintapp TLocalisamfile* _rpag; TLocalisamfile* _scperc; TLocalisamfile* _comuni; - TTable* _ca7; TString80 _ragsocER, _indER, _civER, _capER, _dencomER, _provER, _cofiER; TString80 _ragsocPE, _indPE, _civPE, _capPE, _dencomPE, _provPE, _cofiPE; TString80 _dencomnscER, _provnscER, _dencomnscPE, _provnscPE; @@ -90,7 +85,7 @@ protected: bool init_print(); public: - TRectype& look_causali(); + const TRectype& look_causali(); TRectype& look_schperc(long,char,long,int); void crea_sort(); void init_sort(); @@ -167,33 +162,24 @@ TRectype& TSt_certif::look_schperc (long cod, char t, long codan, int np) return schede.curr(); } -TRectype& TSt_certif::look_causali() +const TRectype& TSt_certif::look_causali() { - TString16 dep; - - _ca7->zero(); - dep.format("%02d", _codc_p); - _ca7->put("CODTAB", dep); - _ca7->read(); - if (_ca7->bad()) - _ca7->zero(); - - return _ca7->curr(); + TString4 dep; dep.format("%02d", _codc_p); + return cache().get("%CA7", dep); } void TSt_certif::init_sort() { - _rig = new righe_pag; _sort = new TSort(sizeof(righe_pag)); -/* - _sort->addsortkey ((char*)&(_rig->ditta) - (char*)&(_rig->ditta),5); - _sort->addsortkey ((char*)&(_rig->tipoa) - (char*)&(_rig->ditta),1); - _sort->addsortkey ((char*)&(_rig->codan) - (char*)&(_rig->ditta),5); - _sort->addsortkey ((char*)&(_rig->perc) - (char*)&(_rig->ditta),6); - _sort->addsortkey ((char*)&(_rig->codc) - (char*)&(_rig->ditta),2); -*/ - _sort->addsortkey (0, 23); +// _sort->addsortkey (0, 23); // Non si puo': la sort usa strncmp! + righe_pag rig; + _sort->addsortkey((char*)&(rig.ditta) - (char*)&(rig.ditta),5); + _sort->addsortkey((char*)&(rig.tipoa) - (char*)&(rig.ditta),1); + _sort->addsortkey((char*)&(rig.codan) - (char*)&(rig.ditta),5); + _sort->addsortkey((char*)&(rig.perc) - (char*)&(rig.ditta),6); + _sort->addsortkey((char*)&(rig.codc) - (char*)&(rig.ditta),2); + _sort->init(); } @@ -210,10 +196,15 @@ void TSt_certif::crea_sort() nprogc = -1; init_sort(); - *_cur = 0l; - for (int i = 0; i < _cur->items(); i++, ++(*_cur)) + + const TRecnotype totrec = _cur->items(); + _cur->freeze(); + + TProgind prog(totrec, TR("Elaborazione in corso..."), FALSE); + + for (*_cur = 0; _cur->pos() < totrec; ++(*_cur)) { - _prog->addstatus(1); + prog.addstatus(1); ditta = _cur->curr().get_long(PAG_CODDITTA); tipoa = _cur->curr().get(PAG_TIPOA)[0]; codan = _cur->curr().get_long(PAG_CODANAGR); @@ -256,6 +247,8 @@ void TSt_certif::crea_sort() riempi_record(ditta,tipoa,codan,perc,codc,corrisp,somme,quote,impo,rite,netto,inps); } + + _cur->freeze(false); } void TSt_certif::riempi_record(long d,char t,long ca,const real& p,int c, @@ -263,48 +256,49 @@ void TSt_certif::riempi_record(long d,char t,long ca,const real& p,int c, const real& qu,const real& im,const real& ri, const real& ne, const real& inps) { - sprintf(_rig->ditta, "%5ld", d); - _rig->tipoa = t; - sprintf(_rig->codan, "%5ld", ca); - //sprintf(_rig->perc, "%2d", p); - TString16 pp(p.string("###,@@")); - sprintf(_rig->perc, "%s", (const char*)pp); - sprintf(_rig->codc, "%02d", c); - _rig->corr = co; - _rig->somme = so; - _rig->quote = qu; - _rig->impo = im; - _rig->rite = ri; - _rig->netto = ne; - _rig->inps = inps; + righe_pag rig; + + sprintf(rig.ditta, "%5ld", d); + rig.tipoa = t; + sprintf(rig.codan, "%5ld", ca); + TString8 pp(p.string("##@,@@")); + sprintf(rig.perc, "%s", (const char*)pp); + sprintf(rig.codc, "%02d", c); + rig.corr = co; + rig.somme = so; + rig.quote = qu; + rig.impo = im; + rig.rite = ri; + rig.netto = ne; + rig.inps = inps; - _sort->sort((const char*)_rig); + _sort->sort((const char*)&rig); } int TSt_certif::stampa_riga(int i, int ct, const char* d) { - if (!_st_modulo) - { - TString16 app (_perc_p.left(3)); //stampo solo la parte intera - app.ltrim(); - - real lordo_netto_iva = _tot_corr + _tot_somme; - real somme_quote = _tot_somme + _tot_quote; - - set_row(i,"%02d %4d %-.25s @34g%r@50g%r@66g%r",_codc_p,ct,d,&lordo_netto_iva,&somme_quote,&_tot_impo); - set_row(i++,"@83g%s@86g%r@101g%r@117g%r",(const char*)app,&_tot_rite,&_tot_inps,&_tot_netto); - } - else - { - real non_sogg = _tot_corr - _tot_impo + _tot_somme; - real imp_netto = _tot_impo - _tot_rite /* - _tot_inps */; - TString16 app (_perc_p.left(3)); - app.ltrim(); - set_row(i++, "@3g%4d@11g%-.28s@43g%12.0r@57g%12.0r@71g%12.0r@85g%s@89g%12.0r@104g%12.0r", - ct,d,&_tot_corr,&non_sogg,&_tot_impo,(const char*)app,&_tot_rite,&imp_netto); - set_row(i, ""); - } - return i; + if (!_st_modulo) + { + TString16 app (_perc_p.left(3)); //stampo solo la parte intera + app.ltrim(); + + real lordo_netto_iva = _tot_corr + _tot_somme; + real somme_quote = _tot_somme + _tot_quote; + + set_row(i,"%02d %4d %-.25s @34g%r@50g%r@66g%r",_codc_p,ct,d,&lordo_netto_iva,&somme_quote,&_tot_impo); + set_row(i++,"@83g%s@86g%r@101g%r@117g%r",(const char*)app,&_tot_rite,&_tot_inps,&_tot_netto); + } + else + { + real non_sogg = _tot_corr - _tot_impo + _tot_somme; + real imp_netto = _tot_impo - _tot_rite /* - _tot_inps */; + TString16 app (_perc_p.left(3)); + app.ltrim(); + set_row(i++, "@3g%4d@11g%-.28s@43g%12.0r@57g%12.0r@71g%12.0r@85g%s@89g%12.0r@104g%12.0r", + ct,d,&_tot_corr,&non_sogg,&_tot_impo,(const char*)app,&_tot_rite,&imp_netto); + set_row(i, ""); + } + return i; } // Totale su carta bianca @@ -324,14 +318,14 @@ void TSt_certif::stampa_totale(int i) void TSt_certif::salva_totale() { - //salvo gli importi del record che sto leggendo - _tot_corr += _corr; - _tot_somme+= _somme; - _tot_quote+= _quote; - _tot_impo += _impo; - _tot_rite += _rite; - _tot_netto+= _netto; - _tot_inps += _inps; + //salvo gli importi del record che sto leggendo + _tot_corr += _corr; + _tot_somme+= _somme; + _tot_quote+= _quote; + _tot_impo += _impo; + _tot_rite += _rite; + _tot_netto+= _netto; + _tot_inps += _inps; } void TSt_certif::leggi_sort() @@ -369,9 +363,9 @@ void TSt_certif::leggi_sort() if (key1 != _key1p && _key1p != "") //e' cambiato il percipiente { - TRectype cau = look_causali(); - TString descr = cau.get("S0"); - int codtrib = cau.get_int("I0"); + const TRectype& cau = look_causali(); + const TString& descr = cau.get("S0"); + const int codtrib = cau.get_int("I0"); i = stampa_riga(i, codtrib, descr); @@ -398,9 +392,9 @@ void TSt_certif::leggi_sort() } else if (key2 != _key2p && _key2p != "") { - TRectype cau = look_causali(); - TString descr = cau.get("S0"); - int codtrib = cau.get_int("I0"); + const TRectype& cau = look_causali(); + const TString& descr = cau.get("S0"); + const int codtrib = cau.get_int("I0"); stampa_riga(i, codtrib, descr); @@ -437,9 +431,9 @@ void TSt_certif::leggi_sort() } else if (_stampa) //sono finiti i record ma c'e' ancora un record da stampare { - TRectype cau = look_causali(); - TString descr = cau.get("S0"); - int codtrib = cau.get_int("I0"); + const TRectype& cau = look_causali(); + const TString& descr = cau.get("S0"); + const int codtrib = cau.get_int("I0"); /* _tipoa_p = _tipoa; @@ -685,14 +679,9 @@ bool TSt_certif::init_print() set_print_zero(FALSE); set_magic_currency(TRUE); - _prog = new TProgind(_cur->items(),"Elaborazione in corso...",FALSE); - crea_sort(); _sort->endsort(); - delete _rig; - delete _prog; - return TRUE; } else @@ -1007,8 +996,6 @@ bool TSt_certif::user_create() _anag = new TLocalisamfile (LF_ANAG); _rpag = new TLocalisamfile (LF_RPAG); _scperc = new TLocalisamfile (LF_SCPERC); - _ca7 = new TTable ("%CA7"); - _rig = new righe_pag; return TRUE; } @@ -1022,8 +1009,6 @@ bool TSt_certif::user_destroy() delete _comuni; delete _rpag; delete _scperc; - delete _ca7; - delete _rig; delete _cnf; delete _cns;