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;
}