Patch level : 2.2
Files correlati : ca0 Ricompilazione Demo : [ ] Commento : Aggiunta gestione tabelle di ripartizione git-svn-id: svn://10.65.10.50/trunk@12563 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
1c2839ebbd
commit
6dd2e7816f
@ -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();
|
||||
};
|
||||
|
425
ca/ca0800.cpp
Executable file
425
ca/ca0800.cpp
Executable file
@ -0,0 +1,425 @@
|
||||
#include <automask.h>
|
||||
#include <recarray.h>
|
||||
#include <relapp.h>
|
||||
|
||||
#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;
|
||||
}
|
||||
|
31
ca/ca0800a.h
Executable file
31
ca/ca0800a.h
Executable file
@ -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
|
362
ca/ca0800a.uml
Executable file
362
ca/ca0800a.uml
Executable file
@ -0,0 +1,362 @@
|
||||
#include "ca0800a.h"
|
||||
|
||||
TOOLBAR "" 0 -2 0 2
|
||||
#include <toolbar.h>
|
||||
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
|
@ -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();
|
||||
|
@ -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|||
|
||||
|
24
ca/f149.trr
24
ca/f149.trr
@ -1,18 +1,14 @@
|
||||
149
|
||||
13
|
||||
TIPO|1|1|0|Tipo Ripartizione (<I>nterattiva, <B>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, <CDC>Centro di costo, <CMS>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
|
||||
|
Loading…
x
Reference in New Issue
Block a user