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:
guy 2012-06-11 12:35:53 +00:00
parent fd2949c567
commit 7e8e6a0609
3 changed files with 193 additions and 94 deletions

View File

@ -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');
}
}
}

View File

@ -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
View 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