Patch level :10.0 4.0 882
Files correlati : Ricompilazione Demo : [ ] Commento :aggiunta trattazione dei movimenti con conti non riclassificati (FDE/FDR). Heil Magnavakken! git-svn-id: svn://10.65.10.50/trunk@16158 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
43109efeaf
commit
dd9c23801a
130
ca/ca3700.cpp
130
ca/ca3700.cpp
@ -69,6 +69,7 @@ bool TPrint_rendiconto_ca_mask::on_field_event(TOperable_field& o, TField_event
|
|||||||
{
|
{
|
||||||
switch (o.dlg())
|
switch (o.dlg())
|
||||||
{
|
{
|
||||||
|
#ifndef DBG
|
||||||
case F_RIGHE:
|
case F_RIGHE:
|
||||||
if (e == fe_init) //azzera le righe dello sheet con le commesse ad inizio programma
|
if (e == fe_init) //azzera le righe dello sheet con le commesse ad inizio programma
|
||||||
{ //esplicita e bizzarra richiesta del CRPA
|
{ //esplicita e bizzarra richiesta del CRPA
|
||||||
@ -77,6 +78,7 @@ bool TPrint_rendiconto_ca_mask::on_field_event(TOperable_field& o, TField_event
|
|||||||
s.force_update();
|
s.force_update();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
case F_DATAINI:
|
case F_DATAINI:
|
||||||
case F_DATAFIN:
|
case F_DATAFIN:
|
||||||
if (e == fe_close)
|
if (e == fe_close)
|
||||||
@ -260,7 +262,8 @@ protected:
|
|||||||
void scrive_riga(const TRectype& rmovana, const TRectype& movana, const TDocumento* doc);
|
void scrive_riga(const TRectype& rmovana, const TRectype& movana, const TDocumento* doc);
|
||||||
void scrive_riga_speciale(const TDocumento* doc, const TString_array& special_docs);
|
void scrive_riga_speciale(const TDocumento* doc, const TString_array& special_docs);
|
||||||
int sort_indbil(int indbil) const;
|
int sort_indbil(int indbil) const;
|
||||||
TString riclassifica(const int gruppo, const int conto, const long sottoconto, TRectype& tmpcurr);
|
const TString& riclassifica(const TBill& zio, TRectype& tmpcurr) const;
|
||||||
|
const TString& riclassifica(const TString& contone, TRectype& tmpcurr) const;
|
||||||
real get_budget(const TString& conto, char tipo) const;
|
real get_budget(const TString& conto, char tipo) const;
|
||||||
bool is_causale_rateo_risconto(const char* codcaus);
|
bool is_causale_rateo_risconto(const char* codcaus);
|
||||||
|
|
||||||
@ -467,8 +470,7 @@ int TPrint_rendiconto_ca_recordset::sort_indbil(int indbil) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
TString TPrint_rendiconto_ca_recordset::riclassifica(const int gruppo, const int conto,
|
const TString& TPrint_rendiconto_ca_recordset::riclassifica(const TBill& zio, TRectype& tmpcurr) const
|
||||||
const long sottoconto, TRectype& tmpcurr)
|
|
||||||
{
|
{
|
||||||
TString conto_riclassificato;
|
TString conto_riclassificato;
|
||||||
//relazione e cursore su panapdc alla ricerca del conto riclassificato corrispondente
|
//relazione e cursore su panapdc alla ricerca del conto riclassificato corrispondente
|
||||||
@ -476,7 +478,7 @@ TString TPrint_rendiconto_ca_recordset::riclassifica(const int gruppo, const int
|
|||||||
TRelation rel_panapdc(LF_PANAPDC);
|
TRelation rel_panapdc(LF_PANAPDC);
|
||||||
//servono solamente i record con il gruppo = al gruppo di rmovana
|
//servono solamente i record con il gruppo = al gruppo di rmovana
|
||||||
TRectype da_panapdc(LF_PANAPDC);
|
TRectype da_panapdc(LF_PANAPDC);
|
||||||
da_panapdc.put(PANAPDC_GRUPPO, gruppo);
|
da_panapdc.put(PANAPDC_GRUPPO, zio.gruppo());
|
||||||
|
|
||||||
TString filtro;
|
TString filtro;
|
||||||
if (_prefix.not_empty())
|
if (_prefix.not_empty())
|
||||||
@ -499,13 +501,13 @@ TString TPrint_rendiconto_ca_recordset::riclassifica(const int gruppo, const int
|
|||||||
tmpcurr.put("CONTO", conto_riclassificato);
|
tmpcurr.put("CONTO", conto_riclassificato);
|
||||||
break; //esce dal casino e passa ai campi successivi
|
break; //esce dal casino e passa ai campi successivi
|
||||||
}
|
}
|
||||||
else if (conto == current_conto && current_sottoconto == 0)
|
else if (zio.conto() == current_conto && current_sottoconto == 0)
|
||||||
{
|
{
|
||||||
conto_riclassificato = rec_panapdc.get(PANAPDC_CODCONTO);
|
conto_riclassificato = rec_panapdc.get(PANAPDC_CODCONTO);
|
||||||
tmpcurr.put("CONTO", conto_riclassificato);
|
tmpcurr.put("CONTO", conto_riclassificato);
|
||||||
break; //esce dal casino e passa ai campi successivi
|
break; //esce dal casino e passa ai campi successivi
|
||||||
}
|
}
|
||||||
else if (conto == current_conto && sottoconto == current_sottoconto)
|
else if (zio.conto() == current_conto && zio.sottoconto() == current_sottoconto)
|
||||||
{
|
{
|
||||||
conto_riclassificato = rec_panapdc.get(PANAPDC_CODCONTO);
|
conto_riclassificato = rec_panapdc.get(PANAPDC_CODCONTO);
|
||||||
tmpcurr.put("CONTO", conto_riclassificato);
|
tmpcurr.put("CONTO", conto_riclassificato);
|
||||||
@ -522,7 +524,18 @@ TString TPrint_rendiconto_ca_recordset::riclassifica(const int gruppo, const int
|
|||||||
(_aconto.not_empty() && conto_riclassificato.compare(_aconto, _aconto.len()) > 0))
|
(_aconto.not_empty() && conto_riclassificato.compare(_aconto, _aconto.len()) > 0))
|
||||||
return EMPTY_STRING;
|
return EMPTY_STRING;
|
||||||
|
|
||||||
return conto_riclassificato;
|
return get_tmp_string() = conto_riclassificato;
|
||||||
|
}
|
||||||
|
|
||||||
|
const TString& TPrint_rendiconto_ca_recordset::riclassifica(const TString& contone, TRectype& tmpcurr) const
|
||||||
|
{
|
||||||
|
CHECK(contone.len() == 12, "Conto di lunghezza assurda");
|
||||||
|
const int gruppo = atoi(contone.left(3));
|
||||||
|
const int conto = atoi(contone.mid(3,3));
|
||||||
|
const long sottoconto = atol(contone.mid(6,6));
|
||||||
|
const TBill zio(gruppo, conto, sottoconto);
|
||||||
|
|
||||||
|
return riclassifica(zio, tmpcurr);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int bill2indbil(const TString& codconto, bool is_anal)
|
static int bill2indbil(const TString& codconto, bool is_anal)
|
||||||
@ -563,49 +576,44 @@ void TPrint_rendiconto_ca_recordset::scrive_riga(const TRectype& rmovana, const
|
|||||||
TString codconto = rmovana.get(RMOVANA_CODCONTO);
|
TString codconto = rmovana.get(RMOVANA_CODCONTO);
|
||||||
TString codcontocg;
|
TString codcontocg;
|
||||||
int indbil = 0;
|
int indbil = 0;
|
||||||
|
bool conto_non_riclass = false; //indicatore che serve per tener conto di specialissimi conti del CRPA...
|
||||||
|
//E' una lampante dimostrazione di quanto sia generico questo programma...
|
||||||
|
|
||||||
// il conto puo' essere analitico o contabile...
|
// il conto puo' essere analitico o contabile...
|
||||||
//se è compilato l'archivio di collegamento PANAPDC..
|
//se è compilato l'archivio di collegamento PANAPDC..
|
||||||
//..si deve usare come conto il campo codconto del panapdc!!!...
|
//..si deve usare come conto il campo codconto del panapdc!!!...
|
||||||
//Ricordare ch SOLO se si ha un conto contabile e' possibile riclassificare in analitico!!!
|
//Ricordare che SOLO se si ha un conto contabile e' possibile riclassificare in analitico!!!
|
||||||
if (_riclassificato) //traduzione:sei il CRPA/CSA
|
if (_riclassificato) //traduzione:sei il CRPA/CSA
|
||||||
{
|
{
|
||||||
//prende il gr/co/so dalla riga rmovana in esame
|
|
||||||
const int gruppo = atoi(codconto.left(3));
|
|
||||||
const int conto = atoi(codconto.mid(3,3));
|
|
||||||
const long sottoconto = atol(codconto.mid(6,6));
|
|
||||||
|
|
||||||
//stringa che conterrà il conto riclassificato (se sara' trovato)
|
//stringa che conterrà il conto riclassificato (se sara' trovato)
|
||||||
const TString conto_riclassificato = riclassifica(gruppo, conto, sottoconto, tmpcurr);
|
const TString conto_riclassificato = riclassifica(codconto, tmpcurr);
|
||||||
//se il conto viene ritornato vuoto significa che non ricade nell'intervallo dei conti..
|
//se il conto viene ritornato vuoto significa che non ricade nell'intervallo dei conti..
|
||||||
//..riclassificati selezionato dall'utente..
|
//..riclassificati selezionato dall'utente...non puo' essere scartato a priori perche' puo'..
|
||||||
if (conto_riclassificato.empty())
|
//..essere un conto speciale del CRPA
|
||||||
return;
|
codcontocg = codconto;
|
||||||
//..senno' lo scrive come conto riclassificato
|
indbil = bill2indbil(codcontocg, false);
|
||||||
codcontocg = codconto;
|
|
||||||
codconto = conto_riclassificato;
|
|
||||||
indbil = bill2indbil(codcontocg, false);
|
|
||||||
|
|
||||||
} //if(_riclassificato)
|
if (conto_riclassificato.empty())
|
||||||
|
{
|
||||||
|
conto_non_riclass = true;
|
||||||
|
codconto.cut(0);
|
||||||
|
}
|
||||||
|
else //..senno' lo scrive come conto riclassificato
|
||||||
|
codconto = conto_riclassificato;
|
||||||
|
|
||||||
|
} //if(_riclassificato) Se non e' un conto riclassificato -> analitico puro o contabile puro
|
||||||
else //...sennò si usano..
|
else //...sennò si usano..
|
||||||
{
|
{
|
||||||
if (_piano == "A") //..il normale piano dei conti analitico..
|
if (_piano == "A") //..il normale piano dei conti analitico.. Conto analitico puro
|
||||||
indbil = bill2indbil(codconto, true);
|
indbil = bill2indbil(codconto, true);
|
||||||
else //..o il normale piano dei conti contabile
|
else //..o il normale piano dei conti contabile Conto contabile puro
|
||||||
{
|
{
|
||||||
codcontocg = codconto;
|
codcontocg = codconto;
|
||||||
indbil = bill2indbil(codcontocg, false);
|
indbil = bill2indbil(codcontocg, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//mette i conti nel file (se piano dei conti puramente contabile i valori coincidono)
|
//La scrittura dei conti su tmpcurr e' rinviata in fondo al metodo...
|
||||||
tmpcurr.put("CONTO", codconto); //conto
|
|
||||||
tmpcurr.put("CONTOCG", codcontocg); //conto_cg
|
|
||||||
|
|
||||||
//fa il sort l'indicatore di bilancio del conto e lo utilizza per ordinare i record nel file..
|
|
||||||
//..di appoggio;se sei del CRPA/CSA vuoi i costi dopo i ricavi!
|
|
||||||
const int ordcont = sort_indbil(indbil);
|
|
||||||
tmpcurr.put("ORDCONT", ordcont);
|
|
||||||
//---- FINE CONTI ----//
|
//---- FINE CONTI ----//
|
||||||
|
|
||||||
//---- DOC D'ORIGINE DELL' ANALMOV ----//
|
//---- DOC D'ORIGINE DELL' ANALMOV ----//
|
||||||
@ -700,6 +708,46 @@ void TPrint_rendiconto_ca_recordset::scrive_riga(const TRectype& rmovana, const
|
|||||||
const long ndoc = babbo->get_long(RDOC_NDOC);
|
const long ndoc = babbo->get_long(RDOC_NDOC);
|
||||||
rif.cut(0) << babbo_codnum << '-' << anno << '-' << ndoc;
|
rif.cut(0) << babbo_codnum << '-' << anno << '-' << ndoc;
|
||||||
|
|
||||||
|
//caso particolare dei conti del CRPA. Se il conto non e' riclassificato (ma siamo in presenza..
|
||||||
|
//.di un piano dei conti riclassificato)...
|
||||||
|
if (conto_non_riclass)
|
||||||
|
{
|
||||||
|
//Controlla se il documento di origine (padre del documento da cui deriva l'attuale riga..
|
||||||
|
//..di analitica) era una FDR/FDE...
|
||||||
|
const TCodice_numerazione& kodice_num = TDocumento::codice_numerazione(babbo_codnum);
|
||||||
|
//Se lo era...
|
||||||
|
if (kodice_num.fattura_emettere_ricevere())
|
||||||
|
{
|
||||||
|
//Ricrea il documento origine
|
||||||
|
TDocumento doc_babbo('D', anno, babbo_codnum, ndoc);
|
||||||
|
//elaborazione analitica del documento originale
|
||||||
|
TContabilizzazione_analitica cont_anal;
|
||||||
|
TAnal_mov mov_babbo;
|
||||||
|
//se riesce a contabilizzare il documento origine (si spera, senno' so' cazzi!)..
|
||||||
|
cont_anal.elabora(doc_babbo, 0, NULL, false, mov_babbo);
|
||||||
|
if (mov_babbo.rows() > 0)
|
||||||
|
{
|
||||||
|
const int anal_rows = mov_babbo.rows();
|
||||||
|
for (int k = 1; k <= anal_rows; k++)
|
||||||
|
{
|
||||||
|
//cerca la riga con il conto che gli serve e lo assegna a codconto, attualmente vuoto..
|
||||||
|
//..in quanto non e' stato riclassificato
|
||||||
|
const TRectype& mov_babbo_riga = mov_babbo.body()[k];
|
||||||
|
const TString& conto_babbo = mov_babbo_riga.get(RMOVANA_CODCONTO);
|
||||||
|
if (conto_babbo != codcontocg)
|
||||||
|
{
|
||||||
|
//ovviamente deve riclassificare il conto_babbo!
|
||||||
|
codconto = riclassifica(conto_babbo, tmpcurr);
|
||||||
|
indbil = bill2indbil(codconto, true);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} //if (mov_babbo.rows() > 0)
|
||||||
|
}
|
||||||
|
else
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (riferimento.get_pos(rif) < 0) //il doc originale va aggiunto solo se non esiste gia'!
|
if (riferimento.get_pos(rif) < 0) //il doc originale va aggiunto solo se non esiste gia'!
|
||||||
{
|
{
|
||||||
riferimento.add(rif);
|
riferimento.add(rif);
|
||||||
@ -707,11 +755,21 @@ void TPrint_rendiconto_ca_recordset::scrive_riga(const TRectype& rmovana, const
|
|||||||
tipo_babbo = doc_babbo.tipo_riclassificato(); //..il tipo documento..
|
tipo_babbo = doc_babbo.tipo_riclassificato(); //..il tipo documento..
|
||||||
}
|
}
|
||||||
} //if (babbo != NULL)..
|
} //if (babbo != NULL)..
|
||||||
}
|
} //if (codcms_rigadoc == codcms_rmovana..
|
||||||
} //for (int i..
|
} //for (int i..
|
||||||
|
|
||||||
tmpcurr.put("DOCORIG", riferimento); //documento di riferimento (mitologico documento originale)
|
tmpcurr.put("DOCORIG", riferimento); //documento di riferimento (mitologico documento originale)
|
||||||
|
|
||||||
|
//Scrittura dei conti (i valori delle variabili sono stati settati nella parte iniziale del metodo)
|
||||||
|
//mette i conti nel file (se piano dei conti puramente contabile i valori coincidono)
|
||||||
|
tmpcurr.put("CONTO", codconto); //conto
|
||||||
|
tmpcurr.put("CONTOCG", codcontocg); //conto_cg
|
||||||
|
|
||||||
|
//fa il sort l'indicatore di bilancio del conto e lo utilizza per ordinare i record nel file..
|
||||||
|
//..di appoggio;se sei del CRPA/CSA vuoi i costi dopo i ricavi!
|
||||||
|
const int ordcont = sort_indbil(indbil);
|
||||||
|
tmpcurr.put("ORDCONT", ordcont);
|
||||||
|
|
||||||
//---- FINE DOC ORIG DELL'ANALMOV ----//
|
//---- FINE DOC ORIG DELL'ANALMOV ----//
|
||||||
/*[Tipo documento] //schema divino per destinare gli importi nei campi corretti
|
/*[Tipo documento] //schema divino per destinare gli importi nei campi corretti
|
||||||
O=I**
|
O=I**
|
||||||
@ -893,7 +951,7 @@ void TPrint_rendiconto_ca_recordset::scrive_riga_speciale(const TDocumento* doc,
|
|||||||
if (contab.search_costo_ricavo(rigadoc, conto))
|
if (contab.search_costo_ricavo(rigadoc, conto))
|
||||||
{
|
{
|
||||||
//stringa che conterrà il conto riclassificato (se sara' trovato)
|
//stringa che conterrà il conto riclassificato (se sara' trovato)
|
||||||
codconto = riclassifica(conto.gruppo(), conto.conto(), conto.sottoconto(), tmpcurr);
|
codconto = riclassifica(conto, tmpcurr);
|
||||||
codcontocg = conto.string(0x8);
|
codcontocg = conto.string(0x8);
|
||||||
}
|
}
|
||||||
} //if(_riclassificato)
|
} //if(_riclassificato)
|
||||||
@ -1299,9 +1357,11 @@ void TPrint_rendiconto_ca_recordset::crea_righe_da_rdoc(const TPrint_rendiconto_
|
|||||||
scrive_riga(rmov, mov, &doc); //documenti "normali"
|
scrive_riga(rmov, mov, &doc); //documenti "normali"
|
||||||
} //for int j...
|
} //for int j...
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
//righe di documento configurate come da emettere/ricevere (documenti speciali)
|
//righe di documento configurate come da emettere/ricevere (documenti speciali)
|
||||||
if (is_special_doc)
|
|
||||||
scrive_riga_speciale(&doc, num_fdr);
|
scrive_riga_speciale(&doc, num_fdr);
|
||||||
|
}
|
||||||
} //if (numregca==0...
|
} //if (numregca==0...
|
||||||
|
|
||||||
} //if !curr_doc.empty()
|
} //if !curr_doc.empty()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user