Patch level :2.2 nopatch

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :avanzato un po' (dopo 2 mesi) il programma di stampa pagato


git-svn-id: svn://10.65.10.50/trunk@13819 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca 2006-02-24 12:52:02 +00:00
parent a5014db165
commit aa3dd28e95
2 changed files with 176 additions and 166 deletions

View File

@ -4,6 +4,7 @@
#include <progind.h>
#include <reprint.h>
#include <clifo.h>
#include <mov.h>
#include <partite.h>
#include <rmov.h>
@ -204,7 +205,7 @@ protected:
protected: //da libreria
// virtual const TVariant& get(const char* column_name) const;
virtual const TVariant& get(const char* column_name) const;
protected:
void crea_trr(const TFilename& trr) const;
@ -270,13 +271,41 @@ void TPag_per_cms_recordset::set_custom_filter(TCursor& cur) const
myself = (TPag_per_cms_recordset*)this;
}
//simpatico metodo per riempire in automatico i campi di intestazione speciali
const TVariant& TPag_per_cms_recordset::get(const char* column_name) const
{
if (*column_name == '#')
{
if (strcmp(column_name, "#COSTO") == 0)
{
TVariant& var = get_tmp_var();
var = _codcosto;
return var;
}
if (strcmp(column_name, "#COMMESSA") == 0)
{
TVariant& var = get_tmp_var();
var = _codcms;
return var;
}
if (strcmp(column_name, "#FASE") == 0)
{
TVariant& var = get_tmp_var();
var = _codfas;
return var;
}
}
return TISAM_recordset::get(column_name);
}
void TPag_per_cms_recordset::crea_trr(const TFilename& trr) const
{
ofstream of(trr);
of << 1000 << endl;
of << 14 << endl;
of << "CONTO|1|12|0|Conto contabile" << endl;
of << "DESCONTO|1|50|0|Descrizione conto" << endl;
of << 15 << endl;
of << "CODFORN|3|6|0|Codice fornitore" << endl;
of << "DESFORN|1|50|0|Descrizione fornitore" << endl;
of << "NREG|3|7|0|Numero registrazione" << endl;
of << "DATAPAG|5|8|0|Data pagamento" << endl;
of << "DESCRPAG|1|50|0|Descrizione pagamento" << endl;
@ -286,11 +315,12 @@ void TPag_per_cms_recordset::crea_trr(const TFilename& trr) const
of << "TOTDOC|4|18|5|Totale documento" << endl;
of << "TOTPAG|4|18|5|Totale pagamento" << endl;
of << "TOTRES|4|18|5|Totale residuo" << endl;
of << "CODFORN|3|7|0|Codice fornitore" << endl;
of << "DESFORN|1|50|0|Descrizione fornitore" << endl;
of << "CDC|1|20|0|Centro di costo" << endl;
of << "CMS|1|20|0|Commessa" << endl;
of << "FSC|1|10|0|Fase" << endl;
of << "HIDDEN|8|1|0|Record nascosto" << endl;
of << 1 << endl;
of << "CONTO+NREG+DATAPAG" << endl;
of << "CODFORN+FSC+NREG+DATAPAG" << endl;
}
void TPag_per_cms_recordset::lettura_conti(TAssoc_array& assoc, const char tipoconto)
@ -499,25 +529,25 @@ void TPag_per_cms_recordset::find_commesse_cg(const long nreg)
if (anal_rows.rows() > 0) //se il movana ha righe...
{
for (i = 1; i <= anal_rows.rows(); i++) //scansiona righe analitiche..
for (int j = 1; j <= anal_rows.rows(); j++) //scansiona righe analitiche..
{
if (check_cms_cdc_fsc(anal_rows[i]))
if (check_cms_cdc_fsc(anal_rows[j]))
{
//prende il conto sulla riga analitica e lo confronta con quello della riga iva
const int gruppo_anal = atoi(anal_rows[i].get(RMOVANA_CODCONTO).left(3));
const int conto_anal = atoi(anal_rows[i].get(RMOVANA_CODCONTO).mid(3,3));
const long sottoconto_anal = atol(anal_rows[i].get(RMOVANA_CODCONTO).mid(6,6));
const int gruppo_anal = atoi(anal_rows[j].get(RMOVANA_CODCONTO).left(3));
const int conto_anal = atoi(anal_rows[j].get(RMOVANA_CODCONTO).mid(3,3));
const long sottoconto_anal = atol(anal_rows[j].get(RMOVANA_CODCONTO).mid(6,6));
const TBill conto(gruppo_anal, conto_anal, sottoconto_anal);
if (cerca_costo(conto) || cerca_pagamento(conto))
{
const char sezione = anal_rows[i].get_char(RMOVANA_SEZIONE);
const real valore = anal_rows[i].get_real(RMOVANA_IMPORTO);
const char sezione = anal_rows[j].get_char(RMOVANA_SEZIONE);
const real valore = anal_rows[j].get_real(RMOVANA_IMPORTO);
const TImporto imp(sezione, valore);
}
}
} //for(i<anal_rows...
} //for(j<anal_rows...
} //if(anal_rows>0...
} //if(numregcg==nreg...
} //for(TRecnotype...
@ -629,9 +659,9 @@ void TPag_per_cms_recordset::find_commesse(const long nreg, const TRectype& riga
//se movimento IVA..
if (pn.iva_items() > 0)
{
for (int i = 0; i < pn.iva_items(); i++)
for (int j = 0; j < pn.iva_items(); j++)
{
const TRectype& rmoviva = pn.iva(i);
const TRectype& rmoviva = pn.iva(j);
const TBill zio(rmoviva);
//il tutto si fa solo se l'indicatore di bilancio del conto nella riga iva e' != 5
if (zio.indicatore_bilancio() != 5)
@ -642,7 +672,7 @@ void TPag_per_cms_recordset::find_commesse(const long nreg, const TRectype& riga
const long sottoconto_iva = zio.sottoconto();
//trova le RMOVANA del MOVANA corrente che hanno il conto = a quello della i-esima rigaiva
TAnal_mov anal_mov(nreg);
TAnal_mov anal_mov(rmoviva);
TRecord_array& anal_rows = anal_mov.body();
if (anal_rows.rows() > 0) //se il movana ha righe...
@ -654,13 +684,13 @@ void TPag_per_cms_recordset::find_commesse(const long nreg, const TRectype& riga
//..agli importi delle righe analitiche corretti per le % iva
TGeneric_distrib agip (lordo_iva, TCurrency::get_firm_dec());
for (i = 1; i <= anal_rows.rows(); i++) //scansiona righe analitiche..
for (int k = 1; k <= anal_rows.rows(); k++) //scansiona righe analitiche..
{
real perc_ded_iva = UNO; //%iva deducibile (di default 100, ameno del prorata)
real perc_ded_iva = UNO; //%iva deducibile (di default 100, a meno del prorata)
if (imposta_iva != ZERO)
{
//controllo prorata
const TString80 commessa_riga_anal = anal_rows[i].get(RMOVANA_CODCMS);
const TString80 commessa_riga_anal = anal_rows[k].get(RMOVANA_CODCMS);
const TRectype& pla = cache().get(LF_COMMESSE, commessa_riga_anal);
const bool prorata = pla.get_bool("PRORATA");
if (prorata)
@ -675,16 +705,16 @@ void TPag_per_cms_recordset::find_commesse(const long nreg, const TRectype& riga
} //if imposta_iva...
//prende il conto sulla riga analitica e lo confronta con quello della riga iva
const int gruppo_anal = atoi(anal_rows[i].get(RMOVANA_CODCONTO).left(3));
const int conto_anal = atoi(anal_rows[i].get(RMOVANA_CODCONTO).mid(3,3));
const long sottoconto_anal = atol(anal_rows[i].get(RMOVANA_CODCONTO).mid(6,6));
const int gruppo_anal = atoi(anal_rows[k].get(RMOVANA_CODCONTO).left(3));
const int conto_anal = atoi(anal_rows[k].get(RMOVANA_CODCONTO).mid(3,3));
const long sottoconto_anal = atol(anal_rows[k].get(RMOVANA_CODCONTO).mid(6,6));
//il codconto anale e iva coincidono?..
if (gruppo_iva == gruppo_anal && conto_iva == conto_anal && sottoconto_iva == sottoconto_anal)
{
//..in tal caso aggiunge l'importo della riga analitica al distributore, dopo..
//..averlo corretto in base alle % precedentemente calcolate
real importo_anal = anal_rows[i].get_real(RMOVANA_IMPORTO);
real importo_anal = anal_rows[k].get_real(RMOVANA_IMPORTO);
const real perc_iva = imposta_iva / imponibile_iva;
const real perc_corretta_iva = perc_iva * (UNO - perc_ded_iva);
importo_anal = importo_anal * (UNO - perc_corretta_iva);
@ -693,12 +723,12 @@ void TPag_per_cms_recordset::find_commesse(const long nreg, const TRectype& riga
} //if(gruppo_iva==...
} //for (anal_rows...
for (i = 1; i <= anal_rows.rows(); i++) //..allora le scansiona..
for (int l = 1; l <= anal_rows.rows(); l++) //..allora le scansiona..
{
//prende il conto sulla riga analitica e lo confronta con quello della riga iva
const int gruppo_anal = atoi(anal_rows[i].get(RMOVANA_CODCONTO).left(3));
const int conto_anal = atoi(anal_rows[i].get(RMOVANA_CODCONTO).mid(3,3));
const long sottoconto_anal = atol(anal_rows[i].get(RMOVANA_CODCONTO).mid(6,6));
const int gruppo_anal = atoi(anal_rows[l].get(RMOVANA_CODCONTO).left(3));
const int conto_anal = atoi(anal_rows[l].get(RMOVANA_CODCONTO).mid(3,3));
const long sottoconto_anal = atol(anal_rows[l].get(RMOVANA_CODCONTO).mid(6,6));
//il codconto anale e iva coincidono?
if (gruppo_iva == gruppo_anal && conto_iva == conto_anal && sottoconto_iva == sottoconto_anal)
@ -706,13 +736,13 @@ void TPag_per_cms_recordset::find_commesse(const long nreg, const TRectype& riga
//impoerto
real importo = agip.get();
//commessa,cdc,fase della riga analitica devono essere coincidenti con quelle dello sheet
if (check_cms_cdc_fsc(anal_rows[i]))
if (check_cms_cdc_fsc(anal_rows[l]))
{
//costruzione dell'assoc_array con cms/cdc/fsc ed importi
//costruzione dell'assoc_array 'commesse' con cms/cdc/fsc ed importi
TToken_string cms_cdc_fsc;
cms_cdc_fsc.add(anal_rows[i].get(RMOVANA_CODCMS));
cms_cdc_fsc.add(anal_rows[i].get(RMOVANA_CODCCOSTO));
cms_cdc_fsc.add(anal_rows[i].get(RMOVANA_CODFASE));
cms_cdc_fsc.add(anal_rows[l].get(RMOVANA_CODCMS));
cms_cdc_fsc.add(anal_rows[l].get(RMOVANA_CODCCOSTO));
cms_cdc_fsc.add(anal_rows[l].get(RMOVANA_CODFASE));
real* imp = (real*)commesse.objptr(cms_cdc_fsc);
//aggiunge un elemento all'assoc_array...
@ -740,9 +770,9 @@ void TPag_per_cms_recordset::find_commesse(const long nreg, const TRectype& riga
} //if(pn.iva_items(...
else //..movimento NON iva (sempre con saldaconto)
{
for (int i = 0; i < pn.cg_items(); i++)
for (int j = 0; j < pn.cg_items(); j++)
{
const TRectype& rmov = pn.cg(i);
const TRectype& rmov = pn.cg(j);
const TBill zio_cg(rmov);
TImporto importo(rmov.get_char(RMV_SEZIONE), rmov.get_real(RMV_IMPORTO));
@ -756,7 +786,7 @@ void TPag_per_cms_recordset::find_commesse(const long nreg, const TRectype& riga
else
if (cerca_fiscali(zio_cg) || cerca_sociali(zio_cg))
totdoc -= importo.valore(); //valore da stampare nella colonna Tot.fattura con ritenute
} //for i < pn.cg_items...
} //for j < pn.cg_items...
TAnal_mov anal_mov(nreg);
TRecord_array& anal_rows = anal_mov.body();
@ -764,25 +794,25 @@ void TPag_per_cms_recordset::find_commesse(const long nreg, const TRectype& riga
if (anal_rows.rows() > 0) //se il movana ha righe...
{
for (i = 1; i <= anal_rows.rows(); i++) //..allora le scansiona..
for (int k = 1; k <= anal_rows.rows(); k++) //..allora le scansiona..
{
//prende il conto sulla riga analitica e lo confronta con quello della riga iva
const int gruppo_anal = atoi(anal_rows[i].get(RMOVANA_CODCONTO).left(3));
const int conto_anal = atoi(anal_rows[i].get(RMOVANA_CODCONTO).mid(3,3));
const long sottoconto_anal = atol(anal_rows[i].get(RMOVANA_CODCONTO).mid(6,6));
//prende gr/co/sott sulla riga analitica...
const int gruppo_anal = atoi(anal_rows[k].get(RMOVANA_CODCONTO).left(3));
const int conto_anal = atoi(anal_rows[k].get(RMOVANA_CODCONTO).mid(3,3));
const long sottoconto_anal = atol(anal_rows[k].get(RMOVANA_CODCONTO).mid(6,6));
//..e crea il conto contabile corrispondente
TBill conto_cg(gruppo_anal, conto_anal, sottoconto_anal);
//il codconto anale e iva coincidono?
//l'indicatore di bilancio del conto contabile appena creato e' valido?
if (conto_cg.indicatore_bilancio() != 5)
{
const real importo_anal = anal_rows[i].get_real(RMOVANA_IMPORTO);
const real importo_anal = anal_rows[k].get_real(RMOVANA_IMPORTO);
//costruzione dell'assoc_array con cms/cdc/fsc ed importi
//costruzione dell'assoc_array 'commesse' con cms/cdc/fsc ed importi
TToken_string cms_cdc_fsc;
cms_cdc_fsc.add(anal_rows[i].get(RMOVANA_CODCMS));
cms_cdc_fsc.add(anal_rows[i].get(RMOVANA_CODCCOSTO));
cms_cdc_fsc.add(anal_rows[i].get(RMOVANA_CODFASE));
cms_cdc_fsc.add(anal_rows[k].get(RMOVANA_CODCMS));
cms_cdc_fsc.add(anal_rows[k].get(RMOVANA_CODCCOSTO));
cms_cdc_fsc.add(anal_rows[k].get(RMOVANA_CODFASE));
real* imp = (real*)commesse.objptr(cms_cdc_fsc);
@ -792,15 +822,14 @@ void TPag_per_cms_recordset::find_commesse(const long nreg, const TRectype& riga
commesse.add(cms_cdc_fsc, imp);
}
TImporto importo(anal_rows[i].get_char(RMOVANA_SEZIONE), anal_rows[i].get_real(RMOVANA_IMPORTO));
TImporto importo(anal_rows[k].get_char(RMOVANA_SEZIONE), anal_rows[k].get_real(RMOVANA_IMPORTO));
importo.normalize('D');
*imp += importo.valore();
totdoc_cms += importo.valore();
} //if(conto_cg.indicatore...
}
}
} //for(k<anal_rows...
} //if(anal_rows>0...
} //else (pn.iva_items(...
//parte comune a movimenti IVA e non (vengono anche qui considerate le ritenute fiscali
@ -849,43 +878,39 @@ void TPag_per_cms_recordset::find_commesse(const long nreg, const TRectype& riga
{
const real& impcms = *(real*)imp;
// campi del pagamento
// tmpcurr.put("CONTO", );
// tmpcurr.put("DESCONTO", );
// campi del pagamento che vanno spediti nel file temporaneo
//codice fornitore e descrizione
const long codforn = riga_pag.get_long(PART_SOTTOCONTO);
tmpcurr.put("CODFORN", codforn);
TString16 keyclifo;
keyclifo.format("%s|%d", "F", codforn);
const TRectype& rec_clifo = cache().get(LF_CLIFO, keyclifo);
TString80 desforn = rec_clifo.get(CLI_RAGSOC);
tmpcurr.put("DESFORN", desforn);
//nreg,data pagamento,descrizione pagamento
tmpcurr.put("NREG", nreg);
tmpcurr.put("DATAPAG", riga_pag.get_date(_campodata));
tmpcurr.put("DESCRPAG", riga_pag.get(PART_DESCR));
/* tmpcurr.put("NDOC", );
tmpcurr.put("DATADOC", );
tmpcurr.put("PROT", );
tmpcurr.put("TOTDOC", );
tmpcurr.put("TOTPAG", );
tmpcurr.put("TOTRES", );
tmpcurr.put("CODFORN", );
tmpcurr.put("DESFORN", );*/
}
/* ppcs->_tipo = 0; //movimenti da saldaconto
ppcs->_codforn = riga_pag.get_long(PART_SOTTOCONTO);
ppcs->_datapag = riga_pag.get_date(_campodata);
ppcs->_importopagato.set_num(distributore.get()); //pagamento nella partita
ppcs->_importopagato_prec.set_num(distributore_prec.get()); //pagamenti precedenti al
ppcs->_descrpagamento = riga_pag.get(PART_DESCR);
// campi della fattura
ppcs->_nreg = nreg;
ppcs->_numfat = movfat.get(MOV_NUMDOC);
ppcs->_datafat = movfat.get_date(MOV_DATADOC);
ppcs->_protiva = movfat.get_long(MOV_PROTIVA);
ppcs->_totfat = totdoc; //questo e' quello che viene stampato in Tot.fattura
//documento origine
tmpcurr.put("NDOC", movfat.get_long(MOV_NUMDOC));
tmpcurr.put("DATADOC", movfat.get_date(MOV_DATADOC));
tmpcurr.put("PROT", movfat.get_long(MOV_PROTIVA));
tmpcurr.put("TOTDOC", totdoc);
tmpcurr.put("TOTPAG", distributore.get()); //pagamento nella partita
// tmpcurr.put("TOTRES", ); //pagamenti precedenti al
TToken_string cms_fsc = k;
ppcs->_commessa = cms_fsc.get(0);
ppcs->_fase = cms_fsc.get(1);
ppcs->_importocommessa.set_num(impcms); //importo da pagare scritto sulla fattura
}*/
_tmp->write(); //aggiunge il record al file temporaneo
//campi relativi a cdc,commessa,fase
TToken_string cdc_cms_fsc = k;
tmpcurr.put("CMS",cdc_cms_fsc.get(0));
tmpcurr.put("CDC",cdc_cms_fsc.get(1));
tmpcurr.put("FSC",cdc_cms_fsc.get(2));
// tmpcurr.put("IMPCMS",impcms);
//e finalmente aggiunge il record al file temporaneo
_tmp->write();
} //FOR_EACH_...
} //pn.read()...
} //if (numregcg==nreg)...

View File

@ -11,26 +11,25 @@
<field x="80" type="Data" width="10" pattern="1">
<source>#SYSTEM.DATE</source>
</field>
<field x="165" type="Numero" align="right" width="3" pattern="1">
<field x="155" type="Numero" align="right" width="3" pattern="1">
<source>#REPORT.PAGE</source>
</field>
<field border="2" x="1" y="2" type="Linea" width="169" height="0" pattern="1" />
<field border="2" x="1" y="2" type="Linea" width="159" height="0" pattern="1" />
<field x="1" y="3.5" type="Testo" align="right" width="7" pattern="1" text="N. Reg." />
<field x="9" y="3.5" type="Testo" align="center" width="11" pattern="1" text="Data pag." />
<field x="21" y="3.5" type="Testo" width="25" pattern="1" text="Descrizione pagamento" />
<field x="47" y="3.5" type="Testo" align="center" width="6" pattern="1" text="N. doc." />
<field x="54" y="3.5" type="Testo" align="center" width="10" pattern="1" text="Data doc." />
<field x="65" y="3.5" type="Testo" width="4" pattern="1" text="Prot." />
<field x="70" y="3.5" type="Testo" align="right" width="18" pattern="1" text="Totale documento" />
<field x="89" y="3.5" type="Testo" align="right" width="18" pattern="1" text="Totale pagamento" />
<field x="108" y="3.5" type="Testo" align="right" width="18" pattern="1" text="Totale residuo" />
<field x="128" y="3.5" type="Testo" align="right" width="7" pattern="1" text="Fornitore" />
<field border="1" x="1" y="4.5" type="Linea" width="169" height="0" pattern="1" />
<field x="10" y="3.5" type="Testo" align="center" width="11" pattern="1" text="Data pag." />
<field x="23" y="3.5" type="Testo" width="25" pattern="1" text="Descrizione pagamento" />
<field x="69" y="3.5" type="Testo" align="center" width="7" pattern="1" text="N. doc." />
<field x="84" y="3.5" type="Testo" align="center" width="10" pattern="1" text="Data doc." />
<field x="97.5" y="3.5" type="Testo" width="5" pattern="1" text="Prot." />
<field x="104" y="3.5" type="Testo" align="right" width="18" pattern="1" text="Totale documento" />
<field x="123" y="3.5" type="Testo" align="right" width="18" pattern="1" text="Totale pagamento" />
<field x="142" y="3.5" type="Testo" align="right" width="18" pattern="1" text="Totale residuo" />
<field border="1" x="1" y="4.5" type="Linea" width="159" height="0" pattern="1" />
</section>
<section type="Head" level="1" height="9">
<prescript description="H1 PRESCRIPT">MESSAGE RESET,F1.101
MESSAGE RESET,F1.102</prescript>
<field border="1" radius="100" x="1" type="Testo" valign="center" align="center" shade_offset="25" width="167" height="2.5" text="PAGATO PER COMMESSA &#2F; FORNITORE">
<field border="1" radius="100" x="1" type="Testo" valign="center" align="center" shade_offset="25" width="158" height="2.5" text="PAGATO PER COMMESSA &#2F; FORNITORE">
<font face="Courier New" bold="1" size="16" />
</field>
<field x="1" y="3" type="Testo" width="18" pattern="1" text="Centro di Costo:" />
@ -104,7 +103,7 @@ MESSAGE RESET,F1.102</prescript>
<font face="Courier New" bold="1" size="8" />
<prescript description="H1.0 PRESCRIPT">MESSAGE ISAMREAD,COMMESSE,CODCMS=#COMMESSA,PROROGA</prescript>
</field>
<field border="2" x="1" y="9" type="Linea" width="169" height="0" pattern="1" />
<field border="2" x="1" y="9" type="Linea" width="159" height="0" pattern="1" />
<field x="20" y="7.5" type="Stringa" width="6" id="101" pattern="1">
<font face="Courier New" bold="1" size="8" />
<prescript description="H1.101 PRESCRIPT">MESSAGE ISAMREAD,COMMESSE,CODCMS=#COMMESSA,CODCF</prescript>
@ -115,59 +114,65 @@ MESSAGE RESET,F1.102</prescript>
</field>
</section>
<section repeat="1" type="Head" level="2" height="2">
<groupby>CONTO</groupby>
<groupby>CODFORN</groupby>
<font italic="1" face="Courier New" size="8" />
<prescript description="H2 PRESCRIPT">MESSAGE RESET,F2.101
MESSAGE RESET,F2.102
MESSAGE RESET,F2.103</prescript>
<field x="1" y="0.5" type="Stringa" bg_color="#C0C0C0" width="23">
<field x="1" y="0.5" type="Stringa" bg_color="#C0C0C0" width="7">
<font italic="1" face="Courier New" bold="1" size="8" />
<source>CONTO</source>
<prescript description="H2.0 PRESCRIPT">CA_FORMAT_CONTO</prescript>
<source>CODFORN</source>
</field>
<field x="25" y="0.5" type="Stringa" width="50" pattern="1">
<field x="8" y="0.5" type="Stringa" bg_color="#C0C0C0" width="50">
<font italic="1" face="Courier New" bold="1" size="8" />
<source>DESCONTO</source>
<source>DESFORN</source>
</field>
</section>
<section type="Head" level="3">
<groupby>CODNUM+ANNO+NUMRD</groupby>
<field x="1" type="Stringa" hidden="1" align="right" width="7" pattern="1">
<source>NREG</source>
<groupby>FSC</groupby>
<font italic="1" face="Courier New" bold="1" size="8" />
<prescript description="H3 PRESCRIPT">MESSAGE RESET,F3.101
MESSAGE RESET,F3.102
MESSAGE RESET,F3.103</prescript>
<field x="1" type="Stringa" width="10" pattern="1">
<source>FSC</source>
<prescript description="H3.0 PRESCRIPT">MESSAGE RESET,F3.101
MESSAGE RESET,F3.102
MESSAGE RESET,F3.103</prescript>
</field>
</section>
<section type="Body" />
<section type="Body" level="1">
<condition>HIDDEN!='X'</condition>
<field x="9" type="Data" width="10" pattern="1">
<field x="10" type="Data" width="10" pattern="1">
<source>DATAPAG</source>
</field>
<field x="20" type="Stringa" dynamic_height="1" width="25" height="2" pattern="1">
<field x="22" type="Stringa" width="50" pattern="1">
<source>DESCRPAG</source>
</field>
<field x="46" type="Stringa" width="7" pattern="1">
<field x="74" type="Stringa" width="7" pattern="1">
<source>NDOC</source>
</field>
<field x="55" type="Data" width="10" pattern="1">
<field x="84" type="Data" width="10" pattern="1">
<source>DATADOC</source>
</field>
<field x="66" type="Numero" align="right" width="5" pattern="1">
<field x="97" type="Numero" align="right" width="5" pattern="1">
<source>PROT</source>
</field>
<field x="72" type="Valuta" align="right" width="18" pattern="1" text="###.###.###,@@">
<field x="104" type="Valuta" align="right" width="18" pattern="1" text="###.###.###,@@">
<source>TOTDOC</source>
<postscript description="B1.0 POSTSCRIPT">MESSAGE ADD,F2.101</postscript>
<postscript description="B1.0 POSTSCRIPT">MESSAGE ADD,F2.101
MESSAGE ADD,F3.101</postscript>
</field>
<field x="91" type="Valuta" align="right" width="18" pattern="1" text="###.###.###,@@">
<field x="123" type="Valuta" align="right" width="18" pattern="1" text="###.###.###,@@">
<source>TOTPAG</source>
<postscript description="B1.0 POSTSCRIPT">MESSAGE ADD,F2.102</postscript>
<postscript description="B1.0 POSTSCRIPT">MESSAGE ADD,F2.102
MESSAGE ADD,F3.102</postscript>
</field>
<field x="110" type="Valuta" align="right" width="18" pattern="1" text="###.###.###,@@">
<field x="142" type="Valuta" align="right" width="18" pattern="1" text="###.###.###,@@">
<source>TOTRES</source>
<postscript description="B1.0 POSTSCRIPT">MESSAGE ADD,F2.103</postscript>
</field>
<field x="137" type="Stringa" dynamic_height="1" width="25" height="2" pattern="1">
<source>DESCFORN</source>
<postscript description="B1.0 POSTSCRIPT">MESSAGE ADD,F2.103
MESSAGE ADD,F3.103</postscript>
</field>
<field type="Numero" hidden="1" align="right" width="1" id="100" pattern="1">
<prescript description="B1.100 PRESCRIPT">#THIS @
@ -192,76 +197,56 @@ MESSAGE RESET,F2.103</prescript>
<field x="1" type="Stringa" align="right" width="7" id="105" pattern="1">
<source>NREG</source>
</field>
<field x="129" type="Stringa" align="right" width="7" id="105" pattern="1">
<source>CODFORN</source>
</field>
</section>
<section type="Foot" />
<section type="Foot" level="1">
<field border="2" x="1" y="0.5" type="Linea" width="169" height="0" pattern="1" />
<field x="90" y="1" type="Testo" width="42" pattern="1" text="TOTALE PER FASE:">
<field border="2" x="1" y="0.5" type="Linea" width="159" height="0" pattern="1" />
<field x="73" y="1" type="Testo" width="30" pattern="1" text="TOTALE PER COMMESSA:">
<font face="Courier New" bold="1" size="8" />
</field>
<field x="90" y="2.5" type="Testo" width="42" pattern="1" text="TOTALE PER COMMESSA:">
<field x="104" y="1" type="Valuta" align="right" width="18" id="101" pattern="1" text="###.###.###,@@">
<font face="Courier New" bold="1" size="8" />
</field>
<field x="90" y="4" type="Testo" width="42" pattern="1" text="TOTALE PER CENTRO DI COSTO:">
<field x="123" y="1" type="Valuta" align="right" width="18" id="102" pattern="1" text="###.###.###,@@">
<font face="Courier New" bold="1" size="8" />
</field>
<field x="132" y="1" type="Valuta" align="right" width="12" id="101" pattern="1" text="###.###.###,@@">
<field x="142" y="1" type="Valuta" align="right" width="18" id="103" pattern="1" text="###.###.###,@@">
<font face="Courier New" bold="1" size="8" />
</field>
<field x="145" y="1" type="Valuta" align="right" width="12" id="102" pattern="1" text="###.###.###,@@">
<font face="Courier New" bold="1" size="8" />
</field>
<field x="158" y="1" type="Valuta" align="right" width="12" id="103" pattern="1" text="###.###.###,@@">
<font face="Courier New" bold="1" size="8" />
</field>
<field x="132" y="2.5" type="Valuta" align="right" width="12" id="201" pattern="1" text="###.###.###,@@">
<font face="Courier New" bold="1" size="8" />
<source>#103-#101</source>
</field>
<field x="132" y="4" type="Valuta" align="right" width="12" id="201" pattern="1" text="###.###.###,@@">
<font face="Courier New" bold="1" size="8" />
<source>#103-#101</source>
</field>
<field x="145" y="2.5" type="Valuta" align="right" width="12" id="202" pattern="1" text="###.###.###,@@">
<font face="Courier New" bold="1" size="8" />
<source>#103-#102</source>
</field>
<field x="145" y="4" type="Valuta" align="right" width="12" id="202" pattern="1" text="###.###.###,@@">
<font face="Courier New" bold="1" size="8" />
<source>#103-#102</source>
</field>
<field x="158" y="2.5" type="Valuta" align="right" width="12" id="203" pattern="1" text="###.###.###,@@">
<font face="Courier New" bold="1" size="8" />
<source>#F1.111-#103</source>
</field>
<field x="158" y="4" type="Valuta" align="right" width="12" id="203" pattern="1" text="###.###.###,@@">
<font face="Courier New" bold="1" size="8" />
<source>#F1.111-#103</source>
</field>
</section>
<section type="Foot" level="2" height="3">
<field border="1" x="1" y="0.5" type="Linea" width="169" height="0" pattern="1" />
<field x="110" y="1" type="Testo" width="20" pattern="1" text="Totale per conto:">
<section type="Foot" level="2" height="2.5">
<field border="1" x="1" y="0.5" type="Linea" width="159" height="0" pattern="1" />
<field x="80" y="1" type="Testo" width="25" pattern="1" text="Totale per fornitore:">
<font face="Courier New" bold="1" size="8" />
</field>
<field x="132" y="1" type="Valuta" align="right" width="12" id="101" pattern="1" text="###.###.###,@@">
<field x="104" y="1" type="Valuta" align="right" width="18" id="101" pattern="1" text="###.###.###,@@">
<font face="Courier New" bold="1" size="8" />
<postscript description="F2.101 POSTSCRIPT">MESSAGE ADD,F1.101</postscript>
</field>
<field x="145" y="1" type="Valuta" align="right" width="12" id="102" pattern="1" text="###.###.###,@@">
<field x="123" y="1" type="Valuta" align="right" width="18" id="102" pattern="1" text="###.###.###,@@">
<font face="Courier New" bold="1" size="8" />
<postscript description="F2.102 POSTSCRIPT">MESSAGE ADD,F1.102</postscript>
</field>
<field x="158" y="1" type="Valuta" align="right" width="12" id="103" pattern="1" text="###.###.###,@@">
<field x="142" y="1" type="Valuta" align="right" width="18" id="103" pattern="1" text="###.###.###,@@">
<font face="Courier New" bold="1" size="8" />
<postscript description="F2.103 POSTSCRIPT">MESSAGE ADD,F1.103</postscript>
</field>
</section>
<section type="Foot" level="3">
<prescript description="F3 PRESCRIPT">0 #B1.100 !</prescript>
<field border="1" x="1" y="0.5" type="Linea" width="159" height="0" pattern="1" />
<field x="80" y="1" type="Testo" width="20" pattern="1" text="Totale per fase:">
<font face="Courier New" bold="1" size="8" />
</field>
<field x="104" y="1" type="Valuta" align="right" width="18" id="101" pattern="1" text="###.###.###,@@">
<font face="Courier New" bold="1" size="8" />
</field>
<field x="123" y="1" type="Valuta" align="right" width="18" id="102" pattern="1" text="###.###.###,@@">
<font face="Courier New" bold="1" size="8" />
</field>
<field x="142" y="1" type="Valuta" align="right" width="18" id="103" pattern="1" text="###.###.###,@@">
<font face="Courier New" bold="1" size="8" />
</field>
</section>
<sql>USE 1000</sql>
</report>