Patch level :

Files correlati     : fe0.exe fe0100a.msk
Ricompilazione Demo : [ ]
Commento            :
Aggiunto bottone per stampa report del contenuto del file per l'agenzia delle entrate.


git-svn-id: svn://10.65.10.50/branches/R_10_00@22468 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2011-10-27 09:53:40 +00:00
parent 94cf0d05d3
commit 6135d9e03f
2 changed files with 363 additions and 113 deletions

View File

@ -57,7 +57,7 @@ static const TString& provincia_di(const TString& codcom)
}
static real importo_limite(int anno)
{ return anno <= 2010 ? 25000 : 3000; }
{ return anno > 2010 ? 3000: 25000; }
static bool is_nota_variazione(const TRectype& mov)
{
@ -92,6 +92,30 @@ static bool is_nota_variazione(const TRectype& mov)
return false;
}
enum TExclusion_mode { em_incluso, em_importo_limite, em_no_allegato,
em_fiscalita_agevolata, em_estero, em_intra,
em_art8, em_data_limite, em_passaggi_interni,
em_inviato, em_altro };
static const char* mode2string(TExclusion_mode motivo)
{
const char* msg = "";
switch (motivo)
{
case em_importo_limite : msg = TR("importo inferiore al limite della comunicazione"); break;
case em_no_allegato : msg = TR("Soggetto da non inserire in allegato"); break;
case em_fiscalita_agevolata: msg = TR("Soggetto residente in stato a fiscalità agevolata"); break;
case em_estero : msg = TR("Soggetto residente all'estero"); break;
case em_intra : msg = TR("Movimento intra"); break;
case em_data_limite : msg = TR("Data fuori dal limite della comunicazione"); break;
case em_art8 : msg = TR("Soggetto all'articolo 8 (del dpr 26-10-1972)"); break;
case em_passaggi_interni : msg = TR("Passaggi interni"); break;
case em_inviato : msg = TR("Inviato l'anno precedente"); break;
default : msg = TR("Altri motivi"); break;
}
return msg;
}
///////////////////////////////////////////////////////////
// TContratto
///////////////////////////////////////////////////////////
@ -271,7 +295,8 @@ class TAnagrafica : public TObject
TDate _data_nasc;
int _allegato, _stato_estero;
TAnagrafica(const TAnagrafica&) { CHECK(false, "Can't copy TAnagrafica"); }
TAnagrafica& operator =(const TAnagrafica&) { CHECK(false, "Can't copy TAnagrafica"); }
TAnagrafica(const TAnagrafica&) { CHECK(false, "Can't copy TAnagrafica"); }
public:
virtual bool ok() const { return _tipo=='F' || _tipo == 'G'; }
@ -606,6 +631,8 @@ class TDati_rilevanti_set : public TAS400_recordset
protected:
virtual bool set_field(const TAS400_column_info& fi, const TVariant& var);
virtual const TVariant& get_field(const TAS400_column_info& fi) const;
void init();
bool set_val(int n, const TVariant& v) { return TAS400_recordset::set(n-1, v); }
@ -618,8 +645,9 @@ public:
bool set(unsigned int n, const TDate& v) { return set_val(n, v); }
void add_control_rec(int zero_o_nove, int num_inv = 1, int tot_inv = 1);
bool split(const TFilename& name, const TRecnotype maxalleg = 15000);
int anno() const { return _anno; }
TDati_rilevanti_set(int anno);
TDati_rilevanti_set(const TFilename& file);
};
bool TDati_rilevanti_set::set_field(const TAS400_column_info& fi, const TVariant& var)
@ -648,6 +676,29 @@ bool TDati_rilevanti_set::set_field(const TAS400_column_info& fi, const TVariant
return TAS400_recordset::set_field(fi, var);
}
const TVariant& TDati_rilevanti_set::get_field(const TAS400_column_info& ci) const
{
if (ci._type == DT && ci._width == 8)
{
const TRecnotype n = current_row();
if (n >= 0 && n < items())
{
const TString& str = row(n).mid(ci._pos, ci._width);
const int gg = atoi(str.left(2));
const int mm = atoi(str.mid(2,2));
const int aa = atoi(str.mid(4,4));
if (aa > 1800 && aa < 2100)
{
TVariant& var = get_tmp_var();
var.set(TDate(gg, mm, aa));
return var;
}
}
return NULL_VARIANT;
}
return TAS400_recordset::get_field(ci);
}
void TDati_rilevanti_set::add_control_rec(int zon, int num_inv, int tot_inv)
{
CHECKD(zon == 0 || zon == 9, "Tipo record di testa o coda non valido ", zon);
@ -689,56 +740,65 @@ bool TDati_rilevanti_set::split(const TFilename& name, const TRecnotype maxalleg
bool done = totrec <= maxalleg;
if (!done)
{
const TRecnotype rows_x_file = maxalleg-2;
const int totf = int((totrec-2.0) / rows_x_file + 0.99);
TString msg;
msg.format(FR("Spezzatura del file %s in blocchi da %d righe"), (const char*)name, maxalleg);
TProgind pi(totrec, msg);
move_first();
for (int f = 1; f <= totf; f++)
TDati_rilevanti_set outset(_anno);
int f = 0;
for (TRecnotype r = 0; r < totrec; r++)
{
TDati_rilevanti_set outset(_anno);
outset.add_control_rec(0, f, totf);
for (TRecnotype sent = 0; sent < rows_x_file && move_next(); sent++)
if (!pi.setstatus(r))
break; // Procedura interrotta dall'utente
outset.new_rec(row(r));
if (outset.items() >= maxalleg || r == totrec-1)
{
const TRecnotype r = current_row();
if (!pi.setstatus(r))
// Costruisce il nome del file di invio parziale, es: datiril_2.txt
TFilename outname = name;
const TString8 saved_ext = outname.ext();
outname.ext(""); outname << '_' << (++f);
outname.ext(saved_ext);
done = outset.save_as(outname);
if (done)
outset.destroy();
else
{
f = totf; // Procedura interrotta dall'utente
cantwrite_box(outname);
break;
}
const TString& rec = row(r);
if (rec[0] == '0') continue; // Ignora un eventuale record iniziale "spurio"
if (rec[0] == '9') break; // Termina quando incontra il record finale
outset.new_rec(rec);
}
outset.add_control_rec(9, f, totf);
// Costruisce il nome del file di invio parziale, es: datiril_1_3.txt
TFilename outname = name;
const TString8 saved_ext = outname.ext();
outname.ext(""); outname << '_' << f << '_' << totf;
outname.ext(saved_ext);
done = outset.save_as(outname);
if (!done)
{
cantwrite_box(outname);
break;
}
}
if (f > 1)
warning_box(FR("Sono stati generati %d file nella cartella %s"), name.path());
}
return done;
}
TDati_rilevanti_set::TDati_rilevanti_set(int anno)
: TAS400_recordset("AS400(1800,1)"), _anno(anno)
void TDati_rilevanti_set::init()
{
TDati_rilevanti_trc trc;
for (int i = 0; i <= 5; i++)
trc.create_fields(i, *this);
trc.create_fields(9, *this);
}
TDati_rilevanti_set::TDati_rilevanti_set(const TFilename& file)
: TAS400_recordset("AS400(1800,1)"), _anno(2010)
{
init();
if (load_file(file) && move_first())
{
const int anno = get(18).as_int();
if (anno > 2010)
_anno = anno;
}
}
TDati_rilevanti_set::TDati_rilevanti_set(int anno)
: TAS400_recordset("AS400(1800,1)"), _anno(anno)
{
init();
}
///////////////////////////////////////////////////////////
@ -749,33 +809,52 @@ class TDati_rilevanti_array : public TObject
{
TArray _data;
protected:
TExclusion_mode segnala_riga(const TRectype& alleg, TExclusion_mode motivo, TLog_report& log) const;
public:
int items() const { return _data.items(); }
const TRectype& operator[](int i) { return (const TRectype&)_data[i]; }
bool add(const TRectype& alleg, bool send_all);
void add(const TArray& note, bool send_all);
TExclusion_mode add(const TRectype& alleg, bool send_all, TLog_report& log);
void add(const TArray& note, bool send_all, TLog_report& log);
};
bool TDati_rilevanti_array::add(const TRectype& alleg, bool send_all)
TExclusion_mode TDati_rilevanti_array::segnala_riga(const TRectype& alleg, TExclusion_mode motivo, TLog_report& log) const
{
const long numreg = alleg.get_long(ALL_PROGR);
const char* tipocf = alleg.get_char(ALL_TIPOCF) == 'F' ? TR("Fornitore") : TR("Cliente");
const long codcf = alleg.get_long(MOV_CODCF);
TString msg; msg.format(FR("%s %6ld - Riga %7ld scartata: "), tipocf, codcf, numreg);
msg << mode2string(motivo);
log.log(1, msg);
return motivo;
}
TExclusion_mode TDati_rilevanti_array::add(const TRectype& alleg, bool send_all, TLog_report& log)
{
TExclusion_mode ignora = TExclusion_mode(alleg.get_int(ALL_IGNORA));
if (ignora > em_importo_limite)
return ignora;
const real importo = alleg.get_real(ALL_IMPORTO);
const real imposta = alleg.get_real(ALL_IMPOSTA);
if (importo.is_zero() && imposta.is_zero())
return false;
return segnala_riga(alleg, em_importo_limite, log);
const TString80 contratto = alleg.get(ALL_CONTRATTO);
const TString8 numrett = alleg.get(ALL_NUMRETT);
if (contratto.full() || numrett.full())
{
const char tipocf = alleg.get_char(ALL_TIPOCF);
const char codcf = alleg.get_char(ALL_CODCF);
TString16 curr_idcf = alleg.get(ALL_OCFPI);
if (curr_idcf.blank()) curr_idcf = alleg.get(ALL_CODCF);
TRectype* sum = NULL;
for (int i = _data.last(); i >= 0; i--)
{
TRectype& rec = (TRectype&)_data[i];
const char t = rec.get_char(ALL_TIPOCF);
const long c = rec.get_long(ALL_CODCF);
if (t == tipocf && c == codcf)
TString16 idcf = rec.get(ALL_OCFPI);
if (idcf.blank()) idcf = rec.get(ALL_CODCF);
if (idcf == curr_idcf)
{
const TString& k = rec.get(ALL_CONTRATTO);
const TString& n = rec.get(ALL_NUMDOC);
@ -785,6 +864,8 @@ bool TDati_rilevanti_array::add(const TRectype& alleg, bool send_all)
break;
}
}
else
break;
}
if (sum != NULL)
{
@ -812,39 +893,186 @@ bool TDati_rilevanti_array::add(const TRectype& alleg, bool send_all)
if (old_mode != new_mode)
sum->put(ALL_IGNORA, new_mode);
}
return true; // Aggiunto a record preesistente
return em_incluso; // Aggiunto a record preesistente
}
else
{
// Ignora le note di variazione non collegate e di importo non rilevante
if (!send_all && !alleg.get_int(ALL_IGNORA) && is_nota_variazione(alleg))
if (!send_all && ignora == em_incluso && is_nota_variazione(alleg))
{
const int anno = alleg.get_int(ALL_ANNO);
const real importo = abs(alleg.get_real(ALL_IMPORTO));
if (importo < importo_limite(anno))
return false;
ignora = segnala_riga(alleg, em_importo_limite, log);
else
{
const TDate datarett = alleg.get(ALL_DATARETT);
if (datarett.year() != anno)
return segnala_riga(alleg, em_data_limite, log); // Non posso fare la add con DATARETT errata
const TString& nr = alleg.get(ALL_NUMRETT);
if (nr.blank() || nr == INVALID_NUMDOC)
return segnala_riga(alleg, em_altro, log); // Non posso fare la add in assenza di NUMRETT
}
}
}
}
if (!send_all)
{
// Ignora i record solitari non rilevanti
const int ignora = alleg.get_int(ALL_IGNORA);
if (ignora != 0)
return false;
}
if (!send_all && ignora != em_incluso)
return ignora;
// Creo un nuovo record
return _data.add(alleg) >= 0;
_data.add(alleg);
return em_incluso;
}
void TDati_rilevanti_array::add(const TArray& note, bool send_all)
void TDati_rilevanti_array::add(const TArray& note, bool send_all, TLog_report& log)
{
FOR_EACH_ARRAY_ITEM(note, t, obj)
{
const TRectype& nota = *(const TRectype*)obj;
add(nota, send_all);
add(nota, send_all, log);
}
}
///////////////////////////////////////////////////////////
// TDati_rilevanti_rep
///////////////////////////////////////////////////////////
class TDati_rilevanti_rep : public TReport
{
protected:
virtual bool get_usr_val(const TString& name, TVariant& var) const;
public:
TDati_rilevanti_rep(const TFilename& file);
};
bool TDati_rilevanti_rep::get_usr_val(const TString& name, TVariant& var) const
{
if (name.starts_with("#FLD"))
{
const char* fld = (const char*)name + 4;
const TDati_rilevanti_set& set = *(TDati_rilevanti_set*)recordset();
if (fld[1] != '.')
{
const int t = atoi(set.rec_type());
if ((t >= 0 && t <= 5) || t == 9)
{
TString8 n;
n.format("%d.%s", t, fld);
var = set.get(n);
}
else
{
var.set_null();
return true;
}
}
else
var = set.get(fld);
return !var.is_null();
} else
if (name.starts_with("#ANNO"))
{
const TDati_rilevanti_set& set = *(TDati_rilevanti_set*)recordset();
var.set(set.anno());
return true;
}
return TReport::get_usr_val(name, var);
}
TDati_rilevanti_rep::TDati_rilevanti_rep(const TFilename& file)
{
TDati_rilevanti_set* set = new TDati_rilevanti_set(file);
set_recordset(set);
TReport_font small_font, big_font;
big_font.create(font().name(), font().size()*2, XVT_FS_BOLD);
small_font.create(font().name(), font().size()/2, XVT_FS_NONE);
TReport_section& h2 = section('H', 2);
h2.group_by("#FLD1");
TReport_field* fld = new TReport_field(&h2);
fld->set_type('S');
fld->set_horizontal_alignment('C');
fld->set_field("\"Operazioni rilevanti \"+ #ANNO + \" Sezione \"+#FLD1");
fld->set_pos(100, 50);
fld->set_width(92*100);
fld->set_height(200);
fld->set_border(1);
fld->set_font(big_font);
h2.add(fld);
h2.force_page_break(true);
TString16 col;
for (int t = 0; t <= 6; t++)
{
TReport_section& b = section('B', t+1);
if (t == 6) t = 9;
col.format("#FLD1==%d", t);
b.set_condition(col);
int x = 100, y = 100;
for (int f = 1; ; f++)
{
col.format("%d.%d", t, f);
const TRecordset_column_info& info = set->column_info(col);
if (info._width > 60)
break;
const int width = info._type == DT ? 1000 : info._width*100;
if ((x+width) > 92*100)
{
x = 100;
y += 100;
}
// Sfondo grigio del campo
fld = new TReport_field(&b);
fld->set_type('T');
fld->set_pos(x-75, y);
fld->set_width(width+75);
fld->set_height(95);
fld->set_pattern(PAT_SOLID);
fld->set_back_color(XVT_MAKE_COLOR(240,240,240));
fld->set_text_color(COLOR_LTGRAY);
fld->set_picture(col.format("%d", f));
fld->set_font(small_font);
b.add(fld);
// Campo vero e proprio
fld = new TReport_field(&b);
fld->set_id(f);
col.format("#FLD%d", f);
fld->set_field(col);
fld->set_pos(x, y);
fld->set_width(width);
fld->set_height(100);
switch (info._type)
{
case _datefld:
fld->set_type('D');
break;
case _intzerofld:
case _longzerofld:
{
const TString pic(info._width, '@');
fld->set_picture(pic);
}
case _intfld:
case _longfld:
case _realfld:
fld->set_type('N');
fld->set_horizontal_alignment('R');
break;
default:
fld->set_type('S');
break;
}
fld->set_vertical_alignment('B');
b.add(fld);
x += fld->get_rect().width() + 100;
}
b.set_height(y+100);
}
}
@ -853,11 +1081,6 @@ void TDati_rilevanti_array::add(const TArray& note, bool send_all)
// TDati_rilevanti_msk
///////////////////////////////////////////////////////////
enum TExclusion_mode { em_incluso, em_importo_limite, em_no_allegato,
em_fiscalita_agevolata, em_estero, em_intra,
em_art8, em_data_limite, em_passaggi_interni,
em_inviato, em_altro };
class TDati_rilevanti_msk : public TAutomask
{
TMaskmode _mode;
@ -916,19 +1139,7 @@ TExclusion_mode TDati_rilevanti_msk::segnala_movimento(const TRectype& mov, TExc
const char* tipocf = mov.get_char(MOV_TIPO) == 'F' ? TR("Fornitore") : TR("Cliente");
const long codcf = mov.get_long(MOV_CODCF);
TString msg; msg.format(FR("%s %6ld - Registrazione %7ld scartata: "), tipocf, codcf, numreg);
switch (motivo)
{
case em_importo_limite : msg << TR("importo inferiore al limite della comunicazione"); break;
case em_no_allegato : msg << TR("Soggetto da non inserire in allegato"); break;
case em_fiscalita_agevolata: msg << TR("Soggetto residente in stato a fiscalità agevolata"); break;
case em_estero : msg << TR("Soggetto residente all'estero"); break;
case em_intra : msg << TR("Movimento intra"); break;
case em_data_limite : msg << TR("Data movimento fuori dal limite della comunicazione"); break;
case em_art8 : msg << TR("Soggetto all'articolo 8 (del dpr 26-10-1972)"); break;
case em_passaggi_interni : msg << TR("Passaggi interni"); break;
case em_inviato : msg << TR("Inviato l'anno precedente"); break;
default : msg << TR("Altri motivi"); break;
}
msg << mode2string(motivo);
_why = motivo;
if (motivo > em_importo_limite)
_log->log(1, msg);
@ -1068,17 +1279,11 @@ TExclusion_mode TDati_rilevanti_msk::elabora_movimento(const TRectype& mov, TBas
tot_imposta += rmi_imposta;
}
if (tot_imponibile.is_zero() && tot_imposta.is_zero())
{
segnala_movimento(mov, em_importo_limite);
return em_importo_limite;
}
const int modpag = mov.get_int(MOV_MODPAG);
if (modpag == 1 && tot_imponibile >= ZERO && _why == em_incluso)
if (modpag == 1 && _why == em_incluso)
{
// Considera solo registrazioni con importo rilevante
if (tot_imponibile < importo_limite(anno))
if (abs(tot_imponibile) < importo_limite(anno))
_why = em_importo_limite; // Non segnalare migliaia di movimenti inutilmente
}
@ -1226,15 +1431,14 @@ bool TDati_rilevanti_msk::azzera_alleg(TAssoc_array& manuali) const
const TDate datareg = mrec.get_long(MOV_DATAREG);
const int annoiva = mrec.get_long(MOV_ANNOIVA);
bool kill = numreg != progr || annoiva < 2010;
bool kill = numreg != progr || annoiva < anno;
if (!kill)
{
const bool forzata = alleg.get(ALL_FORZATURA).as_bool();
const bool forzata = arec.get_bool(ALL_FORZATURA);
if (forzata)
manuali.add(arec.get(ALL_PROGR));
else
kill = annoiva == data.year() && datareg > data;
}
if (kill)
falleg.remove(); // Riga generata dalla vecchia versione
@ -1555,16 +1759,9 @@ bool TDati_rilevanti_msk::send_rec(const TRectype& alleg, TDati_rilevanti_set& o
{
bool done = false;
if (is_nota_variazione(alleg))
{
const TString& numrett = alleg.get(ALL_NUMRETT);
const TDate datarett = alleg.get(ALL_DATARETT);
if (numrett.full() && numrett != INVALID_NUMDOC && datarett.year() == alleg.get_int(ALL_ANNO))
done = send_nota_variazione(alleg, operaz);
}
done = send_nota_variazione(alleg, operaz);
else
{
done = send_fatt(alleg, operaz);
}
return done;
}
@ -1600,6 +1797,7 @@ bool TDati_rilevanti_msk::send_alleg()
const int anno = get_int(F_ANNO);
const bool send_all = get_int(F_SENDALL) != 1;
TFilename temp = get(F_OUTFOLDER);
if (temp.blank())
temp.tempdir();
@ -1617,6 +1815,10 @@ bool TDati_rilevanti_msk::send_alleg()
if (tot_alleg > 0)
{
TString str_pi;
str_pi << TR("Generazione file ") << temp;
_log = new TLog_report(str_pi);
const TRectype& rec = alleg.cursor()->curr();
TString16 last_clifo;
@ -1633,16 +1835,21 @@ bool TDati_rilevanti_msk::send_alleg()
clifo = rec.get(ALL_CODCF);
if (clifo != last_clifo)
{
data.add(note, send_all);
data.add(note, send_all, *_log);
note.destroy();
last_clifo = clifo;
}
if (rec.get(ALL_NUMRETT).full())
if (is_nota_variazione(rec))
note.add(rec);
else
data.add(rec, send_all);
data.add(rec, send_all, *_log);
}
data.add(note, send_all);
data.add(note, send_all, *_log);
if (_log->recordset()->items())
_log->preview();
delete _log;
_log = NULL;
}
TDati_rilevanti_set recset(anno);
@ -1662,6 +1869,7 @@ bool TDati_rilevanti_msk::send_alleg()
}
recset.add_control_rec(9);
recset.sort();
bool done = recset.save_as(temp);
const long maxalleg = get_long(F_MAXREC);
@ -1677,22 +1885,32 @@ bool TDati_rilevanti_msk::send_alleg()
pi.addstatus(1);
const TRectype& alleg = data[i];
const long numreg = alleg.get_long(ALL_PROGR);
if (numreg > 0 && numreg < MANUAL_ROW)
const int ignora = alleg.get_int(ALL_IGNORA);
if (numreg > 0 && numreg < MANUAL_ROW && !ignora)
{
mov.put(MOV_NUMREG, numreg);
int err = mov.read(_isequal, _lock);
if (err == NOERR)
{
mov.put(MOV_MODPAG, alleg.get(ALL_MODPAG));
mov.put(MOV_CONTRATTO, alleg.get(ALL_CONTRATTO));
mov.put(MOV_DATARETT, alleg.get(ALL_DATARETT));
mov.put(MOV_NUMRETT, alleg.get(ALL_NUMRETT));
mov.put(MOV_ANNOFE, anno);
const int modpag = alleg.get_int(ALL_MODPAG);
mov.put(MOV_MODPAG, modpag);
if (modpag < 2)
{
const TString& nr = alleg.get(ALL_NUMRETT);
if (nr.full() && nr != INVALID_NUMDOC)
{
mov.put(MOV_DATARETT, alleg.get(ALL_DATARETT));
mov.put(MOV_NUMRETT, nr);
}
}
else
mov.put(MOV_CONTRATTO, alleg.get(ALL_CONTRATTO));
mov.put(MOV_ANNOFE, anno);
err = mov.rewrite();
}
if (err != NOERR)
{
error_box(FR("Impossibile aggiornare il movimento %ld: errore %d.\nSi desidera ritentare?"), numreg, err);
error_box(FR("Impossibile aggiornare il movimento %ld: errore %d"), numreg, err);
break;
}
}
@ -1722,7 +1940,7 @@ void TDati_rilevanti_msk::alleg_sort(TSheet_field& s) const
for (int i = tot-1; i >= 0; i--)
{
const TString8 numrett = s.cell(i, c_numrett);
if (numrett.full())
if (numrett.full() && numrett != INVALID_NUMDOC)
{
const long codcf_i = atol(s.cell(i, c_codcf));
int j = -1;
@ -1959,6 +2177,11 @@ void TDati_rilevanti_msk::enable_buttons()
enable(DLG_DELREC, one_sent);
enable(F_DEFINITIVO, !def);
if (def) reset(F_DEFINITIVO);
TFilename temp = get(F_OUTFOLDER);
if (temp.blank()) temp.tempdir();
temp.add("datiril.txt");
enable(DLG_PREVIEW, temp.exist());
}
bool TDati_rilevanti_msk::on_field_event(TOperable_field& o, TField_event e, long jolly)
@ -2018,14 +2241,38 @@ bool TDati_rilevanti_msk::on_field_event(TOperable_field& o, TField_event e, lon
return false;
}
break;
case DLG_PREVIEW:
if (e == fe_button)
{
TFilename temp = get(F_OUTFOLDER);
if (temp.blank()) temp.tempdir();
temp.add("datiril.txt");
if (temp.exist())
{
TDati_rilevanti_rep rep(temp);
rep.preview();
}
}
break;
case F_ANNO:
if (e == fe_init || e == fe_modify)
{
int anno = atoi(o.get());
if (anno < 2010)
{
anno = TDate(TODAY).year()-1;
TDate d = get(F_DATA);
if (d.year() != anno+1)
o.set(anno);
}
on_field_event(efield(F_DATA), fe_modify, jolly);
enable_buttons();
}
break;
case F_DATA:
if (e == fe_init || e == fe_modify)
{
const int anno = max(2010, get_int(F_ANNO));
TDate d = o.get();
if (d < TDate(31,12,anno) || d > TDate(31,12,anno+1))
{
if (anno == 2010)
d = TDate(31,12,2011);
@ -2033,7 +2280,6 @@ bool TDati_rilevanti_msk::on_field_event(TOperable_field& o, TField_event e, lon
d = TDate(30,4,anno+1);
set(F_DATA, d);
}
enable_buttons();
}
break;
case F_OUTFOLDER:
@ -2122,7 +2368,7 @@ bool TDati_rilevanti_app::create()
if (alleg.type(ALL_NUMDOC) == _nullfld)
return error_box(TR("Il database non è stato ancora convertito per il modulo FE"));
// Teoricamente è possibile visulizzare tutti i movimenti di un anno, per cui allargo il numero riga
// Teoricamente è possibile visualizzare tutti i movimenti di un anno, per cui allargo il numero riga
TSheet_field::set_line_number_width(6);
return TSkeleton_application::create();

View File

@ -49,6 +49,12 @@ BEGIN
PICTURE TOOL_RESET
END
BUTTON DLG_PREVIEW 2 2
BEGIN
PROMPT 1 7 "Anteprima"
PICTURE TOOL_PREVIEW
END
#include <helpbar.h>
ENDPAGE
@ -74,8 +80,6 @@ DATE F_DATA
BEGIN
PROMPT 15 1 "Data limite "
CHECKTYPE REQUIRED
STR_EXPR YEAR(#THIS_FIELD)>#F_ANNO
WARNING "La data deve appartenere all'anno successivo"
END
LIST F_SHOWALL 1 13
@ -158,7 +162,7 @@ BEGIN
ITEM "Occasionale@16F"
ITEM "Ragione Sociale@24"
ITEM "Data\nOperazione@10"
ITEM "Numero\nFattura@7"
ITEM "Numero\nDocum.@7"
ITEM "Importo\ndovuto@12"
ITEM "Imposta@12"
ITEM "Mod.\nPag.@4"
@ -373,7 +377,7 @@ BEGIN
OUTPUT A_DATARETT DATADOC
OUTPUT A_NUMRETT NUMDOC
ADD RUN cg2 -0
NUM_EXPR IF(#A_IMPORTO<0;#A_DATARETT!="";1)
NUM_EXPR IF((#A_IMPORTO<0)&&(#A_IGNORA<=0);#A_DATARETT!="";1)
WARNING "Inserire la data della fattura rettificata"
END