Errori da aga009 a aga023

git-svn-id: svn://10.65.10.50/trunk@4327 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
alex 1997-05-12 15:31:33 +00:00
parent 7affcbf253
commit 368454c533
9 changed files with 360 additions and 442 deletions

@ -311,7 +311,7 @@ bool TVariazione_effetti::handle_sheet(TMask_field &f, KEY k)
bool TVariazione_effetti::codval_handler(TMask_field& f, KEY k)
{
TMask &m = f.mask();
if (f.to_check(k, TRUE))
if (k == K_TAB && f.to_check(k, TRUE))
{
const TString & val = f.get();
// se non c'e valuta o se è lire disabilito i campi collegati
@ -331,7 +331,8 @@ bool TVariazione_effetti::codval_handler(TMask_field& f, KEY k)
}
sf.enable_column(F_IMPFATTVAL, valuta);
sf.enable_column(F_IMPEFFVAL, valuta);
sf.force_update();
if (f.focusdirty())
sf.force_update();
}
return TRUE;
}
@ -354,7 +355,8 @@ bool TVariazione_effetti::contab_handler(TMask_field& f, KEY k)
}
sf.enable_column(F_ANNO, da_contab);
sf.enable_column(F_NUMPART, da_contab);
sf.force_update();
if (f.focusdirty())
sf.force_update();
}
return TRUE;
}

@ -29,10 +29,6 @@ BEGIN
DISPLAY "Nr. distinta" NDIST
DISPLAY "Ragione Sociale Cliente@50" LF_CLIFO->RAGSOC
OUTPUT F_NPROGTR NPROGTR
// OUTPUT F_CODCF CODCF
// OUTPUT F_DATASCAD DATASCAD
// OUTPUT F_TIPOPAG TIPOPAG
// OUTPUT F_CFRAGSOC LF_CLIFO->RAGSOC
CHECKTYPE REQUIRED
MESSAGE COPY,10@
END
@ -337,7 +333,7 @@ BEGIN
FLAGS "D"
END
NUMBER F_NDIST 8
NUMBER F_NDIST 5
BEGIN
PROMPT 42 13 "Nr. distinta "
FIELD NDIST
@ -353,7 +349,7 @@ BEGIN
FLAGS "D"
END
NUMBER F_NRIGADIST 6
NUMBER F_NRIGADIST 4
BEGIN
PROMPT 42 14 "Nr. di riga "
FIELD NRIGADIST

