diff --git a/ps/ps1002200.cpp b/ps/ps1002200.cpp index e66937bd9..ecc499cfb 100755 --- a/ps/ps1002200.cpp +++ b/ps/ps1002200.cpp @@ -143,7 +143,7 @@ int TImporta_produzione_msk::calcola_prog(const TString& codart, const TDate& da rilprod.set_var("#CODART", codart); rilprod.set_var("#DATA", data); - int prog = 1; + int prog = 0; if(rilprod.move_last()) prog += rilprod.get(RILPROD_PROG).as_int(); @@ -264,6 +264,8 @@ bool TImporta_produzione_msk::genera_produzione(const TFilename& file) TLocalisamfile rprod(LF_RRILPROD); TAssoc_array tprod_ar; + TAssoc_array tprod_prog; + int prog = 0; //scorro il file di input for(bool ok = recset.move_first(); ok; ok = recset.move_next()) @@ -275,14 +277,14 @@ bool TImporta_produzione_msk::genera_produzione(const TFilename& file) TString80 chiavedoc = recset.get("RDOCKEY").as_string(); TToken_string krdoc(chiavedoc, '.'); const TString80 codart = recset.get("CODART").as_string(); - const TString16 codlav = recset.get("CODLAV").as_string(); + TString16 codlav = recset.get("CODLAV").as_string(); const real qtaprod = recset.get("QTAPROD").as_real(); const bool flgsaldo = recset.get("FLGSALDO").as_string()[0] == 'S' ? true : false; const TString16 datastr = recset.get("DATALAV").as_string(); const TString8 orastr = recset.get("ORALAV").as_string(); const char provv = 'D'; - const TString4 codnum = krdoc.get(0); + TString4 codnum = krdoc.get(0); const int anno = krdoc.get_int(1); const long ndoc = krdoc.get_long(2); const int idriga = krdoc.get_int(3); @@ -292,11 +294,10 @@ bool TImporta_produzione_msk::genera_produzione(const TFilename& file) TToken_string key; key.add(codart); - key.add(datafine); key.add(codlav); key.add(chiavedoc.strip(".")); - int prog; + chiavedoc.strip("."); TString query; query << "USE RRILPROD\n" @@ -310,23 +311,55 @@ bool TImporta_produzione_msk::genera_produzione(const TFilename& file) query.cut(0); query << "USE RILPROD KEY 4\n" - << "SELECT OPERATORE==\"" << codlav << "\"\n" - << "FROM PROVV=D ANNO=" << anno << " CODNUM=" << codnum << "NRIGA=" << idriga << "\n" - << "TO PROVV=D ANNO=" << anno << " CODNUM=" << codnum << "NRIGA=" << idriga; + << "SELECT OPERATORE==\"" << codlav.strip(" ") << "\"\n" + << "FROM PROVV=D ANNO=" << anno << " CODNUM=" << codnum.strip(" ") << " NDOC=" << ndoc << " NRIGA=" << idriga << "\n" + << "TO PROVV=D ANNO=" << anno << " CODNUM=" << codnum.strip(" ") << " NDOC=" << ndoc << " NRIGA=" << idriga; TISAM_recordset testate(query); if(!testate.empty()) { TRectype& testata = testate.cursor()->curr(); real& qta = testata.get_real(RILPROD_QTA); + prog = testata.get_int(RILPROD_PROG); qta += qtaprod; - + testata.put(RILPROD_QTA, qta); tprod_ar.add(key, testata); + err = testata.rewrite_write(tprod); } else if(!tprod_ar.is_key(key)) { + query.cut(0); + query << "USE RILPROD KEY 4 SELECT OPERATORE==\"" << codlav.strip(" ") << "\"\n" + << "BY PROG\n" + << "FROM PROVV=D ANNO=" << anno << " CODNUM=" << codnum.strip(" ") << " NDOC=" << ndoc << "\n" + << "TO PROVV=D ANNO=" << anno << " CODNUM=" << codnum.strip(" ") << " NDOC=" << ndoc; + TISAM_recordset testate1(query); + + prog = 1; + + if(!testate1.empty()) + { + testate1.move_last(); + TRectype& testata = testate1.cursor()->curr(); + prog = testata.get_int(RILPROD_PROG); + prog++; + } + else + { + query << "USE RILPROD\n" + << "BY PROG\n" + << "FROM CODART=" << codart << "DATA=#DATA\n" + << "TO CODART=" << codart << "DATA=#DATA"; + TISAM_recordset testate1(query); + testate1.set_var("#DATA", datafine); + + testate1.move_last(); + TRectype& testata = testate1.cursor()->curr(); + prog = testata.get_int(RILPROD_PROG); + prog++; + } + //se non l'ho gią fatto creo il record della testata, altrimenti aggiorno le quantitą - prog = calcola_prog(codart, datafine); TRectype& testata = tprod.curr(); testata.zero(); testata.put(RILPROD_CODART, codart); @@ -341,19 +374,18 @@ bool TImporta_produzione_msk::genera_produzione(const TFilename& file) testata.put(RILPROD_QTA, qtaprod); testata.put(RILPROD_CHIUSO, flgsaldo); + err = testata.rewrite_write(tprod); + tprod_ar.add(key, testata); } else { TRectype& testata = *(TRectype*)tprod_ar.objptr(key); real& qta = testata.get_real(RILPROD_QTA); - TString supercazzone = codart; - supercazzone.strip(" "); - if(supercazzone == "01249000A/SL") - int cazzone = 1; qta += qtaprod; prog = testata.get_int(RILPROD_PROG); testata.put(RILPROD_QTA, qta); + err = testata.rewrite_write(tprod); tprod_ar.add(key, testata); } @@ -375,11 +407,12 @@ bool TImporta_produzione_msk::genera_produzione(const TFilename& file) } //salva le testate - FOR_EACH_ASSOC_OBJECT(tprod_ar, obj, key, itm) + /*FOR_EACH_ASSOC_OBJECT(tprod_ar, obj, key, itm) { + TToken_string k(key); TRectype& testata = *(TRectype*)itm; err = testata.rewrite_write(tprod); - } + }*/ return err == NOERR ? true : false; }