Patch level : 2.2
Files correlati : ve0 Ricompilazione Demo : [ ] Commento : Aggiunta libreria per gestire stampa di documenti tramite report git-svn-id: svn://10.65.10.50/trunk@13176 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
		
							parent
							
								
									ec052542f4
								
							
						
					
					
						commit
						ec3e3658a5
					
				@ -160,28 +160,28 @@ DESCRFAS        = S_NORMALE                     //3000
 | 
				
			|||||||
[DEFAULT]
 | 
					[DEFAULT]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[SHEET]
 | 
					[SHEET]
 | 
				
			||||||
Col(1)=FR_CODMAG
 | 
					Col(0)=FR_CODMAG
 | 
				
			||||||
Col(2)=FR_CODDEP
 | 
					Col(1)=FR_CODDEP
 | 
				
			||||||
Col(3)=FR_CODART
 | 
					Col(2)=FR_CODART
 | 
				
			||||||
Col(4)=FR_LIV1
 | 
					Col(3)=FR_LIV1
 | 
				
			||||||
Col(5)=FR_LIV2
 | 
					Col(4)=FR_LIV2
 | 
				
			||||||
Col(6)=FR_LIV3
 | 
					Col(5)=FR_LIV3
 | 
				
			||||||
Col(7)=FR_LIV4
 | 
					Col(6)=FR_LIV4
 | 
				
			||||||
Col(8)=FR_DESCR
 | 
					Col(7)=FR_DESCR
 | 
				
			||||||
Col(9)=FR_UMQTA
 | 
					Col(8)=FR_UMQTA
 | 
				
			||||||
Col(10)=FR_QTA
 | 
					Col(9)=FR_QTA
 | 
				
			||||||
Col(11)=FR_PREZZO
 | 
					Col(10)=FR_PREZZO
 | 
				
			||||||
Col(12)=FR_SCONTO
 | 
					Col(11)=FR_SCONTO
 | 
				
			||||||
Col(13)=FR_PERCPROV
 | 
					Col(12)=FR_PERCPROV
 | 
				
			||||||
Col(14)=FR_IMPFISUN
 | 
					Col(13)=FR_IMPFISUN
 | 
				
			||||||
Col(15)=FR_IMPFISSO
 | 
					Col(14)=FR_IMPFISSO
 | 
				
			||||||
Col(16)=FR_CODIVA
 | 
					Col(15)=FR_CODIVA
 | 
				
			||||||
Col(17)=FR_ADDIVA
 | 
					Col(16)=FR_ADDIVA
 | 
				
			||||||
Col(18)=FR_CAUS
 | 
					Col(17)=FR_CAUS
 | 
				
			||||||
Col(19)=FR_CODMAGC
 | 
					Col(18)=FR_CODMAGC
 | 
				
			||||||
Col(20)=FR_CODDEPC
 | 
					Col(19)=FR_CODDEPC
 | 
				
			||||||
Col(21)=FR_CODCMS
 | 
					Col(20)=FR_CODCMS
 | 
				
			||||||
Col(22)=FR_FASCMS
 | 
					Col(21)=FR_FASCMS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[RIGHE]
 | 
					[RIGHE]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -159,31 +159,31 @@ NOTECLI         = S_NOCHECK                     //2500
 | 
				
			|||||||
Default(0)=F_CAUSTRASP|VEN
 | 
					Default(0)=F_CAUSTRASP|VEN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[SHEET]
 | 
					[SHEET]
 | 
				
			||||||
Col(1)=FR_CODMAG
 | 
					Col(0)=FR_CODMAG
 | 
				
			||||||
Col(2)=FR_CODDEP
 | 
					Col(1)=FR_CODDEP
 | 
				
			||||||
Col(3)=FR_CODART
 | 
					Col(2)=FR_CODART
 | 
				
			||||||
Col(4)=FR_LIV1
 | 
					Col(3)=FR_LIV1
 | 
				
			||||||
