diff --git a/ca/ca3800.cpp b/ca/ca3800.cpp index e04592229..ed3a57455 100755 --- a/ca/ca3800.cpp +++ b/ca/ca3800.cpp @@ -310,6 +310,10 @@ void TPrint_bilancio_cms_recordset::aggiorna_importo(TAssoc_array& riga_array, const char sezione = indbil == 3 ? 'D' : 'A'; TImporto imp(sezione, real(*str_imp)); + //ci sono tutti i tipi di saldo, ma solo quelli che rientrano nei parametri iniziali.. + //..verranno considerati (_tipostima,indbil) + const TImporto imp_saldo(saldana.get(SALDANA_SEZIONE).as_string()[0], + saldana.get(SALDANA_SALDO).as_real()); const TImporto imp_saldop(saldana.get(SALDANA_SEZIONEP).as_string()[0], saldana.get(SALDANA_SALDOP).as_real()); const TImporto imp_saldov(saldana.get(SALDANA_SEZIONEV).as_string()[0], @@ -317,13 +321,23 @@ void TPrint_bilancio_cms_recordset::aggiorna_importo(TAssoc_array& riga_array, if (inverti) { - imp -= imp_saldop; - imp -= imp_saldov; + if (_tipostima == 'C' && indbil == 3) //stima Costi e indbil=Costo + imp -= imp_saldo; + if (_tipostima == 'T' || (_tipostima == 'C' && indbil == 4)) //stima Tempo o (Costi e indbil=ricavo) + { + imp -= imp_saldop; + imp -= imp_saldov; + } } else { - imp += imp_saldop; - imp += imp_saldov; + if (_tipostima == 'C' && indbil == 3) + imp += imp_saldo; + if (_tipostima == 'T' || (_tipostima == 'C' && indbil == 4)) + { + imp += imp_saldop; + imp += imp_saldov; + } } imp.normalize(sezione); @@ -397,10 +411,17 @@ void TPrint_bilancio_cms_recordset::requery() //solo i Costi(3) ed i Ricavi(4) devono essere considerati per la stampa if (indbil == 3 || indbil == 4) { - //solo i record di tipo Preventivo(P) o Variazione(V) devono essere considerati - const real saldop = saldana.get(SALDANA_SALDOP).as_real(); - const real saldov = saldana.get(SALDANA_SALDOV).as_real(); - if (saldop != ZERO || saldov != ZERO) + //solo i record con saldi non nulli devono essere considerati + const bool has_saldop = (saldana.get(SALDANA_SALDOP).as_real() + + saldana.get(SALDANA_SALDOV).as_real()) != ZERO; + const bool has_saldo = saldana.get(SALDANA_SALDO).as_real() != ZERO; + + //se stima per Tempo -> usa solo saldop e saldov + //se stima per Costi -> se costi -> usa solo saldo + //se stima per Costi -> se ricavi -> usa solo saldop e saldov + if ((_tipostima == 'T' && has_saldop)|| + (_tipostima == 'C' && indbil == 3 && has_saldo)|| + (_tipostima == 'C' && indbil == 4 && has_saldop)) { const TString& codcms = saldana.get(SALDANA_COMMESSA).as_string(); const TString& fase = saldana.get(SALDANA_FASE).as_string(); diff --git a/ca/ca3800a.rep b/ca/ca3800a.rep index e29a6208b..ac485d149 100755 --- a/ca/ca3800a.rep +++ b/ca/ca3800a.rep @@ -25,9 +25,9 @@
-