Patch level : 2.2 210
Files correlati : Ricompilazione Demo : [ ] Commento : git-svn-id: svn://10.65.10.50/trunk@12653 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
dcc9ea95d7
commit
621266b2dc
@ -18,15 +18,39 @@ class TMovanal_msk : public TAutomask
|
|||||||
protected:
|
protected:
|
||||||
virtual bool on_field_event(TOperable_field& o, TField_event fe, long jolly);
|
virtual bool on_field_event(TOperable_field& o, TField_event fe, long jolly);
|
||||||
virtual bool can_be_closed() const;
|
virtual bool can_be_closed() const;
|
||||||
|
virtual bool on_key(KEY key);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
void show_locked_buttons();
|
||||||
|
|
||||||
TMovanal_msk();
|
TMovanal_msk();
|
||||||
virtual ~TMovanal_msk() { }
|
virtual ~TMovanal_msk() { }
|
||||||
};
|
};
|
||||||
|
|
||||||
bool TMovanal_msk::can_be_closed() const
|
bool TMovanal_msk::can_be_closed() const
|
||||||
{
|
{
|
||||||
return !get_bool(F_BLOCCATO);
|
return mode() != MODE_MOD || !get_bool(F_BLOCCATO);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TMovanal_msk::on_key(KEY key)
|
||||||
|
{
|
||||||
|
if (key == K_SHIFT + K_F12 && !can_be_closed())
|
||||||
|
{
|
||||||
|
enable(F_BLOCCATO);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return TAutomask::on_key(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
void TMovanal_msk::show_locked_buttons()
|
||||||
|
{
|
||||||
|
const bool editmode = mode() == MODE_MOD;
|
||||||
|
const bool unlocked = can_be_closed();
|
||||||
|
show (F_BLOCCATO, editmode);
|
||||||
|
enable(F_BLOCCATO, unlocked);
|
||||||
|
enable(DLG_SAVEREC, unlocked && edit_mode()); // Abilito il "Registra" solo in modo modifica
|
||||||
|
enable(DLG_DELREC, unlocked && editmode);
|
||||||
|
enable(DLG_QUIT, unlocked);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TMovanal_msk::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
bool TMovanal_msk::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||||||
@ -93,6 +117,10 @@ bool TMovanal_msk::on_field_event(TOperable_field& o, TField_event e, long jolly
|
|||||||
totrig.sezione() == 'D' ? TR("Dare") : TR("Avere"));
|
totrig.sezione() == 'D' ? TR("Dare") : TR("Avere"));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case F_BLOCCATO:
|
||||||
|
if (e == fe_modify)
|
||||||
|
show_locked_buttons();
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -194,10 +222,8 @@ const TString& TMovanal_app::somma_campi(TToken_string& row, int first) const
|
|||||||
|
|
||||||
int TMovanal_app::write_rows(const TMask& m)
|
int TMovanal_app::write_rows(const TMask& m)
|
||||||
{
|
{
|
||||||
TRecord_array a(LF_RMOVANA, RMOVANA_NUMRIG);
|
TAnal_mov& mov = (TAnal_mov&)_rel->curr();
|
||||||
TRectype* key = new TRectype(LF_RMOVANA);
|
mov.destroy_rows();
|
||||||
key->put(RMOVANA_NUMREG, m.get(F_NUMREG));
|
|
||||||
a.set_key(key);
|
|
||||||
|
|
||||||
TSheet_field& sheet = _msk->sfield(F_RIGHE);
|
TSheet_field& sheet = _msk->sfield(F_RIGHE);
|
||||||
|
|
||||||
@ -210,7 +236,7 @@ int TMovanal_app::write_rows(const TMask& m)
|
|||||||
// Scandisce lo sheet e riempie il recarray
|
// Scandisce lo sheet e riempie il recarray
|
||||||
FOR_EACH_SHEET_ROW(sheet, i, row)
|
FOR_EACH_SHEET_ROW(sheet, i, row)
|
||||||
{
|
{
|
||||||
TRectype& rec = a.row(i+1, true); // Crea una riga nuova
|
TRectype& rec = mov.new_row(); // Crea una riga nuova
|
||||||
rec.put(RMOVANA_ANNOES, m.get(F_ANNOES));
|
rec.put(RMOVANA_ANNOES, m.get(F_ANNOES));
|
||||||
rec.put(RMOVANA_DATAREG, m.get(F_DATAREG));
|
rec.put(RMOVANA_DATAREG, m.get(F_DATAREG));
|
||||||
rec.put(RMOVANA_DESCR, row->get(sheet.cid2index(S_DESCR)));
|
rec.put(RMOVANA_DESCR, row->get(sheet.cid2index(S_DESCR)));
|
||||||
@ -231,7 +257,6 @@ int TMovanal_app::write_rows(const TMask& m)
|
|||||||
rec.put(RMOVANA_CODFASE, somma_campi(*row, pos_fas));
|
rec.put(RMOVANA_CODFASE, somma_campi(*row, pos_fas));
|
||||||
rec.put(RMOVANA_CODCONTO, somma_campi(*row, pos_con));
|
rec.put(RMOVANA_CODCONTO, somma_campi(*row, pos_con));
|
||||||
}
|
}
|
||||||
a.rewrite();
|
|
||||||
return NOERR;
|
return NOERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -257,9 +282,8 @@ void TMovanal_app::spezza_campo(const TString& str, TToken_string& row, int firs
|
|||||||
|
|
||||||
void TMovanal_app::read_rows(const TMask& m)
|
void TMovanal_app::read_rows(const TMask& m)
|
||||||
{
|
{
|
||||||
TRectype key (LF_RMOVANA);
|
const TAnal_mov& mov = (const TAnal_mov&)_rel->curr();
|
||||||
key.put(RMOVANA_NUMREG, _msk->get(F_NUMREG));
|
const TRecord_array& a = mov[LF_RMOVANA];
|
||||||
TRecord_array a(key, RMOVANA_NUMRIG);
|
|
||||||
|
|
||||||
TSheet_field& sheet = m.sfield(F_RIGHE);
|
TSheet_field& sheet = m.sfield(F_RIGHE);
|
||||||
sheet.destroy();
|
sheet.destroy();
|
||||||
@ -295,9 +319,8 @@ int TMovanal_app::write(const TMask& m)
|
|||||||
int err = m.get_bool(F_BLOCCATO) ? _islocked : NOERR;
|
int err = m.get_bool(F_BLOCCATO) ? _islocked : NOERR;
|
||||||
if (err == NOERR)
|
if (err == NOERR)
|
||||||
{
|
{
|
||||||
err = TRelation_application::write(m);
|
|
||||||
if (err == NOERR)
|
|
||||||
write_rows(m);
|
write_rows(m);
|
||||||
|
err = TRelation_application::write(m);
|
||||||
}
|
}
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
@ -307,47 +330,40 @@ int TMovanal_app::rewrite(const TMask& m)
|
|||||||
int err = m.get_bool(F_BLOCCATO) ? _islocked : NOERR;
|
int err = m.get_bool(F_BLOCCATO) ? _islocked : NOERR;
|
||||||
if (err == NOERR)
|
if (err == NOERR)
|
||||||
{
|
{
|
||||||
err = TRelation_application::rewrite(m);
|
|
||||||
if (err == NOERR)
|
|
||||||
write_rows(m);
|
write_rows(m);
|
||||||
|
err = TRelation_application::rewrite(m);
|
||||||
}
|
}
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
int TMovanal_app::read(TMask& m)
|
int TMovanal_app::read(TMask& m)
|
||||||
{
|
{
|
||||||
int err = TRelation_application::read(m);
|
const int err = TRelation_application::read(m);
|
||||||
if (err == NOERR)
|
if (err == NOERR)
|
||||||
{
|
|
||||||
read_rows(m);
|
read_rows(m);
|
||||||
}
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TMovanal_app::init_query_mode(TMask& m)
|
void TMovanal_app::init_query_mode(TMask& m)
|
||||||
{
|
{
|
||||||
m.enable(F_BLOCCATO);
|
((TMovanal_msk&)m).show_locked_buttons();
|
||||||
m.enable(DLG_SAVEREC);
|
|
||||||
m.enable(DLG_QUIT);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TMovanal_app::init_insert_mode(TMask& m)
|
void TMovanal_app::init_insert_mode(TMask& m)
|
||||||
{
|
{
|
||||||
m.enable(F_BLOCCATO);
|
((TMovanal_msk&)m).show_locked_buttons();
|
||||||
m.enable(DLG_SAVEREC);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TMovanal_app::init_modify_mode(TMask& m)
|
void TMovanal_app::init_modify_mode(TMask& m)
|
||||||
{
|
{
|
||||||
const bool unlocked = m.can_be_closed();
|
((TMovanal_msk&)m).show_locked_buttons();
|
||||||
m.enable(F_BLOCCATO, unlocked);
|
|
||||||
m.enable(DLG_SAVEREC, unlocked);
|
|
||||||
m.enable(DLG_QUIT, unlocked);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TMovanal_app::user_create()
|
bool TMovanal_app::user_create()
|
||||||
{
|
{
|
||||||
_rel = new TRelation(LF_MOVANA);
|
_rel = new TRelation(LF_MOVANA);
|
||||||
|
_rel->lfile().set_curr(new TAnal_mov);
|
||||||
|
|
||||||
_msk = new TMovanal_msk;
|
_msk = new TMovanal_msk;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
#define F_DARE 115
|
#define F_DARE 115
|
||||||
#define F_AVERE 116
|
#define F_AVERE 116
|
||||||
#define F_BLOCCATO 117
|
#define F_BLOCCATO 117
|
||||||
|
#define F_TIPO 118
|
||||||
|
|
||||||
#define F_NUMREG2 201
|
#define F_NUMREG2 201
|
||||||
#define F_ANNOES2 202
|
#define F_ANNOES2 202
|
||||||
@ -22,7 +23,6 @@
|
|||||||
#define F_DESCR2 204
|
#define F_DESCR2 204
|
||||||
#define F_RIGHE 300
|
#define F_RIGHE 300
|
||||||
|
|
||||||
|
|
||||||
#define S_DARE 101
|
#define S_DARE 101
|
||||||
#define S_AVERE 102
|
#define S_AVERE 102
|
||||||
#define S_DESCR 103
|
#define S_DESCR 103
|
||||||
|
@ -91,6 +91,7 @@ BEGIN
|
|||||||
DISPLAY "Descrizione@60" S0
|
DISPLAY "Descrizione@60" S0
|
||||||
OUTPUT F_TIPODOC CODTAB
|
OUTPUT F_TIPODOC CODTAB
|
||||||
CHECKTYPE NORMAL
|
CHECKTYPE NORMAL
|
||||||
|
FIELD TIPODOC
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING F_DESCR 50
|
STRING F_DESCR 50
|
||||||
@ -141,15 +142,24 @@ BEGIN
|
|||||||
PROMPT 1 14 "@bMovimento"
|
PROMPT 1 14 "@bMovimento"
|
||||||
END
|
END
|
||||||
|
|
||||||
|
LIST F_TIPO 1 25
|
||||||
|
BEGIN
|
||||||
|
PROMPT 2 15 "Tipo "
|
||||||
|
ITEM " |Normale"
|
||||||
|
ITEM "P|Preventivo"
|
||||||
|
ITEM "V|Variazione preventivo"
|
||||||
|
FIELD TIPOMOV
|
||||||
|
END
|
||||||
|
|
||||||
CURRENCY F_TOTDOC 18
|
CURRENCY F_TOTDOC 18
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 15 "Totale documento "
|
PROMPT 2 16 "Totale documento "
|
||||||
FIELD TOTDOC
|
FIELD TOTDOC
|
||||||
END
|
END
|
||||||
|
|
||||||
LISTBOX F_SEZIONE 1 5
|
LISTBOX F_SEZIONE 1 5
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 39 15 ""
|
PROMPT 39 16 ""
|
||||||
ITEM "D|Dare"
|
ITEM "D|Dare"
|
||||||
ITEM "A|Avere"
|
ITEM "A|Avere"
|
||||||
FIELD SEZIONE
|
FIELD SEZIONE
|
||||||
|
148
ca/calib01.cpp
148
ca/calib01.cpp
@ -4,6 +4,10 @@
|
|||||||
#include <tree.h>
|
#include <tree.h>
|
||||||
#include <pconti.h>
|
#include <pconti.h>
|
||||||
|
|
||||||
|
#include "movana.h"
|
||||||
|
#include "rmovana.h"
|
||||||
|
#include "saldana.h"
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
// TMultilevel_code_info
|
// TMultilevel_code_info
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
@ -931,9 +935,147 @@ bool TAnal_app::user_destroy()
|
|||||||
// TAnal_mov
|
// TAnal_mov
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
TImporto& TAnal_mov::saldo(const TRectype& row)
|
||||||
|
{
|
||||||
|
TToken_string key;
|
||||||
|
key.add(get(MOVANA_TIPOMOV));
|
||||||
|
key.add(get(MOVANA_ANNOES));
|
||||||
|
key.add(row.get(RMOVANA_CODCCOSTO));
|
||||||
|
key.add(row.get(RMOVANA_CODCMS));
|
||||||
|
key.add(row.get(RMOVANA_CODFASE));
|
||||||
|
key.add(row.get(RMOVANA_CODCONTO));
|
||||||
|
|
||||||
|
TImporto* imp = (TImporto*)_saldi.objptr(key);
|
||||||
|
if (imp == NULL)
|
||||||
|
{
|
||||||
|
imp = new TImporto;
|
||||||
|
_saldi.add(key, imp);
|
||||||
|
}
|
||||||
|
return *imp;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TAnal_mov::load_saldi(bool reset)
|
||||||
|
{
|
||||||
|
if (reset)
|
||||||
|
_saldi.destroy();
|
||||||
|
|
||||||
|
const TRecord_array& a = body(LF_RMOVANA);
|
||||||
|
for (int i = a.last_row(); i > 0; i--)
|
||||||
|
{
|
||||||
|
const TRectype& row = a[i];
|
||||||
|
const TImporto imp(row.get_char(RMOVANA_SEZIONE), row.get_real(RMOVANA_IMPORTO));
|
||||||
|
TImporto& sld = saldo(row);
|
||||||
|
if (reset)
|
||||||
|
sld -= imp;
|
||||||
|
else
|
||||||
|
sld += imp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void TAnal_mov::update_saldi(bool kill)
|
||||||
|
{
|
||||||
|
if (!kill)
|
||||||
|
load_saldi(false);
|
||||||
|
|
||||||
|
save_saldi();
|
||||||
|
|
||||||
|
if (kill)
|
||||||
|
_saldi.destroy();
|
||||||
|
else
|
||||||
|
load_saldi(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void TAnal_mov::save_saldi()
|
||||||
|
{
|
||||||
|
TLocalisamfile saldi(LF_SALDANA);
|
||||||
|
FOR_EACH_ASSOC_OBJECT(_saldi, h, k, o)
|
||||||
|
{
|
||||||
|
const TImporto& imp = (const TImporto&)o;
|
||||||
|
if (!imp.is_zero())
|
||||||
|
{
|
||||||
|
TToken_string key = k;
|
||||||
|
const char tipo = key.get_char(0);
|
||||||
|
saldi.put(SALDANA_ANNO, key.get());
|
||||||
|
saldi.put(SALDANA_COSTO, key.get());
|
||||||
|
saldi.put(SALDANA_COMMESSA, key.get());
|
||||||
|
saldi.put(SALDANA_FASE, key.get());
|
||||||
|
saldi.put(SALDANA_CONTO, key.get());
|
||||||
|
|
||||||
|
int err = saldi.read(_isequal, _testandlock);
|
||||||
|
if (err != NOERR)
|
||||||
|
{
|
||||||
|
saldi.put(SALDANA_ANNO, key.get(1));
|
||||||
|
saldi.put(SALDANA_COSTO, key.get());
|
||||||
|
saldi.put(SALDANA_COMMESSA, key.get());
|
||||||
|
saldi.put(SALDANA_FASE, key.get());
|
||||||
|
saldi.put(SALDANA_CONTO, key.get());
|
||||||
|
saldi.write();
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* fld_sez = NULL;
|
||||||
|
const char* fld_val = NULL;
|
||||||
|
switch (tipo)
|
||||||
|
{
|
||||||
|
case 'P': fld_sez = SALDANA_SEZIONEP; fld_val = SALDANA_SEZIONEP; break;
|
||||||
|
case 'V': fld_sez = SALDANA_SEZIONEV; fld_val = SALDANA_SEZIONEV; break;
|
||||||
|
default : fld_sez = SALDANA_SEZIONE; fld_val = SALDANA_SEZIONE; break;
|
||||||
|
}
|
||||||
|
TImporto saldo(saldi.get_char(fld_sez), saldi.get_real(fld_val));
|
||||||
|
saldo += imp;
|
||||||
|
saldo.normalize();
|
||||||
|
|
||||||
|
saldi.put(fld_sez, saldo.sezione());
|
||||||
|
saldi.put(fld_val, saldo.valore());
|
||||||
|
saldi.rewrite();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int TAnal_mov::readat(TBaseisamfile& f, TRecnotype nrec, word lockop)
|
||||||
|
{
|
||||||
|
const int err = TMultiple_rectype::readat(f, nrec, lockop);
|
||||||
|
load_saldi(true);
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
int TAnal_mov::read(TBaseisamfile& f, word op, word lockop)
|
||||||
|
{
|
||||||
|
const int err = TMultiple_rectype::read(f, op, lockop);
|
||||||
|
load_saldi(true);
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
int TAnal_mov::write(TBaseisamfile& f) const
|
||||||
|
{
|
||||||
|
const int err = TMultiple_rectype::write(f);
|
||||||
|
if (err == NOERR)
|
||||||
|
{
|
||||||
|
((TAnal_mov*)this)->update_saldi(false);
|
||||||
|
}
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
int TAnal_mov::rewrite(TBaseisamfile& f) const
|
||||||
|
{
|
||||||
|
const int err = TMultiple_rectype::rewrite(f);
|
||||||
|
if (err == NOERR)
|
||||||
|
{
|
||||||
|
((TAnal_mov*)this)->update_saldi(false);
|
||||||
|
}
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
int TAnal_mov::remove(TBaseisamfile& f) const
|
||||||
|
{
|
||||||
|
const int err = TMultiple_rectype::remove(f);
|
||||||
|
if (err == NOERR)
|
||||||
|
((TAnal_mov*)this)->update_saldi(true);
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
int TAnal_mov::read(long numreg, word lock)
|
int TAnal_mov::read(long numreg, word lock)
|
||||||
{
|
{
|
||||||
put("NUMREG", numreg);
|
put(MOVANA_NUMREG, numreg);
|
||||||
return TMultiple_rectype::read(_isequal, lock);
|
return TMultiple_rectype::read(_isequal, lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -941,9 +1083,11 @@ TAnal_mov::TAnal_mov(long numreg) : TMultiple_rectype(LF_MOVANA)
|
|||||||
{
|
{
|
||||||
add_file(LF_RMOVANA, "NUMRIG");
|
add_file(LF_RMOVANA, "NUMRIG");
|
||||||
if (numreg > 0)
|
if (numreg > 0)
|
||||||
read (numreg);
|
read(numreg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
// Utilities
|
// Utilities
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
|
19
ca/calib01.h
19
ca/calib01.h
@ -113,10 +113,23 @@ protected:
|
|||||||
|
|
||||||
class TAnal_mov : public TMultiple_rectype
|
class TAnal_mov : public TMultiple_rectype
|
||||||
{
|
{
|
||||||
public:
|
TAssoc_array _saldi;
|
||||||
int read(long numreg, word lockop = _nolock);
|
|
||||||
|
|
||||||
//costruttore
|
protected:
|
||||||
|
TImporto& saldo(const TRectype& rec);
|
||||||
|
void load_saldi(bool reset);
|
||||||
|
void update_saldi(bool kill);
|
||||||
|
void save_saldi();
|
||||||
|
|
||||||
|
public:
|
||||||
|
virtual int readat(TBaseisamfile& f, TRecnotype nrec, word lockop);
|
||||||
|
virtual int read(TBaseisamfile& f, word op, word lockop);
|
||||||
|
virtual int write(TBaseisamfile& f) const;
|
||||||
|
virtual int rewrite(TBaseisamfile& f) const;
|
||||||
|
virtual int remove(TBaseisamfile& f) const;
|
||||||
|
|
||||||
|
public:
|
||||||
|
int read(long numreg, word lockop = _nolock); // Funzione read di comodo
|
||||||
TAnal_mov(long numreg = 0);
|
TAnal_mov(long numreg = 0);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
151
|
151
|
||||||
0
|
0
|
||||||
$parana|0|0|46|0|Parametri rip.centri di costo/commesse|||
|
$saldana|0|0|142|0|Saldi contabilita' analitica|||
|
||||||
|
23
ca/f151.trr
23
ca/f151.trr
@ -1,10 +1,15 @@
|
|||||||
151
|
151
|
||||||
5
|
11
|
||||||
TIPO|1|3|0|<CDC> Centro di costo, <CMS> Commessa
|
ANNO|9|4|0|Codice esercizio
|
||||||
COD|1|20|0|Centro di costo/commessa
|
COSTO|1|20|0|Centro Di costo
|
||||||
NRIGA|1|3|0|Numero riga
|
COMMESSA|1|20|0|Commessa
|
||||||
CODRIP|1|4|0|Codice Ripartizione
|
FASE|1|20|0|Fase
|
||||||
VALRIP|4|15|5|Valore
|
CONTO|1|20|0|Conto
|
||||||
2
|
SEZIONE|7|1|0|Sezione (Normale)
|
||||||
TIPO+COD+NRIGA|
|
SALDO|4|18|3|Saldo (Normale)
|
||||||
TIPO+CODRIP+COD|X
|
SEZIONEP|7|1|0|Sezione (Preventivo)
|
||||||
|
SALDOP|4|18|3|Saldo (Preventivo)
|
||||||
|
SEZIONEV|7|1|0|Sezione (Variazione preventivo)
|
||||||
|
SALDOV|4|18|3|Saldo (Variazione preventivo)
|
||||||
|
1
|
||||||
|
ANNO+COSTO+COMMESSA+FASE+CONTO|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user