Col(5)=FR_LIV2
 | 
					Col(4)=FR_LIV2
 | 
				
			||||||
Col(6)=FR_LIV3
 | 
					Col(5)=FR_LIV3
 | 
				
			||||||
Col(7)=FR_LIV4
 | 
					Col(6)=FR_LIV4
 | 
				
			||||||
Col(8)=FR_DESCR
 | 
					Col(7)=FR_DESCR
 | 
				
			||||||
Col(9)=FR_UMQTA
 | 
					Col(8)=FR_UMQTA
 | 
				
			||||||
Col(10)=FR_QTA
 | 
					Col(9)=FR_QTA
 | 
				
			||||||
Col(11)=FR_PREZZO
 | 
					Col(10)=FR_PREZZO
 | 
				
			||||||
Col(12)=FR_SCONTO
 | 
					Col(11)=FR_SCONTO
 | 
				
			||||||
Col(13)=FR_PERCPROV
 | 
					Col(12)=FR_PERCPROV
 | 
				
			||||||
Col(14)=FR_IMPFISUN
 | 
					Col(13)=FR_IMPFISUN
 | 
				
			||||||
Col(15)=FR_IMPFISSO
 | 
					Col(14)=FR_IMPFISSO
 | 
				
			||||||
Col(16)=FR_CODIVA
 | 
					Col(15)=FR_CODIVA
 | 
				
			||||||
Col(17)=FR_ADDIVA
 | 
					Col(16)=FR_ADDIVA
 | 
				
			||||||
Col(18)=FR_NCOLLI
 | 
					Col(17)=FR_NCOLLI
 | 
				
			||||||
Col(19)=FR_PNETTO
 | 
					Col(18)=FR_PNETTO
 | 
				
			||||||
Col(20)=FR_TARA
 | 
					Col(19)=FR_TARA
 | 
				
			||||||
Col(21)=FR_CAUS
 | 
					Col(20)=FR_CAUS
 | 
				
			||||||
Col(22)=FR_CODMAGC
 | 
					Col(21)=FR_CODMAGC
 | 
				
			||||||
Col(23)=FR_CODDEPC
 | 
					Col(22)=FR_CODDEPC
 | 
				
			||||||
Col(24)=FR_CODCMS
 | 
					Col(23)=FR_CODCMS
 | 
				
			||||||
Col(25)=FR_FASCMS
 | 
					Col(24)=FR_FASCMS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[RIGHE]
 | 
					[RIGHE]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -132,26 +132,26 @@ BLANK           = S_DISABILITATO                //4000
 | 
				
			|||||||
[DEFAULT]
 | 
					[DEFAULT]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[SHEET]
 | 
					[SHEET]
 | 
				
			||||||
Col(1)=FR_CODMAG
 | 
					Col(0)=FR_CODMAG
 | 
				
			||||||
Col(2)=FR_CODDEP
 | 
					Col(1)=FR_CODDEP
 | 
				
			||||||
Col(3)=FR_CODART
 | 
					Col(2)=FR_CODART
 | 
				
			||||||
Col(4)=FR_LIV1
 | 
					Col(3)=FR_LIV1
 | 
				
			||||||
Col(5)=FR_LIV2
 | 
					Col(4)=FR_LIV2
 | 
				
			||||||
Col(6)=FR_LIV3
 | 
					Col(5)=FR_LIV3
 | 
				
			||||||
Col(7)=FR_LIV4
 | 
					Col(6)=FR_LIV4
 | 
				
			||||||
Col(8)=FR_DESCR
 | 
					Col(7)=FR_DESCR
 | 
				
			||||||
Col(9)=FR_UMQTA
 | 
					Col(8)=FR_UMQTA
 | 
				
			||||||
Col(10)=FR_QTA
 | 
					Col(9)=FR_QTA
 | 
				
			||||||
