modifiche varie ai programmi del modulo

git-svn-id: svn://10.65.10.50/trunk@4137 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
paola 1997-02-18 15:10:08 +00:00
parent 356e0b6f12
commit 0b6a298ced
31 changed files with 1084 additions and 972 deletions

View File

@ -1,8 +1,14 @@
// DEFINIZIONE CAMPI MASCHERA PER STAMPA TABELLA BANCHE DI PRESENTAZIONE
#ifndef __BASTBNP_H
#define __BASTBNP_H
#define F_INIZIO1 101
#define F_INIZIO2 102
#define F_FINE1 201
#define F_FINE2 202
#endif //__BASTBNP_H

View File

@ -1,6 +1,7 @@
//DEFINIZIONE MASCHERA PER STAMPA TABELLA BANCHE DI PRESENTAZIONE
#include "bastbnp.h"
PAGE "Stampa banche presentazione" -1 -1 56 8
PAGE "Stampa Tabella Banche Presentazione" -1 -1 56 8
STRING F_INIZIO1 5
BEGIN

View File

@ -1,3 +1,7 @@
//DEFINIZIONE CAMPI MASCHERA GESTIONE TABELLA BANCHE DI PRESENTAZIONE
#ifndef __BATBBNP_H
#define __BATBBNP_H
#define F_CODICEABI 101
#define F_CODICECAB 102
#define F_ABI 103
@ -14,3 +18,5 @@
#define F_FIDO_SCN 114
#define F_CC_CONT_SCN 115
#define B_PRINT 116
#endif//__BATBBNP_H

View File

@ -1,19 +1,20 @@
//DEFINIZIONE MASCHERA GESTIONE TABELLA BANCHE DI PRESENTAZIONE
#include "batbbnp.h"
TOOLBAR "" 0 20 0 2
TOOLBAR "" 0 19 0 2
#include <toolbar.h>
ENDPAGE
PAGE "Tabella banche di presentazione" -1 -1 77 20
PAGE "Gestione Tabella Banche di Presentazione" 0 -1 77 19
GROUPBOX DLG_NULL 78 4
BEGIN
PROMPT 1 1 " "
PROMPT 1 0 " "
END
NUMBER F_CODICEABI 5
BEGIN
PROMPT 2 2 "Codice ABI "
PROMPT 2 1 "Codice ABI "
FIELD BNP->CODTAB[1,5]
FLAGS "Z"
KEY 1
@ -28,7 +29,7 @@ END
NUMBER F_CODICECAB 5
BEGIN
PROMPT 2 3 "Codice CAB "
PROMPT 2 2 "Codice CAB "
FIELD BNP->CODTAB[6,10]
FLAGS "Z"
KEY 1
@ -46,7 +47,7 @@ END
NUMBER F_ABI 5
BEGIN
PROMPT 2 2 "Codice ABI "
PROMPT 2 1 "Codice ABI "
FLAGS "Z"
FIELD BNP->CODTAB[1,5]
KEY 1
@ -63,7 +64,7 @@ END
NUMBER F_CAB 5
BEGIN
PROMPT 2 3 "Codice CAB "
PROMPT 2 2 "Codice CAB "
FLAGS "Z"
FIELD BNP->CODTAB[6,10]
KEY 1
@ -83,99 +84,94 @@ END
STRING F_ISTIT 50
BEGIN
PROMPT 26 2 ""
PROMPT 26 1 ""
FLAG "D"
END
STRING F_DENOM 50
BEGIN
PROMPT 26 3 ""
PROMPT 26 2 ""
FLAG "D"
END
GROUPBOX DLG_NULL 78 4
BEGIN
PROMPT 1 6 "Portafoglio effetti all' incasso"
PROMPT 1 4 "Portafoglio effetti all' incasso"
END
STRING F_CC_INC 20
BEGIN
PROMPT 2 7 "C/C "
PROMPT 2 5 "C/C "
FIELD BNP->S0
END
NUMBER F_FIDO_INC 20 2
BEGIN
PROMPT 45 7 "Fido "
PROMPT 45 5 "Fido "
FIELD BNP->R0
PICTURE "###.###.###.###,@@"
END
STRING F_CC_CONT_INC 20
BEGIN
PROMPT 2 8 "C/Contabile "
PROMPT 2 6 "C/Contabile "
FIELD BNP->S3
END
GROUPBOX DLG_NULL 78 4
BEGIN
PROMPT 1 10 "Portafoglio effetti salvo buon fine"
PROMPT 1 8 "Portafoglio effetti salvo buon fine"
END
STRING F_CC_SBF 20
BEGIN
PROMPT 2 11 "C/C "
PROMPT 2 9 "C/C "
FIELD BNP->S1
END
NUMBER F_FIDO_SBF 20 2
BEGIN
PROMPT 45 11 "Fido "
PROMPT 45 9 "Fido "
FIELD BNP->R1
PICTURE "###.###.###.###,@@"
END
STRING F_CC_CONT_SBF 20
BEGIN
PROMPT 2 12 "C/Contabile "
PROMPT 2 10 "C/Contabile "
FIELD BNP->S4
END
GROUPBOX DLG_NULL 78 4
BEGIN
PROMPT 1 14 "Portafoglio effetti allo sconto"
PROMPT 1 12 "Portafoglio effetti allo sconto"
END
STRING F_CC_SCN 20
BEGIN
PROMPT 2 15 "C/C "
PROMPT 2 13 "C/C "
FIELD BNP->S2
END
NUMBER F_FIDO_SCN 20 2
BEGIN
PROMPT 45 15 "Fido "
PROMPT 45 13 "Fido "
FIELD BNP->R2
PICTURE "###.###.###.###,@@"
END
STRING F_CC_CONT_SCN 20
BEGIN
PROMPT 2 16 "C/Contabile "
PROMPT 2 14 "C/Contabile "
FIELD BNP->S5
END
GROUPBOX DLG_NULL 15 4
BEGIN
PROMPT 1 18 " "
GROUP 1
FLAG "H"
END
BUTTON B_PRINT 10 2
BEGIN
PROMPT 2 19 "~Stampa"
PROMPT -11 -1 "~Stampa"
MESSAGE EXIT,K_SPACE
PICTURE BMP_PRINT
PICTURE BMP_PRINT
GROUP 1
END
ENDPAGE

View File

@ -1,3 +1,4 @@
//PROGRAMMA PRINCIPALE APPLICAZIONE "GESTIONE EFFETTI"
#include <xvt.h>
#include <checks.h>
#include "ef0.h"

View File

