diff --git a/ci/ci1300.cpp b/ci/ci1300.cpp index 75a37c5ae..2829bec47 100755 --- a/ci/ci1300.cpp +++ b/ci/ci1300.cpp @@ -11,7 +11,7 @@ #include "../ca/commesse.h" #include "rilore.h" -#include "cilib.h" +#include "ci1350.h" #include "ci1300a.h" /////////////////////////////////////////////////////////// @@ -52,11 +52,6 @@ protected: virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); void format_report(TReport& rep) const; - //bool is_ferial_day(const TDate& data) const; - //long calcola_giorni_lavorativi(const TDate& dataini, const TDate& datafine) const; - long calcola_giorni_lavorativi_cms(const TDate& ini_cms, const TDate& fine_cms, - const TDate& dataini, const TDate& datafine, - TDate& inizio_lav, TDate& fine_lav) const; void elabora_risorsa(const TString& curr_risorsa, TReport& rep) const; public: @@ -75,37 +70,8 @@ bool TRil_ore_ris_mask::on_field_event(TOperable_field& o, TField_event e, long return true; } -long TRil_ore_ris_mask::calcola_giorni_lavorativi_cms(const TDate& ini_cms, const TDate& fine_cms, - const TDate& dataini, const TDate& datafine, - TDate& inizio_lav, TDate& fine_lav) const -{ - //date del mese - const int anno = get_int(F_ANNO); - const int mese = get_int(F_MESE); - TDate ini_mese(1, mese, anno); - TDate fine_mese = ini_mese; - fine_mese.set_end_month(); - - //se la commessa non "interseca" il mese selezionato -> finisce qui - if (fine_cms < ini_mese || ini_cms > fine_mese) - return 0; - //se le date limite lavorative non "intersecano" il mese selezionato -> finisce qui - if (datafine < ini_mese || dataini > fine_mese) - return 0; - - //se è arrivato fin qui -> c'è qualcosa da considerare - //vanno prese la massima data inizio e la minima data fine - inizio_lav = fnc_max(ini_mese, ini_cms); - fine_lav = fnc_min(fine_mese, fine_cms); - - //e qui si parrà l'ultima stilla di nobilitate! deve eliminare i giorni festivi dal mucchio! - return ci_calcola_giorni_lavorativi(inizio_lav, fine_lav); -} - void TRil_ore_ris_mask::elabora_risorsa(const TString& curr_risorsa, TReport& rep) const { - //memorizza la risorsa in esame perchè gli serve alla fine del metodo - const TString8 risorsa = curr_risorsa; //creare un assoc_array con chiave TToken_string cms-sede-fase(1) o sede-cms-fase(2) in base ai parametri.. //..indicati sulla maschera const int tipo_ordinamento = get_int(F_ORDINAMENTO); @@ -115,9 +81,9 @@ void TRil_ore_ris_mask::elabora_risorsa(const TString& curr_risorsa, TReport& re const TVariant tiporisorsa = get(F_RISOATT); - //query sul file delle ore in chiave 3: TIPO+TIPORA+CODICE+ANNO+MESE+... + //query sul file delle ore in chiave 3: TIPO+TIPORA+CODICE+.....frega niente altro TString query; - query << "USE RILORE KEY 5"; + query << "USE RILORE KEY 3"; query << "\nFROM TIPO=#TIPO TIPORA=#TPRA CODICE=#CODICE"; query << "\nTO TIPO=#TIPO TIPORA=#TPRA CODICE=#CODICE"; @@ -163,7 +129,9 @@ void TRil_ore_ris_mask::elabora_risorsa(const TString& curr_risorsa, TReport& re //metodo semidivino per calcolare, dati l'anno ed il il mese selezionati, la commessa corrente, le date inizio e fine,.. //..quanti sono i giorni di lavoro lavorativi per suddividere la quantità di ore TDate ini_lav, fine_lav; - const long giorni_lavorativi_cms = calcola_giorni_lavorativi_cms(ini_cms, fine_cms, dataini, datafine, ini_lav, fine_lav); + const int anno = get_int(F_ANNO); + const int mese = get_int(F_MESE); + const long giorni_lavorativi_cms = ci_calcola_giorni_lavorativi_cms(anno, mese, ini_cms, fine_cms, dataini, datafine, ini_lav, fine_lav); //adesso deve riproporzionare il monte ore sul record sul mese selezionato (fa tutto il lavoro se ci sono giorni.. //..lavorativi sulla commessa in questione) @@ -227,59 +195,14 @@ void TRil_ore_ris_mask::elabora_risorsa(const TString& curr_risorsa, TReport& re //..csv_recordset e poi sbatte quest'ultimo (ordinato) nel report TRil_ore_ris_recordset* righe_da_stampare = new TRil_ore_ris_recordset; - FOR_EACH_ASSOC_OBJECT(righe, obj, key, itm) - { - TToken_string& record_ass = (TToken_string&)*itm; - real totale_c = record_ass.get(32); - totale_c.round(1); - TGeneric_distrib esso(totale_c, 1); - - for (int j = 1; j <= 31; j++) - { - real ore = record_ass.get(j); - esso.add(ore); - } - - //chiave della riga (Cms-CdC-Fase o CdC-Cms-Fase) - TToken_string linea; - TToken_string chiave = key; - FOR_EACH_TOKEN(chiave, tok) - { - if (*tok > ' ') - { - if (!linea.empty()) - linea << " -- "; - linea << tok; - } - } - - // Totale preventivo - real totale_p = record_ass.get(0); - totale_p.round(1); - linea.add(totale_p.string()); - - // Totale consuntivo - for (int k = 1; k <= 31; k++) - { - const real ore_giorno = esso.get(); - const char* str_ore = ore_giorno.string(); - linea.add(str_ore, k+1); - } - - linea.add(totale_c.string()); - - //aggiunge la riga tokenstringata al csv_recordset - righe_da_stampare->new_rec(linea); - } - //ordina il recordset per chiave - righe_da_stampare->sort(); + ci_fill_recset_from_ass(righe, *righe_da_stampare); #ifdef DBG righe_da_stampare->save_as_text("C:/temp/cazzone.txt"); #endif //deve settare almeno un campo manualmente perche' funzioni la mask2report - righe_da_stampare->set_var("#CODRIS", TVariant(risorsa), true); + righe_da_stampare->set_var("#CODRIS", TVariant(curr_risorsa), true); //setta il recordset ordinato al report rep.set_recordset(righe_da_stampare); @@ -363,7 +286,7 @@ void TRil_ore_ris_mask::elabora() const if (!pi.addstatus(1)) break; - const TString& curr_risorsa = recset_ris_att.cursor()->curr().get("CODTAB"); + const TString80 curr_risorsa = recset_ris_att.cursor()->curr().get("CODTAB"); elabora_risorsa(curr_risorsa, rep); diff --git a/ci/ci1300a.rep b/ci/ci1300a.rep index 2caa90c2b..72b88c0ea 100755 --- a/ci/ci1300a.rep +++ b/ci/ci1300a.rep @@ -1,6 +1,6 @@ - Rilevazione ore mensili per Risorsa + Rilevazione ore mensili per Risorsa - Attrezzatura
@@ -258,7 +258,7 @@
- + diff --git a/ci/ci1350.cpp b/ci/ci1350.cpp new file mode 100755 index 000000000..3b36bc2a2 --- /dev/null +++ b/ci/ci1350.cpp @@ -0,0 +1,102 @@ +#include "ci1350.h" + +/////////////////////////////////////////////////////////////////////////////////////// +// Metodi liberi per determinare giorni lavorativi e feriali (nati per ci1300 ci1400) +/////////////////////////////////////////////////////////////////////////////////////// + +bool ci_is_ferial_day(const TDate& data) +{ + return data.wday() < 6 && !data.is_holiday(); +} + + +long ci_calcola_giorni_lavorativi(const TDate& dataini, const TDate& datafine) +{ + long num_giorni_lav = datafine - dataini + 1; + //e qui si parrà l'ultima stilla di nobilitate! deve eliminare i giorni festivi dal mucchio! + if (num_giorni_lav > 1) + { + for (TDate data = dataini; data <= datafine; ++data) + { + if (!ci_is_ferial_day(data)) + num_giorni_lav--; + } + } + return num_giorni_lav; +} + + +long ci_calcola_giorni_lavorativi_cms(const int anno, const int mese, const TDate& ini_cms, const TDate& fine_cms, + const TDate& dataini, const TDate& datafine, TDate& inizio_lav, TDate& fine_lav) +{ + //date del mese + TDate ini_mese(1, mese, anno); + TDate fine_mese = ini_mese; + fine_mese.set_end_month(); + + //se la commessa non "interseca" il mese selezionato -> finisce qui + if (fine_cms < ini_mese || ini_cms > fine_mese) + return 0; + //se le date limite lavorative non "intersecano" il mese selezionato -> finisce qui + if (datafine < ini_mese || dataini > fine_mese) + return 0; + + //se è arrivato fin qui -> c'è qualcosa da considerare + //vanno prese la massima data inizio e la minima data fine + inizio_lav = fnc_max(ini_mese, ini_cms); + fine_lav = fnc_min(fine_mese, fine_cms); + + //e qui si parrà l'ultima stilla di nobilitate! deve eliminare i giorni festivi dal mucchio! + return ci_calcola_giorni_lavorativi(inizio_lav, fine_lav); +} + + +void ci_fill_recset_from_ass(TAssoc_array& ass, TCSV_recordset& recset) +{ + FOR_EACH_ASSOC_OBJECT(ass, obj, key, itm) + { + TToken_string& record_ass = (TToken_string&)*itm; + real totale_c = record_ass.get(32); + totale_c.round(1); + TGeneric_distrib esso(totale_c, 1); + + for (int j = 1; j <= 31; j++) + { + real ore = record_ass.get(j); + esso.add(ore); + } + + //chiave della riga (Cms-CdC-Fase o CdC-Cms-Fase) + TToken_string linea; + TToken_string chiave = key; + FOR_EACH_TOKEN(chiave, tok) + { + if (*tok > ' ') + { + if (!linea.empty()) + linea << " -- "; + linea << tok; + } + } + + // Totale preventivo + real totale_p = record_ass.get(0); + totale_p.round(1); + linea.add(totale_p.string()); + + // Totale consuntivo + for (int k = 1; k <= 31; k++) + { + const real ore_giorno = esso.get(); + const char* str_ore = ore_giorno.string(); + linea.add(str_ore, k+1); + } + + linea.add(totale_c.string()); + + //aggiunge la riga tokenstringata al csv_recordset + recset.new_rec(linea); + } + //ordina il recordset per chiave + recset.sort(); +} \ No newline at end of file diff --git a/ci/ci1350.h b/ci/ci1350.h new file mode 100755 index 000000000..a39c55a8f --- /dev/null +++ b/ci/ci1350.h @@ -0,0 +1,19 @@ +#ifndef __CI1350_H +#define __CI1350_H + +#include +#include +#include + +/////////////////////////////////////////////////////////////////////////////////////// +// Metodi liberi per determinare giorni lavorativi e feriali (nati per ci1300 ci1400) +/////////////////////////////////////////////////////////////////////////////////////// + +bool ci_is_ferial_day(const TDate& data); +long ci_calcola_giorni_lavorativi(const TDate& dataini, const TDate& datafine); +long ci_calcola_giorni_lavorativi_cms(const int anno, const int mese, const TDate& ini_cms, const TDate& fine_cms, + const TDate& dataini, const TDate& datafine, TDate& inizio_lav, TDate& fine_lav); + +void ci_fill_recset_from_ass(TAssoc_array& ass, TCSV_recordset& recset); + +#endif \ No newline at end of file diff --git a/ci/ci1400.cpp b/ci/ci1400.cpp index 0284be492..eb6df11f8 100755 --- a/ci/ci1400.cpp +++ b/ci/ci1400.cpp @@ -10,7 +10,7 @@ #include "../ca/commesse.h" #include "rilore.h" -#include "cilib.h" +#include "ci1350.h" #include "ci1400a.h" /////////////////////////////////////////////////////////// @@ -53,8 +53,8 @@ protected: void format_report(TReport& rep) const; /*long calcola_giorni_lavorativi_cms(const TDate& ini_cms, const TDate& fine_cms, const TDate& dataini, const TDate& datafine, - TDate& inizio_lav, TDate& fine_lav) const; - void elabora_risorsa(const TString& curr_risorsa, TReport& rep) const;*/ + TDate& inizio_lav, TDate& fine_lav) const;*/ + bool elabora_commessa(const TString& curr_commessa, TReport& rep) const; public: void elabora() const; @@ -73,6 +73,149 @@ bool TRil_ore_cms_mask::on_field_event(TOperable_field& o, TField_event e, long } +bool TRil_ore_cms_mask::elabora_commessa(const TString& curr_commessa, TReport& rep) const +{ + const TVariant tipo_cms_cdc = get(F_CMSOCDC); + + //date del mese + const int anno = get_int(F_ANNO); + const int mese = get_int(F_MESE); + TDate ini_mese(1, mese, anno); + TDate fine_mese = ini_mese; + fine_mese.set_end_month(); + + TDate ini_cms, fine_cms; + + //creare un assoc_array con chiave TToken_string risorsa/attr. in base ai parametri.. + //..indicati sulla maschera + //il contenuto dell'assoc_array sarà: tot_Prev - 31 valori giornalieri Consuntivi - tot_Consuntivo + TAssoc_array righe; + + //query sul file delle ore in chiave 4 o 5, in base alla scelta di Cdc(4) o Cms(5): TIPO+CODCOSTO+... o TIPO+CODCMS+... + TString query; + + if (tipo_cms_cdc.as_string() == "C") + { + const TRectype& rec_cms = cache().get(LF_COMMESSE, curr_commessa); + const int durata_cms = ca_durata_commessa(rec_cms, ini_cms, fine_cms); + + //se la commessa non "interseca" il mese selezionato -> finisce qui + if (fine_cms < ini_mese || ini_cms > fine_mese) + return false; + + query << "USE RILORE KEY 5"; + query << "\nFROM TIPO=#TIPO CODCMS=#CODICE"; + query << "\nTO TIPO=#TIPO CODCMS=#CODICE"; + } + else + { + ini_cms = ini_mese; + fine_cms = fine_mese; + + query << "USE RILORE KEY 4"; + query << "\nFROM TIPO=#TIPO CODCOSTO=#CODICE"; + query << "\nTO TIPO=#TIPO CODCOSTO=#CODICE"; + } + + TISAM_recordset rilore_recset(query); + rilore_recset.set_var("#CODICE", curr_commessa); + + //un giro con le ore a 'P'reventivo, uno con quelle a 'C'onsuntivo + for (int i = 0; i < 2; i++) + { + const TVariant tipo = i == 0 ? "P" : "C"; + rilore_recset.set_var("#TIPO", tipo); + + const long rilore_recset_items = rilore_recset.items(); + + for (bool ok = rilore_recset.move_first(); ok; ok = rilore_recset.move_next()) + { + const TString16 risorsa = rilore_recset.get(RILORE_CODICE).as_string(); + const char tipo_ris_att = rilore_recset.get(RILORE_TIPORA).as_string()[0]; + + //date limite qta ore sul record del file LF_RILORE + TDate dataini = rilore_recset.get(RILORE_DADATA).as_date(); + TDate datafine = rilore_recset.get(RILORE_ADATA).as_date(); + + //adatta le date alla commessa se quest'ultima è contenuta nell'intervallo (può essere più breve.. + //..dell'intervallo selezionato, oppure sovrapporsi solo parzialmente) + if (fine_cms < datafine) + datafine = fine_cms; + if (ini_cms > dataini) + dataini = ini_cms; + //se la commessa fosse tutta nel futuro o nel passato -> lascia perdere + const long giorni_lavorativi = ci_calcola_giorni_lavorativi(dataini, datafine); + if (giorni_lavorativi <= 0) + continue; + + TDate ini_lav, fine_lav; + const long giorni_lavorativi_cms = ci_calcola_giorni_lavorativi_cms(anno, mese, ini_cms, fine_cms, dataini, datafine, ini_lav, fine_lav); + + if (giorni_lavorativi_cms > 0) + { + const real tot_ore = rilore_recset.get(RILORE_QTAORE).as_real(); + const real tot_ore_uso_risorsa_nel_mese_per_cms = tot_ore * giorni_lavorativi_cms / giorni_lavorativi; + + TToken_string key; + key << tipo_ris_att; + key.add(risorsa); + + TToken_string* record = (TToken_string*)righe.objptr(key); + if (record == NULL) + { + record = new TToken_string; + righe.add(key, record); + } + if (i == 0) //'P'reventivo (aggiorna solo il totale) + { + real prev = record->get(0); + prev += tot_ore_uso_risorsa_nel_mese_per_cms; + record->add(prev.string(), 0); + } + else //'C'onsuntivo (aggiorna tutte le caselle dei giorni lavorativi) + { + const real ore_al_giorno = tot_ore / giorni_lavorativi; + for (TDate data = ini_lav; data <= fine_lav; ++data) + { + if (giorni_lavorativi == 1 || ci_is_ferial_day(data)) + { + real prev = record->get(data.day()); + prev += ore_al_giorno; + record->add(prev.string(), data.day()); + real tot = record->get(32); + tot += ore_al_giorno; + record->add(tot.string(), 32); + } + } + } //if(i==0).. + + } //if (giorni_lavorativi_cms > 0).. + } //for (bool ok = rilore_recset.move_first()... + } //for (int i = 0; i < 2; i++).. + + //finita l'elaborazione che ha riempito l'assoc_array, asegna il medesimo ad un.. + //..csv_recordset e poi sbatte quest'ultimo (ordinato) nel report + TRil_ore_cms_recordset* righe_da_stampare = new TRil_ore_cms_recordset; + + ci_fill_recset_from_ass(righe, *righe_da_stampare); + +#ifdef DBG + righe_da_stampare->save_as_text("C:/temp/culone.txt"); +#endif + + //deve settare almeno un campo manualmente perche' funzioni la mask2report + righe_da_stampare->set_var("#CODCMSCDC", TVariant(curr_commessa), true); + + //setta il recordset ordinato al report + rep.set_recordset(righe_da_stampare); + + //tenta la mask2report per far apparire sul report i campi di selezione della maschera + rep.mask2report(*this); + + return true; +} + + void TRil_ore_cms_mask::format_report(TReport& rep) const { //maggico giro per formattare la testata del calendario di pagina nel report @@ -150,9 +293,9 @@ void TRil_ore_cms_mask::elabora() const if (!pi.addstatus(1)) break; - const TString& curr_commessa = recset_cms_cdc.cursor()->curr().get(code_name); + const TString80 curr_commessa = recset_cms_cdc.cursor()->curr().get(code_name); - //elabora_commessa(curr_commessa, rep); + elabora_commessa(curr_commessa, rep); book.add(rep); } diff --git a/ci/ci1400a.h b/ci/ci1400a.h index 5f4e90b73..d3c62b666 100755 --- a/ci/ci1400a.h +++ b/ci/ci1400a.h @@ -11,5 +11,3 @@ #define F_ANNO 211 #define F_MESE 212 -#define F_ORDINAMENTO 213 -#define F_SHOW_FASI 214 \ No newline at end of file diff --git a/ci/ci1400a.rep b/ci/ci1400a.rep new file mode 100755 index 000000000..394f2174a --- /dev/null +++ b/ci/ci1400a.rep @@ -0,0 +1,288 @@ + + + Rilevazione ore mensili per Commessa - CdC + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + MESSAGE RESET,F1 + + + #CMSOCDC + +
  • +
  • + + + + + + + #ANNO + + + + + + #MESE + +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • +
  • + + + + + #CMSOCDC + +
  • MESSAGE HIDE,H1.92|SHOW,H1.91
  • +
  • MESSAGE HIDE,H1.91|SHOW,H1.92
  • +
    +
    + + + + #SYSTEM.DATE + + + + + + #CODCMSCDC + + + + MESSAGE ISAMREAD,COMMESSE,CODCMS=#90,DESCRIZ + + + + MESSAGE ISAMREAD,CDC,CODCOSTO=#90,DESCRIZ + +
    +
    +
    + + + A + + + B + MESSAGE ADD,F1.100 + + + C + MESSAGE ADD,F1.101 + + + D + MESSAGE ADD,F1.102 + + + E + MESSAGE ADD,F1.103 + + + F + MESSAGE ADD,F1.104 + + + G + MESSAGE ADD,F1.105 + + + H + MESSAGE ADD,F1.106 + + + I + MESSAGE ADD,F1.107 + + + J + MESSAGE ADD,F1.108 + + + K + MESSAGE ADD,F1.109 + + + L + MESSAGE ADD,F1.110 + + + M + MESSAGE ADD,F1.111 + + + N + MESSAGE ADD,F1.112 + + + O + MESSAGE ADD,F1.113 + + + P + MESSAGE ADD,F1.114 + + + Q + MESSAGE ADD,F1.115 + + + R + MESSAGE ADD,F1.116 + + + S + MESSAGE ADD,F1.117 + + + T + MESSAGE ADD,F1.118 + + + U + MESSAGE ADD,F1.119 + + + V + MESSAGE ADD,F1.120 + + + W + MESSAGE ADD,F1.121 + + + X + MESSAGE ADD,F1.122 + + + Y + MESSAGE ADD,F1.123 + + + Z + MESSAGE ADD,F1.124 + + + AA + MESSAGE ADD,F1.125 + + + AB + MESSAGE ADD,F1.126 + + + AC + MESSAGE ADD,F1.127 + + + AD + MESSAGE ADD,F1.128 + + + AE + MESSAGE ADD,F1.129 + + + AF + MESSAGE ADD,F1.130 + + + AG + MESSAGE ADD,F1.131 + + + AH + MESSAGE ADD,F1.132 + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + \ No newline at end of file diff --git a/ci/ci1400a.uml b/ci/ci1400a.uml index c37dcdf4f..2879511c5 100755 --- a/ci/ci1400a.uml +++ b/ci/ci1400a.uml @@ -142,12 +142,6 @@ BEGIN FIELD #MESE END -BOOLEAN F_SHOW_FASI -BEGIN - PROMPT 2 9 "Dettaglio per fase" - FIELD #SHOW_FASI -END - ENDPAGE ENDMASK \ No newline at end of file diff --git a/ci/ci2200.cpp b/ci/ci2200.cpp index fe1b3e3b8..251b7d59f 100755 --- a/ci/ci2200.cpp +++ b/ci/ci2200.cpp @@ -648,7 +648,7 @@ void TRilevamento_cons_msk::update_prev() else { TString query; - query << "USE " << LF_RILORE << " KEY 5\n" + query << "USE " << LF_RILORE << " KEY 2\n" << "FROM " << RILORE_TIPO "=\"P\"" << " " << RILORE_ANNO << "=" << _anno << " " << RILORE_MESE << "=" << _mese << " " diff --git a/ci/cilib.cpp b/ci/cilib.cpp index 9fcc65ec1..147777c80 100755 --- a/ci/cilib.cpp +++ b/ci/cilib.cpp @@ -908,30 +908,3 @@ void TDoc_cache::discarding(const THash_object* obj) else doc.rewrite(); } - - - -/////////////////////////////////////////////////////////////////////////////////////// -// Metodi liberi per determinare giorni lavorativi e feriali (nati per ci1300 ci1400) -/////////////////////////////////////////////////////////////////////////////////////// - -bool ci_is_ferial_day(const TDate& data) -{ - return data.wday() < 6 && !data.is_holiday(); -} - - -long ci_calcola_giorni_lavorativi(const TDate& dataini, const TDate& datafine) -{ - long num_giorni_lav = datafine - dataini + 1; - //e qui si parrà l'ultima stilla di nobilitate! deve eliminare i giorni festivi dal mucchio! - if (num_giorni_lav > 1) - { - for (TDate data = dataini; data <= datafine; ++data) - { - if (!ci_is_ferial_day(data)) - num_giorni_lav--; - } - } - return num_giorni_lav; -} \ No newline at end of file diff --git a/ci/cilib.h b/ci/cilib.h index faf3b8069..7a5d99927 100755 --- a/ci/cilib.h +++ b/ci/cilib.h @@ -267,11 +267,4 @@ public: }; -/////////////////////////////////////////////////////////////////////////////////////// -// Metodi liberi per determinare giorni lavorativi e feriali (nati per ci1300 ci1400) -/////////////////////////////////////////////////////////////////////////////////////// - -bool ci_is_ferial_day(const TDate& data); -long ci_calcola_giorni_lavorativi(const TDate& dataini, const TDate& datafine); - #endif diff --git a/ci/f125.trr b/ci/f125.trr index 0ac44d22d..e17c36ff4 100755 --- a/ci/f125.trr +++ b/ci/f125.trr @@ -28,4 +28,4 @@ TIPO+ID| TIPO+ANNO+MESE+GIORNO+TIPORA+CODICE+TPORA+CODCOSTO+CODCMS+CODFASE|X TIPO+TIPORA+CODICE+ANNO+MESE+GIORNO+TPORA+CODCOSTO+CODCMS+CODFASE|X TIPO+CODCOSTO+CODCMS+CODFASE|X -TIPO+TIPORA+CODICE+TPORA+CODCOSTO+CODCMS+CODFASE+ANNO+MESE+GIORNO|X +TIPO+CODCMS+CODCOSTO+CODFASE|X