Gestiono tracciato CBI "arricchito"

git-svn-id: svn://10.65.10.50/branches/R_10_00@23003 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2014-10-27 08:20:36 +00:00
parent dc46bc0acc
commit 7877d04c64
15 changed files with 323 additions and 517 deletions

@ -6,11 +6,9 @@ int main(int argc, char** argv)
const char op = argc < 2 ? '0' : argv[1][1];
switch (op)
{
/*
case '1':
ef0200(argc,argv);// GENERAZIONE EFFETTI DA E/C (OBSOLETO NON USARE PIU")
ef0200(argc,argv);// Tabella Mandati
break;
*/
case '2':
ef0300(argc,argv);// AGGIORNAMENTO DISTINTE (DISTINTE DI PRESENTAZIONE)
break;

@ -25,14 +25,17 @@ protected:
virtual void init_insert_mode(TMask&);
virtual bool get_next_key(TToken_string& key);
virtual void init_modify_mode(TMask&);
static bool clifo_handler(TMask_field& f, KEY k);
static bool datascad_handler(TMask_field& f, KEY k);
static bool mandato_handler(TMask_field& f, KEY k);
static bool handle_sheet(TMask_field& f, KEY);
static bool cambio_handler(TMask_field& f, KEY k);
static bool codval_handler(TMask_field& f, KEY k);
static bool contab_handler(TMask_field& f, KEY k);
static bool fatt_handler(TMask_field& f, KEY k);
static bool impeff_notify(TSheet_field& s, int r, KEY key);
TSheet_field& cess_sheet() const;
TSheet_field& righe_sheet() const;
void common_f(const TMask& m);
@ -44,7 +47,7 @@ protected:
bool user_create();
bool user_destroy();
virtual TMask* get_mask(int mode) {return _msk;}
virtual bool changing_mask(int mode) {return FALSE;}
virtual bool changing_mask(int mode) {return false;}
virtual void ini2mask(TConfig& ini, TMask& m, bool query);
@ -117,7 +120,7 @@ bool TVariazione_effetti::get_next_key(TToken_string& key)
nprogtr += effetti.get_long(EFF_NPROGTR);
}
key.format("%d|%ld",F_NPROGTR,nprogtr);
return TRUE;
return true;
}
// ritorna un riferimento allo sheet dei cessionari
@ -150,7 +153,7 @@ void TVariazione_effetti::common_f(const TMask& m)
{
TToken_string& row = shcess.row(i);
if ( row.items()== 0 ) continue; // salta le righe vuote
TRectype& rec = _effetto->row_c(ii, TRUE);
TRectype& rec = _effetto->row_c(ii, true);
row.restart();
rec.zero();
rec.put(CES_NPROGTR, nprogtr);
@ -171,7 +174,7 @@ void TVariazione_effetti::common_f(const TMask& m)
real imp_eff(row.get(shrighe.cid2index(F_IMPEFF)));
if (imp_eff == 0.0) continue; // salta le righe con importo nullo
row.restart();
TRectype& rec = _effetto->row_r(ii, TRUE);
TRectype& rec = _effetto->row_r(ii, true);
rec.zero();
rec.put(REFF_NPROGTR, nprogtr);
rec.put(REFF_NRIGATR, ii);
@ -301,16 +304,19 @@ bool TVariazione_effetti::user_create()
_rel = new TRelation(LF_EFFETTI);
_effetto = new TEffetto;
_msk = new TMask("ef0100a") ;
_msk->set_handler(F_CODCF, clifo_handler);
_msk->set_handler(F_DATASCAD, datascad_handler);
_msk->set_handler(F_MANDATO, mandato_handler);
_msk->set_handler(F_CODVAL, codval_handler);
_msk->set_handler(F_CAMBIO, cambio_handler);
_msk->set_handler(F_EFFCONT, contab_handler);
_msk->set_handler(F_SHEET_RIGHE, handle_sheet);
righe_sheet().set_append(TRUE);
righe_sheet().set_append(true);
righe_sheet().set_notify(impeff_notify);
_msk->sfield(F_SHEET_RIGHE).sheet_mask().set_handler(F_NUMFATT, fatt_handler);
return TRUE;
return true;
}
// distrugge la relap
@ -319,7 +325,7 @@ bool TVariazione_effetti::user_destroy()
delete _msk;
delete _effetto;
delete _rel;
return TRUE;
return true;
}
// handler che permette di effettuare il controllo sul fatto
@ -333,23 +339,23 @@ bool TVariazione_effetti::handle_sheet(TMask_field &f, KEY k)
{ // si controllano le righe del effetto nello sheet
TSheet_field& sf = m.sfield(F_SHEET_RIGHE);
int items = sf.items();
bool found = FALSE;
bool found = false;
for (int i = 0; i < items && !found; i++)// scandisco tutte le righe dello sheet
{
TToken_string& row = sf.row(i);
real imp_eff(row.get(sf.cid2index(F_IMPEFF)));
// controlla che le righe abbiano un importo
if (imp_eff != 0.0) found = TRUE;
if (imp_eff != 0.0) found = true;
}
// 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(TR("L'effetto non può contenere righe con importo nullo!"));
return FALSE;
return false;
}
}
return TRUE;
return true;
}
bool TVariazione_effetti::clifo_handler(TMask_field& f, KEY k)
@ -389,14 +395,29 @@ bool TVariazione_effetti::datascad_handler(TMask_field& f, KEY k)
return f.error_box(FR("La data fattura della riga %d è successiva alla data di scadenza"), r+1);
}
}
return TRUE;
return true;
}
bool TVariazione_effetti::mandato_handler(TMask_field& f, KEY k)
{
if (k == K_TAB && !f.empty())
{
TMask& m = f.mask();
TEdit_field& i = m.efield(F_IBAN_STATO);
i.validate(K_TAB);
m.set(F_CODABI, m.get(F_BBAN_ABI));
m.set(F_CODCAB, m.get(F_BBAN_CAB));
}
return true;
}
// handler che permette il controllo sulla abilitazione dei campi collegati
// al codice valuta
bool TVariazione_effetti::codval_handler(TMask_field& f, KEY k)
{
if (f.to_check(k, TRUE))
if (f.to_check(k, true))
{
TMask& m = f.mask();
const TString& val = f.get();
@ -419,14 +440,14 @@ bool TVariazione_effetti::codval_handler(TMask_field& f, KEY k)
if (f.focusdirty())
sf.force_update();
}
return TRUE;
return true;
}
// handler che gestisce la modifica del cambio
bool TVariazione_effetti::cambio_handler(TMask_field& f, KEY k)
{
TMask &m = f.mask();
//if (k == K_TAB && f.to_check(k, TRUE))
//if (k == K_TAB && f.to_check(k, true))
if (k == K_TAB && f.focusdirty())
{
const real cambio = f.get();
@ -447,7 +468,7 @@ bool TVariazione_effetti::cambio_handler(TMask_field& f, KEY k)
if (f.focusdirty())
sf.force_update();
}
return TRUE;
return true;
}
// handler che permette il controllo sulla abilitazione dei campi collegati
@ -488,7 +509,7 @@ bool TVariazione_effetti::fatt_handler(TMask_field& f, KEY k)
}
}
}
return TRUE;
return true;
}
bool TVariazione_effetti::contab_handler(TMask_field& f, KEY k)
@ -502,7 +523,7 @@ bool TVariazione_effetti::contab_handler(TMask_field& f, KEY k)
sf.enable_column(F_NUMPART, da_contab);
sf.force_update();
}
return TRUE;
return true;
}
// funzione chiamata dal notify dello sheet per effettuare il calcolo degli
@ -531,14 +552,14 @@ void TVariazione_effetti::calcola_totali()
// 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))
if (s.to_check(key, true))
{
calcola_totali();
}
//se rimane una sola riga nello sheet non la si può cancellare
if (key == K_DEL && s.items() == 1)
return s.error_box(TR("IMPOSSIBILE CANCELLARE: L'effetto deve contenere almeno una riga!"));
return TRUE;
return true;
}
int ef0100(int argc, char* argv[])

