diff --git a/ca/ca3600.cpp b/ca/ca3600.cpp index 3c8227b42..005e553bd 100755 --- a/ca/ca3600.cpp +++ b/ca/ca3600.cpp @@ -198,7 +198,7 @@ class TPag_per_cms_recordset : public TISAM_recordset protected: TDate _dadata, _adata; - long _codfor; + long _dacodfor, _acodfor; TString16 _campodata; TString _codcosto, _codcms, _codfas; TAssoc_array _costi,_pagamenti,_fiscali,_sociali; //array che contengono i conti letti dal .ini @@ -228,7 +228,7 @@ protected: bool cerca_sociali(const TBill& bill) const; public: - virtual void set_filter(const TPag_per_cms_mask& msk, const int cms_row, const long codfor, const TString& campodata); + virtual void set_filter(const TPag_per_cms_mask& msk, const int cms_row, const long dacodfor, const long acodfor, const TString& campodata); virtual void set_custom_filter(TCursor& cur) const; void scan_pags(); void scan_movs(); @@ -697,294 +697,293 @@ void TPag_per_cms_recordset::find_commesse(const long nreg, const TRectype& riga //..con la isam query implementato nella query_movama_by_numregcg() TISAM_recordset movana(query_movama_by_numregcg(nreg)); const TRecnotype items = movana.items(); + if (items <= 0) + return; - if (items > 0) - { - if (items > 1) - error_box(TR("Esiste piu' di un movimento analitico collegato al movimento contabile %ld"),nreg); + if (items > 1) + warning_box(TR("Esiste piu' di un movimento analitico collegato al movimento contabile %ld"),nreg); - movana.move_last(); //si posiziona sul record corretto - //prepara il record tmpcurr sul file temporaneo _tmp su cui registrare i dati da stampare - TRectype& tmpcurr = _tmp->curr(); - tmpcurr.zero(); + movana.move_last(); //si posiziona sul record corretto - //crea un movimento p.n. con il numero reg che viene passato al metodo (nreg relativo.. - //..ad un movimento della fattura originaria) - TMovimentoPN pn; - pn.curr().put(MOV_NUMREG, nreg); - if (pn.read() == NOERR) + //crea il movana e le sue righe + const TAnal_mov anal_mov(movana.get(MOVANA_NUMREG).as_int()); + TRecord_array& anal_rows = anal_mov.body(); + //scandisce le righe del movana alla ricerca di righe compatibili con le commesse sullo sheet + for (int m = anal_rows.last_row(); m > 0; m--) + { + if (check_cms_cdc_fsc(anal_rows[m])) + break; + } + //se non ne ha trovata manco una di righe buone esce! + if (m <= 0) + return; + + //prepara il record tmpcurr sul file temporaneo _tmp su cui registrare i dati da stampare + TRectype& tmpcurr = _tmp->curr(); + tmpcurr.zero(); + + //crea un movimento p.n. con il numero reg che viene passato al metodo (nreg relativo.. + //..ad un movimento della fattura originaria) + TMovimentoPN pn; + pn.curr().put(MOV_NUMREG, nreg); + if (pn.read() == NOERR) + { + const TRectype& movfat = pn.curr(); + + real totdoc_cms; + real totdoc, totdoc_netto; + TAssoc_array commesse; + + //Movimenti CON SALDACONTO + //se movimento IVA.. + if (pn.iva_items() > 0) { - const TRectype& movfat = pn.curr(); - - real totdoc_cms; - real totdoc, totdoc_netto; - TAssoc_array commesse; - - //Movimenti CON SALDACONTO - //se movimento IVA.. - if (pn.iva_items() > 0) + //trova le RMOVANA del MOVANA corrente che hanno il conto = a quello della i-esima rigaiva + for (int j = 0; j < pn.iva_items(); j++) { - for (int j = 0; j < pn.iva_items(); j++) + const TRectype& rmoviva = pn.iva(j); + const TBill zio(rmoviva); + //il tutto si fa solo se l'indicatore di bilancio del conto nella riga iva e' != 5 + if (zio.indicatore_bilancio() != 5) { - const TRectype& rmoviva = pn.iva(j); - const TBill zio(rmoviva); - //il tutto si fa solo se l'indicatore di bilancio del conto nella riga iva e' != 5 - if (zio.indicatore_bilancio() != 5) + //e vediamo 'sto conto della riga iva.. + const int gruppo_iva = zio.gruppo(); + const int conto_iva = zio.conto(); + const long sottoconto_iva = zio.sottoconto(); + + real imponibile_iva = rmoviva.get_real(RMI_IMPONIBILE); + real imposta_iva = rmoviva.get_real(RMI_IMPOSTA); + const TString& tipodet = rmoviva.get(RMI_TIPODET); + //controlla se l'imposta va sommata (tipo detrazione iva non nulla) + if (tipodet.full()) + imponibile_iva += imposta_iva; + + //distributore per il lordo iva (che sara' distribuito successivamente in base.. + //..agli importi delle righe analitiche corretti per le % iva + TGeneric_distrib agip (imponibile_iva, TCurrency::get_firm_dec()); + + for (int k = 1; k <= anal_rows.rows(); k++) //scansiona righe analitiche.. { - //e vediamo 'sto conto della riga iva.. - const int gruppo_iva = zio.gruppo(); - const int conto_iva = zio.conto(); - const long sottoconto_iva = zio.sottoconto(); - - //crea il movana legato al moviva - const TAnal_mov anal_mov(rmoviva); - //trova le RMOVANA del MOVANA corrente che hanno il conto = a quello della i-esima rigaiva - TRecord_array& anal_rows = anal_mov.body(); - - if (anal_rows.rows() > 0) //se il movana ha righe... + real perc_ded_iva = UNO; //%iva deducibile (di default 100, a meno del prorata) + if (imposta_iva != ZERO) { - real imponibile_iva = rmoviva.get_real(RMI_IMPONIBILE); - real imposta_iva = rmoviva.get_real(RMI_IMPOSTA); - const TString& tipodet = rmoviva.get(RMI_TIPODET); - //controlla se l'imposta va sommata (tipo detrazione iva non nulla) - if (tipodet.full()) - imponibile_iva += imposta_iva; - - //distributore per il lordo iva (che sara' distribuito successivamente in base.. - //..agli importi delle righe analitiche corretti per le % iva - TGeneric_distrib agip (imponibile_iva, TCurrency::get_firm_dec()); - - for (int k = 1; k <= anal_rows.rows(); k++) //scansiona righe analitiche.. + //controllo prorata + const TString80 commessa_riga_anal = anal_rows[k].get(RMOVANA_CODCMS); + const TRectype& pla = cache().get(LF_COMMESSE, commessa_riga_anal); + const bool prorata = pla.get_bool("PRORATA"); + if (prorata) { - real perc_ded_iva = UNO; //%iva deducibile (di default 100, a meno del prorata) - if (imposta_iva != ZERO) - { - //controllo prorata - const TString80 commessa_riga_anal = anal_rows[k].get(RMOVANA_CODCMS); - const TRectype& pla = cache().get(LF_COMMESSE, commessa_riga_anal); - const bool prorata = pla.get_bool("PRORATA"); - if (prorata) - { - const TDate datareg = pn.curr().get_date(MOV_DATAREG); - const int anno = datareg.year(); - TRegistro registro(pn.curr().get(MOV_REG), anno); - //%deducibilità iva rivista con il prorata - perc_ded_iva = (CENTO - registro.prorata(anno))/CENTO; - imposta_iva.round(TCurrency::get_firm_dec()); //ci vanno i decimali della ditta - } - } //if imposta_iva... + const TDate datareg = pn.curr().get_date(MOV_DATAREG); + const int anno = datareg.year(); + TRegistro registro(pn.curr().get(MOV_REG), anno); + //%deducibilità iva rivista con il prorata + perc_ded_iva = (CENTO - registro.prorata(anno))/CENTO; + imposta_iva.round(TCurrency::get_firm_dec()); //ci vanno i decimali della ditta + } + } //if imposta_iva... - //prende il conto sulla riga analitica e lo confronta con quello della riga iva - const int gruppo_anal = atoi(anal_rows[k].get(RMOVANA_CODCONTO).left(3)); - const int conto_anal = atoi(anal_rows[k].get(RMOVANA_CODCONTO).mid(3,3)); - const long sottoconto_anal = atol(anal_rows[k].get(RMOVANA_CODCONTO).mid(6,6)); - - //il codconto anale e iva coincidono?.. - if (gruppo_iva == gruppo_anal && conto_iva == conto_anal && sottoconto_iva == sottoconto_anal) - { - //..in tal caso aggiunge l'importo della riga analitica al distributore, dopo.. - //..averlo corretto in base alle % precedentemente calcolate - real importo_anal = anal_rows[k].get_real(RMOVANA_IMPORTO); - const real perc_iva = imposta_iva / imponibile_iva; - const real perc_corretta_iva = perc_iva * (UNO - perc_ded_iva); - importo_anal = importo_anal * (UNO - perc_corretta_iva); - - agip.add(importo_anal); - } //if(gruppo_iva==... - } //for (anal_rows... - - for (int l = 1; l <= anal_rows.rows(); l++) //..allora le scansiona.. - { - //prende il conto sulla riga analitica e lo confronta con quello della riga iva - const int gruppo_anal = atoi(anal_rows[l].get(RMOVANA_CODCONTO).left(3)); - const int conto_anal = atoi(anal_rows[l].get(RMOVANA_CODCONTO).mid(3,3)); - const long sottoconto_anal = atol(anal_rows[l].get(RMOVANA_CODCONTO).mid(6,6)); - - //il codconto anale e iva coincidono? - if (gruppo_iva == gruppo_anal && conto_iva == conto_anal && sottoconto_iva == sottoconto_anal) - { - //impoerto - real importo = agip.get(); - //commessa,cdc,fase della riga analitica devono essere coincidenti con quelle dello sheet - if (check_cms_cdc_fsc(anal_rows[l])) - { - //costruzione dell'assoc_array 'commesse' con cms/cdc/fsc ed importi - TToken_string cms_cdc_fsc; - cms_cdc_fsc.add(anal_rows[l].get(RMOVANA_CODCMS)); - cms_cdc_fsc.add(anal_rows[l].get(RMOVANA_CODCCOSTO)); - cms_cdc_fsc.add(anal_rows[l].get(RMOVANA_CODFASE)); - - real* imp = (real*)commesse.objptr(cms_cdc_fsc); - //aggiunge un elemento all'assoc_array... - if (imp == NULL) - { - imp = new real; - commesse.add(cms_cdc_fsc, imp); - } - *imp += importo; - totdoc_cms += importo; - - } //if check_cms_cdc_fsc... - - } //if(gruppo_iva==... - - } //for (anal_rows... - - } //if anal_rows() > 0... - } //if indicatore_bilancio!=5... - - } //for (pn.iva_items(... - - totdoc = totale_documento(pn.curr()); //tot doc con ritenute fiscali + ritenute sociali (da stampare) - totdoc_netto = pn.curr().get_real(MOV_TOTDOC); //questo si usa solo per il calcolo del residuo - } //if(pn.iva_items(... - else //..movimento NON iva (sempre con saldaconto) - { - for (int j = 0; j < pn.cg_items(); j++) - { - const TRectype& rmov = pn.cg(j); - const TBill zio_cg(rmov); - - TImporto importo(rmov.get_char(RMV_SEZIONE), rmov.get_real(RMV_IMPORTO)); - importo.normalize('D'); - - if (zio_cg.tipo() > ' ') - { - totdoc -= importo.valore(); - totdoc_netto -= importo.valore(); //valore per il calcolo del residuo - } - else - if (cerca_fiscali(zio_cg) || cerca_sociali(zio_cg)) - totdoc -= importo.valore(); //valore da stampare nella colonna Tot.fattura con ritenute - } //for j < pn.cg_items... - - TAnal_mov anal_mov(nreg); - TRecord_array& anal_rows = anal_mov.body(); - - if (anal_rows.rows() > 0) //se il movana ha righe... - { - - for (int k = 1; k <= anal_rows.rows(); k++) //..allora le scansiona.. - { - //prende gr/co/sott sulla riga analitica... + //prende il conto sulla riga analitica e lo confronta con quello della riga iva const int gruppo_anal = atoi(anal_rows[k].get(RMOVANA_CODCONTO).left(3)); const int conto_anal = atoi(anal_rows[k].get(RMOVANA_CODCONTO).mid(3,3)); const long sottoconto_anal = atol(anal_rows[k].get(RMOVANA_CODCONTO).mid(6,6)); - //..e crea il conto contabile corrispondente - TBill conto_cg(gruppo_anal, conto_anal, sottoconto_anal); - //l'indicatore di bilancio del conto contabile appena creato e' valido? - if (conto_cg.indicatore_bilancio() != 5) - { - const real importo_anal = anal_rows[k].get_real(RMOVANA_IMPORTO); - - //costruzione dell'assoc_array 'commesse' con cms/cdc/fsc ed importi - TToken_string cms_cdc_fsc; - cms_cdc_fsc.add(anal_rows[k].get(RMOVANA_CODCMS)); - cms_cdc_fsc.add(anal_rows[k].get(RMOVANA_CODCCOSTO)); - cms_cdc_fsc.add(anal_rows[k].get(RMOVANA_CODFASE)); + //il codconto anale e iva coincidono?.. + if (gruppo_iva == gruppo_anal && conto_iva == conto_anal && sottoconto_iva == sottoconto_anal) + { + //..in tal caso aggiunge l'importo della riga analitica al distributore, dopo.. + //..averlo corretto in base alle % precedentemente calcolate + real importo_anal = anal_rows[k].get_real(RMOVANA_IMPORTO); + const real perc_iva = imposta_iva / imponibile_iva; + const real perc_corretta_iva = perc_iva * (UNO - perc_ded_iva); + importo_anal = importo_anal * (UNO - perc_corretta_iva); - real* imp = (real*)commesse.objptr(cms_cdc_fsc); + agip.add(importo_anal); + } //if(gruppo_iva==... + } //for (anal_rows... - if (imp == NULL) + for (int l = 1; l <= anal_rows.rows(); l++) //..allora le scansiona.. + { + //prende il conto sulla riga analitica e lo confronta con quello della riga iva + const int gruppo_anal = atoi(anal_rows[l].get(RMOVANA_CODCONTO).left(3)); + const int conto_anal = atoi(anal_rows[l].get(RMOVANA_CODCONTO).mid(3,3)); + const long sottoconto_anal = atol(anal_rows[l].get(RMOVANA_CODCONTO).mid(6,6)); + + //il codconto anale e iva coincidono? + if (gruppo_iva == gruppo_anal && conto_iva == conto_anal && sottoconto_iva == sottoconto_anal) + { + //impoerto + real importo = agip.get(); + //commessa,cdc,fase della riga analitica devono essere coincidenti con quelle dello sheet + if (check_cms_cdc_fsc(anal_rows[l])) { - imp = new real; - commesse.add(cms_cdc_fsc, imp); - } + //costruzione dell'assoc_array 'commesse' con cms/cdc/fsc ed importi + TToken_string cms_cdc_fsc; + cms_cdc_fsc.add(anal_rows[l].get(RMOVANA_CODCMS)); + cms_cdc_fsc.add(anal_rows[l].get(RMOVANA_CODCCOSTO)); + cms_cdc_fsc.add(anal_rows[l].get(RMOVANA_CODFASE)); - TImporto importo(anal_rows[k].get_char(RMOVANA_SEZIONE), anal_rows[k].get_real(RMOVANA_IMPORTO)); - importo.normalize('D'); + real* imp = (real*)commesse.objptr(cms_cdc_fsc); + //aggiunge un elemento all'assoc_array... + if (imp == NULL) + { + imp = new real; + commesse.add(cms_cdc_fsc, imp); + } + *imp += importo; + totdoc_cms += importo; - *imp += importo.valore(); - totdoc_cms += importo.valore(); - } //if(conto_cg.indicatore... - } //for(k0... - } //else (pn.iva_items(... + } //if check_cms_cdc_fsc... - //parte comune a movimenti IVA e non (vengono anche qui considerate le ritenute fiscali - //e sociali perche' possono essere state inserite direttamente nella partita e non nel movimento - //(quindi non si puo' in questo caso applicare la totale_documento() - //Le ritenute fiscali vanno sempre sommate.. - real totpagato = riga_pag.get_real(PART_IMPORTO) + riga_pag.get_real(PART_RITENUTE); - //Le ritenute sociali invece vanno testate con la test_swap.. - const real ritsoc = riga_pag.get_real(PART_RITSOC); - if (!ritsoc.is_zero()) + } //if(gruppo_iva==... + + } //for (anal_rows... + + } //if indicatore_bilancio!=5... + + } //for (pn.iva_items(... + + totdoc = totale_documento(pn.curr()); //tot doc con ritenute fiscali + ritenute sociali (da stampare) + totdoc_netto = pn.curr().get_real(MOV_TOTDOC); //questo si usa solo per il calcolo del residuo + } //if(pn.iva_items(... + else //..movimento NON iva (sempre con saldaconto) + { + for (int j = 0; j < pn.cg_items(); j++) { - const TRectype& mov = pn.curr(); - TCausale caus(mov.get(MOV_CODCAUS)); - const bool swapt = test_swap(caus, false); // Totale invertito ? - const bool swaps = test_swap(caus, true); // Ritenute sociali invertite ? - if (swapt ^ swaps) // Somma ritenute sociali con segno - totpagato -= ritsoc; - else - totpagato += ritsoc; - } + const TRectype& rmov = pn.cg(j); + const TBill zio_cg(rmov); - const real percentuale = totpagato / totdoc_netto; + TImporto importo(rmov.get_char(RMV_SEZIONE), rmov.get_real(RMV_IMPORTO)); + importo.normalize('D'); - //calcolo del residuo (solo movimenti saldacontati) - //mi servono,dalla riga partita che viene passata,i valori dei campi per la chiave del - //file delle scadenze - const TPartita match(riga_pag); - //ci serve la riga di fattura che origina la nostra riga pagamento - const int riga_fatt = cerca_riga_fattura_origine(match, riga_pag); - //quanto era stato pagato del documento prima della attuale riga_pag - const real totpagato_prec = calcola_pagato_prec(match, riga_fatt, riga_pag); - const real perc_prec = totpagato_prec / totdoc_netto; - - TGeneric_distrib distributore(totdoc_cms * percentuale, TCurrency::get_firm_dec()); - TGeneric_distrib distributore_prec(totdoc_cms * perc_prec, TCurrency::get_firm_dec()); - { - FOR_EACH_ASSOC_OBJECT(commesse, h, k, imp) + if (zio_cg.tipo() > ' ') { - const real& impcms = *(real*)imp; - distributore.add(impcms); - distributore_prec.add(impcms); //distributore di importo pagato sulle commesse + totdoc -= importo.valore(); + totdoc_netto -= importo.valore(); //valore per il calcolo del residuo } - } - + else + if (cerca_fiscali(zio_cg) || cerca_sociali(zio_cg)) + totdoc -= importo.valore(); //valore da stampare nella colonna Tot.fattura con ritenute + } //for j < pn.cg_items... + + for (int k = 1; k <= anal_rows.rows(); k++) //..allora le scansiona.. + { + //prende gr/co/sott sulla riga analitica... + const int gruppo_anal = atoi(anal_rows[k].get(RMOVANA_CODCONTO).left(3)); + const int conto_anal = atoi(anal_rows[k].get(RMOVANA_CODCONTO).mid(3,3)); + const long sottoconto_anal = atol(anal_rows[k].get(RMOVANA_CODCONTO).mid(6,6)); + //..e crea il conto contabile corrispondente + TBill conto_cg(gruppo_anal, conto_anal, sottoconto_anal); + + //l'indicatore di bilancio del conto contabile appena creato e' valido? + if (conto_cg.indicatore_bilancio() != 5) + { + const real importo_anal = anal_rows[k].get_real(RMOVANA_IMPORTO); + + //costruzione dell'assoc_array 'commesse' con cms/cdc/fsc ed importi + TToken_string cms_cdc_fsc; + cms_cdc_fsc.add(anal_rows[k].get(RMOVANA_CODCMS)); + cms_cdc_fsc.add(anal_rows[k].get(RMOVANA_CODCCOSTO)); + cms_cdc_fsc.add(anal_rows[k].get(RMOVANA_CODFASE)); + + real* imp = (real*)commesse.objptr(cms_cdc_fsc); + + if (imp == NULL) + { + imp = new real; + commesse.add(cms_cdc_fsc, imp); + } + + TImporto importo(anal_rows[k].get_char(RMOVANA_SEZIONE), anal_rows[k].get_real(RMOVANA_IMPORTO)); + importo.normalize('D'); + + *imp += importo.valore(); + totdoc_cms += importo.valore(); + } //if(conto_cg.indicatore... + } //for(kwrite(); - } //FOR_EACH_... + //documento origine + tmpcurr.put("NDOC", movfat.get_long(MOV_NUMDOC)); + tmpcurr.put("DATADOC", movfat.get_date(MOV_DATADOC)); + tmpcurr.put("PROT", movfat.get_long(MOV_PROTIVA)); + tmpcurr.put("TOTDOC", totdoc); + tmpcurr.put("TOTPAG", distributore.get()); //pagamento nella partita + //totres = importo da pagare (sulla fattura) - pagamenti precedenti al + tmpcurr.put("TOTRES", impcms - distributore_prec.get()); + + //campi relativi a cdc,commessa,fase + TToken_string cdc_cms_fsc = k; + tmpcurr.put("CMS",cdc_cms_fsc.get(0)); + tmpcurr.put("CDC",cdc_cms_fsc.get(1)); + tmpcurr.put("FSC",cdc_cms_fsc.get(2)); - } //pn.read()... + //e finalmente aggiunge il record al file temporaneo + _tmp->write(); + } //FOR_EACH_... + + } //pn.read()... - } //if (items>0... } bool TPag_per_cms_recordset::part_callback(const TRelation& rel, void* pJolly) @@ -1001,12 +1000,14 @@ bool TPag_per_cms_recordset::part_callback(const TRelation& rel, void* pJolly) void TPag_per_cms_recordset::scan_pags() { //costruzione filtro - TRectype filtrec(LF_PARTITE); - filtrec.put(PART_TIPOCF, 'F'); - filtrec.put(PART_GRUPPO, 0); - filtrec.put(PART_CONTO, 0); - if (_codfor > 0) - filtrec.put(PART_SOTTOCONTO, _codfor); + TRectype dafiltrec(LF_PARTITE); + dafiltrec.put(PART_TIPOCF, 'F'); + dafiltrec.put(PART_GRUPPO, 0); + dafiltrec.put(PART_CONTO, 0); + dafiltrec.put(PART_SOTTOCONTO, _dacodfor); + + TRectype afiltrec(dafiltrec); + afiltrec.put(PART_SOTTOCONTO, _acodfor); TString filtro = "(TIPOMOV>=\"3\")"; //deve essere un pagamento a fornitore!!! @@ -1024,11 +1025,11 @@ void TPag_per_cms_recordset::scan_pags() } //applica il filtro alla relazione TRelation rel(LF_PARTITE); - TCursor cur(&rel, filtro, 1, &filtrec, &filtrec); + TCursor cur(&rel, filtro, 1, &dafiltrec, &afiltrec); cur.scan(part_callback, this, "Movimenti con saldaconto..."); } -void TPag_per_cms_recordset::set_filter(const TPag_per_cms_mask& msk, const int cms_row, const long codfor, const TString& campodata) +void TPag_per_cms_recordset::set_filter(const TPag_per_cms_mask& msk, const int cms_row, const long dacodfor, const long acodfor, const TString& campodata) { //se esiste il file temporano con tracciato persomalizzato lo cancella e lo ricrea vuoto TFilename trr; //file tracciato record @@ -1043,7 +1044,8 @@ void TPag_per_cms_recordset::set_filter(const TPag_per_cms_mask& msk, const int //deve stare qui per poter generare la chiave del file temporaneo in base al tipo di data di estrazione _campodata = campodata; //stessa cosa per il simpatico codice fornitore - _codfor = codfor; + _dacodfor = dacodfor; + _acodfor = acodfor; //crea il file .trr in base ai parametri del metodo crea_trr(trr); @@ -1085,7 +1087,7 @@ void TPag_per_cms_recordset::set_filter(const TPag_per_cms_mask& msk, const int scan_pags(); //se c'e' un filtro sui fornitori, non si fa lo scan dei movimenti senza saldaconto - if (codfor <= 0) + if (dacodfor <= 0 && acodfor <= 0) scan_movs(); } @@ -1100,7 +1102,7 @@ protected: virtual bool get_usr_val(const TString& name, TVariant& var) const; public: - void set_filter(const TPag_per_cms_mask& msk, const int cms_row, const long codfor, const TString& campodata); + void set_filter(const TPag_per_cms_mask& msk, const int cms_row, const long dacodfor, const long acodfor, const TString& campodata); }; @@ -1117,7 +1119,7 @@ bool TPag_per_cms_rep::set_recordset(const TString& sql) } -void TPag_per_cms_rep::set_filter(const TPag_per_cms_mask& msk, const int cms_row, const long codfor, const TString& campodata) +void TPag_per_cms_rep::set_filter(const TPag_per_cms_mask& msk, const int cms_row, const long dacodfor, const long acodfor, const TString& campodata) { TAnal_report::set_recordset(NULL); @@ -1125,7 +1127,7 @@ void TPag_per_cms_rep::set_filter(const TPag_per_cms_mask& msk, const int cms_ro TPag_per_cms_recordset* recset = new TPag_per_cms_recordset(query); - recset->set_filter(msk, cms_row, codfor, campodata); + recset->set_filter(msk, cms_row, dacodfor, acodfor, campodata); TAnal_report::set_recordset(recset); } @@ -1138,7 +1140,9 @@ void TPag_per_cms_rep::set_filter(const TPag_per_cms_mask& msk, const int cms_ro class TPag_per_cms : public TSkeleton_application { public: - void stampa_per_commessa(const TPag_per_cms_mask& mask, TReport_book& book, TPag_per_cms_rep& rep, const long codfor, const TString& campodata); + void stampa_per_commessa(const TPag_per_cms_mask& mask, TReport_book& book, + TPag_per_cms_rep& rep, const long dacodfor, const long acodfor, + const TString& campodata); const TMultilevel_code_info& get_level_one() const; virtual void main_loop(); }; @@ -1152,7 +1156,9 @@ const TMultilevel_code_info& TPag_per_cms::get_level_one() const return ca_multilevel_code_info(logic); } -void TPag_per_cms::stampa_per_commessa(const TPag_per_cms_mask& mask, TReport_book& book, TPag_per_cms_rep& rep, const long codfor, const TString& campodata) +void TPag_per_cms::stampa_per_commessa(const TPag_per_cms_mask& mask, TReport_book& book, TPag_per_cms_rep& rep, + const long dacodfor, const long acodfor, + const TString& campodata) { TSheet_field& sheet = mask.sfield(F_RIGHE); TString video_string; //stringa che compare nella progind @@ -1178,7 +1184,7 @@ void TPag_per_cms::stampa_per_commessa(const TPag_per_cms_mask& mask, TReport_bo for (int l = liv1.levels()-2; l >= 0; l--) //se la struttura è a più livelli costruisce la tokenstring row.insert("|", liv1.total_len(l)); - rep.set_filter(mask, 0, codfor, campodata); //fa la set filter sulla prima riga (che è quella usata) + rep.set_filter(mask, 0, dacodfor, acodfor, campodata); //fa la set filter sulla prima riga (che è quella usata) book.add(rep); } sheet.destroy(); //cancella le commesse aggiunte in automatico sullo sheet @@ -1187,7 +1193,7 @@ void TPag_per_cms::stampa_per_commessa(const TPag_per_cms_mask& mask, TReport_bo { FOR_EACH_SHEET_ROW(sheet, r, row) //per ogni cdc/cms che appare nello sheet di pag.1 della msk.. { - rep.set_filter(mask, r, codfor, campodata); //..chiama il metodone globale che crea e compila il file.. + rep.set_filter(mask, r, dacodfor, acodfor, campodata); //..chiama il metodone globale che crea e compila il file.. //..temporaneo i cui dati riempiranno il report book.add(rep); //aggiunge il report relativo alla cdc/cms corrente al book } @@ -1227,25 +1233,13 @@ void TPag_per_cms::main_loop() default:break; } + //scansione su tutti i fornitori selezionati; questa opzione e' praticamente utile solo.. + //..quando il numero di fornitori selezionati non e' elevato;infatti,per ogni fornitore.. + //..selezionato, viene eseguito tutto il giro del programma const long dacodfor = mask.get_long(F_DACODFOR); const long acodfor = mask.get_long(F_ACODFOR); - if (dacodfor > 0 || acodfor > 0) //specifica il range dei clifo.. - { - TISAM_recordset clifo("USE CLIFO\nFROM TIPOCF='F' CODCF=#DACODFOR\nTO TIPOCF='F' CODCF=#ACODFOR"); - clifo.set_var("#DACODFOR", TVariant(dacodfor)); - clifo.set_var("#ACODFOR", TVariant(acodfor)); - //scansione su tutti i fornitori selezionati; questa opzione e' praticamente utile solo.. - //..quando il numero di fornitori selezionati non e' elevato;infatti,per ogni fornitore.. - //..selezionato, viene eseguito tutto il giro del programma - for (bool ok = clifo.move_first(); ok; ok = clifo.move_next()) - { - const long codforn = clifo.get("CODCF").as_int(); - stampa_per_commessa(mask, book, rep, codforn, campodata); - } - } - else - stampa_per_commessa(mask, book, rep, 0, campodata); //se non si specifica alcun clifo... + stampa_per_commessa(mask, book, rep, dacodfor, acodfor, campodata); //se non si specifica alcun clifo... book.print_or_preview(); //stampa il book dei report }