#include #include #include #include #include "co1.h" #include "co1300a.h" #include #include "..\ve\velib.h" #include "..\ve\velib07.h" //////////////////////////////////////////////////////// // MASCHERA //////////////////////////////////////////////////////// class TEstrattoConto_mask : public TAutomask { protected: bool on_field_event(TOperable_field& o, TField_event e, long jolly); public: TEstrattoConto_mask(); virtual ~TEstrattoConto_mask() {}; }; TEstrattoConto_mask::TEstrattoConto_mask() :TAutomask ("co1300a") { } bool TEstrattoConto_mask::on_field_event(TOperable_field& f, TField_event e, long jolly) { return TRUE; } //////////////////////////////////////////////////////// // REPORT //////////////////////////////////////////////////////// class TEstrattoConto_rep : public TDocument_report { protected: virtual bool use_mask() {return false;} }; //////////////////////////////////////////////////////// // APPLICAZIONE //////////////////////////////////////////////////////// struct TRiga_totale { TString80 _descr; real _qta; real _acc; real _impcredito; real _impdebito; }; class TEstrattoConto : public TSkeleton_application { public: virtual void main_loop(); }; void TEstrattoConto::main_loop() { TEstrattoConto_mask m; while (m.run() == K_ENTER) { TReport_book book; TEstrattoConto_rep rep; rep.load("co1300a"); const TDate dataini = m.get_date(F_DATAINI); const TDate datafin = m.get_date(F_DATAFIN); const int anno = dataini.year(); // creo recordset dei soci da stampare TISAM_recordset soci("USE SOCICOOP\nFROM CODCF=#DASOCIO\nTO CODCF=#ASOCIO"); soci.set_var("#DASOCIO", m.get_long(F_DASOCIO)); soci.set_var("#ASOCIO", m.get_long(F_ASOCIO)); for (bool ok = soci.move_first(); ok; ok = soci.move_next()) { TRecordset * r = rep.recordset(); long codcf = soci.get(SC_CODCF).as_int(); r->set_var("#SOCIO", soci.get("CODCF")); r->set_var("#ANNO", TVariant(long(anno))); r->set_var("#DATAINI", dataini); r->set_var("#DATAFIN", datafin); // calcolo totali per articolo TAssoc_array totali_art; TReport_section& body2 = rep.section('B', 12); for (bool ok = r->move_first(); ok; ok = r->move_next()) { TRecordset* rr = rep.section('B', 11).recordset(); for (bool okr = rr->move_first(); okr; okr = rr->move_next()) { const TString& codart = rr->get(RDOC_CODART).as_string(); TRiga_totale* rt = (TRiga_totale*) totali_art.objptr(codart); if (rt == NULL) { rt = new TRiga_totale; rt->_descr = rr->get(RDOC_DESCR).as_string(); totali_art.add(codart, (TObject*) rt); } // sommare qta e importi real qta = rr->get(RDOC_QTA).as_real(); rt->_qta += qta; } } // devo passare il recordset al report TCSV_recordset csv(""); FOR_EACH_ASSOC_OBJECT(totali_art, o, k, it) { TRiga_totale& rt = (TRiga_totale&) *it; csv.new_rec(""); TVariant descr = rt._descr; csv.set(0, descr); csv.set(1, rt._qta); } body2.set_recordset(&csv); book.add(rep); } book.print_or_preview(); } } int co1300(int argc, char* argv[]) { TEstrattoConto a; a.run(argc, argv, TR("Stampa estratto conto")); return 0; }