Stampa di controllo bolle fatturate
git-svn-id: svn://10.65.10.50/branches/R_10_00@22673 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
fd2949c567
commit
7e8e6a0609
135
ve/ve1600.cpp
135
ve/ve1600.cpp
@ -159,7 +159,7 @@ protected:
|
||||
virtual const TVariant& get(const char* column_name) const;
|
||||
|
||||
public:
|
||||
void add(const TRectype& rbol, const char* message);
|
||||
void add(const TRectype& rbol, const char* message, char bof);
|
||||
TStampa_bolfat_recordset() { }
|
||||
};
|
||||
|
||||
@ -172,7 +172,7 @@ bool TStampa_bolfat_recordset::move_to(TRecnotype pos)
|
||||
}
|
||||
|
||||
unsigned int TStampa_bolfat_recordset::columns() const
|
||||
{ return 6; }
|
||||
{ return 7; }
|
||||
|
||||
const TRecordset_column_info& TStampa_bolfat_recordset::column_info(unsigned int column) const
|
||||
{
|
||||
@ -187,7 +187,8 @@ const TRecordset_column_info& TStampa_bolfat_recordset::column_info(unsigned int
|
||||
case 2: _info._name = RDOC_CODNUM; _info._width = 4; break;
|
||||
case 3: _info._name = RDOC_NDOC; _info._width = 6; _info._type = _realfld; break; break;
|
||||
case 4: _info._name = RDOC_NRIGA; _info._width = 4; _info._type = _realfld; break; break;
|
||||
default: _info._name = "MESSAGE"; _info._width =50; break;
|
||||
case 5: _info._name = "MESSAGE"; _info._width =50; break;
|
||||
default: _info._name = "TYPE"; _info._width = 1; break;
|
||||
}
|
||||
|
||||
return _info;
|
||||
@ -218,6 +219,11 @@ const TVariant& TStampa_bolfat_recordset::get(const char* column_name) const
|
||||
const TFixed_string val(row.get(5));
|
||||
return get_tmp_var() = val;
|
||||
}
|
||||
if (field.ends_with("TYPE"))
|
||||
{
|
||||
const TFixed_string val(row.get(6));
|
||||
return get_tmp_var() = val;
|
||||
}
|
||||
|
||||
TToken_string bolkey;
|
||||
bolkey.add(row.get(0));
|
||||
@ -236,43 +242,19 @@ const TVariant& TStampa_bolfat_recordset::get(const char* column_name) const
|
||||
if (field.starts_with("34."))
|
||||
return get_tmp_var() = rbol.get(field.mid(3));
|
||||
|
||||
if (field[2] == '@')
|
||||
{
|
||||
TLocalisamfile ffat(LF_RIGHEDOC);
|
||||
ffat.setkey(4);
|
||||
TRectype& rfat = ffat.curr();
|
||||
rfat.put(RDOC_DAPROVV, rbol.get(RDOC_PROVV));
|
||||
rfat.put(RDOC_DAANNO, rbol.get(RDOC_ANNO));
|
||||
rfat.put(RDOC_DACODNUM, rbol.get(RDOC_CODNUM));
|
||||
rfat.put(RDOC_DANDOC, rbol.get(RDOC_NDOC));
|
||||
rfat.put(RDOC_DAIDRIGA, rbol.get(RDOC_IDRIGA));
|
||||
if (ffat.read() == NOERR)
|
||||
{
|
||||
if (field.starts_with("34@."))
|
||||
return get_tmp_var() = rfat.get(field.mid(4));
|
||||
TToken_string fatkey;
|
||||
fatkey.add(rfat.get(RDOC_PROVV));
|
||||
fatkey.add(rfat.get(RDOC_ANNO));
|
||||
fatkey.add(rfat.get(RDOC_CODNUM));
|
||||
fatkey.add(rfat.get(RDOC_NDOC));
|
||||
TDocumento& fat = ((TDocache&)_doc).doc(fatkey);
|
||||
if (field.starts_with("33@."))
|
||||
return get_tmp_var() = fat.get(field.mid(4));
|
||||
}
|
||||
}
|
||||
|
||||
return get_tmp_var() = EMPTY_STRING;
|
||||
return NULL_VARIANT;
|
||||
}
|
||||
|
||||
void TStampa_bolfat_recordset::add(const TRectype& rbol, const char* message)
|
||||
void TStampa_bolfat_recordset::add(const TRectype& rdoc, const char* message, char bof)
|
||||
{
|
||||
TToken_string* str = new TToken_string;
|
||||
str->add(rbol.get(RDOC_PROVV));
|
||||
str->add(rbol.get(RDOC_ANNO));
|
||||
str->add(rbol.get(RDOC_CODNUM));
|
||||
str->add(rbol.get(RDOC_NDOC));
|
||||
str->add(rbol.get(RDOC_NRIGA));
|
||||
str->add(rdoc.get(RDOC_PROVV));
|
||||
str->add(rdoc.get(RDOC_ANNO));
|
||||
str->add(rdoc.get(RDOC_CODNUM));
|
||||
str->add(rdoc.get(RDOC_NDOC));
|
||||
str->add(rdoc.get(RDOC_NRIGA));
|
||||
str->add(message);
|
||||
str->add(bof);
|
||||
_bolle.add(str);
|
||||
}
|
||||
|
||||
@ -291,13 +273,29 @@ public:
|
||||
////////////////////////////////////////////////////////
|
||||
// APPLICAZIONE
|
||||
////////////////////////////////////////////////////////
|
||||
|
||||
class TStampa_bolfat : public TSkeleton_application
|
||||
{
|
||||
protected:
|
||||
const char* compare_rows(const TRectype& rbol, const TRectype& rfat) const;
|
||||
void scan_num(const TString& num, const TDate& dal, const TDate& al, TStampa_bolfat_recordset& recset);
|
||||
virtual void main_loop();
|
||||
};
|
||||
|
||||
const char* TStampa_bolfat::compare_rows(const TRectype& rbol, const TRectype& rfat) const
|
||||
{
|
||||
const TString& codart_b = rbol.get(RDOC_CODART);
|
||||
const TString& codart_f = rfat.get(RDOC_CODART);
|
||||
if (codart_b.full() && codart_b != codart_f)
|
||||
return TR("Diverso articolo in fattura");
|
||||
|
||||
const real qta_b = rbol.get(RDOC_QTA);
|
||||
const real qta_f = rfat.get(RDOC_QTA);
|
||||
if (!qta_b.is_zero() && qta_b != qta_f)
|
||||
return TR("Diversa quantità in fattura");
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void TStampa_bolfat::scan_num(const TString& codnum, const TDate& dal, const TDate& al, TStampa_bolfat_recordset& recset)
|
||||
{
|
||||
@ -310,49 +308,64 @@ void TStampa_bolfat::scan_num(const TString& codnum, const TDate& dal, const TDa
|
||||
bolle.set_var("#CODNUM", codnum);
|
||||
bolle.set_var("#DATAINIZIO", dal);
|
||||
bolle.set_var("#DATAFINE", al);
|
||||
const TRectype& bol = bolle.cursor()->curr();
|
||||
|
||||
TLocalisamfile rfat(LF_RIGHEDOC);
|
||||
rfat.setkey(4);
|
||||
|
||||
TString msg; msg << TR("Controllo numerazione ") << codnum;
|
||||
TProgind pi(bolle.items(), msg);
|
||||
|
||||
for (bool ok = bolle.move_first(); ok; ok = bolle.move_next())
|
||||
{
|
||||
if (!pi.addstatus(1))
|
||||
break;
|
||||
const TRectype& bol = bolle.cursor()->curr();
|
||||
const TString& tipodoc = bol.get(DOC_TIPODOC);
|
||||
const char stato = bol.get_char(DOC_STATO);
|
||||
if (stato >= _stato_finale && _tipi_doc.is_key(tipodoc))
|
||||
{
|
||||
TDocumento bolla(bol);
|
||||
FOR_EACH_PHYSICAL_RDOC(bolla, r, rbol) if (!rbol->is_descrizione())
|
||||
{
|
||||
const real bol_qta = rbol->get(RDOC_QTA);
|
||||
if (!bol_qta.is_zero())
|
||||
{
|
||||
rfat.put(RDOC_DAPROVV, rbol->get(RDOC_PROVV));
|
||||
rfat.put(RDOC_DAANNO, rbol->get(RDOC_ANNO));
|
||||
rfat.put(RDOC_DACODNUM, rbol->get(RDOC_CODNUM));
|
||||
rfat.put(RDOC_DANDOC, rbol->get(RDOC_NDOC));
|
||||
rfat.put(RDOC_DAIDRIGA, rbol->get(RDOC_IDRIGA));
|
||||
if (rfat.read() == NOERR)
|
||||
{
|
||||
TToken_string msg(50, '\n');
|
||||
const TString& codart = rbol->get(RDOC_CODART);
|
||||
if (codart.full() && codart != rfat.get(RDOC_CODART))
|
||||
msg.add(TR("Diverso articolo in fattura"));
|
||||
TToken_string rdoc_key;
|
||||
rdoc_key.add(bol.get(DOC_CODNUM));
|
||||
rdoc_key.add(bol.get(DOC_ANNO));
|
||||
rdoc_key.add(bol.get(DOC_PROVV));
|
||||
rdoc_key.add(bol.get(DOC_NDOC));
|
||||
TRecord_array bolla(rdoc_key, LF_RIGHEDOC);
|
||||
|
||||
const real fat_qta = rfat.get(RDOC_QTA);
|
||||
if (bol_qta != fat_qta)
|
||||
msg.add(TR("Diversa quantità in fattura"));
|
||||
|
||||
if (msg.full())
|
||||
recset.add(*rbol, msg);
|
||||
for (int r = 1; r > 0 && r <= bolla.rows(); r = bolla.succ_row(r))
|
||||
{
|
||||
const TRectype& rbol = bolla.row(r);
|
||||
if (rbol.get(RDOC_CODART).blank() || rbol.get_real(RDOC_QTA).is_zero())
|
||||
continue;
|
||||
|
||||
rfat.put(RDOC_DAPROVV, rbol.get(RDOC_PROVV));
|
||||
rfat.put(RDOC_DAANNO, rbol.get(RDOC_ANNO));
|
||||
rfat.put(RDOC_DACODNUM, rbol.get(RDOC_CODNUM));
|
||||
rfat.put(RDOC_DANDOC, rbol.get(RDOC_NDOC));
|
||||
rfat.put(RDOC_DAIDRIGA, rbol.get(RDOC_IDRIGA));
|
||||
int err = rfat.read();
|
||||
if (err == NOERR)
|
||||
{
|
||||
bool bolled = false;
|
||||
for (; err == NOERR; err = rfat.next())
|
||||
{
|
||||
if (rfat.get_long(RDOC_DAIDRIGA) != rbol.get_long(RDOC_IDRIGA) ||
|
||||
rfat.get_long(RDOC_DANDOC) != rbol.get_long(RDOC_NDOC))
|
||||
break;
|
||||
|
||||
const char* msg = compare_rows(rbol, rfat.curr());
|
||||
if (msg && *msg)
|
||||
{
|
||||
if (!bolled)
|
||||
{
|
||||
recset.add(rbol, " ", 'B');
|
||||
bolled = true;
|
||||
}
|
||||
recset.add(rfat.curr(), msg, 'F');
|
||||
}
|
||||
}
|
||||
else
|
||||
recset.add(*rbol, TR("Nessuna fattura associata"));
|
||||
}
|
||||
else
|
||||
recset.add(rbol, TR("Nessuna fattura associata"), 'B');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,48 +1,74 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<report name="ve1600a" orientation="2" lpi="8">
|
||||
<font face="Courier New" size="7" />
|
||||
<font face="Courier New" size="8" />
|
||||
<section type="Head" pattern="1">
|
||||
<font face="Courier New" bold="1" size="7" />
|
||||
<field y="1" type="Testo" width="30" pattern="1" text="Anomalia riscontrata " />
|
||||
<field x="30" y="1" type="Testo" width="10" pattern="1" text="Data" />
|
||||
<field x="41" y="1" type="Testo" width="10" pattern="1" text="Documento" />
|
||||
<field x="53" y="1" type="Testo" align="right" width="4" pattern="1" text="Riga" />
|
||||
<field x="58" type="Testo" width="20" pattern="1" text="Articolo" />
|
||||
<field x="80" type="Testo" width="30" pattern="1" text="Descrizione" />
|
||||
<field x="110" type="Testo" width="2" pattern="1" text="UM" />
|
||||
<field x="113" type="Testo" width="10" pattern="1" text="Quantità"/>
|
||||
<field border="3" y="2.5" type="Linea" width="180" height="0" pattern="1" />
|
||||
<font face="Courier New" bold="1" size="8" />
|
||||
<field border="2" x="40" type="Linea" height="2" pattern="1" />
|
||||
<field border="2" x="99.5" type="Linea" height="2" pattern="1" />
|
||||
<field border="2" x="113.5" type="Linea" height="2" pattern="1" />
|
||||
<field y="0.5" type="Testo" width="30" pattern="1" text="Anomalia riscontrata " />
|
||||
<field x="41" y="0.5" type="Testo" width="10" pattern="1" text="Tipo" />
|
||||
<field x="51" y="0.5" type="Testo" width="10" pattern="1" text="Data" />
|
||||
<field x="62" y="0.5" type="Testo" width="10" pattern="1" text="Documento" />
|
||||
<field x="74" y="0.5" type="Testo" align="right" width="4" pattern="1" text="Riga" />
|
||||
<field x="79" y="0.5" type="Testo" width="20" pattern="1" text="Articolo" />
|
||||
<field x="100" y="0.5" type="Testo" width="2" pattern="1" text="UM" />
|
||||
<field x="103" y="0.5" type="Testo" align="right" width="10" pattern="1" text="Quantit&#E0;" />
|
||||
<field x="114" y="0.5" type="Testo" width="30" pattern="1" text="Descrizione" />
|
||||
<field border="3" y="2" type="Linea" width="165" height="0" pattern="1" />
|
||||
</section>
|
||||
<section type="Head" level="1" pattern="1">
|
||||
<field border="3" type="Testo" align="center" width="165" height="2" pattern="1" text="Controllo Bolle Fatturate">
|
||||
<font face="Courier New" bold="1" size="14" />
|
||||
</field>
|
||||
</section>
|
||||
<section type="Head" level="1" pattern="1" />
|
||||
<section type="Body" pattern="1" />
|
||||
<section type="Body" level="1" pattern="1">
|
||||
<field type="Stringa" dynamic_height="1" width="30" height="2" pattern="1">
|
||||
<source>MESSAGE</source>
|
||||
</field>
|
||||
<field x="30" type="Data" width="10" pattern="1">
|
||||
<field border="2" x="40" type="Linea" pattern="1" />
|
||||
<field x="51" type="Data" width="10" pattern="1">
|
||||
<source>33.DATADOC</source>
|
||||
</field>
|
||||
<field x="41" type="Stringa" width="4" pattern="1">
|
||||
<source>33.CODNUM</source>
|
||||
<field x="79" type="Stringa" width="20" pattern="1">
|
||||
<source>CODART</source>
|
||||
</field>
|
||||
<field x="46" type="Numero" align="right" width="6" pattern="1">
|
||||
<source>33.NDOC</source>
|
||||
<field border="2" x="99.5" type="Linea" pattern="1" />
|
||||
<field x="100" type="Stringa" width="2" pattern="1">
|
||||
<source>UMQTA</source>
|
||||
</field>
|
||||
<field x="53" type="Numero" align="right" width="4" pattern="1">
|
||||
<source>34.NRIGA</source>
|
||||
<field x="103" type="Numero" align="right" width="10" pattern="1" hide_zero="1">
|
||||
<source>QTA</source>
|
||||
</field>
|
||||
<field x="58" type="Stringa" width="20" pattern="1">
|
||||
<source>34.CODART</source>
|
||||
<field border="2" x="113.5" type="Linea" pattern="1" />
|
||||
<field x="114" type="Stringa" width="50" pattern="1">
|
||||
<source>DESCR</source>
|
||||
</field>
|
||||
<field x="80" type="Stringa" dynamic_height="1" width="30" height="2" pattern="1">
|
||||
<source>34.DESCR</source>
|
||||
</field>
|
||||
<field x="110" type="Stringa" width="2" pattern="1">
|
||||
<source>34.UMQTA</source>
|
||||
</field>
|
||||
<field x="113" type="Numero" width="10" pattern="1">
|
||||
<source>34.QTA</source>
|
||||
</field>
|
||||
<field x="33" type="Stringa" hidden="1" link="33.PROVV" width="1" id="101" pattern="1">
|
||||
<source>PROVV</source>
|
||||
</field>
|
||||
<field x="35" type="Numero" hidden="1" align="right" link="33.ANNO" width="4" id="102" pattern="1">
|
||||
<source>ANNO</source>
|
||||
</field>
|
||||
<field x="62" type="Stringa" link="33.CODNUM" width="4" id="103" pattern="1">
|
||||
<source>CODNUM</source>
|
||||
</field>
|
||||
<field x="67" type="Numero" align="right" link="33.NDOC" width="6" id="104" pattern="1">
|
||||
<source>NDOC</source>
|
||||
</field>
|
||||
<field x="74" type="Numero" align="right" width="4" id="105" pattern="1">
|
||||
<source>NRIGA</source>
|
||||
</field>
|
||||
<field type="Stringa" width="39.5" id="106" pattern="1">
|
||||
<font face="Courier New" bold="1" size="8" />
|
||||
<source>MESSAGE</source>
|
||||
</field>
|
||||
<field x="41" type="Array" width="10" id="107" pattern="1">
|
||||
<source>TYPE</source>
|
||||
<list>
|
||||
<li Value="Bolla" Code="B">MESSAGE SHOW,883</li>
|
||||
<li Value="Fattura" Code="F">MESSAGE HIDE,883</li>
|
||||
</list>
|
||||
</field>
|
||||
<field border="2" type="Linea" width="165" height="0" id="883" pattern="1" />
|
||||
</section>
|
||||
<section type="Foot" pattern="1" />
|
||||
<section type="Foot" level="1" pattern="1" />
|
||||
|
60
ve/ve1600a.uml
Normal file
60
ve/ve1600a.uml
Normal file
@ -0,0 +1,60 @@
|
||||
#include "ve1600a.h"
|
||||
|
||||
PAGE "Controllo bolle non fatturate" -1 -1 61 4
|
||||
|
||||
NUMBER F_ANNO 4
|
||||
BEGIN
|
||||
PROMPT 1 1 "Anno "
|
||||
FLAGS "A"
|
||||
CHECKTYPE REQUIRED
|
||||
FIELD #ANNO
|
||||
HELP "Anno delle bolle elaborare"
|
||||
END
|
||||
|
||||
DATE F_DATAINIZIO
|
||||
BEGIN
|
||||
PROMPT 17 1 "Dal "
|
||||
END
|
||||
|
||||
DATE F_DATAFINE
|
||||
BEGIN
|
||||
PROMPT 44 1 "Al "
|
||||
VALIDATE DATE_CMP_FUNC >= #F_DATAINIZIO
|
||||
WARNING "Inserire una data successiva a quella iniziale"
|
||||
END
|
||||
|
||||
STRING F_NUMERAZIONE 4
|
||||
BEGIN
|
||||
PROMPT 1 2 "Numerazione "
|
||||
FLAGS "U"
|
||||
USE %NUM
|
||||
INPUT CODTAB F_NUMERAZIONE
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
DISPLAY "Documenti@20" S2
|
||||
OUTPUT F_NUMERAZIONE CODTAB
|
||||
OUTPUT F_DESCNUM S0
|
||||
CHECKTYPE NORMAL
|
||||
HELP "Codice numerazione da analizzare. Se vuoto verranno elaborate tutte le numerazioni delle bolle fatturabili"
|
||||
FIELD #CODNUM
|
||||
END
|
||||
|
||||
STRING F_DESCNUM 50 36
|
||||
BEGIN
|
||||
PROMPT 21 2 ""
|
||||
USE %NUM KEY 2
|
||||
INPUT S0 F_NUMERAZIONE
|
||||
DISPLAY "Descrizione@50" S0
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Documenti@20" S2
|
||||
COPY OUTPUT F_NUMERAZIONE
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
TOOLBAR "topbar" 0 0 0 2
|
||||
#include <printbar.h>
|
||||
ENDPAGE
|
||||
|
||||
ENDMASK
|
Loading…
x
Reference in New Issue
Block a user