git-svn-id: svn://10.65.10.50/branches/R_10_00@23075 c028cbd2-c16b-5b4b-a496-9718f37d4682

This commit is contained in:
guy 2015-05-04 12:29:46 +00:00
parent b15113ef0a
commit 06642b51cc
11 changed files with 953 additions and 0 deletions

2
lv/lv0100c.h Normal file
View File

@ -0,0 +1,2 @@
#define F_REPORT 301

4
lv/lv0200b.h Normal file
View File

@ -0,0 +1,4 @@
#define F_DACODART 201
#define F_DADESART 202
#define F_ACODART 203
#define F_ADESART 204

60
lv/lv0200b.rep Normal file
View File

@ -0,0 +1,60 @@
<?xml version="1.0" encoding="UTF-8" ?>
<report libraries="ve1300" name="lv0200b" lpi="6">
<description>Stampa valore convenzionale per articolo</description>
<font face="Courier New" size="10" />
<section type="Head" height="6" pattern="1">
<field type="Stringa" width="60" pattern="1">
<source>#SYSTEM.RAGSOC</source>
</field>
<field x="66.5" type="Testo" width="5" height="1.5" pattern="1" text="Pag." />
<field x="71.5" type="Stringa" width="10" pattern="1">
<prescript>MESSAGE _PAGENO</prescript>
</field>
<field y="1" type="Stringa" align="center" width="81.5" height="2" pattern="1">
<font face="Courier New" bold="1" size="14" />
<prescript description="H0.0 PRESCRIPT">"Stampa riepilogo consegne del "
"#DATA" @
+
#THIS !</prescript>
</field>
<field x="0.5" y="3.75" type="Testo" width="20" pattern="1" text="Codice">
<source>RDOC.CODART</source>
</field>
<field x="21" y="3.75" type="Testo" width="50" pattern="1" text="Descrizione articolo">
<source>ANAMAG.DESCR</source>
</field>
<field border="2" y="4.75" type="Linea" width="81.5" height="0" pattern="1" />
<field x="62.5" y="3.75" type="Testo" align="right" width="18" id="101" pattern="1" text="Val.convenzionale">
<source>RDOC.QTA</source>
</field>
</section>
<section type="Head" level="1" pattern="1">
<prescript description="H1 PRESCRIPT">0 #F1.101 !
0 #F1.102 !
0 #F1.103 !</prescript>
</section>
<section type="Body" pattern="1" />
<section type="Body" level="1" pattern="1">
<condition>VALCONV</condition>
<field x="70" type="Prezzo" align="right" width="10" id="102" pattern="1" text="#########,@@">
<source>201@-&#3E;R0</source>
<postscript description="B1.102 POSTSCRIPT">MESSAGE ADD,F2.102
</postscript>
</field>
<field type="Stringa" width="20" id="201" pattern="1">
<source>RDOC.CODART</source>
</field>
<field x="21" type="Stringa" dynamic_height="1" width="40" height="2" id="202" pattern="1">
<source>ANAMAG.DESCR</source>
</field>
</section>
<section type="Foot" height="2" pattern="1" />
<section type="Foot" level="1" pattern="1">
<field border="2" y="1" type="Linea" width="95" height="0" pattern="1" />
</section>
<sql>USE ANAMAG
JOIN &#26;LV047 INTO CODTAB==CODART ALIAS 201
FROM CODART=#DACODART
TO CODART=#ACODART
</sql>
</report>

66
lv/lv0200b.uml Normal file
View File

