From cb754c78ca529f8205aea9a2fb3763b409a1affe Mon Sep 17 00:00:00 2001 From: alex Date: Tue, 31 May 2011 23:14:11 +0000 Subject: [PATCH] Patch level : Files correlati : Ricompilazione Demo : [ ] Commento : Stampa cartellini Tetractis git-svn-id: svn://10.65.10.50/branches/R_10_00@22198 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- ps/pl1048100.alx | 16 +++ ps/pl1048100.cpp | 253 ++++++++++++++++++++++++++++++++-------------- ps/pl1048100.rep | 117 ++++++--------------- ps/pl1048100a.h | 5 +- ps/pl1048100a.uml | 20 ++-- 5 files changed, 236 insertions(+), 175 deletions(-) create mode 100755 ps/pl1048100.alx diff --git a/ps/pl1048100.alx b/ps/pl1048100.alx new file mode 100755 index 000000000..89d5ecdaf --- /dev/null +++ b/ps/pl1048100.alx @@ -0,0 +1,16 @@ +: MESSAGE_CARTPARENTDOC ( n1 -- ) + CART_PARENT_DOC \ user defined word in ve1.exe +; + +: MESSAGE_CARTPARENTROW ( n1 -- ) + CART_PARENT_ROW \ user defined word in ve1.exe +; + +: MESSAGE_CURRCONT ( -- -- ) + CURRCONT +; + +: MESSAGE_CONTNUM ( -- -- ) + CONTNUM +; + diff --git a/ps/pl1048100.cpp b/ps/pl1048100.cpp index f9740c259..6e11e6d95 100755 --- a/ps/pl1048100.cpp +++ b/ps/pl1048100.cpp @@ -132,7 +132,7 @@ bool TCartellini_report::msg_contnum(TVariant_stack& stack) size_t TCartellini_report::get_usr_words(TString_array& words) const { - TReport::get_usr_words(words); + TDocument_report::get_usr_words(words); const char* const name[] = { "CART_PARENT_DOC", "CART_PARENT_ROW", "CURRCONT", "CONTNUM", NULL }; @@ -146,7 +146,7 @@ size_t TCartellini_report::get_usr_words(TString_array& words) const bool TCartellini_report::execute_usr_word(unsigned int opcode, TVariant_stack& stack) { if (opcode < _first_msg) - return TReport::execute_usr_word(opcode, stack); + return TDocument_report::execute_usr_word(opcode, stack); opcode -= _first_msg; switch (opcode) { @@ -173,11 +173,40 @@ public: const real perc() const {return _perc;} real & perc() { return _perc;} - TCarrello(const char * key) : TRecord_array(key, LF_PACKLIST) {} + TCarrello(const char * key) : TRecord_array(key, LF_PACKLIST) { } }; static TLaundry_contract * __contract = NULL; +class TCrea_cartellini : public TSkeleton_application +{ + TDocumento * _doc; + int _contnum; + +private: + +protected: + virtual const char * extra_modules() const { return "ba"; } + const TDocumento & doc() const { return *_doc;} + virtual void main_loop(); + void crea_precedenze(ofstream & outfile, TArray & precs); + void crea_carrelli(TArray & precs); + void riempi_max(TArray & carrelli, TArray & precs); + void resto_max(TArray & carrelli, TArray & precs); + void riempi_normale(TArray & carrelli, TArray & precs, int level); + void riempi_resti(TArray & carrelli, TArray & precs); + +public: + const TDocumento & doc() { return *_doc; } + void ottimizza(const char * dir); + void stampa(); + bool set_params(); + bool set_params(const TMask & m); +}; + +// restituisce un riferimento all' applicazione +inline TCrea_cartellini & app() { return (TCrea_cartellini &) main_app();} + class TPrecedenza : public TObject { int _tipoart; @@ -232,8 +261,9 @@ public: const char * TPrecedenza::key_carrello(int num) const { TString & key = get_tmp_string(25); + TString4 codnum(_codnum); codnum.left_just(4, '_'); - key.format("%s|%c%04d%-4s%-6ld%04d", (const char *) tipo_contenitore(), _provv, _anno, _codnum, _ndoc, num); + key.format("%s|%c%04d%s%06ld%04d", (const char *) tipo_contenitore(), _provv, _anno, (const char *) codnum, _ndoc, num); return key; } @@ -244,9 +274,9 @@ TPrecedenza::TPrecedenza(const char * codart, int anno, char provv, const char * const bool separa_articoli = cache().get("&LV020", key).get_bool(ARTSEP); _tipoart = separa_articoli ? atoi(cache().get("&LV047", codart, TPARTICOLO)) : 0; - if (__contract = NULL) + if (__contract == NULL) { - TString key; key.format("%c|%d|%S|%ld", _provv, _anno, _codnum, _ndoc); + TString key; key.format("%c|%d|%s|%ld", _provv, _anno, (const char *) _codnum, _ndoc); __contract = new TLaundry_contract(_codcf, 0, TDate(cache().get(LF_DOC, key, DOC_DATADOC))); } const TRectype & rec = __contract->row(_codart); @@ -365,8 +395,10 @@ real TPrecedenza::get_pacchi_max() const real pppacco = cached_article(_codart).get(ANAMAG_PPCONF); if (pppacco > 0) + { pacchi /= pppacco; - pppacco.floor(); + pacchi.floor(); + } return pacchi; } @@ -387,8 +419,10 @@ real TPrecedenza::get_pacchi_nor() const real pppacco = cached_article(_codart).get(ANAMAG_PPCONF); if (pppacco > 0) + { pacchi /= pppacco; - pppacco.floor(); + pacchi.floor(); + } return pacchi; } @@ -401,7 +435,7 @@ const TString & TPrecedenza::tipo_contenitore() const const TString & TPrecedenza::dimensione() const { - TString key; key << _tipocf << _codcf; // verificare + TString key; key << _tipocf << _codcf; // verificare return cache().get("&LV020", key, DIMENSIONE); } @@ -421,6 +455,7 @@ void TPrecedenza::prec2rec(TRectype & rec) const rec.put(PACKLIST_NDOC, _ndoc); rec.put(PACKLIST_IDRIGA, _idriga); rec.put(PACKLIST_NRIGADOC, _nrow); + rec.put(PACKLIST_DATADOC, app().doc().get(DOC_DATADOC)); } void TPrecedenza::print_on(ostream& out) const @@ -439,29 +474,6 @@ int sort_prec(const TObject** o1, const TObject** o2) return p1.prec() - p2.prec(); return strcmp(p1.codart(), p2.codart()); } -class TCrea_cartellini : public TSkeleton_application -{ - TDocumento * _doc; - int _contnum; - -private: - -protected: - const TDocumento & doc() const { return *_doc;} - virtual void main_loop(); - void crea_precedenze(ofstream & outfile, TArray & precs); - void crea_carrelli(TArray & precs); - void riempi_max(TArray & carrelli, TArray & precs); - void resto_max(TArray & carrelli, TArray & precs); - void riempi_normale(TArray & carrelli, TArray & precs, int level); - void riempi_resti(TArray & carrelli, TArray & precs); - -public: - void ottimizza(const char * dir); - void stampa(); - bool set_params(); - bool set_params(const TMask & m); -}; void TCrea_cartellini::crea_precedenze(ofstream & outfile, TArray & precs) { @@ -492,11 +504,11 @@ void TCrea_cartellini::crea_precedenze(ofstream & outfile, TArray & precs) precs.add(new TPrecedenza(codart, anno, provv, codnum, ndoc, idriga, nrow, qta, pacchi, tipocf, codcf)); } - precs.sort(); + precs.sort(sort_prec); const int prec_nrows = precs.items(); - outfile << "Precedenze\nPrecedenza;Articolo;Anno;;Numerazione;Numero;ID Riga;Numero riga;Quantità;Pacchi;Cliente"; - for (int r = 1; r <= prec_nrows; r++) + outfile << "Precedenze\nPrecedenza;Articolo;Anno;;Numerazione;Numero;ID Riga;Numero riga;Quantità;Pacchi;Cliente\n"; + for (int r = 0; r < prec_nrows; r++) outfile << precs[r] << '\n'; } @@ -504,16 +516,20 @@ void TCrea_cartellini::riempi_max(TArray & carrelli, TArray & precs) { const int items = precs.items(); - for(int r = 1; r <= items; r++) + for(int r = 0; r < items; r++) { TPrecedenza & p = (TPrecedenza &) precs[r]; const real max_qta = p.get_qta_max(); const real max_pacchi = p.get_pacchi_max(); + if (max_pacchi <= ZERO) + break; + while (p.pacchi() > max_pacchi) { TCarrello * c = new TCarrello(p.key_carrello(carrelli.items() + 1)); + c->destroy_rows(); carrelli.add(c); TRectype & rec = c->row(c->rows() + 1, true); @@ -532,21 +548,39 @@ void TCrea_cartellini::resto_max(TArray & carrelli, TArray & precs) { const int items = precs.items(); - for(int r = 1; r <= items; r++) + for(int r = 0; r < items; r++) { TPrecedenza &p = (TPrecedenza &) precs[r]; if (p.pacchi() > ZERO) { - TCarrello * c = (TCarrello *)carrelli.objptr(carrelli.items()); + TCarrello * c = NULL; const real max_qta = p.get_qta_max(); - const real max_pacchi = p.get_qta_max(); + const real max_pacchi = p.get_pacchi_max(); + const int ncarrelli = carrelli.items(); + + if (max_pacchi <= ZERO) + break; + real perc = p.pacchi() / max_pacchi; perc.round(4); - if (c == NULL || c->perc() + perc > UNO) + for (int i = 0; i < ncarrelli; i++) + { + TCarrello * cc = (TCarrello *) carrelli.objptr(i); + real cperc = cc->perc(); + + if (UNO - cperc > perc) + { + c = (TCarrello *) carrelli.objptr(i); + break; + } + } + if (c == NULL) { c = new TCarrello(p.key_carrello(carrelli.items() + 1)); + + c->destroy_rows(); carrelli.add(c); } @@ -566,32 +600,66 @@ void TCrea_cartellini::riempi_normale(TArray & carrelli, TArray & precs, int lev { const int items = precs.items(); - for(int r = 1; r <= items; r++) + for(int r = 0; r < items; r++) { TPrecedenza & p = (TPrecedenza &) precs[r]; - if (p.prec() <= level) + + if (p.prec() <= level && p.pacchi() > ZERO) { + int ncarrello = 0; + int ncarrelli = carrelli.items(); const real qta = p.get_qta_nor(); const real pacchi = p.get_pacchi_nor(); const real max_pacchi = p.get_pacchi_max(); - real perc = p.pacchi() / max_pacchi; + + if (pacchi <= ZERO || max_pacchi <= ZERO) + break; + + real perc = pacchi / max_pacchi; perc.round(4); - - while (p.pacchi() > pacchi) + if (p.pacchi() >= pacchi) { - TCarrello * c = new TCarrello(p.key_carrello(carrelli.items() + 1)); + for (ncarrello = 0; ncarrello < ncarrelli; ncarrello++) + { + TCarrello * cc = (TCarrello *) carrelli.objptr(ncarrello); + real cperc = cc->perc(); + if (UNO - cperc > perc) + break; + } + while (p.pacchi() > pacchi) + { + TCarrello * c = ncarrello < ncarrelli ? (TCarrello *) carrelli.objptr(ncarrello) : new TCarrello(p.key_carrello(ncarrello + 1)); + + ncarrello++; + c->destroy_rows(); + carrelli.add(c); + + TRectype & rec = c->row(c->rows() + 1, true); + + p.prec2rec(rec); + rec.put(PACKLIST_QTA, qta); + rec.put(PACKLIST_CONF, pacchi); + c->perc() = perc; + p.qta() -= qta; + p.pacchi() -= pacchi; + } + + TCarrello * c = ncarrello < ncarrelli ? (TCarrello *) carrelli.objptr(ncarrello) : new TCarrello(p.key_carrello(ncarrello + 1)); + + c->destroy_rows(); carrelli.add(c); TRectype & rec = c->row(c->rows() + 1, true); p.prec2rec(rec); - rec.put(PACKLIST_QTA, qta); - rec.put(PACKLIST_CONF, pacchi); + rec.put(PACKLIST_QTA, p.qta()); + rec.put(PACKLIST_CONF, p.pacchi()); + perc = p.pacchi() / max_pacchi; c->perc() = perc; - p.qta() -= qta; - p.pacchi() -= pacchi; + p.qta() = ZERO; + p.pacchi() = ZERO; } } } @@ -601,38 +669,57 @@ void TCrea_cartellini::riempi_resti(TArray & carrelli, TArray & precs) { const int items = precs.items(); - for(int r = 1; r <= items; r++) + for(int r = 0; r < items; r++) { TPrecedenza &p = (TPrecedenza &) precs[r]; - if (p.pacchi() > ZERO) + while (p.pacchi() > ZERO) { - TCarrello * c = (TCarrello *) carrelli.objptr(carrelli.items()); const real max_qta = p.get_qta_max(); - const real max_pacchi = p.get_qta_max(); + const real max_pacchi = p.get_pacchi_max(); + const int ncarrelli = carrelli.items(); real qta = p.qta(); real pacchi = p.pacchi(); - real perc = pacchi / max_pacchi; + if (pacchi <= ZERO || max_pacchi <= ZERO) + break; + + real perc = pacchi / max_pacchi; + TCarrello * c = NULL; + perc.round(4); + for (int i = 0; i < ncarrelli; i++) + { + TCarrello * cc = (TCarrello *) carrelli.objptr(i); + real cperc = cc->perc(); + + if (UNO - cperc > UNO / max_pacchi) + { + c = (TCarrello *) carrelli.objptr(i); + break; + } + } + if (c == NULL) { c = new TCarrello(p.key_carrello(carrelli.items() + 1)); + + c->destroy_rows(); carrelli.add(c); } - if (c->perc() + perc > UNO) + + if (UNO - c->perc() < perc) { - real pppacco = cached_article(p.codart()).get(ANAMAG_PPCONF); - real perc = UNO - c->perc(); - - pacchi = perc * max_pacchi; - pacchi.floor(); + perc = UNO - c->perc(); + pacchi = perc * max_pacchi; pacchi.floor(); perc = pacchi / max_pacchi; - if (pppacco == 0) - pppacco = 1; - qta = pacchi * pppacco; + perc.round(4); + qta = pacchi; + real pppacco = cached_article(p.codart()).get(ANAMAG_PPCONF); + + if (pppacco > 0) + qta *= pppacco; } - TRectype & rec = c->row(c->rows() + 1, true); p.prec2rec(rec); @@ -689,8 +776,15 @@ void TCrea_cartellini::crea_carrelli(TArray & precs) void TCrea_cartellini::stampa() { - TCartellini_report rep("pl1048100", _contnum); + TString key; key << _doc->get(DOC_TIPOCF) << _doc->get_long(DOC_CODCF); + const TString4 tpimballo = cache().get("&LV020", key, TPIMBALLO); + TFilename name("pl1048100"); name << tpimballo; name.ext("rep"); + + if (!name.custom_path()) + name = "pl1048100"; + TCartellini_report rep(name, _contnum); TRecordset * pset = rep.recordset(); + if (pset != NULL) { TTrec docs(LF_DOC); @@ -705,15 +799,20 @@ void TCrea_cartellini::stampa() fieldname.insert("#"); pset->set_var(fieldname, var); } + + pset->set_var("#CONT", tpimballo); } TReport_book book; - TString key; key << _doc->get(DOC_TIPOCF) << _doc->get_long(DOC_CODCF); - - pset->set_var("#CONT", cache().get("&LV020", key, TPIMBALLO)); + for (int c = 1; c <= _contnum; c++) { - pset->set_var("#KEY", format("%c%04d%-4s%-6ld%04d", _doc->get_char(DOC_PROVV), _doc->get_int(DOC_ANNO), (const char *)_doc->get(DOC_CODNUM), _doc->get_long(DOC_NDOC), c)); + if (pset != NULL) + { + TString4 codnum(_doc->get(DOC_CODNUM)); codnum.left_just(4, '_'); + + pset->set_var("#KEY", format("%c%04d%-4s%06ld%04d", _doc->get_char(DOC_PROVV), _doc->get_int(DOC_ANNO), (const char *) codnum, _doc->get_long(DOC_NDOC), c)); + } book.add(rep); } @@ -724,11 +823,13 @@ void TCrea_cartellini::ottimizza(const char * dir) { TString outname; - outname.format("%s/bo%s%06ld.xls", dir, doc().get(RDOC_CODNUM), doc().get_long(RDOC_NDOC)); + outname.format("%s/bo%s%06ld.xls", dir, (const char *) doc().get(RDOC_CODNUM), doc().get_long(RDOC_NDOC)); TString_array prec_rows; - ofstream outfile(outname); + { + ofstream outfile(outname); - crea_precedenze(outfile, prec_rows); + crea_precedenze(outfile, prec_rows); + } crea_carrelli(prec_rows); } @@ -776,9 +877,10 @@ void TCrea_cartellini::main_loop() //definizione della member function main_loop make_dir(outdir); if (argc() <= 2) { - TMask m("ps1048100a"); + TMask m("pl1048100a"); - m.set(F_CODNUM, ini_get_string(CONFIG_DITTA, "ve", "NUM_GEN")); + m.set(F_CODNUM, ini_get_string(CONFIG_DITTA, "lv", "NUM_GEN")); + m.first_focus(F_NDOC); while (m.run() == K_ENTER && set_params(m)) { @@ -786,6 +888,7 @@ void TCrea_cartellini::main_loop() //definizione della member function main_loop stampa(); delete _doc; _doc = NULL; + m.first_focus(F_NDOC); } } else diff --git a/ps/pl1048100.rep b/ps/pl1048100.rep index f42b8e95b..af2c32964 100755 --- a/ps/pl1048100.rep +++ b/ps/pl1048100.rep @@ -1,17 +1,17 @@ - + Cartellini -
+
- + - + - DATADOC + 126.DATADOC - + 126.TIPOCONT @@ -19,129 +19,78 @@
  • - + - - + + MESSAGE _CURRCONT - + MESSAGE _CONTNUM - - + + - - + + NDOC - + - + - + - + - + MESSAGE _DITTA,!RAGSOC - + 20.RICALT MESSAGE _CLIENTE,!RAGSOC
  • -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    +
    +
    - 34.CODART + CODART - + - MESSAGE _DESCRIGA + 47.DESCR - + - 30 - QTA + 126.QTA - + - PACCHI + 126.CONF
    -
    +
    - +
    -
    +
    USE 126 JOIN 20 INTO TIPOCF==TIPOCF CODCF==CODCF +JOIN 47 INTO CODART==CODART FROM TIPOCONT=#CONT CODICE=#KEY TO TIPOCONT=#CONT CODICE=#KEY \ No newline at end of file diff --git a/ps/pl1048100a.h b/ps/pl1048100a.h index 1b7aa8800..f5e9b95fa 100755 --- a/ps/pl1048100a.h +++ b/ps/pl1048100a.h @@ -2,8 +2,9 @@ #define F_ANNO 102 #define F_PROVV 103 #define F_NDOC 104 -#define F_TIPOCF 107 #define F_CODCF 108 -#define F_TIPODOC 172 +#define F_CODDITTA 109 +#define F_RAGSOCDITTA 110 + #define F_DESNUM 173 #define F_DESTIPODOC 176 diff --git a/ps/pl1048100a.uml b/ps/pl1048100a.uml index a8f6351f4..6914d1150 100755 --- a/ps/pl1048100a.uml +++ b/ps/pl1048100a.uml @@ -1,8 +1,8 @@ -#include "veuml.h" +#include "pl1048100a.h" TOOLBAR "Toolbar" 0 0 0 2 -#include +#include ENDPAGE @@ -86,7 +86,7 @@ NUMBER F_NDOC 6 BEGIN PROMPT 24 7 "Numero " FIELD NDOC - USE LF_DOC SELECT (#F_STATO=="")||(STATO==#F_STATO) + USE LF_DOC JOIN LF_CLIFO TO LF_DOC INTO TIPOCF==TIPOCF CODCF==CODCF INPUT PROVV F_PROVV SELECT INPUT ANNO F_ANNO SELECT @@ -103,25 +103,17 @@ BEGIN DISPLAY "Codice" CODCF DISPLAY "Ragione Sociale@50" LF_CLIFO->RAGSOC OUTPUT F_NDOC NDOC - OUTPUT F_TIPODOC TIPODOC OUTPUT F_PROVV PROVV CHECKTYPE REQUIRED FLAG "R" END -LIST F_TIPOCF 1 12 -BEGIN - PROMPT 2 8 "Tipo " - ITEM "C|Cliente" - ITEM "F|Fornitore" -END - NUMBER F_CODCF 6 BEGIN PROMPT 24 8 "Codice " - USE LF_DOC KEY 2 SELECT (CODNUM==#F_CODNUM) && (PROVV==#F_PROVV) && (ANNO==#F_ANNO) && ((#F_STATO=="")||(STATO==#F_STATO)) + USE LF_DOC KEY 2 SELECT (CODNUM==#F_CODNUM)&&(PROVV==#F_PROVV)&&(ANNO==#F_ANNO) JOIN LF_CLIFO INTO TIPOCF==TIPOCF CODCF==CODCF - INPUT TIPOCF F_TIPOCF SELECT + INPUT TIPOCF "C" INPUT CODCF F_CODCF INPUT PROVV F_PROVV INPUT ANNO F_ANNO @@ -140,7 +132,7 @@ BEGIN DISPLAY "Stato" STATO COPY OUTPUT F_NDOC OUTPUT F_CODCF CODCF - CHECKTYPE NORMAL + CHECKTYPE SEARCH END ENDPAGE