From 3374e349872d4706b8c465b6f84dc45d4e447a1b Mon Sep 17 00:00:00 2001 From: luca Date: Wed, 29 Jul 2009 10:37:31 +0000 Subject: [PATCH] Patch level :10.0 396 Files correlati : Ricompilazione Demo : [ ] Commento : sistemato controllo della constant_columns quando si ha una ripartizione multipla (habilita) git-svn-id: svn://10.65.10.50/trunk@19159 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- ca/ca2100.cpp | 72 +++++++++++++++++++++++++++++---------------------- 1 file changed, 41 insertions(+), 31 deletions(-) diff --git a/ca/ca2100.cpp b/ca/ca2100.cpp index 4628f06d3..3513d2c12 100755 --- a/ca/ca2100.cpp +++ b/ca/ca2100.cpp @@ -42,7 +42,7 @@ protected: bool multi_split_cg_row(const TRectype& row, const TAnal_ripartizioni_batch& rrip); void load_cg_row(const TRectype& row); void load_cg_mov(); - bool is_ripartible_movcg(); + bool is_ripartible_movcg(bool& has_multirip); int create_sheet_fields(int lf, int& y, short& dlg, bool required); void create_sheet(); @@ -271,38 +271,47 @@ bool TMovanal_msk::multi_split_cg_row(const TRectype& row, const TAnal_ripartizi return splitted; } -bool TMovanal_msk::is_ripartible_movcg() +bool TMovanal_msk::is_ripartible_movcg(bool& has_multirip) { - bool ok = true; - if (!_use_pdc) + bool is_ripartible_movcg = true; + + const TString& numregcg = get(F_NUMREGCG); + TRecord_array cg(numregcg, LF_RMOV); + + TString query; + for (int r = cg.last_row(); r > 0; r--) { - const TString& numregcg = get(F_NUMREGCG); - TRecord_array cg(numregcg, LF_RMOV); - - TString query; - for (int r = cg.last_row(); r > 0; r--) + const TRectype& row = cg.row(r); + const TBill zio(row); + if (zio.is_analitico()) { - const TRectype& row = cg.row(r); - const TBill zio(row); - if (zio.is_analitico()) - { - //se il conto è valido per l'analitica cerca,nell'annoes indicato, delle ripartizioni pertinenti a tale conto - const int annoes = row.get_int(RMV_ANNOES); - const TAnal_ripartizioni_batch& rrip = _cache_rip.righe_interattive(zio, annoes); - const long rrip_items = rrip.rows(); + //se il conto è valido per l'analitica cerca,nell'annoes indicato, delle ripartizioni pertinenti a tale conto + const int annoes = row.get_int(RMV_ANNOES); + const TAnal_ripartizioni_batch& rrip = _cache_rip.righe_interattive(zio, annoes); + const long rrip_items = rrip.rows(); - if (rrip_items <= 0) // Non trovato una ripartizione valida per il povero conto - { - ok = error_box(FR("Non esiste una ripartizione del conto %d.%d.%ld\n" - "presente sulla riga %d del movimento %ld"), - zio.gruppo(), zio.conto(), zio.sottoconto(), - r, atol(numregcg)); - break; - } - } - } - } - return ok; + //solo per conti analitici (!_use_pdc) + if (!_use_pdc && rrip_items <= 0) // Non trovato una ripartizione valida per il povero conto + { + is_ripartible_movcg = error_box(FR("Non esiste una ripartizione del conto %d.%d.%ld\n" + "presente sulla riga %d del movimento %ld"), + zio.gruppo(), zio.conto(), zio.sottoconto(), + r, atol(numregcg)); + break; + } //if(rrip_items.. + + //controlla se ci sono più ripartizioni sorelle; in questo caso deve avvisare chi lo chiama di questo fatto.. + //..in modo da non utilizzare il metodo delle colonne costanti; alla prima multiripartizione deve uscire perchè.. + //..is_ripartible_movcg sarà true (se ho una multiripartizione allora è ripartibile) e has_multirip potrebbe.. + //..tornare a false nella riga successiva + has_multirip = rrip.has_multirip(); + if (_use_pdc && has_multirip) + return is_ripartible_movcg; + + } //if(zio.is_analitico.. + } //for(int r=cg.last_row.. + + return is_ripartible_movcg; } void TMovanal_msk::load_cg_row(const TRectype& row) @@ -615,14 +624,15 @@ bool TMovanal_msk::on_field_event(TOperable_field& o, TField_event e, long jolly case F_RESET: if (e == fe_button) { - if (is_ripartible_movcg()) + bool has_multirip = false; + if (is_ripartible_movcg(has_multirip)) { TToken_string constants; const int cc = get_constant_columns(constants); TSheet_field& sf = sfield(F_RIGHE); sf.destroy(); load_cg_mov(); - if (cc > 0) // Se ci sono colonne costanti le recupera da quelle vecchie salvate + if (cc > 0 && !has_multirip) // Se ci sono colonne costanti le recupera da quelle vecchie salvate { TString campione; FOR_EACH_SHEET_ROW(sf, i, row)