Patch level : 12.0 336

Files correlati     : sc2.exe pec.frm sc2200a.msk sc2300a.msk

MODIFICA CRPA 

Possibilità di stampare il pagamento del cliente nella testata dell'estratti conto.
Aggiunto filtro per ulteriore classificazione nello scadenziario.
Possibilità di stampare le note delle scadenze nella stampa scaduto.
Possibiltà di stampare il flag di rata bloccata e il dati di analitica e di filtrare per dati analitica nei solleciti.

git-svn-id: svn://10.65.10.50/branches/R_10_00@23573 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
bonazzi 2017-01-31 08:22:52 +00:00
parent 4ddf3a4f62
commit 2a32c54e5d
15 changed files with 1110 additions and 701 deletions

View File

@ -26,7 +26,7 @@ SECTION GRAPHICS ODD 0
END
END
SECTION HEADER ODD 12
SECTION HEADER ODD 14
STRINGA 1
BEGIN
@ -179,6 +179,12 @@ SECTION HEADER ODD 12
KEY "Dati Agente"
PROMPT 2 8 "@bAgente "
END
STRINGA 106 50
BEGIN
KEY "Dati Pagamento"
PROMPT 2 10 "@bPagamento "
END
END
SECTION HEADER LAST 1

View File

@ -133,6 +133,8 @@ public:
bool exporting() const { return _recordset != NULL; }
void export_total();
void set_pagam(const TString& codpag);
TEC_recordset& recordset() const { CHECK(exporting(), "Not exporting"); return *_recordset; }
TEC_form(const TEC_mask& m, bool gesval, bool excel);
@ -1364,6 +1366,29 @@ void TEC_form::init_header(const TMask& m)
fink.update(); // Setta il backgroud di stampa
}
void TEC_form::set_pagam(const TString& codpag)
{
const bool good = codpag.full();
TPrint_section& head = section('H');
TForm_item& pagam = head.find_field(PEC_PAGAM);
if (pagam.shown()|| pagam.enabled())
{
TString pag;
pag << codpag << ' ' << cache().get("%CPG", codpag, "S0");
if (printing())
pagam.set(pag);
else
{
_recordset->new_rec();
_recordset->set("Descrizione", pag);
_recordset->new_rec();
}
}
}
void TEC_form::set_agente(const TString& codag)
{
const bool good = codag.full();
@ -1827,10 +1852,12 @@ bool TStampaEC_application::print_agents()
for (cur = 0L; cur.pos() < items; ++cur)
{
const TString& codag = cur.curr().get(AGE_CODAGE);
TEC_Game_list* games = (TEC_Game_list*)agents.objptr(codag);
if (games != NULL)
TEC_Game_list* games = (TEC_Game_list*)agents.objptr(codag);
if (games != NULL)
{
form().set_agente(codag);
form().set_pagam(fc.curr().get(CLI_CODPAG));
const long items = c.items();
for (long i = 0; i < items; i++)
{
@ -1995,6 +2022,11 @@ int TStampaEC_application::print_ec(TEC_Game_list* games)
if (!ok) // Cliente analfabeta
return -1;
}
TToken_string key(clf.get(CLI_TIPOCF));
key.add(clf.get(CLI_CODCF));
form().set_agente(cache().get(LF_CFVEN, key, CFV_CODAG));
form().set_pagam(clf.get(CLI_CODPAG));
f.azzera_totali(); // Azzera totali di fine pagina

View File

@ -7,6 +7,7 @@
#define PEC_MEMO 103
#define PEC_NUMPROG 104
#define PEC_AGENTE 105
#define PEC_PAGAM 106
#define PEC_CODCAUS 201
#define PEC_DESCR 202
@ -45,6 +46,9 @@
#define PEC_TIMPEURO 404
#define PEC_TUNASSIGNED 405
#define PEC_ANAL0 450
#define PEC_DESANAL0 475
#define PEC_PICTURE 500
#define RIGA_PAGAMENTO 10001

View File

@ -1,4 +1,5 @@
#include <printapp.h>
#include <utility.h>
#include "../cg/cgsaldac.h"
#include "sc2.h"
@ -72,6 +73,7 @@ class TStampaScadenzario : public TPrintapp
int _striepilogo; // 0 = non stampa 1 = stampa il riepilogo giornaliero per pagamento 2 = stampa il riepilogo mensile per pagamento
TString8 _codag; // codice agente selezionato
int _tipopag; // tipo pagamento selezionato
TString4 _ultclass; // ulteriore classificazione pagamento selezionata
TRecnotype _last_bank_rec; // ultimo record con banca stampato
real _w_imp_pag, _w_imp_res; // Qui dentro memorizza i valori calcolati in calcola_pagamenti,
// rispettivamente l'importo pagato e l'importo residuo, relativo alla rata.
@ -246,20 +248,27 @@ bool TStampaScadenzario::filter_func(const TRelation *r)
}
}
}
if (app()._codag.full())
const TRectype& rec = r->curr();
if (app()._codag.full())
{
const TRectype& rec = r->curr();
const TString& codag = rec.get(SCAD_CODAG);
if (app()._codag != codag)
return false;
}
if (app()._tipopag != 0)
{
const TRectype& rec = r->curr();
const int tipopag = rec.get_int(SCAD_TIPOPAG);
const int tipopag = rec.get_int(SCAD_TIPOPAG);
if (app()._tipopag != tipopag)
return false;
}
if (app()._ultclass.full())
{
const TString4 ultclass = rec.get(SCAD_ULTCLASS);
if (app()._ultclass != ultclass)
return false;
}
return true;
}
@ -973,6 +982,7 @@ bool TStampaScadenzario::set_print(int)
_group_ban = _m->get_bool(F_SORTBAN); // Raggruppamento per banca di presentazione
_codag = _m->get(F_CODAG); // codice agente selezionato
_tipopag = _m->get_int(F_TIPOPAG); // tipo pagamento selezionato
_ultclass = _m->get(F_ULTCLASS); // ulteriore classificazione pagamento selezionata
_notot = _m->get_bool(F_NOTOT); // non stampare i totali intermedi
_cur_data = botime;
_tm.destroy(); _tp.destroy(); // Totali per i prospetti
@ -1225,8 +1235,10 @@ void TStampaScadenzario::print_header()
{
TList_field& fld_tipopag = (TList_field&) _m->field(F_TIPOPAG);
TToken_string pagam(fld_tipopag.get_values());
set_header (soh++,FR("@bTipo pagamento: %d %s@r"),_tipopag, (const char*)pagam.get(_tipopag));
set_header (soh++,FR("@bTipo pagamento: %d %s@r"), _tipopag, (const char*)pagam.get(_tipopag));
}
if (_ultclass.full())
set_header (soh++,FR("@bUlt.classific.: %s %s@r"), (const char*)_ultclass, (const char*)cache().get("%CLR" , format("%d%s", _tipopag, (const char *)_ultclass), "S0"));
set_header(soh++, (const char *) rw);
set_header(soh++,FR("@28gRif.@38gData@47gData@56gDescrizione@77gCod.@91g%s"),(const char*)s1);
@ -1253,6 +1265,8 @@ void TStampaScadenzario::print_header()
TToken_string pagam(fld_tipopag.get_values());
set_header (soh++,FR("@bTipo pagamento: %d %s@r"),_tipopag, (const char*)pagam.get(_tipopag));
}
if (_ultclass.full())
set_header (soh++,FR("@bUlt.classific.: %d %s@r"),_tipopag, (const char*)cache().get("%CLR" , format("%d%s", _tipopag, (const char *)_ultclass), "S0"));
rw.fill('_');
set_header(soh++, (const char *) rw);

