#include #include #include #include #include #include #include #include #include "../cg/cg2103.h" #include "velib.h" #include "ve1.h" #include "ve1500.h" //////////////////////////////////////////////////////// // MASCHERA //////////////////////////////////////////////////////// class TStampa_contab_docs_mask : public TAutomask { protected: bool on_field_event(TOperable_field& o, TField_event e, long jolly); public: TStampa_contab_docs_mask(); virtual ~TStampa_contab_docs_mask() {} }; bool TStampa_contab_docs_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) { bool ok = true; /* switch (o.dlg()) { case : if (e == fe_init || e == fe_modify) { } break; default: break; }*/ return ok; } TStampa_contab_docs_mask::TStampa_contab_docs_mask() :TAutomask("ve1500") {} /////////////////////////////////////////////////////////////// // RECORDSET /////////////////////////////////////////////////////////////// class TStampa_contab_docs_recordset : public TISAM_recordset { public: void set_filter(const int anno, const TString& codnum); TStampa_contab_docs_recordset(const TString& sql) : TISAM_recordset(sql) { } }; static const TStampa_contab_docs_recordset* myself = NULL; //metodo per caricare i valori nel recordset dalla maschera...fighissimo!! void TStampa_contab_docs_recordset::set_filter(const int anno, const TString& codnum) { //mette il valore delle variabili nel report set_var("#CODNUM", TVariant(codnum)); set_var("#ANNO", TVariant(long(anno))); } //////////////////////////////////////////////////////// // REPORT //////////////////////////////////////////////////////// class TStampa_contab_docs_rep : public TReport { protected: virtual bool get_usr_val(const TString& name, TVariant& var) const; public: void set_filter(const int anno, const TString& codnum); }; void TStampa_contab_docs_rep::set_filter(const int anno, const TString& codnum) { ((TStampa_contab_docs_recordset*) recordset())->set_filter(anno, codnum); } bool TStampa_contab_docs_rep::get_usr_val(const TString& name, TVariant& var) const { return TReport::get_usr_val(name, var); } //////////////////////////////////////////////////////// // APPLICAZIONE //////////////////////////////////////////////////////// class TStampa_contab_docs : public TSkeleton_application { TString_array _codnums; protected: void cerca_numerazioni_valide(const int anno); virtual void main_loop(); }; //scan di tutte le numerazioni;per ognuna di esse scan dei tipi collegati;se almeno uno di questi.. //..presenta una causale contabile (generale e/o analitica) -> la numerazione in questione viene.. //..presa in considerazione nella stampa del report! void TStampa_contab_docs::cerca_numerazioni_valide(const int anno) { _codnums.destroy(); TTable num("%NUM"); //giro sulle numerazioni for (int err = num.first(); err == NOERR; err = num.next()) { const TCodice_numerazione codnum(num.curr()); //giro sui tipidoc collegati for (int t = codnum.ntipi_doc()-1; t >= 0; t--) { const TString4 td = codnum.tipo_doc(t); const TTipo_documento& tpd = cached_tipodoc(td); //causale collegata al tipo doc const TString& codcaus = tpd.causale(); //se la causale non è vuota, la numerazione va considerata if (codcaus.not_empty()) { _codnums.add(codnum.codice()); break; /* //crea l'oggetto causale per chiedergli se è legata all'analitica (quindi anale) const TCausale caus(codcaus, anno); const bool anale = caus.link_analitica();*/ } } //for(int t =... } //for(num.first() } void TStampa_contab_docs::main_loop() { TStampa_contab_docs_mask mask; while (mask.run() == K_ENTER) { //report e book dei report TReport_book book; TStampa_contab_docs_rep rep; rep.load("ve1500a"); //crea l'elenco delle numerazioni da considerare e lo mette in _codnums const int anno = mask.get_int(F_ESERCIZIO); cerca_numerazioni_valide(anno); FOR_EACH_ARRAY_ROW(_codnums, i, row) { rep.set_filter(anno, *row); //passa alla set_filter anche la numerazione corrente book.add(rep); } book.print_or_preview(); //stampa il book dei report } } int ve1500(int argc, char* argv[]) { TStampa_contab_docs a; a.run(argc, argv, TR("Stampa di controllo documenti contabilizzati")); return 0; }