diff --git a/ve/f47.trr b/ve/f47.trr index 5b8276660..4518d8c21 100755 --- a/ve/f47.trr +++ b/ve/f47.trr @@ -77,7 +77,7 @@ ARTLAVCONT|1|4|0|Art. Lavacont (Lavanderie) MANGDEST|1|3|0|Mangano destinazione (Lavanderie) LIVPERART|8|1|0|LIvellli di giacenza per articolo G1|11|10|0|Campi virtuali -SCACONTR|1|24|0|Sottocategorie contributo CONAI (una ogni 4 caratteri) +CONAISC|1|24|0|Sottocategorie contributo CONAI (una ogni 4 caratteri) USER1|1|40|0|Campo libero 1 USER2|1|20|0|Campo libero 2 USER3|1|20|0|Campo libero 3 diff --git a/ve/ve2400.uml b/ve/ve2400.uml index 96fcbed97..4d455cbb1 100755 --- a/ve/ve2400.uml +++ b/ve/ve2400.uml @@ -610,7 +610,7 @@ END STRING F_SCAACC 4 BEGIN PROMPT 1 15 "Acciaio " - FIELD SCACONTR[1,4] + FIELD CONAISC[1,4] USE &SCC SELECT CODTAB[1,2]=="AC" INPUT CODTAB F_SCAACC DISPLAY "Categoria" CODTAB[1,2] @@ -624,7 +624,7 @@ END STRING F_SCAALL 4 BEGIN PROMPT 27 15 "Alluminio " - FIELD SCACONTR[5,8] + FIELD CONAISC[5,8] USE &SCC SELECT CODTAB[1,2]=="AL" INPUT CODTAB F_SCAALL COPY DISPLAY F_SCAACC @@ -636,7 +636,7 @@ END STRING F_SCACAR 4 BEGIN PROMPT 54 15 "Carta " - FIELD SCACONTR[9,12] + FIELD CONAISC[9,12] USE &SCC SELECT CODTAB[1,2]=="CA" INPUT CODTAB F_SCACAR COPY DISPLAY F_SCAACC @@ -648,7 +648,7 @@ END STRING F_SCAPLA 4 BEGIN PROMPT 1 16 "Plastica " - FIELD SCACONTR[13,16] + FIELD CONAISC[13,16] USE &SCC SELECT CODTAB[1,2]=="PL" INPUT CODTAB F_SCAPLA COPY DISPLAY F_SCAACC @@ -660,7 +660,7 @@ END STRING F_SCALEG 4 BEGIN PROMPT 27 16 "Legno " - FIELD SCACONTR[17,20] + FIELD CONAISC[17,20] USE &SCC SELECT CODTAB[1,2]=="LE" INPUT CODTAB F_SCALEG COPY DISPLAY F_SCAACC @@ -672,7 +672,7 @@ END STRING F_SCAVET 4 BEGIN PROMPT 54 16 "Vetro " - FIELD SCACONTR[21,24] + FIELD CONAISC[21,24] USE &SCC SELECT CODTAB[1,2]=="VE" INPUT CODTAB F_SCAVET COPY DISPLAY F_SCAACC diff --git a/ve/ve2500.cpp b/ve/ve2500.cpp index 0a2abe0a4..cf3c2aee3 100755 --- a/ve/ve2500.cpp +++ b/ve/ve2500.cpp @@ -16,8 +16,12 @@ class TGestione_listini_semplice_mask: public TAutomask protected: virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); + void crea_listino_da_anagrafica(); + void copia_listino(); public: + int find_art(TSheet_field& s, const char tipo, const TString& art, const int tranne = -1) const; + int guess_art(TSheet_field& s, const char tipo, const TString& art) const; TGestione_listini_semplice_mask(); }; @@ -34,15 +38,66 @@ TGestione_listini_semplice_mask::TGestione_listini_semplice_mask() : TAutomask(" efield(F_L_CATVEN).reset_key(1); } +//metodo per la ricerca al volo di un articolo (serve per posizionare il cursore sullo sheet in tempo reale.. +//..mentre si digita il codice articolo nel campo di ricerca +int TGestione_listini_semplice_mask::guess_art(TSheet_field& s, const char tipo, const TString& art) const +{ + return 0; +} + +//metodo che restituisce l'indice della riga dello sheet che contiene +//la coppia tipo-articolo desiderata (-1 se non lo trova) +int TGestione_listini_semplice_mask::find_art(TSheet_field& s, const char tipo, const TString& art, const int tranne) const +{ + int r = -1; + //scorro le righe dello sheet partendo dall'ultima + //tranne serve per evitare una riga specifica;di default è posto =-1 perchè non si usa + for (r = s.items() - 1; r >= 0; r--) + { + if (r != tranne) + { + const char* tiporiga = s.row(r).get(0); + const char* codart = s.row(r).get(1); + + if (tipo == tiporiga[0] && art == codart) + break; + } + } + return r; +} + +void TGestione_listini_semplice_mask::crea_listino_da_anagrafica() +{ + +} + +void TGestione_listini_semplice_mask::copia_listino() +{ +} + bool TGestione_listini_semplice_mask::on_field_event(TOperable_field &o, TField_event e, long jolly) { switch(o.dlg()) { + case F_L_CODRIGA_A: + case F_L_CODRIGA_G: + case F_L_CODRIGA_S: + case F_L_CODRIGA_R: + if (e == fe_modify) + { + const char tiporiga = get(F_L_TIPORIGA)[0]; + const TString& codriga = o.get(); + TSheet_field& sf_righe = sfield(F_L_RIGHE); + const long riga = find_art(sf_righe, tiporiga, codriga); + if (riga >= 0) + sf_righe.select(riga, true); + } + break; //se abilita la gestione scaglioni nello sheet devono comparire le colonne NSCAGL e QLIM case F_L_GESTSCAGL: if (e == fe_init || e == fe_modify) { - TSheet_field& sf_righe = sfield(F_RIGHE); + TSheet_field& sf_righe = sfield(F_L_RIGHE); const bool gest_scagl = o.get().full(); sf_righe.enable_column(F_NSCAGL, gest_scagl); sf_righe.enable_column(F_QLIM, gest_scagl); @@ -54,7 +109,7 @@ bool TGestione_listini_semplice_mask::on_field_event(TOperable_field &o, TField_ case F_L_GESTUM: if (e == fe_init || e == fe_modify) { - TSheet_field& sf_righe = sfield(F_RIGHE); + TSheet_field& sf_righe = sfield(F_L_RIGHE); const bool gest_um = o.get().full(); sf_righe.enable_column(F_UM, gest_um); @@ -65,7 +120,7 @@ bool TGestione_listini_semplice_mask::on_field_event(TOperable_field &o, TField_ case F_L_GESTSCO: if (e == fe_init || e == fe_modify) { - TSheet_field& sf_righe = sfield(F_RIGHE); + TSheet_field& sf_righe = sfield(F_L_RIGHE); const bool gest_sco = o.get().full(); sf_righe.enable_column(F_ADDIVA, gest_sco); sf_righe.enable_column(F_CODIVA, gest_sco); @@ -78,6 +133,30 @@ bool TGestione_listini_semplice_mask::on_field_event(TOperable_field &o, TField_ sf_righe.force_update(); } break; + //controllo della unicità del tiporiga+codriga nello sheet + case F_L_RIGHE: + if (e == se_notify_modify) + { + TSheet_field& sf_righe = sfield(F_L_RIGHE); + TToken_string& riga = sf_righe.row(jolly); + const char tipo = riga.get_char(0); + const TString& art = riga.get(1); + const long found_riga = find_art(sf_righe, tipo, art, jolly); + if (found_riga >= 0) + return error_box(TR("Non è possibile inserire lo stesso articolo più di una volta!")); + } + break; + case DLG_CREA: + if (e == fe_button) + { + crea_listino_da_anagrafica(); + } + break; + case DLG_COPIA: + { + copia_listino(); + } + break; default: break; } @@ -93,9 +172,8 @@ class TGestione_listini_semplice : public TRelation_application TRelation* _rel; private: - void save_rows(const TMask& m); + void save_rows(); TString build_query() const; - int find_art(TSheet_field& s, const char tipo, const TString& art) const; protected: virtual bool user_create(); @@ -121,25 +199,11 @@ public: }; -//FIND_ART: metodo che restituisce l'indice della riga dello sheet che contiene -//la coppia tipo-articolo desiderata (-1 se non lo trova) -int TGestione_listini_semplice::find_art(TSheet_field& s, const char tipo, const TString& art) const -{ - int r = -1; - //scorro le righe dello sheet partendo dall'ultima - for (r = s.items() - 1; r >= 0; r--) - { - const char* tiporiga = s.row(r).get(0); - const char* codart = s.row(r).get(1); - if (tipo == tiporiga[0] && art == codart) - break; - } - return r; -} - -void TGestione_listini_semplice::save_rows(const TMask& m) +void TGestione_listini_semplice::save_rows() { + //attenzione!!! fatto questo casino per poter usare la find_art() che è un metodo della maschera listini + const TGestione_listini_semplice_mask& m = *_mask; //instanzio un TISAM_recordset sulle righe listino e un localisamfile TISAM_recordset righelist(build_query()); righelist.set_var("#CATVEN", m.get(F_L_CATVEN)); @@ -150,7 +214,7 @@ void TGestione_listini_semplice::save_rows(const TMask& m) TLocalisamfile& file = righelist.cursor()->file(); //sheet righe listino da salvare! (righe panda?) - TSheet_field& righe = m.sfield(F_RIGHE); + TSheet_field& righe = m.sfield(F_L_RIGHE); //scorro tutte le righe listino ed elimino tutte quelle che non ci sono più sullo sheet (modifiche utonto) for (bool ok = righelist.move_first(); ok; ok = righelist.move_next()) @@ -158,7 +222,7 @@ void TGestione_listini_semplice::save_rows(const TMask& m) const char tiporiga = righelist.get("TIPORIGA").as_string()[0]; const TString& art = righelist.get("CODRIGA").as_string(); - if (find_art(righe, tiporiga, art) < 0) + if (m.find_art(righe, tiporiga, art) < 0) file.remove(); } @@ -242,7 +306,7 @@ int TGestione_listini_semplice::read(TMask& m) const TRectype& rec = righelist.cursor()->curr(); //recupero sheet e realtiva mashera di riga - TSheet_field& sf_righe = m.sfield(F_RIGHE); + TSheet_field& sf_righe = m.sfield(F_L_RIGHE); TMask& msk = sf_righe.sheet_mask(); sf_righe.destroy(); @@ -273,7 +337,7 @@ int TGestione_listini_semplice::rewrite(const TMask& m) int err = TRelation_application::rewrite(m); if(err == NOERR) - save_rows(m); + save_rows(); return err; } @@ -283,7 +347,7 @@ int TGestione_listini_semplice::write(const TMask& m) int err = TRelation_application::write(m); if(err == NOERR) - save_rows(m); + save_rows(); return err; } diff --git a/ve/ve2500a.h b/ve/ve2500a.h index 08dea44ca..fead542ec 100755 --- a/ve/ve2500a.h +++ b/ve/ve2500a.h @@ -1,33 +1,42 @@ //maschera gestione listini comprensibile -#define F_L_CATVEN 201 -#define F_L_DESVEN 202 -#define F_L_COD 203 -#define F_L_DESCR 204 -#define F_VALINI 205 -#define F_VALFIN 206 +#define F_L_CATVEN 201 +#define F_L_DESVEN 202 +#define F_L_COD 203 +#define F_L_DESCR 204 +#define F_L_VALINI 205 +#define F_L_VALFIN 206 +#define F_L_TIPORIGA 207 +#define F_L_CODRIGA_A 208 +#define F_L_DESRIGA_A 209 +#define F_L_CODRIGA_G 210 +#define F_L_DESRIGA_G 211 +#define F_L_CODRIGA_S 212 +#define F_L_DESRIGA_S 213 +#define F_L_CODRIGA_R 214 +#define F_L_DESRIGA_R 215 -#define F_RIGHE 207 +#define F_L_RIGHE 216 -#define F_L_CODVAL 208 -#define F_L_CAMBIO 209 -#define F_L_CONTROEURO 210 -#define F_L_DATACAM 211 -#define F_L_GESTSCAGL 212 -#define F_L_DECIMALI 213 -#define F_L_SEQRIC_1 214 -#define F_L_SEQRIC_2 215 -#define F_L_SEQRIC_3 216 -#define F_L_SEQRIC_4 217 -#define F_L_IMPLORDI 218 -#define F_L_GESTUM 219 -#define F_L_GESTSCO 220 -#define F_L_CODSUCC 221 -#define F_L_DESSUCC 222 -#define F_L_FATHCATVEN 223 -#define F_L_FATHDESVEN 224 -#define F_L_FATHCOD 225 -#define F_L_FATHDESCR 226 -#define F_L_ARROTONDA 227 +#define F_L_CODVAL 217 +#define F_L_CAMBIO 218 +#define F_L_CONTROEURO 219 +#define F_L_DATACAM 220 +#define F_L_GESTSCAGL 221 +#define F_L_DECIMALI 222 +#define F_L_SEQRIC_1 223 +#define F_L_SEQRIC_2 224 +#define F_L_SEQRIC_3 225 +#define F_L_SEQRIC_4 226 +#define F_L_IMPLORDI 227 +#define F_L_GESTUM 228 +#define F_L_GESTSCO 229 +#define F_L_CODSUCC 230 +#define F_L_DESSUCC 231 +#define F_L_FATHCATVEN 232 +#define F_L_FATHDESVEN 233 +#define F_L_FATHCOD 234 +#define F_L_FATHDESCR 235 +#define F_L_ARROTONDA 236 //campi dello sheet delle righe #define F_TIPORIGA 101 @@ -56,6 +65,11 @@ #define F_DATAULTAUM 118 #define F_PERCPROVV 119 +//bottoni +#define DLG_CREA 501 +#define DLG_COPIA 502 + + diff --git a/ve/ve2500a.uml b/ve/ve2500a.uml index 917247497..5b67fa861 100755 --- a/ve/ve2500a.uml +++ b/ve/ve2500a.uml @@ -2,6 +2,19 @@ TOOLBAR "Toolbar" 0 0 0 2 #include + +BUTTON DLG_CREA 2 2 +BEGIN + PROMPT 10 -1 "Cr~ea" + PICTURE TOOL_IMPORT +END + +BUTTON DLG_COPIA 2 2 +BEGIN + PROMPT 11 -1 "Co~pia" + PICTURE TOOL_COPY +END + ENDPAGE PAGE "Dati generali e Righe" 0 2 0 0 @@ -73,26 +86,151 @@ BEGIN FIELD DESCR END -DATA F_VALINI +DATA F_L_VALINI BEGIN PROMPT 1 3 "Inizio validita` " FIELD VALIN END -DATA F_VALFIN +DATA F_L_VALFIN BEGIN PROMPT 42 3 "Fine validita` " FIELD VALFIN END -TEXT -1 +//campi di ricerca parziale sullo sheet +//------------------------------------- +LIST F_L_TIPORIGA 1 13 BEGIN - PROMPT 0 5 "@bRighe listino" + PROMPT 1 5 "" + FLAGS "P" + ITEM "A|Articolo" + MESSAGE HIDE,2@|HIDE,3@|HIDE,4@|SHOW,1@ + ITEM "G|Gr. merc." + MESSAGE HIDE,1@|HIDE,3@|HIDE,4@|SHOW,2@ + ITEM "S|Sotgr.merc." + MESSAGE HIDE,1@|HIDE,2@|HIDE,4@|SHOW,3@ + ITEM "R|Ragg. fisc." + MESSAGE HIDE,1@|HIDE,2@|HIDE,3@|SHOW,4@ END -SPREADSHEET F_RIGHE +STRING F_L_CODRIGA_A 20 BEGIN - PROMPT 1 6 "Righe" + PROMPT 18 5 "" + FLAGS "U" + USE LF_ANAMAG + INPUT CODART F_L_CODRIGA_A + DISPLAY "Articolo@20" CODART + DISPLAY "Descrizione@50" DESCR + OUTPUT F_L_CODRIGA_A CODART + OUTPUT F_L_DESRIGA_A DESCR + //CHECKTYPE FORCED + ADD RUN ve2 -3 + GROUP 1 +END + +STRING F_L_DESRIGA_A 50 33 +BEGIN + PROMPT 42 5 "" + USE LF_ANAMAG KEY 2 + INPUT DESCR F_L_DESRIGA_A + DISPLAY "Descrizione@50" DESCR + DISPLAY "Articolo@20" CODART + COPY OUTPUT F_L_CODRIGA_A + //CHECKTYPE NORMAL + ADD RUN ve2 -3 + GROUP 1 +END + +STRING F_L_CODRIGA_G 20 3 +BEGIN + PROMPT 18 5 "" + FLAGS "U" + USE GMC SELECT CODTAB[4,5] == "" + INPUT CODTAB[1,3] F_L_CODRIGA_G + DISPLAY "Gr. merc." CODTAB[1,3] + DISPLAY "Descrizione@50" S0 + OUTPUT F_L_CODRIGA_G CODTAB[1,3] + OUTPUT F_L_DESRIGA_G S0 + //CHECKTYPE FORCED + GROUP 2 +END + +STRING F_L_DESRIGA_G 50 +BEGIN + PROMPT 25 5 "" + USE GMC KEY 2 SELECT CODTAB[4,5] == "" + INPUT S0 F_DESRIGA_G + DISPLAY "Descrizione@50" S0 + DISPLAY "Gr. merc." CODTAB[1,3] + COPY OUTPUT F_L_CODRIGA_G + //CHECKTYPE NORMAL + GROUP 2 +END + +STRING F_L_CODRIGA_S 20 5 +BEGIN + PROMPT 18 5 "" + FLAGS "U" + USE GMC SELECT CODTAB[4,5] != "" + INPUT CODTAB F_L_CODRIGA_S + DISPLAY "Gruppo merc." CODTAB[1,3] + DISPLAY "Sottogr. merc." CODTAB[4,5] + DISPLAY "Descrizione@50" S0 + OUTPUT F_L_CODRIGA_S CODTAB + OUTPUT F_L_DESRIGA_S S0 + //CHECKTYPE FORCED + GROUP 3 +END + +STRING F_L_DESRIGA_S 50 48 +BEGIN + PROMPT 27 5 "" + USE GMC KEY 2 SELECT CODTAB[4,5] != "" + INPUT S0 F_L_DESRIGA_S + DISPLAY "Descrizione@50" S0 + DISPLAY "Gr. merc." CODTAB[1,3] + DISPLAY "Sottogr. merc." CODTAB[4,5] + COPY OUTPUT F_L_CODRIGA_S + //CHECKTYPE NORMAL + GROUP 3 +END + +STRING F_L_CODRIGA_R 20 5 +BEGIN + PROMPT 18 5 "" + FLAGS "U" + USE RFA + INPUT CODTAB F_L_CODRIGA_R + DISPLAY "Ragg. fisc." CODTAB + DISPLAY "Descrizione@50" S0 + OUTPUT F_L_CODRIGA_R CODTAB + OUTPUT F_L_DESRIGA_R S0 + //CHECKTYPE FORCED + GROUP 4 +END + +STRING F_L_DESRIGA_R 50 48 +BEGIN + PROMPT 27 5 "" + USE RFA KEY 2 + INPUT S0 F_L_DESRIGA_R + DISPLAY "Descrizione@50" S0 + DISPLAY "Ragg. fisc." CODTAB + COPY OUTPUT F_L_CODRIGA_R + //CHECKTYPE NORMAL + GROUP 4 +END +//------------------------------------------ + +TEXT -1 +BEGIN + PROMPT 0 6 "@bRighe listino" +END + +SPREADSHEET F_L_RIGHE +BEGIN + PROMPT 1 7 "Righe" ITEM "Tipo@4" ITEM "Codice@20" ITEM "Descrizione@50" @@ -450,6 +588,7 @@ BEGIN DISPLAY "Descrizione@50" S0 DISPLAY "Gr. merc." CODTAB[1,3] COPY OUTPUT F_CODRIGA_G + CHECKTYPE NORMAL GROUP 2 END @@ -478,6 +617,7 @@ BEGIN DISPLAY "Gr. merc." CODTAB[1,3] DISPLAY "Sottogr. merc." CODTAB[4,5] COPY OUTPUT F_CODRIGA_S + CHECKTYPE NORMAL GROUP 3 END @@ -504,6 +644,7 @@ BEGIN DISPLAY "Descrizione@50" S0 DISPLAY "Ragg. fisc." CODTAB COPY OUTPUT F_CODRIGA_R + CHECKTYPE NORMAL GROUP 4 END diff --git a/ve/velib02.cpp b/ve/velib02.cpp index 75b4ae1fd..29f34c973 100755 --- a/ve/velib02.cpp +++ b/ve/velib02.cpp @@ -836,7 +836,7 @@ const char* conai_peso_name(TCONAI_class type, int logicnum) { if (conai_configured_class(type)) { - const char* const __conai_peso_rdoc[] = {"PUNACC", "PUNALL", "PUNCAR", "PUNPLA", "PUNLEG", "PUNVET"}; + const char* const __conai_peso_rdoc[] = {"CONPUACC", "CONPUALL", "CONPUCAR", "CONPUPLA", "CONPULEG", "CONPUVET"}; const char* const __conai_peso_anmg[] = {"CONACC", "CONALL", "CONCAR", "CONPLA", "CONLEG", "CONVET"}; switch (logicnum) { @@ -854,9 +854,9 @@ const char* conai_sottocat_name(TCONAI_class type, int logicnum) if (conai_configured_class(type)) { const char* const __conai_scat_rdoc[CONAI_CLASSES] = - { "SCAACC", "SCAALL", "SCACAR", "SCAPLA", "SCALEG", "SCAVET" }; + { "CONSCACC", "CONSCALL", "CONSCCAR", "CONSCPLA", "CONSCLEG", "CONSCVET" }; const char* const __conai_scat_anmg[CONAI_CLASSES] = - { "SCACONTR[1,4]", "SCACONTR[5,8]", "SCACONTR[9,12]", "SCACONTR[13,16]", "SCACONTR[17,20]", "SCACONTR[21,24]" }; + { "CONAISC[1,4]", "CONAISC[5,8]", "CONAISC[9,12]", "CONAISC[13,16]", "CONAISC[17,20]", "CONAISC[21,24]" }; switch (logicnum) { case LF_ANAMAG : return __conai_scat_anmg[type]; diff --git a/ve/verig.uml b/ve/verig.uml index 8f418e926..e9950b246 100755 --- a/ve/verig.uml +++ b/ve/verig.uml @@ -2096,13 +2096,13 @@ BEGIN DISPLAY "Sottocategoria" CODTAB[3,4] DISPLAY "Descrizione@50" S0 OUTPUT FR_SCAACC CODTAB - FIELD SCAACC + FIELD CONSCACC END NUMBER FR_PUNACC 13 5 BEGIN PROMPT 40 1 "Peso unitario " - FIELD PUNACC + FIELD CONPUACC END STRING FR_SCAALL 4 @@ -2112,13 +2112,13 @@ BEGIN INPUT CODTAB FR_SCAALL COPY DISPLAY FR_SCAACC OUTPUT FR_SCAALL CODTAB - FIELD SCAALL + FIELD CONSCALL END NUMBER FR_PUNALL 13 5 BEGIN PROMPT 40 2 "Peso unitario " - FIELD PUNALL + FIELD CONPUALL END STRING FR_SCACAR 4 @@ -2128,13 +2128,13 @@ BEGIN INPUT CODTAB FR_SCACAR COPY DISPLAY FR_SCAACC OUTPUT FR_SCACAR CODTAB - FIELD SCACAR + FIELD CONSCCAR END NUMBER FR_PUNCAR 13 5 BEGIN PROMPT 40 3 "Peso unitario " - FIELD PUNCAR + FIELD CONPUCAR END STRING FR_SCAPLA 4 @@ -2144,13 +2144,13 @@ BEGIN INPUT CODTAB FR_SCAPLA COPY DISPLAY FR_SCAACC OUTPUT FR_SCAPLA CODTAB - FIELD SCAPLA + FIELD CONSCPLA END NUMBER FR_PUNPLA 13 5 BEGIN PROMPT 40 4 "Peso unitario " - FIELD PUNPLA + FIELD CONPUPLA END STRING FR_SCALEG 4 @@ -2160,13 +2160,13 @@ BEGIN INPUT CODTAB FR_SCALEG COPY DISPLAY FR_SCAACC OUTPUT FR_SCALEG CODTAB - FIELD SCALEG + FIELD CONSCLEG END NUMBER FR_PUNLEG 13 5 BEGIN PROMPT 40 5 "Peso unitario " - FIELD PUNLEG + FIELD CONPULEG END STRING FR_SCAVET 4 @@ -2176,13 +2176,13 @@ BEGIN INPUT CODTAB FR_SCAVET COPY DISPLAY FR_SCAACC OUTPUT FR_SCAVET CODTAB - FIELD SCAVET + FIELD CONSCVET END NUMBER FR_PUNVET 13 5 BEGIN PROMPT 40 6 "Peso unitario " - FIELD PUNVET + FIELD CONPUVET END #endif