@ -1,4 +1,4 @@
#include <relapp.h>
#include <relapp.h>
#include <msksheet.h>
#include <sheet.h>
#include <utility.h>
@ -29,7 +29,6 @@ protected:
virtual bool remove();
virtual TMask* get_mask(int mode) {return _msk;}
virtual bool changing_mask(int mode) {return FALSE;}
static bool codval_handler(TMask_field& f, KEY k);
static bool tipodist_handler(TMask_field& f, KEY k);
static bool importo_handler(TMask_field& f, KEY k);
static bool imp_aut_handler(TMask_field& f, KEY k);
@ -46,13 +45,15 @@ protected:
static void carica_riba(int tipopag);
static void ord_data();
static void ord_fatt();
TSheet_field& righe_sheet() const;
TSheet_field& righe_sel_sheet() const;
// ritorna un riferimento allo sheet degli effetti (righe) nella
// distinta
TSheet_field& righe_sheet() const { return (TSheet_field&)_msk->field(F_SHEET_RIBA); }
// ritorna un riferimento allo sheet delle righe
TSheet_field& righe_sel_sheet() const { return (TSheet_field&)_m2->field(F_SHEET); }
bool cerca(long num);
bool user_create();
bool user_destroy();
void aggiorna();
void elimina();
TToken_string* common_f(const TMask& m);
public:
virtual TRelation* get_relation() const {return _rel;}
@ -70,7 +71,7 @@ void TVariazione_distinte::init_query_mode(TMask&)
_msk->enable(F_NUMBER);
_msk->enable(F_TIPODIST);
_msk->reset(F_TOTIMP);
_msk->reset(F_TOTIMPVAL);
_msk->enable(F_TIPOPAG);
}
// quando si va in insert mode resetta i campi della maschera relativi
@ -79,11 +80,9 @@ void TVariazione_distinte::init_query_mode(TMask&)
void TVariazione_distinte::init_insert_mode(TMask&)
{
_msk->reset(F_TOTIMP);
_msk->reset(F_TOTIMPVAL);
_msk->enable(F_TOTIMPVAL);
_msk->enable(F_CODVAL);
_msk->disable(F_NUMBER);
_msk->disable(F_TIPODIST);
_msk->disable(F_TIPODIST);
}
// quando si va in modify mode disabilta i campi relativi alla chiave
@ -92,70 +91,40 @@ void TVariazione_distinte::init_modify_mode(TMask&)
{
_msk->disable(F_NUMBER);
_msk->disable(F_TIPODIST);
_msk->disable(F_TIPOPAG);
}
// ritorna il prossimo numero di distanta valido
// ritorna il prossimo numero di distinta valido
const char* TVariazione_distinte::get_next_key()
{
long ndist = 1L;
char tipodist = 'B';
long ndist = 99999L;
const TString16 tipodist = get_mask(MODE_INS)->get(F_TIPODIST);
TLocalisamfile& effetti = _rel->lfile();
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
err == NOERR;
return format("%d|%ld", F_NUMBER, ndist);
}
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);
effetti.read(_isgteq);
if (!effetti.empty() && tipodist == effetti.get(EFF_TIPODIST))
ndist = effetti.get_long(EFF_NDIST) + 1;
else
ndist = 1;
return format("%d|%ld",F_NUMBER,ndist);
}
// 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);
return r_sheet;
}
// ritorna un riferimento allo sheet delle righe
TSheet_field& TVariazione_distinte::righe_sel_sheet() const
{
TSheet_field& r_sheet = (TSheet_field&)_m2->field(F_SHEET);
return r_sheet;
}
// 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
for (int i = _distinta->items() - 1; i >= 0; 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
}
if (num == eff.get_long(EFF_NPROGTR))
return TRUE;
}
return trovato;
return FALSE;
}
// metodo che permette di scivere sull'array (in memoria) gli
@ -168,17 +137,19 @@ void TVariazione_distinte::aggiorna()
{
TToken_string& row = shrighe.row(i);
row.restart();
long num = row.get_long(1);
long num = row.get_long(shrighe.cid2index(F_NRIBA));
if (!cerca(num))// se non è già presente in memoria
{ // carico l'effetto nell'array
TLocalisamfile eff(LF_EFFETTI);
TRectype rec = eff.curr();
TRectype & rec = eff.curr();
eff.setkey(1);
rec.zero();
rec.put(EFF_NPROGTR, num);
int err = eff.read();
TEffetto* effetto= new TEffetto(rec);
eff.read();
TEffetto* effetto = new TEffetto(rec);
TArray& righedist = _distinta->righe();
righedist.add(effetto);
}
}
@ -194,8 +165,7 @@ TToken_string* TVariazione_distinte::common_f(const TMask& m)
long codabi = m.get_long(F_CODABIP); // dalla maschera
long codcab = m.get_long(F_CODCABP);
m.autosave(*_rel);
TToken_string* datidist= new TToken_string; // creo la token string
datidist->cut(0);
TToken_string * datidist= new TToken_string; // creo la token string
datidist->add(tipodist); // inserisco i dati nella
datidist->add(ndist); // token string
datidist->add(datadist);
@ -224,132 +194,126 @@ int TVariazione_distinte::read(TMask& m)
int items = _distinta->items();
TArray& righedist = _distinta->righe();
// carico tutti gli effetti della distinta nello sheet
for (int i = 0; i < items; i++)
{
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));
//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
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
riga.add(("Varie"));
riga.add(("Varie"));
riga.add(("Varie"));
}
//gestisco il controllo sulla presenza o meno di una valuta
TString codval(3);
codval = eff.get(EFF_CODVAL);
if (i == 0)
{
const bool condition = (codval.empty() || codval == "LIT");
m.enable(F_CODVAL, !condition);
m.enable(F_TOTIMPVAL, !condition);
if (!condition)
if (items > 0)
{
TEffetto& e = (TEffetto&)righedist[0];
m.set(F_DATA, e.get("DATADIST"));// distinta
m.set(F_CODABIP, e.get("CODABIP")); // dalla maschera
m.set(F_CODCABP, e.get("CODCABP"));
for (int i = 0; i < items; i++)
{
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));
//prendo la ragione sociale del cliente conoscendone il codice
const 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));
else
riga.add("");
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
riga.add("Varie");
riga.add("Varie");
riga.add("Varie");
}
//gestisco il controllo sulla presenza o meno di una valuta
const TString16 codval(eff.get(EFF_CODVAL));
if (i == 0)
{
const bool valuta = (codval.not_empty() && codval != "LIT");
m.set(F_CODVAL, codval);
m.enable(F_CODVAL, valuta);
}
riga.add(codval);
riga.add(eff.get(EFF_IMPORTO));
riga.add(eff.get(EFF_IMPORTOVAL));
shrighe.row(i) = riga;
}
riga.add(codval);
riga.add(eff.get(EFF_IMPORTO));
riga.add(eff.get(EFF_IMPORTOVAL));
shrighe.row(i) = riga;
}
}
}
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.
void TVariazione_distinte::elimina()
{
TEffetto eff;
TLocalisamfile file(LF_EFFETTI);
char tipodist = _msk->get(F_TIPODIST)[0];
long ndist = _msk->get_long(F_NUMBER);
TDistinta* distinta = app()._distinta;
TSheet_field& sf = (TSheet_field&)_msk->field(F_SHEET_RIBA);
bool condition = FALSE, deleted = FALSE;
TArray& righedist = distinta->righe();
//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;
}
TToken_string& row = sf.row(i);
condition = *row.get(0) == 'X';
if (condition)
{
long num = row.get_long(1);
//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)
{
// tolgo l'effetto dall'array
righedist.destroy(j,TRUE);
break;
}
}
// tolgo l'effetto dallo sheet
sf.destroy(i); deleted = TRUE;
eff.read(file, tipodist, ndist, k);
eff.zero(EFF_TIPODIST);
eff.zero(EFF_NDIST);
eff.zero(EFF_DATADIST);
eff.zero(EFF_NRIGADIST);
eff.zero(EFF_CODABIP);
eff.zero(EFF_CODCABP);
eff.rewrite(file);
}
else deleted = FALSE;
}
}
// riscrive distinta
int TVariazione_distinte::rewrite(const TMask& m)
{
// prima di riscrive controllo se ci sono effetti nello sheet
// selezionati per l'eliminazione
TEffetto eff;
TLocalisamfile file(LF_EFFETTI);
const char tipodist = _msk->get(F_TIPODIST)[0];
const long ndist = _msk->get_long(F_NUMBER);
TDistinta * distinta = app()._distinta;
TSheet_field& sf = righe_sheet();
bool condition = FALSE;
for (int i = 0; i < sf.items(); i++)
int items = sf.items();
int to_delete = 0;
for (int i = items - 1; i >= 0 ; i--)
{
TToken_string& row = sf.row(i);
// se trovo un effetto selezionato esco dal ciclo
if (condition = *row.get(0) == 'X') break;
}
if (condition)
if (yesno_box("Vuoi veramete eliminare gli effetti selezionati"))
elimina();
TToken_string& row = sf.row(i);
if (*row.get(0) == 'X') // to delete
to_delete++;
}
if (items <= to_delete)
{ // non posso cancellare tutti gli effetti di una distinta
error_box("Impossibile escludere tutti gli effetti dalla distinta.\n Utilizzare elimina per cancellarla.");
return NOERR;
}
if (to_delete > 0)
{
TArray& righedist = distinta->righe();
//ciclo sugli elementi dello sheet
for (int i = items - 1; i >= 0; i--)
{
TToken_string& row = sf.row(i);
if (*row.get(0) == 'X') // to delete
{
const long num = row.get_long(1);
//ciclo sugli elementi dell'array
for (int j = 0; j < distinta->items(); j++)
{
TEffetto& eff = (TEffetto&)righedist[j];
if (num == eff.get_long(EFF_NPROGTR))
{
// tolgo l'effetto dall'array
righedist.destroy(j,TRUE);
break;
}
}
// tolgo l'effetto dallo sheet
sf.destroy(i);
eff.read(file, tipodist, ndist, i + 1);
eff.zero(EFF_TIPODIST);
eff.zero(EFF_NDIST);
eff.zero(EFF_DATADIST);
eff.zero(EFF_NRIGADIST);
eff.zero(EFF_CODABIP);
eff.zero(EFF_CODCABP);
eff.rewrite(file);
}
}
}
//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();
err = _distinta->rewrite(common_f(m));
if (err == NOERR)
@ -408,7 +372,6 @@ bool TVariazione_distinte::user_create()
_clifo = new TLocalisamfile(LF_CLIFO);
_distinta = new TDistinta;
set_search_field(F_NUMBER);//setto il campo di ricerca della distinta
_msk->set_handler(F_CODVAL, codval_handler);
_msk->set_handler(F_TIPODIST, tipodist_handler);
_msk->set_handler(F_IMP, importo_handler);
_m2->set_handler(F_TOTIMPDIST, imp_aut_handler);
@ -446,7 +409,7 @@ void TVariazione_distinte::carica_riba(int tipopag)
// distinta quindi setta i campi ad essa relativi a zero
char tipodist = 0;
long ndist = 0;
long nrigadist = 0;
int nrigadist = 0;
TEffetto eff;
TLocalisamfile f(LF_EFFETTI);
// per prendere la ragione sociale del cliente di cui ho il codice
@ -461,80 +424,68 @@ void TVariazione_distinte::carica_riba(int tipopag)
int tipop = eff.get_int(EFF_TIPOPAG);
while ( (err == NOERR) && (tipodist == 0))
{
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
if (tipopag == 0) condition =TRUE;
if (condition)
const bool to_select = (tipopag == 0) || (tipopag == tipop) ||
((tipopag == 2 || tipopag ==5 || tipopag == 7) &&
(tipop == 2 || tipop ==5 || tipop == 7));
if (to_select)
{
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);
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
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
riga.add(("Varie"));
riga.add(("Varie"));
riga.add(("Varie"));
}
riga.add(eff.get(EFF_CODVAL));
riga.add(eff.get(EFF_IMPORTO));
riga.add(eff.get(EFF_IMPORTOVAL));
sf.row(i) = riga;
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);
clifo->zero();
clifo->put(CLI_TIPOCF, 'C');
clifo->put(CLI_CODCF, codcf);
if (clifo->read() == NOERR)
riga.add(clifo->get(CLI_RAGSOC));
else
riga.add("");
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
riga.add(("Varie"));
riga.add(("Varie"));
riga.add(("Varie"));
}
riga.add(eff.get(EFF_CODVAL));
riga.add(eff.get(EFF_IMPORTO));
riga.add(eff.get(EFF_IMPORTOVAL));
sf.row(i) = riga;
i++;
}
f.setkey(4);
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
bool TVariazione_distinte::codval_handler(TMask_field& f, KEY k)
{
TMask &m = f.mask();
TString val(f.get());
if (f.to_check(k, TRUE))
{
const bool condition = (val == "LIT" || val.empty());
m.enable(F_TOTIMPVAL,!condition);
if (condition)
m.reset(F_TOTIMPVAL);
}
return TRUE;
}
// Handler per gestire il fatto che una distinta allo sconto può
// contenere solo effetti cambiari
bool TVariazione_distinte::tipodist_handler(TMask_field& f, KEY k)
{
TMask &m = f.mask();
char tipo(f.get()[0]);
if(k == K_SPACE)
{
if(tipo == 'S')
m.set(F_TIPOPAG,2);
if (k == K_SPACE)
{
TMask &m = f.mask();
const bool allo_sconto = f.get()[0] == 'S';
m.enable(F_TIPOPAG, !allo_sconto);
if (allo_sconto)
m.set(F_TIPOPAG,2);
}
return TRUE;
}
@ -544,22 +495,22 @@ bool TVariazione_distinte::tipodist_handler(TMask_field& f, KEY k)
// princiapale)
bool TVariazione_distinte::importo_handler(TMask_field& f, KEY k)
{
TMask& m = f.mask();
TSheet_field& sf_riba = (TSheet_field&)m.field(F_SHEET_RIBA);
if (f.to_check(k, TRUE))
if (k == K_TAB && f.to_check(k, TRUE))
{
TMask& m = f.mask();
const TString16 codval = m.get(F_CODVAL);
const bool valuta = codval.not_empty() && codval != "LIT";
TSheet_field& sf_riba = (TSheet_field&)m.field(F_SHEET_RIBA);
const int mode = m.mode();
if( mode == MODE_INS || mode == MODE_MOD )
if( mode == MODE_INS || mode == MODE_MOD)
{
TMask* m2 = app()._m2;
long imp_pres = m.get_long(F_TOTIMP);// importo presentato
long imp = m.get_long(F_IMP);// importo distinta
long impdist = imp - imp_pres;
int tipopag = m.get_int(F_TIPOPAG);
real impdist = m.get_real(F_IMP) - m.get_real(F_TOTIMP);
const 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
if (impdist > 0)
if (impdist > ZERO)
{
app().begin_wait();
carica_riba(tipopag);
@ -568,12 +519,15 @@ bool TVariazione_distinte::importo_handler(TMask_field& f, KEY k)
m2->reset(F_IMPSEL);
m2->set(F_TOTIMPDIST, impdist);
m2->run();
}
if (impdist < 0)
error_box("Il valore di presentazione non può superare l'importo della distinta");
calcola_totale();
}
else
if (impdist < ZERO)
error_box("Il valore di presentazione non può superare l'importo della distinta");
}
if (f.focusdirty())
sf_riba.force_update();
}
sf_riba.force_update();
return TRUE;
}
@ -586,71 +540,57 @@ bool TVariazione_distinte::imp_aut_handler(TMask_field& f, KEY k)
// 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))
if (k == K_TAB && 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);
long tot_imp_dist = m2.get_long(F_TOTIMPDIST),
impsel = 0;
if (tot_imp_dist != 0 && impdist != 0)
const real impdist = m->get_real(F_IMP) - m->get_real(F_TOTIMP);
real res = m2.get_real(F_TOTIMPDIST);
if (res > ZERO && impdist > ZERO)
{ // se i due importi sono diversi da zero
TString val = m->get(F_CODVAL);
if (val == "LIT")
val.cut(0);
int items = sf.items();
// cerca se esiste un effetto con importo uguale a quello
// da caricare
bool caricato = FALSE;
for(int i = 0; i < items && !caricato; i++)
for (int i = 0; i < items; i++)
{
TToken_string& row = sf.row(i);
TString codval = row.get(7);
// 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);
impsel += imp;
caricato = TRUE;
}
TToken_string& row = sf.row(i);
TString16 codval = row.get(sf.cid2index(F_VALUTA));
// se la valuta non appare o è lire faccio in modo che vengano
// presi gli effetti con valuta inesistente
if (codval == " " || codval == "LIT")
codval.cut(0);
const bool valuta = codval.not_empty();
const real imp(row.get(sf.cid2index(valuta ? F_IMPORTOVAL : F_IMPORTO)));
if (imp == res && codval == val)
{
row.add('X', 0);
res = ZERO;
}
}
// se non esiste un effetto con importo uguale a quello
// da caricare carico l'importo sommando più effetti
if (!caricato)
for (i = 0; res > ZERO && i < items; i++)
{
for(int i = 0; i < items; i++)
{
TToken_string& row = sf.row(i);
TString codval = row.get(7);
// 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
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
m->set(F_CODVAL, codval);
val = m->get(F_CODVAL);
}
if (codval == val)
{
row.add('X',0);
impsel += imp;
}
}
if (impsel <= tot_imp_dist) continue;
else break;
}
}
TToken_string& row = sf.row(i);
TString16 codval = row.get(sf.cid2index(F_VALUTA));
if (codval == " " || codval == "LIT")
codval.cut(0);
const bool valuta = codval.not_empty();
const real imp = (row.get(sf.cid2index(valuta ? F_IMPORTOVAL : F_IMPORTO)));
// 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 (codval == val && imp <= res)
{
row.add('X',0);
res -= imp;
}
}
sf.force_update();
calcola();
}
@ -662,30 +602,27 @@ bool TVariazione_distinte::imp_aut_handler(TMask_field& f, KEY k)
// per l'aggiunta delle riba (ef0300c)
bool TVariazione_distinte::conferma_handler(TMask_field& f, KEY k)
{
TMask* msk = app()._msk;
TSheet_field& sf_riba = (TSheet_field&)msk->field(F_SHEET_RIBA);
if (k==K_ENTER)
if (k == K_ENTER)
{
TMask * msk = app()._msk;
TSheet_field & sf_riba = (TSheet_field&)msk->field(F_SHEET_RIBA);
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)
TSheet_field& sf = (TSheet_field&)m.field(F_SHEET);
int items = sf.items();
bool condition = FALSE;
for (int i = 0; i < items; i++)
{
TToken_string& row = sf.row(i);
condition = *row.get(0)== 'X';
if (condition)
if (*row.get(0) == 'X') // selected
{
row[0] = ' ';
row.add(" ", 0);
sf_riba.row(-1) = row;
}
}
}
sf_riba.force_update();// obbligo all'aggiornamento dello sheet
calcola_totale(); // obbligo al ricalcolo del totale
return TRUE;
}
@ -856,30 +793,23 @@ void TVariazione_distinte::calcola_totale()
{
TMask* m = app()._msk;
TSheet_field& sf = (TSheet_field&)m->field(F_SHEET_RIBA);
int items = sf.items();
real imp, impval, impdist, impdistval;
const int items = sf.items();
real impdist;
const TString16 codval = m->get(F_CODVAL);
const bool valuta = codval.not_empty() && codval != "LIT";
for (int i = 0; i < items; i++)
{
TToken_string& row = sf.row(i);
TToken_string& row = sf.row(i);
// se l'effetto è selezionato per l'eliminazione tolgo il suo importo
// dal totale presentazione della distinta
bool condition = *row.get(0) == 'X';
if (condition)
{
imp = row.get(8);
impdist -= imp;
impval = row.get(9);
impdistval -= impval;
}
// se l'effetto no è selzionato aggiungo il suo importo al totale
// presentazione della distinta
imp = row.get(8);
impdist += imp;
impval = row.get(9);
impdistval += impval;
if (*row.get(0) != 'X') // valido (not to delete)
{
const real imp = row.get(sf.cid2index(valuta ? F_IMPORTOVAL : F_IMPORTO));
impdist += imp;
}
}
m->set(F_TOTIMP, impdist);
m->set(F_TOTIMPVAL, impdistval);
m->set(F_IMP, impdist);
}
@ -890,29 +820,32 @@ void TVariazione_distinte::calcola()
TMask* m2 = app()._m2;
TMask* m = app()._msk;
TSheet_field& sf = (TSheet_field&)m2->field(F_SHEET);
int items = sf.items();
real imp, impsel;
long imp_pres = m->get_long(F_TOTIMP);
long importo = m->get_long(F_IMP);
long impdist = importo - imp_pres;
if (impdist == 0)
m2->set(F_TOTIMPDIST, importo);
m2->set(F_IMPSEL, impsel);
const int items = sf.items();
real impsel;
const real imp_pres = m->get_long(F_TOTIMP);
const real importo = m->get_long(F_IMP);
const real impdist = importo - imp_pres;
const TString16 codval = m->get(F_CODVAL);
const bool valuta = codval.not_empty() && codval != "LIT";
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
bool condition = *row.get(0) == 'X';
if (condition)
if (*row.get(0) == 'X')
{
imp = row.get(8);
const real imp(row.get(sf.cid2index(valuta ? F_IMPORTOVAL : F_IMPORTO)));
impsel += imp;
m2->set(F_IMPSEL, impsel);
if (impdist == 0 && imp_pres == 0)
m2->set(F_TOTIMPDIST, impsel);
}
}
m2->set(F_IMPSEL, impsel);
if (impdist == ZERO)
{
if (imp_pres == ZERO)
m2->set(F_TOTIMPDIST, impsel);
else
m2->set(F_TOTIMPDIST, importo);
}
}
// Notify per il calcolo dei totali relativi alla selezione effetti
@ -937,7 +870,8 @@ void TVariazione_distinte::aggiungi()
app().end_wait();
m2->reset(F_TOTIMPDIST);
m2->reset(F_IMPSEL);
m2->run();
m2->run();
calcola_totale();
}
// Notify per il calcolo dei totali relativi alla distinta
@ -954,6 +888,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, "Variazione Distinte");
a.run(argc, argv, "Distinte di presentazione");
return 0;
}

