From 26ff35b1802f5e4a8f82fbd544c071e98ce1d0aa Mon Sep 17 00:00:00 2001 From: luca Date: Thu, 28 Jul 2005 17:11:11 +0000 Subject: [PATCH] =?UTF-8?q?Patch=20level=20=20=20=20=20=20=20=20=20:2.2=20?= =?UTF-8?q?160=20Files=20correlati=20=20=20=20=20:ca3700a.rep,=20ca3.exe?= =?UTF-8?q?=20Ricompilazione=20Demo=20:=20[=20]=20Commento=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20=20=20=20:rendiconto:=20aggiunto=20il=20controllo?= =?UTF-8?q?=20sui=20documenti=20con=20pi=C3=B9=20righe=20che=20venivano=20?= =?UTF-8?q?sovrascritti=20tante=20volte=20quante=20erano=20le=20righe.=20A?= =?UTF-8?q?ggiunto=20controllo=20sulle=20date=20nella=20maschera=20della?= =?UTF-8?q?=20stampa=20mastrini=20(come=20quello=20della=20stampa=20mastri?= =?UTF-8?q?ni=20CG=20e=20delle=20altre=20stampe=20di=20analitica)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: svn://10.65.10.50/trunk@13300 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- ca/ca3200.cpp | 25 +++++++++++- ca/ca3200.uml | 20 ++++----- ca/ca3700.cpp | 111 +++++++++++++++++--------------------------------- 3 files changed, 71 insertions(+), 85 deletions(-) diff --git a/ca/ca3200.cpp b/ca/ca3200.cpp index ae3749b98..bb8c60a21 100755 --- a/ca/ca3200.cpp +++ b/ca/ca3200.cpp @@ -3,6 +3,8 @@ #include #include +#include "../cg/cglib01.h" + #include "pconana.h" #include "movana.h" #include "rmovana.h" @@ -89,6 +91,25 @@ bool TPrint_mastrini_ca_mask::on_field_event(TOperable_field& o, TField_event e, return error_box(TR("Impossibile trovare un report compatibile")); } break; + case F_DATAINI: + case F_DATAFIN: + if (e == fe_close) + { + const int anno = get_int(F_ANNO); + if (anno > 0) //se viene selezionato un esercizio.. + { + TEsercizi_contabili esc; //..le date devono essere incluse nell'esercizio selezionato! + const TDate data = o.get(); + if (!data.empty() && esc.date2esc(data) != anno) + return error_box(TR("La data deve appartenere all'anno selezionato")); + } + else //se l'esercizio è vuoto le date diventano obbligatorie!! + { + if (o.empty()) + return error_box(TR("La data è obbligatoria in quanto manca l'esercizio")); + } + } + break; default: break; } return true; @@ -206,8 +227,8 @@ TPrint_mastrini_ca_mask::TPrint_mastrini_ca_mask() const bool use_pdcc = cfg.get_bool("UsePdcc"); const int logicnum = use_pdcc ? LF_PCON : LF_PCONANA; - const int nfields = ca_create_fields(*this, 0, logicnum, 2, 5, F_CDC1_INI, F_DES1_INI, 0x0, "#DACONTO"); - ca_create_fields(*this, 0, logicnum, 2, 11, F_CDC1_FIN, F_DES1_FIN, 0x0, "#ACONTO"); + const int nfields = ca_create_fields(*this, 0, logicnum, 2, 4, F_CDC1_INI, F_DES1_INI, 0x0, "#DACONTO"); + ca_create_fields(*this, 0, logicnum, 2, 10, F_CDC1_FIN, F_DES1_FIN, 0x0, "#ACONTO"); for (int i = 0; i < nfields; i++) { diff --git a/ca/ca3200.uml b/ca/ca3200.uml index 8db2e9dea..ff0b3dd20 100755 --- a/ca/ca3200.uml +++ b/ca/ca3200.uml @@ -65,42 +65,42 @@ END GROUPBOX DLG_NULL 76 6 BEGIN - PROMPT 1 4 "@bDa:" + PROMPT 1 3 "@bDa:" END GROUPBOX DLG_NULL 76 6 BEGIN - PROMPT 1 10 "@bA:" + PROMPT 1 9 "@bA:" END GROUPBOX DLG_NULL 76 7 BEGIN - PROMPT 1 16 "@bOpzioni stampa" + PROMPT 1 15 "@bOpzioni stampa" END TEXT 96 BEGIN - PROMPT 2 17 "Dalla data competenza " + PROMPT 2 16 "Dalla data competenza " END TEXT 97 BEGIN - PROMPT 40 17 "Alla data competenza " + PROMPT 40 16 "Alla data competenza " END DATE F_DATAINI BEGIN - PROMPT 26 17 "" + PROMPT 26 16 "" END DATE F_DATAFIN BEGIN - PROMPT 62 17 "" + PROMPT 62 16 "" END LIST F_TIPOCONTI 24 BEGIN - PROMPT 2 19 "Selezione conti " + PROMPT 2 18 "Selezione conti " ITEM "1|Movimentati nel periodo" ITEM "2|Con saldo diverso da 0" ITEM "3|Tutti" @@ -108,7 +108,7 @@ END LIST F_TIPIMOV 24 BEGIN - PROMPT 2 20 "Selezione movimenti " + PROMPT 2 19 "Selezione movimenti " ITEM " |Qualsiasi" ITEM "N|Normale" ITEM "P|Preventivo e variazione" @@ -116,7 +116,7 @@ END STRING F_REPORT 256 64 BEGIN - PROMPT 2 21 "Report " + PROMPT 2 20 "Report " FLAGS "B" CHECKTYPE REQUIRED END diff --git a/ca/ca3700.cpp b/ca/ca3700.cpp index 091070c45..36dd6bc18 100755 --- a/ca/ca3700.cpp +++ b/ca/ca3700.cpp @@ -357,8 +357,8 @@ protected: bool valid_record(const TRelation& rel) const; virtual void set_custom_filter(TCursor& cur) const; - void crea_righe_rmovana(); - void crea_righe_rdoc(const TPrint_rendiconto_ca_mask& msk); + void crea_righe_da_rmovana(); + void crea_righe_da_rdoc(const TPrint_rendiconto_ca_mask& msk); void crea_trr(const TFilename& trr) const; void salva_rmovana(const TRectype& rmovana, const TRectype& movana, const TDocumento* doc); real somma_budget(const TString& codconto, const char* tipomovana); @@ -507,6 +507,7 @@ const TVariant& TPrint_rendiconto_ca_recordset::get(const char* column_name) con return TISAM_recordset::get(column_name); } +//compila i campi da stampare void TPrint_rendiconto_ca_recordset::salva_rmovana(const TRectype& rmovana, const TRectype& movana, const TDocumento* doc) { //tipo movimento CONSUNTIVO @@ -515,7 +516,8 @@ void TPrint_rendiconto_ca_recordset::salva_rmovana(const TRectype& rmovana, cons { TRectype& tmpcurr = _tmp->curr(); tmpcurr.zero(); - //compila i campi da stampare + TString8 codnum_desc; //codnum da usare sia per compilare il campo "CODNUM" + codnum_desc.cut(0); // il conto puo' essere analitico o contabile... //se è compilato l'archivio di collegamento PANAPDC @@ -600,7 +602,8 @@ void TPrint_rendiconto_ca_recordset::salva_rmovana(const TRectype& rmovana, cons //i movimenti possono essere normali o generati da documento... if (dadoc) //movimento generato da documento { - tmpcurr.put("CODNUM", movana.get(MOVANA_DCODNUM)); //codnum del documento che origina il movana + codnum_desc = movana.get(MOVANA_DCODNUM); //serve anche in fondo al metodo + tmpcurr.put("CODNUM", codnum_desc); //codnum del documento che origina il movana tmpcurr.put("ANNO", movana.get(MOVANA_DANNO)); //anno del doc di origine tmpcurr.put("NUMRD", movana.get(MOVANA_DNDOC)); // tmpcurr.put("DATA", newdoc->get(DOC_DATADOC)); //data del documento che genera movana.. @@ -633,11 +636,11 @@ void TPrint_rendiconto_ca_recordset::salva_rmovana(const TRectype& rmovana, cons const TRectype* babbo = riga.find_original_rdoc(); //cerca il doc padre della riga doc attuale if (babbo != NULL) //se trova il doc padre.. { - const TString8 codnum = babbo->get(RDOC_CODNUM); + const TString8 babbo_codnum = babbo->get(RDOC_CODNUM); const int anno = babbo->get_int(RDOC_ANNO); const long ndoc = babbo->get_long(RDOC_NDOC); - riferimento << codnum << '-' << anno << '-' << ndoc; - TDocumento doc_babbo('D', anno, codnum, ndoc); //crea una copia del doc padre per prendere.. + riferimento << babbo_codnum << '-' << anno << '-' << ndoc; + TDocumento doc_babbo('D', anno, babbo_codnum, ndoc); //crea una copia del doc padre per prendere.. tipo_babbo = doc_babbo.tipo().tipo(); //..il tipo documento.. totale_doc_babbo = doc_babbo.totale_doc(); //..il suo totale } //if (babbo != NULL).. @@ -658,14 +661,14 @@ F=IMF*/ selettore |= IMPEGNATO; break; - case TTipo_documento::_fattura: //fattura F -> IMF se non deriva da alcun documento origine - selettore = FATTURATO; + case TTipo_documento::_fattura: + selettore = FATTURATO; //fattura da bolla FB -> F if (tipo_babbo == TTipo_documento::_ordine) //fattura da ordine FO -> MF { selettore |= MATURATO; tmpcurr.put("IMPEGNATO", totale_doc_babbo); } else - if (tipo_babbo = TTipo_documento::_altro) //fattura senza padri + if (tipo_babbo = TTipo_documento::_altro) //fattura senza padri F -> IMF selettore |= (IMPEGNATO | MATURATO); break; @@ -719,24 +722,26 @@ F=IMF*/ tmpcurr.put("NRIGA", rmovana.get(RMOVANA_NUMRIG)); //numero riga tmpcurr.put("DESCRIGA", rmovana.get(RMOVANA_DESCR)); //descrizione rmovana -/* int err = _tmp->write(); // aggiunge i record al file temporaneo + int err = _tmp->write(); // aggiunge i record al file temporaneo + //procedura di controllo della scrittura su file! se il documento è già stato contbilizzato.. + //..sul file temporaneo esiste già un record con la chiave del record,dovuto al doc,.. + //..che deve essere qui aggiunto!significa che l'intervallo di stati della numerazione selezionato.. + //..nello sheet è errato (probabilmente lo stato finale è troppo alto) if (err != NOERR) { TString msg; - msg.format(FR("Errore di scrittura %d sul file temporaneo\n"), err); - msg << "Documento " << + msg.format(FR("Errore di scrittura %d sul file temporaneo.\n"), err); + msg << "Documento " << codnum_desc << " " << descr << " gia' contabilizzato.\nControllare lo stato della numerazione."; error_box (msg); - }*/ - - _tmp->write(); // aggiunge i record al file temporaneo + } if (should_delete) delete newdoc; } //if (tipomov == ..) } - -void TPrint_rendiconto_ca_recordset::crea_righe_rmovana() +//scanning delle righe dei movimenti di analitica +void TPrint_rendiconto_ca_recordset::crea_righe_da_rmovana() { TRelation rel_rmovana(LF_RMOVANA); @@ -803,8 +808,8 @@ void TPrint_rendiconto_ca_recordset::crea_righe_rmovana() } } - -void TPrint_rendiconto_ca_recordset::crea_righe_rdoc(const TPrint_rendiconto_ca_mask& msk) +//scanning delle righe dei documenti +void TPrint_rendiconto_ca_recordset::crea_righe_da_rdoc(const TPrint_rendiconto_ca_mask& msk) { TRelation rel_rdoc(LF_RIGHEDOC); rel_rdoc.add(LF_DOC, "CODNUM==CODNUM|ANNO==ANNO|PROVV==PROVV|NDOC==NDOC"); //aggiunge le testate @@ -894,12 +899,22 @@ void TPrint_rendiconto_ca_recordset::crea_righe_rdoc(const TPrint_rendiconto_ca_ commento_progind << "Scansione righe documenti " << codnum << "..."; TProgind pi(rdoc_items, commento_progind); + //memorizza l'ultimo doc per evitare doppioni in caso di doc con più righe (rielaborerebbe.. + //..lo stesso documento tante volte quante sono le sue righe!) + TString old_key; //scanning del file dei documenti alla ricerca di quelli che hanno la data ed il CODNUM //validi nei filtri impostati dall'utente for (cur_rdoc = 0; cur_rdoc.pos() < rdoc_items; ++cur_rdoc) { pi.addstatus(1); - TDocumento doc(cur_rdoc.curr(LF_DOC)); + const TRectype& curr_doc = cur_rdoc.curr(LF_DOC); + const TString curr_key = curr_doc.build_key(); + if (curr_key == old_key) + continue; + else + old_key = curr_key; + + TDocumento doc(curr_doc); TAnal_mov mov; cont_anal.elabora(doc, 0, NULL, false, mov); for (int j = 1; j <= mov.rows(); j++) @@ -1016,9 +1031,9 @@ void TPrint_rendiconto_ca_recordset::set_filter(const TPrint_rendiconto_ca_mask& } } //metodo per riempire il file - crea_righe_rmovana(); + crea_righe_da_rmovana(); - crea_righe_rdoc(msk); + crea_righe_da_rdoc(msk); } @@ -1121,53 +1136,3 @@ int ca3700(int argc, char* argv[]) a.run(argc, argv, TR("Stampa rendiconto")); return 0; } - -/* -//Prototipi di metodi di calcolo (ricordarsi di usare come importi quelli di riga) -COMM = impegnato -ACEM = maturato -CONS = fatturato -CNTBZ = checazzoneso - -//Calcolatore per tipi (AN,PN),FM -calcolatore (const int tipo, const int classe, const int dare) -{ - const int segno = classe * dare; //essendo classe e dare = + o - 1, il segno lo si ottiene direttamente - if (classe == 1 && dare == -1) //unico caso in cui non rispetta il prodotto dei segni - { - I_ACEM = (I_ACEM - segno * NEW_ACEMVAL) * tipo; //tipo = 1 se AN,PN; = 0 se FM - I_STIMA = I_STIMA - segno * NEW_STIMAVAL; - } - else - { - I_ACEM = (I_ACEM + segno * NEW_ACEMVAL) * tipo; - I_STIMA = I_STIMA + segno * NEW_STIMAVAL; - } - - //questa è comunque sempre corretta - I_CNTBZ = I_CNTBZ + segno * NEW_ICNTBZVAL; -} - - -//Calcolatore per tipi (OA,OV) -> impegnato, (BA,BV) -> maturato, (FA,FN) -> fatturato, -calcolatore (const int tipo) -{ - switch (tipo): - case OA: - case OV: - I_COMM = I_COMM + NEW_COMMVAL; - break; - - case BA: - case BV: - I_ACEM = I_ACEM + NEW_ACEMVAL; - break; - - case FA: - case FN: - I_CONS = I_CONS + NEW_CONSVAL; - break; -} - - -*/ \ No newline at end of file