Patch level : 2.2 44
Files correlati : ca0, ca2 Ricompilazione Demo : [ ] Commento : Riveduta e corretta gestione fasi collegate (o no) a commesse o centri di costo git-svn-id: svn://10.65.10.50/trunk@12792 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
		
							parent
							
								
									315d0194fc
								
							
						
					
					
						commit
						a8aa726335
					
				@ -81,7 +81,7 @@ protected:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
  // @cmember Disabilita la verifica del modulo in chiave
 | 
					  // @cmember Disabilita la verifica del modulo in chiave
 | 
				
			||||||
  virtual bool check_autorization() const  { return FALSE; }
 | 
					  virtual bool check_autorization() const { return false; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  virtual bool preprocess_config (TMask& mask, TConfig& config);
 | 
					  virtual bool preprocess_config (TMask& mask, TConfig& config);
 | 
				
			||||||
  virtual bool postprocess_config (TMask& mask, TConfig& config);
 | 
					  virtual bool postprocess_config (TMask& mask, TConfig& config);
 | 
				
			||||||
 | 
				
			|||||||
@ -3,20 +3,34 @@
 | 
				
			|||||||
#include <relapp.h>
 | 
					#include <relapp.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "calib01.h"
 | 
					#include "calib01.h"
 | 
				
			||||||
 | 
					#include "calibmsk.h"
 | 
				
			||||||
#include "ca0700a.h"
 | 
					#include "ca0700a.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
////////////////////////////////////////////////////////////////////////
 | 
					////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
//MASCHERA
 | 
					//MASCHERA
 | 
				
			||||||
////////////////////////////////////////////////////////////////////////
 | 
					////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class TFsc_anal_msk : public TSimple_anal_msk
 | 
					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 bool on_field_event(TOperable_field& o, TField_event e, long jolly);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
  TFsc_anal_msk() { read("ca0700a"); }
 | 
					  TFsc_anal_msk() { read("ca0700a"); }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool TFsc_anal_msk::on_field_event(TOperable_field& o, TField_event e, long jolly)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  const short id = o.dlg();
 | 
				
			||||||
 | 
					  if (id > F_KEY4 && id <= F_KEY4+4)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    const int level = id - F_KEY4 - 1;
 | 
				
			||||||
 | 
					    return ca_test_multilevel_field(efield(id), level);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return TSimple_anal_msk::on_field_event(o, e, jolly);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
////////////////////////////////////////////////////////////////////////
 | 
					////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
//APPLICAZIONE
 | 
					//APPLICAZIONE
 | 
				
			||||||
////////////////////////////////////////////////////////////////////////
 | 
					////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										163
									
								
								ca/ca0800.cpp
									
									
									
									
									
								
							
							
						
						
									
										163
									
								
								ca/ca0800.cpp
									
									
									
									
									
								
							@ -5,6 +5,8 @@
 | 
				
			|||||||
#include "ca0800a.h"
 | 
					#include "ca0800a.h"
 | 
				
			||||||
#include "calib01.h"
 | 
					#include "calib01.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "rrip.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
///////////////////////////////////////////////////////////
 | 
					///////////////////////////////////////////////////////////
 | 
				
			||||||
// TRiparti_msk 
 | 
					// TRiparti_msk 
 | 
				
			||||||
///////////////////////////////////////////////////////////
 | 
					///////////////////////////////////////////////////////////
 | 
				
			||||||
@ -13,6 +15,7 @@ class TRiparti_msk : public TAutomask
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
protected:
 | 
					protected:
 | 
				
			||||||
  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);
 | 
				
			||||||
 | 
					  int create_sheet_fields(int lf, int& y, short& dlg);
 | 
				
			||||||
  void create_sheet();
 | 
					  void create_sheet();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
