From d76774f0bd8e91d2e9e040284f2b2c19be311577 Mon Sep 17 00:00:00 2001 From: guy Date: Wed, 29 Jun 2005 13:04:06 +0000 Subject: [PATCH] Patch level : 2.2 Files correlati : Ricompilazione Demo : [ ] Commento : Corretta contabilizzazione analitica documenti git-svn-id: svn://10.65.10.50/trunk@13236 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- ve/f33.dir | 2 +- ve/f33.trr | 3 +- ve/velib03.cpp | 10 ++-- ve/velib04.h | 4 +- ve/velib04b.cpp | 53 +++++++++++++-------- ve/velib04f.cpp | 120 ++++++++++++++++++++++++++++-------------------- 6 files changed, 114 insertions(+), 78 deletions(-) diff --git a/ve/f33.dir b/ve/f33.dir index 4219a7ce1..e34cfc3e5 100755 --- a/ve/f33.dir +++ b/ve/f33.dir @@ -1,3 +1,3 @@ 33 0 -$doc|0|0|516|0|Documenti di vendita|NDOC*3|| +$doc|0|0|523|0|Documenti di vendita|NDOC*3|| diff --git a/ve/f33.trr b/ve/f33.trr index 1af4b9677..2020ffcab 100755 --- a/ve/f33.trr +++ b/ve/f33.trr @@ -1,5 +1,5 @@ 33 -78 +79 CODNUM|1|4|0|Codice della numerazione ANNO|2|4|0|Anno PROVV|1|1|0|Tipo numerazione