@ -42,6 +42,7 @@
#define F_DCIG 237
#define F_CONTSEP 238
#define F_DESCONTSEP 239
#define F_MANDATO 240
#define F_IBAN 250
#define F_IBAN_STATO 251

@ -6,14 +6,14 @@ ENDPAGE
PAGE "Testata/Righe" 0 2 0 0
GROUPBOX DLG_NULL 78 6
GROUPBOX DLG_NULL 78 5
BEGIN
PROMPT 0 0 ""
END
LIST F_TIPOCF 10
LIST F_TIPOCF 1 10
BEGIN
PROMPT 1 1 "Tipo effetto "
PROMPT 1 1 "Effetto "
ITEM "C|Attivo"
MESSAGE SHOW,8@|HIDE,9@
ITEM "F|Passivo"
@ -23,7 +23,7 @@ END
NUMBER F_NPROGTR 7
BEGIN
PROMPT 1 2 "Numero "
PROMPT 30 1 "Numero "
FIELD NPROGTR
KEY 1
USE LF_EFFETTI SELECT (TIPOCF=#F_TIPOCF)&&(BETWEEN(CODCF,#F_CODCF,#F_CODCF))
@ -44,19 +44,19 @@ END
TEXT DLG_NULL
BEGIN
PROMPT 1 3 "Cliente"
PROMPT 1 2 "Cliente"
GROUP 8
END
TEXT DLG_NULL
BEGIN
PROMPT 1 3 "Fornitore"
PROMPT 1 2 "Fornitore"
GROUP 9
END
NUMBER F_CODCF 6
BEGIN
PROMPT 15 3 ""
PROMPT 10 2 ""
FIELD CODCF
USE LF_CLIFO
INPUT TIPOCF F_TIPOCF SELECT
@ -74,7 +74,7 @@ END
STRING F_CFRAGSOC 50
BEGIN
PROMPT 25 3 ""
PROMPT 23 2 ""
USE LF_CLIFO KEY 2
INPUT TIPOCF F_TIPOCF SELECT
INPUT RAGSOC F_CFRAGSOC
@ -88,7 +88,7 @@ END
DATE F_DATASCAD
BEGIN
PROMPT 1 4 "Data scadenza "
PROMPT 1 3 "Scadenza "
FIELD DATASCAD
KEY 3
USE LF_EFFETTI KEY 3 SELECT (TIPOCF=#F_TIPOCF)&&(BETWEEN(CODCF, #F_CODCF, #F_CODCF))
@ -109,21 +109,29 @@ END
LIST F_TIPOPAG 24
BEGIN
PROMPT 1 6 "Tipo pagamento "
PROMPT 1 5 "Tipo pagamento "
FIELD TIPOPAG
ITEM "2|Tratta"
MESSAGE DISABLE,F_MANDATO
ITEM "3|Ricevuta Bancaria"
MESSAGE DISABLE,F_MANDATO
ITEM "4|Cessione"
MESSAGE DISABLE,F_MANDATO
ITEM "5|Paghero'"
MESSAGE DISABLE,F_MANDATO
ITEM "6|Lettera di credito"
MESSAGE DISABLE,F_MANDATO
ITEM "7|Tratta accettata"
MESSAGE DISABLE,F_MANDATO
ITEM "8|Rapporti interb. diretti"
MESSAGE ENABLE,F_MANDATO
ITEM "9|Bonifico"
MESSAGE DISABLE,F_MANDATO
END
STRING F_ULTCLASS 1
BEGIN
PROMPT 46 6 "Ulteriore classificazione "
PROMPT 46 5 "Ulteriore classificazione "
FIELD ULTCLASS
USE %CLR
INPUT CODTAB[1,1] F_TIPOPAG SELECT
@ -133,6 +141,22 @@ BEGIN
OUTPUT F_ULTCLASS CODTAB[2,2]
END
STRING F_MANDATO 35
BEGIN
PROMPT 1 6 "Mandato R.I.D. "
USE &EFMAN SELECT I0=#F_CODCF
INPUT CODTAB F_MANDATO
DISPLAY "Codice@35" CODTAB
DISPLAY "Data@10" D0
DISPLAY "IBAN@34" S1
DISPLAY "Descrizione@50" S0
OUTPUT F_MANDATO CODTAB
OUTPUT F_IBAN S1
CHECTYPE REQUIRED
FIELD MANDATO
ADD RUN ef0 -1 &EFMAN
END
STRING F_CODVAL 3
BEGIN
PROMPT 1 7 "Codice valuta "

@ -1,254 +1,13 @@
#include <applicat.h>
#include <sheet.h>
#include <msksheet.h>
#include <modtbapp.h>
#include "ef0.h"
#include "ef0200.h"
#include <clifo.h>
#include <effetti.h>
class Creazione_Effetti_da_EC : public TSkeleton_application
class TMandati_app : public TTable_module_application
{
TMask * _msk;
TArray_sheet * _Partite_aperte;
real _residuo;
void Load_Partite_Aperte(const long cli);
static bool Gen_Handler(TMask_field& f, KEY k);
static bool Gen_Notify(TSheet_field& sheet, int r, KEY k);
static bool Cli_Handler(TMask_field& f, KEY k);
virtual bool create();
virtual bool destroy();
virtual void main_loop();
public:
real get_res() {return _residuo;}
void set_res(const real& a) {_residuo = a;}
TMask* get_msk() {return _msk;}
Creazione_Effetti_da_EC() : _residuo(0.0) {}
public:
};
inline Creazione_Effetti_da_EC& app() {return (Creazione_Effetti_da_EC&)main_app();}
void Creazione_Effetti_da_EC::Load_Partite_Aperte(const long cli)
{
/*
Caricamento partite aperte da E.C.
Questo che segue e' pseudo-codice; andra' verificato non appena
sara' completato lo scadenziario.
TLocalisamfile Ec(LF_........);
* Carica tutte le partite aperte del cliente *
Ec.zero();
Ec.put(EC_CODCLI,cli);
Ec.read();
Finche' si tratta dello stesso cliente...
while (Ec.good() && Ec.get_long(EC_CODCLI) == cli)
{
Controlla se la partita esaminata e' aperta...
if (Ec.get(EC_APERTA))
{
Con questo le carica tutte nello sheet...
TToken_string riga(80);
riga.cut(0);
riga.add(Ec.get(EC_ANNO));
riga.add(Ec.get(EC_NUMERO));
riga.add(Ec.get(EC_DATADOC));
riga.add(Ec.get(EC_SALDO));
_Partite_aperte->add(riga);
}
Legge il prossimo record
Ec.next()
}
*/
TToken_string riga(80);
riga.cut(0);
riga.add("");
riga.add("1994");
riga.add("1");
riga.add("10-11-94");
riga.add("19000000");
_Partite_aperte->add(riga);
riga.cut(0);
riga.add("");
riga.add("1994");
riga.add("2");
riga.add("11-11-94");
riga.add("18000000");
_Partite_aperte->add(riga);
riga.cut(0);
riga.add("");
riga.add("1994");
riga.add("3");
riga.add("16-11-94");
riga.add("23009000");
_Partite_aperte->add(riga);
riga.cut(0);
riga.add("");
riga.add("1994");
riga.add("4");
riga.add("19-11-94");
riga.add("450600");
_Partite_aperte->add(riga);
}
bool Creazione_Effetti_da_EC::Gen_Handler(TMask_field& f, KEY k)
{
if (k == K_TAB && f.focusdirty())
{
TMask& m = f.mask();
real importo = m.get(F_RATA);
importo += m.get_real(F_SPESE);
importo += m.get_real(F_BOLLI);
m.set(F_IMPEFF, importo);
f.set_focusdirty(FALSE);
}
return TRUE;
}
bool Creazione_Effetti_da_EC::Gen_Notify(TSheet_field& sheet, int r, KEY k)
{
if (k == K_CTRL + K_DEL)
return TRUE;
if (k == K_INS)
{
if (app().get_res().is_zero())
{
warning_box(TR("Residuo da ripartire gia' annullato"));
return FALSE;
}
else
return TRUE;
}
TToken_string & row = sheet.row(r);
const real importo(row.get(1));
static real old_rata;
switch (k)
{
case K_SPACE:
old_rata = importo;
break;
case K_DEL:
{
const real new_res = app().get_res() + importo;
app().set_res(new_res);
}
break;
case K_ENTER:
{
const real new_res = app().get_res() - importo + old_rata;
if (new_res < ZERO)
{
warning_box(TR("Non e' possibile superare l'importo da ripartire"));
if (old_rata.is_zero())
{
row.add(app().get_res().string(),1);
app().set_res(ZERO);
}
else
row.add(old_rata.string(),1);
}
else
app().set_res(new_res);
real totale = importo;
totale+= real(row.get(2));
totale+= real(row.get(3));
row.add(totale.string(),4);
}
break;
default:
break;
}
sheet.mask().set(F_RESIDUO,app().get_res());
return TRUE;
}
bool Creazione_Effetti_da_EC::Cli_Handler(TMask_field&f, KEY k)
{
if (f.focusdirty())
{
TSheet_field& sheet =(TSheet_field&)f.mask().field(F_SHEET_EFF);
sheet.reset();
sheet.force_update();
}
return TRUE;
}
bool Creazione_Effetti_da_EC::create()
{
_msk = new TMask("ef0200a");
TSheet_field& sheet = _msk->sfield(F_SHEET_EFF);
sheet.set_notify(Gen_Notify);
sheet.enable_column(4,FALSE);
TMask& mask= sheet.sheet_mask();
mask.set_handler(F_RATA,Gen_Handler);
mask.set_handler(F_SPESE,Gen_Handler);
mask.set_handler(F_BOLLI,Gen_Handler);
_msk->set_handler(F_CODCF,Cli_Handler);
return TSkeleton_application::create();
}
bool Creazione_Effetti_da_EC::destroy()
{
if (_msk != NULL) delete _msk;
return TRUE;
}
void Creazione_Effetti_da_EC::main_loop()
{
KEY tasto;
do {
tasto=get_msk()->run();
switch (tasto)
{
case K_ENTER: // first check if the application can write effects
{
TSheet_field& sheet =(TSheet_field&)get_msk()->field(F_SHEET_EFF);
if (!_residuo && sheet.items()>0)
message_box(TR("Perform writing procedure..."));
break;
}
case K_F6: //Selects opened counts from E.C.
{
_Partite_aperte = new TArray_sheet(-1,1,0,-1,TR("Selezione partite aperte"),"@1|Anno|Numero|Data documento|Saldo@15", 0, 1);
Load_Partite_Aperte(get_msk()->get_long(F_CODCF));
if (_Partite_aperte->run() == K_ENTER)
{
_residuo = ZERO;
for (int i = 0; i < _Partite_aperte->items(); i++)
if (_Partite_aperte->checked(i))
_residuo += real(_Partite_aperte->row(i).get(4));
get_msk()->set(F_RESIDUO,_residuo);
TSheet_field& sheet = (TSheet_field&)get_msk()->field(F_SHEET_EFF);
sheet.reset();
}
delete _Partite_aperte;
break;
}
default:
break;
}
} while (tasto!=K_QUIT);
}
int ef0200(int argc, char* argv[])
{
Creazione_Effetti_da_EC a ;
a.run(argc, argv, TR("Creazione effetti da E.C."));
TMandati_app a;
a.run(argc, argv, TR("Tabelle modulo Effetti"));
return 0;
}

@ -8,24 +8,8 @@
#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
// campi per maschera ef0200b
#define F_DATASCAD 101
#define F_RATA 102
#define F_SPESE 103
#define F_BOLLI 104
#define F_IMPEFF 105
#define F_MANDATO 110
#define F_DESCR 111
#endif // __EF0200_H

@ -1,18 +1,22 @@
#include "ef0200.h"
PAGE "Selezione dati" -1 -1 78 19
TOOLBAR "" 0 0 0 2
#include <relapbar.h>
END{AGE
GROUPBOX DLG_NULL 76 5
PAGE "Mandati" 0 2 0 0
GROUPBOX DLG_NULL 78 5
BEGIN
PROMPT 1 0 "Dati clienti"
PROMPT 1 1 "@bCliente"
END
NUMBER F_CODCF 6
BEGIN
PROMPT 2 1 "Cliente "
USE LF_CLIFO KEY 1
JOIN LF_CFVEN TO LF_CLIFO KEY 1 INTO CODCF=CODCF TIPOCF="C"
JOIN LF_COMUNI TO LF_CLIFO KEY 1 INTO STATO=STATOCF COM=COMCF
PROMPT 2 2 "Codice "
USE LF_CLIFO
JOIN LF_CFVEN TO LF_CLIFO INTO CODCF=CODCF TIPOCF="C"
JOIN LF_COMUNI TO LF_CLIFO INTO STATO=STATOCF COM=COMCF
INPUT TIPOCF "C"
INPUT CODCF F_CODCF
DISPLAY "Codice" CODCF
@ -36,7 +40,7 @@ END
STRING F_RAGSOC 50
BEGIN
PROMPT 22 1 ""
PROMPT 22 2 ""
USE LF_CLIFO KEY 2
JOIN LF_CFVEN TO LF_CLIFO KEY 1 INTO CODCF=CODCF TIPOCF="C"
JOIN LF_COMUNI TO LF_CLIFO KEY 1 INTO STATO=STATOCF COM=COMCF
@ -51,119 +55,61 @@ END
STRING F_INDIRIZZO 35
BEGIN
PROMPT 2 2 "Indirizzo "
PROMPT 2 3 "Indirizzo "
FLAGS "D"
END
STRING F_COMUNE 50
BEGIN
PROMPT 2 3 "Comune "
PROMPT 2 4 "Comune "
FLAGS "D"
END
STRING F_PROV 2
BEGIN
PROMPT 70 3 ""
PROMPT 70 4 ""
FLAGS "D"
END
NUMBER F_CODABI 5
GROUPBOX DLG_NULL 78 5
BEGIN
PROMPT 2 5 "Banca d'appoggio "
FLAGS "RZ"
USE %BAN KEY 1 SELECT CODTAB ?="?????"
INPUT CODTAB F_CODABI
DISPLAY "Codice ABI" CODTAB[1,5]
DISPLAY "Codice CAB" CODTAB[6,10]
DISPLAY "Denominazione@50" S0
OUTPUT F_CODABI CODTAB[1,5]
OUTPUT F_CODCAB CODTAB[6,10]
CHECKTYPE NORMAL
HELP "Inserire il codice della banca d'appoggio"
PROMPT 1 6 "@bMandato"
END
NUMBER F_CODCAB 5
STRING F_MANDATO 35
BEGIN
PROMPT 32 5 ""
FLAGS "RZ"
USE %BAN
INPUT CODTAB[1,5] F_CODABI
INPUT CODTAB[6,10] F_CODCAB
COPY DISPLAY F_CODABI
COPY OUTPUT F_CODABI
CHECKTYPE NORMAL
STRING 2 7 "Codice "
USE &EFMAN SELECT (#F_CLIFO=0)||(#F_CLIFO=I0)
JOIN LF_CLIFO INTO TIPOCF="C" CODCF=I0
INPUT CODTAB F_MANDATO
DISPLAY "Codice@35" CODTAB
DISPLAY "Descrizione@50" S0
DISPLAY "Cliente" I0
DISPLAY "Ragione Sociale@50" LF_CLIFO->RAGSOC
OUTPUT F_MANDATO CODTAB
CHECKTYPE REQUIRED
FIELD CODTAB
KEY 1
END
LIST F_TIPOEFF 18
STRING F_DESCR 50
BEGIN
PROMPT 43 5 "Tipo effetto "
ITEM "2|Tratta"
ITEM "3|Ricevuta bancaria"
HELP "Inserire il tipo dell'effetto"
END
GROUPBOX DLG_NULL 35 4
BEGIN
PROMPT 1 6 "Addebiti"
END
BOOLEAN F_ADDSPINC
BEGIN
PROMPT 2 7 "Sp. incasso"
HELP "Flag di addebito delle spese d'incasso"
END
BOOLEAN F_ADDBOLLIRB
BEGIN
PROMPT 19 7 "Bolli R.B."
HELP "Flag di addebito bolli delle R.B. "
END
BOOLEAN F_ADDBOLLITR
BEGIN
PROMPT 2 8 "Bolli Tr."
HELP "Flag di addebito bolli delle tratte"
END
BOOLEAN F_ADDBNS1500
BEGIN
PROMPT 19 8 "Bollo esente"
HELP "Flag di addebito dei bolli"
END
BUTTON DLG_PARTITE 9 2
BEGIN
PROMPT 39 8 "~Partite"
MESSAGE EXIT,K_F6
END
BUTTON DLG_OK 9 2
BEGIN
PROMPT 52 8 ""
END
BUTTON DLG_QUIT 9 2
BEGIN
PROMPT 65 8 ""
END
CURRENCY F_RESIDUO 15
BEGIN
PROMPT 2 10 "Residuo da ripartire "
FLAGS "RD"
END
SPREADSHEET F_SHEET_EFF 74
BEGIN
PROMPT 2 12 "Immissione effetti"
ITEM "Data scad."
ITEM "Importo rata@15 R"
ITEM "Spese incasso@15 R"
ITEM "Importo bolli@15 R"
ITEM "Importo effetto@15 R"
STRING 2 8 "Descrizione "
USE &EFMAN KEY 2 SELECT (#F_CLIFO=0)||(#F_CLIFO=I0)
JOIN LF_CLIFO INTO TIPOCF="C" CODCF=I0
INPUT CODTAB F_MANDATO
DISPLAY "Descrizione@50" S0
DISPLAY "Codice@35" CODTAB
DISPLAY "Cliente" I0
DISPLAY "Ragione Sociale@50" LF_CLIFO->RAGSOC
COPY OUTPUT F_MANDATO
CHECKTYPE REQUIRED
FIELD S0
KEY 2
END
ENDPAGE
ENDMASK
#include "ef0200b.uml"

@ -1,17 +1,17 @@
#include <relapp.h>
#include <msksheet.h>
#include <utility.h>
#include <clifo.h>
#include <relapp.h>
#include "ef0.h"
#include "ef0300.h"
#include "ef0301.h"
#include <clifo.h>
//////////////////////////////////////////////////////////////////////////////
//Classe per la gestione di distinte (inserimento, modifica, cancellazione) //
// e per la creazione automatica di distinte per importi. //
// Classe per la gestione di distinte (inserimento, modifica, cancellazione)//
// e per la creazione automatica di distinte per importi. //
//////////////////////////////////////////////////////////////////////////////
class TVariazione_distinte: public TRelation_application
{
TMask *_msk, *_m2;
@ -22,14 +22,15 @@ protected:
virtual void init_query_mode(TMask&);
virtual void init_insert_mode(TMask&);
virtual void init_modify_mode(TMask&);
virtual const char* get_next_key();
virtual int read(TMask& m);
virtual int rewrite(const TMask& m);
virtual int write(const TMask& m);
virtual bool get_next_key(TToken_string& key);
virtual int read(TMask& m);
virtual int rewrite(const TMask& m);
virtual int write(const TMask& m);
virtual bool remove();
virtual TMask* get_mask(int mode) {return _msk;}
virtual bool changing_mask(int mode) {return false;}
virtual bool has_filtered_cursor() const { return true; }
virtual bool has_filtered_cursor() const { return true; }
virtual bool changing_mask(int mode) { return false; }
virtual TMask* get_mask(int mode) { return _msk; }
static bool tipodist_handler(TMask_field& f, KEY k);
static bool importo_handler(TMask_field& f, KEY k);
static bool imp_sel_handler(TMask_field& f, KEY k);
@ -37,6 +38,7 @@ protected:
static bool imp_notify(TSheet_field& s, int r, KEY key);
static bool dist_check_handler(TMask_field& f, KEY key);
static bool impdist_notify(TSheet_field& s, int r, KEY key);
static bool impdist_handler(TMask_field& s, KEY key);
static bool conferma_handler(TMask_field& f, KEY k);
static bool annulla_handler(TMask_field& f, KEY k);
static bool data_handler(TMask_field& f, KEY k);
@ -62,9 +64,7 @@ protected:
TToken_string* common_f(const TMask& m, TToken_string& datidist);
public:
virtual TRelation* get_relation() const {return _rel;}
TVariazione_distinte() {};
virtual ~TVariazione_distinte() {};
virtual TRelation* get_relation() const { return _rel;}
};
// restituisce un riferimento all' applicazione
@ -109,7 +109,7 @@ void TVariazione_distinte::init_modify_mode(TMask& m)
}
// ritorna il prossimo numero di distinta valido
const char* TVariazione_distinte::get_next_key()
bool TVariazione_distinte::get_next_key(TToken_string& key)
{
const TString& tipodist = curr_mask().get(F_TIPODIST);
TLocalisamfile& effetti = _rel->lfile();
@ -127,7 +127,8 @@ const char* TVariazione_distinte::get_next_key()
ndist += effetti.get_long(EFF_NDIST);
}
return format("%d|%ld",F_NUMBER,ndist);
key.format("%d|%ld",F_NUMBER,ndist);
return true;
}
// ritorna true se trovo nell'array delle righe distinta l'effetto
@ -135,13 +136,11 @@ const char* TVariazione_distinte::get_next_key()
bool TVariazione_distinte::cerca(long num)
{
TArray& righedist = _distinta->righe();
for (int i = _distinta->items() - 1; i >= 0; i--)// ciclo sugli elementi dell'array
{
TEffetto& eff = (TEffetto&)righedist[i];
if (num == eff.get_long(EFF_NPROGTR))
return true;
TEffetto& eff = (TEffetto&)righedist[i];
if (num == eff.get_long(EFF_NPROGTR))
return true;
}
return false;
}
@ -315,7 +314,7 @@ int TVariazione_distinte::rewrite(const TMask& m)
}
if (items <= to_delete)
{ // non posso cancellare tutti gli effetti di una distinta
error_box(TR("Impossibile escludere tutti gli effetti dalla distinta.\n Utilizzare elimina per cancellarla."));
error_box(TR("Impossibile escludere tutti gli effetti dalla distinta.\nUtilizzare elimina per cancellarla."));
return NOERR;
}
if (to_delete > 0)
@ -400,31 +399,33 @@ int TVariazione_distinte::write(const TMask& m)
// relativi.
bool TVariazione_distinte::remove()
{
TMask* m = _msk;
char tipodist = m->get(F_TIPODIST)[0];
long ndist = m->get_long(F_NUMBER);
bool err = _distinta->remove(tipodist, ndist) == NOERR;
return err;
TMask& m = *_msk;
char tipodist = m.get(F_TIPODIST)[0];
long ndist = m.get_long(F_NUMBER);
return _distinta->remove(tipodist, ndist) == NOERR;
}
// creo la relap
bool TVariazione_distinte::user_create()
{
open_files(LF_TAB, LF_TABCOM, LF_EFFETTI, LF_REFFETTI, LF_CESS, NULL);
open_files(LF_TAB, LF_TABCOM, LF_CLIFO, LF_EFFETTI, LF_REFFETTI, LF_CESS, NULL);
_msk = new TMask("ef0300a");
_m2 = new TMask("ef0300c");
_m2 = new TMask("ef0300c");
_rel = new TRelation(LF_EFFETTI);
if (_rel->last() == NOERR)
_msk->set(F_TIPODIST, _rel->curr().get("TIPODIST"));
_msk->set(F_TIPODIST, _rel->curr().get(EFF_TIPODIST));
_distinta = new TDistinta;
set_search_field(F_NUMBER);//setto il campo di ricerca della distinta
_msk->set_handler(F_TIPODIST, tipodist_handler);
_msk->set_handler(F_IMPBUTTON, importo_handler);
_msk->set_handler(F_TIPODIST, tipodist_handler);
_msk->set_handler(F_IMPBUTTON, importo_handler);
_msk->set_handler(F_UNCONTABIL, uncontabilize_handler);
righe_sheet().set_notify(impdist_notify);
righe_sheet().sheet_mask().set_handler(FIRST_FIELD, dist_check_handler);
TSheet_field& rs = righe_sheet();
rs.set_notify(impdist_notify);
rs.set_handler(impdist_handler);
rs.sheet_mask().set_handler(FIRST_FIELD, dist_check_handler);
_m2->set_handler(F_IMPSEL, imp_sel_handler);
_m2->set_handler(DLG_OK, conferma_handler);
@ -432,8 +433,11 @@ bool TVariazione_distinte::user_create()
_m2->set_handler(F_DADATA, data_handler);
_m2->set_handler(F_ADATA, data_handler);
_m2->set_handler(F_TIPORD, ordina_handler);
righe_sel_sheet().set_notify(imp_notify);
righe_sel_sheet().sheet_mask().set_handler(FIRST_FIELD, check_handler);
TSheet_field& rss = righe_sel_sheet();
rss.set_notify(imp_notify);
rss.sheet_mask().set_handler(FIRST_FIELD, check_handler);
return true;
}
@ -482,10 +486,10 @@ void TVariazione_distinte::carica_riba(int tipopag, const bool reset)
TLocalisamfile f(LF_EFFETTI);
// per prendere la ragione sociale del cliente di cui ho il codice
TToken_string riga(80);
TMask* m2 = app()._m2;
TMask& m2 = *app()._m2;
if (reset)
m2->reset();
TSheet_field& sf = m2->sfield(F_SHEET);
m2.reset();
TSheet_field& sf = m2.sfield(F_SHEET);
if (reset)
sf.reset();
@ -495,7 +499,8 @@ void TVariazione_distinte::carica_riba(int tipopag, const bool reset)
int err, i = 0;
err = eff.read(f, tipodist, ndist, nrigadist);
int tipop = eff.get_int(EFF_TIPOPAG);
int tipod = app()._msk->get(F_TIPOCF)[0];
const char tipo_cf = app()._msk->get(F_TIPOCF)[0]; // 'C'liente o 'F'ornitore
char tipo_a = ' '; // 'F'isica o 'G'iuridica
while ( (err == NOERR) && (tipodist == 0))
{
@ -505,14 +510,15 @@ void TVariazione_distinte::carica_riba(int tipopag, const bool reset)
const bool to_select = (tipopag == 0) || (tipopag == tipop) ||
((tipopag == 2 || tipopag == 5 || tipopag == 7) &&
(tipop == 2 || tipop == 5 || tipop == 7));
const char tipo = eff.get_tipo();
const char tipo = eff.get_tipo(); // C o F
const TString4 valuta = eff.get(EFF_CODVAL);
const bool valuta_ok = ::same_values(valuta, codval);
const long numero = eff.get_long(EFF_NPROGTR);
if (to_select && valuta_ok && !effetto_aggiunto(numero) && tipo == tipod)
const bool is_good = to_select && valuta_ok && !effetto_aggiunto(numero) && tipo == tipo_cf;
if (is_good)
{
riga = " "; // Campo selezione
@ -549,8 +555,7 @@ void TVariazione_distinte::carica_riba(int tipopag, const bool reset)
if (!soldival.is_zero())
riga.add(soldival.string());
sf.row(i) = riga;
i++;
sf.row(i++) = riga;
}
f.setkey(4);
err = eff.next(f);//leggo l'effetto successivo
@ -565,19 +570,18 @@ bool TVariazione_distinte::tipodist_handler(TMask_field& f, KEY k)
{
if (k == K_SPACE)
{
TMask &m = f.mask();
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);
m.set(F_TIPOPAG, 2);
}
return true;
}
// Handler per gestire il caricamento degli effetti nella distinta
// in automatico relativamente ad un importo fissato (per la maschera
// princiapale)
// in automatico relativamente ad un importo fissato (per la maschera principale)
bool TVariazione_distinte::importo_handler(TMask_field& f, KEY k)
{
// se importo distinta maggiore importo presentato si devono andare a
@ -905,7 +909,7 @@ bool TVariazione_distinte::check_handler(TMask_field& f, KEY key)
{
TSheet_field& s = app().righe_sel_sheet();
TToken_string& row = s.row(s.selected());
const bool checked = f.get().not_empty();
const bool checked = f.get().full();
row.add(checked ? "X" : "", 0);
app().calcola();
}
@ -941,6 +945,39 @@ bool TVariazione_distinte::impdist_notify(TSheet_field& s, int r, KEY key)
return true;
}
bool TVariazione_distinte::impdist_handler(TMask_field& f, KEY key)
{
bool ok = true;
if (key == K_ENTER && f.mask().get_int(F_TIPOPAG) == 8) // RID
{
TSheet_field& sf = (TSheet_field&)f;
if (sf.items() > 1)
{
char tipoa = ' ';
TString8 key;
TLocalisamfile eff(LF_EFFETTI);
FOR_EACH_SHEET_ROW(sf, r, riga) if (riga->get_char(0) != 'X') // riga valida (NON da eliminare)
{
eff.put(EFF_NPROGTR, riga->get(1));
if (eff.read() == NOERR)
{
const char tipocf = eff.get_char(EFF_TIPOCF);
const long codcf = eff.get_long(EFF_CODCF);
key.format("%c|%ld", tipocf, codcf);
char ta = cache().get(LF_CLIFO, key, CLI_TIPOAPER)[0];
if (ta != 'G') ta = 'F'; // Fisica o giuridica
if (tipoa < 'F') tipoa = ta;
if (tipoa != ta)
ok = error_box(FR("Tipo anagrafica non valido alla riga %d:\n"
"Non possono coesistere RID relativi a persone Fisiche e Giuridiche"),
r+1);
}
}
}
}
return ok;
}
bool TVariazione_distinte::imp_notify(TSheet_field& s, int r, KEY key)
{
if (key == K_DEL || key == K_INS)

@ -5,6 +5,7 @@
#include <modaut.h>
#include <printer.h>
#include <progind.h>
#include <tabmod.h>
#include "ef0.h"
#include "ef0301.h"
@ -142,7 +143,8 @@ class TRiba_file: public TFile_text
protected:
char tipo_incasso(const TRectype& eff) const; // U o V
const char* tipo_sequenza(const TRectype& eff) const; // FRST,RCUR,FNAL,OOFF
TDate data_mandato(const TRectype& eff) const;
virtual void validate(TCursor& cur,TRecord_text &rec, TToken_string &val, TString& str);
public:
@ -151,7 +153,7 @@ public:
const real tot_importi() const { return _tot_importi; }
bool tracciato_setif() const { return _tracciato_setif; }
void set_tracciato_setif(bool tracciato_setif=TRUE) { _tracciato_setif = tracciato_setif; }
void set_tracciato_setif(bool tracciato_setif=true) { _tracciato_setif = tracciato_setif; }
const TString& my_iban() const { return _my_iban; }
void set_my_iban(const char* ib) { _my_iban = ib; }
@ -295,7 +297,8 @@ void TEmissione::floppy()
{
const TRecnotype n_eff = _cur->items();
TString msg;
msg.format(FR("Emissione di %d effetti su file %s\ncon tracciato %s"), n_eff, RIBAFILENAME, (const char*)ribaini);
msg.format(FR("Emissione di %d effetti su file %s\ncon tracciato %s"),
n_eff, RIBAFILENAME, (const char*)ribaini);
if (n_eff > 0)
{
TString_array keys ;
@ -317,6 +320,36 @@ void TEmissione::floppy()
}
footer_ef(); //chiusura flusso effetti
}
if (n_eff > 0 && tipocf == 'C' && tipopag == '8')
{
// Cambia stato ai mandati di tipo FRST in RCUR e lascia stare tutti gli altri
TProgress_monitor pi(n_eff, TR("Aggiornamento sequenza mandati"));
// Aggiorna gli eventuali mandati da FRST a RCUR
TModule_table man("MAN");
for (cur = 0; cur.pos() < n_eff; ++cur)
{
const TString& mandato = eff.get(EFF_MANDATO);
if (mandato.full())
{
man.put("CODTAB", mandato);
if (man.read() == NOERR)
{
const TString& seq = man.get("S6");
if (seq == "FRST")
{
man.put("S6", "RCUR");
man.rewrite();
}
}
}
if (!pi.add_status(1))
break;
}
}
message_box(msg);
}
else
@ -427,9 +460,9 @@ bool TEmissione::test_record_type(const TString& key) const
const TRectype& eff = _cur->curr();
if (key == "16")
ok = _trasfile->my_iban().not_empty();
ok = _trasfile->my_iban().full();
else
ok = eff.get(EFF_IBAN).not_empty();
ok = eff.get(EFF_IBAN).full();
if (ok)
{
@ -444,10 +477,10 @@ bool TEmissione::test_record_type(const TString& key) const
}
//emetto un record del flusso di effetti
void TEmissione::record(const TString & chiave)
void TEmissione::record(const TString& chiave)
{
TTracciato_record * lavoro = (TTracciato_record * )_trasfile->tracciati().objptr(chiave);
//scandisco tutti i record di un effetto
TTracciato_record* lavoro = (TTracciato_record*)_trasfile->tracciati().objptr(chiave);
//scandisco tutti i record di un effetto
if (lavoro != NULL && chiave !="EF" && chiave !="RB" && chiave != "IB")
{
@ -488,8 +521,7 @@ void TEmissione::aggiorna_rb(TCursor* cur)
effetto.put(EFF_NUMEMISS, numero);
TDate data = _msk->get_date(F_DATAEMIS);
effetto.put(EFF_DATAEMISS, data);
bool cond = TRUE;
effetto.put(EFF_EFFSTAMP, cond);
effetto.put(EFF_EFFSTAMP, true);
effetto.rewrite(eff);
}
}
@ -498,12 +530,11 @@ void TEmissione::aggiorna_rb(TCursor* cur)
// su tutti gli effetti nel cursore
void TEmissione::aggiorna_dist(TCursor* cur)
{
TLocalisamfile &eff = cur->file(LF_EFFETTI);
TLocalisamfile& eff = cur->file(LF_EFFETTI);
for (*cur = 0; cur->pos() < cur->items(); ++(*cur))
{
TEffetto effetto = eff.curr();
bool cond = TRUE;
effetto.put(EFF_DISTSTAM, cond);
effetto.put(EFF_DISTSTAM, true);
effetto.rewrite(eff);
}
}
@ -512,7 +543,6 @@ void TEmissione::aggiorna_dist(TCursor* cur)
void TEmissione::print_rb(char tipost, int ndist, char tipodist, const bool is_vis)
{
TCursor* fcur = _formrb->cursor();
TLocalisamfile &eff = fcur->file(LF_EFFETTI);
TString filter;
if (tipost == 'D' && !_msk->get_bool(F_RIST)) // se stampa definitiva effetti e se non deve ristampare le riba
@ -522,8 +552,8 @@ void TEmissione::print_rb(char tipost, int ndist, char tipodist, const bool is_v
fcur->setkey(4);
if (ndist > 0)
{
TRectype darec(eff.curr());// fissa i dati per la scelta degli ...
darec.zero();// ... effetti nel primo e nell'ultimo record del cursore
TRectype darec(LF_EFFETTI);// fissa i dati per la scelta degli ...
darec.zero(); //... effetti nel primo e nell'ultimo record del cursore
darec.put(EFF_TIPODIST, tipodist);
darec.put(EFF_NDIST, ndist);
fcur->setregion(darec, darec);
@ -536,8 +566,8 @@ void TEmissione::print_rb(char tipost, int ndist, char tipodist, const bool is_v
fcur->setfilter(filter,TRUE);
_formrb->print(); // stampa il form
if (tipost == 'D') // se emetto riba in definitiva devo aggiornare
aggiorna_rb(fcur);// 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
@ -999,32 +1029,29 @@ char TRiba_file::tipo_incasso(const TRectype& eff) const
{
const char tipopag = eff.get_char(EFF_TIPOPAG);
const char tipocf = eff.get_char(EFF_TIPOCF);
const long codcf = eff.get_char(EFF_CODCF);
const long codcf = eff.get_long(EFF_CODCF);
if (tipopag != '8' || tipocf != 'C' || codcf <= 0L)
return ' ';
if (tipopag != '8' || tipocf != 'C' || codcf <= 0L) // 8 = Rapporti Interbancari Diretti (alias RID)
return ' '; // RID ONLY
TString8 key; key.format("C|%ld", codcf);
const TRectype& clifo = cache().get(LF_CLIFO, key);
if (clifo.get_char(CLI_TIPOAPER) == 'G')
return 'V';
return 'U';
return clifo.get_char(CLI_TIPOAPER) == 'G' ? 'V' : 'U';
}
const char* TRiba_file::tipo_sequenza(const TRectype& eff) const
{
const char* seq = "OOFF";
TEffetto e(eff);
if (e.fatt())
{
const int nrata = e.row_r(0).get_int(REFF_NRATA);
if (eff.get_bool(EFF_ULTRATA))
seq = nrata <= 1 ? "OOFF" : "FNAL";
else
seq = nrata <= 1 ? "FRST" : "RCUR";
}
const char* seq = "RCUR";
const TRectype& mandato = cache().get("&MAN", eff.get(EFF_MANDATO));
if (!mandato.empty())
seq = mandato.get("S6");
return seq;
}
TDate TRiba_file::data_mandato(const TRectype& eff) const
{
TDate dm = cache().get("&MAN", eff.get(EFF_MANDATO), "D0");
return dm;
}
// gestione dei messaggi estesi nei campi
void TRiba_file::validate(TCursor& cur,TRecord_text &rec, TToken_string &s, TString& str)
@ -1036,11 +1063,10 @@ void TRiba_file::validate(TCursor& cur,TRecord_text &rec, TToken_string &s, TStr
// gestione dei campi fissi per i record delle riba
// sintassi: _FISSO,!<valore>
// dove: <valore> è la stringa fissa da emettere
TString in(s.get());
const TFixed_string in(s.get());
CHECK(in[0]=='!',"Macro _FISSO senza carattere '!'");
in.ltrim(1);
in.trim();
valore = in;
valore = in.mid(1);
valore.trim();
}
else if (code == "_DATA")
{
@ -1337,11 +1363,14 @@ void TRiba_file::validate(TCursor& cur,TRecord_text &rec, TToken_string &s, TStr
{
valore = ini_get_string(CONFIG_DITTA, "ef", "CODSIA");
}
else if (code == "_CUC")
{
valore = ini_get_string(CONFIG_DITTA, "ef", "CUC");
}
else if (code == "_CREDITORID")
{
valore = ini_get_string(CONFIG_DITTA, "ef", "CREDITORID");
}
else if (code == "_CODMON")
valore = cur.curr(-403).get("S4");
} else if (code == "_CODMON")
{
valore.format("%c", _codice_moneta); // Fisso 'E'
}
@ -1355,7 +1384,8 @@ void TRiba_file::validate(TCursor& cur,TRecord_text &rec, TToken_string &s, TStr
}
else if (code == "_DATAMANDATO")
{
valore = "000000";
const TDate d = data_mandato(cur.curr());
valore = d.string(brief, '\0');
}
else
NFCHECK("Macro non definita: %s", (const char *)code);

@ -6,7 +6,7 @@
#define F_DESCCAUINC 106
#define F_DESCCAUPAG 107
#define F_CONTSEP 108
#define F_CREDITORID 109
#define F_CUC 109
#define F_TRANS_G 111
#define F_TRANS_C 112

@ -148,15 +148,15 @@ END
STRING F_CODSIA 5
BEGIN
PROMPT 2 14 "Codice SIA "
PROMPT 2 14 "Codice SIA "
FLAGS "Z"
FIELD CODSIA
END
STRING F_CREDITORID 25
STRING F_CUC 35
BEGIN
PROMPT 2 15 "Creditor Identifier "
FIELD CREDITORID
PROMPT 2 15 "Codice Univoco CBI (C.U.C.) "
FIELD CUC
END
ENDPAGE

@ -11,4 +11,5 @@ Item_05 = "Contabilizzazione effetti", "ef0 -7", "F"
Item_06 = "Stampe di controllo", "ef0 -5", "F"
Item_07 = "Configurazione modulo", "ef0 -8", "F"
Item_08 = "Disposizioni incassi/pagamenti", "ef0 -9", "F"
Item_09 = "Mandati RID", "ef0 -1 &MAN", "F"

@ -1,3 +1,3 @@
31
0
$effetti|0|0|248|0|Effetti|||
$effetti|0|0|283|0|Effetti|||

@ -1,5 +1,5 @@
31
36
37
NPROGTR|3|7|0|Numero progressivo effetto
DATASCAD|5|8|0|Data di scadenza
TIPOPAG|2|1|0|Tipo pagamento
@ -35,7 +35,8 @@ IBAN|1|34|0|Codice IBAN di appoggio
DSCVAL|8|1|0|Data di scadenza intesa come data valuta beneficiario
CUP|1|15|0|Codice Unico di Progetto
CIG|1|10|0|Codice Identificativo gara
CONTSEP|1|6|0|Contabilita' separata
CONTSEP|1|6|0|Contabilità separata
MANDATO|1|35|0|Codice mandato per RID
4
NPROGTR|
TIPOCF+CODCF+NPROGTR|

@ -65,7 +65,7 @@ POSITION(2)=3
LENGTH(2)=5
MESSAGE(2)=_CODSIA
NAME(3)=CODICE DESTINATARIO
NAME(3)=CODICE RICEVENTE
FIELD(3)=31->CODABIP
POSITION(3)=8
LENGTH(3)=5
@ -86,7 +86,7 @@ MESSAGE(5)=_DITTA,!RAGSOC,1
NAME(6)=FILLER
TYPE(6)=FISSO
POSITION(6)=45
LENGTH(6)=68
LENGTH(6)=67
NAME(7)=CODICE MONETA
TYPE(7)=STRINGA
@ -94,10 +94,11 @@ POSITION(7)=113
LENGTH(7)=1
MESSAGE(7) = _CODMON
NAME(8)=FILLER
TYPE(8)=FISSO
POSITION(8)=114
LENGTH(8)=6
NAME(8) = TIPO INCASSO RID (FACOLTATIVO)
TYPE(8) = STRINGA
POSITION(8) = 112
LENGTH(8) = 1
MESSAGE(8) = _TIPOINC
NAME(9)=TIPO RECORD FINTO
POSITION(9)=1
@ -190,6 +191,7 @@ POSITION(14) = 79
LENGTH(14) = 12
NAME(15) = CODICE AZIENDA
TYPE(15) = STRINGA
POSITION(15) = 91
LENGTH(15) = 5
MESSAGE(15) = _CODSIA
@ -201,20 +203,20 @@ LENGTH(16) = 1
MESSAGE(16) = _FISSO,!9
NAME(17) = CODICE CLIENTE DEBITORE (FACOLTATIVO)
TYPE(17) = FISSO
TYPE(17) = STRINGA
POSITION(17) = 97
LENGTH(17) = 16
LENGTH(17) = 15
FIELD(17) = 20->PAIV
NAME(18) = TIPO INCASSO (FACOLTATIVO)
TYPE(18) = STRINGA
POSITION(18) = 112
POSITION(18) = 118
LENGTH(18) = 1
MESSAGE(18) = _TIPOINC
NAME(19) = CODICE MONETA
TYPE(19) = STRINGA
POSITION(19) = 113
POSITION(19) = 119
LENGTH(19) = 1
MESSAGE(19) = _CODMON
@ -567,13 +569,15 @@ TYPE(10)=FISSO
POSITION(10)=89
LENGTH(10)=24
NAME(11)=CODICE MONETA
TYPE(11)=STRINGA
POSITION(11)=113
LENGTH(11)=1
MESSAGE(11) = _CODMON
NAME(11) = TIPO INCASSO (FACOLTATIVO)
TYPE(11) = STRINGA
POSITION(11) = 112
LENGTH(11) = 1
MESSAGE(11) = _TIPOINC
NAME(12)=CODICE MONETA
TYPE(12)=STRINGA
POSITION(12)=113
LENGTH(12)=1
MESSAGE(12) = _CODMON
NAME(12)=FILLER
TYPE(12)=FISSO
POSITION(12)=114
LENGTH(12)=6