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
This commit is contained in:
parent
599a3684ec
commit
d76774f0bd
@ -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||
|
||||
|
@ -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 <P>rovvisorio <D>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
|
||||
|
@ -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())
|
||||
|
@ -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);
|
||||
|
@ -3,7 +3,6 @@
|
||||
#include <execp.h>
|
||||
#include <modaut.h>
|
||||
#include <tabutil.h>
|
||||
#include <progind.h>
|
||||
#include <printer.h>
|
||||
#include <viswin.h>
|
||||
|
||||
@ -14,6 +13,7 @@
|
||||
#include "../cg/cgsaldac.h"
|
||||
#include "../in/inlib01.h"
|
||||
#include "../mg/anamag.h"
|
||||
#include "../ca/movana.h"
|
||||
|
||||
#include <comuni.h>
|
||||
#include <unloc.h>
|
||||
@ -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();
|
||||
|
120
ve/velib04f.cpp
120
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;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user