View File

@ -23,3 +23,4 @@
#define F_SELDATAFAT 121
#define F_DATAFATTI 122
#define F_DATAFATTF 123
#define F_ULTCLASS 124

View File

@ -354,8 +354,20 @@ BEGIN
ITEM "9|Bonifico"
END
STRING F_ULTCLASS 1
BEGIN
PROMPT 2 21 "Ult.classific. "
FLAGS "U"
USE %CLR
INPUT CODTAB[1,1] F_TIPOPAG SELECT
INPUT CODTAB[2,2] F_ULTCLASS
DISPLAY "Tipo pag." CODTAB[1,1]
DISPLAY "Class." CODTAB[2,2]
DISPLAY "Descrizione@50" S0
OUTPUT F_ULTCLASS CODTAB[2,2]
CHECKTYPE NORMAL
FIELD S5
END
ENDPAGE
ENDMASK

View File

@ -97,10 +97,12 @@ class TStampaScaduto : public TPrintapp
bool _end_printed,
_stvaluta,
_pending_clifo,
_print_note,
_ordcod; // VERO=ordine per codice, FALSO=ordine per ragione sociale
TString _anno,_numdoc,_protiva,_datadoc,_codval,_residuo,
_nonscad,_buonfin,_sc_1,_sc_2,_sc_3,_sc_4,_sc_5,
_sc_6, _sc_7, _cod, _cod_pre, _des;
TParagraph_string _note;
TDate _limop, _limscad, _datas, _limbf; // Data limite operazione, data limite scaduto e data di stampa
int _gcr; // Giorni per Calcolo Rischio (valido solo per stampa clienti)
real _unsnc,_uns; // Unassigned per partita.
@ -503,6 +505,24 @@ bool TStampaScaduto::preprocess_page(int file, int counter)
_datadoc = (const char*) rp.get_date(PART_DATADOC);
_codval = (_stvaluta ? rp.get(PART_CODVAL): "");
if (_codval.empty()) _codval = " ";
if (_print_note)
{
_note.cut(0);
for (int n = 1; n <= rp.rate(); n++) // Browse all rows (scadenze)
{
const TRiga_scadenze& rs = rp.rata(n);
const TString & row = rs.get(SCAD_DESCR);
if (row.full())
{
if (_note.full())
_note << ' ';
_note << "Scad. " << n << " - " << row;
}
}
_note.replace('\n', ' ');
}
// Now performing fulkrum...
compute_all(p, bill);
}
@ -614,11 +634,12 @@ bool TStampaScaduto::set_print(int)
_end_printed = _pending_clifo = false;
_gcr = _m->get_int(F_GIORNI);
_stvaluta = _m->get_bool(F_VALUTA);
_print_note = _m->get_bool(F_NOTE);
_datas = (const char *)(_m->get(F_DATASTAMPA));
_limop = (const char *)(_m->get(F_DATAOPERAZIONE));
_limscad = (const char *)(_m->get(F_DATASCADUTO));
_limbf = _limscad - (long)_gcr; // Limite inferiore per le scadenze a Buon Fine.
_anno.cut(0);_numdoc.cut(0);_protiva.cut(0);_datadoc.cut(0);
_anno.cut(0);_numdoc.cut(0);_protiva.cut(0);_datadoc.cut(0); _note.cut(0);
_codval.cut(0);_residuo.cut(0);_nonscad.cut(0);_buonfin.cut(0);
_cod.cut(0); _des.cut(0); _cod_pre.cut(0);
_sc_1.cut(0);_sc_2.cut(0);_sc_3.cut(0);_sc_4.cut(0);_sc_5.cut(0);_sc_6.cut(0);_sc_7.cut(0);
@ -866,6 +887,15 @@ void TStampaScaduto::set_page_part(int& nriga)
set_row(nriga,"@174g#18t",&_sc_5);
set_row(nriga,"@193g#18t",&_sc_6);
set_row(nriga,"@212g#18t",&_sc_7);
if (_print_note)
{
const char * s = _note.get(0);
while (s && *s > '\0')
{
set_row(++nriga,"@12g%s", s);
s = _note.get();
}
}
}
void TStampaScaduto::set_page(int file, int counter)
@ -873,7 +903,7 @@ void TStampaScaduto::set_page(int file, int counter)
print_header();
}
TStampaScaduto::TStampaScaduto()
TStampaScaduto::TStampaScaduto() : _note("", 200)
{
_rel1=_rel2=NULL;
}

