#include #include #include #include #include #include #include #include #include #include #include "..\ve\velib.h" #include "pg0388.h" #include "pg0388100a.h" class TPG0388100_file: public TFile_text { protected: virtual void validate(TCursor& cur,TRecord_text &rec, TToken_string &val, TString& str); public: TPG0388100_file(const TString& file_name, const TString& config_name); virtual ~TPG0388100_file() { } }; TPG0388100_file::TPG0388100_file(const TString& file_name, const TString& config_name) : TFile_text(file_name, config_name) { } class TPG0388100_mask : public TAutomask { protected: bool on_field_event(TOperable_field& o, TField_event e, long jolly); public: TPG0388100_mask(); virtual ~TPG0388100_mask(){}; }; TPG0388100_mask::TPG0388100_mask() :TAutomask ("pg0388100a") { } bool TPG0388100_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) { return TRUE; } class TPG0388100 : public TSkeleton_application { TCursor* _cur; TPG0388100_mask* _msk; TDate _dataini, _datafin; TPG0388100_file* _trasfile; TConfig* _configfile; long _nrecords; virtual const char * extra_modules() const {return "ve";} protected: virtual bool create(void); virtual bool destroy(void); virtual void main_loop() ; void elabora_documenti(); public: const long nrecords() { return _nrecords;}; TConfig configfile() {return *_configfile;}; TPG0388100() {} ; virtual ~TPG0388100() {} ; }; // restituisce un riferimento all' applicazione inline TPG0388100& app() { return (TPG0388100&) main_app();} // gestione dei messaggi estesi nei campi void TPG0388100_file::validate(TCursor& cur,TRecord_text &rec, TToken_string &s, TString& str) { const TString code(s.get(0)); TString valore; if (code == "_FISSO") { // gestione dei campi fissi // sintassi: _FISSO,! // dove: è la stringa fissa da emettere TString in(s.get()); CHECK(in[0]=='!',"Macro _FISSO senza carattere '!'"); in.ltrim(1); in.trim(); valore = in; } else if (code == "_TELEFONO") { valore = cur.curr(LF_CLIFO).get("PTEL"); valore << " "; valore << cur.curr(LF_CLIFO).get("TEL"); } else if (code == "_VIRTUALE") { TString in(s.get()); valore = cur.curr().get(in); } else if (code == "_ANNO") { TString in(s.get()); TDate data = cur.curr().get(in); in = data.string(); valore = in.mid(8,2); } else if (code == "_MESE") { TString in(s.get()); TDate data = cur.curr().get(in); in = data.string(); valore = in.mid(3,2); } else if (code == "_PARAMETRI") { TString in(s.get()); valore = app().configfile().get(in); } else if (code == "_OGGI") { TDate data(TODAY); valore = data.string(brief, '-', full, full, amg_date); valore.strip("-"); } else if (code == "_ADESSO") { char time[128]; _strtime(time); valore.format("%s", time); valore.strip(":"); } else if (code == "_NRECORDS") { valore.format("%ld", app().nrecords()); } else NFCHECK("Macro non definita: %s", (const char *)code); str = valore; } bool TPG0388100::create() { open_files(LF_DOC, LF_CLIFO, LF_COMUNI, LF_CFVEN, 0); _msk = new TPG0388100_mask(); _trasfile = NULL; _configfile = new TConfig("pg0388100a.ini", "TRASFERIMENTO"); return TSkeleton_application::create(); } bool TPG0388100::destroy() { if (_trasfile) delete _trasfile; if (_configfile) delete _configfile; delete _msk; return TSkeleton_application::destroy(); } void TPG0388100::main_loop() { TFilename filename = _configfile->get("NOMEFILE"); if (filename.exist()) remove(filename); while (_msk->run()!=K_QUIT) { _trasfile = new TPG0388100_file(filename, "pg0388100.ini"); _trasfile->open(filename,'w'); _trasfile->force_record_separator(TRUE); // _dataini = _msk->get_date(F_DATAINI); // _datafin = _msk->get_date(F_DATAFIN); elabora_documenti(); _trasfile->close(); delete _trasfile; _trasfile = NULL; } } void TPG0388100::elabora_documenti() { /* TSheet_field& sheet = _msk->sfield(F_SHEETDOC); TRelation doc_rel(LF_DOC); doc_rel.add(LF_CLIFO, "TIPOCF==TIPOCF|CODCF==CODCF"); doc_rel.add(LF_COMUNI, "COM==COMCF", 1, LF_CLIFO); TRectype da(LF_DOC); TRectype a(LF_DOC); const long items = sheet.items(); if (items > 0) { bool ok = TRUE; TString16 codnum; TString filt_expr; da.put("DATADOC", _dataini); a.put("DATADOC", _datafin); filt_expr << "("; FOR_EACH_SHEET_ROW(sheet, r, row) { codnum = row->get(0); if (codnum.not_empty()) { filt_expr << "(CODNUM==\""; filt_expr << codnum << "\")||"; } } filt_expr.rtrim(2); filt_expr << ")"; doc_rel.lfile().set_curr(new TDocumento); _cur = new TCursor(&doc_rel,filt_expr,3,&da,&a); const long cur_items = _cur ->items(); // Scorre tutti i documenti che rientrano nell'intervallo selezionato _nrecords = cur_items; if (cur_items != 0) { // scrivo il record 01 testata bolla TRecord_text rech; rech.set_type("01"); _trasfile->autoload(rech, *_cur); _trasfile->write(rech); _cur->freeze(); for (*_cur = 0; _cur->pos() < cur_items; ++(*_cur)) { TRecord_text rec; rec.set_type("02"); _trasfile->autoload(rec, *_cur); _trasfile->write(rec); } TRecord_text recf; recf.set_type("03"); _trasfile->autoload(recf, *_cur); _trasfile->write(recf); } delete _cur; }*/ } int pg0388100(int argc, char **argv) { TPG0388100 a; a.run(argc, argv, "Trasmissione ordini"); return 0; }