Sistemata stampa doc. vendita. Corretti bug stampe sconti e condiz. vendita.
git-svn-id: svn://10.65.10.50/trunk@1934 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
		
							parent
							
								
									5964b25487
								
							
						
					
					
						commit
						a586455adb
					
				| @ -1,4 +1,6 @@ | ||||
| #include "ve4.h" | ||||
| 
 | ||||
| #include "batbtip.h" | ||||
| //#include "ve4.h" | ||||
| 
 | ||||
| TOOLBAR "" 0 20 60 2 | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										262
									
								
								ve/ve1100.cpp
									
									
									
									
									
								
							
							
						
						
									
										262
									
								
								ve/ve1100.cpp
									
									
									
									
									
								
							| @ -1,3 +1,4 @@ | ||||
| 
 | ||||
| #include <applicat.h> | ||||
| #include <config.h> | ||||
| #include <form.h> | ||||
| @ -10,43 +11,6 @@ | ||||
| #include <urldefid.h> | ||||
| #include <utility.h> | ||||
| 
 | ||||
| // !! fatto (in ordine d'esecuzione):
 | ||||
| // !! ------------------------------
 | ||||
| // !! - lettura parametri linea di comando per eventuale esecuzione batch
 | ||||
| // !! - impostazione di flag di interattività posto a true se non ci sono parametri sulla linea
 | ||||
| // !!   di comando; influisce su:
 | ||||
| // !!   - apertura maschera richiesta dati
 | ||||
| // !!   - richiesta di stampa definitiva
 | ||||
| // !!   - richiesta d'interruzione in caso di stato non valido durante stampa definitiva
 | ||||
| // !!   - interruzione forzata in caso di impossibilità di rinumerazione definitiva
 | ||||
| // !! - impostazione di flag di stampa definitiva (da linea di comando o richiesta con box);
 | ||||
| // !!   influisce su:
 | ||||
| // !!   - controllo stati durante la stampa
 | ||||
| // !!   - lancio della procedura di rinumerazione definitiva
 | ||||
| // !! - lettura tabelle codice numerazione e tipo documento
 | ||||
| // !! - lancio batch della stampa se sono presenti i parametri sulla linea di comando
 | ||||
| // !! - creazione e apertura della maschera e lettura dati
 | ||||
| // !! - impostazione della regione del cursore del form
 | ||||
| // !! - ciclo di lettura del form con stampa della posizione corrente e lancio (eventuale)
 | ||||
| // !!   della rinumerazione
 | ||||
| // !! - intercettazione dei seguenti messaggi custom nel form:
 | ||||
| // !!   - _ISAMREAD per letture generiche dal database
 | ||||
| // !!   - _TABLEREAD per lettura generiche da tabelle del database
 | ||||
| // !!   - _DITTA per ottenere dati di configurazione sulla ditta in uso
 | ||||
| // !!   - _CIFRELETTERE per la conversione di un valore in lettere
 | ||||
| // !! - chiusura applicazione
 | ||||
| 
 | ||||
| // !! da fare:                                       
 | ||||
| // !! -------
 | ||||
| // !! - verificare le messaggistiche verso l'utente e il controllo dell'interattività
 | ||||
| // !! - aggiungere lettura del tipo di modulo dal form (quando sarà fatto)
 | ||||
| // !! - completare routine di scelta di cosa fare al cambio del modulo
 | ||||
| // !! - aggiungere tutti gli altri messaggi di gestione dei documenti di vendita (clienti,
 | ||||
| // !!   totalizzatori, calcoli, ecc.)
 | ||||
| // !! - tutto il resto!
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| #include "ve1100.h" | ||||
| #include "ve0100b.h" | ||||
| 
 | ||||
| @ -58,9 +22,12 @@ | ||||
| 
 | ||||
| class TDocVen_Form: public TForm {  | ||||
|   TRelation &_firmrel; // relazione di gestione dei dati della ditta corrente
 | ||||
| 	TString _module; // codice del modulo di carta associato a questo al form
 | ||||
| protected: | ||||
|   virtual bool validate(TForm_item &, TToken_string &); | ||||
| 	virtual void extended_parse_general(TScanner &); // gestione dei parametri estesi nella sezione general
 | ||||
|   virtual bool validate(TForm_item &, TToken_string &); // gestione dei messaggi estesi nei campi
 | ||||
| public: | ||||
| 	const TString &get_module_code() { return _module; } // ritorna il codice del modulo di carta
 | ||||
|   TDocVen_Form(const char *, TRelation &); | ||||
| }; | ||||
| 
 | ||||
| @ -68,12 +35,17 @@ public: | ||||
| 
 | ||||
| TDocVen_Form::TDocVen_Form(const char* name, TRelation &rel): TForm(name), _firmrel(rel) {} | ||||
| 
 | ||||
| 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
 | ||||
| } | ||||
| 
 | ||||
