Praticamente finita la stampa dei totali EC
git-svn-id: svn://10.65.10.50/trunk@2305 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
c3911bba9e
commit
5b229e95f6
392
sc/pec.frm
Executable file
392
sc/pec.frm
Executable file
@ -0,0 +1,392 @@
|
|||||||
|
USE 20
|
||||||
|
JOIN 13 INTO COM=COMCF
|
||||||
|
|
||||||
|
END
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
BEGIN
|
||||||
|
20->* "Clienti/Fornitori"
|
||||||
|
13->* "Comuni"
|
||||||
|
END
|
||||||
|
|
||||||
|
GENERAL
|
||||||
|
BEGIN
|
||||||
|
OFFSET 0 0
|
||||||
|
FONT "Arial"
|
||||||
|
SIZE 12
|
||||||
|
END
|
||||||
|
|
||||||
|
SECTION GRAPHICS ODD
|
||||||
|
|
||||||
|
LINEA 1 172 1
|
||||||
|
BEGIN
|
||||||
|
PROMPT 1 10 "@B@R"
|
||||||
|
END
|
||||||
|
|
||||||
|
LINEA 2 172 1
|
||||||
|
BEGIN
|
||||||
|
PROMPT 1 12 "@B@R"
|
||||||
|
END
|
||||||
|
|
||||||
|
LINEA 3 172 1
|
||||||
|
BEGIN
|
||||||
|
PROMPT 1 58 "@B@R"
|
||||||
|
END
|
||||||
|
|
||||||
|
LINEA 10 1 57
|
||||||
|
BEGIN
|
||||||
|
PROMPT 1 10 "@B@R"
|
||||||
|
END
|
||||||
|
|
||||||
|
LINEA 11 1 57
|
||||||
|
BEGIN
|
||||||
|
PROMPT 24 10 "@R"
|
||||||
|
END
|
||||||
|
|
||||||
|
LINEA 12 1 57
|
||||||
|
BEGIN
|
||||||
|
PROMPT 36 10 "@R"
|
||||||
|
END
|
||||||
|
|
||||||
|
LINEA 13 1 57
|
||||||
|
BEGIN
|
||||||
|
PROMPT 56 10 "@R"
|
||||||
|
END
|
||||||
|
|
||||||
|
LINEA 14 1 57
|
||||||
|
BEGIN
|
||||||
|
PROMPT 76 10 "@R"
|
||||||
|
END
|
||||||
|
|
||||||
|
LINEA 15 1 57
|
||||||
|
BEGIN
|
||||||
|
PROMPT 96 10 "@R"
|
||||||
|
END
|
||||||
|
|
||||||
|
LINEA 16 1 57
|
||||||
|
BEGIN
|
||||||
|
PROMPT 116 10 "@B@R"
|
||||||
|
END
|
||||||
|
|
||||||
|
END
|
||||||
|
|
||||||
|
SECTION HEADER ODD 12
|
||||||
|
|
||||||
|
STRINGA 100
|
||||||
|
BEGIN
|
||||||
|
KEY "Flags generali VALUTA|FINCATURA"
|
||||||
|
PROMPT 0 0 "X|2"
|
||||||
|
FLAGS "DH"
|
||||||
|
END
|
||||||
|
|
||||||
|
STRINGA 1
|
||||||
|
BEGIN
|
||||||
|
KEY "Spettabile/Egregio"
|
||||||
|
PROMPT 2 1 "Spettabile"
|
||||||
|
END
|
||||||
|
|
||||||
|
NUMERO 218
|
||||||
|
BEGIN
|
||||||
|
KEY "Pagina"
|
||||||
|
PROMPT 70 1 "Pagina "
|
||||||
|
END
|
||||||
|
|
||||||
|
NUMERO 3
|
||||||
|
BEGIN
|
||||||
|
KEY "Codice cliente/fornitore"
|
||||||
|
PROMPT 2 2 ""
|
||||||
|
FIELD CODCF
|
||||||
|
END
|
||||||
|
|
||||||
|
STRINGA 4
|
||||||
|
BEGIN
|
||||||
|
KEY "Ragione sociale"
|
||||||
|
PROMPT 8 2 ""
|
||||||
|
FIELD RAGSOC
|
||||||
|
END
|
||||||
|
|
||||||
|
STRINGA 5
|
||||||
|
BEGIN
|
||||||
|
KEY "Indirizzo"
|
||||||
|
PROMPT 2 3 ""
|
||||||
|
FIELD INDCF
|
||||||
|
END
|
||||||
|
|
||||||
|
STRINGA 6
|
||||||
|
BEGIN
|
||||||
|
KEY "Numero civico"
|
||||||
|
PROMPT 52 3 ""
|
||||||
|
FIELD CIVCF
|
||||||
|
END
|
||||||
|
|
||||||
|
NUMERO 7
|
||||||
|
BEGIN
|
||||||
|
KEY "C.A.P."
|
||||||
|
PROMPT 2 4 "C.A.P. "
|
||||||
|
FIELD CAPCF
|
||||||
|
END
|
||||||
|
|
||||||
|
STRINGA 8
|
||||||
|
BEGIN
|
||||||
|
KEY "Localita'"
|
||||||
|
PROMPT 26 4 ""
|
||||||
|
FIELD LOCALITACF
|
||||||
|
END
|
||||||
|
|
||||||
|
STRINGA 9
|
||||||
|
BEGIN
|
||||||
|
KEY "Comune"
|
||||||
|
PROMPT 2 5 ""
|
||||||
|
FIELD 13->DENCOM
|
||||||
|
END
|
||||||
|
|
||||||
|
STRINGA 10
|
||||||
|
BEGIN
|
||||||
|
KEY "Provincia"
|
||||||
|
PROMPT 52 5 ""
|
||||||
|
FIELD 13->PROVCOM
|
||||||
|
END
|
||||||
|
|
||||||
|
STRINGA 11
|
||||||
|
BEGIN
|
||||||
|
KEY "Prefisso telefonico"
|
||||||
|
PROMPT 2 6 "Telefono "
|
||||||
|
FIELD PTEL
|
||||||
|
END
|
||||||
|
|
||||||
|
STRINGA 12
|
||||||
|
BEGIN
|
||||||
|
KEY "Telefono"
|
||||||
|
PROMPT 24 6 "/ "
|
||||||
|
FIELD TEL
|
||||||
|
END
|
||||||
|
|
||||||
|
STRINGA 101
|
||||||
|
BEGIN
|
||||||
|
KEY "Luogo d'invio"
|
||||||
|
PROMPT 2 7 ""
|
||||||
|
END
|
||||||
|
|
||||||
|
DATA 102
|
||||||
|
BEGIN
|
||||||
|
KEY "Data d'invio"
|
||||||
|
PROMPT 52 7 ""
|
||||||
|
FORMAT "1444-"
|
||||||
|
END
|
||||||
|
|
||||||
|
STRING 103
|
||||||
|
BEGIN
|
||||||
|
KEY "Testo fisso"
|
||||||
|
PROMPT 2 8 ""
|
||||||
|
END
|
||||||
|
|
||||||
|
END
|
||||||
|
|
||||||
|
SECTION BODY ODD 1
|
||||||
|
|
||||||
|
STRINGA 201
|
||||||
|
BEGIN
|
||||||
|
KEY "Cod."
|
||||||
|
PROMPT 2 1 ""
|
||||||
|
FLAGS "H"
|
||||||
|
END
|
||||||
|
|
||||||
|
STRINGA 202 22 1
|
||||||
|
BEGIN
|
||||||
|
KEY "Descrizione"
|
||||||
|
PROMPT 2 1 ""
|
||||||
|
END
|
||||||
|
|
||||||
|
DATA 205
|
||||||
|
BEGIN
|
||||||
|
KEY "Data doc."
|
||||||
|
PROMPT 24 1 ""
|
||||||
|
FLAGS "H"
|
||||||
|
END
|
||||||
|
|
||||||
|
STRINGA 206
|
||||||
|
BEGIN
|
||||||
|
KEY "Num.doc."
|
||||||
|
PROMPT 34 1 ""
|
||||||
|
FLAGS "H"
|
||||||
|
END
|
||||||
|
|
||||||
|
NUMERO 207
|
||||||
|
BEGIN
|
||||||
|
KEY "Prot."
|
||||||
|
PROMPT 44 1 ""
|
||||||
|
FLAGS "H"
|
||||||
|
END
|
||||||
|
|
||||||
|
NUMERO 208
|
||||||
|
BEGIN
|
||||||
|
KEY "Totale documento"
|
||||||
|
PROMPT 60 1 ""
|
||||||
|
FLAGS "H"
|
||||||
|
END
|
||||||
|
|
||||||
|
DATA 209
|
||||||
|
BEGIN
|
||||||
|
KEY "Data"
|
||||||
|
PROMPT 25 1 ""
|
||||||
|
END
|
||||||
|
|
||||||
|
NUMERO 210
|
||||||
|
BEGIN
|
||||||
|
KEY "Dare"
|
||||||
|
PROMPT 37 1 ""
|
||||||
|
PICTURE "###.###.###.###"
|
||||||
|
END
|
||||||
|
|
||||||
|
NUMERO 211
|
||||||
|
BEGIN
|
||||||
|
KEY "Avere"
|
||||||
|
PROMPT 57 1 ""
|
||||||
|
PICTURE "###.###.###.###"
|
||||||
|
END
|
||||||
|
|
||||||
|
NUMERO 212
|
||||||
|
BEGIN
|
||||||
|
KEY "Scaduto"
|
||||||
|
PROMPT 77 1 ""
|
||||||
|
PICTURE "###.###.###.###"
|
||||||
|
END
|
||||||
|
|
||||||
|
NUMERO 213
|
||||||
|
BEGIN
|
||||||
|
KEY "Esposto"
|
||||||
|
PROMPT 97 1 ""
|
||||||
|
PICTURE "###.###.###.###"
|
||||||
|
END
|
||||||
|
|
||||||
|
STRINGA 214
|
||||||
|
BEGIN
|
||||||
|
KEY ""
|
||||||
|
PROMPT 115 1 ""
|
||||||
|
END
|
||||||
|
|
||||||
|
NUMERO 215
|
||||||
|
BEGIN
|
||||||
|
KEY "Importi in lire"
|
||||||
|
PROMPT 117 1 ""
|
||||||
|
PICTURE "###.###.###.###"
|
||||||
|
END
|
||||||
|
|
||||||
|
NUMERO 216
|
||||||
|
BEGIN
|
||||||
|
KEY "Cambio"
|
||||||
|
PROMPT 2 1 ""
|
||||||
|
PICTURE "###.###.###.###"
|
||||||
|
FLAGS "H"
|
||||||
|
END
|
||||||
|
|
||||||
|
DATA 217
|
||||||
|
BEGIN
|
||||||
|
KEY "Data cam."
|
||||||
|
PROMPT 2 1 ""
|
||||||
|
FLAGS "H"
|
||||||
|
END
|
||||||
|
|
||||||
|
STRING 301
|
||||||
|
BEGIN
|
||||||
|
KEY "Descrizione saldo partita"
|
||||||
|
PROMPT 2 1 "*** Saldo partita"
|
||||||
|
FLAGS "DH"
|
||||||
|
END
|
||||||
|
|
||||||
|
STRING 302
|
||||||
|
BEGIN
|
||||||
|
KEY "Descrizione abbuoni"
|
||||||
|
PROMPT 2 1 "*** Abbuoni"
|
||||||
|
FLAGS "DH"
|
||||||
|
END
|
||||||
|
|
||||||
|
STRING 303
|
||||||
|
BEGIN
|
||||||
|
KEY "Descrizione differenza cambi"
|
||||||
|
PROMPT 2 1 "*** Differenza cambi"
|
||||||
|
FLAGS "DH"
|
||||||
|
END
|
||||||
|
|
||||||
|
STRING 304
|
||||||
|
BEGIN
|
||||||
|
KEY "Ritenute"
|
||||||
|
PROMPT 2 1 "*** Ritenute"
|
||||||
|
FLAGS "DH"
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
END // Fine body
|
||||||
|
|
||||||
|
SECTION FOOTER ODD 9
|
||||||
|
|
||||||
|
STRING 400
|
||||||
|
BEGIN
|
||||||
|
KEY "Descrizione riporto"
|
||||||
|
PROMPT 2 1 "*** Riporto"
|
||||||
|
FLAGS "DH"
|
||||||
|
END
|
||||||
|
|
||||||
|
STRING 401
|
||||||
|
BEGIN
|
||||||
|
KEY "Descrizione totale"
|
||||||
|
PROMPT 2 1 "Saldo <VALUTA> al <DATA>"
|
||||||
|
END
|
||||||
|
|
||||||
|
NUMERO 210
|
||||||
|
BEGIN
|
||||||
|
KEY "Dare"
|
||||||
|
PROMPT 37 1 ""
|
||||||
|
PICTURE "###.###.###.###"
|
||||||
|
END
|
||||||
|
|
||||||
|
NUMERO 211
|
||||||
|
BEGIN
|
||||||
|
KEY "Avere"
|
||||||
|
PROMPT 57 1 ""
|
||||||
|
PICTURE "###.###.###.###"
|
||||||
|
END
|
||||||
|
|
||||||
|
STRING 402
|
||||||
|
BEGIN
|
||||||
|
KEY "Descrizione totale scaduto"
|
||||||
|
PROMPT 2 2 "Totale scaduto al <DATA SCADUTO>"
|
||||||
|
END
|
||||||
|
|
||||||
|
NUMERO 212
|
||||||
|
BEGIN
|
||||||
|
KEY "Scaduto"
|
||||||
|
PROMPT 77 1 ""
|
||||||
|
PICTURE "###.###.###.###"
|
||||||
|
END
|
||||||
|
|
||||||
|
STRING 403
|
||||||
|
BEGIN
|
||||||
|
KEY "Descrizione totale esposto"
|
||||||
|
PROMPT 2 3 "Totale esposto"
|
||||||
|
END
|
||||||
|
|
||||||
|
NUMERO 213
|
||||||
|
BEGIN
|
||||||
|
KEY "Esposto"
|
||||||
|
PROMPT 97 1 ""
|
||||||
|
PICTURE "###.###.###.###"
|
||||||
|
END
|
||||||
|
|
||||||
|
STRING 404
|
||||||
|
BEGIN
|
||||||
|
KEY "Descrizione totale importi in lire"
|
||||||
|
PROMPT 2 4 "Importi in lire della valuta <DESCRIZIONE VALUTA>"
|
||||||
|
END
|
||||||
|
|
||||||
|
NUMERO 215
|
||||||
|
BEGIN
|
||||||
|
KEY "Importi in lire"
|
||||||
|
PROMPT 117 1 ""
|
||||||
|
PICTURE "###.###.###.###"
|
||||||
|
END
|
||||||
|
|
||||||
|
END // Fine footer
|
||||||
|
|
||||||
|
|
||||||
|
END // Fine Form
|
231
sc/sc2100.cpp
231
sc/sc2100.cpp
@ -38,14 +38,15 @@ class TEC_form : public TForm
|
|||||||
TDate _dlo, _dls, _dir; // Data limite operazione, scaduto e inizio rischio
|
TDate _dlo, _dls, _dir; // Data limite operazione, scaduto e inizio rischio
|
||||||
int _giorni_rischio; // Numero giorni rischio nella maschera di selezione
|
int _giorni_rischio; // Numero giorni rischio nella maschera di selezione
|
||||||
bool _in_valuta; // Il form e' in valuta
|
bool _in_valuta; // Il form e' in valuta
|
||||||
|
int _fincatura; // 0 = nessuna, 1 = testo, 2 = grafica
|
||||||
word _num_rip; // Numero di righe usate per i riporti
|
word _num_rip; // Numero di righe usate per i riporti
|
||||||
word _total_rows; // Numero di righe usate per i totali
|
word _total_rows; // Numero di righe usate per i totali
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void init_memo();
|
void init_header(const TMask& m);
|
||||||
word ordina_totali_per_valuta(THash_object* tot[MAXTOT]);
|
word ordina_totali_per_valuta(THash_object* tot[MAXTOT]);
|
||||||
void change_magic_names(const THash_object& o, TString& s);
|
void change_magic_names(const THash_object& o, TString& s);
|
||||||
void print_total(int riga, const THash_object& o, short id);
|
void print_total(int riga, const THash_object& o);
|
||||||
|
|
||||||
void stampa_testata(TPrinter& p);
|
void stampa_testata(TPrinter& p);
|
||||||
void stampa_pedata(TPrinter& p);
|
void stampa_pedata(TPrinter& p);
|
||||||
@ -112,7 +113,7 @@ public:
|
|||||||
int riga() const { return _riga; }
|
int riga() const { return _riga; }
|
||||||
int rata() const { return _rata; }
|
int rata() const { return _rata; }
|
||||||
|
|
||||||
void reset_causale() { _causale.cut(0); _descrizione.cut(0); }
|
void reset_uguali();
|
||||||
void descrizione(const char* s) { _descrizione = s; }
|
void descrizione(const char* s) { _descrizione = s; }
|
||||||
void importo(const TImporto& i) { _importo = i; }
|
void importo(const TImporto& i) { _importo = i; }
|
||||||
void importo_lire(const real& i) { _importo_lire = i; }
|
void importo_lire(const real& i) { _importo_lire = i; }
|
||||||
@ -173,23 +174,37 @@ int TEC_row::compare(const TSortable& s) const
|
|||||||
else
|
else
|
||||||
c = _data > r._data ? +1 : -1;
|
c = _data > r._data ? +1 : -1;
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Annulla i campi uguali alla riga precedente
|
||||||
|
void TEC_row::reset_uguali()
|
||||||
|
{
|
||||||
|
_num_doc = "";
|
||||||
|
_data_doc = botime;
|
||||||
|
_num_prot = 0;
|
||||||
|
_totale = ZERO;
|
||||||
|
}
|
||||||
|
|
||||||
void TEC_row::set_imp(TForm_item& fi, const real& imp, bool valuta) const
|
void TEC_row::set_imp(TForm_item& fi, const real& imp, bool valuta) const
|
||||||
{
|
{
|
||||||
TString old_picture;
|
TString old_picture(20);
|
||||||
if (valuta)
|
if (valuta)
|
||||||
{
|
{
|
||||||
old_picture = fi.picture();
|
old_picture = fi.picture();
|
||||||
|
|
||||||
TString new_picture(20);
|
TString new_picture(20);
|
||||||
new_picture = old_picture;
|
|
||||||
if (old_picture.find(',') > 0)
|
if (old_picture.empty())
|
||||||
new_picture << ".###";
|
{
|
||||||
|
new_picture = valuta ? ".3" : ".";
|
||||||
|
}
|
||||||
else
|
else
|
||||||
new_picture << ",###";
|
{
|
||||||
|
new_picture = old_picture;
|
||||||
|
if (old_picture.find(',') > 0)
|
||||||
|
new_picture << ".###";
|
||||||
|
else
|
||||||
|
new_picture << ",###";
|
||||||
|
}
|
||||||
fi.set_picture(new_picture);
|
fi.set_picture(new_picture);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -299,29 +314,29 @@ public:
|
|||||||
TImporto TEC_array::importo(const TPartita& game, const TRectype& pag, bool valuta) const
|
TImporto TEC_array::importo(const TPartita& game, const TRectype& pag, bool valuta) const
|
||||||
{
|
{
|
||||||
const int nriga = pag.get_int(PAGSCA_NRIGA);
|
const int nriga = pag.get_int(PAGSCA_NRIGA);
|
||||||
const TRiga_partite& fat = game.riga(nriga);
|
const TRiga_partite& fat = game.riga(nriga); // Riga di fattura
|
||||||
const bool fat_val = fat.in_valuta();
|
const bool fat_val = fat.in_valuta();
|
||||||
|
|
||||||
const int nrigp = pag.get_int(PAGSCA_NRIGP);
|
const int nrigp = pag.get_int(PAGSCA_NRIGP);
|
||||||
const TRiga_partite& sum = game.riga(nrigp);
|
const TRiga_partite& sum = game.riga(nrigp); // Riga di pagamento
|
||||||
const char sez = sum.sezione();
|
const char sez = sum.sezione();
|
||||||
|
|
||||||
const char* const field = valuta && fat_val ? PAGSCA_IMPORTOVAL : PAGSCA_IMPORTO;
|
const char* const field = valuta && fat_val ? PAGSCA_IMPORTOVAL : PAGSCA_IMPORTO;
|
||||||
TImporto imp(sez, pag.get_real(PAGSCA_IMPORTO));
|
TImporto imp(sez, pag.get_real(field)); // Importo base
|
||||||
|
|
||||||
if (!fat_val)
|
if (!fat_val)
|
||||||
imp.valore() += pag.get_real(PAGSCA_RITENUTE);
|
imp.valore() += pag.get_real(PAGSCA_RITENUTE); // Sommo le ritenute se sono il lire
|
||||||
|
|
||||||
if (pag.get_char(PAGSCA_ACCSAL) == 'S')
|
if (pag.get_char(PAGSCA_ACCSAL) == 'S') // Se il pagamento ha abbuoni o differenze cambio
|
||||||
{
|
{
|
||||||
real abb(pag.get(PAGSCA_ABBUONI));
|
real abb(pag.get(PAGSCA_ABBUONI));
|
||||||
if (!valuta && fat_val)
|
if (!valuta && fat_val) // Se voglio gli abbuoni in lire ma la fattura non lo e'
|
||||||
{
|
{
|
||||||
const TValuta val(sum);
|
const TValuta val(sum); // Leggo il cambio dalla riga di partita
|
||||||
val.val2lit(abb);
|
val.val2lit(abb); // Converto in lire gli abbuoni
|
||||||
abb += pag.get_real(PAGSCA_DIFFCAM);
|
abb += pag.get_real(PAGSCA_DIFFCAM); // Sommo l'eventuale differenza cambio (gia' in lire)
|
||||||
}
|
}
|
||||||
imp.valore() += abb;
|
imp.valore() += abb; // Sommo il tutto all'importo base (sez e' uguale per tutti i valori)
|
||||||
}
|
}
|
||||||
|
|
||||||
return imp;
|
return imp;
|
||||||
@ -490,24 +505,32 @@ void TEC_array::add_row(const TRiga_partite& row)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const TImporto diffcam(row.importo(in_valuta, 0x4));
|
TImporto diffcam(row.importo(FALSE, 0x4));
|
||||||
if (!diffcam.is_zero())
|
if (!diffcam.is_zero())
|
||||||
{
|
{
|
||||||
TEC_row& rec = new_row(row, data, diffcam, 3);
|
TEC_row& rec = new_row(row, data, TImporto('D', ZERO), 3);
|
||||||
rec.descrizione(form().describe(PEC_DIFFCAM));
|
rec.descrizione(form().describe(PEC_DIFFCAM));
|
||||||
if (in_valuta)
|
if (in_valuta)
|
||||||
{
|
{
|
||||||
TImporto il(row.importo(FALSE, 0x4));
|
diffcam.normalize(sezione);
|
||||||
il.normalize(sezione);
|
rec.importo_lire(diffcam.valore());
|
||||||
rec.importo_lire(il.valore());
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
rec.importo(diffcam);
|
||||||
}
|
}
|
||||||
|
|
||||||
const TImporto ritenute(row.importo(in_valuta, 0x8));
|
TImporto ritenute(row.importo(FALSE, 0x8));
|
||||||
if (!ritenute.is_zero())
|
if (!ritenute.is_zero())
|
||||||
{
|
{
|
||||||
TEC_row& r = new_row(row, data, ritenute, 4);
|
TEC_row& rec = new_row(row, data, TImporto('D', ZERO), 4);
|
||||||
r.descrizione(form().describe(PEC_RITENUTE));
|
rec.descrizione(form().describe(PEC_RITENUTE));
|
||||||
|
if (in_valuta)
|
||||||
|
{
|
||||||
|
ritenute.normalize(sezione);
|
||||||
|
rec.importo_lire(ritenute.valore());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
rec.importo(ritenute);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -577,8 +600,8 @@ static int tot_compare(const void* o1, const void* o2)
|
|||||||
if (o1 == o2) // Sfrutto una piccola debolezza di qsort:
|
if (o1 == o2) // Sfrutto una piccola debolezza di qsort:
|
||||||
return 0; // ogni tanto confronta oggetti con se stessi
|
return 0; // ogni tanto confronta oggetti con se stessi
|
||||||
|
|
||||||
const THash_object* h1 = (const THash_object*)o1;
|
const THash_object* h1 = *((const THash_object**)o1);
|
||||||
const THash_object* h2 = (const THash_object*)o2;
|
const THash_object* h2 = *((const THash_object**)o2);
|
||||||
return stricmp(h1->key(), h2->key());
|
return stricmp(h1->key(), h2->key());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -601,13 +624,12 @@ void TEC_form::stampa_riporti(TPrinter& pr)
|
|||||||
{
|
{
|
||||||
THash_object* tot[MAXTOT];
|
THash_object* tot[MAXTOT];
|
||||||
_num_rip = ordina_totali_per_valuta(tot);
|
_num_rip = ordina_totali_per_valuta(tot);
|
||||||
|
|
||||||
const word maxtot = section('F').height();
|
const word maxtot = section('F').height() - 1; // La prima riga e' riservata alla fincatura
|
||||||
if (_num_rip > maxtot)
|
if (_num_rip > maxtot)
|
||||||
_num_rip = maxtot;
|
_num_rip = maxtot;
|
||||||
|
|
||||||
const TString& riporto = describe(PEC_RIPORTO, 'F');
|
const TString& riporto = describe(PEC_RIPORTO, 'F');
|
||||||
|
|
||||||
TString desc(80);
|
TString desc(80);
|
||||||
TPrint_section& body = section('B');
|
TPrint_section& body = section('B');
|
||||||
for (word j = 0; j < _num_rip; j++)
|
for (word j = 0; j < _num_rip; j++)
|
||||||
@ -623,7 +645,7 @@ void TEC_form::stampa_riporti(TPrinter& pr)
|
|||||||
rip.esposto(t.esposto());
|
rip.esposto(t.esposto());
|
||||||
rip.importo_lire(t.importo_lire());
|
rip.importo_lire(t.importo_lire());
|
||||||
rip.print_on(body);
|
rip.print_on(body);
|
||||||
pr.setfooterline(j, body.row(0));
|
pr.setfooterline(j+1, body.row(0));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -664,44 +686,83 @@ void TEC_form::change_magic_names(const THash_object& o, TString& s)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void TEC_form::print_total(int riga, const THash_object& o, short id)
|
void TEC_form::print_total(int riga, const THash_object& o)
|
||||||
{
|
{
|
||||||
TForm_item& desc_field = find_field('F', odd_page, id);
|
const short MAXID = 4;
|
||||||
if (desc_field.shown())
|
const short f_id[MAXID] = { PEC_TSALDO, PEC_TSCADUTO, PEC_TESPOSTO, PEC_TIMPLIRE };
|
||||||
{
|
TString_array prompt(MAXID);
|
||||||
const int old_width = desc_field.width();
|
|
||||||
desc_field.set_width(80); // Allunga campo descrizione
|
TPrint_section& foot = section('F');
|
||||||
|
|
||||||
TString s(80); s = desc_field.prompt();
|
// Sostituisce magic-names nei prompt
|
||||||
change_magic_names(o, s);
|
TString s(80);
|
||||||
|
for (int i = 0; i < MAXID; i++)
|
||||||
const TTotal& t = (const TTotal&)o.obj();
|
{
|
||||||
TEC_row row(s, t.importo());
|
TForm_item& desc_field = foot.find_field(f_id[i]);
|
||||||
|
if (desc_field.shown())
|
||||||
TPrint_section& body = section('B');
|
{
|
||||||
row.print_on(body);
|
s = desc_field.prompt();
|
||||||
desc_field.set_width(old_width); // Ripristina lunghezza originaria
|
prompt.add(s, i);
|
||||||
|
change_magic_names(o, s);
|
||||||
printer().setfooterline(riga + desc_field.y() -1, body.row(0));
|
desc_field.set_prompt(s);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const TTotal& t = (const TTotal&)o.obj();
|
||||||
|
const TImporto& imp = t.importo();
|
||||||
|
TForm_item& dare = foot.find_field(PEC_DARE);
|
||||||
|
TForm_item& avere = foot.find_field(PEC_AVERE);
|
||||||
|
if (imp.sezione() == 'D')
|
||||||
|
{
|
||||||
|
dare.set(imp.valore().string());
|
||||||
|
avere.set("");
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dare.set("");
|
||||||
|
avere.set(imp.valore().string());
|
||||||
|
}
|
||||||
|
|
||||||
|
TForm_item& scaduto = foot.find_field(PEC_SCADUTO);
|
||||||
|
scaduto.set(t.scaduto().string());
|
||||||
|
|
||||||
|
TForm_item& esposto = foot.find_field(PEC_ESPOSTO);
|
||||||
|
scaduto.set(t.esposto().string());
|
||||||
|
|
||||||
|
TForm_item& implire = foot.find_field(PEC_IMPLIRE);
|
||||||
|
implire.set(t.importo_lire().string());
|
||||||
|
|
||||||
|
foot.update();
|
||||||
|
|
||||||
|
// Ripristina prompt originari
|
||||||
|
for (i = 0; i < MAXID; i++)
|
||||||
|
{
|
||||||
|
const TString* p = (const TString*)prompt.objptr(i);
|
||||||
|
if (p)
|
||||||
|
{
|
||||||
|
TForm_item& desc_field = foot.find_field(f_id[i]);
|
||||||
|
desc_field.set_prompt(*p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (word r = 0; r < _total_rows; r++)
|
||||||
|
printer().setfooterline(riga + r, foot.row(r));
|
||||||
}
|
}
|
||||||
|
|
||||||
void TEC_form::stampa_pedata(TPrinter& pr)
|
void TEC_form::stampa_pedata(TPrinter& pr)
|
||||||
{
|
{
|
||||||
THash_object* tot[MAXTOT];
|
THash_object* tot[MAXTOT];
|
||||||
word num_rip = ordina_totali_per_valuta(tot);
|
word num_rip = ordina_totali_per_valuta(tot);
|
||||||
|
|
||||||
const word maxtot = section('F').height() / _total_rows;
|
// La prima riga del footer deve essere lasciata libera per la fincatura
|
||||||
|
// Ogni sottosezione di totale occupa _total_rows righe: per cui devo calcolare
|
||||||
|
// quanti totali ci stanno nelle righe riservate al footer
|
||||||
|
const word maxtot = (section('F').height()-1) / _total_rows;
|
||||||
if (num_rip > maxtot)
|
if (num_rip > maxtot)
|
||||||
num_rip = maxtot;
|
num_rip = maxtot;
|
||||||
|
|
||||||
TString desc(80);
|
|
||||||
TPrint_section& body = section('B');
|
|
||||||
|
|
||||||
for (word j = 0; j < num_rip; j++)
|
for (word j = 0; j < num_rip; j++)
|
||||||
{
|
print_total(j*_total_rows+1, *tot[j]);
|
||||||
print_total(j * _total_rows, *tot[j], PEC_TSALDO);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TEC_form::ultima_pagina()
|
void TEC_form::ultima_pagina()
|
||||||
@ -771,7 +832,7 @@ bool TEC_form::print_game(const TPartita& game)
|
|||||||
const int ri = riga.riga();
|
const int ri = riga.riga();
|
||||||
const int ra = riga.rata();
|
const int ra = riga.rata();
|
||||||
if (ri == ultima_riga && ra == ultima_rata+1)
|
if (ri == ultima_riga && ra == ultima_rata+1)
|
||||||
riga.reset_causale();
|
riga.reset_uguali();
|
||||||
ultima_riga = ri;
|
ultima_riga = ri;
|
||||||
ultima_rata = ra;
|
ultima_rata = ra;
|
||||||
|
|
||||||
@ -812,9 +873,17 @@ const TString& TEC_form::describe(short id, char sez, pagetype pt) const
|
|||||||
return fi.prompt();
|
return fi.prompt();
|
||||||
}
|
}
|
||||||
|
|
||||||
void TEC_form::init_memo()
|
void TEC_form::init_header(const TMask& m)
|
||||||
{
|
{
|
||||||
TForm_item& fi = find_field('H', odd_page, PEC_MEMO);
|
TPrint_section& head = section('H');
|
||||||
|
|
||||||
|
TForm_item& luogo_invio = head.find_field(PEC_LUOGOIN);
|
||||||
|
luogo_invio.set(m.get(F_LUOGOSEND));
|
||||||
|
|
||||||
|
TForm_item& data_invio = head.find_field(PEC_DATAIN);
|
||||||
|
data_invio.set(m.get(F_DATASEND));
|
||||||
|
|
||||||
|
TForm_item& fi = head.find_field(PEC_MEMO);
|
||||||
if (fi.shown())
|
if (fi.shown())
|
||||||
{
|
{
|
||||||
TLocalisamfile f(LF_RFORM);
|
TLocalisamfile f(LF_RFORM);
|
||||||
@ -826,6 +895,12 @@ void TEC_form::init_memo()
|
|||||||
if (err == NOERR)
|
if (err == NOERR)
|
||||||
fi.set(f.get("TESTO"));
|
fi.set(f.get("TESTO"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (_fincatura)
|
||||||
|
{
|
||||||
|
TPrint_section& fink = section('G');
|
||||||
|
if (fink.fields() > 0) fink.update(); // Setta il backgroud di stampa
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TEC_form::TEC_form(const TEC_mask& m, bool gesval)
|
TEC_form::TEC_form(const TEC_mask& m, bool gesval)
|
||||||
@ -836,14 +911,10 @@ TEC_form::TEC_form(const TEC_mask& m, bool gesval)
|
|||||||
{
|
{
|
||||||
_form = this;
|
_form = this;
|
||||||
|
|
||||||
TForm_item& imp_lire = find_field('B', odd_page, PEC_IMPLIRE);
|
|
||||||
_in_valuta = gesval && imp_lire.shown(); // Il profilo e' in valuta se c'e' la colonna importo in lire
|
|
||||||
|
|
||||||
_lingua = m.get_prof_lang(); // Lingua profilo
|
|
||||||
|
|
||||||
TCursor_sheet& cs = m.cur_sheet();
|
TCursor_sheet& cs = m.cur_sheet();
|
||||||
_cursore = cs.cursor();
|
_cursore = cs.cursor();
|
||||||
|
|
||||||
|
_lingua = m.get_prof_lang(); // Lingua profilo
|
||||||
_dlo = m.get(F_DATALIMOP);
|
_dlo = m.get(F_DATALIMOP);
|
||||||
_dls = m.get(F_DATALIMSC);
|
_dls = m.get(F_DATALIMSC);
|
||||||
_giorni_rischio = m.get_int(F_GIORISCH);
|
_giorni_rischio = m.get_int(F_GIORISCH);
|
||||||
@ -854,14 +925,12 @@ TEC_form::TEC_form(const TEC_mask& m, bool gesval)
|
|||||||
pr.setheaderhandler(ec_header_handler);
|
pr.setheaderhandler(ec_header_handler);
|
||||||
TPrint_section& head = section('H');
|
TPrint_section& head = section('H');
|
||||||
pr.headerlen(head.height());
|
pr.headerlen(head.height());
|
||||||
|
|
||||||
TForm_item& luogo_invio = head.find_field(PEC_LUOGOIN);
|
TForm_item& flags = head.find_field(PEC_FLAGS);
|
||||||
luogo_invio.set(m.get(F_LUOGOSEND));
|
TToken_string f(flags.prompt());
|
||||||
|
_in_valuta = gesval && f.get_char(0) == 'X'; // Il profilo e' in valuta se c'e' il flag di valuta
|
||||||
TForm_item& data_invio = head.find_field(PEC_DATAIN);
|
_fincatura = f.get_int(1);
|
||||||
data_invio.set(m.get(F_DATASEND));
|
init_header(m); // Set fixed text
|
||||||
|
|
||||||
init_memo(); // Set fixed memo text
|
|
||||||
|
|
||||||
pr.setfooterhandler(ec_footer_handler);
|
pr.setfooterhandler(ec_footer_handler);
|
||||||
const TPrint_section& foot = section('F');
|
const TPrint_section& foot = section('F');
|
||||||
@ -959,8 +1028,10 @@ bool TStampaEC_application::print_selected()
|
|||||||
one_printed = TRUE;
|
one_printed = TRUE;
|
||||||
else
|
else
|
||||||
analfabeti++;
|
analfabeti++;
|
||||||
}
|
}
|
||||||
printer().formfeed();
|
|
||||||
|
if (one_printed)
|
||||||
|
printer().formfeed();
|
||||||
printer().close();
|
printer().close();
|
||||||
|
|
||||||
if (analfabeti > 0)
|
if (analfabeti > 0)
|
||||||
|
@ -52,7 +52,6 @@ BEGIN
|
|||||||
DISPLAY "Descrizione@50" S0
|
DISPLAY "Descrizione@50" S0
|
||||||
OUTPUT F_LINPROF CODTAB
|
OUTPUT F_LINPROF CODTAB
|
||||||
CHECKTYPE NORMAL
|
CHECKTYPE NORMAL
|
||||||
VALIDATE CHECK_FIELD F_CODPROF
|
|
||||||
WARNING "Codice profilo o lingua errato"
|
WARNING "Codice profilo o lingua errato"
|
||||||
END
|
END
|
||||||
|
|
||||||
|
@ -34,6 +34,6 @@
|
|||||||
#define PEC_TSALDO 401
|
#define PEC_TSALDO 401
|
||||||
#define PEC_TSCADUTO 402
|
#define PEC_TSCADUTO 402
|
||||||
#define PEC_TESPOSTO 403
|
#define PEC_TESPOSTO 403
|
||||||
#define PEC_TLIRE 404
|
#define PEC_TIMPLIRE 404
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -94,6 +94,9 @@ void TSelection_mask::select_clifo_range(long from, long to)
|
|||||||
const int key = get_key();
|
const int key = get_key();
|
||||||
TString s_from(50), s_to(50);
|
TString s_from(50), s_to(50);
|
||||||
|
|
||||||
|
if (to == 0 && items)
|
||||||
|
to = c.row(items-1).get_long(key);
|
||||||
|
|
||||||
if (from > to) // Controlla limiti
|
if (from > to) // Controlla limiti
|
||||||
{
|
{
|
||||||
long tmp = to;
|
long tmp = to;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user