From 965e22e6c487dacc9382bb820c39cd755687be11 Mon Sep 17 00:00:00 2001 From: luca83 Date: Fri, 29 Jan 2010 16:07:16 +0000 Subject: [PATCH] Patch level : 10.0 patch 604 Files correlati : lv2 Ricompilazione Demo : [ ] Commento : Corretto l'utilizzo delle causali di partenza presenti sulle righe dei BdR git-svn-id: svn://10.65.10.50/trunk@20023 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- lv/lv2400.cpp | 36 +++++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/lv/lv2400.cpp b/lv/lv2400.cpp index 3f7000307..b79950166 100755 --- a/lv/lv2400.cpp +++ b/lv/lv2400.cpp @@ -53,7 +53,7 @@ class TGenera_documenti_app : public TSkeleton_application private: //Metodi per la generazione dei documenti bool crea_documento(const TISAM_recordset& plan, TLog_report& rep, int& numdocgen, TAssoc_array& documenti); - void crea_riga(const TString& codart, const char modpas, const int tplis, const bool tmp, const bool prinbo, TDocumento& doc, TLog_report& rep); + void crea_riga(TToken_string& chiave, const char modpas, const int tplis, const bool tmp, const bool prinbo, TDocumento& doc, TLog_report& rep); //Metodi per il recupero di codnum, tpdoc, stato bool numerazione_ddt(TString& codnum, TString& tpdoc, TString& statoi, TString& statof) const; bool numerazione_drit(const int cod, TString& codnum, TString& tpdoc, TString& statoi, TString& statof) const; @@ -299,8 +299,10 @@ bool TGenera_documenti_app::crea_documento(const TISAM_recordset& plan, TLog_rep int err = 1; if(numerodoc > 0) { - FOR_EACH_ASSOC_OBJECT(_quantita,h,codart,obj) + FOR_EACH_ASSOC_OBJECT(_quantita,h,key,obj) { + TToken_string chiave(key); + const TString80 codart = chiave.get(0); //preparo la chiave per la tabella righe contratti TToken_string keyrcont; keyrcont.add(codcli); @@ -311,9 +313,9 @@ bool TGenera_documenti_app::crea_documento(const TISAM_recordset& plan, TLog_rep const TDate adata = (TDate)rcont.get(LVRCONDV_FIDTTMP); if (dadata.ok() && dtcons >= adata) - crea_riga(codart, modpas, tplis, true, prinbo, doc, rep); + crea_riga(chiave, modpas, tplis, true, prinbo, doc, rep); else - crea_riga(codart, modpas, tplis, false, prinbo, doc, rep); + crea_riga(chiave, modpas, tplis, false, prinbo, doc, rep); } if (doc.rows() > 0) @@ -346,7 +348,7 @@ bool TGenera_documenti_app::crea_documento(const TISAM_recordset& plan, TLog_rep } //CREA_RIGA: questa funzione crea una riga merce per una bolla di consegna -void TGenera_documenti_app::crea_riga(const TString& codart, const char modpas, const int tplis, const bool tmp, const bool prinbo, TDocumento& doc, TLog_report& rep) +void TGenera_documenti_app::crea_riga(TToken_string& chiave, const char modpas, const int tplis, const bool tmp, const bool prinbo, TDocumento& doc, TLog_report& rep) { const int perarr = ini_get_int(CONFIG_DITTA, "lv", "Perarr"); //creo la nuova riga @@ -360,6 +362,8 @@ void TGenera_documenti_app::crea_riga(const TString& codart, const char modpas, const long codcli = doc.get_long(DOC_CODCF); const long codcont = doc.get_long(DOC_CODCONT); + const TString80 codart = chiave.get(0); + const TString4 causale = chiave.get(1); //calcolo della quantità che va sulla bolla @@ -375,8 +379,8 @@ void TGenera_documenti_app::crea_riga(const TString& codart, const char modpas, arrot = false; const real conguaglio = rcont.get_real(LVRCONDV_QTACONG); - real& qta = *(real*)_quantita.objptr(codart); - const real& qta1 = *(real*)_quantita_ritirata.objptr(codart); + real& qta = *(real*)_quantita.objptr(chiave); + const real& qta1 = *(real*)_quantita_ritirata.objptr(chiave); const real przdttmp = rcont.get_real(LVRCONDV_PRZDTTMP); //instanzio una cache sulla tabella del magazzino @@ -419,7 +423,7 @@ void TGenera_documenti_app::crea_riga(const TString& codart, const char modpas, rdoc.put(RDOC_CODIVA, anamag.get(ANAMAG_CODIVA)); //codiva - const TCausale_lavanderie caudt(ini_get_string(CONFIG_DITTA, "lv", "CAULVRITDT")); + const TCausale_lavanderie caudt(causale); //se ho ritirato un quantitativo di roba maggiore o uguale alla dotazione temporanea //allora creo la nuova riga documento e azzero la dottmp; altrimenti preparo la riga @@ -429,7 +433,7 @@ void TGenera_documenti_app::crea_riga(const TString& codart, const char modpas, qta -= dottmp; rdoc.put(RDOC_QTAGG1, dottmp); //quantità ritirata rdoc.put(RDOC_GENERATA, true); - rdoc.put(RDOC_CODAGG1, caudt.codice()); + rdoc.put(RDOC_CODAGG1, caudt.caucol().empty() ? caudt.codice() : caudt.caucol()); dottmp = 0; dotod -= dottmp; TString str; @@ -443,7 +447,7 @@ void TGenera_documenti_app::crea_riga(const TString& codart, const char modpas, dotod -= qta; rdoc.put(RDOC_QTAGG1, qta); //quantità ritirata rdoc.put(RDOC_GENERATA, true); - rdoc.put(RDOC_CODAGG1, caudt.codice()); + rdoc.put(RDOC_CODAGG1, caudt.caucol().empty() ? caudt.codice() : caudt.caucol()); TString str; str << "L'articolo " << codart << " inserito nel documento " << doc.get(DOC_CODNUM) << "-" << doc.get(DOC_TIPODOC) << " numero " << doc.get(DOC_NDOC) << " in dotazione temporanea non è stato ritirato completamente." @@ -518,7 +522,7 @@ void TGenera_documenti_app::crea_riga(const TString& codart, const char modpas, rdoc.put(RDOC_GENERATA, true); //causale da mettere sulle righe documento - const TCausale_lavanderie cau(ini_get_string(CONFIG_DITTA, "lv", "CAUSLAV")); + const TCausale_lavanderie cau(causale); const TString4 codcau = cau.caucol().empty() ? cau.codice() : cau.caucol(); rdoc.put(RDOC_CODAGG1, codcau); @@ -803,26 +807,28 @@ void TGenera_documenti_app::calcolo_quantita(const TDocumento& doc, const char r const TRiga_documento& rdoc = doc[i]; //estraggo i dati di interesse const TString80 codart = rdoc.get(RDOC_CODARTMAG); + const TString4 codcau = rdoc.get(RDOC_CODAGG1); + TToken_string key; key.add(codart); key.add(codcau); const real qtardoc = rdoc.get_real(RDOC_QTAGG1); //se è una riga che riguarda un articolo e se la quantità su questa riga non è nulla, allora la elaboro if (codart.full() && !qtardoc.is_zero()) { TArticolo& art = rdoc.articolo(); //leggo se esiste già nel TAssoc_array - real *qta = (real*)_quantita.objptr(codart); - real *qta1 = (real*)_quantita_ritirata.objptr(codart); + real *qta = (real*)_quantita.objptr(key); + real *qta1 = (real*)_quantita_ritirata.objptr(key); //se non esiste if (qta == NULL) { //per ora memorizzo zero qta = new real; - _quantita.add(codart,qta); + _quantita.add(key,qta); } if (qta1 == NULL) { //per ora memorizzo zero qta1 = new real; - _quantita_ritirata.add(codart,qta1); + _quantita_ritirata.add(key,qta1); } //aggiorno la quantità convertendola all'unità di misura di base, aggiungendola o sottraendola //...se si tratta di un ritiro o di un anticipo rispettivamente; nel caso della scansione delle