#include #include "mglib.h" #include "mg4100.h" #include "movmag.h" #include "rmovmag.h" class TStampa_listamov : public TSkeleton_application { TStampemg_mask * _mask; TForm * _form; int _codicees; bool _raggmag; TString _daart,_aart,_damag,_amag; TDate _dadata,_adata; static TToken_string _filtrocausali; protected: virtual bool create(); virtual bool destroy(); virtual void main_loop(); void setprint_x_mov(); void setprint_x_art(); static bool filtro_causali(const TRelation* r); }; TToken_string TStampa_listamov::_filtrocausali; bool TStampa_listamov::create() { open_files(LF_TAB, LF_TABCOM, LF_MOVMAG, LF_RMOVMAG, LF_ANAMAG, LF_UMART, 0); _mask = new TStampemg_mask("mg4100"); return TSkeleton_application::create(); } bool TStampa_listamov::destroy() { delete _mask; return TSkeleton_application::destroy(); } bool TStampa_listamov::filtro_causali(const TRelation* r) { TString16 currcau = r->curr(LF_RMOVMAG).get(RMOVMAG_CODCAUS); if (currcau.empty()) currcau = r->curr(LF_MOVMAG).get(MOVMAG_CODCAUS); /* TString16 caumag = _filtrocausali.get(0); do { if (caumag==currcau) return TRUE; caumag = _filtrocausali.get(); } while (!caumag.empty()); return FALSE; */ return _filtrocausali.get_pos(currcau) >= 0; } void TStampa_listamov::main_loop() { TRectype darec(LF_RMOVMAG),arec(LF_RMOVMAG); while (_mask->run() == K_ENTER) { if (_mask->magazz_ini().gestmag(TRUE)) { if (_mask->get(F_ORDINE)[0] == 'A') setprint_x_art(); else setprint_x_mov(); _form->print(); delete _form; } } // while true } void TStampa_listamov::setprint_x_mov() { _form = new TForm("mg4100"); TRectype darec(LF_RMOVMAG),arec(LF_RMOVMAG); TSorted_cursor& cur = (TSorted_cursor& )*_form->cursor(); TString sortexp; TString filter,filterart,filtermov; // valuta se va effettuato un fltro su articolo o movs if (_mask->get(F_DAARTICOLO).not_empty()) filterart << "&&(CODART>=\"" << _mask->get(F_DAARTICOLO) << "\")"; if (_mask->get(F_AARTICOLO).not_empty()) filterart << "&&(CODART<=\"" << _mask->get(F_AARTICOLO) << "\")"; if (_mask->get_long(F_DANUM) != 0L) filtermov << "&&(NUMREG>=" << _mask->get_long(F_DANUM) ; if (_mask->get_long(F_ANUM) != 0L) filtermov << "&&(NUMREG<=" << _mask->get_long(F_ANUM) ; if (_mask->get(F_ORDINE)=="D" || filtermov.empty() && !filterart.empty()) cur.setkey(2); else cur.setkey(1); TString16 anno(_mask->get(F_ANNOES)); if (anno.not_empty()) filter << '(' << LF_MOVMAG << "->ANNOES==\""<< anno << "\")"; long codcf = _mask->get_long(F_CODCF); if (codcf != 0) { if (filter.not_empty()) filter << " && "; filter << '(' << LF_MOVMAG << "->TIPOCF==\""<< _mask->get(F_TIPOCF) << "\")"; filter << "&& (" << LF_MOVMAG << "->CODCF==\""<< codcf << "\")"; } if (_mask->get(F_CAU1).not_empty()) { _filtrocausali.cut(0); _filtrocausali.add(_mask->get(F_CAU1)); if (_mask->get(F_CAU2).not_empty()) { _filtrocausali.add(_mask->get(F_CAU2)); if (_mask->get(F_CAU3).not_empty()) { _filtrocausali.add(_mask->get(F_CAU3)); if (_mask->get(F_CAU4).not_empty()) { _filtrocausali.add(_mask->get(F_CAU4)); if (_mask->get(F_CAU5).not_empty()) { _filtrocausali.add(_mask->get(F_CAU5)); if (_mask->get(F_CAU6).not_empty()) _filtrocausali.add(_mask->get(F_CAU6)); } } } } cur.set_filterfunction(filtro_causali); } darec.zero(); arec.zero(); if (_mask->get(F_ORDINE)=="N") { sortexp = _mask->get_bool(F_INVERTI) ? "NUMREG-|NRIG" : "NUMREG|NRIG" ; _form->find_field('B',odd_page,"HEADER_DATA").disable(); // trova il record iniziale E finale if (cur.key() == 1) { darec.put(RMOVMAG_NUMREG,_mask->get(F_DANUM)); arec.put(RMOVMAG_NUMREG,_mask->get(F_ANUM)); filter << filterart; } else { darec.put(RMOVMAG_CODART,_mask->get(F_DAARTICOLO)); arec.put(RMOVMAG_CODART,_mask->get(F_AARTICOLO)); filter << filtermov; } } else { sortexp.cut(0) << LF_MOVMAG << "->DATAREG" << (_mask->get_bool(F_INVERTI) ? "-" : "") << "|NUMREG|NRIG"; _form->find_field('B',odd_page,"HEADER_DATA").show(); // trova il record iniziale E finale if (_mask->get(F_DADATA).not_empty()) filter << "&&(ANSI(" << LF_MOVMAG <<"->DATACOMP)>=ANSI(" << '"' << _mask->get_date(F_DADATA)<< "\"))"; if (_mask->get(F_ADATA).not_empty()) filter << "&&(ANSI(" << LF_MOVMAG <<"->DATACOMP)<=ANSI(" << '"' << _mask->get_date(F_ADATA) << "\"))"; if (cur.key() == 1) { filter << filterart; } else { darec.put(RMOVMAG_CODART,_mask->get(F_DAARTICOLO)); arec.put(RMOVMAG_CODART,_mask->get(F_AARTICOLO)); } } cur.change_order(sortexp); if (filter.left(2) == "&&") filter = filter.mid(2); cur.setfilter(filter,TRUE,1); cur.setregion(darec, arec, 0x2); } void TStampa_listamov::setprint_x_art() { _form = new TForm("mg4100b"); TRectype darec(LF_RMOVMAG),arec(LF_RMOVMAG); TSorted_cursor& cur = (TSorted_cursor& )*_form->cursor(); TString sortexp; TString filter; TString4 anno(_mask->get(F_ANNOES)); if (anno.not_empty()) filter << '(' << LF_MOVMAG << "->ANNOES==\""<< anno << "\")"; long codcf = _mask->get_long(F_CODCF); if (codcf != 0) { if (filter.not_empty()) filter << " && "; filter << '(' << LF_MOVMAG << "->TIPOCF==\""<< _mask->get(F_TIPOCF) << "\")"; filter << "&& (" << LF_MOVMAG << "->CODCF==\""<< codcf << "\")"; } if (_mask->get(F_DAARTICOLO).not_empty()) filter << "&&(CODART>=\"" << _mask->get(F_DAARTICOLO) << "\")"; if (_mask->get(F_AARTICOLO).not_empty()) filter << "&&(CODART<=\"" << _mask->get(F_AARTICOLO) << "\")"; if (_mask->get(F_CAU1).not_empty()) { _filtrocausali.cut(0); _filtrocausali.add(_mask->get(F_CAU1)); if (_mask->get(F_CAU2).not_empty()) { _filtrocausali.add(_mask->get(F_CAU2)); if (_mask->get(F_CAU3).not_empty()) { _filtrocausali.add(_mask->get(F_CAU3)); if (_mask->get(F_CAU4).not_empty()) { _filtrocausali.add(_mask->get(F_CAU4)); if (_mask->get(F_CAU5).not_empty()) { _filtrocausali.add(_mask->get(F_CAU5)); if (_mask->get(F_CAU6).not_empty()) _filtrocausali.add(_mask->get(F_CAU6)); } } } } cur.set_filterfunction(filtro_causali); } darec.zero(); arec.zero(); if (_mask->get(F_ORDINE)=="N") { sortexp="NUMREG|CODART|NRIG"; // trova il record iniziale E finale darec.put(MOVMAG_NUMREG,_mask->get(F_DANUM)); arec.put(MOVMAG_NUMREG,_mask->get(F_ANUM)); _form->find_field('B',odd_page,"HEADER_DATA").disable(); } else { sortexp.cut(0) << LF_MOVMAG << "->DATAREG|NUMREG|CODART|NRIG"; // trova il record iniziale E finale if (_mask->get(F_DADATA).not_empty()) filter << "&&(ANSI(" << LF_MOVMAG <<"->DATACOMP)>=ANSI(" << '"' << _mask->get_date(F_DADATA)<< "\"))"; if (_mask->get(F_ADATA).not_empty()) filter << "&&(ANSI(" << LF_MOVMAG <<"->DATACOMP)<=ANSI(" << '"' << _mask->get_date(F_ADATA) << "\"))"; _form->find_field('B',odd_page,"HEADER_DATA").show(); } cur.change_order(sortexp); if (filter.left(2) == "&&") filter = filter.mid(2); cur.setfilter(filter,TRUE, 1); cur.setregion(darec,arec, 0x2); } int mg4100(int argc, char* argv[]) { TStampa_listamov a;// derivata da Application e con uso di form a.run(argc,argv,TR("Stampa lista movimenti")); return 0; }