Patch level : 10.0 102
Files correlati : cacnv.exe ve0.exe ve6.exe Ricompilazione Demo : [ ] Commento : Modificata cacce per leggere le ripartizioni interattive git-svn-id: svn://10.65.10.50/trunk@17043 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
4776a7a1ff
commit
8567f2f2c3
111
ca/cacnv.cpp
111
ca/cacnv.cpp
@ -471,73 +471,72 @@ void TConversione_cm2ca::create_new_movana(long numreg_cg, bool definitiva, TAss
|
||||
//Per prima cosa crea l'array delle righe di ripartizione con questo gr/co/stc/annoes
|
||||
const int annoes = mov_head.get_int(MOV_ANNOES);
|
||||
|
||||
const TAnal_ripartizioni_batch& rrip = _cache_rip.righe(zio, annoes, ' ');
|
||||
if (ca_config().get_bool("UsePdcc")) //solo se in CA si usa il piano dei conti contabile..
|
||||
{ //..e' possibile costruire la riga movimento
|
||||
//Compila la riga del movimentodi analitica
|
||||
TRectype& analriga = analmov.new_row();
|
||||
|
||||
const int righe_ripartizione = rrip.rows();
|
||||
const bool ripartisci = righe_ripartizione > 0;
|
||||
analriga.put(RMOVANA_SEZIONE, importo.sezione());
|
||||
analriga.put(RMOVANA_IMPORTO, importo.valore());
|
||||
analriga.put(RMOVANA_DESCR, importo.descrizione());
|
||||
|
||||
if (ripartisci) //ci sono righe ripartizione: da 1 riga mov CG a N righe mov CA
|
||||
{
|
||||
// Importo totale da distribuire arrotondato ai decimali della valuta di conto
|
||||
TGeneric_distrib distrib(importo.valore(), TCurrency::get_firm_dec());
|
||||
analriga.put(RMOVANA_ANNOES, analmov.get(MOVANA_ANNOES));
|
||||
analriga.put(RMOVANA_DATACOMP, analmov.get(MOVANA_DATAREG));
|
||||
|
||||
// Calcola tutte le percentuali da ripartire
|
||||
int i;
|
||||
for (i = 1; i <= rrip.rows(); i++)
|
||||
distrib.add(rrip[i].get_real(RRIP_RIPARTO));
|
||||
analriga.put(RMOVANA_CODCMS, chiave.get(0));
|
||||
analriga.put(RMOVANA_CODFASE, chiave.get(1));
|
||||
|
||||
//Compila le righe del movimento di analitica in base alle righe ripartizione
|
||||
for (i = 1; i <= rrip.rows(); i++)
|
||||
{
|
||||
const TRectype& riga_rip = rrip.row(i);
|
||||
TString16 codconto;
|
||||
codconto.format("%03d%03d%06ld", gruppo, conto, sottoconto);
|
||||
analriga.put(RMOVANA_CODCONTO, codconto);
|
||||
|
||||
TRectype& analriga = analmov.new_row();
|
||||
const real imp = distrib.get(); // Legge la quota da distribuire
|
||||
analriga.put(RMOVANA_SEZIONE, importo.sezione());
|
||||
analriga.put(RMOVANA_IMPORTO, imp); //e la mette nella nuova riga
|
||||
analriga.put(RMOVANA_DESCR, importo.descrizione());
|
||||
|
||||
analriga.put(RMOVANA_ANNOES, analmov.get(MOVANA_ANNOES));
|
||||
analriga.put(RMOVANA_DATACOMP, analmov.get(MOVANA_DATAREG));
|
||||
|
||||
//parametri da prendere dalle righe ripartizione!!
|
||||
analriga.put(RMOVANA_CODCCOSTO, riga_rip.get(RRIP_CODCOSTO));
|
||||
analriga.put(RMOVANA_CODCMS, riga_rip.get(RRIP_CODCMS));
|
||||
analriga.put(RMOVANA_CODFASE, riga_rip.get(RRIP_CODFASE));
|
||||
analriga.put(RMOVANA_CODCONTO, riga_rip.get(RRIP_CODCONTO));
|
||||
|
||||
//controlla la coppia fase/(cdc-commessa) e decide se aggiungerla al file delle fasi
|
||||
check_phase(analriga);
|
||||
}
|
||||
//controlla la coppia fase/(cdc-commessa) e decide se aggiungerla al file delle fasi
|
||||
check_phase(analriga);
|
||||
}
|
||||
else //nessuna riga ripartizione -> da 1 riga movimento CG ad 1 riga movimento CA
|
||||
{
|
||||
if (ca_config().get_bool("UsePdcc")) //solo se in CA si usa il piano dei conti contabile..
|
||||
{ //..e' possibile costruire la riga movimento
|
||||
//Compila la riga del movimentodi analitica
|
||||
TRectype& analriga = analmov.new_row();
|
||||
else
|
||||
{
|
||||
const TAnal_ripartizioni_batch& rrip = _cache_rip.righe(zio, annoes, ' ', 'I');
|
||||
|
||||
analriga.put(RMOVANA_SEZIONE, importo.sezione());
|
||||
analriga.put(RMOVANA_IMPORTO, importo.valore());
|
||||
analriga.put(RMOVANA_DESCR, importo.descrizione());
|
||||
const int righe_ripartizione = rrip.rows();
|
||||
const bool ripartisci = righe_ripartizione > 0;
|
||||
|
||||
analriga.put(RMOVANA_ANNOES, analmov.get(MOVANA_ANNOES));
|
||||
analriga.put(RMOVANA_DATACOMP, analmov.get(MOVANA_DATAREG));
|
||||
if (ripartisci) //ci sono righe ripartizione: da 1 riga mov CG a N righe mov CA
|
||||
{
|
||||
// Importo totale da distribuire arrotondato ai decimali della valuta di conto
|
||||
TGeneric_distrib distrib(importo.valore(), TCurrency::get_firm_dec());
|
||||
|
||||
analriga.put(RMOVANA_CODCMS, chiave.get(0));
|
||||
analriga.put(RMOVANA_CODFASE, chiave.get(1));
|
||||
// Calcola tutte le percentuali da ripartire
|
||||
int i;
|
||||
for (i = 1; i <= rrip.rows(); i++)
|
||||
distrib.add(rrip[i].get_real(RRIP_RIPARTO));
|
||||
|
||||
TString16 codconto;
|
||||
codconto.format("%03d%03d%06ld", gruppo, conto, sottoconto);
|
||||
analriga.put(RMOVANA_CODCONTO, codconto);
|
||||
//Compila le righe del movimento di analitica in base alle righe ripartizione
|
||||
for (i = 1; i <= rrip.rows(); i++)
|
||||
{
|
||||
const TRectype& riga_rip = rrip.row(i);
|
||||
|
||||
//controlla la coppia fase/(cdc-commessa) e decide se aggiungerla al file delle fasi
|
||||
check_phase(analriga);
|
||||
}
|
||||
else //qui va aggiunta la lista dei conti che non hanno ripartizione quando NON si usa il..
|
||||
//..piano dei conti contabile in analitica
|
||||
error_box(TR("Manca la ripartizione di un conto"));
|
||||
}
|
||||
TRectype& analriga = analmov.new_row();
|
||||
const real imp = distrib.get(); // Legge la quota da distribuire
|
||||
analriga.put(RMOVANA_SEZIONE, importo.sezione());
|
||||
analriga.put(RMOVANA_IMPORTO, imp); //e la mette nella nuova riga
|
||||
analriga.put(RMOVANA_DESCR, importo.descrizione());
|
||||
|
||||
analriga.put(RMOVANA_ANNOES, analmov.get(MOVANA_ANNOES));
|
||||
analriga.put(RMOVANA_DATACOMP, analmov.get(MOVANA_DATAREG));
|
||||
|
||||
//parametri da prendere dalle righe ripartizione!!
|
||||
analriga.put(RMOVANA_CODCCOSTO, riga_rip.get(RRIP_CODCOSTO));
|
||||
analriga.put(RMOVANA_CODCMS, riga_rip.get(RRIP_CODCMS));
|
||||
analriga.put(RMOVANA_CODFASE, riga_rip.get(RRIP_CODFASE));
|
||||
analriga.put(RMOVANA_CODCONTO, riga_rip.get(RRIP_CODCONTO));
|
||||
|
||||
//controlla la coppia fase/(cdc-commessa) e decide se aggiungerla al file delle fasi
|
||||
check_phase(analriga);
|
||||
}
|
||||
}
|
||||
else
|
||||
error_box(TR("Manca la ripartizione di conversione del conto : %d %d %ld"), zio.gruppo(), zio.conto(), zio.sottoconto());
|
||||
}
|
||||
} //end FOR_EACH..
|
||||
|
||||
//e alla fine riesce a mettere anche l'importone in testata
|
||||
|
@ -1564,10 +1564,10 @@ int TAnal_ripartizioni_batch::indbil() const
|
||||
return head().get_int(RIP_INDBIL);
|
||||
}
|
||||
|
||||
int TAnal_ripartizioni_batch::read (const char* codice)
|
||||
int TAnal_ripartizioni_batch::read (const char* codice, char tiporip)
|
||||
{
|
||||
TLocalisamfile rip(LF_RIP);
|
||||
_rip.put(RIP_TIPO, "B"); //solo tipi batch!
|
||||
_rip.put(RIP_TIPO, tiporip); //solo tipi batch!
|
||||
_rip.put(RIP_CODICE, codice);
|
||||
int err = _rip.read(rip); //leggi il record dal file
|
||||
if (err == NOERR)
|
||||
@ -1628,14 +1628,14 @@ int TAnal_ripartizioni_batch::read (const char* codcosto, const char* commessa,
|
||||
}
|
||||
|
||||
if (err == NOERR)
|
||||
err = read(rip.get(RIP_CODICE));
|
||||
err = read(rip.get(RIP_CODICE), 'B');
|
||||
return err;
|
||||
}
|
||||
|
||||
int TAnal_ripartizioni_batch::read_rip_3(TLocalisamfile& rip, const int gr, const int co, const long sot,
|
||||
const int annoes, const int indbil, const int classe_mov) const
|
||||
const int annoes, const int indbil, const int classe_mov, char tiporip) const
|
||||
{
|
||||
rip.put(RIP_TIPO, "B"); //solo tipi batch!
|
||||
rip.put(RIP_TIPO, tiporip); //solo tipi batch!
|
||||
rip.put(RIP_GRUPPO, gr);
|
||||
rip.put(RIP_CONTO, co);
|
||||
rip.put(RIP_SOTTOCONTO, sot);
|
||||
@ -1646,42 +1646,42 @@ int TAnal_ripartizioni_batch::read_rip_3(TLocalisamfile& rip, const int gr, cons
|
||||
}
|
||||
|
||||
int TAnal_ripartizioni_batch::read (const int gr, const int co, const long sot,
|
||||
const int annoes, const int indbil, const int classe_mov)
|
||||
const int annoes, const int indbil, const int classe_mov, char tiporip)
|
||||
{
|
||||
CHECKD(classe_mov > 0, "Classe movimento non valida ", classe_mov);
|
||||
TLocalisamfile rip(LF_RIP);
|
||||
rip.setkey(3);
|
||||
|
||||
int err = read_rip_3(rip, gr, co, sot, annoes, indbil, classe_mov);
|
||||
int err = read_rip_3(rip, gr, co, sot, annoes, indbil, classe_mov, tiporip);
|
||||
if (err != NOERR)
|
||||
err = read_rip_3(rip, gr, co, sot, annoes, indbil, 0);
|
||||
err = read_rip_3(rip, gr, co, sot, annoes, indbil, 0, tiporip);
|
||||
|
||||
//la put va rifatta perche' potrebbe essersi spostato al record successivo!!!
|
||||
//se fallisce il primo tentativo prova con lo stesso anno e indbil=0
|
||||
if (err != NOERR && indbil != 0)
|
||||
{
|
||||
err = read_rip_3(rip, gr, co, sot, annoes, 0, classe_mov);
|
||||
err = read_rip_3(rip, gr, co, sot, annoes, 0, classe_mov, tiporip);
|
||||
if (err != NOERR)
|
||||
err = read_rip_3(rip, gr, co, sot, annoes, 0, 0);
|
||||
err = read_rip_3(rip, gr, co, sot, annoes, 0, 0, tiporip);
|
||||
}
|
||||
//se fallisce ancora riprova con anno=0 e lo stesso indbil
|
||||
if (err != NOERR && annoes != 0)
|
||||
{
|
||||
err = read_rip_3(rip, gr, co, sot, 0, indbil, classe_mov);
|
||||
err = read_rip_3(rip, gr, co, sot, 0, indbil, classe_mov, tiporip);
|
||||
if (err != NOERR)
|
||||
err = read_rip_3(rip, gr, co, sot, 0, indbil, 0);
|
||||
err = read_rip_3(rip, gr, co, sot, 0, indbil, 0, tiporip);
|
||||
|
||||
//estremo tentativo con annoes e indbil = 0
|
||||
if (err != NOERR && indbil != 0)
|
||||
{
|
||||
err = read_rip_3(rip, gr, co, sot, 0, 0, classe_mov);
|
||||
err = read_rip_3(rip, gr, co, sot, 0, 0, classe_mov, tiporip);
|
||||
if (err != NOERR)
|
||||
err = read_rip_3(rip, gr, co, sot, 0, 0, 0);
|
||||
err = read_rip_3(rip, gr, co, sot, 0, 0, 0, tiporip);
|
||||
}
|
||||
}
|
||||
|
||||
if (err == NOERR)
|
||||
err = read(rip.get(RIP_CODICE));
|
||||
err = read(rip.get(RIP_CODICE), tiporip);
|
||||
return err;
|
||||
}
|
||||
|
||||
@ -1708,8 +1708,9 @@ TObject* TCache_ripartizioni::key2obj(const char* key)
|
||||
const int anno = parametro.get_int(4);
|
||||
const int indbil = parametro.get_int(5);
|
||||
const int classe_mov = parametro.get_int(6);
|
||||
const char tiporip = parametro.get_char(7);
|
||||
|
||||
rip->read(gruppo, conto, sottoconto, anno, indbil, classe_mov);
|
||||
rip->read(gruppo, conto, sottoconto, anno, indbil, classe_mov, tiporip);
|
||||
}
|
||||
else //chiave 4
|
||||
{
|
||||
@ -1786,7 +1787,7 @@ const TAnal_ripartizioni_batch& TCache_ripartizioni::righe(const char* costo, co
|
||||
return *(const TAnal_ripartizioni_batch*)objptr(parametro);
|
||||
}
|
||||
|
||||
const TAnal_ripartizioni_batch& TCache_ripartizioni::righe(const TBill& bill, const int annoes, const char tipomov)
|
||||
const TAnal_ripartizioni_batch& TCache_ripartizioni::righe(const TBill& bill, const int annoes, const char tipomov, char tiporip)
|
||||
{
|
||||
//classi di movimento: se preventivi 2, se normali 1
|
||||
int classe_movimento;
|
||||
@ -1797,7 +1798,7 @@ const TAnal_ripartizioni_batch& TCache_ripartizioni::righe(const TBill& bill, co
|
||||
|
||||
TToken_string parametro;
|
||||
parametro << "3|" << bill.gruppo() << '|' << bill.conto() << '|' << bill.sottoconto() << '|'
|
||||
<< annoes << '|' << bill.indicatore_bilancio() << '|' << classe_movimento; //per chiave 3
|
||||
<< annoes << '|' << bill.indicatore_bilancio() << '|' << classe_movimento << '|' << tiporip; //per chiave 3
|
||||
return *(const TAnal_ripartizioni_batch*)objptr(parametro);
|
||||
}
|
||||
|
||||
|
@ -170,15 +170,15 @@ class TAnal_ripartizioni_batch : public TRecord_array
|
||||
TRectype _rip;
|
||||
private:
|
||||
int read_rip_3(TLocalisamfile& rip, const int gr, const int co, const long sot,
|
||||
const int annoes, const int indbil, const int classe_mov) const;
|
||||
const int annoes, const int indbil, const int classe_mov, char tiporip) const;
|
||||
int read_rip_4(TLocalisamfile& rip, const char* codcosto, const char* commessa, const char* fase,
|
||||
const int annoes, const int indbil, const int classe_mov) const;
|
||||
public:
|
||||
const TRectype& head() const { return _rip; }
|
||||
int indbil() const;
|
||||
int read (const char* codice);
|
||||
int read (const char* codice, char tiporip);
|
||||
int read (const char* codcosto, const char* commessa, const char* fase, const int annoes, const int indbil, const int classe_mov);
|
||||
int read (const int gr, const int co, const long sot, const int annoes, const int indbil, const int classe_mov);
|
||||
int read (const int gr, const int co, const long sot, const int annoes, const int indbil, const int classe_mov, char tiporip);
|
||||
TAnal_ripartizioni_batch();
|
||||
};
|
||||
|
||||
@ -198,7 +198,7 @@ public:
|
||||
void set_esercizio(const int codes);
|
||||
const TAnal_ripartizioni_batch& righe(const char* costo, const char* commessa, const char* fase,
|
||||
const int annoes, const int indbil, const char tipomov);
|
||||
const TAnal_ripartizioni_batch& righe(const TBill& bill, const int annoes, const char tipomov);
|
||||
const TAnal_ripartizioni_batch& righe(const TBill& bill, const int annoes, const char tipomov, char tiporip = 'B');
|
||||
|
||||
TCache_ripartizioni();
|
||||
};
|
||||
|
@ -438,7 +438,7 @@ bool TContabilizzazione_analitica::find_conti(const TRiga_documento& riga, TStri
|
||||
if (contanal.blank()) // Non ho trovato il conto in anagrafica ...
|
||||
{
|
||||
// Cerca la ripartizione del conto
|
||||
const TAnal_ripartizioni_batch& rip = _rip.righe(bill, annoes, tipomov);
|
||||
const TAnal_ripartizioni_batch& rip = _rip.righe(bill, annoes, tipomov, 'I');
|
||||
TToken_string conto;
|
||||
for (int i = 1; i <= rip.rows(); i++)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user