@ -0,0 +1,66 @@
#include "lv0200b.h"
TOOLBAR "topbar" 0 0 0 2
#include "printbar.h"
ENDPAGE
PAGE "Stampa Valore Convenzionale per articolo" -1 -1 40 5
GROUPBOX DLG_NULL 78 4
BEGIN
PROMPT 1 1 "@bFiltro Articolo"
END
STRING F_DACODART 20
BEGIN
PROMPT 2 2 "Da Articolo "
FLAG "U"
FIELD #DACODART
USE LF_ANAMAG
INPUT CODART F_DACODART
DISPLAY "Codice@20" CODART
DISPLAY "Descrizione@50" DESCR
OUTPUT F_DACODART CODART
OUTPUT F_DADESART DESCR
CHECKTYPE NORMAL
MESSAGE COPY,F_ACODART|CHECK,F_ACODART
END
STRING F_DADESART 50
BEGIN
PROMPT 2 3 " Descrizione"
USE LF_ANAMAG KEY 2
INPUT CODART F_DADESART
DISPLAY "Descrizione@50" DESCR
DISPLAY "Codice@20" CODART
COPY OUTPUT F_DACODART
CHECKTYPE SEARCH
END
STRING F_ACODART 20
BEGIN
PROMPT 2 5 "A Articolo "
FLAG "U"
FIELD #ACODART
USE LF_ANAMAG
INPUT CODART F_ACODART
COPY DISPLAY F_DACODART
OUTPUT F_ACODART CODART
OUTPUT F_ADESART DESCR
CHECKTYPE NORMAL
END
STRING F_ADESART 50
BEGIN
PROMPT 2 6 " Descrizione"
USE LF_ANAMAG KEY 2
INPUT CODART F_ADESART
COPY DISPLAY F_DADESART
DISPLAY "Codice@20" CODART
COPY OUTPUT F_ACODART
CHECKTYPE SEARCH
END
ENDPAGE
ENDMASK

4
lv/lv0200c.h Normal file
View File

@ -0,0 +1,4 @@
#define F_DACODART 201
#define F_DADESART 202
#define F_ACODART 203
#define F_ADESART 204

76
lv/lv0200c.rep Normal file
View File

@ -0,0 +1,76 @@
<?xml version="1.0" encoding="UTF-8" ?>
<report libraries="ve1300" name="lv0200c" lpi="6" command="lv0 -1">
<description>Stampa valore convenzionale per articolo</description>
<font face="Courier New" size="10" />
<section type="Head" height="6" pattern="1">
<field type="Stringa" width="60" pattern="1">
<source>#SYSTEM.RAGSOC</source>
</field>
<field x="66.5" type="Testo" width="5" height="1.5" pattern="1" text="Pag." />
<field x="71.5" type="Stringa" width="10" pattern="1">
<prescript>MESSAGE _PAGENO</prescript>
</field>
<field y="1" type="Stringa" align="center" width="81.5" height="2" pattern="1">
<font face="Courier New" bold="1" size="14" />
<prescript description="H0.0 PRESCRIPT">"Stampa riepilogo consegne del "
"#DATA" @
+
#THIS !</prescript>
</field>
<field x="0.5" y="3.75" type="Testo" width="20" pattern="1" text="Codice">
<source>RDOC.CODART</source>
</field>
<field x="21" y="3.75" type="Testo" width="30" pattern="1" text="Descrizione articolo">
<source>ANAMAG.DESCR</source>
</field>
<field border="2" y="4.75" type="Linea" width="82" height="0" pattern="1" />
<field x="49" y="3.75" type="Testo" align="right" width="10" id="101" pattern="1" text="Dotaz. Od.">
<source>RDOC.QTA</source>
</field>
<field x="60" y="3.75" type="Testo" align="right" width="8" id="101" pattern="1" text="Prezzo">
<source>RDOC.QTA</source>
</field>
<field x="69.5" y="3.75" type="Testo" align="right" width="12" id="101" pattern="1" text="Valore">
<source>RDOC.QTA</source>
</field>
</section>
<section type="Head" level="1" pattern="1">
<prescript description="H1 PRESCRIPT">0 #F1.101 !
0 #F1.102 !
0 #F1.103 !</prescript>
</section>
<section type="Body" pattern="1" />
<section type="Body" level="1" pattern="1">
<field x="52" type="Numero" align="right" width="7" id="100" pattern="1" text="###.###">
<source>#ART.DOTOD</source>
</field>
<field x="59" type="Prezzo" align="right" width="10" id="101" pattern="1" text="###.###.###,@@">
<source>UMART.PREZZO</source>
</field>
<field x="69" type="Valuta" align="right" width="12" id="102" pattern="1" text="###.###.###,@@">
<source>#100*#101</source>
<postscript description="B1.102 POSTSCRIPT">MESSAGE ADD,F1.102
</postscript>
</field>
<field type="Stringa" width="20" id="201" pattern="1">
<source>CODART</source>
</field>
<field x="21" type="Stringa" dynamic_height="1" width="30" height="2" id="202" pattern="1">
<source>ANAMAG.DESCR</source>
</field>
</section>
<section type="Foot" height="2" pattern="1" />
<section type="Foot" level="1" pattern="1">
<field border="2" y="1" type="Linea" width="81" height="0" pattern="1" />
<field y="2.25" type="Testo" width="10" pattern="1" text="Totale" />
<field x="67" y="2" type="Valuta" align="right" width="14" id="102" pattern="1" text="###.###.###,@@">
<postscript description="F1.102 POSTSCRIPT">MESSAGE ADD,F1.102
</postscript>
</field>
</section>
<sql>USE ANAMAG
JOIN UMART INTO CODART==CODART NRIGA==1
FROM CODART=#DACODART
TO CODART=#ACODART
</sql>
</report>

