Files correlati : pd6411 Ricompilazione Demo : [ ] Commento : Se la riga no e' di tipo A1, la salto git-svn-id: svn://10.65.10.50/branches/R_10_00@21220 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			139 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			139 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
#include <applicat.h>
 | 
						|
 | 
						|
#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;
 | 
						|
}
 |