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:
alex 2008-08-09 00:44:28 +00:00
parent 4776a7a1ff
commit 8567f2f2c3
4 changed files with 79 additions and 79 deletions

View File

@ -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

View File

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

View File

@ -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();
};

View File

@ -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++)
{