Col(11)=FR_PREZZO
 | 
					Col(10)=FR_PREZZO
 | 
				
			||||||
Col(12)=FR_SCONTO
 | 
					Col(11)=FR_SCONTO
 | 
				
			||||||
Col(13)=FR_PERCPROV
 | 
					Col(12)=FR_PERCPROV
 | 
				
			||||||
Col(14)=FR_IMPFISUN
 | 
					Col(13)=FR_IMPFISUN
 | 
				
			||||||
Col(15)=FR_IMPFISSO
 | 
					Col(14)=FR_IMPFISSO
 | 
				
			||||||
Col(16)=FR_CODIVA
 | 
					Col(15)=FR_CODIVA
 | 
				
			||||||
Col(17)=FR_ADDIVA
 | 
					Col(16)=FR_ADDIVA
 | 
				
			||||||
Col(18)=FR_CAUS
 | 
					Col(17)=FR_CAUS
 | 
				
			||||||
Col(19)=FR_CODMAGC
 | 
					Col(18)=FR_CODMAGC
 | 
				
			||||||
Col(20)=FR_CODDEPC
 | 
					Col(19)=FR_CODDEPC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[RIGHE]
 | 
					[RIGHE]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										135
									
								
								ve/ve1400.cpp
									
									
									
									
									
								
							
							
						
						
									
										135
									
								
								ve/ve1400.cpp
									
									
									
									
									
								
							@ -6,13 +6,14 @@
 | 
				
			|||||||
#include <utility.h>
 | 
					#include <utility.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "velib.h"
 | 
					#include "velib.h"
 | 
				
			||||||
 | 
					#include "vereplib.h"
 | 
				
			||||||
#include "../ba/ba8400.h"
 | 
					#include "../ba/ba8400.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
///////////////////////////////////////////////////////////
 | 
					///////////////////////////////////////////////////////////
 | 
				
			||||||
// Utility
 | 
					// Utility
 | 
				
			||||||
///////////////////////////////////////////////////////////
 | 
					///////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool cod2app(const char* tok, TString& app)
 | 
					static bool cod2app(const char* tok, TString& app)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  if (isalpha(tok[0]) && isalpha(tok[1]) && atoi(tok+2) > 1000)
 | 
					  if (isalpha(tok[0]) && isalpha(tok[1]) && atoi(tok+2) > 1000)
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
@ -23,7 +24,7 @@ bool cod2app(const char* tok, TString& app)
 | 
				
			|||||||
  return false;
 | 
					  return false;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool get_xml_attr(const TString& line, const char* attr, TString& value)
 | 
					static bool get_xml_attr(const TString& line, const char* attr, TString& value)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  TString str; str << ' ' << attr << "=\"";
 | 
					  TString str; str << ' ' << attr << "=\"";
 | 
				
			||||||
  const int pos = line.find(str);
 | 
					  const int pos = line.find(str);
 | 
				
			||||||
@ -40,7 +41,7 @@ bool get_xml_attr(const TString& line, const char* attr, TString& value)
 | 
				
			|||||||
  return false;
 | 
					  return false;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool get_xml_child(const TString& line, const char* tag, TString& value)
 | 
					static bool get_xml_child(const TString& line, const char* tag, TString& value)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  TString str; str << '<' << tag << '>';
 | 
					  TString str; str << '<' << tag << '>';
 | 
				
			||||||
  const int pos = line.find(str);
 | 
					  const int pos = line.find(str);
 | 
				
			||||||
@ -85,134 +86,6 @@ bool rep2app(const char* name, TString& app, TString& desc)
 | 
				
			|||||||
  return true;
 | 
					  return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
///////////////////////////////////////////////////////////
 | 
					 | 
				
			||||||
// TDocument_cache
 | 
					 | 
				
			||||||
///////////////////////////////////////////////////////////
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class TDocument_cache : TCache
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
protected:
 | 
					 | 
				
			||||||
  virtual TObject* key2obj(const char* key);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
