diff --git a/build/ve5.vcxproj b/build/ve5.vcxproj index 5cd6deb09..358551a5d 100644 --- a/build/ve5.vcxproj +++ b/build/ve5.vcxproj @@ -191,7 +191,10 @@ %(AdditionalIncludeDirectories) %(PreprocessorDefinitions) - + + false + + @@ -201,6 +204,7 @@ + @@ -210,6 +214,7 @@ + diff --git a/build/ve5.vcxproj.filters b/build/ve5.vcxproj.filters index 569a335c0..e788cc44e 100644 --- a/build/ve5.vcxproj.filters +++ b/build/ve5.vcxproj.filters @@ -39,6 +39,9 @@ Sources + + Sources + @@ -62,6 +65,9 @@ Masks + + Masks + @@ -85,6 +91,9 @@ Headers + + Headers + diff --git a/src/ve/ve0100.cpp b/src/ve/ve0100.cpp index 744a67bbe..ff3285f6e 100755 --- a/src/ve/ve0100.cpp +++ b/src/ve/ve0100.cpp @@ -473,6 +473,9 @@ void TMotore_application::do_elab( TDocumento& doc, int when) // C 90 case _contabilizzazione_analitica : el = new TContabilizzazione_analitica(eld); break; + case _raggruppamento_documento: + el = new TRaggruppamento_documento(eld); + break; default : break; } diff --git a/src/ve/ve5.cpp b/src/ve/ve5.cpp index 99003d3d2..28954ae44 100755 --- a/src/ve/ve5.cpp +++ b/src/ve/ve5.cpp @@ -13,6 +13,7 @@ int main(int argc, char** argv) case 4 : ve5500(argc, argv); break; // Compatta documenti case 5 : ve5600(argc, argv); break; // recupero testate documenti case 6 : ve5700(argc, argv); break; // Cambiamento tipo documenti fp (TD01, ...) + case 7 : ve5800(argc, argv); break; // Raggruppamento documenti default: ve5100(argc, argv); break; // Cancella documenti } return 0; diff --git a/src/ve/ve5.h b/src/ve/ve5.h index 133e5ed28..fa9fd88ba 100755 --- a/src/ve/ve5.h +++ b/src/ve/ve5.h @@ -8,6 +8,7 @@ int ve5400(int argc, char* argv[]); int ve5500(int argc, char* argv[]); int ve5600(int argc, char* argv[]); int ve5700(int argc, char* argv[]); +int ve5800(int argc, char* argv[]); #endif diff --git a/src/ve/ve5800.cpp b/src/ve/ve5800.cpp new file mode 100644 index 000000000..91fbefa5d --- /dev/null +++ b/src/ve/ve5800.cpp @@ -0,0 +1,109 @@ +#include "ve5.h" +#include "velib.h" +#include "ve5800a.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "velib04.h" +#include "../mg/mglib.h" + +/////////////////////////////////////////////////////////// +// Maschera principale +/////////////////////////////////////////////////////////// + +class TRaggruppamento_documenti_mask : public TAutomask +{ +protected: + virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); + +public: + TRaggruppamento_documenti_mask() : TAutomask("ve5800a") {} + virtual ~TRaggruppamento_documenti_mask() {} +}; + +bool TRaggruppamento_documenti_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) +{ + switch (o.dlg()) + { + case DLG_SAVEREC: + if (e == fe_button) + stop_run(K_AUTO_ENTER); + break; + default: + break; + } + return TRUE; +} + +/////////////////////////////////////////////////////////// +// Applicazione principale +/////////////////////////////////////////////////////////// + +class TRaggruppamento_documenti : public TSkeleton_application +{ +public: + void raggruppa_doc(const TMask & m); + virtual void main_loop(); +}; + +void TRaggruppamento_documenti::raggruppa_doc(const TMask & m) +{ + TRaggruppamento_documento ragg(m.get(F_CODICE_ELAB)); + TLista_documenti doc_ingresso; + TLista_documenti doc_uscita; + TToken_string tipi_iniziali; + TToken_string stati_iniziali; + TString numerazione_iniziale = ragg.codice_numerazione_iniziale(); + const int anno = m.get_int(F_ANNO); + const long dal_ndoc = m.get_long(F_FRNDOC); + const long al_ndoc = m.get_long(F_TONDOC); + + ragg.tipi_stati_iniziali(tipi_iniziali, stati_iniziali); + + if (doc_ingresso.read('D', ' ', 0L, anno, tipi_iniziali, stati_iniziali, + nulldate, nulldate, numerazione_iniziale, dal_ndoc, al_ndoc) > 0) + { + if (ragg.elabora(doc_ingresso, doc_uscita, today)) + { + if (doc_uscita.write(true) == NOERR) + { + if (doc_ingresso.rewrite() != NOERR) + fatal_box(TR("Errore nella scrittura documenti d'ingresso")); + } + else + fatal_box(TR("Errore nella scrittura documenti di destinazione")); + } + + } +} + +void TRaggruppamento_documenti::main_loop() +{ + open_files(LF_TAB, LF_TABCOM, LF_DOC, LF_RIGHEDOC, LF_MOVMAG, NULL); + open_files(LF_ANAMAG, LF_CLIFO, LF_CFVEN, LF_OCCAS, LF_RMOVMAG, NULL); + + TRaggruppamento_documenti_mask m; + + m.set(F_CODDITTA, prefix().get_codditta(), true); + while (m.run()==K_ENTER) + raggruppa_doc(m); +} + +int ve5800(int argc, char** argv) +{ + TRaggruppamento_documenti app; + + app.run(argc, argv, TR("Raggruppamento documenti")); + return 0; +} diff --git a/src/ve/ve5800a.h b/src/ve/ve5800a.h new file mode 100644 index 000000000..ef29bc813 --- /dev/null +++ b/src/ve/ve5800a.h @@ -0,0 +1,8 @@ +#define F_CODICE_ELAB 101 +#define F_DESC_ELAB 102 +#define F_ANNO 103 +#define F_TIPI_DOC 104 +#define F_FRNDOC 105 +#define F_TONDOC 106 +#define F_CODDITTA 107 +#define F_RAGSOCDITTA 108 \ No newline at end of file diff --git a/src/ve/ve5800a.uml b/src/ve/ve5800a.uml new file mode 100644 index 000000000..6ae6b836d --- /dev/null +++ b/src/ve/ve5800a.uml @@ -0,0 +1,101 @@ +#include "ve5800a.h" + +TOOLBAR "topbar" 0 0 0 2 +#include +ENDPAGE + +PAGE "Copia Documenti" 0 0 0 0 + +GROUPBOX DLG_NULL 78 3 +BEGIN + PROMPT 1 1 "@bDitta" +END + +NUMBER F_CODDITTA 5 +BEGIN + PROMPT 2 2 "Codice " + FLAGS "FD" + USE LF_NDITTE + CHECKTYPE NORMAL + INPUT CODDITTA F_CODDITTA + OUTPUT F_RAGSOCDITTA RAGSOC +END + +STRING F_RAGSOCDITTA 50 +BEGIN + PROMPT 17 2 "Ragione " + FLAGS "D" +END + +GROUPBOX DLG_NULL 76 5 +BEGIN + PROMPT 1 4 "@bDocumenti sorgente" +END + +STRING F_CODICE_ELAB 8 +BEGIN + PROMPT 2 5 "Codice " + FLAG "U" + USE %ELD SELECT I0 == 8 + INPUT CODTAB F_CODICE_ELAB + DISPLAY "Codice" CODTAB + DISPLAY "Descrizione@55" S0 + OUTPUT F_CODICE_ELAB CODTAB + OUTPUT F_DESC_ELAB S0 + CHECKTYPE REQUIRED + WARNING "E' necessario specificare il codice elaborazione" +END + +STRING F_DESC_ELAB 50 +BEGIN + PROMPT 20 5 "" + USE %ELD KEY 2 SELECT I0 == 8 + INPUT S0 F_DESC_ELAB + DISPLAY "Descrizione@55" S0 + DISPLAY "Codice" CODTAB + COPY OUTPUT F_CODICE_ELAB +END + +NUMBER F_ANNO 4 +BEGIN + PROMPT 2 6 "Anno " + FLAGS "AU" + CHECKTYPE REQUIRED +END + +NUMBER F_FRNDOC 6 +BEGIN + PROMPT 2 7 "Da numero " + USE LF_DOC + JOIN LF_CLIFO INTO TIPOCF==TIPOCF CODCF==CODCF + INPUT ANNO F_ANNO SELECT + INPUT CODNUM "F01" + INPUT PROVV "D" + INPUT NDOC F_FRNDOC + DISPLAY "Num." CODNUM + DISPLAY "Anno" ANNO + DISPLAY "Provv" PROVV + DISPLAY "Tipo" TIPODOC + DISPLAY "Numero@7" NDOC + DISPLAY "Data@10" DATADOC + DISPLAY "C/F" TIPOCF + DISPLAY "Codice" CODCF + DISPLAY "Ragione Sociale@50" LF_CLIFO->RAGSOC + OUTPUT F_FRNDOC NDOC +END + +NUMBER F_TONDOC 6 +BEGIN + PROMPT 26 7 "A numero " + COPY USE F_FRNDOC + INPUT ANNO F_ANNO SELECT + INPUT CODNUM "F01" + INPUT PROVV "D" + INPUT NDOC F_TONDOC + COPY DISPLAY F_FRNDOC + OUTPUT F_TONDOC NDOC +END + +ENDPAGE + +ENDMASK diff --git a/src/ve/velib04.cpp b/src/ve/velib04.cpp index 7b203b625..68f3da63f 100755 --- a/src/ve/velib04.cpp +++ b/src/ve/velib04.cpp @@ -55,22 +55,25 @@ int TLista_documenti::read(char provv, char tipocf, long clifo, int anno, const char* codnum, long dn, long an) { CHECK(provv == 'D' || provv == 'P', "Provvisorio o Definitivo?"); - CHECK(tipocf == 'C' || tipocf == 'F', "Il tipo deve essere Cliente o Fornitore"); - CHECKD(clifo > 0L, "Codice cliente non valido", clifo); + CHECK(tipocf == 'C' || tipocf == 'F' || tipocf == ' ', "Il tipo deve essere Cliente o Fornitore o Entrambi"); + CHECKD(tipocf == ' ' || clifo > 0L, "Codice cliente non valido", clifo); CHECKD(anno > 2000, "Anno non valido: ", anno); CHECK(!tipidoc.empty_items(), "Lista dei tipi documento vuota"); CHECK(!statidoc.empty_items(), "Lista degli stati documento vuota"); - + + const int key = (tipocf == ' ' && clifo == 0L) ? 1:2; TRelation doc(LF_DOC); TRectype start(LF_DOC), stop(LF_DOC); int anno_start, anno_stop; - start.put(DOC_TIPOCF, tipocf); - stop.put(DOC_TIPOCF, tipocf); - - start.put(DOC_CODCF, clifo); - stop.put(DOC_CODCF, clifo); - + if (key == 2) + { + start.put(DOC_TIPOCF, tipocf); + stop.put(DOC_TIPOCF, tipocf); + + start.put(DOC_CODCF, clifo); + stop.put(DOC_CODCF, clifo); + } start.put(DOC_PROVV, provv); stop.put(DOC_PROVV, provv); @@ -132,7 +135,7 @@ int TLista_documenti::read(char provv, char tipocf, long clifo, int anno, filter << DOC_CODNUM << "=\"" << codnum << '"'; } - TCursor cur(&doc, filter, 2, &start, &stop); + TCursor cur(&doc, filter, key, &start, &stop); const TRectype& head = cur.curr(); _documenti.destroy(); @@ -823,3 +826,81 @@ bool TCopia_documento::elabora(TLista_documenti& doc_in, TLista_documenti& doc_o return true; } + +/////////////////////////////////////////////////////////// +// TRaggruppamento_documento +/////////////////////////////////////////////////////////// + +TRaggruppamento_documento::TRaggruppamento_documento(const char* cod) + : TElaborazione(cod) +{ } + +bool TRaggruppamento_documento::raggruppabile(const TRiga_documento & rin, const TRiga_documento & rout) const +{ + bool ok = true; + TToken_string campi= RDOC_TIPORIGA "|" RDOC_CODIVA; + TString campo; + + for (const char* c = campi.get(0); c && ok; c = campi.get()) + { + campo = rin.get(c); + ok &= campo == rout.get(c); + } + return ok; +} + +bool TRaggruppamento_documento::elabora(TLista_documenti& doc_in, TLista_documenti& doc_out, + const TDate& data_elab, bool interattivo) +{ + pre_process_input(doc_in); + const TString4 codnum = codice_numerazione_finale(); + + for (int d = 0; d < doc_in.items(); d++) + { + TDocumento& doc_src = doc_in[d]; + + doc_out.add(new TDocumento('D', doc_src.get_int(DOC_ANNO), codnum, doc_src.get_long(DOC_NDOC))); + + TDocumento& doc_dest = doc_out[d]; + + TDocumento::copy_data(doc_dest,doc_src); + + if (interattivo) + doc_dest.put(DOC_TIPODOC, doc_src.get(DOC_TIPODOC) ); + + if (doc_dest.physical_rows() > 0) + doc_dest.destroy_rows(); + + FOR_EACH_PHYSICAL_RDOC(doc_src, nr_input, rin) // ... cerca una riga compatibile + { + bool found = false; + + if (!rin->sola_descrizione()) + { + FOR_EACH_PHYSICAL_RDOC(doc_dest, nr_output, rout) + { + if (raggruppabile(*rin, *rout)) + { + rout->add(RDOC_PREZZO,rin->get_real(RDOC_PREZZO)); + found = true; + break; + } + } + } + if (!found) + { + TRiga_documento & row = doc_dest.new_row(); // ... crea una riga nuova e + + TDocumento::copy_data(row, *rin); + } + } + + const TString & stato = stato_finale(); + + doc_dest.put(DOC_STATO, stato); + doc_src.put(DOC_STATO, stato_finale_doc_iniziale()); + } + post_process_input(doc_in); + post_process(doc_out, doc_in); + return true; +} diff --git a/src/ve/velib04.h b/src/ve/velib04.h index 540747e82..616d93928 100755 --- a/src/ve/velib04.h +++ b/src/ve/velib04.h @@ -139,7 +139,7 @@ public: enum TTipo_elaborazione { _esterna, _consegna_ordini, _fatturazione_bolle, _contabilizzazione, _copia_documento, _generazione_effetti, _consuntivazione_produzione, - _contabilizzazione_analitica }; + _contabilizzazione_analitica, _raggruppamento_documento }; class TParametri_elaborazione : public TObject // velib04 { @@ -665,4 +665,16 @@ public: virtual ~TContabilizzazione_analitica(); }; +class TRaggruppamento_documento : public TElaborazione // velib04 +{ +public: + bool raggruppabile(const TRiga_documento & rin, const TRiga_documento & rout) const; + virtual bool elabora(TLista_documenti& doc_in, TLista_documenti& doc_out, + const TDate& data_elab, bool interattivo = false); + + TRaggruppamento_documento(const char* cod); + TRaggruppamento_documento(const TRectype& rec) : TElaborazione(rec) { } + virtual ~TRaggruppamento_documento() { } +}; + #endif diff --git a/src/ve/velib06.cpp b/src/ve/velib06.cpp index 1ee7960f3..3f50c0a86 100755 --- a/src/ve/velib06.cpp +++ b/src/ve/velib06.cpp @@ -2477,6 +2477,9 @@ void TLista_elaborazioni::read() case _contabilizzazione_analitica : el = new TContabilizzazione_analitica(eld.curr()); break; + case _raggruppamento_documento: + el = new TRaggruppamento_documento(eld.curr()); + break; default : break; } diff --git a/src/ve/vemenu.men b/src/ve/vemenu.men index 50d296c5b..c041ef505 100755 --- a/src/ve/vemenu.men +++ b/src/ve/vemenu.men @@ -20,6 +20,7 @@ Item_01 = "Fatturazione bolle", "ve6 -2", "F" Item_02 = "Contabilizzazione fatture", "ve6 -1", "F" Item_03 = "Generazione effetti", "ve6 -3", "F" Item_04 = "Contabilizzazione analitica", "ve6 -8", "F" +Item_05 = "Raggruppamento documenti per riga", "ve5 -7", "F" [VEMENU_051] Caption = "Servizi" diff --git a/src/ve/vetbeld.uml b/src/ve/vetbeld.uml index c5dcf0864..f5f3e885f 100755 --- a/src/ve/vetbeld.uml +++ b/src/ve/vetbeld.uml @@ -49,21 +49,23 @@ LIST F_TIPO 50 BEGIN PROMPT 2 3 "Tipo " ITEM " |Esterna" - MESSAGE HIDE,1@|HIDE,2@|HIDE,3@|HIDE,4@|HIDE,5@|SHOW,9@|SHOW,F_KILLDESC + MESSAGE SHOW,10@|HIDE,1@|HIDE,2@|HIDE,3@|HIDE,4@|HIDE,5@|SHOW,9@|SHOW,F_KILLDESC ITEM "1|Consegna Ordini" - MESSAGE SHOW,1@|HIDE,2@|HIDE,3@|HIDE,4@|HIDE,5@|HIDE,9@|SHOW,F_KILLDESC + MESSAGE SHOW,10@|SHOW,1@|HIDE,2@|HIDE,3@|HIDE,4@|HIDE,5@|HIDE,9@|SHOW,F_KILLDESC ITEM "2|Fatturazione bolle" - MESSAGE HIDE,1@|SHOW,2@|HIDE,3@|HIDE,4@|HIDE,5@|HIDE,9@|SHOW,F_KILLDESC + MESSAGE SHOW,10@|HIDE,1@|SHOW,2@|HIDE,3@|HIDE,4@|HIDE,5@|HIDE,9@|SHOW,F_KILLDESC ITEM "3|Trasferimento a contabilità" - MESSAGE HIDE,1@|HIDE,2@|SHOW,3@|HIDE,4@|HIDE,5@|SHOW,9@|HIDE,F_KILLDESC + MESSAGE SHOW,10@|HIDE,1@|HIDE,2@|SHOW,3@|HIDE,4@|HIDE,5@|SHOW,9@|HIDE,F_KILLDESC ITEM "4|Copia documento" - MESSAGE HIDE,1@|HIDE,2@|HIDE,3@|SHOW,4@|HIDE,5@|HIDE,9@|HIDE,F_KILLDESC + MESSAGE SHOW,10@|HIDE,1@|HIDE,2@|HIDE,3@|SHOW,4@|HIDE,5@|HIDE,9@|HIDE,F_KILLDESC ITEM "5|Generazione effetti" - MESSAGE HIDE,1@|HIDE,2@|HIDE,3@|HIDE,4@|SHOW,5@|HIDE,9@|HIDE,F_KILLDESC + MESSAGE SHOW,10@|HIDE,1@|HIDE,2@|HIDE,3@|HIDE,4@|SHOW,5@|HIDE,9@|HIDE,F_KILLDESC ITEM "6|Consuntivazione produzione" - MESSAGE SHOW,1@|HIDE,2@|HIDE,3@|HIDE,4@|HIDE,5@|HIDE,9@|SHOW,F_KILLDESC + MESSAGE SHOW,10@|SHOW,1@|HIDE,2@|HIDE,3@|HIDE,4@|HIDE,5@|HIDE,9@|SHOW,F_KILLDESC ITEM "7|Trasferimento a contabilità analitica" - MESSAGE HIDE,1@|HIDE,2@|SHOW,3@|HIDE,4@|HIDE,5@|SHOW,9@|HIDE,F_KILLDESC + MESSAGE SHOW,10@|HIDE,1@|HIDE,2@|SHOW,3@|HIDE,4@|HIDE,5@|SHOW,9@|HIDE,F_KILLDESC + ITEM "8|Raggruppamento documento" + MESSAGE HIDE,10@|HIDE,1@|HIDE,2@|HIDE,3@|SHOW,4@|HIDE,5@|HIDE,9@|HIDE,F_KILLDESC FIELD I0 END @@ -581,96 +583,112 @@ GROUPBOX DLG_NULL 78 8 BEGIN PROMPT 1 1 "@bCondizioni per raggruppamento documenti" FLAG "R" + GROUP 10 END BOOLEAN F_CAMBIO BEGIN PROMPT 2 2 "Cambio" FIELD S1[1,1] + GROUP 10 END BOOLEAN F_SCONTO BEGIN PROMPT 2 3 "Sconto" FIELD S1[2,2] + GROUP 10 END BOOLEAN F_TIPODOC BEGIN PROMP 2 4 "Tipo documento" FIELD S1[3,3] + GROUP 10 END BOOLEAN F_CODNUM BEGIN PROMP 2 5 "Codice numerazione" FIELD S1[4,4] + GROUP 10 END BOOLEAN F_SPEDIZIONE BEGIN PROMPT 2 6 "Modalità di spedizione" FIELD S1[9,9] + GROUP 10 END BOOLEAN F_PORTO BEGIN PROMPT 2 7 "Porto" FIELD S1[10,10] + GROUP 10 END BOOLEAN F_CONDPAG BEGIN PROMP 28 2 "Condizione di pagamento" FIELD S1[5,5] + GROUP 10 END BOOLEAN F_BANCA BEGIN PROMPT 28 3 "Banca di appoggio" FIELD S1[6,6] + GROUP 10 END BOOLEAN F_LISTINO BEGIN PROMPT 28 4 "Listino" FIELD S1[7,7] + GROUP 10 END BOOLEAN F_AGENTE BEGIN PROMP 28 5 "Agente" FIELD S1[8,8] + GROUP 10 END BOOLEAN F_TRASPORTO BEGIN PROMPT 28 6 "Causale di trasporto" FIELD S1[11,11] + GROUP 10 END BOOLEAN F_VETTORI BEGIN PROMPT 28 7 "Vettori" FIELD S1[12,12] + GROUP 10 END BOOLEAN F_DESTINAZIONE BEGIN PROMPT 56 2 "Destinazione" FIELD S1[13,13] + GROUP 10 END BOOLEAN F_COMMESSA BEGIN PROMPT 56 3 "Commessa" FIELD S1[14,14] + GROUP 10 END GROUPBOX DLG_NULL 78 5 BEGIN PROMPT 1 9 "@bModalità di raggruppamento delle righe" FLAG "R" + GROUP 10 END BOOLEAN F_SOMMA_RIGHE @@ -679,24 +697,28 @@ BEGIN MESSAGE FALSE ENABLE,F_RIFERIMENTI_IN_TESTA|ENABLE,F_GROUP_BY_REF MESSAGE TRUE DISABLE,F_RIFERIMENTI_IN_TESTA|"X",F_RIFERIMENTI_IN_TESTA|CLEAR,F_GROUP_BY_REF FIELD B0 + GROUP 10 END BOOLEAN F_MAGAZZINO BEGIN PROMPT 2 11 "Magazzino" FIELD S1[41,41] + GROUP 10 END BOOLEAN F_IVA BEGIN PROMPT 28 11 "Codice IVA" FIELD S1[42,42] + GROUP 10 END BOOLEAN F_PREZZO BEGIN PROMPT 2 12 "Prezzo e Sconto" FIELD S1[43,43] + GROUP 10 END BOOLEAN F_PREZZO_DA_ORDINE @@ -704,7 +726,7 @@ BEGIN PROMPT 28 12 "Ricava prezzo e sconto da ordine" FIELD B5 FLAGS "H" - GROUP 2 + GROUP 2 10 END BOOLEAN F_AGGIORNA_PREZZO @@ -712,42 +734,48 @@ BEGIN PROMPT 28 12 "Aggiorna prezzi" FIELD B5 FLAGS "H" - GROUP 1 + GROUP 1 10 END GROUPBOX DLG_NULL 78 6 BEGIN PROMPT 1 14 "@bGestione descrizioni" + GROUP 10 END BOOLEAN F_RIFERIMENTI BEGIN PROMPT 2 15 "Gestione riferimenti" FIELD B1 + GROUP 10 END BOOLEAN F_RIFERIMENTI_IN_TESTA BEGIN PROMPT 42 15 "Tutti i riferimenti in testa" FIELD B2 + GROUP 10 END BOOLEAN F_IGNORA_DESCRIZIONI BEGIN PROMPT 2 16 "Ignora righe con solo descrizione" FIELD B3 + GROUP 10 END BOOLEAN F_PACKRIF BEGIN PROMPT 42 16 "Rif.sintetici" FIELD B15 + GROUP 10 END BOOLEAN F_USA_DOCRIF BEGIN PROMPT 2 17 "Usa documento di riferimento in descrizione rif." FIELD B8 + GROUP 10 END LISTBOX F_SPALMA 1 2 @@ -756,7 +784,7 @@ BEGIN ITEM " |No" ITEM "1|Si" FIELD I2 - GROUP 3 9 + GROUP 3 9 10 END LISTBOX F_GROUP_BY_REF 1 2 @@ -765,7 +793,7 @@ BEGIN ITEM " |Si" ITEM "1|No" FIELD I3 - GROUP 1 + GROUP 1 10 END @@ -779,6 +807,7 @@ BEGIN OUTPUT F_RIF_DOCIN CODTAB CHECKTYPE NORMAL FIELD S11 + GROUP 10 END NUMBER F_COLONNE_CO 1 @@ -790,7 +819,7 @@ BEGIN ITEM "2|Residuo|Da evadere" INPUT F_COLONNE_CO OUTPUT F_COLONNE_CO - GROUP 1 + GROUP 1 10 FIELD I1 END