ab2101.cpp: Completato la parte che riguarda la ricezione
ab2102.cpp: Completata la parte che riguarda il trasferimento si è deciso di non eseguire il trasferimento di voci, relazioni e sottorelazioni (per ora) relana.h, relvoci.h, saldi.h, voci.h: Sono stati completati git-svn-id: svn://10.65.10.50/trunk@5742 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
8156729afe
commit
e4a8bae67b
347
ab/ab2101.cpp
347
ab/ab2101.cpp
@ -21,16 +21,23 @@
|
|||||||
#define FLAG_COMPOSTA "C"
|
#define FLAG_COMPOSTA "C"
|
||||||
#define FLAG_ANALISI "A"
|
#define FLAG_ANALISI "A"
|
||||||
#define FLAG_VOCI "V"
|
#define FLAG_VOCI "V"
|
||||||
long TABfile_text::_idcaradd=1; //In questo modo questa variabile è visibile a tutti gli oggetti di questa classe
|
|
||||||
|
//Definizioni di constanti per il record di testata
|
||||||
|
#define RECORD_TESTA "1"
|
||||||
|
#define ABILITATO "X"
|
||||||
|
#define AB_PIANO_CONTI 2
|
||||||
|
#define AB_PERIODI_BIL 3
|
||||||
|
#define AB_ANALISI 4
|
||||||
|
#define AB_SALDI 8
|
||||||
|
#define AB_DETT 9
|
||||||
|
#define AB_MOV 10
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//Costruttore di TABfile_text: lo inizializzo a 0
|
//Costruttore di TABfile_text: lo inizializzo a 0
|
||||||
TABfile_text::TABfile_text(const char* file_name, const char* set_config_name)
|
TABfile_text::TABfile_text(const char* file_name, const char* set_config_name)
|
||||||
: TFile_text(file_name, set_config_name),_idncomp(1),_idcoldich(1)
|
: TFile_text(file_name, set_config_name),_idncomp(1)
|
||||||
{
|
{
|
||||||
TLocalisamfile f(LF_CARADD);
|
|
||||||
if (f.last()==NOERR)
|
|
||||||
_idcaradd=atol(f.get(ABCA_ID))+1;
|
|
||||||
else
|
|
||||||
_idcaradd=1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class TAlbero_record : public TAssoc_array
|
class TAlbero_record : public TAssoc_array
|
||||||
@ -66,6 +73,8 @@ class TRicezione:public TRiceTras
|
|||||||
void scrivi_array(TAssoc_array &s_rec, int);
|
void scrivi_array(TAssoc_array &s_rec, int);
|
||||||
void build_relana(TString&, const TMask&, const TFilename&);
|
void build_relana(TString&, const TMask&, const TFilename&);
|
||||||
void build_ana_tree(long&, TRectype&, TRectype*, TRectype*, TAssoc_array&);
|
void build_ana_tree(long&, TRectype&, TRectype*, TRectype*, TAssoc_array&);
|
||||||
|
//Questa funzione è da usare solo in fase di debug
|
||||||
|
//void print_ana_tree(int & level, TRectype&,FILE * stream);
|
||||||
TRicezione() {}
|
TRicezione() {}
|
||||||
virtual ~TRicezione() {}
|
virtual ~TRicezione() {}
|
||||||
};
|
};
|
||||||
@ -200,6 +209,30 @@ void TABfile_text::scrivi_temp_link(TRelation& rel,const TRecord_text& rec)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void TABfile_text::aggiorna_rel_link(TLocalisamfile &relvoc)
|
||||||
|
{
|
||||||
|
if (relvoc.get_long(ABRL_IDCOMP) > 1)
|
||||||
|
{ //Ci deve essere un precedente
|
||||||
|
//Recupero la relazione precedente
|
||||||
|
TLocalisamfile temp(LF_RELVOCI);
|
||||||
|
temp.put(ABRL_TIPOCOD,relvoc.get(ABRL_TIPOCOD));
|
||||||
|
temp.put(ABRL_CODVC,relvoc.get(ABRL_CODVC));
|
||||||
|
temp.put(ABRL_IDCOMP,relvoc.get_long(ABRL_IDCOMP)-1);
|
||||||
|
if (temp.read() == NOERR)
|
||||||
|
{//Ho recuperato la relazione precedente
|
||||||
|
temp.put(ABRL_NEXTCOMP,relvoc.get(ABRL_IDCOMP)); //Aggiorno la relazione precedente
|
||||||
|
relvoc.put(ABRL_PREVCOMP,relvoc.get_long(ABRL_IDCOMP)-1); //Aggiorno la relazione attuale
|
||||||
|
temp.rewrite();// Scrivo la precedente
|
||||||
|
}
|
||||||
|
else
|
||||||
|
CHECK (FALSE, "Non ho trovato il prevcomp di una relazione che dovrebbe averlo");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{ //Non c'è la relazione precedente
|
||||||
|
relvoc.put(ABRL_PREVCOMP,ID_NULLO); //Aggiorno la relazione attuale
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool TABfile_text::pre_writerel(TRelation& rel,const TRecord_text& rec)
|
bool TABfile_text::pre_writerel(TRelation& rel,const TRecord_text& rec)
|
||||||
{
|
{
|
||||||
int logic_num=rel.lfile().num(); //Carico il numero logico del file che sto utilizzando
|
int logic_num=rel.lfile().num(); //Carico il numero logico del file che sto utilizzando
|
||||||
@ -242,7 +275,6 @@ bool TABfile_text::pre_writerel(TRelation& rel,const TRecord_text& rec)
|
|||||||
rel.lfile().put(ABMD_ID,id); //scrivo sulla relazione assegnando a ABMD_ID l'indice calcolato
|
rel.lfile().put(ABMD_ID,id); //scrivo sulla relazione assegnando a ABMD_ID l'indice calcolato
|
||||||
//FINE PARTE 1
|
//FINE PARTE 1
|
||||||
|
|
||||||
|
|
||||||
//PARTE 2: inserisco il TIPODETT, TIPOBIL e evenutalmente CODDETT
|
//PARTE 2: inserisco il TIPODETT, TIPOBIL e evenutalmente CODDETT
|
||||||
if ((rec.type() == MOVIMENTO3) || (rec.type() == MOVIMENTO4) || (rec.type() == MOVIMENTO5))
|
if ((rec.type() == MOVIMENTO3) || (rec.type() == MOVIMENTO4) || (rec.type() == MOVIMENTO5))
|
||||||
{ //E' di tipo "dettaglio" o "conto contabile": non può essere "movimento"
|
{ //E' di tipo "dettaglio" o "conto contabile": non può essere "movimento"
|
||||||
@ -280,7 +312,6 @@ bool TABfile_text::pre_writerel(TRelation& rel,const TRecord_text& rec)
|
|||||||
// l'importo va inserito nel saldo (e settato il flag D/A) se il record è MOVI1
|
// l'importo va inserito nel saldo (e settato il flag D/A) se il record è MOVI1
|
||||||
// l'importo va inserito in PDARE o PAVERE a seconda del flag D/A
|
// l'importo va inserito in PDARE o PAVERE a seconda del flag D/A
|
||||||
|
|
||||||
|
|
||||||
if (rec.type() == MOVIMENTO1 || rec.type() == MOVIMENTO2)
|
if (rec.type() == MOVIMENTO1 || rec.type() == MOVIMENTO2)
|
||||||
{
|
{
|
||||||
if (rec.get(FLAG_RICLASSIFICAZIONE_MOVDETT) == "X")
|
if (rec.get(FLAG_RICLASSIFICAZIONE_MOVDETT) == "X")
|
||||||
@ -316,65 +347,60 @@ bool TABfile_text::pre_writerel(TRelation& rel,const TRecord_text& rec)
|
|||||||
if (logic_num==LF_VOCI)
|
if (logic_num==LF_VOCI)
|
||||||
{//Parte riservata alle voci
|
{//Parte riservata alle voci
|
||||||
bool write_rec=TRUE;
|
bool write_rec=TRUE;
|
||||||
|
TAdditional_cars &caradd= (TAdditional_cars &)(rel.lfile(LF_CARADD));
|
||||||
|
TAdditional_cols &col= (TAdditional_cols &)(rel.lfile(LF_COLLDICH));
|
||||||
|
|
||||||
if ((rec.get(TIPO_VOCE_VOCI) != FLAG_INDICE) )
|
if ((rec.get(TIPO_VOCE_VOCI) != FLAG_INDICE) )
|
||||||
{//Scrivo la chiave anche sul file secondario della relazione
|
{//Scrivo la chiave anche sul file secondario della relazione
|
||||||
long idcaradd_ra=ID_NULLO;
|
real idcaradd_ra;
|
||||||
rel.lfile(LF_CARADD).put(ABCA_ID,_idcaradd);
|
idcaradd_ra = 0;
|
||||||
|
TString prova = *idcaradd_ra.string();
|
||||||
TLocalisamfile fil(LF_VOCI);
|
TLocalisamfile fil(LF_VOCI);
|
||||||
fil.curr()=rel.curr();
|
fil.curr()=rel.curr();
|
||||||
if (fil.read() != NOERR)
|
if (fil.read() != NOERR)
|
||||||
{
|
{
|
||||||
// Voce non ancora inserita; la caradd diventa il default
|
// Voce non ancora inserita; la caradd diventa il default
|
||||||
rel.lfile().put(ABVC_IDCARADD,_idcaradd);
|
caradd.write();
|
||||||
_idcaradd++;
|
rel.lfile().put(ABVC_IDCARADD,caradd.get(ABCA_ID));
|
||||||
//long prova = atol(rec.get(NCA_VOCI));
|
|
||||||
} else {
|
} else {
|
||||||
// non scrivero' la voce
|
// non scrivero' la voce
|
||||||
write_rec=FALSE;
|
write_rec=FALSE;
|
||||||
// cerco il default
|
// cerco il default
|
||||||
TLocalisamfile caradd(LF_CARADD);
|
if (!caradd.current().same_as(rel.lfile().get_real(ABVC_IDCARADD)))
|
||||||
caradd.put(ABCA_ID,rel.lfile().get(ABVC_IDCARADD));
|
|
||||||
caradd.read();
|
|
||||||
caradd.put(ABCA_ID,_idcaradd);
|
|
||||||
if (rel.lfile(LF_CARADD).curr()!=caradd.curr())
|
|
||||||
{
|
{
|
||||||
// diverso dal default: va scritto in relana
|
// diverso dal default: va scritto in relana
|
||||||
idcaradd_ra=_idcaradd;
|
caradd.write();
|
||||||
rel.lfile(LF_CARADD).put(ABCA_ID,idcaradd_ra);
|
idcaradd_ra=caradd.get_real(ABCA_ID);
|
||||||
rel.lfile(LF_CARADD).write();
|
|
||||||
_idcaradd++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (atol(rec.get(NCA_VOCI)) > 0)
|
if (atol(rec.get(NCA_VOCI)) > 0)
|
||||||
{//Aggiorno anche radici: inserisco solo le "voci" di primo livello
|
{//Aggiorno anche radici: inserisco solo le "voci" di primo livello
|
||||||
//e sono le tabelle di analisi, cioè le radici dell'albero
|
//e sono le tabelle di analisi, cioè le radici dell'albero
|
||||||
|
|
||||||
//Aggiorno RELVOCI
|
//Aggiorno RELVOCI
|
||||||
TLocalisamfile & relvoc=rel.lfile(LF_RELVOCI);
|
TLocalisamfile & relvoc=rel.lfile(LF_RELVOCI);
|
||||||
|
|
||||||
relvoc.put(ABRL_TIPOCOD,FLAG_ANALISI); //Analisi di bilancio
|
relvoc.put(ABRL_TIPOCOD,FLAG_ANALISI); //Analisi di bilancio
|
||||||
// >>>relvoc.put(ABRL_CODVC,rec.get(CODVC_VOCI)); //Codice della tabella di analisi
|
|
||||||
// >>>relvoc.put(ABRL_NCOMP,atol(rec.get(NCA_VOCI))); //Id progressivo della tabella di analisi
|
|
||||||
relvoc.put(ABRL_CODCOMP,rel.lfile().get(ABVC_CODVC));
|
relvoc.put(ABRL_CODCOMP,rel.lfile().get(ABVC_CODVC));
|
||||||
|
relvoc.put(ABRL_NEXTCOMP,ID_NULLO); //La relazione successiva non la vedo ancora
|
||||||
|
aggiorna_rel_link(relvoc);
|
||||||
relvoc.write(); //Scrivo effettivamente sull'isamfile
|
relvoc.write(); //Scrivo effettivamente sull'isamfile
|
||||||
|
|
||||||
|
//Aggiorno il collegamento a dichiarazione
|
||||||
|
col.write();
|
||||||
|
|
||||||
//Aggiorno RELANA
|
//Aggiorno RELANA
|
||||||
TLocalisamfile &ran=rel.lfile(LF_RELANA);
|
TLocalisamfile &ran=rel.lfile(LF_RELANA);
|
||||||
|
ran.put(ABRA_CODAN,(relvoc.get(ABRL_CODVC)).sright(2));
|
||||||
ran.put(ABRA_CODAN,relvoc.get(ABRL_CODVC));
|
ran.put(ABRA_ID,relvoc.get(ABRL_IDCOMP)); //Assegno questo "ID" provvisorio per poterlo rintracciare dopo
|
||||||
ran.put(ABRA_ID,relvoc.get(ABRL_NCOMP)); //Assegno questo "ID" provvisorio per poterlo rintracciare dopo
|
|
||||||
ran.put(ABRA_DESCRIZ,rel.lfile().get(ABVC_DESCR));
|
ran.put(ABRA_DESCRIZ,rel.lfile().get(ABVC_DESCR));
|
||||||
ran.put(ABRA_TIPOCOD,FLAG_ANALISI);
|
ran.put(ABRA_TIPOCOD,FLAG_ANALISI);
|
||||||
ran.put(ABRA_CODVC,relvoc.get(ABRL_CODVC));
|
ran.put(ABRA_CODVC,relvoc.get(ABRL_CODVC));
|
||||||
ran.put(ABRA_NCOMP,relvoc.get(ABRL_NCOMP));
|
ran.put(ABRA_NCOMP,relvoc.get(ABRL_IDCOMP));
|
||||||
//>>>ran.put(ABRA_VOCEINCID,voceincid.right_just(12,'0'));
|
ran.put(ABRA_IDCARADD,idcaradd_ra.string("############"));
|
||||||
ran.put(ABRA_IDCARADD,idcaradd_ra);
|
|
||||||
ran.put(ABRA_USACARADD,idcaradd_ra==ID_NULLO ? FALSE : TRUE);
|
ran.put(ABRA_USACARADD,idcaradd_ra==ID_NULLO ? FALSE : TRUE);
|
||||||
|
ran.put(ABRA_IDCOLDICH,col.get_long(ABCD_ID));
|
||||||
ran.write();
|
ran.write();
|
||||||
|
|
||||||
//Aggiorno il collegamento a dichiarazione
|
|
||||||
//TLocalisamfile col(LF_COLLDICH);
|
|
||||||
//col.put(ABCD_ID,_idcoldich); //e alla relazione secondaria
|
|
||||||
//_idcoldich++;
|
|
||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
// tipo di voce non più supportata
|
// tipo di voce non più supportata
|
||||||
@ -385,57 +411,139 @@ bool TABfile_text::pre_writerel(TRelation& rel,const TRecord_text& rec)
|
|||||||
if (logic_num==LF_RELVOCI)
|
if (logic_num==LF_RELVOCI)
|
||||||
{//Parte riservata alle relazioni
|
{//Parte riservata alle relazioni
|
||||||
rel.lfile().put(ABRL_TIPOCOD,FLAG_VOCI);
|
rel.lfile().put(ABRL_TIPOCOD,FLAG_VOCI);
|
||||||
|
rel.lfile().put(ABRL_NEXTCOMP,ID_NULLO); //La relazione successiva non la vedo ancora
|
||||||
|
aggiorna_rel_link(rel.lfile());
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}//Fine parte riservata alle relaizioni
|
}//Fine parte riservata alle relaizioni
|
||||||
|
|
||||||
if (logic_num==LF_RELANA)
|
if (logic_num==LF_RELANA)
|
||||||
{//Parte riservata a SOTTORELAZIONI e COLLEGAMENTO A DICHIARAZIONE
|
{//Parte riservata a SOTTORELAZIONI e COLLEGAMENTO A DICHIARAZIONE
|
||||||
rel.lfile().put(ABRA_IDCOLDICH,_idcoldich); //Assegno l'ID del collegamento alla relazione principale
|
|
||||||
rel.lfile(LF_COLLDICH).put(ABCD_ID,_idcoldich); //e alla relazione secondaria
|
TAdditional_cars &caradd = (TAdditional_cars &)(rel.lfile(LF_CARADD));
|
||||||
_idcoldich++;
|
TAdditional_cols &col = (TAdditional_cols &)(rel.lfile(LF_COLLDICH));
|
||||||
|
|
||||||
|
//Abilito la scrittura sulle relazioni collegate
|
||||||
|
rel.write_enable(LF_COLLDICH,TRUE);
|
||||||
|
col.write();
|
||||||
|
rel.write_enable(LF_COLLDICH,FALSE);
|
||||||
|
rel.lfile().put(ABRA_IDCOLDICH,col.get_long(ABCD_ID)); //Assegno l'ID del collegamento alla relazione principale
|
||||||
|
|
||||||
//Parte riservata a SOTTORELAZIONI e CARATTERISTICHE ADDIZIONALI
|
//Parte riservata a SOTTORELAZIONI e CARATTERISTICHE ADDIZIONALI
|
||||||
TString codice_voce=rel.lfile().get(ABRA_CODVC);//Estraggo da RELANA il codice di ricerca su VOCI
|
TString codice_voce=rel.lfile().get(ABRA_CODVC);//Estraggo da RELANA il codice di ricerca su VOCI
|
||||||
codice_voce.ltrim(2); //e la formatto
|
codice_voce.ltrim(2); //e la formatto
|
||||||
|
|
||||||
TLocalisamfile voc(LF_VOCI); //gatto
|
TLocalisamfile voc(LF_VOCI);
|
||||||
voc.put(ABVC_CODVC,codice_voce);
|
voc.put(ABVC_CODVC,codice_voce);
|
||||||
if (voc.read() == NOERR)
|
if (voc.read() == NOERR)
|
||||||
{ //Ho trovato la voce
|
{ //Ho trovato la voce
|
||||||
TRelation rela(LF_RELANA);
|
//Ricerco la caratteristica addizionale di default
|
||||||
rela.add(LF_CARADD,"ID=IDCARADD");
|
//Confronto le caratteristiche addizionali del record che
|
||||||
rela.lfile().put(ABRA_CODAN,rec.get(CODAN_SOTTOREL));
|
//sta per essere salvato e le caratteristiche di default
|
||||||
rela.lfile().put(ABRA_ID,voc.get(ABVC_IDCARADD));
|
if (! caradd.current().same_as(voc.get_real(ABVC_IDCARADD)))
|
||||||
if (rela.read() == NOERR)
|
{
|
||||||
{//Ho trovato le caratteristiche addizionali di default della voce
|
|
||||||
rel.lfile(LF_CARADD).put(ABCA_ID,rela.lfile(LF_CARADD).get(ABCA_ID));
|
|
||||||
if (rel.lfile(LF_CARADD).curr()==rela.lfile(LF_CARADD).curr())
|
|
||||||
return TRUE; //Se sono uguali (ho già inserito l'ID corretto) sovrascrivo le caradd
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//Non ho trovato la VOCE o CARATTERISTICA ADDIZIONALE oppure è diversa
|
//Non ho trovato la VOCE o CARATTERISTICA ADDIZIONALE oppure è diversa
|
||||||
//l'ID è già stato incrementato in precedenza
|
caradd.write();
|
||||||
rel.lfile().put(ABRA_IDCARADD,_idcaradd); //Aggiungo il collegamento alla carat. add.
|
rel.lfile().put(ABRA_USACARADD,TRUE); //Setto il flag
|
||||||
rel.lfile().put(ABRA_USACARADD,"X"); //Setto il flag
|
long prova = atol (caradd.get(ABCA_ID)); //Solo per debug
|
||||||
rel.lfile(LF_CARADD).put(ABCA_ID,_idcaradd);
|
rel.lfile().put(ABRA_IDCARADD,caradd.get(ABCA_ID)); //Aggiungo il collegamento alla carat. add.
|
||||||
_idcaradd++;
|
|
||||||
return TRUE;
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rel.lfile().put(ABRA_USACARADD,FALSE); //Setto il flag
|
||||||
|
rel.lfile().put(ABRA_IDCARADD, ID_NULLO ); //Aggiungo il collegamento alla carat. add. di default
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
CHECK (FALSE,"Si è verificato una inconsistenza nei dati: ho trovato una sottorelazione \n che non ha la relativa voce");
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
} // Fine LF_RELANA
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Handler per controllare la validita' del campo F_PERCORSO
|
|
||||||
|
//Questo Handler viene "richiamato" da tre campi:
|
||||||
|
// F_PERCORSO, F_PERCORSO_UTENTE, F_TIPO_RICE
|
||||||
bool TRicezione::inseriscipercorso(TMask_field& f, KEY k)
|
bool TRicezione::inseriscipercorso(TMask_field& f, KEY k)
|
||||||
{
|
{
|
||||||
if (f.to_check(k))
|
bool modificato = FALSE; //Questa mi dice quando c'è stata una modifica sulla maschera
|
||||||
|
if ((k==K_TAB) &&
|
||||||
|
(f.focusdirty()) &&
|
||||||
|
((f.dlg()==F_PERCORSO) || (f.dlg() == F_PERCORSO_UTENTE)))
|
||||||
|
//Entro in questo if solo se ho eseguito delle modifiche al campo F_PERCORSO
|
||||||
|
//o F_PERCORSO_UTENTE e all'uscita degli stessi
|
||||||
|
//Per il campo F_PERCORSO_UTENTE mi serve solo controllare che esista il percorso e il file indicati
|
||||||
{
|
{
|
||||||
TString percorso;
|
TString percorso =f.get(); //Leggo il contenuto del campo
|
||||||
bool esiste;
|
bool esiste=fexist(percorso); //Controllo l'esistenza del file
|
||||||
percorso=f.get(); //Leggo il contenuto del campo
|
if (!esiste)
|
||||||
esiste = fexist(percorso); //Controllo l'esistenza del file
|
return f.error_box("Il percorso o il file specificato non esiste.");
|
||||||
if (esiste==FALSE)
|
modificato=TRUE;
|
||||||
return error_box("Il percorso o il file specificato non esiste.");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((k==K_SPACE) && (f.dlg()==F_TIPO_RICE) && f.focusdirty())
|
||||||
|
{//Entro in questo if solo dopo aver modificato il contenuto del campo
|
||||||
|
//F_TIPO_RICE e all'uscita dallo stesso
|
||||||
|
TString percorso =f.mask().get(F_PERCORSO); //Leggo il contenuto del campo
|
||||||
|
bool esiste=fexist(percorso); //Controllo l'esistenza del file
|
||||||
|
if (!esiste)
|
||||||
|
return f.error_box("Il percorso o il file specificato non esiste.");
|
||||||
|
modificato=TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (((f.dlg() == F_PERCORSO) || (f.dlg() == F_TIPO_RICE ))&& modificato)
|
||||||
|
{//Entro in questo if tutte le volte che è stato modificato il campo F_PERCORSO
|
||||||
|
//o F_TIPO_RICE
|
||||||
|
if (f.mask().get_int(F_TIPO_RICE) == 2)
|
||||||
|
{ //Questa parte dell'handler è riservata solo al campo F_PERCORSO
|
||||||
|
//se è abilitata la ricezione da AS400: in tutti gli altri casi
|
||||||
|
//non è garantito che ci sia un record di testa
|
||||||
|
TWait_cursor hourglass;
|
||||||
|
TRecord_text rec_temp; //Istanzio un tipo record_text
|
||||||
|
TString config_file_temp; //Nome del file di configurazione
|
||||||
|
TFilename percorso_temp; //Contiene il percorso completo del file sorgente
|
||||||
|
TFile_text *file_temp=NULL;
|
||||||
|
percorso_temp=f.mask().get(F_PERCORSO); //Leggo il contenuto di F_PERCORSO
|
||||||
|
file_temp=app().set_config_name(config_file_temp,f.mask(),percorso_temp);
|
||||||
|
file_temp->open('r'); //Apro il file di testo in rettura
|
||||||
|
int err = file_temp->read(rec_temp); //Leggo la prima riga del file di testo (dovrebbe contenere il record di testata)
|
||||||
|
if((err == NOERR) && (rec_temp.type() == RECORD_TESTA)) //Controllo la lettura e che ci sia il record di testa
|
||||||
|
{//La lettura della testata ha avuto successo
|
||||||
|
bool abilita_piaco = (rec_temp.get(AB_PIANO_CONTI) == ABILITATO);
|
||||||
|
f.mask().enable(F_PIANO_CONTI,abilita_piaco);
|
||||||
|
|
||||||
|
bool abilita_periodi = (rec_temp.get(AB_PERIODI_BIL) == ABILITATO);
|
||||||
|
f.mask().enable(F_PERIODI_BILANCI,abilita_periodi);
|
||||||
|
|
||||||
|
bool abilita_analisi = (rec_temp.get(AB_ANALISI) == ABILITATO);
|
||||||
|
f.mask().enable(F_ANALISI,abilita_analisi);
|
||||||
|
|
||||||
|
bool abilita_saldi_movimenti = (rec_temp.get(AB_SALDI) == ABILITATO) ||
|
||||||
|
(rec_temp.get(AB_DETT) == ABILITATO) ||
|
||||||
|
(rec_temp.get(AB_MOV) == ABILITATO);
|
||||||
|
f.mask().enable(F_SALDI,abilita_saldi_movimenti);
|
||||||
|
f.mask().enable(F_MOVIMENTI,abilita_saldi_movimenti);
|
||||||
|
}
|
||||||
|
else //non sono riuscito a trovare la testato o il tipo record dove me lo aspettavo
|
||||||
|
error_box ("Non ho trovato il record di testata o non riesco a leggere il file di configurazione");
|
||||||
|
file_temp->close();
|
||||||
|
delete file_temp;
|
||||||
|
file_temp =NULL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{//Ho scelto una ricezione INTERNA o USER_DEFINED: abilito tutti gli altri campi
|
||||||
|
//poichè non è previsto che ci sia un campo di testata
|
||||||
|
f.mask().enable(F_PIANO_CONTI,TRUE);
|
||||||
|
f.mask().enable(F_PERIODI_BILANCI,TRUE);
|
||||||
|
f.mask().enable(F_ANALISI,TRUE);
|
||||||
|
f.mask().enable(F_SALDI,TRUE);
|
||||||
|
f.mask().enable(F_MOVIMENTI,TRUE);
|
||||||
|
f.mask().enable(F_VOCI,TRUE);
|
||||||
|
f.mask().enable(F_RELAZ,TRUE);
|
||||||
|
f.mask().enable(F_SRELAZ,TRUE);
|
||||||
|
}
|
||||||
|
}// Non sono sul campo F_PERCORSO
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -444,6 +552,15 @@ void TRicezione::ricevi(TMask & msk)
|
|||||||
{
|
{
|
||||||
TRecord_text rec; //Istanzio un tipo record_text
|
TRecord_text rec; //Istanzio un tipo record_text
|
||||||
|
|
||||||
|
if (msk.get_bool(F_VOCI))
|
||||||
|
{
|
||||||
|
TRelation *r=_trasfile->t_rec(LF_VOCI)->relation();
|
||||||
|
TAdditional_cars * ca=new TAdditional_cars(_excllock);
|
||||||
|
r->replacef(ca,LF_CARADD);
|
||||||
|
TAdditional_cols * co=new TAdditional_cols();
|
||||||
|
r->replacef(co,LF_COLLDICH);
|
||||||
|
}
|
||||||
|
|
||||||
//Ciclo di lettura-scrittura fino a quando la lettura è possibile
|
//Ciclo di lettura-scrittura fino a quando la lettura è possibile
|
||||||
while (_trasfile->ok_r())
|
while (_trasfile->ok_r())
|
||||||
{
|
{
|
||||||
@ -557,6 +674,7 @@ void TAlbero_record::dept_first(TToken_string key, TRectype * padre, TRectype *
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//key is: FLAG|CODDETT|NREG|NRIG
|
//key is: FLAG|CODDETT|NREG|NRIG
|
||||||
TToken_string& TAlbero_record ::cerca_figlio (TToken_string &key,
|
TToken_string& TAlbero_record ::cerca_figlio (TToken_string &key,
|
||||||
TString_array& allkeys, // parametri ricerca COGE
|
TString_array& allkeys, // parametri ricerca COGE
|
||||||
@ -625,6 +743,7 @@ TToken_string& TAlbero_record ::cerca_figlio (TToken_string &key,
|
|||||||
return wrk_string;
|
return wrk_string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//key is: FLAG|CODDETT|NREG|NRIG
|
//key is: FLAG|CODDETT|NREG|NRIG
|
||||||
TToken_string& TAlbero_record ::cerca_fratello (TToken_string &key,
|
TToken_string& TAlbero_record ::cerca_fratello (TToken_string &key,
|
||||||
TString_array& allkeys, // parametri ricerca COGE
|
TString_array& allkeys, // parametri ricerca COGE
|
||||||
@ -785,10 +904,10 @@ void TRicezione::build_relana(TString& config_file, const TMask &msk, const TFil
|
|||||||
TRelation rel(LF_RELANA);
|
TRelation rel(LF_RELANA);
|
||||||
TAssoc_array tabtree;
|
TAssoc_array tabtree;
|
||||||
TRecord_text rec; //Creo un record text
|
TRecord_text rec; //Creo un record text
|
||||||
TFile_text *ft; //Dichiaro un nuovo file_text
|
TFile_text *ft=NULL; //Dichiaro un nuovo file_text
|
||||||
rel.add(LF_COLLDICH,"ID=IDCOLDICH");
|
rel.add(LF_COLLDICH,"ID=IDCOLDICH");
|
||||||
rel.add(LF_CARADD,"ID=IDCARADD");
|
rel.add(LF_CARADD,"ID=IDCARADD");
|
||||||
rel.write_enable();
|
|
||||||
ft = set_config_name(config_file,msk,percorso);
|
ft = set_config_name(config_file,msk,percorso);
|
||||||
ft->open('r'); //Apro il file di testo in lettura
|
ft->open('r'); //Apro il file di testo in lettura
|
||||||
|
|
||||||
@ -797,6 +916,11 @@ void TRicezione::build_relana(TString& config_file, const TMask &msk, const TFil
|
|||||||
return; //e controllo che i dati siano "corretti"
|
return; //e controllo che i dati siano "corretti"
|
||||||
CHECK(radici.get(ABRL_TIPOCOD)==FLAG_ANALISI, "Ci sono voci ma non tabelle ???");
|
CHECK(radici.get(ABRL_TIPOCOD)==FLAG_ANALISI, "Ci sono voci ma non tabelle ???");
|
||||||
|
|
||||||
|
TAdditional_cars * ca=new TAdditional_cars(_excllock);
|
||||||
|
rel.replacef(ca,LF_CARADD);
|
||||||
|
TAdditional_cols * co=new TAdditional_cols();
|
||||||
|
rel.replacef(co,LF_COLLDICH);
|
||||||
|
|
||||||
//Posiziona la lettura sul file di testo
|
//Posiziona la lettura sul file di testo
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
@ -808,6 +932,20 @@ void TRicezione::build_relana(TString& config_file, const TMask &msk, const TFil
|
|||||||
{
|
{
|
||||||
tabtree.destroy(); //Azzero l'assoc_array
|
tabtree.destroy(); //Azzero l'assoc_array
|
||||||
long currid=1;
|
long currid=1;
|
||||||
|
|
||||||
|
|
||||||
|
// Questa parte stampa in un file di testo la struttura ad albro
|
||||||
|
// dell'analisi: da usare solo in fase di debug
|
||||||
|
// ***************
|
||||||
|
// ***************
|
||||||
|
/* int level=0;
|
||||||
|
FILE * stream=fopen("\\st1.txt","w");
|
||||||
|
|
||||||
|
print_ana_tree(level,radici.curr(),stream);
|
||||||
|
fclose(stream); */
|
||||||
|
// ***************
|
||||||
|
// ***************
|
||||||
|
|
||||||
build_ana_tree(currid,radici.curr(),NULL,NULL,tabtree); // costruisce l'albero in memoria
|
build_ana_tree(currid,radici.curr(),NULL,NULL,tabtree); // costruisce l'albero in memoria
|
||||||
|
|
||||||
// legge dal file di testo e completa i record in tabtree
|
// legge dal file di testo e completa i record in tabtree
|
||||||
@ -828,6 +966,10 @@ void TRicezione::build_relana(TString& config_file, const TMask &msk, const TFil
|
|||||||
//Aggiorno il TIPOCOD: non può essere fatto in PRE_WRITE perchè può assumere valori diversi
|
//Aggiorno il TIPOCOD: non può essere fatto in PRE_WRITE perchè può assumere valori diversi
|
||||||
rel.lfile().put(ABRA_TIPOCOD,FLAG_VOCI);
|
rel.lfile().put(ABRA_TIPOCOD,FLAG_VOCI);
|
||||||
// modifica e scarica il record
|
// modifica e scarica il record
|
||||||
|
|
||||||
|
|
||||||
|
TRectype prova(LF_COLLDICH);
|
||||||
|
prova= rel.lfile(LF_COLLDICH).curr();
|
||||||
ft->autosave(rel,rec); //La relazione principale è basata su RELANA
|
ft->autosave(rel,rec); //La relazione principale è basata su RELANA
|
||||||
tabtree.remove(key);
|
tabtree.remove(key);
|
||||||
} while ((ft->read(rec) == NOERR) && (rec.type() == TIPO_SRELAZ));
|
} while ((ft->read(rec) == NOERR) && (rec.type() == TIPO_SRELAZ));
|
||||||
@ -846,16 +988,13 @@ void TRicezione::build_relana(TString& config_file, const TMask &msk, const TFil
|
|||||||
|
|
||||||
// passa alla prossima Analisi
|
// passa alla prossima Analisi
|
||||||
while (radici.next() == NOERR && curr_ana == radici.get(ABRL_CODVC));
|
while (radici.next() == NOERR && curr_ana == radici.get(ABRL_CODVC));
|
||||||
|
|
||||||
//Aggiorno il tipo di analisi corrente
|
//Aggiorno il tipo di analisi corrente
|
||||||
curr_ana = radici.get(ABRL_CODVC);
|
curr_ana = radici.get(ABRL_CODVC);
|
||||||
|
|
||||||
//Riposiziono la lettura sul testo
|
//Riposiziono la lettura sul testo
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
ft->read(rec);
|
ft->read(rec);
|
||||||
} while ((rec.type() != TIPO_SRELAZ) && rec.get(CODVC_VOCI) == curr_ana);
|
} while ((rec.type() != TIPO_SRELAZ) && (rec.get(CODVC_VOCI) == curr_ana.sright(2))); //Formatto la chiave
|
||||||
|
|
||||||
} while (radici.get(ABRL_TIPOCOD)=="A");
|
} while (radici.get(ABRL_TIPOCOD)=="A");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -865,26 +1004,27 @@ void TRicezione::build_ana_tree(long &currid, TRectype & nodo, TRectype * father
|
|||||||
{
|
{
|
||||||
TRectype *ana_node;
|
TRectype *ana_node;
|
||||||
TToken_string key;
|
TToken_string key;
|
||||||
//TString16 curr_ana = nodo.get(RELVOCI_CODANA); //S Non so dove venga usata
|
|
||||||
// calcola il numero di sottorelazione
|
// calcola il numero di sottorelazione
|
||||||
int c=1;
|
int c=1;
|
||||||
do {
|
do {
|
||||||
|
key.cut(0); //Vuota la chiave
|
||||||
key.add(nodo.get(ABRL_TIPOCOD));
|
key.add(nodo.get(ABRL_TIPOCOD));
|
||||||
key.add(nodo.get(ABRL_CODVC));
|
key.add(nodo.get(ABRL_CODVC));
|
||||||
key.add(nodo.get(ABRL_NCOMP));
|
key.add(nodo.get(ABRL_IDCOMP));
|
||||||
key.add(c);
|
key.add(c);
|
||||||
c++;
|
c++;
|
||||||
} while (tabtree.objptr(key)!=NULL);
|
} while (tabtree.objptr(key)!=NULL);
|
||||||
|
|
||||||
ana_node = new TRectype(LF_RELANA);
|
ana_node = new TRectype(LF_RELANA);
|
||||||
//ana_node->zero(' '); //Solo per vederlo a livello di debug
|
//ana_node->zero(' '); //Solo per vederlo a livello di debug
|
||||||
|
|
||||||
// setta il nodo
|
// setta il nodo
|
||||||
if (father == NULL)
|
if (father == NULL)
|
||||||
{//Sono la radice principale e leggo i dati già inseriti con la vecchia chiave
|
{//Sono la radice principale e leggo i dati già inseriti con la vecchia chiave
|
||||||
TLocalisamfile rela(LF_RELANA);
|
TLocalisamfile rela(LF_RELANA);
|
||||||
|
|
||||||
rela.put(ABRA_CODAN,key.get(1));
|
TString codan = key.get(1); //Questa chiave letta da LF_RELVOCI è in realtà lunga 10 caratteri
|
||||||
|
rela.put(ABRA_CODAN,codan.sright(2)); //mentre quella di LF_RELANA è lunga solo 2 (i due caratteri più a destra)
|
||||||
TString16 old_id = key.get();
|
TString16 old_id = key.get();
|
||||||
rela.put(ABRA_ID,atol(old_id));
|
rela.put(ABRA_ID,atol(old_id));
|
||||||
if (rela.read() == NOERR) //Leggo i dati inseriti precedentemente
|
if (rela.read() == NOERR) //Leggo i dati inseriti precedentemente
|
||||||
@ -905,7 +1045,7 @@ void TRicezione::build_ana_tree(long &currid, TRectype & nodo, TRectype * father
|
|||||||
TLocalisamfile relvoci(LF_RELVOCI);
|
TLocalisamfile relvoci(LF_RELVOCI);
|
||||||
relvoci.put(ABRL_TIPOCOD,'V'); //Deve essere una voce
|
relvoci.put(ABRL_TIPOCOD,'V'); //Deve essere una voce
|
||||||
relvoci.put(ABRL_CODVC,nodo.get(ABRL_CODCOMP));//Prendo il codice del mio figlio
|
relvoci.put(ABRL_CODVC,nodo.get(ABRL_CODCOMP));//Prendo il codice del mio figlio
|
||||||
relvoci.put(ABRL_NCOMP,1); //Prendo la prima istanza
|
relvoci.put(ABRL_IDCOMP,1); //Prendo la prima componente
|
||||||
if (relvoci.read()==NOERR)
|
if (relvoci.read()==NOERR)
|
||||||
{
|
{
|
||||||
currid++;
|
currid++;
|
||||||
@ -919,11 +1059,10 @@ void TRicezione::build_ana_tree(long &currid, TRectype & nodo, TRectype * father
|
|||||||
relvoci.curr().zero();
|
relvoci.curr().zero();
|
||||||
relvoci.put(ABRL_TIPOCOD,nodo.get(ABRL_TIPOCOD));
|
relvoci.put(ABRL_TIPOCOD,nodo.get(ABRL_TIPOCOD));
|
||||||
relvoci.put(ABRL_CODVC,nodo.get(ABRL_CODVC));
|
relvoci.put(ABRL_CODVC,nodo.get(ABRL_CODVC));
|
||||||
relvoci.put(ABRL_NCOMP,nodo.get_int(ABRL_NCOMP)+1);
|
relvoci.put(ABRL_IDCOMP,nodo.get_int(ABRL_IDCOMP)+1);
|
||||||
|
|
||||||
if (relvoci.read()==NOERR)
|
if (relvoci.read()==NOERR)
|
||||||
{
|
{
|
||||||
// && relvoci.get(RELVOCI_CODANA)==curr_ana
|
|
||||||
currid++;
|
currid++;
|
||||||
ana_node->put(ABRA_IDSUCC, currid);
|
ana_node->put(ABRA_IDSUCC, currid);
|
||||||
build_ana_tree(currid,relvoci.curr(),father,ana_node,tabtree);
|
build_ana_tree(currid,relvoci.curr(),father,ana_node,tabtree);
|
||||||
@ -933,6 +1072,45 @@ void TRicezione::build_ana_tree(long &currid, TRectype & nodo, TRectype * father
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
// Questa funzione serve solo in fase di debug:
|
||||||
|
// naviga per ricostruire il numero di sottorelazione
|
||||||
|
void TRicezione::print_ana_tree(int &level,TRectype & nodo,FILE * stream)
|
||||||
|
{
|
||||||
|
TToken_string key;
|
||||||
|
|
||||||
|
TString codvoce;
|
||||||
|
codvoce.fill(' ',3*level);
|
||||||
|
codvoce << nodo.get(ABRL_CODCOMP);
|
||||||
|
fprintf(stream,"%s\n",(const char *) codvoce);
|
||||||
|
// calcola il numero di sottorelazione
|
||||||
|
// passa al figlio leggendo su RELVOCI se esso esiste
|
||||||
|
TLocalisamfile relvoci(LF_RELVOCI);
|
||||||
|
relvoci.put(ABRL_TIPOCOD,'V'); //Deve essere una voce
|
||||||
|
relvoci.put(ABRL_CODVC,nodo.get(ABRL_CODCOMP));//Prendo il codice del mio figlio
|
||||||
|
relvoci.put(ABRL_IDCOMP,1); //Prendo la prima componente
|
||||||
|
if (relvoci.read()==NOERR)
|
||||||
|
{
|
||||||
|
level ++;
|
||||||
|
print_ana_tree(level,relvoci.curr(),stream); //Richiamo questa funzione
|
||||||
|
level --;
|
||||||
|
}
|
||||||
|
// passa al fratello
|
||||||
|
relvoci.curr().zero();
|
||||||
|
relvoci.put(ABRL_TIPOCOD,nodo.get(ABRL_TIPOCOD));
|
||||||
|
relvoci.put(ABRL_CODVC,nodo.get(ABRL_CODVC));
|
||||||
|
relvoci.put(ABRL_IDCOMP,nodo.get_int(ABRL_IDCOMP)+1);
|
||||||
|
|
||||||
|
if (relvoci.read()==NOERR)
|
||||||
|
{
|
||||||
|
// && relvoci.get(RELVOCI_CODANA)==curr_ana
|
||||||
|
print_ana_tree(level,relvoci.curr(),stream);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
void TRicezione::set_tipo_bil(const TString &tipo_bil)
|
void TRicezione::set_tipo_bil(const TString &tipo_bil)
|
||||||
{
|
{
|
||||||
_tipo_bilancio = tipo_bil;
|
_tipo_bilancio = tipo_bil;
|
||||||
@ -947,29 +1125,30 @@ bool TRicezione::menu(MENU_TAG)
|
|||||||
msk.set_handler(F_PERCORSO, inseriscipercorso); //Assegno un handler al campo F_PERCORSO
|
msk.set_handler(F_PERCORSO, inseriscipercorso); //Assegno un handler al campo F_PERCORSO
|
||||||
//inseriscipercorso controlla che il percorso (e il file) esista e sia corretto
|
//inseriscipercorso controlla che il percorso (e il file) esista e sia corretto
|
||||||
msk.set_handler(F_PERCORSO_UTENTE, inseriscipercorso);
|
msk.set_handler(F_PERCORSO_UTENTE, inseriscipercorso);
|
||||||
|
msk.set_handler(F_TIPO_RICE, inseriscipercorso);
|
||||||
|
_trasfile=NULL;
|
||||||
//A questo punto il percorso e' corretto
|
//A questo punto il percorso e' corretto
|
||||||
if (msk.run()== K_ENTER) //Eseguo la maschera
|
if (msk.run()== K_ENTER) //Eseguo la maschera
|
||||||
{
|
{
|
||||||
//Visualizza una finestra di attesa
|
//Visualizza una finestra di attesa
|
||||||
TIndwin idle(0,"Attendere: aggiornamento della tabella in corso.\n\nL'operazione potrebbe richiedere qualche minuto ... ",FALSE,FALSE,60);
|
TIndwin idle(0,"Attendere: aggiornamento della tabella in corso.\n\nL'operazione potrebbe richiedere qualche minuto ... ",FALSE,FALSE,60);
|
||||||
percorso=msk.get(F_PERCORSO); //Leggo il contenuto di F_PERCORSO
|
percorso=msk.get(F_PERCORSO); //Leggo il contenuto di F_PERCORSO
|
||||||
|
|
||||||
_trasfile=set_config_name(config_file,msk,percorso);
|
_trasfile=set_config_name(config_file,msk,percorso);
|
||||||
_trasfile->open('r'); //Apro il file di testo in rettura
|
_trasfile->open('r'); //Apro il file di testo in rettura
|
||||||
set_tipo_bil(msk.get(F_TIPO_BILANCIO));
|
set_tipo_bil(msk.get(F_TIPO_BILANCIO));
|
||||||
|
|
||||||
ricevi(msk);
|
ricevi(msk);
|
||||||
|
if (msk.get_bool(F_MOVIMENTI))
|
||||||
|
build_balancetree(LF_MOVDETT);
|
||||||
|
//La chiusura del _trasfile non può essere eseguita prima poichè questo
|
||||||
|
//serve nella costruzione dell'albero dei movimenti
|
||||||
_trasfile->close();
|
_trasfile->close();
|
||||||
delete _trasfile;
|
delete _trasfile;
|
||||||
_trasfile =NULL;
|
_trasfile =NULL;
|
||||||
|
|
||||||
if (msk.get_bool(F_MOVIMENTI))
|
|
||||||
build_balancetree(LF_MOVDETT);
|
|
||||||
|
|
||||||
if (msk.get_bool(F_SRELAZ))
|
if (msk.get_bool(F_SRELAZ))
|
||||||
build_relana(config_file,msk,percorso);
|
build_relana(config_file,msk,percorso);
|
||||||
|
|
||||||
//messaggio finale
|
//messaggio finale
|
||||||
message_box(" ... aggiornamento delle tabelle selezionate effettuato");
|
message_box(" ... aggiornamento delle tabelle selezionate effettuato");
|
||||||
} //end if (msk.run())
|
} //end if (msk.run())
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
#include <utility.h> //Definizione di fexit
|
#include <utility.h> //Definizione di fexit
|
||||||
#include "movdett.h" //Contiene le definizioni di costanti relative ai nomi dei campi di LF_MOVDETT
|
#include "movdett.h" //Contiene le definizioni di costanti relative ai nomi dei campi di LF_MOVDETT
|
||||||
#include "saldi.h" //Contiene le definizioni di costanti relative ai nomi dei campi di LF_SALDI
|
#include "saldi.h" //Contiene le definizioni di costanti relative ai nomi dei campi di LF_SALDI
|
||||||
|
#include "relana.h" //Contiene le definizioni di costanti relative ai nomi dei campi di LF_RELANA
|
||||||
#include "ab2100.h"
|
#include "ab2100.h"
|
||||||
#include "ab2100a.h"
|
#include "ab2100a.h"
|
||||||
#include <progind.h>
|
#include <progind.h>
|
||||||
@ -95,16 +96,16 @@ long TTrasferimento::my_num(TLocalisamfile& mov, TAssoc_array& progressivi)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
long id_prec =mov.get_long(ABMD_IDPREC);
|
long id_prec =mov.get_long(ABMD_IDPREC);
|
||||||
if (id_prec != ID_NULLO)
|
// if (id_prec != ID_NULLO) // Se il padre di un movimento è nullo significa che è un movimento di un saldo
|
||||||
{
|
// {
|
||||||
mov.put(ABMD_ID,id_prec);
|
mov.put(ABMD_ID,id_prec);
|
||||||
if (mov.read()== NOERR)
|
if (mov.read()== NOERR)
|
||||||
{
|
{
|
||||||
ret=my_num(mov,progressivi)+1;
|
ret=my_num(mov,progressivi)+1;
|
||||||
}
|
}
|
||||||
else
|
// else
|
||||||
CHECK (FALSE,"Si è verificata una inconsistenza nei dati: è stato trovato un movimento senza il padre!");
|
// CHECK (FALSE,"Si è verificata una inconsistenza nei dati: è stato trovato un movimento senza il padre!");
|
||||||
}
|
//}
|
||||||
TString16 str_ret;
|
TString16 str_ret;
|
||||||
str_ret << ret;
|
str_ret << ret;
|
||||||
progressivi.add(my_key,str_ret);
|
progressivi.add(my_key,str_ret);
|
||||||
@ -129,10 +130,11 @@ void TTrasferimento::trasferisci_albero(TRectype &node, TRecord_text &rec, TAsso
|
|||||||
rec.add(node.get(ABMD_CODDETT),CONTO_COGE_MOVDETT);
|
rec.add(node.get(ABMD_CODDETT),CONTO_COGE_MOVDETT);
|
||||||
//altrimenti, se il padre è un dettaglio, non scrivo nessuna informazione aggiuntiva
|
//altrimenti, se il padre è un dettaglio, non scrivo nessuna informazione aggiuntiva
|
||||||
}
|
}
|
||||||
else
|
// Se il padre del movimento non esiste, allora è un movimento di un saldo
|
||||||
{//Non dovrebbe mai succedere: non esiste il padre del movimento
|
// else
|
||||||
CHECK (FALSE,"Si è verificata una inconsistenza nei dati: è stato trovato un movimento senza il padre!");
|
// {//Non dovrebbe mai succedere: non esiste il padre del movimento
|
||||||
}
|
// CHECK (FALSE,"Si è verificata una inconsistenza nei dati: è stato trovato un movimento senza il padre!");
|
||||||
|
// }
|
||||||
|
|
||||||
//Questa parte esegue la "numerazione progressiva" dei movimenti: assegna il numero di riga
|
//Questa parte esegue la "numerazione progressiva" dei movimenti: assegna il numero di riga
|
||||||
TString16 num_riga;
|
TString16 num_riga;
|
||||||
@ -327,7 +329,6 @@ void TTrasferimento::converti(int logic_num)
|
|||||||
delete cur;
|
delete cur;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//Handler per l'inserimento del percorso completo
|
//Handler per l'inserimento del percorso completo
|
||||||
bool TTrasferimento::inseriscipercorso(TMask_field& f, KEY k)
|
bool TTrasferimento::inseriscipercorso(TMask_field& f, KEY k)
|
||||||
{
|
{
|
||||||
@ -352,6 +353,9 @@ bool TTrasferimento::menu(MENU_TAG)
|
|||||||
|
|
||||||
msk.hide(F_TIPO_BILANCIO); //nascondo questo campo poichè non mi serve
|
msk.hide(F_TIPO_BILANCIO); //nascondo questo campo poichè non mi serve
|
||||||
msk.hide(F_TESTO_TIPOBIL); //nascondo questo campo poichè non mi serve
|
msk.hide(F_TESTO_TIPOBIL); //nascondo questo campo poichè non mi serve
|
||||||
|
msk.hide(F_VOCI); //nascondo questo campo poichè non mi serve
|
||||||
|
msk.hide(F_RELAZ); //nascondo questo campo poichè non mi serve
|
||||||
|
msk.hide(F_SRELAZ); //nascondo questo campo poichè non mi serve
|
||||||
//A questo punto il percorso e' corretto
|
//A questo punto il percorso e' corretto
|
||||||
if (msk.run()== K_ENTER) //Eseguo la maschera
|
if (msk.run()== K_ENTER) //Eseguo la maschera
|
||||||
{
|
{
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
#define ABRA_IDFIGLIO "IDFIGLIO"
|
#define ABRA_IDFIGLIO "IDFIGLIO"
|
||||||
#define ABRA_TIPOCOD "TIPOCOD"
|
#define ABRA_TIPOCOD "TIPOCOD"
|
||||||
#define ABRA_CODVC "CODVC"
|
#define ABRA_CODVC "CODVC"
|
||||||
#define ABRA_NCOMP "NCOMP"
|
#define ABRA_NCOMP "IDCOMP"
|
||||||
#define ABRA_DESCRIZ "DESCRIZ"
|
#define ABRA_DESCRIZ "DESCRIZ"
|
||||||
#define ABRA_VOCEINCID "VOCEINCID"
|
#define ABRA_VOCEINCID "VOCEINCID"
|
||||||
#define ABRA_IDCOLDICH "IDCOLDICH"
|
#define ABRA_IDCOLDICH "IDCOLDICH"
|
||||||
|
@ -4,8 +4,10 @@
|
|||||||
|
|
||||||
#define ABRL_TIPOCOD "TIPOCOD"
|
#define ABRL_TIPOCOD "TIPOCOD"
|
||||||
#define ABRL_CODVC "CODVC"
|
#define ABRL_CODVC "CODVC"
|
||||||
#define ABRL_NCOMP "NCOMP"
|
#define ABRL_IDCOMP "IDCOMP"
|
||||||
#define ABRL_DESCR "DESCR"
|
#define ABRL_DESCR "DESCR"
|
||||||
#define ABRL_CODCOMP "CODCOMP"
|
#define ABRL_CODCOMP "COMP"
|
||||||
|
#define ABRL_NEXTCOMP "NEXTCOMP"
|
||||||
|
#define ABRL_PREVCOMP "PREVCOMP"
|
||||||
|
|
||||||
#endif //_RELVOCI_H
|
#endif //_RELVOCI_H
|
@ -7,6 +7,6 @@
|
|||||||
#define ABS_CODPDB "CODPDB"
|
#define ABS_CODPDB "CODPDB"
|
||||||
#define ABS_TIPOBIL "TIPOBIL"
|
#define ABS_TIPOBIL "TIPOBIL"
|
||||||
#define ABS_CODCBL "CODCBL"
|
#define ABS_CODCBL "CODCBL"
|
||||||
#define ABS_DETTFIGLIO "DETTFIGLIO"
|
#define ABS_DETTFIGLIO "IDMOVDETT"
|
||||||
|
|
||||||
#endif //_SALDI_H
|
#endif //_SALDI_H
|
@ -5,6 +5,6 @@
|
|||||||
#define ABVC_CODVC "CODVC"
|
#define ABVC_CODVC "CODVC"
|
||||||
#define ABVC_IDCARADD "IDCARADD"
|
#define ABVC_IDCARADD "IDCARADD"
|
||||||
#define ABVC_TIPOVC "TIPOVC"
|
#define ABVC_TIPOVC "TIPOVC"
|
||||||
#define ABVC_DESCR "DESCR"
|
#define ABVC_DESCR "DESCRIZ"
|
||||||
|
|
||||||
#endif //_VOCI_H
|
#endif //_VOCI_H
|
Loading…
x
Reference in New Issue
Block a user