Patch level : 2.2 nopatch
Files correlati : ca0.exe Ricompilazione Demo : [ ] Commento : Terminata prima versione inserimento tabelle di riclassificazione git-svn-id: svn://10.65.10.50/trunk@12599 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
d59a5ee6ed
commit
0a5d7b7b05
@ -13,7 +13,7 @@ int main(int argc, char** argv)
|
|||||||
case 4: ca0500(argc,argv); break; //gestione centri di costo
|
case 4: ca0500(argc,argv); break; //gestione centri di costo
|
||||||
case 5: ca0600(argc,argv); break; //gestione commesse
|
case 5: ca0600(argc,argv); break; //gestione commesse
|
||||||
case 6: ca0700(argc,argv); break; //gestione fasi
|
case 6: ca0700(argc,argv); break; //gestione fasi
|
||||||
// case 7: ca0800(argc,argv); break; // ribaltamenti
|
case 7: ca0800(argc,argv); break; // ribaltamenti
|
||||||
default: ca0100(argc,argv); break; // gestione tabelle
|
default: ca0100(argc,argv); break; // gestione tabelle
|
||||||
}
|
}
|
||||||
exit(0);
|
exit(0);
|
||||||
|
2
ca/ca0.h
2
ca/ca0.h
@ -8,6 +8,6 @@ int ca0400(int argc, char* argv[]);
|
|||||||
int ca0500(int argc, char* argv[]);
|
int ca0500(int argc, char* argv[]);
|
||||||
int ca0600(int argc, char* argv[]);
|
int ca0600(int argc, char* argv[]);
|
||||||
int ca0700(int argc, char* argv[]);
|
int ca0700(int argc, char* argv[]);
|
||||||
//int ca0800(int argc, char* argv[]);
|
int ca0800(int argc, char* argv[]);
|
||||||
|
|
||||||
#endif // __CA0_H
|
#endif // __CA0_H
|
||||||
|
@ -223,7 +223,7 @@ END
|
|||||||
|
|
||||||
TEXT -1
|
TEXT -1
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 17 2 "Descrizione"
|
PROMPT 21 2 "Descrizione"
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING F_FASE_1 10
|
STRING F_FASE_1 10
|
||||||
@ -236,7 +236,7 @@ END
|
|||||||
|
|
||||||
STRING F_DESFASE_1 50
|
STRING F_DESFASE_1 50
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 17 3 ""
|
PROMPT 21 3 ""
|
||||||
FIELD FscDes(1)
|
FIELD FscDes(1)
|
||||||
END
|
END
|
||||||
|
|
||||||
@ -251,7 +251,7 @@ END
|
|||||||
|
|
||||||
STRING F_DESFASE_2 50
|
STRING F_DESFASE_2 50
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 17 4 ""
|
PROMPT 21 4 ""
|
||||||
FIELD FscDes(2)
|
FIELD FscDes(2)
|
||||||
END
|
END
|
||||||
|
|
||||||
@ -266,7 +266,7 @@ END
|
|||||||
|
|
||||||
STRING F_DESFASE_3 50
|
STRING F_DESFASE_3 50
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 17 5 ""
|
PROMPT 21 5 ""
|
||||||
FIELD FscDes(3)
|
FIELD FscDes(3)
|
||||||
END
|
END
|
||||||
|
|
||||||
@ -280,7 +280,7 @@ END
|
|||||||
|
|
||||||
STRING F_DESFASE_4 50
|
STRING F_DESFASE_4 50
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 17 6 ""
|
PROMPT 21 6 ""
|
||||||
FIELD FscDes(4)
|
FIELD FscDes(4)
|
||||||
END
|
END
|
||||||
|
|
||||||
|
@ -9,8 +9,6 @@ class TPiano_conti_anal_msk : public TSimple_anal_msk
|
|||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
virtual int get_logicnum() const { return LF_PCONANA; }
|
virtual int get_logicnum() const { return LF_PCONANA; }
|
||||||
virtual const char* get_key_var() const { return "Pdci"; }
|
|
||||||
virtual const char* get_des_var() const { return "PdciDes"; }
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
TPiano_conti_anal_msk() { read("ca0400a"); }
|
TPiano_conti_anal_msk() { read("ca0400a"); }
|
||||||
@ -23,7 +21,7 @@ public:
|
|||||||
class TAnalisi_app : public TAnal_app
|
class TAnalisi_app : public TAnal_app
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
virtual TAnal_msk* create_mask() const { return new TPiano_conti_anal_msk; }
|
virtual TSimple_anal_msk* create_mask() const { return new TPiano_conti_anal_msk; }
|
||||||
|
|
||||||
virtual bool create();
|
virtual bool create();
|
||||||
};
|
};
|
||||||
|
@ -12,8 +12,6 @@ class TCdc_anal_msk : public TSimple_anal_msk
|
|||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
virtual int get_logicnum() const { return LF_CDC; }
|
virtual int get_logicnum() const { return LF_CDC; }
|
||||||
virtual const char* get_key_var() const { return "CdC"; }
|
|
||||||
virtual const char* get_des_var() const { return "CdCDes"; }
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
TCdc_anal_msk() { read("ca0500a"); }
|
TCdc_anal_msk() { read("ca0500a"); }
|
||||||
@ -26,7 +24,7 @@ public:
|
|||||||
class TCdC_app : public TAnal_app
|
class TCdC_app : public TAnal_app
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
virtual TAnal_msk* create_mask() const { return new TCdc_anal_msk; }
|
virtual TSimple_anal_msk* create_mask() const { return new TCdc_anal_msk; }
|
||||||
};
|
};
|
||||||
|
|
||||||
int ca0500(int argc, char* argv[])
|
int ca0500(int argc, char* argv[])
|
||||||
|
@ -12,8 +12,6 @@ class TCms_anal_msk : public TSimple_anal_msk
|
|||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
virtual int get_logicnum() const { return LF_COMMESSE; }
|
virtual int get_logicnum() const { return LF_COMMESSE; }
|
||||||
virtual const char* get_key_var() const { return "Cms"; }
|
|
||||||
virtual const char* get_des_var() const { return "CmsDes"; }
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
TCms_anal_msk() { read("ca0600a"); }
|
TCms_anal_msk() { read("ca0600a"); }
|
||||||
@ -26,7 +24,7 @@ public:
|
|||||||
class TCms_app : public TAnal_app
|
class TCms_app : public TAnal_app
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
virtual TAnal_msk* create_mask() const { return new TCms_anal_msk; }
|
virtual TSimple_anal_msk* create_mask() const { return new TCms_anal_msk; }
|
||||||
};
|
};
|
||||||
|
|
||||||
int ca0600(int argc, char* argv[])
|
int ca0600(int argc, char* argv[])
|
||||||
|
@ -13,48 +13,48 @@ END
|
|||||||
|
|
||||||
MEMO F_CMS_DESCRAGG 78 5
|
MEMO F_CMS_DESCRAGG 78 5
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 8 "Descrizione aggiuntiva"
|
PROMPT 2 6 "Descrizione aggiuntiva"
|
||||||
FIELD DESCRAGG
|
FIELD DESCRAGG
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING F_CMS_ANNO 4
|
STRING F_CMS_ANNO 4
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 14 "Anno "
|
PROMPT 2 12 "Anno "
|
||||||
FIELD ANNO
|
FIELD ANNO
|
||||||
END
|
END
|
||||||
|
|
||||||
BOOLEAN F_CMS_LOCDIV
|
BOOLEAN F_CMS_LOCDIV
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 15 "Commessa in località diversa"
|
PROMPT 2 13 "Commessa in località diversa"
|
||||||
FIELD LOCDIV
|
FIELD LOCDIV
|
||||||
END
|
END
|
||||||
|
|
||||||
GROUPBOX DLG_NULL 78 7
|
GROUPBOX DLG_NULL 78 7
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 1 16 "@bLocazione"
|
PROMPT 1 14 "@bLocazione"
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING F_CMS_INDIR 35
|
STRING F_CMS_INDIR 35
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 17 "Indirizzo "
|
PROMPT 2 15 "Indirizzo "
|
||||||
FIELD INDIR
|
FIELD INDIR
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING F_CMS_CIV 10
|
STRING F_CMS_CIV 10
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 50 17 "N. "
|
PROMPT 50 15 "N. "
|
||||||
FIELD CIV
|
FIELD CIV
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING F_CMS_LOC 35
|
STRING F_CMS_LOC 35
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 18 "Localita' "
|
PROMPT 2 16 "Localita' "
|
||||||
FIELD LOC
|
FIELD LOC
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING F_CMS_STATO 3
|
STRING F_CMS_STATO 3
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 19 "Stato "
|
PROMPT 2 17 "Stato "
|
||||||
FIELD STATO
|
FIELD STATO
|
||||||
FLAGS "Z"
|
FLAGS "Z"
|
||||||
USE %STA
|
USE %STA
|
||||||
@ -69,7 +69,7 @@ END
|
|||||||
|
|
||||||
STRING F_CMS_DESTATO 50
|
STRING F_CMS_DESTATO 50
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 20 19 ""
|
PROMPT 20 17 ""
|
||||||
USE %STA KEY 2
|
USE %STA KEY 2
|
||||||
INPUT S0 F_CMS_DESTATO
|
INPUT S0 F_CMS_DESTATO
|
||||||
DISPLAY "Stato@50" S0
|
DISPLAY "Stato@50" S0
|
||||||
@ -79,7 +79,7 @@ END
|
|||||||
|
|
||||||
STRING F_CMS_COM 4
|
STRING F_CMS_COM 4
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 20 "Comune "
|
PROMPT 2 18 "Comune "
|
||||||
FIELD COM
|
FIELD COM
|
||||||
FLAGS "U"
|
FLAGS "U"
|
||||||
USE LF_COMUNI
|
USE LF_COMUNI
|
||||||
@ -100,19 +100,19 @@ END
|
|||||||
|
|
||||||
STRING F_CMS_PROV 2
|
STRING F_CMS_PROV 2
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 21 20 "Provincia "
|
PROMPT 21 18 "Provincia "
|
||||||
FLAGS "D"
|
FLAGS "D"
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING F_CMS_CAP 5
|
STRING F_CMS_CAP 5
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 38 20 "CAP "
|
PROMPT 38 18 "CAP "
|
||||||
FIELD CAP
|
FIELD CAP
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING F_CMS_DEN 50
|
STRING F_CMS_DEN 50
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 21 " "
|
PROMPT 2 19 " "
|
||||||
USE LF_COMUNI KEY 2
|
USE LF_COMUNI KEY 2
|
||||||
INPUT DENCOM F_CMS_DEN
|
INPUT DENCOM F_CMS_DEN
|
||||||
DISPLAY "Denominazione@50" DENCOM
|
DISPLAY "Denominazione@50" DENCOM
|
||||||
|
@ -12,8 +12,6 @@ class TFsc_anal_msk : public TSimple_anal_msk
|
|||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
virtual int get_logicnum() const { return LF_FASI; }
|
virtual int get_logicnum() const { return LF_FASI; }
|
||||||
virtual const char* get_key_var() const { return "Fsc"; }
|
|
||||||
virtual const char* get_des_var() const { return "FscDes"; }
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
TFsc_anal_msk() { read("ca0700a"); }
|
TFsc_anal_msk() { read("ca0700a"); }
|
||||||
@ -26,7 +24,7 @@ public:
|
|||||||
class TFsc_app : public TAnal_app
|
class TFsc_app : public TAnal_app
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
virtual TAnal_msk* create_mask() const { return new TFsc_anal_msk; }
|
virtual TSimple_anal_msk* create_mask() const { return new TFsc_anal_msk; }
|
||||||
};
|
};
|
||||||
|
|
||||||
int ca0700(int argc, char* argv[])
|
int ca0700(int argc, char* argv[])
|
||||||
|
252
ca/ca0800.cpp
252
ca/ca0800.cpp
@ -3,32 +3,37 @@
|
|||||||
#include <relapp.h>
|
#include <relapp.h>
|
||||||
|
|
||||||
#include "ca0800a.h"
|
#include "ca0800a.h"
|
||||||
|
#include "calib01.h"
|
||||||
|
|
||||||
const char* get_key_fieldname(int logic, int k)
|
void append_select_clause(ostream& out, int level, int logic)
|
||||||
{
|
{
|
||||||
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;
|
TString str;
|
||||||
str << " SE STR(";
|
if (logic == LF_PCON)
|
||||||
|
{
|
||||||
|
switch (level)
|
||||||
|
{
|
||||||
|
case 0: str = "CONTO==\"\""; break;
|
||||||
|
case 1: str = "SOTTOCONTO==\"\""; break;
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
const TMultilevel_code_info& mci = multilevel_code_info(logic);
|
||||||
|
const TFieldref& key = mci.fieldref(level);
|
||||||
|
|
||||||
|
str << "STR(";
|
||||||
if (level > 1)
|
if (level > 1)
|
||||||
str << "(NUM(LEN(" << key.name() << "))>" << key.from() << ')'; // SE LEN(CODCONTO)>=4
|
str << "(NUM(LEN(" << key.name() << "))>" << key.from() << ')'; // SE LEN(CODCONTO)>=4
|
||||||
if (level < key1.items())
|
if (level < mci.levels())
|
||||||
{
|
{
|
||||||
if (level > 1) str << "&&";
|
if (level > 1) str << "&&";
|
||||||
str << "(NUM(LEN(" << key.name() << "))<=" << key.to() << ')'; // SE LEN(CODCONTO)<=7
|
str << "(NUM(LEN(" << key.name() << "))<=" << key.to() << ')'; // SE LEN(CODCONTO)<=7
|
||||||
}
|
}
|
||||||
str << ')';
|
str << ')';
|
||||||
out << str << endl;
|
}
|
||||||
|
if (str.not_empty())
|
||||||
|
out << " SE " << str << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
void append_run_clause(ostream& out, int logicnum)
|
void append_run_clause(ostream& out, int logicnum)
|
||||||
@ -39,37 +44,35 @@ void append_run_clause(ostream& out, int logicnum)
|
|||||||
out << "AD RU " << app << endl;
|
out << "AD RU " << app << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
void create_browse1(TEdit_field& kfld, int level, TConfig& cfg,
|
void create_browse1(TEdit_field& kfld, int level, int logic, short key_id, short des_id)
|
||||||
int logic,
|
|
||||||
const char* key_var, short key_id,
|
|
||||||
const char* des_var, short des_id,
|
|
||||||
const TArray& key1, const TArray& key2)
|
|
||||||
{
|
{
|
||||||
|
const TMultilevel_code_info& mci = multilevel_code_info(logic);
|
||||||
|
|
||||||
TFilename tmp; tmp.temp();
|
TFilename tmp; tmp.temp();
|
||||||
ofstream out(tmp);
|
ofstream out(tmp);
|
||||||
|
|
||||||
out << "US " << logic << endl;
|
out << "US " << logic << endl;
|
||||||
append_select_clause(out, level, key1);
|
append_select_clause(out, level, logic);
|
||||||
append_run_clause(out, logic);
|
append_run_clause(out, logic);
|
||||||
|
|
||||||
for (int i = 1; i <= level; i++)
|
for (int i = 0; i <= level; i++)
|
||||||
{
|
{
|
||||||
const TString& picture = cfg.get(key_var, NULL, i);
|
const TString& picture = mci.picture(i);
|
||||||
const TString& prompt = cfg.get(des_var, NULL, i);
|
const TString& prompt = mci.prompt(i);
|
||||||
const TFieldref& field = (const TFieldref&)key1[i-1];
|
const TFieldref& field = mci.fieldref(i);
|
||||||
const int length = field.to() - field.from();
|
const int length = field.to() - field.from();
|
||||||
out << "IN " << field << ' ' << (key_id+i-1) << endl;
|
out << "IN " << field << ' ' << (key_id+i) << endl;
|
||||||
out << "DI \"" << prompt;
|
out << "DI \"" << prompt;
|
||||||
if (length > prompt.len())
|
if (length > prompt.len())
|
||||||
out << '@' << length;
|
out << '@' << length;
|
||||||
out << "\" " << field << endl;
|
out << "\" " << field << endl;
|
||||||
out << "OU " << (key_id+i-1) << ' ' << field << endl;
|
out << "OU " << (key_id+i) << ' ' << field << endl;
|
||||||
out << "FI " << field << endl;
|
|
||||||
}
|
}
|
||||||
const TFieldref& field = (const TFieldref&)key2[0];
|
const TFieldref& field = mci.fieldref(0, 2);
|
||||||
out << "DI \"Descrizione@50\" " << field << endl;
|
out << "DI \"" << TR("Descrizione") << "@50\" " << field << endl;
|
||||||
out << "OU " << (des_id+level-1) << ' ' << field << endl;
|
out << "OU " << (des_id+level) << ' ' << field << endl;
|
||||||
out << "CH RE" << endl;
|
out << "CH RE" << endl;
|
||||||
|
//out << "FI " << mci.fieldref(level) << endl;
|
||||||
out << "EN" << endl;
|
out << "EN" << endl;
|
||||||
out.close();
|
out.close();
|
||||||
|
|
||||||
@ -80,38 +83,34 @@ void create_browse1(TEdit_field& kfld, int level, TConfig& cfg,
|
|||||||
xvt_fsys_removefile(tmp);
|
xvt_fsys_removefile(tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
void create_browse2(TEdit_field& kfld, int level, TConfig& cfg,
|
void create_browse2(TEdit_field& kfld, int level, int logic, short key_id, short des_id)
|
||||||
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];
|
const TMultilevel_code_info& mci = multilevel_code_info(logic);
|
||||||
|
|
||||||
|
const TFieldref& field = mci.fieldref(0, 2);
|
||||||
TString str2; str2 << field;
|
TString str2; str2 << field;
|
||||||
|
|
||||||
TFilename tmp; tmp.temp();
|
TFilename tmp; tmp.temp();
|
||||||
ofstream out(tmp);
|
ofstream out(tmp);
|
||||||
out << "US " << logic << " KE 2";
|
out << "US " << logic << " KE 2" << endl;
|
||||||
append_select_clause(out, level, key1);
|
append_select_clause(out, level, logic);
|
||||||
append_run_clause(out, logic);
|
append_run_clause(out, logic);
|
||||||
|
|
||||||
out << "DI \"Descrizione@50\" " << str2 << endl;
|
|
||||||
out << "IN " << str2 << ' ' << kfld.dlg() << endl;
|
out << "IN " << str2 << ' ' << kfld.dlg() << endl;
|
||||||
|
out << "DI \"" << TR("Descrizione") << "@50\" " << str2 << endl;
|
||||||
out << "OU " << kfld.dlg() << ' ' << str2 << endl;
|
out << "OU " << kfld.dlg() << ' ' << str2 << endl;
|
||||||
|
|
||||||
int from = 1, to = 1;
|
for (int i = 0; i <= level; i++)
|
||||||
for (int i = 1; i <= level; i++)
|
|
||||||
{
|
{
|
||||||
const TString& picture = cfg.get(key_var, NULL, i);
|
const TString& picture = mci.picture(i);
|
||||||
const TString& prompt = cfg.get(des_var, NULL, i);
|
const TString& prompt = mci.prompt(i);
|
||||||
const TFieldref& field = (const TFieldref&)key1[i-1];
|
const TFieldref& field = mci.fieldref(i);
|
||||||
const int length = field.to() - field.from();
|
const int length = field.to() - field.from();
|
||||||
out << "DI \"" << prompt;
|
out << "DI \"" << prompt;
|
||||||
if (length > prompt.len())
|
if (length > prompt.len())
|
||||||
out << '@' << length;
|
out << '@' << length;
|
||||||
out << "\" " << field << endl;
|
out << "\" " << field << endl;
|
||||||
out << "OU " << (key_id+i-1) << ' ' << field << endl;
|
out << "OU " << (key_id+i) << ' ' << field << endl;
|
||||||
from = to+1;
|
|
||||||
}
|
}
|
||||||
out << "CH NO" << endl;
|
out << "CH NO" << endl;
|
||||||
out << "EN" << endl;
|
out << "EN" << endl;
|
||||||
@ -126,58 +125,49 @@ void create_browse2(TEdit_field& kfld, int level, TConfig& cfg,
|
|||||||
|
|
||||||
|
|
||||||
int create_fields(TMask& msk, int logicnum, int x, int y,
|
int create_fields(TMask& msk, int logicnum, int x, int y,
|
||||||
const char* key_var, short key_id,
|
short key_id, short des_id)
|
||||||
const char* des_var, short des_id)
|
|
||||||
{
|
{
|
||||||
TConfig cfg(CONFIG_DITTA, "ca");
|
const TMultilevel_code_info& mci = multilevel_code_info(logicnum);
|
||||||
|
|
||||||
TArray key1, key2;
|
|
||||||
|
|
||||||
int maxkeylen = 0, maxdeslen = 0;
|
int maxkeylen = 0, maxdeslen = 0;
|
||||||
int level;
|
for (int level = 0; level < mci.levels(); level++)
|
||||||
int from = 1, to = 1;
|
|
||||||
for (level = 1; ; level++)
|
|
||||||
{
|
{
|
||||||
const TString& prompt = cfg.get(des_var, NULL, level);
|
const TString& prompt = mci.prompt(level);
|
||||||
if (prompt.blank())
|
const TString& picture = mci.picture(level);
|
||||||
break;
|
|
||||||
const TString& picture = cfg.get(key_var, NULL, level);
|
|
||||||
const int keylen = picture.len();
|
const int keylen = picture.len();
|
||||||
const int deslen = prompt.len();
|
const int deslen = prompt.len();
|
||||||
if (keylen > maxkeylen) maxkeylen = keylen;
|
if (keylen > maxkeylen) maxkeylen = keylen;
|
||||||
if (deslen > maxdeslen) maxdeslen = deslen;
|
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++;
|
maxdeslen++;
|
||||||
const int tab0 = x;
|
const int tab0 = x;
|
||||||
const int tab1 = tab0 + maxdeslen + maxkeylen + 4;
|
const int tab1 = tab0 + maxdeslen + maxkeylen + 4;
|
||||||
|
|
||||||
for (int i = 1; i < level; i++)
|
for (int i = 0; i < mci.levels(); i++)
|
||||||
{
|
{
|
||||||
const short kid = key_id+i-1;
|
const short kid = key_id+i;
|
||||||
|
|
||||||
const TString& picture = cfg.get(key_var, NULL, i);
|
const TString& picture = mci.picture(i);
|
||||||
TString80 prompt = cfg.get(des_var, NULL, i);
|
TString80 prompt = mci.prompt(i);
|
||||||
prompt.left_just(maxdeslen);
|
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;
|
const char* flags = picture[0] == '0' ? "BUZ" : "BU";
|
||||||
TEdit_field& dfld = msk.add_string(did, 0, "", tab1, y+i-1, 50, "B", 72+tab0-tab1);
|
TEdit_field* kfld = NULL;
|
||||||
create_browse2(dfld, i, cfg, logicnum, key_var, key_id, des_var, des_id, key1, key2);
|
if (picture.find('A') < 0) // Numeric
|
||||||
|
kfld = &msk.add_number(kid, 0, prompt, tab0, y+i, picture.len(), flags);
|
||||||
|
else
|
||||||
|
kfld = &msk.add_string(kid, 0, prompt, tab0, y+i, picture.len(), flags);
|
||||||
|
create_browse1(*kfld, i, logicnum, key_id, des_id);
|
||||||
|
kfld->set_group(2);
|
||||||
|
|
||||||
|
const short did = des_id+i;
|
||||||
|
TEdit_field& dfld = msk.add_string(did, 0, "", tab1, y+i, 50, "B", 72+tab0-tab1);
|
||||||
|
create_browse2(dfld, i, logicnum, key_id, des_id);
|
||||||
dfld.set_group(2);
|
dfld.set_group(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
return level;
|
return mci.levels();
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
@ -204,8 +194,11 @@ bool TRiparti_msk::on_field_event(TOperable_field& o, TField_event e, long jolly
|
|||||||
TSheet_field& sf = sfield(F_SHEET);
|
TSheet_field& sf = sfield(F_SHEET);
|
||||||
TMask& sm = sf.sheet_mask();
|
TMask& sm = sf.sheet_mask();
|
||||||
const int t = atoi(o.get());
|
const int t = atoi(o.get());
|
||||||
sm.show(101, t == 0); // Percentuale
|
sm.show(101, t < 2); // Percentuale
|
||||||
sm.show(201, t == 2); // Parti
|
sm.show(201, t == 2); // Parti
|
||||||
|
sm.enable(101, t != 1);
|
||||||
|
sf.enable_column(0, t != 1);
|
||||||
|
sf.force_update();
|
||||||
}
|
}
|
||||||
if (e == fe_close && atoi(o.get()) == 0)
|
if (e == fe_close && atoi(o.get()) == 0)
|
||||||
{
|
{
|
||||||
@ -218,7 +211,47 @@ bool TRiparti_msk::on_field_event(TOperable_field& o, TField_event e, long jolly
|
|||||||
return error_box(TR("Il totale delle percentuali di riparto deve essere 100"));
|
return error_box(TR("Il totale delle percentuali di riparto deve essere 100"));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case F_SHEET:
|
||||||
|
if (e == fe_init)
|
||||||
|
{
|
||||||
|
TSheet_field& sf = sfield(F_SHEET);
|
||||||
|
TMask& sm = sf.sheet_mask();
|
||||||
|
const bool on = get(F_TIPO)[0] != 'C';
|
||||||
|
for (short id = 202; id < 214; id++)
|
||||||
|
{
|
||||||
|
if (sm.id2pos(id) > 0)
|
||||||
|
{
|
||||||
|
sf.enable_column(id, on);
|
||||||
|
sm.enable(id, on);
|
||||||
|
}
|
||||||
|
if (sm.id2pos(id+50) > 0)
|
||||||
|
sm.enable(id+50, on);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
|
if (e == fe_modify || e == fe_close)
|
||||||
|
{
|
||||||
|
const short id = o.dlg();
|
||||||
|
int level = -1;
|
||||||
|
if (id >= 202 && id <= 217)
|
||||||
|
{
|
||||||
|
level = (o.dlg()-202) % 4;
|
||||||
|
} else
|
||||||
|
if (id >= F_CODCDC_1 && id <= F_CODCDC_4)
|
||||||
|
{
|
||||||
|
level = id-F_CODCDC_1;
|
||||||
|
} else
|
||||||
|
if (id >= F_CODCMS_1 && id <= F_CODCMS_4)
|
||||||
|
{
|
||||||
|
level = id-F_CODCMS_1;
|
||||||
|
}
|
||||||
|
if (level >= 0)
|
||||||
|
{
|
||||||
|
TEdit_field& fld = (TEdit_field&)o;
|
||||||
|
return test_multilevel_field(fld, level);
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@ -234,38 +267,34 @@ void TRiparti_msk::create_sheet()
|
|||||||
TConfig ini(CONFIG_DITTA, "ca");
|
TConfig ini(CONFIG_DITTA, "ca");
|
||||||
const bool use_pdc = ini.get_bool("UsePdcc");
|
const bool use_pdc = ini.get_bool("UsePdcc");
|
||||||
|
|
||||||
create_fields(sm, LF_CDC, 1, 1, "CdC", 202, "CdCDes", 252);
|
create_fields(sm, LF_CDC, 1, 1, 202, 252);
|
||||||
create_fields(sm, LF_COMMESSE, 1, 5, "Cms", 206, "CmsDes", 256);
|
create_fields(sm, LF_COMMESSE, 1, 5, 206, 256);
|
||||||
create_fields(sm, LF_CDC, 1, 9, "CdC", 210, "CdCDes", 260);
|
create_fields(sm, LF_FASI, 1, 9, 210, 260);
|
||||||
if (!use_pdc)
|
create_fields(sm, use_pdc ? LF_PCON : LF_PCONANA, 1, 13, 214, 264);
|
||||||
{
|
|
||||||
create_fields(sm, LF_PCONANA,1, 13, "Pdci", 214, "PdciDes", 264);
|
|
||||||
sm.hide(-6);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (short id = 217; id >= 202; id--)
|
for (short id = 217; id >= 202; id--)
|
||||||
{
|
{
|
||||||
short dlg = id;
|
const int pos = sm.id2pos(id);
|
||||||
if (use_pdc && id >= 213)
|
|
||||||
dlg -= 100;
|
|
||||||
const int pos = sm.id2pos(dlg);
|
|
||||||
if (pos >= 0)
|
if (pos >= 0)
|
||||||
{
|
{
|
||||||
TMask_field& f = sm.fld(pos);
|
TMask_field& f = sm.fld(pos);
|
||||||
const int size = f.size();
|
const int size = f.size();
|
||||||
const TString& prompt = f.prompt();
|
const TString& prompt = f.prompt();
|
||||||
sf.set_column_header(id, prompt);
|
sf.set_column_header(id, prompt);
|
||||||
sf.set_column_width(id, (2+max(size, prompt.len())) * CHARX);
|
sf.set_column_justify(id, f.is_kind_of(CLASS_REAL_FIELD));
|
||||||
|
sf.set_column_width(id, (max(3+size, prompt.len()+1)) * CHARX);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
sf.delete_column(id);
|
sf.delete_column(id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
TRiparti_msk::TRiparti_msk() : TAutomask("ca0800a")
|
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_CDC, 2, 5, F_CODCDC_1, F_DESCDC_1);
|
||||||
create_fields(*this, LF_COMMESSE, 2, 11, "Cms", F_CODCMS_1, "CmsDes", F_DESCMS_1);
|
create_fields(*this, LF_COMMESSE, 2, 11, F_CODCMS_1, F_DESCMS_1);
|
||||||
create_sheet();
|
create_sheet();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -290,6 +319,7 @@ protected:
|
|||||||
virtual bool user_destroy();
|
virtual bool user_destroy();
|
||||||
virtual int write(const TMask& m);
|
virtual int write(const TMask& m);
|
||||||
virtual int rewrite(const TMask& m);
|
virtual int rewrite(const TMask& m);
|
||||||
|
virtual int read(TMask& m);
|
||||||
|
|
||||||
virtual TRelation* get_relation() const { return _rel; }
|
virtual TRelation* get_relation() const { return _rel; }
|
||||||
virtual TMask* get_mask(int) { return _msk; }
|
virtual TMask* get_mask(int) { return _msk; }
|
||||||
@ -300,17 +330,15 @@ const TString& TRiparti_app::somma_campi(TToken_string& row, int first) const
|
|||||||
TSheet_field& sheet = _msk->sfield(F_SHEET);
|
TSheet_field& sheet = _msk->sfield(F_SHEET);
|
||||||
TMask& m = sheet.sheet_mask();
|
TMask& m = sheet.sheet_mask();
|
||||||
|
|
||||||
short id = 200 + first;
|
const short id = 201 + first;
|
||||||
if (m.id2pos(id) < 0)
|
|
||||||
id -= 100;
|
|
||||||
|
|
||||||
TString& str = get_tmp_string(20);
|
TString& str = get_tmp_string(20);
|
||||||
for (int i = first; i < first+4; i++)
|
for (int i = 0; i < 4; i++)
|
||||||
{
|
{
|
||||||
TString80 token = row.get(i);
|
TString80 token = row.get(first+i);
|
||||||
if (m.id2pos(id+i) < 0)
|
if (m.id2pos(id+i) < 0)
|
||||||
break;
|
break;
|
||||||
const TEdit_field& fld = m.efield(id+1);
|
const TEdit_field& fld = m.efield(id+i);
|
||||||
token.left_just(fld.size());
|
token.left_just(fld.size());
|
||||||
str << token;
|
str << token;
|
||||||
}
|
}
|
||||||
@ -321,20 +349,18 @@ void TRiparti_app::spezza_campo(const TString& str, TToken_string& row, int firs
|
|||||||
{
|
{
|
||||||
TSheet_field& sheet = _msk->sfield(F_SHEET);
|
TSheet_field& sheet = _msk->sfield(F_SHEET);
|
||||||
TMask& m = sheet.sheet_mask();
|
TMask& m = sheet.sheet_mask();
|
||||||
|
TString80 token;
|
||||||
|
|
||||||
short id = 200 + first;
|
const short id = 201 + first;
|
||||||
if (m.id2pos(id) < 0)
|
|
||||||
id -= 100;
|
|
||||||
|
|
||||||
int start = 0;
|
int start = 0;
|
||||||
for (int i = first; i < first+4; i++)
|
for (int i = 0; i < 4; i++)
|
||||||
{
|
{
|
||||||
if (m.id2pos(id+i) < 0)
|
if (m.id2pos(id+i) < 0)
|
||||||
break;
|
break;
|
||||||
const TEdit_field& fld = m.efield(id+1);
|
const TEdit_field& fld = m.efield(id+i);
|
||||||
const int len = fld.size();
|
const int len = fld.size();
|
||||||
const TString& token = str.mid(start, len);
|
token = str.mid(start, len); token.trim();
|
||||||
row.add(token, i);
|
row.add(token, first+i);
|
||||||
start += len;
|
start += len;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -402,6 +428,14 @@ int TRiparti_app::rewrite(const TMask& m)
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int TRiparti_app::read(TMask& m)
|
||||||
|
{
|
||||||
|
const int err = TRelation_application::read(m);
|
||||||
|
if (err == NOERR)
|
||||||
|
read_rows();
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
bool TRiparti_app::user_create()
|
bool TRiparti_app::user_create()
|
||||||
{
|
{
|
||||||
_rel = new TRelation(LF_RIP);
|
_rel = new TRelation(LF_RIP);
|
||||||
|
@ -11,12 +11,14 @@ BEGIN
|
|||||||
PROMPT 1 0 ""
|
PROMPT 1 0 ""
|
||||||
END
|
END
|
||||||
|
|
||||||
RADIOBUTTON F_TIPO 1 40
|
RADIOBUTTON F_TIPO 1 76
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 0 ""
|
PROMPT 2 0 ""
|
||||||
FLAGS "Z"
|
FLAGS "Z"
|
||||||
ITEM "I|Interattiva"
|
ITEM "I|Interattiva"
|
||||||
MESSAGE SHOW,1@|HIDE,2@
|
MESSAGE SHOW,1@|HIDE,2@
|
||||||
|
ITEM "C|Conversione"
|
||||||
|
MESSAGE SHOW,1@|HIDE,2@
|
||||||
ITEM "B|Batch"
|
ITEM "B|Batch"
|
||||||
MESSAGE SHOW,2@|HIDE,1@
|
MESSAGE SHOW,2@|HIDE,1@
|
||||||
FIELD TIPO
|
FIELD TIPO
|
||||||
@ -25,10 +27,10 @@ END
|
|||||||
|
|
||||||
STRING F_CODICE_I 8
|
STRING F_CODICE_I 8
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 49 1 "Codice "
|
PROMPT 2 2 "Codice "
|
||||||
FLAGS "Z"
|
FLAGS "Z"
|
||||||
USE LF_RIP
|
USE LF_RIP
|
||||||
INPUT TIPO "I"
|
INPUT TIPO F_TIPO SELECT
|
||||||
INPUT CODICE F_CODICE_I
|
INPUT CODICE F_CODICE_I
|
||||||
DISPLAY "Codice " CODICE
|
DISPLAY "Codice " CODICE
|
||||||
DISPLAY "Gruppo" GRUPPO
|
DISPLAY "Gruppo" GRUPPO
|
||||||
@ -45,7 +47,7 @@ END
|
|||||||
|
|
||||||
STRING F_CODICE_B 8
|
STRING F_CODICE_B 8
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 49 1 "Codice "
|
PROMPT 2 2 "Codice "
|
||||||
COPY USE F_CODICE_I
|
COPY USE F_CODICE_I
|
||||||
INPUT TIPO "B"
|
INPUT TIPO "B"
|
||||||
INPUT CODICE F_CODICE_B
|
INPUT CODICE F_CODICE_B
|
||||||
@ -63,7 +65,7 @@ END
|
|||||||
|
|
||||||
STRING F_DESCRIZ_I 50
|
STRING F_DESCRIZ_I 50
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 2 "Descrizione "
|
PROMPT 24 2 ""
|
||||||
USE LF_RIP KEY 2
|
USE LF_RIP KEY 2
|
||||||
INPUT TIPO "I"
|
INPUT TIPO "I"
|
||||||
INPUT DESCRIZ F_DESCRIZ_I
|
INPUT DESCRIZ F_DESCRIZ_I
|
||||||
@ -80,7 +82,7 @@ END
|
|||||||
|
|
||||||
STRING F_DESCRIZ_B 50
|
STRING F_DESCRIZ_B 50
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 2 "Descrizione "
|
PROMPT 24 2 ""
|
||||||
COPY USE F_DESCRIZ_I
|
COPY USE F_DESCRIZ_I
|
||||||
INPUT TIPO "B"
|
INPUT TIPO "B"
|
||||||
INPUT DESCRIZ F_DESCRIZ_B
|
INPUT DESCRIZ F_DESCRIZ_B
|
||||||
@ -94,7 +96,6 @@ BEGIN
|
|||||||
GROUP 2
|
GROUP 2
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
||||||
GROUPBOX DLG_NULL 78 4
|
GROUPBOX DLG_NULL 78 4
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 1 4 "@bConto"
|
PROMPT 1 4 "@bConto"
|
||||||
@ -182,7 +183,7 @@ END
|
|||||||
SPREADSHEET F_SHEET
|
SPREADSHEET F_SHEET
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 0 3 ""
|
PROMPT 0 3 ""
|
||||||
ITEM "Riparto@6"
|
ITEM "Ripartiz.@9F"
|
||||||
ITEM "Cdc1"
|
ITEM "Cdc1"
|
||||||
ITEM "Cdc2"
|
ITEM "Cdc2"
|
||||||
ITEM "Cdc3"
|
ITEM "Cdc3"
|
||||||
@ -250,96 +251,85 @@ END
|
|||||||
STRING 106 20
|
STRING 106 20
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 1 5 "Cms1 "
|
PROMPT 1 5 "Cms1 "
|
||||||
|
USE LF_COMMESSE
|
||||||
GROUP 1
|
GROUP 1
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING 107 20
|
STRING 107 20
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 1 6 "Cms2 "
|
PROMPT 1 6 "Cms2 "
|
||||||
|
USE LF_COMMESSE
|
||||||
GROUP 1
|
GROUP 1
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING 108 20
|
STRING 108 20
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 1 7 "Cms3 "
|
PROMPT 1 7 "Cms3 "
|
||||||
|
USE LF_COMMESSE
|
||||||
GROUP 1
|
GROUP 1
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING 109 20
|
STRING 109 20
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 1 8 "Cms4 "
|
PROMPT 1 8 "Cms4 "
|
||||||
|
USE LF_COMMESSE
|
||||||
GROUP 1
|
GROUP 1
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING 110 20
|
STRING 110 20
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 1 9 "Fas1 "
|
PROMPT 1 9 "Fas1 "
|
||||||
|
USE LF_FASI
|
||||||
GROUP 1
|
GROUP 1
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING 111 10
|
STRING 111 10
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 1 10 "Fas2 "
|
PROMPT 1 10 "Fas2 "
|
||||||
|
COPY ALL 110
|
||||||
GROUP 1
|
GROUP 1
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING 112 10
|
STRING 112 10
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 1 11 "Fas3 "
|
PROMPT 1 11 "Fas3 "
|
||||||
|
COPY ALL 110
|
||||||
GROUP 1
|
GROUP 1
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING 113 10
|
STRING 113 10
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 1 12 "Fas4 "
|
PROMPT 1 12 "Fas4 "
|
||||||
|
COPY ALL 110
|
||||||
GROUP 1
|
GROUP 1
|
||||||
END
|
END
|
||||||
|
|
||||||
NUMBER 114 3
|
STRING 114 20
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 1 14 "Gruppo "
|
PROMPT 1 14 "Gruppo "
|
||||||
USE LF_PCON
|
USE LF_PCON
|
||||||
INPUT GRUPPO 114
|
GROUP 1
|
||||||
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
|
END
|
||||||
|
|
||||||
NUMBER 115 3
|
STRING 115 20
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 27 14 "Conto "
|
PROMPT 27 14 "Conto "
|
||||||
COPY ALL 114
|
COPY ALL 114
|
||||||
GROUP 6
|
GROUP 1
|
||||||
END
|
END
|
||||||
|
|
||||||
NUMBER 116 6
|
STRING 116 20
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 46 14 "Sottoconto "
|
PROMPT 46 14 "Sottoconto "
|
||||||
COPY ALL 114
|
COPY ALL 114
|
||||||
GROUP 6
|
GROUP 1
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING 117 50
|
STRING 117 20
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 1 15 "Descrizione "
|
PROMPT 1 15 "Sottoconticino "
|
||||||
USE LF_PCON KEY 2
|
COPY ALL 114
|
||||||
INPUT DESCR 117
|
GROUP 1
|
||||||
DISPLAY "Descrizione@50" DESCR
|
|
||||||
DISPLAY "Gruppo" GRUPPO
|
|
||||||
DISPLAY "Conto" CONTO
|
|
||||||
DISPLAY "Sottoconto" SOTTOCONTO
|
|
||||||
COPY OUTPUT 114
|
|
||||||
CHECKTYPE NORMAL
|
|
||||||
GROUP 6
|
|
||||||
END
|
END
|
||||||
|
|
||||||
BUTTON DLG_OK 10 2
|
BUTTON DLG_OK 10 2
|
||||||
|
584
ca/calib01.cpp
584
ca/calib01.cpp
@ -1,8 +1,163 @@
|
|||||||
#include "calib01.h"
|
#include "calib01.h"
|
||||||
#include "calibmsk.h"
|
#include "calibmsk.h"
|
||||||
|
|
||||||
#include <tabutil.h>
|
|
||||||
#include <tree.h>
|
#include <tree.h>
|
||||||
|
#include <pconti.h>
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
// TMultilevel_code_info
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
int TMultilevel_code_info::levels() const
|
||||||
|
{
|
||||||
|
return _picture.items();
|
||||||
|
}
|
||||||
|
|
||||||
|
const TString& TMultilevel_code_info::picture(int level) const
|
||||||
|
{
|
||||||
|
return _picture.row(level);
|
||||||
|
}
|
||||||
|
|
||||||
|
int TMultilevel_code_info::len(int level) const
|
||||||
|
{
|
||||||
|
return picture(level).len();
|
||||||
|
}
|
||||||
|
|
||||||
|
const TString& TMultilevel_code_info::prompt(int level) const
|
||||||
|
{
|
||||||
|
return _prompt.row(level);
|
||||||
|
}
|
||||||
|
|
||||||
|
const TFieldref& TMultilevel_code_info::fieldref(int level, int key) const
|
||||||
|
{
|
||||||
|
const TArray& a = key == 1 ? _key1_fields : _key2_fields;
|
||||||
|
const TFieldref& fr = (const TFieldref&)a[level];
|
||||||
|
return fr;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* TMultilevel_code_info::get_key_fieldname(int k) const
|
||||||
|
{
|
||||||
|
const RecDes& rd = prefix().get_recdes(_logicnum);
|
||||||
|
CHECKD(k > 0 && k <= rd.NKeys, "Invalid key ", k);
|
||||||
|
const KeyDes& ky = rd.Ky[k-1];
|
||||||
|
const int idx = (_logicnum == LF_TAB || _logicnum == LF_TABCOM) ? 1 : 0;
|
||||||
|
const int pos = ky.FieldSeq[idx] % MaxFields;
|
||||||
|
return rd.Fd[pos].Name;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TMultilevel_code_info::get_cfg_vars(TString& key, TString& des) const
|
||||||
|
{
|
||||||
|
switch (_logicnum)
|
||||||
|
{
|
||||||
|
case LF_PCONANA: key = "Pdci"; des = "PdciDes"; break;
|
||||||
|
case LF_CDC : key = "CdC"; des = "CdCDes"; break;
|
||||||
|
case LF_COMMESSE:key = "Cms"; des = "CmsDes"; break;
|
||||||
|
case LF_FASI : key = "Fsc"; des = "FscDes"; break;
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
return key.not_empty();
|
||||||
|
}
|
||||||
|
|
||||||
|
void TMultilevel_code_info::add_fieldref(int k, int from, int to)
|
||||||
|
{
|
||||||
|
TArray& a = k == 1 ? _key1_fields : _key2_fields;
|
||||||
|
TString80 str = get_key_fieldname(k);
|
||||||
|
if (from > 0)
|
||||||
|
str << '[' << from << ',' << to << ']';
|
||||||
|
|
||||||
|
TFieldref* fr = new TFieldref(str, _logicnum);
|
||||||
|
a.add(fr);
|
||||||
|
}
|
||||||
|
|
||||||
|
TMultilevel_code_info::TMultilevel_code_info(int logicnum) : _logicnum(logicnum)
|
||||||
|
{
|
||||||
|
if (logicnum == LF_PCON)
|
||||||
|
{
|
||||||
|
_key1_fields.add(new TFieldref(PCN_GRUPPO, LF_PCON));
|
||||||
|
_picture.add("999");
|
||||||
|
_prompt.add("Gruppo");
|
||||||
|
|
||||||
|
_key1_fields.add(new TFieldref(PCN_CONTO, LF_PCON));
|
||||||
|
_picture.add("999");
|
||||||
|
_prompt.add("Conto");
|
||||||
|
|
||||||
|
_key1_fields.add(new TFieldref(PCN_SOTTOCONTO, LF_PCON));
|
||||||
|
_picture.add("999999");
|
||||||
|
_prompt.add("Sottoconto");
|
||||||
|
|
||||||
|
_key2_fields.add(new TFieldref(PCN_DESCR, LF_PCON));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
TConfig cfg(CONFIG_DITTA);
|
||||||
|
|
||||||
|
TString16 keyvar, desvar;
|
||||||
|
get_cfg_vars(keyvar, desvar);
|
||||||
|
|
||||||
|
int from = 1, to = 1;
|
||||||
|
for (int level = 1; ; level++)
|
||||||
|
{
|
||||||
|
const TString& prompt = cfg.get(desvar, NULL, level);
|
||||||
|
if (prompt.blank())
|
||||||
|
break;
|
||||||
|
_prompt.add(prompt);
|
||||||
|
|
||||||
|
const TString& picture = cfg.get(keyvar, NULL, level);
|
||||||
|
_picture.add(picture);
|
||||||
|
|
||||||
|
const int keylen = picture.len();
|
||||||
|
to = from+keylen-1;
|
||||||
|
add_fieldref(1, from, to);
|
||||||
|
from = to+1;
|
||||||
|
}
|
||||||
|
add_fieldref(2, 0, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const TMultilevel_code_info& multilevel_code_info(int logicnum)
|
||||||
|
{
|
||||||
|
static TArray* cache = NULL;
|
||||||
|
if (cache == NULL)
|
||||||
|
cache = new TArray;
|
||||||
|
TMultilevel_code_info* info = (TMultilevel_code_info*)cache->objptr(logicnum);
|
||||||
|
if (info == NULL)
|
||||||
|
{
|
||||||
|
info = new TMultilevel_code_info(logicnum);
|
||||||
|
cache->add(info, logicnum);
|
||||||
|
}
|
||||||
|
return *info;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool test_multilevel_field(TEdit_field& fld, int level)
|
||||||
|
{
|
||||||
|
const int logic = fld.browse()->cursor()->curr().num();
|
||||||
|
const TMultilevel_code_info& info = multilevel_code_info(logic);
|
||||||
|
const TString& pic = info.picture(level);
|
||||||
|
const TString& val = fld.get();
|
||||||
|
|
||||||
|
bool ok = val.len() <= pic.len();
|
||||||
|
for (int i = 0; val[i] && ok; i++)
|
||||||
|
{
|
||||||
|
const char v = val[i];
|
||||||
|
const char p = pic[i];
|
||||||
|
switch (p)
|
||||||
|
{
|
||||||
|
case 'A': ok = (v >= '0' && v <= '9') || (v >= 'A' && v <= 'Z'); break;
|
||||||
|
case '0':
|
||||||
|
case '9': ok = v >= '0' && v <= '9'; break;
|
||||||
|
default : break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!ok)
|
||||||
|
{
|
||||||
|
TString msg;
|
||||||
|
msg << TR("Il codice non rispetta il formato impostato nella configurazione")
|
||||||
|
<< '\n' << val << " <> " << pic;
|
||||||
|
return fld.error_box(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ok;
|
||||||
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
// TAnal_tree
|
// TAnal_tree
|
||||||
@ -32,9 +187,6 @@ void TAnal_tree_pos::reset()
|
|||||||
class TAnal_tree : public TBidirectional_tree
|
class TAnal_tree : public TBidirectional_tree
|
||||||
{
|
{
|
||||||
TLocalisamfile* _file;
|
TLocalisamfile* _file;
|
||||||
const TArray& _key1_fields;
|
|
||||||
const TArray& _key2_fields;
|
|
||||||
|
|
||||||
TAnal_tree_pos _curr;
|
TAnal_tree_pos _curr;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@ -50,7 +202,6 @@ protected:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
void update_curr();
|
void update_curr();
|
||||||
const char* get_key_field(int key = 1) const;
|
|
||||||
int level_of(const TToken_string& key) const;
|
int level_of(const TToken_string& key) const;
|
||||||
int level_of_file() const;
|
int level_of_file() const;
|
||||||
const TToken_string& curr_of_file() const;
|
const TToken_string& curr_of_file() const;
|
||||||
@ -63,7 +214,7 @@ protected:
|
|||||||
public:
|
public:
|
||||||
virtual bool goto_root();
|
virtual bool goto_root();
|
||||||
|
|
||||||
TAnal_tree(int logicnum, const char* tabname, const TArray& key1, const TArray& key2);
|
TAnal_tree(int logicnum);
|
||||||
virtual ~TAnal_tree();
|
virtual ~TAnal_tree();
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -73,20 +224,27 @@ public:
|
|||||||
|
|
||||||
#define F_TREE 99
|
#define F_TREE 99
|
||||||
|
|
||||||
short TAnal_msk::get_field_id(int n, int k) const
|
short TSimple_anal_msk::get_field_id(int n, int k) const
|
||||||
{
|
{
|
||||||
short id = 0;
|
short id = 0;
|
||||||
if (n >= 0 && n < fieldrefs(1))
|
if (n >= 0 && n < fieldrefs(1))
|
||||||
{
|
{
|
||||||
if (k == 2)
|
if (k == 1)
|
||||||
id = F_DES1+n;
|
|
||||||
else
|
|
||||||
id = F_KEY1+n;
|
id = F_KEY1+n;
|
||||||
|
else
|
||||||
|
id = F_DES1+n;
|
||||||
}
|
}
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TAnal_msk::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
bool TSimple_anal_msk::test_key_field(short id)
|
||||||
|
{
|
||||||
|
TEdit_field& fld = efield(id);
|
||||||
|
const int level = id - F_KEY1;
|
||||||
|
return test_multilevel_field(fld, level);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TSimple_anal_msk::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||||||
{
|
{
|
||||||
switch (o.dlg())
|
switch (o.dlg())
|
||||||
{
|
{
|
||||||
@ -116,13 +274,20 @@ bool TAnal_msk::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
|||||||
beep(0);
|
beep(0);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case F_KEY1:
|
||||||
|
case F_KEY2:
|
||||||
|
case F_KEY3:
|
||||||
|
case F_KEY4:
|
||||||
|
if (e == fe_modify || e == fe_close)
|
||||||
|
return test_key_field(o.dlg());
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
int TAnal_msk::compute_offset() const
|
int TSimple_anal_msk::compute_offset() const
|
||||||
{
|
{
|
||||||
int delta = 0;
|
int delta = 0;
|
||||||
RCT rct; xvt_vobj_get_client_rect(TASK_WIN, &rct);
|
RCT rct; xvt_vobj_get_client_rect(TASK_WIN, &rct);
|
||||||
@ -131,7 +296,7 @@ int TAnal_msk::compute_offset() const
|
|||||||
return delta;
|
return delta;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TAnal_msk::read(const char* name)
|
void TSimple_anal_msk::read(const char* name)
|
||||||
{
|
{
|
||||||
const int delta = compute_offset();
|
const int delta = compute_offset();
|
||||||
|
|
||||||
@ -181,6 +346,7 @@ void TAnal_msk::read(const char* name)
|
|||||||
|
|
||||||
read_mask(outname, 0, 0);
|
read_mask(outname, 0, 0);
|
||||||
xvt_fsys_removefile(outname);
|
xvt_fsys_removefile(outname);
|
||||||
|
set_source_file(name);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
read_mask(name, 0, 0);
|
read_mask(name, 0, 0);
|
||||||
@ -189,12 +355,7 @@ void TAnal_msk::read(const char* name)
|
|||||||
create_tree_field();
|
create_tree_field();
|
||||||
}
|
}
|
||||||
|
|
||||||
int TAnal_msk::create_key_fields()
|
short TSimple_anal_msk::create_tree_field()
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
short TAnal_msk::create_tree_field()
|
|
||||||
{
|
{
|
||||||
short id = 0;
|
short id = 0;
|
||||||
const int delta = compute_offset();
|
const int delta = compute_offset();
|
||||||
@ -203,7 +364,7 @@ short TAnal_msk::create_tree_field()
|
|||||||
id = F_TREE;
|
id = F_TREE;
|
||||||
add_tree(id, 0, 0, 1, (delta-1)*2, -1);
|
add_tree(id, 0, 0, 1, (delta-1)*2, -1);
|
||||||
|
|
||||||
TAnal_tree* t = new TAnal_tree(get_logicnum(), get_tabname(), _key1_fields, _key2_fields);
|
TAnal_tree* t = new TAnal_tree(get_logicnum());
|
||||||
tfield(id).set_tree(t);
|
tfield(id).set_tree(t);
|
||||||
t->goto_root();
|
t->goto_root();
|
||||||
t->expand();
|
t->expand();
|
||||||
@ -212,7 +373,7 @@ short TAnal_msk::create_tree_field()
|
|||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TAnal_msk::update_tree_field()
|
void TSimple_anal_msk::update_tree_field()
|
||||||
{
|
{
|
||||||
const int pos = id2pos(F_TREE);
|
const int pos = id2pos(F_TREE);
|
||||||
if (pos >= 0)
|
if (pos >= 0)
|
||||||
@ -222,31 +383,25 @@ void TAnal_msk::update_tree_field()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void TAnal_msk::add_fieldref(const char* name, int from, int to, int key)
|
int TSimple_anal_msk::fieldrefs(int k) const
|
||||||
{
|
{
|
||||||
TArray& a = key == 1 ? _key1_fields : _key2_fields;
|
int n = 1;
|
||||||
TString80 str; str << name;
|
if (k == 1)
|
||||||
if (from > 0)
|
{
|
||||||
str << '[' << from << ',' << to << ']';
|
const TMultilevel_code_info& mci = multilevel_code_info(get_logicnum());
|
||||||
|
n = mci.levels();
|
||||||
TFieldref* fr = new TFieldref(str, get_logicnum());
|
}
|
||||||
a.add(fr);
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
int TAnal_msk::fieldrefs(int k) const
|
const TFieldref& TSimple_anal_msk::fieldref(int n, int k) const
|
||||||
{
|
{
|
||||||
const TArray& a = k == 1 ? _key1_fields : _key2_fields;
|
const TMultilevel_code_info& mci = multilevel_code_info(get_logicnum());
|
||||||
return a.items();
|
return mci.fieldref(n, k);
|
||||||
}
|
|
||||||
|
|
||||||
const TFieldref& TAnal_msk::fieldref(int n, int k) const
|
|
||||||
{
|
|
||||||
const TArray& a = k == 1 ? _key1_fields : _key2_fields;
|
|
||||||
return (const TFieldref&)a[n];
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const TToken_string& TAnal_msk::get_key_value(const TRectype& rec, int c) const
|
const TToken_string& TSimple_anal_msk::get_key_value(const TRectype& rec, int c) const
|
||||||
{
|
{
|
||||||
TToken_string& val = get_tmp_string();
|
TToken_string& val = get_tmp_string();
|
||||||
const int tot = fieldrefs(c);
|
const int tot = fieldrefs(c);
|
||||||
@ -258,7 +413,7 @@ const TToken_string& TAnal_msk::get_key_value(const TRectype& rec, int c) const
|
|||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
const TToken_string& TAnal_msk::get_key_value(int c) const
|
const TToken_string& TSimple_anal_msk::get_key_value(int c) const
|
||||||
{
|
{
|
||||||
TToken_string& val = get_tmp_string();
|
TToken_string& val = get_tmp_string();
|
||||||
for (TEditable_field* f = get_key_field(c, true); f != NULL; f = get_key_field(c, false))
|
for (TEditable_field* f = get_key_field(c, true); f != NULL; f = get_key_field(c, false))
|
||||||
@ -268,6 +423,155 @@ const TToken_string& TAnal_msk::get_key_value(int c) const
|
|||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char* TSimple_anal_msk::get_key_fieldname(int k) const
|
||||||
|
{
|
||||||
|
const int logic = get_logicnum();
|
||||||
|
const RecDes& rd = prefix().get_recdes(logic);
|
||||||
|
CHECKD(k > 0 && k <= rd.NKeys, "Invalid key ", k);
|
||||||
|
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 TSimple_anal_msk::append_select_clause(ostream& out, int level) const
|
||||||
|
{
|
||||||
|
const TFieldref& key = fieldref(level, 1);
|
||||||
|
|
||||||
|
TString str;
|
||||||
|
str << " SE STR(";
|
||||||
|
if (level > 1)
|
||||||
|
str << "(NUM(LEN(" << key.name() << "))>" << key.from() << ')'; // SE LEN(CODCONTO)>=4
|
||||||
|
if (level < fieldrefs())
|
||||||
|
{
|
||||||
|
if (level > 1) str << "&&";
|
||||||
|
str << "(NUM(LEN(" << key.name() << "))<=" << key.to() << ')'; // SE LEN(CODCONTO)<=7
|
||||||
|
}
|
||||||
|
str << ')';
|
||||||
|
out << str << endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TSimple_anal_msk::create_key_browse(TEdit_field& kfld, int level)
|
||||||
|
{
|
||||||
|
TFilename tmp; tmp.temp();
|
||||||
|
ofstream out(tmp);
|
||||||
|
|
||||||
|
const int logic = get_logicnum();
|
||||||
|
out << "US " << get_logicnum() << " KE 1";
|
||||||
|
append_select_clause(out, level);
|
||||||
|
out << "KE 1" << endl;
|
||||||
|
|
||||||
|
const TMultilevel_code_info& mci = multilevel_code_info(logic);
|
||||||
|
|
||||||
|
for (int i = 0; i <= level; i++)
|
||||||
|
{
|
||||||
|
const TString& picture = mci.picture(i);
|
||||||
|
const TString& prompt = mci.prompt(i);
|
||||||
|
const TFieldref& field = mci.fieldref(i, 1);
|
||||||
|
const int length = field.to() - field.from();
|
||||||
|
out << "IN " << field << ' ' << get_field_id(i, 1) << endl;
|
||||||
|
out << "DI \"" << prompt << '@' << length << "\" " << field << endl;
|
||||||
|
out << "OU " << get_field_id(i, 1) << ' ' << field << endl;
|
||||||
|
if (i == level)
|
||||||
|
out << "FI " << field << endl;
|
||||||
|
}
|
||||||
|
const TFieldref& field = mci.fieldref(0, 2);
|
||||||
|
out << "DI \"" << TR("Descrizione") << "@50\" " << field << endl;
|
||||||
|
out << "OU " << get_field_id(level, 2) << ' ' << field << endl;
|
||||||
|
out << "CH " << (level == 1 ? "RE" : "NO") << endl;
|
||||||
|
out << "EN" << endl;
|
||||||
|
out.close();
|
||||||
|
|
||||||
|
TScanner scan(tmp);
|
||||||
|
while (scan.pop() != "EN")
|
||||||
|
kfld.parse_item(scan);
|
||||||
|
|
||||||
|
xvt_fsys_removefile(tmp);
|
||||||
|
}
|
||||||
|
|
||||||
|
void TSimple_anal_msk::create_des_browse(TEdit_field& kfld, int level)
|
||||||
|
{
|
||||||
|
TString key2; key2 << fieldref(0, 2);
|
||||||
|
|
||||||
|
TFilename tmp; tmp.temp();
|
||||||
|
ofstream out(tmp);
|
||||||
|
const int logic = get_logicnum();
|
||||||
|
out << "US " << get_logicnum() << " KE 2";
|
||||||
|
append_select_clause(out, level);
|
||||||
|
out << "KE 2" << endl;
|
||||||
|
out << "IN " << key2 << ' ' << kfld.dlg() << endl;
|
||||||
|
out << "DI \"" << TR("Descrizione") << "@50\" " << key2 << endl;
|
||||||
|
out << "OU " << kfld.dlg() << ' ' << key2 << endl;
|
||||||
|
|
||||||
|
const TMultilevel_code_info& mci = multilevel_code_info(logic);
|
||||||
|
|
||||||
|
for (int i = 0; i <= level; i++)
|
||||||
|
{
|
||||||
|
const TString& picture = mci.picture(i);
|
||||||
|
const TString& prompt = mci.prompt(i);
|
||||||
|
const TFieldref& field = mci.fieldref(i, 1);
|
||||||
|
const int length = field.to() - field.from();
|
||||||
|
out << "DI \"" << prompt << '@' << length << "\" " << field << endl;
|
||||||
|
out << "OU " << get_field_id(i, 1) << ' ' << field << endl;
|
||||||
|
}
|
||||||
|
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 TSimple_anal_msk::create_key_fields()
|
||||||
|
{
|
||||||
|
const TMultilevel_code_info& mci = multilevel_code_info(get_logicnum());
|
||||||
|
|
||||||
|
int maxkeylen = 0, maxdeslen = 0;
|
||||||
|
for (int level = 0; level < mci.levels(); level++)
|
||||||
|
{
|
||||||
|
const TString& prompt = mci.prompt(level);
|
||||||
|
const int deslen = prompt.len();
|
||||||
|
const int keylen = mci.len(level);
|
||||||
|
if (deslen > maxdeslen) maxdeslen = deslen;
|
||||||
|
if (keylen > maxkeylen) maxkeylen = keylen;
|
||||||
|
}
|
||||||
|
|
||||||
|
maxdeslen++;
|
||||||
|
const int tab0 = compute_offset()+2;
|
||||||
|
const int tab1 = tab0 + maxdeslen + maxkeylen + 4;
|
||||||
|
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < level; i++)
|
||||||
|
{
|
||||||
|
const short kid = get_field_id(i, 1);
|
||||||
|
CHECKD(kid > 100, "Invalid field id:", kid);
|
||||||
|
|
||||||
|
const TString& picture = mci.picture(i);
|
||||||
|
TString80 prompt = mci.prompt(i);
|
||||||
|
prompt.left_just(maxdeslen);
|
||||||
|
|
||||||
|
TEdit_field* kfld = NULL;
|
||||||
|
const char* flags = picture[0] == '0' ? "BUZ" : "BU";
|
||||||
|
if (picture.find('A') < 0) // Numeric
|
||||||
|
kfld = &add_string(kid, 0, prompt, tab0, i+1, picture.len(), flags);
|
||||||
|
else
|
||||||
|
kfld = &add_string(kid, 0, prompt, tab0, i+1, picture.len(), flags);
|
||||||
|
create_key_browse(*kfld, i);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < level; i++)
|
||||||
|
{
|
||||||
|
const short did = get_field_id(i, 2);
|
||||||
|
TEdit_field& dfld = add_string(did, 0, "", tab1, i+1, 50, "B", 72+tab0-tab1);
|
||||||
|
create_des_browse(dfld, i);
|
||||||
|
}
|
||||||
|
|
||||||
|
return level;
|
||||||
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
// TAnal_tree
|
// TAnal_tree
|
||||||
@ -275,11 +579,14 @@ const TToken_string& TAnal_msk::get_key_value(int c) const
|
|||||||
|
|
||||||
const TToken_string& TAnal_tree::curr_of_file() const
|
const TToken_string& TAnal_tree::curr_of_file() const
|
||||||
{
|
{
|
||||||
TToken_string& k = get_tmp_string();
|
const TMultilevel_code_info& mci = multilevel_code_info(_file->num());
|
||||||
const TRectype& rec = _file->curr();
|
const TRectype& rec = _file->curr();
|
||||||
for (int i = 0; i < max_level(); i++)
|
|
||||||
|
TToken_string& k = get_tmp_string();
|
||||||
|
|
||||||
|
for (int i = 0; i < mci.levels(); i++)
|
||||||
{
|
{
|
||||||
const TFieldref& fld = (const TFieldref&)_key1_fields[i];
|
const TFieldref& fld = mci.fieldref(i);
|
||||||
k.add(fld.read(rec));
|
k.add(fld.read(rec));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -312,7 +619,8 @@ int TAnal_tree::curr_level() const
|
|||||||
|
|
||||||
int TAnal_tree::max_level() const
|
int TAnal_tree::max_level() const
|
||||||
{
|
{
|
||||||
return _key1_fields.items();
|
const TMultilevel_code_info& mci = multilevel_code_info(_file->num());
|
||||||
|
return mci.levels();
|
||||||
}
|
}
|
||||||
|
|
||||||
const TToken_string& TAnal_tree::father_of(const TToken_string& key) const
|
const TToken_string& TAnal_tree::father_of(const TToken_string& key) const
|
||||||
@ -428,10 +736,11 @@ bool TAnal_tree::goto_father()
|
|||||||
TRectype& rec = _file->curr();
|
TRectype& rec = _file->curr();
|
||||||
rec.zero();
|
rec.zero();
|
||||||
|
|
||||||
|
const TMultilevel_code_info& mci = multilevel_code_info(_file->num());
|
||||||
for (int i = 0; i < lev-1; i++)
|
for (int i = 0; i < lev-1; i++)
|
||||||
{
|
{
|
||||||
const char* val = _curr._key.get(i);
|
const char* val = _curr._key.get(i);
|
||||||
const TFieldref& fld = (const TFieldref&)_key1_fields[i];
|
const TFieldref& fld = mci.fieldref(i);
|
||||||
fld.write(val, rec);
|
fld.write(val, rec);
|
||||||
}
|
}
|
||||||
ok = _file->read() == NOERR;
|
ok = _file->read() == NOERR;
|
||||||
@ -476,21 +785,19 @@ bool TAnal_tree::get_description(TString& desc) const
|
|||||||
const int lev = _curr.level();
|
const int lev = _curr.level();
|
||||||
if (lev > 0)
|
if (lev > 0)
|
||||||
{
|
{
|
||||||
const TFieldref& fld1 = (const TFieldref&)_key1_fields[lev-1];
|
const TMultilevel_code_info& mci = multilevel_code_info(_file->num());
|
||||||
const TFieldref& fld2 = (const TFieldref&)_key2_fields[0];
|
const TFieldref& fld1 = mci.fieldref(lev-1, 1);
|
||||||
desc = fld1.read(_file->curr());
|
const TFieldref& fld2 = mci.fieldref(0, 2);
|
||||||
desc << ' ' << fld2.read(_file->curr());
|
const TRectype& rec = _file->curr();
|
||||||
|
desc = fld1.read(rec);
|
||||||
|
desc << ' ' << fld2.read(rec);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
TAnal_tree::TAnal_tree(int logicnum, const char* tabname, const TArray& key1, const TArray& key2)
|
TAnal_tree::TAnal_tree(int logicnum)
|
||||||
: _key1_fields(key1), _key2_fields(key2)
|
|
||||||
{
|
{
|
||||||
if (tabname && *tabname)
|
|
||||||
_file = new TTable(tabname);
|
|
||||||
else
|
|
||||||
_file = new TLocalisamfile(logicnum);
|
_file = new TLocalisamfile(logicnum);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -499,173 +806,6 @@ TAnal_tree::~TAnal_tree()
|
|||||||
delete _file;
|
delete _file;
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////
|
|
||||||
// TSimple_anal_msk
|
|
||||||
///////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
const char* TSimple_anal_msk::get_key_fieldname(int k) const
|
|
||||||
{
|
|
||||||
const int logic = get_logicnum();
|
|
||||||
const RecDes& rd = prefix().get_recdes(logic);
|
|
||||||
CHECKD(k > 0 && k <= rd.NKeys, "Invalid key ", k);
|
|
||||||
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 TSimple_anal_msk::append_select_clause(ostream& out, int level) const
|
|
||||||
{
|
|
||||||
const TFieldref& key = fieldref(level-1, 1);
|
|
||||||
|
|
||||||
TString str;
|
|
||||||
str << " SE STR(";
|
|
||||||
if (level > 1)
|
|
||||||
str << "(NUM(LEN(" << key.name() << "))>" << key.from() << ')'; // SE LEN(CODCONTO)>=4
|
|
||||||
if (level < fieldrefs())
|
|
||||||
{
|
|
||||||
if (level > 1) str << "&&";
|
|
||||||
str << "(NUM(LEN(" << key.name() << "))<=" << key.to() << ')'; // SE LEN(CODCONTO)<=7
|
|
||||||
}
|
|
||||||
str << ')';
|
|
||||||
out << str << endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
void TSimple_anal_msk::create_key_browse(TEdit_field& kfld, int level, TConfig& cfg)
|
|
||||||
{
|
|
||||||
TFilename tmp; tmp.temp();
|
|
||||||
ofstream out(tmp);
|
|
||||||
|
|
||||||
const int logic = get_logicnum();
|
|
||||||
out << "US ";
|
|
||||||
if (logic == LF_TAB || logic == LF_TABCOM)
|
|
||||||
out << get_tabname();
|
|
||||||
else
|
|
||||||
out << get_logicnum();
|
|
||||||
out << " KE 1";
|
|
||||||
append_select_clause(out, level);
|
|
||||||
out << "KE 1" << endl;
|
|
||||||
|
|
||||||
for (int i = 1; i <= level; i++)
|
|
||||||
{
|
|
||||||
const TString& picture = cfg.get(get_key_var(), NULL, i);
|
|
||||||
const TString& prompt = cfg.get(get_des_var(), NULL, i);
|
|
||||||
const TFieldref& field = fieldref(i-1, 1);
|
|
||||||
const int length = field.to() - field.from();
|
|
||||||
out << "IN " << field << ' ' << get_field_id(i-1, 1) << endl;
|
|
||||||
out << "DI \"" << prompt << '@' << length << "\" " << field << endl;
|
|
||||||
out << "OU " << get_field_id(i-1, 1) << ' ' << field << endl;
|
|
||||||
if (i == level)
|
|
||||||
out << "FI " << field << endl;
|
|
||||||
}
|
|
||||||
const TFieldref& field = fieldref(0, 2);
|
|
||||||
out << "DI \"Descrizione@50\" " << fieldref(0, 2) << endl;
|
|
||||||
out << "OU " << get_field_id(level-1, 2) << ' ' << field << endl;
|
|
||||||
out << "CH " << (level == 1 ? "RE" : "NO") << endl;
|
|
||||||
out << "EN" << endl;
|
|
||||||
out.close();
|
|
||||||
|
|
||||||
TScanner scan(tmp);
|
|
||||||
while (scan.pop() != "EN")
|
|
||||||
kfld.parse_item(scan);
|
|
||||||
|
|
||||||
xvt_fsys_removefile(tmp);
|
|
||||||
}
|
|
||||||
|
|
||||||
void TSimple_anal_msk::create_des_browse(TEdit_field& kfld, int level, TConfig& cfg)
|
|
||||||
{
|
|
||||||
TString key2; key2 << fieldref(0, 2);
|
|
||||||
|
|
||||||
TFilename tmp; tmp.temp();
|
|
||||||
ofstream out(tmp);
|
|
||||||
const int logic = get_logicnum();
|
|
||||||
out << "US ";
|
|
||||||
if (logic == LF_TAB || logic == LF_TABCOM)
|
|
||||||
out << get_tabname();
|
|
||||||
else
|
|
||||||
out << get_logicnum();
|
|
||||||
out << " KE 2";
|
|
||||||
append_select_clause(out, level);
|
|
||||||
out << "KE 2" << endl;
|
|
||||||
out << "DI \"Descrizione@50\" " << key2 << endl;
|
|
||||||
out << "IN " << key2 << ' ' << kfld.dlg() << endl;
|
|
||||||
out << "OU " << kfld.dlg() << ' ' << key2 << endl;
|
|
||||||
|
|
||||||
int from = 1, to = 1;
|
|
||||||
for (int i = 1; i <= level; i++)
|
|
||||||
{
|
|
||||||
const TString& picture = cfg.get(get_key_var(), NULL, i);
|
|
||||||
const TString& prompt = cfg.get(get_des_var(), NULL, i);
|
|
||||||
const TFieldref& field = fieldref(i-1, 1);
|
|
||||||
const int length = field.to() - field.from();
|
|
||||||
out << "DI \"" << prompt << '@' << length << "\" " << field << endl;
|
|
||||||
out << "OU " << get_field_id(i-1, 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 TSimple_anal_msk::create_key_fields()
|
|
||||||
{
|
|
||||||
TConfig cfg(CONFIG_DITTA, "ca");
|
|
||||||
const char* keyvar = get_key_var();
|
|
||||||
const char* desvar = get_des_var();
|
|
||||||
|
|
||||||
int maxkeylen = 0, maxdeslen = 0;
|
|
||||||
int level;
|
|
||||||
int from = 1, to = 1;
|
|
||||||
for (level = 1; ; level++)
|
|
||||||
{
|
|
||||||
const TString& prompt = cfg.get(desvar, NULL, level);
|
|
||||||
if (prompt.blank())
|
|
||||||
break;
|
|
||||||
const TString& picture = cfg.get(keyvar, 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;
|
|
||||||
add_fieldref(get_key_fieldname(1), from, to, 1);
|
|
||||||
from = to+1;
|
|
||||||
}
|
|
||||||
add_fieldref(get_key_fieldname(2), 0, 0, 2);
|
|
||||||
|
|
||||||
maxdeslen++;
|
|
||||||
const int tab0 = compute_offset()+2;
|
|
||||||
const int tab1 = tab0 + maxdeslen + maxkeylen + 4;
|
|
||||||
|
|
||||||
int i;
|
|
||||||
for (i = 1; i < level; i++)
|
|
||||||
{
|
|
||||||
const short kid = get_field_id(i-1, 1);
|
|
||||||
CHECKD(kid > 100, "Invalid field id:", kid);
|
|
||||||
|
|
||||||
const TString& picture = cfg.get(keyvar, NULL, i);
|
|
||||||
TString80 prompt = cfg.get(desvar, NULL, i);
|
|
||||||
prompt.left_just(maxdeslen);
|
|
||||||
TEdit_field& kfld = add_string(kid, 0, prompt, tab0, i, picture.len(), "BU");
|
|
||||||
create_key_browse(kfld, i, cfg);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 1; i < level; i++)
|
|
||||||
{
|
|
||||||
const short did = get_field_id(i-1, 2);
|
|
||||||
TEdit_field& dfld = add_string(did, 0, "", tab1, i, 50, "B", 72+tab0-tab1);
|
|
||||||
create_des_browse(dfld, i, cfg);
|
|
||||||
}
|
|
||||||
|
|
||||||
return level;
|
|
||||||
}
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
// TAnal_app
|
// TAnal_app
|
||||||
@ -726,7 +866,7 @@ bool TAnal_app::user_create()
|
|||||||
|
|
||||||
void TAnal_app::init_query_mode(TMask& mask)
|
void TAnal_app::init_query_mode(TMask& mask)
|
||||||
{
|
{
|
||||||
TAnal_msk& m = (TAnal_msk&)mask;
|
TSimple_anal_msk& m = (TSimple_anal_msk&)mask;
|
||||||
for (int i = 0; ; i++)
|
for (int i = 0; ; i++)
|
||||||
{
|
{
|
||||||
const short id = m.get_field_id(i, 1);
|
const short id = m.get_field_id(i, 1);
|
||||||
|
70
ca/calib01.h
70
ca/calib01.h
@ -9,26 +9,56 @@
|
|||||||
#include <relapp.h>
|
#include <relapp.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////
|
class TMultilevel_code_info : public TObject
|
||||||
// TAnal_msk
|
|
||||||
///////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
class TAnal_msk : public TAutomask
|
|
||||||
{
|
{
|
||||||
|
int _logicnum;
|
||||||
|
TString_array _prompt;
|
||||||
|
TString_array _picture;
|
||||||
TArray _key1_fields;
|
TArray _key1_fields;
|
||||||
TArray _key2_fields;
|
TArray _key2_fields;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void add_fieldref(const char* name, int from, int to, int key = 1);
|
bool get_cfg_vars(TString& key, TString& des) const;
|
||||||
|
const char* get_key_fieldname(int k = 1) const;
|
||||||
|
void add_fieldref(int k, int from, int to);
|
||||||
|
|
||||||
|
public:
|
||||||
|
int levels() const;
|
||||||
|
int len(int level) const;
|
||||||
|
const TString& picture(int level) const;
|
||||||
|
const TString& prompt(int level) const;
|
||||||
|
const TFieldref& fieldref(int level, int key = 1) const;
|
||||||
|
|
||||||
|
TMultilevel_code_info(int logicnum);
|
||||||
|
virtual ~TMultilevel_code_info() { }
|
||||||
|
};
|
||||||
|
|
||||||
|
const TMultilevel_code_info& multilevel_code_info(int logicnum);
|
||||||
|
bool test_multilevel_field(TEdit_field& fld, int level);
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
// TSimple_anal_msk
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
class TSimple_anal_msk : public TAutomask
|
||||||
|
{
|
||||||
protected:
|
protected:
|
||||||
|
bool test_key_field(short id);
|
||||||
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
||||||
virtual void read(const char* msk);
|
virtual void read(const char* msk);
|
||||||
|
|
||||||
|
const char* get_key_fieldname(int k) const;
|
||||||
|
|
||||||
|
void append_select_clause(ostream& out, int level) const;
|
||||||
|
void create_key_browse(TEdit_field& kfld, int level);
|
||||||
|
void create_des_browse(TEdit_field& kfld, int level);
|
||||||
virtual int create_key_fields();
|
virtual int create_key_fields();
|
||||||
|
|
||||||
virtual short create_tree_field();
|
virtual short create_tree_field();
|
||||||
int compute_offset() const;
|
int compute_offset() const;
|
||||||
TAnal_msk() { }
|
|
||||||
|
protected:
|
||||||
|
TSimple_anal_msk() { }
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void update_tree_field();
|
void update_tree_field();
|
||||||
@ -37,32 +67,10 @@ public:
|
|||||||
int fieldrefs(int key = 1) const;
|
int fieldrefs(int key = 1) const;
|
||||||
|
|
||||||
virtual int get_logicnum() const pure;
|
virtual int get_logicnum() const pure;
|
||||||
virtual const char* get_tabname() const { return ""; }
|
|
||||||
virtual short get_field_id(int n, int key = 1) const;
|
virtual short get_field_id(int n, int key = 1) const;
|
||||||
|
|
||||||
virtual const TToken_string& get_key_value(const TRectype& rec, int k = 1) const;
|
virtual const TToken_string& get_key_value(const TRectype& rec, int k = 1) const;
|
||||||
virtual const TToken_string& get_key_value(int k = 1) const;
|
virtual const TToken_string& get_key_value(int k = 1) const;
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////
|
|
||||||
// TSimple_anal_msk
|
|
||||||
///////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
class TSimple_anal_msk : public TAnal_msk
|
|
||||||
{
|
|
||||||
protected:
|
|
||||||
virtual const char* get_key_var() const pure;
|
|
||||||
virtual const char* get_des_var() const pure;
|
|
||||||
const char* get_key_fieldname(int k) const;
|
|
||||||
|
|
||||||
void append_select_clause(ostream& out, int level) const;
|
|
||||||
void create_key_browse(TEdit_field& kfld, int level, TConfig& cfg);
|
|
||||||
void create_des_browse(TEdit_field& kfld, int level, TConfig& cfg);
|
|
||||||
virtual int create_key_fields();
|
|
||||||
|
|
||||||
protected:
|
|
||||||
TSimple_anal_msk() { }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
@ -72,7 +80,7 @@ protected:
|
|||||||
class TAnal_app : public TRelation_application
|
class TAnal_app : public TRelation_application
|
||||||
{
|
{
|
||||||
TRelation* _rel;
|
TRelation* _rel;
|
||||||
TAnal_msk* _msk;
|
TSimple_anal_msk* _msk;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual TMask* get_mask(int) { return _msk; }
|
virtual TMask* get_mask(int) { return _msk; }
|
||||||
@ -87,7 +95,7 @@ protected:
|
|||||||
virtual void init_insert_mode(TMask& m);
|
virtual void init_insert_mode(TMask& m);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual TAnal_msk* create_mask() const pure;
|
virtual TSimple_anal_msk* create_mask() const pure;
|
||||||
virtual TRelation* create_relation() const;
|
virtual TRelation* create_relation() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
8
|
8
|
||||||
TIPO|1|1|0|Tipo Ripartizione (<I>nterattiva, <B>atch)+
|
TIPO|1|1|0|Tipo Ripartizione (<I>nterattiva, <B>atch)+
|
||||||
CODICE|1|8|0|Codice ripartizione
|
CODICE|1|8|0|Codice ripartizione
|
||||||
NRIGA|1|3|0|Numero riga
|
NRIGA|2|3|0|Numero riga
|
||||||
CODCOSTO|1|20|0|Codice centro di costo
|
CODCOSTO|1|20|0|Codice centro di costo
|
||||||
CODCMS|1|20|0|Codice commessa
|
CODCMS|1|20|0|Codice commessa
|
||||||
CODFASE|1|10|0|Codice fase
|
CODFASE|1|10|0|Codice fase
|
||||||
|
Loading…
x
Reference in New Issue
Block a user