| bool TDocVen_Form::validate(TForm_item &cf, TToken_string &s) { | ||||
|   const TString code(s.get(0)); // prende il primo parametro, il codice del messaggio
 | ||||
| 
 | ||||
|   if (code== "_ISAMREAD") { | ||||
|     // lettura generica di un file del database
 | ||||
|     // sintassi: _ISAMREAD <file> <espressione input>,<espressione input>,... <espressione output>,<espressione output>,...
 | ||||
|     // sintassi: _ISAMREAD,<file>,<espressione input>[!<espressione input>!...],{<campo file>|<espressione output>[!<espressione output>!...]}
 | ||||
|     // dove: <file> è il numero logico del file o il nome della tabella
 | ||||
|     //       <espressione input> è un'espressione del tipo <campo file>=<espressione campi form>
 | ||||
|     //       <espressione campi form> è un'espressione di costanti numeriche, stringhe e valori di campi della form (indicati con il loro numero preceduto da #)
 | ||||
| @ -85,7 +57,8 @@ bool TDocVen_Form::validate(TForm_item &cf, TToken_string &s) { | ||||
|     TString f_code(s.get()); // prende il codice del file da leggere
 | ||||
|     if (atoi(f_code) != 0) file= new TLocalisamfile(atoi(f_code)); // se il codice è numerico allora è un file
 | ||||
|     else file= new TTable(f_code); // altrimenti è una tabella
 | ||||
|     TToken_string in(s.get(), ','); | ||||
|     file->zero(); // vuota il record corrente del file
 | ||||
|     TToken_string in(s.get(), '!'); | ||||
|     for (i=0; i<in.items(); i++) { // scansione sugli elementi dell'input
 | ||||
|       TString curr(in.get(i)); | ||||
|       poseq= curr.find("=="); // divide la stringa corrente in lvalue e rvalue
 | ||||
| @ -93,8 +66,8 @@ bool TDocVen_Form::validate(TForm_item &cf, TToken_string &s) { | ||||
|         poseq= curr.find('='); | ||||
|         if (poseq != -1) posrv= poseq+1; | ||||
|       } else posrv= poseq+2; | ||||
|       const TString &fld= curr.left(poseq); // preleva il nome del campo del file alla sinistra dell'uguale
 | ||||
|       const TString &expr= curr.mid(posrv); // preleva l'espressione di assegnamento alla destra dell'uguale
 | ||||
|       TString fld(curr.left(poseq)); // preleva il nome del campo del file alla sinistra dell'uguale
 | ||||
|       TString expr(curr.mid(posrv)); // preleva l'espressione di assegnamento alla destra dell'uguale
 | ||||
|       TExpression rval(expr, _strexpr); | ||||
|       for (j=0; j<rval.numvar(); j++) { // scansione delle variabili dell'espressione di rvalue
 | ||||
|         TString var= rval.varname(j); | ||||
| @ -105,7 +78,7 @@ bool TDocVen_Form::validate(TForm_item &cf, TToken_string &s) { | ||||
|       file->put(fld, (const char *)rval); // scrive il risultato dell'espressione nel campo del file
 | ||||
|     } | ||||
|     if (file->read()== NOERR) { // tenta una lettura del file
 | ||||
|       TToken_string out(s.get(), ','); | ||||
|       TToken_string out(s.get(), '!'); | ||||
|       for (i=0; i<out.items(); i++) { // scansione sugli elementi dell'output
 | ||||
|         TString curr(out.get(i)); | ||||
|         poseq= curr.find("=="); // divide la stringa corrente in lvalue e rvalue
 | ||||
| @ -117,7 +90,7 @@ bool TDocVen_Form::validate(TForm_item &cf, TToken_string &s) { | ||||
|           const TString &dat= file->get(curr); // preleva il nome del campo del file e lo legge dal record
 | ||||
|           cf.set(dat); // setta il campo letto dal file nel campo corrente della form   
 | ||||
|         } else { | ||||
|           TString fld= curr.left(poseq); // preleva il nome del campo del form alla sinistra dell'uguale
 | ||||
|           TString fld(curr.left(poseq)); // preleva il nome del campo del form alla sinistra dell'uguale
 | ||||
|           const TString &dat= file->get(curr.mid(posrv)); // preleva il nome del campo del file alla destra dell'uguale e lo legge dal record
 | ||||
|           if (fld[0]=='#') fld.ltrim(1); | ||||
|           if (fld.right(1)== "@") { // se c'è la a-commerciale è un gruppo
 | ||||
| @ -148,11 +121,12 @@ bool TDocVen_Form::validate(TForm_item &cf, TToken_string &s) { | ||||
| 
 | ||||
|   if (code== "_TABLEREAD") { | ||||
|     // lettura generica di un campo di una tabella
 | ||||
|     // sintassi: _TABLEREAD <tabella> <chiave> <campo file>
 | ||||
|     // sintassi: _TABLEREAD,<tabella>,<chiave>,<campo file>
 | ||||
|     // dove: <tabella> nome tabella da leggere
 | ||||
|     //       <chiave> costante stringa o riferimento a campo della form (preceduto da '#') da usare come chiave di ricerca
 | ||||
|     //       <campo file> identificativo del campo da leggere dalla tabella
 | ||||
|     TTable tab(s.get()); // prende il nome della tabella
 | ||||
|     tab.zero(); // vuota il record corrente della tabella
 | ||||
|     TString in(s.get()); // prende il valore o il campo da usare come codice di ricerca
 | ||||
|     if (in.left(1)== '#') { | ||||
|       in.ltrim(1); | ||||
| @ -169,25 +143,25 @@ bool TDocVen_Form::validate(TForm_item &cf, TToken_string &s) { | ||||
| 
 | ||||
|   if (code== "_DITTA") { | ||||
|     // lettura dei dati della ditta
 | ||||
|     // sintassi: _DITTA {<campo relazione>|<macro>}
 | ||||
|     // sintassi: _DITTA,{<campo relazione>|<macro>}
 | ||||
|     // dove: <campo relazione> è un riferimento alla relazione di gestione dei dati della ditta (es. 113@->DENCOM è la denominazione del comune di residenza della ditta)
 | ||||
|     //       <macro> è uno delle macro seguenti:
 | ||||
|     //         &RAGSOC  ragione sociale
 | ||||
|     //         &IND     indirizzo (fiscale se c'è, oppure di residenza)
 | ||||
|     //         &NUM     numero civico (fiscale se c'è, oppure di residenza)
 | ||||
|     //         &CAP     CAP (fiscale se c'è, oppure di residenza)
 | ||||
|     //         &COM     comune (fiscale se c'è, oppure di residenza)
 | ||||
|     //         &IVA     partita iva
 | ||||
|     //         &CF      codice fiscale
 | ||||
|     //         &TEL     numero di telefono (con prefisso)
 | ||||
|     //         &FAX     numero di fax (con prefisso)
 | ||||
|     //         !RAGSOC  ragione sociale
 | ||||
|     //         !IND     indirizzo (fiscale se c'è, oppure di residenza)
 | ||||
|     //         !NUM     numero civico (fiscale se c'è, oppure di residenza)
 | ||||
|     //         !CAP     CAP (fiscale se c'è, oppure di residenza)
 | ||||
|     //         !COM     comune (fiscale se c'è, oppure di residenza)
 | ||||
|     //         !IVA     partita iva
 | ||||
|     //         !CF      codice fiscale
 | ||||
|     //         !TEL     numero di telefono (con prefisso)
 | ||||
|     //         !FAX     numero di fax (con prefisso)
 | ||||
|     // nota: la relazione di della ditta è così strutturata:
 | ||||
|     //       %NDITTE (9) Dati ditte
 | ||||
|     //       + %ANAGR (6) Anagrafica generale (indirizzo, ecc.)
 | ||||
|     //          + %COMUNI (113@) Comune di residenza
 | ||||
|     //          + %COMUNI (213@) Comune di residenza fiscale
 | ||||
|     TString in(s.get()); | ||||
|     if (in[0]=='&') { | ||||
|     if (in[0]=='!') { | ||||
|       in.ltrim(1); | ||||
|       bool _fisc= _firmrel.lfile(6).get("INDRF").not_empty(); | ||||
|       if (in=="RAGSOC") cf.set(_firmrel.lfile().get("RAGSOC")); | ||||
| @ -228,13 +202,13 @@ bool TDocVen_Form::validate(TForm_item &cf, TToken_string &s) { | ||||
| 
 | ||||
|   if (code== "_CIFRELETTERE") { | ||||
|     // conversione di un reale da cifre a lettere
 | ||||
|     // sintassi: _CIFRELETTERE [<campo form>]
 | ||||
|     // sintassi: _CIFRELETTERE[,<campo form>]
 | ||||
|     // dove: <campo form> è il campo della form (preceduto da '#') da cui prendere il valore, se non è specificato è sottointeso il campo corrente
 | ||||
|     // nota: prende il valore del campo specificato e scrive la sua conversione in lettere nel campo corrente
 | ||||
|     TString in; | ||||
|     if (s.items()==2) { | ||||
|       in= s.get(); | ||||
|       if (in.left(1)== '#') in.ltrim(1); | ||||
|       if (in[0]== '#') in.ltrim(1); | ||||
|       TForm_item &fi= cf.find_field(in); | ||||
|       in= fi.get(); | ||||
|     } else in= cf.get(); | ||||
| @ -256,7 +230,7 @@ enum behaviour { | ||||
|   skip, | ||||
|   go, | ||||
|   cancel | ||||
|   }; | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| @ -275,7 +249,7 @@ protected: | ||||
|   int select(void); | ||||
|   virtual void print(void); | ||||
|   virtual void on_firm_change(void); | ||||
|   virtual behaviour on_module_change(const TString &); // funzione chiamata ad ogni cambio modulo durante la stampa
 | ||||
|   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
 | ||||
| }; | ||||
| 
 | ||||
| @ -293,6 +267,7 @@ bool TStampa_Doc_Vendita::create() { | ||||
|     _provv= argv(4); // il terzo è il flag di numerazione provvisoria
 | ||||
|     _dalnum= atol(argv(5)); // il quarto è il numero di documento di partenza
 | ||||
|     _alnum= atol(argv(6)); // il quinto è il numero di documento di fine
 | ||||
| 		_definitiva= (strcmp(argv(7), "D")==0); // il sesto è se la stampa è definitiva (rinumerazione dei documenti)
 | ||||
|     _interattivo= FALSE; | ||||
|     print(); | ||||
|   } else { // oppure lancio della maschera
 | ||||
| @ -318,8 +293,7 @@ int TStampa_Doc_Vendita::select() { | ||||
|   if (m.run() == K_ENTER) { | ||||
|     _codnum= m.get(F_CODNUM); // lettura dei dati dalla maschera
 | ||||
|     _anno= m.get_int(F_ANNO); | ||||
|     //_provv= (m.get_bool(F_PROVV))?("P"):("D");
 | ||||
|     _provv = m.get(F_PROVV); | ||||
|     _provv= m.get(F_PROVV); | ||||
|     _dalnum= m.get_long(F_DA_NDOC); | ||||
|     _alnum= m.get_long(F_A_NDOC); | ||||
|     return 1; | ||||
| @ -333,91 +307,105 @@ bool TStampa_Doc_Vendita::menu(MENU_TAG) { // procedura di dispatch dei menu | ||||
| } | ||||
| 
 | ||||
| void TStampa_Doc_Vendita::print() { | ||||
|     _definitiva= query_final_print();     // legge il flag di stampa definitiva
 | ||||
|   printer().open();                                     // apre la stampante
 | ||||
|   TFilename nomeform, profilo;          // istanzia le stringhe per il nome del form di stampa e del profilo di configurazione
 | ||||
|   TString modulo, modulo_prec;          // istanzia le stringhe per l'inseguimento del modulo di carta
 | ||||
|   //TToken_string stati("",',');                // token string con gli stati validi dei documenti
 | ||||
|   TTable tip("%TIP");                           // istanzia la tabella dei tipi di documento per i profili
 | ||||
|   TRelation rel(LF_DOC);                        // istanzia la relazione sul file principale
 | ||||
|   TLocalisamfile &doc= rel.lfile();     // prende il riferimento al file principale
 | ||||
|   TCursor cur(&rel);                            // crea il cursore principale dalla relazione
 | ||||
|   doc.put("CODNUM", _codnum);           // compone la chiave per il record di inizio cursore
 | ||||
|   _definitiva= query_final_print(); // legge il flag di stampa definitiva
 | ||||
|   printer().open(); // apre la stampante
 | ||||
|   TFilename nomeform, profilo; // istanzia le stringhe per il nome del form di stampa e del profilo di configurazione
 | ||||
|   TString modulo_prec;  // istanzia la stringa per l'inseguimento del modulo di carta
 | ||||
|   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
 | ||||
|   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); | ||||
|   doc.read();                                           // posiziona il file sul record
 | ||||
|   TRectype darec= doc.curr();           // copia il record di inizio cursore
 | ||||
|   doc.put("NDOC", _alnum);                      // compone la chiave per il record di fine cursore
 | ||||
|   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
 | ||||
|   for (int i= 0; i<cur.items(); i++)// ciclo sugli elementi del cursore di stampa
 | ||||
|   { | ||||
|     cur= i;                     // posiziona il cursore
 | ||||
|   doc.read(); // posiziona il file sul record
 | ||||
|   TRectype darec= doc.curr(); // copia il record di inizio cursore
 | ||||
|   doc.zero(); // vuota il record del file 
 | ||||
|   doc.put("CODNUM", _codnum); // compone la chiave per il record di fine cursore
 | ||||
|   doc.put("ANNO", _anno); | ||||
|   doc.put("PROVV", _provv); | ||||
|   doc.put("NDOC", _alnum); | ||||
|   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 :-)
 | ||||
|   for (cur= 0; cur.pos()<cur.items(); ++cur) { // ciclo sugli elementi del cursore di stampa
 | ||||
|     tip.put("CODTAB", doc.get("TIPODOC")); // posiziona la tabella dei tipi di documento
 | ||||
|     int err=tip.read(); | ||||
|     if (err==NOERR)                     // legge la tabella
 | ||||
|     { | ||||
|       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"); | ||||
|     int err=tip.read(); // legge la tabella
 | ||||
|     if (err==NOERR) { // se non ci sono errori procede con la stampa
 | ||||
|       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
 | ||||
|       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...
 | ||||
|       { | ||||
|       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...
 | ||||
|         if (_interattivo) error_box("Non è possibile stampare un documento con stato non valido"); // ...viene mostrato un messaggio (solo in modo interattivo)...
 | ||||
|         break; // ...e la stampa viene interrotta
 | ||||
|               } | ||||
|               behaviour whattodo= go; // istanzia la variabile di comportamento
 | ||||
|             TDocVen_Form f(nomeform, *_firmrel); // istanzia il form
 | ||||
|             // !! modulo= f.get_module_code(); // legge dal form il codice del modulo di carta per la stampa
 | ||||
|             if (modulo_prec.empty()) modulo_prec= modulo; // se siamo al primo passaggio la variabile di modulo precedente viene riempita
 | ||||
|             if (modulo != modulo_prec) whattodo= on_module_change(modulo); // se il modulo è cambiato dalla stampa precedente interroga la funzione per sapere che comportamento tenere
 | ||||
|             if (whattodo==cancel)             // se non si può procedere la stampa viene interrotta
 | ||||
|               break; | ||||
|             else if (whattodo==go)            // altrimenti prosegue
 | ||||
|             { | ||||
|               TCursor &fcur= *(f.cursor()); // ricava il riferimento al cursore originale del form
 | ||||
|               darec= arec= doc.curr(); // prepara i record per il filtro
 | ||||
|               fcur.setregion(darec, arec); // setta il filtro sul form (solo il record corrente)
 | ||||
|               f.print(0,0); // stampa il record corrente del form
 | ||||
|               if (_definitiva && (numerazione_definitiva(doc) != NOERR))      // se la stampa è definitiva viene lanciata la procedura di rinumerazione
 | ||||
|               { | ||||
|                 if (_interattivo) error_box("Non è possibile completare la procedura di numerazione definitiva dei documenti"); | ||||
|                 break; | ||||
|               } | ||||
|                 } | ||||
|               } | ||||
|             else | ||||
|             { | ||||
|               // error_box("Il documento corrente non può essere trovato nella tabella dei tipi di documento");
 | ||||
|               error_box ("Errore %d leggendo da %TIP.", err); | ||||
|               break; | ||||
|             } | ||||
|           } | ||||
|         printer().close(); // chiude la stampante
 | ||||
|       } | ||||
| 
 | ||||
|       behaviour TStampa_Doc_Vendita::on_module_change(const TString &modulo) { | ||||
|         // !! qui va messa la reazione al cambio di modulo
 | ||||
|         // !! - se non si è in interattivo bisogna, immagino, ritornare sempre "skip"
 | ||||
|         // !! - se si è in interattivo bisogna chiedere all'utente il da farsi, eventualmente
 | ||||
|         // !!   fornendo il nome esteso del modulo da inserire facendo una seek sulla tabella
 | ||||
|         return skip; | ||||
|       behaviour whattodo= go; // istanzia la variabile di comportamento
 | ||||
|       TDocVen_Form f(nomeform, *_firmrel); // istanzia il form
 | ||||
|       const TString &modulo= f.get_module_code(); // legge dal form il codice del modulo di carta per la stampa
 | ||||
|       if (modulo_prec.empty()) modulo_prec= modulo; // se siamo al primo passaggio la variabile di modulo precedente viene riempita
 | ||||
|       if (modulo != modulo_prec) whattodo= on_module_change(modulo, modulo_prec); // se il modulo è cambiato dalla stampa precedente interroga la funzione per sapere che comportamento tenere
 | ||||
|       if (whattodo==cancel) break; // se non si può procedere la stampa viene interrotta
 | ||||
|       else if (whattodo==go) { // altrimenti prosegue
 | ||||
|         TCursor &fcur= *(f.cursor()); // ricava il riferimento al cursore originale del form
 | ||||
|         TLocalisamfile &rdoc= fcur.file(); // ricava il riferimento al file principale del cursore del form
 | ||||
|         TRectype darec_r(rdoc.curr());  // istanzia il record di filtro per il cursore
 | ||||
|         darec_r.zero(); // vuota il record
 | ||||
|         darec_r.put("CODNUM", _codnum); // compone la chiave parziale per il filtro sul cursore dal file principale del cursore di selezione dei documenti
 | ||||
|         darec_r.put("ANNO", _anno); | ||||
|         darec_r.put("PROVV", _provv); | ||||
|         darec_r.put("NDOC", doc.get("NDOC")); | ||||
|         TRectype arec_r(darec_r); // istanzia il secondo record per il filtro sul cursore
 | ||||
|         fcur.setregion(darec_r, arec_r); // setta il filtro sul cursore del form
 | ||||
|         f.print(); // stampa il form corrente
 | ||||
|         if (_definitiva && (numerazione_definitiva(doc) != NOERR)) { // se la stampa è definitiva viene lanciata la procedura di rinumerazione
 | ||||
|           if (_interattivo) error_box("Non è possibile completare la procedura di numerazione definitiva dei documenti"); | ||||
|           break; | ||||
|         } | ||||
|       } | ||||
|     } else { | ||||
|       error_box("Il documento corrente non è stato trovato nella tabella dei tipi di documento (errore %d)", err); | ||||
|       break; | ||||
|     } | ||||
|   } | ||||
|   printer().close(); // chiude la stampante
 | ||||
| } | ||||
| 
 | ||||
|       bool TStampa_Doc_Vendita::query_final_print() { | ||||
|         if (_interattivo) { // se siamo in interattivo viene richiesto all'utente se la stampa è definitiva o meno
 | ||||
|           if (yesno_box("E' una stampa definitiva?")) return TRUE; | ||||
|           else return FALSE; | ||||
|         } else return (strcmp(argv(7), "D")==0); // altrimenti lo legge dalla linea di comando
 | ||||
|       } | ||||
| behaviour TStampa_Doc_Vendita::on_module_change(const TString &modulo, TString &modulo_prec) { | ||||
| 	if (!_interattivo) return skip; // se siamo in interattivo il documento viene saltato...
 | ||||
| 	else { // ...altrimenti viene chiesto all'utente il da farsi
 | ||||
| 		int risp= yesnocancel_box("Il modulo di carta è cambiato: inserisci il modulo '%s' e premi 'Sì' per continuare, 'No' per saltare il documento o 'Cancel' per interrompere la stampa", modulo); | ||||
| 	  behaviour ret; | ||||
| 	  switch (risp) { | ||||
| 	  	case K_YES: | ||||
| 	  		modulo_prec= modulo; // aggiorna l'inseguitore dei moduli
 | ||||
| 	  		ret= go; // la stampa può continuare
 | ||||
| 	  		break; | ||||
| 	  	case K_NO: | ||||
| 	  		ret= skip; // il documento viene saltato
 | ||||
| 	  		break; | ||||
| 	  	case K_ESC: | ||||
| 	  		ret= cancel; // la stampa viene interrotta
 | ||||
| 	  		break; | ||||
| 	  } | ||||
| 	  return ret; | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| bool TStampa_Doc_Vendita::query_final_print() { | ||||
|   if (_interattivo) { // se siamo in interattivo viene richiesto all'utente se la stampa è definitiva o meno
 | ||||
|     if (yesno_box("E' una stampa definitiva?")) return TRUE; | ||||
|     else return FALSE; | ||||
|   } else return _definitiva; // altrimenti ritorna il valore letto dalla linea di comando
 | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|       int ve1100(int argc, char* argv[]) { | ||||
|         TStampa_Doc_Vendita a; | ||||
|         a.run(argc, argv, "Stampa documenti di vendita"); | ||||
|         return (0); | ||||
|       } | ||||
| int ve1100(int argc, char* argv[]) { | ||||
|   TStampa_Doc_Vendita a; | ||||
|   a.run(argc, argv, "Stampa documenti di vendita"); | ||||
|   return (0); | ||||
| } | ||||
|  | ||||
| @ -5,6 +5,7 @@ PAGE "STAMPA DOCUMENTI VENDITA" -1 -1 40 19 | ||||
| STRING F_CODNUM 4 4 | ||||
| BEGIN | ||||
|         PROMPT 1 1 "Codice Num. " | ||||
|         FLAG "U" | ||||
|         USE NUM | ||||
|         INPUT CODTAB F_CODNUM | ||||
|         DISPLAY "Cod. Num." CODTAB | ||||
| @ -19,9 +20,11 @@ BEGIN | ||||
|         CHECKTYPE REQUIRED | ||||
| END | ||||
| 
 | ||||
| BOOLEAN F_PROVV | ||||
| LIST F_PROVV 8 | ||||
| BEGIN | ||||
|         PROMPT 26 4 "Provvis." | ||||
|         PROMPT 26 4 "" | ||||
|         ITEM "P|Provvis." | ||||
|         ITEM "D|Definit." | ||||
| END | ||||
| 
 | ||||
| RADIOBUTTON F_DATA_O_NUM 20 | ||||
| @ -44,7 +47,7 @@ END | ||||
| NUMBER F_DA_NDOC 7 0 | ||||
| BEGIN | ||||
|         PROMPT 2 8  "Dal num. " | ||||
|         USE 33 KEY 1 | ||||
|         USE 33 KEY 1 SELECT CODNUM==#F_CODNUM|ANNO==#F_ANNO | ||||
|         JOIN 20 INTO CODCF=CODCF TIPOCF=TIPOCF | ||||
|         JOIN 13 TO 20 INTO COM=COMCF | ||||
|         INPUT CODNUM F_CODNUM SELECT | ||||
|  | ||||
| @ -58,7 +58,7 @@ bool TTabelle_sconti::user_create() { | ||||
| 			sci_k_id[2]= F_I_ZONE; | ||||
| 			sci_k_id[3]= F_I_CONDPAG; | ||||
| 			for (i=0; i<4; i++) { | ||||
|         if (prassid.get_bool("ScoKey", "ve", i)) { // se nel file di config. il campo è abilitato...
 | ||||
|         if (prassid.get_bool("SCOKEY", "ve", i)) { // se nel file di config. il campo è abilitato...
 | ||||
|         	REVIVE(sci_k_id[i]); // ...il campo viene abilitato anche sulla maschera...
 | ||||
|         	gotcha= TRUE; // ...e viene settato il flag di ok
 | ||||
|         } else KILL(sci_k_id[i]); // se nel file di config. il campo non è abilitato viene disabilitato anche sulla maschera
 | ||||
|  | ||||
| @ -67,7 +67,7 @@ bool TCondizioni_vendita::user_create() { | ||||
| 	TConfig prassid(CONFIG_DITTA, "ve"); // apre il file di configurazione della ditta corrente
 | ||||
| 	switch (_condven[0]) { | ||||
| 		case 'L': { // listini
 | ||||
| 			if (!(prassid.get_bool("Ges", NULL, A_LISTINI))) error_box("L'archivio Listini non è abilititato"); // controlla che l'archivio listini sia abilitato
 | ||||
| 			if (!(prassid.get_bool("GES", NULL, A_LISTINI))) error_box("L'archivio Listini non è abilititato"); // controlla che l'archivio listini sia abilitato
 | ||||
| 			else { | ||||
| 				// eliminazione campi di altri archivi
 | ||||
| 				DESTROY(F_C_COD); | ||||
| @ -77,17 +77,17 @@ bool TCondizioni_vendita::user_create() { | ||||
| 				DESTROY(F_C_OBBLIG); | ||||
| 				set_search_field(F_L_COD); // impostazione del campo di ricerca
 | ||||
| 				_msk->set_handler(F_LC_CODSUCC, handle_codsucc); // setta l'handler per il campo di codice successivo
 | ||||
| 				_codlis_catven= prassid.get_bool("CodLisCV"); // setta il booleano di abilitazione delle categoria di vendita
 | ||||
| 				_codlis_catven= prassid.get_bool("CODLISCV"); // setta il booleano di abilitazione delle categoria di vendita
 | ||||
| 				if (!_codlis_catven) KILL(F_L_CATVEN); // disabilita condizionalmente le categorie di vendita
 | ||||
| 				_gest_um= prassid.get_bool("GesUM", NULL, A_LISTINI); // setta il booleano di abilitazione delle unità di misura
 | ||||
| 				_gest_sca= prassid.get_bool("GesSca", NULL, A_LISTINI); // setta il booleano di abilitazione degli scaglioni
 | ||||
| 				_gest_so= prassid.get_bool("GesSO", NULL, A_LISTINI); // setta il booleano di abilitazione degli sconti/omaggi
 | ||||
| 				_gest_um= prassid.get_bool("GESUM", NULL, A_LISTINI); // setta il booleano di abilitazione delle unità di misura
 | ||||
| 				_gest_sca= prassid.get_bool("GESSCA", NULL, A_LISTINI); // setta il booleano di abilitazione degli scaglioni
 | ||||
| 				_gest_so= prassid.get_bool("GESSO", NULL, A_LISTINI); // setta il booleano di abilitazione degli sconti/omaggi
 | ||||
|  				gotcha= TRUE; | ||||
|  			} | ||||
| 			break; | ||||
| 		} | ||||
| 		case 'C': // contratti
 | ||||
| 			if (!(prassid.get_bool("Ges", NULL, A_CONTRATTI))) error_box("L'archivio Contratti non è abilititato"); // controlla che l'archivio listini sia abilitato
 | ||||
| 			if (!(prassid.get_bool("GES", NULL, A_CONTRATTI))) error_box("L'archivio Contratti non è abilititato"); // controlla che l'archivio listini sia abilitato
 | ||||
| 			else { | ||||
| 				// settaggio dei campi da eliminare
 | ||||
| 				DESTROY(F_L_COD); | ||||
| @ -95,14 +95,14 @@ bool TCondizioni_vendita::user_create() { | ||||
| 				DESTROY(F_L_CATVEN); | ||||
| 				DESTROY(F_LC_CODSUCC); | ||||
|   	    set_search_field(F_C_COD); // impostazione del campo di ricerca
 | ||||
| 				_gest_um= prassid.get_bool("GesUM", NULL, A_CONTRATTI); // setta il booleano di abilitazione delle unità di misura
 | ||||
| 				_gest_sca= prassid.get_bool("GesSca", NULL, A_CONTRATTI); // setta il booleano di abilitazione degli scaglioni
 | ||||
| 				_gest_so= prassid.get_bool("GesSO", NULL, A_CONTRATTI); // setta il booleano di abilitazione degli sconti/omaggi
 | ||||
| 				_gest_um= prassid.get_bool("GESUM", NULL, A_CONTRATTI); // setta il booleano di abilitazione delle unità di misura
 | ||||
| 				_gest_sca= prassid.get_bool("GESSCA", NULL, A_CONTRATTI); // setta il booleano di abilitazione degli scaglioni
 | ||||
| 				_gest_so= prassid.get_bool("GESSO", NULL, A_CONTRATTI); // setta il booleano di abilitazione degli sconti/omaggi
 | ||||
|  				gotcha= TRUE; | ||||
|  			} | ||||
| 			break; | ||||
| 		case 'O': // offerte
 | ||||
| 			if (!(prassid.get_bool("Ges", NULL, A_OFFERTE))) error_box("L'archivio Offerte non è abilititato"); // controlla che l'archivio listini sia abilitato
 | ||||
| 			if (!(prassid.get_bool("GES", NULL, A_OFFERTE))) error_box("L'archivio Offerte non è abilititato"); // controlla che l'archivio listini sia abilitato
 | ||||
| 			else { | ||||
| 				// settaggio dei campi da eliminare
 | ||||
| 				DESTROY(F_L_COD); | ||||
| @ -113,9 +113,9 @@ bool TCondizioni_vendita::user_create() { | ||||
| 				DESTROY(F_C_OBBLIG); | ||||
| 				set_search_field(F_O_COD); // impostazione del campo di ricerca
 | ||||
| 				_msk->set_handler(F_LC_CODSUCC, handle_codsucc); // setta l'handler per il campo di codice successivo
 | ||||
| 				_gest_um= prassid.get_bool("GesUM", NULL, A_OFFERTE); // setta il booleano di abilitazione delle unità di misura
 | ||||
| 				_gest_sca= prassid.get_bool("GesSca", NULL, A_OFFERTE); // setta il booleano di abilitazione degli scaglioni
 | ||||
| 				_gest_so= prassid.get_bool("GesSO", NULL, A_OFFERTE); // setta il booleano di abilitazione degli sconti/omaggi
 | ||||
| 				_gest_um= prassid.get_bool("GESUM", NULL, A_OFFERTE); // setta il booleano di abilitazione delle unità di misura
 | ||||
| 				_gest_sca= prassid.get_bool("GESSCA", NULL, A_OFFERTE); // setta il booleano di abilitazione degli scaglioni
 | ||||
| 				_gest_so= prassid.get_bool("GESSO", NULL, A_OFFERTE); // setta il booleano di abilitazione degli sconti/omaggi
 | ||||
|  				gotcha= TRUE; | ||||
|  			} | ||||
| 			break;		 | ||||
| @ -132,7 +132,7 @@ bool TCondizioni_vendita::user_create() { | ||||
| 		if (!_gest_um) _msk->disable(F_GESTUM); // disabilita condizionalmente il booleano di gestione delle unità di misura
 | ||||
| 		if (!_gest_sca) _msk->disable(F_GESTSCAGL); // disabilita condizionalmente il booleano di gestione degli scaglioni
 | ||||
| 		if (!_gest_so) _msk->disable(F_GESTSCO); // disabilita condizionalmente il booleano di gestione degli sconti/omaggi
 | ||||
| 		_gest_val= prassid.get_bool("GesVal"); // legge il booleano di abilitazione delle gastione delle valute
 | ||||
| 		_gest_val= prassid.get_bool("GESVAL"); // legge il booleano di abilitazione delle gastione delle valute
 | ||||
| 		if (!_gest_val) { // se la gestione delle valute è disabilitata i campi di gestione vengono disabilitati
 | ||||
| 			_msk->disable(F_CODVAL); | ||||
| 			_msk->disable(F_CAMBIO); | ||||
|  | ||||
| @ -89,7 +89,7 @@ bool TRighe_condizioni_vendita::user_create() { | ||||
|     _msk->hide(F_R_O_RICERCA); | ||||
|     _msk->hide(F_R_CO_CODLOTTO); | ||||
|     _msk->hide(F_R_O_ARTES); | ||||
|     _codlis_catven= prassid.get_bool("CodLisCV"); // setta il booleano di abilitazione di CATVEN
 | ||||
|     _codlis_catven= prassid.get_bool("COSLISCV"); // setta il booleano di abilitazione di CATVEN
 | ||||
|     if (!_codlis_catven) KILL(F_R_L_CATVEN); // disabilita condizionalmente le categorie di vendita
 | ||||
|     set_search_field(F_R_L_RICERCA); // impostazione del campo di ricerca
 | ||||
|     _msk->set_handler(F_R_L_COD, handle_cod); // impostazione dell'handler sul campo di controllo della testata
 | ||||
|  | ||||
							
								
								
									
										18
									
								
								ve/veacc.frm
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								ve/veacc.frm
									
									
									
									
									
								
							| @ -1,4 +1,3 @@ | ||||
| <<<<<<< veacc.frm | ||||
| 
 | ||||
| // Completare la sezione "iva" nel body | ||||
| // Manca il campo "causale" nella section footer | ||||
| @ -6,8 +5,6 @@ | ||||
| 
 | ||||
| // Una volta completato, togliere dalla relazione i files che non servono. | ||||
| 
 | ||||
| ======= | ||||
| >>>>>>> 1.2 | ||||
| USE 33 | ||||
| JOIN 34 ALIAS 101 INTO CODNUM=CODNUM ANNO=ANNO PROVV=PROVV NDOC=NDOC | ||||
| JOIN 17 ALIAS 201 INTO TIPOCF=TIPOCF CODCF=CODCF | ||||
| @ -129,11 +126,7 @@ BEGIN | ||||
|  PROMPT 15 6 "" | ||||
| END | ||||
| 
 | ||||
| <<<<<<< veacc.frm | ||||
| STRINGA 9  | ||||
| ======= | ||||
| NUMERO 11 | ||||
| >>>>>>> 1.2 | ||||
| BEGIN | ||||
|  KEY "reg.soc.trib...." | ||||
|  PROMPT 5 6 "REG.SOC.TRIB.R.E. 8897" | ||||
| @ -208,13 +201,8 @@ BEGIN | ||||
|  FIELD 1102@->CAPCOM | ||||
| END | ||||
| 
 | ||||
| <<<<<<< veacc.frm | ||||
| STRINGA 85 50 1 | ||||
| ======= | ||||
| STRINGA 83 30 1 | ||||
| >>>>>>> 1.2 | ||||
| BEGIN | ||||
| <<<<<<< veacc.frm | ||||
|  FLAGS "H" | ||||
|  PROMPT 1 1 "" | ||||
|  FIELD 16->COM | ||||
| @ -222,8 +210,6 @@ END | ||||
| 
 | ||||
| STRINGA 86 30 1 | ||||
| BEGIN | ||||
| ======= | ||||
| >>>>>>> 1.2 | ||||
|  KEY "destinazione, comune" | ||||
|  PROMPT 1 14 "" | ||||
|  FIELD 1102@->DENCOM | ||||
| @ -240,12 +226,8 @@ DATA 23 8 1 | ||||
| BEGIN | ||||
|  KEY "data conferma" | ||||
|  PROMPT 28 19 "" | ||||
| <<<<<<< veacc.frm | ||||
|  FIELD DATADOCRIF | ||||
|  FORMAT "1444-" | ||||
| ======= | ||||
|  FIELD 33->DATADOCRIF | ||||
| >>>>>>> 1.2 | ||||
| END | ||||
| 
 | ||||
| STRINGA 24 48 1 | ||||
|  | ||||
							
								
								
									
										259
									
								
								ve/vebol.frm
									
									
									
									
									
								
							
							
						
						
									
										259
									
								
								ve/vebol.frm
									
									
									
									
									
								
							| @ -1,40 +1,34 @@ | ||||
| 
 | ||||
| // - Manca la gestione del campo "causale" | ||||
| // - Il cliente deve essere gestito con il nuovo messaggio _CLIENTE, per ora è gestito con | ||||
| //   l'aggancio alla relazione | ||||
| // - Controllare la posizione dei campi precendentemente compositi (indirizzi, comuni, ecc.) | ||||
| 
 | ||||
| USE 33 | ||||
| JOIN 34                 INTO CODNUM==CODNUM ANNO==ANNO PROVV==PROVV NDOC==NDOC | ||||
| JOIN 17                 INTO TIPOCF==TIPOCF CODCF==CODCF | ||||
| JOIN 20                 INTO TIPOCF==TIPOCF CODCF==CODCF | ||||
| JOIN 16                 INTO TIPOCF==TIPOCF CODCF==CODCF CODIND==CODINDSP | ||||
| USE 34 | ||||
| JOIN 33 INTO CODNUM==CODNUM ANNO==ANNO PROVV==PROVV NDOC==NDOC | ||||
| JOIN 17 TO 33 INTO TIPOCF==TIPOCF CODCF==CODCF | ||||
| JOIN 20 TO 33 INTO TIPOCF==TIPOCF CODCF==CODCF | ||||
| JOIN 16 TO 33 INTO TIPOCF==TIPOCF CODCF==CODCF CODIND==CODINDSP | ||||
| JOIN 16 TO 17 ALIAS 116 INTO TIPOCF==TIPOCF CODCF==CODCF CODIND==CODINDSP | ||||
| JOIN 47 TO 34           INTO CODART==CODART | ||||
| JOIN 52                 INTO TIPOCF==TIPOCF CODCF==CODCF | ||||
| JOIN %CPG               INTO CODTAB==CODPAG | ||||
| JOIN %AGE               INTO CODTAB==CODAG | ||||
| JOIN %POR               INTO CODTAB==CODPORTO | ||||
| JOIN %BAN               INTO CODTAB==CODABIA+CODCABA | ||||
| JOIN %VET               INTO CODTAB==CODVETT1 | ||||
| JOIN %ASP               INTO CODTAB==ASPBENI1 | ||||
| JOIN 47 INTO CODART==CODART | ||||
| JOIN %CPG TO 33 ALIAS 201 INTO CODTAB==CODPAG | ||||
| JOIN %AGE TO 33 ALIAS 202 INTO CODTAB==CODAG | ||||
| JOIN %POR TO 33 ALIAS 203 INTO CODTAB==CODPORTO | ||||
| JOIN %BAN TO 33 ALIAS 204 INTO CODTAB==CODABIA+CODCABA | ||||
| JOIN %VET TO 33 ALIAS 205 INTO CODTAB==CODVETT1 | ||||
| JOIN %ASP TO 33 ALIAS 206 INTO CODTAB==ASPBENI1 | ||||
| 
 | ||||
| END | ||||
| DESCRIPTION | ||||
| BEGIN | ||||
|   33->* "Documenti di vendita" | ||||
|   34->* "Righe documenti di vendita" | ||||
|   33->* "Documenti di vendita" | ||||
|   17->* "Clienti/Fornitori per vendite" | ||||
|   20->* "Clienti/Fornitori" | ||||
|   47  ->* "Righe listini" | ||||
|   52  ->* "Contratti clienti" | ||||
|   16  ->* "Indirizzi di spedizione" | ||||
|   116->* "Indirizzi di spedizione" | ||||
|   %CPG->* "Condizioni di pagamento" | ||||
|   %AGE ->* "Agenti" | ||||
|   %MSP ->* "Modalità di spedizioni" | ||||
|   %POR ->* "Modalità di consegna" | ||||
|   %BAN ->* "Banche" | ||||
|   16->* "Indirizzi di spedizione (destinazione)" | ||||
|   116@->* "Indirizzi di spedizione (destinatario)" | ||||
|   47->* "Anagrafica magazzino" | ||||
|   201@->* "Tabella condizioni di pagamento" | ||||
|   202@->* "Tabella agenti" | ||||
|   203@->* "Tabella porto" | ||||
|   204@->* "Tabella banche" | ||||
|   205@->* "Tabella vettori" | ||||
|   206@->* "Tabella apsetto beni" | ||||
| END | ||||
| 
 | ||||
| GENERAL | ||||
| @ -42,349 +36,360 @@ BEGIN | ||||
|   OFFSET 0 0 | ||||
|   FONT "Courier New" | ||||
|   SIZE 12 | ||||
|   MODULE BUFFETTI_BOLLA_01 | ||||
| END | ||||
| 
 | ||||
| SECTION HEADER ODD 33 | ||||
| 
 | ||||
| STRINGA 1 36 1 | ||||
| STRING 1 36 1 | ||||
| BEGIN | ||||
|  KEY "nome ditta" | ||||
|  PROMPT 5 6 "" | ||||
|  MESSAGE _DITTA &RAGSOC | ||||
|  MESSAGE _DITTA,!RAGSOC | ||||
| END | ||||
| 
 | ||||
| STRINGA 2 36 1 | ||||
| STRING 2 36 1 | ||||
| BEGIN | ||||
|  KEY "indirizzo ditta" | ||||
|  PROMPT 5 7 "" | ||||
|  MESSAGE _DITTA &IND | ||||
|  MESSAGE _DITTA,!IND | ||||
| END | ||||
| 
 | ||||
| STRINGA 3 5 1 | ||||
| STRING 3 5 1 | ||||
| BEGIN | ||||
|  KEY "cap ditta" | ||||
|  PROMPT 5 8 "" | ||||
|  MESSAGE _DITTA &CAP | ||||
|  MESSAGE _DITTA,!CAP | ||||
| END | ||||
| 
 | ||||
| STRINGA 4 30 1 | ||||
| STRING 4 30 1 | ||||
| BEGIN | ||||
|  KEY "comune ditta" | ||||
|  PROMPT 12 8 "" | ||||
|  MESSAGE _DITTA &COM | ||||
|  MESSAGE _DITTA,!COM | ||||
| END | ||||
| 
 | ||||
| STRINGA 5 5 1 | ||||
| STRING 5 5 1 | ||||
| BEGIN | ||||
|  KEY "scritta P.IVA" | ||||
|  PROMPT 5 9 "P.IVA" | ||||
| END | ||||
| 
 | ||||
| STRINGA 6 16 1 | ||||
| STRING 6 16 1 | ||||
| BEGIN | ||||
|  KEY "partita iva ditta" | ||||
|  PROMPT 11 9 "" | ||||
|  MESSAGE _DITTA &IVA | ||||
|  MESSAGE _DITTA,!IVA | ||||
| END | ||||
| 
 | ||||
| STRINGA 7 9 1 | ||||
| STRING 7 9 1 | ||||
| BEGIN | ||||
|  KEY "scritta COD.FISC." | ||||
|  PROMPT 5 10 "COD.FISC." | ||||
| END | ||||
| 
 | ||||
| STRINGA 8 16 1 | ||||
| STRING 8 16 1 | ||||
| BEGIN | ||||
|  KEY "codice fiscale ditta" | ||||
|  PROMPT 15 10 "" | ||||
|  MESSAGE _DITTA &CF | ||||
|  MESSAGE _DITTA,!CF | ||||
| END | ||||
| 
 | ||||
| STRINGA 14 35 2 | ||||
| STRING 14 35 2 | ||||
| BEGIN | ||||
|  KEY "destinatario, ditta" | ||||
|  PROMPT 44 16 "" | ||||
|  FIELD 20->RAGSOC | ||||
| END | ||||
| 
 | ||||
| STRINGA 15 35 2 | ||||
| STRING 15 35 2 | ||||
| BEGIN | ||||
|  KEY "destinatario, indirizzo" | ||||
|  PROMPT 44 18 "" | ||||
|  FIELD 20->INDCF | ||||
| END | ||||
| 
 | ||||
| STRINGA 48 5 1 | ||||
| STRING 48 5 1 | ||||
| BEGIN | ||||
|  FLAGS "H" | ||||
|  KEY "" | ||||
|  PROMPT 1 1 "" | ||||
|  FLAGS "H" | ||||
|  FIELD 116@->COM | ||||
| END | ||||
| 
 | ||||
| STRINGA 16 5 1 | ||||
| STRING 16 5 1 | ||||
| BEGIN | ||||
|  KEY "destinatario, cap" | ||||
|  PROMPT 44 20 "" | ||||
|  MESSAGE _ISAMREAD 13 COM==#48 CAPCOM | ||||
|  MESSAGE _ISAMREAD,13,COM==#48,CAPCOM | ||||
| END | ||||
| 
 | ||||
| STRINGA 17 30 2 | ||||
| STRING 17 30 2 | ||||
| BEGIN | ||||
|  KEY "destinatario, comune" | ||||
|  PROMPT 50 20 "" | ||||
|  MESSAGE _ISAMREAD 13 COM==#48 DENCOM | ||||
|  MESSAGE _ISAMREAD,13,COM==#48,DENCOM | ||||
| END | ||||
| 
 | ||||
| STRINGA 18 2 1 | ||||
| STRING 18 2 1 | ||||
| BEGIN | ||||
|  KEY "destinatario, procincia" | ||||
|  PROMPT 72 21 "" | ||||
|  MESSAGE _ISAMREAD 13 COM=#48 PROVCOM | ||||
|  MESSAGE _ISAMREAD,13,COM=#48,PROVCOM | ||||
| END | ||||
| 
 | ||||
| DATA 19 8 1 | ||||
| DATE 19 8 1 | ||||
| BEGIN | ||||
|  KEY "data bolla" | ||||
|  PROMPT 60 25 "" | ||||
|  FIELD DATADOC | ||||
|  FIELD 33->DATADOC | ||||
|  FORMAT "1442-" | ||||
| END | ||||
| 
 | ||||
| NUMERO 20 | ||||
| NUMBER 20 | ||||
| BEGIN | ||||
|  KEY "numero bolla" | ||||
|  PROMPT 71 25 "" | ||||
|  FIELD NDOC | ||||
|  FIELD 33->NDOC | ||||
| END | ||||
| 
 | ||||
| STRINGA 21 30 2 | ||||
| STRING 21 30 2 | ||||
| BEGIN | ||||
|  KEY "destinazione, indirizzo" | ||||
|  PROMPT 5 16 "" | ||||
|  FIELD 16->INDIR | ||||
| END | ||||
| 
 | ||||
| STRINGA 32 5 1 | ||||
| STRING 32 5 1 | ||||
| BEGIN | ||||
|  KEY "destinazione, cap" | ||||
|  PROMPT 5 18 "" | ||||
|  FIELD 16->CAP | ||||
| END | ||||
| 
 | ||||
| STRINGA 49 5 1 | ||||
| STRING 49 5 1 | ||||
| BEGIN | ||||
|  FLAGS "H" | ||||
|  KEY "" | ||||
|  PROMPT 1 1 "" | ||||
|  FLAGS "H" | ||||
|  FIELD 16->COM | ||||
| END | ||||
| 
 | ||||
| STRINGA 33 21 1 | ||||
| STRING 33 21 1 | ||||
| BEGIN | ||||
|  KEY "destinazione, comune" | ||||
|  PROMPT 5 20 "" | ||||
|  MESSAGE _ISAMREAD 13 COM=#49 DENCOM | ||||
|  MESSAGE _ISAMREAD,13,COM=#49,DENCOM | ||||
| END | ||||
| 
 | ||||
| STRINGA 34 2 | ||||
| STRING 34 2 | ||||
| BEGIN | ||||
|  KEY "destinazione, provincia" | ||||
|  PROMPT 28 20 "" | ||||
|  MESSAGE _ISAMREAD 13 COM=#49 PROVCOM | ||||
|  MESSAGE _ISAMREAD,13,COM=#49,PROVCOM | ||||
| END | ||||
| 
 | ||||
| NUMERO 22 | ||||
| NUMBER 22 | ||||
| BEGIN | ||||
|  KEY "ordine" | ||||
|  PROMPT 3 25 "" | ||||
|  FIELD NUMDOCRIF | ||||
|  FIELD 33->NUMDOCRIF | ||||
| END | ||||
| 
 | ||||
| DATA 23 8 1 | ||||
| DATE 23 8 1 | ||||
| BEGIN | ||||
|  KEY "data conferma" | ||||
|  PROMPT 16 25 "" | ||||
|  FIELD DATADOCRIF | ||||
|  FIELD 33->DATADOCRIF | ||||
|  FORMAT "1442-" | ||||
| END | ||||
| 
 | ||||
| STRINGA 24 48 1 | ||||
| STRING 24 48 1 | ||||
| BEGIN | ||||
|  KEY "condizioni pagamento" | ||||
|  PROMPT 3 27 "" | ||||
|  FIELD %CPG->S0 | ||||
|  FIELD 201@->S0 | ||||
| END | ||||
| 
 | ||||
| STRINGA 25 29 1 | ||||
| STRING 25 29 1 | ||||
| BEGIN | ||||
|  KEY "banca appoggio" | ||||
|  PROMPT 53 27 "" | ||||
|  FIELD %BAN->S0 | ||||
|  FIELD 204@->S0 | ||||
| END | ||||
| 
 | ||||
| STRINGA 26 7 1 | ||||
| STRING 26 7 1 | ||||
| BEGIN | ||||
|  KEY "codice cliente" | ||||
|  PROMPT 3 29 "" | ||||
|  FIELD CODCF | ||||
|  FIELD 33->CODCF | ||||
| END | ||||
| 
 | ||||
| STRINGA 27 11 1 | ||||
| STRING 27 11 1 | ||||
| BEGIN | ||||
|  KEY "partita iva cliente" | ||||
|  PROMPT 12 29 "" | ||||
|  FIELD 20->PAIV | ||||
| END | ||||
| 
 | ||||
| STRINGA 28 18 1 | ||||
| STRING 28 18 1 | ||||
| BEGIN | ||||
|  KEY "porto" | ||||
|  PROMPT 41 25 "" | ||||
|  FIELD %POR->S0 | ||||
|  FIELD 203@->S0 | ||||
| END | ||||
| 
 | ||||
| NUMERO 29 | ||||
| NUMBER 29 | ||||
| BEGIN | ||||
|  KEY "codice agente" | ||||
|  PROMPT 29 29 "" | ||||
|  FIELD CODAG | ||||
|  FIELD 33->CODAG | ||||
| END | ||||
| 
 | ||||
| STRINGA 30 28 1 | ||||
| STRING 30 28 1 | ||||
| BEGIN | ||||
|  KEY "nome agente" | ||||
|  PROMPT 33 29 "" | ||||
|  FIELD %AGE->S0 | ||||
|  FIELD 202@->S0 | ||||
| END | ||||
| 
 | ||||
| END | ||||
| 
 | ||||
| SECTION BODY ODD 24 | ||||
| SECTION BODY ODD 1 | ||||
| 
 | ||||
| STRINGA 32 13 1 | ||||
| STRING 32 13 1 | ||||
| BEGIN | ||||
|  KEY "codice articolo" | ||||
|  PROMPT 5 34 "" | ||||
|  PROMPT 5 1 "" | ||||
|  FIELD 34->CODART | ||||
| END | ||||
| 
 | ||||
| STRINGA 33 30 1 | ||||
| STRING 33 30 1 | ||||
| BEGIN | ||||
|  KEY "descrizione articolo" | ||||
|  PROMPT 25 34 "" | ||||
|  PROMPT 25 1 "" | ||||
|  FIELD 47->DESCR | ||||
| END | ||||
| 
 | ||||
| STRINGA 34 2 1 | ||||
| STRING 34 2 1 | ||||
| BEGIN | ||||
|  KEY "unità di misura" | ||||
|  PROMPT 56 34 "" | ||||
|  PROMPT 56 1 "" | ||||
|  FIELD 34->UMQTA | ||||
| END | ||||
| 
 | ||||
| STRINGA 35 10 1 | ||||
| NUMBER 35 6 3 | ||||
| BEGIN | ||||
|  KEY "quantità" | ||||
|  PROMPT 60 34 "" | ||||
|  PROMPT 60 1 "" | ||||
|  PICTURE "@@@@@@,###" | ||||
|  FIELD 34->QTA | ||||
| END | ||||
| 
 | ||||
| STRINGA 36 10 1 | ||||
| STRING 36 10 1 | ||||
| BEGIN | ||||
|  KEY "quantità lettere" | ||||
|  PROMPT 72 34 "" | ||||
|  FIELD 34->QTA | ||||
|  MESSAGE _CIFRELETTERE | ||||
|  PROMPT 72 1 "" | ||||
|  MESSAGE _CIFRELETTERE,#35 | ||||
| END | ||||
| 
 | ||||
| END | ||||
| 
 | ||||
| SECTION FOOTER ODD 9 | ||||
| 
 | ||||
| STRINGA 47 5 1 | ||||
| STRING 47 5 1 | ||||
| BEGIN | ||||
|  KEY "scritta SEGUE" | ||||
|  PROMPT 72 70 "SEGUE" | ||||
|  PROMPT 72 9 "SEGUE" | ||||
| END | ||||
| 
 | ||||
| END | ||||
| 
 | ||||
| SECTION FOOTER LAST 9 | ||||
| 
 | ||||
| LISTA 37 1 1 | ||||
| LIST 37 1 1 | ||||
| BEGIN | ||||
|  KEY "trasporto a cura del mittente" | ||||
|  PROMPT 4 59 "" | ||||
|  PROMPT 4 1 "" | ||||
|  FIELD 33->CODSPMEZZO | ||||
|  ITEM "|" | ||||
|  ITEM "D|" | ||||
|  ITEM "V|" | ||||
|  ITEM "M|x" | ||||
|  FIELD CODSPMEZZO | ||||
| END | ||||
| 
 | ||||
| LISTA 38 1 1 | ||||
| LIST 38 1 1 | ||||
| BEGIN | ||||
|  KEY "trasporto a cura del destinatario" | ||||
|  PROMPT 13 59 "" | ||||
|  PROMPT 13 1 "" | ||||
|  FIELD 33->CODSPMEZZO | ||||
|  ITEM "|" | ||||
|  ITEM "D|x" | ||||
|  FIELD CODSPMEZZO | ||||
|  ITEM "V|" | ||||
|  ITEM "M|" | ||||
| END | ||||
| 
 | ||||
| LISTA 39 1 1 | ||||
| LIST 39 1 1 | ||||
| BEGIN | ||||
|  KEY "trasporto a cura del vettore" | ||||
|  PROMPT 23 59 "" | ||||
|  PROMPT 23 1 "" | ||||
|  FIELD 33->CODSPMEZZO | ||||
|  ITEM "|" | ||||
|  ITEM "D|" | ||||
|  ITEM "V|x" | ||||
|  FIELD CODSPMEZZO | ||||
|  ITEM "M|" | ||||
| END | ||||
| 
 | ||||
| STRINGA 40 45 1 | ||||
| STRING 40 45 1 | ||||
| BEGIN | ||||
|  KEY "nome vettore" | ||||
|  PROMPT 3 62 "" | ||||
|  FIELD %VET->S0 | ||||
|  PROMPT 3 4 "" | ||||
|  FIELD 205@->S0 | ||||
| END | ||||
| 
 | ||||
| STRINGA 41 45 1 | ||||
| STRING 41 45 1 | ||||
| BEGIN | ||||
|  KEY "indirizzo vettore" | ||||
|  PROMPT 3 64 "" | ||||
|  FIELD %VET->S1 | ||||
|  PROMPT 3 6 "" | ||||
|  FIELD 205@->S1 | ||||
| END | ||||
| 
 | ||||
| DATA 42 8 1 | ||||
| DATE 42 8 1 | ||||
| BEGIN | ||||
|  KEY "data inizio trasporto" | ||||
|  PROMPT 51 61 "" | ||||
|  FIELD DATAPART | ||||
|  PROMPT 51 3 "" | ||||
|  FIELD 33->DATAPART | ||||
|  FORMAT "1442-" | ||||
| END | ||||
| 
 | ||||
| STRINGA 43 5 1 | ||||
| STRING 43 5 1 | ||||
| BEGIN | ||||
|  KEY "ora inizio trasporto" | ||||
|  PROMPT 60 61 "" | ||||
|  FIELD ORAPART | ||||
|  PROMPT 60 3 "" | ||||
|  FIELD 33->ORAPART | ||||
| END | ||||
| 
 | ||||
| STRINGA 44 27 1 | ||||
| STRING 44 27 1 | ||||
| BEGIN | ||||
|  KEY "aspetto beni" | ||||
|  PROMPT 37 59 "" | ||||
|  FIELD %ASP->S0 | ||||
|  PROMPT 37 1 "" | ||||
|  FIELD 206@->S0 | ||||
| END | ||||
| 
 | ||||
| STRINGA 45 7 1 | ||||
| STRING 45 7 1 | ||||
| BEGIN | ||||
|  KEY "peso" | ||||
|  PROMPT 73 59 "" | ||||
|  FIELD PNETTO | ||||
|  PROMPT 73 1 "" | ||||
|  FIELD 33->PNETTO | ||||
| END | ||||
| 
 | ||||
| STRINGA 46 5 1 | ||||
| STRING 46 5 1 | ||||
| BEGIN | ||||
|  KEY "colli" | ||||
|  PROMPT 66 59 "" | ||||
|  FIELD NCOLLI | ||||
|  PROMPT 66 1 "" | ||||
|  FIELD 33->NCOLLI | ||||
| END | ||||
| 
 | ||||
| END | ||||
| 
 | ||||
| END | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										73
									
								
								ve/vefat.frm
									
									
									
									
									
								
							
							
						
						
									
										73
									
								
								ve/vefat.frm
									
									
									
									
									
								
							| @ -1,4 +1,3 @@ | ||||
| <<<<<<< vefat.frm | ||||
| 
 | ||||
| // - I FIELD sul file 20 (clifo) vanno sostituiti con messaggi _CLIENTE. | ||||
| // - "Cliente provincia" e' gestito dalla relazione. Dovra' essere gestito da un messaggio _CLIENTE | ||||
| @ -19,10 +18,7 @@ | ||||
| // | ||||
| // Togliere dalla relazione i files che non servono, quando tutti i campi sono OK. | ||||
| 
 | ||||
| ======= | ||||
| >>>>>>> 1.2 | ||||
| USE 33 | ||||
| <<<<<<< vefat.frm | ||||
| JOIN 34                 INTO CODNUM==CODNUM ANNO==ANNO PROVV==PROVV NDOC==NDOC | ||||
| JOIN 17                 INTO TIPOCF==TIPOCF CODCF==CODCF | ||||
| JOIN 20                 INTO TIPOCF==TIPOCF CODCF==CODCF | ||||
| @ -37,34 +33,11 @@ JOIN %POR               INTO CODTAB==CODPORTO | ||||
| JOIN %BAN               INTO CODTAB==CODABIA+CODCABA | ||||
| JOIN %VET               INTO CODTAB==CODVETT1 | ||||
| JOIN %ASP               INTO CODTAB==ASPBENI1 | ||||
| ======= | ||||
| JOIN 34 ALIAS 101 INTO CODNUM=CODNUM ANNO=ANNO PROVV=PROVV NDOC=NDOC | ||||
| JOIN 17 ALIAS 201 INTO TIPOCF=TIPOCF CODCF=CODCF | ||||
| JOIN 20 ALIAS 202 INTO TIPOCF=TIPOCF CODCF=CODCF | ||||
| JOIN %CPG ALIAS 301 INTO CODTAB=CODPAG | ||||
| JOIN %VAL ALIAS 302 INTO CODTAB=CODVAL | ||||
| JOIN %LNG ALIAS 303 INTO CODTAB=CODLIN | ||||
| JOIN AGE ALIAS 304 INTO CODTAB=CODAG | ||||
| JOIN MSP ALIAS 305 INTO CODTAB=CODSPMEZZO | ||||
| JOIN POR ALIAS 306 INTO CODTAB=CODPORTO | ||||
| JOIN 47 TO 101@ ALIAS 401 INTO CODART=CODART | ||||
| JOIN 52 ALIAS 601 INTO TIPOCF=TIPOCF CODCF=CODCF | ||||
| JOIN 16 ALIAS 701 INTO TIPOCF=TIPOCF CODCF=CODCF CODIND=CODINDSP | ||||
| JOIN 16 TO 201@ ALIAS 801 INTO TIPOCF=TIPOCF CODCF=CODCF CODIND=CODINDSP | ||||
| JOIN %BAN ALIAS 901 INTO CODTAB=CODABIA+CODCABA | ||||
| JOIN %BAN ALIAS 902 INTO CODTAB=CODABIP+CODCABP | ||||
| JOIN NDO ALIAS 1001 INTO CODTAB=CODNOTESP1 | ||||
| JOIN NDO ALIAS 1002 INTO CODTAB=CODNOTESP2 | ||||
| JOIN 13 TO 304@ ALIAS 1101 INTO COM=COMCF | ||||
| JOIN 13 TO 304@ ALIAS 1102 INTO COM=COM | ||||
| 
 | ||||
| >>>>>>> 1.2 | ||||
| END | ||||
| 
 | ||||
| DESCRIPTION | ||||
| BEGIN | ||||
|   33->* "Documenti di vendita" | ||||
| <<<<<<< vefat.frm | ||||
|   34->* "Righe documenti di vendita" | ||||
|   17->* "Clienti/Fornitori per vendite" | ||||
|   20->* "Clienti/Fornitori" | ||||
| @ -78,27 +51,6 @@ BEGIN | ||||
|   %MSP ->* "Modalità di spedizioni" | ||||
|   %POR ->* "Modalità di consegna" | ||||
|   %BAN ->* "Banche" | ||||
| ======= | ||||
|   101@->* "Righe documenti di vendita" | ||||
|   201@->* "Clienti/Fornitori per vendite" | ||||
|   202@->* "Clienti/Fornitori" | ||||
|   301@->* "CPG" | ||||
|   302@->* "VAL" | ||||
|   303@->* "LNG" | ||||
|   304@->* "AGE" | ||||
|   305@->* "MSP" | ||||
|   306@->* "POR" | ||||
|   401@->* "Righe listini" | ||||
|   601@->* "Contratti clienti" | ||||
|   701@->* "Indirizzi di spedizione" | ||||
|   801@->* "Indirizzi di spedizione" | ||||
|   901@->* "Tabella banche" | ||||
|   902@->* "Tabella banche" | ||||
|   1001@->* "Tabella Note Documento" | ||||
|   1002@->* "Tabella Note Documento" | ||||
|   1101@->* "Comuni" | ||||
|   1102@->* "Comuni" | ||||
| >>>>>>> 1.2 | ||||
| END | ||||
| 
 | ||||
| GENERAL | ||||
| @ -223,23 +175,15 @@ DATA 20 8 1 | ||||
| BEGIN | ||||
|  KEY "data conferma" | ||||
|  PROMPT  20 23 "" | ||||
| <<<<<<< vefat.frm | ||||
|  FIELD DATADOCRIF | ||||
|  FORMAT "1444-" | ||||
| ======= | ||||
|  FIELD 33->DATADOCRIF | ||||
| >>>>>>> 1.2 | ||||
| END | ||||
| 
 | ||||
| STRINGA 21 49 1 | ||||
| BEGIN | ||||
|  KEY "condizioni di pagamento" | ||||
|  PROMPT  3 25 "" | ||||
| <<<<<<< vefat.frm | ||||
|  FIELD %CPG->S0 | ||||
| ======= | ||||
|  FIELD 901@->S0 | ||||
| >>>>>>> 1.2 | ||||
| END | ||||
| 
 | ||||
| STRINGA 22 29 1 | ||||
| @ -285,26 +229,12 @@ BEGIN | ||||
|  PROMPT  50 15 "" | ||||
| END | ||||
| 
 | ||||
| <<<<<<< vefat.frm | ||||
| STRINGA 30 2 1 | ||||
| BEGIN | ||||
|  KEY "cliente provincia" | ||||
|  PROMPT  73 16 "" | ||||
|  FIELD 13->PROVCOM | ||||
| END | ||||
| ======= | ||||
| STRINGA 29 20 1 | ||||
| BEGIN | ||||
|  KEY "cliente localita 2" | ||||
|  PROMPT  50 16 "" | ||||
| END | ||||
| 
 | ||||
| STRINGA 30 2 1 | ||||
| BEGIN | ||||
|  KEY "cliente provincia" | ||||
|  PROMPT  73 16 "" | ||||
| END | ||||
| >>>>>>> 1.2 | ||||
| 
 | ||||
| STRINGA 31 2 1 | ||||
| BEGIN | ||||
| @ -587,10 +517,7 @@ STRINGA 75 12 1 | ||||
| BEGIN | ||||
|  KEY "netto da pagare" | ||||
|  PROMPT  71 66 "" | ||||
| <<<<<<< vefat.frm | ||||
|  MESSAGE _COD_TESTA NETPAG | ||||
| ======= | ||||
| >>>>>>> 1.2 | ||||
| END | ||||
| 
 | ||||
| END | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user