Patch level :10.0 276

Files correlati     :ca3
Ricompilazione Demo : [ ]
Commento            :
Terminato il programma di esportazione in excel del rendiconto. Da riportare sulla 5 e TESTARE!!!!


git-svn-id: svn://10.65.10.50/trunk@18655 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca 2009-04-02 11:04:26 +00:00
parent 4001b7e63f
commit c23d8c8a2d
3 changed files with 69 additions and 22 deletions

View File

@ -9,6 +9,7 @@
#include "../cg/cglib01.h"
#include "../ve/velib04.h"
#include "cdc.h"
#include "commesse.h"
#include "panapdc.h"
#include "pconana.h"
@ -1590,7 +1591,7 @@ protected:
void print_or_preview(bool pr);
virtual void print() { print_or_preview(true); }
virtual void preview() { print_or_preview(false); }
void esporta_csv(TMask& mask, TRecordset& rendy, const TString& codcms, const TString& cdc, const TString& codfase);
void esporta_csv(TRecordset& rendy, const int r);
void incrementa(TToken_string& riga, const int col, const real& valore) const;
public:
@ -1612,16 +1613,31 @@ void TPrint_rendiconto_ca::incrementa(TToken_string& riga, const int col, const
}
//metodo di alto livello per l'esportazione dei dati di totale in un file per excel
void TPrint_rendiconto_ca::esporta_csv(TMask& mask, TRecordset& rendy,
const TString& codcms, const TString& cdc, const TString& codfase)
void TPrint_rendiconto_ca::esporta_csv(TRecordset& rendy, const int r)
{
TMask& mask = *_msk;
TSheet_field& sheet = mask.sfield(F_RIGHE);
TString codcms; ca_extract_sheet_field(sheet, r, LF_COMMESSE, codcms);
TString cdc; ca_extract_sheet_field(sheet, r, LF_CDC, cdc);
TString codfase; ca_extract_sheet_field(sheet, r, LF_FASI, codfase);
//crea una token string su cui mettere i valori dei record letti dal file .dbf
TToken_string riga(512, '\t');
riga.add(codcms);
riga.add(cache().get(LF_COMMESSE, codcms, COMMESSE_DESCRIZ));
riga.add(cdc);
riga.add(codfase);
if (get_first_level().logic() == LF_COMMESSE)
{
riga.add(codcms);
riga.add(cache().get(LF_COMMESSE, codcms, COMMESSE_DESCRIZ));
riga.add(cdc);
riga.add(codfase);
}
else
{
riga.add(cdc);
riga.add(cache().get(LF_CDC, cdc, CDC_DESCRIZ));
riga.add(codcms);
riga.add(codfase);
}
//recordset sul file .dbf, da scandire tutto uno per volta
for (bool ok = rendy.move_first(); ok; ok = rendy.move_next())
@ -1808,13 +1824,8 @@ void TPrint_rendiconto_ca::main_loop()
//se stampa o anteprima..
if (key == K_ENTER)
book.add(rep);
else
{
const TString codcms = row.get(0);
const TString cdc = row.get();
const TString codfase = row.get();
esporta_csv(mask, *rep.recordset(), codcms, cdc, codfase);
}
else //esportazione in excel
esporta_csv(*rep.recordset(), 0);
}
sheet.destroy(); //cancella le commesse aggiunte in automatico sullo sheet
}
@ -1827,13 +1838,8 @@ void TPrint_rendiconto_ca::main_loop()
//se stampa o anteprima
if (key == K_ENTER)
book.add(rep); //aggiunge il report relativo alla cdc/cms corrente al book
else
{
const TString codcms = row->get(0);
const TString cdc = row->get();
const TString codfase = row->get();
esporta_csv(mask, *rep.recordset(), codcms, cdc, codfase);
}
else //esportazione in excel
esporta_csv(*rep.recordset(), r);
}
}
//se stampa o anteprima
@ -1842,7 +1848,7 @@ void TPrint_rendiconto_ca::main_loop()
if (mask.print_mode() == 'A')
book.preview();
else
book.print(); //stampa il book dei report
book.print();
}
} //while(true)...

View File

@ -1979,3 +1979,39 @@ bool ca_implode_rows(const TRecord_array& input_rows, TRecord_array& compact_row
return implosion_done;
}
///////////////////////////////////////////////////////////////////////////////////////
//metodi per ricavare informazioni sulla configurazione (usati per ora nel rendiconto)
///////////////////////////////////////////////////////////////////////////////////////
//metodo per ricavare la stringa dei codici dai campi dello sheet
bool ca_extract_sheet_field(const TSheet_field& sheet, const int row, const int logicnum, TString& codice)
{
TMask& mask_sheet = sheet.sheet_mask(); //maschera di riga
codice.cut(0);
FOR_EACH_MASK_FIELD(mask_sheet, i, f) //giro sui campi della maschera di riga
{
const TFieldref* fr = f->field(); //campo corrente della maschera
if (fr != NULL && f->is_edit()) //deve essere un campo di tipo edit
{
TEdit_field& e = *(TEdit_field*)f; //visto che è di tipo edit può creare l'edit_field per farne la browse
if (e.browse() != NULL)
{
const TCursor& cur = *e.browse()->cursor();
const int ln = cur.file().num(); //Allah! dal campo ricava il cursore sul file di numero ln
if (ln == logicnum && cur.key() == 1 && !e.empty())
{
const TString& parte_codice = e.get();
codice << parte_codice;
}
else
{
if (codice.full())
break;
}
}
}
}
return codice.full();
}

View File

@ -220,4 +220,9 @@ bool ca_can_merge_rows(const TRectype& compact_rec, const TRectype& rec);
void ca_taglia_campo(TRectype& src, const char* campo_src, TRectype& dst, const char* campo_dst);
void ca_copia_campo(const TRectype& src, const char* campo_src, TRectype& dst, const char* campo_dst);
//metodi per ricavare informazioni sulla configurazione (usati per ora nel rendiconto)
//metodo per ricavare la stringa dei codici dai campi dello sheet
bool ca_extract_sheet_field(const TSheet_field& sheet, const int row, const int logicnum, TString& codice);
#endif