public:
 | 
					 | 
				
			||||||
  TDocumento& doc(const TRectype& rec);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  TDocument_cache() : TCache(23) { }
 | 
					 | 
				
			||||||
  virtual ~TDocument_cache() { }
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
TObject* TDocument_cache::key2obj(const char* key)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  TToken_string k(key);
 | 
					 | 
				
			||||||
  const char provv = *k.get(0);
 | 
					 | 
				
			||||||
  const int anno = k.get_int();
 | 
					 | 
				
			||||||
  const TString4 codnum= k.get();
 | 
					 | 
				
			||||||
  const long ndoc = k.get_long();
 | 
					 | 
				
			||||||
  return new TDocumento(provv, anno, codnum, ndoc);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
TDocumento& TDocument_cache::doc(const TRectype& rec)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  TToken_string key;
 | 
					 | 
				
			||||||
  key = rec.get(DOC_PROVV);
 | 
					 | 
				
			||||||
  key.add(rec.get(DOC_ANNO));
 | 
					 | 
				
			||||||
  key.add(rec.get(DOC_CODNUM));
 | 
					 | 
				
			||||||
  key.add(rec.get(DOC_NDOC));
 | 
					 | 
				
			||||||
  TDocumento& d =  *(TDocumento*)objptr(key);
 | 
					 | 
				
			||||||
  return d;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
///////////////////////////////////////////////////////////
 | 
					 | 
				
			||||||
// TDocument_recordset
 | 
					 | 
				
			||||||
///////////////////////////////////////////////////////////
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class TDocument_recordset : public TISAM_recordset
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  TDocument_cache _cache;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
protected:
 | 
					 | 
				
			||||||
  virtual const TVariant& get(int logic, const char* field) const;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
