From 0fb48493490045cc6912ec27f06b1d12789bb42a Mon Sep 17 00:00:00 2001 From: angelo Date: Thu, 27 Jun 1996 09:37:32 +0000 Subject: [PATCH] Prime modifiche per far funzionare la stampa documenti. git-svn-id: svn://10.65.10.50/trunk@3099 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- ve/ve1100.cpp | 114 +++++++++++++++++++++++++++++++++++++------------- 1 file changed, 85 insertions(+), 29 deletions(-) diff --git a/ve/ve1100.cpp b/ve/ve1100.cpp index 1740b6161..8479c85d7 100755 --- a/ve/ve1100.cpp +++ b/ve/ve1100.cpp @@ -51,11 +51,11 @@ public: TDocVen_Form::TDocVen_Form(const char* name, TRelation &rel): TForm(), _firmrel(rel) { - read(name); - _total_prog= new TPiede_documento; - _riga= new TRiga; - _cliente= new TCliFor; - _cli_loaded= FALSE; + read(name); + _total_prog= new TPiede_documento; + _riga= new TRiga; + _cliente= new TCliFor; + _cli_loaded= FALSE; } TDocVen_Form::~TDocVen_Form() { @@ -75,8 +75,8 @@ word TDocVen_Form::set_body(word p, bool u) { } void TDocVen_Form::extended_parse_general(TScanner &scanner) { - if (scanner.popkey() == "MO") _module= scanner.string(); // se viene riconosciuto il token per l'impostazione del modulo legge il codice... - else scanner.push(); // ...altrimenti rimette il token nella coda dello scanner + if (scanner.popkey() == "MO") _module= scanner.string(); // se viene riconosciuto il token per l'impostazione del modulo legge il codice... + else scanner.push(); // ...altrimenti rimette il token nella coda dello scanner } bool TDocVen_Form::validate(TForm_item &cf, TToken_string &s) { @@ -146,10 +146,12 @@ bool TDocVen_Form::validate(TForm_item &cf, TToken_string &s) { for (j=0; j[,][,...] - // dove: è il campo della form (preceduto da '#') da cui prendere l'allineamento - // è uno dei seguenti valori: - // TOP allinea sulla riga d'inizio - // MIDDLE allinea al centro (effettivo) - // BOTTOM allinea sulla riga di fine (effettiva, non preimpostata) - // LEFT allinea sulla colonna d'inizio - // RIGHT allinea sulla colonna di fine - TString in(s.get()); + // allineamento della posizione di un campo rispetto ad un altro + // sintassi: _ALIGN,[,][,...] + // dove: è il campo della form (preceduto da '#') da cui prendere l'allineamento + // è uno dei seguenti valori: + // TOP allinea sulla riga d'inizio + // MIDDLE allinea al centro (effettivo) + // BOTTOM allinea sulla riga di fine (effettiva, non preimpostata) + // LEFT allinea sulla colonna d'inizio + // RIGHT allinea sulla colonna di fine + TString in(s.get()); if (in[0]== '#') in.ltrim(1); TForm_item &fi= cf.find_field(in); int i= 2; while (i] // dove: è il campo della form (preceduto da '#') da cui prendere il valore, se non è specificato è sottointeso il campo corrente @@ -393,7 +395,7 @@ bool TDocVen_Form::validate(TForm_item &cf, TToken_string &s) { } } else { TFieldref fref(s.get(), 0); - cf.set(fref.read((TRelation *)_cliente)); // l'oggetto cliente è figlio della TRelation, quindi lo passo al fieldref semplicemente con un typecast + cf.set(fref.read(*_cliente)); // l'oggetto cliente è figlio della TRelation, quindi lo passo al fieldref semplicemente con un typecast } return (TRUE); } // fine _CLIENTE @@ -472,6 +474,8 @@ class TStampa_Doc_Vendita: public TApplication { TString _provv; // stampa provvisioria int _anno; // anno della documentazione long _dalnum, _alnum; // estremi di numerazione dei documenti + TDate _dadata, _adata; // estremi di data dei documenti + bool _order_by_num; // flag che indica se e' stato selezionato l'ordine principale per numero documento bool _interattivo; // flag che indica se il prog. funziona in interattivo o in batch bool _definitiva; // flag che indica se la stampa è definitiva o no TRelation *_firmrel; // puntatore alla relazione che gestisce i dati della ditta corrente @@ -484,9 +488,43 @@ protected: virtual void on_firm_change(void); virtual behaviour on_module_change(const TString &, TString &); // funzione chiamata ad ogni cambio modulo durante la stampa virtual bool query_final_print(void); // funzione chiamata all'inizializzazione per sapere se la stampa è definitiva + static bool date2num_handler(TMask_field& f, KEY key); }; +bool TStampa_Doc_Vendita::date2num_handler(TMask_field& f, KEY key) +{ + TMask& m = f.mask(); + if (key == K_TAB && f.focusdirty()) + { + short dlg = f.dlg(); + TLocalisamfile doc(LF_DOC); + doc.setkey(3); + TString codnum1(m.get(F_CODNUM)),codnum2; + TString anno1(m.get(F_ANNO)),anno2; + TString provv1(m.get(F_PROVV)),provv2; + TDate data1(m.get_date(dlg)),data2; + long numdoc; + doc.zero(); + doc.put("CODNUM", codnum1); + doc.put("ANNO", anno1); + doc.put("PROVV", provv1); + doc.put("DATADOC", data1); + if (doc.read(_isgteq) == NOERR) + { + codnum2 = doc.get("CODNUM"); + anno2 = doc.get("ANNO"); + provv2 = doc.get("PROVV"); + data2 = doc.get_date("DATADOC"); + if (codnum1 == codnum2 && anno1 == anno2 && provv1 == provv2 && data1 == data2) + { + numdoc = doc.get_long("NDOC"); + m.set(dlg == F_DA_DATADOC ? F_DA_NDOC : F_A_NDOC, numdoc); + } + } + } + return TRUE; +} bool TStampa_Doc_Vendita::create() { TApplication::create(); @@ -523,12 +561,23 @@ void TStampa_Doc_Vendita::on_firm_change() { int TStampa_Doc_Vendita::select() { TMask m("ve1100a"); + TString wdate; + m.set_handler(F_DA_DATADOC, date2num_handler); + m.set_handler(F_A_DATADOC, date2num_handler); if (m.run() == K_ENTER) { _codnum= m.get(F_CODNUM); // lettura dei dati dalla maschera _anno= m.get_int(F_ANNO); _provv= m.get(F_PROVV); _dalnum= m.get_long(F_DA_NDOC); _alnum= m.get_long(F_A_NDOC); + if (_alnum == 0) _alnum = 9999999L; + wdate = m.get(F_DA_DATADOC); + if (wdate.not_empty()) _dadata = wdate; + else _dadata = botime; + wdate = m.get(F_A_DATADOC); + if (wdate.not_empty()) _adata = wdate; + else _adata = eotime; + _order_by_num = m.get(F_DATA_O_NUM) == "N"; return 1; } else return 0; // 0 indica che non si è usciti con "Conferma" dalla maschera } @@ -547,12 +596,14 @@ void TStampa_Doc_Vendita::print() { TTable tip("%TIP"); // istanzia la tabella dei tipi di documento per i profili TRelation rel(LF_DOC); // istanzia la relazione sul file principale TCursor cur(&rel); // crea il cursore principale dalla relazione + if (!_order_by_num) cur.setkey(3); // setta l'ordine per data. TLocalisamfile &doc= cur.file(); // prende il riferimento al file principale doc.zero(); // vuota il record del file doc.put("CODNUM", _codnum); // compone la chiave per il record di inizio cursore doc.put("ANNO", _anno); doc.put("PROVV", _provv); doc.put("NDOC", _dalnum); + if (!_order_by_num) doc.put("DATADOC", _dadata); doc.read(); // posiziona il file sul record TRectype darec= doc.curr(); // copia il record di inizio cursore doc.zero(); // vuota il record del file @@ -560,6 +611,7 @@ void TStampa_Doc_Vendita::print() { doc.put("ANNO", _anno); doc.put("PROVV", _provv); doc.put("NDOC", _alnum); + if (!_order_by_num) doc.put("DATADOC", _adata); doc.read(); // posiziona il file sul record TRectype arec= doc.curr(); // copia il record di fine cursore cur.setregion(darec, arec); // imposta il filtro sul cursore di stampa (nell'ordine giusto :-) @@ -570,6 +622,10 @@ void TStampa_Doc_Vendita::print() { nomeform= tip.get("S5"); // legge il nome del form di stampa profilo= tip.get("S4"); // legge il nome del profilo di configurazione profilo.ext("ini"); // aggiunge l'estensione al nome del file del profilo + if (profilo.empty() || nomeform.empty()) { + error_box("Nome profilo o form di stampa non valido nella tabella TIP"); + break; + } TConfig config(profilo, "STAMPA"); // apre il file di configurazione del profilo TToken_string stati((const char*)config.get("STATIVALIDI"), ','); // legge gli stati validi di questo tipo di documento if (_definitiva && (stati.get_pos(doc.get("STATO"))== -1)) { // se lo stato del doc. corrente non è valido...