diff --git a/ef/ef0800.cpp b/ef/ef0800.cpp index 551ed1c36..719e9aec2 100755 --- a/ef/ef0800.cpp +++ b/ef/ef0800.cpp @@ -936,10 +936,10 @@ void TContabilizzazione_effetti_app::compile_saldac(const TEffetto& eff, TArray& differenze_cam, TArray& customers) { int anno = reff.get_int(REFF_ANNO); - TString16 numpart = reff.get(REFF_NUMPART); + TString8 numpart = reff.get(REFF_NUMPART); // Ricava il numero della fattura. - TString16 numdoc_to_search = reff.get(REFF_CODNUM); - TString16 nfatt = reff.get(REFF_NFATT); + TString8 numdoc_to_search = reff.get(REFF_CODNUM); + const TString nfatt = reff.get(REFF_NFATT); TCodice_numerazione cn; if (numdoc_to_search.not_empty() && nfatt.not_empty() && real::is_natural(nfatt)) @@ -949,10 +949,8 @@ void TContabilizzazione_effetti_app::compile_saldac(const TEffetto& eff, cn.complete_num(nf, numdoc_to_search); } else // se gli estremi della fattura non sono compilati si piglia il numero della partita - if (nfatt.full()) - numdoc_to_search = nfatt; - else - numdoc_to_search = numpart; + numdoc_to_search = nfatt.full() ? nfatt : numpart; + if (anno == 0 || numpart.empty()) // Se non sono gia' settati sulla riga effetto... { anno = reff.get_int(REFF_ANNODOC);// ... li va a prendere dagli estremi fattura... @@ -997,7 +995,7 @@ void TContabilizzazione_effetti_app::compile_saldac(const TEffetto& eff, for (int r = partita->last(); r > 0; r = partita->pred(r)) { const TRiga_partite& rpart = partita->riga(r); - const TString16 numdoc = rpart.get(PART_NUMDOC); + const TString& numdoc = rpart.get(PART_NUMDOC); if (numdoc == numdoc_to_search && rpart.is_fattura()) { nriga = r; @@ -1005,10 +1003,18 @@ void TContabilizzazione_effetti_app::compile_saldac(const TEffetto& eff, } } } + // reperire il numero di rata (nrata) dalla riga effetto - const int nrata = reff.get_int(REFF_NRATA); + int nrata = reff.get_int(REFF_NRATA); + if (nrata <= 0 && nriga > 0 && nriga < uns) + { + const TRiga_partite& rpart = partita->riga(nriga); + const int nrate = rpart.rate(); + for (nrata = 1; nrata < nrate && rpart.rata(nrata).chiusa(); nrata++); + } + char acc_sal = 'A'; - if (partita->esiste(nriga,nrata)) // calcola se e' a saldo o in acconto della rata + if (nrata > 0 && partita->esiste(nriga,nrata)) // calcola se e' a saldo o in acconto della rata { acc_sal = reff.get_char(REFF_ACCSAL); if (acc_sal != 'S' && acc_sal != 'A') @@ -1016,9 +1022,8 @@ void TContabilizzazione_effetti_app::compile_saldac(const TEffetto& eff, } else { - if (nriga != uns) - nriga = uns; // E' praticamente impossibile che si trovi la fattura - // senza le proprie scadenze. Al limite settiamo il numero di riga per non assegnati. + nriga = uns; // E' praticamente impossibile che si trovi la fattura + nrata = uns; // senza le proprie scadenze. Al limite settiamo il numero di riga per non assegnati. } // Creo una nuova riga di pagamento TRectype& old_riga_pagamento = partita->pagamento(nriga,nrata,nrigp);