66
lv/lv0200c.uml Normal file
View File

@ -0,0 +1,66 @@
#include "lv0200c.h"
TOOLBAR "topbar" 0 0 0 2
#include "printbar.h"
ENDPAGE
PAGE "Stampa Valore dotazione odierna per articolo" -1 -1 40 5
GROUPBOX DLG_NULL 78 4
BEGIN
PROMPT 1 1 "@bFiltro Articolo"
END
STRING F_DACODART 20
BEGIN
PROMPT 2 2 "Da Articolo "
FLAG "U"
FIELD #DACODART
USE LF_ANAMAG
INPUT CODART F_DACODART
DISPLAY "Codice@20" CODART
DISPLAY "Descrizione@50" DESCR
OUTPUT F_DACODART CODART
OUTPUT F_DADESART DESCR
CHECKTYPE NORMAL
MESSAGE COPY,F_ACODART|CHECK,F_ACODART
END
STRING F_DADESART 50
BEGIN
PROMPT 2 3 " Descrizione"
USE LF_ANAMAG KEY 2
INPUT CODART F_DADESART
DISPLAY "Descrizione@50" DESCR
DISPLAY "Codice@20" CODART
COPY OUTPUT F_DACODART
CHECKTYPE SEARCH
END
STRING F_ACODART 20
BEGIN
PROMPT 2 5 "A Articolo "
FLAG "U"
FIELD #ACODART
USE LF_ANAMAG
INPUT CODART F_ACODART
COPY DISPLAY F_DACODART
OUTPUT F_ACODART CODART
OUTPUT F_ADESART DESCR
CHECKTYPE NORMAL
END
STRING F_ADESART 50
BEGIN
PROMPT 2 6 " Descrizione"
USE LF_ANAMAG KEY 2
INPUT CODART F_ADESART
COPY DISPLAY F_DADESART
DISPLAY "Codice@20" CODART
COPY OUTPUT F_ACODART
CHECKTYPE SEARCH
END
ENDPAGE
ENDMASK

654
lv/lv0201.cpp Normal file
View File

