Patch level : 2.2 82
Files correlati : ca0.exe Ricompilazione Demo : [ ] Commento : Aggiunto il collegamento tra piano dei conti analitica e piano dei conti contabile git-svn-id: svn://10.65.10.50/trunk@12968 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
f189b22dba
commit
f604712a95
220
ca/ca0400.cpp
220
ca/ca0400.cpp
@ -4,28 +4,221 @@
|
||||
|
||||
#include "calib01.h"
|
||||
#include "ca0400a.h"
|
||||
#include "pdcana.h"
|
||||
#include "panapdc.h"
|
||||
#include <pconti.h>
|
||||
|
||||
class TPiano_conti_anal_msk : public TSimple_anal_msk
|
||||
{
|
||||
int _ind_bilancio;
|
||||
|
||||
protected:
|
||||
virtual int get_logicnum() const { return LF_PCONANA; }
|
||||
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
||||
|
||||
public:
|
||||
TPiano_conti_anal_msk() { read("ca0400a"); }
|
||||
};
|
||||
|
||||
bool TPiano_conti_anal_msk::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||||
{
|
||||
switch (o.dlg())
|
||||
{
|
||||
case F_SHEET:
|
||||
if (e == fe_init)
|
||||
{
|
||||
_ind_bilancio = 0;
|
||||
TSheet_field & s = (TSheet_field &) o;
|
||||
if (s.items() > 0)
|
||||
{
|
||||
TToken_string str = s.row(0);
|
||||
TString key;
|
||||
|
||||
key << str.get(0) << "|";
|
||||
key << str.get();
|
||||
|
||||
_ind_bilancio = atoi(cache().get(LF_PCON, key, PCN_INDBIL));
|
||||
}
|
||||
}
|
||||
else
|
||||
if (e == se_leave)
|
||||
{
|
||||
TSheet_field & s = (TSheet_field &) o;
|
||||
TToken_string str = s.row(s.selected());
|
||||
TString key;
|
||||
|
||||
key << str.get(0) << "|";
|
||||
key << str.get();
|
||||
|
||||
const TRectype & pcon = cache().get(LF_PCON, key);
|
||||
if (!pcon.empty())
|
||||
{
|
||||
const int ind_bilancio = pcon.get_int(PCN_INDBIL);
|
||||
if (_ind_bilancio == 0)
|
||||
_ind_bilancio = ind_bilancio;
|
||||
if (_ind_bilancio != ind_bilancio)
|
||||
return error_box("Indicatore di bilancio errato %d", ind_bilancio);
|
||||
else
|
||||
return true;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return TSimple_anal_msk::on_field_event(o, e, jolly);
|
||||
}
|
||||
|
||||
class TAnalisi_rec : public TMultiple_rectype
|
||||
{
|
||||
|
||||
protected:
|
||||
|
||||
public:
|
||||
TAnalisi_rec();
|
||||
};
|
||||
|
||||
TAnalisi_rec::TAnalisi_rec() : TMultiple_rectype(LF_PCONANA)
|
||||
{
|
||||
add_file(LF_PANAPDC, PANAPDC_NRIGA);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// TAnalisi_app
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
class TAnalisi_app : public TAnal_app
|
||||
{
|
||||
TAnalisi_rec * _rows;
|
||||
int _maxlev;
|
||||
|
||||
protected:
|
||||
virtual TSimple_anal_msk* create_mask() const { return new TPiano_conti_anal_msk; }
|
||||
|
||||
void rec2row(const TMask& m);
|
||||
int row2rec(const TMask& m);
|
||||
virtual int read(TMask& m);
|
||||
virtual int write(const TMask& m);
|
||||
virtual int rewrite(const TMask& m);
|
||||
virtual bool remove();
|
||||
void init_modify_mode(TMask& mask);
|
||||
void init_insert_mode(TMask& mask);
|
||||
|
||||
virtual bool create();
|
||||
virtual bool user_create();
|
||||
virtual bool user_destroy();
|
||||
};
|
||||
|
||||
void TAnalisi_app::rec2row(const TMask& m)
|
||||
{
|
||||
TSheet_field & s = m.sfield(F_SHEET);
|
||||
const TMultiple_rectype & r = *_rows;
|
||||
const int items = r.rows();
|
||||
|
||||
s.destroy();
|
||||
|
||||
if (items > 0)
|
||||
{
|
||||
for (int i = 1; i <= items; i++)
|
||||
{
|
||||
const TRectype & rec = r.body(0)[i];
|
||||
TToken_string & str = s.row(i - 1);
|
||||
|
||||
str.add(rec.get(PANAPDC_GRUPPO));
|
||||
str.add(rec.get(PANAPDC_CONTO));
|
||||
str.add(rec.get(PANAPDC_SOTTOCONTO));
|
||||
s.check_row(i - 1);
|
||||
}
|
||||
}
|
||||
s.force_update();
|
||||
}
|
||||
|
||||
int TAnalisi_app::read(TMask& m)
|
||||
{
|
||||
int err = TAnal_app::read(m);
|
||||
|
||||
if (err == NOERR)
|
||||
{
|
||||
const TRelation * r = get_relation();
|
||||
|
||||
_rows->zero();
|
||||
_rows->put(PANAPDC_CODCONTO, r->curr().get(PANA_CODCONTO));
|
||||
if (_rows->read() == NOERR)
|
||||
rec2row(m);
|
||||
}
|
||||
return err;
|
||||
}
|
||||
|
||||
int TAnalisi_app::row2rec(const TMask& m)
|
||||
{
|
||||
TSheet_field & s = m.sfield(F_SHEET);
|
||||
TMultiple_rectype & r = *_rows;
|
||||
|
||||
const int items = s.items();
|
||||
|
||||
r.destroy_rows();
|
||||
|
||||
if (items > 0)
|
||||
{
|
||||
for (int i = 0; i < items; i++)
|
||||
{
|
||||
TRectype & rec = r.new_row();
|
||||
TToken_string & str = s.row(i);
|
||||
|
||||
rec.put(PANAPDC_GRUPPO, str.get(0));
|
||||
rec.put(PANAPDC_CONTO, str.get());
|
||||
rec.put(PANAPDC_SOTTOCONTO, str.get());
|
||||
}
|
||||
}
|
||||
return items;
|
||||
}
|
||||
|
||||
int TAnalisi_app::write(const TMask& m)
|
||||
{
|
||||
TRelation * r = get_relation();
|
||||
((TSimple_anal_msk &)m).update_tree_field();
|
||||
|
||||
row2rec(m);
|
||||
const int err = _rows->write();
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
int TAnalisi_app::rewrite(const TMask& m)
|
||||
{
|
||||
TRelation * r = get_relation();
|
||||
((TSimple_anal_msk &)m).update_tree_field();
|
||||
|
||||
row2rec(m);
|
||||
const int err = _rows->rewrite();
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
bool TAnalisi_app::remove()
|
||||
{
|
||||
TRelation * r = get_relation();
|
||||
const int err = _rows->remove();
|
||||
|
||||
return err == NOERR;
|
||||
}
|
||||
|
||||
void TAnalisi_app::init_modify_mode(TMask& mask)
|
||||
{
|
||||
const short id = ((TPiano_conti_anal_msk &)mask).get_field_id(_maxlev, 1);
|
||||
|
||||
mask.enable_page(1, mask.get(id).not_empty());
|
||||
TAnal_app::init_modify_mode(mask);
|
||||
}
|
||||
|
||||
void TAnalisi_app::init_insert_mode(TMask& mask)
|
||||
{
|
||||
const short id = ((TPiano_conti_anal_msk &)mask).get_field_id(_maxlev, 1);
|
||||
|
||||
mask.enable_page(1, mask.get(id).not_empty());
|
||||
TAnal_app::init_insert_mode(mask);
|
||||
}
|
||||
|
||||
bool TAnalisi_app::create()
|
||||
{
|
||||
TConfig_anal cfg;
|
||||
@ -42,9 +235,36 @@ bool TAnalisi_app::create()
|
||||
else
|
||||
return error_box(TR("Il piano dei conti analitico non e' stato configurato"));
|
||||
}
|
||||
|
||||
return TAnal_app::create();
|
||||
}
|
||||
|
||||
bool TAnalisi_app::user_create()
|
||||
{
|
||||
const bool ok = TAnal_app::user_create();
|
||||
|
||||
if (ok)
|
||||
{
|
||||
_rows = new TAnalisi_rec();
|
||||
TPiano_conti_anal_msk * m = (TPiano_conti_anal_msk * ) get_mask(0);
|
||||
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
const short id = m->get_field_id(i, 1);
|
||||
if (id <= 0 || m->id2pos(id) < 0)
|
||||
break;
|
||||
_maxlev = i;
|
||||
}
|
||||
}
|
||||
return ok;
|
||||
}
|
||||
|
||||
bool TAnalisi_app::user_destroy()
|
||||
{
|
||||
delete _rows;
|
||||
return TAnal_app::user_destroy();
|
||||
}
|
||||
|
||||
int ca0400(int argc, char* argv[])
|
||||
{
|
||||
TAnalisi_app app;
|
||||
|
27
ca/ca0400a.h
27
ca/ca0400a.h
@ -1,13 +1,22 @@
|
||||
#define F_KEY_1 101
|
||||
#define F_KEY_2 102
|
||||
#define F_KEY_3 103
|
||||
#define F_KEY_4 104
|
||||
|
||||
#define F_DES_1 111
|
||||
#define F_DES_2 112
|
||||
#define F_DES_3 113
|
||||
#define F_DES_4 114
|
||||
//#define F_KEY_1 101
|
||||
//#define F_KEY_2 102
|
||||
//#define F_KEY_3 103
|
||||
//#define F_KEY_4 104
|
||||
|
||||
//#define F_DES_1 111
|
||||
//#define F_DES_2 112
|
||||
//#define F_DES_3 113
|
||||
//#define F_DES_4 114
|
||||
|
||||
#define F_SEZSALDI 121
|
||||
#define F_SOSPESO 122
|
||||
#define F_SHEET 123
|
||||
|
||||
#define FR_GRUPPO 101
|
||||
#define FR_CONTO 102
|
||||
#define FR_SOTTOCONTO 103
|
||||
#define FR_DESCRS 104
|
||||
|
||||
#define FR_DESCRG 301
|
||||
#define FR_DESCRC 302
|
||||
|
||||
|
122
ca/ca0400a.uml
122
ca/ca0400a.uml
@ -6,7 +6,7 @@ TOOLBAR "" 0 -3 0 3
|
||||
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Piano dei conti" -1 -1 80 20
|
||||
PAGE "Piano dei conti analitica" -1 -1 80 20
|
||||
|
||||
GROUPBOX DLG_NULL 78 6
|
||||
BEGIN
|
||||
@ -29,4 +29,124 @@ END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Piano dei conti contabile" -1 -1 64 6
|
||||
|
||||
TEXT DLG_NULL
|
||||
BEGIN
|
||||
PROMPT 1 2 "@bConti di contabilità collegati"
|
||||
END
|
||||
|
||||
SPREADSHEET F_SHEET 79 -1
|
||||
BEGIN
|
||||
PROMPT 1 3 ""
|
||||
ITEM "Gruppo"
|
||||
ITEM "Conto"
|
||||
ITEM "Sottoconto"
|
||||
ITEM "Descrizione@50"
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
ENDMASK
|
||||
|
||||
PAGE "Sheet" -1 -1 78 8
|
||||
|
||||
NUMBER FR_GRUPPO 3
|
||||
BEGIN
|
||||
PROMPT 1 1 "Gruppo "
|
||||
USE LF_PCON SELECT CONTO==""
|
||||
INPUT GRUPPO FR_GRUPPO
|
||||
DISPLAY "Gruppo" GRUPPO
|
||||
DISPLAY "Descrizione@50" DESCR
|
||||
OUTPUT FR_GRUPPO GRUPPO
|
||||
OUTPUT FR_DESCRG DESCR
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
STRING FR_DESCRG 50
|
||||
BEGIN
|
||||
PROMPT 25 1 ""
|
||||
USE LF_PCON KEY 2 SELECT CONTO==""
|
||||
INPUT DESCR FR_DESCRG
|
||||
DISPLAY "Descrizione@50" DESCR
|
||||
DISPLAY "Gruppo" GRUPPO
|
||||
COPY OUTPUT FR_GRUPPO
|
||||
CHECKTYPE SEARCH
|
||||
END
|
||||
|
||||
NUMBER FR_CONTO 3
|
||||
BEGIN
|
||||
PROMPT 1 3 "Conto "
|
||||
USE LF_PCON SELECT SOTTOCONTO==""
|
||||
INPUT GRUPPO FR_GRUPPO
|
||||
INPUT CONTO FR_CONTO
|
||||
DISPLAY "Gruppo" GRUPPO
|
||||
DISPLAY "Conto" CONTO
|
||||
DISPLAY "Descrizione@50" DESCR
|
||||
OUTPUT FR_GRUPPO GRUPPO
|
||||
OUTPUT FR_CONTO CONTO
|
||||
OUTPUT FR_DESCRC DESCR
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
STRING FR_DESCRC 50
|
||||
BEGIN
|
||||
PROMPT 25 3 ""
|
||||
USE LF_PCON KEY 2 SELECT SOTTOCONTO==""
|
||||
INPUT DESCR FR_DESCRC
|
||||
DISPLAY "Descrizione@50" DESCR
|
||||
DISPLAY "Gruppo" GRUPPO
|
||||
DISPLAY "Conto" CONTO
|
||||
COPY OUTPUT FR_CONTO
|
||||
CHECKTYPE SEARCH
|
||||
END
|
||||
|
||||
NUMBER FR_SOTTOCONTO 6
|
||||
BEGIN
|
||||
PROMPT 1 5 "Sottoconto "
|
||||
USE LF_PCON
|
||||
INPUT GRUPPO FR_GRUPPO
|
||||
INPUT CONTO FR_CONTO
|
||||
INPUT SOTTOCONTO FR_SOTTOCONTO
|
||||
DISPLAY "Gruppo" GRUPPO
|
||||
DISPLAY "Conto" CONTO
|
||||
DISPLAY "Sottoconto" SOTTOCONTO
|
||||
DISPLAY "Descrizione@50" DESCR
|
||||
OUTPUT FR_GRUPPO GRUPPO
|
||||
OUTPUT FR_CONTO CONTO
|
||||
OUTPUT FR_SOTTOCONTO SOTTOCONTO
|
||||
OUTPUT FR_DESCRS DESCR
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
STRING FR_DESCRS 50
|
||||
BEGIN
|
||||
PROMPT 25 5 ""
|
||||
USE LF_PCON KEY 2
|
||||
INPUT DESCR FR_DESCRS
|
||||
DISPLAY "Descrizione@50" DESCR
|
||||
DISPLAY "Gruppo" GRUPPO
|
||||
DISPLAY "Conto" CONTO
|
||||
DISPLAY "Sottoconto" SOTTOCONTO
|
||||
COPY OUTPUT FR_SOTTOCONTO
|
||||
CHECKTYPE SEARCH
|
||||
END
|
||||
|
||||
BUTTON DLG_OK 10 2
|
||||
BEGIN
|
||||
PROMPT -13 -1 ""
|
||||
END
|
||||
|
||||
BUTTON DLG_DELREC 10 2
|
||||
BEGIN
|
||||
PROMPT -23 -1 ""
|
||||
END
|
||||
|
||||
BUTTON DLG_CANCEL 10 2
|
||||
BEGIN
|
||||
PROMPT -33 -1 ""
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
ENDMASK
|
||||
|
@ -583,7 +583,7 @@ bool TSimple_anal_msk::on_field_event(TOperable_field& o, TField_event e, long j
|
||||
case F_KEY2:
|
||||
case F_KEY3:
|
||||
case F_KEY4:
|
||||
if (e == fe_modify || e == fe_close)
|
||||
if ((jolly == 0) &&(e == fe_modify || e == fe_close))
|
||||
return test_key_field(o.dlg());
|
||||
break;
|
||||
default:
|
||||
@ -737,7 +737,6 @@ int TSimple_anal_msk::create_key_fields()
|
||||
const int y = 1;
|
||||
const int n = ca_create_fields(*this, logic, x, y, kid, did, 0x1);
|
||||
const int m = ca_create_fields(*this, logic, x, y, kid, did, 0x2);
|
||||
first_focus(kid);
|
||||
return n;
|
||||
}
|
||||
|
||||
@ -979,26 +978,26 @@ TAnal_tree::~TAnal_tree()
|
||||
// TAnal_app
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
void TAnal_app::init_key_fields() const
|
||||
void TAnal_app::init_key_fields(TSimple_anal_msk & m) const
|
||||
{
|
||||
int maxlev = 0;
|
||||
for (maxlev = 0; maxlev < 4; maxlev++)
|
||||
{
|
||||
const short id = _msk->get_field_id(maxlev, 1);
|
||||
if (id <= 0 || _msk->id2pos(id) < 0)
|
||||
const short id = m.get_field_id(maxlev, 1);
|
||||
if (id <= 0 || m.id2pos(id) < 0)
|
||||
break;
|
||||
_msk->disable(id);
|
||||
m.disable(id);
|
||||
|
||||
const short did = _msk->get_field_id(maxlev, 2);
|
||||
_msk->disable(did);
|
||||
const short did = m.get_field_id(maxlev, 2);
|
||||
m.disable(did);
|
||||
}
|
||||
|
||||
for (int i = maxlev-1; i >= 0; i--)
|
||||
{
|
||||
const short id = _msk->get_field_id(i, 1);
|
||||
TEdit_field& e = _msk->efield(id);
|
||||
const short did = _msk->get_field_id(i, 2);
|
||||
TEdit_field& d = _msk->efield(did);
|
||||
const short id = m.get_field_id(i, 1);
|
||||
TEdit_field& e = m.efield(id);
|
||||
const short did = m.get_field_id(i, 2);
|
||||
TEdit_field& d = m.efield(did);
|
||||
|
||||
if (e.empty())
|
||||
{
|
||||
@ -1011,10 +1010,11 @@ void TAnal_app::init_key_fields() const
|
||||
e.check(STARTING_CHECK);
|
||||
|
||||
TString80 key2;
|
||||
key2 << _msk->fieldref(0, 2);
|
||||
key2 << m.fieldref(0, 2);
|
||||
d.set_field(key2);
|
||||
d.show();
|
||||
d.enable();
|
||||
m.first_focus(d.dlg());
|
||||
d.enable_check(false);
|
||||
break;
|
||||
}
|
||||
@ -1051,16 +1051,17 @@ void TAnal_app::init_query_mode(TMask& mask)
|
||||
d.enable_check();
|
||||
d.set_field("");
|
||||
}
|
||||
m.first_focus(m.get_field_id(0, 1));
|
||||
}
|
||||
|
||||
void TAnal_app::init_modify_mode(TMask& m)
|
||||
void TAnal_app::init_modify_mode(TMask& mask)
|
||||
{
|
||||
init_key_fields();
|
||||
init_key_fields((TSimple_anal_msk &)mask);
|
||||
}
|
||||
|
||||
void TAnal_app::init_insert_mode(TMask& m)
|
||||
void TAnal_app::init_insert_mode(TMask& mask)
|
||||
{
|
||||
init_key_fields();
|
||||
init_key_fields((TSimple_anal_msk &)mask);
|
||||
}
|
||||
|
||||
int TAnal_app::write(const TMask& m)
|
||||
|
@ -99,10 +99,10 @@ protected:
|
||||
virtual bool user_destroy();
|
||||
virtual int write(const TMask& m);
|
||||
virtual int rewrite(const TMask& m);
|
||||
void init_key_fields() const;
|
||||
virtual void init_query_mode(TMask& m);
|
||||
virtual void init_modify_mode(TMask& m);
|
||||
virtual void init_insert_mode(TMask& m);
|
||||
void init_key_fields(TSimple_anal_msk & m) const;
|
||||
virtual void init_query_mode(TMask& mask);
|
||||
virtual void init_modify_mode(TMask& mask);
|
||||
virtual void init_insert_mode(TMask& mask);
|
||||
|
||||
protected:
|
||||
virtual TSimple_anal_msk* create_mask() const pure;
|
||||
|
3
ca/f155.dir
Executable file
3
ca/f155.dir
Executable file
@ -0,0 +1,3 @@
|
||||
155
|
||||
0
|
||||
$panapdc|0|0|36|0|Archivio di colleg. Centri di Costo Conti|||
|
10
ca/f155.trr
Executable file
10
ca/f155.trr
Executable file
@ -0,0 +1,10 @@
|
||||
155
|
||||
5
|
||||
CODCONTO|1|20|0|Codice Conto di analitica
|
||||
NRIGA|2|3|0|Numero di riga
|
||||
GRUPPO|2|3|0|Gruppo
|
||||
CONTO|2|3|0|Conto
|
||||
SOTTOCONTO|3|6|0|Sottoconto
|
||||
2
|
||||
CODCONTO+NRIGA|
|
||||
GRUPPO+CONTO+SOTTOCONTO+CODCONTO|X
|
10
ca/panapdc.h
Executable file
10
ca/panapdc.h
Executable file
@ -0,0 +1,10 @@
|
||||
#ifndef __CDCPDC_H
|
||||
#define __CDCPDC_H
|
||||
|
||||
#define PANAPDC_CODCONTO "CODCONTO"
|
||||
#define PANAPDC_NRIGA "NRIGA"
|
||||
#define PANAPDC_GRUPPO "GRUPPO"
|
||||
#define PANAPDC_CONTO "CONTO"
|
||||
#define PANAPDC_SOTTOCONTO "SOTTOCONTO"
|
||||
|
||||
#endif
|
9
ca/pdcana.h
Executable file
9
ca/pdcana.h
Executable file
@ -0,0 +1,9 @@
|
||||
#ifndef __PANA_H
|
||||
#define __PANA_H
|
||||
|
||||
#define PANA_CODCONTO "CODCONTO"
|
||||
#define PANA_DESCR "DESCR"
|
||||
#define PANA_SEZSALDI "SEZSALDI"
|
||||
#define PANA_SOSPESO "SOSPESO"
|
||||
|
||||
#endif
|
Loading…
x
Reference in New Issue
Block a user