Patch level : aga 1.7 565
Files correlati : Ricompilazione Demo : [ ] Commento : Riportata la versione AGA 1.7 patch 564 git-svn-id: svn://10.65.10.50/trunk@11414 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
2b40264bb7
commit
847a4bb9c5
@ -1,5 +1,5 @@
|
||||
1001
|
||||
101
|
||||
12
|
||||
DATAGEN|5|8|0|DATA GENERAZIONE FILE
|
||||
ORAGEN|1|8|0|ORA GENERAZIONE FILE HH:MM:SS
|
||||
GIORNI|2|3|0|GIORNI PER CALCOLO RISCHIO
|
||||
@ -12,3 +12,5 @@ TIPOPAG|1|2|0|RB O RD (RB/TRATTA O RIMESSA DIRETTA)
|
||||
DATASCAD|5|8|0|DATA SCADENZA
|
||||
IMPORTO|4|18|2|IMPORTO
|
||||
ESPOSTO|4|18|2|ESPOSTO
|
||||
1
|
||||
DATAGEN+ORAGEN+CLIENTE+PARTITA|X
|
||||
|
113
sc/scp0100.cpp
113
sc/scp0100.cpp
@ -23,6 +23,8 @@ protected:
|
||||
virtual bool create();
|
||||
virtual bool destroy();
|
||||
virtual void main_loop();
|
||||
int calcola_esposto(const TRiga_scadenze& scad, const TDate& dataanalisi, const TDate& dataesposto,
|
||||
TDate& datascad, TImporto& esposto) const;
|
||||
|
||||
public:
|
||||
TMask& mask() { return *_msk; }
|
||||
@ -43,12 +45,44 @@ bool TPartite2Euroasis::destroy()
|
||||
return TSkeleton_application::destroy();
|
||||
}
|
||||
|
||||
int TPartite2Euroasis::calcola_esposto(const TRiga_scadenze& scad, const TDate& dataanalisi, const TDate& dataesposto,
|
||||
TDate& datascad, TImporto& esposto) const
|
||||
{
|
||||
const bool rischio = dataanalisi != dataesposto;
|
||||
int tipo = scad.get_int(SCAD_TIPOPAG);
|
||||
datascad = scad.get_date(SCAD_DATASCAD);
|
||||
for (int i=scad.last(); i>0; i= scad.pred(i))
|
||||
{
|
||||
const TRiga_partite& pag = scad.partita().riga(i);
|
||||
const int tp = pag.get_int(PART_TIPOPAG);
|
||||
if (tp >= 2 && tp <= 7)
|
||||
{
|
||||
tipo = tp;
|
||||
const TDate datapag = pag.get_date(PART_DATAPAG);
|
||||
bool is_esposto = FALSE;
|
||||
if (rischio && datapag > dataesposto && datapag <= dataanalisi)
|
||||
is_esposto = TRUE;
|
||||
else
|
||||
if (datapag > dataanalisi)
|
||||
is_esposto = TRUE;
|
||||
if (is_esposto)
|
||||
{
|
||||
const char sez = pag.sezione();
|
||||
const TImporto imp(sez, scad.row(i).get_real(PAGSCA_IMPORTO));
|
||||
esposto+=imp;
|
||||
}
|
||||
if (datapag > datascad)
|
||||
datascad = datapag;
|
||||
}
|
||||
}
|
||||
return tipo;
|
||||
}
|
||||
|
||||
void TPartite2Euroasis::main_loop()
|
||||
{
|
||||
TRelation rel(LF_SCADENZE);
|
||||
rel.add(LF_PARTITE,"TIPOC==TIPOC|GRUPPO==GRUPPO|CONTO==CONTO|SOTTOCONTO==SOTTOCONTO|ANNO=ANNO|NUMPART==NUMPART",1,0);
|
||||
rel.add(LF_PAGSCA, "TIPOC==TIPOC|GRUPPO==GRUPPO|CONTO==CONTO|SOTTOCONTO==SOTTOCONTO|ANNO==ANNO|NUMPART==NUMPART|NRIGA==NRIGA|NRATA==NRATA");
|
||||
//TCursor cur(&rel, "29->PAGATA != \"X\" && 29->TIPOC == \"C\"", 2); // verificare la chiave
|
||||
TCursor cur(&rel, "29->TIPOC == \"C\"", 2); // verificare la chiave
|
||||
TMask& m = mask();
|
||||
TConfig config("scp0100.ini");
|
||||
@ -73,64 +107,33 @@ void TPartite2Euroasis::main_loop()
|
||||
const TDate dataanalisi = m.get_date(F_DATA);
|
||||
const int giorni = m.get_int(F_GIORNI);
|
||||
const TDate dataesposto = dataanalisi - (long) giorni;
|
||||
//TRectype from(LF_SCADENZE), to(LF_SCADENZE);
|
||||
//from.put(SCAD_DATASCAD, _datascadi);
|
||||
//to.put(SCAD_DATASCAD, _datascadf);
|
||||
//_cur->setregion(from, to);
|
||||
TRectype& recscad = cur.curr();
|
||||
const TRectype& recpartita = cur.curr(LF_PARTITE);
|
||||
const long items = cur.items();
|
||||
TProgind p(items, "Elaborazione scadenze in corso ...", TRUE, TRUE, 10);
|
||||
p.setstatus(1);
|
||||
int err = NOERR;
|
||||
|
||||
for (cur=0; cur.pos()<items && !p.iscancelled() && err==NOERR; ++(cur))
|
||||
{
|
||||
p.addstatus(1);
|
||||
TPartita partita(recpartita);
|
||||
p.addstatus(1);
|
||||
const int nriga = recscad.get_int(SCAD_NRIGA);
|
||||
const int nrata = recscad.get_int(SCAD_NRATA);
|
||||
TRiga_scadenze scad = partita.rata(nriga, nrata);
|
||||
TRiga_partite rigapartite = scad.riga();
|
||||
const int nrigp = rigapartite.get_int(PART_NRIGA);
|
||||
const char sez = rigapartite.sezione();
|
||||
const int last = partita.last();
|
||||
const TDate datapag = rigapartite.get_date(PART_DATAPAG);
|
||||
const bool rischio = dataanalisi != dataesposto;
|
||||
//const bool valuta = FALSE;
|
||||
//const TRectype & pag = scad.row(nrigp);
|
||||
//const TImporto imp(sez, pag.get_real(valuta ? PAGSCA_IMPORTOVAL : PAGSCA_IMPORTO));
|
||||
TDate data(scad.get(SCAD_DATASCAD));
|
||||
const int lasts = scad.last();
|
||||
bool esposto = FALSE;
|
||||
bool sbf = FALSE;
|
||||
bool found_pag = TRUE;
|
||||
for (int p = scad.first(); p <= lasts; p = scad.succ(p))
|
||||
{
|
||||
if (p != nrigp)
|
||||
{
|
||||
const TRiga_partite & prow = partita.riga(p);
|
||||
const int tp = prow.get_int(PART_TIPOPAG);
|
||||
if (tp >= 2 && tp <= 7)
|
||||
{
|
||||
const TDate dataprow = prow.get(PART_DATAPAG);
|
||||
if (dataprow < datapag)
|
||||
{
|
||||
data = datapag;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (rischio && data > dataesposto && data <= dataanalisi)
|
||||
{
|
||||
esposto = TRUE;
|
||||
sbf = TRUE;
|
||||
}
|
||||
else
|
||||
if (data > dataanalisi)
|
||||
esposto = TRUE;
|
||||
TImporto pagato = scad.importo_pagato(FALSE);
|
||||
if (!scad.chiusa() || esposto && !pagato.is_zero())
|
||||
const int nrata = recscad.get_int(SCAD_NRATA);
|
||||
|
||||
const long codcli = recscad.get_long(SCAD_SOTTOCONTO);
|
||||
if (codcli == 11062)
|
||||
{
|
||||
int i = 0;
|
||||
i++;
|
||||
}
|
||||
|
||||
TPartita partita(recpartita);
|
||||
const TRiga_scadenze& scad = partita.rata(nriga, nrata);
|
||||
const TRiga_partite& rigapartite = scad.riga();
|
||||
TDate datascad = scad.get(SCAD_DATASCAD);
|
||||
TImporto esposto;
|
||||
const int tipop = calcola_esposto(scad, dataanalisi, dataesposto, datascad, esposto);
|
||||
if (!scad.chiusa() || !esposto.is_zero())
|
||||
{
|
||||
TImporto importo = scad.residuo(FALSE);
|
||||
importo.normalize('D');
|
||||
@ -151,19 +154,17 @@ void TPartite2Euroasis::main_loop()
|
||||
strpartita << "/";
|
||||
strpartita << recpartita.get(PART_NUMPART);
|
||||
filescad.put("PARTITA", strpartita);
|
||||
const int tipopag = recscad.get_int(SCAD_TIPOPAG);
|
||||
if (tipopag >= 2 && tipopag <= 7)
|
||||
if (tipop >= 2 && tipop <= 7)
|
||||
filescad.put("TIPOPAG", "RB");
|
||||
else
|
||||
filescad.put("TIPOPAG", "RD");
|
||||
filescad.put("DATASCAD", recscad.get(SCAD_DATASCAD));
|
||||
filescad.put("DATASCAD", datascad);
|
||||
filescad.put("IMPORTO", importo.valore());
|
||||
filescad.put("ESPOSTO", pagato.valore());
|
||||
filescad.put("ESPOSTO", esposto.valore());
|
||||
err = filescad.write();
|
||||
//if (err != NOERR)
|
||||
// error_box("Errore %d in scrittura file dbf", err);
|
||||
}
|
||||
}
|
||||
|
||||
if (err == NOERR)
|
||||
{
|
||||
if (exe.not_empty())
|
||||
|
287
ve/filconad.ini
Executable file
287
ve/filconad.ini
Executable file
@ -0,0 +1,287 @@
|
||||
[MAIN]
|
||||
DECSEP = ,
|
||||
FIELDSEP =
|
||||
RECORDSEP =
|
||||
RECORDSIZE = 128
|
||||
SKIPLINES = 0
|
||||
TYPEFIELD = -1
|
||||
TYPELEN = -1
|
||||
TYPEPOS = -1
|
||||
|
||||
[TYPE FISSO]
|
||||
ALIGN =
|
||||
DATA =
|
||||
DECIMAL = 0
|
||||
FILLER = ' '
|
||||
LENGTH = 0
|
||||
PICTURE =
|
||||
|
||||
[TYPE DATA]
|
||||
ALIGN =
|
||||
DATA = D
|
||||
DECIMAL = 0
|
||||
FILLER =
|
||||
LENGTH = 6
|
||||
PICTURE =
|
||||
|
||||
[TYPE NUMERO]
|
||||
ALIGN = R
|
||||
DATA = N
|
||||
DECIMAL = 0
|
||||
FILLER = '0'
|
||||
LENGTH = 0
|
||||
PICTURE =
|
||||
|
||||
[TYPE STRINGA]
|
||||
ALIGN = L
|
||||
DATA = S
|
||||
DECIMAL = 0
|
||||
FILLER = ' '
|
||||
LENGTH = 0
|
||||
PICTURE =
|
||||
|
||||
[TYPE IMPORTO]
|
||||
ALIGN = R
|
||||
DATA = S
|
||||
DECIMAL = 0
|
||||
FILLER = '0'
|
||||
LENGTH = 0
|
||||
PICTURE =
|
||||
|
||||
[HEADER 01]
|
||||
NAME(0)=TIPO RECORD
|
||||
TYPE(0)=FISSO
|
||||
LENGTH(0)=2
|
||||
POSITION(0)=0
|
||||
MESSAGE(0)=_FISSO,!01
|
||||
FIELD(0)=
|
||||
|
||||
NAME(1) = NUMERO PROGRESSIVO
|
||||
TYPE(1) = NUMERO
|
||||
LENGTH(1) = 5
|
||||
POSITION(1) = 2
|
||||
MESSAGE(1) = _PROGRESSIVO
|
||||
|
||||
NAME(2) = NUMERO FATTURA
|
||||
TYPE(2) = NUMERO
|
||||
LENGTH(2) = 6
|
||||
POSITION(2) = 7
|
||||
MESSAGE(2) = _FATTURA,NUMERO
|
||||
|
||||
NAME(3) = DATA FATTURA
|
||||
TYPE(3) =
|
||||
LENGTH(3) = 6
|
||||
POSITION(3) = 13
|
||||
MESSAGE(3) = _FATTURA,DATA
|
||||
|
||||
NAME(4) = NUMERO BOLLA
|
||||
TYPE(4) = NUMERO
|
||||
LENGTH(4) = 6
|
||||
POSITION(4) = 19
|
||||
FIELD(4) = 33->NDOC
|
||||
|
||||
NAME(5) = DATA BOLLA
|
||||
TYPE(5) =
|
||||
LENGTH(5) = 6
|
||||
POSITION(5) = 25
|
||||
MESSAGE(5) = _BOLLA,DATA
|
||||
|
||||
NAME(6) = CODICE FORNITORE
|
||||
ALIGN(6) = R
|
||||
DATA(6) = S
|
||||
LENGTH(6) = 15
|
||||
POSITION(6) = 31
|
||||
MESSAGE(6) = _FORNITORE
|
||||
|
||||
NAME(7) = TIPO FORNITORE
|
||||
TYPE(7) =
|
||||
LENGTH(7) = 1
|
||||
POSITION(7) = 46
|
||||
|
||||
NAME(8) = CODICE CLIENTE
|
||||
TYPE(8) =
|
||||
LENGTH(8) = 15
|
||||
POSITION(8) = 47
|
||||
// MESSAGE(8) = _CONAD
|
||||
|
||||
NAME(9) = CODICE COOPERATIVA
|
||||
TYPE(9) =
|
||||
LENGTH(9) = 15
|
||||
POSITION(9) = 62
|
||||
|
||||
NAME(10) = CODICE SOCIO
|
||||
ALIGN(10) = R
|
||||
DATA(10) = S
|
||||
LENGTH(10) = 15
|
||||
POSITION(10) = 77
|
||||
FIELD(10) = 16->PTEL
|
||||
|
||||
NAME(11) = TIPO SOCIO
|
||||
TYPE(11) =
|
||||
LENGTH(11) = 1
|
||||
POSITION(11) = 92
|
||||
|
||||
NAME(12) = TIPO DOCUMENTO
|
||||
TYPE(12) = STRINGA
|
||||
LENGTH(12) = 1
|
||||
POSITION(12) = 93
|
||||
MESSAGE(12) = _FISSO,!F
|
||||
|
||||
NAME(13) = CODICE DIVISA
|
||||
TYPE(13) =
|
||||
LENGTH(13) = 3
|
||||
POSITION(13) = 94
|
||||
MESSAGE(13) = _FISSO,!EUR
|
||||
|
||||
NAME(14) = FILLER
|
||||
TYPE(14) =
|
||||
LENGTH(14) = 25
|
||||
POSITION(14) = 97
|
||||
|
||||
NAME(15) = RISERVATO
|
||||
TYPE(15) =
|
||||
LENGTH(15) = 6
|
||||
POSITION(15) = 122
|
||||
|
||||
[RECORD 02]
|
||||
|
||||
NAME(0) = TIPO RECORD
|
||||
TYPE(0) =
|
||||
LENGTH(0) = 2
|
||||
POSITION(0) = 0
|
||||
MESSAGE(0) = _FISSO,!02
|
||||
|
||||
NAME(1) = NUMERO PROGRESSIVO
|
||||
TYPE(1) =
|
||||
LENGTH(1) = 5
|
||||
POSITION(1) = 2
|
||||
MESSAGE(1) = _PROGRESSIVO
|
||||
FILLER(1) = '0'
|
||||
|
||||
NAME(2) = CODICE ARTICOLO
|
||||
TYPE(2) =
|
||||
LENGTH(2) = 15
|
||||
POSITION(2) = 7
|
||||
FIELD(2) = 34->CODART
|
||||
|
||||
NAME(3) = DESCRIZIONE ARTICOLO
|
||||
TYPE(3) =
|
||||
LENGTH(3) = 30
|
||||
POSITION(3) = 22
|
||||
FIELD(3) = 34->DESCR
|
||||
|
||||
NAME(4) = UNITA DI MISURA
|
||||
TYPE(4) =
|
||||
LENGTH(4) = 2
|
||||
POSITION(4) = 52
|
||||
FIELD(4) = 34->UMQTA
|
||||
|
||||
NAME(5) = QUANTITA FATTURATA
|
||||
LENGTH(5) = 7
|
||||
TYPE(5) = IMPORTO
|
||||
POSITION(5) = 54
|
||||
MESSAGE(5) = _RIGABOLLA,QUANTITA
|
||||
|
||||
NAME(6) = PREZZO UNITARIO
|
||||
TYPE(6) = IMPORTO
|
||||
LENGTH(6) = 9
|
||||
DECIMAL(6) = 3
|
||||
POSITION(6) = 61
|
||||
MESSAGE(6) = _RIGABOLLA,PREZZO
|
||||
|
||||
NAME(7) = IMPORTO TOTALE
|
||||
TYPE(7) = IMPORTO
|
||||
LENGTH(7) = 9
|
||||
DECIMAL(7) = 3
|
||||
POSITION(7) = 70
|
||||
MESSAGE(7) = _RIGABOLLA,IMPORTO
|
||||
|
||||
NAME(8) = NUMERO PEZZI
|
||||
TYPE(8) =
|
||||
LENGTH(8) = 4
|
||||
POSITION(8) = 79
|
||||
|
||||
NAME(9) = TIPO IVA
|
||||
TYPE(9) = STRINGA
|
||||
LENGTH(9) = 1
|
||||
POSITION(9) = 83
|
||||
|
||||
NAME(10) = ALIQUOTA IVA
|
||||
TYPE(10) = STRINGA
|
||||
LENGTH(10) = 2
|
||||
POSITION(10) = 84
|
||||
MESSAGE(10) = _RIGABOLLA,ALIQUOTA
|
||||
|
||||
NAME(11) = TIPO MOVIMENTO
|
||||
TYPE(11) =
|
||||
LENGTH(11) = 1
|
||||
POSITION(11) = 86
|
||||
|
||||
NAME(12) = TIPO CESSIONE
|
||||
TYPE(12) = STRINGA
|
||||
LENGTH(12) = 1
|
||||
POSITION(12) = 87
|
||||
MESSAGE(12) = _RIGABOLLA,OMAGGIO
|
||||
|
||||
NAME(13) = NUMERO ORDINE CONAD
|
||||
TYPE(13) =
|
||||
LENGTH(13) = 6
|
||||
POSITION(13) = 88
|
||||
|
||||
NAME(14) = CODICE LISTINO
|
||||
TYPE(14) =
|
||||
LENGTH(14) = 2
|
||||
POSITION(14) = 94
|
||||
|
||||
NAME(15) = TIPO ARTICOLO
|
||||
TYPE(15) =
|
||||
LENGTH(15) = 1
|
||||
POSITION(15) = 96
|
||||
|
||||
NAME(16) = TIPO CONTRATTO
|
||||
TYPE(16) =
|
||||
LENGTH(16) = 1
|
||||
POSITION(16) = 97
|
||||
|
||||
NAME(17) = TIPO TRATTAMENTO
|
||||
TYPE(17) =
|
||||
LENGTH(17) = 1
|
||||
POSITION(17) = 98
|
||||
|
||||
NAME(18) = COSTO TRASPORTO
|
||||
TYPE(18) =
|
||||
LENGTH(18) = 5
|
||||
DECIMAL(18) = 3
|
||||
POSITION(18) = 99
|
||||
|
||||
NAME(19) = CODICE CONTABILE
|
||||
TYPE(19) =
|
||||
LENGTH(19) = 1
|
||||
POSITION(19) = 104
|
||||
|
||||
NAME(20) = TIPO RESO
|
||||
TYPE(20) =
|
||||
LENGTH(20) = 1
|
||||
POSITION(20) = 105
|
||||
|
||||
NAME(21) = PREZZO CATALOGO
|
||||
TYPE(21) =
|
||||
LENGTH(21) = 7
|
||||
DECIMAL(21) = 3
|
||||
POSITION(21) = 106
|
||||
|
||||
NAME(22) = FILLER
|
||||
TYPE(22) =
|
||||
LENGTH(22) = 3
|
||||
POSITION(22) = 113
|
||||
|
||||
NAME(23) = DATA ORDINE
|
||||
TYPE(23) =
|
||||
LENGTH(23) = 6
|
||||
POSITION(23) = 116
|
||||
|
||||
NAME(24) = RISERVATO
|
||||
TYPE(24) =
|
||||
LENGTH(24) = 6
|
||||
POSITION(24) = 122
|
||||
|
@ -55,9 +55,16 @@ void TIndustriosa_app::get_field(const TDocumento& doc, const TRectype& mov, con
|
||||
{
|
||||
val.cut(0);
|
||||
if (stricmp(field, "_CANTIERE") == 0)
|
||||
|
||||
{
|
||||
val = rec.get(RDOC_CODCMS).left(4);
|
||||
val << rec.get(RDOC_FASCMS);
|
||||
if (val.empty())
|
||||
{
|
||||
val = doc.get(DOC_CODCMS).left(4);
|
||||
val << doc.get(DOC_FASCMS);
|
||||
}
|
||||
else
|
||||
val << rec.get(RDOC_FASCMS);
|
||||
} else
|
||||
if (stricmp(field, "_CONINDU") == 0)
|
||||
{
|
||||
|
@ -27,7 +27,7 @@ DareAvere = _SEZIONE
|
||||
Importo = _IMPORTO
|
||||
ImpVal = _IMPORTOVAL
|
||||
Descri = DESCR
|
||||
Codiva = _CODIVA
|
||||
Codiva = 34->CODIVA
|
||||
TipoDet = "0"
|
||||
FlagProvv = "0"
|
||||
Impodet = "0"
|
||||
|
563
ve/ve7200.cpp
Executable file
563
ve/ve7200.cpp
Executable file
@ -0,0 +1,563 @@
|
||||
#include <applicat.h>
|
||||
#include <assoc.h>
|
||||
#include <automask.h>
|
||||
#include <currency.h>
|
||||
#include <msksheet.h>
|
||||
#include <printer.h>
|
||||
#include <recarray.h>
|
||||
#include <relation.h>
|
||||
#include <sort.h>
|
||||
|
||||
#include "velib.h"
|
||||
|
||||
#include "ve7.h"
|
||||
#include "ve7200.h"
|
||||
#include "ve7200a.h"
|
||||
#include "../cg/cgsaldac.h"
|
||||
|
||||
#include <scadenze.h>
|
||||
#include <partite.h>
|
||||
|
||||
class TDocumentoOrdine : public TDocumento
|
||||
{
|
||||
TString_array _scadenze_array;// Array che contiene le scadenze ("<data>|<importo>")
|
||||
int _scadenze_current; // indice per identificare l'elementi corrente sull'array (-1 se non ha ancora calcolato)
|
||||
public:
|
||||
// Funzioni per il ricalcolo delle scadenze
|
||||
void scadord_reset(); // riposiziona sulla prima scadenza
|
||||
void scadord_recalc(); // resetta e ricalcola le scadenze
|
||||
void scadord_set_next(); // seleziona il prossimo elemento dell'array delle scadenze
|
||||
const char * scadord_get(const TString& w); // reperisce l'informazione richiesta dall'elemento corrente
|
||||
int scadord_items() { return _scadenze_array.items(); } // restituisce il numero di scadenze
|
||||
TString_array& scadord() { return _scadenze_array; }
|
||||
TDocumentoOrdine (const TRectype & rec, dec_parm & parm) ;
|
||||
TDocumentoOrdine (const TRectype & rec) ;
|
||||
TDocumentoOrdine () ;
|
||||
virtual ~TDocumentoOrdine();
|
||||
};
|
||||
|
||||
void TDocumentoOrdine::scadord_recalc()
|
||||
{
|
||||
TAssoc_array scadenze;
|
||||
scadenze.destroy();
|
||||
_scadenze_array.destroy();
|
||||
_scadenze_current = -1;
|
||||
TRectype& testadoc = head();
|
||||
TPagamento& pag = pagamento();
|
||||
const int rows = physical_rows();
|
||||
for (int i = 0; i < rows; i++)
|
||||
{
|
||||
const TRiga_documento& rigadoc = physical_row(i+1);
|
||||
bool evasa = rigadoc.get_bool(RDOC_RIGAEVASA);
|
||||
if (!evasa)
|
||||
evasa = (rigadoc.qtaresidua() <= 0);
|
||||
if (!evasa)
|
||||
{
|
||||
TDate datacons = rigadoc.get_date(RDOC_DATACONS);
|
||||
if (!datacons.ok())
|
||||
datacons = testadoc.get_date(DOC_DATACONS);
|
||||
TString16 codval = valuta();
|
||||
real totimponibili = rigadoc.valore(FALSE, AUTO_DECIMALS);
|
||||
real totimposte = rigadoc.iva().imposta(totimponibili, AUTO_DECIMALS, codval);
|
||||
real totspese = ZERO;
|
||||
const bool is_in_valuta = in_valuta();
|
||||
if (is_in_valuta)
|
||||
{
|
||||
const real change(cambio());
|
||||
TCurrency_documento val1(totimponibili, *this); val1.change_to_firm_val();
|
||||
TCurrency_documento val2(totimposte, *this); val2.change_to_firm_val();
|
||||
TCurrency_documento val3(totspese, *this); val3.change_to_firm_val();
|
||||
pag.set_total_valuta(totimponibili, totimposte, totspese, change, val1.get_num(), val2.get_num() ,val3.get_num(), codval);
|
||||
}
|
||||
else
|
||||
pag.set_total(totimponibili, totimposte, totspese);
|
||||
pag.set_inizio(datacons);
|
||||
pag.set_rate_auto();
|
||||
const int numrate = pag.n_rate( );
|
||||
real rata;
|
||||
for (int i = 0; i< numrate; i++)
|
||||
{
|
||||
rata = pag.importo_rata(i, is_in_valuta);
|
||||
const char* datastringa = (const char*) pag.data_rata(i).string();
|
||||
if (scadenze.is_key(datastringa))
|
||||
{
|
||||
real& valore = (real&)scadenze[datastringa];
|
||||
valore+=rata;
|
||||
}
|
||||
else
|
||||
{
|
||||
real* oggetto = new real(rata);
|
||||
scadenze.add(datastringa,(TObject*)oggetto);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
scadenze.restart();
|
||||
real* c;
|
||||
for (c = (real*) scadenze.first_item(); c != NULL; c = (real*) scadenze.succ_item())
|
||||
{
|
||||
const char* datastringa = scadenze.get_hashobj()->key();
|
||||
TToken_string t;
|
||||
t.add(datastringa);
|
||||
real importo(*c);
|
||||
t.add(importo.string());
|
||||
_scadenze_array.add(t);
|
||||
}
|
||||
if (_scadenze_array.items() > 0)
|
||||
_scadenze_current++;
|
||||
}
|
||||
|
||||
const char* TDocumentoOrdine::scadord_get(const TString& w)
|
||||
{
|
||||
const char* ret = "";
|
||||
|
||||
if (_scadenze_current == -1)
|
||||
// calcola le scadenze e le mette in _scadenze_array
|
||||
scadord_recalc();
|
||||
if (_scadenze_current > -1 && _scadenze_current < _scadenze_array.items())
|
||||
{
|
||||
if (w == "DATA")
|
||||
ret = _scadenze_array.row(_scadenze_current).get(0); // ritorna la data di scadenza
|
||||
if (w == "IMPORTO")
|
||||
ret = _scadenze_array.row(_scadenze_current).get(1); // ritorna l'importo in scadenza
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
void TDocumentoOrdine::scadord_set_next()
|
||||
{
|
||||
if (_scadenze_current >= 0 &&
|
||||
_scadenze_current < _scadenze_array.items() )
|
||||
_scadenze_current++;
|
||||
}
|
||||
|
||||
void TDocumentoOrdine::scadord_reset()
|
||||
{
|
||||
if (_scadenze_current > 0)
|
||||
_scadenze_current = 0;
|
||||
}
|
||||
|
||||
TDocumentoOrdine::TDocumentoOrdine(const TRectype& rec)
|
||||
: TDocumento(rec), _scadenze_current(-1)
|
||||
{
|
||||
}
|
||||
|
||||
TDocumentoOrdine::TDocumentoOrdine(const TRectype& rec, dec_parm & parm)
|
||||
: TDocumento(rec), _scadenze_current(-1)
|
||||
{
|
||||
}
|
||||
|
||||
TDocumentoOrdine::TDocumentoOrdine()
|
||||
: TDocumento(), _scadenze_current(-1)
|
||||
{ }
|
||||
|
||||
TDocumentoOrdine::~TDocumentoOrdine()
|
||||
{ }
|
||||
|
||||
class TFlussi_form : public TForm
|
||||
{
|
||||
|
||||
public:
|
||||
virtual bool validate(TForm_item &cf, TToken_string &s);
|
||||
void set_testata() {set_header(1,TRUE);}
|
||||
void set_pedata() {set_footer(1,FALSE); set_footer(1,TRUE);}
|
||||
TPrint_section& get_line() {return section('B', odd_page);}
|
||||
TFlussi_form();
|
||||
|
||||
virtual ~TFlussi_form();
|
||||
};
|
||||
|
||||
TFlussi_form::TFlussi_form() :TForm ("ve7200a")
|
||||
{
|
||||
}
|
||||
|
||||
TFlussi_form::~TFlussi_form()
|
||||
{
|
||||
}
|
||||
|
||||
bool TFlussi_form::validate(TForm_item &cf, TToken_string &s)
|
||||
{
|
||||
return TForm::validate(cf,s);
|
||||
}
|
||||
|
||||
class TFlussi_mask : public TAutomask
|
||||
{
|
||||
TRelation * _rel;
|
||||
TCursor * _cur;
|
||||
|
||||
protected:
|
||||
bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
||||
public:
|
||||
|
||||
TFlussi_mask();
|
||||
|
||||
virtual ~TFlussi_mask(){};
|
||||
};
|
||||
|
||||
TFlussi_mask::TFlussi_mask() :TAutomask ("ve7200a")
|
||||
{
|
||||
}
|
||||
|
||||
bool TFlussi_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
class TStampaFlussiCassa : public TSkeleton_application
|
||||
{
|
||||
#pragma pack(1)
|
||||
struct struct_scadenza
|
||||
{
|
||||
char data[9];
|
||||
real importo;
|
||||
char descrizione[80];
|
||||
char estremidoc[45];
|
||||
char statodoc;
|
||||
};
|
||||
#pragma pack()
|
||||
|
||||
TRelation* _rel;
|
||||
TCursor* _cur;
|
||||
TFlussi_mask* _msk;
|
||||
TFlussi_form* _form;
|
||||
TSort* _sort;
|
||||
TString_array _tipi_doc; // Array di stringhe contenente i tipi documenti da elaborare
|
||||
TDate _datascadi, _datascadf;
|
||||
real _totale; // totale a partire da saldo iniziale
|
||||
|
||||
protected:
|
||||
virtual bool create(void);
|
||||
virtual bool destroy(void);
|
||||
virtual void main_loop() ;
|
||||
|
||||
void elabora_scad();
|
||||
void elabora_doc();
|
||||
void stampa_flussi();
|
||||
|
||||
void print_header();
|
||||
void print_footer();
|
||||
void print_line(struct_scadenza* riga);
|
||||
|
||||
public:
|
||||
TStampaFlussiCassa() {} ;
|
||||
virtual ~TStampaFlussiCassa() {} ;
|
||||
};
|
||||
|
||||
bool TStampaFlussiCassa::create()
|
||||
{
|
||||
open_files(LF_DOC, LF_RIGHEDOC, LF_SCADENZE, LF_CLIFO, LF_CFVEN, 0);
|
||||
_rel = new TRelation(LF_SCADENZE);
|
||||
_rel->add(LF_PARTITE,"TIPOC==TIPOC|GRUPPO==GRUPPO|CONTO==CONTO|SOTTOCONTO==SOTTOCONTO|ANNO=ANNO|NUMPART==NUMPART",1,0);
|
||||
_rel->add(LF_PAGSCA, "TIPOC==TIPOC|GRUPPO==GRUPPO|CONTO==CONTO|SOTTOCONTO==SOTTOCONTO|ANNO==ANNO|NUMPART==NUMPART|NRIGA==NRIGA|NRATA==NRATA");
|
||||
|
||||
_cur = new TCursor(_rel, "PAGATA != \"X\"", 2);
|
||||
_msk = new TFlussi_mask();
|
||||
_form = new TFlussi_form();
|
||||
_sort = new TSort(sizeof(struct_scadenza));
|
||||
_sort->addsortkey(0,8);
|
||||
return TSkeleton_application::create();
|
||||
}
|
||||
|
||||
bool TStampaFlussiCassa::destroy()
|
||||
{
|
||||
delete _sort;
|
||||
delete _form;
|
||||
delete _msk;
|
||||
delete _cur;
|
||||
delete _rel;
|
||||
return TSkeleton_application::destroy();
|
||||
}
|
||||
|
||||
void TStampaFlussiCassa::main_loop()
|
||||
{
|
||||
while (_msk->run()!=K_QUIT)
|
||||
{
|
||||
_datascadi = _msk->get_date(F_DATASCADI);
|
||||
_datascadf = _msk->get_date(F_DATASCADF);
|
||||
_totale = _msk->get_real(F_SALDOINI);
|
||||
_sort->init(); // inizializza il sort
|
||||
elabora_scad(); // cominciamo dalle scadenze
|
||||
elabora_doc(); // continuiamo con i documenti
|
||||
_sort->endsort(); // fine sort
|
||||
stampa_flussi(); // stampiamo il tutto
|
||||
}
|
||||
}
|
||||
|
||||
void TStampaFlussiCassa::stampa_flussi()
|
||||
{
|
||||
const int reclen = sizeof(struct_scadenza);
|
||||
TString256 result;
|
||||
printer().open();
|
||||
print_header();
|
||||
print_footer();
|
||||
|
||||
TPrint_section& section = _form->get_line();
|
||||
section.reset();
|
||||
|
||||
if (_totale > 0)
|
||||
{
|
||||
_form->find_field('B', odd_page, FF_B_IMPORTOD).set(_totale.string());
|
||||
_form->find_field('B', odd_page, FF_B_IMPORTOA).set("");
|
||||
}
|
||||
else
|
||||
{
|
||||
_form->find_field('B', odd_page, FF_B_IMPORTOA).set(_totale.string());
|
||||
_form->find_field('B', odd_page, FF_B_IMPORTOD).set("");
|
||||
}
|
||||
_form->find_field('B', odd_page, FF_B_DESCRIZIONE).set("Saldo iniziale");
|
||||
_form->find_field('B', odd_page, FF_B_DESCRIZIONE).set("Saldo iniziale");
|
||||
|
||||
section.update();
|
||||
|
||||
for (word i = 0; i < section.height(); i++)
|
||||
{
|
||||
TPrintrow row = section.row(i);
|
||||
printer().print(section.row(i));
|
||||
}
|
||||
struct_scadenza* riga;
|
||||
riga = (struct_scadenza*)_sort->retrieve();
|
||||
while (riga != NULL)
|
||||
{
|
||||
print_line(riga);
|
||||
riga = (struct_scadenza*) _sort->retrieve();
|
||||
}
|
||||
printer().close();
|
||||
}
|
||||
|
||||
void TStampaFlussiCassa::print_header()
|
||||
{
|
||||
_form->set_testata();
|
||||
}
|
||||
|
||||
void TStampaFlussiCassa::print_footer()
|
||||
{
|
||||
_form->set_pedata();
|
||||
}
|
||||
|
||||
void TStampaFlussiCassa::elabora_scad()
|
||||
{
|
||||
TRectype from(LF_SCADENZE), to(LF_SCADENZE);
|
||||
from.put(SCAD_DATASCAD, _datascadi);
|
||||
to.put(SCAD_DATASCAD, _datascadf);
|
||||
_cur->setregion(from, to);
|
||||
TRectype& recscad = _cur->curr();
|
||||
const TRectype& recpartita = _cur->curr(LF_PARTITE);
|
||||
|
||||
const long items = _cur->items();
|
||||
for (*_cur=0; _cur->pos()<items; ++(*_cur))
|
||||
{
|
||||
struct_scadenza riga_scadenza;
|
||||
TPartita partita(recpartita);
|
||||
const int nriga = recscad.get_int(SCAD_NRIGA);
|
||||
const int nrata = recscad.get_int(SCAD_NRATA);
|
||||
TRiga_scadenze rigascadenze = partita.rata(nriga, nrata);
|
||||
TDate datascad = recscad.get_date(SCAD_DATASCAD);
|
||||
long data = datascad.date2ansi();
|
||||
|
||||
TImporto importo = rigascadenze.residuo(FALSE);
|
||||
importo.normalize('D');
|
||||
TString16 codice;
|
||||
codice.cut(0);
|
||||
codice << recscad.get(SCAD_TIPOCF);
|
||||
codice << '|' << recscad.get(SCAD_SOTTOCONTO);
|
||||
TString80 descr = cache().get(LF_CLIFO, codice, CLI_RAGSOC);
|
||||
sprintf(riga_scadenza.data, "%8ld", data);
|
||||
riga_scadenza.importo = importo.valore();
|
||||
strcpy(riga_scadenza.descrizione, descr);
|
||||
TString80 estremi = "Doc. ";
|
||||
estremi << recpartita.get(PART_NUMDOC);
|
||||
estremi << " del " << recpartita.get(PART_DATADOC);
|
||||
estremi << " - Prot. " << recpartita.get(PART_PROTIVA);
|
||||
strcpy(riga_scadenza.estremidoc, estremi);
|
||||
riga_scadenza.statodoc = ' ';
|
||||
const char* record = (const char*) &riga_scadenza;
|
||||
_sort->sort(record);
|
||||
}
|
||||
}
|
||||
|
||||
void TStampaFlussiCassa::elabora_doc()
|
||||
{
|
||||
TSheet_field& sheet = _msk->sfield(F_SHEETDOC);
|
||||
|
||||
TRelation doc_rel(LF_DOC);
|
||||
TRectype da(LF_DOC);
|
||||
TRectype a(LF_DOC);
|
||||
const long items = sheet.items();
|
||||
if (items > 0)
|
||||
{
|
||||
int year_from = _msk->get_int(F_ESERCIZIO);
|
||||
int year_to = _datascadf.year();
|
||||
bool ok = TRUE;
|
||||
TString16 codnum, tipodoc;
|
||||
bool aresiduo;
|
||||
char dastato, astato;
|
||||
TString filt_expr;
|
||||
TDate dataini(1, 1, year_from);
|
||||
da.put("DATADOC", dataini);
|
||||
da.put("PROVV", "D");
|
||||
da.put("ANNO", year_from);
|
||||
a.put("DATADOC", _datascadf);
|
||||
a.put("PROVV", "D");
|
||||
a.put("ANNO", year_to);
|
||||
filt_expr << "(";
|
||||
FOR_EACH_SHEET_ROW(sheet, r, row)
|
||||
{
|
||||
codnum = row->get(0);
|
||||
tipodoc = row->get(2);
|
||||
dastato = row->get_char(4);
|
||||
astato = row->get_char(5);
|
||||
aresiduo = row->get_char(6);
|
||||
if (codnum.not_empty() && tipodoc.not_empty())
|
||||
{
|
||||
filt_expr << "((CODNUM=\"";
|
||||
filt_expr << codnum << "\")&&";
|
||||
filt_expr << "(TIPODOC=\"";
|
||||
filt_expr << tipodoc << "\")";
|
||||
if (dastato != ' ')
|
||||
filt_expr << " &&(STATO>=\"" << dastato << "\")";
|
||||
if (astato != ' ')
|
||||
filt_expr << "&&(STATO<=\"" << astato << "\")";
|
||||
filt_expr << ")||";
|
||||
}
|
||||
}
|
||||
filt_expr.rtrim(2);
|
||||
filt_expr << ")";
|
||||
|
||||
TCursor doc_cur(&doc_rel,filt_expr,3,&da,&a);
|
||||
const long cur_items = doc_cur.items(); // Scorre tutti i documenti che rientrano nell'intervallo selezionato
|
||||
if (cur_items != 0)
|
||||
{
|
||||
doc_cur.freeze();
|
||||
const TRectype& cur_rec = doc_cur.curr();
|
||||
for (doc_cur = 0; doc_cur.pos() < cur_items; ++doc_cur)
|
||||
{
|
||||
TDocumento documento(cur_rec);
|
||||
if (documento.is_ordine())
|
||||
{
|
||||
TDocumentoOrdine* doc = new TDocumentoOrdine;
|
||||
if (doc->read(doc_cur.curr()) == NOERR) // legge il documento
|
||||
{
|
||||
doc->scadord_recalc();
|
||||
for (int i=0;i < doc->scadord_items(); i++)
|
||||
{
|
||||
struct_scadenza riga_scadenza;
|
||||
TDate datascad = doc->scadord_get("DATA");
|
||||
if (datascad >= _datascadi && datascad <= _datascadf)
|
||||
{
|
||||
long data = datascad.date2ansi();
|
||||
real importoscad = doc->scadord_get("IMPORTO");
|
||||
const char sez = doc->tipocf();
|
||||
TImporto importo((sez=='C' ? 'D' : 'A'), importoscad);
|
||||
importo.normalize('D');
|
||||
TString16 codice;
|
||||
codice.cut(0);
|
||||
codice << doc->tipocf();
|
||||
codice << '|' << doc->codcf();
|
||||
TString80 descr = cache().get(LF_CLIFO, codice, CLI_RAGSOC);
|
||||
TString80 estremi = doc->tipo().codice();
|
||||
estremi << " n. " << doc->numero();
|
||||
estremi << " del " << doc->data().string();
|
||||
const char stato = doc->stato();
|
||||
sprintf(riga_scadenza.data, "%8ld", data);
|
||||
riga_scadenza.importo = importo.valore();
|
||||
strcpy(riga_scadenza.descrizione, descr);
|
||||
strcpy(riga_scadenza.estremidoc, estremi);
|
||||
riga_scadenza.statodoc = stato;
|
||||
const char* record = (const char*) &riga_scadenza;
|
||||
_sort->sort(record);
|
||||
}
|
||||
doc->scadord_set_next();
|
||||
}
|
||||
}
|
||||
else
|
||||
delete doc;
|
||||
}
|
||||
else
|
||||
{
|
||||
TDocumentoEsteso* doc = new TDocumentoEsteso;
|
||||
if (doc->read(doc_cur.curr()) == NOERR) // legge il documento
|
||||
{
|
||||
doc->scadenze_recalc();
|
||||
for (int i=0;i < doc->scadenze_items(); i++)
|
||||
{
|
||||
struct_scadenza riga_scadenza;
|
||||
TDate datascad = doc->scadenze_get("DATA");
|
||||
if (datascad >= _datascadi && datascad <= _datascadf)
|
||||
{
|
||||
long data = datascad.date2ansi();
|
||||
real importoscad = doc->scadenze_get("IMPORTO");
|
||||
const char sez = doc->tipocf();
|
||||
TImporto importo((sez=='C' ? 'D' : 'A'), importoscad);
|
||||
importo.normalize('D');
|
||||
TString16 codice;
|
||||
codice.cut(0);
|
||||
codice << doc->tipocf();
|
||||
codice << '|' << doc->codcf();
|
||||
TString80 descr = cache().get(LF_CLIFO, codice, CLI_RAGSOC);
|
||||
TString80 estremi = doc->tipo().codice();
|
||||
estremi << " n. " << doc->numero();
|
||||
estremi << " del " << doc->data().string();
|
||||
const char stato = doc->stato();
|
||||
sprintf(riga_scadenza.data, "%8ld", data);
|
||||
riga_scadenza.importo = importo.valore();
|
||||
strcpy(riga_scadenza.descrizione, descr);
|
||||
strcpy(riga_scadenza.estremidoc, estremi);
|
||||
riga_scadenza.statodoc = stato;
|
||||
const char* record = (const char*) &riga_scadenza;
|
||||
_sort->sort(record);
|
||||
}
|
||||
doc->scadenze_set_next();
|
||||
}
|
||||
}
|
||||
else
|
||||
delete doc;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void TStampaFlussiCassa::print_line(struct_scadenza* riga)
|
||||
{
|
||||
const long scadenza = atol(riga->data);
|
||||
const TDate datascad(scadenza);
|
||||
const real importo = riga->importo;
|
||||
TString80 descr = riga->descrizione;
|
||||
descr.trim();
|
||||
_form->find_field('B', odd_page, FF_B_DESCRIZIONE).set(descr);
|
||||
if (importo.sign() >=0)
|
||||
{
|
||||
_form->find_field('B', odd_page, FF_B_IMPORTOD).set(importo.string());
|
||||
_form->find_field('B', odd_page, FF_B_IMPORTOA).set("");
|
||||
}
|
||||
else
|
||||
{
|
||||
_form->find_field('B', odd_page, FF_B_IMPORTOA).set(importo.string());
|
||||
_form->find_field('B', odd_page, FF_B_IMPORTOD).set("");
|
||||
}
|
||||
TString80 estremi = riga->estremidoc;
|
||||
_form->find_field('B', odd_page, FF_B_ESTREMIDOC).set(estremi);
|
||||
TString4 stato = "";
|
||||
stato[0] = riga->statodoc;
|
||||
_form->find_field('B', odd_page, FF_B_STATODOC).set(stato);
|
||||
_form->find_field('B', odd_page, FF_B_SCADENZA).set(datascad);
|
||||
_totale += importo;
|
||||
_form->find_field('B', odd_page, FF_B_PROGRESSIVO).set(_totale.string());
|
||||
|
||||
TPrint_section& section = _form->get_line();
|
||||
section.update();
|
||||
for (word i = 0; i < section.height(); i++)
|
||||
{
|
||||
TPrintrow row = section.row(i);
|
||||
printer().print(section.row(i));
|
||||
}
|
||||
}
|
||||
|
||||
int ve7200(int argc, char **argv)
|
||||
{
|
||||
TStampaFlussiCassa a;
|
||||
a.run(argc, argv, "Stampa flussi di cassa");
|
||||
return 0;
|
||||
}
|
||||
|
22
ve/ve7200.h
Executable file
22
ve/ve7200.h
Executable file
@ -0,0 +1,22 @@
|
||||
// campi form flussi di cassa
|
||||
#define FF_DESCRIZIONE 1
|
||||
#define FF_DOCUMENTO 2
|
||||
#define FF_IMPORTOD 3
|
||||
#define FF_IMPORTOA 4
|
||||
#define FF_ESTREMIDOC 5
|
||||
#define FF_STATODOC 6
|
||||
#define FF_SCADENZA 7
|
||||
#define FF_PROGRESSIVO 8
|
||||
|
||||
#define FF_B_DESCRIZIONE 11
|
||||
#define FF_B_DOCUMENTO 12
|
||||
#define FF_B_IMPORTOD 13
|
||||
#define FF_B_IMPORTOA 14
|
||||
#define FF_B_SCADENZA 15
|
||||
#define FF_B_ESTREMIDOC 16
|
||||
#define FF_B_STATODOC 17
|
||||
#define FF_B_PROGRESSIVO 18
|
||||
|
||||
#define FF_DITTA 21
|
||||
#define FF_DATE 22
|
||||
#define FF_PAGE 23
|
145
ve/ve7200a.frm
Executable file
145
ve/ve7200a.frm
Executable file
@ -0,0 +1,145 @@
|
||||
#include "ve7200.h"
|
||||
|
||||
GENERAL
|
||||
BEGIN
|
||||
// OFFSET 0 1
|
||||
// FONT "Courier New"
|
||||
// SIZE 10
|
||||
END
|
||||
|
||||
SECTION GRAPHIC
|
||||
BEGIN
|
||||
END
|
||||
|
||||
|
||||
//-------------------------intestazione form-----------------------------------------------//
|
||||
SECTION HEADER ODD 6
|
||||
|
||||
STRINGA FF_DITTA 40 1
|
||||
BEGIN
|
||||
KEY "nome ditta"
|
||||
PROMPT 1 1 "Ditta "
|
||||
MESSAGE _DITTA, !RAGSOC
|
||||
END
|
||||
|
||||
DATA FF_DATE
|
||||
BEGIN
|
||||
KEY "Data"
|
||||
PROMPT 1 3 "Data "
|
||||
MESSAGE _TODAY
|
||||
END
|
||||
|
||||
NUMERO FF_PAGE 10
|
||||
BEGIN
|
||||
KEY "Nr. pagina"
|
||||
PROMPT 154 3 "Pag."
|
||||
END
|
||||
|
||||
STRINGA -1
|
||||
BEGIN
|
||||
KEY "titolo"
|
||||
PROMPT 75 3 "@bSTAMPA FLUSSI DI CASSA"
|
||||
END
|
||||
|
||||
STRINGA FF_DESCRIZIONE 60
|
||||
BEGIN
|
||||
KEY "Descrizione"
|
||||
PROMPT 1 5 "@bDescrizione"
|
||||
END
|
||||
|
||||
STRINGA FF_IMPORTOD 18
|
||||
BEGIN
|
||||
KEY "Importo dare"
|
||||
PROMPT 62 5 "@b Incassi"
|
||||
END
|
||||
|
||||
STRINGA FF_IMPORTOA 18
|
||||
BEGIN
|
||||
KEY "Importo avere"
|
||||
PROMPT 81 5 "@b Spese"
|
||||
END
|
||||
|
||||
STRINGA FF_ESTREMIDOC 45
|
||||
BEGIN
|
||||
KEY "Estremi doc."
|
||||
PROMPT 110 5 "@bEstremi doc."
|
||||
END
|
||||
|
||||
STRINGA FF_STATODOC 1
|
||||
BEGIN
|
||||
KEY "Stato doc."
|
||||
PROMPT 156 5 "S"
|
||||
END
|
||||
|
||||
STRINGA FF_SCADENZA 10
|
||||
BEGIN
|
||||
KEY "Scadenza"
|
||||
PROMPT 158 5 "@bScadenza"
|
||||
END
|
||||
|
||||
STRINGA FF_PROGRESSIVO 18
|
||||
BEGIN
|
||||
KEY "Progressivo"
|
||||
PROMPT 169 5 "@b Progressivo"
|
||||
END
|
||||
|
||||
STRINGA -1
|
||||
BEGIN
|
||||
KEY "riga di separazione"
|
||||
PROMPT 1 6 "___________________________________________________________________________________________________________________________________________________________________________"
|
||||
END
|
||||
|
||||
END
|
||||
|
||||
//-----------------------riga tipo uno---------------------------------------------------//
|
||||
SECTION BODY ODD 1
|
||||
|
||||
STRINGA FF_B_DESCRIZIONE 60
|
||||
BEGIN
|
||||
KEY "Descrizione"
|
||||
PROMPT 1 1 ""
|
||||
END
|
||||
|
||||
NUMBER FF_B_IMPORTOD 18
|
||||
BEGIN
|
||||
KEY "Importo dare"
|
||||
PROMPT 62 1 ""
|
||||
PICTURE "###.###.###.###,@@"
|
||||
END
|
||||
|
||||
NUMBER FF_B_IMPORTOA 18
|
||||
BEGIN
|
||||
KEY "Importo avere"
|
||||
PROMPT 81 1 ""
|
||||
PICTURE "###.###.###.###,@@"
|
||||
END
|
||||
|
||||
STRINGA FF_B_ESTREMIDOC 45
|
||||
BEGIN
|
||||
KEY "Estremi doc."
|
||||
PROMPT 110 1 ""
|
||||
END
|
||||
|
||||
STRINGA FF_B_STATODOC 1
|
||||
BEGIN
|
||||
KEY "Stato doc."
|
||||
PROMPT 156 1 ""
|
||||
END
|
||||
|
||||
STRINGA FF_B_SCADENZA 10
|
||||
BEGIN
|
||||
KEY "Scadenza"
|
||||
PROMPT 158 1 ""
|
||||
END
|
||||
|
||||
NUMBER FF_B_PROGRESSIVO 18
|
||||
BEGIN
|
||||
KEY "Progressivo"
|
||||
PROMPT 169 1 ""
|
||||
PICTURE "###.###.###.###,@@"
|
||||
END
|
||||
|
||||
END
|
||||
|
||||
SECTION FOOTER ODD 1
|
||||
END
|
17
ve/ve7200a.h
Executable file
17
ve/ve7200a.h
Executable file
@ -0,0 +1,17 @@
|
||||
#define F_CODDITTA 101
|
||||
#define F_RAGSOC 102
|
||||
#define F_ESERCIZIO 103
|
||||
#define F_DATASCADI 104
|
||||
#define F_DATASCADF 105
|
||||
#define F_SALDOINI 106
|
||||
#define F_SHEETDOC 107
|
||||
// campi dello sheet
|
||||
#define F_S_CODNUM 101
|
||||
#define F_S_DESNUM 102
|
||||
#define F_S_TIPODOC 103
|
||||
#define F_S_DESTIPO 104
|
||||
#define F_S_DASTATO 105
|
||||
#define F_S_ASTATO 106
|
||||
#define F_S_ARESIDUO 107
|
||||
#define F_S_DESDASTATO 108
|
||||
#define F_S_DESASTATO 109
|
210
ve/ve7200a.uml
Executable file
210
ve/ve7200a.uml
Executable file
@ -0,0 +1,210 @@
|
||||
#include "ve7200a.h"
|
||||
|
||||
TOOLBAR "" 0 -5 0 4
|
||||
|
||||
STRING 30 70 50
|
||||
BEGIN
|
||||
FLAGS "G"
|
||||
PROMPT 10 -5 "Profilo "
|
||||
PSELECT
|
||||
END
|
||||
|
||||
BUTTON DLG_PRINT 10 2
|
||||
BEGIN
|
||||
PROMPT -12 -11 ""
|
||||
MESSAGE EXIT,K_ENTER
|
||||
END
|
||||
|
||||
BUTTON DLG_QUIT 10 2
|
||||
BEGIN
|
||||
PROMPT -22 -11 ""
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Stampa Flussi di cassa" -1 -1 78 18
|
||||
|
||||
GROUPBOX DLG_NULL 78 3
|
||||
BEGIN
|
||||
PROMPT 1 0 "@bDitta"
|
||||
END
|
||||
|
||||
NUMBER F_CODDITTA 5
|
||||
BEGIN
|
||||
PROMPT 2 1 "Codice "
|
||||
FLAGS "DFR"
|
||||
USE LF_NDITTE
|
||||
INPUT CODDITTA F_CODDITTA
|
||||
OUTPUT F_RAGSOC RAGSOC
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
STRING F_RAGSOC 50
|
||||
BEGIN
|
||||
PROMPT 17 1 "Rag.Soc. "
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
GROUPBOX DLG_NULL 78 5
|
||||
BEGIN
|
||||
PROMPT 1 3 "@bParametri"
|
||||
END
|
||||
|
||||
STRING F_ESERCIZIO 4
|
||||
BEGIN
|
||||
PROMPT 2 4 "Esercizio da cui partire per le scadenze dei documenti "
|
||||
FLAGS "UPZ"
|
||||
USE ESC
|
||||
INPUT CODTAB F_ESERCIZIO
|
||||
DISPLAY "Codice@10" CODTAB
|
||||
DISPLAY "Dal@16" D0
|
||||
DISPLAY "Al@16" D1
|
||||
OUTPUT F_ESERCIZIO CODTAB
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
DATE F_DATASCADI
|
||||
BEGIN
|
||||
PROMPT 2 5 "Data di scadenza dal "
|
||||
HELP "Data di inizio scadenza"
|
||||
CHECKTYPE REQUIRED
|
||||
WARNING "Data di inizio scadenza non valida"
|
||||
FLAGS "A"
|
||||
END
|
||||
|
||||
DATE F_DATASCADF
|
||||
BEGIN
|
||||
PROMPT 40 5 "al "
|
||||
HELP "Data di fine scadenza"
|
||||
CHECKTYPE REQUIRED
|
||||
VALIDATE DATE_CMP_FUNC >= F_DATASCADI
|
||||
WARNING "Data di fine scadenza non valida"
|
||||
END
|
||||
|
||||
CURRENCY F_SALDOINI 15
|
||||
BEGIN
|
||||
PROMPT 2 6 "Saldo iniziale "
|
||||
END
|
||||
|
||||
SPREADSHEET F_SHEETDOC
|
||||
BEGIN
|
||||
PROMPT 2 8 "Scelta documenti"
|
||||
ITEM "Cod. num."
|
||||
ITEM "Descrizione num.@32"
|
||||
ITEM "Tipo doc."
|
||||
ITEM "Descrizione tipo@32"
|
||||
ITEM "Da stato"
|
||||
ITEM "A stato"
|
||||
ITEM "A residuo"
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
ENDMASK
|
||||
|
||||
PAGE "Scelta documenti" -1 -1 75 10
|
||||
|
||||
STRING F_S_CODNUM 4
|
||||
BEGIN
|
||||
PROMPT 2 1 "Cod. num. "
|
||||
FLAGS "U"
|
||||
USE %NUM
|
||||
INPUT CODTAB F_S_CODNUM
|
||||
DISPLAY "Cod. Num." CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT F_S_CODNUM CODTAB
|
||||
OUTPUT F_S_DESNUM S0
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
STRING F_S_DESNUM 50
|
||||
BEGIN
|
||||
PROMPT 20 1 ""
|
||||
HELP "Descrizione numerazione"
|
||||
USE %NUM KEY 2
|
||||
INPUT S0 F_S_DESNUM
|
||||
DISPLAY "Descrizione@50" S0
|
||||
DISPLAY "Codice" CODTAB
|
||||
COPY OUTPUT F_S_CODNUM
|
||||
END
|
||||
|
||||
STRING F_S_TIPODOC 4
|
||||
BEGIN
|
||||
PROMPT 2 2 "Tipo doc. "
|
||||
HELP "Codice tipo documento"
|
||||
USE %TIP
|
||||
INPUT CODTAB F_S_TIPODOC
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT F_S_TIPODOC CODTAB
|
||||
OUTPUT F_S_DESTIPO S0
|
||||
CHECKTYPE REQUIRED
|
||||
FLAG "UP"
|
||||
END
|
||||
|
||||
STRING F_S_DESTIPO 50
|
||||
BEGIN
|
||||
PROMPT 20 2 ""
|
||||
HELP "Descrizione tipo documento"
|
||||
USE %TIP KEY 2
|
||||
INPUT S0 F_S_DESTIPO
|
||||
DISPLAY "Descrizione@50" S0
|
||||
DISPLAY "Codice" CODTAB
|
||||
COPY OUTPUT F_S_TIPODOC
|
||||
END
|
||||
|
||||
STRING F_S_DASTATO 1
|
||||
BEGIN
|
||||
PROMPT 2 3 "Da stato "
|
||||
USE %STD
|
||||
INPUT CODTAB F_S_DASTATO
|
||||
DISPLAY "Stato" CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT F_S_DASTATO CODTAB
|
||||
OUTPUT F_S_DESDASTATO S0
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
STRING F_S_ASTATO 1
|
||||
BEGIN
|
||||
PROMPT 2 4 "A stato "
|
||||
USE %STD
|
||||
INPUT CODTAB F_S_ASTATO
|
||||
DISPLAY "Stato" CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT F_S_ASTATO CODTAB
|
||||
OUTPUT F_S_DESASTATO S0
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
BOOLEAN F_S_ARESIDUO
|
||||
BEGIN
|
||||
PROMPT 2 5 "A residuo"
|
||||
END
|
||||
|
||||
STRING F_S_DESDASTATO 50
|
||||
BEGIN
|
||||
PROMPT 20 3 ""
|
||||
END
|
||||
|
||||
STRING F_S_DESASTATO 50
|
||||
BEGIN
|
||||
PROMPT 20 4 ""
|
||||
END
|
||||
|
||||
BUTTON DLG_OK 9 2
|
||||
BEGIN
|
||||
PROMPT -13 -1 ""
|
||||
END
|
||||
|
||||
BUTTON DLG_DELREC 9 2
|
||||
BEGIN
|
||||
PROMPT -23 -1 ""
|
||||
END
|
||||
|
||||
BUTTON DLG_CANCEL 9 2
|
||||
BEGIN
|
||||
PROMPT -33 -1 ""
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
ENDMASK
|
110
ve/ve7300.cpp
110
ve/ve7300.cpp
@ -1,10 +1,6 @@
|
||||
#include <applicat.h>
|
||||
#include <automask.h>
|
||||
#include <form.h>
|
||||
#include <printer.h>
|
||||
#include <progind.h>
|
||||
#include <recarray.h>
|
||||
#include <relation.h>
|
||||
#include <recarray.h>
|
||||
#include <utility.h>
|
||||
|
||||
#include <doc.h>
|
||||
@ -14,23 +10,8 @@
|
||||
#include "ve7300.h"
|
||||
#include "ve7300a.h"
|
||||
|
||||
//la dichiarazione delle classi è nel ve7300.h (come si dovrebbe sempre fare...)
|
||||
//-----FORM--------------------------------------------------------------------------------------//
|
||||
|
||||
class TEntrFor_form : public TForm
|
||||
{
|
||||
private:
|
||||
TSorted_cursor* _sc;
|
||||
|
||||
protected:
|
||||
virtual bool validate(TForm_item& cf, TToken_string& s);
|
||||
void output_values(const TRectype & rec, const char * output, TForm_item & cf);
|
||||
const TRectype* find_original_rdoc(const TRectype& row) const;
|
||||
|
||||
public:
|
||||
virtual TCursor* cursor() const { return _sc; }
|
||||
TEntrFor_form();
|
||||
virtual ~TEntrFor_form();
|
||||
};
|
||||
|
||||
TEntrFor_form::TEntrFor_form() :TForm ("ve7300a")
|
||||
{
|
||||
@ -161,13 +142,18 @@ bool TEntrFor_form::validate(TForm_item& cf, TToken_string& s)
|
||||
|
||||
if (rdoc != NULL && rdoc->get(RDOC_PROVV).not_empty())
|
||||
{
|
||||
output_values(*rdoc, s.get(2), cf);
|
||||
output_values(*rdoc, s.get(2), cf);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if (code== "_RITARDO")
|
||||
{
|
||||
|
||||
// deve prima controllare se è stato selezionato un valore limite x il ritardo\anticipo
|
||||
const TString4 tiporit = app().get_tiporit();
|
||||
const long valrit = app().get_ritardo();
|
||||
|
||||
const TString16 id1 = s.get(1);
|
||||
const TString16 id2 = s.get(2);
|
||||
|
||||
@ -178,9 +164,11 @@ bool TEntrFor_form::validate(TForm_item& cf, TToken_string& s)
|
||||
const TDate d2 = fd2.get();
|
||||
|
||||
TString16 rit;
|
||||
long ritardo;
|
||||
|
||||
if (d1.ok() && d2.ok())
|
||||
{
|
||||
long ritardo = d1 - d2;
|
||||
ritardo = d1 - d2;
|
||||
|
||||
if (ritardo > 0)
|
||||
rit.format("@b%ld@r",ritardo);
|
||||
@ -189,9 +177,14 @@ bool TEntrFor_form::validate(TForm_item& cf, TToken_string& s)
|
||||
}
|
||||
else
|
||||
rit = "@b???@r";
|
||||
|
||||
|
||||
// if (app().get_dettaglio())
|
||||
// {
|
||||
// const bool salta = ((tiporit == "R") && (ritardo < valrit)) ||
|
||||
// ((tiporit == "A") && (ritardo > -valrit));
|
||||
// find_field('B',odd_page,"FORNITORI").set_height(salta ? 0 : 1);
|
||||
// }
|
||||
cf.set(rit); //scrive nel campo del form
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ -201,20 +194,6 @@ bool TEntrFor_form::validate(TForm_item& cf, TToken_string& s)
|
||||
|
||||
//-----AUTOMASK---------------------------------------------------------------------------------//
|
||||
|
||||
class TEntrFor_mask : public TAutomask
|
||||
{
|
||||
TRelation * _rel;
|
||||
TCursor * _cur;
|
||||
|
||||
protected:
|
||||
bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
||||
public:
|
||||
|
||||
TEntrFor_mask();
|
||||
|
||||
virtual ~TEntrFor_mask(){};
|
||||
};
|
||||
|
||||
TEntrFor_mask::TEntrFor_mask() :TAutomask ("ve7300a")
|
||||
{
|
||||
}
|
||||
@ -230,27 +209,6 @@ bool TEntrFor_mask::on_field_event(TOperable_field& o, TField_event e, long joll
|
||||
}
|
||||
|
||||
//-------SKELETON APPLICATION------------------------------------------------------------------------------//
|
||||
class TEntrFor: public TSkeleton_application
|
||||
{
|
||||
TEntrFor_mask * _mask;
|
||||
TEntrFor_form * _form;
|
||||
|
||||
protected:
|
||||
virtual bool create(void);
|
||||
virtual bool destroy(void);
|
||||
virtual void main_loop();
|
||||
|
||||
void print_header();
|
||||
void print_footer();
|
||||
void print_line(const TString& r, const long j);
|
||||
|
||||
public:
|
||||
void add_filter_range(TString& filtro, short id1, short id2, const char* campo) const;
|
||||
void add_filter_expr(TString& filtro, short id, const char* campo, const char* cmp) const;
|
||||
|
||||
TEntrFor() {}
|
||||
virtual ~TEntrFor() {}
|
||||
};
|
||||
|
||||
// creazione dell'applicazione
|
||||
bool TEntrFor::create()
|
||||
@ -270,6 +228,19 @@ bool TEntrFor::destroy()
|
||||
return TSkeleton_application::destroy();
|
||||
}
|
||||
|
||||
//stampa dei parametri di testata
|
||||
void TEntrFor::print_header()
|
||||
{
|
||||
_form->find_field('H', odd_page, FH_DACODART).set(_mask->get(F_DACODART));
|
||||
_form->find_field('H', odd_page, FH_ACODART).set(_mask->get(F_ACODART));
|
||||
_form->find_field('H', odd_page, FH_DACODFORN).set(_mask->get(F_DACODFOR));
|
||||
_form->find_field('H', odd_page, FH_ACODFORN).set(_mask->get(F_ACODFOR));
|
||||
_form->find_field('H', odd_page, FH_DADATA).set(_mask->get(F_DADATA));
|
||||
_form->find_field('H', odd_page, FH_ADATA).set(_mask->get(F_ADATA));
|
||||
|
||||
_form->set_testata();
|
||||
}
|
||||
|
||||
void TEntrFor::add_filter_expr(TString& filtro, short id, const char* campo, const char* cmp) const
|
||||
{
|
||||
TMask_field& f = _mask->field(id);
|
||||
@ -296,6 +267,15 @@ void TEntrFor::add_filter_range(TString& filtro, short id1, short id2, const cha
|
||||
add_filter_expr(filtro, id2, campo, "<=");
|
||||
}
|
||||
|
||||
//metodo per far vedere o meno la subsection ARTICOLI in base alle lune dell'utente
|
||||
void TEntrFor::set_dettaglio()
|
||||
{
|
||||
_dettaglio = _mask->get_bool(F_DETAIL);
|
||||
_form->find_field('B',odd_page,"FORNITORI").enable(_dettaglio);
|
||||
_form->find_field('B',odd_page,"FORNITORI2").enable(!_dettaglio);
|
||||
}
|
||||
|
||||
|
||||
void TEntrFor::main_loop()
|
||||
{
|
||||
while (_mask->run() == K_ENTER)
|
||||
@ -332,6 +312,10 @@ void TEntrFor::main_loop()
|
||||
lines++;
|
||||
}
|
||||
}
|
||||
|
||||
//prendo i parametri su ritardo\anticipo che passo al form
|
||||
_ritant = _mask->get_long(F_RITARDO);
|
||||
_tiporit = _mask->get(F_TIPORIT);
|
||||
|
||||
if (filtrosheet.not_empty())
|
||||
{
|
||||
@ -364,7 +348,11 @@ void TEntrFor::main_loop()
|
||||
cursore.setfilter(filtro, TRUE);
|
||||
|
||||
const TRecnotype items = cursore.items();
|
||||
//..e vai che si stampa!
|
||||
// abilita la sezione del body con i dettagli delle righedoc
|
||||
set_dettaglio();
|
||||
|
||||
//..e vai che si stampa!
|
||||
print_header();
|
||||
_form->print();
|
||||
|
||||
}
|
||||
|
91
ve/ve7300.h
91
ve/ve7300.h
@ -1,16 +1,77 @@
|
||||
// campi form Riepilogo entrate fornitori ve7300a.frm
|
||||
#define FF_CODART 1
|
||||
#define FF_DESCRART 2
|
||||
#define FF_CODFORN 3
|
||||
#define FF_RAGSOC 4
|
||||
#define FF_NUMORD 5
|
||||
#define FF_DATAORD 6
|
||||
#define FF_COSTO 7
|
||||
#define FF_QTA 8
|
||||
#define FF_DATACONS 9
|
||||
#define FF_DATAENTR 10
|
||||
#define FF_NUMENTR 11
|
||||
#define FF_RITARDO 12
|
||||
#define FF_DOCFORN 13
|
||||
#define FF_DATAFORN 14
|
||||
#include <applicat.h>
|
||||
#include <automask.h>
|
||||
#include <form.h>
|
||||
|
||||
//--------------FORM-----------------------
|
||||
class TEntrFor_form : public TForm
|
||||
{
|
||||
private:
|
||||
TSorted_cursor* _sc;
|
||||
|
||||
protected:
|
||||
virtual bool validate(TForm_item& cf, TToken_string& s);
|
||||
void output_values(const TRectype & rec, const char * output, TForm_item & cf);
|
||||
const TRectype* find_original_rdoc(const TRectype& row) const;
|
||||
|
||||
public:
|
||||
void set_testata() {set_header(1,TRUE);}
|
||||
virtual TCursor* cursor() const { return _sc; }
|
||||
TEntrFor_form();
|
||||
virtual ~TEntrFor_form();
|
||||
};
|
||||
|
||||
//-------------MASCHERA-------------------
|
||||
class TEntrFor_mask : public TAutomask
|
||||
{
|
||||
TRelation * _rel;
|
||||
TCursor * _cur;
|
||||
|
||||
protected:
|
||||
bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
||||
public:
|
||||
|
||||
TEntrFor_mask();
|
||||
|
||||
virtual ~TEntrFor_mask(){};
|
||||
};
|
||||
|
||||
//------------APPLICAZIONE----------------
|
||||
class TEntrFor: public TSkeleton_application
|
||||
{
|
||||
TEntrFor_mask * _mask;
|
||||
TEntrFor_form * _form;
|
||||
long _ritant;
|
||||
TString4 _tiporit;
|
||||
bool _dettaglio;
|
||||
|
||||
protected:
|
||||
virtual bool create(void);
|
||||
virtual bool destroy(void);
|
||||
virtual void main_loop();
|
||||
|
||||
void print_header();
|
||||
void print_footer();
|
||||
void print_line(const TString& r, const long j);
|
||||
void set_dettaglio();
|
||||
|
||||
public:
|
||||
void add_filter_range(TString& filtro, short id1, short id2, const char* campo) const;
|
||||
void add_filter_expr(TString& filtro, short id, const char* campo, const char* cmp) const;
|
||||
TString4 get_tiporit() const {return _tiporit;};
|
||||
long get_ritardo() const {return _ritant;};
|
||||
bool get_dettaglio() const {return _dettaglio;};
|
||||
|
||||
TEntrFor() : _dettaglio(TRUE), _ritant(0L) {}
|
||||
virtual ~TEntrFor() {}
|
||||
};
|
||||
|
||||
//metodo per richiamare l'applicazione principale (serve per avere il valore di un intero,
|
||||
//ricavato nell'applicazione,nel form)
|
||||
inline TEntrFor& app() { return (TEntrFor&) main_app(); }
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
104
ve/ve7300a.frm
104
ve/ve7300a.frm
@ -1,4 +1,4 @@
|
||||
#include "ve7300.h"
|
||||
#include "ve7300a.h"
|
||||
//____________________RELAZIONE_____________________________//
|
||||
USE LF_RIGHEDOC KEY 3 //BY CODARTMAG CODCF DATADOC
|
||||
JOIN LF_DOC INTO PROVV==PROVV ANNO==ANNO CODNUM==CODNUM NDOC==NDOC
|
||||
@ -22,7 +22,7 @@ END
|
||||
|
||||
//__________________TESTATA___________________________//
|
||||
|
||||
SECTION HEADER ODD 6
|
||||
SECTION HEADER ODD 8
|
||||
|
||||
STRINGA -1
|
||||
BEGIN
|
||||
@ -30,107 +30,160 @@ BEGIN
|
||||
PROMPT 1 1 "@bSTAMPA DI RIEPILOGO ENTRATE FORNITORI"
|
||||
END
|
||||
|
||||
STRINGA FH_DACODART 27
|
||||
BEGIN
|
||||
KEY "da codart"
|
||||
PROMPT 1 2 "Da art. "
|
||||
PICTURE "####################"
|
||||
END
|
||||
|
||||
STRINGA FH_ACODART 27
|
||||
BEGIN
|
||||
KEY "a codart"
|
||||
PROMPT 1 3 "A art. "
|
||||
PICTURE "####################"
|
||||
END
|
||||
|
||||
STRINGA FH_DACODFORN 15
|
||||
BEGIN
|
||||
KEY "da codforn"
|
||||
PROMPT 30 2 "Da forn. "
|
||||
PICTURE "######"
|
||||
END
|
||||
|
||||
STRINGA FH_ACODFORN 15
|
||||
BEGIN
|
||||
KEY "a codforn"
|
||||
PROMPT 30 3 "A forn. "
|
||||
PICTURE "######"
|
||||
END
|
||||
|
||||
STRINGA FH_DADATA 10
|
||||
BEGIN
|
||||
KEY "da data"
|
||||
PROMPT 60 2 "Dal "
|
||||
END
|
||||
|
||||
STRINGA FH_ADATA 10
|
||||
BEGIN
|
||||
KEY "a data"
|
||||
PROMPT 60 3 "Al "
|
||||
END
|
||||
|
||||
NUMERO FH_PAGINA 3
|
||||
BEGIN
|
||||
KEY "Nr. pagina"
|
||||
PROMPT 100 2 "Pag. "
|
||||
MESSAGE _PAGENO
|
||||
END
|
||||
|
||||
STRINGA -1
|
||||
BEGIN
|
||||
KEY "separatore"
|
||||
PROMPT 1 2 "@b____________________________________________________________________________________________________________________________________"
|
||||
PROMPT 1 4 "@b____________________________________________________________________________________________________________________________________"
|
||||
END
|
||||
|
||||
STRINGA -1
|
||||
BEGIN
|
||||
KEY "codice articolo"
|
||||
PROMPT 1 3 "@bCodice articolo"
|
||||
PROMPT 1 5 "@bCodice articolo"
|
||||
END
|
||||
|
||||
STRINGA -1
|
||||
BEGIN
|
||||
KEY "descrizione articolo"
|
||||
PROMPT 25 3 "@bDescrizione articolo"
|
||||
PROMPT 25 5 "@bDescrizione articolo"
|
||||
END
|
||||
|
||||
STRINGA -1
|
||||
BEGIN
|
||||
KEY "descrizione produttore(cover user10)"
|
||||
PROMPT 75 5 "@bProduttore"
|
||||
END
|
||||
|
||||
STRINGA -1
|
||||
BEGIN
|
||||
KEY "codice fornitore"
|
||||
PROMPT 5 4 "@bCod. forn."
|
||||
PROMPT 5 6 "@bCod. forn."
|
||||
END
|
||||
|
||||
STRINGA -1
|
||||
BEGIN
|
||||
KEY "ragione sociale fornitore"
|
||||
PROMPT 29 4 "@bRagione sociale"
|
||||
PROMPT 29 6 "@bRagione sociale"
|
||||
END
|
||||
|
||||
STRINGA -1
|
||||
BEGIN
|
||||
KEY "data entrata"
|
||||
PROMPT 10 5 "@bData entr."
|
||||
PROMPT 10 7 "@bData entr."
|
||||
END
|
||||
|
||||
STRINGA -1
|
||||
BEGIN
|
||||
KEY "numero entrata"
|
||||
PROMPT 23 5 "@bN.entr."
|
||||
PROMPT 23 7 "@bN.entr."
|
||||
END
|
||||
|
||||
STRINGA -1
|
||||
BEGIN
|
||||
KEY "costo"
|
||||
PROMPT 39 5 "@bCosto"
|
||||
PROMPT 39 7 "@bCosto"
|
||||
END
|
||||
|
||||
STRINGA -1
|
||||
BEGIN
|
||||
KEY "quantita"
|
||||
PROMPT 50 5 "@bQta"
|
||||
PROMPT 50 7 "@bQta"
|
||||
END
|
||||
|
||||
STRINGA -1
|
||||
BEGIN
|
||||
KEY "data consegna"
|
||||
PROMPT 57 5 "@bData cons."
|
||||
PROMPT 57 7 "@bData cons."
|
||||
END
|
||||
|
||||
STRINGA -1
|
||||
BEGIN
|
||||
KEY "data ordine"
|
||||
PROMPT 69 5 "@bData ord."
|
||||
PROMPT 69 7 "@bData ord."
|
||||
END
|
||||
|
||||
STRINGA -1
|
||||
BEGIN
|
||||
KEY "numero entrata"
|
||||
PROMPT 81 5 "@bN.ord."
|
||||
PROMPT 81 7 "@bN.ord."
|
||||
END
|
||||
|
||||
STRINGA -1
|
||||
BEGIN
|
||||
KEY "giorni di ritardo"
|
||||
PROMPT 89 5 "@bRitardo"
|
||||
PROMPT 89 7 "@bRitardo"
|
||||
END
|
||||
|
||||
STRINGA -1
|
||||
BEGIN
|
||||
KEY "documento fornitore"
|
||||
PROMPT 98 5 "@bDoc. forn."
|
||||
PROMPT 98 7 "@bDoc. forn."
|
||||
END
|
||||
|
||||
STRINGA -1
|
||||
BEGIN
|
||||
KEY "data docum. fornitore"
|
||||
PROMPT 110 5 "@bData forn."
|
||||
PROMPT 110 7 "@bData forn."
|
||||
END
|
||||
|
||||
STRINGA -1
|
||||
BEGIN
|
||||
KEY "separatore"
|
||||
PROMPT 1 6 "@b____________________________________________________________________________________________________________________________________"
|
||||
PROMPT 1 8 "@b____________________________________________________________________________________________________________________________________"
|
||||
END
|
||||
|
||||
END
|
||||
|
||||
//____________BODY___________________//
|
||||
|
||||
SECTION BODY ODD 3
|
||||
SECTION BODY ODD 1
|
||||
|
||||
STRINGA FF_CODART 20
|
||||
BEGIN
|
||||
@ -146,6 +199,13 @@ BEGIN
|
||||
FIELD LF_ANAMAG->DESCR
|
||||
END
|
||||
|
||||
STRINGA FF_PRODUCER
|
||||
BEGIN
|
||||
KEY "produttore"
|
||||
PROMPT 75 1 ""
|
||||
FIELD LF_ANAMAG->USER10
|
||||
END
|
||||
|
||||
//Raggruppamento per codice articolo (livello 1)
|
||||
SECTION ARTICOLI 2 1 1 FILE LF_RIGHEDOC GROUP CODARTMAG
|
||||
|
||||
@ -162,6 +222,11 @@ SECTION ARTICOLI 2 1 1 FILE LF_RIGHEDOC GROUP CODARTMAG
|
||||
PROMPT 29 1 ""
|
||||
FIELD LF_CLIFO->RAGSOC
|
||||
END
|
||||
|
||||
SECTION FORNITORI2 1 0 0 FILE LF_RIGHEDOC GROUP LF_DOC->CODCF
|
||||
|
||||
END
|
||||
|
||||
|
||||
//Raggruppamento per codice fornitore (livello 2)
|
||||
SECTION FORNITORI 2 1 1 FILE LF_RIGHEDOC GROUP LF_DOC->CODCF
|
||||
@ -242,4 +307,3 @@ SECTION ARTICOLI 2 1 1 FILE LF_RIGHEDOC GROUP CODARTMAG
|
||||
END //end section ARTICOLI
|
||||
|
||||
END
|
||||
|
||||
|
31
ve/ve7300a.h
31
ve/ve7300a.h
@ -13,8 +13,39 @@
|
||||
#define F_ADESCRFOR 118
|
||||
#define F_DADATA 119
|
||||
#define F_ADATA 120
|
||||
#define F_DETAIL 121
|
||||
#define F_TIPORIT 122
|
||||
#define F_RITARDO 123
|
||||
|
||||
#define F_SHEETNUMS 201
|
||||
|
||||
|
||||
|
||||
// campi form Riepilogo entrate fornitori ve7300a.frm
|
||||
#define FF_CODART 1
|
||||
#define FF_DESCRART 2
|
||||
#define FF_CODFORN 3
|
||||
#define FF_RAGSOC 4
|
||||
#define FF_NUMORD 5
|
||||
#define FF_DATAORD 6
|
||||
#define FF_COSTO 7
|
||||
#define FF_QTA 8
|
||||
#define FF_DATACONS 9
|
||||
#define FF_DATAENTR 10
|
||||
#define FF_NUMENTR 11
|
||||
#define FF_RITARDO 12
|
||||
#define FF_DOCFORN 13
|
||||
#define FF_DATAFORN 14
|
||||
#define FF_PRODUCER 15
|
||||
|
||||
//testata
|
||||
#define FH_DACODART 20
|
||||
#define FH_ACODART 21
|
||||
#define FH_DACODFORN 22
|
||||
#define FH_ACODFORN 23
|
||||
#define FH_DADATA 24
|
||||
#define FH_ADATA 25
|
||||
#define FH_PAGINA 26
|
||||
|
||||
|
||||
|
||||
|
@ -49,7 +49,7 @@ END
|
||||
|
||||
STRING F_ACODART 20
|
||||
BEGIN
|
||||
PROMPT 2 4 "All'art. "
|
||||
PROMPT 2 3 "All'art. "
|
||||
FLAG "U"
|
||||
USE LF_ANAMAG
|
||||
INPUT CODART F_ACODART
|
||||
@ -61,7 +61,7 @@ END
|
||||
|
||||
STRING F_ADESCRART 50
|
||||
BEGIN
|
||||
PROMPT 2 5 "Descrizione "
|
||||
PROMPT 2 4 "Descrizione "
|
||||
USE LF_ANAMAG KEY 2
|
||||
INPUT DESCR F_ADESCRART
|
||||
COPY DISPLAY F_DADESCRART
|
||||
@ -70,7 +70,7 @@ END
|
||||
|
||||
STRING F_DACODFOR 6
|
||||
BEGIN
|
||||
PROMPT 2 7 "Dal fornitore "
|
||||
PROMPT 2 6 "Dal fornitore "
|
||||
USE LF_CLIFO KEY 1
|
||||
INPUT TIPOCF "F"
|
||||
INPUT CODCF F_DACODFOR
|
||||
@ -83,7 +83,7 @@ END
|
||||
|
||||
STRING F_DADESCRFOR 50
|
||||
BEGIN
|
||||
PROMPT 2 8 "Ragione sociale "
|
||||
PROMPT 2 7 "Ragione sociale "
|
||||
USE LF_CLIFO KEY 2
|
||||
INPUT TIPOCF "F"
|
||||
INPUT RAGSOC F_DADESCRFOR
|
||||
@ -94,7 +94,7 @@ END
|
||||
|
||||
STRING F_ACODFOR 6
|
||||
BEGIN
|
||||
PROMPT 2 10 "Al fornitore "
|
||||
PROMPT 2 8 "Al fornitore "
|
||||
COPY USE F_DACODFOR
|
||||
INPUT TIPOCF "F"
|
||||
INPUT CODCF F_ACODFOR
|
||||
@ -106,7 +106,7 @@ END
|
||||
|
||||
STRING F_ADESCRFOR 50
|
||||
BEGIN
|
||||
PROMPT 2 11 "Ragione sociale "
|
||||
PROMPT 2 9 "Ragione sociale "
|
||||
COPY USE F_DADESCRFOR
|
||||
INPUT TIPOCF "F"
|
||||
INPUT RAGSOC F_ADESCRFOR
|
||||
@ -116,17 +116,42 @@ END
|
||||
|
||||
DATE F_DADATA
|
||||
BEGIN
|
||||
PROMPT 2 13 "Dalla data "
|
||||
PROMPT 2 11 "Dalla data "
|
||||
END
|
||||
|
||||
DATE F_ADATA
|
||||
BEGIN
|
||||
PROMPT 35 13 "Alla data "
|
||||
PROMPT 35 11 "Alla data "
|
||||
END
|
||||
|
||||
SPREADSHEET F_SHEETNUMS 75 5
|
||||
BOOLEAN F_DETAIL
|
||||
BEGIN
|
||||
PROMPT 2 15 ""
|
||||
PROMPT 2 13 "Stampa dettaglio righe"
|
||||
MESSAGE FALSE CLEAR,F_TIPORIT|CLEAR,F_RITARDO
|
||||
MESSAGE TRUE ENABLE,F_TIPORIT|ENABLE,F_RITARDO
|
||||
END
|
||||
|
||||
RADIOBUTTON F_TIPORIT 1 16
|
||||
BEGIN
|
||||
PROMPT 30 12 ""
|
||||
ITEM " |Tutti"
|
||||
MESSAGE CLEAR,F_RITARDO
|
||||
ITEM "R|Ritardo"
|
||||
MESSAGE ENABLE,F_RITARDO
|
||||
ITEM "A|Anticipo"
|
||||
MESSAGE ENABLE,F_RITARDO
|
||||
FLAGS "HD"
|
||||
END
|
||||
|
||||
NUMBER F_RITARDO 4
|
||||
BEGIN
|
||||
PROMPT 43 14 "Giorni "
|
||||
FLAGS "HD"
|
||||
END
|
||||
|
||||
SPREADSHEET F_SHEETNUMS 75 4
|
||||
BEGIN
|
||||
PROMPT 2 16 ""
|
||||
ITEM "Cod. Num."
|
||||
ITEM "Descrizione cod. num."
|
||||
END
|
||||
|
345
ve/ve7400.cpp
Executable file
345
ve/ve7400.cpp
Executable file
@ -0,0 +1,345 @@
|
||||
#include <applicat.h>
|
||||
#include <assoc.h>
|
||||
#include <automask.h>
|
||||
#include <currency.h>
|
||||
#include <filetext.h>
|
||||
#include <msksheet.h>
|
||||
#include <printer.h>
|
||||
#include <recarray.h>
|
||||
#include <relation.h>
|
||||
#include <sort.h>
|
||||
|
||||
#include "velib.h"
|
||||
|
||||
#include "ve7.h"
|
||||
#include "ve7400a.h"
|
||||
|
||||
class TFilConad: public TFile_text
|
||||
{
|
||||
protected:
|
||||
virtual void validate(TCursor& cur,TRecord_text &rec, TToken_string &val, TString& str);
|
||||
|
||||
public:
|
||||
TFilConad(const TString& file_name, const TString& config_name);
|
||||
virtual ~TFilConad() { }
|
||||
};
|
||||
|
||||
TFilConad::TFilConad(const TString& file_name, const TString& config_name)
|
||||
: TFile_text(file_name, config_name)
|
||||
{
|
||||
}
|
||||
|
||||
class TBolle2Conad_mask : public TAutomask
|
||||
{
|
||||
protected:
|
||||
bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
||||
public:
|
||||
|
||||
TBolle2Conad_mask();
|
||||
|
||||
virtual ~TBolle2Conad_mask(){};
|
||||
};
|
||||
|
||||
TBolle2Conad_mask::TBolle2Conad_mask() :TAutomask ("ve7400a")
|
||||
{
|
||||
}
|
||||
|
||||
bool TBolle2Conad_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
class TBolle2Conad : public TSkeleton_application
|
||||
{
|
||||
TCursor* _cur;
|
||||
TBolle2Conad_mask* _msk;
|
||||
TDate _dataini, _datafin;
|
||||
long _codconad;
|
||||
TString80 _codforn;
|
||||
TDocumento* _fattura;
|
||||
TDocumento* _bolla;
|
||||
TRiga_documento* _rigabolla;
|
||||
TFilConad* _trasfile;
|
||||
long _progressivo;
|
||||
TAssoc_array* _elencobolle; // assoc array per verificare se la bolla è gia stat passata
|
||||
|
||||
protected:
|
||||
virtual bool create(void);
|
||||
virtual bool destroy(void);
|
||||
virtual void main_loop() ;
|
||||
|
||||
void elabora_documenti();
|
||||
void elabora_righe_doc();
|
||||
void elabora_doc_originale(const TDocumento& documento);
|
||||
|
||||
public:
|
||||
const TDocumento fattura() {return *_fattura;} ;
|
||||
const TDocumento bolla() {return *_bolla;} ;
|
||||
const TRiga_documento rigabolla() {return *_rigabolla;} ;
|
||||
const long progressivo() {return _progressivo;} ;
|
||||
const TString80 fornitore() { return _codforn;} ;
|
||||
const long conad() { return _codconad;} ;
|
||||
TBolle2Conad() {} ;
|
||||
virtual ~TBolle2Conad() {} ;
|
||||
};
|
||||
|
||||
// restituisce un riferimento all' applicazione
|
||||
inline TBolle2Conad& app() { return (TBolle2Conad&) main_app();}
|
||||
|
||||
// gestione dei messaggi estesi nei campi
|
||||
void TFilConad::validate(TCursor& cur,TRecord_text &rec, TToken_string &s, TString& str)
|
||||
{
|
||||
const TString code(s.get(0));
|
||||
TString valore;
|
||||
if (code == "_FISSO")
|
||||
{
|
||||
// gestione dei campi fissi per i record delle riba
|
||||
// sintassi: _FISSO,!<valore>
|
||||
// dove: <valore> è la stringa fissa da emettere
|
||||
TString in(s.get());
|
||||
CHECK(in[0]=='!',"Macro _FISSO senza carattere '!'");
|
||||
in.ltrim(1);
|
||||
in.trim();
|
||||
valore = in;
|
||||
}
|
||||
else if (code == "_PROGRESSIVO")
|
||||
{
|
||||
valore.format("%05d", app().progressivo());
|
||||
}
|
||||
else if (code == "_FORNITORE")
|
||||
{
|
||||
valore = app().fornitore();
|
||||
}
|
||||
else if (code == "_CONAD")
|
||||
{
|
||||
valore.format("%015d", app().conad());
|
||||
}
|
||||
else if (code == "_FATTURA")
|
||||
{
|
||||
// gestione campi da leggere dalla fattura
|
||||
TString in(s.get());
|
||||
if (in == "DATA")
|
||||
{
|
||||
TDate data = app().fattura().data();
|
||||
valore = data.string(brief, '-', full, full, amg_date);
|
||||
valore.strip("-");
|
||||
}
|
||||
else if (in == "NUMERO")
|
||||
{
|
||||
valore.format("%06d", app().fattura().numero());
|
||||
}
|
||||
}
|
||||
else if (code == "_BOLLA")
|
||||
{
|
||||
// gestione campi da leggere dalla bolla
|
||||
TString in(s.get());
|
||||
if (in == "DATA")
|
||||
{
|
||||
TDate data = app().bolla().data();
|
||||
valore = data.string(brief, '-', full, full, amg_date);
|
||||
valore.strip("-");
|
||||
}
|
||||
}
|
||||
else if (code == "_RIGABOLLA")
|
||||
{
|
||||
// gestione campi da leggere dalla riga bolla corrente
|
||||
TString in(s.get());
|
||||
if (in == "PREZZO")
|
||||
{
|
||||
real r = app().rigabolla().prezzo(TRUE, FALSE);
|
||||
valore = r.string(9,3);
|
||||
valore.strip(".");
|
||||
}
|
||||
else if (in == "IMPORTO")
|
||||
{
|
||||
real r = app().rigabolla().importo(TRUE, FALSE);
|
||||
valore = r.string(9,3);
|
||||
valore.strip(".");
|
||||
}
|
||||
else if (in == "ALIQUOTA")
|
||||
{
|
||||
real r = app().rigabolla().iva().percentuale();
|
||||
valore = r.string(2,0,'0');
|
||||
}
|
||||
else if (in == "QUANTITA")
|
||||
{
|
||||
real r = app().rigabolla().quantita();
|
||||
valore = r.string(7,2);
|
||||
valore.strip(".");
|
||||
}
|
||||
else if (in == "OMAGGIO")
|
||||
{
|
||||
if (app().rigabolla().is_omaggio())
|
||||
valore = "6";
|
||||
else
|
||||
valore = "1";
|
||||
}
|
||||
}
|
||||
else NFCHECK("Macro non definita: %s", (const char *)code);
|
||||
|
||||
str = valore;
|
||||
}
|
||||
|
||||
bool TBolle2Conad::create()
|
||||
{
|
||||
open_files(LF_DOC, LF_RIGHEDOC, LF_CLIFO, LF_CFVEN, LF_ANAMAG, 0);
|
||||
_msk = new TBolle2Conad_mask();
|
||||
_trasfile = NULL;
|
||||
_elencobolle = new TAssoc_array();
|
||||
|
||||
return TSkeleton_application::create();
|
||||
}
|
||||
|
||||
bool TBolle2Conad::destroy()
|
||||
{
|
||||
delete _elencobolle;
|
||||
if (_trasfile)
|
||||
delete _trasfile;
|
||||
delete _msk;
|
||||
|
||||
return TSkeleton_application::destroy();
|
||||
}
|
||||
|
||||
void TBolle2Conad::main_loop()
|
||||
{
|
||||
TConfig config("ve7400a.ini", "TRASFERIMENTO");
|
||||
_codconad = config.get_long("CONAD");
|
||||
_codforn = config.get("FORNITORE");
|
||||
TFilename filename = config.get("NOMEFILE");
|
||||
if (filename.exist())
|
||||
remove(filename);
|
||||
while (_msk->run()!=K_QUIT)
|
||||
{
|
||||
_elencobolle->destroy();
|
||||
_progressivo = 0;
|
||||
_trasfile = new TFilConad(filename, "filconad.ini");
|
||||
_trasfile->open(filename,'w');
|
||||
_trasfile->force_record_separator(TRUE);
|
||||
|
||||
_dataini = _msk->get_date(F_DATAINI);
|
||||
_datafin = _msk->get_date(F_DATAFIN);
|
||||
elabora_documenti();
|
||||
_trasfile->close();
|
||||
delete _trasfile;
|
||||
_trasfile = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
void TBolle2Conad::elabora_documenti()
|
||||
{
|
||||
TSheet_field& sheet = _msk->sfield(F_SHEETDOC);
|
||||
|
||||
TRelation doc_rel(LF_DOC);
|
||||
doc_rel.add(LF_RIGHEDOC, "CODNUM==CODNUM|ANNO==ANNO|PROVV==PROVV|NDOC==NDOC");
|
||||
TRectype da(LF_DOC);
|
||||
TRectype a(LF_DOC);
|
||||
const long items = sheet.items();
|
||||
if (items > 0)
|
||||
{
|
||||
bool ok = TRUE;
|
||||
TString16 codnum;
|
||||
TString filt_expr;
|
||||
|
||||
da.put("TIPOCF", "C");
|
||||
da.put("CODCF", _codconad);
|
||||
da.put("PROVV", "D");
|
||||
da.put("ANNO", _dataini.year());
|
||||
da.put("DATADOC", _dataini);
|
||||
|
||||
a.put("TIPOCF", "C");
|
||||
a.put("CODCF", _codconad);
|
||||
a.put("PROVV", "D");
|
||||
a.put("ANNO", _datafin.year());
|
||||
a.put("DATADOC", _datafin);
|
||||
|
||||
filt_expr << "(";
|
||||
FOR_EACH_SHEET_ROW(sheet, r, row)
|
||||
{
|
||||
codnum = row->get(0);
|
||||
if (codnum.not_empty())
|
||||
{
|
||||
filt_expr << "(CODNUM==\"";
|
||||
filt_expr << codnum << "\")||";
|
||||
}
|
||||
}
|
||||
filt_expr.rtrim(2);
|
||||
filt_expr << ")";
|
||||
|
||||
_cur = new TCursor(&doc_rel,filt_expr,2,&da,&a);
|
||||
const long cur_items = _cur ->items(); // Scorre tutti i documenti che rientrano nell'intervallo selezionato
|
||||
if (cur_items != 0)
|
||||
{
|
||||
_cur->freeze();
|
||||
TRectype& cur_rec = _cur->curr();
|
||||
for (*_cur = 0; _cur->pos() < cur_items; ++(*_cur))
|
||||
elabora_righe_doc();
|
||||
}
|
||||
delete _cur;
|
||||
}
|
||||
}
|
||||
|
||||
void TBolle2Conad::elabora_righe_doc()
|
||||
{
|
||||
|
||||
_fattura = new TDocumento(_cur->curr());
|
||||
for (int i=1;i<=_fattura->rows();i++)
|
||||
{
|
||||
const TRiga_documento& riga = (*_fattura)[i];
|
||||
const TString16 dacodnum = riga.get("DACODNUM");
|
||||
const int daanno = riga.get_int("DAANNO");
|
||||
const char daprovv = riga.get("DAPROVV")[0];
|
||||
const long dandoc = riga.get_long("DANDOC");
|
||||
if (dacodnum.not_empty() && daanno != 0 && daprovv != ' ' && dandoc != 0)
|
||||
{
|
||||
TString codicebolla = "";
|
||||
codicebolla << daprovv;
|
||||
codicebolla << daanno;
|
||||
codicebolla << dacodnum;
|
||||
codicebolla << dandoc;
|
||||
if (!_elencobolle->is_key((const char*) codicebolla))
|
||||
{
|
||||
_elencobolle->add((const char*) codicebolla);
|
||||
_bolla = new TDocumento(daprovv, daanno, dacodnum, dandoc);
|
||||
elabora_doc_originale(*_bolla);
|
||||
delete _bolla;
|
||||
}
|
||||
}
|
||||
}
|
||||
delete _fattura;
|
||||
}
|
||||
|
||||
void TBolle2Conad::elabora_doc_originale(const TDocumento& documento)
|
||||
{
|
||||
TRelation bol_rel(LF_DOC);
|
||||
bol_rel.add(LF_RIGHEDOC, "CODNUM==CODNUM|ANNO==ANNO|PROVV==PROVV|NDOC==NDOC");
|
||||
bol_rel.add(LF_ANAMAG, "CODART==CODART", 1, LF_RIGHEDOC);
|
||||
bol_rel.add(LF_INDSP, "TIPOCF==TIPOCF|CODCF==CODCF|CODIND==CODINDSP", 1, LF_DOC);
|
||||
|
||||
TRectype da(documento.head());
|
||||
TCursor bol_cur(&bol_rel, "", 2, &da, &da);
|
||||
bol_cur = 0;
|
||||
_progressivo++;
|
||||
// scrivo il record 01 testata bolla
|
||||
TRecord_text rec;
|
||||
rec.set_type("01");
|
||||
_trasfile->autoload(rec, bol_cur);
|
||||
_trasfile->write(rec);
|
||||
// scrivo i record 02 righe bolla
|
||||
for (int i=1;i<=documento.rows();i++)
|
||||
{
|
||||
_rigabolla = new TRiga_documento(documento[i]);
|
||||
rec.set_type("02");
|
||||
_trasfile->autoload(rec, bol_cur);
|
||||
_trasfile->write(rec);
|
||||
delete _rigabolla;
|
||||
bol_cur.next_match(LF_RIGHEDOC);
|
||||
}
|
||||
}
|
||||
|
||||
int ve7400(int argc, char **argv)
|
||||
{
|
||||
TBolle2Conad a;
|
||||
a.run(argc, argv, "Trasferimento bolle CONAD");
|
||||
return 0;
|
||||
}
|
||||
|
10
ve/ve7400a.h
Executable file
10
ve/ve7400a.h
Executable file
@ -0,0 +1,10 @@
|
||||
#define F_CODDITTA 101
|
||||
#define F_RAGSOC 102
|
||||
#define F_DATAINI 103
|
||||
#define F_DATAFIN 104
|
||||
#define F_SHEETDOC 105
|
||||
// campi dello sheet
|
||||
#define F_S_CODNUM 101
|
||||
#define F_S_DESNUM 102
|
||||
//#define F_S_TIPODOC 103
|
||||
//#define F_S_DESTIPO 104
|
149
ve/ve7400a.uml
Executable file
149
ve/ve7400a.uml
Executable file
@ -0,0 +1,149 @@
|
||||
#include "ve7400a.h"
|
||||
|
||||
TOOLBAR "" 0 -5 0 4
|
||||
|
||||
STRING 30 70 50
|
||||
BEGIN
|
||||
FLAGS "G"
|
||||
PROMPT 10 -5 "Profilo "
|
||||
PSELECT
|
||||
END
|
||||
|
||||
BUTTON DLG_OK 10 2
|
||||
BEGIN
|
||||
PROMPT -12 -11 ""
|
||||
END
|
||||
|
||||
BUTTON DLG_QUIT 10 2
|
||||
BEGIN
|
||||
PROMPT -22 -11 ""
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Trasferimento bolle CONAD" -1 -1 78 18
|
||||
|
||||
GROUPBOX DLG_NULL 78 3
|
||||
BEGIN
|
||||
PROMPT 1 0 "@bDitta"
|
||||
END
|
||||
|
||||
NUMBER F_CODDITTA 5
|
||||
BEGIN
|
||||
PROMPT 2 1 "Codice "
|
||||
FLAGS "GDF"
|
||||
USE LF_NDITTE
|
||||
INPUT CODDITTA F_CODDITTA
|
||||
OUTPUT F_RAGSOC RAGSOC
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
STRING F_RAGSOC 50
|
||||
BEGIN
|
||||
PROMPT 17 1 "Rag.Soc. "
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
GROUPBOX DLG_NULL 78 3
|
||||
BEGIN
|
||||
PROMPT 1 3 "@bParametri"
|
||||
END
|
||||
|
||||
DATE F_DATAINI
|
||||
BEGIN
|
||||
PROMPT 2 4 "Fatture dal "
|
||||
HELP "Data di inizio per trasferimento documenti"
|
||||
CHECKTYPE REQUIRED
|
||||
WARNING "Data dal non valida"
|
||||
FLAGS "A"
|
||||
END
|
||||
|
||||
DATE F_DATAFIN
|
||||
BEGIN
|
||||
PROMPT 30 4 "al "
|
||||
HELP "Data di fine per trasferimento documenti"
|
||||
CHECKTYPE REQUIRED
|
||||
VALIDATE DATE_CMP_FUNC >= F_DATAINI
|
||||
WARNING "Data di fine scadenza non valida"
|
||||
END
|
||||
|
||||
SPREADSHEET F_SHEETDOC 78 10
|
||||
BEGIN
|
||||
PROMPT 1 6 "Scelta documenti"
|
||||
ITEM "Cod. num."
|
||||
ITEM "Descrizione num.@50"
|
||||
//ITEM "Tipo doc."
|
||||
//ITEM "Descrizione tipo@45"
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
ENDMASK
|
||||
|
||||
PAGE "Scelta documenti" -1 -1 75 10
|
||||
|
||||
STRING F_S_CODNUM 4
|
||||
BEGIN
|
||||
PROMPT 2 1 "Cod. num. "
|
||||
FLAGS "U"
|
||||
USE %NUM
|
||||
INPUT CODTAB F_S_CODNUM
|
||||
DISPLAY "Cod. Num." CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT F_S_CODNUM CODTAB
|
||||
OUTPUT F_S_DESNUM S0
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
STRING F_S_DESNUM 50
|
||||
BEGIN
|
||||
PROMPT 20 1 ""
|
||||
HELP "Descrizione numerazione"
|
||||
USE %NUM KEY 2
|
||||
INPUT S0 F_S_DESNUM
|
||||
DISPLAY "Descrizione@50" S0
|
||||
DISPLAY "Codice" CODTAB
|
||||
COPY OUTPUT F_S_CODNUM
|
||||
END
|
||||
|
||||
//STRING F_S_TIPODOC 4
|
||||
//BEGIN
|
||||
// PROMPT 2 2 "Tipo doc. "
|
||||
// HELP "Codice tipo documento"
|
||||
// USE %TIP
|
||||
// INPUT CODTAB F_S_TIPODOC
|
||||
// DISPLAY "Codice" CODTAB
|
||||
// DISPLAY "Descrizione@50" S0
|
||||
// OUTPUT F_S_TIPODOC CODTAB
|
||||
// OUTPUT F_S_DESTIPO S0
|
||||
// CHECKTYPE REQUIRED
|
||||
// FLAG "UP"
|
||||
//END
|
||||
|
||||
//STRING F_S_DESTIPO 50
|
||||
//BEGIN
|
||||
// PROMPT 20 2 ""
|
||||
// HELP "Descrizione tipo documento"
|
||||
// USE %TIP KEY 2
|
||||
// INPUT S0 F_S_DESTIPO
|
||||
// DISPLAY "Descrizione@50" S0
|
||||
// DISPLAY "Codice" CODTAB
|
||||
// COPY OUTPUT F_S_TIPODOC
|
||||
//END
|
||||
|
||||
BUTTON DLG_OK 9 2
|
||||
BEGIN
|
||||
PROMPT -13 -1 ""
|
||||
END
|
||||
|
||||
BUTTON DLG_DELREC 9 2
|
||||
BEGIN
|
||||
PROMPT -23 -1 ""
|
||||
END
|
||||
|
||||
BUTTON DLG_CANCEL 9 2
|
||||
BEGIN
|
||||
PROMPT -33 -1 ""
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
ENDMASK
|
@ -91,8 +91,12 @@ TRiepilogo_iva& TRiepilogo_iva::copy(const TRiepilogo_iva& a)
|
||||
(TRectype &) _codiva = (TRectype &) a._codiva;
|
||||
_imp = a._imp;
|
||||
_imp_spese = a._imp_spese;
|
||||
_imp_spese_row = a._imp_spese_row;
|
||||
_iva = a._iva;
|
||||
_iva_spese = a._iva_spese;
|
||||
_sconto_perc = a._sconto_perc;
|
||||
_sconto_imp = a._sconto_imp;
|
||||
_iva_sconto = a._iva_sconto;
|
||||
_tipo = a._tipo;
|
||||
return *this;
|
||||
}
|
||||
|
@ -1904,7 +1904,7 @@ error_type TContabilizzazione::add_spese_inbo(TDocumento& doc, const int ndec)
|
||||
// Aggiorna le righe di sconto (importo o a percentuale)
|
||||
error_type TContabilizzazione::adjust_sconto_rows(TDocumento& doc)
|
||||
{
|
||||
TAssoc_array& aa = doc.tabella_iva();
|
||||
TAssoc_array aa(doc.tabella_iva()); // no reference
|
||||
TRiepilogo_iva * riep;
|
||||
TString16 cod; // Codice IVA corrente
|
||||
real sconto;
|
||||
@ -1930,7 +1930,7 @@ error_type TContabilizzazione::adjust_sconto_rows(TDocumento& doc)
|
||||
TBill& conto = perc ? _sco_perc_bill : _sco_imp_bill;
|
||||
sconto = perc ? -riep->sconto_perc() : -riep->sconto_imp();
|
||||
if (sconto != ZERO)
|
||||
{
|
||||
{
|
||||
TRiga_documento r(&doc, "07"); // il tipo riga 02 spese a valore
|
||||
r.put(RDOC_QTA, "1.00");
|
||||
r.put(RDOC_PREZZO, sconto);
|
||||
|
Loading…
x
Reference in New Issue
Block a user