@ -8,10 +8,10 @@
#include "ef0100.h"
#include "ef0101.h"
/////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
// Classe per la gestione di effetti con metodi standard di: //
// inserimento, modifica, cancellazione. //
////////////////////////////////////////////////////////////////////////////////////
// inserimento, modifica, cancellazione. //
///////////////////////////////////////////////////////////////
class TVariazione_effetti: public TRelation_application
{
@ -47,16 +47,17 @@ public:
// restituisce un riferimento all' applicazione
inline TVariazione_effetti& app() {return (TVariazione_effetti&)main_app();}
// quando si va in query mode resetta i due campi della maschera relativi ai totali
// quando si va in query mode resetta i due campi della maschera
// relativi ai totali
void TVariazione_effetti::init_query_mode(TMask&)
{
_msk->reset(F_TOTIMP);
_msk->reset(F_TOTIMPVAL);
}
// quando si va in insert mode resetta i due campi della maschera relativi ai totali,
// inserisce una riga vuota nello sheet e setta il flag dirty dello sheet
// per forzare l'utente all'inserimento di una riga
// quando si va in insert mode resetta i due campi della maschera relativi
// ai totali, inserisce una riga vuota nello sheet e setta il flag dirty
// dello sheet per forzare l'utente all'inserimento di una riga
void TVariazione_effetti::init_insert_mode(TMask&)
{
_msk->reset(F_TOTIMP);
@ -161,7 +162,8 @@ int TVariazione_effetti::read(TMask& m)
int err = _rel->status();
if (err == NOERR)
{
err = _effetto->read(f, _rel->curr()); // legge l'effetto dal record corrente della relazione
// legge l'effetto dal record corrente della relazione
err = _effetto->read(f, _rel->curr());
if (err == NOERR)
{
TString16 codcom(3);
@ -179,13 +181,14 @@ int TVariazione_effetti::read(TMask& m)
riga.add(rec.get(CES_RAGSOC));
riga.add(rec.get(CES_LOCALITA));
riga.add(rec.get(CES_STATO));
codcom = rec.get(CES_COM);//per caricare nello sheet dei cessionari la denominazione
riga.add(codcom); //del comune di cui si conosce il codice
// per caricare nello sheet dei cessionari la denominazione
// del comune di cui si conosce il codice
codcom = rec.get(CES_COM);
riga.add(codcom);
_com->zero();
_com->put(COM_COM, codcom);
if (_com->read() == NOERR) riga.add(_com->get(COM_DENCOM));
if (_com->read() == NOERR)
riga.add(_com->get(COM_DENCOM));
shcess.row(i-1)=riga;
}
items = _effetto->rows_r();
@ -265,14 +268,15 @@ bool TVariazione_effetti::user_destroy()
return TRUE;
}
// handler che permette di effettuare il controllo sul fatto che venga inserita
// almeno una riga per un effetto
// handler che permette di effettuare il controllo sul fatto
// che venga inserita almeno una riga per un effetto
bool TVariazione_effetti::handle_sheet(TMask_field &f, KEY k)
{
TMask& m = f.mask();
const int mode = m.mode();
if ( k == K_ENTER && (mode == MODE_INS || mode == MODE_MOD) ) // se si vuole salvare e si è in uno dei due modi di funzionamento
{ // si controllano le righe del effetto nello sheet
// se si vuole salvare e si è in uno dei due modi di funzionamento
if ( k == K_ENTER && (mode == MODE_INS || mode == MODE_MOD) )
{ // si controllano le righe del effetto nello sheet
TSheet_field& sf = (TSheet_field&)m.field(F_SHEET_RIGHE);
int items = sf.items();
bool found = FALSE;
@ -280,10 +284,13 @@ bool TVariazione_effetti::handle_sheet(TMask_field &f, KEY k)
{
TToken_string& row = sf.row(i);
real imp_eff(row.get(1));
if (imp_eff != 0.0) found = TRUE;// controlla che le righe abbiano un importo
// controlla che le righe abbiano un importo
if (imp_eff != 0.0) found = TRUE;
}
if (!found)// se non ha trovato righe nello sheet oppure se quelle che ci sono non hanno importo
{ // non permetto di salvare l'effetto
// se non ha trovato righe nello sheet oppure se quelle che ci sono non
// hanno importo
if (!found)
{ // non permetto di salvare l'effetto
error_box("L'effetto non può contenere righe con importo nullo!");
return FALSE;
}
@ -299,8 +306,9 @@ bool TVariazione_effetti::codval_handler(TMask_field& f, KEY k)
TString val(f.get());
if (f.to_check(k, TRUE))
{
const bool condition = (val == "LIT" || val.empty());// se non c'e valuta o se è lire
m.enable(-1,!condition); // disabilito i campi collegati
// se non c'e valuta o se è lire disabilito i campi collegati
const bool condition = (val == "LIT" || val.empty());
m.enable(-1,!condition);
TSheet_field& sf = (TSheet_field&)m.field(F_SHEET_RIGHE);
if (condition)
{
@ -321,16 +329,18 @@ bool TVariazione_effetti::codval_handler(TMask_field& f, KEY k)
return TRUE;
}
// funzione chiamata dal notify dello sheet per effettuare il calcolo degli importi totali
// (in lire ed in valuta) dell'effetto
// funzione chiamata dal notify dello sheet per effettuare il calcolo degli
// importi totali (in lire ed in valuta) dell'effetto
void TVariazione_effetti::calcola_totali()
{
TMask* m = app()._msk;
TSheet_field& sf = (TSheet_field&)m->field(F_SHEET_RIGHE);
int items = sf.items();
real imp, impval, impeff, impeffval;
for (int i = 0; i < items; i++)// scandisco tutte le righe dello sheet e ne prendo gli importi
{ // (in lire ed in valuta) e li sommo al totale
// scandisco tutte le righe dello sheet e ne prendo gli importi
// (in lire ed in valuta) e li sommo al totale
for (int i = 0; i < items; i++)
{
TToken_string& row = sf.row(i);
imp = row.get(1);
impeff += imp;
@ -341,12 +351,13 @@ void TVariazione_effetti::calcola_totali()
m->set(F_TOTIMPVAL, impeffval);
}
// notify per il calcolo dei totali dell'effetto e per il controllo che non vengano eliminate
// tutte le righe dell'effetto, almeno una deve rimanere
// notify per il calcolo dei totali dell'effetto e per il controllo che non
// vengano eliminate tutte le righe dell'effetto, almeno una deve rimanere
bool TVariazione_effetti::impeff_notify(TSheet_field& s, int r, KEY key)
{
if (s.to_check(key, TRUE)) calcola_totali();
if (key == K_DEL && s.items() == 1)//se rimane una sola riga nello sheet non la si può cancellare
//se rimane una sola riga nello sheet non la si può cancellare
if (key == K_DEL && s.items() == 1)
{
error_box("IMPOSSIBILE CANCELLARE: L'effetto deve contenere almeno una riga!");
return FALSE;
@ -357,6 +368,6 @@ bool TVariazione_effetti::impeff_notify(TSheet_field& s, int r, KEY key)
int ef0100(int argc, char* argv[])
{
TVariazione_effetti a ;
a.run(argc, argv, "Gestione Effetti");
a.run(argc, argv, "Variazione Effetti");
return 0;
}

View File

@ -1,6 +1,7 @@
#ifndef __EF0100_H
#define __EF0100_H
#define __EF0100_H
// DEFINIZIONE CAMPI MASCHERE PER LA GESTIONE EFFETTI
// campi maschera ef0100a.uml
#define F_NPROGTR 101
@ -33,13 +34,15 @@
#define F_EFFCONT 128
#define F_EFFCOMP 129
#define F_SHEET_EFF 130
// campi maschera ef0100b.uml
// Identificatori campi per lo spreadsheet dei Cessionari
#define F_RAGSOC 101
#define F_LOCALITA 102
#define F_STATO 103
#define F_COM 104
#define F_DENCOM 105
// campi maschera ef0100c.uml
// Identificatori campi per lo spreadsheet delle Righe Effetto
#define F_IMPFATT 101
#define F_IMPEFF 102
#define F_IMPFATTVAL 103

View File

@ -1,21 +1,22 @@
// DEFINIZIONE CAMPI MASCHERA PRINCIPALE PER LA GESTIONE EFFETTI
#include "ef0100.h"
TOOLBAR "" 0 20 0 2
TOOLBAR "" 0 19 0 2
#include <toolbar.h>
ENDPAGE
PAGE "Gestione Effetti 1/3" 0 -1 0 19
PAGE "Testata/Righe" 0 -1 0 19
GROUPBOX DLG_NULL 78 5
BEGIN
PROMPT 1 1 ""
PROMPT 1 0 ""
END
NUMBER F_NPROGTR 7
BEGIN
PROMPT 2 2 "Numero "
BEGIN
PROMPT 2 1 "Numero "
FIELD LF_EFFETTI->NPROGTR
FLAGS "R"
KEY 1
@ -37,7 +38,7 @@ END
NUMBER F_CODCF 6
BEGIN
PROMPT 2 3 "Cliente "
PROMPT 2 2 "Cliente "
FIELD LF_EFFETTI->CODCF
USE LF_CLIFO
INPUT TIPOCF "C"
@ -51,7 +52,7 @@ END
STRING F_CFRAGSOC 50
BEGIN
PROMPT 26 3 ""
PROMPT 26 2 ""
USE LF_CLIFO KEY 2
INPUT TIPOCF "C"
INPUT RAGSOC F_CFRAGSOC
@ -63,7 +64,7 @@ END
DATE F_DATASCAD
BEGIN
PROMPT 2 4 "Data scadenza "
PROMPT 2 3 "Data scadenza "
FIELD LF_EFFETTI->DATASCAD
KEY 3
USE LF_EFFETTI KEY 3
@ -81,7 +82,7 @@ END
LIST F_TIPOPAG 24
BEGIN
PROMPT 2 6 "Tipo pagamento "
PROMPT 2 5 "Tipo pagamento "
FIELD LF_EFFETTI->TIPOPAG
ITEM "2|Tratta"
ITEM "3|Ricevuta Bancaria"
@ -95,7 +96,7 @@ END
STRING F_ULTCLASS 1
BEGIN
PROMPT 46 6 "Ulteriore classificazione "
PROMPT 46 5 "Ulteriore classificazione "
FIELD LF_EFFETTI->ULTCLASS
USE %CLR
INPUT CODTAB[1,1] F_TIPOPAG SELECT
@ -107,7 +108,7 @@ END
STRING F_CODVAL 3
BEGIN
PROMPT 2 7 "Codice valuta "
PROMPT 2 6 "Codice valuta "
FIELD LF_EFFETTI->CODVAL
FLAGS "UZ"
USE %VAL
@ -120,7 +121,7 @@ END
DATA F_DATACAM
BEGIN
PROMPT 46 7 "Data cambio "
PROMPT 46 6 "Data cambio "
FIELD LF_EFFETTI->DATACAMBIO
FLAGS "R"
USE CAM
@ -137,7 +138,7 @@ END
NUMBER F_CAMBIO 15 5
BEGIN
PROMPT 2 8 "Cambio "
PROMPT 2 7 "Cambio "
FIELD LF_EFFETTI->CAMBIO
FLAGS "RU"
PICTURE ".5"
@ -148,13 +149,13 @@ END
BOOLEAN F_ULTRATA
BEGIN
PROMPT 46 8 "Ultima rata"
PROMPT 46 7 "Ultima rata"
FIELD LF_EFFETTI->ULTRATA
END
SPREADSHEET F_SHEET_RIGHE 76 7
BEGIN
PROMPT 2 10 "RIGHE EFFETTO"
PROMPT 2 9 "RIGHE EFFETTO"
ITEM "Importo fatt.@20"
ITEM "Importo effet.@14"
ITEM "Imp.fatt.val.@20"
@ -169,7 +170,7 @@ END
NUMBER F_TOTIMP 18 2
BEGIN
PROMPT 2 18 "Totale importi "
PROMPT 2 17 "Totale importi "
FIELD LF_EFFETTI->IMPORTO
PICTURE "###.###.###.###,@@"
FLAG "D"
@ -177,7 +178,7 @@ END
NUMBER F_TOTIMPVAL 18 3
BEGIN
PROMPT 2 19 "Totale importi in valuta "
PROMPT 2 18 "Totale importi in valuta "
FIELD LF_EFFETTI->IMPORTOVAL
PICTURE "###.###.###.###,@@@"
FLAG "D"
@ -186,7 +187,7 @@ END
ENDPAGE
PAGE "Gestione Effetti 2/3" 0 -1 0 19
PAGE "Parametri" 0 -1 0 19
GROUPBOX DLG_NULL 38 4
BEGIN
@ -371,12 +372,7 @@ END
ENDPAGE
PAGE "Gestione Effetti 3/3" 0 -1 0 19
TEXT DLG_NULL
BEGIN
PROMPT 3 1 "OBBLIGATI PRINCIPALI"
END
PAGE "Cessionari" 0 -1 0 19
SPREADSHEET F_SHEET_EFF 76 8
BEGIN

View File

@ -1,3 +1,4 @@
// DEFINIZIONE MASCHERA, DELLO SHEET DEI CESSIONARI, PER LA GESTIONE EFFETTI
#include "ef0100.h"
PAGE "Obbligati principali" -1 -1 76 12
@ -16,7 +17,7 @@ END
NUMBER F_STATO 3
BEGIN
PROMPT 60 4 "Stato "
PROMPT 63 4 "Stato "
FLAGS "RZ"
USE %STA
INPUT CODTAB F_STATO
@ -28,7 +29,7 @@ BEGIN
HELP "Inserire lo stato in cui risiede l'obbligato"
END
STRING F_COM 4
STRING F_COM 4
BEGIN
PROMPT 2 6 "Comune "
FLAGS "U"

View File

@ -1,3 +1,4 @@
// DEFINIZIONE MASCHERA, DELLO SHEET DELLE RIGHE EFFETTO, PER LA GESTIONE EFFETTI
#include "ef0100.h"
PAGE "Righe Effetto" -1 -1 76 13

View File

@ -1,8 +1,8 @@
#include "ef0101.h"
/////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////
// Definizione dei metodi della classe TEffetto //
////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////
// costruttore di default
TEffetto::TEffetto()
@ -18,14 +18,14 @@ TEffetto::TEffetto(TRectype& rec)
read(f,rec);
}
// setta i campi per la prima chiave (nprogtr) del file degli effetti
// setta i campi per la prima chiave (nprogtr)
void TEffetto::put_key(TRectype& rec, long numeff) const
{
CHECKD(numeff >= 0, "Numero effetto non valido ", numeff);
rec.put(EFF_NPROGTR, numeff);
}
// setta i campi per la quarta chiave (tipodist+ndist+nrigadist) del file degli effetti
// setta i campi per la quarta chiave (tipodist+ndist+nrigadist)
void TEffetto::put_key(TRectype& rec,char tipodist, long ndist, long nrigadist)
{
CHECK(tipodist == 'I' || tipodist == 'S' || tipodist == 'B' || tipodist == 0, "Tipo distinta");
@ -36,7 +36,7 @@ void TEffetto::put_key(TRectype& rec,char tipodist, long ndist, long nrigadist)
rec.put(EFF_NRIGADIST, nrigadist);
}
// ritorna la prossima chiave utilizzabile (il prossimo numero progressivo)
// ritorna la prossima chiave utilizzabile
long TEffetto::get_next_key(const long codcf) const
{
static long n = 0;
@ -81,17 +81,21 @@ int TEffetto::next(TBaseisamfile& f)
return err;
}
// permette di leggere il record passato nel file passato, comune alla lettura per chiave 1 e per chiave 4
// permette di leggere il record passato nel file passato, comune alla
// lettura per chiave 1 e per chiave 4
int TEffetto::leggi(TLocalisamfile &f, const TRectype& r)
{
int err = TRectype::read(f);
const long nu = numero();
TRectype *k_reff = new TRectype(LF_REFFETTI),// necessari per poter andare a leggere i due record array
*k_cess = new TRectype(LF_CESS); // cessionari e righe effetto
put_key(*k_reff, nu); // setto la chiave per poter leggere dai due
put_key(*k_cess, nu); // record array
// necessari per poter andare a leggere i due record array
// cessionari e righe effetto
TRectype *k_reff = new TRectype(LF_REFFETTI),
*k_cess = new TRectype(LF_CESS);
// setto la chiave per poter leggere dai due record array
put_key(*k_reff, nu);
put_key(*k_cess, nu);
if (err == NOERR)
{ // leggo dai record array
{ // leggo dai record array
_righe.read(k_reff);
_cess.read(k_cess);
}
@ -132,10 +136,10 @@ int TEffetto::read(TLocalisamfile& f, char tipodist, long ndist, long nrigadist)
// scrive l'effetto, usando la chiave 1
int TEffetto::write(TLocalisamfile& f, bool force)
{
const bool nuovo = numero() <= 0; // E' nuovo!
if (nuovo && force) // quindi ...
force = FALSE; // ... non fare la rewrite
f.setkey(1); // per evitare problemi in quanto la chiave 4 e' duplicabile
const bool nuovo = numero() <= 0; // E' nuovo!
if (nuovo && force) // quindi ...
force = FALSE; // ... non fare la rewrite
f.setkey(1);
int err = NOERR;
if (force)
{
@ -190,10 +194,10 @@ bool TEffetto::fatt(long num)
TLocalisamfile righe_eff(LF_REFFETTI);
righe_eff.put(REFF_NPROGTR, num);
righe_eff.read();
TString16 n = righe_eff.get(REFF_NFATT);// prende il numero fattura della prima riga
int items = rows_r(); // prende il numero delle righe dell'effetto
bool condition = (items == 1); // se la fattura ha una sola riga farà riferimento ad una sola fattura
// se invece ha più righe sarà raggruppato
// prende il numero delle righe dell'effetto
// ovvero di fatture a cui fa riferimento
int items = rows_r();
bool condition = (items == 1);
return condition;
}
@ -214,7 +218,7 @@ TToken_string* TEffetto::dati_fatt(long num)
dati->add(righe_eff.get(REFF_NFATT));//prende il numero
dati->add(righe_eff.get(REFF_DATAFATT));//prende la data
dati->add(righe_eff.get(REFF_IMPFATT));//prende l' importo
righe_eff.next(); // passa alla riga successiva
righe_eff.next();// passa alla riga successiva
}
return dati;
}

View File

@ -1,3 +1,6 @@
#ifndef __EF0101_H
#define __EF0101_H
#ifndef __RELATION_H
#include <relation.h>
#endif
@ -11,10 +14,9 @@
#include <reffetti.h>
#include <cession.h>
//////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
// Definizione dell'oggetto Effetto con la classe TEffetto//
/////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
class TEffetto:public TRectype
{
TRecord_array _righe;// righe dell'effetto
@ -92,3 +94,5 @@ public:
// distruttore di default
virtual ~TEffetto() {}
};
#endif//__EF0101_H

View File

@ -1,31 +1,31 @@
#ifndef __EF0200_H
#define __EF0200_H
// campi maschera ef0200a.msk
// campi maschera ef0200a
#define F_CODCF 101
#define F_RAGSOC 102
#define F_INDIRIZZO 103
#define F_COMUNE 104
#define F_PROV 105
#define F_CODABI 106
#define F_CODCAB 107
#define F_TIPOEFF 108
#define F_ADDEBITO 109
#define F_ADDSPINC 110
#define F_ADDBOLLITR 111
#define F_ADDBOLLIRB 112
#define F_ADDBNS1500 113
#define F_RESIDUO 114
#define F_SHEET_EFF 115
#define F_CODCF 101
#define F_RAGSOC 102
#define F_INDIRIZZO 103
#define F_COMUNE 104
#define F_PROV 105
#define F_CODABI 106
#define F_CODCAB 107
#define F_TIPOEFF 108
#define F_ADDEBITO 109
#define F_ADDSPINC 110
#define F_ADDBOLLITR 111
#define F_ADDBOLLIRB 112
#define F_ADDBNS1500 113
#define F_RESIDUO 114
#define F_SHEET_EFF 115
#define DLG_PARTITE 201
#define DLG_PARTITE 201
// campi per maschera ef0200b
#define F_DATASCAD 101
#define F_RATA 102
#define F_SPESE 103
#define F_BOLLI 104
#define F_IMPEFF 105
// campi per maschera ef0200b
#define F_DATASCAD 101
#define F_RATA 102
#define F_SPESE 103
#define F_BOLLI 104
#define F_IMPEFF 105
#endif // __EF0200_H

View File

@ -8,10 +8,10 @@
#include "ef0300.h"
#include "ef0301.h"
//////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//Classe per la gestione di distinte (inserimento, modifica, cancellazione) //
// e per la creazione automatica di distinte per importi. //
//////////////////////////////////////////////////////////////////////////////////////////////////////////
// e per la creazione automatica di distinte per importi. //
//////////////////////////////////////////////////////////////////////////////
class TVariazione_distinte: public TRelation_application
{
TMask *_msk, *_m2;
@ -62,8 +62,8 @@ public:
// restituisce un riferimento all' applicazione
inline TVariazione_distinte& app(){ return (TVariazione_distinte&)main_app(); }
// quando si va in query mode abilita i campi relativi alla chiave di ricerca e resetta i campi
// relativi ai totali
// quando si va in query mode abilita i campi relativi alla chiave
// di ricerca e resetta i campi relativi ai totali
void TVariazione_distinte::init_query_mode(TMask&)
{
_msk->enable(F_NUMBER);
@ -72,8 +72,9 @@ void TVariazione_distinte::init_query_mode(TMask&)
_msk->reset(F_TOTIMPVAL);
}
// quando si va in insert mode resetta i campi della maschera relativi ai totali,
// abilita i campi relativi alla valuta e disabilta i campi relativi alla chiave di ricerca
// quando si va in insert mode resetta i campi della maschera relativi
// ai totali, abilita i campi relativi alla valuta e disabilta i campi
// relativi alla chiave di ricerca
void TVariazione_distinte::init_insert_mode(TMask&)
{
_msk->reset(F_TOTIMP);
@ -84,7 +85,8 @@ void TVariazione_distinte::init_insert_mode(TMask&)
_msk->disable(F_TIPODIST);
}
// quando si va in modify mode disabilta i campi relativi alla chiave di ricerca
// quando si va in modify mode disabilta i campi relativi alla chiave
// di ricerca
void TVariazione_distinte::init_modify_mode(TMask&)
{
_msk->disable(F_NUMBER);
@ -94,32 +96,35 @@ void TVariazione_distinte::init_modify_mode(TMask&)
// ritorna il prossimo numero di distanta valido
const char* TVariazione_distinte::get_next_key()
{
long ndist = 1L; // per posizionarmi
char tipodist = 'B'; // all'inizo del file con chiave 4
long ndist = 1L;
char tipodist = 'B';
TLocalisamfile& effetti = _rel->lfile();
effetti.first(); // mi posiziono all'inizio del file
effetti.first();// mi posiziono all'inizio del file
effetti.put(EFF_TIPODIST,tipodist);
effetti.put(EFF_NDIST,ndist);
effetti.setkey(4);
int err = effetti.read(_isgteq);
if ( (err == _iskeynotfound) || (err == _iseof) ) //se non esiste alcuna distinta:
{ // il numero sarà 1
if ( (err == _iskeynotfound) || (err == _iseof) )
{ //se non esiste alcuna distinta: il numero sarà 1
err == NOERR;
return format("%d|%ld", F_NUMBER, ndist);
}
while (err == NOERR) //se esitono già delle distinte:
{ // le leggo tutte e ne prendo il
long n = effetti.get_long(EFF_NDIST);// numero, al verificarsi della fine file
// ho l'ultimo numero utilizzato
if (n > ndist) // incrementandolo avrò il numero che cercavo.
while (err == NOERR)
{ // se esitono già delle distinte:
// le leggo tutte e ne prendo il numero
long n = effetti.get_long(EFF_NDIST);
// lo confronto con i numero maggiore che ho letto
if (n > ndist)
ndist = n;
effetti.setkey(4);
err = effetti.next();
}
return format("%d|%ld",F_NUMBER,++ndist); // ritorna una stringa costruita utilizzando il numero della distinta
return format("%d|%ld",F_NUMBER,++ndist);
}
// ritorna un riferimento allo sheet degli effetti (righe) nella distinta
// ritorna un riferimento allo sheet degli effetti (righe) nella
// distinta
TSheet_field& TVariazione_distinte::righe_sheet() const
{
TSheet_field& r_sheet = (TSheet_field&)_msk->field(F_SHEET_RIBA);
@ -133,52 +138,54 @@ TSheet_field& TVariazione_distinte::righe_sel_sheet() const
return r_sheet;
}
// ritorna TRUE se trovo nell'array delle righe distinta l'effetto passato
// ritorna TRUE se trovo nell'array delle righe distinta l'effetto
// passato
bool TVariazione_distinte::cerca(long num)
{
bool trovato = FALSE;
int items = _distinta->items();
TArray& righedist = _distinta->righe();
for (int i = 0; i < items; i++) // ciclo sugli elementi dell'array
{ // se l'array è vuoto non trova nulla ed esce subito
for (int i = 0; i < items; i++)// ciclo sugli elementi dell'array
{
TEffetto& eff = (TEffetto&)righedist[i];
long num_eff = eff.get_long(EFF_NPROGTR);
if (num_eff == num)
{
trovato = TRUE;
break; // esco quando ho già trovato l'effetto che cercavo
break;// esco quando ho già trovato l'effetto che cercavo
}
}
return trovato;
}
// metodo che permette di scivere sull'array (in memoria) gli effetti presenti nello sheet
// metodo che permette di scivere sull'array (in memoria) gli
// effetti presenti nello sheet
void TVariazione_distinte::aggiorna()
{
TSheet_field& shrighe = righe_sheet();
int items = shrighe.items();
for (int i = 0; i < items; i++) // prendo tutte le righe dello sheet
for (int i = 0; i < items; i++)// prendo tutte le righe dello sheet
{
TToken_string& row = shrighe.row(i);
row.restart();
long num = row.get_long(1);
if (!cerca(num)) // se non è già presente in memoria
{ // carico l'effetto nell'array
if (!cerca(num))// se non è già presente in memoria
{ // carico l'effetto nell'array
TLocalisamfile eff(LF_EFFETTI);
TRectype rec = eff.curr();
eff.setkey(1);
rec.zero();
rec.put(EFF_NPROGTR, num);
int err = eff.read();
TEffetto* effetto= new TEffetto(rec);// istanzio un puntatore all'effetto utilizzando il record corrente del file
TEffetto* effetto= new TEffetto(rec);
TArray& righedist = _distinta->righe();
righedist.add(effetto);
}
}
}
//Metodo che permette di prendere i dati dalla maschera e metterli in una TToken_string
//che servirà per passarli alla write della distinta
// Metodo che permette di prendere i dati dalla maschera e metterli in
// una TToken_string che servirà per passarli alla write della distinta
TToken_string* TVariazione_distinte::common_f(const TMask& m)
{
char tipodist = m.get(F_TIPODIST)[0];// prendo i dati
@ -191,8 +198,8 @@ TToken_string* TVariazione_distinte::common_f(const TMask& m)
TToken_string* datidist= new TToken_string; // creo la token string
datidist->cut(0);
datidist->add(tipodist); // inserisco i dati nella
datidist->add(ndist); // token string
datidist->add(tipodist); // inserisco i dati nella
datidist->add(ndist); // token string
datidist->add(datadist);
datidist->add(codabi);
datidist->add(codcab);
@ -206,47 +213,49 @@ int TVariazione_distinte::read(TMask& m)
int err = _rel->status();
if (err == NOERR)
{
err = _distinta->reset(); //resetto l'array che contiene gli effetti nella distinta
err = _distinta->read(_rel->curr()); // legge la distinta dal record corrente della relazione
//resetto l'array che contiene gli effetti nella distinta
err = _distinta->reset();
// legge la distinta dal record corrente della relazione
err = _distinta->read(_rel->curr());
if (err == NOERR)
{
TToken_string riga(80);
TSheet_field& shrighe = righe_sheet();
shrighe.reset();
int items = _distinta->items(); // prendo il numero di effetti nella distinta
// prendo il numero di effetti nella distinta
int items = _distinta->items();
TArray& righedist = _distinta->righe();
// carico tutti gli effetti della distinta nello sheet
// carico tutti gli effetti della distinta nello sheet
for (int i = 0; i < items; i++)
{
TEffetto& eff = (TEffetto&)righedist[i];// prendo l'effetto dall'array
{
TEffetto& eff = (TEffetto&)righedist[i];
riga.cut(0);
riga.add(' ');
const long numero = eff.get_long(EFF_NPROGTR);
riga.add(numero);
riga.add(eff.get(EFF_DATASCAD));
long codcf = eff.get_long(EFF_CODCF); //prendo la ragione sociale del cliente
_clifo->zero(); //conoscendone il codice
//prendo la ragione sociale del cliente conoscendone il codice
long codcf = eff.get_long(EFF_CODCF);
_clifo->zero();
_clifo->put(CLI_TIPOCF , 'C');
_clifo->put(CLI_CODCF, codcf);
if (_clifo->read() == NOERR) riga.add(_clifo->get(CLI_RAGSOC));
if (eff.fatt(numero)) //se l'effetto contiene solo una fattura metto i
{ //riferimenti al documento ed al numero di rata
if (eff.fatt(numero))// se l'effetto contiene solo una fattura
{ // metto i riferimenti al documento ed al numero di rata
const TRectype& rec_r = eff.row_r(1);
riga.add(rec_r.get(REFF_NFATT));
riga.add(rec_r.get(REFF_DATAFATT));
if (eff.rows_r() == 1) riga.add(rec_r.get(REFF_NRATA));
else riga.add(("Varie"));
}
else //se l'effetto contiene più di una fattura non metto i
{ //riferimenti al documento ed al numero di rata
else// se l'effetto contiene più di una fattura
{ // non metto i riferimenti al documento ed al numero di rata
riga.add(("Varie"));
riga.add(("Varie"));
riga.add(("Varie"));
}
TString codval(3); //gestisco il controllo sulla presenza o meno di una valuta
//gestisco il controllo sulla presenza o meno di una valuta
TString codval(3);
codval = eff.get(EFF_CODVAL);
if (i == 0)
{
@ -257,7 +266,6 @@ int TVariazione_distinte::read(TMask& m)
m.set(F_CODVAL, codval);
}
riga.add(codval);
riga.add(eff.get(EFF_IMPORTO));
riga.add(eff.get(EFF_IMPORTOVAL));
shrighe.row(i) = riga;
@ -267,9 +275,10 @@ int TVariazione_distinte::read(TMask& m)
return err;
}
//Si prendono tutte le righe dello sheet e si controlla il primo campo se e' a true si distrugge
// la riga e si aggiorna il file.
// GLI EFFETTI PRESENTI NELLO SHEET DEVONO GIA ESSERE STATI REGISTRATI NEL FILE.
// Si prendono tutte le righe dello sheet e si controlla il primo campo
// se e' a true si distrugge la riga e si aggiorna il file.
// GLI EFFETTI PRESENTI NELLO SHEET DEVONO GIA ESSERE STATI REGISTRATI
// NEL FILE.
void TVariazione_distinte::elimina()
{
TEffetto eff;
@ -280,11 +289,14 @@ void TVariazione_distinte::elimina()
TSheet_field& sf = (TSheet_field&)_msk->field(F_SHEET_RIBA);
bool condition = FALSE, deleted = FALSE;
TArray& righedist = distinta->righe();
for (int i = 0, k = i+1; i < sf.items(); i++, k++)//ciclo sugli elementi dello sheet
{
if (deleted) i--; // per posizionarsi correttamente sulla prima riga dello sheet
if (sf.items() == 1) // non posso cancellare l'effetto se è l'unico della distinta
{
//ciclo sugli elementi dello sheet
for (int i = 0, k = i+1; i < sf.items(); i++, k++)
{
// per posizionarsi correttamente sulla prima riga dello sheet
// se ci sono state già delle cancellazioni
if (deleted) i--;
if (sf.items() == 1)
{ // non posso cancellare l'effetto se è l'unico della distinta
error_box("IMPOSSIBILE CANCELLARE: La distinta deve contenere almeno un effetto!");
break;
}
@ -293,17 +305,20 @@ void TVariazione_distinte::elimina()
if (condition)
{
long num = row.get_long(1);
for (int j = 0; j < distinta->items(); j++) //ciclo sugli elementi dell'array
//ciclo sugli elementi dell'array
for (int j = 0; j < distinta->items(); j++)
{
TEffetto& eff = (TEffetto&)righedist[j];
long num_eff = eff.get_long(EFF_NPROGTR);
if (num_eff == num)
{
righedist.destroy(j,TRUE); // tolgo l'effetto dall'array
// tolgo l'effetto dall'array
righedist.destroy(j,TRUE);
break;
}
}
sf.destroy(i); deleted = TRUE; // tolgo l'effetto dallo sheet
// tolgo l'effetto dallo sheet
sf.destroy(i); deleted = TRUE;
eff.read(file, tipodist, ndist, k);
eff.zero(EFF_TIPODIST);
eff.zero(EFF_NDIST);
@ -320,24 +335,27 @@ void TVariazione_distinte::elimina()
// riscrive distinta
int TVariazione_distinte::rewrite(const TMask& m)
{
TSheet_field& sf = righe_sheet(); // prima di riscrive controllo se ci sono effetti nello sheet selezionati per l'eliminazione
bool condition = FALSE;
// prima di riscrive controllo se ci sono effetti nello sheet
// selezionati per l'eliminazione
TSheet_field& sf = righe_sheet();
bool condition = FALSE;
for (int i = 0; i < sf.items(); i++)
{
TToken_string& row = sf.row(i);
if (condition = *row.get(0) == 'X') break; // se trovo un effetto selezionato esco dal ciclo
// se trovo un effetto selezionato esco dal ciclo
if (condition = *row.get(0) == 'X') break;
}
if (condition) // solo se ho trovato effetti selezionati
if (yesno_box("Vuoi veramete eliminare gli effetti selezionati"))
elimina(); //elimino gli effetti nello sheet che sono selezionati con la "X"
int err = _distinta->reset(); //resetto l'array che contiene gli effetti nella distinta
char tipodist = m.get(F_TIPODIST)[0]; // procedo con la riscrittura
if (condition)
if (yesno_box("Vuoi veramete eliminare gli effetti selezionati"))
elimina();
//resetto l'array che contiene gli effetti nella distinta
int err = _distinta->reset();
char tipodist = m.get(F_TIPODIST)[0];
long ndist = m.get_long(F_NUMBER);
aggiorna(); // aggiorno l'array
aggiorna();
err = _distinta->rewrite(common_f(m));
if (err == NOERR) // riposiziono la relazione
{
if (err == NOERR)
{ // riposiziono la relazione
_rel->lfile().setkey(4);
TRectype& curr = _rel->curr();
curr.put(EFF_TIPODIST, tipodist);
@ -351,14 +369,14 @@ int TVariazione_distinte::rewrite(const TMask& m)
// scrive distinta
int TVariazione_distinte::write(const TMask& m)
{
int err = _distinta->reset(); //resetto l'array che contiene gli effetti nella distinta
//resetto l'array che contiene gli effetti nella distinta
int err = _distinta->reset();
char tipodist = m.get(F_TIPODIST)[0];
long ndist = m.get_long(F_NUMBER);
aggiorna(); // aggiorno l'array
aggiorna();
err = _distinta->write(TRUE, common_f(m));
//riposiziono la relazione
if (err == NOERR)
{
{ //riposiziono la relazione
_rel->lfile().setkey(4);
TRectype& curr = _rel->curr();
curr.put(EFF_TIPODIST, tipodist);
@ -369,8 +387,9 @@ int TVariazione_distinte::write(const TMask& m)
return err;
}
//Metodo che permette di eliminare una distinta, l'eliminazione consiste nell'andare a togliere
// dagli effetti i dati ad essa relativi.
// Metodo che permette di eliminare una distinta, l'eliminazione
// consiste nell'andare a togliere dagli effetti i dati ad essa
// relativi.
bool TVariazione_distinte::remove()
{
TMask* m = app()._msk;
@ -390,7 +409,7 @@ bool TVariazione_distinte::user_create()
_cession = new TLocalisamfile(LF_CESS);
_clifo = new TLocalisamfile(LF_CLIFO);
_distinta = new TDistinta;
set_search_field(F_NUMBER); //setto il campo di ricerca della distinta
set_search_field(F_NUMBER);//setto il campo di ricerca della distinta
_msk->set_handler(F_CODVAL, codval_handler);
_msk->set_handler(F_IMP, importo_handler);
_m2->set_handler(F_TOTIMPDIST, imp_aut_handler);
@ -417,19 +436,22 @@ bool TVariazione_distinte::user_destroy()
return TRUE;
}
//Permette di caricare lo sheet per la selezione delle riba da aggiungere alla distinta:
// vengono presi tutti gli effetti sul file LF_EFFETTI che non hanno ancora un riferimento ad
// una distinta; inoltre è possibile inserire nella distinta effetti aventi lo stesso tipo di pagamento.
// Permette di caricare lo sheet per la selezione delle riba da
// aggiungere alla distinta: vengono presi tutti gli effetti sul file
// LF_EFFETTI che non hanno ancora un riferimento ad una distinta;
// inoltre è possibile inserire nella distinta effetti aventi lo stesso
// tipo di pagamento.
void TVariazione_distinte::carica_riba(int tipopag)
{
// deve caricare solo quegli effetti che non hanno riferimento alla distinta
// quindi setta i campi ad essa relativi a zero
// deve caricare solo quegli effetti che non hanno riferimento alla
// distinta quindi setta i campi ad essa relativi a zero
char tipodist = 0;
long ndist = 0;
long nrigadist = 0;
TEffetto eff;
TLocalisamfile f(LF_EFFETTI);
TLocalisamfile * clifo = app()._clifo;// per prendere la ragione sociale del cliente di cui ho il codice
// per prendere la ragione sociale del cliente di cui ho il codice
TLocalisamfile * clifo = app()._clifo;
TToken_string riga(80);
TMask* m2 = app()._m2;
m2->reset();
@ -439,12 +461,13 @@ void TVariazione_distinte::carica_riba(int tipopag)
err = eff.read(f, tipodist, ndist, nrigadist);
int tipop = eff.get_int(EFF_TIPOPAG);
while ( (err == NOERR) && (tipodist == 0))
{ //carico tutti gli effetti, che soddisfano alla condizione, nello sheet
{
bool condition = (tipopag == tipop);
// se effetti di tipo cambiario (pagherò, tratta, tratta accettata)
if (tipopag == 2 || tipopag ==5 || tipopag == 7)
condition = (tipop == 2 || tipop ==5 || tipop == 7);
// se non indico un tipo di effetto prendo il tipo del primo che seleziono
// se non indico un tipo di effetto prendo il tipo del primo che
// seleziono
if (tipopag == 0) condition =TRUE;
if (condition)
{
@ -458,16 +481,16 @@ void TVariazione_distinte::carica_riba(int tipopag)
clifo->put(CLI_TIPOCF, 'C');
clifo->put(CLI_CODCF, codcf);
if (clifo->read() == NOERR) riga.add(clifo->get(CLI_RAGSOC));
if (eff.fatt(numero)) //se l'effetto contiene solo una fattura metto i
{ //riferimenti al documento ed al numero di rata
if (eff.fatt(numero))// se l'effetto contiene solo una fattura
{ // metto i riferimenti al documento ed al numero di rata
const TRectype& rec_r = eff.row_r(1);
riga.add(rec_r.get(REFF_NFATT));
riga.add(rec_r.get(REFF_DATAFATT));
if (eff.rows_r() == 1) riga.add(rec_r.get(REFF_NRATA));
else riga.add(("Varie"));
}
else //se l'effetto contiene più di una fattura non metto i
{ //riferimenti al documento ed al numero di rata
else// se l'effetto contiene più di una fattura
{ // non metto i riferimenti al documento ed al numero di rata
riga.add(("Varie"));
riga.add(("Varie"));
riga.add(("Varie"));
@ -479,15 +502,16 @@ void TVariazione_distinte::carica_riba(int tipopag)
i++;
}
f.setkey(4);
err = eff.next(f); //leggo l'effetto successivo e ne prendo il tipodistinta per il controllo
tipodist = eff.get(EFF_TIPODIST)[0];// della condizione del ciclo di caricamento
if (tipopag == 0) tipopag = tipop; // non avendo indicato un tipo di effetto prendo quello del primo
err = eff.next(f);//leggo l'effetto successivo
tipodist = eff.get(EFF_TIPODIST)[0];// e ne prendo il tipo distinta
if (tipopag == 0)
tipopag = tipop;
tipop = eff.get_int(EFF_TIPOPAG);
}
}
//Handler che permette il controllo sulla abilitazione dei campi collegati
// al codice valuta
// Handler che permette il controllo sulla abilitazione dei campi
// collegati al codice valuta
bool TVariazione_distinte::codval_handler(TMask_field& f, KEY k)
{
TMask &m = f.mask();
@ -502,8 +526,9 @@ bool TVariazione_distinte::codval_handler(TMask_field& f, KEY k)
return TRUE;
}
//Handler per gestire il caricamento degli effetti nella distinta in automatico
// relativamente ad un importo fissato (per la maschera princiapale)
// Handler per gestire il caricamento degli effetti nella distinta
// in automatico relativamente ad un importo fissato (per la maschera
// princiapale)
bool TVariazione_distinte::importo_handler(TMask_field& f, KEY k)
{
TMask& m = f.mask();
@ -518,8 +543,9 @@ bool TVariazione_distinte::importo_handler(TMask_field& f, KEY k)
long imp = m.get_long(F_IMP);// importo distinta
long impdist = imp - imp_pres;
int tipopag = m.get_int(F_TIPOPAG);
// se importo distinta maggiore importo presentato si devono andare a caricare effetti in ...
// ... automatico per un valore minore uguale alla differenza dei suddetti importi
// se importo distinta maggiore importo presentato si devono andare a
// caricare effetti in automatico per un valore minore uguale alla
// differenza dei suddetti importi
if (impdist > 0)
{
app().begin_wait();
@ -538,64 +564,73 @@ bool TVariazione_distinte::importo_handler(TMask_field& f, KEY k)
return TRUE;
}
//Handler per gestire il caricamento degli effetti nella distinta in automatico
// relativamente ad un importo fissato (per la maschera secondaria)
// Handler per gestire il caricamento degli effetti nella distinta in
// automatico relativamente ad un importo fissato (per la maschera
// secondaria)
bool TVariazione_distinte::imp_aut_handler(TMask_field& f, KEY k)
{
TMask& m2 = f.mask();
// se quando si entra nell maschera il campo contiene un valore significa che si deve procedere
// con il caricamento automatico di effetti per l'importo iscritto nel campo
// se quando si entra nell maschera il campo contiene un valore
// significa che si deve procedere con il caricamento automatico
// di effetti per l'importo iscritto nel campo
if (f.to_check(k, TRUE))
{
TMask* m = app()._msk;
TSheet_field& sf = (TSheet_field&)m2.field(F_SHEET);
TSheet_field& sf_riba = (TSheet_field&)m->field(F_SHEET_RIBA);
long impdist = m->get_long(F_IMP) - m->get_long(F_TOTIMP);// prendo l'importo da caricare
long tot_imp_dist = m2.get_long(F_TOTIMPDIST), // prendo l'importo iscritto nel campo
long impdist = m->get_long(F_IMP) - m->get_long(F_TOTIMP);
long tot_imp_dist = m2.get_long(F_TOTIMPDIST),
impsel = 0;
if (tot_imp_dist != 0 && impdist != 0)// se i due importi sono diversi da zero
{
if (tot_imp_dist != 0 && impdist != 0)
{ // se i due importi sono diversi da zero
TString val = m->get(F_CODVAL);
int items = sf.items();
// cerca se esiste un effetto con importo uguale a quello da caricare
// cerca se esiste un effetto con importo uguale a quello
// da caricare
bool caricato = FALSE;
for(int i = 0; i < items && !caricato; i++)
{
TToken_string& row = sf.row(i);
TString codval = row.get(7);
if (codval == " " || codval == "LIT")//se la valuta non appare o è lire
codval.trim(); //faccio in modo che vengano presi gli effetti con valuta inesistente
// se la valuta non appare o è lire faccio in modo che vengano
// presi gli effetti con valuta inesistente
if (codval == " " || codval == "LIT")
codval.trim();
long imp = row.get_long(8);
if (imp == tot_imp_dist && codval == val)
{
row.add('X',0);//seleziono l'effetto poichè soddisfa alle condizione richieste
row.add('X',0);
impsel += imp;
caricato = TRUE;
}
}
// se non esiste carico l'importo sommando più effetti
// se non esiste un effetto con importo uguale a quello
// da caricare carico l'importo sommando più effetti
if (!caricato)
{
for(int i = 0; i < items; i++)
{
TToken_string& row = sf.row(i);
TString codval = row.get(7);
if (codval == " " || codval == "LIT")//se la valuta non appare o è lire
codval.trim(); //faccio in modo che vengano presi gli effetti con valuta inesistente
// se la valuta non appare o è lire faccio in modo che
// vengano presi gli effetti con valuta inesistente
if (codval == " " || codval == "LIT")
codval.trim();
long imp = row.get_long(8);
// se l'importo, della riga corrente dello sheet, è minore dell 'importo che si deve caricare e
// se lo rimane anche sommato all'importo già selezionato, si procede a rendere la riga selezionata
// per il caricamento
// se l'importo, della riga corrente dello sheet, è minore
// dell 'importo che si deve caricare e se lo rimane anche
// sommato all'importo già selezionato, si procede a rendere
// la riga selezionata per il caricamento
if ((imp <= tot_imp_dist) && ((impsel+imp) <= tot_imp_dist))
{
if ((sf_riba.items() == 0) && (val.empty()|| val == "LIT"))//se non è stata specificata una valuta si prende quella del
{ //primo effetto che si carica nella distinta
{ //primo effetto che si carica nella distinta
m->set(F_CODVAL, codval);
val = m->get(F_CODVAL);
}
if (codval == val)
{
row.add('X',0);//seleziono l'effetto poichè soddisfa alle condizione richieste
row.add('X',0);
impsel += imp;
}
}
@ -610,8 +645,8 @@ bool TVariazione_distinte::imp_aut_handler(TMask_field& f, KEY k)
return TRUE;
}
//Handler per gestire la pressione del bottone conferma della maschera per l'aggiunta delle
// riba (ef0300c)
// Handler per gestire la pressione del bottone conferma della maschera
// per l'aggiunta delle riba (ef0300c)
bool TVariazione_distinte::conferma_handler(TMask_field& f, KEY k)
{
TMask* msk = app()._msk;
@ -620,8 +655,8 @@ bool TVariazione_distinte::conferma_handler(TMask_field& f, KEY k)
{
TMask& m = f.mask();
m.close(); // chiudo la maschera secondaria
// scarico tutte le righe, selezionate, dello sheet della maschera secondaria nello sheet della
// maschera primaria della relap (ef0300a)
// scarico tutte le righe, selezionate, dello sheet della maschera
// secondaria nello sheet della maschera primaria della relap (ef0300a)
TSheet_field& sf = (TSheet_field&)m.field(F_SHEET);
int items = sf.items();
bool condition = FALSE;
@ -641,8 +676,8 @@ bool TVariazione_distinte::conferma_handler(TMask_field& f, KEY k)
return TRUE;
}
//Handler per gestire la pressione del bottone annulla della maschera per l'aggiunta delle riba
// (ef0300c)
// Handler per gestire la pressione del bottone annulla della maschera
// per l'aggiunta delle riba (ef0300c)
bool TVariazione_distinte::annulla_handler(TMask_field& f, KEY k)
{
TMask& m = f.mask();
@ -650,7 +685,8 @@ bool TVariazione_distinte::annulla_handler(TMask_field& f, KEY k)
return TRUE;
}
//Handler per gestire la scelta per data ,nella maschera di scelta delle riba (ef0300c)
// Handler per gestire la scelta per data, nella maschera di scelta
// delle riba (ef0300c)
bool TVariazione_distinte::from_data_handler(TMask_field& f, KEY k)
{
if (k == K_TAB)
@ -661,7 +697,8 @@ bool TVariazione_distinte::from_data_handler(TMask_field& f, KEY k)
bool deleted = FALSE;
TDate data = m.get_date(F_DADATA);
TSheet_field& sf = (TSheet_field&)m.field(F_SHEET);
// tolgo dallo sheet gli effetti che hanno una data minore a quella indicata nel campo della maschera
// tolgo dallo sheet gli effetti che hanno una data minore a quella
// indicata nel campo della maschera
for(int i = 0; i < sf.items(); i++)
{
if (deleted) i--;
@ -679,7 +716,8 @@ bool TVariazione_distinte::from_data_handler(TMask_field& f, KEY k)
return TRUE;
}
//Handler per gestire la scelta per data, nella maschera di scelta delle riba (ef0300c)
// Handler per gestire la scelta per data, nella maschera di scelta
// delle riba (ef0300c)
bool TVariazione_distinte::to_data_handler(TMask_field& f, KEY k)
{
if (k == K_TAB)
@ -690,7 +728,8 @@ bool TVariazione_distinte::to_data_handler(TMask_field& f, KEY k)
bool deleted = FALSE;
TDate data = m.get_date(F_ADATA);
TSheet_field& sf = (TSheet_field&)m.field(F_SHEET);
// tolgo dallo sheet gli effetti che hanno una data maggiore a quella indicata nel campo della maschera
// tolgo dallo sheet gli effetti che hanno una data maggiore a quella
// indicata nel campo della maschera
for(int i = 0; i < sf.items(); i++)
{
if (deleted) i--;
@ -708,8 +747,8 @@ bool TVariazione_distinte::to_data_handler(TMask_field& f, KEY k)
return TRUE;
}
//COMPARE FUNCTION per l'ordinamento per data degli effetti presenti nello sheet,
// nella maschera di scelta delle riba (ef0300c)
// COMPARE FUNCTION per l'ordinamento per data degli effetti presenti
// nello sheet, nella maschera di scelta delle riba (ef0300c)
HIDDEN int confronta_data(const TObject** o1, const TObject** o2)
{
int val;
@ -724,21 +763,23 @@ HIDDEN int confronta_data(const TObject** o1, const TObject** o2)
return val;
}
//Handler per gestire l'ordinamento per data degli effetti presenti nello sheet,
// nella maschera di scelta delle riba (ef0300c)
// Handler per gestire l'ordinamento per data degli effetti presenti
// nello sheet, nella maschera di scelta delle riba (ef0300c)
void TVariazione_distinte::ord_data()
{
TMask* m = app()._m2;
TSheet_field& sf = (TSheet_field&)m->field(F_SHEET);
TArray& effetti = sf.rows_array();// scarico tutte le righe dello sheet in un array
// scarico tutte le righe dello sheet in un array
TArray& effetti = sf.rows_array();
app().begin_wait();
effetti.sort(confronta_data);// faccio l'ordinamento degli elementi dell'array
// faccio l'ordinamento degli elementi dell'array
effetti.sort(confronta_data);
app().end_wait();
sf.force_update();
}
//COMPARE FUNCTION per l'ordinamento per numero e data fattura degli effetti presenti nello sheet,
// nella maschera di scelta delle riba (ef0300c)
// COMPARE FUNCTION per l'ordinamento per numero e data fattura degli
// effetti presenti nello sheet, nella maschera di scelta delle riba
HIDDEN int confronta_fatt(const TObject** o1, const TObject** o2)
{
int val;
@ -767,20 +808,22 @@ HIDDEN int confronta_fatt(const TObject** o1, const TObject** o2)
}
}
//Handler per gestire l'ordinamento per numero e data fattura degli effetti presenti nello sheet,
// nella maschera di scelta delle riba (ef0300c)
// Handler per gestire l'ordinamento per numero e data fattura degli
// effetti presenti nello sheet, nella maschera di scelta delle riba
void TVariazione_distinte::ord_fatt()
{
TMask* m = app()._m2;
TSheet_field& sf = (TSheet_field&)m->field(F_SHEET);
TArray& effetti = sf.rows_array();// scarico le righe dello sheet in un array
// scarico le righe dello sheet in un array
TArray& effetti = sf.rows_array();
app().begin_wait();
effetti.sort(confronta_fatt);// ordino gli elementi dell'array
app().end_wait();
sf.force_update();
}
//Handler per gestire i diversi ordinamenti, nella maschera di scelta delle riba (ef0300c)
// Handler per gestire i diversi ordinamenti, nella maschera di scelta
// delle riba (ef0300c)
bool TVariazione_distinte::ordina_handler(TMask_field& f, KEY k)
{
if (f.to_check(k, TRUE))
@ -794,8 +837,8 @@ bool TVariazione_distinte::ordina_handler(TMask_field& f, KEY k)
return TRUE;
}
//Metodo che calcola i totali relativi alla distinta (totale in lire e totale in valuta(se presente))
// nella maschera principale (ef0300a)
// Metodo che calcola i totali relativi alla distinta (totale in
// lire e totale in valuta(se presente)) nella maschera principale
void TVariazione_distinte::calcola_totale()
{
TMask* m = app()._msk;
@ -805,8 +848,8 @@ void TVariazione_distinte::calcola_totale()
for (int i = 0; i < items; i++)
{
TToken_string& row = sf.row(i);
// se l'effetto è selezionato per l'eliminazione tolgo il suo importo dal totale
// presentazione della distinta
// se l'effetto è selezionato per l'eliminazione tolgo il suo importo
// dal totale presentazione della distinta
bool condition = *row.get(0) == 'X';
if (condition)
{
@ -815,7 +858,8 @@ void TVariazione_distinte::calcola_totale()
impval = row.get(9);
impdistval -= impval;
}
// se l'effetto no è selzionato aggiungo il suo importo al totale presentazione della distinta
// se l'effetto no è selzionato aggiungo il suo importo al totale
// presentazione della distinta
imp = row.get(8);
impdist += imp;
impval = row.get(9);
@ -826,8 +870,8 @@ void TVariazione_distinte::calcola_totale()
m->set(F_IMP, impdist);
}
//Metodo che calcola i totali relativi alla selezione effetti per la distinta
// nella maschera di scelta delle riba (ef0300c)
// Metodo che calcola i totali relativi alla selezione effetti per la
// distinta nella maschera di scelta delle riba (ef0300c)
void TVariazione_distinte::calcola()
{
TMask* m2 = app()._m2;
@ -844,7 +888,8 @@ void TVariazione_distinte::calcola()
for (int i = 0; i < items; i++)
{
TToken_string& row = sf.row(i);
// se l'effetto è selezionato aggiungo il suo importo al totale importo selezionato
// se l'effetto è selezionato aggiungo il suo importo al totale importo
// selezionato
bool condition = *row.get(0) == 'X';
if (condition)
{
@ -857,8 +902,8 @@ void TVariazione_distinte::calcola()
}
}
//Notify per il calcolo dei totali relativi alla selezione effetti per la distinta
// nella maschera di scelta delle riba (ef0300c)
// Notify per il calcolo dei totali relativi alla selezione effetti
// per la distinta nella maschera di scelta delle riba (ef0300c)
bool TVariazione_distinte::imp_notify(TSheet_field& s, int r, KEY key)
{
if (s.to_check(key, TRUE))
@ -866,8 +911,9 @@ bool TVariazione_distinte::imp_notify(TSheet_field& s, int r, KEY key)
return TRUE;
}
//Metodo che permette di aggiungere effetti alla distinta caricandoli tra quelli
//non ancora assegnati, chiamato quando si aggiunge una riga allo sheet degli effetti della distinta
// Metodo che permette di aggiungere effetti alla distinta caricandoli
// tra quelli non ancora assegnati, chiamato quando si aggiunge una
// riga allo sheet degli effetti della distinta
void TVariazione_distinte::aggiungi()
{
TMask* m = app()._msk;
@ -881,13 +927,13 @@ void TVariazione_distinte::aggiungi()
m2->run();
}
//Notify per il calcolo dei totali relativi alla distinta
// Notify per il calcolo dei totali relativi alla distinta
// nella maschera della relap (ef0300a)
bool TVariazione_distinte::impdist_notify(TSheet_field& s, int r, KEY key)
{
if (s.to_check(key, TRUE))
calcola_totale();
if (key == K_CTRL + K_INS) // se si vuole aggiungere una riga alla sheet degli effetti nella distinta
if (key == K_CTRL + K_INS)
aggiungi();
return TRUE;
}
@ -895,6 +941,6 @@ bool TVariazione_distinte::impdist_notify(TSheet_field& s, int r, KEY key)
int ef0300(int argc, char* argv[])
{
TVariazione_distinte a ;
a.run(argc, argv, "Gestione Distinte");
a.run(argc, argv, "Variazione Distinte");
return 0;
}

View File

@ -1,45 +1,42 @@
#ifndef __EF0300_H
#define __EF0300_H
// campi maschera EF0300a.msk
#define F_TIPODIST 101
#define F_NUMBER 102
#define F_NUMBERRIGA 103
#define F_DATA 104
#define F_DENBANP 105
#define F_CODABIP 106
#define F_CODCABP 107
#define F_TOTIMP 108
#define F_IMP 109
#define F_TOTIMPVAL 110
#define F_CODVAL 111
#define F_TIPOPAG 112
#define F_SHEET_RIBA 113
// DEFINIZIONE CAMPI MASCHERE PER LA GESTIONE DISTINTE
// campi maschera ef0300a.uml
#define F_TIPODIST 101
#define F_NUMBER 102
#define F_NUMBERRIGA 103
#define F_DATA 104
#define F_DENBANP 105
#define F_CODABIP 106
#define F_CODCABP 107
#define F_TOTIMP 108
#define F_IMP 109
#define F_TOTIMPVAL 110
#define F_CODVAL 111
#define F_TIPOPAG 112
#define F_SHEET_RIBA 113
// Identificatori campi per lo spreadsheet Righe Distinta
#define F_CHECK 101
#define F_NRIBA 102
#define F_SCAD 103
#define F_CLIENTE 104
#define F_NFATT 105
#define F_DATAFATT 106
#define F_NRATA 107
#define F_VALUTA 108
#define F_IMPORTO 109
#define F_IMPORTOVAL 110
#define F_CHECK 101
#define F_NRIBA 102
#define F_SCAD 103
#define F_CLIENTE 104
#define F_NFATT 105
#define F_DATAFATT 106
#define F_NRATA 107
#define F_VALUTA 108
#define F_IMPORTO 109
#define F_IMPORTOVAL 110
// campi maschera EF0300C.msk
// Identificatori campi per lo spreadsheet di selezione RiBa da aggiungere
// alla distinta
#define F_DADATA 101
#define F_ADATA 102
#define F_TIPORD 103
#define F_SHEET 104
#define F_TOTIMPDIST 105
#define F_IMPSEL 106
#define F_DADATA 101
#define F_ADATA 102
#define F_TIPORD 103
#define F_SHEET 104
#define F_TOTIMPDIST 105
#define F_IMPSEL 106
#endif // __EF0300.H
#endif // __EF0300_H

View File

@ -1,10 +1,11 @@
// DEFINIZIONE MASCHERA PRINCIPALE PER LA GESTIONE DISTINTE
#include "ef0300.h"
TOOLBAR "" 0 20 0 2
TOOLBAR "" 0 19 0 2
#include <toolbar.h>
ENDPAGE
PAGE "Gestione Distinte" 0 -1 0 19
PAGE "Distinta" 0 -1 0 19
GROUPBOX DLG_NULL 78 11
BEGIN
@ -153,7 +154,7 @@ BEGIN
ITEM "9|Bonifici"
END
SPREADSHEET F_SHEET_RIBA 78 10
SPREADSHEET F_SHEET_RIBA 78 6
BEGIN
PROMPT 1 12 "RIGHE DISTINTA"
ITEM ""

View File

@ -1,6 +1,7 @@
// DEFINIZIONE MASCHERE, PER RIGHE DISTINTA, PER LA GESTIONE DISTINTE
#include "ef0300.h"
PAGE "Righe Distinta" 16 7 78 13
PAGE "Righe Distinta" -1 -1 63 13
LISTBOX F_CHECK 5
BEGIN
@ -67,7 +68,7 @@ END
NUMBER F_IMPORTOVAL 18 3
BEGIN
PROMPT 2 9 "Importo Val. "
PROMPT 2 10 "Importo Val. "
FIELD LF_EFFETTI->IMPORTOVAL
PICTURE "###.###.###.###,@@@"
FLAGS "D"

View File

@ -1,6 +1,7 @@
// DEFINIZIONE MASCHERA, DI AGGIUNTA EFFETTI, PER LA GESTIONE DISTINTE
#include "ef0300.h"
PAGE "Aggiungi Effetti alla Distinta" 16 2 78 20
PAGE "Aggiungi Effetti alla Distinta" -1 -1 78 20
GROUPBOX DLG_NULL 60 3
BEGIN
@ -25,9 +26,9 @@ BEGIN
ITEM "F|Fattura "
END
SPREADSHEET F_SHEET 74 12
SPREADSHEET F_SHEET 74 9
BEGIN
PROMPT 2 5 "EFFETTI SELEZIONABILI"
PROMPT 2 6 "EFFETTI SELEZIONABILI"
ITEM ""
ITEM "Nr. Ri.Ba."
ITEM "Scadenza"
@ -42,13 +43,13 @@ END
NUMBER F_TOTIMPDIST 18 2
BEGIN
PROMPT 2 18 "Importo "
PROMPT 2 17 "Importo "
PICTURE "###.###.###.###,@@"
END
NUMBER F_IMPSEL 18 2
BEGIN
PROMPT 37 18 "Importo Selezionato "
PROMPT 37 17 "Importo Selezionato "
PICTURE "###.###.###.###,@@"
END

View File

@ -1,8 +1,8 @@
#include "ef0301.h"
///////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////
// Definizione dei metodi della classe TDistinta //
/////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////
// costruttore distinta utilizzando il record passato
TDistinta::TDistinta(const TRectype& rec)
@ -29,8 +29,10 @@ int TDistinta::read(const char tipo, const long numero)
if (err == NOERR)
_righe_dist.add(effetto);
}
if ((_righe_dist.items()>0)||(err == _iseof) )//se ho letto degli effetti della distinta ed ho
err = NOERR; //trovato la fine file elimino l'errore
// se ho letto degli effetti della distinta ed ho
// trovato la fine file elimino l'errore
if ((_righe_dist.items()>0)||(err == _iseof) )
err = NOERR;
return err;
}
@ -47,25 +49,28 @@ int TDistinta::read(const TRectype& rec)
int TDistinta::write(bool force, TToken_string* dati_dist)
{
int err = NOERR;
const int elem = items(); //quanti effetti sono nella distinta (nell'array in memoria)
//quanti effetti sono nella distinta (nell'array in memoria)
const int elem = items();
TLocalisamfile f(LF_EFFETTI);
for (int i=0; i<elem && err==NOERR; i++)
{
TEffetto& effetto = (TEffetto&)_righe_dist[i];
dati_dist->restart();// token string che contiene i dati da registrare sull'effetto
// token string che contiene i dati da registrare sull'effetto
dati_dist->restart();
effetto.put(EFF_TIPODIST, dati_dist->get());
effetto.put(EFF_NDIST, dati_dist->get_long());
effetto.put(EFF_DATADIST, dati_dist->get());
effetto.put(EFF_CODABIP, dati_dist->get_long());
effetto.put(EFF_CODCABP, dati_dist->get_long());
effetto.put(EFF_NRIGADIST, i+1);
err = effetto.rewrite(f);//riscrivo l'effetto con i dati della distinta a cui appartiene
//riscrivo l'effetto con i dati della distinta a cui appartiene
err = effetto.rewrite(f);
}
return err;
}
// rimuove la distinta (non si effettua la rimozione del record su file ma si elimina dal file il
// collegamento tra gli effetti e la distinta)
// rimuove la distinta (non si effettua la rimozione del record su file ma si
// elimina dal file il collegamento tra gli effetti e la distinta)
int TDistinta::remove(char tipodist, long ndist)
{
int err;

View File

@ -1,12 +1,18 @@
#ifndef __EF0301_H
#define __EF0301_H
#ifndef __EF0101_H
#include "ef0101.h"
#endif
///////////////////////////////////////////////////////////////
// definizione dell'oggetto Distinta con la classe TDistinta //
// Definizione dell'oggetto Distinta con la classe TDistinta //
///////////////////////////////////////////////////////////////
class TDistinta:public TObject
{
TArray _righe_dist; // array che contiene puntatori agli effetti nella distinta
//array che contiene puntatori agli effetti nella distinta
TArray _righe_dist;
public:
//ritorna un riferimento all'array degli effetti nella distinta
TArray& righe(){ return _righe_dist;}
@ -14,26 +20,28 @@ public:
const int items() const{ return _righe_dist.items(); }
//elimina tutti gli effetti nella distinta (appartenti all'array)
int reset(){ return _righe_dist.destroy() == NOERR; }
// legge la distinta del tipo e numero passati
//legge la distinta del tipo e numero passati
int read(const char tipo, const long numero);
// legge il record passato
//legge il record passato
int read(const TRectype& rec);
// scrive la distinta utilizzando la rewrite degli effetti
//scrive la distinta utilizzando la rewrite degli effetti
int write(bool force = FALSE, TToken_string* dati_dist = NULL);
// riscrive la distinta
//riscrive la distinta
int rewrite(TToken_string* dati_dist){ return write(TRUE, dati_dist); }
// rimuove la distinta del tipo e numero passati
//rimuove la distinta del tipo e numero passati
int remove(char tipodist, long ndist);
// restituisce il tipo di distinta
//restituisce il tipo di distinta
const char tipodist() const { return ((TRectype&)_righe_dist[0]).get_char(EFF_TIPODIST); }
// restituisce il numero di distinta
//restituisce il numero di distinta
const long ndist() const { return ((TRectype&)_righe_dist[0]).get_long(EFF_NDIST); }
// costruttore di default
//costruttore di default
TDistinta() {};
// costruttore distinta del tipo e numero passato
//costruttore distinta del tipo e numero passato
TDistinta(const char tipo, const long numero);
// costruttore distinta utilizzando il record passato
//costruttore distinta utilizzando il record passato
TDistinta(const TRectype& rec);
// distruttore di default
//distruttore di default
virtual ~TDistinta() {}
};
};
#endif//__EF0301_H

View File

@ -8,9 +8,9 @@
#include "ef0101.h"
#include "ef0400.h"
//////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
//Classe per l'eliminazione di effetti di effetti con selezione per gruppi //
//////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
class TEliminazione_effetti: public TApplication
{
TMask *_msk;
@ -148,7 +148,8 @@ bool TEliminazione_effetti::to_data_handler(TMask_field& f, KEY k)
return TRUE;
}
//Si effettua l'istanziazione del cursore e si eliminano gli effetti che vi appartengono
// Si effettua l'istanziazione del cursore e si eliminano gli effetti che vi
// appartengono
void TEliminazione_effetti::elimina()
{
const TRectype *from = app()._from;
@ -181,12 +182,12 @@ void TEliminazione_effetti::elimina()
break;
}
TCursor cur(rel,filter,key,from,to); // istanzio il cursore
TLocalisamfile& delfile = cur.file();// prendo un riferimento al file del cursore
TLocalisamfile& delfile = cur.file();// prendo un riferimento al file
long n = cur.items();// prendo il numero di elementi del cursore
cur.freeze();// congelo lo stato del cursore
for (cur=0; cur.pos() < n; ++cur)// scandisco tutti gli elementi del cursore
{
TEffetto eff(delfile.curr());// istanzio un effetto con il file corrente del cursore
TEffetto eff(delfile.curr());// istanzio un effetto
eff.remove(delfile); // e lo cancello
}
}
@ -203,7 +204,8 @@ bool TEliminazione_effetti::conferma_handler(TMask_field& f, KEY k)
return TRUE;
}
//Handler per gestire la conferma dell'annullamento dei dati inseriti nella maschera
// Handler per gestire la conferma dell'annullamento dei dati
// inseriti nella maschera
bool TEliminazione_effetti::annulla_handler(TMask_field& f, KEY k)
{
TMask &m = f.mask();

View File

@ -1,7 +1,8 @@
#ifndef __EF0400_H
#define __EF0400_H
// campi maschera ef0400a.msk
// DEFINIZIONE CAMPI MASCHERA PER LA ELIMINAZIONE DEGLI EFFETTI
// campi maschera ef0400a
#define F_TIPOSEL 101
#define F_TIPOCANC 102
@ -10,4 +11,4 @@
#define F_DA_DATA 105
#define F_A_DATA 106
#endif // __EF0400_H
#endif// __EF0400_H

View File

@ -1,6 +1,7 @@
// DEFINIZIONE MASCHERA PER LA ELIMINAZIONE DEGLI EFFETTI
#include "ef0400.h"
PAGE "Eliminazione Effetti" -1 -1 65 14
PAGE "Eliminazione Effetti" -1 -1 57 14
LIST F_TIPOSEL 24
BEGIN

View File

@ -17,9 +17,9 @@ class TRiba_form;
class TDistinta_form;
class TRiba_file;
enum fo{kb360 = 1, kb720 = 2, kb1200 = 3, kb1440 = 4};
///////////////////////////////////////////////////////////////////////////////////////////////
// Classe per l'emissione di effetti e distinte su carta o su floppy //
///////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////
// Classe per l'emissione di effetti e distinte su carta o su floppy //
///////////////////////////////////////////////////////////////////////
class TEmissione: public TApplication
{
fo _foutput;
@ -61,9 +61,9 @@ public:
// restituisce un riferimento all' applicazione
inline TEmissione& app() { return (TEmissione&) main_app();}
/////////////////////////////////////////////////////////////////////////////////////////
// Classe TRiba_form customizzata dalla Form per le Ri.Ba.//
////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////
// Classe TRiba_form customizzata dalla Form per le Ri.Ba. //
/////////////////////////////////////////////////////////////
class TRiba_form: public TForm
{
protected:
@ -73,14 +73,14 @@ public:
virtual ~TRiba_form(){};
};
/////////////////////////////////////////////////////////////////////////////////////////////////
// Classe TDistinta_form customizzata dalla Form per le Distinte //
////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////
// Classe TDistinta_form customizzata dalla Form per le Distinte //
///////////////////////////////////////////////////////////////////
class TDistinta_form: public TForm
{
TRelation *_firmrel;
TSorted_cursor *_cursor;// curosore che permette l'ordinamento degli effetti nella distinta
protected: // per data scadenza o per dati fattura
TSorted_cursor *_cursor;// cursore che permette l'ordinamento degli effetti
protected: // nella distinta per data scadenza o per dati fattura
virtual bool validate(TForm_item &, TToken_string &);
public:
void set_order(const char tipo);
@ -89,9 +89,9 @@ public:
virtual ~TDistinta_form();
};
////////////////////////////////////////////////////////////////////////////
// Classe TRiba_file customizzata dalla TFile_text //
///////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////
// Classe TRiba_file customizzata dalla TFile_text //
/////////////////////////////////////////////////////
class TRiba_file: public TFile_text
{
long _nditta;
@ -196,12 +196,14 @@ void TEmissione::floppy()
pi = new TProgind(n_eff,"Emissione Ri.Ba. su floppy...",FALSE,TRUE,10);
TAssoc_array& tracciati = _trasfile->tracciati();
header_rb();//intestazione flusso effetti
for (*_cur = 0; _cur->pos() < n_eff; ++(*_cur))//scandisco tutti gli effetti della distinta selezionata
//scandisco tutti gli effetti della distinta selezionata
for (*_cur = 0; _cur->pos() < n_eff; ++(*_cur))
{
pi->addstatus(1L);
save_data_emis();
THash_object* lavoro = tracciati.get_hashobj();
for (int i = 0; lavoro != NULL; i++)//scandisco tutti i record di un effetto
//scandisco tutti i record di un effetto
for (int i = 0; lavoro != NULL; i++)
{
record(*lavoro);//emetto il record
lavoro = tracciati.get_hashobj();
@ -283,13 +285,14 @@ void TEmissione::record(THash_object& lavoro)
TTracciato_record& oggetto = (TTracciato_record&)lavoro.obj();
const TString& tipo = oggetto.type();
TRecord_text rec(tipo);
_trasfile->autoload(rec, *_cur, &tipo);//carico il record da emettere
//carico il record da emettere
_trasfile->autoload(rec, *_cur, &tipo);
_trasfile->write(rec);//emetto i dati su file
}
}
//controllo che ci sia spazio a sufficenza per emettere il flusso sull'unità scelta dall'utente,
//ritorna TRUE se è possibile farlo
//controllo che ci sia spazio a sufficenza per emettere il flusso
//sull'unità scelta dall'utente,ritorna TRUE se è possibile farlo
bool TEmissione::ok_write()
{
long elem = _cur->items();
@ -307,8 +310,9 @@ bool TEmissione::ok_write()
drive = 2;
break;
}
_dos_getdiskfree(drive, &diskspace);// routine uses system call 0x36 to obtain information on the disk drive specified by drive
// routine uses system call 0x36 to obtain information on the disk drive
// specified by drive
_dos_getdiskfree(drive, &diskspace);
unsigned long available_clusters = (unsigned long) diskspace.avail_clusters;
unsigned long sectors_per_cluster = (unsigned long) diskspace.sectors_per_cluster;
unsigned long bytes_per_sector = (unsigned long) diskspace.bytes_per_sector;
@ -372,32 +376,34 @@ void TEmissione::print_rb(char tipost, int ndist, char tipodist, int ncopie, con
if (tipost == 'D')// se stampa definitiva effetti
if (!_msk->get_bool(F_RIST))// se non deve ristampare le riba
filter = "EFFSTAMP=\" \"";// setta il filtro del cursore per ...
fcur->setfilter(filter,TRUE); // ... stampare solo gli effetti non ancora stampati
fcur->setfilter(filter,TRUE);// ... stampare solo gli effetti non ancora stampati
// setta la chiave 4 per il cursore per poter leggere tutti gli effetti della distinta
fcur->setkey(4);
TRectype darec(eff.curr());// fissa i dati per la scelta degli ...
darec.zero(); // ... effetti nel primo e nell'ultimo record del cursore
darec.zero();// ... effetti nel primo e nell'ultimo record del cursore
darec.put(EFF_NDIST, ndist);
darec.put(EFF_TIPODIST, tipodist);
TRectype arec(darec);
fcur->setregion(darec, arec);
long n = fcur->items();
fcur->freeze();
// se la stampa non si fa a video istanzia puntatore per la gestione della barra di attesa
// se la stampa non si fa a video istanzia puntatore per la gestione
// della barra di attesa
for (int j=0; j < ncopie; j++)
{
TProgind* pi;
if (!is_vis)
pi = new TProgind(n,"Stampa Effetti...",FALSE,TRUE,10);
for (*fcur = 0; fcur->pos() < n; ++(*fcur)) // ciclo sugli elementi del cursore di stampa
// ciclo sugli elementi del cursore di stampa
for (*fcur = 0; fcur->pos() < n; ++(*fcur))
{
if (!is_vis)
pi->addstatus(1L); // aggiorna la barra d'attesa
_formrb->print(); // stampa il form
pi->addstatus(1L); // aggiorna la barra d'attesa
_formrb->print(); // stampa il form
}
}
if (tipost == 'D') // se emetto riba in definitiva ...
aggiorna_rb(fcur); // ... devo aggiornare data, numero emissione e flag di stampa effetto
if (tipost == 'D') // se emetto riba in definitiva devo aggiornare
aggiorna_rb(fcur);// data, numero emissione e flag di stampa effetto
}
// gestione emissione su moduli cartacei delle distinte
@ -405,19 +411,21 @@ void TEmissione::print_dse(char tipost, int ndist, char tipodist, int ncopie, co
{
TCursor* fcur = _formdse->cursor();
TLocalisamfile &eff = fcur->file(LF_EFFETTI);
// setta la chiave 4 per il cursore per poter leggere tutti gli effetti della distinta
// setta la chiave 4 per il cursore per poter leggere tutti gli effetti
// della distinta
TString16 filter;
fcur->setfilter(filter,TRUE);
fcur->setkey(4);
TRectype darec(eff.curr()); // fissa i dati per la scelta degli ...
darec.zero(); // ... effetti nel primo e nell'ultimo record del cursore
darec.zero(); // ... effetti nel primo e nell'ultimo record del cursore
darec.put(EFF_NDIST, ndist);
darec.put(EFF_TIPODIST, tipodist);
TRectype arec(darec);
fcur->setregion(darec, arec);
long n = fcur->items();
fcur->freeze();
// se la stampa non si fa a video istanzia puntatore per la gestione della barra di attesa
// se la stampa non si fa a video istanzia puntatore per la gestione
// della barra di attesa
for (int j=0; j < ncopie; j++)
{
TProgind* pi;
@ -425,12 +433,13 @@ void TEmissione::print_dse(char tipost, int ndist, char tipodist, int ncopie, co
pi = new TProgind(n,"Stampa Distinta...",FALSE,TRUE,10);
_base_page_no = 0;
if (!is_vis)
pi->addstatus(1L); // aggiorna la barra d'attesa
_formdse->print(); // stampa il form
_base_page_no = printer().getcurrentpage() -1; // stampa numero di pagina (solo nella distinta)
pi->addstatus(1L); // aggiorna la barra d'attesa
_formdse->print(); // stampa il form
// stampa numero di pagina (solo nella distinta)
_base_page_no = printer().getcurrentpage() -1;
}
if (tipost == 'D') // se emetto distinta in definitiva ...
aggiorna_dist(fcur); // ... devo aggiornare flag di stampa distinta
if (tipost == 'D') // se emetto distinta in definitiva ...
aggiorna_dist(fcur);// ... devo aggiornare flag di stampa distinta
}
// gestione emissione effetti/distinte su moduli cartacei
@ -438,8 +447,9 @@ void TEmissione::print()
{
int ncopie = _msk->get_int(F_NCOPIE);
if (ncopie == 0) ncopie = 1;
printer().open(); // apre la stampante
const bool is_vis = printer().printtype() == screenvis; // TRUE se si stampa a video
printer().open();
// TRUE se si stampa a video
const bool is_vis = printer().printtype() == screenvis;
int emis = _msk->get_int(F_EMIS);
int ndist = _msk->get_int(F_NUMBER);
char tipodist = _msk->get(F_TIPODIST)[0];
@ -457,8 +467,8 @@ void TEmissione::print()
{
TString16 nomeform;
nomeform.format("rb%05ld.frm",codabi);// compongo il nome del form
if (!fexist(nomeform)) // ne controllo l'esistenza
nomeform = "rb.frm"; // se non esiste utilizzo il form generico
if (!fexist(nomeform)) // ne controllo l'esistenza se non
nomeform = "rb.frm"; // esiste utilizzo quello generico
_formrb = new TRiba_form(nomeform);
print_rb(tipost,ndist,tipodist,ncopie,is_vis);
}
@ -467,15 +477,16 @@ void TEmissione::print()
TString16 nomeform;
nomeform.format("dse%05ld.frm",codabi);// compongo il nome del form
if (!fexist(nomeform)) // ne controllo l'esistenza
nomeform = "dse.frm"; // se non esiste utilizzo il form generico
nomeform = "dse.frm"; // se non esiste utilizzo quello generico
_formdse = new TDistinta_form(nomeform, _firmrel);
_formdse->set_order(tipord);
print_dse(tipost,ndist,tipodist,ncopie,is_vis);
}
printer().close(); // chiude la stampante
printer().close();
}
// handler per gestire la conferma dell'annullamento dei dati inseriti nella maschera
// handler per gestire la conferma dell'annullamento dei dati inseriti
// nella maschera
bool TEmissione::annulla_handler(TMask_field& f, KEY k)
{
TMask &m = f.mask();
@ -568,7 +579,7 @@ bool TRiba_form::validate(TForm_item &cf, TToken_string &s)
cf.put_paragraph(valore);
cf.set("");
return (TRUE);
} // fine _FATT
}
return TForm::validate(cf, s);
}
@ -601,7 +612,7 @@ TDistinta_form::~TDistinta_form()
// gestione dei messaggi estesi nei campi
bool TDistinta_form::validate(TForm_item &cf, TToken_string &s)
{
const TString code(s.get(0)); // prende il primo parametro, il codice del messaggio
const TString code(s.get(0));
TString valore;
if (code == "_BANCAP")
{
@ -646,7 +657,7 @@ bool TDistinta_form::validate(TForm_item &cf, TToken_string &s)
cf.put_paragraph(valore);
cf.set("");
return (TRUE);
} // fine _DITTA
}
if (code == "_FATT")
{
// gestione dei campi relativi alle fatture a cui si riferisce un effetto
@ -681,7 +692,7 @@ bool TDistinta_form::validate(TForm_item &cf, TToken_string &s)
cf.put_paragraph(valore);
cf.set(""); // resetta il campo per la prossima stampa di questo item
return (TRUE);
} // fine _FATT
}
if (code == "_FOOTER")
{
// gestione dei campi del fondo pagina della distinta
@ -689,16 +700,18 @@ bool TDistinta_form::validate(TForm_item &cf, TToken_string &s)
// dove: <macro> è uno delle macro seguenti:
// "!NDOC" numero riba nella distinta
// "!TOTALE" totale presentato
TString in(s.get()); // prende il primo parametro, il codice del messaggio
TString in(s.get());
if (in[0]=='!')
{
in.ltrim(1);
TCursor* fcur = cursor();
long i = fcur->items();
//"!NDOC" prende il numero riba nella distinta guardando quanti elementi ha il cursore di stampa
//"!NDOC" prende il numero riba nella distinta guardando quanti
// elementi ha il cursore di stampa
if (in == "NDOC")
cf.set(format("%ld",i));
//"!TOTALE" calcola il totale presentato prendendo i totale degli effetti nel cursore di stampa
//"!TOTALE" calcola il totale presentato prendendo i totale degli
// effetti nel cursore di stampa
if (in == "TOTALE")
{
real totale = 0.0;
@ -716,7 +729,7 @@ bool TDistinta_form::validate(TForm_item &cf, TToken_string &s)
cf.put_paragraph(valore);
cf.set("");
return (TRUE);
} // fine _FOOTER
}
if (code== "_PAGENO")
{
// messaggio per stampare il numero di pagina corrente
@ -744,14 +757,14 @@ void TRiba_file:: validate(TCursor& cur,TRecord_text &rec, TToken_string &s, TSt
in.trim();
valore = in;
}
}// fine _FISSO
}
if (code == "_DATA")
{
// gestione della data di emissione delle riba
// sintassi: _DATA
const TDate data_emis = app().msk().get_date(F_DATAEMIS);
valore = data_emis.string();
}// fine _DATA
}
if (code == "_NRIBA")
{
// gestione dei campi relativi al flusso di effetti (riba)
@ -782,7 +795,7 @@ void TRiba_file:: validate(TCursor& cur,TRecord_text &rec, TToken_string &s, TSt
valore << rec;
}
}
}// fine _NRIBA
}
if (code == "_DITTA")
{
// gestione di campi della ditta corrente
@ -827,7 +840,7 @@ void TRiba_file:: validate(TCursor& cur,TRecord_text &rec, TToken_string &s, TSt
}
}
}
}// fine _DITTA
}
if (code == "_DEBITORE")
{
// gestione di campi della ditta corrente
@ -874,7 +887,7 @@ void TRiba_file:: validate(TCursor& cur,TRecord_text &rec, TToken_string &s, TSt
valore.trim();
}
}
}// fine _DEBITORE
}
if (code == "_BANCA")
{
// gestione dei campi relativi alla banca d'appoggio dell'effetto
@ -886,14 +899,14 @@ void TRiba_file:: validate(TCursor& cur,TRecord_text &rec, TToken_string &s, TSt
ban = cur.curr(-402);
valore << " " << ban.get("S0");
valore.trim();
}// fine _BANCA
}
if (code == "_FATT")
{
// gestione dei campi relativi alle/a fatture/a a cui si riferisce un effetto
// sintassi: _FATT,<opzione>
// dove: <opzione> è uno delle opzioni seguenti:
// "1" i dati della fattura andranno ad occupare più campi, primo segmento
// "2" i dati della fattura andranno ad occupare più campi, secondo segmento
// "1" i dati della fattura andranno ad occupare più campi, primo segmento
// "2" i dati della fattura andranno ad occupare più campi, secondo segmento
TLocalisamfile &eff = cur.file();
TEffetto effetto = eff.curr();
long num = effetto.numero();
@ -922,7 +935,7 @@ void TRiba_file:: validate(TCursor& cur,TRecord_text &rec, TToken_string &s, TSt
valore = descfatt.mid(40, l);
}
}
}// fine _FATT
}
if (code == "_IMPORTO")
{
// gestione di campi degli importi degli effetti nel flusso
@ -949,7 +962,7 @@ void TRiba_file:: validate(TCursor& cur,TRecord_text &rec, TToken_string &s, TSt
set_tot_importi(0.0);
}
}
}// fine _IMPORTO
}
str = valore;
}

View File

@ -1,6 +1,9 @@
#ifndef __EF0500_H
#define __EF0500_H
// DEFINIZIONE CAMPI MASCHERA PER LA EMISSIONE DEGLI EFFETTI
// campi maschera ef0500a.uml
#define F_TIPODIST 101
#define F_NUMBER 102
#define F_NUMBERRIGA 103

View File

@ -1,6 +1,7 @@
// DEFINIZIONE CAMPI MASCHERA PER LA EMISSIONE DEGLI EFFETTI
#include "ef0500.h"
PAGE "Emissione Effetti" -1 -1 77 19
PAGE "Emissione Effetti e Distinte" -1 -1 77 19
RADIOBUTTON F_TIPOEMIS 76
BEGIN

File diff suppressed because it is too large Load Diff

View File

@ -1,26 +1,27 @@
#ifndef __EF0600_H
#define __EF0600_H
// DEFINIZIONE CAMPI MASCHERA PER LE STAMPE DI CONTROLLO DEGLI EFFETTI
// campi maschera ef0600a.uml
#define F_DATA_STAMPA 101
#define RDB_TIPOST 102
#define F_DA_DATA 103
#define F_A_DATA 104
#define F_DABAN 105
#define F_ABAN 106
#define F_DA_DATA2 107
#define F_A_DATA2 108
#define F_NUMBERRIGA 109
#define F_DATIPODIST 110
#define F_DADIST 111
#define F_ATIPODIST 112
#define F_ADIST 113
#define F_DA_DATA3 114
#define F_A_DATA3 115
#define F_DACLI 116
#define F_ACLI 117
#define F_DA_DATA4 118
#define F_A_DATA4 119
#define F_DATA_STAMPA 101
#define RDB_TIPOST 102
#define F_DA_DATA 103
#define F_A_DATA 104
#define F_DABAN 105
#define F_ABAN 106
#define F_DA_DATA2 107
#define F_A_DATA2 108
#define F_NUMBERRIGA 109
#define F_DATIPODIST 110
#define F_DADIST 111
#define F_ATIPODIST 112
#define F_ADIST 113
#define F_DA_DATA3 114
#define F_A_DATA3 115
#define F_DACLI 116
#define F_ACLI 117
#define F_DA_DATA4 118
#define F_A_DATA4 119
#endif
#endif//__EF0600_H

View File

@ -1,6 +1,8 @@
// DEFINIZIONE MASCHERA PER LE STAMPE DI CONTROLLO DEGLI EFFETTI
#include "ef0600.h"
PAGE "Stampe di Controllo Effetti" -1 -1 60 13
PAGE "Stampe di Controllo Effetti" -1 -1 58 16
DATE F_DATA_STAMPA
BEGIN
@ -23,19 +25,19 @@ END
GROUPBOX DLG_NULL 55 3
BEGIN
PROMPT 1 6 "Stampa effetti per Data di scadenza"
PROMPT 1 7 "Stampa effetti per Data di scadenza"
GROUP 1
END
DATA F_DA_DATA
BEGIN
PROMPT 2 7 "Dalla Data "
PROMPT 2 8 "Dalla Data "
GROUP 1
END
DATA F_A_DATA
BEGIN
PROMPT 30 7 "Alla Data "
PROMPT 30 8 "Alla Data "
GROUP 1
VALIDATE DATE_CMP_FUNC >= F_DA_DATA
WARNING "Data limite superiore non valida"
@ -43,13 +45,13 @@ END
GROUPBOX DLG_NULL 55 4
BEGIN
PROMPT 1 6 "Stampa effetti per Banca di presentazione"
PROMPT 1 7 "Stampa effetti per Banca di presentazione"
GROUP 2
END
NUMBER F_DABAN 5
BEGIN
PROMPT 2 7 "Dalla Banca "
PROMPT 2 8 "Dalla Banca "
FLAGS "RZ"
GROUP 2
USE %BAN KEY 1 SELECT CODTAB ?= "?????"
@ -62,7 +64,7 @@ END
NUMBER F_ABAN 5
BEGIN
PROMPT 30 7 "Alla Banca "
PROMPT 30 8 "Alla Banca "
FLAGS "RZ"
GROUP 2
USE %BAN KEY 1 SELECT CODTAB ?= "?????"
@ -75,21 +77,21 @@ END
DATA F_DA_DATA2
BEGIN
PROMPT 2 8 "Dalla Data "
PROMPT 2 9 "Dalla Data "
GROUP 2
END
DATA F_A_DATA2
BEGIN
PROMPT 30 8 "Alla Data "
PROMPT 30 9 "Alla Data "
GROUP 2
VALIDATE DATE_CMP_FUNC >= F_DA_DATA2
WARNING "Data limite superiore non valida"
END
GROUPBOX DLG_NULL 55 6
GROUPBOX DLG_NULL 55 7
BEGIN
PROMPT 1 6 "Stampa effetti per Distinta"
PROMPT 1 7 "Stampa effetti per Distinta"
GROUP 3
END
@ -104,13 +106,13 @@ END
TEXT DLG_NULL
BEGIN
PROMPT 2 7 "Dalla Distinta "
PROMPT 2 8 "Dalla Distinta "
GROUP 3
END
LIST F_DATIPODIST 19
BEGIN
PROMPT 4 8 " "
PROMPT 4 9 " "
KEY 4
GROUP 3
ITEM " |** Nessuno **"
@ -121,7 +123,7 @@ END
NUMBER F_DADIST 7
BEGIN
PROMPT 4 9 " "
PROMPT 4 10 " "
FLAGS "R"
GROUP 3
KEY 4
@ -139,13 +141,13 @@ END
TEXT DLG_NULL
BEGIN
PROMPT 30 7 "Alla Distinta "
PROMPT 30 8 "Alla Distinta "
GROUP 3
END
LIST F_ATIPODIST 19
BEGIN
PROMPT 31 8 " "
PROMPT 31 9 " "
GROUP 3
KEY 4
ITEM " |** Nessuno **"
@ -156,7 +158,7 @@ END
NUMBER F_ADIST 7
BEGIN
PROMPT 31 9 " "
PROMPT 31 10 " "
FLAGS "R"
KEY 4
GROUP 3
@ -174,15 +176,27 @@ BEGIN
//WARNING "Limite superiore non valido"
END
TEXT DLG_NULL
BEGIN
PROMPT 2 11 "Dalla Data "
GROUP 3
END
DATA F_DA_DATA3
BEGIN
PROMPT 2 10 "Dalla Data "
PROMPT 4 12 " "
GROUP 3
END
TEXT DLG_NULL
BEGIN
PROMPT 30 11 "Alla Data "
GROUP 3
END
DATA F_A_DATA3
BEGIN
PROMPT 30 10 "Alla Data "
PROMPT 31 12 " "
GROUP 3
VALIDATE DATE_CMP_FUNC >= F_DA_DATA3
WARNING "Data limite superiore non valida"
@ -190,13 +204,13 @@ END
GROUPBOX DLG_NULL 55 4
BEGIN
PROMPT 1 6 "Stampa effetti per Cliente"
PROMPT 1 7 "Stampa effetti per Cliente"
GROUP 4
END
NUMBER F_DACLI 6
BEGIN
PROMPT 2 7 "Dal Cliente "
PROMPT 2 8 "Dal Cliente "
FLAGS "RZ"
GROUP 4
USE LF_CLIFO
@ -210,7 +224,7 @@ END
NUMBER F_ACLI 6
BEGIN
PROMPT 30 7 "Al Cliente "
PROMPT 30 8 "Al Cliente "
FLAGS "RZ"
GROUP 4
USE LF_CLIFO
@ -224,13 +238,13 @@ END
DATA F_DA_DATA4
BEGIN
PROMPT 2 8 "Dalla Data "
PROMPT 2 9 "Dalla Data "
GROUP 4
END
DATA F_A_DATA4
BEGIN
PROMPT 30 8 "Alla Data "
PROMPT 30 9 "Alla Data "
GROUP 4
VALIDATE DATE_CMP_FUNC >= F_DA_DATA2
WARNING "Data limite superiore non valida"

View File

@ -2,6 +2,10 @@
#include <tabutil.h>
#include "batbbnp.h"
////////////////////////////////////////////////////
// Classe per la gestione della Tabella di Ditta //
// "Banche di presentazione" //
////////////////////////////////////////////////////
class TBnp_table_app : public Tab_application
{
protected:
@ -27,7 +31,6 @@ void TBnp_table_app::init_query_insert_mode(TMask& m)
m.show(F_CODICECAB);
m.field(F_CODICEABI).check_type(CHECK_REQUIRED);
m.field(F_CODICECAB).check_type(CHECK_REQUIRED);
m.hide(F_ABI);
m.hide(F_CAB);
m.field(F_ABI).check_type(CHECK_NONE);
@ -40,7 +43,6 @@ void TBnp_table_app::init_insert_mode(TMask& m)
m.show(F_CODICECAB);
m.field(F_CODICEABI).check_type(CHECK_REQUIRED);
m.field(F_CODICECAB).check_type(CHECK_REQUIRED);
m.hide(F_ABI);
m.hide(F_CAB);
m.field(F_ABI).check_type(CHECK_NONE);
@ -50,12 +52,10 @@ void TBnp_table_app::init_insert_mode(TMask& m)
void TBnp_table_app::init_query_mode(TMask& m)
{
Tab_application::init_query_mode(m);
m.show(F_ABI);
m.show(F_CAB);
m.field(F_ABI).check_type(CHECK_REQUIRED);
m.field(F_CAB).check_type(CHECK_REQUIRED);
m.hide(F_CODICEABI);
m.hide(F_CODICECAB);
m.field(F_CODICEABI).check_type(CHECK_NONE);
@ -90,15 +90,13 @@ bool TBnp_table_app::stampa_handler(TMask_field& f, KEY k)
{
TMask &m = f.mask();
if (k == K_SPACE)
{
app().print();
}
return TRUE;
}
int ef0700(int argc, char* argv[])
{
TBnp_table_app a ;
a.run(argc, argv, "Tabella Banche di Presentazione");
a.run(argc, argv, "Gestione Tabella");
return 0;
}

View File

@ -1,24 +1,28 @@
#ifndef __FILETEXT_H
#define __FILETEXT_H
#ifndef __ARRAY_H
#include <array.h>
#endif //__ARRAY_H
#endif
#ifndef __CONFIG_H
#include <config.h>
#endif //__CONFIG_H
#endif
#ifndef __CHECS_H
#include <checks.h>
#endif //__CHECS_H
#endif
#ifndef __ASSOC_H
#include <assoc.h>
#endif //__ASSOC_H
#endif
#ifndef __RELATION_H
#include <relation.h>
#endif //__RELATION_H
#endif
#include <utility.h>
#include <fstream.h>
/////////////////////////////////////////// TTracciato_Campo /////////////////////////////////////////
// Classe per la definizione delle specifiche riguardanti un campo di un record //
// di un file di testo //
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////TTracciato_Campo////////////////////////////////
// Classe per la definizione delle specifiche riguardanti un campo di un //
// record di un file di testo //
///////////////////////////////////////////////////////////////////////////
class TTracciato_campo : public TObject
{
TString _name;//descrizione del contenuto
@ -60,9 +64,10 @@ public:
void set_picture(const TString& picture ) {_picture = picture;}
void set_message(const TString& message ) {_message = message;}
};
///////////////////////////////////////////////////// TTracciato_record ////////////////////////////////////////////////////
// Classe per la definizione delle specifiche riguardanti un record come insieme di più campi //
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////// TTracciato_record /////////////////////////
// Classe per la definizione delle specifiche riguardanti un record //
// come insieme di più campi //
///////////////////////////////////////////////////////////////////////
class TTracciato_record : public TObject
{
TString _type;//tipo del record
@ -82,10 +87,11 @@ public:
//ritorna il puntatore al tracciato campo n dell'array (NULL se non esiste)
TTracciato_campo* ptr(int n) {return (TTracciato_campo*)_tracciati_campo.objptr(n);}
};
////////////////////////////////////////// TRecord_text //////////////////////////////////////////
// Classe per la definizione di un record di un File_text, consiste di un //
// array che contiene tutti i valori dei campi risultanti dal tracciato record//
//////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////// TRecord_text /////////////////////////////////
// Classe per la definizione di un record di un File_text, consiste di un //
// array che contiene tutti i valori dei campi risultanti dal tracciato //
// record //
////////////////////////////////////////////////////////////////////////////
class TRecord_text : public TObject
{
TString _type;//tipo del record
@ -101,11 +107,11 @@ public:
const int items() const {return _array.items();}//ritorna il numero di elementi dell'array
virtual bool destroy(int index = -1, bool pack = FALSE) {return _array.destroy(index, pack);}
};
//////////////////////////////////////////////// TFile_text /////////////////////////////////////////////
// Classe per la definizione di un file di testo capace di leggersi e scriversi, //
///////////////////////////////// TFile_text //////////////////////////////////////
// Classe per la definizione di un file di testo capace di leggersi e scriversi,//
// in base ai tracciati record e campo risultanti; utilizzabile per trasferimenti//
// (ricezioni ed invii) di file o di relazioni //
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
// (ricezioni ed invii) di file o di relazioni //
///////////////////////////////////////////////////////////////////////////////////
class TFile_text : public TObject
{
ifstream* _read_file;//stream per lettura da file di testo
@ -177,4 +183,6 @@ public:
const TString& get_field(TRecord_text& rec, int ncampo);
void format_date(const TDate& data, const TString& form, TString& data_str);//formatta la data
TString& format_field(TTracciato_campo& tc, TString& campo);//formatta il campo secondo il suo tracciato
};
};
#endif //__FILETEXT_H