diff --git a/mg/mg3300.cpp b/mg/mg3300.cpp index 90ff24d6c..2c8790024 100755 --- a/mg/mg3300.cpp +++ b/mg/mg3300.cpp @@ -1,174 +1,665 @@ #include #include -#include "mglib05.h" //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! #include #include #include #include #include #include -#include "mglib01.h" +#include +#include + +#include "mglib03.h" #include "mg3300.h" +class TForm_schedemag : public TForm +{ + int _tolivgiac,_tolivart; + bool _sottocatmer; -#include "mglib04.h" + TToken_string *_rmov_sortexp; + TString *_rmov_raggcond,*_rmov_joinexp; + + TCausale_magazzino * _cau; // causale di magazzino del movimento corrente + TMag_livelli * _giaclev,*_artlev; // gestori dei gruppi articolo/giacenza + TDecoder *_giacgrp,*_artgrp; // decodifiche dei gruppi articolo/giacenza + TTipo_saldomag _tiposcheda; // tipo scheda + + bool ragg_exprs(int livart,int livgiac); +public: + TToken_string& rmov_sortexp() {return *_rmov_sortexp;} + TString & rmov_joinexp() {return *_rmov_joinexp;} + + void set_tiposcheda(const char * tipo); + bool validate(TForm_item &cf, TToken_string &s); + void setdett_perart(bool percatmer, bool sottocatmer,int livart,int livgiac,bool sudd_mag, bool sudd_dep); + void setdett_percatmer(bool sottocat,int livart,int livgiac,bool sudd_mag,bool sudd_dep); + void setdett_permag(bool sudd_dep, bool showdett,int livart,int livgiac); + TString descr_tiposcheda(); + TString nomecampo_tiposcheda(); + + TForm_schedemag(const char *name,const char *code) ; + ~TForm_schedemag(); +}; + +TString TForm_schedemag::descr_tiposcheda() +{ + switch (_tiposcheda) + { + case s_giac: + return ("Giacenza"); + case s_acl: + return ("A conto lavoro"); + case s_incl: + return ("In conto lavoro"); + case s_prodc: + return ("In produzione componenti"); + case s_prodf: + return ("In produzione finiti"); + case s_ordc: + return ("Ordinato clienti"); + case s_ordf: + return ("Ordinato fornitori"); + } + return ""; +} + +TString TForm_schedemag::nomecampo_tiposcheda() +{ + switch (_tiposcheda) + { + case s_giac: + return ("GIAC"); + case s_acl: + return ("ACL"); + case s_incl: + return ("INCL"); + case s_prodc: + return ("PRODCOMP"); + case s_prodf: + return ("PRODFIN"); + case s_ordc: + return ("ORDC"); + case s_ordf: + return ("ORDF"); + } + return ""; +} + +bool TForm_schedemag::validate(TForm_item &cf, TToken_string &s) +{ + const TString code(s.get(0)); // prende il primo parametro, il codice del messaggio + TString subcode; + + if (code=="_USER") { + subcode=s.get(); + if (subcode=="*SEGNOCAUS") { + real v(cf.get()); + v=v*_cau->sgn(_tiposcheda); + cf.set(v.string()); + return TRUE; + } + if (subcode=="TIPOSCHEDA") { + cf.set(descr_tiposcheda()); + return TRUE; + } + if (subcode=="CODGRUPPOART") { + TString valore(relation()->lfile(LF_ANAMAG).get("CODART")); + cf.set(valore.cut(min(valore.len(),_artlev->packed_lenght(_tolivart)))); + return TRUE; + } + if (subcode=="GRUPPOART") { + TString valore; + if (_tolivart==_artlev->last_level()) + valore=relation()->lfile(LF_ANAMAG).get("DESCR"); + else + valore=(_artgrp->decode(_artlev->build_tabcode(relation()->lfile(LF_ANAMAG).get("CODART"),_tolivart))); + cf.set(valore); + return TRUE; + } + if (subcode=="CODGRUPPOGIAC") { + TString levname(_giaclev->name(_tolivgiac)),valore; + int lv=0; + valore=""; + do { + TString piece(_giaclev->unpack_grpcode(relation()->lfile(LF_RMOVMAG).get("LIVGIAC"),lv+1)); + if (piece.empty()) + piece=UNKNOWN_NAME; + if (valore.not_empty()) + valore << '/'; + valore << piece ; + } while (++lv<_tolivgiac); + cf.set(levname << ' ' << valore); + } + if (subcode=="GRUPPOGIAC") { + TString valore; + valore=_giacgrp->decode(_giaclev->build_tabcode(relation()->lfile(LF_RMOVMAG).get("LIVGIAC"),_tolivgiac)); + cf.set(valore); + return TRUE; + } + if (subcode=="SETCAUSALE") { + if (_cau) delete _cau; + _cau = new TCausale_magazzino(cf.get()); + return TRUE; + } + if (subcode=="CODCATMER") { + TString valore(relation()->lfile(LF_ANAMAG).get("GRMERC")); + if (!_sottocatmer) + valore.cut(3); + cf.set(valore); + return TRUE; + } + if (subcode=="CATMER") { + TString valore; + if (_sottocatmer) + valore=relation()->lfile(-ALIAS_SOTTOCATMER).get("S0"); + else + valore=relation()->lfile(-ALIAS_CATMER).get("S0"); + cf.set(valore); + return TRUE; + } + } + return TForm::validate(cf, s); +} + + +bool TForm_schedemag::ragg_exprs(int livart,int livgiac) +{ + TString piece,rest; + // *********** + int tolivart,tolivgiac; + + tolivart =livart ? livart :_artlev->last_level() ; + tolivgiac=livgiac ? livgiac :_giaclev->last_level(); + // sezioni livello codice + piece="CODART"; + piece << "[1," << _artlev->packed_lenght(tolivart) <<']'; + *_rmov_raggcond<< (_rmov_raggcond->empty()? "":"+" )<add(piece); + _rmov_joinexp->cut(0) << piece << "==" << piece; + if (livart==0) + { + piece="LIVGIAC"; + piece << "[1," << _giaclev->packed_lenght(tolivgiac) <<']'; + *_rmov_raggcond << '+' << piece; + _rmov_sortexp->add(piece); + } + + return TRUE; +} + + +void TForm_schedemag::setdett_percatmer(bool sottocat,int livart,int livgiac,bool sudd_mag,bool sudd_dep) +{ + TForm_subsection &h_c=(TForm_subsection &)find_field('B',odd_page,"HEADER_CATMER"); + h_c.enable(); + TForm_subsection &h_a=(TForm_subsection &)find_field('B',odd_page,"HEADER_ARTICOLO"); + h_a.enable(); + TForm_subsection &h_g=(TForm_subsection &)find_field('B',odd_page,"HEADER_LIVGIAC"); + h_g.enable((livart ==0 || livgiac !=0 )); + TForm_subsection &h_m=(TForm_subsection &)find_field('B',odd_page,"HEADER_MAG"); + h_m.enable(sudd_mag ); + TForm_subsection &h_d=(TForm_subsection &)find_field('B',odd_page,"HEADER_DEP"); + h_d.enable(sudd_dep); + + TString piece; + piece << LF_ANAMAG << "->GRMERC"; + if (!sottocat) + piece << "[1,3]"; + + *_rmov_raggcond=piece; + _rmov_sortexp->add(piece); + + ragg_exprs(livart,livgiac); + if (sudd_mag) { + *_rmov_raggcond="+CODMAG[1,3]"; + _rmov_sortexp->add("CODMAG[1,3]"); + if (sudd_dep) { + *_rmov_raggcond << "+CODMAG[4,5]"; + _rmov_sortexp->add("CODMAG[4,5]"); + } + } + + TForm_subsection &s=(TForm_subsection &)find_field('B',odd_page,"GRUPPI_RMOVMAG"); + s.setcondition(*_rmov_raggcond,_strexpr); + + TString cond; + cond << LF_MOVMAG << "->DATAREG"; + _rmov_sortexp->add(cond); + _rmov_sortexp->add("NUMREG"); + + _tolivart=livart ? livart :_artlev->last_level() ; + _tolivgiac=livgiac ? livgiac :_giaclev->last_level(); + _sottocatmer=sottocat; +} + +void TForm_schedemag::setdett_permag(bool sudd_dep,bool show_dett,int livart,int livgiac) +{ + TForm_subsection &h_d=(TForm_subsection &)find_field('B',odd_page,"HEADER_DEP"); + h_d.enable(sudd_dep); + TForm_subsection &h_a=(TForm_subsection &)find_field('B',odd_page,"HEADER_ARTICOLO"); + h_a.enable(show_dett); + TForm_subsection &h_g=(TForm_subsection &)find_field('B',odd_page,"HEADER_LIVGIAC"); + h_g.enable((livart ==0 || livgiac !=0 )); + + *_rmov_raggcond="CODMAG[1,3]"; + _rmov_sortexp->add("CODMAG[1,3]"); + if (sudd_dep) + { + *_rmov_raggcond << "+CODMAG[4,5]"; + _rmov_sortexp->add("CODMAG[4,5]"); + if (show_dett) + { + ragg_exprs(livart,livgiac); + } + } + + TForm_subsection &s=(TForm_subsection &)find_field('B',odd_page,"GRUPPI_RMOVMAG"); + s.setcondition(*_rmov_raggcond,_strexpr); + + TString cond; + cond << LF_MOVMAG << "->DATAREG"; + _rmov_sortexp->add(cond); + _rmov_sortexp->add("NUMREG"); + + _tolivart=livart ? livart :_artlev->last_level() ; + _tolivgiac=livgiac ? livgiac :_giaclev->last_level(); +} + +void TForm_schedemag::setdett_perart(bool percatmer,bool sottocatmer,int livart,int livgiac,bool sudd_mag,bool sudd_dep) +{ + // raggruppamento MAX fino all'articolo + TForm_subsection &h_cm=(TForm_subsection &)find_field('B',odd_page,"HEADER_CATMER"); + h_cm.enable(percatmer); + TForm_subsection &h_cm2=(TForm_subsection &)find_field('B',odd_page,"HEADER_LIVGIACCATMER"); + h_cm2.enable(percatmer); + + TForm_subsection &h_a=(TForm_subsection &)find_field('B',odd_page,"HEADER_ARTICOLO"); + h_a.enable(livart!=0); + TForm_subsection &t_a=(TForm_subsection &)find_field('B',odd_page,"TOTALI_GRUPPIART"); + t_a.show(livart!=0); + + // raggruppamento MAX fino alla giacenza + TForm_subsection &h_g=(TForm_subsection &)find_field('B',odd_page,"HEADER_LIVGIAC"); + h_g.enable((livart ==0 || livgiac !=0 )); + TForm_subsection &h_m=(TForm_subsection &)find_field('B',odd_page,"HEADER_MAG"); + h_m.enable(sudd_mag ); + TForm_subsection &h_d=(TForm_subsection &)find_field('B',odd_page,"HEADER_DEP"); + h_d.enable(sudd_dep); + + TForm_subsection &t_s=(TForm_subsection &)find_field('B',odd_page,"TOTALI_GRMOV"); + t_s.show(livart==0); + + _tolivart=livart ? livart :_artlev->last_level() ; + _tolivgiac=livgiac ? livgiac :_giaclev->last_level(); + _sottocatmer=sottocatmer; + + // settaggio catmer/ragg codice + if (livart || percatmer) { + TForm_subsection &s=(TForm_subsection &)find_field('B',odd_page,"GRUPPI_ARTICOLO"); + TString catmercod("GRMERC"),cond; + if (percatmer) { + catmercod << (sottocatmer ? "[1,3]" :""); + cond << catmercod << '+'; + } + cond << "CODART[1," << _artlev->packed_lenght(_tolivart) << ']'; + s.setcondition(cond,_strexpr); + } + // settaggio raggruppamenti codice sulla scheda + ragg_exprs(livart,livgiac); + if (sudd_mag) { + *_rmov_raggcond << "+CODMAG[1,3]"; + _rmov_sortexp->add("CODMAG[1,3]"); + if (sudd_dep) + { + *_rmov_raggcond << "+CODMAG[4,5]"; + _rmov_sortexp->add("CODMAG[4,5]"); + } + } + TForm_subsection &s=(TForm_subsection &)find_field('B',odd_page,"GRUPPI_RMOVMAG"); + s.setcondition(*_rmov_raggcond,_strexpr); + TString cond; + cond << LF_MOVMAG << "->DATAREG"; + _rmov_sortexp->add(cond); + _rmov_sortexp->add("NUMREG"); +} + +void TForm_schedemag::set_tiposcheda(const char * tipo) +{ + if (*tipo=='G') + _tiposcheda=s_giac; + if (*tipo=='A') + _tiposcheda=s_acl; + if (*tipo=='I') + _tiposcheda=s_incl; + if (*tipo=='P') + { + if (tipo[1]=='F') + _tiposcheda=s_prodf; + else + _tiposcheda=s_prodc; + } + if (*tipo=='O') + { + if (tipo[1]=='F') + _tiposcheda=s_ordf; + else + _tiposcheda=s_ordc; + } +} + +TForm_schedemag::TForm_schedemag(const char *name,const char *code) : + TForm(name,code) +{ + _giaclev= new TMag_livelli("FCG"); + _artlev= new TMag_livelli("FCA"); + _giacgrp= new TDecoder("GCG"); + _artgrp= new TDecoder("GCA"); + _cau=NULL; + _tolivgiac=0; + _tolivart=0; + + _rmov_sortexp=new TToken_string; + _rmov_joinexp=new TString; + _rmov_raggcond=new TString; +} + +TForm_schedemag::~TForm_schedemag() +{ + delete _giaclev; + delete _artlev; + delete _giacgrp; + delete _artgrp; + delete _rmov_sortexp; + delete _rmov_joinexp; + delete _rmov_raggcond; + if (_cau) delete _cau; +} // mg3300 Stampa -class TStampa_schedemag : public TApplication +// mg3300 Stampa +class TStampa_schede_mag : public TPrint_application { + TArray * _files; TMask * _mask; - TForm * _form; + TCursor * _cur; + TForm_schedemag *_form; // to be moved into TPrint_application int _codicees; bool _raggmag; - TString _daart,_aart,_damag,_amag; - TDate _dadata,_adata; protected: - virtual bool create(); - virtual bool destroy(); + void setprint_perarticoli(); + void setprint_permagazzini(); + virtual bool print_one(int file); + virtual bool user_create(); + virtual bool user_destroy(); + virtual bool set_print(int i=1); + +public: + TStampa_schede_mag() {} }; -bool TStampa_schedemag::create() +/*void TStampa_schede_mag::setprint_percatmer() +{ + char subordine=*_mask->get(F_ORDINEART); + TRectype darec(LF_RMOVMAG),arec(LF_RMOVMAG); + TString cfilter; + + _cur = _form->cursor(); + // setta il filtro sul cursore + if (*_mask->get(F_DAMAG)) + cfilter << "(CODMAG[1,3]>=" <<'"' << _mask->get(F_DAMAG)<< "\")&&" ; + if (*_mask->get(F_AMAG)) + cfilter << "(CODMAG[1,3]<=" <<'"' << _mask->get(F_AMAG)<< "\")&&" ; + TString catmercode("GRMERC"); + if (!FALSE) + catmercode << "[1,3]"; + if (*_mask->get(F_DACATMER)) + cfilter << "(" << LF_ANAMAG << "->" <=" <<'"' << _mask->get(F_DACATMER)<< "\")&&" ; + if (*_mask->get(F_ACATMER)) + cfilter << "("<< LF_ANAMAG << "->" << catmercode <<"<=" <<'"' << _mask->get(F_ACATMER)<< "\")&&" ; + + cfilter << "(" << LF_MOVMAG <<"->ANNOES==" <<'"' << _mask->get(F_ANNOES)<< "\")&&" ; + if (*_mask->get(F_ADATA)) + { + TDate d1(_mask->get(F_ADATA)); + cfilter << "(ANSI(110->DATAREG)<=" <<'"' << d1.string(ANSI) << "\")&&" ; + } + if (cfilter.not_empty()) + cfilter.cut(cfilter.len()-2); + + if (*_mask->get(F_DADATA)) + { + TDate d1(_mask->get(F_DADATA)); + // SET conditional section + TString cond; + cond << "ANSI(" << LF_MOVMAG << "->DATAREG)>=\"" << d1.string(ANSI) << '"'; + ((TForm_subsection &)_form->find_field('B',odd_page,"MOVS_INTERESSATI")).setcondition(cond,_strexpr); + cond.cut(0) << "ANSI(" << LF_MOVMAG << "->DATAREG)<\"" << d1.string(ANSI) << '"'; + ((TForm_subsection &)_form->find_field('B',odd_page,"MOVS_PRECEDENTI")).setcondition(cond,_strexpr); + } + + _form->set_tiposcheda(_mask->get(F_SCHEDA)); + // abilita/disabilita le sezioni dei totali + _form->setdett_percatmer(FALSE, + _mask->get_int(F_TOLIVELLOART), + _mask->get_int(F_TOLIVELLOGIAC), + _mask->get_bool(F_SUDDIV_MAGAZZINI), + _mask->get_bool(F_SUDDIV_DEPOSITI)); + + darec.put("CODART",_mask->get(F_DAART)); + arec.put("CODART",_mask->get(F_AART)); + ((TSorted_cursor *)_cur)->change_order(_form->rmov_sortexp()); + _cur->setfilter(cfilter,TRUE); + _cur->setregion(darec,arec); +}*/ + +void TStampa_schede_mag::setprint_permagazzini() +{ + char subordine=*_mask->get(F_ORDINEART); + TRectype darec(LF_RMOVMAG),arec(LF_RMOVMAG); + TString cfilter; + + _form->set_tiposcheda(_mask->get(F_SCHEDA)); + _cur = _form->cursor(); + // filtering from/to MAGS + if (*_mask->get(F_DAMAG)) + cfilter << "(CODMAG[1,3]>=" <<'"' << _mask->get(F_DAMAG)<< "\")&&" ; + if (*_mask->get(F_AMAG)) + cfilter << "(CODMAG[1,3]<=" <<'"' << _mask->get(F_AMAG)<< "\")&&" ; + cfilter << "(" << LF_MOVMAG <<"->ANNOES==" <<'"' << _mask->get(F_ANNOES)<< "\")&&" ; + // filtering from/to DATA + if (*_mask->get(F_ADATA)) + { + TDate d1(_mask->get(F_ADATA)); + cfilter << "(ANSI(110->DATAREG)<=" <<'"' << d1.string(ANSI) << "\")&&" ; + } + if (*_mask->get(F_DADATA)) + { + TDate d1(_mask->get(F_DADATA)); + TString cond; + cond << "ANSI(" << LF_MOVMAG << "->DATAREG)>=\"" << d1.string(ANSI) << '"'; + ((TForm_subsection &)_form->find_field('B',odd_page,"MOVS_INTERESSATI")).setcondition(cond,_strexpr); + cond.cut(0) << "ANSI(" << LF_MOVMAG << "->DATAREG)<\"" << d1.string(ANSI) << '"'; + ((TForm_subsection &)_form->find_field('B',odd_page,"MOVS_PRECEDENTI")).setcondition(cond,_strexpr); + } + + // Imposta i livelli di dettaglio della scheda + _form->setdett_permag( + _mask->get_bool(F_SUDDIV_MAGAZZINI), + _mask->get_bool(F_SUDDIV_DEPOSITI), + _mask->get_int(F_TOLIVELLOART), + _mask->get_int(F_TOLIVELLOGIAC)); + + // filtering from/to ART + darec.put("CODART",_mask->get(F_DAART)); + arec.put("CODART",_mask->get(F_AART)); + // filtering ONLY NEGATIVES + if (*_mask->get(F_FILTRO)=='N') { + TForm_subsection &s=((TForm_subsection &)_form->find_field('B',odd_page,"MOVS_PRECEDENTI")); + TString cond; + cond << '(' << s.condition() << ")&&(STR("<< LF_MAG << "->" << _form->nomecampo_tiposcheda() << "<0))"; + s.setcondition(cond,_strexpr); + TForm_subsection &s2=((TForm_subsection &)_form->find_field('B',odd_page,"MOVS_INTERESSATI")); + cond.cut(0) << '(' << s2.condition() << ")&&(STR("<< LF_MAG << "->" << _form->nomecampo_tiposcheda() << "<0))"; + s2.setcondition(cond,_strexpr); + } + // prepare cursor to print.... + ((TSorted_cursor *)_cur)->change_order(_form->rmov_sortexp()); + if (cfilter.not_empty()) + cfilter.cut(cfilter.len()-2); + + TLocalisamfile *mag=new TLocalisamfile(LF_MAG); + mag->setkey(2); + TString mag_joinexp; + mag_joinexp << "ANNOES==" << _mask->get(F_ANNOES) << "|CODMAG==CODMAG|CODART==CODART|LIVELLO==LIVGIAC"; + _cur->relation()->replace(mag,1,mag_joinexp); + _cur->setfilter(cfilter,TRUE); + _cur->setregion(darec,arec); +} + +// ORDINAMENTO per articoli +void TStampa_schede_mag::setprint_perarticoli() +{ + TRectype darec(LF_ANAMAG),arec(LF_ANAMAG); + TString cfilter,filter; + + _form->set_tiposcheda(_mask->get(F_SCHEDA)); + char subordine=*_mask->get(F_ORDINEART); + _cur = _form->cursor(); + // filtering ANNOES + filter << '(' << LF_MOVMAG << "->ANNOES==" << _mask->get(F_ANNOES)<< ")&&" ; + // filtering from/to MAGS + if (*_mask->get(F_DAMAG)) + filter << "(CODMAG[1,3]>=" <<'"' << _mask->get(F_DAMAG)<< "\")&&" ; + if (*_mask->get(F_AMAG)) + filter << "(CODMAG[1,3]<=" <<'"' << _mask->get(F_AMAG)<< "\")&&" ; + // filtering from/to DATA + if (*_mask->get(F_DADATA)) + { + TDate d1(_mask->get(F_DADATA)); + TString cond; + cond << "ANSI(" << LF_MOVMAG << "->DATAREG)>=\"" << d1.string(ANSI) << '"'; + ((TForm_subsection &)_form->find_field('B',odd_page,"MOVS_INTERESSATI")).setcondition(cond,_strexpr); + cond.cut(0) << "ANSI(" << LF_MOVMAG << "->DATAREG)<\"" << d1.string(ANSI) << '"'; + ((TForm_subsection &)_form->find_field('B',odd_page,"MOVS_PRECEDENTI")).setcondition(cond,_strexpr); + } + if (*_mask->get(F_ADATA)) + { + TDate d1(_mask->get(F_ADATA)); + filter << "(ANSI(110->DATAREG)<=" <<'"' << d1.string(ANSI) << "\")&&" ; + } + // filtering ONLY NEGATIVES + if (*_mask->get(F_FILTRO)=='N') { + TForm_subsection &s=((TForm_subsection &)_form->find_field('B',odd_page,"MOVS_PRECEDENTI")); + TString cond; + cond << '(' << s.condition() << ")&&(STR("<< LF_MAG << "->" << _form->nomecampo_tiposcheda() << "<0))"; + s.setcondition(cond,_strexpr); + TForm_subsection &s2=((TForm_subsection &)_form->find_field('B',odd_page,"MOVS_INTERESSATI")); + cond.cut(0) << '(' << s2.condition() << ")&&(STR("<< LF_MAG << "->" << _form->nomecampo_tiposcheda() << "<0))"; + s2.setcondition(cond,_strexpr); + } + // Imposta i livelli di dettaglio della scheda + switch (subordine) + { + case 'C': + _cur->setkey(1); + darec.put("CODART",_mask->get(F_DAART)); + arec.put("CODART",_mask->get(F_AART)); + _form->setdett_perart(FALSE,FALSE, + _mask->get_int(F_TOLIVELLOART), + _mask->get_int(F_TOLIVELLOGIAC), + _mask->get_bool(F_SUDDIV_MAGAZZINI), + _mask->get_bool(F_SUDDIV_DEPOSITI)); + break; + case 'D': + _cur->setkey(2); + darec.put("DESCR",_mask->get(F_DADES)); + arec.put("DESCR",_mask->get(F_ADES)); + _form->setdett_perart(FALSE,FALSE, + _mask->get_int(F_TOLIVELLOART), + _mask->get_int(F_TOLIVELLOGIAC), + _mask->get_bool(F_SUDDIV_MAGAZZINI), + _mask->get_bool(F_SUDDIV_DEPOSITI)); + case 'M': + _cur->setkey(3); + darec.put("GRMERC",_mask->get(F_DACATMER)); + arec.put("GRMERC",_mask->get(F_ACATMER)); + if (*_mask->get(F_AART)) + cfilter << "(CODART<=" <<'"' << _mask->get(F_AART)<< TString(20,(char)127)<< "\")&&" ; + if (*_mask->get(F_DAART)) + cfilter << "(CODART>=" <<'"' << _mask->get(F_DAART) << "\")&&" ; + _form->setdett_perart(TRUE,FALSE, + _mask->get_int(F_TOLIVELLOART), + _mask->get_int(F_TOLIVELLOGIAC), + _mask->get_bool(F_SUDDIV_MAGAZZINI), + _mask->get_bool(F_SUDDIV_DEPOSITI)); + break; + } + // prepare cursor's relation.... + TRelation *aux=new TRelation (LF_RMOVMAG); + aux->add(LF_MOVMAG,"NUMREG==NUMREG"); + if (filter.not_empty()) filter.cut(filter.len()-2); + TSortedfile *rmovmag= new TSortedfile(LF_RMOVMAG,aux,_form->rmov_sortexp(),filter,2); + _cur->relation()->replace(rmovmag,1,_form->rmov_joinexp()); + + TLocalisamfile *mag=new TLocalisamfile(LF_MAG); + mag->setkey(2); + TString mag_joinexp; + mag_joinexp << "ANNOES==" << _mask->get(F_ANNOES) << "|CODMAG==CODMAG|CODART==CODART|LIVELLO==LIVGIAC"; + _cur->relation()->replace(mag,2,mag_joinexp); + + if (cfilter.not_empty()) cfilter.cut(cfilter.len()-2); + _cur->setfilter(cfilter); + _cur->setregion(darec,arec); +} + + +bool TStampa_schede_mag::set_print(int i) { - _mask = new TMask("mg3300"); while (TRUE) { if (_mask->run() != K_ENTER) return FALSE; - -// filtro << "CODART>=" <<'"' << _daart<<'"' << " && CODART<=" <<'"' << _aart<<'"' ; -// filtro << " && ANNOES==" <<'"' << _codicees <<'"' ; - // estremi di stanpa - _raggmag=_mask->get_bool(F_RAGGMAG); - _daart=_mask->get(F_DAART); - _aart=_mask->get(F_AART); - _damag=_mask->get(F_DAMAG); - _amag=_mask->get(F_AMAG); - _dadata=_mask->get_date(F_DADATA); - _adata=_mask->get_date(F_ADATA); - _codicees=1996; - - TRectype darec(LF_ANAMAG),arec(LF_ANAMAG); - _form = new TForm("mg3300a", ""); - TCursor& cur = *_form->cursor(); - cur.setkey(); - // trova il record iniziale - //darec.put("ANNOES",_codicees); - darec.put("CODART",_daart); - //darec.put("CODMAG",_damag); - // trova il record finale - //arec.put("ANNOES",_codicees); - arec.put("CODART",_aart); - //arec.put("CODMAG",_amag); - cur.setregion(darec,arec); + if (*_mask->get(F_ORDINE)=='A') + { + _form = new TForm_schedemag("mg3300a", ""); + setprint_perarticoli(); + } else if (*_mask->get(F_ORDINE)=='M') { + _form = new TForm_schedemag("mg3300b", ""); + setprint_permagazzini(); + } _form->print(); delete _form; } // while true return TRUE; } -bool TStampa_schedemag::destroy() +bool TStampa_schede_mag::user_create() { + _mask = new TMask("mg3300"); + _files= new TArray; + _files->add(new TLocalisamfile(LF_RMOVMAG)); + _files->add(new TLocalisamfile(LF_MOVMAG)); + _files->add(new TLocalisamfile(LF_MAG)); + return TRUE; +} + +bool TStampa_schede_mag::user_destroy() +{ + delete _files; delete _mask; return TRUE; } - - - - - - - -// mg3300 Stampa -class TStampa_schede_mag : public TPrint_app2 -{ - TMask * _mask; - TForm * _form; // to be moved into TPrint_application - - int _codicees; - bool _raggmag; - TString _daart,_aart,_damag,_amag; - TDate _dadata,_adata; -protected: - virtual bool print_one(int file); - - virtual bool user_create(); - virtual bool user_destroy(); - virtual bool set_print(int i=1); - virtual void set_page(int file,int count); - -public: - TStampa_schede_mag() {} -}; - bool TStampa_schede_mag ::print_one(int file) { return TRUE; } - -void TStampa_schede_mag ::set_page(int file,int count) -{ -} - -bool TStampa_schede_mag::set_print(int i) -{ - int s; - if (_mask->run() != K_ENTER) - return FALSE; - -// filtro << "CODART>=" <<'"' << _daart<<'"' << " && CODART<=" <<'"' << _aart<<'"' ; -// filtro << " && ANNOES==" <<'"' << _codicees <<'"' ; - // estremi di stanpa - _raggmag=_mask->get_bool(F_RAGGMAG); - _daart=_mask->get(F_DAART); - _aart=_mask->get(F_AART); - _damag=_mask->get(F_DAMAG); - _amag=_mask->get(F_AMAG); - _dadata=_mask->get_date(F_DADATA); - _adata=_mask->get_date(F_ADATA); - _codicees=1996; - - TRectype darec(LF_MAG),arec(LF_MAG); - TCursor& cur = *_form->cursor(); - cur.setkey(); - // trova il record iniziale - darec.put("ANNOES",_codicees); - darec.put("CODART",_daart); - darec.put("CODMAG",_damag); - // trova il record finale - arec.put("ANNOES",_codicees); - arec.put("CODART",_aart); - arec.put("CODMAG",_amag); - cur.setregion(darec,arec); - return TRUE; -} - -bool TStampa_schede_mag::user_create() -{ - - _mask = new TMask("mg3300"); - _form = new TForm("mg3300a", ""); - add_cursor(_form->cursor()); - add_file(_form->cursor()->file().num()); - - - return TRUE; -} - -bool TStampa_schede_mag::user_destroy() -{ - delete _mask; - delete _form; - return TRUE; -} - - int mg3300(int argc, char* argv[]) { - //TStampa_schede_mag a; // derivata da Printapp - TStampa_schedemag a;// derivata da Application e con uso di form + TStampa_schede_mag a;// derivata da Application e con uso di form a.run(argc,argv,"Stampa schede di magazzino"); return 0; } diff --git a/mg/mg3300.h b/mg/mg3300.h index 959ac72c6..ac08e4b85 100755 --- a/mg/mg3300.h +++ b/mg/mg3300.h @@ -1,9 +1,55 @@ #define F_SCHEDA 101 -#define F_DAART 102 -#define F_AART 103 -#define F_DAMAG 104 -#define F_AMAG 105 -#define F_DADATA 106 -#define F_ADATA 107 -#define F_RAGGMAG 108 +#define F_DADATA 102 +#define F_ADATA 103 +#define F_ORDINE 104 +#define F_ORDINEART 105 +#define F_ORDINEMAG 106 +#define F_ANNOES 107 +#define F_DAART 108 +#define F_AART 109 +#define F_DAMAG 110 +#define F_AMAG 111 +#define F_DACATMER 112 +#define F_ACATMER 113 +#define F_DADES 114 +#define F_ADES 115 +#define F_VALMEDI 116 +#define F_STAMPAGIAC 117 +#define F_RAGGCODICE 118 +#define F_TOLIVELLOART 120 +#define F_RAGGLIVGIAC 121 +#define F_TOLIVELLOGIAC 122 + +#define F_SUDDIV_MAGAZZINI 123 +#define F_SUDDIV_DEPOSITI 124 +#define F_DETTAGLIODEP 125 +#define F_FILTRO 130 + +#define G_CATMER 1 +#define G_CODART 2 +#define G_DESART 3 + + +#define FF_STAMPASALDOPREC 300 +#define FF_SALDO_MOV 301 +#define FF_SALDO_MOVS 302 +#define FF_SALDO_GRMOV 303 +#define FF_SALDOPREC 304 +#define FF_SALDOPREC_MOVS 305 +#define FF_SALDOPREC_GRMOV 306 +#define FF_NUM_MOV 307 +#define FF_DATA_MOV 308 +#define FF_QUANTRIGA 309 +#define FF_VALORE_MOV 310 +#define FF_VALORE_GRMOV 311 +#define FF_UM_GART 312 +#define FF_SALDO_GART 313 +#define FF_VALORE_GART 314 + +#define FF_NUM_MOVART 315 +#define FF_SALDO_MOVART 316 +#define FF_DATA_MOVART 317 +#define FF_VALORE_MOVART 318 +#define ALIAS_CATMER 510 +#define ALIAS_SOTTOCATMER 511 \ No newline at end of file diff --git a/mg/mg3300.uml b/mg/mg3300.uml index 1820c70b4..65e9fbe09 100755 --- a/mg/mg3300.uml +++ b/mg/mg3300.uml @@ -1,82 +1,233 @@ #include "mg3300.h" -PAGE "Stampa Schede di magazzino" -1 -1 78 12 +PAGE "Stampa Schede di magazzino" -1 -1 78 20 LISTBOX F_SCHEDA 30 BEGIN PROMPT 2 1 "Tipo scheda " - ITEM "ORDF|Ordinato fornitori" - ITEM "ORDC|Ordinato clienti" + ITEM "G|Giacenza" + ITEM "OF|Ordinato fornitori" + ITEM "OC|Ordinato clienti" ITEM "ACL|A conto lavoro" ITEM "INCL|In conto lavoro" - ITEM "PRODC|Componenti in produzione " - ITEM "PRODF|Finiti in produzione " + ITEM "PC|Componenti in produzione " + ITEM "PF|Finiti in produzione " END -STRING F_DAART 20 +LISTBOX F_ORDINE 12 BEGIN - PROMPT 2 3 "Dall'articolo " - FLAGS "U" - USE LF_ANAMAG - INPUT CODART F_DAART - DISPLAY "Codice " CODART - DISPLAY "Descrizione@50" DESCR - OUTPUT F_DAART CODART - GROUP 1 - CHECKTYPE NORMAL -END - -STRING F_AART 20 -BEGIN - PROMPT 40 3 "All'articolo " - FLAGS "U" - COPY USE F_DAART - INPUT CODART F_AART - COPY DISPLAY F_DAART - OUTPUT F_AART CODART - GROUP 1 - CHECKTYPE NORMAL -END - -STRING F_DAMAG 20 -BEGIN - PROMPT 2 5 "Dal magazzino " - FLAGS "U" - USE MAG - INPUT CODTAB F_DAMAG - DISPLAY "Codice " CODTAB - DISPLAY "Descrizione@50" S0 - OUTPUT F_DAMAG CODTAB - GROUP 2 - CHECKTYPE NORMAL + PROMPT 2 2 "Ordinamento " + ITEM "A|articoli" + MESSAGE ENABLE,F_ORDINEART + ITEM "M|magazzini" + MESSAGE "C",F_ORDINEART|K_SPACE,F_ORDINEART|DISABLE,F_ORDINEART|SHOW,G_CODART@|HIDE,G_DESART@ END -STRING F_AMAG 20 +LISTBOX F_ORDINEART 14 BEGIN - PROMPT 40 5 "Al magazzino " - FLAGS "U" - COPY USE F_DAMAG - INPUT CODTAB F_AMAG - COPY DISPLAY F_DAMAG - OUTPUT F_AMAG CODTAB - GROUP 2 - CHECKTYPE NORMAL + FLAGS "G" + PROMPT 42 2 "sotto-ordinamento " + ITEM "C|codice" + MESSAGE HIDE,G_CATMER@|SHOW,G_CODART@|HIDE,G_DESART@ + ITEM "D|descrizione" + MESSAGE HIDE,G_CATMER@|HIDE,G_CODART@|SHOW,G_DESART@ + ITEM "M|gruppo merc." + MESSAGE SHOW,G_CATMER@|SHOW,G_CODART@|HIDE,G_DESART@ +END + +NUMBER F_ANNOES 4 +BEGIN + FLAGS "A" + PROMPT 2 3 "Codice es. " + USE ESC + INPUT CODTAB F_ANNOES + DISPLAY "Esercizio" CODTAB + DISPLAY "Dal@12" D0 + DISPLAY "Al@12" D0 + OUTPUT F_ANNOES CODTAB + CHECKTYPE REQUIRED +END + + +LISTBOX F_FILTRO 10 +BEGIN + FLAGS "G" + PROMPT 53 3 "Filtro " + ITEM "T|tutto" + ITEM "N|negativi" END DATE F_DADATA BEGIN - PROMPT 2 7 "Dalla data " + PROMPT 2 5 "Dalla data " END DATE F_ADATA BEGIN - PROMPT 40 7 "Alla data " + PROMPT 2 6 " alla data " + STR_EXPR ANSI(#F_ADATA)>=ANSI(#F_DADATA)||(#F_ADATA=="") + WARNING "Il secondo estremo deve essere superiore al primo" END -BOOLEAN F_RAGGMAG +STRING F_DAART 20 BEGIN - PROMPT 2 9 "Raggruppo per magazzini" + PROMPT 28 5 "Dall'articolo " + FLAGS "U" + USE LF_ANAMAG + INPUT CODART F_DAART + DISPLAY "Codice" CODART + DISPLAY "Descr@50" DESCR + OUTPUT F_DAART CODART + GROUP G_CODART END +STRING F_AART 20 +BEGIN + PROMPT 28 6 " all'articolo " + FLAGS "U" + COPY USE F_DAART + INPUT CODART F_AART + COPY DISPLAY F_DAART + OUTPUT F_AART CODART + GROUP G_CODART + STR_EXPR (#F_AART>=#F_DAART)||(#F_AART=="") + WARNING "Il secondo estremo deve essere superiore al primo" +END + +STRING F_DADES 50 30 +BEGIN + PROMPT 28 5 "Dall'articolo " + FLAGS "U" + USE LF_ANAMAG KEY 2 + INPUT DESCR F_DADES + DISPLAY "Descr@50" DESCR + DISPLAY "Codice" CODART + OUTPUT F_DADES DESCR + GROUP G_DESART +END +STRING F_ADES 50 30 +BEGIN + PROMPT 28 6 " all'articolo " + FLAGS "U" + COPY USE F_DADES + INPUT DESCR F_ADES + COPY DISPLAY F_DADES + OUTPUT F_ADES DESCR + GROUP G_DESART + STR_EXPR (#F_ADES>=#F_DADES)||(#F_ADES=="") + WARNING "Il secondo estremo deve essere superiore al primo" +END + +STRING F_DAMAG 3 +BEGIN + PROMPT 2 8 "Dal magazzino " + FLAGS "U" + USE MAG SELECT CODTAB[4,5]=="" && CODTAB[1,3]!="" + INPUT CODTAB F_DAMAG + DISPLAY "Codice" CODTAB + DISPLAY "Descr@50" S0 + OUTPUT F_DAMAG CODTAB +END + +STRING F_AMAG 3 +BEGIN + PROMPT 2 9 " al magazzino " + FLAGS "U" + COPY USE F_DAMAG + INPUT CODTAB F_AMAG + COPY DISPLAY F_DAMAG + OUTPUT F_AMAG CODTAB + STR_EXPR (#F_AMAG>=#F_DAMAG)||(#F_AMAG=="") + WARNING "Il secondo estremo deve essere superiore al primo" +END + + +STRING F_DACATMER 3 +BEGIN + PROMPT 2 11 "Dal gruppo " + FLAGS "U" + USE GMC SELECT CODTAB[4,5]=="" + INPUT CODTAB F_DACATMER + DISPLAY "Codice" CODTAB + DISPLAY "Descr@50" S0 + OUTPUT F_DACATMER CODTAB[1,3] + GROUP G_CATMER +END + + +STRING F_ACATMER 3 +BEGIN + PROMPT 2 12 " al gruppo " + FLAGS "U" + COPY USE F_DACATMER + INPUT CODTAB F_ACATMER + COPY DISPLAY F_DACATMER + OUTPUT F_ACATMER CODTAB[1,3] + GROUP G_CATMER + STR_EXPR (#F_ACATMER>=#F_DACATMER)||(#F_ACATMER=="") + WARNING "Il secondo estremo deve essere superiore al primo" +END + +BOOLEAN F_RAGGCODICE +BEGIN + PROMPT 2 14 "Raggruppo gli articoli" + MESSAGE FALSE CLEAR,F_TOLIVELLOART|CHECK,F_TOLIVELLOART + MESSAGE TRUE ENABLE,F_TOLIVELLOART|CHECK,F_TOLIVELLOART +END + +NUMBER F_TOLIVELLOART 1 +BEGIN + PROMPT 42 14 "fino al livello " + USE FCA + INPUT CODTAB F_TOLIVELLOART + DISPLAY "Num." CODTAB + DISPLAY "Descr@50" S0 + OUTPUT F_TOLIVELLOART CODTAB + CHECKTYPE NORMAL +// NUM_EXPR (||(#F_TOLIVELLOART=0))&&(((#F_TOLIVELLOGIAC+#F_FROMLIVELLOGIAC)*#F_TOLIVELLOART)=0) + WARNING "Livello finale non ammissibile" +END + +BOOL F_RAGGLIVGIAC +BEGIN + PROMPT 2 15 "Raggruppo le giacenze" + MESSAGE FALSE CLEAR,F_TOLIVELLOGIAC|CHECK,F_TOLIVELLOGIAC + MESSAGE TRUE ENABLE,F_TOLIVELLOGIAC +END + +NUMBER F_TOLIVELLOGIAC 1 +BEGIN + FLAG "D" + PROMPT 42 15 "fino al livello " + USE FCG + INPUT CODTAB F_TOLIVELLOGIAC + DISPLAY "Num." CODTAB + DISPLAY "Descr@50" S0 + OUTPUT F_TOLIVELLOGIAC CODTAB + WARNING "Livello finale non ammissibile" + CHECKTYPE NORMAL +END + + +BOOL F_SUDDIV_MAGAZZINI +BEGIN + PROMPT 2 16 "Suddivido i magazzini" + MESSAGE TRUE ENABLE,F_SUDDIV_DEPOSITI + MESSAGE FALSE CLEAR,F_SUDDIV_DEPOSITI|K_SPACE,F_SUDDIV_DEPOSITI +END + +BOOL F_SUDDIV_DEPOSITI +BEGIN + PROMPT 2 17 "Suddivido i depositi" + MESSAGE TRUE ENABLE,F_DETTAGLIODEP + MESSAGE FALSE CLEAR,F_DETTAGLIODEP +END + +BOOL F_DETTAGLIODEP +BEGIN + PROMPT 42 17 "Dettaglio i depositi" +END + + BUTTON DLG_OK 10 2 BEGIN diff --git a/mg/mg3300a.frm b/mg/mg3300a.frm index 14fba2f9e..08f8f5791 100755 --- a/mg/mg3300a.frm +++ b/mg/mg3300a.frm @@ -1,13 +1,16 @@ #include "mg3300.h" USE LF_ANAMAG -SORT LF_RMOVMAG BY LF_MOVMAG->DATAREG NUMREG NRIG +SORT LF_RMOVMAG BY LF_MOVMAG->DATAREG NUMREG USING LF_MOVMAG INTO NUMREG==NUMREG JOIN TO LF_ANAMAG KEY 2 INTO CODART==CODART +JOIN LF_MAG TO LF_RMOVMAG KEY 2 INTO ANNOES==1996 CODMAG==CODMAG CODART==CODART LIVELLO==LIVGIAC JOIN LF_MOVMAG TO LF_RMOVMAG INTO NUMREG==NUMREG JOIN CAU TO LF_MOVMAG INTO CODTAB==CODCAUS -JOIN MAG TO LF_RMOVMAG ALIAS 501 INTO CODTAB==CODMAG JOIN MAG TO LF_RMOVMAG ALIAS 500 INTO CODTAB==CODMAG[1,3] +JOIN MAG TO LF_RMOVMAG ALIAS 501 INTO CODTAB==CODMAG +JOIN GMC TO LF_ANAMAG ALIAS ALIAS_CATMER INTO CODTAB==GRMERC[1,3] +JOIN GMC TO LF_ANAMAG ALIAS ALIAS_SOTTOCATMER INTO CODTAB==GRMERC[1,5] JOIN LF_UMART TO LF_ANAMAG INTO CODART==CODART JOIN LF_UMART TO LF_RMOVMAG KEY 2 ALIAS 349 INTO CODART==CODART UM==UM @@ -55,7 +58,7 @@ SECTION HEADER ODD 5 MESSAGE _PAGENO END - NUMERO 4 45 + STRINGA 4 45 BEGIN KEY "Intestazione stampa" PROMPT 45 2 "Stampa schede di magazzino :" @@ -98,46 +101,63 @@ SECTION BODY ODD 2 MESSAGE RESET,FF_SALDO_GART|RESET,FF_VALORE_GART END - SECTION HEADER_CATMER 1 2 1 GROUP + SECTION HEADER_ARTICOLO 1 2 2 GROUP + SECTION HEADER_CATMER 1 2 1 GROUP + STRINGA 10 20 1 + BEGIN + KEY "CODICE CATMER" + PROMPT 1 1 "Gruppo merceologico " + MESSAGE _USER,CODCATMER|RESET,FF_STAMPASALDOPREC + END + STRINGA 12 50 1 + BEGIN + KEY "DESCR." + PROMPT 30 1 "" + MESSAGE _USER,CATMER + END + END //HEADER catmer STRINGA 10 20 1 BEGIN - KEY "CODICE CATMER" - PROMPT 1 1 "Gruppo merceologico " - MESSAGE _USER,CODCATMER + KEY "CODICE articolo" + PROMPT 1 1 "Articolo " + MESSAGE _USER,CODGRUPPOART|RESET,FF_STAMPASALDOPREC END STRINGA 11 50 1 BEGIN - KEY "DESCR." - PROMPT 30 1 "" - MESSAGE _USER,CATMER + KEY "DESCR.articolo" + PROMPT 30 1 "" + MESSAGE _USER,GRUPPOART END - END //HEADER catmer - - SECTION HEADER_ARTICOLO 1 2 1 GROUP - STRINGA 10 20 1 + STRINGA 24 50 1 BEGIN - KEY "CODICE articolo" - PROMPT 1 1 "Articolo " - MESSAGE _USER,CODGRUPPOART - END - - STRINGA 11 50 1 - BEGIN - KEY "DESCR.articolo" - PROMPT 30 1 "" - MESSAGE _USER,GRUPPOART + KEY "dep" + PROMPT 1 2 "------------------------------------------------------------------------------------------------------------------------------------------------------" END END //HEADER articolo - SECTION GRUPPI_ARTICOLO 1 0 0 FILE LF_ANAMAG GROUP CODART[1,1] - SECTION FILE_LF_RMOVMAG 1 1 0 FILE LF_RMOVMAG + SECTION GRUPPI_ARTICOLO 1 0 0 FILE LF_ANAMAG BY CODART + SECTION FILE_RMOVMAG 1 1 0 FILE LF_RMOVMAG SECTION HEADER_LIVGIAC 1 3 3 GROUP + SECTION HEADER_LIVGIACCATMER 1 1 1 GROUP + STRINGA 10 20 1 + BEGIN + KEY "CODICE CATMER" + PROMPT 1 1 "Gruppo merceologico " + MESSAGE _USER,CODCATMER|RESET,FF_STAMPASALDOPREC + END + STRINGA 12 50 1 + BEGIN + KEY "DESCR." + PROMPT 30 1 "" + MESSAGE _USER,CATMER + END + END //HEADER catmer STRINGA 10 20 1 BEGIN KEY "CODICE articolo" PROMPT 1 1 "Articolo " - MESSAGE _USER,CODGRUPPOART + MESSAGE _USER,CODGRUPPOART|RESET,FF_STAMPASALDOPREC END STRINGA 11 50 1 BEGIN @@ -150,7 +170,7 @@ SECTION BODY ODD 2 BEGIN KEY "CODICE livello" PROMPT 1 2 "" - MESSAGE _USER,CODGRUPPOGIAC|RESET,FF_STAMPASALDOPREC + MESSAGE _USER,CODGRUPPOGIAC END STRINGA 21 50 1 BEGIN @@ -158,7 +178,7 @@ SECTION BODY ODD 2 PROMPT 23 2 "" MESSAGE _USER,GRUPPOGIAC END - SECTION HEADER_MAG 1 1 1 GROUP + SECTION HEADER_MAG 3 1 1 GROUP STRINGA 22 50 1 BEGIN KEY "mag" @@ -184,98 +204,143 @@ SECTION BODY ODD 2 STRINGA 10 BEGIN FLAGS "H" - MESSAGE RESET,FF_SALDOPREC_SCHEDA|RESET,FF_VALOREPREC_SCHEDA + MESSAGE RESET,FF_SALDO_GRMOV|RESET,FF_VALORE_GRMOV END - SECTION SCHEDA_PREC 1 1 1 FILE LF_RMOVMAG GROUP CODART[1,3] + + SECTION GRUPPI_RMOVMAG 1 0 0 FILE LF_RMOVMAG GROUP CODART NUMERO 10 BEGIN FLAGS "H" FIELD LF_RMOVMAG->NUMREG - MESSAGE COPY,FF_NUM_MOV|RESET,FF_SALDOPREC_MOV|RESET,FF_VALOREPREC_MOV + MESSAGE COPY,FF_NUM_MOV|RESET,FF_SALDO_MOV|RESET,FF_VALORE_MOV END - NUMERO 10 + NUMERO 11 BEGIN FLAGS "H" FIELD LF_MOVMAG->DATAREG MESSAGE COPY,FF_DATA_MOV END + NUMERO 12 + BEGIN + FLAGS "H" + FIELD LF_MOVMAG->CODCAUS + MESSAGE _USER,SETCAUSALE + END - SECTION MOVIMENTO_PREC 1 0 1 FILE LF_RMOVMAG GROUP NUMREG + SECTION MOVIMENTO 1 0 0 FILE LF_RMOVMAG GROUP NUMREG - STRINGA 100 12 - BEGIN - PROMPT 1 1 ">>>" - MESSAGE _STREXPR,LF_RMOVMAG->CODART+" "+LF_RMOVMAG->LIVGIAC+" "+LF_RMOVMAG->CODMAG - END - - STRINGA 101 12 - BEGIN - PROMPT 27 1 "" - FIELD LF_RMOVMAG->UM - END - NUMBER 102 12 + NUMBER FF_QUANTRIGA 12 BEGIN FLAGS "H" - MESSAGE _NUMEXPR,LF_RMOVMAG->QUANT*349@->FC|COPY,103 + MESSAGE _NUMEXPR,LF_RMOVMAG->QUANT*349@->FC|_USER,*SEGNOCAUS END - NUMBER 103 12 + + NUMBER FF_STAMPASALDOPREC 30 + BEGIN + FLAGS "H" + END + + SECTION MOVS_PRECEDENTI 1 0 0 STREXPR LF_MOVMAG->DATAREG<"" + NUMBER 103 30 + BEGIN + PROMPT 31 1 "Quantita' a saldo prec:" + PICTURE "###.###,@##" + MESSAGE _NUMEXPR,#FF_QUANTRIGA|ADD,FF_SALDOPREC + END + END + + SECTION MOVS_INTERESSATI 1 0 1 STREXPR LF_MOVMAG->DATAREG>="" + SECTION STAMPASALDOPREC 1 1 1 NUMEXPR (#FF_STAMPASALDOPREC==0)&&(#FF_QUANTRIGA!=0) + NUMBER 100 18 + BEGIN + PROMPT 8 1 "Saldo precedente :" + END + NUMBER FF_SALDOPREC 12 + BEGIN + PROMPT 31 1 "" + PICTURE "###.###,@##" + END + NUMBER 101 12 + BEGIN + FLAGS "H" + MESSAGE RESET,FF_SALDOPREC |INC,FF_STAMPASALDOPREC + END + STRINGA 102 12 + BEGIN + PROMPT 27 1 "" + FIELD LF_UMART->UM + END + END // stampa saldo precedente + + STRINGA 100 30 + BEGIN + PROMPT 1 1 ">>>" + MESSAGE _STREXPR,LF_RMOVMAG->CODART+"/"+LF_RMOVMAG->LIVGIAC+":"+LF_RMOVMAG->CODMAG + END + + STRINGA 101 12 + BEGIN + PROMPT 27 1 "" + FIELD LF_RMOVMAG->UM + END + + NUMBER 104 12 + BEGIN + PROMPT 42 1 "" + PICTURE "###.###.###" + FIELD LF_RMOVMAG->PREZZO + END + NUMBER 103 12 + BEGIN + PROMPT 31 1 "" + PICTURE "###.###,@##" + MESSAGE _NUMEXPR,#FF_QUANTRIGA|ADD,FF_SALDO_MOV + END + NUMBER 105 12 + BEGIN + PROMPT 54 1 "" + PICTURE "###.###.###" + MESSAGE _NUMEXPR,LF_RMOVMAG->QUANT*LF_RMOVMAG->PREZZO|_USER,*SEGNOCAUS|ADD,FF_VALORE_MOV + END + END // sezione movimento di competenza + END // loop movimento + + SECTION TOTALI_MOV 1 2 1 NUMEXPR #FF_SALDO_MOV!=0 + NUMBER FF_NUM_MOV 32 + BEGIN + PROMPT 2 1 "Mov. " + END + STRINGA FF_DATA_MOV 10 + BEGIN + PROMPT 12 1 "del " + END + STRINGA 100 2 + BEGIN + PROMPT 27 1 "" + FIELD LF_UMART->UM + END + NUMBER FF_SALDO_MOV 12 BEGIN PROMPT 31 1 "" PICTURE "###.###,@##" - MESSAGE _USER,SALDO|ADD,FF_SALDOPREC_MOV|RESET,FF_STAMPASALDOPREC + MESSAGE ADD,FF_SALDO_GRMOV END - NUMBER 104 12 + NUMBER 100 12 BEGIN PROMPT 42 1 "" PICTURE "###.###.###" - FIELD LF_RMOVMAG->PREZZO + MESSAGE _NUMEXPR,#FF_VALORE_MOV/#FF_SALDO_MOV END - NUMBER 105 12 + NUMBER FF_VALORE_MOV 12 BEGIN PROMPT 54 1 "" PICTURE "###.###.###" - MESSAGE _NUMEXPR,LF_RMOVMAG->PREZZO*#102|ADD,FF_VALOREPREC_MOV + MESSAGE ADD,FF_VALORE_GRMOV END - END // loop movimento - - NUMBER FF_NUM_MOV 32 - BEGIN - PROMPT 2 1 "Mov. " - END - STRINGA FF_DATA_MOV 10 - BEGIN - PROMPT 12 1 "del " - FIELD LF_MOVMAG->DATAREG - END - STRINGA 100 2 - BEGIN - PROMPT 27 1 "" - FIELD LF_UMART->UM - END - NUMBER FF_SALDOPREC_MOV 12 - BEGIN - PROMPT 31 1 "" - PICTURE "###.###,@##" - MESSAGE ADD,FF_SALDOPREC_SCHEDA - END - NUMBER 100 12 - BEGIN - PROMPT 42 1 "" - PICTURE "###.###.###" - MESSAGE _NUMEXPR,#FF_VALOREPREC_MOV/#FF_SALDOPREC_MOV - END - NUMBER FF_VALOREPREC_MOV 12 - BEGIN - PROMPT 54 1 "" - PICTURE "###.###.###" - MESSAGE ADD,FF_VALOREPREC_SCHEDA - END + END // totali mov END // loop scheda - SECTION TOTALI_SCHEDA 1 1 3 GROUP - NUMBER FF_STAMPASALDOPREC - BEGIN - END + SECTION TOTALI_GRMOV 1 1 3 GROUP STRINGA 100 15 BEGIN @@ -287,13 +352,13 @@ SECTION BODY ODD 2 FIELD LF_UMART->UM MESSAGE COPY,FF_UM_GART END - NUMBER FF_SALDOPREC_SCHEDA 12 + NUMBER FF_SALDO_GRMOV 12 BEGIN PROMPT 31 1 "" PICTURE "###.###,@##" MESSAGE ADD,FF_SALDO_GART END - NUMBER FF_VALOREPREC_SCHEDA 12 + NUMBER FF_VALORE_GRMOV 12 BEGIN PROMPT 54 1 "" PICTURE "###.###.###" @@ -302,6 +367,40 @@ SECTION BODY ODD 2 END // TOTALI scheda per articolo END // loop RMOVMAG + SECTION TOTALI_MOV_ARTICOLO 1 0 0 NUMEXPR #FF_SALDO_MOV!=0 + NUMBER FF_NUM_MOVART 32 + BEGIN + PROMPT 2 1 "Mov. " + END + STRINGA FF_DATA_MOVART 10 + BEGIN + PROMPT 12 1 "del " + END + STRINGA 100 2 + BEGIN + PROMPT 27 1 "" + FIELD LF_UMART->UM + END + NUMBER FF_SALDO_MOVART 12 + BEGIN + PROMPT 31 1 "" + PICTURE "###.###,@##" + MESSAGE ADD,FF_SALDO_GRMOV + END + NUMBER 100 12 + BEGIN + PROMPT 42 1 "" + PICTURE "###.###.###" + MESSAGE _NUMEXPR,#FF_VALORE_MOV/#FF_SALDO_MOV + END + NUMBER FF_VALORE_MOVART 12 + BEGIN + PROMPT 54 1 "" + PICTURE "###.###.###" + MESSAGE ADD,FF_VALORE_GRMOV + END + END // totali mov + END // ragg articolo (codice o catmer) SECTION TOTALI_GRUPPIART 1 1 3 GROUP STRINGA 100 15 diff --git a/mg/mg3300b.frm b/mg/mg3300b.frm new file mode 100755 index 000000000..a5c4b03b6 --- /dev/null +++ b/mg/mg3300b.frm @@ -0,0 +1,352 @@ +#include "mg3300.h" +USE LF_RMOVMAG KEY 2 BY CODMAG CODART LIVGIAC LF_MOVMAG->DATAREG NUMREG +JOIN LF_MAG TO LF_RMOVMAG KEY 2 INTO ANNOES==1996 CODMAG==CODMAG CODART==CODART LIVELLO==LIVGIAC +JOIN LF_ANAMAG TO LF_RMOVMAG INTO CODART==CODART +JOIN LF_MOVMAG TO LF_RMOVMAG INTO NUMREG==NUMREG +JOIN CAU TO LF_MOVMAG INTO CODTAB==CODCAUS + +JOIN MAG TO LF_RMOVMAG ALIAS 500 INTO CODTAB==CODMAG[1,3] +JOIN MAG TO LF_RMOVMAG ALIAS 501 INTO CODTAB==CODMAG + +JOIN GMC TO LF_ANAMAG ALIAS ALIAS_CATMER INTO CODTAB==GRMERC[1,3] +JOIN GMC TO LF_ANAMAG ALIAS ALIAS_SOTTOCATMER INTO CODTAB==GRMERC[1,5] + +JOIN LF_UMART TO LF_ANAMAG INTO CODART==CODART +JOIN LF_UMART TO LF_RMOVMAG KEY 2 ALIAS 349 INTO CODART==CODART UM==UM +END + +DESCRIPTION +BEGIN + 47->* "Anagrafica articoli" + 109->* "Archivio Giacenze" + MAG->* "Tabella magazzini" + 110->* "Movimenti di magazzino" + 111->* "Righe Movimenti di magazzino" + 49->* "Unità di misura articoli" +END + +GENERAL +BEGIN + OFFSET 0 0 + FONT "Courier New" + SIZE 12 + CARATTERE "X" + INIZIALE 5 2 + FINALE 133 +END + +SECTION HEADER ODD 5 + STRINGA 1 40 1 + BEGIN + KEY "nome ditta" + PROMPT 1 1 "Ditta " + MESSAGE _DITTA, !RAGSOC + END + + STRINGA 2 10 + BEGIN + KEY "Data" + PROMPT 120 1 "Data " + MESSAGE _TODAY + END + + NUMERO 3 7 + BEGIN + KEY "Nr. pagina" + PROMPT 137 1 "Pagina " + MESSAGE _PAGENO + END + + STRINGA 4 45 + BEGIN + KEY "Intestazione stampa" + PROMPT 45 2 "Stampa schede di magazzino :" + MESSAGE _USER,TIPOSCHEDA + END + + STRINGA 5 146 + BEGIN + KEY "Separatore (iniziale)" + PROMPT 1 3 "------------------------------------------------------------------------------------------------------------------------------------------------------" + END + STRINGA 6 12 + BEGIN + PROMPT 27 4 "UM" + END + NUMBER 7 12 + BEGIN + PROMPT 31 4 "Quantità" + END + NUMBER 8 12 + BEGIN + PROMPT 42 4 "Prezzo" + END + NUMBER 9 12 + BEGIN + PROMPT 54 4 "Valore" + END + STRINGA 5 146 + BEGIN + KEY "Separatore (iniziale)" + PROMPT 1 5 "------------------------------------------------------------------------------------------------------------------------------------------------------" + END +END + +SECTION BODY ODD 2 + + NUMBER 100 1 + BEGIN + FLAGS "H" + MESSAGE RESET,FF_SALDO_GART|RESET,FF_VALORE_GART + END + + SECTION HEADER_CATMER 1 2 1 GROUP + FLAGS "H" + STRINGA 10 20 1 + BEGIN + KEY "CODICE CATMER" + PROMPT 1 1 "Gruppo merceologico " + MESSAGE _USER,CODCATMER + END + STRINGA 12 50 1 + BEGIN + KEY "DESCR." + PROMPT 30 1 "" + MESSAGE _USER,CATMER + END + END //HEADER catmer + + SECTION HEADER_MAG 1 2 2 GROUP + STRINGA 22 50 1 + BEGIN + KEY "mag" + PROMPT 1 1 "Magazzino " + FIELD 500@->S0 + END + SECTION HEADER_DEP 2 1 1 GROUP + STRINGA 23 50 1 + BEGIN + KEY "dep" + PROMPT 1 1 "Deposito " + FIELD 501@->S0 + END + SECTION HEADER_ARTICOLO 2 1 1 GROUP + STRINGA 10 20 1 + BEGIN + KEY "CODICE articolo" + PROMPT 1 1 "Articolo " + MESSAGE _USER,CODGRUPPOART + END + + STRINGA 11 50 1 + BEGIN + KEY "DESCR.articolo" + PROMPT 30 1 "" + MESSAGE _USER,GRUPPOART + END + SECTION HEADER_LIVGIAC 2 1 1 GROUP + STRINGA 20 20 1 + BEGIN + KEY "CODICE livello" + PROMPT 1 1 "" + MESSAGE _USER,CODGRUPPOGIAC + END + STRINGA 21 50 1 + BEGIN + KEY "Livello giac" + PROMPT 23 1 "" + MESSAGE _USER,GRUPPOGIAC + END + END // HEADER livgiac + END //HEADER articolo + END // HEADER deposito + STRINGA 24 50 1 + BEGIN + KEY "dep" + PROMPT 1 2 "------------------------------------------------------------------------------------------------------------------------------------------------------" + END + END // HEADER magazzino + + SECTION FILE_RMOVMAG 1 0 0 FILE LF_ANAMAG + + STRINGA 10 + BEGIN + FLAGS "H" + MESSAGE RESET,FF_SALDO_GART|RESET,FF_VALORE_GART|RESET,FF_STAMPASALDOPREC + END + + SECTION GRUPPI_RMOVMAG 1 0 0 FILE LF_RMOVMAG GROUP CODMAG+CODART + NUMERO 10 + BEGIN + FLAGS "H" + FIELD LF_RMOVMAG->NUMREG + MESSAGE COPY,FF_NUM_MOV|RESET,FF_SALDO_MOV|RESET,FF_VALORE_MOV + END + NUMERO 11 + BEGIN + FLAGS "H" + FIELD LF_MOVMAG->DATAREG + MESSAGE COPY,FF_DATA_MOV + END + NUMERO 12 + BEGIN + FLAGS "H" + FIELD LF_MOVMAG->CODCAUS + MESSAGE _USER,SETCAUSALE + END + + SECTION MOVIMENTO 1 0 0 FILE LF_RMOVMAG GROUP NUMREG + + NUMBER FF_QUANTRIGA 12 + BEGIN + FLAGS "H" + MESSAGE _NUMEXPR,LF_RMOVMAG->QUANT*349@->FC|_USER,*SEGNOCAUS + END + + NUMBER FF_STAMPASALDOPREC 30 + BEGIN + FLAGS "H" + END + + SECTION MOVS_PRECEDENTI 1 0 0 STREXPR LF_MOVMAG->DATAREG<"" + NUMBER 103 30 + BEGIN + PROMPT 31 1 "Quantita' a saldo prec:" + PICTURE "###.###,@##" + MESSAGE _NUMEXPR,#FF_QUANTRIGA|ADD,FF_SALDOPREC + END + END + + SECTION MOVS_INTERESSATI 1 0 1 STREXPR LF_MOVMAG->DATAREG>="" + SECTION STAMPASALDOPREC 1 1 1 NUMEXPR (#FF_STAMPASALDOPREC==0)&&(#FF_QUANTRIGA!=0) + NUMBER 100 18 + BEGIN + PROMPT 8 1 "Saldo precedente :" + END + NUMBER FF_SALDOPREC 12 + BEGIN + PROMPT 31 1 "" + PICTURE "###.###,@##" + END + NUMBER 101 12 + BEGIN + FLAGS "H" + MESSAGE RESET,FF_SALDOPREC |INC,FF_STAMPASALDOPREC + END + STRINGA 102 12 + BEGIN + PROMPT 27 1 "" + FIELD LF_UMART->UM + END + END // stampa saldo precedente + + STRINGA 100 30 + BEGIN + PROMPT 1 1 ">>>" + MESSAGE _STREXPR,LF_RMOVMAG->CODART+" "+LF_RMOVMAG->LIVGIAC+" "+LF_RMOVMAG->CODMAG + END + + STRINGA 101 12 + BEGIN + PROMPT 27 1 "" + FIELD LF_RMOVMAG->UM + END + + NUMBER 104 12 + BEGIN + PROMPT 42 1 "" + PICTURE "###.###.###" + FIELD LF_RMOVMAG->PREZZO + END + NUMBER 103 12 + BEGIN + PROMPT 31 1 "" + PICTURE "###.###,@##" + MESSAGE _NUMEXPR,#FF_QUANTRIGA|ADD,FF_SALDO_MOV + END + NUMBER 105 12 + BEGIN + PROMPT 54 1 "" + PICTURE "###.###.###" + MESSAGE _NUMEXPR,LF_RMOVMAG->QUANT*LF_RMOVMAG->PREZZO|_USER,*SEGNOCAUS|ADD,FF_VALORE_MOV + END + END // sezione movimento di competenza + END // loop movimento + + SECTION TOTALI_MOV 1 4 1 NUMEXPR #FF_SALDO_MOV!=0 + NUMBER FF_NUM_MOV 32 + BEGIN + PROMPT 2 1 "Mov. " + END + STRINGA FF_DATA_MOV 10 + BEGIN + PROMPT 12 1 "del " + END + STRINGA 100 2 + BEGIN + PROMPT 27 1 "" + FIELD LF_UMART->UM + END + NUMBER FF_SALDO_MOV 12 + BEGIN + PROMPT 31 1 "" + PICTURE "###.###,@##" + MESSAGE ADD,FF_SALDO_GART + END + NUMBER 100 12 + BEGIN + PROMPT 42 1 "" + PICTURE "###.###.###" + MESSAGE _NUMEXPR,#FF_VALORE_MOV/#FF_SALDO_MOV + END + NUMBER FF_VALORE_MOV 12 + BEGIN + PROMPT 54 1 "" + PICTURE "###.###.###" + MESSAGE ADD,FF_VALORE_GART + END + END // totali mov + END // loop scheda + + SECTION TOTALI_GART 1 1 3 GROUP + + STRINGA 100 15 + BEGIN + PROMPT 1 1 "Totale scheda" + END + STRINGA 100 2 + BEGIN + PROMPT 27 1 "" + FIELD LF_UMART->UM + END + NUMBER FF_SALDO_GART 12 + BEGIN + PROMPT 31 1 "" + PICTURE "###.###,@##" + END + NUMBER FF_VALORE_GART 12 + BEGIN + PROMPT 54 1 "" + PICTURE "###.###.###" + END + END // TOTALI scheda per articolo + END // loop RMOVMAG raggruppate +END // ***** + +SECTION FOOTER ODD 2 + STRINGA 100 + BEGIN + KEY "NUMP" + PROMPT 50 1 "-----" + END + + NUMERO 101 + BEGIN + KEY "NUMPAGE" + PROMPT 50 2 "" + MESSAGE _PAGENO + PICTURE "-###-" + END + +END + diff --git a/mg/mg3500.cpp b/mg/mg3500.cpp index 573ef2301..f6e9d2e5f 100755 --- a/mg/mg3500.cpp +++ b/mg/mg3500.cpp @@ -13,7 +13,7 @@ #include "mg3500.h" #include "mg3frm.h" -// mg3200 Stampa +// mg3500 Stampa class TStampa_storgiac : public TPrint_application { TArray * _files; @@ -23,12 +23,12 @@ class TStampa_storgiac : public TPrint_application protected: virtual bool print_one(int file) - {return TRUE;} + {return TRUE;} virtual bool user_create(); virtual bool user_destroy(); virtual bool set_print(int i=1); virtual void set_page(int file,int count) - { } + { } void setprint_permagazzini(); void setprint_perarticoli(); @@ -89,10 +89,9 @@ bool TStampa_storgiac::set_print(int i) return TRUE; } - int mg3500(int argc, char* argv[]) { - TStampa_storgiac a;// derivata da Application e con uso di form + TStampa_storgiac a; a.run(argc,argv,"Stampa storico rimanenze"); return 0; } diff --git a/mg/mg3500.h b/mg/mg3500.h new file mode 100755 index 000000000..745625ac8 --- /dev/null +++ b/mg/mg3500.h @@ -0,0 +1,14 @@ +#define F_ORDINE 101 +#define F_ANNOES 104 +#define F_DAART 105 +#define F_AART 106 +#define F_DADES 111 +#define F_ADES 112 + + +#define G_CATMER 1 +#define G_CODART 2 +#define G_DESART 3 + + + diff --git a/mg/mg3500.uml b/mg/mg3500.uml new file mode 100755 index 000000000..a39dcc998 --- /dev/null +++ b/mg/mg3500.uml @@ -0,0 +1,77 @@ +#include "mg3500.h" +PAGE "Stampa storico rimanenze" -1 -1 78 20 + +LISTBOX F_ORDINE 20 +BEGIN + FLAGS "G" + PROMPT 2 1 "Ordinamento " + ITEM "C|codice" + MESSAGE ENABLE,G_CODART@|HIDE,G_DESART@ + ITEM "D|descrizione" + MESSAGE DISABLE,G_CODART@|SHOW,G_DESART@ +END + +NUMBER F_ANNOES 4 +BEGIN + FLAGS "A" + PROMPT 2 2 "Codice es. " +END + +STRING F_DAART 20 +BEGIN + PROMPT 2 4 "Dall'articolo " + FLAGS "U" + USE LF_ANAMAG + INPUT CODART F_DAART + DISPLAY "Codice" CODART + DISPLAY "Descr@50" DESCR + OUTPUT F_DAART CODART + GROUP G_CODART +END +STRING F_AART 20 +BEGIN + PROMPT 2 5 " all'articolo " + FLAGS "U" + COPY USE F_DAART + INPUT CODART F_AART + COPY DISPLAY F_DAART + OUTPUT F_AART CODART + GROUP G_CODART +END + +STRING F_DADES 50 +BEGIN + PROMPT 2 4 "Dall'articolo " + FLAGS "U" + USE LF_ANAMAG KEY 2 + INPUT DESCR F_DADES + DISPLAY "Descr@50" DESCR + DISPLAY "Codice" CODART + OUTPUT F_DADES DESCR + GROUP G_DESART +END + +STRING F_ADES 50 +BEGIN + PROMPT 2 5 " all'articolo " + FLAGS "U" + COPY USE F_DADES + INPUT DESCR F_ADES + COPY DISPLAY F_DADES + OUTPUT F_ADES DESCR + GROUP G_DESART +END + + +BUTTON DLG_OK 10 2 +BEGIN + PROMPT -12 -1 "" +END + +BUTTON DLG_QUIT 10 2 +BEGIN + PROMPT -22 -1 "" +END + +ENDPAGE +ENDMASK