@ -13,7 +13,6 @@
#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

@ -13,78 +13,59 @@ BEGIN
END
LIST F_TIPODIST 17
BEGIN
PROMPT 2 1 "Tipo Distinta "
BEGIN
PROMPT 2 1 "Tipo Distinta "
KEY 4
FIELD LF_EFFETTI->TIPODIST
ITEM "I|All'incasso"
ITEM "B|Salvo buon fine"
ITEM "S|Allo sconto"
ITEM "S|Allo sconto"
END
LIST F_NUMBERRIGA 12
BEGIN
BEGIN
PROMPT 1 60 "Numero Riga Distinta "
KEY 4
FIELD LF_EFFETTI->NRIGADIST
ITEM "1|PRIMA RIGA"
FLAGS "D"
FIELD LF_EFFETTI->NRIGADIST
ITEM "1|PRIMA RIGA"
FLAGS "D"
END
NUMBER F_NUMBER 7
BEGIN
NUMBER F_NUMBER 5
BEGIN
PROMPT 48 1 "Numero Distinta "
FIELD LF_EFFETTI->NDIST
FLAGS "R"
FIELD LF_EFFETTI->NDIST
FLAGS "R"
KEY 4
USE LF_EFFETTI KEY 4 SELECT NRIGADIST = 1
INPUT NDIST F_NUMBER
INPUT NDIST F_NUMBER
INPUT TIPODIST F_TIPODIST
INPUT NRIGADIST F_NUMBERRIGA
DISPLAY "Nr. distinta" NDIST
DISPLAY "Tipo distinta" TIPODIST
OUTPUT F_NUMBER NDIST
OUTPUT F_TIPODIST TIPODIST
OUTPUT F_TIPODIST TIPODIST
OUTPUT F_NUMBERRIGA NRIGADIST
CHECKTYPE REQUIRED
END
DATE F_DATA
BEGIN
DATE F_DATA
BEGIN
PROMPT 2 2 "Data Distinta "
FIELD LF_EFFETTI->DATADIST
FIELD LF_EFFETTI->DATADIST
END
TEXT DLG_NULL
BEGIN
PROMPT 2 3 "Banca di Presentazione "
END
STRING F_DENBANP 50
BEGIN
PROMPT 26 3 ""
FLAGS "U"
USE %BAN KEY 2
INPUT S0 F_DENBANP
DISPLAY "Denominazione@50" S0
DISPLAY "Codice ABI" CODTAB[1,5]
DISPLAY "Codice CAB" CODTAB[6,10]
OUTPUT F_DENBANP S0
OUTPUT F_CODABIP CODTAB[1,5]
OUTPUT F_CODCABP CODTAB[6,10]
END
NUMBER F_CODABIP 5 0
BEGIN
PROMPT 15 4 "Codice ABI "
BEGIN
PROMPT 15 3 "Codice ABI "
FIELD LF_EFFETTI->CODABIP
FLAGS "RZ"
USE %BAN KEY 1 SELECT CODTAB ?= "?????"
USE %BAN KEY 1 SELECT CODTAB ?= "?????"
INPUT CODTAB F_CODABIP
DISPLAY "Codice ABI" CODTAB[1,5]
DISPLAY "Denominazione@50" S0
OUTPUT F_CODABIP CODTAB[1,5]
OUTPUT F_CODCABP CODTAB[6,10]
OUTPUT F_CODCABP CODTAB[6,10]
OUTPUT F_DENBANP S0
CHECKTYPE REQUIRED
WARNING "Codice ABI assente"
@ -92,45 +73,53 @@ END
NUMBER F_CODCABP 5 0
BEGIN
PROMPT 15 5 "Codice CAB "
PROMPT 15 4 "Codice CAB "
FIELD LF_EFFETTI->CODCABP
FLAGS "RZ"
USE %BAN KEY 1 SELECT CODTAB ?= "??????????"
INPUT CODTAB[1,5] F_CODABIP
INPUT CODTAB[6,10] F_CODCABP
USE %BAN KEY 1 SELECT CODTAB ?= "??????????"
INPUT CODTAB[1,5] F_CODABIP
INPUT CODTAB[6,10] F_CODCABP
DISPLAY "Codice ABI" CODTAB[1,5]
DISPLAY "Codice CAB" CODTAB[6,10]
DISPLAY "Denominazione@50" S0
DISPLAY "Denominazione@50" S0
OUTPUT F_CODABIP CODTAB[1,5]
OUTPUT F_CODCABP CODTAB[6,10]
CHECKTYPE REQUIRED
CHECKTYPE REQUIRED
VALIDATE REQIF_FUNC 1 F_CODCABP
WARNING "Banca assente"
END
NUMBER F_TOTIMP 18 2
BEGIN
PROMPT 2 6 "Valore di presentazione "
PICTURE "###.###.###.###,@@"
STRING F_DENBANP 50
BEGIN
PROMPT 2 5 "Banca di Presentazione "
FLAGS "U"
USE %BAN KEY 2
INPUT S0 F_DENBANP
DISPLAY "Denominazione@50" S0
DISPLAY "Codice ABI" CODTAB[1,5]
DISPLAY "Codice CAB" CODTAB[6,10]
OUTPUT F_DENBANP S0
OUTPUT F_CODABIP CODTAB[1,5]
OUTPUT F_CODCABP CODTAB[6,10]
END
NUMBER F_IMP 18 2
BEGIN
PROMPT 2 7 "Importo Distinta "
PICTURE "###.###.###.###,@@"
NUM_EXPR #F_IMP>=#F_TOTIMP
WARNING "Il valore di presentazione non puo' superare l'importo della distinta"
LIST F_TIPOPAG 24
BEGIN
PROMPT 2 6 "Tipo Effetti "
FIELD LF_EFFETTI->TIPOPAG
ITEM "2|Tratta"
ITEM "3|Ricevuta Bancaria"
ITEM "4|Cessione"
ITEM "5|Paghero'"
ITEM "6|Lettera di credito"
ITEM "7|Tratta accettata"
ITEM "8|Rapporti interb. diretti"
ITEM "9|Bonifico"
END
NUMBER F_TOTIMPVAL 18 3
BEGIN
PROMPT 2 8 "Valore di pres. in val. "
PICTURE "###.###.###.###,@@@"
END
STRING F_CODVAL 3
BEGIN
PROMPT 48 8 "Codice Valuta "
BEGIN
PROMPT 2 7 "Codice Valuta "
FLAGS "UZ"
USE %VAL
INPUT CODTAB F_CODVAL
@ -139,33 +128,33 @@ BEGIN
OUTPUT F_CODVAL CODTAB
END
LIST F_TIPOPAG 24
BEGIN
PROMPT 2 9 "Tipo Effetto "
FIELD LF_EFFETTI->TIPOPAG
ITEM "0| "
ITEM "2|Effetto cambiario"
ITEM "3|Ricevuta Bancaria"
ITEM "4|Cessione"
ITEM "5|Effetto cambiario"
ITEM "6|Lettera di credito"
ITEM "7|Effetto cambiario"
ITEM "8|Rapporti interb.diretti"
ITEM "9|Bonifici"
NUMBER F_IMP 18 2
BEGIN
PROMPT 2 8 "Importo Distinta "
PICTURE "###.###.###.###,@@"
NUM_EXPR #F_IMP>=#F_TOTIMP
WARNING "Il valore di presentazione non puo' superare l'importo della distinta"
END
NUMBER F_TOTIMP 18 2
BEGIN
PROMPT 2 9 "Valore di presentazione "
FLAGS "D"
PICTURE "###.###.###.###,@@"
END
SPREADSHEET F_SHEET_RIBA 78 6
BEGIN
BEGIN
PROMPT 1 12 "RIGHE DISTINTA"
ITEM ""
ITEM "Nr. Ri.Ba."
ITEM "Da elim."
ITEM "Nr. Ri.Ba."
ITEM "Scadenza"
ITEM "Cliente@50"
ITEM "Nr. Fattura"
ITEM "Cliente@50"
ITEM "Nr. Fattura"
ITEM "Data Fattura"
ITEM "Nr. Rata"
ITEM "Nr. Rata"
ITEM "Valuta"
ITEM "Importo"
ITEM "Importo"
ITEM "Importo Val."
END

