diff --git a/projects/ps1104.vcproj b/projects/ps1104.vcproj index 75f22a64f..dde2177d4 100755 --- a/projects/ps1104.vcproj +++ b/projects/ps1104.vcproj @@ -300,10 +300,6 @@ > - - diff --git a/ps/ps1104100.cpp b/ps/ps1104100.cpp index edba7cc3c..8f9f9f9c2 100755 --- a/ps/ps1104100.cpp +++ b/ps/ps1104100.cpp @@ -68,11 +68,13 @@ bool TImporta_penne_mask::on_field_event(TOperable_field& f, TField_event e, lon ///////////////////////////////////////////////////////////// class TImporta_penne_recordset : public TCSV_recordset { + char _sep; + protected: virtual TRecnotype new_rec(const char* buf = NULL); public: - TImporta_penne_recordset(const char * fileName); + TImporta_penne_recordset(const char * fileName, char sep); }; TRecnotype TImporta_penne_recordset::new_rec(const char* buf) @@ -91,7 +93,7 @@ TRecnotype TImporta_penne_recordset::new_rec(const char* buf) } else { - if (*c == ';') //tipo di separatore dei campiche si trova nel record di origine + if (*c == _sep) //tipo di separatore dei campi che si trova nel record di origine { if (!apici) str << str.separator(); @@ -113,10 +115,17 @@ TRecnotype TImporta_penne_recordset::new_rec(const char* buf) } -TImporta_penne_recordset::TImporta_penne_recordset(const char * fileName) - : TCSV_recordset("CSV(;)") //separatore con ";" +TImporta_penne_recordset::TImporta_penne_recordset(const char * filename, char sep) + : TCSV_recordset("CSV(;)"), _sep(sep) //separatore { - load_file(fileName); + TString query; + query << "CSV(" << sep << ")\n" + << "SELECT * FROM " << filename; + + TFilename n; + if (parse_query(query, n) == _qt_select && n.exist()) + load_file(n); + } /////////////////////////////////////// @@ -127,7 +136,7 @@ class TImporta_penne : public TSkeleton_application virtual bool check_autorization() const { return false; } virtual const char * extra_modules() const { return "ve"; } - TImporta_penne_mask* _msk; + TImporta_penne_mask* _msk; protected: @@ -142,10 +151,21 @@ public: bool TImporta_penne::transfer(const TFilename& file) { - TImporta_penne_recordset s(file); + //che tipo di separatore dei campi si e' scelto? + const char sep = _msk->get(F_SEP)[0]; + //crea il recordset sul file di input utilizzando il separatore + TImporta_penne_recordset s(file, sep); TProgind pi(s.items(),"Importazione articoli in corso ...",true,true); + //dichiarazione di files e record da usare;si fa qui per non doverla ripetere ad ogni record letto; + //il record rec_anamag e' generico e vuoto (anche rec_umart ovviamente) + TLocalisamfile anamag(LF_ANAMAG); + TRectype& rec_anamag = anamag.curr(); + TLocalisamfile umart(LF_UMART); + TRectype& rec_umart = umart.curr(); + + //giro su tutti i record del recordset per importarli for (bool ok = s.move_first(); ok; ok = s.move_next()) { if (!pi.addstatus(1)) @@ -154,7 +174,7 @@ bool TImporta_penne::transfer(const TFilename& file) //prende i dati dal record di input del file csv //codart ci deve essere e va maiuscolizzato TString80 codart = s.get(0).as_string(); - if (codart.empty()) + if (codart.blank()) continue; codart.upper(); //descrizione @@ -168,29 +188,21 @@ bool TImporta_penne::transfer(const TFilename& file) //aggiorna i files ANAMAG e UMART //ANAMAG - TLocalisamfile anamag(LF_ANAMAG); - TRectype rec_anamag = anamag.curr(); rec_anamag.put(ANAMAG_CODART, codart); rec_anamag.put(ANAMAG_DESCR, descr); - //tenta la rewrite nel caso l'articolo esista gia' - int err = anamag.rewrite(rec_anamag); - //se non esiste fa la write di brutto - if (err != NOERR) - err = anamag.write(rec_anamag); + //tenta la rewrite nel caso l'articolo esista gia'; se non esiste fa la write di brutto + int err = anamag.rewrite_write(); //UMART //procede solo se la scrittura su anamag e' riuscita, in modo da evitare scritture incomplete if (err == NOERR) { - TLocalisamfile umart(LF_UMART); - TRectype rec_umart = umart.curr(); rec_umart.put(UMART_CODART, codart); rec_umart.put(UMART_NRIGA, 1); rec_umart.put(UMART_UM, um); rec_umart.put(UMART_PREZZO, prezzo); - if (umart.rewrite(rec_umart) != NOERR) - umart.write(rec_umart); + err = umart.rewrite_write(); } } diff --git a/ps/ps1104100a.h b/ps/ps1104100a.h index 4eb998854..fe3966160 100755 --- a/ps/ps1104100a.h +++ b/ps/ps1104100a.h @@ -3,4 +3,5 @@ #define F_PATH 103 #define F_NAME 104 #define F_UMS 105 -#define F_DESUMS 106 +#define F_DESUMS 106 +#define F_SEP 107 diff --git a/ps/ps1104100a.uml b/ps/ps1104100a.uml index 70bb21856..c0a90c093 100755 --- a/ps/ps1104100a.uml +++ b/ps/ps1104100a.uml @@ -46,7 +46,7 @@ BEGIN FLAGS "D" END -GROUPBOX DLG_NULL 80 5 +GROUPBOX DLG_NULL 80 6 BEGIN PROMPT 1 4 "@bParametri importazione" END @@ -66,9 +66,15 @@ BEGIN CHECKTYPE REQUIRED END +STRING F_SEP 1 +BEGIN + PROMPT 2 7 "Separatore dei campi nel file .csv " + CHECKTYPE REQUIRED +END + STRING F_UMS 2 BEGIN - PROMPT 2 7 "Unita' di misura " + PROMPT 2 8 "Unita' di misura " USE %UMS INPUT CODTAB F_UMS DISPLAY "Codice " CODTAB @@ -80,7 +86,7 @@ END STRING F_DESUMS 50 BEGIN - PROMPT 25 7 "" + PROMPT 25 8 "" USE %UMS KEY 2 INPUT S0 F_DESUMS DISPLAY "Descrizione@50" S0 @@ -91,32 +97,37 @@ END TEXT -1 BEGIN - PROMPT 2 9 "@bIstruzioni" + PROMPT 2 10 "@bIstruzioni" END TEXT -1 BEGIN - PROMPT 2 10 "Nel campo Cartella inserire il percorso completo della cartella che contiene il file da importare." + PROMPT 2 11 "_ Nel campo Cartella inserire il percorso completo della cartella che contiene il file da importare." END TEXT -1 BEGIN - PROMPT 2 11 "Nel campo File inserire il nome del file di tipo .csv da importare. Il nome NON deve contenere spazi." + PROMPT 2 12 "_ Nel campo File inserire il nome del file di tipo .csv da importare. Il nome NON deve contenere spazi." END TEXT -1 BEGIN - PROMPT 2 12 "Nel campo Unità di misura inserire il codice di U.M. che sarà applicato a tutti gli articoli importati." + PROMPT 2 13 "_ Nel campo Unità di Misura inserire il codice di U.M. che sarà applicato a tutti gli articoli importati." END TEXT -1 BEGIN - PROMPT 2 13 "All'avvio il programma ripropone l'ultimo file importato, la relativa cartella e la U.M. utilizzata." + PROMPT 2 14 "_ Nel campo Separatore inserire il carattere di separazione tra i campi del file da importare (es. ';' o ',')." END TEXT -1 BEGIN - PROMPT 2 14 "NON e' ammesso il carattere ';' nei record del file da importare!" + PROMPT 2 15 " Dipende dalle impostazioni del proprio computer. Si controlla aprendo il file di input con un editor di testo." +END + +TEXT -1 +BEGIN + PROMPT 2 16 "_ All'avvio il programma ripropone i parametri utilizzati nell'ultima importazione." END ENDPAGE