#include #include #include #include #include #include #include #include #include "ct0100a.h" //////////////////////////////////////////////////////// // MASCHERA //////////////////////////////////////////////////////// class TPrint_CUP_mask : public TAutomask { protected: virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); public: TPrint_CUP_mask(); }; TPrint_CUP_mask::TPrint_CUP_mask() : TAutomask("ct0100a") { } bool TPrint_CUP_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) { switch(o.dlg()) { case DLG_PRINT: if (e == fe_button) { main_app().print(); return false; } break; case DLG_PREVIEW: if (e == fe_button) { main_app().preview(); return false; } break; default: break; } return true; } //////////////////////////////////////////////////////// // REPORT //////////////////////////////////////////////////////// //i report in questione (sono 8) hanno la query inside.. //..e non necessitano di altro che i FIELD #... dei campi della maschera per avere i valori.. //..delle set_var interne class TPrint_CUP_report : public TReport { protected: virtual bool use_mask() { return false; } //questo ci vuole perchè la maschera ha un nome != dai report public: TPrint_CUP_report() {} }; //////////////////////////////////////////////////////// // APPLICAZIONE //////////////////////////////////////////////////////// class TPrint_CUP : public TSkeleton_application { TPrint_CUP_mask* _mask; protected: virtual void print(); virtual void preview(); virtual void print_or_preview(const bool stampa); public: virtual void main_loop(); }; //fantastico metodo per gestire stampa o anteprima void TPrint_CUP::print_or_preview(const bool stampa) { if (_mask->check_fields()) { //crea il nome del report da usare in base alle scelte di stampa (radiobuttons) //schema dei reports classe ct0100xx: //M1 = movimenti per cup-cig M2 = movimenti per clifo //D1 = documenti // D2 = documenti // //E1 = effetti // E2 = effetti // //R1 = rilevazione // R2 = rilevazione // const TString& tipo_archivio = _mask->get(F_ARCHIVI); const TString& tipo_ordinamento = _mask->get(F_ORDINAMENTO); TString rep_name = "ct0100"; rep_name << tipo_archivio << tipo_ordinamento; TPrint_CUP_report rep; rep.load(rep_name); rep.mask2report(*_mask); //setta i valori della maschera sul report //solo per la ricerca in RMOV if (tipo_archivio == "M") { long from_nreg = 0L; long to_nreg = 0L; const TDate dataini = _mask->get_date(F_DADATA); const TDate datafine = _mask->get_date(F_ADATA); if (dataini.ok() || datafine.ok()) { TLocalisamfile mov(LF_MOV); mov.setkey(2); mov.put(MOV_DATAREG, dataini); for (int err = mov.read(_isgteq); err == NOERR; err = mov.read(_isnext)) { const TDate date = mov.get(MOV_DATAREG); if (date < dataini) continue; // Should never happen if (datafine.ok() && date > datafine) break; const long nreg = mov.get_long(MOV_NUMREG); if (nreg < from_nreg || from_nreg <= 0) from_nreg = nreg; if (nreg > to_nreg) to_nreg = nreg; } } rep.recordset()->set_var("#DANUMREG", from_nreg); rep.recordset()->set_var("#ANUMREG", to_nreg); } //if (tipo_archivio == "M")... TReport_book book; book.add(rep); book.print_or_preview(); } } void TPrint_CUP::print() { print_or_preview(true); } void TPrint_CUP::preview() { print_or_preview(false); } void TPrint_CUP::main_loop() { _mask = new TPrint_CUP_mask; _mask->run(); delete _mask; _mask = NULL; } int ct0100(int argc, char* argv[]) { TPrint_CUP a; a.run(argc, argv, TR("Stampa tracciabilità CUP")); return 0; }