Corretti errori in bilancio IV direttiva e registri iva

git-svn-id: svn://10.65.10.50/trunk@778 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
nik 1994-12-20 12:19:20 +00:00
parent 6bb9550c77
commit 82a019707e
5 changed files with 2386 additions and 1286 deletions

View File

@ -260,24 +260,25 @@ class CG1600_application : public TPrintapp
bool conto_dettagliato; bool conto_dettagliato;
}; };
bil_ivd* _bil; bil_ivd* _bil;
TMask* _msk; TMask* _msk;
TTable* _tabesc; TTable* _tabesc;
TTable* _tabivd; TTable* _tabivd;
TLocalisamfile* _nditte; TLocalisamfile* _nditte;
TLocalisamfile* _comuni; TLocalisamfile* _comuni;
TLocalisamfile* _unloc; TLocalisamfile* _unloc;
TLocalisamfile* _anag; TLocalisamfile* _anag;
TLocalisamfile* _pconti; TLocalisamfile* _pconti;
TLocalisamfile* _clifo; TLocalisamfile* _clifo;
TLocalisamfile* _saldi; TLocalisamfile* _saldi;
const char* _buff; const char* _buff;
TSort* _sort; TSort* _sort;
Anni_es _anni_es; Anni_es* _anni_es;
Righe_sez_opp _sezopps; Righe_sez_opp _sezopps;
TSaldi_list* _listasld; TSaldi_list* _listasld;
TProgind* _prog; TProgind* _prog;
TParagraph_string * _descr; TParagraph_string* _descr;
Saldo* _sld;
TDate _data_fine_ese,_data_fine_ese_prec,_data_fine_raf,_data_fine_raf_prec; TDate _data_fine_ese,_data_fine_ese_prec,_data_fine_raf,_data_fine_raf_prec;
TDate _datastampa,_datalimite,_databilrafr,_datai,_datairaf; TDate _datastampa,_datalimite,_databilrafr,_datai,_datairaf;
@ -291,7 +292,6 @@ class CG1600_application : public TPrintapp
TString _numr_da_stamp,_num_da_stamp,_numr_stamp,_num_stamp,_descr_sez; TString _numr_da_stamp,_num_da_stamp,_numr_stamp,_num_stamp,_descr_sez;
int _tipo_bilancio, _tipo_stampa; int _tipo_bilancio, _tipo_stampa;
int _cont_let,_cont_numr,_cont_num,_cont_gcs,_num; int _cont_let,_cont_numr,_cont_num,_cont_gcs,_num;
Saldo _sld;
real _sale,_salerafr,_totale_ordine,_totale_economico; real _sale,_salerafr,_totale_ordine,_totale_economico;
real _totale_ordine_raf,_totale_economico_raf; real _totale_ordine_raf,_totale_economico_raf;
real _totale_numero,_totale_numr,_totale_lettera,_totale_sezione; real _totale_numero,_totale_numr,_totale_lettera,_totale_sezione;
@ -324,7 +324,7 @@ public:
bool menu (MENU_TAG m) { return TPrintapp::menu(m) ; } bool menu (MENU_TAG m) { return TPrintapp::menu(m) ; }
virtual bool user_create() ; virtual bool user_create() ;
virtual bool user_destroy(); virtual bool user_destroy();
bool set_print(int); bool set_print(int);
virtual bool preprocess_page (int,int); virtual bool preprocess_page (int,int);
virtual print_action postprocess_page (int,int); virtual print_action postprocess_page (int,int);
@ -479,7 +479,7 @@ bool data_limite (TMask_field& f, KEY key)
if (annoese != 0) if (annoese != 0)
{ {
a()._anni_es.aggiungi_anno(annoese, in, fin); a()._anni_es->aggiungi_anno(annoese, in, fin);
a()._data_fine_ese = fin; a()._data_fine_ese = fin;
a()._data_ini_ese = in; a()._data_ini_ese = in;
@ -558,7 +558,7 @@ bool data_bil_raff (TMask_field& f, KEY key)
in = a()._inizioEs; in = a()._inizioEs;
} }
else else
a()._anni_es.aggiungi_anno(annoese, in, fin); a()._anni_es->aggiungi_anno(annoese, in, fin);
TString instr = in.string(); TString instr = in.string();
if (dataraf != botime) if (dataraf != botime)
@ -599,7 +599,7 @@ bool data_bil_raff (TMask_field& f, KEY key)
else else
if (annoraf != 0) if (annoraf != 0)
{ {
a()._anni_es.aggiungi_anno(annoraf, in_raf, fin_raf); a()._anni_es->aggiungi_anno(annoraf, in_raf, fin_raf);
a()._data_fine_raf = fin_raf; a()._data_fine_raf = fin_raf;
a()._data_ini_raf = in_raf; a()._data_ini_raf = in_raf;
@ -641,7 +641,7 @@ bool anno_ese_raff (TMask_field& f, KEY key)
{ {
if (annoese != 0) if (annoese != 0)
{ {
if (annoraf > annoese) if (annoraf >= annoese)
{ {
f.error_box("L' anno esercizio da raffrontare deve essere inferiore all' anno esercizio in corso"); f.error_box("L' anno esercizio da raffrontare deve essere inferiore all' anno esercizio in corso");
return FALSE; return FALSE;
@ -779,7 +779,7 @@ bool data_inizio(TMask_field& f, KEY k)
{ {
if (anno != 0) if (anno != 0)
{ {
a()._anni_es.aggiungi_anno(anno, in, fin); a()._anni_es->aggiungi_anno(anno, in, fin);
a()._data_ini_ese = in; a()._data_ini_ese = in;
a()._data_fine_ese = fin; a()._data_fine_ese = fin;
a()._anno_esercizio = anno; a()._anno_esercizio = anno;
@ -837,7 +837,7 @@ bool data_fine(TMask_field& f, KEY k)
{ {
if (annoes != 0) if (annoes != 0)
{ {
a()._anni_es.aggiungi_anno(annoes, in, fin); a()._anni_es->aggiungi_anno(annoes, in, fin);
a()._data_ini_ese = in; a()._data_ini_ese = in;
a()._data_fine_ese = fin; a()._data_fine_ese = fin;
@ -1399,7 +1399,7 @@ void CG1600_application::crea_sort_piano_conti_verifica()
real saldo,sld_prg_dare,sld_prg_avere,mov_dare,mov_avere; real saldo,sld_prg_dare,sld_prg_avere,mov_dare,mov_avere;
real saldo_conto,sld_prg_dare_conto,sld_prg_avere_conto,mov_dare_conto,mov_avere_conto; real saldo_conto,sld_prg_dare_conto,sld_prg_avere_conto,mov_dare_conto,mov_avere_conto;
_sld.set_annoes(_anno_esercizio); _sld->set_annoes(_anno_esercizio);
saldo_conto = ZERO; saldo_conto = ZERO;
sld_prg_dare_conto = ZERO; sld_prg_dare_conto = ZERO;
@ -1539,9 +1539,9 @@ void CG1600_application::crea_sort_piano_conti_verifica()
else else
if (_tipo_stampa == 2) if (_tipo_stampa == 2)
{ {
if (!_sld.ultima_immissione_verifica(_anno_esercizio,g,c,s,indbil)) if (!_sld->ultima_immissione_verifica(_anno_esercizio,g,c,s,indbil))
continue; continue;
app = _sld.saldoini(); app = _sld->saldoini();
if (app < ZERO) if (app < ZERO)
{ {
app = -app; app = -app;
@ -1553,8 +1553,8 @@ void CG1600_application::crea_sort_piano_conti_verifica()
sld_prg_dare = app; sld_prg_dare = app;
sld_prg_avere = ZERO; sld_prg_avere = ZERO;
} }
mov_dare = _sld.prgdare(); mov_dare = _sld->prgdare();
mov_avere = _sld.prgavere(); mov_avere = _sld->prgavere();
saldo = sld_prg_dare-sld_prg_avere+mov_dare-mov_avere; saldo = sld_prg_dare-sld_prg_avere+mov_dare-mov_avere;
} }
@ -1667,9 +1667,9 @@ void CG1600_application::sottoc_clifo_verifica(int g,int c,int anno,char tipocf,
else else
if (_tipo_stampa == 2) if (_tipo_stampa == 2)
{ {
if (!_sld.ultima_immissione_bilancio(_anno_esercizio,g,c,s,indbil)) if (!_sld->ultima_immissione_bilancio(_anno_esercizio,g,c,s,indbil))
continue; continue;
app = _sld.saldoini(); app = _sld->saldoini();
if (app < ZERO) if (app < ZERO)
{ {
app = -app; app = -app;
@ -1681,8 +1681,8 @@ void CG1600_application::sottoc_clifo_verifica(int g,int c,int anno,char tipocf,
sld_prg_dare = app; sld_prg_dare = app;
sld_prg_avere = ZERO; sld_prg_avere = ZERO;
} }
mov_dare = _sld.prgdare(); mov_dare = _sld->prgdare();
mov_avere = _sld.prgavere(); mov_avere = _sld->prgavere();
saldo = sld_prg_dare-sld_prg_avere+mov_dare-mov_avere; saldo = sld_prg_dare-sld_prg_avere+mov_dare-mov_avere;
} }
@ -1748,23 +1748,23 @@ bool CG1600_application::calcola_saldo(real& saldo, real& saldo_raf,int g,int c,
bool esiste = FALSE; bool esiste = FALSE;
TString saldostr,saldo_rafstr; TString saldostr,saldo_rafstr;
_sld.set_annoes(_anno_esercizio); _sld->set_annoes(_anno_esercizio);
if (_tipo_bilancio == 1) if (_tipo_bilancio == 1)
{ {
if (_tipo_stampa == 1) //bilancio per data limite if (_tipo_stampa == 1) //bilancio per data limite
{ {
esiste = _sld.data_limite_bilancio(_tipo_stampa,g,c,s,_datai,_datalimite,indbil,_stampa_mov_prov); esiste = _sld->data_limite_bilancio(_tipo_stampa,g,c,s,_datai,_datalimite,indbil,_stampa_mov_prov);
saldo = _sld.saldo(); saldo = _sld->saldo();
if (!esiste && (!_sld.esiste_saldo() || !_sld.significativo())) if (!esiste && (!_sld->esiste_saldo() || !_sld->significativo()))
no_movimentato = TRUE; no_movimentato = TRUE;
else else
if (!_stampamov) if (!_stampamov)
{ {
if (saldo == ZERO) if (saldo == ZERO)
{ {
if (!_sld.esiste_saldo() || !_sld.significativo()) if (!_sld->esiste_saldo() || !_sld->significativo())
no_movimentato = TRUE; no_movimentato = TRUE;
else else
no_movimentato = FALSE; no_movimentato = FALSE;
@ -1782,9 +1782,9 @@ bool CG1600_application::calcola_saldo(real& saldo, real& saldo_raf,int g,int c,
} }
else if (_tipo_stampa == 2) else if (_tipo_stampa == 2)
{ {
if (!_sld.ultima_immissione_bilancio(_anno_esercizio,g,c,s,indbil)) if (!_sld->ultima_immissione_bilancio(_anno_esercizio,g,c,s,indbil))
{ {
if (!_sld.esiste_saldo() || !_sld.significativo()) if (!_sld->esiste_saldo() || !_sld->significativo())
no_movimentato = TRUE; no_movimentato = TRUE;
else else
no_movimentato = FALSE; no_movimentato = FALSE;
@ -1792,13 +1792,13 @@ bool CG1600_application::calcola_saldo(real& saldo, real& saldo_raf,int g,int c,
else else
no_movimentato = FALSE; no_movimentato = FALSE;
saldo = _sld.saldo(); saldo = _sld->saldo();
} }
saldostr = saldo.string(); saldostr = saldo.string();
if (_annoeserafr != 0 || _databilrafr != botime) if (_annoeserafr != 0 || _databilrafr != botime)
{ {
_sld.set_annoes(_anno_esercizio_raf); _sld->set_annoes(_anno_esercizio_raf);
if (_databilrafr != _data_fine_raf) //(_tipo_stampa == 1) bilancio per data limite if (_databilrafr != _data_fine_raf) //(_tipo_stampa == 1) bilancio per data limite
{ {
@ -1806,17 +1806,17 @@ bool CG1600_application::calcola_saldo(real& saldo, real& saldo_raf,int g,int c,
TString16 datadep (_databilrafr.string()); TString16 datadep (_databilrafr.string());
TString16 datadep2 (_datairaf.string()); TString16 datadep2 (_datairaf.string());
#endif #endif
esiste = _sld.data_limite_bilancio(DataLimite,g,c,s,_datairaf,_databilrafr,indbil,_stampa_mov_prov); esiste = _sld->data_limite_bilancio(DataLimite,g,c,s,_datairaf,_databilrafr,indbil,_stampa_mov_prov);
saldo_raf = _sld.saldo(); saldo_raf = _sld->saldo();
if (!esiste && (!_sld.esiste_saldo() || !_sld.significativo())) if (!esiste && (!_sld->esiste_saldo() || !_sld->significativo()))
no_movimentato_raf = TRUE; no_movimentato_raf = TRUE;
else else
if (!_stampamov) if (!_stampamov)
{ {
if (saldo_raf == ZERO) if (saldo_raf == ZERO)
{ {
if (!_sld.esiste_saldo() || !_sld.significativo()) if (!_sld->esiste_saldo() || !_sld->significativo())
no_movimentato_raf = TRUE; no_movimentato_raf = TRUE;
else else
no_movimentato_raf = FALSE; no_movimentato_raf = FALSE;
@ -1834,9 +1834,9 @@ bool CG1600_application::calcola_saldo(real& saldo, real& saldo_raf,int g,int c,
} }
else if (_databilrafr == _data_fine_raf) //(_tipo_stampa == 2) else if (_databilrafr == _data_fine_raf) //(_tipo_stampa == 2)
{ {
if (!_sld.ultima_immissione_bilancio(_anno_esercizio_raf,g,c,s,indbil)) if (!_sld->ultima_immissione_bilancio(_anno_esercizio_raf,g,c,s,indbil))
{ {
if (!_sld.esiste_saldo() || !_sld.significativo()) if (!_sld->esiste_saldo() || !_sld->significativo())
no_movimentato_raf = TRUE; no_movimentato_raf = TRUE;
else else
no_movimentato_raf = FALSE; no_movimentato_raf = FALSE;
@ -1844,7 +1844,7 @@ bool CG1600_application::calcola_saldo(real& saldo, real& saldo_raf,int g,int c,
else else
no_movimentato_raf = FALSE; no_movimentato_raf = FALSE;
saldo_raf = _sld.saldo(); saldo_raf = _sld->saldo();
} }
saldo_rafstr = saldo_raf.string(); saldo_rafstr = saldo_raf.string();
} }
@ -2089,6 +2089,9 @@ void CG1600_application::stampa_totali()
diff_prod.format("%c%c",'9','B'); diff_prod.format("%c%c",'9','B');
ris_imp.format ("%c%c%8s%2s",'9','E',"","21"); ris_imp.format ("%c%c%8s%2s",'9','E',"","21");
TString16 classe;
classe.format("%c%c%8s%2s", _sez_da_stamp,_let_da_stamp,(const char*)_numr_da_stamp,(const char*)_num_da_stamp);
_num = atoi(_num_tot); _num = atoi(_num_tot);
_numr = _numr_tot; _numr = _numr_tot;
_let = _let_tot; _let = _let_tot;
@ -2120,11 +2123,7 @@ void CG1600_application::stampa_totali()
} }
} }
if (_sez_stamp == '9') if (_sez_stamp == '9')
{ {
TString16 classe;
classe.format("%c%c%8s%2s", _sez_da_stamp,_let_da_stamp,(const char*)_numr_da_stamp,(const char*)_num_da_stamp);
if (classe > ris_imp && _risimp_fatto) if (classe > ris_imp && _risimp_fatto)
{ {
if (_num_tot == "20" || _num_tot == "21") if (_num_tot == "20" || _num_tot == "21")
@ -2501,10 +2500,16 @@ void CG1600_application::stampa_totali()
set_row (_i++,"@4gDifferenza tra valore e costi della produzione@86g%r", &_totale_economico); set_row (_i++,"@4gDifferenza tra valore e costi della produzione@86g%r", &_totale_economico);
_diffprod_fatto = FALSE; _diffprod_fatto = FALSE;
} }
if (_risimp_fatto) if (_risimp_fatto)
{ {
set_row (_i,"@4gRisultato prima delle imposte"); if (_let_da_stamp == 'E' && (_num_da_stamp == "20" || _num_da_stamp == "21"))
set_row (_i++,"@86g%r", &_totale_economico); {
set_row (_i,"@4gTotale delle partite straordinarie");
set_row (_i++,"@86g%r", &_totale_parziale);
set_row (_i,"@4gRisultato prima delle imposte");
set_row (_i++,"@86g%r", &_totale_economico);
_risimp_fatto = FALSE;
}
} }
} }
@ -2535,6 +2540,10 @@ void CG1600_application::stampa_totali_con_raffronto()
diff_prod.format("%c%c",'9','B'); diff_prod.format("%c%c",'9','B');
ris_imp.format ("%c%c%8s%2s",'9','E',"","21"); ris_imp.format ("%c%c%8s%2s",'9','E',"","21");
TString16 classe;
classe.format("%c%c%8s%2s", _sez_da_stamp,_let_da_stamp,(const char*)_numr_da_stamp,(const char*)_num_da_stamp);
_num = atoi(_num_tot); _num = atoi(_num_tot);
_numr = _numr_tot; _numr = _numr_tot;
_let = _let_tot; _let = _let_tot;
@ -2568,11 +2577,7 @@ void CG1600_application::stampa_totali_con_raffronto()
} }
} }
if (_sez_stamp == '9') if (_sez_stamp == '9')
{ {
TString16 classe;
classe.format("%c%c%8s%2s", _sez_da_stamp,_let_da_stamp,(const char*)_numr_da_stamp,(const char*)_num_da_stamp);
if (classe > ris_imp && _risimp_fatto) if (classe > ris_imp && _risimp_fatto)
{ {
if (_num_tot == "20" || _num_tot == "21") if (_num_tot == "20" || _num_tot == "21")
@ -3012,11 +3017,18 @@ void CG1600_application::stampa_totali_con_raffronto()
set_row (_i++,"@4gDifferenza tra valore e costi della produzione@86g%r@112g%r", &_totale_economico,&_totale_economico_raf); set_row (_i++,"@4gDifferenza tra valore e costi della produzione@86g%r@112g%r", &_totale_economico,&_totale_economico_raf);
_diffprod_fatto = FALSE; _diffprod_fatto = FALSE;
} }
if (_risimp_fatto) if (_risimp_fatto)
{ {
set_row (_i,"@4gRisultato prima delle imposte"); if (_let_da_stamp == 'E' && (_num_da_stamp == "20" || _num_da_stamp == "21"))
set_row (_i,"@86g%r", &_totale_economico); {
set_row (_i++,"@112g%r", &_totale_economico_raf); set_row (_i,"@4gTotale delle partite straordinarie");
set_row (_i,"@86g%r", &_totale_parziale);
set_row (_i++,"@112g%r", &_totale_parziale_raf);
set_row (_i,"@4gRisultato prima delle imposte");
set_row (_i,"@86g%r", &_totale_economico);
set_row (_i++,"@112g%r", &_totale_economico_raf);
_risimp_fatto = FALSE;
}
} }
} }
char app = ' '; char app = ' ';
@ -3661,6 +3673,20 @@ bool CG1600_application::preprocess_stampa_scalare(int counter)
saldostr = _sale.string(); saldostr = _sale.string();
saldo_rafstr = _salerafr.string(); saldo_rafstr = _salerafr.string();
// Faccio passare solo i sottoconti o i conti non dettagliati (che non hanno sottoconti)
// perchè l' importo dei conti dettagliati non è altri che il totale degli importi di
// tutti i suoi sottoconti; dunque se li sommassi anche loro, sommerei l'importo due volte.
// Pero' devo ricordarmi di cambiare ugualmente segno ai conti che vanno dettagliati.
if (g != 0 && c != 0 && s == 0 && conto_dettagliato)
if (_sez_da_stamp == '9')
{
_sale = -_sale;
if (_annoeserafr != 0 || _databilrafr != botime)
_salerafr = -_salerafr;
}
if ((g != 0 && c != 0 && s != 0)||(g != 0 && c != 0 && s == 0 && !conto_dettagliato)) if ((g != 0 && c != 0 && s != 0)||(g != 0 && c != 0 && s == 0 && !conto_dettagliato))
{ {
// if (_sez_da_stamp == '5') // if (_sez_da_stamp == '5')
@ -4896,19 +4922,23 @@ void CG1600_application::init_sort()
bool CG1600_application::user_create() bool CG1600_application::user_create()
{ {
_nditte = new TLocalisamfile (LF_NDITTE); _nditte = new TLocalisamfile (LF_NDITTE);
_comuni = new TLocalisamfile (LF_COMUNI); _comuni = new TLocalisamfile (LF_COMUNI);
_unloc = new TLocalisamfile (LF_UNLOC); _unloc = new TLocalisamfile (LF_UNLOC);
_anag = new TLocalisamfile (LF_ANAG); _anag = new TLocalisamfile (LF_ANAG);
_pconti = new TLocalisamfile (LF_PCON); _pconti = new TLocalisamfile (LF_PCON);
_clifo = new TLocalisamfile (LF_CLIFO); _clifo = new TLocalisamfile (LF_CLIFO);
_saldi = new TLocalisamfile (LF_SALDI); _saldi = new TLocalisamfile (LF_SALDI);
_descr = new TParagraph_string ("",40); _descr = new TParagraph_string ("",40);
_tabivd = new TTable (TAB_IVD); _tabivd = new TTable (TAB_IVD);
_tabesc = new TTable (TAB_ESC); _tabesc = new TTable (TAB_ESC);
_anni_es = new Anni_es();
_sld = new Saldo();
_msk = new TMask("cg1600a");
_msk = new TMask("cg1600a");
return TRUE; return TRUE;
} }
@ -4926,6 +4956,9 @@ bool CG1600_application::user_destroy()
delete _clifo; delete _clifo;
delete _saldi; delete _saldi;
delete _descr; delete _descr;
delete _anni_es;
delete _sld;
return TRUE; return TRUE;
} }

File diff suppressed because it is too large Load Diff

View File

@ -1,104 +1,127 @@
// //
// cg4400.h // cg4400.h
// //
#include <isam.h> #include <isam.h>
#include <printapp.h> #include <printapp.h>
#include <mask.h> #include <mask.h>
#include <tabutil.h> #include <tabutil.h>
#include <utility.h> #include <utility.h>
#include <urldefid.h> #include <urldefid.h>
#include <sheet.h> #include <text.h>
#include <config.h> #include <mailbox.h>
#include <execp.h>
#include <nditte.h> #include <sheet.h>
#include <anagr.h> #include <config.h>
#include <comuni.h> #include <prefix.h>
#include <mov.h> #include <conto.h>
#include <rmoviva.h> #include <nditte.h>
#include <clifo.h> #include <anagr.h>
#include <occas.h> #include <comuni.h>
#include <causali.h> #include <unloc.h>
#include <mov.h>
#include "cglib03.h" #include <rmoviva.h>
#include <clifo.h>
const int TABREG = (int)TTable::name2log("REG"); #include <occas.h>
#include <causali.h>
class CG4400_application : public TPrintapp
{ #include "cglib03.h"
TCursor * _cur;
TRelation *_rel; const int TABREG = (int)TTable::name2log("REG");
TLocalisamfile *_clifo, *_nditte, *_occas, *_tab, *_tabcom, *_com, *_anag;
TTable *_tabreg, *_tablbu, *_tabinl, *_tablim, *_tabpim, *_tablia, *_tabiva; class CG4400_application : public TPrintapp
TRigaiva_array _iva_array, _riga_rmi; {
TTipodoc_array _doc_array; TCursor * _cur;
TRiga_array _tot_iva_array; TRelation *_rel;
TLocalisamfile *_clifo, *_nditte, *_occas, *_tab, *_tabcom, *_com, *_anag, *_unloc, *_attiv;
TBit_array _selected; TTable *_tabreg, *_tablbu, *_tabinl, *_tablim, *_tabpim, *_tablia, *_tabiva;
TArray_sheet *_ditte; TTable *_tabpla, *_tabppa, *_tabvid;
TRigaiva_array _iva_array, _riga_rmi;
TRecnotype _nrec; TTipodoc_array _doc_array;
bool _mov_empty, _stampa_ind_ditta, _stampa_tutti_i_registri, _auto_intraf; TRiga_array _tot_iva_array;
bool _corrispettivi, _esiste_riga_iva;
char _frequiva; TBit_array _selected;
TDate _data_da, _data_a, _data_stampa, _dataregp, _dataregs, _datareg; TArray_sheet *_ditte;
long _n_ditte, _u_stampata, _primast; bool _st_liq[12];
int _fino_a_mese, _tipo_reg, _tipo_stampa, _pagine_stampate; TRecnotype _nrec;
int _annoes, _r, _stampa_width; // riga corrente di stampa bool _mov_empty, _stampa_ind_ditta, _stampa_tutti_i_registri, _auto_intraf, _stampa;
real _totale_doc; bool _corrispettivi, _liquidazione, _riep_liq, _stampa_ind_comp, _esiste_riga_iva, _stampa_cred_pre;
TString _codreg, _desc_lib, _codatt, _attivita; bool _rif_vid, _intesta_vidi, _intesta_liq, _stampa_data_reg, _ok_vidi;
TString _tipodoc, _descr_doc, _codlib; char _frequiva, _tipo_riepilogativo;
TString _cofi,_cap,_paiva,_ragsoc,_comunefis,_provfis,_viafis; TDate _data_da, _data_a, _data_stampa, _dataregp, _dataregs, _datareg;
TDate _u_data;
protected: long _n_ditte, _u_stampata, _primast, __firm, _uprotivap;
const char* desc_attivita (const char * codatt); long _numini, _pagine_stampate;
const char* descr_doc (const char * tipo); int _fino_a_mese, _tipo_reg, _tipo_stampa, _cod_un_loc;
const char* descr_iva (const char * cod); int _annoes, _r, _stampa_width, _mese_ultima_liq, _mese_credito;
const char* ricerca_cf (char tipocf, long codcf); int _stampa_len, _stampa_mese;
const char* ricerca_occ(const char * occ); real _totale_doc, _credito;
int setta_riga (int, const TRigaiva&, real&, real&, real&, real&); TString _codreg, _desc_lib, _codatt, _attivita, _tipoatt;
int riga_rmoviva(); TString _tipodoc, _descr_doc, _codlib, _codice_vidi;
bool set_print(int); TString _cofi,_cap,_paiva,_ragsoc,_comunefis,_provfis,_viafis;
bool set_ditte(TMask&);
bool compila_reg(const TMask&); protected:
bool compila_lib(); const char* desc_attivita ();
bool controlla_liquidazione(); const char* tipo_attivita ();
bool controlla_mov(); const char* descr_doc ();
bool ventilazione(const char*); const char* descr_iva (const char *);
void cerca_reg(const TString&, byte&, TDate&); TRectype& ricerca_occ(const char*);
//void leggi_movimenti(const TDate&, const TString&, bool&); TRectype& ricerca_cf (char, long);
void stampa_registri_IVA(const TMask&); TRectype& look_comuni(const char*);
void set_page_tot_reg(); int setta_riga (int, const TRigaiva&, real&, real&, real&, real&);
void aggiorna_reg(); int riga_rmoviva();
void aggiorna_lib(); bool set_print(int);
void calcola_progressivi(real&, real&, const char*, const int); bool set_ditte(TMask&);
bool user_create(); bool compila_reg(const TMask&);
bool user_destroy(); bool compila_lib();
bool preprocess_page(int, int); bool controlla_liquidazione();
int stampa_intestazione(); bool controlla_mov();
int stampa_prospetto(); bool stampo_liquidazione(int);
void get_dati_ditta(); bool ventilazione(const char*);
void stampa_acquisti(int); bool cerca_libro_gio(TString&);
bool preprocess_print(int, int); bool look_reg (long, int, TString&, int, const char*, int*);
print_action postprocess_print(int, int); bool look_regs(int, TString&, int, int*);
print_action postprocess_page (int, int); bool stampa_totali_finali();
void preprocess_header(); bool stampa_datareg();
bool stampa_registri_IVA(const TMask&);
static bool filter_func (const TRelation * r); void cerca_reg(const TString&, byte*);
void set_page_tot_reg();
static bool mask_firm_to (TMask_field&, KEY); void send_message(char, const TFilename&,int);
static bool mask_cod (TMask_field&, KEY); void aggiorna_reg();
static bool mask_data (TMask_field&, KEY); void aggiorna_lib();
static bool mask_mese (TMask_field&, KEY); void calcola_progressivi();
static bool mask_fino_a_mese (TMask_field&, KEY); bool user_create();
static bool mask_select (TMask_field&, KEY); bool user_destroy();
static bool mask_azzera (TMask_field&, KEY); bool preprocess_page(int, int);
int stampa_intestazione();
public: int stampa_prospetto();
void stampa_plafonds(int);
CG4400_application() : TPrintapp(), _ditte(NULL) {} void get_dati_ditta();
virtual ~CG4400_application() {} void stampa_vidi();
}; int stampa_acquisti(int);
real stampa_valori_plafonds(const real&, const int, TTable&);
bool preprocess_print(int, int);
//print_action postprocess_print(int, int);
print_action postprocess_page (int, int);
void preprocess_header();
static bool filter_func (const TRelation * r);
static bool mask_tipo_stampa (TMask_field&, KEY);
static bool mask_firm_to (TMask_field&, KEY);
static bool mask_cod (TMask_field&, KEY);
static bool mask_libun (TMask_field&, KEY);
static bool mask_data (TMask_field&, KEY);
static bool mask_mese (TMask_field&, KEY);
static bool mask_fino_a_mese (TMask_field&, KEY);
static bool mask_select (TMask_field&, KEY);
static bool mask_azzera (TMask_field&, KEY);
public:
CG4400_application() : TPrintapp(), _ditte(NULL) {}
virtual ~CG4400_application() {}
};

View File

@ -1,27 +1,29 @@
// cg4400a.h // cg4400a.h
// Maschera stampa tabella registri // Maschera stampa tabella registri
#define TIPO_STAMPA 101 #define TIPO_STAMPA 101
#define DATA_STAMPA 102 #define DATA_STAMPA 102
#define CODICE_LIBRO 103 #define CODICE_LIBRO 103
#define DA_DATA 104 #define DA_DATA 104
#define A_DATA 105 #define A_DATA 105
#define FINO_A_MESE 106 #define FINO_A_MESE 106
#define ULTIMA_PAGINA 107 #define ULTIMA_PAGINA 107
#define CODICE_LIBRO_IVA 108 #define CODICE_LIBRO_IVA 108
#define ULTIMO_MESE 109 #define ULTIMO_MESE 109
#define TIPO_RIEPILOGATIVO 110 #define TIPO_RIEPILOGATIVO 110
#define ANNO 111 #define ANNO 111
#define DA_CODICE 112 #define DA_CODICE 112
#define A_CODICE 113 #define A_CODICE 113
#define F_SELECT 114 #define F_SELECT 114
#define F_ANNULLA 115 #define F_ANNULLA 115
#define F_VERIFICA 116 #define F_VERIFICA 116
#define CODICE_LIB_UN 117 #define CODICE_LIB_UN 117
#define MESE 118 #define MESE 118
#define CODICE_LIBRO_PROVA 119 #define CODICE_LIBRO_PROVA 119
#define RIF_VID 120 #define RIF_VID 120
#define STAMPA_WIDTH 121
#define STAMPA_LEN 122

View File

@ -1,255 +1,270 @@
// cg4400a.uml // cg4400a.uml
// Stampa tabella registri // Stampa tabella registri
#include "cg4400a.h" #include "cg4400a.h"
PAGE "Stampa registri IVA" -1 -1 56 18 PAGE "Stampa registri IVA" -1 -1 56 18
LISTBOX TIPO_STAMPA 1 48
LISTBOX TIPO_STAMPA 1 48 BEGIN
BEGIN PROMPT 2 1 "Tipo "
PROMPT 2 1 "Tipo " HELP "Indicare il tipo di stampa da eseguire"
HELP "Indicare il tipo di stampa da eseguire" ITEM "1|Stampa di prova"
ITEM "3|Stampa di prova" MESSAGE SHOW,3@|SHOW,CODICE_LIBRO_PROVA|SHOW,DATA_STAMPA|HIDE,1@|RESET,1@|HIDE,2@|RESET,2@|HIDE,4@|RESET,4@
MESSAGE SHOW,3@|SHOW,CODICE_LIBRO_PROVA|SHOW,DATA_STAMPA|HIDE,1@|RESET,1@|HIDE,2@|RESET,2@ ITEM "2|Libri bollati della ditta"
ITEM "1|Libri bollati della ditta" MESSAGE SHOW,1@|HIDE,CODICE_LIBRO_PROVA|RESET,CODICE_LIBRO_PROVA|HIDE,2@|RESET,2@|HIDE,3@|RESET,3@|HIDE,DATA_STAMPA|HIDE,4@|RESET,4@
MESSAGE SHOW,1@|HIDE,CODICE_LIBRO_PROVA|RESET,CODICE_LIBRO_PROVA|HIDE,2@|RESET,2@|HIDE,3@|RESET,3@|HIDE,DATA_STAMPA ITEM "3|Libri unici dello studio"
ITEM "2|Libri unici dello studio" MESSAGE SHOW,2@|HIDE,1@|RESET,1@|HIDE,3@|RESET,3@|HIDE,DATA_STAMPA|HIDE,CODICE_LIBRO_PROVA|RESET,CODICE_LIBRO_PROVA|HIDE,4@|RESET,4@
MESSAGE SHOW,2@|HIDE,1@|RESET,1@|HIDE,3@|RESET,3@|HIDE,DATA_STAMPA|HIDE,CODICE_LIBRO_PROVA|RESET,CODICE_LIBRO_PROVA ITEM "4|Libri con riferimenti al libro giornale"
ITEM "4|Libri con riferimenti al libro giornale" MESSAGE SHOW,1@|HIDE,CODICE_LIBRO_PROVA|RESET,CODICE_LIBRO_PROVA|HIDE,2@|RESET,2@|HIDE,3@|RESET,3@|HIDE,DATA_STAMPA|HIDE,4@|RESET,4@
MESSAGE SHOW,1@|HIDE,CODICE_LIBRO_PROVA|RESET,CODICE_LIBRO_PROVA|HIDE,2@|RESET,2@|HIDE,3@|RESET,3@|HIDE,DATA_STAMPA END
END
GROUPBOX DLG_NULL 35 5
GROUPBOX DLG_NULL 35 5 BEGIN
BEGIN PROMPT 20 2 "Scelta ditte"
PROMPT 20 2 "Scelta ditte" END
END
NUMBER DA_CODICE 6
NUMBER DA_CODICE 5 BEGIN
BEGIN PROMPT 21 3 "Da codice "
PROMPT 21 3 "Da codice " FLAGS "UR"
HELP "Codice ditta di partenza per la selezione" HELP "Codice ditta di inizio selezione"
USE LF_NDITTE KEY 1 USE LF_NDITTE KEY 1
CHECKTYPE NORMAL //CHECKTYPE NORMAL
INPUT CODDITTA DA_CODICE INPUT CODDITTA DA_CODICE
DISPLAY "Codice" CODDITTA DISPLAY "Codice" CODDITTA
DISPLAY "Ragione sociale@50" RAGSOC DISPLAY "Ragione sociale@50" RAGSOC
OUTPUT DA_CODICE CODDITTA OUTPUT DA_CODICE CODDITTA
END END
NUMBER A_CODICE 5 NUMBER A_CODICE 6
BEGIN BEGIN
PROMPT 21 4 "A codice " PROMPT 21 4 "A codice "
HELP "Codice ditta di fine selezione" FLAGS "UR"
COPY USE DA_CODICE HELP "Codice ditta di fine selezione"
CHECKTYPE NORMAL COPY USE DA_CODICE
INPUT CODDITTA A_CODICE //CHECKTYPE NORMAL
COPY DISPLAY DA_CODICE INPUT CODDITTA A_CODICE
OUTPUT A_CODICE CODDITTA COPY DISPLAY DA_CODICE
END OUTPUT A_CODICE CODDITTA
END
STRING F_SELECT 5
BEGIN STRING F_SELECT 6
PROMPT 21 5 "Scelte n. " BEGIN
FLAGS "D" PROMPT 21 5 "Scelte n. "
END FLAGS "DR"
END
BUTTON DLG_SELECT 9 2
BEGIN BUTTON DLG_SELECT 9 2
PROMPT 42 3 "~Selezione" BEGIN
HELP "Indicare le ditta da selezionare per la stampa" PROMPT 42 3 "~Selezione"
END HELP "Indicare le ditte da selezionare per la stampa"
END
BUTTON F_ANNULLA 9
BEGIN BUTTON F_ANNULLA 9
PROMPT 42 5 "A~zzera" BEGIN
HELP "Togliere la selezione alle ditte" PROMPT 42 5 "A~zzera"
MESSAGE RESET,DA_CODICE|RESET,A_CODICE HELP "Annullare la selezione delle ditte"
END MESSAGE RESET,DA_CODICE|RESET,A_CODICE
END
DATE DATA_STAMPA
BEGIN DATE DATA_STAMPA
PROMPT 28 7 "Data stampa " BEGIN
<<<<<<< cg4400a.uml PROMPT 28 7 "Data stampa "
FLAGS "A" FLAGS "A"
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
WARNING "Inserire la data di stampa" WARNING "Inserire la data di stampa"
======= END
HELP "Data in cui viene stampato il registro"
FLAG "AH" NUMBER ANNO 4
GROUP 3 BEGIN
>>>>>>> 1.14 PROMPT 2 3 "Anno "
END HELP "Anno di cui si vuole stampare il registro"
FLAGS "A"
NUMBER ANNO 4 WARNING "Inserire l'anno"
BEGIN CHECKTYPE REQUIRED
PROMPT 2 3 "Anno " END
HELP "Anno di cui si vuole stampare il registro"
FLAGS "A" STRING CODICE_LIBRO 3
WARNING "Inserire l'anno" BEGIN
CHECKTYPE REQUIRED PROMPT 2 7 "Codice libro "
END HELP "Codice libro di cui si chiede la stampa; nel caso in cui non si indichi nessun codice verranno stampati tutti i libri delle ditte selezionate"
USE REG SELECT (I0<"3") && (S6=="") && (CODTAB[1,4]==#111)
STRING CODICE_LIBRO 3 INPUT CODTAB[1,4] ANNO
BEGIN INPUT CODTAB[5,7] CODICE_LIBRO
PROMPT 2 7 "Codice libro " DISPLAY "Anno " CODTAB[1,4]
HELP "Codice libro di cui si chiede la stampa; nel caso in cui non si indichi nessun codice verranno stampati tutti i libri delle ditte selezionate" DISPLAY "Codice " CODTAB[5,7]
USE REG SELECT (I0<"3") && (S6=="") && (CODTAB[1,4]==#111) DISPLAY "Descrizione @40" S0
INPUT CODTAB[1,4] ANNO OUTPUT ANNO CODTAB[1,4]
INPUT CODTAB[5,7] CODICE_LIBRO OUTPUT CODICE_LIBRO CODTAB[5,7]
DISPLAY "Anno " CODTAB[1,4] //CHECKTYPE NORMAL
DISPLAY "Codice " CODTAB[5,7] FLAGS "UR"
DISPLAY "Descrizione @40" S0 GROUP 1
OUTPUT ANNO CODTAB[1,4] END
OUTPUT CODICE_LIBRO CODTAB[5,7]
//CHECKTYPE NORMAL STRING CODICE_LIBRO_PROVA 3
FLAGS "UZ" BEGIN
GROUP 1 PROMPT 2 7 "Codice libro "
END HELP "Codice libro di cui si chiede la stampa; nel caso in cui non si indichi nessun codice verranno stampati tutti i libri delle ditte selezionate"
USE REG SELECT (I0<"3") && (CODTAB[1,4]==#111)
STRING CODICE_LIBRO_PROVA 3 INPUT CODTAB[1,4] ANNO
BEGIN INPUT CODTAB[5,7] CODICE_LIBRO_PROVA
PROMPT 2 7 "Codice libro " DISPLAY "Anno " CODTAB[1,4]
HELP "Codice libro di cui si chiede la stampa; nel caso in cui non si indichi nessun codice verranno stampati tutti i libri delle ditte selezionate" DISPLAY "Codice " CODTAB[5,7]
USE REG SELECT (I0<"3") && (CODTAB[1,4]==#111) DISPLAY "Descrizione @40" S0
INPUT CODTAB[1,4] ANNO OUTPUT ANNO CODTAB[1,4]
INPUT CODTAB[5,7] CODICE_LIBRO_PROVA OUTPUT CODICE_LIBRO_PROVA CODTAB[5,7]
DISPLAY "Anno " CODTAB[1,4] FLAGS "UR"
DISPLAY "Codice " CODTAB[5,7] END
DISPLAY "Descrizione @40" S0
OUTPUT ANNO CODTAB[1,4] STRING CODICE_LIB_UN 3
OUTPUT CODICE_LIBRO_PROVA CODTAB[5,7] BEGIN
<<<<<<< cg4400a.uml PROMPT 2 7 "Libro unico "
FLAGS "UR" HELP "Codice del libro unico su cui deve essere effettuata la stampa"
======= USE %LBU SELECT CODTAB[1,4]==#111
//CHECKTYPE NORMAL INPUT CODTAB[1,4] ANNO
FLAGS "UZ" INPUT CODTAB[5,7] CODICE_LIB_UN
GROUP 1 DISPLAY "Anno " CODTAB[1,4]
>>>>>>> 1.15 DISPLAY "Codice " CODTAB[5,7]
END DISPLAY "Descrizione @40" S0
OUTPUT ANNO CODTAB[1,4]
STRING CODICE_LIB_UN 3 OUTPUT CODICE_LIB_UN CODTAB[5,7]
BEGIN FLAGS "UR"
PROMPT 2 7 "Libro unico " CHECKTYPE REQUIRED
HELP "Codice del libro unico su cui deve essere effettuata la stampa" WARNING "Inserire il codice del libro unico"
USE %LBU SELECT CODTAB[1,4]==#111 GROUP 2
INPUT CODTAB[1,4] ANNO END
INPUT CODTAB[5,7] CODICE_LIB_UN
DISPLAY "Anno " CODTAB[1,4] GROUPBOX DLG_NULL 52 3
DISPLAY "Codice " CODTAB[5,7] BEGIN
DISPLAY "Descrizione @40" S0 PROMPT 2 8 "Stampa movimenti"
OUTPUT ANNO CODTAB[1,4] END
OUTPUT CODICE_LIB_UN CODTAB[5,7]
FLAGS "UR" DATE DA_DATA
CHECKTYPE REQUIRED BEGIN
WARNING "Inserire il codice del libro unico" PROMPT 3 9 "Dalla data "
GROUP 2 HELP "Data di inizio stampa registro"
END GROUP 3
END
GROUPBOX DLG_NULL 52 3
BEGIN DATE A_DATA
PROMPT 2 8 "Stampa movimenti" BEGIN
END PROMPT 30 9 "Alla data "
HELP "Data di fine stampa registro"
DATE DA_DATA VALIDATE DATE_CMP_FUNC >= DA_DATA
BEGIN WARNING "Inserire una data non inferiore alla data limite inferiore"
PROMPT 5 9 "Dalla data " GROUP 3
HELP "Data di partenza per la stampa del registro" END
GROUP 3
END LISTBOX FINO_A_MESE 10
BEGIN
DATE A_DATA PROMPT 4 9 "Fino al mese "
BEGIN HELP "Mese fino al quale eseguire la stampa"
PROMPT 30 9 "Alla data " FLAGS "M"
HELP "Data di fine per la stampa del registro" GROUP 1
VALIDATE DATE_CMP_FUNC >= DA_DATA END
WARNING "Inserire una data non inferiore alla data limite inferiore"
GROUP 3 LISTBOX MESE 10
END BEGIN
PROMPT 4 9 "Mese "
LISTBOX FINO_A_MESE 10 HELP "Mese di cui eseguire la stampa"
BEGIN FLAGS "M"
PROMPT 5 9 "Fino al mese " GROUP 2
HELP "Mese fino al quale eseguire la stampa" END
FLAGS "M"
GROUP 1 LISTBOX TIPO_RIEPILOGATIVO 11
END BEGIN
PROMPT 2 11 "Tipo riepilogativo "
LISTBOX MESE 10 HELP "Indicare il tipo stampa di liquidazione sul registro"
BEGIN ITEM "P|Del periodo"
PROMPT 5 9 "Mese " ITEM "A|Annuale"
HELP "Mese di cui eseguire la stampa" GROUP 4
FLAGS "M" END
GROUP 2
END GROUPBOX DLG_NULL 35 4
BEGIN
LISTBOX TIPO_RIEPILOGATIVO 11 PROMPT 2 12 "Formato pagina"
BEGIN END
PROMPT 2 11 "Tipo riepilogativo "
HELP "Indicare il periodo di cui si vuole stampare il registro" LISTBOX STAMPA_WIDTH 4
ITEM "P|Del periodo" BEGIN
ITEM "A|Annuale" PROMPT 3 13 "Numero di colonne "
GROUP 1 HELP "Numero di colonne per pagina del modulo di stampa."
END ITEM "1|132"
ITEM "2|198"
LISTBOX ULTIMO_MESE 10 END
BEGIN
PROMPT 2 12 "Ultimo mese stampa su libro unico " NUMBER STAMPA_LEN 3
FLAGS "MD" BEGIN
GROUP 2 PROMPT 3 14 "Numero di righe "
END HELP "Numero di righe per pagina del modulo di stampa. Se non specificato assume 66 righe"
END
NUMBER ULTIMA_PAGINA 4
BEGIN BUTTON DLG_PRINT 10 2
<<<<<<< cg4400a.uml BEGIN
PROMPT 2 13 "Ultimo numero di pagina stampata libro unico " PROMPT -12 -1 "~Stampa"
======= MESSAGE EXIT,K_ENTER
PROMPT 2 12 "Ultimo numero di pagina stampata libro unico " END
HELP "Numero dell'ultima pagina del libro unico stampata"
>>>>>>> 1.14 BUTTON DLG_QUIT 10 2
FLAGS "R" BEGIN
GROUP 2 PROMPT -22 -1 ""
END END
STRING CODICE_LIBRO_IVA 3 ENDPAGE
BEGIN
<<<<<<< cg4400a.uml PAGE "Stampa registri IVA" -1 -1 56 18
PROMPT 2 14 "Eventuale codice libro IVA "
HELP "Se non viene indicato nessun cod. libro IVA, vengono stampati tutti i registri delle ditte selezionate" NUMBER ULTIMA_PAGINA 4
======= BEGIN
PROMPT 2 13 "Eventuale codice libro IVA " PROMPT 2 2 "Ultimo numero di pagina stampata libro unico "
HELP "Libro IVA da stampare. Vuoto = tutti" HELP "Numero dell'ultima pagina del libro unico stampata"
>>>>>>> 1.14 FLAGS "R"
USE REG SELECT (I0<"3") && (S6=="") && (CODTAB[1,4]==#111) GROUP 2
INPUT CODTAB[1,4] ANNO END
INPUT CODTAB[5,7] CODICE_LIBRO_IVA
DISPLAY "Anno " CODTAB[1,4] STRING CODICE_LIBRO_IVA 3
DISPLAY "Codice " CODTAB[5,7] BEGIN
DISPLAY "Descrizione @40" S0 PROMPT 2 3 "Eventuale codice libro IVA "
OUTPUT ANNO CODTAB[1,4] HELP "Libro IVA da stampare. Vuoto = tutti"
OUTPUT CODICE_LIBRO_IVA CODTAB[5,7] USE REG SELECT (I0<"3") && (CODTAB[1,4]==#111)
//CHECKTYPE NORMAL INPUT CODTAB[1,4] ANNO
FLAGS "UZ" INPUT CODTAB[5,7] CODICE_LIBRO_IVA
GROUP 2 DISPLAY "Anno " CODTAB[1,4]
END DISPLAY "Codice " CODTAB[5,7]
DISPLAY "Descrizione @40" S0
BOOLEAN RIF_VID OUTPUT ANNO CODTAB[1,4]
BEGIN OUTPUT CODICE_LIBRO_IVA CODTAB[5,7]
PROMPT 2 15 "Stampa riferimenti vidimazione" //CHECKTYPE NORMAL
GROUP 2 FLAGS "UR"
END GROUP 2
END
BUTTON DLG_PRINT 10 2
BEGIN LISTBOX ULTIMO_MESE 10
PROMPT -12 -1 "~Stampa" BEGIN
MESSAGE EXIT,K_ENTER PROMPT 2 4 "Ultimo mese stampa su libro unico "
END FLAGS "MD"
GROUP 2
BUTTON DLG_QUIT 10 2 END
BEGIN
PROMPT -22 -1 "" BOOLEAN RIF_VID
END BEGIN
PROMPT 2 5 "Stampa riferimenti vidimazione"
ENDPAGE GROUP 4
END
ENDMASK
BUTTON DLG_PRINT 10 2
BEGIN
PROMPT -12 -1 "~Stampa"
MESSAGE EXIT,K_ENTER
END
BUTTON DLG_QUIT 10 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
ENDMASK