@ -0,0 +1,654 @@
#include "lvlib.h"
#include "lv0201.h"
#include <automask.h>
#include <diction.h>
#include <progind.h>
#include <utility.h>
#include "lv0a00.h"
#include "lv0b00.h"
#include "../cg/cgsaldac.h"
#include <clifo.h>
#include <pconti.h>
#include <partite.h>
#include <saldi.h>
#include <cfven.h>
#include <doc.h>
#include <rdoc.h>
#define RPC_DATAUFATT "DATAUFATT"
#define RPC_IMPFATT "IMPFATT"
#define RPC_TOTFATT "TOTFATT"
#define RPC_DARE "DARE"
#define RPC_AVERE "AVERE"
#define RPC_SCADUTO "SCADUTO"
#define RPC_MOVIMENTATO "MOVIMENTATO"
#define RPC_SOLV "SOLV"
#define RPC_NINS "NINS"
#define RPC_ESPCAM "ESPCAM"
HIDDEN const char * const __fields[] = { CLI_CODCF, CLI_RAGSOC, CLI_CAPCF, TOSTRING(LF_CFVEN) "->" CFV_CODAG, CLI_CODZONA,
TOSTRING(LF_CFVEN) "->" CFV_CODAG1, TOSTRING(LF_CFVEN) "->" CFV_CODLIST, TOSTRING(LF_CFVEN) "->" CFV_SCONTO, CLI_FIDO, CLI_CODPAG,
TOSTRING(LF_CFVEN) "->" CFV_CODMAG, TOSTRING(LF_CFVEN) "->" CFV_CODDEP, TOSTRING(LF_CFVEN) "->" CFV_VSDATAREG, TOSTRING(LF_CFVEN) "->" CFV_CODPORTO, TOSTRING(LF_CFVEN) "->" CFV_CODSPMEZZO,
TOSTRING(LF_CFVEN) "->" CFV_CATVEN, RPC_DATAUFATT, RPC_IMPFATT, RPC_TOTFATT, RPC_DARE,
RPC_AVERE, RPC_SCADUTO, RPC_MOVIMENTATO,
NULL };
HIDDEN const char * const __field_descrs[] = { "Codice", "Ragione Sociale", "CAP", "Codice agente", "Codice Zona",
"Codice Agente 2", "Codice listino", "Sconto", "Fido", "Pagamento",
"Magazzino", "Deposito", "Data Esenzione", "Porto", "Spedizione",
"Categoria economica", "Data ultima fattura", "Fatturato netto", "Totale fatturato", "Dare",
"Avere", "Scaduto", "Movimentato",
NULL };
HIDDEN bool __need_es[] = { false, false, false, false, false,
false, false, false, false, false,
false, false, false, false, false,
false, true, true, true, true,
true, true, true
};
HIDDEN bool __virtual[] = { false, false, false, false, false,
false, false, false, false, false,
false, false, false, false, false,
false, true, true, true, true,
true, true, true
};
;HIDDEN const char * const __macros[] = { "$REPCOM", "$KEY", "$TIPOCF", "$TIPOCF",
NULL };
/* 09 N.INSOLUTI
SOLVIBILITA */
class TRepcom_recordset : public TLV_recordset
{
int _codes;
int _codes_to;
TAssoc_array _fields_val;
TExpression _virtual;
TString_array _num;
// long _fromcli;
// long tocli;
protected:
virtual const TVariant& get_field(int num, const char* field) const;
void scaduto_al(const long codcf, const TDate & data, real & scaduto, real & esposto, real & nins);
bool saldo_cont_al(const long codcf, const TDate & data, real & dare, real & avere);
void load_cli_val(const long codcf, TAssoc_array * vals);
const TVariant& get_field_value(const TString & field) ;
public:
void set_es(int codes) { _codes = codes;}
void set_es_to(int codes) { _codes_to = codes;}
void set_virtual(const char *select) { _virtual.set(select, _strexpr); }
bool eval_virtual();
TAssoc_array & get_curr_row();
virtual TCursor* cursor() const;
TRepcom_recordset(const char* use);
virtual ~TRepcom_recordset() {}
};
HIDDEN TRepcom_recordset * __r = NULL;
bool virfunc(const TRelation* r)
{
return __r->eval_virtual();
}
TAssoc_array & TRepcom_recordset::get_curr_row()
{
const TString cod = get(CLI_CODCF).as_string();
TAssoc_array * row = (TAssoc_array *) _fields_val.objptr(cod);
if (row ==NULL)
{
_fields_val.add(cod, row = new TAssoc_array);
this->load_cli_val(atol(cod), row);
}
return * row;
}
bool TRepcom_recordset::eval_virtual()
{
TAssoc_array& row = get_curr_row();
FOR_EACH_ASSOC_OBJECT(row, obj, key, val)
if (_virtual.exist(key))
_virtual.setvar(key, ((TVariant *) val)->as_string());
return _virtual.as_bool();
}
TCursor* TRepcom_recordset::cursor() const
{
TCursor * c = TLV_recordset::cursor();
if (_virtual.string()[0] != '\0')
c->set_filterfunction(virfunc);
return c;
}
TRepcom_recordset::TRepcom_recordset(const char* use)
: TLV_recordset(use)
{
TString_array tip;
numerazioni_fatture(_num, tip);
TCursor & c = *cursor();
__r = this;
}
void TRepcom_recordset::scaduto_al(const long codcf, const TDate & data, real & scaduto, real & esposto, real & nins)
{
TString query("USE ");
TDate rischio = data;
rischio -= 10 ;
query << LF_PARTITE << "\nFROM " << PART_TIPOCF << "='" << get(DOC_TIPOCF) << "' " << PART_GRUPPO << "='' " << PART_CONTO << "=''\n"
<< PART_SOTTOCONTO << "='" << codcf << "' "
<< "TO " << PART_TIPOCF << "='" << get(DOC_TIPOCF) << "' " << PART_GRUPPO << "='' " << PART_CONTO << "=''\n"
<< PART_SOTTOCONTO << "='" << codcf << "' ";
TISAM_recordset part(query);
for (bool ok=part.move_first(); ok; ok = part.move_next())
{
TPartita p(part.cursor()->curr());
const int last = p.last();
scaduto += p.calcola_scaduto_al(false, data);
for (int i = p.prima_fattura(); i >= 0 && i <= last; i = p.succ(i))
{
TRiga_partite & riga = p.riga(i);
if (riga.is_fattura())
{
const int nrate = riga.rate();
bool sbf = false;
for (int r = 1; r <= nrate; r++)
{
TRiga_scadenze& s = riga.rata(r);
esposto += s.esposto(false, data, rischio, sbf).valore();
}
}
else
if (riga.is_insoluto())
nins += UNO;
}
}
}
bool TRepcom_recordset::saldo_cont_al(const long codcf, const TDate & data, real & dare, real & avere)
{
TString query("USE ");
query << LF_SALDI << " SELECT (" << SLD_SOTTOCONTO << "==\"" << codcf << "\")&&(" << LF_PCON << "->" << PCN_TMCF << "==\"" << get(DOC_TIPOCF) << "\")\nJOIN "
<< LF_PCON << " INTO " << PCN_GRUPPO << "==" << SLD_GRUPPO
<< " " << PCN_CONTO << "==" << SLD_CONTO << "\n"
<< "FROM " << SLD_ANNOES << "='" << _codes << "'\n"
<< "TO " << SLD_ANNOES << "='" << ((_codes_to >= _codes) ? _codes_to : TDate(TODAY).year()) << "'\n" ;
TISAM_recordset saldi(query);
real td;
real ta;
for (bool ok=saldi.move_first(); ok; ok = saldi.move_next())
{
real si = saldi.get(SLD_SALDO).as_real();
real d;
real a;
if (saldi.get(SLD_FLAGSALINI).as_string() == "D")
d += si;
else
a += si;
d += saldi.get(SLD_PDARE).as_real();
a += saldi.get(SLD_PAVERE).as_real();
if (saldi.get(SLD_ANNOES).as_int() == _codes)
{
dare += d;
avere += a;
}
td += d;
ta += a;
}
return td != ZERO || ta != ZERO;
}
void TRepcom_recordset::load_cli_val(const long codcf, TAssoc_array * vals)
{
// manca RPC_SOLV
TDate ult;
real totnetto;
real totfatt;
real dare;
real avere;
real scaduto;
real solv;
real nins;
real espcam;
if (_codes == 0)
_codes = esercizi().last();
TString query("USE ");
query << LF_DOC << " KEY 2\nFROM " << DOC_TIPOCF << "='" << get(DOC_TIPOCF) << "' "
<< DOC_CODCF << "='" << get(DOC_CODCF) << "' " << DOC_PROVV << "='D' " << DOC_ANNO << "='" << _codes << "'\n"
<< "TO " << DOC_TIPOCF << "='" << get(DOC_TIPOCF) << "' "
<< DOC_CODCF << "='" << get(DOC_CODCF) << "' " << DOC_PROVV << "='D' " << DOC_ANNO << "='" << _codes << "'\n";
TDocument_recordset fatt(query);
for (bool ok=fatt.move_first(); ok; ok = fatt.move_next())
{
const TString4 num = fatt.get(DOC_CODNUM).as_string();
if (_num.find(num) >= 0)
{
const TDocumento & doc = fatt.doc(fatt.cursor()->curr());
const TDate datadoc = doc.get_date(DOC_DATADOC);
if (datadoc > ult)
ult = datadoc;
TCurrency_documento netto(doc.totale_netto(), doc);
netto.change_to_firm_val();
totnetto += netto.get_num();
TCurrency_documento tot(doc.totale_doc(), doc);
tot.change_to_firm_val();
totfatt += tot.get_num();
}
}
scaduto_al(codcf, TDate(TODAY), scaduto, espcam, nins);
vals->add(RPC_MOVIMENTATO, saldo_cont_al(codcf, TDate(TODAY), dare, avere) ? TVariant("X") : NULL_VARIANT);
vals->add(RPC_DATAUFATT, TVariant(ult));
vals->add(RPC_IMPFATT, TVariant(totnetto));
vals->add(RPC_TOTFATT, TVariant(totfatt));
vals->add(RPC_DARE, TVariant(dare));
vals->add(RPC_AVERE, TVariant(avere));
vals->add(RPC_SCADUTO, TVariant(scaduto));
vals->add(RPC_SOLV, TVariant(solv));
vals->add(RPC_NINS, TVariant(nins));
vals->add(RPC_ESPCAM, TVariant(espcam));
}
const TVariant& TRepcom_recordset::get_field_value(const TString & field)
{
TVariant& var = get_tmp_var();
TAssoc_array & row = get_curr_row();
TVariant * v = (TVariant *) row.objptr(field);
if (v != NULL)
var = *v;
return var;
}
const TVariant& TRepcom_recordset::get_field(int num, const char* field) const
{
const TString16 f(field);
if (f == RPC_DATAUFATT || f == RPC_IMPFATT || f == RPC_TOTFATT ||
f == RPC_DARE || f == RPC_AVERE || f == RPC_MOVIMENTATO ||
f == RPC_SCADUTO || f == RPC_SOLV || f == RPC_NINS || f == RPC_ESPCAM)
return ((TRepcom_recordset *)this)->get_field_value(f);
return TLV_recordset::get_field(num, field);
}
HIDDEN void update_recset(TLV_report & rep, const TMask & m)
{
TString select;
TString virsel;
TSheet_field& s = m.sfield(F_SHEET);
const int nrows = s.items();
const int key = m.get_int(F_KEY);
TISAM_recordset *r = (TISAM_recordset*) rep.recordset();
TString query = r->query_text();
for (int i = 0; i < nrows; i++)
{
TToken_string & row = s.row(i);
TString fromval(row.get(1));
TString toval(row.get(2));
if (fromval.full() || toval.full())
{
if ( i == 0 && key == 1)
{
int pos = 0;
for (int j = 0; j < 2; j++)
{
pos = query.find("$TIPOCF", pos);
if (pos > 0)
{
pos += 8;
TString wrk;
const TString val = row.get(j + 1);
if (val.full())
wrk << ' ' << CLI_CODCF << "='" << val << "'";
query.insert(wrk, pos);
}
}
}
else
if ( i == 1 && key == 2)
{
int pos = 0;
for (int j = 0; j < 2; j++)
{
pos = query.find("$TIPOCF", pos);
if (pos > 0)
{
pos += 8;
TString wrk;
const TString val = row.get(j + 1);
if (val.full())
wrk << ' ' << CLI_RAGSOC << "='" << val << "\'";
query.insert(wrk, pos);
}
}
}
else
{
const TString field(__fields[i]);
if (__virtual[i])
{
if (virsel.full())
virsel << "&&";
if (i == 22)
{
if (fromval.full())
virsel << " (" << field << "!=\"\")";
}
else
{
if (fromval.empty())
{
if (i == 0 || i == 8 || i > 15)
fromval = "0";
else
fromval = "\"\"";
}
virsel << "BETWEEN(" << field << ",\"" << fromval << "\",\"" << toval << "\")";
}
}
else
{
if (select.full())
select << "&&";
if (fromval.empty())
{
if (i == 0 || i == 8 || i > 15)
fromval = "0";
else
fromval = "\"\"";
}
select << "BETWEEN(" << field << ",\"" << fromval << "\",\"" << toval << "\")";
}
}
}
}
if (select.full())
select.format("(%s)", (const char *) select);
for (int i = 0; __macros[i]; i++)
{
const int pos = query.find(__macros[i]);
TString wrk = query.left(pos);
switch (i)
{
case 0:
wrk << select;
break;
case 1:
wrk << key;
break;
case 2:
case 3:
wrk << m.get(F_TIPOCF);
default:
break;
}
wrk << query.mid(pos + strlen(__macros[i]));
query = wrk;
}
TRepcom_recordset * recset = new TRepcom_recordset(query);
recset->set_es(m.get_int(F_CODES));
recset->set_es_to(m.get_int(F_CODES_TO));
for (int i = 0; i < nrows; i++)
{
TToken_string & row = s.row(i);
TString fromval(row.get(1));
TString toval(row.get(2));
const TString field(row.get(3));
TString from("#DA_"); from << field;
TString to("#A_"); to << field;
recset->set_var(from, TVariant(fromval));
recset->set_var(to, TVariant(toval));
}
recset->set_virtual(virsel);
rep.set_recordset(recset);
}
class TVariable_automask : public TAutomask
{
public:
TVariable_automask(const char* name) : TAutomask(name) {}
};
class TRepcom_mask : public TVariable_automask
{
private:
protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
static TMask* getmask(int numriga, TMask& fullmask);
public:
TRepcom_mask() : TVariable_automask("lv0b00a") { sfield(F_SHEET).set_append(false); ((TVariable_sheet_field &) sfield(F_SHEET)).set_getmask(getmask); }
};
TMask* TRepcom_mask::getmask(int numriga, TMask& fullmask)
{
static TArray __masks;
TMask* mask = (TMask *)__masks.objptr(numriga);
//TSheet_field* sf = fullmask.get_sheet();
//TRepcom_mask& m = (TRepcom_mask &)sf->mask();
if (mask == NULL)
{
TFilename mask_name("lv0b00a");
mask_name = mask_name << format("%02d", numriga + 1);
__masks.add(mask = new TMask(mask_name), numriga);
}
return mask;
}
bool TRepcom_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch (o.dlg())
{
case F_TIPOCF:
if (e == fe_init || e == fe_modify)
{
const TString4 tipo = o.get();
TSheet_field & s = o.mask().sfield(F_SHEET);
const int nrows = s.items();
for (int i = 0; i < nrows; i++)
{
TToken_string & row = s.row(i);
row.add(tipo, s.cid2index(S_TIPOCF));
}
s.force_update();
}
case F_CODES:
if (e == fe_init || e == fe_modify)
{
bool active = o.get().full();
TSheet_field & s = sfield(F_SHEET);
for (int i = 0; __fields[i]; i++)
{
if (__need_es[i])
{
if (!active)
{
TToken_string & row = s.row(i);
row.add("", 1);
row.add("", 2);
}
s.enable_row(i, active);
if (i == 22)
s.disable_cell(i, s.cid2index(S_A));
}
}
s.force_update();
}
break;
case F_SHEET:
if (e == se_query_add)
return false;
break;
default:
break;
}
return true;
}
bool handle_repcom(TLV_report& r)
{
TRepcom_mask m;
TSheet_field & s = m.sfield(F_SHEET);
for (int i = 0; __fields[i]; i++)
{
TToken_string & row = s.row(i);
row.add(__field_descrs[i], 0);
row.add("", 1);
row.add("", 2);
row.add(__fields[i], 3);
row.add("", 4);
}
bool ok = m.run() == K_ENTER;
if (ok)
{
ok = r.load(m.get(F_REPORT)); // Controlla l'effettiva esistenza del report
update_recset(r, m);
}
return ok;
}
bool handle_lv0a00(TLV_report& r, const TString& rep)
{
TFilename mskname(rep); mskname.ext(""); mskname << "a";
TMask m(mskname);
TString4 codnum;
if (mskname.ends_with("aa"))
codnum = ini_get_string(CONFIG_DITTA, "lv", "NUM_GEN");
else
codnum = ini_get_string(CONFIG_DITTA, "lv", "NUM_FAT");
m.set(F_CODNUM, codnum);
bool ok = m.run() == K_ENTER;
if (ok)
{
ok = r.load(rep); // Controlla l'effettiva esistenza del report
TString query, select;
query << "USE " << TOSTRING(LF_DOC) << " KEY 3 SELECT (" << DOC_CODNUM << "==\"" << m.get(F_CODNUM) << "\")";
if (m.get(F_DA_ZONA).full() || m.get(F_A_ZONA).full())
select << "&&(BETWEEN(" << DOC_ZONA << "," << m.get(F_DA_ZONA) << "," << m.get(F_A_ZONA) << "))";
query << select << "\n";
query << "FROM " << DOC_DATADOC << "='" << m.get(F_DA_DATA) << "' " << DOC_PROVV << "='D' " << DOC_ANNO << "='" << m.get_date(F_DA_DATA).year() << "' " << DOC_CODNUM << "='" << m.get(F_CODNUM) << "'\n";
query << "TO " << DOC_DATADOC << "='" << m.get(F_A_DATA) << "' " <<DOC_PROVV << "='D' " << DOC_ANNO << "='" << m.get_date(F_A_DATA).year() << "' " << DOC_CODNUM << "='" << m.get(F_CODNUM) << "'\n";
TISAM_recordset recset(query);
TProgind pi(recset.items(), TR("Estrazione documenti"), true, true);
TFilename trr; //file tracciato record
trr.tempdir();
trr.add("przmed");
TFilename dbf(trr); //file dati
trr.ext("trr");
ofstream of(trr);
dbf.ext("dbf");
of << 1000 << endl;
of << 3 << endl;
of << "CODART|1|20|0|Codice articolo" << endl;
of << "QTA|4|13|5|Quantità" << endl;
of << "VALORE|4|18|5|Valore" << endl;
of << 1 << endl;
of << "CODART|" << endl;
TExternisamfile tmp(dbf, trr, true);
tmp.zap();
TAssoc_array art;
for(bool ok = recset.move_first(); ok && pi.addstatus(1); ok = recset.move_next())
{
const TDocumento doc(recset.cursor()->curr());
const int nrows = doc.physical_rows();
for (int i = 1; i <= nrows; i++)
{
const TRiga_documento & row = doc[i];
const TString codart = row.get(RDOC_CODARTMAG);
if (codart.full())
{
const real qta = row.get_real(RDOC_QTA);
const real valore = qta * row.get_real(RDOC_PREZZO);
TRectype * rec = (TRectype *) art.objptr(codart);
if (rec == NULL)
art.add(codart, (rec = new TRectype(tmp.curr())));
rec->put(RDOC_CODART, codart);
rec->add(RDOC_QTA, qta);
rec->add("VALORE", valore);
}
}
}
FOR_EACH_ASSOC_OBJECT(art, obj, k, rec)
{
tmp.curr() = *((TRectype *)rec);
tmp.write();
}
r.set_recordset(NULL); // Forza azzeramento file Rendy.dbf prima di ricostruirlo
query = "USE PRZMED.DBF KEY 1\n";
query << "JOIN " << LF_ANAMAG << " INTO " << RDOC_CODART "=" << RDOC_CODART << "\n";
TISAM_recordset* rc = new TISAM_recordset(query);
r.set_recordset(rc);
r.mask2report(m);
}
return ok;
}

2
lv/lv0201.h Normal file
View File

@ -0,0 +1,2 @@
bool handle_repcom(TLV_report& r);
bool handle_lv0a00(TLV_report& r, const TString& rep);

9
lv/lv0a00.h Normal file
View File

@ -0,0 +1,9 @@
#define F_SHEET 200
#define F_KEY 201
#define F_TIPOCF 202
#define F_CODES 210
#define F_CODES_TO 211
#define S_A 101
#define S_TIPOCF 102

10
lv/lv0b00.h Normal file
View File

@ -0,0 +1,10 @@
#define F_CODNUM 201
#define F_DA_ZONA 202
#define F_A_ZONA 203
#define F_DA_DATA 204
#define F_A_DATA 205
#define F_REPORT 501