View File

@ -7,4 +7,5 @@
#define F_DATASCADUTO 105
#define F_GIORNI 106
#define F_VALUTA 107
#define F_NOTE 108

View File

@ -22,7 +22,7 @@ BEGIN
FLAGS "D"
END
GROUPBOX DLG_NULL 68 7
GROUPBOX DLG_NULL 68 8
BEGIN
PROMPT 1 2 ""
END
@ -66,6 +66,12 @@ BEGIN
HELP "Selezionare se si vuole la stampa in valuta"
END
BOOLEAN F_NOTE
BEGIN
PROMPT 2 8 "Stampa NOTE"
HELP "Selezionare se si vuole la stampa delle note delle scadenze"
END
RADIOBUTTON SC_CLIFO 20
BEGIN
PROMPT 1 9 "Selezione"

View File

@ -3,7 +3,11 @@
#include "sc2102.h"
#include "sc2400a.h"
#include "../ca/movana.h"
#include "../ca/rmovana.h"
#include "../ca/calib01.h"
#include <applicat.h>
#include <dongle.h>
#include <progind.h>
#include <printer.h>
#include <reputils.h>
@ -59,8 +63,9 @@ bool TStampaSol_application::print_selected()
// Attiva la stampa del saldo partita
form().stampa_saldo(mask().stampa_saldo());
form().anal_filter(mask().get_anal_filter());
// filtra il cursore del form in modo che diventi uguale al cursor_sheet corrente
// filtra il cursore del form in modo che diventi uguale al cursor_sheet corrente
// Qui sarebbe bello copiarsi l'indice dell'altro cursore
TCursor &fc = *form().cursor();
fc.setkey(key);
@ -189,6 +194,9 @@ int TStampaSol_application::print_sol()
const TDate data_inizio_soll = _msk->get(F_DATAINISCAD);
const TDate data_limite_soll = f.data_limite_operazione();
const TDate data_limite_scaduto = f.data_limite_scaduto();
TToken_string anal_filter = form().get_anal_filter();
const bool select_analitica = (dongle().active(CAAUT) || dongle().active(CMAUT)) && anal_filter.full() ;
TDecoder anal(LF_MOVANA, MOVANA_NUMREG, 3);
const TDate data_rischio = f.data_inizio_rischio();
TAssoc_array games_in_range;
@ -251,7 +259,52 @@ int TStampaSol_application::print_sol()
}
}
if (sel_tot_saldo || (saldo > ZERO && saldo >= sel_importo ) || (saldo.is_zero() && !unreferenced.is_zero() && data_rischio < data_limite_scaduto))
if (select_analitica)
{
bool print = false;
for (int r = game.first(); !print && r <= game.last(); r = game.succ(r))
{
const TRiga_partite& row = game.riga(r);
const TString& numregcg = row.get(PART_NREG);
const long numreg = atol(anal.decode(numregcg));
if (numreg > 0)
{
TAnal_mov anal_mov(numreg);
TRecord_array & rows = anal_mov.body();
const int nrows = rows.rows();
TString s;
for (int i = 1; !print && i <= nrows; i++)
{
const TRectype & row = anal_mov.body().row(i);
TString f = anal_filter.get(0);
f.trim();
if (f.full())
{
s = row.get(RMOVANA_CODCMS);
print |= s.match(f);
}
f = anal_filter.get();
if (f.full())
{
s = row.get(RMOVANA_CODCCOSTO);
print |= s.match(f);
}
f = anal_filter.get();
if (f.full())
{
s = row.get(RMOVANA_CODFASE);
print |= s.match(f);
}
}
}
}
if (!print)
return 0;
}
if (sel_tot_saldo || (saldo > ZERO && saldo >= sel_importo ) || (saldo.is_zero() && !unreferenced.is_zero() && data_rischio < data_limite_scaduto))
{
const bool printed = form().print_game(game);
one_printed |= printed;
@ -365,6 +418,7 @@ bool TStampaSol_application::mail_selected()
// Attiva la stampa del saldo partita
form().stampa_saldo(mask().stampa_saldo());
form().anal_filter(mask().get_anal_filter());
// filtra il cursore del form in modo che diventi uguale al cursor_sheet corrente
// Qui sarebbe bello copiarsi l'indice dell'altro cursore
@ -492,6 +546,11 @@ bool TStampaSol_application::destroy()
void TStampaSol_application::on_config_change()
{
mask().reset();
mask().set(F_STAMPSALDO, "X");
TApplication::on_firm_change();
TConfig c(CONFIG_DITTA, "cg");
_lingua_ditta= c.get("CodLin");
_gesval= c.get_bool("GesVal");

View File

@ -3,8 +3,11 @@
#include "../cg/cgsaldac.h"
#include "sc21pec.h"
#include "sc2401.h"
#include "../ca/calib01.h"
#include "../ca/movana.h"
#include <causali.h>
#include <modaut.h>
#include <mov.h>
@ -250,6 +253,17 @@ void TESSL_row::print_on(TPrint_section& body)
TForm_item& datacambio = body.find_field(PEC_DATACAM);
datacambio.set(_valuta.data().string());
TForm_item& bloccata = body.find_field(PEC_BLOCCATA);
bloccata.set(_bloccata ? "X" : "");
TForm_item& analitica = body.find_field(PEC_ANALITICA);
analitica.set(_codici_analitica);
TParagraph_string p(_codici_analitica, analitica.width());
const int h = analitica.height();
int i = 0;
for (i = 0; p.get() != NULL && i < h; i++);
analitica.section().set_height(p.empty() ? 1 : i);
const TString old_prompt(descr.prompt());
descr.set_prompt(""); // Nasconde temporaneamente il prompt per non stampare i <magic>
@ -432,6 +446,32 @@ void TESSL_array::add_row(const TRiga_partite& row)
const TDate data_op = row.get(PART_DATAREG);
if (data_op <= form().data_limite_operazione())
{
TString codanal;
if (main_app().has_module(CAAUT))
{
const TString& numregcg = row.get(PART_NREG);
const long numreg = atol(_anal.decode(numregcg));
if (numreg > 0)
{
TAnal_mov anal_mov(numreg);
TRecord_array & rows = anal_mov.body();
const int nrows = rows.rows();
for (int i = 1; i <= nrows; i++)
{
const TString80 s = anal_mov.row_code(i);
if (s.full() && codanal.find(s) < 0)
{
if (codanal.full())
codanal << '\n';
if (s.full())
codanal << s;
}
}
}
}
if (row.is_fattura())
{
for (int r = 1; r <= row.rate(); r++)
@ -450,6 +490,8 @@ void TESSL_array::add_row(const TRiga_partite& row)
const real s = calcola_scaduto(rata, in_valuta);
rec.scaduto(s);
}
rec.rata_bloccata(rata.get_bool(SCAD_BLOCCATA));
rec.codici_analitica(codanal);
}
}
else
@ -463,6 +505,7 @@ void TESSL_array::add_row(const TRiga_partite& row)
i.normalize(sezione);
riga.importo_in_euro(i.valore());
}
riga.codici_analitica(codanal);
const int tipo_pag = row.get_int(PART_TIPOPAG);
const tipo_movimento tipo_mov = row.tipo();
@ -499,6 +542,7 @@ void TESSL_array::add_row(const TRiga_partite& row)
}
else
r.importo(ritenute);
r.codici_analitica(codanal);
}
const TImporto abbuoni(row.importo(in_valuta, 0x2));
@ -512,6 +556,7 @@ void TESSL_array::add_row(const TRiga_partite& row)
il.normalize(sezione == 'D' ? 'A' : 'D');
r.importo_in_euro(il.valore());
}
r.codici_analitica(codanal);
}
TImporto diffcam(row.importo(FALSE, 0x4));
@ -520,7 +565,7 @@ void TESSL_array::add_row(const TRiga_partite& row)
TESSL_row& r = new_row(row, data_pag, TImporto('D', ZERO), RIGA_DIFFCAM);
r.descrizione(form().describe(PEC_DIFFCAM));
r.importo(diffcam);
}
r.codici_analitica(codanal); }
}
}
}
@ -566,7 +611,7 @@ void TESSL_array::arrange_scaduto(const TPartita& game)
}
TESSL_array::TESSL_array(const TPartita& game, const TESSL_form* f)
:_form(f)
:_form(f), _anal(LF_MOVANA, MOVANA_NUMREG, 3)
{
int r;
for (r = game.last(); r > 0; r = game.pred(r))

View File

@ -82,6 +82,8 @@ class TESSL_row : public TSortable
bool _salvo_buon_fine; // Importo esposto salvo buon fine
real _totale; // Totale documento
TValuta _valuta; // Codice valuta, data cambio e cambio
bool _bloccata; // Rata bloccata
TString _codici_analitica; // codici analitica corrispondenti alle fatture
protected: // TSortable
virtual int compare(const TSortable& s) const;
@ -100,6 +102,8 @@ public:
void esposto(const real& e) { _esposto = e; }
void importo_in_euro(const real& imp) { _importo_euro = imp; }
void salvo_buon_fine(bool sbf) { _salvo_buon_fine = sbf; }
void rata_bloccata(bool rb) { _bloccata = rb; }
void codici_analitica(const char * s) { _codici_analitica = s; }
const TString& causale() const { return _causale; }
const TString& descrizione() const { return _descrizione; }
@ -147,6 +151,8 @@ class TESSL_form : public TForm
bool _stampa_esp;
bool _stampa_saldo; // Stampa il saldo di ogni partita
TToken_string _anal_filter;
word _num_rip; // numero di righe usate per i riporti
word _total_rows; // numero di righe usate per i totali
@ -187,7 +193,9 @@ public:
const char sezione_normale() const { return _who == 'C' ? 'D' : 'A' ; }
void stampa_saldo(bool ss = TRUE) { _stampa_saldo = ss; }
void anal_filter(const TToken_string & f) { _anal_filter = f; }
const TToken_string &get_anal_filter() const { return _anal_filter; }
void azzera_totali();
void ultima_pagina();
virtual bool print_game(const TPartita& game);
@ -203,6 +211,8 @@ public:
class TESSL_array : public TArray
{
TArray _scaduto; // Array di importi scaduti
TDecoder _anal;
const TESSL_form* _form;

View File

@ -3,12 +3,102 @@
#include "sc2402.h"
#include "../cg/cgsaldac.h"
#include "../ca/calib01.h"
#include <causali.h>
#include <dongle.h>
#include <modaut.h>
TSol_mask::TSol_mask(const char *name)
:TESSL_mask(name)
{
_cdc_start = 0;
_cdc_end = 0;
_cms_start = 0;
_cms_end = 0;
_fas_start = 0;
_fas_end = 0;
if (dongle().active(CAAUT) || dongle().active(CMAUT))
{
create_page("Selezione analitica", 1);
const TMultilevel_code_info& fasinfo = ca_multilevel_code_info(LF_FASI);
const bool use_fsc = fasinfo.levels() > 0;
TConfig& ini = ca_config();
int y = 3;
short dlg = PEC_ANAL0; // id del primo campo da generare
short dlgd = PEC_DESANAL0;
for (int i = 0; i < 2; i++)
{
const TString& level = ini.get("Level", NULL, i+1); // Legge il livello 1 o 2
if (level == "CDC") // Crea centro di costo
{
_cdc_start = dlg;
_cdc_end = _cdc_start + ca_multilevel_code_info(LF_CDC).levels()-1;
if (use_fsc && fasinfo.parent() == LF_CDC)
{
_fas_start = _cdc_end + 1;
_fas_end = _fas_start + ca_multilevel_code_info(LF_FASI).levels()- ca_multilevel_code_info(LF_COMMESSE).levels() - 1;
insert_anal_fields(*this, 1, LF_FASI, y, dlg, dlgd);
}
else
insert_anal_fields(*this, 1, LF_CDC, y, dlg, dlgd);
}
else
if (level == "CMS") // Crea commessa
{
_cms_start = dlg;
_cms_end = _cms_start + ca_multilevel_code_info(LF_COMMESSE).levels()-1;
if (use_fsc && fasinfo.parent() == LF_COMMESSE)
{
_fas_start = _cms_end + 1 ;
_fas_end = _fas_start + ca_multilevel_code_info(LF_FASI).levels()- ca_multilevel_code_info(LF_COMMESSE).levels() - 1;
insert_anal_fields(*this, 1, LF_FASI, y, dlg, dlgd);
}
else
insert_anal_fields(*this, 1, LF_COMMESSE, y, dlg, dlgd);
}
}
if (use_fsc && fasinfo.parent() <= 0)
{
_fas_start = dlg;
_fas_end = _fas_start + ca_multilevel_code_info(LF_FASI).levels()-1;
insert_anal_fields(*this, 1, LF_FASI, y, dlg, dlgd);
}
}
}
int TSol_mask::insert_anal_fields(TMask& m, int page, int lf, int& y,
short& dlg, short& dlgd)
{
const int h = ca_create_fields(m, page, lf, 2, y, dlg, dlgd);
for (int i = 0; i < h; i++)
{
TEdit_field& fld = m.efield(dlg+i);
int logic = lf;
if (logic == LF_FASI)
{
const TMultilevel_code_info& fasinfo = ca_multilevel_code_info(LF_FASI);
if (fasinfo.parent() != 0)
{
const TMultilevel_code_info& parinfo = ca_multilevel_code_info(fasinfo.parent());
if (i < parinfo.levels())
logic = fasinfo.parent();
}
}
TEdit_field& dfld = m.efield(dlgd+i);
dfld.set_field(EMPTY_STRING); // Toglie campi che fan saltare gli output!
}
y += h+1;
dlg += h; dlgd += h;
return h;
}
TSol_mask::~TSol_mask() {}
@ -23,6 +113,91 @@ real TSol_mask::get_sel_importo() const
return real(get(F_IMPORMIN));
}
const TToken_string & TSol_mask::get_anal_filter() const
{
TToken_string &f = get_tmp_string(100);
TString s;
TString codfase;
const TMultilevel_code_info & fasi = ca_multilevel_code_info(LF_FASI);
TConfig& cfg = ca_config();
bool full = false;
bool empty = true;
if (_cms_start > 0)
{
s.cut(0);
for (short dlg = _cms_start; dlg <= _cms_end; dlg++)
{
const int len = field(dlg).size();
TString val = get(dlg);
full |= val.full();
if (val.full())
val.rpad(len);
else
val.fill('?', len);
s << val;
}
}
if (full)
{
empty = false;
f.add(s);
}
else
f.add("");
if (_cdc_start > 0)
{
full = false;
s.cut(0);
for (short dlg = _cdc_start; dlg <= _cdc_end; dlg++)
{
const int len = field(dlg).size();
TString val = get(dlg);
full |= val.full();
if (val.full())
val.rpad(len);
else
val.fill('?', len);
s << val;
}
}
if (full)
{
empty = false;
f.add(s);
}
else
f.add("");
if (_fas_start > 0)
{
full = false;
s.cut(0);
for (short dlg = _fas_start; dlg <= _fas_end; dlg++)
{
const int len = field(dlg).size();
TString val = get(dlg);
full |= val.full();
if (val.full())
val.rpad(len);
else
val.fill('?', len);
s << val;
}
}
if (full)
{
empty = false;
f.add(s);
}
else
f.add("");
if (empty)
f.cut(0);
return f;
}
///////////////////////////////////////////////////////////
// TSol_row
///////////////////////////////////////////////////////////

View File

@ -7,9 +7,17 @@
class TSol_mask: public TESSL_mask
{
short _cdc_start, _cdc_end,
_cms_start, _cms_end,
_fas_start, _fas_end;
protected:
int insert_anal_fields(TMask& m, int page, int lf, int& y, short& dlg, short& dlgd);
public:
bool get_sel_tot_saldo() const ;
real get_sel_importo() const ;
const TToken_string &get_anal_filter() const;
TSol_mask(const char *name);
virtual ~TSol_mask();

File diff suppressed because it is too large Load Diff