Patch level : 4.0 448

Files correlati     : ve0 ve6
Ricompilazione Demo : [ ]
Commento            :
Migliorata la contabilizzazione analitica (forse)
Corretta copy_data in modo da azzerare i movimenti collegati alla testata del documento


git-svn-id: svn://10.65.10.50/trunk@14141 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2006-07-10 13:30:29 +00:00
parent 16ee7506d4
commit 84f60d00da
7 changed files with 80 additions and 82 deletions

View File

@ -1,7 +1,6 @@
#include <applicat.h> #include <applicat.h>
#include "vereplib.h" #include "vereplib.h"
#include "../ba/ba8400.h"
#include "../ba/ba8500.h" #include "../ba/ba8500.h"
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////

View File

@ -193,10 +193,9 @@ public:
class TTipo_documento : public TRectype // velib03 class TTipo_documento : public TRectype // velib03
{ {
static TAssoc_array _formule_documento; static TAssoc_array _formule_documento;
TToken_string _formule; TToken_string _formule;
TString_array _keys_descrs; // Tipi riga per listbox TString_array _keys_descrs; // Tipi riga per listbox
TString_array _defaults; // Defaults per i campi della maschera TString_array _defaults; // Defaults per i campi della maschera
TString_array _sheet_columns; // Colonne dello spreadsheet TString_array _sheet_columns; // Colonne dello spreadsheet
TString_array _handlers; // Handlers TString_array _handlers; // Handlers
@ -293,7 +292,7 @@ public:
bool is_ricavo() const ; bool is_ricavo() const ;
TFormula_documento* first_formula() { return succ_formula(true); } TFormula_documento* first_formula() { return succ_formula(true); }
TFormula_documento* succ_formula(bool restart = FALSE); TFormula_documento* succ_formula(bool restart = false);
const int ncopie() const { return get_int("I0"); } const int ncopie() const { return get_int("I0"); }
const int additional_ncopie() const { return get_int("I2"); } const int additional_ncopie() const { return get_int("I2"); }
@ -302,7 +301,7 @@ public:
bool add_conai() const { return get_bool("B6"); } bool add_conai() const { return get_bool("B6"); }
bool calcolo_lordo() const { return get_bool("B8"); } bool calcolo_lordo() const { return get_bool("B8"); }
bool fattura_commerciale() const { return get_bool("B9"); } bool fattura_commerciale() const { return get_bool("B9"); }
bool allega_documenti() const { return get_bool("B10"); } bool allega_documenti() const { return get_bool("B10"); }
const TString& stringa_descrizione_documento() const { return _str_desc_doc; } const TString& stringa_descrizione_documento() const { return _str_desc_doc; }
const TString& stringa_descrizione_riga() const { return _str_desc_rdoc; } const TString& stringa_descrizione_riga() const { return _str_desc_rdoc; }
@ -343,7 +342,7 @@ public:
const bool dont_test_datadoc() const { return get_bool("B2"); } const bool dont_test_datadoc() const { return get_bool("B2"); }
const bool fattura_emettere_ricevere() const { return get_bool("B3"); } const bool fattura_emettere_ricevere() const { return get_bool("B3"); }
const bool save_and_new() const { return get_bool("B4"); } const bool save_and_new() const { return get_bool("B4"); }
const bool test_eser() const { return ! get_bool("B5"); } const bool test_eser() const { return !get_bool("B5"); }
const TString& tipo_doc(int i) const; const TString& tipo_doc(int i) const;
int ntipi_doc() const; int ntipi_doc() const;

View File

@ -298,7 +298,7 @@ real TDocumento::spese_incasso(int ndec, TTipo_importo t) const
{ {
if (pag.importo_rata(i) >= impmineff) // Se la rata supera il minimo contrattuale if (pag.importo_rata(i) >= impmineff) // Se la rata supera il minimo contrattuale
{ {
const TTipo_pag tp = pag.tipo_rata(i); const TTipo_pag tp = (TTipo_pag)pag.tipo_rata(i);
imp_spese += (const real&)spese_inc[tp]; imp_spese += (const real&)spese_inc[tp];
} }
} }
@ -589,19 +589,21 @@ void TDocumento::set_key(TRectype& rec, char provv, int anno, const char* codnum
// Funzione statica utile a tutti gli utenti di LF_DOC e LF_RIGHEDOC // Funzione statica utile a tutti gli utenti di LF_DOC e LF_RIGHEDOC
void TDocumento::copy_data(TRectype& dst, const TRectype& src) void TDocumento::copy_data(TRectype& dst, const TRectype& src)
{ {
const bool is_riga = dst.num() == LF_RIGHEDOC;
// Memorizza tutti i campi chiave // Memorizza tutti i campi chiave
const char provv = dst.get_char(RDOC_PROVV); const char provv = dst.get_char(RDOC_PROVV);
const int anno = dst.get_int(RDOC_ANNO); const int anno = dst.get_int(RDOC_ANNO);
const TString4 codnum = dst.get(RDOC_CODNUM); const TString4 codnum = dst.get(RDOC_CODNUM);
const long numdoc = dst.get_long(RDOC_NDOC); const long numdoc = dst.get_long(RDOC_NDOC);
const int nriga = dst.num() == LF_RIGHEDOC ? dst.get_int(RDOC_NRIGA) : 0; const int nriga = is_riga ? dst.get_int(RDOC_NRIGA) : 0;
const long idriga = dst.num() == LF_RIGHEDOC ? dst.get_long(RDOC_IDRIGA) : 0; const long idriga = is_riga ? dst.get_long(RDOC_IDRIGA) : 0;
// Copia tutto il record // Copia tutto il record
dst = src; dst = src;
// Ripristina tutti i campi chiave // Ripristina tutti i campi chiave
set_key(dst, provv, anno, codnum, numdoc); set_key(dst, provv, anno, codnum, numdoc);
dst.init_memo(RECORD_NON_FISICO); dst.init_memo(RECORD_NON_FISICO);
if (nriga > 0) if (is_riga)
{ {
dst.put(RDOC_NRIGA, nriga); dst.put(RDOC_NRIGA, nriga);
dst.put(RDOC_IDRIGA, idriga); dst.put(RDOC_IDRIGA, idriga);
@ -610,7 +612,11 @@ void TDocumento::copy_data(TRectype& dst, const TRectype& src)
dst.put(RDOC_DESCEST, memo); dst.put(RDOC_DESCEST, memo);
} }
else else
dst.zero(DOC_MOVMAG); {
dst.zero(DOC_MOVMAG);
dst.zero(DOC_NUMREG);
dst.zero(DOC_NUMREGCA);
}
} }
// Funzione statica utile a tutti gli utenti di LF_RIGHEDOC // Funzione statica utile a tutti gli utenti di LF_RIGHEDOC
@ -859,7 +865,7 @@ int TDocumento::write_rewrite(TBaseisamfile & f, bool re) const
{ {
TString16 name("CODSP0"); TString16 name("CODSP0");
TString_array spese; TString_array spese;
TRectype & ven_rec = clifor().vendite(); const TRectype & ven_rec = clifor().vendite();
for (int i = 1; i <= 4; i++) for (int i = 1; i <= 4; i++)
{ {
name.rtrim(1); name << i; name.rtrim(1); name << i;
@ -951,7 +957,7 @@ int TDocumento::write_rewrite(TBaseisamfile & f, bool re) const
mov.put(MOVMAG_CODCONT, get("CODCONT")); mov.put(MOVMAG_CODCONT, get("CODCONT"));
mov.put(MOVMAG_CODCAMP, get("CODCAMP")); mov.put(MOVMAG_CODCAMP, get("CODCAMP"));
mov.put(MOVMAG_CODCAUS, get("CAUSMAG")); mov.put(MOVMAG_CODCAUS, get("CAUSMAG"));
TString8 codnum(numerazione()); const TString4 codnum(numerazione());
mov.put(MOVMAG_DESCR, format("%s %s n. %ld del %s", (const char *) tipo().get("S1"),(const char *)codnum, numdoc, (const char *) d.string())); mov.put(MOVMAG_DESCR, format("%s %s n. %ld del %s", (const char *) tipo().get("S1"),(const char *)codnum, numdoc, (const char *) d.string()));
mov.put(MOVMAG_TIPOCF, get("TIPOCF")); mov.put(MOVMAG_TIPOCF, get("TIPOCF"));
mov.put(MOVMAG_CODCF, get("CODCF")); mov.put(MOVMAG_CODCF, get("CODCF"));

View File

@ -475,8 +475,16 @@ public:
virtual ~TConsuntivazione_produzione() { } virtual ~TConsuntivazione_produzione() { }
}; };
class TCache_causali; // Internal use only
class TContabilizzazione_analitica : public TElaborazione // velib04f class TContabilizzazione_analitica : public TElaborazione // velib04f
{ {
TCache_ripartizioni _rip;
TToken_string _search_seq;
TBill _sco_perc_bill_an, _sco_imp_bill_an;
TCache_causali* _caus;
error_type _error; // Errore rilevato durante l'elaborazione error_type _error; // Errore rilevato durante l'elaborazione
bool _usepdcc; bool _usepdcc;

View File

@ -1,8 +1,7 @@
#include <automask.h>
#include "velib04.h" #include "velib04.h"
#include "velib04d.h" #include "velib04d.h"
#include <automask.h>
#include <doc.h> #include <doc.h>
#include <rdoc.h> #include <rdoc.h>

View File

@ -10,7 +10,9 @@
#include "../cg/cg2103.h" #include "../cg/cg2103.h"
#include "../mg/anamag.h" #include "../mg/anamag.h"
TBill _sco_perc_bill_an, _sco_imp_bill_an; ///////////////////////////////////////////////////////////
// TCache_causali
///////////////////////////////////////////////////////////
class TCache_causali : public TCache class TCache_causali : public TCache
{ {
@ -34,14 +36,10 @@ const TCausale& TCache_causali::causale(const TDocumento& doc)
// Cerca il codice causale sul cliente // Cerca il codice causale sul cliente
const char* const fld = doc.is_nota_credito() ? CFV_CODCAUSNC : CFV_CODCAUS; const char* const fld = doc.is_nota_credito() ? CFV_CODCAUSNC : CFV_CODCAUS;
TToken_string key; TString16 key;
key.add(doc.get(DOC_TIPOCF)); key.format("%c|%ld", doc.get_char(DOC_TIPOCF), doc.get_long(DOC_CODCF));
key.add(doc.get(DOC_CODCF)); TString4 codcaus = cache().get(LF_CFVEN, key, fld);
const TRectype& cfven = cache().get(LF_CFVEN, key); if (codcaus.blank()) // Se non lo trova guarda sul tipo documento
TString16 codcaus = cfven.get(fld);
// Se non lo trova guarda sul tipo documento
if (codcaus.empty())
{ {
const TTipo_documento& tipo = doc.tipo(); const TTipo_documento& tipo = doc.tipo();
codcaus = tipo.causale(); codcaus = tipo.causale();
@ -49,24 +47,19 @@ const TCausale& TCache_causali::causale(const TDocumento& doc)
//Assegna l'anno della causale //Assegna l'anno della causale
const int year = doc.get_date(DOC_DATADOC).year(); const int year = doc.get_date(DOC_DATADOC).year();
TString16 chiave; key.format("%4s|%4d", (const char*)codcaus, year);
chiave.format("%s|%4d", (const char *) codcaus, year);
// Trasforma il codice in causale vera e propria // Trasforma il codice in causale vera e propria
return (const TCausale&)*objptr(chiave); return (const TCausale&)*objptr(key);
} }
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
// TContabilizzazione_analitica // TContabilizzazione_analitica
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
static TCache_ripartizioni _rip;
static TToken_string _search_seq;
const TCausale& TContabilizzazione_analitica::doc2caus(const TDocumento& doc) const TCausale& TContabilizzazione_analitica::doc2caus(const TDocumento& doc)
{ {
static TCache_causali _caus; CHECK(_caus, "Cache nulla");
return _caus.causale(doc); return _caus->causale(doc);
} }
const TCausale& TContabilizzazione_analitica::rdoc2caus(const TRiga_documento& rdoc) const TCausale& TContabilizzazione_analitica::rdoc2caus(const TRiga_documento& rdoc)
@ -77,13 +70,6 @@ const TCausale& TContabilizzazione_analitica::rdoc2caus(const TRiga_documento& r
// Copiata dalla contabilizzazione ed eliminati riferimenti a tutte le variabili globali del cazzo // Copiata dalla contabilizzazione ed eliminati riferimenti a tutte le variabili globali del cazzo
bool TContabilizzazione_analitica::search_costo_ricavo(const TRiga_documento& r, TBill& conto) bool TContabilizzazione_analitica::search_costo_ricavo(const TRiga_documento& r, TBill& conto)
{ {
if (_search_seq.blank())
{
TConfig conf(CONFIG_DITTA, "ve");
_search_seq = conf.get("RICERCACR");
}
const int items = _search_seq.items();
TString16 clifo_key; TString16 clifo_key;
clifo_key.format("%c|%ld", r.doc().get_char(DOC_TIPOCF), r.doc().get_long(DOC_CODCF)); clifo_key.format("%c|%ld", r.doc().get_char(DOC_TIPOCF), r.doc().get_long(DOC_CODCF));
@ -108,6 +94,7 @@ bool TContabilizzazione_analitica::search_costo_ricavo(const TRiga_documento& r,
TString4 tok; TString4 tok;
// Scorre la stringa di ricerca // Scorre la stringa di ricerca
const int items = _search_seq.items();
for (int i=0; i < items;i++) for (int i=0; i < items;i++)
{ {
_search_seq.get(i, tok); _search_seq.get(i, tok);
@ -224,6 +211,7 @@ bool TContabilizzazione_analitica::search_costo_ricavo(const TRiga_documento& r,
{ {
TString4 tok; TString4 tok;
// Scorre la stringa di ricerca ma solo per causale o CLI/FO // Scorre la stringa di ricerca ma solo per causale o CLI/FO
const int items = _search_seq.items();
for (int i=0; i<items;i++) for (int i=0; i<items;i++)
{ {
_search_seq.get(i, tok); _search_seq.get(i, tok);
@ -237,14 +225,13 @@ bool TContabilizzazione_analitica::search_costo_ricavo(const TRiga_documento& r,
conto.set(gr,co,so); conto.set(gr,co,so);
if (conto.ok()) if (conto.ok())
break; break;
} else
if (tok == "CA")
{
const TCausale& caus = rdoc2caus(r);
if (caus.IVA2bill(codiva,conto))
break;
} }
else
if (tok == "CA")
{
const TCausale& caus = rdoc2caus(r);
if (caus.IVA2bill(codiva,conto))
break;
}
} }
} }
@ -284,13 +271,12 @@ bool TContabilizzazione_analitica::find_conti_iva_indetraibile(const TRiga_docum
const TString80 riga_cos = riga.codice_costo(); const TString80 riga_cos = riga.codice_costo();
const TString80 riga_cms = riga.codice_commessa(); const TString80 riga_cms = riga.codice_commessa();
const TString16 riga_fsc = riga.fase_commessa(); const TString16 riga_fsc = riga.fase_commessa();
const bool riga_any = riga_cos.not_empty() || riga_cms.not_empty() || riga_fsc.not_empty(); const bool riga_any = riga_cos.full() || riga_cms.full() || riga_fsc.full();
if (_usepdcc) TToken_string conto;
if (_usepdcc)
{ {
TToken_string conto; conto = bill.string(0x8); // format("%03d%03d%06ld", bill.gruppo(), bill.conto(), bill.sottoconto());
conto.format("%03d%03d%06ld", bill.gruppo(), bill.conto(), bill.sottoconto());
if (riga_any) if (riga_any)
{ {
conto.add(riga_cos, 1); conto.add(riga_cos, 1);
@ -304,7 +290,6 @@ bool TContabilizzazione_analitica::find_conti_iva_indetraibile(const TRiga_docum
{ {
// Cerca la ripartizione del conto // Cerca la ripartizione del conto
const TRecord_array& rip = _rip.righe(bill); const TRecord_array& rip = _rip.righe(bill);
TToken_string conto;
for (int i = 1; i <= rip.rows(); i++) for (int i = 1; i <= rip.rows(); i++)
{ {
const TRectype& rigarip = rip.row(i); const TRectype& rigarip = rip.row(i);
@ -325,8 +310,6 @@ bool TContabilizzazione_analitica::find_conti_iva_indetraibile(const TRiga_docum
conti.add(conto); conti.add(conto);
} }
} }
return !conti.empty(); return !conti.empty();
} }
@ -340,20 +323,6 @@ bool TContabilizzazione_analitica::find_conti(const TRiga_documento& riga, TStri
if (riga.is_sconto()) if (riga.is_sconto())
{ {
if (!_sco_perc_bill_an.ok())
{
TConfig conf(CONFIG_DITTA, "ve");
int gr = conf.get_int("SCOPRCODCON","ve",1);
int co = conf.get_int("SCOPRCODCON","ve",2);
long so = conf.get_long("SCOPRCODCON","ve",3);
_sco_perc_bill_an.set(gr,co,so);
gr = conf.get_int("SCOIMCODCON","ve",1);
co = conf.get_int("SCOIMCODCON","ve",2);
so = conf.get_long("SCOIMCODCON","ve",3);
_sco_imp_bill_an.set(gr,co,so);
}
if (riga.is_sconto_perc()) if (riga.is_sconto_perc())
bill = _sco_perc_bill_an; bill = _sco_perc_bill_an;
else else
@ -361,7 +330,7 @@ bool TContabilizzazione_analitica::find_conti(const TRiga_documento& riga, TStri
if (!bill.is_analitico()) if (!bill.is_analitico())
return true; return true;
if (_usepdcc) if (_usepdcc)
contanal.format("%03d%03d%06ld", bill.gruppo(), bill.conto(), bill.sottoconto()); contanal = bill.string(0x8); // format("%03d%03d%06ld", bill.gruppo(), bill.conto(), bill.sottoconto());
} }
else else
{ {
@ -375,7 +344,7 @@ bool TContabilizzazione_analitica::find_conti(const TRiga_documento& riga, TStri
const TRectype& anamag = cache().get(LF_ANAMAG, riga.get(RDOC_CODARTMAG)); const TRectype& anamag = cache().get(LF_ANAMAG, riga.get(RDOC_CODARTMAG));
bArcticleFound = !anamag.empty(); bArcticleFound = !anamag.empty();
if (_usepdcc) if (_usepdcc)
contanal.format("%03d%03d%06ld", bill.gruppo(), bill.conto(), bill.sottoconto()); contanal = bill.string(0x8); // format("%03d%03d%06ld", bill.gruppo(), bill.conto(), bill.sottoconto());
else else
contanal = anamag.get(tipocf == 'F' ? ANAMAG_CONTOINDA : ANAMAG_CONTOINDV); contanal = anamag.get(tipocf == 'F' ? ANAMAG_CONTOINDA : ANAMAG_CONTOINDV);
} }
@ -552,7 +521,7 @@ bool TContabilizzazione_analitica::elabora(TDocumento& doc, long numreg_cg, TVis
const real qta = riga.get(RDOC_QTA); const real qta = riga.get(RDOC_QTA);
// const real valore = riga.valore(true, decimals); // const real valore = riga.valore(true, decimals);
real valore = riga.importo(true, false); real valore = riga.importo(true, false);
if (valore.is_zero()) if (valore.is_zero())
continue; continue;
@ -717,19 +686,37 @@ void TContabilizzazione_analitica::init()
{ {
TConfig& cfg = ca_config(); TConfig& cfg = ca_config();
_usepdcc = cfg.get_bool("UsePdcc"); _usepdcc = cfg.get_bool("UsePdcc");
TConfig conf(CONFIG_DITTA, "ve");
_search_seq = conf.get("RICERCACR");
int gr = conf.get_int("SCOPRCODCON","ve",1);
int co = conf.get_int("SCOPRCODCON","ve",2);
long so = conf.get_long("SCOPRCODCON","ve",3);
_sco_perc_bill_an.set(gr,co,so);
gr = conf.get_int("SCOIMCODCON","ve",1);
co = conf.get_int("SCOIMCODCON","ve",2);
so = conf.get_long("SCOIMCODCON","ve",3);
_sco_imp_bill_an.set(gr,co,so);
_caus = new TCache_causali;
} }
TContabilizzazione_analitica::TContabilizzazione_analitica() TContabilizzazione_analitica::TContabilizzazione_analitica()
: TElaborazione(NULL), _error(no_error) : TElaborazione(NULL), _error(no_error), _caus(NULL)
{ {
init(); init();
} }
TContabilizzazione_analitica::TContabilizzazione_analitica(const TRectype& rec) TContabilizzazione_analitica::TContabilizzazione_analitica(const TRectype& rec)
: TElaborazione(rec), _error(no_error) : TElaborazione(rec), _error(no_error), _caus(NULL)
{ {
init(); init();
} }
TContabilizzazione_analitica::~TContabilizzazione_analitica() TContabilizzazione_analitica::~TContabilizzazione_analitica()
{ } {
if (_caus != NULL)
delete _caus;
}

View File

@ -916,7 +916,7 @@ void TDocumento_mask::spese2mask()
TString16 name("CODSP0"); TString16 name("CODSP0");
TString_array spese; TString_array spese;
TRectype & ven_rec = c.vendite(); const TRectype & ven_rec = c.vendite();
for (int i = 1; i <= 4; i++) for (int i = 1; i <= 4; i++)
{ {
name.rtrim(1); name << i; name.rtrim(1); name << i;
@ -1321,7 +1321,7 @@ bool TDocumento_mask::ss_notify( TSheet_field& ss, int r, KEY key )
if (key == K_CTRL + K_INS) if (key == K_CTRL + K_INS)
{ {
TRiga_documento & riga = doc[r + 1]; TRiga_documento & riga = doc[r + 1];
TRectype & ven_rec = doc.clifor().vendite(); const TRectype & ven_rec = doc.clifor().vendite();
TString16 s(ven_rec.get(CFV_CODMAG)); TString16 s(ven_rec.get(CFV_CODMAG));
const TTipo_riga_documento & t = riga.tipo(); const TTipo_riga_documento & t = riga.tipo();
@ -2380,14 +2380,14 @@ bool TElabora_mask::elabora()
{ {
const char provv = get(F_PROVV_ELAB)[0]; const char provv = get(F_PROVV_ELAB)[0];
const int anno = get_int(F_ANNO_ELAB); const int anno = get_int(F_ANNO_ELAB);
const TString16 codnum(get(F_CODNUM_ELAB)); const TString& codnum = get(F_CODNUM_ELAB);
const TString16 tipo(get(F_TIPODOC_ELAB)); const TString& tipo = get(F_TIPODOC_ELAB);
const TString16 stato(get(F_STATODOC_ELAB)); const TString& stato = get(F_STATODOC_ELAB);
if (anno == 0 || codnum.empty() || tipo.empty() || stato.empty()) if (anno <= 0 || codnum.blank() || tipo.blank() || stato.blank())
return false; return false;
TDocumento* newdoc = new TDocumento(provv, anno , codnum, numdoc); TDocumento* newdoc = new TDocumento(provv, anno, codnum, numdoc);
TDocumento& d = *newdoc; TDocumento& d = *newdoc;
if (numdoc <= 0) if (numdoc <= 0)