Patch level : 10.0 no patch

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :

Stampa a kg
ora i tlv_report derivano da tdocument_report
e i tlv_recordset derivano da tdocument_recordset
spostare velib07 in vedoc
controllare lv0200 e lv2300


git-svn-id: svn://10.65.10.50/trunk@19982 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
alex 2010-01-25 23:49:34 +00:00
parent f588484f0c
commit c2dee90b16
5 changed files with 116 additions and 60 deletions

View File

@ -32,59 +32,84 @@ bool TStampa_a_kg_msk::on_field_event(TOperable_field& o, TField_event e, long j
// TStampa_a_kg_rep
///////////////////////////////////////////////////////////
class TStampa_a_kg_rep : public TDocument_report
class TStampa_a_kg_rep : public TLV_report
{
TString4 _umkg;
protected:
virtual bool get_usr_val(const TString& name, TVariant& var) const;
public:
TStampa_a_kg_rep();
virtual ~TStampa_a_kg_rep() {}
};
TStampa_a_kg_rep::TStampa_a_kg_rep()
{
_umkg = ini_get_string(CONFIG_DITTA, "lv", "UmKg");
}
bool TStampa_a_kg_rep::get_usr_val(const TString& name, TVariant& var) const
{
var = 0;
if (name == "#PESO")
{
const TRecordset& recset = *recordset();
const TString4 umkg = ini_get_string(CONFIG_DITTA, "lv", "UmKg");
const TLV_recordset& recset = (TLV_recordset &) *recordset();
const TString4 umri = recset.get(RDOC_UMQTA).as_string();
//se la riga è già espressa in kg non devo fare niente
if(umri == umkg)
if (umri == _umkg)
var = recset.get(RDOC_QTA);
// altrimenti
else
{
// istanzio un TArticolo_lavanderie. serve??
const TString80 codart = recset.get(RDOC_CODART).as_string();
TArticolo_lavanderie artlav(codart);
//leggo e controllo l'unità di misura del peso
//leggo e controllo il peso dell'articolo
const TString4 ump = artlav.get(ANAMAG_UMP);
const real peso = artlav.get_real(ANAMAG_PESO);
if (!ump.empty() && peso!=ZERO)
{
//leggo l'unità di misura dell'articolo e la quantità convertita all'unità di misura dell'articolo
int cazzone = artlav.um().rows();
const TString4 umart = artlav.um()[1].get(UMART_UM);
const real qta = artlav.convert_to_um(recset.get(RDOC_QTA).as_real(), umart, umri, false);
const TString & codart = recset.get(RDOC_CODARTMAG).as_string();
TArticolo & art = cached_article(codart);
const real qta = art.convert_to_um(recset.get(RDOC_QTA).as_real(), NULL, umri, false);
//se l'articolo non è espresso in kg, allora:
if(umart != umkg)
if (art.is_first_um(_umkg))
var = qta;
else
{
//leggo e controllo l'unità di misura del peso
//leggo e controllo il peso dell'articolo
const TString4 ump = art.get(ANAMAG_UMP);
const real peso = art.get_real(ANAMAG_PESO);
if (ump.full() && peso != ZERO)
{
//preparo una cache sulla tabella delle unità di misura
const TRectype& unita = cache().get("%UMS", umart);
const TRectype& unita = cache().get("%UMS", ump);
//leggo e controllo se esiste l'unità di misura di riferimento
const TString4 umrif = unita.get("S7");
if(umrif.empty())
if (umrif == _umkg)
{
if(umrif == umkg)
//leggo e controllo il fattore di conversione
const real fatconv = unita.get_real("R10");
if (fatconv != ZERO)
{
//leggo e controllo il fattore di conversione
const real fatconv = unita.get_real("R10");
if (fatconv != ZERO)
{
//se tutti i controlli sono andati a buon fine, converto la quantità e la restituisco
const real qtaconv = qta * fatconv * peso;
var = qtaconv;
}
//se tutti i controlli sono andati a buon fine, converto la quantità e la restituisco
const real qtaconv = qta * fatconv * peso;
var = qtaconv;
}
}
}
else
{
//preparo una cache sulla tabella delle unità di misura
const TRectype& unita = cache().get("%UMS", art.first_um());
//leggo e controllo se esiste l'unità di misura di riferimento
const TString4 umrif = unita.get("S7");
if (umrif == _umkg)
{
//leggo e controllo il fattore di conversione
const real fatconv = unita.get_real("R10");
if (fatconv != ZERO)
{
//se tutti i controlli sono andati a buon fine, converto la quantità e la restituisco
const real qtaconv = qta * fatconv * peso;
var = qtaconv;
}
}
}
@ -108,7 +133,7 @@ protected:
virtual bool create();
virtual bool destroy();
TISAM_recordset* prepara_recordset() const;
void prepara_recordset(TStampa_a_kg_rep & rep) const;
public:
virtual void main_loop();
@ -129,7 +154,7 @@ bool TStampa_a_kg_app::destroy()
}
//PREPARA_RECORDSET: metodo che estre tutte le righe documento in base ai criteri selezionati
TISAM_recordset* TStampa_a_kg_app::prepara_recordset() const
void TStampa_a_kg_app::prepara_recordset(TStampa_a_kg_rep & rep) const
{
const TString4 codnum = ini_get_string(CONFIG_DITTA, "lv", "NUM_GEN");
@ -139,8 +164,8 @@ TISAM_recordset* TStampa_a_kg_app::prepara_recordset() const
const TDate dadata = _msk->get_date(F_DADATA);
const TDate adata = _msk->get_date(F_ADATA);
const int daanno = dadata.year();
const int aanno = adata.year();
const long daanno = dadata.year();
const long aanno = adata.year();
TString query;
query << "USE RDOC\n";
@ -158,14 +183,20 @@ TISAM_recordset* TStampa_a_kg_app::prepara_recordset() const
}
query << "JOIN DOC INTO CODNUM==CODNUM ANNO==ANNO PROVV==PROVV NDOC==NDOC\n"
<< "JOIN ANAMAG INTO CODART==CODART\n"
<< "FROM CODNUM=#CODNUM\n"
<< "TO CODNUM=#CODNUM\n";
<< "FROM CODNUM=#CODNUM ANNO=#DAANNO\n"
<< "TO CODNUM=#CODNUM ANNO=#AANNO\n";
TISAM_recordset* righedoc = new TISAM_recordset(query);
righedoc->set_var("#DADATA", dadata);
rep.set_recordset(query);
TRecordset * righedoc = rep.recordset();
righedoc->set_var("#DADATA", dadata);
righedoc->set_var("#ADATA", adata);
righedoc->set_var("#DAANNO", daanno);
righedoc->set_var("#AANNO", aanno);
righedoc->set_var("#CODNUM", codnum);
switch(raggruppa)
switch(raggruppa)
{
case 1:
righedoc->set_var("#DACODCF", _msk->get_long(F_DACODCF));
@ -179,17 +210,15 @@ TISAM_recordset* TStampa_a_kg_app::prepara_recordset() const
righedoc->set_var("#DAAUT", _msk->get_long(F_DACODAUT));
righedoc->set_var("#AAUT", _msk->get_long(F_ACODAUT));
break;
default: break;
default:
break;
}
return righedoc;
}
void TStampa_a_kg_app::main_loop()
{
while (_msk->run() == K_ENTER)
{
TISAM_recordset* righedoc = prepara_recordset();
int cazzone = righedoc->items();
TStampa_a_kg_rep rep;
const int raggruppa = _msk->get_int(F_RAGX);
bool ok;
@ -208,13 +237,11 @@ void TStampa_a_kg_app::main_loop()
ok = rep.load("lv1200e");
break;
}
if (ok)
rep.TReport::set_recordset(righedoc);
prepara_recordset(rep);
TReport_book book;
ok = book.add(rep);
if (ok)
book.print_or_preview();
delete righedoc;
}
}

View File

@ -20,6 +20,9 @@
<section type="Head" level="1" />
<section type="Head" level="2">
<groupby>CODART</groupby>
<prescript description="H2 PRESCRIPT">0 #F2.101 !
0 #F2.102 !
0 #F2.103 !</prescript>
</section>
<section type="Body" />
<section type="Body" level="1">
@ -29,15 +32,15 @@
<field x="21" type="Stringa" hidden="1" width="50" pattern="1">
<source>ANAMAG.DESCR</source>
</field>
<field x="72" type="Numero" hidden="1" align="right" width="15" id="101" pattern="1">
<field x="71" type="Numero" hidden="1" align="right" width="8" id="101" pattern="1">
<source>RDOC.QTA</source>
<postscript description="B1.101 POSTSCRIPT">MESSAGE ADD,F2.101</postscript>
</field>
<field x="88" type="Valuta" hidden="1" align="right" width="10" id="102" pattern="1" text="#########,@@">
<source>RDOC.IMPORTO</source>
<field x="80" type="Valuta" hidden="1" align="right" width="10" id="102" pattern="1" text="#########,@@">
<source>RDOC.IMPNS</source>
<postscript description="B1.102 POSTSCRIPT">MESSAGE ADD,F2.102</postscript>
</field>
<field x="99" type="Numero" hidden="1" align="right" width="15" id="103" pattern="1">
<field x="90" type="Numero" hidden="1" align="right" width="10" id="103" pattern="1" text="#####,@@@">
<source>#PESO</source>
<postscript description="B1.103 POSTSCRIPT">MESSAGE ADD,F2.103</postscript>
</field>
@ -45,9 +48,15 @@
<section type="Foot" />
<section type="Foot" level="1" />
<section type="Foot" level="2">
<field x="81" type="Numero" align="right" width="15" id="101" pattern="1" />
<field x="97" type="Valuta" align="right" width="10" id="102" pattern="1" text="#########,@@" />
<field x="108" type="Numero" align="right" width="15" id="103" pattern="1" />
<field x="1" type="Stringa" width="20" pattern="1">
<source>RDOC.CODART</source>
</field>
<field x="21.5" type="Stringa" width="50" pattern="1">
<source>ANAMAG.DESCR</source>
</field>
<field x="71.5" type="Numero" align="right" width="15" id="101" pattern="1" />
<field x="87" type="Valuta" align="right" width="10" id="102" pattern="1" text="#########,@@" />
<field x="97.5" type="Numero" align="right" width="15" id="103" pattern="1" />
</section>
<sql>USE RDOC
</sql>

View File

@ -188,12 +188,25 @@ TDate TGenera_planning_app::cerca_ultima_consegna(long codcf, long codcont, cons
{
//instanzia un recordset di LVRCONSPLAN prendendo tutte le consegne fatte per un cliente su un certo...
//...itinerario prima di una certa data
TISAM_recordset rplan("USE LVRCONSPLAN KEY 3\nFROM CODCF=#CODCF CODCONT=#CODCONT\nTO CODCF=#CODCF CODCONT=#CODCONT DTCONS=#DATA");
/* TISAM_recordset rplan("USE LVRCONSPLAN KEY 3\nFROM CODCF=#CODCF CODCONT=#CODCONT\nTO CODCF=#CODCF CODCONT=#CODCONT DTCONS=#DATA");
rplan.set_var("#CODCF",codcf);
rplan.set_var("#CODCONT",codcont);
rplan.set_var("#DATA",data);
if (rplan.move_last())
return rplan.get(LVRCONSPLAN_DTCONS).as_date(); // data dell'ultima consegna fatta
*/
TLocalisamfile rplan(LF_LVRCONSPLAN);
rplan.put(LVRCONSPLAN_CODCF, codcf);
rplan.put(LVRCONSPLAN_CODCONT, codcont);
rplan.put(LVRCONSPLAN_DTCONS, data);
rplan.put(LVRCONSPLAN_CODITI, 999);
int err;
if ((err = rplan.read(_isgteq)) == NOERR)
err = rplan.prev();
if (err == NOERR)
return rplan.get_date(LVRCONSPLAN_DTCONS); // data dell'ultima consegna fatta
return data;
}

View File

@ -1627,7 +1627,7 @@ bool TLV_report::get_usr_val(const TString& name, TVariant& var) const
return true;
}
}
return TReport::get_usr_val(name, var);
return TDocument_report::get_usr_val(name, var);
}
TCursor* TLV_recordset::cursor() const
@ -1653,5 +1653,6 @@ bool TLV_report::set_recordset(const TString& sql)
TReport::set_recordset(rex);
return rex != NULL;
}
return TReport::set_recordset(sql);
}
return TDocument_report::set_recordset(sql);
}

View File

@ -21,6 +21,10 @@
#include "../ve/velib.h"
#endif
#ifndef __VELIB07_H
#include "../ve/velib07.h"
#endif
#define RDOC_QTAREALE "CIN01"
#define RDOC_TOTREALE "CIN02"
#define RDOC_PROVV1REALE "CIN03"
@ -373,16 +377,16 @@ public:
TGiac_per_cli(); //costruttore
};
class TLV_recordset : public TISAM_recordset
class TLV_recordset : public TDocument_recordset
{
public:
virtual TCursor* cursor() const;
TLV_recordset(const char* use) : TISAM_recordset(use) {}
TLV_recordset(const char* use) : TDocument_recordset(use) {}
virtual ~TLV_recordset() {}
};
class TLV_report : public TReport
class TLV_report : public TDocument_report
{
protected:
virtual bool get_usr_val(const TString& name, TVariant& var) const;
@ -390,6 +394,8 @@ protected:
public:
virtual bool set_recordset(TRecordset* rs) { return TReport::set_recordset(rs); }
virtual bool set_recordset(const TString& sql);
TLV_report() {}
virtual ~TLV_report() {}
};
#endif