Patch level :2.2 210
Files correlati : Ricompilazione Demo : [ ] Commento :programma proforma versione 2.2 funzionante con contabilita' analitica;da verificare al crpa git-svn-id: svn://10.65.10.50/trunk@13474 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
422257ddfe
commit
a8e21f2c31
@ -226,6 +226,8 @@ bool TInvioP::i_proforma_movimenti()
|
|||||||
TRelation rel(LF_MOVANA);
|
TRelation rel(LF_MOVANA);
|
||||||
rel.add(LF_MOV, "NUMREG==NUMREGCG");
|
rel.add(LF_MOV, "NUMREG==NUMREGCG");
|
||||||
rel.add(LF_CAUSALI, "CODCAUS==CODCAUS");
|
rel.add(LF_CAUSALI, "CODCAUS==CODCAUS");
|
||||||
|
rel.add(LF_RMOVANA, "NUMREG==NUMREG");
|
||||||
|
rel.add(LF_RMOVIVA, "NUMREG==NUMREGCG");
|
||||||
TCursor cur(&rel, "NUMREGCG!=0", 2, &da, &a);
|
TCursor cur(&rel, "NUMREGCG!=0", 2, &da, &a);
|
||||||
|
|
||||||
const long cur_items = cur.items();
|
const long cur_items = cur.items();
|
||||||
@ -257,6 +259,10 @@ bool TInvioP::i_proforma_righe(TCursor& cur, TInvioP_file* trasfilerighe)
|
|||||||
//necessita del numreg del corrente movimento analitico per poterlo istanziare e prenderne le righe
|
//necessita del numreg del corrente movimento analitico per poterlo istanziare e prenderne le righe
|
||||||
const long numreg = cur.curr().get_long(MOVANA_NUMREG);
|
const long numreg = cur.curr().get_long(MOVANA_NUMREG);
|
||||||
TAnal_mov analmov(numreg); //..istanzia il movimento analitico cercato..
|
TAnal_mov analmov(numreg); //..istanzia il movimento analitico cercato..
|
||||||
|
|
||||||
|
TRecord_text recrighe; //istanzia il tipo record corretto da scrivere sul trasfilerighe
|
||||||
|
recrighe.set_type("R");
|
||||||
|
|
||||||
int i;
|
int i;
|
||||||
for (i = 1; i <= analmov.body().rows(); i++)
|
for (i = 1; i <= analmov.body().rows(); i++)
|
||||||
{
|
{
|
||||||
@ -265,15 +271,13 @@ bool TInvioP::i_proforma_righe(TCursor& cur, TInvioP_file* trasfilerighe)
|
|||||||
//inganno il cursore passandogli la riga analitica in esame
|
//inganno il cursore passandogli la riga analitica in esame
|
||||||
cur.curr(LF_RMOVANA) = riga;
|
cur.curr(LF_RMOVANA) = riga;
|
||||||
|
|
||||||
TRecord_text recrighe;
|
|
||||||
recrighe.set_type("R");
|
|
||||||
trasfilerighe->autoload(recrighe, cur);
|
trasfilerighe->autoload(recrighe, cur);
|
||||||
trasfilerighe->write(recrighe);
|
trasfilerighe->write(recrighe);
|
||||||
}
|
}
|
||||||
|
|
||||||
//---- righe iva ----
|
//---- righe iva ----
|
||||||
//adesso tocca alle righe iva...e sara' un casino indicibile!
|
//adesso tocca alle righe iva...e sara' un casino indicibile!
|
||||||
const char* numregcg = analmov.get(MOVANA_NUMREGCG);
|
const TString8 numregcg = analmov.get(MOVANA_NUMREGCG);
|
||||||
//record_array con le righe iva aventi il numreg = numregcg analitico
|
//record_array con le righe iva aventi il numreg = numregcg analitico
|
||||||
TRecord_array righeiva(numregcg, LF_RMOVIVA);
|
TRecord_array righeiva(numregcg, LF_RMOVIVA);
|
||||||
//assoc array contenente tutti i diversi conti che incontrera' nello scanning delle righe iva
|
//assoc array contenente tutti i diversi conti che incontrera' nello scanning delle righe iva
|
||||||
@ -300,7 +304,7 @@ bool TInvioP::i_proforma_righe(TCursor& cur, TInvioP_file* trasfilerighe)
|
|||||||
}
|
}
|
||||||
|
|
||||||
TString16 codiva = righeiva[j].get(RMI_CODIVA); //prende il codice iva dalla riga iva
|
TString16 codiva = righeiva[j].get(RMI_CODIVA); //prende il codice iva dalla riga iva
|
||||||
//aggiungere qui eventuale numero di indetraibile
|
//aggiungere qui eventuale codice intero di indetraibilita'
|
||||||
|
|
||||||
//ad ogni codiva presente in codivae lega un importo che risultera' la somma di tutti gli..
|
//ad ogni codiva presente in codivae lega un importo che risultera' la somma di tutti gli..
|
||||||
//..importi con lo stesso conto e codice iva
|
//..importi con lo stesso conto e codice iva
|
||||||
@ -317,6 +321,10 @@ bool TInvioP::i_proforma_righe(TCursor& cur, TInvioP_file* trasfilerighe)
|
|||||||
//aggiungere qui eventuale imposta
|
//aggiungere qui eventuale imposta
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TRecord_text recrigheiva; //istanzia il tipo record corretto da scrivere sul trasfilerighe
|
||||||
|
recrigheiva.set_type("I");
|
||||||
|
int nrighe = 0;
|
||||||
|
|
||||||
for (i = 1; i <= analmov.body().rows(); i++)
|
for (i = 1; i <= analmov.body().rows(); i++)
|
||||||
{
|
{
|
||||||
//scanning delle righe analitiche per estrarne i conti e controllare se compaiono nell'assoc_array..
|
//scanning delle righe analitiche per estrarne i conti e controllare se compaiono nell'assoc_array..
|
||||||
@ -325,13 +333,46 @@ bool TInvioP::i_proforma_righe(TCursor& cur, TInvioP_file* trasfilerighe)
|
|||||||
const TString& codconto = riga.get(RMOVANA_CODCONTO);
|
const TString& codconto = riga.get(RMOVANA_CODCONTO);
|
||||||
TAssoc_array* codivae = (TAssoc_array*) conti.objptr(codconto); //assoc_array codivae del codconto
|
TAssoc_array* codivae = (TAssoc_array*) conti.objptr(codconto); //assoc_array codivae del codconto
|
||||||
|
|
||||||
//se ho almeno un codice iva assocoato a questo conto nell'assoc_array dei conti
|
//se ha almeno un codice iva associato a questo conto nell'assoc_array dei conti..
|
||||||
if (codivae != NULL)
|
if (codivae != NULL)
|
||||||
{
|
{
|
||||||
|
//..prende l'importo della riga analitica..
|
||||||
|
real importo_riga = riga.get_real(RMOVANA_IMPORTO);
|
||||||
|
//..lo ridistribuisce secondo le percentuali iva
|
||||||
|
TGeneric_distrib distributore(importo_riga, TCurrency::get_firm_dec());
|
||||||
|
{
|
||||||
|
FOR_EACH_ASSOC_OBJECT((*codivae), h, k, imp)
|
||||||
|
{
|
||||||
|
const real& imp_iva = *(real*)imp;
|
||||||
|
distributore.add(imp_iva);
|
||||||
|
}
|
||||||
|
|
||||||
|
//crea una riga iva dal cursore, con numreg = numregcg della testata analitica originale
|
||||||
|
TRectype& rigaiva = cur.curr(LF_RMOVIVA);
|
||||||
|
rigaiva.put(RMI_NUMREG, numregcg);
|
||||||
|
|
||||||
|
//scan dell'assoc_array ridistribuito e inserimento dei valori nella riga iva appena creata
|
||||||
|
FOR_EACH_ASSOC_OBJECT((*codivae), hi, ki, impi)
|
||||||
|
{
|
||||||
|
rigaiva.put(RMI_NUMRIG, ++nrighe);
|
||||||
|
rigaiva.put(RMI_GRUPPO, codconto.mid(0,3));
|
||||||
|
rigaiva.put(RMI_CONTO, codconto.mid(3,3));
|
||||||
|
rigaiva.put(RMI_SOTTOCONTO, codconto.mid(6,6));
|
||||||
|
TBill zio(rigaiva);
|
||||||
|
rigaiva.put(RMI_TIPOC, zio.tipo());
|
||||||
|
rigaiva.put(RMI_IMPONIBILE, distributore.get());
|
||||||
|
rigaiva.put(RMI_CODIVA, ki);
|
||||||
|
|
||||||
|
//scrittura delle righe di tipo I; notare che il cur passato alla autoload altri non e'..
|
||||||
|
//..che la rigaiva appena completata
|
||||||
|
trasfilerighe->autoload(recrigheiva, cur);
|
||||||
|
trasfilerighe->write(recrigheiva);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -438,9 +479,9 @@ bool TInvioP::i_proforma_clifor(char tipocf)
|
|||||||
{
|
{
|
||||||
TInvioP_file* trasfile = NULL;
|
TInvioP_file* trasfile = NULL;
|
||||||
if (tipocf == 'C')
|
if (tipocf == 'C')
|
||||||
TInvioP_file* trasfile = apri_file("clienti");
|
trasfile = apri_file("clienti");
|
||||||
else
|
else
|
||||||
TInvioP_file* trasfile = apri_file("fornit");
|
trasfile = apri_file("fornit");
|
||||||
|
|
||||||
TString80 filtro = "";
|
TString80 filtro = "";
|
||||||
filtro.format("TIPOCF == \"%c\"", tipocf);
|
filtro.format("TIPOCF == \"%c\"", tipocf);
|
||||||
@ -455,7 +496,6 @@ bool TInvioP::i_proforma_clifor(char tipocf)
|
|||||||
for (cur = 0; cur.pos() < cur_items; ++(cur))
|
for (cur = 0; cur.pos() < cur_items; ++(cur))
|
||||||
{
|
{
|
||||||
TRecord_text rec;
|
TRecord_text rec;
|
||||||
|
|
||||||
rec.set_type("C");
|
rec.set_type("C");
|
||||||
trasfile->autoload(rec, cur);
|
trasfile->autoload(rec, cur);
|
||||||
trasfile->write(rec);
|
trasfile->write(rec);
|
||||||
@ -498,11 +538,14 @@ bool TInvioP::destroy()
|
|||||||
|
|
||||||
void TInvioP::main_loop()
|
void TInvioP::main_loop()
|
||||||
{
|
{
|
||||||
//il programma si puo' usare SOLO se in contabilita' analitica si usa il pianodeiconti contabile
|
//il programma si puo' usare SOLO se in contabilita' analitica si usa il piano dei conti contabile
|
||||||
TConfig& cfg = ca_config();
|
TConfig& cfg = ca_config();
|
||||||
const bool use_pdcc = cfg.get_bool("UsePdcc");
|
const bool use_pdcc = cfg.get_bool("UsePdcc");
|
||||||
if (!use_pdcc)
|
if (!use_pdcc)
|
||||||
|
{
|
||||||
|
error_box(TR("Programma funzionante SOLO se in contabilita' analitica si usa il piano dei conti contabile"));
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
TFilename configname = "cg7200a.ini"; //file configurazione della maschera
|
TFilename configname = "cg7200a.ini"; //file configurazione della maschera
|
||||||
configname.custom_path();
|
configname.custom_path();
|
||||||
|
@ -45,19 +45,19 @@ NAME(0) = ID REGISTRAZIONE
|
|||||||
TYPE(0) = NUMERO
|
TYPE(0) = NUMERO
|
||||||
POSITION(0) = 0
|
POSITION(0) = 0
|
||||||
LENGTH(0) = 10
|
LENGTH(0) = 10
|
||||||
FIELD(0) = 23->NUMREG
|
FIELD(0) = 107->NUMREG
|
||||||
|
|
||||||
NAME(1) = DATA REGISTRAZIONE
|
NAME(1) = DATA REGISTRAZIONE
|
||||||
TYPE(1) = DATA
|
TYPE(1) = DATA
|
||||||
POSITION(1) = 10
|
POSITION(1) = 10
|
||||||
LENGTH(1) = 8
|
LENGTH(1) = 8
|
||||||
FIELD(1) = 23->DATAREG
|
FIELD(1) = 107->DATAREG
|
||||||
|
|
||||||
NAME(2) = CODICE CAUSALE
|
NAME(2) = CODICE CAUSALE
|
||||||
TYPE(2) = STRINGA
|
TYPE(2) = STRINGA
|
||||||
POSITION(2) = 18
|
POSITION(2) = 18
|
||||||
LENGTH(2) = 3
|
LENGTH(2) = 3
|
||||||
FIELD(2) = 23->CODCAUS
|
FIELD(2) = 107->CODCAUS
|
||||||
|
|
||||||
NAME(3) = DESCRIZIONE CAUSALE
|
NAME(3) = DESCRIZIONE CAUSALE
|
||||||
TYPE(3) = STRINGA
|
TYPE(3) = STRINGA
|
||||||
@ -69,19 +69,19 @@ NAME(4) = DESCRIZIONE TESTATA
|
|||||||
TYPE(4) = STRINGA
|
TYPE(4) = STRINGA
|
||||||
POSITION(4) = 61
|
POSITION(4) = 61
|
||||||
LENGTH(4) = 40
|
LENGTH(4) = 40
|
||||||
FIELD(4) = 23->DESCR[1,40]
|
FIELD(4) = 107->DESCR[1,40]
|
||||||
|
|
||||||
NAME(5) = DATA DOCUMENTO
|
NAME(5) = DATA DOCUMENTO
|
||||||
TYPE(5) = DATA
|
TYPE(5) = DATA
|
||||||
POSITION(5) = 101
|
POSITION(5) = 101
|
||||||
LENGTH(5) = 8
|
LENGTH(5) = 8
|
||||||
FIELD(5) = 23->DATADOC
|
FIELD(5) = 107->DATADOC
|
||||||
|
|
||||||
NAME(6) = NUMERO DOCUMENTO
|
NAME(6) = NUMERO DOCUMENTO
|
||||||
TYPE(6) = STRINGA
|
TYPE(6) = STRINGA
|
||||||
POSITION(6) = 109
|
POSITION(6) = 109
|
||||||
LENGTH(6) = 6
|
LENGTH(6) = 6
|
||||||
FIELD(6) = 23->NUMDOC
|
FIELD(6) = 107->NUMDOC
|
||||||
|
|
||||||
NAME(7) = TIPO DOCUMENTO
|
NAME(7) = TIPO DOCUMENTO
|
||||||
TYPE(7) = STRINGA
|
TYPE(7) = STRINGA
|
||||||
@ -105,7 +105,7 @@ POSITION(10) = 169
|
|||||||
NAME(11) = TOTALE DOCUMENTO
|
NAME(11) = TOTALE DOCUMENTO
|
||||||
TYPE(11) = IMPORTO
|
TYPE(11) = IMPORTO
|
||||||
POSITION(11) = 183
|
POSITION(11) = 183
|
||||||
FIELD(11) = 23->TOTDOC
|
FIELD(11) = 107->TOTDOC
|
||||||
|
|
||||||
NAME(12) = DATA PAGAMENTO
|
NAME(12) = DATA PAGAMENTO
|
||||||
TYPE(12) = DATA
|
TYPE(12) = DATA
|
||||||
@ -122,7 +122,7 @@ NAME(14) = DATA COMPETENZA
|
|||||||
TYPE(14) = DATA
|
TYPE(14) = DATA
|
||||||
POSITION(14) = 225
|
POSITION(14) = 225
|
||||||
LENGTH(14) = 8
|
LENGTH(14) = 8
|
||||||
FIELD(14) = 23->DATACOMP
|
FIELD(14) = 107->DATACOMP
|
||||||
|
|
||||||
NAME(15) = NUMERO PROTOCOLLO
|
NAME(15) = NUMERO PROTOCOLLO
|
||||||
TYPE(15) = STRINGA
|
TYPE(15) = STRINGA
|
||||||
@ -178,13 +178,13 @@ NAME(6) = FLAG CLIFOR
|
|||||||
TYPE(6) = STRINGA
|
TYPE(6) = STRINGA
|
||||||
POSITION(6) = 27
|
POSITION(6) = 27
|
||||||
LENGTH(6) = 1
|
LENGTH(6) = 1
|
||||||
FIELD(6) = 24->TIPOC
|
//MESSAGE(6) = _TIPOCF
|
||||||
|
|
||||||
NAME(7) = CODICE CLIFOR
|
NAME(7) = CODICE CLIFOR
|
||||||
TYPE(7) = STRINGA
|
TYPE(7) = STRINGA
|
||||||
POSITION(7) = 28
|
POSITION(7) = 28
|
||||||
LENGTH(7) = 10
|
LENGTH(7) = 10
|
||||||
FIELD(7) = 24->SOTTOCONTO
|
FIELD(7) = 108->CODCONTO[7,12]
|
||||||
|
|
||||||
NAME(8) = DESCRIZIONE RIGA
|
NAME(8) = DESCRIZIONE RIGA
|
||||||
TYPE(8) = STRINGA
|
TYPE(8) = STRINGA
|
||||||
@ -221,8 +221,8 @@ NAME(14) = VOCE DI SPESA
|
|||||||
TYPE(14) = STRINGA
|
TYPE(14) = STRINGA
|
||||||
POSITION(14) = 145
|
POSITION(14) = 145
|
||||||
LENGTH(14) = 10
|
LENGTH(14) = 10
|
||||||
MESSAGE(14) = _CODCBL
|
//MESSAGE(14) = _CODCBL
|
||||||
FIELD(14) = 300@->DESCRIZ
|
//FIELD(14) = 300@->DESCRIZ
|
||||||
|
|
||||||
[RECORD I]
|
[RECORD I]
|
||||||
|
|
||||||
@ -297,14 +297,14 @@ NAME(13) = COMMESSA
|
|||||||
TYPE(13) = STRINGA
|
TYPE(13) = STRINGA
|
||||||
POSITION(13) = 125
|
POSITION(13) = 125
|
||||||
LENGTH(13) = 20
|
LENGTH(13) = 20
|
||||||
FIELD(13) = 25->CODCMS
|
FIELD(13) = 108->CODCMS
|
||||||
|
|
||||||
NAME(14) = VOCE DI SPESA
|
NAME(14) = VOCE DI SPESA
|
||||||
TYPE(14) = STRINGA
|
TYPE(14) = STRINGA
|
||||||
POSITION(14) = 145
|
POSITION(14) = 145
|
||||||
LENGTH(14) = 10
|
LENGTH(14) = 10
|
||||||
MESSAGE(14) = _CODCBL
|
//MESSAGE(14) = _CODCBL
|
||||||
FIELD(14) = 400@->DESCRIZ
|
//FIELD(14) = 400@->DESCRIZ
|
||||||
|
|
||||||
[RECORD C]
|
[RECORD C]
|
||||||
|
|
||||||
@ -391,6 +391,7 @@ LENGTH(3) = 80
|
|||||||
FIELD(3)=19->DESCR
|
FIELD(3)=19->DESCR
|
||||||
|
|
||||||
[RECORD G]
|
[RECORD G]
|
||||||
|
|
||||||
NAME(0) = ID REGISTRAZIONE PAGAMENTO
|
NAME(0) = ID REGISTRAZIONE PAGAMENTO
|
||||||
TYPE(0) = NUMERO
|
TYPE(0) = NUMERO
|
||||||
POSITION(0) = 0
|
POSITION(0) = 0
|
||||||
|
Loading…
x
Reference in New Issue
Block a user