#include #include "../ve/velib.h" ////////////////////////////////////////// //// TAGGIUNGI_LISTINI_HABA_APP //// ////////////////////////////////////////// //Classe TAggiungi_listini_app class TAggiungi_listini_haba_app : public TSkeleton_application { private: TFilename _ini_name; protected: virtual bool check_autorization() const {return false;} virtual const char * extra_modules() const {return "cg";} virtual void main_loop(); void check_doc(); public: bool load_ini(bool check); }; //LOAD_INI: carica il file ini che contiene il documento bool TAggiungi_listini_haba_app::load_ini(bool check) { //argc é un intero che specifica quanti parametri vengono passati al programma dalla linea di comando const int args = argc(); const int narg = check ? 3 : 2; //argv é un array di null-terminated strings if (args <= narg) return false; const TFixed_string arg = argv(narg); if ((arg[0] != '-' && arg[0] != '/') || (arg[1] != 'i' && arg[1] != 'I')) return false; _ini_name = arg.mid(2); if (_ini_name.blank() && args > 3) _ini_name = argv(3); //controlla che il file su cui deve scrivere ci sia; se non c'é dá una segnalazione di errore if (!_ini_name.exist()) return false; return true; } //CHECK_DOC: scorro il file ini e aggiungo alla tabella dei listini le righe mancanti void TAggiungi_listini_haba_app::check_doc() { TConfig ini(_ini_name, "33"); TString4 para; para.format("%d", LF_DOC); const int anno = ini.get_int(DOC_ANNO, para); TString4 mese; mese.format("%02d", TDate(ini.get(DOC_DATADOC)).month()); TTable listini("LGM"); //scorro le righe documento, saltando quelle che non sono articoli, //e fermandomi quando la set_paragraph fallisce dal momento che non so a priori //quante sono le righe del documento for(int i = 1; ; i++) { TString4 riga; riga.format("%d,%d", LF_RIGHEDOC, i); if(!ini.set_paragraph(riga)) break; if(ini.get(RDOC_TIPORIGA) != "A1") continue; if(ini.get(RDOC_CODARTMAG).empty()) continue; const TString& codart = ini.get(RDOC_CODART); //devo prendere il prezzo al Kg (salvato in USER9, campo virtuale) e non il prezzo della riga const TString& r1 = ini.get(ini.get(RDOC_RG1)); const int inizio = r1.find("USER9="); const int fine = r1.find("\\n", inizio); TToken_string tmp(r1.sub(inizio, fine), '='); const real importo(tmp.get(1)); real spessore(ini.get(RDOC_LIVELLO)); spessore.ceil(); //il gruppo va letto dall'anagrafica magazzino const TString16 gruppo = cache().get(LF_ANAMAG, codart, ANAMAG_GRMERC); TString80 codtab; codtab << gruppo << mese << spessore; listini.put("CODTAB", codtab); //se fallisce la read, allora aggiungo la riga if(listini.read() != NOERR) { listini.zero(); listini.put("CODTAB", codtab); listini.put("R0", importo); listini.write(); } } } void TAggiungi_listini_haba_app::main_loop() //definizione della member function main_loop, della classe TAggiungi_listini_haba_app { TString sw(argv(2)); sw.upper(); const bool chk_doc = sw == "-V"; open_files(LF_TAB, LF_DOC, LF_RIGHEDOC, 0); //mostra un messaggio di errore se non riesce ad aprire il file richiesto; nota la conversione dei tipi che //é da eseguire quando devo passare una TString ad un %s if(!load_ini(chk_doc)) { error_box(TR("Impossibile aprire il file '%s'"), (const char*)_ini_name); return; } else { check_doc(); message_box(TR("Importazione listini completata")); } } ////// Esecuzione del programma /////////// int pd6411200(int argc, char* argv[]) { TAggiungi_listini_haba_app app; app.run(argc,argv,"Listini Haba"); return 0; }