@ -3,11 +3,9 @@
PAGE "Righe Distinta" -1 -1 63 13
LISTBOX F_CHECK 5
BOOLEAN F_CHECK
BEGIN
PROMPT 2 1 "Selezionato "
ITEM " |FALSE"
ITEM "X|TRUE"
PROMPT 2 1 "Da eliminare "
END
NUMBER F_NRIBA 7

@ -21,7 +21,7 @@ END
LIST F_TIPORD 14
BEGIN
PROMPT 2 4 "Tipo Ordinamento "
ITEM " |** Nessuno **"
ITEM " | "
ITEM "S|Scadenza "
ITEM "F|Fattura "
END
@ -29,7 +29,7 @@ END
SPREADSHEET F_SHEET 74 9
BEGIN
PROMPT 2 6 "EFFETTI SELEZIONABILI"
ITEM ""
ITEM "Sel."
ITEM "Nr. Ri.Ba."
ITEM "Scadenza"
ITEM "Cliente@50"
@ -65,4 +65,4 @@ END
ENDPAGE
ENDMASK
#include "EF0300B.UML"
#include "ef0300d.uml"

@ -28,7 +28,7 @@ BEGIN
ITEM "S| Allo sconto"
END
NUMBER F_NUMBER 7
NUMBER F_NUMBER 5
BEGIN
PROMPT 43 5 "Numero Distinta "
FLAGS "R"

@ -115,13 +115,13 @@ BEGIN
PROMPT 4 9 " "
KEY 4
GROUP 3
ITEM " |** Nessuno **"
ITEM " | "
ITEM "I|All'incasso"
ITEM "B|Salvo buon fine"
ITEM "S|Allo sconto"
END
NUMBER F_DADIST 7
NUMBER F_DADIST 5
BEGIN
PROMPT 4 10 " "
FLAGS "R"
@ -150,13 +150,13 @@ BEGIN
PROMPT 31 9 " "
GROUP 3
KEY 4
ITEM " |** Nessuno **"
ITEM " | "
ITEM "I|All'incasso"
ITEM "B|Salvo buon fine"
ITEM "S|Allo sconto"
END
NUMBER F_ADIST 7
NUMBER F_ADIST 5
BEGIN
PROMPT 31 10 " "
FLAGS "R"