@ -67,6 +70,7 @@ bool TRiparti_msk::on_field_event(TOperable_field& o, TField_event e, long jolly
 | 
				
			|||||||
  default:
 | 
					  default:
 | 
				
			||||||
    if (e == fe_modify || e == fe_close)
 | 
					    if (e == fe_modify || e == fe_close)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
      const short id = o.dlg();
 | 
					      const short id = o.dlg();
 | 
				
			||||||
      int level = -1;
 | 
					      int level = -1;
 | 
				
			||||||
      if (id >= 202 && id <= 217)
 | 
					      if (id >= 202 && id <= 217)
 | 
				
			||||||
@ -86,27 +90,90 @@ bool TRiparti_msk::on_field_event(TOperable_field& o, TField_event e, long jolly
 | 
				
			|||||||
        TEdit_field& fld = (TEdit_field&)o;
 | 
					        TEdit_field& fld = (TEdit_field&)o;
 | 
				
			||||||
        return ca_test_multilevel_field(fld, level);
 | 
					        return ca_test_multilevel_field(fld, level);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    break;
 | 
					    break;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  return true;
 | 
					  return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int TRiparti_msk::create_sheet_fields(int lf, int& y, short& dlg)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  TSheet_field& sf = sfield(F_SHEET);
 | 
				
			||||||
 | 
					  TMask& sm = sf.sheet_mask();
 | 
				
			||||||
 | 
					  const int h = ca_create_fields(sm, lf, 1, y, dlg, dlg+50);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  for (int i = 0; i < h; i++)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    TEdit_field& fld = sm.efield(dlg+i);
 | 
				
			||||||
 | 
					    int logic = lf;
 | 
				
			||||||
 | 
					    if (logic == LF_FASI)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      const TMultilevel_code_info& fasinfo = ca_multilevel_code_info(LF_FASI);
 | 
				
			||||||
 | 
					      if (fasinfo.parent() != 0)
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        const TMultilevel_code_info& parinfo = ca_multilevel_code_info(fasinfo.parent());
 | 
				
			||||||
 | 
					        if (i < parinfo.levels())
 | 
				
			||||||
 | 
					          logic = fasinfo.parent();
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const char* fieldname = NULL;
 | 
				
			||||||
 | 
					    switch(logic)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					    case LF_CDC     : fieldname = RRIP_CODCOSTO; break;
 | 
				
			||||||
 | 
					    case LF_COMMESSE: fieldname = RRIP_CODCMS;   break;
 | 
				
			||||||
 | 
					    case LF_FASI    : fieldname = RRIP_CODFASE;  break;
 | 
				
			||||||
 | 
					    default         : fieldname = RRIP_CODCONTO; break;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    TFieldref* f = (TFieldref*)fld.field();
 | 
				
			||||||
 | 
					    f->set_name(fieldname);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  y += h+1;
 | 
				
			||||||
 | 
					  dlg += h;
 | 
				
			||||||
 | 
					  return h;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void TRiparti_msk::create_sheet()
 | 
					void TRiparti_msk::create_sheet()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  TSheet_field& sf = sfield(F_SHEET);
 | 
					  TSheet_field& sf = sfield(F_SHEET);
 | 
				
			||||||
  TMask& sm = sf.sheet_mask();
 | 
					  TMask& sm = sf.sheet_mask();
 | 
				
			||||||
 | 
					 | 
				
			||||||
  sm.hide(-1);
 | 
					  sm.hide(-1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const TMultilevel_code_info& fasinfo = ca_multilevel_code_info(LF_FASI);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  TConfig ini(CONFIG_DITTA, "ca");
 | 
					  TConfig ini(CONFIG_DITTA, "ca");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  int y = 1;
 | 
				
			||||||
 | 
					  short dlg = 202;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  for (int i = 0; i < 2; i++)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    const TString& level = ini.get("Level", NULL, i+1);  // Legge il livello 1 o 2
 | 
				
			||||||
 | 
					    if (level == "CDC")                                  // Crea centro di costo 
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      if (fasinfo.parent() == LF_CDC)
 | 
				
			||||||
 | 
					        create_sheet_fields(LF_FASI, y, dlg);
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
					        create_sheet_fields(LF_CDC, y, dlg);
 | 
				
			||||||
 | 
					    } else
 | 
				
			||||||
 | 
					    if (level == "CMS")                                   // Crea commessa
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      if (fasinfo.parent() == LF_COMMESSE)
 | 
				
			||||||
 | 
					        create_sheet_fields(LF_FASI, y, dlg);
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
					        create_sheet_fields(LF_COMMESSE, y, dlg);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (fasinfo.levels() > 0 && fasinfo.parent() <= 0)
 | 
				
			||||||
 | 
					    create_sheet_fields(LF_FASI, y, dlg);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const bool use_pdc = ini.get_bool("UsePdcc");
 | 
					  const bool use_pdc = ini.get_bool("UsePdcc");
 | 
				
			||||||
 | 
					  create_sheet_fields(use_pdc ? LF_PCON : LF_PCONANA, y, dlg);
 | 
				
			||||||
  ca_create_fields(sm, LF_CDC,      1,  1, 202, 252);
 | 
					  
 | 
				
			||||||
  ca_create_fields(sm, LF_COMMESSE, 1,  5, 206, 256);
 | 
					 | 
				
			||||||
  ca_create_fields(sm, LF_FASI,     1,  9, 210, 260);
 | 
					 | 
				
			||||||
  ca_create_fields(sm, use_pdc ? LF_PCON : LF_PCONANA, 1, 13, 214, 264);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  for (short id = 217; id >= 202; id--)
 | 
					  for (short id = 217; id >= 202; id--)
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    const int pos = sm.id2pos(id);
 | 
					    const int pos = sm.id2pos(id);
 | 
				
			||||||
@ -128,8 +195,39 @@ void TRiparti_msk::create_sheet()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
TRiparti_msk::TRiparti_msk() : TAutomask("ca0800a") 
 | 
					TRiparti_msk::TRiparti_msk() : TAutomask("ca0800a") 
 | 
				
			||||||
{  
 | 
					{  
 | 
				
			||||||
  ca_create_fields(*this, LF_CDC,      2,  5, F_CODCDC_1, F_DESCDC_1);
 | 
					  TConfig ini(CONFIG_DITTA, "ca");
 | 
				
			||||||
  ca_create_fields(*this, LF_COMMESSE, 2, 11, F_CODCMS_1, F_DESCMS_1);
 | 
					
 | 
				
			||||||
 | 
					  // Crea gli eventuali campi per commessa e centro di costo
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  int y = 5;
 | 
				
			||||||
 | 
					  for (int i = 0; i < 2; i++)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    const char* prompt = NULL;
 | 
				
			||||||
 | 
					    int h = 0;
 | 
				
			||||||
 | 
					    const TString& level = ini.get("Level", NULL, i+1);  // Legge il livello 1 o 2
 | 
				
			||||||
 | 
					    if (level == "CDC")                                  // Crea centro di costo 
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      h = ca_create_fields(*this, LF_CDC, 2,  y, F_CODCDC_1, F_DESCDC_1);
 | 
				
			||||||
 | 
					      prompt = TR("@bCentro di costo");
 | 
				
			||||||
 | 
					    } else
 | 
				
			||||||
 | 
					    if (level == "CMS")                                   // Crea commessa
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      h = ca_create_fields(*this, LF_COMMESSE, 2, y, F_CODCMS_1, F_DESCMS_1);
 | 
				
			||||||
 | 
					      prompt = TR("@bCommessa");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (prompt != NULL)                                   // Crea groupbox
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      const int last = fields()-1;
 | 
				
			||||||
 | 
					      for (int j = 0; j < 2*h; j++)
 | 
				
			||||||
 | 
					        fld(last-j).set_group(2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      h += 2;
 | 
				
			||||||
 | 
					      TGroup_field& grp = add_groupbox(F_LEVEL_1+i, 0, prompt, 1, y-1, 78, h);
 | 
				
			||||||
 | 
					      grp.set_group(2);
 | 
				
			||||||
 | 
					      y += h;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
  create_sheet();
 | 
					  create_sheet();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -203,7 +301,6 @@ void TRiparti_app::spezza_campo(const TString& str, TToken_string& row, int firs
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
void TRiparti_app::write_rows()
 | 
					void TRiparti_app::write_rows()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  TRectype* key = new TRectype(LF_RRIP);
 | 
					  TRectype* key = new TRectype(LF_RRIP);
 | 
				
			||||||
@ -214,45 +311,53 @@ void TRiparti_app::write_rows()
 | 
				
			|||||||
  TRecord_array a(LF_RRIP, "NRIGA");
 | 
					  TRecord_array a(LF_RRIP, "NRIGA");
 | 
				
			||||||
  a.set_key(key);
 | 
					  a.set_key(key);
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  TConfig ini(CONFIG_DITTA, "ca");
 | 
					 | 
				
			||||||
  const bool use_pdc = ini.get_bool("UsePdcc");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  TSheet_field& sheet = _msk->sfield(F_SHEET);
 | 
					  TSheet_field& sheet = _msk->sfield(F_SHEET);
 | 
				
			||||||
 | 
					  TMask& sm = sheet.sheet_mask();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  FOR_EACH_SHEET_ROW(sheet, i, row)
 | 
					  FOR_EACH_SHEET_ROW(sheet, i, row)
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    TRectype& rec = a.row(i+1, true);  // Crea una riga nuova
 | 
					    TRectype& rec = a.row(i+1, true);  // Crea una riga nuova
 | 
				
			||||||
    rec.put("RIPARTO",  row->get(0));
 | 
					    for (int i = sm.fields()-1; i >= 0; i--)
 | 
				
			||||||
    rec.put("CODCOSTO", somma_campi(*row, 1));
 | 
					    {
 | 
				
			||||||
    rec.put("CODCMS",   somma_campi(*row, 5));
 | 
					      TMask_field& mf = sm.fld(i);
 | 
				
			||||||
    rec.put("CODFASE",  somma_campi(*row, 9));
 | 
					      if (mf.field() != NULL)
 | 
				
			||||||
    rec.put("CODCONTO", somma_campi(*row,13,use_pdc));
 | 
					      {
 | 
				
			||||||
 | 
					        const int idx = sheet.cid2index(mf.dlg());
 | 
				
			||||||
 | 
					        if (idx < 17)
 | 
				
			||||||
 | 
					          mf.field()->write(row->get(idx), rec);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  a.rewrite();
 | 
					  a.rewrite();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void TRiparti_app::read_rows()
 | 
					void TRiparti_app::read_rows()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  TRectype key (LF_RRIP);
 | 
					 | 
				
			||||||
  const char tipo = _msk->get(F_TIPO)[0];
 | 
					  const char tipo = _msk->get(F_TIPO)[0];
 | 
				
			||||||
  key.put("TIPO", tipo);
 | 
					  TToken_string key;
 | 
				
			||||||
  key.put("CODICE", _msk->get(tipo == 'B' ? F_CODICE_B : F_CODICE_I));
 | 
					  key << tipo << '|' << _msk->get(tipo == 'B' ? F_CODICE_B : F_CODICE_I);
 | 
				
			||||||
  TRecord_array a(key, "NRIGA");
 | 
					  TRecord_array a(key, LF_RRIP);
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  TSheet_field& sheet = _msk->sfield(F_SHEET);
 | 
					  TSheet_field& sheet = _msk->sfield(F_SHEET);
 | 
				
			||||||
 | 
					  TMask& sm = sheet.sheet_mask();
 | 
				
			||||||
  sheet.destroy();
 | 
					  sheet.destroy();
 | 
				
			||||||
  for (int i = 1; i <= a.rows(); i++)
 | 
					  for (int i = 1; i <= a.rows(); i++)
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    const TRectype& rec = a.row(i);  
 | 
					 | 
				
			||||||
    TToken_string& row = sheet.row(i-1);
 | 
					    TToken_string& row = sheet.row(i-1);
 | 
				
			||||||
    row = rec.get("RIPARTO");
 | 
					    const TRectype& rec = a.row(i);
 | 
				
			||||||
    spezza_campo(rec.get("CODCOSTO"), row, 1);
 | 
					    for (int i = sm.fields()-1; i >= 0; i--)
 | 
				
			||||||
    spezza_campo(rec.get("CODCMS"),   row, 5);
 | 
					    {
 | 
				
			||||||
    spezza_campo(rec.get("CODFASE"),  row, 9);
 | 
					      TMask_field& mf = sm.fld(i);
 | 
				
			||||||
    spezza_campo(rec.get("CODCONTO"), row,13);
 | 
					      if (mf.field() != NULL)
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        const int idx = sheet.cid2index(mf.dlg());
 | 
				
			||||||
 | 
					        if (idx < 17)
 | 
				
			||||||
 | 
					          row.add(mf.field()->read(rec), idx);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
int TRiparti_app::write(const TMask& m)
 | 
					int TRiparti_app::write(const TMask& m)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  const int err = TRelation_application::write(m);
 | 
					  const int err = TRelation_application::write(m);
 | 
				
			||||||
 | 
				
			|||||||
@ -4,6 +4,8 @@
 | 
				
			|||||||
#define F_DESCRIZ_I  104
 | 
					#define F_DESCRIZ_I  104
 | 
				
			||||||
#define F_DESCRIZ_B  105
 | 
					#define F_DESCRIZ_B  105
 | 
				
			||||||
#define F_TIPORIP    106
 | 
					#define F_TIPORIP    106
 | 
				
			||||||
 | 
					#define F_LEVEL_1    107
 | 
				
			||||||
 | 
					#define F_LEVEL_2    108
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define F_GRUPPO     111
 | 
					#define F_GRUPPO     111
 | 
				
			||||||
#define F_CONTO      112 
 | 
					#define F_CONTO      112 
 | 
				
			||||||
 | 
				
			|||||||
@ -154,18 +154,6 @@ BEGIN
 | 
				
			|||||||
  GROUP 1
 | 
					  GROUP 1
 | 
				
			||||||
END
 | 
					END
 | 
				
			||||||
 | 
					
 | 
				
			||||||
GROUPBOX DLG_NULL 78 6
 | 
					 | 
				
			||||||
BEGIN
 | 
					 | 
				
			||||||
  PROMPT 1 4 "@bCentro di costo"
 | 
					 | 
				
			||||||
  GROUP 2
 | 
					 | 
				
			||||||
END
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
GROUPBOX DLG_NULL 78 6
 | 
					 | 
				
			||||||
BEGIN
 | 
					 | 
				
			||||||
  PROMPT 1 10 "@bCommessa"
 | 
					 | 
				
			||||||
  GROUP 2
 | 
					 | 
				
			||||||
END
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
ENDPAGE
 | 
					ENDPAGE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PAGE "Righe" -1 -1 78 22
 | 
					PAGE "Righe" -1 -1 78 22
 | 
				
			||||||
@ -212,12 +200,16 @@ NUMBER 101 6 2
 | 
				
			|||||||
BEGIN
 | 
					BEGIN
 | 
				
			||||||
  PROMPT 1 0 "% Ripartizione "
 | 
					  PROMPT 1 0 "% Ripartizione "
 | 
				
			||||||
  FLAGS "U"
 | 
					  FLAGS "U"
 | 
				
			||||||
 | 
					  FIELD RIPARTO
 | 
				
			||||||
 | 
					  MESSAGE COPY,201
 | 
				
			||||||
END
 | 
					END
 | 
				
			||||||
 | 
					
 | 
				
			||||||
NUMBER 201 6
 | 
					NUMBER 201 6
 | 
				
			||||||
BEGIN
 | 
					BEGIN
 | 
				
			||||||
  PROMPT 1 0 "Numero parti "
 | 
					  PROMPT 1 0 "Numero parti "
 | 
				
			||||||
  FLAGS "U"
 | 
					  FLAGS "U"
 | 
				
			||||||
 | 
					  FIELD RIPARTO
 | 
				
			||||||
 | 
					  MESSAGE COPY,101
 | 
				
			||||||
END
 | 
					END
 | 
				
			||||||
 | 
					
 | 
				
			||||||
STRING 102 20
 | 
					STRING 102 20
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										294
									
								
								ca/ca2100.cpp
									
									
									
									
									
								
							
							
						
						
									
										294
									
								
								ca/ca2100.cpp
									
									
									
									
									
								
							@ -1,9 +1,7 @@
 | 
				
			|||||||
#include <automask.h>
 | 
					#include <automask.h>
 | 
				
			||||||
#include <defmask.h>
 | 
					#include <defmask.h>
 | 
				
			||||||
#include <recarray.h>
 | 
					 | 
				
			||||||
#include <recset.h>
 | 
					#include <recset.h>
 | 
				
			||||||
#include <relapp.h>
 | 
					#include <relapp.h>
 | 
				
			||||||
#include <statbar.h>
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "ca2.h"
 | 
					#include "ca2.h"
 | 
				
			||||||
#include "ca2100a.h"
 | 
					#include "ca2100a.h"
 | 
				
			||||||
@ -16,13 +14,13 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#include "movana.h"
 | 
					#include "movana.h"
 | 
				
			||||||
#include "rmovana.h"
 | 
					#include "rmovana.h"
 | 
				
			||||||
 | 
					#include "rrip.h"
 | 
				
			||||||
#include "saldana.h"
 | 
					#include "saldana.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class TMovanal_msk : public TAutomask
 | 
					class TMovanal_msk : public TAutomask
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  TAssoc_array _saldi;
 | 
					  TAssoc_array _saldi;
 | 
				
			||||||
  bool _use_pdc;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
protected:
 | 
					protected:
 | 
				
			||||||
  virtual bool on_field_event(TOperable_field& o, TField_event fe, long jolly);
 | 
					  virtual bool on_field_event(TOperable_field& o, TField_event fe, long jolly);
 | 
				
			||||||
@ -31,7 +29,6 @@ protected:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  const TToken_string& rec2key(const TRectype& rec) const;
 | 
					  const TToken_string& rec2key(const TRectype& rec) const;
 | 
				
			||||||
  void aggiorna_saldo_riga(int r);
 | 
					  void aggiorna_saldo_riga(int r);
 | 
				
			||||||
  const TString& somma_campi(TToken_string& row, int first, bool pdc = false) const;
 | 
					 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  // Lettura movimento contabile
 | 
					  // Lettura movimento contabile
 | 
				
			||||||
  TToken_string& get_rip_row(const TRectype& rrip);
 | 
					  TToken_string& get_rip_row(const TRectype& rrip);
 | 
				
			||||||
@ -39,17 +36,20 @@ protected:
 | 
				
			|||||||
  void load_cg_row(const TRectype& row);
 | 
					  void load_cg_row(const TRectype& row);
 | 
				
			||||||
  void load_cg_mov();
 | 
					  void load_cg_mov();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  int create_sheet_fields(int lf, int& y, short& dlg, bool required);
 | 
				
			||||||
 | 
					  void create_sheet();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
  void reset_saldi();
 | 
					  void reset_saldi();
 | 
				
			||||||
  TImporto& saldo(const TRectype& row);
 | 
					  TImporto& saldo(const TRectype& row);
 | 
				
			||||||
  void show_locked_buttons();
 | 
					  void show_locked_buttons();
 | 
				
			||||||
  bool row2rec(int row, TRectype& rec) const;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  bool row2rec(int row, TRectype& rec) const;
 | 
				
			||||||
  void row2imp(const TToken_string& row, TImporto& imp) const;
 | 
					  void row2imp(const TToken_string& row, TImporto& imp) const;
 | 
				
			||||||
  bool row2imp(int r, TImporto& imp) const;
 | 
					  bool row2imp(int r, TImporto& imp) const;
 | 
				
			||||||
  void imp2row(const TImporto& imp, TToken_string& row) const;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  void spezza_campo(const TString& str, TToken_string& row, int first) const;
 | 
					  void imp2row(const TImporto& imp, TToken_string& row) const;
 | 
				
			||||||
 | 
					  TToken_string& rec2row(const TRectype& rec, int i) const;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  TMovanal_msk();
 | 
					  TMovanal_msk();
 | 
				
			||||||
  virtual ~TMovanal_msk() { }
 | 
					  virtual ~TMovanal_msk() { }
 | 
				
			||||||
@ -118,36 +118,35 @@ void TMovanal_msk::show_locked_buttons()
 | 
				
			|||||||
TToken_string& TMovanal_msk::get_rip_row(const TRectype& rrip)
 | 
					TToken_string& TMovanal_msk::get_rip_row(const TRectype& rrip)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  TSheet_field& sheet = sfield(F_RIGHE);
 | 
					  TSheet_field& sheet = sfield(F_RIGHE);
 | 
				
			||||||
  const int pos_cdc = sheet.cid2index(S_CDC1);
 | 
					 | 
				
			||||||
  const int pos_cms = sheet.cid2index(S_CMS1);
 | 
					 | 
				
			||||||
  const int pos_fas = sheet.cid2index(S_FAS1);
 | 
					 | 
				
			||||||
  const int pos_con = sheet.cid2index(S_CON1);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  TToken_string keyrip, keyrow; 
 | 
					  TToken_string keyrip; 
 | 
				
			||||||
  keyrip.add(rrip.get("CODCOSTO"));
 | 
					  keyrip.add(rrip.get(RRIP_CODCOSTO));
 | 
				
			||||||
  keyrip.add(rrip.get("CODCMS"));
 | 
					  keyrip.add(rrip.get(RRIP_CODCMS));
 | 
				
			||||||
  keyrip.add(rrip.get("CODFASE"));
 | 
					  keyrip.add(rrip.get(RRIP_CODFASE));
 | 
				
			||||||
  keyrip.add(rrip.get("CODCONTO"));
 | 
					  keyrip.add(rrip.get(RRIP_CODCONTO));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  TRectype rmov(LF_RMOVANA);
 | 
				
			||||||
  if (sheet.items() > 0)
 | 
					  if (sheet.items() > 0)
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    FOR_EACH_SHEET_ROW(sheet, i, row)
 | 
					    for (int i = 0; i < sheet.items(); i++)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      keyrow = somma_campi(*row, pos_cdc);
 | 
					      row2rec(i, rmov);
 | 
				
			||||||
      keyrow.add(somma_campi(*row, pos_cms));
 | 
					      TToken_string keyrow; 
 | 
				
			||||||
      keyrow.add(somma_campi(*row, pos_fas));
 | 
					      keyrow.add(rmov.get(RMOVANA_CODCCOSTO));
 | 
				
			||||||
      keyrow.add(somma_campi(*row, pos_con, _use_pdc));
 | 
					      keyrow.add(rmov.get(RMOVANA_CODCMS));
 | 
				
			||||||
 | 
					      keyrow.add(rmov.get(RMOVANA_CODFASE));
 | 
				
			||||||
 | 
					      keyrow.add(rmov.get(RMOVANA_CODCONTO));
 | 
				
			||||||
      if (keyrow == keyrip)
 | 
					      if (keyrow == keyrip)
 | 
				
			||||||
        return *row;
 | 
					        return sheet.row(i);  // Ho trovato una riga compatibile
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  TToken_string& row = sheet.row(-1);
 | 
					  // Devo creare una riga nuova
 | 
				
			||||||
  spezza_campo(keyrip.get(0), row, pos_cdc);
 | 
					  rmov.put(RMOVANA_CODCCOSTO, keyrip.get(0));
 | 
				
			||||||
  spezza_campo(keyrip.get(1), row, pos_cms);
 | 
					  rmov.put(RMOVANA_CODCMS, keyrip.get());
 | 
				
			||||||
  spezza_campo(keyrip.get(2), row, pos_fas);
 | 
					  rmov.put(RMOVANA_CODFASE, keyrip.get(0));
 | 
				
			||||||
  spezza_campo(keyrip.get(3), row, pos_con);
 | 
					  rmov.put(RMOVANA_CODCONTO, keyrip.get());
 | 
				
			||||||
 | 
					  TToken_string& row = rec2row(rmov, -1);
 | 
				
			||||||
  return row;
 | 
					  return row;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -208,8 +207,6 @@ void TMovanal_msk::load_cg_row(const TRectype& row)
 | 
				
			|||||||
    imp2row(imp, riga);              // Ci copio l'importo
 | 
					    imp2row(imp, riga);              // Ci copio l'importo
 | 
				
			||||||
    riga.add(row.get(RMV_DESCR), 2); // e la descrizione della riga contabile 
 | 
					    riga.add(row.get(RMV_DESCR), 2); // e la descrizione della riga contabile 
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					 | 
				
			||||||
  statbar_set_title(TASK_WIN, NULL); // Restore mask mode deleted by query stats
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// A partire dal movimento contabile calcola il totale documento ed eventualmente prepara lo sheet
 | 
					// A partire dal movimento contabile calcola il totale documento ed eventualmente prepara lo sheet
 | 
				
			||||||
@ -358,60 +355,17 @@ bool TMovanal_msk::on_field_event(TOperable_field& o, TField_event e, long jolly
 | 
				
			|||||||
  return true;
 | 
					  return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const TString& TMovanal_msk::somma_campi(TToken_string& row, int first, bool pdc) const
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  TSheet_field& sheet = sfield(F_RIGHE);
 | 
					 | 
				
			||||||
  TMask& m = sheet.sheet_mask();
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
  const short id = S_DARE + 100 + first;
 | 
					 | 
				
			||||||
  TString& str = get_tmp_string(20);
 | 
					 | 
				
			||||||
  TString80 token;
 | 
					 | 
				
			||||||
  for (int i = 0; i < 4; i++)
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    if (m.id2pos(id+i) < 0)
 | 
					 | 
				
			||||||
      break;
 | 
					 | 
				
			||||||
    const TEdit_field& fld = m.efield(id+i);
 | 
					 | 
				
			||||||
    token = row.get(first+i);
 | 
					 | 
				
			||||||
    if (pdc)
 | 
					 | 
				
			||||||
      token.right_just(fld.size(), '0');
 | 
					 | 
				
			||||||
    else
 | 
					 | 
				
			||||||
      token.left_just(fld.size());
 | 
					 | 
				
			||||||
    str << token;
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  return str;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void TMovanal_msk::spezza_campo(const TString& str, TToken_string& row, int first) const
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  TSheet_field& sheet = sfield(F_RIGHE);
 | 
					 | 
				
			||||||
  TMask& m = sheet.sheet_mask();
 | 
					 | 
				
			||||||
  TString80 token;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  const short id = 201 + first;
 | 
					 | 
				
			||||||
  int start = 0;
 | 
					 | 
				
			||||||
  for (int i = 0; i < 4; i++)
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    if (m.id2pos(id+i) < 0)
 | 
					 | 
				
			||||||
      break;
 | 
					 | 
				
			||||||
    const TEdit_field& fld = m.efield(id+i);
 | 
					 | 
				
			||||||
    const int len = fld.size();
 | 
					 | 
				
			||||||
    token = str.mid(start, len); token.trim();
 | 
					 | 
				
			||||||
    row.add(token, first+i);
 | 
					 | 
				
			||||||
    start += len;
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// Prende dalla riga r dello sheet i dati da scrivere nel record rec dei movimenti analitici
 | 
					// Prende dalla riga r dello sheet i dati da scrivere nel record rec dei movimenti analitici
 | 
				
			||||||
bool TMovanal_msk::row2rec(int r, TRectype& rec) const
 | 
					bool TMovanal_msk::row2rec(int r, TRectype& rec) const
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  TSheet_field& sheet = sfield(F_RIGHE);
 | 
					  TSheet_field& sheet = sfield(F_RIGHE);
 | 
				
			||||||
  if (r < 0 || r >= sheet.items())
 | 
					  if (r < 0 || r >= sheet.items())
 | 
				
			||||||
    return false;
 | 
					    return false;
 | 
				
			||||||
 | 
					  TMask& sm = sheet.sheet_mask();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  TToken_string& row = sheet.row(r);
 | 
					  TToken_string& row = sheet.row(r);
 | 
				
			||||||
  rec.put(RMOVANA_ANNOES,  get(F_ANNOES));
 | 
					  rec.put(RMOVANA_ANNOES,  get(F_ANNOES));
 | 
				
			||||||
  rec.put(RMOVANA_DATAREG, get(F_DATAREG));
 | 
					  rec.put(RMOVANA_DATAREG, get(F_DATAREG));
 | 
				
			||||||
  rec.put(RMOVANA_DESCR, row.get(sheet.cid2index(S_DESCR)));
 | 
					 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  const real dare = row.get(sheet.cid2index(S_DARE)), avere = row.get();
 | 
					  const real dare = row.get(sheet.cid2index(S_DARE)), avere = row.get();
 | 
				
			||||||
  if (dare.is_zero())
 | 
					  if (dare.is_zero())
 | 
				
			||||||
@ -424,10 +378,17 @@ bool TMovanal_msk::row2rec(int r, TRectype& rec) const
 | 
				
			|||||||
    rec.put(RMOVANA_SEZIONE, 'D');
 | 
					    rec.put(RMOVANA_SEZIONE, 'D');
 | 
				
			||||||
    rec.put(RMOVANA_IMPORTO, dare);
 | 
					    rec.put(RMOVANA_IMPORTO, dare);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  rec.put(RMOVANA_CODCCOSTO, somma_campi(row, sheet.cid2index(S_CDC1)));
 | 
					
 | 
				
			||||||
  rec.put(RMOVANA_CODCMS,    somma_campi(row, sheet.cid2index(S_CMS1)));
 | 
					  for (int i = sm.fields()-1; i >= 2; i--)
 | 
				
			||||||
  rec.put(RMOVANA_CODFASE,   somma_campi(row, sheet.cid2index(S_FAS1)));
 | 
					  {
 | 
				
			||||||
  rec.put(RMOVANA_CODCONTO,  somma_campi(row, sheet.cid2index(S_CON1), _use_pdc));
 | 
					    TMask_field& mf = sm.fld(i);
 | 
				
			||||||
 | 
					    if (mf.field() != NULL)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      const int idx = sheet.cid2index(mf.dlg());
 | 
				
			||||||
 | 
					      if (idx < 17)
 | 
				
			||||||
 | 
					        mf.field()->write(row.get(idx), rec);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  return true;
 | 
					  return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -438,6 +399,32 @@ void TMovanal_msk::imp2row(const TImporto& imp, TToken_string& row) const
 | 
				
			|||||||
  row.add(imp.sezione() == 'A' ? imp.valore().string() : "", 1);
 | 
					  row.add(imp.sezione() == 'A' ? imp.valore().string() : "", 1);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TToken_string& TMovanal_msk::rec2row(const TRectype& rec, int r) const
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  TSheet_field& sheet = sfield(F_RIGHE);
 | 
				
			||||||
 | 
					  TMask& sm = sheet.sheet_mask();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  TToken_string& row = sheet.row(r);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const TImporto imp(rec.get_char(RMOVANA_SEZIONE), rec.get_real(RMOVANA_IMPORTO));
 | 
				
			||||||
 | 
					  imp2row(imp, row);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Carica tutti gli altri campi dopo le colonne Dare/Avere
 | 
				
			||||||
 | 
					  for (int i = sm.fields()-1; i >= 2; i--)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    TMask_field& mf = sm.fld(i);
 | 
				
			||||||
 | 
					    if (mf.field() != NULL)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      const int idx = sheet.cid2index(mf.dlg());
 | 
				
			||||||
 | 
					      if (idx < 17)
 | 
				
			||||||
 | 
					        row.add(mf.field()->read(rec), idx);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return row;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void TMovanal_msk::row2imp(const TToken_string& row, TImporto& imp) const
 | 
					void TMovanal_msk::row2imp(const TToken_string& row, TImporto& imp) const
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@ -529,26 +516,96 @@ void TMovanal_msk::aggiorna_saldo_riga(int r)
 | 
				
			|||||||
  set(F_AVERE, sld.sezione() == 'A' ? sld.valore() : ZERO);
 | 
					  set(F_AVERE, sld.sezione() == 'A' ? sld.valore() : ZERO);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
TMovanal_msk::TMovanal_msk() : TAutomask("ca2100a") 
 | 
					int TMovanal_msk::create_sheet_fields(int lf, int& y, short& dlg, bool required)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  TSheet_field& sf = sfield(F_RIGHE);
 | 
					  TSheet_field& sf = sfield(F_RIGHE);
 | 
				
			||||||
  TMask& sm = sf.sheet_mask();
 | 
					  TMask& sm = sf.sheet_mask();
 | 
				
			||||||
  sm.hide(-1);  // Nasconde tutti campi fittizi
 | 
					  const int h = ca_create_fields(sm, lf, 1, y, dlg, dlg+50);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  for (int i = 0; i < h; i++)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    TEdit_field& fld = sm.efield(dlg+i);
 | 
				
			||||||
 | 
					    int logic = lf;
 | 
				
			||||||
 | 
					    if (logic == LF_FASI)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      const TMultilevel_code_info& fasinfo = ca_multilevel_code_info(LF_FASI);
 | 
				
			||||||
 | 
					      if (fasinfo.parent() != 0)
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        const TMultilevel_code_info& parinfo = ca_multilevel_code_info(fasinfo.parent());
 | 
				
			||||||
 | 
					        if (i < parinfo.levels())
 | 
				
			||||||
 | 
					          logic = fasinfo.parent();
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const char* fieldname = NULL;
 | 
				
			||||||
 | 
					    switch(logic)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					    case LF_CDC     : fieldname = RMOVANA_CODCCOSTO; break;
 | 
				
			||||||
 | 
					    case LF_COMMESSE: fieldname = RMOVANA_CODCMS;   break;
 | 
				
			||||||
 | 
					    case LF_FASI    : fieldname = RMOVANA_CODFASE;  break;
 | 
				
			||||||
 | 
					    default         : fieldname = RMOVANA_CODCONTO; break;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    TFieldref* f = (TFieldref*)fld.field();
 | 
				
			||||||
 | 
					    f->set_name(fieldname);
 | 
				
			||||||
 | 
					    fld.check_type(required ? CHECK_REQUIRED : CHECK_NORMAL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    TEdit_field& dfld = sm.efield(dlg+50+i);
 | 
				
			||||||
 | 
					    dfld.set_field(EMPTY_STRING); // Toglie campi che fan saltare gli output!
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  y += h+1;
 | 
				
			||||||
 | 
					  dlg += h;
 | 
				
			||||||
 | 
					  return h;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void TMovanal_msk::create_sheet()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  TSheet_field& sf = sfield(F_RIGHE);
 | 
				
			||||||
 | 
					  TMask& sm = sf.sheet_mask();
 | 
				
			||||||
 | 
					  sm.hide(-1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const TMultilevel_code_info& fasinfo = ca_multilevel_code_info(LF_FASI);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  TConfig ini(CONFIG_DITTA, "ca");
 | 
					  TConfig ini(CONFIG_DITTA, "ca");
 | 
				
			||||||
  _use_pdc = ini.get_bool("UsePdcc");
 | 
					  const bool fsc_req = ini.get_bool("FscRequired");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const short id_cdc = 201+sf.cid2index(S_CDC1);
 | 
					  int y = 3;
 | 
				
			||||||
  const short id_cms = 201+sf.cid2index(S_CMS1);
 | 
					  short dlg = S_CDC1+100; // id del primo campo da generare
 | 
				
			||||||
  const short id_fas = 201+sf.cid2index(S_FAS1);
 | 
					 | 
				
			||||||
  const short id_con = 201+sf.cid2index(S_CON1);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ca_create_fields(sm, LF_CDC,      1,  2, id_cdc, id_cdc+50);
 | 
					  for (int i = 0; i < 2; i++)
 | 
				
			||||||
  ca_create_fields(sm, LF_COMMESSE, 1,  6, id_cms, id_cms+50);
 | 
					  {
 | 
				
			||||||
  ca_create_fields(sm, LF_FASI,     1, 10, id_fas, id_fas+50);
 | 
					    const TString& level = ini.get("Level", NULL, i+1);  // Legge il livello 1 o 2
 | 
				
			||||||
  ca_create_fields(sm, _use_pdc ? LF_PCON : LF_PCONANA, 1, 14, id_con, id_con+50);
 | 
					    if (level == "CDC")                                  // Crea centro di costo 
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      if (fasinfo.parent() == LF_CDC)
 | 
				
			||||||
 | 
					        create_sheet_fields(LF_FASI, y, dlg, fsc_req);
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        const bool cdc_req = ini.get_bool("CdcRequired");
 | 
				
			||||||
 | 
					        create_sheet_fields(LF_CDC, y, dlg, cdc_req);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    } else
 | 
				
			||||||
 | 
					    if (level == "CMS")                                   // Crea commessa
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      if (fasinfo.parent() == LF_COMMESSE)
 | 
				
			||||||
 | 
					        create_sheet_fields(LF_FASI, y, dlg, fsc_req);
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        const bool cms_req = ini.get_bool("CmsRequired");
 | 
				
			||||||
 | 
					        create_sheet_fields(LF_COMMESSE, y, dlg, cms_req);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  for (short id = id_con+3; id >= id_cdc; id--)
 | 
					  if (fasinfo.levels() > 0 && fasinfo.parent() <= 0)
 | 
				
			||||||
 | 
					    create_sheet_fields(LF_FASI, y, dlg, fsc_req);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const bool use_pdc = ini.get_bool("UsePdcc");
 | 
				
			||||||
 | 
					  const bool pdc_req = ini.get_bool("PdciRequired");
 | 
				
			||||||
 | 
					  create_sheet_fields(use_pdc ? LF_PCON : LF_PCONANA, y, dlg, pdc_req);
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  for (short id = S_CON4+100; id >= S_CDC1+100; id--)
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    const int pos = sm.id2pos(id);
 | 
					    const int pos = sm.id2pos(id);
 | 
				
			||||||
    if (pos >= 0)
 | 
					    if (pos >= 0)
 | 
				
			||||||
@ -559,36 +616,6 @@ TMovanal_msk::TMovanal_msk() : TAutomask("ca2100a")
 | 
				
			|||||||
      sf.set_column_header(id, prompt);
 | 
					      sf.set_column_header(id, prompt);
 | 
				
			||||||
      sf.set_column_justify(id, f.is_kind_of(CLASS_REAL_FIELD));
 | 
					      sf.set_column_justify(id, f.is_kind_of(CLASS_REAL_FIELD));
 | 
				
			||||||
      sf.set_column_width(id, (max(3+size, prompt.len()+1)) * CHARX);
 | 
					      sf.set_column_width(id, (max(3+size, prompt.len()+1)) * CHARX);
 | 
				
			||||||
 | 
					 | 
				
			||||||
      switch (100+(f.dlg()%100))
 | 
					 | 
				
			||||||
      {
 | 
					 | 
				
			||||||
      case S_CDC1:
 | 
					 | 
				
			||||||
      case S_CDC2:
 | 
					 | 
				
			||||||
      case S_CDC3:
 | 
					 | 
				
			||||||
      case S_CDC4:
 | 
					 | 
				
			||||||
        f.check_type(ini.get_bool("CdcRequired") ? CHECK_REQUIRED : CHECK_NORMAL);
 | 
					 | 
				
			||||||
        break;
 | 
					 | 
				
			||||||
      case S_CMS1:
 | 
					 | 
				
			||||||
      case S_CMS2:
 | 
					 | 
				
			||||||
      case S_CMS3:
 | 
					 | 
				
			||||||
      case S_CMS4:
 | 
					 | 
				
			||||||
        f.check_type(ini.get_bool("CmsRequired") ? CHECK_REQUIRED : CHECK_NORMAL);
 | 
					 | 
				
			||||||
        break;
 | 
					 | 
				
			||||||
      case S_FAS1:
 | 
					 | 
				
			||||||
      case S_FAS2:
 | 
					 | 
				
			||||||
      case S_FAS3:
 | 
					 | 
				
			||||||
      case S_FAS4:
 | 
					 | 
				
			||||||
        f.check_type(ini.get_bool("FscRequired") ? CHECK_REQUIRED : CHECK_NORMAL);
 | 
					 | 
				
			||||||
        break;
 | 
					 | 
				
			||||||
      case S_CON1:
 | 
					 | 
				
			||||||
      case S_CON2:
 | 
					 | 
				
			||||||
      case S_CON3:
 | 
					 | 
				
			||||||
      case S_CON4:
 | 
					 | 
				
			||||||
        f.check_type(ini.get_bool("PdciRequired") ? CHECK_REQUIRED : CHECK_NORMAL);
 | 
					 | 
				
			||||||
        break;
 | 
					 | 
				
			||||||
      default:
 | 
					 | 
				
			||||||
        break;
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    else
 | 
					    else
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
@ -597,6 +624,12 @@ TMovanal_msk::TMovanal_msk() : TAutomask("ca2100a")
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TMovanal_msk::TMovanal_msk() : TAutomask("ca2100a") 
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  create_sheet();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
///////////////////////////////////////////////////////////
 | 
					///////////////////////////////////////////////////////////
 | 
				
			||||||
// TMovanal_app
 | 
					// TMovanal_app
 | 
				
			||||||
///////////////////////////////////////////////////////////
 | 
					///////////////////////////////////////////////////////////
 | 
				
			||||||
@ -645,26 +678,15 @@ void TMovanal_app::read_rows(const TMask& m)
 | 
				
			|||||||
  const TRecord_array& a = mov[LF_RMOVANA];
 | 
					  const TRecord_array& a = mov[LF_RMOVANA];
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  TSheet_field& sheet = m.sfield(F_RIGHE);
 | 
					  TSheet_field& sheet = m.sfield(F_RIGHE);
 | 
				
			||||||
 | 
					  TMask& sm = sheet.sheet_mask();
 | 
				
			||||||
  sheet.destroy();
 | 
					  sheet.destroy();
 | 
				
			||||||
  _msk->reset_saldi();
 | 
					  _msk->reset_saldi();
 | 
				
			||||||
  for (int i = 1; i <= a.rows(); i++)
 | 
					  for (int i = 1; i <= a.rows(); i++)
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    const TRectype& rec = a.row(i);  
 | 
					    const TRectype& rec = a.row(i);
 | 
				
			||||||
    TToken_string& row = sheet.row(i-1);
 | 
					    _msk->rec2row(rec, i-1);
 | 
				
			||||||
    const TImporto imp(rec.get_char(RMOVANA_SEZIONE), rec.get_real(RMOVANA_IMPORTO));
 | 
					 | 
				
			||||||
    _msk->imp2row(imp, row);
 | 
					 | 
				
			||||||
    row.add(rec.get(RMOVANA_DESCR));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // Calcola le posizioni dei campi multilivello generati
 | 
					 | 
				
			||||||
    const int pos_cdc = sheet.cid2index(S_CDC1);
 | 
					 | 
				
			||||||
    const int pos_cms = sheet.cid2index(S_CMS1);
 | 
					 | 
				
			||||||
    const int pos_fas = sheet.cid2index(S_FAS1);
 | 
					 | 
				
			||||||
    const int pos_con = sheet.cid2index(S_CON1);
 | 
					 | 
				
			||||||
    _msk->spezza_campo(rec.get(RMOVANA_CODCCOSTO), row, pos_cdc);
 | 
					 | 
				
			||||||
    _msk->spezza_campo(rec.get(RMOVANA_CODCMS),    row, pos_cms);
 | 
					 | 
				
			||||||
    _msk->spezza_campo(rec.get(RMOVANA_CODFASE),   row, pos_fas);
 | 
					 | 
				
			||||||
    _msk->spezza_campo(rec.get(RMOVANA_CODCONTO),  row, pos_con);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    TImporto imp; _msk->row2imp(i-1, imp);
 | 
				
			||||||
    TImporto& sld = _msk->saldo(rec);
 | 
					    TImporto& sld = _msk->saldo(rec);
 | 
				
			||||||
    sld -= imp;
 | 
					    sld -= imp;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
@ -731,4 +753,4 @@ int ca2100(int argc, char* argv[])
 | 
				
			|||||||
  TMovanal_app app;
 | 
					  TMovanal_app app;
 | 
				
			||||||
  app.run(argc, argv, "Movimenti analitici");
 | 
					  app.run(argc, argv, "Movimenti analitici");
 | 
				
			||||||
  return 0;
 | 
					  return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -284,12 +284,14 @@ END
 | 
				
			|||||||
STRING S_DESCR 50
 | 
					STRING S_DESCR 50
 | 
				
			||||||
BEGIN
 | 
					BEGIN
 | 
				
			||||||
  PROMPT 1 1 "Descrizione "
 | 
					  PROMPT 1 1 "Descrizione "
 | 
				
			||||||
 | 
					  FIELD DESCR
 | 
				
			||||||
END
 | 
					END
 | 
				
			||||||
 | 
					
 | 
				
			||||||
STRING S_CDC1 20
 | 
					STRING S_CDC1 20
 | 
				
			||||||
BEGIN
 | 
					BEGIN
 | 
				
			||||||
  PROMPT 1 2 "Cdc 1"
 | 
					  PROMPT 1 2 "Cdc 1"
 | 
				
			||||||
  USE LF_CDC
 | 
					  USE LF_CDC
 | 
				
			||||||
 | 
					  CHECKTYPE NORMAL
 | 
				
			||||||
  GROUP 1
 | 
					  GROUP 1
 | 
				
			||||||
END
 | 
					END
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -297,6 +299,7 @@ STRING S_CDC2 20
 | 
				
			|||||||
BEGIN
 | 
					BEGIN
 | 
				
			||||||
  PROMPT 21 2 "Cdc 2"
 | 
					  PROMPT 21 2 "Cdc 2"
 | 
				
			||||||
  COPY USE S_CDC1
 | 
					  COPY USE S_CDC1
 | 
				
			||||||
 | 
					  CHECKTYPE NORMAL
 | 
				
			||||||
  GROUP 1
 | 
					  GROUP 1
 | 
				
			||||||
END
 | 
					END
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -304,6 +307,7 @@ STRING S_CDC3 20
 | 
				
			|||||||
BEGIN
 | 
					BEGIN
 | 
				
			||||||
  PROMPT 41 2 "Cdc 3"
 | 
					  PROMPT 41 2 "Cdc 3"
 | 
				
			||||||
  COPY USE S_CDC1
 | 
					  COPY USE S_CDC1
 | 
				
			||||||
 | 
					  CHECKTYPE NORMAL
 | 
				
			||||||
  GROUP 1
 | 
					  GROUP 1
 | 
				
			||||||
END
 | 
					END
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -311,6 +315,7 @@ STRING S_CDC4 20
 | 
				
			|||||||
BEGIN
 | 
					BEGIN
 | 
				
			||||||
  PROMPT 61 2 "Cdc 4"
 | 
					  PROMPT 61 2 "Cdc 4"
 | 
				
			||||||
  COPY USE S_CDC1
 | 
					  COPY USE S_CDC1
 | 
				
			||||||
 | 
					  CHECKTYPE NORMAL
 | 
				
			||||||
  GROUP 1
 | 
					  GROUP 1
 | 
				
			||||||
END
 | 
					END
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -318,6 +323,7 @@ STRING S_CMS1 20
 | 
				
			|||||||
BEGIN
 | 
					BEGIN
 | 
				
			||||||
  PROMPT 1 3 "Cms 1"
 | 
					  PROMPT 1 3 "Cms 1"
 | 
				
			||||||
  USE LF_COMMESSE
 | 
					  USE LF_COMMESSE
 | 
				
			||||||
 | 
					  CHECKTYPE NORMAL
 | 
				
			||||||
  GROUP 1
 | 
					  GROUP 1
 | 
				
			||||||
END
 | 
					END
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -325,6 +331,7 @@ STRING S_CMS2 20
 | 
				
			|||||||
BEGIN
 | 
					BEGIN
 | 
				
			||||||
  PROMPT 21 3 "Cms 2"
 | 
					  PROMPT 21 3 "Cms 2"
 | 
				
			||||||
  COPY USE S_CMS1
 | 
					  COPY USE S_CMS1
 | 
				
			||||||
 | 
					  CHECKTYPE NORMAL
 | 
				
			||||||
  GROUP 1
 | 
					  GROUP 1
 | 
				
			||||||
END
 | 
					END
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -332,6 +339,7 @@ STRING S_CMS3 20
 | 
				
			|||||||
BEGIN
 | 
					BEGIN
 | 
				
			||||||
  PROMPT 41 3 "Cms 3"
 | 
					  PROMPT 41 3 "Cms 3"
 | 
				
			||||||
  COPY USE S_CMS1
 | 
					  COPY USE S_CMS1
 | 
				
			||||||
 | 
					  CHECKTYPE NORMAL
 | 
				
			||||||
  GROUP 1
 | 
					  GROUP 1
 | 
				
			||||||
END
 | 
					END
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -339,6 +347,7 @@ STRING S_CMS4 20
 | 
				
			|||||||
BEGIN
 | 
					BEGIN
 | 
				
			||||||
  PROMPT 61 3 "Cms 4"
 | 
					  PROMPT 61 3 "Cms 4"
 | 
				
			||||||
  COPY USE S_CMS1
 | 
					  COPY USE S_CMS1
 | 
				
			||||||
 | 
					  CHECKTYPE NORMAL
 | 
				
			||||||
  GROUP 1
 | 
					  GROUP 1
 | 
				
			||||||
END
 | 
					END
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -346,6 +355,7 @@ STRING S_FAS1 20
 | 
				
			|||||||
BEGIN
 | 
					BEGIN
 | 
				
			||||||
  PROMPT 1 4 "Fas 1"
 | 
					  PROMPT 1 4 "Fas 1"
 | 
				
			||||||
  USE LF_FASI
 | 
					  USE LF_FASI
 | 
				
			||||||
 | 
					  CHECKTYPE NORMAL
 | 
				
			||||||
  GROUP 1
 | 
					  GROUP 1
 | 
				
			||||||
END
 | 
					END
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -353,6 +363,7 @@ STRING S_FAS2 20
 | 
				
			|||||||
BEGIN
 | 
					BEGIN
 | 
				
			||||||
  PROMPT 21 4 "Fas 2"
 | 
					  PROMPT 21 4 "Fas 2"
 | 
				
			||||||
  COPY USE S_FAS1
 | 
					  COPY USE S_FAS1
 | 
				
			||||||
 | 
					  CHECKTYPE NORMAL
 | 
				
			||||||
  GROUP 1
 | 
					  GROUP 1
 | 
				
			||||||
END
 | 
					END
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -360,6 +371,7 @@ STRING S_FAS3 20
 | 
				
			|||||||
BEGIN
 | 
					BEGIN
 | 
				
			||||||
  PROMPT 41 4 "Fas 3"
 | 
					  PROMPT 41 4 "Fas 3"
 | 
				
			||||||
  COPY USE S_FAS1
 | 
					  COPY USE S_FAS1
 | 
				
			||||||
 | 
					  CHECKTYPE NORMAL
 | 
				
			||||||
  GROUP 1
 | 
					  GROUP 1
 | 
				
			||||||
END
 | 
					END
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -367,6 +379,7 @@ STRING S_FAS4 20
 | 
				
			|||||||
BEGIN
 | 
					BEGIN
 | 
				
			||||||
  PROMPT 61 4 "Fas 4"
 | 
					  PROMPT 61 4 "Fas 4"
 | 
				
			||||||
  COPY USE S_FAS1
 | 
					  COPY USE S_FAS1
 | 
				
			||||||
 | 
					  CHECKTYPE NORMAL
 | 
				
			||||||
  GROUP 1
 | 
					  GROUP 1
 | 
				
			||||||
END
 | 
					END
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -374,6 +387,7 @@ STRING S_CON1 20
 | 
				
			|||||||
BEGIN
 | 
					BEGIN
 | 
				
			||||||
  PROMPT 1 5 "Con 1"
 | 
					  PROMPT 1 5 "Con 1"
 | 
				
			||||||
  USE LF_PCON
 | 
					  USE LF_PCON
 | 
				
			||||||
 | 
					  CHECKTYPE NORMAL
 | 
				
			||||||
  GROUP 1
 | 
					  GROUP 1
 | 
				
			||||||
END
 | 
					END
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -381,6 +395,7 @@ STRING S_CON2 20
 | 
				
			|||||||
BEGIN
 | 
					BEGIN
 | 
				
			||||||
  PROMPT 21 5 "Con 2"
 | 
					  PROMPT 21 5 "Con 2"
 | 
				
			||||||
  COPY USE S_CON1
 | 
					  COPY USE S_CON1
 | 
				
			||||||
 | 
					  CHECKTYPE NORMAL
 | 
				
			||||||
  GROUP 1
 | 
					  GROUP 1
 | 
				
			||||||
END
 | 
					END
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -388,6 +403,7 @@ STRING S_CON3 20
 | 
				
			|||||||
BEGIN
 | 
					BEGIN
 | 
				
			||||||
  PROMPT 41 5 "Con 3"
 | 
					  PROMPT 41 5 "Con 3"
 | 
				
			||||||
  COPY USE S_CON1
 | 
					  COPY USE S_CON1
 | 
				
			||||||
 | 
					  CHECKTYPE NORMAL
 | 
				
			||||||
  GROUP 1
 | 
					  GROUP 1
 | 
				
			||||||
END
 | 
					END
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -395,6 +411,7 @@ STRING S_CON4 20
 | 
				
			|||||||
BEGIN
 | 
					BEGIN
 | 
				
			||||||
  PROMPT 61 5 "Con 4"
 | 
					  PROMPT 61 5 "Con 4"
 | 
				
			||||||
  COPY USE S_CON1
 | 
					  COPY USE S_CON1
 | 
				
			||||||
 | 
					  CHECKTYPE NORMAL
 | 
				
			||||||
  GROUP 1
 | 
					  GROUP 1
 | 
				
			||||||
END
 | 
					END
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										585
									
								
								ca/calib01.cpp
									
									
									
									
									
								
							
							
						
						
									
										585
									
								
								ca/calib01.cpp
									
									
									
									
									
								
							@ -47,7 +47,7 @@ const TString& TMultilevel_code_info::prompt(int level) const
 | 
				
			|||||||
 
 | 
					 
 | 
				
			||||||
const TFieldref& TMultilevel_code_info::fieldref(int level, int key) const
 | 
					const TFieldref& TMultilevel_code_info::fieldref(int level, int key) const
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  const TArray& a = key == 1 ? _key1_fields : _key2_fields;
 | 
					  const TArray& a = key <= 1 ? _key1_fields : _key2_fields;
 | 
				
			||||||
  const TFieldref& fr = (const TFieldref&)a[level];
 | 
					  const TFieldref& fr = (const TFieldref&)a[level];
 | 
				
			||||||
  return fr;
 | 
					  return fr;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -68,10 +68,10 @@ bool TMultilevel_code_info::get_cfg_vars(TString& key, TString& des) const
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  switch (_logicnum)
 | 
					  switch (_logicnum)
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
  case LF_PCONANA: key = "Pdci"; des = "PdciDes"; break;
 | 
					  case LF_PCONANA : key = "Pdci"; des = "PdciDes"; break;
 | 
				
			||||||
  case LF_CDC    : key = "CdC";  des = "CdCDes";  break;
 | 
					  case LF_CDC     : key = "CdC";  des = "CdCDes";  break;
 | 
				
			||||||
  case LF_COMMESSE:key = "Cms";  des = "CmsDes";  break;
 | 
					  case LF_COMMESSE: key = "Cms";  des = "CmsDes";  break;
 | 
				
			||||||
  case LF_FASI   : key = "Fsc";  des = "FscDes";  break;
 | 
					  case LF_FASI    : key = "Fsc";  des = "FscDes";  break;
 | 
				
			||||||
  default: break;
 | 
					  default: break;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  return key.not_empty();
 | 
					  return key.not_empty();
 | 
				
			||||||
@ -88,21 +88,21 @@ void TMultilevel_code_info::add_fieldref(int k, int from, int to)
 | 
				
			|||||||
  a.add(fr);
 | 
					  a.add(fr);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
TMultilevel_code_info::TMultilevel_code_info(int logicnum) : _logicnum(logicnum)
 | 
					TMultilevel_code_info::TMultilevel_code_info(int logicnum) : _logicnum(logicnum), _parentnum(0)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  if (logicnum == LF_PCON)
 | 
					  if (_logicnum == LF_PCON)
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    _key1_fields.add(new TFieldref(PCN_GRUPPO,     LF_PCON));
 | 
					    _key1_fields.add(new TFieldref(PCN_GRUPPO,     LF_PCON));
 | 
				
			||||||
    _picture.add("999");
 | 
					    _picture.add("999");
 | 
				
			||||||
    _prompt.add("Gruppo");
 | 
					    _prompt.add(TR("Gruppo"));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    _key1_fields.add(new TFieldref(PCN_CONTO,      LF_PCON));
 | 
					    _key1_fields.add(new TFieldref(PCN_CONTO,      LF_PCON));
 | 
				
			||||||
    _picture.add("999");
 | 
					    _picture.add("999");
 | 
				
			||||||
    _prompt.add("Conto");
 | 
					    _prompt.add(TR("Conto"));
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    _key1_fields.add(new TFieldref(PCN_SOTTOCONTO, LF_PCON));
 | 
					    _key1_fields.add(new TFieldref(PCN_SOTTOCONTO, LF_PCON));
 | 
				
			||||||
    _picture.add("999999");
 | 
					    _picture.add("999999");
 | 
				
			||||||
    _prompt.add("Sottoconto");
 | 
					    _prompt.add(TR("Sottoconto"));
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    _key2_fields.add(new TFieldref(PCN_DESCR, LF_PCON));
 | 
					    _key2_fields.add(new TFieldref(PCN_DESCR, LF_PCON));
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
@ -110,6 +110,27 @@ TMultilevel_code_info::TMultilevel_code_info(int logicnum) : _logicnum(logicnum)
 | 
				
			|||||||
  {
 | 
					  {
 | 
				
			||||||
    TConfig cfg(CONFIG_DITTA);
 | 
					    TConfig cfg(CONFIG_DITTA);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (logicnum == LF_FASI)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      const TString& father = cfg.get("FathFasi");
 | 
				
			||||||
 | 
					      if (father == "CMS")
 | 
				
			||||||
 | 
					        _parentnum = LF_COMMESSE; else
 | 
				
			||||||
 | 
					      if (father == "CDC")
 | 
				
			||||||
 | 
					        _parentnum = LF_CDC;
 | 
				
			||||||
 | 
					      if (_parentnum != 0)
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        const TMultilevel_code_info& info = ca_multilevel_code_info(_parentnum);
 | 
				
			||||||
 | 
					        for (int i = 0; i < info.levels(); i++)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          _prompt.add(info.prompt(i));
 | 
				
			||||||
 | 
					          _picture.add(info.picture(i));
 | 
				
			||||||
 | 
					          TFieldref fr = info.fieldref(i);
 | 
				
			||||||
 | 
					          fr.set_name("CODCMSFAS");
 | 
				
			||||||
 | 
					          _key1_fields.add(fr);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    TString16 keyvar, desvar;
 | 
					    TString16 keyvar, desvar;
 | 
				
			||||||
    get_cfg_vars(keyvar, desvar);
 | 
					    get_cfg_vars(keyvar, desvar);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -133,7 +154,7 @@ TMultilevel_code_info::TMultilevel_code_info(int logicnum) : _logicnum(logicnum)
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const TMultilevel_code_info& multilevel_code_info(int logicnum)
 | 
					const TMultilevel_code_info& ca_multilevel_code_info(int logicnum)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  static TArray* cache = NULL;
 | 
					  static TArray* cache = NULL;
 | 
				
			||||||
  if (cache == NULL)
 | 
					  if (cache == NULL)
 | 
				
			||||||
@ -150,7 +171,7 @@ const TMultilevel_code_info& multilevel_code_info(int logicnum)
 | 
				
			|||||||
bool ca_test_multilevel_field(TEdit_field& fld, int level)
 | 
					bool ca_test_multilevel_field(TEdit_field& fld, int level)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  const int logic = fld.browse()->cursor()->curr().num();
 | 
					  const int logic = fld.browse()->cursor()->curr().num();
 | 
				
			||||||
  const TMultilevel_code_info& info = multilevel_code_info(logic);
 | 
					  const TMultilevel_code_info& info = ca_multilevel_code_info(logic);
 | 
				
			||||||
  const TString& pic = info.picture(level);
 | 
					  const TString& pic = info.picture(level);
 | 
				
			||||||
  const TString& val = fld.get();
 | 
					  const TString& val = fld.get();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -163,7 +184,7 @@ bool ca_test_multilevel_field(TEdit_field& fld, int level)
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
    case 'A': ok = (v >= '0' && v <= '9') || (v >= 'A' && v <= 'Z'); break;
 | 
					    case 'A': ok = (v >= '0' && v <= '9') || (v >= 'A' && v <= 'Z'); break;
 | 
				
			||||||
    case '0':
 | 
					    case '0':
 | 
				
			||||||
    case '9': ok = v >= '0' && v <= '9'; break;
 | 
					    case '9': ok = (v >= '0' && v <= '9'); break;
 | 
				
			||||||
    default : break;
 | 
					    default : break;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
@ -178,6 +199,215 @@ bool ca_test_multilevel_field(TEdit_field& fld, int level)
 | 
				
			|||||||
  return ok;
 | 
					  return ok;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					///////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					// Utilities
 | 
				
			||||||
 | 
					///////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ca_append_select_clause(ostream& out, int level, int logic)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  TString 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 = ca_multilevel_code_info(logic);
 | 
				
			||||||
 | 
					    const TFieldref& key = mci.fieldref(level);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    str << "STR(";
 | 
				
			||||||
 | 
					    if (level > 1)
 | 
				
			||||||
 | 
					      str << "(NUM(LEN(" << key.name() << "))>" << key.from() << ')'; // SE LEN(CODCONTO)>=4
 | 
				
			||||||
 | 
					    if (level < mci.levels())
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      if (level > 1) str << "&&";
 | 
				
			||||||
 | 
					      str << "(NUM(LEN(" << key.name() << "))<=" << key.to() << ')';  // SE LEN(CODCONTO)<=7
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    str << ')';
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  if (str.not_empty())
 | 
				
			||||||
 | 
					    out << " SE " << str << endl;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ca_append_run_clause(ostream& out, int logicnum)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  const TRectype r(logicnum);
 | 
				
			||||||
 | 
					  TString app; r.get_relapp(app);
 | 
				
			||||||
 | 
					  if (app.not_empty())
 | 
				
			||||||
 | 
					    out << "AD RU " << app << endl;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ca_create_browse1(TEdit_field& kfld, int level, int logic, short key_id, short des_id)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  const TMultilevel_code_info& main_info = ca_multilevel_code_info(logic);
 | 
				
			||||||
 | 
					  if (logic == LF_FASI)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    const int par = main_info.parent();
 | 
				
			||||||
 | 
					    if (par > 0)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      const TMultilevel_code_info& parinfo = ca_multilevel_code_info(par);
 | 
				
			||||||
 | 
					      if (level < parinfo.levels())
 | 
				
			||||||
 | 
					        logic = par;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const TMultilevel_code_info& mci = ca_multilevel_code_info(logic);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  TFilename tmp; tmp.tempdir(); tmp.add("tmp.msk");
 | 
				
			||||||
 | 
					  ofstream out(tmp);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  out << "US " << logic << endl;
 | 
				
			||||||
 | 
					  ca_append_select_clause(out, level, logic);
 | 
				
			||||||
 | 
					  ca_append_run_clause(out, 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);
 | 
				
			||||||
 | 
					    const int length = field.to() - field.from();
 | 
				
			||||||
 | 
					    out << "IN " << field << ' ' << (key_id+i) << endl;
 | 
				
			||||||
 | 
					    out << "DI \"" << prompt;
 | 
				
			||||||
 | 
					    if (length > prompt.len())
 | 
				
			||||||
 | 
					      out << '@' << length;
 | 
				
			||||||
 | 
					    out << "\" " << field << endl;
 | 
				
			||||||
 | 
					    out << "OU " << (key_id+i) << ' ' << field << endl;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  const TFieldref& field = mci.fieldref(0, 2);
 | 
				
			||||||
 | 
					  out << "DI \"" << TR("Descrizione") << "@50\" " << field << endl;
 | 
				
			||||||
 | 
					  out << "OU " << (des_id+level) << ' ' << field << endl;
 | 
				
			||||||
 | 
					  out << "CH RE" << endl;
 | 
				
			||||||
 | 
					  out << "FI " << main_info.fieldref(level) << endl;
 | 
				
			||||||
 | 
					  out << "EN" << endl;
 | 
				
			||||||
 | 
					  out.close();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  TScanner scan(tmp);
 | 
				
			||||||
 | 
					  while (scan.pop() != "EN")
 | 
				
			||||||
 | 
					    kfld.parse_item(scan);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  xvt_fsys_removefile(tmp);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ca_create_browse2(TEdit_field& kfld, int level, int logic, short key_id, short des_id)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  const TMultilevel_code_info& main_info = ca_multilevel_code_info(logic);
 | 
				
			||||||
 | 
					  if (logic == LF_FASI)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    const int par = main_info.parent();
 | 
				
			||||||
 | 
					    if (par > 0)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      const TMultilevel_code_info& parinfo = ca_multilevel_code_info(par);
 | 
				
			||||||
 | 
					      if (level < parinfo.levels())
 | 
				
			||||||
 | 
					        logic = par;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const TMultilevel_code_info& mci = ca_multilevel_code_info(logic);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const TFieldref& field = mci.fieldref(0, 2);
 | 
				
			||||||
 | 
					  TString str2; str2 << field;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  TFilename tmp; tmp.tempdir(); tmp.add("tmp.msk");
 | 
				
			||||||
 | 
					  ofstream out(tmp);
 | 
				
			||||||
 | 
					  out << "US " << logic << " KE 2" << endl;
 | 
				
			||||||
 | 
					  ca_append_select_clause(out, level, logic);
 | 
				
			||||||
 | 
					  ca_append_run_clause(out, logic);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  out << "IN " << str2 << ' ' << kfld.dlg() << endl;
 | 
				
			||||||
 | 
					  out << "DI \"" << TR("Descrizione") << "@50\" " << str2 << endl;
 | 
				
			||||||
 | 
					  out << "OU " << kfld.dlg() << ' ' << str2 << endl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  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);
 | 
				
			||||||
 | 
					    const int length = field.to() - field.from();
 | 
				
			||||||
 | 
					    out << "DI \"" << prompt;
 | 
				
			||||||
 | 
					    if (length > prompt.len()) 
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      out << '@' << length;
 | 
				
			||||||
 | 
					      if (mci.is_numeric_picture(i))
 | 
				
			||||||
 | 
					        out << 'R';
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    out << "\" " << field << endl;
 | 
				
			||||||
 | 
					    out << "OU " << (key_id+i) << ' ' << field << endl;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  out << "CH NO" << endl;
 | 
				
			||||||
 | 
					  if (level == main_info.levels()-1)
 | 
				
			||||||
 | 
					    out << "FI " << main_info.fieldref(0, 2) << endl;
 | 
				
			||||||
 | 
					  out << "EN" << endl;
 | 
				
			||||||
 | 
					  out.close();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  TScanner scan(tmp);
 | 
				
			||||||
 | 
					  while (scan.pop() != "EN")
 | 
				
			||||||
 | 
					    kfld.parse_item(scan);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  xvt_fsys_removefile(tmp);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int ca_create_fields(TMask& msk, int logicnum, int x, int y, 
 | 
				
			||||||
 | 
					                  short key_id, short des_id, unsigned int mode)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  const TMultilevel_code_info& mci = ca_multilevel_code_info(logicnum);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  int maxkeylen = 0, maxdeslen = 0;
 | 
				
			||||||
 | 
					  for (int level = 0; level < mci.levels(); level++)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    const TString& prompt = mci.prompt(level);
 | 
				
			||||||
 | 
					    const TString& picture = mci.picture(level);
 | 
				
			||||||
 | 
					    const int keylen = picture.len();
 | 
				
			||||||
 | 
					    const int deslen = prompt.len();
 | 
				
			||||||
 | 
					    if (keylen > maxkeylen) maxkeylen = keylen;
 | 
				
			||||||
 | 
					    if (deslen > maxdeslen) maxdeslen = deslen;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  maxdeslen++;
 | 
				
			||||||
 | 
					  const int tab0 = x;
 | 
				
			||||||
 | 
					  const int tab1 = tab0 + maxdeslen + maxkeylen + 4;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (mode == 0 || (mode & 0x1) != 0)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    for (int i = 0; i < mci.levels(); i++)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      const short kid = key_id+i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      const TString& picture = mci.picture(i);
 | 
				
			||||||
 | 
					      TString80 prompt = mci.prompt(i);
 | 
				
			||||||
 | 
					      prompt.left_just(maxdeslen);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      const char* flags = picture[0] == '0' ? "BUZ" : "BU";
 | 
				
			||||||
 | 
					      TEdit_field* kfld = NULL;
 | 
				
			||||||
 | 
					      if (mci.is_numeric_picture(i))  // 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);
 | 
				
			||||||
 | 
					      ca_create_browse1(*kfld, i, logicnum, key_id, des_id);
 | 
				
			||||||
 | 
					      if (mode & 0x1)
 | 
				
			||||||
 | 
					        kfld->set_key(1);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  if (mode == 0 || (mode & 0x2) != 0)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    for (int i = 0; i < mci.levels(); i++)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      const short did = des_id+i;
 | 
				
			||||||
 | 
					      TEdit_field& dfld = msk.add_string(did, 0, "", tab1, y+i, 50, "B", 72+tab0-tab1);
 | 
				
			||||||
 | 
					      ca_create_browse2(dfld, i, logicnum, key_id, des_id);
 | 
				
			||||||
 | 
					      if (mode & 0x2)
 | 
				
			||||||
 | 
					        dfld.set_key(2);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  return mci.levels();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
///////////////////////////////////////////////////////////
 | 
					///////////////////////////////////////////////////////////
 | 
				
			||||||
// TAnal_tree
 | 
					// TAnal_tree
 | 
				
			||||||
///////////////////////////////////////////////////////////
 | 
					///////////////////////////////////////////////////////////
 | 
				
			||||||
@ -321,7 +551,7 @@ void TSimple_anal_msk::read(const char* name)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  if (delta > 0)
 | 
					  if (delta > 0)
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    const TFilename outname = "anal.msk";
 | 
					    TFilename outname; outname.tempdir(); outname.add("tmp.msk");
 | 
				
			||||||
    TFilename inpname = name; inpname.ext("msk");
 | 
					    TFilename inpname = name; inpname.ext("msk");
 | 
				
			||||||
    inpname.custom_path();
 | 
					    inpname.custom_path();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -407,7 +637,7 @@ int TSimple_anal_msk::fieldrefs(int k) const
 | 
				
			|||||||
  int n = 1;
 | 
					  int n = 1;
 | 
				
			||||||
  if (k == 1)
 | 
					  if (k == 1)
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    const TMultilevel_code_info& mci = multilevel_code_info(get_logicnum());
 | 
					    const TMultilevel_code_info& mci = ca_multilevel_code_info(get_logicnum());
 | 
				
			||||||
    n = mci.levels();
 | 
					    n = mci.levels();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  return n;
 | 
					  return n;
 | 
				
			||||||
@ -415,7 +645,7 @@ int TSimple_anal_msk::fieldrefs(int k) const
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
const TFieldref& TSimple_anal_msk::fieldref(int n, int k) const
 | 
					const TFieldref& TSimple_anal_msk::fieldref(int n, int k) const
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  const TMultilevel_code_info& mci = multilevel_code_info(get_logicnum());
 | 
					  const TMultilevel_code_info& mci = ca_multilevel_code_info(get_logicnum());
 | 
				
			||||||
  return mci.fieldref(n, k);
 | 
					  return mci.fieldref(n, k);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -442,143 +672,14 @@ const TToken_string& TSimple_anal_msk::get_key_value(int c) const
 | 
				
			|||||||
  return val;
 | 
					  return val;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
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 == 0 ? "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()
 | 
					int TSimple_anal_msk::create_key_fields()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  const TMultilevel_code_info& mci = multilevel_code_info(get_logicnum());
 | 
					  const int logic = get_logicnum();
 | 
				
			||||||
 | 
					  const short kid = get_field_id(0, 1);
 | 
				
			||||||
  int maxkeylen = 0, maxdeslen = 0;
 | 
					  const short did = get_field_id(0, 2);
 | 
				
			||||||
  for (int level = 0; level < mci.levels(); level++)
 | 
					  const int x = compute_offset()+2;
 | 
				
			||||||
  {
 | 
					  const int y = 1;
 | 
				
			||||||
    const TString& prompt = mci.prompt(level);
 | 
					  return ca_create_fields(*this, logic, x, y, kid, did, 0x3);
 | 
				
			||||||
    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 (mci.is_numeric_picture(i))  // Numeric
 | 
					 | 
				
			||||||
      kfld = &add_number(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;
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
///////////////////////////////////////////////////////////
 | 
					///////////////////////////////////////////////////////////
 | 
				
			||||||
@ -587,7 +688,7 @@ int TSimple_anal_msk::create_key_fields()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
const TToken_string& TAnal_tree::curr_of_file() const
 | 
					const TToken_string& TAnal_tree::curr_of_file() const
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  const TMultilevel_code_info& mci = multilevel_code_info(_file->num());
 | 
					  const TMultilevel_code_info& mci = ca_multilevel_code_info(_file->num());
 | 
				
			||||||
  const TRectype& rec = _file->curr();
 | 
					  const TRectype& rec = _file->curr();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  TToken_string& k = get_tmp_string();
 | 
					  TToken_string& k = get_tmp_string();
 | 
				
			||||||
@ -627,7 +728,7 @@ int TAnal_tree::curr_level() const
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
int TAnal_tree::max_level() const
 | 
					int TAnal_tree::max_level() const
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  const TMultilevel_code_info& mci = multilevel_code_info(_file->num());
 | 
					  const TMultilevel_code_info& mci = ca_multilevel_code_info(_file->num());
 | 
				
			||||||
  return mci.levels();
 | 
					  return mci.levels();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -744,7 +845,7 @@ 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());
 | 
					    const TMultilevel_code_info& mci = ca_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);
 | 
				
			||||||
@ -793,7 +894,7 @@ 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 TMultilevel_code_info& mci = multilevel_code_info(_file->num());
 | 
					      const TMultilevel_code_info& mci = ca_multilevel_code_info(_file->num());
 | 
				
			||||||
      const TFieldref& fld1 = mci.fieldref(lev-1, 1);
 | 
					      const TFieldref& fld1 = mci.fieldref(lev-1, 1);
 | 
				
			||||||
      const TFieldref& fld2 = mci.fieldref(0, 2);
 | 
					      const TFieldref& fld2 = mci.fieldref(0, 2);
 | 
				
			||||||
      const TRectype& rec = _file->curr();
 | 
					      const TRectype& rec = _file->curr();
 | 
				
			||||||
@ -887,7 +988,7 @@ void TAnal_app::init_query_mode(TMask& mask)
 | 
				
			|||||||
    const short did = m.get_field_id(i, 2);
 | 
					    const short did = m.get_field_id(i, 2);
 | 
				
			||||||
    TEdit_field& d = m.efield(did);
 | 
					    TEdit_field& d = m.efield(did);
 | 
				
			||||||
    d.show(); d.enable();
 | 
					    d.show(); d.enable();
 | 
				
			||||||
    d.set_field(EMPTY_STRING);
 | 
					//    d.set_field(EMPTY_STRING);
 | 
				
			||||||
    d.enable_check();
 | 
					    d.enable_check();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -1087,175 +1188,3 @@ TAnal_mov::TAnal_mov(long numreg) : TMultiple_rectype(LF_MOVANA)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
///////////////////////////////////////////////////////////
 | 
					 | 
				
			||||||
// Utilities
 | 
					 | 
				
			||||||
///////////////////////////////////////////////////////////
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void ca_append_select_clause(ostream& out, int level, int logic)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  TString 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)
 | 
					 | 
				
			||||||
      str << "(NUM(LEN(" << key.name() << "))>" << key.from() << ')'; // SE LEN(CODCONTO)>=4
 | 
					 | 
				
			||||||
    if (level < mci.levels())
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
      if (level > 1) str << "&&";
 | 
					 | 
				
			||||||
      str << "(NUM(LEN(" << key.name() << "))<=" << key.to() << ')';  // SE LEN(CODCONTO)<=7
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    str << ')';
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  if (str.not_empty())
 | 
					 | 
				
			||||||
    out << " SE " << str << endl;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void ca_append_run_clause(ostream& out, int logicnum)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  const TRectype r(logicnum);
 | 
					 | 
				
			||||||
  TString app; r.get_relapp(app);
 | 
					 | 
				
			||||||
  if (app.not_empty())
 | 
					 | 
				
			||||||
    out << "AD RU " << app << endl;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void ca_create_browse1(TEdit_field& kfld, int level, int logic, short key_id, short des_id)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  const TMultilevel_code_info& mci = multilevel_code_info(logic);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  TFilename tmp; tmp.temp();
 | 
					 | 
				
			||||||
  ofstream out(tmp);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  out << "US " << logic << endl;
 | 
					 | 
				
			||||||
  ca_append_select_clause(out, level, logic);
 | 
					 | 
				
			||||||
  ca_append_run_clause(out, 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);
 | 
					 | 
				
			||||||
    const int length = field.to() - field.from();
 | 
					 | 
				
			||||||
    out << "IN " << field << ' ' << (key_id+i) << endl;
 | 
					 | 
				
			||||||
    out << "DI \"" << prompt;
 | 
					 | 
				
			||||||
    if (length > prompt.len())
 | 
					 | 
				
			||||||
      out << '@' << length;
 | 
					 | 
				
			||||||
    out << "\" " << field << endl;
 | 
					 | 
				
			||||||
    out << "OU " << (key_id+i) << ' ' << field << endl;
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  const TFieldref& field = mci.fieldref(0, 2);
 | 
					 | 
				
			||||||
  out << "DI \"" << TR("Descrizione") << "@50\" " << field << endl;
 | 
					 | 
				
			||||||
  out << "OU " << (des_id+level) << ' ' << field << endl;
 | 
					 | 
				
			||||||
  out << "CH RE" << endl;
 | 
					 | 
				
			||||||
  out << "FI " << mci.fieldref(level) << endl;
 | 
					 | 
				
			||||||
  out << "EN" << endl;
 | 
					 | 
				
			||||||
  out.close();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  TScanner scan(tmp);
 | 
					 | 
				
			||||||
  while (scan.pop() != "EN")
 | 
					 | 
				
			||||||
    kfld.parse_item(scan);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  xvt_fsys_removefile(tmp);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void ca_create_browse2(TEdit_field& kfld, int level, int logic, short key_id, short des_id)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  const TMultilevel_code_info& mci = multilevel_code_info(logic);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  const TFieldref& field = mci.fieldref(0, 2);
 | 
					 | 
				
			||||||
  TString str2; str2 << field;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  TFilename tmp; tmp.temp();
 | 
					 | 
				
			||||||
  ofstream out(tmp);
 | 
					 | 
				
			||||||
  out << "US " << logic << " KE 2" << endl;
 | 
					 | 
				
			||||||
  ca_append_select_clause(out, level, logic);
 | 
					 | 
				
			||||||
  ca_append_run_clause(out, logic);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  out << "IN " << str2 << ' ' << kfld.dlg() << endl;
 | 
					 | 
				
			||||||
  out << "DI \"" << TR("Descrizione") << "@50\" " << str2 << endl;
 | 
					 | 
				
			||||||
  out << "OU " << kfld.dlg() << ' ' << str2 << endl;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  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);
 | 
					 | 
				
			||||||
    const int length = field.to() - field.from();
 | 
					 | 
				
			||||||
    out << "DI \"" << prompt;
 | 
					 | 
				
			||||||
    if (length > prompt.len()) 
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
      out << '@' << length;
 | 
					 | 
				
			||||||
      if (mci.is_numeric_picture(i))
 | 
					 | 
				
			||||||
        out << 'R';
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    out << "\" " << field << endl;
 | 
					 | 
				
			||||||
    out << "OU " << (key_id+i) << ' ' << 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 ca_create_fields(TMask& msk, int logicnum, int x, int y, 
 | 
					 | 
				
			||||||
                  short key_id, short des_id)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  const TMultilevel_code_info& mci = multilevel_code_info(logicnum);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  int maxkeylen = 0, maxdeslen = 0;
 | 
					 | 
				
			||||||
  for (int level = 0; level < mci.levels(); level++)
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    const TString& prompt = mci.prompt(level);
 | 
					 | 
				
			||||||
    const TString& picture = mci.picture(level);
 | 
					 | 
				
			||||||
    const int keylen = picture.len();
 | 
					 | 
				
			||||||
    const int deslen = prompt.len();
 | 
					 | 
				
			||||||
    if (keylen > maxkeylen) maxkeylen = keylen;
 | 
					 | 
				
			||||||
    if (deslen > maxdeslen) maxdeslen = deslen;
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  maxdeslen++;
 | 
					 | 
				
			||||||
  const int tab0 = x;
 | 
					 | 
				
			||||||
  const int tab1 = tab0 + maxdeslen + maxkeylen + 4;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  for (int i = 0; i < mci.levels(); i++)
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    const short kid = key_id+i;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    const TString& picture = mci.picture(i);
 | 
					 | 
				
			||||||
    TString80 prompt = mci.prompt(i);
 | 
					 | 
				
			||||||
    prompt.left_just(maxdeslen);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    const char* flags = picture[0] == '0' ? "BUZ" : "BU";
 | 
					 | 
				
			||||||
    TEdit_field* kfld = NULL;
 | 
					 | 
				
			||||||
    if (mci.is_numeric_picture(i))  // 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);
 | 
					 | 
				
			||||||
    ca_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);
 | 
					 | 
				
			||||||
    ca_create_browse2(dfld, i, logicnum, key_id, des_id);
 | 
					 | 
				
			||||||
    dfld.set_group(2);
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
  return mci.levels();
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										15
									
								
								ca/calib01.h
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								ca/calib01.h
									
									
									
									
									
								
							@ -15,11 +15,12 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
class TMultilevel_code_info : public TObject
 | 
					class TMultilevel_code_info : public TObject
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  int _logicnum;
 | 
					  int _logicnum;               // Logic number of main file
 | 
				
			||||||
  TString_array _prompt;
 | 
					  TString_array _prompt;       // Prompts of mask fields
 | 
				
			||||||
  TString_array _picture;
 | 
					  TString_array _picture;      // Pictures of mask fields
 | 
				
			||||||
  TArray _key1_fields;
 | 
					  TArray _key1_fields;         // TFieldrefs of key 1 mask fields
 | 
				
			||||||
  TArray _key2_fields;
 | 
					  TArray _key2_fields;         // TFieldrefs of key 2 mask fields
 | 
				
			||||||
 | 
					  int _parentnum;              // Logic number of parent file (LF_FASI only)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
protected:
 | 
					protected:
 | 
				
			||||||
  bool get_cfg_vars(TString& key, TString& des) const;
 | 
					  bool get_cfg_vars(TString& key, TString& des) const;
 | 
				
			||||||
@ -33,6 +34,7 @@ public:
 | 
				
			|||||||
  bool is_numeric_picture(int level) const;
 | 
					  bool is_numeric_picture(int level) const;
 | 
				
			||||||
  const TString& prompt(int level) const;
 | 
					  const TString& prompt(int level) const;
 | 
				
			||||||
  const TFieldref& fieldref(int level, int key = 1) const;
 | 
					  const TFieldref& fieldref(int level, int key = 1) const;
 | 
				
			||||||
 | 
					  int parent() const { return _parentnum; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  TMultilevel_code_info(int logicnum);
 | 
					  TMultilevel_code_info(int logicnum);
 | 
				
			||||||
  virtual ~TMultilevel_code_info() { }
 | 
					  virtual ~TMultilevel_code_info() { }
 | 
				
			||||||
@ -40,8 +42,7 @@ public:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
const TMultilevel_code_info& ca_multilevel_code_info(int logicnum);
 | 
					const TMultilevel_code_info& ca_multilevel_code_info(int logicnum);
 | 
				
			||||||
bool ca_test_multilevel_field(TEdit_field& fld, int level);
 | 
					bool ca_test_multilevel_field(TEdit_field& fld, int level);
 | 
				
			||||||
int ca_create_fields(TMask& msk, int logicnum, int x, int y, short key_id, short des_id);
 | 
					int ca_create_fields(TMask& msk, int logicnum, int x, int y, short key_id, short des_id, unsigned int mode = 0x0);
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
///////////////////////////////////////////////////////////
 | 
					///////////////////////////////////////////////////////////
 | 
				
			||||||
// TSimple_anal_msk
 | 
					// TSimple_anal_msk
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user