diff --git a/ca/ca0400.cpp b/ca/ca0400.cpp index a31f4b85d..fba83d09d 100755 --- a/ca/ca0400.cpp +++ b/ca/ca0400.cpp @@ -24,7 +24,6 @@ class TAnalisi_app : public TAnal_app { protected: virtual TAnal_msk* create_mask() const { return new TPiano_conti_anal_msk; } - virtual TConfig* create_config() const { return new TConfig(CONFIG_DITTA, "ca"); } virtual bool create(); }; diff --git a/ca/ca0800.cpp b/ca/ca0800.cpp new file mode 100755 index 000000000..59ff15224 --- /dev/null +++ b/ca/ca0800.cpp @@ -0,0 +1,425 @@ +#include +#include +#include + +#include "ca0800a.h" + +const char* get_key_fieldname(int logic, int k) +{ + const RecDes& rd = prefix().get_recdes(logic); + CHECKD(k > 0 && k <= rd.NKeys, "Invalid key on file ", logic); + const KeyDes& ky = rd.Ky[k-1]; + const int idx = (logic == LF_TAB || logic == LF_TABCOM) ? 1 : 0; + const int pos = ky.FieldSeq[idx] % MaxFields; + return rd.Fd[pos].Name; +} + +void append_select_clause(ostream& out, int level, const TArray& key1) +{ + const TFieldref& key = (const TFieldref&)key1[level-1]; + + TString str; + str << " SE STR("; + if (level > 1) + str << "(NUM(LEN(" << key.name() << "))>" << key.from() << ')'; // SE LEN(CODCONTO)>=4 + if (level < key1.items()) + { + if (level > 1) str << "&&"; + str << "(NUM(LEN(" << key.name() << "))<=" << key.to() << ')'; // SE LEN(CODCONTO)<=7 + } + str << ')'; + out << str << endl; +} + +void append_run_clause(ostream& out, int logicnum) +{ + const TRectype r(logicnum); + TString app; r.get_relapp(app); + if (app.not_empty()) + out << "AD RU " << app << endl; +} + +void create_browse1(TEdit_field& kfld, int level, TConfig& cfg, + int logic, + const char* key_var, short key_id, + const char* des_var, short des_id, + const TArray& key1, const TArray& key2) +{ + TFilename tmp; tmp.temp(); + ofstream out(tmp); + + out << "US " << logic << endl; + append_select_clause(out, level, key1); + append_run_clause(out, logic); + + for (int i = 1; i <= level; i++) + { + const TString& picture = cfg.get(key_var, NULL, i); + const TString& prompt = cfg.get(des_var, NULL, i); + const TFieldref& field = (const TFieldref&)key1[i-1]; + const int length = field.to() - field.from(); + out << "IN " << field << ' ' << (key_id+i-1) << endl; + out << "DI \"" << prompt; + if (length > prompt.len()) + out << '@' << length; + out << "\" " << field << endl; + out << "OU " << (key_id+i-1) << ' ' << field << endl; + out << "FI " << field << endl; + } + const TFieldref& field = (const TFieldref&)key2[0]; + out << "DI \"Descrizione@50\" " << field << endl; + out << "OU " << (des_id+level-1) << ' ' << field << endl; + out << "CH RE" << endl; + out << "EN" << endl; + out.close(); + + TScanner scan(tmp); + while (scan.pop() != "EN") + kfld.parse_item(scan); + + xvt_fsys_removefile(tmp); +} + +void create_browse2(TEdit_field& kfld, int level, TConfig& cfg, + int logic, + const char* key_var, short key_id, + const char* des_var, short des_id, + const TArray& key1, const TArray& key2) +{ + const TFieldref& field = (const TFieldref&)key2[0]; + TString str2; str2 << field; + + TFilename tmp; tmp.temp(); + ofstream out(tmp); + out << "US " << logic << " KE 2"; + append_select_clause(out, level, key1); + append_run_clause(out, logic); + + out << "DI \"Descrizione@50\" " << str2 << endl; + out << "IN " << str2 << ' ' << kfld.dlg() << endl; + out << "OU " << kfld.dlg() << ' ' << str2 << endl; + + int from = 1, to = 1; + for (int i = 1; i <= level; i++) + { + const TString& picture = cfg.get(key_var, NULL, i); + const TString& prompt = cfg.get(des_var, NULL, i); + const TFieldref& field = (const TFieldref&)key1[i-1]; + const int length = field.to() - field.from(); + out << "DI \"" << prompt; + if (length > prompt.len()) + out << '@' << length; + out << "\" " << field << endl; + out << "OU " << (key_id+i-1) << ' ' << field << endl; + from = to+1; + } + out << "CH NO" << endl; + out << "EN" << endl; + out.close(); + + TScanner scan(tmp); + while (scan.pop() != "EN") + kfld.parse_item(scan); + + xvt_fsys_removefile(tmp); +} + + +int create_fields(TMask& msk, int logicnum, int x, int y, + const char* key_var, short key_id, + const char* des_var, short des_id) +{ + TConfig cfg(CONFIG_DITTA, "ca"); + + TArray key1, key2; + + int maxkeylen = 0, maxdeslen = 0; + int level; + int from = 1, to = 1; + for (level = 1; ; level++) + { + const TString& prompt = cfg.get(des_var, NULL, level); + if (prompt.blank()) + break; + const TString& picture = cfg.get(key_var, NULL, level); + const int keylen = picture.len(); + const int deslen = prompt.len(); + if (keylen > maxkeylen) maxkeylen = keylen; + if (deslen > maxdeslen) maxdeslen = deslen; + + to = from+keylen-1; + + TString80 str; str = get_key_fieldname(logicnum, 1); + str << '[' << from << ',' << to << ']'; + key1.add(new TFieldref(str, logicnum)); + from = to+1; + } + key2.add(new TFieldref(get_key_fieldname(logicnum, 2), logicnum)); + + maxdeslen++; + const int tab0 = x; + const int tab1 = tab0 + maxdeslen + maxkeylen + 4; + + for (int i = 1; i < level; i++) + { + const short kid = key_id+i-1; + + const TString& picture = cfg.get(key_var, NULL, i); + TString80 prompt = cfg.get(des_var, NULL, i); + prompt.left_just(maxdeslen); + TEdit_field& kfld = msk.add_string(kid, 0, prompt, tab0, y+i-1, picture.len(), "BU"); + create_browse1(kfld, i, cfg, logicnum, key_var, key_id, des_var, des_id, key1, key2); + kfld.set_group(2); + + const short did = des_id+i-1; + TEdit_field& dfld = msk.add_string(did, 0, "", tab1, y+i-1, 50, "B", 72+tab0-tab1); + create_browse2(dfld, i, cfg, logicnum, key_var, key_id, des_var, des_id, key1, key2); + dfld.set_group(2); + } + + return level; +} + +/////////////////////////////////////////////////////////// +// TRiparti_msk +/////////////////////////////////////////////////////////// + +class TRiparti_msk : public TAutomask +{ +protected: + virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); + void create_sheet(); + +public: + TRiparti_msk(); +}; + +bool TRiparti_msk::on_field_event(TOperable_field& o, TField_event e, long jolly) +{ + switch (o.dlg()) + { + case F_TIPORIP: + if (e == fe_init || e == fe_modify) + { + TSheet_field& sf = sfield(F_SHEET); + TMask& sm = sf.sheet_mask(); + const int t = atoi(o.get()); + sm.show(101, t == 0); // Percentuale + sm.show(201, t == 2); // Parti + } + if (e == fe_close && atoi(o.get()) == 0) + { + TSheet_field& sf = sfield(F_SHEET); + real tot; + FOR_EACH_SHEET_ROW(sf, i, row) + tot += real(row->get(0)); + tot.round(2); + if (tot != CENTO) + return error_box(TR("Il totale delle percentuali di riparto deve essere 100")); + } + break; + default: + break; + } + return true; +} + +void TRiparti_msk::create_sheet() +{ + TSheet_field& sf = sfield(F_SHEET); + TMask& sm = sf.sheet_mask(); + + sm.hide(-1); + + TConfig ini(CONFIG_DITTA, "ca"); + const bool use_pdc = ini.get_bool("UsePdcc"); + + create_fields(sm, LF_CDC, 1, 1, "CdC", 202, "CdCDes", 252); + create_fields(sm, LF_COMMESSE, 1, 5, "Cms", 206, "CmsDes", 256); + create_fields(sm, LF_CDC, 1, 9, "CdC", 210, "CdCDes", 260); + if (!use_pdc) + { + create_fields(sm, LF_PCONANA,1, 13, "Pdci", 214, "PdciDes", 264); + sm.hide(-6); + } + + for (short id = 217; id >= 202; id--) + { + short dlg = id; + if (use_pdc && id >= 213) + dlg -= 100; + const int pos = sm.id2pos(dlg); + if (pos >= 0) + { + TMask_field& f = sm.fld(pos); + const int size = f.size(); + const TString& prompt = f.prompt(); + sf.set_column_header(id, prompt); + sf.set_column_width(id, (2+max(size, prompt.len())) * CHARX); + } + else + sf.delete_column(id); + } +} + +TRiparti_msk::TRiparti_msk() : TAutomask("ca0800a") +{ + create_fields(*this, LF_CDC, 2, 5, "CdC", F_CODCDC_1, "CdCDes", F_DESCDC_1); + create_fields(*this, LF_COMMESSE, 2, 11, "Cms", F_CODCMS_1, "CmsDes", F_DESCMS_1); + create_sheet(); +} + + +/////////////////////////////////////////////////////////// +// TRiparti_app +/////////////////////////////////////////////////////////// + +class TRiparti_app : public TRelation_application +{ + TRelation* _rel; + TRiparti_msk* _msk; + + const TString& somma_campi(TToken_string& row, int first) const; + void write_rows(); + + void spezza_campo(const TString& str, TToken_string& row, int first) const; + void read_rows(); + +protected: + virtual bool user_create(); + virtual bool user_destroy(); + virtual int write(const TMask& m); + virtual int rewrite(const TMask& m); + + virtual TRelation* get_relation() const { return _rel; } + virtual TMask* get_mask(int) { return _msk; } +}; + +const TString& TRiparti_app::somma_campi(TToken_string& row, int first) const +{ + TSheet_field& sheet = _msk->sfield(F_SHEET); + TMask& m = sheet.sheet_mask(); + + short id = 200 + first; + if (m.id2pos(id) < 0) + id -= 100; + + TString& str = get_tmp_string(20); + for (int i = first; i < first+4; i++) + { + TString80 token = row.get(i); + if (m.id2pos(id+i) < 0) + break; + const TEdit_field& fld = m.efield(id+1); + token.left_just(fld.size()); + str << token; + } + return str; +} + +void TRiparti_app::spezza_campo(const TString& str, TToken_string& row, int first) const +{ + TSheet_field& sheet = _msk->sfield(F_SHEET); + TMask& m = sheet.sheet_mask(); + + short id = 200 + first; + if (m.id2pos(id) < 0) + id -= 100; + + int start = 0; + for (int i = first; i < first+4; i++) + { + if (m.id2pos(id+i) < 0) + break; + const TEdit_field& fld = m.efield(id+1); + const int len = fld.size(); + const TString& token = str.mid(start, len); + row.add(token, i); + start += len; + } +} + + +void TRiparti_app::write_rows() +{ + TRectype* key = new TRectype(LF_RRIP); + const char tipo = _msk->get(F_TIPO)[0]; + key->put("TIPO", tipo); + key->put("CODICE", _msk->get(tipo == 'B' ? F_CODICE_B : F_CODICE_I)); + + TRecord_array a(LF_RRIP, "NRIGA"); + a.set_key(key); + + TSheet_field& sheet = _msk->sfield(F_SHEET); + FOR_EACH_SHEET_ROW(sheet, i, row) + { + TRectype& rec = a.row(i+1, true); // Crea una riga nuova + rec.put("RIPARTO", row->get(0)); + rec.put("CODCOSTO", somma_campi(*row, 1)); + rec.put("CODCMS", somma_campi(*row, 5)); + rec.put("CODFASE", somma_campi(*row, 9)); + rec.put("CODCONTO", somma_campi(*row,13)); + } + a.rewrite(); +} + +void TRiparti_app::read_rows() +{ + TRectype key (LF_RRIP); + const char tipo = _msk->get(F_TIPO)[0]; + key.put("TIPO", tipo); + key.put("CODICE", _msk->get(tipo == 'B' ? F_CODICE_B : F_CODICE_I)); + TRecord_array a(key, "NRIGA"); + + TSheet_field& sheet = _msk->sfield(F_SHEET); + sheet.destroy(); + for (int i = 1; i <= a.rows(); i++) + { + const TRectype& rec = a.row(i); + TToken_string& row = sheet.row(i-1); + row = rec.get("RIPARTO"); + spezza_campo(rec.get("CODCOSTO"), row, 1); + spezza_campo(rec.get("CODCMS"), row, 5); + spezza_campo(rec.get("CODFASE"), row, 9); + spezza_campo(rec.get("CODCONTO"), row,13); + } +} + + +int TRiparti_app::write(const TMask& m) +{ + const int err = TRelation_application::write(m); + if (err == NOERR) + write_rows(); + return err; +} + +int TRiparti_app::rewrite(const TMask& m) +{ + const int err = TRelation_application::rewrite(m); + if (err == NOERR) + write_rows(); + return err; +} + +bool TRiparti_app::user_create() +{ + _rel = new TRelation(LF_RIP); + _msk = new TRiparti_msk; + return true; +} + +bool TRiparti_app::user_destroy() +{ + delete _rel; + delete _msk; + return true; +} + +int ca0800(int argc, char* argv[]) +{ + TRiparti_app a; + a.run(argc, argv, TR("Tabella di ripartizione")); + return 0; +} + diff --git a/ca/ca0800a.h b/ca/ca0800a.h new file mode 100755 index 000000000..6fb3acf80 --- /dev/null +++ b/ca/ca0800a.h @@ -0,0 +1,31 @@ +#define F_TIPO 101 +#define F_CODICE_I 102 +#define F_CODICE_B 103 +#define F_DESCRIZ_I 104 +#define F_DESCRIZ_B 105 +#define F_TIPORIP 106 + +#define F_GRUPPO 111 +#define F_CONTO 112 +#define F_SOTTOCONTO 113 +#define F_DESCR 114 + +#define F_CODCDC_1 121 +#define F_CODCDC_2 122 +#define F_CODCDC_3 123 +#define F_CODCDC_4 124 +#define F_DESCDC_1 126 +#define F_DESCDC_2 127 +#define F_DESCDC_3 128 +#define F_DESCDC_4 129 + +#define F_CODCMS_1 131 +#define F_CODCMS_2 132 +#define F_CODCMS_3 133 +#define F_CODCMS_4 134 +#define F_DESCMS_1 136 +#define F_DESCMS_2 137 +#define F_DESCMS_3 138 +#define F_DESCMS_4 139 + +#define F_SHEET 151 diff --git a/ca/ca0800a.uml b/ca/ca0800a.uml new file mode 100755 index 000000000..29e4eb5fd --- /dev/null +++ b/ca/ca0800a.uml @@ -0,0 +1,362 @@ +#include "ca0800a.h" + +TOOLBAR "" 0 -2 0 2 +#include +ENDPAGE + +PAGE "Ripartizioni" -1 -1 64 6 + +GROUPBOX DLG_NULL 78 4 +BEGIN + PROMPT 1 0 "" +END + +RADIOBUTTON F_TIPO 1 40 +BEGIN + PROMPT 2 0 "" + FLAGS "Z" + ITEM "I|Interattiva" + MESSAGE SHOW,1@|HIDE,2@ + ITEM "B|Batch" + MESSAGE SHOW,2@|HIDE,1@ + FIELD TIPO + KEY 1 +END + +STRING F_CODICE_I 8 +BEGIN + PROMPT 49 1 "Codice " + FLAGS "Z" + USE LF_RIP + INPUT TIPO "I" + INPUT CODICE F_CODICE_I + DISPLAY "Codice " CODICE + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Sottoconto" CONTO + DISPLAY "Descrizione@50" DESCRIZ + OUTPUT F_CODICE_I CODICE + OUTPUT F_DESCRIZ_I DESCRIZ + CHECKTYPE REQUIRED + FIELD CODICE + KEY 1 + GROUP 1 +END + +STRING F_CODICE_B 8 +BEGIN + PROMPT 49 1 "Codice " + COPY USE F_CODICE_I + INPUT TIPO "B" + INPUT CODICE F_CODICE_B + DISPLAY "Codice " CODICE + DISPLAY "Costo@20" CODCOSTO + DISPLAY "Commessa@20" CODCMS + DISPLAY "Descrizione@50" DESCRIZ + OUTPUT F_CODICE_B CODICE + OUTPUT F_DESCRIZ_B DESCRIZ + CHECKTYPE REQUIRED + FIELD CODICE + KEY 1 + GROUP 2 +END + +STRING F_DESCRIZ_I 50 +BEGIN + PROMPT 2 2 "Descrizione " + USE LF_RIP KEY 2 + INPUT TIPO "I" + INPUT DESCRIZ F_DESCRIZ_I + DISPLAY "Descrizione@50" DESCRIZ + DISPLAY "Codice " CODICE + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Sottoconto" CONTO + COPY OUTPUT F_CODICE_I + FIELD DESCRIZ + KEY 2 + GROUP 1 +END + +STRING F_DESCRIZ_B 50 +BEGIN + PROMPT 2 2 "Descrizione " + COPY USE F_DESCRIZ_I + INPUT TIPO "B" + INPUT DESCRIZ F_DESCRIZ_B + DISPLAY "Descrizione@50" DESCRIZ + DISPLAY "Codice " CODICE + DISPLAY "Costo@20" CODCOSTO + DISPLAY "Commessa@20" CODCMS + COPY OUTPUT F_CODICE_B + FIELD DESCRIZ + KEY 2 + GROUP 2 +END + + +GROUPBOX DLG_NULL 78 4 +BEGIN + PROMPT 1 4 "@bConto" + GROUP 1 +END + +NUMBER F_GRUPPO 3 +BEGIN + PROMPT 2 5 "Conto " + USE LF_PCON + INPUT GRUPPO F_GRUPPO + INPUT CONTO F_CONTO + INPUT SOTTOCONTO F_SOTTOCONTO + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Sottoconto" SOTTOCONTO + DISPLAY "Descrizione@50" DESCR + OUTPUT F_GRUPPO GRUPPO + OUTPUT F_CONTO CONTO + OUTPUT F_SOTTOCONTO SOTTOCONTO + OUTPUT F_DESCR DESCR + CHECKTYPE REQUIRED + FIELD GRUPPO + GROUP 1 +END + +NUMBER F_CONTO 3 +BEGIN + PROMPT 22 5 "" + COPY ALL F_GRUPPO + FIELD CONTO + CHECKTYPE NORMAL + GROUP 1 +END + +NUMBER F_SOTTOCONTO 6 +BEGIN + PROMPT 30 5 "" + COPY ALL F_GRUPPO + FIELD SOTTOCONTO + CHECKTYPE NORMAL + GROUP 1 +END + +STRING F_DESCR 50 +BEGIN + PROMPT 2 6 "Descrizione " + USE LF_PCON KEY 2 + INPUT DESCR F_DESCR + DISPLAY "Descrizione@50" DESCR + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Sottoconto" SOTTOCONTO + COPY OUTPUT F_GRUPPO + CHECKTYPE REQUIRED + GROUP 1 +END + +GROUPBOX DLG_NULL 78 6 +BEGIN + PROMPT 1 4 "@bCentro di costo" + GROUP 2 +END + +GROUPBOX DLG_NULL 78 6 +BEGIN + PROMPT 1 10 "@bCommessa" + GROUP 2 +END + +ENDPAGE + +PAGE "Righe" -1 -1 78 22 + +RADIOBUTTON F_TIPORIP 1 78 +BEGIN + PROMPT 1 0 "Ripartizione" + FLAGS "Z" + ITEM "0|Percentuale" + ITEM "1|Perc. su costo" + ITEM "2|Parti" + FIELD TIPORIP +END + +SPREADSHEET F_SHEET +BEGIN + PROMPT 0 3 "" + ITEM "Riparto@6" + ITEM "Cdc1" + ITEM "Cdc2" + ITEM "Cdc3" + ITEM "Cdc4" + ITEM "Cms1" + ITEM "Cms2" + ITEM "Cms3" + ITEM "Cms4" + ITEM "Fas1" + ITEM "Fas2" + ITEM "Fas3" + ITEM "Fas4" + ITEM "Con1" + ITEM "Con2" + ITEM "Con3" + ITEM "Con4" +END + +ENDPAGE + +ENDMASK + +PAGE "Sheet" -1 -1 78 19 + +NUMBER 101 6 2 +BEGIN + PROMPT 1 0 "% Ripartizione " + FLAGS "U" +END + +NUMBER 201 6 +BEGIN + PROMPT 1 0 "Numero parti " + FLAGS "U" +END + +STRING 102 20 +BEGIN + PROMPT 1 1 "Cdc1 " + USE LF_CDC + GROUP 1 +END + +STRING 103 20 +BEGIN + PROMPT 1 2 "Cdc2 " + USE LF_CDC + GROUP 1 +END + +STRING 104 20 +BEGIN + PROMPT 1 3 "Cdc3 " + USE LF_CDC + GROUP 1 +END + +STRING 105 20 +BEGIN + PROMPT 1 4 "Cdc4 " + USE LF_CDC + GROUP 1 +END + +STRING 106 20 +BEGIN + PROMPT 1 5 "Cms1 " + GROUP 1 +END + +STRING 107 20 +BEGIN + PROMPT 1 6 "Cms2 " + GROUP 1 +END + +STRING 108 20 +BEGIN + PROMPT 1 7 "Cms3 " + GROUP 1 +END + +STRING 109 20 +BEGIN + PROMPT 1 8 "Cms4 " + GROUP 1 +END + +STRING 110 20 +BEGIN + PROMPT 1 9 "Fas1 " + GROUP 1 +END + +STRING 111 10 +BEGIN + PROMPT 1 10 "Fas2 " + GROUP 1 +END + +STRING 112 10 +BEGIN + PROMPT 1 11 "Fas3 " + GROUP 1 +END + +STRING 113 10 +BEGIN + PROMPT 1 12 "Fas4 " + GROUP 1 +END + +NUMBER 114 3 +BEGIN + PROMPT 1 14 "Gruppo " + USE LF_PCON + INPUT GRUPPO 114 + INPUT CONTO 115 + INPUT SOTTOCONTO 116 + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Sottoconto" SOTTOCONTO + DISPLAY "Descrizione@50" DESCR + OUTPUT 114 GRUPPO + OUTPUT 115 CONTO + OUTPUT 116 SOTTOCONTO + OUTPUT 117 DESCR + CHECKTYPE NORMAL + GROUP 6 +END + +NUMBER 115 3 +BEGIN + PROMPT 27 14 "Conto " + COPY ALL 114 + GROUP 6 +END + +NUMBER 116 6 +BEGIN + PROMPT 46 14 "Sottoconto " + COPY ALL 114 + GROUP 6 +END + +STRING 117 50 +BEGIN + PROMPT 1 15 "Descrizione " + USE LF_PCON KEY 2 + INPUT DESCR 117 + DISPLAY "Descrizione@50" DESCR + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Sottoconto" SOTTOCONTO + COPY OUTPUT 114 + CHECKTYPE NORMAL + GROUP 6 +END + +BUTTON DLG_OK 10 2 +BEGIN + PROMPT -13 -1 "" +END + +BUTTON DLG_DELREC 10 2 +BEGIN + PROMPT -23 -1 "" +END + +BUTTON DLG_CANCEL 10 2 +BEGIN + PROMPT -33 -1 "" +END + +ENDPAGE + +ENDMASK \ No newline at end of file diff --git a/ca/calib01.h b/ca/calib01.h index d7e5f5623..fbdea628b 100755 --- a/ca/calib01.h +++ b/ca/calib01.h @@ -75,7 +75,6 @@ class TAnal_app : public TRelation_application TAnal_msk* _msk; protected: - virtual bool changing_mask(int) { return false; } virtual TMask* get_mask(int) { return _msk; } virtual TRelation* get_relation() const { return _rel; } virtual bool user_create(); diff --git a/ca/f149.dir b/ca/f149.dir index 8882010a3..8e310c1e7 100755 --- a/ca/f149.dir +++ b/ca/f149.dir @@ -1,3 +1,3 @@ 149 0 -$rip|0|0|122|0|Archivio tabelle di ripartizione analitica||| +$rip|0|0|113|0|Archivio tabelle di ripartizione analitica||| diff --git a/ca/f149.trr b/ca/f149.trr index d396d7462..fad73fdce 100755 --- a/ca/f149.trr +++ b/ca/f149.trr @@ -1,18 +1,14 @@ 149 -13 -TIPO|1|1|0|Tipo Ripartizione (nterattiva, atch) -CODICE|1|8|0|Codice Legame -GRUPPO|2|3|0|Gruppo -CONTO|2|3|0|Conto -SOTTOCONTO|3|6|0|Sottoconto -CODCOSTO|1|20|0|Codice centro di costo -CODCMS|1|20|0|Codice commessa -DESCRIZ|1|50|0|Descrizione -PERC|8|1|0|Ripartizione in percentuale -SUCOSTO|8|1|0|Ripartizione in percentuale su costo -PARTI|8|1|0|Ripartizione in parti uguali -TIPORIP|1|3|0|Riporto su < > Nulla, Centro di costo, Commessa -CODRIP|1|4|0|Codice parametro di ripartizione centri di costo +9 +TIPO|1|1|0| +CODICE|1|8|0| +GRUPPO|2|3|0| +CONTO|2|3|0| +SOTTOCONTO|3|6|0| +CODCOSTO|1|20|0| +CODCMS|1|20|0| +DESCRIZ|1|50|0| +TIPORIP|1|1|0| 5 TIPO+CODICE| TIPO+DESCRIZ|X