Patch level :10.0
Files correlati : Ricompilazione Demo : [ ] Commento : personalizzazione anival the canival git-svn-id: svn://10.65.10.50/trunk@17900 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
8c905109c1
commit
e413ae8dc2
232
ps/ps0099100.cpp
232
ps/ps0099100.cpp
@ -78,93 +78,91 @@ public:
|
||||
|
||||
class TStatistiche_ANIVAL_csv_recordset : public TCSV_recordset
|
||||
{
|
||||
real _tot[13]; //array con i totali per mese (e anno)
|
||||
|
||||
protected:
|
||||
//virtual const TVariant& get(const char* field_name) const;
|
||||
long trova_riga(const TString& codart);
|
||||
|
||||
public:
|
||||
TStatistiche_ANIVAL_csv_recordset();
|
||||
void aggiungi_riga(const TRiga_documento& riga);
|
||||
void compila_intestazione();
|
||||
void calcola_percentuali();
|
||||
};
|
||||
|
||||
TStatistiche_ANIVAL_csv_recordset::TStatistiche_ANIVAL_csv_recordset()
|
||||
: TCSV_recordset("CSV(,)\n")
|
||||
: TCSV_recordset("CSV(\"\t\")") //tab separated
|
||||
{
|
||||
//create_field("CODART", -1, 20, _alfafld); //codart
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// APPLICAZIONE
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
class TStatistiche_ANIVAL : public TSkeleton_application
|
||||
{
|
||||
virtual bool check_autorization() const {return false;}
|
||||
virtual const char * extra_modules() const {return "ve";}
|
||||
|
||||
protected:
|
||||
void elabora(const TMask& mask) const;
|
||||
void scrivi_csv(const TRiga_documento& riga, TStatistiche_ANIVAL_csv_recordset& csv) const;
|
||||
void compila_intestazione(TStatistiche_ANIVAL_csv_recordset& csv) const;
|
||||
|
||||
public:
|
||||
virtual bool create();
|
||||
virtual void main_loop();
|
||||
|
||||
};
|
||||
|
||||
void TStatistiche_ANIVAL::compila_intestazione(TStatistiche_ANIVAL_csv_recordset& csv) const
|
||||
void TStatistiche_ANIVAL_csv_recordset::compila_intestazione()
|
||||
{
|
||||
insert_rec(0);
|
||||
//riempie i campi del primo record del csv in modo da avere l'intestazione
|
||||
csv.set(0, "CODART");
|
||||
csv.set(1, "DESCRIZIONE");
|
||||
csv.set(2, "GENNAIO");
|
||||
csv.set(3, "%GEN");
|
||||
csv.set(4, "FEBBRAIO");
|
||||
csv.set(5, "%FEB");
|
||||
csv.set(6, "MARZO");
|
||||
csv.set(7, "%MAR");
|
||||
csv.set(8, "APRILE");
|
||||
csv.set(9, "%APR");
|
||||
csv.set(10, "MAGGIO");
|
||||
csv.set(11, "%MAG");
|
||||
csv.set(12, "GIUGNO");
|
||||
csv.set(13, "%GIU");
|
||||
csv.set(14, "LUGLIO");
|
||||
csv.set(15, "%LUG");
|
||||
csv.set(16, "AGOSTO");
|
||||
csv.set(17, "%AGO");
|
||||
csv.set(18, "SETTEMBRE");
|
||||
csv.set(19, "%SET");
|
||||
csv.set(20, "OTTOBRE");
|
||||
csv.set(21, "%OTT");
|
||||
csv.set(22, "NOVEMBRE");
|
||||
csv.set(23, "%NOV");
|
||||
csv.set(24, "DICEMBRE");
|
||||
csv.set(25, "%DIC");
|
||||
set(0, "CODART");
|
||||
set(1, "DESCRIZIONE");
|
||||
set(2, "GENNAIO");
|
||||
set(3, "%GEN");
|
||||
set(4, "FEBBRAIO");
|
||||
set(5, "%FEB");
|
||||
set(6, "MARZO");
|
||||
set(7, "%MAR");
|
||||
set(8, "APRILE");
|
||||
set(9, "%APR");
|
||||
set(10, "MAGGIO");
|
||||
set(11, "%MAG");
|
||||
set(12, "GIUGNO");
|
||||
set(13, "%GIU");
|
||||
set(14, "LUGLIO");
|
||||
set(15, "%LUG");
|
||||
set(16, "AGOSTO");
|
||||
set(17, "%AGO");
|
||||
set(18, "SETTEMBRE");
|
||||
set(19, "%SET");
|
||||
set(20, "OTTOBRE");
|
||||
set(21, "%OTT");
|
||||
set(22, "NOVEMBRE");
|
||||
set(23, "%NOV");
|
||||
set(24, "DICEMBRE");
|
||||
set(25, "%DIC");
|
||||
set(26, "ANNO");
|
||||
set(27, "%ANNO");
|
||||
}
|
||||
|
||||
//metodo per la scrittura del csv
|
||||
void TStatistiche_ANIVAL::scrivi_csv(const TRiga_documento& riga, TStatistiche_ANIVAL_csv_recordset& csv) const
|
||||
//metodo plutonico di ricerca dicotomica su una colonna di csv_recordset
|
||||
long TStatistiche_ANIVAL_csv_recordset::trova_riga(const TString& codart)
|
||||
{
|
||||
//creazione di un nuovo record da esportare
|
||||
csv.new_rec("");
|
||||
//riempimento del record secondo il tracciato:
|
||||
// codart+descrart+12*[impns+%incid]
|
||||
//codart
|
||||
const TString80 codart = riga.get(RDOC_CODART);
|
||||
csv.set(0, TVariant(codart));
|
||||
//descrart
|
||||
const TString& descrart = cache().get(LF_ANAMAG, codart, ANAMAG_DESCR);
|
||||
csv.set(1, TVariant(descrart));
|
||||
//datadoc (serve a stabilire in quale colonna andrà a sommarsi l'importo della riga corrente
|
||||
const TDate datadoc = riga.doc().get_date(DOC_DATADOC);
|
||||
const int mese = datadoc.month();
|
||||
const int column = mese * 2; //le colonne dei mesi sono gennaio=2,febbraio=4,marzo=6...
|
||||
//importo
|
||||
const real importo = riga.importo(true, false); //importo riga corrente
|
||||
real importone = csv.get(column).as_real(); //importo totale della colonna mese corrispondente
|
||||
importone += importo; //aggiunge l'importo riga all'importone
|
||||
csv.set(column, importone); //riscrive l'importone aggiornato nella sua colonna
|
||||
long first = 0;
|
||||
long last = items() - 1;
|
||||
long riga = -1;
|
||||
|
||||
while(first <= last)
|
||||
{
|
||||
const long guess = (first + last) / 2;
|
||||
move_to(guess);
|
||||
const TString& guess_codart = get(0).as_string();
|
||||
const int diff = guess_codart.compare(codart);
|
||||
if (diff == 0)
|
||||
{
|
||||
riga = guess;
|
||||
break;
|
||||
}
|
||||
if (diff > 0)
|
||||
{
|
||||
last = guess - 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
first = guess + 1;
|
||||
}
|
||||
}
|
||||
|
||||
return riga;
|
||||
}
|
||||
|
||||
|
||||
//funzione di ordinamento per il campo codart (campo 0 sul csv)
|
||||
static int compare_csv_rows_codart(const TObject** o1, const TObject** o2)
|
||||
{
|
||||
@ -179,6 +177,85 @@ static int compare_csv_rows_codart(const TObject** o1, const TObject** o2)
|
||||
return cmp;
|
||||
}
|
||||
|
||||
//metodo per la scrittura del csv
|
||||
void TStatistiche_ANIVAL_csv_recordset::aggiungi_riga(const TRiga_documento& riga)
|
||||
{
|
||||
//creazione di un nuovo record da esportare
|
||||
//esiste già questo codart?
|
||||
const TString80 codart = riga.get(RDOC_CODART);
|
||||
long numriga = trova_riga(codart);
|
||||
if (numriga < 0)
|
||||
{
|
||||
//codart
|
||||
new_rec("");
|
||||
set(0, TVariant(codart));
|
||||
//descrart
|
||||
const TString& descrart = cache().get(LF_ANAMAG, codart, ANAMAG_DESCR);
|
||||
set(1, TVariant(descrart));
|
||||
|
||||
//re-sorting per codart
|
||||
sort(compare_csv_rows_codart);
|
||||
numriga = trova_riga(codart);
|
||||
CHECKS(numriga >= 0, "Articolo bastardo ", (const char*)codart);
|
||||
}
|
||||
//riempimento del record secondo il tracciato:
|
||||
// codart+descrart+12*[impns+%incid]
|
||||
|
||||
//datadoc (serve a stabilire in quale colonna andrà a sommarsi l'importo della riga corrente
|
||||
const TDate datadoc = riga.doc().get_date(DOC_DATADOC);
|
||||
const int mese = datadoc.month();
|
||||
const int column = mese * 2; //le colonne dei mesi sono gennaio=2,febbraio=4,marzo=6...
|
||||
//importo
|
||||
const real importo = riga.importo(true, false); //importo riga corrente
|
||||
real importone = get(column).as_real(); //importo totale della colonna mese corrispondente nel csv
|
||||
importone += importo; //aggiunge l'importo riga all'importone articolo del mese nel csv
|
||||
set(column, importone); //riscrive l'importone aggiornato nella sua colonna..
|
||||
//..(in formato stringa, cioè con la "," e non il "."
|
||||
//aggiorna l'importone del mese (ricordarsi che l'array parte da 0 quindi ci va -1 nell'indice)
|
||||
_tot[mese - 1] += importo;
|
||||
//aggiorna anche il totale annuale
|
||||
_tot[12] += importo;
|
||||
}
|
||||
|
||||
void TStatistiche_ANIVAL_csv_recordset::calcola_percentuali()
|
||||
{
|
||||
//%incidenza articolo sul mese = imp_articolo mese / imp tot mese
|
||||
for (bool ok = move_first(); ok; ok = move_next())
|
||||
{
|
||||
real totale_anno;
|
||||
for (int i = 2; i <= 24; i += 2)
|
||||
{
|
||||
const real imp_art_mese = get(i).as_real();
|
||||
//ricordando che l'array parte da 0
|
||||
const real perc = imp_art_mese * CENTO / _tot[i/2 - 1]; //calcola la % incidenza articolo sul totale per quel mese
|
||||
set(i + 1, perc);
|
||||
totale_anno += imp_art_mese;
|
||||
}
|
||||
set(26, totale_anno);
|
||||
const real perc_anno = totale_anno * CENTO / _tot[12]; //calcola la % incidenza articolo sul totale annuale
|
||||
set(27, perc_anno);
|
||||
}
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// APPLICAZIONE
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
class TStatistiche_ANIVAL : public TSkeleton_application
|
||||
{
|
||||
virtual bool check_autorization() const {return false;}
|
||||
virtual const char * extra_modules() const {return "ve";}
|
||||
|
||||
protected:
|
||||
void elabora(const TMask& mask) const;
|
||||
|
||||
public:
|
||||
virtual bool create();
|
||||
virtual void main_loop();
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
//metodo di base per la ricerca delle righe documento che soddisfano i parametri dell'utonto
|
||||
void TStatistiche_ANIVAL::elabora(const TMask& mask) const
|
||||
@ -204,7 +281,7 @@ void TStatistiche_ANIVAL::elabora(const TMask& mask) const
|
||||
if (righe_items > 0)
|
||||
{
|
||||
//E crea pure la progind..
|
||||
TProgind pi(righe_items, TR("Generazione file..."), true, true);
|
||||
TProgind pi(righe_items, TR("Generazione file statanival.xls"), true, true);
|
||||
|
||||
//creazione del csv recordset che verra' riempito dai record del recordset righe
|
||||
TStatistiche_ANIVAL_csv_recordset* csv = new TStatistiche_ANIVAL_csv_recordset;
|
||||
@ -217,23 +294,22 @@ void TStatistiche_ANIVAL::elabora(const TMask& mask) const
|
||||
const TDocumento& doc = righe.doc(righe.cursor()->curr());
|
||||
const int nriga = righe.get(RDOC_NRIGA).as_int();
|
||||
//scrive sul CSV i campi che servono al file di excel e al report
|
||||
scrivi_csv(doc[nriga], *csv);
|
||||
csv->aggiungi_riga(doc[nriga]);
|
||||
}
|
||||
|
||||
//sorting finale per codart
|
||||
csv->sort(compare_csv_rows_codart);
|
||||
//aggiorna le colonne delle percentuali
|
||||
csv->calcola_percentuali();
|
||||
|
||||
//se richiesto il file in formato excel...
|
||||
if (mask.get_bool(F_EXCEL))
|
||||
{
|
||||
//crea la riga con le intestazioni dei campi e la mette all'inizio
|
||||
csv->insert_rec(0);
|
||||
compila_intestazione(*csv);
|
||||
csv->compila_intestazione();
|
||||
//salva il file come richiesto
|
||||
TString path = mask.get(F_PATH);
|
||||
path.lower();
|
||||
path << "\\statanival.csv";
|
||||
csv->save_as(path);
|
||||
path << "\\statanival.xls";
|
||||
csv->save_as(path, fmt_silk);
|
||||
|
||||
//accoppa la riga con le intestazioni dei campi
|
||||
csv->destroy(0);
|
||||
|
220
ps/ps0099100a.rep
Executable file
220
ps/ps0099100a.rep
Executable file
@ -0,0 +1,220 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<report name="ps0099100a" orientation="2" lpi="6">
|
||||
<description>Statistiche ANIVAL</description>
|
||||
<font face="Arial Narrow" size="7" />
|
||||
<section type="Head">
|
||||
<font face="Arial Narrow" bold="1" size="8" />
|
||||
<field x="1" type="Testo" width="10" pattern="1" text="Articolo" />
|
||||
<field border="1" x="30.5" type="Linea" pattern="1" />
|
||||
<field x="31" type="Testo" align="center" width="11" pattern="1" text="Gennaio" />
|
||||
<field x="42" type="Testo" align="center" width="11" pattern="1" text="Febbraio" />
|
||||
<field x="53" type="Testo" align="center" width="11" pattern="1" text="Marzo" />
|
||||
<field x="64" type="Testo" align="center" width="11" pattern="1" text="Aprile" />
|
||||
<field x="75" type="Testo" align="center" width="11" pattern="1" text="Maggio" />
|
||||
<field x="86" type="Testo" align="center" width="11" pattern="1" text="Giugno" />
|
||||
<field x="97" type="Testo" align="center" width="11" pattern="1" text="Luglio" />
|
||||
<field x="108" type="Testo" align="center" width="11" pattern="1" text="Agosto" />
|
||||
<field x="119" type="Testo" align="center" width="11" pattern="1" text="Settembre" />
|
||||
<field x="130" type="Testo" align="center" width="11" pattern="1" text="Ottobre" />
|
||||
<field x="141" type="Testo" align="center" width="11" pattern="1" text="Novembre" />
|
||||
<field x="152" type="Testo" align="center" width="11" pattern="1" text="Dicembre" />
|
||||
<field border="1" x="164" type="Linea" pattern="1" />
|
||||
<field x="165" type="Testo" align="center" width="12" pattern="1" text="ANNUALE" />
|
||||
<field border="1" y="1" type="Linea" width="180" height="0" pattern="1" />
|
||||
</section>
|
||||
<section type="Head" level="1">
|
||||
<field border="2" radius="100" x="60" y="0.5" type="Rettangolo" width="60" height="3" pattern="1" />
|
||||
<field x="60" y="1" type="Testo" valign="center" align="center" width="60" height="2" pattern="1" text="INCIDENZA PER ARTICOLO">
|
||||
<font face="Arial" bold="1" size="14" />
|
||||
</field>
|
||||
</section>
|
||||
<section type="Body" />
|
||||
<section type="Body" level="1">
|
||||
<field type="Stringa" width="6" pattern="1">
|
||||
<source>A</source>
|
||||
</field>
|
||||
<field x="6" type="Stringa" width="24" pattern="1">
|
||||
<source>B</source>
|
||||
</field>
|
||||
<field border="1" x="30.5" type="Linea" pattern="1" />
|
||||
<field x="31" type="Valuta" align="right" width="7" pattern="1" text="#########,@@">
|
||||
<source>C</source>
|
||||
<postscript description="B1.0 POSTSCRIPT">MESSAGE ADD,F1.101</postscript>
|
||||
</field>
|
||||
<field x="38" type="Numero" align="right" width="4" pattern="1" text="##,@@">
|
||||
<source>D</source>
|
||||
<postscript description="B1.0 POSTSCRIPT">MESSAGE ADD,F1.102</postscript>
|
||||
</field>
|
||||
<field x="42" type="Valuta" align="right" width="7" pattern="1" text="#########,@@">
|
||||
<source>E</source>
|
||||
<postscript description="B1.0 POSTSCRIPT">MESSAGE ADD,F1.103</postscript>
|
||||
</field>
|
||||
<field x="49" type="Numero" align="right" width="4" pattern="1" text="##,@@">
|
||||
<source>F</source>
|
||||
<postscript description="B1.0 POSTSCRIPT">MESSAGE ADD,F1.104</postscript>
|
||||
</field>
|
||||
<field x="53" type="Valuta" align="right" width="7" pattern="1" text="#########,@@">
|
||||
<source>G</source>
|
||||
<postscript description="B1.0 POSTSCRIPT">MESSAGE ADD,F1.105</postscript>
|
||||
</field>
|
||||
<field x="60" type="Numero" align="right" width="4" pattern="1" text="##,@@">
|
||||
<source>H</source>
|
||||
<postscript description="B1.0 POSTSCRIPT">MESSAGE ADD,F1.106</postscript>
|
||||
</field>
|
||||
<field x="64" type="Valuta" align="right" width="7" pattern="1" text="#########,@@">
|
||||
<source>I</source>
|
||||
<postscript description="B1.0 POSTSCRIPT">MESSAGE ADD,F1.107</postscript>
|
||||
</field>
|
||||
<field x="71" type="Numero" align="right" width="4" pattern="1" text="##,@@">
|
||||
<source>J</source>
|
||||
<postscript description="B1.0 POSTSCRIPT">MESSAGE ADD,F1.108</postscript>
|
||||
</field>
|
||||
<field x="75" type="Valuta" align="right" width="7" pattern="1" text="#########,@@">
|
||||
<source>K</source>
|
||||
<postscript description="B1.0 POSTSCRIPT">MESSAGE ADD,F1.109</postscript>
|
||||
</field>
|
||||
<field x="82" type="Numero" align="right" width="4" pattern="1" text="##,@@">
|
||||
<source>L</source>
|
||||
<postscript description="B1.0 POSTSCRIPT">MESSAGE ADD,F1.110</postscript>
|
||||
</field>
|
||||
<field x="86" type="Valuta" align="right" width="7" pattern="1" text="#########,@@">
|
||||
<source>M</source>
|
||||
<postscript description="B1.0 POSTSCRIPT">MESSAGE ADD,F1.111</postscript>
|
||||
</field>
|
||||
<field x="93" type="Numero" align="right" width="4" pattern="1" text="##,@@">
|
||||
<source>N</source>
|
||||
<postscript description="B1.0 POSTSCRIPT">MESSAGE ADD,F1.112</postscript>
|
||||
</field>
|
||||
<field x="97" type="Valuta" align="right" width="7" pattern="1" text="#########,@@">
|
||||
<source>O</source>
|
||||
<postscript description="B1.0 POSTSCRIPT">MESSAGE ADD,F1.113</postscript>
|
||||
</field>
|
||||
<field x="104" type="Numero" align="right" width="4" pattern="1" text="##,@@">
|
||||
<source>P</source>
|
||||
<postscript description="B1.0 POSTSCRIPT">MESSAGE ADD,F1.114</postscript>
|
||||
</field>
|
||||
<field x="108" type="Valuta" align="right" width="7" pattern="1" text="#########,@@">
|
||||
<source>Q</source>
|
||||
<postscript description="B1.0 POSTSCRIPT">MESSAGE ADD,F1.115</postscript>
|
||||
</field>
|
||||
<field x="115" type="Numero" align="right" width="4" pattern="1" text="##,@@">
|
||||
<source>R</source>
|
||||
<postscript description="B1.0 POSTSCRIPT">MESSAGE ADD,F1.116</postscript>
|
||||
</field>
|
||||
<field x="119" type="Valuta" align="right" width="7" pattern="1" text="#########,@@">
|
||||
<source>S</source>
|
||||
<postscript description="B1.0 POSTSCRIPT">MESSAGE ADD,F1.117</postscript>
|
||||
</field>
|
||||
<field x="126" type="Numero" align="right" width="4" pattern="1" text="##,@@">
|
||||
<source>T</source>
|
||||
<postscript description="B1.0 POSTSCRIPT">MESSAGE ADD,F1.118</postscript>
|
||||
</field>
|
||||
<field x="130" type="Valuta" align="right" width="7" pattern="1" text="#########,@@">
|
||||
<source>U</source>
|
||||
<postscript description="B1.0 POSTSCRIPT">MESSAGE ADD,F1.119</postscript>
|
||||
</field>
|
||||
<field x="137" type="Numero" align="right" width="4" pattern="1" text="##,@@">
|
||||
<source>V</source>
|
||||
<postscript description="B1.0 POSTSCRIPT">MESSAGE ADD,F1.120</postscript>
|
||||
</field>
|
||||
<field x="141" type="Valuta" align="right" width="7" pattern="1" text="#########,@@">
|
||||
<source>W</source>
|
||||
<postscript description="B1.0 POSTSCRIPT">MESSAGE ADD,F1.121</postscript>
|
||||
</field>
|
||||
<field x="148" type="Numero" align="right" width="4" pattern="1" text="##,@@">
|
||||
<source>X</source>
|
||||
<postscript description="B1.0 POSTSCRIPT">MESSAGE ADD,F1.122</postscript>
|
||||
</field>
|
||||
<field x="152" type="Valuta" align="right" width="7" pattern="1" text="#########,@@">
|
||||
<source>Y</source>
|
||||
<postscript description="B1.0 POSTSCRIPT">MESSAGE ADD,F1.123</postscript>
|
||||
</field>
|
||||
<field x="159" type="Numero" align="right" width="4" pattern="1" text="##,@@">
|
||||
<source>Z</source>
|
||||
<postscript description="B1.0 POSTSCRIPT">MESSAGE ADD,F1.124</postscript>
|
||||
</field>
|
||||
<field border="1" x="164" type="Linea" pattern="1" />
|
||||
<field x="165" type="Valuta" align="right" width="8" pattern="1" text="#########,@@">
|
||||
<font italic="1" face="Arial Narrow" size="7" />
|
||||
<source>AA</source>
|
||||
<postscript description="B1.0 POSTSCRIPT">MESSAGE ADD,F1.125</postscript>
|
||||
</field>
|
||||
<field x="173.5" type="Numero" align="right" width="5" pattern="1" text="###,@@">
|
||||
<font italic="1" face="Arial Narrow" size="7" />
|
||||
<source>AB</source>
|
||||
<postscript description="B1.0 POSTSCRIPT">MESSAGE ADD,F1.126</postscript>
|
||||
</field>
|
||||
</section>
|
||||
<section type="Foot">
|
||||
<font face="Arial Narrow" bold="1" size="8" />
|
||||
<field border="1" type="Linea" width="180" height="0" pattern="1" />
|
||||
<field x="162" type="Testo" valign="center" width="5" pattern="1" text="Pag." />
|
||||
<field x="167" type="Numero" valign="center" align="right" width="3" pattern="1">
|
||||
<source>#REPORT.PAGE</source>
|
||||
</field>
|
||||
</section>
|
||||
<section type="Foot" level="1">
|
||||
<font face="Arial Narrow" bold="1" size="7" />
|
||||
<field border="1" type="Linea" width="180" height="0" pattern="1" />
|
||||
<field border="1" x="30.5" type="Linea" height="1.5" pattern="1" />
|
||||
<field border="1" x="164" type="Linea" height="1.5" pattern="1" />
|
||||
<field x="20" y="0.5" type="Testo" width="10" pattern="1" text="Totali">
|
||||
<font face="Arial" bold="1" size="8" />
|
||||
</field>
|
||||
<field x="31" y="0.5" type="Valuta" align="right" width="7" id="101" pattern="1" text="#########,@@" />
|
||||
<field x="38" y="0.5" type="Numero" align="right" width="4" id="102" pattern="1" text="###,@">
|
||||
<source>ROUND(#THIS,2)</source>
|
||||
</field>
|
||||
<field x="42" y="0.5" type="Valuta" align="right" width="7" id="103" pattern="1" text="#########,@@" />
|
||||
<field x="49" y="0.5" type="Numero" align="right" width="4" id="104" pattern="1" text="###,@">
|
||||
<source>ROUND(#THIS,2)</source>
|
||||
</field>
|
||||
<field x="53" y="0.5" type="Valuta" align="right" width="7" id="105" pattern="1" text="#########,@@" />
|
||||
<field x="60" y="0.5" type="Numero" align="right" width="4" id="106" pattern="1" text="###,@">
|
||||
<source>ROUND(#THIS,2)</source>
|
||||
</field>
|
||||
<field x="64" y="0.5" type="Valuta" align="right" width="7" id="107" pattern="1" text="#########,@@" />
|
||||
<field x="71" y="0.5" type="Numero" align="right" width="4" id="108" pattern="1" text="###,@">
|
||||
<source>ROUND(#THIS,2)</source>
|
||||
</field>
|
||||
<field x="75" y="0.5" type="Valuta" align="right" width="7" id="109" pattern="1" text="#########,@@" />
|
||||
<field x="82" y="0.5" type="Numero" align="right" width="4" id="110" pattern="1" text="###,@">
|
||||
<source>ROUND(#THIS,2)</source>
|
||||
</field>
|
||||
<field x="86" y="0.5" type="Valuta" align="right" width="7" id="111" pattern="1" text="#########,@@" />
|
||||
<field x="93" y="0.5" type="Numero" align="right" width="4" id="112" pattern="1" text="###,@">
|
||||
<source>ROUND(#THIS,2)</source>
|
||||
</field>
|
||||
<field x="97" y="0.5" type="Valuta" align="right" width="7" id="113" pattern="1" text="#########,@@" />
|
||||
<field x="104" y="0.5" type="Numero" align="right" width="4" id="114" pattern="1" text="###,@">
|
||||
<source>ROUND(#THIS,2)</source>
|
||||
</field>
|
||||
<field x="108" y="0.5" type="Valuta" align="right" width="7" id="115" pattern="1" text="#########,@@" />
|
||||
<field x="115" y="0.5" type="Numero" align="right" width="4" id="116" pattern="1" text="###,@">
|
||||
<source>ROUND(#THIS,2)</source>
|
||||
</field>
|
||||
<field x="119" y="0.5" type="Valuta" align="right" width="7" id="117" pattern="1" text="#########,@@" />
|
||||
<field x="126" y="0.5" type="Numero" align="right" width="4" id="118" pattern="1" text="###,@">
|
||||
<source>ROUND(#THIS,2)</source>
|
||||
</field>
|
||||
<field x="130" y="0.5" type="Valuta" align="right" width="7" id="119" pattern="1" text="#########,@@" />
|
||||
<field x="137" y="0.5" type="Numero" align="right" width="4" id="120" pattern="1" text="###,@">
|
||||
<source>ROUND(#THIS,2)</source>
|
||||
</field>
|
||||
<field x="141" y="0.5" type="Valuta" align="right" width="7" id="121" pattern="1" text="#########,@@" />
|
||||
<field x="148" y="0.5" type="Numero" align="right" width="4" id="122" pattern="1" text="###,@">
|
||||
<source>ROUND(#THIS,2)</source>
|
||||
</field>
|
||||
<field x="152" y="0.5" type="Valuta" align="right" width="7" id="123" pattern="1" text="#########,@@" />
|
||||
<field x="159" y="0.5" type="Numero" align="right" width="4" id="124" pattern="1" text="###,@">
|
||||
<source>ROUND(#THIS,2)</source>
|
||||
</field>
|
||||
<field x="173.64" y="0.5" type="Numero" align="right" width="5" id="124" pattern="1" text="###,@@">
|
||||
<font italic="1" face="Arial Narrow" bold="1" size="7" />
|
||||
<source>ROUND(#THIS,2)</source>
|
||||
</field>
|
||||
<field x="165" y="0.5" type="Valuta" align="right" width="8" id="125" pattern="1" text="#########,@@">
|
||||
<font italic="1" face="Arial Narrow" bold="1" size="7" />
|
||||
</field>
|
||||
</section>
|
||||
</report>
|
@ -114,7 +114,7 @@ END
|
||||
BOOLEAN F_EXCEL
|
||||
BEGIN
|
||||
PROMPT 2 10 "Genera file in formato Excel (statanival.xls)"
|
||||
MESSAGE FALSE DISABLE,F_PATH
|
||||
MESSAGE FALSE CLEAR,F_PATH
|
||||
MESSAGE TRUE ENABLE,F_PATH
|
||||
END
|
||||
|
||||
@ -123,6 +123,7 @@ BEGIN
|
||||
PROMPT 2 11 "Cartella dove salvare il file "
|
||||
DSELECT
|
||||
FLAGS "M"
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
Loading…
x
Reference in New Issue
Block a user