rovvisorio efinitivo @@ -78,6 +78,7 @@ FASCMS|1|10|0|Fase Commessa CODCOSTO|1|20|0|Centro di costo NUMREG|3|7|0|Numero movimento contabilizzato NUMANT|3|7|0|Numero movimento anticipo contabilizzato +NUMREGCA|3|7|0|Numero di operazione contabilita' analitica 4 PROVV+ANNO+CODNUM+NDOC| TIPOCF+CODCF+PROVV+ANNO+DATADOC+CODNUM+NDOC|X diff --git a/ve/velib03.cpp b/ve/velib03.cpp index 8524c0384..dc92d7d20 100755 --- a/ve/velib03.cpp +++ b/ve/velib03.cpp @@ -2179,9 +2179,9 @@ void TDocumento::update_spese_aut(TString_array & spese_aut, bool preserve_old, TString16 tipo(sp.tipo_riga()); TRiga_documento & riga = new_row(tipo); - riga.put("CODART", s); + riga.put(RDOC_CODART, s); riga.generata(); - riga.put("DESCR", sp.descrizione()); + riga.put(RDOC_DESCR, sp.descrizione()); switch (sp.tipo()) { case 'Q': @@ -2199,13 +2199,13 @@ void TDocumento::update_spese_aut(TString_array & spese_aut, bool preserve_old, real prezzo = sp.prezzo(); sppr_calc(sp, valuta, cambio, prezzo, controeuro); - riga.put("PREZZO", prezzo); - riga.put("UMQTA", sp.um()); + riga.put(RDOC_PREZZO, prezzo); + riga.put(RDOC_UMQTA, sp.um()); } break; case 'P': default: - riga.put("QTA", sp.perc()); + riga.put(RDOC_QTA, sp.perc()); break; } if (cod_iva_cli.empty()) diff --git a/ve/velib04.h b/ve/velib04.h index dfbd347e4..a0e9e0970 100755 --- a/ve/velib04.h +++ b/ve/velib04.h @@ -352,7 +352,7 @@ protected: error_type write_anticipo(TDocumento&); // scrive il movimento INTRA error_type write_intra(TDocumento&); - error_type write_anal(const TDocumento& doc, const TMovimentoPN& mv); + error_type write_anal(TDocumento& doc, const TMovimentoPN& mv); // Aggiorna i saldi void aggiorna_saldi(TSaldo_agg& saldo, TMovimentoPN& mv, bool save); @@ -482,7 +482,7 @@ protected: public: virtual bool elabora(TLista_documenti& doc_in, TLista_documenti& doc_out, const TDate& data_elab, bool interattivo = false); - bool elabora(const TDocumento& doc, long numreg_cg, TViswin* viswin, bool can_write); + bool elabora(TDocumento& doc, long numreg_cg, TViswin* viswin, bool can_write); TContabilizzazione_analitica(); TContabilizzazione_analitica(const TRectype& rec); diff --git a/ve/velib04b.cpp b/ve/velib04b.cpp index 86cf57570..c0ce30060 100755 --- a/ve/velib04b.cpp +++ b/ve/velib04b.cpp @@ -3,7 +3,6 @@ #include #include #include -#include #include #include @@ -14,6 +13,7 @@ #include "../cg/cgsaldac.h" #include "../in/inlib01.h" #include "../mg/anamag.h" +#include "../ca/movana.h" #include #include @@ -1443,7 +1443,7 @@ error_type TContabilizzazione::compile_head_mov_re(TDocumento& doc) _viswin->add_line(msg); return no_error; } - msg.format("--- Il documento verrą ricontabilizzato nel movimento %ld", numreg); + msg.format("--- Il documento verrą ricontabilizzato nel movimento contabile %ld", numreg); _viswin->add_line(msg); } else @@ -2747,7 +2747,7 @@ error_type TContabilizzazione::write_all(TDocumento& doc, TMovimentoPN_VE & movi err = movimento.write(); if (err != NOERR) { - error_box("Errore %d scrivendo il movimento %ld.", err, numreg); + error_box("*** Errore %d scrivendo il movimento contabile %ld.", err, numreg); return generic_error; } // Aggiorno subito i saldi @@ -2773,7 +2773,7 @@ error_type TContabilizzazione::write_all(TDocumento& doc, TMovimentoPN_VE & movi const TRectype& mov = _movimento->curr(); TString80 msg; - msg.format("Generazione Movimento $[b,w]%5ld$[n,w]", mov.get_long(MOV_NUMREG)); + msg.format("--- Movimento contabile $[b,w]%ld$[n,w]", mov.get_long(MOV_NUMREG)); msg << " del " << mov.get(MOV_DATAREG); _viswin->add_line(msg); @@ -2807,7 +2807,7 @@ error_type TContabilizzazione::write_all_re(TDocumento& doc, TMovimentoPN_VE & m err = movimento.write(); if (err != NOERR) { - error_box("Errore %d scrivendo il movimento %ld.", err, numreg); + error_box("*** Errore %d scrivendo il movimento contabile %ld.", err, numreg); return generic_error; } // Aggiorno subito i saldi @@ -2818,9 +2818,8 @@ error_type TContabilizzazione::write_all_re(TDocumento& doc, TMovimentoPN_VE & m _total_docs++; change_doc_status(doc); - TString msg("Generazione Movimento "); - - msg << "$[b,w]" << _movimento->curr().get(MOV_NUMREG) << "$[n,w]"; + TString msg(TR("--- Movimento contabile ")); + msg << "$[b,w]" << _movimento->curr().get_long(MOV_NUMREG) << "$[n,w]"; msg << " del " << _movimento->curr().get(MOV_DATAREG); _viswin->add_line(msg); @@ -3441,7 +3440,7 @@ error_type TContabilizzazione::write_intra(TDocumento& doc) intra.put("TOTDOCIMM", totale_righe); if (_caus->valintra() && codvali.empty()) { - TString8 codval(TCurrency::get_firm_val()); + TString4 codval(TCurrency::get_firm_val()); if (codval.empty()) TCurrency::get_euro_val(); @@ -3467,7 +3466,7 @@ error_type TContabilizzazione::write_intra(TDocumento& doc) return _error; } -error_type TContabilizzazione::write_anal(const TDocumento& doc, const TMovimentoPN& movimento) +error_type TContabilizzazione::write_anal(TDocumento& doc, const TMovimentoPN& movimento) { // Controlla flag sulla causale if (!_caus->link_analitica()) @@ -3542,9 +3541,9 @@ void TContabilizzazione::aggiorna_saldi(TSaldo_agg& saldo, TMovimentoPN& mv, boo void TContabilizzazione::display_error(TDocumento& doc) { TToken_string msg(256, '.'); - const TString16 numerazione = doc.numerazione(); + const TString4 numerazione = doc.numerazione(); const long numero = doc.numero(); - const TString16 causale = _caus == NULL ? "" : _caus->codice(); + const TString4 causale = _caus == NULL ? "" : _caus->codice(); switch (_error) { @@ -3716,7 +3715,7 @@ bool TContabilizzazione::in_enabled() const bool TContabilizzazione::prev_contabilized(const TDocumento& doc) const { - const TString16 codnum = doc.get(DOC_CODNUM); + const TString4 codnum = doc.get(DOC_CODNUM); const int anno = doc.get_int(DOC_ANNO); const char provv = doc.get_char(DOC_PROVV); long ndoc = doc.get_long(DOC_NDOC); @@ -3738,18 +3737,31 @@ bool TContabilizzazione::prev_contabilized(const TDocumento& doc) const return err == NOERR && rec.same_key(doc.head(), 1); } - const TString16 stato_doc = rec.get(DOC_STATO); - const TString16 stato_ok = stato_finale_doc_iniziale(); + const TString4 stato_doc = rec.get(DOC_STATO); + const TString4 stato_ok = stato_finale_doc_iniziale(); return stato_doc == stato_ok; } static bool link_handler(int n, const char* nreg) -{ - if (n == 0) +{ + switch (n) { - TRectype mov(LF_MOV); - mov.put(MOV_NUMREG, nreg); - return mov.edit(); + case 0: + { + TRectype mov(LF_MOV); + mov.put(MOV_NUMREG, nreg); + return mov.edit(); + } + break; + case 1: + { + TRectype mov(LF_MOVANA); + mov.put(MOVANA_NUMREG, nreg); + return mov.edit(); + } + break; + default: + break; } return false; } @@ -3778,6 +3790,7 @@ bool TContabilizzazione::elabora(TLista_documenti& doc_in, TLista_documenti& doc TPrinter& p = printer(); p.links().add("Movimento Prima Nota |b|w", 0); + p.links().add("Movimento Analitico |r|w", 1); p.setlinkhandler(link_handler); _viswin = new TViswin(NULL, TR("Contabilizzazione documenti"), false, true, true); _viswin->open_modal(); diff --git a/ve/velib04f.cpp b/ve/velib04f.cpp index 070a6e9e2..c85c84583 100755 --- a/ve/velib04f.cpp +++ b/ve/velib04f.cpp @@ -347,14 +347,12 @@ void TContabilizzazione_analitica::init_distrib(TString_array& conti, TGeneric_d } } -bool TContabilizzazione_analitica::elabora(const TDocumento& doc, long numreg_cg, TViswin* viswin, bool can_write) +bool TContabilizzazione_analitica::elabora(TDocumento& doc, long numreg_cg, TViswin* viswin, bool can_write) { - TAnal_mov* mov = NULL; - TDate datareg, datacomp; int annoes = 0; - TString descr; - bool dare = true; + TString descr, msg; + bool dare = false; if (numreg_cg > 0) { @@ -365,7 +363,6 @@ bool TContabilizzazione_analitica::elabora(const TDocumento& doc, long numreg_cg descr = mov_cg.get(MOV_DESCR); TCausale & caus = (TCausale &) doc2caus(doc); dare = !(caus.sezione_clifo() == 'D'); - } else { @@ -375,10 +372,39 @@ bool TContabilizzazione_analitica::elabora(const TDocumento& doc, long numreg_cg if (doc.is_nota_credito()) dare= !dare; } - + const char sezione = dare ? 'D' : 'A'; const int decimals = TCurrency::get_firm_dec(); - // Scandisco le righe del documento, + TAnal_mov mov; + long numreg_ca = doc.get_long(DOC_NUMREGCA); + if (numreg_ca > 0) + { + const int err = mov.read(numreg_ca); + if (err == NOERR) + { + if (viswin != NULL) + { + msg.format("--- Il documento verrą ricontabilizzato nel movimento analitico %ld", numreg_ca); + viswin->add_line(msg); + } + mov.body().destroy_rows(); + } + else + mov.put(MOVANA_NUMREG, numreg_ca = 0); + } + mov.put(MOVANA_DATAREG, datareg); + mov.put(MOVANA_DATACOMP, datacomp); + mov.put(MOVANA_ANNOES, annoes); + mov.put(MOVANA_DESCR, descr); + mov.put(MOVANA_NUMREGCG, numreg_cg); // Movimento contabile associato + mov.put(MOVANA_DPROVV, doc.get(DOC_PROVV)); // Documento originale + mov.put(MOVANA_DANNO, doc.get(DOC_ANNO)); + mov.put(MOVANA_DCODNUM, doc.get(DOC_CODNUM)); + mov.put(MOVANA_DNDOC, doc.get(DOC_NDOC)); + + TImporto totdoc; // Totale movimento analitico + + // Scandisco le righe del documento, for (int i = 1; i <= doc.physical_rows(); i++) { const TRiga_documento& riga = doc[i]; @@ -406,52 +432,48 @@ bool TContabilizzazione_analitica::elabora(const TDocumento& doc, long numreg_cg continue; } - if (can_write) + TGeneric_distrib esso(valore, decimals); + init_distrib(conti, esso); + FOR_EACH_ARRAY_ROW(conti, i, row) { - const char sezione = dare ? 'D' : 'A'; + TRectype& rmov = mov.new_row(); + rmov.put(RMOVANA_ANNOES, annoes); + rmov.put(RMOVANA_CODCONTO, row->get(0)); + rmov.put(RMOVANA_CODCMS, row->get()); + rmov.put(RMOVANA_CODFASE, row->get()); + rmov.put(RMOVANA_CODCCOSTO,row->get()); - TImporto totdoc; + TImporto imp(sezione, real(esso.get())); + imp.normalize(); + rmov.put(RMOVANA_SEZIONE, imp.sezione()); + rmov.put(RMOVANA_IMPORTO, imp.valore()); - TGeneric_distrib esso(valore, decimals); - init_distrib(conti, esso); - FOR_EACH_ARRAY_ROW(conti, i, row) - { - if (mov == NULL) - { - mov = new TAnal_mov; - mov->put(MOVANA_DATAREG, datareg); - mov->put(MOVANA_DATACOMP, datacomp); - mov->put(MOVANA_ANNOES, annoes); - mov->put(MOVANA_NUMREGCG, numreg_cg); - mov->put(MOVANA_DESCR, descr); - } - TRectype& rmov = mov->new_row(); - rmov.put(RMOVANA_ANNOES, annoes); - rmov.put(RMOVANA_CODCONTO, row->get(0)); - rmov.put(RMOVANA_CODCMS, row->get()); - rmov.put(RMOVANA_CODFASE, row->get()); - rmov.put(RMOVANA_CODCCOSTO,row->get()); - - TImporto imp(sezione, real(esso.get())); - imp.normalize(); - rmov.put(RMOVANA_SEZIONE, imp.sezione()); - rmov.put(RMOVANA_IMPORTO, imp.valore()); - - totdoc += imp; - } - - if (mov != NULL) - { - totdoc.normalize(); - mov->put(MOVANA_SEZIONE, totdoc.sezione()); - mov->put(MOVANA_TOTDOC, totdoc.valore()); - - TLocalisamfile movana(LF_MOVANA); - mov->write(movana); - delete mov; - } + totdoc += imp; } } + + if (can_write) + { + totdoc.normalize(); + mov.put(MOVANA_SEZIONE, totdoc.sezione()); + mov.put(MOVANA_TOTDOC, totdoc.valore()); + + TLocalisamfile movana(LF_MOVANA); + if (numreg_ca > 0) + mov.rewrite(movana); + else + { + mov.write(movana); + numreg_ca = mov.get_long(MOVANA_NUMREG); + doc.put(DOC_NUMREGCA, numreg_ca); + } + if (viswin != NULL) + { + msg.format(FR("--- Movimento analitico $[r,w]%ld$[n,w] del %s"), numreg_ca, datacomp.string()); + viswin->add_line(msg); + } + } + return can_write; }