Patch level :

Files correlati     :
Ricompilazione Demo : [ ]
Commento            : stampa a kg  (inizio)


git-svn-id: svn://10.65.10.50/trunk@19978 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
cris 2010-01-25 14:44:27 +00:00
parent 65126e81e2
commit 28fb3889c5
2 changed files with 166 additions and 77 deletions

View File

@ -4,6 +4,7 @@
#include <relation.h> #include <relation.h>
#include <reprint.h> #include <reprint.h>
#include "lvlib.h"
#include "lv1200a.h" #include "lv1200a.h"
#include "../ve/velib.h" #include "../ve/velib.h"
@ -26,64 +27,73 @@ bool TStampa_a_kg_msk::on_field_event(TOperable_field& o, TField_event e, long j
return true; return true;
} }
/*
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
// TStampa_a_kg_set // TStampa_a_kg_rep
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
class TStampa_a_kg_set : public TISAM_recordset class TStampa_a_kg_rep : public TReport
{ {
protected: protected:
static bool status_filter(const TRelation* rel); virtual bool get_usr_val(const TString& name, TVariant& var) const;
virtual void set_custom_filter(TCursor& cursor) const;
public:
TStampa_a_kg_set(const TMask& mask);
}; };
// Accetta solo i documenti stampabili in definitivo bool TStampa_a_kg_rep::get_usr_val(const TString& name, TVariant& var) const
bool TStampa_a_kg_set::status_filter(const TRelation* rel)
{ {
const TRectype& doc = rel->curr(); var = 0;
const char stato_attuale = doc.get_char(DOC_STATO); if (name == "#PESO")
if (stato_attuale <= ' ') {
return true; const TRecordset& recset = *recordset();
const TString4 umkg = ini_get_string(CONFIG_DITTA, "lv", "UmKg");
const TString4 umri = recset.get(RDOC_UMQTA).as_string();
//se la riga è già espressa in kg non devo fare niente
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
const TString4 umart = artlav.um()[0].get(UMART_UM);
const real qta = artlav.convert_to_um(recset.get(RDOC_QTA).as_real(), umart, umri, false);
const TTipo_documento& tipo = cached_tipodoc(doc.get(DOC_TIPODOC)); //se l'articolo non è espresso in kg, allora:
if (stato_attuale == tipo.stato_finale_stampa()) if(umart != umkg)
return false; {
//preparo una cache sulla tabella delle unità di misura
const TString& stati_stampa = tipo.stati_iniziali_stampa(); const TRectype& unita = cache().get("%UMS", umart);
return stati_stampa.blank() || stati_stampa.find(stato_attuale) >= 0; //leggo e controllo se esiste l'unità di misura di riferimento
const TString4 umrif = unita.get("S7");
if(umrif.empty())
{
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;
}
}
}
}
}
}
return true;
}
else
return TReport::get_usr_val(name, var);
} }
void TStampa_a_kg_set::set_custom_filter(TCursor& cursor) const
{
cursor.set_filterfunction(status_filter);
}
TStampa_a_kg_set::TStampa_a_kg_set(const TMask& mask) : TISAM_recordset("USE DOC")
{
const TDate data_from = mask.get_date(F_DATA_FROM);
TString query = "USE DOC \n"
"SELECT (BETWEEN(DATADOC,#DATA_FROM,#DATA_TO))"
"&&(BETWEEN(CODCF,#CODCF_FROM,#CODCF_TO))"
"&&(BETWEEN(G1:CODITI,#CODITI_FROM,#CODITI_TO))\n"
"JOIN CLIFO INTO TIPOCF=='C' CODCF==CODCF\n"
"JOIN %STD INTO CODTAB==STATO\n"
;
query << "FROM PROVV=\"D\" ANNO=" << data_from.year() << " CODNUM=\"" << mask.get(F_CODNUM) << "\"\n"
<< "TO PROVV=\"D\" ANNO=" << data_from.year() << " CODNUM=\"" << mask.get(F_CODNUM) << "\"\n";
set(query);
//inserire parametri filtri
set_var("#DATA_FROM", data_from);
set_var("#DATA_TO", mask.get_date(F_DATA_TO));
set_var("#CODCF_FROM", TVariant(mask.get(F_CODCF_FROM)));
set_var("#CODCF_TO", TVariant(mask.get(F_CODCF_TO)));
set_var("#CODITI_FROM", TVariant(mask.get(F_CODITI_FROM)));
set_var("#CODITI_TO", TVariant(mask.get(F_CODITI_TO)));
}
*/
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
// TStampa_a_kg_app // TStampa_a_kg_app
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
@ -96,10 +106,9 @@ protected:
virtual bool create(); virtual bool create();
virtual bool destroy(); virtual bool destroy();
TISAM_recordset prepara_recordset() const; TISAM_recordset* prepara_recordset() const;
public: public:
bool transfer();
virtual void main_loop(); virtual void main_loop();
}; };
@ -118,7 +127,7 @@ bool TStampa_a_kg_app::destroy()
} }
//PREPARA_RECORDSET: metodo che estre tutte le righe documento in base ai criteri selezionati //PREPARA_RECORDSET: metodo che estre tutte le righe documento in base ai criteri selezionati
TISAM_recordset TStampa_a_kg_app::prepara_recordset() const TISAM_recordset* TStampa_a_kg_app::prepara_recordset() const
{ {
const TString4 codnum = ini_get_string(CONFIG_DITTA, "lv", "NUM_GEN"); const TString4 codnum = ini_get_string(CONFIG_DITTA, "lv", "NUM_GEN");
@ -134,56 +143,82 @@ TISAM_recordset TStampa_a_kg_app::prepara_recordset() const
TString query; TString query;
query << "USE RDOC\n"; query << "USE RDOC\n";
if(datadog) if(datadog)
query << "SELECT (BETWEEN(DATADOC,#DADATA,#ADATA))"; query << "SELECT (BETWEEN(33.DATADOC,#DADATA,#ADATA))";
else else
query << "SELECT (BETWEEN(33.G1:DATAGEN,#DADATA,#ADATA))"; query << "SELECT (BETWEEN(33.G1:DATAGEN,#DADATA,#ADATA))";
query << "&&(33.TIPOCF=\"C\")"; query << "&&(TIPORIGA==\"21\")&&(33.TIPOCF=\"C\")";
switch(raggruppa) switch(raggruppa)
{ {
case 1: query << "&&(BETWEEN(33.CODCF,#DACODCF,#ACODCF))\nBY 33.CODCF CODART\n"; break; case 1: query << "&&(BETWEEN(33.CODCF,#DACODCF,#ACODCF))\nBY 33.CODCF CODART\n"; break;
case 2: query << "&&(BETWEEN(33.G1:CODITI,#DAITI,#AITI)\nBY 33.G1:CODITI CODART\n"; break; case 2: query << "&&(BETWEEN(33.G1:CODITI,#DAITI,#AITI)\nBY 33.G1:CODITI CODART\n"; break;
case 3: query << "&&(BETWEEN(33.CODAG,#DAAUT,#AAUT)\nBY 33.CODAG CODART\n"; break; case 3: query << "&&(BETWEEN(33.CODAG,#DAAUT,#AAUT)\nBY 33.CODAG CODART\n"; break;
default: query << "\nBY CODART\n"; break; default: query << "\nBY CODART\n"; break;
} }
query << "JOIN DOC INTO CODNUM==CODNUM ANNO==ANNO PROVV==PROVV NDOC==NDOC\n" query << "JOIN DOC INTO CODNUM==CODNUM ANNO==ANNO PROVV==PROVV NDOC==NDOC\n"
<< "FROM CODNUM=" << codnum << " ANNO=" << daanno << " PROVV=D\n" << "JOIN ANAMAG INTO CODART==CODART\n"
<< "TO CODNUM=" << codnum << " ANNO=" << aanno << " PROVV=D\n"; //<< "FROM CODNUM=" << codnum << " ANNO=" << daanno << " PROVV=\"D\"\n"
//<< "FROM CODNUM=#CODNUM ANNO=#DAANNO PROVV=\"D\"\n"
//<< "TO CODNUM=#CODNUM ANNO=#AANNO PROVV=\"D\"\n";
<< "FROM CODNUM=#CODNUM\n"
<< "TO CODNUM=#CODNUM\n";
TISAM_recordset righedoc(query); TISAM_recordset* righedoc = new TISAM_recordset(query);
righedoc.set_var("#DADATA", dadata); righedoc->set_var("#DADATA", dadata);
righedoc.set_var("#ADATA", adata); righedoc->set_var("#ADATA", adata);
righedoc->set_var("#CODNUM", codnum);
//righedoc.set_var("#DAANNO", daanno);
//righedoc.set_var("#AANNO", aanno);
switch(raggruppa) switch(raggruppa)
{ {
case 1: case 1:
righedoc.set_var("#DACODCF", _msk->get_long(F_DACODCF)); righedoc->set_var("#DACODCF", _msk->get_long(F_DACODCF));
righedoc.set_var("#ACODCF", _msk->get_long(F_ACODCF)); righedoc->set_var("#ACODCF", _msk->get_long(F_ACODCF));
break; break;
case 2: case 2:
righedoc.set_var("#DAITI", _msk->get_long(F_DACODITI)); righedoc->set_var("#DAITI", _msk->get_long(F_DACODITI));
righedoc.set_var("#AITI", _msk->get_long(F_ACODITI)); righedoc->set_var("#AITI", _msk->get_long(F_ACODITI));
break; break;
case 3: case 3:
righedoc.set_var("#DAAUT", _msk->get_long(F_DACODAUT)); righedoc->set_var("#DAAUT", _msk->get_long(F_DACODAUT));
righedoc.set_var("#AAUT", _msk->get_long(F_ACODAUT)); righedoc->set_var("#AAUT", _msk->get_long(F_ACODAUT));
break; break;
default: break; default: break;
} }
return righedoc; return righedoc;
} }
//TRANSFER: metodo principale dell'elaborazione, che non deve fare niente
//perchè viene tutto gestito nella maschera
bool TStampa_a_kg_app::transfer()
{
TISAM_recordset righedoc = prepara_recordset();
return true;
}
void TStampa_a_kg_app::main_loop() void TStampa_a_kg_app::main_loop()
{ {
while (_msk->run() == K_ENTER) while (_msk->run() == K_ENTER)
transfer(); {
} TISAM_recordset* righedoc = prepara_recordset();
TStampa_a_kg_rep rep;
const int raggruppa = _msk->get_int(F_RAGX);
bool ok;
switch (raggruppa)
{
case '1':
ok = rep.load("lv1200b");
break;
case '2':
ok = rep.load("lv1200c");
break;
case '3':
ok = rep.load("lv1200d");
break;
default:
ok = rep.load("lv1200e");
break;
}
if (ok)
rep.set_recordset(righedoc);
TReport_book book;
ok = book.add(rep);
if (ok)
book.print_or_preview();
delete righedoc;
}
}
int lv1200(int argc, char *argv[]) int lv1200(int argc, char *argv[])
{ {

54
lv/lv1200e.rep Executable file
View File

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="UTF-8" ?>
<report name="lv1200e" lpi="6">
<description>Stampa a kg per articolo</description>
<font face="Courier New" size="10" />
<section type="Head">
<field x="16" type="Testo" width="20" pattern="1" text="Codice">
<source>RDOC.CODART</source>
</field>
<field x="37" type="Testo" width="50" pattern="1" text="Descrizione articolo">
<source>ANAMAG.DESCR</source>
</field>
<field x="88" type="Testo" align="right" width="15" id="101" pattern="1" text="Quantita">
<source>RDOC.QTA</source>
</field>
<field x="104" type="Testo" align="right" width="10" id="102" pattern="1" text="Importo">
<source>RDOC.IMPORTO</source>
</field>
<field x="115" type="Testo" hidden="1" align="right" width="15" id="103" pattern="1" text="Peso" />
</section>
<section type="Head" level="1" />
<section type="Head" level="2">
<groupby>CODART</groupby>
</section>
<section type="Body" />
<section type="Body" level="1">
<field type="Stringa" hidden="1" width="20" pattern="1">
<source>RDOC.CODART</source>
</field>
<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">
<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>
<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">
<source>#PESO</source>
<postscript description="B1.103 POSTSCRIPT">MESSAGE ADD,F2.103</postscript>
</field>
</section>
<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" />
</section>
<sql>USE RDOC
</sql>
</report>