orrezioni da PARMA a causali mastrini chiusura e registri.

git-svn-id: svn://10.65.10.50/trunk@159 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
nik 1994-09-05 11:10:59 +00:00
parent 47dd388b62
commit 8f12c7fc4d
9 changed files with 2636 additions and 1767 deletions

View File

@ -64,9 +64,18 @@ HIDDEN int anno_iva()
}
////////////////////////////////////////////////////////////////////////////
//
// Le righe di causale:
// Righe_rcaus e' un array di Riga_rcaus
// Riga_rcaus e' una token_string corrispondente ad una riga dello spreadsheet
//
// Righe_rcaus e' un array di Riga_rcaus.
//
// - NB - Contiene solo le descrizioni fisse!
//
// I dati letti dal file sono memorizzati direttamente nello spreadsheet
// Quando cambiano i campi tipodoc, codreg, tpm della testata le nuove
// descrizioni vengono caricate in questo array e poi ricopiate (solo le
// descrizioni) nello spreadsheet.
//
////////////////////////////////////////////////////////////////////////////
class Riga_rcaus : public TToken_string
{
@ -89,35 +98,23 @@ Riga_rcaus::Riga_rcaus (TConto& tc,const char * df, char tipocf, char sez,
bool rigaiva, const char * codiva)
: TToken_string(80)
{
add(df);
add(df); add(tipocf);
// add(tc.tipo());
add(tipocf);
if (tc.ok())
{
add((long)tc.gruppo());
add((long)tc.conto());
if (tc.ok()) {
add((long)tc.gruppo()); add((long)tc.conto());
add((long)tc.sottoconto());
}
else
{
add("");
add("");
add("");
else {
add(""); add(""); add("");
}
add(sez);
add(des);
add(desagg);
add((char)rigaiva);
add(codiva);
add(sez); add(des); add(desagg);
add((char)rigaiva); add(codiva);
}
class TRighe_rcaus : public TArray
{
public:
void set_descr (int numrig=-1, const char * descr="", char tipocf=' ');
void add_riga(int numrig, char tipocf,
char sezione, const char * des, const char * desagg,
bool rigaiva, const char * codiva, TConto& tc );
void clear(int riga); // pulisce una riga in seguito ad Azzera
void ClearDescr(); // cancella solo le descrizioni fisse
void CaricaRigheLibere();
@ -130,10 +127,8 @@ public:
void TRighe_rcaus::ClearDescr()
{
for (int i=0; i < items(); i++)
{
for (int i=0; i < items(); i++) {
Riga_rcaus *r = (Riga_rcaus*)objptr(i);
if (r) r->add("", 0);
}
}
@ -142,55 +137,19 @@ void TRighe_rcaus::clear(int row)
{
Riga_rcaus *r = (Riga_rcaus*)objptr(row);
if (r)
{
r->add("", 1);
r->add(0, 2);
r->add(0, 3);
r->add(0L, 4);
r->add("", 5);
r->add("", 6);
r->add("", 7);
r->add("", 8);
r->add("", 9);
if (r) {
r->add("", 1); r->add(0, 2); r->add(0, 3);
r->add(0L, 4); r->add("", 5); r->add("", 6);
r->add("", 7); r->add("", 8); r->add("", 9);
}
}
void TRighe_rcaus::add_riga(int i, char tipocf,
char sez, const char * des, const char * desagg, bool rigaiva,
const char * codiva, TConto& tc)
{
Riga_rcaus *r = (Riga_rcaus*)objptr(i);
int g=0,c=0;
long s=0L;
if (r == NULL)
{
r = new Riga_rcaus (tc,"",tipocf,sez,des,desagg,rigaiva,codiva);
add(r,i); // ???
}
g = tc.gruppo();
c = tc.conto();
s = tc.sottoconto();
r->add(tipocf, 1);
r->add((long)g, 2);
r->add((long)c, 3);
r->add((long)s, 4);
r->add(sez, 5);
r->add(des, 6);
r->add(desagg, 7);
r->add(rigaiva ? "X" : "", 8);
r->add(codiva, 9);
}
void TRighe_rcaus::set_descr(int i, const char * dfi, char tipocf)
{
Riga_rcaus *r = (Riga_rcaus*)objptr(i);
TConto tc;
if (r == NULL)
{
if (r == NULL) {
r = new Riga_rcaus (tc,dfi,tipocf);
add(r,i);
}
@ -213,12 +172,12 @@ typedef enum { acquisto, vendita, incasso_pagamento,
friend bool filtra_reg(const TRelation * r);
static bool tipocf_hndl (TMask_field& f, KEY k);
// static bool m770_hndl (TMask_field& f, KEY k);
static bool cod_reg_hndl (TMask_field& f, KEY k);
static bool tipodoc_hndl (TMask_field& f, KEY k);
static bool tipomov_hndl (TMask_field& f, KEY k);
static bool conto_hndl (TMask_field& f, KEY k);
static bool sottoconto_hndl (TMask_field& f, KEY k);
static bool codcausim_hndl (TMask_field& f, KEY k);
static bool leggi_riga (int r, KEY k);
TRelation * _rel;
@ -231,11 +190,8 @@ typedef enum { acquisto, vendita, incasso_pagamento,
void togli_dal_file(const TString&);
void read_rcaus(TMask&);
bool descr2array(TMask&);
bool descr2array2(TMask&);
bool descr2array(TMask&, bool fromHandler = TRUE);
bool fill_sheet(TMask&);
static bool has_iva (const char * tpc);
bool is_clifo(const char * tpc);
protected:
virtual bool user_create();
@ -264,9 +220,12 @@ public:
void compilaarray (const TString&, int, int, int);
void array2sheet(); // Copia le descrizioni dall'array allo sheet
TMask * main_mask() const { return _msk; }
TMask & ss_mask() const { return ss().sheet_mask(); }
TSheet_field& ss() const { return (TSheet_field&)_msk->field(F_SHEET_GCS);}
TMask* main_mask() const { return _msk; }
TMask& ss_mask() const { return ss().sheet_mask(); }
TSheet_field& ss() const { return (TSheet_field&)_msk->field(F_SHEET_GCS);}
void add_riga (int numrig, char cf, char sz, TString& d, TString& da,
bool riva, TString& civa, TConto& tc);
bool MostraCampi(TMask_field& f);
CG0500_application() {}
};
@ -330,78 +289,61 @@ bool filtra_reg(const TRelation * r)
}
bool CG0500_application::has_iva (const char * tpconto)
{
TFixed_string tpc(tpconto);
// Lascio abilitato codiva e rigaiva solo per i conti senza descr.fissa
if (tpc.trim().empty())
return TRUE;
else
return FALSE;
}
bool CG0500_application::is_clifo (const char * tpconto)
{
TFixed_string tpc(tpconto);
if ( (tpc == "C Clienti/Fornitori") || (tpc == "C Clienti") ||
(tpc == "C Fornitori") )
return TRUE;
return FALSE;
}
////////////////////////////////////////////////////////////////////////////
// Handler della maschera principale
////////////////////////////////////////////////////////////////////////////
bool CG0500_application::tipodoc_hndl (TMask_field& f, KEY k)
{
// if (k == K_TAB)
if (k == K_TAB && f.focusdirty())
// if (k == K_TAB && f.focusdirty())
// Testo K_TAB perche' il controllo deve scattare anche all'inizio
// per vedere, per es., se il registro scritto nella causale
// esiste ancora
if (k == K_TAB)
{
const TString16 val(f.get());
const int tpm = f.mask().get_int(F_TIPO_MOV);
TEdit_field& field_reg = (TEdit_field&)f.mask().field(F_COD_REG);
if (val.not_empty() && val != "IN" && val != "PG" && val != "AN")
{
f.mask().show(F_OP_FINE_ANNO);
f.mask().show(F_M_770);
f.mask().hide(F_TIPO_MOV_2);
f.mask().show(F_TIPO_MOV_1);
if (salda_conto()) {
f.mask().hide(F_TIPO_MOV_2);
f.mask().show(F_TIPO_MOV_1);
}
f.mask().enable(F_COD_REG);
field_reg.check_type(CHECK_REQUIRED);
// Cambio il filtro sui registri
// con tipo=1
if (val == "FV" || val == "FF" || val == "FS")
{
// Cambio il filtro sui registri: con tipo=1
if (val == "FV" || val == "FF" || val == "FS") {
app()->_filtro = 1;
field_reg.browse()->cursor()->set_filterfunction(filtra_reg);
}
// con tipo=1 e corrisp="X"
if (val == "CN" || val == "RN" || val == "CR" ||
val == "SC" || val == "RF" || val == "SN")
} else
// con tipo=1 e corrisp="X"
if (val == "CN" || val == "RN" || val == "CR" ||
val == "SC" || val == "RF" || val == "SN") {
app()->_filtro = 2;
field_reg.browse()->cursor()->set_filterfunction(filtra_reg);
} else
// Possono essere 1 o 2
if (val == "NC" || val == "ST" || val == "ND" ||
val == "AF") {
app()->_filtro = 4;
field_reg.browse()->cursor()->set_filterfunction(filtra_reg);
} else
// con tipo=2
if (val == "FA" || val == "BD") {
app()->_filtro = 3;
field_reg.browse()->cursor()->set_filterfunction(filtra_reg);
}
// Ma davvero esiste il registro ?
TString16 codreg=f.mask().get(F_COD_REG);
if (codreg.not_empty())
{
app()->_filtro = 2;
field_reg.browse()->cursor()->set_filterfunction(filtra_reg);
TRegistro registro(codreg, anno_iva());
if (!registro.read(codreg, anno_iva()))
return f.warning_box("Non esiste il registro %s per l'anno %d",
(const char *)codreg, anno_iva());
}
// Possono essere 1 o 2
if (val == "NC" || val == "ST" || val == "ND" ||
val == "AF")
{
app()->_filtro = 4;
field_reg.browse()->cursor()->set_filterfunction(filtra_reg);
}
// con tipo=2
if (val == "FA" || val == "BD")
{
app()->_filtro = 3;
field_reg.browse()->cursor()->set_filterfunction(filtra_reg);
}
}
else // TIPODOC vuoto || IN || PG || AN
{
@ -410,50 +352,97 @@ bool CG0500_application::tipodoc_hndl (TMask_field& f, KEY k)
f.mask().set(F_COD_REG,"");
f.mask().disable(F_COD_REG);
f.mask().hide(F_TIPO_MOV_1);
f.mask().show(F_TIPO_MOV_2);
if ( !salda_conto() || tpm == 0 )
{
f.mask().show(F_OP_FINE_ANNO);
f.mask().show(F_M_770);
}
else
{
f.mask().hide(F_OP_FINE_ANNO);
f.mask().hide(F_M_770);
}
if (salda_conto()) {
f.mask().hide(F_TIPO_MOV_1);
f.mask().show(F_TIPO_MOV_2);
}
}
if (f.focusdirty()) {
app()->fill_sheet(f.mask());
app()->MostraCampi(f); // show-hide di diversi campi pilotati da codreg
}
app()->fill_sheet(f.mask());
}
return TRUE;
}
bool CG0500_application::tipomov_hndl (TMask_field& f, KEY k)
{
if (f.to_check(k))
{
const int tpm = atoi(f.get());
if (tpm > 0)
if (k == K_SPACE) {
app()->MostraCampi(f);
app()->fill_sheet(f.mask());
}
return TRUE;
}
// Il codice causale per incasso immediato, se specificato, deve
// essere puramente contabile (= codreg vuoto e tpm = Nessuno
bool CG0500_application::codcausim_hndl (TMask_field& f, KEY k)
{
if (f.to_check(k)) {
TString16 causim(f.get());
TLocalisamfile& caus = *app()->_rel->lfile(LF_CAUSALI);
caus.zero();
caus.put(CAU_CODCAUS, causim);
if (caus.read() == NOERR)
{
if ( (tpm == 3) || (tpm == 5) || (tpm == 6) )
f.mask().enable(F_MOV_SEZ);
else
f.mask().disable(F_MOV_SEZ);
const int tpm = caus.get_int(CAU_TIPOMOV);
TString16 codreg = caus.get(CAU_REG);
if (codreg.not_empty() || tpm != 0)
return f.warning_box("La causale per l'incasso immediato specificata (%s) deve essere puramente contabile",
(const char *) causim);
}
if (k == K_TAB)
app()->fill_sheet(f.mask());
}
return TRUE;
}
bool CG0500_application::MostraCampi(TMask_field& f)
{
const int tpm = f.mask().get_int(F_TIPO_MOV);
TString16 codreg = f.mask().get(F_COD_REG);
if (codreg.empty())
{
switch (tpm) {
case 0:
f.mask().show(F_OP_FINE_ANNO);
f.mask().hide(F_MOV_VALU);
f.mask().hide(F_MOV_SEZ);
break;
case 3:
case 5:
case 6:
f.mask().hide(F_OP_FINE_ANNO);
f.mask().show(F_MOV_VALU);
f.mask().show(F_MOV_SEZ);
f.mask().hide(F_COLL_CESP);
break;
default:
f.mask().show(F_COLL_CESP);
break;
}
}
else { // codreg non vuoto
f.mask().hide(F_OP_FINE_ANNO);
f.mask().hide(F_MOV_SEZ);
if (gestione_valuta())
f.mask().show(F_MOV_VALU);
}
return TRUE;
}
bool CG0500_application::cod_reg_hndl (TMask_field& f, KEY k)
{
if (k == K_TAB && f.focusdirty())
app()->fill_sheet(f.mask());
// if (k == K_TAB && f.focusdirty())
if (k == K_TAB)
{
app()->MostraCampi(f);
if (f.focusdirty()) app()->fill_sheet(f.mask());
return TRUE;
}
// controllo di consistenza tra codice (tipo) registro e tipo documento
if (k == K_ENTER && f.dirty())
// if (k == K_ENTER && f.dirty())
if (k == K_ENTER)
{
bool ok = TRUE;
@ -464,7 +453,8 @@ bool CG0500_application::cod_reg_hndl (TMask_field& f, KEY k)
if (tpd.not_empty() && tpd != "AN" && tpd != "PG" && tpd != "IN")
{
if (codreg.empty()) ok = FALSE;
if (codreg.empty())
return f.warning_box("Manca il codice del registro");
}
else
{
@ -500,14 +490,6 @@ bool CG0500_application::cod_reg_hndl (TMask_field& f, KEY k)
return TRUE;
}
/* ???
bool CG0500_application::m770_hndl (TMask_field& f, KEY k)
{
if (k == K_TAB && f.focusdirty())
app()->fill_sheet(f.mask());
return TRUE;
}
*/
////////////////////////////////////////////////////////////////////////////
// Handler della maschera dello spreadsheet
@ -594,26 +576,17 @@ bool CG0500_application::sottoconto_hndl (TMask_field& f, KEY k)
return TRUE;
}
// Handler del campo tipocf ? della maschera di edit dello sheet
// Handler del campo tipocf della maschera di edit dello sheet
// Abilita 109 e 110 (rigaiva e codiva) SOLO SE registro 1 o 2
// Controlla all'uscita che il tipo C/F vada bene per la riga corrente
// in questo modo:
// se tpr==1 NON accetta nelle righe 1 o 7 il tipo F
// se tpr==2 NON accetta nelle righe 1 o 7 il tipo C
// nelle righe sopra la 10 sono libero
//
bool CG0500_application::tipocf_hndl (TMask_field& f, KEY k)
{
if (k == K_SPACE)
{
TString16 cf(f.get());
const int tpr = app()->main_mask()->get_int(F_TIPO_REG);
if (tpr == 1 || tpr == 2)
{
if (tpr == 1 || tpr == 2) {
f.mask().enable(109); f.mask().enable(110);
}
else
{
else {
f.mask().disable(109); f.mask().disable(110);
}
}
@ -621,7 +594,7 @@ bool CG0500_application::tipocf_hndl (TMask_field& f, KEY k)
}
////////////////////////////////////////////////////////////////////////////
// Funzioni che caricano le varie descrizioni fisse
// Funzioni che caricano le varie descrizioni fisse nell'array
////////////////////////////////////////////////////////////////////////////
void TRighe_rcaus::CausaleVendite()
{
@ -733,7 +706,7 @@ void CG0500_application::compilaarray(const TString& tpd, int tpm, int tpr, int
bool CG0500_application::fill_sheet(TMask& m)
{
descr2array2(m);
descr2array(m);
array2sheet();
return TRUE;
}
@ -741,12 +714,25 @@ bool CG0500_application::fill_sheet(TMask& m)
int CG0500_application::read(TMask& m)
{
m.autoload(_rel);
descr2array(m);
descr2array(m, FALSE);
array2sheet();
read_rcaus(m);
return NOERR;
}
void CG0500_application::add_riga(int numrig,
char cf, char sz, TString& d, TString& da, bool riva,
TString& civa, TConto& tc)
{
TSheet_field& cs = ss();
TToken_string & riga = cs.row(numrig);
riga.add(cf, 1); riga.add(tc.gruppo(), 2);
riga.add(tc.conto(), 3); riga.add(tc.sottoconto(),4);
riga.add(sz, 5); riga.add(d, 6); riga.add(da,7);
riga.add(riva ? "X" : "", 8);
riga.add(civa, 9);
}
void CG0500_application::read_rcaus(TMask& m)
{
int numrig, g, c;
@ -755,7 +741,6 @@ void CG0500_application::read_rcaus(TMask& m)
char sz, cf;
bool riva;
TLocalisamfile * rcaus = _rel->lfile(LF_RCAUSALI);
TSheet_field& cs = ss();
_rel->update(); // chiamo position_rels()
@ -770,22 +755,16 @@ void CG0500_application::read_rcaus(TMask& m)
g = rcaus->get_int(RCA_GRUPPO);
c = rcaus->get_int(RCA_CONTO);
s = rcaus->get_long(RCA_SOTTOCONTO);
sz = rcaus->get(RCA_SEZIONE)[0];
sz = rcaus->get_char(RCA_SEZIONE);
d = rcaus->get(RCA_DESC);
da = rcaus->get(RCA_CODDESC);
cf = rcaus->get(RCA_TIPOCF)[0];
// cf = rcaus->get(RCA_TIPOCF)[0];
cf = rcaus->get_char(RCA_TIPOCF);
riva = rcaus->get_bool(RCA_RIGAIVA);
civa = rcaus->get(RCA_CODIVA);
TConto tc(g,c,s,cf);
TToken_string & riga = cs.row(numrig-1);
riga.add(cf, 1); riga.add(g, 2); riga.add(c, 3); riga.add(s,4);
riga.add(sz, 5); riga.add(d, 6); riga.add(da,7);
riga.add(riva ? "X" : "", 8);
riga.add(civa, 9);
// _righe_rcaus.add_riga(numrig-1, cf, sz, d, da, riva, civa, tc);
// g.right_just(3); c.right_just(3); s.right_just(6);
// _righe_rcaus.add_riga(numrig-1,"",g,c,s,sz,d,da,tc,riva,civa);
add_riga(numrig-1, cf, sz, d, da, riva, civa, tc);
_righe_gia_presenti.set(numrig);
ok = _rel->next_match(LF_RCAUSALI);
@ -802,8 +781,7 @@ void CG0500_application::array2sheet()
for (int i = 0; i < _items; i++)
{
TToken_string & riga = ss().row(i);
// Riga_rcaus * r = (Riga_rcaus*)_righe_rcaus.objptr(i);
TToken_string * r = (TToken_string*)_righe_rcaus.objptr(i);
TToken_string * r = (TToken_string*)_righe_rcaus.objptr(i);
if (r != NULL)
{
dfi = r->get(0);
@ -815,37 +793,13 @@ void CG0500_application::array2sheet()
ss().force_update();
}
bool CG0500_application::descr2array2(TMask& m)
bool CG0500_application::descr2array(TMask& m, bool fromHandler)
{
TLocalisamfile& caus = *_rel->lfile();
TString16 tpd, codreg;
int tpm, m770, tpr;
codreg = m.field(F_COD_REG).get();
tpd = m.field(F_TIPO_DOC).get();
tpm = m.get_int(F_TIPO_MOV);
m770 = m.get_int(F_M_770);
/*
TString16 chiave; chiave << anno_iva() << codreg;
TTable reg("REG");
reg.put("CODTAB", chiave);
reg.read();
tpr = reg.get_int("I0");
*/
tpr = m.get_int(F_TIPO_REG);
// carico le descrizioni fisse nell'array Righe_rcaus
compilaarray(tpd,tpm,tpr,m770);
return TRUE;
}
bool CG0500_application::descr2array(TMask& m)
{
TLocalisamfile& caus = *_rel->lfile();
TString16 tpd, codreg;
int tpm, m770;
if (m.mode() == MODE_MOD)
if (m.mode() == MODE_MOD && !fromHandler)
{
codreg = caus.get("REG");
tpd = caus.get("TIPODOC");
@ -860,11 +814,16 @@ bool CG0500_application::descr2array(TMask& m)
m770 = m.get_int(F_M_770);
}
TString16 chiave; chiave << anno_iva() << codreg;
TTable reg("REG");
reg.put("CODTAB", chiave);
reg.read();
int tpr = reg.get_int("I0");
if (fromHandler)
tpr = m.get_int(F_TIPO_REG);
else
{
TString16 chiave; chiave << anno_iva() << codreg;
TTable reg("REG");
reg.put("CODTAB", chiave);
reg.read();
tpr = reg.get_int("I0");
}
// carico le descrizioni fisse nell'array Righe_rcaus
compilaarray(tpd,tpm,tpr,m770);
@ -886,7 +845,9 @@ void CG0500_application::togli_dal_file(const TString& cau)
rcaus->zero();
rcaus->put(RCA_CODCAUS,cau);
rcaus->put(RCA_NRIGA, i);
rcaus->remove();
if (rcaus->read() == NOERR)
rcaus->remove();
_righe_gia_presenti.reset(i);
}
}
}
@ -933,14 +894,14 @@ int CG0500_application::re_write(const TMask& m,bool rewrite)
if (g > 0 || c > 0 || s > 0L)
{
rcaus->zero();
rcaus->put (RCA_CODCAUS, cau);
rcaus->put (RCA_CODCAUS, (const char *)cau);
rcaus->put (RCA_NRIGA, i+1); // Numerare da uno!
rcaus->put (RCA_GRUPPO , g);
rcaus->put (RCA_CONTO , c);
rcaus->put (RCA_SOTTOCONTO, s);
rcaus->put (RCA_SEZIONE, sezione);
rcaus->put (RCA_DESC , desc);
rcaus->put (RCA_CODDESC, coddesc);
rcaus->put (RCA_DESC , (const char *)desc);
rcaus->put (RCA_CODDESC, (const char *)coddesc);
rcaus->put (RCA_TIPOCF, tipo_cf);
if (rewrite)
{
@ -1069,26 +1030,28 @@ bool CG0500_application::user_create()
_msk = new TMask("cg0500a");
if (!salda_conto())
{
if (!salda_conto()) {
_msk->hide (F_MOV_SEZ);
_msk->hide (F_TIPO_MOV);
_msk->hide (F_TIPO_MOV_1);
_msk->hide (F_TIPO_MOV_2);
_msk->show (F_COD_CAUS_IM);
}
else
else {
_msk->show (F_MOV_SEZ);
_msk->hide (F_COD_CAUS_IM);
}
if (gestione_valuta())
_msk->show (F_MOV_VALU);
else
_msk->hide (F_MOV_VALU);
if (!gestione_valuta()) _msk->hide (F_MOV_VALU);
_msk->set_handler(F_TIPO_DOC, tipodoc_hndl);
_msk->set_handler(F_TIPO_MOV_1, tipomov_hndl);
_msk->set_handler(F_TIPO_MOV_2, tipomov_hndl);
_msk->set_handler(F_COD_REG, cod_reg_hndl);
// _msk->set_handler(F_M_770, m770_hndl);
_msk->set_handler(F_COD_CAUS_IM, codcausim_hndl);
//
// Handler del campo GRUPPO della maschera di edit dello sheet.
// Uso per abilitare il campo C/F per alcuni tipi di conti.
//
TSheet_field& cs = ss();
cs.set_notify(leggi_riga);

View File

@ -1,291 +1,291 @@
#include "cg0500.h"
TOOLBAR "" 0 20 0 2
#include <toolbar.h>
ENDPAGE
PAGE "" -1 -1 77 20
GROUPBOX DLG_NULL -1 3
BEGIN
PROMPT 1 0 ""
END
STRING F_COD_CAUS 3
BEGIN
PROMPT 3 1 "Codice "
FIELD LF_CAUSALI->CODCAUS
KEY 1
FLAGS "U"
USE LF_CAUSALI
INPUT CODCAUS F_COD_CAUS
DISPLAY "Cod. causale" CODCAUS
DISPLAY "Descrizione @50" DESCR
DISPLAY "Tipo documento" TIPODOC
DISPLAY "Codice registro" REG
DISPLAY "Tipo movimento" TIPOMOV
OUTPUT F_COD_CAUS CODCAUS
OUTPUT F_DESCR DESCR
HELP "Codice causale"
CHECKTYPE REQUIRED
END
STRING F_DESCR 40
BEGIN
PROMPT 17 1 "Descrizione "
FIELD LF_CAUSALI->DESCR
COPY USE F_COD_CAUS
INPUT CODCAUS F_COD_CAUS
INPUT DESCR F_DESCR
DISPLAY "Cod. causale" CODCAUS
DISPLAY "Descrizione @50" DESCR
DISPLAY "Tipo documento" TIPODOC
DISPLAY "Codice registro" REG
DISPLAY "Tipo movimento" TIPOMOV
OUTPUT F_COD_CAUS CODCAUS
OUTPUT F_DESCR DESCR
HELP "Descrizione della causale"
END
STRING F_TIPO_DOC 2
BEGIN
PROMPT 2 4 "Tipo doc. "
FIELD LF_CAUSALI->TIPODOC
USE %TPD
INPUT CODTAB F_TIPO_DOC
DISPLAY "Tipo " CODTAB
DISPLAY "Descrizione @50 " S0
OUTPUT F_TIPO_DOC CODTAB
HELP "Tipo documento"
CHECKTYPE NORMAL
MESSAGE SHOW, 2@
MESSAGE EMPTY HIDE, 2@
FLAGS "U"
END
STRING F_COD_REG 3
BEGIN
PROMPT 23 4 "Cod. reg. "
FIELD LF_CAUSALI->REG
USE REG
INPUT CODTAB[1,4] F_ANNOES
INPUT CODTAB[5,7] F_COD_REG
DISPLAY "Anno" CODTAB[1,4]
DISPLAY "Codice registro " CODTAB[5,7]
DISPLAY "Tipo" I0
DISPLAY "Registro corrispettivi" B0
DISPLAY "Descrizione @50" S0
OUTPUT F_ANNOES CODTAB[1,4]
OUTPUT F_COD_REG CODTAB[5,7]
OUTPUT F_TIPO_REG I0
OUTPUT F_CORRISP B0
HELP "Codice registro"
CHECKTYPE NORMAL
FLAGS "D"
END
// Questo rimane sempre nascosto
STRING F_TIPO_MOV 2
BEGIN
PROMPT 68 4 ""
FIELD LF_CAUSALI->TIPOMOV
FLAGS "H"
END
// Viene mostrato questo se TPD non vuoto e diverso da IN AN PG
LISTBOX F_TIPO_MOV_1 1 20
BEGIN
PROMPT 44 4 "Tipo mov. "
FIELD LF_CAUSALI->TIPOMOV
HELP "Tipo movimento"
ITEM " |Nessuno" MESSAGE COPY,F_TIPO_MOV
ITEM "1|Fattura" MESSAGE COPY,F_TIPO_MOV
ITEM "2|Nota credito" MESSAGE COPY,F_TIPO_MOV
// GROUP 2
END
// Viene mostrato questo se TPD vuoto o uguale a IN AN PG
LISTBOX F_TIPO_MOV_2 1 20
BEGIN
PROMPT 44 4 "Tipo mov. "
FIELD LF_CAUSALI->TIPOMOV
HELP "Inserire il tipo movimento"
ITEM " |Nessuno" MESSAGE COPY,F_TIPO_MOV
ITEM "3|Incasso/pagamento " MESSAGE COPY,F_TIPO_MOV
ITEM "5|Insoluto" MESSAGE COPY,F_TIPO_MOV
ITEM "6|Pagamento insoluto" MESSAGE COPY,F_TIPO_MOV
FLAGS "H"
END
STRING F_ANNOES 4
BEGIN
PROMPT 2 6 ""
FLAGS "H"
END
STRING F_TIPO_REG 4
BEGIN
PROMPT 23 5 ""
FLAGS "H"
END
BOOLEAN F_CORRISP
BEGIN
PROMPT 33 5 ""
FLAGS "H"
END
SPREADSHEET F_SHEET_GCS
BEGIN
PROMPT 2 7 ""
ITEM "Tipo conto@21"
ITEM "C/F"
ITEM "Gr."
ITEM "Co."
ITEM "Sottoc."
ITEM "D/A"
ITEM "Descrizione@50"
ITEM "Descr. agg."
ITEM "Iva"
ITEM "Cod.Iva"
END
ENDPAGE
PAGE "" -1 -1 77 20
GROUPBOX DLG_NULL -1 3
BEGIN
PROMPT 1 0 "Campi obbligatori in caricamento documenti"
END
BOOLEAN F_DATA_DOC
BEGIN
PROMPT 2 1 "Data documento"
FIELD LF_CAUSALI->DATADOC
HELP ""
CHECKTYPE NORMAL
END
BOOLEAN F_NUM_DOC
BEGIN
PROMPT 34 1 "Numero documento"
FIELD LF_CAUSALI->NUMDOC
CHECKTYPE NORMAL
END
BOOLEAN F_AUTO_FAT
BEGIN
PROMPT 2 4 "Autofattura art.34"
FIELD LF_CAUSALI->AUTOFATT
CHECKTYPE NORMAL
GROUP 2
END
BOOLEAN F_ALLEGAT
BEGIN
PROMPT 34 4 "Documento in allegati"
FIELD LF_CAUSALI->ALLEG
GROUP 2
END
BOOLEAN F_FAT_RITARDO
BEGIN
PROMPT 2 6 "Fattura in ritardo"
FIELD LF_CAUSALI->RITFATT
GROUP 2
END
STRING F_COD_CAUS_IM 3
BEGIN
PROMPT 34 6 "Codice causale per l'incasso immediato "
FIELD LF_CAUSALI->CODCAUSIM
COPY USE F_COD_CAUS
INPUT CODCAUS F_COD_CAUS_IM
COPY DISPLAY F_COD_CAUS
OUTPUT F_COD_CAUS_IM CODCAUS
CHECKTYPE NORMAL
MESSAGE CLEAR, F_M_770
GROUP 2
END
BOOLEAN F_OP_INTRACOM
BEGIN
PROMPT 2 8 "Operazione intracomunitaria"
FIELD LF_CAUSALI->INTRACOM
MESSAGE TRUE "X", F_MOV_VALU | DISABLE, F_MOV_VALU
MESSAGE FALSE "", F_MOV_VALU | ENABLE, F_MOV_VALU
GROUP 2
END
BOOLEAN F_VALINTRA
BEGIN
PROMPT 34 8 "Gestione valuta per operazioni intrac."
FIELD LF_CAUSALI->VALINTRA
GROUP 2
END
BOOLEAN F_MOV_VALU
BEGIN
PROMPT 2 10 "Movimento in valuta"
FIELD LF_CAUSALI->MOVVAL
GROUP 2
END
BOOLEAN F_MOV_SEZ
BEGIN
PROMPT 34 10 "Movimento solo sezionale"
FIELD LF_CAUSALI->MOVSEZ
FLAGS "D"
END
LISTBOX F_OP_FINE_ANNO 1 10
BEGIN
PROMPT 2 12 "Operazioni di fine anno "
ITEM " | "
ITEM "C|Chiusura"
ITEM "A|Apertura"
FIELD LF_CAUSALI->MOVAP
FLAGS "H"
END
LISTBOX F_COLL_CESP 1 40
BEGIN
PROMPT 2 14 "Collegamento cespiti "
FIELD LF_CAUSALI->COLLCESP
HELP "Inserire il tipo di collegamento cespiti"
ITEM " |Nessuno"
ITEM "A|Acquisto cespite"
ITEM "B|Rettifica acquisto"
ITEM "C|Sostenimento costi"
ITEM "E|Eliminazione dal processo produttivo"
ITEM "M|Rivalutazione monetaria"
ITEM "P|Reinvestimento plusvalenze"
ITEM "R|Rivalutazione economica"
ITEM "T|Trasferimento"
ITEM "V|Vendita cespite"
ITEM "Z|Rettifica vendita"
END
LISTBOX F_M_770 1 40
BEGIN
PROMPT 2 16 "Collegamento Mod.770 "
FIELD LF_CAUSALI->M770
HELP "Inserire il tipo di collegamento Mod.770"
ITEM " |Nessuno" MESSAGE ENABLE,F_COD_CAUS_IM
ITEM "1|Ricevuta e/o pagamento fattura percip." MESSAGE CLEAR,F_COD_CAUS_IM
ITEM "2|Versamento ritenute percip." MESSAGE CLEAR,F_COD_CAUS_IM
ITEM "3|Versamento ritenute dipendente" MESSAGE CLEAR,F_COD_CAUS_IM
ITEM "4|Versamento contributi dipendente" MESSAGE CLEAR,F_COD_CAUS_IM
ITEM "5|Compensi non soggetti" MESSAGE CLEAR,F_COD_CAUS_IM
ITEM "6|Ritenute per operazioni occasionali" MESSAGE CLEAR,F_COD_CAUS_IM
END
ENDPAGE
ENDMASK
#include "cg0500b.uml"
#include "cg0500.h"
TOOLBAR "" 0 20 0 2
#include <toolbar.h>
ENDPAGE
PAGE "" -1 -1 77 20
GROUPBOX DLG_NULL -1 3
BEGIN
PROMPT 1 0 ""
END
STRING F_COD_CAUS 3
BEGIN
PROMPT 3 1 "Codice "
FIELD LF_CAUSALI->CODCAUS
KEY 1
FLAGS "U"
USE LF_CAUSALI
INPUT CODCAUS F_COD_CAUS
DISPLAY "Cod. causale" CODCAUS
DISPLAY "Descrizione @50" DESCR
DISPLAY "Tipo documento" TIPODOC
DISPLAY "Codice registro" REG
DISPLAY "Tipo movimento" TIPOMOV
OUTPUT F_COD_CAUS CODCAUS
OUTPUT F_DESCR DESCR
HELP "Codice causale"
CHECKTYPE REQUIRED
END
STRING F_DESCR 40
BEGIN
PROMPT 17 1 "Descrizione "
FIELD LF_CAUSALI->DESCR
COPY USE F_COD_CAUS
INPUT CODCAUS F_COD_CAUS
INPUT DESCR F_DESCR
DISPLAY "Cod. causale" CODCAUS
DISPLAY "Descrizione @50" DESCR
DISPLAY "Tipo documento" TIPODOC
DISPLAY "Codice registro" REG
DISPLAY "Tipo movimento" TIPOMOV
OUTPUT F_COD_CAUS CODCAUS
OUTPUT F_DESCR DESCR
HELP "Descrizione della causale"
END
STRING F_TIPO_DOC 2
BEGIN
PROMPT 2 4 "Tipo doc. "
FIELD LF_CAUSALI->TIPODOC
USE %TPD
INPUT CODTAB F_TIPO_DOC
DISPLAY "Tipo " CODTAB
DISPLAY "Descrizione @50 " S0
OUTPUT F_TIPO_DOC CODTAB
HELP "Tipo documento"
CHECKTYPE NORMAL
// MESSAGE SHOW, 2@
// MESSAGE EMPTY HIDE, 2@
FLAGS "U"
END
STRING F_COD_REG 3
BEGIN
PROMPT 23 4 "Cod. reg. "
FIELD LF_CAUSALI->REG
USE REG
INPUT CODTAB[1,4] F_ANNOES
INPUT CODTAB[5,7] F_COD_REG
DISPLAY "Anno" CODTAB[1,4]
DISPLAY "Codice registro " CODTAB[5,7]
DISPLAY "Tipo" I0
DISPLAY "Registro corrispettivi" B0
DISPLAY "Descrizione @50" S0
OUTPUT F_ANNOES CODTAB[1,4]
OUTPUT F_COD_REG CODTAB[5,7]
OUTPUT F_TIPO_REG I0
OUTPUT F_CORRISP B0
HELP "Codice registro"
CHECKTYPE NORMAL
FLAGS "D"
END
// Questo rimane sempre nascosto
STRING F_TIPO_MOV 2
BEGIN
PROMPT 68 4 ""
FIELD LF_CAUSALI->TIPOMOV
FLAGS "H"
END
// Viene mostrato questo se TPD non vuoto e diverso da IN AN PG
LISTBOX F_TIPO_MOV_1 1 20
BEGIN
PROMPT 44 4 "Tipo mov. "
FIELD LF_CAUSALI->TIPOMOV
HELP "Tipo movimento"
ITEM " |Nessuno" MESSAGE COPY,F_TIPO_MOV
ITEM "1|Fattura" MESSAGE COPY,F_TIPO_MOV
ITEM "2|Nota credito" MESSAGE COPY,F_TIPO_MOV
// GROUP 2
END
// Viene mostrato questo se TPD vuoto o uguale a IN AN PG
LISTBOX F_TIPO_MOV_2 1 20
BEGIN
PROMPT 44 4 "Tipo mov. "
FIELD LF_CAUSALI->TIPOMOV
HELP "Inserire il tipo movimento"
ITEM " |Nessuno" MESSAGE COPY,F_TIPO_MOV
ITEM "3|Incasso/pagamento " MESSAGE COPY,F_TIPO_MOV
ITEM "5|Insoluto" MESSAGE COPY,F_TIPO_MOV
ITEM "6|Pagamento insoluto" MESSAGE COPY,F_TIPO_MOV
FLAGS "H"
END
STRING F_ANNOES 4
BEGIN
PROMPT 2 6 ""
FLAGS "H"
END
STRING F_TIPO_REG 4
BEGIN
PROMPT 23 5 ""
FLAGS "H"
END
BOOLEAN F_CORRISP
BEGIN
PROMPT 33 5 ""
FLAGS "H"
END
SPREADSHEET F_SHEET_GCS
BEGIN
PROMPT 2 7 ""
ITEM "Tipo conto@21"
ITEM "C/F"
ITEM "Gr."
ITEM "Co."
ITEM "Sottoc."
ITEM "D/A"
ITEM "Descrizione@50"
ITEM "Descr. agg."
ITEM "Iva"
ITEM "Cod.Iva"
END
ENDPAGE
PAGE "" -1 -1 77 20
GROUPBOX DLG_NULL -1 3
BEGIN
PROMPT 1 0 "@BCampi obbligatori in caricamento documenti"
END
BOOLEAN F_DATA_DOC
BEGIN
PROMPT 2 1 "Data documento"
FIELD LF_CAUSALI->DATADOC
HELP ""
CHECKTYPE NORMAL
END
BOOLEAN F_NUM_DOC
BEGIN
PROMPT 34 1 "Numero documento"
FIELD LF_CAUSALI->NUMDOC
CHECKTYPE NORMAL
END
BOOLEAN F_AUTO_FAT
BEGIN
PROMPT 2 4 "Autofattura art.34"
FIELD LF_CAUSALI->AUTOFATT
CHECKTYPE NORMAL
GROUP 2
END
BOOLEAN F_ALLEGAT
BEGIN
PROMPT 34 4 "Doc. non va in allegati fine anno"
FIELD LF_CAUSALI->ALLEG
GROUP 2
END
BOOLEAN F_FAT_RITARDO
BEGIN
PROMPT 2 6 "Fattura in ritardo"
FIELD LF_CAUSALI->RITFATT
GROUP 2
END
STRING F_COD_CAUS_IM 3
BEGIN
PROMPT 34 6 "Codice causale per l'incasso immediato "
FIELD LF_CAUSALI->CODCAUSIM
COPY USE F_COD_CAUS
INPUT CODCAUS F_COD_CAUS_IM
COPY DISPLAY F_COD_CAUS
OUTPUT F_COD_CAUS_IM CODCAUS
CHECKTYPE NORMAL
// MESSAGE CLEAR, F_M_770
GROUP 2
END
BOOLEAN F_OP_INTRACOM
BEGIN
PROMPT 2 8 "Operazione intracomunitaria"
FIELD LF_CAUSALI->INTRACOM
// MESSAGE TRUE "X", F_MOV_VALU | DISABLE, F_MOV_VALU
// MESSAGE FALSE "", F_MOV_VALU | ENABLE, F_MOV_VALU
GROUP 2
END
BOOLEAN F_VALINTRA
BEGIN
PROMPT 34 8 "Gestione valuta per operazioni intrac."
FIELD LF_CAUSALI->VALINTRA
GROUP 2
END
BOOLEAN F_MOV_VALU
BEGIN
PROMPT 2 10 "Movimento in valuta"
FIELD LF_CAUSALI->MOVVAL
GROUP 2
END
BOOLEAN F_MOV_SEZ
BEGIN
PROMPT 34 10 "Movimento solo sezionale"
FIELD LF_CAUSALI->MOVSEZ
FLAGS "H"
END
LISTBOX F_OP_FINE_ANNO 1 10
BEGIN
PROMPT 2 12 "Operazioni di fine anno "
ITEM " | "
ITEM "C|Chiusura"
ITEM "A|Apertura"
FIELD LF_CAUSALI->MOVAP
FLAGS "H"
END
LISTBOX F_COLL_CESP 1 40
BEGIN
PROMPT 2 14 "Collegamento cespiti "
FIELD LF_CAUSALI->COLLCESP
HELP "Inserire il tipo di collegamento cespiti"
ITEM " |Nessuno"
ITEM "A|Acquisto cespite"
ITEM "B|Rettifica acquisto"
ITEM "C|Sostenimento costi"
ITEM "E|Eliminazione dal processo produttivo"
ITEM "M|Rivalutazione monetaria"
ITEM "P|Reinvestimento plusvalenze"
ITEM "R|Rivalutazione economica"
ITEM "T|Trasferimento"
ITEM "V|Vendita cespite"
ITEM "Z|Rettifica vendita"
END
LISTBOX F_M_770 1 40
BEGIN
PROMPT 2 16 "Collegamento Mod.770 "
FIELD LF_CAUSALI->M770
HELP "Inserire il tipo di collegamento Mod.770"
ITEM " |Nessuno" // MESSAGE ENABLE,F_COD_CAUS_IM
ITEM "1|Ricevuta e/o pagamento fattura percip." // MESSAGE CLEAR,F_COD_CAUS_IM
ITEM "2|Versamento ritenute percip." // MESSAGE CLEAR,F_COD_CAUS_IM
ITEM "3|Versamento ritenute dipendente" // MESSAGE CLEAR,F_COD_CAUS_IM
ITEM "4|Versamento contributi dipendente" // MESSAGE CLEAR,F_COD_CAUS_IM
ITEM "5|Compensi non soggetti" // MESSAGE CLEAR,F_COD_CAUS_IM
ITEM "6|Ritenute per operazioni occasionali" // MESSAGE CLEAR,F_COD_CAUS_IM
END
ENDPAGE
ENDMASK
#include "cg0500b.uml"

View File

@ -1,201 +1,203 @@
#include "cg0500.h"
PAGE "" -1 -1 68 11
STRING 101 22
BEGIN
PROMPT 1 1 "Tipo "
FLAGS "D"
END
LISTBOX 102 1 11
BEGIN
PROMPT 33 1 "C/F "
ITEM " |Conto"
MESSAGE SHOW,105|HIDE,205|HIDE,305
ITEM "C|Cliente"
MESSAGE SHOW,205|HIDE,105|HIDE,305
ITEM "F|Fornitore"
MESSAGE SHOW,305|HIDE,105|HIDE,205
FLAGS "DG"
GROUP 1
// FLAGS "U"
END
NUMBER 103 3
BEGIN
PROMPT 1 3 "Gruppo "
FIELD LF_RCAUSALI->GRUPPO
USE LF_PCON KEY 1 SELECT (CONTO="") && (SOTTOCONTO="")
INPUT GRUPPO 103
DISPLAY "Gruppo" GRUPPO
DISPLAY "Descrizione@50" DESCR
DISPLAY "Tipo C/F" TMCF
CHECKTYPE NORMAL
OUTPUT 103 GRUPPO
OUTPUT 107 DESCR
// OUTPUT 102 TMCF
WARNING "Gruppo inesistente o mancante"
// CHECKTYPE REQUIRED
CHECKTYPE NORMAL
GROUP 1
ADD RUN CG0 -1
END
NUMBER 104 3
BEGIN
PROMPT 15 3 "Conto "
FIELD LF_RCAUSALI->CONTO
USE LF_PCON KEY 1 SELECT (CONTO!="") && (SOTTOCONTO="")
INPUT GRUPPO 103
INPUT CONTO 104
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Descrizione@50" DESCR
DISPLAY "Tipo C/F" TMCF
CHECKTYPE NORMAL
OUTPUT 102 TMCF
OUTPUT 104 CONTO
OUTPUT 103 GRUPPO
OUTPUT 107 DESCR
WARNING "Conto inesistente o mancante"
ADD RUN CG0 -1
GROUP 1
END
// Sottoconto NORMALE
NUMBER 105 6
BEGIN
PROMPT 29 3 "Sottoconto "
FIELD LF_RCAUSALI->SOTTOCONTO
USE LF_PCON SELECT SOTTOCONTO!=""
INPUT GRUPPO 103
INPUT CONTO 104
INPUT SOTTOCONTO 105
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
DISPLAY "Descrizione@50" DESCR
OUTPUT 103 GRUPPO
OUTPUT 104 CONTO
OUTPUT 105 SOTTOCONTO
OUTPUT 107 DESCR
ADD RUN CG0 -1
CHECKTYPE NORMAL
GROUP 1
END
// Sottoconto CLIENTI
NUMBER 205 6
BEGIN
PROMPT 29 3 "Cliente "
FIELD LF_RCAUSALI->SOTTOCONTO
USE LF_CLIFO KEY 1 SELECT (TIPOCF=="C")
INPUT TIPOCF "C"
INPUT CODCF 205
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" CODCF
DISPLAY "Ragione sociale@50" RAGSOC
DISPLAY "Tipo C/F" TIPOCF
OUTPUT 205 CODCF
OUTPUT 107 RAGSOC
CHECKTYPE NORMAL
FLAGS "H"
MESSAGE COPY,105
ADD RUN CG0 -1
GROUP 1
END
// Sottoconto FORNITORI
NUMBER 305 6
BEGIN
PROMPT 29 3 "Fornitore "
FIELD LF_RCAUSALI->SOTTOCONTO
USE LF_CLIFO KEY 1 SELECT (TIPOCF=="F")
INPUT TIPOCF "F"
INPUT CODCF 305
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" CODCF
DISPLAY "Ragione sociale@50" RAGSOC
DISPLAY "Tipo C/F" TIPOCF
OUTPUT 305 CODCF
OUTPUT 107 RAGSOC
CHECKTYPE NORMAL
FLAGS "H"
MESSAGE COPY,105
ADD RUN CG0 -1
GROUP 1
END
LISTBOX 106 5
BEGIN
PROMPT 51 3 "Sezione "
ITEM "D|Dare"
ITEM "A|Avere"
FIELD LF_RCAUSALI->SEZIONE
CHECKTYPE REQUIRED
END
STRING 107 50
BEGIN
PROMPT 1 5 "Descrizione "
FIELD LF_RCAUSALI->DESC
GROUP 1
END
STRING 108 3
BEGIN
PROMPT 1 7 "Descrizione aggiuntiva "
FIELD LF_RCAUSALI->CODDESC
USE %DPN
INPUT CODTAB 108
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione @50" S0
OUTPUT 108 CODTAB
FLAGS "R"
CHECKTYPE NORMAL
GROUP 1
END
BOOLEAN 109
BEGIN
PROMPT 34 7 "Riga iva "
FIELD LF_RCAUSALI->RIGAIVA
FLAGS "D"
END
STRING 110 4
BEGIN
USE %IVA
PROMPT 48 7 "Codice iva "
INPUT CODTAB 110
FIELD LF_RCAUSALI->CODIVA
DISPLAY "Codice " CODTAB
DISPLAY "Descrizione @50" S0
OUTPUT 110 CODTAB
FLAGS "D"
GROUP 1
END
BUTTON DLG_OK 9 2
BEGIN
PROMPT -13 -1 ""
END
BUTTON DLG_CANCEL 9 2
BEGIN
PROMPT -23 -1 ""
END
BUTTON DLG_NULL 9 2
BEGIN
PROMPT -33 -1 "Azzera"
MESSAGE RESET,1@
END
ENDPAGE
ENDMASK
#include "cg0500.h"
PAGE "" -1 -1 68 11
STRING 101 22
BEGIN
PROMPT 1 1 "Tipo "
FLAGS "D"
END
LISTBOX 102 1 11
BEGIN
PROMPT 33 1 "C/F "
ITEM " |Conto"
MESSAGE SHOW,105|HIDE,205|HIDE,305
ITEM "C|Cliente"
MESSAGE SHOW,205|HIDE,105|HIDE,305
ITEM "F|Fornitore"
MESSAGE SHOW,305|HIDE,105|HIDE,205
FLAGS "DG"
GROUP 1
// FLAGS "U"
END
NUMBER 103 3
BEGIN
PROMPT 1 3 "Gruppo "
FIELD LF_RCAUSALI->GRUPPO
USE LF_PCON KEY 1 SELECT (CONTO="") && (SOTTOCONTO="")
INPUT GRUPPO 103
DISPLAY "Gruppo" GRUPPO
DISPLAY "Descrizione@50" DESCR
DISPLAY "Tipo C/F" TMCF
CHECKTYPE NORMAL
OUTPUT 103 GRUPPO
OUTPUT 107 DESCR
// OUTPUT 102 TMCF
WARNING "Gruppo inesistente o mancante"
// CHECKTYPE REQUIRED
CHECKTYPE NORMAL
GROUP 1
ADD RUN CG0 -0
END
NUMBER 104 3
BEGIN
PROMPT 15 3 "Conto "
FIELD LF_RCAUSALI->CONTO
USE LF_PCON KEY 1 SELECT (CONTO!="") && (SOTTOCONTO="")
INPUT GRUPPO 103
INPUT CONTO 104
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Descrizione@50" DESCR
DISPLAY "Tipo C/F" TMCF
CHECKTYPE NORMAL
OUTPUT 102 TMCF
OUTPUT 104 CONTO
OUTPUT 103 GRUPPO
OUTPUT 107 DESCR
WARNING "Conto inesistente o mancante"
ADD RUN CG0 -0
GROUP 1
END
// Sottoconto NORMALE
NUMBER 105 6
BEGIN
PROMPT 29 3 "Sottoconto "
FIELD LF_RCAUSALI->SOTTOCONTO
USE LF_PCON SELECT SOTTOCONTO!=""
INPUT GRUPPO 103
INPUT CONTO 104
INPUT SOTTOCONTO 105
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
DISPLAY "Descrizione@50" DESCR
OUTPUT 103 GRUPPO
OUTPUT 104 CONTO
OUTPUT 105 SOTTOCONTO
OUTPUT 107 DESCR
ADD RUN CG0 -0
CHECKTYPE NORMAL
GROUP 1
END
// Sottoconto CLIENTI
NUMBER 205 6
BEGIN
PROMPT 29 3 "Cliente "
FIELD LF_RCAUSALI->SOTTOCONTO
USE LF_CLIFO KEY 1 SELECT (TIPOCF=="C")
INPUT TIPOCF "C"
INPUT CODCF 205
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" CODCF
DISPLAY "Ragione sociale@50" RAGSOC
DISPLAY "Tipo C/F" TIPOCF
OUTPUT 205 CODCF
OUTPUT 107 RAGSOC
CHECKTYPE NORMAL
FLAGS "H"
MESSAGE COPY,105
ADD RUN CG0 -1
GROUP 1
END
// Sottoconto FORNITORI
NUMBER 305 6
BEGIN
PROMPT 29 3 "Fornitore "
FIELD LF_RCAUSALI->SOTTOCONTO
USE LF_CLIFO KEY 1 SELECT (TIPOCF=="F")
INPUT TIPOCF "F"
INPUT CODCF 305
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" CODCF
DISPLAY "Ragione sociale@50" RAGSOC
DISPLAY "Tipo C/F" TIPOCF
OUTPUT 305 CODCF
OUTPUT 107 RAGSOC
CHECKTYPE NORMAL
FLAGS "H"
MESSAGE COPY,105
ADD RUN CG0 -1
GROUP 1
END
LISTBOX 106 5
BEGIN
PROMPT 51 3 "Sezione "
ITEM "D|Dare"
ITEM "A|Avere"
FIELD LF_RCAUSALI->SEZIONE
CHECKTYPE REQUIRED
FLAGS "U"
END
STRING 107 50
BEGIN
PROMPT 1 5 "Descrizione "
FIELD LF_RCAUSALI->DESC
GROUP 1
END
STRING 108 3
BEGIN
PROMPT 1 7 "Descrizione aggiuntiva "
FIELD LF_RCAUSALI->CODDESC
USE %DPN
INPUT CODTAB 108
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione @50" S0
OUTPUT 108 CODTAB
FLAGS "R"
CHECKTYPE NORMAL
GROUP 1
END
BOOLEAN 109
BEGIN
PROMPT 34 7 "Riga iva "
FIELD LF_RCAUSALI->RIGAIVA
FLAGS "D"
END
STRING 110 4
BEGIN
USE %IVA
PROMPT 48 7 "Codice iva "
INPUT CODTAB 110
FIELD LF_RCAUSALI->CODIVA
DISPLAY "Codice " CODTAB
DISPLAY "Descrizione @50" S0
OUTPUT 110 CODTAB
FLAGS "D"
GROUP 1
END
BUTTON DLG_OK 9 2
BEGIN
PROMPT -13 -1 ""
END
BUTTON DLG_CANCEL 9 2
BEGIN
PROMPT -23 -1 ""
END
BUTTON DLG_NULL 9 2
BEGIN
PROMPT -33 -1 "Azzera"
MESSAGE RESET,1@
END
ENDPAGE
ENDMASK

View File

@ -60,9 +60,8 @@ class CG3200_application : public TPrintapp
bool _stampaprogre,_stampatotiva,_stampatot,_prima_volta,_stampa_mov_prov;
int _annomsk,_annoesmsk,_annoes,_annomsksucc;
long _sottoc,_numreg,_protiva,_numgio;
long _annomsk,_annoesmsk,_sottoc,_numreg,_annoes;
long _annomsksucc,_numgio,_protiva;
bool _stampa_progressivi_si,_competenza,_inizio_stampa,_puoi_stampare;
int _tipocf;
char _ricerca;
@ -438,7 +437,7 @@ bool CG3200_application::preprocess_pconti(int file, int counter)
_mov->curr().zero();
_mov->curr().put(MOV_NUMREG,_numreg);
_mov->read();
_annoes = _mov->get_int(MOV_ANNOES);
_annoes = atol(_mov->curr().get(MOV_ANNOES));
_regiva = _mov->curr().get(MOV_REG);
// Controlla se saldo e' diverso da 0
@ -468,7 +467,7 @@ bool CG3200_application::preprocess_pconti(int file, int counter)
_numdoc = _mov->curr().get(MOV_NUMDOC);
descrizione_causale();
_descrizionemov = _mov->curr().get(MOV_DESCR);
_numgio = _mov->get_long(MOV_NUMGIO);
_numgio = atol(_mov->curr().get(MOV_NUMGIO));
if (_sezione == "D")
{
_totale_periodo_dare += _importo;
@ -592,7 +591,7 @@ bool CG3200_application::preprocess_clifo(int file, int counter)
_mov->curr().zero();
_mov->curr().put(MOV_NUMREG,_numreg);
_mov->read();
_annoes = _mov->get_int(MOV_ANNOES);
_annoes = atol(_mov->curr().get(MOV_ANNOES));
_regiva = _mov->curr().get(MOV_REG);
// Controlla se saldo e' diverso da 0
@ -622,7 +621,7 @@ bool CG3200_application::preprocess_clifo(int file, int counter)
_numdoc = _mov->curr().get(MOV_NUMDOC);
descrizione_causale();
_descrizionemov = _mov->curr().get(MOV_DESCR);
_numgio = _mov->get_int(MOV_NUMGIO);
_numgio = atol(_mov->curr().get(MOV_NUMGIO));
if (_sezione == "D")
{
_totale_periodo_dare += _importo;
@ -929,7 +928,7 @@ bool CG3200_application::set_print(int)
_data_ini = (_msk->get(F_DATAINI));
_data_fine = (_msk->get(F_DATAFINE));
_annomsk = _msk->get_int(F_ANNO);
_annomsk = atol(_msk->get(F_ANNO));
if (_annomsk == 0)
if (_data_fine == botime) //Se data_fine e' vuota
@ -1000,7 +999,7 @@ bool CG3200_application::set_print(int)
a.put(PCN_CONTO,contofine);
a.put(PCN_SOTTOCONTO,sottocontofine);
current_cursor()->setregion(da, a);
current_cursor()->setregion(&da, &a);
}
else
{
@ -1030,7 +1029,7 @@ bool CG3200_application::set_print(int)
a.put(CLI_CONTO,contofine);
a.put(CLI_CODCF,sottocontofine);
current_cursor()->setregion(da, a);
current_cursor()->setregion(&da, &a);
}
if (_stampatotiva)

View File

@ -6,7 +6,7 @@
TFixed_string TMP (__tmp, MAXSTR);
HIDDEN CG4400_application * app() { return (CG4400_application*) MainApp(); }
CG4400_application * app() { return (CG4400_application*) MainApp(); }
bool filter_func (const TRelation * r)
{
@ -17,10 +17,12 @@ bool filter_func (const TRelation * r)
if (codreg != app()->_codreg || annoes != app()->_annoes)
return FALSE;
if (app()->_stampa_tutti_i_registri)
if ( (app()->_tipo_reg != 1) && (app()->_tipo_reg != 2) )
return FALSE;
//Non puo' essere che _tipo_reg sia diverso da 1 o 2, nel caso di stampa tutti i registri !
//if (app()->_stampa_tutti_i_registri)
// if ( (app()->_tipo_reg != 1) && (app()->_tipo_reg != 2) )
// return FALSE;
return TRUE;
}
@ -36,9 +38,12 @@ HIDDEN int compare(const TObject** o1, const TObject** o2)
{
TRigaiva* r1 = (TRigaiva*)*o1;
TRigaiva* r2 = (TRigaiva*)*o2;
TString16 campo1; campo1.format("%d%4s", r1->_tipodet, (const char*)r1->_codiva);
TString16 campo2; campo2.format("%d%4s", r2->_tipodet, (const char*)r2->_codiva);
return (strcmp(campo1, campo2));
TString campo1;
TString campo2;
campo1.format("%d%4s", r1->_tipodet, (const char*)r1->_codiva);
campo2.format("%d%4s", r2->_tipodet, (const char*)r2->_codiva);
return (strcmp((const char*)campo1, (const char*)campo2));
}
/*
@ -60,6 +65,8 @@ bool mask_select (TMask_field& f, KEY k)
// build sheet
if (k == K_SPACE)
{
f.mask().field(DA_CODICE).set("");
f.mask().field(A_CODICE).set("");
app()->_ditte->destroy(); chk = 0l;
for (i = 0; i < app()->_nomiditte.items(); i++)
{
@ -158,9 +165,9 @@ bool mask_cod (TMask_field& f, KEY k)
TabLbu.read();
if ( TabLbu.good() )
{
f.mask().set(MESE,TabLbu.get_long("I0")+1);
// f.mask().set(MESE,TabLbu.get_long("I0")+1);
f.mask().set(ULTIMO_MESE,TabLbu.get_long("I0"));
f.mask().set(ULTIMA_PAGINA,TabLbu.get("I1"));
f.mask().set(ULTIMA_PAGINA,TabLbu.get_long("I1"));
}
}
return TRUE;
@ -168,7 +175,8 @@ bool mask_cod (TMask_field& f, KEY k)
bool mask_fino_a_mese (TMask_field& f, KEY k)
{
if ( (k == K_TAB) && f.mask().is_running() )
//if ( (k == K_TAB) && f.mask().is_running() )
if (k == K_ENTER)
{
TTable TabReg ("REG");
TString16 codtab;
@ -188,7 +196,8 @@ bool mask_fino_a_mese (TMask_field& f, KEY k)
--primo;
giorni_del_mese = primo.day();
}
TDate datasup = format("%02d/%02d/%4d",giorni_del_mese,fino_a_mese,anno); if (codreg != "")
TDate datasup = format("%02d/%02d/%4d",giorni_del_mese,fino_a_mese,anno);
if (codreg != "")
{
TabReg.zero();
codtab << anno << codreg;
@ -199,7 +208,7 @@ bool mask_fino_a_mese (TMask_field& f, KEY k)
TDate data = TabReg.get_date("D3");
if (datasup < data)
{
TString16 datas = format("02d/%4d", data.month(), data.year());
TString16 datas = format("%02d/%4d", data.month(), data.year());
f.warning_box ("La data specificata non deve essere inferiore al %s (ultima data di stampa specificata sul registro)", (const char*)datas);
return FALSE;
}
@ -221,7 +230,7 @@ bool mask_fino_a_mese (TMask_field& f, KEY k)
TDate data = TabReg.get_date("D3");
if (datasup > data)
{
TString16 datas = format("02d/%4d", data.month(), data.year());
TString16 datas = format("%02d/%4d", data.month(), data.year());
f.warning_box ("La data specificata non deve essere superiore al %s (ultima data di stampa del libro giornale)", (const char*)datas);
return FALSE;
}
@ -295,7 +304,6 @@ const char * CG4400_application::descr_doc(const char * tipo)
TString codtab = format ("%-2s", tipo);
tab_tpd.zero();
tab_tpd.put("CODTAB", codtab);
if (tab_tpd.read()==NOERR)
TMP = tab_tpd.get("S0");
@ -311,7 +319,6 @@ const char * CG4400_application::descr_iva(const char * cod)
TString codtab = format ("%-4s", cod);
tab_iva.zero();
tab_iva.put("CODTAB", codtab);
if (tab_iva.read()==NOERR)
TMP = tab_iva.get("S0");
@ -362,9 +369,9 @@ const char * CG4400_application::ricerca_occ(const char * occ)
void CG4400_application::user_create()
{
_nditte = new TLocalisamfile(LF_NDITTE);
_ditte = new TArray_sheet(-1, -1, 0, 0, "Selezione Ditte",
"@1|Cod.@5|Ragione Sociale@50");
_nditte = new TLocalisamfile(LF_NDITTE);
_ditte = new TArray_sheet(-1, -1, 0, 0, "Selezione Ditte",
"@1|Cod.@5|Ragione Sociale@50");
_n_ditte = 0l;
for (_nditte->first(); !_nditte->eof(); _nditte->next())
{
@ -378,13 +385,15 @@ void CG4400_application::user_create()
_tab = new TLocalisamfile(LF_TAB);
_tabcom = new TLocalisamfile(LF_TABCOM);
_tabreg = new TTable("REG");
_tablbu = new TTable("%LBU");
_tabinl = new TTable("%INL");
_clifo = new TLocalisamfile(LF_CLIFO);
_occas = new TLocalisamfile(LF_OCCAS);
_rel = new TRelation (LF_MOV);
_rel->add(LF_CAUSALI,"CODCAUS=CODCAUS",1,LF_MOV);
_rel->add(LF_RMOVIVA,"NUMREG=NUMREG",1,LF_MOV);
_cur = new TCursor(_rel, "", 1);
_cur->set_filterfunction(filter_func);
//_cur->set_filterfunction(filter_func);
add_cursor(_cur);
add_file(LF_MOV);
@ -571,38 +580,108 @@ bool CG4400_application::controlla_liquidazione()
return TRUE;
}
/*controlla che i movimenti con data di registrazione compresa tra l'anno precednte e l'ultima data stampata siano tutti gia' stati stampati*/
//controlla che i movimenti con data di registrazione compresa tra l'anno precedente e l'ultima data stampata siano tutti gia' stati stampati in forma definitiva*/
bool CG4400_application::controlla_mov()
{
TLocalisamfile mov (LF_MOV);
bool stampato, ok = TRUE;
long numreg;
TString codreg;
mov.zero();
TRectype a (mov.curr());
bool ok = TRUE;
byte tipo;
TDate udata;
TDate data = format("01/01/%4d", _annoes - 1);
mov.put(MOV_DATAREG, data);
a.put (MOV_DATAREG, _data_da);
mov.read(_isgteq);
while (mov.curr() < a && !mov.eof())
TRecnotype rec = _tabreg->recno();
for (mov.first(); !mov.eof(); mov.next())
{
stampato = mov.get_bool(MOV_STAMPATO);
numreg = mov.get_long(MOV_NUMREG);
if (!_stampa_tutti_i_registri)
codreg = mov.get(MOV_REG);
else codreg = "";
if (codreg == _codreg)
if (!stampato)
{
warning_box("Il movimento con numero di registrazione %ld non e' ancora stato stampato in forma definitiva!", numreg);
ok = FALSE;
}
mov.next();
}
TString16 reg = mov.get(MOV_REG);
TDate datareg = mov.get_date(MOV_DATAREG);
if (_stampa_tutti_i_registri)
cerca_reg (reg, tipo, udata);
else udata = _data_da;
if ( (_stampa_tutti_i_registri && ((tipo == 1)||(tipo == 2)))
|| ((!_stampa_tutti_i_registri)&&(reg == _codreg)) )
if ( (datareg >= data) && (datareg <= udata) )
{
bool stampato = mov.get_bool(MOV_STAMPATO);
long numreg = mov.get_long(MOV_NUMREG);
if (!stampato)
{
warning_box("Il movimento con numero di registrazione %ld non e' ancora stato stampato in forma definitiva!", numreg);
ok = FALSE;
}
}
}
_tabreg->readat(rec);
return ok;
}
void CG4400_application::cerca_reg(const TString& c, byte& t, TDate& d)
{
TString16 cod = "";
cod << _annoes << c;
_tabreg->zero();
_tabreg->put("CODTAB", cod);
if (_tabreg->read() == NOERR)
{
t = _tabreg->get_int ("I0");
d = _tabreg->get_date("D3");
}
}
/*
bool CG4400_application::controlla_mov()
{
bool ok = TRUE;
if (_stampa_tutti_i_registri)
{
TRecnotype rec = _tabreg->recno();//la first l'ho gia' fatta
for (; !_tabreg->eof(); _tabreg->next())
{
TString codtab = _tabreg->get("CODTAB");
int anno = atoi(codtab.mid(0,4));
if (anno != _annoes) break;
TDate data_da = _tabreg->get_date("D3");
TString16 codreg = codtab.mid(4,3);
leggi_movimenti(data_da, codreg, ok);
}
_tabreg->readat(rec);
}
else
leggi_movimenti(_data_da, _codreg, ok);
return ok;
}
void CG4400_application::leggi_movimenti(const TDate& d, const TString& cod, bool& ok)
{
TLocalisamfile mov (LF_MOV);
bool stampato;
long numreg;
TString codreg;
TDate data = format("01/01/%4d", _annoes - 1);
mov.zero();
TRectype a (mov.curr());
mov.put(MOV_DATAREG, data);
a.put (MOV_DATAREG, d);
mov.read(_isgteq);
while (mov.curr() < a && !mov.eof())
{
stampato = mov.get_bool(MOV_STAMPATO);
numreg = mov.get_long(MOV_NUMREG);
codreg = mov.get(MOV_REG);
if (codreg == cod)
if (!stampato)
{
warning_box("Il movimento con numero di registrazione %ld non e' ancora stato stampato in forma definitiva!", numreg);
ok = FALSE;
}
mov.next();
}
}
*/
void CG4400_application::set_page_tot_reg()
{
TString riga(_stampa_width);
@ -764,7 +843,94 @@ void CG4400_application::set_page_tot_reg()
set_row(rw, "@81g%r@98g%r", &tot_imponibp, &tot_impostap);
}
_iva_array.destroy();
}
}
}
bool CG4400_application::compila_reg()
{
byte tipo;
int anno;
long codditta = _nditte->get_long("CODDITTA");
_codtab = "";
if (_codreg.trim().empty())
{
_stampa_tutti_i_registri = TRUE;
for (_tabreg->first(); !_tabreg->eof(); _tabreg->next())
{
_codtab = _tabreg->get("CODTAB");
tipo = _tabreg->get_int("I0");
anno = atoi(_codtab.mid(0,4));
if (anno > _annoes)
{
warning_box("Non esistono registri IVA della Ditta %ld per l'anno %d",
codditta, _annoes);
return FALSE;
}
if (anno == _annoes)
{
if ( tipo == 1 || tipo == 2 ) //registro iva
{
_codreg = _codtab.mid(4,3);
_tipo_reg = _tabreg->get_int("I0");
_pagine_stampate = _tabreg->get_int("I1");
_data_da = _tabreg->get_date ("D3");
_codatt = _tabreg->get("S8");
_attivita = desc_attivita(_codatt);
_desc_lib = _tabreg->get ("S0");
break;
}
else continue;
}
}
}
else // stampa un solo registro
{
_stampa_tutti_i_registri = FALSE;
_codtab << _annoes << _codreg;
_tabreg->zero();
_tabreg->put("CODTAB", _codtab);
if (_tabreg->read() == NOERR)
{
_tipo_reg = _tabreg->get_int("I0");
_pagine_stampate = _tabreg->get_int("I1");
//_pagine_numerate = tab_reg.get_int("I2");
//_stampa_ok = tab_reg.get_int("I7");
//_nprog_da = tab_reg.get_long ("I6");
//_tot_dare = tab_reg.get_real ("R1")
//_tot_avere = tab_reg.get_real ("R2");
_data_da = _tabreg->get_date ("D3");
//_stampa_intesta = _tabreg->get_bool ("B9");
_codatt = _tabreg->get("S8");
_attivita = desc_attivita(_codatt);
_desc_lib = _tabreg->get ("S0");
return TRUE;
}
else
{
warning_box("Il registro IVA specificato non esiste nella \n Ditta %ld", codditta, _annoes);
return FALSE;
}
}
return TRUE;;
}
bool CG4400_application::compila_lib()
{
TTable tab_lib ("%LBU");
TString16 cod;
cod << _annoes << _codlib;
tab_lib.zero();
tab_lib.put("CODTAB", cod);
if (tab_lib.read() == NOERR)
{
_stampa_ind_ditta = tab_lib.get_bool("B1");
return TRUE;
}
return FALSE;
}
bool CG4400_application::preprocess_print(int file, int counter)
@ -775,52 +941,33 @@ bool CG4400_application::preprocess_print(int file, int counter)
_riga_rmi.destroy();
_tot_iva_array.destroy();
_doc_array.destroy();
_dataregp = "";
_mov_empty = TRUE;
_dataregp = "";
_mov_empty = TRUE;
_primast = get_page_number();
set_print_zero();
}
return TRUE;
}
bool CG4400_application::compila_reg()
{
TTable tab_reg ("REG");
tab_reg.zero();
tab_reg.put("CODTAB", _codtab);
if (tab_reg.read() == NOERR)
{
_tipo_reg = tab_reg.get_int("I0");
// _pagine_stampate = tab_reg.get_int("I1");
// _pagine_numerate = tab_reg.get_int("I2");
//_stampa_ok = tab_reg.get_int("I7");
//_nprog_da = tab_reg.get_long ("I6");
//_tot_dare = tab_reg.get_real ("R1")
//_tot_avere = tab_reg.get_real ("R2");
_data_da = tab_reg.get_date ("D3");
//_stampa_intesta = tab_reg.get_bool ("B9");
_codatt = tab_reg.get("S8");
_attivita = desc_attivita(_codatt);
_desc_lib = tab_reg.get ("S0");
return TRUE;
}
return FALSE;
}
bool CG4400_application::preprocess_page(int file, int counter)
{
if (file == LF_MOV)
{
if (counter) return TRUE;
int rr = 0;
TString ragsoc;
TString tipo_op = "";
TString tipo_op = "";
TLocalisamfile* mov = _cur->file(LF_MOV);
TLocalisamfile* caus = _cur->file(LF_CAUSALI);
long annoes = mov->get_long(MOV_ANNOES);
TString16 codreg = mov->get(MOV_REG);
_datareg = mov->get_date(MOV_DATAREG);
if (codreg != _codreg || annoes != _annoes)
return FALSE;
if (_data_da.string() != "" && _data_a.string() != "")
if ( (_datareg < _data_da || _datareg > _data_a) || (!_datareg.ok()) )
return FALSE;
@ -841,10 +988,19 @@ bool CG4400_application::preprocess_page(int file, int counter)
char tipocf = mov->get(MOV_TIPO)[0];
TString ocfpi = mov->get(MOV_OCFPI);
long codcf = mov->get_long(MOV_CODCF);
long numgio = mov->get_long(MOV_NUMGIO);
bool stampato = mov->get_bool(MOV_STAMPATO);
bool intra = caus->get_bool(CAU_INTRACOM);
bool autof = caus->get_bool(CAU_AUTOFATT);
TString descrcau = caus->get(CAU_DESCR);
TString descrcau = caus->get(CAU_DESCR);
//aggiornamento di mov
if (_tipo_stampa != 3)
if (!stampato)
{
mov->put(MOV_STAMPATO,TRUE);
mov->rewrite();
}
if ( intra && autof)
tipo_op = "3";
@ -903,31 +1059,163 @@ bool CG4400_application::preprocess_page(int file, int counter)
if (stampato)
set_row(_r, "@131g*");
}
if (_tipo_stampa == 4) //stampa con riferimento al libro giornale
set_row(_r, "@125g%ld", numgio);
}
return TRUE;
}
void CG4400_application::aggiorna_reg()
{
TString16 codtab;
TTable Tabreg ("REG");
TTable TabInl ("%INL");
long stampate, pag;
const word ultimast = get_page_number();
codtab << _annoes << _codreg;
Tabreg.zero();
Tabreg.put("CODTAB", codtab);
if (Tabreg.read() == NOERR)
{
stampate = ultimast - _primast + 1;
if (!_mov_empty) //cioe' se e' stata stampata almeno una pagina
{
pag = _pagine_stampate + stampate;
Tabreg.put("I1", pag);
}
Tabreg.put("D3", _data_a);
Tabreg.rewrite();
}
if (_tipo_stampa == 2) //stampa su libro unico
//sulla tabella %inl (indice libro unico) devo generare una riga per ogni registro stampato
{
bool trovato = FALSE;
codtab = "";
codtab << _annoes << _codlib;
TabInl.zero();
TRectype nuovo (TabInl.curr());
TRectype recprec (TabInl.curr());
TabInl.put("CODTAB", codtab);
TRectype rec (TabInl.curr());
TabInl.read (_isgteq);
for (; !TabInl.eof(); TabInl.next())
{
if (TabInl.curr() != rec) break;
trovato = TRUE;
recprec = TabInl.curr();
}
TString16 cod;
if (trovato)
{
TString16 cod_inl = recprec.get("CODTAB");
long numero_riga = atol(cod_inl.mid(7,6));
cod_inl = cod_inl.mid(0,7);
nuovo = recprec;
cod << cod_inl << numero_riga + 1;
}
else
cod << codtab << 1L;
long numini = _pagine_stampate + 1;
nuovo.put("CODTAB", cod);
nuovo.put("I0", _annoes);
nuovo.put("I1", _fino_a_mese);
nuovo.put("I2", _primast);
nuovo.put("I3", ultimast);
nuovo.put("I4", get_firm());
nuovo.put("S0", _codreg);
nuovo.put("I5", numini);
nuovo.put("I6", pag);
TabInl.write(nuovo);
}
}
void CG4400_application::aggiorna_lib()
{
TString16 cod;
TTable lbu ("%LBU");
const word stampate = get_page_number();
cod << _annoes << _codlib;
lbu.zero();
lbu.put("CODTAB", cod);
if (lbu.read() == NOERR)
{
lbu.put("I0", _fino_a_mese);
lbu.put("I1", stampate);
lbu.rewrite();
}
}
print_action CG4400_application::postprocess_page (int file, int counter)
{
if (file == LF_MOV)
{
TLocalisamfile* mov = _cur->file(LF_MOV);
_cur->save_status();
++(*_cur);
_dataregs = mov->get_date(MOV_DATAREG);
--(*_cur);
_cur->restore_status();
if (_dataregs.month() != _dataregp.month())
{
set_page_tot_reg();
return REPEAT_PAGE;
}
}
return NEXT_PAGE;
}
print_action CG4400_application::postprocess_print(int file, int counter)
{
if (file == LF_MOV)
{
//aggiorna registri solo se non e' stampa di prova
if (_tipo_stampa != 3)
aggiorna_reg();
if (_stampa_tutti_i_registri)
{
TString16 codtab;
int anno, tipo;
//vado avanti dal punto in cui sono
_tabreg->next();
TString codtab = _tabreg->get("CODTAB");
int anno = atoi(codtab.mid(0,4));
if ( (_tabreg->eof()) || (anno != _annoes) )
for (; !_tabreg->eof(); _tabreg->next())
{
tipo = _tabreg->get_int("I0");
if ( (tipo == 1) || (tipo == 2) ) //registro iva
{
codtab = _tabreg->get("CODTAB");
anno = atoi(codtab.mid(0,4));
break;
}
}
if ( (_tabreg->eof()) || (anno != _annoes) )
{
if (_tipo_stampa == 2) //stampa su libro unico
aggiorna_lib();
return NEXT_PAGE;
}
else
{
_tipo_reg = _tabreg->get_int("I0");
_desc_lib = _tabreg->get("S0");
_data_da = _tabreg->get_date("D3");
_codreg = codtab.mid(4,3);
if (!_mov_empty )
_tipo_reg = _tabreg->get_int("I0");
_desc_lib = _tabreg->get("S0");
_data_da = _tabreg->get_date("D3");
_pagine_stampate = _tabreg->get_int("I1");
_codreg = codtab.mid(4,3);
_primast = get_page_number();
if (!_mov_empty )
printer().formfeed();
_cur->set_filterfunction(NULL);
_cur->set_filterfunction(filter_func);
// (*_cur) = 0L;
_mov_empty = TRUE;
return REPEAT_PAGE;
}
@ -951,21 +1239,27 @@ print_action CG4400_application::postprocess_print(int file, int counter)
else if ( (_tipo_stampa == 1) || (_tipo_stampa == 4) )
{
TLocalisamfile* mov = _cur->file(LF_MOV);
TDate dataregp = mov->get_date(MOV_DATAREG);
/*
TDate dataregp = mov->get_date(MOV_DATAREG);
_cur->save_status();
++(*_cur);
TDate datareg = mov->get_date(MOV_DATAREG);
--(*_cur);
_cur->restore_status();
if (datareg.month() != dataregp.month())
{
set_page_tot_reg();
return REPEAT_PAGE;
}
_cur->save_status();
++(*_cur);
TDate datareg = mov->get_date(MOV_DATAREG);
--(*_cur);
_cur->restore_status();
if (datareg.month() != dataregp.month())
{
set_page_tot_reg();
return REPEAT_PAGE;
}
if (_dataregp.month() != _dataregs.month())
{
set_page_tot_reg();
return REPEAT_PAGE;
}
*/
}
}
return NEXT_PAGE;
}
@ -984,16 +1278,20 @@ bool CG4400_application::set_print(int n)
else if (_tipo_stampa == 3) //stampa di prova
_codreg = m.get(CODICE_LIBRO_PROVA);
else _codreg = m.get(CODICE_LIBRO);
if (_codreg.trim().empty())
{
_tabreg->first();
_codtab = _tabreg->get("CODTAB");
_codreg = _codtab.mid(4,3);
_stampa_tutti_i_registri = TRUE;
}
else
_stampa_tutti_i_registri = FALSE;
/*
if (_codreg.trim().empty())
{
_tabreg->first();
_codtab = _tabreg->get("CODTAB");
_codreg = _codtab.mid(4,3);
_stampa_tutti_i_registri = TRUE;
}
else
{
_codtab << _annoes << _codreg;
_stampa_tutti_i_registri = FALSE;
}
**/
//Se stampa di prova l'utente indica data_da e data_a
if (_tipo_stampa == 3)
{
@ -1011,8 +1309,12 @@ bool CG4400_application::set_print(int n)
{
if ( (_tipo_stampa == 1) || (_tipo_stampa == 4) )
_fino_a_mese = m.get_int(FINO_A_MESE);
else
_fino_a_mese = m.get_int(MESE);
else //stampa su libro unico
{
_codlib = m.get(CODICE_LIB_UN);
_fino_a_mese = m.get_int(MESE);
set_page_number(m.get_int(ULTIMA_PAGINA) + 1);
}
if (_fino_a_mese == 12)
giorni_del_mese = 31;
else
@ -1024,10 +1326,9 @@ bool CG4400_application::set_print(int n)
_data_a=format("%02d/%02d/%4d",giorni_del_mese,_fino_a_mese,_annoes);
// NB data_da viene letta nella preprocess_page
}
_codtab = format("%4d%-3s",_annoes, (const char *)_codreg);
compila_reg();
//if ( (_tipo_stampa == 1) || (_tipo_stampa == 4) )
// compila_reg();
if (_tipo_stampa == 2)
compila_lib();
stampa_registri_IVA();
}
else warning_box("Nessuna ditta selezionata!");
@ -1045,6 +1346,9 @@ void CG4400_application::stampa_registri_IVA()
if (_selected[l])
{
TApplication::set_firm(_nditte->get_long("CODDITTA"));
ok = compila_reg(); // cerca il primo registro valido (nel caso di stampa tutti i registri), senno' legge i dati del registro specificato
if (!ok) continue;
_cur->set_filterfunction(filter_func);
_frequiva = _nditte->get("FREQVIVA")[0];
if (_tipo_stampa != 3) //stampa definitiva
ok = controlla_liquidazione() && controlla_mov();
@ -1086,9 +1390,9 @@ bool CG4400_application::set_ditte(TMask& m)
int CG4400_application::stampa_intestazione_ditta()
{
TDati_ditta tditta(get_firm(), _stampa_width);
TString riga (tditta.prima_riga());
int r=1;
TString riga(tditta.prima_riga());
set_header (r, "%s", (const char *) riga);
r++;
@ -1152,9 +1456,13 @@ else
else
{
set_header(r,"@10gNum.@19gDocumento@68gT Tipo@103gCod %s@121g@124gT", (const char*) nd1);
if (_tipo_stampa == 4) //stampa definitiva con rif. al libro giornale
set_header(r, "@127gNumero");
r++;
set_header(r, "Data reg. prot.@17gData@25gNumero Codice Ragione sociale/descrizione@68gO Doc.@76gTotale doc.@91gImponibile Iva %s@112gImposta@124g%s",
(const char*) nd2, (const char*) cor);
if (_tipo_stampa == 4)
set_header(r, "@127goperaz");
r++;
}
riga.fill('-');
@ -1169,3 +1477,15 @@ int cg4400 (int argc, char * argv[])
}

View File

@ -1,121 +1,129 @@
//
// cg4400.h
//
#include <isam.h>
#include <lffiles.h>
#include <printapp.h>
#include <mask.h>
#include <strings.h>
#include <tabutil.h>
#include <utility.h>
#include <stdlib.h>
#include <urldefid.h>
#include <sheet.h>
#include <config.h>
#include <nditte.h>
#include <anagr.h>
#include <comuni.h>
#include <mov.h>
#include <rmoviva.h>
#include <clifo.h>
#include <occas.h>
#include <causali.h>
#include "cglib03.h"
const int MAXSTR = 128;
static char __tmp[MAXSTR];
//enum STAMPA { bollati=1, unici=2 };
const int TABREG = (int)TTable::name2log("REG");
bool filter_func (const TRelation*);
bool my_handler (TMask_field&, KEY);
bool mask_cod (TMask_field&, KEY);
bool mask_mese (TMask_field&, KEY);
bool mask_fino_a_mese (TMask_field&, KEY);
bool mask_select (TMask_field&, KEY);
bool mask_verifica (TMask_field&, KEY);
bool mask_annulla (TMask_field&, KEY);
class TDati_ditta : public TObject
{
TLocalisamfile * _nditte, * _anag, *_comuni;
TString _ragsoc, _cofi, _paiva;
TString _comunefis, _viafis, _provfis, _cap;
long _codditta;
int _stampa_width;
protected:
void get_dati_ditta();
TRectype& look_com (const char * codice);
public:
const char* prima_riga ();
const char* seconda_riga ();
TDati_ditta (long cod_ditta, int stampa_width);
virtual ~TDati_ditta();
};
class CG4400_application : public TPrintapp
{
friend bool filter_func (const TRelation *r);
friend bool mask_cod (TMask_field&, KEY);
friend bool mask_mese (TMask_field&, KEY);
friend bool mask_fino_a_mese (TMask_field&, KEY);
friend bool my_handler (TMask_field&, KEY);
friend bool mask_select (TMask_field&, KEY);
friend bool mask_verifica (TMask_field&, KEY);
friend bool mask_annulla (TMask_field&, KEY);
TCursor * _cur;
TRelation *_rel;
TLocalisamfile *_clifo, *_nditte, *_occas, *_tab, *_tabcom;
TTable *_tabreg;
TRigaiva_array _iva_array, _riga_rmi;
TTipodoc_array _doc_array;
TRiga_array _tot_iva_array;
TArray_sheet *_ditte;
TBit_array _selected;
TArray _nomiditte; //array descrizioni ditte per sheet
bool _riferim, _mov_empty;
char _frequiva;
TDate _data_da, _data_a, _data_stampa, _dataregp, _datareg;
long _annoes, _n_ditte;
int _riepil, _tipo_reg, _fino_a_mese, _tipo_stampa;
int _r, _stampa_width; // riga corrente di stampa
real _totale_doc;
TString _codreg, _desc_lib, _codatt, _attivita;
TString _codtab, _tipodoc, _descr_doc;
bool _stampa_tutti_i_registri;
public:
const char* desc_attivita (const char * codatt);
const char* descr_doc (const char * tipo);
const char* descr_iva (const char * cod);
const char* ricerca_cf (char tipocf, long codcf);
const char* ricerca_occ(const char * occ);
int setta_riga (int, const TRigaiva&, real&, real&, real&, real&);
int riga_rmoviva();
bool set_print(int);
bool set_ditte(TMask&);
bool compila_reg();
bool controlla_liquidazione();
bool controlla_mov();
void stampa_registri_IVA();
void set_page_tot_reg();
void calcola_progressivi(real&, real&, const char*, const int);
void user_create();
void user_destroy();
bool preprocess_page(int, int);
int stampa_intestazione_ditta();
bool preprocess_print(int, int);
print_action postprocess_print(int, int);
void preprocess_header();
CG4400_application() : TPrintapp(),_ditte(NULL),_selected(10000),
_nomiditte(100) {}
virtual ~CG4400_application() {}
};
//
// cg4400.h
//
#include <isam.h>
#include <lffiles.h>
#include <printapp.h>
#include <mask.h>
#include <strings.h>
#include <tabutil.h>
#include <utility.h>
#include <stdlib.h>
#include <urldefid.h>
#include <sheet.h>
#include <config.h>
#include <nditte.h>
#include <anagr.h>
#include <comuni.h>
#include <mov.h>
#include <rmoviva.h>
#include <clifo.h>
#include <occas.h>
#include <causali.h>
#include "cglib03.h"
const int MAXSTR = 128;
static char __tmp[MAXSTR];
//enum STAMPA { bollati=1, unici=2 };
const int TABREG = (int)TTable::name2log("REG");
bool filter_func (const TRelation*);
bool my_handler (TMask_field&, KEY);
bool mask_cod (TMask_field&, KEY);
bool mask_mese (TMask_field&, KEY);
bool mask_fino_a_mese (TMask_field&, KEY);
bool mask_select (TMask_field&, KEY);
bool mask_verifica (TMask_field&, KEY);
bool mask_annulla (TMask_field&, KEY);
class TDati_ditta : public TObject
{
TLocalisamfile * _nditte, * _anag, *_comuni;
TString _ragsoc, _cofi, _paiva;
TString _comunefis, _viafis, _provfis, _cap;
long _codditta;
int _stampa_width;
protected:
void get_dati_ditta();
TRectype& look_com (const char * codice);
public:
const char* prima_riga ();
const char* seconda_riga ();
TDati_ditta (long cod_ditta, int stampa_width);
virtual ~TDati_ditta();
};
class CG4400_application : public TPrintapp
{
friend bool filter_func (const TRelation *r);
friend bool mask_cod (TMask_field&, KEY);
friend bool mask_mese (TMask_field&, KEY);
friend bool mask_fino_a_mese (TMask_field&, KEY);
friend bool my_handler (TMask_field&, KEY);
friend bool mask_select (TMask_field&, KEY);
friend bool mask_verifica (TMask_field&, KEY);
friend bool mask_annulla (TMask_field&, KEY);
TCursor * _cur;
TRelation *_rel;
TLocalisamfile *_clifo, *_nditte, *_occas, *_tab, *_tabcom;
TTable *_tabreg, *_tablbu, *_tabinl;
TRigaiva_array _iva_array, _riga_rmi;
TTipodoc_array _doc_array;
TRiga_array _tot_iva_array;
TArray_sheet *_ditte;
TBit_array _selected;
TArray _nomiditte; //array descrizioni ditte per sheet
bool _mov_empty, _stampa_ind_ditta, _stampa_tutti_i_registri;
char _frequiva;
TDate _data_da, _data_a, _data_stampa, _dataregp, _dataregs, _datareg;
long _annoes, _n_ditte;
word _primast;
int _riepil, _tipo_reg, _fino_a_mese, _tipo_stampa, _pagine_stampate;
int _r, _stampa_width; // riga corrente di stampa
real _totale_doc;
TString _codreg, _desc_lib, _codatt, _attivita;
TString _codtab, _tipodoc, _descr_doc, _codlib;
public:
const char* desc_attivita (const char * codatt);
const char* descr_doc (const char * tipo);
const char* descr_iva (const char * cod);
const char* ricerca_cf (char tipocf, long codcf);
const char* ricerca_occ(const char * occ);
int setta_riga (int, const TRigaiva&, real&, real&, real&, real&);
int riga_rmoviva();
bool set_print(int);
bool set_ditte(TMask&);
bool compila_reg();
bool compila_lib();
bool controlla_liquidazione();
bool controlla_mov();
void cerca_reg(const TString&, byte&, TDate&);
//void leggi_movimenti(const TDate&, const TString&, bool&);
void stampa_registri_IVA();
void set_page_tot_reg();
void aggiorna_reg();
void aggiorna_lib();
void calcola_progressivi(real&, real&, const char*, const int);
void user_create();
void user_destroy();
bool preprocess_page(int, int);
int stampa_intestazione_ditta();
bool preprocess_print(int, int);
print_action postprocess_print(int, int);
print_action postprocess_page (int, int);
void preprocess_header();
CG4400_application() : TPrintapp(),_ditte(NULL),_selected(10000),
_nomiditte(100) {}
virtual ~CG4400_application() {}
};

View File

@ -5,33 +5,33 @@
PAGE "Stampa registri IVA" -1 -1 56 19
/*
/*
LISTBOX TIPO_STAMPA 2 27
BEGIN
PROMPT 2 1 "Tipo stampa "
ITEM "1|Libri bollati della ditta"
MESSAGE SHOW,1@|HIDE,2@|HIDE,3@
MESSAGE SHOW,1@|HIDE,2@|HIDE,3@
ITEM "2|Libri unici dello studio"
MESSAGE SHOW,2@|HIDE,1@|HIDE,3@
MESSAGE SHOW,2@|HIDE,1@|HIDE,3@
ITEM "3|Stampa di prova"
MESSAGE SHOW,3@|HIDE,1@|HIDE,2@|SHOW,CODICE_LIBRO
MESSAGE SHOW,3@|HIDE,1@|HIDE,2@|SHOW,CODICE_LIBRO
ITEM "4|Stampa libri con riferimenti al libro giornale"
MESSAGE SHOW,1@|HIDE,2@|HIDE,3@
MESSAGE SHOW,1@|HIDE,2@|HIDE,3@
END
*/
NUMBER TIPO_STAMPA 1
BEGIN
*/
NUMBER TIPO_STAMPA 1
BEGIN
PROMPT 2 1 "Tipo stampa "
SHEET "Cod|Descrizione@50"
INPUT TIPO_STAMPA
OUTPUT TIPO_STAMPA
ITEM "1|Libri bollati della ditta"
SHEET "Cod|Descrizione@50"
INPUT TIPO_STAMPA
OUTPUT TIPO_STAMPA
ITEM "1|Libri bollati della ditta"
ITEM "2|Libri unici dello studio"
ITEM "3|Stampa di prova"
ITEM "4|Stampa libri con riferimenti al libro giornale"
END
END
GROUPBOX DLG_NULL 35 5
BEGIN
PROMPT 20 1 "Scelta ditte"
@ -39,25 +39,27 @@ END
NUMBER DA_CODICE 6
BEGIN
PROMPT 21 2 "Da codice "
HELP "Immettere codice ditta di partenza per la selezione"
USE LF_NDITTE KEY 1
DISPLAY "Codice" CODDITTA
DISPLAY "Ragione sociale@50" RAGSOC
OUTPUT DA_CODICE CODDITTA
CHECKTYPE NORMAL
PROMPT 21 2 "Da codice "
HELP "Immettere codice ditta di partenza per la selezione"
USE LF_NDITTE KEY 1
CHECKTYPE NORMAL
INPUT CODDITTA DA_CODICE
DISPLAY "Codice" CODDITTA
DISPLAY "Ragione sociale@50" RAGSOC
OUTPUT DA_CODICE CODDITTA
END
NUMBER A_CODICE 6
BEGIN
PROMPT 21 3 "A codice "
HELP "Immettere codice ditta di fine selezione"
COPY USE DA_CODICE
DISPLAY "Codice" CODDITTA
DISPLAY "Ragione sociale@50" RAGSOC
OUTPUT A_CODICE CODDITTA
END
PROMPT 21 3 "A codice "
HELP "Immettere codice ditta di fine selezione"
COPY USE DA_CODICE
CHECKTYPE NORMAL
INPUT CODDITTA A_CODICE
COPY DISPLAY DA_CODICE
OUTPUT A_CODICE CODDITTA
END
STRING F_SELECT 6
BEGIN
PROMPT 21 4 "Scelte n. "
@ -81,70 +83,71 @@ BEGIN
PROMPT 42 4 "Verifica"
//MESSAGE EXIT,F_VERIFICA
END
DATE DATA_STAMPA
BEGIN
PROMPT 2 6 "Data stampa "
FLAG "AH"
GROUP 3
GROUP 3
END
NUMBER ANNO 4
BEGIN
PROMPT 2 7 "Anno "
FLAGS "A"
FLAGS "A"
END
STRING CODICE_LIBRO 3
STRING CODICE_LIBRO 3
BEGIN
PROMPT 20 7 "Codice libro "
HELP "Specificare il codice libro di cui si chiede la stampa; nel caso in cui non si indichi nessun codice verranno stampati tutti i libri delle ditte selezionate"
USE REG SELECT (I0<"3") && (S7=="") && (CODTAB[1,4]==#111)
INPUT CODTAB[1,4] ANNO
INPUT CODTAB[5,7] CODICE_LIBRO
DISPLAY "Anno " CODTAB[1,4]
DISPLAY "Codice " CODTAB[5,7]
DISPLAY "Descrizione @40" S0
OUTPUT ANNO CODTAB[1,4]
OUTPUT CODICE_LIBRO CODTAB[5,7]
CHECKTYPE NORMAL
FLAGS "R"
GROUP 1
END
STRING CODICE_LIBRO_PROVA 3
BEGIN
PROMPT 20 7 "Codice libro "
HELP "Specificare il codice libro di cui si chiede la stampa; nel caso in cui non si indichi nessun codice verranno stampati tutti i libri delle ditte selezionate"
USE REG SELECT (I0<"3") && (CODTAB[1,4]==#111)
INPUT CODTAB[1,4] ANNO
INPUT CODTAB[5,7] CODICE_LIBRO
DISPLAY "Anno " CODTAB[1,4]
DISPLAY "Codice " CODTAB[5,7]
DISPLAY "Descrizione @40" S0
OUTPUT ANNO CODTAB[1,4]
OUTPUT CODICE_LIBRO CODTAB[5,7]
CHECKTYPE NORMAL
FLAGS "R"
GROUP 1
END
STRING CODICE_LIB_UN 3
BEGIN
PROMPT 20 7 "Cod.libro unico "
USE %LBU SELECT CODTAB[1,4]==#111
INPUT CODTAB[1,4] ANNO
INPUT CODTAB[5,7] CODICE_LIB_UN
HELP "Specificare il codice libro di cui si chiede la stampa; nel caso in cui non si indichi nessun codice verranno stampati tutti i libri delle ditte selezionate"
USE REG SELECT (I0<"3") && (S6=="") && (CODTAB[1,4]==#111)
INPUT CODTAB[1,4] ANNO
INPUT CODTAB[5,7] CODICE_LIBRO
DISPLAY "Anno " CODTAB[1,4]
DISPLAY "Codice " CODTAB[5,7]
DISPLAY "Descrizione @40" S0
OUTPUT ANNO CODTAB[1,4]
OUTPUT CODICE_LIB_UN CODTAB[5,7]
FLAGS "R"
CHECKTYPE REQUIRED
GROUP 2
OUTPUT CODICE_LIBRO CODTAB[5,7]
//CHECKTYPE NORMAL
FLAGS "UR"
GROUP 1
END
STRING CODICE_LIBRO_PROVA 3
BEGIN
PROMPT 20 7 "Codice libro "
HELP "Specificare il codice libro di cui si chiede la stampa; nel caso in cui non si indichi nessun codice verranno stampati tutti i libri delle ditte selezionate"
USE REG SELECT (I0<"3") && (CODTAB[1,4]==#111)
INPUT CODTAB[1,4] ANNO
INPUT CODTAB[5,7] CODICE_LIBRO
DISPLAY "Anno " CODTAB[1,4]
DISPLAY "Codice " CODTAB[5,7]
DISPLAY "Descrizione @40" S0
OUTPUT ANNO CODTAB[1,4]
OUTPUT CODICE_LIBRO CODTAB[5,7]
//CHECKTYPE NORMAL
FLAGS "UR"
GROUP 1
END
STRING CODICE_LIB_UN 3
BEGIN
PROMPT 20 7 "Cod.libro unico "
HELP "Specificare il codice del libro unico su cui deve essere effettuata la stampa"
USE %LBU SELECT CODTAB[1,4]==#111
INPUT CODTAB[1,4] ANNO
INPUT CODTAB[5,7] CODICE_LIB_UN
DISPLAY "Anno " CODTAB[1,4]
DISPLAY "Codice " CODTAB[5,7]
DISPLAY "Descrizione @40" S0
OUTPUT ANNO CODTAB[1,4]
OUTPUT CODICE_LIB_UN CODTAB[5,7]
FLAGS "UR"
CHECKTYPE REQUIRED
GROUP 2
END
GROUPBOX DLG_NULL 52 3
BEGIN
PROMPT 2 9 "Stampa movimenti"
@ -162,59 +165,60 @@ BEGIN
GROUP 3
END
LISTBOX FINO_A_MESE 10
BEGIN
PROMPT 5 10 "Fino al mese "
FLAGS "M"
GROUP 1
END
LISTBOX MESE 10
BEGIN
PROMPT 5 10 "Mese "
FLAGS "M"
GROUP 2
END
LISTBOX FINO_A_MESE 10
BEGIN
PROMPT 5 10 "Fino al mese "
FLAGS "M"
GROUP 1
END
LISTBOX MESE 10
BEGIN
PROMPT 5 10 "Mese "
FLAGS "M"
GROUP 2
END
LISTBOX TIPO_RIEPILOGATIVO 11
BEGIN
PROMPT 2 12 "Tipo riepilogativo "
HELP "Selezionare Del periodo/Annuale a seconda che si desideri la stampa della liquidazione periodica/annuale"
ITEM "P|Del periodo"
ITEM "A|Annuale"
GROUP 1
ITEM "A|Annuale"
GROUP 1
END
LISTBOX ULTIMO_MESE 10
BEGIN
PROMPT 2 13 "Ultimo mese stampa su libro unico "
FLAGS "MD"
GROUP 2
END
LISTBOX ULTIMO_MESE 10
BEGIN
PROMPT 2 13 "Ultimo mese stampa su libro unico "
FLAGS "MD"
GROUP 2
END
NUMBER ULTIMA_PAGINA 4
BEGIN
PROMPT 2 14 "Ultimo numero di pagina stampata libro unico "
FLAGS "R"
FLAGS "R"
GROUP 2
END
STRING CODICE_LIBRO_IVA 3
BEGIN
PROMPT 2 15 "Eventuale codice libro IVA "
HELP "Se non viene indicato nessun cod. libro IVA, vengono stampati tutti i registri delle ditte selezionate"
USE REG SELECT (I0<"3") && (S7=="") && (CODTAB[1,4]==#111)
INPUT CODTAB[1,4] ANNO
INPUT CODTAB[5,7] CODICE_LIBRO_IVA
HELP "Se non viene indicato nessun cod. libro IVA, vengono stampati tutti i registri delle ditte selezionate"
USE REG SELECT (I0<"3") && (S6=="") && (CODTAB[1,4]==#111)
INPUT CODTAB[1,4] ANNO
INPUT CODTAB[5,7] CODICE_LIBRO_IVA
DISPLAY "Anno " CODTAB[1,4]
DISPLAY "Codice " CODTAB[5,7]
DISPLAY "Descrizione @40" S0
OUTPUT ANNO CODTAB[1,4]
OUTPUT CODICE_LIBRO_IVA CODTAB[5,7]
CHECKTYPE NORMAL
FLAGS "R"
GROUP 2
OUTPUT CODICE_LIBRO_IVA CODTAB[5,7]
//CHECKTYPE NORMAL
FLAGS "UR"
GROUP 2
END
BUTTON DLG_OK 9 2
BEGIN
PROMPT -12 -1 ""

File diff suppressed because it is too large Load Diff

View File

@ -1,487 +1,471 @@
// cglib01.cpp
// calcolo dei saldi
#include <applicat.h>
#include <date.h>
#include <real.h>
#include <lffiles.h>
#include <isam.h>
#include <utility.h>
#include <config.h>
#include <rmov.h>
#include <mov.h>
#include <saldi.h>
#include <pconti.h>
#include <clifo.h>
#include "cglib.h"
const MAXSTR = 128;
static char __tmp [MAXSTR];
static TFixed_string tmp (__tmp, MAXSTR);
TClifo_list::TClifo_list(int g, int c, char tipocf)
{
TLocalisamfile cf(LF_CLIFO);
destroy();
cf.setkey(3);
cf.zero();
cf.put(CLI_TIPOCF,tipocf);
cf.put(CLI_GRUPPO,g);
cf.put(CLI_CONTO,c);
TRectype rec(cf.curr());
cf.read(_isgteq);
for ( ;!cf.eof();cf.next())
{
if (cf.curr() > rec) break;
TRectype r(cf.curr());
add(r);
}
}
Saldo::Saldo()
{
_saldo_iniziale = 0.00;
_prg_dare = 0.00;
_prg_avere = 0.00;
_saldo = 0.00;
_indbil = 0;
_saldi = new TLocalisamfile(LF_SALDI);
_mov = new TLocalisamfile(LF_MOV);
_rmov = new TLocalisamfile(LF_RMOV);
_clifo = new TLocalisamfile(LF_CLIFO);
}
Saldo::~Saldo()
{
delete _saldi;
delete _mov;
delete _rmov;
delete _clifo;
}
real Saldo::saldofin_esprec(int annoes, int g, int c, long s)
{
real saldo,pdare,pavere,pdaresca,paveresca;
char flag;
TRectype app = ricerca_progr_prec(annoes-1, g, c, s);
flag = app.get(SLD_FLAGSALINI)[0];
saldo = app.get_real(SLD_SALDO);
pdare = app.get_real(SLD_PDARE);
pavere = app.get_real(SLD_PAVERE);
pdaresca = app.get_real(SLD_PDARESCA);
paveresca = app.get_real(SLD_PAVERESCA);
if (flag == 'D')
return saldo+pdaresca-paveresca+pdare-pavere;//saldo finale es. precedente;
else //if (flag == 'A')
return pdaresca-saldo-paveresca+pdare-pavere;
}
real Saldo::calcola_saldo_iniziale(int annoes,int g,int c,long s,int indbil)
{
real saldoini, pdaresca, paveresca;
char flag;
TLocalisamfile& saldi = *_saldi;
saldi.zero();
saldi.put(SLD_GRUPPO,g);
if (c != 0)
saldi.put(SLD_CONTO,c);
if (s != 0)
saldi.put(SLD_SOTTOCONTO,s);
saldi.put(SLD_ANNOES,annoes);
saldi.read();
if (saldi.bad())
saldi.zero();
flag = saldi.get(SLD_FLAGSALINI)[0];
saldoini = saldi.get_real(SLD_SALDO);
pdaresca = saldi.get_real(SLD_PDARESCA);
paveresca = saldi.get_real(SLD_PAVERESCA);
if (saldoini == 0.00) //e il conto e' patrimoniale o d'ordine
if ( (indbil == 1)||(indbil == 2)||(indbil == 5) )
saldoini = saldofin_esprec(annoes, g, c, s);
if (flag == 'D')
return saldoini+pdaresca-paveresca;
else //if (flag == 'A')
return pdaresca-saldoini-paveresca;
}
// La funzione seguente calcola il saldo per data limite o all'ultima immissione es.in /
// corso o precedente, a seconda del valore dei suoi parametri al momento della chiamata
bool Saldo::calcola(int annoes, int annoesprec, int g, int c, long s,
const TDate& data_inf, const TDate& data_sup,
int indbil, bool controllo_competenza, const TDate& inizio_es,
const TDate& fine_es, const TDate& fine_es_prec,bool stp_prov)
{
if (data_sup.ok())
{
if (!calcola_data_limite(annoes, g, c, s, data_inf, data_sup, indbil,
controllo_competenza, inizio_es, fine_es, fine_es_prec,stp_prov))
return FALSE;
}
else
if (!calcola_ultima_immissione(annoes, annoesprec, g, c, s, indbil))
return FALSE;
return TRUE;
}
const char* Saldo::causale_chiusura_es()
{
TConfig conf(CONFIG_DITTA);
tmp = conf.get("CoCaCh");
return __tmp;
}
const char* Saldo::causale_apertura_es()
{
TConfig conf(CONFIG_DITTA);
tmp = conf.get("CoCaAp");
return __tmp;
}
bool Saldo::causale_mov(long nr, const TDate& inizio_es, const TDate& data_sup, TString& provv)
{
TString codcaus;
TDate datareg;
TLocalisamfile& mov = *_mov;
mov.zero();
mov.put (MOV_NUMREG,nr);
if (mov.read() == NOERR)
{
codcaus = mov.get(MOV_CODCAUS);
datareg = mov.get_date(MOV_DATAREG);
provv = mov.get(MOV_PROVVIS);
if (codcaus == causale_chiusura_es())
return TRUE;
if (codcaus == causale_apertura_es())
if ( (datareg < inizio_es) || (datareg > data_sup) )
return TRUE;
}
return FALSE;
}
bool Saldo::calcola_data_limite(int annoes, int g, int c, long s, const TDate& data_inf, const TDate& data_sup, int indbil, bool controllo_competenza, const TDate& inizio_es, const TDate& fine_es, const TDate& fine_es_prec,bool stp_prov)
{
TString sezione, gcs_corr, gcs_prec="", provv = "";
real importo, dep = 0.00;
int gruppo, conto, annoe;
long sottoconto, num_reg;
TLocalisamfile& rmov = *_rmov;
TDate data_rmv;
bool esito = FALSE;
rmov.setkey(2);
rmov.zero();
rmov.put(RMV_GRUPPO,g);
if (c != 0)
rmov.put(RMV_CONTO,c);
if (s != 0)
rmov.put(RMV_SOTTOCONTO,s);
TRectype rec(rmov.curr());
rmov.read(_isgteq);
for ( ; !rmov.eof(); rmov.next())
{
if (rmov.curr() != rec) break;
annoe = rmov.get_int(RMV_ANNOES);
gruppo = rmov.get_int(RMV_GRUPPO);
conto = rmov.get_int(RMV_CONTO);
sottoconto = rmov.get_long(RMV_SOTTOCONTO);
data_rmv = rmov.get_date(RMV_DATAREG);
num_reg = rmov.get_long(RMV_NUMREG);
//se la causale del movimento e' uguale a quella di chiusura, il movimento non va considerato
if (causale_mov(num_reg,inizio_es,data_sup,provv))
break;
if ((!stp_prov) && (provv.trim().not_empty())) //se non e' richiesta stampa
continue; //mov. provvisori li scarto
gcs_corr = format ("%3d%3d%6ld", gruppo, conto, sottoconto);
if (gcs_corr != gcs_prec)
{
gcs_prec = gcs_corr;
dep += calcola_saldo_iniziale(annoe,gruppo,conto,sottoconto,indbil);
}
//controllo sulle date
if (annoe != annoes)
if (annoe != annoes-1)
continue;
if (controllo_competenza)
if ( (annoe == annoes -1) && (data_sup != fine_es) )
continue;
else
if ( (data_rmv <= fine_es) && (data_rmv <= fine_es_prec) ||
(data_rmv > fine_es) )
continue;
if ( (data_rmv < data_inf) || (data_rmv > data_sup) )
continue;
sezione = rmov.get(RMV_SEZIONE);
importo = rmov.get_real(RMV_IMPORTO);
if (importo.is_zero())
continue;
esito = TRUE;
if (sezione == "D") dep += importo;
else dep -= importo;
}
_saldo = dep;
return esito;
}
bool Saldo::calcola_ultima_immissione(int annoes, int annoesprec, int g, int c,
long s, int indbil)
{
//Si considerano i saldi e non piu' i movimenti
int gruppo, conto, annoe;
long sottoconto;
real saldo, pdare, pavere;
TLocalisamfile& saldi = *_saldi;
bool esito = FALSE;
_saldo_iniziale = 0.00;
_prg_dare = 0.00;
_prg_avere = 0.00;
saldi.zero();
if (annoes != 0)
saldi.put(SLD_ANNOES,annoes);
if (g != 0)
saldi.put(SLD_GRUPPO,g);
if (c != 0)
saldi.put(SLD_CONTO,c);
if (s != 0)
saldi.put(SLD_SOTTOCONTO,s);
if (saldi.read() == NOERR)
{
annoe = saldi.get_int(SLD_ANNOES);
gruppo = saldi.get_int(SLD_GRUPPO);
conto = saldi.get_int(SLD_CONTO);
sottoconto = saldi.get_long(SLD_SOTTOCONTO);
saldo = saldi.get_real(SLD_SALDO);
pdare = saldi.get_real(SLD_PDARE);
pavere = saldi.get_real(SLD_PAVERE);
if (annoesprec == 0) //all'ultima immissione es.in corso
{
if ( (pdare == 0)&&(pavere == 0.0) )
{
if ( (indbil == 3) || (indbil == 4) )
return esito;
if ( (indbil == 1) || (indbil == 2) || (indbil == 5) )
{
if (saldo == 0)
{
saldo = saldofin_esprec(annoes,gruppo,conto,sottoconto);
if (saldo == 0.00)
return esito;
}
_saldo_iniziale = saldo;
}
}
else _saldo_iniziale = saldo;
esito = TRUE;
_prg_dare = pdare;
_prg_avere = pavere;
// i tre valori precedenti vengono utilizzati per la stampa bilancio
// di verifica
_saldo = _saldo_iniziale + _prg_dare - _prg_avere;
}
else //all'ultima immissione es.precedente
{
TRecnotype numrec = saldi.recno();
TRectype app = ricerca_progr_prec(annoe-1, gruppo, conto, sottoconto);
annoe = app.get_int (SLD_ANNOES);
pdare = app.get_real(SLD_PDARE);
pavere = app.get_real(SLD_PAVERE);
saldi.readat(numrec);
if ( (pdare == 0) && (pavere == 0) )
return esito;
esito = TRUE;
_prg_dare = pdare;
_prg_avere = pavere;
_saldo = pdare - pavere;
}
}
return esito;
}
TRectype& Saldo::ricerca_progr_prec (int annoesprec, int g, int c, long s)
{
TLocalisamfile& saldi = *_saldi;
saldi.zero();
static TRectype rec(saldi.curr());
if (annoesprec != 0)
saldi.put(SLD_ANNOES,annoesprec);
if (g != 0)
saldi.put(SLD_GRUPPO,g);
if (c != 0)
saldi.put(SLD_CONTO,c);
if (s != 0)
saldi.put(SLD_SOTTOCONTO,s);
saldi.read();
if (saldi.bad())
saldi.zero();
rec = saldi.curr();
return rec;
}
//calcolo dei progressivi attuali
bool Saldo::prg_attuali(int annoes,TConto& conto,int indbil,real& prgdare,real& prgavere)
{
real saldoini, pdare, pavere, pdaresca, paveresca;
char flagsalini;
// cglib01.cpp
// calcolo dei saldi
#include <applicat.h>
#include <date.h>
#include <real.h>
#include <lffiles.h>
#include <isam.h>
#include <utility.h>
#include <config.h>
#include <rmov.h>
#include <mov.h>
#include <saldi.h>
#include <pconti.h>
#include <clifo.h>
#include "cglib.h"
const MAXSTR = 128;
static char __tmp [MAXSTR];
static TFixed_string tmp (__tmp, MAXSTR);
TClifo_list::TClifo_list(int g, int c, char tipocf)
{
TLocalisamfile cf(LF_CLIFO);
destroy();
cf.setkey(3);
cf.zero();
cf.put(CLI_TIPOCF,tipocf);
cf.put(CLI_GRUPPO,g);
cf.put(CLI_CONTO,c);
TRectype rec(cf.curr());
cf.read(_isgteq);
for ( ;!cf.eof();cf.next())
{
if (cf.curr() > rec) break;
TRectype r(cf.curr());
add(r);
}
}
Saldo::Saldo()
{
_saldo_iniziale = ZERO;
_prg_dare = ZERO;
_prg_avere = ZERO;
_saldo = ZERO;
_indbil = 0;
_saldi = new TLocalisamfile(LF_SALDI);
_mov = new TLocalisamfile(LF_MOV);
_rmov = new TLocalisamfile(LF_RMOV);
_clifo = new TLocalisamfile(LF_CLIFO);
_rec = new TRectype(LF_SALDI);
}
Saldo::~Saldo()
{
delete _saldi;
delete _mov;
delete _rmov;
delete _clifo;
delete _rec;
}
real Saldo::saldofin_esprec(int annoes, int g, int c, long s)
{
real saldo,pdare,pavere,pdaresca,paveresca;
char flag;
TLocalisamfile& saldi = *_saldi;
TRecnotype numrec = saldi.recno();
TRectype app = ricerca_progr_prec(annoes-1, g, c, s);
flag = app.get(SLD_FLAGSALINI)[0];
saldo = app.get_real(SLD_SALDO);
pdare = app.get_real(SLD_PDARE);
pavere = app.get_real(SLD_PAVERE);
pdaresca = app.get_real(SLD_PDARESCA);
paveresca = app.get_real(SLD_PAVERESCA);
saldi.readat(numrec);
if (flag == 'D')
return saldo+pdaresca-paveresca+pdare-pavere;
else
return pdaresca-saldo-paveresca+pdare-pavere;
}
real Saldo::calcola_saldo_iniziale(int annoes,int g,int c,long s,int indbil)
{
real saldoini, pdaresca, paveresca;
char flag;
TLocalisamfile& saldi = *_saldi;
saldi.zero();
saldi.put(SLD_GRUPPO,g);
if (c != 0)
saldi.put(SLD_CONTO,c);
if (s != 0)
saldi.put(SLD_SOTTOCONTO,s);
saldi.put(SLD_ANNOES,annoes);
saldi.read();
if (saldi.bad())
saldi.zero();
flag = saldi.get(SLD_FLAGSALINI)[0];
saldoini = saldi.get_real(SLD_SALDO);
pdaresca = saldi.get_real(SLD_PDARESCA);
paveresca = saldi.get_real(SLD_PAVERESCA);
if (saldoini == 0.00) //e il conto e' patrimoniale o d'ordine
if ( (indbil == 1)||(indbil == 2)||(indbil == 5) )
saldoini = saldofin_esprec(annoes, g, c, s);
if (flag == 'D')
return saldoini+pdaresca-paveresca;
else //if (flag == 'A')
return pdaresca-saldoini-paveresca;
}
// La funzione seguente calcola il saldo per data limite o all'ultima immissione es.in /
// corso o precedente, a seconda del valore dei suoi parametri al momento della chiamata
bool Saldo::calcola(int annoes, int annoesprec, int g, int c, long s,
const TDate& data_inf, const TDate& data_sup,
int indbil, bool controllo_competenza, const TDate& inizio_es,
const TDate& fine_es, const TDate& fine_es_prec,bool stp_prov)
{
if (data_sup.ok())
{
if (!calcola_data_limite(annoes, g, c, s, data_inf, data_sup, indbil,
controllo_competenza, inizio_es, fine_es, fine_es_prec,stp_prov))
return FALSE;
}
else
if (!calcola_ultima_immissione(annoes, annoesprec, g, c, s, indbil))
return FALSE;
return TRUE;
}
const char* Saldo::causale_chiusura_es()
{
TConfig conf(CONFIG_DITTA);
tmp = conf.get("CoCaCh");
return __tmp;
}
const char* Saldo::causale_apertura_es()
{
TConfig conf(CONFIG_DITTA);
tmp = conf.get("CoCaAp");
return __tmp;
}
bool Saldo::causale_mov(long nr, const TDate& inizio_es, const TDate& data_sup, TString& provv)
{
TString codcaus;
TDate datareg;
TLocalisamfile& mov = *_mov;
mov.zero();
mov.put (MOV_NUMREG,nr);
if (mov.read() == NOERR)
{
codcaus = mov.get(MOV_CODCAUS);
datareg = mov.get_date(MOV_DATAREG);
provv = mov.get(MOV_PROVVIS);
if (codcaus == causale_chiusura_es())
return TRUE;
if (codcaus == causale_apertura_es())
if ( (datareg < inizio_es) || (datareg > data_sup) )
return TRUE;
}
return FALSE;
}
bool Saldo::calcola_data_limite(int annoes, int g, int c, long s, const TDate& data_inf, const TDate& data_sup, int indbil, bool controllo_competenza, const TDate& inizio_es, const TDate& fine_es, const TDate& fine_es_prec,bool stp_prov)
{
TString sezione, gcs_corr, gcs_prec="", provv = "";
real importo, dep = 0.00;
int gruppo, conto, annoe;
long sottoconto, num_reg;
TLocalisamfile& rmov = *_rmov;
TDate data_rmv;
bool esito = FALSE;
rmov.setkey(2);
rmov.zero();
rmov.put(RMV_GRUPPO,g);
if (c != 0)
rmov.put(RMV_CONTO,c);
if (s != 0)
rmov.put(RMV_SOTTOCONTO,s);
TRectype rec(rmov.curr());
rmov.read(_isgteq);
for ( ; !rmov.eof(); rmov.next())
{
if (rmov.curr() != rec) break;
annoe = rmov.get_int(RMV_ANNOES);
gruppo = rmov.get_int(RMV_GRUPPO);
conto = rmov.get_int(RMV_CONTO);
sottoconto = rmov.get_long(RMV_SOTTOCONTO);
data_rmv = rmov.get_date(RMV_DATAREG);
num_reg = rmov.get_long(RMV_NUMREG);
//se la causale del movimento e' uguale a quella di chiusura, il movimento non va considerato
if (causale_mov(num_reg,inizio_es,data_sup,provv))
break;
if ((!stp_prov) && (provv.trim().not_empty())) //se non e' richiesta stampa
continue; //mov. provvisori li scarto
gcs_corr = format ("%3d%3d%6ld", gruppo, conto, sottoconto);
if (gcs_corr != gcs_prec)
{
gcs_prec = gcs_corr;
dep += calcola_saldo_iniziale(annoe,gruppo,conto,sottoconto,indbil);
}
//controllo sulle date
if (annoe != annoes)
if (annoe != annoes-1)
continue;
if (controllo_competenza)
if ( (annoe == annoes -1) && (data_sup != fine_es) )
continue;
else
if ( (data_rmv <= fine_es) && (data_rmv <= fine_es_prec) ||
(data_rmv > fine_es) )
continue;
if ( (data_rmv < data_inf) || (data_rmv > data_sup) )
continue;
sezione = rmov.get(RMV_SEZIONE);
importo = rmov.get_real(RMV_IMPORTO);
if (importo.is_zero())
continue;
esito = TRUE;
if (sezione == "D") dep += importo;
else dep -= importo;
}
_saldo = dep;
return esito;
}
bool Saldo::calcola_ultima_immissione(int annoes, int annoesprec, int g, int c,
long s, int indbil)
{
//Si considerano i saldi e non piu' i movimenti
char sezione;
int gruppo, conto, annoe;
long sottoconto;
TLocalisamfile& saldi = *_saldi;
bool esito = TRUE;
_saldo_iniziale = ZERO;
_prg_dare = ZERO;
_prg_avere = ZERO;
_saldo = ZERO;
saldi.zero();
if (annoes != 0) saldi.put(SLD_ANNOES,annoes);
if (g != 0) saldi.put(SLD_GRUPPO,g);
if (c != 0) saldi.put(SLD_CONTO,c);
if (s != 0) saldi.put(SLD_SOTTOCONTO,s);
if (saldi.read() == NOERR)
{
annoe = saldi.get_int(SLD_ANNOES);
gruppo = saldi.get_int(SLD_GRUPPO);
conto = saldi.get_int(SLD_CONTO);
sottoconto = saldi.get_long(SLD_SOTTOCONTO);
_saldo_iniziale = saldi.get_real(SLD_SALDO);
_prg_dare = saldi.get_real(SLD_PDARE);
_prg_avere = saldi.get_real(SLD_PAVERE);
sezione = saldi.get_char(SLD_FLAGSALINI);
if (sezione == 'A') _saldo_iniziale = -_saldo_iniziale;
if (annoesprec == 0) //all'ultima immissione es.in corso
{
// if (indbil == 3 || indbil == 4)
// return esito;
if (indbil == 1 || indbil == 2 || indbil == 5)
if (_saldo_iniziale == ZERO)
_saldo_iniziale += saldofin_esprec(annoes,gruppo,conto,sottoconto);
// i tre valori precedenti vengono utilizzati per la stampa bilancio
// di verifica
_saldo = _saldo_iniziale + _prg_dare - _prg_avere;
}
else //all'ultima immissione es.precedente
{
TRecnotype numrec = saldi.recno();
TRectype app = ricerca_progr_prec(annoe-1, gruppo, conto, sottoconto);
annoe = app.get_int (SLD_ANNOES);
_prg_dare = app.get_real(SLD_PDARE);
_prg_avere = app.get_real(SLD_PAVERE);
#ifdef DBG
TString16 pd, pa;
pa = _prg_avere.string();
pd = _prg_dare.string();
warning_box ("pdare=%s pavere=%s", (const char*)pd, (const char *)pa);
#endif
saldi.readat(numrec);
_saldo = _prg_dare - _prg_avere;
}
}
return esito;
}
TRectype& Saldo::ricerca_progr_prec (int annoesprec, int g, int c, long s)
{
TLocalisamfile& saldi = *_saldi;
saldi.zero();
// static TRectype rec(saldi.curr());
if (annoesprec != 0) saldi.put(SLD_ANNOES,annoesprec);
if (g != 0) saldi.put(SLD_GRUPPO,g);
if (c != 0) saldi.put(SLD_CONTO,c);
if (s != 0) saldi.put(SLD_SOTTOCONTO,s);
saldi.read();
if (saldi.bad()) saldi.zero();
*_rec = saldi.curr();
return *_rec;
}
//calcolo dei progressivi attuali
bool Saldo::prg_attuali(int annoes,TConto& conto,int indbil,real& prgdare,real& prgavere)
{
real saldoini, pdare, pavere, pdaresca, paveresca;
char flagsalini;
int g = conto.gruppo();
int c = conto.conto();
long s = conto.sottoconto();
TLocalisamfile& saldi = *_saldi;
saldi.zero();
saldi.put(SLD_GRUPPO,g);
if (conto.conto() != 0)
saldi.put(SLD_CONTO,c);
if (conto.sottoconto() != 0)
saldi.put(SLD_SOTTOCONTO,s);
saldi.put(SLD_ANNOES,annoes);
if (saldi.read() == NOERR)
{
flagsalini = saldi.get(SLD_FLAGSALINI)[0];
saldoini = saldi.get_real(SLD_SALDO);
if ( (indbil == 1) || (indbil == 2) || (indbil == 5) )
if (saldoini == 0)
{
saldoini = saldofin_esprec(annoes,conto.gruppo(),conto.conto(),conto.sottoconto());
if (saldoini > 0.00)
flagsalini = 'D';
else flagsalini = 'A';
}
pdare = saldi.get_real(SLD_PDARE);
pavere = saldi.get_real(SLD_PAVERE);
pdaresca = saldi.get_real(SLD_PDARESCA);
paveresca = saldi.get_real(SLD_PAVERESCA);
if (flagsalini == 'D')
{
prgdare = saldoini + pdare + pdaresca;
prgavere = pavere + paveresca;
}
else
{
prgdare = pdare + pdaresca;
prgavere = saldoini + pavere + paveresca;
}
}
return TRUE;
}
bool Saldo::prg_mov_eliminati(int annoes,TConto& conto,int indbil,real& prgdare,real& prgavere)
{
real saldoini, pdaresca, paveresca;
char flagsalini;
TLocalisamfile& saldi = *_saldi;
saldi.zero();
saldi.put(SLD_GRUPPO,conto.gruppo());
if (conto.conto() != 0)
saldi.put(SLD_CONTO,conto.conto());
if (conto.sottoconto() != 0)
saldi.put(SLD_SOTTOCONTO,conto.sottoconto());
saldi.put(SLD_ANNOES,annoes);
if (saldi.read() == NOERR)
{
flagsalini = saldi.get(SLD_FLAGSALINI)[0];
saldoini = saldi.get_real(SLD_SALDO);
if ( (indbil == 1) || (indbil == 2) || (indbil == 5) )
if (saldoini == 0)
{
saldoini = saldofin_esprec(annoes,conto.gruppo(),conto.conto(),conto.sottoconto());
if (saldoini > 0.00)
flagsalini = 'D';
else flagsalini = 'A';
}
pdaresca = saldi.get_real(SLD_PDARESCA);
paveresca = saldi.get_real(SLD_PAVERESCA);
if (flagsalini == 'D')
{
prgdare = saldoini + pdaresca;
prgavere = paveresca;
}
else
{
prgdare = pdaresca;
prgavere = saldoini + paveresca;
}
}
return TRUE;
}
TLocalisamfile * get_descr_cf (TLocalisamfile * pconti,
TLocalisamfile * clifo, int g, int c, long s)
{
pconti->zero();
pconti->put (PCN_GRUPPO, g);
pconti->put (PCN_CONTO , c);
pconti->put (PCN_SOTTOCONTO, s);
pconti->read();
if (pconti->good())
return pconti;
TString tipocf = pconti->get(PCN_TMCF);
long codcf = s;
clifo->zero();
clifo->put(CLI_CODCF, codcf);
clifo->put(CLI_TIPOCF, tipocf);
clifo->read();
if (clifo->good())
return clifo;
return NULL;
}
TLocalisamfile& saldi = *_saldi;
saldi.zero();
saldi.put(SLD_GRUPPO,g);
if (conto.conto() != 0)
saldi.put(SLD_CONTO,c);
if (conto.sottoconto() != 0)
saldi.put(SLD_SOTTOCONTO,s);
saldi.put(SLD_ANNOES,annoes);
if (saldi.read() == NOERR)
{
flagsalini = saldi.get(SLD_FLAGSALINI)[0];
saldoini = saldi.get_real(SLD_SALDO);
if ( (indbil == 1) || (indbil == 2) || (indbil == 5) )
if (saldoini == 0)
{
saldoini = saldofin_esprec(annoes,conto.gruppo(),conto.conto(),conto.sottoconto());
if (saldoini > 0.00)
flagsalini = 'D';
else flagsalini = 'A';
}
pdare = saldi.get_real(SLD_PDARE);
pavere = saldi.get_real(SLD_PAVERE);
pdaresca = saldi.get_real(SLD_PDARESCA);
paveresca = saldi.get_real(SLD_PAVERESCA);
if (flagsalini == 'D')
{
prgdare = saldoini + pdare + pdaresca;
prgavere = pavere + paveresca;
}
else
{
prgdare = pdare + pdaresca;
prgavere = saldoini + pavere + paveresca;
}
}
return TRUE;
}
bool Saldo::prg_mov_eliminati(int annoes,TConto& conto,int indbil,real& prgdare,real& prgavere)
{
real saldoini, pdaresca, paveresca;
char flagsalini;
TLocalisamfile& saldi = *_saldi;
saldi.zero();
saldi.put(SLD_GRUPPO,conto.gruppo());
if (conto.conto() != 0)
saldi.put(SLD_CONTO,conto.conto());
if (conto.sottoconto() != 0)
saldi.put(SLD_SOTTOCONTO,conto.sottoconto());
saldi.put(SLD_ANNOES,annoes);
if (saldi.read() == NOERR)
{
flagsalini = saldi.get(SLD_FLAGSALINI)[0];
saldoini = saldi.get_real(SLD_SALDO);
if ( (indbil == 1) || (indbil == 2) || (indbil == 5) )
if (saldoini == 0)
{
saldoini = saldofin_esprec(annoes,conto.gruppo(),conto.conto(),conto.sottoconto());
if (saldoini > 0.00)
flagsalini = 'D';
else flagsalini = 'A';
}
pdaresca = saldi.get_real(SLD_PDARESCA);
paveresca = saldi.get_real(SLD_PAVERESCA);
if (flagsalini == 'D')
{
prgdare = saldoini + pdaresca;
prgavere = paveresca;
}
else
{
prgdare = pdaresca;
prgavere = saldoini + paveresca;
}
}
return TRUE;
}
TLocalisamfile * get_descr_cf (TLocalisamfile * pconti,
TLocalisamfile * clifo, int g, int c, long s)
{
pconti->zero();
pconti->put (PCN_GRUPPO, g);
pconti->put (PCN_CONTO , c);
pconti->put (PCN_SOTTOCONTO, s);
pconti->read();
if (pconti->good())
return pconti;
TString tipocf = pconti->get(PCN_TMCF);
long codcf = s;
clifo->zero();
clifo->put(CLI_CODCF, codcf);
clifo->put(CLI_TIPOCF, tipocf);
clifo->read();
if (clifo->good())
return clifo;
return NULL;
}