public:
 | 
					 | 
				
			||||||
  TDocument_recordset(const char* use) : TISAM_recordset(use) { }
 | 
					 | 
				
			||||||
  virtual ~TDocument_recordset() { }
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const TVariant& TDocument_recordset::get(int num, const char* field) const
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  const int idx = relation()->log2ind(num);
 | 
					 | 
				
			||||||
  if (idx < 0)
 | 
					 | 
				
			||||||
    return NULL_VARIANT;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  const TRectype& rec = relation()->file(idx).curr();
 | 
					 | 
				
			||||||
  const int logic = rec.num();
 | 
					 | 
				
			||||||
  if (logic == LF_DOC || logic == LF_RIGHEDOC)
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    // Se non e' un campo standard, ma e' calcolato da una formula...
 | 
					 | 
				
			||||||
    if (rec.type(field) == _nullfld) 
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
      const TDocumento& doc = ((TDocument_cache&)_cache).doc(rec);
 | 
					 | 
				
			||||||
      TVariant& var = get_tmp_var();
 | 
					 | 
				
			||||||
      const TFieldref ref(field, logic);
 | 
					 | 
				
			||||||
      if (logic == LF_DOC)
 | 
					 | 
				
			||||||
      {
 | 
					 | 
				
			||||||
        var = ref.read(doc);
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
      else
 | 
					 | 
				
			||||||
      {
 | 
					 | 
				
			||||||
        const int nriga = rec.get_int(RDOC_NRIGA);
 | 
					 | 
				
			||||||
        const TRiga_documento& rdoc = doc[nriga];
 | 
					 | 
				
			||||||
        var = ref.read(rdoc);
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
      return var;     
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  return TISAM_recordset::get(num, field);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
///////////////////////////////////////////////////////////
 | 
					 | 
				
			||||||
// TDocument_report
 | 
					 | 
				
			||||||
///////////////////////////////////////////////////////////
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class TDocument_report : public TReport
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
protected:
 | 
					 | 
				
			||||||
  virtual bool set_recordset(const TString& query);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
public:
 | 
					 | 
				
			||||||
  bool load(const char* name);
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
bool TDocument_report::set_recordset(const TString& query)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  return TReport::set_recordset(new TDocument_recordset(query));
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
bool TDocument_report::load(const char* name)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  const bool ok = TReport::load(name);
 | 
					 | 
				
			||||||
  if (ok)
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    // Purtroppo il recordset delle sottosezioni deve essere reimpostato a mano
 | 
					 | 
				
			||||||
    for (int i = 11; i <= 999; i++)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
      TReport_section* sec = find_section('B', i);
 | 
					 | 
				
			||||||
      if (sec != NULL)
 | 
					 | 
				
			||||||
      {
 | 
					 | 
				
			||||||
        TRecordset* recset = sec->recordset();
 | 
					 | 
				
			||||||
        if (recset != NULL)
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
          const TString use = recset->query_text();
 | 
					 | 
				
			||||||
          recset = new TDocument_recordset(use);
 | 
					 | 
				
			||||||
          sec->set_recordset(recset);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  return ok;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
///////////////////////////////////////////////////////////
 | 
					///////////////////////////////////////////////////////////
 | 
				
			||||||
// TKlarkKent_mask
 | 
					// TKlarkKent_mask
 | 
				
			||||||
///////////////////////////////////////////////////////////
 | 
					///////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
				
			|||||||
@ -244,7 +244,7 @@ public:
 | 
				
			|||||||
  const char  tipocf() const;
 | 
					  const char  tipocf() const;
 | 
				
			||||||
  void  set_defaults(TMask& m) const;
 | 
					  void  set_defaults(TMask& m) const;
 | 
				
			||||||
  const TString_array& keys_descrs();
 | 
					  const TString_array& keys_descrs();
 | 
				
			||||||
  const TString_array& sheet_columns();
 | 
					  const TString_array& sheet_columns() const;
 | 
				
			||||||
  const TString_array& handlers() const;
 | 
					  const TString_array& handlers() const;
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  const TString& mask_name() const { return get("S4");}
 | 
					  const TString& mask_name() const { return get("S4");}
 | 
				
			||||||
 | 
				
			|||||||
@ -1444,7 +1444,7 @@ const TTipo_documento& TDocumento::tipo(const char * tipodoc)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
const TTipo_documento& TDocumento::tipo() const
 | 
					const TTipo_documento& TDocumento::tipo() const
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  const TString4 tipodoc(get("TIPODOC"));
 | 
					  const TString4 tipodoc(get(DOC_TIPODOC));
 | 
				
			||||||
  return tipo(tipodoc);
 | 
					  return tipo(tipodoc);
 | 
				
			||||||
}  
 | 
					}  
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -99,7 +99,7 @@ const TString& TTipo_documento::riferimento(const TDocumento & doc, TString& rif
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
const TString_array& TTipo_documento::keys_descrs()
 | 
					const TString_array& TTipo_documento::keys_descrs()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  if (_keys_descrs.items() == 0)
 | 
					  if (_keys_descrs.empty())
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    TString16 var, tiporiga;
 | 
					    TString16 var, tiporiga;
 | 
				
			||||||
    TFilename pn; profile_name(pn);
 | 
					    TFilename pn; profile_name(pn);
 | 
				
			||||||
@ -139,18 +139,18 @@ const TString_array& TTipo_documento::keys_descrs()
 | 
				
			|||||||
  return _keys_descrs;
 | 
					  return _keys_descrs;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const TString_array& TTipo_documento::sheet_columns()
 | 
					const TString_array& TTipo_documento::sheet_columns() const
 | 
				
			||||||
{ 
 | 
					{ 
 | 
				
			||||||
  if (_sheet_columns.items() == 0)
 | 
					  if (_sheet_columns.empty())
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    TFilename pn; profile_name(pn);
 | 
					    TFilename pn; profile_name(pn);
 | 
				
			||||||
    TConfig prof(pn, "SHEET");
 | 
					    TConfig prof(pn, "SHEET");
 | 
				
			||||||
    for (int i = 0; i < MAX_COLUMNS; i++)
 | 
					    for (int i = 0; i < MAX_COLUMNS; i++)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
			const TString & id = prof.get("Col", NULL, i);
 | 
								const TString& id = prof.get("Col", NULL, i);
 | 
				
			||||||
			if (atoi(id) == 0)
 | 
					      if (atoi(id) <= 0)
 | 
				
			||||||
				break;
 | 
									break;
 | 
				
			||||||
      _sheet_columns.add(id);
 | 
					      ((TString_array&)_sheet_columns).add(id);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
@ -159,7 +159,7 @@ const TString_array& TTipo_documento::sheet_columns()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
const TString_array&  TTipo_documento::handlers() const 
 | 
					const TString_array&  TTipo_documento::handlers() const 
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  if (_handlers.items() == 0)
 | 
					  if (_handlers.empty())
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    TString16 chiave;
 | 
					    TString16 chiave;
 | 
				
			||||||
    TFilename pn; profile_name(pn);
 | 
					    TFilename pn; profile_name(pn);
 | 
				
			||||||
@ -178,7 +178,7 @@ const TString_array&  TTipo_documento::handlers() const
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void TTipo_documento::set_defaults(TMask& m) const
 | 
					void TTipo_documento::set_defaults(TMask& m) const
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  if (_defaults.items() == 0) // Carica lo string_array con i defaults
 | 
					  if (_defaults.empty()) // Carica lo string_array con i defaults
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    TFilename pn; profile_name(pn);
 | 
					    TFilename pn; profile_name(pn);
 | 
				
			||||||
    TConfig prof(pn, "DEFAULT");
 | 
					    TConfig prof(pn, "DEFAULT");
 | 
				
			||||||
@ -186,8 +186,7 @@ void TTipo_documento::set_defaults(TMask& m) const
 | 
				
			|||||||
    for(int i = 0; ; i++)
 | 
					    for(int i = 0; ; i++)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
			TToken_string s(prof.get("Default", NULL, i));
 | 
								TToken_string s(prof.get("Default", NULL, i));
 | 
				
			||||||
 
 | 
					 			if (s.empty())
 | 
				
			||||||
			if (s.empty())
 | 
					 | 
				
			||||||
				break;
 | 
									break;
 | 
				
			||||||
			const int field = s.get_int();
 | 
								const int field = s.get_int();
 | 
				
			||||||
     ((TTipo_documento*)this)->_defaults.add(s.get(), field);
 | 
					     ((TTipo_documento*)this)->_defaults.add(s.get(), field);
 | 
				
			||||||
 | 
				
			|||||||
@ -67,7 +67,7 @@ TDocumento_mask::TDocumento_mask(const char* td)
 | 
				
			|||||||
    _std_dep = m.standarddep();
 | 
					    _std_dep = m.standarddep();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  _doc.set_tipo(td);
 | 
					  _doc.set_tipo(td);
 | 
				
			||||||
  const TString mname = _doc.tipo().mask_name();
 | 
					  const TString16 mname = _doc.tipo().mask_name();
 | 
				
			||||||
  read_mask(mname, 0, MAX_PAGES);
 | 
					  read_mask(mname, 0, MAX_PAGES);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  _sheet = &sfield(F_SHEET);      
 | 
					  _sheet = &sfield(F_SHEET);      
 | 
				
			||||||
@ -401,9 +401,9 @@ void TDocumento_mask::configura_sheet(TSheet_field& sheet)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  TBit_array to_delete(MAX_COLUMNS);
 | 
					  TBit_array to_delete(MAX_COLUMNS);
 | 
				
			||||||
  to_delete.set();
 | 
					  to_delete.set();
 | 
				
			||||||
  TTipo_documento& tdoc = (TTipo_documento&) _doc.tipo();
 | 
					  const TTipo_documento& tdoc = _doc.tipo();
 | 
				
			||||||
  const TString_array& sheet_columns = tdoc.sheet_columns();
 | 
					  const TString_array& sheet_columns = tdoc.sheet_columns();
 | 
				
			||||||
  int ncols = sheet_columns.items();
 | 
					  const int ncols = sheet_columns.items();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  TToken_string colonne;
 | 
					  TToken_string colonne;
 | 
				
			||||||
  int i;
 | 
					  int i;
 | 
				
			||||||
@ -411,7 +411,7 @@ void TDocumento_mask::configura_sheet(TSheet_field& sheet)
 | 
				
			|||||||
  colonne = "0";
 | 
					  colonne = "0";
 | 
				
			||||||
  for (i = 0; i < ncols; i ++ )
 | 
					  for (i = 0; i < ncols; i ++ )
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    TToken_string& sheet_col = (TToken_string&) sheet_columns[i];
 | 
					    TToken_string& sheet_col = (TToken_string&)sheet_columns.row(i);
 | 
				
			||||||
    const int field_id = sheet_col.get_int(0);
 | 
					    const int field_id = sheet_col.get_int(0);
 | 
				
			||||||
    const int coltomove = sheet.cid2index(field_id);
 | 
					    const int coltomove = sheet.cid2index(field_id);
 | 
				
			||||||
    to_delete.reset(coltomove);
 | 
					    to_delete.reset(coltomove);
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										139
									
								
								ve/vereplib.cpp
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										139
									
								
								ve/vereplib.cpp
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,139 @@
 | 
				
			|||||||
 | 
					#include <xvt.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "vereplib.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					///////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					// TDocument_cache
 | 
				
			||||||
 | 
					///////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class TDocument_cache : TCache
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					protected:
 | 
				
			||||||
 | 
					  virtual TObject* key2obj(const char* key);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
					  TDocumento& doc(const TRectype& rec);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  TDocument_cache() : TCache(23) { }
 | 
				
			||||||
 | 
					  virtual ~TDocument_cache() { }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TObject* TDocument_cache::key2obj(const char* key)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  TToken_string k(key);
 | 
				
			||||||
 | 
					  const char provv = *k.get(0);
 | 
				
			||||||
 | 
					  const int anno = k.get_int();
 | 
				
			||||||
 | 
					  const TString4 codnum= k.get();
 | 
				
			||||||
 | 
					  const long ndoc = k.get_long();
 | 
				
			||||||
 | 
					  return new TDocumento(provv, anno, codnum, ndoc);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TDocumento& TDocument_cache::doc(const TRectype& rec)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  TToken_string key;
 | 
				
			||||||
 | 
					  key = rec.get(DOC_PROVV);
 | 
				
			||||||
 | 
					  key.add(rec.get(DOC_ANNO));
 | 
				
			||||||
 | 
					  key.add(rec.get(DOC_CODNUM));
 | 
				
			||||||
 | 
					  key.add(rec.get(DOC_NDOC));
 | 
				
			||||||
 | 
					  TDocumento& d =  *(TDocumento*)objptr(key);
 | 
				
			||||||
 | 
					  return d;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const TDocumento& rec2doc(const TRectype& rec)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  static TDocument_cache* _cache = NULL;
 | 
				
			||||||
 | 
					  if (_cache == NULL)
 | 
				
			||||||
 | 
					    _cache = new TDocument_cache;
 | 
				
			||||||
 | 
					  return _cache->doc(rec);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					///////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					// TDocument_recordset
 | 
				
			||||||
 | 
					///////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const TVariant& TDocument_recordset::get(int num, const char* field) const
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  const int idx = relation()->log2ind(num);
 | 
				
			||||||
 | 
					  if (idx < 0)
 | 
				
			||||||
 | 
					    return NULL_VARIANT;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const TRectype& rec = relation()->file(idx).curr();
 | 
				
			||||||
 | 
					  const int logic = rec.num();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Se non e' un campo standard, ma e' calcolato da una formula...
 | 
				
			||||||
 | 
					  if ((logic == LF_DOC || logic == LF_RIGHEDOC) && rec.type(field) == _nullfld)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    TVariant& var = get_tmp_var();
 | 
				
			||||||
 | 
					    const TDocumento& doc = rec2doc(rec);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    if (xvt_str_compare_ignoring_case(field, "SEGNO") == 0)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      var = doc.is_nota_credito() ? -UNO : UNO;   
 | 
				
			||||||
 | 
					    } else
 | 
				
			||||||
 | 
					    if (xvt_str_compare_ignoring_case(field, "IS_COSTO") == 0)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      var = doc.get_char(DOC_TIPOCF)=='F' ? UNO : ZERO;
 | 
				
			||||||
 | 
					    } else
 | 
				
			||||||
 | 
					    if (xvt_str_compare_ignoring_case(field, "IS_RICAVO") == 0)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      var = doc.get_char(DOC_TIPOCF)=='C' ? UNO : ZERO;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      const TFieldref ref(field, logic);
 | 
				
			||||||
 | 
					      if (logic == LF_DOC)
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        var = ref.read(doc);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        const int nriga = rec.get_int(RDOC_NRIGA);
 | 
				
			||||||
 | 
					        const TRiga_documento& rdoc = doc[nriga];
 | 
				
			||||||
 | 
					        var = ref.read(rdoc);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return var;     
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return TISAM_recordset::get(num, field);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TDocument_recordset::TDocument_recordset(const char* use) 
 | 
				
			||||||
 | 
					                   : TISAM_recordset(use) 
 | 
				
			||||||
 | 
					{ }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TDocument_recordset::~TDocument_recordset() 
 | 
				
			||||||
 | 
					{ }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					///////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					// TDocument_report
 | 
				
			||||||
 | 
					///////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool TDocument_report::set_recordset(const TString& query)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  return TReport::set_recordset(new TDocument_recordset(query));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool TDocument_report::load(const char* name)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  const bool ok = TReport::load(name);
 | 
				
			||||||
 | 
					  if (ok)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    // Purtroppo il recordset delle sottosezioni deve essere reimpostato a mano
 | 
				
			||||||
 | 
					    for (int i = 11; i <= 999; i++)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      TReport_section* sec = find_section('B', i);
 | 
				
			||||||
 | 
					      if (sec != NULL)
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        TRecordset* recset = sec->recordset();
 | 
				
			||||||
 | 
					        if (recset != NULL)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          const TString use = recset->query_text();
 | 
				
			||||||
 | 
					          recset = new TDocument_recordset(use);
 | 
				
			||||||
 | 
					          sec->set_recordset(recset);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return ok;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										33
									
								
								ve/vereplib.h
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										33
									
								
								ve/vereplib.h
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,33 @@
 | 
				
			|||||||
 | 
					#ifndef __VEREPLIB_H
 | 
				
			||||||
 | 
					#define __VEREPLIB_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef __RECPORT_H
 | 
				
			||||||
 | 
					#include <report.h>
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef __VELIB_H
 | 
				
			||||||
 | 
					#include "velib.h"
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class TDocument_recordset : public TISAM_recordset
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					protected:
 | 
				
			||||||
 | 
					  virtual const TVariant& get(int logic, const char* field) const;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
					  TDocument_recordset(const char* use);
 | 
				
			||||||
 | 
					  virtual ~TDocument_recordset();
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class TDocument_report : public TReport
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					protected:
 | 
				
			||||||
 | 
					  virtual bool set_recordset(const TString& query);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
					  bool load(const char* name);
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const TDocumento& rec2doc(const TRectype& rec);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user