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