#include #include #include #include #include #include #include #include #include "../cg/cg2103.h" #include "../gv/gvlib.h" #include "velib.h" #include "velib07.h" #include #include "ve8.h" #include "ve8100a.h" //////////////////////////////////////////////////////// // MASCHERA //////////////////////////////////////////////////////// class TListaRitFisc_mask : public TAutomask { protected: bool on_field_event(TOperable_field& o, TField_event e, long jolly); public: TListaRitFisc_mask(); virtual ~TListaRitFisc_mask() {} }; bool TListaRitFisc_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; } TListaRitFisc_mask::TListaRitFisc_mask():TAutomask("ve8100") { } //////////////////////////////////////////////////////// // APPLICAZIONE //////////////////////////////////////////////////////// class TListaRitFisc : public TSkeleton_application { protected: virtual void main_loop(); public: bool crea_righe(const TListaRitFisc_mask& m) const; }; bool TListaRitFisc::crea_righe(const TListaRitFisc_mask& m) const { // cerca abi e cab della ditta const TString& abi = m.get(F_CODABI); const TString& cab = m.get(F_CODCAB); const TDate datascad = m.get(F_DATASCAD); int err=NOERR; TLocalisamfile righe(LF_RIGHEF24); TDocument_recordset rdoc("USE RDOC\nSELECT (TIPORIGA=='04')&&(110@->S10!='')&&(33.NDOC>=#DANUM)&&(33.NDOC<=#ANUM)\nJOIN SPP ALIAS 110 INTO CODTAB=CODART\nJOIN DOC INTO PROVV=PROVV ANNO=ANNO CODNUM=CODNUM NDOC=NDOC\nFROM CODNUM=#NUM\nTO CODNUM=#NUM"); TVariant var; var = m.get(F_NUMINI); rdoc.set_var("#DANUM", var); var = m.get(F_NUMFIN); rdoc.set_var("#ANUM", var); var = m.get(F_CODNUM); rdoc.set_var("#NUM", var); // calcolo importo e chiedo conferma all'operatore const TRecordset& curr = rdoc; real totale = ZERO; for (bool ok = rdoc.move_first(); ok; ok = rdoc.move_next()) totale += curr.get("RDOC.RITENUTA").as_real(); err = NOERR; if (yesno_box("Verranno generate %d righe per un importo di %s euro. Si desidera creare le righe?", rdoc.items(), totale.string())) { long cont = get_next_progr_f24(); long numf24 = get_next_f24(); // trucco per poter usare la get (nei TDocument_recordset la get ha 2 par. ed e' protected!) for (bool ok1 = rdoc.move_first(); ok1; ok1 = rdoc.move_next()) { righe.zero(); righe.put("PROGR", cont++); righe.put("F24", numf24++); righe.put("TRIBUTO", curr.get("SPP.S10").as_string()); righe.put("TIPOINTEST", 'C'); righe.put("INTEST", curr.get("DOC.CODCF").as_int()); righe.put("DESCR", "Riga generata"); righe.put("IMPORTODEB", curr.get("RDOC.RITENUTA").as_real()); righe.put("ABI", abi); righe.put("CAB", cab); righe.put("DATASCAD", datascad); err = righe.write(); } } return (err==NOERR); } void TListaRitFisc::main_loop() { TListaRitFisc_mask m; // cerca abi e cab della ditta const TString& abi = prefix().firm().get(NDT_ABIBAN); const TString& cab = prefix().firm().get(NDT_CABBAN); m.set(F_CODABI, abi); m.set(F_CODCAB, cab); KEY key = K_ENTER; while (key != K_QUIT) { key = m.run(); switch (key) { case K_SAVE: crea_righe(m); break; case K_QUIT: break; case K_ENTER: { //report e book dei report TDocument_report rep; rep.load("ve8100a"); TRecordset * r = rep.recordset(); if (r != NULL) { TVariant var; var = m.get(F_NUMINI); r->set_var("#DANUM", var); var = m.get(F_NUMFIN); r->set_var("#ANUM", var); var = m.get(F_CODNUM); r->set_var("#NUM", var); } TReport_book book; book.add(rep); book.print_or_preview(); //stampa il book dei report } } } } int ve8100(int argc, char* argv[]) { TListaRitFisc a; a.run(argc, argv, TR("Lista ritenute per F24")); return 0; }